spool-memory 0.2.3

Local-first developer memory system — persistent, structured knowledge for AI coding tools
Documentation
# 后续任务执行说明

## 目的

这份文档用于配合 [spool 后续任务拆解 TO DO list.csv](/Users/long/Work/spool/spool%20后续任务拆解%20TO%20DO%20list.csv) 使用,帮助你在新开的窗口里直接接手开发。

当前路线已经收敛为三条主线:

- 会话优先:把桌面端收敛成会话浏览、会话详情、继续对话、删除对话
- MCP 优先:把 `spool-mcp` 变成实际工作流里的上下文优化入口,而不是只在桌面端展示
- 检索优先:强化知识库检索、项目规范召回、知识提炼与回写闭环

## 开始前建议

建议先按这个顺序快速读一遍:

1. [docs/DESKTOP_PRODUCT_REFOCUS_PLAN.md]/Users/long/Work/spool/docs/DESKTOP_PRODUCT_REFOCUS_PLAN.md
2. [docs/TERMINAL_AI_INTEGRATION.md]/Users/long/Work/spool/docs/TERMINAL_AI_INTEGRATION.md
3. [docs/SESSION_HANDOFF.md]/Users/long/Work/spool/docs/SESSION_HANDOFF.md
4. [docs/NEXT_STEPS.md]/Users/long/Work/spool/docs/NEXT_STEPS.md

任务状态查看与推进:

```bash
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py status --file '/Users/long/Work/spool/spool 后续任务拆解 TO DO list.csv' --verbose
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py advance --file '/Users/long/Work/spool/spool 后续任务拆解 TO DO list.csv' --notes '本项已完成'
```

## 子任务 1

### 收敛会话浏览为分页列表与完整上下文详情

推荐入口文件:

- [src/session_sources.rs]/Users/long/Work/spool/src/session_sources.rs
- [src/desktop.rs]/Users/long/Work/spool/src/desktop.rs
- [src/desktop/tauri.rs]/Users/long/Work/spool/src/desktop/tauri.rs
- [frontend/desktop.js]/Users/long/Work/spool/frontend/desktop.js
- [frontend/desktop.css]/Users/long/Work/spool/frontend/desktop.css

实施重点:

- 把会话列表稳定为默认第一页 10 条,按更新时间倒序
- 明确 `has_more``total`、当前页码的前后端契约
- 会话详情从“预览”升级成“可读的上下文查看器”,至少要能看最近消息、角色、时间、关联 memory
- 调整列表和详情区域比例,避免桌面端首屏信息过密

验收标准:

- 打开桌面端后,会话页默认只展示最近 10 条
- 点击“加载更多”会追加下一页,不会重复、不丢项
- 点击任意会话后可以看到清晰的对话上下文,而不只是摘要
- 当前工作目录匹配的会话在列表中有明确标识

建议验证:

- `cargo test --test tauri_smoke`
- `node --check frontend/desktop.js`

## 子任务 2

### 完善继续对话、删除会话与选择回退交互

推荐入口文件:

- [src/desktop.rs]/Users/long/Work/spool/src/desktop.rs
- [src/session_sources.rs]/Users/long/Work/spool/src/session_sources.rs
- [src-tauri/src/commands.rs]/Users/long/Work/spool/src-tauri/src/commands.rs
- [frontend/desktop.js]/Users/long/Work/spool/frontend/desktop.js

实施重点:

- “继续对话”必须更接近 `cc-switch` 的行为,直接打开终端并注入正确的会话标识
- 删除前增加确认或软删除保护,避免误删
- 删除后自动回退到相邻会话,避免详情区悬空
- 继续对话失败时要返回具体失败原因,不要只有通用报错

验收标准:

- Claude 会话可触发 `claude -r <session_id>`
- Codex 会话可触发 `codex resume <session_id>`
- 删除成功后列表与详情自动刷新并切换到下一条可用会话
- 删除失败和继续对话失败时,界面有可读错误信息

建议验证:

- `cargo test --test tauri_smoke`
- 在 macOS 本机手动点击一次“继续对话”和“删除对话”

## 子任务 3

### 建立 MCP 运行时增强追踪与状态回显

推荐入口文件:

- [src/mcp.rs]/Users/long/Work/spool/src/mcp.rs
- [src/desktop_status.rs]/Users/long/Work/spool/src/desktop_status.rs
- [src/desktop.rs]/Users/long/Work/spool/src/desktop.rs
- [frontend/desktop.js]/Users/long/Work/spool/frontend/desktop.js
- [docs/TERMINAL_AI_INTEGRATION.md]/Users/long/Work/spool/docs/TERMINAL_AI_INTEGRATION.md

实施重点:

- 区分“已注册 MCP”与“当前会话实际使用过 MCP”
-`prompt_optimize` 增加最近调用记录,至少记录时间、cwd、task、target、session/provider
- 桌面端状态区显示最近一次真实增强,而不是只显示静态推断
- 让用户能判断 MCP 是否真正参与了当前 AI 对话

验收标准:

- 仅注册配置时显示“已接入”
- 调用 `prompt_optimize` 后显示“已增强”,并能看到最近一次增强摘要
- 不同客户端的增强记录不会混淆
- 重启桌面端后仍能看到最近一次增强信息,或至少有明确的持久化策略说明

建议验证:

- `cargo test prompt_optimize_tool_should_return_combined_prompt_bundle --lib`
- 新增一组运行时追踪测试

## 子任务 4

### 抽离注入编排服务并统一 prompt_optimize 流程

推荐入口文件:

- [src/mcp.rs]/Users/long/Work/spool/src/mcp.rs
- [src/memory_gateway.rs]/Users/long/Work/spool/src/memory_gateway.rs
- [src/app.rs]/Users/long/Work/spool/src/app.rs
- [src/output/prompt.rs]/Users/long/Work/spool/src/output/prompt.rs

实施重点:

- 不要让 `mcp.rs` 同时承担协议层和注入编排层
- 抽一个明确的 orchestration/service 模块,统一:
  - context 构建
  - wakeup 构建
  - combined prompt 组装
  - 运行时追踪写入
- 桌面端和 MCP 后续都复用同一套注入编排

验收标准:

- `prompt_optimize` 不再直接堆在 `mcp.rs` 的分支逻辑里
- 编排服务有单元测试覆盖 context + wakeup + combined 三段输出
- 桌面端生成注入内容与 MCP 生成注入内容的行为一致

建议验证:

- `cargo test --lib`
- 对比桌面端生成结果与 MCP 返回结果

## 子任务 5

### 重构检索排序以强化约束、决策、规范与偏好召回

推荐入口文件:

- [src/engine/scorer.rs]/Users/long/Work/spool/src/engine/scorer.rs
- [src/engine/selector.rs]/Users/long/Work/spool/src/engine/selector.rs
- [src/domain/note.rs]/Users/long/Work/spool/src/domain/note.rs
- [src/output/json.rs]/Users/long/Work/spool/src/output/json.rs
- [docs/PRODUCT.md]/Users/long/Work/spool/docs/PRODUCT.md

实施重点:

- 强化 `constraint``decision``preference``workflow``pattern` 在开发任务中的召回权重
- 让项目级规则优先于泛化知识
- 丰富可解释的 score reasons,避免黑盒排序
- 改善 section/excerpt 选取,让结果更像“可直接给 AI 的任务边界”

验收标准:

- 同一项目里,历史规范、边界、决策类笔记优先于普通笔记
- JSON 输出里能看见更清晰的打分原因
- 至少增加一组针对“项目规范召回”的回归测试
- 检索结果对当前开发任务更聚焦,减少无关知识片段

建议验证:

- `cargo test --lib`
- 为 scorer 和 selector 增加回归用例

## 子任务 6

### 实现项目级知识提炼、回写与二次召回闭环

推荐入口文件:

- [src/lifecycle_service.rs]/Users/long/Work/spool/src/lifecycle_service.rs
- [src/lifecycle_store.rs]/Users/long/Work/spool/src/lifecycle_store.rs
- [src/domain/memory_lifecycle.rs]/Users/long/Work/spool/src/domain/memory_lifecycle.rs
- [src/session_sources.rs]/Users/long/Work/spool/src/session_sources.rs
- [docs/OBSIDIAN_SCHEMA.md]/Users/long/Work/spool/docs/OBSIDIAN_SCHEMA.md

实施重点:

- 从会话或增强结果中提炼项目约束、开发规范、架构决策
- 区分 raw memory、候选知识、已确认知识
- 为二次召回准备结构化字段,例如 `project_id``memory_type``source_ref`
- 优先做“可审阅的提炼”,不要直接污染 Obsidian 主知识库

验收标准:

- 至少存在一条从会话提炼到 memory 的可执行链路
- 提炼出的项目规范可以在同项目后续对话中被优先召回
- 保留来源链路,能追溯到原始会话或证据引用
- 不会把未经确认的草稿直接写入最终知识笔记

建议验证:

- `cargo test --lib`
- 手动构造一条会话提炼并再次检索验证召回

## 子任务 7

### 扩展多 AI 客户端适配与统一 MCP 管理能力

推荐入口文件:

- [src/desktop_status.rs]/Users/long/Work/spool/src/desktop_status.rs
- [src/session_sources.rs]/Users/long/Work/spool/src/session_sources.rs
- [docs/TERMINAL_AI_INTEGRATION.md]/Users/long/Work/spool/docs/TERMINAL_AI_INTEGRATION.md
- [docs/DESKTOP_PRODUCT_REFOCUS_PLAN.md]/Users/long/Work/spool/docs/DESKTOP_PRODUCT_REFOCUS_PLAN.md

实施重点:

- 保持一个 MCP 对多个 AI 客户端的策略不变
- 优先补客户端适配层,不要把 provider 分支散落进核心编排层
- 先把 Claude、Codex 做稳,再抽象 Cursor、Kiro、Antigravity 的接入契约
- 桌面端应更像“统一管理器”,而不是单个客户端的注入器

验收标准:

- provider 检测与会话读取逻辑可扩展,不靠散乱条件分支硬塞
- MCP 注册状态展示可继续扩展到更多客户端
- 文档中明确每个客户端的接入路径、配置位置和验证方式

建议验证:

- 为 provider 发现逻辑增加测试
- 校对文档示例与真实配置路径

## 子任务 8

### 补齐验证基线、运行文档与调试手册

推荐入口文件:

- [docs/DESKTOP_RUNBOOK.md]/Users/long/Work/spool/docs/DESKTOP_RUNBOOK.md
- [docs/TERMINAL_AI_INTEGRATION.md]/Users/long/Work/spool/docs/TERMINAL_AI_INTEGRATION.md
- [docs/README.md]/Users/long/Work/spool/docs/README.md
- [src-tauri/Cargo.toml]/Users/long/Work/spool/src-tauri/Cargo.toml
- [frontend/package.json]/Users/long/Work/spool/frontend/package.json

实施重点:

- 明确“怎么运行、怎么测试、怎么调试、怎么验证 MCP 生效”
- 把桌面端、MCP、终端客户端三条链路的验证命令写清楚
- 给常见报错提供定位方式,尤其是配置路径、vault 路径、会话源路径
- 每完成一轮大改,都更新手册,避免文档再次过时

验收标准:

- 新窗口开发者不看聊天记录,只看文档也能跑起来
- 能快速定位:
  - 桌面端启动失败
  - MCP 注册失败
  - `prompt_optimize` 调用失败
  - 会话源未识别
- 文档内容与当前实现一致,不再保留过时操作描述

建议验证:

- 按文档完整走一遍桌面端启动与 MCP 接入流程
- 更新 [docs/README.md]/Users/long/Work/spool/docs/README.md 的文档索引

## 执行顺序建议

建议按下面顺序推进,不要平均用力:

1. 子任务 1
2. 子任务 2
3. 子任务 3
4. 子任务 4
5. 子任务 5
6. 子任务 6
7. 子任务 7
8. 子任务 8

原因:

- 先把会话浏览和会话动作做顺,桌面端才有实际入口
- 再把 MCP 运行时增强做成“真实可见”
- 然后抽离编排与强化检索,回到真正的核心价值
- 最后再扩展多客户端和补齐文档/验证