@bhargavvc/sdd-cc 1.35.0 → 1.42.3

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 (1374) hide show
  1. package/README.ja-JP.md +54 -52
  2. package/README.ko-KR.md +47 -45
  3. package/README.md +86 -733
  4. package/README.pt-BR.md +14 -12
  5. package/README.zh-CN.md +31 -29
  6. package/agents/sdd-ai-researcher.md +2 -2
  7. package/agents/sdd-code-fixer.md +169 -17
  8. package/agents/sdd-code-reviewer.md +40 -8
  9. package/agents/sdd-codebase-mapper.md +89 -6
  10. package/agents/sdd-debug-session-manager.md +314 -0
  11. package/agents/sdd-debugger.md +147 -80
  12. package/agents/sdd-doc-classifier.md +168 -0
  13. package/agents/sdd-doc-synthesizer.md +204 -0
  14. package/agents/sdd-doc-verifier.md +20 -4
  15. package/agents/sdd-doc-writer.md +22 -9
  16. package/agents/sdd-domain-researcher.md +2 -2
  17. package/agents/sdd-eval-auditor.md +30 -3
  18. package/agents/sdd-eval-planner.md +2 -2
  19. package/agents/sdd-executor.md +203 -43
  20. package/agents/sdd-framework-selector.md +1 -1
  21. package/agents/sdd-integration-checker.md +30 -3
  22. package/agents/sdd-intel-updater.md +51 -23
  23. package/agents/sdd-nyquist-auditor.md +31 -4
  24. package/agents/sdd-pattern-mapper.md +335 -0
  25. package/agents/sdd-phase-researcher.md +195 -32
  26. package/agents/sdd-plan-checker.md +135 -24
  27. package/agents/sdd-planner.md +190 -205
  28. package/agents/sdd-project-researcher.md +7 -7
  29. package/agents/sdd-research-synthesizer.md +6 -6
  30. package/agents/sdd-roadmapper.md +19 -10
  31. package/agents/sdd-security-auditor.md +33 -6
  32. package/agents/sdd-ui-auditor.md +23 -7
  33. package/agents/sdd-ui-checker.md +16 -7
  34. package/agents/sdd-ui-researcher.md +8 -8
  35. package/agents/sdd-verifier.md +124 -27
  36. package/bin/install.js +5016 -372
  37. package/bin/sdd-sdk.js +37 -0
  38. package/commands/sdd/add-tests.md +5 -4
  39. package/commands/sdd/ai-integration-phase.md +4 -3
  40. package/commands/sdd/audit-fix.md +2 -1
  41. package/commands/sdd/audit-milestone.md +3 -2
  42. package/commands/sdd/autonomous.md +3 -3
  43. package/commands/sdd/capture.md +62 -0
  44. package/commands/sdd/cleanup.md +2 -1
  45. package/commands/sdd/code-review.md +8 -4
  46. package/commands/sdd/complete-milestone.md +15 -8
  47. package/commands/sdd/config.md +58 -0
  48. package/commands/sdd/debug.md +21 -155
  49. package/commands/sdd/discuss-phase.md +18 -11
  50. package/commands/sdd/docs-update.md +3 -2
  51. package/commands/sdd/eval-review.md +4 -3
  52. package/commands/sdd/execute-phase.md +5 -4
  53. package/commands/sdd/explore.md +3 -3
  54. package/commands/sdd/extract-learnings.md +23 -0
  55. package/commands/sdd/fast.md +4 -3
  56. package/commands/sdd/forensics.md +3 -2
  57. package/commands/sdd/graphify.md +199 -0
  58. package/commands/sdd/health.md +12 -3
  59. package/commands/sdd/help.md +1 -1
  60. package/commands/sdd/import.md +10 -5
  61. package/commands/sdd/inbox.md +39 -0
  62. package/commands/sdd/ingest-docs.md +42 -0
  63. package/commands/sdd/manager.md +8 -3
  64. package/commands/sdd/map-codebase.md +18 -6
  65. package/commands/sdd/milestone-summary.md +1 -1
  66. package/commands/sdd/mvp-phase.md +45 -0
  67. package/commands/sdd/new-milestone.md +4 -3
  68. package/commands/sdd/new-project.md +4 -3
  69. package/commands/sdd/ns-context.md +23 -0
  70. package/commands/sdd/ns-ideate.md +24 -0
  71. package/commands/sdd/ns-manage.md +29 -0
  72. package/commands/sdd/ns-project.md +22 -0
  73. package/commands/sdd/ns-review.md +26 -0
  74. package/commands/sdd/ns-workflow.md +28 -0
  75. package/commands/sdd/pause-work.md +6 -1
  76. package/commands/sdd/phase.md +56 -0
  77. package/commands/sdd/plan-phase.md +15 -5
  78. package/commands/sdd/plan-review-convergence.md +59 -0
  79. package/commands/sdd/pr-branch.md +2 -1
  80. package/commands/sdd/profile-user.md +1 -1
  81. package/commands/sdd/progress.md +27 -5
  82. package/commands/sdd/quick.md +128 -3
  83. package/commands/sdd/resume-work.md +2 -12
  84. package/commands/sdd/review-backlog.md +3 -2
  85. package/commands/sdd/review.md +3 -2
  86. package/commands/sdd/secure-phase.md +3 -2
  87. package/commands/sdd/settings.md +2 -9
  88. package/commands/sdd/ship.md +2 -1
  89. package/commands/sdd/sketch.md +60 -0
  90. package/commands/sdd/spec-phase.md +63 -0
  91. package/commands/sdd/spike.md +57 -0
  92. package/commands/sdd/stats.md +2 -1
  93. package/commands/sdd/surface.md +129 -0
  94. package/commands/sdd/thread.md +8 -111
  95. package/commands/sdd/ui-phase.md +3 -2
  96. package/commands/sdd/ui-review.md +3 -2
  97. package/commands/sdd/ultraplan-phase.md +34 -0
  98. package/commands/sdd/undo.md +2 -1
  99. package/commands/sdd/update.md +21 -10
  100. package/commands/sdd/validate-phase.md +3 -2
  101. package/commands/sdd/verify-work.md +5 -4
  102. package/commands/sdd/workspace.md +52 -0
  103. package/commands/sdd/workstreams.md +12 -11
  104. package/hooks/dist/sdd-check-update-worker.js +116 -0
  105. package/hooks/dist/sdd-check-update.js +13 -88
  106. package/hooks/dist/sdd-context-monitor.js +28 -1
  107. package/hooks/dist/sdd-phase-boundary.sh +23 -3
  108. package/hooks/dist/sdd-read-guard.js +21 -2
  109. package/hooks/dist/sdd-read-injection-scanner.js +152 -0
  110. package/hooks/dist/sdd-session-state.sh +38 -12
  111. package/hooks/dist/sdd-statusline.js +324 -28
  112. package/hooks/dist/sdd-update-banner.js +134 -0
  113. package/hooks/dist/sdd-validate-commit.sh +15 -5
  114. package/hooks/dist/sdd-workflow-guard.js +2 -2
  115. package/hooks/lib/git-cmd.js +150 -0
  116. package/hooks/sdd-check-update-worker.js +116 -0
  117. package/hooks/sdd-check-update.js +13 -88
  118. package/hooks/sdd-context-monitor.js +28 -1
  119. package/hooks/sdd-phase-boundary.sh +23 -3
  120. package/hooks/sdd-read-guard.js +21 -2
  121. package/hooks/sdd-read-injection-scanner.js +152 -0
  122. package/hooks/sdd-session-state.sh +38 -12
  123. package/hooks/sdd-statusline.js +324 -28
  124. package/hooks/sdd-update-banner.js +134 -0
  125. package/hooks/sdd-validate-commit.sh +15 -5
  126. package/hooks/sdd-workflow-guard.js +2 -2
  127. package/package.json +32 -7
  128. package/scripts/audit-workflow-script-paths.cjs +73 -0
  129. package/scripts/build-hooks.js +98 -4
  130. package/scripts/changeset/cli.cjs +269 -0
  131. package/scripts/changeset/github-release-notes.cjs +198 -0
  132. package/scripts/changeset/lint.cjs +110 -0
  133. package/scripts/changeset/new.cjs +137 -0
  134. package/scripts/changeset/parse.cjs +60 -0
  135. package/scripts/changeset/render.cjs +34 -0
  136. package/scripts/changeset/serialize.cjs +74 -0
  137. package/scripts/command-contract-helpers.cjs +61 -0
  138. package/scripts/diff-touches-shipped-paths.cjs +147 -0
  139. package/scripts/fix-slash-commands.cjs +106 -0
  140. package/scripts/gen-inventory-manifest.cjs +109 -0
  141. package/scripts/lint-command-contract.cjs +108 -0
  142. package/scripts/lint-descriptions.cjs +83 -0
  143. package/scripts/lint-no-source-grep-extras.cjs +81 -0
  144. package/scripts/lint-no-source-grep.cjs +174 -0
  145. package/scripts/lint-shell-command-projection-drift.cjs +57 -0
  146. package/scripts/lint-skill-deps.cjs +180 -0
  147. package/scripts/pr-template-policy.cjs +169 -0
  148. package/scripts/prompt-injection-scan.sh +2 -0
  149. package/scripts/rebrand-gsd-to-sdd.sh +4 -3
  150. package/scripts/strip-prose-atrefs.cjs +106 -0
  151. package/scripts/verify-tarball-sdk-dist.sh +69 -0
  152. package/sdd/bin/check-latest-version.cjs +104 -0
  153. package/sdd/bin/lib/active-workstream-store.cjs +85 -0
  154. package/sdd/bin/lib/adr-parser.cjs +394 -0
  155. package/sdd/bin/lib/artifacts.cjs +53 -0
  156. package/sdd/bin/lib/audit.cjs +755 -0
  157. package/sdd/bin/lib/cjs-command-router-adapter.cjs +39 -0
  158. package/sdd/bin/lib/clusters.cjs +135 -0
  159. package/sdd/bin/lib/command-aliases.generated.cjs +838 -0
  160. package/sdd/bin/lib/commands.cjs +108 -98
  161. package/sdd/bin/lib/config-schema.cjs +135 -0
  162. package/sdd/bin/lib/config.cjs +253 -68
  163. package/sdd/bin/lib/context-utilization.cjs +47 -0
  164. package/sdd/bin/lib/core.cjs +997 -607
  165. package/sdd/bin/lib/decisions.cjs +48 -0
  166. package/sdd/bin/lib/docs.cjs +36 -33
  167. package/sdd/bin/lib/drift.cjs +379 -0
  168. package/sdd/bin/lib/fallow-runner.cjs +109 -0
  169. package/sdd/bin/lib/frontmatter.cjs +19 -11
  170. package/sdd/bin/lib/gap-checker.cjs +197 -0
  171. package/sdd/bin/lib/graphify.cjs +577 -0
  172. package/sdd/bin/lib/init-command-router.cjs +70 -0
  173. package/sdd/bin/lib/init.cjs +603 -102
  174. package/sdd/bin/lib/install-profiles.cjs +572 -0
  175. package/sdd/bin/lib/installer-migration-authoring.cjs +117 -0
  176. package/sdd/bin/lib/installer-migration-report.cjs +328 -0
  177. package/sdd/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
  178. package/sdd/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
  179. package/sdd/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
  180. package/sdd/bin/lib/installer-migrations.cjs +703 -0
  181. package/sdd/bin/lib/intel.cjs +35 -52
  182. package/sdd/bin/lib/learnings.cjs +2 -1
  183. package/sdd/bin/lib/milestone.cjs +313 -283
  184. package/sdd/bin/lib/model-catalog.cjs +136 -0
  185. package/sdd/bin/lib/model-profiles.cjs +25 -70
  186. package/sdd/bin/lib/phase-command-router.cjs +96 -0
  187. package/sdd/bin/lib/phase.cjs +556 -102
  188. package/sdd/bin/lib/phases-command-router.cjs +39 -0
  189. package/sdd/bin/lib/plan-scan.cjs +138 -0
  190. package/sdd/bin/lib/planning-workspace.cjs +361 -0
  191. package/sdd/bin/lib/profile-output.cjs +109 -43
  192. package/sdd/bin/lib/profile-pipeline.cjs +1 -1
  193. package/sdd/bin/lib/review-reviewer-selection.cjs +125 -0
  194. package/sdd/bin/lib/roadmap-command-router.cjs +23 -0
  195. package/sdd/bin/lib/roadmap.cjs +278 -17
  196. package/sdd/bin/lib/runtime-homes.cjs +178 -0
  197. package/sdd/bin/lib/sdd2-import.cjs +3 -3
  198. package/sdd/bin/lib/secrets.cjs +33 -0
  199. package/sdd/bin/lib/security.cjs +8 -7
  200. package/sdd/bin/lib/shell-command-projection.cjs +548 -0
  201. package/sdd/bin/lib/state-command-router.cjs +100 -0
  202. package/sdd/bin/lib/state-document.cjs +12 -0
  203. package/sdd/bin/lib/state-document.generated.cjs +127 -0
  204. package/sdd/bin/lib/state.cjs +720 -218
  205. package/sdd/bin/lib/surface.cjs +398 -0
  206. package/sdd/bin/lib/template.cjs +4 -2
  207. package/sdd/bin/lib/uat.cjs +9 -2
  208. package/sdd/bin/lib/validate-command-router.cjs +55 -0
  209. package/sdd/bin/lib/verify-command-router.cjs +34 -0
  210. package/sdd/bin/lib/verify.cjs +464 -137
  211. package/sdd/bin/lib/workstream-inventory.cjs +159 -0
  212. package/sdd/bin/lib/workstream-name-policy.cjs +33 -0
  213. package/sdd/bin/lib/workstream.cjs +73 -195
  214. package/sdd/bin/lib/worktree-safety.cjs +563 -0
  215. package/sdd/bin/sdd-tools.cjs +386 -252
  216. package/sdd/bin/verify-reapply-patches.cjs +247 -0
  217. package/sdd/contexts/review.md +1 -0
  218. package/sdd/references/artifact-types.md +18 -0
  219. package/sdd/references/autonomous-smart-discuss.md +277 -0
  220. package/sdd/references/checkpoints.md +36 -0
  221. package/sdd/references/context-budget.md +85 -49
  222. package/sdd/references/continuation-format.md +26 -22
  223. package/sdd/references/debugger-philosophy.md +76 -0
  224. package/sdd/references/decimal-phase-calculation.md +5 -5
  225. package/sdd/references/doc-conflict-engine.md +91 -0
  226. package/sdd/references/domain-probes.md +1 -1
  227. package/sdd/references/execute-mvp-tdd.md +81 -0
  228. package/sdd/references/executor-examples.md +110 -0
  229. package/sdd/references/gate-prompts.md +2 -2
  230. package/sdd/references/git-integration.md +10 -7
  231. package/sdd/references/git-planning-commit.md +6 -4
  232. package/sdd/references/mandatory-initial-read.md +2 -0
  233. package/sdd/references/model-profiles.md +106 -6
  234. package/sdd/references/mvp-concepts.md +49 -0
  235. package/sdd/references/phase-argument-parsing.md +3 -3
  236. package/sdd/references/planner-antipatterns.md +89 -0
  237. package/sdd/references/planner-chunked.md +49 -0
  238. package/sdd/references/planner-human-verify-mode.md +57 -0
  239. package/sdd/references/planner-mvp-mode.md +53 -0
  240. package/sdd/references/planner-revision.md +1 -1
  241. package/sdd/references/planner-source-audit.md +73 -0
  242. package/sdd/references/planning-config.md +30 -13
  243. package/sdd/references/project-skills-discovery.md +19 -0
  244. package/sdd/references/scout-codebase.md +51 -0
  245. package/sdd/references/skeleton-template.md +48 -0
  246. package/sdd/references/sketch-interactivity.md +41 -0
  247. package/sdd/references/sketch-theme-system.md +94 -0
  248. package/sdd/references/sketch-tooling.md +45 -0
  249. package/sdd/references/sketch-variant-patterns.md +81 -0
  250. package/sdd/references/spidr-splitting.md +69 -0
  251. package/sdd/references/tdd.md +67 -0
  252. package/sdd/references/thinking-partner.md +1 -1
  253. package/sdd/references/universal-anti-patterns.md +4 -4
  254. package/sdd/references/user-story-template.md +58 -0
  255. package/sdd/references/verification-overrides.md +3 -3
  256. package/sdd/references/verify-mvp-mode.md +85 -0
  257. package/sdd/references/workstream-flag.md +11 -11
  258. package/sdd/references/worktree-path-safety.md +89 -0
  259. package/sdd/templates/AI-SPEC.md +1 -1
  260. package/sdd/templates/DEBUG.md +8 -3
  261. package/sdd/templates/README.md +77 -0
  262. package/sdd/templates/UAT.md +4 -4
  263. package/sdd/templates/VALIDATION.md +1 -1
  264. package/sdd/templates/claude-md.md +5 -5
  265. package/sdd/templates/config.json +16 -2
  266. package/sdd/templates/debug-subagent-prompt.md +1 -1
  267. package/sdd/templates/dev-preferences.md +1 -1
  268. package/sdd/templates/discovery.md +2 -2
  269. package/sdd/templates/phase-prompt.md +1 -1
  270. package/sdd/templates/planner-subagent-prompt.md +3 -3
  271. package/sdd/templates/project.md +1 -1
  272. package/sdd/templates/research.md +41 -1
  273. package/sdd/templates/spec.md +307 -0
  274. package/sdd/templates/state.md +9 -1
  275. package/sdd/workflows/add-backlog.md +90 -0
  276. package/sdd/workflows/add-phase.md +7 -7
  277. package/sdd/workflows/add-tests.md +12 -12
  278. package/sdd/workflows/add-todo.md +4 -4
  279. package/sdd/workflows/ai-integration-phase.md +26 -16
  280. package/sdd/workflows/analyze-dependencies.md +3 -3
  281. package/sdd/workflows/audit-fix.md +23 -3
  282. package/sdd/workflows/audit-milestone.md +37 -20
  283. package/sdd/workflows/audit-uat.md +3 -3
  284. package/sdd/workflows/autonomous.md +31 -301
  285. package/sdd/workflows/check-todos.md +6 -6
  286. package/sdd/workflows/cleanup.md +1 -1
  287. package/sdd/workflows/code-review-fix.md +20 -16
  288. package/sdd/workflows/code-review.md +114 -16
  289. package/sdd/workflows/complete-milestone.md +68 -15
  290. package/sdd/workflows/debug.md +231 -0
  291. package/sdd/workflows/diagnose-issues.md +8 -6
  292. package/sdd/workflows/discovery-phase.md +3 -3
  293. package/sdd/workflows/discuss-phase/modes/advisor.md +175 -0
  294. package/sdd/workflows/discuss-phase/modes/all.md +28 -0
  295. package/sdd/workflows/discuss-phase/modes/analyze.md +44 -0
  296. package/sdd/workflows/discuss-phase/modes/auto.md +56 -0
  297. package/sdd/workflows/discuss-phase/modes/batch.md +52 -0
  298. package/sdd/workflows/discuss-phase/modes/chain.md +97 -0
  299. package/sdd/workflows/discuss-phase/modes/default.md +141 -0
  300. package/sdd/workflows/discuss-phase/modes/power.md +44 -0
  301. package/sdd/workflows/discuss-phase/modes/text.md +55 -0
  302. package/sdd/workflows/discuss-phase/templates/checkpoint.json +18 -0
  303. package/sdd/workflows/discuss-phase/templates/context.md +136 -0
  304. package/sdd/workflows/discuss-phase/templates/discussion-log.md +50 -0
  305. package/sdd/workflows/discuss-phase-assumptions.md +24 -21
  306. package/sdd/workflows/discuss-phase-power.md +3 -3
  307. package/sdd/workflows/discuss-phase.md +203 -905
  308. package/sdd/workflows/do.md +25 -21
  309. package/sdd/workflows/docs-update.md +23 -17
  310. package/sdd/workflows/edit-phase.md +294 -0
  311. package/sdd/workflows/eval-review.md +7 -7
  312. package/sdd/workflows/execute-phase/steps/codebase-drift-gate.md +81 -0
  313. package/sdd/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  314. package/sdd/workflows/execute-phase/steps/post-merge-gate.md +116 -0
  315. package/sdd/workflows/execute-phase.md +650 -252
  316. package/sdd/workflows/execute-plan.md +75 -35
  317. package/sdd/workflows/explore.md +7 -3
  318. package/sdd/workflows/extract-learnings.md +242 -0
  319. package/sdd/workflows/fast.md +5 -5
  320. package/sdd/workflows/forensics.md +19 -6
  321. package/sdd/workflows/graduation.md +195 -0
  322. package/sdd/workflows/health.md +49 -7
  323. package/sdd/workflows/help.md +323 -149
  324. package/sdd/workflows/import.md +20 -43
  325. package/sdd/workflows/inbox.md +5 -5
  326. package/sdd/workflows/ingest-docs.md +339 -0
  327. package/sdd/workflows/insert-phase.md +33 -12
  328. package/sdd/workflows/list-phase-assumptions.md +2 -2
  329. package/sdd/workflows/list-workspaces.md +2 -2
  330. package/sdd/workflows/manager.md +38 -11
  331. package/sdd/workflows/map-codebase.md +87 -23
  332. package/sdd/workflows/milestone-summary.md +8 -8
  333. package/sdd/workflows/mvp-phase.md +221 -0
  334. package/sdd/workflows/new-milestone.md +163 -23
  335. package/sdd/workflows/new-project.md +254 -53
  336. package/sdd/workflows/new-workspace.md +8 -8
  337. package/sdd/workflows/next.md +85 -18
  338. package/sdd/workflows/note.md +2 -2
  339. package/sdd/workflows/pause-work.md +13 -9
  340. package/sdd/workflows/plan-milestone-gaps.md +18 -11
  341. package/sdd/workflows/plan-phase.md +767 -94
  342. package/sdd/workflows/plan-review-convergence.md +329 -0
  343. package/sdd/workflows/plant-seed.md +146 -89
  344. package/sdd/workflows/pr-branch.md +1 -1
  345. package/sdd/workflows/profile-user.md +15 -15
  346. package/sdd/workflows/progress.md +198 -56
  347. package/sdd/workflows/quick.md +318 -54
  348. package/{commands/sdd → sdd/workflows}/reapply-patches.md +102 -23
  349. package/sdd/workflows/remove-phase.md +10 -10
  350. package/sdd/workflows/remove-workspace.md +21 -6
  351. package/sdd/workflows/resume-project.md +26 -23
  352. package/sdd/workflows/review.md +151 -20
  353. package/sdd/workflows/scan.md +5 -3
  354. package/sdd/workflows/secure-phase.md +26 -13
  355. package/sdd/workflows/settings-advanced.md +579 -0
  356. package/sdd/workflows/settings-integrations.md +281 -0
  357. package/sdd/workflows/settings.md +202 -23
  358. package/sdd/workflows/ship.md +131 -16
  359. package/sdd/workflows/sketch-wrap-up.md +285 -0
  360. package/sdd/workflows/sketch.md +360 -0
  361. package/sdd/workflows/spec-phase.md +262 -0
  362. package/sdd/workflows/spike-wrap-up.md +306 -0
  363. package/sdd/workflows/spike.md +452 -0
  364. package/sdd/workflows/stats.md +21 -2
  365. package/sdd/workflows/sync-skills.md +182 -0
  366. package/sdd/workflows/thread.md +221 -0
  367. package/sdd/workflows/transition.md +52 -30
  368. package/sdd/workflows/ui-phase.md +37 -20
  369. package/sdd/workflows/ui-review.md +12 -10
  370. package/sdd/workflows/ultraplan-phase.md +198 -0
  371. package/sdd/workflows/undo.md +9 -9
  372. package/sdd/workflows/update.md +187 -17
  373. package/sdd/workflows/validate-phase.md +12 -10
  374. package/sdd/workflows/verify-phase.md +112 -27
  375. package/sdd/workflows/verify-work.md +97 -28
  376. package/sdk/dist/cli-transport.d.ts +19 -0
  377. package/sdk/dist/cli-transport.d.ts.map +1 -0
  378. package/sdk/dist/cli-transport.js +104 -0
  379. package/sdk/dist/cli-transport.js.map +1 -0
  380. package/sdk/dist/cli.d.ts +46 -0
  381. package/sdk/dist/cli.d.ts.map +1 -0
  382. package/sdk/dist/cli.js +511 -0
  383. package/sdk/dist/cli.js.map +1 -0
  384. package/sdk/dist/config.d.ts +84 -0
  385. package/sdk/dist/config.d.ts.map +1 -0
  386. package/sdk/dist/config.js +135 -0
  387. package/sdk/dist/config.js.map +1 -0
  388. package/sdk/dist/context-engine.d.ts +49 -0
  389. package/sdk/dist/context-engine.d.ts.map +1 -0
  390. package/sdk/dist/context-engine.js +142 -0
  391. package/sdk/dist/context-engine.js.map +1 -0
  392. package/sdk/dist/context-truncation.d.ts +33 -0
  393. package/sdk/dist/context-truncation.d.ts.map +1 -0
  394. package/sdk/dist/context-truncation.js +197 -0
  395. package/sdk/dist/context-truncation.js.map +1 -0
  396. package/sdk/dist/errors.d.ts +46 -0
  397. package/sdk/dist/errors.d.ts.map +1 -0
  398. package/sdk/dist/errors.js +64 -0
  399. package/sdk/dist/errors.js.map +1 -0
  400. package/sdk/dist/event-stream.d.ts +53 -0
  401. package/sdk/dist/event-stream.d.ts.map +1 -0
  402. package/sdk/dist/event-stream.js +321 -0
  403. package/sdk/dist/event-stream.js.map +1 -0
  404. package/sdk/dist/golden/capture.d.ts +15 -0
  405. package/sdk/dist/golden/capture.d.ts.map +1 -0
  406. package/sdk/dist/golden/capture.js +67 -0
  407. package/sdk/dist/golden/capture.js.map +1 -0
  408. package/sdk/dist/golden/golden-integration-covered.d.ts +6 -0
  409. package/sdk/dist/golden/golden-integration-covered.d.ts.map +1 -0
  410. package/sdk/dist/golden/golden-integration-covered.js +30 -0
  411. package/sdk/dist/golden/golden-integration-covered.js.map +1 -0
  412. package/sdk/dist/golden/golden-mutation-covered.d.ts +7 -0
  413. package/sdk/dist/golden/golden-mutation-covered.d.ts.map +1 -0
  414. package/sdk/dist/golden/golden-mutation-covered.js +17 -0
  415. package/sdk/dist/golden/golden-mutation-covered.js.map +1 -0
  416. package/sdk/dist/golden/golden-policy.d.ts +10 -0
  417. package/sdk/dist/golden/golden-policy.d.ts.map +1 -0
  418. package/sdk/dist/golden/golden-policy.js +98 -0
  419. package/sdk/dist/golden/golden-policy.js.map +1 -0
  420. package/sdk/dist/golden/init-golden-normalize.d.ts +8 -0
  421. package/sdk/dist/golden/init-golden-normalize.d.ts.map +1 -0
  422. package/sdk/dist/golden/init-golden-normalize.js +14 -0
  423. package/sdk/dist/golden/init-golden-normalize.js.map +1 -0
  424. package/sdk/dist/golden/read-only-golden-rows.d.ts +20 -0
  425. package/sdk/dist/golden/read-only-golden-rows.d.ts.map +1 -0
  426. package/sdk/dist/golden/read-only-golden-rows.js +67 -0
  427. package/sdk/dist/golden/read-only-golden-rows.js.map +1 -0
  428. package/sdk/dist/golden/registry-canonical-commands.d.ts +6 -0
  429. package/sdk/dist/golden/registry-canonical-commands.d.ts.map +1 -0
  430. package/sdk/dist/golden/registry-canonical-commands.js +30 -0
  431. package/sdk/dist/golden/registry-canonical-commands.js.map +1 -0
  432. package/sdk/dist/index.d.ts +125 -0
  433. package/sdk/dist/index.d.ts.map +1 -0
  434. package/sdk/dist/index.js +298 -0
  435. package/sdk/dist/index.js.map +1 -0
  436. package/sdk/dist/init-runner.d.ts +90 -0
  437. package/sdk/dist/init-runner.d.ts.map +1 -0
  438. package/sdk/dist/init-runner.js +613 -0
  439. package/sdk/dist/init-runner.js.map +1 -0
  440. package/sdk/dist/logger.d.ts +50 -0
  441. package/sdk/dist/logger.d.ts.map +1 -0
  442. package/sdk/dist/logger.js +70 -0
  443. package/sdk/dist/logger.js.map +1 -0
  444. package/sdk/dist/model-catalog.d.ts +31 -0
  445. package/sdk/dist/model-catalog.d.ts.map +1 -0
  446. package/sdk/dist/model-catalog.js +31 -0
  447. package/sdk/dist/model-catalog.js.map +1 -0
  448. package/sdk/dist/phase-prompt.d.ts +72 -0
  449. package/sdk/dist/phase-prompt.d.ts.map +1 -0
  450. package/sdk/dist/phase-prompt.js +213 -0
  451. package/sdk/dist/phase-prompt.js.map +1 -0
  452. package/sdk/dist/phase-runner.d.ts +145 -0
  453. package/sdk/dist/phase-runner.d.ts.map +1 -0
  454. package/sdk/dist/phase-runner.js +1206 -0
  455. package/sdk/dist/phase-runner.js.map +1 -0
  456. package/sdk/dist/plan-parser.d.ts +55 -0
  457. package/sdk/dist/plan-parser.d.ts.map +1 -0
  458. package/sdk/dist/plan-parser.js +389 -0
  459. package/sdk/dist/plan-parser.js.map +1 -0
  460. package/sdk/dist/planning-journal.d.ts +64 -0
  461. package/sdk/dist/planning-journal.d.ts.map +1 -0
  462. package/sdk/dist/planning-journal.js +88 -0
  463. package/sdk/dist/planning-journal.js.map +1 -0
  464. package/sdk/dist/planning-runtime.d.ts +67 -0
  465. package/sdk/dist/planning-runtime.d.ts.map +1 -0
  466. package/sdk/dist/planning-runtime.js +58 -0
  467. package/sdk/dist/planning-runtime.js.map +1 -0
  468. package/sdk/dist/prompt-builder.d.ts +44 -0
  469. package/sdk/dist/prompt-builder.d.ts.map +1 -0
  470. package/sdk/dist/prompt-builder.js +180 -0
  471. package/sdk/dist/prompt-builder.js.map +1 -0
  472. package/sdk/dist/prompt-sanitizer.d.ts +35 -0
  473. package/sdk/dist/prompt-sanitizer.d.ts.map +1 -0
  474. package/sdk/dist/prompt-sanitizer.js +101 -0
  475. package/sdk/dist/prompt-sanitizer.js.map +1 -0
  476. package/sdk/dist/query/active-workstream-store.d.ts +7 -0
  477. package/sdk/dist/query/active-workstream-store.d.ts.map +1 -0
  478. package/sdk/dist/query/active-workstream-store.js +56 -0
  479. package/sdk/dist/query/active-workstream-store.js.map +1 -0
  480. package/sdk/dist/query/agent-failure-classifier.d.ts +38 -0
  481. package/sdk/dist/query/agent-failure-classifier.d.ts.map +1 -0
  482. package/sdk/dist/query/agent-failure-classifier.js +83 -0
  483. package/sdk/dist/query/agent-failure-classifier.js.map +1 -0
  484. package/sdk/dist/query/audit-open.d.ts +46 -0
  485. package/sdk/dist/query/audit-open.d.ts.map +1 -0
  486. package/sdk/dist/query/audit-open.js +662 -0
  487. package/sdk/dist/query/audit-open.js.map +1 -0
  488. package/sdk/dist/query/check-auto-mode.d.ts +13 -0
  489. package/sdk/dist/query/check-auto-mode.d.ts.map +1 -0
  490. package/sdk/dist/query/check-auto-mode.js +40 -0
  491. package/sdk/dist/query/check-auto-mode.js.map +1 -0
  492. package/sdk/dist/query/check-completion.d.ts +10 -0
  493. package/sdk/dist/query/check-completion.d.ts.map +1 -0
  494. package/sdk/dist/query/check-completion.js +157 -0
  495. package/sdk/dist/query/check-completion.js.map +1 -0
  496. package/sdk/dist/query/check-decision-coverage.d.ts +33 -0
  497. package/sdk/dist/query/check-decision-coverage.d.ts.map +1 -0
  498. package/sdk/dist/query/check-decision-coverage.js +472 -0
  499. package/sdk/dist/query/check-decision-coverage.js.map +1 -0
  500. package/sdk/dist/query/check-gates.d.ts +10 -0
  501. package/sdk/dist/query/check-gates.d.ts.map +1 -0
  502. package/sdk/dist/query/check-gates.js +89 -0
  503. package/sdk/dist/query/check-gates.js.map +1 -0
  504. package/sdk/dist/query/check-ship-ready.d.ts +10 -0
  505. package/sdk/dist/query/check-ship-ready.d.ts.map +1 -0
  506. package/sdk/dist/query/check-ship-ready.js +93 -0
  507. package/sdk/dist/query/check-ship-ready.js.map +1 -0
  508. package/sdk/dist/query/check-verification-status.d.ts +10 -0
  509. package/sdk/dist/query/check-verification-status.d.ts.map +1 -0
  510. package/sdk/dist/query/check-verification-status.js +142 -0
  511. package/sdk/dist/query/check-verification-status.js.map +1 -0
  512. package/sdk/dist/query/command-aliases.generated.d.ts +31 -0
  513. package/sdk/dist/query/command-aliases.generated.d.ts.map +1 -0
  514. package/sdk/dist/query/command-aliases.generated.js +135 -0
  515. package/sdk/dist/query/command-aliases.generated.js.map +1 -0
  516. package/sdk/dist/query/command-catalog.d.ts +9 -0
  517. package/sdk/dist/query/command-catalog.d.ts.map +1 -0
  518. package/sdk/dist/query/command-catalog.js +17 -0
  519. package/sdk/dist/query/command-catalog.js.map +1 -0
  520. package/sdk/dist/query/command-definition.d.ts +19 -0
  521. package/sdk/dist/query/command-definition.d.ts.map +1 -0
  522. package/sdk/dist/query/command-definition.js +44 -0
  523. package/sdk/dist/query/command-definition.js.map +1 -0
  524. package/sdk/dist/query/command-family-handlers.d.ts +3 -0
  525. package/sdk/dist/query/command-family-handlers.d.ts.map +1 -0
  526. package/sdk/dist/query/command-family-handlers.js +94 -0
  527. package/sdk/dist/query/command-family-handlers.js.map +1 -0
  528. package/sdk/dist/query/command-manifest.d.ts +2 -0
  529. package/sdk/dist/query/command-manifest.d.ts.map +1 -0
  530. package/sdk/dist/query/command-manifest.init.d.ts +6 -0
  531. package/sdk/dist/query/command-manifest.init.d.ts.map +1 -0
  532. package/sdk/dist/query/command-manifest.init.js +23 -0
  533. package/sdk/dist/query/command-manifest.init.js.map +1 -0
  534. package/sdk/dist/query/command-manifest.js +17 -0
  535. package/sdk/dist/query/command-manifest.js.map +1 -0
  536. package/sdk/dist/query/command-manifest.non-family.d.ts +9 -0
  537. package/sdk/dist/query/command-manifest.non-family.d.ts.map +1 -0
  538. package/sdk/dist/query/command-manifest.non-family.js +59 -0
  539. package/sdk/dist/query/command-manifest.non-family.js.map +1 -0
  540. package/sdk/dist/query/command-manifest.phase.d.ts +6 -0
  541. package/sdk/dist/query/command-manifest.phase.d.ts.map +1 -0
  542. package/sdk/dist/query/command-manifest.phase.js +15 -0
  543. package/sdk/dist/query/command-manifest.phase.js.map +1 -0
  544. package/sdk/dist/query/command-manifest.phases.d.ts +7 -0
  545. package/sdk/dist/query/command-manifest.phases.d.ts.map +1 -0
  546. package/sdk/dist/query/command-manifest.phases.js +10 -0
  547. package/sdk/dist/query/command-manifest.phases.js.map +1 -0
  548. package/sdk/dist/query/command-manifest.roadmap.d.ts +6 -0
  549. package/sdk/dist/query/command-manifest.roadmap.d.ts.map +1 -0
  550. package/sdk/dist/query/command-manifest.roadmap.js +10 -0
  551. package/sdk/dist/query/command-manifest.roadmap.js.map +1 -0
  552. package/sdk/dist/query/command-manifest.state.d.ts +9 -0
  553. package/sdk/dist/query/command-manifest.state.d.ts.map +1 -0
  554. package/sdk/dist/query/command-manifest.state.js +30 -0
  555. package/sdk/dist/query/command-manifest.state.js.map +1 -0
  556. package/sdk/dist/query/command-manifest.types.d.ts +12 -0
  557. package/sdk/dist/query/command-manifest.types.d.ts.map +1 -0
  558. package/sdk/dist/query/command-manifest.types.js +2 -0
  559. package/sdk/dist/query/command-manifest.types.js.map +1 -0
  560. package/sdk/dist/query/command-manifest.validate.d.ts +6 -0
  561. package/sdk/dist/query/command-manifest.validate.d.ts.map +1 -0
  562. package/sdk/dist/query/command-manifest.validate.js +10 -0
  563. package/sdk/dist/query/command-manifest.validate.js.map +1 -0
  564. package/sdk/dist/query/command-manifest.verify.d.ts +6 -0
  565. package/sdk/dist/query/command-manifest.verify.d.ts.map +1 -0
  566. package/sdk/dist/query/command-manifest.verify.js +14 -0
  567. package/sdk/dist/query/command-manifest.verify.js.map +1 -0
  568. package/sdk/dist/query/command-static-catalog-domain.d.ts +3 -0
  569. package/sdk/dist/query/command-static-catalog-domain.d.ts.map +1 -0
  570. package/sdk/dist/query/command-static-catalog-domain.js +116 -0
  571. package/sdk/dist/query/command-static-catalog-domain.js.map +1 -0
  572. package/sdk/dist/query/command-static-catalog-foundation.d.ts +7 -0
  573. package/sdk/dist/query/command-static-catalog-foundation.d.ts.map +1 -0
  574. package/sdk/dist/query/command-static-catalog-foundation.js +98 -0
  575. package/sdk/dist/query/command-static-catalog-foundation.js.map +1 -0
  576. package/sdk/dist/query/command-topology.d.ts +32 -0
  577. package/sdk/dist/query/command-topology.d.ts.map +1 -0
  578. package/sdk/dist/query/command-topology.js +66 -0
  579. package/sdk/dist/query/command-topology.js.map +1 -0
  580. package/sdk/dist/query/commands-list.d.ts +14 -0
  581. package/sdk/dist/query/commands-list.d.ts.map +1 -0
  582. package/sdk/dist/query/commands-list.js +18 -0
  583. package/sdk/dist/query/commands-list.js.map +1 -0
  584. package/sdk/dist/query/commit.d.ts +79 -0
  585. package/sdk/dist/query/commit.d.ts.map +1 -0
  586. package/sdk/dist/query/commit.js +340 -0
  587. package/sdk/dist/query/commit.js.map +1 -0
  588. package/sdk/dist/query/config-gates.d.ts +12 -0
  589. package/sdk/dist/query/config-gates.d.ts.map +1 -0
  590. package/sdk/dist/query/config-gates.js +66 -0
  591. package/sdk/dist/query/config-gates.js.map +1 -0
  592. package/sdk/dist/query/config-mutation.d.ts +86 -0
  593. package/sdk/dist/query/config-mutation.d.ts.map +1 -0
  594. package/sdk/dist/query/config-mutation.js +518 -0
  595. package/sdk/dist/query/config-mutation.js.map +1 -0
  596. package/sdk/dist/query/config-query.d.ts +57 -0
  597. package/sdk/dist/query/config-query.d.ts.map +1 -0
  598. package/sdk/dist/query/config-query.js +208 -0
  599. package/sdk/dist/query/config-query.js.map +1 -0
  600. package/sdk/dist/query/config-schema.d.ts +36 -0
  601. package/sdk/dist/query/config-schema.d.ts.map +1 -0
  602. package/sdk/dist/query/config-schema.js +147 -0
  603. package/sdk/dist/query/config-schema.js.map +1 -0
  604. package/sdk/dist/query/decisions.d.ts +58 -0
  605. package/sdk/dist/query/decisions.d.ts.map +1 -0
  606. package/sdk/dist/query/decisions.js +161 -0
  607. package/sdk/dist/query/decisions.js.map +1 -0
  608. package/sdk/dist/query/detect-custom-files.d.ts +11 -0
  609. package/sdk/dist/query/detect-custom-files.d.ts.map +1 -0
  610. package/sdk/dist/query/detect-custom-files.js +89 -0
  611. package/sdk/dist/query/detect-custom-files.js.map +1 -0
  612. package/sdk/dist/query/detect-phase-type.d.ts +9 -0
  613. package/sdk/dist/query/detect-phase-type.d.ts.map +1 -0
  614. package/sdk/dist/query/detect-phase-type.js +124 -0
  615. package/sdk/dist/query/detect-phase-type.js.map +1 -0
  616. package/sdk/dist/query/docs-init.d.ts +26 -0
  617. package/sdk/dist/query/docs-init.d.ts.map +1 -0
  618. package/sdk/dist/query/docs-init.js +231 -0
  619. package/sdk/dist/query/docs-init.js.map +1 -0
  620. package/sdk/dist/query/fallow-audit.d.ts +44 -0
  621. package/sdk/dist/query/fallow-audit.d.ts.map +1 -0
  622. package/sdk/dist/query/fallow-audit.js +44 -0
  623. package/sdk/dist/query/fallow-audit.js.map +1 -0
  624. package/sdk/dist/query/frontmatter-mutation.d.ts +77 -0
  625. package/sdk/dist/query/frontmatter-mutation.d.ts.map +1 -0
  626. package/sdk/dist/query/frontmatter-mutation.js +317 -0
  627. package/sdk/dist/query/frontmatter-mutation.js.map +1 -0
  628. package/sdk/dist/query/frontmatter.d.ts +93 -0
  629. package/sdk/dist/query/frontmatter.d.ts.map +1 -0
  630. package/sdk/dist/query/frontmatter.js +365 -0
  631. package/sdk/dist/query/frontmatter.js.map +1 -0
  632. package/sdk/dist/query/helpers.d.ts +191 -0
  633. package/sdk/dist/query/helpers.d.ts.map +1 -0
  634. package/sdk/dist/query/helpers.js +613 -0
  635. package/sdk/dist/query/helpers.js.map +1 -0
  636. package/sdk/dist/query/index.d.ts +8 -0
  637. package/sdk/dist/query/index.d.ts.map +1 -0
  638. package/sdk/dist/query/index.js +6 -0
  639. package/sdk/dist/query/index.js.map +1 -0
  640. package/sdk/dist/query/init-complex.d.ts +47 -0
  641. package/sdk/dist/query/init-complex.d.ts.map +1 -0
  642. package/sdk/dist/query/init-complex.js +718 -0
  643. package/sdk/dist/query/init-complex.js.map +1 -0
  644. package/sdk/dist/query/init.d.ts +106 -0
  645. package/sdk/dist/query/init.d.ts.map +1 -0
  646. package/sdk/dist/query/init.js +1159 -0
  647. package/sdk/dist/query/init.js.map +1 -0
  648. package/sdk/dist/query/intel.d.ts +43 -0
  649. package/sdk/dist/query/intel.d.ts.map +1 -0
  650. package/sdk/dist/query/intel.js +416 -0
  651. package/sdk/dist/query/intel.js.map +1 -0
  652. package/sdk/dist/query/mutation-event-decorator.d.ts +5 -0
  653. package/sdk/dist/query/mutation-event-decorator.d.ts.map +1 -0
  654. package/sdk/dist/query/mutation-event-decorator.js +28 -0
  655. package/sdk/dist/query/mutation-event-decorator.js.map +1 -0
  656. package/sdk/dist/query/mutation-event-mapper.d.ts +4 -0
  657. package/sdk/dist/query/mutation-event-mapper.d.ts.map +1 -0
  658. package/sdk/dist/query/mutation-event-mapper.js +70 -0
  659. package/sdk/dist/query/mutation-event-mapper.js.map +1 -0
  660. package/sdk/dist/query/mvp.d.ts +113 -0
  661. package/sdk/dist/query/mvp.d.ts.map +1 -0
  662. package/sdk/dist/query/mvp.js +225 -0
  663. package/sdk/dist/query/mvp.js.map +1 -0
  664. package/sdk/dist/query/phase-filesystem-adapter.d.ts +4 -0
  665. package/sdk/dist/query/phase-filesystem-adapter.d.ts.map +1 -0
  666. package/sdk/dist/query/phase-filesystem-adapter.js +33 -0
  667. package/sdk/dist/query/phase-filesystem-adapter.js.map +1 -0
  668. package/sdk/dist/query/phase-lifecycle-policy.d.ts +34 -0
  669. package/sdk/dist/query/phase-lifecycle-policy.d.ts.map +1 -0
  670. package/sdk/dist/query/phase-lifecycle-policy.js +138 -0
  671. package/sdk/dist/query/phase-lifecycle-policy.js.map +1 -0
  672. package/sdk/dist/query/phase-lifecycle.d.ts +116 -0
  673. package/sdk/dist/query/phase-lifecycle.d.ts.map +1 -0
  674. package/sdk/dist/query/phase-lifecycle.js +1486 -0
  675. package/sdk/dist/query/phase-lifecycle.js.map +1 -0
  676. package/sdk/dist/query/phase-list-queries.d.ts +18 -0
  677. package/sdk/dist/query/phase-list-queries.d.ts.map +1 -0
  678. package/sdk/dist/query/phase-list-queries.js +129 -0
  679. package/sdk/dist/query/phase-list-queries.js.map +1 -0
  680. package/sdk/dist/query/phase-ready.d.ts +9 -0
  681. package/sdk/dist/query/phase-ready.d.ts.map +1 -0
  682. package/sdk/dist/query/phase-ready.js +132 -0
  683. package/sdk/dist/query/phase-ready.js.map +1 -0
  684. package/sdk/dist/query/phase-roadmap-mutation.d.ts +13 -0
  685. package/sdk/dist/query/phase-roadmap-mutation.d.ts.map +1 -0
  686. package/sdk/dist/query/phase-roadmap-mutation.js +65 -0
  687. package/sdk/dist/query/phase-roadmap-mutation.js.map +1 -0
  688. package/sdk/dist/query/phase.d.ts +48 -0
  689. package/sdk/dist/query/phase.d.ts.map +1 -0
  690. package/sdk/dist/query/phase.js +451 -0
  691. package/sdk/dist/query/phase.js.map +1 -0
  692. package/sdk/dist/query/pipeline.d.ts +53 -0
  693. package/sdk/dist/query/pipeline.d.ts.map +1 -0
  694. package/sdk/dist/query/pipeline.js +198 -0
  695. package/sdk/dist/query/pipeline.js.map +1 -0
  696. package/sdk/dist/query/plan-scan.d.ts +14 -0
  697. package/sdk/dist/query/plan-scan.d.ts.map +1 -0
  698. package/sdk/dist/query/plan-scan.js +70 -0
  699. package/sdk/dist/query/plan-scan.js.map +1 -0
  700. package/sdk/dist/query/plan-task-structure.d.ts +9 -0
  701. package/sdk/dist/query/plan-task-structure.d.ts.map +1 -0
  702. package/sdk/dist/query/plan-task-structure.js +59 -0
  703. package/sdk/dist/query/plan-task-structure.js.map +1 -0
  704. package/sdk/dist/query/profile-extract-messages.d.ts +40 -0
  705. package/sdk/dist/query/profile-extract-messages.d.ts.map +1 -0
  706. package/sdk/dist/query/profile-extract-messages.js +195 -0
  707. package/sdk/dist/query/profile-extract-messages.js.map +1 -0
  708. package/sdk/dist/query/profile-output.d.ts +11 -0
  709. package/sdk/dist/query/profile-output.d.ts.map +1 -0
  710. package/sdk/dist/query/profile-output.js +873 -0
  711. package/sdk/dist/query/profile-output.js.map +1 -0
  712. package/sdk/dist/query/profile-questionnaire-data.d.ts +21 -0
  713. package/sdk/dist/query/profile-questionnaire-data.d.ts.map +1 -0
  714. package/sdk/dist/query/profile-questionnaire-data.js +171 -0
  715. package/sdk/dist/query/profile-questionnaire-data.js.map +1 -0
  716. package/sdk/dist/query/profile-sample.d.ts +22 -0
  717. package/sdk/dist/query/profile-sample.d.ts.map +1 -0
  718. package/sdk/dist/query/profile-sample.js +136 -0
  719. package/sdk/dist/query/profile-sample.js.map +1 -0
  720. package/sdk/dist/query/profile-scan-sessions.d.ts +49 -0
  721. package/sdk/dist/query/profile-scan-sessions.d.ts.map +1 -0
  722. package/sdk/dist/query/profile-scan-sessions.js +137 -0
  723. package/sdk/dist/query/profile-scan-sessions.js.map +1 -0
  724. package/sdk/dist/query/profile.d.ts +61 -0
  725. package/sdk/dist/query/profile.d.ts.map +1 -0
  726. package/sdk/dist/query/profile.js +307 -0
  727. package/sdk/dist/query/profile.js.map +1 -0
  728. package/sdk/dist/query/progress.d.ts +77 -0
  729. package/sdk/dist/query/progress.d.ts.map +1 -0
  730. package/sdk/dist/query/progress.js +481 -0
  731. package/sdk/dist/query/progress.js.map +1 -0
  732. package/sdk/dist/query/query-cli-adapter.d.ts +8 -0
  733. package/sdk/dist/query/query-cli-adapter.d.ts.map +1 -0
  734. package/sdk/dist/query/query-cli-adapter.js +32 -0
  735. package/sdk/dist/query/query-cli-adapter.js.map +1 -0
  736. package/sdk/dist/query/query-cli-output.d.ts +9 -0
  737. package/sdk/dist/query/query-cli-output.d.ts.map +1 -0
  738. package/sdk/dist/query/query-cli-output.js +28 -0
  739. package/sdk/dist/query/query-cli-output.js.map +1 -0
  740. package/sdk/dist/query/query-command-diagnosis.d.ts +6 -0
  741. package/sdk/dist/query/query-command-diagnosis.d.ts.map +1 -0
  742. package/sdk/dist/query/query-command-diagnosis.js +6 -0
  743. package/sdk/dist/query/query-command-diagnosis.js.map +1 -0
  744. package/sdk/dist/query/query-command-resolution-strategy.d.ts +29 -0
  745. package/sdk/dist/query/query-command-resolution-strategy.d.ts.map +1 -0
  746. package/sdk/dist/query/query-command-resolution-strategy.js +103 -0
  747. package/sdk/dist/query/query-command-resolution-strategy.js.map +1 -0
  748. package/sdk/dist/query/query-command-semantics.d.ts +7 -0
  749. package/sdk/dist/query/query-command-semantics.d.ts.map +1 -0
  750. package/sdk/dist/query/query-command-semantics.js +7 -0
  751. package/sdk/dist/query/query-command-semantics.js.map +1 -0
  752. package/sdk/dist/query/query-dispatch-contract.d.ts +21 -0
  753. package/sdk/dist/query/query-dispatch-contract.d.ts.map +1 -0
  754. package/sdk/dist/query/query-dispatch-contract.js +2 -0
  755. package/sdk/dist/query/query-dispatch-contract.js.map +1 -0
  756. package/sdk/dist/query/query-dispatch-error-mapper.d.ts +6 -0
  757. package/sdk/dist/query/query-dispatch-error-mapper.d.ts.map +1 -0
  758. package/sdk/dist/query/query-dispatch-error-mapper.js +6 -0
  759. package/sdk/dist/query/query-dispatch-error-mapper.js.map +1 -0
  760. package/sdk/dist/query/query-dispatch-formatting.d.ts +6 -0
  761. package/sdk/dist/query/query-dispatch-formatting.d.ts.map +1 -0
  762. package/sdk/dist/query/query-dispatch-formatting.js +6 -0
  763. package/sdk/dist/query/query-dispatch-formatting.js.map +1 -0
  764. package/sdk/dist/query/query-dispatch-input-validation.d.ts +6 -0
  765. package/sdk/dist/query/query-dispatch-input-validation.d.ts.map +1 -0
  766. package/sdk/dist/query/query-dispatch-input-validation.js +6 -0
  767. package/sdk/dist/query/query-dispatch-input-validation.js.map +1 -0
  768. package/sdk/dist/query/query-dispatch-observability.d.ts +2 -0
  769. package/sdk/dist/query/query-dispatch-observability.d.ts.map +1 -0
  770. package/sdk/dist/query/query-dispatch-observability.js +7 -0
  771. package/sdk/dist/query/query-dispatch-observability.js.map +1 -0
  772. package/sdk/dist/query/query-dispatch-plan.d.ts +6 -0
  773. package/sdk/dist/query/query-dispatch-plan.d.ts.map +1 -0
  774. package/sdk/dist/query/query-dispatch-plan.js +6 -0
  775. package/sdk/dist/query/query-dispatch-plan.js.map +1 -0
  776. package/sdk/dist/query/query-dispatch-result-builder.d.ts +6 -0
  777. package/sdk/dist/query/query-dispatch-result-builder.d.ts.map +1 -0
  778. package/sdk/dist/query/query-dispatch-result-builder.js +6 -0
  779. package/sdk/dist/query/query-dispatch-result-builder.js.map +1 -0
  780. package/sdk/dist/query/query-dispatch.d.ts +48 -0
  781. package/sdk/dist/query/query-dispatch.d.ts.map +1 -0
  782. package/sdk/dist/query/query-dispatch.js +175 -0
  783. package/sdk/dist/query/query-dispatch.js.map +1 -0
  784. package/sdk/dist/query/query-error-details-schema.d.ts +19 -0
  785. package/sdk/dist/query/query-error-details-schema.d.ts.map +1 -0
  786. package/sdk/dist/query/query-error-details-schema.js +10 -0
  787. package/sdk/dist/query/query-error-details-schema.js.map +1 -0
  788. package/sdk/dist/query/query-error-taxonomy.d.ts +38 -0
  789. package/sdk/dist/query/query-error-taxonomy.d.ts.map +1 -0
  790. package/sdk/dist/query/query-error-taxonomy.js +74 -0
  791. package/sdk/dist/query/query-error-taxonomy.js.map +1 -0
  792. package/sdk/dist/query/query-fallback-bridge-adapter.d.ts +14 -0
  793. package/sdk/dist/query/query-fallback-bridge-adapter.d.ts.map +1 -0
  794. package/sdk/dist/query/query-fallback-bridge-adapter.js +33 -0
  795. package/sdk/dist/query/query-fallback-bridge-adapter.js.map +1 -0
  796. package/sdk/dist/query/query-fallback-executor.d.ts +11 -0
  797. package/sdk/dist/query/query-fallback-executor.d.ts.map +1 -0
  798. package/sdk/dist/query/query-fallback-executor.js +31 -0
  799. package/sdk/dist/query/query-fallback-executor.js.map +1 -0
  800. package/sdk/dist/query/query-fallback-output-classifier.d.ts +6 -0
  801. package/sdk/dist/query/query-fallback-output-classifier.d.ts.map +1 -0
  802. package/sdk/dist/query/query-fallback-output-classifier.js +27 -0
  803. package/sdk/dist/query/query-fallback-output-classifier.js.map +1 -0
  804. package/sdk/dist/query/query-fallback-policy.d.ts +6 -0
  805. package/sdk/dist/query/query-fallback-policy.d.ts.map +1 -0
  806. package/sdk/dist/query/query-fallback-policy.js +7 -0
  807. package/sdk/dist/query/query-fallback-policy.js.map +1 -0
  808. package/sdk/dist/query/query-native-dispatch-adapter.d.ts +7 -0
  809. package/sdk/dist/query/query-native-dispatch-adapter.d.ts.map +1 -0
  810. package/sdk/dist/query/query-native-dispatch-adapter.js +6 -0
  811. package/sdk/dist/query/query-native-dispatch-adapter.js.map +1 -0
  812. package/sdk/dist/query/query-policy-capability.d.ts +10 -0
  813. package/sdk/dist/query/query-policy-capability.d.ts.map +1 -0
  814. package/sdk/dist/query/query-policy-capability.js +17 -0
  815. package/sdk/dist/query/query-policy-capability.js.map +1 -0
  816. package/sdk/dist/query/query-runtime-context.d.ts +19 -0
  817. package/sdk/dist/query/query-runtime-context.d.ts.map +1 -0
  818. package/sdk/dist/query/query-runtime-context.js +31 -0
  819. package/sdk/dist/query/query-runtime-context.js.map +1 -0
  820. package/sdk/dist/query/query-unknown-command-hints.d.ts +2 -0
  821. package/sdk/dist/query/query-unknown-command-hints.d.ts.map +1 -0
  822. package/sdk/dist/query/query-unknown-command-hints.js +6 -0
  823. package/sdk/dist/query/query-unknown-command-hints.js.map +1 -0
  824. package/sdk/dist/query/registry-assembly-descriptor.d.ts +12 -0
  825. package/sdk/dist/query/registry-assembly-descriptor.d.ts.map +1 -0
  826. package/sdk/dist/query/registry-assembly-descriptor.js +61 -0
  827. package/sdk/dist/query/registry-assembly-descriptor.js.map +1 -0
  828. package/sdk/dist/query/registry-assembly-invariants.d.ts +30 -0
  829. package/sdk/dist/query/registry-assembly-invariants.d.ts.map +1 -0
  830. package/sdk/dist/query/registry-assembly-invariants.js +77 -0
  831. package/sdk/dist/query/registry-assembly-invariants.js.map +1 -0
  832. package/sdk/dist/query/registry-assembly.d.ts +10 -0
  833. package/sdk/dist/query/registry-assembly.d.ts.map +1 -0
  834. package/sdk/dist/query/registry-assembly.js +53 -0
  835. package/sdk/dist/query/registry-assembly.js.map +1 -0
  836. package/sdk/dist/query/registry.d.ts +90 -0
  837. package/sdk/dist/query/registry.d.ts.map +1 -0
  838. package/sdk/dist/query/registry.js +129 -0
  839. package/sdk/dist/query/registry.js.map +1 -0
  840. package/sdk/dist/query/requirements-extract-from-plans.d.ts +9 -0
  841. package/sdk/dist/query/requirements-extract-from-plans.d.ts.map +1 -0
  842. package/sdk/dist/query/requirements-extract-from-plans.js +76 -0
  843. package/sdk/dist/query/requirements-extract-from-plans.js.map +1 -0
  844. package/sdk/dist/query/roadmap-update-plan-progress.d.ts +11 -0
  845. package/sdk/dist/query/roadmap-update-plan-progress.d.ts.map +1 -0
  846. package/sdk/dist/query/roadmap-update-plan-progress.js +124 -0
  847. package/sdk/dist/query/roadmap-update-plan-progress.js.map +1 -0
  848. package/sdk/dist/query/roadmap.d.ts +137 -0
  849. package/sdk/dist/query/roadmap.d.ts.map +1 -0
  850. package/sdk/dist/query/roadmap.js +753 -0
  851. package/sdk/dist/query/roadmap.js.map +1 -0
  852. package/sdk/dist/query/route-next-action.d.ts +9 -0
  853. package/sdk/dist/query/route-next-action.d.ts.map +1 -0
  854. package/sdk/dist/query/route-next-action.js +318 -0
  855. package/sdk/dist/query/route-next-action.js.map +1 -0
  856. package/sdk/dist/query/schema-detect.d.ts +21 -0
  857. package/sdk/dist/query/schema-detect.d.ts.map +1 -0
  858. package/sdk/dist/query/schema-detect.js +146 -0
  859. package/sdk/dist/query/schema-detect.js.map +1 -0
  860. package/sdk/dist/query/secrets.d.ts +27 -0
  861. package/sdk/dist/query/secrets.d.ts.map +1 -0
  862. package/sdk/dist/query/secrets.js +42 -0
  863. package/sdk/dist/query/secrets.js.map +1 -0
  864. package/sdk/dist/query/skill-manifest.d.ts +50 -0
  865. package/sdk/dist/query/skill-manifest.d.ts.map +1 -0
  866. package/sdk/dist/query/skill-manifest.js +171 -0
  867. package/sdk/dist/query/skill-manifest.js.map +1 -0
  868. package/sdk/dist/query/skills.d.ts +27 -0
  869. package/sdk/dist/query/skills.d.ts.map +1 -0
  870. package/sdk/dist/query/skills.js +137 -0
  871. package/sdk/dist/query/skills.js.map +1 -0
  872. package/sdk/dist/query/state-document.d.ts +14 -0
  873. package/sdk/dist/query/state-document.d.ts.map +1 -0
  874. package/sdk/dist/query/state-document.js +110 -0
  875. package/sdk/dist/query/state-document.js.map +1 -0
  876. package/sdk/dist/query/state-mutation.d.ts +224 -0
  877. package/sdk/dist/query/state-mutation.d.ts.map +1 -0
  878. package/sdk/dist/query/state-mutation.js +1539 -0
  879. package/sdk/dist/query/state-mutation.js.map +1 -0
  880. package/sdk/dist/query/state-project-load.d.ts +23 -0
  881. package/sdk/dist/query/state-project-load.d.ts.map +1 -0
  882. package/sdk/dist/query/state-project-load.js +75 -0
  883. package/sdk/dist/query/state-project-load.js.map +1 -0
  884. package/sdk/dist/query/state.d.ts +78 -0
  885. package/sdk/dist/query/state.d.ts.map +1 -0
  886. package/sdk/dist/query/state.js +430 -0
  887. package/sdk/dist/query/state.js.map +1 -0
  888. package/sdk/dist/query/summary.d.ts +18 -0
  889. package/sdk/dist/query/summary.d.ts.map +1 -0
  890. package/sdk/dist/query/summary.js +249 -0
  891. package/sdk/dist/query/summary.js.map +1 -0
  892. package/sdk/dist/query/template.d.ts +46 -0
  893. package/sdk/dist/query/template.d.ts.map +1 -0
  894. package/sdk/dist/query/template.js +210 -0
  895. package/sdk/dist/query/template.js.map +1 -0
  896. package/sdk/dist/query/uat.d.ts +34 -0
  897. package/sdk/dist/query/uat.d.ts.map +1 -0
  898. package/sdk/dist/query/uat.js +339 -0
  899. package/sdk/dist/query/uat.js.map +1 -0
  900. package/sdk/dist/query/utils.d.ts +59 -0
  901. package/sdk/dist/query/utils.d.ts.map +1 -0
  902. package/sdk/dist/query/utils.js +74 -0
  903. package/sdk/dist/query/utils.js.map +1 -0
  904. package/sdk/dist/query/validate.d.ts +67 -0
  905. package/sdk/dist/query/validate.d.ts.map +1 -0
  906. package/sdk/dist/query/validate.js +908 -0
  907. package/sdk/dist/query/validate.js.map +1 -0
  908. package/sdk/dist/query/verify.d.ts +110 -0
  909. package/sdk/dist/query/verify.d.ts.map +1 -0
  910. package/sdk/dist/query/verify.js +631 -0
  911. package/sdk/dist/query/verify.js.map +1 -0
  912. package/sdk/dist/query/websearch.d.ts +24 -0
  913. package/sdk/dist/query/websearch.d.ts.map +1 -0
  914. package/sdk/dist/query/websearch.js +68 -0
  915. package/sdk/dist/query/websearch.js.map +1 -0
  916. package/sdk/dist/query/workspace.d.ts +62 -0
  917. package/sdk/dist/query/workspace.d.ts.map +1 -0
  918. package/sdk/dist/query/workspace.js +104 -0
  919. package/sdk/dist/query/workspace.js.map +1 -0
  920. package/sdk/dist/query/workstream-inventory.d.ts +52 -0
  921. package/sdk/dist/query/workstream-inventory.d.ts.map +1 -0
  922. package/sdk/dist/query/workstream-inventory.js +141 -0
  923. package/sdk/dist/query/workstream-inventory.js.map +1 -0
  924. package/sdk/dist/query/workstream.d.ts +35 -0
  925. package/sdk/dist/query/workstream.d.ts.map +1 -0
  926. package/sdk/dist/query/workstream.js +298 -0
  927. package/sdk/dist/query/workstream.js.map +1 -0
  928. package/sdk/dist/query/worktree.d.ts +3 -0
  929. package/sdk/dist/query/worktree.d.ts.map +1 -0
  930. package/sdk/dist/query/worktree.js +36 -0
  931. package/sdk/dist/query/worktree.js.map +1 -0
  932. package/sdk/dist/query-command-executor.d.ts +22 -0
  933. package/sdk/dist/query-command-executor.d.ts.map +1 -0
  934. package/sdk/dist/query-command-executor.js +22 -0
  935. package/sdk/dist/query-command-executor.js.map +1 -0
  936. package/sdk/dist/query-execution-policy.d.ts +24 -0
  937. package/sdk/dist/query-execution-policy.d.ts.map +1 -0
  938. package/sdk/dist/query-execution-policy.js +27 -0
  939. package/sdk/dist/query-execution-policy.js.map +1 -0
  940. package/sdk/dist/query-failure-classification.d.ts +9 -0
  941. package/sdk/dist/query-failure-classification.d.ts.map +1 -0
  942. package/sdk/dist/query-failure-classification.js +32 -0
  943. package/sdk/dist/query-failure-classification.js.map +1 -0
  944. package/sdk/dist/query-hotpath-methods.d.ts +19 -0
  945. package/sdk/dist/query-hotpath-methods.d.ts.map +1 -0
  946. package/sdk/dist/query-hotpath-methods.js +34 -0
  947. package/sdk/dist/query-hotpath-methods.js.map +1 -0
  948. package/sdk/dist/query-native-direct-adapter.d.ts +20 -0
  949. package/sdk/dist/query-native-direct-adapter.d.ts.map +1 -0
  950. package/sdk/dist/query-native-direct-adapter.js +52 -0
  951. package/sdk/dist/query-native-direct-adapter.js.map +1 -0
  952. package/sdk/dist/query-native-hotpath-adapter.d.ts +15 -0
  953. package/sdk/dist/query-native-hotpath-adapter.d.ts.map +1 -0
  954. package/sdk/dist/query-native-hotpath-adapter.js +32 -0
  955. package/sdk/dist/query-native-hotpath-adapter.js.map +1 -0
  956. package/sdk/dist/query-raw-output-projection.d.ts +6 -0
  957. package/sdk/dist/query-raw-output-projection.d.ts.map +1 -0
  958. package/sdk/dist/query-raw-output-projection.js +67 -0
  959. package/sdk/dist/query-raw-output-projection.js.map +1 -0
  960. package/sdk/dist/query-runtime-bridge.d.ts +61 -0
  961. package/sdk/dist/query-runtime-bridge.d.ts.map +1 -0
  962. package/sdk/dist/query-runtime-bridge.js +144 -0
  963. package/sdk/dist/query-runtime-bridge.js.map +1 -0
  964. package/sdk/dist/query-sdd-tools-path.d.ts +2 -0
  965. package/sdk/dist/query-sdd-tools-path.d.ts.map +1 -0
  966. package/sdk/dist/query-sdd-tools-path.js +2 -0
  967. package/sdk/dist/query-sdd-tools-path.js.map +1 -0
  968. package/sdk/dist/query-sdd-tools-runtime.d.ts +20 -0
  969. package/sdk/dist/query-sdd-tools-runtime.d.ts.map +1 -0
  970. package/sdk/dist/query-sdd-tools-runtime.js +47 -0
  971. package/sdk/dist/query-sdd-tools-runtime.js.map +1 -0
  972. package/sdk/dist/query-subprocess-adapter.d.ts +18 -0
  973. package/sdk/dist/query-subprocess-adapter.d.ts.map +1 -0
  974. package/sdk/dist/query-subprocess-adapter.js +92 -0
  975. package/sdk/dist/query-subprocess-adapter.js.map +1 -0
  976. package/sdk/dist/query-tools-error-factory.d.ts +16 -0
  977. package/sdk/dist/query-tools-error-factory.d.ts.map +1 -0
  978. package/sdk/dist/query-tools-error-factory.js +33 -0
  979. package/sdk/dist/query-tools-error-factory.js.map +1 -0
  980. package/sdk/dist/research-gate.d.ts +24 -0
  981. package/sdk/dist/research-gate.d.ts.map +1 -0
  982. package/sdk/dist/research-gate.js +70 -0
  983. package/sdk/dist/research-gate.js.map +1 -0
  984. package/sdk/dist/runtime-gate.d.ts +14 -0
  985. package/sdk/dist/runtime-gate.d.ts.map +1 -0
  986. package/sdk/dist/runtime-gate.js +48 -0
  987. package/sdk/dist/runtime-gate.js.map +1 -0
  988. package/sdk/dist/sdd-tools-error.d.ts +23 -0
  989. package/sdk/dist/sdd-tools-error.d.ts.map +1 -0
  990. package/sdk/dist/sdd-tools-error.js +29 -0
  991. package/sdk/dist/sdd-tools-error.js.map +1 -0
  992. package/sdk/dist/sdd-tools.d.ts +97 -0
  993. package/sdk/dist/sdd-tools.d.ts.map +1 -0
  994. package/sdk/dist/sdd-tools.js +168 -0
  995. package/sdk/dist/sdd-tools.js.map +1 -0
  996. package/sdk/dist/sdd-transport-policy.d.ts +10 -0
  997. package/sdk/dist/sdd-transport-policy.d.ts.map +1 -0
  998. package/sdk/dist/sdd-transport-policy.js +32 -0
  999. package/sdk/dist/sdd-transport-policy.js.map +1 -0
  1000. package/sdk/dist/sdd-transport.d.ts +39 -0
  1001. package/sdk/dist/sdd-transport.d.ts.map +1 -0
  1002. package/sdk/dist/sdd-transport.js +78 -0
  1003. package/sdk/dist/sdd-transport.js.map +1 -0
  1004. package/sdk/dist/sdk-package-compatibility.d.ts +38 -0
  1005. package/sdk/dist/sdk-package-compatibility.d.ts.map +1 -0
  1006. package/sdk/dist/sdk-package-compatibility.js +90 -0
  1007. package/sdk/dist/sdk-package-compatibility.js.map +1 -0
  1008. package/sdk/dist/session-runner.d.ts +40 -0
  1009. package/sdk/dist/session-runner.d.ts.map +1 -0
  1010. package/sdk/dist/session-runner.js +274 -0
  1011. package/sdk/dist/session-runner.js.map +1 -0
  1012. package/sdk/dist/tool-scoping.d.ts +31 -0
  1013. package/sdk/dist/tool-scoping.d.ts.map +1 -0
  1014. package/sdk/dist/tool-scoping.js +54 -0
  1015. package/sdk/dist/tool-scoping.js.map +1 -0
  1016. package/sdk/dist/types.d.ts +794 -0
  1017. package/sdk/dist/types.d.ts.map +1 -0
  1018. package/sdk/dist/types.js +77 -0
  1019. package/sdk/dist/types.js.map +1 -0
  1020. package/sdk/dist/workstream-name-policy.d.ts +13 -0
  1021. package/sdk/dist/workstream-name-policy.d.ts.map +1 -0
  1022. package/sdk/dist/workstream-name-policy.js +24 -0
  1023. package/sdk/dist/workstream-name-policy.js.map +1 -0
  1024. package/sdk/dist/workstream-utils.d.ts +15 -0
  1025. package/sdk/dist/workstream-utils.d.ts.map +1 -0
  1026. package/sdk/dist/workstream-utils.js +21 -0
  1027. package/sdk/dist/workstream-utils.js.map +1 -0
  1028. package/sdk/dist/ws-transport.d.ts +32 -0
  1029. package/sdk/dist/ws-transport.d.ts.map +1 -0
  1030. package/sdk/dist/ws-transport.js +84 -0
  1031. package/sdk/dist/ws-transport.js.map +1 -0
  1032. package/sdk/package-lock.json +2502 -0
  1033. package/sdk/package.json +57 -0
  1034. package/sdk/prompts/templates/project.md +186 -0
  1035. package/sdk/prompts/templates/requirements.md +231 -0
  1036. package/sdk/prompts/templates/research-project/ARCHITECTURE.md +204 -0
  1037. package/sdk/prompts/templates/research-project/FEATURES.md +147 -0
  1038. package/sdk/prompts/templates/research-project/PITFALLS.md +200 -0
  1039. package/sdk/prompts/templates/research-project/STACK.md +120 -0
  1040. package/sdk/prompts/templates/research-project/SUMMARY.md +170 -0
  1041. package/sdk/prompts/templates/roadmap.md +202 -0
  1042. package/sdk/prompts/templates/state.md +175 -0
  1043. package/sdk/shared/model-catalog.json +122 -0
  1044. package/sdk/src/assembled-prompts.test.ts +349 -0
  1045. package/sdk/src/bug-3591-sddtools-runtime-workstream.test.ts +179 -0
  1046. package/sdk/src/cli-transport.test.ts +388 -0
  1047. package/sdk/src/cli-transport.ts +130 -0
  1048. package/sdk/src/cli.test.ts +426 -0
  1049. package/sdk/src/cli.ts +589 -0
  1050. package/sdk/src/config.test.ts +271 -0
  1051. package/sdk/src/config.ts +218 -0
  1052. package/sdk/src/context-engine.test.ts +295 -0
  1053. package/sdk/src/context-engine.ts +170 -0
  1054. package/sdk/src/context-truncation.test.ts +163 -0
  1055. package/sdk/src/context-truncation.ts +233 -0
  1056. package/sdk/src/e2e.integration.test.ts +181 -0
  1057. package/sdk/src/errors.ts +72 -0
  1058. package/sdk/src/event-stream.test.ts +661 -0
  1059. package/sdk/src/event-stream.ts +441 -0
  1060. package/sdk/src/golden/capture.ts +95 -0
  1061. package/sdk/src/golden/fixtures/generate-slug.golden.json +1 -0
  1062. package/sdk/src/golden/fixtures/profile-sample-sessions/demo-project/sample.jsonl +3 -0
  1063. package/sdk/src/golden/fixtures/summary-extract-sample.md +26 -0
  1064. package/sdk/src/golden/fixtures/uat-render-checkpoint-sample.md +15 -0
  1065. package/sdk/src/golden/golden-integration-covered.ts +30 -0
  1066. package/sdk/src/golden/golden-mutation-covered.ts +17 -0
  1067. package/sdk/src/golden/golden-policy.test.ts +8 -0
  1068. package/sdk/src/golden/golden-policy.ts +120 -0
  1069. package/sdk/src/golden/golden.integration.test.ts +677 -0
  1070. package/sdk/src/golden/init-golden-normalize.ts +15 -0
  1071. package/sdk/src/golden/read-only-golden-rows.ts +77 -0
  1072. package/sdk/src/golden/read-only-parity.integration.test.ts +133 -0
  1073. package/sdk/src/golden/registry-canonical-commands.ts +31 -0
  1074. package/sdk/src/index.ts +352 -0
  1075. package/sdk/src/init-e2e.integration.test.ts +138 -0
  1076. package/sdk/src/init-runner.test.ts +740 -0
  1077. package/sdk/src/init-runner.ts +734 -0
  1078. package/sdk/src/lifecycle-e2e.integration.test.ts +258 -0
  1079. package/sdk/src/logger.test.ts +149 -0
  1080. package/sdk/src/logger.ts +113 -0
  1081. package/sdk/src/milestone-runner.test.ts +421 -0
  1082. package/sdk/src/model-catalog.ts +70 -0
  1083. package/sdk/src/phase-prompt.test.ts +535 -0
  1084. package/sdk/src/phase-prompt.ts +259 -0
  1085. package/sdk/src/phase-runner-types.test.ts +421 -0
  1086. package/sdk/src/phase-runner.integration.test.ts +377 -0
  1087. package/sdk/src/phase-runner.test.ts +2720 -0
  1088. package/sdk/src/phase-runner.ts +1442 -0
  1089. package/sdk/src/plan-parser.test.ts +579 -0
  1090. package/sdk/src/plan-parser.ts +431 -0
  1091. package/sdk/src/planning-journal.test.ts +70 -0
  1092. package/sdk/src/planning-journal.ts +153 -0
  1093. package/sdk/src/planning-runtime.test.ts +29 -0
  1094. package/sdk/src/planning-runtime.ts +100 -0
  1095. package/sdk/src/prompt-builder.test.ts +318 -0
  1096. package/sdk/src/prompt-builder.ts +218 -0
  1097. package/sdk/src/prompt-sanitizer.test.ts +260 -0
  1098. package/sdk/src/prompt-sanitizer.ts +116 -0
  1099. package/sdk/src/query/QUERY-HANDLERS.md +349 -0
  1100. package/sdk/src/query/active-workstream-store.ts +50 -0
  1101. package/sdk/src/query/agent-failure-classifier.test.ts +157 -0
  1102. package/sdk/src/query/agent-failure-classifier.ts +105 -0
  1103. package/sdk/src/query/audit-open.ts +722 -0
  1104. package/sdk/src/query/check-auto-mode.test.ts +77 -0
  1105. package/sdk/src/query/check-auto-mode.ts +49 -0
  1106. package/sdk/src/query/check-completion.test.ts +113 -0
  1107. package/sdk/src/query/check-completion.ts +182 -0
  1108. package/sdk/src/query/check-decision-coverage.test.ts +519 -0
  1109. package/sdk/src/query/check-decision-coverage.ts +554 -0
  1110. package/sdk/src/query/check-gates.test.ts +103 -0
  1111. package/sdk/src/query/check-gates.ts +112 -0
  1112. package/sdk/src/query/check-ship-ready.test.ts +111 -0
  1113. package/sdk/src/query/check-ship-ready.ts +104 -0
  1114. package/sdk/src/query/check-verification-status.test.ts +143 -0
  1115. package/sdk/src/query/check-verification-status.ts +160 -0
  1116. package/sdk/src/query/command-aliases.generated.ts +156 -0
  1117. package/sdk/src/query/command-catalog.ts +31 -0
  1118. package/sdk/src/query/command-definition.test.ts +47 -0
  1119. package/sdk/src/query/command-definition.ts +70 -0
  1120. package/sdk/src/query/command-family-handlers.ts +117 -0
  1121. package/sdk/src/query/command-manifest.init.ts +24 -0
  1122. package/sdk/src/query/command-manifest.non-family.ts +85 -0
  1123. package/sdk/src/query/command-manifest.phase.ts +16 -0
  1124. package/sdk/src/query/command-manifest.phases.ts +11 -0
  1125. package/sdk/src/query/command-manifest.roadmap.ts +11 -0
  1126. package/sdk/src/query/command-manifest.state.ts +31 -0
  1127. package/sdk/src/query/command-manifest.ts +17 -0
  1128. package/sdk/src/query/command-manifest.types.ts +13 -0
  1129. package/sdk/src/query/command-manifest.validate.ts +11 -0
  1130. package/sdk/src/query/command-manifest.verify.ts +15 -0
  1131. package/sdk/src/query/command-resolution.test.ts +70 -0
  1132. package/sdk/src/query/command-seam-coverage.test.ts +118 -0
  1133. package/sdk/src/query/command-static-catalog-domain.ts +117 -0
  1134. package/sdk/src/query/command-static-catalog-foundation.ts +103 -0
  1135. package/sdk/src/query/command-topology.test.ts +28 -0
  1136. package/sdk/src/query/command-topology.ts +114 -0
  1137. package/sdk/src/query/commands-list.test.ts +36 -0
  1138. package/sdk/src/query/commands-list.ts +19 -0
  1139. package/sdk/src/query/commit.test.ts +485 -0
  1140. package/sdk/src/query/commit.ts +383 -0
  1141. package/sdk/src/query/config-gates.test.ts +89 -0
  1142. package/sdk/src/query/config-gates.ts +69 -0
  1143. package/sdk/src/query/config-mutation.test.ts +598 -0
  1144. package/sdk/src/query/config-mutation.ts +575 -0
  1145. package/sdk/src/query/config-query.test.ts +367 -0
  1146. package/sdk/src/query/config-query.ts +244 -0
  1147. package/sdk/src/query/config-schema.ts +159 -0
  1148. package/sdk/src/query/decisions.test.ts +215 -0
  1149. package/sdk/src/query/decisions.ts +192 -0
  1150. package/sdk/src/query/decomposed-handlers.test.ts +431 -0
  1151. package/sdk/src/query/detect-custom-files.test.ts +115 -0
  1152. package/sdk/src/query/detect-custom-files.ts +96 -0
  1153. package/sdk/src/query/detect-phase-type.test.ts +105 -0
  1154. package/sdk/src/query/detect-phase-type.ts +141 -0
  1155. package/sdk/src/query/docs-init.ts +258 -0
  1156. package/sdk/src/query/fallow-audit.ts +88 -0
  1157. package/sdk/src/query/frontmatter-array.test.ts +14 -0
  1158. package/sdk/src/query/frontmatter-mutation.test.ts +259 -0
  1159. package/sdk/src/query/frontmatter-mutation.ts +343 -0
  1160. package/sdk/src/query/frontmatter.test.ts +326 -0
  1161. package/sdk/src/query/frontmatter.ts +395 -0
  1162. package/sdk/src/query/helpers.test.ts +615 -0
  1163. package/sdk/src/query/helpers.ts +646 -0
  1164. package/sdk/src/query/index-thin-seam.test.ts +16 -0
  1165. package/sdk/src/query/index.ts +9 -0
  1166. package/sdk/src/query/init-complex.test.ts +616 -0
  1167. package/sdk/src/query/init-complex.ts +799 -0
  1168. package/sdk/src/query/init-progress-precedence.test.ts +177 -0
  1169. package/sdk/src/query/init-workstream-milestone-op.test.ts +321 -0
  1170. package/sdk/src/query/init.test.ts +792 -0
  1171. package/sdk/src/query/init.ts +1262 -0
  1172. package/sdk/src/query/intel.test.ts +90 -0
  1173. package/sdk/src/query/intel.ts +404 -0
  1174. package/sdk/src/query/mutation-event-decorator.test.ts +45 -0
  1175. package/sdk/src/query/mutation-event-decorator.ts +37 -0
  1176. package/sdk/src/query/mutation-event-mapper.test.ts +33 -0
  1177. package/sdk/src/query/mutation-event-mapper.ts +102 -0
  1178. package/sdk/src/query/mvp.test.ts +335 -0
  1179. package/sdk/src/query/mvp.ts +292 -0
  1180. package/sdk/src/query/normalize-query-command.test.ts +102 -0
  1181. package/sdk/src/query/phase-filesystem-adapter.ts +35 -0
  1182. package/sdk/src/query/phase-lifecycle-policy.ts +171 -0
  1183. package/sdk/src/query/phase-lifecycle.test.ts +1750 -0
  1184. package/sdk/src/query/phase-lifecycle.ts +1833 -0
  1185. package/sdk/src/query/phase-list-queries.test.ts +88 -0
  1186. package/sdk/src/query/phase-list-queries.ts +152 -0
  1187. package/sdk/src/query/phase-ready.test.ts +65 -0
  1188. package/sdk/src/query/phase-ready.ts +159 -0
  1189. package/sdk/src/query/phase-roadmap-mutation.ts +77 -0
  1190. package/sdk/src/query/phase.test.ts +651 -0
  1191. package/sdk/src/query/phase.ts +550 -0
  1192. package/sdk/src/query/pipeline.test.ts +169 -0
  1193. package/sdk/src/query/pipeline.ts +243 -0
  1194. package/sdk/src/query/plan-scan.test.ts +35 -0
  1195. package/sdk/src/query/plan-scan.ts +82 -0
  1196. package/sdk/src/query/plan-task-structure.test.ts +65 -0
  1197. package/sdk/src/query/plan-task-structure.ts +63 -0
  1198. package/sdk/src/query/policy-convergence.test.ts +28 -0
  1199. package/sdk/src/query/profile-extract-messages.ts +247 -0
  1200. package/sdk/src/query/profile-output.ts +929 -0
  1201. package/sdk/src/query/profile-questionnaire-data.ts +181 -0
  1202. package/sdk/src/query/profile-sample.ts +184 -0
  1203. package/sdk/src/query/profile-scan-sessions.ts +174 -0
  1204. package/sdk/src/query/profile.test.ts +136 -0
  1205. package/sdk/src/query/profile.ts +337 -0
  1206. package/sdk/src/query/progress.test.ts +156 -0
  1207. package/sdk/src/query/progress.ts +566 -0
  1208. package/sdk/src/query/query-cli-adapter.test.ts +79 -0
  1209. package/sdk/src/query/query-cli-adapter.ts +39 -0
  1210. package/sdk/src/query/query-cli-output.test.ts +33 -0
  1211. package/sdk/src/query/query-cli-output.ts +35 -0
  1212. package/sdk/src/query/query-command-diagnosis.test.ts +22 -0
  1213. package/sdk/src/query/query-command-diagnosis.ts +5 -0
  1214. package/sdk/src/query/query-command-resolution-strategy.test.ts +34 -0
  1215. package/sdk/src/query/query-command-resolution-strategy.ts +121 -0
  1216. package/sdk/src/query/query-command-semantics.test.ts +22 -0
  1217. package/sdk/src/query/query-command-semantics.ts +22 -0
  1218. package/sdk/src/query/query-dispatch-contract.ts +30 -0
  1219. package/sdk/src/query/query-dispatch-error-mapper.test.ts +62 -0
  1220. package/sdk/src/query/query-dispatch-error-mapper.ts +5 -0
  1221. package/sdk/src/query/query-dispatch-formatting.test.ts +28 -0
  1222. package/sdk/src/query/query-dispatch-formatting.ts +5 -0
  1223. package/sdk/src/query/query-dispatch-input-validation.test.ts +23 -0
  1224. package/sdk/src/query/query-dispatch-input-validation.ts +5 -0
  1225. package/sdk/src/query/query-dispatch-observability.test.ts +10 -0
  1226. package/sdk/src/query/query-dispatch-observability.ts +6 -0
  1227. package/sdk/src/query/query-dispatch-plan.test.ts +25 -0
  1228. package/sdk/src/query/query-dispatch-plan.ts +5 -0
  1229. package/sdk/src/query/query-dispatch-result-builder.test.ts +16 -0
  1230. package/sdk/src/query/query-dispatch-result-builder.ts +5 -0
  1231. package/sdk/src/query/query-dispatch.test.ts +399 -0
  1232. package/sdk/src/query/query-dispatch.ts +243 -0
  1233. package/sdk/src/query/query-error-details-schema.ts +29 -0
  1234. package/sdk/src/query/query-error-taxonomy.test.ts +39 -0
  1235. package/sdk/src/query/query-error-taxonomy.ts +117 -0
  1236. package/sdk/src/query/query-fallback-bridge-adapter.test.ts +32 -0
  1237. package/sdk/src/query/query-fallback-bridge-adapter.ts +54 -0
  1238. package/sdk/src/query/query-fallback-executor.test.ts +82 -0
  1239. package/sdk/src/query/query-fallback-executor.ts +44 -0
  1240. package/sdk/src/query/query-fallback-output-classifier.test.ts +36 -0
  1241. package/sdk/src/query/query-fallback-output-classifier.ts +31 -0
  1242. package/sdk/src/query/query-fallback-policy.test.ts +13 -0
  1243. package/sdk/src/query/query-fallback-policy.ts +11 -0
  1244. package/sdk/src/query/query-native-dispatch-adapter.ts +16 -0
  1245. package/sdk/src/query/query-policy-capability.test.ts +10 -0
  1246. package/sdk/src/query/query-policy-capability.ts +26 -0
  1247. package/sdk/src/query/query-policy-snapshot.test.ts +9 -0
  1248. package/sdk/src/query/query-registry-capability.test.ts +14 -0
  1249. package/sdk/src/query/query-runtime-context.ts +44 -0
  1250. package/sdk/src/query/query-unknown-command-hints.test.ts +9 -0
  1251. package/sdk/src/query/query-unknown-command-hints.ts +5 -0
  1252. package/sdk/src/query/registry-assembly-descriptor.ts +87 -0
  1253. package/sdk/src/query/registry-assembly-invariants.ts +127 -0
  1254. package/sdk/src/query/registry-assembly.test.ts +138 -0
  1255. package/sdk/src/query/registry-assembly.ts +78 -0
  1256. package/sdk/src/query/registry.test.ts +208 -0
  1257. package/sdk/src/query/registry.ts +142 -0
  1258. package/sdk/src/query/requirements-extract-from-plans.test.ts +58 -0
  1259. package/sdk/src/query/requirements-extract-from-plans.ts +86 -0
  1260. package/sdk/src/query/roadmap-update-plan-progress.test.ts +233 -0
  1261. package/sdk/src/query/roadmap-update-plan-progress.ts +159 -0
  1262. package/sdk/src/query/roadmap.test.ts +1181 -0
  1263. package/sdk/src/query/roadmap.ts +894 -0
  1264. package/sdk/src/query/route-next-action.test.ts +61 -0
  1265. package/sdk/src/query/route-next-action.ts +345 -0
  1266. package/sdk/src/query/schema-detect.ts +189 -0
  1267. package/sdk/src/query/secrets.test.ts +66 -0
  1268. package/sdk/src/query/secrets.ts +43 -0
  1269. package/sdk/src/query/skill-manifest.test.ts +62 -0
  1270. package/sdk/src/query/skill-manifest.ts +216 -0
  1271. package/sdk/src/query/skills.test.ts +234 -0
  1272. package/sdk/src/query/skills.ts +143 -0
  1273. package/sdk/src/query/state-document.test.ts +197 -0
  1274. package/sdk/src/query/state-document.ts +129 -0
  1275. package/sdk/src/query/state-mutation.test.ts +1198 -0
  1276. package/sdk/src/query/state-mutation.ts +1718 -0
  1277. package/sdk/src/query/state-project-load.ts +80 -0
  1278. package/sdk/src/query/state.test.ts +616 -0
  1279. package/sdk/src/query/state.ts +463 -0
  1280. package/sdk/src/query/sub-repos-root.integration.test.ts +79 -0
  1281. package/sdk/src/query/summary.test.ts +95 -0
  1282. package/sdk/src/query/summary.ts +296 -0
  1283. package/sdk/src/query/template.test.ts +180 -0
  1284. package/sdk/src/query/template.ts +242 -0
  1285. package/sdk/src/query/uat.test.ts +77 -0
  1286. package/sdk/src/query/uat.ts +365 -0
  1287. package/sdk/src/query/utils.test.ts +82 -0
  1288. package/sdk/src/query/utils.ts +106 -0
  1289. package/sdk/src/query/validate.test.ts +831 -0
  1290. package/sdk/src/query/validate.ts +952 -0
  1291. package/sdk/src/query/verify.test.ts +414 -0
  1292. package/sdk/src/query/verify.ts +692 -0
  1293. package/sdk/src/query/websearch.test.ts +31 -0
  1294. package/sdk/src/query/websearch.ts +82 -0
  1295. package/sdk/src/query/workspace.test.ts +120 -0
  1296. package/sdk/src/query/workspace.ts +145 -0
  1297. package/sdk/src/query/workstream-inventory.ts +195 -0
  1298. package/sdk/src/query/workstream.test.ts +153 -0
  1299. package/sdk/src/query/workstream.ts +324 -0
  1300. package/sdk/src/query/worktree.ts +39 -0
  1301. package/sdk/src/query-command-executor.ts +31 -0
  1302. package/sdk/src/query-execution-policy.test.ts +52 -0
  1303. package/sdk/src/query-execution-policy.ts +46 -0
  1304. package/sdk/src/query-failure-classification.test.ts +23 -0
  1305. package/sdk/src/query-failure-classification.ts +42 -0
  1306. package/sdk/src/query-hotpath-methods.ts +48 -0
  1307. package/sdk/src/query-native-direct-adapter.test.ts +35 -0
  1308. package/sdk/src/query-native-direct-adapter.ts +70 -0
  1309. package/sdk/src/query-native-hotpath-adapter.test.ts +43 -0
  1310. package/sdk/src/query-native-hotpath-adapter.ts +45 -0
  1311. package/sdk/src/query-raw-output-projection.test.ts +39 -0
  1312. package/sdk/src/query-raw-output-projection.ts +74 -0
  1313. package/sdk/src/query-runtime-bridge.test.ts +150 -0
  1314. package/sdk/src/query-runtime-bridge.ts +215 -0
  1315. package/sdk/src/query-runtime-seam-coverage.test.ts +20 -0
  1316. package/sdk/src/query-sdd-tools-path.ts +1 -0
  1317. package/sdk/src/query-sdd-tools-runtime.ts +89 -0
  1318. package/sdk/src/query-subprocess-adapter.test.ts +84 -0
  1319. package/sdk/src/query-subprocess-adapter.ts +146 -0
  1320. package/sdk/src/query-tools-error-factory.test.ts +35 -0
  1321. package/sdk/src/query-tools-error-factory.ts +76 -0
  1322. package/sdk/src/research-gate.test.ts +190 -0
  1323. package/sdk/src/research-gate.ts +94 -0
  1324. package/sdk/src/runtime-bridge-options.test.ts +33 -0
  1325. package/sdk/src/runtime-gate.test.ts +84 -0
  1326. package/sdk/src/runtime-gate.ts +52 -0
  1327. package/sdk/src/sdd-tools-error.test.ts +21 -0
  1328. package/sdk/src/sdd-tools-error.ts +65 -0
  1329. package/sdk/src/sdd-tools.test.ts +472 -0
  1330. package/sdk/src/sdd-tools.ts +237 -0
  1331. package/sdk/src/sdd-transport-policy.test.ts +34 -0
  1332. package/sdk/src/sdd-transport-policy.ts +48 -0
  1333. package/sdk/src/sdd-transport.test.ts +292 -0
  1334. package/sdk/src/sdd-transport.ts +117 -0
  1335. package/sdk/src/sdk-package-compatibility.test.ts +97 -0
  1336. package/sdk/src/sdk-package-compatibility.ts +141 -0
  1337. package/sdk/src/session-runner.test.ts +164 -0
  1338. package/sdk/src/session-runner.ts +327 -0
  1339. package/sdk/src/tool-scoping.test.ts +160 -0
  1340. package/sdk/src/tool-scoping.ts +61 -0
  1341. package/sdk/src/types.ts +927 -0
  1342. package/sdk/src/workflow-agent-skills-consistency.test.ts +98 -0
  1343. package/sdk/src/workstream-name-policy.ts +24 -0
  1344. package/sdk/src/workstream-utils.ts +21 -0
  1345. package/sdk/src/ws-flag.test.ts +285 -0
  1346. package/sdk/src/ws-transport.test.ts +161 -0
  1347. package/sdk/src/ws-transport.ts +93 -0
  1348. package/sdk/tsconfig.json +20 -0
  1349. package/commands/sdd/add-backlog.md +0 -76
  1350. package/commands/sdd/add-phase.md +0 -43
  1351. package/commands/sdd/add-todo.md +0 -47
  1352. package/commands/sdd/analyze-dependencies.md +0 -34
  1353. package/commands/sdd/check-todos.md +0 -45
  1354. package/commands/sdd/code-review-fix.md +0 -52
  1355. package/commands/sdd/do.md +0 -30
  1356. package/commands/sdd/from-sdd2.md +0 -45
  1357. package/commands/sdd/insert-phase.md +0 -32
  1358. package/commands/sdd/intel.md +0 -179
  1359. package/commands/sdd/join-discord.md +0 -19
  1360. package/commands/sdd/list-phase-assumptions.md +0 -46
  1361. package/commands/sdd/list-workspaces.md +0 -19
  1362. package/commands/sdd/new-workspace.md +0 -44
  1363. package/commands/sdd/next.md +0 -26
  1364. package/commands/sdd/note.md +0 -34
  1365. package/commands/sdd/plan-milestone-gaps.md +0 -34
  1366. package/commands/sdd/plant-seed.md +0 -28
  1367. package/commands/sdd/remove-phase.md +0 -31
  1368. package/commands/sdd/remove-workspace.md +0 -26
  1369. package/commands/sdd/research-phase.md +0 -195
  1370. package/commands/sdd/scan.md +0 -26
  1371. package/commands/sdd/session-report.md +0 -19
  1372. package/commands/sdd/set-profile.md +0 -12
  1373. package/scripts/sync-upstream.sh +0 -56
  1374. package/sdd/workflows/research-phase.md +0 -82
@@ -0,0 +1,1159 @@
1
+ /**
2
+ * Init composition handlers — compound init commands for workflow bootstrapping.
3
+ *
4
+ * Composes existing atomic SDK queries into the same flat JSON bundles
5
+ * that CJS init.cjs produces, enabling workflow migration. Each handler
6
+ * follows the QueryHandler signature and returns { data: <flat JSON> }.
7
+ *
8
+ * Port of sdd/bin/lib/init.cjs (13 of 16 handlers).
9
+ * The 3 complex handlers (new-project, progress, manager) are in init-complex.ts.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { initExecutePhase, withProjectRoot } from './init.js';
14
+ *
15
+ * const result = await initExecutePhase(['9'], '/project');
16
+ * // { data: { executor_model: 'opus', phase_found: true, ... } }
17
+ * ```
18
+ */
19
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
20
+ import { join, relative, basename } from 'node:path';
21
+ import { execSync } from 'node:child_process';
22
+ import { homedir } from 'node:os';
23
+ import { loadConfig } from '../config.js';
24
+ import { resolveModel, MODEL_PROFILES } from './config-query.js';
25
+ import { maskIfSecret } from './secrets.js';
26
+ import { findPhase } from './phase.js';
27
+ import { roadmapGetPhase, getMilestoneInfo, extractCurrentMilestone, extractPhasesFromSection } from './roadmap.js';
28
+ import { determinePhaseStatus } from './progress.js';
29
+ import { planningPaths, normalizePhaseName, toPosixPath, resolveAgentsDir, detectRuntime } from './helpers.js';
30
+ import { generatePhaseSlug, assertSafeProjectCode } from './phase-lifecycle-policy.js';
31
+ // ─── Internal helpers ──────────────────────────────────────────────────────
32
+ /**
33
+ * Extract model alias string from a resolveModel result.
34
+ */
35
+ async function getModelAlias(agentType, projectDir) {
36
+ const result = await resolveModel([agentType], projectDir);
37
+ const data = result.data;
38
+ return data.model || 'sonnet';
39
+ }
40
+ /**
41
+ * Generate a slug from text (inline, matches CJS generateSlugInternal).
42
+ */
43
+ function generateSlugInternal(text) {
44
+ return text
45
+ .toLowerCase()
46
+ .replace(/[^a-z0-9]+/g, '-')
47
+ .replace(/^-+|-+$/g, '')
48
+ .substring(0, 60);
49
+ }
50
+ function extractPhaseArg(args) {
51
+ const equalsArg = args.find((arg) => arg.startsWith('--phase='));
52
+ if (equalsArg) {
53
+ const value = equalsArg.slice('--phase='.length).trim();
54
+ return value || undefined;
55
+ }
56
+ const flagIndex = args.indexOf('--phase');
57
+ if (flagIndex !== -1) {
58
+ const value = args[flagIndex + 1];
59
+ return value && !value.startsWith('--') ? value : undefined;
60
+ }
61
+ const first = args[0];
62
+ return first && !first.startsWith('--') ? first : undefined;
63
+ }
64
+ /**
65
+ * Check if a path exists on disk.
66
+ */
67
+ function pathExists(base, relPath) {
68
+ return existsSync(join(base, relPath));
69
+ }
70
+ /**
71
+ * Bug #3491: detect whether `base` is inside any git worktree, and if so,
72
+ * return the absolute worktree root. Mirrors the CJS `gitWorktreeInfoInternal`
73
+ * in sdd/bin/lib/core.cjs — keep these two implementations behaviour-
74
+ * identical so the SDK and CJS init handlers emit the same has_git semantics.
75
+ *
76
+ * Returns { inside, worktreeRoot } — both fall back to false/null on any error
77
+ * (git unavailable, not a repo, timeout) so callers see the conservative
78
+ * default that preserves pre-fix behaviour for non-git environments.
79
+ */
80
+ function gitWorktreeInfo(base) {
81
+ try {
82
+ const inside = execSync('git rev-parse --is-inside-work-tree', {
83
+ cwd: base,
84
+ stdio: ['ignore', 'pipe', 'ignore'],
85
+ encoding: 'utf-8',
86
+ timeout: 5000,
87
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
88
+ }).trim();
89
+ if (inside !== 'true')
90
+ return { inside: false, worktreeRoot: null };
91
+ try {
92
+ const root = execSync('git rev-parse --show-toplevel', {
93
+ cwd: base,
94
+ stdio: ['ignore', 'pipe', 'ignore'],
95
+ encoding: 'utf-8',
96
+ timeout: 5000,
97
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
98
+ }).trim();
99
+ return { inside: true, worktreeRoot: root || null };
100
+ }
101
+ catch {
102
+ return { inside: true, worktreeRoot: null };
103
+ }
104
+ }
105
+ catch {
106
+ return { inside: false, worktreeRoot: null };
107
+ }
108
+ }
109
+ /**
110
+ * Compute the canonical phase directory name for a known phase entry from the
111
+ * roadmap when no directory exists yet. Applies the project_code prefix so
112
+ * the first-touch creation path used by /sdd-discuss-phase and /sdd-plan-phase
113
+ * stays consistent with the prefix produced by `phase.add` / `phase.insert`.
114
+ *
115
+ * Returns null when phaseNumber or phaseName cannot be determined.
116
+ */
117
+ function computeExpectedPhaseDirName(phaseNumber, phaseName, projectCode) {
118
+ if (!phaseNumber || !phaseName)
119
+ return null;
120
+ const paddedNum = normalizePhaseName(phaseNumber);
121
+ const slug = generatePhaseSlug(phaseName);
122
+ if (!slug)
123
+ return null;
124
+ const prefix = projectCode ? `${projectCode}-` : '';
125
+ return `${prefix}${paddedNum}-${slug}`;
126
+ }
127
+ async function shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream) {
128
+ if (!phaseInfo?.archived || !roadmapPhase || !roadmapPhase.found)
129
+ return false;
130
+ const archivedTag = String(phaseInfo.archived ?? '');
131
+ const milestone = await getMilestoneInfo(projectDir, workstream);
132
+ if (milestone?.version && archivedTag === milestone.version)
133
+ return false;
134
+ return true;
135
+ }
136
+ /**
137
+ * Get the latest completed milestone from MILESTONES.md.
138
+ * Port of getLatestCompletedMilestone from init.cjs lines 10-25.
139
+ */
140
+ function getLatestCompletedMilestone(projectDir) {
141
+ const milestonesPath = join(projectDir, '.planning', 'MILESTONES.md');
142
+ if (!existsSync(milestonesPath))
143
+ return null;
144
+ try {
145
+ const content = readFileSync(milestonesPath, 'utf-8');
146
+ const match = content.match(/^##\s+(v[\d.]+)\s+(.+?)\s+\(Shipped:/m);
147
+ if (!match)
148
+ return null;
149
+ return { version: match[1], name: match[2].trim() };
150
+ }
151
+ catch {
152
+ return null;
153
+ }
154
+ }
155
+ /**
156
+ * Check which SDD agents are installed on disk.
157
+ *
158
+ * Runtime-aware per issue #2402: detects the invoking runtime
159
+ * (`SDD_RUNTIME` → `config.runtime` → 'claude') and probes that runtime's
160
+ * canonical `agents/` directory. `SDD_AGENTS_DIR` still short-circuits.
161
+ *
162
+ * Port of checkAgentsInstalled from core.cjs lines 1274-1306.
163
+ */
164
+ function checkAgentsInstalled(config) {
165
+ const runtime = detectRuntime(config);
166
+ const agentsDir = resolveAgentsDir(runtime);
167
+ const expectedAgents = Object.keys(MODEL_PROFILES);
168
+ if (!existsSync(agentsDir)) {
169
+ return { agents_installed: false, missing_agents: expectedAgents };
170
+ }
171
+ const missing = [];
172
+ for (const agent of expectedAgents) {
173
+ const agentFile = join(agentsDir, `${agent}.md`);
174
+ const agentFileCopilot = join(agentsDir, `${agent}.agent.md`);
175
+ if (!existsSync(agentFile) && !existsSync(agentFileCopilot)) {
176
+ missing.push(agent);
177
+ }
178
+ }
179
+ return {
180
+ agents_installed: missing.length === 0,
181
+ missing_agents: missing,
182
+ };
183
+ }
184
+ /**
185
+ * Extract phase info from findPhase result, or build fallback from roadmap.
186
+ */
187
+ async function getPhaseInfoWithFallback(phase, projectDir, workstream) {
188
+ const phaseResult = await findPhase([phase], projectDir, workstream);
189
+ let phaseInfo = phaseResult.data;
190
+ // findPhase returns { found: false } when missing; findPhaseInternal returns null — align for init parity.
191
+ if (phaseInfo && phaseInfo.found === false) {
192
+ phaseInfo = null;
193
+ }
194
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
195
+ const roadmapPhase = roadmapResult.data;
196
+ // Match init.cjs: drop archived disk match when the phase is listed in the current ROADMAP
197
+ if (await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
198
+ phaseInfo = null;
199
+ }
200
+ // Fallback to ROADMAP.md if no phase directory exists yet
201
+ if ((!phaseInfo || !phaseInfo.found) && roadmapPhase?.found) {
202
+ const phaseName = roadmapPhase.phase_name;
203
+ phaseInfo = {
204
+ found: true,
205
+ directory: null,
206
+ phase_number: roadmapPhase.phase_number,
207
+ phase_name: phaseName,
208
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
209
+ plans: [],
210
+ summaries: [],
211
+ incomplete_plans: [],
212
+ has_research: false,
213
+ has_context: false,
214
+ has_verification: false,
215
+ has_reviews: false,
216
+ };
217
+ }
218
+ return { phaseInfo, roadmapPhase };
219
+ }
220
+ /**
221
+ * Phase resolution for `init verify-work` — matches init.cjs cmdInitVerifyWork (archived + fallback).
222
+ */
223
+ async function getPhaseInfoForVerifyWork(phase, projectDir, workstream) {
224
+ const phaseResult = await findPhase([phase], projectDir, workstream);
225
+ let phaseInfo = phaseResult.data;
226
+ if (phaseInfo && phaseInfo.found === false) {
227
+ phaseInfo = null;
228
+ }
229
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
230
+ const roadmapPhase = roadmapResult.data;
231
+ if (await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
232
+ phaseInfo = null;
233
+ }
234
+ if (!phaseInfo && roadmapPhase?.found) {
235
+ const phaseName = roadmapPhase.phase_name;
236
+ phaseInfo = {
237
+ found: true,
238
+ directory: null,
239
+ phase_number: roadmapPhase.phase_number,
240
+ phase_name: phaseName,
241
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
242
+ plans: [],
243
+ summaries: [],
244
+ incomplete_plans: [],
245
+ has_research: false,
246
+ has_context: false,
247
+ has_verification: false,
248
+ };
249
+ }
250
+ return { phaseInfo };
251
+ }
252
+ /**
253
+ * Extract requirement IDs from roadmap section text.
254
+ */
255
+ function extractReqIds(roadmapPhase) {
256
+ const section = roadmapPhase?.section;
257
+ // Accept all bold/colon variants of the Requirements header. The forms
258
+ // **Requirements:** (colon inside bold)
259
+ // **Requirements**: (colon outside bold)
260
+ // **Requirements** : (space before outside colon)
261
+ // render identically in markdown but differ textually. Issue #2769.
262
+ const reqMatch = section?.match(/^\*\*Requirements:?\*\*[^\S\n]*:?[^\S\n]*([^\n]*)$/m);
263
+ const reqExtracted = reqMatch
264
+ ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map((s) => s.trim()).filter(Boolean).join(', ')
265
+ : null;
266
+ return (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
267
+ }
268
+ // ─── withProjectRoot ─────────────────────────────────────────────────────
269
+ /**
270
+ * Inject project_root, agents_installed, missing_agents, and response_language
271
+ * into an init result object.
272
+ *
273
+ * Port of withProjectRoot from init.cjs lines 32-63.
274
+ *
275
+ * @param projectDir - Absolute project root path
276
+ * @param result - The result object to augment
277
+ * @param config - Optional loaded config (avoids re-reading config.json)
278
+ * @returns The augmented result object
279
+ */
280
+ export function withProjectRoot(projectDir, result, config) {
281
+ result.project_root = projectDir;
282
+ const agentStatus = checkAgentsInstalled(config);
283
+ result.agents_installed = agentStatus.agents_installed;
284
+ result.missing_agents = agentStatus.missing_agents;
285
+ const responseLang = config?.response_language;
286
+ if (responseLang) {
287
+ result.response_language = responseLang;
288
+ }
289
+ const projectCode = config?.project_code;
290
+ if (projectCode) {
291
+ result.project_code = projectCode;
292
+ }
293
+ const projectMdPath = join(projectDir, '.planning', 'PROJECT.md');
294
+ try {
295
+ if (existsSync(projectMdPath)) {
296
+ const content = readFileSync(projectMdPath, 'utf-8');
297
+ const h1Match = content.match(/^#\s+(.+)$/m);
298
+ if (h1Match) {
299
+ result.project_title = h1Match[1].trim();
300
+ }
301
+ }
302
+ }
303
+ catch {
304
+ /* intentionally empty */
305
+ }
306
+ return result;
307
+ }
308
+ // ─── initExecutePhase ─────────────────────────────────────────────────────
309
+ /**
310
+ * Init handler for execute-phase workflow.
311
+ * Port of cmdInitExecutePhase from init.cjs lines 50-171.
312
+ */
313
+ export const initExecutePhase = async (args, projectDir, workstream) => {
314
+ const phase = extractPhaseArg(args);
315
+ if (!phase) {
316
+ return { data: { error: 'phase required for init execute-phase' } };
317
+ }
318
+ const config = await loadConfig(projectDir);
319
+ const paths = planningPaths(projectDir, workstream);
320
+ const planningDir = paths.planning;
321
+ const { phaseInfo, roadmapPhase } = await getPhaseInfoWithFallback(phase, projectDir, workstream);
322
+ const phase_req_ids = extractReqIds(roadmapPhase);
323
+ const configExists = existsSync(join(planningDir, 'config.json'));
324
+ const [executorModel, verifierModel] = configExists
325
+ ? await Promise.all([
326
+ getModelAlias('sdd-executor', projectDir),
327
+ getModelAlias('sdd-verifier', projectDir),
328
+ ])
329
+ : ['', ''];
330
+ const milestone = await getMilestoneInfo(projectDir, workstream);
331
+ const phaseNumber = phaseInfo?.phase_number || null;
332
+ const phaseSlug = phaseInfo?.phase_slug || null;
333
+ const plans = (phaseInfo?.plans || []);
334
+ const summaries = (phaseInfo?.summaries || []);
335
+ const incompletePlans = (phaseInfo?.incomplete_plans || []);
336
+ const projectCode = config.project_code || '';
337
+ const result = {
338
+ executor_model: executorModel,
339
+ verifier_model: verifierModel,
340
+ tdd_mode: config.workflow.tdd_mode ?? false,
341
+ commit_docs: config.commit_docs,
342
+ sub_repos: config.sub_repos ?? [],
343
+ parallelization: config.parallelization,
344
+ context_window: config.context_window ?? 200000,
345
+ branching_strategy: config.git.branching_strategy,
346
+ phase_branch_template: config.git.phase_branch_template,
347
+ milestone_branch_template: config.git.milestone_branch_template,
348
+ verifier_enabled: config.workflow.verifier,
349
+ phase_found: !!phaseInfo,
350
+ phase_dir: phaseInfo?.directory ?? null,
351
+ phase_number: phaseNumber,
352
+ phase_name: phaseInfo?.phase_name ?? null,
353
+ phase_slug: phaseSlug,
354
+ phase_req_ids,
355
+ plans,
356
+ summaries,
357
+ incomplete_plans: incompletePlans,
358
+ plan_count: plans.length,
359
+ incomplete_count: incompletePlans.length,
360
+ branch_name: config.git.branching_strategy === 'phase' && phaseInfo
361
+ ? config.git.phase_branch_template
362
+ .replace('{project}', projectCode)
363
+ .replace('{phase}', phaseNumber || '')
364
+ .replace('{slug}', phaseSlug || 'phase')
365
+ : config.git.branching_strategy === 'milestone'
366
+ ? config.git.milestone_branch_template
367
+ .replace('{milestone}', milestone.version)
368
+ .replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')
369
+ : null,
370
+ milestone_version: milestone.version,
371
+ milestone_name: milestone.name,
372
+ milestone_slug: generateSlugInternal(milestone.name),
373
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
374
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
375
+ config_exists: configExists,
376
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
377
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
378
+ config_path: toPosixPath(relative(projectDir, join(planningDir, 'config.json'))),
379
+ };
380
+ return { data: withProjectRoot(projectDir, result, config) };
381
+ };
382
+ // ─── initPlanPhase ────────────────────────────────────────────────────────
383
+ /**
384
+ * Init handler for plan-phase workflow.
385
+ * Port of cmdInitPlanPhase from init.cjs lines 173-293.
386
+ */
387
+ export const initPlanPhase = async (args, projectDir, workstream) => {
388
+ const phase = extractPhaseArg(args);
389
+ if (!phase) {
390
+ return { data: { error: 'phase required for init plan-phase' } };
391
+ }
392
+ const config = await loadConfig(projectDir);
393
+ const paths = planningPaths(projectDir, workstream);
394
+ const planningDir = paths.planning;
395
+ const { phaseInfo, roadmapPhase } = await getPhaseInfoWithFallback(phase, projectDir, workstream);
396
+ const phase_req_ids = extractReqIds(roadmapPhase);
397
+ const configExists = existsSync(join(planningDir, 'config.json'));
398
+ const [researcherModel, plannerModel, checkerModel] = configExists
399
+ ? await Promise.all([
400
+ getModelAlias('sdd-phase-researcher', projectDir),
401
+ getModelAlias('sdd-planner', projectDir),
402
+ getModelAlias('sdd-plan-checker', projectDir),
403
+ ])
404
+ : ['', '', ''];
405
+ const phaseNumber = phaseInfo?.phase_number || null;
406
+ const phaseName = phaseInfo?.phase_name ?? null;
407
+ const phaseDir = phaseInfo?.directory ?? null;
408
+ const plans = (phaseInfo?.plans || []);
409
+ const summaries = (phaseInfo?.summaries || []);
410
+ // #3569: surface phase lifecycle status so /sdd-plan-phase can short-circuit
411
+ // on closed (Complete) phases instead of silently replanning over shipped
412
+ // code. Reuses determinePhaseStatus — the project-wide vocabulary used by
413
+ // `progress` (Pending | Planned | In Progress | Executed | Complete |
414
+ // Needs Review). When the phase has no directory on disk yet, treat it as
415
+ // Pending (it has not been started).
416
+ const phaseStatus = phaseDir
417
+ ? await determinePhaseStatus(plans.length, summaries.length, join(projectDir, phaseDir))
418
+ : 'Pending';
419
+ // #3287: compute the canonical directory name with project_code prefix so
420
+ // the first-touch mkdir in /sdd-plan-phase stays consistent with phase.add.
421
+ const rawProjectCode = config.project_code || '';
422
+ assertSafeProjectCode(rawProjectCode);
423
+ const expectedPhaseDirName = phaseDir
424
+ ? null // directory already exists — no need to create
425
+ : computeExpectedPhaseDirName(phaseNumber, phaseName, rawProjectCode);
426
+ const expectedPhaseDir = expectedPhaseDirName
427
+ ? toPosixPath(relative(projectDir, join(paths.phases, expectedPhaseDirName)))
428
+ : null;
429
+ const cfg = config;
430
+ const result = {
431
+ researcher_model: researcherModel,
432
+ planner_model: plannerModel,
433
+ checker_model: checkerModel,
434
+ tdd_mode: config.workflow.tdd_mode ?? false,
435
+ research_enabled: config.workflow.research,
436
+ plan_checker_enabled: config.workflow.plan_check,
437
+ nyquist_validation_enabled: config.workflow.nyquist_validation,
438
+ commit_docs: config.commit_docs,
439
+ text_mode: config.workflow.text_mode,
440
+ auto_advance: !!config.workflow.auto_advance,
441
+ auto_chain_active: !!config.workflow._auto_chain_active,
442
+ mode: cfg.mode ?? 'interactive',
443
+ phase_found: !!phaseInfo,
444
+ phase_dir: phaseDir,
445
+ expected_phase_dir: expectedPhaseDir,
446
+ phase_number: phaseNumber,
447
+ phase_name: phaseName,
448
+ phase_slug: phaseInfo?.phase_slug ?? null,
449
+ padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
450
+ phase_req_ids,
451
+ phase_status: phaseStatus,
452
+ has_research: phaseInfo?.has_research || false,
453
+ has_context: phaseInfo?.has_context || false,
454
+ has_reviews: phaseInfo?.has_reviews || false,
455
+ has_plans: plans.length > 0,
456
+ plan_count: plans.length,
457
+ planning_exists: existsSync(planningDir),
458
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
459
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
460
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
461
+ requirements_path: toPosixPath(relative(projectDir, join(planningDir, 'REQUIREMENTS.md'))),
462
+ patterns_path: null,
463
+ };
464
+ // Add artifact paths if phase directory exists
465
+ if (phaseDir) {
466
+ const phaseDirFull = join(projectDir, phaseDir);
467
+ try {
468
+ const files = readdirSync(phaseDirFull);
469
+ const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
470
+ if (contextFile)
471
+ result.context_path = toPosixPath(join(phaseDir, contextFile));
472
+ const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
473
+ if (researchFile)
474
+ result.research_path = toPosixPath(join(phaseDir, researchFile));
475
+ const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
476
+ if (verificationFile)
477
+ result.verification_path = toPosixPath(join(phaseDir, verificationFile));
478
+ const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
479
+ if (uatFile)
480
+ result.uat_path = toPosixPath(join(phaseDir, uatFile));
481
+ const reviewsFile = files.find(f => f.endsWith('-REVIEWS.md') || f === 'REVIEWS.md');
482
+ if (reviewsFile)
483
+ result.reviews_path = toPosixPath(join(phaseDir, reviewsFile));
484
+ const patternsFile = files.find(f => f.endsWith('-PATTERNS.md') || f === 'PATTERNS.md');
485
+ if (patternsFile)
486
+ result.patterns_path = toPosixPath(join(phaseDir, patternsFile));
487
+ }
488
+ catch { /* intentionally empty */ }
489
+ }
490
+ return { data: withProjectRoot(projectDir, result, config) };
491
+ };
492
+ // ─── initNewMilestone ─────────────────────────────────────────────────────
493
+ /**
494
+ * Init handler for new-milestone workflow.
495
+ * Port of cmdInitNewMilestone from init.cjs lines 401-446.
496
+ */
497
+ export const initNewMilestone = async (_args, projectDir) => {
498
+ const config = await loadConfig(projectDir);
499
+ const planningDir = join(projectDir, '.planning');
500
+ const milestone = await getMilestoneInfo(projectDir);
501
+ const latestCompleted = getLatestCompletedMilestone(projectDir);
502
+ const phasesDir = join(planningDir, 'phases');
503
+ let phaseDirCount = 0;
504
+ try {
505
+ if (existsSync(phasesDir)) {
506
+ phaseDirCount = readdirSync(phasesDir, { withFileTypes: true })
507
+ .filter(entry => entry.isDirectory())
508
+ .length;
509
+ }
510
+ }
511
+ catch { /* intentionally empty */ }
512
+ const [researcherModel, synthesizerModel, roadmapperModel] = await Promise.all([
513
+ getModelAlias('sdd-project-researcher', projectDir),
514
+ getModelAlias('sdd-research-synthesizer', projectDir),
515
+ getModelAlias('sdd-roadmapper', projectDir),
516
+ ]);
517
+ const result = {
518
+ researcher_model: researcherModel,
519
+ synthesizer_model: synthesizerModel,
520
+ roadmapper_model: roadmapperModel,
521
+ commit_docs: config.commit_docs,
522
+ research_enabled: config.workflow.research,
523
+ current_milestone: milestone.version,
524
+ current_milestone_name: milestone.name,
525
+ latest_completed_milestone: latestCompleted?.version || null,
526
+ latest_completed_milestone_name: latestCompleted?.name || null,
527
+ phase_dir_count: phaseDirCount,
528
+ phase_archive_path: latestCompleted
529
+ ? toPosixPath(relative(projectDir, join(projectDir, '.planning', 'milestones', `${latestCompleted.version}-phases`)))
530
+ : null,
531
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
532
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
533
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
534
+ project_path: '.planning/PROJECT.md',
535
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
536
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
537
+ };
538
+ return { data: withProjectRoot(projectDir, result, config) };
539
+ };
540
+ // ─── initQuick ────────────────────────────────────────────────────────────
541
+ /**
542
+ * Init handler for quick workflow.
543
+ * Port of cmdInitQuick from init.cjs lines 448-504.
544
+ */
545
+ export const initQuick = async (args, projectDir) => {
546
+ const description = args[0] || null;
547
+ const config = await loadConfig(projectDir);
548
+ const planningDir = join(projectDir, '.planning');
549
+ const now = new Date();
550
+ const slug = description ? generateSlugInternal(description).substring(0, 40) : null;
551
+ // Generate collision-resistant quick task ID: YYMMDD-xxx
552
+ const yy = String(now.getFullYear()).slice(-2);
553
+ const mm = String(now.getMonth() + 1).padStart(2, '0');
554
+ const dd = String(now.getDate()).padStart(2, '0');
555
+ const dateStr = yy + mm + dd;
556
+ const secondsSinceMidnight = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds();
557
+ const timeBlocks = Math.floor(secondsSinceMidnight / 2);
558
+ const timeEncoded = timeBlocks.toString(36).padStart(3, '0');
559
+ const quickId = dateStr + '-' + timeEncoded;
560
+ const branchSlug = slug || 'quick';
561
+ const quickBranchName = config.git.quick_branch_template
562
+ ? config.git.quick_branch_template
563
+ .replace('{num}', quickId)
564
+ .replace('{quick}', quickId)
565
+ .replace('{slug}', branchSlug)
566
+ : null;
567
+ const configExists = existsSync(join(planningDir, 'config.json'));
568
+ const [plannerModel, executorModel, checkerModel, verifierModel] = configExists
569
+ ? await Promise.all([
570
+ getModelAlias('sdd-planner', projectDir),
571
+ getModelAlias('sdd-executor', projectDir),
572
+ getModelAlias('sdd-plan-checker', projectDir),
573
+ getModelAlias('sdd-verifier', projectDir),
574
+ ])
575
+ : ['', '', '', ''];
576
+ const result = {
577
+ planner_model: plannerModel,
578
+ executor_model: executorModel,
579
+ checker_model: checkerModel,
580
+ verifier_model: verifierModel,
581
+ commit_docs: config.commit_docs,
582
+ branch_name: quickBranchName,
583
+ quick_id: quickId,
584
+ slug,
585
+ description,
586
+ date: now.toISOString().split('T')[0],
587
+ timestamp: now.toISOString(),
588
+ quick_dir: '.planning/quick',
589
+ task_dir: slug ? `.planning/quick/${quickId}-${slug}` : null,
590
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
591
+ planning_exists: existsSync(join(projectDir, '.planning')),
592
+ };
593
+ return { data: withProjectRoot(projectDir, result, config) };
594
+ };
595
+ // ─── initResume ───────────────────────────────────────────────────────────
596
+ /**
597
+ * Init handler for resume-project workflow.
598
+ * Port of cmdInitResume from init.cjs lines 506-536.
599
+ */
600
+ export const initResume = async (_args, projectDir) => {
601
+ const config = await loadConfig(projectDir);
602
+ const planningDir = join(projectDir, '.planning');
603
+ let interruptedAgentId = null;
604
+ try {
605
+ interruptedAgentId = readFileSync(join(projectDir, '.planning', 'current-agent-id.txt'), 'utf-8').trim();
606
+ }
607
+ catch { /* intentionally empty */ }
608
+ const result = {
609
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
610
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
611
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
612
+ planning_exists: existsSync(join(projectDir, '.planning')),
613
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
614
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
615
+ project_path: '.planning/PROJECT.md',
616
+ has_interrupted_agent: !!interruptedAgentId,
617
+ interrupted_agent_id: interruptedAgentId,
618
+ commit_docs: config.commit_docs,
619
+ };
620
+ return { data: withProjectRoot(projectDir, result, config) };
621
+ };
622
+ // ─── initVerifyWork ───────────────────────────────────────────────────────
623
+ /**
624
+ * Init handler for verify-work workflow.
625
+ * Port of cmdInitVerifyWork from init.cjs lines 538-586.
626
+ */
627
+ export const initVerifyWork = async (args, projectDir, workstream) => {
628
+ const phase = extractPhaseArg(args);
629
+ if (!phase) {
630
+ return { data: { error: 'phase required for init verify-work' } };
631
+ }
632
+ const config = await loadConfig(projectDir, workstream);
633
+ const { phaseInfo } = await getPhaseInfoForVerifyWork(phase, projectDir, workstream);
634
+ const configExists = existsSync(join(projectDir, '.planning', 'config.json'));
635
+ const [plannerModel, checkerModel] = configExists
636
+ ? await Promise.all([
637
+ getModelAlias('sdd-planner', projectDir),
638
+ getModelAlias('sdd-plan-checker', projectDir),
639
+ ])
640
+ : ['', ''];
641
+ const result = {
642
+ planner_model: plannerModel,
643
+ checker_model: checkerModel,
644
+ commit_docs: config.commit_docs,
645
+ phase_found: !!phaseInfo,
646
+ phase_dir: phaseInfo?.directory ?? null,
647
+ phase_number: phaseInfo?.phase_number ?? null,
648
+ phase_name: phaseInfo?.phase_name ?? null,
649
+ has_verification: phaseInfo?.has_verification || false,
650
+ };
651
+ return { data: withProjectRoot(projectDir, result, config) };
652
+ };
653
+ // ─── initPhaseOp ──────────────────────────────────────────────────────────
654
+ /**
655
+ * Init handler for discuss-phase and similar phase operations.
656
+ * Port of cmdInitPhaseOp from init.cjs lines 588-697.
657
+ */
658
+ export const initPhaseOp = async (args, projectDir, workstream) => {
659
+ const phase = extractPhaseArg(args);
660
+ if (!phase) {
661
+ return { data: { error: 'phase required for init phase-op' } };
662
+ }
663
+ const config = await loadConfig(projectDir);
664
+ const paths = planningPaths(projectDir, workstream);
665
+ const planningDir = paths.planning;
666
+ // findPhase with archived override: if only match is archived, prefer ROADMAP
667
+ const phaseResult = await findPhase([phase], projectDir, workstream);
668
+ let phaseInfo = phaseResult.data;
669
+ const roadmapResult = await roadmapGetPhase([phase], projectDir, workstream);
670
+ const roadmapPhase = roadmapResult.data;
671
+ // If the only match comes from an archived milestone, prefer current ROADMAP
672
+ if (roadmapPhase?.found && await shouldDropArchivedPhaseMatch(phaseInfo, roadmapPhase, projectDir, workstream)) {
673
+ const phaseName = roadmapPhase.phase_name;
674
+ phaseInfo = {
675
+ found: true,
676
+ directory: null,
677
+ phase_number: roadmapPhase.phase_number,
678
+ phase_name: phaseName,
679
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
680
+ plans: [],
681
+ summaries: [],
682
+ incomplete_plans: [],
683
+ has_research: false,
684
+ has_context: false,
685
+ has_verification: false,
686
+ };
687
+ }
688
+ // Fallback to ROADMAP.md if no directory exists
689
+ if (!phaseInfo || !phaseInfo.found) {
690
+ if (roadmapPhase?.found) {
691
+ const phaseName = roadmapPhase.phase_name;
692
+ phaseInfo = {
693
+ found: true,
694
+ directory: null,
695
+ phase_number: roadmapPhase.phase_number,
696
+ phase_name: phaseName,
697
+ phase_slug: phaseName ? generateSlugInternal(phaseName) : null,
698
+ plans: [],
699
+ summaries: [],
700
+ incomplete_plans: [],
701
+ has_research: false,
702
+ has_context: false,
703
+ has_verification: false,
704
+ };
705
+ }
706
+ }
707
+ const phaseFound = !!(phaseInfo && phaseInfo.found);
708
+ const phaseNumber = phaseInfo?.phase_number || null;
709
+ const phaseName = phaseInfo?.phase_name ?? null;
710
+ const phaseDir = phaseInfo?.directory ?? null;
711
+ const plans = (phaseInfo?.plans || []);
712
+ // #3287: compute the canonical directory name with project_code prefix so
713
+ // the first-touch mkdir in /sdd-discuss-phase stays consistent with phase.add.
714
+ const rawProjectCode = config.project_code || '';
715
+ assertSafeProjectCode(rawProjectCode);
716
+ const expectedPhaseDirName = phaseDir
717
+ ? null // directory already exists — no need to create
718
+ : computeExpectedPhaseDirName(phaseNumber, phaseName, rawProjectCode);
719
+ const expectedPhaseDir = expectedPhaseDirName
720
+ ? toPosixPath(relative(projectDir, join(paths.phases, expectedPhaseDirName)))
721
+ : null;
722
+ const result = {
723
+ commit_docs: config.commit_docs,
724
+ // #2997: secret config keys (brave_search, firecrawl, exa_search) may be
725
+ // either boolean availability flags OR string API keys depending on how the
726
+ // user configured them. Pass booleans through; mask string values so the
727
+ // init bundle never echoes plaintext credentials. Mirrors the masking added
728
+ // to config-get/config-set in the same fix.
729
+ brave_search: typeof config.brave_search === 'string' ? maskIfSecret('brave_search', config.brave_search) : config.brave_search,
730
+ firecrawl: typeof config.firecrawl === 'string' ? maskIfSecret('firecrawl', config.firecrawl) : config.firecrawl,
731
+ exa_search: typeof config.exa_search === 'string' ? maskIfSecret('exa_search', config.exa_search) : config.exa_search,
732
+ phase_found: phaseFound,
733
+ phase_dir: phaseDir,
734
+ expected_phase_dir: expectedPhaseDir,
735
+ phase_number: phaseNumber,
736
+ phase_name: phaseName,
737
+ phase_slug: phaseInfo?.phase_slug ?? null,
738
+ padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
739
+ has_research: phaseInfo?.has_research || false,
740
+ has_context: phaseInfo?.has_context || false,
741
+ has_plans: plans.length > 0,
742
+ has_verification: phaseInfo?.has_verification || false,
743
+ has_reviews: phaseInfo?.has_reviews || false,
744
+ plan_count: plans.length,
745
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
746
+ planning_exists: existsSync(planningDir),
747
+ state_path: toPosixPath(relative(projectDir, join(planningDir, 'STATE.md'))),
748
+ roadmap_path: toPosixPath(relative(projectDir, join(planningDir, 'ROADMAP.md'))),
749
+ requirements_path: toPosixPath(relative(projectDir, join(planningDir, 'REQUIREMENTS.md'))),
750
+ };
751
+ // Add artifact paths if phase directory exists
752
+ if (phaseDir) {
753
+ const phaseDirFull = join(projectDir, phaseDir);
754
+ try {
755
+ const files = readdirSync(phaseDirFull);
756
+ const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
757
+ if (contextFile)
758
+ result.context_path = toPosixPath(join(phaseDir, contextFile));
759
+ const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
760
+ if (researchFile)
761
+ result.research_path = toPosixPath(join(phaseDir, researchFile));
762
+ const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
763
+ if (verificationFile)
764
+ result.verification_path = toPosixPath(join(phaseDir, verificationFile));
765
+ const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
766
+ if (uatFile)
767
+ result.uat_path = toPosixPath(join(phaseDir, uatFile));
768
+ const reviewsFile = files.find(f => f.endsWith('-REVIEWS.md') || f === 'REVIEWS.md');
769
+ if (reviewsFile)
770
+ result.reviews_path = toPosixPath(join(phaseDir, reviewsFile));
771
+ }
772
+ catch { /* intentionally empty */ }
773
+ }
774
+ return { data: withProjectRoot(projectDir, result, config) };
775
+ };
776
+ // ─── initTodos ────────────────────────────────────────────────────────────
777
+ /**
778
+ * Init handler for check-todos and add-todo workflows.
779
+ * Port of cmdInitTodos from init.cjs lines 699-756.
780
+ */
781
+ export const initTodos = async (args, projectDir) => {
782
+ const area = args[0] || null;
783
+ const config = await loadConfig(projectDir);
784
+ const planningDir = join(projectDir, '.planning');
785
+ const now = new Date();
786
+ const pendingDir = join(planningDir, 'todos', 'pending');
787
+ let count = 0;
788
+ const todos = [];
789
+ try {
790
+ const files = readdirSync(pendingDir).filter(f => f.endsWith('.md'));
791
+ for (const file of files) {
792
+ try {
793
+ const content = readFileSync(join(pendingDir, file), 'utf-8');
794
+ const createdMatch = content.match(/^created:\s*(.+)$/m);
795
+ const titleMatch = content.match(/^title:\s*(.+)$/m);
796
+ const areaMatch = content.match(/^area:\s*(.+)$/m);
797
+ const todoArea = areaMatch ? areaMatch[1].trim() : 'general';
798
+ if (area && todoArea !== area)
799
+ continue;
800
+ count++;
801
+ todos.push({
802
+ file,
803
+ created: createdMatch ? createdMatch[1].trim() : 'unknown',
804
+ title: titleMatch ? titleMatch[1].trim() : 'Untitled',
805
+ area: todoArea,
806
+ path: toPosixPath(relative(projectDir, join(pendingDir, file))),
807
+ });
808
+ }
809
+ catch { /* intentionally empty */ }
810
+ }
811
+ }
812
+ catch { /* intentionally empty */ }
813
+ const result = {
814
+ commit_docs: config.commit_docs,
815
+ date: now.toISOString().split('T')[0],
816
+ timestamp: now.toISOString(),
817
+ todo_count: count,
818
+ todos,
819
+ area_filter: area,
820
+ pending_dir: toPosixPath(relative(projectDir, join(planningDir, 'todos', 'pending'))),
821
+ completed_dir: toPosixPath(relative(projectDir, join(planningDir, 'todos', 'completed'))),
822
+ planning_exists: existsSync(planningDir),
823
+ todos_dir_exists: existsSync(join(planningDir, 'todos')),
824
+ pending_dir_exists: existsSync(pendingDir),
825
+ };
826
+ return { data: withProjectRoot(projectDir, result, config) };
827
+ };
828
+ // ─── initMilestoneOp ─────────────────────────────────────────────────────
829
+ /**
830
+ * Init handler for complete-milestone and audit-milestone workflows.
831
+ * Port of cmdInitMilestoneOp from init.cjs lines 758-817.
832
+ */
833
+ export const initMilestoneOp = async (_args, projectDir, workstream) => {
834
+ const config = await loadConfig(projectDir);
835
+ const paths = planningPaths(projectDir, workstream);
836
+ const planningDir = paths.planning;
837
+ const milestone = await getMilestoneInfo(projectDir, workstream);
838
+ const phasesDir = join(planningDir, 'phases');
839
+ let phaseCount = 0;
840
+ let completedPhases = 0;
841
+ // Bug #2633 — ROADMAP.md (current milestone section) is the authority for
842
+ // phase counts, NOT the on-disk `.planning/phases/` directory. After
843
+ // `phases clear` between milestones, on-disk dirs will be a subset of the
844
+ // roadmap until each phase is materialized, and reading from disk causes
845
+ // `all_phases_complete: true` to fire as soon as the materialized subset
846
+ // gets summaries — even though the roadmap has phases still to do.
847
+ let roadmapPhaseNumbers = [];
848
+ try {
849
+ const { readFile } = await import('node:fs/promises');
850
+ const roadmapRaw = await readFile(join(planningDir, 'ROADMAP.md'), 'utf-8');
851
+ const currentSection = await extractCurrentMilestone(roadmapRaw, projectDir, workstream);
852
+ roadmapPhaseNumbers = extractPhasesFromSection(currentSection).map(p => p.number);
853
+ }
854
+ catch { /* intentionally empty */ }
855
+ // Build the on-disk index keyed by the canonical full phase token (e.g.
856
+ // "3", "3A", "3.1") so distinct tokens with the same integer prefix never
857
+ // collide. Roadmap writes "Phase 3", "Phase 3A", and "Phase 3.1" as
858
+ // distinct phases and disk dirs preserve those tokens.
859
+ // Canonicalize a phase token by stripping leading zeros from the integer
860
+ // head while preserving any [A-Z]? suffix and dotted segments. So "03" →
861
+ // "3", "03A" → "3A", "03.1" → "3.1", "3A" → "3A". This lets disk dirs that
862
+ // pad ("03-alpha") match roadmap tokens ("Phase 3") without ever collapsing
863
+ // distinct tokens like "3" / "3A" / "3.1" into the same bucket.
864
+ const canonicalizePhase = (tok) => {
865
+ const m = tok.match(/^(\d+)([A-Z]?(?:\.\d+)*)$/);
866
+ return m ? String(parseInt(m[1], 10)) + m[2] : tok;
867
+ };
868
+ const diskPhaseDirs = new Map();
869
+ try {
870
+ const entries = readdirSync(phasesDir, { withFileTypes: true });
871
+ for (const e of entries) {
872
+ if (!e.isDirectory())
873
+ continue;
874
+ const m = e.name.match(/^(\d+[A-Z]?(?:\.\d+)*)/);
875
+ if (!m)
876
+ continue;
877
+ diskPhaseDirs.set(canonicalizePhase(m[1]), e.name);
878
+ }
879
+ }
880
+ catch { /* intentionally empty */ }
881
+ if (roadmapPhaseNumbers.length > 0) {
882
+ phaseCount = roadmapPhaseNumbers.length;
883
+ for (const num of roadmapPhaseNumbers) {
884
+ const dirName = diskPhaseDirs.get(canonicalizePhase(num));
885
+ if (!dirName)
886
+ continue;
887
+ try {
888
+ const phaseFiles = readdirSync(join(phasesDir, dirName));
889
+ const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
890
+ if (hasSummary)
891
+ completedPhases++;
892
+ }
893
+ catch { /* intentionally empty */ }
894
+ }
895
+ }
896
+ else {
897
+ // Fallback: no parseable ROADMAP (e.g. brand-new project). Preserve the
898
+ // legacy on-disk-count behavior so existing no-roadmap tests still pass.
899
+ try {
900
+ const entries = readdirSync(phasesDir, { withFileTypes: true });
901
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
902
+ phaseCount = dirs.length;
903
+ for (const dir of dirs) {
904
+ try {
905
+ const phaseFiles = readdirSync(join(phasesDir, dir));
906
+ const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
907
+ if (hasSummary)
908
+ completedPhases++;
909
+ }
910
+ catch { /* intentionally empty */ }
911
+ }
912
+ }
913
+ catch { /* intentionally empty */ }
914
+ }
915
+ const archiveDir = join(planningDir, 'archive');
916
+ let archivedMilestones = [];
917
+ try {
918
+ archivedMilestones = readdirSync(archiveDir, { withFileTypes: true })
919
+ .filter(e => e.isDirectory())
920
+ .map(e => e.name);
921
+ }
922
+ catch { /* intentionally empty */ }
923
+ const result = {
924
+ commit_docs: config.commit_docs,
925
+ milestone_version: milestone.version,
926
+ milestone_name: milestone.name,
927
+ milestone_slug: generateSlugInternal(milestone.name),
928
+ phase_count: phaseCount,
929
+ completed_phases: completedPhases,
930
+ all_phases_complete: phaseCount > 0 && phaseCount === completedPhases,
931
+ archived_milestones: archivedMilestones,
932
+ archive_count: archivedMilestones.length,
933
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
934
+ roadmap_exists: existsSync(join(planningDir, 'ROADMAP.md')),
935
+ state_exists: existsSync(join(planningDir, 'STATE.md')),
936
+ archive_exists: existsSync(archiveDir),
937
+ phases_dir_exists: existsSync(phasesDir),
938
+ };
939
+ return { data: withProjectRoot(projectDir, result, config) };
940
+ };
941
+ // ─── initMapCodebase ──────────────────────────────────────────────────────
942
+ /**
943
+ * Init handler for map-codebase workflow.
944
+ * Port of cmdInitMapCodebase from init.cjs lines 819-852.
945
+ */
946
+ export const initMapCodebase = async (_args, projectDir) => {
947
+ const config = await loadConfig(projectDir);
948
+ const now = new Date();
949
+ const codebaseDir = join(projectDir, '.planning', 'codebase');
950
+ let existingMaps = [];
951
+ try {
952
+ existingMaps = readdirSync(codebaseDir).filter(f => f.endsWith('.md'));
953
+ }
954
+ catch { /* intentionally empty */ }
955
+ const mapperModel = await getModelAlias('sdd-codebase-mapper', projectDir);
956
+ const result = {
957
+ mapper_model: mapperModel,
958
+ commit_docs: config.commit_docs,
959
+ search_gitignored: config.search_gitignored,
960
+ parallelization: config.parallelization,
961
+ subagent_timeout: config.subagent_timeout ?? undefined,
962
+ date: now.toISOString().split('T')[0],
963
+ timestamp: now.toISOString(),
964
+ codebase_dir: '.planning/codebase',
965
+ existing_maps: existingMaps,
966
+ has_maps: existingMaps.length > 0,
967
+ planning_exists: pathExists(projectDir, '.planning'),
968
+ codebase_dir_exists: pathExists(projectDir, '.planning/codebase'),
969
+ };
970
+ return { data: withProjectRoot(projectDir, result, config) };
971
+ };
972
+ // ─── initNewWorkspace ─────────────────────────────────────────────────────
973
+ /**
974
+ * Init handler for new-workspace workflow.
975
+ * Port of cmdInitNewWorkspace from init.cjs lines 1311-1335.
976
+ * T-14-01: Validates workspace name rejects path separators.
977
+ */
978
+ export const initNewWorkspace = async (_args, projectDir) => {
979
+ const home = process.env.HOME || homedir();
980
+ const defaultBase = join(home, 'sdd-workspaces');
981
+ // Detect child git repos (one level deep)
982
+ const childRepos = [];
983
+ try {
984
+ const entries = readdirSync(projectDir, { withFileTypes: true });
985
+ for (const entry of entries) {
986
+ if (!entry.isDirectory() || entry.name.startsWith('.'))
987
+ continue;
988
+ const fullPath = join(projectDir, entry.name);
989
+ if (existsSync(join(fullPath, '.git'))) {
990
+ let hasUncommitted = false;
991
+ try {
992
+ const status = execSync('git status --porcelain', { cwd: fullPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
993
+ hasUncommitted = status.trim().length > 0;
994
+ }
995
+ catch { /* best-effort */ }
996
+ childRepos.push({ name: entry.name, path: fullPath, has_uncommitted: hasUncommitted });
997
+ }
998
+ }
999
+ }
1000
+ catch { /* intentionally empty */ }
1001
+ let worktreeAvailable = false;
1002
+ try {
1003
+ execSync('git --version', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1004
+ worktreeAvailable = true;
1005
+ }
1006
+ catch { /* no git */ }
1007
+ const result = {
1008
+ default_workspace_base: defaultBase,
1009
+ child_repos: childRepos,
1010
+ child_repo_count: childRepos.length,
1011
+ worktree_available: worktreeAvailable,
1012
+ is_git_repo: pathExists(projectDir, '.git'),
1013
+ cwd_repo_name: basename(projectDir),
1014
+ };
1015
+ return { data: withProjectRoot(projectDir, result) };
1016
+ };
1017
+ // ─── initListWorkspaces ───────────────────────────────────────────────────
1018
+ /**
1019
+ * Init handler for list-workspaces workflow.
1020
+ * Port of cmdInitListWorkspaces from init.cjs lines 1337-1381.
1021
+ */
1022
+ export const initListWorkspaces = async (_args, _projectDir) => {
1023
+ const home = process.env.HOME || homedir();
1024
+ const defaultBase = join(home, 'sdd-workspaces');
1025
+ const workspaces = [];
1026
+ if (existsSync(defaultBase)) {
1027
+ let entries = [];
1028
+ try {
1029
+ entries = readdirSync(defaultBase, { withFileTypes: true });
1030
+ }
1031
+ catch {
1032
+ entries = [];
1033
+ }
1034
+ for (const entry of entries) {
1035
+ if (!entry.isDirectory())
1036
+ continue;
1037
+ const wsPath = join(defaultBase, String(entry.name));
1038
+ const manifestPath = join(wsPath, 'WORKSPACE.md');
1039
+ if (!existsSync(manifestPath))
1040
+ continue;
1041
+ let repoCount = 0;
1042
+ let strategy = 'unknown';
1043
+ try {
1044
+ const manifest = readFileSync(manifestPath, 'utf8');
1045
+ const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1046
+ if (strategyMatch)
1047
+ strategy = strategyMatch[1].trim();
1048
+ const tableRows = manifest.split('\n').filter(l => l.match(/^\|\s*\w/) && !l.includes('Repo') && !l.includes('---'));
1049
+ repoCount = tableRows.length;
1050
+ }
1051
+ catch { /* best-effort */ }
1052
+ const hasProject = existsSync(join(wsPath, '.planning', 'PROJECT.md'));
1053
+ workspaces.push({
1054
+ name: entry.name,
1055
+ path: wsPath,
1056
+ repo_count: repoCount,
1057
+ strategy,
1058
+ has_project: hasProject,
1059
+ });
1060
+ }
1061
+ }
1062
+ const result = {
1063
+ workspace_base: defaultBase,
1064
+ workspaces,
1065
+ workspace_count: workspaces.length,
1066
+ };
1067
+ return { data: result };
1068
+ };
1069
+ // ─── initRemoveWorkspace ──────────────────────────────────────────────────
1070
+ /**
1071
+ * Init handler for remove-workspace workflow.
1072
+ * Port of cmdInitRemoveWorkspace from init.cjs lines 1383-1443.
1073
+ * T-14-01: Validates workspace name rejects path separators and '..' sequences.
1074
+ */
1075
+ export const initRemoveWorkspace = async (args, _projectDir) => {
1076
+ const name = args[0];
1077
+ if (!name) {
1078
+ return { data: { error: 'workspace name required for init remove-workspace' } };
1079
+ }
1080
+ // T-14-01: Reject path traversal attempts
1081
+ if (name.includes('/') || name.includes('\\') || name.includes('..')) {
1082
+ return { data: { error: `Invalid workspace name: ${name} (path separators not allowed)` } };
1083
+ }
1084
+ const home = process.env.HOME || homedir();
1085
+ const defaultBase = join(home, 'sdd-workspaces');
1086
+ const wsPath = join(defaultBase, name);
1087
+ const manifestPath = join(wsPath, 'WORKSPACE.md');
1088
+ if (!existsSync(wsPath)) {
1089
+ return { data: { error: `Workspace not found: ${wsPath}` } };
1090
+ }
1091
+ const repos = [];
1092
+ let strategy = 'unknown';
1093
+ if (existsSync(manifestPath)) {
1094
+ try {
1095
+ const manifest = readFileSync(manifestPath, 'utf8');
1096
+ const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1097
+ if (strategyMatch)
1098
+ strategy = strategyMatch[1].trim();
1099
+ const lines = manifest.split('\n');
1100
+ for (const line of lines) {
1101
+ const match = line.match(/^\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|$/);
1102
+ if (match && match[1] !== 'Repo' && !match[1].includes('---')) {
1103
+ repos.push({ name: match[1], source: match[2], branch: match[3], strategy: match[4] });
1104
+ }
1105
+ }
1106
+ }
1107
+ catch { /* best-effort */ }
1108
+ }
1109
+ // Check for uncommitted changes in workspace repos
1110
+ const dirtyRepos = [];
1111
+ for (const repo of repos) {
1112
+ const repoPath = join(wsPath, repo.name);
1113
+ if (!existsSync(repoPath))
1114
+ continue;
1115
+ try {
1116
+ const status = execSync('git status --porcelain', { cwd: repoPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1117
+ if (status.trim().length > 0) {
1118
+ dirtyRepos.push(repo.name);
1119
+ }
1120
+ }
1121
+ catch { /* best-effort */ }
1122
+ }
1123
+ const result = {
1124
+ workspace_name: name,
1125
+ workspace_path: wsPath,
1126
+ has_manifest: existsSync(manifestPath),
1127
+ strategy,
1128
+ repos,
1129
+ repo_count: repos.length,
1130
+ dirty_repos: dirtyRepos,
1131
+ has_dirty_repos: dirtyRepos.length > 0,
1132
+ };
1133
+ return { data: result };
1134
+ };
1135
+ // ─── initIngestDocs ───────────────────────────────────────────────────────
1136
+ /**
1137
+ * Init handler for ingest-docs workflow.
1138
+ * Mirrors `initResume` shape but without current-agent-id lookup — the
1139
+ * ingest-docs workflow reads `project_exists`, `planning_exists`, `has_git`,
1140
+ * and `project_path` to branch between new-project vs merge-milestone modes.
1141
+ */
1142
+ export const initIngestDocs = async (_args, projectDir) => {
1143
+ const config = await loadConfig(projectDir);
1144
+ const result = {
1145
+ project_exists: pathExists(projectDir, '.planning/PROJECT.md'),
1146
+ planning_exists: pathExists(projectDir, '.planning'),
1147
+ // Bug #3491: detect parent worktree to avoid nested .git init.
1148
+ has_git: (() => gitWorktreeInfo(projectDir).inside)(),
1149
+ git_worktree_root: (() => gitWorktreeInfo(projectDir).worktreeRoot)(),
1150
+ in_nested_subdir: (() => {
1151
+ const info = gitWorktreeInfo(projectDir);
1152
+ return info.inside && info.worktreeRoot !== null && info.worktreeRoot !== projectDir;
1153
+ })(),
1154
+ project_path: '.planning/PROJECT.md',
1155
+ commit_docs: config.commit_docs,
1156
+ };
1157
+ return { data: withProjectRoot(projectDir, result, config) };
1158
+ };
1159
+ //# sourceMappingURL=init.js.map