gsd-pi 2.82.0-dev.c22380fc3 → 2.82.0-dev.dfbc5f58f

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 (287) hide show
  1. package/README.md +4 -3
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/GSD-WORKFLOW.md +10 -1
  4. package/dist/resources/extensions/claude-code-cli/partial-builder.js +2 -1
  5. package/dist/resources/extensions/cmux/index.js +5 -0
  6. package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
  7. package/dist/resources/extensions/gsd/auto/loop.js +5 -5
  8. package/dist/resources/extensions/gsd/auto/orchestrator.js +11 -0
  9. package/dist/resources/extensions/gsd/auto/phases.js +8 -1
  10. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
  11. package/dist/resources/extensions/gsd/auto-dispatch.js +13 -6
  12. package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
  13. package/dist/resources/extensions/gsd/auto-post-unit.js +233 -127
  14. package/dist/resources/extensions/gsd/auto-prompts.js +2 -2
  15. package/dist/resources/extensions/gsd/auto-recovery.js +31 -1
  16. package/dist/resources/extensions/gsd/auto-start.js +85 -12
  17. package/dist/resources/extensions/gsd/auto-verification.js +28 -22
  18. package/dist/resources/extensions/gsd/auto-worktree.js +111 -1
  19. package/dist/resources/extensions/gsd/auto.js +30 -3
  20. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +4 -1
  21. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +9 -8
  22. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
  23. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +16 -2
  24. package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
  25. package/dist/resources/extensions/gsd/commands/catalog.js +4 -1
  26. package/dist/resources/extensions/gsd/commands/handlers/core.js +37 -0
  27. package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
  28. package/dist/resources/extensions/gsd/crash-recovery.js +31 -5
  29. package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
  30. package/dist/resources/extensions/gsd/dispatch-guard.js +2 -2
  31. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
  32. package/dist/resources/extensions/gsd/doctor.js +2 -28
  33. package/dist/resources/extensions/gsd/export-html.js +27 -425
  34. package/dist/resources/extensions/gsd/git-service.js +39 -1
  35. package/dist/resources/extensions/gsd/gsd-db.js +1 -0
  36. package/dist/resources/extensions/gsd/guided-flow.js +6 -0
  37. package/dist/resources/extensions/gsd/migrate/parsers.js +10 -0
  38. package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
  39. package/dist/resources/extensions/gsd/native-git-bridge.js +48 -12
  40. package/dist/resources/extensions/gsd/post-execution-checks.js +73 -2
  41. package/dist/resources/extensions/gsd/pre-execution-checks.js +28 -1
  42. package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
  43. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -3
  44. package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -1
  45. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
  46. package/dist/resources/extensions/gsd/status-guards.js +4 -0
  47. package/dist/resources/extensions/gsd/templates/plan.md +8 -5
  48. package/dist/resources/extensions/gsd/templates/task-plan.md +4 -2
  49. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
  50. package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
  51. package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
  52. package/dist/resources/extensions/gsd/tools/plan-slice.js +89 -14
  53. package/dist/resources/extensions/gsd/unit-context-manifest.js +32 -10
  54. package/dist/resources/extensions/gsd/validation.js +23 -1
  55. package/dist/resources/extensions/gsd/verification-gate.js +68 -7
  56. package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
  57. package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
  58. package/dist/resources/extensions/gsd/worktree-lifecycle.js +33 -8
  59. package/dist/resources/extensions/shared/html-shell.js +388 -0
  60. package/dist/resources/extensions/subagent/index.js +448 -78
  61. package/dist/resources/extensions/subagent/launch.js +77 -0
  62. package/dist/resources/extensions/subagent/run-store.js +148 -0
  63. package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
  64. package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
  65. package/dist/resources/extensions/visual-brief/index.js +5 -0
  66. package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
  67. package/dist/resources/extensions/visual-brief/prompts.js +140 -0
  68. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  69. package/dist/web/standalone/.next/BUILD_ID +1 -1
  70. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  71. package/dist/web/standalone/.next/build-manifest.json +3 -3
  72. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  73. package/dist/web/standalone/.next/react-loadable-manifest.json +3 -3
  74. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  75. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  76. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  77. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  84. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  85. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  87. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
  88. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
  89. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -5
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
  94. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/index.html +1 -1
  96. package/dist/web/standalone/.next/server/app/index.rsc +4 -7
  97. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -7
  99. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -5
  101. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
  102. package/dist/web/standalone/.next/server/app/page.js +2 -2
  103. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  104. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  106. package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
  107. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  111. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  112. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  113. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  114. package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
  115. package/dist/web/standalone/.next/static/chunks/{8359.e059d86b255fce1c.js → 8359.7eb3bb8f8ecf4c01.js} +2 -2
  116. package/dist/web/standalone/.next/static/chunks/app/layout-8c10ec293ae0f1d5.js +1 -0
  117. package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-9a4db269f9ed63ad.js} +1 -1
  118. package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
  119. package/package.json +4 -4
  120. package/packages/mcp-server/src/workflow-tools.test.ts +1 -1
  121. package/packages/native/tsconfig.json +2 -1
  122. package/packages/native/tsconfig.tsbuildinfo +1 -1
  123. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  124. package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
  125. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  126. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
  127. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
  128. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
  129. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
  130. package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
  131. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  132. package/packages/pi-ai/dist/providers/simple-options.js +5 -6
  133. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  134. package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
  135. package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
  136. package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
  137. package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
  138. package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
  139. package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
  140. package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
  141. package/packages/pi-ai/src/providers/simple-options.ts +5 -6
  142. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  143. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts +2 -0
  144. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
  145. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
  146. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
  147. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  148. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  149. package/packages/pi-coding-agent/src/core/agent-session-thinking-level.test.ts +79 -0
  150. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  151. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  152. package/src/resources/GSD-WORKFLOW.md +10 -1
  153. package/src/resources/extensions/claude-code-cli/partial-builder.ts +2 -1
  154. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
  155. package/src/resources/extensions/cmux/index.ts +6 -0
  156. package/src/resources/extensions/gsd/auto/contracts.ts +14 -6
  157. package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
  158. package/src/resources/extensions/gsd/auto/loop.ts +8 -5
  159. package/src/resources/extensions/gsd/auto/orchestrator.ts +11 -0
  160. package/src/resources/extensions/gsd/auto/phases.ts +7 -1
  161. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
  162. package/src/resources/extensions/gsd/auto-dispatch.ts +14 -6
  163. package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
  164. package/src/resources/extensions/gsd/auto-post-unit.ts +266 -139
  165. package/src/resources/extensions/gsd/auto-prompts.ts +2 -2
  166. package/src/resources/extensions/gsd/auto-recovery.ts +29 -0
  167. package/src/resources/extensions/gsd/auto-start.ts +92 -9
  168. package/src/resources/extensions/gsd/auto-verification.ts +36 -34
  169. package/src/resources/extensions/gsd/auto-worktree.ts +119 -1
  170. package/src/resources/extensions/gsd/auto.ts +32 -3
  171. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +6 -1
  172. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +9 -8
  173. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
  174. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +19 -3
  175. package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
  176. package/src/resources/extensions/gsd/commands/catalog.ts +4 -1
  177. package/src/resources/extensions/gsd/commands/handlers/core.ts +40 -0
  178. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  179. package/src/resources/extensions/gsd/crash-recovery.ts +30 -4
  180. package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
  181. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -2
  182. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
  183. package/src/resources/extensions/gsd/doctor.ts +2 -27
  184. package/src/resources/extensions/gsd/export-html.ts +27 -427
  185. package/src/resources/extensions/gsd/git-service.ts +45 -1
  186. package/src/resources/extensions/gsd/gsd-db.ts +3 -0
  187. package/src/resources/extensions/gsd/guided-flow.ts +6 -0
  188. package/src/resources/extensions/gsd/migrate/parsers.ts +11 -0
  189. package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
  190. package/src/resources/extensions/gsd/native-git-bridge.ts +54 -12
  191. package/src/resources/extensions/gsd/post-execution-checks.ts +87 -2
  192. package/src/resources/extensions/gsd/pre-execution-checks.ts +32 -1
  193. package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
  194. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -3
  195. package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -1
  196. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
  197. package/src/resources/extensions/gsd/status-guards.ts +5 -0
  198. package/src/resources/extensions/gsd/templates/plan.md +8 -5
  199. package/src/resources/extensions/gsd/templates/task-plan.md +4 -2
  200. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
  201. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +54 -0
  202. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +80 -1
  203. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +6 -6
  204. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +12 -1
  205. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +15 -1
  206. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
  207. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
  208. package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
  209. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
  210. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
  211. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
  212. package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
  213. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +43 -2
  214. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +59 -2
  215. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +39 -0
  216. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +27 -0
  217. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +38 -0
  218. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
  219. package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
  220. package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
  221. package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
  222. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
  223. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
  224. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +103 -1
  225. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
  226. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
  227. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +63 -2
  228. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
  229. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
  230. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
  231. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +225 -1
  232. package/src/resources/extensions/gsd/tests/plan-task.test.ts +17 -0
  233. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  234. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +86 -0
  235. package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
  236. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +53 -0
  237. package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
  238. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +46 -2
  239. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +10 -0
  240. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +31 -1
  241. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
  242. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
  243. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +86 -7
  244. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +110 -1
  245. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
  246. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +1 -1
  247. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
  248. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
  249. package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
  250. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
  251. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +54 -0
  252. package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
  253. package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
  254. package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
  255. package/src/resources/extensions/gsd/tools/plan-slice.ts +98 -12
  256. package/src/resources/extensions/gsd/types.ts +1 -1
  257. package/src/resources/extensions/gsd/unit-context-manifest.ts +47 -11
  258. package/src/resources/extensions/gsd/validation.ts +23 -1
  259. package/src/resources/extensions/gsd/verification-gate.ts +78 -6
  260. package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
  261. package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
  262. package/src/resources/extensions/gsd/worktree-lifecycle.ts +41 -8
  263. package/src/resources/extensions/shared/html-shell.ts +412 -0
  264. package/src/resources/extensions/subagent/index.ts +567 -103
  265. package/src/resources/extensions/subagent/launch.ts +131 -0
  266. package/src/resources/extensions/subagent/run-store.ts +218 -0
  267. package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
  268. package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
  269. package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
  270. package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
  271. package/src/resources/extensions/visual-brief/index.ts +8 -0
  272. package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
  273. package/src/resources/extensions/visual-brief/prompts.ts +183 -0
  274. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
  275. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  276. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  277. package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +0 -1
  278. package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
  279. package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
  280. package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  281. package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  282. package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  283. package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  284. package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  285. package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  286. /package/dist/web/standalone/.next/static/{Wop3A7KRGyR06H3rla_1- → q0WYuDVbHeFFYbdd-fei2}/_buildManifest.js +0 -0
  287. /package/dist/web/standalone/.next/static/{Wop3A7KRGyR06H3rla_1- → q0WYuDVbHeFFYbdd-fei2}/_ssgManifest.js +0 -0
@@ -448,6 +448,13 @@ What differed from the plan and why (or "None").
448
448
 
449
449
  The one-liner must be substantive: "JWT auth with refresh rotation using jose" not "Authentication implemented."
450
450
 
451
+ When `key_files` or `key_decisions` are empty, render them as empty YAML lists:
452
+
453
+ ```yaml
454
+ key_files: []
455
+ key_decisions: []
456
+ ```
457
+
451
458
  **Slice summary:** Written when all tasks in a slice complete. Compresses all task summaries. Includes `drill_down_paths` to each task summary. During slice completion, review task summaries for `key_decisions` and ensure any significant ones are captured in `.gsd/DECISIONS.md`.
452
459
 
453
460
  **Milestone summary:** Updated each time a slice completes. Compresses all slice summaries. This is what gets injected into later slice planning instead of loading many individual summaries.
@@ -560,7 +567,7 @@ In all modes, slices and tasks commit sequentially on the active branch; there a
560
567
 
561
568
  1. **Milestone starts** → capture the current integration branch.
562
569
  2. **Optional isolation** → create `milestone/M001` only when `git.isolation` is `worktree` or `branch`.
563
- 3. **Per-task commits** — atomic, descriptive, bisectable.
570
+ 3. **Per-task commits** — atomic, descriptive, bisectable, and published only after execute-task verification passes.
564
571
  4. **Slice completes** → write slice summary, UAT script, roadmap checkbox, and milestone summary.
565
572
  5. **Milestone completes** → if isolated, squash-merge the milestone branch back to the captured integration branch and clean up the worktree/branch.
566
573
 
@@ -574,6 +581,8 @@ fix: handle empty state rebuild
574
581
 
575
582
  In `none` mode these commits land directly on the current branch. In isolated modes they land on `milestone/<MID>` and are squashed back at milestone completion.
576
583
 
584
+ Execute-task closeout is fail-closed: the system writes verification evidence first, defers the task commit or snapshot until verification passes, and pauses instead of publishing changes when verification fails or cannot complete.
585
+
577
586
  ### Commit Conventions
578
587
 
579
588
  | When | Format | Example |
@@ -134,10 +134,11 @@ export function mapUsage(sdkUsage: NonNullableUsage, totalCostUsd: number): Usag
134
134
  output: sdkUsage.output_tokens,
135
135
  cacheRead: sdkUsage.cache_read_input_tokens,
136
136
  cacheWrite: sdkUsage.cache_creation_input_tokens,
137
+ // Claude Agent SDK result usage is cumulative across its internal loop;
138
+ // repeated cache reads do not represent additional live context.
137
139
  totalTokens:
138
140
  sdkUsage.input_tokens +
139
141
  sdkUsage.output_tokens +
140
- sdkUsage.cache_read_input_tokens +
141
142
  sdkUsage.cache_creation_input_tokens,
142
143
  cost: {
143
144
  input: 0,
@@ -1,7 +1,24 @@
1
1
  import { describe, test } from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { mapContentBlock, parseMcpToolName, PartialMessageBuilder } from "../partial-builder.ts";
4
- import type { BetaContentBlock, BetaRawMessageStreamEvent } from "../sdk-types.ts";
3
+ import { mapContentBlock, mapUsage, parseMcpToolName, PartialMessageBuilder } from "../partial-builder.ts";
4
+ import type { BetaContentBlock, BetaRawMessageStreamEvent, NonNullableUsage } from "../sdk-types.ts";
5
+
6
+ describe("mapUsage", () => {
7
+ test("excludes cumulative cache reads from context-sized totalTokens (#5243)", () => {
8
+ const usage: NonNullableUsage = {
9
+ input_tokens: 150_000,
10
+ output_tokens: 2_000,
11
+ cache_read_input_tokens: 900_000,
12
+ cache_creation_input_tokens: 3_000,
13
+ };
14
+
15
+ const mapped = mapUsage(usage, 1.23);
16
+
17
+ assert.equal(mapped.cacheRead, 900_000);
18
+ assert.equal(mapped.totalTokens, 155_000);
19
+ assert.equal(mapped.cost.total, 1.23);
20
+ });
21
+ });
5
22
 
6
23
  describe("PartialMessageBuilder — malformed tool arguments (#2574)", () => {
7
24
  /**
@@ -374,6 +374,12 @@ export class CmuxClient {
374
374
  const stdout = await this.runAsync(["send-surface", "--surface", surfaceId, payload]);
375
375
  return stdout !== null;
376
376
  }
377
+
378
+ // Send Ctrl-C (ETX) to a surface to interrupt the running command.
379
+ async sendInterrupt(surfaceId: string): Promise<boolean> {
380
+ const stdout = await this.runAsync(["send-surface", "--surface", surfaceId, "\x03"]);
381
+ return stdout !== null;
382
+ }
377
383
  }
378
384
 
379
385
  export function syncCmuxSidebar(preferences: CmuxPreferences | undefined, state: CmuxState): void {
@@ -47,12 +47,20 @@ export interface DispatchAdapter {
47
47
  sessionProvider?: string;
48
48
  /** Model registry for executor-model lookups inside the budget engine. */
49
49
  modelRegistry?: MinimalModelRegistry;
50
- }): Promise<{
51
- unitType: string;
52
- unitId: string;
53
- reason: string;
54
- preconditions: string[];
55
- } | null>;
50
+ }): Promise<
51
+ | {
52
+ kind: "blocked";
53
+ reason: string;
54
+ action: "pause" | "stop";
55
+ }
56
+ | {
57
+ unitType: string;
58
+ unitId: string;
59
+ reason: string;
60
+ preconditions: string[];
61
+ }
62
+ | null
63
+ >;
56
64
  }
57
65
 
58
66
  export interface RecoveryAdapter {
@@ -7,9 +7,14 @@
7
7
  */
8
8
 
9
9
  /**
10
- * Error codes indicating infrastructure failures that cannot be recovered by
11
- * retrying. Each retry re-dispatches the unit at full LLM cost, so we bail
12
- * immediately rather than burning budget on guaranteed failures.
10
+ * Error codes indicating infrastructure-level failures from the OS,
11
+ * filesystem, or network. This set includes permanent resource failures
12
+ * (ENOSPC, ENOMEM, EROFS), transient resource exhaustion (EAGAIN, ENOBUFS),
13
+ * and network/offline errors (ECONNREFUSED, ENOTFOUND, ENETUNREACH).
14
+ *
15
+ * Transient git failures are retried separately through
16
+ * TRANSIENT_GIT_RETRY_CODES in native-git-bridge.ts before escalating to the
17
+ * auto-loop.
13
18
  */
14
19
  export const INFRA_ERROR_CODES: ReadonlySet<string> = new Set([
15
20
  "ENOSPC", // disk full
@@ -19,6 +24,7 @@ export const INFRA_ERROR_CODES: ReadonlySet<string> = new Set([
19
24
  "EMFILE", // too many open files (process)
20
25
  "ENFILE", // too many open files (system)
21
26
  "EAGAIN", // resource temporarily unavailable (resource exhaustion)
27
+ "ENOBUFS", // no buffer space available (transient pipe exhaustion)
22
28
  "ECONNREFUSED", // connection refused (offline / local server down)
23
29
  "ENOTFOUND", // DNS lookup failed (offline / no network)
24
30
  "ENETUNREACH", // network unreachable (offline / no route)
@@ -78,7 +78,10 @@ import { createWorkflowTurnReporter } from "./workflow-turn-reporter.js";
78
78
  import { validateWorkflowSessionLock } from "./workflow-session-lock.js";
79
79
  import { dequeueSidecarItem } from "./workflow-sidecar-queue.js";
80
80
  import { maintainWorkerHeartbeat } from "./workflow-worker-heartbeat.js";
81
- import { measureMemoryPressure } from "./workflow-memory-pressure.js";
81
+ import {
82
+ measureMemoryPressure,
83
+ shouldCheckMemoryPressure,
84
+ } from "./workflow-memory-pressure.js";
82
85
  import { buildSidecarIterationData } from "./workflow-sidecar-iteration.js";
83
86
  import {
84
87
  createExecutionGraphUnitDispatchDeps,
@@ -203,9 +206,9 @@ function logCustomVerifyRetrySaveFailure(err: unknown): void {
203
206
  }
204
207
 
205
208
  // ── Memory pressure monitoring (#3331) ──────────────────────────────────
206
- // Check heap usage every N iterations and trigger graceful shutdown before
207
- // the OS OOM killer sends SIGKILL. The threshold is 90% of the V8 heap
208
- // limit (--max-old-space-size or default ~1.5-4GB depending on platform).
209
+ // Check heap usage on session startup, then every N iterations, and trigger
210
+ // graceful shutdown before the OS OOM killer sends SIGKILL. The threshold is
211
+ // 90% of the V8 heap limit (--max-old-space-size or default ~1.5-4GB depending on platform).
209
212
  const MEMORY_CHECK_INTERVAL = 5; // check every 5 iterations
210
213
  const MAX_CUSTOM_ENGINE_VERIFY_RETRIES = 3;
211
214
 
@@ -372,7 +375,7 @@ export async function autoLoop(
372
375
 
373
376
  // ── Memory pressure check (#3331) ──
374
377
  // Graceful shutdown before OOM killer sends SIGKILL.
375
- if (iteration % MEMORY_CHECK_INTERVAL === 0) {
378
+ if (shouldCheckMemoryPressure(iteration, MEMORY_CHECK_INTERVAL)) {
376
379
  const mem = measureMemoryPressure();
377
380
  debugLog("autoLoop", { phase: "memory-check", ...mem });
378
381
  const memoryDecision = decideMemoryPressure({ ...mem, iteration });
@@ -128,6 +128,17 @@ export class AutoOrchestrator implements AutoOrchestrationModule {
128
128
  await this.deps.health.postAdvanceRecord(stopped);
129
129
  return stopped;
130
130
  }
131
+ if (!("unitType" in decision)) {
132
+ const blocked: AutoAdvanceResult = {
133
+ kind: "blocked",
134
+ reason: decision.reason,
135
+ action: decision.action,
136
+ stateSnapshot: reconciliation.stateSnapshot,
137
+ };
138
+ await this.deps.runtime.journalTransition({ name: "advance-blocked", reason: blocked.reason });
139
+ await this.deps.health.postAdvanceRecord(blocked);
140
+ return blocked;
141
+ }
131
142
 
132
143
  const nextKey = `${decision.unitType}:${decision.unitId}`;
133
144
 
@@ -1327,9 +1327,15 @@ export async function runDispatch(
1327
1327
  }
1328
1328
 
1329
1329
  const guardBasePath = _resolveDispatchGuardBasePath(s);
1330
+ let mainBranch = "main";
1331
+ try {
1332
+ mainBranch = deps.getMainBranch(guardBasePath);
1333
+ } catch (err) {
1334
+ debugLog("autoLoop", { phase: "getMainBranch-failed", error: String(err) });
1335
+ }
1330
1336
  const priorSliceBlocker = deps.getPriorSliceCompletionBlocker(
1331
1337
  guardBasePath,
1332
- deps.getMainBranch(guardBasePath),
1338
+ mainBranch,
1333
1339
  unitType,
1334
1340
  unitId,
1335
1341
  );
@@ -19,6 +19,19 @@ export interface MeasureMemoryPressureDeps {
19
19
  heapLimitBytes: () => number;
20
20
  }
21
21
 
22
+ /**
23
+ * Returns true on auto-mode startup, then every configured interval.
24
+ *
25
+ * Iteration 1 is checked explicitly so early session memory pressure cannot
26
+ * bypass the periodic interval guard.
27
+ */
28
+ export function shouldCheckMemoryPressure(iteration: number, interval: number): boolean {
29
+ if (!Number.isInteger(interval) || interval <= 0) {
30
+ throw new Error("Memory pressure check interval must be a positive integer");
31
+ }
32
+ return iteration === 1 || iteration % interval === 0;
33
+ }
34
+
22
35
  function defaultHeapLimitBytes(): number {
23
36
  const v8 = require("node:v8") as {
24
37
  getHeapStatistics?: () => { heap_size_limit?: number };
@@ -239,6 +239,12 @@ function missingSliceStop(mid: string, phase: string): DispatchAction {
239
239
  };
240
240
  }
241
241
 
242
+ function isRegistryMilestoneComplete(state: GSDState, mid: string): boolean {
243
+ return state.registry.some((milestone) =>
244
+ milestone.id === mid && milestone.status === "complete"
245
+ );
246
+ }
247
+
242
248
  /**
243
249
  * Check for milestone slices missing SUMMARY files.
244
250
  * Returns array of missing slice IDs, or empty array if all present or DB unavailable.
@@ -395,6 +401,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
395
401
  match: async ({ state, mid, midTitle, basePath, prefs, structuredQuestionsAvailable }) => {
396
402
  if (!EXECUTION_ENTRY_PHASES.has(state.phase)) return null;
397
403
  if (!MILESTONE_ID_RE.test(mid)) return null;
404
+ if (isRegistryMilestoneComplete(state, mid)) return null;
398
405
  // Align with the plan-v2 gate's lookup semantics: whitespace-only counts
399
406
  // as missing, and an auto worktree may fall back to GSD_PROJECT_ROOT.
400
407
  if (hasFinalizedMilestoneContext(basePath, mid)) return null;
@@ -709,6 +716,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
709
716
  name: "pre-planning (no context) → discuss-milestone",
710
717
  match: async ({ state, mid, midTitle, basePath, prefs, structuredQuestionsAvailable }) => {
711
718
  if (state.phase !== "pre-planning") return null;
719
+ if (isRegistryMilestoneComplete(state, mid)) return null;
712
720
  const contextFile = resolveMilestoneFile(basePath, mid, "CONTEXT");
713
721
  const hasContext = !!(contextFile && (await loadFile(contextFile)));
714
722
  if (hasContext) return null; // fall through to next rule
@@ -1322,19 +1330,19 @@ export const DISPATCH_RULES: DispatchRule[] = [
1322
1330
  }
1323
1331
  }
1324
1332
 
1325
- // Safety guard (#2675): block completion when VALIDATION verdict is
1326
- // needs-remediation. The state machine treats needs-remediation as
1327
- // terminal (to prevent validate-milestone loops per #832), but
1328
- // completing-milestone should NOT proceed — remediation work is needed.
1333
+ // Safety guard (#2675, #5747): block completion when VALIDATION
1334
+ // verdict is non-passing. The state machine treats these verdicts as
1335
+ // terminal, but completing-milestone should NOT proceed — remediation
1336
+ // or human attention is needed.
1329
1337
  const validationFile = resolveMilestoneFile(basePath, mid, "VALIDATION");
1330
1338
  if (validationFile) {
1331
1339
  const validationContent = await loadFile(validationFile);
1332
1340
  if (validationContent) {
1333
1341
  const verdict = extractVerdict(validationContent);
1334
- if (verdict === "needs-remediation") {
1342
+ if (verdict === "needs-remediation" || verdict === "needs-attention") {
1335
1343
  return {
1336
1344
  action: "stop",
1337
- reason: `Cannot complete milestone ${mid}: VALIDATION verdict is "needs-remediation". Address the remediation findings and re-run validation, or update the verdict manually.`,
1345
+ reason: `Cannot complete milestone ${mid}: VALIDATION verdict is "${verdict}". Address the validation findings and re-run validation, or update the verdict manually.`,
1338
1346
  level: "warning",
1339
1347
  };
1340
1348
  }
@@ -615,10 +615,11 @@ export async function selectAndApplyModel(
615
615
  * Handles formats: "provider/model", "bare-id", "org/model-name" (OpenRouter).
616
616
  */
617
617
  export function resolveModelId<T extends { id: string; provider: string }>(
618
- modelId: string,
618
+ modelId: string | undefined,
619
619
  availableModels: T[],
620
620
  currentProvider: string | undefined,
621
621
  ): T | undefined {
622
+ if (!modelId) return undefined;
622
623
  const slashIdx = modelId.indexOf("/");
623
624
 
624
625
  if (slashIdx !== -1) {