@opengsd/gsd-pi 1.2.0 → 1.3.0-dev.eed73bea

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 (1703) 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/auto/closeout.js +215 -0
  55. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
  56. package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
  57. package/dist/resources/extensions/gsd/auto/dispatch-history.js +125 -0
  58. package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
  59. package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
  60. package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
  61. package/dist/resources/extensions/gsd/auto/loop.js +147 -58
  62. package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
  63. package/dist/resources/extensions/gsd/auto/orchestrator.js +361 -80
  64. package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
  65. package/dist/resources/extensions/gsd/auto/phases.js +17 -2299
  66. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -0
  67. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  68. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  69. package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
  70. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  71. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  72. package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
  73. package/dist/resources/extensions/gsd/auto-artifact-paths.js +81 -19
  74. package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
  75. package/dist/resources/extensions/gsd/auto-dashboard.js +271 -435
  76. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +26 -37
  77. package/dist/resources/extensions/gsd/auto-dispatch.js +119 -84
  78. package/dist/resources/extensions/gsd/auto-model-selection.js +56 -19
  79. package/dist/resources/extensions/gsd/auto-post-unit.js +85 -45
  80. package/dist/resources/extensions/gsd/auto-prompts.js +238 -58
  81. package/dist/resources/extensions/gsd/auto-recovery.js +173 -89
  82. package/dist/resources/extensions/gsd/auto-runtime-state.js +27 -0
  83. package/dist/resources/extensions/gsd/auto-start.js +116 -82
  84. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  85. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  86. package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
  87. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +14 -47
  88. package/dist/resources/extensions/gsd/auto-verification.js +34 -38
  89. package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
  90. package/dist/resources/extensions/gsd/auto-worktree.js +230 -467
  91. package/dist/resources/extensions/gsd/auto.js +158 -50
  92. package/dist/resources/extensions/gsd/blocked-models.js +28 -0
  93. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +161 -62
  94. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +34 -38
  95. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +74 -50
  96. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +4 -2
  97. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  98. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  99. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +42 -1
  100. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +429 -170
  101. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  102. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +75 -1
  103. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  104. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +476 -83
  105. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  106. package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
  107. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  108. package/dist/resources/extensions/gsd/captures.js +5 -15
  109. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +110 -5
  110. package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
  111. package/dist/resources/extensions/gsd/closeout-wizard.js +97 -0
  112. package/dist/resources/extensions/gsd/codebase-generator.js +1 -0
  113. package/dist/resources/extensions/gsd/commands/catalog.js +12 -62
  114. package/dist/resources/extensions/gsd/commands/context.js +16 -2
  115. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  116. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  117. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  118. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  119. package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
  120. package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
  121. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  122. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  123. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  124. package/dist/resources/extensions/gsd/commands-handlers.js +133 -4
  125. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  126. package/dist/resources/extensions/gsd/commands-maintenance.js +140 -43
  127. package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
  128. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +30 -11
  129. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  130. package/dist/resources/extensions/gsd/commands-verdict.js +21 -5
  131. package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
  132. package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
  133. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  134. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  135. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  136. package/dist/resources/extensions/gsd/config-overlay.js +11 -8
  137. package/dist/resources/extensions/gsd/consent-question.js +365 -0
  138. package/dist/resources/extensions/gsd/consent-verdict.js +73 -0
  139. package/dist/resources/extensions/gsd/constants.js +0 -2
  140. package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
  141. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  142. package/dist/resources/extensions/gsd/db/engine.js +800 -0
  143. package/dist/resources/extensions/gsd/db/queries.js +542 -0
  144. package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
  145. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  146. package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
  147. package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
  148. package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
  149. package/dist/resources/extensions/gsd/db/writers/reconcile.js +476 -0
  150. package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
  151. package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
  152. package/dist/resources/extensions/gsd/db-transaction.js +27 -23
  153. package/dist/resources/extensions/gsd/db-workspace.js +115 -0
  154. package/dist/resources/extensions/gsd/db-writer.js +8 -17
  155. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  156. package/dist/resources/extensions/gsd/discussion-handoff.js +222 -0
  157. package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
  158. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  159. package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
  160. package/dist/resources/extensions/gsd/doctor-environment.js +261 -136
  161. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  162. package/dist/resources/extensions/gsd/doctor-git-checks.js +36 -25
  163. package/dist/resources/extensions/gsd/doctor-providers.js +93 -9
  164. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +34 -40
  165. package/dist/resources/extensions/gsd/doctor.js +43 -15
  166. package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
  167. package/dist/resources/extensions/gsd/error-classifier.js +22 -1
  168. package/dist/resources/extensions/gsd/escalation.js +11 -4
  169. package/dist/resources/extensions/gsd/exec-sandbox.js +75 -19
  170. package/dist/resources/extensions/gsd/export-html.js +10 -3
  171. package/dist/resources/extensions/gsd/export.js +73 -0
  172. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  173. package/dist/resources/extensions/gsd/files.js +33 -19
  174. package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
  175. package/dist/resources/extensions/gsd/forensics.js +4 -33
  176. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  177. package/dist/resources/extensions/gsd/git-service.js +12 -8
  178. package/dist/resources/extensions/gsd/gitignore.js +9 -2
  179. package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
  180. package/dist/resources/extensions/gsd/gsd-db.js +185 -2054
  181. package/dist/resources/extensions/gsd/guidance.js +158 -0
  182. package/dist/resources/extensions/gsd/guided-flow-queue.js +59 -5
  183. package/dist/resources/extensions/gsd/guided-flow.js +184 -478
  184. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  185. package/dist/resources/extensions/gsd/health-widget.js +117 -32
  186. package/dist/resources/extensions/gsd/layout-policy.js +75 -0
  187. package/dist/resources/extensions/gsd/markdown-renderer.js +408 -118
  188. package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
  189. package/dist/resources/extensions/gsd/mcp-filter.js +48 -30
  190. package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
  191. package/dist/resources/extensions/gsd/md-importer.js +157 -54
  192. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +45 -22
  193. package/dist/resources/extensions/gsd/memory-relations.js +1 -1
  194. package/dist/resources/extensions/gsd/metrics.js +19 -11
  195. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  196. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  197. package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
  198. package/dist/resources/extensions/gsd/migrate-external.js +51 -6
  199. package/dist/resources/extensions/gsd/migration-auto-check.js +32 -19
  200. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  201. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  202. package/dist/resources/extensions/gsd/milestone-closeout.js +108 -29
  203. package/dist/resources/extensions/gsd/milestone-ids.js +50 -19
  204. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  205. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  206. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +164 -0
  207. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  208. package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
  209. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  210. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  211. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +60 -0
  212. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  213. package/dist/resources/extensions/gsd/model-router.js +82 -20
  214. package/dist/resources/extensions/gsd/native-git-bridge.js +36 -0
  215. package/dist/resources/extensions/gsd/notification-store.js +33 -33
  216. package/dist/resources/extensions/gsd/notifications.js +48 -14
  217. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  218. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  219. package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
  220. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +144 -42
  221. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  222. package/dist/resources/extensions/gsd/parsers-legacy.js +56 -18
  223. package/dist/resources/extensions/gsd/paths.js +393 -68
  224. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  225. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  226. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  227. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  228. package/dist/resources/extensions/gsd/preferences-models.js +46 -60
  229. package/dist/resources/extensions/gsd/preferences.js +302 -35
  230. package/dist/resources/extensions/gsd/projection-flush.js +7 -0
  231. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  232. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  233. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  234. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  235. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  236. package/dist/resources/extensions/gsd/prompts/code-review.md +37 -0
  237. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  238. package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  239. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  240. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  241. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  242. package/dist/resources/extensions/gsd/prompts/execute-task.md +9 -2
  243. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  244. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  245. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  246. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  247. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  248. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  249. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  250. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  251. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  252. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  253. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  254. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  255. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  256. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  257. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  258. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  259. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  260. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  261. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  262. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  263. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  264. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  265. package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  266. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  267. package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  268. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
  269. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  270. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  271. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  272. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  273. package/dist/resources/extensions/gsd/prompts/run-uat.md +13 -5
  274. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  275. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  276. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  277. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  278. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  279. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  280. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  281. package/dist/resources/extensions/gsd/prompts/system.md +6 -3
  282. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  283. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  284. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  285. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  286. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  287. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  288. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  289. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  290. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  291. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  292. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  293. package/dist/resources/extensions/gsd/provider-error-guidance.js +25 -5
  294. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  295. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  296. package/dist/resources/extensions/gsd/publication.js +87 -0
  297. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  298. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  299. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  300. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  301. package/dist/resources/extensions/gsd/quick.js +45 -2
  302. package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
  303. package/dist/resources/extensions/gsd/recovery-classification.js +49 -87
  304. package/dist/resources/extensions/gsd/roadmap-slices.js +34 -6
  305. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  306. package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
  307. package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
  308. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +50 -3
  309. package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
  310. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  311. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  312. package/dist/resources/extensions/gsd/session-lock.js +12 -10
  313. package/dist/resources/extensions/gsd/skill-activation.js +3 -6
  314. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  315. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  316. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  317. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
  318. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  319. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  320. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  321. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  322. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  323. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +143 -18
  324. package/dist/resources/extensions/gsd/state-reconciliation/index.js +36 -3
  325. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +12 -0
  326. package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
  327. package/dist/resources/extensions/gsd/state.js +70 -41
  328. package/dist/resources/extensions/gsd/status-guards.js +56 -8
  329. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  330. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  331. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  332. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  333. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  334. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  335. package/dist/resources/extensions/gsd/tool-contract.js +66 -11
  336. package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
  337. package/dist/resources/extensions/gsd/tool-surface-readiness.js +297 -0
  338. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  339. package/dist/resources/extensions/gsd/tools/complete-milestone.js +7 -4
  340. package/dist/resources/extensions/gsd/tools/complete-slice.js +90 -58
  341. package/dist/resources/extensions/gsd/tools/complete-task.js +153 -14
  342. package/dist/resources/extensions/gsd/tools/exec-tool.js +14 -114
  343. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  344. package/dist/resources/extensions/gsd/tools/plan-slice.js +13 -9
  345. package/dist/resources/extensions/gsd/tools/plan-task.js +18 -3
  346. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +50 -5
  347. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
  348. package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
  349. package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
  350. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
  351. package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
  352. package/dist/resources/extensions/gsd/tools/validate-milestone.js +21 -79
  353. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +110 -6
  354. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  355. package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
  356. package/dist/resources/extensions/gsd/uat-policy.js +57 -25
  357. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  358. package/dist/resources/extensions/gsd/undo.js +16 -16
  359. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  360. package/dist/resources/extensions/gsd/unit-context-composer.js +130 -21
  361. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  362. package/dist/resources/extensions/gsd/unit-registry.js +413 -0
  363. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  364. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
  365. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  366. package/dist/resources/extensions/gsd/validation-block-guard.js +55 -3
  367. package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
  368. package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
  369. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  370. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  371. package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
  372. package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
  373. package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
  374. package/dist/resources/extensions/gsd/workflow-events.js +6 -18
  375. package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
  376. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
  377. package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
  378. package/dist/resources/extensions/gsd/workflow-mcp.js +24 -103
  379. package/dist/resources/extensions/gsd/workflow-projections.js +25 -4
  380. package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
  381. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  382. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  383. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  384. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  385. package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
  386. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  387. package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
  388. package/dist/resources/extensions/gsd/worktree-manager.js +161 -45
  389. package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
  390. package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
  391. package/dist/resources/extensions/gsd/worktree-root.js +28 -6
  392. package/dist/resources/extensions/gsd/worktree-safety.js +48 -34
  393. package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
  394. package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
  395. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  396. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  397. package/dist/resources/extensions/gsd/worktree.js +8 -1
  398. package/dist/resources/extensions/mcp-client/manager.js +9 -4
  399. package/dist/resources/extensions/search-the-web/index.js +41 -9
  400. package/dist/resources/extensions/search-the-web/native-search.js +23 -7
  401. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  402. package/dist/resources/extensions/shared/gsd-browser-cli.js +156 -8
  403. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  404. package/dist/resources/extensions/subagent/index.js +20 -15
  405. package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
  406. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  407. package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
  408. package/dist/resources/shared/package-manager-detection.js +1 -1
  409. package/dist/resources/shared/package.json +3 -0
  410. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  411. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  412. package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
  413. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  414. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  415. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  416. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  417. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  418. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  419. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  420. package/dist/runtime-checks.d.ts +10 -0
  421. package/dist/runtime-checks.js +27 -0
  422. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  423. package/dist/update-check.d.ts +2 -0
  424. package/dist/update-check.js +39 -5
  425. package/dist/update-cmd.js +40 -3
  426. package/dist/web/standalone/.next/BUILD_ID +1 -1
  427. package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
  428. package/dist/web/standalone/.next/build-manifest.json +4 -4
  429. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  430. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  431. package/dist/web/standalone/.next/required-server-files.json +3 -3
  432. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  433. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  434. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  435. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  436. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  437. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  438. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  439. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  440. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  441. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  442. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  443. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  444. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  445. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  446. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  447. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  448. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  449. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  450. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  451. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  452. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  453. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  454. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  455. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  456. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  457. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  458. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  459. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  460. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  461. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  462. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  463. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  464. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  465. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  466. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  467. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  468. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  469. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  470. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  471. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  472. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  473. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  474. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  475. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  476. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  477. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  478. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  479. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  480. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  481. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  482. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  483. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  484. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  485. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  486. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  487. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  488. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  489. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  490. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  491. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  492. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  493. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  494. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  495. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  496. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  497. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  498. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  499. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  500. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  501. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  502. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  503. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  504. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  505. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  506. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  507. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  508. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  509. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  510. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  511. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  512. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  513. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  514. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  515. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  516. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  517. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  518. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  519. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  520. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  521. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  522. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  523. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  524. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  525. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  526. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  527. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  528. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  529. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  530. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  531. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  532. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  533. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  534. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  535. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  536. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  537. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  538. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  539. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  540. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  541. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  542. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  543. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  544. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  545. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  546. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  547. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  548. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  549. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  550. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  551. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  552. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  553. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  554. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  555. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  556. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  557. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  558. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  559. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  560. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  561. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  562. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  563. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  564. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  565. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  566. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  567. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  568. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  569. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  570. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  571. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  572. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  573. package/dist/web/standalone/.next/server/app/index.html +1 -1
  574. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  575. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  576. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  577. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  578. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  579. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  580. package/dist/web/standalone/.next/server/app/page.js +2 -2
  581. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  582. package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
  583. package/dist/web/standalone/.next/server/chunks/1128.js +2 -0
  584. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  585. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  586. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  587. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  588. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  589. package/dist/web/standalone/.next/server/middleware.js +3 -3
  590. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  591. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  592. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  593. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  594. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  595. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  596. package/dist/web/standalone/.next/static/chunks/4283.8e446784528ed9dc.js +2 -0
  597. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  598. package/dist/web/standalone/.next/static/chunks/796.3976108148518f7d.js +10 -0
  599. package/dist/web/standalone/.next/static/chunks/8785.481aa5869991b760.js +1 -0
  600. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  601. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  602. package/dist/web/standalone/.next/static/chunks/app/page-6644fc6ee8ca1247.js +1 -0
  603. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  604. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  605. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-7c1d97e39be2da11.js} +1 -1
  606. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  607. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  608. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  609. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  610. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  611. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  612. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  613. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  614. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  615. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  616. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  617. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  618. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  619. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  620. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  621. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  622. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  623. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  624. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  625. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  626. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  627. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  628. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  629. package/dist/web/standalone/package.json +1 -1
  630. package/dist/web/standalone/server.js +1 -1
  631. package/dist/web-mode.d.ts +5 -1
  632. package/dist/web-mode.js +27 -13
  633. package/dist/worktree-cli.js +3 -6
  634. package/dist/worktree-status-banner.js +7 -11
  635. package/integrations/hermes/README.md +48 -0
  636. package/integrations/hermes/docs/setup.md +272 -0
  637. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  638. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  639. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  640. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  641. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  642. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  643. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  644. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  645. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  646. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  647. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  648. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  649. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  650. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  651. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  652. package/integrations/hermes/plugin.yaml +38 -0
  653. package/integrations/hermes/pyproject.toml +32 -0
  654. package/integrations/hermes/scripts/preflight.sh +92 -0
  655. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  656. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  657. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  658. package/integrations/hermes/tests/test_binding.py +103 -0
  659. package/integrations/hermes/tests/test_config.py +36 -0
  660. package/integrations/hermes/tests/test_cron.py +34 -0
  661. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  662. package/integrations/hermes/tests/test_memory.py +59 -0
  663. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  664. package/integrations/hermes/tests/test_register.py +56 -0
  665. package/integrations/hermes/tests/test_snapshot.py +53 -0
  666. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  667. package/package.json +19 -14
  668. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  669. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  670. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  671. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  672. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  673. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  674. package/packages/cloud-mcp-gateway/package.json +2 -2
  675. package/packages/contracts/dist/rpc.d.ts +1 -0
  676. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  677. package/packages/contracts/dist/rpc.js.map +1 -1
  678. package/packages/contracts/dist/workflow.d.ts +5 -0
  679. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  680. package/packages/contracts/dist/workflow.js +2 -0
  681. package/packages/contracts/dist/workflow.js.map +1 -1
  682. package/packages/contracts/package.json +1 -1
  683. package/packages/daemon/package.json +4 -4
  684. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  685. package/packages/gsd-agent-core/dist/sdk.js +12 -6
  686. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  687. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  688. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  689. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  690. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  691. package/packages/gsd-agent-core/package.json +5 -5
  692. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
  693. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  694. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
  695. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
  696. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
  709. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  710. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
  711. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  712. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
  713. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
  714. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
  715. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
  716. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
  717. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
  718. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
  719. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
  720. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
  721. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
  722. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
  723. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
  724. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
  725. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
  726. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
  727. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  728. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
  729. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
  730. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  731. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  732. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
  733. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  734. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
  735. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  736. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
  737. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  738. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +16 -0
  739. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  740. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +93 -19
  741. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  742. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +71 -3
  743. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  744. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +257 -37
  745. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  746. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
  747. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  748. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
  749. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
  750. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
  751. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  752. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +157 -56
  753. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  754. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
  755. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
  756. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
  757. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  758. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +13 -1
  759. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  760. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  761. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
  762. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  763. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  764. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +14 -6
  765. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  766. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
  767. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  768. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
  769. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  770. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +31 -0
  771. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  772. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
  773. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
  774. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
  775. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
  776. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
  777. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
  778. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
  779. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
  780. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  781. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  782. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +10 -2
  783. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  784. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +48 -6
  785. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  786. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
  787. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
  788. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
  789. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
  790. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
  791. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
  792. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
  793. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
  794. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
  795. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  796. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +6 -1
  797. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  798. package/packages/gsd-agent-modes/package.json +7 -7
  799. package/packages/mcp-server/README.md +23 -4
  800. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  801. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  802. package/packages/mcp-server/dist/cli-errors.js +12 -0
  803. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  804. package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
  805. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
  806. package/packages/mcp-server/dist/cli-runner.js +170 -0
  807. package/packages/mcp-server/dist/cli-runner.js.map +1 -0
  808. package/packages/mcp-server/dist/cli.d.ts +1 -0
  809. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  810. package/packages/mcp-server/dist/cli.js +3 -50
  811. package/packages/mcp-server/dist/cli.js.map +1 -1
  812. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
  813. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
  814. package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
  815. package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
  816. package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
  817. package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
  818. package/packages/mcp-server/dist/pid-registry.js +459 -0
  819. package/packages/mcp-server/dist/pid-registry.js.map +1 -0
  820. package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
  821. package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
  822. package/packages/mcp-server/dist/probe-mode.js +10 -0
  823. package/packages/mcp-server/dist/probe-mode.js.map +1 -0
  824. package/packages/mcp-server/dist/server.d.ts +40 -1
  825. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  826. package/packages/mcp-server/dist/server.js +97 -6
  827. package/packages/mcp-server/dist/server.js.map +1 -1
  828. package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
  829. package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
  830. package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
  831. package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
  832. package/packages/mcp-server/dist/workflow-tools.d.ts +62 -1
  833. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  834. package/packages/mcp-server/dist/workflow-tools.js +243 -123
  835. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  836. package/packages/mcp-server/package.json +21 -4
  837. package/packages/native/package.json +1 -1
  838. package/packages/pi-agent-core/dist/agent-loop.js +52 -2
  839. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  840. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
  841. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  842. package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
  843. package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  844. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  845. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  846. package/packages/pi-agent-core/dist/index.js +3 -0
  847. package/packages/pi-agent-core/dist/index.js.map +1 -1
  848. package/packages/pi-agent-core/package.json +1 -1
  849. package/packages/pi-ai/README.md +1 -0
  850. package/packages/pi-ai/dist/index.d.ts +2 -0
  851. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  852. package/packages/pi-ai/dist/index.js +2 -0
  853. package/packages/pi-ai/dist/index.js.map +1 -1
  854. package/packages/pi-ai/dist/models.generated.d.ts +183 -76
  855. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  856. package/packages/pi-ai/dist/models.generated.js +205 -124
  857. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  858. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  859. package/packages/pi-ai/dist/providers/anthropic.js +12 -7
  860. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  861. package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
  862. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  863. package/packages/pi-ai/dist/providers/google-shared.js +12 -3
  864. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  865. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  866. package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
  867. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  868. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
  869. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
  870. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
  871. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
  872. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  873. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
  874. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  875. package/packages/pi-ai/package.json +3 -2
  876. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
  877. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  878. package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
  879. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  880. package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
  881. package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
  882. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  883. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
  884. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
  885. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
  886. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  887. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  888. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  889. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
  890. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  891. package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
  892. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  893. package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
  894. package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
  895. package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
  896. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  897. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  898. package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
  899. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  900. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
  901. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  902. package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
  903. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  904. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  905. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  906. package/packages/pi-coding-agent/dist/index.js +1 -1
  907. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  908. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  909. package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
  910. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  911. package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
  912. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  913. package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
  914. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  915. package/packages/pi-coding-agent/package.json +8 -8
  916. package/packages/pi-tui/README.md +15 -0
  917. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  918. package/packages/pi-tui/dist/autocomplete.js +6 -1
  919. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  920. package/packages/pi-tui/dist/components/input.js +2 -2
  921. package/packages/pi-tui/dist/components/input.js.map +1 -1
  922. package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
  923. package/packages/pi-tui/dist/components/loader.js +1 -0
  924. package/packages/pi-tui/dist/components/loader.js.map +1 -1
  925. package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
  926. package/packages/pi-tui/dist/components/select-list.js +8 -2
  927. package/packages/pi-tui/dist/components/select-list.js.map +1 -1
  928. package/packages/pi-tui/dist/index.d.ts +2 -2
  929. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  930. package/packages/pi-tui/dist/index.js +2 -2
  931. package/packages/pi-tui/dist/index.js.map +1 -1
  932. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  933. package/packages/pi-tui/dist/keys.js +39 -30
  934. package/packages/pi-tui/dist/keys.js.map +1 -1
  935. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  936. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  937. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  938. package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
  939. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  940. package/packages/pi-tui/dist/terminal-image.js +54 -2
  941. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  942. package/packages/pi-tui/dist/terminal.d.ts +12 -0
  943. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  944. package/packages/pi-tui/dist/terminal.js +70 -25
  945. package/packages/pi-tui/dist/terminal.js.map +1 -1
  946. package/packages/pi-tui/dist/tui.d.ts +15 -0
  947. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  948. package/packages/pi-tui/dist/tui.js +115 -21
  949. package/packages/pi-tui/dist/tui.js.map +1 -1
  950. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  951. package/packages/pi-tui/dist/utils.js +110 -36
  952. package/packages/pi-tui/dist/utils.js.map +1 -1
  953. package/packages/pi-tui/package.json +2 -2
  954. package/packages/rpc-client/package.json +2 -2
  955. package/pkg/dist/theme/theme.d.ts.map +1 -1
  956. package/pkg/dist/theme/theme.js +45 -17
  957. package/pkg/dist/theme/theme.js.map +1 -1
  958. package/pkg/package.json +1 -1
  959. package/scripts/install/deps.js +10 -0
  960. package/scripts/link-workspace-packages.cjs +7 -40
  961. package/src/resources/GSD-WORKFLOW.md +27 -26
  962. package/src/resources/extensions/ask-user-questions.ts +94 -26
  963. package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
  964. package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
  965. package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
  966. package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
  967. package/src/resources/extensions/async-jobs/index.ts +79 -0
  968. package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
  969. package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
  970. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
  971. package/src/resources/extensions/bg-shell/overlay.ts +9 -5
  972. package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
  973. package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
  974. package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
  975. package/src/resources/extensions/bg-shell/utilities.ts +5 -2
  976. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  977. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  978. package/src/resources/extensions/browser-tools/index.ts +71 -13
  979. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  980. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +120 -1
  981. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  982. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  983. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  984. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +744 -495
  985. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
  986. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1192 -7
  987. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +324 -0
  988. package/src/resources/extensions/github-sync/templates.ts +3 -3
  989. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  990. package/src/resources/extensions/google-cli/stream-adapter.ts +128 -20
  991. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  992. package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
  993. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  994. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
  995. package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
  996. package/src/resources/extensions/gsd/auto/dispatch-history.ts +186 -0
  997. package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
  998. package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
  999. package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
  1000. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
  1001. package/src/resources/extensions/gsd/auto/loop.ts +158 -63
  1002. package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
  1003. package/src/resources/extensions/gsd/auto/orchestrator.ts +418 -82
  1004. package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
  1005. package/src/resources/extensions/gsd/auto/phases.ts +58 -2981
  1006. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -0
  1007. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  1008. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  1009. package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
  1010. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  1011. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  1012. package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
  1013. package/src/resources/extensions/gsd/auto-artifact-paths.ts +83 -20
  1014. package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
  1015. package/src/resources/extensions/gsd/auto-dashboard.ts +328 -458
  1016. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +33 -50
  1017. package/src/resources/extensions/gsd/auto-dispatch.ts +144 -98
  1018. package/src/resources/extensions/gsd/auto-model-selection.ts +74 -15
  1019. package/src/resources/extensions/gsd/auto-post-unit.ts +107 -46
  1020. package/src/resources/extensions/gsd/auto-prompts.ts +314 -76
  1021. package/src/resources/extensions/gsd/auto-recovery.ts +183 -87
  1022. package/src/resources/extensions/gsd/auto-runtime-state.ts +39 -0
  1023. package/src/resources/extensions/gsd/auto-start.ts +146 -88
  1024. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  1025. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  1026. package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
  1027. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +21 -49
  1028. package/src/resources/extensions/gsd/auto-verification.ts +37 -42
  1029. package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
  1030. package/src/resources/extensions/gsd/auto-worktree.ts +180 -407
  1031. package/src/resources/extensions/gsd/auto.ts +220 -54
  1032. package/src/resources/extensions/gsd/blocked-models.ts +49 -0
  1033. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +194 -70
  1034. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +35 -38
  1035. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +93 -49
  1036. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +4 -2
  1037. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  1038. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  1039. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +46 -1
  1040. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +504 -186
  1041. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  1042. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +82 -1
  1043. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  1044. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +586 -83
  1045. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  1046. package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
  1047. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  1048. package/src/resources/extensions/gsd/captures.ts +5 -16
  1049. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +132 -6
  1050. package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
  1051. package/src/resources/extensions/gsd/closeout-wizard.ts +111 -0
  1052. package/src/resources/extensions/gsd/codebase-generator.ts +1 -0
  1053. package/src/resources/extensions/gsd/commands/catalog.ts +12 -68
  1054. package/src/resources/extensions/gsd/commands/context.ts +16 -2
  1055. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  1056. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  1057. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  1058. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  1059. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
  1060. package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
  1061. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  1062. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  1063. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  1064. package/src/resources/extensions/gsd/commands-handlers.ts +140 -4
  1065. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  1066. package/src/resources/extensions/gsd/commands-maintenance.ts +172 -42
  1067. package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
  1068. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +27 -9
  1069. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  1070. package/src/resources/extensions/gsd/commands-verdict.ts +22 -4
  1071. package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
  1072. package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
  1073. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  1074. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  1075. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  1076. package/src/resources/extensions/gsd/config-overlay.ts +24 -9
  1077. package/src/resources/extensions/gsd/consent-question.ts +441 -0
  1078. package/src/resources/extensions/gsd/consent-verdict.ts +115 -0
  1079. package/src/resources/extensions/gsd/constants.ts +0 -3
  1080. package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
  1081. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  1082. package/src/resources/extensions/gsd/db/engine.ts +855 -0
  1083. package/src/resources/extensions/gsd/db/queries.ts +676 -0
  1084. package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
  1085. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  1086. package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
  1087. package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
  1088. package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
  1089. package/src/resources/extensions/gsd/db/writers/reconcile.ts +523 -0
  1090. package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
  1091. package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
  1092. package/src/resources/extensions/gsd/db-transaction.ts +37 -20
  1093. package/src/resources/extensions/gsd/db-workspace.ts +185 -0
  1094. package/src/resources/extensions/gsd/db-writer.ts +11 -19
  1095. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  1096. package/src/resources/extensions/gsd/discussion-handoff.ts +280 -0
  1097. package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
  1098. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  1099. package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
  1100. package/src/resources/extensions/gsd/doctor-environment.ts +272 -155
  1101. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  1102. package/src/resources/extensions/gsd/doctor-git-checks.ts +33 -25
  1103. package/src/resources/extensions/gsd/doctor-providers.ts +104 -10
  1104. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +34 -42
  1105. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  1106. package/src/resources/extensions/gsd/doctor.ts +45 -12
  1107. package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
  1108. package/src/resources/extensions/gsd/error-classifier.ts +25 -1
  1109. package/src/resources/extensions/gsd/escalation.ts +9 -4
  1110. package/src/resources/extensions/gsd/exec-sandbox.ts +98 -18
  1111. package/src/resources/extensions/gsd/export-html.ts +11 -4
  1112. package/src/resources/extensions/gsd/export.ts +88 -1
  1113. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  1114. package/src/resources/extensions/gsd/files.ts +33 -12
  1115. package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
  1116. package/src/resources/extensions/gsd/forensics.ts +4 -34
  1117. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  1118. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  1119. package/src/resources/extensions/gsd/git-service.ts +13 -7
  1120. package/src/resources/extensions/gsd/gitignore.ts +10 -3
  1121. package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
  1122. package/src/resources/extensions/gsd/gsd-db.ts +189 -2380
  1123. package/src/resources/extensions/gsd/guidance.ts +217 -0
  1124. package/src/resources/extensions/gsd/guided-flow-queue.ts +82 -4
  1125. package/src/resources/extensions/gsd/guided-flow.ts +250 -590
  1126. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  1127. package/src/resources/extensions/gsd/health-widget.ts +133 -32
  1128. package/src/resources/extensions/gsd/layout-policy.ts +85 -0
  1129. package/src/resources/extensions/gsd/markdown-renderer.ts +423 -106
  1130. package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
  1131. package/src/resources/extensions/gsd/mcp-filter.ts +63 -34
  1132. package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
  1133. package/src/resources/extensions/gsd/md-importer.ts +218 -68
  1134. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +52 -20
  1135. package/src/resources/extensions/gsd/memory-relations.ts +1 -1
  1136. package/src/resources/extensions/gsd/metrics.ts +23 -10
  1137. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  1138. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  1139. package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
  1140. package/src/resources/extensions/gsd/migrate-external.ts +49 -6
  1141. package/src/resources/extensions/gsd/migration-auto-check.ts +34 -18
  1142. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  1143. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  1144. package/src/resources/extensions/gsd/milestone-closeout.ts +133 -29
  1145. package/src/resources/extensions/gsd/milestone-ids.ts +49 -19
  1146. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  1147. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  1148. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +232 -0
  1149. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  1150. package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
  1151. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  1152. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  1153. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +78 -0
  1154. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  1155. package/src/resources/extensions/gsd/model-router.ts +101 -18
  1156. package/src/resources/extensions/gsd/native-git-bridge.ts +39 -0
  1157. package/src/resources/extensions/gsd/notification-store.ts +43 -31
  1158. package/src/resources/extensions/gsd/notifications.ts +50 -12
  1159. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  1160. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  1161. package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
  1162. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +161 -38
  1163. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  1164. package/src/resources/extensions/gsd/parsers-legacy.ts +58 -19
  1165. package/src/resources/extensions/gsd/paths.ts +390 -61
  1166. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  1167. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  1168. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  1169. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  1170. package/src/resources/extensions/gsd/preferences-models.ts +58 -59
  1171. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  1172. package/src/resources/extensions/gsd/preferences.ts +372 -35
  1173. package/src/resources/extensions/gsd/projection-flush.ts +20 -0
  1174. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  1175. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  1176. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  1177. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  1178. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  1179. package/src/resources/extensions/gsd/prompts/code-review.md +37 -0
  1180. package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  1181. package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  1182. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  1183. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  1184. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  1185. package/src/resources/extensions/gsd/prompts/execute-task.md +9 -2
  1186. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  1187. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  1188. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  1189. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  1190. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  1191. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  1192. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  1193. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  1194. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  1195. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  1196. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  1197. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  1198. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  1199. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  1200. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  1201. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  1202. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  1203. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  1204. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  1205. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  1206. package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  1207. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  1208. package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  1209. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  1210. package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  1211. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
  1212. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  1213. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  1214. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  1215. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  1216. package/src/resources/extensions/gsd/prompts/run-uat.md +13 -5
  1217. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  1218. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  1219. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  1220. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  1221. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  1222. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  1223. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  1224. package/src/resources/extensions/gsd/prompts/system.md +6 -3
  1225. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  1226. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  1227. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  1228. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  1229. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  1230. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  1231. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  1232. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  1233. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  1234. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  1235. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  1236. package/src/resources/extensions/gsd/provider-error-guidance.ts +36 -9
  1237. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  1238. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  1239. package/src/resources/extensions/gsd/publication.ts +122 -0
  1240. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  1241. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  1242. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  1243. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  1244. package/src/resources/extensions/gsd/quick.ts +43 -2
  1245. package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
  1246. package/src/resources/extensions/gsd/recovery-classification.ts +54 -88
  1247. package/src/resources/extensions/gsd/roadmap-slices.ts +37 -6
  1248. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  1249. package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
  1250. package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
  1251. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +52 -3
  1252. package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
  1253. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  1254. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  1255. package/src/resources/extensions/gsd/session-lock.ts +16 -14
  1256. package/src/resources/extensions/gsd/skill-activation.ts +3 -6
  1257. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  1258. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  1259. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  1260. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
  1261. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  1262. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  1263. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  1264. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  1265. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  1266. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +169 -29
  1267. package/src/resources/extensions/gsd/state-reconciliation/index.ts +36 -3
  1268. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +12 -0
  1269. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  1270. package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
  1271. package/src/resources/extensions/gsd/state.ts +87 -41
  1272. package/src/resources/extensions/gsd/status-guards.ts +59 -8
  1273. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  1274. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  1275. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  1276. package/src/resources/extensions/gsd/templates/project.md +1 -0
  1277. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  1278. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  1279. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  1280. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  1281. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  1282. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  1283. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  1284. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  1285. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  1286. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  1287. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  1288. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
  1289. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +322 -1
  1290. package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
  1291. package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
  1292. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +97 -117
  1293. package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
  1294. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +753 -26
  1295. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
  1296. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  1297. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +25 -2
  1298. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +107 -1
  1299. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +409 -38
  1300. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
  1301. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  1302. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +100 -5
  1303. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
  1304. package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
  1305. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +111 -1
  1306. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
  1307. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  1308. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
  1309. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
  1310. package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
  1311. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  1312. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
  1313. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
  1314. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
  1315. package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
  1316. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  1317. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  1318. package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
  1319. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  1320. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  1321. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
  1322. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +26 -0
  1323. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  1324. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  1325. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  1326. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  1327. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  1328. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +862 -0
  1329. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +47 -9
  1330. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  1331. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  1332. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  1333. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  1334. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
  1335. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
  1336. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
  1337. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  1338. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  1339. package/src/resources/extensions/gsd/tests/complete-task.test.ts +223 -12
  1340. package/src/resources/extensions/gsd/tests/consent-question.test.ts +396 -0
  1341. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
  1342. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
  1343. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  1344. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  1345. package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
  1346. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
  1347. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -0
  1348. package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
  1349. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
  1350. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  1351. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +111 -5
  1352. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
  1353. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  1354. package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
  1355. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +54 -4
  1356. package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
  1357. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +430 -0
  1358. package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
  1359. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
  1360. package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
  1361. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  1362. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
  1363. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +15 -0
  1364. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  1365. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  1366. package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
  1367. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +113 -4
  1368. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  1369. package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
  1370. package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
  1371. package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
  1372. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
  1373. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  1374. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  1375. package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
  1376. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +231 -0
  1377. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +74 -2
  1378. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  1379. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  1380. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  1381. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +88 -1
  1382. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  1383. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  1384. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  1385. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
  1386. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  1387. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  1388. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  1389. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
  1390. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  1391. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  1392. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  1393. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  1394. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
  1395. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  1396. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  1397. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +154 -1
  1398. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  1399. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +46 -0
  1400. package/src/resources/extensions/gsd/tests/guidance.test.ts +173 -0
  1401. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  1402. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
  1403. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  1404. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  1405. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +133 -15
  1406. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +89 -59
  1407. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  1408. package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
  1409. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +122 -3
  1410. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  1411. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  1412. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  1413. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  1414. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  1415. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  1416. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  1417. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
  1418. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
  1419. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
  1420. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  1421. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  1422. package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
  1423. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  1424. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
  1425. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  1426. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
  1427. package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
  1428. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
  1429. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  1430. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  1431. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  1432. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
  1433. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  1434. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +125 -4
  1435. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  1436. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  1437. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  1438. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
  1439. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +97 -0
  1440. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
  1441. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  1442. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  1443. package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
  1444. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
  1445. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  1446. package/src/resources/extensions/gsd/tests/notification-store.test.ts +55 -0
  1447. package/src/resources/extensions/gsd/tests/notifications.test.ts +97 -9
  1448. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +179 -0
  1449. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  1450. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
  1451. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +381 -0
  1452. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  1453. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  1454. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +44 -0
  1455. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
  1456. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +143 -0
  1457. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
  1458. package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
  1459. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  1460. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
  1461. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  1462. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  1463. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +54 -6
  1464. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  1465. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
  1466. package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
  1467. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +64 -0
  1468. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  1469. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  1470. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  1471. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  1472. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  1473. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
  1474. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  1475. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  1476. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  1477. package/src/resources/extensions/gsd/tests/preferences.test.ts +230 -1
  1478. package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
  1479. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
  1480. package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
  1481. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
  1482. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +72 -2
  1483. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
  1484. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +18 -3
  1485. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +312 -4
  1486. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  1487. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  1488. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  1489. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  1490. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  1491. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  1492. package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
  1493. package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
  1494. package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
  1495. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
  1496. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
  1497. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +508 -5
  1498. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
  1499. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  1500. package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
  1501. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  1502. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
  1503. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  1504. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +51 -2
  1505. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
  1506. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  1507. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +148 -0
  1508. package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
  1509. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
  1510. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +301 -41
  1511. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
  1512. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  1513. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  1514. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +9 -4
  1515. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +231 -58
  1516. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
  1517. package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
  1518. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  1519. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  1520. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  1521. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  1522. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  1523. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  1524. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
  1525. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  1526. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
  1527. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
  1528. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  1529. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +68 -0
  1530. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  1531. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  1532. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +26 -0
  1533. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  1534. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  1535. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +348 -0
  1536. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +56 -0
  1537. package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
  1538. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
  1539. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
  1540. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
  1541. package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
  1542. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  1543. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +319 -6
  1544. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  1545. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  1546. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
  1547. package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
  1548. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
  1549. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  1550. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  1551. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  1552. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  1553. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  1554. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
  1555. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  1556. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  1557. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  1558. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
  1559. package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
  1560. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  1561. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
  1562. package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
  1563. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +227 -21
  1564. package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
  1565. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  1566. package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
  1567. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
  1568. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +339 -48
  1569. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +166 -2
  1570. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
  1571. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  1572. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
  1573. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +105 -1
  1574. package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
  1575. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  1576. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  1577. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
  1578. package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
  1579. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +114 -19
  1580. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
  1581. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +24 -2
  1582. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  1583. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
  1584. package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
  1585. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  1586. package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
  1587. package/src/resources/extensions/gsd/tests/write-gate.test.ts +291 -1
  1588. package/src/resources/extensions/gsd/tool-contract.ts +124 -11
  1589. package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
  1590. package/src/resources/extensions/gsd/tool-surface-readiness.ts +393 -0
  1591. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  1592. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  1593. package/src/resources/extensions/gsd/tools/complete-slice.ts +85 -80
  1594. package/src/resources/extensions/gsd/tools/complete-task.ts +186 -14
  1595. package/src/resources/extensions/gsd/tools/exec-tool.ts +13 -124
  1596. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  1597. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -9
  1598. package/src/resources/extensions/gsd/tools/plan-task.ts +19 -3
  1599. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +54 -12
  1600. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
  1601. package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
  1602. package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
  1603. package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
  1604. package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
  1605. package/src/resources/extensions/gsd/tools/validate-milestone.ts +26 -90
  1606. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +123 -5
  1607. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  1608. package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
  1609. package/src/resources/extensions/gsd/uat-policy.ts +80 -25
  1610. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  1611. package/src/resources/extensions/gsd/undo.ts +17 -17
  1612. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  1613. package/src/resources/extensions/gsd/unit-context-composer.ts +222 -21
  1614. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  1615. package/src/resources/extensions/gsd/unit-registry.ts +488 -0
  1616. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  1617. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
  1618. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  1619. package/src/resources/extensions/gsd/validation-block-guard.ts +60 -6
  1620. package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
  1621. package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
  1622. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  1623. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  1624. package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
  1625. package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
  1626. package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
  1627. package/src/resources/extensions/gsd/workflow-events.ts +12 -20
  1628. package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
  1629. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
  1630. package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
  1631. package/src/resources/extensions/gsd/workflow-mcp.ts +34 -111
  1632. package/src/resources/extensions/gsd/workflow-projections.ts +24 -4
  1633. package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
  1634. package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
  1635. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  1636. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  1637. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  1638. package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
  1639. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  1640. package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -25
  1641. package/src/resources/extensions/gsd/worktree-manager.ts +175 -45
  1642. package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
  1643. package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
  1644. package/src/resources/extensions/gsd/worktree-root.ts +29 -6
  1645. package/src/resources/extensions/gsd/worktree-safety.ts +73 -48
  1646. package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
  1647. package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
  1648. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  1649. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  1650. package/src/resources/extensions/gsd/worktree.ts +7 -1
  1651. package/src/resources/extensions/mcp-client/manager.ts +10 -4
  1652. package/src/resources/extensions/search-the-web/index.ts +45 -9
  1653. package/src/resources/extensions/search-the-web/native-search.ts +21 -7
  1654. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  1655. package/src/resources/extensions/shared/gsd-browser-cli.ts +182 -8
  1656. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  1657. package/src/resources/extensions/subagent/index.ts +20 -15
  1658. package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
  1659. package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
  1660. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  1661. package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
  1662. package/src/resources/shared/package-manager-detection.ts +1 -1
  1663. package/src/resources/shared/package.json +3 -0
  1664. package/src/resources/skills/create-skill/SKILL.md +3 -0
  1665. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  1666. package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
  1667. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  1668. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  1669. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  1670. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  1671. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  1672. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  1673. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  1674. package/dist/resources/extensions/gsd/user-input-boundary.js +0 -195
  1675. package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
  1676. package/dist/web/standalone/.next/server/chunks/5047.js +0 -2
  1677. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  1678. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  1679. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  1680. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  1681. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  1682. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  1683. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  1684. package/dist/web/standalone/.next/static/chunks/app/page-a48b7c48333b31c8.js +0 -1
  1685. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  1686. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  1687. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  1688. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  1689. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  1690. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  1691. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  1692. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  1693. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  1694. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  1695. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  1696. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  1697. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  1698. package/scripts/ensure-workspace-builds.cjs +0 -129
  1699. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -88
  1700. package/src/resources/extensions/gsd/user-input-boundary.ts +0 -198
  1701. package/src/resources/skills/gsd-browser/SKILL.md +0 -41
  1702. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → SzEuqWX37DR9MEpEuQjP1}/_buildManifest.js +0 -0
  1703. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → SzEuqWX37DR9MEpEuQjP1}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  // Project/App: gsd-pi
2
2
  // File Purpose: Registers GSD extension runtime hooks and token-saving tool policies.
3
3
 
4
- import { existsSync, mkdirSync } from "node:fs";
4
+ import { existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
5
5
  import { dirname, join } from "node:path";
6
6
  import { pathToFileURL } from "node:url";
7
7
 
@@ -12,8 +12,9 @@ import { ALWAYS_PRESERVED_SHIM_TOOL_NAMES } from "@gsd/pi-ai";
12
12
  import type { GSDEcosystemBeforeAgentStartHandler } from "../ecosystem/gsd-extension-api.js";
13
13
  import { updateSnapshot } from "../ecosystem/gsd-extension-api.js";
14
14
 
15
- import { buildMilestoneFileName, clearPathCache, milestonesDir, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
16
- import { canonicalToolName, clearDiscussionFlowState, isDepthConfirmationAnswer, isMilestoneDepthVerified, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, shouldBlockWorktreeWrite, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
15
+ import { buildMilestoneFileName, canonicalPhaseDirName, clearPathCache, milestonesDir, legacyMilestonesDir, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
16
+ import { applyAskUserQuestionsGateResult, clearDiscussionFlowState, currentWriteGateSnapshot, formatPendingAskUserQuestionsGateMessage, formatTimedOutAskUserQuestionsGateMessage, hostWriteGateAdapter, isApprovalGateVerifiedInSnapshot, isDepthConfirmationAnswer, isMilestoneDepthVerifiedInSnapshot, isQueuePhaseActive, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, shouldBlockWorktreeBash, shouldBlockWorktreeWrite, isGateQuestionId, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId, type WriteGateSnapshot } from "./write-gate.js";
17
+ import { canonicalToolName } from "../engine-hook-contract.js";
17
18
  import { resolveManifest } from "../unit-context-manifest.js";
18
19
  import { isBlockedStateFile, isBashWriteToStateFile, BLOCKED_WRITE_ERROR } from "../write-intercept.js";
19
20
  import { loadFile, saveFile, formatContinue } from "../files.js";
@@ -25,10 +26,13 @@ import {
25
26
  isAutoActive,
26
27
  isAutoCompletionStopInProgress,
27
28
  isAutoPaused,
29
+ isInteractiveElicitationInFlight,
28
30
  markToolEnd,
29
31
  markToolStart,
32
+ recordAutoToolSurfaceSnapshot,
30
33
  recordToolInvocationError,
31
34
  } from "../auto-runtime-state.js";
35
+ import { applyProviderPayloadPolicy } from "../provider-payload-policy.js";
32
36
 
33
37
  import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
34
38
  import { maybePauseAutoForApprovalGate, resetPendingGatePauseGuard } from "./pending-gate-pause.js";
@@ -36,29 +40,44 @@ import { saveActivityLog } from "../activity-log.js";
36
40
  import { recordToolCall as safetyRecordToolCall, recordToolResult as safetyRecordToolResult, saveEvidenceToDisk } from "../safety/evidence-collector.js";
37
41
  import { parseUnitId } from "../unit-id.js";
38
42
  import { classifyCommand } from "../safety/destructive-guard.js";
39
- import { logWarning as safetyLogWarning } from "../workflow-logger.js";
43
+ import {
44
+ confirmDestructiveCommand,
45
+ consumeDestructiveConfirmation,
46
+ isDestructiveConfirmGateId,
47
+ requestDestructiveConfirmation,
48
+ } from "../safety/destructive-confirmation.js";
49
+ import { logWarning as safetyLogWarning, setStderrLoggingEnabled } from "../workflow-logger.js";
50
+ import { isUnitCloseoutTool, runInteractiveUnitCloseout } from "../unit-closeout.js";
40
51
  import { installNotifyInterceptor } from "./notify-interceptor.js";
41
52
  import { initNotificationStore } from "../notification-store.js";
42
53
  import { initNotificationWidget } from "../notification-widget.js";
54
+ import { notifyPreferenceDiagnostics } from "../preferences-diagnostics.js";
43
55
  import { resolveWorktreeProjectRoot } from "../worktree-root.js";
44
56
  import { extractSubagentAgentClasses } from "./subagent-input.js";
45
- import { approvalGateIdForUnit, isExplicitApprovalResponse, shouldPauseForUserApprovalQuestion } from "../user-input-boundary.js";
57
+ import {
58
+ approvalGateIdForUnit,
59
+ evaluateAskUserQuestionsRound,
60
+ formatUnansweredConsentQuestionMessage,
61
+ isExplicitApprovalResponse,
62
+ messageHasPendingAskUserQuestionsTool,
63
+ shouldPauseForQuestion,
64
+ } from "../consent-question.js";
46
65
  import { resolveSkillManifest } from "../skill-manifest.js";
47
66
  import { applyUnitSkillVisibility, unitHasSkillManifest } from "../skill-scope.js";
48
67
  import { getGuidedUnitContext } from "../guided-unit-context.js";
49
68
  import { registerPlanMilestoneSchemaRecovery } from "./plan-milestone-schema-recovery.js";
50
- import { AUTO_UNIT_SCOPED_TOOLS, RUN_UAT_BROWSER_TOOL_NAMES, isWorkflowAliasTool } from "../auto-unit-tool-scope.js";
69
+ import { AUTO_UNIT_SCOPED_TOOLS, RUN_UAT_BROWSER_TOOL_NAMES, canonicalWorkflowToolName, isWorkflowAliasTool } from "../auto-unit-tool-scope.js";
70
+ import { hasBrowserContractPrefix } from "../../shared/browser-contract.js";
51
71
  import { filterToolsForProvider } from "../model-router.js";
72
+ import { mcpToolMatchesBaseName } from "../mcp-tool-name.js";
52
73
  import { RUN_UAT_READ_ONLY_TOOL_NAMES, RUN_UAT_WORKFLOW_TOOL_NAMES } from "../tool-presentation-plan.js";
53
- import { injectSourceContextBlockIntoPayload, supportsSourceObservationsForUnit } from "../source-observations.js";
74
+ import { supportsSourceObservationsForUnit } from "../source-observations.js";
75
+ import { clearPendingAutoStart } from "../pending-auto-start.js";
76
+ import { resolveWorkflowToolBasePath } from "./dynamic-tools.js";
77
+ import { getRequiredWorkflowToolsForUnit } from "../unit-tool-contracts.js";
54
78
 
55
79
  let approvalQuestionAbortInFlight = false;
56
80
 
57
- interface DeferredApprovalGate {
58
- gateId: string;
59
- basePath: string;
60
- }
61
-
62
81
  type WelcomeScreenModule = {
63
82
  buildWelcomeScreenLines(opts: { version: string; remoteChannel?: string; width?: number }): string[];
64
83
  };
@@ -129,7 +148,22 @@ async function installWelcomeHeader(ctx: ExtensionContext): Promise<void> {
129
148
  }
130
149
  }
131
150
 
132
- let deferredApprovalGate: DeferredApprovalGate | null = null;
151
+ /** Suppress the startup welcome banner without restoring the built-in pi header. */
152
+ function suppressWelcomeHeader(ctx: ExtensionContext): void {
153
+ if (!ctx.hasUI || typeof ctx.ui?.setHeader !== "function") return;
154
+ ctx.ui.setHeader(() => ({
155
+ render(): string[] { return []; },
156
+ invalidate(): void {},
157
+ }));
158
+ }
159
+
160
+ /**
161
+ * Approval gates whose durable arming is deferred until tool execution /
162
+ * agent end, keyed by basePath. A Map (not a single slot) so concurrent
163
+ * projects in one process cannot lose each other's deferred gate; entries
164
+ * are bounded — cleared on activation, session boundaries, and verification.
165
+ */
166
+ const deferredApprovalGates = new Map<string, string>();
133
167
 
134
168
  export const MINIMAL_GSD_TOOL_NAMES = [
135
169
  "gsd_exec",
@@ -167,7 +201,7 @@ function withPreservedShimTools(toolNames: readonly string[]): string[] {
167
201
 
168
202
  /** True for the browser automation tools (browser_navigate, browser_click, ...). */
169
203
  function isBrowserTool(toolName: string): boolean {
170
- return canonicalToolName(toolName).startsWith("browser_");
204
+ return hasBrowserContractPrefix(canonicalToolName(toolName));
171
205
  }
172
206
 
173
207
  /**
@@ -210,16 +244,22 @@ function resolveScopedToolNames(
210
244
 
211
245
  for (const requested of requestedToolNames) {
212
246
  const scopedMatches: string[] = [];
247
+ const aliasFallbacks: string[] = [];
213
248
 
214
249
  for (const activeName of activeToolNames) {
215
- if (!activeName.startsWith("mcp__")) continue;
216
- const toolSeparator = activeName.indexOf("__", "mcp__".length);
217
- if (toolSeparator < 0) continue;
218
- if (activeName.slice(toolSeparator + 2) === requested) {
250
+ if (mcpToolMatchesBaseName(activeName, requested)) {
219
251
  scopedMatches.push(activeName);
252
+ } else if (isWorkflowAliasTool(activeName) && canonicalWorkflowToolName(activeName) === requested) {
253
+ aliasFallbacks.push(activeName);
220
254
  }
221
255
  }
222
256
 
257
+ // Only use alias as fallback when canonical is absent — not directly and not via MCP scoping.
258
+ // Prevents the alias from resurfacing alongside the canonical when both are in the active set.
259
+ if (!exact.has(requested) && scopedMatches.length === 0) {
260
+ scopedMatches.push(...aliasFallbacks);
261
+ }
262
+
223
263
  if (requested.startsWith("browser_") && scopedMatches.length > 0) {
224
264
  for (const match of scopedMatches) resolved.add(match);
225
265
  continue;
@@ -242,6 +282,7 @@ export function buildMinimalAutoGsdToolSet(
242
282
  activeToolNames: readonly string[],
243
283
  unitType: string | undefined,
244
284
  registeredToolNames: readonly string[] = activeToolNames,
285
+ warnOnUnresolvedRequiredTools = registeredToolNames !== activeToolNames,
245
286
  ): string[] {
246
287
  if (unitType === "run-uat") {
247
288
  return buildRunUatGsdToolSet(activeToolNames, registeredToolNames);
@@ -257,7 +298,36 @@ export function buildMinimalAutoGsdToolSet(
257
298
  [...activeToolNames, ...registeredToolNames],
258
299
  [...MINIMAL_GSD_TOOL_NAMES, ...unitTools],
259
300
  );
260
- return withPreservedShimTools([...new Set([...preserved, ...scoped])]);
301
+ const result = withPreservedShimTools([...new Set([...preserved, ...scoped])]);
302
+ warnIfRequiredWorkflowToolsUnresolved(unitType, result, warnOnUnresolvedRequiredTools);
303
+ return result;
304
+ }
305
+
306
+ function hasResolvedWorkflowTool(
307
+ resolvedToolNames: readonly string[],
308
+ requiredToolName: string,
309
+ ): boolean {
310
+ return resolvedToolNames.some(
311
+ (name) => name === requiredToolName || mcpToolMatchesBaseName(name, requiredToolName),
312
+ );
313
+ }
314
+
315
+ function warnIfRequiredWorkflowToolsUnresolved(
316
+ unitType: string | undefined,
317
+ scopedToolNames: readonly string[],
318
+ shouldWarn: boolean,
319
+ ): void {
320
+ if (!unitType || !shouldWarn) return;
321
+
322
+ const unresolved = getRequiredWorkflowToolsForUnit(unitType).filter(
323
+ (toolName) => !hasResolvedWorkflowTool(scopedToolNames, toolName),
324
+ );
325
+ if (unresolved.length === 0) return;
326
+
327
+ safetyLogWarning(
328
+ "bootstrap",
329
+ `buildMinimalAutoGsdToolSet(${unitType}): required workflow tool(s) not in active/registered surface after scoping: ${unresolved.join(", ")}. Tool registration may have partially failed, provider filtering may have removed a required tool, or workflow MCP may be disconnected.`,
330
+ );
261
331
  }
262
332
 
263
333
  export function buildRunUatGsdToolSet(
@@ -276,7 +346,7 @@ export function buildRunUatGsdToolSet(
276
346
  const resolved = [...new Set(scoped)];
277
347
 
278
348
  const unresolved = RUN_UAT_WORKFLOW_TOOL_NAMES.filter(
279
- (tool) => !resolved.some((name) => name === tool || (name.startsWith("mcp__") && name.endsWith(`__${tool}`))),
349
+ (tool) => !resolved.some((name) => name === tool || mcpToolMatchesBaseName(name, tool)),
280
350
  );
281
351
  if (unresolved.length > 0) {
282
352
  safetyLogWarning(
@@ -310,6 +380,7 @@ export function buildRequestScopedGsdToolSet(
310
380
  requestCustomMessages: readonly { customType?: string }[] | undefined,
311
381
  registeredToolNames: readonly string[] = activeToolNames,
312
382
  guidedUnitType?: string,
383
+ warnOnUnresolvedRequiredTools = registeredToolNames !== activeToolNames,
313
384
  ): string[] | undefined {
314
385
  for (let index = (requestCustomMessages?.length ?? 0) - 1; index >= 0; index--) {
315
386
  const currentCustomType = requestCustomMessages?.[index]?.customType;
@@ -320,7 +391,12 @@ export function buildRequestScopedGsdToolSet(
320
391
  currentCustomType === "gsd-triage"
321
392
  ) {
322
393
  if (guidedUnitType) {
323
- return buildMinimalAutoGsdToolSet(activeToolNames, guidedUnitType, registeredToolNames);
394
+ return buildMinimalAutoGsdToolSet(
395
+ activeToolNames,
396
+ guidedUnitType,
397
+ registeredToolNames,
398
+ warnOnUnresolvedRequiredTools,
399
+ );
324
400
  }
325
401
  return buildMinimalGsdWorkflowToolSet(activeToolNames, registeredToolNames);
326
402
  }
@@ -368,11 +444,23 @@ function applyMinimalGsdToolSurface(pi: ExtensionAPI): void {
368
444
  if (isFullGsdToolSurfaceRequested()) return;
369
445
  const dash = getAutoRuntimeSnapshot();
370
446
  if (dash.active && dash.currentUnit) {
371
- pi.setActiveTools(buildMinimalAutoGsdToolSet(
372
- pi.getActiveTools(),
447
+ const currentToolNames = pi.getActiveTools();
448
+ const hasRegisteredSurface = typeof pi.getAllTools === "function";
449
+ const registeredToolNames = resolveRegisteredToolNames(pi, currentToolNames);
450
+ const scopedToolNames = buildMinimalAutoGsdToolSet(
451
+ currentToolNames,
373
452
  dash.currentUnit.type,
374
- resolveRegisteredToolNames(pi, pi.getActiveTools()),
375
- ));
453
+ registeredToolNames,
454
+ hasRegisteredSurface,
455
+ );
456
+ recordAutoToolSurfaceSnapshot({
457
+ source: "runtime-scope",
458
+ unitType: dash.currentUnit.type,
459
+ modelFacingToolNames: scopedToolNames,
460
+ registeredToolNames,
461
+ scopedToolNames,
462
+ });
463
+ pi.setActiveTools(scopedToolNames);
376
464
  return;
377
465
  }
378
466
  if (!isGeneralGsdToolScopingRequested()) return;
@@ -385,10 +473,18 @@ export function scopeGsdWorkflowToolsForDispatch(
385
473
  ): ScopedGsdWorkflowState | null {
386
474
  if (isFullGsdToolSurfaceRequested()) return null;
387
475
  const current = pi.getActiveTools();
476
+ const hasRegisteredSurface = typeof pi.getAllTools === "function";
388
477
  const registeredToolNames = resolveRegisteredToolNames(pi, current);
389
478
  const scoped = unitType
390
- ? buildMinimalAutoGsdToolSet(current, unitType, registeredToolNames)
479
+ ? buildMinimalAutoGsdToolSet(current, unitType, registeredToolNames, hasRegisteredSurface)
391
480
  : buildMinimalGsdWorkflowToolSet(current, registeredToolNames);
481
+ recordAutoToolSurfaceSnapshot({
482
+ source: "dispatch-scope",
483
+ unitType,
484
+ modelFacingToolNames: scoped,
485
+ registeredToolNames,
486
+ scopedToolNames: scoped,
487
+ });
392
488
  const toolsChanged = !(scoped.length === current.length && scoped.every((name, index) => name === current[index]));
393
489
  const canScopeSkills = unitHasSkillManifest(unitType) && pi.getVisibleSkills && pi.setVisibleSkills;
394
490
  if (!toolsChanged && !canScopeSkills) {
@@ -475,13 +571,26 @@ async function applyCompactionThresholdOverride(ctx: ExtensionContext): Promise<
475
571
  }
476
572
 
477
573
  function clearDeferredApprovalGate(basePath?: string): void {
478
- if (!basePath || deferredApprovalGate?.basePath === basePath) {
479
- deferredApprovalGate = null;
574
+ if (!basePath) {
575
+ deferredApprovalGates.clear();
576
+ } else {
577
+ deferredApprovalGates.delete(basePath);
480
578
  }
481
579
  }
482
580
 
483
581
  function deferApprovalGate(gateId: string, basePath: string): void {
484
- deferredApprovalGate = { gateId, basePath };
582
+ // Verified-on-disk wins (same adapter policy as activation/re-arm): if the
583
+ // workflow MCP child already verified this gate, deferring would block
584
+ // tools for a gate that can never legitimately arm.
585
+ const snapshot = hostWriteGateAdapter.readState(basePath);
586
+ deferApprovalGateFromSnapshot(gateId, basePath, snapshot);
587
+ }
588
+
589
+ function deferApprovalGateFromSnapshot(gateId: string, basePath: string, snapshot: WriteGateSnapshot): void {
590
+ if (isApprovalGateVerifiedInSnapshot(snapshot, gateId)) return;
591
+ const milestoneId = extractDepthVerificationMilestoneId(gateId);
592
+ if (milestoneId && isMilestoneDepthVerifiedInSnapshot(snapshot, milestoneId)) return;
593
+ deferredApprovalGates.set(basePath, gateId);
485
594
  }
486
595
 
487
596
  function contextBasePath(ctx?: { cwd?: string }): string {
@@ -538,9 +647,13 @@ function isShellExecutionTool(canonicalName: string): boolean {
538
647
  }
539
648
 
540
649
  function activateDeferredApprovalGate(basePath: string): void {
541
- if (deferredApprovalGate?.basePath !== basePath) return;
542
- setPendingGate(deferredApprovalGate.gateId, basePath);
543
- deferredApprovalGate = null;
650
+ const gateId = deferredApprovalGates.get(basePath);
651
+ if (gateId === undefined) return;
652
+ deferredApprovalGates.delete(basePath);
653
+ // hostWriteGateAdapter.setPending applies the verified-on-disk-wins merge
654
+ // policy: it refuses to arm (and thereby clobber) a gate the workflow MCP
655
+ // child already verified on disk.
656
+ hostWriteGateAdapter.setPending(gateId, basePath);
544
657
  }
545
658
 
546
659
  function extractGateQuestionId(input: unknown): string | undefined {
@@ -551,7 +664,7 @@ function extractGateQuestionId(input: unknown): string | undefined {
551
664
 
552
665
  function isApprovalGateBlocking(basePath: string): boolean {
553
666
  return Boolean(getPendingGate(basePath))
554
- || (deferredApprovalGate?.basePath === basePath);
667
+ || deferredApprovalGates.has(basePath);
555
668
  }
556
669
 
557
670
  function isContextDraftSummarySave(toolName: string, input: unknown): boolean {
@@ -560,6 +673,26 @@ function isContextDraftSummarySave(toolName: string, input: unknown): boolean {
560
673
  return (input as { artifact_type?: unknown }).artifact_type === "CONTEXT-DRAFT";
561
674
  }
562
675
 
676
+ /**
677
+ * External engines (claude-code-cli) deliver ask_user_questions results as
678
+ * relayed MCP tool results: the structured round payload arrives in
679
+ * `result.structuredContent`, not in pi-native `event.details`. Without this
680
+ * fallback, applyAskUserQuestionsGateResult sees no response for an answered
681
+ * gate question and lands in the "waiting" branch — leaving a re-armed gate
682
+ * permanently pending and the discuss→auto handoff blocked.
683
+ */
684
+ function resolveAskUserQuestionsGateDetails(event: { details?: unknown; result?: unknown }): any {
685
+ const hasRoundShape = (value: any): boolean =>
686
+ !!value && typeof value === "object" &&
687
+ (value.cancelled !== undefined || value.timed_out !== undefined || value.response !== undefined);
688
+
689
+ const details = event.details as any;
690
+ if (hasRoundShape(details)) return details;
691
+ const structured = (event.result as { structuredContent?: unknown } | undefined)?.structuredContent;
692
+ if (hasRoundShape(structured)) return structured;
693
+ return details ?? {};
694
+ }
695
+
563
696
  type StructuredQuestion = {
564
697
  id?: string;
565
698
  header?: string;
@@ -605,8 +738,21 @@ function formatQuestionExchange(
605
738
  }
606
739
 
607
740
  async function ensureMilestoneShell(basePath: string, milestoneId: string): Promise<string> {
741
+ // When no milestone dir exists yet, prefer the legacy container when it has
742
+ // at least one milestone subdirectory; an empty milestones/ dir (e.g. one
743
+ // created by an old bootstrapGsdProject) is not a real legacy layout.
744
+ const legacy = legacyMilestonesDir(basePath);
745
+ const isLegacyLayout = existsSync(legacy) && (() => {
746
+ try {
747
+ return readdirSync(legacy).some(e => statSync(join(legacy, e)).isDirectory());
748
+ } catch { return false; }
749
+ })();
750
+ const container = isLegacyLayout ? legacy : milestonesDir(basePath);
751
+ const fallbackDirName = isLegacyLayout
752
+ ? milestoneId
753
+ : canonicalPhaseDirName(milestoneId, `New milestone ${milestoneId}`);
608
754
  const milestoneDir = resolveMilestonePath(basePath, milestoneId)
609
- ?? join(milestonesDir(basePath), milestoneId);
755
+ ?? join(container, fallbackDirName);
610
756
  mkdirSync(milestoneDir, { recursive: true });
611
757
  clearPathCache();
612
758
 
@@ -640,14 +786,20 @@ async function saveDiscussionQuestionRound(
640
786
  const timestamp = new Date().toISOString();
641
787
  const exchange = formatQuestionExchange(questions, answers);
642
788
 
643
- const discussionPath = join(milestoneDir, buildMilestoneFileName(milestoneId, "DISCUSSION"));
789
+ // Layout-aware filename: legacy dirs use MID-SUFFIX.md; flat-phase use NN-SUFFIX.md.
790
+ const legacyBase = legacyMilestonesDir(basePath);
791
+ const isLegacyDir = milestoneDir.startsWith(legacyBase + "/") || milestoneDir.startsWith(legacyBase + "\\");
792
+ const milestoneFileName = (suffix: string): string =>
793
+ isLegacyDir ? `${milestoneId}-${suffix}.md` : buildMilestoneFileName(milestoneId, suffix);
794
+
795
+ const discussionPath = join(milestoneDir, milestoneFileName("DISCUSSION"));
644
796
  const existingDiscussion = await loadFile(discussionPath) ?? `# ${milestoneId} Discussion Log\n\n`;
645
797
  await saveFile(
646
798
  discussionPath,
647
799
  `${existingDiscussion}## Exchange — ${timestamp}\n\n${exchange}---\n\n`,
648
800
  );
649
801
 
650
- const draftPath = join(milestoneDir, buildMilestoneFileName(milestoneId, "CONTEXT-DRAFT"));
802
+ const draftPath = join(milestoneDir, milestoneFileName("CONTEXT-DRAFT"));
651
803
  const existingDraft = await loadFile(draftPath);
652
804
  const draftHeader = existingDraft
653
805
  ?? [
@@ -676,13 +828,14 @@ function shouldBlockDeferredApprovalTool(
676
828
  input: unknown,
677
829
  basePath: string,
678
830
  ): { block: boolean; reason?: string; displayReason?: string } {
679
- if (deferredApprovalGate?.basePath !== basePath) return { block: false };
831
+ const deferredGateId = deferredApprovalGates.get(basePath);
832
+ if (deferredGateId === undefined) return { block: false };
680
833
  if (toolName === "ask_user_questions") return { block: false };
681
834
  if (isContextDraftSummarySave(toolName, input)) return { block: false };
682
835
  return withDepthGateDisplayReason({
683
836
  block: true,
684
837
  reason: [
685
- `HARD BLOCK: Approval question "${deferredApprovalGate.gateId}" has been shown to the user.`,
838
+ `HARD BLOCK: Approval question "${deferredGateId}" has been shown to the user.`,
686
839
  `Only CONTEXT-DRAFT persistence may finish in this same assistant turn.`,
687
840
  `Wait for the user's answer before calling additional tools.`,
688
841
  ].join(" "),
@@ -697,6 +850,10 @@ function initSessionNotifications(ctx: ExtensionContext): void {
697
850
  initNotificationStore(resolveNotificationStoreBasePath(contextBasePath(ctx)));
698
851
  installNotifyInterceptor(ctx);
699
852
  initNotificationWidget(ctx);
853
+ notifyPreferenceDiagnostics(ctx, contextBasePath(ctx), { surface: "session-start" });
854
+ if (ctx.hasUI) {
855
+ setStderrLoggingEnabled(false);
856
+ }
700
857
  }
701
858
 
702
859
  async function prepareWorkflowMcpForHookContext(
@@ -742,6 +899,31 @@ export function registerHooks(
742
899
  await applyCompactionThresholdOverride(ctx);
743
900
  await prepareWorkflowMcpForHookContext(ctx, basePath);
744
901
 
902
+ // Migrate legacy .gsd/milestones/ to flat-phase .gsd/phases/ when detected.
903
+ // Best-effort — never blocks session startup. Skipped inside auto-worktrees
904
+ // (migration already ran on the project root before the worktree was created).
905
+ try {
906
+ const { isInAutoWorktree } = await import("../auto-worktree.js");
907
+ if (!isInAutoWorktree(basePath)) {
908
+ const { needsFlatPhaseMigration } = await import("../flat-phase-migration.js");
909
+ if (needsFlatPhaseMigration(basePath)) {
910
+ const { ensureDbOpen } = await import("./dynamic-tools.js");
911
+ const opened = await ensureDbOpen(basePath);
912
+ if (opened) {
913
+ const { migrateToFlatPhase } = await import("../flat-phase-migration.js");
914
+ await migrateToFlatPhase(basePath);
915
+ } else {
916
+ safetyLogWarning(
917
+ "bootstrap",
918
+ "flat-phase migration deferred: legacy .gsd/milestones/ layout detected but the workflow database could not be opened — will retry on next session",
919
+ );
920
+ }
921
+ }
922
+ }
923
+ } catch (err) {
924
+ safetyLogWarning("bootstrap", `flat-phase migration: ${err instanceof Error ? err.message : String(err)}`);
925
+ }
926
+
745
927
  // Apply show_token_cost preference (#1515)
746
928
  try {
747
929
  const { loadEffectiveGSDPreferences } = await import("../preferences.js");
@@ -749,7 +931,14 @@ export function registerHooks(
749
931
  process.env.GSD_SHOW_TOKEN_COST = prefs?.preferences.show_token_cost ? "1" : "";
750
932
  } catch { /* non-fatal */ }
751
933
  if (!preserveCloseoutSurface) {
752
- await installWelcomeHeader(ctx);
934
+ // Per-unit newSession() during auto/step runs fires session_start again.
935
+ // Keep the welcome banner startup-only — do not overwrite the empty header
936
+ // that updateProgressWidget installs once work begins.
937
+ if (isAutoActive() || isAutoPaused()) {
938
+ suppressWelcomeHeader(ctx);
939
+ } else {
940
+ await installWelcomeHeader(ctx);
941
+ }
753
942
  }
754
943
  await loadToolApiKeysForSession();
755
944
  if (isAutoActive() || preserveCloseoutSurface) {
@@ -768,7 +957,7 @@ export function registerHooks(
768
957
  }
769
958
  });
770
959
 
771
- pi.on("session_switch", async (_event, ctx) => {
960
+ pi.on("session_switch", async (event, ctx) => {
772
961
  const basePath = contextBasePath(ctx);
773
962
  const preserveCloseoutSurface = isAutoCompletionStopInProgress();
774
963
  initSessionNotifications(ctx);
@@ -777,6 +966,13 @@ export function registerHooks(
777
966
  clearDeferredApprovalGate();
778
967
  await resetAskUserQuestionsTurnCache();
779
968
  clearDiscussionFlowState(basePath);
969
+ // /clear or /new destroys the conversation holding a discuss interview, so
970
+ // its pending discuss→auto handoff can never be answered — clear it. Resume
971
+ // restores the interview transcript, so the entry survives. Auto-mode's own
972
+ // newSession() calls are safe: the handoff consumes the entry on agent_end.
973
+ if (event.reason === "new") {
974
+ clearPendingAutoStart(basePath);
975
+ }
780
976
  await syncServiceTierStatus(ctx);
781
977
  await applyDisabledModelProviderPolicy(ctx);
782
978
  await applyCompactionThresholdOverride(ctx);
@@ -804,10 +1000,12 @@ export function registerHooks(
804
1000
  const beforeAgentBasePath = contextBasePath(ctx);
805
1001
  const pendingApprovalGate = getPendingGate(beforeAgentBasePath);
806
1002
  if (pendingApprovalGate && isExplicitApprovalResponse(event.prompt, pendingApprovalGate)) {
807
- markApprovalGateVerified(pendingApprovalGate, beforeAgentBasePath);
1003
+ // Host adapter explicitly: the ambient write-gate exports env-sniff the
1004
+ // adapter per call and are reserved for the MCP child's import surface.
1005
+ hostWriteGateAdapter.markApprovalGateVerified(pendingApprovalGate, beforeAgentBasePath);
808
1006
  const milestoneId = extractDepthVerificationMilestoneId(pendingApprovalGate);
809
- if (milestoneId) markDepthVerified(milestoneId, beforeAgentBasePath);
810
- clearPendingGate(beforeAgentBasePath);
1007
+ if (milestoneId) hostWriteGateAdapter.markDepthVerified(milestoneId, beforeAgentBasePath);
1008
+ hostWriteGateAdapter.clearPending(beforeAgentBasePath);
811
1009
  if (isAutoPaused() && !isAutoActive()) {
812
1010
  const { resumeAutoAfterProviderDelay } = await import("./provider-error-resume.js");
813
1011
  void resumeAutoAfterProviderDelay(pi, ctx).catch((err) => {
@@ -902,6 +1100,10 @@ export function registerHooks(
902
1100
  pi.on("message_end", async (event) => {
903
1101
  const { suppressTerminalDeletedWorktreeMessageEnd } = await import("./agent-end-recovery.js");
904
1102
  suppressTerminalDeletedWorktreeMessageEnd(event);
1103
+ if (isAutoActive()) {
1104
+ const { sanitizePrematureCloseoutMessageEnd } = await import("../auto-closeout-messaging.js");
1105
+ sanitizePrematureCloseoutMessageEnd(event);
1106
+ }
905
1107
  });
906
1108
 
907
1109
  // Squash-merge quick-task branch back to the original branch after the
@@ -994,6 +1196,18 @@ export function registerHooks(
994
1196
 
995
1197
  pi.on("message_update", async (event, ctx: ExtensionContext) => {
996
1198
  if (approvalQuestionAbortInFlight) return;
1199
+ // If the model asked via ask_user_questions, that in-flight elicitation IS
1200
+ // the human boundary. Arming the pause/gate here (and emitting the "waiting
1201
+ // for your approval - pausing" notice) would tear it down and trigger the
1202
+ // foreground self-cancel/re-ask loop. The marker is set only by the
1203
+ // claude-code-cli SDK elicitation handler and is ungated, so it is true in
1204
+ // foreground; under the native-TUI provider it is always false and this path
1205
+ // runs unchanged (#cc-elicitation-self-cancel).
1206
+ if (isInteractiveElicitationInFlight()) return;
1207
+ // Prose with "?" can stream before the MCP tool/elicitation starts. When the
1208
+ // structured ask_user_questions call is already in the partial message, the
1209
+ // tool IS the human boundary — do not arm the text-based approval pause.
1210
+ if (messageHasPendingAskUserQuestionsTool(event.message)) return;
997
1211
 
998
1212
  const dash = getAutoRuntimeSnapshot();
999
1213
  if (dash.active) return;
@@ -1019,22 +1233,24 @@ export function registerHooks(
1019
1233
  }
1020
1234
  }
1021
1235
 
1022
- if (!shouldPauseForUserApprovalQuestion(unitType, [event.message])) return;
1236
+ if (!shouldPauseForQuestion(unitType, [event.message])) return;
1023
1237
 
1024
1238
  const gateId = approvalGateIdForUnit(unitType, unitId);
1025
1239
  if (gateId) {
1240
+ const basePath = contextBasePath(ctx);
1241
+ const gateSnapshot = currentWriteGateSnapshot(basePath);
1026
1242
  // Skip the gate if this milestone is already depth-verified — the approval
1027
1243
  // pattern matched again on post-verification text (a false-positive re-trigger).
1028
1244
  // Without this guard, the second firing blocks gsd_plan_milestone in the same
1029
1245
  // turn and leaves CONTEXT.md on disk with no DB row (#discuss-milestone-no-db).
1030
1246
  const gateMilestoneId = extractDepthVerificationMilestoneId(gateId);
1031
- if (gateMilestoneId && isMilestoneDepthVerified(gateMilestoneId, contextBasePath(ctx))) return;
1032
- deferApprovalGate(gateId, contextBasePath(ctx));
1247
+ if (gateMilestoneId && isMilestoneDepthVerifiedInSnapshot(gateSnapshot, gateMilestoneId)) return;
1248
+ deferApprovalGateFromSnapshot(gateId, basePath, gateSnapshot);
1033
1249
  }
1034
1250
 
1035
1251
  approvalQuestionAbortInFlight = true;
1036
1252
  ctx.ui.notify(
1037
- `${unitType}${unitId ? ` ${unitId}` : ""} is waiting for your approval - pausing before more tool calls run.`,
1253
+ `${unitType ?? "The discussion"}${unitId ? ` ${unitId}` : ""} is waiting for your approval - pausing before more tool calls run.`,
1038
1254
  "info",
1039
1255
  );
1040
1256
  // The durable pending gate is activated at agent_end so same-turn
@@ -1062,6 +1278,13 @@ export function registerHooks(
1062
1278
  }
1063
1279
  });
1064
1280
 
1281
+ // Engine hook contract (../engine-hook-contract.ts): tool_call is
1282
+ // NATIVE_ONLY_TOOL_HOOKS — it never fires under external engines
1283
+ // (claude-code-cli pre-executes tools). The guards below (loop guard,
1284
+ // pending/deferred gate blocks, queue guard, planning-unit tools policy,
1285
+ // worktree write gate, STATE.md single-writer, context-write depth gate)
1286
+ // are therefore native-engine enforcement only. The write-gate arming
1287
+ // concern has a universal mirror at tool_execution_start below.
1065
1288
  pi.on("tool_call", async (event, ctx) => {
1066
1289
  const discussionBasePath = contextBasePath(ctx);
1067
1290
  const toolName = canonicalToolName(event.toolName);
@@ -1214,6 +1437,16 @@ export function registerHooks(
1214
1437
  if (wtGuard.block) return wtGuard;
1215
1438
  }
1216
1439
 
1440
+ if (isToolCallEventType("bash", event)) {
1441
+ const wtBashGuard = shouldBlockWorktreeBash(
1442
+ event.input.command,
1443
+ dash.basePath ?? discussionBasePath,
1444
+ isAutoActive(),
1445
+ dash.currentUnit?.type,
1446
+ );
1447
+ if (wtBashGuard.block) return wtBashGuard;
1448
+ }
1449
+
1217
1450
  // ── Single-writer engine: block direct writes to STATE.md ──────────
1218
1451
  // Covers write, edit, and bash tools to prevent bypass vectors.
1219
1452
  if (isToolCallEventType("write", event)) {
@@ -1249,6 +1482,11 @@ export function registerHooks(
1249
1482
  });
1250
1483
 
1251
1484
  // ── Safety harness: evidence collection + destructive command blocking ──
1485
+ // Engine hook contract: tool_call is NATIVE_ONLY_TOOL_HOOKS. Evidence
1486
+ // collection here is mirrored universally at tool_execution_start
1487
+ // (safetyRecordToolCall dedupes by toolCallId); the destructive-command
1488
+ // hard gate has NO universal mirror — blocking is impossible once an
1489
+ // external engine has already executed the command.
1252
1490
  pi.on("tool_call", async (event, ctx) => {
1253
1491
  markToolStart(event.toolCallId, event.toolName);
1254
1492
  safetyRecordToolCall(event.toolCallId, event.toolName, event.input as Record<string, unknown>);
@@ -1268,23 +1506,39 @@ export function registerHooks(
1268
1506
 
1269
1507
  // Destructive command classification + hard gate in all modes.
1270
1508
  if (isToolCallEventType("bash", event)) {
1271
- const classification = classifyCommand(event.input.command);
1509
+ const command = event.input.command;
1510
+ const classification = classifyCommand(command);
1272
1511
  if (classification.destructive) {
1512
+ const guardBasePath = contextBasePath(ctx);
1513
+ // Escape hatch: if the user already confirmed this exact command via a
1514
+ // destructive_confirm gate, consume the one-shot token and let it run.
1515
+ // Without this, the block below loops forever — the model cannot satisfy
1516
+ // "confirm in the current turn" because nothing ever clears the gate.
1517
+ if (consumeDestructiveConfirmation(command, guardBasePath)) {
1518
+ safetyLogWarning("safety", `destructive command confirmed: ${classification.labels.join(", ")}`, {
1519
+ command: String(command).slice(0, 200),
1520
+ });
1521
+ return;
1522
+ }
1523
+ // Record the command as pending so an affirmative answer to a
1524
+ // destructive_confirm gate (handled in tool_result) can confirm it.
1525
+ requestDestructiveConfirmation(command, guardBasePath);
1273
1526
  const reason = [
1274
1527
  "HARD BLOCK: destructive Bash command requires explicit human confirmation.",
1275
1528
  `Detected: ${classification.labels.join(", ")}`,
1276
- "Run this via ask_user_questions, wait for the user's response,",
1277
- "then issue the command only when confirmed in the current turn.",
1529
+ "Call ask_user_questions with a question id containing \"destructive_confirm\"",
1530
+ "and a first option that affirms the action; wait for the user's response,",
1531
+ "then re-issue this exact command in the same turn to run it once.",
1278
1532
  ].join(" ");
1279
1533
  safetyLogWarning("safety", `destructive command: ${classification.labels.join(", ")}`, {
1280
- command: String(event.input.command).slice(0, 200),
1534
+ command: String(command).slice(0, 200),
1281
1535
  });
1282
1536
  if (ctx) {
1283
1537
  await maybePauseAutoForApprovalGate(
1284
1538
  ctx,
1285
1539
  pi,
1286
1540
  isAutoActive(),
1287
- "Depth confirmation is waiting for your answer — pausing auto-mode.",
1541
+ "Destructive-command confirmation is waiting for your answer — pausing auto-mode.",
1288
1542
  );
1289
1543
  }
1290
1544
  return { block: true, reason };
@@ -1292,6 +1546,11 @@ export function registerHooks(
1292
1546
  }
1293
1547
  });
1294
1548
 
1549
+ // Engine hook contract: tool_result is NATIVE_ONLY_TOOL_HOOKS — external
1550
+ // engines skip it. Error classification and markToolEnd are mirrored
1551
+ // universally at tool_execution_end; the ask_user_questions gate lifecycle
1552
+ // here is paired with the tool_execution_start arming path, which external
1553
+ // engines do reach.
1295
1554
  pi.on("tool_result", async (event, ctx) => {
1296
1555
  if (isAutoActive() && typeof event.toolCallId === "string") {
1297
1556
  markToolEnd(event.toolCallId);
@@ -1322,82 +1581,145 @@ export function registerHooks(
1322
1581
  } else if (isAutoActive()) {
1323
1582
  clearToolInvocationError();
1324
1583
  }
1584
+ // Interactive Closeout adapter (ADR-032): auto-mode owns closeout for its
1585
+ // own units; interactive completions get the durable git subset (commit +
1586
+ // Closeout Git Verdict) instead of silently bypassing git.isolation.
1587
+ if (!event.isError && !isAutoActive() && isUnitCloseoutTool(toolName)) {
1588
+ try {
1589
+ runInteractiveUnitCloseout({
1590
+ basePath: resolveWorkflowToolBasePath(ctx, event.input as { milestone_id?: string }),
1591
+ canonicalToolName: toolName,
1592
+ input: event.input,
1593
+ });
1594
+ } catch (err) {
1595
+ safetyLogWarning("engine", `interactive unit closeout failed: ${err instanceof Error ? err.message : String(err)}`);
1596
+ }
1597
+ }
1325
1598
  if (toolName !== "ask_user_questions") return;
1326
1599
  const basePath = contextBasePath(ctx);
1327
1600
  const milestoneId = await getDiscussionMilestoneIdFor(basePath);
1328
1601
 
1329
- const details = event.details as any;
1330
-
1331
- // ── Discussion gate enforcement: handle gate question responses ──
1332
- // If the result is cancelled or has no response, the pending gate stays active
1333
- // so the model is blocked from non-read-only tools until it re-asks.
1334
- // If the user responded at all (even "needs adjustment"), clear the pending gate
1335
- // because the user engaged — the prompt handles the re-ask-after-adjustment flow.
1336
- const questions: any[] = (event.input as any)?.questions ?? [];
1337
- const currentPendingGate = getPendingGate(basePath);
1338
- if (currentPendingGate) {
1339
- if (details?.cancelled || !details?.response) {
1340
- // Gate stays pending. Direct the agent to the most reliable recovery
1341
- // path — re-calling ask_user_questions with the same gate id — without
1342
- // misrepresenting the plain-text path. The plain-text path also works
1343
- // (isExplicitApprovalResponse on the next before_agent_start clears
1344
- // the gate when the user replies with an approval keyword), but the
1345
- // structured re-ask is more deterministic and gives the user a clear UI.
1346
- resetToolCallLoopGuard();
1347
- const interrupted = details?.interrupted === true;
1348
- if (ctx) {
1349
- await maybePauseAutoForApprovalGate(
1350
- ctx,
1351
- pi,
1352
- true,
1353
- interrupted
1354
- ? "Depth confirmation was interrupted — pausing auto-mode until you respond."
1355
- : "Depth confirmation is waiting for your answer — pausing auto-mode.",
1356
- );
1357
- }
1358
- return {
1359
- content: [{
1360
- type: "text" as const,
1361
- text: [
1362
- `Waiting for depth confirmation on gate "${currentPendingGate}".`,
1363
- interrupted
1364
- ? "The confirmation question was interrupted before a response was recorded."
1365
- : "No user response was received for the confirmation question.",
1366
- "Do not infer approval from earlier or prior messages.",
1367
- "Do not proceed, write files, save artifacts, or call other tools.",
1368
- `Re-call ask_user_questions with the same gate question id ("${currentPendingGate}") and wait for the user's response.`,
1369
- ].join(" "),
1370
- }],
1371
- };
1372
- } else {
1373
- const pendingQuestion = questions.find((question) => question?.id === currentPendingGate);
1374
- if (pendingQuestion) {
1375
- const answer = details.response?.answers?.[currentPendingGate];
1376
- if (isDepthConfirmationAnswer(answer?.selected, pendingQuestion.options)) {
1377
- markApprovalGateVerified(currentPendingGate, basePath);
1378
- const milestoneIdFromGate = extractDepthVerificationMilestoneId(currentPendingGate);
1379
- if (milestoneIdFromGate) markDepthVerified(milestoneIdFromGate, basePath);
1380
- clearPendingGate(basePath);
1381
- clearDeferredApprovalGate(basePath);
1382
- }
1383
- }
1602
+ const details = resolveAskUserQuestionsGateDetails(event);
1603
+
1604
+ const questions: any[] = (event.input as any)?.questions ?? details?.questions ?? [];
1605
+ const gateResult = applyAskUserQuestionsGateResult({
1606
+ basePath,
1607
+ questions,
1608
+ details,
1609
+ fallbackMilestoneId: milestoneId,
1610
+ });
1611
+ if (gateResult.status === "waiting") {
1612
+ resetToolCallLoopGuard();
1613
+ if (ctx) {
1614
+ await maybePauseAutoForApprovalGate(
1615
+ ctx,
1616
+ pi,
1617
+ true,
1618
+ gateResult.interrupted
1619
+ ? "Depth confirmation was interrupted — pausing auto-mode until you respond."
1620
+ : "Depth confirmation is waiting for your answer — pausing auto-mode.",
1621
+ );
1622
+ }
1623
+ return {
1624
+ content: [{
1625
+ type: "text" as const,
1626
+ text: formatPendingAskUserQuestionsGateMessage(gateResult.pendingGateId, gateResult.interrupted),
1627
+ }],
1628
+ };
1629
+ }
1630
+ if (gateResult.status === "timeout") {
1631
+ // Host elicitation timed out before the user answered. The gate stays
1632
+ // pending (fail-closed), but we reset the loop guard and return a
1633
+ // timeout-specific message so the model does NOT immediately re-ask —
1634
+ // that would just hit the same timeout again. Auto-mode pauses and
1635
+ // waits for the user to respond on a new turn (#852).
1636
+ resetToolCallLoopGuard();
1637
+ if (ctx) {
1638
+ await maybePauseAutoForApprovalGate(
1639
+ ctx,
1640
+ pi,
1641
+ true,
1642
+ "Depth confirmation timed out waiting for a response — pausing auto-mode. Reply to resume.",
1643
+ );
1644
+ }
1645
+ return {
1646
+ content: [{
1647
+ type: "text" as const,
1648
+ text: formatTimedOutAskUserQuestionsGateMessage(gateResult.pendingGateId),
1649
+ }],
1650
+ };
1651
+ }
1652
+ if (gateResult.status === "verified") {
1653
+ clearDeferredApprovalGate(basePath);
1654
+ }
1655
+
1656
+ // ── Consent Question policy (consent-question.ts): one home for the
1657
+ // answer lifecycle of every ask_user_questions round. Per-question
1658
+ // verdicts come from the consent-verdict leaf — the same engine
1659
+ // applyAskUserQuestionsGateResult consumed above for gate persistence —
1660
+ // so empty answers on fail-closed kinds never pass as real answers (#528)
1661
+ // and cancellations get one unified handler.
1662
+ const roundOutcome = evaluateAskUserQuestionsRound(questions, details ?? {});
1663
+ if (roundOutcome === "cancelled") {
1664
+ resetToolCallLoopGuard();
1665
+ if (ctx) {
1666
+ await maybePauseAutoForApprovalGate(
1667
+ ctx,
1668
+ pi,
1669
+ true,
1670
+ "ask_user_questions was cancelled before receiving a response — pausing auto-mode until you respond.",
1671
+ );
1672
+ }
1673
+ return;
1674
+ }
1675
+ if (roundOutcome === "timeout") {
1676
+ // Non-gate (consent/decision) question timed out at the host elicitation.
1677
+ // Same policy as the gate-timeout branch above: reset the loop guard and
1678
+ // pause-and-wait so the model does not re-ask into the same timeout (#852).
1679
+ resetToolCallLoopGuard();
1680
+ if (ctx) {
1681
+ await maybePauseAutoForApprovalGate(
1682
+ ctx,
1683
+ pi,
1684
+ true,
1685
+ "A user question timed out waiting for a response — pausing auto-mode. Reply to resume.",
1686
+ );
1687
+ }
1688
+ return;
1689
+ }
1690
+ if (roundOutcome === "waiting") {
1691
+ resetToolCallLoopGuard();
1692
+ if (ctx) {
1693
+ await maybePauseAutoForApprovalGate(
1694
+ ctx,
1695
+ pi,
1696
+ true,
1697
+ "A user question received no answer — pausing auto-mode until you respond.",
1698
+ );
1384
1699
  }
1700
+ return {
1701
+ content: [{
1702
+ type: "text" as const,
1703
+ text: formatUnansweredConsentQuestionMessage(questions),
1704
+ }],
1705
+ };
1385
1706
  }
1386
1707
 
1387
- if (details?.cancelled || !details?.response) return;
1708
+ // Cancelled rounds already returned via roundOutcome === "cancelled".
1709
+ if (!details?.response) return;
1388
1710
 
1711
+ // Destructive-command confirmation: an affirmative answer to a
1712
+ // destructive_confirm gate promotes the pending blocked command to a
1713
+ // one-shot confirmed token, which the bash tool_call guard consumes on the
1714
+ // next attempt. Rejecting/declining leaves the command blocked.
1715
+ // (Depth-verification gate handling now lives in
1716
+ // applyAskUserQuestionsGateResult above; only the destructive-confirm gate
1717
+ // is handled inline here.)
1389
1718
  for (const question of questions) {
1390
- if (typeof question.id === "string" && question.id.includes("depth_verification")) {
1391
- // Only unlock the gate if the user selected the first option (confirmation).
1392
- // Cross-references against the question's defined options to reject free-form "Other" text.
1719
+ if (isDestructiveConfirmGateId(question?.id)) {
1393
1720
  const answer = details.response?.answers?.[question.id];
1394
- const inferredMilestoneId = extractDepthVerificationMilestoneId(question.id) ?? milestoneId;
1395
1721
  if (isDepthConfirmationAnswer(answer?.selected, question.options)) {
1396
- if (currentPendingGate && question.id !== currentPendingGate) break;
1397
- markApprovalGateVerified(question.id, basePath);
1398
- markDepthVerified(inferredMilestoneId, basePath);
1399
- clearPendingGate(basePath);
1400
- clearDeferredApprovalGate(basePath);
1722
+ confirmDestructiveCommand(basePath);
1401
1723
  }
1402
1724
  break;
1403
1725
  }
@@ -1407,20 +1729,50 @@ export function registerHooks(
1407
1729
  await saveDiscussionQuestionRound(basePath, milestoneId, questions, details);
1408
1730
  });
1409
1731
 
1732
+ // Engine hook contract: tool_execution_start is UNIVERSAL_TOOL_HOOKS — the
1733
+ // only pre-execution event that fires for every tool call on every engine.
1734
+ // Universal mirrors live here: write-gate arming and evidence collection.
1410
1735
  pi.on("tool_execution_start", async (event, ctx) => {
1411
1736
  const basePath = contextBasePath(ctx);
1412
1737
  const toolName = canonicalToolName(event.toolName);
1413
1738
  if (toolName === "ask_user_questions") {
1414
1739
  const questionId = extractGateQuestionId(event.args);
1415
1740
  if (typeof questionId === "string") {
1416
- setPendingGate(questionId, basePath);
1741
+ // External engines (claude-code-cli) ingest the SDK turn's tool blocks
1742
+ // post-hoc, so this event can fire AFTER the workflow MCP child already
1743
+ // verified this gate and allowed the CONTEXT save. Arming also revokes
1744
+ // verifiedDepthMilestones/verifiedApprovalGates, so an unconditional
1745
+ // re-arm here would wipe the child's verification and leave the
1746
+ // discuss→auto handoff permanently blocked. hostWriteGateAdapter
1747
+ // .setPending applies the verified-on-disk-wins policy and skips the
1748
+ // re-arm in that case. Stale verified state cannot leak into a later
1749
+ // re-discussion: a successful handoff deletes the snapshot via
1750
+ // clearDiscussionFlowState.
1751
+ hostWriteGateAdapter.setPending(questionId, basePath);
1417
1752
  clearDeferredApprovalGate(basePath);
1418
1753
  }
1419
1754
  }
1755
+
1756
+ // Safety harness: record evidence here, not only in tool_call — see
1757
+ // ../engine-hook-contract.ts for why tool_call never fires under external
1758
+ // engines. recordToolCall dedupes by toolCallId, so native tools (which
1759
+ // hit both events) record once.
1760
+ safetyRecordToolCall(event.toolCallId, event.toolName, (event.args ?? {}) as Record<string, unknown>);
1761
+ const execDash = getAutoRuntimeSnapshot();
1762
+ if (execDash.basePath && execDash.currentUnit?.type === "execute-task") {
1763
+ const { milestone: xMid, slice: xSid, task: xTid } = parseUnitId(execDash.currentUnit.id);
1764
+ if (xMid && xSid && xTid) {
1765
+ saveEvidenceToDisk(execDash.basePath, xMid, xSid, xTid);
1766
+ }
1767
+ }
1768
+
1420
1769
  if (!isAutoActive()) return;
1421
1770
  markToolStart(event.toolCallId, event.toolName);
1422
1771
  });
1423
1772
 
1773
+ // Engine hook contract: tool_execution_end is UNIVERSAL_TOOL_HOOKS — fires
1774
+ // for every finalized tool call on every engine, so error classification
1775
+ // and evidence persistence here cover external engines that skip tool_result.
1424
1776
  pi.on("tool_execution_end", async (event) => {
1425
1777
  markToolEnd(event.toolCallId);
1426
1778
  // #2883/#4974: Capture deterministic invocation/policy errors
@@ -1458,66 +1810,10 @@ export function registerHooks(
1458
1810
  const payload = event.payload as Record<string, unknown> | null;
1459
1811
  if (!payload || typeof payload !== "object") return;
1460
1812
 
1461
- // ── Context Management ──────────────────────────────────────────────
1462
- // Load preferences once for both masking and truncation.
1463
- try {
1464
- const { loadEffectiveGSDPreferences } = await import("../preferences.js");
1465
- const {
1466
- createObservationMask,
1467
- createResponsesInputObservationMask,
1468
- truncateContextResultMessages,
1469
- truncateResponsesInputResultItems,
1470
- } = await import("../context-masker.js");
1471
- const prefs = loadEffectiveGSDPreferences();
1472
- const cmConfig = prefs?.preferences.context_management;
1473
-
1474
- // Observation masking: replace old tool results with placeholders.
1475
- // Only active during auto-mode when context_management.observation_masking is enabled.
1476
- if (isAutoActive() && cmConfig?.observation_masking !== false) {
1477
- const keepTurns = cmConfig?.observation_mask_turns ?? 8;
1478
- const messages = payload.messages;
1479
- if (Array.isArray(messages)) {
1480
- payload.messages = createObservationMask(keepTurns)(messages);
1481
- }
1482
- const input = payload.input;
1483
- if (Array.isArray(input)) {
1484
- payload.input = createResponsesInputObservationMask(keepTurns)(input);
1485
- }
1486
- }
1487
-
1488
- // Tool result truncation: cap individual tool result content length.
1489
- // Applies in ALL modes (auto + interactive) to prevent context bloat.
1490
- // In pi-ai format, toolResult messages have role: "toolResult" and content: TextContent[].
1491
- // Creates new objects to avoid mutating shared conversation state.
1492
- const maxChars = cmConfig?.tool_result_max_chars ?? 800;
1493
- const msgs = payload.messages;
1494
- if (Array.isArray(msgs)) {
1495
- payload.messages = truncateContextResultMessages(msgs as any, maxChars);
1496
- }
1497
- const input = payload.input;
1498
- if (Array.isArray(input)) {
1499
- payload.input = truncateResponsesInputResultItems(input as any, maxChars);
1500
- }
1501
- } catch { /* non-fatal */ }
1502
-
1503
- try {
1504
- if (isAutoActive()) {
1505
- const sourceContextBlock = getSourceObservationStore().renderActiveBlock();
1506
- if (sourceContextBlock) {
1507
- const nextPayload = injectSourceContextBlockIntoPayload(payload, sourceContextBlock);
1508
- Object.assign(payload, nextPayload);
1509
- }
1510
- }
1511
- } catch { /* non-fatal */ }
1512
-
1513
- // ── Service Tier ────────────────────────────────────────────────────
1514
- const modelId = event.model?.id;
1515
- if (!modelId) return payload;
1516
- const { getEffectiveServiceTier, supportsServiceTier } = await import("../service-tier.js");
1517
- const tier = getEffectiveServiceTier();
1518
- if (!tier || !supportsServiceTier(modelId)) return payload;
1519
- payload.service_tier = tier;
1520
- return payload;
1813
+ return applyProviderPayloadPolicy({
1814
+ payload,
1815
+ modelId: event.model?.id,
1816
+ });
1521
1817
  });
1522
1818
 
1523
1819
  // Capability-aware model routing hook (ADR-004)
@@ -1553,31 +1849,53 @@ export function registerHooks(
1553
1849
  return surfaceReduced ? { toolNames: providerCompatible } : undefined;
1554
1850
  }
1555
1851
  const registeredToolNames = resolveRegisteredToolNames(pi, event.activeToolNames);
1852
+ const hasRegisteredSurface = typeof pi.getAllTools === "function";
1556
1853
  const compatibleRegisteredToolNames = filterToolsForProvider(
1557
1854
  registeredToolNames,
1558
1855
  event.selectedModelApi,
1559
1856
  event.selectedModelProvider,
1560
1857
  ).compatible.filter((name) => !(dropAliases && isWorkflowAliasTool(name)));
1561
1858
  const guidedUnit = getGuidedUnitContext();
1859
+ const requestRegisteredToolNames = guidedUnit?.unitType === "run-uat"
1860
+ ? compatibleRegisteredToolNames
1861
+ : registeredToolNames;
1562
1862
  const requestScoped = buildRequestScopedGsdToolSet(
1563
1863
  guidedUnit?.unitType === "run-uat" ? aliasFilteredCompatible : providerCompatible,
1564
1864
  event.requestCustomMessages,
1565
- guidedUnit?.unitType === "run-uat" ? compatibleRegisteredToolNames : registeredToolNames,
1865
+ requestRegisteredToolNames,
1566
1866
  guidedUnit?.unitType,
1867
+ hasRegisteredSurface,
1567
1868
  );
1568
1869
  if (requestScoped) {
1870
+ recordAutoToolSurfaceSnapshot({
1871
+ source: "provider-adjustment",
1872
+ unitType: guidedUnit?.unitType,
1873
+ modelFacingToolNames: requestScoped,
1874
+ registeredToolNames: requestRegisteredToolNames,
1875
+ scopedToolNames: requestScoped,
1876
+ });
1569
1877
  return { toolNames: requestScoped };
1570
1878
  }
1571
1879
  const dash = getAutoRuntimeSnapshot();
1572
1880
  if (dash.active && dash.currentUnit) {
1881
+ const registeredForUnit = dash.currentUnit.type === "run-uat"
1882
+ ? compatibleRegisteredToolNames
1883
+ : resolveRegisteredToolNames(pi, event.activeToolNames);
1884
+ const scopedToolNames = buildMinimalAutoGsdToolSet(
1885
+ dash.currentUnit.type === "run-uat" ? aliasFilteredCompatible : providerCompatible,
1886
+ dash.currentUnit.type,
1887
+ registeredForUnit,
1888
+ hasRegisteredSurface,
1889
+ );
1890
+ recordAutoToolSurfaceSnapshot({
1891
+ source: "provider-adjustment",
1892
+ unitType: dash.currentUnit.type,
1893
+ modelFacingToolNames: scopedToolNames,
1894
+ registeredToolNames: registeredForUnit,
1895
+ scopedToolNames,
1896
+ });
1573
1897
  return {
1574
- toolNames: buildMinimalAutoGsdToolSet(
1575
- dash.currentUnit.type === "run-uat" ? aliasFilteredCompatible : providerCompatible,
1576
- dash.currentUnit.type,
1577
- dash.currentUnit.type === "run-uat"
1578
- ? compatibleRegisteredToolNames
1579
- : resolveRegisteredToolNames(pi, event.activeToolNames),
1580
- ),
1898
+ toolNames: scopedToolNames,
1581
1899
  };
1582
1900
  }
1583
1901
  if (isGeneralGsdToolScopingRequested()) {