# 桌面端产品重构规划
## 背景
`spool` 当前已经具备若干底层能力:
- 本地检索与项目路由
- wakeup packet 生成
- memory lifecycle / ledger
- MCP gateway
- 可选 daemon 读路径
- 最小 Tauri host 与桌面壳
但当前桌面端的问题也非常明确:
1. 使用门槛过高,打开后需要手动理解太多概念
2. 主界面像调试台,不像面向日常工作的产品
3. 用户目标是“给 AI 注入最有用的上下文”,但界面默认并没有围绕这个目标组织
4. “会话浏览”目前只是原型,不足以支撑用户回看真实 AI 对话
5. MCP 是否启用、是否生效、是否注入到当前环境都不可见
这导致当前工具在产品体验上处于“不伦不类”的状态:
- 既不像 `cc-switch` 那样围绕真实本机会话工作
- 也不像 `llmwiki` 那样围绕知识沉淀与 AI 协作形成清晰闭环
## 本次重构的产品目标
桌面端不再是“memory 生命周期调试面板”,而应重构为:
**一个本地 AI 工作增强台**
它的核心作用是:
1. 识别用户正在使用的 AI 会话
2. 感知该会话所在的当前工作目录
3. 从 Obsidian 知识库和本地 memory 中提取最有用的上下文
4. 明确展示 MCP / 注入状态
5. 让用户以最低操作成本把上下文带入当前 AI 工作流
## 目标用户体验
### 理想体验
用户第一次进入时:
1. 设置 Obsidian 知识库目录
2. 设置默认工作区或项目识别规则
3. 启用 MCP 或注入能力
之后每次使用时:
1. 桌面端自动列出本机最近 AI 会话
2. 用户点开一个会话
3. 工具自动识别:
- provider
- 会话标题
- 当前工作目录
- 最近用户问题
4. 工具自动生成:
- 推荐上下文
- wakeup packet
- 推荐知识片段
5. 用户只需要:
- 一键复制注入内容
- 或查看为什么推荐这些上下文
### 非目标
桌面端不应成为:
- 通用知识库编辑器
- 大而全的 memory 运维后台
- 又一个需要频繁手工维护的配置中心
- 只服务某一个 AI 平台的绑定工具
## 产品定位更新
桌面端应从当前的:
- 调试型 workbench
转向新的定位:
- **会话优先**
- **注入优先**
- **知识增强优先**
- **低操作成本优先**
## 参考产品与可借鉴点
### `cc-switch`
应借鉴的方向:
- 真实本机会话浏览
- 会话作为主入口
- 用户不需要先理解底层 memory 模型
不应照搬的部分:
- 账号切换相关逻辑
- 与 `spool` 无关的代理或模型切换管理
### `llmwiki`
应借鉴的方向:
- 三层知识结构:
- 原始来源
- 编译后的知识层
- 提供给 AI 的工具层
- 让复杂能力隐藏在清晰产品流之后
- 不要求用户先看到所有内部机制
不应照搬的部分:
- wiki-first 产品形态
- 偏云端/多服务的复杂架构
- 以 Claude 写 wiki 为主的交互方式
## 重新定义桌面端的信息架构
### 一级导航
桌面端应收敛为 4 个一级区域:
1. **当前会话**
2. **上下文注入**
3. **会话浏览**
4. **设置与状态**
### 默认首页
默认首页不再是 `Advanced Workbench`,而应是:
- `当前会话`
它应自动展示:
- 当前检测到的 AI provider
- 当前活跃或最近使用的会话
- 会话标题
- 会话工作目录
- 最近用户问题
- 一键生成注入内容
- 一键复制
### 高级功能下沉
以下内容必须下沉到次级区域,不应该成为默认主页面:
- memory lifecycle workbench
- record detail/history 原始调试视图
- 手动 memory create/propose/action 面板
- daemon 读路径调试
这些仍然保留,但只在“高级”或“调试模式”下出现。
## 知识与数据分层
桌面端的数据层应明确区分以下 4 层:
### 第 1 层:原始本机会话层
来源示例:
- `~/.claude/projects/**/*.jsonl`
- `~/.claude/projects/**/sessions-index.json`
- `~/.codex/session_index.jsonl`
- `~/.codex/sessions/**/*.jsonl`
作用:
- 展示真实历史会话
- 提取当前工作目录
- 提取最近用户意图
- 为上下文注入提供“当前任务线索”
### 第 2 层:本地知识库层
来源:
- Obsidian vault
作用:
- 作为长期知识来源
- 提供项目背景、偏好、约束、决策、工作流
### 第 3 层:本地 memory 层
来源:
- `spool` ledger / lifecycle
作用:
- 提供近期人工记录或 AI 提议的结构化 memory
- 补充长期知识库中尚未沉淀的上下文
### 第 4 层:注入输出层
输出目标:
- Claude / Codex / OpenCode / 其他 MCP 客户端
表现形式:
- 可复制文本
- wakeup packet
- 结构化 context bundle
- MCP status / 注入状态
## 桌面端核心能力重构
### 能力 A:当前会话感知
必须实现:
- 自动扫描本机 AI 会话
- 支持至少:
- Claude
- Codex
- 按最近活跃时间排序
- 提供最小会话摘要:
- provider
- 标题
- 更新时间
- cwd
- 最近用户问题摘要
后续扩展:
- Cursor
- VS Code chat
- 其他本地 AI 客户端
### 能力 B:一键上下文注入
必须实现:
- 选中会话后自动填充:
- cwd
- task 草稿
- 自动生成:
- context
- wakeup
- 合并注入内容
- 一键复制
后续扩展:
- 针对不同 provider 生成不同风格的注入模板
- 支持“只注入 wakeup”或“只注入 project context”
### 能力 C:可见的 MCP / 注入状态
必须实现:
- 当前 MCP 是否启用
- 当前 MCP 是否指向正确配置
- 当前注入是否基于:
- 当前会话
- 当前 cwd
- 当前 vault
- 最近一次生成的注入结果摘要
后续扩展:
- 环境变量注入状态
- provider 级别的接入状态
- “当前会话是否已经被增强”提示
### 能力 D:会话浏览
必须实现:
- 列出本机真实 AI 会话
- 查看会话消息预览
- 查看关联 memory
- 从会话直接跳转到“注入上下文”
后续扩展:
- 对话消息搜索
- 按 cwd / 项目 / provider 过滤
- 会话收藏与 pin
### 能力 E:高级 memory 工作台
必须保留但下沉:
- pending review
- wakeup ready
- record detail/history
- manual/propose/action
原则:
- 不删除
- 不默认显示
- 保留给高级用户与调试场景
## 与现有 `spool` 模块的映射
### 保持不动或尽量少动
- `app::run_with_overrides`
- `memory_gateway`
- `wakeup`
- `lifecycle_service`
- `mcp`
- `daemon`
这些是现有核心能力,不应因桌面端重构而推翻。
### 需要新增
#### 1. Session Provider Layer
建议新增一个独立模块,例如:
- `src/session_sources.rs`
职责:
- 扫描本机会话目录
- 统一不同 provider 的会话索引
- 提供标准化的:
- session list
- session detail
- message preview
- cwd
- latest user prompt
#### 2. Desktop Injection Orchestrator
可以保留在 `src/desktop.rs` 上层,也可以拆出:
- `src/desktop_injection.rs`
职责:
- 给定会话 -> 推导任务
- 给定会话 cwd -> 调用 `context + wakeup`
- 合并成最终注入文本
#### 3. MCP Status Model
建议新增一个可视状态层,例如:
- `src/desktop_status.rs`
职责:
- 汇总:
- MCP 配置是否存在
- 当前 config 是否可用
- daemon 是否存在
- provider 会话扫描是否可用
## 逐阶段实施计划
### Phase A:修正当前产品方向
目标:
- 让桌面端先从“能用”变成“方向正确”
交付:
- 默认首页切换为“当前会话 / 注入上下文”
- 基础配置明确展示:
- Obsidian 知识库目录
- 当前工作目录
- 会话浏览接入 Claude / Codex 本地 session 源
- 一键从会话带入注入输入
验收:
- 用户打开后不需要先进入高级 workbench
- 用户能从会话直接生成注入内容
### Phase B:把会话浏览做成主功能
目标:
- 让桌面端具备 `cc-switch` 风格的本机会话体验
交付:
- 会话列表更清晰:
- provider badge
- 标题
- cwd
- 最近更新时间
- 会话详情显示:
- 最近若干条用户/助手消息
- 会话摘要
- 关联 memory
- 支持:
- provider 过滤
- cwd 过滤
- 文本搜索
验收:
- 用户能快速从最近几十个会话里找到目标会话
- 用户能理解该会话和当前知识库的关联
### Phase C:可见的 MCP / 注入状态
目标:
- 让用户不再猜“是否真的生效”
交付:
- 状态面板显示:
- MCP 是否配置
- 当前 host 使用的 config
- 当前会话推导出的 cwd
- 最近一次注入时间
- 最近一次注入摘要
验收:
- 用户能明确看到“已连接 / 未连接 / 配置错误”
### Phase D:完整聊天视图与 transcript 管线
目标:
- 从“会话摘要浏览”升级为“真实聊天视图”
交付:
- Claude transcript 更完整解析
- Codex transcript 更完整解析
- 统一消息模型
- 会话消息搜索
验收:
- 用户能在工具里回看最近真实对话,而不仅是摘要
### Phase E:知识增强闭环
目标:
- 让工具真正做到“越用越懂你”
交付:
- 会话 -> memory 提议
- memory -> review
- review -> 注入优化
- 推荐上下文为什么出现的解释层
验收:
- 用户能看到:
- 这次为什么推荐这些知识
- 哪些内容来自长期知识库
- 哪些内容来自近期会话或 memory
## 关键 UX 原则
### 1. 默认只显示必要内容
默认页面只显示:
- 当前会话
- 当前注入内容
- 一键操作
不要默认把:
- 生命周期队列
- record detail
- 原始 JSON
- 所有配置项
堆在主界面。
### 2. 用户只配置一次
必须明确区分:
- 首次设置
- 日常使用
首次设置才展示完整配置项,日常使用默认隐藏配置细节。
### 3. 会话是主入口,不是 memory
用户的 mental model 是:
- “我现在正在和哪个 AI 会话工作”
而不是:
- “我现在要操作哪条 ledger record”
### 4. 注入必须有结果感
用户点击“生成注入内容”后,必须立刻看到:
- 生成了什么
- 为什么生成这些
- 可以复制到哪里
### 5. 状态必须透明
MCP / daemon / config / cwd / vault 状态都必须可见,不能隐藏在内部。
## 风险与规避
### 风险 1:继续做成“高级调试台”
规避:
- 默认页只保留主路径
- 高级 workbench 下沉
### 风险 2:会话浏览做成“半真半假”
规避:
- 优先接真实本机会话源
- 明确区分:
- 真实 provider transcript
- `spool memory` 关联记录
### 风险 3:把 `spool` 做成第二个 wiki
规避:
- 坚持“注入优先、工作增强优先”
- 不把桌面端主路径做成知识编辑器
### 风险 4:功能太多继续膨胀
规避:
- 所有新增能力都必须回答:
- 是否减少用户操作?
- 是否更快生成注入上下文?
- 是否更容易理解当前会话?
## 成功标准
当桌面端达到以下标准时,才算方向正确:
1. 用户首次配置后,不需要反复进入设置页
2. 用户能从本机会话列表里快速找到当前工作会话
3. 用户能一键生成并复制上下文注入内容
4. 用户能看到 MCP / 注入是否真的生效
5. 用户理解这个工具是在增强 AI 工作,而不是维护内部数据结构
## 当前建议的实施顺序
按照优先级,应这样推进:
1. 修正前端默认流,隐藏复杂度
2. 做真实 provider session browser
3. 做会话 -> 注入的一键动作
4. 做 MCP / 状态可视化
5. 再继续补 transcript 深解析与知识增强闭环
## 下一步执行建议
下一轮开发建议直接做这三项:
1. 新增独立 `session_sources` 模块,把 Claude / Codex session 扫描从 `desktop.rs` 中抽离
2. 前端默认页进一步收敛成:
- 当前会话
- 注入输出
- 一键复制
3. 增加 `MCP 状态` 卡片,直接显示:
- config 是否可用
- vault 是否可访问
- 当前 cwd
- provider 会话是否已识别