Files
mnote/design/old/07-ai/done/7-30-acp-session-load-resume-checklist-v1.md
T

56 lines
3.0 KiB
Markdown
Raw Normal View History

# [recycle] 7-30 ACP session/load 恢复 checklist v1
2026-05-21 05:40:06 +08:00
2026-05-21 09:04:13 +08:00
> 状态:done
>
> 归档说明(2026-05-21):ACP `session/load` / resume 核心闭环已完成并通过聚焦测试;session id 全链路持久化作为后续产品化项继续跟踪。
2026-05-21 05:40:06 +08:00
>
> OwnerACP session lifecycle
>
> 参考:`reference-code/hermes-vscode-main/src/sessionManager.ts`
## 目标
让 MNote ACP runtime 在恢复已有 ACP session 时真正调用 adapter 的 `session/load`,避免只恢复 MNote 会话历史而产生 phantom ACP session。
## 允许修改范围
- `rust/crates/mnote-web/src/acp_session_manager.rs`
- `rust/crates/mnote-web/src/routes/hermes_client.rs`
- 与 session load/resume 直接相关的 Rust 测试
## 禁止事项
- 不改 Page AI 前端 UI。
- 不改 Convex schema。
- 不删除或覆盖现有 local AI session JSONL 逻辑。
## Checklist
- [x]`AcpSessionManager` 增加 `load_session(session_id, cwd)` 或等价能力,参数与 Hermes VSCode 一致:`session/load { sessionId, cwd, mcpServers: [] }`
- [x] load 成功时把当前 ACP session id 设置为 loaded idload 返回 null / error 时允许 fallback 到 `session/new`
- [ ] 明确区分 MNote session id 与 ACP adapter session id;需要持久化/返回时字段名不能混淆。
- [x] ACP run 启动处优先尝试恢复已知 ACP session id,再创建新 session。
- [x] 补 mock ACP 测试覆盖 `session/load` 成功、返回 null fallback、新 session 仍可 prompt。
- [x] 更新本文件“执行记录”。
## 验收命令
```bash
cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web acp_session_manager -- --test-threads=1
cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web hermes_client_acp_resume -- --test-threads=1
```
## 执行记录
- 2026-05-20 22:06 — Reasonix Code 执行,Codex 复核并通过聚焦测试。
- `acp_types.rs`: 新增 `SessionLoadParams` / `SessionLoadResult` 类型。
- `acp_session_manager.rs`:
- 新增 `load_session(session_id, cwd)` → 调用 ACP `session/load`,成功时设置 internal session_idnull/error 返回 false。
- 新增 `ensure_session(cwd, stored_session_id)` → 1) 复用已有 session2) 有 stored id 时尝试 load3) fallback 到 `session/new`
- 新增 7 个单元测试覆盖所有路径:load 成功、null fallback、复用 active、无 stored 创建新 session、fallback 后 prompt 仍可工作。
- `hermes_client.rs`:
- `acp_stream_events()` 中从 payload 提取 `acpSessionId`,传给 `ensure_session()` 替代原来的 `create_session`
- 错误码从 `acp_session_create_failed` 改为 `acp_session_ensure_failed`
- Codex 复核:当前 `acpSessionId` 只从 run payload 读取,前端/session store 仍未稳定持久化并传回该字段,因此“session id 字段全链路区分与持久化”保留未完成。
- 验收:`cargo test -p mnote-web acp_session_manager -- --test-threads=1``cargo test -p mnote-web hermes_client_acp_resume -- --test-threads=1``cargo test -p mnote-web acp -- --test-threads=1` 通过。