@opengsd/gsd-pi 1.2.0-dev.844675c9 → 1.2.0-dev.84c56d87

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 (657) hide show
  1. package/dist/cli-style.d.ts +17 -0
  2. package/dist/cli-style.js +28 -0
  3. package/dist/cli-web-branch.d.ts +2 -0
  4. package/dist/cli-web-branch.js +9 -2
  5. package/dist/cli.js +1 -1
  6. package/dist/headless-events.d.ts +4 -2
  7. package/dist/headless-events.js +7 -29
  8. package/dist/help-text.js +5 -0
  9. package/dist/models-resolver.d.ts +3 -13
  10. package/dist/models-resolver.js +3 -22
  11. package/dist/resource-loader.js +2 -14
  12. package/dist/resources/.managed-resources-content-hash +1 -1
  13. package/dist/resources/extensions/ask-user-questions.js +78 -23
  14. package/dist/resources/extensions/bg-shell/utilities.js +5 -2
  15. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
  16. package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
  17. package/dist/resources/extensions/browser-tools/index.js +69 -12
  18. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  19. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +122 -234
  20. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
  21. package/dist/resources/extensions/github-sync/templates.js +3 -3
  22. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  23. package/dist/resources/extensions/gsd/auto/loop.js +74 -56
  24. package/dist/resources/extensions/gsd/auto/orchestrator.js +142 -15
  25. package/dist/resources/extensions/gsd/auto/phases.js +34 -4
  26. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  27. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  28. package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
  29. package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
  30. package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
  31. package/dist/resources/extensions/gsd/auto-post-unit.js +23 -11
  32. package/dist/resources/extensions/gsd/auto-prompts.js +84 -8
  33. package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
  34. package/dist/resources/extensions/gsd/auto-runtime-state.js +14 -0
  35. package/dist/resources/extensions/gsd/auto-start.js +24 -37
  36. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  37. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  38. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +11 -45
  39. package/dist/resources/extensions/gsd/auto-verification.js +7 -7
  40. package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
  41. package/dist/resources/extensions/gsd/auto-worktree.js +53 -368
  42. package/dist/resources/extensions/gsd/auto.js +19 -27
  43. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -2
  44. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
  45. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +20 -43
  46. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  47. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
  48. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +209 -149
  49. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +93 -8
  50. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  51. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  52. package/dist/resources/extensions/gsd/captures.js +5 -15
  53. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
  54. package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
  55. package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
  56. package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
  57. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  58. package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
  59. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  60. package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
  61. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  62. package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
  63. package/dist/resources/extensions/gsd/crash-recovery.js +4 -12
  64. package/dist/resources/extensions/gsd/db/engine.js +755 -0
  65. package/dist/resources/extensions/gsd/db/queries.js +372 -0
  66. package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
  67. package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
  68. package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
  69. package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
  70. package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
  71. package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
  72. package/dist/resources/extensions/gsd/db-workspace.js +103 -0
  73. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  74. package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
  75. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  76. package/dist/resources/extensions/gsd/doctor-environment.js +5 -11
  77. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  78. package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -3
  79. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
  80. package/dist/resources/extensions/gsd/doctor.js +16 -9
  81. package/dist/resources/extensions/gsd/error-classifier.js +10 -1
  82. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  83. package/dist/resources/extensions/gsd/git-service.js +1 -0
  84. package/dist/resources/extensions/gsd/gitignore.js +3 -0
  85. package/dist/resources/extensions/gsd/gsd-db.js +183 -2048
  86. package/dist/resources/extensions/gsd/guidance.js +98 -0
  87. package/dist/resources/extensions/gsd/guided-flow.js +83 -471
  88. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  89. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -1
  90. package/dist/resources/extensions/gsd/mcp-filter.js +4 -20
  91. package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
  92. package/dist/resources/extensions/gsd/md-importer.js +4 -3
  93. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
  94. package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
  95. package/dist/resources/extensions/gsd/migration-auto-check.js +27 -5
  96. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  97. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
  98. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  99. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
  100. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  101. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  102. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  103. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
  104. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  105. package/dist/resources/extensions/gsd/model-router.js +3 -0
  106. package/dist/resources/extensions/gsd/notification-store.js +11 -4
  107. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  108. package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
  109. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
  110. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  111. package/dist/resources/extensions/gsd/paths.js +37 -24
  112. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  113. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  114. package/dist/resources/extensions/gsd/preferences-models.js +12 -46
  115. package/dist/resources/extensions/gsd/preferences.js +161 -29
  116. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  117. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
  118. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  119. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  120. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  121. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -1
  122. package/dist/resources/extensions/gsd/prompts/replan-slice.md +1 -1
  123. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  124. package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
  125. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  126. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  127. package/dist/resources/extensions/gsd/publication.js +87 -0
  128. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  129. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  130. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  131. package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
  132. package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
  133. package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
  134. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
  135. package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
  136. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  137. package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
  138. package/dist/resources/extensions/gsd/state.js +14 -25
  139. package/dist/resources/extensions/gsd/status-guards.js +56 -8
  140. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  141. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  142. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  143. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  144. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  145. package/dist/resources/extensions/gsd/tool-contract.js +52 -8
  146. package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
  147. package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
  148. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  149. package/dist/resources/extensions/gsd/tools/complete-slice.js +24 -43
  150. package/dist/resources/extensions/gsd/tools/exec-tool.js +5 -8
  151. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  152. package/dist/resources/extensions/gsd/tools/plan-slice.js +12 -6
  153. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
  154. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +11 -29
  155. package/dist/resources/extensions/gsd/tools/reopen-slice.js +14 -33
  156. package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
  157. package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
  158. package/dist/resources/extensions/gsd/uat-policy.js +17 -10
  159. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  160. package/dist/resources/extensions/gsd/undo.js +8 -7
  161. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  162. package/dist/resources/extensions/gsd/unit-context-composer.js +49 -21
  163. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  164. package/dist/resources/extensions/gsd/unit-registry.js +337 -0
  165. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  166. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
  167. package/dist/resources/extensions/gsd/user-input-boundary.js +23 -0
  168. package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
  169. package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
  170. package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
  171. package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
  172. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  173. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  174. package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
  175. package/dist/resources/extensions/gsd/worktree-lifecycle.js +9 -1
  176. package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
  177. package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
  178. package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
  179. package/dist/resources/extensions/gsd/worktree-root.js +28 -6
  180. package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
  181. package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
  182. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  183. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  184. package/dist/resources/extensions/search-the-web/native-search.js +5 -3
  185. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  186. package/dist/resources/extensions/shared/gsd-browser-cli.js +72 -4
  187. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  188. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  189. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  190. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  191. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  192. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  193. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  194. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  195. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  196. package/dist/resources/skills/gsd-browser/SKILL.md +1 -1
  197. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  198. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  199. package/dist/update-cmd.js +20 -0
  200. package/dist/web/standalone/.next/BUILD_ID +1 -1
  201. package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
  202. package/dist/web/standalone/.next/build-manifest.json +3 -3
  203. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  204. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  205. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  206. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  207. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  208. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  209. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  210. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  211. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  212. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  213. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  214. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  215. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  216. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  218. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  219. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  220. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  222. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  223. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  224. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  225. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  227. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  228. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  230. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  231. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  232. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  233. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  234. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  236. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  237. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  238. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  239. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  240. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  241. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  242. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  243. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  244. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  245. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  247. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  248. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  249. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  250. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  251. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  252. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  253. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  254. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  255. package/dist/web/standalone/.next/server/app/index.html +1 -1
  256. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  257. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  258. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  259. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  260. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  261. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  262. package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
  263. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  264. package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
  265. package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
  266. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  268. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  269. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  270. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  271. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  272. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  273. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  274. package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
  275. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  276. package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
  277. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
  278. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
  279. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  280. package/dist/web/standalone/node_modules/postcss/lib/container.js +18 -26
  281. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +14 -47
  282. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  283. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  284. package/dist/web/standalone/node_modules/postcss/lib/input.js +29 -54
  285. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +37 -47
  286. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +9 -26
  287. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +55 -57
  288. package/dist/web/standalone/node_modules/postcss/lib/node.js +31 -99
  289. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  290. package/dist/web/standalone/node_modules/postcss/lib/parser.js +9 -10
  291. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  292. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +11 -30
  293. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  294. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  295. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  296. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +28 -69
  297. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +2 -6
  298. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  299. package/dist/web/standalone/package.json +1 -1
  300. package/dist/web-mode.d.ts +2 -0
  301. package/dist/web-mode.js +20 -8
  302. package/dist/worktree-cli.js +3 -6
  303. package/dist/worktree-status-banner.js +7 -11
  304. package/package.json +2 -1
  305. package/packages/cloud-mcp-gateway/package.json +2 -2
  306. package/packages/contracts/dist/workflow.d.ts +4 -0
  307. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  308. package/packages/contracts/dist/workflow.js.map +1 -1
  309. package/packages/contracts/package.json +1 -1
  310. package/packages/daemon/package.json +4 -4
  311. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  312. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  313. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  314. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  315. package/packages/gsd-agent-core/package.json +5 -5
  316. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  317. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +3 -0
  318. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  319. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  320. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +106 -40
  321. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  322. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  323. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
  324. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  325. package/packages/gsd-agent-modes/package.json +7 -7
  326. package/packages/mcp-server/dist/cli.js +6 -3
  327. package/packages/mcp-server/dist/cli.js.map +1 -1
  328. package/packages/mcp-server/dist/server.d.ts +10 -0
  329. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  330. package/packages/mcp-server/dist/server.js +8 -0
  331. package/packages/mcp-server/dist/server.js.map +1 -1
  332. package/packages/mcp-server/dist/workflow-tools.d.ts +49 -0
  333. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  334. package/packages/mcp-server/dist/workflow-tools.js +48 -22
  335. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  336. package/packages/mcp-server/package.json +3 -3
  337. package/packages/native/package.json +1 -1
  338. package/packages/pi-agent-core/package.json +1 -1
  339. package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
  340. package/packages/pi-ai/dist/image-models.generated.js +6 -6
  341. package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
  342. package/packages/pi-ai/dist/models.generated.d.ts +455 -546
  343. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  344. package/packages/pi-ai/dist/models.generated.js +481 -599
  345. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  346. package/packages/pi-ai/package.json +1 -1
  347. package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
  348. package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
  349. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  350. package/packages/pi-coding-agent/package.json +7 -7
  351. package/packages/pi-tui/dist/components/input.js +1 -1
  352. package/packages/pi-tui/dist/components/input.js.map +1 -1
  353. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  354. package/packages/pi-tui/dist/keys.js +39 -30
  355. package/packages/pi-tui/dist/keys.js.map +1 -1
  356. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  357. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  358. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  359. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  360. package/packages/pi-tui/dist/tui.js +9 -0
  361. package/packages/pi-tui/dist/tui.js.map +1 -1
  362. package/packages/pi-tui/package.json +2 -2
  363. package/packages/rpc-client/package.json +2 -2
  364. package/pkg/package.json +1 -1
  365. package/src/resources/extensions/ask-user-questions.ts +87 -24
  366. package/src/resources/extensions/bg-shell/utilities.ts +5 -2
  367. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  368. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  369. package/src/resources/extensions/browser-tools/index.ts +71 -13
  370. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  371. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  372. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  373. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +148 -285
  374. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +268 -0
  375. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
  376. package/src/resources/extensions/github-sync/templates.ts +3 -3
  377. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  378. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  379. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  380. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
  381. package/src/resources/extensions/gsd/auto/loop.ts +83 -61
  382. package/src/resources/extensions/gsd/auto/orchestrator.ts +164 -17
  383. package/src/resources/extensions/gsd/auto/phases.ts +45 -4
  384. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  385. package/src/resources/extensions/gsd/auto/session.ts +4 -0
  386. package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
  387. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
  388. package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
  389. package/src/resources/extensions/gsd/auto-post-unit.ts +29 -10
  390. package/src/resources/extensions/gsd/auto-prompts.ts +110 -9
  391. package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
  392. package/src/resources/extensions/gsd/auto-runtime-state.ts +26 -0
  393. package/src/resources/extensions/gsd/auto-start.ts +29 -35
  394. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  395. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  396. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +19 -47
  397. package/src/resources/extensions/gsd/auto-verification.ts +7 -8
  398. package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
  399. package/src/resources/extensions/gsd/auto-worktree.ts +68 -384
  400. package/src/resources/extensions/gsd/auto.ts +35 -32
  401. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -5
  402. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
  403. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +20 -43
  404. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  405. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
  406. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +251 -161
  407. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +136 -6
  408. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  409. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  410. package/src/resources/extensions/gsd/captures.ts +5 -16
  411. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
  412. package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
  413. package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
  414. package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
  415. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  416. package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
  417. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  418. package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
  419. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  420. package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
  421. package/src/resources/extensions/gsd/crash-recovery.ts +3 -9
  422. package/src/resources/extensions/gsd/db/engine.ts +809 -0
  423. package/src/resources/extensions/gsd/db/queries.ts +453 -0
  424. package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
  425. package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
  426. package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
  427. package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
  428. package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
  429. package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
  430. package/src/resources/extensions/gsd/db-workspace.ts +170 -0
  431. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  432. package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
  433. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  434. package/src/resources/extensions/gsd/doctor-environment.ts +5 -13
  435. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  436. package/src/resources/extensions/gsd/doctor-git-checks.ts +3 -3
  437. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
  438. package/src/resources/extensions/gsd/doctor.ts +15 -5
  439. package/src/resources/extensions/gsd/error-classifier.ts +12 -1
  440. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  441. package/src/resources/extensions/gsd/git-service.ts +1 -0
  442. package/src/resources/extensions/gsd/gitignore.ts +3 -0
  443. package/src/resources/extensions/gsd/gsd-db.ts +185 -2373
  444. package/src/resources/extensions/gsd/guidance.ts +139 -0
  445. package/src/resources/extensions/gsd/guided-flow.ts +95 -561
  446. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  447. package/src/resources/extensions/gsd/markdown-renderer.ts +2 -1
  448. package/src/resources/extensions/gsd/mcp-filter.ts +4 -24
  449. package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
  450. package/src/resources/extensions/gsd/md-importer.ts +3 -3
  451. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
  452. package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
  453. package/src/resources/extensions/gsd/migration-auto-check.ts +30 -5
  454. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  455. package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
  456. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  457. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
  458. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  459. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  460. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  461. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
  462. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  463. package/src/resources/extensions/gsd/model-router.ts +3 -0
  464. package/src/resources/extensions/gsd/notification-store.ts +26 -3
  465. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  466. package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
  467. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
  468. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  469. package/src/resources/extensions/gsd/paths.ts +42 -22
  470. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  471. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  472. package/src/resources/extensions/gsd/preferences-models.ts +10 -46
  473. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  474. package/src/resources/extensions/gsd/preferences.ts +191 -28
  475. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  476. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
  477. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  478. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  479. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  480. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -1
  481. package/src/resources/extensions/gsd/prompts/replan-slice.md +1 -1
  482. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  483. package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
  484. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  485. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  486. package/src/resources/extensions/gsd/publication.ts +122 -0
  487. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  488. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  489. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  490. package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
  491. package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
  492. package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
  493. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
  494. package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
  495. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  496. package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
  497. package/src/resources/extensions/gsd/state.ts +19 -26
  498. package/src/resources/extensions/gsd/status-guards.ts +59 -8
  499. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  500. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  501. package/src/resources/extensions/gsd/templates/project.md +1 -0
  502. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  503. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  504. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  505. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
  506. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +444 -5
  507. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  508. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
  509. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +133 -4
  510. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +3 -1
  511. package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
  512. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  513. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
  514. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
  515. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  516. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  517. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  518. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  519. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
  520. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
  521. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  522. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +46 -8
  523. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
  524. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
  525. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  526. package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
  527. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  528. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
  529. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
  530. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  531. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  532. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  533. package/src/resources/extensions/gsd/tests/guidance.test.ts +125 -0
  534. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +58 -15
  535. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +74 -59
  536. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  537. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  538. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  539. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
  540. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  541. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
  542. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  543. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  544. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  545. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  546. package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
  547. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
  548. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  549. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
  550. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  551. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  552. package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
  553. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +46 -0
  554. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
  555. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
  556. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  557. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  558. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  559. package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
  560. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +342 -1
  561. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  562. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +26 -1
  563. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
  564. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
  565. package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
  566. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +144 -7
  567. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  568. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +2 -1
  569. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
  570. package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
  571. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  572. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +35 -0
  573. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  574. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  575. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  576. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +155 -0
  577. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +24 -6
  578. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  579. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +70 -2
  580. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  581. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +86 -1
  582. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  583. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
  584. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +128 -11
  585. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +2 -2
  586. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
  587. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
  588. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +43 -1
  589. package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
  590. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  591. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
  592. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +3 -1
  593. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
  594. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +2 -2
  595. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  596. package/src/resources/extensions/gsd/tests/write-gate.test.ts +121 -0
  597. package/src/resources/extensions/gsd/tool-contract.ts +86 -8
  598. package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
  599. package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
  600. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  601. package/src/resources/extensions/gsd/tools/complete-slice.ts +23 -58
  602. package/src/resources/extensions/gsd/tools/exec-tool.ts +5 -8
  603. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  604. package/src/resources/extensions/gsd/tools/plan-slice.ts +12 -6
  605. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
  606. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +11 -38
  607. package/src/resources/extensions/gsd/tools/reopen-slice.ts +14 -42
  608. package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
  609. package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
  610. package/src/resources/extensions/gsd/uat-policy.ts +20 -10
  611. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  612. package/src/resources/extensions/gsd/undo.ts +9 -8
  613. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  614. package/src/resources/extensions/gsd/unit-context-composer.ts +97 -21
  615. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  616. package/src/resources/extensions/gsd/unit-registry.ts +412 -0
  617. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  618. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
  619. package/src/resources/extensions/gsd/user-input-boundary.ts +18 -0
  620. package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
  621. package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
  622. package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
  623. package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
  624. package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
  625. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  626. package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
  627. package/src/resources/extensions/gsd/worktree-lifecycle.ts +17 -17
  628. package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
  629. package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
  630. package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
  631. package/src/resources/extensions/gsd/worktree-root.ts +29 -6
  632. package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
  633. package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
  634. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  635. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  636. package/src/resources/extensions/search-the-web/native-search.ts +5 -3
  637. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  638. package/src/resources/extensions/shared/gsd-browser-cli.ts +88 -4
  639. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  640. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  641. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  642. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  643. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  644. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  645. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  646. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  647. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  648. package/src/resources/skills/gsd-browser/SKILL.md +1 -1
  649. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  650. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  651. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  652. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  653. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  654. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  655. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  656. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → AOpDeK_gJHU8OZjRo31gQ}/_buildManifest.js +0 -0
  657. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → AOpDeK_gJHU8OZjRo31gQ}/_ssgManifest.js +0 -0
@@ -25,7 +25,7 @@ import { clearActivityLogState } from "./activity-log.js";
25
25
  import { synthesizeCrashRecovery, getDeepDiagnostic, readActiveMilestoneId, } from "./session-forensics.js";
26
26
  import { writeLock, clearLock, clearStaleWorkerLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, emitOpenUnitEndForUnit, } from "./crash-recovery.js";
27
27
  import { acquireSessionLock, getSessionLockStatus, releaseSessionLock, updateSessionLock, } from "./session-lock.js";
28
- import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, } from "./preferences.js";
28
+ import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, resolveEffectiveUnitIsolationMode, } from "./preferences.js";
29
29
  import { playNotificationBell, sendDesktopNotification } from "./notifications.js";
30
30
  import { getBudgetAlertLevel, getNewBudgetAlertLevel, getBudgetEnforcementAction, resolveCompactionThresholdPercent, shouldRerootStepSessionForContext, } from "./auto-budget.js";
31
31
  import { markToolStart as _markToolStart, markToolEnd as _markToolEnd, getOldestInFlightToolAgeMs as _getOldestInFlightToolAgeMs, clearInFlightTools, isToolInvocationError, isQueuedUserMessageSkip, isDeterministicPolicyError, } from "./auto-tool-tracking.js";
@@ -54,6 +54,7 @@ import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
54
54
  import { createAutoWorktree, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
55
55
  import { pruneQueueOrder } from "./queue-order.js";
56
56
  import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
57
+ import { createMilestoneMergeTransaction } from "./milestone-merge-transaction.js";
57
58
  import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
58
59
  import { reconcileMergeState, verifyExpectedArtifact, } from "./auto-recovery.js";
59
60
  import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
@@ -67,6 +68,7 @@ import { MILESTONE_ID_RE } from "./milestone-ids.js";
67
68
  import { updateProgressWidget as _updateProgressWidget, setCompletionProgressWidget, setAutoOutcomeWidget, setAutoActiveStatus, updateSliceProgressCache, clearSliceProgressCache, unitVerb, } from "./auto-dashboard.js";
68
69
  import { registerSigtermHandler as _registerSigtermHandler, deregisterSigtermHandler as _deregisterSigtermHandler, } from "./auto-supervisor.js";
69
70
  import { isDbAvailable, getMilestone, getMilestoneSlices, } from "./gsd-db.js";
71
+ import { closeWorkflowDatabase } from "./db-workspace.js";
70
72
  import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
71
73
  import { writeUnitRuntimeRecord } from "./unit-runtime.js";
72
74
  import { countPendingCaptures } from "./captures.js";
@@ -109,12 +111,13 @@ void initTokenCounter().catch((err) => {
109
111
  logWarning("engine", `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`);
110
112
  });
111
113
  export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
112
- import { autoSession as s } from "./auto-runtime-state.js";
114
+ import { autoSession as s, getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
113
115
  import { gsdHome } from "./gsd-home.js";
114
116
  import { createWorkspace, scopeMilestone } from "./workspace.js";
115
117
  import { registerAutoWorker, markWorkerStopping, } from "./db/auto-workers.js";
116
118
  import { releaseMilestoneLease } from "./db/milestone-leases.js";
117
119
  import { normalizeRealPath } from "./paths.js";
120
+ import { formatStopNoticePrefix, isBlockedStopReason, stopNoticeDisplayReason, } from "./stop-notice.js";
118
121
  // ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
119
122
  // ALL mutable auto-mode state lives in the AutoSession class (auto/session.ts).
120
123
  // This file must NOT declare module-level `let` or `var` variables for state.
@@ -135,17 +138,7 @@ export function formatAutoStopNotification(prefix, totals, unitCount) {
135
138
  `Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${unitCount} units`,
136
139
  ].join("\n");
137
140
  }
138
- function isBlockedStopReason(reason) {
139
- return /^Blocked:\s*/i.test(reason ?? "");
140
- }
141
- function formatAutoStopDisplayReason(reason) {
142
- return (reason ?? "").replace(/^Blocked:\s*/i, "").trim();
143
- }
144
- export function formatAutoStopNotificationPrefix(reason) {
145
- const displayReason = formatAutoStopDisplayReason(reason);
146
- const prefix = isBlockedStopReason(reason) ? "Auto-mode blocked" : "Auto-mode stopped";
147
- return displayReason ? `${prefix} — ${displayReason}` : prefix;
148
- }
141
+ export { formatStopNoticePrefix as formatAutoStopNotificationPrefix } from "./stop-notice.js";
149
142
  function clearSessionModelOverrideForCommandSession(ctx) {
150
143
  const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ??
151
144
  ctx?.sessionManager?.getSessionId?.();
@@ -344,14 +337,11 @@ export function startAutoDetached(ctx, pi, base, verboseMode, options) {
344
337
  export function shouldUseWorktreeIsolation(basePath) {
345
338
  return getIsolationMode(basePath) === "worktree";
346
339
  }
347
- function resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded) {
348
- return configuredMode === "worktree" && isolationDegraded ? "branch" : configuredMode;
349
- }
350
- export function _resolveEffectiveUnitIsolationModeForTest(configuredMode, isolationDegraded) {
351
- return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded);
340
+ export function _resolveEffectiveUnitIsolationModeForTest(configuredMode, isolationDegraded, strandedRecoveryIsolationMode = null) {
341
+ return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded, strandedRecoveryIsolationMode);
352
342
  }
353
343
  function getEffectiveUnitIsolationMode(basePath) {
354
- return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded);
344
+ return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded, s.strandedRecoveryIsolationMode);
355
345
  }
356
346
  /** Crash recovery prompt — set by startAuto, consumed by the main loop */
357
347
  /** Pending verification retry — set when gate fails with retries remaining, consumed by autoLoop */
@@ -463,6 +453,7 @@ function stopAutoCommandPolling() {
463
453
  }
464
454
  export function getAutoDashboardData() {
465
455
  const ledger = getLedger();
456
+ const runtimeSnapshot = getAutoRuntimeSnapshot();
466
457
  const totals = ledger ? getProjectTotals(ledger.units) : null;
467
458
  const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ?? null;
468
459
  const rtkSavings = sessionId && s.basePath
@@ -495,6 +486,7 @@ export function getAutoDashboardData() {
495
486
  pendingCaptureCount,
496
487
  rtkSavings,
497
488
  rtkEnabled,
489
+ toolSurface: runtimeSnapshot.toolSurface,
498
490
  };
499
491
  }
500
492
  // ─── Public API ───────────────────────────────────────────────────────────────
@@ -989,8 +981,8 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
989
981
  if (!s.active && !s.paused)
990
982
  return;
991
983
  const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
992
- const stopNotificationPrefix = formatAutoStopNotificationPrefix(reason);
993
- const displayReason = formatAutoStopDisplayReason(reason);
984
+ const stopNotificationPrefix = formatStopNoticePrefix(reason);
985
+ const displayReason = stopNoticeDisplayReason(reason);
994
986
  const isHeadlessStop = process.env.GSD_HEADLESS === "1";
995
987
  const completionStopRequested = Boolean(options.completionWidget);
996
988
  const preserveCloseoutTranscript = !isHeadlessStop && (options.preserveCloseoutTranscript ?? completionStopRequested);
@@ -1003,12 +995,13 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1003
995
  // worktree was active, and whether the current milestone was merged before
1004
996
  // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
1005
997
  try {
1006
- const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
998
+ const { autoExitReasonForTerminalOutcome, emitAutoExit, normalizeAutoExitReason, } = await import("./worktree-telemetry.js");
1007
999
  // Normalize the free-form reason to a closed set so the telemetry
1008
1000
  // aggregator buckets stably. Raw detail is preserved in the phases.ts
1009
1001
  // notification and the notify'd error string.
1010
1002
  const rawReason = reason ?? "stop";
1011
- const normalizedReason = normalizeAutoExitReason(rawReason);
1003
+ const normalizedReason = autoExitReasonForTerminalOutcome(options.terminalOutcome)
1004
+ ?? normalizeAutoExitReason(rawReason);
1012
1005
  const telemetryBase = s.originalBasePath || s.basePath;
1013
1006
  emitAutoExit(telemetryBase, {
1014
1007
  reason: normalizedReason,
@@ -1184,8 +1177,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1184
1177
  // ── Step 6: DB cleanup ──
1185
1178
  if (isDbAvailable()) {
1186
1179
  try {
1187
- const { closeDatabase } = await import("./gsd-db.js");
1188
- closeDatabase();
1180
+ closeWorkflowDatabase();
1189
1181
  }
1190
1182
  catch (e) {
1191
1183
  debugLog("db-close-failed", {
@@ -1622,7 +1614,7 @@ export function buildWorktreeLifecycleDeps() {
1622
1614
  // C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
1623
1615
  //
1624
1616
  // Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
1625
- // worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
1617
+ // worktreeProjection, mergeMilestoneToMain transaction runner). Down from 18 at slice-7
1626
1618
  // closure.
1627
1619
  return {
1628
1620
  gitServiceFactory: (basePath) => {
@@ -1630,7 +1622,7 @@ export function buildWorktreeLifecycleDeps() {
1630
1622
  return new GitServiceImpl(basePath, gitConfig);
1631
1623
  },
1632
1624
  worktreeProjection: new WorktreeStateProjection(),
1633
- mergeMilestoneToMain,
1625
+ mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
1634
1626
  };
1635
1627
  }
1636
1628
  function buildLifecycle() {
@@ -15,7 +15,8 @@ import { resumeAutoAfterProviderDelay } from "./provider-error-resume.js";
15
15
  import { classifyError, createRetryState, resetRetryState, isTransient, } from "../error-classifier.js";
16
16
  import { blockModel, isModelBlocked } from "../blocked-models.js";
17
17
  import { getProjectGSDPreferencesPath } from "../preferences.js";
18
- import { formatProviderErrorGuidance, resolveProviderErrorGuidance, } from "../provider-error-guidance.js";
18
+ import { resolveProviderErrorGuidance } from "../provider-error-guidance.js";
19
+ import { formatGuidance } from "../guidance.js";
19
20
  const retryState = createRetryState();
20
21
  const MAX_NETWORK_RETRIES = 2;
21
22
  function isObjectRecord(value) {
@@ -486,7 +487,7 @@ export async function handleAgentEnd(pi, event, ctx) {
486
487
  preferencesPath: dash.basePath ? getProjectGSDPreferencesPath(dash.basePath) : undefined,
487
488
  hasConfiguredFallbacks: (modelConfig?.fallbacks.length ?? 0) > 0,
488
489
  });
489
- const guidanceText = formatProviderErrorGuidance(guidance);
490
+ const guidanceText = formatGuidance(guidance);
490
491
  await pauseForProviderModelRejection(ctx, pi, {
491
492
  errorDetail,
492
493
  rawErrorMsg,
@@ -10,6 +10,7 @@ import { logError } from "../workflow-logger.js";
10
10
  import { getErrorMessage } from "../error-utils.js";
11
11
  import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
12
12
  import { prepareSaveGateResultArguments } from "../tools/save-gate-result-args.js";
13
+ import { aliasesForWorkflowTool } from "../workflow-tool-surface.js";
13
14
  async function loadWorkflowExecutors() {
14
15
  return importWorkflowExecutorsModule();
15
16
  }
@@ -41,6 +42,13 @@ function registerAlias(pi, toolDef, aliasName, canonicalName) {
41
42
  execute,
42
43
  });
43
44
  }
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but varies by schema
46
+ function registerWorkflowTool(pi, toolDef) {
47
+ pi.registerTool(toolDef);
48
+ for (const alias of aliasesForWorkflowTool(toolDef.name)) {
49
+ registerAlias(pi, toolDef, alias, toolDef.name);
50
+ }
51
+ }
44
52
  function requirementRootWriteGuard(operation, basePath) {
45
53
  const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(basePath), "REQUIREMENTS");
46
54
  if (!guard.block)
@@ -155,8 +163,7 @@ export function registerDbTools(pi) {
155
163
  return new Text(text, 0, 0);
156
164
  },
157
165
  };
158
- pi.registerTool(decisionSaveTool);
159
- registerAlias(pi, decisionSaveTool, "gsd_save_decision", "gsd_decision_save");
166
+ registerWorkflowTool(pi, decisionSaveTool);
160
167
  // ─── gsd_requirement_update (formerly gsd_update_requirement) ───────────
161
168
  const requirementUpdateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
162
169
  const basePath = resolveCtxCwd(_ctx);
@@ -241,8 +248,7 @@ export function registerDbTools(pi) {
241
248
  return new Text(text, 0, 0);
242
249
  },
243
250
  };
244
- pi.registerTool(requirementUpdateTool);
245
- registerAlias(pi, requirementUpdateTool, "gsd_update_requirement", "gsd_requirement_update");
251
+ registerWorkflowTool(pi, requirementUpdateTool);
246
252
  // ─── gsd_requirement_save ─────────────────────────────────────────────
247
253
  const requirementSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
248
254
  const basePath = resolveCtxCwd(_ctx);
@@ -340,8 +346,7 @@ export function registerDbTools(pi) {
340
346
  return new Text(text, 0, 0);
341
347
  },
342
348
  };
343
- pi.registerTool(requirementSaveTool);
344
- registerAlias(pi, requirementSaveTool, "gsd_save_requirement", "gsd_requirement_save");
349
+ registerWorkflowTool(pi, requirementSaveTool);
345
350
  // ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
346
351
  const summarySaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
347
352
  try {
@@ -397,8 +402,7 @@ export function registerDbTools(pi) {
397
402
  return new Text(text, 0, 0);
398
403
  },
399
404
  };
400
- pi.registerTool(summarySaveTool);
401
- registerAlias(pi, summarySaveTool, "gsd_save_summary", "gsd_summary_save");
405
+ registerWorkflowTool(pi, summarySaveTool);
402
406
  // ─── gsd_uat_result_save ─────────────────────────────────────────────────
403
407
  const uatResultSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
404
408
  const { executeUatResultSave } = await loadWorkflowExecutors();
@@ -480,7 +484,7 @@ export function registerDbTools(pi) {
480
484
  return new Text(theme.fg("success", `UAT ${d?.sliceId ?? ""}: ${d?.verdict ?? "saved"}`), 0, 0);
481
485
  },
482
486
  };
483
- pi.registerTool(uatResultSaveTool);
487
+ registerWorkflowTool(pi, uatResultSaveTool);
484
488
  // ─── gsd_milestone_generate_id (formerly gsd_generate_milestone_id) ────
485
489
  const milestoneGenerateIdExecute = async (_toolCallId, _params, _signal, _onUpdate, _ctx) => {
486
490
  try {
@@ -566,8 +570,7 @@ export function registerDbTools(pi) {
566
570
  return new Text(text, 0, 0);
567
571
  },
568
572
  };
569
- pi.registerTool(milestoneGenerateIdTool);
570
- registerAlias(pi, milestoneGenerateIdTool, "gsd_generate_milestone_id", "gsd_milestone_generate_id");
573
+ registerWorkflowTool(pi, milestoneGenerateIdTool);
571
574
  // ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
572
575
  const planMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
573
576
  const { executePlanMilestone } = await loadWorkflowExecutors();
@@ -633,8 +636,7 @@ export function registerDbTools(pi) {
633
636
  }),
634
637
  execute: planMilestoneExecute,
635
638
  };
636
- pi.registerTool(planMilestoneTool);
637
- registerAlias(pi, planMilestoneTool, "gsd_milestone_plan", "gsd_plan_milestone");
639
+ registerWorkflowTool(pi, planMilestoneTool);
638
640
  // ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
639
641
  const planSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
640
642
  const { executePlanSlice } = await loadWorkflowExecutors();
@@ -678,8 +680,7 @@ export function registerDbTools(pi) {
678
680
  }),
679
681
  execute: planSliceExecute,
680
682
  };
681
- pi.registerTool(planSliceTool);
682
- registerAlias(pi, planSliceTool, "gsd_slice_plan", "gsd_plan_slice");
683
+ registerWorkflowTool(pi, planSliceTool);
683
684
  // ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
684
685
  const planTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
685
686
  const basePath = resolveCtxCwd(_ctx);
@@ -748,8 +749,7 @@ export function registerDbTools(pi) {
748
749
  }),
749
750
  execute: planTaskExecute,
750
751
  };
751
- pi.registerTool(planTaskTool);
752
- registerAlias(pi, planTaskTool, "gsd_task_plan", "gsd_plan_task");
752
+ registerWorkflowTool(pi, planTaskTool);
753
753
  // ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
754
754
  const taskCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
755
755
  const { executeTaskComplete } = await loadWorkflowExecutors();
@@ -809,8 +809,7 @@ export function registerDbTools(pi) {
809
809
  }),
810
810
  execute: taskCompleteExecute,
811
811
  };
812
- pi.registerTool(taskCompleteTool);
813
- registerAlias(pi, taskCompleteTool, "gsd_complete_task", "gsd_task_complete");
812
+ registerWorkflowTool(pi, taskCompleteTool);
814
813
  // ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
815
814
  const sliceCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
816
815
  const { executeSliceComplete } = await loadWorkflowExecutors();
@@ -875,8 +874,7 @@ export function registerDbTools(pi) {
875
874
  }),
876
875
  execute: sliceCompleteExecute,
877
876
  };
878
- pi.registerTool(sliceCompleteTool);
879
- registerAlias(pi, sliceCompleteTool, "gsd_complete_slice", "gsd_slice_complete");
877
+ registerWorkflowTool(pi, sliceCompleteTool);
880
878
  // ─── gsd_skip_slice (#3477 / #3487) ───────────────────────────────────
881
879
  const skipSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
882
880
  const basePath = resolveCtxCwd(_ctx);
@@ -941,7 +939,7 @@ export function registerDbTools(pi) {
941
939
  };
942
940
  }
943
941
  };
944
- pi.registerTool({
942
+ registerWorkflowTool(pi, {
945
943
  name: "gsd_skip_slice",
946
944
  label: "Skip Slice",
947
945
  description: "Mark a slice as skipped so auto-mode advances past it without executing. " +
@@ -1000,8 +998,7 @@ export function registerDbTools(pi) {
1000
998
  }),
1001
999
  execute: milestoneCompleteExecute,
1002
1000
  };
1003
- pi.registerTool(milestoneCompleteTool);
1004
- registerAlias(pi, milestoneCompleteTool, "gsd_milestone_complete", "gsd_complete_milestone");
1001
+ registerWorkflowTool(pi, milestoneCompleteTool);
1005
1002
  // ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
1006
1003
  const milestoneValidateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1007
1004
  const { executeValidateMilestone } = await loadWorkflowExecutors();
@@ -1035,8 +1032,7 @@ export function registerDbTools(pi) {
1035
1032
  }),
1036
1033
  execute: milestoneValidateExecute,
1037
1034
  };
1038
- pi.registerTool(milestoneValidateTool);
1039
- registerAlias(pi, milestoneValidateTool, "gsd_milestone_validate", "gsd_validate_milestone");
1035
+ registerWorkflowTool(pi, milestoneValidateTool);
1040
1036
  // ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
1041
1037
  const replanSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1042
1038
  const { executeReplanSlice } = await loadWorkflowExecutors();
@@ -1078,8 +1074,7 @@ export function registerDbTools(pi) {
1078
1074
  }),
1079
1075
  execute: replanSliceExecute,
1080
1076
  };
1081
- pi.registerTool(replanSliceTool);
1082
- registerAlias(pi, replanSliceTool, "gsd_slice_replan", "gsd_replan_slice");
1077
+ registerWorkflowTool(pi, replanSliceTool);
1083
1078
  // ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
1084
1079
  const reassessRoadmapExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1085
1080
  const { executeReassessRoadmap } = await loadWorkflowExecutors();
@@ -1126,8 +1121,7 @@ export function registerDbTools(pi) {
1126
1121
  }),
1127
1122
  execute: reassessRoadmapExecute,
1128
1123
  };
1129
- pi.registerTool(reassessRoadmapTool);
1130
- registerAlias(pi, reassessRoadmapTool, "gsd_roadmap_reassess", "gsd_reassess_roadmap");
1124
+ registerWorkflowTool(pi, reassessRoadmapTool);
1131
1125
  // ─── gsd_task_reopen (gsd_reopen_task alias) ───────────────────────────
1132
1126
  // Single-writer v3, Stream 3: reversibility tools for closed units.
1133
1127
  const reopenTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
@@ -1190,8 +1184,7 @@ export function registerDbTools(pi) {
1190
1184
  }),
1191
1185
  execute: reopenTaskExecute,
1192
1186
  };
1193
- pi.registerTool(reopenTaskTool);
1194
- registerAlias(pi, reopenTaskTool, "gsd_reopen_task", "gsd_task_reopen");
1187
+ registerWorkflowTool(pi, reopenTaskTool);
1195
1188
  // ─── gsd_slice_reopen (gsd_reopen_slice alias) ─────────────────────────
1196
1189
  const reopenSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1197
1190
  const basePath = resolveCtxCwd(_ctx);
@@ -1253,8 +1246,7 @@ export function registerDbTools(pi) {
1253
1246
  }),
1254
1247
  execute: reopenSliceExecute,
1255
1248
  };
1256
- pi.registerTool(reopenSliceTool);
1257
- registerAlias(pi, reopenSliceTool, "gsd_reopen_slice", "gsd_slice_reopen");
1249
+ registerWorkflowTool(pi, reopenSliceTool);
1258
1250
  // ─── gsd_milestone_reopen (gsd_reopen_milestone alias) ─────────────────
1259
1251
  const reopenMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1260
1252
  const basePath = resolveCtxCwd(_ctx);
@@ -1314,8 +1306,7 @@ export function registerDbTools(pi) {
1314
1306
  }),
1315
1307
  execute: reopenMilestoneExecute,
1316
1308
  };
1317
- pi.registerTool(reopenMilestoneTool);
1318
- registerAlias(pi, reopenMilestoneTool, "gsd_reopen_milestone", "gsd_milestone_reopen");
1309
+ registerWorkflowTool(pi, reopenMilestoneTool);
1319
1310
  // ─── gsd_save_gate_result ──────────────────────────────────────────────
1320
1311
  const saveGateResultExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1321
1312
  const { executeSaveGateResult } = await loadWorkflowExecutors();
@@ -1378,5 +1369,5 @@ export function registerDbTools(pi) {
1378
1369
  return new Text(theme.fg(color, `${d.gateId}: ${d.verdict}`), 0, 0);
1379
1370
  },
1380
1371
  };
1381
- pi.registerTool(saveGateResultTool);
1372
+ registerWorkflowTool(pi, saveGateResultTool);
1382
1373
  }
@@ -2,13 +2,14 @@
2
2
  // File Purpose: Registers workspace-aware dynamic filesystem and shell tools.
3
3
  import { existsSync, readdirSync } from "node:fs";
4
4
  import { homedir } from "node:os";
5
- import { dirname, join } from "node:path";
5
+ import { join } from "node:path";
6
6
  import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@gsd/pi-coding-agent";
7
7
  import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
8
- import { setLogBasePath, logWarning } from "../workflow-logger.js";
9
- import { resolveGsdPathContract } from "../paths.js";
8
+ import { logWarning } from "../workflow-logger.js";
9
+ import { openWorkflowDatabase } from "../db-workspace.js";
10
10
  import { getAutoWorktreePath } from "../auto-worktree.js";
11
11
  import { resolveWorktreeProjectRoot } from "../worktree-root.js";
12
+ import { worktreesDirs } from "../worktree-placement.js";
12
13
  export function safeWorkspaceCwd() {
13
14
  try {
14
15
  return process.cwd();
@@ -42,60 +43,36 @@ export function resolveWorkflowToolBasePath(ctx, scope) {
42
43
  return worktree;
43
44
  }
44
45
  else {
45
- const worktreesDir = join(projectRoot, ".gsd", "worktrees");
46
- if (existsSync(worktreesDir)) {
46
+ const live = [];
47
+ for (const worktreesDir of worktreesDirs(projectRoot)) {
48
+ if (!existsSync(worktreesDir))
49
+ continue;
47
50
  try {
48
- const live = readdirSync(worktreesDir)
51
+ live.push(...readdirSync(worktreesDir)
49
52
  .map((name) => join(worktreesDir, name))
50
- .filter((p) => existsSync(join(p, ".git")));
51
- if (live.length === 1)
52
- return live[0];
53
+ .filter((p) => existsSync(join(p, ".git"))));
53
54
  }
54
55
  catch (err) {
55
56
  logWarning("bootstrap", `resolveWorkflowToolBasePath: failed to scan worktrees: ${err instanceof Error ? err.message : String(err)}`);
56
57
  }
57
58
  }
59
+ if (live.length === 1)
60
+ return live[0];
58
61
  }
59
62
  return cwd;
60
63
  }
61
- /**
62
- * Resolve the correct DB path for the current working directory.
63
- * If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
64
- * the project root's `.gsd/gsd.db` (shared WAL — R012). Otherwise
65
- * returns `<basePath>/.gsd/gsd.db`.
66
- */
67
- export function resolveProjectRootDbPath(basePath) {
68
- return resolveGsdPathContract(basePath).projectDb;
69
- }
64
+ export { resolveProjectRootDbPath } from "../db-workspace.js";
70
65
  export async function ensureDbOpen(basePath = safeWorkspaceCwd()) {
71
- try {
72
- const db = await import("../gsd-db.js");
73
- const contract = resolveGsdPathContract(basePath);
74
- const dbPath = contract.projectDb;
75
- const gsdDir = contract.projectGsd;
76
- const projectRoot = dirname(dirname(dbPath));
77
- // Open existing DB file (may be at project root for worktrees)
78
- if (existsSync(dbPath)) {
79
- const opened = db.openDatabase(dbPath);
80
- if (opened)
81
- setLogBasePath(projectRoot);
82
- return opened;
83
- }
84
- // No DB file — create an empty authoritative DB. Markdown migration is
85
- // explicit-only; runtime startup must not import projections into state.
86
- if (existsSync(gsdDir)) {
87
- const opened = db.openDatabase(dbPath);
88
- if (opened)
89
- setLogBasePath(projectRoot);
90
- return opened;
91
- }
66
+ const result = openWorkflowDatabase(basePath);
67
+ if (result.ok)
68
+ return true;
69
+ if (result.reason === "missing-gsd-dir") {
92
70
  logWarning("bootstrap", "ensureDbOpen failed — no .gsd directory found");
93
- return false;
94
71
  }
95
- catch (err) {
96
- logWarning("bootstrap", `ensureDbOpen failed: ${err.message ?? String(err)}`);
97
- return false;
72
+ else {
73
+ logWarning("bootstrap", `ensureDbOpen failed: ${result.error?.message ?? "open failed"}`);
98
74
  }
75
+ return false;
99
76
  }
100
77
  export function registerDynamicTools(pi) {
101
78
  const fallbackRoot = safeWorkspaceCwd();
@@ -3,6 +3,7 @@
3
3
  // gsd-pi — Read-only query tools exposing DB state to the LLM via the WAL connection
4
4
  import { Type } from "@sinclair/typebox";
5
5
  import { ensureDbOpen, resolveCtxCwd } from "./dynamic-tools.js";
6
+ import { checkpointWorkflowDatabase } from "../db-workspace.js";
6
7
  export function registerQueryTools(pi) {
7
8
  pi.registerTool({
8
9
  name: "gsd_milestone_status",
@@ -50,8 +51,7 @@ export function registerQueryTools(pi) {
50
51
  details: { operation: "checkpoint_db", error: "db_unavailable" },
51
52
  };
52
53
  }
53
- const { checkpointDatabase } = await import("../gsd-db.js");
54
- checkpointDatabase();
54
+ checkpointWorkflowDatabase();
55
55
  return {
56
56
  content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
57
57
  details: { operation: "checkpoint_db", status: "ok" },
@@ -13,6 +13,7 @@ import { registerHooks } from "./register-hooks.js";
13
13
  import { registerShortcuts } from "./register-shortcuts.js";
14
14
  import { writeCrashLog } from "./crash-log.js";
15
15
  import { logWarning } from "../workflow-logger.js";
16
+ import { UNIT_TOOL_CONTRACTS } from "../unit-tool-contracts.js";
16
17
  // Static import so cmux event listeners are registered synchronously during
17
18
  // extension bootstrap. Prior implementation used `void import().then()` which
18
19
  // queued listener registration as a microtask — any CMUX_CHANNELS emit fired
@@ -30,6 +31,9 @@ const EPIPE_STORM_THRESHOLD = 100;
30
31
  const EPIPE_STORM_WINDOW_MS = 10_000;
31
32
  let epipeCount = 0;
32
33
  let epipeWindowStart = 0;
34
+ export const CRITICAL_GSD_WORKFLOW_TOOL_NAMES = [...new Set(Object.values(UNIT_TOOL_CONTRACTS)
35
+ .flatMap((contract) => contract.requiredWorkflowTools)
36
+ .filter((toolName) => toolName.startsWith("gsd_")))].sort();
33
37
  /** Write to stderr without ever re-throwing — stderr can EPIPE too, which would
34
38
  * re-enter this handler and re-loop. */
35
39
  function safeStderr(msg) {
@@ -121,6 +125,20 @@ export function installEpipeGuard() {
121
125
  process.on("unhandledRejection", _gsdRejectionGuard);
122
126
  }
123
127
  }
128
+ function assertCriticalGsdWorkflowToolsRegistered(pi) {
129
+ if (typeof pi.getAllTools !== "function")
130
+ return;
131
+ const registered = new Set(pi.getAllTools().map((tool) => tool.name));
132
+ const missing = CRITICAL_GSD_WORKFLOW_TOOL_NAMES.filter((toolName) => !registered.has(toolName));
133
+ if (missing.length === 0)
134
+ return;
135
+ const message = [
136
+ `Critical GSD workflow tool registration failed; missing required tool(s): ${missing.join(", ")}.`,
137
+ "Check earlier bootstrap warnings for the registration slot that failed.",
138
+ ].join(" ");
139
+ logWarning("bootstrap", message);
140
+ throw new Error(message);
141
+ }
124
142
  export function registerGsdExtension(pi) {
125
143
  // Note: registerGSDCommand is called by index.ts before this function,
126
144
  // so we intentionally skip it here to avoid double-registration.
@@ -186,4 +204,5 @@ export function registerGsdExtension(pi) {
186
204
  logWarning("bootstrap", `Failed to register ${name}: ${err instanceof Error ? err.message : String(err)}`);
187
205
  }
188
206
  }
207
+ assertCriticalGsdWorkflowToolsRegistered(pi);
189
208
  }