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.
56 lines
3.0 KiB
Markdown
56 lines
3.0 KiB
Markdown
# [recycle] 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.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 id;load 返回 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_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` 通过。
|