@opengsd/gsd-pi 1.3.0-dev.65546769 → 1.3.0-dev.965d1788

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 (411) hide show
  1. package/README.md +1 -1
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +11 -2
  4. package/dist/resources/extensions/google-cli/stream-adapter.js +82 -15
  5. package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
  6. package/dist/resources/extensions/gsd/auto/orchestrator.js +12 -3
  7. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  8. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
  9. package/dist/resources/extensions/gsd/auto-artifact-paths.js +28 -1
  10. package/dist/resources/extensions/gsd/auto-dispatch.js +20 -19
  11. package/dist/resources/extensions/gsd/auto-post-unit.js +1 -1
  12. package/dist/resources/extensions/gsd/auto-prompts.js +26 -11
  13. package/dist/resources/extensions/gsd/auto-recovery.js +6 -507
  14. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -5
  15. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
  16. package/dist/resources/extensions/gsd/auto-verification.js +5 -2
  17. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +103 -13
  18. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +38 -0
  19. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +6 -1
  20. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -0
  21. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +16 -19
  22. package/dist/resources/extensions/gsd/bootstrap/system-context.js +46 -19
  23. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +68 -10
  24. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +1 -1
  25. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +3 -1
  26. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  27. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +16 -10
  28. package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
  29. package/dist/resources/extensions/gsd/dashboard-overlay.js +32 -3
  30. package/dist/resources/extensions/gsd/db/queries.js +60 -0
  31. package/dist/resources/extensions/gsd/db-workspace.js +55 -3
  32. package/dist/resources/extensions/gsd/doctor-providers.js +92 -8
  33. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +3 -0
  34. package/dist/resources/extensions/gsd/exec-sandbox.js +45 -9
  35. package/dist/resources/extensions/gsd/flat-phase-migration.js +45 -0
  36. package/dist/resources/extensions/gsd/forensics.js +2 -32
  37. package/dist/resources/extensions/gsd/git-service.js +5 -4
  38. package/dist/resources/extensions/gsd/gitignore.js +3 -0
  39. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  40. package/dist/resources/extensions/gsd/health-widget.js +55 -29
  41. package/dist/resources/extensions/gsd/json-persistence.js +20 -0
  42. package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
  43. package/dist/resources/extensions/gsd/layout-policy.js +3 -1
  44. package/dist/resources/extensions/gsd/markdown-renderer.js +8 -9
  45. package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
  46. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +44 -21
  47. package/dist/resources/extensions/gsd/metrics.js +4 -4
  48. package/dist/resources/extensions/gsd/migration-auto-check.js +22 -0
  49. package/dist/resources/extensions/gsd/milestone-ids.js +32 -2
  50. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  51. package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
  52. package/dist/resources/extensions/gsd/prompts/code-review.md +6 -4
  53. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  54. package/dist/resources/extensions/gsd/quick.js +45 -2
  55. package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
  56. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  57. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -1
  58. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  59. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  60. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  61. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  62. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  63. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +45 -2
  64. package/dist/resources/extensions/gsd/state-reconciliation/index.js +48 -23
  65. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +32 -28
  66. package/dist/resources/extensions/gsd/state.js +12 -611
  67. package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
  68. package/dist/resources/extensions/gsd/tools/complete-slice.js +2 -2
  69. package/dist/resources/extensions/gsd/tools/complete-task.js +43 -14
  70. package/dist/resources/extensions/gsd/tools/exec-tool.js +7 -2
  71. package/dist/resources/extensions/gsd/undo.js +43 -6
  72. package/dist/resources/extensions/gsd/unit-context-composer.js +23 -7
  73. package/dist/resources/extensions/gsd/unit-registry.js +32 -4
  74. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +33 -3
  75. package/dist/resources/extensions/gsd/validation-block-guard.js +9 -4
  76. package/dist/resources/extensions/gsd/verification-gate.js +7 -0
  77. package/dist/resources/extensions/gsd/workflow-manifest.js +4 -1
  78. package/dist/resources/extensions/gsd/workflow-projections.js +19 -14
  79. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  80. package/dist/resources/extensions/gsd/worktree-manager.js +44 -2
  81. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  82. package/dist/web/standalone/.next/BUILD_ID +1 -1
  83. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  84. package/dist/web/standalone/.next/build-manifest.json +3 -3
  85. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  86. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  87. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  89. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  98. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/index.html +1 -1
  107. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  108. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  109. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  110. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  115. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  118. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  119. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  120. package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
  121. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  122. package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
  123. package/dist/web/standalone/.next/static/chunks/{4283.8e446784528ed9dc.js → 4283.d0d9e0a955e441cb.js} +1 -1
  124. package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
  125. package/dist/web/standalone/.next/static/chunks/{8785.481aa5869991b760.js → 8785.e29b3134cab1d153.js} +1 -1
  126. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  127. package/dist/web/standalone/.next/static/chunks/app/{page-6644fc6ee8ca1247.js → page-72a856634ad14c10.js} +1 -1
  128. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  129. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  130. package/package.json +1 -1
  131. package/packages/cloud-mcp-gateway/package.json +2 -2
  132. package/packages/contracts/dist/workflow.d.ts +1 -0
  133. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  134. package/packages/contracts/dist/workflow.js +2 -0
  135. package/packages/contracts/dist/workflow.js.map +1 -1
  136. package/packages/contracts/package.json +1 -1
  137. package/packages/daemon/package.json +4 -4
  138. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  139. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  140. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  141. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  142. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  143. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  144. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  145. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  146. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  147. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  148. package/packages/gsd-agent-core/dist/index.js +2 -0
  149. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  150. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  151. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  152. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  153. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  154. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  155. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  156. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  157. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  158. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  159. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  160. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  161. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  162. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  163. package/packages/gsd-agent-core/package.json +5 -5
  164. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  165. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  166. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
  167. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  168. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  169. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  170. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  171. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  172. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
  173. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  174. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -829
  175. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  176. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  177. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  178. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  179. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  180. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  181. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  182. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  183. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  184. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  185. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  186. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
  187. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  188. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  189. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  190. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  191. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  192. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
  193. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  194. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  195. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  196. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  197. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  198. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  199. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  200. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
  201. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  202. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
  203. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  204. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  205. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  206. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  207. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  208. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  209. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  210. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  211. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  212. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  213. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
  214. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  215. package/packages/gsd-agent-modes/package.json +7 -7
  216. package/packages/mcp-server/README.md +1 -1
  217. package/packages/mcp-server/dist/server.d.ts +1 -1
  218. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  219. package/packages/mcp-server/dist/server.js +3 -3
  220. package/packages/mcp-server/dist/server.js.map +1 -1
  221. package/packages/mcp-server/dist/workflow-tools.d.ts +13 -1
  222. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  223. package/packages/mcp-server/dist/workflow-tools.js +34 -20
  224. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  225. package/packages/mcp-server/package.json +4 -4
  226. package/packages/native/package.json +1 -1
  227. package/packages/pi-agent-core/package.json +1 -1
  228. package/packages/pi-ai/package.json +1 -1
  229. package/packages/pi-coding-agent/README.md +3 -2
  230. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  231. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  232. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  233. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  234. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  235. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  236. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  237. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  238. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  239. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  240. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  241. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  242. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
  243. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  244. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  245. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  246. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  247. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
  249. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  251. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  253. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  255. package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
  256. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  257. package/packages/pi-coding-agent/package.json +7 -7
  258. package/packages/pi-tui/package.json +2 -2
  259. package/packages/rpc-client/package.json +2 -2
  260. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  261. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  262. package/pkg/dist/theme/theme-schema.js +1 -1
  263. package/pkg/dist/theme/theme-schema.js.map +1 -1
  264. package/pkg/dist/theme/theme.d.ts.map +1 -1
  265. package/pkg/dist/theme/theme.js +11 -7
  266. package/pkg/dist/theme/theme.js.map +1 -1
  267. package/pkg/package.json +1 -1
  268. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +20 -2
  269. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +80 -0
  270. package/src/resources/extensions/google-cli/stream-adapter.ts +106 -19
  271. package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
  272. package/src/resources/extensions/gsd/auto/orchestrator.ts +25 -11
  273. package/src/resources/extensions/gsd/auto/session.ts +6 -0
  274. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
  275. package/src/resources/extensions/gsd/auto-artifact-paths.ts +47 -1
  276. package/src/resources/extensions/gsd/auto-dispatch.ts +21 -23
  277. package/src/resources/extensions/gsd/auto-post-unit.ts +1 -1
  278. package/src/resources/extensions/gsd/auto-prompts.ts +38 -12
  279. package/src/resources/extensions/gsd/auto-recovery.ts +10 -508
  280. package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -5
  281. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
  282. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  283. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +125 -12
  284. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +43 -0
  285. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +6 -1
  286. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -0
  287. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +20 -19
  288. package/src/resources/extensions/gsd/bootstrap/system-context.ts +52 -18
  289. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +74 -10
  290. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +1 -1
  291. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +2 -1
  292. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  293. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +14 -9
  294. package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
  295. package/src/resources/extensions/gsd/dashboard-overlay.ts +32 -3
  296. package/src/resources/extensions/gsd/db/queries.ts +79 -0
  297. package/src/resources/extensions/gsd/db-workspace.ts +61 -3
  298. package/src/resources/extensions/gsd/doctor-providers.ts +103 -9
  299. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +3 -0
  300. package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
  301. package/src/resources/extensions/gsd/flat-phase-migration.ts +44 -0
  302. package/src/resources/extensions/gsd/forensics.ts +2 -33
  303. package/src/resources/extensions/gsd/git-service.ts +6 -5
  304. package/src/resources/extensions/gsd/gitignore.ts +3 -0
  305. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  306. package/src/resources/extensions/gsd/health-widget.ts +69 -32
  307. package/src/resources/extensions/gsd/json-persistence.ts +20 -0
  308. package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
  309. package/src/resources/extensions/gsd/layout-policy.ts +2 -1
  310. package/src/resources/extensions/gsd/markdown-renderer.ts +8 -11
  311. package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
  312. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +51 -19
  313. package/src/resources/extensions/gsd/metrics.ts +4 -4
  314. package/src/resources/extensions/gsd/migration-auto-check.ts +23 -0
  315. package/src/resources/extensions/gsd/milestone-ids.ts +31 -2
  316. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  317. package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
  318. package/src/resources/extensions/gsd/prompts/code-review.md +6 -4
  319. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  320. package/src/resources/extensions/gsd/quick.ts +43 -2
  321. package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
  322. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  323. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -1
  324. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  325. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  326. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  327. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  328. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  329. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +81 -7
  330. package/src/resources/extensions/gsd/state-reconciliation/index.ts +50 -24
  331. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +43 -28
  332. package/src/resources/extensions/gsd/state.ts +32 -732
  333. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
  334. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +98 -1
  335. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +111 -1
  336. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  337. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +1 -0
  338. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  339. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
  340. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +69 -0
  341. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +11 -0
  342. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  343. package/src/resources/extensions/gsd/tests/complete-task.test.ts +75 -0
  344. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +55 -2
  345. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
  346. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  347. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  348. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +107 -0
  349. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +38 -0
  350. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +45 -1
  351. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
  352. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +37 -2
  353. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  354. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
  355. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  356. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  357. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +130 -3
  358. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  359. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  360. package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
  361. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
  362. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +14 -0
  363. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  364. package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
  365. package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
  366. package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
  367. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
  368. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +43 -1
  369. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
  370. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +26 -0
  371. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +2 -1
  372. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  373. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +10 -0
  374. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
  375. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  376. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +195 -1
  377. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  378. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +87 -0
  379. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +7 -0
  380. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +56 -0
  381. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +191 -0
  382. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +151 -0
  383. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +26 -0
  384. package/src/resources/extensions/gsd/tests/undo.test.ts +74 -0
  385. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +193 -14
  386. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +25 -0
  387. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +79 -0
  388. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
  389. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +66 -0
  390. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +54 -0
  391. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +151 -2
  392. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +39 -0
  393. package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
  394. package/src/resources/extensions/gsd/tools/complete-slice.ts +2 -2
  395. package/src/resources/extensions/gsd/tools/complete-task.ts +53 -15
  396. package/src/resources/extensions/gsd/tools/exec-tool.ts +7 -3
  397. package/src/resources/extensions/gsd/undo.ts +47 -6
  398. package/src/resources/extensions/gsd/unit-context-composer.ts +33 -7
  399. package/src/resources/extensions/gsd/unit-registry.ts +32 -4
  400. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +41 -5
  401. package/src/resources/extensions/gsd/validation-block-guard.ts +13 -7
  402. package/src/resources/extensions/gsd/verification-gate.ts +8 -0
  403. package/src/resources/extensions/gsd/workflow-manifest.ts +4 -1
  404. package/src/resources/extensions/gsd/workflow-projections.ts +20 -14
  405. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  406. package/src/resources/extensions/gsd/worktree-manager.ts +41 -1
  407. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
  408. package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +0 -10
  409. package/dist/web/standalone/.next/static/chunks/webpack-f46ea08200a0227e.js +0 -1
  410. /package/dist/web/standalone/.next/static/{BTKtGFF1Y-hvVJEGhBRo9 → -ji77QJck2IKIwrGza1Bs}/_buildManifest.js +0 -0
  411. /package/dist/web/standalone/.next/static/{BTKtGFF1Y-hvVJEGhBRo9 → -ji77QJck2IKIwrGza1Bs}/_ssgManifest.js +0 -0
@@ -45,7 +45,7 @@ If slice research is inlined, trust its architectural findings, but verify every
45
45
  6. Include Threat Surface (Q3), Requirement Impact (Q4), proof level, observability, integration closure, Failure Modes (Q5), Load Profile (Q6), and Negative Tests (Q7) only where applicable.
46
46
  7. Right-size tasks. Simple slices can be one task; split only when context, ownership, or verification boundaries justify it.
47
47
  8. Task `verify` commands must be safe, simple commands. Do not use shell pipes, redirects, semicolons, backticks, command substitution, output trimming, or grep regex alternation with `|`. If multiple checks are needed, create a small test file and run it with `node --test` or a package test script, or use separate simple commands joined only with `&&`. For absence checks, verify a pattern does not exist with `! grep -q 'pattern' file` or `! rg -q 'pattern' file`; do not use `grep -c` or `rg -c` to assert zero matches because count commands exit 1 when they find zero matches, and the verification gate treats that as failure.
48
- 9. Each task needs the exact `gsd_plan_slice.tasks[]` shape: `taskId`, `title`, `description`, `estimate`, `files`, `verify`, `inputs`, `expectedOutput`, and optional `observabilityImpact`. `description` should contain the Why / Do / Done-when narrative. `files`, `inputs`, and `expectedOutput` must be JSON arrays of strings, even when there is only one path (for example, `"inputs": ["src/index.ts"]`, never `"inputs": "src/index.ts"`). Use paths relative to `{{workingDirectory}}`; do not put absolute paths to the original checkout or any directory outside `{{workingDirectory}}` in `files`, `inputs`, `expectedOutput`, or verification commands. **`expectedOutput` must only list files the task actually creates or overwrites on disk.** Do NOT include files the task merely reads, verifies, tests, or describes — those belong in `inputs`, `verify`, `description`, or slice success criteria. If a task is a pure verification or test task that produces no new files, `expectedOutput` must be `[]`; if it writes a test-result log or assertion output file, list only that concrete file path. A file that does not yet exist on disk and is needed as an `input` must be produced by an earlier task's `expectedOutput` — if no prior task creates it, add a task before this one that does. Never list GSD planning artifacts — anything under `.gsd/`, `.planning/`, or `.audits/`, or artifact names like `M001-CONTEXT.md` / `S01-PLAN.md` — in `inputs`, `files`, or `expectedOutput`: their content is preloaded as context, and they are written by workflow tools, not by tasks.
48
+ 9. Each task needs the exact `gsd_plan_slice.tasks[]` shape: `taskId`, `title`, `description`, `estimate`, `files`, `verify`, `inputs`, `expectedOutput`, and optional `observabilityImpact`. `description` should contain the Why / Do / Done-when narrative. Any npm package name in a task description's install/add instructions (`npm install`, `yarn add`, `pnpm add`) or in `require('...')` or `import ... from '...'` code examples is subject to pre-execution registry validation; reference only packages that exist on the public npm registry, and remove or correct any package name that is not real. `files`, `inputs`, and `expectedOutput` must be JSON arrays of strings, even when there is only one path (for example, `"inputs": ["src/index.ts"]`, never `"inputs": "src/index.ts"`). Use paths relative to `{{workingDirectory}}`; do not put absolute paths to the original checkout or any directory outside `{{workingDirectory}}` in `files`, `inputs`, `expectedOutput`, or verification commands. **`expectedOutput` must only list files the task actually creates or overwrites on disk.** Do NOT include files the task merely reads, verifies, tests, or describes — those belong in `inputs`, `verify`, `description`, or slice success criteria. If a task is a pure verification or test task that produces no new files, `expectedOutput` must be `[]`; if it writes a test-result log or assertion output file, list only that concrete file path. A file that does not yet exist on disk and is needed as an `input` must be produced by an earlier task's `expectedOutput` — if no prior task creates it, add a task before this one that does. Never list GSD planning artifacts — anything under `.gsd/`, `.planning/`, or `.audits/`, or artifact names like `M001-CONTEXT.md` / `S01-PLAN.md` — in `inputs`, `files`, or `expectedOutput`: their content is preloaded as context, and they are written by workflow tools, not by tasks.
49
49
  10. Persist with `gsd_plan_slice` using `milestoneId`, `sliceId`, `goal`, optional `successCriteria`/`proofLevel`/`integrationClosure`/`observabilityImpact`, and `tasks`. `gsd_plan_slice` handles task persistence transactionally and renders `{{outputPath}}` plus task plans; do not call `gsd_plan_task`. The DB-backed tool is the canonical write path. Do **not** rely on direct `PLAN.md` writes as the source of truth.
50
50
  11. Self-audit before finishing: goal/demo closure, requirement coverage, deliverable coverage audit (cross-check every file listed in CONTEXT.md `## Scope` / `### In Scope` against task `files` or `expectedOutput`), locked decisions, concrete paths, dependency order, wiring, scope size, proof truthfulness, feature completeness, and quality gates. Quality gates: non-trivial slices/tasks include specific Q3-Q7 coverage where applicable.
51
51
  12. If planning creates structural decisions, call `gsd_decision_save` for each; the tool persists the decision and regenerates `.gsd/DECISIONS.md`.
@@ -10,8 +10,8 @@
10
10
  */
11
11
 
12
12
  import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
13
- import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
14
- import { isAbsolute, join, relative } from "node:path";
13
+ import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
14
+ import { isAbsolute, join, relative, resolve } from "node:path";
15
15
  import { QUICK_BRANCH_RE } from "./branch-patterns.js";
16
16
  import { loadPrompt } from "./prompt-loader.js";
17
17
  import { gsdRoot } from "./paths.js";
@@ -31,6 +31,7 @@ interface QuickReturnState {
31
31
  }
32
32
 
33
33
  let pendingQuickReturn: QuickReturnState | null = null;
34
+ const pendingQuickReturnMisses = new Map<string, string>();
34
35
 
35
36
  // ─── Quick Task Helpers ───────────────────────────────────────────────────────
36
37
 
@@ -189,12 +190,35 @@ export function buildQuickCommitInstruction(basePath: string, root: string): str
189
190
  ].join("\n");
190
191
  }
191
192
 
193
+ function readHeadBranchName(basePath: string): string | null {
194
+ try {
195
+ const gitPath = join(basePath, ".git");
196
+ if (!existsSync(gitPath)) return null;
197
+
198
+ let headPath: string;
199
+ if (lstatSync(gitPath).isDirectory()) {
200
+ headPath = join(gitPath, "HEAD");
201
+ } else {
202
+ const gitFile = readFileSync(gitPath, "utf-8").trim();
203
+ if (!gitFile.startsWith("gitdir: ")) return null;
204
+ headPath = join(resolve(basePath, gitFile.slice("gitdir: ".length)), "HEAD");
205
+ }
206
+
207
+ const head = readFileSync(headPath, "utf-8").trim();
208
+ if (!head.startsWith("ref: refs/heads/")) return null;
209
+ return head.slice("ref: refs/heads/".length);
210
+ } catch {
211
+ return null;
212
+ }
213
+ }
214
+
192
215
  function quickReturnStatePath(basePath: string): string {
193
216
  return join(gsdRoot(basePath), "runtime", "quick-return.json");
194
217
  }
195
218
 
196
219
  function persistPendingReturn(state: QuickReturnState): void {
197
220
  pendingQuickReturn = state;
221
+ pendingQuickReturnMisses.delete(state.basePath);
198
222
  mkdirSync(join(gsdRoot(state.basePath), "runtime"), { recursive: true });
199
223
  writeFileSync(quickReturnStatePath(state.basePath), JSON.stringify(state) + "\n", "utf-8");
200
224
  }
@@ -203,6 +227,13 @@ function readPendingReturn(basePath: string): QuickReturnState | null {
203
227
  if (pendingQuickReturn && pendingQuickReturn.basePath === basePath) {
204
228
  return pendingQuickReturn;
205
229
  }
230
+ if (pendingQuickReturnMisses.has(basePath)) {
231
+ const statePath = quickReturnStatePath(basePath);
232
+ if (!existsSync(statePath) && readHeadBranchName(basePath) === pendingQuickReturnMisses.get(basePath)) {
233
+ return null;
234
+ }
235
+ pendingQuickReturnMisses.delete(basePath);
236
+ }
206
237
 
207
238
  try {
208
239
  const raw = readFileSync(quickReturnStatePath(basePath), "utf-8");
@@ -216,6 +247,7 @@ function readPendingReturn(basePath: string): QuickReturnState | null {
216
247
  && typeof parsed.description === "string"
217
248
  ) {
218
249
  pendingQuickReturn = parsed as QuickReturnState;
250
+ pendingQuickReturnMisses.delete(basePath);
219
251
  return pendingQuickReturn;
220
252
  }
221
253
  } catch {
@@ -225,9 +257,14 @@ function readPendingReturn(basePath: string): QuickReturnState | null {
225
257
  const inferred = inferQuickReturnFromBranch(basePath);
226
258
  if (inferred) {
227
259
  pendingQuickReturn = inferred;
260
+ pendingQuickReturnMisses.delete(basePath);
228
261
  return inferred;
229
262
  }
230
263
 
264
+ const branchAtMiss = readHeadBranchName(basePath);
265
+ if (branchAtMiss) {
266
+ pendingQuickReturnMisses.set(basePath, branchAtMiss);
267
+ }
231
268
  return null;
232
269
  }
233
270
 
@@ -235,6 +272,10 @@ function clearPendingReturn(basePath: string): void {
235
272
  if (pendingQuickReturn?.basePath === basePath) {
236
273
  pendingQuickReturn = null;
237
274
  }
275
+ const branchAtMiss = readHeadBranchName(basePath);
276
+ if (branchAtMiss) {
277
+ pendingQuickReturnMisses.set(basePath, branchAtMiss);
278
+ }
238
279
  rmSync(quickReturnStatePath(basePath), { force: true });
239
280
  }
240
281
 
@@ -76,8 +76,14 @@ export function validateFileChanges(
76
76
  const actualFiles = getChangedFilesFromLastCommit(basePath);
77
77
  if (!actualFiles) return null;
78
78
 
79
- // Filter out .gsd/ internal files — only validate project source files
80
- const projectFiles = actualFiles.filter(f => !f.startsWith(".gsd/") && !f.startsWith(".gsd\\"));
79
+ // Filter out GSD-internal paths — only validate project source files.
80
+ const projectFiles = actualFiles.filter(
81
+ (f) =>
82
+ !f.startsWith(".gsd/") &&
83
+ !f.startsWith(".gsd\\") &&
84
+ !f.startsWith(".gsd-backups/") &&
85
+ !f.startsWith(".gsd-backups\\"),
86
+ );
81
87
 
82
88
  // Normalize expected paths (strip leading ./ or /)
83
89
  const normalizedExpected = new Set(
@@ -223,11 +223,21 @@ export function extractTrace(entries: unknown[]): ExecutionTrace {
223
223
 
224
224
  // Flush any pending tool calls that never got results (crash mid-tool)
225
225
  for (const [, pending] of pendingTools) {
226
+ const missingResultError = `Tool call ${pending.name} started but no toolResult was recorded`;
226
227
  toolCalls.push({
227
228
  name: pending.name,
228
229
  input: redactInput(pending.name, pending.input),
229
- isError: false,
230
+ result: "missing tool result (stream/tool-call abort before execution)",
231
+ isError: true,
230
232
  });
233
+ errors.push(missingResultError);
234
+
235
+ // Mark the matching commandsRun entry as failed so it is consistent with
236
+ // the isError: true on the tool call above (bash/bg_shell only).
237
+ if (pending.name === "bash" || pending.name === "bg_shell") {
238
+ const lastCmd = findLast(commandsRun, c => c.command === String(pending.input.command));
239
+ if (lastCmd) lastCmd.failed = true;
240
+ }
231
241
  }
232
242
 
233
243
  return {
@@ -66,7 +66,7 @@ These commands dispatch native GSD prompts adapted to the milestone, slice, and
66
66
  | `progress` | Summarize recent work; can route `--next` or `--do "..."` |
67
67
  | `health` | Check `.gsd/` integrity (`--repair`, `--context`) |
68
68
  | `surface` | Manage surfaced skills and extensions |
69
- | `code-review` | Review changed source for bugs, security, and quality |
69
+ | `code-review` | Review changed source diff-first for bugs, security, and quality |
70
70
  | `review` | Peer-review recent work across reviewer perspectives |
71
71
  | `audit-milestone` | Verify a milestone met its definition of done |
72
72
  | `audit-uat` | Audit outstanding UAT/verification items |
@@ -0,0 +1,46 @@
1
+ // Project/App: gsd-pi
2
+ // File Purpose: deriveState memoization cache and telemetry.
3
+
4
+ import type { GSDState } from '../../types.js';
5
+
6
+ interface StateCache {
7
+ basePath: string;
8
+ result: GSDState;
9
+ timestamp: number;
10
+ }
11
+
12
+ const CACHE_TTL_MS = 100;
13
+ let _stateCache: StateCache | null = null;
14
+
15
+ let _telemetry = { dbDeriveCount: 0 };
16
+
17
+ export function getDeriveTelemetry() {
18
+ return { ..._telemetry };
19
+ }
20
+
21
+ export function resetDeriveTelemetry() {
22
+ _telemetry = { dbDeriveCount: 0 };
23
+ }
24
+
25
+ export function incrementDbDeriveCount(): void {
26
+ _telemetry.dbDeriveCount++;
27
+ }
28
+
29
+ export function invalidateStateCache(): void {
30
+ _stateCache = null;
31
+ }
32
+
33
+ export function readCachedDeriveState(cacheKey: string): GSDState | null {
34
+ if (
35
+ _stateCache &&
36
+ _stateCache.basePath === cacheKey &&
37
+ Date.now() - _stateCache.timestamp < CACHE_TTL_MS
38
+ ) {
39
+ return _stateCache.result;
40
+ }
41
+ return null;
42
+ }
43
+
44
+ export function writeCachedDeriveState(cacheKey: string, result: GSDState): void {
45
+ _stateCache = { basePath: cacheKey, result, timestamp: Date.now() };
46
+ }
@@ -0,0 +1,45 @@
1
+ // Project/App: gsd-pi
2
+ // File Purpose: Workflow DB open helpers for state derivation.
3
+
4
+ import type { GSDState } from '../../types.js';
5
+ import { getAllMilestones, isDbAvailable, setMilestoneQueueOrder } from '../../gsd-db.js';
6
+ import { openExistingWorkflowDatabase } from '../../db-workspace.js';
7
+ import { loadQueueOrder, sortByQueueOrder } from '../../queue-order.js';
8
+
9
+ export function syncQueueOrderProjectionToDb(basePath: string): void {
10
+ const queueOrder = loadQueueOrder(basePath);
11
+ if (!queueOrder) return;
12
+
13
+ const currentIds = getAllMilestones().map((m) => m.id);
14
+ const desiredIds = sortByQueueOrder(currentIds, queueOrder);
15
+ if (currentIds.length === desiredIds.length && currentIds.every((id, i) => id === desiredIds[i])) return;
16
+
17
+ setMilestoneQueueOrder(desiredIds);
18
+ }
19
+
20
+ export function ensureExistingWorkflowDbOpen(basePath: string): boolean {
21
+ const opened = isDbAvailable() || openExistingWorkflowDatabase(basePath).ok;
22
+ if (opened) syncQueueOrderProjectionToDb(basePath);
23
+ return opened;
24
+ }
25
+
26
+ export function buildDbUnavailableState(): GSDState {
27
+ return {
28
+ activeMilestone: null,
29
+ activeSlice: null,
30
+ activeTask: null,
31
+ phase: "pre-planning",
32
+ recentDecisions: [],
33
+ blockers: ["DB unavailable — runtime markdown state derivation is disabled"],
34
+ nextAction:
35
+ "Open or create the canonical GSD database before deriving workflow state. If this project only has markdown state, run /gsd migrate explicitly.",
36
+ registry: [],
37
+ requirements: { active: 0, validated: 0, deferred: 0, outOfScope: 0, blocked: 0, total: 0 },
38
+ progress: { milestones: { done: 0, total: 0 } },
39
+ };
40
+ }
41
+
42
+ export function getRequestedMilestoneLock(): string | undefined {
43
+ const lock = process.env.GSD_MILESTONE_LOCK?.trim();
44
+ return lock || undefined;
45
+ }