Repository navigation
dsh-workplan 2.0.4 — 回执判定四缺陷修复 + 交互式收尾留痕
2.0.4 — 2026-11-05
修复「子 Agent 干完活却交不了差」的四条判定缺陷,并给交互式会话收尾加上「放行但留痕」。
一、问题与证据链
用户 2026-11-05 报告:计划里 5 个子 Agent 的产物都已在磁盘上,结果却被判「结果块无法解析」「未提供结构化证据块」,交付门禁反复重开;同一会话里还出现「子任务没完成就先给结论」。
逐条核对子会话原始回执后确认,这不是模型没干活,而是四处判定把「格式瑕疵」当成了「没有证据」:
| # | 事实 | 证据 |
|---|---|---|
| 1 | 3 份回执结尾各少一个 },补一个括号后 JSON.parse 立即通过 |
逐字符括号扫描;补后解析成功 |
| 2 | 2 份回执 JSON 合法,只是漏写 WORKPLAN_EVIDENCE 标记(放在代码块里) |
旧实现判「未提供证据块」,与事实相反 |
| 3 | 旧验收只做 实际文本.includes(声明原文),同义改写一律判「没回应」 |
acceptanceCoverage() |
| 4 | reported 状态没有 done 出边,复核已回报的行必撞「非法闭环迁移」 |
状态迁移表 |
| 5 | 交互式会话 steer 上限 2 次,用尽后静默放行,用户看不到「这次是没做完就收尾」 | onTurnStopping |
二、改了什么
- 回执解析有界修复:新增
closeOpenJson/lastSafeCut/repairEvidenceJson,只在结构层补括号与截断,不补内容;修不好的仍如实报错,并给出「只保留 status/summary/acceptance/artifacts/needs 后重发」的下一步。 - 无标记回执可认领:新增
rescueEvidenceFromFence(),仅在缺规定标记时,从代码块中认领「有status且至少带一个证据字段」的对象;计划载荷、配置片段这类普通 JSON 不会被误认。 - 验收匹配放宽到语义层:新增字符二元组 Dice 相似度与否定词一致性校验——同义改写、语序调整算同一条;删掉「不得」这类否定词,或只抄前半句,仍然判不覆盖。
- 状态机补齐:已回报的行再次交付时保持
reported,不再强写done,也不再报非法迁移。 - 交互式收尾「放行但留痕」(方案 B):steer 用尽时不再沉默
return,而是把releasedIncomplete(轮次、进度、未完成项)记入计划状态、向会话追加一条 notice、并写一条 warn 日志;三处使用同一组数字。headless 场景维持原有WORKPLAN_INCOMPLETE硬失败语义。 - 错误文案分档:截断、少闭合符、缺标记三种情况给出各自的修复指令,不再统一说「无法解析」。
三、验证
- 新增
tests/workplan-user-logic-204.test.ts:13 条用例覆盖同义改写、部分回应、删否定词、只抄前半句、缺括号、缺标记、误认普通 JSON、已回报复核。其中「删否定词」「只抄前半句」两类假阳性由独立复核子 Agent 用 18 条真实差异对复现后补入。 npm test:562 条用例全过,0 失败。npm run build重新生成lib/、dist/、client.js,与src/同步。npm pack --dry-run文件清单核对:不含.backups、node_modules、测试临时文件与任何凭证。
四、范围说明(重要)
本版本不含官方 @deepseek-ai/dsh-client-ui-chat 的界面文案改动。那条改动(「已完成,用时 」→「本轮过程已完成,用时 」)落在第三方包内部文件,属官方 DSH 安装目录,不随本包分发;需要的话请按仓库文档中的说明自行替换,或等待上游修复。
五、发布
- npm:
dsh-workplan@2.0.4 - GitHub Release:
v2.0.4,附dsh-workplan-2.0.4.tgz制品与 SHA256 - 索引源(dsh-plugin-catalog 链路):条目 tarball 指向
v2.0.4Release,由上游 CI 生成 catalog
安装
dsh plugin --profile web add dsh-workplan@2.0.4制品校验
dsh-workplan-2.0.4.tgz- SHA256
0060d7401e90e6c2a39f68e436577dd4c147594466545ebe5be8082ca95e894a