CatheadOwl/session-manager

GitHub: CatheadOwl/session-manager

一款基于 Tauri 的桌面应用,用于浏览、搜索、归档和清理本地 AI 编码代理(如 Claude Code、Codex 等)的会话日志。

Stars: 3 | Forks: 0

Session Manager # Session Manager **浏览、搜索、检查、归档和清理本地 AI 编码代理会话。** [![平台](https://img.shields.io/badge/platform-Windows%20%7C%20macOS-blue?style=flat-square)](#) [![Tauri](https://img.shields.io/badge/Tauri-v2-ffc131?style=flat-square&logo=tauri&logoColor=black)](https://tauri.app) [![React](https://img.shields.io/badge/React-18-61dafb?style=flat-square&logo=react&logoColor=white)](https://react.dev) [![Rust](https://img.shields.io/badge/Rust-1.85+-dea584?style=flat-square&logo=rust&logoColor=white)](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 列表 ![Session 列表概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/38/386dc43ef4fc95a0da8e66bbe248499884a9e62dc8f373503fe10b7d9023f8e2.png) ### Fork 树视图 ![Fork 树视图](https://static.pigsec.cn/wp-content/uploads/repos/cas/b1/b1683b7376d1678e310e436464cdb6f6ebf16743a4fd8cbdfa5e90ad9ee8c510.png) ### 问答详情面板 ![问答详情](https://static.pigsec.cn/wp-content/uploads/repos/cas/63/634f1f1534bfa53a3aa3a4895980e70f3db21aa1269b8b828401a4ee111a5de8.png) ### 已归档的 Session ![归档范围](https://static.pigsec.cn/wp-content/uploads/repos/cas/fb/fbad71538efd28d236dac3a1e48b12e278948f5f17a7f776cbe8537b4ae71aed.png) ## 受支持的 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)
标签:AI编程助手, React, Rust, Syscalls, Tauri, 会话管理, 可视化界面, 桌面应用, 网络流量审计, 通知系统