@devtrack-solution/codesdd 1.2.2

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 (433) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +2751 -0
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +137 -0
  3. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -0
  4. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +381 -0
  5. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +219 -0
  6. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +359 -0
  7. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +127 -0
  8. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +207 -0
  9. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +167 -0
  10. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +334 -0
  11. package/LICENSE +21 -0
  12. package/README.md +842 -0
  13. package/bin/codesdd.js +10 -0
  14. package/dist/cli/index.d.ts +3 -0
  15. package/dist/cli/index.js +560 -0
  16. package/dist/commands/change.d.ts +35 -0
  17. package/dist/commands/change.js +296 -0
  18. package/dist/commands/completion.d.ts +72 -0
  19. package/dist/commands/completion.js +258 -0
  20. package/dist/commands/config.d.ts +36 -0
  21. package/dist/commands/config.js +552 -0
  22. package/dist/commands/feedback.d.ts +9 -0
  23. package/dist/commands/feedback.js +184 -0
  24. package/dist/commands/schema.d.ts +6 -0
  25. package/dist/commands/schema.js +870 -0
  26. package/dist/commands/sdd/execution.d.ts +3 -0
  27. package/dist/commands/sdd/execution.js +409 -0
  28. package/dist/commands/sdd/shared.d.ts +9 -0
  29. package/dist/commands/sdd/shared.js +84 -0
  30. package/dist/commands/sdd/skills.d.ts +3 -0
  31. package/dist/commands/sdd/skills.js +154 -0
  32. package/dist/commands/sdd.d.ts +3 -0
  33. package/dist/commands/sdd.js +769 -0
  34. package/dist/commands/show.d.ts +14 -0
  35. package/dist/commands/show.js +133 -0
  36. package/dist/commands/spec.d.ts +15 -0
  37. package/dist/commands/spec.js +228 -0
  38. package/dist/commands/validate.d.ts +24 -0
  39. package/dist/commands/validate.js +295 -0
  40. package/dist/commands/workflow/index.d.ts +17 -0
  41. package/dist/commands/workflow/index.js +12 -0
  42. package/dist/commands/workflow/instructions.d.ts +29 -0
  43. package/dist/commands/workflow/instructions.js +383 -0
  44. package/dist/commands/workflow/new-change.d.ts +11 -0
  45. package/dist/commands/workflow/new-change.js +45 -0
  46. package/dist/commands/workflow/schemas.d.ts +10 -0
  47. package/dist/commands/workflow/schemas.js +34 -0
  48. package/dist/commands/workflow/shared.d.ts +57 -0
  49. package/dist/commands/workflow/shared.js +117 -0
  50. package/dist/commands/workflow/status.d.ts +14 -0
  51. package/dist/commands/workflow/status.js +76 -0
  52. package/dist/commands/workflow/templates.d.ts +16 -0
  53. package/dist/commands/workflow/templates.js +68 -0
  54. package/dist/core/archive.d.ts +16 -0
  55. package/dist/core/archive.js +487 -0
  56. package/dist/core/artifact-graph/graph.d.ts +56 -0
  57. package/dist/core/artifact-graph/graph.js +141 -0
  58. package/dist/core/artifact-graph/index.d.ts +7 -0
  59. package/dist/core/artifact-graph/index.js +13 -0
  60. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  61. package/dist/core/artifact-graph/instruction-loader.js +215 -0
  62. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  63. package/dist/core/artifact-graph/resolver.js +258 -0
  64. package/dist/core/artifact-graph/schema.d.ts +13 -0
  65. package/dist/core/artifact-graph/schema.js +108 -0
  66. package/dist/core/artifact-graph/state.d.ts +12 -0
  67. package/dist/core/artifact-graph/state.js +54 -0
  68. package/dist/core/artifact-graph/types.d.ts +45 -0
  69. package/dist/core/artifact-graph/types.js +43 -0
  70. package/dist/core/available-tools.d.ts +16 -0
  71. package/dist/core/available-tools.js +30 -0
  72. package/dist/core/branding.d.ts +8 -0
  73. package/dist/core/branding.js +12 -0
  74. package/dist/core/cli/command-matrix.d.ts +23 -0
  75. package/dist/core/cli/command-matrix.js +123 -0
  76. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  77. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  78. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  79. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  80. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  81. package/dist/core/command-generation/adapters/auggie.js +27 -0
  82. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  83. package/dist/core/command-generation/adapters/claude.js +50 -0
  84. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  85. package/dist/core/command-generation/adapters/cline.js +27 -0
  86. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  87. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  88. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  89. package/dist/core/command-generation/adapters/codex.js +39 -0
  90. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/continue.js +28 -0
  92. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  93. package/dist/core/command-generation/adapters/costrict.js +27 -0
  94. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  95. package/dist/core/command-generation/adapters/crush.js +30 -0
  96. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  97. package/dist/core/command-generation/adapters/cursor.js +44 -0
  98. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  99. package/dist/core/command-generation/adapters/factory.js +27 -0
  100. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  101. package/dist/core/command-generation/adapters/gemini.js +26 -0
  102. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  103. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  104. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  105. package/dist/core/command-generation/adapters/iflow.js +29 -0
  106. package/dist/core/command-generation/adapters/index.d.ts +29 -0
  107. package/dist/core/command-generation/adapters/index.js +29 -0
  108. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  109. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  110. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  111. package/dist/core/command-generation/adapters/kiro.js +26 -0
  112. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  113. package/dist/core/command-generation/adapters/opencode.js +29 -0
  114. package/dist/core/command-generation/adapters/pi.d.ts +14 -0
  115. package/dist/core/command-generation/adapters/pi.js +41 -0
  116. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  117. package/dist/core/command-generation/adapters/qoder.js +30 -0
  118. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  119. package/dist/core/command-generation/adapters/qwen.js +26 -0
  120. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  121. package/dist/core/command-generation/adapters/roocode.js +27 -0
  122. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  123. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  124. package/dist/core/command-generation/generator.d.ts +21 -0
  125. package/dist/core/command-generation/generator.js +27 -0
  126. package/dist/core/command-generation/index.d.ts +22 -0
  127. package/dist/core/command-generation/index.js +24 -0
  128. package/dist/core/command-generation/registry.d.ts +36 -0
  129. package/dist/core/command-generation/registry.js +92 -0
  130. package/dist/core/command-generation/types.d.ts +56 -0
  131. package/dist/core/command-generation/types.js +8 -0
  132. package/dist/core/completions/command-registry.d.ts +7 -0
  133. package/dist/core/completions/command-registry.js +461 -0
  134. package/dist/core/completions/completion-provider.d.ts +60 -0
  135. package/dist/core/completions/completion-provider.js +102 -0
  136. package/dist/core/completions/factory.d.ts +64 -0
  137. package/dist/core/completions/factory.js +75 -0
  138. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  139. package/dist/core/completions/generators/bash-generator.js +174 -0
  140. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  141. package/dist/core/completions/generators/fish-generator.js +157 -0
  142. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  143. package/dist/core/completions/generators/powershell-generator.js +207 -0
  144. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  145. package/dist/core/completions/generators/zsh-generator.js +250 -0
  146. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  147. package/dist/core/completions/installers/bash-installer.js +318 -0
  148. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  149. package/dist/core/completions/installers/fish-installer.js +143 -0
  150. package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
  151. package/dist/core/completions/installers/powershell-installer.js +327 -0
  152. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  153. package/dist/core/completions/installers/zsh-installer.js +452 -0
  154. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  155. package/dist/core/completions/templates/bash-templates.js +24 -0
  156. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  157. package/dist/core/completions/templates/fish-templates.js +39 -0
  158. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  159. package/dist/core/completions/templates/powershell-templates.js +25 -0
  160. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  161. package/dist/core/completions/templates/zsh-templates.js +36 -0
  162. package/dist/core/completions/types.d.ts +79 -0
  163. package/dist/core/completions/types.js +2 -0
  164. package/dist/core/config-prompts.d.ts +9 -0
  165. package/dist/core/config-prompts.js +34 -0
  166. package/dist/core/config-schema.d.ts +86 -0
  167. package/dist/core/config-schema.js +213 -0
  168. package/dist/core/config.d.ts +17 -0
  169. package/dist/core/config.js +33 -0
  170. package/dist/core/converters/json-converter.d.ts +6 -0
  171. package/dist/core/converters/json-converter.js +51 -0
  172. package/dist/core/global-config.d.ts +44 -0
  173. package/dist/core/global-config.js +125 -0
  174. package/dist/core/index.d.ts +2 -0
  175. package/dist/core/index.js +3 -0
  176. package/dist/core/init.d.ts +36 -0
  177. package/dist/core/init.js +576 -0
  178. package/dist/core/legacy-cleanup.d.ts +162 -0
  179. package/dist/core/legacy-cleanup.js +512 -0
  180. package/dist/core/list.d.ts +9 -0
  181. package/dist/core/list.js +173 -0
  182. package/dist/core/migration.d.ts +23 -0
  183. package/dist/core/migration.js +108 -0
  184. package/dist/core/parsers/change-parser.d.ts +13 -0
  185. package/dist/core/parsers/change-parser.js +193 -0
  186. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  187. package/dist/core/parsers/markdown-parser.js +187 -0
  188. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  189. package/dist/core/parsers/requirement-blocks.js +201 -0
  190. package/dist/core/profile-sync-drift.d.ts +38 -0
  191. package/dist/core/profile-sync-drift.js +201 -0
  192. package/dist/core/profiles.d.ts +26 -0
  193. package/dist/core/profiles.js +41 -0
  194. package/dist/core/project-config.d.ts +64 -0
  195. package/dist/core/project-config.js +223 -0
  196. package/dist/core/schemas/base.schema.d.ts +13 -0
  197. package/dist/core/schemas/base.schema.js +13 -0
  198. package/dist/core/schemas/change.schema.d.ts +73 -0
  199. package/dist/core/schemas/change.schema.js +31 -0
  200. package/dist/core/schemas/index.d.ts +4 -0
  201. package/dist/core/schemas/index.js +4 -0
  202. package/dist/core/schemas/spec.schema.d.ts +18 -0
  203. package/dist/core/schemas/spec.schema.js +15 -0
  204. package/dist/core/sdd/adr-policy.d.ts +7 -0
  205. package/dist/core/sdd/adr-policy.js +47 -0
  206. package/dist/core/sdd/adr.d.ts +4 -0
  207. package/dist/core/sdd/adr.js +27 -0
  208. package/dist/core/sdd/bootstrap.d.ts +28 -0
  209. package/dist/core/sdd/bootstrap.js +353 -0
  210. package/dist/core/sdd/check.d.ts +51 -0
  211. package/dist/core/sdd/check.js +831 -0
  212. package/dist/core/sdd/coordination/coordination-adapters.d.ts +73 -0
  213. package/dist/core/sdd/coordination/coordination-adapters.js +87 -0
  214. package/dist/core/sdd/coordination/index.d.ts +2 -0
  215. package/dist/core/sdd/coordination/index.js +2 -0
  216. package/dist/core/sdd/dedup.d.ts +23 -0
  217. package/dist/core/sdd/dedup.js +62 -0
  218. package/dist/core/sdd/default-bootstrap-files.d.ts +23 -0
  219. package/dist/core/sdd/default-bootstrap-files.js +385 -0
  220. package/dist/core/sdd/default-skills.d.ts +16 -0
  221. package/dist/core/sdd/default-skills.js +427 -0
  222. package/dist/core/sdd/diagnose.d.ts +25 -0
  223. package/dist/core/sdd/diagnose.js +1312 -0
  224. package/dist/core/sdd/docs-sync.d.ts +21 -0
  225. package/dist/core/sdd/docs-sync.js +231 -0
  226. package/dist/core/sdd/domain/helpers.d.ts +6 -0
  227. package/dist/core/sdd/domain/helpers.js +37 -0
  228. package/dist/core/sdd/domain/lifecycle-guardrails.d.ts +22 -0
  229. package/dist/core/sdd/domain/lifecycle-guardrails.js +31 -0
  230. package/dist/core/sdd/domain/lifecycle-hooks.d.ts +16 -0
  231. package/dist/core/sdd/domain/lifecycle-hooks.js +27 -0
  232. package/dist/core/sdd/domain/post-active-validation.d.ts +15 -0
  233. package/dist/core/sdd/domain/post-active-validation.js +71 -0
  234. package/dist/core/sdd/domain/traceability.d.ts +8 -0
  235. package/dist/core/sdd/domain/traceability.js +83 -0
  236. package/dist/core/sdd/domain/transition-engine.d.ts +49 -0
  237. package/dist/core/sdd/domain/transition-engine.js +120 -0
  238. package/dist/core/sdd/fingerprint.d.ts +23 -0
  239. package/dist/core/sdd/fingerprint.js +146 -0
  240. package/dist/core/sdd/import-openspec.d.ts +31 -0
  241. package/dist/core/sdd/import-openspec.js +232 -0
  242. package/dist/core/sdd/init.d.ts +36 -0
  243. package/dist/core/sdd/init.js +65 -0
  244. package/dist/core/sdd/json-schema.d.ts +6 -0
  245. package/dist/core/sdd/json-schema.js +59 -0
  246. package/dist/core/sdd/legacy-operations.d.ts +286 -0
  247. package/dist/core/sdd/legacy-operations.js +2175 -0
  248. package/dist/core/sdd/lenses.d.ts +14 -0
  249. package/dist/core/sdd/lenses.js +97 -0
  250. package/dist/core/sdd/merge-catalog.d.ts +9 -0
  251. package/dist/core/sdd/merge-catalog.js +70 -0
  252. package/dist/core/sdd/migrate-workspace.d.ts +36 -0
  253. package/dist/core/sdd/migrate-workspace.js +344 -0
  254. package/dist/core/sdd/migrate.d.ts +24 -0
  255. package/dist/core/sdd/migrate.js +385 -0
  256. package/dist/core/sdd/resolve-project-root.d.ts +15 -0
  257. package/dist/core/sdd/resolve-project-root.js +46 -0
  258. package/dist/core/sdd/root-resolver.d.ts +16 -0
  259. package/dist/core/sdd/root-resolver.js +62 -0
  260. package/dist/core/sdd/sanitize.d.ts +35 -0
  261. package/dist/core/sdd/sanitize.js +750 -0
  262. package/dist/core/sdd/services/approve.service.d.ts +20 -0
  263. package/dist/core/sdd/services/approve.service.js +82 -0
  264. package/dist/core/sdd/services/audit.service.d.ts +53 -0
  265. package/dist/core/sdd/services/audit.service.js +136 -0
  266. package/dist/core/sdd/services/breakdown.service.d.ts +35 -0
  267. package/dist/core/sdd/services/breakdown.service.js +185 -0
  268. package/dist/core/sdd/services/context.service.d.ts +346 -0
  269. package/dist/core/sdd/services/context.service.js +278 -0
  270. package/dist/core/sdd/services/debate.service.d.ts +16 -0
  271. package/dist/core/sdd/services/debate.service.js +73 -0
  272. package/dist/core/sdd/services/decide.service.d.ts +23 -0
  273. package/dist/core/sdd/services/decide.service.js +81 -0
  274. package/dist/core/sdd/services/dedup-apply.service.d.ts +39 -0
  275. package/dist/core/sdd/services/dedup-apply.service.js +259 -0
  276. package/dist/core/sdd/services/feature-lint.service.d.ts +29 -0
  277. package/dist/core/sdd/services/feature-lint.service.js +146 -0
  278. package/dist/core/sdd/services/finalize.service.d.ts +33 -0
  279. package/dist/core/sdd/services/finalize.service.js +707 -0
  280. package/dist/core/sdd/services/frontend-gap.service.d.ts +23 -0
  281. package/dist/core/sdd/services/frontend-gap.service.js +117 -0
  282. package/dist/core/sdd/services/frontend-impact.service.d.ts +19 -0
  283. package/dist/core/sdd/services/frontend-impact.service.js +46 -0
  284. package/dist/core/sdd/services/ingest-deposito.service.d.ts +32 -0
  285. package/dist/core/sdd/services/ingest-deposito.service.js +231 -0
  286. package/dist/core/sdd/services/insight.service.d.ts +21 -0
  287. package/dist/core/sdd/services/insight.service.js +81 -0
  288. package/dist/core/sdd/services/legacy-capability.service.d.ts +24 -0
  289. package/dist/core/sdd/services/legacy-capability.service.js +59 -0
  290. package/dist/core/sdd/services/mcp-runtime.service.d.ts +42 -0
  291. package/dist/core/sdd/services/mcp-runtime.service.js +144 -0
  292. package/dist/core/sdd/services/metrics.service.d.ts +49 -0
  293. package/dist/core/sdd/services/metrics.service.js +181 -0
  294. package/dist/core/sdd/services/next.service.d.ts +35 -0
  295. package/dist/core/sdd/services/next.service.js +54 -0
  296. package/dist/core/sdd/services/onboard.service.d.ts +9 -0
  297. package/dist/core/sdd/services/onboard.service.js +165 -0
  298. package/dist/core/sdd/services/rebuild.service.d.ts +31 -0
  299. package/dist/core/sdd/services/rebuild.service.js +482 -0
  300. package/dist/core/sdd/services/scan-naming.service.d.ts +43 -0
  301. package/dist/core/sdd/services/scan-naming.service.js +246 -0
  302. package/dist/core/sdd/services/skills-invoke.service.d.ts +24 -0
  303. package/dist/core/sdd/services/skills-invoke.service.js +63 -0
  304. package/dist/core/sdd/services/skills-sync.service.d.ts +15 -0
  305. package/dist/core/sdd/services/skills-sync.service.js +117 -0
  306. package/dist/core/sdd/services/start.service.d.ts +26 -0
  307. package/dist/core/sdd/services/start.service.js +237 -0
  308. package/dist/core/sdd/skills.d.ts +15 -0
  309. package/dist/core/sdd/skills.js +46 -0
  310. package/dist/core/sdd/state-lock.d.ts +19 -0
  311. package/dist/core/sdd/state-lock.js +144 -0
  312. package/dist/core/sdd/state.d.ts +155 -0
  313. package/dist/core/sdd/state.js +1000 -0
  314. package/dist/core/sdd/store/in-memory-adapter.d.ts +12 -0
  315. package/dist/core/sdd/store/in-memory-adapter.js +27 -0
  316. package/dist/core/sdd/store/index.d.ts +5 -0
  317. package/dist/core/sdd/store/index.js +5 -0
  318. package/dist/core/sdd/store/sdd-stores.d.ts +25 -0
  319. package/dist/core/sdd/store/sdd-stores.js +59 -0
  320. package/dist/core/sdd/store/state-store.d.ts +32 -0
  321. package/dist/core/sdd/store/state-store.js +2 -0
  322. package/dist/core/sdd/store/yaml-file-adapter.d.ts +12 -0
  323. package/dist/core/sdd/store/yaml-file-adapter.js +43 -0
  324. package/dist/core/sdd/structural-health.d.ts +557 -0
  325. package/dist/core/sdd/structural-health.js +187 -0
  326. package/dist/core/sdd/transaction.d.ts +14 -0
  327. package/dist/core/sdd/transaction.js +100 -0
  328. package/dist/core/sdd/types.d.ts +1570 -0
  329. package/dist/core/sdd/types.js +617 -0
  330. package/dist/core/sdd/views.d.ts +3 -0
  331. package/dist/core/sdd/views.js +560 -0
  332. package/dist/core/sdd/workspace-schemas.d.ts +620 -0
  333. package/dist/core/sdd/workspace-schemas.js +254 -0
  334. package/dist/core/sdd/write-manifest.d.ts +25 -0
  335. package/dist/core/sdd/write-manifest.js +353 -0
  336. package/dist/core/shared/index.d.ts +8 -0
  337. package/dist/core/shared/index.js +8 -0
  338. package/dist/core/shared/skill-generation.d.ts +49 -0
  339. package/dist/core/shared/skill-generation.js +106 -0
  340. package/dist/core/shared/tool-detection.d.ts +71 -0
  341. package/dist/core/shared/tool-detection.js +158 -0
  342. package/dist/core/specs-apply.d.ts +73 -0
  343. package/dist/core/specs-apply.js +385 -0
  344. package/dist/core/styles/palette.d.ts +7 -0
  345. package/dist/core/styles/palette.js +8 -0
  346. package/dist/core/templates/index.d.ts +8 -0
  347. package/dist/core/templates/index.js +9 -0
  348. package/dist/core/templates/skill-templates.d.ts +20 -0
  349. package/dist/core/templates/skill-templates.js +19 -0
  350. package/dist/core/templates/types.d.ts +19 -0
  351. package/dist/core/templates/types.js +5 -0
  352. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  353. package/dist/core/templates/workflows/apply-change.js +308 -0
  354. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  355. package/dist/core/templates/workflows/archive-change.js +277 -0
  356. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  357. package/dist/core/templates/workflows/bulk-archive-change.js +502 -0
  358. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  359. package/dist/core/templates/workflows/continue-change.js +232 -0
  360. package/dist/core/templates/workflows/explore.d.ts +10 -0
  361. package/dist/core/templates/workflows/explore.js +475 -0
  362. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  363. package/dist/core/templates/workflows/feedback.js +108 -0
  364. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  365. package/dist/core/templates/workflows/ff-change.js +206 -0
  366. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  367. package/dist/core/templates/workflows/new-change.js +151 -0
  368. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  369. package/dist/core/templates/workflows/onboard.js +573 -0
  370. package/dist/core/templates/workflows/propose.d.ts +10 -0
  371. package/dist/core/templates/workflows/propose.js +224 -0
  372. package/dist/core/templates/workflows/sdd.d.ts +10 -0
  373. package/dist/core/templates/workflows/sdd.js +107 -0
  374. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  375. package/dist/core/templates/workflows/sync-specs.js +286 -0
  376. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  377. package/dist/core/templates/workflows/verify-change.js +346 -0
  378. package/dist/core/update.d.ts +77 -0
  379. package/dist/core/update.js +538 -0
  380. package/dist/core/validation/constants.d.ts +34 -0
  381. package/dist/core/validation/constants.js +40 -0
  382. package/dist/core/validation/types.d.ts +18 -0
  383. package/dist/core/validation/types.js +2 -0
  384. package/dist/core/validation/validator.d.ts +33 -0
  385. package/dist/core/validation/validator.js +409 -0
  386. package/dist/core/view.d.ts +8 -0
  387. package/dist/core/view.js +170 -0
  388. package/dist/index.d.ts +3 -0
  389. package/dist/index.js +3 -0
  390. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  391. package/dist/prompts/searchable-multi-select.js +159 -0
  392. package/dist/telemetry/config.d.ts +32 -0
  393. package/dist/telemetry/config.js +68 -0
  394. package/dist/telemetry/index.d.ts +44 -0
  395. package/dist/telemetry/index.js +207 -0
  396. package/dist/ui/ascii-patterns.d.ts +16 -0
  397. package/dist/ui/ascii-patterns.js +133 -0
  398. package/dist/ui/welcome-screen.d.ts +10 -0
  399. package/dist/ui/welcome-screen.js +146 -0
  400. package/dist/utils/change-metadata.d.ts +51 -0
  401. package/dist/utils/change-metadata.js +147 -0
  402. package/dist/utils/change-utils.d.ts +62 -0
  403. package/dist/utils/change-utils.js +121 -0
  404. package/dist/utils/command-references.d.ts +18 -0
  405. package/dist/utils/command-references.js +20 -0
  406. package/dist/utils/file-system.d.ts +36 -0
  407. package/dist/utils/file-system.js +281 -0
  408. package/dist/utils/index.d.ts +6 -0
  409. package/dist/utils/index.js +9 -0
  410. package/dist/utils/interactive.d.ts +18 -0
  411. package/dist/utils/interactive.js +21 -0
  412. package/dist/utils/item-discovery.d.ts +4 -0
  413. package/dist/utils/item-discovery.js +73 -0
  414. package/dist/utils/match.d.ts +3 -0
  415. package/dist/utils/match.js +22 -0
  416. package/dist/utils/openspec-compat.d.ts +2 -0
  417. package/dist/utils/openspec-compat.js +2 -0
  418. package/dist/utils/shell-detection.d.ts +20 -0
  419. package/dist/utils/shell-detection.js +41 -0
  420. package/dist/utils/task-progress.d.ts +8 -0
  421. package/dist/utils/task-progress.js +36 -0
  422. package/package.json +111 -0
  423. package/schemas/sdd/1-spec.schema.json +221 -0
  424. package/schemas/sdd/2-plan.schema.json +199 -0
  425. package/schemas/sdd/3-tasks.schema.json +102 -0
  426. package/schemas/sdd/4-changelog.schema.json +55 -0
  427. package/schemas/sdd/5-quality.schema.json +427 -0
  428. package/schemas/sdd/workspace-catalog.schema.json +1012 -0
  429. package/schemas/spec-driven/schema.yaml +153 -0
  430. package/schemas/spec-driven/templates/design.md +19 -0
  431. package/schemas/spec-driven/templates/proposal.md +23 -0
  432. package/schemas/spec-driven/templates/spec.md +8 -0
  433. package/schemas/spec-driven/templates/tasks.md +9 -0
@@ -0,0 +1,56 @@
1
+ import type { Artifact, SchemaYaml, CompletedSet, BlockedArtifacts } from './types.js';
2
+ /**
3
+ * Represents an artifact dependency graph.
4
+ * Provides methods for querying build order, ready artifacts, and completion status.
5
+ */
6
+ export declare class ArtifactGraph {
7
+ private artifacts;
8
+ private schema;
9
+ private constructor();
10
+ /**
11
+ * Creates an ArtifactGraph from a YAML file path.
12
+ */
13
+ static fromYaml(filePath: string): ArtifactGraph;
14
+ /**
15
+ * Creates an ArtifactGraph from YAML content string.
16
+ */
17
+ static fromYamlContent(yamlContent: string): ArtifactGraph;
18
+ /**
19
+ * Creates an ArtifactGraph from a pre-validated schema object.
20
+ */
21
+ static fromSchema(schema: SchemaYaml): ArtifactGraph;
22
+ /**
23
+ * Gets a single artifact by ID.
24
+ */
25
+ getArtifact(id: string): Artifact | undefined;
26
+ /**
27
+ * Gets all artifacts in the graph.
28
+ */
29
+ getAllArtifacts(): Artifact[];
30
+ /**
31
+ * Gets the schema name.
32
+ */
33
+ getName(): string;
34
+ /**
35
+ * Gets the schema version.
36
+ */
37
+ getVersion(): number;
38
+ /**
39
+ * Computes the topological build order using Kahn's algorithm.
40
+ * Returns artifact IDs in the order they should be built.
41
+ */
42
+ getBuildOrder(): string[];
43
+ /**
44
+ * Gets artifacts that are ready to be created (all dependencies completed).
45
+ */
46
+ getNextArtifacts(completed: CompletedSet): string[];
47
+ /**
48
+ * Checks if all artifacts in the graph are completed.
49
+ */
50
+ isComplete(completed: CompletedSet): boolean;
51
+ /**
52
+ * Gets blocked artifacts and their unmet dependencies.
53
+ */
54
+ getBlocked(completed: CompletedSet): BlockedArtifacts;
55
+ }
56
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1,141 @@
1
+ import { loadSchema, parseSchema } from './schema.js';
2
+ /**
3
+ * Represents an artifact dependency graph.
4
+ * Provides methods for querying build order, ready artifacts, and completion status.
5
+ */
6
+ export class ArtifactGraph {
7
+ artifacts;
8
+ schema;
9
+ constructor(schema) {
10
+ this.schema = schema;
11
+ this.artifacts = new Map(schema.artifacts.map(a => [a.id, a]));
12
+ }
13
+ /**
14
+ * Creates an ArtifactGraph from a YAML file path.
15
+ */
16
+ static fromYaml(filePath) {
17
+ const schema = loadSchema(filePath);
18
+ return new ArtifactGraph(schema);
19
+ }
20
+ /**
21
+ * Creates an ArtifactGraph from YAML content string.
22
+ */
23
+ static fromYamlContent(yamlContent) {
24
+ const schema = parseSchema(yamlContent);
25
+ return new ArtifactGraph(schema);
26
+ }
27
+ /**
28
+ * Creates an ArtifactGraph from a pre-validated schema object.
29
+ */
30
+ static fromSchema(schema) {
31
+ return new ArtifactGraph(schema);
32
+ }
33
+ /**
34
+ * Gets a single artifact by ID.
35
+ */
36
+ getArtifact(id) {
37
+ return this.artifacts.get(id);
38
+ }
39
+ /**
40
+ * Gets all artifacts in the graph.
41
+ */
42
+ getAllArtifacts() {
43
+ return Array.from(this.artifacts.values());
44
+ }
45
+ /**
46
+ * Gets the schema name.
47
+ */
48
+ getName() {
49
+ return this.schema.name;
50
+ }
51
+ /**
52
+ * Gets the schema version.
53
+ */
54
+ getVersion() {
55
+ return this.schema.version;
56
+ }
57
+ /**
58
+ * Computes the topological build order using Kahn's algorithm.
59
+ * Returns artifact IDs in the order they should be built.
60
+ */
61
+ getBuildOrder() {
62
+ const inDegree = new Map();
63
+ const dependents = new Map();
64
+ // Initialize all artifacts
65
+ for (const artifact of this.artifacts.values()) {
66
+ inDegree.set(artifact.id, artifact.requires.length);
67
+ dependents.set(artifact.id, []);
68
+ }
69
+ // Build reverse adjacency (who depends on whom)
70
+ for (const artifact of this.artifacts.values()) {
71
+ for (const req of artifact.requires) {
72
+ dependents.get(req).push(artifact.id);
73
+ }
74
+ }
75
+ // Start with roots (in-degree 0), sorted for determinism
76
+ const queue = [...this.artifacts.keys()]
77
+ .filter(id => inDegree.get(id) === 0)
78
+ .sort();
79
+ const result = [];
80
+ while (queue.length > 0) {
81
+ const current = queue.shift();
82
+ result.push(current);
83
+ // Collect newly ready artifacts, then sort before adding
84
+ const newlyReady = [];
85
+ for (const dep of dependents.get(current)) {
86
+ const newDegree = inDegree.get(dep) - 1;
87
+ inDegree.set(dep, newDegree);
88
+ if (newDegree === 0) {
89
+ newlyReady.push(dep);
90
+ }
91
+ }
92
+ queue.push(...newlyReady.sort());
93
+ }
94
+ return result;
95
+ }
96
+ /**
97
+ * Gets artifacts that are ready to be created (all dependencies completed).
98
+ */
99
+ getNextArtifacts(completed) {
100
+ const ready = [];
101
+ for (const artifact of this.artifacts.values()) {
102
+ if (completed.has(artifact.id)) {
103
+ continue; // Already completed
104
+ }
105
+ const allDepsCompleted = artifact.requires.every(req => completed.has(req));
106
+ if (allDepsCompleted) {
107
+ ready.push(artifact.id);
108
+ }
109
+ }
110
+ // Sort for deterministic ordering
111
+ return ready.sort();
112
+ }
113
+ /**
114
+ * Checks if all artifacts in the graph are completed.
115
+ */
116
+ isComplete(completed) {
117
+ for (const artifact of this.artifacts.values()) {
118
+ if (!completed.has(artifact.id)) {
119
+ return false;
120
+ }
121
+ }
122
+ return true;
123
+ }
124
+ /**
125
+ * Gets blocked artifacts and their unmet dependencies.
126
+ */
127
+ getBlocked(completed) {
128
+ const blocked = {};
129
+ for (const artifact of this.artifacts.values()) {
130
+ if (completed.has(artifact.id)) {
131
+ continue; // Already completed
132
+ }
133
+ const unmetDeps = artifact.requires.filter(req => !completed.has(req));
134
+ if (unmetDeps.length > 0) {
135
+ blocked[artifact.id] = unmetDeps.sort();
136
+ }
137
+ }
138
+ return blocked;
139
+ }
140
+ }
141
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1,7 @@
1
+ export { ArtifactSchema, SchemaYamlSchema, type Artifact, type SchemaYaml, type CompletedSet, type BlockedArtifacts, } from './types.js';
2
+ export { loadSchema, parseSchema, SchemaValidationError } from './schema.js';
3
+ export { ArtifactGraph } from './graph.js';
4
+ export { detectCompleted } from './state.js';
5
+ export { resolveSchema, listSchemas, listSchemasWithInfo, getSchemaDir, getPackageSchemasDir, getUserSchemasDir, SchemaLoadError, type SchemaInfo, } from './resolver.js';
6
+ export { loadTemplate, loadChangeContext, generateInstructions, formatChangeStatus, TemplateLoadError, type ChangeContext, type ArtifactInstructions, type DependencyInfo, type ArtifactStatus, type ChangeStatus, } from './instruction-loader.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,13 @@
1
+ // Types
2
+ export { ArtifactSchema, SchemaYamlSchema, } from './types.js';
3
+ // Schema loading and validation
4
+ export { loadSchema, parseSchema, SchemaValidationError } from './schema.js';
5
+ // Graph operations
6
+ export { ArtifactGraph } from './graph.js';
7
+ // State detection
8
+ export { detectCompleted } from './state.js';
9
+ // Schema resolution
10
+ export { resolveSchema, listSchemas, listSchemasWithInfo, getSchemaDir, getPackageSchemasDir, getUserSchemasDir, SchemaLoadError, } from './resolver.js';
11
+ // Instruction loading
12
+ export { loadTemplate, loadChangeContext, generateInstructions, formatChangeStatus, TemplateLoadError, } from './instruction-loader.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,143 @@
1
+ import { ArtifactGraph } from './graph.js';
2
+ import type { CompletedSet } from './types.js';
3
+ /**
4
+ * Error thrown when loading a template fails.
5
+ */
6
+ export declare class TemplateLoadError extends Error {
7
+ readonly templatePath: string;
8
+ constructor(message: string, templatePath: string);
9
+ }
10
+ /**
11
+ * Change context containing graph, completion state, and metadata.
12
+ */
13
+ export interface ChangeContext {
14
+ /** The artifact dependency graph */
15
+ graph: ArtifactGraph;
16
+ /** Set of completed artifact IDs */
17
+ completed: CompletedSet;
18
+ /** Schema name being used */
19
+ schemaName: string;
20
+ /** Change name */
21
+ changeName: string;
22
+ /** Path to the change directory */
23
+ changeDir: string;
24
+ /** Project root directory */
25
+ projectRoot: string;
26
+ }
27
+ /**
28
+ * Enriched instructions for creating an artifact.
29
+ */
30
+ export interface ArtifactInstructions {
31
+ /** Change name */
32
+ changeName: string;
33
+ /** Artifact ID */
34
+ artifactId: string;
35
+ /** Schema name */
36
+ schemaName: string;
37
+ /** Full path to change directory */
38
+ changeDir: string;
39
+ /** Output path pattern (e.g., "proposal.md") */
40
+ outputPath: string;
41
+ /** Artifact description */
42
+ description: string;
43
+ /** Guidance on how to create this artifact (from schema instruction field) */
44
+ instruction: string | undefined;
45
+ /** Project context from config (constraints/background for AI, not to be included in output) */
46
+ sdd: string | undefined;
47
+ /** Artifact-specific rules from config (constraints for AI, not to be included in output) */
48
+ rules: string[] | undefined;
49
+ /** Template content (structure to follow - this IS the output format) */
50
+ template: string;
51
+ /** Dependencies with completion status and paths */
52
+ dependencies: DependencyInfo[];
53
+ /** Artifacts that become available after completing this one */
54
+ unlocks: string[];
55
+ }
56
+ /**
57
+ * Dependency information including path and description.
58
+ */
59
+ export interface DependencyInfo {
60
+ /** Artifact ID */
61
+ id: string;
62
+ /** Whether the dependency is completed */
63
+ done: boolean;
64
+ /** Relative output path of the dependency (e.g., "proposal.md") */
65
+ path: string;
66
+ /** Description of the dependency artifact */
67
+ description: string;
68
+ }
69
+ /**
70
+ * Status of a single artifact in the workflow.
71
+ */
72
+ export interface ArtifactStatus {
73
+ /** Artifact ID */
74
+ id: string;
75
+ /** Output path pattern */
76
+ outputPath: string;
77
+ /** Status: done, ready, or blocked */
78
+ status: 'done' | 'ready' | 'blocked';
79
+ /** Missing dependencies (only for blocked) */
80
+ missingDeps?: string[];
81
+ }
82
+ /**
83
+ * Formatted change status.
84
+ */
85
+ export interface ChangeStatus {
86
+ /** Change name */
87
+ changeName: string;
88
+ /** Schema name */
89
+ schemaName: string;
90
+ /** Whether all artifacts are complete */
91
+ isComplete: boolean;
92
+ /** Artifact IDs required before apply phase (from schema's apply.requires) */
93
+ applyRequires: string[];
94
+ /** Status of each artifact */
95
+ artifacts: ArtifactStatus[];
96
+ }
97
+ /**
98
+ * Loads a template from a schema's templates directory.
99
+ *
100
+ * @param schemaName - Schema name (e.g., "spec-driven")
101
+ * @param templatePath - Relative path within the templates directory (e.g., "proposal.md")
102
+ * @param projectRoot - Optional project root for project-local schema resolution
103
+ * @returns The template content
104
+ * @throws TemplateLoadError if the template cannot be loaded
105
+ */
106
+ export declare function loadTemplate(schemaName: string, templatePath: string, projectRoot?: string): string;
107
+ /**
108
+ * Loads change context combining graph and completion state.
109
+ *
110
+ * Schema resolution order:
111
+ * 1. Explicit schemaName parameter (if provided)
112
+ * 2. Schema from .openspec.yaml metadata (if exists in change directory)
113
+ * 3. Default 'spec-driven'
114
+ *
115
+ * @param projectRoot - Project root directory
116
+ * @param changeName - Change name
117
+ * @param schemaName - Optional schema name override. If not provided, auto-detected from metadata.
118
+ * @returns Change context with graph, completed set, and metadata
119
+ */
120
+ export declare function loadChangeContext(projectRoot: string, changeName: string, schemaName?: string): ChangeContext;
121
+ /**
122
+ * Generates enriched instructions for creating an artifact.
123
+ *
124
+ * Instruction injection order:
125
+ * 1. <context> - Project context from config (if present)
126
+ * 2. <rules> - Artifact-specific rules from config (if present)
127
+ * 3. <template> - Schema's template content
128
+ *
129
+ * @param context - Change context
130
+ * @param artifactId - Artifact ID to generate instructions for
131
+ * @param projectRoot - Project root directory (for reading config)
132
+ * @returns Enriched artifact instructions
133
+ * @throws Error if artifact not found
134
+ */
135
+ export declare function generateInstructions(context: ChangeContext, artifactId: string, projectRoot?: string): ArtifactInstructions;
136
+ /**
137
+ * Formats the status of all artifacts in a change.
138
+ *
139
+ * @param context - Change context
140
+ * @returns Formatted change status
141
+ */
142
+ export declare function formatChangeStatus(context: ChangeContext): ChangeStatus;
143
+ //# sourceMappingURL=instruction-loader.d.ts.map
@@ -0,0 +1,215 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { getSchemaDir, resolveSchema } from './resolver.js';
4
+ import { ArtifactGraph } from './graph.js';
5
+ import { detectCompleted } from './state.js';
6
+ import { resolveSchemaForChange } from '../../utils/change-metadata.js';
7
+ import { readProjectConfig, validateConfigRules } from '../project-config.js';
8
+ import { resolveOpenSpecSubpath } from '../sdd/services/legacy-capability.service.js';
9
+ // Session-level cache for validation warnings (avoid repeating same warnings)
10
+ const shownWarnings = new Set();
11
+ /**
12
+ * Error thrown when loading a template fails.
13
+ */
14
+ export class TemplateLoadError extends Error {
15
+ templatePath;
16
+ constructor(message, templatePath) {
17
+ super(message);
18
+ this.templatePath = templatePath;
19
+ this.name = 'TemplateLoadError';
20
+ }
21
+ }
22
+ /**
23
+ * Loads a template from a schema's templates directory.
24
+ *
25
+ * @param schemaName - Schema name (e.g., "spec-driven")
26
+ * @param templatePath - Relative path within the templates directory (e.g., "proposal.md")
27
+ * @param projectRoot - Optional project root for project-local schema resolution
28
+ * @returns The template content
29
+ * @throws TemplateLoadError if the template cannot be loaded
30
+ */
31
+ export function loadTemplate(schemaName, templatePath, projectRoot) {
32
+ const schemaDir = getSchemaDir(schemaName, projectRoot);
33
+ if (!schemaDir) {
34
+ throw new TemplateLoadError(`Schema '${schemaName}' not found`, templatePath);
35
+ }
36
+ const fullPath = path.join(schemaDir, 'templates', templatePath);
37
+ if (!fs.existsSync(fullPath)) {
38
+ throw new TemplateLoadError(`Template not found: ${fullPath}`, fullPath);
39
+ }
40
+ try {
41
+ return fs.readFileSync(fullPath, 'utf-8');
42
+ }
43
+ catch (err) {
44
+ const ioError = err instanceof Error ? err : new Error(String(err));
45
+ throw new TemplateLoadError(`Failed to read template: ${ioError.message}`, fullPath);
46
+ }
47
+ }
48
+ /**
49
+ * Loads change context combining graph and completion state.
50
+ *
51
+ * Schema resolution order:
52
+ * 1. Explicit schemaName parameter (if provided)
53
+ * 2. Schema from .openspec.yaml metadata (if exists in change directory)
54
+ * 3. Default 'spec-driven'
55
+ *
56
+ * @param projectRoot - Project root directory
57
+ * @param changeName - Change name
58
+ * @param schemaName - Optional schema name override. If not provided, auto-detected from metadata.
59
+ * @returns Change context with graph, completed set, and metadata
60
+ */
61
+ export function loadChangeContext(projectRoot, changeName, schemaName) {
62
+ const changeDir = resolveOpenSpecSubpath(projectRoot, 'changes', changeName);
63
+ // Resolve schema: explicit > metadata > default
64
+ const resolvedSchemaName = resolveSchemaForChange(changeDir, schemaName);
65
+ const schema = resolveSchema(resolvedSchemaName, projectRoot);
66
+ const graph = ArtifactGraph.fromSchema(schema);
67
+ const completed = detectCompleted(graph, changeDir);
68
+ return {
69
+ graph,
70
+ completed,
71
+ schemaName: resolvedSchemaName,
72
+ changeName,
73
+ changeDir,
74
+ projectRoot,
75
+ };
76
+ }
77
+ /**
78
+ * Generates enriched instructions for creating an artifact.
79
+ *
80
+ * Instruction injection order:
81
+ * 1. <context> - Project context from config (if present)
82
+ * 2. <rules> - Artifact-specific rules from config (if present)
83
+ * 3. <template> - Schema's template content
84
+ *
85
+ * @param context - Change context
86
+ * @param artifactId - Artifact ID to generate instructions for
87
+ * @param projectRoot - Project root directory (for reading config)
88
+ * @returns Enriched artifact instructions
89
+ * @throws Error if artifact not found
90
+ */
91
+ export function generateInstructions(context, artifactId, projectRoot) {
92
+ const artifact = context.graph.getArtifact(artifactId);
93
+ if (!artifact) {
94
+ throw new Error(`Artifact '${artifactId}' not found in schema '${context.schemaName}'`);
95
+ }
96
+ const templateContent = loadTemplate(context.schemaName, artifact.template, context.projectRoot);
97
+ const dependencies = getDependencyInfo(artifact, context.graph, context.completed);
98
+ const unlocks = getUnlockedArtifacts(context.graph, artifactId);
99
+ // Use projectRoot from context if not explicitly provided
100
+ const effectiveProjectRoot = projectRoot ?? context.projectRoot;
101
+ // Try to read project config for context and rules
102
+ let projectConfig = null;
103
+ if (effectiveProjectRoot) {
104
+ try {
105
+ projectConfig = readProjectConfig(effectiveProjectRoot);
106
+ }
107
+ catch {
108
+ // If config read fails, continue without config
109
+ }
110
+ }
111
+ // Validate rules artifact IDs if config has rules (only once per session)
112
+ if (projectConfig?.rules) {
113
+ const validArtifactIds = new Set(context.graph.getAllArtifacts().map((a) => a.id));
114
+ const warnings = validateConfigRules(projectConfig.rules, validArtifactIds, context.schemaName);
115
+ // Show each unique warning only once per session
116
+ for (const warning of warnings) {
117
+ if (!shownWarnings.has(warning)) {
118
+ console.warn(warning);
119
+ shownWarnings.add(warning);
120
+ }
121
+ }
122
+ }
123
+ // Extract context and rules as separate fields (not prepended to template)
124
+ const configContext = projectConfig?.sdd?.trim() || undefined;
125
+ const rulesForArtifact = projectConfig?.rules?.[artifactId];
126
+ const configRules = rulesForArtifact && rulesForArtifact.length > 0 ? rulesForArtifact : undefined;
127
+ return {
128
+ changeName: context.changeName,
129
+ artifactId: artifact.id,
130
+ schemaName: context.schemaName,
131
+ changeDir: context.changeDir,
132
+ outputPath: artifact.generates,
133
+ description: artifact.description,
134
+ instruction: artifact.instruction,
135
+ sdd: configContext,
136
+ rules: configRules,
137
+ template: templateContent,
138
+ dependencies,
139
+ unlocks,
140
+ };
141
+ }
142
+ /**
143
+ * Gets dependency info including paths and descriptions.
144
+ */
145
+ function getDependencyInfo(artifact, graph, completed) {
146
+ return artifact.requires.map(id => {
147
+ const depArtifact = graph.getArtifact(id);
148
+ return {
149
+ id,
150
+ done: completed.has(id),
151
+ path: depArtifact?.generates ?? id,
152
+ description: depArtifact?.description ?? '',
153
+ };
154
+ });
155
+ }
156
+ /**
157
+ * Gets artifacts that become available after completing the given artifact.
158
+ */
159
+ function getUnlockedArtifacts(graph, artifactId) {
160
+ const unlocks = [];
161
+ for (const artifact of graph.getAllArtifacts()) {
162
+ if (artifact.requires.includes(artifactId)) {
163
+ unlocks.push(artifact.id);
164
+ }
165
+ }
166
+ return unlocks.sort();
167
+ }
168
+ /**
169
+ * Formats the status of all artifacts in a change.
170
+ *
171
+ * @param context - Change context
172
+ * @returns Formatted change status
173
+ */
174
+ export function formatChangeStatus(context) {
175
+ // Load schema to get apply phase configuration
176
+ const schema = resolveSchema(context.schemaName, context.projectRoot);
177
+ const applyRequires = schema.apply?.requires ?? schema.artifacts.map(a => a.id);
178
+ const artifacts = context.graph.getAllArtifacts();
179
+ const ready = new Set(context.graph.getNextArtifacts(context.completed));
180
+ const blocked = context.graph.getBlocked(context.completed);
181
+ const artifactStatuses = artifacts.map(artifact => {
182
+ if (context.completed.has(artifact.id)) {
183
+ return {
184
+ id: artifact.id,
185
+ outputPath: artifact.generates,
186
+ status: 'done',
187
+ };
188
+ }
189
+ if (ready.has(artifact.id)) {
190
+ return {
191
+ id: artifact.id,
192
+ outputPath: artifact.generates,
193
+ status: 'ready',
194
+ };
195
+ }
196
+ return {
197
+ id: artifact.id,
198
+ outputPath: artifact.generates,
199
+ status: 'blocked',
200
+ missingDeps: blocked[artifact.id] ?? [],
201
+ };
202
+ });
203
+ // Sort by build order for consistent output
204
+ const buildOrder = context.graph.getBuildOrder();
205
+ const orderMap = new Map(buildOrder.map((id, idx) => [id, idx]));
206
+ artifactStatuses.sort((a, b) => (orderMap.get(a.id) ?? 0) - (orderMap.get(b.id) ?? 0));
207
+ return {
208
+ changeName: context.changeName,
209
+ schemaName: context.schemaName,
210
+ isComplete: context.graph.isComplete(context.completed),
211
+ applyRequires,
212
+ artifacts: artifactStatuses,
213
+ };
214
+ }
215
+ //# sourceMappingURL=instruction-loader.js.map
@@ -0,0 +1,81 @@
1
+ import type { SchemaYaml } from './types.js';
2
+ /**
3
+ * Error thrown when loading a schema fails.
4
+ */
5
+ export declare class SchemaLoadError extends Error {
6
+ readonly schemaPath: string;
7
+ readonly cause?: Error | undefined;
8
+ constructor(message: string, schemaPath: string, cause?: Error | undefined);
9
+ }
10
+ /**
11
+ * Gets the package's built-in schemas directory path.
12
+ * Uses import.meta.url to resolve relative to the current module.
13
+ */
14
+ export declare function getPackageSchemasDir(): string;
15
+ /**
16
+ * Gets the user's schema override directory path.
17
+ */
18
+ export declare function getUserSchemasDir(): string;
19
+ /**
20
+ * Gets the project-local schemas directory path.
21
+ * @param projectRoot - The project root directory
22
+ * @returns The path to the project's schemas directory
23
+ */
24
+ export declare function getProjectSchemasDir(projectRoot: string): string;
25
+ /**
26
+ * Resolves a schema name to its directory path.
27
+ *
28
+ * Resolution order (when projectRoot is provided):
29
+ * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
30
+ * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
31
+ * 3. Package built-in: <package>/schemas/<name>/schema.yaml
32
+ *
33
+ * When projectRoot is not provided, only user override and package built-in are checked
34
+ * (backward compatible behavior).
35
+ *
36
+ * @param name - Schema name (e.g., "spec-driven")
37
+ * @param projectRoot - Optional project root directory for project-local schema resolution
38
+ * @returns The path to the schema directory, or null if not found
39
+ */
40
+ export declare function getSchemaDir(name: string, projectRoot?: string): string | null;
41
+ /**
42
+ * Resolves a schema name to a SchemaYaml object.
43
+ *
44
+ * Resolution order (when projectRoot is provided):
45
+ * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
46
+ * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
47
+ * 3. Package built-in: <package>/schemas/<name>/schema.yaml
48
+ *
49
+ * When projectRoot is not provided, only user override and package built-in are checked
50
+ * (backward compatible behavior).
51
+ *
52
+ * @param name - Schema name (e.g., "spec-driven")
53
+ * @param projectRoot - Optional project root directory for project-local schema resolution
54
+ * @returns The resolved schema object
55
+ * @throws Error if schema is not found in any location
56
+ */
57
+ export declare function resolveSchema(name: string, projectRoot?: string): SchemaYaml;
58
+ /**
59
+ * Lists all available schema names.
60
+ * Combines project-local, user override, and package built-in schemas.
61
+ *
62
+ * @param projectRoot - Optional project root directory for project-local schema resolution
63
+ */
64
+ export declare function listSchemas(projectRoot?: string): string[];
65
+ /**
66
+ * Schema info with metadata (name, description, artifacts).
67
+ */
68
+ export interface SchemaInfo {
69
+ name: string;
70
+ description: string;
71
+ artifacts: string[];
72
+ source: 'project' | 'user' | 'package';
73
+ }
74
+ /**
75
+ * Lists all available schemas with their descriptions and artifact lists.
76
+ * Useful for agent skills to present schema selection to users.
77
+ *
78
+ * @param projectRoot - Optional project root directory for project-local schema resolution
79
+ */
80
+ export declare function listSchemasWithInfo(projectRoot?: string): SchemaInfo[];
81
+ //# sourceMappingURL=resolver.d.ts.map