AI 编码代理会话管理中枢 — 统一管理 Claude Code / Codex / OpenCode / Antigravity 等多种 AI 编码代理的会话记录
核心价值:让用户掌控自己的 AI 编码上下文 — 跨代理压缩和迁移是核心竞争力
自动发现并解析 4 种主流 AI 编码代理的会话数据:
| 代理 | 数据格式 | 数据源路径 |
|---|---|---|
| Claude Code | JSONL | ~/.claude/projects/ |
| Codex CLI | JSONL | ~/.codex/sessions/ |
| OpenCode | SQLite | ~/.local/share/opencode/sessions.db |
| Antigravity | vscdb + Base64 | ~/.gemini/antigravity/ |
纯规则引擎实现(不依赖外部 LLM),参考 AIST Protocol 的分级压缩策略:
| 级别 | 目标 Token | 包含内容 |
|---|---|---|
| MAX | ~950 | Essence + Decisions + Files + Next Steps + 最近 20 条消息 |
| HIGH | ~700 | Essence + Decisions + Files + Next Steps + 最近 10 条消息 |
| MEDIUM | ~450 | Essence + Top 5 Decisions + Files + 最近 4 条消息 |
| LOW | ~250 | Essence + Top 3 Decisions + Next Steps |
| MIN | ~120 | Goal + Status |
通过 Copy Ref / Copy Prompt 一键生成结构化交接文本,可直接粘贴到其他 AI 代理继续工作。
- Forensics: 全量消息,无过滤
- Mainline + SubAgents: 过滤操作性填充,保留子代理调用(默认)
- Mainline: 只保留有价值的用户/助手消息
基于 SQLite FTS5 引擎,支持中英文混合搜索,搜索范围覆盖消息内容、工具输入和工具输出,关键词高亮显示。
- Markdown + Obsidian: 适合知识库归档
- JSON: 适合程序化处理
- HTML: 适合分享和浏览
无需 LLM 的纯规则引擎,自动提取 Final Answer、Key Decisions、Files Changed、Error Patterns 四类关键信息。
- Timeline: 从会话中提取里程碑事件时间线
- Related Sessions: 基于文件重叠和标签相似度发现关联会话
- Sub-Agent Navigation: 自动重建 parent-child 会话层级
- Curation Panel: 会话质量标记和知识提取
- 按工作区(project_path)分组,折叠/展开
- 按日期分组,Sticky 日期标头
- 实时过滤统计(X/Y sessions)
- 明暗主题一键切换,Nord 配色系统
- 完整键盘导航:↑↓ 列表移动、Enter 打开、Esc 返回、/ 搜索
- 内置 HTTP 服务器(axum),通过
--server标志启动 - Bearer Token 认证
- WebSocket 实时推送会话变更
- Token 消费趋势: 按天/周/月统计,支持按代理/项目/模型分组
- 预算告警: 可配置阈值,超限视觉提醒
- AG Brain 浏览器: Antigravity brain 产物文件预览
- 子代理转录嵌入: 在父会话中展开子代理完整对话
- 孤儿数据清理: 检测无源文件的会话并一键清理
| 层级 | 技术 | 版本 |
|---|---|---|
| 桌面框架 | Tauri | v2.10 |
| 后端语言 | Rust | 2021 edition |
| 前端框架 | React | 19 |
| 前端语言 | TypeScript | 6.0 |
| 构建工具 | Vite | 8.0 |
| 样式 | Tailwind CSS | 4.2 |
| 图标 | Lucide React | 1.8 |
| 数据库 | SQLite + FTS5 | bundled (rusqlite 0.31) |
| HTTP 服务器 | axum | 0.7 |
| 文件监听 | notify | 6 |
- Node.js 18+
- Rust 1.70+ (rustup)
- 系统 WebView 运行时 (Windows 已内置 WebView2, Linux 需要 webkit2gtk)
# 克隆仓库
git clone https://github.com/summerchaserwwz/sessionhub.git
cd sessionhub
# 安装前端依赖
npm install
# 开发模式运行(前端热更新 + Rust 文件监听)
npx tauri dev
# 构建发布版本
npx tauri build构建产物位于 src-tauri/target/release/sessionhub.exe(约 13MB 单二进制)。
# 启动 HTTP 服务器(默认端口 7700)
sessionhub.exe --server
# 自定义端口和认证令牌
sessionhub.exe --server --port 8080 --token my-secret-token
# 访问 Web UI
# http://localhost:7700
# API 请求需携带 Authorization: Bearer <token>sessionhub/
├── src/ # React 前端
│ ├── App.tsx # 根组件 + 路由
│ ├── main.tsx # React 挂载点
│ ├── app.css # 全局样式 + 主题变量
│ ├── types/index.ts # TypeScript 类型定义
│ ├── lib/
│ │ ├── tauri-api.ts # Tauri IPC 封装层
│ │ ├── agents.ts # 代理配置与显示
│ │ ├── compress.ts # 压缩级别常量
│ │ └── utils.ts # 工具函数
│ └── components/
│ ├── layout/
│ │ ├── Sidebar.tsx # 侧边栏导航
│ │ ├── AgentIcon.tsx # 代理类型图标
│ │ └── KeyboardHelp.tsx # 快捷键帮助面板
│ └── sessions/
│ ├── SessionList.tsx # 会话列表(搜索/过滤/分组)
│ ├── SessionViewer.tsx # 会话详情查看器
│ ├── QuickSummary.tsx # 快速摘要卡片
│ ├── ReadingModeSelector.tsx # 阅读模式切换
│ ├── SubAgentNav.tsx # 子代理导航
│ ├── TagFilterBar.tsx # 标签过滤栏
│ ├── TimelinePanel.tsx # 时间线面板
│ ├── RelatedTasks.tsx # 关联会话面板
│ ├── CurationPanel.tsx # 策展面板
│ ├── CostPanel.tsx # Token 消费分析
│ ├── CleanupPanel.tsx # 孤儿数据清理
│ └── BrainBrowser.tsx # AG Brain 浏览器
│
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── main.rs # Windows 入口
│ │ ├── lib.rs # Tauri 初始化 + 双模式启动
│ │ ├── commands.rs # 46 个 IPC 命令
│ │ ├── db.rs # SQLite 数据层(FTS5 全文搜索)
│ │ ├── agents.rs # Claude Code / Codex / OpenCode 解析器
│ │ ├── agents_antigravity.rs # Antigravity 解析器(vscdb + Base64)
│ │ ├── compressor.rs # 5 级压缩引擎
│ │ ├── export.rs # 3 格式导出引擎
│ │ ├── reading_filter.rs # 阅读模式过滤器
│ │ ├── summary_extractor.rs # Quick Summary 提取器
│ │ ├── subagent_resolver.rs # 子代理关系解析
│ │ ├── related_scorer.rs # 关联会话评分
│ │ ├── timeline.rs # 时间线提取
│ │ ├── noise_cleaner.rs # 噪声清理
│ │ ├── server.rs # HTTP 服务器(axum + WebSocket)
│ │ └── watcher.rs # 文件系统监听器
│ ├── Cargo.toml # Rust 依赖
│ └── tauri.conf.json # Tauri 窗口/打包配置
│
├── wiki/ # 项目 Wiki 文档
├── index.html # HTML 入口
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
└── package.json # 前端依赖
┌──────────────────────────────────────────────┐
│ Frontend (React 19) │
│ SessionList ─ SessionViewer ─ CostPanel ... │
│ │ │
│ tauri-api.ts (IPC / HTTP 双模式) │
└──────┬───────────────────────────────────────┘
│ invoke() / fetch()
┌──────▼───────────────────────────────────────┐
│ Backend (Rust) │
│ commands.rs ← 46 个 IPC 命令注册 │
│ │ │
│ ┌────▼────┐ ┌──────────┐ ┌──────────┐ │
│ │ agents │ │compressor│ │ export │ │
│ │ parsers │ │ engine │ │ engine │ │
│ └────┬────┘ └──────────┘ └──────────┘ │
│ │ │
│ ┌────▼────────────────────────────────┐ │
│ │ SQLite + FTS5 (rusqlite) │ │
│ │ sessions | messages | artifacts │ │
│ └─────────────────────────────────────┘ │
│ │
│ server.rs (axum) ← --server 模式 │
│ watcher.rs (notify) ← 文件变更监听 │
└──────────────────────────────────────────────┘
- 启动时:
scan_all_agents()扫描 4 种代理的会话目录 → 解析为标准 Session/Message → 写入 SQLite - 查看时: 前端通过 IPC 调用后端命令 → 后端查询 SQLite → 返回 JSON 响应
- 压缩时: 选择会话 + 压缩级别 → 规则引擎提取关键信息 → 生成结构化 Markdown
- 导出时: 选择格式 → 渲染模板 → 写入文件
- Server 模式: axum HTTP 服务器复用所有后端逻辑,WebSocket 推送实时变更
# 仅启动 Vite 开发服务器(不启动 Rust 后端)
npm run dev
# TypeScript 类型检查
npx tsc --noEmit
# 构建前端
npm run build# 编译检查
cd src-tauri && cargo check
# 运行测试
cd src-tauri && cargo test
# 构建发布版
cd src-tauri && cargo build --release# Tauri dev 同时启动前端和后端,支持热更新
npx tauri dev| 表名 | 说明 |
|---|---|
sessions |
会话元数据(标题、代理类型、项目路径、token 统计等) |
messages |
消息内容(角色、文本、工具调用、token 数) |
messages_fts |
FTS5 虚拟表(全文搜索索引) |
subagent_calls |
子代理调用记录 |
artifacts |
会话产出物(代码文件等) |
transfers |
跨代理传递记录 |
tags_index |
标签索引 |
quick_summaries |
Quick Summary 缓存 |
数据库位置:{平台应用数据目录}/sessionhub.db
- Windows:
%APPDATA%/sessionhub/sessionhub.db - macOS:
~/Library/Application Support/sessionhub/sessionhub.db - Linux:
~/.local/share/sessionhub/sessionhub.db
所有端点需要 Authorization: Bearer <token> 认证头。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/sessions |
会话列表(支持 ?agent=&starred=true) |
| GET | /api/sessions/:id |
会话详情 + 消息 |
| GET | /api/search?q=keyword |
全文搜索 |
| GET | /api/stats |
仪表盘统计 |
| GET | /api/cost/trends?interval=day&days=30 |
Token 消费趋势 |
| GET | /api/cost/breakdown?group_by=agent |
消费分组统计 |
| GET | /api/orphans |
检测孤儿会话 |
| DELETE | /api/orphans |
批量删除孤儿会话 |
| POST | /api/refresh |
触发会话重新扫描 |
| GET | /api/ws |
WebSocket 实时事件推送 |
MIT License