@opengsd/get-shit-done-redux 1.0.0

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 (1466) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja-JP.md +870 -0
  3. package/README.ko-KR.md +861 -0
  4. package/README.md +300 -0
  5. package/README.pt-BR.md +492 -0
  6. package/README.zh-CN.md +842 -0
  7. package/agents/gsd-advisor-researcher.md +127 -0
  8. package/agents/gsd-ai-researcher.md +133 -0
  9. package/agents/gsd-assumptions-analyzer.md +105 -0
  10. package/agents/gsd-code-fixer.md +668 -0
  11. package/agents/gsd-code-reviewer.md +387 -0
  12. package/agents/gsd-codebase-mapper.md +853 -0
  13. package/agents/gsd-debug-session-manager.md +314 -0
  14. package/agents/gsd-debugger.md +1452 -0
  15. package/agents/gsd-doc-classifier.md +168 -0
  16. package/agents/gsd-doc-synthesizer.md +204 -0
  17. package/agents/gsd-doc-verifier.md +217 -0
  18. package/agents/gsd-doc-writer.md +615 -0
  19. package/agents/gsd-domain-researcher.md +153 -0
  20. package/agents/gsd-eval-auditor.md +191 -0
  21. package/agents/gsd-eval-planner.md +154 -0
  22. package/agents/gsd-executor.md +774 -0
  23. package/agents/gsd-framework-selector.md +160 -0
  24. package/agents/gsd-integration-checker.md +470 -0
  25. package/agents/gsd-intel-updater.md +342 -0
  26. package/agents/gsd-nyquist-auditor.md +203 -0
  27. package/agents/gsd-pattern-mapper.md +335 -0
  28. package/agents/gsd-phase-researcher.md +928 -0
  29. package/agents/gsd-plan-checker.md +978 -0
  30. package/agents/gsd-planner.md +1278 -0
  31. package/agents/gsd-project-researcher.md +677 -0
  32. package/agents/gsd-research-synthesizer.md +247 -0
  33. package/agents/gsd-roadmapper.md +688 -0
  34. package/agents/gsd-security-auditor.md +155 -0
  35. package/agents/gsd-ui-auditor.md +495 -0
  36. package/agents/gsd-ui-checker.md +309 -0
  37. package/agents/gsd-ui-researcher.md +380 -0
  38. package/agents/gsd-user-profiler.md +171 -0
  39. package/agents/gsd-verifier.md +917 -0
  40. package/bin/gsd-sdk.js +37 -0
  41. package/bin/install.js +11468 -0
  42. package/bin/lib/ui-safety-gate.cjs +107 -0
  43. package/commands/gsd/add-tests.md +42 -0
  44. package/commands/gsd/ai-integration-phase.md +37 -0
  45. package/commands/gsd/audit-fix.md +34 -0
  46. package/commands/gsd/audit-milestone.md +37 -0
  47. package/commands/gsd/audit-uat.md +24 -0
  48. package/commands/gsd/autonomous.md +46 -0
  49. package/commands/gsd/capture.md +62 -0
  50. package/commands/gsd/cleanup.md +24 -0
  51. package/commands/gsd/code-review.md +59 -0
  52. package/commands/gsd/complete-milestone.md +143 -0
  53. package/commands/gsd/config.md +58 -0
  54. package/commands/gsd/debug.md +52 -0
  55. package/commands/gsd/discuss-phase.md +76 -0
  56. package/commands/gsd/docs-update.md +49 -0
  57. package/commands/gsd/eval-review.md +33 -0
  58. package/commands/gsd/execute-phase.md +64 -0
  59. package/commands/gsd/explore.md +27 -0
  60. package/commands/gsd/extract-learnings.md +23 -0
  61. package/commands/gsd/fast.md +31 -0
  62. package/commands/gsd/forensics.md +57 -0
  63. package/commands/gsd/graphify.md +199 -0
  64. package/commands/gsd/health.md +31 -0
  65. package/commands/gsd/help.md +28 -0
  66. package/commands/gsd/import.md +41 -0
  67. package/commands/gsd/inbox.md +39 -0
  68. package/commands/gsd/ingest-docs.md +42 -0
  69. package/commands/gsd/manager.md +45 -0
  70. package/commands/gsd/map-codebase.md +83 -0
  71. package/commands/gsd/milestone-summary.md +51 -0
  72. package/commands/gsd/mvp-phase.md +45 -0
  73. package/commands/gsd/new-milestone.md +45 -0
  74. package/commands/gsd/new-project.md +47 -0
  75. package/commands/gsd/ns-context.md +23 -0
  76. package/commands/gsd/ns-ideate.md +24 -0
  77. package/commands/gsd/ns-manage.md +29 -0
  78. package/commands/gsd/ns-project.md +22 -0
  79. package/commands/gsd/ns-review.md +26 -0
  80. package/commands/gsd/ns-workflow.md +28 -0
  81. package/commands/gsd/pause-work.md +43 -0
  82. package/commands/gsd/phase.md +56 -0
  83. package/commands/gsd/plan-phase.md +62 -0
  84. package/commands/gsd/plan-review-convergence.md +59 -0
  85. package/commands/gsd/pr-branch.md +26 -0
  86. package/commands/gsd/profile-user.md +46 -0
  87. package/commands/gsd/progress.md +46 -0
  88. package/commands/gsd/quick.md +174 -0
  89. package/commands/gsd/resume-work.md +30 -0
  90. package/commands/gsd/review-backlog.md +63 -0
  91. package/commands/gsd/review.md +41 -0
  92. package/commands/gsd/secure-phase.md +36 -0
  93. package/commands/gsd/settings.md +29 -0
  94. package/commands/gsd/ship.md +24 -0
  95. package/commands/gsd/sketch.md +60 -0
  96. package/commands/gsd/spec-phase.md +63 -0
  97. package/commands/gsd/spike.md +57 -0
  98. package/commands/gsd/stats.md +19 -0
  99. package/commands/gsd/surface.md +155 -0
  100. package/commands/gsd/thread.md +24 -0
  101. package/commands/gsd/ui-phase.md +35 -0
  102. package/commands/gsd/ui-review.md +33 -0
  103. package/commands/gsd/ultraplan-phase.md +34 -0
  104. package/commands/gsd/undo.md +35 -0
  105. package/commands/gsd/update.md +48 -0
  106. package/commands/gsd/validate-phase.md +36 -0
  107. package/commands/gsd/verify-work.md +39 -0
  108. package/commands/gsd/workspace.md +52 -0
  109. package/commands/gsd/workstreams.md +70 -0
  110. package/get-shit-done/bin/check-latest-version.cjs +104 -0
  111. package/get-shit-done/bin/gsd-tools.cjs +1630 -0
  112. package/get-shit-done/bin/lib/active-workstream-store.cjs +85 -0
  113. package/get-shit-done/bin/lib/adr-parser.cjs +394 -0
  114. package/get-shit-done/bin/lib/artifacts.cjs +53 -0
  115. package/get-shit-done/bin/lib/audit.cjs +755 -0
  116. package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +39 -0
  117. package/get-shit-done/bin/lib/cjs-sdk-bridge.cjs +136 -0
  118. package/get-shit-done/bin/lib/clusters.cjs +135 -0
  119. package/get-shit-done/bin/lib/code-review-flags.cjs +74 -0
  120. package/get-shit-done/bin/lib/command-aliases.generated.cjs +824 -0
  121. package/get-shit-done/bin/lib/command-routing-hub.cjs +239 -0
  122. package/get-shit-done/bin/lib/commands.cjs +1035 -0
  123. package/get-shit-done/bin/lib/config-schema.cjs +31 -0
  124. package/get-shit-done/bin/lib/config.cjs +704 -0
  125. package/get-shit-done/bin/lib/configuration.generated.cjs +253 -0
  126. package/get-shit-done/bin/lib/context-utilization.cjs +47 -0
  127. package/get-shit-done/bin/lib/core.cjs +1922 -0
  128. package/get-shit-done/bin/lib/decisions.cjs +19 -0
  129. package/get-shit-done/bin/lib/decisions.generated.cjs +121 -0
  130. package/get-shit-done/bin/lib/docs.cjs +270 -0
  131. package/get-shit-done/bin/lib/drift.cjs +388 -0
  132. package/get-shit-done/bin/lib/fallow-runner.cjs +109 -0
  133. package/get-shit-done/bin/lib/frontmatter.cjs +389 -0
  134. package/get-shit-done/bin/lib/gap-checker.cjs +205 -0
  135. package/get-shit-done/bin/lib/graphify.cjs +592 -0
  136. package/get-shit-done/bin/lib/gsd2-import.cjs +514 -0
  137. package/get-shit-done/bin/lib/init-command-router.cjs +174 -0
  138. package/get-shit-done/bin/lib/init.cjs +2096 -0
  139. package/get-shit-done/bin/lib/install-profiles.cjs +603 -0
  140. package/get-shit-done/bin/lib/installer-migration-authoring.cjs +117 -0
  141. package/get-shit-done/bin/lib/installer-migration-report.cjs +354 -0
  142. package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
  143. package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
  144. package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
  145. package/get-shit-done/bin/lib/installer-migrations.cjs +776 -0
  146. package/get-shit-done/bin/lib/intel.cjs +643 -0
  147. package/get-shit-done/bin/lib/learnings.cjs +379 -0
  148. package/get-shit-done/bin/lib/milestone.cjs +314 -0
  149. package/get-shit-done/bin/lib/model-catalog.cjs +136 -0
  150. package/get-shit-done/bin/lib/model-profiles.cjs +25 -0
  151. package/get-shit-done/bin/lib/phase-command-router.cjs +226 -0
  152. package/get-shit-done/bin/lib/phase.cjs +1490 -0
  153. package/get-shit-done/bin/lib/phases-command-router.cjs +97 -0
  154. package/get-shit-done/bin/lib/plan-scan.cjs +26 -0
  155. package/get-shit-done/bin/lib/plan-scan.generated.cjs +97 -0
  156. package/get-shit-done/bin/lib/planning-workspace.cjs +415 -0
  157. package/get-shit-done/bin/lib/profile-output.cjs +1130 -0
  158. package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
  159. package/get-shit-done/bin/lib/project-root.generated.cjs +117 -0
  160. package/get-shit-done/bin/lib/prompt-budget.cjs +399 -0
  161. package/get-shit-done/bin/lib/review-reviewer-selection.cjs +125 -0
  162. package/get-shit-done/bin/lib/roadmap-command-router.cjs +99 -0
  163. package/get-shit-done/bin/lib/roadmap.cjs +642 -0
  164. package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +301 -0
  165. package/get-shit-done/bin/lib/runtime-homes.cjs +185 -0
  166. package/get-shit-done/bin/lib/runtime-slash.cjs +109 -0
  167. package/get-shit-done/bin/lib/schema-detect.cjs +21 -0
  168. package/get-shit-done/bin/lib/schema-detect.generated.cjs +170 -0
  169. package/get-shit-done/bin/lib/secrets.cjs +20 -0
  170. package/get-shit-done/bin/lib/secrets.generated.cjs +37 -0
  171. package/get-shit-done/bin/lib/security.cjs +504 -0
  172. package/get-shit-done/bin/lib/shell-command-projection.cjs +552 -0
  173. package/get-shit-done/bin/lib/state-command-router.cjs +346 -0
  174. package/get-shit-done/bin/lib/state-document.cjs +12 -0
  175. package/get-shit-done/bin/lib/state-document.generated.cjs +127 -0
  176. package/get-shit-done/bin/lib/state.cjs +1940 -0
  177. package/get-shit-done/bin/lib/surface.cjs +430 -0
  178. package/get-shit-done/bin/lib/template.cjs +228 -0
  179. package/get-shit-done/bin/lib/uat.cjs +289 -0
  180. package/get-shit-done/bin/lib/validate-command-router.cjs +129 -0
  181. package/get-shit-done/bin/lib/verify-command-router.cjs +122 -0
  182. package/get-shit-done/bin/lib/verify.cjs +1458 -0
  183. package/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs +79 -0
  184. package/get-shit-done/bin/lib/workstream-inventory.cjs +132 -0
  185. package/get-shit-done/bin/lib/workstream-name-policy.cjs +19 -0
  186. package/get-shit-done/bin/lib/workstream-name-policy.generated.cjs +61 -0
  187. package/get-shit-done/bin/lib/workstream.cjs +374 -0
  188. package/get-shit-done/bin/lib/worktree-safety.cjs +985 -0
  189. package/get-shit-done/bin/verify-reapply-patches.cjs +336 -0
  190. package/get-shit-done/contexts/dev.md +21 -0
  191. package/get-shit-done/contexts/research.md +22 -0
  192. package/get-shit-done/contexts/review.md +23 -0
  193. package/get-shit-done/references/agent-contracts.md +79 -0
  194. package/get-shit-done/references/ai-evals.md +156 -0
  195. package/get-shit-done/references/ai-frameworks.md +186 -0
  196. package/get-shit-done/references/artifact-types.md +131 -0
  197. package/get-shit-done/references/autonomous-smart-discuss.md +277 -0
  198. package/get-shit-done/references/checkpoints.md +814 -0
  199. package/get-shit-done/references/common-bug-patterns.md +114 -0
  200. package/get-shit-done/references/context-budget.md +85 -0
  201. package/get-shit-done/references/continuation-format.md +253 -0
  202. package/get-shit-done/references/debugger-philosophy.md +76 -0
  203. package/get-shit-done/references/decimal-phase-calculation.md +64 -0
  204. package/get-shit-done/references/doc-conflict-engine.md +91 -0
  205. package/get-shit-done/references/domain-probes.md +125 -0
  206. package/get-shit-done/references/execute-mvp-tdd.md +81 -0
  207. package/get-shit-done/references/executor-examples.md +110 -0
  208. package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
  209. package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
  210. package/get-shit-done/references/gate-prompts.md +100 -0
  211. package/get-shit-done/references/gates.md +70 -0
  212. package/get-shit-done/references/git-integration.md +298 -0
  213. package/get-shit-done/references/git-planning-commit.md +40 -0
  214. package/get-shit-done/references/ios-scaffold.md +123 -0
  215. package/get-shit-done/references/mandatory-initial-read.md +2 -0
  216. package/get-shit-done/references/model-profile-resolution.md +38 -0
  217. package/get-shit-done/references/model-profiles.md +245 -0
  218. package/get-shit-done/references/mvp-concepts.md +49 -0
  219. package/get-shit-done/references/phase-argument-parsing.md +61 -0
  220. package/get-shit-done/references/planner-antipatterns.md +89 -0
  221. package/get-shit-done/references/planner-chunked.md +49 -0
  222. package/get-shit-done/references/planner-gap-closure.md +62 -0
  223. package/get-shit-done/references/planner-graphify-auto-update.md +67 -0
  224. package/get-shit-done/references/planner-human-verify-mode.md +57 -0
  225. package/get-shit-done/references/planner-mvp-mode.md +53 -0
  226. package/get-shit-done/references/planner-reviews.md +39 -0
  227. package/get-shit-done/references/planner-revision.md +87 -0
  228. package/get-shit-done/references/planner-source-audit.md +73 -0
  229. package/get-shit-done/references/planning-config.md +471 -0
  230. package/get-shit-done/references/project-skills-discovery.md +19 -0
  231. package/get-shit-done/references/questioning.md +162 -0
  232. package/get-shit-done/references/revision-loop.md +97 -0
  233. package/get-shit-done/references/scout-codebase.md +51 -0
  234. package/get-shit-done/references/skeleton-template.md +48 -0
  235. package/get-shit-done/references/sketch-interactivity.md +41 -0
  236. package/get-shit-done/references/sketch-theme-system.md +94 -0
  237. package/get-shit-done/references/sketch-tooling.md +45 -0
  238. package/get-shit-done/references/sketch-variant-patterns.md +81 -0
  239. package/get-shit-done/references/spidr-splitting.md +69 -0
  240. package/get-shit-done/references/tdd.md +330 -0
  241. package/get-shit-done/references/thinking-models-debug.md +44 -0
  242. package/get-shit-done/references/thinking-models-execution.md +50 -0
  243. package/get-shit-done/references/thinking-models-planning.md +62 -0
  244. package/get-shit-done/references/thinking-models-research.md +50 -0
  245. package/get-shit-done/references/thinking-models-verification.md +55 -0
  246. package/get-shit-done/references/thinking-partner.md +96 -0
  247. package/get-shit-done/references/ui-brand.md +160 -0
  248. package/get-shit-done/references/universal-anti-patterns.md +63 -0
  249. package/get-shit-done/references/user-profiling.md +681 -0
  250. package/get-shit-done/references/user-story-template.md +58 -0
  251. package/get-shit-done/references/verification-overrides.md +227 -0
  252. package/get-shit-done/references/verification-patterns.md +612 -0
  253. package/get-shit-done/references/verify-mvp-mode.md +85 -0
  254. package/get-shit-done/references/workstream-flag.md +111 -0
  255. package/get-shit-done/references/worktree-path-safety.md +89 -0
  256. package/get-shit-done/templates/AI-SPEC.md +246 -0
  257. package/get-shit-done/templates/DEBUG.md +169 -0
  258. package/get-shit-done/templates/README.md +77 -0
  259. package/get-shit-done/templates/SECURITY.md +61 -0
  260. package/get-shit-done/templates/UAT.md +265 -0
  261. package/get-shit-done/templates/UI-SPEC.md +100 -0
  262. package/get-shit-done/templates/VALIDATION.md +76 -0
  263. package/get-shit-done/templates/claude-md.md +145 -0
  264. package/get-shit-done/templates/codebase/architecture.md +255 -0
  265. package/get-shit-done/templates/codebase/concerns.md +310 -0
  266. package/get-shit-done/templates/codebase/conventions.md +307 -0
  267. package/get-shit-done/templates/codebase/integrations.md +280 -0
  268. package/get-shit-done/templates/codebase/stack.md +186 -0
  269. package/get-shit-done/templates/codebase/structure.md +285 -0
  270. package/get-shit-done/templates/codebase/testing.md +480 -0
  271. package/get-shit-done/templates/config.json +62 -0
  272. package/get-shit-done/templates/context.md +352 -0
  273. package/get-shit-done/templates/continue-here.md +78 -0
  274. package/get-shit-done/templates/copilot-instructions.md +7 -0
  275. package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  276. package/get-shit-done/templates/dev-preferences.md +21 -0
  277. package/get-shit-done/templates/discovery.md +146 -0
  278. package/get-shit-done/templates/discussion-log.md +63 -0
  279. package/get-shit-done/templates/milestone-archive.md +123 -0
  280. package/get-shit-done/templates/milestone.md +115 -0
  281. package/get-shit-done/templates/phase-prompt.md +610 -0
  282. package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  283. package/get-shit-done/templates/project.md +186 -0
  284. package/get-shit-done/templates/requirements.md +231 -0
  285. package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  286. package/get-shit-done/templates/research-project/FEATURES.md +147 -0
  287. package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  288. package/get-shit-done/templates/research-project/STACK.md +120 -0
  289. package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  290. package/get-shit-done/templates/research.md +592 -0
  291. package/get-shit-done/templates/retrospective.md +54 -0
  292. package/get-shit-done/templates/roadmap.md +202 -0
  293. package/get-shit-done/templates/spec.md +307 -0
  294. package/get-shit-done/templates/state.md +184 -0
  295. package/get-shit-done/templates/summary-complex.md +59 -0
  296. package/get-shit-done/templates/summary-minimal.md +41 -0
  297. package/get-shit-done/templates/summary-standard.md +48 -0
  298. package/get-shit-done/templates/summary.md +248 -0
  299. package/get-shit-done/templates/user-profile.md +146 -0
  300. package/get-shit-done/templates/user-setup.md +311 -0
  301. package/get-shit-done/templates/verification-report.md +322 -0
  302. package/get-shit-done/workflows/add-backlog.md +101 -0
  303. package/get-shit-done/workflows/add-phase.md +123 -0
  304. package/get-shit-done/workflows/add-tests.md +365 -0
  305. package/get-shit-done/workflows/add-todo.md +171 -0
  306. package/get-shit-done/workflows/ai-integration-phase.md +305 -0
  307. package/get-shit-done/workflows/analyze-dependencies.md +96 -0
  308. package/get-shit-done/workflows/audit-fix.md +188 -0
  309. package/get-shit-done/workflows/audit-milestone.md +368 -0
  310. package/get-shit-done/workflows/audit-uat.md +120 -0
  311. package/get-shit-done/workflows/autonomous.md +805 -0
  312. package/get-shit-done/workflows/check-todos.md +190 -0
  313. package/get-shit-done/workflows/cleanup.md +165 -0
  314. package/get-shit-done/workflows/code-review-fix.md +512 -0
  315. package/get-shit-done/workflows/code-review.md +666 -0
  316. package/get-shit-done/workflows/complete-milestone.md +865 -0
  317. package/get-shit-done/workflows/debug.md +242 -0
  318. package/get-shit-done/workflows/diagnose-issues.md +251 -0
  319. package/get-shit-done/workflows/discovery-phase.md +291 -0
  320. package/get-shit-done/workflows/discuss-phase/modes/advisor.md +175 -0
  321. package/get-shit-done/workflows/discuss-phase/modes/all.md +28 -0
  322. package/get-shit-done/workflows/discuss-phase/modes/analyze.md +44 -0
  323. package/get-shit-done/workflows/discuss-phase/modes/auto.md +56 -0
  324. package/get-shit-done/workflows/discuss-phase/modes/batch.md +52 -0
  325. package/get-shit-done/workflows/discuss-phase/modes/chain.md +97 -0
  326. package/get-shit-done/workflows/discuss-phase/modes/default.md +141 -0
  327. package/get-shit-done/workflows/discuss-phase/modes/power.md +44 -0
  328. package/get-shit-done/workflows/discuss-phase/modes/text.md +55 -0
  329. package/get-shit-done/workflows/discuss-phase/templates/checkpoint.json +18 -0
  330. package/get-shit-done/workflows/discuss-phase/templates/context.md +136 -0
  331. package/get-shit-done/workflows/discuss-phase/templates/discussion-log.md +50 -0
  332. package/get-shit-done/workflows/discuss-phase-assumptions.md +685 -0
  333. package/get-shit-done/workflows/discuss-phase-power.md +291 -0
  334. package/get-shit-done/workflows/discuss-phase.md +499 -0
  335. package/get-shit-done/workflows/do.md +122 -0
  336. package/get-shit-done/workflows/docs-update.md +1172 -0
  337. package/get-shit-done/workflows/edit-phase.md +305 -0
  338. package/get-shit-done/workflows/eval-review.md +166 -0
  339. package/get-shit-done/workflows/execute-phase/steps/codebase-drift-gate.md +81 -0
  340. package/get-shit-done/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  341. package/get-shit-done/workflows/execute-phase/steps/post-merge-gate.md +116 -0
  342. package/get-shit-done/workflows/execute-phase.md +1717 -0
  343. package/get-shit-done/workflows/execute-plan.md +536 -0
  344. package/get-shit-done/workflows/explore.md +154 -0
  345. package/get-shit-done/workflows/extract-learnings.md +253 -0
  346. package/get-shit-done/workflows/fast.md +124 -0
  347. package/get-shit-done/workflows/forensics.md +289 -0
  348. package/get-shit-done/workflows/graduation.md +206 -0
  349. package/get-shit-done/workflows/health.md +234 -0
  350. package/get-shit-done/workflows/help/modes/brief.md +22 -0
  351. package/get-shit-done/workflows/help/modes/default.md +50 -0
  352. package/get-shit-done/workflows/help/modes/full.md +784 -0
  353. package/get-shit-done/workflows/help/modes/topic.md +74 -0
  354. package/get-shit-done/workflows/help.md +24 -0
  355. package/get-shit-done/workflows/import.md +264 -0
  356. package/get-shit-done/workflows/inbox.md +387 -0
  357. package/get-shit-done/workflows/ingest-docs.md +339 -0
  358. package/get-shit-done/workflows/insert-phase.md +162 -0
  359. package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  360. package/get-shit-done/workflows/list-workspaces.md +67 -0
  361. package/get-shit-done/workflows/manager.md +403 -0
  362. package/get-shit-done/workflows/map-codebase.md +454 -0
  363. package/get-shit-done/workflows/milestone-summary.md +234 -0
  364. package/get-shit-done/workflows/mvp-phase.md +232 -0
  365. package/get-shit-done/workflows/new-milestone.md +645 -0
  366. package/get-shit-done/workflows/new-project.md +1487 -0
  367. package/get-shit-done/workflows/new-workspace.md +250 -0
  368. package/get-shit-done/workflows/next.md +231 -0
  369. package/get-shit-done/workflows/node-repair.md +92 -0
  370. package/get-shit-done/workflows/note.md +158 -0
  371. package/get-shit-done/workflows/pause-work.md +254 -0
  372. package/get-shit-done/workflows/plan-milestone-gaps.md +291 -0
  373. package/get-shit-done/workflows/plan-phase.md +1800 -0
  374. package/get-shit-done/workflows/plan-review-convergence.md +340 -0
  375. package/get-shit-done/workflows/plant-seed.md +240 -0
  376. package/get-shit-done/workflows/pr-branch.md +157 -0
  377. package/get-shit-done/workflows/profile-user.md +463 -0
  378. package/get-shit-done/workflows/progress.md +660 -0
  379. package/get-shit-done/workflows/quick.md +1049 -0
  380. package/get-shit-done/workflows/reapply-patches.md +426 -0
  381. package/get-shit-done/workflows/remove-phase.md +166 -0
  382. package/get-shit-done/workflows/remove-workspace.md +118 -0
  383. package/get-shit-done/workflows/resume-project.md +342 -0
  384. package/get-shit-done/workflows/review.md +633 -0
  385. package/get-shit-done/workflows/scan.md +115 -0
  386. package/get-shit-done/workflows/secure-phase.md +190 -0
  387. package/get-shit-done/workflows/session-report.md +146 -0
  388. package/get-shit-done/workflows/settings-advanced.md +590 -0
  389. package/get-shit-done/workflows/settings-integrations.md +292 -0
  390. package/get-shit-done/workflows/settings.md +545 -0
  391. package/get-shit-done/workflows/ship.md +366 -0
  392. package/get-shit-done/workflows/sketch-wrap-up.md +296 -0
  393. package/get-shit-done/workflows/sketch.md +371 -0
  394. package/get-shit-done/workflows/spec-phase.md +262 -0
  395. package/get-shit-done/workflows/spike-wrap-up.md +317 -0
  396. package/get-shit-done/workflows/spike.md +463 -0
  397. package/get-shit-done/workflows/stats.md +90 -0
  398. package/get-shit-done/workflows/sync-skills.md +182 -0
  399. package/get-shit-done/workflows/thread.md +232 -0
  400. package/get-shit-done/workflows/transition.md +704 -0
  401. package/get-shit-done/workflows/ui-phase.md +338 -0
  402. package/get-shit-done/workflows/ui-review.md +203 -0
  403. package/get-shit-done/workflows/ultraplan-phase.md +209 -0
  404. package/get-shit-done/workflows/undo.md +314 -0
  405. package/get-shit-done/workflows/update.md +664 -0
  406. package/get-shit-done/workflows/validate-phase.md +189 -0
  407. package/get-shit-done/workflows/verify-phase.md +554 -0
  408. package/get-shit-done/workflows/verify-work.md +791 -0
  409. package/hooks/dist/gsd-check-update-worker.js +117 -0
  410. package/hooks/dist/gsd-check-update.js +64 -0
  411. package/hooks/dist/gsd-context-monitor.js +192 -0
  412. package/hooks/dist/gsd-graphify-update.sh +158 -0
  413. package/hooks/dist/gsd-phase-boundary.sh +47 -0
  414. package/hooks/dist/gsd-prompt-guard.js +97 -0
  415. package/hooks/dist/gsd-read-guard.js +101 -0
  416. package/hooks/dist/gsd-read-injection-scanner.js +152 -0
  417. package/hooks/dist/gsd-session-state.sh +59 -0
  418. package/hooks/dist/gsd-statusline.js +537 -0
  419. package/hooks/dist/gsd-update-banner.js +134 -0
  420. package/hooks/dist/gsd-validate-commit.sh +57 -0
  421. package/hooks/dist/gsd-workflow-guard.js +94 -0
  422. package/hooks/dist/lib/git-cmd.js +150 -0
  423. package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
  424. package/hooks/gsd-check-update-worker.js +117 -0
  425. package/hooks/gsd-check-update.js +64 -0
  426. package/hooks/gsd-context-monitor.js +192 -0
  427. package/hooks/gsd-graphify-update.sh +158 -0
  428. package/hooks/gsd-phase-boundary.sh +47 -0
  429. package/hooks/gsd-prompt-guard.js +97 -0
  430. package/hooks/gsd-read-guard.js +101 -0
  431. package/hooks/gsd-read-injection-scanner.js +152 -0
  432. package/hooks/gsd-session-state.sh +59 -0
  433. package/hooks/gsd-statusline.js +537 -0
  434. package/hooks/gsd-update-banner.js +134 -0
  435. package/hooks/gsd-validate-commit.sh +57 -0
  436. package/hooks/gsd-workflow-guard.js +94 -0
  437. package/hooks/lib/git-cmd.js +150 -0
  438. package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
  439. package/package.json +98 -0
  440. package/scripts/audit-workflow-script-paths.cjs +73 -0
  441. package/scripts/base64-scan.sh +262 -0
  442. package/scripts/build-hooks.js +227 -0
  443. package/scripts/changeset/cli.cjs +408 -0
  444. package/scripts/changeset/github-release-notes.cjs +198 -0
  445. package/scripts/changeset/lint.cjs +110 -0
  446. package/scripts/changeset/new.cjs +137 -0
  447. package/scripts/changeset/parse.cjs +114 -0
  448. package/scripts/changeset/render.cjs +34 -0
  449. package/scripts/changeset/serialize.cjs +130 -0
  450. package/scripts/command-contract-helpers.cjs +64 -0
  451. package/scripts/diff-touches-shipped-paths.cjs +147 -0
  452. package/scripts/fix-slash-commands.cjs +147 -0
  453. package/scripts/gen-inventory-manifest.cjs +109 -0
  454. package/scripts/lint-command-contract.cjs +108 -0
  455. package/scripts/lint-descriptions.cjs +83 -0
  456. package/scripts/lint-docs-required.cjs +222 -0
  457. package/scripts/lint-no-source-grep-extras.cjs +81 -0
  458. package/scripts/lint-no-source-grep.cjs +174 -0
  459. package/scripts/lint-pr-check-project-dir.cjs +98 -0
  460. package/scripts/lint-shared-module-handsync.cjs +331 -0
  461. package/scripts/lint-shell-command-projection-drift.cjs +57 -0
  462. package/scripts/lint-skill-deps.cjs +180 -0
  463. package/scripts/lint-test-file-count.allowlist.json +35 -0
  464. package/scripts/lint-test-file-count.cjs +190 -0
  465. package/scripts/pr-template-policy.cjs +268 -0
  466. package/scripts/prompt-injection-scan.sh +203 -0
  467. package/scripts/release-tarball-smoke.cjs +677 -0
  468. package/scripts/run-tests.cjs +178 -0
  469. package/scripts/secret-scan.sh +229 -0
  470. package/scripts/shared-module-handsync-allowlist.json +145 -0
  471. package/scripts/strip-prose-atrefs.cjs +106 -0
  472. package/scripts/sync-rulesets.sh +34 -0
  473. package/scripts/verify-tarball-sdk-dist.sh +69 -0
  474. package/sdk/dist/cli-transport.d.ts +19 -0
  475. package/sdk/dist/cli-transport.d.ts.map +1 -0
  476. package/sdk/dist/cli-transport.js +104 -0
  477. package/sdk/dist/cli-transport.js.map +1 -0
  478. package/sdk/dist/cli.d.ts +46 -0
  479. package/sdk/dist/cli.d.ts.map +1 -0
  480. package/sdk/dist/cli.js +511 -0
  481. package/sdk/dist/cli.js.map +1 -0
  482. package/sdk/dist/config.d.ts +108 -0
  483. package/sdk/dist/config.d.ts.map +1 -0
  484. package/sdk/dist/config.js +116 -0
  485. package/sdk/dist/config.js.map +1 -0
  486. package/sdk/dist/configuration/index.d.ts +85 -0
  487. package/sdk/dist/configuration/index.d.ts.map +1 -0
  488. package/sdk/dist/configuration/index.js +257 -0
  489. package/sdk/dist/configuration/index.js.map +1 -0
  490. package/sdk/dist/context-engine.d.ts +49 -0
  491. package/sdk/dist/context-engine.d.ts.map +1 -0
  492. package/sdk/dist/context-engine.js +142 -0
  493. package/sdk/dist/context-engine.js.map +1 -0
  494. package/sdk/dist/context-truncation.d.ts +33 -0
  495. package/sdk/dist/context-truncation.d.ts.map +1 -0
  496. package/sdk/dist/context-truncation.js +197 -0
  497. package/sdk/dist/context-truncation.js.map +1 -0
  498. package/sdk/dist/errors.d.ts +46 -0
  499. package/sdk/dist/errors.d.ts.map +1 -0
  500. package/sdk/dist/errors.js +64 -0
  501. package/sdk/dist/errors.js.map +1 -0
  502. package/sdk/dist/event-stream.d.ts +53 -0
  503. package/sdk/dist/event-stream.d.ts.map +1 -0
  504. package/sdk/dist/event-stream.js +321 -0
  505. package/sdk/dist/event-stream.js.map +1 -0
  506. package/sdk/dist/golden/capture.d.ts +15 -0
  507. package/sdk/dist/golden/capture.d.ts.map +1 -0
  508. package/sdk/dist/golden/capture.js +67 -0
  509. package/sdk/dist/golden/capture.js.map +1 -0
  510. package/sdk/dist/golden/golden-integration-covered.d.ts +6 -0
  511. package/sdk/dist/golden/golden-integration-covered.d.ts.map +1 -0
  512. package/sdk/dist/golden/golden-integration-covered.js +30 -0
  513. package/sdk/dist/golden/golden-integration-covered.js.map +1 -0
  514. package/sdk/dist/golden/golden-mutation-covered.d.ts +7 -0
  515. package/sdk/dist/golden/golden-mutation-covered.d.ts.map +1 -0
  516. package/sdk/dist/golden/golden-mutation-covered.js +17 -0
  517. package/sdk/dist/golden/golden-mutation-covered.js.map +1 -0
  518. package/sdk/dist/golden/golden-policy.d.ts +10 -0
  519. package/sdk/dist/golden/golden-policy.d.ts.map +1 -0
  520. package/sdk/dist/golden/golden-policy.js +98 -0
  521. package/sdk/dist/golden/golden-policy.js.map +1 -0
  522. package/sdk/dist/golden/init-golden-normalize.d.ts +8 -0
  523. package/sdk/dist/golden/init-golden-normalize.d.ts.map +1 -0
  524. package/sdk/dist/golden/init-golden-normalize.js +14 -0
  525. package/sdk/dist/golden/init-golden-normalize.js.map +1 -0
  526. package/sdk/dist/golden/read-only-golden-rows.d.ts +20 -0
  527. package/sdk/dist/golden/read-only-golden-rows.d.ts.map +1 -0
  528. package/sdk/dist/golden/read-only-golden-rows.js +67 -0
  529. package/sdk/dist/golden/read-only-golden-rows.js.map +1 -0
  530. package/sdk/dist/golden/registry-canonical-commands.d.ts +6 -0
  531. package/sdk/dist/golden/registry-canonical-commands.d.ts.map +1 -0
  532. package/sdk/dist/golden/registry-canonical-commands.js +30 -0
  533. package/sdk/dist/golden/registry-canonical-commands.js.map +1 -0
  534. package/sdk/dist/gsd-tools-error.d.ts +23 -0
  535. package/sdk/dist/gsd-tools-error.d.ts.map +1 -0
  536. package/sdk/dist/gsd-tools-error.js +29 -0
  537. package/sdk/dist/gsd-tools-error.js.map +1 -0
  538. package/sdk/dist/gsd-tools.d.ts +97 -0
  539. package/sdk/dist/gsd-tools.d.ts.map +1 -0
  540. package/sdk/dist/gsd-tools.js +168 -0
  541. package/sdk/dist/gsd-tools.js.map +1 -0
  542. package/sdk/dist/gsd-transport-policy.d.ts +10 -0
  543. package/sdk/dist/gsd-transport-policy.d.ts.map +1 -0
  544. package/sdk/dist/gsd-transport-policy.js +32 -0
  545. package/sdk/dist/gsd-transport-policy.js.map +1 -0
  546. package/sdk/dist/gsd-transport.d.ts +39 -0
  547. package/sdk/dist/gsd-transport.d.ts.map +1 -0
  548. package/sdk/dist/gsd-transport.js +78 -0
  549. package/sdk/dist/gsd-transport.js.map +1 -0
  550. package/sdk/dist/index.d.ts +127 -0
  551. package/sdk/dist/index.d.ts.map +1 -0
  552. package/sdk/dist/index.js +300 -0
  553. package/sdk/dist/index.js.map +1 -0
  554. package/sdk/dist/init-runner.d.ts +90 -0
  555. package/sdk/dist/init-runner.d.ts.map +1 -0
  556. package/sdk/dist/init-runner.js +613 -0
  557. package/sdk/dist/init-runner.js.map +1 -0
  558. package/sdk/dist/logger.d.ts +50 -0
  559. package/sdk/dist/logger.d.ts.map +1 -0
  560. package/sdk/dist/logger.js +70 -0
  561. package/sdk/dist/logger.js.map +1 -0
  562. package/sdk/dist/model-catalog.d.ts +31 -0
  563. package/sdk/dist/model-catalog.d.ts.map +1 -0
  564. package/sdk/dist/model-catalog.js +31 -0
  565. package/sdk/dist/model-catalog.js.map +1 -0
  566. package/sdk/dist/phase-prompt.d.ts +72 -0
  567. package/sdk/dist/phase-prompt.d.ts.map +1 -0
  568. package/sdk/dist/phase-prompt.js +213 -0
  569. package/sdk/dist/phase-prompt.js.map +1 -0
  570. package/sdk/dist/phase-runner.d.ts +145 -0
  571. package/sdk/dist/phase-runner.d.ts.map +1 -0
  572. package/sdk/dist/phase-runner.js +1206 -0
  573. package/sdk/dist/phase-runner.js.map +1 -0
  574. package/sdk/dist/plan-parser.d.ts +55 -0
  575. package/sdk/dist/plan-parser.d.ts.map +1 -0
  576. package/sdk/dist/plan-parser.js +389 -0
  577. package/sdk/dist/plan-parser.js.map +1 -0
  578. package/sdk/dist/planning-journal.d.ts +64 -0
  579. package/sdk/dist/planning-journal.d.ts.map +1 -0
  580. package/sdk/dist/planning-journal.js +88 -0
  581. package/sdk/dist/planning-journal.js.map +1 -0
  582. package/sdk/dist/planning-runtime.d.ts +67 -0
  583. package/sdk/dist/planning-runtime.d.ts.map +1 -0
  584. package/sdk/dist/planning-runtime.js +58 -0
  585. package/sdk/dist/planning-runtime.js.map +1 -0
  586. package/sdk/dist/project-root/index.d.ts +46 -0
  587. package/sdk/dist/project-root/index.d.ts.map +1 -0
  588. package/sdk/dist/project-root/index.js +138 -0
  589. package/sdk/dist/project-root/index.js.map +1 -0
  590. package/sdk/dist/prompt-builder.d.ts +44 -0
  591. package/sdk/dist/prompt-builder.d.ts.map +1 -0
  592. package/sdk/dist/prompt-builder.js +180 -0
  593. package/sdk/dist/prompt-builder.js.map +1 -0
  594. package/sdk/dist/prompt-sanitizer.d.ts +35 -0
  595. package/sdk/dist/prompt-sanitizer.d.ts.map +1 -0
  596. package/sdk/dist/prompt-sanitizer.js +101 -0
  597. package/sdk/dist/prompt-sanitizer.js.map +1 -0
  598. package/sdk/dist/query/active-workstream-store.d.ts +7 -0
  599. package/sdk/dist/query/active-workstream-store.d.ts.map +1 -0
  600. package/sdk/dist/query/active-workstream-store.js +56 -0
  601. package/sdk/dist/query/active-workstream-store.js.map +1 -0
  602. package/sdk/dist/query/agent-failure-classifier.d.ts +38 -0
  603. package/sdk/dist/query/agent-failure-classifier.d.ts.map +1 -0
  604. package/sdk/dist/query/agent-failure-classifier.js +83 -0
  605. package/sdk/dist/query/agent-failure-classifier.js.map +1 -0
  606. package/sdk/dist/query/audit-open.d.ts +46 -0
  607. package/sdk/dist/query/audit-open.d.ts.map +1 -0
  608. package/sdk/dist/query/audit-open.js +662 -0
  609. package/sdk/dist/query/audit-open.js.map +1 -0
  610. package/sdk/dist/query/check-auto-mode.d.ts +13 -0
  611. package/sdk/dist/query/check-auto-mode.d.ts.map +1 -0
  612. package/sdk/dist/query/check-auto-mode.js +40 -0
  613. package/sdk/dist/query/check-auto-mode.js.map +1 -0
  614. package/sdk/dist/query/check-completion.d.ts +10 -0
  615. package/sdk/dist/query/check-completion.d.ts.map +1 -0
  616. package/sdk/dist/query/check-completion.js +157 -0
  617. package/sdk/dist/query/check-completion.js.map +1 -0
  618. package/sdk/dist/query/check-decision-coverage.d.ts +33 -0
  619. package/sdk/dist/query/check-decision-coverage.d.ts.map +1 -0
  620. package/sdk/dist/query/check-decision-coverage.js +472 -0
  621. package/sdk/dist/query/check-decision-coverage.js.map +1 -0
  622. package/sdk/dist/query/check-gates.d.ts +10 -0
  623. package/sdk/dist/query/check-gates.d.ts.map +1 -0
  624. package/sdk/dist/query/check-gates.js +89 -0
  625. package/sdk/dist/query/check-gates.js.map +1 -0
  626. package/sdk/dist/query/check-ship-ready.d.ts +17 -0
  627. package/sdk/dist/query/check-ship-ready.d.ts.map +1 -0
  628. package/sdk/dist/query/check-ship-ready.js +121 -0
  629. package/sdk/dist/query/check-ship-ready.js.map +1 -0
  630. package/sdk/dist/query/check-verification-status.d.ts +10 -0
  631. package/sdk/dist/query/check-verification-status.d.ts.map +1 -0
  632. package/sdk/dist/query/check-verification-status.js +142 -0
  633. package/sdk/dist/query/check-verification-status.js.map +1 -0
  634. package/sdk/dist/query/command-aliases.generated.d.ts +31 -0
  635. package/sdk/dist/query/command-aliases.generated.d.ts.map +1 -0
  636. package/sdk/dist/query/command-aliases.generated.js +133 -0
  637. package/sdk/dist/query/command-aliases.generated.js.map +1 -0
  638. package/sdk/dist/query/command-catalog.d.ts +9 -0
  639. package/sdk/dist/query/command-catalog.d.ts.map +1 -0
  640. package/sdk/dist/query/command-catalog.js +17 -0
  641. package/sdk/dist/query/command-catalog.js.map +1 -0
  642. package/sdk/dist/query/command-definition.d.ts +19 -0
  643. package/sdk/dist/query/command-definition.d.ts.map +1 -0
  644. package/sdk/dist/query/command-definition.js +44 -0
  645. package/sdk/dist/query/command-definition.js.map +1 -0
  646. package/sdk/dist/query/command-family-handlers.d.ts +3 -0
  647. package/sdk/dist/query/command-family-handlers.d.ts.map +1 -0
  648. package/sdk/dist/query/command-family-handlers.js +101 -0
  649. package/sdk/dist/query/command-family-handlers.js.map +1 -0
  650. package/sdk/dist/query/command-manifest.d.ts +2 -0
  651. package/sdk/dist/query/command-manifest.d.ts.map +1 -0
  652. package/sdk/dist/query/command-manifest.init.d.ts +6 -0
  653. package/sdk/dist/query/command-manifest.init.d.ts.map +1 -0
  654. package/sdk/dist/query/command-manifest.init.js +23 -0
  655. package/sdk/dist/query/command-manifest.init.js.map +1 -0
  656. package/sdk/dist/query/command-manifest.js +17 -0
  657. package/sdk/dist/query/command-manifest.js.map +1 -0
  658. package/sdk/dist/query/command-manifest.non-family.d.ts +9 -0
  659. package/sdk/dist/query/command-manifest.non-family.d.ts.map +1 -0
  660. package/sdk/dist/query/command-manifest.non-family.js +60 -0
  661. package/sdk/dist/query/command-manifest.non-family.js.map +1 -0
  662. package/sdk/dist/query/command-manifest.phase.d.ts +6 -0
  663. package/sdk/dist/query/command-manifest.phase.d.ts.map +1 -0
  664. package/sdk/dist/query/command-manifest.phase.js +16 -0
  665. package/sdk/dist/query/command-manifest.phase.js.map +1 -0
  666. package/sdk/dist/query/command-manifest.phases.d.ts +7 -0
  667. package/sdk/dist/query/command-manifest.phases.d.ts.map +1 -0
  668. package/sdk/dist/query/command-manifest.phases.js +10 -0
  669. package/sdk/dist/query/command-manifest.phases.js.map +1 -0
  670. package/sdk/dist/query/command-manifest.roadmap.d.ts +6 -0
  671. package/sdk/dist/query/command-manifest.roadmap.d.ts.map +1 -0
  672. package/sdk/dist/query/command-manifest.roadmap.js +10 -0
  673. package/sdk/dist/query/command-manifest.roadmap.js.map +1 -0
  674. package/sdk/dist/query/command-manifest.state.d.ts +9 -0
  675. package/sdk/dist/query/command-manifest.state.d.ts.map +1 -0
  676. package/sdk/dist/query/command-manifest.state.js +30 -0
  677. package/sdk/dist/query/command-manifest.state.js.map +1 -0
  678. package/sdk/dist/query/command-manifest.types.d.ts +12 -0
  679. package/sdk/dist/query/command-manifest.types.d.ts.map +1 -0
  680. package/sdk/dist/query/command-manifest.types.js +2 -0
  681. package/sdk/dist/query/command-manifest.types.js.map +1 -0
  682. package/sdk/dist/query/command-manifest.validate.d.ts +6 -0
  683. package/sdk/dist/query/command-manifest.validate.d.ts.map +1 -0
  684. package/sdk/dist/query/command-manifest.validate.js +10 -0
  685. package/sdk/dist/query/command-manifest.validate.js.map +1 -0
  686. package/sdk/dist/query/command-manifest.verify.d.ts +6 -0
  687. package/sdk/dist/query/command-manifest.verify.d.ts.map +1 -0
  688. package/sdk/dist/query/command-manifest.verify.js +16 -0
  689. package/sdk/dist/query/command-manifest.verify.js.map +1 -0
  690. package/sdk/dist/query/command-static-catalog-domain.d.ts +3 -0
  691. package/sdk/dist/query/command-static-catalog-domain.d.ts.map +1 -0
  692. package/sdk/dist/query/command-static-catalog-domain.js +110 -0
  693. package/sdk/dist/query/command-static-catalog-domain.js.map +1 -0
  694. package/sdk/dist/query/command-static-catalog-foundation.d.ts +7 -0
  695. package/sdk/dist/query/command-static-catalog-foundation.d.ts.map +1 -0
  696. package/sdk/dist/query/command-static-catalog-foundation.js +106 -0
  697. package/sdk/dist/query/command-static-catalog-foundation.js.map +1 -0
  698. package/sdk/dist/query/command-topology.d.ts +32 -0
  699. package/sdk/dist/query/command-topology.d.ts.map +1 -0
  700. package/sdk/dist/query/command-topology.js +66 -0
  701. package/sdk/dist/query/command-topology.js.map +1 -0
  702. package/sdk/dist/query/commands-list.d.ts +14 -0
  703. package/sdk/dist/query/commands-list.d.ts.map +1 -0
  704. package/sdk/dist/query/commands-list.js +18 -0
  705. package/sdk/dist/query/commands-list.js.map +1 -0
  706. package/sdk/dist/query/commit.d.ts +179 -0
  707. package/sdk/dist/query/commit.d.ts.map +1 -0
  708. package/sdk/dist/query/commit.js +632 -0
  709. package/sdk/dist/query/commit.js.map +1 -0
  710. package/sdk/dist/query/config-gates.d.ts +12 -0
  711. package/sdk/dist/query/config-gates.d.ts.map +1 -0
  712. package/sdk/dist/query/config-gates.js +66 -0
  713. package/sdk/dist/query/config-gates.js.map +1 -0
  714. package/sdk/dist/query/config-mutation.d.ts +86 -0
  715. package/sdk/dist/query/config-mutation.d.ts.map +1 -0
  716. package/sdk/dist/query/config-mutation.js +602 -0
  717. package/sdk/dist/query/config-mutation.js.map +1 -0
  718. package/sdk/dist/query/config-query.d.ts +57 -0
  719. package/sdk/dist/query/config-query.d.ts.map +1 -0
  720. package/sdk/dist/query/config-query.js +277 -0
  721. package/sdk/dist/query/config-query.js.map +1 -0
  722. package/sdk/dist/query/config-schema.d.ts +19 -0
  723. package/sdk/dist/query/config-schema.d.ts.map +1 -0
  724. package/sdk/dist/query/config-schema.js +26 -0
  725. package/sdk/dist/query/config-schema.js.map +1 -0
  726. package/sdk/dist/query/decisions.d.ts +58 -0
  727. package/sdk/dist/query/decisions.d.ts.map +1 -0
  728. package/sdk/dist/query/decisions.js +165 -0
  729. package/sdk/dist/query/decisions.js.map +1 -0
  730. package/sdk/dist/query/detect-custom-files.d.ts +11 -0
  731. package/sdk/dist/query/detect-custom-files.d.ts.map +1 -0
  732. package/sdk/dist/query/detect-custom-files.js +89 -0
  733. package/sdk/dist/query/detect-custom-files.js.map +1 -0
  734. package/sdk/dist/query/detect-phase-type.d.ts +9 -0
  735. package/sdk/dist/query/detect-phase-type.d.ts.map +1 -0
  736. package/sdk/dist/query/detect-phase-type.js +124 -0
  737. package/sdk/dist/query/detect-phase-type.js.map +1 -0
  738. package/sdk/dist/query/docs-init.d.ts +26 -0
  739. package/sdk/dist/query/docs-init.d.ts.map +1 -0
  740. package/sdk/dist/query/docs-init.js +231 -0
  741. package/sdk/dist/query/docs-init.js.map +1 -0
  742. package/sdk/dist/query/fallow-audit.d.ts +44 -0
  743. package/sdk/dist/query/fallow-audit.d.ts.map +1 -0
  744. package/sdk/dist/query/fallow-audit.js +44 -0
  745. package/sdk/dist/query/fallow-audit.js.map +1 -0
  746. package/sdk/dist/query/frontmatter-mutation.d.ts +77 -0
  747. package/sdk/dist/query/frontmatter-mutation.d.ts.map +1 -0
  748. package/sdk/dist/query/frontmatter-mutation.js +299 -0
  749. package/sdk/dist/query/frontmatter-mutation.js.map +1 -0
  750. package/sdk/dist/query/frontmatter.d.ts +93 -0
  751. package/sdk/dist/query/frontmatter.d.ts.map +1 -0
  752. package/sdk/dist/query/frontmatter.js +364 -0
  753. package/sdk/dist/query/frontmatter.js.map +1 -0
  754. package/sdk/dist/query/helpers.d.ts +194 -0
  755. package/sdk/dist/query/helpers.d.ts.map +1 -0
  756. package/sdk/dist/query/helpers.js +540 -0
  757. package/sdk/dist/query/helpers.js.map +1 -0
  758. package/sdk/dist/query/index.d.ts +8 -0
  759. package/sdk/dist/query/index.d.ts.map +1 -0
  760. package/sdk/dist/query/index.js +6 -0
  761. package/sdk/dist/query/index.js.map +1 -0
  762. package/sdk/dist/query/init-complex.d.ts +47 -0
  763. package/sdk/dist/query/init-complex.d.ts.map +1 -0
  764. package/sdk/dist/query/init-complex.js +735 -0
  765. package/sdk/dist/query/init-complex.js.map +1 -0
  766. package/sdk/dist/query/init.d.ts +106 -0
  767. package/sdk/dist/query/init.d.ts.map +1 -0
  768. package/sdk/dist/query/init.js +1228 -0
  769. package/sdk/dist/query/init.js.map +1 -0
  770. package/sdk/dist/query/intel.d.ts +43 -0
  771. package/sdk/dist/query/intel.d.ts.map +1 -0
  772. package/sdk/dist/query/intel.js +416 -0
  773. package/sdk/dist/query/intel.js.map +1 -0
  774. package/sdk/dist/query/mutation-event-decorator.d.ts +5 -0
  775. package/sdk/dist/query/mutation-event-decorator.d.ts.map +1 -0
  776. package/sdk/dist/query/mutation-event-decorator.js +28 -0
  777. package/sdk/dist/query/mutation-event-decorator.js.map +1 -0
  778. package/sdk/dist/query/mutation-event-mapper.d.ts +4 -0
  779. package/sdk/dist/query/mutation-event-mapper.d.ts.map +1 -0
  780. package/sdk/dist/query/mutation-event-mapper.js +70 -0
  781. package/sdk/dist/query/mutation-event-mapper.js.map +1 -0
  782. package/sdk/dist/query/mvp.d.ts +113 -0
  783. package/sdk/dist/query/mvp.d.ts.map +1 -0
  784. package/sdk/dist/query/mvp.js +225 -0
  785. package/sdk/dist/query/mvp.js.map +1 -0
  786. package/sdk/dist/query/phase-filesystem-adapter.d.ts +4 -0
  787. package/sdk/dist/query/phase-filesystem-adapter.d.ts.map +1 -0
  788. package/sdk/dist/query/phase-filesystem-adapter.js +33 -0
  789. package/sdk/dist/query/phase-filesystem-adapter.js.map +1 -0
  790. package/sdk/dist/query/phase-lifecycle-policy.d.ts +34 -0
  791. package/sdk/dist/query/phase-lifecycle-policy.d.ts.map +1 -0
  792. package/sdk/dist/query/phase-lifecycle-policy.js +138 -0
  793. package/sdk/dist/query/phase-lifecycle-policy.js.map +1 -0
  794. package/sdk/dist/query/phase-lifecycle.d.ts +116 -0
  795. package/sdk/dist/query/phase-lifecycle.d.ts.map +1 -0
  796. package/sdk/dist/query/phase-lifecycle.js +1823 -0
  797. package/sdk/dist/query/phase-lifecycle.js.map +1 -0
  798. package/sdk/dist/query/phase-list-queries.d.ts +20 -0
  799. package/sdk/dist/query/phase-list-queries.d.ts.map +1 -0
  800. package/sdk/dist/query/phase-list-queries.js +129 -0
  801. package/sdk/dist/query/phase-list-queries.js.map +1 -0
  802. package/sdk/dist/query/phase-ready.d.ts +9 -0
  803. package/sdk/dist/query/phase-ready.d.ts.map +1 -0
  804. package/sdk/dist/query/phase-ready.js +132 -0
  805. package/sdk/dist/query/phase-ready.js.map +1 -0
  806. package/sdk/dist/query/phase-roadmap-mutation.d.ts +25 -0
  807. package/sdk/dist/query/phase-roadmap-mutation.d.ts.map +1 -0
  808. package/sdk/dist/query/phase-roadmap-mutation.js +76 -0
  809. package/sdk/dist/query/phase-roadmap-mutation.js.map +1 -0
  810. package/sdk/dist/query/phase-uat-passed.d.ts +46 -0
  811. package/sdk/dist/query/phase-uat-passed.d.ts.map +1 -0
  812. package/sdk/dist/query/phase-uat-passed.js +238 -0
  813. package/sdk/dist/query/phase-uat-passed.js.map +1 -0
  814. package/sdk/dist/query/phase.d.ts +104 -0
  815. package/sdk/dist/query/phase.d.ts.map +1 -0
  816. package/sdk/dist/query/phase.js +617 -0
  817. package/sdk/dist/query/phase.js.map +1 -0
  818. package/sdk/dist/query/pipeline.d.ts +53 -0
  819. package/sdk/dist/query/pipeline.d.ts.map +1 -0
  820. package/sdk/dist/query/pipeline.js +198 -0
  821. package/sdk/dist/query/pipeline.js.map +1 -0
  822. package/sdk/dist/query/plan-scan.d.ts +14 -0
  823. package/sdk/dist/query/plan-scan.d.ts.map +1 -0
  824. package/sdk/dist/query/plan-scan.js +70 -0
  825. package/sdk/dist/query/plan-scan.js.map +1 -0
  826. package/sdk/dist/query/plan-task-structure.d.ts +9 -0
  827. package/sdk/dist/query/plan-task-structure.d.ts.map +1 -0
  828. package/sdk/dist/query/plan-task-structure.js +59 -0
  829. package/sdk/dist/query/plan-task-structure.js.map +1 -0
  830. package/sdk/dist/query/profile-extract-messages.d.ts +40 -0
  831. package/sdk/dist/query/profile-extract-messages.d.ts.map +1 -0
  832. package/sdk/dist/query/profile-extract-messages.js +195 -0
  833. package/sdk/dist/query/profile-extract-messages.js.map +1 -0
  834. package/sdk/dist/query/profile-output.d.ts +11 -0
  835. package/sdk/dist/query/profile-output.d.ts.map +1 -0
  836. package/sdk/dist/query/profile-output.js +873 -0
  837. package/sdk/dist/query/profile-output.js.map +1 -0
  838. package/sdk/dist/query/profile-questionnaire-data.d.ts +21 -0
  839. package/sdk/dist/query/profile-questionnaire-data.d.ts.map +1 -0
  840. package/sdk/dist/query/profile-questionnaire-data.js +171 -0
  841. package/sdk/dist/query/profile-questionnaire-data.js.map +1 -0
  842. package/sdk/dist/query/profile-sample.d.ts +22 -0
  843. package/sdk/dist/query/profile-sample.d.ts.map +1 -0
  844. package/sdk/dist/query/profile-sample.js +136 -0
  845. package/sdk/dist/query/profile-sample.js.map +1 -0
  846. package/sdk/dist/query/profile-scan-sessions.d.ts +49 -0
  847. package/sdk/dist/query/profile-scan-sessions.d.ts.map +1 -0
  848. package/sdk/dist/query/profile-scan-sessions.js +137 -0
  849. package/sdk/dist/query/profile-scan-sessions.js.map +1 -0
  850. package/sdk/dist/query/profile.d.ts +61 -0
  851. package/sdk/dist/query/profile.d.ts.map +1 -0
  852. package/sdk/dist/query/profile.js +307 -0
  853. package/sdk/dist/query/profile.js.map +1 -0
  854. package/sdk/dist/query/progress.d.ts +77 -0
  855. package/sdk/dist/query/progress.d.ts.map +1 -0
  856. package/sdk/dist/query/progress.js +481 -0
  857. package/sdk/dist/query/progress.js.map +1 -0
  858. package/sdk/dist/query/prompt-budget.d.ts +14 -0
  859. package/sdk/dist/query/prompt-budget.d.ts.map +1 -0
  860. package/sdk/dist/query/prompt-budget.js +417 -0
  861. package/sdk/dist/query/prompt-budget.js.map +1 -0
  862. package/sdk/dist/query/query-cli-adapter.d.ts +8 -0
  863. package/sdk/dist/query/query-cli-adapter.d.ts.map +1 -0
  864. package/sdk/dist/query/query-cli-adapter.js +32 -0
  865. package/sdk/dist/query/query-cli-adapter.js.map +1 -0
  866. package/sdk/dist/query/query-cli-output.d.ts +9 -0
  867. package/sdk/dist/query/query-cli-output.d.ts.map +1 -0
  868. package/sdk/dist/query/query-cli-output.js +28 -0
  869. package/sdk/dist/query/query-cli-output.js.map +1 -0
  870. package/sdk/dist/query/query-command-diagnosis.d.ts +6 -0
  871. package/sdk/dist/query/query-command-diagnosis.d.ts.map +1 -0
  872. package/sdk/dist/query/query-command-diagnosis.js +6 -0
  873. package/sdk/dist/query/query-command-diagnosis.js.map +1 -0
  874. package/sdk/dist/query/query-command-resolution-strategy.d.ts +29 -0
  875. package/sdk/dist/query/query-command-resolution-strategy.d.ts.map +1 -0
  876. package/sdk/dist/query/query-command-resolution-strategy.js +103 -0
  877. package/sdk/dist/query/query-command-resolution-strategy.js.map +1 -0
  878. package/sdk/dist/query/query-command-semantics.d.ts +7 -0
  879. package/sdk/dist/query/query-command-semantics.d.ts.map +1 -0
  880. package/sdk/dist/query/query-command-semantics.js +7 -0
  881. package/sdk/dist/query/query-command-semantics.js.map +1 -0
  882. package/sdk/dist/query/query-dispatch-contract.d.ts +21 -0
  883. package/sdk/dist/query/query-dispatch-contract.d.ts.map +1 -0
  884. package/sdk/dist/query/query-dispatch-contract.js +2 -0
  885. package/sdk/dist/query/query-dispatch-contract.js.map +1 -0
  886. package/sdk/dist/query/query-dispatch-error-mapper.d.ts +6 -0
  887. package/sdk/dist/query/query-dispatch-error-mapper.d.ts.map +1 -0
  888. package/sdk/dist/query/query-dispatch-error-mapper.js +6 -0
  889. package/sdk/dist/query/query-dispatch-error-mapper.js.map +1 -0
  890. package/sdk/dist/query/query-dispatch-formatting.d.ts +6 -0
  891. package/sdk/dist/query/query-dispatch-formatting.d.ts.map +1 -0
  892. package/sdk/dist/query/query-dispatch-formatting.js +6 -0
  893. package/sdk/dist/query/query-dispatch-formatting.js.map +1 -0
  894. package/sdk/dist/query/query-dispatch-observability.d.ts +2 -0
  895. package/sdk/dist/query/query-dispatch-observability.d.ts.map +1 -0
  896. package/sdk/dist/query/query-dispatch-observability.js +7 -0
  897. package/sdk/dist/query/query-dispatch-observability.js.map +1 -0
  898. package/sdk/dist/query/query-dispatch.d.ts +48 -0
  899. package/sdk/dist/query/query-dispatch.d.ts.map +1 -0
  900. package/sdk/dist/query/query-dispatch.js +175 -0
  901. package/sdk/dist/query/query-dispatch.js.map +1 -0
  902. package/sdk/dist/query/query-error-details-schema.d.ts +19 -0
  903. package/sdk/dist/query/query-error-details-schema.d.ts.map +1 -0
  904. package/sdk/dist/query/query-error-details-schema.js +10 -0
  905. package/sdk/dist/query/query-error-details-schema.js.map +1 -0
  906. package/sdk/dist/query/query-error-taxonomy.d.ts +38 -0
  907. package/sdk/dist/query/query-error-taxonomy.d.ts.map +1 -0
  908. package/sdk/dist/query/query-error-taxonomy.js +74 -0
  909. package/sdk/dist/query/query-error-taxonomy.js.map +1 -0
  910. package/sdk/dist/query/query-fallback-bridge-adapter.d.ts +14 -0
  911. package/sdk/dist/query/query-fallback-bridge-adapter.d.ts.map +1 -0
  912. package/sdk/dist/query/query-fallback-bridge-adapter.js +33 -0
  913. package/sdk/dist/query/query-fallback-bridge-adapter.js.map +1 -0
  914. package/sdk/dist/query/query-fallback-executor.d.ts +11 -0
  915. package/sdk/dist/query/query-fallback-executor.d.ts.map +1 -0
  916. package/sdk/dist/query/query-fallback-executor.js +31 -0
  917. package/sdk/dist/query/query-fallback-executor.js.map +1 -0
  918. package/sdk/dist/query/query-fallback-output-classifier.d.ts +6 -0
  919. package/sdk/dist/query/query-fallback-output-classifier.d.ts.map +1 -0
  920. package/sdk/dist/query/query-fallback-output-classifier.js +27 -0
  921. package/sdk/dist/query/query-fallback-output-classifier.js.map +1 -0
  922. package/sdk/dist/query/query-fallback-policy.d.ts +6 -0
  923. package/sdk/dist/query/query-fallback-policy.d.ts.map +1 -0
  924. package/sdk/dist/query/query-fallback-policy.js +7 -0
  925. package/sdk/dist/query/query-fallback-policy.js.map +1 -0
  926. package/sdk/dist/query/query-native-dispatch-adapter.d.ts +7 -0
  927. package/sdk/dist/query/query-native-dispatch-adapter.d.ts.map +1 -0
  928. package/sdk/dist/query/query-native-dispatch-adapter.js +6 -0
  929. package/sdk/dist/query/query-native-dispatch-adapter.js.map +1 -0
  930. package/sdk/dist/query/query-policy-capability.d.ts +10 -0
  931. package/sdk/dist/query/query-policy-capability.d.ts.map +1 -0
  932. package/sdk/dist/query/query-policy-capability.js +17 -0
  933. package/sdk/dist/query/query-policy-capability.js.map +1 -0
  934. package/sdk/dist/query/query-runtime-context.d.ts +19 -0
  935. package/sdk/dist/query/query-runtime-context.d.ts.map +1 -0
  936. package/sdk/dist/query/query-runtime-context.js +31 -0
  937. package/sdk/dist/query/query-runtime-context.js.map +1 -0
  938. package/sdk/dist/query/query-unknown-command-hints.d.ts +2 -0
  939. package/sdk/dist/query/query-unknown-command-hints.d.ts.map +1 -0
  940. package/sdk/dist/query/query-unknown-command-hints.js +6 -0
  941. package/sdk/dist/query/query-unknown-command-hints.js.map +1 -0
  942. package/sdk/dist/query/registry-assembly-descriptor.d.ts +12 -0
  943. package/sdk/dist/query/registry-assembly-descriptor.d.ts.map +1 -0
  944. package/sdk/dist/query/registry-assembly-descriptor.js +61 -0
  945. package/sdk/dist/query/registry-assembly-descriptor.js.map +1 -0
  946. package/sdk/dist/query/registry-assembly-invariants.d.ts +30 -0
  947. package/sdk/dist/query/registry-assembly-invariants.d.ts.map +1 -0
  948. package/sdk/dist/query/registry-assembly-invariants.js +77 -0
  949. package/sdk/dist/query/registry-assembly-invariants.js.map +1 -0
  950. package/sdk/dist/query/registry-assembly.d.ts +10 -0
  951. package/sdk/dist/query/registry-assembly.d.ts.map +1 -0
  952. package/sdk/dist/query/registry-assembly.js +53 -0
  953. package/sdk/dist/query/registry-assembly.js.map +1 -0
  954. package/sdk/dist/query/registry.d.ts +90 -0
  955. package/sdk/dist/query/registry.d.ts.map +1 -0
  956. package/sdk/dist/query/registry.js +129 -0
  957. package/sdk/dist/query/registry.js.map +1 -0
  958. package/sdk/dist/query/requirements-extract-from-plans.d.ts +9 -0
  959. package/sdk/dist/query/requirements-extract-from-plans.d.ts.map +1 -0
  960. package/sdk/dist/query/requirements-extract-from-plans.js +76 -0
  961. package/sdk/dist/query/requirements-extract-from-plans.js.map +1 -0
  962. package/sdk/dist/query/roadmap-update-plan-progress.d.ts +11 -0
  963. package/sdk/dist/query/roadmap-update-plan-progress.d.ts.map +1 -0
  964. package/sdk/dist/query/roadmap-update-plan-progress.js +124 -0
  965. package/sdk/dist/query/roadmap-update-plan-progress.js.map +1 -0
  966. package/sdk/dist/query/roadmap.d.ts +160 -0
  967. package/sdk/dist/query/roadmap.d.ts.map +1 -0
  968. package/sdk/dist/query/roadmap.js +982 -0
  969. package/sdk/dist/query/roadmap.js.map +1 -0
  970. package/sdk/dist/query/route-next-action.d.ts +9 -0
  971. package/sdk/dist/query/route-next-action.d.ts.map +1 -0
  972. package/sdk/dist/query/route-next-action.js +318 -0
  973. package/sdk/dist/query/route-next-action.js.map +1 -0
  974. package/sdk/dist/query/schema-detect.d.ts +21 -0
  975. package/sdk/dist/query/schema-detect.d.ts.map +1 -0
  976. package/sdk/dist/query/schema-detect.js +146 -0
  977. package/sdk/dist/query/schema-detect.js.map +1 -0
  978. package/sdk/dist/query/secrets.d.ts +27 -0
  979. package/sdk/dist/query/secrets.d.ts.map +1 -0
  980. package/sdk/dist/query/secrets.js +42 -0
  981. package/sdk/dist/query/secrets.js.map +1 -0
  982. package/sdk/dist/query/skill-manifest.d.ts +50 -0
  983. package/sdk/dist/query/skill-manifest.d.ts.map +1 -0
  984. package/sdk/dist/query/skill-manifest.js +171 -0
  985. package/sdk/dist/query/skill-manifest.js.map +1 -0
  986. package/sdk/dist/query/skills.d.ts +27 -0
  987. package/sdk/dist/query/skills.d.ts.map +1 -0
  988. package/sdk/dist/query/skills.js +137 -0
  989. package/sdk/dist/query/skills.js.map +1 -0
  990. package/sdk/dist/query/state-document.d.ts +14 -0
  991. package/sdk/dist/query/state-document.d.ts.map +1 -0
  992. package/sdk/dist/query/state-document.js +110 -0
  993. package/sdk/dist/query/state-document.js.map +1 -0
  994. package/sdk/dist/query/state-mutation.d.ts +224 -0
  995. package/sdk/dist/query/state-mutation.d.ts.map +1 -0
  996. package/sdk/dist/query/state-mutation.js +1635 -0
  997. package/sdk/dist/query/state-mutation.js.map +1 -0
  998. package/sdk/dist/query/state-project-load.d.ts +23 -0
  999. package/sdk/dist/query/state-project-load.d.ts.map +1 -0
  1000. package/sdk/dist/query/state-project-load.js +75 -0
  1001. package/sdk/dist/query/state-project-load.js.map +1 -0
  1002. package/sdk/dist/query/state.d.ts +78 -0
  1003. package/sdk/dist/query/state.d.ts.map +1 -0
  1004. package/sdk/dist/query/state.js +443 -0
  1005. package/sdk/dist/query/state.js.map +1 -0
  1006. package/sdk/dist/query/summary.d.ts +18 -0
  1007. package/sdk/dist/query/summary.d.ts.map +1 -0
  1008. package/sdk/dist/query/summary.js +249 -0
  1009. package/sdk/dist/query/summary.js.map +1 -0
  1010. package/sdk/dist/query/template.d.ts +46 -0
  1011. package/sdk/dist/query/template.d.ts.map +1 -0
  1012. package/sdk/dist/query/template.js +210 -0
  1013. package/sdk/dist/query/template.js.map +1 -0
  1014. package/sdk/dist/query/uat.d.ts +42 -0
  1015. package/sdk/dist/query/uat.d.ts.map +1 -0
  1016. package/sdk/dist/query/uat.js +339 -0
  1017. package/sdk/dist/query/uat.js.map +1 -0
  1018. package/sdk/dist/query/utils.d.ts +59 -0
  1019. package/sdk/dist/query/utils.d.ts.map +1 -0
  1020. package/sdk/dist/query/utils.js +74 -0
  1021. package/sdk/dist/query/utils.js.map +1 -0
  1022. package/sdk/dist/query/validate.d.ts +67 -0
  1023. package/sdk/dist/query/validate.d.ts.map +1 -0
  1024. package/sdk/dist/query/validate.js +1001 -0
  1025. package/sdk/dist/query/validate.js.map +1 -0
  1026. package/sdk/dist/query/verify.d.ts +98 -0
  1027. package/sdk/dist/query/verify.d.ts.map +1 -0
  1028. package/sdk/dist/query/verify.js +593 -0
  1029. package/sdk/dist/query/verify.js.map +1 -0
  1030. package/sdk/dist/query/websearch.d.ts +24 -0
  1031. package/sdk/dist/query/websearch.d.ts.map +1 -0
  1032. package/sdk/dist/query/websearch.js +68 -0
  1033. package/sdk/dist/query/websearch.js.map +1 -0
  1034. package/sdk/dist/query/workspace.d.ts +62 -0
  1035. package/sdk/dist/query/workspace.d.ts.map +1 -0
  1036. package/sdk/dist/query/workspace.js +104 -0
  1037. package/sdk/dist/query/workspace.js.map +1 -0
  1038. package/sdk/dist/query/workstream-inventory.d.ts +24 -0
  1039. package/sdk/dist/query/workstream-inventory.d.ts.map +1 -0
  1040. package/sdk/dist/query/workstream-inventory.js +120 -0
  1041. package/sdk/dist/query/workstream-inventory.js.map +1 -0
  1042. package/sdk/dist/query/workstream.d.ts +35 -0
  1043. package/sdk/dist/query/workstream.d.ts.map +1 -0
  1044. package/sdk/dist/query/workstream.js +298 -0
  1045. package/sdk/dist/query/workstream.js.map +1 -0
  1046. package/sdk/dist/query/worktree.d.ts +9 -0
  1047. package/sdk/dist/query/worktree.d.ts.map +1 -0
  1048. package/sdk/dist/query/worktree.js +79 -0
  1049. package/sdk/dist/query/worktree.js.map +1 -0
  1050. package/sdk/dist/query-command-executor.d.ts +22 -0
  1051. package/sdk/dist/query-command-executor.d.ts.map +1 -0
  1052. package/sdk/dist/query-command-executor.js +22 -0
  1053. package/sdk/dist/query-command-executor.js.map +1 -0
  1054. package/sdk/dist/query-execution-policy.d.ts +24 -0
  1055. package/sdk/dist/query-execution-policy.d.ts.map +1 -0
  1056. package/sdk/dist/query-execution-policy.js +27 -0
  1057. package/sdk/dist/query-execution-policy.js.map +1 -0
  1058. package/sdk/dist/query-failure-classification.d.ts +9 -0
  1059. package/sdk/dist/query-failure-classification.d.ts.map +1 -0
  1060. package/sdk/dist/query-failure-classification.js +32 -0
  1061. package/sdk/dist/query-failure-classification.js.map +1 -0
  1062. package/sdk/dist/query-gsd-tools-path.d.ts +2 -0
  1063. package/sdk/dist/query-gsd-tools-path.d.ts.map +1 -0
  1064. package/sdk/dist/query-gsd-tools-path.js +2 -0
  1065. package/sdk/dist/query-gsd-tools-path.js.map +1 -0
  1066. package/sdk/dist/query-gsd-tools-runtime.d.ts +20 -0
  1067. package/sdk/dist/query-gsd-tools-runtime.d.ts.map +1 -0
  1068. package/sdk/dist/query-gsd-tools-runtime.js +47 -0
  1069. package/sdk/dist/query-gsd-tools-runtime.js.map +1 -0
  1070. package/sdk/dist/query-hotpath-methods.d.ts +19 -0
  1071. package/sdk/dist/query-hotpath-methods.d.ts.map +1 -0
  1072. package/sdk/dist/query-hotpath-methods.js +34 -0
  1073. package/sdk/dist/query-hotpath-methods.js.map +1 -0
  1074. package/sdk/dist/query-native-direct-adapter.d.ts +20 -0
  1075. package/sdk/dist/query-native-direct-adapter.d.ts.map +1 -0
  1076. package/sdk/dist/query-native-direct-adapter.js +52 -0
  1077. package/sdk/dist/query-native-direct-adapter.js.map +1 -0
  1078. package/sdk/dist/query-native-hotpath-adapter.d.ts +15 -0
  1079. package/sdk/dist/query-native-hotpath-adapter.d.ts.map +1 -0
  1080. package/sdk/dist/query-native-hotpath-adapter.js +32 -0
  1081. package/sdk/dist/query-native-hotpath-adapter.js.map +1 -0
  1082. package/sdk/dist/query-raw-output-projection.d.ts +6 -0
  1083. package/sdk/dist/query-raw-output-projection.d.ts.map +1 -0
  1084. package/sdk/dist/query-raw-output-projection.js +86 -0
  1085. package/sdk/dist/query-raw-output-projection.js.map +1 -0
  1086. package/sdk/dist/query-runtime-bridge.d.ts +61 -0
  1087. package/sdk/dist/query-runtime-bridge.d.ts.map +1 -0
  1088. package/sdk/dist/query-runtime-bridge.js +144 -0
  1089. package/sdk/dist/query-runtime-bridge.js.map +1 -0
  1090. package/sdk/dist/query-subprocess-adapter.d.ts +18 -0
  1091. package/sdk/dist/query-subprocess-adapter.d.ts.map +1 -0
  1092. package/sdk/dist/query-subprocess-adapter.js +92 -0
  1093. package/sdk/dist/query-subprocess-adapter.js.map +1 -0
  1094. package/sdk/dist/query-tools-error-factory.d.ts +16 -0
  1095. package/sdk/dist/query-tools-error-factory.d.ts.map +1 -0
  1096. package/sdk/dist/query-tools-error-factory.js +33 -0
  1097. package/sdk/dist/query-tools-error-factory.js.map +1 -0
  1098. package/sdk/dist/research-gate.d.ts +24 -0
  1099. package/sdk/dist/research-gate.d.ts.map +1 -0
  1100. package/sdk/dist/research-gate.js +70 -0
  1101. package/sdk/dist/research-gate.js.map +1 -0
  1102. package/sdk/dist/runtime-bridge-sync/index.d.ts +96 -0
  1103. package/sdk/dist/runtime-bridge-sync/index.d.ts.map +1 -0
  1104. package/sdk/dist/runtime-bridge-sync/index.js +109 -0
  1105. package/sdk/dist/runtime-bridge-sync/index.js.map +1 -0
  1106. package/sdk/dist/runtime-bridge-sync/worker.d.ts +2 -0
  1107. package/sdk/dist/runtime-bridge-sync/worker.d.ts.map +1 -0
  1108. package/sdk/dist/runtime-bridge-sync/worker.js +180 -0
  1109. package/sdk/dist/runtime-bridge-sync/worker.js.map +1 -0
  1110. package/sdk/dist/runtime-gate.d.ts +14 -0
  1111. package/sdk/dist/runtime-gate.d.ts.map +1 -0
  1112. package/sdk/dist/runtime-gate.js +48 -0
  1113. package/sdk/dist/runtime-gate.js.map +1 -0
  1114. package/sdk/dist/sdk-package-compatibility.d.ts +38 -0
  1115. package/sdk/dist/sdk-package-compatibility.d.ts.map +1 -0
  1116. package/sdk/dist/sdk-package-compatibility.js +90 -0
  1117. package/sdk/dist/sdk-package-compatibility.js.map +1 -0
  1118. package/sdk/dist/session-runner.d.ts +40 -0
  1119. package/sdk/dist/session-runner.d.ts.map +1 -0
  1120. package/sdk/dist/session-runner.js +274 -0
  1121. package/sdk/dist/session-runner.js.map +1 -0
  1122. package/sdk/dist/tool-scoping.d.ts +31 -0
  1123. package/sdk/dist/tool-scoping.d.ts.map +1 -0
  1124. package/sdk/dist/tool-scoping.js +54 -0
  1125. package/sdk/dist/tool-scoping.js.map +1 -0
  1126. package/sdk/dist/types.d.ts +794 -0
  1127. package/sdk/dist/types.d.ts.map +1 -0
  1128. package/sdk/dist/types.js +77 -0
  1129. package/sdk/dist/types.js.map +1 -0
  1130. package/sdk/dist/workstream-inventory/builder.d.ts +88 -0
  1131. package/sdk/dist/workstream-inventory/builder.d.ts.map +1 -0
  1132. package/sdk/dist/workstream-inventory/builder.js +84 -0
  1133. package/sdk/dist/workstream-inventory/builder.js.map +1 -0
  1134. package/sdk/dist/workstream-name-policy.d.ts +37 -0
  1135. package/sdk/dist/workstream-name-policy.d.ts.map +1 -0
  1136. package/sdk/dist/workstream-name-policy.js +53 -0
  1137. package/sdk/dist/workstream-name-policy.js.map +1 -0
  1138. package/sdk/dist/workstream-utils.d.ts +23 -0
  1139. package/sdk/dist/workstream-utils.d.ts.map +1 -0
  1140. package/sdk/dist/workstream-utils.js +34 -0
  1141. package/sdk/dist/workstream-utils.js.map +1 -0
  1142. package/sdk/dist/ws-transport.d.ts +32 -0
  1143. package/sdk/dist/ws-transport.d.ts.map +1 -0
  1144. package/sdk/dist/ws-transport.js +84 -0
  1145. package/sdk/dist/ws-transport.js.map +1 -0
  1146. package/sdk/package-lock.json +2530 -0
  1147. package/sdk/package.json +77 -0
  1148. package/sdk/prompts/templates/project.md +186 -0
  1149. package/sdk/prompts/templates/requirements.md +231 -0
  1150. package/sdk/prompts/templates/research-project/ARCHITECTURE.md +204 -0
  1151. package/sdk/prompts/templates/research-project/FEATURES.md +147 -0
  1152. package/sdk/prompts/templates/research-project/PITFALLS.md +200 -0
  1153. package/sdk/prompts/templates/research-project/STACK.md +120 -0
  1154. package/sdk/prompts/templates/research-project/SUMMARY.md +170 -0
  1155. package/sdk/prompts/templates/roadmap.md +202 -0
  1156. package/sdk/prompts/templates/state.md +175 -0
  1157. package/sdk/shared/config-defaults.manifest.json +75 -0
  1158. package/sdk/shared/config-schema.manifest.json +151 -0
  1159. package/sdk/shared/model-catalog.json +122 -0
  1160. package/sdk/src/assembled-prompts.test.ts +349 -0
  1161. package/sdk/src/bug-3589-planning-paths-validation.test.ts +89 -0
  1162. package/sdk/src/bug-3591-gsdtools-runtime-workstream.test.ts +179 -0
  1163. package/sdk/src/cli-transport.test.ts +388 -0
  1164. package/sdk/src/cli-transport.ts +130 -0
  1165. package/sdk/src/cli.test.ts +426 -0
  1166. package/sdk/src/cli.ts +589 -0
  1167. package/sdk/src/config.test.ts +277 -0
  1168. package/sdk/src/config.ts +202 -0
  1169. package/sdk/src/configuration/index.test.ts +318 -0
  1170. package/sdk/src/configuration/index.ts +325 -0
  1171. package/sdk/src/context-engine.test.ts +295 -0
  1172. package/sdk/src/context-engine.ts +170 -0
  1173. package/sdk/src/context-truncation.test.ts +163 -0
  1174. package/sdk/src/context-truncation.ts +233 -0
  1175. package/sdk/src/e2e.integration.test.ts +181 -0
  1176. package/sdk/src/errors.ts +72 -0
  1177. package/sdk/src/event-stream.test.ts +661 -0
  1178. package/sdk/src/event-stream.ts +441 -0
  1179. package/sdk/src/golden/capture.ts +95 -0
  1180. package/sdk/src/golden/fixtures/generate-slug.golden.json +1 -0
  1181. package/sdk/src/golden/fixtures/profile-sample-sessions/demo-project/sample.jsonl +3 -0
  1182. package/sdk/src/golden/fixtures/summary-extract-sample.md +26 -0
  1183. package/sdk/src/golden/fixtures/uat-render-checkpoint-sample.md +15 -0
  1184. package/sdk/src/golden/golden-integration-covered.ts +30 -0
  1185. package/sdk/src/golden/golden-mutation-covered.ts +17 -0
  1186. package/sdk/src/golden/golden-policy.test.ts +8 -0
  1187. package/sdk/src/golden/golden-policy.ts +120 -0
  1188. package/sdk/src/golden/golden.integration.test.ts +1031 -0
  1189. package/sdk/src/golden/init-golden-normalize.ts +15 -0
  1190. package/sdk/src/golden/read-only-golden-rows.ts +77 -0
  1191. package/sdk/src/golden/read-only-parity.integration.test.ts +133 -0
  1192. package/sdk/src/golden/registry-canonical-commands.ts +31 -0
  1193. package/sdk/src/gsd-tools-error.test.ts +21 -0
  1194. package/sdk/src/gsd-tools-error.ts +65 -0
  1195. package/sdk/src/gsd-tools.test.ts +472 -0
  1196. package/sdk/src/gsd-tools.ts +237 -0
  1197. package/sdk/src/gsd-transport-policy.test.ts +34 -0
  1198. package/sdk/src/gsd-transport-policy.ts +48 -0
  1199. package/sdk/src/gsd-transport.test.ts +299 -0
  1200. package/sdk/src/gsd-transport.ts +118 -0
  1201. package/sdk/src/index.ts +366 -0
  1202. package/sdk/src/init-e2e.integration.test.ts +138 -0
  1203. package/sdk/src/init-runner.test.ts +740 -0
  1204. package/sdk/src/init-runner.ts +734 -0
  1205. package/sdk/src/lifecycle-e2e.integration.test.ts +258 -0
  1206. package/sdk/src/logger.test.ts +149 -0
  1207. package/sdk/src/logger.ts +113 -0
  1208. package/sdk/src/milestone-runner.test.ts +421 -0
  1209. package/sdk/src/model-catalog.ts +70 -0
  1210. package/sdk/src/phase-prompt.ts +259 -0
  1211. package/sdk/src/phase-runner.integration.test.ts +377 -0
  1212. package/sdk/src/phase-runner.test.ts +3660 -0
  1213. package/sdk/src/phase-runner.ts +1442 -0
  1214. package/sdk/src/plan-parser.test.ts +579 -0
  1215. package/sdk/src/plan-parser.ts +431 -0
  1216. package/sdk/src/planning-journal.test.ts +70 -0
  1217. package/sdk/src/planning-journal.ts +153 -0
  1218. package/sdk/src/planning-runtime.test.ts +29 -0
  1219. package/sdk/src/planning-runtime.ts +100 -0
  1220. package/sdk/src/project-root/index.test.ts +186 -0
  1221. package/sdk/src/project-root/index.ts +144 -0
  1222. package/sdk/src/prompt-builder.test.ts +318 -0
  1223. package/sdk/src/prompt-builder.ts +218 -0
  1224. package/sdk/src/prompt-sanitizer.test.ts +260 -0
  1225. package/sdk/src/prompt-sanitizer.ts +116 -0
  1226. package/sdk/src/query/QUERY-HANDLERS.md +349 -0
  1227. package/sdk/src/query/active-workstream-store.ts +50 -0
  1228. package/sdk/src/query/agent-failure-classifier.test.ts +157 -0
  1229. package/sdk/src/query/agent-failure-classifier.ts +105 -0
  1230. package/sdk/src/query/audit-open.ts +722 -0
  1231. package/sdk/src/query/check-auto-mode.test.ts +77 -0
  1232. package/sdk/src/query/check-auto-mode.ts +49 -0
  1233. package/sdk/src/query/check-completion.test.ts +113 -0
  1234. package/sdk/src/query/check-completion.ts +182 -0
  1235. package/sdk/src/query/check-decision-coverage.test.ts +519 -0
  1236. package/sdk/src/query/check-decision-coverage.ts +554 -0
  1237. package/sdk/src/query/check-gates.test.ts +103 -0
  1238. package/sdk/src/query/check-gates.ts +112 -0
  1239. package/sdk/src/query/check-ship-ready.test.ts +303 -0
  1240. package/sdk/src/query/check-ship-ready.ts +136 -0
  1241. package/sdk/src/query/check-verification-status.test.ts +143 -0
  1242. package/sdk/src/query/check-verification-status.ts +160 -0
  1243. package/sdk/src/query/command-aliases.generated.ts +154 -0
  1244. package/sdk/src/query/command-catalog.ts +31 -0
  1245. package/sdk/src/query/command-definition.test.ts +47 -0
  1246. package/sdk/src/query/command-definition.ts +70 -0
  1247. package/sdk/src/query/command-family-handlers.ts +123 -0
  1248. package/sdk/src/query/command-manifest.init.ts +24 -0
  1249. package/sdk/src/query/command-manifest.non-family.ts +86 -0
  1250. package/sdk/src/query/command-manifest.phase.ts +17 -0
  1251. package/sdk/src/query/command-manifest.phases.ts +11 -0
  1252. package/sdk/src/query/command-manifest.roadmap.ts +11 -0
  1253. package/sdk/src/query/command-manifest.state.ts +31 -0
  1254. package/sdk/src/query/command-manifest.ts +17 -0
  1255. package/sdk/src/query/command-manifest.types.ts +13 -0
  1256. package/sdk/src/query/command-manifest.validate.ts +11 -0
  1257. package/sdk/src/query/command-manifest.verify.ts +17 -0
  1258. package/sdk/src/query/command-resolution.test.ts +70 -0
  1259. package/sdk/src/query/command-seam-coverage.test.ts +118 -0
  1260. package/sdk/src/query/command-static-catalog-domain.ts +111 -0
  1261. package/sdk/src/query/command-static-catalog-foundation.ts +111 -0
  1262. package/sdk/src/query/command-topology.test.ts +28 -0
  1263. package/sdk/src/query/command-topology.ts +114 -0
  1264. package/sdk/src/query/commands-list.test.ts +36 -0
  1265. package/sdk/src/query/commands-list.ts +19 -0
  1266. package/sdk/src/query/commit.test.ts +485 -0
  1267. package/sdk/src/query/commit.ts +717 -0
  1268. package/sdk/src/query/config-gates.test.ts +89 -0
  1269. package/sdk/src/query/config-gates.ts +69 -0
  1270. package/sdk/src/query/config-mutation.test.ts +598 -0
  1271. package/sdk/src/query/config-mutation.ts +705 -0
  1272. package/sdk/src/query/config-query.test.ts +472 -0
  1273. package/sdk/src/query/config-query.ts +314 -0
  1274. package/sdk/src/query/config-schema.ts +35 -0
  1275. package/sdk/src/query/decisions.test.ts +221 -0
  1276. package/sdk/src/query/decisions.ts +196 -0
  1277. package/sdk/src/query/decomposed-handlers.test.ts +431 -0
  1278. package/sdk/src/query/detect-custom-files.test.ts +115 -0
  1279. package/sdk/src/query/detect-custom-files.ts +96 -0
  1280. package/sdk/src/query/detect-phase-type.test.ts +105 -0
  1281. package/sdk/src/query/detect-phase-type.ts +141 -0
  1282. package/sdk/src/query/docs-init.ts +258 -0
  1283. package/sdk/src/query/fallow-audit.ts +88 -0
  1284. package/sdk/src/query/frontmatter-array.test.ts +14 -0
  1285. package/sdk/src/query/frontmatter-mutation.test.ts +259 -0
  1286. package/sdk/src/query/frontmatter-mutation.ts +328 -0
  1287. package/sdk/src/query/frontmatter.test.ts +326 -0
  1288. package/sdk/src/query/frontmatter.ts +395 -0
  1289. package/sdk/src/query/helpers.test.ts +615 -0
  1290. package/sdk/src/query/helpers.ts +566 -0
  1291. package/sdk/src/query/index-thin-seam.test.ts +16 -0
  1292. package/sdk/src/query/index.ts +9 -0
  1293. package/sdk/src/query/init-complex.test.ts +788 -0
  1294. package/sdk/src/query/init-complex.ts +815 -0
  1295. package/sdk/src/query/init-workstream-milestone-op.test.ts +321 -0
  1296. package/sdk/src/query/init.test.ts +791 -0
  1297. package/sdk/src/query/init.ts +1335 -0
  1298. package/sdk/src/query/intel.test.ts +90 -0
  1299. package/sdk/src/query/intel.ts +404 -0
  1300. package/sdk/src/query/mutation-event-decorator.test.ts +45 -0
  1301. package/sdk/src/query/mutation-event-decorator.ts +37 -0
  1302. package/sdk/src/query/mutation-event-mapper.test.ts +33 -0
  1303. package/sdk/src/query/mutation-event-mapper.ts +102 -0
  1304. package/sdk/src/query/mvp.test.ts +335 -0
  1305. package/sdk/src/query/mvp.ts +292 -0
  1306. package/sdk/src/query/normalize-query-command.test.ts +102 -0
  1307. package/sdk/src/query/phase-filesystem-adapter.ts +35 -0
  1308. package/sdk/src/query/phase-lifecycle-policy.ts +171 -0
  1309. package/sdk/src/query/phase-lifecycle.test.ts +1971 -0
  1310. package/sdk/src/query/phase-lifecycle.ts +2210 -0
  1311. package/sdk/src/query/phase-list-queries.test.ts +88 -0
  1312. package/sdk/src/query/phase-list-queries.ts +152 -0
  1313. package/sdk/src/query/phase-ready.test.ts +65 -0
  1314. package/sdk/src/query/phase-ready.ts +159 -0
  1315. package/sdk/src/query/phase-roadmap-mutation.ts +82 -0
  1316. package/sdk/src/query/phase-uat-passed.test.ts +593 -0
  1317. package/sdk/src/query/phase-uat-passed.ts +297 -0
  1318. package/sdk/src/query/phase.test.ts +693 -0
  1319. package/sdk/src/query/phase.ts +741 -0
  1320. package/sdk/src/query/pipeline.test.ts +169 -0
  1321. package/sdk/src/query/pipeline.ts +243 -0
  1322. package/sdk/src/query/plan-scan.test.ts +35 -0
  1323. package/sdk/src/query/plan-scan.ts +82 -0
  1324. package/sdk/src/query/plan-task-structure.test.ts +65 -0
  1325. package/sdk/src/query/plan-task-structure.ts +63 -0
  1326. package/sdk/src/query/policy-convergence.test.ts +28 -0
  1327. package/sdk/src/query/profile-extract-messages.ts +247 -0
  1328. package/sdk/src/query/profile-output.ts +929 -0
  1329. package/sdk/src/query/profile-questionnaire-data.ts +181 -0
  1330. package/sdk/src/query/profile-sample.ts +184 -0
  1331. package/sdk/src/query/profile-scan-sessions.ts +174 -0
  1332. package/sdk/src/query/profile.test.ts +136 -0
  1333. package/sdk/src/query/profile.ts +337 -0
  1334. package/sdk/src/query/progress.test.ts +156 -0
  1335. package/sdk/src/query/progress.ts +566 -0
  1336. package/sdk/src/query/prompt-budget.ts +556 -0
  1337. package/sdk/src/query/query-cli-adapter.test.ts +79 -0
  1338. package/sdk/src/query/query-cli-adapter.ts +39 -0
  1339. package/sdk/src/query/query-cli-output.test.ts +33 -0
  1340. package/sdk/src/query/query-cli-output.ts +35 -0
  1341. package/sdk/src/query/query-command-diagnosis.test.ts +22 -0
  1342. package/sdk/src/query/query-command-diagnosis.ts +5 -0
  1343. package/sdk/src/query/query-command-resolution-strategy.test.ts +34 -0
  1344. package/sdk/src/query/query-command-resolution-strategy.ts +121 -0
  1345. package/sdk/src/query/query-command-semantics.test.ts +22 -0
  1346. package/sdk/src/query/query-command-semantics.ts +22 -0
  1347. package/sdk/src/query/query-dispatch-contract.ts +30 -0
  1348. package/sdk/src/query/query-dispatch-error-mapper.ts +5 -0
  1349. package/sdk/src/query/query-dispatch-formatting.ts +5 -0
  1350. package/sdk/src/query/query-dispatch-observability.ts +6 -0
  1351. package/sdk/src/query/query-dispatch.test.ts +699 -0
  1352. package/sdk/src/query/query-dispatch.ts +243 -0
  1353. package/sdk/src/query/query-error-details-schema.ts +29 -0
  1354. package/sdk/src/query/query-error-taxonomy.test.ts +39 -0
  1355. package/sdk/src/query/query-error-taxonomy.ts +117 -0
  1356. package/sdk/src/query/query-fallback-bridge-adapter.test.ts +32 -0
  1357. package/sdk/src/query/query-fallback-bridge-adapter.ts +54 -0
  1358. package/sdk/src/query/query-fallback-executor.test.ts +82 -0
  1359. package/sdk/src/query/query-fallback-executor.ts +44 -0
  1360. package/sdk/src/query/query-fallback-output-classifier.test.ts +36 -0
  1361. package/sdk/src/query/query-fallback-output-classifier.ts +31 -0
  1362. package/sdk/src/query/query-fallback-policy.test.ts +13 -0
  1363. package/sdk/src/query/query-fallback-policy.ts +11 -0
  1364. package/sdk/src/query/query-native-dispatch-adapter.ts +16 -0
  1365. package/sdk/src/query/query-policy-capability.test.ts +10 -0
  1366. package/sdk/src/query/query-policy-capability.ts +26 -0
  1367. package/sdk/src/query/query-policy-snapshot.test.ts +9 -0
  1368. package/sdk/src/query/query-registry-capability.test.ts +14 -0
  1369. package/sdk/src/query/query-runtime-context.ts +44 -0
  1370. package/sdk/src/query/query-unknown-command-hints.test.ts +9 -0
  1371. package/sdk/src/query/query-unknown-command-hints.ts +5 -0
  1372. package/sdk/src/query/registry-assembly-descriptor.ts +87 -0
  1373. package/sdk/src/query/registry-assembly-invariants.ts +127 -0
  1374. package/sdk/src/query/registry-assembly.test.ts +138 -0
  1375. package/sdk/src/query/registry-assembly.ts +78 -0
  1376. package/sdk/src/query/registry.test.ts +208 -0
  1377. package/sdk/src/query/registry.ts +142 -0
  1378. package/sdk/src/query/requirements-extract-from-plans.test.ts +58 -0
  1379. package/sdk/src/query/requirements-extract-from-plans.ts +86 -0
  1380. package/sdk/src/query/roadmap-update-plan-progress.test.ts +233 -0
  1381. package/sdk/src/query/roadmap-update-plan-progress.ts +159 -0
  1382. package/sdk/src/query/roadmap.test.ts +1250 -0
  1383. package/sdk/src/query/roadmap.ts +1131 -0
  1384. package/sdk/src/query/route-next-action.test.ts +61 -0
  1385. package/sdk/src/query/route-next-action.ts +345 -0
  1386. package/sdk/src/query/schema-detect.ts +189 -0
  1387. package/sdk/src/query/secrets.test.ts +66 -0
  1388. package/sdk/src/query/secrets.ts +43 -0
  1389. package/sdk/src/query/skill-manifest.test.ts +62 -0
  1390. package/sdk/src/query/skill-manifest.ts +216 -0
  1391. package/sdk/src/query/skills.test.ts +234 -0
  1392. package/sdk/src/query/skills.ts +143 -0
  1393. package/sdk/src/query/state-document.test.ts +197 -0
  1394. package/sdk/src/query/state-document.ts +129 -0
  1395. package/sdk/src/query/state-mutation.test.ts +1210 -0
  1396. package/sdk/src/query/state-mutation.ts +1814 -0
  1397. package/sdk/src/query/state-project-load.ts +80 -0
  1398. package/sdk/src/query/state.test.ts +616 -0
  1399. package/sdk/src/query/state.ts +476 -0
  1400. package/sdk/src/query/sub-repos-root.integration.test.ts +79 -0
  1401. package/sdk/src/query/summary.test.ts +95 -0
  1402. package/sdk/src/query/summary.ts +296 -0
  1403. package/sdk/src/query/template.test.ts +180 -0
  1404. package/sdk/src/query/template.ts +242 -0
  1405. package/sdk/src/query/uat.test.ts +77 -0
  1406. package/sdk/src/query/uat.ts +365 -0
  1407. package/sdk/src/query/utils.test.ts +82 -0
  1408. package/sdk/src/query/utils.ts +106 -0
  1409. package/sdk/src/query/validate.test.ts +924 -0
  1410. package/sdk/src/query/validate.ts +1054 -0
  1411. package/sdk/src/query/verify.test.ts +414 -0
  1412. package/sdk/src/query/verify.ts +656 -0
  1413. package/sdk/src/query/websearch.test.ts +31 -0
  1414. package/sdk/src/query/websearch.ts +82 -0
  1415. package/sdk/src/query/workspace.test.ts +120 -0
  1416. package/sdk/src/query/workspace.ts +145 -0
  1417. package/sdk/src/query/workstream-inventory.ts +143 -0
  1418. package/sdk/src/query/workstream.test.ts +153 -0
  1419. package/sdk/src/query/workstream.ts +324 -0
  1420. package/sdk/src/query/worktree.ts +84 -0
  1421. package/sdk/src/query-command-executor.ts +31 -0
  1422. package/sdk/src/query-execution-policy.test.ts +52 -0
  1423. package/sdk/src/query-execution-policy.ts +46 -0
  1424. package/sdk/src/query-failure-classification.test.ts +23 -0
  1425. package/sdk/src/query-failure-classification.ts +42 -0
  1426. package/sdk/src/query-gsd-tools-path.ts +1 -0
  1427. package/sdk/src/query-gsd-tools-runtime.ts +89 -0
  1428. package/sdk/src/query-hotpath-methods.ts +48 -0
  1429. package/sdk/src/query-native-direct-adapter.test.ts +35 -0
  1430. package/sdk/src/query-native-direct-adapter.ts +70 -0
  1431. package/sdk/src/query-native-hotpath-adapter.test.ts +43 -0
  1432. package/sdk/src/query-native-hotpath-adapter.ts +45 -0
  1433. package/sdk/src/query-raw-output-projection.test.ts +39 -0
  1434. package/sdk/src/query-raw-output-projection.ts +93 -0
  1435. package/sdk/src/query-runtime-bridge.test.ts +150 -0
  1436. package/sdk/src/query-runtime-bridge.ts +215 -0
  1437. package/sdk/src/query-runtime-seam-coverage.test.ts +20 -0
  1438. package/sdk/src/query-subprocess-adapter.test.ts +84 -0
  1439. package/sdk/src/query-subprocess-adapter.ts +146 -0
  1440. package/sdk/src/query-tools-error-factory.test.ts +35 -0
  1441. package/sdk/src/query-tools-error-factory.ts +76 -0
  1442. package/sdk/src/research-gate.test.ts +190 -0
  1443. package/sdk/src/research-gate.ts +94 -0
  1444. package/sdk/src/runtime-bridge-options.test.ts +33 -0
  1445. package/sdk/src/runtime-bridge-sync/index.test.ts +164 -0
  1446. package/sdk/src/runtime-bridge-sync/index.ts +154 -0
  1447. package/sdk/src/runtime-bridge-sync/projectdir-regression.test.ts +150 -0
  1448. package/sdk/src/runtime-bridge-sync/worker.ts +224 -0
  1449. package/sdk/src/runtime-gate.test.ts +84 -0
  1450. package/sdk/src/runtime-gate.ts +52 -0
  1451. package/sdk/src/sdk-package-compatibility.test.ts +97 -0
  1452. package/sdk/src/sdk-package-compatibility.ts +141 -0
  1453. package/sdk/src/session-runner.test.ts +164 -0
  1454. package/sdk/src/session-runner.ts +327 -0
  1455. package/sdk/src/tool-scoping.test.ts +160 -0
  1456. package/sdk/src/tool-scoping.ts +61 -0
  1457. package/sdk/src/types.ts +927 -0
  1458. package/sdk/src/workflow-agent-skills-consistency.test.ts +98 -0
  1459. package/sdk/src/workstream-inventory/builder.test.ts +241 -0
  1460. package/sdk/src/workstream-inventory/builder.ts +170 -0
  1461. package/sdk/src/workstream-name-policy.ts +57 -0
  1462. package/sdk/src/workstream-utils.ts +36 -0
  1463. package/sdk/src/ws-flag.test.ts +285 -0
  1464. package/sdk/src/ws-transport.test.ts +161 -0
  1465. package/sdk/src/ws-transport.ts +93 -0
  1466. package/sdk/tsconfig.json +20 -0
@@ -0,0 +1,1630 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @deprecated The supported programmatic surface is `gsd-sdk query` (SDK query registry)
5
+ * and the `@opengsd/gsd-sdk` package. This Node CLI remains the compatibility implementation
6
+ * for shell scripts and older workflows; prefer calling the SDK from agents and automation.
7
+ *
8
+ * GSD Tools — CLI utility for GSD workflow operations
9
+ *
10
+ * Replaces repetitive inline bash patterns across ~50 GSD command/workflow/agent files.
11
+ * Centralizes: config parsing, model resolution, phase lookup, git commits, summary verification.
12
+ *
13
+ * Usage: node gsd-tools.cjs <command> [args] [--raw] [--pick <field>]
14
+ *
15
+ * Atomic Commands:
16
+ * state load Load project config + state
17
+ * state json Output STATE.md frontmatter as JSON
18
+ * state update <field> <value> Update a STATE.md field
19
+ * state get [section] Get STATE.md content or section
20
+ * state patch --field val ... Batch update STATE.md fields
21
+ * state begin-phase --phase N --name S --plans C Update STATE.md for new phase start
22
+ * state signal-waiting --type T --question Q --options "A|B" --phase P Write WAITING.json signal
23
+ * state signal-resume Remove WAITING.json signal
24
+ * resolve-model <agent-type> Get model for agent based on profile
25
+ * find-phase <phase> Find phase directory by number
26
+ * commit <message> [--files f1 f2] [--no-verify] Commit planning docs
27
+ * commit-to-subrepo <msg> --files f1 f2 Route commits to sub-repos
28
+ * verify-summary <path> Verify a SUMMARY.md file
29
+ * generate-slug <text> Convert text to URL-safe slug
30
+ * current-timestamp [format] Get timestamp (full|date|filename)
31
+ * list-todos [area] Count and enumerate pending todos
32
+ * verify-path-exists <path> Check file/directory existence
33
+ * config-ensure-section Initialize .planning/config.json
34
+ * history-digest Aggregate all SUMMARY.md data
35
+ * summary-extract <path> [--fields] Extract structured data from SUMMARY.md
36
+ * state-snapshot Structured parse of STATE.md
37
+ * phase-plan-index <phase> Index plans with waves and status
38
+ * websearch <query> Search web via Brave API (if configured)
39
+ * [--limit N] [--freshness day|week|month]
40
+ *
41
+ * Phase Operations:
42
+ * phase next-decimal <phase> Calculate next decimal phase number
43
+ * phase add <description> [--id ID] Append new phase to roadmap + create dir
44
+ * phase insert <after> <description> Insert decimal phase after existing
45
+ * phase remove <phase> [--force] Remove phase, renumber all subsequent
46
+ * phase complete <phase> Mark phase done, update state + roadmap
47
+ *
48
+ * Roadmap Operations:
49
+ * roadmap get-phase <phase> Extract phase section from ROADMAP.md
50
+ * roadmap analyze Full roadmap parse with disk status
51
+ * roadmap update-plan-progress <N> Update progress table row from disk (PLAN vs SUMMARY counts)
52
+ * roadmap annotate-dependencies <N> Add wave dependency notes + cross-cutting constraints to ROADMAP.md
53
+ *
54
+ * Requirements Operations:
55
+ * requirements mark-complete <ids> Mark requirement IDs as complete in REQUIREMENTS.md
56
+ * Accepts: REQ-01,REQ-02 or REQ-01 REQ-02 or [REQ-01, REQ-02]
57
+ *
58
+ * Milestone Operations:
59
+ * milestone complete <version> Archive milestone, create MILESTONES.md
60
+ * [--name <name>]
61
+ * [--archive-phases] Move phase dirs to milestones/vX.Y-phases/
62
+ *
63
+ * Validation:
64
+ * validate consistency Check phase numbering, disk/roadmap sync
65
+ * validate health [--repair] Check .planning/ integrity, optionally repair
66
+ * validate agents Check GSD agent installation status
67
+ *
68
+ * Progress:
69
+ * progress [json|table|bar] Render progress in various formats
70
+ *
71
+ * Todos:
72
+ * todo complete <filename> Move todo from pending to completed
73
+ *
74
+ * UAT Audit:
75
+ * audit-uat Scan all phases for unresolved UAT/verification items
76
+ * uat render-checkpoint --file <path> Render the current UAT checkpoint block
77
+ *
78
+ * Open Artifact Audit:
79
+ * audit-open [--json] Scan all .planning/ artifact types for unresolved items
80
+ *
81
+ * Intel:
82
+ * intel query <term> Query intel files for a term
83
+ * intel status Show intel file freshness
84
+ * intel update Trigger intel refresh (returns agent spawn hint)
85
+ * intel diff Show changed intel entries since last snapshot
86
+ * intel snapshot Save current intel state as diff baseline
87
+ * intel patch-meta <file> Update _meta.updated_at in an intel file
88
+ * intel validate Validate intel file structure
89
+ * intel extract-exports <file> Extract exported symbols from a source file
90
+ *
91
+ * Scaffolding:
92
+ * scaffold context --phase <N> Create CONTEXT.md template
93
+ * scaffold uat --phase <N> Create UAT.md template
94
+ * scaffold verification --phase <N> Create VERIFICATION.md template
95
+ * scaffold phase-dir --phase <N> Create phase directory
96
+ * --name <name>
97
+ *
98
+ * Frontmatter CRUD:
99
+ * frontmatter get <file> [--field k] Extract frontmatter as JSON
100
+ * frontmatter set <file> --field k Update single frontmatter field
101
+ * --value jsonVal
102
+ * frontmatter merge <file> Merge JSON into frontmatter
103
+ * --data '{json}'
104
+ * frontmatter validate <file> Validate required fields
105
+ * --schema plan|summary|verification
106
+ *
107
+ * Verification Suite:
108
+ * verify plan-structure <file> Check PLAN.md structure + tasks
109
+ * verify phase-completeness <phase> Check all plans have summaries
110
+ * verify references <file> Check @-refs + paths resolve
111
+ * verify commits <h1> [h2] ... Batch verify commit hashes
112
+ * verify artifacts <plan-file> Check must_haves.artifacts
113
+ * verify key-links <plan-file> Check must_haves.key_links
114
+ * verify schema-drift <phase> [--skip] Detect schema file changes without push
115
+ * verify codebase-drift Detect structural drift since last codebase map (#2003)
116
+ *
117
+ * Template Fill:
118
+ * template fill summary --phase N Create pre-filled SUMMARY.md
119
+ * [--plan M] [--name "..."]
120
+ * [--fields '{json}']
121
+ * template fill plan --phase N Create pre-filled PLAN.md
122
+ * [--plan M] [--type execute|tdd]
123
+ * [--wave N] [--fields '{json}']
124
+ * template fill verification Create pre-filled VERIFICATION.md
125
+ * --phase N [--fields '{json}']
126
+ *
127
+ * State Progression:
128
+ * state advance-plan Increment plan counter
129
+ * state record-metric --phase N Record execution metrics
130
+ * --plan M --duration Xmin
131
+ * [--tasks N] [--files N]
132
+ * state update-progress Recalculate progress bar
133
+ * state add-decision --summary "..." Add decision to STATE.md
134
+ * [--phase N] [--rationale "..."]
135
+ * [--summary-file path] [--rationale-file path]
136
+ * state add-blocker --text "..." Add blocker
137
+ * [--text-file path]
138
+ * state resolve-blocker --text "..." Remove blocker
139
+ * state record-session Update session continuity
140
+ * --stopped-at "..."
141
+ * [--resume-file path]
142
+ *
143
+ * Compound Commands (workflow-specific initialization):
144
+ * init execute-phase <phase> All context for execute-phase workflow
145
+ * init plan-phase <phase> All context for plan-phase workflow
146
+ * init new-project All context for new-project workflow
147
+ * init new-milestone All context for new-milestone workflow
148
+ * init quick <description> All context for quick workflow
149
+ * init resume All context for resume-project workflow
150
+ * init verify-work <phase> All context for verify-work workflow
151
+ * init phase-op <phase> Generic phase operation context
152
+ * init todos [area] All context for todo workflows
153
+ * init milestone-op All context for milestone operations
154
+ * init map-codebase All context for map-codebase workflow
155
+ * init progress All context for progress workflow
156
+ *
157
+ * Documentation:
158
+ * docs-init Project context for docs-update workflow
159
+ *
160
+ * Learnings:
161
+ * learnings list List all global learnings (JSON)
162
+ * learnings query --tag <tag> Query learnings by tag
163
+ * learnings copy Copy from current project's LEARNINGS.md
164
+ * learnings prune --older-than <dur> Remove entries older than duration (e.g. 90d)
165
+ * learnings delete <id> Delete a learning by ID
166
+ *
167
+ * GSD-2 Migration:
168
+ * from-gsd2 [--path <dir>] [--force] [--dry-run]
169
+ * Import a GSD-2 (.gsd/) project back to GSD v1 (.planning/) format
170
+ */
171
+
172
+ const fs = require('fs');
173
+ const path = require('path');
174
+ const core = require('./lib/core.cjs');
175
+ const { error, findProjectRoot, ERROR_REASON } = core;
176
+ const { getActiveWorkstream } = require('./lib/planning-workspace.cjs');
177
+ const { resolveActiveWorkstream, applyResolvedWorkstreamEnv } = require('./lib/active-workstream-store.cjs');
178
+ const state = require('./lib/state.cjs');
179
+ const phase = require('./lib/phase.cjs');
180
+ const roadmap = require('./lib/roadmap.cjs');
181
+ const verify = require('./lib/verify.cjs');
182
+ const config = require('./lib/config.cjs');
183
+ const template = require('./lib/template.cjs');
184
+ const milestone = require('./lib/milestone.cjs');
185
+ const commands = require('./lib/commands.cjs');
186
+ const init = require('./lib/init.cjs');
187
+ const frontmatter = require('./lib/frontmatter.cjs');
188
+ const profilePipeline = require('./lib/profile-pipeline.cjs');
189
+ const profileOutput = require('./lib/profile-output.cjs');
190
+ const workstream = require('./lib/workstream.cjs');
191
+ const docs = require('./lib/docs.cjs');
192
+ const learnings = require('./lib/learnings.cjs');
193
+ const gapChecker = require('./lib/gap-checker.cjs');
194
+ const { routeStateCommand } = require('./lib/state-command-router.cjs');
195
+ const { routeVerifyCommand } = require('./lib/verify-command-router.cjs');
196
+ const { routeInitCommand } = require('./lib/init-command-router.cjs');
197
+ const { routePhaseCommand } = require('./lib/phase-command-router.cjs');
198
+ const { routePhasesCommand } = require('./lib/phases-command-router.cjs');
199
+ const { routeValidateCommand } = require('./lib/validate-command-router.cjs');
200
+ const { routeRoadmapCommand } = require('./lib/roadmap-command-router.cjs');
201
+
202
+ // ─── SDK bridge (Phase 6 inline family / non-family delegation) ───────────────
203
+ // For inline case blocks that have SDK counterparts (frontmatter, config, and
204
+ // non-family commands), we attempt to dispatch via executeForCjs (the sync
205
+ // bridge). CJS handlers are retained as fallback when SDK is unavailable.
206
+ //
207
+ // NOTE: migrate-config, detect-custom-files, config-path, and find-phase
208
+ // are CJS-native special cases; see comments inline.
209
+
210
+ // Shared loader for the synchronous SDK runtime bridge; see
211
+ // `bin/lib/cjs-sdk-bridge.cjs`. All canonical-command CJS dispatchers (the
212
+ // per-family routers and the non-family helper below) consume the same loader
213
+ // so a change to the SDK-load contract lands in one place.
214
+ const { tryLoadSdk: _tryLoadSdkBridge, getExecuteForCjs } = require('./lib/cjs-sdk-bridge.cjs');
215
+
216
+ /**
217
+ * Attempt SDK dispatch for a non-family command.
218
+ *
219
+ * Returns true when the SDK was available and handled the command (success or
220
+ * typed error). Returns false when the SDK is unavailable, signalling the
221
+ * caller to fall through to the CJS handler.
222
+ *
223
+ * @param {object} opts
224
+ * @param {string} opts.registryCommand - canonical command name in the SDK registry
225
+ * @param {string[]} opts.registryArgs - args to pass to the SDK handler
226
+ * @param {string} opts.legacyCommand - original gsd-tools command name (for error messages)
227
+ * @param {string[]} opts.legacyArgs - original args (for error messages)
228
+ * @param {string} opts.cwd - project dir
229
+ * @param {boolean} opts.raw - raw output mode
230
+ * @param {Function} opts.error - error reporter
231
+ * @param {Function} opts.output - output emitter (core.output)
232
+ */
233
+ function _dispatchNonFamily({ registryCommand, registryArgs, legacyCommand, legacyArgs, cwd, raw, error, output }) {
234
+ if (!_tryLoadSdkBridge()) return false;
235
+ const result = getExecuteForCjs()({
236
+ registryCommand,
237
+ registryArgs,
238
+ legacyCommand,
239
+ legacyArgs,
240
+ // Always request typed JSON from the bridge; CJS `output(data, raw)` handles
241
+ // user-facing rendering. Passing `mode: 'raw'` would make the bridge
242
+ // pre-render result.data to a JSON string that the CJS output path then
243
+ // double-stringifies (returning a JSON string of a JSON string).
244
+ mode: 'json',
245
+ projectDir: cwd,
246
+ workstream: process.env.GSD_WORKSTREAM || undefined,
247
+ });
248
+ if (!result.ok) {
249
+ const message = (result.errorDetails && result.errorDetails.message)
250
+ || `${legacyCommand} (${registryCommand}) failed (${result.errorKind})`;
251
+ // Propagate the structured reason code through to CJS `error()` so the
252
+ // `--json-errors` JSON-shaped stderr carries the typed reason (e.g.
253
+ // 'config_key_not_found') instead of the generic 'unknown'. Handlers
254
+ // tag the GSDError with `.reason` and the worker forwards it via
255
+ // errorDetails.reason. (Bugs #2943, #3086.)
256
+ const reason = result.errorDetails && result.errorDetails.reason;
257
+ if (reason) {
258
+ error(message, reason);
259
+ } else {
260
+ error(message);
261
+ }
262
+ return true; // handled (error reported)
263
+ }
264
+ // CJS parity for --raw output (config.cjs:525 `output(value, raw, String(value))`):
265
+ // when the caller asked for --raw and the SDK returned a scalar, pass that
266
+ // scalar through as `rawValue` so core.output() emits the bare string
267
+ // representation instead of JSON-stringifying it. Non-scalar shapes fall
268
+ // through to the structured JSON path, matching `output(obj, raw)`.
269
+ const data = result.data;
270
+ if (raw && (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean')) {
271
+ output(data, raw, String(data));
272
+ } else {
273
+ output(data, raw);
274
+ }
275
+ return true;
276
+ }
277
+
278
+ // ─── Arg parsing helpers ──────────────────────────────────────────────────────
279
+
280
+ /**
281
+ * Extract named --flag <value> pairs from an args array.
282
+ * Returns an object mapping flag names to their values (null if absent).
283
+ * Flags listed in `booleanFlags` are treated as boolean (no value consumed).
284
+ *
285
+ * parseNamedArgs(args, 'phase', 'plan') → { phase: '3', plan: '1' }
286
+ * parseNamedArgs(args, [], ['amend', 'force']) → { amend: true, force: false }
287
+ */
288
+ function parseNamedArgs(args, valueFlags = [], booleanFlags = []) {
289
+ const result = {};
290
+ for (const flag of valueFlags) {
291
+ const idx = args.indexOf(`--${flag}`);
292
+ result[flag] = idx !== -1 && args[idx + 1] !== undefined && !args[idx + 1].startsWith('--')
293
+ ? args[idx + 1]
294
+ : null;
295
+ }
296
+ for (const flag of booleanFlags) {
297
+ result[flag] = args.includes(`--${flag}`);
298
+ }
299
+ return result;
300
+ }
301
+
302
+ /**
303
+ * Collect all tokens after --flag until the next --flag or end of args.
304
+ * Handles multi-word values like --name Foo Bar Version 1.
305
+ * Returns null if the flag is absent.
306
+ */
307
+ function parseMultiwordArg(args, flag) {
308
+ const idx = args.indexOf(`--${flag}`);
309
+ if (idx === -1) return null;
310
+ const tokens = [];
311
+ for (let i = idx + 1; i < args.length; i++) {
312
+ if (args[i].startsWith('--')) break;
313
+ tokens.push(args[i]);
314
+ }
315
+ return tokens.length > 0 ? tokens.join(' ') : null;
316
+ }
317
+
318
+ // ─── CLI Router ───────────────────────────────────────────────────────────────
319
+
320
+ async function main() {
321
+ let args = process.argv.slice(2);
322
+
323
+ // --json-errors / GSD_JSON_ERRORS=1: when active, error() emits structured
324
+ // JSON ({ ok: false, reason: <ERROR_REASON code>, message }) to stderr
325
+ // instead of "Error: <text>". Lets test suites assert on typed reason codes
326
+ // per CONTRIBUTING.md "Prohibited: Raw Text Matching" (#2974).
327
+ //
328
+ // Detect early — before any flag parsing that can fire error() — so even
329
+ // --cwd and workstream-resolution failures emit structured stderr (#3310).
330
+ // The argv splice must happen here too, otherwise the dispatcher below sees
331
+ // "--json-errors" as an unknown command. Default off — human operators keep
332
+ // their plain-text diagnostic.
333
+ const jsonErrorsIdx = args.indexOf('--json-errors');
334
+ if (jsonErrorsIdx !== -1) {
335
+ core.setJsonErrorMode(true);
336
+ args.splice(jsonErrorsIdx, 1);
337
+ } else if (process.env.GSD_JSON_ERRORS === '1') {
338
+ core.setJsonErrorMode(true);
339
+ }
340
+
341
+ // Optional cwd override for sandboxed subagents running outside project root.
342
+ let cwd = process.cwd();
343
+ const cwdEqArg = args.find(arg => arg.startsWith('--cwd='));
344
+ const cwdIdx = args.indexOf('--cwd');
345
+ if (cwdEqArg) {
346
+ const value = cwdEqArg.slice('--cwd='.length).trim();
347
+ if (!value) error('Missing value for --cwd', ERROR_REASON.USAGE);
348
+ args.splice(args.indexOf(cwdEqArg), 1);
349
+ cwd = path.resolve(value);
350
+ } else if (cwdIdx !== -1) {
351
+ const value = args[cwdIdx + 1];
352
+ if (!value || value.startsWith('--')) error('Missing value for --cwd', ERROR_REASON.USAGE);
353
+ args.splice(cwdIdx, 2);
354
+ cwd = path.resolve(value);
355
+ }
356
+
357
+ if (!fs.existsSync(cwd) || !fs.statSync(cwd).isDirectory()) {
358
+ error(`Invalid --cwd: ${cwd}`, ERROR_REASON.USAGE);
359
+ }
360
+
361
+ // Resolve worktree root: in a linked worktree, .planning/ lives in the main worktree.
362
+ // However, in monorepo worktrees where the subdirectory itself owns .planning/,
363
+ // skip worktree resolution — the CWD is already the correct project root.
364
+ const { resolveWorktreeRoot } = require('./lib/core.cjs');
365
+ if (!fs.existsSync(path.join(cwd, '.planning'))) {
366
+ const worktreeRoot = resolveWorktreeRoot(cwd);
367
+ if (worktreeRoot !== cwd) {
368
+ cwd = worktreeRoot;
369
+ }
370
+ }
371
+
372
+ // Optional workstream override for parallel milestone work.
373
+ // Priority: --ws flag > GSD_WORKSTREAM env var > session/shared pointer > null.
374
+ let ws = null;
375
+ try {
376
+ const wsResolution = resolveActiveWorkstream(cwd, args, process.env, {
377
+ getStored: getActiveWorkstream,
378
+ });
379
+ ws = wsResolution.ws;
380
+ args = wsResolution.args;
381
+ // Set env var so all modules (planningDir, planningPaths) auto-resolve workstream paths.
382
+ applyResolvedWorkstreamEnv(wsResolution, process.env);
383
+ } catch (err) {
384
+ error(err.message || String(err));
385
+ }
386
+
387
+ const rawIndex = args.indexOf('--raw');
388
+ const raw = rawIndex !== -1;
389
+ if (rawIndex !== -1) args.splice(rawIndex, 1);
390
+
391
+ // --pick <name>: extract a single field from JSON output (replaces jq dependency).
392
+ // Supports dot-notation (e.g., --pick workflow.research) and bracket notation
393
+ // for arrays (e.g., --pick directories[-1]).
394
+ const pickIdx = args.indexOf('--pick');
395
+ let pickField = null;
396
+ if (pickIdx !== -1) {
397
+ pickField = args[pickIdx + 1];
398
+ if (!pickField || pickField.startsWith('--')) error('Missing value for --pick', ERROR_REASON.USAGE);
399
+ args.splice(pickIdx, 2);
400
+ }
401
+
402
+ // --default <value>: for config-get, return this value instead of erroring
403
+ // when the key is absent. Allows workflows to express optional config reads
404
+ // without defensive `2>/dev/null || true` boilerplate (#1893).
405
+ const defaultIdx = args.indexOf('--default');
406
+ let defaultValue = undefined;
407
+ if (defaultIdx !== -1) {
408
+ defaultValue = args[defaultIdx + 1];
409
+ if (defaultValue === undefined) defaultValue = '';
410
+ args.splice(defaultIdx, 2);
411
+ }
412
+
413
+ let command = args[0];
414
+
415
+ // #3243: accept dotted canonical form (e.g. `state.update`) as well as the
416
+ // spaced form (`state update`). Workflow files and stale SDK binaries pass
417
+ // the dotted canonical form directly; any caller that bypasses the SDK
418
+ // client-side split hit "Unknown command" before this shim.
419
+ //
420
+ // Split on the FIRST dot only — `check.decision-coverage-plan` becomes
421
+ // command='check', args=['check','decision-coverage-plan',...rest].
422
+ // Parallel to dottedCommandToCjsArgv in sdk/src/query/query-fallback-bridge-adapter.ts;
423
+ // kept separate here to avoid SDK coupling (see TODO: extract to shared helper).
424
+ //
425
+ // Guard: head and rest must both be non-empty (rejects leading-dot args like
426
+ // ".hidden" and bare-dot ".").
427
+ const originalCommand = command; // preserved for "Unknown command" suggestion
428
+ if (typeof command === 'string' && command.includes('.')) {
429
+ const dotIdx = command.indexOf('.');
430
+ const head = command.slice(0, dotIdx);
431
+ const rest = command.slice(dotIdx + 1);
432
+ if (head && rest) {
433
+ command = head;
434
+ args = [head, rest, ...args.slice(1)];
435
+ }
436
+ }
437
+
438
+ // Top-level usage string — emitted by `gsd-tools` (no args) and by
439
+ // `gsd-tools --help` / any `--help` request below.
440
+ // CR feedback: the command list must enumerate every top-level command
441
+ // supported by the dispatcher so `--help` is actually useful for
442
+ // discovery; previously it was a partial subset that didn't include
443
+ // phase / roadmap / milestone / progress / etc.
444
+ const TOP_LEVEL_USAGE = 'Usage: gsd-tools <command> [args] [--raw] [--pick <field>] [--cwd <path>] [--ws <name>] [--json-errors]\n' +
445
+ 'Commands: agent-skills, audit-open, audit-uat, check-commit, commit, commit-to-subrepo, ' +
446
+ 'config-ensure-section, config-get, config-new-project, config-path, config-set, migrate-config, ' +
447
+ 'current-timestamp, detect-custom-files, docs-init, extract-messages, find-phase, ' +
448
+ 'from-gsd2, frontmatter, gap-analysis, generate-claude-md, generate-claude-profile, ' +
449
+ 'generate-dev-preferences, generate-slug, graphify, history-digest, init, intel, ' +
450
+ 'learnings, list-todos, milestone, phase, phase-plan-index, phases, profile-questionnaire, ' +
451
+ 'profile-sample, progress, prompt-budget, requirements, resolve-model, roadmap, scaffold, state, ' +
452
+ 'template, validate, verify, verify-path-exists, verify-summary, workstream, worktree\n\n' +
453
+ 'Global flags:\n' +
454
+ ' --raw Emit raw output without post-processing\n' +
455
+ ' --pick <field> Extract a single field from JSON output (dot/bracket notation)\n' +
456
+ ' --cwd <path> Override working directory for project-root resolution\n' +
457
+ ' --ws <name> Override active workstream (or set GSD_WORKSTREAM)\n' +
458
+ ' --json-errors Emit structured JSON error objects on stderr (or set GSD_JSON_ERRORS=1)\n\n' +
459
+ 'For command-specific argument requirements, invoke the command without args ' +
460
+ '(e.g. `gsd-tools phase add`) — the resulting error lists what is required.';
461
+
462
+ if (!command) {
463
+ error(TOP_LEVEL_USAGE);
464
+ }
465
+
466
+ // #3019: a `--help` / `-h` flag in argv must render the top-level usage
467
+ // and exit 0 — not error out with "Unknown flag". The previous shape
468
+ // erred on agent-hallucinated flags, but it also blocked humans from
469
+ // discovering the command surface via subcommand help requests routed
470
+ // here from the SDK CLI's query dispatcher (after the cli.ts fix that
471
+ // stops harvesting --help as a global flag). Rendering top-level usage
472
+ // on --help is strictly better UX than the old short-circuit, which
473
+ // printed the SDK-level usage that doesn't mention any of these
474
+ // subcommands.
475
+ const HELP_FLAGS = new Set(['-h', '--help', '-?', '--h', '--usage']);
476
+ if (args.some((a) => HELP_FLAGS.has(a))) {
477
+ process.stdout.write(TOP_LEVEL_USAGE + '\n');
478
+ return;
479
+ }
480
+
481
+ // Reject version flags. AI agents sometimes hallucinate --version on tool
482
+ // invocations; silently ignoring it can cause destructive operations to
483
+ // proceed unchecked. (Help flags are handled above.)
484
+ const NEVER_VALID_FLAGS = new Set(['--version', '-v']);
485
+ for (const arg of args) {
486
+ if (NEVER_VALID_FLAGS.has(arg)) {
487
+ error(`Unknown flag: ${arg}\ngsd-tools does not accept version flags. Run "gsd-tools" with no arguments for usage.`, ERROR_REASON.USAGE);
488
+ }
489
+ }
490
+
491
+ // Multi-repo guard: resolve project root for commands that read/write .planning/.
492
+ // Skip for pure-utility commands that don't touch .planning/ to avoid unnecessary
493
+ // filesystem traversal on every invocation.
494
+ const SKIP_ROOT_RESOLUTION = new Set([
495
+ 'generate-slug', 'current-timestamp', 'verify-path-exists',
496
+ 'verify-summary', 'template', 'frontmatter', 'detect-custom-files',
497
+ 'worktree', 'prompt-budget',
498
+ ]);
499
+ if (!SKIP_ROOT_RESOLUTION.has(command)) {
500
+ cwd = findProjectRoot(cwd);
501
+ }
502
+
503
+ // When --pick is active, intercept stdout to extract the requested field.
504
+ if (pickField) {
505
+ const origWriteSync = fs.writeSync;
506
+ let captured = '';
507
+ fs.writeSync = function (fd, data, ...rest) {
508
+ if (fd === 1) {
509
+ captured += String(data);
510
+ return;
511
+ }
512
+ return origWriteSync.call(fs, fd, data, ...rest);
513
+ };
514
+ const cleanup = () => {
515
+ fs.writeSync = origWriteSync;
516
+ let jsonStr = captured;
517
+ if (jsonStr.startsWith('@file:')) {
518
+ jsonStr = fs.readFileSync(jsonStr.slice(6), 'utf-8');
519
+ }
520
+ try {
521
+ const obj = JSON.parse(jsonStr);
522
+ const value = extractField(obj, pickField);
523
+ const result = value === null || value === undefined ? '' : String(value);
524
+ origWriteSync.call(fs, 1, result);
525
+ } catch {
526
+ origWriteSync.call(fs, 1, captured);
527
+ }
528
+ };
529
+ try {
530
+ await runCommand(command, args, cwd, raw, defaultValue, originalCommand);
531
+ cleanup();
532
+ } catch (e) {
533
+ fs.writeSync = origWriteSync;
534
+ throw e;
535
+ }
536
+ return;
537
+ }
538
+
539
+ // Intercept stdout to transparently resolve @file: references (#1891).
540
+ // core.cjs output() writes @file:<path> when JSON > 50KB. The --pick path
541
+ // already resolves this, but the normal path wrote @file: to stdout, forcing
542
+ // every workflow to have a bash-specific `if [[ "$INIT" == @file:* ]]` check
543
+ // that breaks on PowerShell and other non-bash shells.
544
+ const origWriteSync2 = fs.writeSync;
545
+ let captured = '';
546
+ fs.writeSync = function (fd, data, ...rest) {
547
+ if (fd === 1) {
548
+ captured += String(data);
549
+ return;
550
+ }
551
+ return origWriteSync2.call(fs, fd, data, ...rest);
552
+ };
553
+ try {
554
+ await runCommand(command, args, cwd, raw, defaultValue, originalCommand);
555
+ } finally {
556
+ fs.writeSync = origWriteSync2;
557
+ }
558
+ if (captured.startsWith('@file:')) {
559
+ captured = fs.readFileSync(captured.slice(6), 'utf-8');
560
+ }
561
+ origWriteSync2.call(fs, 1, captured);
562
+ }
563
+
564
+ /**
565
+ * Extract a field from an object using dot-notation and bracket syntax.
566
+ * Supports: 'field', 'parent.child', 'arr[-1]', 'arr[0]'
567
+ */
568
+ function extractField(obj, fieldPath) {
569
+ const parts = fieldPath.split('.');
570
+ let current = obj;
571
+ for (const part of parts) {
572
+ if (current === null || current === undefined) return undefined;
573
+ const bracketMatch = part.match(/^(.+?)\[(-?\d+)]$/);
574
+ if (bracketMatch) {
575
+ const key = bracketMatch[1];
576
+ const index = parseInt(bracketMatch[2], 10);
577
+ current = current[key];
578
+ if (!Array.isArray(current)) return undefined;
579
+ current = index < 0 ? current[current.length + index] : current[index];
580
+ } else {
581
+ current = current[part];
582
+ }
583
+ }
584
+ return current;
585
+ }
586
+
587
+ async function runCommand(command, args, cwd, raw, defaultValue, originalCommand) {
588
+ switch (command) {
589
+ case 'state': {
590
+ routeStateCommand({
591
+ state,
592
+ args,
593
+ cwd,
594
+ raw,
595
+ parseNamedArgs,
596
+ error,
597
+ });
598
+ break;
599
+ }
600
+
601
+ case 'resolve-model': {
602
+ commands.cmdResolveModel(cwd, args[1], raw);
603
+ break;
604
+ }
605
+
606
+ case 'find-phase': {
607
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
608
+ // SDK handler: findPhase in sdk/src/query/phase.ts.
609
+ const handled = _dispatchNonFamily({
610
+ registryCommand: 'find-phase',
611
+ registryArgs: args.slice(1),
612
+ legacyCommand: 'find-phase',
613
+ legacyArgs: args.slice(1),
614
+ cwd,
615
+ raw,
616
+ error,
617
+ output: core.output,
618
+ });
619
+ if (!handled) phase.cmdFindPhase(cwd, args[1], raw);
620
+ break;
621
+ }
622
+
623
+ case 'commit': {
624
+ const amend = args.includes('--amend');
625
+ const noVerify = args.includes('--no-verify');
626
+ const filesIndex = args.indexOf('--files');
627
+ // Collect all positional args between command name and first flag,
628
+ // then join them — handles both quoted ("multi word msg") and
629
+ // unquoted (multi word msg) invocations from different shells
630
+ const endIndex = filesIndex !== -1 ? filesIndex : args.length;
631
+ const messageArgs = args.slice(1, endIndex).filter(a => !a.startsWith('--'));
632
+ const message = messageArgs.join(' ') || undefined;
633
+ const files = filesIndex !== -1 ? args.slice(filesIndex + 1).filter(a => !a.startsWith('--')) : [];
634
+ commands.cmdCommit(cwd, message, files, raw, amend, noVerify);
635
+ break;
636
+ }
637
+
638
+ case 'check-commit': {
639
+ commands.cmdCheckCommit(cwd, raw);
640
+ break;
641
+ }
642
+
643
+ case 'commit-to-subrepo': {
644
+ const message = args[1];
645
+ const filesIndex = args.indexOf('--files');
646
+ const files = filesIndex !== -1 ? args.slice(filesIndex + 1).filter(a => !a.startsWith('--')) : [];
647
+ commands.cmdCommitToSubrepo(cwd, message, files, raw);
648
+ break;
649
+ }
650
+
651
+ case 'verify-summary': {
652
+ const summaryPath = args[1];
653
+ const countIndex = args.indexOf('--check-count');
654
+ const checkCount = countIndex !== -1 ? parseInt(args[countIndex + 1], 10) : 2;
655
+ verify.cmdVerifySummary(cwd, summaryPath, checkCount, raw);
656
+ break;
657
+ }
658
+
659
+ case 'template': {
660
+ const subcommand = args[1];
661
+ if (subcommand === 'select') {
662
+ template.cmdTemplateSelect(cwd, args[2], raw);
663
+ } else if (subcommand === 'fill') {
664
+ const templateType = args[2];
665
+ const { phase, plan, name, type, wave, fields: fieldsRaw } = parseNamedArgs(args, ['phase', 'plan', 'name', 'type', 'wave', 'fields']);
666
+ let fields = {};
667
+ if (fieldsRaw) {
668
+ const { safeJsonParse } = require('./lib/security.cjs');
669
+ const result = safeJsonParse(fieldsRaw, { label: '--fields' });
670
+ if (!result.ok) error(result.error);
671
+ fields = result.value;
672
+ }
673
+ template.cmdTemplateFill(cwd, templateType, {
674
+ phase, plan, name, fields,
675
+ type: type || 'execute',
676
+ wave: wave || '1',
677
+ }, raw);
678
+ } else {
679
+ error('Unknown template subcommand. Available: select, fill', ERROR_REASON.SDK_UNKNOWN_COMMAND);
680
+ }
681
+ break;
682
+ }
683
+
684
+ case 'frontmatter': {
685
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
686
+ // SDK handler: sdk/src/query/frontmatter.ts + frontmatter-mutation.ts.
687
+ // CJS fallback: frontmatter.cjs (cooperating sibling).
688
+ const subcommand = args[1];
689
+ const file = args[2];
690
+ const FRONTMATTER_SDK_MAP = {
691
+ get: 'frontmatter.get',
692
+ set: 'frontmatter.set',
693
+ merge: 'frontmatter.merge',
694
+ validate: 'frontmatter.validate',
695
+ };
696
+ if (subcommand in FRONTMATTER_SDK_MAP) {
697
+ const handled = _dispatchNonFamily({
698
+ registryCommand: FRONTMATTER_SDK_MAP[subcommand],
699
+ registryArgs: args.slice(2),
700
+ legacyCommand: 'frontmatter',
701
+ legacyArgs: args.slice(1),
702
+ cwd,
703
+ raw,
704
+ error,
705
+ output: core.output,
706
+ });
707
+ if (handled) break;
708
+ }
709
+ // CJS fallback (SDK unavailable or unknown subcommand)
710
+ if (subcommand === 'get') {
711
+ frontmatter.cmdFrontmatterGet(cwd, file, parseNamedArgs(args, ['field']).field, raw);
712
+ } else if (subcommand === 'set') {
713
+ const { field, value } = parseNamedArgs(args, ['field', 'value']);
714
+ frontmatter.cmdFrontmatterSet(cwd, file, field, value !== null ? value : undefined, raw);
715
+ } else if (subcommand === 'merge') {
716
+ frontmatter.cmdFrontmatterMerge(cwd, file, parseNamedArgs(args, ['data']).data, raw);
717
+ } else if (subcommand === 'validate') {
718
+ frontmatter.cmdFrontmatterValidate(cwd, file, parseNamedArgs(args, ['schema']).schema, raw);
719
+ } else {
720
+ error('Unknown frontmatter subcommand. Available: get, set, merge, validate', ERROR_REASON.SDK_UNKNOWN_COMMAND);
721
+ }
722
+ break;
723
+ }
724
+
725
+ case 'verify': {
726
+ routeVerifyCommand({
727
+ verify,
728
+ args,
729
+ cwd,
730
+ raw,
731
+ error,
732
+ });
733
+ break;
734
+ }
735
+
736
+ case 'generate-slug': {
737
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
738
+ // SDK handler: generateSlug in sdk/src/query/utils.ts.
739
+ const handled = _dispatchNonFamily({
740
+ registryCommand: 'generate-slug',
741
+ registryArgs: args.slice(1),
742
+ legacyCommand: 'generate-slug',
743
+ legacyArgs: args.slice(1),
744
+ cwd,
745
+ raw,
746
+ error,
747
+ output: core.output,
748
+ });
749
+ if (!handled) commands.cmdGenerateSlug(args[1], raw);
750
+ break;
751
+ }
752
+
753
+ case 'current-timestamp': {
754
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
755
+ // SDK handler: currentTimestamp in sdk/src/query/utils.ts.
756
+ const handled = _dispatchNonFamily({
757
+ registryCommand: 'current-timestamp',
758
+ registryArgs: args.slice(1),
759
+ legacyCommand: 'current-timestamp',
760
+ legacyArgs: args.slice(1),
761
+ cwd,
762
+ raw,
763
+ error,
764
+ output: core.output,
765
+ });
766
+ if (!handled) commands.cmdCurrentTimestamp(args[1] || 'full', raw);
767
+ break;
768
+ }
769
+
770
+ case 'list-todos': {
771
+ commands.cmdListTodos(cwd, args[1], raw);
772
+ break;
773
+ }
774
+
775
+ case 'verify-path-exists': {
776
+ commands.cmdVerifyPathExists(cwd, args[1], raw);
777
+ break;
778
+ }
779
+
780
+ case 'config-ensure-section': {
781
+ // Phase 6 (#3575): dispatch via SDK executeForCjs. The catalog rebinds
782
+ // 'config-ensure-section' to configNewProject in
783
+ // sdk/src/query/command-static-catalog-foundation.ts, restoring the
784
+ // legacy "no-arg full default init" contract on the SDK path
785
+ // (configEnsureSection itself stays available as an unbound single-
786
+ // section helper for future SDK callers).
787
+ const handled = _dispatchNonFamily({
788
+ registryCommand: 'config-ensure-section',
789
+ registryArgs: args.slice(1),
790
+ legacyCommand: 'config-ensure-section',
791
+ legacyArgs: args.slice(1),
792
+ cwd,
793
+ raw,
794
+ error,
795
+ output: core.output,
796
+ });
797
+ if (!handled) config.cmdConfigEnsureSection(cwd, raw);
798
+ break;
799
+ }
800
+
801
+ case 'config-set': {
802
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
803
+ const handled = _dispatchNonFamily({
804
+ registryCommand: 'config-set',
805
+ registryArgs: args.slice(1),
806
+ legacyCommand: 'config-set',
807
+ legacyArgs: args.slice(1),
808
+ cwd,
809
+ raw,
810
+ error,
811
+ output: core.output,
812
+ });
813
+ if (!handled) config.cmdConfigSet(cwd, args[1], args[2], raw);
814
+ break;
815
+ }
816
+
817
+ case "config-set-model-profile": {
818
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
819
+ const handled = _dispatchNonFamily({
820
+ registryCommand: 'config-set-model-profile',
821
+ registryArgs: args.slice(1),
822
+ legacyCommand: 'config-set-model-profile',
823
+ legacyArgs: args.slice(1),
824
+ cwd,
825
+ raw,
826
+ error,
827
+ output: core.output,
828
+ });
829
+ if (!handled) config.cmdConfigSetModelProfile(cwd, args[1], raw);
830
+ break;
831
+ }
832
+
833
+ case 'config-get': {
834
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
835
+ // The SDK handler supports --default via the registry args (args.slice(1)
836
+ // contains the key; defaultValue is handled by the SDK via the --default
837
+ // flag which was already stripped from args and held in defaultValue).
838
+ // Pass the full original args.slice(1) so the SDK sees the key; the
839
+ // defaultValue from the flag is in the global defaultValue variable above.
840
+ // Since the SDK handler reads --default from registryArgs, re-inject it.
841
+ const configGetSdkArgs = defaultValue !== undefined
842
+ ? [args[1], '--default', defaultValue]
843
+ : args.slice(1);
844
+ const handled = _dispatchNonFamily({
845
+ registryCommand: 'config-get',
846
+ registryArgs: configGetSdkArgs,
847
+ legacyCommand: 'config-get',
848
+ legacyArgs: args.slice(1),
849
+ cwd,
850
+ raw,
851
+ error,
852
+ output: core.output,
853
+ });
854
+ if (!handled) config.cmdConfigGet(cwd, args[1], raw, defaultValue);
855
+ break;
856
+ }
857
+
858
+ case 'config-new-project': {
859
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
860
+ const handled = _dispatchNonFamily({
861
+ registryCommand: 'config-new-project',
862
+ registryArgs: args.slice(1),
863
+ legacyCommand: 'config-new-project',
864
+ legacyArgs: args.slice(1),
865
+ cwd,
866
+ raw,
867
+ error,
868
+ output: core.output,
869
+ });
870
+ if (!handled) config.cmdConfigNewProject(cwd, args[1], raw);
871
+ break;
872
+ }
873
+
874
+ case 'config-path': {
875
+ // CJS-native: config-path returns the filesystem path to config.json.
876
+ // The SDK handler (configPath) also exists but requires a projectDir that
877
+ // is already resolved. Both produce identical output; keeping CJS here is
878
+ // simpler and avoids sync-bridge overhead for a trivial path lookup.
879
+ config.cmdConfigPath(cwd, raw);
880
+ break;
881
+ }
882
+
883
+ case 'migrate-config': {
884
+ // CJS-native: migrate-config wraps the Configuration Module migrateOnDisk()
885
+ // which is async and mutates the filesystem. No SDK counterpart exists in
886
+ // the command registry (it's a one-shot migration utility). Must await.
887
+ await config.cmdMigrateConfig(cwd, raw);
888
+ break;
889
+ }
890
+
891
+ case 'agent-skills': {
892
+ init.cmdAgentSkills(cwd, args[1], raw);
893
+ break;
894
+ }
895
+
896
+ case 'skill-manifest': {
897
+ init.cmdSkillManifest(cwd, args, raw);
898
+ break;
899
+ }
900
+
901
+ case 'history-digest': {
902
+ commands.cmdHistoryDigest(cwd, raw);
903
+ break;
904
+ }
905
+
906
+ case 'phases': {
907
+ routePhasesCommand({
908
+ phase,
909
+ milestone,
910
+ args,
911
+ cwd,
912
+ raw,
913
+ error,
914
+ });
915
+ break;
916
+ }
917
+
918
+ case 'roadmap': {
919
+ routeRoadmapCommand({
920
+ roadmap,
921
+ args,
922
+ cwd,
923
+ raw,
924
+ error,
925
+ });
926
+ break;
927
+ }
928
+
929
+ case 'requirements': {
930
+ const subcommand = args[1];
931
+ if (subcommand === 'mark-complete') {
932
+ milestone.cmdRequirementsMarkComplete(cwd, args.slice(2), raw);
933
+ } else {
934
+ error('Unknown requirements subcommand. Available: mark-complete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
935
+ }
936
+ break;
937
+ }
938
+
939
+ case 'gap-analysis': {
940
+ // Post-planning gap checker (#2493) — unified REQUIREMENTS.md +
941
+ // CONTEXT.md <decisions> coverage report against PLAN.md files.
942
+ gapChecker.cmdGapAnalysis(cwd, args.slice(1), raw);
943
+ break;
944
+ }
945
+
946
+ case 'phase': {
947
+ routePhaseCommand({
948
+ phase,
949
+ args,
950
+ cwd,
951
+ raw,
952
+ error,
953
+ });
954
+ break;
955
+ }
956
+
957
+ case 'milestone': {
958
+ const subcommand = args[1];
959
+ if (subcommand === 'complete') {
960
+ const milestoneName = parseMultiwordArg(args, 'name');
961
+ const archivePhases = args.includes('--archive-phases');
962
+ milestone.cmdMilestoneComplete(cwd, args[2], { name: milestoneName, archivePhases }, raw);
963
+ } else {
964
+ error('Unknown milestone subcommand. Available: complete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
965
+ }
966
+ break;
967
+ }
968
+
969
+ case 'validate': {
970
+ routeValidateCommand({
971
+ verify,
972
+ args,
973
+ cwd,
974
+ raw,
975
+ parseNamedArgs,
976
+ output: core.output,
977
+ error,
978
+ });
979
+ break;
980
+ }
981
+
982
+ case 'progress': {
983
+ const subcommand = args[1] || 'json';
984
+ commands.cmdProgressRender(cwd, subcommand, raw);
985
+ break;
986
+ }
987
+
988
+ case 'audit-uat': {
989
+ const uat = require('./lib/uat.cjs');
990
+ uat.cmdAuditUat(cwd, raw);
991
+ break;
992
+ }
993
+
994
+ case 'audit-open': {
995
+ const { auditOpenArtifacts, formatAuditReport } = require('./lib/audit.cjs');
996
+ const wantJson = args.includes('--json');
997
+ const result = auditOpenArtifacts(cwd);
998
+ if (wantJson) {
999
+ // core.output JSON-stringifies its first arg; pass the object directly.
1000
+ core.output(result, raw);
1001
+ } else {
1002
+ // Human-readable report must bypass JSON encoding — use the rawValue
1003
+ // form (third arg) which core.output emits verbatim.
1004
+ core.output(null, true, formatAuditReport(result));
1005
+ }
1006
+ break;
1007
+ }
1008
+
1009
+ case 'uat': {
1010
+ const subcommand = args[1];
1011
+ const uat = require('./lib/uat.cjs');
1012
+ if (subcommand === 'render-checkpoint') {
1013
+ const options = parseNamedArgs(args, ['file']);
1014
+ uat.cmdRenderCheckpoint(cwd, options, raw);
1015
+ } else {
1016
+ error('Unknown uat subcommand. Available: render-checkpoint', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1017
+ }
1018
+ break;
1019
+ }
1020
+
1021
+ case 'stats': {
1022
+ const subcommand = args[1] || 'json';
1023
+ commands.cmdStats(cwd, subcommand, raw);
1024
+ break;
1025
+ }
1026
+
1027
+ case 'todo': {
1028
+ const subcommand = args[1];
1029
+ if (subcommand === 'complete') {
1030
+ commands.cmdTodoComplete(cwd, args[2], raw);
1031
+ } else if (subcommand === 'match-phase') {
1032
+ commands.cmdTodoMatchPhase(cwd, args[2], raw);
1033
+ } else {
1034
+ error('Unknown todo subcommand. Available: complete, match-phase', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1035
+ }
1036
+ break;
1037
+ }
1038
+
1039
+ case 'scaffold': {
1040
+ const scaffoldType = args[1];
1041
+ const scaffoldOptions = {
1042
+ phase: parseNamedArgs(args, ['phase']).phase,
1043
+ name: parseMultiwordArg(args, 'name'),
1044
+ };
1045
+ commands.cmdScaffold(cwd, scaffoldType, scaffoldOptions, raw);
1046
+ break;
1047
+ }
1048
+
1049
+ case 'init': {
1050
+ routeInitCommand({
1051
+ init,
1052
+ args,
1053
+ cwd,
1054
+ raw,
1055
+ parseNamedArgs,
1056
+ error,
1057
+ });
1058
+ break;
1059
+ }
1060
+
1061
+ case 'phase-plan-index': {
1062
+ phase.cmdPhasePlanIndex(cwd, args[1], raw);
1063
+ break;
1064
+ }
1065
+
1066
+ case 'state-snapshot': {
1067
+ state.cmdStateSnapshot(cwd, raw);
1068
+ break;
1069
+ }
1070
+
1071
+ case 'summary-extract': {
1072
+ const summaryPath = args[1];
1073
+ const fieldsIndex = args.indexOf('--fields');
1074
+ const fields = fieldsIndex !== -1 ? args[fieldsIndex + 1].split(',') : null;
1075
+ commands.cmdSummaryExtract(cwd, summaryPath, fields, raw);
1076
+ break;
1077
+ }
1078
+
1079
+ case 'websearch': {
1080
+ const query = args[1];
1081
+ const limitIdx = args.indexOf('--limit');
1082
+ const freshnessIdx = args.indexOf('--freshness');
1083
+ await commands.cmdWebsearch(query, {
1084
+ limit: limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : 10,
1085
+ freshness: freshnessIdx !== -1 ? args[freshnessIdx + 1] : null,
1086
+ }, raw);
1087
+ break;
1088
+ }
1089
+
1090
+ // ─── Profiling Pipeline ────────────────────────────────────────────────
1091
+
1092
+ case 'scan-sessions': {
1093
+ const pathIdx = args.indexOf('--path');
1094
+ const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
1095
+ const verboseFlag = args.includes('--verbose');
1096
+ const jsonFlag = args.includes('--json');
1097
+ await profilePipeline.cmdScanSessions(sessionsPath, { verbose: verboseFlag, json: jsonFlag }, raw);
1098
+ break;
1099
+ }
1100
+
1101
+ case 'extract-messages': {
1102
+ const sessionIdx = args.indexOf('--session');
1103
+ const sessionId = sessionIdx !== -1 ? args[sessionIdx + 1] : null;
1104
+ const limitIdx = args.indexOf('--limit');
1105
+ const limit = limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : null;
1106
+ const pathIdx = args.indexOf('--path');
1107
+ const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
1108
+ const projectArg = args[1];
1109
+ if (!projectArg || projectArg.startsWith('--')) {
1110
+ error('Usage: gsd-tools extract-messages <project> [--session <id>] [--limit N] [--path <dir>]\nRun scan-sessions first to see available projects.', ERROR_REASON.USAGE);
1111
+ }
1112
+ await profilePipeline.cmdExtractMessages(projectArg, { sessionId, limit }, raw, sessionsPath);
1113
+ break;
1114
+ }
1115
+
1116
+ case 'profile-sample': {
1117
+ const pathIdx = args.indexOf('--path');
1118
+ const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
1119
+ const limitIdx = args.indexOf('--limit');
1120
+ const limit = limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : 150;
1121
+ const maxPerIdx = args.indexOf('--max-per-project');
1122
+ const maxPerProject = maxPerIdx !== -1 ? parseInt(args[maxPerIdx + 1], 10) : null;
1123
+ const maxCharsIdx = args.indexOf('--max-chars');
1124
+ const maxChars = maxCharsIdx !== -1 ? parseInt(args[maxCharsIdx + 1], 10) : 500;
1125
+ await profilePipeline.cmdProfileSample(sessionsPath, { limit, maxPerProject, maxChars }, raw);
1126
+ break;
1127
+ }
1128
+
1129
+ // ─── Profile Output ──────────────────────────────────────────────────
1130
+
1131
+ case 'write-profile': {
1132
+ const inputIdx = args.indexOf('--input');
1133
+ const inputPath = inputIdx !== -1 ? args[inputIdx + 1] : null;
1134
+ if (!inputPath) error('--input <analysis-json-path> is required', ERROR_REASON.USAGE);
1135
+ const outputIdx = args.indexOf('--output');
1136
+ const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
1137
+ profileOutput.cmdWriteProfile(cwd, { input: inputPath, output: outputPath }, raw);
1138
+ break;
1139
+ }
1140
+
1141
+ case 'profile-questionnaire': {
1142
+ const answersIdx = args.indexOf('--answers');
1143
+ const answers = answersIdx !== -1 ? args[answersIdx + 1] : null;
1144
+ profileOutput.cmdProfileQuestionnaire({ answers }, raw);
1145
+ break;
1146
+ }
1147
+
1148
+ case 'generate-dev-preferences': {
1149
+ const analysisIdx = args.indexOf('--analysis');
1150
+ const analysisPath = analysisIdx !== -1 ? args[analysisIdx + 1] : null;
1151
+ const outputIdx = args.indexOf('--output');
1152
+ const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
1153
+ const stackIdx = args.indexOf('--stack');
1154
+ const stack = stackIdx !== -1 ? args[stackIdx + 1] : null;
1155
+ profileOutput.cmdGenerateDevPreferences(cwd, { analysis: analysisPath, output: outputPath, stack }, raw);
1156
+ break;
1157
+ }
1158
+
1159
+ case 'generate-claude-profile': {
1160
+ const analysisIdx = args.indexOf('--analysis');
1161
+ const analysisPath = analysisIdx !== -1 ? args[analysisIdx + 1] : null;
1162
+ const outputIdx = args.indexOf('--output');
1163
+ const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
1164
+ const globalFlag = args.includes('--global');
1165
+ profileOutput.cmdGenerateClaudeProfile(cwd, { analysis: analysisPath, output: outputPath, global: globalFlag }, raw);
1166
+ break;
1167
+ }
1168
+
1169
+ case 'generate-claude-md': {
1170
+ const outputIdx = args.indexOf('--output');
1171
+ const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
1172
+ const autoFlag = args.includes('--auto');
1173
+ const forceFlag = args.includes('--force');
1174
+ profileOutput.cmdGenerateClaudeMd(cwd, { output: outputPath, auto: autoFlag, force: forceFlag }, raw);
1175
+ break;
1176
+ }
1177
+
1178
+ case 'workstream': {
1179
+ const subcommand = args[1];
1180
+ if (subcommand === 'create') {
1181
+ const migrateNameIdx = args.indexOf('--migrate-name');
1182
+ const noMigrate = args.includes('--no-migrate');
1183
+ workstream.cmdWorkstreamCreate(cwd, args[2], {
1184
+ migrate: !noMigrate,
1185
+ migrateName: migrateNameIdx !== -1 ? args[migrateNameIdx + 1] : null,
1186
+ }, raw);
1187
+ } else if (subcommand === 'list') {
1188
+ workstream.cmdWorkstreamList(cwd, raw);
1189
+ } else if (subcommand === 'status') {
1190
+ workstream.cmdWorkstreamStatus(cwd, args[2], raw);
1191
+ } else if (subcommand === 'complete') {
1192
+ workstream.cmdWorkstreamComplete(cwd, args[2], {}, raw);
1193
+ } else if (subcommand === 'set') {
1194
+ workstream.cmdWorkstreamSet(cwd, args[2], raw);
1195
+ } else if (subcommand === 'get') {
1196
+ workstream.cmdWorkstreamGet(cwd, raw);
1197
+ } else if (subcommand === 'progress') {
1198
+ workstream.cmdWorkstreamProgress(cwd, raw);
1199
+ } else {
1200
+ error('Unknown workstream subcommand. Available: create, list, status, complete, set, get, progress', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1201
+ }
1202
+ break;
1203
+ }
1204
+
1205
+ case 'worktree': {
1206
+ const subcommand = args[1];
1207
+ const worktreeSafety = require('./lib/worktree-safety.cjs');
1208
+ if (subcommand === 'cleanup-wave') {
1209
+ worktreeSafety.cmdWorktreeCleanupWave(cwd, args.slice(2));
1210
+ } else if (subcommand === 'reap-orphans') {
1211
+ worktreeSafety.cmdWorktreeReapOrphans(cwd);
1212
+ } else {
1213
+ error('Unknown worktree subcommand. Available: cleanup-wave, reap-orphans', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1214
+ }
1215
+ break;
1216
+ }
1217
+
1218
+ // ─── Intel ────────────────────────────────────────────────────────────
1219
+
1220
+ case 'intel': {
1221
+ const intel = require('./lib/intel.cjs');
1222
+ const subcommand = args[1];
1223
+ if (subcommand === 'query') {
1224
+ const term = args[2];
1225
+ if (!term) error('Usage: gsd-tools intel query <term>', ERROR_REASON.USAGE);
1226
+ const planningDir = path.join(cwd, '.planning');
1227
+ core.output(intel.intelQuery(term, planningDir), raw);
1228
+ } else if (subcommand === 'status') {
1229
+ const planningDir = path.join(cwd, '.planning');
1230
+ const status = intel.intelStatus(planningDir);
1231
+ if (!raw && status.files) {
1232
+ for (const file of Object.values(status.files)) {
1233
+ if (file.updated_at) {
1234
+ file.updated_at = core.timeAgo(new Date(file.updated_at));
1235
+ }
1236
+ }
1237
+ }
1238
+ core.output(status, raw);
1239
+ } else if (subcommand === 'diff') {
1240
+ const planningDir = path.join(cwd, '.planning');
1241
+ core.output(intel.intelDiff(planningDir), raw);
1242
+ } else if (subcommand === 'snapshot') {
1243
+ const planningDir = path.join(cwd, '.planning');
1244
+ core.output(intel.intelSnapshot(planningDir), raw);
1245
+ } else if (subcommand === 'patch-meta') {
1246
+ const filePath = args[2];
1247
+ if (!filePath) error('Usage: gsd-tools intel patch-meta <file-path>', ERROR_REASON.USAGE);
1248
+ core.output(intel.intelPatchMeta(path.resolve(cwd, filePath)), raw);
1249
+ } else if (subcommand === 'validate') {
1250
+ const planningDir = path.join(cwd, '.planning');
1251
+ core.output(intel.intelValidate(planningDir), raw);
1252
+ } else if (subcommand === 'extract-exports') {
1253
+ const filePath = args[2];
1254
+ if (!filePath) error('Usage: gsd-tools intel extract-exports <file-path>', ERROR_REASON.USAGE);
1255
+ core.output(intel.intelExtractExports(path.resolve(cwd, filePath)), raw);
1256
+ } else if (subcommand === 'update') {
1257
+ const planningDir = path.join(cwd, '.planning');
1258
+ core.output(intel.intelUpdate(planningDir), raw);
1259
+ } else {
1260
+ error('Unknown intel subcommand. Available: query, status, update, diff, snapshot, patch-meta, validate, extract-exports', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1261
+ }
1262
+ break;
1263
+ }
1264
+
1265
+ // ─── Graphify ──────────────────────────────────────────────────────────
1266
+
1267
+ case 'graphify': {
1268
+ const graphify = require('./lib/graphify.cjs');
1269
+ const subcommand = args[1];
1270
+ if (subcommand === 'query') {
1271
+ const term = args[2];
1272
+ if (!term) error('Usage: gsd-tools graphify query <term>', ERROR_REASON.USAGE);
1273
+ const budgetIdx = args.indexOf('--budget');
1274
+ const budget = budgetIdx !== -1 ? parseInt(args[budgetIdx + 1], 10) : null;
1275
+ core.output(graphify.graphifyQuery(cwd, term, { budget }), raw);
1276
+ } else if (subcommand === 'status') {
1277
+ core.output(graphify.graphifyStatus(cwd), raw);
1278
+ } else if (subcommand === 'diff') {
1279
+ core.output(graphify.graphifyDiff(cwd), raw);
1280
+ } else if (subcommand === 'build') {
1281
+ if (args[2] === 'snapshot') {
1282
+ core.output(graphify.writeSnapshot(cwd), raw);
1283
+ } else {
1284
+ core.output(graphify.graphifyBuild(cwd), raw);
1285
+ }
1286
+ } else {
1287
+ error('Unknown graphify subcommand. Available: build, query, status, diff', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1288
+ }
1289
+ break;
1290
+ }
1291
+
1292
+ // ─── Documentation ────────────────────────────────────────────────────
1293
+
1294
+ case 'docs-init': {
1295
+ // Phase 6 (#3575): dispatch via SDK executeForCjs when available.
1296
+ // SDK handler: docsInit in sdk/src/query/docs-init.ts.
1297
+ const handled = _dispatchNonFamily({
1298
+ registryCommand: 'docs-init',
1299
+ registryArgs: args.slice(1),
1300
+ legacyCommand: 'docs-init',
1301
+ legacyArgs: args.slice(1),
1302
+ cwd,
1303
+ raw,
1304
+ error,
1305
+ output: core.output,
1306
+ });
1307
+ if (!handled) docs.cmdDocsInit(cwd, raw);
1308
+ break;
1309
+ }
1310
+
1311
+ // ─── Learnings ─────────────────────────────────────────────────────────
1312
+
1313
+ case 'learnings': {
1314
+ const subcommand = args[1];
1315
+ if (subcommand === 'list') {
1316
+ learnings.cmdLearningsList(raw);
1317
+ } else if (subcommand === 'query') {
1318
+ const tagIdx = args.indexOf('--tag');
1319
+ const tag = tagIdx !== -1 ? args[tagIdx + 1] : null;
1320
+ if (!tag) error('Usage: gsd-tools learnings query --tag <tag>', ERROR_REASON.USAGE);
1321
+ learnings.cmdLearningsQuery(tag, raw);
1322
+ } else if (subcommand === 'copy') {
1323
+ learnings.cmdLearningsCopy(cwd, raw);
1324
+ } else if (subcommand === 'prune') {
1325
+ const olderIdx = args.indexOf('--older-than');
1326
+ const olderThan = olderIdx !== -1 ? args[olderIdx + 1] : null;
1327
+ if (!olderThan) error('Usage: gsd-tools learnings prune --older-than <duration>', ERROR_REASON.USAGE);
1328
+ learnings.cmdLearningsPrune(olderThan, raw);
1329
+ } else if (subcommand === 'delete') {
1330
+ const id = args[2];
1331
+ if (!id) error('Usage: gsd-tools learnings delete <id>', ERROR_REASON.USAGE);
1332
+ learnings.cmdLearningsDelete(id, raw);
1333
+ } else {
1334
+ error('Unknown learnings subcommand. Available: list, query, copy, prune, delete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
1335
+ }
1336
+ break;
1337
+ }
1338
+
1339
+ // ─── detect-custom-files ───────────────────────────────────────────────
1340
+ // CJS-native: no SDK counterpart exists in the command registry.
1341
+ // detect-custom-files reads a gsd-file-manifest.json against the
1342
+ // live filesystem to identify user-added files. It is installer-specific
1343
+ // logic that has no async query equivalent in the SDK.
1344
+ //
1345
+ // Detect user-added files inside GSD-managed directories that are not
1346
+ // tracked in gsd-file-manifest.json. Used by the update workflow to back
1347
+ // up custom files before the installer wipes those directories.
1348
+ //
1349
+ // This replaces the fragile bash pattern:
1350
+ // MANIFEST_FILES=$(node -e "require('$RUNTIME_DIR/...')" 2>/dev/null)
1351
+ // ${filepath#$RUNTIME_DIR/} # unreliable path stripping
1352
+ // which silently returns CUSTOM_COUNT=0 when $RUNTIME_DIR is unset or
1353
+ // when the stripped path does not match the manifest key format (#1997).
1354
+
1355
+ case 'detect-custom-files': {
1356
+ const configDirIdx = args.indexOf('--config-dir');
1357
+ const configDir = configDirIdx !== -1 ? args[configDirIdx + 1] : null;
1358
+ if (!configDir) {
1359
+ error('Usage: gsd-tools detect-custom-files --config-dir <path>', ERROR_REASON.USAGE);
1360
+ }
1361
+ const resolvedConfigDir = path.resolve(configDir);
1362
+ if (!fs.existsSync(resolvedConfigDir)) {
1363
+ error(`Config directory not found: ${resolvedConfigDir}`, ERROR_REASON.USAGE);
1364
+ }
1365
+
1366
+ const manifestPath = path.join(resolvedConfigDir, 'gsd-file-manifest.json');
1367
+ if (!fs.existsSync(manifestPath)) {
1368
+ // No manifest — cannot determine what is custom. Return empty list
1369
+ // (same behaviour as saveLocalPatches in install.js when no manifest).
1370
+ const out = { custom_files: [], custom_count: 0, manifest_found: false };
1371
+ process.stdout.write(JSON.stringify(out, null, 2));
1372
+ break;
1373
+ }
1374
+
1375
+ let manifest;
1376
+ try {
1377
+ manifest = JSON.parse(await fs.promises.readFile(manifestPath, 'utf8'));
1378
+ } catch {
1379
+ const out = { custom_files: [], custom_count: 0, manifest_found: false, error: 'manifest parse error' };
1380
+ process.stdout.write(JSON.stringify(out, null, 2));
1381
+ break;
1382
+ }
1383
+
1384
+ const manifestKeys = new Set(Object.keys(manifest.files || {}));
1385
+
1386
+ // GSD-managed directories to scan for user-added files.
1387
+ // These are the directories the installer wipes on update.
1388
+ const GSD_MANAGED_DIRS = [
1389
+ 'get-shit-done',
1390
+ 'agents',
1391
+ path.join('commands', 'gsd'),
1392
+ 'hooks',
1393
+ 'skills',
1394
+ ];
1395
+
1396
+ function collectCustomFiles(dir, baseDir, manifestKeys, out) {
1397
+ if (!fs.existsSync(dir)) return;
1398
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
1399
+ const fullPath = path.join(dir, entry.name);
1400
+ if (entry.isDirectory()) {
1401
+ collectCustomFiles(fullPath, baseDir, manifestKeys, out);
1402
+ continue;
1403
+ }
1404
+ // Use forward slashes for cross-platform manifest key compatibility
1405
+ const relPath = path.relative(baseDir, fullPath).replace(/\\/g, '/');
1406
+ if (!manifestKeys.has(relPath)) {
1407
+ out.push(relPath);
1408
+ }
1409
+ }
1410
+ }
1411
+
1412
+ const customFiles = [];
1413
+ for (const managedDir of GSD_MANAGED_DIRS) {
1414
+ const absDir = path.join(resolvedConfigDir, managedDir);
1415
+ if (!fs.existsSync(absDir)) continue;
1416
+ collectCustomFiles(absDir, resolvedConfigDir, manifestKeys, customFiles);
1417
+ }
1418
+
1419
+ const out = {
1420
+ custom_files: customFiles,
1421
+ custom_count: customFiles.length,
1422
+ manifest_found: true,
1423
+ manifest_version: manifest.version || null,
1424
+ };
1425
+ process.stdout.write(JSON.stringify(out, null, 2));
1426
+ break;
1427
+ }
1428
+
1429
+ // ─── GSD-2 Reverse Migration ───────────────────────────────────────────
1430
+
1431
+ case 'from-gsd2': {
1432
+ const gsd2Import = require('./lib/gsd2-import.cjs');
1433
+ gsd2Import.cmdFromGsd2(args.slice(1), cwd, raw);
1434
+ break;
1435
+ }
1436
+
1437
+ // ─── Prompt Budget ────────────────────────────────────────────────────
1438
+ //
1439
+ // Assemble and deterministically trim review prompt sections to fit a
1440
+ // token budget. Used by the /gsd-review workflow before dispatching to
1441
+ // small-context local model servers (Ollama, llama.cpp, LM Studio).
1442
+ //
1443
+ // Required flags:
1444
+ // --budget <N> Token budget (integer > 0)
1445
+ // --instructions-file <path> Review instructions
1446
+ // --roadmap-file <path> Roadmap section
1447
+ // --plan-file <path> Plan file (may be repeated)
1448
+ // --output-prompt <path> Write trimmed prompt here
1449
+ // --output-metadata <path> Write metadata JSON here
1450
+ //
1451
+ // Optional flags:
1452
+ // --safety-margin-pct <N> Default 10
1453
+ // --project-md-head-lines <N> Default 40
1454
+ // --project-file <path>
1455
+ // --context-file <path>
1456
+ // --research-file <path>
1457
+ // --requirements-file <path>
1458
+ //
1459
+ // Exit codes:
1460
+ // 0 success (trim or no-trim)
1461
+ // 1 invocation error (missing required arg, missing file, invalid budget)
1462
+ // 2 hardFailed: prompt cannot fit effective budget after trim policy
1463
+
1464
+ case 'prompt-budget': {
1465
+ const promptBudget = require('./lib/prompt-budget.cjs');
1466
+
1467
+ // ── Collect multi-value --plan-file flags ──────────────────────────
1468
+ const planFiles = [];
1469
+ for (let i = 1; i < args.length; i++) {
1470
+ if (args[i] === '--plan-file' && args[i + 1] && !args[i + 1].startsWith('--')) {
1471
+ planFiles.push(args[i + 1]);
1472
+ i++;
1473
+ }
1474
+ }
1475
+
1476
+ // ── Parse single-value flags ───────────────────────────────────────
1477
+ const flagMap = new Map();
1478
+ for (let i = 1; i < args.length; i++) {
1479
+ const current = args[i];
1480
+ const next = args[i + 1];
1481
+ if (!current.startsWith('--')) continue;
1482
+ if (!next || next.startsWith('--')) {
1483
+ if (!flagMap.has(current)) flagMap.set(current, null);
1484
+ continue;
1485
+ }
1486
+ if (!flagMap.has(current)) flagMap.set(current, next);
1487
+ i++;
1488
+ }
1489
+ const getFlag = (flag) => flagMap.get(flag) ?? null;
1490
+
1491
+ const budgetStr = getFlag('--budget');
1492
+ const instructionsFile = getFlag('--instructions-file');
1493
+ const roadmapFile = getFlag('--roadmap-file');
1494
+ const outputPromptFile = getFlag('--output-prompt');
1495
+ const outputMetadataFile = getFlag('--output-metadata');
1496
+ const safetyMarginStr = getFlag('--safety-margin-pct');
1497
+ const projectMdHeadLinesStr = getFlag('--project-md-head-lines');
1498
+ const projectFile = getFlag('--project-file');
1499
+ const contextFile = getFlag('--context-file');
1500
+ const researchFile = getFlag('--research-file');
1501
+ const requirementsFile = getFlag('--requirements-file');
1502
+
1503
+ // ── Validate required args ─────────────────────────────────────────
1504
+ if (!budgetStr) {
1505
+ process.stderr.write('Error: --budget <N> is required\n');
1506
+ process.exit(1);
1507
+ }
1508
+ const budget = parseInt(budgetStr, 10);
1509
+ if (!Number.isFinite(budget) || budget <= 0) {
1510
+ process.stderr.write('Error: --budget must be a positive integer\n');
1511
+ process.exit(1);
1512
+ }
1513
+ if (!instructionsFile) {
1514
+ process.stderr.write('Error: --instructions-file <path> is required\n');
1515
+ process.exit(1);
1516
+ }
1517
+ if (!roadmapFile) {
1518
+ process.stderr.write('Error: --roadmap-file <path> is required\n');
1519
+ process.exit(1);
1520
+ }
1521
+ if (planFiles.length === 0) {
1522
+ process.stderr.write('Error: at least one --plan-file <path> is required\n');
1523
+ process.exit(1);
1524
+ }
1525
+ if (!outputPromptFile) {
1526
+ process.stderr.write('Error: --output-prompt <path> is required\n');
1527
+ process.exit(1);
1528
+ }
1529
+ if (!outputMetadataFile) {
1530
+ process.stderr.write('Error: --output-metadata <path> is required\n');
1531
+ process.exit(1);
1532
+ }
1533
+
1534
+ // ── Validate and read required files ──────────────────────────────
1535
+ async function readRequired(filePath, flagName) {
1536
+ const resolved = path.resolve(filePath);
1537
+ try {
1538
+ return await fs.promises.readFile(resolved, 'utf8');
1539
+ } catch (err) {
1540
+ if (err && err.code === 'ENOENT') {
1541
+ process.stderr.write(`Error: file not found for ${flagName}: ${resolved}\n`);
1542
+ process.exit(1);
1543
+ }
1544
+ process.stderr.write(`Error: cannot read file for ${flagName}: ${resolved}\n`);
1545
+ process.exit(1);
1546
+ }
1547
+ }
1548
+
1549
+ async function readOptional(filePath) {
1550
+ if (!filePath) return null;
1551
+ const resolved = path.resolve(filePath);
1552
+ try {
1553
+ return await fs.promises.readFile(resolved, 'utf8');
1554
+ } catch (err) {
1555
+ if (err && err.code === 'ENOENT') return null;
1556
+ process.stderr.write(`Error: cannot read optional file: ${resolved}\n`);
1557
+ process.exit(1);
1558
+ }
1559
+ }
1560
+
1561
+ const instructions = await readRequired(instructionsFile, '--instructions-file');
1562
+ const roadmap = await readRequired(roadmapFile, '--roadmap-file');
1563
+ const plans = await Promise.all(planFiles.map(async (p) => {
1564
+ const resolved = path.resolve(p);
1565
+ try {
1566
+ const content = await fs.promises.readFile(resolved, 'utf8');
1567
+ return { file: path.basename(p), content };
1568
+ } catch (err) {
1569
+ if (err && err.code === 'ENOENT') {
1570
+ process.stderr.write(`Error: plan file not found: ${resolved}\n`);
1571
+ process.exit(1);
1572
+ }
1573
+ process.stderr.write(`Error: cannot read plan file: ${resolved}\n`);
1574
+ process.exit(1);
1575
+ }
1576
+ }));
1577
+
1578
+ const projectMd = await readOptional(projectFile);
1579
+ const context = await readOptional(contextFile);
1580
+ const research = await readOptional(researchFile);
1581
+ const requirements = await readOptional(requirementsFile);
1582
+
1583
+ // ── Build options ─────────────────────────────────────────────────
1584
+ const options = {};
1585
+ if (safetyMarginStr !== null) {
1586
+ const pct = parseInt(safetyMarginStr, 10);
1587
+ if (Number.isFinite(pct)) options.safetyMarginPct = pct;
1588
+ }
1589
+ if (projectMdHeadLinesStr !== null) {
1590
+ const lines = parseInt(projectMdHeadLinesStr, 10);
1591
+ if (Number.isFinite(lines)) options.projectMdHeadLines = lines;
1592
+ }
1593
+
1594
+ // ── Call applyBudget ──────────────────────────────────────────────
1595
+ const sections = { instructions, roadmap, plans, projectMd, context, research, requirements };
1596
+ const { prompt, metadata } = promptBudget.applyBudget({ sections, budget, options });
1597
+
1598
+ // ── Write outputs ─────────────────────────────────────────────────
1599
+ await fs.promises.writeFile(path.resolve(outputMetadataFile), JSON.stringify(metadata, null, 2));
1600
+ await fs.promises.writeFile(path.resolve(outputPromptFile), prompt);
1601
+
1602
+ if (metadata.hardFailed) {
1603
+ process.exit(2);
1604
+ }
1605
+ break;
1606
+ }
1607
+
1608
+ default: {
1609
+ // #3243: if the caller passed a dotted form (e.g. "foo.bar"), the shim
1610
+ // above split it so `command` here is the head ("foo"). Use
1611
+ // originalCommand to reconstruct the original dotted form and suggest
1612
+ // the spaced equivalent — surfacing a useful diagnostic instead of just
1613
+ // "Unknown command: foo".
1614
+ const wasDotted =
1615
+ typeof originalCommand === 'string' &&
1616
+ originalCommand !== command &&
1617
+ originalCommand.includes('.');
1618
+ let suggestion = '';
1619
+ if (wasDotted) {
1620
+ const dotIdx = originalCommand.indexOf('.');
1621
+ const head = originalCommand.slice(0, dotIdx);
1622
+ const rest = originalCommand.slice(dotIdx + 1);
1623
+ suggestion = ` — did you mean: "${head} ${rest}"?`;
1624
+ }
1625
+ error(`Unknown command: ${command}${suggestion}`, ERROR_REASON.SDK_UNKNOWN_COMMAND);
1626
+ }
1627
+ }
1628
+ }
1629
+
1630
+ main();