From a12c4bea644150239fb24e5b1be6890dbe2fc600 Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Wed, 24 Jun 2026 22:59:10 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E8=B4=B9=E8=A7=84=E5=88=99=E8=A1=A8=E3=80=81?= =?UTF-8?q?work-log=20=E4=B8=8E=20superpowers=20specs=20=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...026-06-24-workbench-intent-frame-design.md | 215 ++++++++++++++++++ document/work-log/2026-06-24.md | 63 +++++ .../finance-rules/公司通信费报销规则.xlsx | Bin 5934 -> 5934 bytes 3 files changed, 278 insertions(+) create mode 100644 docs/superpowers/specs/2026-06-24-workbench-intent-frame-design.md diff --git a/docs/superpowers/specs/2026-06-24-workbench-intent-frame-design.md b/docs/superpowers/specs/2026-06-24-workbench-intent-frame-design.md new file mode 100644 index 0000000..65a0057 --- /dev/null +++ b/docs/superpowers/specs/2026-06-24-workbench-intent-frame-design.md @@ -0,0 +1,215 @@ +# AI 工作台统一意图识别框架设计 + +## 背景 + +AI 工作台当前的输入识别分散在多个前端 flow 中:申请预览、报销草稿、单据查询、草稿删除提示各自判断输入。这样的结构能快速修复单点问题,但会让“删除 3 天前的草稿”“审核合规没有风险的申请”这类组合型请求继续变成关键词补丁。 + +本设计把自然语言输入先统一解析成结构化 `IntentFrame`,再根据目标是否明确、安全等级和业务边界决定下一步动作。 + +## 目标 + +- 让工作台所有自然语言输入先进入统一意图框架,不再在各业务 flow 中散落判断。 +- 支持动作、对象、筛选条件、上下文指代、安全等级的组合识别。 +- 对删除、审核、驳回等高风险动作固定走“筛选候选 + 详情确认”,禁止自然语言直接执行。 +- 保留当前会话内的快速指代能力,例如“删除刚才那个草稿”能定位最近创建的草稿。 +- 对带筛选条件的请求,例如“删除 3 天前的草稿”“审核无风险申请”,先展示思考过程和候选列表。 + +## 非目标 + +- 第一版不引入 LangGraph,也不把前端本地识别迁到后端状态机。 +- 第一版不做自然语言直接批量删除、批量审核或批量驳回。 +- 第一版不改后端审批、删除接口的权限模型。 +- 第一版不重写现有申请预览和报销草稿流程,只把入口识别前置统一。 + +## 总体架构 + +统一意图识别分三层: + +1. `IntentFrame Parser`:把用户输入解析为结构化意图。 +2. `Target Resolver`:结合当前会话、最近动作和筛选条件,判断目标是否唯一。 +3. `Action Policy`:根据动作风险决定直接查询、展示候选、要求澄清或阻断。 + +输入链路应调整为: + +```text +用户输入 + -> IntentFrame Parser + -> Action Policy + -> Target Resolver + -> 业务 flow + - 查询候选 + - 打开详情确认 + - 进入申请/报销流程 + - 要求补充条件 +``` + +## IntentFrame 数据结构 + +```js +{ + action: 'query' | 'delete' | 'approve' | 'reject' | 'create' | 'update' | 'ask_policy', + objectType: 'draft' | 'application' | 'reimbursement' | 'approval_task' | 'receipt' | 'document', + filters: { + timeRange: null, + status: null, + risk: null, + documentType: null, + amount: null, + keyword: null + }, + targetMode: 'current_context' | 'filtered_candidates' | 'ambiguous', + safetyLevel: 'read_only' | 'confirm_required' | 'blocked', + confidence: 0, + normalizedQuery: '' +} +``` + +### 字段含义 + +- `action` 表示用户想做什么,例如查、删、审核、驳回、创建或咨询规则。 +- `objectType` 表示动作对象,例如草稿、申请单、报销单、待审任务或票据。 +- `filters` 表示筛选条件,必须可以复用到单据查询 flow。 +- `targetMode` 表示目标定位方式: + - `current_context`:明确指向当前会话最近对象。 + - `filtered_candidates`:需要查询候选列表。 + - `ambiguous`:条件不足,需要澄清。 +- `safetyLevel` 表示动作安全级别: + - `read_only`:可直接查询或解释。 + - `confirm_required`:只展示候选或详情入口,不直接执行。 + - `blocked`:存在批量破坏性风险或越权风险,必须阻断。 +- `normalizedQuery` 是给现有查询 flow 使用的可读查询句,例如“我的 3 天前草稿单据”。 + +## 识别策略 + +### 动作识别 + +- 查询:查、看、列出、有哪些、找一下。 +- 删除:删除、删掉、移除、作废、撤销。 +- 审核:审核、审批、处理待办、去审批。 +- 驳回:驳回、退回、拒绝。 +- 创建:新建、发起、申请、我要报销。 +- 更新:补充、修改、改成、填入。 +- 规则咨询:怎么走、能不能、规则、制度、政策、标准。 + +### 对象识别 + +- 草稿:草稿、未提交、刚才保存的单据。 +- 申请单:申请、申请单、出差申请、费用申请。 +- 报销单:报销、报销单、费用报销。 +- 待审任务:待办、待我审核、待审批、审核单。 +- 票据:发票、票据、附件、图片。 + +### 筛选条件识别 + +- 时间:今天、昨天、3 天前、近 7 天、上周、本月、具体日期、日期范围。 +- 状态:草稿、审批中、已通过、已驳回、待补充。 +- 风险:无风险、低风险、中风险、高风险、合规、异常、超标。 +- 金额:超过 1000、500 以下、100 到 300。 +- 关键词:地点、事由、人员、部门、单号等自由文本。 + +## 目标解析规则 + +### 当前上下文直达 + +当用户使用“刚才那个”“当前”“这个”“上面那个”这类指代,并且当前会话中能找到最近的可操作对象时,`targetMode` 为 `current_context`。 + +例子: + +- “删除刚才那个草稿” +- “打开这个申请单” +- “继续刚才的报销草稿” + +即便目标唯一,删除、审核、驳回仍然只打开详情页或确认入口。 + +### 筛选候选 + +当用户输入包含时间、风险、金额、状态、类型等筛选条件时,`targetMode` 必须为 `filtered_candidates`。 + +例子: + +- “删除 3 天前的草稿” +- “审核合规没有风险的申请” +- “找一下上海相关的低风险待审申请” + +这类请求必须进入单据查询 flow,展示候选结果,不能直接套最近草稿。 + +### 条件不足澄清 + +当动作高风险但目标既不唯一,也没有足够筛选条件时,`targetMode` 为 `ambiguous`。 + +例子: + +- “把草稿删了” +- “帮我审核一下” +- “退回这个单” + +系统应提示用户选择候选或补充条件。 + +## Action Policy + +| 动作 | 安全等级 | 第一版行为 | +| --- | --- | --- | +| 查询 | `read_only` | 直接查询并展示结果 | +| 规则咨询 | `read_only` | 走政策/规则解释,不进入单据查询 | +| 删除 | `confirm_required` | 展示候选或打开详情页确认,不直接删除 | +| 审核通过 | `confirm_required` | 展示待审候选或打开审核详情,不直接通过 | +| 驳回/退回 | `confirm_required` | 展示待审候选或打开审核详情,不直接驳回 | +| 批量删除/批量审核 | `blocked` | 阻断并要求用户选择具体单据 | + +## 用户可见思考过程 + +筛选型命令必须复用现有查询 thinking events,并补充动作意图说明: + +1. 解析自然语言动作和筛选条件。 +2. 判断操作风险和目标定位方式。 +3. 查询业务单据接口。 +4. 按条件组合筛选候选。 +5. 展示候选卡片和下一步入口。 + +示例: + +```text +解析:识别到“删除”是高风险动作,对象是“草稿”,时间条件是“3 天前”。 +策略:不会直接删除,将先查询我的草稿候选。 +结果:命中 2 张草稿,请打开详情页确认删除目标。 +``` + +## 文件边界 + +- 新增 `workbenchIntentFrameModel.js`:负责解析用户输入到 `IntentFrame`。 +- 新增 `workbenchIntentActionPolicy.js`:负责动作安全策略和下一步路由判断。 +- 调整 `workbenchAiCommandIntentModel.js`:保留会话内最近草稿解析,但不再单独拥有顶层意图判断。 +- 调整 `useWorkbenchAiCommandIntents.js`:基于 `IntentFrame` 分发到当前上下文直达或候选查询。 +- 调整 `aiDocumentQueryIntent.js` 和 `aiDocumentQueryModel.js`:补充风险筛选、相对日期和筛选摘要。 +- 补充前端测试,覆盖组合型输入和安全边界。 + +## 迁移步骤 + +1. 先为 `IntentFrame` 解析补测试: + - “删除刚才那个草稿”解析为 `delete + draft + current_context + confirm_required`。 + - “删除 3 天前的草稿”解析为 `delete + draft + filtered_candidates + confirm_required`。 + - “审核合规没有风险的申请”解析为 `approve + application + risk:none + filtered_candidates + confirm_required`。 + - “审批规则怎么走”解析为 `ask_policy`,不进入单据查询。 +2. 实现 `workbenchIntentFrameModel.js`,不接入 UI。 +3. 实现风险和相对日期筛选能力,让查询 flow 能承接筛选型命令。 +4. 接入 `useWorkbenchAiCommandIntents.js`: + - 当前上下文直达:生成详情确认入口。 + - 筛选候选:调用 `handleAiDocumentQueryIntent(normalizedQuery, pendingMessage)`。 + - 条件不足:提示补充条件或查询可选候选。 +5. 移除或降级旧的散落正则,让顶层输入先走统一框架。 +6. 跑定向测试、相邻测试、前端构建和 5173 工作台烟测。 + +## 验收标准 + +- 输入“删除刚才那个草稿”时,系统定位当前会话最近草稿,并只打开详情确认入口。 +- 输入“删除 3 天前的草稿”时,系统展示筛选思考过程和草稿候选,不使用最近草稿快捷路径。 +- 输入“审核合规没有风险的申请”时,系统查询待我审核申请,并筛选无风险候选。 +- 输入“审批规则怎么走”时,不进入单据查询。 +- 删除、审核、驳回均不通过自然语言直接执行最终动作。 +- 新增/调整测试全部通过,前端构建通过,`git diff --check` 无空白错误。 + +## 后续演进 + +- 当后端 steward planner 能稳定输出同等 `IntentFrame` 时,可以把 Parser 层迁到后端,前端只保留策略兜底。 +- 如果需要跨会话目标记忆,可把最近创建/保存草稿写入会话快照,并附带过期时间和用户确认边界。 +- 如果未来引入 LangGraph,应把它用于多步状态编排,而不是替代 `IntentFrame` schema 本身。 diff --git a/document/work-log/2026-06-24.md b/document/work-log/2026-06-24.md index c483cba..832c7de 100644 --- a/document/work-log/2026-06-24.md +++ b/document/work-log/2026-06-24.md @@ -396,8 +396,62 @@ - 验证:`node --test web/tests/workbench-ai-intent-planner-model.test.mjs`、`node --test web/tests/workbench-ai-application-gate-model.test.mjs`、`node --test web/tests/workbench-ai-application-context-submit.test.mjs`、`node --test web/tests/steward-plan-model-pending-flow.test.mjs` 均通过;`git diff --check -- web/src/composables/workbenchAiMode/workbenchAiIntentPlannerModel.js web/tests/workbench-ai-intent-planner-model.test.mjs` 无输出。 - 影响:用户输入“2026-02-20 至 2026-02-23,去上海出差,辅助国网仿生产服务器部署,交通火车”时,如果门禁已查明没有可关联申请单,前端会把“应先申请单据”直接落到申请预览链路,不再表现成只会反复识别意图。 +- 22:04:我修复了 AI 工作台短句意图漏识别,覆盖“删除草稿”和“我要审核/待办审批”这两类高频输入。 + - Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;本轮修改集中在 AI 工作台命令意图、待审单据查询识别和对应前端测试。 + - 根因:工作台输入链路目前优先进入模型规划,但前端本地可执行意图只覆盖申请预览、报销和单据查询的较完整问法;“我要审核”没有命中 `resolveAiDocumentQueryIntent()` 的待审查询触发词,“删除草稿”则没有上下文命令入口,容易退回普通 steward 规划或被当作报销填槽文本。 + - 修改:新增 `workbenchAiCommandIntentModel.js` 和 `useWorkbenchAiCommandIntents.js`,把“删除草稿 / 删除这个申请单 / 把刚才保存的草稿删掉”等短句识别为上下文命令;命中最近草稿时只给“查看草稿详情”动作,要求用户在详情页二次确认删除,不直接执行破坏性删除。 + - 修改:`usePersonalWorkbenchAiMode.js` 接入命令意图 composable,并让删除草稿意图优先于报销草稿填槽处理;未找到最近草稿时自动转为“我的草稿单据”查询,帮助用户先选中目标。 + - 修改:`aiDocumentQueryIntent.js` 扩展“我要审核 / 我要审批 / 待办审批 / 去审核 / 处理审批”等短句到待我审核单据查询,同时排除“审批规则怎么走”这类政策咨询,避免误打到单据列表。 + - 测试:先补红灯测试复现缺口;实现后 `node --test web/tests/workbench-ai-command-intent-model.test.mjs web/tests/ai-document-query-model.test.mjs` 通过 19/19;相邻 `workbench-ai-action-router.test.mjs` 和 `workbench-ai-intent-planner-model.test.mjs` 通过;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出。 + - 真页烟测:当前 `x-financial-local-linux` 正在监听 5173,`curl -I http://127.0.0.1:5173/app/workbench` 返回 200,说明本地 AI 工作台入口可访问。 + - 影响:用户在 AI 工作台直接输入“删除草稿”时,会被引导到最近草稿详情并保留删除确认边界;输入“我要审核”或“待办审批”时,会直接查询待我审核单据,不再表现为没识别到意图。 + +- 22:31:我把 AI 工作台意图识别从场景补丁收敛成统一 Intent Frame 方案,并按方案完成第一版前端接线。 + - Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;本轮在 22:04 短句修复基础上继续新增 Markdown 方案、统一意图框架、动作策略、筛选能力和前端测试。 + - 文档:新增 `2026-06-24-workbench-intent-frame-design.md`,明确 `IntentFrame Parser -> Target Resolver -> Action Policy -> 业务 flow` 的总体方案;用户确认只需要 `.md` 后,我清理了临时 DOCX 产物,只保留 Markdown 文档。 + - 修改:新增 `workbenchIntentFrameModel.js`,把输入统一解析为 `action / objectType / filters / targetMode / safetyLevel / normalizedQuery`;覆盖“删除刚才那个草稿”“删除 3 天前的草稿”“审核合规没有风险的申请”和“审批规则怎么走”。 + - 修改:新增 `workbenchIntentActionPolicy.js`,把删除、审核、驳回固定为 `confirm_required`;当前上下文目标只打开详情确认,筛选型目标只查询候选,不通过自然语言直接执行副作用。 + - 修改:`useWorkbenchAiCommandIntents.js` 先走统一 Intent Frame,再分发到最近草稿详情确认或候选查询;并排除“删除附件/票据”这类非单据删除,避免抢走附件流程。 + - 修改:`aiDocumentQueryIntent.js` 和 `aiDocumentQueryModel.js` 增加“3 天前”相对日期、无风险/高/中/低风险筛选、`我的草稿单据` 查询来源识别和风险摘要展示;“审批规则怎么走”仍保持规则咨询,不进入单据查询。 + - 测试:先补红灯测试复现缺口;实现后 `node --test web/tests/workbench-intent-frame-model.test.mjs` 通过 4/4,`node --test web/tests/ai-document-query-model.test.mjs` 通过 16/16;相邻 `workbench-ai-command-intent-model.test.mjs`、`workbench-ai-action-router.test.mjs`、`workbench-ai-intent-planner-model.test.mjs` 均通过。 + - 验证:`npm --prefix web run build` 通过,保留既有 Rollup pure 注释与 chunk size warning;`git diff --check -- ...` 无输出;`curl -I http://127.0.0.1:5173/app/workbench` 返回 200。 + - 影响:后续“删除 3 天前的草稿”会先转成“我的 3天前 草稿单据”候选查询;“审核合规没有风险的申请”会先转成“待我审核 无风险 申请单”候选查询;“刚才那个草稿”仍可在当前会话内定位最近草稿,但只给详情确认入口。 + +- 22:36:我修复了“删除申请单草稿”虽然识别到删除动作,但前端没有显示删除思考过程的问题。 + - Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;本轮继续修改统一 Intent Frame 查询句、单据查询 thinking 和对应回归测试。 + - 根因:`resolveWorkbenchIntentFrame()` 能解析出 `action=delete`,但 `normalizedQuery` 被压成“我的草稿单据”,丢了“申请单”筛选;同时 `handleAiDocumentQueryIntent()` 只接收查询句,不接收原始 `commandFrame`,导致 thinking 只展示“解析筛选条件”,没有展示“删除是高风险动作,不会直接执行,会先筛选候选”。 + - 修改:`workbenchIntentFrameModel.js` 保留“草稿 + 申请单”的组合筛选,`删除申请单草稿` 现在生成 `我的 草稿 申请单`,避免查询阶段退化成全部草稿。 + - 修改:`aiDocumentQueryModel.js` 新增 `buildAiDocumentQueryThinkingEvents()`,当传入 `commandFrame` 且 `safetyLevel=confirm_required` 时,首个 thinking 事件固定为“识别高风险操作意图”,文案明确删除/审核不会直接执行,会先筛选候选。 + - 修改:`useWorkbenchAiDocumentQueryFlow.js` 支持第三个参数 `{ commandFrame }`,`useWorkbenchAiCommandIntents.js` 在候选查询时传入统一意图帧,让查询 thinking 保留原始动作语义。 + - 测试:新增回归覆盖 `删除申请单草稿`,断言查询句保留 `申请单` 与 `草稿`,且 thinking 首条包含“删除 / 不会直接执行 / 先筛选候选”;相关 `workbench-intent-frame-model.test.mjs` 6/6 通过。 + - 验证:`node --test web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/ai-document-query-model.test.mjs` 通过 27/27;相邻 `workbench-ai-action-router.test.mjs` 和 `workbench-ai-intent-planner-model.test.mjs` 通过 17/17;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出;5173 工作台路由返回 200。 + - 影响:用户输入“删除申请单草稿”时,不会只看到普通查询筛选;系统会先展示删除动作的高风险策略思考,再查询“我的草稿申请单”候选,并保留详情页二次确认边界。 + +- 22:42:我补强了高风险命令的最终候选结果提示,让用户在卡片结果里也能看到“不会直接删除/审核”和快捷入口说明。 + - Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;本轮继续修改 `aiDocumentQueryModel.js`、查询 flow 和统一意图回归测试。 + - 根因:22:36 只把删除动作写进 thinking 事件,但最终候选结果仍是普通单据卡片和“查看详情”按钮;用户如果只看结果卡片,会看不到“系统不会直接删除,请先进入详情确认”的明确操作边界。 + - 修改:`buildAiDocumentQueryMessage()` 支持 `commandFrame`,当命令为删除/审核/驳回等 `confirm_required` 动作时,在候选卡片上方插入高风险操作提示:系统不会直接删除/审核相关单据,需点击下方候选单据里的快捷按钮并进入详情核对后再操作。 + - 修改:候选单据卡片的操作按钮会随命令动作改文案:删除为“进入详情确认删除”,审核为“进入详情确认审核”,驳回为“进入详情确认驳回”;普通查询仍保持“查看详情”。 + - 修改:`useWorkbenchAiDocumentQueryFlow.js` 在生成最终查询消息时传入 `commandFrame`,保证真实工作台路径能展示同一套提示和按钮文案。 + - 测试:新增回归断言 `删除申请单草稿` 的结果消息包含“系统不会直接删除相关单据 / 请点击下方候选单据里的快捷按钮 / 进入单据详情核对后再操作”,并出现 `进入详情确认删除` 按钮文案。 + - 验证:`node --test web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/ai-document-query-model.test.mjs` 通过 28/28;相邻 `workbench-ai-action-router.test.mjs` 和 `workbench-ai-intent-planner-model.test.mjs` 通过 17/17;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出;5173 工作台路由返回 200。 + - 影响:用户输入“删除申请单草稿”后,既能在 thinking 里看到删除动作识别,也能在最终结果卡片里看到删除确认边界和实体快捷入口,不会误以为系统已经直接删除或只能普通查看。 + +- 22:49:我根据截图修复了“删除申请单草稿”结果页只剩“已查询到相关单据”、高风险提示和候选卡片没有显示的问题。 + - Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;工作区仍是本轮 AI 工作台意图识别和结果渲染相关未提交改动。 + - 根因:高风险提示块里使用了 `

` 标签,但 `conversationTrustedHtml` 的 trusted HTML 白名单不允许 `

`;安全渲染会把包含该标签的整段 trusted HTML 丢弃,所以页面只保留 Markdown 标题,看起来像没有继续删除思考。 + - 修改:`aiDocumentQueryModel.js` 将高风险提示正文改为白名单已允许的 `

`,不扩大 trusted HTML 标签面;`personal-workbench-ai-mode.css` 增加提示块样式,让“系统不会直接删除相关单据”和后续详情确认说明稳定显示在候选卡片上方。 + - 测试:先新增渲染级红灯测试复现截图,确认渲染后只剩标题;修复后该测试断言 `ai-document-command-guidance`、`系统不会直接删除相关单据`、`进入详情确认删除` 和 `ai-document-card-list` 都保留在最终 HTML 中。 + - 验证:`node --test web/tests/ai-document-query-model.test.mjs` 通过 17/17;`node --test web/tests/ai-document-query-model.test.mjs web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/workbench-ai-action-router.test.mjs web/tests/workbench-ai-intent-planner-model.test.mjs` 通过 46/46;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出;`curl -I http://127.0.0.1:5173/app/workbench` 返回 200。 + - 影响:用户输入“删除申请单草稿”后,结果标题下方会恢复高风险说明、候选单据卡片和“进入详情确认删除”快捷按钮;系统仍不会直接删除单据,而是要求进入详情核对后再操作。 + ## 遗留问题 +- 22:49:本轮用渲染级回归测试确认 trusted HTML 已恢复,但还没有做真实浏览器点击级回放和截图复核。建议后续在 5173 输入“删除申请单草稿”,确认真实主题下提示块、候选卡片和按钮没有拥挤或错位。 +- 22:42:本轮仍未做真实浏览器点击级回放确认高风险提示在 AI 工作台卡片里的视觉效果。建议后续在 5173 输入“删除申请单草稿”,截图确认提示块、候选卡片和“进入详情确认删除”按钮在当前主题下没有拥挤或错位。 +- 22:36:本轮仍未做浏览器点击级回放确认“删除申请单草稿”的实际 thinking 卡片视觉状态。建议后续在真实 5173 工作台输入该句,确认首条 thinking 为删除高风险策略、后续才是查询和筛选候选。 +- 22:31:本轮已完成统一意图框架的模型测试、查询筛选测试、相邻前端测试、构建和 5173 路由烟测,但没有做浏览器点击级回放确认“删除 3 天前的草稿 / 审核合规没有风险的申请”的最终候选卡片。建议后续在真实工作台输入这两句,截图确认 thinking、候选列表和详情入口。 +- 22:04:本轮完成了前端行为测试、构建和 5173 路由烟测,但没有做浏览器点击级回放确认输入“删除草稿 / 我要审核”的最终卡片状态。建议后续在真实浏览器里回放这两个短句,截图确认动作卡片和待审单据列表符合预期。 - 09:41:当前 Skill 是新建在项目级 `.codex/skills` 目录里,本轮可以通过文件检查验证结构,但是否被未来会话自动加载还依赖 Codex 对项目 Skill 的刷新机制。建议后续新开会话或下一次任务时确认 Skill 列表是否出现 `agent-change-log`。 - 09:43:`.codex/` 曾被 `.gitignore` 整体忽略,新建的 `agent-change-log` 默认不会进入普通提交范围;09:44 已改成只放行该 Skill。建议后续如果还新增其他项目 Skill,也按同样方式逐个显式放行,别一次性开放整个 `.codex`。 - 10:01:当前工作区已有大量未提交改动,且本地 `main` ahead 1。建议后续如果真的发现 upstream 新提交,先用 fetch 和 `HEAD..@{u}` 写日志;只有在工作区干净、可快进时再执行 `git pull --ff-only`,避免把其他智能体提交和本地半成品混到一起。 @@ -488,6 +542,15 @@ - [x] ~~让 AI 模式模型规划等待期间持续追加 thinking 事件,而不是静态显示“思考中”后一次性出现步骤。~~(完成于 17:26,证据:真页干净会话 thinking 数量从 2 条逐步增长到 6 条,相关前端测试 33/33 通过) - [x] ~~修复 AI 工作台“保存草稿”后的上下文提交短句,让“提交这个单据”复用最近申请草稿而不是重新规划。~~(完成于 17:40,证据:`workbench-ai-application-context-submit.test.mjs` 与 `workbench-ai-application-gate-model.test.mjs` 通过) - [x] ~~修复“完整出差信息但未说申请/报销”时只停在候选流程确认的问题,让唯一的“先发起出差申请”候选流直接进入申请预览计划。~~(完成于 17:48,证据:`workbench-ai-intent-planner-model.test.mjs` 新增回归通过,相邻 4 组前端测试通过) +- [x] ~~修复 AI 工作台“删除草稿”和“我要审核/待办审批”短句意图漏识别。~~(完成于 22:04,证据:`node --test web/tests/workbench-ai-command-intent-model.test.mjs web/tests/ai-document-query-model.test.mjs` 通过 19/19,前端 build 通过) +- [ ] 在真实 5173 AI 工作台分别输入“删除草稿”和“我要审核”,确认删除草稿只打开详情确认入口、审核短句直接返回待我审核单据卡片。(来源:22:04 短句意图修复) +- [x] ~~落地 AI 工作台统一意图识别 Markdown 设计文档,并实现第一版 Intent Frame + Action Policy。~~(完成于 22:31,证据:`2026-06-24-workbench-intent-frame-design.md` 已新增,`workbench-intent-frame-model.test.mjs` 4/4 与 `ai-document-query-model.test.mjs` 16/16 通过) +- [ ] 在真实 5173 AI 工作台分别输入“删除 3 天前的草稿”和“审核合规没有风险的申请”,确认系统先筛选候选而不是直接执行删除/审核。(来源:22:31 统一 Intent Frame 接线) +- [x] ~~修复“删除申请单草稿”不显示删除动作思考的问题。~~(完成于 22:36,证据:`workbench-intent-frame-model.test.mjs` 新增回归通过,相关前端测试 44/44 通过,前端 build 通过) +- [ ] 在真实 5173 AI 工作台输入“删除申请单草稿”,确认首条 thinking 明确显示“删除”高风险策略,且结果只展示申请单草稿候选。(来源:22:36 删除动作 thinking 修复) +- [x] ~~为高风险删除/审核候选结果补充用户可见确认边界说明和实体快捷按钮文案。~~(完成于 22:42,证据:`workbench-intent-frame-model.test.mjs` 新增结果提示回归通过,相关前端测试 45/45 通过,前端 build 通过) +- [x] ~~修复“删除申请单草稿”高风险提示和候选卡片被 trusted HTML 安全渲染整块丢弃的问题。~~(完成于 22:49,证据:新增渲染级红灯测试后修复,相关前端测试 46/46 通过,前端 build 通过) +- [ ] 在真实 5173 AI 工作台输入“删除申请单草稿”,确认结果卡片上方显示高风险说明,候选单据按钮显示“进入详情确认删除”。(来源:22:42 高风险结果提示补强) - [ ] 单独修复或重写 `workbench-ai-mode-switch.test.mjs` 的旧静态结构断言,使它适配 `WorkbenchAiFileStrip` 和 OCR composable 拆分后的真实代码。(来源:17:26 额外测试发现) - [ ] 单独修复或重写 `workbench-ai-mode-expense-scene-action.test.mjs` 与 `expense-application-fast-preview.test.mjs` 中继续扫描旧 Vue 单文件的静态断言,改为覆盖 composable/model 的行为测试。(来源:17:40 上下文提交验证) - [ ] 在真实 5173 AI 工作台回放“2026-02-20 至 2026-02-23,去上海出差,辅助国网仿生产服务器部署,交通火车”,确认唯一申请候选流直接生成申请核对表。(来源:17:48 无动作话术直进申请预览修复) diff --git a/server/rules/finance-rules/公司通信费报销规则.xlsx b/server/rules/finance-rules/公司通信费报销规则.xlsx index 020ca4560c6ea322b0c78add14c171b81a902106..948de19c522f5377dcd49cc2439026545bf3227f 100644 GIT binary patch delta 408 zcmZ3dw@!~Iz?+#xgn@y9gTbYIBF{k%m+~7i2e-vDPQ0p6?|0aMr!7A9)!x!uyblYFP147I{Qq+^OvI{l?sE0}mY-sRBY3uDHoI*1 z>pSDe#9}k)s$#c`^x@j)YoGo2!d@VC|7+s{fkiCdYkJdo7aNprHnh~{J?HiP;cU+Y zffb70y6h)5%dFFxyuJS6`8Lg&Cl#+4U;SQtOqT#!yYl;&{ITu@K_6b`O`U}Ip|{F%{|jmf2avlhp577#7W zYs3tsC%X$g2XPGqn;AjetwN7M+*!gtVD1YM8+a&A))6%aDM=Nz2T{vJT|m?uQA-e| UE(VrM5VHpH=8Cz2sHb9{00rf(QUCw| delta 408 zcmZ3dw@!~Iz?+#xgn@y9gMl}1BF{k%-n<(zRTVcjPQ0p6pLN)Pr!9WzlX)72UJ`0w zQ}<}TUcRk&P4p6%t8A)l zm+r8d#y&ak9DI0tQtiyYp$eO&)IIE~Z>d~=vUJb=cjcWzJ6BxV<8`zueo9fTy6ac7 zopoRCx2!Y%mheAu4_659{(ru;Ovr(7BW7mI9AyDE28PX_8BN)kc=I-EaXe=M(Zak& z%s_gwyTEf0*FdnD5yagp^ccjQCF}#{z7Vm2hvH-%QFD-zR8e~nwM^6nM7Y