Skip to content

dsh-workplan 2.0.4 — 回执判定四缺陷修复 + 交互式收尾留痕

Choose a tag to compare

@abbaababa abbaababa released this 05 Nov 13:43
· 11 commits to main since this release

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.4 Release,由上游 CI 生成 catalog

安装

dsh plugin --profile web add dsh-workplan@2.0.4

制品校验

  • dsh-workplan-2.0.4.tgz
  • SHA256 0060d7401e90e6c2a39f68e436577dd4c147594466545ebe5be8082ca95e894a