@opengsd/gsd-pi 1.3.0 → 1.4.0-dev.c18009cd

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 (1157) hide show
  1. package/README.md +11 -11
  2. package/dist/cli.js +32 -4
  3. package/dist/headless-answers.js +1 -1
  4. package/dist/headless-context.js +0 -1
  5. package/dist/headless-ui.d.ts +1 -1
  6. package/dist/headless-ui.js +1 -1
  7. package/dist/headless.js +1 -1
  8. package/dist/help-text.js +29 -0
  9. package/dist/hermes-integration-install.d.ts +17 -0
  10. package/dist/hermes-integration-install.js +199 -0
  11. package/dist/jiti-workspace-aliases.d.ts +11 -2
  12. package/dist/jiti-workspace-aliases.js +19 -3
  13. package/dist/onboarding.js +11 -0
  14. package/dist/read-cli.d.ts +23 -0
  15. package/dist/read-cli.js +90 -0
  16. package/dist/resource-loader.d.ts +3 -3
  17. package/dist/resource-loader.js +4 -13
  18. package/dist/resources/.managed-resources-content-hash +1 -1
  19. package/dist/resources/GSD-WORKFLOW.md +35 -40
  20. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  21. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  22. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +202 -75
  23. package/dist/resources/extensions/cursor-cli/index.js +16 -0
  24. package/dist/resources/extensions/cursor-cli/models.js +63 -0
  25. package/dist/resources/extensions/cursor-cli/package.json +11 -0
  26. package/dist/resources/extensions/cursor-cli/readiness.js +128 -0
  27. package/dist/resources/extensions/cursor-cli/stream-adapter.js +353 -0
  28. package/dist/resources/extensions/google-cli/stream-adapter.js +82 -15
  29. package/dist/resources/extensions/gsd/activity-log.js +4 -1
  30. package/dist/resources/extensions/gsd/artifact-verification.js +443 -0
  31. package/dist/resources/extensions/gsd/auto/closeout.js +45 -42
  32. package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
  33. package/dist/resources/extensions/gsd/auto/finalize.js +9 -0
  34. package/dist/resources/extensions/gsd/auto/loop.js +67 -2
  35. package/dist/resources/extensions/gsd/auto/orchestrator.js +29 -11
  36. package/dist/resources/extensions/gsd/auto/run-unit.js +5 -2
  37. package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +3 -0
  38. package/dist/resources/extensions/gsd/auto/session.js +11 -0
  39. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
  40. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  41. package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
  42. package/dist/resources/extensions/gsd/auto-budget.js +5 -1
  43. package/dist/resources/extensions/gsd/auto-dispatch.js +77 -32
  44. package/dist/resources/extensions/gsd/auto-model-selection.js +43 -22
  45. package/dist/resources/extensions/gsd/auto-post-unit.js +28 -22
  46. package/dist/resources/extensions/gsd/auto-prompts.js +144 -45
  47. package/dist/resources/extensions/gsd/auto-recovery.js +14 -483
  48. package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -5
  49. package/dist/resources/extensions/gsd/auto-start.js +60 -33
  50. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +7 -3
  51. package/dist/resources/extensions/gsd/auto-verification.js +10 -4
  52. package/dist/resources/extensions/gsd/auto-worktree.js +155 -102
  53. package/dist/resources/extensions/gsd/auto.js +63 -18
  54. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +141 -65
  55. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
  56. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +14 -5
  57. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -0
  58. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  59. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -1
  60. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +227 -28
  61. package/dist/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.js +58 -9
  62. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  63. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +104 -10
  64. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  65. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +87 -17
  66. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +95 -5
  67. package/dist/resources/extensions/gsd/codebase-generator.js +160 -25
  68. package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
  69. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  70. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  71. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  72. package/dist/resources/extensions/gsd/commands/handlers/auto.js +1 -1
  73. package/dist/resources/extensions/gsd/commands/handlers/core.js +70 -4
  74. package/dist/resources/extensions/gsd/commands/handlers/ops.js +225 -1
  75. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  76. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  77. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  78. package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
  79. package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
  80. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +176 -13
  81. package/dist/resources/extensions/gsd/commands-usage.js +1 -1
  82. package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
  83. package/dist/resources/extensions/gsd/commands-worktree.js +23 -12
  84. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  85. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  86. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  87. package/dist/resources/extensions/gsd/config-overlay.js +2 -2
  88. package/dist/resources/extensions/gsd/consent-question.js +12 -0
  89. package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
  90. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  91. package/dist/resources/extensions/gsd/db/engine.js +31 -1
  92. package/dist/resources/extensions/gsd/db/queries.js +153 -0
  93. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  94. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
  95. package/dist/resources/extensions/gsd/db-workspace.js +68 -4
  96. package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
  97. package/dist/resources/extensions/gsd/discussion-handoff.js +17 -8
  98. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -4
  99. package/dist/resources/extensions/gsd/doctor-engine-checks.js +387 -7
  100. package/dist/resources/extensions/gsd/doctor-git-checks.js +25 -3
  101. package/dist/resources/extensions/gsd/doctor-providers.js +130 -18
  102. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +5 -15
  103. package/dist/resources/extensions/gsd/doctor.js +121 -10
  104. package/dist/resources/extensions/gsd/error-classifier.js +13 -1
  105. package/dist/resources/extensions/gsd/escalation.js +11 -4
  106. package/dist/resources/extensions/gsd/exec-sandbox.js +59 -13
  107. package/dist/resources/extensions/gsd/export-html.js +10 -3
  108. package/dist/resources/extensions/gsd/export.js +73 -0
  109. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  110. package/dist/resources/extensions/gsd/flat-phase-migration.js +272 -0
  111. package/dist/resources/extensions/gsd/forensics.js +4 -33
  112. package/dist/resources/extensions/gsd/git-service.js +72 -16
  113. package/dist/resources/extensions/gsd/gitignore.js +10 -3
  114. package/dist/resources/extensions/gsd/gsd-db.js +52 -0
  115. package/dist/resources/extensions/gsd/guidance.js +8 -7
  116. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  117. package/dist/resources/extensions/gsd/guided-flow.js +50 -7
  118. package/dist/resources/extensions/gsd/health-widget.js +55 -29
  119. package/dist/resources/extensions/gsd/json-persistence.js +20 -0
  120. package/dist/resources/extensions/gsd/key-manager.js +1 -0
  121. package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
  122. package/dist/resources/extensions/gsd/layout-policy.js +77 -0
  123. package/dist/resources/extensions/gsd/markdown-renderer.js +420 -129
  124. package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
  125. package/dist/resources/extensions/gsd/md-importer.js +153 -51
  126. package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
  127. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +44 -21
  128. package/dist/resources/extensions/gsd/metrics.js +22 -14
  129. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  130. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  131. package/dist/resources/extensions/gsd/migrate-external.js +83 -12
  132. package/dist/resources/extensions/gsd/migration-auto-check.js +27 -14
  133. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  134. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
  135. package/dist/resources/extensions/gsd/milestone-ids.js +79 -18
  136. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  137. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +3 -3
  138. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
  139. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
  140. package/dist/resources/extensions/gsd/model-router.js +79 -20
  141. package/dist/resources/extensions/gsd/notification-store.js +22 -29
  142. package/dist/resources/extensions/gsd/notifications.js +36 -7
  143. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  144. package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
  145. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
  146. package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
  147. package/dist/resources/extensions/gsd/paths.js +356 -44
  148. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  149. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  150. package/dist/resources/extensions/gsd/preferences-diagnostics.js +24 -1
  151. package/dist/resources/extensions/gsd/preferences-models.js +25 -11
  152. package/dist/resources/extensions/gsd/preferences-validation.js +25 -2
  153. package/dist/resources/extensions/gsd/preferences.js +91 -15
  154. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  155. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  156. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  157. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  158. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  159. package/dist/resources/extensions/gsd/prompts/code-review.md +39 -0
  160. package/dist/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  161. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  162. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  163. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  164. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  165. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  166. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  167. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  168. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  169. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  170. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  171. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  172. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  173. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  174. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  175. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  176. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  177. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  178. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  179. package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -3
  180. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  181. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  182. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  183. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  184. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  185. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  186. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  187. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  188. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  189. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  190. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  191. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  192. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  193. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  194. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  195. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  196. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  197. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  198. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  199. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  200. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  201. package/dist/resources/extensions/gsd/quick.js +45 -2
  202. package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
  203. package/dist/resources/extensions/gsd/redact-secrets.js +37 -0
  204. package/dist/resources/extensions/gsd/repo-identity.js +16 -0
  205. package/dist/resources/extensions/gsd/repository-registry.js +6 -1
  206. package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
  207. package/dist/resources/extensions/gsd/root-write-leak-guard.js +11 -3
  208. package/dist/resources/extensions/gsd/safe-fs.js +23 -2
  209. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  210. package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
  211. package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
  212. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
  213. package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
  214. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  215. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  216. package/dist/resources/extensions/gsd/session-lock.js +7 -6
  217. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +10 -9
  218. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +52 -0
  219. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  220. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  221. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  222. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  223. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  224. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +38 -4
  225. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  226. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  227. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  228. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  229. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  230. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +138 -19
  231. package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
  232. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
  233. package/dist/resources/extensions/gsd/state.js +13 -581
  234. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  235. package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
  236. package/dist/resources/extensions/gsd/tools/complete-milestone.js +8 -4
  237. package/dist/resources/extensions/gsd/tools/complete-slice.js +14 -4
  238. package/dist/resources/extensions/gsd/tools/complete-task.js +58 -15
  239. package/dist/resources/extensions/gsd/tools/exec-tool.js +7 -2
  240. package/dist/resources/extensions/gsd/tools/plan-slice.js +60 -47
  241. package/dist/resources/extensions/gsd/tools/plan-task.js +115 -9
  242. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
  243. package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
  244. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +84 -5
  245. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  246. package/dist/resources/extensions/gsd/undo.js +51 -15
  247. package/dist/resources/extensions/gsd/unit-context-composer.js +23 -7
  248. package/dist/resources/extensions/gsd/unit-context-manifest.js +5 -4
  249. package/dist/resources/extensions/gsd/unit-registry.js +90 -11
  250. package/dist/resources/extensions/gsd/unit-runtime.js +21 -0
  251. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  252. package/dist/resources/extensions/gsd/validation-block-guard.js +54 -4
  253. package/dist/resources/extensions/gsd/verification-gate.js +7 -0
  254. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  255. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  256. package/dist/resources/extensions/gsd/workflow-manifest.js +126 -13
  257. package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
  258. package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
  259. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  260. package/dist/resources/extensions/gsd/workspace.js +26 -8
  261. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  262. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  263. package/dist/resources/extensions/gsd/worktree-lifecycle.js +67 -5
  264. package/dist/resources/extensions/gsd/worktree-manager.js +155 -20
  265. package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
  266. package/dist/resources/extensions/mcp-client/manager.js +3 -3
  267. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  268. package/dist/update-check.js +15 -4
  269. package/dist/web/standalone/.next/BUILD_ID +1 -1
  270. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  271. package/dist/web/standalone/.next/build-manifest.json +4 -4
  272. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  273. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  274. package/dist/web/standalone/.next/required-server-files.json +3 -3
  275. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  276. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  277. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  278. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  279. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  280. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  281. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  282. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  283. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  284. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  285. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  286. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  288. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  289. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  290. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  291. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  292. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  293. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  294. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  295. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  296. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  299. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  300. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  302. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  303. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  305. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  306. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  308. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  310. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  313. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  314. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  316. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  320. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  322. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  323. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  326. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  327. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  329. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  330. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  331. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  332. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  333. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  335. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  336. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  337. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  338. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  339. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  340. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  341. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  342. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  343. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  344. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  345. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  346. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  347. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  348. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  349. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  350. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  351. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  352. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  353. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  354. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  355. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  356. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  357. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  358. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  359. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  360. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  361. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  362. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  363. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  364. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  365. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  366. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  367. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  368. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  369. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  370. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  371. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  372. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  373. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  374. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  375. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  376. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  377. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  378. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  379. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  380. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  381. package/dist/web/standalone/.next/server/app/index.html +1 -1
  382. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  383. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  384. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  385. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  386. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  387. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  388. package/dist/web/standalone/.next/server/app/page.js +2 -2
  389. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  390. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  391. package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
  392. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  393. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  394. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  395. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  396. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  397. package/dist/web/standalone/.next/server/middleware.js +3 -3
  398. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  399. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  400. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  401. package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
  402. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  403. package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
  404. package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.d0d9e0a955e441cb.js} +2 -2
  405. package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
  406. package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
  407. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  408. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  409. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  410. package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
  411. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  412. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  413. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  414. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  415. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  416. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  417. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  418. package/dist/web/standalone/server.js +1 -1
  419. package/dist/web-mode.d.ts +3 -1
  420. package/dist/web-mode.js +7 -5
  421. package/dist/wizard.d.ts +8 -0
  422. package/dist/wizard.js +8 -1
  423. package/integrations/hermes/CONTEXT.md +47 -0
  424. package/integrations/hermes/README.md +69 -0
  425. package/integrations/hermes/__init__.py +31 -0
  426. package/integrations/hermes/docs/issue-1162-grilling.md +197 -0
  427. package/integrations/hermes/docs/setup.md +276 -0
  428. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  429. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  430. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  431. package/integrations/hermes/open_gsd_hermes/commands.py +327 -0
  432. package/integrations/hermes/open_gsd_hermes/config.py +61 -0
  433. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  434. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  435. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  436. package/integrations/hermes/open_gsd_hermes/gsd_client.py +832 -0
  437. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  438. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  439. package/integrations/hermes/open_gsd_hermes/notifications.py +80 -0
  440. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  441. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  442. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  443. package/integrations/hermes/plugin.yaml +42 -0
  444. package/integrations/hermes/pyproject.toml +32 -0
  445. package/integrations/hermes/scripts/preflight.sh +92 -0
  446. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  447. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  448. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  449. package/integrations/hermes/tests/test_binding.py +103 -0
  450. package/integrations/hermes/tests/test_config.py +42 -0
  451. package/integrations/hermes/tests/test_cron.py +34 -0
  452. package/integrations/hermes/tests/test_directory_loader.py +37 -0
  453. package/integrations/hermes/tests/test_gsd_client_cache.py +123 -0
  454. package/integrations/hermes/tests/test_gsd_client_execute.py +35 -0
  455. package/integrations/hermes/tests/test_gsd_client_process_cwd.py +22 -0
  456. package/integrations/hermes/tests/test_gsd_client_timeout.py +98 -0
  457. package/integrations/hermes/tests/test_memory.py +59 -0
  458. package/integrations/hermes/tests/test_milestone_client.py +447 -0
  459. package/integrations/hermes/tests/test_new_milestone_command.py +313 -0
  460. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  461. package/integrations/hermes/tests/test_register.py +56 -0
  462. package/integrations/hermes/tests/test_snapshot.py +53 -0
  463. package/integrations/hermes/tests/test_supervisor_fsm.py +621 -0
  464. package/package.json +9 -8
  465. package/packages/cloud-mcp-gateway/dist/auth-store.d.ts +1 -0
  466. package/packages/cloud-mcp-gateway/dist/auth-store.d.ts.map +1 -1
  467. package/packages/cloud-mcp-gateway/dist/auth-store.js +21 -1
  468. package/packages/cloud-mcp-gateway/dist/auth-store.js.map +1 -1
  469. package/packages/cloud-mcp-gateway/dist/auth-store.test.js +34 -0
  470. package/packages/cloud-mcp-gateway/dist/auth-store.test.js.map +1 -1
  471. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  472. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  473. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  474. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  475. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  476. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  477. package/packages/cloud-mcp-gateway/package.json +2 -2
  478. package/packages/contracts/dist/workflow.d.ts +1 -0
  479. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  480. package/packages/contracts/dist/workflow.js +2 -0
  481. package/packages/contracts/dist/workflow.js.map +1 -1
  482. package/packages/contracts/package.json +1 -1
  483. package/packages/daemon/dist/cloud-runtime.d.ts +2 -0
  484. package/packages/daemon/dist/cloud-runtime.d.ts.map +1 -1
  485. package/packages/daemon/dist/cloud-runtime.js +25 -1
  486. package/packages/daemon/dist/cloud-runtime.js.map +1 -1
  487. package/packages/daemon/dist/cloud-runtime.test.js +51 -0
  488. package/packages/daemon/dist/cloud-runtime.test.js.map +1 -1
  489. package/packages/daemon/dist/message-batcher.d.ts +7 -0
  490. package/packages/daemon/dist/message-batcher.d.ts.map +1 -1
  491. package/packages/daemon/dist/message-batcher.js +13 -0
  492. package/packages/daemon/dist/message-batcher.js.map +1 -1
  493. package/packages/daemon/dist/message-batcher.test.js +48 -0
  494. package/packages/daemon/dist/message-batcher.test.js.map +1 -1
  495. package/packages/daemon/dist/session-manager.js +1 -1
  496. package/packages/daemon/dist/session-manager.js.map +1 -1
  497. package/packages/daemon/package.json +5 -5
  498. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  499. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  500. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  501. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  502. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +13 -1
  503. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -1
  504. package/packages/gsd-agent-core/dist/compaction/compaction.js +15 -1
  505. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -1
  506. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  507. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  508. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  509. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  510. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  511. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  512. package/packages/gsd-agent-core/dist/index.js +2 -0
  513. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  514. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  515. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  516. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  517. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  518. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  519. package/packages/gsd-agent-core/dist/session/agent-session-navigation.d.ts.map +1 -1
  520. package/packages/gsd-agent-core/dist/session/agent-session-navigation.js +4 -1
  521. package/packages/gsd-agent-core/dist/session/agent-session-navigation.js.map +1 -1
  522. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  523. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  524. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  525. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  526. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  527. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  528. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  529. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  530. package/packages/gsd-agent-core/package.json +5 -5
  531. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  532. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  533. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
  534. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  535. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  536. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  537. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  538. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  539. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
  540. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  541. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -829
  542. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  543. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  544. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  545. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  546. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  547. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  548. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  549. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  550. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  551. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  552. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  553. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +259 -0
  554. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  555. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  556. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  557. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  558. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  559. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
  560. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  562. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  564. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  565. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  566. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  567. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
  568. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
  570. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  572. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  573. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  574. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  575. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  576. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  577. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  578. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  579. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
  580. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  581. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +24 -6
  582. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
  583. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  584. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
  585. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  586. package/packages/gsd-agent-modes/package.json +7 -7
  587. package/packages/mcp-server/README.md +11 -1
  588. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  589. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  590. package/packages/mcp-server/dist/cli-errors.js +12 -0
  591. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  592. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
  593. package/packages/mcp-server/dist/cli-runner.js +33 -0
  594. package/packages/mcp-server/dist/cli-runner.js.map +1 -1
  595. package/packages/mcp-server/dist/cli.d.ts +1 -0
  596. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  597. package/packages/mcp-server/dist/cli.js +1 -0
  598. package/packages/mcp-server/dist/cli.js.map +1 -1
  599. package/packages/mcp-server/dist/server.d.ts +45 -3
  600. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  601. package/packages/mcp-server/dist/server.js +128 -8
  602. package/packages/mcp-server/dist/server.js.map +1 -1
  603. package/packages/mcp-server/dist/session-manager.js +1 -1
  604. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  605. package/packages/mcp-server/dist/workflow-tools.d.ts +13 -1
  606. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  607. package/packages/mcp-server/dist/workflow-tools.js +35 -21
  608. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  609. package/packages/mcp-server/package.json +21 -5
  610. package/packages/native/package.json +1 -1
  611. package/packages/pi-agent-core/dist/agent-loop.js +3 -2
  612. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  613. package/packages/pi-agent-core/package.json +1 -1
  614. package/packages/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  615. package/packages/pi-ai/dist/env-api-keys.js +3 -0
  616. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  617. package/packages/pi-ai/dist/models.generated.d.ts +46 -0
  618. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  619. package/packages/pi-ai/dist/models.generated.js +38 -0
  620. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  621. package/packages/pi-ai/dist/types.d.ts +2 -2
  622. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  623. package/packages/pi-ai/dist/types.js.map +1 -1
  624. package/packages/pi-ai/package.json +1 -1
  625. package/packages/pi-coding-agent/README.md +3 -2
  626. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  627. package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
  628. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  629. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  630. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  631. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  632. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  633. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  634. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  635. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  636. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  637. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  638. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  639. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  640. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  641. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +136 -0
  642. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  643. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  644. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  645. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  646. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  647. package/packages/pi-coding-agent/dist/core/session-manager.js +25 -459
  648. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  649. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  650. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  651. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  652. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  653. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  654. package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
  655. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  656. package/packages/pi-coding-agent/package.json +7 -7
  657. package/packages/pi-tui/package.json +2 -2
  658. package/packages/rpc-client/dist/rpc-client.js +1 -1
  659. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  660. package/packages/rpc-client/package.json +2 -2
  661. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  662. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  663. package/pkg/dist/theme/theme-schema.js +1 -1
  664. package/pkg/dist/theme/theme-schema.js.map +1 -1
  665. package/pkg/dist/theme/theme.d.ts.map +1 -1
  666. package/pkg/dist/theme/theme.js +11 -7
  667. package/pkg/dist/theme/theme.js.map +1 -1
  668. package/pkg/package.json +1 -1
  669. package/scripts/link-workspace-packages.cjs +14 -4
  670. package/src/resources/GSD-WORKFLOW.md +35 -40
  671. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  672. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  673. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +233 -73
  674. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +61 -0
  675. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +633 -49
  676. package/src/resources/extensions/cursor-cli/index.ts +18 -0
  677. package/src/resources/extensions/cursor-cli/models.ts +65 -0
  678. package/src/resources/extensions/cursor-cli/package.json +11 -0
  679. package/src/resources/extensions/cursor-cli/readiness.ts +143 -0
  680. package/src/resources/extensions/cursor-cli/stream-adapter.ts +440 -0
  681. package/src/resources/extensions/cursor-cli/tests/index.test.ts +54 -0
  682. package/src/resources/extensions/cursor-cli/tests/readiness.test.ts +29 -0
  683. package/src/resources/extensions/cursor-cli/tests/stream-adapter.test.ts +166 -0
  684. package/src/resources/extensions/google-cli/stream-adapter.ts +106 -19
  685. package/src/resources/extensions/gsd/activity-log.ts +4 -1
  686. package/src/resources/extensions/gsd/artifact-verification.ts +480 -0
  687. package/src/resources/extensions/gsd/auto/closeout.ts +54 -56
  688. package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
  689. package/src/resources/extensions/gsd/auto/finalize.ts +8 -0
  690. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  691. package/src/resources/extensions/gsd/auto/loop.ts +69 -2
  692. package/src/resources/extensions/gsd/auto/orchestrator.ts +39 -14
  693. package/src/resources/extensions/gsd/auto/run-unit.ts +5 -2
  694. package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +8 -0
  695. package/src/resources/extensions/gsd/auto/session.ts +14 -0
  696. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
  697. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  698. package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
  699. package/src/resources/extensions/gsd/auto-budget.ts +12 -1
  700. package/src/resources/extensions/gsd/auto-dispatch.ts +85 -39
  701. package/src/resources/extensions/gsd/auto-model-selection.ts +56 -18
  702. package/src/resources/extensions/gsd/auto-post-unit.ts +37 -23
  703. package/src/resources/extensions/gsd/auto-prompts.ts +153 -45
  704. package/src/resources/extensions/gsd/auto-recovery.ts +21 -484
  705. package/src/resources/extensions/gsd/auto-runtime-state.ts +17 -5
  706. package/src/resources/extensions/gsd/auto-start.ts +67 -37
  707. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +7 -2
  708. package/src/resources/extensions/gsd/auto-verification.ts +10 -8
  709. package/src/resources/extensions/gsd/auto-worktree.ts +98 -26
  710. package/src/resources/extensions/gsd/auto.ts +68 -14
  711. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +164 -71
  712. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
  713. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +14 -5
  714. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -0
  715. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  716. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -1
  717. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +263 -28
  718. package/src/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.ts +80 -12
  719. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  720. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
  721. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +114 -10
  722. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  723. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +109 -19
  724. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +109 -4
  725. package/src/resources/extensions/gsd/codebase-generator.ts +183 -25
  726. package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
  727. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  728. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  729. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  730. package/src/resources/extensions/gsd/commands/handlers/auto.ts +1 -1
  731. package/src/resources/extensions/gsd/commands/handlers/core.ts +70 -3
  732. package/src/resources/extensions/gsd/commands/handlers/ops.ts +225 -1
  733. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  734. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  735. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  736. package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
  737. package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
  738. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +156 -11
  739. package/src/resources/extensions/gsd/commands-usage.ts +1 -1
  740. package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
  741. package/src/resources/extensions/gsd/commands-worktree.ts +25 -12
  742. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  743. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  744. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  745. package/src/resources/extensions/gsd/config-overlay.ts +3 -1
  746. package/src/resources/extensions/gsd/consent-question.ts +11 -1
  747. package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
  748. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  749. package/src/resources/extensions/gsd/db/engine.ts +34 -1
  750. package/src/resources/extensions/gsd/db/queries.ts +197 -0
  751. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  752. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
  753. package/src/resources/extensions/gsd/db-workspace.ts +76 -3
  754. package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
  755. package/src/resources/extensions/gsd/discussion-handoff.ts +19 -7
  756. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -4
  757. package/src/resources/extensions/gsd/doctor-engine-checks.ts +486 -7
  758. package/src/resources/extensions/gsd/doctor-git-checks.ts +24 -2
  759. package/src/resources/extensions/gsd/doctor-providers.ts +142 -19
  760. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +5 -15
  761. package/src/resources/extensions/gsd/doctor-types.ts +9 -1
  762. package/src/resources/extensions/gsd/doctor.ts +125 -10
  763. package/src/resources/extensions/gsd/error-classifier.ts +14 -1
  764. package/src/resources/extensions/gsd/escalation.ts +9 -4
  765. package/src/resources/extensions/gsd/exec-sandbox.ts +62 -13
  766. package/src/resources/extensions/gsd/export-html.ts +11 -4
  767. package/src/resources/extensions/gsd/export.ts +88 -1
  768. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  769. package/src/resources/extensions/gsd/flat-phase-migration.ts +325 -0
  770. package/src/resources/extensions/gsd/forensics.ts +4 -34
  771. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  772. package/src/resources/extensions/gsd/git-service.ts +82 -16
  773. package/src/resources/extensions/gsd/gitignore.ts +11 -4
  774. package/src/resources/extensions/gsd/gsd-db.ts +72 -0
  775. package/src/resources/extensions/gsd/guidance.ts +9 -7
  776. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  777. package/src/resources/extensions/gsd/guided-flow.ts +56 -8
  778. package/src/resources/extensions/gsd/health-widget.ts +69 -32
  779. package/src/resources/extensions/gsd/json-persistence.ts +20 -0
  780. package/src/resources/extensions/gsd/key-manager.ts +1 -0
  781. package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
  782. package/src/resources/extensions/gsd/layout-policy.ts +86 -0
  783. package/src/resources/extensions/gsd/markdown-renderer.ts +434 -119
  784. package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
  785. package/src/resources/extensions/gsd/md-importer.ts +215 -65
  786. package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
  787. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +51 -19
  788. package/src/resources/extensions/gsd/metrics.ts +26 -13
  789. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  790. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  791. package/src/resources/extensions/gsd/migrate-external.ts +78 -12
  792. package/src/resources/extensions/gsd/migration-auto-check.ts +27 -13
  793. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  794. package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
  795. package/src/resources/extensions/gsd/milestone-ids.ts +78 -19
  796. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  797. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +4 -4
  798. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
  799. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
  800. package/src/resources/extensions/gsd/model-router.ts +102 -23
  801. package/src/resources/extensions/gsd/notification-store.ts +17 -28
  802. package/src/resources/extensions/gsd/notifications.ts +37 -6
  803. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  804. package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
  805. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
  806. package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
  807. package/src/resources/extensions/gsd/paths.ts +348 -39
  808. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  809. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  810. package/src/resources/extensions/gsd/preferences-diagnostics.ts +24 -0
  811. package/src/resources/extensions/gsd/preferences-models.ts +28 -9
  812. package/src/resources/extensions/gsd/preferences-validation.ts +28 -2
  813. package/src/resources/extensions/gsd/preferences.ts +116 -14
  814. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  815. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  816. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  817. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  818. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  819. package/src/resources/extensions/gsd/prompts/code-review.md +39 -0
  820. package/src/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  821. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  822. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  823. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  824. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  825. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  826. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  827. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  828. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  829. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  830. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  831. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  832. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  833. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  834. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  835. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  836. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  837. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  838. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  839. package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -3
  840. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  841. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  842. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  843. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  844. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  845. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  846. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  847. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  848. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  849. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  850. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  851. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  852. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  853. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  854. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  855. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  856. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  857. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  858. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  859. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  860. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  861. package/src/resources/extensions/gsd/quick.ts +43 -2
  862. package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
  863. package/src/resources/extensions/gsd/redact-secrets.ts +40 -0
  864. package/src/resources/extensions/gsd/repo-identity.ts +17 -0
  865. package/src/resources/extensions/gsd/repository-registry.ts +7 -1
  866. package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
  867. package/src/resources/extensions/gsd/root-write-leak-guard.ts +16 -3
  868. package/src/resources/extensions/gsd/safe-fs.ts +22 -2
  869. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  870. package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
  871. package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
  872. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
  873. package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
  874. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  875. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  876. package/src/resources/extensions/gsd/session-lock.ts +7 -6
  877. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +10 -9
  878. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +52 -0
  879. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  880. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  881. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  882. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  883. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  884. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +35 -4
  885. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  886. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  887. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  888. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  889. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  890. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +176 -30
  891. package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
  892. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
  893. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  894. package/src/resources/extensions/gsd/state.ts +37 -695
  895. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  896. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  897. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  898. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  899. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  900. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  901. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  902. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  903. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  904. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
  905. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
  906. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -5
  907. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +235 -5
  908. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +50 -1
  909. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +178 -0
  910. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +15 -12
  911. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +36 -0
  912. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  913. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +182 -4
  914. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +43 -1
  915. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +200 -1
  916. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +41 -0
  917. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -0
  918. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +41 -0
  919. package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +4 -4
  920. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +3 -0
  921. package/src/resources/extensions/gsd/tests/auto-timeout-recovery-harness-abort.test.ts +55 -0
  922. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +8 -0
  923. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  924. package/src/resources/extensions/gsd/tests/batch-task-query.test.ts +85 -0
  925. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +29 -0
  926. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +377 -8
  927. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  928. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  929. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  930. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  931. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +863 -0
  932. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
  933. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  934. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  935. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  936. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  937. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +62 -1
  938. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
  939. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +151 -0
  940. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  941. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  942. package/src/resources/extensions/gsd/tests/complete-task.test.ts +82 -7
  943. package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
  944. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  945. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  946. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
  947. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
  948. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  949. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
  950. package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +44 -0
  951. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  952. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
  953. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
  954. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +175 -43
  955. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  956. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
  957. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  958. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  959. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +245 -1
  960. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +631 -2
  961. package/src/resources/extensions/gsd/tests/doctor-workspace.test.ts +207 -0
  962. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  963. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  964. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +38 -0
  965. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
  966. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +45 -1
  967. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  968. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  969. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
  970. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  971. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  972. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  973. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
  974. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  975. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +186 -0
  976. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  977. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  978. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  979. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  980. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +87 -19
  981. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  982. package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +89 -0
  983. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
  984. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  985. package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
  986. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  987. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +9 -0
  988. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  989. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  990. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  991. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +130 -3
  992. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  993. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  994. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  995. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  996. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  997. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
  998. package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
  999. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
  1000. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  1001. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  1002. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  1003. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +336 -82
  1004. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  1005. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  1006. package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
  1007. package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
  1008. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +4 -4
  1009. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  1010. package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
  1011. package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
  1012. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +173 -0
  1013. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
  1014. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
  1015. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +152 -22
  1016. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +1 -1
  1017. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
  1018. package/src/resources/extensions/gsd/tests/model-router.test.ts +204 -7
  1019. package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
  1020. package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
  1021. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  1022. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +47 -1
  1023. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
  1024. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  1025. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  1026. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +26 -0
  1027. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
  1028. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +2 -2
  1029. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +50 -6
  1030. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  1031. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  1032. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  1033. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
  1034. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +27 -0
  1035. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +161 -27
  1036. package/src/resources/extensions/gsd/tests/plan-task.test.ts +311 -5
  1037. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
  1038. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  1039. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  1040. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  1041. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  1042. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  1043. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  1044. package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +4 -2
  1045. package/src/resources/extensions/gsd/tests/preferences.test.ts +197 -1
  1046. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +196 -1
  1047. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  1048. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
  1049. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +23 -6
  1050. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +301 -0
  1051. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  1052. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  1053. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  1054. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +4 -4
  1055. package/src/resources/extensions/gsd/tests/redact-secrets.test.ts +56 -0
  1056. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +166 -4
  1057. package/src/resources/extensions/gsd/tests/register-hooks-flat-phase-migration.test.ts +73 -0
  1058. package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +378 -0
  1059. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  1060. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +41 -2
  1061. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +55 -0
  1062. package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +50 -9
  1063. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  1064. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
  1065. package/src/resources/extensions/gsd/tests/schedule-wakeup-tool.test.ts +167 -0
  1066. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  1067. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
  1068. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  1069. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +105 -0
  1070. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -1
  1071. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +329 -57
  1072. package/src/resources/extensions/gsd/tests/status-per-repo.test.ts +94 -0
  1073. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  1074. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  1075. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  1076. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  1077. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  1078. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +35 -0
  1079. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +271 -0
  1080. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +32 -3
  1081. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  1082. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  1083. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
  1084. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
  1085. package/src/resources/extensions/gsd/tests/undo.test.ts +113 -37
  1086. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +212 -11
  1087. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +66 -18
  1088. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +56 -0
  1089. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +30 -0
  1090. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  1091. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +162 -1
  1092. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  1093. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  1094. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  1095. package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +53 -1
  1096. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
  1097. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  1098. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  1099. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  1100. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  1101. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +96 -15
  1102. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +134 -0
  1103. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +42 -12
  1104. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  1105. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +278 -14
  1106. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +151 -2
  1107. package/src/resources/extensions/gsd/tests/workspace.test.ts +18 -4
  1108. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  1109. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +4 -4
  1110. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +2 -2
  1111. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +65 -0
  1112. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
  1113. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +31 -1
  1114. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +32 -0
  1115. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  1116. package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
  1117. package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
  1118. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  1119. package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -11
  1120. package/src/resources/extensions/gsd/tools/complete-task.ts +68 -16
  1121. package/src/resources/extensions/gsd/tools/exec-tool.ts +7 -3
  1122. package/src/resources/extensions/gsd/tools/plan-slice.ts +61 -50
  1123. package/src/resources/extensions/gsd/tools/plan-task.ts +148 -9
  1124. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
  1125. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
  1126. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +101 -4
  1127. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  1128. package/src/resources/extensions/gsd/undo.ts +55 -15
  1129. package/src/resources/extensions/gsd/unit-context-composer.ts +33 -7
  1130. package/src/resources/extensions/gsd/unit-context-manifest.ts +11 -5
  1131. package/src/resources/extensions/gsd/unit-registry.ts +97 -11
  1132. package/src/resources/extensions/gsd/unit-runtime.ts +42 -0
  1133. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  1134. package/src/resources/extensions/gsd/validation-block-guard.ts +59 -7
  1135. package/src/resources/extensions/gsd/verification-gate.ts +8 -0
  1136. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  1137. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  1138. package/src/resources/extensions/gsd/workflow-manifest.ts +141 -7
  1139. package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
  1140. package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
  1141. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  1142. package/src/resources/extensions/gsd/workspace.ts +42 -8
  1143. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  1144. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  1145. package/src/resources/extensions/gsd/worktree-lifecycle.ts +135 -11
  1146. package/src/resources/extensions/gsd/worktree-manager.ts +214 -20
  1147. package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
  1148. package/src/resources/extensions/mcp-client/manager.ts +3 -3
  1149. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
  1150. package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +0 -10
  1151. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
  1152. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  1153. package/dist/web/standalone/.next/static/chunks/app/page-a48b7c48333b31c8.js +0 -1
  1154. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  1155. package/dist/web/standalone/.next/static/chunks/webpack-f0285ce91d4ec9ef.js +0 -1
  1156. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → L2UMqXELiDH3oz-7yguXp}/_buildManifest.js +0 -0
  1157. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → L2UMqXELiDH3oz-7yguXp}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SessionManager — manages RpcClient lifecycle for background GSD execution.\n *\n * One active session per projectDir. Tracks events in a ring buffer,\n * detects blockers, tracks terminal state, and accumulates cost using\n * the cumulative-max pattern (K004).\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve, join, delimiter } from 'node:path';\nimport { RpcClient } from '@opengsd/rpc-client';\nimport type { SdkAgentEvent, RpcInitResult, RpcCostUpdateEvent, RpcExtensionUIRequest } from '@opengsd/contracts';\nimport type {\n ManagedSession,\n ExecuteOptions,\n PendingBlocker,\n CostAccumulator,\n SessionStatus,\n} from './types.js';\nimport { MAX_EVENTS, INIT_TIMEOUT_MS } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Inlined detection logic (from headless-events.ts — no internal package imports)\n// ---------------------------------------------------------------------------\n\nconst FIRE_AND_FORGET_METHODS = new Set([\n 'notify', 'setStatus', 'setWidget', 'setTitle', 'set_editor_text',\n]);\n\nconst TERMINAL_PREFIXES = [\n 'auto-mode stopped',\n 'step-mode stopped',\n 'auto-mode complete',\n 'no active milestone',\n 'auto-mode idle',\n];\n\nfunction findExecutableOnPath(command: string): string | null {\n const pathValue = getPathEnvValue();\n if (!pathValue) return null;\n const extensions = process.platform === 'win32'\n ? ['', ...(process.env['PATHEXT'] ?? '.COM;.EXE;.BAT;.CMD')\n .split(';')\n .filter(Boolean)]\n : [''];\n for (const dir of pathValue.split(delimiter)) {\n if (!dir) continue;\n for (const ext of extensions) {\n const candidate = join(dir, `${command}${ext}`);\n if (existsSync(candidate)) return candidate;\n }\n }\n return null;\n}\n\nfunction getPathEnvValue(env: NodeJS.ProcessEnv = process.env): string {\n return env['PATH'] ?? env['Path'] ?? env['path'] ?? '';\n}\n\nfunction isTerminalNotification(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request' || event.method !== 'notify') return false;\n const message = String(event.message ?? '').toLowerCase();\n return TERMINAL_PREFIXES.some((prefix) => message.startsWith(prefix));\n}\n\nfunction isBlockedNotification(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request' || event.method !== 'notify') return false;\n const message = String(event.message ?? '').toLowerCase();\n return message.includes('blocked:');\n}\n\nfunction isBlockingUIRequest(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request') return false;\n const method = String(event.method ?? '');\n return !FIRE_AND_FORGET_METHODS.has(method);\n}\n\n// ---------------------------------------------------------------------------\n// SessionManager\n// ---------------------------------------------------------------------------\n\nexport class SessionManager {\n /** Sessions keyed by projectDir for duplicate-start prevention */\n private sessions = new Map<string, ManagedSession>();\n\n /**\n * Start a new GSD auto-mode session for the given project directory.\n *\n * Rejects if a session already exists for this projectDir.\n * Creates an RpcClient, starts the process, performs the v2 init handshake,\n * wires event tracking, and sends '/gsd auto' to begin execution.\n */\n async startSession(projectDir: string, options: ExecuteOptions = {}): Promise<string> {\n if (!projectDir || projectDir.trim() === '') {\n throw new Error('projectDir is required and cannot be empty');\n }\n\n const resolvedDir = resolve(projectDir);\n\n const existing = this.sessions.get(resolvedDir);\n if (existing) {\n // Only block when a genuinely active session is running. Terminal\n // states (error, completed, cancelled) are evicted so the caller can\n // start a fresh session for the same projectDir.\n if (existing.status === 'starting' || existing.status === 'running' || existing.status === 'blocked') {\n throw new Error(\n `Session already active for ${resolvedDir} (sessionId: ${existing.sessionId}, status: ${existing.status})`\n );\n }\n existing.unsubscribe?.();\n this.sessions.delete(resolvedDir);\n }\n\n const cliPath = options.cliPath ?? SessionManager.resolveCLIPath();\n\n const args: string[] = ['--mode', 'rpc'];\n if (options.model) args.push('--model', options.model);\n if (options.bare) args.push('--bare');\n\n const client = new RpcClient({\n cliPath,\n cwd: resolvedDir,\n args,\n });\n\n // Build the session shell before async operations so we can track state\n const session: ManagedSession = {\n sessionId: '', // filled after init\n projectDir: resolvedDir,\n status: 'starting',\n client,\n events: [],\n pendingBlocker: null,\n cost: { totalCost: 0, tokens: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } },\n startTime: Date.now(),\n };\n\n // Insert into map early (keyed by dir) so concurrent starts are rejected\n this.sessions.set(resolvedDir, session);\n\n try {\n // Start the process with timeout\n await Promise.race([\n client.start(),\n timeout(INIT_TIMEOUT_MS, `RpcClient.start() timed out after ${INIT_TIMEOUT_MS}ms`),\n ]);\n\n // Perform v2 init handshake\n const initResult: RpcInitResult = await Promise.race([\n client.init(),\n timeout(INIT_TIMEOUT_MS, `RpcClient.init() timed out after ${INIT_TIMEOUT_MS}ms`),\n ]) as RpcInitResult;\n\n session.sessionId = initResult.sessionId;\n session.status = 'running';\n\n // Wire event tracking\n session.unsubscribe = client.onEvent((event: SdkAgentEvent) => {\n this.handleEvent(session, event);\n });\n\n // Kick off auto-mode\n const command = options.command ?? '/gsd auto';\n await client.prompt(command);\n\n return session.sessionId;\n } catch (err) {\n session.status = 'error';\n session.error = err instanceof Error ? err.message : String(err);\n\n // Attempt cleanup\n try { await client.stop(); } catch { /* swallow cleanup errors */ }\n\n // Keep session in map so callers can inspect the error\n throw new Error(`Failed to start session for ${resolvedDir}: ${session.error}`);\n }\n }\n\n /**\n * Look up a session by sessionId.\n * Linear scan is fine — we expect <10 concurrent sessions.\n *\n * Empty sessionId is rejected explicitly: in-progress sessions carry an\n * empty sessionId until init() resolves, so an empty-string lookup would\n * otherwise match the first in-flight session and silently target the\n * wrong one (e.g. cancel a different caller's session).\n */\n getSession(sessionId: string): ManagedSession | undefined {\n if (!sessionId) return undefined;\n for (const session of this.sessions.values()) {\n if (session.sessionId === sessionId) return session;\n }\n return undefined;\n }\n\n /**\n * Look up a session by project directory (direct map lookup).\n */\n getSessionByDir(projectDir: string): ManagedSession | undefined {\n return this.sessions.get(resolve(projectDir));\n }\n\n /**\n * Return the only tracked session, if there is exactly one.\n *\n * MCP clients occasionally lose the sessionId returned from gsd_execute while\n * still talking to the same server process. A sole-session fallback lets\n * read-only status polling recover without guessing across projects.\n */\n getOnlySession(): ManagedSession | undefined {\n let only: ManagedSession | undefined;\n for (const session of this.sessions.values()) {\n if (only) return undefined;\n only = session;\n }\n return only;\n }\n\n /**\n * Snapshot tracked sessions for diagnostics and ambiguity errors.\n */\n listSessions(): ManagedSession[] {\n return [...this.sessions.values()];\n }\n\n /**\n * Resolve a pending blocker by sending a UI response.\n */\n async resolveBlocker(sessionId: string, response: string): Promise<void> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n if (!session.pendingBlocker) throw new Error(`No pending blocker for session ${sessionId}`);\n\n const blocker = session.pendingBlocker;\n session.client.sendUIResponse(blocker.id, { value: response });\n session.pendingBlocker = null;\n if (session.status === 'blocked') {\n session.status = 'running';\n }\n }\n\n /**\n * Cancel a running session — abort current operation then stop the process.\n */\n async cancelSession(sessionId: string): Promise<void> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n await this._cancelSessionObject(session);\n }\n\n /**\n * Cancel a session looked up by project directory.\n *\n * This is the fallback path for interactive sessions (started via `/gsd auto`\n * in the terminal) and sessions from a restarted MCP server that have no\n * registered sessionId. The sessions map is keyed by projectDir, so this\n * lookup always succeeds for any tracked session regardless of sessionId.\n */\n async cancelSessionByDir(projectDir: string): Promise<void> {\n const session = this.getSessionByDir(projectDir);\n if (session) {\n await this._cancelSessionObject(session);\n return;\n }\n const stopped = await this.stopDetachedAutoProcess(projectDir);\n if (!stopped) {\n throw new Error(`Session not found for projectDir: ${projectDir}`);\n }\n }\n\n private async stopDetachedAutoProcess(projectDir: string): Promise<boolean> {\n const lockPath = join(projectDir, '.gsd', 'auto.lock');\n if (!existsSync(lockPath)) return false;\n try {\n const lockData = JSON.parse(readFileSync(lockPath, 'utf-8')) as { pid?: number };\n const pid = lockData.pid;\n if (typeof pid !== 'number') return false;\n try { process.kill(pid, 0); } catch { return false; }\n process.kill(pid, 'SIGTERM');\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Internal: perform abort + stop + mark cancelled on a resolved session object.\n */\n private async _cancelSessionObject(session: ManagedSession): Promise<void> {\n try {\n await session.client.abort();\n } catch { /* may already be stopped */ }\n\n try {\n await session.client.stop();\n } catch { /* swallow */ }\n\n session.status = 'cancelled';\n session.unsubscribe?.();\n }\n\n /**\n * Build a HeadlessJsonResult-shaped object from accumulated session state.\n */\n getResult(sessionId: string): Record<string, unknown> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n\n const durationMs = Date.now() - session.startTime;\n\n return {\n sessionId: session.sessionId,\n projectDir: session.projectDir,\n status: session.status,\n durationMs,\n cost: session.cost,\n recentEvents: session.events.slice(-10),\n pendingBlocker: session.pendingBlocker\n ? { id: session.pendingBlocker.id, method: session.pendingBlocker.method, message: session.pendingBlocker.message }\n : null,\n error: session.error ?? null,\n };\n }\n\n /**\n * Stop all active sessions and clean up resources.\n */\n async cleanup(): Promise<void> {\n const stopPromises: Promise<void>[] = [];\n\n for (const session of this.sessions.values()) {\n session.unsubscribe?.();\n if (session.status === 'running' || session.status === 'starting' || session.status === 'blocked') {\n stopPromises.push(\n session.client.stop().catch(() => { /* swallow */ })\n );\n session.status = 'cancelled';\n }\n }\n\n await Promise.allSettled(stopPromises);\n }\n\n /**\n * Resolve the GSD CLI path.\n *\n * 1. GSD_CLI_PATH env var (highest priority)\n * 2. PATH lookup → resolve to the actual gsd executable/shim\n */\n static resolveCLIPath(): string {\n // Check env var first\n const envPath = process.env['GSD_CLI_PATH'];\n if (envPath) return resolve(envPath);\n\n const gsdBin = findExecutableOnPath('gsd');\n if (gsdBin) {\n return resolve(gsdBin);\n }\n\n throw new Error(\n 'Cannot find GSD CLI. Set GSD_CLI_PATH environment variable or ensure `gsd` is in PATH.'\n );\n }\n\n // ---------------------------------------------------------------------------\n // Private: Event Handling\n // ---------------------------------------------------------------------------\n\n private handleEvent(session: ManagedSession, event: SdkAgentEvent): void {\n // Ring buffer: push and trim\n session.events.push(event);\n if (session.events.length > MAX_EVENTS) {\n session.events.splice(0, session.events.length - MAX_EVENTS);\n }\n\n // Cost tracking (K004 — cumulative-max)\n if (event.type === 'cost_update') {\n const costEvent = event as unknown as RpcCostUpdateEvent;\n session.cost.totalCost = Math.max(session.cost.totalCost, costEvent.cumulativeCost ?? 0);\n if (costEvent.tokens) {\n session.cost.tokens.input = Math.max(session.cost.tokens.input, costEvent.tokens.input ?? 0);\n session.cost.tokens.output = Math.max(session.cost.tokens.output, costEvent.tokens.output ?? 0);\n session.cost.tokens.cacheRead = Math.max(session.cost.tokens.cacheRead, costEvent.tokens.cacheRead ?? 0);\n session.cost.tokens.cacheWrite = Math.max(session.cost.tokens.cacheWrite, costEvent.tokens.cacheWrite ?? 0);\n }\n }\n\n // Terminal detection — auto-mode/step-mode stopped\n if (isTerminalNotification(event as Record<string, unknown>)) {\n // Check if it's a blocked stop (not truly terminal — it's a blocker)\n if (isBlockedNotification(event as Record<string, unknown>)) {\n session.status = 'blocked';\n session.pendingBlocker = extractBlocker(event);\n } else {\n session.status = 'completed';\n session.unsubscribe?.();\n }\n return;\n }\n\n // Blocker detection — non-fire-and-forget extension_ui_request\n if (isBlockingUIRequest(event as Record<string, unknown>)) {\n session.status = 'blocked';\n session.pendingBlocker = extractBlocker(event);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction timeout(ms: number, message: string): Promise<never> {\n return new Promise((_, reject) => {\n setTimeout(() => reject(new Error(message)), ms);\n });\n}\n\nfunction extractBlocker(event: SdkAgentEvent): PendingBlocker {\n const uiEvent = event as unknown as RpcExtensionUIRequest;\n return {\n id: String(uiEvent.id ?? ''),\n method: uiEvent.method,\n message: String((uiEvent as Record<string, unknown>).title ?? (uiEvent as Record<string, unknown>).message ?? ''),\n event: uiEvent,\n };\n}\n"]}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SessionManager — manages RpcClient lifecycle for background GSD execution.\n *\n * One active session per projectDir. Tracks events in a ring buffer,\n * detects blockers, tracks terminal state, and accumulates cost using\n * the cumulative-max pattern (K004).\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve, join, delimiter } from 'node:path';\nimport { RpcClient } from '@opengsd/rpc-client';\nimport type { SdkAgentEvent, RpcInitResult, RpcCostUpdateEvent, RpcExtensionUIRequest } from '@opengsd/contracts';\nimport type {\n ManagedSession,\n ExecuteOptions,\n PendingBlocker,\n CostAccumulator,\n SessionStatus,\n} from './types.js';\nimport { MAX_EVENTS, INIT_TIMEOUT_MS } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Inlined detection logic (from headless-events.ts — no internal package imports)\n// ---------------------------------------------------------------------------\n\nconst FIRE_AND_FORGET_METHODS = new Set([\n 'notify', 'setStatus', 'setWidget', 'setTitle', 'set_editor_text',\n]);\n\nconst TERMINAL_PREFIXES = [\n 'auto-mode stopped',\n 'step-mode stopped',\n 'auto-mode complete',\n 'no active milestone',\n 'auto-mode idle',\n];\n\nfunction findExecutableOnPath(command: string): string | null {\n const pathValue = getPathEnvValue();\n if (!pathValue) return null;\n const extensions = process.platform === 'win32'\n ? ['', ...(process.env['PATHEXT'] ?? '.COM;.EXE;.BAT;.CMD')\n .split(';')\n .filter(Boolean)]\n : [''];\n for (const dir of pathValue.split(delimiter)) {\n if (!dir) continue;\n for (const ext of extensions) {\n const candidate = join(dir, `${command}${ext}`);\n if (existsSync(candidate)) return candidate;\n }\n }\n return null;\n}\n\nfunction getPathEnvValue(env: NodeJS.ProcessEnv = process.env): string {\n return env['PATH'] ?? env['Path'] ?? env['path'] ?? '';\n}\n\nfunction isTerminalNotification(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request' || event.method !== 'notify') return false;\n const message = String(event.message ?? '').toLowerCase();\n return TERMINAL_PREFIXES.some((prefix) => message.startsWith(prefix));\n}\n\nfunction isBlockedNotification(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request' || event.method !== 'notify') return false;\n const message = String(event.message ?? '').toLowerCase();\n return message.includes('blocked:');\n}\n\nfunction isBlockingUIRequest(event: Record<string, unknown>): boolean {\n if (event.type !== 'extension_ui_request') return false;\n const method = String(event.method ?? '');\n return !FIRE_AND_FORGET_METHODS.has(method);\n}\n\n// ---------------------------------------------------------------------------\n// SessionManager\n// ---------------------------------------------------------------------------\n\nexport class SessionManager {\n /** Sessions keyed by projectDir for duplicate-start prevention */\n private sessions = new Map<string, ManagedSession>();\n\n /**\n * Start a new GSD auto-mode session for the given project directory.\n *\n * Rejects if a session already exists for this projectDir.\n * Creates an RpcClient, starts the process, performs the v2 init handshake,\n * wires event tracking, and sends '/gsd auto' to begin execution.\n */\n async startSession(projectDir: string, options: ExecuteOptions = {}): Promise<string> {\n if (!projectDir || projectDir.trim() === '') {\n throw new Error('projectDir is required and cannot be empty');\n }\n\n const resolvedDir = resolve(projectDir);\n\n const existing = this.sessions.get(resolvedDir);\n if (existing) {\n // Only block when a genuinely active session is running. Terminal\n // states (error, completed, cancelled) are evicted so the caller can\n // start a fresh session for the same projectDir.\n if (existing.status === 'starting' || existing.status === 'running' || existing.status === 'blocked') {\n throw new Error(\n `Session already active for ${resolvedDir} (sessionId: ${existing.sessionId}, status: ${existing.status})`\n );\n }\n existing.unsubscribe?.();\n this.sessions.delete(resolvedDir);\n }\n\n const cliPath = options.cliPath ?? SessionManager.resolveCLIPath();\n\n const args: string[] = [];\n if (options.model) args.push('--model', options.model);\n if (options.bare) args.push('--bare');\n\n const client = new RpcClient({\n cliPath,\n cwd: resolvedDir,\n args,\n });\n\n // Build the session shell before async operations so we can track state\n const session: ManagedSession = {\n sessionId: '', // filled after init\n projectDir: resolvedDir,\n status: 'starting',\n client,\n events: [],\n pendingBlocker: null,\n cost: { totalCost: 0, tokens: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } },\n startTime: Date.now(),\n };\n\n // Insert into map early (keyed by dir) so concurrent starts are rejected\n this.sessions.set(resolvedDir, session);\n\n try {\n // Start the process with timeout\n await Promise.race([\n client.start(),\n timeout(INIT_TIMEOUT_MS, `RpcClient.start() timed out after ${INIT_TIMEOUT_MS}ms`),\n ]);\n\n // Perform v2 init handshake\n const initResult: RpcInitResult = await Promise.race([\n client.init(),\n timeout(INIT_TIMEOUT_MS, `RpcClient.init() timed out after ${INIT_TIMEOUT_MS}ms`),\n ]) as RpcInitResult;\n\n session.sessionId = initResult.sessionId;\n session.status = 'running';\n\n // Wire event tracking\n session.unsubscribe = client.onEvent((event: SdkAgentEvent) => {\n this.handleEvent(session, event);\n });\n\n // Kick off auto-mode\n const command = options.command ?? '/gsd auto';\n await client.prompt(command);\n\n return session.sessionId;\n } catch (err) {\n session.status = 'error';\n session.error = err instanceof Error ? err.message : String(err);\n\n // Attempt cleanup\n try { await client.stop(); } catch { /* swallow cleanup errors */ }\n\n // Keep session in map so callers can inspect the error\n throw new Error(`Failed to start session for ${resolvedDir}: ${session.error}`);\n }\n }\n\n /**\n * Look up a session by sessionId.\n * Linear scan is fine — we expect <10 concurrent sessions.\n *\n * Empty sessionId is rejected explicitly: in-progress sessions carry an\n * empty sessionId until init() resolves, so an empty-string lookup would\n * otherwise match the first in-flight session and silently target the\n * wrong one (e.g. cancel a different caller's session).\n */\n getSession(sessionId: string): ManagedSession | undefined {\n if (!sessionId) return undefined;\n for (const session of this.sessions.values()) {\n if (session.sessionId === sessionId) return session;\n }\n return undefined;\n }\n\n /**\n * Look up a session by project directory (direct map lookup).\n */\n getSessionByDir(projectDir: string): ManagedSession | undefined {\n return this.sessions.get(resolve(projectDir));\n }\n\n /**\n * Return the only tracked session, if there is exactly one.\n *\n * MCP clients occasionally lose the sessionId returned from gsd_execute while\n * still talking to the same server process. A sole-session fallback lets\n * read-only status polling recover without guessing across projects.\n */\n getOnlySession(): ManagedSession | undefined {\n let only: ManagedSession | undefined;\n for (const session of this.sessions.values()) {\n if (only) return undefined;\n only = session;\n }\n return only;\n }\n\n /**\n * Snapshot tracked sessions for diagnostics and ambiguity errors.\n */\n listSessions(): ManagedSession[] {\n return [...this.sessions.values()];\n }\n\n /**\n * Resolve a pending blocker by sending a UI response.\n */\n async resolveBlocker(sessionId: string, response: string): Promise<void> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n if (!session.pendingBlocker) throw new Error(`No pending blocker for session ${sessionId}`);\n\n const blocker = session.pendingBlocker;\n session.client.sendUIResponse(blocker.id, { value: response });\n session.pendingBlocker = null;\n if (session.status === 'blocked') {\n session.status = 'running';\n }\n }\n\n /**\n * Cancel a running session — abort current operation then stop the process.\n */\n async cancelSession(sessionId: string): Promise<void> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n await this._cancelSessionObject(session);\n }\n\n /**\n * Cancel a session looked up by project directory.\n *\n * This is the fallback path for interactive sessions (started via `/gsd auto`\n * in the terminal) and sessions from a restarted MCP server that have no\n * registered sessionId. The sessions map is keyed by projectDir, so this\n * lookup always succeeds for any tracked session regardless of sessionId.\n */\n async cancelSessionByDir(projectDir: string): Promise<void> {\n const session = this.getSessionByDir(projectDir);\n if (session) {\n await this._cancelSessionObject(session);\n return;\n }\n const stopped = await this.stopDetachedAutoProcess(projectDir);\n if (!stopped) {\n throw new Error(`Session not found for projectDir: ${projectDir}`);\n }\n }\n\n private async stopDetachedAutoProcess(projectDir: string): Promise<boolean> {\n const lockPath = join(projectDir, '.gsd', 'auto.lock');\n if (!existsSync(lockPath)) return false;\n try {\n const lockData = JSON.parse(readFileSync(lockPath, 'utf-8')) as { pid?: number };\n const pid = lockData.pid;\n if (typeof pid !== 'number') return false;\n try { process.kill(pid, 0); } catch { return false; }\n process.kill(pid, 'SIGTERM');\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Internal: perform abort + stop + mark cancelled on a resolved session object.\n */\n private async _cancelSessionObject(session: ManagedSession): Promise<void> {\n try {\n await session.client.abort();\n } catch { /* may already be stopped */ }\n\n try {\n await session.client.stop();\n } catch { /* swallow */ }\n\n session.status = 'cancelled';\n session.unsubscribe?.();\n }\n\n /**\n * Build a HeadlessJsonResult-shaped object from accumulated session state.\n */\n getResult(sessionId: string): Record<string, unknown> {\n const session = this.getSession(sessionId);\n if (!session) throw new Error(`Session not found: ${sessionId}`);\n\n const durationMs = Date.now() - session.startTime;\n\n return {\n sessionId: session.sessionId,\n projectDir: session.projectDir,\n status: session.status,\n durationMs,\n cost: session.cost,\n recentEvents: session.events.slice(-10),\n pendingBlocker: session.pendingBlocker\n ? { id: session.pendingBlocker.id, method: session.pendingBlocker.method, message: session.pendingBlocker.message }\n : null,\n error: session.error ?? null,\n };\n }\n\n /**\n * Stop all active sessions and clean up resources.\n */\n async cleanup(): Promise<void> {\n const stopPromises: Promise<void>[] = [];\n\n for (const session of this.sessions.values()) {\n session.unsubscribe?.();\n if (session.status === 'running' || session.status === 'starting' || session.status === 'blocked') {\n stopPromises.push(\n session.client.stop().catch(() => { /* swallow */ })\n );\n session.status = 'cancelled';\n }\n }\n\n await Promise.allSettled(stopPromises);\n }\n\n /**\n * Resolve the GSD CLI path.\n *\n * 1. GSD_CLI_PATH env var (highest priority)\n * 2. PATH lookup → resolve to the actual gsd executable/shim\n */\n static resolveCLIPath(): string {\n // Check env var first\n const envPath = process.env['GSD_CLI_PATH'];\n if (envPath) return resolve(envPath);\n\n const gsdBin = findExecutableOnPath('gsd');\n if (gsdBin) {\n return resolve(gsdBin);\n }\n\n throw new Error(\n 'Cannot find GSD CLI. Set GSD_CLI_PATH environment variable or ensure `gsd` is in PATH.'\n );\n }\n\n // ---------------------------------------------------------------------------\n // Private: Event Handling\n // ---------------------------------------------------------------------------\n\n private handleEvent(session: ManagedSession, event: SdkAgentEvent): void {\n // Ring buffer: push and trim\n session.events.push(event);\n if (session.events.length > MAX_EVENTS) {\n session.events.splice(0, session.events.length - MAX_EVENTS);\n }\n\n // Cost tracking (K004 — cumulative-max)\n if (event.type === 'cost_update') {\n const costEvent = event as unknown as RpcCostUpdateEvent;\n session.cost.totalCost = Math.max(session.cost.totalCost, costEvent.cumulativeCost ?? 0);\n if (costEvent.tokens) {\n session.cost.tokens.input = Math.max(session.cost.tokens.input, costEvent.tokens.input ?? 0);\n session.cost.tokens.output = Math.max(session.cost.tokens.output, costEvent.tokens.output ?? 0);\n session.cost.tokens.cacheRead = Math.max(session.cost.tokens.cacheRead, costEvent.tokens.cacheRead ?? 0);\n session.cost.tokens.cacheWrite = Math.max(session.cost.tokens.cacheWrite, costEvent.tokens.cacheWrite ?? 0);\n }\n }\n\n // Terminal detection — auto-mode/step-mode stopped\n if (isTerminalNotification(event as Record<string, unknown>)) {\n // Check if it's a blocked stop (not truly terminal — it's a blocker)\n if (isBlockedNotification(event as Record<string, unknown>)) {\n session.status = 'blocked';\n session.pendingBlocker = extractBlocker(event);\n } else {\n session.status = 'completed';\n session.unsubscribe?.();\n }\n return;\n }\n\n // Blocker detection — non-fire-and-forget extension_ui_request\n if (isBlockingUIRequest(event as Record<string, unknown>)) {\n session.status = 'blocked';\n session.pendingBlocker = extractBlocker(event);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction timeout(ms: number, message: string): Promise<never> {\n return new Promise((_, reject) => {\n setTimeout(() => reject(new Error(message)), ms);\n });\n}\n\nfunction extractBlocker(event: SdkAgentEvent): PendingBlocker {\n const uiEvent = event as unknown as RpcExtensionUIRequest;\n return {\n id: String(uiEvent.id ?? ''),\n method: uiEvent.method,\n message: String((uiEvent as Record<string, unknown>).title ?? (uiEvent as Record<string, unknown>).message ?? ''),\n event: uiEvent,\n };\n}\n"]}
@@ -18,11 +18,15 @@ export declare function _buildBridgeImportCandidates(relativePath: string): stri
18
18
  */
19
19
  export declare function warmWorkflowToolBridges(): Promise<void>;
20
20
  interface McpToolServer {
21
- tool(name: string, description: string, params: Record<string, unknown>, handler: (args: Record<string, unknown>) => Promise<unknown>): unknown;
21
+ tool(name: string, description: string, params: Record<string, unknown>, handler: (args: Record<string, unknown>, extra?: {
22
+ signal?: AbortSignal;
23
+ }) => Promise<unknown>): unknown;
22
24
  }
23
25
  export declare const WORKFLOW_TOOL_NAMES: readonly string[];
24
26
  export declare const CANONICAL_WORKFLOW_TOOL_NAMES: readonly string[];
25
27
  export declare const WORKFLOW_TOOL_ALIAS_NAMES: readonly string[];
28
+ /** @internal — exported for testing only */
29
+ export declare function _runSerializedWorkflowOperationForTest<T>(fn: () => Promise<T>): Promise<T>;
26
30
  export declare const _sliceCompleteSchemaForTest: z.ZodObject<{
27
31
  projectDir: z.ZodOptional<z.ZodString>;
28
32
  sliceId: z.ZodString;
@@ -64,6 +68,14 @@ export declare const _sliceCompleteSchemaForTest: z.ZodObject<{
64
68
  provides: z.ZodString;
65
69
  }, z.core.$strip>>>>>;
66
70
  }, z.core.$strip>;
71
+ export declare const _summarySaveSchemaForTest: z.ZodObject<{
72
+ projectDir: z.ZodOptional<z.ZodString>;
73
+ milestone_id: z.ZodOptional<z.ZodString>;
74
+ slice_id: z.ZodOptional<z.ZodString>;
75
+ task_id: z.ZodOptional<z.ZodString>;
76
+ artifact_type: z.ZodString;
77
+ content: z.ZodString;
78
+ }, z.core.$strip>;
67
79
  export interface RegisterWorkflowToolsOptions {
68
80
  /**
69
81
  * Whether to advertise the 14 backwards-compatibility alias tools in the
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuXxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AA+GD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAE5B;AA6JD,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE;AAED,4CAA4C;AAC5C,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AA6FD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D;AAgCD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,mBAA+B,CAAC;AAChE,eAAO,MAAM,6BAA6B,mBAAyC,CAAC;AACpF,eAAO,MAAM,yBAAyB,mBAAqC,CAAC;AA60B5E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsB,CAAC;AAwT/D,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE,4BAAiC,GACzC,IAAI,CAqyBN"}
1
+ {"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwXxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AA+GD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAE5B;AA6JD,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE;AAED,4CAA4C;AAC5C,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AA6FD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D;AAgCD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7F,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,mBAA+B,CAAC;AAChE,eAAO,MAAM,6BAA6B,mBAAyC,CAAC;AACpF,eAAO,MAAM,yBAAyB,mBAAqC,CAAC;AA0G5E,4CAA4C;AAC5C,wBAAgB,sCAAsC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F;AAyuBD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsB,CAAC;AA4B/D,eAAO,MAAM,yBAAyB;;;;;;;iBAAoB,CAAC;AA+R3D,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE,4BAAiC,GACzC,IAAI,CAuyBN"}
@@ -8,7 +8,7 @@ import { homedir } from "node:os";
8
8
  import { basename, isAbsolute, join, relative, resolve } from "node:path";
9
9
  import { pathToFileURL } from "node:url";
10
10
  import { z } from "zod";
11
- import { WORKFLOW_TOOL_NAMES as CONTRACT_WORKFLOW_TOOL_NAMES, CANONICAL_WORKFLOW_TOOL_NAMES as CONTRACT_CANONICAL_WORKFLOW_TOOL_NAMES, WORKFLOW_TOOL_ALIAS_NAMES as CONTRACT_WORKFLOW_TOOL_ALIAS_NAMES, } from "@opengsd/contracts";
11
+ import { WORKFLOW_TOOL_NAMES as CONTRACT_WORKFLOW_TOOL_NAMES, CANONICAL_WORKFLOW_TOOL_NAMES as CONTRACT_CANONICAL_WORKFLOW_TOOL_NAMES, WORKFLOW_TOOL_ALIAS_NAMES as CONTRACT_WORKFLOW_TOOL_ALIAS_NAMES, SUMMARY_SAVE_CONTENT_MAX_LENGTH, } from "@opengsd/contracts";
12
12
  import { logAliasUsage } from "./alias-telemetry.js";
13
13
  async function importBridgeModule() {
14
14
  return importLocalModule("../../../src/resources/extensions/gsd/mcp-bridge.js");
@@ -500,18 +500,15 @@ function isPlainObject(value) {
500
500
  async function runSerializedWorkflowOperation(fn) {
501
501
  // The shared DB adapter and workflow log base path are process-global, so
502
502
  // workflow MCP mutations must not overlap within a single server process.
503
- // A per-operation deadline prevents a single stuck call from wedging every
504
- // subsequent write for the lifetime of the process.
503
+ // A per-operation deadline prevents a single stuck call from wedging its
504
+ // caller for the lifetime of the process.
505
505
  //
506
- // Known limitation: on timeout we surface an error and release the queue,
507
- // but Promise.race cannot cancel the underlying `fn()` it may continue
508
- // running in the background and overlap with the next admitted operation.
509
- // Proper cancellation requires threading an AbortSignal through every
510
- // workflow executor (`workflow-tool-executors.ts` and friends), which is
511
- // a larger change. The current trade-off: risk a theoretical overlap after
512
- // a 5-minute wall-clock timeout vs permanently wedging the server. The
513
- // overlap window is bounded by how long the zombie `fn()` keeps running;
514
- // in practice DB writes complete quickly even when the caller gave up.
506
+ // Promise.race cannot cancel the underlying `fn()`. On timeout, surface an
507
+ // error to the caller but keep the queue held until `fn()` actually settles
508
+ // so a retry cannot overlap with the still-running operation. True
509
+ // cancellation remains a larger deferred design: it requires threading an
510
+ // AbortSignal through every workflow executor (`workflow-tool-executors.ts`
511
+ // and friends).
515
512
  const prior = workflowExecutionQueue;
516
513
  let release;
517
514
  workflowExecutionQueue = new Promise((resolve) => {
@@ -519,18 +516,21 @@ async function runSerializedWorkflowOperation(fn) {
519
516
  });
520
517
  await prior;
521
518
  const timeoutMs = getWorkflowOpTimeoutMs();
519
+ const operationPromise = Promise.resolve().then(fn);
520
+ let timedOut = false;
522
521
  try {
523
522
  if (timeoutMs === 0) {
524
- return await fn();
523
+ return await operationPromise;
525
524
  }
526
525
  let timer;
527
526
  const timeoutPromise = new Promise((_, reject) => {
528
527
  timer = setTimeout(() => {
528
+ timedOut = true;
529
529
  reject(new Error(`Workflow operation exceeded ${timeoutMs}ms deadline (GSD_MCP_WORKFLOW_TIMEOUT_MS)`));
530
530
  }, timeoutMs);
531
531
  });
532
532
  try {
533
- return await Promise.race([fn(), timeoutPromise]);
533
+ return await Promise.race([operationPromise, timeoutPromise]);
534
534
  }
535
535
  finally {
536
536
  if (timer)
@@ -538,9 +538,18 @@ async function runSerializedWorkflowOperation(fn) {
538
538
  }
539
539
  }
540
540
  finally {
541
- release();
541
+ if (timedOut) {
542
+ void operationPromise.then(release, release);
543
+ }
544
+ else {
545
+ release();
546
+ }
542
547
  }
543
548
  }
549
+ /** @internal — exported for testing only */
550
+ export function _runSerializedWorkflowOperationForTest(fn) {
551
+ return runSerializedWorkflowOperation(fn);
552
+ }
544
553
  async function runSerializedWorkflowDbOperation(projectDir, fn) {
545
554
  return runSerializedWorkflowOperation(async () => {
546
555
  const bridge = await importBridgeModule();
@@ -946,7 +955,7 @@ const planSliceParams = {
946
955
  inputs: nonEmptyStringArray("inputs"),
947
956
  expectedOutput: nonEmptyStringArray("expectedOutput"),
948
957
  observabilityImpact: optionalNonEmptyString("observabilityImpact"),
949
- })).describe("Planned tasks for the slice"),
958
+ })).optional().describe("Optional full task replacement for the slice. Omit for incremental planning, then call gsd_plan_task once per task."),
950
959
  successCriteria: z.string().optional(),
951
960
  proofLevel: z.string().optional(),
952
961
  integrationClosure: z.string().optional(),
@@ -1125,7 +1134,9 @@ const summarySaveParams = {
1125
1134
  slice_id: z.string().optional().describe("Slice ID (e.g. S01)"),
1126
1135
  task_id: z.string().optional().describe("Task ID (e.g. T01)"),
1127
1136
  artifact_type: z.string().describe("Artifact type to save (SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT, PROJECT, PROJECT-DRAFT, REQUIREMENTS, REQUIREMENTS-DRAFT)"),
1128
- content: z.string().describe("The full markdown content of the artifact"),
1137
+ content: z.string()
1138
+ .max(SUMMARY_SAVE_CONTENT_MAX_LENGTH, `content must be at most ${SUMMARY_SAVE_CONTENT_MAX_LENGTH} characters per save`)
1139
+ .describe(`The full markdown content of the artifact. Maximum ${SUMMARY_SAVE_CONTENT_MAX_LENGTH} characters per save.`),
1129
1140
  };
1130
1141
  const ROOT_SUMMARY_ARTIFACT_TYPES = new Set([
1131
1142
  "PROJECT",
@@ -1143,6 +1154,7 @@ const summarySaveSchema = z.object(summarySaveParams).superRefine((value, ctx) =
1143
1154
  });
1144
1155
  }
1145
1156
  });
1157
+ export const _summarySaveSchemaForTest = summarySaveSchema;
1146
1158
  const decisionSaveParams = {
1147
1159
  projectDir: projectDirParam,
1148
1160
  scope: z.string().describe("Scope of the decision (e.g. architecture, library, observability)"),
@@ -1390,9 +1402,9 @@ const resumeSchema = z.object(resumeParams);
1390
1402
  function wrapServerWithErrorHandler(realServer) {
1391
1403
  return {
1392
1404
  tool(name, description, params, handler) {
1393
- return realServer.tool(name, description, params, async (args) => {
1405
+ return realServer.tool(name, description, params, async (args, extra) => {
1394
1406
  try {
1395
- return await handler(args);
1407
+ return await handler(args, extra);
1396
1408
  }
1397
1409
  catch (err) {
1398
1410
  const message = err instanceof Error ? err.message : String(err);
@@ -1734,22 +1746,24 @@ export function registerWorkflowTools(realServer, options = {}) {
1734
1746
  }
1735
1747
  return { content: [{ type: "text", text: JSON.stringify(entries, null, 2) }] };
1736
1748
  });
1737
- server.tool("gsd_uat_exec", "Run one UAT-scoped bash/node/python check with milestone/slice/check metadata. Evidence persists under .gsd/exec with kind=uat_exec.", uatExecParams, async (args) => {
1749
+ server.tool("gsd_uat_exec", "Run one UAT-scoped bash/node/python check with milestone/slice/check metadata. Evidence persists under .gsd/exec with kind=uat_exec.", uatExecParams, async (args, extra) => {
1738
1750
  const { projectDir, ...params } = parseWorkflowArgs(uatExecSchema, args);
1739
1751
  await enforceWorkflowWriteGate("gsd_uat_exec", projectDir);
1740
1752
  const { executeUatExec } = await importLocalModule("../../../src/resources/extensions/gsd/tools/exec-tool.js");
1741
1753
  return adaptExecutorResult(await runSerializedWorkflowOperation(async () => executeUatExec(params, {
1742
1754
  baseDir: projectDir,
1743
1755
  preferences: await loadProjectPreferences(projectDir),
1756
+ signal: extra?.signal,
1744
1757
  })));
1745
1758
  });
1746
- server.tool("gsd_exec", "Run a short bash/node/python script in the project directory. Capped stdout/stderr and metadata persist under .gsd/exec; only a digest returns to MCP.", execParams, async (args) => {
1759
+ server.tool("gsd_exec", "Run a short bash/node/python script in the project directory. Capped stdout/stderr and metadata persist under .gsd/exec; only a digest returns to MCP.", execParams, async (args, extra) => {
1747
1760
  const { projectDir, ...params } = parseWorkflowArgs(execSchema, args);
1748
1761
  await enforceWorkflowWriteGate("gsd_exec", projectDir);
1749
1762
  const { executeGsdExec } = await importLocalModule("../../../src/resources/extensions/gsd/tools/exec-tool.js");
1750
1763
  return adaptExecutorResult(await runSerializedWorkflowOperation(async () => executeGsdExec(params, {
1751
1764
  baseDir: projectDir,
1752
1765
  preferences: await loadProjectPreferences(projectDir),
1766
+ signal: extra?.signal,
1753
1767
  })));
1754
1768
  });
1755
1769
  server.tool("gsd_exec_search", "Search prior gsd_exec runs from .gsd/exec/*.meta.json without re-running them.", execSearchParams, async (args) => {