Files
mnote/design/old/07-ai/done/7-30-acp-session-load-resume-checklist-v1.md
T
Agent Board b798f628ee chore: land tree view-state, vault, Pi module split, and repo hygiene
Persist PageTree expand state via control-plane view-state and align
chevron/DOM with restored expansion; keep Sidex-style shallow page-tree
scan and drop the unused recursive scanner that only added cargo noise.

Add password vault workbench routes/runtime/skill/CLI, split page_ai_pi
into a module package, and retire Hermes/ACP/OpenHub recycle + root
harness evidence from the index while gitignoring recycle and local
diag dumps.

Archive superseded design/bugs docs under old/, point architecture at
ARCHITECTURE.md, and refresh smokes for Pi S1–S7, vault, and editor
regressions so the working tree can stay clean.
2026-07-21 05:13:05 +08:00

56 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# [recycle] 7-30 ACP session/load 恢复 checklist v1
> 状态:done
>
> 归档说明(2026-05-21):ACP `session/load` / resume 核心闭环已完成并通过聚焦测试;session id 全链路持久化作为后续产品化项继续跟踪。
>
> 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` 通过。