@opengsd/gsd-pi 1.2.0 → 1.3.0-dev.72e3af2a

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 (1809) hide show
  1. package/README.md +13 -7
  2. package/dist/cli-model-override.d.ts +15 -0
  3. package/dist/cli-model-override.js +21 -0
  4. package/dist/cli-style.d.ts +17 -0
  5. package/dist/cli-style.js +28 -0
  6. package/dist/cli-web-branch.d.ts +2 -0
  7. package/dist/cli-web-branch.js +9 -2
  8. package/dist/cli.js +30 -20
  9. package/dist/headless-context.js +0 -1
  10. package/dist/headless-events.d.ts +20 -3
  11. package/dist/headless-events.js +33 -36
  12. package/dist/headless.js +8 -1
  13. package/dist/help-text.js +34 -0
  14. package/dist/hermes-integration-install.d.ts +17 -0
  15. package/dist/hermes-integration-install.js +199 -0
  16. package/dist/jiti-workspace-aliases.d.ts +11 -2
  17. package/dist/jiti-workspace-aliases.js +19 -3
  18. package/dist/loader.js +6 -4
  19. package/dist/mcp-server.js +2 -1
  20. package/dist/models-resolver.d.ts +3 -13
  21. package/dist/models-resolver.js +3 -22
  22. package/dist/onboarding.js +9 -4
  23. package/dist/provider-migrations.d.ts +23 -0
  24. package/dist/provider-migrations.js +41 -0
  25. package/dist/read-cli.d.ts +23 -0
  26. package/dist/read-cli.js +90 -0
  27. package/dist/register-agent-bundles.d.ts +11 -2
  28. package/dist/register-agent-bundles.js +18 -4
  29. package/dist/resource-loader.d.ts +10 -5
  30. package/dist/resource-loader.js +121 -27
  31. package/dist/resources/.managed-resources-content-hash +1 -1
  32. package/dist/resources/GSD-WORKFLOW.md +27 -26
  33. package/dist/resources/extensions/ask-user-questions.js +81 -25
  34. package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
  35. package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
  36. package/dist/resources/extensions/async-jobs/index.js +65 -0
  37. package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
  38. package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
  39. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
  40. package/dist/resources/extensions/bg-shell/overlay.js +9 -6
  41. package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
  42. package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
  43. package/dist/resources/extensions/bg-shell/utilities.js +5 -2
  44. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
  45. package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
  46. package/dist/resources/extensions/browser-tools/index.js +69 -12
  47. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  48. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  49. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +622 -440
  50. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +256 -0
  51. package/dist/resources/extensions/github-sync/templates.js +3 -3
  52. package/dist/resources/extensions/google-cli/stream-adapter.js +98 -16
  53. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  54. package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
  55. package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
  56. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
  57. package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
  58. package/dist/resources/extensions/gsd/auto/dispatch-history.js +125 -0
  59. package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
  60. package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
  61. package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
  62. package/dist/resources/extensions/gsd/auto/loop.js +147 -58
  63. package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
  64. package/dist/resources/extensions/gsd/auto/orchestrator.js +361 -80
  65. package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
  66. package/dist/resources/extensions/gsd/auto/phases.js +17 -2299
  67. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -0
  68. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  69. package/dist/resources/extensions/gsd/auto/session.js +9 -0
  70. package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
  71. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  72. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  73. package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
  74. package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
  75. package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
  76. package/dist/resources/extensions/gsd/auto-dashboard.js +271 -435
  77. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +26 -37
  78. package/dist/resources/extensions/gsd/auto-dispatch.js +122 -89
  79. package/dist/resources/extensions/gsd/auto-model-selection.js +56 -19
  80. package/dist/resources/extensions/gsd/auto-post-unit.js +85 -45
  81. package/dist/resources/extensions/gsd/auto-prompts.js +221 -57
  82. package/dist/resources/extensions/gsd/auto-recovery.js +63 -487
  83. package/dist/resources/extensions/gsd/auto-runtime-state.js +26 -0
  84. package/dist/resources/extensions/gsd/auto-start.js +116 -82
  85. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
  86. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  87. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  88. package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
  89. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +14 -47
  90. package/dist/resources/extensions/gsd/auto-verification.js +34 -38
  91. package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
  92. package/dist/resources/extensions/gsd/auto-worktree.js +230 -467
  93. package/dist/resources/extensions/gsd/auto.js +158 -50
  94. package/dist/resources/extensions/gsd/blocked-models.js +28 -0
  95. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +161 -62
  96. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +38 -0
  97. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +34 -38
  98. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +74 -50
  99. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +4 -2
  100. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  101. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  102. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +42 -1
  103. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +431 -186
  104. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  105. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +68 -10
  106. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  107. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +476 -83
  108. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  109. package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
  110. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  111. package/dist/resources/extensions/gsd/captures.js +5 -15
  112. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +110 -5
  113. package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
  114. package/dist/resources/extensions/gsd/closeout-wizard.js +97 -0
  115. package/dist/resources/extensions/gsd/codebase-generator.js +1 -0
  116. package/dist/resources/extensions/gsd/commands/catalog.js +12 -62
  117. package/dist/resources/extensions/gsd/commands/context.js +16 -2
  118. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  119. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  120. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  121. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  122. package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
  123. package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
  124. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  125. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  126. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  127. package/dist/resources/extensions/gsd/commands-handlers.js +133 -4
  128. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  129. package/dist/resources/extensions/gsd/commands-maintenance.js +140 -43
  130. package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
  131. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +30 -11
  132. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  133. package/dist/resources/extensions/gsd/commands-verdict.js +21 -5
  134. package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
  135. package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
  136. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  137. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  138. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  139. package/dist/resources/extensions/gsd/config-overlay.js +11 -8
  140. package/dist/resources/extensions/gsd/consent-question.js +365 -0
  141. package/dist/resources/extensions/gsd/consent-verdict.js +73 -0
  142. package/dist/resources/extensions/gsd/constants.js +0 -2
  143. package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
  144. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  145. package/dist/resources/extensions/gsd/db/engine.js +800 -0
  146. package/dist/resources/extensions/gsd/db/queries.js +542 -0
  147. package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
  148. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  149. package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
  150. package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
  151. package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
  152. package/dist/resources/extensions/gsd/db/writers/reconcile.js +476 -0
  153. package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
  154. package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
  155. package/dist/resources/extensions/gsd/db-transaction.js +27 -23
  156. package/dist/resources/extensions/gsd/db-workspace.js +167 -0
  157. package/dist/resources/extensions/gsd/db-writer.js +8 -17
  158. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  159. package/dist/resources/extensions/gsd/discussion-handoff.js +222 -0
  160. package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
  161. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  162. package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
  163. package/dist/resources/extensions/gsd/doctor-environment.js +261 -136
  164. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  165. package/dist/resources/extensions/gsd/doctor-git-checks.js +36 -25
  166. package/dist/resources/extensions/gsd/doctor-providers.js +93 -9
  167. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +34 -40
  168. package/dist/resources/extensions/gsd/doctor.js +43 -15
  169. package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
  170. package/dist/resources/extensions/gsd/error-classifier.js +22 -1
  171. package/dist/resources/extensions/gsd/escalation.js +11 -4
  172. package/dist/resources/extensions/gsd/exec-sandbox.js +75 -19
  173. package/dist/resources/extensions/gsd/export-html.js +10 -3
  174. package/dist/resources/extensions/gsd/export.js +73 -0
  175. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  176. package/dist/resources/extensions/gsd/files.js +33 -19
  177. package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
  178. package/dist/resources/extensions/gsd/forensics.js +4 -33
  179. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  180. package/dist/resources/extensions/gsd/git-service.js +12 -8
  181. package/dist/resources/extensions/gsd/gitignore.js +9 -2
  182. package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
  183. package/dist/resources/extensions/gsd/gsd-db.js +185 -2054
  184. package/dist/resources/extensions/gsd/guidance.js +158 -0
  185. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  186. package/dist/resources/extensions/gsd/guided-flow.js +184 -478
  187. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  188. package/dist/resources/extensions/gsd/health-widget.js +117 -32
  189. package/dist/resources/extensions/gsd/layout-policy.js +77 -0
  190. package/dist/resources/extensions/gsd/markdown-renderer.js +408 -123
  191. package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
  192. package/dist/resources/extensions/gsd/mcp-filter.js +48 -30
  193. package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
  194. package/dist/resources/extensions/gsd/md-importer.js +157 -54
  195. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +45 -22
  196. package/dist/resources/extensions/gsd/memory-relations.js +1 -1
  197. package/dist/resources/extensions/gsd/metrics.js +19 -11
  198. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  199. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  200. package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
  201. package/dist/resources/extensions/gsd/migrate-external.js +51 -6
  202. package/dist/resources/extensions/gsd/migration-auto-check.js +54 -19
  203. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  204. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  205. package/dist/resources/extensions/gsd/milestone-closeout.js +108 -29
  206. package/dist/resources/extensions/gsd/milestone-ids.js +79 -18
  207. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  208. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  209. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +164 -0
  210. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  211. package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
  212. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  213. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  214. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +60 -0
  215. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  216. package/dist/resources/extensions/gsd/model-router.js +82 -20
  217. package/dist/resources/extensions/gsd/native-git-bridge.js +36 -0
  218. package/dist/resources/extensions/gsd/notification-store.js +33 -33
  219. package/dist/resources/extensions/gsd/notifications.js +48 -14
  220. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  221. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  222. package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
  223. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +144 -42
  224. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  225. package/dist/resources/extensions/gsd/parsers-legacy.js +56 -18
  226. package/dist/resources/extensions/gsd/paths.js +393 -68
  227. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  228. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  229. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  230. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  231. package/dist/resources/extensions/gsd/preferences-models.js +46 -60
  232. package/dist/resources/extensions/gsd/preferences.js +302 -35
  233. package/dist/resources/extensions/gsd/projection-flush.js +7 -0
  234. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  235. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  236. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  237. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  238. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  239. package/dist/resources/extensions/gsd/prompts/code-review.md +39 -0
  240. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  241. package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  242. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  243. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  244. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  245. package/dist/resources/extensions/gsd/prompts/execute-task.md +9 -2
  246. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  247. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  248. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  249. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  250. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  251. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  252. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  253. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  254. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  255. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  256. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  257. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  258. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  259. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  260. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  261. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  262. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  263. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  264. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  265. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  266. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  267. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  268. package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  269. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  270. package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  271. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
  272. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  273. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  274. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  275. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  276. package/dist/resources/extensions/gsd/prompts/run-uat.md +13 -5
  277. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  278. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  279. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  280. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  281. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  282. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  283. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  284. package/dist/resources/extensions/gsd/prompts/system.md +6 -3
  285. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  286. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  287. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  288. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  289. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  290. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  291. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  292. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  293. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  294. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  295. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  296. package/dist/resources/extensions/gsd/provider-error-guidance.js +25 -5
  297. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  298. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  299. package/dist/resources/extensions/gsd/publication.js +87 -0
  300. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  301. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  302. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  303. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  304. package/dist/resources/extensions/gsd/quick.js +45 -2
  305. package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
  306. package/dist/resources/extensions/gsd/recovery-classification.js +49 -87
  307. package/dist/resources/extensions/gsd/roadmap-slices.js +34 -6
  308. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  309. package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
  310. package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
  311. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +50 -3
  312. package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
  313. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  314. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  315. package/dist/resources/extensions/gsd/session-lock.js +12 -10
  316. package/dist/resources/extensions/gsd/skill-activation.js +3 -6
  317. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  318. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  319. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  320. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  321. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  322. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  323. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  324. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  325. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
  326. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  327. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  328. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  329. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  330. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  331. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +138 -19
  332. package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
  333. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
  334. package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
  335. package/dist/resources/extensions/gsd/state.js +19 -589
  336. package/dist/resources/extensions/gsd/status-guards.js +56 -8
  337. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  338. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  339. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  340. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  341. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  342. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  343. package/dist/resources/extensions/gsd/tool-contract.js +66 -11
  344. package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
  345. package/dist/resources/extensions/gsd/tool-surface-readiness.js +297 -0
  346. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  347. package/dist/resources/extensions/gsd/tools/complete-milestone.js +7 -4
  348. package/dist/resources/extensions/gsd/tools/complete-slice.js +58 -57
  349. package/dist/resources/extensions/gsd/tools/complete-task.js +118 -12
  350. package/dist/resources/extensions/gsd/tools/exec-tool.js +14 -114
  351. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  352. package/dist/resources/extensions/gsd/tools/plan-slice.js +13 -9
  353. package/dist/resources/extensions/gsd/tools/plan-task.js +18 -3
  354. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +50 -5
  355. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
  356. package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
  357. package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
  358. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
  359. package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
  360. package/dist/resources/extensions/gsd/tools/validate-milestone.js +21 -79
  361. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +110 -6
  362. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  363. package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
  364. package/dist/resources/extensions/gsd/uat-policy.js +57 -25
  365. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  366. package/dist/resources/extensions/gsd/undo.js +16 -16
  367. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  368. package/dist/resources/extensions/gsd/unit-context-composer.js +130 -21
  369. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  370. package/dist/resources/extensions/gsd/unit-registry.js +419 -0
  371. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  372. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
  373. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  374. package/dist/resources/extensions/gsd/validation-block-guard.js +55 -3
  375. package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
  376. package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
  377. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  378. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  379. package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
  380. package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
  381. package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
  382. package/dist/resources/extensions/gsd/workflow-events.js +6 -18
  383. package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
  384. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
  385. package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
  386. package/dist/resources/extensions/gsd/workflow-mcp.js +24 -103
  387. package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
  388. package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
  389. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  390. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  391. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  392. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  393. package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
  394. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  395. package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
  396. package/dist/resources/extensions/gsd/worktree-manager.js +204 -46
  397. package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
  398. package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
  399. package/dist/resources/extensions/gsd/worktree-root.js +28 -6
  400. package/dist/resources/extensions/gsd/worktree-safety.js +48 -34
  401. package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
  402. package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
  403. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  404. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  405. package/dist/resources/extensions/gsd/worktree.js +8 -1
  406. package/dist/resources/extensions/mcp-client/manager.js +9 -4
  407. package/dist/resources/extensions/search-the-web/index.js +41 -9
  408. package/dist/resources/extensions/search-the-web/native-search.js +23 -7
  409. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  410. package/dist/resources/extensions/shared/gsd-browser-cli.js +156 -8
  411. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  412. package/dist/resources/extensions/subagent/index.js +20 -15
  413. package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
  414. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  415. package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
  416. package/dist/resources/shared/package-manager-detection.js +1 -1
  417. package/dist/resources/shared/package.json +3 -0
  418. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  419. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  420. package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
  421. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  422. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  423. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  424. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  425. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  426. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  427. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  428. package/dist/runtime-checks.d.ts +10 -0
  429. package/dist/runtime-checks.js +27 -0
  430. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  431. package/dist/update-check.d.ts +2 -0
  432. package/dist/update-check.js +39 -5
  433. package/dist/update-cmd.js +40 -3
  434. package/dist/web/standalone/.next/BUILD_ID +1 -1
  435. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  436. package/dist/web/standalone/.next/build-manifest.json +4 -4
  437. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  438. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  439. package/dist/web/standalone/.next/required-server-files.json +3 -3
  440. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  441. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  442. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  443. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  444. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  445. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  446. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  447. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  448. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  449. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  450. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  451. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  452. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  453. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  454. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  455. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  456. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  457. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  458. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  459. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  460. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  461. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  462. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  463. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  464. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  465. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  466. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  467. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  468. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  469. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  470. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  471. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  472. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  473. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  474. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  475. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  476. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  477. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  478. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  479. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  480. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  481. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  482. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  483. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  484. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  485. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  486. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  487. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  488. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  489. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  490. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  491. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  492. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  493. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  494. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  495. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  496. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  497. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  498. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  499. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  500. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  501. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  502. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  503. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  504. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  505. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  506. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  507. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  508. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  509. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  510. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  511. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  512. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  513. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  514. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  515. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  516. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  517. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  518. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  519. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  520. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  521. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  522. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  523. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  524. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  525. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  526. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  527. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  528. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  529. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  530. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  531. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  532. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  533. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  534. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  535. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  536. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  537. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  538. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  539. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  540. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  541. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  542. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  543. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  544. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  545. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  546. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  547. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  548. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  549. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  550. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  551. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  552. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  553. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  554. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  555. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  556. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  557. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  558. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  559. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  560. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  561. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  562. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  563. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  564. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  565. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  566. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  567. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  568. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  569. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  570. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  571. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  572. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  573. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  574. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  575. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  576. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  577. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  578. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  579. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  580. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  581. package/dist/web/standalone/.next/server/app/index.html +1 -1
  582. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  583. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  584. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  585. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  586. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  587. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  588. package/dist/web/standalone/.next/server/app/page.js +2 -2
  589. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  590. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  591. package/dist/web/standalone/.next/server/chunks/1128.js +2 -0
  592. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  593. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  594. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  595. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  596. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  597. package/dist/web/standalone/.next/server/middleware.js +3 -3
  598. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  599. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  600. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  601. package/dist/web/standalone/.next/static/chunks/2659.58e950899a9bb82f.js +1 -0
  602. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  603. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.61a2af74bb8833c8.js} +1 -1
  604. package/dist/web/standalone/.next/static/chunks/4283.d0d9e0a955e441cb.js +2 -0
  605. package/dist/web/standalone/.next/static/chunks/5826.5421d66c72b9f34e.js +1 -0
  606. package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
  607. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  608. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  609. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  610. package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
  611. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  612. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  613. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  614. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  615. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  616. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  617. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  618. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  619. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  620. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  621. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  622. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  623. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  624. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  625. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  626. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  627. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  628. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  629. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  630. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  631. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  632. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  633. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  634. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  635. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  636. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  637. package/dist/web/standalone/package.json +1 -1
  638. package/dist/web/standalone/server.js +1 -1
  639. package/dist/web-mode.d.ts +5 -1
  640. package/dist/web-mode.js +27 -13
  641. package/dist/worktree-cli.js +3 -6
  642. package/dist/worktree-status-banner.js +7 -11
  643. package/integrations/hermes/README.md +48 -0
  644. package/integrations/hermes/docs/setup.md +272 -0
  645. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  646. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  647. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  648. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  649. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  650. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  651. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  652. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  653. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  654. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  655. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  656. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  657. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  658. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  659. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  660. package/integrations/hermes/plugin.yaml +38 -0
  661. package/integrations/hermes/pyproject.toml +32 -0
  662. package/integrations/hermes/scripts/preflight.sh +92 -0
  663. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  664. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  665. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  666. package/integrations/hermes/tests/test_binding.py +103 -0
  667. package/integrations/hermes/tests/test_config.py +36 -0
  668. package/integrations/hermes/tests/test_cron.py +34 -0
  669. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  670. package/integrations/hermes/tests/test_memory.py +59 -0
  671. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  672. package/integrations/hermes/tests/test_register.py +56 -0
  673. package/integrations/hermes/tests/test_snapshot.py +53 -0
  674. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  675. package/package.json +19 -14
  676. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  677. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  678. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  679. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  680. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  681. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  682. package/packages/cloud-mcp-gateway/package.json +2 -2
  683. package/packages/contracts/dist/rpc.d.ts +1 -0
  684. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  685. package/packages/contracts/dist/rpc.js.map +1 -1
  686. package/packages/contracts/dist/workflow.d.ts +5 -0
  687. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  688. package/packages/contracts/dist/workflow.js +2 -0
  689. package/packages/contracts/dist/workflow.js.map +1 -1
  690. package/packages/contracts/package.json +1 -1
  691. package/packages/daemon/package.json +4 -4
  692. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  693. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  694. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  695. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  696. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  697. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  698. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  699. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  700. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  701. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  702. package/packages/gsd-agent-core/dist/index.js +2 -0
  703. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  704. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  705. package/packages/gsd-agent-core/dist/sdk.js +12 -6
  706. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  707. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  708. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  709. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  710. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  711. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  712. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  713. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  714. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  715. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  716. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  717. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  718. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  719. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  720. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  721. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  722. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  723. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  724. package/packages/gsd-agent-core/package.json +5 -5
  725. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
  726. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
  728. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
  730. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
  732. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
  734. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
  736. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
  738. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
  740. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  741. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
  742. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  743. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
  744. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  745. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
  746. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
  747. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
  748. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
  749. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
  750. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
  751. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
  752. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
  753. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
  754. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
  755. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
  756. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
  757. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
  758. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
  759. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
  760. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  761. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
  762. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
  763. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  764. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  765. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
  766. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  767. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
  768. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  769. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
  770. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  771. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +18 -0
  772. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  773. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +110 -22
  774. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  775. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +71 -3
  776. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  777. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +257 -37
  778. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  779. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
  780. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  781. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
  782. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
  783. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  784. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  785. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  786. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  787. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +6 -24
  788. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  789. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +63 -777
  790. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  791. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  792. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  793. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  794. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  795. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  796. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  797. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  798. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  799. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  800. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  801. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
  802. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  803. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  804. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  805. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  806. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  807. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
  808. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
  809. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
  810. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  811. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +13 -1
  812. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  813. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  814. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
  815. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  816. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  817. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +14 -6
  818. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  819. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
  820. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  821. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
  822. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  823. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +31 -0
  824. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  825. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
  826. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
  827. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
  828. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
  829. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
  830. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
  831. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
  832. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +13 -0
  833. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  834. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  835. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  836. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  837. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  838. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  839. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  840. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +14 -3
  841. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  842. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +57 -6
  843. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  844. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
  845. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
  846. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
  847. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
  848. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
  849. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
  850. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
  851. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
  852. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
  853. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  854. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  855. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  856. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  857. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  858. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  859. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  860. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  861. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  862. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +24 -1
  863. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  864. package/packages/gsd-agent-modes/package.json +7 -7
  865. package/packages/mcp-server/README.md +23 -4
  866. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  867. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  868. package/packages/mcp-server/dist/cli-errors.js +12 -0
  869. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  870. package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
  871. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
  872. package/packages/mcp-server/dist/cli-runner.js +170 -0
  873. package/packages/mcp-server/dist/cli-runner.js.map +1 -0
  874. package/packages/mcp-server/dist/cli.d.ts +1 -0
  875. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  876. package/packages/mcp-server/dist/cli.js +3 -50
  877. package/packages/mcp-server/dist/cli.js.map +1 -1
  878. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
  879. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
  880. package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
  881. package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
  882. package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
  883. package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
  884. package/packages/mcp-server/dist/pid-registry.js +459 -0
  885. package/packages/mcp-server/dist/pid-registry.js.map +1 -0
  886. package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
  887. package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
  888. package/packages/mcp-server/dist/probe-mode.js +10 -0
  889. package/packages/mcp-server/dist/probe-mode.js.map +1 -0
  890. package/packages/mcp-server/dist/server.d.ts +40 -1
  891. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  892. package/packages/mcp-server/dist/server.js +97 -6
  893. package/packages/mcp-server/dist/server.js.map +1 -1
  894. package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
  895. package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
  896. package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
  897. package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
  898. package/packages/mcp-server/dist/workflow-tools.d.ts +62 -1
  899. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  900. package/packages/mcp-server/dist/workflow-tools.js +243 -123
  901. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  902. package/packages/mcp-server/package.json +21 -4
  903. package/packages/native/package.json +1 -1
  904. package/packages/pi-agent-core/dist/agent-loop.js +52 -2
  905. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  906. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
  907. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  908. package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
  909. package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  910. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  911. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  912. package/packages/pi-agent-core/dist/index.js +3 -0
  913. package/packages/pi-agent-core/dist/index.js.map +1 -1
  914. package/packages/pi-agent-core/package.json +1 -1
  915. package/packages/pi-ai/README.md +1 -0
  916. package/packages/pi-ai/dist/index.d.ts +2 -0
  917. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  918. package/packages/pi-ai/dist/index.js +2 -0
  919. package/packages/pi-ai/dist/index.js.map +1 -1
  920. package/packages/pi-ai/dist/models.generated.d.ts +183 -76
  921. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  922. package/packages/pi-ai/dist/models.generated.js +205 -124
  923. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  924. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  925. package/packages/pi-ai/dist/providers/anthropic.js +12 -7
  926. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  927. package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
  928. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  929. package/packages/pi-ai/dist/providers/google-shared.js +12 -3
  930. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  931. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  932. package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
  933. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  934. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
  935. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
  936. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
  937. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
  938. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  939. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
  940. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  941. package/packages/pi-ai/package.json +3 -2
  942. package/packages/pi-coding-agent/README.md +3 -2
  943. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
  944. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  945. package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
  946. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  947. package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
  948. package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
  949. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  950. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
  951. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
  952. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
  953. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  954. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  955. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  956. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
  957. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  958. package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
  959. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  960. package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
  961. package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
  962. package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
  963. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  964. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  965. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  966. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  967. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  968. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  969. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  970. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  971. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  972. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  973. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  974. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  975. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
  976. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  977. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  978. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  979. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  980. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  981. package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
  982. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  983. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  984. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  985. package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
  986. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  987. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
  988. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  989. package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
  990. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  991. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  992. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  993. package/packages/pi-coding-agent/dist/index.js +1 -1
  994. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  995. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  996. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  997. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  998. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  999. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  1000. package/packages/pi-coding-agent/dist/theme/theme.js +56 -24
  1001. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  1002. package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
  1003. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  1004. package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
  1005. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  1006. package/packages/pi-coding-agent/package.json +8 -8
  1007. package/packages/pi-tui/README.md +15 -0
  1008. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  1009. package/packages/pi-tui/dist/autocomplete.js +6 -1
  1010. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  1011. package/packages/pi-tui/dist/components/input.js +2 -2
  1012. package/packages/pi-tui/dist/components/input.js.map +1 -1
  1013. package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
  1014. package/packages/pi-tui/dist/components/loader.js +1 -0
  1015. package/packages/pi-tui/dist/components/loader.js.map +1 -1
  1016. package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
  1017. package/packages/pi-tui/dist/components/select-list.js +8 -2
  1018. package/packages/pi-tui/dist/components/select-list.js.map +1 -1
  1019. package/packages/pi-tui/dist/index.d.ts +2 -2
  1020. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  1021. package/packages/pi-tui/dist/index.js +2 -2
  1022. package/packages/pi-tui/dist/index.js.map +1 -1
  1023. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  1024. package/packages/pi-tui/dist/keys.js +39 -30
  1025. package/packages/pi-tui/dist/keys.js.map +1 -1
  1026. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  1027. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  1028. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  1029. package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
  1030. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  1031. package/packages/pi-tui/dist/terminal-image.js +54 -2
  1032. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  1033. package/packages/pi-tui/dist/terminal.d.ts +12 -0
  1034. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  1035. package/packages/pi-tui/dist/terminal.js +70 -25
  1036. package/packages/pi-tui/dist/terminal.js.map +1 -1
  1037. package/packages/pi-tui/dist/tui.d.ts +15 -0
  1038. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  1039. package/packages/pi-tui/dist/tui.js +115 -21
  1040. package/packages/pi-tui/dist/tui.js.map +1 -1
  1041. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  1042. package/packages/pi-tui/dist/utils.js +110 -36
  1043. package/packages/pi-tui/dist/utils.js.map +1 -1
  1044. package/packages/pi-tui/package.json +2 -2
  1045. package/packages/rpc-client/package.json +2 -2
  1046. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  1047. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  1048. package/pkg/dist/theme/theme-schema.js +1 -1
  1049. package/pkg/dist/theme/theme-schema.js.map +1 -1
  1050. package/pkg/dist/theme/theme.d.ts.map +1 -1
  1051. package/pkg/dist/theme/theme.js +56 -24
  1052. package/pkg/dist/theme/theme.js.map +1 -1
  1053. package/pkg/package.json +1 -1
  1054. package/scripts/install/deps.js +10 -0
  1055. package/scripts/link-workspace-packages.cjs +7 -40
  1056. package/src/resources/GSD-WORKFLOW.md +27 -26
  1057. package/src/resources/extensions/ask-user-questions.ts +94 -26
  1058. package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
  1059. package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
  1060. package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
  1061. package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
  1062. package/src/resources/extensions/async-jobs/index.ts +79 -0
  1063. package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
  1064. package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
  1065. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
  1066. package/src/resources/extensions/bg-shell/overlay.ts +9 -5
  1067. package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
  1068. package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
  1069. package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
  1070. package/src/resources/extensions/bg-shell/utilities.ts +5 -2
  1071. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  1072. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  1073. package/src/resources/extensions/browser-tools/index.ts +71 -13
  1074. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  1075. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +120 -1
  1076. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  1077. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  1078. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  1079. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +744 -495
  1080. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
  1081. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1192 -7
  1082. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +324 -0
  1083. package/src/resources/extensions/github-sync/templates.ts +3 -3
  1084. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  1085. package/src/resources/extensions/google-cli/stream-adapter.ts +128 -20
  1086. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  1087. package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
  1088. package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
  1089. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  1090. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
  1091. package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
  1092. package/src/resources/extensions/gsd/auto/dispatch-history.ts +186 -0
  1093. package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
  1094. package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
  1095. package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
  1096. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
  1097. package/src/resources/extensions/gsd/auto/loop.ts +158 -63
  1098. package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
  1099. package/src/resources/extensions/gsd/auto/orchestrator.ts +418 -82
  1100. package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
  1101. package/src/resources/extensions/gsd/auto/phases.ts +58 -2981
  1102. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -0
  1103. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  1104. package/src/resources/extensions/gsd/auto/session.ts +12 -0
  1105. package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
  1106. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  1107. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  1108. package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
  1109. package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
  1110. package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
  1111. package/src/resources/extensions/gsd/auto-dashboard.ts +328 -458
  1112. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +33 -50
  1113. package/src/resources/extensions/gsd/auto-dispatch.ts +147 -104
  1114. package/src/resources/extensions/gsd/auto-model-selection.ts +74 -15
  1115. package/src/resources/extensions/gsd/auto-post-unit.ts +107 -46
  1116. package/src/resources/extensions/gsd/auto-prompts.ts +298 -76
  1117. package/src/resources/extensions/gsd/auto-recovery.ts +80 -489
  1118. package/src/resources/extensions/gsd/auto-runtime-state.ts +38 -0
  1119. package/src/resources/extensions/gsd/auto-start.ts +146 -88
  1120. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
  1121. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  1122. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  1123. package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
  1124. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +21 -49
  1125. package/src/resources/extensions/gsd/auto-verification.ts +37 -42
  1126. package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
  1127. package/src/resources/extensions/gsd/auto-worktree.ts +180 -407
  1128. package/src/resources/extensions/gsd/auto.ts +220 -54
  1129. package/src/resources/extensions/gsd/blocked-models.ts +49 -0
  1130. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +194 -70
  1131. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +43 -0
  1132. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +35 -38
  1133. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +93 -49
  1134. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +4 -2
  1135. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  1136. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  1137. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +46 -1
  1138. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +506 -202
  1139. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  1140. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +74 -10
  1141. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  1142. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +586 -83
  1143. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  1144. package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
  1145. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  1146. package/src/resources/extensions/gsd/captures.ts +5 -16
  1147. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +132 -6
  1148. package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
  1149. package/src/resources/extensions/gsd/closeout-wizard.ts +111 -0
  1150. package/src/resources/extensions/gsd/codebase-generator.ts +1 -0
  1151. package/src/resources/extensions/gsd/commands/catalog.ts +12 -68
  1152. package/src/resources/extensions/gsd/commands/context.ts +16 -2
  1153. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  1154. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  1155. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  1156. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  1157. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
  1158. package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
  1159. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  1160. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  1161. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  1162. package/src/resources/extensions/gsd/commands-handlers.ts +140 -4
  1163. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  1164. package/src/resources/extensions/gsd/commands-maintenance.ts +172 -42
  1165. package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
  1166. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +27 -9
  1167. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  1168. package/src/resources/extensions/gsd/commands-verdict.ts +22 -4
  1169. package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
  1170. package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
  1171. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  1172. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  1173. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  1174. package/src/resources/extensions/gsd/config-overlay.ts +24 -9
  1175. package/src/resources/extensions/gsd/consent-question.ts +441 -0
  1176. package/src/resources/extensions/gsd/consent-verdict.ts +115 -0
  1177. package/src/resources/extensions/gsd/constants.ts +0 -3
  1178. package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
  1179. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  1180. package/src/resources/extensions/gsd/db/engine.ts +855 -0
  1181. package/src/resources/extensions/gsd/db/queries.ts +676 -0
  1182. package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
  1183. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  1184. package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
  1185. package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
  1186. package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
  1187. package/src/resources/extensions/gsd/db/writers/reconcile.ts +523 -0
  1188. package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
  1189. package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
  1190. package/src/resources/extensions/gsd/db-transaction.ts +37 -20
  1191. package/src/resources/extensions/gsd/db-workspace.ts +243 -0
  1192. package/src/resources/extensions/gsd/db-writer.ts +11 -19
  1193. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  1194. package/src/resources/extensions/gsd/discussion-handoff.ts +280 -0
  1195. package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
  1196. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  1197. package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
  1198. package/src/resources/extensions/gsd/doctor-environment.ts +272 -155
  1199. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  1200. package/src/resources/extensions/gsd/doctor-git-checks.ts +33 -25
  1201. package/src/resources/extensions/gsd/doctor-providers.ts +104 -10
  1202. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +34 -42
  1203. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  1204. package/src/resources/extensions/gsd/doctor.ts +45 -12
  1205. package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
  1206. package/src/resources/extensions/gsd/error-classifier.ts +25 -1
  1207. package/src/resources/extensions/gsd/escalation.ts +9 -4
  1208. package/src/resources/extensions/gsd/exec-sandbox.ts +98 -18
  1209. package/src/resources/extensions/gsd/export-html.ts +11 -4
  1210. package/src/resources/extensions/gsd/export.ts +88 -1
  1211. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  1212. package/src/resources/extensions/gsd/files.ts +33 -12
  1213. package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
  1214. package/src/resources/extensions/gsd/forensics.ts +4 -34
  1215. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  1216. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  1217. package/src/resources/extensions/gsd/git-service.ts +13 -7
  1218. package/src/resources/extensions/gsd/gitignore.ts +10 -3
  1219. package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
  1220. package/src/resources/extensions/gsd/gsd-db.ts +189 -2380
  1221. package/src/resources/extensions/gsd/guidance.ts +217 -0
  1222. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  1223. package/src/resources/extensions/gsd/guided-flow.ts +250 -590
  1224. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  1225. package/src/resources/extensions/gsd/health-widget.ts +133 -32
  1226. package/src/resources/extensions/gsd/layout-policy.ts +86 -0
  1227. package/src/resources/extensions/gsd/markdown-renderer.ts +422 -113
  1228. package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
  1229. package/src/resources/extensions/gsd/mcp-filter.ts +63 -34
  1230. package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
  1231. package/src/resources/extensions/gsd/md-importer.ts +218 -68
  1232. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +52 -20
  1233. package/src/resources/extensions/gsd/memory-relations.ts +1 -1
  1234. package/src/resources/extensions/gsd/metrics.ts +23 -10
  1235. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  1236. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  1237. package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
  1238. package/src/resources/extensions/gsd/migrate-external.ts +49 -6
  1239. package/src/resources/extensions/gsd/migration-auto-check.ts +57 -18
  1240. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  1241. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  1242. package/src/resources/extensions/gsd/milestone-closeout.ts +133 -29
  1243. package/src/resources/extensions/gsd/milestone-ids.ts +78 -19
  1244. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  1245. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  1246. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +232 -0
  1247. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  1248. package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
  1249. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  1250. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  1251. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +78 -0
  1252. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  1253. package/src/resources/extensions/gsd/model-router.ts +101 -18
  1254. package/src/resources/extensions/gsd/native-git-bridge.ts +39 -0
  1255. package/src/resources/extensions/gsd/notification-store.ts +43 -31
  1256. package/src/resources/extensions/gsd/notifications.ts +50 -12
  1257. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  1258. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  1259. package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
  1260. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +161 -38
  1261. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  1262. package/src/resources/extensions/gsd/parsers-legacy.ts +58 -19
  1263. package/src/resources/extensions/gsd/paths.ts +390 -61
  1264. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  1265. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  1266. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  1267. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  1268. package/src/resources/extensions/gsd/preferences-models.ts +58 -59
  1269. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  1270. package/src/resources/extensions/gsd/preferences.ts +372 -35
  1271. package/src/resources/extensions/gsd/projection-flush.ts +20 -0
  1272. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  1273. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  1274. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  1275. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  1276. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  1277. package/src/resources/extensions/gsd/prompts/code-review.md +39 -0
  1278. package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  1279. package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  1280. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  1281. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  1282. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  1283. package/src/resources/extensions/gsd/prompts/execute-task.md +9 -2
  1284. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  1285. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  1286. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  1287. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  1288. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  1289. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  1290. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  1291. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  1292. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  1293. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  1294. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  1295. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  1296. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  1297. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  1298. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  1299. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  1300. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  1301. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  1302. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  1303. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  1304. package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  1305. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  1306. package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  1307. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  1308. package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  1309. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
  1310. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  1311. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  1312. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  1313. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  1314. package/src/resources/extensions/gsd/prompts/run-uat.md +13 -5
  1315. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  1316. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  1317. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  1318. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  1319. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  1320. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  1321. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  1322. package/src/resources/extensions/gsd/prompts/system.md +6 -3
  1323. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  1324. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  1325. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  1326. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  1327. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  1328. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  1329. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  1330. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  1331. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  1332. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  1333. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  1334. package/src/resources/extensions/gsd/provider-error-guidance.ts +36 -9
  1335. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  1336. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  1337. package/src/resources/extensions/gsd/publication.ts +122 -0
  1338. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  1339. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  1340. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  1341. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  1342. package/src/resources/extensions/gsd/quick.ts +43 -2
  1343. package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
  1344. package/src/resources/extensions/gsd/recovery-classification.ts +54 -88
  1345. package/src/resources/extensions/gsd/roadmap-slices.ts +37 -6
  1346. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  1347. package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
  1348. package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
  1349. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +52 -3
  1350. package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
  1351. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  1352. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  1353. package/src/resources/extensions/gsd/session-lock.ts +16 -14
  1354. package/src/resources/extensions/gsd/skill-activation.ts +3 -6
  1355. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  1356. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  1357. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  1358. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  1359. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  1360. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  1361. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  1362. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  1363. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
  1364. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  1365. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  1366. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  1367. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  1368. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  1369. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +176 -30
  1370. package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
  1371. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
  1372. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  1373. package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
  1374. package/src/resources/extensions/gsd/state.ts +51 -705
  1375. package/src/resources/extensions/gsd/status-guards.ts +59 -8
  1376. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  1377. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  1378. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  1379. package/src/resources/extensions/gsd/templates/project.md +1 -0
  1380. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  1381. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  1382. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  1383. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  1384. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  1385. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  1386. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  1387. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  1388. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  1389. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  1390. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  1391. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
  1392. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
  1393. package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
  1394. package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
  1395. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +97 -117
  1396. package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
  1397. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +753 -26
  1398. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
  1399. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  1400. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +25 -2
  1401. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +107 -1
  1402. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +409 -38
  1403. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
  1404. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  1405. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +100 -5
  1406. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
  1407. package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
  1408. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +111 -1
  1409. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
  1410. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  1411. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
  1412. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
  1413. package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
  1414. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  1415. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
  1416. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
  1417. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
  1418. package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
  1419. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  1420. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  1421. package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
  1422. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  1423. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  1424. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
  1425. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +26 -0
  1426. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  1427. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  1428. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  1429. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  1430. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  1431. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +863 -0
  1432. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +47 -9
  1433. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  1434. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  1435. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  1436. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  1437. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
  1438. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
  1439. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
  1440. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  1441. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  1442. package/src/resources/extensions/gsd/tests/complete-task.test.ts +223 -12
  1443. package/src/resources/extensions/gsd/tests/consent-question.test.ts +396 -0
  1444. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
  1445. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
  1446. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  1447. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  1448. package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
  1449. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
  1450. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -0
  1451. package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
  1452. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
  1453. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  1454. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +111 -5
  1455. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
  1456. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  1457. package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
  1458. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +54 -4
  1459. package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
  1460. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +430 -0
  1461. package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
  1462. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
  1463. package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
  1464. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  1465. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
  1466. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +15 -0
  1467. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  1468. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  1469. package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
  1470. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +113 -4
  1471. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  1472. package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
  1473. package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
  1474. package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
  1475. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
  1476. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  1477. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  1478. package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
  1479. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +231 -0
  1480. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +74 -2
  1481. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  1482. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  1483. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  1484. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +88 -1
  1485. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  1486. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  1487. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  1488. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
  1489. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  1490. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  1491. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  1492. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
  1493. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  1494. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  1495. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  1496. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  1497. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
  1498. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  1499. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  1500. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +154 -1
  1501. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  1502. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +46 -0
  1503. package/src/resources/extensions/gsd/tests/guidance.test.ts +173 -0
  1504. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  1505. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
  1506. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  1507. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  1508. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +133 -15
  1509. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +89 -59
  1510. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  1511. package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
  1512. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +122 -3
  1513. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  1514. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  1515. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  1516. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  1517. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  1518. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  1519. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  1520. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
  1521. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
  1522. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
  1523. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  1524. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  1525. package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
  1526. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  1527. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
  1528. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  1529. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
  1530. package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
  1531. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
  1532. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  1533. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  1534. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  1535. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +213 -1
  1536. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  1537. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +125 -4
  1538. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  1539. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  1540. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  1541. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
  1542. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +97 -0
  1543. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
  1544. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  1545. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  1546. package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
  1547. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
  1548. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  1549. package/src/resources/extensions/gsd/tests/notification-store.test.ts +55 -0
  1550. package/src/resources/extensions/gsd/tests/notifications.test.ts +97 -9
  1551. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +179 -0
  1552. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  1553. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
  1554. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +381 -0
  1555. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  1556. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  1557. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +44 -0
  1558. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
  1559. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +144 -0
  1560. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
  1561. package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
  1562. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  1563. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
  1564. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  1565. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  1566. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +54 -6
  1567. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  1568. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
  1569. package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
  1570. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +64 -0
  1571. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  1572. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  1573. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  1574. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  1575. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  1576. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
  1577. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  1578. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  1579. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  1580. package/src/resources/extensions/gsd/tests/preferences.test.ts +230 -1
  1581. package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
  1582. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
  1583. package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
  1584. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  1585. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
  1586. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +72 -2
  1587. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
  1588. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +18 -3
  1589. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +312 -4
  1590. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  1591. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  1592. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  1593. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  1594. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  1595. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  1596. package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
  1597. package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
  1598. package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
  1599. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
  1600. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
  1601. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +508 -5
  1602. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
  1603. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  1604. package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
  1605. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  1606. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
  1607. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  1608. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +58 -2
  1609. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
  1610. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  1611. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +148 -0
  1612. package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
  1613. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
  1614. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +301 -41
  1615. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
  1616. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  1617. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  1618. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +56 -0
  1619. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +9 -4
  1620. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +346 -58
  1621. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
  1622. package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
  1623. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  1624. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  1625. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  1626. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  1627. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  1628. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  1629. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
  1630. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  1631. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
  1632. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
  1633. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  1634. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +151 -0
  1635. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  1636. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  1637. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +26 -0
  1638. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  1639. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  1640. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +348 -0
  1641. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +56 -0
  1642. package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
  1643. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
  1644. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
  1645. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
  1646. package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
  1647. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  1648. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +319 -6
  1649. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  1650. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  1651. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
  1652. package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
  1653. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
  1654. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  1655. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  1656. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  1657. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  1658. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  1659. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
  1660. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  1661. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  1662. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  1663. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
  1664. package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
  1665. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  1666. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
  1667. package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
  1668. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +227 -21
  1669. package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
  1670. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  1671. package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
  1672. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
  1673. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +339 -48
  1674. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +166 -2
  1675. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
  1676. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  1677. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
  1678. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +144 -1
  1679. package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
  1680. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  1681. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  1682. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
  1683. package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
  1684. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +114 -19
  1685. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
  1686. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +24 -2
  1687. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  1688. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
  1689. package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
  1690. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  1691. package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
  1692. package/src/resources/extensions/gsd/tests/write-gate.test.ts +291 -1
  1693. package/src/resources/extensions/gsd/tool-contract.ts +124 -11
  1694. package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
  1695. package/src/resources/extensions/gsd/tool-surface-readiness.ts +393 -0
  1696. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  1697. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  1698. package/src/resources/extensions/gsd/tools/complete-slice.ts +57 -79
  1699. package/src/resources/extensions/gsd/tools/complete-task.ts +153 -13
  1700. package/src/resources/extensions/gsd/tools/exec-tool.ts +13 -124
  1701. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  1702. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -9
  1703. package/src/resources/extensions/gsd/tools/plan-task.ts +19 -3
  1704. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +54 -12
  1705. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
  1706. package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
  1707. package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
  1708. package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
  1709. package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
  1710. package/src/resources/extensions/gsd/tools/validate-milestone.ts +26 -90
  1711. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +123 -5
  1712. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  1713. package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
  1714. package/src/resources/extensions/gsd/uat-policy.ts +80 -25
  1715. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  1716. package/src/resources/extensions/gsd/undo.ts +17 -17
  1717. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  1718. package/src/resources/extensions/gsd/unit-context-composer.ts +222 -21
  1719. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  1720. package/src/resources/extensions/gsd/unit-registry.ts +494 -0
  1721. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  1722. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
  1723. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  1724. package/src/resources/extensions/gsd/validation-block-guard.ts +60 -6
  1725. package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
  1726. package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
  1727. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  1728. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  1729. package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
  1730. package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
  1731. package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
  1732. package/src/resources/extensions/gsd/workflow-events.ts +12 -20
  1733. package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
  1734. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
  1735. package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
  1736. package/src/resources/extensions/gsd/workflow-mcp.ts +34 -111
  1737. package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
  1738. package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
  1739. package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
  1740. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  1741. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  1742. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  1743. package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
  1744. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  1745. package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -25
  1746. package/src/resources/extensions/gsd/worktree-manager.ts +215 -45
  1747. package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
  1748. package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
  1749. package/src/resources/extensions/gsd/worktree-root.ts +29 -6
  1750. package/src/resources/extensions/gsd/worktree-safety.ts +73 -48
  1751. package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
  1752. package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
  1753. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  1754. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  1755. package/src/resources/extensions/gsd/worktree.ts +7 -1
  1756. package/src/resources/extensions/mcp-client/manager.ts +10 -4
  1757. package/src/resources/extensions/search-the-web/index.ts +45 -9
  1758. package/src/resources/extensions/search-the-web/native-search.ts +21 -7
  1759. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  1760. package/src/resources/extensions/shared/gsd-browser-cli.ts +182 -8
  1761. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  1762. package/src/resources/extensions/subagent/index.ts +20 -15
  1763. package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
  1764. package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
  1765. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  1766. package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
  1767. package/src/resources/shared/package-manager-detection.ts +1 -1
  1768. package/src/resources/shared/package.json +3 -0
  1769. package/src/resources/skills/create-skill/SKILL.md +3 -0
  1770. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  1771. package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
  1772. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  1773. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  1774. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  1775. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  1776. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  1777. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  1778. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  1779. package/dist/resources/extensions/gsd/user-input-boundary.js +0 -195
  1780. package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
  1781. package/dist/web/standalone/.next/server/chunks/5047.js +0 -2
  1782. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  1783. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  1784. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  1785. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  1786. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  1787. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  1788. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  1789. package/dist/web/standalone/.next/static/chunks/app/page-a48b7c48333b31c8.js +0 -1
  1790. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  1791. package/dist/web/standalone/.next/static/chunks/webpack-dda80a1ef5587410.js +0 -1
  1792. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  1793. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  1794. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  1795. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  1796. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  1797. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  1798. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  1799. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  1800. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  1801. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  1802. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  1803. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  1804. package/scripts/ensure-workspace-builds.cjs +0 -129
  1805. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -88
  1806. package/src/resources/extensions/gsd/user-input-boundary.ts +0 -198
  1807. package/src/resources/skills/gsd-browser/SKILL.md +0 -41
  1808. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → O7xDYXO0r4zFhIzY1hrWV}/_buildManifest.js +0 -0
  1809. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → O7xDYXO0r4zFhIzY1hrWV}/_ssgManifest.js +0 -0
@@ -14,13 +14,24 @@ import { existsSync, readFileSync } from "node:fs";
14
14
  import { homedir } from "node:os";
15
15
  import { createRequire } from "node:module";
16
16
  import { dirname, join } from "node:path";
17
- import { PartialMessageBuilder, ZERO_USAGE, mapUsage } from "./partial-builder.js";
17
+ import { ZERO_USAGE, mapUsage } from "./partial-builder.js";
18
+ import { attachExternalResultsToToolBlocks, buildFinalAssistantContent, extractToolResultsFromSdkUserMessage, handleClaudeCodePartialStreamEvent, shouldSuppressDuplicateToolUnavailableBlock, } from "./turn-assembler.js";
18
19
  import { buildWorkflowMcpServers, getRequiredWorkflowToolsForAutoUnit, resolveWorkflowMcpProjectRoot, } from "../gsd/workflow-mcp.js";
20
+ import { resolveWorkflowQuestionToolSurface } from "../gsd/question-transport.js";
19
21
  import { buildProjectGsdMcpServers, ensureProjectWorkflowMcpConfig } from "../gsd/mcp-project-config.js";
20
22
  import { loadProjectGSDPreferences } from "../gsd/preferences.js";
23
+ import { markToolStart, markToolEnd } from "../gsd/auto.js";
24
+ import { markInteractiveElicitationStart, markInteractiveElicitationEnd, } from "../gsd/auto-tool-tracking.js";
21
25
  import { discoverBrowserMcpServerName, discoverMcpServers, discoverMcpServerNames, discoverUserMcpServerNames, discoverWorkflowMcpServerName, computeMcpDisallowedTools, } from "../gsd/mcp-filter.js";
22
26
  import { RUN_UAT_CLAUDE_NATIVE_TOOL_NAMES, RUN_UAT_FORBIDDEN_TOOL_NAMES, RUN_UAT_WORKFLOW_TOOL_NAMES, resolveToolPresentationPlan } from "../gsd/tool-presentation-plan.js";
27
+ import { getUnitToolSurfaceContract } from "../gsd/unit-tool-contracts.js";
28
+ import { awaitWorkflowMcpToolRegistration, getToolSurfaceReadinessError, POST_PREFLIGHT_READINESS_RETRY_DELAYS_MS, POST_PREFLIGHT_SDK_SETTLE_MS, TOOL_SURFACE_NOT_READY, } from "../gsd/tool-surface-readiness.js";
29
+ import { beginWorkflowMcpSdkSession, endWorkflowMcpSdkSession, } from "../gsd/workflow-mcp-readiness-cache.js";
30
+ import { getGuidedUnitContext } from "../gsd/guided-unit-context.js";
31
+ import { getActiveAutoUnitType, isAutoActive } from "../gsd/auto-runtime-state.js";
32
+ import { hasBrowserContractPrefix } from "../shared/browser-contract.js";
23
33
  import { showInterviewRound } from "../shared/tui.js";
34
+ export { buildFinalAssistantContent, extractToolResultsFromSdkUserMessage, handleClaudeCodePartialStreamEvent, mergePendingToolCalls, shouldSuppressDuplicateToolUnavailableBlock, } from "./turn-assembler.js";
24
35
  export function serverToolUseToToolCallLike(block) {
25
36
  const argumentsValue = block.input && typeof block.input === "object" && !Array.isArray(block.input)
26
37
  ? block.input
@@ -165,25 +176,44 @@ function extractMessageText(msg) {
165
176
  }
166
177
  return "";
167
178
  }
179
+ // Patterns are anchored to the `UNIT: <Phase>` dispatch header ONLY. The old
180
+ // patterns also matched bare slugs (`run-uat`, `plan-slice`, `gsd_plan_slice`,
181
+ // …) anywhere in the text, so any incidental occurrence — a branch name like
182
+ // `milestone/M039`, an untracked file `m039-s05-…spec.ts`, a forensic report,
183
+ // or the user literally typing "slice"/"UAT" while describing a problem — would
184
+ // misclassify the turn as a dispatched unit. Only the dispatch header is an
185
+ // authoritative phase signal, so match nothing else.
168
186
  const GSD_PHASE_PATTERNS = [
169
- ["run-uat", /\b(?:UNIT:\s*Run UAT|run-uat)\b/i],
170
- ["complete-milestone", /\b(?:UNIT:\s*Complete Milestone|complete-milestone)\b/i],
171
- ["validate-milestone", /\b(?:UNIT:\s*Validate Milestone|validate-milestone)\b/i],
172
- ["reassess-roadmap", /\b(?:UNIT:\s*Reassess Roadmap|reassess-roadmap)\b/i],
173
- ["complete-slice", /\b(?:UNIT:\s*Complete Slice|complete-slice)\b/i],
174
- ["replan-slice", /\b(?:UNIT:\s*Replan Slice|replan-slice)\b/i],
175
- ["plan-slice", /\b(?:UNIT:\s*Plan Slice|plan-slice|gsd_plan_slice)\b/i],
176
- ["plan-milestone", /\b(?:UNIT:\s*Plan Milestone|plan-milestone|gsd_plan_milestone)\b/i],
177
- ["execute-task", /\b(?:UNIT:\s*Execute Task|execute-task|execute-task-simple|reactive-execute)\b/i],
178
- ["gate-evaluate", /\b(?:UNIT:\s*Gate Evaluate|gate-evaluate|gsd_save_gate_result)\b/i],
179
- ["research-milestone", /\b(?:UNIT:\s*Research Milestone|research-milestone)\b/i],
180
- ["research-slice", /\b(?:UNIT:\s*Research Slice|research-slice)\b/i],
181
- ["discuss-milestone", /\b(?:Discuss milestone|discuss-milestone)\b/i],
187
+ ["run-uat", /\bUNIT:\s*Run UAT\b/i],
188
+ ["complete-milestone", /\bUNIT:\s*Complete Milestone\b/i],
189
+ ["validate-milestone", /\bUNIT:\s*Validate Milestone\b/i],
190
+ ["reassess-roadmap", /\bUNIT:\s*Reassess Roadmap\b/i],
191
+ ["complete-slice", /\bUNIT:\s*Complete Slice\b/i],
192
+ ["replan-slice", /\bUNIT:\s*Replan Slice\b/i],
193
+ ["refine-slice", /\bUNIT:\s*Refine Slice\b/i],
194
+ ["plan-slice", /\bUNIT:\s*Plan Slice\b/i],
195
+ ["plan-milestone", /\bUNIT:\s*Plan Milestone\b/i],
196
+ ["execute-task", /\bUNIT:\s*Execute Task\b/i],
197
+ ["gate-evaluate", /\bUNIT:\s*Gate Evaluate\b/i],
198
+ ["research-milestone", /\bUNIT:\s*Research Milestone\b/i],
199
+ ["research-slice", /\bUNIT:\s*Research Slice\b/i],
200
+ ["research-decision", /\bUNIT:\s*Research Decision\b/i],
201
+ ["discuss-milestone", /\bUNIT:\s*Discuss Milestone\b/i],
202
+ ["discuss-slice", /\bUNIT:\s*Discuss Slice\b/i],
203
+ ["discuss-project", /\bUNIT:\s*Discuss Project\b/i],
204
+ ["discuss-requirements", /\bUNIT:\s*Discuss Requirements\b/i],
182
205
  ];
206
+ /** The set of GSD phases this adapter recognises, derived from the patterns above. */
207
+ const KNOWN_GSD_PHASES = new Set(GSD_PHASE_PATTERNS.map(([phase]) => phase));
183
208
  export function inferGsdPhaseFromContext(context) {
209
+ // Scan only the system prompt and the most recent user directive. Scanning
210
+ // the entire scrollback let a phase header that merely appeared in history
211
+ // (e.g. a SUMMARY the agent read, or a pasted prior dispatch) re-classify
212
+ // every subsequent turn.
213
+ const lastUser = [...context.messages].reverse().find((m) => m.role === "user");
184
214
  const text = [
185
215
  context.systemPrompt ?? "",
186
- ...context.messages.map((message) => extractMessageText(message)),
216
+ lastUser ? extractMessageText(lastUser) : "",
187
217
  ].join("\n");
188
218
  for (const [phase, pattern] of GSD_PHASE_PATTERNS) {
189
219
  if (pattern.test(text))
@@ -191,6 +221,44 @@ export function inferGsdPhaseFromContext(context) {
191
221
  }
192
222
  return undefined;
193
223
  }
224
+ /**
225
+ * Resolve the GSD unit phase for Claude Code SDK sessions. Guided-flow
226
+ * dispatch records the authoritative unit type before the turn is queued;
227
+ * prefer that over regex inference from prompt text.
228
+ */
229
+ export function resolveGsdPhaseForSdk(context, projectRoot) {
230
+ const resolvedRoot = resolveWorkflowMcpProjectRoot(projectRoot);
231
+ const guided = getGuidedUnitContext(resolvedRoot)
232
+ ?? getGuidedUnitContext(projectRoot)
233
+ ?? getGuidedUnitContext();
234
+ if (guided?.unitType) {
235
+ const guidedRoot = resolveWorkflowMcpProjectRoot(guided.basePath);
236
+ if (guidedRoot === resolvedRoot) {
237
+ return guided.unitType;
238
+ }
239
+ }
240
+ // Auto-mode records the dispatched unit type before each turn — that is the
241
+ // authoritative phase, so prefer it over any inference. (Guided interactive
242
+ // dispatch is handled above via getGuidedUnitContext.) Ignore `hook/*`
243
+ // pseudo-units and anything not a recognised GSD phase.
244
+ const autoUnit = getActiveAutoUnitType();
245
+ if (autoUnit && KNOWN_GSD_PHASES.has(autoUnit)) {
246
+ return autoUnit;
247
+ }
248
+ // No authoritative guided/auto signal → ad-hoc turn. Do NOT regex-infer a
249
+ // phase from prose: that would fire the workflow MCP preflight and, for
250
+ // run-uat, strip Bash/Write/Edit/gsd_exec for the rest of the session the
251
+ // moment the conversation (or the GSD system prompt itself) happened to
252
+ // mention a phase token. An ad-hoc turn keeps the full tool surface.
253
+ //
254
+ // The header-anchored inference remains only as a last resort while auto is
255
+ // running but the current unit wasn't recorded for some reason; even then it
256
+ // matches the `UNIT:` dispatch header only, never bare slugs in scrollback.
257
+ if (!isAutoActive()) {
258
+ return undefined;
259
+ }
260
+ return inferGsdPhaseFromContext(context);
261
+ }
194
262
  /**
195
263
  * Build a full conversational prompt from GSD's context messages.
196
264
  *
@@ -216,10 +284,17 @@ export function buildPromptFromContext(context, toolContext = {}) {
216
284
  const workflowToolLine = toolContext.workflowMcpServerName
217
285
  ? "- GSD workflow tools (gsd_exec, gsd_slice_complete, gsd_task_complete, gsd_plan_slice, gsd_save_gate_result, etc.) " +
218
286
  `are MCP tools — call them as mcp__${toolContext.workflowMcpServerName}__<tool_name> ` +
219
- `(e.g. mcp__${toolContext.workflowMcpServerName}__gsd_exec, mcp__${toolContext.workflowMcpServerName}__gsd_save_gate_result)\n`
287
+ `(e.g. mcp__${toolContext.workflowMcpServerName}__gsd_exec, mcp__${toolContext.workflowMcpServerName}__gsd_save_gate_result)\n` +
288
+ (toolContext.questionToolAvailable !== false
289
+ ? `- Structured user input: call mcp__${toolContext.workflowMcpServerName}__ask_user_questions. ` +
290
+ "Do not call bare ask_user_questions. Do not call native AskUserQuestion.\n"
291
+ : "")
220
292
  : "- GSD workflow MCP tools are unavailable in this Claude Code run.\n";
221
293
  const toolSearchLine = toolContext.workflowMcpServerName
222
- ? "- ToolSearch is NOT available never use it to discover tools; invoke the MCP tool directly\n"
294
+ ? "- ToolSearch is available only for Claude Code deferred workflow MCP hydration. " +
295
+ `If mcp__${toolContext.workflowMcpServerName}__<tool_name> is missing or Claude Code reports the server is still connecting, ` +
296
+ `use ToolSearch with select:mcp__${toolContext.workflowMcpServerName}__<tool_name> or the base tool name, then call the returned MCP tool directly. ` +
297
+ "Do not use ToolSearch for browser_* tools or general discovery.\n"
223
298
  : "- ToolSearch is NOT available — never use it to discover tools\n";
224
299
  const browserToolLine = toolContext.browserMcpServerName
225
300
  ? "- Browser verification uses gsd-browser MCP by default — call browser tools as " +
@@ -313,9 +388,11 @@ export function buildSdkQueryPrompt(context, textPrompt = buildPromptFromContext
313
388
  message: { role: "user", content },
314
389
  parent_tool_use_id: null,
315
390
  };
316
- return (async function* () {
317
- yield sdkMessage;
318
- })();
391
+ return {
392
+ async *[Symbol.asyncIterator]() {
393
+ yield sdkMessage;
394
+ },
395
+ };
319
396
  }
320
397
  // ---------------------------------------------------------------------------
321
398
  // Error helper
@@ -334,6 +411,40 @@ function makeErrorMessage(model, errorMsg) {
334
411
  timestamp: Date.now(),
335
412
  };
336
413
  }
414
+ export function buildWorkflowMcpReadinessProgressMessage(input) {
415
+ const { unitType, workflowServerName, stage } = input;
416
+ if (stage === "preflight") {
417
+ return `Starting ${workflowServerName} MCP for ${unitType}; waiting for workflow tools to register...`;
418
+ }
419
+ const attempt = input.attempt === undefined ? "" : ` attempt ${input.attempt}`;
420
+ const delay = input.delayMs === undefined ? "" : ` Retrying in ${formatReadinessDelay(input.delayMs)}.`;
421
+ return `Still waiting for ${workflowServerName} MCP tools for ${unitType}${attempt}.${delay}`;
422
+ }
423
+ function formatReadinessDelay(delayMs) {
424
+ if (delayMs < 1_000)
425
+ return `${delayMs}ms`;
426
+ const seconds = delayMs / 1_000;
427
+ return Number.isInteger(seconds) ? `${seconds}s` : `${seconds.toFixed(1)}s`;
428
+ }
429
+ export function pushWorkflowMcpReadinessProgressEvent(input) {
430
+ const { stream, partial, state, message } = input;
431
+ if (!message)
432
+ return;
433
+ let contentIndex = state.contentIndex;
434
+ const existing = contentIndex === undefined ? undefined : partial.content[contentIndex];
435
+ if (contentIndex === undefined || existing?.type !== "text") {
436
+ contentIndex = partial.content.length;
437
+ state.contentIndex = contentIndex;
438
+ partial.content.push({ type: "text", text: "" });
439
+ stream.push({ type: "text_start", contentIndex, partial });
440
+ }
441
+ const block = partial.content[contentIndex];
442
+ if (block.type !== "text")
443
+ return;
444
+ const delta = block.text.length === 0 ? message : `\n${message}`;
445
+ block.text += delta;
446
+ stream.push({ type: "text_delta", contentIndex, delta, partial });
447
+ }
337
448
  export function isClaudeCodeAbortErrorMessage(message) {
338
449
  if (!message)
339
450
  return false;
@@ -1078,7 +1189,26 @@ export function createClaudeCodeCanUseToolHandler(ui) {
1078
1189
  // ---------------------------------------------------------------------------
1079
1190
  // Elicitation handler
1080
1191
  // ---------------------------------------------------------------------------
1081
- /** Create an SDK elicitation handler that routes requests through the extension UI dialogs, or undefined if no UI is available. */
1192
+ /**
1193
+ * Create an SDK elicitation handler that routes requests through the extension UI dialogs, or undefined if no UI is available.
1194
+ *
1195
+ * For structured (AskUserQuestion) elicitations, the interview round's result
1196
+ * disambiguates two cases that must not be conflated: an `undefined` result
1197
+ * means the custom UI is unavailable, so we fall back to the simpler `select`
1198
+ * dialogs; an empty-answers result means the user dismissed the question, which
1199
+ * is treated as a clean cancel. Falling back to dialogs on dismissal would
1200
+ * re-ask the same questions (the duplicate-question bug).
1201
+ */
1202
+ /**
1203
+ * Monotonic counter so concurrent/sequential elicitations resolved within the
1204
+ * same millisecond get distinct synthetic in-flight-tool ids (the `cc-elicit-*`
1205
+ * namespace never collides with real MCP toolCallIds).
1206
+ */
1207
+ let _elicitationSeq = 0;
1208
+ function nextElicitationSeq() {
1209
+ _elicitationSeq = (_elicitationSeq + 1) % Number.MAX_SAFE_INTEGER;
1210
+ return _elicitationSeq;
1211
+ }
1082
1212
  export function createClaudeCodeElicitationHandler(ui) {
1083
1213
  if (!ui)
1084
1214
  return undefined;
@@ -1091,18 +1221,64 @@ export function createClaudeCodeElicitationHandler(ui) {
1091
1221
  const headlessAnswer = answerElicitationFromHeadlessAnswers(questions, loadHeadlessAnswers());
1092
1222
  if (headlessAnswer)
1093
1223
  return headlessAnswer;
1094
- const interviewResult = await showInterviewRound(questions, { signal }, { ui }).catch(() => undefined);
1095
- if (interviewResult && Object.keys(interviewResult.answers).length > 0) {
1224
+ // The SDK elicitation blocks waiting for human input, but it is not an
1225
+ // MCP tool dispatch, so markToolStart/markToolEnd are never called for
1226
+ // it. Without this the soft/context/idle/hard watchdogs see zero
1227
+ // in-flight tools and re-dispatch (and ultimately abort) the agent
1228
+ // turn hosting this elicitation, tearing the question down (#2676 /
1229
+ // claude-code-cli self-cancel loop). Bracketing the human wait with
1230
+ // the s.active-gated interactive-tool guard makes it visible to
1231
+ // hasInteractiveToolInFlight()/getInFlightToolCount() so those
1232
+ // watchdogs exempt it. No-op outside auto-mode (wrapper self-gates).
1233
+ //
1234
+ // markInteractiveElicitationStart/End is a SEPARATE, ungated signal that
1235
+ // is observable in FOREGROUND (where the s.active-gated markToolStart is a
1236
+ // no-op). The foreground approval-gate pause path (register-hooks
1237
+ // message_update) consults isInteractiveElicitationInFlight() and bails so
1238
+ // it does not tear down the very elicitation that IS the human boundary
1239
+ // (#cc-elicitation-self-cancel). It clears in the finally on every exit.
1240
+ const elicId = "cc-elicit-" + (request.id ?? `${Date.now()}-${nextElicitationSeq()}`);
1241
+ markInteractiveElicitationStart();
1242
+ markToolStart(elicId, "ask_user_questions");
1243
+ try {
1244
+ const interviewResult = await showInterviewRound(questions, { signal, overlay: true }, { ui }).catch(() => undefined);
1245
+ if (interviewResult === undefined) {
1246
+ // `await` so the dialog human-wait stays inside try/finally and the
1247
+ // in-flight guard is held until the dialog resolves. Without it,
1248
+ // `finally` runs the moment the promise is created and the fallback
1249
+ // wait runs with zero in-flight tools — reintroducing the
1250
+ // self-cancel on this path (Bugbot #1c00624d).
1251
+ return await promptElicitationWithDialogs(request, questions, ui, signal);
1252
+ }
1253
+ if (Object.keys(interviewResult.answers).length === 0) {
1254
+ // A system/host teardown (compaction, session_switch, true
1255
+ // interrupt) that aborted the signal mid-wait sets `interrupted`.
1256
+ // Surface that as a non-affirmative `decline` so it is not
1257
+ // laundered into a clean user-declined `cancel` the model re-asks
1258
+ // against. A genuine user dismissal leaves `interrupted` falsy and
1259
+ // keeps the prior `cancel` semantics.
1260
+ return interviewResult.interrupted ? { action: "decline" } : { action: "cancel" };
1261
+ }
1096
1262
  return {
1097
1263
  action: "accept",
1098
1264
  content: roundResultToElicitationContent(questions, interviewResult),
1099
1265
  };
1100
1266
  }
1101
- return promptElicitationWithDialogs(request, questions, ui, signal);
1267
+ finally {
1268
+ markToolEnd(elicId);
1269
+ markInteractiveElicitationEnd();
1270
+ }
1102
1271
  }
1103
1272
  const textFields = parseTextInputElicitation(request);
1104
1273
  if (textFields) {
1105
- return promptTextInputElicitation(request, textFields, ui, signal);
1274
+ const elicId = "cc-elicit-" + (request.id ?? `${Date.now()}-${nextElicitationSeq()}`);
1275
+ markToolStart(elicId, "secure_env_collect");
1276
+ try {
1277
+ return await promptTextInputElicitation(request, textFields, ui, signal);
1278
+ }
1279
+ finally {
1280
+ markToolEnd(elicId);
1281
+ }
1106
1282
  }
1107
1283
  return { action: "decline" };
1108
1284
  };
@@ -1172,6 +1348,8 @@ function modelSupportsAdaptiveThinking(modelId) {
1172
1348
  || modelId.includes("opus-4.7")
1173
1349
  || modelId.includes("opus-4-8")
1174
1350
  || modelId.includes("opus-4.8")
1351
+ || modelId.includes("fable-5")
1352
+ || modelId.includes("fable.5")
1175
1353
  || modelId.includes("sonnet-4-6")
1176
1354
  || modelId.includes("sonnet-4.6")
1177
1355
  || modelId.includes("sonnet-4-7")
@@ -1193,7 +1371,9 @@ function mapThinkingLevelToAnthropicEffort(level, modelId) {
1193
1371
  if (modelId.includes("opus-4-7")
1194
1372
  || modelId.includes("opus-4.7")
1195
1373
  || modelId.includes("opus-4-8")
1196
- || modelId.includes("opus-4.8"))
1374
+ || modelId.includes("opus-4.8")
1375
+ || modelId.includes("fable-5")
1376
+ || modelId.includes("fable.5"))
1197
1377
  return "xhigh";
1198
1378
  if (modelId.includes("opus-4-6") || modelId.includes("opus-4.6"))
1199
1379
  return "max";
@@ -1215,7 +1395,7 @@ function browserMcpServerNameFromAllowedTools(allowedTools) {
1215
1395
  const parsed = parseAllowedMcpToolName(toolName);
1216
1396
  if (!parsed)
1217
1397
  continue;
1218
- if (parsed.server === "gsd-browser" || parsed.tool.startsWith("browser_")) {
1398
+ if (parsed.server === "gsd-browser" || hasBrowserContractPrefix(parsed.tool)) {
1219
1399
  return parsed.server;
1220
1400
  }
1221
1401
  }
@@ -1229,18 +1409,30 @@ function workflowMcpServerNameFromAllowedTools(allowedTools) {
1229
1409
  if (typeof toolName !== "string")
1230
1410
  continue;
1231
1411
  const parsed = parseAllowedMcpToolName(toolName);
1232
- if (!parsed || parsed.server === browserServerName || parsed.tool.startsWith("browser_"))
1412
+ if (!parsed || parsed.server === browserServerName || hasBrowserContractPrefix(parsed.tool))
1233
1413
  continue;
1234
1414
  return parsed.server;
1235
1415
  }
1236
1416
  return undefined;
1237
1417
  }
1418
+ function workflowQuestionToolAvailableFromAllowedTools(allowedTools, workflowMcpServerName, gsdPhase) {
1419
+ if (!workflowMcpServerName || !gsdPhase)
1420
+ return undefined;
1421
+ return Array.isArray(allowedTools)
1422
+ && allowedTools.includes(`mcp__${workflowMcpServerName}__ask_user_questions`);
1423
+ }
1238
1424
  function isRecord(value) {
1239
1425
  return !!value && typeof value === "object" && !Array.isArray(value);
1240
1426
  }
1241
1427
  function isStringRecord(value) {
1242
1428
  return isRecord(value) && Object.values(value).every((entry) => typeof entry === "string");
1243
1429
  }
1430
+ export function resolveWorkflowMcpPreflightServerConfig(mcpServers, workflowServerName) {
1431
+ if (!workflowServerName || !isRecord(mcpServers))
1432
+ return undefined;
1433
+ const workflowServerConfig = mcpServers[workflowServerName];
1434
+ return isRecord(workflowServerConfig) ? workflowServerConfig : undefined;
1435
+ }
1244
1436
  function cloneSdkMcpServerConfig(config) {
1245
1437
  if (!isRecord(config))
1246
1438
  return undefined;
@@ -1278,11 +1470,13 @@ function resolveProjectMcpServerConfigs(projectRoot, serverNames, fallbackServer
1278
1470
  function resolveExactWorkflowMcpToolsForPhase(gsdPhase, workflowServerName, workflowExplicitlyBlocked) {
1279
1471
  if (!gsdPhase || !workflowServerName || workflowExplicitlyBlocked)
1280
1472
  return [];
1281
- const requiredTools = gsdPhase === "run-uat"
1473
+ const requestedTools = gsdPhase === "run-uat"
1282
1474
  ? [...RUN_UAT_WORKFLOW_TOOL_NAMES]
1283
- : getRequiredWorkflowToolsForAutoUnit(gsdPhase);
1284
- const supportTools = gsdPhase === "run-uat" ? [] : ["gsd_milestone_status"];
1285
- const requestedToolNames = [...new Set([...requiredTools, ...supportTools])];
1475
+ : [
1476
+ ...(getUnitToolSurfaceContract(gsdPhase)?.allowedGsdTools ?? []),
1477
+ ...getRequiredWorkflowToolsForAutoUnit(gsdPhase),
1478
+ ];
1479
+ const requestedToolNames = [...new Set(requestedTools.filter((toolName) => toolName.startsWith("gsd_") || toolName === "ask_user_questions"))];
1286
1480
  if (requestedToolNames.length === 0)
1287
1481
  return [];
1288
1482
  return resolveToolPresentationPlan({
@@ -1292,6 +1486,25 @@ function resolveExactWorkflowMcpToolsForPhase(gsdPhase, workflowServerName, work
1292
1486
  requestedToolNames,
1293
1487
  }).presentedToolNames;
1294
1488
  }
1489
+ function resolveClaudeNativeToolsForPhase(gsdPhase) {
1490
+ const standardClaudeTools = [
1491
+ "Read",
1492
+ "Write",
1493
+ "Edit",
1494
+ "Glob",
1495
+ "Grep",
1496
+ "Bash",
1497
+ "Agent",
1498
+ "WebFetch",
1499
+ "WebSearch",
1500
+ ];
1501
+ if (!gsdPhase)
1502
+ return standardClaudeTools;
1503
+ if (gsdPhase === "run-uat" || gsdPhase === "complete-slice") {
1504
+ return [...RUN_UAT_CLAUDE_NATIVE_TOOL_NAMES];
1505
+ }
1506
+ return standardClaudeTools;
1507
+ }
1295
1508
  export function autoInitClaudeCodeWorkflowMcp(cwd) {
1296
1509
  const projectRoot = resolveWorkflowMcpProjectRoot(cwd);
1297
1510
  try {
@@ -1303,6 +1516,51 @@ export function autoInitClaudeCodeWorkflowMcp(cwd) {
1303
1516
  }
1304
1517
  }
1305
1518
  }
1519
+ export function resolveClaudeCodeToolSurfaceReadinessError(input) {
1520
+ const error = getToolSurfaceReadinessError(input);
1521
+ if (error
1522
+ && input.allowPendingToolSearchHydration
1523
+ && input.workflowServerName
1524
+ && input.observation.mcpServers.some((server) => server.name === input.workflowServerName && server.status === "pending")) {
1525
+ return Promise.resolve(null);
1526
+ }
1527
+ return Promise.resolve(error);
1528
+ }
1529
+ export { awaitWorkflowMcpToolRegistration } from "../gsd/tool-surface-readiness.js";
1530
+ const TOOL_SURFACE_READINESS_RETRY_DELAYS_MS = [500, 1_000, 2_000, 4_000, 8_000, 15_000, 15_000, 15_000];
1531
+ export function shouldRetryClaudeCodeToolSurfaceReadiness(error) {
1532
+ if (!error)
1533
+ return false;
1534
+ return error.includes(TOOL_SURFACE_NOT_READY) && !/\bterminal\b/i.test(error);
1535
+ }
1536
+ export function resolveClaudeCodeToolSurfaceReadinessRetryDelayMs(error, attempt, preflightVerified = false) {
1537
+ if (!shouldRetryClaudeCodeToolSurfaceReadiness(error))
1538
+ return null;
1539
+ const delays = preflightVerified
1540
+ ? POST_PREFLIGHT_READINESS_RETRY_DELAYS_MS
1541
+ : TOOL_SURFACE_READINESS_RETRY_DELAYS_MS;
1542
+ return delays[attempt] ?? null;
1543
+ }
1544
+ function makeAbortError() {
1545
+ const error = new Error("AbortError: The operation was aborted");
1546
+ error.name = "AbortError";
1547
+ return error;
1548
+ }
1549
+ function delay(ms, signal) {
1550
+ if (signal?.aborted)
1551
+ return Promise.reject(makeAbortError());
1552
+ return new Promise((resolve, reject) => {
1553
+ const timeout = setTimeout(() => {
1554
+ signal?.removeEventListener("abort", onAbort);
1555
+ resolve();
1556
+ }, ms);
1557
+ const onAbort = () => {
1558
+ clearTimeout(timeout);
1559
+ reject(makeAbortError());
1560
+ };
1561
+ signal?.addEventListener("abort", onAbort, { once: true });
1562
+ });
1563
+ }
1306
1564
  /**
1307
1565
  * Build the options object passed to the Claude Agent SDK's `query()` call.
1308
1566
  *
@@ -1417,6 +1675,13 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
1417
1675
  // leave allowed mcp__... tools with no registered backing tool.
1418
1676
  const settingSources = strictMcpConfig ? [] : ["user", "project", "local"];
1419
1677
  const exactWorkflowMcpTools = resolveExactWorkflowMcpToolsForPhase(gsdPhase, workflowServerName, workflowExplicitlyBlocked);
1678
+ const questionToolSurface = resolveWorkflowQuestionToolSurface({
1679
+ workflowServerName,
1680
+ workflowExplicitlyBlocked,
1681
+ workflowMcpTools,
1682
+ exactWorkflowMcpTools,
1683
+ env: process.env,
1684
+ });
1420
1685
  const runUatDisallowedTools = gsdPhase === "run-uat" && workflowServerName
1421
1686
  ? [
1422
1687
  ...RUN_UAT_FORBIDDEN_TOOL_NAMES.filter((toolName) => !toolName.startsWith("mcp__")),
@@ -1427,33 +1692,27 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
1427
1692
  `mcp__${workflowServerName}__gsd_save_gate_result`,
1428
1693
  ]
1429
1694
  : [];
1695
+ const allowToolSearchForWorkflowMcp = workflowMcpTools.length > 0 || exactWorkflowMcpTools.length > 0;
1430
1696
  const disallowedTools = [...new Set([
1431
- "ToolSearch",
1697
+ ...(allowToolSearchForWorkflowMcp ? [] : ["ToolSearch"]),
1698
+ ...(gsdPhase ? ["Skill"] : []),
1432
1699
  ...(workflowMcpTools.length > 0 || exactWorkflowMcpTools.length > 0 ? ["AskUserQuestion"] : []),
1700
+ ...questionToolSurface.disallowedTools,
1433
1701
  ...runUatDisallowedTools,
1434
1702
  ...extraDisallowedTools,
1435
1703
  ])];
1436
- const standardClaudeTools = [
1437
- "Read",
1438
- "Write",
1439
- "Edit",
1440
- "Glob",
1441
- "Grep",
1442
- "Bash",
1443
- "Agent",
1444
- "WebFetch",
1445
- "WebSearch",
1446
- ];
1704
+ const nativeTools = resolveClaudeNativeToolsForPhase(gsdPhase);
1447
1705
  const allowedTools = gsdPhase === "run-uat"
1448
1706
  ? [
1449
- ...RUN_UAT_CLAUDE_NATIVE_TOOL_NAMES,
1707
+ ...nativeTools,
1450
1708
  ...(exactWorkflowMcpTools.length > 0 ? exactWorkflowMcpTools : []),
1451
1709
  ...allowedBrowserMcpTools,
1452
1710
  ]
1453
1711
  : [
1454
- ...standardClaudeTools,
1712
+ ...nativeTools,
1455
1713
  ...exactWorkflowMcpTools,
1456
- ...(workflowMcpTools.length > 0 ? workflowMcpTools : ["AskUserQuestion"]),
1714
+ ...(!gsdPhase && workflowMcpTools.length > 0 ? workflowMcpTools : []),
1715
+ ...(workflowMcpTools.length === 0 && exactWorkflowMcpTools.length === 0 ? ["AskUserQuestion"] : []),
1457
1716
  ...allowedBrowserMcpTools,
1458
1717
  ];
1459
1718
  const supportsAdaptive = modelSupportsAdaptiveThinking(modelId);
@@ -1486,237 +1745,28 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
1486
1745
  || modelId.includes("opus-4-7")
1487
1746
  || modelId.includes("opus-4.7")
1488
1747
  || modelId.includes("opus-4-8")
1489
- || modelId.includes("opus-4.8")) ? ["context-1m-2025-08-07"] : [],
1748
+ || modelId.includes("opus-4.8")
1749
+ || modelId.includes("fable-5")
1750
+ || modelId.includes("fable.5")) ? ["context-1m-2025-08-07"] : [],
1490
1751
  ...(thinkingConfig ?? {}),
1491
1752
  ...(effort ? { effort } : {}),
1492
1753
  ...sdkExtraOptions,
1493
1754
  };
1494
1755
  }
1495
- /** Normalise heterogeneous SDK tool-result content (string, array, or object) into a uniform `ExternalToolResultContentBlock[]`. */
1496
- function normalizeToolResultContent(content) {
1497
- if (typeof content === "string") {
1498
- return [{ type: "text", text: content }];
1499
- }
1500
- if (!Array.isArray(content)) {
1501
- if (content == null)
1502
- return [{ type: "text", text: "" }];
1503
- return [{ type: "text", text: JSON.stringify(content) }];
1504
- }
1505
- const blocks = [];
1506
- for (const item of content) {
1507
- if (typeof item === "string") {
1508
- blocks.push({ type: "text", text: item });
1509
- continue;
1510
- }
1511
- if (!item || typeof item !== "object") {
1512
- blocks.push({ type: "text", text: String(item) });
1513
- continue;
1514
- }
1515
- const block = item;
1516
- if (block.type === "text") {
1517
- blocks.push({ type: "text", text: typeof block.text === "string" ? block.text : "" });
1518
- continue;
1519
- }
1520
- if (block.type === "image"
1521
- && typeof block.data === "string"
1522
- && typeof block.mimeType === "string") {
1523
- blocks.push({ type: "image", data: block.data, mimeType: block.mimeType });
1524
- continue;
1525
- }
1526
- blocks.push({ type: "text", text: JSON.stringify(block) });
1527
- }
1528
- return blocks.length > 0 ? blocks : [{ type: "text", text: "" }];
1529
- }
1530
- /**
1531
- * Extract a `details` payload from an MCP tool-result block.
1532
- *
1533
- * MCP's `CallToolResult` carries structured data in `structuredContent` — the
1534
- * protocol's supported channel for non-text payloads. Claude Code's synthetic
1535
- * user message may surface that field in one of two shapes depending on SDK
1536
- * version: as a sibling on the `mcp_tool_result` block itself, or as a
1537
- * dedicated content sub-block with `type: "structuredContent"`. Snake-case
1538
- * (`structured_content`) is accepted defensively in case a transport hop
1539
- * rewrites casing. All other shapes fall back to an empty object so callers
1540
- * can rely on `details` being present.
1541
- */
1542
- function extractStructuredDetailsFromBlock(block) {
1543
- const sibling = block.structuredContent ?? block.structured_content;
1544
- if (sibling && typeof sibling === "object" && !Array.isArray(sibling)) {
1545
- return sibling;
1546
- }
1547
- if (Array.isArray(block.content)) {
1548
- for (const item of block.content) {
1549
- if (!item || typeof item !== "object")
1550
- continue;
1551
- const sub = item;
1552
- if (sub.type !== "structuredContent" && sub.type !== "structured_content")
1553
- continue;
1554
- const payload = sub.structuredContent ?? sub.structured_content ?? sub.data ?? sub.value;
1555
- if (payload && typeof payload === "object" && !Array.isArray(payload)) {
1556
- return payload;
1557
- }
1558
- }
1559
- }
1560
- // Return undefined (not {}) when no structured payload is present, matching
1561
- // the pre-#4477 contract where `details` was nullable. An empty-object
1562
- // sentinel is truthy and breaks downstream consumers that gate on
1563
- // `if (details)`. `undefined` matches the type of the field these results
1564
- // flow into (`Record<string, unknown> | undefined`).
1565
- return undefined;
1566
- }
1567
- /**
1568
- * True for items that are MCP `structuredContent` pseudo-blocks living inside
1569
- * a tool-result `content[]` array. These blocks carry the structured payload
1570
- * (extracted separately by `extractStructuredDetailsFromBlock`) and must NOT
1571
- * leak into the visible content rendered to the user — otherwise the renderer
1572
- * stringifies the JSON pseudo-block and shows it next to the actual tool
1573
- * output. See PR #4477 review (post-fix-round).
1574
- */
1575
- function isStructuredContentPseudoBlock(item) {
1576
- if (!item || typeof item !== "object")
1577
- return false;
1578
- const type = item.type;
1579
- return type === "structuredContent" || type === "structured_content";
1580
- }
1581
- /**
1582
- * Strip `structuredContent` pseudo-blocks from a tool-result content array
1583
- * before normalization. The structured payload is extracted via the sibling
1584
- * `structuredContent` field (or a dedicated extractor pass on the raw block);
1585
- * the visible content path must not include the pseudo-block itself.
1586
- */
1587
- function stripStructuredContentPseudoBlocks(content) {
1588
- if (!Array.isArray(content))
1589
- return content;
1590
- return content.filter((item) => !isStructuredContentPseudoBlock(item));
1591
- }
1592
- /** Extract tool result payloads from an SDK synthetic user message, keyed by tool-use ID. */
1593
- export function extractToolResultsFromSdkUserMessage(message) {
1594
- const extracted = [];
1595
- const seen = new Set();
1596
- const rawMessage = message.message;
1597
- const content = Array.isArray(rawMessage?.content) ? rawMessage.content : [];
1598
- for (const item of content) {
1599
- if (!item || typeof item !== "object")
1600
- continue;
1601
- const block = item;
1602
- const type = typeof block.type === "string" ? block.type : "";
1603
- if (type !== "tool_result" && type !== "mcp_tool_result")
1604
- continue;
1605
- const toolUseId = typeof block.tool_use_id === "string" ? block.tool_use_id : "";
1606
- if (!toolUseId || seen.has(toolUseId))
1607
- continue;
1608
- seen.add(toolUseId);
1609
- extracted.push({
1610
- toolUseId,
1611
- result: {
1612
- content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(block.content)),
1613
- details: extractStructuredDetailsFromBlock(block),
1614
- isError: block.is_error === true,
1615
- },
1616
- });
1617
- }
1618
- if (extracted.length === 0) {
1619
- const fallback = message.tool_use_result;
1620
- if (fallback && typeof fallback === "object") {
1621
- const toolResult = fallback;
1622
- const toolUseId = typeof toolResult.tool_use_id === "string" ? toolResult.tool_use_id : "";
1623
- if (toolUseId) {
1624
- extracted.push({
1625
- toolUseId,
1626
- result: {
1627
- content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(toolResult.content)),
1628
- details: extractStructuredDetailsFromBlock(toolResult),
1629
- isError: toolResult.is_error === true,
1630
- },
1631
- });
1632
- }
1633
- }
1634
- }
1635
- return extracted;
1636
- }
1637
- /** Attach external tool results from the SDK synthetic user message to their corresponding tool-call blocks by ID. */
1638
- function attachExternalResultsToToolBlocks(toolBlocks, toolResultsById) {
1639
- for (const block of toolBlocks) {
1640
- if (block.type !== "toolCall" && block.type !== "serverToolUse")
1641
- continue;
1642
- const externalResult = toolResultsById.get(block.id);
1643
- if (!externalResult)
1644
- continue;
1645
- block.externalResult = externalResult;
1646
- }
1647
- }
1648
- /**
1649
- * Build the final assistant content that Agent Core consumes in
1650
- * `externalToolExecution` mode. This preserves tool-call blocks, attaches any
1651
- * SDK-produced external results by tool-call id, and then appends the final
1652
- * text/thinking blocks for the completed turn.
1653
- */
1654
- export function buildFinalAssistantContent(params) {
1655
- const mergedToolBlocks = [...params.intermediateToolBlocks];
1656
- if (params.pendingContent) {
1657
- mergePendingToolCalls(mergedToolBlocks, params.pendingContent);
1658
- }
1659
- attachExternalResultsToToolBlocks(mergedToolBlocks, params.toolResultsById);
1660
- const finalContent = [...mergedToolBlocks];
1661
- if (params.pendingContent && params.pendingContent.length > 0) {
1662
- for (const block of params.pendingContent) {
1663
- if (block.type === "text" || block.type === "thinking") {
1664
- finalContent.push(block);
1665
- }
1666
- }
1667
- }
1668
- else {
1669
- if (params.lastThinkingContent) {
1670
- finalContent.push({ type: "thinking", thinking: params.lastThinkingContent });
1671
- }
1672
- if (params.lastTextContent) {
1673
- finalContent.push({ type: "text", text: params.lastTextContent });
1674
- }
1675
- }
1676
- if (finalContent.length === 0 && params.fallbackResultText) {
1677
- finalContent.push({ type: "text", text: params.fallbackResultText });
1678
- }
1679
- return finalContent;
1680
- }
1681
- /**
1682
- * Merge tool-call blocks from the active partial-message builder into the
1683
- * running list of intermediate tool calls, preserving order and de-duping
1684
- * by tool-call id. Exposed for testing the F3 fix (final-turn tool calls
1685
- * dropped when `result` arrives without a preceding synthetic `user`).
1686
- */
1687
- export function mergePendingToolCalls(intermediate, pending) {
1688
- const alreadyIncluded = new Set();
1689
- for (const block of intermediate) {
1690
- if (block.type === "toolCall")
1691
- alreadyIncluded.add(block.id);
1692
- }
1693
- for (const block of pending) {
1694
- if (block.type !== "toolCall")
1695
- continue;
1696
- if (alreadyIncluded.has(block.id))
1697
- continue;
1698
- alreadyIncluded.add(block.id);
1699
- intermediate.push(block);
1700
- }
1701
- return intermediate;
1702
- }
1703
- export function handleClaudeCodePartialStreamEvent(builder, event, modelId) {
1704
- if (event.type === "message_start") {
1705
- // Claude Code can emit repeated SDK message_start events inside one
1706
- // logical assistant response. Keep appending until a synthetic user
1707
- // tool-result boundary explicitly clears the builder.
1708
- return {
1709
- builder: builder ?? new PartialMessageBuilder(event.message?.model ?? modelId),
1710
- assistantEvent: null,
1711
- };
1712
- }
1713
- if (!builder)
1714
- return { builder, assistantEvent: null };
1715
- return { builder, assistantEvent: builder.handleEvent(event) };
1716
- }
1717
1756
  // ---------------------------------------------------------------------------
1718
1757
  // streamSimple implementation
1719
1758
  // ---------------------------------------------------------------------------
1759
+ let capturedClaudeCodeUIContext;
1760
+ /**
1761
+ * Capture the active extension UI context from `before_provider_request`. Core
1762
+ * invokes `streamSimple` with a plain `SimpleStreamOptions` (no
1763
+ * `extensionUIContext`), so without this the elicitation handler is never wired
1764
+ * and `ask_user_questions` immediately returns cancelled. See index.ts, which
1765
+ * registers the hook that calls this.
1766
+ */
1767
+ export function setClaudeCodeUIContext(ui) {
1768
+ capturedClaudeCodeUIContext = ui;
1769
+ }
1720
1770
  /**
1721
1771
  * GSD streamSimple function that delegates to the Claude Agent SDK.
1722
1772
  *
@@ -1730,33 +1780,33 @@ export function streamViaClaudeCode(model, context, options) {
1730
1780
  void pumpSdkMessages(model, context, options, stream);
1731
1781
  return stream;
1732
1782
  }
1783
+ function createSdkAttemptMessageState() {
1784
+ return {
1785
+ builder: null,
1786
+ intermediateToolBlocks: [],
1787
+ toolResultsById: new Map(),
1788
+ };
1789
+ }
1733
1790
  /** Async pump that drives the Claude Agent SDK's async-iterable message stream and pushes events into `stream`. */
1734
1791
  async function pumpSdkMessages(model, context, options, stream) {
1735
1792
  const modelId = model.id;
1736
- let builder = null;
1737
1793
  /** Track the last text content seen across all assistant turns for the final message. */
1738
1794
  let lastTextContent = "";
1739
1795
  let lastThinkingContent = "";
1740
- /** Collect tool blocks from intermediate SDK turns for tool execution rendering. */
1741
- const intermediateToolBlocks = [];
1742
- /** Preserve real external tool results from Claude Code's synthetic user messages. */
1743
- const toolResultsById = new Map();
1744
1796
  try {
1745
- // Dynamic import — the SDK is an optional dependency.
1746
- const sdkModule = "@anthropic-ai/claude-agent-sdk";
1747
- const sdk = (await import(/* webpackIgnore: true */ sdkModule));
1748
- // Bridge GSD's AbortSignal to SDK's AbortController
1749
- const controller = new AbortController();
1750
- if (options?.signal) {
1751
- options.signal.addEventListener("abort", () => controller.abort(), { once: true });
1752
- }
1753
1797
  const permissionMode = await resolveClaudePermissionMode();
1754
- const uiContext = options?.extensionUIContext;
1755
- const onExternalToolCall = options?.onExternalToolCall;
1756
- const onExternalToolResult = options?.onExternalToolResult;
1798
+ const claudeOptions = options;
1799
+ const uiContext = claudeOptions?.extensionUIContext ?? capturedClaudeCodeUIContext;
1800
+ const onExternalToolCall = claudeOptions?.onExternalToolCall;
1801
+ const onExternalToolResult = claudeOptions?.onExternalToolResult;
1802
+ const sdkQueryForTest = claudeOptions?._sdkQueryForTest;
1803
+ const query = sdkQueryForTest ??
1804
+ // Dynamic import — the SDK is an optional dependency.
1805
+ (await import(/* webpackIgnore: true */ "@anthropic-ai/claude-agent-sdk")).query;
1757
1806
  const cwd = resolveClaudeCodeCwd(options);
1807
+ const projectRoot = resolveWorkflowMcpProjectRoot(cwd);
1758
1808
  autoInitClaudeCodeWorkflowMcp(cwd);
1759
- const gsdPhase = inferGsdPhaseFromContext(context);
1809
+ const gsdPhase = resolveGsdPhaseForSdk(context, projectRoot);
1760
1810
  const canUseToolHandler = createClaudeCodeCanUseToolHandler(uiContext);
1761
1811
  // When no UI is available (headless / auto-mode), auto-approve all
1762
1812
  // tool requests. This replaces the old bypassPermissions workaround.
@@ -1773,18 +1823,15 @@ async function pumpSdkMessages(model, context, options, stream) {
1773
1823
  }
1774
1824
  : {}),
1775
1825
  });
1826
+ const workflowMcpServerName = workflowMcpServerNameFromAllowedTools(sdkOpts.allowedTools);
1827
+ const allowPendingToolSearchHydration = Boolean(workflowMcpServerName && gsdPhase)
1828
+ && !sdkOpts.disallowedTools?.includes("ToolSearch");
1776
1829
  const prompt = buildPromptFromContext(context, {
1777
- workflowMcpServerName: workflowMcpServerNameFromAllowedTools(sdkOpts.allowedTools),
1830
+ workflowMcpServerName,
1778
1831
  browserMcpServerName: browserMcpServerNameFromAllowedTools(sdkOpts.allowedTools),
1832
+ questionToolAvailable: workflowQuestionToolAvailableFromAllowedTools(sdkOpts.allowedTools, workflowMcpServerName, gsdPhase),
1779
1833
  });
1780
1834
  const queryPrompt = buildSdkQueryPrompt(context, prompt);
1781
- const queryResult = sdk.query({
1782
- prompt: queryPrompt,
1783
- options: {
1784
- ...sdkOpts,
1785
- abortController: controller,
1786
- },
1787
- });
1788
1835
  // Emit start with an empty partial
1789
1836
  const initialPartial = {
1790
1837
  role: "assistant",
@@ -1797,169 +1844,304 @@ async function pumpSdkMessages(model, context, options, stream) {
1797
1844
  timestamp: Date.now(),
1798
1845
  };
1799
1846
  stream.push({ type: "start", partial: initialPartial });
1800
- for await (const msg of queryResult) {
1801
- if (options?.signal?.aborted) {
1802
- // User-initiated cancel — emit an aborted error so the agent
1803
- // loop classifies this as a deliberate stop, not a transient
1804
- // provider failure that should be retried.
1805
- stream.push({
1806
- type: "error",
1807
- reason: "aborted",
1808
- error: makeAbortedMessage(modelId, lastTextContent),
1809
- });
1810
- return;
1811
- }
1812
- switch (msg.type) {
1813
- // -- Init --
1814
- case "system": {
1815
- // Nothing to emit — the stream is already started.
1816
- break;
1817
- }
1818
- // -- Streaming partial messages --
1819
- case "stream_event": {
1820
- const partial = msg;
1821
- const event = partial.event;
1822
- const result = handleClaudeCodePartialStreamEvent(builder, event, modelId);
1823
- builder = result.builder;
1824
- const assistantEvent = result.assistantEvent;
1825
- if (assistantEvent) {
1826
- stream.push(assistantEvent);
1827
- if (assistantEvent.type === "toolcall_start") {
1828
- const toolBlock = assistantEvent.partial.content[assistantEvent.contentIndex];
1829
- if (toolBlock?.type === "toolCall") {
1830
- try {
1831
- await onExternalToolCall?.(toolBlock);
1832
- }
1833
- catch (error) {
1834
- console.warn("[claude-code] onExternalToolCall callback failed:", error);
1835
- }
1836
- }
1837
- }
1847
+ const readinessProgressState = {};
1848
+ const trackWorkflowMcpSdk = Boolean(workflowMcpServerName && gsdPhase);
1849
+ if (trackWorkflowMcpSdk)
1850
+ beginWorkflowMcpSdkSession();
1851
+ try {
1852
+ let workflowMcpPreflightVerified = false;
1853
+ const shouldRunWorkflowMcpPreflight = workflowMcpServerName && gsdPhase && !claudeOptions?._skipWorkflowMcpPreflightForTest;
1854
+ if (shouldRunWorkflowMcpPreflight) {
1855
+ try {
1856
+ const progressMessage = buildWorkflowMcpReadinessProgressMessage({
1857
+ unitType: gsdPhase,
1858
+ workflowServerName: workflowMcpServerName,
1859
+ stage: "preflight",
1860
+ });
1861
+ pushWorkflowMcpReadinessProgressEvent({
1862
+ stream,
1863
+ partial: initialPartial,
1864
+ state: readinessProgressState,
1865
+ message: progressMessage,
1866
+ });
1867
+ uiContext?.setStatus?.("gsd-step", progressMessage);
1868
+ const preflightError = await awaitWorkflowMcpToolRegistration({
1869
+ unitType: gsdPhase,
1870
+ workflowServerName: workflowMcpServerName,
1871
+ projectRoot,
1872
+ workflowServerConfig: resolveWorkflowMcpPreflightServerConfig(sdkOpts.mcpServers, workflowMcpServerName),
1873
+ signal: options?.signal,
1874
+ });
1875
+ if (preflightError) {
1876
+ stream.push({
1877
+ type: "error",
1878
+ reason: "error",
1879
+ error: makeErrorMessage(modelId, preflightError),
1880
+ });
1881
+ return;
1838
1882
  }
1839
- break;
1883
+ workflowMcpPreflightVerified = true;
1840
1884
  }
1841
- // -- Complete assistant message (non-streaming fallback) --
1842
- case "assistant": {
1843
- const sdkAssistant = msg;
1844
- // Capture text content from complete messages
1845
- for (const block of sdkAssistant.message.content) {
1846
- if (block.type === "text") {
1847
- lastTextContent = block.text;
1848
- }
1849
- else if (block.type === "thinking") {
1850
- lastThinkingContent = block.thinking;
1851
- }
1852
- }
1853
- break;
1885
+ finally {
1886
+ uiContext?.setStatus?.("gsd-step", "");
1854
1887
  }
1855
- // -- User message (synthetic tool result — signals turn boundary) --
1856
- case "user": {
1857
- // Capture content from the completed turn before resetting
1858
- if (builder) {
1859
- for (const block of builder.message.content) {
1860
- if (block.type === "text" && block.text) {
1861
- lastTextContent = block.text;
1862
- }
1863
- else if (block.type === "thinking" && block.thinking) {
1864
- lastThinkingContent = block.thinking;
1865
- }
1866
- else if (block.type === "toolCall" || block.type === "serverToolUse") {
1867
- // Collect tool blocks for externalToolExecution rendering
1868
- intermediateToolBlocks.push(block);
1869
- }
1888
+ if (workflowMcpPreflightVerified) {
1889
+ await delay(POST_PREFLIGHT_SDK_SETTLE_MS, options?.signal);
1890
+ }
1891
+ }
1892
+ sdkAttemptLoop: for (let readinessAttempt = 0;; readinessAttempt++) {
1893
+ let { builder, intermediateToolBlocks, toolResultsById } = createSdkAttemptMessageState();
1894
+ const controller = new AbortController();
1895
+ const forwardAbort = () => controller.abort();
1896
+ if (options?.signal) {
1897
+ options.signal.addEventListener("abort", forwardAbort, { once: true });
1898
+ }
1899
+ const queryResult = query({
1900
+ prompt: queryPrompt,
1901
+ options: {
1902
+ ...sdkOpts,
1903
+ abortController: controller,
1904
+ },
1905
+ });
1906
+ try {
1907
+ for await (const msg of queryResult) {
1908
+ if (options?.signal?.aborted) {
1909
+ // User-initiated cancel — emit an aborted error so the agent
1910
+ // loop classifies this as a deliberate stop, not a transient
1911
+ // provider failure that should be retried.
1912
+ stream.push({
1913
+ type: "error",
1914
+ reason: "aborted",
1915
+ error: makeAbortedMessage(modelId, lastTextContent),
1916
+ });
1917
+ return;
1870
1918
  }
1871
- }
1872
- // Extract tool results from the SDK's synthetic user message
1873
- // and attach to corresponding tool call blocks immediately.
1874
- for (const { toolUseId, result } of extractToolResultsFromSdkUserMessage(msg)) {
1875
- toolResultsById.set(toolUseId, result);
1876
- }
1877
- attachExternalResultsToToolBlocks(intermediateToolBlocks, toolResultsById);
1878
- // Push a synthetic toolcall_end for each tool call from this turn
1879
- // so the TUI can render tool results in real-time during the SDK
1880
- // session instead of waiting until the entire session completes.
1881
- if (builder) {
1882
- for (const block of builder.message.content) {
1883
- const extResult = block.externalResult;
1884
- if (!extResult)
1885
- continue;
1886
- const contentIndex = builder.message.content.indexOf(block);
1887
- if (contentIndex < 0)
1888
- continue;
1889
- // Push synthetic completion events with result attached so the
1890
- // chat-controller can update pending ToolExecutionComponents.
1891
- if (block.type === "toolCall") {
1892
- try {
1893
- await onExternalToolResult?.({
1894
- toolCall: block,
1895
- result: extResult,
1919
+ switch (msg.type) {
1920
+ // -- Init --
1921
+ case "system": {
1922
+ // Tool Surface Readiness gate: the init message is the first (and
1923
+ // only) point where the session reports its live tool surface and
1924
+ // MCP server statuses. If the workflow server failed or has not
1925
+ // registered this Unit's required tools, abort before the first
1926
+ // model turn with a transient, recovery-classifiable error
1927
+ // (tool-unavailable retry) instead of letting the model hit
1928
+ // "No such tool available" mid-Unit and improvise around it.
1929
+ const init = msg;
1930
+ if (init.subtype === "init") {
1931
+ const readinessError = await resolveClaudeCodeToolSurfaceReadinessError({
1932
+ unitType: gsdPhase,
1933
+ workflowServerName: workflowMcpServerName,
1934
+ projectRoot,
1935
+ observation: { tools: init.tools ?? [], mcpServers: init.mcp_servers ?? [] },
1936
+ allowPendingToolSearchHydration,
1896
1937
  });
1938
+ if (readinessError) {
1939
+ const retryDelayMs = resolveClaudeCodeToolSurfaceReadinessRetryDelayMs(readinessError, readinessAttempt, workflowMcpPreflightVerified);
1940
+ if (retryDelayMs !== null && !options?.signal?.aborted) {
1941
+ controller.abort();
1942
+ const progressMessage = buildWorkflowMcpReadinessProgressMessage({
1943
+ unitType: gsdPhase ?? "workflow unit",
1944
+ workflowServerName: workflowMcpServerName ?? "workflow",
1945
+ stage: "retry",
1946
+ attempt: readinessAttempt + 1,
1947
+ delayMs: retryDelayMs,
1948
+ });
1949
+ pushWorkflowMcpReadinessProgressEvent({
1950
+ stream,
1951
+ partial: initialPartial,
1952
+ state: readinessProgressState,
1953
+ message: progressMessage,
1954
+ });
1955
+ uiContext?.setStatus?.("gsd-step", progressMessage);
1956
+ await delay(retryDelayMs, options?.signal);
1957
+ uiContext?.setStatus?.("gsd-step", "");
1958
+ continue sdkAttemptLoop;
1959
+ }
1960
+ controller.abort();
1961
+ stream.push({
1962
+ type: "error",
1963
+ reason: "error",
1964
+ error: makeErrorMessage(modelId, readinessError),
1965
+ });
1966
+ return;
1967
+ }
1897
1968
  }
1898
- catch (error) {
1899
- console.warn("[claude-code] onExternalToolResult callback failed:", error);
1969
+ break;
1970
+ }
1971
+ // -- Streaming partial messages --
1972
+ case "stream_event": {
1973
+ const partial = msg;
1974
+ const event = partial.event;
1975
+ const result = handleClaudeCodePartialStreamEvent(builder, event, modelId);
1976
+ builder = result.builder;
1977
+ const assistantEvent = result.assistantEvent;
1978
+ if (assistantEvent) {
1979
+ stream.push(assistantEvent);
1980
+ if (assistantEvent.type === "toolcall_start") {
1981
+ const toolBlock = assistantEvent.partial.content[assistantEvent.contentIndex];
1982
+ if (toolBlock?.type === "toolCall") {
1983
+ try {
1984
+ await onExternalToolCall?.(toolBlock);
1985
+ }
1986
+ catch (error) {
1987
+ console.warn("[claude-code] onExternalToolCall callback failed:", error);
1988
+ }
1989
+ }
1990
+ }
1900
1991
  }
1901
- stream.push({
1902
- type: "toolcall_end",
1903
- contentIndex,
1904
- toolCall: block,
1905
- partial: builder.message,
1906
- });
1992
+ break;
1907
1993
  }
1908
- else if (block.type === "serverToolUse") {
1909
- try {
1910
- await onExternalToolResult?.({
1911
- toolCall: serverToolUseToToolCallLike(block),
1912
- result: extResult,
1913
- });
1994
+ // -- Complete assistant message (non-streaming fallback) --
1995
+ case "assistant": {
1996
+ const sdkAssistant = msg;
1997
+ // Capture text content from complete messages
1998
+ for (const block of sdkAssistant.message.content) {
1999
+ if (block.type === "text") {
2000
+ lastTextContent = block.text;
2001
+ }
2002
+ else if (block.type === "thinking") {
2003
+ lastThinkingContent = block.thinking;
2004
+ }
2005
+ }
2006
+ break;
2007
+ }
2008
+ // -- User message (synthetic tool result — signals turn boundary) --
2009
+ case "user": {
2010
+ // Capture content from the completed turn before resetting
2011
+ if (builder) {
2012
+ for (const block of builder.message.content) {
2013
+ if (block.type === "text" && block.text) {
2014
+ lastTextContent = block.text;
2015
+ }
2016
+ else if (block.type === "thinking" && block.thinking) {
2017
+ lastThinkingContent = block.thinking;
2018
+ }
2019
+ else if (block.type === "toolCall" || block.type === "serverToolUse") {
2020
+ // Collect tool blocks for externalToolExecution rendering
2021
+ intermediateToolBlocks.push(block);
2022
+ }
2023
+ }
2024
+ }
2025
+ // Extract tool results from the SDK's synthetic user message
2026
+ // and attach to corresponding tool call blocks immediately.
2027
+ for (const { toolUseId, result } of extractToolResultsFromSdkUserMessage(msg)) {
2028
+ toolResultsById.set(toolUseId, result);
1914
2029
  }
1915
- catch (error) {
1916
- console.warn("[claude-code] onExternalToolResult callback failed:", error);
2030
+ attachExternalResultsToToolBlocks(intermediateToolBlocks, toolResultsById);
2031
+ // Push a synthetic toolcall_end for each tool call from this turn
2032
+ // so the TUI can render tool results in real-time during the SDK
2033
+ // session instead of waiting until the entire session completes.
2034
+ if (builder) {
2035
+ for (const block of builder.message.content) {
2036
+ const extResult = block.externalResult;
2037
+ if (!extResult)
2038
+ continue;
2039
+ const contentIndex = builder.message.content.indexOf(block);
2040
+ if (contentIndex < 0)
2041
+ continue;
2042
+ const suppressDuplicateUnavailable = shouldSuppressDuplicateToolUnavailableBlock(block, builder.message.content);
2043
+ // Push synthetic completion events with result attached so the
2044
+ // chat-controller can update pending ToolExecutionComponents.
2045
+ if (block.type === "toolCall") {
2046
+ if (suppressDuplicateUnavailable) {
2047
+ delete block.externalResult;
2048
+ stream.push({
2049
+ type: "toolcall_end",
2050
+ contentIndex,
2051
+ toolCall: block,
2052
+ partial: builder.message,
2053
+ });
2054
+ block.externalResult = extResult;
2055
+ continue;
2056
+ }
2057
+ try {
2058
+ await onExternalToolResult?.({
2059
+ toolCall: block,
2060
+ result: extResult,
2061
+ });
2062
+ }
2063
+ catch (error) {
2064
+ console.warn("[claude-code] onExternalToolResult callback failed:", error);
2065
+ }
2066
+ stream.push({
2067
+ type: "toolcall_end",
2068
+ contentIndex,
2069
+ toolCall: block,
2070
+ partial: builder.message,
2071
+ });
2072
+ }
2073
+ else if (block.type === "serverToolUse") {
2074
+ try {
2075
+ await onExternalToolResult?.({
2076
+ toolCall: serverToolUseToToolCallLike(block),
2077
+ result: extResult,
2078
+ });
2079
+ }
2080
+ catch (error) {
2081
+ console.warn("[claude-code] onExternalToolResult callback failed:", error);
2082
+ }
2083
+ stream.push({
2084
+ type: "server_tool_use",
2085
+ contentIndex,
2086
+ partial: builder.message,
2087
+ });
2088
+ }
2089
+ }
1917
2090
  }
1918
- stream.push({
1919
- type: "server_tool_use",
1920
- contentIndex,
1921
- partial: builder.message,
2091
+ builder = null;
2092
+ break;
2093
+ }
2094
+ // -- Result (terminal) --
2095
+ case "result": {
2096
+ const result = msg;
2097
+ const finalContent = buildFinalAssistantContent({
2098
+ intermediateToolBlocks,
2099
+ pendingContent: builder?.message.content,
2100
+ toolResultsById,
2101
+ lastThinkingContent,
2102
+ lastTextContent,
2103
+ fallbackResultText: result.subtype === "success" && result.result ? result.result : undefined,
1922
2104
  });
2105
+ const finalMessage = {
2106
+ role: "assistant",
2107
+ content: finalContent,
2108
+ api: "anthropic-messages",
2109
+ provider: "claude-code",
2110
+ model: modelId,
2111
+ usage: mapUsage(result.usage, result.total_cost_usd),
2112
+ stopReason: result.is_error ? "error" : "stop",
2113
+ timestamp: Date.now(),
2114
+ };
2115
+ if (result.is_error) {
2116
+ finalMessage.errorMessage = getResultErrorMessage(result);
2117
+ stream.push({ type: "error", reason: "error", error: finalMessage });
2118
+ }
2119
+ else {
2120
+ stream.push({ type: "done", reason: "stop", message: finalMessage });
2121
+ }
2122
+ return;
1923
2123
  }
2124
+ default:
2125
+ break;
1924
2126
  }
1925
2127
  }
1926
- builder = null;
1927
- break;
1928
2128
  }
1929
- // -- Result (terminal) --
1930
- case "result": {
1931
- const result = msg;
1932
- const finalContent = buildFinalAssistantContent({
1933
- intermediateToolBlocks,
1934
- pendingContent: builder?.message.content,
1935
- toolResultsById,
1936
- lastThinkingContent,
1937
- lastTextContent,
1938
- fallbackResultText: result.subtype === "success" && result.result ? result.result : undefined,
1939
- });
1940
- const finalMessage = {
1941
- role: "assistant",
1942
- content: finalContent,
1943
- api: "anthropic-messages",
1944
- provider: "claude-code",
1945
- model: modelId,
1946
- usage: mapUsage(result.usage, result.total_cost_usd),
1947
- stopReason: result.is_error ? "error" : "stop",
1948
- timestamp: Date.now(),
1949
- };
1950
- if (result.is_error) {
1951
- finalMessage.errorMessage = getResultErrorMessage(result);
1952
- stream.push({ type: "error", reason: "error", error: finalMessage });
1953
- }
1954
- else {
1955
- stream.push({ type: "done", reason: "stop", message: finalMessage });
1956
- }
1957
- return;
2129
+ finally {
2130
+ options?.signal?.removeEventListener("abort", forwardAbort);
1958
2131
  }
1959
- default:
1960
- break;
2132
+ // The SDK stream ended without a terminal `result` message and
2133
+ // without a readiness retry (the only restart path, via
2134
+ // `continue sdkAttemptLoop`). Break out so the post-loop
2135
+ // exhaustion handler emits a transient stream-exhausted error,
2136
+ // instead of silently starting another SDK session and looping
2137
+ // forever.
2138
+ break sdkAttemptLoop;
1961
2139
  }
1962
2140
  }
2141
+ finally {
2142
+ if (trackWorkflowMcpSdk)
2143
+ endWorkflowMcpSdkSession();
2144
+ }
1963
2145
  // Generator exhaustion without a terminal result is a stream interruption,
1964
2146
  // not a successful completion. Emitting an error lets GSD classify it as a
1965
2147
  // transient provider failure instead of advancing auto-mode state.