Files
Agent-System/.doc/audit/2026-09-25-dialogue-office-capability-research.md
T
weichen af327950bd docs(plan): 对话办公能力全景盘点与 P0–P3 整改计划
盘点 32 ActionKey 与 HTTP 169 路由对话边界,明确假成功/dry-run 与 UI 专属红线;分期消除假成功、live 化 intentflow、查询真源与新写意图扩展。
2026-09-25 20:20:25 +00:00

15 KiB
Raw Blame History

title, created, owner, task_id, policy_revision, review_state, integration_state, deployment, cleanup, remote_sync, status, confidence
title created owner task_id policy_revision review_state integration_state deployment cleanup remote_sync status confidence
对话办公能力全景盘点 2026-09-25 Cursor dialogue-office-expansion-2026-09-25 cursor-governance-2026-09-24-r1 @ 44161d2ad2 pending pending not_required pending not_requested done high

调研:对话办公能力全景盘点

范围与授权

  • 用户目标:以「对话辅助办公」为初衷,最大限度扩展对话可操作范围;创建项目、添加成员、设置等治理结构操作保持 UI 专属。
  • 本轮交付:研究报告 + 分期整改计划(文档落盘);P0–P3 实施另起任务。
  • 允许写路径:.doc/audit、.doc/remediation。
  • 基线 SHA:44161d2ad2d7aada3e9ff88127b52148543278e5(建场时 local dev)。
  • 非目标:不改产品代码、不更新 CURRENT/FEATURE-MATRIX/gap-matrix、不部署。
  • 整改方案:2026-09-25-dialogue-office-expansion-plan.md

结论

  1. 注册表共 32 个 ActionKey(非早期估计的 34);主链路与 intentflow 计划执行面 双轨脱节:计划层 U11/U12 已把部分键 live 化,单意图协调层仍对认领/送审/工作流触发等返回「假成功」话术。
  2. HTTP 169 条路由可按对话边界分为:可操作候选 A=46、只读查询 B=66、UI 专属写/管理台 C=44、平台基线 13。
  3. 消除假成功、打通 dry-run、接真实查询源、再扩新写意图,应按 P0→P3 分期;一律复用 doc-review 四道防线(识别分流 → 话语分类 → 角色×状态出卡 → 执行二次鉴权),两步确认 + 服务端权威校验。

证据

项 路径/命令 结果
ActionKey SSOT internal/intent/registry.go registerBuiltinActions L145–187 32 键
主链 docgov internal/coordinator/engine_docgov.go claim/submit 假成功;approve/reject 有 PendingAction
主链 workflow internal/coordinator/engine_workflow.go switch 确认闭环断裂;trigger 引导 UI
intentflow dry-run internal/app/intentflow/expansion.go L195–216 docgov 5 dry-run + run-control 2 dry-run
HTTP 路由 rg 'mux\.HandleFunc\("' internal/server/server.go internal/server/document_revision_handlers.go 169
样板 doc-review-lifecycle 09fe9723;card_policy.go / recognizer_matchers_docgov.go / action_executor.go 四道防线可复用

1. 意图执行矩阵(32 ActionKey)

执行类别说明

类别 含义
real-exec 协调层或 PendingAction 已调用领域服务真写
pending-action / confirm-card+pending 出确认卡或挂起期望,确认后 action_executor 真写
query-direct 只读查询,直接回复(可能含硬编码兜底)
prose-only 仅自然语言,无业务副作用(或明确拒绝)
假成功 StatusAccepted/成功话术,但未调用权威写服务
dry-run intentflow Owner 返回 validated_only receipt,无副作用
ActionKey 中文 主链类别 计划链(intentflow) 主处理 后端 owner
project.advisory 进展/风险查询 query-direct QueryOwner engine_query.go:handleQueryProgress 协调层/LLM
project.fact.supplement 补充项目事实 real-exec Mutate(flag 下 dry→live) engine_stage.go:handleSupplementInfo ctxmgr / MutateOwner
project.stage.advance 推进阶段 real-exec / 无 runner 时 prose 模拟 — engine_stage.go:handleAdvanceStage stageflow
task.run 触发生成任务 real-exec TaskRunAdapter engine_task.go:handleTriggerTask stageflow / taskrun
task.run.adhoc 特设任务 real-exec — engine_task.go:handleTriggerAdhocTask 同上
conversation.chat 闲聊 prose-only — engine_consult.go:handleCasualChat dialogue LLM
conversation.decline 暂缓建议 prose-only — engine_stage.go:handleDeclineExpectation 上下文
document.claim 认领文档 假成功 live(U11) engine_docgov.go:250–277 主链仅改 Claimed 列表;计划→docgov
document.review.submit 提交审核 假成功 live(U11) engine_docgov.go:280–295 主链纯文案;计划→SubmitForReview
document.review.approve 审核通过 pending-action dry-run engine_docgov.go:handleDocGovApprove docgov.ReviewApprove
document.review.reject 审核驳回 confirm-card+pending dry-run engine_docgov.go:handleDocGovReject docgov.ReviewReject
document.final.approve 终审批准 confirm-card+pending dry-run 同上 Approve 分支 docgov.ApproverApprove
document.final.reject 终审驳回 confirm-card+pending dry-run 同 reject 同上
document.proposal.decide 提案裁决 confirm 分支真挂起 / 默认分支假成功 dry-run engine_docgov.go:298+ confirm_*→PendingAction
regulation.query 法规查询 query-direct QueryOwner engine_query.go:handleQueryRegulations kb.Client + 模板兜底
case.query 相似案例 query-direct QueryOwner engine_query.go:handleQuerySimilarCases SearchSimilarCases + 硬编码案例
permission.query 权责查询 query-direct — engine_query.go:handleQueryUserRights UserDocs 上下文
document.reject_reason.query 驳回原因 query-direct — engine_query.go:handleQueryRejectReason 黑板 + default 文案
card.confirm 确认挂起期望 confirm 元动作 — expectation 映射 路由至目标 intent
project.stage.execute 阶段执行确认 注册有、switch 无独立 case — 实际走 advance 同 advance
security.forbidden 安全禁止 prose-only RejectPlan engine_consult.go —
workflow.switch 切换激活工作流 假成功(确认后无执行) dry-run engine_workflow.go:12–59 边界上属结构治理 → 宜诚实拒绝/引导 UI
workflow.run 运行工作流 假成功(引导 UI) live(U12) engine_workflow.go:62–90 计划→CreateWorkflowRun
workflow.status.query 工作流状态 query-direct — engine_workflow.go:93 UserProjectContext
document.status.query 文档状态 query-direct(常空模板) — engine_workflow.go:117 模板/document_summary
conversation.help 能力帮助 query-direct — engine_workflow.go:139 AvailableActions
conversation.unsupported 不支持 prose-only — engine_workflow.go:159 —
run.status.query 运行状态 query-direct — engine_run.go:handleRunStatusQuery WorkDir
run.resume 续跑 confirm-card+pending live(U12) engine_run.go:handleRunResume taskrun
run.restart 重启 confirm-card+pending dry-run engine_run.go:handleRunRestart taskrun.restart
project.impact.analyze 影响分析 query-direct — impact_actions.go ImpactActions
project.doc.revise_propose 修订提案 confirm-card+pending — impact_actions.go ProposeRevision

1.1 假成功清单(主链路优先)

# Legacy / Key 文件:行号 当前行为 P0 建议
1 DOCGOV_CLAIM / document.claim engine_docgov.go:250–277 仅 append UserDocs.Claimed,回复「已成功认领」,不调 docgov 真执行 RecordDocumentViewed/claim API + 确认(若需)
2 DOCGOV_SUBMIT_REVIEW / document.review.submit engine_docgov.go:280–295 纯成功文案,无状态变更 真执行 Gov.SubmitForReview + 角色门禁
3 DOCGOV_PROPOSAL_DECIDE 默认分支 engine_docgov.go:383–397 非 confirm_* 时按 proposal_action 返回采纳/拒绝文案,不写文档 默认分支诚实澄清或走确认卡;禁止假成功
4 SWITCH_WORKFLOW / workflow.switch engine_workflow.go:12–59 设 NextExpectation 要求确认,确认后无写路径 诚实拒绝:属 UI 专属(PUT …/active-workflow);或确认后明确「请在设置面板操作」
5 TRIGGER_WORKFLOW / workflow.run engine_workflow.go:62–90 「请在面板确认」话术,不创建 run 确认卡 + CreateWorkflowRun(对齐 U12)

附带(非计划 P0 五处,但同类):无 runner 时 ADVANCE_STAGE/TRIGGER_TASK 模拟成功;VIEW_DOC lifecycle 空模板。

1.2 intentflow 仍 dry-run 的键

DocGov(docGovActionKeys 7 − DocGovLiveActionKeys 2 = 5):

  • document.review.approve
  • document.review.reject
  • document.final.approve
  • document.final.reject
  • document.proposal.decide

Run-control(4 − live workflow.run/run.resume = 2):

  • workflow.switch(计划层 dry-run;产品边界建议永久不 live 写,改为拒绝)
  • run.restart

见 internal/app/intentflow/expansion.go L195–216;dry-run 行为 DryRunAdapter.Execute → validated_only。

2. HTTP 169 路由 × 对话边界

统计口径:internal/server/server.go Routes() + document_revision_handlers.go registerDocumentRevisionRoutes() 中 mux.HandleFunc("METHOD path") = 169。不含中间件 OPTIONS、SPA 静态子路径。

类别 计数 含义
A 对话可操作候选 46 读写副作用;对话须两步确认后经服务层落库
B 只读查询候选 66 GET + preview POST
C UI 专属 44 治理结构写 + admin 全域(含管理台只读)
平台基线 13 health/ready、认证、SPA、/me 自服务
合计 169

2.1 A — 对话可操作候选(46)

模块 n 代表路径 对话意图现状
docgov 11 POST …/docgov/{claim,submit-review,review-decision,approver-decision,proposal,proposal/decide,comments,content,lease/*} 批准/驳回已打通;claim/submit 主链假成功;comments 等偏 UI
docrevision 2 PATCH …/documents/{id}/content · POST …/agent-candidates/{id}/decision 正文 PATCH 仅 HTTP;候选决策可对话扩展
trace 6 POST …/trace/{index,analyze} · …/edges/{id}/decision · …/reopen · …/recheck/…/clear 影响分析意图有;边裁决/重开仅 HTTP
补充批次 1 POST …/supplement-impacts/{batch_id}/decision 补充意图有;批次确认可对话化
工作流运行(非结构) 2 POST …/workflows/{key}/run · …/stages/{stage}/advance run 主链假成功;advance 有意图
任务执行 6 POST …/tasks/{run,run/stream,runs} · …/{cancel,resume} 触发/续跑已打通
对话写 8 POST …/chat* 会话基础设施
意图计划 1 POST …/intent-plans/{id}/decisions intentflow + HTTP 双通道
自由文档 6 POST/PUT/DELETE …/freeform-documents* 仅 HTTP → P3 候选
资产 2 POST …/assets · …/reparse 仅 HTTP → P3
通知 1 PATCH …/notifications/{id} 仅 HTTP → P3
用户偏好 1 PUT …/context/user/preference 低优先级

2.2 B — 只读查询候选(66)

项目/工作流/成员/设置 GET、termination/activation preview、chat 历史检索、docgov audit/comments GET、修订 ledger GET、资产 raw、通知列表、context/cases 等。

对话已覆盖:进展、文档/工作流/运行态、驳回原因、法规/案例/权限(案例与进展有硬编码兜底)。
仍偏 HTTP:职责现状、修订版本/diff、trace 图、终止预览、成员列表只读(允许对话只读引导,禁止代写)。

2.3 C — UI 专属红线(44,对话永久禁写)

模块 写操作(禁入)
项目/成员 POST /projects · `POST
职责 PATCH …/doc-tasks/{taskKey}/duties
工作流结构/生命周期 PUT …/workflow-plan · PUT …/active-workflow · POST …/workflow-instances/activate · POST …/terminate
Admin 角色/用户/密码/工作流定义 publish·retire/模板/config/system settings/maintenance/workspaces cleanup

对话侧应对命中措辞走 security.forbidden / conversation.unsupported,仅允许只读查询与引导(如读职责现状、termination-preview)。

澄清:workflow.switch(改 active-workflow)落入 C;workflow.run(创建运行实例)落入 A。P0 对前者诚实拒绝,对后者真执行。

3. 查询硬编码兜底

场景 位置 问题
相似案例 engine_query.go:420–426 无数据时硬编码 PRJ-2025-008 / PRJ-2024-019
驳回原因 engine_query.go:260–276 + card_policy.go:defaultRejectReasonText 黑板/事件捞取失败则默认文案
法规 engine_query.go:382–388 KB 空则 GB/YY 模板
进展简报 engine_query.go:83–164 默认项目名与长硬编码段落
文档状态 engine_workflow.go:126–129 lifecycle 空 → 引导面板

4. 复用样板:doc-review 四道防线

参考合入/分支证据:feature/doc-review-lifecycle-2026-09-25 @ 09fe9723(批注/重开/积压/送审真执行)。

防线 符号 要点
① 识别分流 recognizer_matchers_docgov.go:matchDocGovAction 查询语气不误路由写动作
② 话语分类 card_policy.go:ClassifyRejectUtterance(Web 对称) QUERY / EXECUTE / OTHER
③ 角色×状态出卡 ResolveRejectCard / buildRejectConfirmCard 无权限不出危险按钮
④ 执行二次鉴权 handleDocGovReject/Approve + chat/action_executor.go 确认后调 GovernanceEngine

后续写意图扩展必须复制该模式,禁止「话术成功、服务未写」。

5. 开放问题

  • project.stage.execute 注册未接线:是否删除或显式映射到 advance(实施期决定)。
  • 自由文档/通知/资产对话化的产品优先级与确认文案(P3 开工前再确认)。
  • workflow.switch 是否保留意图仅作「引导 UI」还是识别层直接 unsupported(推荐后者,减少假确认)。

建议动作

见整改计划 P0–P3;本调研 status=done 仅表示盘点可审,不代表问题已修复。

状态与交接

  • 产物:本文 + 整改计划
  • 实施:另起 feature/dialogue-office-p0-… 等任务;每期独立验证与验收
  • CURRENT / MATRIX / gap-matrix:本轮不动
  • catalog:feature=dialogue-office,scope .doc/audit+.doc/remediation;与 docgov feature claim 硬冲突,故未占用 docgov 键