- 归档 OnlyOffice live bridge、Page AI、mindmap、design governance 与相关 bug 条目 - 补齐 MinerU OCR 后端 runtime 合同与 smoke/test 基线 - 收口 ChatOnly/Doubao、ObjectIdentity、Page Aggregate compat 与 runtime owner 文档口径 验证: - cargo test --manifest-path rust/Cargo.toml -p mnote-web local_ocr -- --test-threads=1 - cargo test --manifest-path rust/Cargo.toml -p mnote-web onlyoffice_bridge -- --test-threads=1 - git diff --check - git diff --cached --check - codegraph index . --force && codegraph status . - codegraph sync . && codegraph status .
4.5 KiB
4.5 KiB
7-52 Page AI target picker 与 resource target 仍未闭环
状态
- 状态:done
- Owner:07-ai / Page AI sidebar runtime / Agent Target Resolver
- 发现时间:2026-06-01
现象
Page AI 已经有 agent selector、contextRefs popover、targetPackage 和 allowedFiles 基础输入。2026-06-01 已补上 page target、mindmap resource target、OnlyOffice resource target 与 raw local resource target 的 composer chip / picker / payload 冻结闭环;mindmap / raw file active_editor contextRef 均已携带 targetId / objectIdentity / resourceKind / assetId / relativePath。跨 workspace 多 target 的产品化确认继续由 design/07-ai/process/7-18-local-first-agent-file-editing-control-plane-v1.md 跟踪,不再由本文阻塞 target picker 收口。
证据
rust/crates/mnote-web/browser/sidebar-page-ai-runtime.js已有currentPageAiOpenEditorsSnapshot()、currentPageAiEditorTarget()、target chip / picker 和pageAiBuildAgentTargetPackage()。scripts/task502-page-ai-agent-selector-context-smoke.js已覆盖 page target button / popover / chip,并通过 mockresourceEditors覆盖 mindmap target 选择,断言 run payload 的targetPackage.primaryTargetId、targets[]、resourceKind=mindmap、relativePath=maps/Task502.mindmap.json、policy.writeRequiresExplicitTarget=true;同时断言active_editorcontextRef 携带 mindmaptargetId/objectIdentity/resourceKind/assetId/relativePath。- 2026-06-01 验证命令:
MNOTE_UI_BASE_URL=http://127.0.0.1:3301 node scripts/task502-page-ai-agent-selector-context-smoke.js,截图:tmp/task502-page-ai-agent-selector-context-smoke/01-agent-selector-context.png。 scripts/task453-local-folder-page-ai-changed-files-smoke.js覆盖 target snapshot 冻结、跨 workspace 阻断、dirty buffer 阻断,但不是 target picker UI。design/07-ai/process/7-18-local-first-agent-file-editing-control-plane-v1.md仍把 target chip/picker、跨 workspace 多选确认、真实 agent 写入回收列为未完成。- OnlyOffice 工具层 session/scope 已有
task515-task518覆盖;task523-page-ai-onlyoffice-real-target-session-smoke.js已补真实 Page AI target 到onlyofficeSessionId/bridgeSessionId的 UI 绑定。 mnote-mindmapskill 已注册,mindmap target 的active_editorcontextRef 已携带资源身份;task525-page-ai-mindmap-resource-target-smoke.js已补真实 mindmap resource tab target / contextRefs 复测。scripts/task520-page-ai-raw-resource-target-smoke.js已补真实 raw local resource tab:打开Page/notes.txt后 Page AI target chip 指向notes.txt,run payload 冻结targetPackage.primaryTargetId=resource:file:{rootUri}:Page/notes.txt,allowedFiles=["Page/notes.txt"],并断言objectIdentity不再退化成[object Object]。
影响
- Page AI UI 已能清楚告诉用户当前 page / mindmap / OnlyOffice target。
- Page AI target picker 已覆盖 page / mindmap / OnlyOffice / raw file 四类当前 P1 目标,不再退化为“当前页”语义。
- 真实 agent 写入回收、跨 workspace 多 target 和 mindmap resource tab 自动注入的更大产品化项继续由
7-18/7-42/7-51跟踪。
下一步建议
- 若继续扩多目标选择,新增跨 workspace 多 target 确认 smoke,并归入
7-18。 - 若继续扩 mindmap 多目标或更细粒度 contextRefs,另拆
7-42/7-51follow-up,不再由本文阻塞 target picker 收口。
验收
- Page AI composer 可见 page target chip。
- target picker 可在当前 page 与 mindmap resource tab 间切换。
- run payload 冻结 page
targetPackage.targets[0]。 - run payload 冻结 mindmap resource
targetPackage.targets[0]。 - OnlyOffice target 不会把 A 页授权误用于 B session。
- mindmap resource tab 可作为
resourceKind=mindmaptarget。 - mindmap
active_editorcontextRef 携带targetId/objectIdentity/resourceKind/assetId。 - raw file target 可从真实 resource tab 候选选择并冻结到 run payload。
- 真实 mindmap resource tab target / contextRefs 已由
task525覆盖。
本轮验证
node --check rust/crates/mnote-web/browser/sidebar-page-ai-runtime.jsnode --check scripts/task520-page-ai-raw-resource-target-smoke.jsMNOTE_UI_BASE_URL=http://127.0.0.1:3301 node scripts/task520-page-ai-raw-resource-target-smoke.jsMNOTE_UI_BASE_URL=http://127.0.0.1:3301 MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3301 node scripts/task502-page-ai-agent-selector-context-smoke.js