Skip to content

Repository files navigation

SessionHub

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/

5 级上下文压缩

纯规则引擎实现(不依赖外部 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 代理继续工作。

3 种阅读模式

  • Forensics: 全量消息,无过滤
  • Mainline + SubAgents: 过滤操作性填充,保留子代理调用(默认)
  • Mainline: 只保留有价值的用户/助手消息

全文搜索

基于 SQLite FTS5 引擎,支持中英文混合搜索,搜索范围覆盖消息内容、工具输入和工具输出,关键词高亮显示。

3 格式导出

  • Markdown + Obsidian: 适合知识库归档
  • JSON: 适合程序化处理
  • HTML: 适合分享和浏览

Quick Summary 速览

无需 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 返回、/ 搜索

远程访问(Server 模式)

  • 内置 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 单二进制)。

Server 模式

# 启动 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) ← 文件变更监听           │
└──────────────────────────────────────────────┘

数据流

  1. 启动时: scan_all_agents() 扫描 4 种代理的会话目录 → 解析为标准 Session/Message → 写入 SQLite
  2. 查看时: 前端通过 IPC 调用后端命令 → 后端查询 SQLite → 返回 JSON 响应
  3. 压缩时: 选择会话 + 压缩级别 → 规则引擎提取关键信息 → 生成结构化 Markdown
  4. 导出时: 选择格式 → 渲染模板 → 写入文件
  5. 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

API 端点(Server 模式)

所有端点需要 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


致谢

  • Tauri — 高性能跨平台桌面框架
  • rusqlite — Rust SQLite 绑定
  • axum — Ergonomic Rust web framework
  • Lucide — 精美开源图标库

About

AI coding agent session hub — manage, compress, transfer sessions across Claude Code / Codex / OpenCode / Antigravity

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages