@tea-agent/loop-agent 0.44.0-next.1 → 0.44.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +178 -175
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/executors/pi-sdk-executor.js +29 -1
  4. package/dist/shared/wizard-local-telemetry.js +50 -0
  5. package/dist/worker/console/chat/chat-event-store.js +3 -0
  6. package/dist/worker/console/chat/db-connections.js +790 -0
  7. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +1 -1
  8. package/dist/worker/console/chat/pi-runtime/custom-tools/sql-tools.js +627 -0
  9. package/dist/worker/console/chat/pi-runtime.js +66 -6
  10. package/dist/worker/console/chat/routes.js +154 -3
  11. package/dist/worker/console/chat/sdd-data-alignment.js +8 -31
  12. package/dist/worker/console/chat/timeline-message-order.js +22 -0
  13. package/dist/worker/console/chat/tools.js +34 -0
  14. package/dist/worker/console/chat/turn-process.js +43 -39
  15. package/dist/worker/console/dag-confirmation.js +3 -0
  16. package/dist/worker/console/dag-execution-receipt.js +3 -0
  17. package/dist/worker/console/operator-actions.js +32 -2
  18. package/dist/worker/console/server.js +5 -1
  19. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-8-j6y-sd.js → abnfDiagram-N423BO3Z-COQlLTI7.js} +1 -1
  20. package/dist/worker/console/static/assets/{arc-eoQiMvuk.js → arc-zN3QkNaV.js} +1 -1
  21. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-C4A3uMcI.js → architectureDiagram-T3A2C74G-Pyoyj5f2.js} +1 -1
  22. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-D4zD2F-Q.js → blockDiagram-VBNYF7ZC-BNppA5WW.js} +1 -1
  23. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-j1RkJziL.js → c4Diagram-5PPSVZJV-lyxL8nTx.js} +1 -1
  24. package/dist/worker/console/static/assets/channel-CgLPkTw2.js +1 -0
  25. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-YBHmhik1.js → chunk-2GRJ4B5K-0hgjcdK4.js} +1 -1
  26. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-COfWyo9P.js → chunk-2Q5K7J3B-D63N9d4i.js} +1 -1
  27. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-I99OUkHY.js → chunk-5RXB4S5H-CUw2AyB5.js} +1 -1
  28. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-XKxoJNJ4.js → chunk-5VM5RSS4-Q_kwZT30.js} +1 -1
  29. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DLT_cYx1.js → chunk-6Q2QTUOP-C7vMiKcw.js} +1 -1
  30. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CxcKZ9mV.js → chunk-GF5L2VYU-T9GbV5Hz.js} +1 -1
  31. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-V1EqXdjY.js → chunk-JWPE2WC7-D8nUSUJI.js} +1 -1
  32. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DebTtdFp.js → chunk-KBJHAD2P-BCH2ewdp.js} +1 -1
  33. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-B-ivNRDf.js → chunk-RYQCIY6F-BTdDuDBN.js} +1 -1
  34. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DC_Ds11b.js → chunk-XXDRQBXY-Cqm2RcKF.js} +1 -1
  35. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuSD1Mhb.js +1 -0
  36. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuSD1Mhb.js +1 -0
  37. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-sWEqKwIb.js → cose-bilkent-JH36ORCC-pjwfpVu4.js} +1 -1
  38. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BXa_dcu4.js → cynefin-VYW2F7L2-BvalptKA.js} +1 -1
  39. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-C-Mle84F.js → cynefinDiagram-MW4NZA55-BU4qJ6d7.js} +1 -1
  40. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CXPDBITe.js → dagre-VZM6K2ZE-DVTpq8J9.js} +1 -1
  41. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CC-WJQfa.js → diagram-7IWD3JNH-B8s1W6Fc.js} +1 -1
  42. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CDAV5Vs4.js → diagram-B4RE2ZJO-DPrFk9yH.js} +1 -1
  43. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-CmFiAcNz.js → diagram-LBJQPF4R-CnQIQsHC.js} +1 -1
  44. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DPBZHuyn.js → diagram-Q27KOJAE-op0DEpCv.js} +1 -1
  45. package/dist/worker/console/static/assets/{diagram-UB23O5K3-jUlm_Ds3.js → diagram-UB23O5K3-DXQamm4T.js} +1 -1
  46. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DWhQ3mfY.js → ebnfDiagram-BXEA7PRR-b1ad2C0r.js} +1 -1
  47. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-Tr2gMqet.js → erDiagram-JOGREHBK-B4cD-ZFJ.js} +1 -1
  48. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DJjVQHPA.js → flowDiagram-UKHOOZJN-CrgGjlQ1.js} +1 -1
  49. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-D74dQ4u0.js → ganttDiagram-PKOTCBZU-DovmXQNV.js} +1 -1
  50. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js → gitGraphDiagram-DS77QQ5N-DpFyu2Jn.js} +1 -1
  51. package/dist/worker/console/static/assets/index-DHBWEwz_.css +1 -0
  52. package/dist/worker/console/static/assets/index-JRfTUgP7.js +478 -0
  53. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-ILCbxJyb.js → infoDiagram-6WML65LV-D3MoQZIl.js} +1 -1
  54. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DeuWBQ89.js → ishikawaDiagram-WSZJBQD7-Ci6C1yjS.js} +1 -1
  55. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CF5ih8Fk.js → journeyDiagram-NVQOT4AX-BWMo2lIP.js} +1 -1
  56. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-C7yOSuRO.js → kanban-definition-27J2QSJJ-BdthIAg3.js} +1 -1
  57. package/dist/worker/console/static/assets/{linear-BDZ9riWi.js → linear-DuFAlSOj.js} +1 -1
  58. package/dist/worker/console/static/assets/{mermaid.core-7pKqYtpZ.js → mermaid.core-Dqz3Slj9.js} +5 -5
  59. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-LeJDybSU.js → mindmap-definition-FAOFIHXS-DNVTrD09.js} +1 -1
  60. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BJvT3pMD.js → pegDiagram-VL7TDLO6-CgfZPfBh.js} +1 -1
  61. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-_rGqpMan.js → pieDiagram-7S7Q4E2Y-ClM9P7yo.js} +1 -1
  62. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DPcSv5aA.js → quadrantDiagram-CIZ2JOQS-DwnEak2J.js} +1 -1
  63. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Drxx4hkJ.js → railroadDiagram-AXF67PYL-rK4hxt9P.js} +1 -1
  64. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BCTUdU4z.js → requirementDiagram-LRYGKXZP-Cjqa6vo3.js} +1 -1
  65. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B6wzbZmB.js → sankeyDiagram-W5VNT64P-D3Fa250Z.js} +1 -1
  66. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BGt8d3QQ.js → sequenceDiagram-SI44F4Z6-2PdrNajj.js} +1 -1
  67. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-7nlhJKo7.js → sizeCapture-X5ZJPWSS-BBcuGeZn.js} +1 -1
  68. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Cv2stqMA.js → stateDiagram-OKZ733FA-CSJX9X6s.js} +1 -1
  69. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cqskj0zt.js +1 -0
  70. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-qDAo4Yc1.js → swimlanes-SLNWSIFB-pOUU1bic.js} +2 -2
  71. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CM0ZIhNP.js +8 -0
  72. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CKbDNKTr.js → timeline-definition-Z64GVDOM-CAeqfQn0.js} +1 -1
  73. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-DI-9EHic.js → vennDiagram-T6HMQDX7-DYPLOMVO.js} +1 -1
  74. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BrzzRDpX.js → wardleyDiagram-T6FBY63Y-Dy2V0Cha.js} +1 -1
  75. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-BclH5hGh.js → xychartDiagram-ELKLHX3M-Dj9o7jrn.js} +1 -1
  76. package/dist/worker/console/static/index.html +2 -2
  77. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +33 -1
  78. package/dist/worker/console/static-src/operator-chat/chat-stream-continuity.js +101 -0
  79. package/dist/worker/console/static-src/operator-chat/compaction-message.js +18 -3
  80. package/dist/worker/console/static-src/operator-chat/pending-user-message.js +17 -3
  81. package/dist/worker/console/static-src/operator-chat/tools-catalog.js +16 -7
  82. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +15 -7
  83. package/dist/worker/console/static-src/operator-chat/useChatStream.js +47 -5
  84. package/dist/worker/console/static-src/operator-chat/useChatThread.js +24 -2
  85. package/dist/worker/console/workspace-context.js +2 -0
  86. package/dist/worker/observe/static/console-theme.css +174 -0
  87. package/dist/worker/observe/static/console-theme.js +36 -0
  88. package/dist/worker/observe/static/operator-chrome.css +85 -0
  89. package/dist/worker/observe/static/operator-chrome.js +51 -0
  90. package/dist/worker/scheduler/scheduled-goal-evidence.js +60 -2
  91. package/dist/worker/scheduler/scheduled-goal-store.js +10 -0
  92. package/package.json +3 -1
  93. package/dist/worker/console/static/assets/channel-ChE7y-cx.js +0 -1
  94. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +0 -1
  95. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +0 -1
  96. package/dist/worker/console/static/assets/index-BWkIfcrK.css +0 -1
  97. package/dist/worker/console/static/assets/index-Cdkvw_H6.js +0 -469
  98. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +0 -1
  99. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bwy4QUTO.js +0 -8
package/CHANGELOG.md CHANGED
@@ -2,16 +2,23 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ - Console 新增低饱和的「暮色蓝」深色与「雾光白」浅色主题,保留默认暖纸色;柔和背景、轻量选中态与独立按钮配色减少视觉刺激。顶部仅显示带「主题」悬停提示的紧凑明暗图标按钮,点击后展开「默认 / 深色 / 浅色」,选完自动收起,支持点击外部或 Escape 关闭;初始使用默认主题;即时切换对话、操作与观测界面,刷新后记住选择,浏览器存储不可用时仍可在当前页面切换。
6
+ - Operator Chat 在后台断线重连后不再丢消息:检测到中断会自动补齐缺口内容,也不会把正常的历史回放误判成丢事件而反复重连。
7
+ - Operator Chat 的恢复快照现在只会合并属于目标会话的乐观提交;切换会话后,旧会话尚未确认的输入不会再因延迟重连恢复而显示到新会话中。
8
+ - `/sdd-bingo` 成功提示现在展示上报的 Skill 与 Session ID;轨迹顶部会出现当前会话的常驻 SDD 身份栏,可一键复制、首次请求后自动更新;该上报以独立“操作”事件留痕,刷新或导出后仍在,不再伪装成工具调用。
9
+ - Operator Chat 发送消息后的空白光标改为 Codex 式“正在思考”,真实思考、工具过程或最终回答出现后自然接替;并修复了状态偶发显示在用户输入上方的问题。
10
+ - Operator Chat 移除工作区会从侧栏和搜索中隐藏其会话,但不删除工作区目录、会话记录或运行数据;重新添加同一路径会恢复原工作区身份、会话归组和顺序。移除当前工作区时退出其活动会话并切到剩余工作区,已知会话详情仍可直接恢复。
11
+
5
12
  ## [0.43.0] - 2026-09-14
6
13
 
7
- - `dag doctor` 现在显式接受 `--json`(与 `dag report`、顶层 `doctor` 的 flag 家族一致),JSON 优先于 `--markdown`;默认输出不变,`operatorCapabilities` 中既有的 `dag doctor --json` 文档不再是会报错的假契约。
8
- - 新增统一 `dogfood:backend` 入口:默认执行零业务副作用的控制器身份预检,记录发布渠道或 tarball SHA、package fingerprint、build commit、Console host 与 DAG controller 身份,任何漂移在模型、Goal 和 DAG 启动前 fail-closed;显式 `--execute` 才运行自然语言预约 live campaign,并为每轮创建独立证据目录和清理记录。
9
- - backend-test Module Index 的 8 列表头、separator、Split Reason、单一 resolved Markdown Path、producer 校验与 consumer parser 收敛到同一协议真源,生成模板通过 drift test 锁定,避免提示词要求 link+path 而执行器只接受单一路径。
14
+ - `dag doctor` 现在真的接受 `--json`,与 `dag report` 和顶层 `doctor` 用法一致,且优先于 `--markdown`;默认输出不变,文档里承诺过的这个用法不再报错。
15
+ - 新增统一 `dogfood:backend` 入口:默认只做零副作用的控制器身份预检,记录发布渠道、包指纹与构建信息,漂移会在模型和 DAG 启动前直接停下;显式 `--execute` 才跑 live campaign,每轮留存独立证据。
16
+ - 后端测试计划的模块清单格式统一到单一来源:8 列表头、分隔行、拆分原因与路径字段只有一套定义,生成的模板与读取方不再各按一套规则解析,避免提示词要求链接加路径而执行器只认单一形式。
10
17
 
11
- - 自然语言预约 turn 现在只暴露 typed workflow actions 与本地只读文件工具,移除 Bash、terminal、browser 和扩展 MCP 通道;预约准备不能再通过通用工具提前探测 HTTP 服务,下一轮恢复普通能力。
12
- - 后端测试计划的 Module Index 现在要求紧邻 8 列 Markdown separator,并拒绝重复 resolved path、箭头或 full-path link;pytest writer 对 writeSet、执行次数、报告存在性等治理型横切绑定只保留 metadata,由 Harness 事实验收,避免业务脚本编造文件路径断言。
18
+ - 自然语言预约的对话轮次现在只开放类型化工作流动作与本地只读文件工具,移除 Bash、终端、浏览器和扩展 MCP 通道;预约准备不能再通过通用工具提前探测 HTTP 服务,下一轮恢复普通能力。
19
+ - 后端测试计划要求模块清单紧跟 8 列分隔行,并拒绝重复路径、箭头或整条路径链接;pytest 生成端不再为执行次数、报告存在性等治理要求编造文件路径断言,改由运行事实统一验收。
13
20
  - 后端测试计划中的场景分区格式在计划节点提前校验并有界重试,避免到模块清单节点才中断;预约工具说明要求忠实保留用户目标,禁止自行增加失败用例、mock 或文件名约束。
14
- - 后端 pytest 生成与唯一集合修复明确要求把 Test Point metadata 放在 primary symbol 的首段 docstring,避免把模块级注释误当成已修复的对应关系。
21
+ - 后端 pytest 生成与唯一集合修复现在要求把测试点信息写在主符号的首段说明里,避免把模块级注释误当成已修复的对应关系。
15
22
  - 对话预约 backend-test 时,验收命令禁止再次调用 pytest,确保标准 DAG 的唯一正式业务执行不会被验收阶段重复触发。
16
23
 
17
24
  - 修复后端用例审查已完成有界修改,却因模型漏报状态行而中断 DAG;保留空改动、阻断状态和越界写入校验。
@@ -19,24 +26,23 @@
19
26
  - 对话定时任务默认在当前项目目录准备和执行,取消强制创建 worktree 和重复初始化;执行改动直接保留在当前目录,继续校验已确认的干净 Git 基线与写入范围。
20
27
 
21
28
  - Console Chat 新增按需工具灰度模式:预约、执行与恢复工具常驻,其余按领域发现后启用;加载状态随会话和分支恢复,异常回退全量模式,默认保留全量以保护核心流程。 发现入口支持按用户意图选能力,预约请求优先保留未来执行语义。
22
-
23
29
  - 自然语言预约自动准备隔离工作区、任务和验收边界,不再要求用户提供内部ID;相同请求复用已有预约,失败保留原因,相对延时从准备完成起算。
24
30
  - 预约任务集中到「观测 → 定时任务」:支持状态筛选与执行/验收详情,对话只保留简洁确认卡和跳转入口。
25
31
 
26
32
  - Console Chat 支持确认后预约工作流:冻结执行时间、范围与预算,到点后台执行并回传原对话;保留失败报告和未知运行状态,取消不会抹除历史结果。
27
- - 前端实现工作台新增多轮冒烟认证:契约冻结的 Mock 策略allowance 现在传入 Plan 决策提示词与 finalize 前置检查——计划选择了运行环境无法验证的 Mock 策略时,会在节点内收到可修复诊断,而不是整轮死在 design-policy shell 且无恢复(冒烟 r51 首测、r52+ 复验)。
28
- - 修复前端 verify 的测试执行报告在冻结命令为 bash 包装形态(`HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 'bash' '-lc' 'npm test'`)时永远无法生成的问题:JSON reporter 现在注入到包装命令内部,行为验证目标重新可通过 trace 门(冒烟 r54 复验)。
29
- - 契约声明的 required deliverables 改为“必须存在的文件”义务,不再并入需求的实现归属判定:上游契约把挂载文件登记为交付物时,Plan 不会陷入无论怎么修正 placement 都无法通过的归属死循环(冒烟 r55/r56 定位、r57 复验)。
30
- - 所有权门禁只判定落在声明实现文件之外的 placement 文件;需求完全由交付物/测试形态文件覆盖时不再误报违规。
31
- - 实现节点与 plan skill 移除已取消的“测试标题必须携带 VT 编号”强制与逐项自检:需求与验证目标的关联由契约承载,测试文件执行成功仍记录为 test-file-execution、行为覆盖保持 unconfirmed,不自动宣称全部行为已覆盖。
32
-
33
- - 修复后端标准与前端研发工作流对同一 PRD 编号风格容忍度不一致:验收标准写作 `AC1`(不加连字符)时后端一次通过、前端却在 DAG 生成期硬失败,且只报 `Invalid` 加一个 JSON 指针;需求 id 现统一规范化为 `AC-1` 形式,非法形态的报错也自带期望格式。
34
- - 前端实现不再对没有构建步骤的合法项目无意义失败:静态验证改为按序取项目**真实拥有**的检查(`build` → 任务声明的静态 `--verify` → 项目自身 `typecheck`/`check`),不再在 writer 已交付正确且测试全过之后才因缺少 `npm run build` 报失败;两者都没有时仍保持原有 `build` 命令,不以 no-op 伪造验证。lint 继续不进入本工作流。
35
- - 修复契约重复提交同一需求导致前端 Plan 节点确定性失败(`coverage must partition complete execution groups exactly once`):覆盖率归属前对需求 id 做保序去重。
33
+ - 前端实现工作台新增多轮冒烟认证:计划选用了运行环境无法验证的 Mock 策略时,会在节点内收到可修复诊断,而不是整轮卡在设计策略校验且无法恢复。
34
+ - 修复前端验证在冻结命令为 bash 包装形态时无法生成测试执行报告的问题:报告输出改为注入命令行内部,行为验证目标重新可以通过追踪校验。
35
+ - 契约声明的必需交付物改为「必须存在的文件」义务,不再并入需求的实现归属判定:上游契约把挂载文件登记为交付物时,计划不再陷入无论怎么修正文件归属都无法通过的归属死循环。
36
+ - 所有权门禁只判定落在声明实现文件之外的文件归属;需求完全由交付物或测试文件覆盖时不再误报违规。
37
+ - 实现阶段与计划技能移除已取消的「测试标题必须携带 VT 编号」强制与逐项自检:需求与验证目标的关联由契约承载,测试文件执行成功只记为文件级执行、行为覆盖保持未确认,不会自动宣称全部行为已覆盖。
38
+
39
+ - 修复后端与前端工作流对同一 PRD 编号风格容忍度不一致:验收标准写成 `AC1`(不加连字符)时后端一次通过、前端却在 DAG 生成期硬失败;需求编号现统一规范为 `AC-1` 形式,非法写法的报错也会说明期望格式。
40
+ - 前端实现不再对没有构建步骤的合法项目无意义失败:静态验证按序取项目真实拥有的检查,不再在交付正确、测试全过之后只因缺少 `npm run build` 报失败,也不会用空命令伪造验证;lint 继续不进入本工作流。
41
+ - 修复契约重复提交同一需求导致前端 Plan 节点确定性失败的问题:覆盖率归属前会先对需求 id 做保序去重,不再整轮中断。
36
42
  - 修复前端 Mock 策略提示词自相矛盾(同时要求“只允许 not-needed”与“有项目证据可选安全策略”)导致 Plan 误选策略、被下游门禁拒绝后整轮失败;硬约束生效时不再输出那句许可性指令。
37
43
 
38
- - Operator Chat 新增对话驱动的真实浏览器自动化:右侧「浏览器」面板改为工作区级 iframe 视图并同步共享浏览器状态,登录态与下载隔离保存在仓库外应用数据;模型可操作同一浏览器进行地址导航、搜索、AI 结构化快照与元素操作、标签页、弹窗、滚动、等待和截图;面板轮询不再生成截图与结构化树,浏览保持流畅,自动化不读取或修改仓库文件,也不暴露任意页面脚本执行。
39
- - 模型驱动的共享浏览器默认改为可见外部窗口,并保留右侧 iframe 预览;地址、搜索和元素操作不再默认生成大截图,搜索从首页逐字填写并提交真实表单,浏览器启动降低自动化指纹,侧边栏轻量同步外部标题与地址并可聚焦窗口,拒绝嵌入的页面也提供外部状态与聚焦入口,用户可在同一持久 profile 中完成站点安全验证。
44
+ - Operator Chat 新增对话驱动的真实浏览器自动化:右侧「浏览器」面板同步共享状态,登录态与下载隔离在仓库外;模型可操作同一浏览器完成导航、搜索、结构化快照、元素操作与截图,不读写仓库文件,也不暴露页面脚本执行。
45
+ - 模型驱动的共享浏览器默认改为可见外部窗口,并保留右侧预览;地址、搜索与元素操作不再默认生成大截图,搜索逐字填写并提交真实表单,启动时降低自动化指纹;无法嵌入的页面提供外部打开与聚焦入口,同一持久配置可完成站点安全验证。
40
46
 
41
47
  - 修复前端实现因测试名称没有 VT 编号而反复失败:按测试命令与文件关联执行结果,保留已有测试名称及测试失败阻断。
42
48
 
@@ -46,27 +52,27 @@
46
52
 
47
53
  - 前端实现恢复已有测试维护与执行:优先任务声明,否则复用项目测试入口;没有测试时不强制补框架,避免只构建通过却遗漏旧单测回归。
48
54
 
49
- - `loop-agent init` 写入目标项目 `.gitignore` 的 managed block 由「四条运行目录」扩展为「完整可重建 init surface」:除 `.harness/`、`.agents/`、`.task-pool/`、`.worktrees/` 外,新增忽略默认 governanceRoot(`ai_workspace/loop-agent/`)、`scripts/` 与 `harness.json`;`AGENTS.md`、`README.md` 保留在共享提交面不被忽略,`.opencode/`、`.pi/`(项目级 client-recovery 产物)是否忽略由用户自行决定。块外用户规则原样保留;`init check-update` / `update --apply-safe` / `init upgrade` 的 `refresh-managed-block` 收敛与只读 `gitignore-migration.json` 评估语义不变。
55
+ - `loop-agent init` 的 `.gitignore` 托管块在原有运行目录外新增忽略治理目录、`scripts/` 与 `harness.json`;`AGENTS.md`、`README.md` 仍在提交面,块外规则保留。
50
56
 
51
- - Pi 模式(自由对话)不再自动注入 `loop-agent init` 投影到项目的治理内容:AGENTS.md 中 `<!-- LOOP_AGENT_INIT_START -->…<!-- LOOP_AGENT_INIT_END -->` 治理块从系统上下文剥离(保留用户手写的其他内容),loop-agent 包内置的 29 个 skills(镜像于 `.agents/skills/`)默认不再进入模型的自动技能列表——用户仍可通过 `/skills:<name>` 手动调用,在 Skills 偏好面板显式开启 auto-invocation 的技能继续自动注入,第三方/自定义技能与用户全局技能不受影响。Workflow 模式行为完全不变;`check-repo` 新增内置技能白名单与包内 `skills/` 目录的漂移断言,防升级失同步。
57
+ - Pi 模式不再自动注入 `loop-agent init` 的治理内容:AGENTS.md 治理块剥离、用户手写内容保留,内置 29 个 skills 默认不自动注入,仍可 `/skills:<name>` 手动调用;显式开启后仍自动注入。
52
58
 
53
- - 侧边栏补齐「当前所在」高亮(对齐 DSH 导航激活态,但配色用 loop 暖纸主题而非 DSH 灰蓝):激活工作区不再透明——以主题橙调浅底 + 左侧主题色 accent 条标识,行内 hover 时保持橙调不被通用灰覆盖;当前会话行同步从近乎不可见的 5% 墨蓝底改为浅橙底 + accent 条 + 橙调标题。新增契约测试锁定该高亮形态。
59
+ - 侧边栏补齐「当前所在」高亮:对齐 DSH 激活态但用 loop 暖纸配色,激活工作区不再透明,改为橙调浅底加左侧主题色标条,hover 时不被通用灰覆盖;当前会话行同步改为浅橙底加橙色标题。
54
60
 
55
- - 工具卡对 `ask_user_question`(模型向用户提问)的展示改为 DSH 风格的可读问答:折叠头部对齐 DSH AskQuestionRow 显示 `N/M 已回答`(等待中显示「等待回答」),不再带首问文本前缀或暴露原始 JSON;展开后按 DSH AskQuestionCard 渲染 `<dl>` 问答对——题干使用 DSH 第三级灰 `#81858c`、答案使用主文本色且每行一个答案(选项与自定义回答组成答案行),未回答显示「未回答」;卡片复用 DSH 的边框、内边距、圆角与 max-height 布局。同步将此前对齐 DSH 样式时滞后的两条契约测试更新为 DSH 真实断言(折叠行箭头 `#81858c`、用户气泡无 `min-width`)。
61
+ - 工具卡对 `ask_user_question`(模型向用户提问)的展示改为 DSH 风格的可读问答:折叠头显示 `N/M 已回答`(等待中显示「等待回答」),不再暴露原始 JSON;展开后按问答对逐条渲染,未回答显示「未回答」。
56
62
 
57
- - 对话页用户消息气泡对齐 DSH 的 MessageItem 令牌:背景从冷灰 `#eceef2` 改为 DSH 的浅蓝 `#edf3fe`(对应 `--dsw-specific-bubble` = `--dsw-static-deepseek-50`),内边距从 `11px 16px` 收紧到 DSH 的 `10px 16px`,圆角保持 22px;移除 DSH 不存在的 `min-width`(两字回复气泡不再被撑宽)并将 `word-break` 从 `normal` 改为 `break-word`。用户消息堆叠的纵向间距同步对齐 DSH userStack 的 `gap: 8px`。
63
+ - 对话页用户消息气泡对齐 DSH 配色与排版:背景从冷灰改为 DSH 浅蓝,内边距收紧、圆角不变,移除多余的最小宽度约束,让两字回复气泡不再被撑宽,长内容换行更合理;消息堆叠间距同步对齐 DSH。
58
64
 
59
- - 对话页「过程折叠」的折叠行最终对齐 DSH 精确令牌:文字从暖棕 `#777269` 改为 DSH 的次级标签灰 `#61666b`,箭头从暖浅灰 `#a39c90` 改为 DSH 的第三级灰 `#81858c`,分隔线从暖米 `#e8e3dc` 改为 DSH 的半透黑 `rgba(0,0,0,.1)`,并移除 hover 变色(与 DSH 无 hover 行为一致);折叠行与 DSH 的间距、字阶(14px/24px、33px 高、0 0 8px padding)保持不变。
65
+ - 对话页「过程折叠」的折叠行配色对齐 DSH:文字、箭头与分隔线统一改用 DSH 的灰阶,并移除 hover 变色(与 DSH 一致);间距与字阶保持不变。
60
66
 
61
- - 对齐 DSH 的消息时间线排序规则:事件序号(`seq`)成为唯一权威排序键——两侧都带 `seq` 的条目按 `seq` 排序,其余按时间、再按稳定插入顺序,不再混用多套近似排序器;合并历史时、过程折叠排序、工具卡归属、实时与重连的文本回放均改用同一共享比较器,跨回合与断线重连的时间轴不再乱序。
67
+ - 对齐 DSH 的消息时间线排序规则:两侧都带事件序号的条目按序号排序,其余按时间与稳定插入顺序,不再混用多套近似排序;历史合并、过程折叠、工具卡归属与断线重连的回放共用同一规则,跨回合时间轴不再乱序。
62
68
 
63
- - 工具卡的回合归属改为确定性:服务端回合 `turnId` 直接挂到分组上(组取自用户消息或助手消息),工具卡优先按 `assistantMessageId` / `turnId` 精确归属,不再依赖时间窗近似;时间窗兜底改用「下一组的首个锚点」收口,删除了旧实现的 `POSITIVE_INFINITY` 收口——该收口会让中间没有用户消息的分组(如压缩卡片)把下一回合的工具吸到上一回合。
69
+ - 工具卡的回合归属改为精确判定:按服务端回合与助手消息标识归属,不再依赖时间窗近似;兜底规则改为「下一组的首个锚点」,不再出现中间没有用户消息的分组把下一回合的工具吸到上一回合的问题。
64
70
 
65
- - 待发送(dispatching)的用户提示按 `updatedAt` 时间戳插入历史时间线,不再一律堆在最新回合之后;非「正在派发」的占位行不渲染。时间分隔符按所在锚点归属,插入多个待发送提示时顺序稳定。
71
+ - 待发送的用户提示按时间戳插入历史时间线的正确位置,不再一律堆在最新回合之后;非「正在派发」的占位行不渲染,连续插入多个提示时顺序保持稳定。
66
72
 
67
- - 助手消息气泡的 ID 与服务器持久化 ID 对齐:服务端在 `message_end` 落库后随 SSE 下发持久化 `messageId`,前端就地重命名正在渲染的气泡为该持久化 ID(不再出现「已确认消息」与流式气泡并存的孪生气泡),离线重连后的文本回放同样按 `messageId` 对齐;历史数据缺少 `messageId` 时回退到文本 + 时间窗匹配。
73
+ - 助手消息气泡的 ID 现在与服务器持久化 ID 对齐:消息落库后前端就地改用持久化 ID,不再出现「已确认消息」与流式气泡并存的孪生气泡,离线重连的文本回放同样对齐;历史数据缺少该 ID 时回退到文本加时间窗匹配。
68
74
 
69
- - 修复前端 Plan 无法提交实现步骤的问题:finalize_plan 支持按 AC 绑定实施动作,缺漏在节点内返回修正,避免空计划反复进入设计审查。
75
+ - 修复前端计划无法提交实现步骤的问题:现在支持按 AC 绑定实施动作,缺漏会在节点内返回修正,不再让空计划反复进入设计审查。
70
76
 
71
77
  - 修复前端最终审查反复猜错范围 ID:明确 checkpoint 参数和补交步骤,收尾正确识别 checkpoint 之后的审批结论。
72
78
 
@@ -76,12 +82,11 @@
76
82
 
77
83
  - Console 将全局「更新程序」与当前工作区初始化分开:添加或切换工作区后只读检查并提示,设置中展示仓库路径、初始化状态、待处理文件和操作进度;首次初始化显式选择可用模型,安全更新仅作用于当前仓库,冲突保留并提示处理。
78
84
 
79
- - Operator Chat 内置内部 provider 瞬态异常恢复:即使目标仓库未执行 `loop-agent init`,也能识别完整或被裁剪的 `UnknownError` / `TypeValidationError` / `LLMRequestError` / 502 / 中文「网络波动、模型处理超时」响应,将其规范化后交给 Pi 原生有界重试;Console 缺省使用 loop-agent 推荐重试参数,项目显式字段优先于用户全局字段,用户配置优先于推荐默认值。共享纯分类器同时生成 OpenCode 插件谓词,overflow、认证、权限、配额、取消和业务错误继续 fail-fast。
85
+ - Operator Chat 内置瞬态异常恢复:未执行 `loop-agent init` 的仓库也能识别网络波动与 502 等响应并交由 Pi 有界重试;重试参数按项目配置、用户全局配置、推荐默认值取值,认证、权限、配额错误仍直接失败。
80
86
 
81
- - Operator Chat 浏览器面板默认以完整权限运行(去掉 iframe 沙箱与「临时解锁」状态条),并放开本机回环地址限制——`localhost` / `127.0.0.1` / `::1` 等本地开发服务器可直接在面板内浏览;地址栏仍仅放行 http/https,`javascript:` / `data:` / `file:` 等危险协议继续拦截,拒绝嵌入站点(X-Frame-Options / frame-ancestors)的解释面板与出口保持不变。
87
+ - Operator Chat 浏览器面板默认以完整权限运行(去掉沙箱与「临时解锁」状态条),本地回环地址上的开发服务器可直接在面板内浏览;地址栏仍只放行 http/https,危险协议继续拦截,拒绝嵌入站点的提示与出口保持不变。
82
88
 
83
89
  - 前端 Plan 普通分片按本批完整需求材料打包,固定提示词、用户消息和工具定义不再挤占 24 KB 分片目标,也不再触发发送前的机械二分,减少小需求逐 AC 会话;实际模型容量检查与超限恢复继续生效。
84
-
85
90
  - 前端 Plan 小任务合并规划不再受固定 48 KB 输入门槛限制,避免提示词、用户消息或工具定义变长导致额外分片;完整输入、其余任务规模条件及容量恢复机制保持不变。
86
91
  - 节点侧栏修复执行分次下拉菜单被执行记录工具栏遮挡的问题,直接展示所选失败尝试的简要原因,并移除重复的左右切换箭头。
87
92
  - Operator Chat 的 Pi Runtime 按职责拆出工具构造、运行态检视和 SDK 适配,并共用创建/恢复/分叉的会话准备流程;对外入口、错误类型和会话行为保持不变。
@@ -89,7 +94,7 @@
89
94
  ### 修复
90
95
 
91
96
  - 对话页修复用户消息在流式回复中漏显示或重复分组、加载历史后的滚动跳动,以及删除会话后旧请求恢复条目的问题;移除工作区后隐藏非选中的空白会话,并正确恢复删除失败的列表状态。
92
- - 修复 Operator Chat 的跨会话输入污染与快速重复提交:切换会话时立即撤销旧会话发送权,草稿、附件和 ↑ 输入历史按会话独立保存;发送、排队、撤回、编辑、插话、文件建议和图片读取的迟到结果只回写原会话。提交改用带快照的有界 attempt,相同内容的快速双 Enter/双击只产生一次请求,失败恢复或排队响应不再覆盖后来输入;流式更新和会话切换保持同一个 composer DOM,中文 IME 更稳定。同步修复 durable 用户消息确认后时间重排导致闪烁光标跑到用户消息上方的问题。
97
+ - 修复 Operator Chat 的跨会话输入污染与快速重复提交:切换会话立即撤销旧会话发送权,草稿、附件与输入历史按会话独立保存,迟到结果只回写原会话;相同内容的快速双击只产生一次请求,中文输入法更稳定,光标不再跑到用户消息上方。
93
98
 
94
99
  - 前端设计审查的写入门禁只统计已提交的审批终态,避免审查范围、发现记录导致合法审批被误判为缺失或歧义;要求修改时保留具体审查意见,缺失、重复及冲突终态仍阻断写入。
95
100
 
@@ -97,28 +102,28 @@
97
102
 
98
103
  ### 新增
99
104
 
100
- - Console Chat 的 `/goal` 持续目标能力对 Pi 模式开放(与工作流模式同语义):斜杠面板两模式均可见 `/goal`;Pi 会话注册 `get_goal` / `create_goal` / `update_goal` 工具并纳入激活集;Goal HTTP 接口(创建/暂停/恢复/清除)在 Pi 会话不再返回模式拒绝;GoalBar 与目标编辑面板在 Pi 会话渲染;压缩恢复、每轮 Goal 上下文与有界自主续跑(仅显式 `/goal` 才 arm,maxRounds 上限,reload/重启/出错/暂停即 disarm)在 Pi 会话可用。
105
+ - Pi 模式支持 `/goal` 持续目标:斜杠面板可见 `/goal`,会话内可管理目标,带进度条与编辑面板,创建/暂停/恢复/清除接口不再被拒;仅显式 `/goal` 才自主续跑,有轮次上限,暂停/重载/出错即停,压缩后仍可用。
101
106
 
102
- - Operator Chat 浏览器面板(DSH 风格):Console 右侧辅助栏新增「浏览器」tab——地址栏(自动补 https、仅 http/https、禁止 javascript/data/file 等危险协议与本机回环地址)、后退/前进/刷新导航栈、系统浏览器跳转;页面运行在无 same-origin、无 top-navigation 的沙箱 iframe 中(访问的页面拿不到 Console 的存储与 API),沙箱状态条支持单页面临时解锁(红色警示 + 一键恢复);对拒绝被嵌入的站点(X-Frame-Options / frame-ancestors)给出明确解释面板与「在系统浏览器打开 / 仍要加载」出口,探测端点仅返回响应头、仅限 http(s) 非回环、8 秒硬超时。
103
- - Operator Chat 源代码管理(DSH 风格):模型获得 `scm` 工具(status/diff/stage/unstage/discard/commit/log/branch/push/pull,固定参数 git 无 shell、限时限量输出);Console 右侧辅助栏新增「源码」面板(DSH GitView 布局——分支下拉切换、已暂存/更改分组与全部暂存/取消暂存、单行提交框 Ctrl+Enter、内联分页历史带 refs 徽标与相对时间、点击文件看 diff、右键菜单放弃更改/复制路径);模型与面板共用同一工作区级 ScmService。
107
+ - Console 右侧栏新增「浏览器」tab:地址栏自动补 https、过滤危险地址,支持前进/后退/刷新与跳系统浏览器;页面在沙箱中打开、拿不到 Console 数据,可临时解锁;拒绝嵌入的站点给出「在系统浏览器打开 / 仍要加载」出口。
108
+ - Operator Chat 新增源代码管理:模型可直接跑 git 状态查看、diff、暂存/取消暂存、放弃更改、提交、日志、分支与推拉;右侧栏新增「源码」面板,支持分支切换、分组暂存、提交框、分页历史、看 diff 与右键放弃更改。
104
109
  - Operator Chat 在具备 Aimax 凭据资格时,向对话进程注入 `$AIMAX_AUTH_TOKEN`(明文或 `sm4:v1:` 解密后的 ticket),供 skills 读取;文件缺失、无法解析或解密失败时不注入该变量。
105
- - Operator Chat 终端管理(DSH 风格):模型获得 `terminal` 持久 PTY 工具(跨平台 shell 目录——Windows 提供 powershell/bash/cmd,macOS/Linux 提供 bash/zsh,pwsh 7 装了即用;cwd/环境变量/后台任务跨调用保留,完成标记协议 + 超时与截断保护,枚举与默认值按平台动态生成);Console 右侧辅助栏新增「终端」面板(xterm.js 渲染,实时查看/接管模型的 shell,按平台动态展示可创建的 shell,支持发送输入、Ctrl+C、终止并关闭);模型 shell 与用户面板共用同一会话注册表并开在工作区仓库根目录,命名区分来源。
106
- - Windows 原生 `cmd.exe` 终端体验补全:仅 Windows 平台提供 `cmd` shell,使用经典 `C:\path>` 提示符、cmd 黑底浅灰配色与方块光标,并补回 ConPTY 丢失的 `Microsoft Windows [版本 …]` 启动横幅;bash 与 PowerShell 保持各自原生输出,不注入 Windows 横幅。
110
+ - Operator Chat 新增终端管理:模型获得 `terminal` 持久终端工具,可按平台创建 powershell/bash/cmd,会话状态跨调用保留;右侧辅助栏新增「终端」面板,可查看、接管模型 shell 并直接输入或中断。
111
+ - Windows 终端补全:仅 Windows 有 `cmd` shell,使用经典 `C:\path>` 提示符、黑底浅灰配色,补回 `Microsoft Windows [版本 …]` 横幅;bash 与 PowerShell 输出不变。
107
112
  - Operator Chat 详情栏调整:「源码」tab 紧邻「文件」tab,便于在文件预览与源码管理之间快速切换。
108
113
 
109
114
  ### 改进
110
115
 
111
- - 上游网关不可达(502/503、Service temporarily unavailable、Bad Gateway)现在归类为 `upstream-unavailable` 并默认重试;计划重试阶梯在 fail-closed 时不再把这类可达性故障改写成 `unsupported-provider-capability`,避免把上游宕机误诊为模型能力不匹配(2026-09-11 深夜 r18/r19 的误诊根因)。
116
+ - 上游网关不可达(502/503、Service temporarily unavailable、Bad Gateway)现在归类为上游不可用并默认重试,不再被误判成模型能力不匹配而放弃重试。
112
117
 
113
- - 前端 DAG 的验证与审查证据打通:verify 节点落盘逐命令退出证据 `contracts/frontend-verification-evidence.json`(`commandId/label/lane/exitCode/ok` + `allPassed` + `lintStatus`/`lintConfigured`),review-context 暴露该证据,评审协议与评审节点 prompt 改为读逐命令退出状态,不再从绑定 trace 推断命令是否成功;未声明 lint 的任务使用协议内 `unavailable` 并标记 `lintConfigured:false`,不再自造取值。
114
- - 前端恢复轮不再丢 run 级产物:imported 节点(如 writer-admission)在自身节点目录之外写出的文件(worktree baseline 等)会随继承搬运到子 run,修复恢复轮 `frontend-review-context-shell` 因产物缺失 ENOENT 而必然失败的死结。
115
- - 前端 Plan finalize 的确定性前置检查要求**每个**冻结静态命令都被验证目标覆盖(此前只要求覆盖其中一个),把历史上只能由评审散文提出的类型检查缺口变成计划节点可机器修复的项;恢复 finalize 的 identical-plan 门改用**决策身份**(忽略 `rationale`/`purpose`/`notApplicableReason`/`specReference`),只改文案或引用不再算作修复。
116
- - 失败分类不再被模型正文污染:provider/传输类判定只读 stderr、非 JSON 子进程输出与结构化错误字段,模型正文与工具参数不参与 auth/rate-limit/quota/网络判定(修复 finding id 等自产文本把可重试的 empty-output 误判为不可重试 auth 而拖垮整轮的问题);工具终态型节点(design/review)在本轮已提交终态却没有收尾文本时直接判成功,不再空转一次重试。
117
- - 修复 Console 中 `newTask` 与 `importPrd` 并发创建同一任务时 `task already exists` 导致 intake 卡死;前端 run 的 `dag rerun --from-node` 不再因只读 artifact shell(review-context/closeout)被判 unsafe 而永远 ineligible(hard budget 模板仍按设计不支持 rerun)。
118
+ - 前端验证与审查按每条命令的退出结果打通:验证节点会记录每个命令的退出状态,评审直接读这些结果判断是否成功,不再从运行轨迹里推断;任务未声明 lint 时统一标记为不可用,不再自造取值。
119
+ - 前端恢复运行不再丢运行级产物:节点在自身目录之外写出的文件(如基线记录)会随继承一起搬到子运行,修复恢复时因产物缺失而必然失败的问题。
120
+ - 前端计划收尾的前置检查现在要求**每个**冻结的静态命令都被验证目标覆盖(此前只需覆盖其中一个),类型检查缺口因此在计划阶段就能被自动修复;恢复收尾判断计划是否变化时改用**决策身份**,只改文案或引用不再算作修复。
121
+ - 失败原因判定不再被模型正文干扰:认证、限流、配额与网络类判定只看进程错误输出,模型回复与工具参数不再参与,避免自产文本把可重试失败误判为不可重试;设计/评审类节点已给出终态但没写收尾文本时直接判成功,不再空转一次重试。
122
+ - 修复 Console 中同时新建任务与导入需求文档时因「任务已存在」报错导致流程卡死;前端运行的 `dag rerun --from-node` 不再因只读产物节点被误判为不安全而始终不可用(硬预算模板仍不支持重跑)。
118
123
 
119
- - 前端恢复不再从评审自由文本猜测文件删除、状态和 VT 映射硬约束,避免把保留项、否定描述或错误现状当作修复要求;语义闭合继续由设计评审裁决。显式 VT 断言必须包含目标覆盖,不能以任意变化代替修复。
124
+ - 前端恢复不再从评审自由文本里猜测文件删除、状态和验证目标约束,避免把保留项、否定描述或错误现状当作修复要求;语义是否闭合仍由设计评审裁决。显式验证目标断言必须包含目标覆盖,不能以任意变化代替修复。
120
125
 
121
- - 前端 Plan 精简改为由 runtime 直接完成 typed ledger finalize,合并无决策的全局会话,统一 Risk/Shape 信号并按 endpoint/resource domain 合并 Mock/Data 批次;提交事实模块改名为 `frontend-committed-facts`,移除无生产消费者的 shadow observer 与旧 Review/Admission 对照链。新增 Plan canary 指标读取和决策/安全投影旁路,但在真实同输入 before/after 数据齐备前不切换生产 Plan 契约。
126
+ - 前端计划精简改由运行时收尾:合并没有决策的全局会话,统一风险与形态信号,按接口/资源域合并 Mock 与数据批次,移除没有消费者的影子观察器与旧评审/准入对照链;新增计划指标读取与对照旁路,但在真实同输入对比数据齐备前不切换生产计划规则。
122
127
 
123
128
  - 修复前端设计评审与实施评审遗漏 `complete_review_scope` 工具权限,导致模型无法完成分段确认、最终评审反复被拒绝的问题;补充真实 Pi SDK 工具激活与分段收口回归验证。
124
129
 
@@ -126,25 +131,25 @@
126
131
 
127
132
  - 节点侧栏在首次原始运行中隐藏「来源与影响」,派生运行保留该入口;打开运行中节点默认定位到「执行记录」,手动选择和明确的链接位置在刷新时保持。
128
133
 
129
- - 修复前端契约可选字段未填写时,评审分片索引引用不存在字段、导致设计评审启动前失败的问题。分片生成跳过 undefined;读取端明确拒绝缺失字段、无效引用、重复或非法范围及未索引内容,保留合法空数组和 JSON 空值。
134
+ - 修复前端契约可选字段未填写时,评审分片索引引用不存在字段、导致设计评审启动前失败的问题。分片生成会跳过未填写字段;读取端明确拒绝缺失字段、无效引用、重复或非法范围及未索引内容,保留合法空数组和 JSON 空值。
130
135
 
131
136
  - Operator Chat 侧栏「添加工作区」图标改为与 DSH 一致的文件夹加号,不再用纯加号。
132
137
  - Operator Chat 侧栏改为单一「新会话」;空白会话在输入框上方用芯片选择工作区和模式(工作流 / Pi),有历史后芯片收起。不再用落地页双卡或「新 Pi」按钮;换模式会复用或新建对应空白会话,不会改已有会话的模式。
133
138
  - 修复模型续跑取消后带部分文字仍被标记成功的问题;前端 Plan 的取消、认证、限流及策略失败优先于容量恢复,精确格式错误保留原修复路径。完整性检查按需求建立单次索引,减少大计划重复扫描,同时拆分纯检查与恢复策略模块。
134
139
  - 长会话中的输入框不再因历史消息和工具记录增多而逐键重绘整段会话,输入与自动增高在低性能电脑上更流畅。
135
- - 优化 Operator Chat 长会话的流式渲染:完成回合、消息行、工具卡和用户输入锚点建立稳定的 memo 边界,流式文本更新不再重复渲染整段历史或重装锚点测量监听;缓存会在历史消息或工具实际更新时正确失效;无新增折叠回合时不再提交空状态及重复写入本地存储,工具参数与结果格式化按真实输入变化缓存。
136
- - 对话页「过程折叠」对齐 DSH 细节:模型回复完成时直接进入折叠态,不再先展开再跳动;折叠摘要、过程内容和最终回答采用与 DSH 一致的间距,折叠内容仍保留在页面中,浏览器 Ctrl+F 可直接命中并自动展开;折叠行展开时不再多出底部空隙;箭头改为 16px、颜色更淡的固定图标(靠旋转而非换图标),并补齐系统「减少动态效果」偏好;汇总文案新增「N 个 subagent」,内置 Explore 子代理不再计入普通工具调用。
140
+ - 优化 Operator Chat 长会话的流式渲染:流式文本更新不再重复渲染整段历史,输入框测量也不会反复重建;缓存只在历史消息或工具真的变化时失效,没有新增折叠回合时不再写入空状态和重复存本地;工具参数与结果的格式化按实际输入变化缓存。
141
+ - 对话页「过程折叠」调整:回复完成即折叠,不再先展开再跳动;间距统一,Ctrl+F 可命中折叠内容并自动展开;箭头改为更淡的固定图标并支持系统「减少动态效果」;汇总新增「N 个 subagent」,内置 Explore 子代理不计入工具调用。
137
142
  - 恢复前端 Plan 实时事实分页读取、逐需求 UX 遗漏检查与已完成范围复用;超限时补齐剩余验证目标,并接通 DAG 到 SDK 的原会话续跑。局部状态修改保留其他需求的关联,沿用耐久账本、显式替换和冻结分片边界。
138
143
 
139
- - DAG 的 Pi SDK 节点遇到 `stopReason=length` 时,先在原会话内最多续跑 3 次,保留已完成写入和事实,成功恢复不消耗额外节点重试次数;共享原超时与上下文预算,已成功提交终态时不重复续跑,耗尽后才进入原有缩片或重试路径。
140
- - 修复前端 Design Review 成功后可能清空原 Plan 账本的问题,撤回未接通合同校验和物化的修订工具;同时移除误加在实施后 Review 的修订指令。Review 节点内局部修订尚未实现,设计缺陷仍走原有拒绝与恢复流程。
144
+ - Pi 节点遇到模型输出因长度截断时,先在原会话内最多续跑 3 次,保留已完成的写入和事实,成功恢复不消耗额外节点重试次数;续跑共用原超时与上下文预算,已提交终态时不重复续跑,耗尽后才走原有缩片或重试。
145
+ - 修复前端设计评审成功后可能清空原计划记录的问题,撤回未接通合同校验与落盘的修订工具;同时移除误加在实施后评审的修订指令。评审节点内局部修订尚未实现,设计缺陷仍走原有拒绝与恢复流程。
141
146
  - 前端 Plan 输出超限后按已提交事实续跑:带部分结果或网关诊断也会保留进度,自动缩小剩余需求;单个过大需求进一步按缺失事实逐项恢复,并在恢复耗尽时输出剩余范围。
142
- - 大需求前端 Plan 增加可分页的实时事实读取,保留长标识和跨批验收绑定;UX 按有限需求范围执行,重试复用完整批次和全局命名表,逐需求检查遗漏。冻结交付文件超过单 writer 容量时在 Contract 后提前识别拆分需求;自动子任务执行链路尚未接通,此项不代表自动拆分已可用。
147
+ - 大需求的前端计划新增可分页的实时事实读取,保留长标识与跨批验收绑定;体验检查限定在需求内,重试复用完整批次与全局命名表并逐需求检查遗漏。冻结交付文件超出单次写入容量时会在契约后提前识别拆分需求;自动子任务链路尚未接通,不代表自动拆分已可用。
143
148
 
144
- - 前端 DAG 修正否定约束导致的小任务误升级;Plan 在分片前统一 compact 判定并保留完整执行组。支持冻结 coverage 并发上限(1–4,默认 4),限流后减少后续并发且不增加重试。自动恢复子进程与 DAG 共用长跑超时,避免继承通用 120 秒上限而中途终止。
145
- - 前端 DAG 保留完整需求并按作用域/执行组分批,工具提交改为先校验和耐久保存再回执;支持按组共享覆盖、逐端点/逐 finding 提交和缺项恢复。小任务走短流程,容量耗尽直接缩小剩余工作;模型窗口不再硬编码为 100K/16K。独立 AC、来源保真与 writer/verify 门禁保持有效。
146
- - 观测台阅读与口径修补:失败节点的产出页把「错误输出」提到正文之前,未登记文件关系时不再展示空文件卡;检查器 Tab 条放不下时两端渐隐提示并保证选中 Tab 可见,每页顶部说明卡可收起。异常 Task 的分类与建议跟进显示中文业务术语(未知 token 原样透传并可悬停看原始值),资源池「合计」改为口径明确的「已建 Task」并附悬停说明,数据更新文案改为「数据更新于 … · 仅提示」。DAG 详情面包屑使用可读运行标题(缺失回退运行 ID、窄屏截断),「记录保存位置」移入「诊断信息」折叠区,页面刷新按钮与标题同行靠右。
147
- - 观测台保留检查器 Tab 导航,日志分类收进下拉框,辅助操作改为带提示的图标;所有执行记录区域(检查器执行记录/产出、运行页最新输出)统一配备对话式「回到底部」悬浮按钮:内容可滚动且视口离开底部即出现,贴底或内容不足一屏时隐藏,点击回到底部;活跃运行同时恢复跟随并提示未读条数,终态运行同样可用。执行分次仅在相关页面固定显示,上翻暂停跟随,并记住分次阅读位置。补充日志搜索、错误过滤、图定位和完整脱敏文本下载。
149
+ - 前端 DAG 修正否定约束导致的小任务误升级;计划分片前统一判断精简与否并保留完整执行组;冻结阶段的覆盖并发上限可配置(1–4,默认 4),限流后减少后续并发且不加重试;自动恢复子进程与 DAG 共用长跑超时,不再继承通用 120 秒上限。
150
+ - 前端 DAG 保留完整需求、按作用域/执行组分批,提交先校验保存再回执;支持按组共享覆盖、逐端点/逐 finding 提交和缺项恢复。小任务走短流程,容量耗尽即缩小工作,模型窗口不再固定为 100K/16K;独立验收与写入/验证门禁有效。
151
+ - 观测台阅读与口径修补:失败节点产出页把「错误输出」提到正文之前,检查器 Tab 条放不下时两端渐隐并保证选中项可见;异常任务分类改用中文业务术语,资源池「合计」改为「已建 Task」,数据更新文案改为「数据更新于 … · 仅提示」。
152
+ - 检查器保留 Tab 导航,日志分类收进下拉框;执行记录区域统一加上「回到底部」按钮,离开底部时出现、点击即回到底部;活跃运行同时恢复跟随并提示未读条数,终态运行同样可用,分次阅读位置会被记住,并补充日志搜索、错误过滤与完整脱敏文本下载。
148
153
  - 实际上下文改为中文材料目录优先、技术信息折叠;修复历史轮次混读当前上下文和旧请求覆盖新尝试的问题。保留仅看错误与原始协议事件,原始协议使用直接可达的图标开关,移除单项更多菜单和日志 HTML 导出;交接包明确固定来源并支持刷新。
149
154
  - 检查器隐藏无内容或明确不适用的入口:单次执行不显示尝试对比,Shell/静态节点不显示实际上下文,静态节点不显示执行记录;切换节点与新增尝试时自动更新,保留用户当前的比较选择。
150
155
  - 资源池筛选覆盖任务标题和全部任务区域,返回列表及历史分页保留阅读状态;重跑草稿和影响预览可恢复,结果不确定时原样重试已确认的请求,避免重复创建运行。
@@ -154,18 +159,18 @@
154
159
  ### 修复
155
160
 
156
161
  - 悬停或打开会话「更多」菜单时,Pi / 工作流徽章与相对时间一并让出,避免被三个点按钮盖住。
157
- - 修复点「新 Pi」后一发消息侧栏就变成「工作流」:全局会话列表和点进会话时漏了 `sessionMode`,缺省被当成工作流。
162
+ - 修复点「新 Pi」后一发消息侧栏就变成「工作流」:全局会话列表和点进会话时漏了会话模式,缺省被当成工作流。
158
163
  - 修复手动压缩上下文后,长会话会清空并重复绘制大量历史内容的问题;压缩结果现在会直接在当前消息流中更新,不再触发整段会话重载。
159
164
  - 修复对话页存在运行活动时,收起状态的右侧辅助栏展开按钮覆盖「运行活动 N」及数字徽标的问题;中大尺寸布局现在保留 8px 操作间距,窄屏布局不变。
160
165
  - 修复 Operator Chat 消息流的六处实际使用问题:
161
- - **回复被吞**:断线/重连(含每 25 秒的 SSE 事件窗口轮转)后,保留事件里已经生成的正文会在事件流恢复时重新应用到对应回合,不再被静默丢弃;仅当该回合已有更新内容时才跳过,避免重复气泡。
162
- - **用户输入消失或重复**:新消息发送后会在每一帧模型输出中持续显示,不再等回复结束才重新出现;服务端确认后,提交回滚(排队抢占、被拒绝、连接失败)不再删掉已确认的消息;确认帧到达时会原地合并临时消息与会话快照,不再重复显示同一条输入。
166
+ - **回复被吞**:断线重连后,已经生成的正文会在连接恢复时重新补回到对应回合,不再被静默丢弃;仅当该回合已有更新内容时才跳过,避免重复气泡。
167
+ - **用户输入消失或重复**:新消息发送后会持续显示,不再等回复结束才重新出现;服务端确认后,排队抢占、被拒绝或连接失败的回滚不再删掉已确认的消息;确认到达时会原地合并临时消息与会话内容,不再重复显示同一条输入。
163
168
  - **回复重复**:上下文溢出自动压缩并重新生成后,被打断的旧回复会被取代,不再与重新生成的回复同时显示。
164
169
  - **只有思考没有正文**:模型回复以工具调用或思考结尾时,正文会作为回答显示,不再被折叠进「过程」区。
165
170
  - **空气泡误删**:只包含思考或工具内容、正文为空的回合不再被清理掉。
166
171
  - **停止语义**:被停止中断的工具调用显示「已停止」,不再显示为「出错」并强制展开、计入「N 次出错」。
167
172
 
168
- - 任务成功与收尾只认可匹配当前契约版本和哈希的运行;更新需求后重新审查 gate,旧成功记录不再阻止新运行。需求独立审核接受 `revision: null` 表示无修订,保留拒绝结论和身份校验;相同角色、相同内容的 PRD 重复导入复用不可变引用,不再重复增加副本或无故推进契约版本。
173
+ - 任务成功与收尾只认可匹配当前契约版本与哈希的运行;更新需求后会重新审查门禁,旧成功记录不再阻止新运行。需求独立审核接受无修订并保留拒绝结论与身份校验;相同角色、相同内容的 PRD 重复导入会复用已有引用,不再增加副本或无故推进契约版本。
169
174
 
170
175
  - 前端 Plan 重试复用首次冻结的分片归属,避免重试提示词变长导致进度绑定不匹配或重复处理已完成需求;布局缺失、损坏或漂移时保留证据并阻断派发。风险路由仅忽略完整的范围排除声明,条件句和嵌套否定中的真实权限风险在生成期与运行期均保持升级。
171
176
  - 执行记录搜索直接高亮命中文字,标识当前跳转记录;未搜索或无匹配时禁用上下箭头,清空搜索恢复原文。
@@ -177,43 +182,43 @@
177
182
 
178
183
  ### 重点更新
179
184
 
180
- - **Operator Chat 内置只读 Explore 子 Agent**:主会话可通过 `Agent` 工具委派代码库搜索、符号查找和调用链追踪;子会话 Fresh、one-shot,只暴露 `find`/`ls`/`safe-*`/git 只读工具,父 Turn 停止时一并中止。工具目录中的 Explore 条目改由服务端 `builtinSubagents` 能力字段驱动,后端调整内置子代理时前端自动跟随。
181
- - **前端实现 DAG 稳定性集中修复**:修复 Plan coverage 会话提前停止导致会话数翻倍(切片穷尽才算完成);修复重试梯级遮蔽修复指令(账本修复指引优先于 compact-terminal-first 话术);修复 Plan 按 AC 分片重复发明同一批需求(UX registry 先全局提交再单一会话建模);修复 design 拒绝后自动恢复子 run 无法启动(staging 正确物化拓扑绑定并继承 committed shape facts);修复自动恢复实际重跑整棵 DAG、忽略冻结 reset plan 的问题;`stopReason=length` 截断改判为专门的 `output-limit` 可重试类别,不再误判 `empty-output`;重试额度默认从 3 次提升到 5 次。
182
- - **前端 verification contract v2**:plan 不再手写五值 `type`,改为引用生成期冻结命令目录的 `commandId`,`type: component + npm run build` 这类非法组合在 Plan 工具边界即被拒绝;冻结验证命令引用的基建文件(如 vitest 配置)确定性并入 writeSet admission 边界,writer 不再被具体 writeSet 拦住;Verify bundle 按工作目录和冻结命令去重,static/behavior/Mock/lint lane 复用相同命令结果。
183
- - **backend-test 判定链修复**:N2 不再把 provider 长度截断的 Markdown 计划误判为 `FINISHED`(截断归 `output-too-large`、缺 heading 归 `invalid-output`,均有界 artifact-first retry);N3 以唯一合法 Markdown Path 为 canonical 模块身份(Stem 展示单元格只作冗余展示);唯一 pytest collection repair 缺 `IMPLEMENTATION_OUTCOME` 不再阻断整条执行链(确定性恢复为候选 changed 后仍走全部门禁)。
184
- - **契约幂等与 DAG 恢复强化**:契约重复 prepare 做内容级 no-op 短路(投影与已记录契约及磁盘哈希一致时不递增 revision、不写事务、writeSet gate digest 绑定 hash 不变则继续有效——实测 8.6 小时流水线 7 次修订只有 3 个不同 hash);workspace-drift 细化为内容级逐路径对比(漂移全落在重跑子图自身 readSet/writeSet 内时放行);superseded run 可作为 `dag rerun --from-node` 的事实供体;DAG 退出诊断改用只读异常监视器。
185
+ - **Operator Chat 内置只读 Explore 子 Agent**:主会话可通过 `Agent` 工具委派代码库搜索、符号查找与调用链追踪;子会话只使用 `find`/`ls`/git 等只读工具,父回合停止时一并中止。
186
+ - **前端实现 DAG 稳定性集中修复**:修复规划会话提前停止导致会话数翻倍、重试修复指引被通用话术遮蔽、分片重复发明同一批需求、设计被拒后恢复子流程无法启动、自动恢复误重跑整棵 DAG 等问题;默认重试额度从 3 次提升到 5 次。
187
+ - **前端验证契约 v2**:计划改为引用冻结的命令目录,非法组合(如 `component` 配 `npm run build`)在提交时即被拒绝;验证命令需要的配置文件自动纳入可写范围,不再拦住实现;同一命令在多个验证环节复用结果。
188
+ - **backend-test 判定链修复**:被截断或缺少必需结构的执行计划不再被误判为完成,而是归类为可重试的输出问题;模块身份改为按唯一合法路径判定,展示用名称不再影响结果;单次测试收集修复缺少结果声明时不再阻断整条执行链。
189
+ - **契约幂等与 DAG 恢复强化**:内容相同的重复契约提交不再走完整流程,版本号与已批准的审查保持不变(8.6 小时流水线里 7 次修订只有 3 个不同内容);工作区改动全部落在重跑范围内时不再阻断恢复;被取代的运行可作为续跑来源。
185
190
  - **工具入参预览放宽**:工具入参预览从 1200 字放宽到 4000 字(与会话结果落盘上限对齐),详情栏支持「展开全部」(可视高度最多 720px),Explore 等长 brief 不再被预览截断误导。
186
191
 
187
192
  ### 改进
188
193
 
189
194
 
190
195
 
191
- - DAG 退出诊断改用只读异常监视器,避免诊断逻辑改变宿主异常策略或中断其他并发 run 的取证;退出码使用实际 exit 事件参数。
192
- - 前端分片 VT 归一化同步处理 `replaces` 引用,避免重试修正因分片前缀不同而无法覆盖旧事实。
193
- - 强化 DAG 恢复与契约幂等:重跑计划不会复用 imported 节点读取的漂移输入、缺失/未完成节点,并且仅在 Git HEAD 相同、rename 与治理输入清单可完整判定时放行 scoped drift;`stopReason=length` 的 transport 别名可正确重试。契约 no-op 写入 request ledger 但不伪造事务,重复请求携带新 payload 会被拒绝,且 no-op prepare 不再无谓刷新 DAG。
194
- - 修复契约重复 prepare 空转的问题(实测一次 8.6 小时的流水线里 7 次契约修订只有 3 个不同内容 hash,无内容变化的重复提交每次都走完整事务提交 → 契约投影 → DAG spec 生成 → strict validation → writeSet gate 审查):apply 现在做内容级 no-op 短路——投影结果与已记录契约及磁盘观测哈希完全一致时直接返回当前 ref,不递增 revision、不写日志化事务;writeSet gate digest 绑定 contractRevision+canonicalHash,hash 不变则已批准的 gate 继续有效,不再重复审批。磁盘漂移(observed ≠ ref)不走短路,仍是修复投影。
195
- - 修复 workspace-drift 一刀切阻断 `dag rerun --from-node` 的问题:整指纹对比细化为内容级逐路径对比,漂移全部落在重跑子图自身 readSet/writeSet 内时放行(`workspace-drift-scoped`,重跑本就会重读/重写这些路径);其余情况(导入事实复用节点的输入漂移、无法判定路径的旧 checkpoint)保持严格阻断,高风险写者续跑路径维持整指纹严格判定不变。契约同 hash 重投影不再改写文件,与此叠加后恢复路径不再被无意义漂移阻断。
196
- - superseded run 现在可作为 `dag rerun --from-node` 的事实供体:操作员取代的是 run 整体,其 FINISHED 只读上游节点(contract/scout 等)经既有导入机制继承,不再因父 run 被取代就强制全量重跑;writer 进重跑子图、决策门禁、未解决 ERROR 在闭包外等不安全场景各自的原有阻断不变。
197
- - 修复前端 Plan coverage 会话提前停止导致会话数翻倍的问题(run 3 实测每会话平均仅 1.7 个 record 调用即写结论,把一个切片的活摊到两个会话):coverage 段指令与 COVERAGE BATCH 提示现在明确「切片穷尽才算完成」——本会话分配到的每个需求都必须有已提交的 coverage facts(verification targets 或 evidence gap)才能收尾,批量提交直至穷尽,提前停止会把剩余项拖成 MISSING-FACT 修复会话;MISSING-FACT 队列降级为校验兜底而非主要补齐机制。
198
- - 修复前端 Plan 重试梯级遮蔽修复指令的问题:invalid-output / structured-output-truncated 的账本修复指引现在优先于 compact-terminal-first 等梯级话术。此前 length 失败把重试梯级单调升到 compact-terminal-first 后,后续 invalid-output 重试拿到的是「保持已提交账本完整」的档位指令,与「重提交修正后的 record_* facts」这一唯一治愈动作正面冲突,修复指引成为死代码;修复指引同步补上 duplicate/replace 语义(duplicate 收据是修正邀请而非禁令,replace=true 为同 id 全量替换,回填反向引用不属于重推导已提交事实)。`skills/frontend-plan` 新增跨段引用规则与 Bidirectional VT cross-reference invariant 小节:跨切片引用已提交 VT 时当场以同 id + replace=true 回填,双向引用在提交时即闭合,不再拖到 attempt 末尾的双向检查才暴露。
199
- - 修复 DAG Pi 节点把 provider `stopReason=length` 的输出/上下文截断误判为 `empty-output` 失败的问题:仅 `empty-output` 基础上的长度截断会改判为专门的 `output-limit` 可重试类别(raw 类别保留诊断),已有精确修复指令的类别(output-too-large / invalid-output / protocol-invalid / structured-output-truncated / writer 类)原样保留,避免通用指令遮蔽任务专属修复提示;`output-limit` 通用增量指令(从已提交 typed facts 与现有工作区只补未完成部分、每个生成单元产出后立即校验格式并在当节点修复)作为兜底排在所有精确分支之后,前端规划梯级(compact-terminal-first 正是 length 场景的领域档位)与结构化冻结修复路径优先。只读/结构化/前端规划/后端测试补全策略的默认重试额度从 3 次提升到 5 次;旧 artifact 中的 `writer-thinking-exhausted` / `planner-thinking-exhausted` 终态标签仅作历史保留(Console/报告展示映射同步归入 executor 容量类),新执行不再产生。
200
- - 前端 Scout 在中高复杂度任务中并行收集 target surface 与 design evidence;大型 Plan 将 requirement coverage 按批次并行映射,再按固定顺序归并到唯一 reducer,保持 Contract → Scout → Plan 依赖与确定性终态,同时缩短最长串行等待。
201
- - 前端 Verify bundle 会在同一次执行中按工作目录和冻结命令去重:static、behavior、Mock、lint lane 复用相同命令结果,同时为每个 lane 保留独立证据,避免重复启动耗时的 typecheck/test/build 进程。
202
- - 前端 Micro/Small shape 路由不再把 `test/`、`e2e/`、`docs/` 等验证或文档根目录误计为业务跨域;`src/**` + `test/**` 的局部 UI 改动现在可以正确命中轻量拓扑,真实跨包路径仍保持升级。
203
- - 修复前端 Plan 漏读独立行为证据、重试丢失已重新录入的 UX 名称的问题;必交付文件改由 Contract 显式声明并绑定原始来源,避免把允许修改或参考路径误判为交付义务。缺失交付物和 UX 名称冲突现在可在 Plan 提交前发现并修正,发布 schema 同步支持组件覆盖与复用证据字段。
204
- - 修复前端 DAG 的 Plan 按 AC 分片重复发明同一批需求、交互和 UI 状态的问题:Contract 的 canonical requirement 文本与来源片段改由 runtime 从冻结 ledger 写入,Plan 先基于全部需求提交一次全局 UX registry,再在单一全局 UX 会话中建模组件、状态和交互;来源声明的 UI 状态必须完整闭合,复用既有组件必须提供真实存在的文件证据,交付文件完整性与逐状态/交互组件覆盖由确定性 gate 校验。
196
+ - DAG 退出诊断不再影响其他并发任务的运行与取证,退出码按实际退出结果给出。
197
+ - 前端重试修正不再因分片前缀不同而无法覆盖此前的结论。
198
+ - 强化 DAG 恢复与契约幂等:重跑不会复用已漂移的输入、缺失或未完成的节点,仅在改动可完整判定时放行局部重跑;被截断的传输错误可正确重试;内容相同的重复契约提交直接返回当前版本,携带新内容的重复请求仍会被拒绝。
199
+ - 修复契约重复提交造成的空转:内容一致时直接返回当前版本,不再重复走完整提交与审批;实测一次 8.6 小时的流水线里 7 次修订只有 3 个不同内容;磁盘内容与记录不一致时仍会修复。
200
+ - 修复工作区改动会一刀切阻断 `dag rerun --from-node` 的问题:改动全部落在重跑范围内时放行,其余情况(复用节点的输入漂移、无法判定路径的旧检查点)仍严格阻断。
201
+ - 被取代的运行(superseded)现在可以作为 `dag rerun --from-node` 的续跑来源:已完成的只读上游节点直接继承,不再因父运行被取代就整棵重跑;写者进入重跑范围、决策门禁、未解决的错误等场景仍照旧阻断。
202
+ - 修复前端规划会话提前停止导致会话数翻倍的问题:现在每个需求都要有已提交的覆盖结论才算完成,提前停止会把剩余项留作补齐项,而不是另开一个会话。
203
+ - 修复前端规划重试时修复指引被通用话术遮蔽的问题:后续重试会优先给出针对性的修复动作,并明确重复回执表示可以修正、替换会整体覆盖同一条结论;跨切片引用已提交结论时当场回填,双向引用在提交时即闭合。
204
+ - 修复模型输出被截断时被误判为「无输出」失败的问题:截断现在归类为可重试的输出超限;已有精确修复指引的类别保持不变;默认重试额度从 3 次提升到 5 次。
205
+ - 前端调研与规划在中高复杂度任务中并行收集信息、分批映射需求后按固定顺序归并,保持原有阶段依赖与确定性结果,同时缩短等待时间。
206
+ - 前端验证在同一次执行中按工作目录和冻结命令去重,静态、行为、Mock、lint 等环节复用相同命令结果,避免重复启动耗时的检查进程。
207
+ - 小规模前端改动不再把 `test/`、`e2e/`、`docs/` 这类验证或文档目录误判为跨包改动;`src/**` 加 `test/**` 的局部改动可以走轻量流程,真正跨包仍会升级。
208
+ - 修复前端规划漏读独立行为证据、重试丢失已重新录入的界面名称的问题;必须交付的文件改由契约显式声明并绑定来源,避免把允许修改或仅作参考的路径误判为交付义务;缺失交付物与界面名称冲突现在能在提交前发现并修正。
209
+ - 修复前端规划分片时重复发明同一批需求、交互和界面状态的问题:需求文本与来源由运行时从冻结记录写入,规划先基于全部需求提交一次全局界面清单,再在一个会话里统一建模组件、状态与交互。
205
210
  - 修复顶部一级「观测」入口被恢复工作区残留的 DAG 或上次观测对象劫持的问题:现在点击该入口始终回到当前 Workspace 的运行总览,具体 DAG 仍通过「全屏观测」等显式入口打开。
206
211
  - 修复节点检查器通俗字段旁的问号只有图标、悬浮时看不到具体说明的问题;问号现在支持鼠标悬浮和键盘聚焦,并显示对应字段含义及原技术字段。
207
- - Next 发布测试升级到 Vitest 4.1.11,采用上游 worker RPC 修复,避免所有断言通过后仍因 `onTaskUpdate` 通讯超时阻断发包;同时隔离会改写构建产物的 package-surface 测试,并恢复两条此前被错误嵌套、实际未执行的 Console 更新回归;发布门禁继续严格检查 unhandled errors。
208
- - 前端计划契约新增确定性锚定校验(恶劣网关冒烟 4 轮 design 拒绝的主因):behavior 验证目标必须至少引用一个 requirement,且在契约声明了 UI 状态或交互时必须引用至少一个已声明的 UI 状态(纯逻辑契约豁免)。校验位于共享 schema refine,plan 节点的自修阶梯当场拿到精确到字段的报错并修复,不再烧一整轮 design-review 才发现映射缺失;`skills/frontend-plan` 决策契约参考同步补充 canonical 示例(behavior target 形态、状态名逐字引用、stylingStrategy 禁止承诺任务源非目标能力)。
209
- - 修复前端 design 拒绝后自动恢复子 run 无法启动的问题(恶劣网关前端冒烟三轮复现):staging 物化 child state 时现在按 child spec 写入 `frontendShapeState` 冻结拓扑绑定(此前 execute 前的绑定断言以 `frontend topology binding is missing` 在 398ms 内 fail-closed),并把父 run 中已导入边界节点(contract/scout 等 FINISHED 导入节点)的 committed shape facts 一并继承——否则 child 会在首个 shape 门禁以 `frontend-shape-fact-invalid` 整体 SKIPPED;reset 边界由重跑节点重新提交。同时修复 recovery child runId 派生误传参导致碰撞安全后缀失效、可与已归档 run 同名的问题(默认 `buildDagRunId` 现在正确收到 `{ cwd }` options)。
210
- - 修复 backend-test N2 把 provider `stopReason=length` 的截断 Markdown 计划误判为 `FINISHED`、继而延迟到 N3 `missing-module-index` 的问题:长度截断现在在 producer 节点归类为 `output-too-large`;正常结束但缺少必需 heading、Module Index 八列表/模块行或使用代码围栏时归类为 `invalid-output`。两类失败均使用有界 artifact-first retry,下一 attempt 只携带控制器生成的限长协议诊断;N3 ownership/path/模块数门禁与业务 pytest 单次执行不放宽。
211
- - 可选依赖 `@agent-context/sift` 从 `0.0.1-alpha.6` 精确 pin 升级到 `0.0.1-alpha.7`:新增 `retrieveLines` 行级分片取回与省略点内联 stash 路径/起始行号(模型可直接换算 read 行号),纯文本压缩策略更保守(不同编号/状态的内容不因句式相似而合并);桥接层沿用既有 `createSift`/`siftRequest`/`retrieve` API,行为与回退开关不变,仍不投影 init。
212
- - 修复后端实现 DAG Pi 扩展 resolver 无法解析版本 pin spec 的问题:`packageNameFromSpec` 现在剥除尾部 `@<version>`/`@<dist-tag>`(保留 scoped 包名开头的 `@`),与 Console 插件面语义对齐。此前 settings 中的 `npm:pi-lens@3.8.72`(Console 升级插件写入的形式)会被当作包名 `pi-lens@3.8.72`,永远匹配不上别名表,读侧节点(contract/scout/plan/verify)的 `pi-lens` 全部静默降级为 `not-installed`;`pi-extensions.json` 观测产物可鉴别此场景。
213
- - 修复前端自动恢复实际重跑整棵 DAG、忽略已冻结 reset plan 的问题:恢复 operation 现在校验 operationId/lease 归属,按 parent recovery plan 导入已完成事实并只执行 reset 子图;设计拒绝缺少 typed findings 时 fail-closed;多轮 continuation 会继续注入共享 recovery controller、递增并校验完整 lineage;崩溃重放会复用 completed child;缺少已绑定 child lineage 的伪成功 operation 不再标记 recovered;rerun-task 的全局 requestId 重放会校验请求类型、父 run 与完整 payload,避免串用其它请求结果。
214
- - 冒烟再暴露 writeSet 授权缺口:冻结验证命令引用的基建文件(如 `--config` 的 vitest 配置)不在 plan verification targets 内时,writer 被具体 writeSet 拦住无法创建、verify-shell 必然失败。现在 admission 生效边界确定性并入冻结命令引用的文件(机械提取、仍受 allowedPaths/forbiddenPaths 约束),writer 聚焦检查失败后可自行补齐基建文件。
215
- - 前端 verification contract v2:plan 不再手写五值 `type`,改为引用生成期冻结命令目录的 `commandId`,`mode(static|behavior)` 与 `commandLabel` 由 runtime 在物化时解析——`type: component + npm run build` 这类非法组合在 Plan 工具边界(`verification-target-unknown-command`)与物化校验(`verification-target-phase-mismatch`,behavior 命令必须绑定测试文件)即被拒绝,不再拖到 writer focused-check 才以 `invalid-output` 失败;展示用的 `scope` 不参与控制流。
216
- - 修复 /inspect/* 静态资源(operator-chrome.js/css、观测文档)缺少 Cache-Control 的问题:现在与 Console SPA 一律 `no-store`。此前浏览器启发式缓存会让 Console 更新/重启后继续挂旧版导航模块,表现为顶部导航「回退」到只有操作/观测、缺少对话入口的旧版布局。
212
+ - Next 发布测试升级到 Vitest 4.1.11,避免断言全部通过后仍因通讯超时阻断发包;会改写构建产物的测试被隔离,并恢复两条此前未真正执行的 Console 更新回归;发布门禁继续严格检查未处理错误。
213
+ - 前端计划契约新增确定性校验:行为验证目标必须引用至少一个需求,声明了界面状态或交互时必须引用已声明的界面状态(纯逻辑契约豁免);不符合时在提交阶段当场报出具体字段错误,不再等到评审阶段才发现缺失。
214
+ - 修复前端设计被拒后自动恢复子流程无法启动的问题:恢复时会写入正确的拓扑绑定并继承父流程已完成的结论,不再在首个检查点整体跳过;同时修复恢复流程标识可能误传、与已归档运行同名的问题。
215
+ - 修复后端测试把被截断的计划误判为完成、问题延迟到后续模块校验才暴露的情况:长度截断与缺少必需结构分别归类为对应的输出问题并自动重试,重试只携带系统生成的限长诊断;模块归属、路径与数量门禁不放宽。
216
+ - 可选依赖 `@agent-context/sift` 从 `0.0.1-alpha.6` 升级到 `0.0.1-alpha.7`:新增按行取回能力,可直接换算出所需行号;文本压缩更保守,编号或状态不同的内容不会因句式相似合并;回退开关不变。
217
+ - 修复后端实现流程无法识别带版本号的扩展声明的问题:`npm:pi-lens@3.8.72` 这类写法此前解析不出包名,多个环节会把相关扩展静默当作未安装,现在可以正确匹配。
218
+ - 修复前端自动恢复误重跑整棵 DAG、忽略已冻结恢复计划的问题:恢复现在校验操作归属,只执行重置范围并导入已完成结论;缺少结构化发现时停在原地;崩溃重放复用已完成的子流程;缺少绑定关系的伪成功操作不再标记为已恢复。
219
+ - 修复冻结验证命令引用的基建文件(如 `--config` 指定的 vitest 配置)不在写入许可内、导致实现被权限拦住无法完成的问题:这些文件现在会自动纳入生效范围,仍受既有路径限制约束。
220
+ - 前端验证契约 v2:计划改为引用冻结命令目录而非手写验证类型,非法组合(如 `component` 配 `npm run build`)在提交与物化阶段即被拒绝,不再拖到实现阶段才以格式错误失败;展示用字段不参与控制流。
221
+ - 修复 `/inspect/*` 静态资源缺少缓存控制的问题:现在与 Console 页面一样不使用缓存。此前浏览器会继续使用旧版导航模块,表现为顶部导航缺少对话入口。
217
222
  - 新建、删除和切换对话的反馈更及时;会话列表默认展示 5 条,“展开其余会话”和“收起”也更整齐易用。
218
223
  - 发送消息后会立即显示在对话流中,完成回合的过程摘要也更清晰,长时间等待连接时不会让输入内容消失。
219
224
  - 文件预览支持页面内交互和独立窗口阅读,大型 HTML 内容也能完整打开。
@@ -225,16 +230,16 @@
225
230
  <summary>实现细节(开发者参考)</summary>
226
231
 
227
232
  - Operator Chat 会话列表默认收敛为最近 5 条;展开与收起控件采用稳定的整行布局,折叠工作区后恢复默认列表;长历史会话改为分页加载,并在加载更早消息后保持原有滚动位置。
228
- - Operator Chat 长会话增量构建活动 turn、复用已完成过程节点,并支持对已完成且无错误的历史 turn 进行 Compact,降低长消息流的渲染开销。
229
- - 修复 backend-test Manifest 把模型生成的 Module Stem 展示单元格当成模块身份真源、导致 low-tier 输出(缺 `test_` 前缀或整段 Markdown 链接)在 N3 `module-markdown-path-mismatch` 反复失败的问题:N3 现在先解析唯一合法 Markdown Path 与 `<stem>.md` 相对链接作为 canonical 身份,再校验业务 ownership/split 与路径安全;Stem 单元格只作冗余展示并能确定性重写为 canonical 文件名 stem。strict `backendTest.moduleLayout` 改为先按唯一 required Markdown Path 定位模块,再恢复冻结 Markdown/Pytest path pair,避免错误 stem 提前丢弃整行,同时保留 Plan-only pytest path 修复。Markdown Path 缺失/多候选/越界或与 strict path pair 冲突、以及多行 canonicalize 后同 identity(`duplicate-canonical-module-stem`)继续 fail-closed,不再静默去重。同步加强 N2 prompt(Stem 单元格仅允许纯文件名 stem)。
230
- - 修复 Next Release 的 io-heavy 测试不稳定:在保留发布单 worker、完整测试集合和严格 unhandled-error 门禁的同时,将 Vitest 升级到包含上游 RPC settlement 修复的 4.1.11,避免全绿测试因 `onTaskUpdate` timeout 退出 1;会重建共享 `dist/**` 的 package-surface 测试改由单 worker integration 池持有,避免与 controller identity 指纹检查竞态;并把误嵌套在 `dagDoctor` stub 中的 `consoleUpdateAndInit` suite 移回顶层、补齐 `workspaceId` 契约,使两条回归重新进入真实执行。
231
- - 修复 backend-test 唯一 pytest collection repair 已产生受控非空修改、却因模型遗漏 `IMPLEMENTATION_OUTCOME` 而阻断整条执行链的问题:仅 N11 exact repair writer 可把完全缺失的 outcome 确定性恢复为候选 changed,随后仍必须由 N12 重新通过 scenario、correspondence、payload、collection、fixture 和 readiness 门禁;unknown/conflicting/blocked、空 diff、越界写入及 provider/context failure 继续 fail-closed。
233
+ - 长会话滚动更流畅:活动回合增量构建、已完成的过程节点复用,已完成且无错误的历史回合可压缩,降低长消息流的渲染开销。
234
+ - 修复后端测试模块清单把展示用名称当成模块身份、导致格式稍有不同的输出反复失败的问题:现在按唯一合法路径判定模块身份,展示名称只作展示并可自动改写为规范文件名;路径缺失、多候选、越界或冲突仍会直接判定不通过。
235
+ - 修复 Next 发布的重量级测试不稳定:保留完整测试集合与错误门禁的同时升级 Vitest,避免断言全绿后仍因通讯超时以失败退出;会改写构建产物的测试改为串行执行;两条此前未真正执行的 Console 更新回归恢复。
236
+ - 修复后端测试单次收集修复已产生有效改动、却因缺少结果声明而阻断整条执行链的问题:现在只把完全缺失的结果补为候选修改,随后仍要重新通过场景、对应关系、载荷、收集、夹具与就绪等全部门禁;结果冲突、空改动与越界写入仍直接判定不通过。
232
237
  - 新建和删除对话现在会立即在侧栏中反馈:新建时先显示“正在创建”,删除时平滑淡出;网络失败会自动恢复原会话,不再需要等待整张会话列表刷新后才看到变化。
233
238
  - 新建对话会优先复用当前工作区中真正的空白会话,避免重复创建;有历史消息、工具调用、待发送内容或正在运行的会话不会被复用。
234
239
  - 会话列表刷新现在会复用未变化的行和列表引用,标题、运行状态或队列变化时只更新对应会话,侧栏切换和刷新更平滑。
235
- - Operator Chat 新增仅对具备 Aimax 凭证的用户可见的 `/sdd-bingo` 数据对齐命令;`wizard-local` 模型请求会自动携带与上报一致的 OpenCode 风格会话身份、当前模型和最新 API key,请求头与资格文件变更均在下一次操作自动生效。
240
+ - Operator Chat 新增仅对具备 Aimax 凭证的用户可见的 `/sdd-bingo` 数据对齐命令;`wizard-local` 模型请求会自动携带与上报一致的会话身份、当前模型和最新 API key,凭证变化自动生效。
236
241
  - DAG 节点检查器的「执行记录」默认自动跟随最新内容;右下角新增纯图标悬浮开关,可显式暂停并保留阅读位置,恢复后立即回到底部,悬停时显示当前可执行动作。
237
- - 修复前端任务产物派生续跑无法识别当前节点链的问题;从实现节点继续时,设计约束、写入准入、验证和收尾步骤会按现行流程安全重放。
242
+ - 修复前端任务派生的续跑无法识别当前节点链的问题;从实现节点继续时,设计约束、写入许可、验证和收尾步骤会按现行流程安全执行。
238
243
  - 统一工作区、Todo 和其他滚动区域的滚动条样式,默认更轻巧,鼠标悬浮时也更容易辨认。
239
244
  - HTML 文件预览现在支持页面内的标签切换等交互;较大的自包含 HTML 可以在新窗口中直接完整加载,不再受源码摘要长度影响。
240
245
  - 修复 Operator Chat 长工具链的消息错序:模型过程文字、思考和工具卡片现在按服务端事件顺序稳定交替展示,刷新历史会话后也保持相同顺序。
@@ -244,13 +249,7 @@
244
249
 
245
250
  ## [0.41.3] - 2026-09-04
246
251
 
247
- ### 改进
248
-
249
- - 完善了本发布周期内的日常使用体验和运行稳定性。
250
-
251
- ### 修复
252
-
253
- - 修复了部分功能在特定环境下无法正常使用的问题。
252
+ - 本版本没有用户可见的功能变更;内容为 0.41 线的版本号提升与发布说明修正。
254
253
 
255
254
  ## [0.41.2] - 2026-09-04
256
255
 
@@ -287,66 +286,69 @@
287
286
 
288
287
  ### 新增
289
288
 
290
- - 新增了本发布周期内已经完成并通过验证的功能。
289
+ - 后端测试可为单次 pytest/HTML 执行节点配置每命令超时(`backendTest.executeTimeoutMs`,1 分钟到 2 小时),不配置时仍是 5 分钟。
291
290
 
292
291
  ### 改进
293
292
 
294
- - 完善了日常使用体验和运行稳定性。
293
+ - 对话中的长时间 DAG 执行会保留一条实时状态,持续显示总运行时间、当前阶段、完成步数与最近一次有效进展;点击可直接跳到对应运行。
294
+ - 「Pi 插件」安装的版本下拉增加加载过渡:内网拉取较慢时显示「正在获取版本…」,获取失败可一键重试,不阻塞安装。
295
295
 
296
296
  ### 修复
297
297
 
298
- - 修复了影响使用体验或运行稳定性的问题。
298
+ - DAG 节点「执行过程」导出 HTML 在系统深色模式下不再黑底黑字,正文对比度恢复正常。
299
+ - DAG 节点「执行过程」导出 HTML 在反向代理或子路径部署下不再丢失整页样式。
300
+ - 「Pi 插件」安装在内网源下能正常获取版本列表,不再因作用域包名的编码问题失败。
299
301
 
300
302
  ## [0.40.0] - 2026-08-31
301
303
 
302
304
  ### 重点更新
303
305
 
304
- - **Console 对话页「轨迹」视图**:仿 DSH ui-trajectory 把对话按「用户 → 过程 → AI 回复」渲染为统一单元格列表,每行带类型标签与图标,思考/工具/超长消息可展开收起,支持一键导出自包含 HTML。轨迹顶部新增「会话注入」区,展示真实注入 Pi 会话的系统提示词全文(含字符数与注入上下文 suffix)与模型可见工具目录,离线导出同样包含;每轮新增遥测头行(步骤数、LLM 时长、首 token 延迟、解码吞吐、工具调用数与耗时、上下行 token 与成本),切换历史会话立即显示。同时修复刷新后工具耗时全部变成 0ms/消失(会话恢复现在回填每次工具调用的真实起止时间)、窄窗口耗时列被整体隐藏、展开后内容仍截断在 420 字符、多工作区下轨迹数据恒为空等问题。
305
- - **上下文压力处理默认开启**:Operator Chat 与 DAG Pi 节点在发送前接近模型窗口时主动压缩一次、识别网关「请求上下文过大」响应后压缩并继续原请求、对 OpenAI 格式的大工具输出做线路压缩;消息流按顺序展示触发原因、压缩进度与结果。Anthropic 缺省 prompt cache 形态保持 no-op 不破坏缓存;`HARNESS_CONTEXT_PRESSURE_MODE` / `HARNESS_CONSOLE_SIFT` / `HARNESS_DAG_SIFT` 可整体或分路关闭;可选依赖 `@agent-context/sift@0.0.1-alpha.6` 精确 pin,不投影 init。
306
- - **Console「Pi 插件」管理**:从「设置」提升为与「设置」同级的独立 tab,内置经 npm 校验的插件目录(6303 个,展示 5562 个可安装、含中文说明),支持搜索、每页条数、分页与一键安装/卸载;插件版本改为从 npm 配置的仓库地址拉取(内网镜像可用),安装时提供版本下拉、默认装最新,已安装插件显示实际版本,`@version` 形式的已装包也能正确识别;进度动画改为 JS 驱动,不受系统「减少动态效果」影响。
307
- - **Operator Chat 持续目标模式**:用 `/goal` 或输入框上方的目标条创建跨多回合推进的目标,可随时暂停、继续、编辑或清除;长任务在安全轮数内自动续行,优先处理排队消息;上下文压缩后当前目标自动回到模型上下文;刷新后仍可见,重启 Console 不会未经确认自行续跑。配套新增任务清单与结构化提问卡片,长任务进度与需要用户决策的内容更易理解。
308
- - **多工作区与消息流重构**:同一页面管理多个工作区,会话稳定归属创建它的工作区,会话列表改为独立全局目录(移除工作区不丢会话);消息流整体更紧凑,思考、工具执行、阶段性结果与最终回答按真实发生顺序展示;对话进行中可连续提交多条消息(编辑/删除/立即插入),排队消息由输入框上方队列面板统一管理;右侧辅助栏统一承载文件、上下文、调用记录、运行活动与当前 DAG,宽度可调。
309
- - **CLI 可用性修复**:`--help` 现在直接显示真实 usage(此前 raw-args 命令只在解析出错时才抛出):`task advance` / `task status` / `task source prepare` 与 `dag resume|doctor|report|rerun|...` 的帮助顶部即列出完整参数契约;`task source prepare`(确定性任务源投影)从不可达死代码转正为可用子命令。
310
- - **backend-test 执行与判定系列修复**:pytest 7.x 环境改用 run-owned Python launcher 精确执行已授权 items(不再把 `@<targets-file>` 当普通路径导致全部无法执行);payload readiness 修复空值标记误判 UNSAFE、本地 transport payload 假阴性、同模块安全 payload helper 绑定、`\u0020` 空白表示误判、超长边界 observed 持久化等系列假阳/假阴性;Scenario Partition 的 exact slot 清单正确下发 Markdown writer(普通别名不再替代 partition slots)、补集槽位合同统一;payload/fixture/Markdown→pytest 多类缺陷合并进唯一一次有界 repair;文档审计不再扫描 `.scratch/` 临时证据阻断发布前验证。
306
+ - **Console 对话页「轨迹」视图**:对话按「用户 → 过程 → AI 回复」逐行渲染,可展开收起并一键导出自包含 HTML;顶部展示注入的系统提示词全文与工具目录,每轮附步骤数、耗时与 token 成本,刷新后不再归零。
307
+ - **上下文压力处理默认开启**:Operator Chat 与 DAG 节点在接近模型窗口时会先压缩一次再发送,遇到网关「请求上下文过大」也会压缩后继续原请求;消息流按顺序展示触发原因、压缩进度与结果,压缩能力可整体或分路关闭。
308
+ - **Console「Pi 插件」管理**:从「设置」提升为独立 tab,内置经校验的插件目录(6303 个,5562 个可安装、含中文说明),支持搜索、分页与一键安装卸载;安装时可选版本(默认最新),已装插件显示实际版本,支持内网镜像源。
309
+ - **Operator Chat 持续目标模式**:用 `/goal` 或目标条创建跨多回合推进的目标,可随时暂停、继续、编辑或清除;长任务自动续行,刷新或重启 Console 后目标仍在,并新增任务清单与结构化提问卡片。
310
+ - **多工作区与消息流重构**:同一页面可管理多个工作区,会话稳定归属创建它的工作区,移除工作区不会丢会话;消息流按真实顺序展示思考、工具执行与最终回答,对话中可连续排队、编辑或删除多条消息;右侧辅助栏承载文件、上下文、调用记录与运行活动。
311
+ - **CLI 帮助修复**:`--help` 现在直接列出真实用法,`task advance`、`task status` 与 `dag` 子命令的帮助顶部即给出完整参数说明;`task source prepare` 也恢复可用。
312
+ - **backend-test 执行与判定系列修复**:pytest 7.x 环境下已授权用例现在能被正确执行;修复了空值标记、本地请求、空白写法与超长取值被误判为不安全或前后不一致的假警报,生成与执行的对应关系也不再反复返工。
311
313
 
312
314
  ### 改进
313
315
 
314
- - Windows 上读取运行中的 DAG `state.json` / `run.json` / `interrupt.json` 时,对原子替换窗口内的短暂文件占用与半成品 JSON 做有界重试;Console 协作中止不再因杀毒软件或文件系统竞争偶发误报输入非法。I/O preflight 测试同步采用与该资源分组一致的 60 秒上限,避免进程启动压力造成假失败。
316
+ - Windows 上读取运行中的 DAG 状态不再因文件占用或半成品内容偶发失败,Console 协作中止也不再误报输入非法;相关 I/O 检查的超时上限同步对齐,避免进程启动压力造成假失败。
315
317
  - 检查器「提示词重启」只读态的提示词卡片会撑满剩余高度并在卡片内滚动,不再在面板底部留下大块空白;失败节点的可编辑布局不变。
316
318
  - DAG 节点表「备注」改为节点用途简介(是什么、做什么、目的),不再重复节点 ID;失败节点仍显示错误摘要。检查器标题与图节点悬浮提示同步展示同一句说明。
317
- - 实验「提示词重启」会为 Pi 节点的每次失败 attempt 保存独立、脱敏且 64 KiB 有界的提示词候选;Inspector 始终展示提示词版本选择框,新 run 会列出冻结原始提示词与全部失败尝试(含自动重试产生的恢复提示词),历史 run 未保存候选时明确说明,成功尝试不混入。提示词卡片右上角提供复制图标并以勾选图标反馈成功;已截断候选复制时明确标记为截断预览,并保持只读、禁止直接提交,避免用不完整提示词发起续跑。选择失败候选会载入「全文替换」编辑器;即使节点后续自动重试成功,历史失败候选仍可只读切换查看。
318
- - DAG 节点检查器「执行过程」按执行器分流:Pi 仍看 session-events;有命令的 shell 展示 `shell-command-receipt` 与 stdout/stderr;`frontendBrowserToolPreflight` 等内部处理器展示步骤回执(历史 run 可从 capability / attempt 产物合成)。空态不再把 shell/static 误说成「暂无过程日志」。节点输入补充 named handler 名称。脚本仍属于节点输入,不假装已执行。
319
- - DAG 节点检查器「节点输出」在整段内容为完整 JSON 对象或数组时改为缩进代码块展示,不再把紧凑 `JSON.stringify` 挤成一段 Markdown 段落;截断或非法 JSON、普通 Markdown 仍走原阅读器。
320
- - frontend DAG 的 materialized source references 恢复统一的有界 excerpt 与按需 read 指针,不再把 requirement/acceptance 文档全文复制进每个相关节点,也不再强制 contract/plan 重读全部绑定源文件,降低长需求在多节点中的重复上下文占用。
321
- - frontend-test prepare-package 会从 `docs/templates/`、`harness.json` `governanceRoot`/templates 以及 init 投影的 `ai_workspace/loop-agent/templates/` 拷贝标准场景;full init 目标仓不再静默落到仅含 `STD-FE-SMOKE-ENTRY` 的 fallback。
322
- - frontend-test 环境探测区分 connection-refused(curl 7)与 HTTP 4xx/5xx,并提示先启动本地前端后再从 probe 节点续跑;不再把所有不可达都写成同一句 `frontend-base-url-unreachable`。
319
+ - 实验「提示词重启」会为每次失败尝试保存独立、脱敏且体积有上限的提示词候选;检查器始终提供版本选择,新运行会列出原始提示词与全部失败尝试,历史运行未保存候选时会明确说明。候选可一键复制,被截断的候选会标记为截断预览并禁止直接用于续跑。
320
+ - DAG 节点检查器的「执行过程」按执行方式分别展示:Pi 节点看会话事件,shell 节点显示命令回执与标准输出/错误,内部处理器显示步骤回执;空态不再把 shell 与静态节点说成「暂无过程日志」,节点输入也会标出实际的处理步骤名。
321
+ - DAG 节点检查器「节点输出」在内容为完整 JSON 对象或数组时改为缩进代码块展示,不再挤成一段紧凑文本;截断或非法 JSON、普通 Markdown 仍走原阅读器。
322
+ - 前端 DAG 不再把需求与验收文档全文复制进每个相关节点,改为按需引用有限片段,也不再要求计划与契约重读全部绑定源文件,长需求在多节点间的上下文占用明显降低。
323
+ - frontend-test 的用例打包会从项目模板目录拷贝标准场景;完整初始化出的目标仓库不再静默落到只含一条冒烟用例的兜底集合。
324
+ - frontend-test 的环境探测会区分「端口没人监听」与「服务返回 4xx/5xx」两种失败,并提示先启动本地前端再从失败节点续跑,不再把它们写成同一句不可达提示。
323
325
  - frontend-test 报告解析用例 Markdown 的 `##`/`###` 标题与有序列表(`测试步骤` / `预期结果` / `前置条件与重置`);缺 `测试目的` 时回退到用例 H1,避免主 HTML 出现空步骤。
324
- - `dag rerun --from-node` 把尚未启动的 writer/map 视为首次执行;frontend-test probe 这种失败的 exclusive shell 可以带着下游未跑节点续跑,不必整图 `standaloneTaskRerun`。
325
- - Pi SDK 节点在 stall watchdog(默认 15 分钟无 provider 活动)触发后,会先 abort 当前等待,并在同一会话自动发送一次「继续」;仅 abort 已确认且尚未调用 write 工具时恢复,失败仍判 timeout。绝对墙钟超时与 CLI 后端不走这条恢复。
326
- - DAG 节点检查器「执行过程」时间线默认隐藏原始协议事件(`message_start` / `message_end`),按钮文案为「展开原始协议事件」;用户可点选展开,同会话内选择会保持。
327
- - Operator Chat 的乐观停止现在把“视觉已停止”和 Turn ownership 分开:Abort 获得可靠终态前明确显示“正在停止”,此时可为原会话保存一条服务端持久化的“停止后发送”消息;后一次覆盖前一次,切换会话、刷新页面或 Console 重启不会丢失,旧 Turn 结束后复用正常 Turn 准入路径自动发送,并以固定 `clientRequestId` 防止重复执行。
328
- - Operator Chat 修复快速终止时“停止后发送”与普通发送之间的准入空洞:发送路径改读实时 ownership;若 deferred 请求恰好撞上旧 Turn 终态,会先按服务端状态对账,再使用同一 `clientRequestId` 自动转为普通发送,不再要求用户刷新重试或丢失本次提交。
329
- - `dag rerun-task` 现在会把父 run 最后一轮仍未解决的 `verify-pi` / review 反馈、证据引用和修订轮次带入新完整 DAG;planner、implementer 与 verifier/reviewer 必须修复或举证说明不再适用,不能仅因文件已存在就返回 `already-satisfied`。Console 同步区分「自动修订」「从失败节点恢复」「带反馈重新执行任务」。
330
- - DAG 恢复与治理收敛收窄为两条最小路径:标准治理 `request-revision` 仅在 `maxFixLoops > 0` 时同 run 回到 `implement-pi`;writer 遇到 `unavailable` / `network` / `rate-limit` / `timeout` 时,`dag rerun --from-node` 重跑 writer 本身及安全下游,不再把 parent `ERROR` 改写成 `FINISHED`,任意自定义 shell 也不能仅凭 `verifyEvidence` 获得续跑资格。
331
- - `frontend-plan-pi` 改为 runtime skeleton + editable RFC 7386 patch:`schemaVersion`、source binding、risk、writer target files 与生产 Mock 安全位由 DAG 冻结且不可被 plan/revision 覆盖;节点 validator 将补丁编译为 canonical 完整契约后再交给 review/prewrite,并在 `contracts/candidates/<nodeId>/` 保存每次 raw/extracted/normalized/validation 证据。任务提示与三类结构化重试(invalid-output / provider length 截断 / output-too-large)同步收敛为单一 patch + 唯一 `openspec-citations`;无法在声明文件中解析的可选 verification symbol 会被确定性移除并留下 normalization action,避免格式冲突、完整契约重复输出和说明性 symbol 延迟到 trace 才失败。
332
- - Operator Chat 恢复工具对齐真实能力:系统提示改用 `dagReport` / `dagRerunPlan` / `dagRerun` / `standaloneTaskRerun` / `workerTaskRetry` 真名,不再写 `operator_*` 或把 `dagResume` 当成模型可执行项;`dagDoctor` / `dagStatus` / `workerPoolDoctor` 改为 typed `runId`/`taskId`,不再让模型猜 CLI `args[]`。ADR 0013 自定义 base prompt 上限由 1900 统一调整为 2500(2026-08-18,废止 0.8×2498 比例),预算用于写清节点续跑 / 整单重生 / Worker 重排队分流,以及多轮迭代恢复纪律(先一句话总结上一轮错误、修根因不修症状、禁止原样重交、同错两轮后停下报告)。
333
- - Operator Chat 模型工具面收敛:`advanced` 分类的命令(workflow/loop/benchmark/knowledge-graph 等 8 个只读低频入口)不再进入模型工具白名单,模型注意力集中到高频工具;保留的 27 个 model-callable 官方 CLI 动作全部换上「做什么 + 何时用」语义描述,不再是无信息的 `Official CLI action coverage for ...` 模板;dispatcher 对官方尾部动作的识别从描述前缀匹配改为结构化 `OFFICIAL_TAIL_ACTION_IDS` 集合判断。审查收口:`knowledgeCurate` 纠正为 `mutation`/`advanced`(条件写盘,移出模型面,防经 read 通道传 `--output` 写盘);`promoteRun`/`closeoutTask` 描述去掉 dispatch 不保证的生命周期断言,如实标注为 task-advance 别名并提示先核 run/任务状态。工具清单渲染修复:promptSnippet 去掉重复工具名前缀(SDK 渲染自带 `- name:`,原实现名字出现两遍);`inspect`/`status`/`spineCheck`/`sourceInstructions` 四条占位描述换成语义描述;task-advance 家族(`newTask`/`dagRunTask`)标注与标准流 `taskAdvance` 的关系,避免模型在 5 个相似入口间选错。可调用性修复:`observeLink` 补上 4 个可选参数 schema(dagRunId/taskId/featureId/workerRunId,原空 schema + additionalProperties:false 导致模型传参必被拒、工具名存实亡);Pi 工具参数 schema 现在携带注册表里的参数描述(Type.String/Boolean/Number/Array 注入 `description`,原实现丢弃参数描述、模型只能看到参数名)。
334
-
335
- - Operator Chat 对齐 pi-web:建会话不再传封闭 `tools` 白名单(避免 SDK 把扩展 MCP 工具滤出 registry),创建后 `bindExtensions` 发 `session_start`,再钉激活集。扩展注册的 MCP 工具可被模型调用;`apply_patch` / `full-tools` / `shell` / `coding-chat` 仍排除。
326
+ - `dag rerun --from-node` 把尚未运行的写入与映射节点视为首次执行;失败的 frontend-test 探测节点可以带着下游未跑的节点一起续跑,不必整图重跑。
327
+ - Pi 节点卡住 15 分钟没有任何活动时,会自动中断等待并在同一会话里重发一次「继续」;只有在中断已确认、且尚未开始写文件时才会恢复,恢复失败仍按超时处理。
328
+ - DAG 节点检查器「执行过程」时间线默认隐藏原始协议事件,按钮文案为「展开原始协议事件」;用户可点选展开,同会话内的选择会保持。
329
+ - Operator Chat 点「停止」后会先明确显示「正在停止」,此时仍可提交一条「停止后发送」的消息;它会被持久保存,切换会话、刷新或重启 Console 都不会丢,上一轮结束后自动发出且不会重复执行。
330
+ - Operator Chat 修复了快速终止时「停止后发送」与普通发送之间的竞态:消息不会再卡在中间状态,会自动转为正常发送,用户不必刷新重试,也不会丢失本次提交。
331
+ - `dag rerun-task` 会把上一轮仍未解决的验证与评审反馈带入新一轮:实现与验证角色必须修复或举证说清已不适用,不能只因文件已存在就判为完成。Console 同步区分「自动修订」「从失败节点恢复」「带反馈重新执行任务」等入口。
332
+ - DAG 恢复与治理入口收敛为两条最小路径:`request-revision` 只有在配置了修复轮次时才回到实现节点;遇到临时故障时,用 `dag rerun --from-node` 重跑写入节点与安全下游,失败状态不会被改写成成功。
333
+ - `frontend-plan-pi` 改为在固定骨架上提交补丁:版本号、来源绑定、风险与写入目标文件等关键字段由 DAG 冻结,计划本身不能覆盖;补丁会先被编译校验成完整契约再交给评审与预写,每次尝试的原始与规范化结果都会留档。
334
+ - Operator Chat 的恢复类工具与实际能力对齐:工具名、参数与说明都按真实命令给出,不再让模型猜参数或调用不存在的入口。自定义系统提示词上限由 1900 调整为 2500 字,用于写清节点续跑、整单重生与重排队的分流规则。
335
+ - Operator Chat 的模型工具面收敛:低频只读入口不再进入模型工具白名单,保留的官方 CLI 动作全部换成「做什么 + 何时用」的说明;修复了部分工具参数缺失导致模型调用必被拒、以及参数说明丢失的问题,模型更不容易选错恢复入口。
336
+
337
+ - Operator Chat 的会话创建不再限制工具范围,扩展注册的 MCP 工具现在可以被模型调用;补丁、全量工具、shell 与编码对话等入口仍按原样排除。
336
338
  - 对话侧栏 Plugins 右侧新增只读 MCP 弹窗:展示 `mcp.json` 配置的服务,以及当前会话真正注册/激活的 MCP 工具;没有配置也没有工具时保持真实空态。
337
- - 对话侧栏原 Packages 入口改名为 Plugins,与 pi-web / Pi 用户面一致;内部仍是 package inventory。
338
- - 对话进行中底部上下文占用百分比保持常驻:token 用量事件不再冲掉上一帧的 contextUsage,并在回合中持续刷新。
339
+ - 对话侧栏原 Packages 入口改名为 Plugins,与 Pi 用户面的叫法保持一致。
340
+ - 对话进行中底部上下文占用百分比保持常驻:用量事件不再冲掉上一次的占用显示,并在回合中持续刷新。
339
341
  - 上一轮大量 bash 结束后再发新消息,旧工具条不再整批挂到新气泡下面:无主工具不再丢进最新一组,历史按完整回合裁切,空助手气泡若还挂着工具会留下来当锚点。
340
342
  - 侧栏文件树点击目录行直接插入 `@目录/` 引用(箭头单独负责展开/收起);输入框 @ 补全也列出目录,排在文件前面。
341
- - 对话进行中点「停止」立即安静下来(乐观停止,对齐 pi-web):不再等 POST /abort 往返;后端 abort 等待从 8s 降到 2.5s,未终结时由状态对账收敛。
343
+ - 对话进行中点「停止」会立即安静下来,不再等待后端往返确认;后端中止等待从 8 秒缩短到 2.5 秒,未及时终结时由状态自动收敛。
342
344
  - 侧栏文件树实时刷新:agent 回合结束、浏览器标签页回到前台、手动点「刷新」时重拉根目录+全部已展开目录(此前手动刷新只拉根目录,子目录永远旧缓存)。
343
- - Skills / Packages / Models 面板不再把 Pi 的 warning / collision 原文堆在列表上方:改成标题条一颗摘要芯片(如「14 条提示」),点开按「需要处理 / 名称不规范 / 同名未生效」分组,文案用自然语言,路径只显示末两段;名称不规范的技能在列表旁标「提示」,详情里说明「现在这样也能用」。加载失败仍单独成组,可点「再读一次」。
344
- - Skills / Packages 双栏改为左右各自滚动;资源弹窗挂到 `document.body`,按顶部对话导航的实时高度在剩余视口居中,不再被 sticky 顶栏挡住上沿。
345
+ - Skills / Packages / Models 面板不再把提示原文堆在列表上方,改为标题条上一颗摘要芯片(如「14 条提示」),点开按「需要处理 / 名称不规范 / 同名未生效」分组,加载失败仍单独成组并可重试。
346
+ - Skills / Packages 双栏改为左右各自滚动;资源弹窗会跟随顶部导航高度在剩余视口内居中,不再被顶栏挡住上沿。
345
347
  - 标准、评审和监督型 DAG 现在会在当前运行中重试短暂的验证故障;写入节点只有在确认工作区完全未变更时才会重试,避免因网络波动重新执行整条任务。
346
348
  - 后端测试支持自定义目录、公共前置说明、查询场景分区和增量补缺模式;相关布局可通过 `task advance --backend-test` 纳入受管任务契约,不再需要手工修改 `task.json`。
347
349
 
348
- - 裸 `agent-worker console` 在 listen 前会按本机自然日询问一次 npm `latest` 升级;继承当前 npm registry,失败不阻断启动,Console URL 仍只写 stdout。
349
- - npm `next` 发布成功后会更新 `npm-next` 分支锚点;可用 `loop-agent inspect next` 查看已发布版本、源码提交、构建时间和本地尚未发布的提交。
350
+ - 直接运行 `agent-worker console` 时,会按本机自然日询问一次是否升级到最新版本;升级检查沿用当前 npm 源,失败不会阻断启动,Console 地址仍只在终端输出。
351
+ - npm `next` 发布成功后会自动更新发布锚点;可用 `loop-agent inspect next` 查看已发布版本、源码提交、构建时间,以及本地尚未发布的提交。
350
352
  - Operator Chat 的文件预览可在新窗口中打开,并可切换排版预览与原始内容;弹窗被浏览器拦截时会保留当前抽屉并给出提示。
351
353
  - Pi SDK 的会话事件可透出模型明确返回的结束原因,便于诊断截断、停止和异常结束。
352
354
 
@@ -358,9 +360,9 @@
358
360
  - Operator Chat 的命令说明和参数提示与实际能力保持一致,减少选错恢复入口或误用占位参数。
359
361
  - 测试套件按 CPU、内存、平台和当前 DAG 压力动态分配资源,并减少重复启动进程,完整验证耗时更稳定。
360
362
 
361
- - Operator Chat 发送前会在接近模型窗口时主动压缩,压缩失败仍发送当前输入,不会把消息丢掉。DAG 节点同步启用 overflow 识别与线路压缩,但不在 streaming 中主动 compact。
362
- - 网关「请求上下文过大」及常见包装/嵌套 JSON 由共享分类器识别;目标项目 `loop-agent init` 生成的 Pi overflow extension 与控制器使用同一套短语表。
363
- - `@agent-context/sift@0.0.1-alpha.6` 作为可选依赖接入 Console 与 DAG:默认开启,`HARNESS_CONSOLE_SIFT` / `HARNESS_DAG_SIFT` 设为 `0`、`false` 或 `off` 即可关闭。Anthropic 缺省 prompt cache 形态保持 no-op,避免破坏缓存。
363
+ - Operator Chat 在接近模型窗口时会先压缩再发送,压缩失败也不会丢消息;DAG 节点同样能识别上下文超限并压缩,但不会在流式输出中途主动压缩。
364
+ - 网关「请求上下文过大」以及常见的包装或嵌套写法都能被识别;`loop-agent init` 在目标项目生成的 Pi 扩展与控制器使用同一套判断规则。
365
+ - 上下文压缩默认在 Console 与 DAG 中开启,也可分别关闭;使用 Anthropic 默认提示缓存时不会触发压缩,避免破坏缓存命中。
364
366
  - 后端测试的计划与生成阶段只读取任务明确绑定的需求、环境报告和本轮产物,减少无关仓库内容干扰结果,并让后续步骤继续使用同一份已确认计划。
365
367
  - Operator Chat 的任务清单工具描述补齐多步骤与 DAG 使用纪律:开始前按具体步骤规划、保持进行中约束、完成后立即更新完整列表,并用面向用户的阶段呈现 DAG 进度,简单任务自动跳过。
366
368
  - 右侧文件工作台打开 `.html` 或 `.htm` 文件时默认直接预览:沙箱会完整加载页面及同项目的相对样式、图片和字体,同时阻止脚本及外部网络访问;大体积源码不再直接报错,而是展示前 512 KiB 并清晰提示内容已截断。
@@ -375,33 +377,33 @@
375
377
 
376
378
  ### 修复
377
379
 
378
- - backend-test 用例覆盖分析的 payload 形状提取在无 `python` 可执行文件的环境(现代 macOS 只有 `python3`)静默降级为空结果,导致 payload 观测路径全空、`PAYLOAD_SHAPE_MISMATCH` 误报;解释器解析改为 POSIX 优先 `python3`、Windows 优先 `python`(与 scenario-param 语法校验一致),仅在解释器缺失时尝试下一候选,分析输入自身的失败不再重试。
379
- - Inspector「执行过程」时间轴按「执行分次」选择过滤:session-events 是跨 attempt 共享追加的单文件,此前所有次执行的事件重合显示、切换顶部分次不生效;现在按 `agent_start` 边界分段,选中第 N 次执行只显示该段并标注「已按第 N 次执行过滤 · 共 M 次执行」,单次执行与 pass 选择保持全量展示,检测不到边界时显式提示并回退全量。
380
- - 前端 plan/revision 的 `openspec-citations` fence 提取改为行锚定正则:直接闭合的空 fence(无候选行、紧跟关闭 fence)此前被判定为「不存在 citation 块」而进入格式重试循环,现在计为合法的唯一 citation 块;重复、损坏或非唯一的 fence 仍被拒绝。
381
- - `npm test` 前置段失败导致后续段(io-heavy / integration)被跳过时,`scripts/run-tests.mjs` 显式输出警告与补跑命令,不再静默跳过(此前失败汇总会被误读为全量覆盖)。
380
+ - 修复在只有 `python3`、没有 `python` 命令的环境(如新版 macOS)里,backend-test 的用例覆盖分析会静默返回空结果、导致取值形状误报不匹配的问题;现在会按平台选择可用的解释器,缺失时才尝试下一个候选。
381
+ - 修复检查器「执行过程」时间轴切换执行分次不生效、多次执行的事件重合显示的问题:现在选中第 N 次执行只显示该次内容并标注「已按第 N 次执行过滤 · 共 M 次执行」,单次执行仍展示全量,检测不到分段边界时会明确提示。
382
+ - 修复前端计划修订中空引用块被误判为缺失、导致反复格式重试的问题:合法但内容为空的引用块现在会被正确接受,重复、损坏或不止一个的引用块仍会被拒绝。
383
+ - `npm test` 前置阶段失败导致后续阶段被跳过时,现在会显式输出警告与补跑命令,不再静默跳过(此前的失败汇总容易被误读为已全量覆盖)。
382
384
  - npm 包现在会包含 `inspect next` 运行时依赖的查询脚本,安装后的 CLI 不再因缺少包内文件而无法启动。
383
- - 初始化更新改为一次扫描与规划:固定投影按 recorded ownership 确定性增删改,多个语义合并按单文件写边界串行排队,全部完成后只做一次最终验证;已完成的 `--status` / `--report` 只读取哈希锚定证据,不再重复运行项目脚本。`harness.json` 按属性结构演进并保留项目值,仍存在于 Pi 的 LOW/MED/HIGH 保持不变,只重选失效档位;fresh init、update 与 doctor 会在 Pi 无可用模型时提前阻断。
384
- - CLI 新版本检查与 `init upgrade` 的版本门禁会从调用开始就使用 npm 当前配置:目标项目 `.npmrc`、用户级/全局 `npm config set registry`、环境变量与 scoped registry 均继续由 npm 按原生优先级解析;企业镜像失败时不会偷偷回退官方源,并以脱敏原因区分超时、npm 启动失败、查询失败和无效响应。
385
- - 同一浏览器、同一 hostname、不同端口的多个 Operator Console 不再争用认证 Cookie;不同项目和同一项目的多个 Console 可以并行对话,往返页面无需刷新。Console 重启后旧页面仍会被安全拒绝,刷新后恢复。
385
+ - 初始化更新改为一次扫描与规划:固定投影按已记录的归属确定性增删改,多项合并按文件串行写入,全部完成后只做一次最终验证;`--status` / `--report` 直接读取已有证据,不再重复运行项目脚本。配置项保留项目值,有效档位不变。
386
+ - CLI 的版本检查与 `init upgrade` 的版本门禁会沿用目标项目的 npm 配置(含项目级、用户级与全局源设置),企业镜像失败时不会偷偷回退官方源,并给出脱敏原因区分超时、启动失败与响应无效。
387
+ - 同一浏览器下不同端口的多个 Operator Console 不再互相顶掉登录状态:不同项目和同一项目的多个 Console 可以并行对话,来回切换页面无需刷新;Console 重启后旧页面会被安全拒绝,刷新即可恢复。
386
388
  - Markdown 表格只处理横向溢出,鼠标停在表格上时仍可正常上下滚动对话。
387
389
  - Windows 上执行后端测试场景参数的 Python 语法检查时,会跳过不可用的 Microsoft Store 占位程序,避免错误回滚合法改动。
388
390
  - 旧版前端 DAG 也能识别增量计划修订,不再因契约格式差异反复重试;无法合并的修订会提示重新生成 DAG。
389
391
 
390
- - 修复 backend-test 将 no-body Case 的 `Payload Required Paths: none` / `Payload Allowed Paths: none` 中空值标记误识别为 JSON 字段路径、继而把全部 pytest items 判为 payload `UNSAFE` 并排除的问题;独立 empty sentinel 现在归一化为空集合,真实 required path 冲突仍保持 fail-closed。
392
+ - 修复 backend-test 把无请求体用例里的「none」误识别为 JSON 字段路径,从而把全部 pytest 用例判为不安全并排除的问题;现在会把这类空值正确归一化为空集合,而真实的取值冲突仍会严格阻断。
391
393
  - 修复 Console「更新并初始化」被观测顶栏挡住、看起来像从 DAG 详情消失的问题:入口改到操作 → 设置,观测与对话页不再挂全局悬浮按钮。
392
394
  - 修复从恢复打开全屏观测时,长 DAG run id 把「返回 恢复」顶进居中模式开关底下、按钮显示不全的问题;上下文 chip 改到顶栏下方独立一行,过长 id 省略、按钮不收缩。
393
395
  - 修复 Console 内嵌观测后样式泄漏到对话/操作、观测顶栏丢失新鲜度与 Pi 状态、从恢复打开观测看不到「返回 恢复」、以及检查器盖住一级导航的问题;对话里的观测链接改为壳内地址。
394
- - 修复 Console 内嵌观测丢失「提示词重启」入口、Remixicon 图标和产品深链的问题:托管观测从 `/inspect/` 响应解析 scoped token,不把该凭据写入 Console HTML。
395
- - 修复 backend-test 的 Scenario Partition 虽声明 Domain/slot kinds、却未把展开后的精确 `TP-SP-*` 清单交给 Markdown writer,导致 Case 只生成普通别名 TP 并被 N6 全量判缺的问题;Plan 现在把每个 exact slot 逐字写入绑定 Coverage Matrix Rule,Markdown生成与同步节点返回前执行 exact-set 审计,普通别名和 `SINGLE`/`MULTIPLE` 不再替代 partition slots。
396
- - 修复 backend-test 的 Scenario Partition 计划表只提示 `each-value`/`omitted`、却由下游确定性门禁强制要求 `not-in-set` 的合同漂移;计划、Markdown Case 与 pytest 现在统一明确唯一补集槽位,避免 PI 因表格指令遗漏 `TP-<Partition ID>-NOT-IN-SET` 后触发 `MISSING_COMPLEMENT_SLOT`。
397
- - 修复文档审计扫描本地 `.scratch/` 临时证据与打包目录、导致仓库 preflight 和发布前验证被非治理文件阻断的问题。
398
- - 修复 backend-test 把 Markdown 明确声明的 enum-invalid、wrong-type、null、empty 和精确非法 custom literal 当作 payload enum 契约漂移、错误消耗唯一一次 pytest repair 的问题;豁免现在按 pytest parameter ID、目标字段和值逐 TP 绑定,positive/nominal drift 与 path 缺陷仍严格阻断。
399
- - 修复 backend-test 无法从同一生成模块的安全 payload helper 中绑定 field-target positional/keyword/default 参数,以及无法识别精确 `_without(payload, field)` 删除语义的问题;computed、动态、二层、跨模块和危险 helper 仍保持 `UNDETERMINED`。
400
- - 修复 backend-test 无法静态证明同一生成模块内安全 payload helper、导致 request-level nominal 场景长期停留在 `UNDETERMINED` 的问题;超长边界 observed 现在持久化为有界摘要并保留真实长度,空白修复建议也明确使用真实空格而非字面 escape 文本。
401
- - 修复 backend-test 把 Markdown 中 `\\u0020`/`\\x20` 空白表示与 pytest 真实空白字符串误判为 scenario-param 不一致的问题;readiness 的逐项排除现在携带有界的 TP、字段、expected/observed raw/normalized 和源码位置诊断,同时不对普通业务字符做 trim、大小写折叠或宽松解码。
402
- - 修复 Console 把 backend-test writer 的局部保护文件误判为整个 writeSet 越界的问题;任务级禁止路径仍保持硬阻断,合法 DAG 可继续取得 autonomous execution receipt。
403
- - 修复 backend-test 对 `resource_client.call(..., payload=...)` 一类本地 transport 的 payload AST 假阴性;readiness 新增固定分类/Case 排除汇总和 pytest 启动事实,payload repair finding 同时携带 expected/observed/missing path 清单。
404
- - 修复后端测试在 payload、fixture 与 Markdown→pytest 对应关系同时异常时只修复其中一类问题的问题;pytest 侧缺陷现在通过结构化 `repairFindings` 合并进入唯一一次有界 repair,Markdown Test Point 未分类或重复分类则在生成阶段定向重试并禁止下游猜修。
396
+ - 修复 Console 内嵌观测丢失「提示词重启」入口、图标和产品深链的问题;托管观测所需的访问凭据不再写入 Console 页面。
397
+ - 修复 backend-test 的场景分区虽已声明、展开后的精确槽位清单却没有交给 Markdown 生成环节,导致用例只生成普通别名并被全量判为缺失的问题;现在计划会把每个精确槽位逐字写入绑定的覆盖矩阵规则,生成前会做一次完整性核对。
398
+ - 修复 backend-test 的场景分区计划表只提示部分取值、下游门禁却要求补集槽位的不一致:计划、Markdown 用例与 pytest 现在统一明确唯一的补集槽位,不会再因为表格指令遗漏而报槽位缺失。
399
+ - 修复文档审计会把本地临时证据与打包目录一起扫描、导致发布前验证被非治理文件阻断的问题。
400
+ - 修复 backend-test 把 Markdown 里明确声明的非法枚举、类型错误、null、空值和精确非法字面量当成契约漂移、白白消耗唯一一次返工机会的问题;豁免现在按参数、目标字段和取值逐条绑定,真实契约漂移与路径缺陷仍严格阻断。
401
+ - 修复 backend-test 无法识别同一模块内安全取值辅助函数的位置、关键字与默认参数,以及精确删除某个字段的写法的问题,这类场景此前会一直判为无法确定;涉及计算、动态、跨模块或危险写法的场景仍保持无法确定。
402
+ - 修复 backend-test 无法确认同一模块内的安全取值辅助函数、导致常规请求场景长期判为无法确定的问题;超长边界取值现在会保存为有长度上限的摘要并保留真实长度,空白修复建议也改用真实空格而不是转义文本。
403
+ - 修复 backend-test 把 Markdown 里的空白转义写法与 pytest 中真实空白字符串误判为场景参数不一致的问题;现在逐项排除会带上用例、字段、期望/实际取值和源码位置等有界诊断,同时不会对普通业务字符做宽松处理。
404
+ - 修复 Console 把 backend-test 写入节点的局部保护文件误判为整体越界的问题;任务级禁止路径仍保持硬阻断,合法的 DAG 可以继续获得自主执行凭据。
405
+ - 修复 backend-test 会漏判一类本地请求调用的取值问题;现在会汇总分类与用例排除结果并记录 pytest 启动事实,取值修复提示会同时给出期望、实际与缺失的字段路径清单。
406
+ - 修复后端测试在取值、夹具与用例对应关系同时异常时只修复其中一类的问题;pytest 侧缺陷现在会合并进唯一一次有界返工,Markdown 测试点未分类或重复分类会在生成阶段定向重试,不允许下游猜测修复。
405
407
  - 修复重命名会话时输入框没有回显当前标题的问题。
406
408
  - 修复自动压缩提示长期停在输入框上方、恢复输出跑到压缩前面,以及回复文字在工具出现时突然跳位的问题;消息流会按顺序保留模型提供商的原始错误、压缩过程和恢复结果,刷新后也保持一致。
407
409
  - 工作区列表支持像 DSH Web 一样上下拖动调整顺序;新的顺序会自动保存,刷新页面或重新启动看板后仍然保持。
@@ -544,22 +546,22 @@
544
546
 
545
547
  ### 修复
546
548
 
547
- - 前端设计评审拓扑改串行:`frontend-design-review-pi` 依赖从 `frontend-plan-pi` 改为 `frontend-design-policy-shell`——确定性 policy 先物化 canonical 契约并判定(秒级,blocked 立即终止不浪费模型调用),模型 review 再基于物化契约评审(prompt 本就要求 canonical full-contract JSON 输入);避免 policy 失败时 review 白跑、以及 review 读到未物化的 plan 中间态。
548
- - `design-evidence-conflict` 不再由 policy 阻断:`designEvidence.conflicts` 是模型如实披露的设计偏差(如任务要求的测试形态与冻结约束冲突),是否可接受应交由 design-review 的 `approve_design`/`request_design_changes` 裁决(`checkDesignApproval` 单独强制);policy 一刀切阻断会让如实上报偏差的诚实 plan 永远无法通过、且模型无法"修复"它正确识别的冲突。
549
- - write guard 豁免 vite/vitest 运行时缓存:前端 writer 在执行验证(vitest)时写 `node_modules/.vite/vitest/results.json`(gitignored 工具缓存),不在 writeSet 内导致 write guard 误判越界(真实 DAG 冒烟暴露)。`isEphemeralToolCachePath` 增加 `node_modules/.vite/` 豁免;产品文件越界仍 fail-closed。
550
- - 前端 writer-admission 的 worktree baseline 改为收集完整 workspace 清单:`captureFrontendWorktreeBaseline` 原用 `git status --porcelain`(只有变更文件),干净 git 仓库下 baseline 为空 → 必然 `baseline-empty` 卡死 writer-admission(真实 DAG 冒烟暴露)。改为 `git ls-files -co --exclude-standard`(全部被跟踪 + 未跟踪文件,排除 gitignored),作为 writer 修改对照的确定性快照;下游 freezeBaseline/admission digest 语义不变。
551
- - 前端 writer-admission 的 writeSet 派生支持 glob 展开:契约 schema 允许 `targets.files` 含 glob(如 skeleton 从任务 allowedPaths 继承的 `src/**`),但 `deriveWriteSet` 只接受具体路径导致带 glob 的任务必在 writer-admission 卡死 `write-set-path-not-concrete`(真实 DAG 冒烟暴露)。新增 `expandFrontendGlobPaths`(git ls-files 枚举 workspace 文件 + glob 匹配展开),`deriveFrontendWriterAdmissionShell` 接收 `workspaceFiles` 后把 glob 展开为可写的具体文件;无文件清单(非 git 仓库)时 glob 仍 fail-closed。shell-executor 在调用处注入 `collectWorkspaceFiles`(git ls-files -co --exclude-standard)。
552
- - 前端 policy 依赖授权与状态归属检查对齐计划语义(真实 DAG 冒烟暴露):`allowedDependencies` 不再硬编码空数组,`init-hybrid` 从目标项目 package.json 收集 dependencies+devDependencies 冻结进 run.json,plan 前置检查与 policy shell 用同一非空允许集;`checkDependencies` 对「零新增/不引入」等明确否定声明豁免 prose 分词(不再把「仅使用已声明的 react、vitest@2 工具链」里的词误报为未授权依赖),未声明的新依赖仍 fail-closed 拒绝,空允许集(manifest 不可读)跳过检查而非误报;`checkUiStateAttribution` 改为校验契约**已声明**状态的归属完整(applicable→expectedBehavior、non-applicable→notApplicableReason),不再强制 loading/empty/error/disabled 固定四名必须全部出现(模型无法在不 invent 状态的前提下补出不存在的状态,重试无法修复);plan prompt 补充 dependencyPolicy 声明格式指令。
553
- - 前端 policy 前移的 canonical 状态归属检查修正:`checkUiStateAttribution` 不再无条件强制 loading/empty/error/disabled 四态全部存在——schema 与 prompt 明确允许纯逻辑修改 `uiStates: []`(不得 invent UI 状态),纯逻辑契约(无 uiStates 且无 interactions)豁免该检查,否则合法 plan 会在 policy 整链终止、且 plan 节点重试也无法修复(模型被禁止虚构状态);一旦契约声明任何 UI 可见工作(状态或交互),四态归属要求完整生效。
554
- - 前端契约 required-with-fallback 字段(`designEvidence`)补齐收敛到唯一共享层 `completeCanonicalRequiredFields`:strict-shape 与 free-form 分支不再各自补齐(分支规则漂移曾同时造成 `designEvidence.source Required` 与 verification target 虚构 `["success","error"]` UI state 两类失败);verification target 未声明 UI 绑定时保持 `uiStates: []`,不再默认「成功/失败」态;`commandLabel` 缺失时不再 fallback 到 `npm run typecheck` / `npm run test:unit:fe`,留空交由冻结命令集 fail-closed 拒绝;plan prompt 增加 attribution 硬前置检查(interaction/uiState 必须被 `uiComponentChoices` 覆盖,缺失以 retryable 诊断失败)。同步 `docs/runtime/frontend-implementation-workflow.md` 的 `submit_plan_ledger` 旧协议残留为增量 `record_*` + 唯一 `finalize_plan`。
555
- - 前端 plan facts 质量问题消化在节点内有界重试:coerce strict 分支补全部分 designEvidence(record_design_deviation 只产 conflicts 时不再死于 Required);policy 中可归因到 plan facts 的三类检查(依赖授权 / 交互与 UI 状态归属)前移进 plan 节点验证,带诊断重试修复,design-policy shell 保留最终权威
556
- - `frontend-plan-pi` 的 typed facts schema 违规(如 verification target 引用未声明 UI state)接入 §5.1 Plan retry 阶梯:`FRONTEND_PLAN_LADDER_RETRY_POLICY.retryCategories` 增加 `invalid-output`,首次失败不再直接 terminal,而是在 normal 档带 `<retry_instruction>`(具体 schema 违规 reason + 修复指引)有界重试;fingerprint 与 5 次上限防线不变。
557
- - 前端 DAG shell 门禁改消费 committed typed facts 确定性组装 canonical contract 并 fail-closed:`frontend-design-policy-shell` 与 `frontend-prewrite-gate` 的 admission 分析路径不再从 Plan/Contract 节点文本提取 fenced JSON(`extractFrontendImplementationJson` / `analyzeFrontendImplementationContract({fromNodeId})` 文本路径退役),改由新增纯函数 `buildContractFromCommittedFacts` 用 committed `plan-typed-facts.jsonl` ⊕ 运行期 skeleton 组装,经既有 `analyzeFrontendImplementationContract({rawContractText})` 严格 schema 校验;committed facts 缺失、schema 漂移或 finalize 缺失时返回明确 blocked/invalid-output,不回退文本解析;`init-hybrid` 在 `frontend-plan-pi` 冻结 `structuredContractOutput.skeleton`,并在 `frontend-design-review-pi` prompt 增加硬约束:不得对冻结验证命令(typecheck/test/build/lint 等)执行结果做权威断言(命令结果由 `frontend-verify-shell` 确定性认定),验证可行性疑虑仅作非阻断 verification concern,纯「命令会失败」预测不得归类为 `contract-requirement-gap`。
549
+ - 前端设计评审改为串行:先做秒级的确定性校验,不通过立即停止,不再白跑模型评审;通过后再由模型评审,且评审读到的一定是定稿后的完整契约,不会看到计划中间态。
550
+ - 模型如实上报的设计偏差不再被前置校验一刀切阻断,改由设计评审裁决是否可接受;如实披露冲突的计划能正常通过,不会永久卡住。
551
+ - 前端任务执行验证时写下的工具缓存不再被误判为越界修改;真正的产品文件越界修改仍会被拦截。
552
+ - 在干净的 Git 仓库中,前端任务不再因对照基线为空而卡死;越界判定改为以完整工作区文件清单为基准,判断结果更稳定。
553
+ - 前端任务的可写范围支持用通配符声明,系统会展开为具体文件,不再因路径不是具体文件而卡死;无法获取文件清单时仍会拒绝执行。
554
+ - 前端计划使用目标项目已有的依赖、或明确声明不新增依赖时,不再被误报为未授权,真正未声明的新依赖仍会被拒绝;UI 状态检查只要求已声明的状态说明完整,不再强制补齐不存在的状态。
555
+ - 纯逻辑的前端修改不再被要求补齐 loading/empty/error/disabled 四种 UI 状态,不会因此被判为不通过;一旦计划涉及界面状态或交互,仍要完整说明每个状态的归属。
556
+ - 前端计划的必填字段补齐规则统一到一处,不再因分支规则不一致而失败;未声明界面绑定的验证目标不再被默认填上“成功/失败”状态,缺失命令时也不再套用默认命令。交互与界面状态都要有组件选型依据,缺失时带明确诊断重试。
557
+ - 前端计划里的数据质量问题现在会在计划阶段就地重试修复:依赖授权、交互与界面状态归属等检查提前到计划节点执行,带明确诊断重试,而不是直接终止;最终校验仍然保留。
558
+ - 前端计划输出格式不合规(例如引用了未声明的界面状态)时不再直接失败,而是带具体原因和修复指引自动重试,重试次数仍有上限。
559
+ - 前端实现的门禁判定改为读取已提交的结构化结论,不再从计划文本里猜;结论缺失或格式不合规时给出明确阻断原因,不退回文本解析。设计评审不再预判验证命令的成败,命令结果以实际执行认定,这类疑虑只作非阻断提示。
558
560
  - Console 对话中的 Markdown 表格只约束横向滚动,不再截断纵向滚动链;鼠标或触控板停在表格上时仍可继续上下滚动对话。
559
- - scenario-param 确定性 rewrite 的 Python 语法校验:Windows 优先 `python`,并把 Microsoft Store `python3` 空壳(非 0 且无语法诊断)视为解释器不可用后回退,避免误回滚合法 rewrite。
560
- - `frontend-plan-revision-pi` 节点级校验与 merge-patch 输出协议矛盾修复:新增 schemaId `frontend-implementation-contract-revision-patch-v1` 与格式级宽松校验 `validateFrontendRevisionPatchNodeOutput`(至少一个 `openspec-citations` 块 + 剥离引用块后恰好一个 JSON 对象,不做完整契约 schema 校验),revision 节点 `structuredContractOutput.schemaId` 切换(plan-pi 仍为 v1);node-execution 的 invalid-output retry 指令按 schemaId 分支,patch 协议提示 merge-patch delta + 引用块,消除「prompt 要求 patch、retry 要求完整契约」的 retryable 死循环;gate 仍是唯一权威合并/校验点(零改动)。ADR 0015 补「节点级校验」决策 7
561
- - `frontend-implementation-contract.schema.json` 的 `uiComponentChoices` items 补 `if/then` 决策语义(`specified` ⇒ OpenSpec `specReference` 必填非 null;任务源要求新增的 `new` ⇒ PRD `specReference` 必填非 null);`frontend-plan-render.ts` 空 `section` 不再渲染尾随 `#`;ADR 0016 增补「门禁边界」小节
562
- - 前端 gate 内容驱动 revisionPatch 兼容 + verdict 归一化统一:旧 DAG(缺 `revisionPatch` 字段)但 revision 节点按协议输出 merge-patch 时,gate 按内容判定自动合并原始契约并走既有校验(不再因 `missing targets.files` 进入 retryable 死循环);patch 形态但无法合并(fallback 缺失/自身、原始节点不可读或非完整契约、apply 失败)→ `blocked` + 新增 `revision-patch-unmergeable`(错误信息含重新生成 DAG 指引);`normalizeVerdictCandidateLine` 增强 backtick 强调剥离,gate 的 `firstNonEmptyVerdictLine` 复用共享 normalize,runIf / output-protocol / gate 三处一致
561
+ - 场景参数的确定性改写会做 Python 语法校验:Windows 上优先使用 python,如果只找到 Microsoft Store 的 python3 空壳则视为解释器不可用并自动回退,避免把合法改写误判为失败而回滚。
562
+ - 前端计划修订节点允许只提交增量补丁和规范引用块,格式校验按补丁形态宽松判定,不再出现“要求提交完整契约”与“只提交变更”互相矛盾导致的循环失败;最终合并与校验仍由门禁统一负责。
563
+ - 组件选型现在会强制说明依据:沿用已有组件必须给出 OpenSpec 规范引用,新增组件必须给出 PRD 引用;计划文档中小节为空时不再残留多余标题符号。
564
+ - 已有的前端任务中,只要修订节点提交的是增量补丁,门禁会按内容自动合并并照常校验,不再因字段缺失卡在循环重试;补丁确实无法合并时会明确阻断,并提示重新生成执行流程。
563
565
 
564
566
  - 前端计划修订能正确识别增量补丁,不再因“提交完整契约”和“只提交变更”两套要求冲突而循环失败。
565
567
  - OpenSpec 引用必须来自真实读取记录;缺失、移动或未引用的规范会在写入前给出明确提示。
@@ -701,3 +703,4 @@
701
703
 
702
704
  0.35.x 及更早(0.8.0 – 0.35.4-beta.0)的发布说明已归档到 [`CHANGELOG/CHANGELOG-0.35-and-earlier.md`](CHANGELOG/CHANGELOG-0.35-and-earlier.md);版本线维护边界与归档规则见 [`CHANGELOG/README.md`](CHANGELOG/README.md)。
703
705
 
706
+