# 桌面端产品重构规划

## 背景

`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 会话是否已识别
