@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,982 @@
1
+ /**
2
+ * Roadmap query handlers — ROADMAP.md analysis and phase lookup.
3
+ *
4
+ * Ported from get-shit-done/bin/lib/roadmap.cjs and core.cjs.
5
+ * Provides roadmap.analyze (multi-pass parsing with disk correlation)
6
+ * and roadmap.get-phase (single phase section extraction).
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { roadmapAnalyze, roadmapGetPhase } from './roadmap.js';
11
+ *
12
+ * const analysis = await roadmapAnalyze([], '/project');
13
+ * // { data: { phases: [...], phase_count: 6, progress_percent: 50, ... } }
14
+ *
15
+ * const phase = await roadmapGetPhase(['10'], '/project');
16
+ * // { data: { found: true, phase_number: '10', phase_name: 'Read-Only Queries', ... } }
17
+ * ```
18
+ */
19
+ import { existsSync } from 'node:fs';
20
+ import { readFile, writeFile, readdir } from 'node:fs/promises';
21
+ import { join } from 'node:path';
22
+ import { GSDError, ErrorClassification } from '../errors.js';
23
+ import { resolveGsdToolsPath } from '../sdk-package-compatibility.js';
24
+ import { escapeRegex, normalizePhaseName, phaseTokenMatches, planningPaths, } from './helpers.js';
25
+ // ─── Exported helpers ─────────────────────────────────────────────────────
26
+ /**
27
+ * Strip <details>...</details> blocks from content (shipped milestones).
28
+ *
29
+ * Port of stripShippedMilestones from core.cjs line 1082-1084.
30
+ */
31
+ export function stripShippedMilestones(content) {
32
+ // Pattern 1: <details>...</details> blocks (explicit collapse).
33
+ // <details\b[^>]*> tolerates attributes (e.g. <details open>, <details class="…">).
34
+ // Symmetry with extractCurrentMilestone()'s <details>-aware fallback (#2641):
35
+ // both functions must agree on what counts as a <details> opening tag, or
36
+ // shipped content wrapped in attributed tags would leak through here while
37
+ // the active-milestone anchor in extractCurrentMilestone() correctly fires.
38
+ let result = content.replace(/<details\b[^>]*>[\s\S]*?<\/details>/gi, '');
39
+ // Pattern 2: inline milestone headings marked as shipped.
40
+ // Keep aligned with heading levels accepted by extractCurrentMilestone() (## and ###).
41
+ const sections = result.split(/(?=^#{2,3}\s)/m);
42
+ result = sections.filter(s => !/^#{2,3}\s[^\n]*✅\s*SHIPPED\b/im.test(s)).join('');
43
+ return result;
44
+ }
45
+ /**
46
+ * Read milestone + name from STATE.md frontmatter when ROADMAP does not encode them.
47
+ */
48
+ async function parseMilestoneFromState(projectDir, workstream) {
49
+ try {
50
+ const stateRaw = await readFile(planningPaths(projectDir, workstream).state, 'utf-8');
51
+ const vm = stateRaw.match(/^milestone:\s*(.+)$/m);
52
+ if (!vm)
53
+ return null;
54
+ const version = vm[1].trim().replace(/^["']|["']$/g, '');
55
+ const nm = stateRaw.match(/^milestone_name:\s*(.+)$/m);
56
+ const name = nm ? nm[1].trim().replace(/^["']|["']$/g, '') : 'milestone';
57
+ return { version, name };
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * Get milestone version and name from ROADMAP.md (and optionally STATE.md).
65
+ *
66
+ * Port of getMilestoneInfo from core.cjs lines 1367-1402, extended for:
67
+ * - 🟡 in-flight marker (same list shape as 🚧)
68
+ * - milestone bullets `**vX.Y Title**` before `## Phases` (last = current when listed in semver order)
69
+ * - STATE.md frontmatter when ROADMAP has no parseable milestone
70
+ * - **last** bare `vX.Y` fallback (first match was often v1.0 from the shipped list)
71
+ *
72
+ * @param projectDir - Project root directory
73
+ * @returns Object with version and name
74
+ */
75
+ export async function getMilestoneInfo(projectDir, workstream) {
76
+ try {
77
+ // Priority 1: STATE.md frontmatter (authoritative for version; name only when real)
78
+ const fromState = await parseMilestoneFromState(projectDir, workstream);
79
+ const stateVersion = fromState?.version ?? null;
80
+ const stateName = fromState && fromState.name !== 'milestone' ? fromState.name : null;
81
+ if (stateVersion && stateName) {
82
+ return { version: stateVersion, name: stateName };
83
+ }
84
+ // STATE.md has a version but no real name — fall through to ROADMAP for the name,
85
+ // then override the version with the authoritative STATE.md value.
86
+ const roadmap = await readFile(planningPaths(projectDir, workstream).roadmap, 'utf-8');
87
+ // List-format: construction / blocked (legacy emoji)
88
+ const barricadeMatch = roadmap.match(/🚧\s*\*\*v(\d+(?:\.\d+)+)\s+([^*]+)\*\*/);
89
+ if (barricadeMatch) {
90
+ return { version: stateVersion ?? 'v' + barricadeMatch[1], name: barricadeMatch[2].trim() };
91
+ }
92
+ // List-format: in flight / active (GSD ROADMAP template uses 🟡 for current milestone)
93
+ const inFlightMatch = roadmap.match(/🟡\s*\*\*v(\d+(?:\.\d+)+)\s+([^*]+)\*\*/);
94
+ if (inFlightMatch) {
95
+ return { version: stateVersion ?? 'v' + inFlightMatch[1], name: inFlightMatch[2].trim() };
96
+ }
97
+ // Heading-format — strip shipped <details> blocks first
98
+ const cleaned = stripShippedMilestones(roadmap);
99
+ const headingMatch = cleaned.match(/##\s+.*v(\d+(?:\.\d+)+)[:\s]+([^\n(]+)/);
100
+ if (headingMatch) {
101
+ return { version: stateVersion ?? 'v' + headingMatch[1], name: headingMatch[2].trim() };
102
+ }
103
+ // Milestone bullet list (## Milestones … ## Phases): use last **vX.Y Title** — typically the current row
104
+ const beforePhases = roadmap.split(/^##\s+Phases\b/m)[0] ?? roadmap;
105
+ const boldMatches = [...beforePhases.matchAll(/\*\*v(\d+(?:\.\d+)+)\s+([^*]+)\*\*/g)];
106
+ if (boldMatches.length > 0) {
107
+ const last = boldMatches[boldMatches.length - 1];
108
+ return { version: stateVersion ?? 'v' + last[1], name: last[2].trim() };
109
+ }
110
+ const allBare = [...cleaned.matchAll(/\bv(\d+(?:\.\d+)+)\b/g)];
111
+ if (allBare.length > 0) {
112
+ const lastBare = allBare[allBare.length - 1];
113
+ return { version: stateVersion ?? lastBare[0], name: 'milestone' };
114
+ }
115
+ return { version: stateVersion ?? 'v1.0', name: 'milestone' };
116
+ }
117
+ catch {
118
+ const fromState = await parseMilestoneFromState(projectDir, workstream);
119
+ if (fromState)
120
+ return fromState;
121
+ return { version: 'v1.0', name: 'milestone' };
122
+ }
123
+ }
124
+ /**
125
+ * Extract the current milestone section from ROADMAP.md.
126
+ *
127
+ * Two anchoring strategies, tried in order:
128
+ * 1. Markdown heading containing the active version (`^#{1,3}\s+.*vX.Y…`).
129
+ * 2. `<details><summary>vX.Y…</summary>…</details>` block (the GitHub-friendly
130
+ * collapse pattern; see #2641). When this fallback fires, the captured
131
+ * `<summary>` text is synthesized as a `##` heading prepended to the
132
+ * returned slice so downstream consumers that scan for milestone headings
133
+ * (e.g. the `data.milestones` loop in `roadmapAnalyze`) still see an
134
+ * active-milestone anchor.
135
+ *
136
+ * If neither strategy matches the active version, falls through to
137
+ * `stripShippedMilestones(content)`.
138
+ *
139
+ * Originally ported from core.cjs lines 1102-1170; the TS implementation has
140
+ * since diverged (Backlog-leak fix #2422, phase-vX.Y truncation fix #2619,
141
+ * fenced-code-block tracking #2787, `<details><summary>` fallback #2641).
142
+ *
143
+ * @param content - Full ROADMAP.md content
144
+ * @param projectDir - Working directory for reading STATE.md
145
+ * @returns Content scoped to current milestone
146
+ */
147
+ export async function extractCurrentMilestone(content, projectDir, workstream) {
148
+ // Get version from STATE.md frontmatter.
149
+ // Strip optional surrounding YAML quotes (e.g. `milestone: "v0.9"`) for parity
150
+ // with parseMilestoneFromState() above and getMilestoneInfo()'s STATE.md path.
151
+ // Without this, a quoted version yields `escapedVersion = '\\"v0\\.9\\"'`
152
+ // which matches neither markdown headings nor <summary> text, falling
153
+ // through to stripShippedMilestones() — and reintroducing the same archived-
154
+ // milestone misrouting this fallback addresses.
155
+ let version = null;
156
+ try {
157
+ const stateRaw = await readFile(planningPaths(projectDir, workstream).state, 'utf-8');
158
+ const milestoneMatch = stateRaw.match(/^milestone:\s*(.+)/m);
159
+ if (milestoneMatch) {
160
+ version = milestoneMatch[1].trim().replace(/^["']|["']$/g, '');
161
+ }
162
+ }
163
+ catch { /* intentionally empty */ }
164
+ // Fallback: derive from ROADMAP in-progress marker
165
+ if (!version) {
166
+ const inProgressMatch = content.match(/(?:🚧|🟡)\s*\*\*v(\d+(?:\.\d+)+)\s/);
167
+ if (inProgressMatch) {
168
+ version = 'v' + inProgressMatch[1];
169
+ }
170
+ }
171
+ if (!version)
172
+ return stripShippedMilestones(content);
173
+ // Find section matching this version
174
+ const escapedVersion = escapeRegex(version);
175
+ const sectionPattern = new RegExp(`(^#{1,3}\\s+.*${escapedVersion}(?![\\d.])[^\\n]*)`, 'mi');
176
+ const sectionMatch = content.match(sectionPattern);
177
+ if (!sectionMatch || sectionMatch.index === undefined) {
178
+ // Fallback: <details><summary> matching the active version (issue #2641).
179
+ //
180
+ // Many projects (GitHub-friendly collapse pattern) wrap the active
181
+ // milestone's phase details inside a collapsible block whose <summary>
182
+ // names the version, e.g.:
183
+ //
184
+ // <details>
185
+ // <summary>v0.9 Local-First Bus (active) — Phase Details</summary>
186
+ // ### Phase 1: ...
187
+ // </details>
188
+ //
189
+ // The markdown-heading lookup above misses this because <summary> is HTML,
190
+ // not a heading. Without this fallback, control falls through to
191
+ // stripShippedMilestones() which removes ALL <details> blocks
192
+ // indiscriminately — including the active milestone's — causing
193
+ // roadmapGetPhase() to return {found:false} for phases that ARE in the
194
+ // active ROADMAP. The init.phase-op safety guard then misfires and can
195
+ // route phase lookups into archived milestones.
196
+ //
197
+ // Regex anatomy:
198
+ // <details\b[^>]*> tolerate attributes (e.g. <details open>)
199
+ // \s*<summary\b[^>]*> tolerate attributes on <summary>
200
+ // ((?:(?!</summary>).)*? non-greedy summary capture; tolerates
201
+ // ${escapedVersion} inline HTML in the summary text
202
+ // (?![\d.]) non-version-character lookahead — prevents
203
+ // `v0.1` from substring-matching `v0.10`
204
+ // (?:(?!</summary>).)*)
205
+ // </summary> end of summary
206
+ // ([\s\S]*?)</details> lazy body capture to the FIRST </details>
207
+ //
208
+ // Contract: any consumer that scans the returned slice for milestone
209
+ // headings (e.g. /##\s*.*vX.Y/) sees the active milestone's anchor. We
210
+ // synthesize that heading from the captured <summary> text rather than
211
+ // returning the body alone.
212
+ //
213
+ // Hardening guards:
214
+ // - Nested <details>: the lazy quantifier truncates at the inner
215
+ // </details>, silently losing trailing phases. Detect and fall through
216
+ // to stripShippedMilestones() instead of returning truncated content.
217
+ // - Empty body: a <details> block with no body would synthesize a heading
218
+ // with nothing under it. Treat as no-match.
219
+ // - Summary sanitization: strip inline HTML (e.g. <em>active</em>) and
220
+ // leading `#` tokens before promoting to a `##` heading, so the result
221
+ // is a single well-formed markdown heading.
222
+ const detailsPattern = new RegExp(`<details\\b[^>]*>\\s*<summary\\b[^>]*>` +
223
+ `((?:(?!</summary>).)*?${escapedVersion}(?![\\d.])(?:(?!</summary>).)*)` +
224
+ `</summary>([\\s\\S]*?)</details>`, 'i');
225
+ const detailsMatch = content.match(detailsPattern);
226
+ if (detailsMatch &&
227
+ detailsMatch[2].trim() && // empty-body guard
228
+ !detailsMatch[2].includes('<details') // nested-<details> guard
229
+ ) {
230
+ const summary = detailsMatch[1]
231
+ .replace(/<[^>]+>/g, '') // strip inline HTML
232
+ .replace(/^#+\s*/, '') // strip leading `#`
233
+ .trim();
234
+ const body = detailsMatch[2];
235
+ return `## ${summary}\n${body}`;
236
+ }
237
+ return stripShippedMilestones(content);
238
+ }
239
+ const sectionStart = sectionMatch.index;
240
+ // Find end: next milestone heading at same or higher level, or EOF.
241
+ // Skip headings that belong to the SAME version (e.g. "## v2.0 Phase Details").
242
+ const headingLevelMatch = sectionMatch[1].match(/^(#{1,3})\s/);
243
+ const headingLevel = headingLevelMatch ? headingLevelMatch[1].length : 2;
244
+ const restContent = content.slice(sectionStart + sectionMatch[0].length);
245
+ // Extract current version so same-version sub-headings are not treated as boundaries.
246
+ // Capture full semver (major.minor.patch) so v2.0.1 is not collapsed to "2.0".
247
+ const currentVersionMatch = version ? version.match(/v(\d+(?:\.\d+)+)/i) : null;
248
+ const currentVersionStr = currentVersionMatch ? currentVersionMatch[1] : '';
249
+ // Exclude phase headings (e.g. "### Phase 12: v1.0 Tech-Debt Closure") from
250
+ // being treated as milestone boundaries just because they mention vX.Y in
251
+ // the title. Phase headings always start with the literal `Phase `. See #2619.
252
+ const nextMilestoneRegex = new RegExp(`^#{1,${headingLevel}}\\s+(?!Phase\\s+\\S)(?:.*v(\\d+(?:\\.\\d+)+)[^\\n]*|.*(?:✅|📋|🚧|🟡))`,
253
+ // `i` flag ensures the `(?!Phase\s+\S)` lookahead matches PHASE/phase too
254
+ // (CodeRabbit follow-up on #2619).
255
+ 'gmi');
256
+ let sectionEnd = content.length;
257
+ let m;
258
+ while ((m = nextMilestoneRegex.exec(restContent)) !== null) {
259
+ const matchedVersion = m[1];
260
+ // Skip headings that reference the same version (e.g. "## v2.0 Phase Details").
261
+ if (matchedVersion && currentVersionStr && matchedVersion === currentVersionStr)
262
+ continue;
263
+ // Bug #2787: skip "heading-like" lines that sit inside a fenced code
264
+ // block. GFM fences toggle on a line starting with ``` or ~~~ (with
265
+ // optional info string); the closing fence must be the same char with
266
+ // no info string. Walk forward from the start of restContent up to
267
+ // the match index, toggling fenceChar. If we're inside a fence at the
268
+ // match, ignore this match and continue scanning. Without this, a
269
+ // line like `# Ops runbook — v1.0 compat` inside ```bash truncates the
270
+ // milestone slice and hides every phase that follows.
271
+ if (isInsideFencedCodeBlock(restContent, m.index))
272
+ continue;
273
+ sectionEnd = sectionStart + sectionMatch[0].length + m.index;
274
+ break;
275
+ }
276
+ // Issue #3493: a generic, non-version-prefixed `## Phase Details` (or
277
+ // `### Phase Details`) heading sometimes sits AFTER a planned-milestone
278
+ // sibling (e.g. `### 📋 v2.1+ (Planned)`) in document order but holds the
279
+ // detail bodies (`### Phase N: ...`) for the *active* milestone. Issue #2422
280
+ // / PR #2455 handled the version-prefixed variant `## v2.0 Phase Details`
281
+ // via the same-version `continue` above; this branch handles the generic-
282
+ // label variant. When such a heading is found after the initial sectionEnd,
283
+ // append the Phase Details block to the returned slice (skipping the
284
+ // intervening planned-milestone content so it does not leak in), stopping
285
+ // at the next real milestone boundary (version-bearing or milestone-emoji-
286
+ // bearing heading) or EOF.
287
+ //
288
+ // Bounded to a single append so a malformed roadmap can't loop. Only
289
+ // matches the literal `Phase Details` label (canonical per GSD ROADMAP
290
+ // template); anything else continues to terminate the slice.
291
+ let phaseDetailsTail = '';
292
+ if (sectionEnd < content.length) {
293
+ const afterEnd = content.slice(sectionEnd);
294
+ const genericPhaseDetailsRegex = /^(#{1,3})\s+Phase\s+Details\b[^\n]*$/im;
295
+ const phaseDetailsMatch = afterEnd.match(genericPhaseDetailsRegex);
296
+ if (phaseDetailsMatch && phaseDetailsMatch.index !== undefined) {
297
+ const pdStart = sectionEnd + phaseDetailsMatch.index;
298
+ const pdHeadingLen = phaseDetailsMatch[0].length;
299
+ const pdLevel = phaseDetailsMatch[1].length;
300
+ // Scan from after the Phase Details heading for the next real milestone
301
+ // boundary (different version OR milestone emoji). Reuses the same
302
+ // (?!Phase\s+\S) phase-heading guard from #2619, plus a
303
+ // (?!Phase\s+Details\b) guard so a sibling Phase Details heading
304
+ // doesn't terminate the block prematurely.
305
+ const afterPdHeading = content.slice(pdStart + pdHeadingLen);
306
+ const nextRealMilestoneRegex = new RegExp(`^#{1,${pdLevel}}\\s+(?!Phase\\s+\\S)(?!Phase\\s+Details\\b)(?:.*v(\\d+(?:\\.\\d+)+)[^\\n]*|.*(?:✅|📋|🚧|🟡))`, 'gmi');
307
+ let pdEnd = content.length;
308
+ let mm;
309
+ while ((mm = nextRealMilestoneRegex.exec(afterPdHeading)) !== null) {
310
+ const mv = mm[1];
311
+ if (mv && currentVersionStr && mv === currentVersionStr)
312
+ continue;
313
+ pdEnd = pdStart + pdHeadingLen + mm.index;
314
+ break;
315
+ }
316
+ phaseDetailsTail = '\n' + content.slice(pdStart, pdEnd);
317
+ }
318
+ }
319
+ // Return only the current milestone section — never include the preamble, which
320
+ // may contain ## Backlog and other non-current-milestone phases. Append any
321
+ // generic Phase Details block discovered above (#3493) so detail-section
322
+ // lookups for the active milestone succeed.
323
+ return content.slice(sectionStart, sectionEnd) + phaseDetailsTail;
324
+ }
325
+ /**
326
+ * Return true when `offset` falls inside an open GFM fenced code block
327
+ * within the provided `content`.
328
+ *
329
+ * GFM fence semantics (bug #2787):
330
+ * - Opening fence: a line starting with at least 3 backticks or 3 tildes,
331
+ * optionally followed by an info string (e.g. ```bash, ~~~markdown).
332
+ * - Closing fence: a line starting with at least 3 of the SAME char as
333
+ * the opener, with NO info string — so ```js inside an open ```text
334
+ * fence does NOT close it.
335
+ *
336
+ * We walk lines from the start of `content` to `offset`, toggling a
337
+ * `fenceChar` cursor on each fence boundary. Returns true when the
338
+ * cursor is non-null at `offset`.
339
+ */
340
+ function isInsideFencedCodeBlock(content, offset) {
341
+ let fenceChar = null;
342
+ let lineStart = 0;
343
+ for (let i = 0; i <= offset; i++) {
344
+ if (i === content.length || content[i] === '\n') {
345
+ const line = content.slice(lineStart, i);
346
+ const openMatch = line.match(/^(`{3,}|~{3,})(\s*)([^\n]*)$/);
347
+ if (openMatch) {
348
+ const fenceRun = openMatch[1];
349
+ const ch = fenceRun[0] === '`' ? '`' : '~';
350
+ const info = openMatch[3].trim();
351
+ if (fenceChar === null) {
352
+ // Opening fence — info string allowed.
353
+ fenceChar = ch;
354
+ }
355
+ else if (ch === fenceChar && info.length === 0) {
356
+ // Closing fence must match opener and carry no info string.
357
+ fenceChar = null;
358
+ }
359
+ }
360
+ lineStart = i + 1;
361
+ }
362
+ }
363
+ return fenceChar !== null;
364
+ }
365
+ /**
366
+ * Extract phase entries from an arbitrary ROADMAP milestone section.
367
+ *
368
+ * Parses `#### Phase N: Name` / `### Phase N: Name` / `## Phase N: Name`
369
+ * headings and, for each, captures goal + depends_on via the same patterns
370
+ * used by initManager's current-milestone phase parsing. Used by
371
+ * `initManager` to populate `queued_phases` (#2497).
372
+ */
373
+ export function extractPhasesFromSection(section) {
374
+ const phasePattern = /#{2,4}\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:\s*([^\n]+)/gi;
375
+ const phases = [];
376
+ let m;
377
+ while ((m = phasePattern.exec(section)) !== null) {
378
+ const phaseNum = m[1];
379
+ const phaseName = m[2].replace(/\(INSERTED\)/i, '').trim();
380
+ const sectionStart = m.index;
381
+ const rest = section.slice(sectionStart);
382
+ const nextHeader = rest.match(/\n#{2,4}\s+Phase\s+\d/i);
383
+ const end = nextHeader ? sectionStart + (nextHeader.index ?? 0) : section.length;
384
+ const body = section.slice(sectionStart, end);
385
+ const goalMatch = body.match(/\*\*Goal(?::\*\*|\*\*:)\s*([^\n]+)/i);
386
+ const dependsMatch = body.match(/\*\*Depends on(?::\*\*|\*\*:)\s*([^\n]+)/i);
387
+ phases.push({
388
+ number: phaseNum,
389
+ name: phaseName,
390
+ goal: goalMatch ? goalMatch[1].trim() : null,
391
+ depends_on: dependsMatch ? dependsMatch[1].trim() : null,
392
+ });
393
+ }
394
+ return phases;
395
+ }
396
+ /**
397
+ * Find the milestone section that comes immediately AFTER the active one.
398
+ *
399
+ * Used by initManager to surface `queued_phases` without conflating the
400
+ * active milestone's phase list with the next one (#2497). Returns null
401
+ * when no subsequent milestone section exists (active is the last one).
402
+ *
403
+ * Reuses the same current-version resolution path as `getMilestoneInfo`:
404
+ * STATE.md frontmatter first, then in-flight emoji markers in ROADMAP.
405
+ * Shipped milestones are stripped first so they can't shadow the real
406
+ * "next" one.
407
+ */
408
+ export async function extractNextMilestoneSection(content, projectDir) {
409
+ const cleaned = stripShippedMilestones(content);
410
+ // Resolve current version via STATE.md (priority) then in-flight markers.
411
+ let currentVersion = null;
412
+ const fromState = await parseMilestoneFromState(projectDir);
413
+ if (fromState?.version) {
414
+ const raw = fromState.version.trim();
415
+ currentVersion = /^v\d/i.test(raw) ? raw : `v${raw}`;
416
+ }
417
+ if (!currentVersion) {
418
+ const inProgressMatch = cleaned.match(/(?:🚧|🟡)\s*\*\*v(\d+(?:\.\d+)+)\s/);
419
+ if (inProgressMatch)
420
+ currentVersion = 'v' + inProgressMatch[1];
421
+ }
422
+ if (!currentVersion)
423
+ return null;
424
+ // Find the current milestone ## heading.
425
+ const escaped = escapeRegex(currentVersion);
426
+ const currentHeadingPattern = new RegExp(`^##\\s+[^\\n]*${escaped}[^\\n]*$`, 'mi');
427
+ const currentMatch = cleaned.match(currentHeadingPattern);
428
+ if (!currentMatch || currentMatch.index === undefined)
429
+ return null;
430
+ // Look for the next ## milestone heading after the current one.
431
+ const tail = cleaned.slice(currentMatch.index + currentMatch[0].length);
432
+ // Exclude phase headings — see #2619.
433
+ const nextMilestonePattern = /^##\s+(?!Phase\s+\S)([^\n]*(?:v(\d+(?:\.\d+)+)|✅|🚧|🟡|📋)[^\n]*)$/gim;
434
+ let nextMatch;
435
+ while ((nextMatch = nextMilestonePattern.exec(tail)) !== null) {
436
+ const heading = nextMatch[1];
437
+ const versionMatch = heading.match(/v(\d+(?:\.\d+)+)/);
438
+ if (!versionMatch)
439
+ continue;
440
+ const nextVersion = 'v' + versionMatch[1];
441
+ if (nextVersion === currentVersion)
442
+ continue;
443
+ // Derive a display name: trim through "vX.Y:" or "vX.Y —" prefix.
444
+ const nameMatch = heading.match(/v\d+(?:\.\d+)+:?\s*[—–-]?\s*([^\n(]+)/);
445
+ const name = nameMatch ? nameMatch[1].trim() : heading.trim();
446
+ const sectionStart = (nextMatch.index ?? 0) + nextMatch[0].length;
447
+ const afterStart = tail.slice(sectionStart);
448
+ const followingHeader = afterStart.match(/^##\s/m);
449
+ const sectionEnd = followingHeader && followingHeader.index !== undefined
450
+ ? sectionStart + followingHeader.index
451
+ : tail.length;
452
+ const section = tail.slice(sectionStart, sectionEnd);
453
+ return { version: nextVersion, name, section };
454
+ }
455
+ return null;
456
+ }
457
+ // ─── Internal helpers ─────────────────────────────────────────────────────
458
+ /**
459
+ * Padding-tolerant regex fragment for a phase number — emits `0*<integer>` so
460
+ * the fragment matches both `Phase 3` and `Phase 03` (bug #2391 / #3537).
461
+ *
462
+ * Mirrors `phaseMarkdownRegexSource` in core.cjs and the local copy in
463
+ * roadmap-update-plan-progress.ts. Falls back to `escapeRegex(phaseNum)` for
464
+ * non-numeric IDs (custom project codes like `PROJ-42`).
465
+ */
466
+ export function phaseMarkdownRegexSource(phaseNum) {
467
+ const stripped = String(phaseNum).replace(/^[A-Z]{1,6}-(?=\d)/i, '');
468
+ const match = stripped.match(/^0*(\d+)([A-Z])?((?:\.\d+)*)$/i);
469
+ if (!match)
470
+ return escapeRegex(phaseNum);
471
+ const integer = match[1].replace(/^0+/, '') || '0';
472
+ const letter = match[2] ? escapeRegex(match[2]) : '';
473
+ const decimal = match[3] ? escapeRegex(match[3]) : '';
474
+ return `0*${escapeRegex(integer)}${letter}${decimal}`;
475
+ }
476
+ /**
477
+ * #3599 (parity with core.cjs phaseMarkdownRegexSourceExact, lines 691-708):
478
+ * when the caller passed a project-code-prefixed ID like `PROJ-42`, return
479
+ * the exact-escaped form so the caller can search the ROADMAP for
480
+ * `### Phase PROJ-42:` BEFORE falling back to the padding-tolerant numeric
481
+ * form. Returns null when the input has no project-code prefix — in that
482
+ * case `phaseMarkdownRegexSource` is the only form the caller needs.
483
+ *
484
+ * Two-pass at the call site preserves the #3537 contract (`CK-01` directory
485
+ * names mapping to `Phase 1:` prose) while letting `PROJ-42` resolve to its
486
+ * own prefixed heading without cross-matching a bare `### Phase 42:` that
487
+ * happens to share the trailing integer.
488
+ */
489
+ export function phaseMarkdownRegexSourceExact(phaseNum) {
490
+ const raw = String(phaseNum);
491
+ if (!/^[A-Z]{1,6}-(?=\d)/i.test(raw))
492
+ return null;
493
+ return escapeRegex(raw);
494
+ }
495
+ /**
496
+ * Search for a phase section in roadmap content.
497
+ *
498
+ * Port of searchPhaseInContent from roadmap.cjs lines 14-73.
499
+ */
500
+ function searchPhaseInContent(content, escapedPhase, phaseNum) {
501
+ // Match "## Phase X:", "### Phase X:", or "#### Phase X:" with optional name.
502
+ // Uses the padding-tolerant fragment so zero-padded inputs ("03") match
503
+ // unpadded ROADMAP headings ("### Phase 3:"). See #2391 / #3537.
504
+ // Capture group 1 = the as-written phase token from the heading so callers
505
+ // get the canonical form (matching the ROADMAP source-of-truth), not the
506
+ // padded input the user typed. Without this, `roadmap get-phase 02.7`
507
+ // and `roadmap get-phase 2.7` produce divergent payloads for the same
508
+ // heading, breaking bug-3537 parity.
509
+ const phasePattern = new RegExp(`#{2,4}\\s*Phase\\s+(${escapedPhase}):\\s*([^\\n]+)`, 'i');
510
+ const headerMatch = content.match(phasePattern);
511
+ if (!headerMatch) {
512
+ // Fallback 1: bold-wrapped checklist entry `- [ ] **Phase N: name**`.
513
+ // Reports malformed_roadmap when a bold checklist entry exists without a
514
+ // companion `### Phase N:` detail heading (original fallback contract).
515
+ const checklistPattern = new RegExp(`-\\s*\\[[ x]\\]\\s*\\*\\*Phase\\s+(${escapedPhase}):\\s*([^*]+)\\*\\*`, 'i');
516
+ const checklistMatch = content.match(checklistPattern);
517
+ if (checklistMatch) {
518
+ const canonicalChecklistPhase = checklistMatch[1];
519
+ return {
520
+ found: false,
521
+ phase_number: canonicalChecklistPhase,
522
+ phase_name: checklistMatch[2].trim(),
523
+ error: 'malformed_roadmap',
524
+ message: `Phase ${canonicalChecklistPhase} exists in summary list but missing "### Phase ${canonicalChecklistPhase}:" detail section. ROADMAP.md needs both formats.`,
525
+ };
526
+ }
527
+ // Fallback 2 (#3816): plain (non-bold) bullet entry `- [ ] Phase N: name`
528
+ // used by milestone-scoped ROADMAPs where phases are listed as bullets
529
+ // under a `### 🚧 <milestone>` heading, not as separate `### Phase N:` headings.
530
+ // Returns `found: true` — the bullet IS the authoritative phase record for
531
+ // these layouts, not just a malformed summary list entry.
532
+ const plainBulletPattern = new RegExp(`-\\s*\\[[ x]\\]\\s*Phase\\s+(${escapedPhase}):\\s*([^\\n]+)`, 'i');
533
+ const plainBulletMatch = content.match(plainBulletPattern);
534
+ if (plainBulletMatch) {
535
+ // Strip trailing annotations like `— pending /gsd:spec-phase 7`
536
+ const rawName = plainBulletMatch[2].trim();
537
+ const phaseName = rawName.replace(/\s*[-—].*$/, '').trim() || rawName;
538
+ return {
539
+ found: true,
540
+ phase_number: plainBulletMatch[1],
541
+ phase_name: phaseName,
542
+ section: plainBulletMatch[0],
543
+ goal: null,
544
+ mode: null,
545
+ success_criteria: [],
546
+ };
547
+ }
548
+ return null;
549
+ }
550
+ const canonicalPhaseNum = headerMatch[1];
551
+ const phaseName = headerMatch[2].trim();
552
+ const headerIndex = headerMatch.index;
553
+ // Find the end of this section (next ## or ### phase header, or end of file)
554
+ const restOfContent = content.slice(headerIndex);
555
+ const nextHeaderMatch = restOfContent.match(/\n#{2,4}\s+Phase\s+\d/i);
556
+ const sectionEnd = nextHeaderMatch
557
+ ? headerIndex + nextHeaderMatch.index
558
+ : content.length;
559
+ const section = content.slice(headerIndex, sectionEnd).trim();
560
+ // Extract goal if present (supports both **Goal:** and **Goal**: formats)
561
+ const goalMatch = section.match(/\*\*Goal(?::\*\*|\*\*:)\s*([^\n]+)/i);
562
+ const goal = goalMatch ? goalMatch[1].trim() : null;
563
+ // Mode: vertical-MVP slice mode flag. Lowercased + trimmed for canonical
564
+ // comparison; unrecognized values preserved verbatim for forward-compat.
565
+ // Mirrors roadmap.cjs:120-123 — restoring parity that was missed in the SDK port.
566
+ const modeMatch = section.match(/\*\*Mode(?::\*\*|\*\*:)\s*([^\n]+)/i);
567
+ const mode = modeMatch ? modeMatch[1].trim().toLowerCase() : null;
568
+ // Extract success criteria as structured array
569
+ const criteriaMatch = section.match(/\*\*Success Criteria\*\*[^\n]*:\s*\n((?:\s*\d+\.\s*[^\n]+\n?)+)/i);
570
+ const success_criteria = criteriaMatch
571
+ ? criteriaMatch[1].trim().split('\n').map(line => line.replace(/^\s*\d+\.\s*/, '').trim()).filter(Boolean)
572
+ : [];
573
+ // Suppress unused-arg warning — `phaseNum` is retained as the function
574
+ // signature so future callers can reintroduce input-mirroring if needed.
575
+ void phaseNum;
576
+ return {
577
+ found: true,
578
+ phase_number: canonicalPhaseNum,
579
+ phase_name: phaseName,
580
+ goal,
581
+ mode,
582
+ success_criteria,
583
+ section,
584
+ };
585
+ }
586
+ async function countPhasePlansAndSummaries(phaseDir) {
587
+ const phaseFiles = await readdir(phaseDir);
588
+ const rootPlans = phaseFiles.filter(f => f.endsWith('-PLAN.md') || f === 'PLAN.md');
589
+ const rootSummaries = phaseFiles.filter(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
590
+ let nestedPlans = [];
591
+ let nestedSummaries = [];
592
+ const plansDir = join(phaseDir, 'plans');
593
+ if (existsSync(plansDir)) {
594
+ const files = await readdir(plansDir);
595
+ nestedPlans = files.filter(f => /^PLAN-\d+.*\.md$/i.test(f));
596
+ nestedSummaries = files.filter(f => /^SUMMARY-\d+.*\.md$/i.test(f));
597
+ }
598
+ return {
599
+ planCount: rootPlans.length + nestedPlans.length,
600
+ summaryCount: rootSummaries.length + nestedSummaries.length,
601
+ hasContext: phaseFiles.some(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md'),
602
+ hasResearch: phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md'),
603
+ };
604
+ }
605
+ // ─── Exported handlers ────────────────────────────────────────────────────
606
+ /**
607
+ * Query handler for roadmap.get-phase.
608
+ *
609
+ * Port of cmdRoadmapGetPhase from roadmap.cjs lines 75-113.
610
+ *
611
+ * @param args - args[0] is phase number (required)
612
+ * @param projectDir - Project root directory
613
+ * @returns QueryResult with phase section info or { found: false }
614
+ */
615
+ export const roadmapGetPhase = async (args, projectDir, workstream) => {
616
+ const phaseNum = args[0];
617
+ if (!phaseNum) {
618
+ throw new GSDError('Usage: roadmap get-phase <phase-number>', ErrorClassification.Validation);
619
+ }
620
+ const roadmapPath = planningPaths(projectDir, workstream).roadmap;
621
+ let rawContent;
622
+ try {
623
+ rawContent = await readFile(roadmapPath, 'utf-8');
624
+ }
625
+ catch {
626
+ return { data: { found: false, error: 'ROADMAP.md not found' } };
627
+ }
628
+ const milestoneContent = await extractCurrentMilestone(rawContent, projectDir, workstream);
629
+ const fullContent = stripShippedMilestones(rawContent);
630
+ // Two-pass lookup (parity with bin/lib/roadmap.cjs #3599 path): if the input
631
+ // carries a project-code prefix like `PROJ-42`, try the EXACT escaped form
632
+ // first so we match `### Phase PROJ-42:` without cross-matching `### Phase 42:`.
633
+ // Only fall back to the padding-tolerant numeric form (which strips the
634
+ // prefix per the #3537 contract for CK-01 → Phase 1 directory layout) when
635
+ // the exact form misses.
636
+ const exactEscaped = phaseMarkdownRegexSourceExact(phaseNum);
637
+ // Padding-tolerant fragment (bug #2391): caller may pass "03" — match against
638
+ // unpadded ROADMAP headings ("Phase 3:") without forcing the caller to normalize.
639
+ const numericEscaped = phaseMarkdownRegexSource(phaseNum);
640
+ // Try exact-prefixed match first when applicable.
641
+ let milestoneResult = null;
642
+ let fallbackFromFullContent = null;
643
+ if (exactEscaped) {
644
+ milestoneResult = searchPhaseInContent(milestoneContent, exactEscaped, phaseNum);
645
+ if (!milestoneResult || milestoneResult.error) {
646
+ fallbackFromFullContent = searchPhaseInContent(fullContent, exactEscaped, phaseNum);
647
+ }
648
+ }
649
+ // Padding-tolerant fallback (#3537) — also covers the no-prefix case.
650
+ if (!milestoneResult || milestoneResult.error) {
651
+ milestoneResult = milestoneResult || searchPhaseInContent(milestoneContent, numericEscaped, phaseNum);
652
+ }
653
+ if (!fallbackFromFullContent) {
654
+ fallbackFromFullContent = searchPhaseInContent(fullContent, numericEscaped, phaseNum);
655
+ }
656
+ const result = (milestoneResult && !milestoneResult.error)
657
+ ? milestoneResult
658
+ : fallbackFromFullContent || milestoneResult;
659
+ if (!result) {
660
+ return { data: { found: false, phase_number: phaseNum } };
661
+ }
662
+ return { data: result };
663
+ };
664
+ /**
665
+ * Query handler for roadmap.analyze.
666
+ *
667
+ * Port of cmdRoadmapAnalyze from roadmap.cjs lines 115-248.
668
+ * Multi-pass regex parsing with disk status correlation.
669
+ *
670
+ * @param args - Unused
671
+ * @param projectDir - Project root directory
672
+ * @returns QueryResult with full roadmap analysis
673
+ */
674
+ export const roadmapAnalyze = async (_args, projectDir, workstream) => {
675
+ const roadmapPath = planningPaths(projectDir, workstream).roadmap;
676
+ let rawContent;
677
+ try {
678
+ rawContent = await readFile(roadmapPath, 'utf-8');
679
+ }
680
+ catch {
681
+ return { data: { error: 'ROADMAP.md not found', milestones: [], phases: [], current_phase: null } };
682
+ }
683
+ const rawMilestoneContent = await extractCurrentMilestone(rawContent, projectDir, workstream);
684
+ // #3816: exclude phases in the Backlog / Planned / Archived sections that
685
+ // may bleed into the active-milestone slice when those sections use plain
686
+ // headings (no version/emoji) that the boundary scanner does not stop at.
687
+ const backlogBoundaryIdx = rawMilestoneContent.search(/\n#{2,3}\s+(?:Backlog|Planned|Shipped|Archived)\b/i);
688
+ const content = backlogBoundaryIdx >= 0 ? rawMilestoneContent.slice(0, backlogBoundaryIdx) : rawMilestoneContent;
689
+ const phasesDir = planningPaths(projectDir, workstream).phases;
690
+ // IMPORTANT: Create regex INSIDE the function to avoid /g lastIndex persistence
691
+ // Heading-format phases: "### Phase N: Name"
692
+ const phasePattern = /#{2,4}\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:\s*([^\n]+)/gi;
693
+ // #3816: plain-bullet phases "- [ ] Phase N: Name" used by milestone-scoped layouts
694
+ const bulletPhasePattern = /^[-*]\s*\[[ x]\]\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:\s*([^\n]+)/gim;
695
+ const phases = [];
696
+ let match;
697
+ while ((match = phasePattern.exec(content)) !== null) {
698
+ const phaseNum = match[1];
699
+ const phaseName = match[2].replace(/\(INSERTED\)/i, '').trim();
700
+ // Extract goal from the section
701
+ const sectionStart = match.index;
702
+ const restOfContent = content.slice(sectionStart);
703
+ const nextHeader = restOfContent.match(/\n#{2,4}\s+Phase\s+\d/i);
704
+ const sectionEnd = nextHeader ? sectionStart + nextHeader.index : content.length;
705
+ const section = content.slice(sectionStart, sectionEnd);
706
+ const goalMatch = section.match(/\*\*Goal(?::\*\*|\*\*:)\s*([^\n]+)/i);
707
+ const goal = goalMatch ? goalMatch[1].trim() : null;
708
+ const dependsMatch = section.match(/\*\*Depends on(?::\*\*|\*\*:)\s*([^\n]+)/i);
709
+ const depends_on = dependsMatch ? dependsMatch[1].trim() : null;
710
+ // **Mode:** field — vertical-MVP slice flag per CONTEXT.md "MVP Mode"
711
+ // glossary. Pattern mirrors the roadmapGetPhase extraction above so the
712
+ // analyze output surfaces the same value the get-phase handler returns.
713
+ const modeMatchPhase = section.match(/\*\*Mode(?::\*\*|\*\*:)\s*([^\n]+)/i);
714
+ const mode = modeMatchPhase ? modeMatchPhase[1].trim().toLowerCase() : null;
715
+ // Check completion on disk
716
+ const normalized = normalizePhaseName(phaseNum);
717
+ let diskStatus = 'no_directory';
718
+ let planCount = 0;
719
+ let summaryCount = 0;
720
+ let hasContext = false;
721
+ let hasResearch = false;
722
+ try {
723
+ const entries = await readdir(phasesDir, { withFileTypes: true });
724
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
725
+ const dirMatch = dirs.find(d => phaseTokenMatches(d, normalized));
726
+ if (dirMatch) {
727
+ const counts = await countPhasePlansAndSummaries(join(phasesDir, dirMatch));
728
+ planCount = counts.planCount;
729
+ summaryCount = counts.summaryCount;
730
+ hasContext = counts.hasContext;
731
+ hasResearch = counts.hasResearch;
732
+ if (summaryCount >= planCount && planCount > 0)
733
+ diskStatus = 'complete';
734
+ else if (summaryCount > 0)
735
+ diskStatus = 'partial';
736
+ else if (planCount > 0)
737
+ diskStatus = 'planned';
738
+ else if (hasResearch)
739
+ diskStatus = 'researched';
740
+ else if (hasContext)
741
+ diskStatus = 'discussed';
742
+ else
743
+ diskStatus = 'empty';
744
+ }
745
+ }
746
+ catch { /* intentionally empty */ }
747
+ // Check ROADMAP checkbox status
748
+ const checkboxPattern = new RegExp(`-\\s*\\[(x| )\\]\\s*.*Phase\\s+${escapeRegex(phaseNum)}[:\\s]`, 'i');
749
+ const checkboxMatch = content.match(checkboxPattern);
750
+ const roadmapComplete = checkboxMatch ? checkboxMatch[1] === 'x' : false;
751
+ // If roadmap marks phase complete, trust that over disk
752
+ if (roadmapComplete && diskStatus !== 'complete') {
753
+ diskStatus = 'complete';
754
+ }
755
+ phases.push({
756
+ number: phaseNum,
757
+ name: phaseName,
758
+ goal,
759
+ depends_on,
760
+ mode,
761
+ plan_count: planCount,
762
+ summary_count: summaryCount,
763
+ has_context: hasContext,
764
+ has_research: hasResearch,
765
+ disk_status: diskStatus,
766
+ roadmap_complete: roadmapComplete,
767
+ });
768
+ }
769
+ // #3816: second pass — plain-bullet phases not captured by the heading scan.
770
+ // Milestone-scoped ROADMAPs list phases as `- [ ] Phase N: Name` bullets under
771
+ // a milestone heading without companion `### Phase N:` detail headings.
772
+ // Only add phases not already discovered by the heading scan.
773
+ const headingPhaseNums = new Set(phases.map(p => p.number));
774
+ while ((match = bulletPhasePattern.exec(content)) !== null) {
775
+ const phaseNum = match[1];
776
+ if (headingPhaseNums.has(phaseNum))
777
+ continue; // already captured above
778
+ const rawName = match[2].replace(/\(INSERTED\)/i, '').trim();
779
+ const phaseName = rawName.replace(/\s*[-—].*$/, '').trim() || rawName;
780
+ const normalized = normalizePhaseName(phaseNum);
781
+ let diskStatus = 'no_directory';
782
+ let planCount = 0;
783
+ let summaryCount = 0;
784
+ let hasContext = false;
785
+ let hasResearch = false;
786
+ try {
787
+ const entries = await readdir(phasesDir, { withFileTypes: true });
788
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
789
+ const dirMatch = dirs.find(d => phaseTokenMatches(d, normalized));
790
+ if (dirMatch) {
791
+ const counts = await countPhasePlansAndSummaries(join(phasesDir, dirMatch));
792
+ planCount = counts.planCount;
793
+ summaryCount = counts.summaryCount;
794
+ hasContext = counts.hasContext;
795
+ hasResearch = counts.hasResearch;
796
+ if (summaryCount >= planCount && planCount > 0)
797
+ diskStatus = 'complete';
798
+ else if (summaryCount > 0)
799
+ diskStatus = 'partial';
800
+ else if (planCount > 0)
801
+ diskStatus = 'planned';
802
+ else if (hasResearch)
803
+ diskStatus = 'researched';
804
+ else if (hasContext)
805
+ diskStatus = 'discussed';
806
+ else
807
+ diskStatus = 'empty';
808
+ }
809
+ }
810
+ catch { /* intentionally empty */ }
811
+ // Check ROADMAP checkbox status from the bullet itself
812
+ const checkboxMatch = match[0].match(/\[(x| )\]/i);
813
+ const roadmapComplete = checkboxMatch ? checkboxMatch[1].toLowerCase() === 'x' : false;
814
+ if (roadmapComplete && diskStatus !== 'complete')
815
+ diskStatus = 'complete';
816
+ headingPhaseNums.add(phaseNum);
817
+ phases.push({
818
+ number: phaseNum,
819
+ name: phaseName,
820
+ goal: null,
821
+ depends_on: null,
822
+ mode: null,
823
+ plan_count: planCount,
824
+ summary_count: summaryCount,
825
+ has_context: hasContext,
826
+ has_research: hasResearch,
827
+ disk_status: diskStatus,
828
+ roadmap_complete: roadmapComplete,
829
+ });
830
+ }
831
+ // Extract milestone info
832
+ const milestones = [];
833
+ const milestonePattern = /##\s*(.*v(\d+(?:\.\d+)+)[^(\n]*)/gi;
834
+ let mMatch;
835
+ while ((mMatch = milestonePattern.exec(content)) !== null) {
836
+ milestones.push({
837
+ heading: mMatch[1].trim(),
838
+ version: 'v' + mMatch[2],
839
+ });
840
+ }
841
+ // Find current and next phase
842
+ const currentPhase = phases.find(p => p.disk_status === 'planned' || p.disk_status === 'partial') || null;
843
+ const nextPhase = phases.find(p => p.disk_status === 'empty' || p.disk_status === 'no_directory' || p.disk_status === 'discussed' || p.disk_status === 'researched') || null;
844
+ // Aggregated stats
845
+ const totalPlans = phases.reduce((sum, p) => sum + p.plan_count, 0);
846
+ const totalSummaries = phases.reduce((sum, p) => sum + p.summary_count, 0);
847
+ const completedPhases = phases.filter(p => p.disk_status === 'complete').length;
848
+ // Detect phases in summary list without detail sections (malformed ROADMAP)
849
+ const checklistPattern = /-\s*\[[ x]\]\s*\*\*Phase\s+(\d+[A-Z]?(?:\.\d+)*)/gi;
850
+ const checklistPhases = new Set();
851
+ let checklistMatch;
852
+ while ((checklistMatch = checklistPattern.exec(content)) !== null) {
853
+ checklistPhases.add(checklistMatch[1]);
854
+ }
855
+ const detailPhases = new Set(phases.map(p => p.number));
856
+ const missingDetails = [...checklistPhases].filter(p => !detailPhases.has(p));
857
+ const result = {
858
+ milestones,
859
+ phases,
860
+ phase_count: phases.length,
861
+ completed_phases: completedPhases,
862
+ total_plans: totalPlans,
863
+ total_summaries: totalSummaries,
864
+ progress_percent: totalPlans > 0 ? Math.min(100, Math.round((totalSummaries / totalPlans) * 100)) : 0,
865
+ current_phase: currentPhase ? currentPhase.number : null,
866
+ next_phase: nextPhase ? nextPhase.number : null,
867
+ missing_phase_details: missingDetails.length > 0 ? missingDetails : null,
868
+ };
869
+ return { data: result };
870
+ };
871
+ // ─── roadmapAnnotateDependencies ─────────────────────────────────────────
872
+ /**
873
+ * Annotate the ROADMAP.md plan list with wave dependency notes and
874
+ * cross-cutting constraints derived from PLAN frontmatter.
875
+ *
876
+ * Delegates to gsd-tools.cjs which holds the full annotation logic.
877
+ * Returns { updated, phase, waves, cross_cutting_constraints }.
878
+ */
879
+ export const roadmapAnnotateDependencies = async (args, projectDir) => {
880
+ const phase = args[0];
881
+ if (!phase) {
882
+ return { data: { updated: false, reason: 'phase argument required' } };
883
+ }
884
+ const { spawnSync } = await import('node:child_process');
885
+ const toolsPath = resolveGsdToolsPath(projectDir);
886
+ // CRITICAL: set GSD_SDK_NESTED=1 so the CJS router in the child process
887
+ // detects nesting and routes directly to cmdRoadmapAnnotateDependencies
888
+ // instead of dispatching back through executeForCjs. Without this guard,
889
+ // SDK→spawn(gsd-tools)→router→SDK→spawn(gsd-tools)→… loops until the
890
+ // synckit 15s timeout fires and bug-3537's annotate test surfaces a
891
+ // misleading "code=null" failure.
892
+ const childEnv = { ...process.env, GSD_SDK_NESTED: '1' };
893
+ const result = spawnSync(process.execPath, [toolsPath, 'roadmap', 'annotate-dependencies', phase], {
894
+ cwd: projectDir,
895
+ encoding: 'utf-8',
896
+ stdio: ['pipe', 'pipe', 'pipe'],
897
+ timeout: 15000,
898
+ maxBuffer: 1024 * 1024,
899
+ env: childEnv,
900
+ });
901
+ if (result.error) {
902
+ return { data: { updated: false, reason: result.error.message || 'gsd-tools invocation failed' } };
903
+ }
904
+ if (result.status !== 0) {
905
+ return { data: { updated: false, reason: result.stderr?.trim() || 'gsd-tools error' } };
906
+ }
907
+ try {
908
+ return { data: JSON.parse(result.stdout.trim()) };
909
+ }
910
+ catch {
911
+ return { data: { updated: false, reason: 'failed to parse gsd-tools output' } };
912
+ }
913
+ };
914
+ // ─── requirementsMarkComplete ─────────────────────────────────────────────
915
+ /**
916
+ * Mark requirement IDs complete in REQUIREMENTS.md (checkbox + traceability table).
917
+ * Port of `cmdRequirementsMarkComplete` from milestone.cjs lines 11–87.
918
+ */
919
+ export const requirementsMarkComplete = async (args, projectDir, workstream) => {
920
+ if (args.length === 0) {
921
+ throw new GSDError('requirement IDs required. Usage: requirements mark-complete REQ-01,REQ-02 or REQ-01 REQ-02', ErrorClassification.Validation);
922
+ }
923
+ const reqIds = args
924
+ .join(' ')
925
+ .replace(/[\[\]]/g, '')
926
+ .split(/[,\s]+/)
927
+ .map(r => r.trim())
928
+ .filter(Boolean);
929
+ if (reqIds.length === 0) {
930
+ throw new GSDError('no valid requirement IDs found', ErrorClassification.Validation);
931
+ }
932
+ const paths = planningPaths(projectDir, workstream);
933
+ if (!existsSync(paths.requirements)) {
934
+ return { data: { updated: false, reason: 'REQUIREMENTS.md not found', ids: reqIds } };
935
+ }
936
+ let reqContent = (await readFile(paths.requirements, 'utf-8')).replace(/\r\n/g, '\n');
937
+ const updated = [];
938
+ const alreadyComplete = [];
939
+ const notFound = [];
940
+ for (const reqId of reqIds) {
941
+ let found = false;
942
+ const reqEscaped = escapeRegex(reqId);
943
+ const checkboxPattern = new RegExp(`(-\\s*\\[)[ ](\\]\\s*\\*\\*${reqEscaped}\\*\\*)`, 'gi');
944
+ const afterCheckbox = reqContent.replace(checkboxPattern, '$1x$2');
945
+ if (afterCheckbox !== reqContent) {
946
+ reqContent = afterCheckbox;
947
+ found = true;
948
+ }
949
+ const tablePattern = new RegExp(`(\\|\\s*${reqEscaped}\\s*\\|[^|]+\\|)\\s*Pending\\s*(\\|)`, 'gi');
950
+ const afterTable = reqContent.replace(tablePattern, '$1 Complete $2');
951
+ if (afterTable !== reqContent) {
952
+ reqContent = afterTable;
953
+ found = true;
954
+ }
955
+ if (found) {
956
+ updated.push(reqId);
957
+ }
958
+ else {
959
+ const doneCheckbox = new RegExp(`-\\s*\\[x\\]\\s*\\*\\*${reqEscaped}\\*\\*`, 'i');
960
+ const doneTable = new RegExp(`\\|\\s*${reqEscaped}\\s*\\|[^|]+\\|\\s*Complete\\s*\\|`, 'i');
961
+ if (doneCheckbox.test(reqContent) || doneTable.test(reqContent)) {
962
+ alreadyComplete.push(reqId);
963
+ }
964
+ else {
965
+ notFound.push(reqId);
966
+ }
967
+ }
968
+ }
969
+ if (updated.length > 0) {
970
+ await writeFile(paths.requirements, reqContent, 'utf-8');
971
+ }
972
+ return {
973
+ data: {
974
+ updated: updated.length > 0,
975
+ marked_complete: updated,
976
+ already_complete: alreadyComplete,
977
+ not_found: notFound,
978
+ total: reqIds.length,
979
+ },
980
+ };
981
+ };
982
+ //# sourceMappingURL=roadmap.js.map