@opengsd/gsd-pi 1.2.0-dev.844675c9 → 1.2.0-dev.8e6112e9

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 (1016) hide show
  1. package/dist/cli-model-override.d.ts +15 -0
  2. package/dist/cli-model-override.js +21 -0
  3. package/dist/cli-style.d.ts +17 -0
  4. package/dist/cli-style.js +28 -0
  5. package/dist/cli-web-branch.d.ts +2 -0
  6. package/dist/cli-web-branch.js +9 -2
  7. package/dist/cli.js +2 -19
  8. package/dist/headless-events.d.ts +4 -2
  9. package/dist/headless-events.js +14 -34
  10. package/dist/help-text.js +5 -0
  11. package/dist/loader.js +6 -4
  12. package/dist/mcp-server.js +2 -1
  13. package/dist/models-resolver.d.ts +3 -13
  14. package/dist/models-resolver.js +3 -22
  15. package/dist/register-agent-bundles.d.ts +11 -2
  16. package/dist/register-agent-bundles.js +18 -4
  17. package/dist/resource-loader.d.ts +10 -5
  18. package/dist/resource-loader.js +123 -20
  19. package/dist/resources/.managed-resources-content-hash +1 -1
  20. package/dist/resources/GSD-WORKFLOW.md +5 -4
  21. package/dist/resources/extensions/ask-user-questions.js +81 -25
  22. package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
  23. package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
  24. package/dist/resources/extensions/async-jobs/index.js +65 -0
  25. package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
  26. package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
  27. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
  28. package/dist/resources/extensions/bg-shell/overlay.js +9 -6
  29. package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
  30. package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
  31. package/dist/resources/extensions/bg-shell/utilities.js +5 -2
  32. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
  33. package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
  34. package/dist/resources/extensions/browser-tools/index.js +69 -12
  35. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  36. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +546 -426
  37. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +256 -0
  38. package/dist/resources/extensions/github-sync/templates.js +3 -3
  39. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  40. package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
  41. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
  42. package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
  43. package/dist/resources/extensions/gsd/auto/dispatch-history.js +120 -0
  44. package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
  45. package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
  46. package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
  47. package/dist/resources/extensions/gsd/auto/loop.js +80 -56
  48. package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
  49. package/dist/resources/extensions/gsd/auto/orchestrator.js +310 -78
  50. package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
  51. package/dist/resources/extensions/gsd/auto/phases.js +17 -2299
  52. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +534 -0
  53. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  54. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  55. package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
  56. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  57. package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
  58. package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
  59. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
  60. package/dist/resources/extensions/gsd/auto-dispatch.js +56 -63
  61. package/dist/resources/extensions/gsd/auto-model-selection.js +44 -13
  62. package/dist/resources/extensions/gsd/auto-post-unit.js +47 -17
  63. package/dist/resources/extensions/gsd/auto-prompts.js +161 -26
  64. package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
  65. package/dist/resources/extensions/gsd/auto-runtime-state.js +14 -0
  66. package/dist/resources/extensions/gsd/auto-start.js +59 -52
  67. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  68. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  69. package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
  70. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +14 -47
  71. package/dist/resources/extensions/gsd/auto-verification.js +30 -37
  72. package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
  73. package/dist/resources/extensions/gsd/auto-worktree.js +68 -370
  74. package/dist/resources/extensions/gsd/auto.js +71 -29
  75. package/dist/resources/extensions/gsd/blocked-models.js +28 -0
  76. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
  77. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
  78. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +74 -50
  79. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  80. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  81. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
  82. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +316 -161
  83. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +365 -58
  84. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  85. package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
  86. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  87. package/dist/resources/extensions/gsd/captures.js +5 -15
  88. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
  89. package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
  90. package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
  91. package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
  92. package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
  93. package/dist/resources/extensions/gsd/commands/context.js +16 -2
  94. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  95. package/dist/resources/extensions/gsd/commands-handlers.js +66 -3
  96. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  97. package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
  98. package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
  99. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  100. package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
  101. package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
  102. package/dist/resources/extensions/gsd/consent-question.js +353 -0
  103. package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
  104. package/dist/resources/extensions/gsd/constants.js +0 -2
  105. package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
  106. package/dist/resources/extensions/gsd/db/engine.js +757 -0
  107. package/dist/resources/extensions/gsd/db/queries.js +428 -0
  108. package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
  109. package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
  110. package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
  111. package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
  112. package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
  113. package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
  114. package/dist/resources/extensions/gsd/db-workspace.js +103 -0
  115. package/dist/resources/extensions/gsd/db-writer.js +8 -17
  116. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  117. package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
  118. package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
  119. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  120. package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
  121. package/dist/resources/extensions/gsd/doctor-environment.js +261 -136
  122. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  123. package/dist/resources/extensions/gsd/doctor-git-checks.js +6 -21
  124. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
  125. package/dist/resources/extensions/gsd/doctor.js +16 -9
  126. package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
  127. package/dist/resources/extensions/gsd/error-classifier.js +10 -1
  128. package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
  129. package/dist/resources/extensions/gsd/files.js +33 -19
  130. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  131. package/dist/resources/extensions/gsd/git-service.js +1 -0
  132. package/dist/resources/extensions/gsd/gitignore.js +3 -0
  133. package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
  134. package/dist/resources/extensions/gsd/gsd-db.js +186 -2048
  135. package/dist/resources/extensions/gsd/guidance.js +158 -0
  136. package/dist/resources/extensions/gsd/guided-flow.js +174 -473
  137. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  138. package/dist/resources/extensions/gsd/health-widget.js +87 -28
  139. package/dist/resources/extensions/gsd/markdown-renderer.js +12 -1
  140. package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
  141. package/dist/resources/extensions/gsd/mcp-filter.js +4 -20
  142. package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
  143. package/dist/resources/extensions/gsd/md-importer.js +4 -3
  144. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
  145. package/dist/resources/extensions/gsd/memory-relations.js +1 -1
  146. package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
  147. package/dist/resources/extensions/gsd/migration-auto-check.js +27 -5
  148. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  149. package/dist/resources/extensions/gsd/milestone-closeout.js +97 -28
  150. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  151. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
  152. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  153. package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
  154. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  155. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  156. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
  157. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  158. package/dist/resources/extensions/gsd/model-router.js +3 -0
  159. package/dist/resources/extensions/gsd/notification-store.js +11 -4
  160. package/dist/resources/extensions/gsd/notifications.js +12 -7
  161. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  162. package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
  163. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
  164. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  165. package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
  166. package/dist/resources/extensions/gsd/paths.js +37 -24
  167. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  168. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  169. package/dist/resources/extensions/gsd/preferences-models.js +14 -48
  170. package/dist/resources/extensions/gsd/preferences.js +161 -29
  171. package/dist/resources/extensions/gsd/projection-flush.js +7 -0
  172. package/dist/resources/extensions/gsd/prompts/complete-slice.md +5 -4
  173. package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -2
  174. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  175. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  176. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  177. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  178. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  179. package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  180. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  181. package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  182. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
  183. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  184. package/dist/resources/extensions/gsd/prompts/run-uat.md +9 -5
  185. package/dist/resources/extensions/gsd/prompts/system.md +6 -3
  186. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  187. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  188. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  189. package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
  190. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  191. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  192. package/dist/resources/extensions/gsd/publication.js +87 -0
  193. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  194. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  195. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  196. package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
  197. package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
  198. package/dist/resources/extensions/gsd/roadmap-slices.js +33 -5
  199. package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
  200. package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
  201. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
  202. package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
  203. package/dist/resources/extensions/gsd/session-lock.js +1 -1
  204. package/dist/resources/extensions/gsd/skill-activation.js +3 -6
  205. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  206. package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
  207. package/dist/resources/extensions/gsd/state.js +24 -26
  208. package/dist/resources/extensions/gsd/status-guards.js +56 -8
  209. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  210. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  211. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  212. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  213. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  214. package/dist/resources/extensions/gsd/tool-contract.js +66 -11
  215. package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
  216. package/dist/resources/extensions/gsd/tool-surface-readiness.js +108 -0
  217. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  218. package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
  219. package/dist/resources/extensions/gsd/tools/complete-slice.js +46 -55
  220. package/dist/resources/extensions/gsd/tools/complete-task.js +65 -2
  221. package/dist/resources/extensions/gsd/tools/exec-tool.js +10 -8
  222. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  223. package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
  224. package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
  225. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +41 -2
  226. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
  227. package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
  228. package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
  229. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
  230. package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
  231. package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
  232. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
  233. package/dist/resources/extensions/gsd/uat-policy.js +57 -25
  234. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  235. package/dist/resources/extensions/gsd/undo.js +8 -7
  236. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  237. package/dist/resources/extensions/gsd/unit-context-composer.js +114 -21
  238. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  239. package/dist/resources/extensions/gsd/unit-registry.js +367 -0
  240. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  241. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
  242. package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
  243. package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
  244. package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
  245. package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
  246. package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
  247. package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
  248. package/dist/resources/extensions/gsd/workflow-events.js +6 -18
  249. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
  250. package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
  251. package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
  252. package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
  253. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  254. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  255. package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
  256. package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
  257. package/dist/resources/extensions/gsd/worktree-manager.js +52 -29
  258. package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
  259. package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
  260. package/dist/resources/extensions/gsd/worktree-root.js +28 -6
  261. package/dist/resources/extensions/gsd/worktree-safety.js +36 -31
  262. package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
  263. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  264. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  265. package/dist/resources/extensions/gsd/worktree.js +8 -1
  266. package/dist/resources/extensions/mcp-client/manager.js +6 -1
  267. package/dist/resources/extensions/search-the-web/native-search.js +5 -3
  268. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  269. package/dist/resources/extensions/shared/gsd-browser-cli.js +116 -6
  270. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  271. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  272. package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
  273. package/dist/resources/shared/package-manager-detection.js +1 -1
  274. package/dist/resources/shared/package.json +3 -0
  275. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  276. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  277. package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
  278. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  279. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  280. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  281. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  282. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  283. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  284. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  285. package/dist/runtime-checks.d.ts +10 -0
  286. package/dist/runtime-checks.js +27 -0
  287. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  288. package/dist/update-check.d.ts +2 -0
  289. package/dist/update-check.js +24 -1
  290. package/dist/update-cmd.js +40 -3
  291. package/dist/web/standalone/.next/BUILD_ID +1 -1
  292. package/dist/web/standalone/.next/app-path-routes-manifest.json +4 -4
  293. package/dist/web/standalone/.next/build-manifest.json +3 -3
  294. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  295. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  296. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  297. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  298. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  299. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  300. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  301. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  302. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  303. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  304. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  305. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  306. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  307. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  308. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  309. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  310. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  311. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  312. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  313. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  314. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  315. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  316. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  317. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  318. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  319. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  320. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  321. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  322. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  323. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  324. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  325. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  326. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  327. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  328. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  329. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  330. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  331. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  332. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  333. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  334. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  335. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  336. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  337. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  338. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  339. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  340. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  341. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  342. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  343. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  344. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  345. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  346. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  347. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  348. package/dist/web/standalone/.next/server/app/index.html +1 -1
  349. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  350. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  351. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  352. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  353. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  354. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  355. package/dist/web/standalone/.next/server/app-paths-manifest.json +4 -4
  356. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  357. package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
  358. package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
  359. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  360. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  361. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  362. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  363. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  364. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  365. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  366. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  367. package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
  368. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  369. package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +10 -0
  370. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
  371. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-f0285ce91d4ec9ef.js} +1 -1
  372. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  373. package/dist/web/standalone/package.json +1 -1
  374. package/dist/web-mode.d.ts +2 -0
  375. package/dist/web-mode.js +20 -8
  376. package/dist/worktree-cli.js +3 -6
  377. package/dist/worktree-status-banner.js +7 -11
  378. package/package.json +4 -3
  379. package/packages/cloud-mcp-gateway/package.json +2 -2
  380. package/packages/contracts/dist/rpc.d.ts +1 -0
  381. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  382. package/packages/contracts/dist/rpc.js.map +1 -1
  383. package/packages/contracts/dist/workflow.d.ts +4 -0
  384. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  385. package/packages/contracts/dist/workflow.js.map +1 -1
  386. package/packages/contracts/package.json +1 -1
  387. package/packages/daemon/package.json +4 -4
  388. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  389. package/packages/gsd-agent-core/dist/sdk.js +6 -4
  390. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  391. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  392. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  393. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  394. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  395. package/packages/gsd-agent-core/package.json +5 -5
  396. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  397. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  398. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
  399. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  400. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +13 -0
  401. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  402. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +58 -6
  403. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  404. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +2 -0
  405. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  406. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +34 -5
  407. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  408. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  409. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +113 -40
  410. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  411. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  412. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +8 -1
  413. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  414. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  415. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +11 -1
  416. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  417. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  418. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
  419. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  420. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +1 -0
  421. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  422. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +12 -0
  423. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  424. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
  425. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
  426. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
  427. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
  428. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
  429. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
  430. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  431. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
  432. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  433. package/packages/gsd-agent-modes/package.json +7 -7
  434. package/packages/mcp-server/README.md +12 -3
  435. package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
  436. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
  437. package/packages/mcp-server/dist/cli-runner.js +137 -0
  438. package/packages/mcp-server/dist/cli-runner.js.map +1 -0
  439. package/packages/mcp-server/dist/cli.js +2 -50
  440. package/packages/mcp-server/dist/cli.js.map +1 -1
  441. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
  442. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
  443. package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
  444. package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
  445. package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
  446. package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
  447. package/packages/mcp-server/dist/pid-registry.js +452 -0
  448. package/packages/mcp-server/dist/pid-registry.js.map +1 -0
  449. package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
  450. package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
  451. package/packages/mcp-server/dist/probe-mode.js +10 -0
  452. package/packages/mcp-server/dist/probe-mode.js.map +1 -0
  453. package/packages/mcp-server/dist/server.d.ts +10 -0
  454. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  455. package/packages/mcp-server/dist/server.js +12 -0
  456. package/packages/mcp-server/dist/server.js.map +1 -1
  457. package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
  458. package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
  459. package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
  460. package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
  461. package/packages/mcp-server/dist/workflow-tools.d.ts +49 -0
  462. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  463. package/packages/mcp-server/dist/workflow-tools.js +209 -103
  464. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  465. package/packages/mcp-server/package.json +5 -4
  466. package/packages/native/package.json +1 -1
  467. package/packages/pi-agent-core/dist/agent-loop.js +43 -2
  468. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  469. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
  470. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  471. package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
  472. package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  473. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  474. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  475. package/packages/pi-agent-core/dist/index.js +3 -0
  476. package/packages/pi-agent-core/dist/index.js.map +1 -1
  477. package/packages/pi-agent-core/package.json +1 -1
  478. package/packages/pi-ai/README.md +1 -0
  479. package/packages/pi-ai/dist/index.d.ts +2 -0
  480. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  481. package/packages/pi-ai/dist/index.js +2 -0
  482. package/packages/pi-ai/dist/index.js.map +1 -1
  483. package/packages/pi-ai/dist/models.generated.d.ts +183 -76
  484. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  485. package/packages/pi-ai/dist/models.generated.js +193 -112
  486. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  487. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  488. package/packages/pi-ai/dist/providers/anthropic.js +12 -7
  489. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  490. package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
  491. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  492. package/packages/pi-ai/dist/providers/google-shared.js +12 -3
  493. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  494. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  495. package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
  496. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  497. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
  498. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
  499. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
  500. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
  501. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  502. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
  503. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  504. package/packages/pi-ai/package.json +3 -2
  505. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
  506. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  507. package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
  508. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  509. package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
  510. package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
  511. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  512. package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
  513. package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
  514. package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
  515. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  516. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  517. package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
  518. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  519. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
  520. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  521. package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
  522. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  523. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  524. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  525. package/packages/pi-coding-agent/dist/index.js +1 -1
  526. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  527. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  528. package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
  529. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  530. package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
  531. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  532. package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
  533. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  534. package/packages/pi-coding-agent/package.json +7 -7
  535. package/packages/pi-tui/dist/components/input.js +1 -1
  536. package/packages/pi-tui/dist/components/input.js.map +1 -1
  537. package/packages/pi-tui/dist/index.d.ts +1 -1
  538. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  539. package/packages/pi-tui/dist/index.js +1 -1
  540. package/packages/pi-tui/dist/index.js.map +1 -1
  541. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  542. package/packages/pi-tui/dist/keys.js +39 -30
  543. package/packages/pi-tui/dist/keys.js.map +1 -1
  544. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  545. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  546. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  547. package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
  548. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  549. package/packages/pi-tui/dist/terminal-image.js +54 -2
  550. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  551. package/packages/pi-tui/dist/tui.d.ts +8 -0
  552. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  553. package/packages/pi-tui/dist/tui.js +72 -18
  554. package/packages/pi-tui/dist/tui.js.map +1 -1
  555. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  556. package/packages/pi-tui/dist/utils.js +110 -36
  557. package/packages/pi-tui/dist/utils.js.map +1 -1
  558. package/packages/pi-tui/package.json +2 -2
  559. package/packages/rpc-client/package.json +2 -2
  560. package/pkg/dist/theme/theme.d.ts.map +1 -1
  561. package/pkg/dist/theme/theme.js +45 -17
  562. package/pkg/dist/theme/theme.js.map +1 -1
  563. package/pkg/package.json +1 -1
  564. package/src/resources/GSD-WORKFLOW.md +5 -4
  565. package/src/resources/extensions/ask-user-questions.ts +94 -26
  566. package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
  567. package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
  568. package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
  569. package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
  570. package/src/resources/extensions/async-jobs/index.ts +79 -0
  571. package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
  572. package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
  573. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
  574. package/src/resources/extensions/bg-shell/overlay.ts +9 -5
  575. package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
  576. package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
  577. package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
  578. package/src/resources/extensions/bg-shell/utilities.ts +5 -2
  579. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  580. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  581. package/src/resources/extensions/browser-tools/index.ts +71 -13
  582. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  583. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
  584. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  585. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  586. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +651 -483
  587. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +940 -7
  588. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +324 -0
  589. package/src/resources/extensions/github-sync/templates.ts +3 -3
  590. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  591. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  592. package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
  593. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  594. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
  595. package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
  596. package/src/resources/extensions/gsd/auto/dispatch-history.ts +168 -0
  597. package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
  598. package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
  599. package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
  600. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
  601. package/src/resources/extensions/gsd/auto/loop.ts +89 -61
  602. package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
  603. package/src/resources/extensions/gsd/auto/orchestrator.ts +350 -81
  604. package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
  605. package/src/resources/extensions/gsd/auto/phases.ts +58 -2981
  606. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +704 -0
  607. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  608. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  609. package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
  610. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  611. package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
  612. package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
  613. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
  614. package/src/resources/extensions/gsd/auto-dispatch.ts +68 -68
  615. package/src/resources/extensions/gsd/auto-model-selection.ts +49 -12
  616. package/src/resources/extensions/gsd/auto-post-unit.ts +56 -16
  617. package/src/resources/extensions/gsd/auto-prompts.ts +225 -44
  618. package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
  619. package/src/resources/extensions/gsd/auto-runtime-state.ts +26 -0
  620. package/src/resources/extensions/gsd/auto-start.ts +65 -53
  621. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  622. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  623. package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
  624. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +21 -49
  625. package/src/resources/extensions/gsd/auto-verification.ts +33 -36
  626. package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
  627. package/src/resources/extensions/gsd/auto-worktree.ts +83 -386
  628. package/src/resources/extensions/gsd/auto.ts +99 -34
  629. package/src/resources/extensions/gsd/blocked-models.ts +49 -0
  630. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
  631. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
  632. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +93 -49
  633. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  634. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  635. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
  636. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +375 -177
  637. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +452 -58
  638. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  639. package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
  640. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  641. package/src/resources/extensions/gsd/captures.ts +5 -16
  642. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
  643. package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
  644. package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
  645. package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
  646. package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
  647. package/src/resources/extensions/gsd/commands/context.ts +16 -2
  648. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  649. package/src/resources/extensions/gsd/commands-handlers.ts +64 -3
  650. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  651. package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
  652. package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
  653. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  654. package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
  655. package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
  656. package/src/resources/extensions/gsd/consent-question.ts +431 -0
  657. package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
  658. package/src/resources/extensions/gsd/constants.ts +0 -3
  659. package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
  660. package/src/resources/extensions/gsd/db/engine.ts +811 -0
  661. package/src/resources/extensions/gsd/db/queries.ts +519 -0
  662. package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
  663. package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
  664. package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
  665. package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
  666. package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
  667. package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
  668. package/src/resources/extensions/gsd/db-workspace.ts +170 -0
  669. package/src/resources/extensions/gsd/db-writer.ts +11 -19
  670. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  671. package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
  672. package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
  673. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  674. package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
  675. package/src/resources/extensions/gsd/doctor-environment.ts +272 -155
  676. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  677. package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -22
  678. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
  679. package/src/resources/extensions/gsd/doctor.ts +15 -5
  680. package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
  681. package/src/resources/extensions/gsd/error-classifier.ts +12 -1
  682. package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
  683. package/src/resources/extensions/gsd/files.ts +33 -12
  684. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  685. package/src/resources/extensions/gsd/git-service.ts +1 -0
  686. package/src/resources/extensions/gsd/gitignore.ts +3 -0
  687. package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
  688. package/src/resources/extensions/gsd/gsd-db.ts +190 -2375
  689. package/src/resources/extensions/gsd/guidance.ts +217 -0
  690. package/src/resources/extensions/gsd/guided-flow.ts +240 -585
  691. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  692. package/src/resources/extensions/gsd/health-widget.ts +91 -27
  693. package/src/resources/extensions/gsd/markdown-renderer.ts +13 -1
  694. package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
  695. package/src/resources/extensions/gsd/mcp-filter.ts +4 -24
  696. package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
  697. package/src/resources/extensions/gsd/md-importer.ts +3 -3
  698. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
  699. package/src/resources/extensions/gsd/memory-relations.ts +1 -1
  700. package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
  701. package/src/resources/extensions/gsd/migration-auto-check.ts +30 -5
  702. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  703. package/src/resources/extensions/gsd/milestone-closeout.ts +121 -28
  704. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  705. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
  706. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  707. package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
  708. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  709. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  710. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
  711. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  712. package/src/resources/extensions/gsd/model-router.ts +3 -0
  713. package/src/resources/extensions/gsd/notification-store.ts +26 -3
  714. package/src/resources/extensions/gsd/notifications.ts +13 -6
  715. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  716. package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
  717. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
  718. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  719. package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
  720. package/src/resources/extensions/gsd/paths.ts +42 -22
  721. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  722. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  723. package/src/resources/extensions/gsd/preferences-models.ts +12 -47
  724. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  725. package/src/resources/extensions/gsd/preferences.ts +191 -28
  726. package/src/resources/extensions/gsd/projection-flush.ts +20 -0
  727. package/src/resources/extensions/gsd/prompts/complete-slice.md +5 -4
  728. package/src/resources/extensions/gsd/prompts/execute-task.md +5 -2
  729. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  730. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  731. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  732. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  733. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  734. package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  735. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  736. package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  737. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
  738. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  739. package/src/resources/extensions/gsd/prompts/run-uat.md +9 -5
  740. package/src/resources/extensions/gsd/prompts/system.md +6 -3
  741. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  742. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  743. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  744. package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
  745. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  746. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  747. package/src/resources/extensions/gsd/publication.ts +122 -0
  748. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  749. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  750. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  751. package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
  752. package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
  753. package/src/resources/extensions/gsd/roadmap-slices.ts +36 -5
  754. package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
  755. package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
  756. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
  757. package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
  758. package/src/resources/extensions/gsd/session-lock.ts +1 -1
  759. package/src/resources/extensions/gsd/skill-activation.ts +3 -6
  760. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  761. package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
  762. package/src/resources/extensions/gsd/state.ts +31 -27
  763. package/src/resources/extensions/gsd/status-guards.ts +59 -8
  764. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  765. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  766. package/src/resources/extensions/gsd/templates/project.md +1 -0
  767. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  768. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  769. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  770. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
  771. package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
  772. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
  773. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +649 -26
  774. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  775. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
  776. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +97 -1
  777. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +395 -30
  778. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
  779. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +80 -2
  780. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
  781. package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
  782. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
  783. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  784. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
  785. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
  786. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
  787. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
  788. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
  789. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  790. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  791. package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
  792. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  793. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  794. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
  795. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
  796. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  797. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +46 -8
  798. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
  799. package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
  800. package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
  801. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
  802. package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
  803. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
  804. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +36 -0
  805. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
  806. package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
  807. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
  808. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +328 -0
  809. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
  810. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
  811. package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
  812. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  813. package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
  814. package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
  815. package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
  816. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
  817. package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
  818. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
  819. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
  820. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  821. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
  822. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
  823. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  824. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  825. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  826. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +120 -0
  827. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
  828. package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
  829. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
  830. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +58 -15
  831. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +89 -59
  832. package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
  833. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  834. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  835. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
  836. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
  837. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
  838. package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
  839. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
  840. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  841. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
  842. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  843. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +120 -4
  844. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  845. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  846. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  847. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
  848. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +92 -0
  849. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
  850. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  851. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  852. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
  853. package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
  854. package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
  855. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
  856. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
  857. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
  858. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +143 -0
  859. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
  860. package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
  861. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
  862. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
  863. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  864. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
  865. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
  866. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  867. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  868. package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
  869. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +56 -2
  870. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
  871. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
  872. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +11 -4
  873. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  874. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  875. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  876. package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
  877. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +342 -1
  878. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
  879. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  880. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
  881. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +51 -2
  882. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
  883. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
  884. package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
  885. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +300 -41
  886. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
  887. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  888. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +9 -4
  889. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
  890. package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
  891. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  892. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  893. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
  894. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
  895. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  896. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  897. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  898. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +329 -0
  899. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
  900. package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
  901. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
  902. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  903. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +114 -2
  904. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  905. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
  906. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  907. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  908. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
  909. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
  910. package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
  911. package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
  912. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +193 -13
  913. package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
  914. package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
  915. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
  916. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
  917. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
  918. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
  919. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
  920. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +43 -1
  921. package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
  922. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  923. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  924. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
  925. package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
  926. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +75 -1
  927. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
  928. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +24 -2
  929. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  930. package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
  931. package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
  932. package/src/resources/extensions/gsd/tests/write-gate.test.ts +188 -1
  933. package/src/resources/extensions/gsd/tool-contract.ts +124 -11
  934. package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
  935. package/src/resources/extensions/gsd/tool-surface-readiness.ts +183 -0
  936. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  937. package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
  938. package/src/resources/extensions/gsd/tools/complete-slice.ts +45 -70
  939. package/src/resources/extensions/gsd/tools/complete-task.ts +90 -2
  940. package/src/resources/extensions/gsd/tools/exec-tool.ts +9 -8
  941. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  942. package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
  943. package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
  944. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +45 -2
  945. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
  946. package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
  947. package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
  948. package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
  949. package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
  950. package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
  951. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
  952. package/src/resources/extensions/gsd/uat-policy.ts +80 -25
  953. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  954. package/src/resources/extensions/gsd/undo.ts +9 -8
  955. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  956. package/src/resources/extensions/gsd/unit-context-composer.ts +196 -21
  957. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  958. package/src/resources/extensions/gsd/unit-registry.ts +442 -0
  959. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  960. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
  961. package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
  962. package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
  963. package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
  964. package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
  965. package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
  966. package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
  967. package/src/resources/extensions/gsd/workflow-events.ts +12 -20
  968. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
  969. package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
  970. package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
  971. package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
  972. package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
  973. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  974. package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
  975. package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -25
  976. package/src/resources/extensions/gsd/worktree-manager.ts +53 -29
  977. package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
  978. package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
  979. package/src/resources/extensions/gsd/worktree-root.ts +29 -6
  980. package/src/resources/extensions/gsd/worktree-safety.ts +49 -44
  981. package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
  982. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  983. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  984. package/src/resources/extensions/gsd/worktree.ts +7 -1
  985. package/src/resources/extensions/mcp-client/manager.ts +7 -1
  986. package/src/resources/extensions/search-the-web/native-search.ts +5 -3
  987. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  988. package/src/resources/extensions/shared/gsd-browser-cli.ts +141 -6
  989. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  990. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  991. package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
  992. package/src/resources/shared/package-manager-detection.ts +1 -1
  993. package/src/resources/shared/package.json +3 -0
  994. package/src/resources/skills/create-skill/SKILL.md +3 -0
  995. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  996. package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
  997. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  998. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  999. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  1000. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  1001. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  1002. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  1003. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  1004. package/dist/resources/extensions/gsd/user-input-boundary.js +0 -195
  1005. package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
  1006. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  1007. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  1008. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  1009. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  1010. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  1011. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  1012. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -88
  1013. package/src/resources/extensions/gsd/user-input-boundary.ts +0 -198
  1014. package/src/resources/skills/gsd-browser/SKILL.md +0 -41
  1015. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → pZbHa49xI-knmKlphIRq0}/_buildManifest.js +0 -0
  1016. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → pZbHa49xI-knmKlphIRq0}/_ssgManifest.js +0 -0
@@ -11,6 +11,11 @@ import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync, realpathSync
11
11
  import { join } from "node:path";
12
12
  import { tmpdir } from "node:os";
13
13
  import { execSync } from "node:child_process";
14
+ import {
15
+ commitAll,
16
+ createGsdIntegrationProject,
17
+ writeGsdMilestoneContext,
18
+ } from "./gsd-integration-fixture.ts";
14
19
 
15
20
  import {
16
21
  createAutoWorktree,
@@ -32,17 +37,12 @@ function run(command: string, cwd: string): string {
32
37
  }
33
38
 
34
39
  function createTempRepo(): string {
35
- const dir = realpathSync(mkdtempSync(join(tmpdir(), "auto-wt-test-")));
36
- run("git init", dir);
37
- run("git config user.email test@test.com", dir);
38
- run("git config user.name Test", dir);
39
- // Create initial commit on main
40
- writeFileSync(join(dir, "README.md"), "# test\n");
41
- run("git add .", dir);
42
- run("git commit -m init", dir);
43
- // Ensure branch is called main
44
- run("git branch -M main", dir);
45
- return dir;
40
+ return createGsdIntegrationProject("auto-wt-test-").root;
41
+ }
42
+
43
+ function commitMilestoneContext(repo: string, milestoneId: string): void {
44
+ writeGsdMilestoneContext(repo, milestoneId);
45
+ commitAll(repo, "add milestone");
46
46
  }
47
47
 
48
48
  describe("auto-worktree lifecycle", () => {
@@ -59,13 +59,7 @@ describe("auto-worktree lifecycle", () => {
59
59
 
60
60
  test("create → detect → teardown", () => {
61
61
  tempDir = createTempRepo();
62
-
63
- // Create .gsd/milestones/M003 with a dummy file (simulates planning artifacts)
64
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
65
- mkdirSync(msDir, { recursive: true });
66
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
67
- run("git add .", tempDir);
68
- run("git commit -m \"add milestone\"", tempDir);
62
+ commitMilestoneContext(tempDir, "M003");
69
63
 
70
64
  // ─── createAutoWorktree ──────────────────────────────────────────
71
65
  const wtPath = createAutoWorktree(tempDir, "M003");
@@ -112,11 +106,7 @@ describe("auto-worktree lifecycle", () => {
112
106
 
113
107
  test("re-entry: create again, exit without teardown, re-enter", () => {
114
108
  tempDir = createTempRepo();
115
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
116
- mkdirSync(msDir, { recursive: true });
117
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
118
- run("git add .", tempDir);
119
- run("git commit -m \"add milestone\"", tempDir);
109
+ commitMilestoneContext(tempDir, "M003");
120
110
 
121
111
  const wtPath2 = createAutoWorktree(tempDir, "M003");
122
112
  assert.ok(existsSync(wtPath2), "worktree re-created");
@@ -144,6 +134,21 @@ describe("auto-worktree lifecycle", () => {
144
134
  teardownAutoWorktree(tempDir, "M003");
145
135
  });
146
136
 
137
+ test("isInAutoWorktree returns false when ambient cwd was deleted", (t) => {
138
+ const cwd = t.mock.method(process, "cwd", () => {
139
+ const err = new Error("process.cwd failed") as NodeJS.ErrnoException;
140
+ err.code = "ENOENT";
141
+ err.syscall = "uv_cwd";
142
+ throw err;
143
+ });
144
+
145
+ try {
146
+ assert.equal(isInAutoWorktree("/repo"), false);
147
+ } finally {
148
+ cwd.mock.restore();
149
+ }
150
+ });
151
+
147
152
  test("symlink-resolved auto worktree is detected after module state reset", () => {
148
153
  tempDir = createTempRepo();
149
154
  const savedGsdHome = process.env.GSD_HOME;
@@ -157,7 +162,7 @@ describe("auto-worktree lifecycle", () => {
157
162
  try {
158
163
  const wtPath = createAutoWorktree(tempDir, "M001");
159
164
  const realWtPath = realpathSync(wtPath);
160
- assert.ok(realWtPath.startsWith(storage), "git registered the symlink-resolved worktree path");
165
+ assert.equal(realWtPath, join(tempDir, ".gsd-worktrees", "M001"), "worktree uses canonical path under project root, not through the .gsd symlink");
161
166
 
162
167
  _resetAutoWorktreeOriginalBaseForTests();
163
168
  process.chdir(realWtPath);
@@ -192,13 +197,62 @@ describe("auto-worktree lifecycle", () => {
192
197
  }
193
198
  });
194
199
 
200
+ test("legacy symlink-resolved auto worktree is detected after module state reset", () => {
201
+ tempDir = createTempRepo();
202
+ const savedGsdHome = process.env.GSD_HOME;
203
+ const fakeHome = realpathSync(mkdtempSync(join(tmpdir(), "auto-wt-home-legacy-")));
204
+ const storage = join(fakeHome, ".gsd", "projects", "abc123def456");
205
+ mkdirSync(join(storage, "milestones", "M001"), { recursive: true });
206
+ writeFileSync(join(storage, "milestones", "M001", "CONTEXT.md"), "# M001\n");
207
+ symlinkSync(storage, join(tempDir, ".gsd"));
208
+ process.env.GSD_HOME = join(fakeHome, ".gsd");
209
+
210
+ try {
211
+ // Worktrees created by older versions live at .gsd/worktrees/<MID>;
212
+ // git resolves the symlink and registers them under external state.
213
+ // Detection must keep working for them — canonical .gsd-worktrees/
214
+ // creation never crosses the symlink, so create the legacy worktree
215
+ // explicitly.
216
+ const wtPath = join(tempDir, ".gsd", "worktrees", "M001");
217
+ run(`git worktree add -b milestone/M001 "${wtPath}"`, tempDir);
218
+ const realWtPath = realpathSync(wtPath);
219
+ assert.ok(realWtPath.startsWith(storage), "git registered the symlink-resolved worktree path");
220
+
221
+ _resetAutoWorktreeOriginalBaseForTests();
222
+ process.chdir(realWtPath);
223
+
224
+ assert.ok(isInAutoWorktree(tempDir), "structural detection works without module originalBase");
225
+ const resolved = getAutoWorktreePath(realWtPath, "M001");
226
+ assert.ok(resolved, "existing legacy worktree is found when basePath is the worktree path");
227
+ assert.equal(realpathSync(resolved!), realWtPath);
228
+
229
+ enterAutoWorktree(tempDir, "M001");
230
+ process.chdir(realWtPath);
231
+ assert.deepStrictEqual(
232
+ getActiveAutoWorktreeContext(),
233
+ {
234
+ originalBase: tempDir,
235
+ worktreeName: "M001",
236
+ branch: "milestone/M001",
237
+ },
238
+ "active context is detected from a symlink-resolved legacy worktree cwd",
239
+ );
240
+ } finally {
241
+ process.chdir(tempDir);
242
+ try {
243
+ teardownAutoWorktree(tempDir, "M001");
244
+ } catch {
245
+ // Best-effort cleanup for partially-created temp worktrees.
246
+ }
247
+ if (savedGsdHome === undefined) delete process.env.GSD_HOME;
248
+ else process.env.GSD_HOME = savedGsdHome;
249
+ rmSync(fakeHome, { recursive: true, force: true });
250
+ }
251
+ });
252
+
195
253
  test("coexistence with manual worktree", async () => {
196
254
  tempDir = createTempRepo();
197
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
198
- mkdirSync(msDir, { recursive: true });
199
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
200
- run("git add .", tempDir);
201
- run("git commit -m \"add milestone\"", tempDir);
255
+ commitMilestoneContext(tempDir, "M003");
202
256
 
203
257
  // Import createWorktree directly for manual worktree
204
258
  const { createWorktree } = await import("../../worktree-manager.ts");
@@ -221,11 +275,7 @@ describe("auto-worktree lifecycle", () => {
221
275
 
222
276
  test("split-brain prevention: originalBase cleared after teardown", () => {
223
277
  tempDir = createTempRepo();
224
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
225
- mkdirSync(msDir, { recursive: true });
226
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
227
- run("git add .", tempDir);
228
- run("git commit -m \"add milestone\"", tempDir);
278
+ commitMilestoneContext(tempDir, "M003");
229
279
 
230
280
  createAutoWorktree(tempDir, "M003");
231
281
  teardownAutoWorktree(tempDir, "M003");
@@ -235,11 +285,7 @@ describe("auto-worktree lifecycle", () => {
235
285
 
236
286
  test("#1526: getMainBranch returns milestone/<MID> in auto-worktree", async () => {
237
287
  tempDir = createTempRepo();
238
- const msDir = join(tempDir, ".gsd", "milestones", "M005");
239
- mkdirSync(msDir, { recursive: true });
240
- writeFileSync(join(msDir, "CONTEXT.md"), "# M005 Context\n");
241
- run("git add .", tempDir);
242
- run("git commit -m \"add milestone\"", tempDir);
288
+ commitMilestoneContext(tempDir, "M005");
243
289
 
244
290
  const { GitServiceImpl } = await import("../../git-service.ts");
245
291
 
@@ -259,11 +305,7 @@ describe("auto-worktree lifecycle", () => {
259
305
 
260
306
  test("#1713: stale worktree directory without .git file", async () => {
261
307
  tempDir = createTempRepo();
262
- const msDir = join(tempDir, ".gsd", "milestones", "M010");
263
- mkdirSync(msDir, { recursive: true });
264
- writeFileSync(join(msDir, "CONTEXT.md"), "# M010 Context\n");
265
- run("git add .", tempDir);
266
- run("git commit -m \"add milestone\"", tempDir);
308
+ commitMilestoneContext(tempDir, "M010");
267
309
 
268
310
  // Simulate a crash leaving a stale directory with no .git file.
269
311
  const { worktreePath } = await import("../../worktree-manager.ts");
@@ -284,11 +326,7 @@ describe("auto-worktree lifecycle", () => {
284
326
 
285
327
  test("#778: re-attach does not reconcile plan checkboxes into a worktree-local .gsd projection", async () => {
286
328
  tempDir = createTempRepo();
287
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
288
- mkdirSync(msDir, { recursive: true });
289
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
290
- run("git add .", tempDir);
291
- run("git commit -m \"add milestone\"", tempDir);
329
+ commitMilestoneContext(tempDir, "M003");
292
330
 
293
331
  const planRelPath = join(".gsd", "milestones", "M004", "slices", "S01", "S01-PLAN.md");
294
332
  const planDir = join(tempDir, ".gsd", "milestones", "M004", "slices", "S01");
@@ -348,11 +386,7 @@ describe("auto-worktree lifecycle", () => {
348
386
 
349
387
  test("#2791: mcp.json is not copied into worktree on creation after copyPlanningArtifacts removal", () => {
350
388
  tempDir = createTempRepo();
351
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
352
- mkdirSync(msDir, { recursive: true });
353
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
354
- run("git add .", tempDir);
355
- run("git commit -m \"add milestone\"", tempDir);
389
+ commitMilestoneContext(tempDir, "M003");
356
390
 
357
391
  // Create mcp.json in .gsd/ AFTER the commit (untracked, like real usage).
358
392
  // Phase C removed copyPlanningArtifacts, so creation should not seed a
@@ -377,11 +411,7 @@ describe("auto-worktree lifecycle", () => {
377
411
 
378
412
  test("#2791: mcp.json synced via syncGsdStateToWorktree (ROOT_STATE_FILES)", () => {
379
413
  tempDir = createTempRepo();
380
- const msDir = join(tempDir, ".gsd", "milestones", "M003");
381
- mkdirSync(msDir, { recursive: true });
382
- writeFileSync(join(msDir, "CONTEXT.md"), "# M003 Context\n");
383
- run("git add .", tempDir);
384
- run("git commit -m \"add milestone\"", tempDir);
414
+ commitMilestoneContext(tempDir, "M003");
385
415
 
386
416
  // Create worktree first (no mcp.json yet)
387
417
  const wtPath = createAutoWorktree(tempDir, "M003");
@@ -0,0 +1,104 @@
1
+ // Project/App: gsd-pi
2
+ // File Purpose: Verify the non-blocking runEnvironmentChecksAsync is behaviourally
3
+ // identical to the synchronous runEnvironmentChecks (the health-widget render
4
+ // path was moved onto the async variant for performance), and that the single-
5
+ // scan checkPortConflicts still detects a real in-use port.
6
+
7
+ import test, { type TestContext } from "node:test";
8
+ import assert from "node:assert/strict";
9
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
10
+ import { join, dirname } from "node:path";
11
+ import { tmpdir } from "node:os";
12
+ import { createServer } from "node:net";
13
+
14
+ import {
15
+ runEnvironmentChecks,
16
+ runEnvironmentChecksAsync,
17
+ type EnvironmentCheckResult,
18
+ } from "../../doctor-environment.ts";
19
+
20
+ function makeProject(t: TestContext, files: Record<string, string>): string {
21
+ const dir = mkdtempSync(join(tmpdir(), "gsd-env-async-"));
22
+ t.after(() => {
23
+ try {
24
+ rmSync(dir, { recursive: true, force: true });
25
+ } catch {
26
+ /* ignore */
27
+ }
28
+ });
29
+ for (const [name, content] of Object.entries(files)) {
30
+ const filePath = join(dir, name);
31
+ mkdirSync(dirname(filePath), { recursive: true });
32
+ writeFileSync(filePath, content);
33
+ }
34
+ return dir;
35
+ }
36
+
37
+ // Stable, order-independent signature of a check-result set for comparison.
38
+ function normalize(results: EnvironmentCheckResult[]): string[] {
39
+ return results.map((r) => `${r.name}|${r.status}|${r.message}|${r.detail ?? ""}`).sort();
40
+ }
41
+
42
+ test("runEnvironmentChecksAsync returns the same results as runEnvironmentChecks", async (t) => {
43
+ const dir = makeProject(t, {
44
+ "package.json": JSON.stringify({
45
+ name: "fixture",
46
+ engines: { node: ">=18" },
47
+ scripts: { dev: "vite --port 4321", build: "tsc" },
48
+ devDependencies: { typescript: "^5.0.0" },
49
+ }),
50
+ ".env.example": "API_KEY=\n",
51
+ Dockerfile: "FROM node:20\n",
52
+ });
53
+ mkdirSync(join(dir, "node_modules"), { recursive: true });
54
+
55
+ const sync = runEnvironmentChecks(dir);
56
+ const asyncResults = await runEnvironmentChecksAsync(dir);
57
+
58
+ assert.deepEqual(
59
+ normalize(asyncResults),
60
+ normalize(sync),
61
+ "async checks must produce the identical result set as the sync checks",
62
+ );
63
+ // Sanity: the fixture is rich enough that the suite actually produced checks.
64
+ assert.ok(sync.length > 0, "expected the fixture to yield environment checks");
65
+ });
66
+
67
+ test("runEnvironmentChecksAsync matches sync on a bare directory (no package.json)", async (t) => {
68
+ const dir = makeProject(t, {});
69
+ const sync = runEnvironmentChecks(dir);
70
+ const asyncResults = await runEnvironmentChecksAsync(dir);
71
+ assert.deepEqual(normalize(asyncResults), normalize(sync));
72
+ });
73
+
74
+ test(
75
+ "single-scan port check detects a real in-use port, identically sync and async",
76
+ { skip: process.platform === "win32" ? "lsof-based port check is macOS/Linux only" : false },
77
+ async (t) => {
78
+ // Bind a real listener, then reference its port from package.json scripts so
79
+ // collectPortsToCheck picks it up. The server stays up across both check runs.
80
+ const server = createServer();
81
+ const port = await new Promise<number>((resolve, reject) => {
82
+ server.once("error", reject);
83
+ server.listen(0, "127.0.0.1", () => {
84
+ const addr = server.address();
85
+ resolve(typeof addr === "object" && addr ? addr.port : 0);
86
+ });
87
+ });
88
+ t.after(() => new Promise<void>((resolve) => server.close(() => resolve())));
89
+ assert.ok(port >= 1024 && port <= 65535, "ephemeral port should be in the checked range");
90
+
91
+ const dir = makeProject(t, {
92
+ "package.json": JSON.stringify({ name: "fixture", scripts: { dev: `serve --port ${port}` } }),
93
+ });
94
+
95
+ const syncConflicts = runEnvironmentChecks(dir).filter((r) => r.name === "port_conflict");
96
+ const asyncConflicts = (await runEnvironmentChecksAsync(dir)).filter((r) => r.name === "port_conflict");
97
+
98
+ // Equivalence holds regardless of whether lsof is present on the runner.
99
+ assert.deepEqual(normalize(asyncConflicts), normalize(syncConflicts), "sync and async must agree on port conflicts");
100
+ // On macOS/Linux lsof is standard, so the listener must be reported and named.
101
+ assert.equal(syncConflicts.length, 1, "expected exactly one port conflict for the in-use port");
102
+ assert.match(syncConflicts[0]!.message, new RegExp(`\\b${port}\\b`), "conflict message must name the in-use port");
103
+ },
104
+ );
@@ -293,11 +293,12 @@ describe('git-service', async () => {
293
293
 
294
294
  assert.deepStrictEqual(
295
295
  RUNTIME_EXCLUSION_PATHS.length,
296
- 16,
297
- "exactly 16 runtime exclusion paths"
296
+ 17,
297
+ "exactly 17 runtime exclusion paths"
298
298
  );
299
299
 
300
300
  const expectedPaths = [
301
+ ".gsd-worktrees/",
301
302
  ".gsd/activity/",
302
303
  ".gsd/audit/",
303
304
  ".gsd/forensics/",
@@ -0,0 +1,80 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+
6
+ export type GsdIntegrationProject = {
7
+ root: string;
8
+ };
9
+
10
+ export type CreateGsdIntegrationProjectOptions = {
11
+ prefix?: string;
12
+ initialFiles?: Record<string, string>;
13
+ };
14
+
15
+ export function projectRoot(project: GsdIntegrationProject | string): string {
16
+ return typeof project === "string" ? project : project.root;
17
+ }
18
+
19
+ export function git(project: GsdIntegrationProject | string, ...args: string[]): string {
20
+ return execFileSync("git", args, {
21
+ cwd: projectRoot(project),
22
+ encoding: "utf-8",
23
+ stdio: ["ignore", "pipe", "pipe"],
24
+ }).trim();
25
+ }
26
+
27
+ export function createGsdIntegrationProject(
28
+ options: CreateGsdIntegrationProjectOptions | string = {},
29
+ ): GsdIntegrationProject {
30
+ const resolvedOptions = typeof options === "string" ? { prefix: options } : options;
31
+ const prefix = resolvedOptions.prefix ?? "gsd-integration-";
32
+ const root = realpathSync(mkdtempSync(join(tmpdir(), prefix)));
33
+
34
+ git(root, "init");
35
+ git(root, "config", "user.email", "test@test.com");
36
+ git(root, "config", "user.name", "Test");
37
+ git(root, "config", "core.autocrlf", "false");
38
+
39
+ writeProjectFile(root, "README.md", "# test\n");
40
+ for (const [relativePath, content] of Object.entries(resolvedOptions.initialFiles ?? {})) {
41
+ writeProjectFile(root, relativePath, content);
42
+ }
43
+ git(root, "add", ".");
44
+ git(root, "commit", "-m", "init");
45
+ git(root, "branch", "-M", "main");
46
+
47
+ return { root };
48
+ }
49
+
50
+ export function writeProjectFile(
51
+ project: GsdIntegrationProject | string,
52
+ relativePath: string,
53
+ content: string,
54
+ ): string {
55
+ const filePath = join(projectRoot(project), relativePath);
56
+ mkdirSync(dirname(filePath), { recursive: true });
57
+ writeFileSync(filePath, content, "utf-8");
58
+ return filePath;
59
+ }
60
+
61
+ export function writeGsdMilestoneContext(
62
+ project: GsdIntegrationProject | string,
63
+ milestoneId: string,
64
+ content = `# ${milestoneId} Context\n`,
65
+ ): string {
66
+ return writeProjectFile(
67
+ project,
68
+ join(".gsd", "milestones", milestoneId, "CONTEXT.md"),
69
+ content,
70
+ );
71
+ }
72
+
73
+ export function commitAll(project: GsdIntegrationProject | string, message: string): void {
74
+ git(project, "add", ".");
75
+ git(project, "commit", "-m", message);
76
+ }
77
+
78
+ export function cleanupGsdIntegrationProject(project: GsdIntegrationProject | string): void {
79
+ rmSync(projectRoot(project), { recursive: true, force: true });
80
+ }
@@ -317,6 +317,24 @@ test('(k2) run-uat prompt references gsd_uat_result_save, not direct write', ()
317
317
  );
318
318
  });
319
319
 
320
+ test('(k3) run-uat prompt warns that .gsd glob misses can be symlink traversal artifacts', async () => {
321
+ const base = createFixtureBase();
322
+ try {
323
+ const uatRel = '.gsd/milestones/M001/slices/S01/S01-UAT.md';
324
+ const uatContent = makeUatContent('runtime-executable');
325
+ writeSliceFile(base, 'M001', 'S01', 'UAT', uatContent);
326
+
327
+ const prompt = await buildRunUatPrompt('M001', 'S01', uatRel, uatContent, base);
328
+
329
+ assert.match(prompt, /\.gsd\/\*\*/);
330
+ assert.match(prompt, /symlink-backed/i);
331
+ assert.match(prompt, /do not infer that the GSD harness is missing/i);
332
+ assert.match(prompt, /use the preloaded UAT context/i);
333
+ } finally {
334
+ cleanup(base);
335
+ }
336
+ });
337
+
320
338
  test('(l) dispatch preconditions via resolveSliceFile', () => {
321
339
  const base = createFixtureBase();
322
340
  const uatContent = makeUatContent('artifact-driven');
@@ -731,6 +749,75 @@ test('(u) run-uat prompt promotes artifact-driven browser specs to browser-execu
731
749
  }
732
750
  });
733
751
 
752
+ test('(w) run-uat prompt promotes browser-executable harness specs to runtime-executable (M006/S01)', async () => {
753
+ const base = createFixtureBase();
754
+ try {
755
+ const uatRel = '.gsd/milestones/M006/slices/S01/S01-UAT.md';
756
+ const uatContent = [
757
+ '# S01 UAT',
758
+ '',
759
+ '## UAT Type',
760
+ '- UAT mode: browser-executable',
761
+ '',
762
+ '## Preconditions',
763
+ '- Start the local app server with `npm run start`.',
764
+ '- Open the app at `http://127.0.0.1:4173`.',
765
+ '',
766
+ '## Evidence',
767
+ '- Fresh closeout verification command: `npm run test:uat`',
768
+ ].join('\n');
769
+ writeSliceFile(base, 'M006', 'S01', 'UAT', uatContent);
770
+
771
+ const prompt = await buildRunUatPrompt('M006', 'S01', uatRel, uatContent, base);
772
+
773
+ assert.match(prompt, /\*\*Detected UAT mode:\*\*\s*`runtime-executable`/);
774
+ assert.match(prompt, /uatType: "runtime-executable"/);
775
+ assert.match(prompt, /Runtime harness override/i);
776
+ assert.match(prompt, /Do \*\*not\*\* call `uat-service-start`/);
777
+ assert.doesNotMatch(prompt, /uatType: "browser-executable"/);
778
+ } finally {
779
+ cleanup(base);
780
+ }
781
+ });
782
+
783
+ test('(w2) run-uat prompt promotes harness from slice context when UAT only names test:server (M007/S01)', async () => {
784
+ const base = createFixtureBase();
785
+ try {
786
+ const uatRel = '.gsd/milestones/M007/slices/S01/S01-UAT.md';
787
+ const uatContent = [
788
+ '# S01 UAT',
789
+ '',
790
+ '## UAT Type',
791
+ '- UAT mode: browser-executable',
792
+ '',
793
+ '## Preconditions',
794
+ '- Start the dev/local verification server with `npm run test:server`.',
795
+ '- Open the app at the localhost URL printed by the server.',
796
+ ].join('\n');
797
+ writeSliceFile(base, 'M007', 'S01', 'UAT', uatContent);
798
+ writeSliceFile(
799
+ base,
800
+ 'M007',
801
+ 'S01',
802
+ 'SUMMARY',
803
+ [
804
+ '# S01 Summary',
805
+ '',
806
+ 'Verification: `npm run test:uat` passed with clean browser diagnostics.',
807
+ ].join('\n'),
808
+ );
809
+
810
+ const prompt = await buildRunUatPrompt('M007', 'S01', uatRel, uatContent, base);
811
+
812
+ assert.match(prompt, /\*\*Detected UAT mode:\*\*\s*`runtime-executable`/);
813
+ assert.match(prompt, /Runtime harness override/i);
814
+ assert.match(prompt, /npm run test:server/);
815
+ assert.match(prompt, /uatType: "runtime-executable"/);
816
+ } finally {
817
+ cleanup(base);
818
+ }
819
+ });
820
+
734
821
  test('(v) run-uat prompt keeps deferred browser work artifact-driven', async () => {
735
822
  const base = createFixtureBase();
736
823
  try {
@@ -748,4 +835,134 @@ test('(v) run-uat prompt keeps deferred browser work artifact-driven', async ()
748
835
  cleanup(base);
749
836
  }
750
837
  });
838
+
839
+ test('(x) checkNeedsRunUat returns runtime-executable when slice SUMMARY names a self-contained harness (M007/S01)', async () => {
840
+ // Regression: the dispatch gate must surface the same effective UAT mode
841
+ // that buildRunUatPrompt emits. When the UAT file alone declares
842
+ // `browser-executable` but the slice SUMMARY references `npm run test:uat`,
843
+ // the prompt promotes to `runtime-executable` — and so must the gate, or
844
+ // the auto-dispatch path requires browser tools / warms up the browser
845
+ // daemon (and may stop dispatch entirely) for a UAT that never touches
846
+ // the browser. See cursor[bot] review on PR #696.
847
+ const base = createFixtureBase();
848
+ try {
849
+ const roadmapDir = join(base, '.gsd', 'milestones', 'M007');
850
+ mkdirSync(roadmapDir, { recursive: true });
851
+ writeFileSync(
852
+ join(roadmapDir, 'M007-ROADMAP.md'),
853
+ [
854
+ '# M007: Test roadmap',
855
+ '',
856
+ '## Slices',
857
+ '',
858
+ '- [x] **S01: Only slice** `risk:low` `depends:[]`',
859
+ '',
860
+ '## Boundary Map',
861
+ '',
862
+ ].join('\n'),
863
+ );
864
+ writeSliceFile(
865
+ base,
866
+ 'M007',
867
+ 'S01',
868
+ 'UAT',
869
+ [
870
+ '# S01 UAT',
871
+ '',
872
+ '## UAT Type',
873
+ '- UAT mode: browser-executable',
874
+ '',
875
+ '## Preconditions',
876
+ '- Start the dev/local verification server with `npm run test:server`.',
877
+ ].join('\n'),
878
+ );
879
+ writeSliceFile(
880
+ base,
881
+ 'M007',
882
+ 'S01',
883
+ 'SUMMARY',
884
+ [
885
+ '# S01 Summary',
886
+ '',
887
+ 'Verification: `npm run test:uat` passed with clean browser diagnostics.',
888
+ ].join('\n'),
889
+ );
890
+
891
+ const state = {
892
+ activeMilestone: { id: 'M007', title: 'Test roadmap' },
893
+ activeSlice: null,
894
+ activeTask: null,
895
+ phase: 'validating-milestone',
896
+ recentDecisions: [],
897
+ blockers: [],
898
+ nextAction: 'Validate M007',
899
+ registry: [],
900
+ } as const;
901
+
902
+ const result = await checkNeedsRunUat(base, 'M007', state as any, { uat_dispatch: true } as any);
903
+ assert.deepStrictEqual(
904
+ result,
905
+ { sliceId: 'S01', uatType: 'runtime-executable' },
906
+ 'dispatch gate must mirror the prompt`s runtime-executable promotion so it does not require browser tools',
907
+ );
908
+ } finally {
909
+ cleanup(base);
910
+ }
911
+ });
912
+
913
+ test('(x2) checkNeedsRunUat leaves true browser-executable UAT unpromoted when no harness is referenced', async () => {
914
+ // Counter-test for (x): when the slice SUMMARY does NOT name a
915
+ // self-contained harness, the dispatch gate must still require browser
916
+ // tools for a genuinely browser-executable UAT.
917
+ const base = createFixtureBase();
918
+ try {
919
+ const roadmapDir = join(base, '.gsd', 'milestones', 'M008');
920
+ mkdirSync(roadmapDir, { recursive: true });
921
+ writeFileSync(
922
+ join(roadmapDir, 'M008-ROADMAP.md'),
923
+ [
924
+ '# M008: Test roadmap',
925
+ '',
926
+ '## Slices',
927
+ '',
928
+ '- [x] **S01: Only slice** `risk:low` `depends:[]`',
929
+ '',
930
+ '## Boundary Map',
931
+ '',
932
+ ].join('\n'),
933
+ );
934
+ writeSliceFile(base, 'M008', 'S01', 'UAT', makeBrowserObservableUatContent('browser-executable'));
935
+ writeSliceFile(
936
+ base,
937
+ 'M008',
938
+ 'S01',
939
+ 'SUMMARY',
940
+ [
941
+ '# S01 Summary',
942
+ '',
943
+ 'Verification: clicked through the UI and confirmed the search box filters todos.',
944
+ ].join('\n'),
945
+ );
946
+
947
+ const state = {
948
+ activeMilestone: { id: 'M008', title: 'Test roadmap' },
949
+ activeSlice: null,
950
+ activeTask: null,
951
+ phase: 'validating-milestone',
952
+ recentDecisions: [],
953
+ blockers: [],
954
+ nextAction: 'Validate M008',
955
+ registry: [],
956
+ } as const;
957
+
958
+ const result = await checkNeedsRunUat(base, 'M008', state as any, { uat_dispatch: true } as any);
959
+ assert.deepStrictEqual(
960
+ result,
961
+ { sliceId: 'S01', uatType: 'browser-executable' },
962
+ 'a true browser-executable UAT without a harness reference must keep its browser-executable mode',
963
+ );
964
+ } finally {
965
+ cleanup(base);
966
+ }
967
+ });
751
968
  });