# Reasonix 任务：ACP tool locations 与打开动作

Project root: `/mnt/Data1T/mnote`

你不是唯一在代码库中工作的 agent。不要回滚、覆盖或整理与你任务无关的改动；不要提交 git；不要修改 `.gitignore`、`.codegraph/`、`auth-console.txt`、`auth-network.txt`。

## 背景

Codex 已写 review：`design/10-review/process/13-hermes-vscode-plugin-gap-review-v1.md`

本任务对应 checklist：`design/07-ai/process/7-32-acp-tool-location-and-open-action-checklist-v1.md`

参考实现：`reference-code/hermes-vscode-main/src/protocol.ts` 会解析 `tool_call.locations[].path`；`src/chatPanel.ts` 在 read/edit tool 完成后打开对应 editor。

## Ownership

允许直接修改：

- `rust/crates/mnote-web/src/acp_types.rs`
- `rust/crates/mnote-web/src/acp_session_manager.rs`
- `rust/crates/mnote-web/src/acp_bridge.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs` 中 tool card 展示 / 打开动作小范围代码
- 相关 Rust 测试或必要 smoke
- `design/07-ai/process/7-32-acp-tool-location-and-open-action-checklist-v1.md` 的执行记录

注意：`layout.rs` 可能被其他 worker 改动。请避免大范围重排，只接线 tool locations 展示和 open action。

## 目标

保留 ACP tool `locations[]`，并在 Page AI tool card 中显示和打开。默认打开到 MNote 主编辑器资源 tab / 现有 file open resolver，不默认新浏览器窗口。

## 具体要求

1. `SessionUpdate::ToolCall` 解析 `locations: [{ path }]`。
2. `AcpSessionEvent::ToolCall` 携带 locations。
3. `acp_bridge` SSE `tool.started` 包含 locations。
4. 前端 tool card 保存并显示 locations。
5. read/edit tool completed 时提供打开动作；优先复用现有主编辑器资源 tab 或已有 file open 函数。
6. 补测试覆盖 parse + SSE + 前端字符串断言。

## 验收命令

请至少运行：

```bash
cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web acp_tool -- --test-threads=1
cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web page_ai_uses_backend_acp_session_runtime_store -- --test-threads=1
```

## 最终回复格式

- 修改文件列表
- 关键实现说明
- 实际运行的验证命令和结果
- 未完成项 / 风险
