@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
@@ -4,24 +4,38 @@
4
4
 
5
5
  const fs = require('fs');
6
6
  const path = require('path');
7
- const { execSync } = require('child_process');
8
- const { loadConfig, resolveModelInternal, findPhaseInternal, getRoadmapPhaseInternal, pathExistsInternal, generateSlugInternal, getMilestoneInfo, getMilestonePhaseFilter, stripShippedMilestones, extractCurrentMilestone, normalizePhaseName, planningPaths, planningDir, planningRoot, toPosixPath, output, error, checkAgentsInstalled, phaseTokenMatches } = require('./core.cjs');
7
+ const { execGit, platformWriteSync, platformReadSync } = require('./shell-command-projection.cjs');
8
+ const { loadConfig, resolveModelInternal, findPhaseInternal, getRoadmapPhaseInternal, pathExistsInternal, gitWorktreeInfoInternal, generateSlugInternal, getMilestoneInfo, getMilestonePhaseFilter, stripShippedMilestones, extractCurrentMilestone, normalizePhaseName, toPosixPath, output, error, checkAgentsInstalled, phaseTokenMatches } = require('./core.cjs');
9
+ const { planningPaths, planningDir, planningRoot } = require('./planning-workspace.cjs');
10
+ const { maskIfSecret } = require('./secrets.cjs');
11
+ const scanPhasePlans = require('./plan-scan.cjs');
12
+ const { stateExtractField } = require('./state-document.cjs');
13
+ const { determinePhaseStatus } = require('./commands.cjs');
14
+
15
+ // Accept all bold/colon variants of the Requirements header (#2769):
16
+ // **Requirements:** / **Requirements**: / **Requirements** : render the
17
+ // same in markdown but differ textually.
18
+ const REQUIREMENTS_HEADER_RE = /^\*\*Requirements:?\*\*[^\S\n]*:?[^\S\n]*([^\n]*)$/m;
19
+
20
+ function listPhaseSummaryFiles(phaseDir) {
21
+ return scanPhasePlans(phaseDir).summaryFiles;
22
+ }
23
+
24
+ function listPhasePlanFiles(phaseDir) {
25
+ return scanPhasePlans(phaseDir).planFiles;
26
+ }
9
27
 
10
28
  function getLatestCompletedMilestone(cwd) {
11
29
  const milestonesPath = path.join(planningRoot(cwd), 'MILESTONES.md');
12
- if (!fs.existsSync(milestonesPath)) return null;
13
-
14
- try {
15
- const content = fs.readFileSync(milestonesPath, 'utf-8');
16
- const match = content.match(/^##\s+(v[\d.]+)\s+(.+?)\s+\(Shipped:/m);
17
- if (!match) return null;
18
- return {
19
- version: match[1],
20
- name: match[2].trim(),
21
- };
22
- } catch {
23
- return null;
24
- }
30
+ const content = platformReadSync(milestonesPath);
31
+ if (content === null) return null;
32
+
33
+ const match = content.match(/^##\s+(v[\d.]+)\s+(.+?)\s+\(Shipped:/m);
34
+ if (!match) return null;
35
+ return {
36
+ version: match[1],
37
+ name: match[2].trim(),
38
+ };
25
39
  }
26
40
 
27
41
  /**
@@ -44,6 +58,20 @@ function withProjectRoot(cwd, result) {
44
58
  if (config.response_language) {
45
59
  result.response_language = config.response_language;
46
60
  }
61
+ // Inject project identity into all init outputs so handoff blocks
62
+ // can include project context for cross-session continuity.
63
+ if (config.project_code) {
64
+ result.project_code = config.project_code;
65
+ }
66
+ // Extract project title from PROJECT.md first H1 heading.
67
+ const projectMdPath = path.join(planningDir(cwd), 'PROJECT.md');
68
+ const content = platformReadSync(projectMdPath);
69
+ if (content) {
70
+ const h1Match = content.match(/^#\s+(.+)$/m);
71
+ if (h1Match) {
72
+ result.project_title = h1Match[1].trim();
73
+ }
74
+ }
47
75
  return result;
48
76
  }
49
77
 
@@ -58,6 +86,16 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
58
86
 
59
87
  const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
60
88
 
89
+ // If findPhaseInternal matched an archived phase from a prior milestone, but
90
+ // the phase exists in the current milestone's ROADMAP.md, ignore the archive
91
+ // match — we are initializing a new phase in the current milestone that
92
+ // happens to share a number with an archived one. Without this, phase_dir,
93
+ // phase_slug and related fields would point at artifacts from a previous
94
+ // milestone.
95
+ if (phaseInfo?.archived && roadmapPhase?.found) {
96
+ phaseInfo = null;
97
+ }
98
+
61
99
  // Fallback to ROADMAP.md if no phase directory exists yet
62
100
  if (!phaseInfo && roadmapPhase?.found) {
63
101
  const phaseName = roadmapPhase.phase_name;
@@ -76,7 +114,7 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
76
114
  has_reviews: false,
77
115
  };
78
116
  }
79
- const reqMatch = roadmapPhase?.section?.match(/^\*\*Requirements\*\*:[^\S\n]*([^\n]*)$/m);
117
+ const reqMatch = roadmapPhase?.section?.match(REQUIREMENTS_HEADER_RE);
80
118
  const reqExtracted = reqMatch
81
119
  ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
82
120
  : null;
@@ -88,6 +126,7 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
88
126
  verifier_model: resolveModelInternal(cwd, 'sdd-verifier'),
89
127
 
90
128
  // Config flags
129
+ tdd_mode: options.tdd || config.tdd_mode || false,
91
130
  commit_docs: config.commit_docs,
92
131
  sub_repos: config.sub_repos,
93
132
  parallelization: config.parallelization,
@@ -142,20 +181,16 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
142
181
  // Optional --validate: run state validation and include warnings (#1627)
143
182
  if (options.validate) {
144
183
  try {
145
- const { cmdStateValidate } = require('./state.cjs');
146
- // Capture validate output by temporarily redirecting
147
184
  const statePath = path.join(planningDir(cwd), 'STATE.md');
148
- if (fs.existsSync(statePath)) {
149
- const stateContent = fs.readFileSync(statePath, 'utf-8');
150
- const { stateExtractField } = require('./state.cjs');
185
+ const stateContent = platformReadSync(statePath);
186
+ if (stateContent !== null) {
151
187
  const status = stateExtractField(stateContent, 'Status') || '';
152
188
  result.state_validation_ran = true;
153
189
  // Simple inline validation — check for obvious drift
154
190
  const warnings = [];
155
191
  const phasesPath = planningPaths(cwd).phases;
156
192
  if (phaseInfo && phaseInfo.directory && fs.existsSync(path.join(cwd, phaseInfo.directory))) {
157
- const files = fs.readdirSync(path.join(cwd, phaseInfo.directory));
158
- const diskPlans = files.filter(f => f.match(/-PLAN\.md$/i)).length;
193
+ const diskPlans = listPhasePlanFiles(path.join(cwd, phaseInfo.directory)).length;
159
194
  const totalPlansRaw = stateExtractField(stateContent, 'Total Plans in Phase');
160
195
  const totalPlansInPhase = totalPlansRaw ? parseInt(totalPlansRaw, 10) : null;
161
196
  if (totalPlansInPhase !== null && diskPlans !== totalPlansInPhase) {
@@ -180,6 +215,16 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
180
215
 
181
216
  const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
182
217
 
218
+ // If findPhaseInternal matched an archived phase from a prior milestone, but
219
+ // the phase exists in the current milestone's ROADMAP.md, ignore the archive
220
+ // match — we are planning a new phase in the current milestone that happens
221
+ // to share a number with an archived one. Without this, phase_dir,
222
+ // phase_slug, has_context and has_research would point at artifacts from a
223
+ // previous milestone.
224
+ if (phaseInfo?.archived && roadmapPhase?.found) {
225
+ phaseInfo = null;
226
+ }
227
+
183
228
  // Fallback to ROADMAP.md if no phase directory exists yet
184
229
  if (!phaseInfo && roadmapPhase?.found) {
185
230
  const phaseName = roadmapPhase.phase_name;
@@ -198,12 +243,29 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
198
243
  has_reviews: false,
199
244
  };
200
245
  }
201
- const reqMatch = roadmapPhase?.section?.match(/^\*\*Requirements\*\*:[^\S\n]*([^\n]*)$/m);
246
+ const reqMatch = roadmapPhase?.section?.match(REQUIREMENTS_HEADER_RE);
202
247
  const reqExtracted = reqMatch
203
248
  ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
204
249
  : null;
205
250
  const phase_req_ids = (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
206
251
 
252
+ // #3287: compute the canonical directory name with project_code prefix so
253
+ // the first-touch mkdir in /sdd:plan-phase stays consistent with phase.add.
254
+ const phaseDirPlan = phaseInfo?.directory || null;
255
+ const phaseNumberPlan = phaseInfo?.phase_number || null;
256
+ const phaseNamePlan = phaseInfo?.phase_name || null;
257
+ const rawProjectCodePlan = config.project_code || '';
258
+ let expectedPhaseDirPlan = null;
259
+ if (!phaseDirPlan && phaseNumberPlan && phaseNamePlan) {
260
+ const paddedNum = normalizePhaseName(phaseNumberPlan);
261
+ const slug = generateSlugInternal(phaseNamePlan).substring(0, 60);
262
+ if (slug) {
263
+ const prefix = rawProjectCodePlan ? `${rawProjectCodePlan}-` : '';
264
+ const dirName = `${prefix}${paddedNum}-${slug}`;
265
+ expectedPhaseDirPlan = toPosixPath(path.relative(cwd, path.join(planningPaths(cwd).phases, dirName)));
266
+ }
267
+ }
268
+
207
269
  const result = {
208
270
  // Models
209
271
  researcher_model: resolveModelInternal(cwd, 'sdd-phase-researcher'),
@@ -211,21 +273,43 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
211
273
  checker_model: resolveModelInternal(cwd, 'sdd-plan-checker'),
212
274
 
213
275
  // Workflow flags
276
+ tdd_mode: options.tdd || config.tdd_mode || false,
214
277
  research_enabled: config.research,
215
278
  plan_checker_enabled: config.plan_checker,
216
279
  nyquist_validation_enabled: config.nyquist_validation,
217
280
  commit_docs: config.commit_docs,
218
281
  text_mode: config.text_mode,
282
+ // Auto-advance config — included so workflows don't need separate config-get
283
+ // calls for these values, which causes infinite config-read loops on some models
284
+ // (e.g. Kimi K2.5). See #2192.
285
+ auto_advance: !!(config.auto_advance),
286
+ auto_chain_active: !!(config._auto_chain_active),
287
+ mode: config.mode || 'interactive',
219
288
 
220
289
  // Phase info
221
290
  phase_found: !!phaseInfo,
222
- phase_dir: phaseInfo?.directory || null,
223
- phase_number: phaseInfo?.phase_number || null,
224
- phase_name: phaseInfo?.phase_name || null,
291
+ phase_dir: phaseDirPlan,
292
+ expected_phase_dir: expectedPhaseDirPlan,
293
+ phase_number: phaseNumberPlan,
294
+ phase_name: phaseNamePlan,
225
295
  phase_slug: phaseInfo?.phase_slug || null,
226
- padded_phase: phaseInfo?.phase_number ? normalizePhaseName(phaseInfo.phase_number) : null,
296
+ padded_phase: phaseNumberPlan ? normalizePhaseName(phaseNumberPlan) : null,
227
297
  phase_req_ids,
228
298
 
299
+ // #3569: surface phase lifecycle status so /sdd:plan-phase can short-circuit
300
+ // on closed (Complete) phases instead of silently replanning over shipped
301
+ // code. Reuses determinePhaseStatus — the project-wide vocabulary
302
+ // (Pending | Planned | In Progress | Executed | Complete | Needs Review).
303
+ // No directory yet → Pending (phase has not been started).
304
+ phase_status: phaseDirPlan
305
+ ? determinePhaseStatus(
306
+ phaseInfo?.plans?.length || 0,
307
+ phaseInfo?.summaries?.length || 0,
308
+ path.join(cwd, phaseDirPlan),
309
+ 'Pending',
310
+ )
311
+ : 'Pending',
312
+
229
313
  // Existing artifacts
230
314
  has_research: phaseInfo?.has_research || false,
231
315
  has_context: phaseInfo?.has_context || false,
@@ -241,6 +325,9 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
241
325
  state_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'STATE.md'))),
242
326
  roadmap_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'ROADMAP.md'))),
243
327
  requirements_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'REQUIREMENTS.md'))),
328
+
329
+ // Pattern mapper output (null until PATTERNS.md exists in phase dir)
330
+ patterns_path: null,
244
331
  };
245
332
 
246
333
  if (phaseInfo?.directory) {
@@ -268,6 +355,10 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
268
355
  if (reviewsFile) {
269
356
  result.reviews_path = toPosixPath(path.join(phaseInfo.directory, reviewsFile));
270
357
  }
358
+ const patternsFile = files.find(f => f.endsWith('-PATTERNS.md') || f === 'PATTERNS.md');
359
+ if (patternsFile) {
360
+ result.patterns_path = toPosixPath(path.join(phaseInfo.directory, patternsFile));
361
+ }
271
362
  } catch { /* intentionally empty */ }
272
363
  }
273
364
 
@@ -275,9 +366,8 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
275
366
  if (options.validate) {
276
367
  try {
277
368
  const statePath = path.join(planningDir(cwd), 'STATE.md');
278
- if (fs.existsSync(statePath)) {
279
- const { stateExtractField } = require('./state.cjs');
280
- const stateContent = fs.readFileSync(statePath, 'utf-8');
369
+ const stateContent = platformReadSync(statePath);
370
+ if (stateContent !== null) {
281
371
  const warnings = [];
282
372
  result.state_validation_ran = true;
283
373
  const totalPlansRaw = stateExtractField(stateContent, 'Total Plans in Phase');
@@ -383,8 +473,17 @@ function cmdInitNewProject(cwd, raw) {
383
473
  is_brownfield: hasCode || hasPackageFile,
384
474
  needs_codebase_map: (hasCode || hasPackageFile) && !pathExistsInternal(cwd, '.planning/codebase'),
385
475
 
386
- // Git state
387
- has_git: pathExistsInternal(cwd, '.git'),
476
+ // Git state (Bug #3491: detect parent worktree to avoid nested .git init)
477
+ ...(() => {
478
+ const info = gitWorktreeInfoInternal(cwd);
479
+ const worktreeRoot = info.worktreeRoot;
480
+ const inNestedSubdir = info.inside && worktreeRoot !== null && worktreeRoot !== cwd;
481
+ return {
482
+ has_git: info.inside,
483
+ git_worktree_root: worktreeRoot,
484
+ in_nested_subdir: inNestedSubdir,
485
+ };
486
+ })(),
388
487
 
389
488
  // Enhanced search
390
489
  brave_search_available: hasBraveSearch,
@@ -407,8 +506,11 @@ function cmdInitNewMilestone(cwd, raw) {
407
506
 
408
507
  try {
409
508
  if (fs.existsSync(phasesDir)) {
509
+ // Bug #2445: filter phase dirs to current milestone only so stale dirs
510
+ // from a prior milestone that were not archived don't inflate the count.
511
+ const isDirInMilestone = getMilestonePhaseFilter(cwd);
410
512
  phaseDirCount = fs.readdirSync(phasesDir, { withFileTypes: true })
411
- .filter(entry => entry.isDirectory())
513
+ .filter(entry => entry.isDirectory() && isDirInMilestone(entry.name))
412
514
  .length;
413
515
  }
414
516
  } catch {}
@@ -503,14 +605,42 @@ function cmdInitQuick(cwd, description, raw) {
503
605
  output(withProjectRoot(cwd, result), raw);
504
606
  }
505
607
 
608
+ /**
609
+ * Init handler for ingest-docs workflow (#2801).
610
+ *
611
+ * Returns the minimal set of fields that ingest-docs.md needs to detect
612
+ * whether a project/planning dir exists and choose new vs merge mode.
613
+ * Mirrors the initIngestDocs SDK handler in sdk/src/query/init.ts.
614
+ */
615
+ function cmdInitIngestDocs(cwd, raw) {
616
+ const config = loadConfig(cwd);
617
+ const result = {
618
+ project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
619
+ planning_exists: fs.existsSync(planningRoot(cwd)),
620
+ ...(() => {
621
+ // Bug #3491 — see cmdInitNewProject above. Same shallow-check bug.
622
+ const info = gitWorktreeInfoInternal(cwd);
623
+ const worktreeRoot = info.worktreeRoot;
624
+ const inNestedSubdir = info.inside && worktreeRoot !== null && worktreeRoot !== cwd;
625
+ return {
626
+ has_git: info.inside,
627
+ git_worktree_root: worktreeRoot,
628
+ in_nested_subdir: inNestedSubdir,
629
+ };
630
+ })(),
631
+ project_path: '.planning/PROJECT.md',
632
+ commit_docs: config.commit_docs,
633
+ };
634
+ output(withProjectRoot(cwd, result), raw);
635
+ }
636
+
506
637
  function cmdInitResume(cwd, raw) {
507
638
  const config = loadConfig(cwd);
508
639
 
509
640
  // Check for interrupted agent
510
641
  let interruptedAgentId = null;
511
- try {
512
- interruptedAgentId = fs.readFileSync(path.join(planningRoot(cwd), 'current-agent-id.txt'), 'utf-8').trim();
513
- } catch { /* intentionally empty */ }
642
+ const agentIdRaw = platformReadSync(path.join(planningRoot(cwd), 'current-agent-id.txt'));
643
+ if (agentIdRaw !== null) interruptedAgentId = agentIdRaw.trim();
514
644
 
515
645
  const result = {
516
646
  // File existence
@@ -543,6 +673,16 @@ function cmdInitVerifyWork(cwd, phase, raw) {
543
673
  const config = loadConfig(cwd);
544
674
  let phaseInfo = findPhaseInternal(cwd, phase);
545
675
 
676
+ // If findPhaseInternal matched an archived phase from a prior milestone, but
677
+ // the phase exists in the current milestone's ROADMAP.md, ignore the archive
678
+ // match — same pattern as cmdInitPhaseOp.
679
+ if (phaseInfo?.archived) {
680
+ const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
681
+ if (roadmapPhase?.found) {
682
+ phaseInfo = null;
683
+ }
684
+ }
685
+
546
686
  // Fallback to ROADMAP.md if no phase directory exists yet
547
687
  if (!phaseInfo) {
548
688
  const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
@@ -633,20 +773,42 @@ function cmdInitPhaseOp(cwd, phase, raw) {
633
773
  }
634
774
  }
635
775
 
776
+ // #3287: compute the canonical directory name with project_code prefix so
777
+ // the first-touch mkdir in /sdd:discuss-phase stays consistent with phase.add.
778
+ const phaseDir = phaseInfo?.directory || null;
779
+ const phaseNumber = phaseInfo?.phase_number || null;
780
+ const phaseName = phaseInfo?.phase_name || null;
781
+ const rawProjectCode = config.project_code || '';
782
+ let expectedPhaseDir = null;
783
+ if (!phaseDir && phaseNumber && phaseName) {
784
+ const paddedNum = normalizePhaseName(phaseNumber);
785
+ const slug = generateSlugInternal(phaseName).substring(0, 60);
786
+ if (slug) {
787
+ const prefix = rawProjectCode ? `${rawProjectCode}-` : '';
788
+ const dirName = `${prefix}${paddedNum}-${slug}`;
789
+ expectedPhaseDir = toPosixPath(path.relative(cwd, path.join(planningPaths(cwd).phases, dirName)));
790
+ }
791
+ }
792
+
636
793
  const result = {
637
794
  // Config
638
795
  commit_docs: config.commit_docs,
639
- brave_search: config.brave_search,
640
- firecrawl: config.firecrawl,
641
- exa_search: config.exa_search,
796
+ // #2997: secret config keys may be either booleans (availability flags) or
797
+ // string API keys (when user did `sdd-tools config-set brave_search XXX`).
798
+ // Pass booleans through; mask string values so the init bundle never echoes
799
+ // plaintext credentials. SDK init.ts mirrors this masking.
800
+ brave_search: typeof config.brave_search === 'string' ? maskIfSecret('brave_search', config.brave_search) : config.brave_search,
801
+ firecrawl: typeof config.firecrawl === 'string' ? maskIfSecret('firecrawl', config.firecrawl) : config.firecrawl,
802
+ exa_search: typeof config.exa_search === 'string' ? maskIfSecret('exa_search', config.exa_search) : config.exa_search,
642
803
 
643
804
  // Phase info
644
805
  phase_found: !!phaseInfo,
645
- phase_dir: phaseInfo?.directory || null,
646
- phase_number: phaseInfo?.phase_number || null,
647
- phase_name: phaseInfo?.phase_name || null,
806
+ phase_dir: phaseDir,
807
+ expected_phase_dir: expectedPhaseDir,
808
+ phase_number: phaseNumber,
809
+ phase_name: phaseName,
648
810
  phase_slug: phaseInfo?.phase_slug || null,
649
- padded_phase: phaseInfo?.phase_number ? normalizePhaseName(phaseInfo.phase_number) : null,
811
+ padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
650
812
 
651
813
  // Existing artifacts
652
814
  has_research: phaseInfo?.has_research || false,
@@ -708,8 +870,9 @@ function cmdInitTodos(cwd, area, raw) {
708
870
  try {
709
871
  const files = fs.readdirSync(pendingDir).filter(f => f.endsWith('.md'));
710
872
  for (const file of files) {
873
+ const content = platformReadSync(path.join(pendingDir, file));
874
+ if (content === null) continue;
711
875
  try {
712
- const content = fs.readFileSync(path.join(pendingDir, file), 'utf-8');
713
876
  const createdMatch = content.match(/^created:\s*(.+)$/m);
714
877
  const titleMatch = content.match(/^title:\s*(.+)$/m);
715
878
  const areaMatch = content.match(/^area:\s*(.+)$/m);
@@ -763,20 +926,68 @@ function cmdInitMilestoneOp(cwd, raw) {
763
926
  let phaseCount = 0;
764
927
  let completedPhases = 0;
765
928
  const phasesDir = path.join(planningDir(cwd), 'phases');
929
+
930
+ // Bug #2633 — ROADMAP.md (current milestone section) is the authority for
931
+ // phase counts, NOT the on-disk `.planning/phases/` directory. After
932
+ // `phases clear` between milestones, on-disk dirs will be a subset of the
933
+ // roadmap until each phase is materialized; reading from disk causes
934
+ // `all_phases_complete: true` to fire prematurely.
935
+ let roadmapPhaseNumbers = [];
936
+ try {
937
+ const roadmapPath = path.join(planningDir(cwd), 'ROADMAP.md');
938
+ const roadmapRaw = fs.readFileSync(roadmapPath, 'utf-8');
939
+ const currentSection = extractCurrentMilestone(roadmapRaw, cwd);
940
+ const phasePattern = /#{2,4}\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:/gi;
941
+ let m;
942
+ while ((m = phasePattern.exec(currentSection)) !== null) {
943
+ roadmapPhaseNumbers.push(m[1]);
944
+ }
945
+ } catch { /* intentionally empty */ }
946
+
947
+ // Canonicalize a phase token by stripping leading zeros from the integer
948
+ // head while preserving any [A-Z]? suffix and dotted segments. So "03" →
949
+ // "3", "03A" → "3A", "03.1" → "3.1", "3A" → "3A". Disk dirs that pad
950
+ // ("03-alpha") then match roadmap tokens ("Phase 3") without ever
951
+ // collapsing distinct tokens like "3" / "3A" / "3.1" into the same bucket.
952
+ const canonicalizePhase = (tok) => {
953
+ const m = tok.match(/^(\d+)([A-Z]?(?:\.\d+)*)$/);
954
+ return m ? String(parseInt(m[1], 10)) + m[2] : tok;
955
+ };
956
+ const diskPhaseDirs = new Map();
766
957
  try {
767
958
  const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
768
- const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
769
- phaseCount = dirs.length;
959
+ for (const e of entries) {
960
+ if (!e.isDirectory()) continue;
961
+ const m = e.name.match(/^(\d+[A-Z]?(?:\.\d+)*)/);
962
+ if (!m) continue;
963
+ diskPhaseDirs.set(canonicalizePhase(m[1]), e.name);
964
+ }
965
+ } catch { /* intentionally empty */ }
770
966
 
771
- // Count phases with summaries (completed)
772
- for (const dir of dirs) {
967
+ if (roadmapPhaseNumbers.length > 0) {
968
+ phaseCount = roadmapPhaseNumbers.length;
969
+ for (const num of roadmapPhaseNumbers) {
970
+ const dirName = diskPhaseDirs.get(canonicalizePhase(num));
971
+ if (!dirName) continue;
773
972
  try {
774
- const phaseFiles = fs.readdirSync(path.join(phasesDir, dir));
775
- const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
973
+ const hasSummary = listPhaseSummaryFiles(path.join(phasesDir, dirName)).length > 0;
776
974
  if (hasSummary) completedPhases++;
777
975
  } catch { /* intentionally empty */ }
778
976
  }
779
- } catch { /* intentionally empty */ }
977
+ } else {
978
+ // Fallback: no parseable ROADMAP — preserve legacy on-disk behavior.
979
+ try {
980
+ const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
981
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
982
+ phaseCount = dirs.length;
983
+ for (const dir of dirs) {
984
+ try {
985
+ const hasSummary = listPhaseSummaryFiles(path.join(phasesDir, dir)).length > 0;
986
+ if (hasSummary) completedPhases++;
987
+ } catch { /* intentionally empty */ }
988
+ }
989
+ } catch { /* intentionally empty */ }
990
+ }
780
991
 
781
992
  // Check archive
782
993
  const archiveDir = path.join(planningRoot(cwd), 'archive');
@@ -818,6 +1029,7 @@ function cmdInitMilestoneOp(cwd, raw) {
818
1029
 
819
1030
  function cmdInitMapCodebase(cwd, raw) {
820
1031
  const config = loadConfig(cwd);
1032
+ const now = new Date();
821
1033
 
822
1034
  // Check for existing codebase maps
823
1035
  const codebaseDir = path.join(planningRoot(cwd), 'codebase');
@@ -836,6 +1048,10 @@ function cmdInitMapCodebase(cwd, raw) {
836
1048
  parallelization: config.parallelization,
837
1049
  subagent_timeout: config.subagent_timeout,
838
1050
 
1051
+ // Timestamps
1052
+ date: now.toISOString().split('T')[0],
1053
+ timestamp: now.toISOString(),
1054
+
839
1055
  // Paths
840
1056
  codebase_dir: '.planning/codebase',
841
1057
 
@@ -860,10 +1076,10 @@ function cmdInitManager(cwd, raw) {
860
1076
 
861
1077
  // Validate prerequisites
862
1078
  if (!fs.existsSync(paths.roadmap)) {
863
- error('No ROADMAP.md found. Run /sdd-new-milestone first.');
1079
+ error('No ROADMAP.md found. Run /sdd:new-milestone first.');
864
1080
  }
865
1081
  if (!fs.existsSync(paths.state)) {
866
- error('No STATE.md found. Run /sdd-new-milestone first.');
1082
+ error('No STATE.md found. Run /sdd:new-milestone first.');
867
1083
  }
868
1084
  const rawContent = fs.readFileSync(paths.roadmap, 'utf-8');
869
1085
  const content = extractCurrentMilestone(rawContent, cwd);
@@ -923,8 +1139,8 @@ function cmdInitManager(cwd, raw) {
923
1139
  if (dirMatch) {
924
1140
  const fullDir = path.join(phasesDir, dirMatch);
925
1141
  const phaseFiles = fs.readdirSync(fullDir);
926
- planCount = phaseFiles.filter(f => f.endsWith('-PLAN.md') || f === 'PLAN.md').length;
927
- summaryCount = phaseFiles.filter(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md').length;
1142
+ planCount = listPhasePlanFiles(fullDir).length;
1143
+ summaryCount = listPhaseSummaryFiles(fullDir).length;
928
1144
  hasContext = phaseFiles.some(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
929
1145
  hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
930
1146
 
@@ -985,6 +1201,17 @@ function cmdInitManager(cwd, raw) {
985
1201
 
986
1202
  // Dependency satisfaction: check if all depends_on phases are complete
987
1203
  const completedNums = new Set(phases.filter(p => p.disk_status === 'complete').map(p => p.number));
1204
+
1205
+ // Also include phases from previously shipped milestones — they are all
1206
+ // complete by definition (a milestone only ships when all phases are done).
1207
+ // rawContent is the full ROADMAP.md (including <details>-wrapped shipped
1208
+ // milestone sections that extractCurrentMilestone strips out).
1209
+ const _allCompletedPattern = /-\s*\[x\]\s*.*Phase\s+(\d+[A-Z]?(?:\.\d+)*)[:\s]/gi;
1210
+ let _allMatch;
1211
+ while ((_allMatch = _allCompletedPattern.exec(rawContent)) !== null) {
1212
+ completedNums.add(_allMatch[1]);
1213
+ }
1214
+
988
1215
  for (const phase of phases) {
989
1216
  if (!phase.depends_on || /^none$/i.test(phase.depends_on.trim())) {
990
1217
  phase.deps_satisfied = true;
@@ -1003,23 +1230,19 @@ function cmdInitManager(cwd, raw) {
1003
1230
  : '—';
1004
1231
  }
1005
1232
 
1006
- // Sliding window: discuss is sequential — only the first undiscussed phase is available
1007
- let foundNextToDiscuss = false;
1008
1233
  for (const phase of phases) {
1009
- if (!foundNextToDiscuss && (phase.disk_status === 'empty' || phase.disk_status === 'no_directory')) {
1010
- phase.is_next_to_discuss = true;
1011
- foundNextToDiscuss = true;
1012
- } else {
1013
- phase.is_next_to_discuss = false;
1014
- }
1234
+ phase.is_next_to_discuss =
1235
+ (phase.disk_status === 'empty' || phase.disk_status === 'no_directory') &&
1236
+ phase.deps_satisfied;
1015
1237
  }
1016
1238
 
1017
1239
  // Check for WAITING.json signal
1018
1240
  let waitingSignal = null;
1019
1241
  try {
1020
1242
  const waitingPath = path.join(cwd, '.planning', 'WAITING.json');
1021
- if (fs.existsSync(waitingPath)) {
1022
- waitingSignal = JSON.parse(fs.readFileSync(waitingPath, 'utf-8'));
1243
+ const waitingRaw = platformReadSync(waitingPath);
1244
+ if (waitingRaw !== null) {
1245
+ waitingSignal = JSON.parse(waitingRaw);
1023
1246
  }
1024
1247
  } catch { /* intentionally empty */ }
1025
1248
 
@@ -1036,7 +1259,7 @@ function cmdInitManager(cwd, raw) {
1036
1259
  phase_name: phase.name,
1037
1260
  action: 'execute',
1038
1261
  reason: `${phase.plan_count} plans ready, dependencies met`,
1039
- command: `/sdd-execute-phase ${phase.number}`,
1262
+ command: `/sdd:execute-phase ${phase.number}`,
1040
1263
  });
1041
1264
  } else if (phase.disk_status === 'discussed' || phase.disk_status === 'researched') {
1042
1265
  recommendedActions.push({
@@ -1044,7 +1267,7 @@ function cmdInitManager(cwd, raw) {
1044
1267
  phase_name: phase.name,
1045
1268
  action: 'plan',
1046
1269
  reason: 'Context gathered, ready for planning',
1047
- command: `/sdd-plan-phase ${phase.number}`,
1270
+ command: `/sdd:plan-phase ${phase.number}`,
1048
1271
  });
1049
1272
  } else if ((phase.disk_status === 'empty' || phase.disk_status === 'no_directory') && phase.is_next_to_discuss) {
1050
1273
  recommendedActions.push({
@@ -1052,7 +1275,7 @@ function cmdInitManager(cwd, raw) {
1052
1275
  phase_name: phase.name,
1053
1276
  action: 'discuss',
1054
1277
  reason: 'Unblocked, ready to gather context',
1055
- command: `/sdd-discuss-phase ${phase.number}`,
1278
+ command: `/sdd:discuss-phase ${phase.number}`,
1056
1279
  });
1057
1280
  }
1058
1281
  }
@@ -1095,7 +1318,9 @@ function cmdInitManager(cwd, raw) {
1095
1318
  return true;
1096
1319
  });
1097
1320
 
1098
- const completedCount = phases.filter(p => p.disk_status === 'complete').length;
1321
+ // Exclude backlog phases (999.x) from completion accounting (#2129)
1322
+ const nonBacklogPhases = phases.filter(p => !/^999(?:\.|$)/.test(p.number));
1323
+ const completedCount = nonBacklogPhases.filter(p => p.disk_status === 'complete').length;
1099
1324
 
1100
1325
  // Read manager flags from config (passthrough flags for each step)
1101
1326
  // Validate: flags must be CLI-safe (only --flags, alphanumeric, hyphens, spaces)
@@ -1126,7 +1351,7 @@ function cmdInitManager(cwd, raw) {
1126
1351
  in_progress_count: phases.filter(p => ['partial', 'planned', 'discussed', 'researched'].includes(p.disk_status)).length,
1127
1352
  recommended_actions: filteredActions,
1128
1353
  waiting_signal: waitingSignal,
1129
- all_complete: completedCount === phases.length && phases.length > 0,
1354
+ all_complete: completedCount === nonBacklogPhases.length && nonBacklogPhases.length > 0,
1130
1355
  project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
1131
1356
  roadmap_exists: true,
1132
1357
  state_exists: true,
@@ -1137,6 +1362,10 @@ function cmdInitManager(cwd, raw) {
1137
1362
  }
1138
1363
 
1139
1364
  function cmdInitProgress(cwd, raw) {
1365
+ try {
1366
+ const { pruneOrphanedWorktrees } = require('./core.cjs');
1367
+ pruneOrphanedWorktrees(cwd);
1368
+ } catch (_) {}
1140
1369
  const config = loadConfig(cwd);
1141
1370
  const milestone = getMilestoneInfo(cwd);
1142
1371
 
@@ -1149,6 +1378,7 @@ function cmdInitProgress(cwd, raw) {
1149
1378
  // Build set of phases defined in ROADMAP for the current milestone
1150
1379
  const roadmapPhaseNums = new Set();
1151
1380
  const roadmapPhaseNames = new Map();
1381
+ const roadmapCheckboxStates = new Map();
1152
1382
  try {
1153
1383
  const roadmapContent = extractCurrentMilestone(
1154
1384
  fs.readFileSync(path.join(planningDir(cwd), 'ROADMAP.md'), 'utf-8'), cwd
@@ -1159,6 +1389,13 @@ function cmdInitProgress(cwd, raw) {
1159
1389
  roadmapPhaseNums.add(hm[1]);
1160
1390
  roadmapPhaseNames.set(hm[1], hm[2].replace(/\(INSERTED\)/i, '').trim());
1161
1391
  }
1392
+ // #2646: parse `- [x] Phase N` checkbox states so ROADMAP-only phases
1393
+ // inherit completion from the ROADMAP when no phase directory exists.
1394
+ const cbPattern = /-\s*\[(x| )\]\s*.*Phase\s+(\d+[A-Z]?(?:\.\d+)*)[:\s]/gi;
1395
+ let cbm;
1396
+ while ((cbm = cbPattern.exec(roadmapContent)) !== null) {
1397
+ roadmapCheckboxStates.set(cbm[2], cbm[1].toLowerCase() === 'x');
1398
+ }
1162
1399
  } catch { /* intentionally empty */ }
1163
1400
 
1164
1401
  const isDirInMilestone = getMilestonePhaseFilter(cwd);
@@ -1184,8 +1421,8 @@ function cmdInitProgress(cwd, raw) {
1184
1421
  const phasePath = path.join(phasesDir, dir);
1185
1422
  const phaseFiles = fs.readdirSync(phasePath);
1186
1423
 
1187
- const plans = phaseFiles.filter(f => f.endsWith('-PLAN.md') || f === 'PLAN.md');
1188
- const summaries = phaseFiles.filter(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
1424
+ const plans = listPhasePlanFiles(phasePath);
1425
+ const summaries = listPhaseSummaryFiles(phasePath);
1189
1426
  const hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
1190
1427
 
1191
1428
  const status = summaries.length >= plans.length && plans.length > 0 ? 'complete' :
@@ -1214,21 +1451,27 @@ function cmdInitProgress(cwd, raw) {
1214
1451
  }
1215
1452
  } catch { /* intentionally empty */ }
1216
1453
 
1217
- // Add phases defined in ROADMAP but not yet scaffolded to disk
1454
+ // Add phases defined in ROADMAP but not yet scaffolded to disk. When the
1455
+ // ROADMAP has a `- [x] Phase N` checkbox, honor it as 'complete' so
1456
+ // completed_count and status reflect the ROADMAP source of truth (#2646).
1218
1457
  for (const [num, name] of roadmapPhaseNames) {
1219
1458
  const stripped = num.replace(/^0+/, '') || '0';
1220
1459
  if (!seenPhaseNums.has(stripped)) {
1460
+ const checkboxComplete =
1461
+ roadmapCheckboxStates.get(num) === true ||
1462
+ roadmapCheckboxStates.get(stripped) === true;
1463
+ const status = checkboxComplete ? 'complete' : 'not_started';
1221
1464
  const phaseInfo = {
1222
1465
  number: num,
1223
1466
  name: name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''),
1224
1467
  directory: null,
1225
- status: 'not_started',
1468
+ status,
1226
1469
  plan_count: 0,
1227
1470
  summary_count: 0,
1228
1471
  has_research: false,
1229
1472
  };
1230
1473
  phases.push(phaseInfo);
1231
- if (!nextPhase && !currentPhase) {
1474
+ if (!nextPhase && !currentPhase && status !== 'complete') {
1232
1475
  nextPhase = phaseInfo;
1233
1476
  }
1234
1477
  }
@@ -1239,11 +1482,11 @@ function cmdInitProgress(cwd, raw) {
1239
1482
 
1240
1483
  // Check for paused work
1241
1484
  let pausedAt = null;
1242
- try {
1243
- const state = fs.readFileSync(path.join(planningDir(cwd), 'STATE.md'), 'utf-8');
1485
+ const state = platformReadSync(path.join(planningDir(cwd), 'STATE.md'));
1486
+ if (state !== null) {
1244
1487
  const pauseMatch = state.match(/\*\*Paused At:\*\*\s*(.+)/);
1245
1488
  if (pauseMatch) pausedAt = pauseMatch[1].trim();
1246
- } catch { /* intentionally empty */ }
1489
+ }
1247
1490
 
1248
1491
  const result = {
1249
1492
  // Models
@@ -1297,11 +1540,8 @@ function detectChildRepos(dir) {
1297
1540
  const fullPath = path.join(dir, entry.name);
1298
1541
  const gitDir = path.join(fullPath, '.git');
1299
1542
  if (fs.existsSync(gitDir)) {
1300
- let hasUncommitted = false;
1301
- try {
1302
- const status = execSync('git status --porcelain', { cwd: fullPath, encoding: 'utf8', timeout: 5000 });
1303
- hasUncommitted = status.trim().length > 0;
1304
- } catch { /* best-effort */ }
1543
+ const statusResult = execGit(['status', '--porcelain'], { cwd: fullPath, timeout: 5000 });
1544
+ const hasUncommitted = statusResult.exitCode === 0 && statusResult.stdout.length > 0;
1305
1545
  repos.push({ name: entry.name, path: fullPath, has_uncommitted: hasUncommitted });
1306
1546
  }
1307
1547
  }
@@ -1316,11 +1556,8 @@ function cmdInitNewWorkspace(cwd, raw) {
1316
1556
  const childRepos = detectChildRepos(cwd);
1317
1557
 
1318
1558
  // Check if git worktree is available
1319
- let worktreeAvailable = false;
1320
- try {
1321
- execSync('git --version', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1322
- worktreeAvailable = true;
1323
- } catch { /* no git at all */ }
1559
+ const gitVersion = execGit(['--version'], { timeout: 5000 });
1560
+ const worktreeAvailable = gitVersion.exitCode === 0;
1324
1561
 
1325
1562
  const result = {
1326
1563
  default_workspace_base: defaultBase,
@@ -1351,14 +1588,14 @@ function cmdInitListWorkspaces(cwd, raw) {
1351
1588
  let repoCount = 0;
1352
1589
  let hasProject = false;
1353
1590
  let strategy = 'unknown';
1354
- try {
1355
- const manifest = fs.readFileSync(manifestPath, 'utf8');
1591
+ const manifest = platformReadSync(manifestPath);
1592
+ if (manifest !== null) {
1356
1593
  const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1357
1594
  if (strategyMatch) strategy = strategyMatch[1].trim();
1358
1595
  // Count table rows (lines starting with |, excluding header and separator)
1359
1596
  const tableRows = manifest.split('\n').filter(l => l.match(/^\|\s*\w/) && !l.includes('Repo') && !l.includes('---'));
1360
1597
  repoCount = tableRows.length;
1361
- } catch { /* best-effort */ }
1598
+ }
1362
1599
  hasProject = fs.existsSync(path.join(wsPath, '.planning', 'PROJECT.md'));
1363
1600
 
1364
1601
  workspaces.push({
@@ -1398,9 +1635,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
1398
1635
  // Parse manifest for repo info
1399
1636
  const repos = [];
1400
1637
  let strategy = 'unknown';
1401
- if (fs.existsSync(manifestPath)) {
1638
+ const manifestContent = platformReadSync(manifestPath);
1639
+ if (manifestContent !== null) {
1402
1640
  try {
1403
- const manifest = fs.readFileSync(manifestPath, 'utf8');
1641
+ const manifest = manifestContent;
1404
1642
  const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1405
1643
  if (strategyMatch) strategy = strategyMatch[1].trim();
1406
1644
 
@@ -1420,12 +1658,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
1420
1658
  for (const repo of repos) {
1421
1659
  const repoPath = path.join(wsPath, repo.name);
1422
1660
  if (!fs.existsSync(repoPath)) continue;
1423
- try {
1424
- const status = execSync('git status --porcelain', { cwd: repoPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1425
- if (status.trim().length > 0) {
1426
- dirtyRepos.push(repo.name);
1427
- }
1428
- } catch { /* best-effort */ }
1661
+ const statusResult = execGit(['status', '--porcelain'], { cwd: repoPath, timeout: 5000 });
1662
+ if (statusResult.exitCode === 0 && statusResult.stdout.length > 0) {
1663
+ dirtyRepos.push(repo.name);
1664
+ }
1429
1665
  }
1430
1666
 
1431
1667
  const result = {
@@ -1456,6 +1692,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
1456
1692
  */
1457
1693
  function buildAgentSkillsBlock(config, agentType, projectRoot) {
1458
1694
  const { validatePath } = require('./security.cjs');
1695
+ const os = require('os');
1696
+ const { getGlobalSkillDir, getGlobalSkillDisplayPath } = require('./runtime-homes.cjs');
1697
+ const runtime = (config && config.runtime) || 'claude';
1698
+ const globalSkillsBase = require('./runtime-homes.cjs').getGlobalSkillsBase(runtime);
1459
1699
 
1460
1700
  if (!config || !config.agent_skills || !agentType) return '';
1461
1701
 
@@ -1470,6 +1710,43 @@ function buildAgentSkillsBlock(config, agentType, projectRoot) {
1470
1710
  for (const skillPath of skillPaths) {
1471
1711
  if (typeof skillPath !== 'string') continue;
1472
1712
 
1713
+ // Support global: prefix for skills installed at the runtime's global skills directory (#1992, #3126)
1714
+ if (skillPath.startsWith('global:')) {
1715
+ const skillName = skillPath.slice(7);
1716
+ // Explicit empty-name guard before regex for clearer error message
1717
+ if (!skillName) {
1718
+ process.stderr.write(`[agent-skills] WARNING: "global:" prefix with empty skill name — skipping\n`);
1719
+ continue;
1720
+ }
1721
+ // Sanitize: skill name must be alphanumeric, hyphens, or underscores only
1722
+ if (!/^[a-zA-Z0-9_-]+$/.test(skillName)) {
1723
+ process.stderr.write(`[agent-skills] WARNING: Invalid global skill name "${skillName}" — skipping\n`);
1724
+ continue;
1725
+ }
1726
+ // Cline is rules-based and has no global skills directory
1727
+ if (globalSkillsBase === null) {
1728
+ process.stderr.write(`[agent-skills] WARNING: Runtime "${runtime}" does not use a skills directory — "global:${skillName}" is not supported on this runtime\n`);
1729
+ continue;
1730
+ }
1731
+ const globalSkillDir = getGlobalSkillDir(runtime, skillName);
1732
+ const globalSkillMd = path.join(globalSkillDir, 'SKILL.md');
1733
+ const displayPath = getGlobalSkillDisplayPath(runtime, skillName);
1734
+ if (!fs.existsSync(globalSkillMd)) {
1735
+ process.stderr.write(`[agent-skills] WARNING: Global skill not found at "${displayPath}/SKILL.md" — skipping\n`);
1736
+ continue;
1737
+ }
1738
+ // Symlink escape guard: validatePath resolves symlinks and enforces
1739
+ // containment within globalSkillsBase. Prevents a skill directory
1740
+ // symlinked to an arbitrary location from being injected (#1992).
1741
+ const pathCheck = validatePath(globalSkillMd, globalSkillsBase, { allowAbsolute: true });
1742
+ if (!pathCheck.safe) {
1743
+ process.stderr.write(`[agent-skills] WARNING: Global skill "${skillName}" failed path check (symlink escape?) — skipping\n`);
1744
+ continue;
1745
+ }
1746
+ validPaths.push({ ref: `${globalSkillDir}/SKILL.md`, display: displayPath });
1747
+ continue;
1748
+ }
1749
+
1473
1750
  // Validate path safety — must resolve within project root
1474
1751
  const pathCheck = validatePath(skillPath, projectRoot);
1475
1752
  if (!pathCheck.safe) {
@@ -1484,12 +1761,12 @@ function buildAgentSkillsBlock(config, agentType, projectRoot) {
1484
1761
  continue;
1485
1762
  }
1486
1763
 
1487
- validPaths.push(skillPath);
1764
+ validPaths.push({ ref: `${skillPath}/SKILL.md`, display: skillPath });
1488
1765
  }
1489
1766
 
1490
1767
  if (validPaths.length === 0) return '';
1491
1768
 
1492
- const lines = validPaths.map(p => `- @${p}/SKILL.md`).join('\n');
1769
+ const lines = validPaths.map(p => `- @${p.ref}`).join('\n');
1493
1770
  return `<agent_skills>\nRead these user-configured skills:\n${lines}\n</agent_skills>`;
1494
1771
  }
1495
1772
 
@@ -1513,12 +1790,234 @@ function cmdAgentSkills(cwd, agentType, raw) {
1513
1790
  process.exit(0);
1514
1791
  }
1515
1792
 
1793
+ /**
1794
+ * Generate a skill manifest from a skills directory.
1795
+ *
1796
+ * Scans the canonical skill discovery roots and returns a normalized
1797
+ * inventory object with discovered skills, root metadata, and installation
1798
+ * summary flags. A legacy `skillsDir` override is still accepted for focused
1799
+ * scans, but the default mode is multi-root discovery.
1800
+ *
1801
+ * @param {string} cwd - Project root directory
1802
+ * @param {string|null} [skillsDir] - Optional absolute path to a specific skills directory
1803
+ * @returns {{
1804
+ * skills: Array<{name: string, description: string, triggers: string[], path: string, file_path: string, root: string, scope: string, installed: boolean, deprecated: boolean}>,
1805
+ * roots: Array<{root: string, path: string, scope: string, present: boolean, skill_count?: number, command_count?: number, deprecated?: boolean}>,
1806
+ * installation: { sdd_skills_installed: boolean, legacy_claude_commands_installed: boolean },
1807
+ * counts: { skills: number, roots: number }
1808
+ * }}
1809
+ */
1810
+ function buildSkillManifest(cwd, skillsDir = null) {
1811
+ const { extractFrontmatter } = require('./frontmatter.cjs');
1812
+ const { getGlobalSkillsBase } = require('./runtime-homes.cjs');
1813
+ const os = require('os');
1814
+
1815
+ const canonicalRoots = skillsDir ? [{
1816
+ root: path.resolve(skillsDir),
1817
+ path: path.resolve(skillsDir),
1818
+ scope: 'custom',
1819
+ present: fs.existsSync(skillsDir),
1820
+ kind: 'skills',
1821
+ }] : [
1822
+ {
1823
+ root: '.claude/skills',
1824
+ path: path.join(cwd, '.claude', 'skills'),
1825
+ scope: 'project',
1826
+ kind: 'skills',
1827
+ },
1828
+ {
1829
+ root: '.agents/skills',
1830
+ path: path.join(cwd, '.agents', 'skills'),
1831
+ scope: 'project',
1832
+ kind: 'skills',
1833
+ },
1834
+ {
1835
+ root: '.cursor/skills',
1836
+ path: path.join(cwd, '.cursor', 'skills'),
1837
+ scope: 'project',
1838
+ kind: 'skills',
1839
+ },
1840
+ {
1841
+ root: '.github/skills',
1842
+ path: path.join(cwd, '.github', 'skills'),
1843
+ scope: 'project',
1844
+ kind: 'skills',
1845
+ },
1846
+ {
1847
+ root: '.codex/skills',
1848
+ path: path.join(cwd, '.codex', 'skills'),
1849
+ scope: 'project',
1850
+ kind: 'skills',
1851
+ },
1852
+ {
1853
+ root: '~/.claude/skills',
1854
+ path: getGlobalSkillsBase('claude'),
1855
+ scope: 'global',
1856
+ kind: 'skills',
1857
+ },
1858
+ {
1859
+ root: '~/.codex/skills',
1860
+ path: getGlobalSkillsBase('codex'),
1861
+ scope: 'global',
1862
+ kind: 'skills',
1863
+ },
1864
+ {
1865
+ root: '.claude/sdd/skills',
1866
+ path: path.join(os.homedir(), '.claude', 'sdd', 'skills'),
1867
+ scope: 'import-only',
1868
+ kind: 'skills',
1869
+ deprecated: true,
1870
+ },
1871
+ {
1872
+ root: '.claude/commands/sdd',
1873
+ path: path.join(os.homedir(), '.claude', 'commands', 'sdd'),
1874
+ scope: 'legacy-commands',
1875
+ kind: 'commands',
1876
+ deprecated: true,
1877
+ },
1878
+ ];
1879
+
1880
+ const skills = [];
1881
+ const roots = [];
1882
+ let legacyClaudeCommandsInstalled = false;
1883
+ for (const rootInfo of canonicalRoots) {
1884
+ const rootPath = rootInfo.path;
1885
+ const rootSummary = {
1886
+ root: rootInfo.root,
1887
+ path: rootPath,
1888
+ scope: rootInfo.scope,
1889
+ present: fs.existsSync(rootPath),
1890
+ deprecated: !!rootInfo.deprecated,
1891
+ };
1892
+
1893
+ if (!rootSummary.present) {
1894
+ roots.push(rootSummary);
1895
+ continue;
1896
+ }
1897
+
1898
+ if (rootInfo.kind === 'commands') {
1899
+ let entries = [];
1900
+ try {
1901
+ entries = fs.readdirSync(rootPath, { withFileTypes: true });
1902
+ } catch {
1903
+ roots.push(rootSummary);
1904
+ continue;
1905
+ }
1906
+
1907
+ const commandFiles = entries.filter(entry => entry.isFile() && entry.name.endsWith('.md'));
1908
+ rootSummary.command_count = commandFiles.length;
1909
+ if (rootSummary.command_count > 0) legacyClaudeCommandsInstalled = true;
1910
+ roots.push(rootSummary);
1911
+ continue;
1912
+ }
1913
+
1914
+ let entries;
1915
+ try {
1916
+ entries = fs.readdirSync(rootPath, { withFileTypes: true });
1917
+ } catch {
1918
+ roots.push(rootSummary);
1919
+ continue;
1920
+ }
1921
+
1922
+ let skillCount = 0;
1923
+ for (const entry of entries) {
1924
+ if (!entry.isDirectory()) continue;
1925
+
1926
+ const skillMdPath = path.join(rootPath, entry.name, 'SKILL.md');
1927
+ const content = platformReadSync(skillMdPath);
1928
+ if (content === null) continue;
1929
+
1930
+ const frontmatter = extractFrontmatter(content);
1931
+ const name = frontmatter.name || entry.name;
1932
+ const description = frontmatter.description || '';
1933
+
1934
+ // Extract trigger lines from body text (after frontmatter)
1935
+ const triggers = [];
1936
+ const bodyMatch = content.match(/^---[\s\S]*?---\s*\n([\s\S]*)$/);
1937
+ if (bodyMatch) {
1938
+ const body = bodyMatch[1];
1939
+ const triggerLines = body.match(/^TRIGGER\s+when:\s*(.+)$/gmi);
1940
+ if (triggerLines) {
1941
+ for (const line of triggerLines) {
1942
+ const m = line.match(/^TRIGGER\s+when:\s*(.+)$/i);
1943
+ if (m) triggers.push(m[1].trim());
1944
+ }
1945
+ }
1946
+ }
1947
+
1948
+ skills.push({
1949
+ name,
1950
+ description,
1951
+ triggers,
1952
+ path: entry.name,
1953
+ file_path: `${entry.name}/SKILL.md`,
1954
+ root: rootInfo.root,
1955
+ scope: rootInfo.scope,
1956
+ installed: rootInfo.scope !== 'import-only',
1957
+ deprecated: !!rootInfo.deprecated,
1958
+ });
1959
+ skillCount++;
1960
+ }
1961
+
1962
+ rootSummary.skill_count = skillCount;
1963
+ roots.push(rootSummary);
1964
+ }
1965
+
1966
+ skills.sort((a, b) => {
1967
+ const rootCmp = a.root.localeCompare(b.root);
1968
+ return rootCmp !== 0 ? rootCmp : a.name.localeCompare(b.name);
1969
+ });
1970
+
1971
+ const sddSkillsInstalled = skills.some(skill => skill.name.startsWith('sdd-'));
1972
+
1973
+ return {
1974
+ skills,
1975
+ roots,
1976
+ installation: {
1977
+ sdd_skills_installed: sddSkillsInstalled,
1978
+ legacy_claude_commands_installed: legacyClaudeCommandsInstalled,
1979
+ },
1980
+ counts: {
1981
+ skills: skills.length,
1982
+ roots: roots.length,
1983
+ },
1984
+ };
1985
+ }
1986
+
1987
+ /**
1988
+ * Command: generate skill manifest JSON.
1989
+ *
1990
+ * Options:
1991
+ * --skills-dir <path> Optional absolute path to a single skills directory
1992
+ * --write Also write to .planning/skill-manifest.json
1993
+ */
1994
+ function cmdSkillManifest(cwd, args, raw) {
1995
+ const skillsDirIdx = args.indexOf('--skills-dir');
1996
+ const skillsDir = skillsDirIdx >= 0 && args[skillsDirIdx + 1]
1997
+ ? args[skillsDirIdx + 1]
1998
+ : null;
1999
+
2000
+ const manifest = buildSkillManifest(cwd, skillsDir);
2001
+
2002
+ // Optionally write to .planning/skill-manifest.json
2003
+ if (args.includes('--write')) {
2004
+ const planningDir = path.join(cwd, '.planning');
2005
+ if (fs.existsSync(planningDir)) {
2006
+ const manifestPath = path.join(planningDir, 'skill-manifest.json');
2007
+ platformWriteSync(manifestPath, JSON.stringify(manifest, null, 2));
2008
+ }
2009
+ }
2010
+
2011
+ output(manifest, raw);
2012
+ }
2013
+
1516
2014
  module.exports = {
1517
2015
  cmdInitExecutePhase,
1518
2016
  cmdInitPlanPhase,
1519
2017
  cmdInitNewProject,
1520
2018
  cmdInitNewMilestone,
1521
2019
  cmdInitQuick,
2020
+ cmdInitIngestDocs,
1522
2021
  cmdInitResume,
1523
2022
  cmdInitVerifyWork,
1524
2023
  cmdInitPhaseOp,
@@ -1533,4 +2032,6 @@ module.exports = {
1533
2032
  detectChildRepos,
1534
2033
  buildAgentSkillsBlock,
1535
2034
  cmdAgentSkills,
2035
+ buildSkillManifest,
2036
+ cmdSkillManifest,
1536
2037
  };