@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,1228 @@
1
+ /**
2
+ * Init composition handlers — compound init commands for workflow bootstrapping.
3
+ *
4
+ * Composes existing atomic SDK queries into the same flat JSON bundles
5
+ * that CJS init.cjs produces, enabling workflow migration. Each handler
6
+ * follows the QueryHandler signature and returns { data: <flat JSON> }.
7
+ *
8
+ * Port of get-shit-done/bin/lib/init.cjs (13 of 16 handlers).
9
+ * The 3 complex handlers (new-project, progress, manager) are in init-complex.ts.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { initExecutePhase, withProjectRoot } from './init.js';
14
+ *
15
+ * const result = await initExecutePhase(['9'], '/project');
16
+ * // { data: { executor_model: 'opus', phase_found: true, ... } }
17
+ * ```
18
+ */
19
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
20
+ import { join, relative, basename } from 'node:path';
21
+ import { execSync } from 'node:child_process';
22
+ import { homedir } from 'node:os';
23
+ import { GSDError, ErrorClassification } from '../errors.js';
24
+ import { loadConfig } from '../config.js';
25
+ import { resolveModel, MODEL_PROFILES } from './config-query.js';
26
+ import { maskIfSecret } from './secrets.js';
27
+ import { findPhase } from './phase.js';
28
+ import { getMilestonePhaseFilter } from './state.js';
29
+ import { roadmapGetPhase, getMilestoneInfo, extractCurrentMilestone, extractPhasesFromSection } from './roadmap.js';
30
+ import { determinePhaseStatus } from './progress.js';
31
+ import { planningPaths, normalizePhaseName, toPosixPath, resolveAgentsDir, detectRuntime } from './helpers.js';
32
+ import { generatePhaseSlug, assertSafeProjectCode } from './phase-lifecycle-policy.js';
33
+ // ─── Internal helpers ──────────────────────────────────────────────────────
34
+ /**
35
+ * Extract model alias string from a resolveModel result.
36
+ */
37
+ async function getModelAlias(agentType, projectDir) {
38
+ const result = await resolveModel([agentType], projectDir);
39
+ const data = result.data;
40
+ return data.model || 'sonnet';
41
+ }
42
+ /**
43
+ * Generate a slug from text (inline, matches CJS generateSlugInternal).
44
+ */
45
+ function generateSlugInternal(text) {
46
+ return text
47
+ .toLowerCase()
48
+ .replace(/[^a-z0-9]+/g, '-')
49
+ .replace(/^-+|-+$/g, '')
50
+ .substring(0, 60);
51
+ }
52
+ function extractPhaseArg(args) {
53
+ const equalsArg = args.find((arg) => arg.startsWith('--phase='));
54
+ if (equalsArg) {
55
+ const value = equalsArg.slice('--phase='.length).trim();
56
+ return value || undefined;
57
+ }
58
+ const flagIndex = args.indexOf('--phase');
59
+ if (flagIndex !== -1) {
60
+ const value = args[flagIndex + 1];
61
+ return value && !value.startsWith('--') ? value : undefined;
62
+ }
63
+ const first = args[0];
64
+ return first && !first.startsWith('--') ? first : undefined;
65
+ }
66
+ /**
67
+ * Check if a path exists on disk.
68
+ */
69
+ function pathExists(base, relPath) {
70
+ return existsSync(join(base, relPath));
71
+ }
72
+ /**
73
+ * Bug #3491: detect whether `base` is inside any git worktree, and if so,
74
+ * return the absolute worktree root. Mirrors the CJS `gitWorktreeInfoInternal`
75
+ * in get-shit-done/bin/lib/core.cjs — keep these two implementations behaviour-
76
+ * identical so the SDK and CJS init handlers emit the same has_git semantics.
77
+ *
78
+ * Returns { inside, worktreeRoot } — both fall back to false/null on any error
79
+ * (git unavailable, not a repo, timeout) so callers see the conservative
80
+ * default that preserves pre-fix behaviour for non-git environments.
81
+ */
82
+ function gitWorktreeInfo(base) {
83
+ try {
84
+ const inside = execSync('git rev-parse --is-inside-work-tree', {
85
+ cwd: base,
86
+ stdio: ['ignore', 'pipe', 'ignore'],
87
+ encoding: 'utf-8',
88
+ timeout: 5000,
89
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
90
+ }).trim();
91
+ if (inside !== 'true')
92
+ return { inside: false, worktreeRoot: null };
93
+ try {
94
+ const root = execSync('git rev-parse --show-toplevel', {
95
+ cwd: base,
96
+ stdio: ['ignore', 'pipe', 'ignore'],
97
+ encoding: 'utf-8',
98
+ timeout: 5000,
99
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
100
+ }).trim();
101
+ return { inside: true, worktreeRoot: root || null };
102
+ }
103
+ catch {
104
+ return { inside: true, worktreeRoot: null };
105
+ }
106
+ }
107
+ catch {
108
+ return { inside: false, worktreeRoot: null };
109
+ }
110
+ }
111
+ function detectNestedSubdir(base, info) {
112
+ if (!info.inside)
113
+ return false;
114
+ try {
115
+ const prefix = execSync('git rev-parse --show-prefix', {
116
+ cwd: base,
117
+ stdio: ['ignore', 'pipe', 'ignore'],
118
+ encoding: 'utf-8',
119
+ timeout: 5000,
120
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
121
+ }).trim().replace(/\\/g, '/');
122
+ if (prefix.length > 0)
123
+ return prefix !== '.' && prefix !== './';
124
+ return false;
125
+ }
126
+ catch { }
127
+ if (!info.worktreeRoot)
128
+ return false;
129
+ const normalize = (p) => p.replace(/\\/g, '/').replace(/\/+$/g, '').toLowerCase();
130
+ const root = normalize(info.worktreeRoot);
131
+ const cwd = normalize(base);
132
+ return root !== cwd;
133
+ }
134
+ /**
135
+ * Compute the canonical phase directory name for a known phase entry from the
136
+ * roadmap when no directory exists yet. Applies the project_code prefix so
137
+ * the first-touch creation path used by /gsd-discuss-phase and /gsd-plan-phase
138
+ * stays consistent with the prefix produced by `phase.add` / `phase.insert`.
139
+ *
140
+ * Returns null when phaseNumber or phaseName cannot be determined.
141
+ */
142
+ function computeExpectedPhaseDirName(phaseNumber, phaseName, projectCode) {
143
+ if (!phaseNumber || !phaseName)
144
+ return null;
145
+ const paddedNum = normalizePhaseName(phaseNumber);
146
+ const slug = generatePhaseSlug(phaseName);
147
+ if (!slug)
148
+ return null;
149
+ const prefix = projectCode ? `${projectCode}-` : '';
150
+ return `${prefix}${paddedNum}-${slug}`;
151
+ }
152
+ async function shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream) {
153
+ // Matches CJS cmdInitPlanPhase / cmdInitExecutePhase / cmdInitVerifyWork:
154
+ // if (phaseInfo?.archived && roadmapPhase?.found) phaseInfo = null;
155
+ // ROADMAP is authoritative for the current milestone, regardless of what
156
+ // archived milestone the on-disk match came from — BUT see #3469 exception.
157
+ if (!phaseInfo?.archived)
158
+ return false;
159
+ if (!roadmapPhase || !roadmapPhase.found)
160
+ return false;
161
+ // #3469: If the archived phase belongs to the CURRENT milestone (e.g. phases
162
+ // were cleared via `phases clear` into .planning/milestones/<version>-phases/
163
+ // but the workflow is still on that same milestone), preserve the archived dir
164
+ // as the canonical phase location. Only drop when the archived version is from
165
+ // a PRIOR milestone (the original anti-ghost-phase guard).
166
+ // Note: the milestone-version equality check here does NOT regress #2391
167
+ // because in the #2391 scenario archived.version != current milestone.
168
+ const pp = planningPaths(projectDir, workstream);
169
+ try {
170
+ const stateContent = readFileSync(pp.state, 'utf-8');
171
+ const milestoneMatch = stateContent.match(/^milestone:\s*(.+)$/m);
172
+ const currentMilestone = milestoneMatch ? milestoneMatch[1].trim() : null;
173
+ if (currentMilestone && phaseInfo.archived === currentMilestone) {
174
+ // Same milestone — archived dir is the canonical location. Keep it.
175
+ return false;
176
+ }
177
+ }
178
+ catch { /* STATE.md unreadable — fall through to default drop */ }
179
+ return true;
180
+ }
181
+ /**
182
+ * Get the latest completed milestone from MILESTONES.md.
183
+ * Port of getLatestCompletedMilestone from init.cjs lines 10-25.
184
+ */
185
+ function getLatestCompletedMilestone(projectDir) {
186
+ const milestonesPath = join(projectDir, '.planning', 'MILESTONES.md');
187
+ if (!existsSync(milestonesPath))
188
+ return null;
189
+ try {
190
+ const content = readFileSync(milestonesPath, 'utf-8');
191
+ const match = content.match(/^##\s+(v[\d.]+)\s+(.+?)\s+\(Shipped:/m);
192
+ if (!match)
193
+ return null;
194
+ return { version: match[1], name: match[2].trim() };
195
+ }
196
+ catch {
197
+ return null;
198
+ }
199
+ }
200
+ /**
201
+ * Check which GSD agents are installed on disk.
202
+ *
203
+ * Runtime-aware per issue #2402: detects the invoking runtime
204
+ * (`GSD_RUNTIME` → `config.runtime` → 'claude') and probes that runtime's
205
+ * canonical `agents/` directory. `GSD_AGENTS_DIR` still short-circuits.
206
+ *
207
+ * The optional `projectDir` parameter enables the repo-local `.claude/agents`
208
+ * fallback for Claude `--local` installs (bug #3751).
209
+ *
210
+ * Port of checkAgentsInstalled from core.cjs lines 1274-1306.
211
+ */
212
+ function checkAgentsInstalled(config, projectDir) {
213
+ const runtime = detectRuntime(config);
214
+ const agentsDir = resolveAgentsDir(runtime, projectDir);
215
+ const expectedAgents = Object.keys(MODEL_PROFILES);
216
+ if (!existsSync(agentsDir)) {
217
+ return { agents_installed: false, missing_agents: expectedAgents };
218
+ }
219
+ const missing = [];
220
+ for (const agent of expectedAgents) {
221
+ const agentFile = join(agentsDir, `${agent}.md`);
222
+ const agentFileCopilot = join(agentsDir, `${agent}.agent.md`);
223
+ if (!existsSync(agentFile) && !existsSync(agentFileCopilot)) {
224
+ missing.push(agent);
225
+ }
226
+ }
227
+ return {
228
+ agents_installed: missing.length === 0,
229
+ missing_agents: missing,
230
+ };
231
+ }
232
+ /**
233
+ * Extract phase info from findPhase result, or build fallback from roadmap.
234
+ */
235
+ async function getPhaseInfoWithFallback(phase, projectDir, workstream) {
236
+ const phaseResult = await findPhase([phase], projectDir, workstream);
237
+ let phaseInfo = phaseResult.data;
238
+ // findPhase returns { found: false } when missing; findPhaseInternal returns null — align for init parity.
239
+ if (phaseInfo && phaseInfo.found === false) {
240
+ phaseInfo = null;
241
+ }
242
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
243
+ const roadmapPhase = roadmapResult.data;
244
+ // Match init.cjs: drop archived disk match when the phase is listed in the current ROADMAP
245
+ if (await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
246
+ phaseInfo = null;
247
+ }
248
+ // Fallback to ROADMAP.md if no phase directory exists yet
249
+ if ((!phaseInfo || !phaseInfo.found) && roadmapPhase?.found) {
250
+ const phaseName = roadmapPhase.phase_name;
251
+ phaseInfo = {
252
+ found: true,
253
+ directory: null,
254
+ phase_number: roadmapPhase.phase_number,
255
+ phase_name: phaseName,
256
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
257
+ plans: [],
258
+ summaries: [],
259
+ incomplete_plans: [],
260
+ has_research: false,
261
+ has_context: false,
262
+ has_verification: false,
263
+ has_reviews: false,
264
+ };
265
+ }
266
+ return { phaseInfo, roadmapPhase };
267
+ }
268
+ /**
269
+ * Phase resolution for `init verify-work` — matches init.cjs cmdInitVerifyWork (archived + fallback).
270
+ */
271
+ async function getPhaseInfoForVerifyWork(phase, projectDir, workstream) {
272
+ const phaseResult = await findPhase([phase], projectDir, workstream);
273
+ let phaseInfo = phaseResult.data;
274
+ if (phaseInfo && phaseInfo.found === false) {
275
+ phaseInfo = null;
276
+ }
277
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
278
+ const roadmapPhase = roadmapResult.data;
279
+ if (await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
280
+ phaseInfo = null;
281
+ }
282
+ if (!phaseInfo && roadmapPhase?.found) {
283
+ const phaseName = roadmapPhase.phase_name;
284
+ phaseInfo = {
285
+ found: true,
286
+ directory: null,
287
+ phase_number: roadmapPhase.phase_number,
288
+ phase_name: phaseName,
289
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
290
+ plans: [],
291
+ summaries: [],
292
+ incomplete_plans: [],
293
+ has_research: false,
294
+ has_context: false,
295
+ has_verification: false,
296
+ };
297
+ }
298
+ return { phaseInfo };
299
+ }
300
+ /**
301
+ * Extract requirement IDs from roadmap section text.
302
+ */
303
+ function extractReqIds(roadmapPhase) {
304
+ const section = roadmapPhase?.section;
305
+ // Accept all bold/colon variants of the Requirements header. The forms
306
+ // **Requirements:** (colon inside bold)
307
+ // **Requirements**: (colon outside bold)
308
+ // **Requirements** : (space before outside colon)
309
+ // render identically in markdown but differ textually. Issue #2769.
310
+ const reqMatch = section?.match(/^\*\*Requirements:?\*\*[^\S\n]*:?[^\S\n]*([^\n]*)$/m);
311
+ const reqExtracted = reqMatch
312
+ ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map((s) => s.trim()).filter(Boolean).join(', ')
313
+ : null;
314
+ return (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
315
+ }
316
+ // ─── withProjectRoot ─────────────────────────────────────────────────────
317
+ /**
318
+ * Inject project_root, agents_installed, missing_agents, and response_language
319
+ * into an init result object.
320
+ *
321
+ * Port of withProjectRoot from init.cjs lines 32-63.
322
+ *
323
+ * @param projectDir - Absolute project root path
324
+ * @param result - The result object to augment
325
+ * @param config - Optional loaded config (avoids re-reading config.json)
326
+ * @returns The augmented result object
327
+ */
328
+ export function withProjectRoot(projectDir, result, config) {
329
+ result.project_root = projectDir;
330
+ const agentStatus = checkAgentsInstalled(config, projectDir);
331
+ result.agents_installed = agentStatus.agents_installed;
332
+ result.missing_agents = agentStatus.missing_agents;
333
+ const responseLang = config?.response_language;
334
+ if (responseLang) {
335
+ result.response_language = responseLang;
336
+ }
337
+ const projectCode = config?.project_code;
338
+ if (projectCode) {
339
+ result.project_code = projectCode;
340
+ }
341
+ const projectMdPath = join(projectDir, '.planning', 'PROJECT.md');
342
+ try {
343
+ if (existsSync(projectMdPath)) {
344
+ const content = readFileSync(projectMdPath, 'utf-8');
345
+ const h1Match = content.match(/^#\s+(.+)$/m);
346
+ if (h1Match) {
347
+ result.project_title = h1Match[1].trim();
348
+ }
349
+ }
350
+ }
351
+ catch {
352
+ /* intentionally empty */
353
+ }
354
+ return result;
355
+ }
356
+ // ─── initExecutePhase ─────────────────────────────────────────────────────
357
+ /**
358
+ * Init handler for execute-phase workflow.
359
+ * Port of cmdInitExecutePhase from init.cjs lines 50-171.
360
+ */
361
+ export const initExecutePhase = async (args, projectDir, workstream) => {
362
+ const phase = extractPhaseArg(args);
363
+ if (!phase) {
364
+ return { data: { error: 'phase required for init execute-phase' } };
365
+ }
366
+ // --tdd is a boolean override of config.workflow.tdd_mode — matches the CJS
367
+ // path's parseNamedArgs(args, [], ['validate', 'tdd']) projection
368
+ // (bin/lib/init-command-router.cjs handler block) which passes options.tdd
369
+ // through to cmdInitExecutePhase. Without parsing here, `gsd-tools init
370
+ // execute-phase 1 --tdd` would never override a false config value.
371
+ const tddFlag = args.includes('--tdd');
372
+ const config = await loadConfig(projectDir);
373
+ const paths = planningPaths(projectDir, workstream);
374
+ const planningDir = paths.planning;
375
+ const { phaseInfo, roadmapPhase } = await getPhaseInfoWithFallback(phase, projectDir, workstream);
376
+ const phase_req_ids = extractReqIds(roadmapPhase);
377
+ const configExists = existsSync(join(planningDir, 'config.json'));
378
+ const [executorModel, verifierModel] = configExists
379
+ ? await Promise.all([
380
+ getModelAlias('gsd-executor', projectDir),
381
+ getModelAlias('gsd-verifier', projectDir),
382
+ ])
383
+ : ['', ''];
384
+ const milestone = await getMilestoneInfo(projectDir, workstream);
385
+ const phaseNumber = phaseInfo?.phase_number || null;
386
+ const phaseSlug = phaseInfo?.phase_slug || null;
387
+ const plans = (phaseInfo?.plans || []);
388
+ const summaries = (phaseInfo?.summaries || []);
389
+ const incompletePlans = (phaseInfo?.incomplete_plans || []);
390
+ const projectCode = config.project_code || '';
391
+ const result = {
392
+ executor_model: executorModel,
393
+ verifier_model: verifierModel,
394
+ tdd_mode: tddFlag || (config.workflow.tdd_mode ?? false),
395
+ commit_docs: config.commit_docs,
396
+ sub_repos: config.sub_repos ?? [],
397
+ parallelization: config.parallelization,
398
+ context_window: config.context_window ?? 200000,
399
+ branching_strategy: config.git.branching_strategy,
400
+ phase_branch_template: config.git.phase_branch_template,
401
+ milestone_branch_template: config.git.milestone_branch_template,
402
+ verifier_enabled: config.workflow.verifier,
403
+ phase_found: !!phaseInfo,
404
+ phase_dir: phaseInfo?.directory ?? null,
405
+ phase_number: phaseNumber,
406
+ phase_name: phaseInfo?.phase_name ?? null,
407
+ phase_slug: phaseSlug,
408
+ phase_req_ids,
409
+ plans,
410
+ summaries,
411
+ incomplete_plans: incompletePlans,
412
+ plan_count: plans.length,
413
+ incomplete_count: incompletePlans.length,
414
+ branch_name: config.git.branching_strategy === 'phase' && phaseInfo
415
+ ? config.git.phase_branch_template
416
+ .replace('{project}', projectCode)
417
+ .replace('{phase}', phaseNumber || '')
418
+ .replace('{slug}', phaseSlug || 'phase')
419
+ : config.git.branching_strategy === 'milestone'
420
+ ? config.git.milestone_branch_template
421
+ .replace('{milestone}', milestone.version)
422
+ .replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')
423
+ : null,
424
+ milestone_version: milestone.version,
425
+ milestone_name: milestone.name,
426
+ milestone_slug: generateSlugInternal(milestone.name),
427
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
428
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
429
+ config_exists: configExists,
430
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
431
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
432
+ config_path: toPosixPath(relative(projectDir, join(planningDir, 'config.json'))),
433
+ };
434
+ return { data: withProjectRoot(projectDir, result, config) };
435
+ };
436
+ // ─── initPlanPhase ────────────────────────────────────────────────────────
437
+ /**
438
+ * Init handler for plan-phase workflow.
439
+ * Port of cmdInitPlanPhase from init.cjs lines 173-293.
440
+ */
441
+ export const initPlanPhase = async (args, projectDir, workstream) => {
442
+ const phase = extractPhaseArg(args);
443
+ if (!phase) {
444
+ return { data: { error: 'phase required for init plan-phase' } };
445
+ }
446
+ // --tdd boolean override (parity with CJS router's parseNamedArgs + the
447
+ // legacy cmdInitPlanPhase `options.tdd || config.tdd_mode || false`).
448
+ const tddFlag = args.includes('--tdd');
449
+ const config = await loadConfig(projectDir);
450
+ const paths = planningPaths(projectDir, workstream);
451
+ const planningDir = paths.planning;
452
+ const { phaseInfo, roadmapPhase } = await getPhaseInfoWithFallback(phase, projectDir, workstream);
453
+ const phase_req_ids = extractReqIds(roadmapPhase);
454
+ const configExists = existsSync(join(planningDir, 'config.json'));
455
+ const [researcherModel, plannerModel, checkerModel] = configExists
456
+ ? await Promise.all([
457
+ getModelAlias('gsd-phase-researcher', projectDir),
458
+ getModelAlias('gsd-planner', projectDir),
459
+ getModelAlias('gsd-plan-checker', projectDir),
460
+ ])
461
+ : ['', '', ''];
462
+ const phaseNumber = phaseInfo?.phase_number || null;
463
+ const phaseName = phaseInfo?.phase_name ?? null;
464
+ const phaseDir = phaseInfo?.directory ?? null;
465
+ const plans = (phaseInfo?.plans || []);
466
+ const summaries = (phaseInfo?.summaries || []);
467
+ // #3569: surface phase lifecycle status so /gsd-plan-phase can short-circuit
468
+ // on closed (Complete) phases instead of silently replanning over shipped
469
+ // code. Reuses determinePhaseStatus — the project-wide vocabulary used by
470
+ // `progress` (Pending | Planned | In Progress | Executed | Complete |
471
+ // Needs Review). When the phase has no directory on disk yet, treat it as
472
+ // Pending (it has not been started).
473
+ const phaseStatus = phaseDir
474
+ ? await determinePhaseStatus(plans.length, summaries.length, join(projectDir, phaseDir))
475
+ : 'Pending';
476
+ // #3287: compute the canonical directory name with project_code prefix so
477
+ // the first-touch mkdir in /gsd-plan-phase stays consistent with phase.add.
478
+ const rawProjectCode = config.project_code || '';
479
+ assertSafeProjectCode(rawProjectCode);
480
+ const expectedPhaseDirName = phaseDir
481
+ ? null // directory already exists — no need to create
482
+ : computeExpectedPhaseDirName(phaseNumber, phaseName, rawProjectCode);
483
+ const expectedPhaseDir = expectedPhaseDirName
484
+ ? toPosixPath(relative(projectDir, join(paths.phases, expectedPhaseDirName)))
485
+ : null;
486
+ const cfg = config;
487
+ const result = {
488
+ researcher_model: researcherModel,
489
+ planner_model: plannerModel,
490
+ checker_model: checkerModel,
491
+ tdd_mode: tddFlag || (config.workflow.tdd_mode ?? false),
492
+ research_enabled: config.workflow.research,
493
+ plan_checker_enabled: config.workflow.plan_check,
494
+ nyquist_validation_enabled: config.workflow.nyquist_validation,
495
+ commit_docs: config.commit_docs,
496
+ text_mode: config.workflow.text_mode,
497
+ auto_advance: !!config.workflow.auto_advance,
498
+ auto_chain_active: !!config.workflow._auto_chain_active,
499
+ mode: cfg.mode ?? 'interactive',
500
+ phase_found: !!phaseInfo,
501
+ phase_dir: phaseDir,
502
+ expected_phase_dir: expectedPhaseDir,
503
+ phase_number: phaseNumber,
504
+ phase_name: phaseName,
505
+ phase_slug: phaseInfo?.phase_slug ?? null,
506
+ padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
507
+ phase_req_ids,
508
+ phase_status: phaseStatus,
509
+ has_research: phaseInfo?.has_research || false,
510
+ has_context: phaseInfo?.has_context || false,
511
+ has_reviews: phaseInfo?.has_reviews || false,
512
+ has_plans: plans.length > 0,
513
+ plan_count: plans.length,
514
+ planning_exists: existsSync(planningDir),
515
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
516
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
517
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
518
+ requirements_path: toPosixPath(relative(projectDir, join(planningDir, 'REQUIREMENTS.md'))),
519
+ patterns_path: null,
520
+ };
521
+ // Add artifact paths if phase directory exists
522
+ if (phaseDir) {
523
+ const phaseDirFull = join(projectDir, phaseDir);
524
+ try {
525
+ const files = readdirSync(phaseDirFull);
526
+ const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
527
+ if (contextFile)
528
+ result.context_path = toPosixPath(join(phaseDir, contextFile));
529
+ const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
530
+ if (researchFile)
531
+ result.research_path = toPosixPath(join(phaseDir, researchFile));
532
+ const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
533
+ if (verificationFile)
534
+ result.verification_path = toPosixPath(join(phaseDir, verificationFile));
535
+ const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
536
+ if (uatFile)
537
+ result.uat_path = toPosixPath(join(phaseDir, uatFile));
538
+ const reviewsFile = files.find(f => f.endsWith('-REVIEWS.md') || f === 'REVIEWS.md');
539
+ if (reviewsFile)
540
+ result.reviews_path = toPosixPath(join(phaseDir, reviewsFile));
541
+ const patternsFile = files.find(f => f.endsWith('-PATTERNS.md') || f === 'PATTERNS.md');
542
+ if (patternsFile)
543
+ result.patterns_path = toPosixPath(join(phaseDir, patternsFile));
544
+ }
545
+ catch { /* intentionally empty */ }
546
+ }
547
+ return { data: withProjectRoot(projectDir, result, config) };
548
+ };
549
+ // ─── initNewMilestone ─────────────────────────────────────────────────────
550
+ /**
551
+ * Init handler for new-milestone workflow.
552
+ * Port of cmdInitNewMilestone from init.cjs lines 401-446.
553
+ */
554
+ export const initNewMilestone = async (_args, projectDir) => {
555
+ const config = await loadConfig(projectDir);
556
+ const planningDir = join(projectDir, '.planning');
557
+ const milestone = await getMilestoneInfo(projectDir);
558
+ const latestCompleted = getLatestCompletedMilestone(projectDir);
559
+ const phasesDir = join(planningDir, 'phases');
560
+ let phaseDirCount = 0;
561
+ try {
562
+ if (existsSync(phasesDir)) {
563
+ // Bug #2445 parity with CJS `cmdInitNewMilestone`: filter phase dirs
564
+ // to the current milestone so stale dirs from a prior milestone that
565
+ // weren't archived don't inflate the count. Without this filter the
566
+ // SDK returns the full directory count, which the new-milestone
567
+ // workflow then uses to gate "is this a fresh start" decisions.
568
+ const isDirInMilestone = await getMilestonePhaseFilter(projectDir);
569
+ phaseDirCount = readdirSync(phasesDir, { withFileTypes: true })
570
+ .filter(entry => entry.isDirectory() && isDirInMilestone(entry.name))
571
+ .length;
572
+ }
573
+ }
574
+ catch { /* intentionally empty */ }
575
+ const [researcherModel, synthesizerModel, roadmapperModel] = await Promise.all([
576
+ getModelAlias('gsd-project-researcher', projectDir),
577
+ getModelAlias('gsd-research-synthesizer', projectDir),
578
+ getModelAlias('gsd-roadmapper', projectDir),
579
+ ]);
580
+ const result = {
581
+ researcher_model: researcherModel,
582
+ synthesizer_model: synthesizerModel,
583
+ roadmapper_model: roadmapperModel,
584
+ commit_docs: config.commit_docs,
585
+ research_enabled: config.workflow.research,
586
+ current_milestone: milestone.version,
587
+ current_milestone_name: milestone.name,
588
+ latest_completed_milestone: latestCompleted?.version || null,
589
+ latest_completed_milestone_name: latestCompleted?.name || null,
590
+ phase_dir_count: phaseDirCount,
591
+ phase_archive_path: latestCompleted
592
+ ? toPosixPath(relative(projectDir, join(projectDir, '.planning', 'milestones', `${latestCompleted.version}-phases`)))
593
+ : null,
594
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
595
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
596
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
597
+ project_path: '.planning/PROJECT.md',
598
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
599
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
600
+ };
601
+ return { data: withProjectRoot(projectDir, result, config) };
602
+ };
603
+ // ─── initQuick ────────────────────────────────────────────────────────────
604
+ /**
605
+ * Init handler for quick workflow.
606
+ * Port of cmdInitQuick from init.cjs lines 448-504.
607
+ */
608
+ export const initQuick = async (args, projectDir) => {
609
+ const description = args[0] || null;
610
+ const config = await loadConfig(projectDir);
611
+ const planningDir = join(projectDir, '.planning');
612
+ const now = new Date();
613
+ const slug = description ? generateSlugInternal(description).substring(0, 40) : null;
614
+ // Generate collision-resistant quick task ID: YYMMDD-xxx
615
+ const yy = String(now.getFullYear()).slice(-2);
616
+ const mm = String(now.getMonth() + 1).padStart(2, '0');
617
+ const dd = String(now.getDate()).padStart(2, '0');
618
+ const dateStr = yy + mm + dd;
619
+ const secondsSinceMidnight = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds();
620
+ const timeBlocks = Math.floor(secondsSinceMidnight / 2);
621
+ const timeEncoded = timeBlocks.toString(36).padStart(3, '0');
622
+ const quickId = dateStr + '-' + timeEncoded;
623
+ const branchSlug = slug || 'quick';
624
+ const quickBranchName = config.git.quick_branch_template
625
+ ? config.git.quick_branch_template
626
+ .replace('{num}', quickId)
627
+ .replace('{quick}', quickId)
628
+ .replace('{slug}', branchSlug)
629
+ : null;
630
+ const configExists = existsSync(join(planningDir, 'config.json'));
631
+ const [plannerModel, executorModel, checkerModel, verifierModel] = configExists
632
+ ? await Promise.all([
633
+ getModelAlias('gsd-planner', projectDir),
634
+ getModelAlias('gsd-executor', projectDir),
635
+ getModelAlias('gsd-plan-checker', projectDir),
636
+ getModelAlias('gsd-verifier', projectDir),
637
+ ])
638
+ : ['', '', '', ''];
639
+ const result = {
640
+ planner_model: plannerModel,
641
+ executor_model: executorModel,
642
+ checker_model: checkerModel,
643
+ verifier_model: verifierModel,
644
+ commit_docs: config.commit_docs,
645
+ branch_name: quickBranchName,
646
+ quick_id: quickId,
647
+ slug,
648
+ description,
649
+ date: now.toISOString().split('T')[0],
650
+ timestamp: now.toISOString(),
651
+ quick_dir: '.planning/quick',
652
+ task_dir: slug ? `.planning/quick/${quickId}-${slug}` : null,
653
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
654
+ planning_exists: existsSync(join(projectDir, '.planning')),
655
+ };
656
+ return { data: withProjectRoot(projectDir, result, config) };
657
+ };
658
+ // ─── initResume ───────────────────────────────────────────────────────────
659
+ /**
660
+ * Init handler for resume-project workflow.
661
+ * Port of cmdInitResume from init.cjs lines 506-536.
662
+ */
663
+ export const initResume = async (_args, projectDir) => {
664
+ const config = await loadConfig(projectDir);
665
+ const planningDir = join(projectDir, '.planning');
666
+ let interruptedAgentId = null;
667
+ try {
668
+ interruptedAgentId = readFileSync(join(projectDir, '.planning', 'current-agent-id.txt'), 'utf-8').trim();
669
+ }
670
+ catch { /* intentionally empty */ }
671
+ const result = {
672
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
673
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
674
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
675
+ planning_exists: existsSync(join(projectDir, '.planning')),
676
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
677
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
678
+ project_path: '.planning/PROJECT.md',
679
+ has_interrupted_agent: !!interruptedAgentId,
680
+ interrupted_agent_id: interruptedAgentId,
681
+ commit_docs: config.commit_docs,
682
+ };
683
+ return { data: withProjectRoot(projectDir, result, config) };
684
+ };
685
+ // ─── initVerifyWork ───────────────────────────────────────────────────────
686
+ /**
687
+ * Init handler for verify-work workflow.
688
+ * Port of cmdInitVerifyWork from init.cjs lines 538-586.
689
+ */
690
+ export const initVerifyWork = async (args, projectDir, workstream) => {
691
+ const phase = extractPhaseArg(args);
692
+ if (!phase) {
693
+ return { data: { error: 'phase required for init verify-work' } };
694
+ }
695
+ const config = await loadConfig(projectDir, workstream);
696
+ const { phaseInfo } = await getPhaseInfoForVerifyWork(phase, projectDir, workstream);
697
+ const configExists = existsSync(join(projectDir, '.planning', 'config.json'));
698
+ const [plannerModel, checkerModel] = configExists
699
+ ? await Promise.all([
700
+ getModelAlias('gsd-planner', projectDir),
701
+ getModelAlias('gsd-plan-checker', projectDir),
702
+ ])
703
+ : ['', ''];
704
+ const result = {
705
+ planner_model: plannerModel,
706
+ checker_model: checkerModel,
707
+ commit_docs: config.commit_docs,
708
+ phase_found: !!phaseInfo,
709
+ phase_dir: phaseInfo?.directory ?? null,
710
+ phase_number: phaseInfo?.phase_number ?? null,
711
+ phase_name: phaseInfo?.phase_name ?? null,
712
+ has_verification: phaseInfo?.has_verification || false,
713
+ };
714
+ return { data: withProjectRoot(projectDir, result, config) };
715
+ };
716
+ // ─── initPhaseOp ──────────────────────────────────────────────────────────
717
+ /**
718
+ * Init handler for discuss-phase and similar phase operations.
719
+ * Port of cmdInitPhaseOp from init.cjs lines 588-697.
720
+ */
721
+ export const initPhaseOp = async (args, projectDir, workstream) => {
722
+ const phase = extractPhaseArg(args);
723
+ if (!phase) {
724
+ return { data: { error: 'phase required for init phase-op' } };
725
+ }
726
+ const config = await loadConfig(projectDir);
727
+ const paths = planningPaths(projectDir, workstream);
728
+ const planningDir = paths.planning;
729
+ // findPhase with archived override: if only match is archived, prefer ROADMAP
730
+ const phaseResult = await findPhase([phase], projectDir, workstream);
731
+ let phaseInfo = phaseResult.data;
732
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
733
+ const roadmapPhase = roadmapResult.data;
734
+ // If the only match comes from an archived milestone, prefer current ROADMAP
735
+ if (roadmapPhase?.found && await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
736
+ const phaseName = roadmapPhase.phase_name;
737
+ phaseInfo = {
738
+ found: true,
739
+ directory: null,
740
+ phase_number: roadmapPhase.phase_number,
741
+ phase_name: phaseName,
742
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
743
+ plans: [],
744
+ summaries: [],
745
+ incomplete_plans: [],
746
+ has_research: false,
747
+ has_context: false,
748
+ has_verification: false,
749
+ };
750
+ }
751
+ // Fallback to ROADMAP.md if no directory exists
752
+ if (!phaseInfo || !phaseInfo.found) {
753
+ if (roadmapPhase?.found) {
754
+ const phaseName = roadmapPhase.phase_name;
755
+ phaseInfo = {
756
+ found: true,
757
+ directory: null,
758
+ phase_number: roadmapPhase.phase_number,
759
+ phase_name: phaseName,
760
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
761
+ plans: [],
762
+ summaries: [],
763
+ incomplete_plans: [],
764
+ has_research: false,
765
+ has_context: false,
766
+ has_verification: false,
767
+ };
768
+ }
769
+ }
770
+ const phaseFound = !!(phaseInfo && phaseInfo.found);
771
+ const phaseNumber = phaseInfo?.phase_number || null;
772
+ const phaseName = phaseInfo?.phase_name ?? null;
773
+ const phaseDir = phaseInfo?.directory ?? null;
774
+ const plans = (phaseInfo?.plans || []);
775
+ // #3287: compute the canonical directory name with project_code prefix so
776
+ // the first-touch mkdir in /gsd-discuss-phase stays consistent with phase.add.
777
+ const rawProjectCode = config.project_code || '';
778
+ assertSafeProjectCode(rawProjectCode);
779
+ const expectedPhaseDirName = phaseDir
780
+ ? null // directory already exists — no need to create
781
+ : computeExpectedPhaseDirName(phaseNumber, phaseName, rawProjectCode);
782
+ const expectedPhaseDir = expectedPhaseDirName
783
+ ? toPosixPath(relative(projectDir, join(paths.phases, expectedPhaseDirName)))
784
+ : null;
785
+ const result = {
786
+ commit_docs: config.commit_docs,
787
+ // #2997: secret config keys (brave_search, firecrawl, exa_search) may be
788
+ // either boolean availability flags OR string API keys depending on how the
789
+ // user configured them. Pass booleans through; mask string values so the
790
+ // init bundle never echoes plaintext credentials. Mirrors the masking added
791
+ // to config-get/config-set in the same fix.
792
+ brave_search: typeof config.brave_search === 'string' ? maskIfSecret('brave_search', config.brave_search) : config.brave_search,
793
+ firecrawl: typeof config.firecrawl === 'string' ? maskIfSecret('firecrawl', config.firecrawl) : config.firecrawl,
794
+ exa_search: typeof config.exa_search === 'string' ? maskIfSecret('exa_search', config.exa_search) : config.exa_search,
795
+ phase_found: phaseFound,
796
+ phase_dir: phaseDir,
797
+ expected_phase_dir: expectedPhaseDir,
798
+ phase_number: phaseNumber,
799
+ phase_name: phaseName,
800
+ phase_slug: phaseInfo?.phase_slug ?? null,
801
+ padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
802
+ has_research: phaseInfo?.has_research || false,
803
+ has_context: phaseInfo?.has_context || false,
804
+ has_plans: plans.length > 0,
805
+ has_verification: phaseInfo?.has_verification || false,
806
+ has_reviews: phaseInfo?.has_reviews || false,
807
+ plan_count: plans.length,
808
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
809
+ planning_exists: existsSync(planningDir),
810
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
811
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
812
+ requirements_path: toPosixPath(relative(projectDir, join(planningDir, 'REQUIREMENTS.md'))),
813
+ };
814
+ // Add artifact paths if phase directory exists
815
+ if (phaseDir) {
816
+ const phaseDirFull = join(projectDir, phaseDir);
817
+ try {
818
+ const files = readdirSync(phaseDirFull);
819
+ const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
820
+ if (contextFile)
821
+ result.context_path = toPosixPath(join(phaseDir, contextFile));
822
+ const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
823
+ if (researchFile)
824
+ result.research_path = toPosixPath(join(phaseDir, researchFile));
825
+ const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
826
+ if (verificationFile)
827
+ result.verification_path = toPosixPath(join(phaseDir, verificationFile));
828
+ const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
829
+ if (uatFile)
830
+ result.uat_path = toPosixPath(join(phaseDir, uatFile));
831
+ const reviewsFile = files.find(f => f.endsWith('-REVIEWS.md') || f === 'REVIEWS.md');
832
+ if (reviewsFile)
833
+ result.reviews_path = toPosixPath(join(phaseDir, reviewsFile));
834
+ }
835
+ catch { /* intentionally empty */ }
836
+ }
837
+ return { data: withProjectRoot(projectDir, result, config) };
838
+ };
839
+ // ─── initTodos ────────────────────────────────────────────────────────────
840
+ /**
841
+ * Init handler for check-todos and add-todo workflows.
842
+ * Port of cmdInitTodos from init.cjs lines 699-756.
843
+ */
844
+ export const initTodos = async (args, projectDir) => {
845
+ const area = args[0] || null;
846
+ const config = await loadConfig(projectDir);
847
+ const planningDir = join(projectDir, '.planning');
848
+ const now = new Date();
849
+ const pendingDir = join(planningDir, 'todos', 'pending');
850
+ let count = 0;
851
+ const todos = [];
852
+ try {
853
+ const files = readdirSync(pendingDir).filter(f => f.endsWith('.md'));
854
+ for (const file of files) {
855
+ try {
856
+ const content = readFileSync(join(pendingDir, file), 'utf-8');
857
+ const createdMatch = content.match(/^created:\s*(.+)$/m);
858
+ const titleMatch = content.match(/^title:\s*(.+)$/m);
859
+ const areaMatch = content.match(/^area:\s*(.+)$/m);
860
+ const todoArea = areaMatch ? areaMatch[1].trim() : 'general';
861
+ if (area && todoArea !== area)
862
+ continue;
863
+ count++;
864
+ todos.push({
865
+ file,
866
+ created: createdMatch ? createdMatch[1].trim() : 'unknown',
867
+ title: titleMatch ? titleMatch[1].trim() : 'Untitled',
868
+ area: todoArea,
869
+ path: toPosixPath(relative(projectDir, join(pendingDir, file))),
870
+ });
871
+ }
872
+ catch { /* intentionally empty */ }
873
+ }
874
+ }
875
+ catch { /* intentionally empty */ }
876
+ const result = {
877
+ commit_docs: config.commit_docs,
878
+ date: now.toISOString().split('T')[0],
879
+ timestamp: now.toISOString(),
880
+ todo_count: count,
881
+ todos,
882
+ area_filter: area,
883
+ pending_dir: toPosixPath(relative(projectDir, join(planningDir, 'todos', 'pending'))),
884
+ completed_dir: toPosixPath(relative(projectDir, join(planningDir, 'todos', 'completed'))),
885
+ planning_exists: existsSync(planningDir),
886
+ todos_dir_exists: existsSync(join(planningDir, 'todos')),
887
+ pending_dir_exists: existsSync(pendingDir),
888
+ };
889
+ return { data: withProjectRoot(projectDir, result, config) };
890
+ };
891
+ // ─── initMilestoneOp ─────────────────────────────────────────────────────
892
+ /**
893
+ * Init handler for complete-milestone and audit-milestone workflows.
894
+ * Port of cmdInitMilestoneOp from init.cjs lines 758-817.
895
+ */
896
+ export const initMilestoneOp = async (_args, projectDir, workstream) => {
897
+ const config = await loadConfig(projectDir);
898
+ const paths = planningPaths(projectDir, workstream);
899
+ const planningDir = paths.planning;
900
+ const milestone = await getMilestoneInfo(projectDir, workstream);
901
+ const phasesDir = join(planningDir, 'phases');
902
+ let phaseCount = 0;
903
+ let completedPhases = 0;
904
+ // Bug #2633 — ROADMAP.md (current milestone section) is the authority for
905
+ // phase counts, NOT the on-disk `.planning/phases/` directory. After
906
+ // `phases clear` between milestones, on-disk dirs will be a subset of the
907
+ // roadmap until each phase is materialized, and reading from disk causes
908
+ // `all_phases_complete: true` to fire as soon as the materialized subset
909
+ // gets summaries — even though the roadmap has phases still to do.
910
+ let roadmapPhaseNumbers = [];
911
+ try {
912
+ const { readFile } = await import('node:fs/promises');
913
+ const roadmapRaw = await readFile(join(planningDir, 'ROADMAP.md'), 'utf-8');
914
+ const currentSection = await extractCurrentMilestone(roadmapRaw, projectDir, workstream);
915
+ roadmapPhaseNumbers = extractPhasesFromSection(currentSection).map(p => p.number);
916
+ }
917
+ catch { /* intentionally empty */ }
918
+ // Build the on-disk index keyed by the canonical full phase token (e.g.
919
+ // "3", "3A", "3.1") so distinct tokens with the same integer prefix never
920
+ // collide. Roadmap writes "Phase 3", "Phase 3A", and "Phase 3.1" as
921
+ // distinct phases and disk dirs preserve those tokens.
922
+ // Canonicalize a phase token by stripping leading zeros from the integer
923
+ // head while preserving any [A-Z]? suffix and dotted segments. So "03" →
924
+ // "3", "03A" → "3A", "03.1" → "3.1", "3A" → "3A". This lets disk dirs that
925
+ // pad ("03-alpha") match roadmap tokens ("Phase 3") without ever collapsing
926
+ // distinct tokens like "3" / "3A" / "3.1" into the same bucket.
927
+ const canonicalizePhase = (tok) => {
928
+ const m = tok.match(/^(\d+)([A-Z]?(?:\.\d+)*)$/);
929
+ return m ? String(parseInt(m[1], 10)) + m[2] : tok;
930
+ };
931
+ const diskPhaseDirs = new Map();
932
+ try {
933
+ const entries = readdirSync(phasesDir, { withFileTypes: true });
934
+ for (const e of entries) {
935
+ if (!e.isDirectory())
936
+ continue;
937
+ const m = e.name.match(/^(\d+[A-Z]?(?:\.\d+)*)/);
938
+ if (!m)
939
+ continue;
940
+ diskPhaseDirs.set(canonicalizePhase(m[1]), e.name);
941
+ }
942
+ }
943
+ catch { /* intentionally empty */ }
944
+ if (roadmapPhaseNumbers.length > 0) {
945
+ phaseCount = roadmapPhaseNumbers.length;
946
+ for (const num of roadmapPhaseNumbers) {
947
+ const dirName = diskPhaseDirs.get(canonicalizePhase(num));
948
+ if (!dirName)
949
+ continue;
950
+ try {
951
+ const phaseFiles = readdirSync(join(phasesDir, dirName));
952
+ const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
953
+ if (hasSummary)
954
+ completedPhases++;
955
+ }
956
+ catch { /* intentionally empty */ }
957
+ }
958
+ }
959
+ else {
960
+ // Fallback: no parseable ROADMAP (e.g. brand-new project). Preserve the
961
+ // legacy on-disk-count behavior so existing no-roadmap tests still pass.
962
+ try {
963
+ const entries = readdirSync(phasesDir, { withFileTypes: true });
964
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
965
+ phaseCount = dirs.length;
966
+ for (const dir of dirs) {
967
+ try {
968
+ const phaseFiles = readdirSync(join(phasesDir, dir));
969
+ const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
970
+ if (hasSummary)
971
+ completedPhases++;
972
+ }
973
+ catch { /* intentionally empty */ }
974
+ }
975
+ }
976
+ catch { /* intentionally empty */ }
977
+ }
978
+ const archiveDir = join(planningDir, 'archive');
979
+ let archivedMilestones = [];
980
+ try {
981
+ archivedMilestones = readdirSync(archiveDir, { withFileTypes: true })
982
+ .filter(e => e.isDirectory())
983
+ .map(e => e.name);
984
+ }
985
+ catch { /* intentionally empty */ }
986
+ const result = {
987
+ commit_docs: config.commit_docs,
988
+ milestone_version: milestone.version,
989
+ milestone_name: milestone.name,
990
+ milestone_slug: generateSlugInternal(milestone.name),
991
+ phase_count: phaseCount,
992
+ completed_phases: completedPhases,
993
+ all_phases_complete: phaseCount > 0 && phaseCount === completedPhases,
994
+ archived_milestones: archivedMilestones,
995
+ archive_count: archivedMilestones.length,
996
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
997
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
998
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
999
+ archive_exists: existsSync(archiveDir),
1000
+ phases_dir_exists: existsSync(phasesDir),
1001
+ };
1002
+ return { data: withProjectRoot(projectDir, result, config) };
1003
+ };
1004
+ // ─── initMapCodebase ──────────────────────────────────────────────────────
1005
+ /**
1006
+ * Init handler for map-codebase workflow.
1007
+ * Port of cmdInitMapCodebase from init.cjs lines 819-852.
1008
+ */
1009
+ export const initMapCodebase = async (_args, projectDir) => {
1010
+ const config = await loadConfig(projectDir);
1011
+ const now = new Date();
1012
+ const codebaseDir = join(projectDir, '.planning', 'codebase');
1013
+ let existingMaps = [];
1014
+ try {
1015
+ existingMaps = readdirSync(codebaseDir).filter(f => f.endsWith('.md'));
1016
+ }
1017
+ catch { /* intentionally empty */ }
1018
+ const mapperModel = await getModelAlias('gsd-codebase-mapper', projectDir);
1019
+ const result = {
1020
+ mapper_model: mapperModel,
1021
+ commit_docs: config.commit_docs,
1022
+ search_gitignored: config.search_gitignored,
1023
+ parallelization: config.parallelization,
1024
+ // subagent_timeout lives at workflow.subagent_timeout per the canonical
1025
+ // Configuration manifest (sdk/shared/config-defaults.manifest.json). Reading
1026
+ // the top-level config.subagent_timeout returned undefined, so the workflow
1027
+ // step that consumes this value had to invent its own fallback. Default to
1028
+ // 300000 (5 min) per the manifest. (#1472)
1029
+ subagent_timeout: config.workflow?.subagent_timeout ?? 300000,
1030
+ date: now.toISOString().split('T')[0],
1031
+ timestamp: now.toISOString(),
1032
+ codebase_dir: '.planning/codebase',
1033
+ existing_maps: existingMaps,
1034
+ has_maps: existingMaps.length > 0,
1035
+ planning_exists: pathExists(projectDir, '.planning'),
1036
+ codebase_dir_exists: pathExists(projectDir, '.planning/codebase'),
1037
+ };
1038
+ return { data: withProjectRoot(projectDir, result, config) };
1039
+ };
1040
+ // ─── initNewWorkspace ─────────────────────────────────────────────────────
1041
+ /**
1042
+ * Init handler for new-workspace workflow.
1043
+ * Port of cmdInitNewWorkspace from init.cjs lines 1311-1335.
1044
+ * T-14-01: Validates workspace name rejects path separators.
1045
+ */
1046
+ export const initNewWorkspace = async (_args, projectDir) => {
1047
+ const home = process.env.HOME || homedir();
1048
+ const defaultBase = join(home, 'gsd-workspaces');
1049
+ // Detect child git repos (one level deep)
1050
+ const childRepos = [];
1051
+ try {
1052
+ const entries = readdirSync(projectDir, { withFileTypes: true });
1053
+ for (const entry of entries) {
1054
+ if (!entry.isDirectory() || entry.name.startsWith('.'))
1055
+ continue;
1056
+ const fullPath = join(projectDir, entry.name);
1057
+ if (existsSync(join(fullPath, '.git'))) {
1058
+ let hasUncommitted = false;
1059
+ try {
1060
+ const status = execSync('git status --porcelain', { cwd: fullPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1061
+ hasUncommitted = status.trim().length > 0;
1062
+ }
1063
+ catch { /* best-effort */ }
1064
+ childRepos.push({ name: entry.name, path: fullPath, has_uncommitted: hasUncommitted });
1065
+ }
1066
+ }
1067
+ }
1068
+ catch { /* intentionally empty */ }
1069
+ let worktreeAvailable = false;
1070
+ try {
1071
+ execSync('git --version', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1072
+ worktreeAvailable = true;
1073
+ }
1074
+ catch { /* no git */ }
1075
+ const result = {
1076
+ default_workspace_base: defaultBase,
1077
+ child_repos: childRepos,
1078
+ child_repo_count: childRepos.length,
1079
+ worktree_available: worktreeAvailable,
1080
+ is_git_repo: pathExists(projectDir, '.git'),
1081
+ cwd_repo_name: basename(projectDir),
1082
+ };
1083
+ return { data: withProjectRoot(projectDir, result) };
1084
+ };
1085
+ // ─── initListWorkspaces ───────────────────────────────────────────────────
1086
+ /**
1087
+ * Init handler for list-workspaces workflow.
1088
+ * Port of cmdInitListWorkspaces from init.cjs lines 1337-1381.
1089
+ */
1090
+ export const initListWorkspaces = async (_args, _projectDir) => {
1091
+ const home = process.env.HOME || homedir();
1092
+ const defaultBase = join(home, 'gsd-workspaces');
1093
+ const workspaces = [];
1094
+ if (existsSync(defaultBase)) {
1095
+ let entries = [];
1096
+ try {
1097
+ entries = readdirSync(defaultBase, { withFileTypes: true });
1098
+ }
1099
+ catch {
1100
+ entries = [];
1101
+ }
1102
+ for (const entry of entries) {
1103
+ if (!entry.isDirectory())
1104
+ continue;
1105
+ const wsPath = join(defaultBase, String(entry.name));
1106
+ const manifestPath = join(wsPath, 'WORKSPACE.md');
1107
+ if (!existsSync(manifestPath))
1108
+ continue;
1109
+ let repoCount = 0;
1110
+ let strategy = 'unknown';
1111
+ try {
1112
+ const manifest = readFileSync(manifestPath, 'utf8');
1113
+ const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1114
+ if (strategyMatch)
1115
+ strategy = strategyMatch[1].trim();
1116
+ const tableRows = manifest.split('\n').filter(l => l.match(/^\|\s*\w/) && !l.includes('Repo') && !l.includes('---'));
1117
+ repoCount = tableRows.length;
1118
+ }
1119
+ catch { /* best-effort */ }
1120
+ const hasProject = existsSync(join(wsPath, '.planning', 'PROJECT.md'));
1121
+ workspaces.push({
1122
+ name: entry.name,
1123
+ path: wsPath,
1124
+ repo_count: repoCount,
1125
+ strategy,
1126
+ has_project: hasProject,
1127
+ });
1128
+ }
1129
+ }
1130
+ const result = {
1131
+ workspace_base: defaultBase,
1132
+ workspaces,
1133
+ workspace_count: workspaces.length,
1134
+ };
1135
+ return { data: result };
1136
+ };
1137
+ // ─── initRemoveWorkspace ──────────────────────────────────────────────────
1138
+ /**
1139
+ * Init handler for remove-workspace workflow.
1140
+ * Port of cmdInitRemoveWorkspace from init.cjs lines 1383-1443.
1141
+ * T-14-01: Validates workspace name rejects path separators and '..' sequences.
1142
+ */
1143
+ export const initRemoveWorkspace = async (args, _projectDir) => {
1144
+ const name = args[0];
1145
+ if (!name) {
1146
+ // Throw so the CLI dispatcher projects a non-zero exit + writes the message
1147
+ // to stderr — returning `{ data: { error } }` was treated as success by
1148
+ // the CLI output path, hiding the validation failure from callers.
1149
+ throw new GSDError('workspace name required for init remove-workspace', ErrorClassification.Validation);
1150
+ }
1151
+ // T-14-01: Reject path traversal attempts
1152
+ if (name.includes('/') || name.includes('\\') || name.includes('..')) {
1153
+ throw new GSDError(`Invalid workspace name: ${name} (path separators not allowed)`, ErrorClassification.Validation);
1154
+ }
1155
+ const home = process.env.HOME || homedir();
1156
+ const defaultBase = join(home, 'gsd-workspaces');
1157
+ const wsPath = join(defaultBase, name);
1158
+ const manifestPath = join(wsPath, 'WORKSPACE.md');
1159
+ if (!existsSync(wsPath)) {
1160
+ throw new GSDError(`Workspace not found: ${wsPath}`, ErrorClassification.Validation);
1161
+ }
1162
+ const repos = [];
1163
+ let strategy = 'unknown';
1164
+ if (existsSync(manifestPath)) {
1165
+ try {
1166
+ const manifest = readFileSync(manifestPath, 'utf8');
1167
+ const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1168
+ if (strategyMatch)
1169
+ strategy = strategyMatch[1].trim();
1170
+ const lines = manifest.split('\n');
1171
+ for (const line of lines) {
1172
+ const match = line.match(/^\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|$/);
1173
+ if (match && match[1] !== 'Repo' && !match[1].includes('---')) {
1174
+ repos.push({ name: match[1], source: match[2], branch: match[3], strategy: match[4] });
1175
+ }
1176
+ }
1177
+ }
1178
+ catch { /* best-effort */ }
1179
+ }
1180
+ // Check for uncommitted changes in workspace repos
1181
+ const dirtyRepos = [];
1182
+ for (const repo of repos) {
1183
+ const repoPath = join(wsPath, repo.name);
1184
+ if (!existsSync(repoPath))
1185
+ continue;
1186
+ try {
1187
+ const status = execSync('git status --porcelain', { cwd: repoPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1188
+ if (status.trim().length > 0) {
1189
+ dirtyRepos.push(repo.name);
1190
+ }
1191
+ }
1192
+ catch { /* best-effort */ }
1193
+ }
1194
+ const result = {
1195
+ workspace_name: name,
1196
+ workspace_path: wsPath,
1197
+ has_manifest: existsSync(manifestPath),
1198
+ strategy,
1199
+ repos,
1200
+ repo_count: repos.length,
1201
+ dirty_repos: dirtyRepos,
1202
+ has_dirty_repos: dirtyRepos.length > 0,
1203
+ };
1204
+ return { data: result };
1205
+ };
1206
+ // ─── initIngestDocs ───────────────────────────────────────────────────────
1207
+ /**
1208
+ * Init handler for ingest-docs workflow.
1209
+ * Mirrors `initResume` shape but without current-agent-id lookup — the
1210
+ * ingest-docs workflow reads `project_exists`, `planning_exists`, `has_git`,
1211
+ * and `project_path` to branch between new-project vs merge-milestone modes.
1212
+ */
1213
+ export const initIngestDocs = async (_args, projectDir) => {
1214
+ const config = await loadConfig(projectDir);
1215
+ const gitInfo = gitWorktreeInfo(projectDir);
1216
+ const result = {
1217
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
1218
+ planning_exists: pathExists(projectDir, '.planning'),
1219
+ // Bug #3491: detect parent worktree to avoid nested .git init.
1220
+ has_git: gitInfo.inside,
1221
+ git_worktree_root: gitInfo.worktreeRoot,
1222
+ in_nested_subdir: detectNestedSubdir(projectDir, gitInfo),
1223
+ project_path: '.planning/PROJECT.md',
1224
+ commit_docs: config.commit_docs,
1225
+ };
1226
+ return { data: withProjectRoot(projectDir, result, config) };
1227
+ };
1228
+ //# sourceMappingURL=init.js.map