@tea-agent/loop-agent 0.43.0 → 0.44.0-next.10

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 (226) hide show
  1. package/CHANGELOG.md +408 -367
  2. package/dist/application/evaluation/budget.js +21 -0
  3. package/dist/application/evaluation/corpus-hash.js +10 -15
  4. package/dist/application/evaluation/corpus.js +2 -1
  5. package/dist/application/evaluation/frontend-browser-acceptance.js +77 -0
  6. package/dist/application/evaluation/frontend-corpus-browser-acceptance.js +175 -0
  7. package/dist/application/evaluation/frontend-gateway-evidence.js +226 -0
  8. package/dist/application/evaluation/frontend-pair-registration.js +143 -0
  9. package/dist/application/evaluation/frontend-paired-summary.js +150 -0
  10. package/dist/application/evaluation/frontend-run-observation.js +144 -0
  11. package/dist/application/evaluation/frontend-shared-evidence.js +105 -0
  12. package/dist/application/evaluation/types.js +45 -12
  13. package/dist/application/task-lifecycle/observe.js +26 -1
  14. package/dist/build-stamp.json +3 -3
  15. package/dist/cli/command-definitions.js +11 -0
  16. package/dist/cli/program.js +4 -0
  17. package/dist/commands/task-advance.js +3 -5
  18. package/dist/commands/task-source-prepare.js +13 -1
  19. package/dist/executors/dag-pi/guards.js +4 -0
  20. package/dist/executors/dag-pi/model-config.js +30 -0
  21. package/dist/executors/dag-pi/plan/fact-adoption.js +55 -0
  22. package/dist/{workflows/dag/frontend-plan-completeness.js → executors/dag-pi/plan/facts.js} +22 -28
  23. package/dist/executors/dag-pi/plan/finalize-tools.js +259 -0
  24. package/dist/executors/dag-pi/plan/ledger-contract.js +55 -0
  25. package/dist/executors/dag-pi/plan/record-tools.js +861 -0
  26. package/dist/executors/dag-pi/plan/schema.js +129 -0
  27. package/dist/executors/dag-pi/plan/session.js +1 -0
  28. package/dist/executors/dag-pi/plan/tool-helpers.js +16 -0
  29. package/dist/executors/dag-pi/tools/contract-tools.js +515 -0
  30. package/dist/executors/dag-pi/tools/design-terminal-tools.js +159 -0
  31. package/dist/executors/dag-pi/tools/plan-decision-tools.js +529 -0
  32. package/dist/executors/dag-pi/tools/review-terminal-tools.js +159 -0
  33. package/dist/executors/dag-pi/tools/scout-evidence-tools.js +270 -0
  34. package/dist/executors/dag-pi-executor.js +398 -3384
  35. package/dist/executors/pi-executor.js +6 -1
  36. package/dist/executors/pi-sdk-executor.js +112 -19
  37. package/dist/executors/shell-executor.js +88 -12
  38. package/dist/executors/shell-presets.js +1 -1
  39. package/dist/executors/shell-write-guard.js +26 -3
  40. package/dist/infrastructure/console/operation-store.js +48 -14
  41. package/dist/infrastructure/evaluation/corpus-store.js +37 -12
  42. package/dist/shared/file-identity.js +23 -0
  43. package/dist/shared/git-workspace-status.js +482 -0
  44. package/dist/shared/operator/capabilities.js +10 -5
  45. package/dist/shared/path-safety.js +2 -2
  46. package/dist/shared/wizard-local-telemetry.js +51 -0
  47. package/dist/task/config-types.js +22 -8
  48. package/dist/task/contract/project.js +13 -0
  49. package/dist/task/contract/schema.js +2 -7
  50. package/dist/task/frontend-preflight.js +1 -1
  51. package/dist/task/source-prepare/parse-intent.js +124 -5
  52. package/dist/task/source-prepare/prepare.js +6 -1
  53. package/dist/task/source-prepare/semantic-intake.js +18 -3
  54. package/dist/task/source-prepare/source-execution.js +65 -0
  55. package/dist/task/source-prepare/source-fidelity-pi.js +22 -9
  56. package/dist/task/source-prepare/source-provider-budget.js +290 -0
  57. package/dist/worker/console/chat/assistant-content.js +5 -34
  58. package/dist/worker/console/chat/chat-event-store.js +62 -10
  59. package/dist/worker/console/chat/context-insights.js +723 -0
  60. package/dist/worker/console/chat/conversation-nodes.js +383 -0
  61. package/dist/worker/console/chat/db-connections.js +854 -0
  62. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +1 -1
  63. package/dist/worker/console/chat/pi-runtime/custom-tools/sql-tools.js +655 -0
  64. package/dist/worker/console/chat/pi-runtime.js +445 -36
  65. package/dist/worker/console/chat/provider-error.js +0 -12
  66. package/dist/worker/console/chat/repo-browser.js +52 -4
  67. package/dist/worker/console/chat/routes.js +577 -72
  68. package/dist/worker/console/chat/sdd-data-alignment.js +8 -31
  69. package/dist/worker/console/chat/session-store.js +147 -19
  70. package/dist/worker/console/chat/shortcuts.js +7 -0
  71. package/dist/worker/console/chat/timeline-message-order.js +22 -0
  72. package/dist/worker/console/chat/tools.js +34 -0
  73. package/dist/worker/console/chat/turn-process.js +237 -66
  74. package/dist/worker/console/chat/user-turn-outline.js +19 -0
  75. package/dist/worker/console/console-update-runtime.js +2 -2
  76. package/dist/worker/console/dag-confirmation.js +3 -0
  77. package/dist/worker/console/dag-execution-receipt.js +3 -0
  78. package/dist/worker/console/operator-actions.js +32 -3
  79. package/dist/worker/console/operator-user-error.js +28 -1
  80. package/dist/worker/console/pi-readiness.js +4 -4
  81. package/dist/worker/console/prd-intake-bridge.js +5 -12
  82. package/dist/worker/console/recovery-cta.js +14 -14
  83. package/dist/worker/console/server.js +5 -1
  84. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-8-j6y-sd.js → abnfDiagram-N423BO3Z-r1NAPU_5.js} +1 -1
  85. package/dist/worker/console/static/assets/{arc-eoQiMvuk.js → arc-dT5T4sVL.js} +1 -1
  86. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-C4A3uMcI.js → architectureDiagram-T3A2C74G-CP_cOq46.js} +1 -1
  87. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-D4zD2F-Q.js → blockDiagram-VBNYF7ZC-sToEZxEf.js} +1 -1
  88. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-j1RkJziL.js → c4Diagram-5PPSVZJV-DSxwwi2m.js} +1 -1
  89. package/dist/worker/console/static/assets/channel-CyBY_yGk.js +1 -0
  90. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-YBHmhik1.js → chunk-2GRJ4B5K-B9fh0IkF.js} +1 -1
  91. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-COfWyo9P.js → chunk-2Q5K7J3B-CAUNl-A6.js} +1 -1
  92. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-I99OUkHY.js → chunk-5RXB4S5H-BomeqbNX.js} +1 -1
  93. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-XKxoJNJ4.js → chunk-5VM5RSS4-BNAuTOLE.js} +1 -1
  94. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DLT_cYx1.js → chunk-6Q2QTUOP-DfzjRD5y.js} +1 -1
  95. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CxcKZ9mV.js → chunk-GF5L2VYU-C3uE-yc2.js} +1 -1
  96. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-V1EqXdjY.js → chunk-JWPE2WC7-C3sQMMYr.js} +1 -1
  97. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DebTtdFp.js → chunk-KBJHAD2P-D_AtEYQL.js} +1 -1
  98. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-B-ivNRDf.js → chunk-RYQCIY6F-DW4TwhKv.js} +1 -1
  99. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DC_Ds11b.js → chunk-XXDRQBXY-CTQDmJcp.js} +1 -1
  100. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-D5lN4E_E.js +1 -0
  101. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-D5lN4E_E.js +1 -0
  102. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-sWEqKwIb.js → cose-bilkent-JH36ORCC-iMqPuBsL.js} +1 -1
  103. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BXa_dcu4.js → cynefin-VYW2F7L2-DktIuDWs.js} +1 -1
  104. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-C-Mle84F.js → cynefinDiagram-MW4NZA55-BgVnjyEs.js} +1 -1
  105. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CXPDBITe.js → dagre-VZM6K2ZE-CR25E4bu.js} +1 -1
  106. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CC-WJQfa.js → diagram-7IWD3JNH-CPM2h5HY.js} +1 -1
  107. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CDAV5Vs4.js → diagram-B4RE2ZJO-DqF0x2g1.js} +1 -1
  108. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-CmFiAcNz.js → diagram-LBJQPF4R-G8BYp2eb.js} +1 -1
  109. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DPBZHuyn.js → diagram-Q27KOJAE-BbC4kT_D.js} +1 -1
  110. package/dist/worker/console/static/assets/{diagram-UB23O5K3-jUlm_Ds3.js → diagram-UB23O5K3-CKZwZ-G5.js} +1 -1
  111. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DWhQ3mfY.js → ebnfDiagram-BXEA7PRR-kJDmheia.js} +1 -1
  112. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-Tr2gMqet.js → erDiagram-JOGREHBK-DFTVHyxB.js} +1 -1
  113. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DJjVQHPA.js → flowDiagram-UKHOOZJN-BqdN5_os.js} +1 -1
  114. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-D74dQ4u0.js → ganttDiagram-PKOTCBZU-SYDjVakh.js} +1 -1
  115. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js → gitGraphDiagram-DS77QQ5N-Bf8bNpGA.js} +1 -1
  116. package/dist/worker/console/static/assets/index-B28Onmfy.css +1 -0
  117. package/dist/worker/console/static/assets/index-CTMZsDmh.js +486 -0
  118. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-ILCbxJyb.js → infoDiagram-6WML65LV-DIeAmJ45.js} +1 -1
  119. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DeuWBQ89.js → ishikawaDiagram-WSZJBQD7-oikqUAlo.js} +1 -1
  120. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CF5ih8Fk.js → journeyDiagram-NVQOT4AX-mKEF_xYT.js} +1 -1
  121. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-C7yOSuRO.js → kanban-definition-27J2QSJJ-BdWJHPnN.js} +1 -1
  122. package/dist/worker/console/static/assets/{linear-BDZ9riWi.js → linear-DGRlieMH.js} +1 -1
  123. package/dist/worker/console/static/assets/{mermaid.core-7pKqYtpZ.js → mermaid.core-4P9yPC9c.js} +5 -5
  124. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-LeJDybSU.js → mindmap-definition-FAOFIHXS-5PTSkos6.js} +1 -1
  125. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BJvT3pMD.js → pegDiagram-VL7TDLO6-DONIFpG5.js} +1 -1
  126. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-_rGqpMan.js → pieDiagram-7S7Q4E2Y-D_Z4S70M.js} +1 -1
  127. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DPcSv5aA.js → quadrantDiagram-CIZ2JOQS-CAsjh8iY.js} +1 -1
  128. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Drxx4hkJ.js → railroadDiagram-AXF67PYL-Cx4Dd6ac.js} +1 -1
  129. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BCTUdU4z.js → requirementDiagram-LRYGKXZP-cQb7mwyH.js} +1 -1
  130. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B6wzbZmB.js → sankeyDiagram-W5VNT64P-Cd-DhUdf.js} +1 -1
  131. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BGt8d3QQ.js → sequenceDiagram-SI44F4Z6-AlKYRgIk.js} +1 -1
  132. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-7nlhJKo7.js → sizeCapture-X5ZJPWSS-CUy_ET4e.js} +1 -1
  133. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Cv2stqMA.js → stateDiagram-OKZ733FA-CTuVe6Sa.js} +1 -1
  134. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BsWhs8O7.js +1 -0
  135. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-qDAo4Yc1.js → swimlanes-SLNWSIFB-ChFLJb-v.js} +2 -2
  136. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CJcioYGH.js +8 -0
  137. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CKbDNKTr.js → timeline-definition-Z64GVDOM-DZZeiAPr.js} +1 -1
  138. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-DI-9EHic.js → vennDiagram-T6HMQDX7-t4O91cZU.js} +1 -1
  139. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BrzzRDpX.js → wardleyDiagram-T6FBY63Y-CV5qGHZu.js} +1 -1
  140. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-BclH5hGh.js → xychartDiagram-ELKLHX3M-DyXbytUI.js} +1 -1
  141. package/dist/worker/console/static/index.html +2 -2
  142. package/dist/worker/console/static-src/app/console-types.js +9 -1
  143. package/dist/worker/console/static-src/operator-chat/animation-frame-batcher.js +38 -0
  144. package/dist/worker/console/static-src/operator-chat/chat-link.js +20 -0
  145. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +186 -5
  146. package/dist/worker/console/static-src/operator-chat/chat-stream-continuity.js +101 -0
  147. package/dist/worker/console/static-src/operator-chat/compaction-message.js +18 -3
  148. package/dist/worker/console/static-src/operator-chat/context-insights-store.js +64 -0
  149. package/dist/worker/console/static-src/operator-chat/details-rail-surfaces.js +98 -0
  150. package/dist/worker/console/static-src/operator-chat/file-palette-nav.js +81 -0
  151. package/dist/worker/console/static-src/operator-chat/pending-user-message.js +17 -3
  152. package/dist/worker/console/static-src/operator-chat/process-label.js +27 -5
  153. package/dist/worker/console/static-src/operator-chat/tools-catalog.js +16 -7
  154. package/dist/worker/console/static-src/operator-chat/transcript-mode.js +21 -0
  155. package/dist/worker/console/static-src/operator-chat/turn-group-equality.js +4 -1
  156. package/dist/worker/console/static-src/operator-chat/turn-process-disclosure.js +13 -5
  157. package/dist/worker/console/static-src/operator-chat/turn-state-projection.js +166 -0
  158. package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +56 -2
  159. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +211 -40
  160. package/dist/worker/console/static-src/operator-chat/useChatStream.js +124 -27
  161. package/dist/worker/console/static-src/operator-chat/useChatThread.js +88 -20
  162. package/dist/worker/console/static-src/operator-chat/useComposer.js +80 -6
  163. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +13 -3
  164. package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +36 -17
  165. package/dist/worker/console/static-src/operator-chat/useRuntimeSnapshot.js +18 -0
  166. package/dist/worker/console/static-src/operator-chat/useWorkspaceBrowserGate.js +4 -0
  167. package/dist/worker/console/static-src/shell/console-update-reload.js +1 -1
  168. package/dist/worker/console/workspace-context.js +2 -0
  169. package/dist/worker/console/workspace-initialization.js +3 -3
  170. package/dist/worker/observability/read-model.js +23 -2
  171. package/dist/worker/observe/node-context-insights.js +479 -0
  172. package/dist/worker/observe/static/console-theme.css +174 -0
  173. package/dist/worker/observe/static/console-theme.js +36 -0
  174. package/dist/worker/observe/static/operator-chrome.css +85 -0
  175. package/dist/worker/observe/static/operator-chrome.js +51 -0
  176. package/dist/worker/scheduler/scheduled-goal-dispatch.js +3 -2
  177. package/dist/worker/scheduler/scheduled-goal-evidence.js +66 -3
  178. package/dist/worker/scheduler/scheduled-goal-store.js +10 -0
  179. package/dist/workflows/dag/budget-enforcement.js +31 -2
  180. package/dist/workflows/dag/frontend-closeout.js +3 -1
  181. package/dist/workflows/dag/frontend-contract-facts.js +11 -8
  182. package/dist/workflows/dag/frontend-design-policy.js +6 -6
  183. package/dist/workflows/dag/frontend-durable-tools.js +90 -70
  184. package/dist/workflows/dag/frontend-implementation-contract.js +146 -57
  185. package/dist/workflows/dag/frontend-plan-canary.js +66 -16
  186. package/dist/workflows/dag/frontend-plan-decision-contract.js +13 -21
  187. package/dist/workflows/dag/frontend-plan-progress.js +92 -0
  188. package/dist/workflows/dag/frontend-recovery-plan.js +10 -5
  189. package/dist/workflows/dag/frontend-recovery-run.js +51 -46
  190. package/dist/workflows/dag/frontend-repair-assertions.js +36 -0
  191. package/dist/workflows/dag/frontend-review-context.js +29 -1
  192. package/dist/workflows/dag/frontend-review-scopes.js +92 -2
  193. package/dist/workflows/dag/frontend-risk.js +8 -3
  194. package/dist/workflows/dag/frontend-root-observation.js +261 -0
  195. package/dist/workflows/dag/frontend-session-budget.js +52 -39
  196. package/dist/workflows/dag/frontend-session-context.js +10 -0
  197. package/dist/workflows/dag/frontend-test-execution-evidence.js +206 -48
  198. package/dist/workflows/dag/frontend-typed-event-store.js +11 -1
  199. package/dist/workflows/dag/frontend-verification-trace.js +6 -0
  200. package/dist/workflows/dag/frontend-writer-admission.js +3 -1
  201. package/dist/workflows/dag/init-hybrid.js +108 -37
  202. package/dist/workflows/dag/node-execution.js +11 -11
  203. package/dist/workflows/dag/output-protocol.js +1 -0
  204. package/dist/workflows/dag/rerun-feedback.js +35 -4
  205. package/dist/workflows/dag/rerun-task.js +62 -66
  206. package/dist/workflows/dag/runner.js +58 -12
  207. package/dist/workflows/dag/types.js +15 -8
  208. package/dist/workflows/loop/benchmark.js +11 -8
  209. package/docs/README.md +1 -1
  210. package/docs/architecture/runtime-boundaries.md +1 -1
  211. package/docs/governance/harness-methodology-verification.md +11 -0
  212. package/docs/templates/backend-test-dag.json +5 -4
  213. package/docs/templates/frontend-implementation-contract.schema.json +31 -11
  214. package/package.json +6 -4
  215. package/skills/frontend-design-review/SKILL.md +8 -11
  216. package/skills/frontend-design-review/references/review-checklist.md +3 -4
  217. package/skills/frontend-review/SKILL.md +5 -1
  218. package/skills/loop-agent/references/command-reference.md +8 -0
  219. package/skills/loop-agent/references/hybrid-dag.md +1 -1
  220. package/dist/worker/console/static/assets/channel-ChE7y-cx.js +0 -1
  221. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +0 -1
  222. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +0 -1
  223. package/dist/worker/console/static/assets/index-BWkIfcrK.css +0 -1
  224. package/dist/worker/console/static/assets/index-Cdkvw_H6.js +0 -469
  225. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +0 -1
  226. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bwy4QUTO.js +0 -8
package/CHANGELOG.md CHANGED
@@ -2,543 +2,585 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
- ## [0.43.0] - 2026-09-14
6
-
7
5
  ### 新增
8
6
 
9
- - 新增了本发布周期内已经完成并通过验证的功能。
7
+ - main 上的 npm `next` 预发布改为跑默认测试(fast + integration),不再在每次发布时重复跑约 6 分钟的 I/O-heavy 池;完整三池仍由 PR、正式 release 线、本地推送前检查与发布前钩子承担。同时把该预发布任务的 I/O 并发从 1 调到 2,并把 npm 包可见性确认的等待窗口从约 3 分钟拉长到约 10 分钟,避免包已发出却因仓库异步处理未完成而被判失败。
10
8
 
11
- ### 改进
9
+ - 修复 main 分支的 next 发布链在类型检查阶段内存溢出失败的问题:完整源码与测试的类型图已超过 Node 默认约 2 GiB 堆上限,类型检查进程因此中止(exit 134),导致 `next` 发布无法完成。此前该上限只在部分验证入口生效,其余入口直接运行类型检查就会因默认堆不足而失败;现把上限固化到类型检查命令本身,各验证入口与本地开发统一生效,不再依赖各入口自行声明。
10
+ - 数据库连接支持断线自动重连:MySQL/PostgreSQL 空闲会话被服务端超时杀掉后,下一次查询会用同一配置透明重开连接并重试一次,不再需要手动重连或重启 Console;MySQL 适配器同时吸收服务端主动断开产生的异步错误,避免未处理错误事件影响进程。
12
11
 
13
- - 完善了日常使用体验和运行稳定性。
12
+ - 修复 Operator Chat 冷启动卡在检查面板的问题:模型列表和 runtime-snapshot 改为读工作区目录,不再为了展示技能或系统提示去打开 Pi 历史 JSONL;发消息、切换模型、reload 仍会激活会话。会话栏也不再等 Pi 重开,工作区列表未返回前不再把侧栏滤空。
13
+ - 修复 Operator Chat 发送消息或重连刷新后会话历史偶发全部消失的问题:列表刷新现在保留上次成功结果,非 JSON、缺字段、错误版本和部分工作区失败不再被误判为空列表;并发刷新与新建/删除会话按最新权威结果收敛,只有经过校验的真实空列表才显示“暂无会话”。
14
14
 
15
- ### 修复
15
+ - 修复 Operator Chat 在工作区尚未选中时抢先请求仓库树和能力目录、浏览器 Network 出现 400 的问题;等 `workspaceId` 就绪后再请求,不再把启动竞态显示成功能异常。
16
16
 
17
- - 修复了影响使用体验或运行稳定性的问题。
17
+ - 修复 Console 成功更新后历史接棒记录仍占用操作位、导致工作区初始化持续被拒绝的问题;通用「需要核对」提示现在引导先核实实际执行结果,不再误导为重新更新程序。
18
18
 
19
- ## [0.42.1] - 2026-09-09
19
+ - Console 更新前保留当前实例身份,修复重启断线后首次响应已来自新进程时仍等待超时、无法自动刷新的问题;关闭重开设置保留该身份,所有刷新等待分支均反馈超时。
20
+ - 修复观测页「执行历史」把仍在重试的节点误报为「最终失败」的问题:只要节点最后一个已记录的尝试失败,就会显示「N 次 · 最终失败」,即使该节点仍在运行、重试已经排队,会让人误判运行已结束。现在节点处于运行/已启动/暂停状态时改为「N 次 · 最近一次失败,仍在重试」,真正到达终态才显示「最终失败」;修复轮次的多轮标签同样处理。
20
21
 
21
- ### 新增
22
+ - 修复 Console「更新程序」被一条卡住的旧操作永久堵死的问题:停在「等待核对」的操作记录已被启动对账跳过、自身无法再推进,却又被当成「仍在运行」,导致之后每次更新都提示「另一个 Console 操作正在进行」。现将其明确归为已结束、不再占用操作位,并在恢复页保留可见;同时补全「已安装成功但接棒失败」记录的自动收敛,不再永久停留。
22
23
 
23
- - Console Chat 的 `/goal` 持续目标能力对 Pi 模式开放(与工作流模式同语义):斜杠面板两模式均可见 `/goal`;Pi 会话注册 `get_goal` / `create_goal` / `update_goal` 工具并纳入激活集;Goal HTTP 接口(创建/暂停/恢复/清除)在 Pi 会话不再返回模式拒绝;GoalBar 与目标编辑面板在 Pi 会话渲染;压缩恢复、每轮 Goal 上下文与有界自主续跑(仅显式 `/goal` 才 arm,maxRounds 上限,reload/重启/出错/暂停即 disarm)在 Pi 会话可用。
24
+ - Console 操作文案改为面向操作者的说明并给出下一步:等待超时不再伪装成「需要核对」,改为提示操作可能仍在后台运行;「源内容已变更」「前端拆分状态被并发修改」等原本直接展示英文原文的错误,改为说明原因与具体处理步骤;恢复页按钮与提示去掉 reconcile / supersede / orphan / Human Gate 等术语。
24
25
 
25
- - 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 秒硬超时。
26
- - Operator Chat 源代码管理(DSH 风格):模型获得 `scm` 工具(status/diff/stage/unstage/discard/commit/log/branch/push/pull,固定参数 git 无 shell、限时限量输出);Console 右侧辅助栏新增「源码」面板(DSH GitView 布局——分支下拉切换、已暂存/更改分组与全部暂存/取消暂存、单行提交框 Ctrl+Enter、内联分页历史带 refs 徽标与相对时间、点击文件看 diff、右键菜单放弃更改/复制路径);模型与面板共用同一工作区级 ScmService。
27
- - Operator Chat 在具备 Aimax 凭据资格时,向对话进程注入 `$AIMAX_AUTH_TOKEN`(明文或 `sm4:v1:` 解密后的 ticket),供 skills 读取;文件缺失、无法解析或解密失败时不注入该变量。
28
- - 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 与用户面板共用同一会话注册表并开在工作区仓库根目录,命名区分来源。
29
- - Windows 原生 `cmd.exe` 终端体验补全:仅 Windows 平台提供 `cmd` shell,使用经典 `C:\path>` 提示符、cmd 黑底浅灰配色与方块光标,并补回 ConPTY 丢失的 `Microsoft Windows [版本 …]` 启动横幅;bash 与 PowerShell 保持各自原生输出,不注入 Windows 横幅。
30
- - Operator Chat 详情栏调整:「源码」tab 紧邻「文件」tab,便于在文件预览与源码管理之间快速切换。
26
+ - Operator Chat 新增对话驱动的真实浏览器自动化:右侧「浏览器」面板同步共享状态,登录态与下载隔离在仓库外;模型可操作同一浏览器完成导航、搜索、结构化快照、元素操作与截图,不读写仓库文件,也不暴露页面脚本执行。
27
+ - 模型驱动的共享浏览器默认改为可见外部窗口,并保留右侧预览;地址、搜索与元素操作不再默认生成大截图,搜索逐字填写并提交真实表单,启动时降低自动化指纹;无法嵌入的页面提供外部打开与聚焦入口,同一持久配置可完成站点安全验证。
28
+ - 修复观测页「执行历史」把仍在重试的节点误报为「最终失败」的问题:只要节点最后一个已记录的尝试失败,就会显示「N 次 · 最终失败」,即使该节点仍在运行、重试已经排队,会让人误判运行已结束。现在节点处于运行/已启动/暂停状态时改为「N 次 · 最近一次失败,仍在重试」,真正到达终态才显示「最终失败」;修复轮次的多轮标签同样处理。
31
29
 
32
- ### 改进
30
+ - 修复重试额度提升到 5 次后遗留的过期说明:只读 Pi 节点的默认重试次数已在 2026-09-05 由 3 次提升到 5 次,但运行时文档、模板示例与 npm 包内置的 `backend-test-dag.json` 仍写着 3 次,导致目标项目看到的仍是旧额度。现已同步为 5 次,并把模板漂移检查扩展到重试策略字段,避免同类过期再次漏过。
31
+
32
+ - 修复 Console「更新程序」被一条卡住的旧操作永久堵死的问题:停在「等待核对」的操作记录已被启动对账跳过、自身无法再推进,却又被当成「仍在运行」,导致之后每次更新都提示「另一个 Console 操作正在进行」。现将其明确归为已结束、不再占用操作位,并在恢复页保留可见;同时补全「已安装成功但接棒失败」记录的自动收敛,不再永久停留。
33
+
34
+ - Console 操作文案改为面向操作者的说明并给出下一步:等待超时不再伪装成「需要核对」,改为提示操作可能仍在后台运行;「源内容已变更」「前端拆分状态被并发修改」等原本直接展示英文原文的错误,改为说明原因与具体处理步骤;恢复页按钮与提示去掉 reconcile / supersede / orphan / Human Gate 等术语。
35
+
36
+ - 前端配对观测支持核对六类浏览器报告的登记、终态资源和检查结果,拒绝矛盾或缺失证据;浏览器通过与完整产品验收分开记录,环境异常保留未知。
37
+
38
+ - 实验语料登记新增六类前端配对格式,核对需求、初始文件与检查器实物摘要;复用现有实验计划生成器,保留通用语料原有约束。
39
+
40
+ - 前端配对验收可读取任务已登记的网关快照,按实验格归属汇总供应商调用;拒绝缺失或摘要不符的证据,明确区分观测记录与尚未证明的全任务统计。
41
+
42
+ - 前端配对任务可冻结网关布局,启动前核对实验计划、全部实验格、合同和登记顺序;网关引用先登记的计划摘要,避免摘要相互依赖。
43
+
44
+ - 前端实验日志可按预登记拓扑核对跨网关请求图,只汇总供应商边并追溯实验格;断链、串网关与重复ID拒绝,未解析的失败转发保持未知成本。
45
+
46
+ - 前端实验支持按固定摘要核对单网关合同、逐请求日志和总账,拒绝缺行/重复/身份或用量冲突;未知用量继续区别于保守预留,不将单网关记录冒充全任务证据。
47
+
48
+ - 修复实验计量网关多实例同时打开同一账本可超额的问题:增加独占writer锁,正常关闭和启动失败释放,旧锁不自动夺取或重置预算。
49
+
50
+ - 实验网关记录请求转发关联和上游类型,区分多层日志与供应商侧调用尝试;内部关联头不发送给供应商,共享总额度经过跨实验格HTTP回归验证。
51
+
52
+ - 归档前端实验计量网关,补充实验格绑定、请求正文摘要、选定显式参数和响应模型记录;日志不保存提示词或凭据,重启时拒绝实验身份漂移。
53
+
54
+ - 修正前端评测的任务成本口径:预算预留数和DAG阶段耗时单独保留,缺少全任务实采时不再当成实际请求数或总耗时;缺来源用量时不把局部token当成总量。
55
+
56
+ - 前端配对统计补充首次和最终成功率差异的保守置信区间,保留缺失样本与小样本不确定性,不自动据此晋升候选。
57
+
58
+ - 前端配对验收可核对预登记的来源、预算、初始树及全任务模型收据;快照漂移拒绝,缺少采样参数或供应商实际模型版本证据时继续保留未知。
59
+
60
+ - 修复前端计划把现有只读测试误判为写入越界的问题;计划预检和正式策略门禁均允许安全读取已有测试,新增或修改文件仍严格受写入范围约束。
61
+
62
+ - 前端评审按合同核验行为测试报告覆盖,缺失整组报告、仅执行其他文件、失败或跳过用例时阻止进入评审;完整原始报告与分片继续按摘要复核。
63
+
64
+ - 修正旧计数器浏览器证据把任务成功率误计为通过的问题:浏览器成功仅保留局部事实,完整质量门禁缺失时交付结论保持未知,已证实的行为失败仍保留。
65
+
66
+ - Counter 独立浏览器报告可接入任务统计,核对登记的检查器、终态产物和完整检查项;自测、串运行与矛盾通过标记被拒绝,执行错误保留未知。
67
+
68
+ - 前端任务统计可读取冻结运行和完整根账本,保留失败消耗;缺少来源或独立行为验收时保留未知,避免将 DAG 完成状态直接计为正确交付。
69
+
70
+ - 显式前端配对评测可在运行前核验协议摘要、已登记样本和实际控制器指纹,并将绑定冻结进运行事实;恢复时重新核验,版本不符在分配运行目录前拒绝。
71
+
72
+ - 前端配对评测新增预登记身份核验,重验候选文件、计划内容和登记时间,仅接受明确登记的版本差异,共同模型/输入/预算/验收身份变化继续拒绝。
73
+
74
+ - 前端评测新增基于已登记样本的任务级描述统计,区分首次成功与最终完成,保留失败成本和未知观测;统计本身不构成验收或晋升结论。
75
+
76
+ - 修复 Console 放弃或替代孤立运行时的命令参数错误;运行器收到退出信号时保留监听器直到状态保存结束,避免 Pi 的退出依赖提前终止进程。
77
+
78
+ - 前端 SDK 收到明确预算耗尽错误时主动结束自动重试等待,处理重试对象延后创建的取消时序;普通限流仍可重试,退出未确认仍阻断后续执行。
79
+
80
+ - 前端风险分级与流程路由统一识别明确的排除条款,避免“无需新增依赖或构建系统”误升级;有例外条件或正向需求时仍保留风险信号。
81
+
82
+ - 修复前端契约补充分组信息后,规划阶段重复计算同一需求、错误阻断执行的问题;按需求 ID 读取最新记录并保留完整历史。
83
+
84
+ - 来源成本证据绑定冻结合同版本,区分当前与历史批次,拒绝同版本内容冲突和版本归属漂移。
85
+
86
+ - 来源成本验收核对批次记录、请求时间与任务归属;缺批次编号或记录损坏时保留未知,防止旧记录混入完整证据。
87
+
88
+ - 前端来源准备记录独立执行编号及前后合同版本,请求可追溯到具体重试批次,失败记录继续保留。
89
+
90
+ - 前端配对验收新增全任务成本检查,避免 Plan 局部节省掩盖来源和后续执行成本上涨;用量未知不再获得整体通过。
91
+
92
+ - 前端 DAG 将已确认的来源处理 token 纳入累计预算;验收核对冻结收据,证据丢失或变化时保留未知状态,避免漏算成本。
93
+
94
+ - 任务请求预留记录所属观测会话,来源用量可按会话核对;缺失、冲突或无法归属的用量继续标为未知,避免漏算为零。
95
+
96
+ - 前端语义整理接入共享任务请求额度,预算停止后不再换模型重试,并为用量记录保存输入文档指纹。
97
+
98
+ - 前端 DAG 冻结并继承任务请求账本,来源与后续 DAG 共用预留额度;账本缺失、身份漂移或计数回退拒绝运行,未知来源 token 保留缺失标记。
99
+
100
+ - 来源整理与复核默认使用任务持久请求账本,先保存预留再调用模型;重启不清零,损坏账本、额度漂移及未绑定旧用量会阻断。来源账本与 DAG 的累计继承仍待完成。
33
101
 
34
- - 上游网关不可达(502/503、Service temporarily unavailable、Bad Gateway)现在归类为 `upstream-unavailable` 并默认重试;计划重试阶梯在 fail-closed 时不再把这类可达性故障改写成 `unsupported-provider-capability`,避免把上游宕机误诊为模型能力不匹配(2026-09-11 深夜 r18/r19 的误诊根因)。
102
+ - 来源整理与复核适配器支持传递共享请求预算预留回调,供统一预算账本接入;默认任务的来源费用与 DAG 账本整合仍在进行中。
35
103
 
36
- - 前端 DAG 的验证与审查证据打通:verify 节点落盘逐命令退出证据 `contracts/frontend-verification-evidence.json`(`commandId/label/lane/exitCode/ok` + `allPassed` + `lintStatus`/`lintConfigured`),review-context 暴露该证据,评审协议与评审节点 prompt 改为读逐命令退出状态,不再从绑定 trace 推断命令是否成功;未声明 lint 的任务使用协议内 `unavailable` 并标记 `lintConfigured:false`,不再自造取值。
37
- - 前端恢复轮不再丢 run 级产物:imported 节点(如 writer-admission)在自身节点目录之外写出的文件(worktree baseline 等)会随继承搬运到子 run,修复恢复轮 `frontend-review-context-shell` 因产物缺失 ENOENT 而必然失败的死结。
38
- - 前端 Plan finalize 的确定性前置检查要求**每个**冻结静态命令都被验证目标覆盖(此前只要求覆盖其中一个),把历史上只能由评审散文提出的类型检查缺口变成计划节点可机器修复的项;恢复 finalize 的 identical-plan 门改用**决策身份**(忽略 `rationale`/`purpose`/`notApplicableReason`/`specReference`),只改文案或引用不再算作修复。
39
- - 失败分类不再被模型正文污染:provider/传输类判定只读 stderr、非 JSON 子进程输出与结构化错误字段,模型正文与工具参数不参与 auth/rate-limit/quota/网络判定(修复 finding id 等自产文本把可重试的 empty-output 误判为不可重试 auth 而拖垮整轮的问题);工具终态型节点(design/review)在本轮已提交终态却没有收尾文本时直接判成功,不再空转一次重试。
40
- - 修复 Console 中 `newTask` 与 `importPrd` 并发创建同一任务时 `task already exists` 导致 intake 卡死;前端 run 的 `dag rerun --from-node` 不再因只读 artifact shell(review-context/closeout)被判 unsafe 而永远 ineligible(hard budget 模板仍按设计不支持 rerun)。
104
+ - 修复前端验收漏算 continuation 父运行成本、同一模型列表掩盖实际模型变化、回归场景仅凭声明通过的问题;恢复预算账本拒绝用量倒退、额度漂移和缺失事实丢失。
41
105
 
42
- - 前端恢复不再从评审自由文本猜测文件删除、状态和 VT 映射硬约束,避免把保留项、否定描述或错误现状当作修复要求;语义闭合继续由设计评审裁决。显式 VT 断言必须包含目标覆盖,不能以任意变化代替修复。
106
+ - 来源整理与独立复核收到预算耗尽后立即停止模型回退,失败信息按实际尝试数记录。
107
+ - 前端 canary 支持从独立评测目录读取绑定运行指纹的验收记录和配对文件;核对真实 Plan 模型、设计评审终态和逐项验收结果,缺证据、错配或行为漏检继续阻断整体通过。
43
108
 
44
- - 前端 Plan 精简改为由 runtime 直接完成 typed ledger finalize,合并无决策的全局会话,统一 Risk/Shape 信号并按 endpoint/resource domain 合并 Mock/Data 批次;提交事实模块改名为 `frontend-committed-facts`,移除无生产消费者的 shadow observer 与旧 Review/Admission 对照链。新增 Plan canary 指标读取和决策/安全投影旁路,但在真实同输入 before/after 数据齐备前不切换生产 Plan 契约。
109
+ - 明确的模型调用预算耗尽错误保留为预算停止,不再被网络错误覆盖并触发节点重试或模型回退。
45
110
 
46
- - 修复前端设计评审与实施评审遗漏 `complete_review_scope` 工具权限,导致模型无法完成分段确认、最终评审反复被拒绝的问题;补充真实 Pi SDK 工具激活与分段收口回归验证。
111
+ - 前端 Scout 同一次节点执行中重试时复用已成功提交事实的分支,仅补失败或缺事实分支;模型变更不复用,已消耗 token 不重复累计。明确设计与测试入口的调查分工,减少重复查看依赖内部实现。
47
112
 
48
- - 对话正文与 Human Gate、任务活动和产物卡片统一绑定会话所属工作区;修正旧式任务/运行链接,只有操作编号时查询真实记录再定位,工作区冲突或记录缺失时明确提示,避免误入其他工作区或总览。
113
+ - 来源保真复核仅在项目配置的模型档位间回退,不再自动尝试全局目录中的其他模型。
49
114
 
50
- - 节点侧栏在首次原始运行中隐藏「来源与影响」,派生运行保留该入口;打开运行中节点默认定位到「执行记录」,手动选择和明确的链接位置在刷新时保持。
115
+ - 修复结构化 draft 创建前端任务时漏建来源账本、导致 Contract 节点在模型调用前失败的问题;统一使用现有来源保真校验。
51
116
 
52
- - 修复前端契约可选字段未填写时,评审分片索引引用不存在字段、导致设计评审启动前失败的问题。分片生成跳过 undefined;读取端明确拒绝缺失字段、无效引用、重复或非法范围及未索引内容,保留合法空数组和 JSON 空值。
117
+ - 前端评审获得合同引用的未修改测试源码与实际测试执行记录,按 hash 复核来源及完整性;data/Mock 分批不再重复扣除固定提示词预算,共享领域仍完整处理。
53
118
 
54
- - Operator Chat 侧栏「添加工作区」图标改为与 DSH 一致的文件夹加号,不再用纯加号。
55
- - Operator Chat 侧栏改为单一「新会话」;空白会话在输入框上方用芯片选择工作区和模式(工作流 / Pi),有历史后芯片收起。不再用落地页双卡或「新 Pi」按钮;换模式会复用或新建对应空白会话,不会改已有会话的模式。
56
- - 修复模型续跑取消后带部分文字仍被标记成功的问题;前端 Plan 的取消、认证、限流及策略失败优先于容量恢复,精确格式错误保留原修复路径。完整性检查按需求建立单次索引,减少大计划重复扫描,同时拆分纯检查与恢复策略模块。
57
- - 长会话中的输入框不再因历史消息和工具记录增多而逐键重绘整段会话,输入与自动增高在低性能电脑上更流畅。
58
- - 优化 Operator Chat 长会话的流式渲染:完成回合、消息行、工具卡和用户输入锚点建立稳定的 memo 边界,流式文本更新不再重复渲染整段历史或重装锚点测量监听;缓存会在历史消息或工具实际更新时正确失效;无新增折叠回合时不再提交空状态及重复写入本地存储,工具参数与结果格式化按真实输入变化缓存。
59
- - 对话页「过程折叠」对齐 DSH 细节:模型回复完成时直接进入折叠态,不再先展开再跳动;折叠摘要、过程内容和最终回答采用与 DSH 一致的间距,折叠内容仍保留在页面中,浏览器 Ctrl+F 可直接命中并自动展开;折叠行展开时不再多出底部空隙;箭头改为 16px、颜色更淡的固定图标(靠旋转而非换图标),并补齐系统「减少动态效果」偏好;汇总文案新增「N 个 subagent」,内置 Explore 子代理不再计入普通工具调用。
60
- - 恢复前端 Plan 实时事实分页读取、逐需求 UX 遗漏检查与已完成范围复用;超限时补齐剩余验证目标,并接通 DAG 到 SDK 的原会话续跑。局部状态修改保留其他需求的关联,沿用耐久账本、显式替换和冻结分片边界。
119
+ - 前端 DAG 恢复按问题归属从 Contract、Scout、Plan 或实现节点重跑,清除失效的下游批准;父 Plan 快照绑定来源、账本和当前评审,避免复用过期问题。
120
+ - 前端评审支持受冻结需求约束的修复断言;无效断言保留阻断问题。Plan 无进展时停止追加模型请求,成功终态不被迟到错误推翻。
121
+ - 前端测试执行前核对 Vitest 报告能力和 npm 测试脚本(含前后置钩子);保留计划证据等级与接口边界,明确测试文件通过不等于需求行为已充分验证。
122
+ - 前端合同保留必须遵守的能力条款,交付文件进入写入范围;交付义务不再豁免真实实现位置的归属检查。
123
+ - 修复后端测试 DAG 模板遗漏 `upstream-unavailable` 重试类别的问题:内置模板的 Markdown 计划节点缺少该类别,与运行时生成器不一致,导致照模板配置的项目少一类重试;现已补齐,并把模板漂移检查扩展到重试策略字段,避免同类不一致再次漏过。
61
124
 
62
- - DAG 的 Pi SDK 节点遇到 `stopReason=length` 时,先在原会话内最多续跑 3 次,保留已完成写入和事实,成功恢复不消耗额外节点重试次数;共享原超时与上下文预算,已成功提交终态时不重复续跑,耗尽后才进入原有缩片或重试路径。
63
- - 修复前端 Design Review 成功后可能清空原 Plan 账本的问题,撤回未接通合同校验和物化的修订工具;同时移除误加在实施后 Review 的修订指令。Review 节点内局部修订尚未实现,设计缺陷仍走原有拒绝与恢复流程。
64
- - 前端 Plan 输出超限后按已提交事实续跑:带部分结果或网关诊断也会保留进度,自动缩小剩余需求;单个过大需求进一步按缺失事实逐项恢复,并在恢复耗尽时输出剩余范围。
65
- - 大需求前端 Plan 增加可分页的实时事实读取,保留长标识和跨批验收绑定;UX 按有限需求范围执行,重试复用完整批次和全局命名表,逐需求检查遗漏。冻结交付文件超过单 writer 容量时在 Contract 后提前识别拆分需求;自动子任务执行链路尚未接通,此项不代表自动拆分已可用。
125
+ - Operator Chat 右侧辅助栏改为三个表面:仓库、会话、工作台。点上下文环进入「会话 / 上下文」,文件和终端不再与会话检查挤在同一条标签上;工作台用内侧图标轨切换终端、浏览器和数据库。
66
126
 
67
- - 前端 DAG 修正否定约束导致的小任务误升级;Plan 在分片前统一 compact 判定并保留完整执行组。支持冻结 coverage 并发上限(1–4,默认 4),限流后减少后续并发且不增加重试。自动恢复子进程与 DAG 共用长跑超时,避免继承通用 120 秒上限而中途终止。
68
- - 前端 DAG 保留完整需求并按作用域/执行组分批,工具提交改为先校验和耐久保存再回执;支持按组共享覆盖、逐端点/逐 finding 提交和缺项恢复。小任务走短流程,容量耗尽直接缩小剩余工作;模型窗口不再硬编码为 100K/16K。独立 AC、来源保真与 writer/verify 门禁保持有效。
69
- - 观测台阅读与口径修补:失败节点的产出页把「错误输出」提到正文之前,未登记文件关系时不再展示空文件卡;检查器 Tab 条放不下时两端渐隐提示并保证选中 Tab 可见,每页顶部说明卡可收起。异常 Task 的分类与建议跟进显示中文业务术语(未知 token 原样透传并可悬停看原始值),资源池「合计」改为口径明确的「已建 Task」并附悬停说明,数据更新文案改为「数据更新于 … · 仅提示」。DAG 详情面包屑使用可读运行标题(缺失回退运行 ID、窄屏截断),「记录保存位置」移入「诊断信息」折叠区,页面刷新按钮与标题同行靠右。
70
- - 观测台保留检查器 Tab 导航,日志分类收进下拉框,辅助操作改为带提示的图标;所有执行记录区域(检查器执行记录/产出、运行页最新输出)统一配备对话式「回到底部」悬浮按钮:内容可滚动且视口离开底部即出现,贴底或内容不足一屏时隐藏,点击回到底部;活跃运行同时恢复跟随并提示未读条数,终态运行同样可用。执行分次仅在相关页面固定显示,上翻暂停跟随,并记住分次阅读位置。补充日志搜索、错误过滤、图定位和完整脱敏文本下载。
71
- - 实际上下文改为中文材料目录优先、技术信息折叠;修复历史轮次混读当前上下文和旧请求覆盖新尝试的问题。保留仅看错误与原始协议事件,原始协议使用直接可达的图标开关,移除单项更多菜单和日志 HTML 导出;交接包明确固定来源并支持刷新。
72
- - 检查器隐藏无内容或明确不适用的入口:单次执行不显示尝试对比,Shell/静态节点不显示实际上下文,静态节点不显示执行记录;切换节点与新增尝试时自动更新,保留用户当前的比较选择。
73
- - 资源池筛选覆盖任务标题和全部任务区域,返回列表及历史分页保留阅读状态;重跑草稿和影响预览可恢复,结果不确定时原样重试已确认的请求,避免重复创建运行。
74
- - 执行记录默认跟随最新内容;上翻自动暂停并出现对话式「回到底部」按钮,点击回到底部;历史记录保留阅读位置,终态运行同样可用。
75
- - DAG 节点检查器仅对最新且仍运行的执行默认跟随;右下角显示阅读状态、新记录提示和“回到最新”,上翻即暂停。
127
+ - Operator Chat 侧栏折叠后改为 56px 图标轨:可直接点新建会话、搜索、添加工作区和设置,不再留下空槽。
128
+ - Operator Chat 的 `@` 文件面板改为按当前目录一层浏览:空 `@` 不再倒出整库路径,点文件默认隐藏,Tab 进入目录、Enter 选定,插入仍是 `@path` 文本。文件行改为左对齐菜单,不再被全局按钮样式居中成胶囊;目录右侧常驻进入箭头,浮层圆角与投影贴近 DSH 菜单。
129
+ - Pi SDK 运行时依赖升级:`@earendil-works/pi-ai` 与 `@earendil-works/pi-coding-agent` 从精确 pin `0.83.0` 升到 `0.84.4`(顺带修复其携带的 `undici` 高危漏洞与 `brace-expansion` DoS 告警)。适配 0.84 破坏性变更:`getApiKeyAndHeaders` 返回的 headers 现可含 `null` 删除标记、`setRuntimeApiKey` 第三参改为认证取消选项;扩展加载 fixture 改为 ESM(pi-ai 子路径导出不再提供 CJS 条件)。SDK 契约探针文案、发布包契约测试与自举 canary 同步对齐 0.84.4。
130
+
131
+ - 修复 Windows 上 pi 节点零提交失败的读写守卫误报:libuv 在 win32 的 `fstat` 返回卷序列号而 `lstat` 恒为 0,跨 API 比较必然失败并误报“文件在打开期间被替换”;现新建共享身份比较 helper,win32 跳过跨 API `dev` 比较但保留 `ino` 与其余全部防护,Console 仓库预览同类比较一并修复(用户 0.42.1/0.43.0 两次实测上报)。
132
+ - 修复研发工作流对 Git submodule 的误拦截:父仓库 `git status` 只能看到 submodule 目录级条目,子仓库内合法写入会被误判 `empty-diff`(脏基线)或越界(净基线),导致 verify/review/closeout 全部跳过;现在状态采集会展开到已初始化子仓库的文件级事实(含嵌套 submodule、中文/带引号路径解码、未初始化与采集失败时如实报错不吞证据),合法子仓库写入正常进入验证链,真实越界仍按文件精确拦截,无 submodule 仓库行为字节级不变。
133
+
134
+ - Console 新增「暮色蓝」深色和「雾光白」浅色主题。主题选择会被记住,浏览器存储不可用时仍可在当前页面切换。
135
+ - Operator Chat 新增「上下文洞察」面板,可通过 `/context` 或详情栏「洞察」查看上下文构成、趋势、token、缓存、费用、耗时,以及剪枝和压缩记录。
136
+ - `/sdd-bingo` 会显示上报的 Skill 和 Session ID,并在轨迹中保留可复制的会话身份。
137
+
138
+ ### 改进
139
+
140
+ - Operator Chat 输入框下方的会话统计对齐 DSH:长串静态文字收敛为两个可点击摘要,可分别查看模型/工具用时、TTFT、TPS 与 Token 分项;详情卡互斥并支持外部点击或 Escape 关闭,窄屏打开时不会推动输入框或消息流。
141
+ - Operator Chat 长会话新增完整轮次轨道与按需历史定位,可从任意用户消息精确新建会话;历史图片刷新后仍可预览,仓库文件链接可直接定位到行,最终回答显示单轮 token/耗时,并支持可持久化的紧凑/完整阅读模式。图片文件与消息记录分离保存,删除、分叉和失败回滚会同步清理,附件读取重新校验类型与引用。
142
+ - 本地分支合并默认只执行与影响面匹配的定向测试、类型检查、构建和治理检查;完整测试推迟到 push 或完整交付前,并通过 receipt、`verify:tree` 或 pre-push 在最终 tree 上只执行一次。发布与推送门禁仍包含 I/O-heavy 测试。
143
+ - Operator Chat 重新整理消息时间线:思考、工具、重试、命令和回答按实际顺序展示,工具调用不再被误标为“未识别事件”,未知事件只显示简短摘要。
144
+ - 用户发送消息后会立即看到“正在思考”。请求上下文、模型步骤和生命周期事件不再混入消息数量或干扰主要对话。
145
+ - 只有正常完成且存在最终回答的轮次才会自动折叠过程。停止、失败或只有部分回答时,已有内容仍保留在过程区。
146
+ - 主时间线、轨迹页和 HTML 导出采用相同的消息顺序与折叠结果,实时插入新事件时不再造成思考或工具行跳动。
147
+ - 断线重连会自动补回缺失消息,并避免把正常的历史回放误判为连接故障。
148
+ - 移除工作区只会将其会话从侧栏和搜索中隐藏,不会删除目录或运行记录;重新添加同一路径即可恢复原有会话。
76
149
 
77
150
  ### 修复
78
151
 
79
- - 悬停或打开会话「更多」菜单时,Pi / 工作流徽章与相对时间一并让出,避免被三个点按钮盖住。
80
- - 修复点「新 Pi」后一发消息侧栏就变成「工作流」:全局会话列表和点进会话时漏了 `sessionMode`,缺省被当成工作流。
81
- - 修复手动压缩上下文后,长会话会清空并重复绘制大量历史内容的问题;压缩结果现在会直接在当前消息流中更新,不再触发整段会话重载。
82
- - 修复对话页存在运行活动时,收起状态的右侧辅助栏展开按钮覆盖「运行活动 N」及数字徽标的问题;中大尺寸布局现在保留 8px 操作间距,窄屏布局不变。
83
- - 修复 Operator Chat 消息流的六处实际使用问题:
84
- - **回复被吞**:断线/重连(含每 25 秒的 SSE 事件窗口轮转)后,保留事件里已经生成的正文会在事件流恢复时重新应用到对应回合,不再被静默丢弃;仅当该回合已有更新内容时才跳过,避免重复气泡。
85
- - **用户输入消失或重复**:新消息发送后会在每一帧模型输出中持续显示,不再等回复结束才重新出现;服务端确认后,提交回滚(排队抢占、被拒绝、连接失败)不再删掉已确认的消息;确认帧到达时会原地合并临时消息与会话快照,不再重复显示同一条输入。
86
- - **回复重复**:上下文溢出自动压缩并重新生成后,被打断的旧回复会被取代,不再与重新生成的回复同时显示。
87
- - **只有思考没有正文**:模型回复以工具调用或思考结尾时,正文会作为回答显示,不再被折叠进「过程」区。
88
- - **空气泡误删**:只包含思考或工具内容、正文为空的回合不再被清理掉。
89
- - **停止语义**:被停止中断的工具调用显示「已停止」,不再显示为「出错」并强制展开、计入「N 次出错」。
152
+ - 修复 macOS/Linux 开发路径在 Windows 暴露的三类兼容问题:前端组合验证夹具不再依赖 POSIX 单引号;无 `.gitmodules` 的仓库不再把 Git 空结果误判为启动失败;定时任务用 Git 规范化内容生成稳定树指纹,CRLF checkout 不再造成虚假 evidence drift。托管任务路径与嵌套 submodule 测试也统一使用跨平台路径语义。
153
+ - 切换会话后,旧会话尚未确认的输入不会再出现在新会话中。
154
+ - 修复 Windows 上 Pi 节点在没有提交改动时误报“文件在打开期间被替换”的问题,同时保留原有文件安全检查。
155
+ - 工作流现在能识别 Git submodule 内的实际文件变化。合法写入可继续验证,真实越界仍会按文件拦截。
90
156
 
91
- - 任务成功与收尾只认可匹配当前契约版本和哈希的运行;更新需求后重新审查 gate,旧成功记录不再阻止新运行。需求独立审核接受 `revision: null` 表示无修订,保留拒绝结论和身份校验;相同角色、相同内容的 PRD 重复导入复用不可变引用,不再重复增加副本或无故推进契约版本。
157
+ ## [0.43.0] - 2026-09-14
92
158
 
93
- - 前端 Plan 重试复用首次冻结的分片归属,避免重试提示词变长导致进度绑定不匹配或重复处理已完成需求;布局缺失、损坏或漂移时保留证据并阻断派发。风险路由仅忽略完整的范围排除声明,条件句和嵌套否定中的真实权限风险在生成期与运行期均保持升级。
94
- - 执行记录搜索直接高亮命中文字,标识当前跳转记录;未搜索或无匹配时禁用上下箭头,清空搜索恢复原文。
159
+ ### 新增
95
160
 
96
- - 恢复运行在导入节点缺少明确读取范围时阻断工作区漂移,避免复用受变更影响的旧结果;读取范围明确且不受影响时仍可按路径复用。
97
- - 前端验证将子目录执行的 Vitest 报告统一为仓库相对路径,并对齐实际目录别名,避免已通过测试被误判为未执行;被筛除或失败的目标仍阻断。
161
+ - `dag doctor` 正式支持 `--json`,并在同时传入时优先于 `--markdown`;默认输出保持不变。
162
+ - 新增统一的 `dogfood:backend` 入口。默认只检查控制器身份和发布信息,显式传入 `--execute` 才会运行真实任务。
163
+ - Operator Chat 支持确认后预约工作流,并在「观测 → 定时任务」集中展示状态、执行记录和验收结果。
164
+ - 预约会冻结执行时间、范围与预算,到点后在后台执行并把结果回传原对话。取消或失败不会删除历史记录。
165
+ - 新增按需工具模式:预约、执行和恢复工具常驻,其余能力按用户意图启用;发生异常时会恢复完整工具集。
166
+ - Operator Chat 新增共享浏览器自动化,可由模型完成导航、搜索、元素操作和截图,并在右侧「浏览器」面板同步显示;浏览器不会读写仓库文件或执行页面脚本。
167
+ - 共享浏览器默认使用可见外部窗口并保留右侧预览。登录态和下载保存在仓库外,危险协议仍会被拦截。
168
+ - 工作区设置会区分程序更新与当前仓库初始化,并逐项说明待处理文件、原因和下一步操作。
169
+ - `loop-agent init` 生成的 `.gitignore` 托管块新增治理目录、`scripts/` 和 `harness.json`,仍保留 `AGENTS.md` 与 `README.md`。
98
170
 
99
- ## [0.42.0] - 2026-09-07
171
+ ### 改进
100
172
 
101
- ### 重点更新
173
+ - 自然语言预约只开放工作流动作和本地只读文件能力,不会在准备阶段使用终端、浏览器或扩展工具提前执行任务。
174
+ - 后端测试计划统一模块清单格式,并在计划阶段检查场景分区、重复路径和非法链接,格式问题可提前修正。
175
+ - 后端测试计划不会再为执行次数或报告存在性编造文件断言,也不会在验收阶段重复运行 pytest。
176
+ - 前端实现会沿用项目现有测试入口。没有测试框架时不会强制引入,新旧测试一旦存在仍必须执行。
177
+ - 前端工作流不再要求测试标题携带 VT 编号,需求与验证目标的关系由契约记录。
178
+ - 没有构建脚本的合法项目可以使用实际存在的检查完成验证,不会因缺少 `npm run build` 被误判失败;lint 仍不属于该工作流。
179
+ - `AC1` 等验收编号会统一规范为 `AC-1`,非法格式的错误信息会直接说明预期写法。
180
+ - 计划声明的必需交付物只检查文件是否存在;需求由交付物或测试覆盖时不再误报范围违规,真正超出声明范围的写入仍会被拦截。
181
+ - 前端计划会合并重复需求编号,并修正 Mock 策略提示中的冲突约束,减少无法自行恢复的计划失败。
182
+ - 大小任务都按实际模型容量组织计划材料,减少因固定字节门槛造成的不必要分片。
183
+ - Operator Chat 可在未执行 `loop-agent init` 的仓库中重试网络波动和 502 等瞬态故障;认证、权限和配额错误仍会立即返回。
184
+ - 设置弹窗优先展示当前工作区,窄屏导航改为横向排列,只剩合并或确认事项时不再显示无效更新按钮。
185
+ - 侧边栏会清楚标出当前工作区和会话,使用浅色主题标记且不会被悬停样式覆盖。
186
+ - `ask_user_question` 工具卡改为可读的问答视图,显示回答进度,不再直接暴露 JSON。
187
+ - 用户消息、过程折叠和工具卡的配色、间距与排序规则统一,对话在刷新和重连后仍保持原有顺序。
188
+ - 待发送消息会插入正确的历史位置。服务端确认后会就地替换临时消息,不再出现重复气泡。
189
+ - Operator Chat 浏览器面板可直接访问本地开发服务,危险协议和无法嵌入页面的安全出口保持不变。
190
+ - 节点侧栏会直接显示失败尝试的简要原因,下拉菜单不再被工具栏遮挡。
102
191
 
103
- - **Operator Chat 内置只读 Explore 子 Agent**:主会话可通过 `Agent` 工具委派代码库搜索、符号查找和调用链追踪;子会话 Fresh、one-shot,只暴露 `find`/`ls`/`safe-*`/git 只读工具,父 Turn 停止时一并中止。工具目录中的 Explore 条目改由服务端 `builtinSubagents` 能力字段驱动,后端调整内置子代理时前端自动跟随。
104
- - **前端实现 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 次。
105
- - **前端 verification contract v2**:plan 不再手写五值 `type`,改为引用生成期冻结命令目录的 `commandId`,`type: component + npm run build` 这类非法组合在 Plan 工具边界即被拒绝;冻结验证命令引用的基建文件(如 vitest 配置)确定性并入 writeSet admission 边界,writer 不再被具体 writeSet 拦住;Verify bundle 按工作目录和冻结命令去重,static/behavior/Mock/lint lane 复用相同命令结果。
106
- - **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 后仍走全部门禁)。
107
- - **契约幂等与 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 退出诊断改用只读异常监视器。
108
- - **工具入参预览放宽**:工具入参预览从 1200 字放宽到 4000 字(与会话结果落盘上限对齐),详情栏支持「展开全部」(可视高度最多 720px),Explore 等长 brief 不再被预览截断误导。
192
+ ### 修复
193
+
194
+ - 后端用例审查完成修改后,即使模型漏写状态行也可以正常结束;空改动、越界写入和阻断状态仍会被拒绝。
195
+ - 前端验证可在 Bash 包装命令中正确生成测试报告,已完成的行为验证不再因报告缺失而失败。
196
+ - 修复前端计划无法提交实施步骤、最终审查猜错范围,以及重复需求导致计划阶段中断的问题。
197
+ - 修复前端 Mock 策略、测试名称和构建要求相互冲突时造成的反复失败。
198
+ - 修复 Operator Chat 中用户消息漏显示、重复分组、历史加载后滚动跳动,以及删除会话后旧请求重新出现的问题。
199
+ - 修复跨会话输入污染和快速重复提交:草稿、附件与输入历史按会话隔离,相同内容的连续双击只会发送一次。
200
+ - 前端设计审查只依据已提交的最终结论决定是否允许写入,具体修改意见仍会完整保留。
201
+
202
+ ### 破坏性变更
203
+
204
+ - 定时任务默认改为在当前项目目录执行,不再自动创建 worktree 或重复初始化;执行前仍会检查干净的 Git 基线和写入范围。
205
+ - Pi 模式默认不再注入初始化治理内容和内置 Skills;可通过 `/skills:<name>` 手动调用,也可以显式重新开启自动注入。
206
+
207
+ ## [0.42.1] - 2026-09-09
208
+
209
+ ### 新增
210
+
211
+ - Pi 模式支持 `/goal` 持续目标,可在会话中创建、编辑、暂停、恢复和清除。只有显式启动的目标会自动续跑,并受轮次上限约束。
212
+ - Console 右侧栏新增「浏览器」,支持地址输入、前进、后退、刷新和跳转系统浏览器;页面默认在无法访问 Console 数据的沙箱中打开,也可以临时解锁,危险地址仍会被拦截。
213
+ - Operator Chat 新增源码管理,可查看状态和差异、暂存或撤销暂存、放弃更改、提交、切换分支以及推拉代码。
214
+ - Operator Chat 新增持久终端,可在右侧「终端」面板查看、接管、中断并继续模型使用的 shell。
215
+ - Windows 用户可选择 PowerShell、Bash 或 CMD,CMD 会显示熟悉的提示符和启动信息。
216
+ - 具备 Aimax 凭据时,Operator Chat 中的 Skills 可以直接使用对应认证;凭据无效时不会注入错误信息。
109
217
 
110
218
  ### 改进
111
219
 
220
+ - 502、503、Bad Gateway 等网关故障会按上游暂时不可用处理并自动重试,不再误判为模型不兼容。
221
+ - 前端验证会按每条命令的真实退出结果判断成功与否,未声明的 lint 不会被虚构为已执行。
222
+ - 恢复运行会保留节点写入自身目录外的运行产物,避免因基线或报告丢失而必然失败。
223
+ - 前端计划会在执行前检查所有静态验证是否都有对应目标,遗漏项可在计划阶段修正。
224
+ - 认证、限流、配额和网络错误只依据实际进程错误判断,不会再被模型正文或工具参数误导。
225
+ - 同时新建任务并导入需求文档时,不会再因“任务已存在”卡住流程。
226
+ - `dag rerun --from-node` 可用于符合安全条件的前端运行,硬预算模板仍不支持这种重跑。
227
+ - 对话内容、人工确认、任务活动和产物卡片会绑定到所属工作区,旧链接也会先定位真实记录,避免误入其他工作区。
228
+ - 侧边栏统一为一个「新会话」入口。空白会话可选择工作区和模式,有历史后选择器自动收起。
229
+ - 取消后的部分回复不会再被标记为成功,认证、限流和策略失败也不会被容量恢复逻辑掩盖。
230
+ - 长会话的输入、流式回答和工具卡更新更流畅,不会因历史内容增多而反复重绘整段对话。
231
+ - 完成的回复会直接折叠过程,Ctrl+F 命中折叠内容时会自动展开,并支持系统“减少动态效果”设置。
232
+ - Pi 节点遇到输出截断时会在原会话内最多续跑 3 次,保留已完成内容;仍未完成时再按原策略重试。
233
+ - 大型前端计划会保留已提交结果并只补齐缺失部分,减少超限后从头开始的情况。
234
+ - 前端冻结阶段的覆盖并发上限可设为 1–4,默认 4;限流后会降低后续并发。
235
+ - 观测台会优先展示失败原因,日志支持搜索、错误筛选、下载和“回到底部”,并记住各次执行的阅读位置。
236
+ - 检查器会隐藏没有内容或不适用的入口,任务筛选和历史分页也会保留当前阅读状态。
112
237
 
238
+ ### 修复
113
239
 
114
- - DAG 退出诊断改用只读异常监视器,避免诊断逻辑改变宿主异常策略或中断其他并发 run 的取证;退出码使用实际 exit 事件参数。
115
- - 前端分片 VT 归一化同步处理 `replaces` 引用,避免重试修正因分片前缀不同而无法覆盖旧事实。
116
- - 强化 DAG 恢复与契约幂等:重跑计划不会复用 imported 节点读取的漂移输入、缺失/未完成节点,并且仅在 Git HEAD 相同、rename 与治理输入清单可完整判定时放行 scoped drift;`stopReason=length` 的 transport 别名可正确重试。契约 no-op 写入 request ledger 但不伪造事务,重复请求携带新 payload 会被拒绝,且 no-op prepare 不再无谓刷新 DAG。
117
- - 修复契约重复 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)不走短路,仍是修复投影。
118
- - 修复 workspace-drift 一刀切阻断 `dag rerun --from-node` 的问题:整指纹对比细化为内容级逐路径对比,漂移全部落在重跑子图自身 readSet/writeSet 内时放行(`workspace-drift-scoped`,重跑本就会重读/重写这些路径);其余情况(导入事实复用节点的输入漂移、无法判定路径的旧 checkpoint)保持严格阻断,高风险写者续跑路径维持整指纹严格判定不变。契约同 hash 重投影不再改写文件,与此叠加后恢复路径不再被无意义漂移阻断。
119
- - superseded run 现在可作为 `dag rerun --from-node` 的事实供体:操作员取代的是 run 整体,其 FINISHED 只读上游节点(contract/scout 等)经既有导入机制继承,不再因父 run 被取代就强制全量重跑;writer 进重跑子图、决策门禁、未解决 ERROR 在闭包外等不安全场景各自的原有阻断不变。
120
- - 修复前端 Plan coverage 会话提前停止导致会话数翻倍的问题(run 3 实测每会话平均仅 1.7 个 record 调用即写结论,把一个切片的活摊到两个会话):coverage 段指令与 COVERAGE BATCH 提示现在明确「切片穷尽才算完成」——本会话分配到的每个需求都必须有已提交的 coverage facts(verification targets 或 evidence gap)才能收尾,批量提交直至穷尽,提前停止会把剩余项拖成 MISSING-FACT 修复会话;MISSING-FACT 队列降级为校验兜底而非主要补齐机制。
121
- - 修复前端 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 末尾的双向检查才暴露。
122
- - 修复 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 容量类),新执行不再产生。
123
- - 前端 Scout 在中高复杂度任务中并行收集 target surface 与 design evidence;大型 Plan 将 requirement coverage 按批次并行映射,再按固定顺序归并到唯一 reducer,保持 Contract → Scout → Plan 依赖与确定性终态,同时缩短最长串行等待。
124
- - 前端 Verify bundle 会在同一次执行中按工作目录和冻结命令去重:static、behavior、Mock、lint lane 复用相同命令结果,同时为每个 lane 保留独立证据,避免重复启动耗时的 typecheck/test/build 进程。
125
- - 前端 Micro/Small shape 路由不再把 `test/`、`e2e/`、`docs/` 等验证或文档根目录误计为业务跨域;`src/**` + `test/**` 的局部 UI 改动现在可以正确命中轻量拓扑,真实跨包路径仍保持升级。
126
- - 修复前端 Plan 漏读独立行为证据、重试丢失已重新录入的 UX 名称的问题;必交付文件改由 Contract 显式声明并绑定原始来源,避免把允许修改或参考路径误判为交付义务。缺失交付物和 UX 名称冲突现在可在 Plan 提交前发现并修正,发布 schema 同步支持组件覆盖与复用证据字段。
127
- - 修复前端 DAG 的 Plan 按 AC 分片重复发明同一批需求、交互和 UI 状态的问题:Contract 的 canonical requirement 文本与来源片段改由 runtime 从冻结 ledger 写入,Plan 先基于全部需求提交一次全局 UX registry,再在单一全局 UX 会话中建模组件、状态和交互;来源声明的 UI 状态必须完整闭合,复用既有组件必须提供真实存在的文件证据,交付文件完整性与逐状态/交互组件覆盖由确定性 gate 校验。
128
- - 修复顶部一级「观测」入口被恢复工作区残留的 DAG 或上次观测对象劫持的问题:现在点击该入口始终回到当前 Workspace 的运行总览,具体 DAG 仍通过「全屏观测」等显式入口打开。
129
- - 修复节点检查器通俗字段旁的问号只有图标、悬浮时看不到具体说明的问题;问号现在支持鼠标悬浮和键盘聚焦,并显示对应字段含义及原技术字段。
130
- - Next 发布测试升级到 Vitest 4.1.11,采用上游 worker RPC 修复,避免所有断言通过后仍因 `onTaskUpdate` 通讯超时阻断发包;同时隔离会改写构建产物的 package-surface 测试,并恢复两条此前被错误嵌套、实际未执行的 Console 更新回归;发布门禁继续严格检查 unhandled errors。
131
- - 前端计划契约新增确定性锚定校验(恶劣网关冒烟 4 轮 design 拒绝的主因):behavior 验证目标必须至少引用一个 requirement,且在契约声明了 UI 状态或交互时必须引用至少一个已声明的 UI 状态(纯逻辑契约豁免)。校验位于共享 schema refine,plan 节点的自修阶梯当场拿到精确到字段的报错并修复,不再烧一整轮 design-review 才发现映射缺失;`skills/frontend-plan` 决策契约参考同步补充 canonical 示例(behavior target 形态、状态名逐字引用、stylingStrategy 禁止承诺任务源非目标能力)。
132
- - 修复前端 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)。
133
- - 修复 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 单次执行不放宽。
134
- - 可选依赖 `@agent-context/sift` 从 `0.0.1-alpha.6` 精确 pin 升级到 `0.0.1-alpha.7`:新增 `retrieveLines` 行级分片取回与省略点内联 stash 路径/起始行号(模型可直接换算 read 行号),纯文本压缩策略更保守(不同编号/状态的内容不因句式相似而合并);桥接层沿用既有 `createSift`/`siftRequest`/`retrieve` API,行为与回退开关不变,仍不投影 init。
135
- - 修复后端实现 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` 观测产物可鉴别此场景。
136
- - 修复前端自动恢复实际重跑整棵 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,避免串用其它请求结果。
137
- - 冒烟再暴露 writeSet 授权缺口:冻结验证命令引用的基建文件(如 `--config` 的 vitest 配置)不在 plan verification targets 内时,writer 被具体 writeSet 拦住无法创建、verify-shell 必然失败。现在 admission 生效边界确定性并入冻结命令引用的文件(机械提取、仍受 allowedPaths/forbiddenPaths 约束),writer 聚焦检查失败后可自行补齐基建文件。
138
- - 前端 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` 不参与控制流。
139
- - 修复 /inspect/* 静态资源(operator-chrome.js/css、观测文档)缺少 Cache-Control 的问题:现在与 Console SPA 一律 `no-store`。此前浏览器启发式缓存会让 Console 更新/重启后继续挂旧版导航模块,表现为顶部导航「回退」到只有操作/观测、缺少对话入口的旧版布局。
140
- - 新建、删除和切换对话的反馈更及时;会话列表默认展示 5 条,“展开其余会话”和“收起”也更整齐易用。
141
- - 发送消息后会立即显示在对话流中,完成回合的过程摘要也更清晰,长时间等待连接时不会让输入内容消失。
142
- - 文件预览支持页面内交互和独立窗口阅读,大型 HTML 内容也能完整打开。
143
- - 模型配置更新后,继续使用旧会话时会自动采用最新认证信息,消息流顺序也更加稳定。
144
- - 执行记录默认跟随最新内容,也可以暂停自动滚动并保留当前阅读位置。
145
- - 任务执行、恢复和结果查看更加稳定,工作区和滚动区域的使用体验得到改进。
146
-
147
- <details>
148
- <summary>实现细节(开发者参考)</summary>
149
-
150
- - Operator Chat 会话列表默认收敛为最近 5 条;展开与收起控件采用稳定的整行布局,折叠工作区后恢复默认列表;长历史会话改为分页加载,并在加载更早消息后保持原有滚动位置。
151
- - Operator Chat 长会话增量构建活动 turn、复用已完成过程节点,并支持对已完成且无错误的历史 turn 进行 Compact,降低长消息流的渲染开销。
152
- - 修复 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)。
153
- - 修复 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` 契约,使两条回归重新进入真实执行。
154
- - 修复 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。
155
- - 新建和删除对话现在会立即在侧栏中反馈:新建时先显示“正在创建”,删除时平滑淡出;网络失败会自动恢复原会话,不再需要等待整张会话列表刷新后才看到变化。
156
- - 新建对话会优先复用当前工作区中真正的空白会话,避免重复创建;有历史消息、工具调用、待发送内容或正在运行的会话不会被复用。
157
- - 会话列表刷新现在会复用未变化的行和列表引用,标题、运行状态或队列变化时只更新对应会话,侧栏切换和刷新更平滑。
158
- - Operator Chat 新增仅对具备 Aimax 凭证的用户可见的 `/sdd-bingo` 数据对齐命令;`wizard-local` 模型请求会自动携带与上报一致的 OpenCode 风格会话身份、当前模型和最新 API key,请求头与资格文件变更均在下一次操作自动生效。
159
- - DAG 节点检查器的「执行记录」默认自动跟随最新内容;右下角新增纯图标悬浮开关,可显式暂停并保留阅读位置,恢复后立即回到底部,悬停时显示当前可执行动作。
160
- - 修复前端任务产物派生续跑无法识别当前节点链的问题;从实现节点继续时,设计约束、写入准入、验证和收尾步骤会按现行流程安全重放。
161
- - 统一工作区、Todo 和其他滚动区域的滚动条样式,默认更轻巧,鼠标悬浮时也更容易辨认。
162
- - HTML 文件预览现在支持页面内的标签切换等交互;较大的自包含 HTML 可以在新窗口中直接完整加载,不再受源码摘要长度影响。
163
- - 修复 Operator Chat 长工具链的消息错序:模型过程文字、思考和工具卡片现在按服务端事件顺序稳定交替展示,刷新历史会话后也保持相同顺序。
164
- - 修复 Operator Chat 旧会话继续使用过期模型认证的问题:模型配置变化后,下一轮发送或手动重新加载会自动刷新模型目录和当前模型认证。
165
-
166
- </details>
240
+ - 修复侧栏菜单遮挡 Pi、工作流徽章和相对时间的问题。
241
+ - 修复新建 Pi 会话发送消息后被错误显示为工作流的问题。
242
+ - 手动压缩上下文后会直接更新当前消息流,不再清空并重绘整段历史。
243
+ - 修复右侧栏展开按钮遮挡“运行活动”提示的问题。
244
+ - Operator Chat 在重连后会补回已生成的回答,用户输入和重新生成的回答也不会重复显示。
245
+ - 以工具调用或思考结束的回复仍会保留可见正文,只包含过程内容的轮次也不会被误删。
246
+ - 用户停止的工具调用会显示“已停止”,不会被误计为错误。
247
+ - 更新需求后只认可匹配当前契约的运行结果,旧成功记录不会阻止重新执行。
248
+ - 前端重试会沿用首次确定的需求范围,不会重复处理已完成内容;计划损坏或范围变化时会保留证据并停止执行。
249
+ - 恢复运行会检查工作区变化是否影响已复用节点,无法确认安全时仍会阻断。
250
+ - 子目录中的 Vitest 结果会统一转换为仓库相对路径,已通过的测试不再被误判为未执行。
167
251
 
168
- ## [0.41.3] - 2026-09-04
252
+ ### 已知限制
253
+
254
+ - 前端设计审查仍不能在审查节点内直接修改计划;发现设计问题时会沿用拒绝并恢复的流程。
255
+ - 大需求可以提前识别需要拆分的交付范围,但自动创建子任务的链路尚未开放。
256
+
257
+ ## [0.42.0] - 2026-09-07
258
+
259
+ ### 重点更新
260
+
261
+ - Operator Chat 新增只读 Explore 子 Agent,可委派代码搜索、符号查找和调用链分析;主回合停止时,子任务也会停止。
262
+ - 前端实现工作流增强了规划、重试和恢复能力,默认重试次数从 3 次提高到 5 次。
263
+ - 前端验证会使用计划中确认的实际命令,非法组合会提前报错,验证所需配置文件也会自动纳入允许范围。
264
+ - 后端测试计划在输出截断、结构缺失或模块路径不一致时会给出可重试诊断,不再把不完整计划误判为完成。
265
+ - 重复提交相同契约会直接复用当前版本和已批准结果,不再重复执行完整审批流程。
266
+ - 工具参数预览上限提高到 4000 字,并支持展开查看,长任务说明不再因截断产生误解。
169
267
 
170
268
  ### 改进
171
269
 
172
- - 完善了本发布周期内的日常使用体验和运行稳定性。
270
+ - DAG 退出诊断不会再影响其他并发任务,退出码会反映真实结果。
271
+ - `dag rerun --from-node` 会在工作区变化全部属于重跑范围时继续执行,其余输入漂移仍会被阻断。
272
+ - 被取代的运行可以作为局部重跑来源,已完成的只读步骤可直接复用。
273
+ - 前端计划会保留已完成需求并补齐剩余范围,输出截断会按可重试问题处理。
274
+ - 中高复杂度前端任务可以并行收集信息并按稳定顺序合并结果,缩短规划等待时间。
275
+ - 相同的验证命令会在一次执行中复用结果,避免静态检查、行为测试和 Mock 验证重复启动。
276
+ - 局部修改同时涉及 `src/`、`test/`、`e2e/` 或 `docs/` 时,不再被误判为跨包大改。
277
+ - 前端计划会提前检查交付文件、界面名称和行为验证目标的引用关系,具体缺失项可在提交时修正。
278
+ - 顶部「观测」入口始终返回当前工作区总览,不会被上次打开的运行劫持。
279
+ - 节点检查器中的问号支持鼠标悬停和键盘聚焦,并显示对应字段说明。
280
+ - 发布测试更加稳定,断言通过后不会再因测试进程通讯超时阻断发包。
281
+ - `npm:pi-lens@3.8.72` 这类带版本号的扩展声明可以被正确识别。
282
+ - 新建、删除和切换会话会立即反馈,历史会话支持分页加载并保留滚动位置。
283
+ - 文件预览支持页面内交互和独立窗口阅读,大型 HTML 文件也可以完整打开。
284
+ - 模型配置更新后,旧会话下一轮会自动使用最新认证信息。
285
+ - 执行记录默认跟随最新内容,用户上翻后会暂停,并可随时回到底部。
173
286
 
174
287
  ### 修复
175
288
 
176
- - 修复了部分功能在特定环境下无法正常使用的问题。
289
+ - 修复前端规划提前停止后重复创建会话、重复生成需求,以及设计被拒后无法启动恢复流程的问题。
290
+ - 修复恢复流程误跑整棵 DAG 的问题;恢复只执行确定的范围,并复用已经完成的结论。
291
+ - 修复后端测试模块显示名称影响模块身份判断,以及有效收集修复因缺少结果声明而中断的问题。
292
+ - 修复 `/inspect/*` 使用旧缓存导致顶部导航缺少对话入口的问题。
293
+ - 修复 Operator Chat 中用户消息等待回复时暂时消失、工具链顺序错乱和旧会话继续使用过期认证的问题。
294
+
295
+ ## [0.41.3] - 2026-09-04
296
+
297
+ - 本版本没有用户可见的功能变化,仅修正版本号和发布说明。
177
298
 
178
299
  ## [0.41.2] - 2026-09-04
179
300
 
180
301
  ### 修复
181
302
 
182
- - 修复了 DAG 扩展解析、会话恢复和观测页面资源缓存等问题,让任务执行和对话页面在更新后更加可靠。
183
- - 修复了孤儿会话和观测入口偶发失效的问题,重启或刷新后可以继续使用原有会话。
303
+ - 修复 DAG 扩展解析和会话恢复问题,重启后可以继续使用原有任务与会话。
304
+ - 修复观测页面资源缓存和入口偶发失效问题,升级后刷新即可加载当前版本。
184
305
 
185
306
  ## [0.41.1] - 2026-09-02
186
307
 
187
308
  ### 修复
188
309
 
189
- - 修复发布流程中的测试并发稳定性问题。
190
- - 修复旧会话继续使用过期模型认证的问题,配置更新后会自动采用最新认证信息。
191
- - 修复长工具链消息错序,历史会话也保持正确顺序。
192
- - 统一工作区、Todo 和其他滚动区域的滚动条样式。
193
- - 改进 HTML 文件预览,支持页面内交互和独立窗口完整阅读。
194
-
195
- ### 测试
196
-
197
- - Pi MED 档测试改为校验模型档位形状,避免具体模型切换造成误报。
310
+ - 模型配置更新后,旧会话会在下一轮发送或手动重新加载时使用最新认证信息。
311
+ - 长工具链中的思考、过程文字和工具卡片会按实际发生顺序展示,刷新历史会话后顺序也不会改变。
312
+ - 工作区、Todo 和其他滚动区域采用一致的轻量滚动条,鼠标悬浮时更容易辨认。
313
+ - HTML 文件预览支持页面内交互;较大的自包含页面也可以在新窗口中完整打开。
198
314
 
199
315
  ## [0.41.1-beta.0] - 2026-08-31
200
316
 
201
317
  ### 用户可见更新
202
318
 
203
- - 前端自动化任务的规划、执行和结果检查更加稳定,失败后更容易继续处理。
204
- - 长任务和复杂工作区的进度、文件和运行结果展示更加清晰。
205
- - 插件管理、文件预览和任务详情等常用操作得到改进。
206
-
207
- 实现细节与逐项变更记录(开发者参考)见 [`docs/reports/dogfood/2026-08-31-0.41.1-beta.0-implementation-details.md`](docs/reports/dogfood/2026-08-31-0.41.1-beta.0-implementation-details.md)。
319
+ - 前端自动化任务从规划到验收更加稳定,失败后可以从已有进度继续处理。
320
+ - 长任务和复杂工作区中的进度、文件与运行结果更容易查看。
321
+ - 插件管理、文件预览和任务详情等常用操作更加顺手。
208
322
 
209
323
  ## [0.41.0] - 2026-08-31
210
324
 
211
325
  ### 新增
212
326
 
213
- - 新增了本发布周期内已经完成并通过验证的功能。
327
+ - 后端测试可通过 `backendTest.executeTimeoutMs` 为单次 pytest 或 HTML 执行设置 1 分钟到 2 小时的超时;未配置时仍为 5 分钟。
214
328
 
215
329
  ### 改进
216
330
 
217
- - 完善了日常使用体验和运行稳定性。
331
+ - 对话中的长时间 DAG 会持续显示运行时间、当前阶段、完成进度和最近一次有效进展,点击状态即可打开对应运行。
332
+ - 「Pi 插件」安装页会在获取版本时显示进度;内网访问较慢或失败时可以直接重试,不会阻塞其他操作。
218
333
 
219
334
  ### 修复
220
335
 
221
- - 修复了影响使用体验或运行稳定性的问题。
336
+ - DAG 节点导出的「执行过程」HTML 在深色模式下保持清晰可读,在反向代理或子路径部署时也能完整加载样式。
337
+ - 「Pi 插件」在企业 npm 镜像下可以正常获取作用域包的版本列表。
222
338
 
223
339
  ## [0.40.0] - 2026-08-31
224
340
 
225
341
  ### 重点更新
226
342
 
227
- - **Console 对话页「轨迹」视图**:仿 DSH ui-trajectory 把对话按「用户 → 过程 → AI 回复」渲染为统一单元格列表,每行带类型标签与图标,思考/工具/超长消息可展开收起,支持一键导出自包含 HTML。轨迹顶部新增「会话注入」区,展示真实注入 Pi 会话的系统提示词全文(含字符数与注入上下文 suffix)与模型可见工具目录,离线导出同样包含;每轮新增遥测头行(步骤数、LLM 时长、首 token 延迟、解码吞吐、工具调用数与耗时、上下行 token 与成本),切换历史会话立即显示。同时修复刷新后工具耗时全部变成 0ms/消失(会话恢复现在回填每次工具调用的真实起止时间)、窄窗口耗时列被整体隐藏、展开后内容仍截断在 420 字符、多工作区下轨迹数据恒为空等问题。
228
- - **上下文压力处理默认开启**: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。
229
- - **Console「Pi 插件」管理**:从「设置」提升为与「设置」同级的独立 tab,内置经 npm 校验的插件目录(6303 个,展示 5562 个可安装、含中文说明),支持搜索、每页条数、分页与一键安装/卸载;插件版本改为从 npm 配置的仓库地址拉取(内网镜像可用),安装时提供版本下拉、默认装最新,已安装插件显示实际版本,`@version` 形式的已装包也能正确识别;进度动画改为 JS 驱动,不受系统「减少动态效果」影响。
230
- - **Operator Chat 持续目标模式**:用 `/goal` 或输入框上方的目标条创建跨多回合推进的目标,可随时暂停、继续、编辑或清除;长任务在安全轮数内自动续行,优先处理排队消息;上下文压缩后当前目标自动回到模型上下文;刷新后仍可见,重启 Console 不会未经确认自行续跑。配套新增任务清单与结构化提问卡片,长任务进度与需要用户决策的内容更易理解。
231
- - **多工作区与消息流重构**:同一页面管理多个工作区,会话稳定归属创建它的工作区,会话列表改为独立全局目录(移除工作区不丢会话);消息流整体更紧凑,思考、工具执行、阶段性结果与最终回答按真实发生顺序展示;对话进行中可连续提交多条消息(编辑/删除/立即插入),排队消息由输入框上方队列面板统一管理;右侧辅助栏统一承载文件、上下文、调用记录、运行活动与当前 DAG,宽度可调。
232
- - **CLI 可用性修复**:`--help` 现在直接显示真实 usage(此前 raw-args 命令只在解析出错时才抛出):`task advance` / `task status` / `task source prepare` 与 `dag resume|doctor|report|rerun|...` 的帮助顶部即列出完整参数契约;`task source prepare`(确定性任务源投影)从不可达死代码转正为可用子命令。
233
- - **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/` 临时证据阻断发布前验证。
343
+ - Console 对话页新增「轨迹」视图,按真实顺序展示用户消息、模型过程和最终回复,并可展开、收起或导出自包含 HTML。
344
+ - 「轨迹」视图会显示系统提示词、工具目录、步骤数、耗时和 token 成本,刷新页面后统计仍会保留。
345
+ - Operator Chat 和 DAG 默认在接近模型上下文上限时先压缩再继续请求,遇到网关返回的上下文过大错误也会自动恢复。
346
+ - 「Pi 插件」成为独立页面,支持搜索、分页、选择版本以及一键安装或卸载,并兼容企业 npm 镜像。
347
+ - Operator Chat 新增持续目标模式,可用 `/goal` 创建跨回合目标,并暂停、继续、编辑或清除;刷新或重启后目标仍会保留。
348
+ - Console 支持同时管理多个工作区,会话始终归属创建它的工作区;移除工作区不会删除其中的会话。
349
+ - `--help` 会直接显示真实用法,`task advance`、`task status`、`dag` 和 `task source prepare` 的参数说明也已补齐。
234
350
 
235
- ### 改进
351
+ ### 新增
236
352
 
237
- - Windows 上读取运行中的 DAG `state.json` / `run.json` / `interrupt.json` 时,对原子替换窗口内的短暂文件占用与半成品 JSON 做有界重试;Console 协作中止不再因杀毒软件或文件系统竞争偶发误报输入非法。I/O preflight 测试同步采用与该资源分组一致的 60 秒上限,避免进程启动压力造成假失败。
238
- - 检查器「提示词重启」只读态的提示词卡片会撑满剩余高度并在卡片内滚动,不再在面板底部留下大块空白;失败节点的可编辑布局不变。
239
- - DAG 节点表「备注」改为节点用途简介(是什么、做什么、目的),不再重复节点 ID;失败节点仍显示错误摘要。检查器标题与图节点悬浮提示同步展示同一句说明。
240
- - 实验「提示词重启」会为 Pi 节点的每次失败 attempt 保存独立、脱敏且 64 KiB 有界的提示词候选;Inspector 始终展示提示词版本选择框,新 run 会列出冻结原始提示词与全部失败尝试(含自动重试产生的恢复提示词),历史 run 未保存候选时明确说明,成功尝试不混入。提示词卡片右上角提供复制图标并以勾选图标反馈成功;已截断候选复制时明确标记为截断预览,并保持只读、禁止直接提交,避免用不完整提示词发起续跑。选择失败候选会载入「全文替换」编辑器;即使节点后续自动重试成功,历史失败候选仍可只读切换查看。
241
- - DAG 节点检查器「执行过程」按执行器分流:Pi 仍看 session-events;有命令的 shell 展示 `shell-command-receipt` 与 stdout/stderr;`frontendBrowserToolPreflight` 等内部处理器展示步骤回执(历史 run 可从 capability / attempt 产物合成)。空态不再把 shell/static 误说成「暂无过程日志」。节点输入补充 named handler 名称。脚本仍属于节点输入,不假装已执行。
242
- - DAG 节点检查器「节点输出」在整段内容为完整 JSON 对象或数组时改为缩进代码块展示,不再把紧凑 `JSON.stringify` 挤成一段 Markdown 段落;截断或非法 JSON、普通 Markdown 仍走原阅读器。
243
- - frontend DAG 的 materialized source references 恢复统一的有界 excerpt 与按需 read 指针,不再把 requirement/acceptance 文档全文复制进每个相关节点,也不再强制 contract/plan 重读全部绑定源文件,降低长需求在多节点中的重复上下文占用。
244
- - frontend-test prepare-package 会从 `docs/templates/`、`harness.json` `governanceRoot`/templates 以及 init 投影的 `ai_workspace/loop-agent/templates/` 拷贝标准场景;full init 目标仓不再静默落到仅含 `STD-FE-SMOKE-ENTRY` 的 fallback。
245
- - frontend-test 环境探测区分 connection-refused(curl 7)与 HTTP 4xx/5xx,并提示先启动本地前端后再从 probe 节点续跑;不再把所有不可达都写成同一句 `frontend-base-url-unreachable`。
246
- - frontend-test 报告解析用例 Markdown 的 `##`/`###` 标题与有序列表(`测试步骤` / `预期结果` / `前置条件与重置`);缺 `测试目的` 时回退到用例 H1,避免主 HTML 出现空步骤。
247
- - `dag rerun --from-node` 把尚未启动的 writer/map 视为首次执行;frontend-test probe 这种失败的 exclusive shell 可以带着下游未跑节点续跑,不必整图 `standaloneTaskRerun`。
248
- - Pi SDK 节点在 stall watchdog(默认 15 分钟无 provider 活动)触发后,会先 abort 当前等待,并在同一会话自动发送一次「继续」;仅 abort 已确认且尚未调用 write 工具时恢复,失败仍判 timeout。绝对墙钟超时与 CLI 后端不走这条恢复。
249
- - DAG 节点检查器「执行过程」时间线默认隐藏原始协议事件(`message_start` / `message_end`),按钮文案为「展开原始协议事件」;用户可点选展开,同会话内选择会保持。
250
- - Operator Chat 的乐观停止现在把“视觉已停止”和 Turn ownership 分开:Abort 获得可靠终态前明确显示“正在停止”,此时可为原会话保存一条服务端持久化的“停止后发送”消息;后一次覆盖前一次,切换会话、刷新页面或 Console 重启不会丢失,旧 Turn 结束后复用正常 Turn 准入路径自动发送,并以固定 `clientRequestId` 防止重复执行。
251
- - Operator Chat 修复快速终止时“停止后发送”与普通发送之间的准入空洞:发送路径改读实时 ownership;若 deferred 请求恰好撞上旧 Turn 终态,会先按服务端状态对账,再使用同一 `clientRequestId` 自动转为普通发送,不再要求用户刷新重试或丢失本次提交。
252
- - `dag rerun-task` 现在会把父 run 最后一轮仍未解决的 `verify-pi` / review 反馈、证据引用和修订轮次带入新完整 DAG;planner、implementer 与 verifier/reviewer 必须修复或举证说明不再适用,不能仅因文件已存在就返回 `already-satisfied`。Console 同步区分「自动修订」「从失败节点恢复」「带反馈重新执行任务」。
253
- - DAG 恢复与治理收敛收窄为两条最小路径:标准治理 `request-revision` 仅在 `maxFixLoops > 0` 时同 run 回到 `implement-pi`;writer 遇到 `unavailable` / `network` / `rate-limit` / `timeout` 时,`dag rerun --from-node` 重跑 writer 本身及安全下游,不再把 parent `ERROR` 改写成 `FINISHED`,任意自定义 shell 也不能仅凭 `verifyEvidence` 获得续跑资格。
254
- - `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 才失败。
255
- - 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 重排队分流,以及多轮迭代恢复纪律(先一句话总结上一轮错误、修根因不修症状、禁止原样重交、同错两轮后停下报告)。
256
- - 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`,原实现丢弃参数描述、模型只能看到参数名)。
257
-
258
- - Operator Chat 对齐 pi-web:建会话不再传封闭 `tools` 白名单(避免 SDK 把扩展 MCP 工具滤出 registry),创建后 `bindExtensions` 发 `session_start`,再钉激活集。扩展注册的 MCP 工具可被模型调用;`apply_patch` / `full-tools` / `shell` / `coding-chat` 仍排除。
259
- - 对话侧栏 Plugins 右侧新增只读 MCP 弹窗:展示 `mcp.json` 配置的服务,以及当前会话真正注册/激活的 MCP 工具;没有配置也没有工具时保持真实空态。
260
- - 对话侧栏原 Packages 入口改名为 Plugins,与 pi-web / Pi 用户面一致;内部仍是 package inventory。
261
- - 对话进行中底部上下文占用百分比保持常驻:token 用量事件不再冲掉上一帧的 contextUsage,并在回合中持续刷新。
262
- - 上一轮大量 bash 结束后再发新消息,旧工具条不再整批挂到新气泡下面:无主工具不再丢进最新一组,历史按完整回合裁切,空助手气泡若还挂着工具会留下来当锚点。
263
- - 侧栏文件树点击目录行直接插入 `@目录/` 引用(箭头单独负责展开/收起);输入框 @ 补全也列出目录,排在文件前面。
264
- - 对话进行中点「停止」立即安静下来(乐观停止,对齐 pi-web):不再等 POST /abort 往返;后端 abort 等待从 8s 降到 2.5s,未终结时由状态对账收敛。
265
- - 侧栏文件树实时刷新:agent 回合结束、浏览器标签页回到前台、手动点「刷新」时重拉根目录+全部已展开目录(此前手动刷新只拉根目录,子目录永远旧缓存)。
266
- - Skills / Packages / Models 面板不再把 Pi 的 warning / collision 原文堆在列表上方:改成标题条一颗摘要芯片(如「14 条提示」),点开按「需要处理 / 名称不规范 / 同名未生效」分组,文案用自然语言,路径只显示末两段;名称不规范的技能在列表旁标「提示」,详情里说明「现在这样也能用」。加载失败仍单独成组,可点「再读一次」。
267
- - Skills / Packages 双栏改为左右各自滚动;资源弹窗挂到 `document.body`,按顶部对话导航的实时高度在剩余视口居中,不再被 sticky 顶栏挡住上沿。
268
- - 标准、评审和监督型 DAG 现在会在当前运行中重试短暂的验证故障;写入节点只有在确认工作区完全未变更时才会重试,避免因网络波动重新执行整条任务。
269
- - 后端测试支持自定义目录、公共前置说明、查询场景分区和增量补缺模式;相关布局可通过 `task advance --backend-test` 纳入受管任务契约,不再需要手工修改 `task.json`。
270
-
271
- - 裸 `agent-worker console` 在 listen 前会按本机自然日询问一次 npm `latest` 升级;继承当前 npm registry,失败不阻断启动,Console URL 仍只写 stdout。
272
- - npm `next` 发布成功后会更新 `npm-next` 分支锚点;可用 `loop-agent inspect next` 查看已发布版本、源码提交、构建时间和本地尚未发布的提交。
273
- - Operator Chat 的文件预览可在新窗口中打开,并可切换排版预览与原始内容;弹窗被浏览器拦截时会保留当前抽屉并给出提示。
274
- - Pi SDK 的会话事件可透出模型明确返回的结束原因,便于诊断截断、停止和异常结束。
275
-
276
- - 初始化模型配置新增 Pi/OpenCode 脱敏目录:代码只暴露白名单模型元数据和凭据就绪状态,执行初始化的模型结合目标项目自主选择并直接写入 LOW/MED/HIGH;只有实质歧义才询问用户。
277
- - npm `next` 自动发布改为每累计 5 个提交触发一次,减少无意义构建;手动发布仍可随时执行。
278
- - `dag rerun-task` 会继承上一轮尚未解决的验证和评审反馈,避免新一轮忽略旧问题或误判为已经完成。
279
- - DAG 恢复入口会根据失败类型区分“从节点继续”和“完整重跑”,并避免把失败节点改写成成功状态。
280
- - Operator Chat 停止会话时会显示真实进度;用户可预先提交一条“停止后发送”的消息,刷新页面或重启 Console 也不会丢失。
281
- - Operator Chat 的命令说明和参数提示与实际能力保持一致,减少选错恢复入口或误用占位参数。
282
- - 测试套件按 CPU、内存、平台和当前 DAG 压力动态分配资源,并减少重复启动进程,完整验证耗时更稳定。
283
-
284
- - Operator Chat 发送前会在接近模型窗口时主动压缩,压缩失败仍发送当前输入,不会把消息丢掉。DAG 节点同步启用 overflow 识别与线路压缩,但不在 streaming 中主动 compact。
285
- - 网关「请求上下文过大」及常见包装/嵌套 JSON 由共享分类器识别;目标项目 `loop-agent init` 生成的 Pi overflow extension 与控制器使用同一套短语表。
286
- - `@agent-context/sift@0.0.1-alpha.6` 作为可选依赖接入 Console 与 DAG:默认开启,`HARNESS_CONSOLE_SIFT` / `HARNESS_DAG_SIFT` 设为 `0`、`false` 或 `off` 即可关闭。Anthropic 缺省 prompt cache 形态保持 no-op,避免破坏缓存。
287
- - 后端测试的计划与生成阶段只读取任务明确绑定的需求、环境报告和本轮产物,减少无关仓库内容干扰结果,并让后续步骤继续使用同一份已确认计划。
288
- - Operator Chat 的任务清单工具描述补齐多步骤与 DAG 使用纪律:开始前按具体步骤规划、保持进行中约束、完成后立即更新完整列表,并用面向用户的阶段呈现 DAG 进度,简单任务自动跳过。
289
- - 右侧文件工作台打开 `.html` 或 `.htm` 文件时默认直接预览:沙箱会完整加载页面及同项目的相对样式、图片和字体,同时阻止脚本及外部网络访问;大体积源码不再直接报错,而是展示前 512 KiB 并清晰提示内容已截断。
290
- - 排队消息改为由输入框上方的队列面板统一展示;正常排队、撤回和删除不再反复弹出提示,当前会话也不再显示重复的“待发送”,其他会话只保留低调的排队数量。
291
- - 正式发布会自动同步更新版本日志和文档站摘要;发布说明优先生成简洁自然的中文,生成服务不可用时也能安全完成发布。
292
- - 输入框整合模型与推理等级选择,并只展示有真实数据的轮次、耗时、速度和缓存统计。
293
- - 工作区、会话列表、文件标签和侧栏交互更加紧凑自然,折叠、切换和页面过渡更加流畅。
294
- - 左侧多个工作区可以独立展开;展开工作区不再切换当前作用域,跨工作区打开会话时也不会闪出错误的空列表。
295
- - 多个 Console 同时运行时会安全合并工作区增删,并把变更实时同步到已打开的页面,避免旧缓存覆盖新工作区。
296
- - 设置页改用自然中文展示当前工作区的模型状态,减少内部状态和重复信息。
297
- - DAG 检查器简化节点说明、执行记录和提示词重启面板,长内容更容易阅读和定位。
353
+ - DAG 检查器可以保存失败尝试的脱敏提示词候选,并从选定版本重新执行;被截断的候选只供预览,不能直接用于续跑。
354
+ - Operator Chat 可以调用扩展注册的 MCP 工具;侧栏会显示 `mcp.json` 中配置的服务和本会话实际启用的工具。
355
+ - 后端测试支持自定义目录、公共前置说明、查询场景分区和增量补缺,可通过 `task advance --backend-test` 写入任务契约。
356
+ - `agent-worker console` 每个自然日会询问一次是否升级到最新版;检查失败不会阻止 Console 启动。
357
+ - Pi SDK 会返回模型明确提供的结束原因,便于区分正常结束、截断、停止和异常。
298
358
 
299
- ### 修复
359
+ ### 改进
300
360
 
301
- - backend-test 用例覆盖分析的 payload 形状提取在无 `python` 可执行文件的环境(现代 macOS 只有 `python3`)静默降级为空结果,导致 payload 观测路径全空、`PAYLOAD_SHAPE_MISMATCH` 误报;解释器解析改为 POSIX 优先 `python3`、Windows 优先 `python`(与 scenario-param 语法校验一致),仅在解释器缺失时尝试下一候选,分析输入自身的失败不再重试。
302
- - Inspector「执行过程」时间轴按「执行分次」选择过滤:session-events 是跨 attempt 共享追加的单文件,此前所有次执行的事件重合显示、切换顶部分次不生效;现在按 `agent_start` 边界分段,选中第 N 次执行只显示该段并标注「已按第 N 次执行过滤 · 共 M 次执行」,单次执行与 pass 选择保持全量展示,检测不到边界时显式提示并回退全量。
303
- - 前端 plan/revision 的 `openspec-citations` fence 提取改为行锚定正则:直接闭合的空 fence(无候选行、紧跟关闭 fence)此前被判定为「不存在 citation 块」而进入格式重试循环,现在计为合法的唯一 citation 块;重复、损坏或非唯一的 fence 仍被拒绝。
304
- - `npm test` 前置段失败导致后续段(io-heavy / integration)被跳过时,`scripts/run-tests.mjs` 显式输出警告与补跑命令,不再静默跳过(此前失败汇总会被误读为全量覆盖)。
305
- - npm 包现在会包含 `inspect next` 运行时依赖的查询脚本,安装后的 CLI 不再因缺少包内文件而无法启动。
306
- - 初始化更新改为一次扫描与规划:固定投影按 recorded ownership 确定性增删改,多个语义合并按单文件写边界串行排队,全部完成后只做一次最终验证;已完成的 `--status` / `--report` 只读取哈希锚定证据,不再重复运行项目脚本。`harness.json` 按属性结构演进并保留项目值,仍存在于 Pi 的 LOW/MED/HIGH 保持不变,只重选失效档位;fresh init、update 与 doctor 会在 Pi 无可用模型时提前阻断。
307
- - CLI 新版本检查与 `init upgrade` 的版本门禁会从调用开始就使用 npm 当前配置:目标项目 `.npmrc`、用户级/全局 `npm config set registry`、环境变量与 scoped registry 均继续由 npm 按原生优先级解析;企业镜像失败时不会偷偷回退官方源,并以脱敏原因区分超时、npm 启动失败、查询失败和无效响应。
308
- - 同一浏览器、同一 hostname、不同端口的多个 Operator Console 不再争用认证 Cookie;不同项目和同一项目的多个 Console 可以并行对话,往返页面无需刷新。Console 重启后旧页面仍会被安全拒绝,刷新后恢复。
309
- - Markdown 表格只处理横向溢出,鼠标停在表格上时仍可正常上下滚动对话。
310
- - Windows 上执行后端测试场景参数的 Python 语法检查时,会跳过不可用的 Microsoft Store 占位程序,避免错误回滚合法改动。
311
- - 旧版前端 DAG 也能识别增量计划修订,不再因契约格式差异反复重试;无法合并的修订会提示重新生成 DAG。
312
-
313
- - 修复 backend-test 将 no-body Case 的 `Payload Required Paths: none` / `Payload Allowed Paths: none` 中空值标记误识别为 JSON 字段路径、继而把全部 pytest items 判为 payload `UNSAFE` 并排除的问题;独立 empty sentinel 现在归一化为空集合,真实 required path 冲突仍保持 fail-closed。
314
- - 修复 Console「更新并初始化」被观测顶栏挡住、看起来像从 DAG 详情消失的问题:入口改到操作 → 设置,观测与对话页不再挂全局悬浮按钮。
315
- - 修复从恢复打开全屏观测时,长 DAG run id 把「返回 恢复」顶进居中模式开关底下、按钮显示不全的问题;上下文 chip 改到顶栏下方独立一行,过长 id 省略、按钮不收缩。
316
- - 修复 Console 内嵌观测后样式泄漏到对话/操作、观测顶栏丢失新鲜度与 Pi 状态、从恢复打开观测看不到「返回 恢复」、以及检查器盖住一级导航的问题;对话里的观测链接改为壳内地址。
317
- - 修复 Console 内嵌观测丢失「提示词重启」入口、Remixicon 图标和产品深链的问题:托管观测从 `/inspect/` 响应解析 scoped token,不把该凭据写入 Console HTML。
318
- - 修复 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。
319
- - 修复 backend-test 的 Scenario Partition 计划表只提示 `each-value`/`omitted`、却由下游确定性门禁强制要求 `not-in-set` 的合同漂移;计划、Markdown Case 与 pytest 现在统一明确唯一补集槽位,避免 PI 因表格指令遗漏 `TP-<Partition ID>-NOT-IN-SET` 后触发 `MISSING_COMPLEMENT_SLOT`。
320
- - 修复文档审计扫描本地 `.scratch/` 临时证据与打包目录、导致仓库 preflight 和发布前验证被非治理文件阻断的问题。
321
- - 修复 backend-test 把 Markdown 明确声明的 enum-invalid、wrong-type、null、empty 和精确非法 custom literal 当作 payload enum 契约漂移、错误消耗唯一一次 pytest repair 的问题;豁免现在按 pytest parameter ID、目标字段和值逐 TP 绑定,positive/nominal drift 与 path 缺陷仍严格阻断。
322
- - 修复 backend-test 无法从同一生成模块的安全 payload helper 中绑定 field-target positional/keyword/default 参数,以及无法识别精确 `_without(payload, field)` 删除语义的问题;computed、动态、二层、跨模块和危险 helper 仍保持 `UNDETERMINED`。
323
- - 修复 backend-test 无法静态证明同一生成模块内安全 payload helper、导致 request-level nominal 场景长期停留在 `UNDETERMINED` 的问题;超长边界 observed 现在持久化为有界摘要并保留真实长度,空白修复建议也明确使用真实空格而非字面 escape 文本。
324
- - 修复 backend-test 把 Markdown 中 `\\u0020`/`\\x20` 空白表示与 pytest 真实空白字符串误判为 scenario-param 不一致的问题;readiness 的逐项排除现在携带有界的 TP、字段、expected/observed raw/normalized 和源码位置诊断,同时不对普通业务字符做 trim、大小写折叠或宽松解码。
325
- - 修复 Console 把 backend-test writer 的局部保护文件误判为整个 writeSet 越界的问题;任务级禁止路径仍保持硬阻断,合法 DAG 可继续取得 autonomous execution receipt。
326
- - 修复 backend-test 对 `resource_client.call(..., payload=...)` 一类本地 transport 的 payload AST 假阴性;readiness 新增固定分类/Case 排除汇总和 pytest 启动事实,payload repair finding 同时携带 expected/observed/missing path 清单。
327
- - 修复后端测试在 payload、fixture 与 Markdown→pytest 对应关系同时异常时只修复其中一类问题的问题;pytest 侧缺陷现在通过结构化 `repairFindings` 合并进入唯一一次有界 repair,Markdown Test Point 未分类或重复分类则在生成阶段定向重试并禁止下游猜修。
328
- - 修复重命名会话时输入框没有回显当前标题的问题。
329
- - 修复自动压缩提示长期停在输入框上方、恢复输出跑到压缩前面,以及回复文字在工具出现时突然跳位的问题;消息流会按顺序保留模型提供商的原始错误、压缩过程和恢复结果,刷新后也保持一致。
330
- - 工作区列表支持像 DSH Web 一样上下拖动调整顺序;新的顺序会自动保存,刷新页面或重新启动看板后仍然保持。
331
- - 修复多工作区下已有会话只显示在对话正文、却没有出现在左侧列表的问题;会话会稳定归属到创建它的工作区,旧会话也会自动恢复到列表中。
332
- - 会话列表改为独立的全局目录:启动时一次恢复历史归属,之后随会话变化实时更新;移除工作区不会删除或隐藏其中的会话,它们会保留在“未归类”中并可继续打开。
333
- - 修复停止回复后输入区恢复迟缓、排队消息偶发丢失,以及切换会话后旧状态残留的问题。
334
- - 修复宽表格、文件预览、滚动条和窄屏布局中的多处显示异常。
335
- - 修复部分 Windows 环境读取运行状态时的偶发失败,并提高前后端任务验证的可靠性。
336
- - 初始化选择模型时识别公司内部 `wizard-local` 的 AICoder 型号梯度(default/plus/pro/max),作为 LOW/MED/HIGH 参考但不机械分档。
337
- - 右侧文件工作台打开 HTML 默认沙箱预览(同项目相对资源可用、脚本与外部网络阻断),超大源码显示前 512 KiB 并明确提示截断。
338
- - 工作区列表支持拖动排序并自动保存;多个 Console 同时运行时安全合并工作区增删并实时同步。
339
- - 设置页用自然中文展示模型状态;DAG 检查器简化节点说明与提示词重启面板,长内容更易定位。
340
- - 输入框整合模型与推理等级选择,只展示有真实数据的轮次、耗时、速度与缓存统计。
341
- - 修复 Console「更新并初始化」被观测顶栏遮挡(入口改到操作 → 设置)、内嵌观测样式泄漏与「提示词重启」入口丢失、宽表格/窄屏多处显示异常、部分 Windows 偶发读取失败等。
361
+ - DAG 检查器会用自然语言说明节点用途,并按 Pi、shell 或内部处理分别展示执行记录和输出。
362
+ - `loop-agent inspect next` 会补充显示预发布版本、对应源码提交、构建时间和本地尚未发布的提交。
363
+ - 节点输出为完整 JSON 时会自动格式化;原始协议事件默认收起,需要时可以展开查看。
364
+ - 长前端需求只向相关节点提供必要片段,减少重复上下文;来源、风险和目标文件等关键约束不会被计划内容覆盖。
365
+ - frontend-test 会从项目模板复制标准场景,并支持自定义测试目录和文件布局,不再默认为单一冒烟用例。
366
+ - frontend-test 会区分端口未监听和服务返回错误,并给出对应处理建议;报告也能识别常见标题和有序列表写法。
367
+ - `dag rerun --from-node` 可以从失败节点继续运行尚未执行的安全下游,无需整图重跑。
368
+ - `dag rerun-task` 会继承上一轮未解决的验证和评审意见,避免重新执行时遗漏旧问题。
369
+ - 短暂验证故障会在当前 DAG 内重试;写入节点只在确认工作区未变化时重试。
370
+ - Pi 节点连续 15 分钟没有活动时会尝试中断并在原会话中继续;已开始写文件或恢复失败时仍按超时处理。
371
+ - Operator Chat 停止回复时会立即显示「正在停止」,并允许预先提交一条「停止后发送」的消息;刷新或重启后消息也不会丢失。
372
+ - Operator Chat 的恢复工具、参数和说明与实际命令保持一致,减少选错入口或提交无效参数;自定义系统提示词上限从 1900 字提高到 2500 字。
373
+ - 对话中的上下文占用会在整个回合中持续显示,模型和推理等级也可以直接在输入区选择。
374
+ - 排队消息统一显示在输入框上方,可撤回或删除,不再反复弹出提示。
375
+ - 文件树支持插入 `@目录/` 引用,并会在回合结束、页面重新激活或手动刷新时更新已展开目录。
376
+ - HTML 文件默认以沙箱方式预览同项目资源,并阻止脚本和外部网络;超过 512 KiB 的源码会显示截断提示。
377
+ - 多个 Console 可以安全同步工作区增删;同一浏览器中不同端口的 Console 也能分别保持登录状态。
378
+ - 初始化模型配置时只提供脱敏后的可用信息,并保留已有有效档位;只有确有歧义时才询问用户。
379
+ - 测试会根据 CPU、内存、平台和当前 DAG 压力分配资源,减少低性能机器上的重复进程和并发压力。
342
380
 
343
- ### 文档
381
+ ### 修复
344
382
 
345
- - 整理 `0.36.0` 以来的更新日志,改为面向用户描述结果,并补齐 `0.38.0`、`0.38.1` 的正式发布记录。
346
- - 新增检查以阻止纯英文条目、重复版本、版本倒序和非标准 `Unreleased` 标题。
383
+ - 上下文压缩失败时不会丢失原消息,压缩提示、提供商错误和恢复结果会按发生顺序展示。
384
+ - 上下文压缩可分别在 Console 和 DAG 中关闭;启用 Anthropic 默认提示缓存时会跳过主动压缩,DAG 也不会在流式输出中途压缩。
385
+ - 修复停止回复后输入区恢复迟缓、排队消息偶发丢失,以及快速停止时消息卡住的问题。
386
+ - 修复长工具链结束后旧工具卡片挂到新消息下方的问题,历史会话会按完整回合稳定展示。
387
+ - 修复多工作区中会话未出现在左侧列表的问题;移除工作区后,会话会保留在「未归类」中并可继续打开。
388
+ - 修复重命名会话时输入框未显示当前标题的问题。
389
+ - 修复 backend-test 对空请求体、空白字符串、负向非法取值、本地请求和安全辅助函数的多类误判;动态、跨模块或危险写法仍会被阻止。
390
+ - 修复 backend-test 场景分区、补集槽位和 pytest 用例之间不一致的问题,计划、Markdown 和实际执行会使用同一份覆盖要求。
391
+ - 修复仅提供 `python3` 的环境无法完成后端测试分析,以及 Windows 将 Microsoft Store 占位程序误当作可用 Python 的问题。
392
+ - 修复旧版前端 DAG 无法识别增量计划修订的问题;确实无法合并时会提示重新生成 DAG。
393
+ - 修复 Windows 读取运行中 DAG 状态时偶发失败的问题,并减少进程启动压力造成的验证误报。
394
+ - 修复多次执行的节点记录混在一起的问题,选择某次执行后只会显示该次内容。
395
+ - 修复 Console 内嵌观测的样式、顶栏和「提示词重启」入口异常;「更新并初始化」入口已移到「操作 → 设置」。
396
+ - 修复 npm 包缺少 `loop-agent inspect next` 依赖文件的问题,安装后的命令可以正常启动。
397
+ - `init upgrade` 会保留项目配置,并沿用项目、用户或全局 npm 镜像;`--status` 和 `--report` 直接复用已有证据,不会重复运行项目脚本。
398
+ - `npm test` 因前置阶段失败而跳过后续检查时,会明确提示缺失的验证和补跑命令。
399
+ - Markdown 表格只处理横向溢出,鼠标位于表格上方时仍可正常上下滚动对话。
347
400
 
348
401
  ## [0.39.3] - 2026-08-28
349
402
 
350
403
  ### 新增
351
404
 
352
- - 前端实现支持来源归属运行时注入,使用宽松校验,不符合格式也不会阻断现有流程,方便后续接入完整的来源追溯。
405
+ - 前端实现任务开始记录需求来源;来源格式暂不完整时不会阻断现有流程。
353
406
 
354
407
  ## [0.39.2] - 2026-08-28
355
408
 
356
- ### 重点更新
409
+ ### 改进
357
410
 
358
- - DAG 检查器与提示词重启面板重做:节点备注列改为节点用途简介不再复读节点 ID,默认隐藏协议事件、需要时可一键展开;提示词重启只读面板撑满剩余高度,内容在卡片内滚动,避免长提示词被压缩或被全局滚动条逼出视区。
411
+ - DAG 检查器会用节点用途代替重复的节点编号,原始协议事件默认收起;提示词重启面板也能在有限空间内完整滚动查看长内容。
359
412
 
360
413
  ### 修复
361
414
 
362
- - 为 `views/dag.js` 补充缺失类型声明,修复 next 发布通道的 typecheck 阻断。
363
- - 记录 release/0.39 上 observe 面板改动的回移植入 0.39.2,方便追溯修复来源。
415
+ - 修复预发布通道因类型检查失败而无法发布的问题。
364
416
 
365
417
  ## [0.39.1] - 2026-08-25
366
418
 
367
419
  ### 重点更新
368
420
 
369
- - 前端实现流程会逐项核对原始需求与验收标准,减少长需求被遗漏、误解或静默排除的情况。
370
- - Console 新增可选择稳定版或预发布版的更新入口,更新前会检查正在运行的任务,完成后自动恢复当前页面。
421
+ - 前端实现流程会逐项核对原始需求和验收标准,减少长需求被遗漏、误解或静默排除的情况。
422
+ - Console 新增更新入口,可选择稳定版或预发布版;更新前会检查运行中的任务,完成后自动恢复当前页面。
371
423
 
372
424
  ### 新增
373
425
 
374
426
  - DAG 检查器可以查看失败节点的提示词版本,并在确认后从选定内容重新执行。
375
- - 后端测试会核对本轮文件清单与实际引用关系,避免历史文件或错误依赖混入测试结果。
427
+ - 后端测试会核对本轮文件清单和实际引用,避免历史文件或错误依赖混入测试结果。
376
428
 
377
429
  ### 改进
378
430
 
379
- - 设置页移除重复的模型配置入口,模型管理继续集中在对话页。
380
- - 关键治理文档完成复核,当前能力、限制和操作方式保持一致。
431
+ - 设置页移除重复的模型配置入口,模型管理集中到对话页。
381
432
 
382
433
  ## [0.39.0] - 2026-08-23
383
434
 
384
435
  ### 重点更新
385
436
 
386
- - Operator Chat 支持通过方向键找回历史输入,并可在当前回复进行时预先排队下一条消息。
387
- - 任务向导新增实时进度、当前节点、运行时长和失败摘要,长时间任务更容易判断是否正常推进。
437
+ - Operator Chat 支持通过方向键找回历史输入,也可以在当前回复进行时预先排队下一条消息。
438
+ - 任务向导会实时显示当前节点、运行时长、整体进度和失败摘要,长任务是否仍在推进更加清楚。
388
439
 
389
440
  ### 新增
390
441
 
391
- - 前端测试支持自定义测试目录和文件布局,适配不同项目结构。
442
+ - 前端测试支持自定义测试目录和文件布局,可以适配不同项目结构。
392
443
 
393
444
  ### 改进
394
445
 
395
- - 运行结束后会自动降低刷新频率,并为失败状态提供更直接的处理建议。
396
- - npm 预发布包会记录准确版本,安装后显示的版本与实际发布制品保持一致。
446
+ - 任务结束后会自动降低刷新频率,失败时也会给出更直接的处理建议。
447
+ - npm 预发布包会记录准确版本,安装后显示的版本与实际制品保持一致。
397
448
 
398
449
  ## [0.38.4] - 2026-08-23
399
450
 
400
451
  ### 重点更新
401
452
 
402
- - 初始化与升级流程更好地支持企业 npm 镜像、已有模型配置和一次性安全更新。
403
- - Console 与 DAG 检查器补充了运行状态、失败节点和提示词重启等诊断能力。
453
+ - 初始化和升级现在兼容企业 npm 镜像,能保留已有模型配置,并支持一次性安全更新。
454
+ - Console 和 DAG 检查器可以更直观地查看运行状态、失败节点和提示词重启信息。
404
455
 
405
456
  ### 新增
406
457
 
407
- - 新增 `inspect next`,可以查看当前 npm 预发布版本对应的源码和本地尚未发布的变化。
408
- - 前端测试可以从项目治理目录和初始化模板读取标准场景,并提供更完整的执行报告。
458
+ - 新增 `inspect next`,用于对比当前 npm 预发布版本的源码与本地尚未发布的变化。
459
+ - 前端测试可以读取项目治理目录和初始化模板中的标准场景,并生成更完整的执行报告。
409
460
 
410
461
  ### 修复
411
462
 
412
- - 修复 npm 包缺少运行文件、macOS Python 命令差异、Windows 场景检查和部分滚动显示问题。
413
- - 修复前端计划引用、失败恢复和测试回执在复杂项目中的多处误判。
463
+ - 修复 npm 包缺少运行文件,以及 macOS、Windows 上部分命令和场景检查不兼容的问题。
464
+ - 修复复杂项目中前端计划引用、失败恢复和测试回执可能被误判的问题。
465
+ - 修复 Console 部分内容滚动显示异常的问题。
414
466
 
415
467
  ## [0.38.3] - 2026-08-22
416
468
 
417
469
  ### 重点更新
418
470
 
419
- - Operator Chat 的文件预览可以在新窗口打开,并能在排版预览与原始内容之间切换。
420
- - 长时间模型任务遇到输出截断或暂时停滞时,恢复过程更加可靠。
471
+ - Operator Chat 的文件预览可以在新窗口打开,也可以随时切换排版预览和原始内容。
472
+ - 长时间模型任务遇到输出截断或短暂停滞时,恢复成功率更高。
421
473
 
422
474
  ### 新增
423
475
 
424
- - 安装 loop-agent 时会默认包含 Pi 运行能力,减少额外配置步骤。
425
- - DAG 检查器可以查看不同执行器的运行过程和更清晰的节点输出。
476
+ - 安装 loop-agent 时默认包含 Pi 运行能力,减少额外配置。
477
+ - DAG 检查器可以区分不同执行器,并展示更清晰的运行过程和节点输出。
426
478
 
427
479
  ### 改进
428
480
 
429
- - 后端测试增强了自定义目录、场景分区和生成文件的校验。
430
- - 文件浏览、结束原因和前端计划恢复信息更容易查看和诊断。
481
+ - 后端测试更好地支持自定义目录、场景分区和生成文件校验。
482
+ - 文件浏览、任务结束原因和前端计划恢复信息更容易查看。
431
483
 
432
484
  ## [0.38.2] - 2026-08-20
433
485
 
434
486
  ### 重点更新
435
487
 
436
- - 后端测试支持自定义输出目录、公共前置说明、查询场景分区和增量补缺模式。
437
- - Operator Chat 的停止与后续发送更加可靠,停止过程中提交的下一条消息不会因刷新或重启丢失。
488
+ - 后端测试支持自定义输出目录、公共前置说明、查询场景分区和增量补缺。
489
+ - 在 Operator Chat 停止当前任务时发送的下一条消息,会在停止完成后继续处理,刷新或重启也不会丢失。
438
490
 
439
491
  ### 改进
440
492
 
441
- - DAG 重新执行时会继承上一轮尚未解决的验证和评审反馈,减少重复失败。
442
- - 恢复入口会根据失败原因选择从节点继续或完整重跑,并给出更明确的操作建议。
443
- - npm 预发布改为按提交数量节流,减少没有必要的重复发布。
493
+ - DAG 重新执行时会沿用上一轮未解决的验证和评审反馈,减少重复失败。
494
+ - 恢复入口会根据失败原因建议从节点继续或完整重跑,并说明下一步操作。
495
+ - npm 预发布会根据提交数量控制频率,减少内容没有变化时的重复发布。
444
496
 
445
497
  ## [0.38.1] - 2026-08-18
446
498
 
447
499
  ### 重点更新
448
500
 
449
- - 前端实现计划统一使用结构化契约,修订只提交必要变更;系统会核对 OpenSpec 引用和组件选型依据,减少格式漂移、遗漏规范和无效返工。
450
- - Operator Chat 增强了模型配置、MCP 工具、文件浏览和运行状态展示,常用操作更集中,长时间对话也更容易掌握上下文。
501
+ - 前端实现计划改用结构化契约,并支持只提交本次修订;项目规范引用、组件选择和验证要求会在执行前统一检查。
502
+ - Operator Chat 集中了模型配置、MCP 工具、文件浏览和运行状态,长时间对话更容易跟踪。
451
503
 
452
504
  ### 新增
453
505
 
454
- - Console「模型与认证」页支持查看和编辑 LOW、MED、HIGH 三档 Pi 模型;保存前会校验配置,保存后自动刷新模型状态和空闲会话。
455
- - Operator Chat 支持扩展提供的 MCP 工具;侧栏可查看已配置服务和当前会话实际可用的工具。
456
- - 文件预览改为侧边抽屉,可在排版预览和原始内容之间切换,不会打断当前对话。
457
- - 前端计划会记录实施步骤、样式策略、依赖选择、剩余风险和真实集成缺口,并在写入前检查组件选型依据。
506
+ - Console「模型与认证」页支持查看和编辑 LOW、MED、HIGH 三档 Pi 模型,保存前会校验配置,保存后会刷新模型状态和空闲会话。
507
+ - Operator Chat 支持扩展提供的 MCP 工具,侧栏会同时显示已配置服务和当前会话实际可用的工具。
508
+ - 文件预览改为侧边抽屉,可以切换排版预览和原始内容,不会打断当前对话。
509
+ - 前端计划会说明实施步骤、样式策略、依赖选择、剩余风险和真实集成缺口。
458
510
 
459
511
  ### 改进
460
512
 
461
- - 点击“停止”后对话会立即安静下来,并通过服务端状态对账确认最终结果,不再长时间停留在忙碌状态。
462
- - 对话底部持续显示上下文占用;历史工具调用按所属回合展示,不再错误挂到下一条消息下。
463
- - 文件树会在回合结束、页面回到前台或手动刷新时更新已展开目录,并支持直接引用整个目录。
464
- - Skills、Plugins 和 Models 的提示改为分类摘要,列表支持独立滚动,弹窗不会再被顶部导航遮挡。
465
- - Operator Chat 的恢复工具名称、参数和使用建议与实际能力保持一致,降低误选恢复方式的概率。
466
- - 前端结构化输出过长或格式不完整时会有针对性地重试,减少因输出截断导致的整轮失败。
513
+ - 点击“停止”后,对话会立即停止继续输出,并自动确认服务端的最终状态。
514
+ - 对话底部会持续显示上下文占用,历史工具调用也会归入正确的回合。
515
+ - 文件树会在回合结束、页面重新激活或手动刷新时更新已展开目录,并支持直接引用整个目录。
516
+ - Skills、Plugins 和 Models 改用分类摘要,长列表可以独立滚动,弹窗不会再被顶部导航遮挡。
517
+ - 恢复工具的名称、参数和使用建议与实际能力保持一致。
518
+ - 前端计划输出过长、格式不完整或数据不合规时,会说明原因并在限定次数内自动重试。
467
519
 
468
520
  ### 修复
469
521
 
470
- - 前端设计评审拓扑改串行:`frontend-design-review-pi` 依赖从 `frontend-plan-pi` 改为 `frontend-design-policy-shell`——确定性 policy 先物化 canonical 契约并判定(秒级,blocked 立即终止不浪费模型调用),模型 review 再基于物化契约评审(prompt 本就要求 canonical full-contract JSON 输入);避免 policy 失败时 review 白跑、以及 review 读到未物化的 plan 中间态。
471
- - `design-evidence-conflict` 不再由 policy 阻断:`designEvidence.conflicts` 是模型如实披露的设计偏差(如任务要求的测试形态与冻结约束冲突),是否可接受应交由 design-review 的 `approve_design`/`request_design_changes` 裁决(`checkDesignApproval` 单独强制);policy 一刀切阻断会让如实上报偏差的诚实 plan 永远无法通过、且模型无法"修复"它正确识别的冲突。
472
- - write guard 豁免 vite/vitest 运行时缓存:前端 writer 在执行验证(vitest)时写 `node_modules/.vite/vitest/results.json`(gitignored 工具缓存),不在 writeSet 内导致 write guard 误判越界(真实 DAG 冒烟暴露)。`isEphemeralToolCachePath` 增加 `node_modules/.vite/` 豁免;产品文件越界仍 fail-closed。
473
- - 前端 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 语义不变。
474
- - 前端 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)。
475
- - 前端 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 声明格式指令。
476
- - 前端 policy 前移的 canonical 状态归属检查修正:`checkUiStateAttribution` 不再无条件强制 loading/empty/error/disabled 四态全部存在——schema 与 prompt 明确允许纯逻辑修改 `uiStates: []`(不得 invent UI 状态),纯逻辑契约(无 uiStates 且无 interactions)豁免该检查,否则合法 plan 会在 policy 整链终止、且 plan 节点重试也无法修复(模型被禁止虚构状态);一旦契约声明任何 UI 可见工作(状态或交互),四态归属要求完整生效。
477
- - 前端契约 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`。
478
- - 前端 plan facts 质量问题消化在节点内有界重试:coerce strict 分支补全部分 designEvidence(record_design_deviation 只产 conflicts 时不再死于 Required);policy 中可归因到 plan facts 的三类检查(依赖授权 / 交互与 UI 状态归属)前移进 plan 节点验证,带诊断重试修复,design-policy shell 保留最终权威
479
- - `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 次上限防线不变。
480
- - 前端 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`。
481
- - Console 对话中的 Markdown 表格只约束横向滚动,不再截断纵向滚动链;鼠标或触控板停在表格上时仍可继续上下滚动对话。
482
- - scenario-param 确定性 rewrite 的 Python 语法校验:Windows 优先 `python`,并把 Microsoft Store `python3` 空壳(非 0 且无语法诊断)视为解释器不可用后回退,避免误回滚合法 rewrite。
483
- - `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
484
- - `frontend-implementation-contract.schema.json` 的 `uiComponentChoices` items 补 `if/then` 决策语义(`specified` ⇒ OpenSpec `specReference` 必填非 null;任务源要求新增的 `new` ⇒ PRD `specReference` 必填非 null);`frontend-plan-render.ts` 空 `section` 不再渲染尾随 `#`;ADR 0016 增补「门禁边界」小节
485
- - 前端 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 三处一致
486
-
487
- - 前端计划修订能正确识别增量补丁,不再因“提交完整契约”和“只提交变更”两套要求冲突而循环失败。
488
- - OpenSpec 引用必须来自真实读取记录;缺失、移动或未引用的规范会在写入前给出明确提示。
489
- - 初始化升级和并发写入不再把构建产物或临时文件误判为越界修改。
490
- - Console 的授权失效、模型配置错误和资源诊断会显示可操作的中文提示,不再直接暴露内部错误。
522
+ - 前端设计评审会先完成快速校验,再评审最终计划;无效计划会提前停止,评审也不会再读到中间版本。
523
+ - 已主动说明的设计偏差会交由设计评审判断,不再被前置检查直接拒绝。
524
+ - 前端任务不会再把工具缓存、构建产物或临时文件误判为越界修改;真正超出任务范围的产品文件仍会被拦截。
525
+ - 干净仓库和使用通配符声明可写范围的前端任务可以正常执行;无法确认文件范围时仍会停止并说明原因。
526
+ - 使用项目已有依赖或不新增依赖的计划不再被误报;只有实际涉及界面状态时,才要求说明相应状态和交互。
527
+ - 前端计划可以提交增量修订,并自动合并到最终契约;无法合并时会给出明确的重新生成建议。
528
+ - 项目规范引用必须来自真实读取记录,缺失、移动或未引用的规范会在写入前提示。
529
+ - 组件选择必须说明依据:沿用现有组件需引用项目规范,新增组件需引用需求。
530
+ - 验证命令是否成功以实际执行结果为准,设计评审中的预判只作为提示。
531
+ - Markdown 表格不会再截断对话的纵向滚动。
532
+ - Windows 上缺少可用的 `python3` 时,场景参数改写会自动尝试 `python`,避免合法修改被错误回滚。
533
+ - Console 会用可操作的中文说明授权失效、模型配置错误和资源问题,不再直接显示内部错误。
491
534
 
492
535
  ## [0.38.0] - 2026-08-17
493
536
 
494
537
  ### 重点更新
495
538
 
496
- - npm 发布改为 `next`、版本发布线和人工 `latest` 三个渠道,开发版本不再自动覆盖稳定版本。
539
+ - npm 发布分为 `next`、版本发布线和人工 `latest` 三个渠道,开发版本不再自动覆盖稳定版本。
497
540
 
498
541
  ### 新增
499
542
 
500
- - 主分支持续发布 npm `next`;发布分支维护对应版本线;`latest` 仅通过人工操作提升。
501
- - 新增双周发布列车,可从指定 `next` 的源码提交创建发布分支,并绑定最终 tarball 与源码提交。
543
+ - 主分支持续发布 npm `next`,发布分支维护对应版本线,`latest` 只通过人工操作提升。
544
+ - 新增双周发布列车,可以从指定 `next` 的源码提交创建发布分支,并确认最终安装包来自同一提交。
502
545
 
503
546
  ### 改进
504
547
 
505
- - 发布策略会同时校验分支、版本和目标渠道,不符合矩阵的发布会直接拒绝。
506
- - 发布中断后可从已有分支、版本或标签继续,恢复时会核对预期源码提交,避免发布错误制品。
548
+ - 发布前会同时校验分支、版本和目标渠道,不符合发布矩阵时会直接拒绝。
549
+ - 发布中断后可以从已有分支、版本或标签继续;恢复时会再次核对源码提交,避免发布错误制品。
507
550
 
508
551
  ## [0.37.1-beta.0] - 2026-08-16
509
552
 
510
553
  ### 重点更新
511
554
 
512
- - 后端测试流程完成一轮真实项目验证:覆盖 146 个测试点和 77 个场景组合,并执行 82 个真实 API 测试,需求、用例与执行结果能够完整对应。
555
+ - 后端测试可以更稳定地关联需求、测试点、生成用例和实际执行结果。
513
556
 
514
557
  ### 改进
515
558
 
516
- - 请求体分析可识别常见包装函数、数据构造器、补丁合并和参数工厂,减少把测试准备数据误判为接口请求的问题。
559
+ - 请求体分析可以识别常见包装函数、数据构造器、补丁合并和参数工厂,减少把准备数据误当成接口请求。
517
560
  - 场景参数校验增强了缺失值、空白、边界长度、非法枚举和辅助常量的识别,降低合法用例被误报的概率。
518
- - 生成的 Markdown 和 pytest 用例必须使用明确且唯一的测试点编号,并避免猜测接口未声明的 ID 类型或响应结构。
519
- - 修复流程会直接使用上游提供的测试文件路径,并要求产生真实改动,避免找错文件或“未修改却声称已修复”。
520
- - 请求与响应日志支持有界脱敏记录,清理阶段可处理常见网络异常,排查失败原因更加可靠。
521
- - 测试结果能够更稳定地区分控制器问题、生成用例问题和真实产品缺陷。
561
+ - 生成的 Markdown 和 pytest 用例必须使用明确且唯一的测试点编号,不会猜测接口未声明的 ID 类型或响应结构。
562
+ - 修复流程会使用上游提供的测试文件路径,并确认确实产生了修改,避免找错文件或空修复。
563
+ - 请求与响应日志支持有界脱敏记录,常见网络异常也能得到清理和说明。
564
+ - 测试结果可以更清楚地区分控制器问题、生成用例问题和真实产品缺陷。
522
565
 
523
566
  ## [0.37.0] - 2026-08-16
524
567
 
525
568
  ### 新增
526
569
 
527
570
  - Operator Chat 支持 Markdown 语法高亮、数学公式和 Mermaid 图表。
528
- - 新增 DAG 操作入口与产物栏,可从对话中查看运行、门禁和交付结果。
529
- - 对话中可查看上下文压缩进度、上下文占用和语义缓存状态。
530
- - 当前回合的思考、工具调用和过程事件会按实际发生顺序实时展示。
571
+ - 新增 DAG 操作入口和产物栏,可以从对话中查看运行、门禁和交付结果。
572
+ - 对话中可以查看上下文压缩进度、上下文占用和语义缓存状态。
573
+ - 当前回合的思考、工具调用和过程事件会按发生顺序实时展示。
531
574
 
532
575
  ### 改进
533
576
 
534
- - 重跑标题会显示运行轮次,运行中的会话和停止按钮具有明确的状态标记。
577
+ - 重跑任务会显示运行轮次,运行状态和停止按钮也有更明确的标记。
535
578
  - 错误提示改为自动消失的悬浮消息,不再挤压聊天区域。
536
579
 
537
580
  ### 修复
538
581
 
539
- - 长会话标题能够稳定显示完整悬浮提示,相关活动也能定位到对应 Operation。
540
- - 非规范的 `newTask` 编号会立即返回修正建议;PRD 标题和投影引用的识别更加宽容。
541
- - 中断能力通过 Worker 边界调用,减少运行时模块之间的耦合。
582
+ - 长会话标题可以稳定显示完整提示,相关活动也能定位到对应 Operation。
583
+ - 不规范的 `newTask` 编号会立即得到修正建议;更多常见的 PRD 标题和引用写法也能正常识别。
542
584
 
543
585
  ## [0.36.4-beta.0] - 2026-08-16
544
586
 
@@ -546,16 +588,16 @@
546
588
 
547
589
  ### 新增
548
590
 
549
- - 前端 DAG 会按模板、规则、主题和组件等用途整理项目规范,并把相关内容提供给契约、探索、计划和设计评审阶段。
591
+ - 前端 DAG 会按模板、规则、主题和组件等用途整理项目规范,并在契约、探索、计划和设计评审阶段提供相关内容。
550
592
 
551
593
  ### 修复
552
594
 
553
- - 有适用规范时,计划和评审必须真实读取并引用;缺失、移动或删除的规范会给出清晰诊断,而不再笼统提示“未读取”。
554
- - 规范发现不再静默截断前 40 个文件,同时会排除 loop-agent 自身的治理目录,减少漏读和误读。
595
+ - 有适用规范时,计划和评审必须真实读取并引用;规范缺失、移动或删除时会给出具体诊断。
596
+ - 项目规范不再只读取前 40 个文件,同时会排除 loop-agent 自身的治理目录,减少漏读和误读。
555
597
 
556
598
  ### 文档
557
599
 
558
- - 前端任务模板改为可执行的探索与失败处理说明,移除裸露的 `TODO` 和项目专属示例路径。
600
+ - 初始化生成的前端任务模板补充了可执行的探索和失败处理说明,不再包含待填写占位内容和项目专属示例路径。
559
601
 
560
602
  ## [0.36.3-beta.0] - 2026-08-16
561
603
 
@@ -563,30 +605,29 @@
563
605
 
564
606
  ### 新增
565
607
 
566
- - npm 发布分为 `next`、版本发布线和人工 `latest` 三个渠道,避免开发版本自动覆盖稳定版。
567
- - 新增双周发布列车,可从指定 `next` 的源码提交创建发布分支,并校验最终 tarball 与源码一致。
608
+ - npm 发布分为 `next`、版本发布线和人工 `latest` 三个渠道,避免开发版本自动覆盖稳定版本。
609
+ - 新增双周发布列车,可以从指定 `next` 的源码提交创建发布分支,并校验最终安装包与源码一致。
568
610
 
569
611
  ### 改进
570
612
 
571
- - 前端设计评审会同时考虑任务声明的 Mock 策略和验证命令,避免评审通过后才被写入门禁阻断。
572
- - 当任务提到 API 或 Mock、但契约缺少验证方式时,系统会在 DAG 生成阶段给出修复建议。
613
+ - 前端设计评审会同时考虑任务声明的 Mock 策略和验证命令,减少评审通过后才被执行门禁阻断的情况。
614
+ - 任务涉及 API 或 Mock、但契约缺少验证方式时,DAG 会在生成阶段给出修复建议。
573
615
 
574
616
  ## [0.36.2] - 2026-08-16
575
617
 
576
618
  ### 修复
577
619
 
578
- - 仓库治理检查不再把更新日志历史或 `.gitignore` 托管说明误认为非法任务池路径。
620
+ - 仓库治理检查不再把更新日志历史或 `.gitignore` 中的托管说明误认为非法任务池路径。
579
621
 
580
622
  ## [0.36.1] - 2026-08-16
581
623
 
582
624
  ### 新增
583
625
 
584
- - 支持协作式中断正在运行的 DAG:当前节点安全结束后停止后续调度,并提供后续恢复入口。
626
+ - 支持安全中断正在运行的 DAG:当前节点结束后停止后续调度,并保留恢复入口。
585
627
 
586
628
  ### 修复
587
629
 
588
- - 语义导入会在不同 Pi 模型档位之间重试,单次最长等待 300 秒,降低单一模型暂时不可用造成的阻塞。
589
- - 中断资格判断移到可观测层,避免破坏运行时模块边界。
630
+ - 语义导入会在不同 Pi 模型档位之间重试,单次最长等待 300 秒,减少单一模型暂时不可用造成的阻塞。
590
631
 
591
632
  ## [0.36.1-beta.0] - 2026-08-16
592
633
 
@@ -594,31 +635,31 @@
594
635
 
595
636
  ### 改进
596
637
 
597
- - 契约或计划输出过长时会自动重试为精简版本,只保留实施步骤、写入范围和验证命令等必要信息。
638
+ - 契约或计划输出过长时,会自动重试为精简版本,只保留实施步骤、写入范围和验证命令等必要信息。
598
639
 
599
640
  ## [0.36.0] - 2026-08-15
600
641
 
601
642
  ### 重点更新
602
643
 
603
- - Operator Chat 可以持续监督长时间运行的 DAG,并在失败后展示原因、恢复路径和可执行的后续动作。
604
- - 新增任务旅程卡,将任务创建、人工门禁、多次运行、失败和恢复记录集中展示。
644
+ - Operator Chat 可以持续监督长时间运行的 DAG,并在失败后展示原因、恢复路径和可执行的下一步。
645
+ - 新增任务旅程卡,集中展示任务创建、人工门禁、多次运行、失败和恢复记录。
605
646
 
606
647
  ### 新增
607
648
 
608
- - 会话删除改为列表内二次确认,减少误删并避免浏览器原生弹窗打断操作。
649
+ - 删除会话时会在列表内二次确认,减少误删,也不会再被浏览器原生弹窗打断。
609
650
  - 斜杠命令面板优化了卡片布局和键盘操作,在较小窗口中也能完整使用。
610
651
 
611
652
  ### 改进
612
653
 
613
- - 运行状态、恢复建议和关键操作统一使用自然中文,减少内部状态码直接暴露给用户。
614
- - 任务监督更能容忍短暂静默和状态延迟,降低正常运行被误判为中断的概率。
654
+ - 运行状态、恢复建议和关键操作统一使用自然中文,减少内部状态码直接暴露。
655
+ - 任务监督可以容忍短暂静默和状态延迟,降低正常运行被误判为中断的概率。
615
656
 
616
657
  ### 修复
617
658
 
618
- - 恢复流程可正确读取运行报告,不再因响应结构差异误判为无法恢复。
619
- - 变更范围以 Git 工作区的真实差异为准,不再根据模型回复推测是否修改过文件。
620
- - PRD 验收标题支持更多常见写法;目录文档更新时会检查索引是否同步。
621
- - Operator 自定义工具可正常进入 Pi SDK 会话,命令面板的高度和降级提示也更加稳定。
659
+ - 恢复流程可以正确读取运行报告,不再因响应格式差异误判为无法恢复。
660
+ - 变更范围以 Git 工作区的真实差异为准,不再根据模型回复推测。
661
+ - PRD 验收标题支持更多常见写法,目录文档更新时也会检查索引是否同步。
662
+ - Operator 自定义工具可以正常用于 Pi 会话,命令面板高度和降级提示也更加稳定。
622
663
 
623
664
  ## 历史版本
624
665