@opengsd/gsd-pi 1.2.0-dev.fbdca60b → 1.3.0-dev.65546769

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 (835) hide show
  1. package/README.md +13 -7
  2. package/dist/cli.js +28 -1
  3. package/dist/headless-context.js +0 -1
  4. package/dist/headless-events.d.ts +16 -1
  5. package/dist/headless-events.js +19 -2
  6. package/dist/headless.js +8 -1
  7. package/dist/help-text.js +29 -0
  8. package/dist/hermes-integration-install.d.ts +17 -0
  9. package/dist/hermes-integration-install.js +199 -0
  10. package/dist/jiti-workspace-aliases.d.ts +11 -2
  11. package/dist/jiti-workspace-aliases.js +19 -3
  12. package/dist/onboarding.js +9 -4
  13. package/dist/provider-migrations.d.ts +23 -0
  14. package/dist/provider-migrations.js +41 -0
  15. package/dist/read-cli.d.ts +23 -0
  16. package/dist/read-cli.js +90 -0
  17. package/dist/resource-loader.d.ts +3 -3
  18. package/dist/resource-loader.js +4 -13
  19. package/dist/resources/.managed-resources-content-hash +1 -1
  20. package/dist/resources/GSD-WORKFLOW.md +22 -22
  21. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  22. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +73 -20
  23. package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
  24. package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
  25. package/dist/resources/extensions/gsd/auto/loop.js +67 -2
  26. package/dist/resources/extensions/gsd/auto/orchestrator.js +50 -10
  27. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +8 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  29. package/dist/resources/extensions/gsd/auto-artifact-paths.js +81 -19
  30. package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
  31. package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
  32. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
  33. package/dist/resources/extensions/gsd/auto-dispatch.js +47 -8
  34. package/dist/resources/extensions/gsd/auto-model-selection.js +14 -8
  35. package/dist/resources/extensions/gsd/auto-post-unit.js +39 -29
  36. package/dist/resources/extensions/gsd/auto-prompts.js +44 -30
  37. package/dist/resources/extensions/gsd/auto-recovery.js +118 -40
  38. package/dist/resources/extensions/gsd/auto-runtime-state.js +13 -0
  39. package/dist/resources/extensions/gsd/auto-start.js +58 -31
  40. package/dist/resources/extensions/gsd/auto-verification.js +5 -2
  41. package/dist/resources/extensions/gsd/auto-worktree.js +149 -91
  42. package/dist/resources/extensions/gsd/auto.js +97 -31
  43. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +42 -54
  44. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  45. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +24 -2
  46. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +108 -9
  47. package/dist/resources/extensions/gsd/bootstrap/system-context.js +164 -44
  48. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  49. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +113 -27
  50. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +92 -4
  51. package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
  52. package/dist/resources/extensions/gsd/codebase-generator.js +5 -8
  53. package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
  54. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  55. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  56. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  57. package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
  58. package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
  59. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  60. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  61. package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
  62. package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
  63. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +14 -1
  64. package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
  65. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  66. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  67. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  68. package/dist/resources/extensions/gsd/config-overlay.js +11 -8
  69. package/dist/resources/extensions/gsd/consent-question.js +12 -0
  70. package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
  71. package/dist/resources/extensions/gsd/dashboard-overlay.js +39 -3
  72. package/dist/resources/extensions/gsd/db/engine.js +27 -0
  73. package/dist/resources/extensions/gsd/db/queries.js +54 -0
  74. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  75. package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
  76. package/dist/resources/extensions/gsd/db-workspace.js +13 -1
  77. package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
  78. package/dist/resources/extensions/gsd/doctor-git-checks.js +30 -4
  79. package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
  80. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -24
  81. package/dist/resources/extensions/gsd/doctor.js +28 -7
  82. package/dist/resources/extensions/gsd/error-classifier.js +13 -1
  83. package/dist/resources/extensions/gsd/escalation.js +11 -4
  84. package/dist/resources/extensions/gsd/export-html.js +10 -3
  85. package/dist/resources/extensions/gsd/export.js +73 -0
  86. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  87. package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
  88. package/dist/resources/extensions/gsd/forensics.js +2 -1
  89. package/dist/resources/extensions/gsd/git-service.js +7 -4
  90. package/dist/resources/extensions/gsd/gitignore.js +6 -2
  91. package/dist/resources/extensions/gsd/guidance.js +7 -7
  92. package/dist/resources/extensions/gsd/guided-flow.js +11 -6
  93. package/dist/resources/extensions/gsd/layout-policy.js +75 -0
  94. package/dist/resources/extensions/gsd/markdown-renderer.js +391 -116
  95. package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
  96. package/dist/resources/extensions/gsd/md-importer.js +153 -51
  97. package/dist/resources/extensions/gsd/metrics.js +19 -11
  98. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  99. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  100. package/dist/resources/extensions/gsd/migrate-external.js +51 -6
  101. package/dist/resources/extensions/gsd/migration-auto-check.js +5 -14
  102. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  103. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
  104. package/dist/resources/extensions/gsd/milestone-ids.js +50 -19
  105. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
  106. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
  107. package/dist/resources/extensions/gsd/model-router.js +79 -20
  108. package/dist/resources/extensions/gsd/notification-store.js +22 -29
  109. package/dist/resources/extensions/gsd/notifications.js +36 -7
  110. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  111. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
  112. package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
  113. package/dist/resources/extensions/gsd/paths.js +356 -44
  114. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  115. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  116. package/dist/resources/extensions/gsd/preferences-models.js +34 -14
  117. package/dist/resources/extensions/gsd/preferences.js +148 -13
  118. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  119. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  120. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  121. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  122. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  123. package/dist/resources/extensions/gsd/prompts/code-review.md +37 -0
  124. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  125. package/dist/resources/extensions/gsd/prompts/complete-slice.md +24 -15
  126. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  127. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  128. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  129. package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -1
  130. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  131. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  132. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  133. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  134. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  135. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  136. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  137. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  138. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  139. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  140. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  141. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  142. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  143. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  144. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  145. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  146. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  147. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  148. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  149. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  150. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  151. package/dist/resources/extensions/gsd/prompts/run-uat.md +5 -1
  152. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  153. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  154. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  155. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  156. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  157. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  158. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  159. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  160. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  161. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  162. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  163. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  164. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  165. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  166. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  167. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  168. package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
  169. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  170. package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
  171. package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
  172. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  173. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
  174. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  175. package/dist/resources/extensions/gsd/session-lock.js +11 -9
  176. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  177. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  178. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
  179. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  180. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  181. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  182. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  183. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  184. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +95 -19
  185. package/dist/resources/extensions/gsd/state-reconciliation/index.js +36 -3
  186. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +12 -0
  187. package/dist/resources/extensions/gsd/state.js +48 -17
  188. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  189. package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
  190. package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
  191. package/dist/resources/extensions/gsd/tools/complete-slice.js +12 -2
  192. package/dist/resources/extensions/gsd/tools/complete-task.js +15 -1
  193. package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
  194. package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -3
  195. package/dist/resources/extensions/gsd/tools/plan-task.js +16 -1
  196. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
  197. package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
  198. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +44 -5
  199. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  200. package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
  201. package/dist/resources/extensions/gsd/undo.js +8 -9
  202. package/dist/resources/extensions/gsd/unit-registry.js +27 -3
  203. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +58 -2
  204. package/dist/resources/extensions/gsd/validation-block-guard.js +45 -0
  205. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  206. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  207. package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
  208. package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
  209. package/dist/resources/extensions/gsd/workflow-projections.js +25 -4
  210. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  211. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  212. package/dist/resources/extensions/gsd/worktree-manager.js +109 -16
  213. package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
  214. package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
  215. package/dist/resources/extensions/mcp-client/manager.js +3 -3
  216. package/dist/resources/extensions/search-the-web/index.js +41 -9
  217. package/dist/resources/extensions/search-the-web/native-search.js +18 -4
  218. package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
  219. package/dist/resources/extensions/subagent/index.js +20 -15
  220. package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
  221. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  222. package/dist/update-check.js +15 -4
  223. package/dist/web/standalone/.next/BUILD_ID +1 -1
  224. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  225. package/dist/web/standalone/.next/build-manifest.json +3 -3
  226. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  227. package/dist/web/standalone/.next/react-loadable-manifest.json +3 -3
  228. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  229. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  230. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  231. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  232. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  233. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  234. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  235. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  236. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  237. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  238. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  239. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  240. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  241. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  242. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  243. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  244. package/dist/web/standalone/.next/server/app/index.html +1 -1
  245. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  246. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  247. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  248. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  249. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  250. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  251. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  252. package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
  253. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  254. package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
  255. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  256. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  258. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  259. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  260. package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.8e446784528ed9dc.js} +2 -2
  261. package/dist/web/standalone/.next/static/chunks/8785.481aa5869991b760.js +1 -0
  262. package/dist/web/standalone/.next/static/chunks/{webpack-f0285ce91d4ec9ef.js → webpack-f46ea08200a0227e.js} +1 -1
  263. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  264. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  265. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  266. package/dist/web-mode.d.ts +3 -1
  267. package/dist/web-mode.js +7 -5
  268. package/integrations/hermes/README.md +48 -0
  269. package/integrations/hermes/docs/setup.md +272 -0
  270. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  271. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  272. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  273. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  274. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  275. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  276. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  277. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  278. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  279. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  280. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  281. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  282. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  283. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  284. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  285. package/integrations/hermes/plugin.yaml +38 -0
  286. package/integrations/hermes/pyproject.toml +32 -0
  287. package/integrations/hermes/scripts/preflight.sh +92 -0
  288. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  289. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  290. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  291. package/integrations/hermes/tests/test_binding.py +103 -0
  292. package/integrations/hermes/tests/test_config.py +36 -0
  293. package/integrations/hermes/tests/test_cron.py +34 -0
  294. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  295. package/integrations/hermes/tests/test_memory.py +59 -0
  296. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  297. package/integrations/hermes/tests/test_register.py +56 -0
  298. package/integrations/hermes/tests/test_snapshot.py +53 -0
  299. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  300. package/package.json +8 -7
  301. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  302. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  303. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  304. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  305. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  306. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  307. package/packages/cloud-mcp-gateway/package.json +2 -2
  308. package/packages/contracts/package.json +1 -1
  309. package/packages/daemon/package.json +4 -4
  310. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  311. package/packages/gsd-agent-core/dist/sdk.js +6 -2
  312. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  313. package/packages/gsd-agent-core/package.json +5 -5
  314. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
  315. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  316. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
  317. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
  318. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
  319. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
  320. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
  321. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  322. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
  323. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  324. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
  325. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
  326. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
  327. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
  328. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
  329. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  330. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
  331. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  332. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
  333. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  334. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
  335. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
  336. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
  337. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
  338. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
  339. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
  340. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
  341. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
  342. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
  343. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
  344. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
  345. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
  346. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
  347. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
  348. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
  349. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  350. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
  351. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
  352. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
  353. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  354. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
  355. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  356. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -0
  357. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  358. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +37 -15
  359. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  360. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +69 -3
  361. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  362. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +223 -32
  363. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  364. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
  365. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  366. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
  367. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
  368. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
  369. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  370. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -10
  371. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  372. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
  373. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
  374. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
  375. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  376. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +5 -0
  377. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  378. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  379. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
  380. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  381. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  382. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +3 -5
  383. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  384. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
  385. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  386. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
  387. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  388. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +25 -0
  389. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  390. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
  391. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
  392. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
  393. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
  394. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
  395. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
  396. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
  397. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
  398. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  399. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  400. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +9 -2
  401. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  402. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +31 -6
  403. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  404. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
  405. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
  406. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
  407. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  408. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -0
  409. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  410. package/packages/gsd-agent-modes/package.json +7 -7
  411. package/packages/mcp-server/README.md +10 -0
  412. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  413. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  414. package/packages/mcp-server/dist/cli-errors.js +12 -0
  415. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  416. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
  417. package/packages/mcp-server/dist/cli-runner.js +33 -0
  418. package/packages/mcp-server/dist/cli-runner.js.map +1 -1
  419. package/packages/mcp-server/dist/cli.d.ts +1 -0
  420. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  421. package/packages/mcp-server/dist/cli.js +1 -0
  422. package/packages/mcp-server/dist/cli.js.map +1 -1
  423. package/packages/mcp-server/dist/server.d.ts +29 -0
  424. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  425. package/packages/mcp-server/dist/server.js +82 -3
  426. package/packages/mcp-server/dist/server.js.map +1 -1
  427. package/packages/mcp-server/package.json +21 -5
  428. package/packages/native/package.json +1 -1
  429. package/packages/pi-agent-core/dist/agent-loop.js +9 -0
  430. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  431. package/packages/pi-agent-core/package.json +1 -1
  432. package/packages/pi-ai/package.json +1 -1
  433. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
  434. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
  435. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
  436. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  437. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  438. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  439. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
  440. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  441. package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
  442. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  443. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  444. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  445. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  446. package/packages/pi-coding-agent/package.json +8 -8
  447. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  448. package/packages/pi-tui/dist/autocomplete.js +6 -1
  449. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  450. package/packages/pi-tui/dist/components/input.js +1 -1
  451. package/packages/pi-tui/dist/components/input.js.map +1 -1
  452. package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
  453. package/packages/pi-tui/dist/components/loader.js +1 -0
  454. package/packages/pi-tui/dist/components/loader.js.map +1 -1
  455. package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
  456. package/packages/pi-tui/dist/components/select-list.js +8 -2
  457. package/packages/pi-tui/dist/components/select-list.js.map +1 -1
  458. package/packages/pi-tui/package.json +2 -2
  459. package/packages/rpc-client/package.json +2 -2
  460. package/pkg/package.json +1 -1
  461. package/src/resources/GSD-WORKFLOW.md +22 -22
  462. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
  463. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  464. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +83 -20
  465. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
  466. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +182 -10
  467. package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
  468. package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
  469. package/src/resources/extensions/gsd/auto/loop.ts +69 -2
  470. package/src/resources/extensions/gsd/auto/orchestrator.ts +63 -10
  471. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +13 -1
  472. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  473. package/src/resources/extensions/gsd/auto-artifact-paths.ts +83 -20
  474. package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
  475. package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
  476. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
  477. package/src/resources/extensions/gsd/auto-dispatch.ts +57 -12
  478. package/src/resources/extensions/gsd/auto-model-selection.ts +27 -5
  479. package/src/resources/extensions/gsd/auto-post-unit.ts +52 -31
  480. package/src/resources/extensions/gsd/auto-prompts.ts +45 -30
  481. package/src/resources/extensions/gsd/auto-recovery.ts +126 -37
  482. package/src/resources/extensions/gsd/auto-runtime-state.ts +13 -0
  483. package/src/resources/extensions/gsd/auto-start.ts +82 -36
  484. package/src/resources/extensions/gsd/auto-verification.ts +5 -7
  485. package/src/resources/extensions/gsd/auto-worktree.ts +83 -15
  486. package/src/resources/extensions/gsd/auto.ts +133 -32
  487. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +45 -61
  488. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  489. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -2
  490. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +123 -9
  491. package/src/resources/extensions/gsd/bootstrap/system-context.ts +185 -46
  492. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  493. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +138 -29
  494. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +107 -3
  495. package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
  496. package/src/resources/extensions/gsd/codebase-generator.ts +6 -9
  497. package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
  498. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  499. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  500. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  501. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
  502. package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
  503. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  504. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  505. package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
  506. package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
  507. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +13 -0
  508. package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
  509. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  510. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  511. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  512. package/src/resources/extensions/gsd/config-overlay.ts +24 -9
  513. package/src/resources/extensions/gsd/consent-question.ts +11 -1
  514. package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
  515. package/src/resources/extensions/gsd/dashboard-overlay.ts +41 -4
  516. package/src/resources/extensions/gsd/db/engine.ts +26 -0
  517. package/src/resources/extensions/gsd/db/queries.ts +78 -0
  518. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  519. package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
  520. package/src/resources/extensions/gsd/db-workspace.ts +15 -0
  521. package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
  522. package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
  523. package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
  524. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +12 -25
  525. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  526. package/src/resources/extensions/gsd/doctor.ts +30 -7
  527. package/src/resources/extensions/gsd/error-classifier.ts +14 -1
  528. package/src/resources/extensions/gsd/escalation.ts +9 -4
  529. package/src/resources/extensions/gsd/export-html.ts +11 -4
  530. package/src/resources/extensions/gsd/export.ts +88 -1
  531. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  532. package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
  533. package/src/resources/extensions/gsd/forensics.ts +2 -1
  534. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  535. package/src/resources/extensions/gsd/git-service.ts +7 -2
  536. package/src/resources/extensions/gsd/gitignore.ts +7 -3
  537. package/src/resources/extensions/gsd/guidance.ts +7 -7
  538. package/src/resources/extensions/gsd/guided-flow.ts +11 -6
  539. package/src/resources/extensions/gsd/layout-policy.ts +85 -0
  540. package/src/resources/extensions/gsd/markdown-renderer.ts +404 -104
  541. package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
  542. package/src/resources/extensions/gsd/md-importer.ts +215 -65
  543. package/src/resources/extensions/gsd/metrics.ts +23 -10
  544. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  545. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  546. package/src/resources/extensions/gsd/migrate-external.ts +49 -6
  547. package/src/resources/extensions/gsd/migration-auto-check.ts +4 -13
  548. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  549. package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
  550. package/src/resources/extensions/gsd/milestone-ids.ts +49 -19
  551. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
  552. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
  553. package/src/resources/extensions/gsd/model-router.ts +98 -18
  554. package/src/resources/extensions/gsd/notification-store.ts +17 -28
  555. package/src/resources/extensions/gsd/notifications.ts +37 -6
  556. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  557. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
  558. package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
  559. package/src/resources/extensions/gsd/paths.ts +348 -39
  560. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  561. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  562. package/src/resources/extensions/gsd/preferences-models.ts +47 -13
  563. package/src/resources/extensions/gsd/preferences.ts +188 -14
  564. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  565. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  566. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  567. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  568. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  569. package/src/resources/extensions/gsd/prompts/code-review.md +37 -0
  570. package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  571. package/src/resources/extensions/gsd/prompts/complete-slice.md +24 -15
  572. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  573. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  574. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  575. package/src/resources/extensions/gsd/prompts/execute-task.md +5 -1
  576. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  577. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  578. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  579. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  580. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  581. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  582. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  583. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  584. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  585. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  586. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  587. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  588. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  589. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  590. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  591. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  592. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  593. package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  594. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  595. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  596. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  597. package/src/resources/extensions/gsd/prompts/run-uat.md +5 -1
  598. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  599. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  600. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  601. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  602. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  603. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  604. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  605. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  606. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  607. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  608. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  609. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  610. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  611. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  612. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  613. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  614. package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
  615. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  616. package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
  617. package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
  618. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  619. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
  620. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  621. package/src/resources/extensions/gsd/session-lock.ts +15 -13
  622. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  623. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  624. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
  625. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  626. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  627. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  628. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  629. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  630. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +98 -26
  631. package/src/resources/extensions/gsd/state-reconciliation/index.ts +36 -3
  632. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +12 -0
  633. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  634. package/src/resources/extensions/gsd/state.ts +57 -15
  635. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  636. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  637. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  638. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  639. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  640. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  641. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  642. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  643. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  644. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +322 -1
  645. package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
  646. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
  647. package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
  648. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
  649. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
  650. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
  651. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +10 -0
  652. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +28 -22
  653. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  654. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +19 -2
  655. package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
  656. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  657. package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
  658. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
  659. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  660. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  661. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  662. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +862 -0
  663. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
  664. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  665. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  666. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  667. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
  668. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
  669. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -7
  670. package/src/resources/extensions/gsd/tests/complete-task.test.ts +7 -7
  671. package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
  672. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
  673. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +37 -0
  674. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  675. package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
  676. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  677. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
  678. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  679. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
  680. package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
  681. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
  682. package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
  683. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
  684. package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
  685. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
  686. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  687. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
  688. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  689. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  690. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  691. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  692. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
  693. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  694. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  695. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  696. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  697. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
  698. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  699. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  700. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  701. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  702. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
  703. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
  704. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  705. package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
  706. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  707. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
  708. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  709. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  710. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  711. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  712. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
  713. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +372 -0
  714. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  715. package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
  716. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  717. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
  718. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  719. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  720. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
  721. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
  722. package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
  723. package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
  724. package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
  725. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
  726. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  727. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
  728. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +339 -0
  729. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  730. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  731. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  732. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  733. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
  734. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
  735. package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
  736. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
  737. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  738. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  739. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  740. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  741. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  742. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  743. package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
  744. package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
  745. package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
  746. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
  747. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +16 -0
  748. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
  749. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +107 -0
  750. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  751. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  752. package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
  753. package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
  754. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
  755. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
  756. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +79 -4
  757. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  758. package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
  759. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  760. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  761. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
  762. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
  763. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
  764. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  765. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +155 -58
  766. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  767. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  768. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  769. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  770. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  771. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
  772. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  773. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  774. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
  775. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
  776. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
  777. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
  778. package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
  779. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +22 -0
  780. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +62 -0
  781. package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
  782. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
  783. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  784. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +51 -0
  785. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  786. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +90 -0
  787. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  788. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  789. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  790. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
  791. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +34 -8
  792. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  793. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +64 -8
  794. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  795. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +62 -0
  796. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
  797. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
  798. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  799. package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
  800. package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
  801. package/src/resources/extensions/gsd/tools/complete-milestone.ts +4 -7
  802. package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -9
  803. package/src/resources/extensions/gsd/tools/complete-task.ts +15 -1
  804. package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
  805. package/src/resources/extensions/gsd/tools/plan-slice.ts +1 -3
  806. package/src/resources/extensions/gsd/tools/plan-task.ts +17 -1
  807. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
  808. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
  809. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +43 -4
  810. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  811. package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
  812. package/src/resources/extensions/gsd/undo.ts +8 -9
  813. package/src/resources/extensions/gsd/unit-registry.ts +27 -3
  814. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +60 -1
  815. package/src/resources/extensions/gsd/validation-block-guard.ts +46 -0
  816. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  817. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  818. package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
  819. package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
  820. package/src/resources/extensions/gsd/workflow-projections.ts +24 -4
  821. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  822. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  823. package/src/resources/extensions/gsd/worktree-manager.ts +122 -16
  824. package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
  825. package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
  826. package/src/resources/extensions/mcp-client/manager.ts +3 -3
  827. package/src/resources/extensions/search-the-web/index.ts +45 -9
  828. package/src/resources/extensions/search-the-web/native-search.ts +16 -4
  829. package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
  830. package/src/resources/extensions/subagent/index.ts +20 -15
  831. package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
  832. package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
  833. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
  834. /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_buildManifest.js +0 -0
  835. /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_ssgManifest.js +0 -0
@@ -0,0 +1,868 @@
1
+ /**
2
+ * GSD Command — additional workflows (implemented, prompt-driven)
3
+ *
4
+ * Each command here is implemented as a real prompt-driven workflow (not an alias).
5
+ * Commands load a prompt template and dispatch it to the agent via `pi.sendMessage`,
6
+ * mirroring how /gsd scan and /gsd quick work. Prompt templates work against the
7
+ * milestone / slice / `.gsd/` model.
8
+ */
9
+ import { existsSync, mkdirSync, readdirSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ import { loadPrompt } from "./prompt-loader.js";
12
+ import { currentDirectoryRoot, GSDNoProjectError, projectRoot, withCommandCwd } from "./commands/context.js";
13
+ import { getUnmergedMilestoneBlockMessageForBase } from "./unmerged-milestone-guard.js";
14
+ import { getValidationBlockMessageForBase } from "./validation-block-guard.js";
15
+ /**
16
+ * Catalog entries for commands IMPLEMENTED natively in this module.
17
+ * Spread into TOP_LEVEL_SUBCOMMANDS so autocomplete surfaces them.
18
+ * Keep in sync with the handlers below and the help section in core.ts.
19
+ */
20
+ export const GSD_CORE_IMPLEMENTED_CATALOG = [
21
+ { cmd: "explore", desc: "Socratic ideation — think an idea through before committing" },
22
+ { cmd: "spike", desc: "Validate an idea through focused throwaway experiments" },
23
+ { cmd: "sketch", desc: "Explore UI/design ideas with throwaway HTML mockups" },
24
+ { cmd: "map-codebase", desc: "Analyze the codebase into structured reference docs under .gsd/codebase/" },
25
+ { cmd: "docs-update", desc: "Generate, update, and verify project docs against the live codebase" },
26
+ { cmd: "graphify", desc: "Build/query/inspect a lightweight project knowledge graph in .gsd/knowledge/" },
27
+ { cmd: "stats", desc: "Display project statistics — milestones, slices, git metrics, timeline" },
28
+ { cmd: "progress", desc: "Situational awareness — recent work and what's next" },
29
+ { cmd: "health", desc: "Validate .gsd/ directory integrity and optionally repair" },
30
+ { cmd: "surface", desc: "Manage which skills/extensions are surfaced in the session" },
31
+ { cmd: "code-review", desc: "Review changed source for bugs, security, and quality" },
32
+ { cmd: "review", desc: "Peer review of recent work across reviewer perspectives" },
33
+ { cmd: "audit-milestone", desc: "Verify a milestone met its definition of done" },
34
+ { cmd: "audit-uat", desc: "Cross-milestone audit of outstanding UAT/verification items" },
35
+ { cmd: "audit-fix", desc: "Audit-to-fix pipeline — classify, fix, test, commit" },
36
+ { cmd: "ui-review", desc: "Retroactive 6-pillar visual audit of frontend code" },
37
+ { cmd: "secure-phase", desc: "Verify threat mitigations for completed work" },
38
+ { cmd: "validate-phase", desc: "Audit and fill validation/test coverage gaps" },
39
+ { cmd: "verify-work", desc: "Conversational UAT of built features" },
40
+ { cmd: "plan-review-convergence", desc: "Iterate a plan through review cycles until concerns resolve" },
41
+ { cmd: "discuss-phase", desc: "Gather milestone/slice context through adaptive questioning" },
42
+ { cmd: "plan-phase", desc: "Create a detailed slice plan with a verification loop" },
43
+ { cmd: "execute-phase", desc: "Execute slice tasks with wave-based parallelization" },
44
+ { cmd: "spec-phase", desc: "Clarify WHAT a milestone delivers, with ambiguity scoring" },
45
+ { cmd: "mvp-phase", desc: "Plan a milestone as a vertical MVP slice" },
46
+ { cmd: "ui-phase", desc: "Produce a UI design contract (UI-SPEC) for a frontend milestone" },
47
+ { cmd: "ai-integration-phase", desc: "Produce an AI design contract (AI-SPEC) for AI milestones" },
48
+ { cmd: "ultraplan-phase", desc: "Extended-reasoning plan pass, review, then import" },
49
+ { cmd: "autonomous", desc: "Run all remaining lifecycle work continuously" },
50
+ { cmd: "pause-work", desc: "Create a context handoff when pausing mid-stream" },
51
+ { cmd: "resume-work", desc: "Resume work with full context restoration" },
52
+ { cmd: "manager", desc: "Interactive command center for multiple milestones" },
53
+ { cmd: "phase", desc: "CRUD for milestone queue ordering" },
54
+ { cmd: "thread", desc: "Persistent context threads for cross-session work" },
55
+ { cmd: "workstreams", desc: "Manage parallel workstreams via /gsd parallel" },
56
+ { cmd: "workspace", desc: "Manage isolated workspaces via /gsd worktree" },
57
+ { cmd: "milestone-summary", desc: "Comprehensive project/milestone summary for onboarding" },
58
+ { cmd: "review-backlog", desc: "Review and promote backlog items to milestones" },
59
+ { cmd: "inbox", desc: "Triage open GitHub issues and PRs against conventions" },
60
+ { cmd: "import", desc: "Ingest external plans with conflict detection" },
61
+ { cmd: "ingest-docs", desc: "Bootstrap .gsd/ from existing ADRs/PRDs/SPECs/docs" },
62
+ { cmd: "profile-user", desc: "Generate and persist a developer behavioral profile" },
63
+ { cmd: "settings", desc: "Configure workflow toggles and model profile" },
64
+ ];
65
+ const FLAG_RE = /(^|\s)--(quick|text|wrap-up|force|verbose|dry-run|all|auto|interactive|tdd|research|skip-research|gaps-only)(?=\s|$)/g;
66
+ /**
67
+ * Parse the common workflow flags out of a raw arg string.
68
+ * `frontier` is detected as a bare token or empty input.
69
+ * Exported for unit testing.
70
+ */
71
+ export function parseCoreFlags(raw) {
72
+ let text = raw;
73
+ const quick = /(^|\s)--quick(?=\s|$)/.test(text);
74
+ const textMode = /(^|\s)--text(?=\s|$)/.test(text);
75
+ // Strip recognized --flags so they don't pollute the idea text.
76
+ text = text.replace(FLAG_RE, " ").replace(/\s+/g, " ").trim();
77
+ const frontier = text === "" || text.toLowerCase() === "frontier";
78
+ return { text, quick, textMode, frontier };
79
+ }
80
+ /** Boolean → human-readable phrase for prompt interpolation. */
81
+ function flagPhrase(on) {
82
+ return on ? "ON" : "off";
83
+ }
84
+ /** Slugify text into a URL/path-safe form (max 40 chars). */
85
+ export function slugify(text) {
86
+ return text
87
+ .toLowerCase()
88
+ .replace(/[^a-z0-9]+/g, "-")
89
+ .replace(/^-|-$/g, "")
90
+ .slice(0, 40)
91
+ .replace(/-$/, "");
92
+ }
93
+ /**
94
+ * Return the next zero-padded 3-digit id for a numbered artifact directory.
95
+ * Looks at existing `<dir>/[0-9][0-9][0-9]-*` entries.
96
+ * Exported for unit testing.
97
+ */
98
+ export function nextArtifactId(dir) {
99
+ let max = 0;
100
+ try {
101
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
102
+ if (!entry.isDirectory())
103
+ continue;
104
+ const m = entry.name.match(/^(\d{3})-/);
105
+ if (m)
106
+ max = Math.max(max, Number.parseInt(m[1], 10));
107
+ }
108
+ }
109
+ catch {
110
+ // dir does not exist yet
111
+ }
112
+ return String(max + 1).padStart(3, "0");
113
+ }
114
+ function dispatchPrompt(args, ctx, pi) {
115
+ ctx.ui.notify(args.notify ?? `Running ${args.verb.toLowerCase()}…`, "info");
116
+ try {
117
+ const prompt = loadPrompt(args.prompt, args.vars ?? {});
118
+ pi.sendMessage({ customType: args.customType, content: prompt, display: false }, { triggerTurn: true });
119
+ }
120
+ catch (err) {
121
+ const msg = err instanceof Error ? err.message : String(err);
122
+ ctx.ui.notify(`Failed to dispatch ${args.verb.toLowerCase()}: ${msg}`, "error");
123
+ }
124
+ }
125
+ function splitAction(args) {
126
+ const trimmed = args.trim();
127
+ if (!trimmed)
128
+ return { action: "", rest: "" };
129
+ const [action = "", ...rest] = trimmed.split(/\s+/);
130
+ return { action: action.toLowerCase(), rest: rest.join(" ") };
131
+ }
132
+ const MANAGER_ACTIONS_NORMAL = [
133
+ "3. **Offer actions**, one at a time:",
134
+ " - Switch the active milestone (`/gsd queue`).",
135
+ " - Reorder queued milestones (`/gsd queue`).",
136
+ " - Park or unpark a milestone (`/gsd park` / `/gsd unpark`).",
137
+ " - Start/stop auto-mode on the active milestone (`/gsd auto` / `/gsd stop`).",
138
+ " - Run parallel milestones (`/gsd parallel`).",
139
+ ].join("\n");
140
+ const MANAGER_SUCCESS_NORMAL = [
141
+ "- The dashboard reflects canonical milestone state, not memory.",
142
+ "- Actions route to the real gsd-pi commands, not duplicates.",
143
+ "- Dependency analysis (when requested) is grounded in actual file/API overlap.",
144
+ ].join("\n");
145
+ const MANAGER_SUCCESS_READ_ONLY = [
146
+ "- The dashboard reflects canonical milestone state, not memory.",
147
+ "- Read-only mode does not route to any gsd-pi command.",
148
+ "- Dependency analysis (when requested) is grounded in actual file/API overlap.",
149
+ ].join("\n");
150
+ const MANAGER_SELECTION_NORMAL = "5. **Act on the selection** by routing to the matching gsd-pi command — do not reimplement queue/park/parallel logic inline.";
151
+ const MANAGER_SELECTION_READ_ONLY = "5. **Skip action routing.** Do not act on selections or invoke gsd-pi commands while this blocker is present.";
152
+ async function dispatchGSDCommand(command, ctx, pi) {
153
+ const { handleGSDCommand } = await import("./commands/dispatcher.js");
154
+ await handleGSDCommand(command, ctx, pi);
155
+ }
156
+ function managerReadOnlyActions(blocker) {
157
+ return [
158
+ "3. **Stay read-only.** Only display the dashboard and blockers.",
159
+ "",
160
+ "Do not offer actions or route to queue, park, auto-mode, or parallel commands until the blocker is resolved.",
161
+ "",
162
+ "Blocked state:",
163
+ blocker,
164
+ ].join("\n");
165
+ }
166
+ async function resolveManagerVars(args, ctx) {
167
+ const vars = {
168
+ analyzeDepsFlag: flagPhrase(/(?:^|\s)--analyze-deps(?=\s|$)/.test(args)),
169
+ managerActions: MANAGER_ACTIONS_NORMAL,
170
+ managerSelectionStep: MANAGER_SELECTION_NORMAL,
171
+ managerSuccessCriteria: MANAGER_SUCCESS_NORMAL,
172
+ };
173
+ // Use ctx.cwd when set; when absent fall back to process.cwd() so that the read-only
174
+ // downgrade still fires even if the caller did not populate ctx.cwd. Wrap in try/catch
175
+ // so that a missing project context (no .gsd/) returns the normal vars gracefully.
176
+ try {
177
+ return await withCommandCwd(ctx.cwd, async () => {
178
+ const base = projectRoot();
179
+ const blocker = await getUnmergedMilestoneBlockMessageForBase(base, "manager") ??
180
+ await getValidationBlockMessageForBase(base, "manager");
181
+ if (!blocker)
182
+ return vars;
183
+ return {
184
+ ...vars,
185
+ managerActions: managerReadOnlyActions(blocker),
186
+ managerSelectionStep: MANAGER_SELECTION_READ_ONLY,
187
+ managerSuccessCriteria: MANAGER_SUCCESS_READ_ONLY,
188
+ };
189
+ });
190
+ }
191
+ catch (err) {
192
+ if (err instanceof GSDNoProjectError)
193
+ return vars;
194
+ throw err;
195
+ }
196
+ }
197
+ // ─── Individual command handlers ─────────────────────────────────────────────
198
+ /** /gsd explore [topic] — Socratic ideation. */
199
+ export async function handleExplore(args, ctx, pi) {
200
+ const topic = args.trim();
201
+ dispatchPrompt({
202
+ prompt: "explore",
203
+ customType: "gsd-explore",
204
+ verb: "Explore",
205
+ vars: { topic: topic || "(no topic — ask the developer what's on their mind)" },
206
+ }, ctx, pi);
207
+ }
208
+ /** /gsd spike [idea] [--quick] [--text] | frontier */
209
+ export async function handleSpike(args, ctx, pi) {
210
+ const flags = parseCoreFlags(args);
211
+ const basePath = currentDirectoryRoot();
212
+ const spikesDir = join(basePath, ".gsd", "spikes");
213
+ mkdirSync(spikesDir, { recursive: true });
214
+ const spikeId = nextArtifactId(spikesDir);
215
+ dispatchPrompt({
216
+ prompt: "spike",
217
+ customType: "gsd-spike",
218
+ verb: "Spike",
219
+ vars: {
220
+ input: flags.text || "(frontier mode — propose what to spike next)",
221
+ quickFlag: flagPhrase(flags.quick),
222
+ textFlag: flagPhrase(flags.textMode),
223
+ frontierFlag: flagPhrase(flags.frontier),
224
+ spikeId,
225
+ },
226
+ }, ctx, pi);
227
+ }
228
+ /** /gsd sketch [idea] [--quick] [--text] | frontier */
229
+ export async function handleSketch(args, ctx, pi) {
230
+ const flags = parseCoreFlags(args);
231
+ const basePath = currentDirectoryRoot();
232
+ const sketchesDir = join(basePath, ".gsd", "sketches");
233
+ mkdirSync(sketchesDir, { recursive: true });
234
+ const sketchId = nextArtifactId(sketchesDir);
235
+ dispatchPrompt({
236
+ prompt: "sketch",
237
+ customType: "gsd-sketch",
238
+ verb: "Sketch",
239
+ vars: {
240
+ input: flags.text || "(frontier mode — propose what to sketch next)",
241
+ quickFlag: flagPhrase(flags.quick),
242
+ textFlag: flagPhrase(flags.textMode),
243
+ frontierFlag: flagPhrase(flags.frontier),
244
+ sketchId,
245
+ },
246
+ }, ctx, pi);
247
+ }
248
+ // ─── Batch 2: codebase intelligence ──────────────────────────────────────────
249
+ /**
250
+ * Parse a `--paths a,b,c` flag safely for map-codebase incremental remap.
251
+ * Rejects values containing `..`, leading `/`, or shell metacharacters.
252
+ * Exported for unit testing.
253
+ */
254
+ export function parsePathsFlag(args) {
255
+ const m = args.match(/--paths\s+(\S+)/i);
256
+ if (!m)
257
+ return "";
258
+ const raw = m[1];
259
+ const parts = raw.split(",").map((p) => p.trim()).filter(Boolean);
260
+ const bad = /[;`$&|<>]/;
261
+ const safe = parts.filter((p) => !p.startsWith("/") && !p.includes("..") && !bad.test(p));
262
+ return safe.length ? safe.join(",") : "";
263
+ }
264
+ /** /gsd map-codebase [--paths a,b] [--focus ...] — produce .gsd/codebase/ docs. */
265
+ export async function handleMapCodebase(args, ctx, pi) {
266
+ const basePath = currentDirectoryRoot();
267
+ const outputDir = join(basePath, ".gsd", "codebase");
268
+ mkdirSync(outputDir, { recursive: true });
269
+ const paths = parsePathsFlag(args);
270
+ const focus = parseFlagValue(args, "--focus") ?? "";
271
+ const scopeParts = [];
272
+ if (paths)
273
+ scopeParts.push(`Incremental remap — scope exploration to: ${paths}`);
274
+ else
275
+ scopeParts.push("Whole-repo scan.");
276
+ if (focus)
277
+ scopeParts.push(`Focus area: ${focus}`);
278
+ dispatchPrompt({
279
+ prompt: "map-codebase",
280
+ customType: "gsd-map-codebase",
281
+ verb: "Map codebase",
282
+ vars: { scope: scopeParts.join(" "), outputDir: outputDir.replaceAll("\\", "/") },
283
+ }, ctx, pi);
284
+ }
285
+ /** /gsd docs-update [--force] [--verify-only] — generate/update/verify docs. */
286
+ export async function handleDocsUpdate(args, ctx, pi) {
287
+ const force = /(^|\s)--force(?=\s|$)/.test(args);
288
+ const verifyOnly = /(^|\s)--verify-only(?=\s|$)/.test(args);
289
+ const mode = verifyOnly
290
+ ? "Verify-only — check existing docs against the codebase; do not write new docs."
291
+ : force
292
+ ? "Force — regenerate all canonical docs even if they look current."
293
+ : "Default — generate missing docs, update stale ones, verify existing claims.";
294
+ const docsProcess = verifyOnly
295
+ ? [
296
+ "1. **Detect the doc structure.** Find existing Markdown docs (README, docs/, ADRs, API docs, CONTRIBUTING, etc.) and any doc tooling (docusaurus, vitepress, mkdocs, storybook). Detect project type (monorepo, cli-tool, saas, open-source-library, generic) from manifests and routes.",
297
+ "",
298
+ "2. **Assemble a read-only review manifest.** List existing hand-written docs to review for accuracy. Note missing canonical docs as gaps only; do not create them.",
299
+ "",
300
+ "3. **Verify existing docs.** For each existing doc, check factual claims against the codebase: function signatures, file paths, configuration keys, CLI flags, environment variables. Flag inaccuracies and gaps.",
301
+ "",
302
+ "4. **Summarize.** Report verified docs, inaccuracies found, missing-doc gaps, and fixes that would need a writable follow-up. Do not edit files.",
303
+ ].join("\n")
304
+ : [
305
+ "1. **Detect the doc structure.** Find existing Markdown docs (README, docs/, ADRs, API docs, CONTRIBUTING, etc.) and any doc tooling (docusaurus, vitepress, mkdocs, storybook). Detect project type (monorepo, cli-tool, saas, open-source-library, generic) from manifests and routes.",
306
+ "",
307
+ "2. **Assemble a work manifest.** List every doc item to touch: canonical doc types the project is missing, and existing hand-written docs to review for accuracy. Track each item so nothing is lost between steps.",
308
+ "",
309
+ "3. **Write missing canonical docs.** For the detected project type, create the docs that should exist (e.g. README, CONTRIBUTING, ARCHITECTURE, API reference, CHANGELOG). Ground every claim in the live code.",
310
+ "",
311
+ "4. **Verify existing docs.** For each existing doc, check factual claims against the codebase: function signatures, file paths, configuration keys, CLI flags, environment variables. Flag inaccuracies and gaps.",
312
+ "",
313
+ "5. **Fix loop (bounded).** Correct verified inaccuracies directly. Do not rewrite docs wholesale — fix the specific wrong claims.",
314
+ "",
315
+ "6. **Summarize.** Report: docs created, docs updated, inaccuracies fixed, gaps that need a human decision.",
316
+ ].join("\n");
317
+ const docsSuccessCriteria = verifyOnly
318
+ ? [
319
+ "- Every existing doc claim that references code (paths, signatures, flags, env vars) is checked against the live codebase.",
320
+ "- Missing docs and inaccuracies are reported as findings only.",
321
+ "- No documentation files are created, edited, renamed, or deleted.",
322
+ "- No work item from the manifest is silently dropped.",
323
+ ].join("\n")
324
+ : [
325
+ "- Every doc claim that references code (paths, signatures, flags, env vars) is verified against the live codebase.",
326
+ "- New docs match the project's detected type and existing style.",
327
+ "- Fixes are surgical, not rewrites.",
328
+ "- No work item from the manifest is silently dropped.",
329
+ ].join("\n");
330
+ dispatchPrompt({
331
+ prompt: "docs-update",
332
+ customType: "gsd-docs-update",
333
+ verb: "Docs update",
334
+ vars: { mode, process: docsProcess, successCriteria: docsSuccessCriteria },
335
+ }, ctx, pi);
336
+ }
337
+ /** /gsd graphify [build|query <term>|status|diff] — knowledge graph. */
338
+ export async function handleGraphify(args, ctx, pi) {
339
+ const basePath = currentDirectoryRoot();
340
+ const knowledgeDir = join(basePath, ".gsd", "knowledge");
341
+ if (!existsSync(knowledgeDir))
342
+ mkdirSync(knowledgeDir, { recursive: true });
343
+ const action = args.trim() || "build";
344
+ dispatchPrompt({ prompt: "graphify", customType: "gsd-graphify", verb: "Graphify", vars: { action } }, ctx, pi);
345
+ }
346
+ /** /gsd stats — project statistics. */
347
+ export async function handleStats(_args, ctx, pi) {
348
+ dispatchPrompt({ prompt: "stats", customType: "gsd-stats", verb: "Stats" }, ctx, pi);
349
+ }
350
+ /**
351
+ * Resolve the progress mode from flags. Exported for unit testing.
352
+ */
353
+ export function parseProgressMode(args) {
354
+ if (/(?:^|\s)--forensic(?=\s|$)/.test(args))
355
+ return "forensic";
356
+ const doMatch = args.match(/--do\s+"([^"]*)"/);
357
+ if (doMatch)
358
+ return `do: ${doMatch[1]}`;
359
+ if (/(?:^|\s)--next(?=\s|$)/.test(args))
360
+ return "next";
361
+ return "default";
362
+ }
363
+ /** /gsd progress [--forensic|--next|--do "..."] — situational awareness. */
364
+ export async function handleProgress(args, ctx, pi) {
365
+ if (/(?:^|\s)--next(?=\s|$)/.test(args)) {
366
+ await dispatchGSDCommand("next", ctx, pi);
367
+ return;
368
+ }
369
+ const doMatch = args.match(/--do\s+"([^"]*)"/);
370
+ if (doMatch) {
371
+ // Re-dispatch as a quick task so the task actually runs.
372
+ // `quick` is not in either blocked-command set, so the re-dispatch passes guards cleanly.
373
+ await dispatchGSDCommand(`quick ${doMatch[1]}`, ctx, pi);
374
+ return;
375
+ }
376
+ const mode = parseProgressMode(args);
377
+ dispatchPrompt({ prompt: "progress", customType: "gsd-progress", verb: "Progress", vars: { mode } }, ctx, pi);
378
+ }
379
+ /** /gsd health [--repair] [--context] — .gsd/ integrity check. */
380
+ export async function handleHealth(args, ctx, pi) {
381
+ const repair = /(^|\s)--repair(?=\s|$)/.test(args);
382
+ const contextMode = /(^|\s)--context(?=\s|$)/.test(args);
383
+ dispatchPrompt({
384
+ prompt: "health",
385
+ customType: "gsd-health",
386
+ verb: "Health check",
387
+ vars: {
388
+ repairFlag: flagPhrase(repair),
389
+ contextFlag: flagPhrase(contextMode),
390
+ },
391
+ }, ctx, pi);
392
+ }
393
+ /** /gsd surface [list|status|profile <name>|disable <cluster>|enable <cluster>|reset] */
394
+ export async function handleSurface(args, ctx, pi) {
395
+ const action = args.trim() || "status";
396
+ dispatchPrompt({ prompt: "surface", customType: "gsd-surface", verb: "Surface", vars: { action } }, ctx, pi);
397
+ }
398
+ // ─── Batch 3: review / audit ─────────────────────────────────────────────────
399
+ /**
400
+ * Extract a comma-separated value list for a `--flag value1,value2` option.
401
+ * Exported for unit testing.
402
+ */
403
+ export function parseListFlag(args, flag) {
404
+ const re = new RegExp(`(?:^|\\s)${flag}\\s+([^\\s]+)`, "i");
405
+ const m = args.match(re);
406
+ return m ? m[1] : "";
407
+ }
408
+ /**
409
+ * Determine the review id (zero-padded) for the next review artifact under
410
+ * `.gsd/reviews/`. Exported for unit testing.
411
+ */
412
+ export function nextReviewId(reviewsDir) {
413
+ return nextArtifactId(reviewsDir);
414
+ }
415
+ /** /gsd code-review [target] [--depth quick|standard|deep] [--files ...] [--fix] */
416
+ export async function handleCodeReview(args, ctx, pi) {
417
+ const depthMatch = args.match(/--depth\s+(quick|standard|deep)/i);
418
+ const depth = depthMatch ? depthMatch[1].toLowerCase() : "standard";
419
+ const files = parseListFlag(args, "--files");
420
+ const fix = /(?:^|\s)--fix(?=\s|$)/.test(args);
421
+ const scope = files
422
+ ? `Explicit files: ${files}`
423
+ : "Changed source files for the active slice (derived from recent commits / SUMMARY), excluding .gsd/, lockfiles, generated, and docs.";
424
+ const basePath = currentDirectoryRoot();
425
+ const reviewsDir = join(basePath, ".gsd", "reviews");
426
+ mkdirSync(reviewsDir, { recursive: true });
427
+ const reviewId = nextReviewId(reviewsDir);
428
+ dispatchPrompt({
429
+ prompt: "code-review",
430
+ customType: "gsd-code-review",
431
+ verb: "Code review",
432
+ vars: {
433
+ scope,
434
+ depth,
435
+ fixMode: flagPhrase(fix),
436
+ reviewId,
437
+ },
438
+ }, ctx, pi);
439
+ }
440
+ const REVIEWER_FLAGS = ["--gemini", "--claude", "--codex", "--opencode", "--qwen", "--cursor", "--agy", "--all"];
441
+ /** /gsd review [--milestone Mxxx] [--claude] [--codex] ... [--all] */
442
+ export async function handleReview(args, ctx, pi) {
443
+ const milestoneMatch = args.match(/--milestone\s+(\S+)/i);
444
+ const target = milestoneMatch ? `Milestone ${milestoneMatch[1]}` : "Active slice (plan + recent execution)";
445
+ const requested = REVIEWER_FLAGS.filter((f) => new RegExp(`(?:^|\\s)${f}(?=\\s|$)`).test(args));
446
+ const reviewers = requested.length ? requested.map((f) => f.slice(2)).join(", ") : "default (single internal reviewer)";
447
+ dispatchPrompt({
448
+ prompt: "review",
449
+ customType: "gsd-review",
450
+ verb: "Review",
451
+ vars: { target, reviewers },
452
+ }, ctx, pi);
453
+ }
454
+ /** /gsd audit-milestone [Mxxx] */
455
+ export async function handleAuditMilestone(args, ctx, pi) {
456
+ const id = args.trim();
457
+ const target = id ? `Milestone ${id}` : "Active or most-recently-completed milestone";
458
+ dispatchPrompt({ prompt: "audit-milestone", customType: "gsd-audit-milestone", verb: "Audit milestone", vars: { target } }, ctx, pi);
459
+ }
460
+ /** /gsd audit-uat [--verify] */
461
+ export async function handleAuditUat(args, ctx, pi) {
462
+ const verify = /(?:^|\s)--verify(?=\s|$)/.test(args);
463
+ dispatchPrompt({
464
+ prompt: "audit-uat",
465
+ customType: "gsd-audit-uat",
466
+ verb: "Audit UAT",
467
+ vars: { verifyMode: flagPhrase(verify) },
468
+ }, ctx, pi);
469
+ }
470
+ /** /gsd audit-fix [--source <audit>] [--severity medium|high|all] [--max N] [--dry-run] */
471
+ export async function handleAuditFix(args, ctx, pi) {
472
+ const sourceMatch = args.match(/--source\s+(\S+)/i);
473
+ const sevMatch = args.match(/--severity\s+(medium|high|all)/i);
474
+ const maxMatch = args.match(/--max\s+(\d+)/);
475
+ const dryRun = /(?:^|\s)--dry-run(?=\s|$)/.test(args);
476
+ dispatchPrompt({
477
+ prompt: "audit-fix",
478
+ customType: "gsd-audit-fix",
479
+ verb: "Audit-fix",
480
+ vars: {
481
+ source: sourceMatch ? sourceMatch[1] : "most recent audit-uat / scan findings",
482
+ severity: sevMatch ? sevMatch[1] : "all",
483
+ maxFixes: maxMatch ? maxMatch[1] : "(no cap)",
484
+ dryRun: flagPhrase(dryRun),
485
+ },
486
+ }, ctx, pi);
487
+ }
488
+ /** /gsd ui-review [target] */
489
+ export async function handleUiReview(args, ctx, pi) {
490
+ const target = args.trim() || "Implemented frontend for the active milestone/slice";
491
+ const basePath = currentDirectoryRoot();
492
+ const reviewsDir = join(basePath, ".gsd", "reviews");
493
+ mkdirSync(reviewsDir, { recursive: true });
494
+ const reviewId = nextReviewId(reviewsDir);
495
+ dispatchPrompt({ prompt: "ui-review", customType: "gsd-ui-review", verb: "UI review", vars: { target, reviewId } }, ctx, pi);
496
+ }
497
+ /** /gsd secure-phase [target] */
498
+ export async function handleSecurePhase(args, ctx, pi) {
499
+ const target = args.trim() || "Active milestone/slice";
500
+ dispatchPrompt({ prompt: "secure-phase", customType: "gsd-secure-phase", verb: "Security audit", vars: { target } }, ctx, pi);
501
+ }
502
+ /** /gsd validate-phase [target] */
503
+ export async function handleValidatePhase(args, ctx, pi) {
504
+ const target = args.trim() || "Active milestone/slice";
505
+ dispatchPrompt({ prompt: "validate-phase", customType: "gsd-validate-phase", verb: "Validation audit", vars: { target } }, ctx, pi);
506
+ }
507
+ /** /gsd verify-work [target] */
508
+ export async function handleVerifyWork(args, ctx, pi) {
509
+ const target = args.trim() || "Active milestone/slice";
510
+ dispatchPrompt({ prompt: "verify-work", customType: "gsd-verify-work", verb: "Verify work (UAT)", vars: { target } }, ctx, pi);
511
+ }
512
+ /** /gsd plan-review-convergence [target] [--claude] [--codex] ... [--max-cycles N] */
513
+ export async function handlePlanReviewConvergence(args, ctx, pi) {
514
+ const milestoneMatch = args.match(/--milestone\s+(\S+)/i);
515
+ const target = milestoneMatch ? `Milestone ${milestoneMatch[1]}` : "Active slice/milestone plan";
516
+ const requested = REVIEWER_FLAGS.filter((f) => new RegExp(`(?:^|\\s)${f}(?=\\s|$)`).test(args));
517
+ const reviewers = requested.length ? requested.map((f) => f.slice(2)).join(", ") : "default (single internal reviewer)";
518
+ const maxMatch = args.match(/--max-cycles\s+(\d+)/);
519
+ dispatchPrompt({
520
+ prompt: "plan-review-convergence",
521
+ customType: "gsd-plan-review-convergence",
522
+ verb: "Plan convergence",
523
+ vars: { target, reviewers, maxCycles: maxMatch ? maxMatch[1] : "3" },
524
+ }, ctx, pi);
525
+ }
526
+ // ─── Batch 4: workflow phases ────────────────────────────────────────────────
527
+ /** Resolve a milestone/slice target from --milestone/--slice flags. */
528
+ function resolveMsTarget(args, fallback) {
529
+ const m = args.match(/--milestone\s+(\S+)/i);
530
+ if (m)
531
+ return `Milestone ${m[1]}`;
532
+ const s = args.match(/--slice\s+(\S+)/i);
533
+ if (s)
534
+ return `Slice ${s[1]}`;
535
+ return fallback;
536
+ }
537
+ /** /gsd discuss-phase [--milestone Mxxx] [--auto] [--text] */
538
+ export async function handleDiscussPhase(args, ctx, pi) {
539
+ const target = resolveMsTarget(args, "Active milestone/slice");
540
+ dispatchPrompt({
541
+ prompt: "discuss-phase",
542
+ customType: "gsd-discuss-phase",
543
+ verb: "Discuss phase",
544
+ vars: {
545
+ target,
546
+ autoFlag: flagPhrase(/(?:^|\s)--auto(?=\s|$)/.test(args)),
547
+ textFlag: flagPhrase(parseCoreFlags(args).textMode),
548
+ },
549
+ }, ctx, pi);
550
+ }
551
+ /** /gsd plan-phase [--milestone Mxxx] [--auto] [--research|--skip-research] [--tdd] */
552
+ export async function handlePlanPhase(args, ctx, pi) {
553
+ const target = resolveMsTarget(args, "Active milestone/slice");
554
+ const research = /(?:^|\s)--research(?=\s|$)/.test(args);
555
+ const skipResearch = /(?:^|\s)--skip-research(?=\s|$)/.test(args);
556
+ const researchFlag = skipResearch ? "skip-research" : research ? "research" : "off";
557
+ dispatchPrompt({
558
+ prompt: "plan-phase",
559
+ customType: "gsd-plan-phase",
560
+ verb: "Plan phase",
561
+ vars: {
562
+ target,
563
+ autoFlag: flagPhrase(/(?:^|\s)--auto(?=\s|$)/.test(args)),
564
+ researchFlag,
565
+ tddFlag: flagPhrase(/(?:^|\s)--tdd(?=\s|$)/.test(args)),
566
+ },
567
+ }, ctx, pi);
568
+ }
569
+ /** /gsd execute-phase [--milestone Mxxx] [--wave N] [--gaps-only] [--interactive] [--tdd] */
570
+ export async function handleExecutePhase(args, ctx, pi) {
571
+ const target = resolveMsTarget(args, "Active milestone/slice");
572
+ const waveMatch = args.match(/--wave\s+(\d+)/);
573
+ dispatchPrompt({
574
+ prompt: "execute-phase",
575
+ customType: "gsd-execute-phase",
576
+ verb: "Execute phase",
577
+ vars: {
578
+ target,
579
+ waveFlag: waveMatch ? waveMatch[1] : "(sequential)",
580
+ gapsOnlyFlag: flagPhrase(/(?:^|\s)--gaps-only(?=\s|$)/.test(args)),
581
+ interactiveFlag: flagPhrase(/(?:^|\s)--interactive(?=\s|$)/.test(args)),
582
+ tddFlag: flagPhrase(/(?:^|\s)--tdd(?=\s|$)/.test(args)),
583
+ },
584
+ }, ctx, pi);
585
+ }
586
+ /** /gsd spec-phase [--milestone Mxxx] [--auto] [--text] */
587
+ export async function handleSpecPhase(args, ctx, pi) {
588
+ const target = resolveMsTarget(args, "Active milestone/slice");
589
+ dispatchPrompt({
590
+ prompt: "spec-phase",
591
+ customType: "gsd-spec-phase",
592
+ verb: "Spec phase",
593
+ vars: {
594
+ target,
595
+ autoFlag: flagPhrase(/(?:^|\s)--auto(?=\s|$)/.test(args)),
596
+ textFlag: flagPhrase(parseCoreFlags(args).textMode),
597
+ },
598
+ }, ctx, pi);
599
+ }
600
+ /** /gsd mvp-phase [--milestone Mxxx] */
601
+ export async function handleMvpPhase(args, ctx, pi) {
602
+ const target = resolveMsTarget(args, "Active milestone");
603
+ dispatchPrompt({ prompt: "mvp-phase", customType: "gsd-mvp-phase", verb: "MVP phase", vars: { target } }, ctx, pi);
604
+ }
605
+ /** /gsd ui-phase [--milestone Mxxx] */
606
+ export async function handleUiPhase(args, ctx, pi) {
607
+ const target = resolveMsTarget(args, "Active frontend milestone/slice");
608
+ dispatchPrompt({ prompt: "ui-phase", customType: "gsd-ui-phase", verb: "UI phase", vars: { target } }, ctx, pi);
609
+ }
610
+ /** /gsd ai-integration-phase [--milestone Mxxx] */
611
+ export async function handleAiIntegrationPhase(args, ctx, pi) {
612
+ const target = resolveMsTarget(args, "Active AI milestone/slice");
613
+ dispatchPrompt({ prompt: "ai-integration-phase", customType: "gsd-ai-integration-phase", verb: "AI integration phase", vars: { target } }, ctx, pi);
614
+ }
615
+ /** /gsd ultraplan-phase [--milestone Mxxx] */
616
+ export async function handleUltraplanPhase(args, ctx, pi) {
617
+ const target = resolveMsTarget(args, "Active milestone/slice");
618
+ dispatchPrompt({ prompt: "ultraplan-phase", customType: "gsd-ultraplan-phase", verb: "Ultraplan phase", vars: { target } }, ctx, pi);
619
+ }
620
+ /**
621
+ * Parse autonomous scope flags (--from/--to/--only). Exported for unit testing.
622
+ */
623
+ export function parseAutonomousScope(args) {
624
+ const from = args.match(/--from\s+(\d+)/);
625
+ const to = args.match(/--to\s+(\d+)/);
626
+ const only = args.match(/--only\s+(\d+)/);
627
+ if (only)
628
+ return `Only slice/milestone ${only[1]}`;
629
+ const parts = [];
630
+ if (from)
631
+ parts.push(`from ${from[1]}`);
632
+ if (to)
633
+ parts.push(`to ${to[1]}`);
634
+ return parts.length ? `All remaining work ${parts.join(" ")}` : "All remaining work on the active milestone";
635
+ }
636
+ /** /gsd autonomous [--from N] [--to N] [--only N] [--interactive] [--converge] */
637
+ export async function handleAutonomous(args, ctx, pi) {
638
+ dispatchPrompt({
639
+ prompt: "autonomous",
640
+ customType: "gsd-autonomous",
641
+ verb: "Autonomous",
642
+ vars: {
643
+ scope: parseAutonomousScope(args),
644
+ interactiveFlag: flagPhrase(/(?:^|\s)--interactive(?=\s|$)/.test(args)),
645
+ convergeFlag: flagPhrase(/(?:^|\s)--converge(?=\s|$)/.test(args)),
646
+ },
647
+ }, ctx, pi);
648
+ }
649
+ /** /gsd pause-work [--report] */
650
+ export async function handlePauseWork(args, ctx, pi) {
651
+ dispatchPrompt({
652
+ prompt: "pause-work",
653
+ customType: "gsd-pause-work",
654
+ verb: "Pause work",
655
+ vars: { reportFlag: flagPhrase(/(?:^|\s)--report(?=\s|$)/.test(args)) },
656
+ }, ctx, pi);
657
+ }
658
+ /** /gsd resume-work */
659
+ export async function handleResumeWork(_args, ctx, pi) {
660
+ dispatchPrompt({ prompt: "resume-work", customType: "gsd-resume-work", verb: "Resume work" }, ctx, pi);
661
+ }
662
+ // ─── Batch 5: project management ─────────────────────────────────────────────
663
+ /** /gsd manager [--analyze-deps] */
664
+ export async function handleManager(args, ctx, pi) {
665
+ const vars = await resolveManagerVars(args, ctx);
666
+ dispatchPrompt({
667
+ prompt: "manager",
668
+ customType: "gsd-manager",
669
+ verb: "Manager",
670
+ vars,
671
+ }, ctx, pi);
672
+ }
673
+ /** /gsd phase [add|insert|remove|edit|list] <target> */
674
+ export async function handlePhase(args, ctx, pi) {
675
+ const action = args.trim() || "list";
676
+ const parsed = splitAction(action);
677
+ if (parsed.action === "list" || parsed.action === "status") {
678
+ await dispatchGSDCommand("queue", ctx, pi);
679
+ return;
680
+ }
681
+ if (["add", "create", "new"].includes(parsed.action) && !parsed.rest) {
682
+ await dispatchGSDCommand("new-milestone", ctx, pi);
683
+ return;
684
+ }
685
+ dispatchPrompt({ prompt: "phase", customType: "gsd-phase", verb: "Phase", vars: { action } }, ctx, pi);
686
+ }
687
+ /** /gsd thread [list|close <slug>|status <slug>|<name>] */
688
+ export async function handleThread(args, ctx, pi) {
689
+ const action = args.trim() || "list";
690
+ dispatchPrompt({ prompt: "thread", customType: "gsd-thread", verb: "Thread", vars: { action } }, ctx, pi);
691
+ }
692
+ /** /gsd workstreams [list|create|switch|progress|pause|resume|complete] [milestone] */
693
+ export async function handleWorkstreams(args, ctx, pi) {
694
+ const action = args.trim() || "list";
695
+ const parsed = splitAction(action);
696
+ let parallelAction = "";
697
+ if (parsed.action === "list" || parsed.action === "status" || parsed.action === "progress") {
698
+ parallelAction = "status";
699
+ }
700
+ else if (parsed.action === "create") {
701
+ parallelAction = "start";
702
+ }
703
+ else if (parsed.action === "complete") {
704
+ parallelAction = "merge";
705
+ }
706
+ else if (parsed.action === "switch") {
707
+ parallelAction = "watch";
708
+ }
709
+ else if (["start", "stop", "pause", "resume", "merge", "watch"].includes(parsed.action)) {
710
+ parallelAction = parsed.action;
711
+ }
712
+ if (parallelAction) {
713
+ if ((parsed.action === "create" || parsed.action === "start") && parsed.rest) {
714
+ ctx.ui.notify("workstreams create does not accept a milestone target. Run /gsd parallel start to start all eligible milestones.", "warning");
715
+ return;
716
+ }
717
+ if (parsed.action === "progress" && parsed.rest) {
718
+ ctx.ui.notify("workstreams progress does not accept a milestone target. Run /gsd parallel status to show worker status.", "warning");
719
+ return;
720
+ }
721
+ if (parsed.action === "switch" && parsed.rest) {
722
+ ctx.ui.notify("workstreams switch does not accept a milestone target. Run /gsd parallel watch to monitor workers.", "warning");
723
+ return;
724
+ }
725
+ await dispatchGSDCommand(`parallel ${parallelAction} ${parsed.rest}`.trim(), ctx, pi);
726
+ return;
727
+ }
728
+ dispatchPrompt({ prompt: "workstreams", customType: "gsd-workstreams", verb: "Workstreams", vars: { action } }, ctx, pi);
729
+ }
730
+ /** /gsd workspace [--list|--remove|--merge|--clean] [name] */
731
+ export async function handleWorkspace(args, ctx, pi) {
732
+ const action = args.trim() || "--list";
733
+ const parsed = splitAction(action);
734
+ if (parsed.action === "--list" || parsed.action === "list" || parsed.action === "ls") {
735
+ await dispatchGSDCommand("worktree list", ctx, pi);
736
+ return;
737
+ }
738
+ if (parsed.action === "--remove" || parsed.action === "remove" || parsed.action === "rm") {
739
+ await dispatchGSDCommand(`worktree remove ${parsed.rest}`.trim(), ctx, pi);
740
+ return;
741
+ }
742
+ if (parsed.action === "--merge" || parsed.action === "merge") {
743
+ await dispatchGSDCommand(`worktree merge ${parsed.rest}`.trim(), ctx, pi);
744
+ return;
745
+ }
746
+ if (parsed.action === "--clean" || parsed.action === "clean") {
747
+ await dispatchGSDCommand("worktree clean", ctx, pi);
748
+ return;
749
+ }
750
+ if (parsed.action === "--new" || parsed.action === "new" || parsed.action === "create") {
751
+ ctx.ui.notify("Unsupported workspace action. Use /gsd worktree list, remove, merge, or clean.", "warning");
752
+ return;
753
+ }
754
+ dispatchPrompt({ prompt: "workspace", customType: "gsd-workspace", verb: "Workspace", vars: { action } }, ctx, pi);
755
+ }
756
+ /** /gsd milestone-summary [Mxxx] */
757
+ export async function handleMilestoneSummary(args, ctx, pi) {
758
+ const id = args.trim();
759
+ const target = id ? `Milestone ${id}` : "Whole project (all milestones)";
760
+ dispatchPrompt({ prompt: "milestone-summary", customType: "gsd-milestone-summary", verb: "Milestone summary", vars: { target } }, ctx, pi);
761
+ }
762
+ /** /gsd review-backlog */
763
+ export async function handleReviewBacklog(_args, ctx, pi) {
764
+ dispatchPrompt({ prompt: "review-backlog", customType: "gsd-review-backlog", verb: "Review backlog" }, ctx, pi);
765
+ }
766
+ /**
767
+ * Parse inbox focus flags. Exported for unit testing.
768
+ */
769
+ export function parseInboxFocus(args) {
770
+ const issues = /(?:^|\s)--issues(?=\s|$)/.test(args);
771
+ const prs = /(?:^|\s)--prs(?=\s|$)/.test(args);
772
+ if (issues && prs)
773
+ return "issues and PRs";
774
+ if (issues)
775
+ return "issues only";
776
+ if (prs)
777
+ return "PRs only";
778
+ return "issues and PRs (default)";
779
+ }
780
+ function parseFlagValue(args, flag) {
781
+ const escaped = flag.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
782
+ const pattern = new RegExp(`(?:^|\\s)${escaped}\\s+` +
783
+ `(?!--)` +
784
+ `(?:"([^"]*)"|'([^']*)'|([^\\s].*?))` +
785
+ `(?=\\s--[\\w-]+|$)`);
786
+ const match = args.match(pattern);
787
+ if (!match)
788
+ return null;
789
+ return (match[1] ?? match[2] ?? match[3] ?? "").trim();
790
+ }
791
+ /** /gsd inbox [--issues|--prs] [--label <name>] [--close-incomplete] [--repo owner/repo] */
792
+ export async function handleInbox(args, ctx, pi) {
793
+ const repo = parseFlagValue(args, "--repo");
794
+ const label = parseFlagValue(args, "--label");
795
+ if (/(?:^|\s)--repo(?=\s|$)/.test(args) && !repo) {
796
+ ctx.ui.notify("--repo requires a value. Example: /gsd inbox --repo owner/repo", "warning");
797
+ return;
798
+ }
799
+ if (/(?:^|\s)--label(?=\s|$)/.test(args) && !label) {
800
+ ctx.ui.notify("--label requires a value. Example: /gsd inbox --label \"help wanted\"", "warning");
801
+ return;
802
+ }
803
+ dispatchPrompt({
804
+ prompt: "inbox",
805
+ customType: "gsd-inbox",
806
+ verb: "Inbox",
807
+ vars: {
808
+ focusFlag: parseInboxFocus(args),
809
+ labelFlag: label ?? "(none)",
810
+ closeIncompleteFlag: flagPhrase(/(?:^|\s)--close-incomplete(?=\s|$)/.test(args)),
811
+ repo: repo ?? "the project's repo",
812
+ },
813
+ }, ctx, pi);
814
+ }
815
+ /** /gsd import --from <filepath> | --from-gsd2 [--resolve auto|interactive] */
816
+ export async function handleImport(args, ctx, pi) {
817
+ const fromMatch = args.match(/--from\s+(\S+)/);
818
+ const isGsd2 = /(?:^|\s)--from-gsd2(?=\s|$)/.test(args);
819
+ const resolveMatch = args.match(/--resolve\s+(auto|interactive)/i);
820
+ const source = fromMatch
821
+ ? `External plan file: ${fromMatch[1]}`
822
+ : isGsd2
823
+ ? "legacy .planning/ directory (migration source)"
824
+ : "(no source specified — ask for --from <filepath> or --from-gsd2)";
825
+ dispatchPrompt({
826
+ prompt: "import",
827
+ customType: "gsd-import",
828
+ verb: "Import",
829
+ vars: {
830
+ source,
831
+ resolveFlag: resolveMatch ? resolveMatch[1] : "interactive",
832
+ },
833
+ }, ctx, pi);
834
+ }
835
+ /** /gsd ingest-docs [path] [--mode new|merge] [--manifest <file>] [--resolve auto|interactive] */
836
+ export async function handleIngestDocs(args, ctx, pi) {
837
+ const modeMatch = args.match(/--mode\s+(new|merge)/i);
838
+ const manifestMatch = args.match(/--manifest\s+(\S+)/);
839
+ const resolveMatch = args.match(/--resolve\s+(auto|interactive)/i);
840
+ const flagStripped = args.replace(/--\S+(\s+\S+)?/g, "").trim();
841
+ dispatchPrompt({
842
+ prompt: "ingest-docs",
843
+ customType: "gsd-ingest-docs",
844
+ verb: "Ingest docs",
845
+ vars: {
846
+ path: flagStripped || "(repo root)",
847
+ modeFlag: modeMatch ? modeMatch[1] : "new",
848
+ manifestFlag: manifestMatch ? manifestMatch[1] : "(none — discover all)",
849
+ resolveFlag: resolveMatch ? resolveMatch[1] : "interactive",
850
+ },
851
+ }, ctx, pi);
852
+ }
853
+ /** /gsd profile-user [--questionnaire] [--refresh] */
854
+ export async function handleProfileUser(args, ctx, pi) {
855
+ dispatchPrompt({
856
+ prompt: "profile-user",
857
+ customType: "gsd-profile-user",
858
+ verb: "Profile user",
859
+ vars: {
860
+ questionnaireFlag: flagPhrase(/(?:^|\s)--questionnaire(?=\s|$)/.test(args)),
861
+ refreshFlag: flagPhrase(/(?:^|\s)--refresh(?=\s|$)/.test(args)),
862
+ },
863
+ }, ctx, pi);
864
+ }
865
+ /** /gsd settings */
866
+ export async function handleSettings(_args, ctx, pi) {
867
+ dispatchPrompt({ prompt: "settings", customType: "gsd-settings", verb: "Settings" }, ctx, pi);
868
+ }