- 统一 local-first MVP 后阶段架构口径,补充 process 执行总序和 Reasonix 协作记录 - 归档已完成的 design checklist,标注参考型 process,更新 AGENTS/REASONIX/架构文档 - 补充文件树/主编辑器下载与上下文菜单相关实现、bug 记录和 smoke 脚本 验证:git diff --check;codegraph sync .;cargo test -p mnote-web;node --check scripts/task476-filetree-editor-context-menu-download-smoke.js
3.0 KiB
3.0 KiB
7-30 ACP session/load 恢复 checklist v1
状态:done
归档说明(2026-05-21):ACP
session/load/ resume 核心闭环已完成并通过聚焦测试;session id 全链路持久化作为后续产品化项继续跟踪。Owner:ACP 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.rsrust/crates/mnote-web/src/routes/hermes_client.rs- 与 session load/resume 直接相关的 Rust 测试
禁止事项
- 不改 Page AI 前端 UI。
- 不改 Convex schema。
- 不删除或覆盖现有 local AI session JSONL 逻辑。
Checklist
- 在
AcpSessionManager增加load_session(session_id, cwd)或等价能力,参数与 Hermes VSCode 一致:session/load { sessionId, cwd, mcpServers: [] }。 - load 成功时把当前 ACP session id 设置为 loaded id;load 返回 null / error 时允许 fallback 到
session/new。 - 明确区分 MNote session id 与 ACP adapter session id;需要持久化/返回时字段名不能混淆。
- ACP run 启动处优先尝试恢复已知 ACP session id,再创建新 session。
- 补 mock ACP 测试覆盖
session/load成功、返回 null fallback、新 session 仍可 prompt。 - 更新本文件“执行记录”。
验收命令
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)→ 调用 ACPsession/load,成功时设置 internal session_id,null/error 返回 false。 - 新增
ensure_session(cwd, stored_session_id)→ 1) 复用已有 session,2) 有 stored id 时尝试 load,3) 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通过。