@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
@@ -81,6 +81,7 @@ import {
81
81
  resolveAutoSupervisorConfig,
82
82
  loadEffectiveGSDPreferences,
83
83
  getIsolationMode,
84
+ resolveEffectiveUnitIsolationMode,
84
85
  } from "./preferences.js";
85
86
  import { playNotificationBell, sendDesktopNotification } from "./notifications.js";
86
87
  import type { GSDPreferences } from "./preferences.js";
@@ -185,6 +186,7 @@ import {
185
186
  } from "./auto-worktree.js";
186
187
  import { pruneQueueOrder } from "./queue-order.js";
187
188
  import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
189
+ import { createMilestoneMergeTransaction } from "./milestone-merge-transaction.js";
188
190
 
189
191
  import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
190
192
  import {
@@ -225,8 +227,8 @@ import {
225
227
  getMilestoneSlices,
226
228
  getSlice,
227
229
  getTask,
228
- refreshOpenDatabaseFromDisk,
229
230
  } from "./gsd-db.js";
231
+ import { closeWorkflowDatabase } from "./db-workspace.js";
230
232
  import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
231
233
  import { writeUnitRuntimeRecord } from "./unit-runtime.js";
232
234
  import { countPendingCaptures } from "./captures.js";
@@ -320,7 +322,7 @@ export type {
320
322
  UnitRouting,
321
323
  StartModel,
322
324
  } from "./auto/session.js";
323
- import { autoSession as s } from "./auto-runtime-state.js";
325
+ import { autoSession as s, getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
324
326
  import { gsdHome } from "./gsd-home.js";
325
327
  import { createWorkspace, scopeMilestone } from "./workspace.js";
326
328
  import {
@@ -329,6 +331,11 @@ import {
329
331
  } from "./db/auto-workers.js";
330
332
  import { releaseMilestoneLease } from "./db/milestone-leases.js";
331
333
  import { normalizeRealPath } from "./paths.js";
334
+ import {
335
+ formatStopNoticePrefix,
336
+ isBlockedStopReason,
337
+ stopNoticeDisplayReason,
338
+ } from "./stop-notice.js";
332
339
 
333
340
  // ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
334
341
  // ALL mutable auto-mode state lives in the AutoSession class (auto/session.ts).
@@ -353,19 +360,7 @@ export function formatAutoStopNotification(prefix: string, totals: { cost: numbe
353
360
  ].join("\n");
354
361
  }
355
362
 
356
- function isBlockedStopReason(reason?: string | null): boolean {
357
- return /^Blocked:\s*/i.test(reason ?? "");
358
- }
359
-
360
- function formatAutoStopDisplayReason(reason?: string | null): string {
361
- return (reason ?? "").replace(/^Blocked:\s*/i, "").trim();
362
- }
363
-
364
- export function formatAutoStopNotificationPrefix(reason?: string | null): string {
365
- const displayReason = formatAutoStopDisplayReason(reason);
366
- const prefix = isBlockedStopReason(reason) ? "Auto-mode blocked" : "Auto-mode stopped";
367
- return displayReason ? `${prefix} — ${displayReason}` : prefix;
368
- }
363
+ export { formatStopNoticePrefix as formatAutoStopNotificationPrefix } from "./stop-notice.js";
369
364
 
370
365
  function clearSessionModelOverrideForCommandSession(ctx?: ExtensionContext | null): void {
371
366
  const sessionId =
@@ -633,22 +628,24 @@ export function shouldUseWorktreeIsolation(basePath?: string): boolean {
633
628
 
634
629
  type AutoIsolationMode = ReturnType<typeof getIsolationMode>;
635
630
 
636
- function resolveEffectiveUnitIsolationMode(
637
- configuredMode: AutoIsolationMode,
638
- isolationDegraded: boolean,
639
- ): AutoIsolationMode {
640
- return configuredMode === "worktree" && isolationDegraded ? "branch" : configuredMode;
641
- }
642
-
643
631
  export function _resolveEffectiveUnitIsolationModeForTest(
644
632
  configuredMode: AutoIsolationMode,
645
633
  isolationDegraded: boolean,
634
+ strandedRecoveryIsolationMode: "worktree" | "branch" | null = null,
646
635
  ): AutoIsolationMode {
647
- return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded);
636
+ return resolveEffectiveUnitIsolationMode(
637
+ configuredMode,
638
+ isolationDegraded,
639
+ strandedRecoveryIsolationMode,
640
+ );
648
641
  }
649
642
 
650
643
  function getEffectiveUnitIsolationMode(basePath: string): AutoIsolationMode {
651
- return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded);
644
+ return resolveEffectiveUnitIsolationMode(
645
+ getIsolationMode(basePath),
646
+ s.isolationDegraded,
647
+ s.strandedRecoveryIsolationMode,
648
+ );
652
649
  }
653
650
 
654
651
  /** Crash recovery prompt — set by startAuto, consumed by the main loop */
@@ -791,6 +788,7 @@ export { type AutoDashboardData } from "./auto-dashboard.js";
791
788
 
792
789
  export function getAutoDashboardData(): AutoDashboardData {
793
790
  const ledger = getLedger();
791
+ const runtimeSnapshot = getAutoRuntimeSnapshot();
794
792
  const totals = ledger ? getProjectTotals(ledger.units) : null;
795
793
  const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ?? null;
796
794
  const rtkSavings = sessionId && s.basePath
@@ -822,6 +820,7 @@ export function getAutoDashboardData(): AutoDashboardData {
822
820
  pendingCaptureCount,
823
821
  rtkSavings,
824
822
  rtkEnabled,
823
+ toolSurface: runtimeSnapshot.toolSurface,
825
824
  };
826
825
  }
827
826
 
@@ -1459,8 +1458,8 @@ export async function stopAuto(
1459
1458
  ): Promise<void> {
1460
1459
  if (!s.active && !s.paused) return;
1461
1460
  const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
1462
- const stopNotificationPrefix = formatAutoStopNotificationPrefix(reason);
1463
- const displayReason = formatAutoStopDisplayReason(reason);
1461
+ const stopNotificationPrefix = formatStopNoticePrefix(reason);
1462
+ const displayReason = stopNoticeDisplayReason(reason);
1464
1463
  const isHeadlessStop = process.env.GSD_HEADLESS === "1";
1465
1464
  const completionStopRequested = Boolean(options.completionWidget);
1466
1465
  const preserveCloseoutTranscript = !isHeadlessStop && (
@@ -1476,12 +1475,17 @@ export async function stopAuto(
1476
1475
  // worktree was active, and whether the current milestone was merged before
1477
1476
  // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
1478
1477
  try {
1479
- const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
1478
+ const {
1479
+ autoExitReasonForTerminalOutcome,
1480
+ emitAutoExit,
1481
+ normalizeAutoExitReason,
1482
+ } = await import("./worktree-telemetry.js");
1480
1483
  // Normalize the free-form reason to a closed set so the telemetry
1481
1484
  // aggregator buckets stably. Raw detail is preserved in the phases.ts
1482
1485
  // notification and the notify'd error string.
1483
1486
  const rawReason = reason ?? "stop";
1484
- const normalizedReason = normalizeAutoExitReason(rawReason);
1487
+ const normalizedReason = autoExitReasonForTerminalOutcome(options.terminalOutcome)
1488
+ ?? normalizeAutoExitReason(rawReason);
1485
1489
  const telemetryBase = s.originalBasePath || s.basePath;
1486
1490
  emitAutoExit(telemetryBase, {
1487
1491
  reason: normalizedReason,
@@ -1674,8 +1678,7 @@ export async function stopAuto(
1674
1678
  // ── Step 6: DB cleanup ──
1675
1679
  if (isDbAvailable()) {
1676
1680
  try {
1677
- const { closeDatabase } = await import("./gsd-db.js");
1678
- closeDatabase();
1681
+ closeWorkflowDatabase();
1679
1682
  } catch (e) {
1680
1683
  debugLog("db-close-failed", {
1681
1684
  error: e instanceof Error ? e.message : String(e),
@@ -2143,7 +2146,7 @@ export function buildWorktreeLifecycleDeps(): WorktreeLifecycleDeps {
2143
2146
  // C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
2144
2147
  //
2145
2148
  // Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
2146
- // worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
2149
+ // worktreeProjection, mergeMilestoneToMain transaction runner). Down from 18 at slice-7
2147
2150
  // closure.
2148
2151
  return {
2149
2152
  gitServiceFactory: (basePath: string) => {
@@ -2152,7 +2155,7 @@ export function buildWorktreeLifecycleDeps(): WorktreeLifecycleDeps {
2152
2155
  return new GitServiceImpl(basePath, gitConfig);
2153
2156
  },
2154
2157
  worktreeProjection: new WorktreeStateProjection(),
2155
- mergeMilestoneToMain,
2158
+ mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
2156
2159
  };
2157
2160
  }
2158
2161
 
@@ -43,10 +43,8 @@ import {
43
43
  } from "../error-classifier.js";
44
44
  import { blockModel, isModelBlocked } from "../blocked-models.js";
45
45
  import { getProjectGSDPreferencesPath } from "../preferences.js";
46
- import {
47
- formatProviderErrorGuidance,
48
- resolveProviderErrorGuidance,
49
- } from "../provider-error-guidance.js";
46
+ import { resolveProviderErrorGuidance } from "../provider-error-guidance.js";
47
+ import { formatGuidance } from "../guidance.js";
50
48
 
51
49
  const retryState = createRetryState();
52
50
  const MAX_NETWORK_RETRIES = 2;
@@ -627,7 +625,7 @@ export async function handleAgentEnd(
627
625
  preferencesPath: dash.basePath ? getProjectGSDPreferencesPath(dash.basePath) : undefined,
628
626
  hasConfiguredFallbacks: (modelConfig?.fallbacks.length ?? 0) > 0,
629
627
  });
630
- const guidanceText = formatProviderErrorGuidance(guidance);
628
+ const guidanceText = formatGuidance(guidance);
631
629
 
632
630
  await pauseForProviderModelRejection(ctx, pi, {
633
631
  errorDetail,
@@ -12,6 +12,7 @@ import { logError } from "../workflow-logger.js";
12
12
  import { getErrorMessage } from "../error-utils.js";
13
13
  import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
14
14
  import { prepareSaveGateResultArguments } from "../tools/save-gate-result-args.js";
15
+ import { aliasesForWorkflowTool } from "../workflow-tool-surface.js";
15
16
 
16
17
  async function loadWorkflowExecutors(): Promise<typeof import("../tools/workflow-tool-executors.js")> {
17
18
  return importWorkflowExecutorsModule();
@@ -53,6 +54,14 @@ function registerAlias(pi: ExtensionAPI, toolDef: any, aliasName: string, canoni
53
54
  });
54
55
  }
55
56
 
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but varies by schema
58
+ function registerWorkflowTool(pi: ExtensionAPI, toolDef: any): void {
59
+ pi.registerTool(toolDef);
60
+ for (const alias of aliasesForWorkflowTool(toolDef.name)) {
61
+ registerAlias(pi, toolDef, alias, toolDef.name);
62
+ }
63
+ }
64
+
56
65
  function requirementRootWriteGuard(operation: string, basePath: string): { content: Array<{ type: "text"; text: string }>; details: Record<string, unknown>; isError: true } | null {
57
66
  const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(basePath), "REQUIREMENTS");
58
67
  if (!guard.block) return null;
@@ -171,8 +180,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
171
180
  },
172
181
  };
173
182
 
174
- pi.registerTool(decisionSaveTool);
175
- registerAlias(pi, decisionSaveTool, "gsd_save_decision", "gsd_decision_save");
183
+ registerWorkflowTool(pi, decisionSaveTool);
176
184
 
177
185
  // ─── gsd_requirement_update (formerly gsd_update_requirement) ───────────
178
186
 
@@ -252,8 +260,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
252
260
  },
253
261
  };
254
262
 
255
- pi.registerTool(requirementUpdateTool);
256
- registerAlias(pi, requirementUpdateTool, "gsd_update_requirement", "gsd_requirement_update");
263
+ registerWorkflowTool(pi, requirementUpdateTool);
257
264
 
258
265
  // ─── gsd_requirement_save ─────────────────────────────────────────────
259
266
 
@@ -355,8 +362,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
355
362
  },
356
363
  };
357
364
 
358
- pi.registerTool(requirementSaveTool);
359
- registerAlias(pi, requirementSaveTool, "gsd_save_requirement", "gsd_requirement_save");
365
+ registerWorkflowTool(pi, requirementSaveTool);
360
366
 
361
367
  // ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
362
368
 
@@ -413,8 +419,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
413
419
  },
414
420
  };
415
421
 
416
- pi.registerTool(summarySaveTool);
417
- registerAlias(pi, summarySaveTool, "gsd_save_summary", "gsd_summary_save");
422
+ registerWorkflowTool(pi, summarySaveTool);
418
423
 
419
424
  // ─── gsd_uat_result_save ─────────────────────────────────────────────────
420
425
 
@@ -503,7 +508,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
503
508
  },
504
509
  };
505
510
 
506
- pi.registerTool(uatResultSaveTool);
511
+ registerWorkflowTool(pi, uatResultSaveTool);
507
512
 
508
513
  // ─── gsd_milestone_generate_id (formerly gsd_generate_milestone_id) ────
509
514
 
@@ -592,8 +597,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
592
597
  },
593
598
  };
594
599
 
595
- pi.registerTool(milestoneGenerateIdTool);
596
- registerAlias(pi, milestoneGenerateIdTool, "gsd_generate_milestone_id", "gsd_milestone_generate_id");
600
+ registerWorkflowTool(pi, milestoneGenerateIdTool);
597
601
 
598
602
  // ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
599
603
 
@@ -664,8 +668,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
664
668
  execute: planMilestoneExecute,
665
669
  };
666
670
 
667
- pi.registerTool(planMilestoneTool);
668
- registerAlias(pi, planMilestoneTool, "gsd_milestone_plan", "gsd_plan_milestone");
671
+ registerWorkflowTool(pi, planMilestoneTool);
669
672
 
670
673
  // ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
671
674
 
@@ -714,8 +717,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
714
717
  execute: planSliceExecute,
715
718
  };
716
719
 
717
- pi.registerTool(planSliceTool);
718
- registerAlias(pi, planSliceTool, "gsd_slice_plan", "gsd_plan_slice");
720
+ registerWorkflowTool(pi, planSliceTool);
719
721
 
720
722
  // ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
721
723
 
@@ -788,8 +790,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
788
790
  execute: planTaskExecute,
789
791
  };
790
792
 
791
- pi.registerTool(planTaskTool);
792
- registerAlias(pi, planTaskTool, "gsd_task_plan", "gsd_plan_task");
793
+ registerWorkflowTool(pi, planTaskTool);
793
794
 
794
795
  // ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
795
796
 
@@ -857,8 +858,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
857
858
  execute: taskCompleteExecute,
858
859
  };
859
860
 
860
- pi.registerTool(taskCompleteTool);
861
- registerAlias(pi, taskCompleteTool, "gsd_complete_task", "gsd_task_complete");
861
+ registerWorkflowTool(pi, taskCompleteTool);
862
862
 
863
863
  // ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
864
864
 
@@ -943,8 +943,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
943
943
  execute: sliceCompleteExecute,
944
944
  };
945
945
 
946
- pi.registerTool(sliceCompleteTool);
947
- registerAlias(pi, sliceCompleteTool, "gsd_complete_slice", "gsd_slice_complete");
946
+ registerWorkflowTool(pi, sliceCompleteTool);
948
947
 
949
948
  // ─── gsd_skip_slice (#3477 / #3487) ───────────────────────────────────
950
949
 
@@ -1016,7 +1015,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1016
1015
  }
1017
1016
  };
1018
1017
 
1019
- pi.registerTool({
1018
+ registerWorkflowTool(pi, {
1020
1019
  name: "gsd_skip_slice",
1021
1020
  label: "Skip Slice",
1022
1021
  description:
@@ -1081,8 +1080,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1081
1080
  execute: milestoneCompleteExecute,
1082
1081
  };
1083
1082
 
1084
- pi.registerTool(milestoneCompleteTool);
1085
- registerAlias(pi, milestoneCompleteTool, "gsd_milestone_complete", "gsd_complete_milestone");
1083
+ registerWorkflowTool(pi, milestoneCompleteTool);
1086
1084
 
1087
1085
  // ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
1088
1086
 
@@ -1121,8 +1119,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1121
1119
  execute: milestoneValidateExecute,
1122
1120
  };
1123
1121
 
1124
- pi.registerTool(milestoneValidateTool);
1125
- registerAlias(pi, milestoneValidateTool, "gsd_milestone_validate", "gsd_validate_milestone");
1122
+ registerWorkflowTool(pi, milestoneValidateTool);
1126
1123
 
1127
1124
  // ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
1128
1125
 
@@ -1172,8 +1169,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1172
1169
  execute: replanSliceExecute,
1173
1170
  };
1174
1171
 
1175
- pi.registerTool(replanSliceTool);
1176
- registerAlias(pi, replanSliceTool, "gsd_slice_replan", "gsd_replan_slice");
1172
+ registerWorkflowTool(pi, replanSliceTool);
1177
1173
 
1178
1174
  // ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
1179
1175
 
@@ -1231,8 +1227,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1231
1227
  execute: reassessRoadmapExecute,
1232
1228
  };
1233
1229
 
1234
- pi.registerTool(reassessRoadmapTool);
1235
- registerAlias(pi, reassessRoadmapTool, "gsd_roadmap_reassess", "gsd_reassess_roadmap");
1230
+ registerWorkflowTool(pi, reassessRoadmapTool);
1236
1231
 
1237
1232
  // ─── gsd_task_reopen (gsd_reopen_task alias) ───────────────────────────
1238
1233
  // Single-writer v3, Stream 3: reversibility tools for closed units.
@@ -1299,8 +1294,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1299
1294
  execute: reopenTaskExecute,
1300
1295
  };
1301
1296
 
1302
- pi.registerTool(reopenTaskTool);
1303
- registerAlias(pi, reopenTaskTool, "gsd_reopen_task", "gsd_task_reopen");
1297
+ registerWorkflowTool(pi, reopenTaskTool);
1304
1298
 
1305
1299
  // ─── gsd_slice_reopen (gsd_reopen_slice alias) ─────────────────────────
1306
1300
 
@@ -1366,8 +1360,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1366
1360
  execute: reopenSliceExecute,
1367
1361
  };
1368
1362
 
1369
- pi.registerTool(reopenSliceTool);
1370
- registerAlias(pi, reopenSliceTool, "gsd_reopen_slice", "gsd_slice_reopen");
1363
+ registerWorkflowTool(pi, reopenSliceTool);
1371
1364
 
1372
1365
  // ─── gsd_milestone_reopen (gsd_reopen_milestone alias) ─────────────────
1373
1366
 
@@ -1431,8 +1424,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
1431
1424
  execute: reopenMilestoneExecute,
1432
1425
  };
1433
1426
 
1434
- pi.registerTool(reopenMilestoneTool);
1435
- registerAlias(pi, reopenMilestoneTool, "gsd_reopen_milestone", "gsd_milestone_reopen");
1427
+ registerWorkflowTool(pi, reopenMilestoneTool);
1436
1428
 
1437
1429
  // ─── gsd_save_gate_result ──────────────────────────────────────────────
1438
1430
 
@@ -1500,5 +1492,5 @@ export function registerDbTools(pi: ExtensionAPI): void {
1500
1492
  },
1501
1493
  };
1502
1494
 
1503
- pi.registerTool(saveGateResultTool);
1495
+ registerWorkflowTool(pi, saveGateResultTool);
1504
1496
  }
@@ -2,16 +2,17 @@
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
 
7
7
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
8
8
  import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@gsd/pi-coding-agent";
9
9
 
10
10
  import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
11
- import { setLogBasePath, logWarning } from "../workflow-logger.js";
12
- import { resolveGsdPathContract } from "../paths.js";
11
+ import { logWarning } from "../workflow-logger.js";
12
+ import { openWorkflowDatabase } from "../db-workspace.js";
13
13
  import { getAutoWorktreePath } from "../auto-worktree.js";
14
14
  import { resolveWorktreeProjectRoot } from "../worktree-root.js";
15
+ import { worktreesDirs } from "../worktree-placement.js";
15
16
 
16
17
  export function safeWorkspaceCwd(): string {
17
18
  try {
@@ -46,13 +47,15 @@ export function resolveWorkflowToolBasePath(
46
47
  const worktree = getAutoWorktreePath(projectRoot, milestoneId);
47
48
  if (worktree) return worktree;
48
49
  } else {
49
- const worktreesDir = join(projectRoot, ".gsd", "worktrees");
50
- if (existsSync(worktreesDir)) {
50
+ const live: string[] = [];
51
+ for (const worktreesDir of worktreesDirs(projectRoot)) {
52
+ if (!existsSync(worktreesDir)) continue;
51
53
  try {
52
- const live = readdirSync(worktreesDir)
53
- .map((name) => join(worktreesDir, name))
54
- .filter((p) => existsSync(join(p, ".git")));
55
- if (live.length === 1) return live[0]!;
54
+ live.push(
55
+ ...readdirSync(worktreesDir)
56
+ .map((name) => join(worktreesDir, name))
57
+ .filter((p) => existsSync(join(p, ".git"))),
58
+ );
56
59
  } catch (err) {
57
60
  logWarning(
58
61
  "bootstrap",
@@ -60,49 +63,23 @@ export function resolveWorkflowToolBasePath(
60
63
  );
61
64
  }
62
65
  }
66
+ if (live.length === 1) return live[0]!;
63
67
  }
64
68
  return cwd;
65
69
  }
66
70
 
67
- /**
68
- * Resolve the correct DB path for the current working directory.
69
- * If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
70
- * the project root's `.gsd/gsd.db` (shared WAL — R012). Otherwise
71
- * returns `<basePath>/.gsd/gsd.db`.
72
- */
73
- export function resolveProjectRootDbPath(basePath: string): string {
74
- return resolveGsdPathContract(basePath).projectDb;
75
- }
71
+ export { resolveProjectRootDbPath } from "../db-workspace.js";
76
72
 
77
73
  export async function ensureDbOpen(basePath: string = safeWorkspaceCwd()): Promise<boolean> {
78
- try {
79
- const db = await import("../gsd-db.js");
80
- const contract = resolveGsdPathContract(basePath);
81
- const dbPath = contract.projectDb;
82
- const gsdDir = contract.projectGsd;
83
- const projectRoot = dirname(dirname(dbPath));
84
-
85
- // Open existing DB file (may be at project root for worktrees)
86
- if (existsSync(dbPath)) {
87
- const opened = db.openDatabase(dbPath);
88
- if (opened) setLogBasePath(projectRoot);
89
- return opened;
90
- }
91
-
92
- // No DB file — create an empty authoritative DB. Markdown migration is
93
- // explicit-only; runtime startup must not import projections into state.
94
- if (existsSync(gsdDir)) {
95
- const opened = db.openDatabase(dbPath);
96
- if (opened) setLogBasePath(projectRoot);
97
- return opened;
98
- }
74
+ const result = openWorkflowDatabase(basePath);
75
+ if (result.ok) return true;
99
76
 
77
+ if (result.reason === "missing-gsd-dir") {
100
78
  logWarning("bootstrap", "ensureDbOpen failed — no .gsd directory found");
101
- return false;
102
- } catch (err) {
103
- logWarning("bootstrap", `ensureDbOpen failed: ${(err as Error).message ?? String(err)}`);
104
- return false;
79
+ } else {
80
+ logWarning("bootstrap", `ensureDbOpen failed: ${result.error?.message ?? "open failed"}`);
105
81
  }
82
+ return false;
106
83
  }
107
84
 
108
85
  export function registerDynamicTools(pi: ExtensionAPI): void {
@@ -5,6 +5,7 @@
5
5
  import { Type } from "@sinclair/typebox";
6
6
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
7
7
  import { ensureDbOpen, resolveCtxCwd } from "./dynamic-tools.js";
8
+ import { checkpointWorkflowDatabase } from "../db-workspace.js";
8
9
 
9
10
 
10
11
  export function registerQueryTools(pi: ExtensionAPI): void {
@@ -57,8 +58,7 @@ export function registerQueryTools(pi: ExtensionAPI): void {
57
58
  details: { operation: "checkpoint_db", error: "db_unavailable" },
58
59
  };
59
60
  }
60
- const { checkpointDatabase } = await import("../gsd-db.js");
61
- checkpointDatabase();
61
+ checkpointWorkflowDatabase();
62
62
  return {
63
63
  content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
64
64
  details: { operation: "checkpoint_db", status: "ok" },
@@ -17,6 +17,7 @@ import { registerHooks } from "./register-hooks.js";
17
17
  import { registerShortcuts } from "./register-shortcuts.js";
18
18
  import { writeCrashLog } from "./crash-log.js";
19
19
  import { logWarning } from "../workflow-logger.js";
20
+ import { UNIT_TOOL_CONTRACTS } from "../unit-tool-contracts.js";
20
21
  // Static import so cmux event listeners are registered synchronously during
21
22
  // extension bootstrap. Prior implementation used `void import().then()` which
22
23
  // queued listener registration as a microtask — any CMUX_CHANNELS emit fired
@@ -37,6 +38,12 @@ const EPIPE_STORM_WINDOW_MS = 10_000;
37
38
  let epipeCount = 0;
38
39
  let epipeWindowStart = 0;
39
40
 
41
+ export const CRITICAL_GSD_WORKFLOW_TOOL_NAMES = [...new Set(
42
+ Object.values(UNIT_TOOL_CONTRACTS)
43
+ .flatMap((contract) => contract.requiredWorkflowTools)
44
+ .filter((toolName) => toolName.startsWith("gsd_")),
45
+ )].sort();
46
+
40
47
  /** Write to stderr without ever re-throwing — stderr can EPIPE too, which would
41
48
  * re-enter this handler and re-loop. */
42
49
  function safeStderr(msg: string): void {
@@ -133,6 +140,21 @@ export function installEpipeGuard(): void {
133
140
  }
134
141
  }
135
142
 
143
+ function assertCriticalGsdWorkflowToolsRegistered(pi: ExtensionAPI): void {
144
+ if (typeof pi.getAllTools !== "function") return;
145
+
146
+ const registered = new Set(pi.getAllTools().map((tool) => tool.name));
147
+ const missing = CRITICAL_GSD_WORKFLOW_TOOL_NAMES.filter((toolName) => !registered.has(toolName));
148
+ if (missing.length === 0) return;
149
+
150
+ const message = [
151
+ `Critical GSD workflow tool registration failed; missing required tool(s): ${missing.join(", ")}.`,
152
+ "Check earlier bootstrap warnings for the registration slot that failed.",
153
+ ].join(" ");
154
+ logWarning("bootstrap", message);
155
+ throw new Error(message);
156
+ }
157
+
136
158
  export function registerGsdExtension(pi: ExtensionAPI): void {
137
159
  // Note: registerGSDCommand is called by index.ts before this function,
138
160
  // so we intentionally skip it here to avoid double-registration.
@@ -214,4 +236,6 @@ export function registerGsdExtension(pi: ExtensionAPI): void {
214
236
  );
215
237
  }
216
238
  }
239
+
240
+ assertCriticalGsdWorkflowToolsRegistered(pi);
217
241
  }