
# Session Manager
**浏览、搜索、检查、归档和清理本地 AI 编码代理会话。**
[](#)
[](https://tauri.app)
[](https://react.dev)
[](https://www.rust-lang.org)
[概述](#overview) | [功能](#features) | [截图](#screenshots) | [提供者](#supported-providers) | [快速开始](#getting-started) | [架构](#architecture)
## 概述
Session Manager 是一个用于处理本地 AI 编码代理会话日志的 Tauri 桌面应用。它会扫描已知的 session 目录,按项目文件夹对 session 进行分组,并提供一个三栏式工作区,方便您在文件夹、session 列表、fork 树和消息详情之间进行切换。
该项目受 [CC Switch 的 Session Manager](https://github.com/farion1231/cc-switch/blob/main/docs/user-manual/en/3-extensions/3.4-sessions.md) 启发,但更专注于 session 浏览和文件级别的管理。
## 功能
- **项目文件夹导航** - session 按工作目录分组,支持置顶文件夹以及活跃/归档范围切换。
- **列表和 fork 树视图** - 在扁平的 session 列表和为共享 prompt 历史的 session 计算出的 fork 树之间切换。点击 fork 节点可直接跳转到详情面板中的分歧点。
- **本地全文搜索** - FlexSearch 会索引 session 标题、摘要、项目路径、provider 和 session ID,并在列表/树中高亮显示匹配项。
- **消息内搜索** - 在当前打开的 session 消息中查找文本,支持匹配计数、上一个/下一个导航和内联高亮。
- **Session 详情检查** - 查看完整消息、紧凑的问答对、元数据、恢复命令、源路径、工具调用/结果,以及 provider 公开时的 token 使用情况。
- **Markdown 渲染** - 在渲染的 Markdown(GFM + 换行符)和原始文本之间切换消息内容。
- **星标会话** - 标记重要的 session 并将列表过滤为星标项。
- **归档和恢复** - 在活跃和归档目录之间移动受支持的 session,包括文件夹级别的批量归档/恢复。
- **批量删除** - 在列表视图中选择多个 session 并将其发送到系统回收站。
- **更安全的破坏性操作** - 在将 session 文件及任何附属目录移入回收站之前,删除操作会验证 provider 根目录和 session ID。
- **Provider 适配器** - 每个受支持的数据源均作为 Rust provider 实现,而前端则使用一个共享的 session API。
- **窗口状态持久化** - 应用在多次启动之间会恢复大小、位置和最大化状态。
## 截图
### 带有项目文件夹的 Session 列表

### Fork 树视图

### 问答详情面板

### 已归档的 Session

## 受支持的 Provider
| Provider | 状态 | 默认 session 位置 |
|----------|--------|--------------------------|
| Claude Code | Stable | `~/.claude/projects/` |
| Codex | Stable | `~/.codex/sessions/` |
| Gemini CLI | Experimental | `~/.gemini/tmp/*/chats/` |
| OpenCode | Experimental | `$XDG_DATA_HOME/opencode/storage/` 或 `~/.local/share/opencode/storage/` |
| OpenClaw | Experimental | `~/.openclaw/agents/` |
| Hermes | Experimental | `~/.config/hermes/sessions/` |
| Qoder | Experimental | `~/.qoder/projects/`, `~/.qoder-cn/projects/` |
## 快速开始
### 前置条件
- [Node.js](https://nodejs.org/) >= 20 和 [pnpm](https://pnpm.io/) >= 10
- [Rust 工具链](https://rustup.rs/) >= 1.85
- 适用于您的操作系统的 [Tauri 系统前提条件](https://tauri.app/start/prerequisites/)
### 在开发环境中运行
```
pnpm install
pnpm tauri dev
```
### 构建桌面安装包
```
pnpm tauri build
```
安装程序将生成在 `src-tauri/target/release/bundle/` 目录下。
### 实用检查
```
pnpm typecheck
pnpm build
cargo test --manifest-path src-tauri/Cargo.toml
```
## 架构
```
src/ # Frontend: React + TypeScript + Vite
├── components/sessions/ # Three-column session UI, list/tree/detail views
├── hooks/ # UI state, queries, mutations, search, interactions
├── lib/ # Tauri API facade, domain helpers, query cache
├── icons/ # Provider brand SVGs and metadata
└── styles/ # Plain CSS, split by area (layout, sidebar, detail, tree…)
src-tauri/src/ # Backend: Rust + Tauri v2
├── commands/ # Tauri command handlers
├── session_manager/ # Scan, parse, read, metadata, archive, delete
│ └── providers/ # Per-provider adapters
├── fork_tree/ # Hash-chain/UUID-chain fork detection and cache
├── config.rs # Provider path discovery and env overrides
└── fs_utils.rs # Filesystem traversal helpers
```
关键实现要点:
- **哈希链 fork 检测** - 通过比较用户输入的哈希链(SHA-256,前 8 位十六进制)来关联 session;最长公共前缀匹配可重建谱系,即使 provider 没有记录明确的父 ID。
- **有界元数据扫描** - 列表视图仅读取每个 JSONL 文件的开头/末尾,而不是解析完整对话。
- **可弃用的 fork 树缓存** - fork 分析会持久化一个由源路径索引且受版本控制的缓存;缺失的条目会按需计算,过期的条目会被修剪,丢失文件则会触发完全重新计算。
## 技术栈
| 层级 | 技术 |
|-------|--------------|
| 前端 | React 18, TypeScript, Vite, TanStack Query, FlexSearch, lucide-react, react-markdown, remark-gfm |
| 后端 | Rust, Tauri v2, serde, chrono, sha2, dirs, trash |
| 样式 | 原生 CSS (区域作用域) |
| 构建 | pnpm, cargo, Tauri CLI |
## 许可证
[MIT](LICENSE)