@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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerExecutionCommands(sddCmd: Command): void;
3
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1,409 @@
1
+ import chalk from 'chalk';
2
+ import { loadProjectSddConfig, resolveSddPaths } from '../../core/sdd/state.js';
3
+ import { createSddStores } from '../../core/sdd/store/sdd-stores.js';
4
+ import { StartService } from '../../core/sdd/services/start.service.js';
5
+ import { FrontendImpactService } from '../../core/sdd/services/frontend-impact.service.js';
6
+ import { FinalizeService } from '../../core/sdd/services/finalize.service.js';
7
+ import { ContextService } from '../../core/sdd/services/context.service.js';
8
+ import { OnboardService } from '../../core/sdd/services/onboard.service.js';
9
+ import { ApproveService } from '../../core/sdd/services/approve.service.js';
10
+ import { NextService } from '../../core/sdd/services/next.service.js';
11
+ import { AuditService } from '../../core/sdd/services/audit.service.js';
12
+ import { McpRuntimeService } from '../../core/sdd/services/mcp-runtime.service.js';
13
+ import { ensureMandatorySddMigration, parseCsvOption, parseFlowModeOption, resolveRoot } from './shared.js';
14
+ export function registerExecutionCommands(sddCmd) {
15
+ sddCmd
16
+ .command('mcp-manifest')
17
+ .description('Render a provider-agnostic MCP manifest for OpenSDD execution tools')
18
+ .option('--provider <provider>', 'Client profile: codex|claude-code|kimmy-code|kilo-code|open-code|generic')
19
+ .option('--json', 'JSON output')
20
+ .action(async (options) => {
21
+ const root = resolveRoot();
22
+ const __config = await loadProjectSddConfig(root);
23
+ const __paths = resolveSddPaths(root, __config);
24
+ const stores = createSddStores(__paths);
25
+ await ensureMandatorySddMigration(root);
26
+ const manifest = new McpRuntimeService(stores).manifest(options?.provider);
27
+ if (options?.json) {
28
+ console.log(JSON.stringify(manifest, null, 2));
29
+ return;
30
+ }
31
+ console.log(chalk.green(`OpenSDD MCP manifest for ${manifest.provider.label}`));
32
+ console.log(`Protocol: ${manifest.protocol}`);
33
+ console.log(`Transport: ${manifest.provider.transport}`);
34
+ console.log(`Tools: ${manifest.tools.map((tool) => tool.name).join(', ')}`);
35
+ });
36
+ sddCmd
37
+ .command('mcp-call <tool>')
38
+ .description('Invoke the provider-agnostic MCP bridge for next/context/finalize')
39
+ .option('--provider <provider>', 'Client profile: codex|claude-code|kimmy-code|kilo-code|open-code|generic')
40
+ .option('--ref <ref>', 'Reference for opensdd.context or opensdd.finalize')
41
+ .option('--rank <rank>', 'Ranking for opensdd.next: impact|criticality|fifo')
42
+ .option('--limit <n>', 'Limit for opensdd.next')
43
+ .option('--max-agents <n>', 'Max agents for opensdd.next wave simulation')
44
+ .option('--all-ready', 'Apply to all ready items for opensdd.finalize')
45
+ .option('--force-frontend', 'Force frontend finalize guardrail bypass')
46
+ .option('--force-transition', 'Force transition guardrail bypass')
47
+ .option('--json', 'JSON output')
48
+ .action(async (tool, options) => {
49
+ const root = resolveRoot();
50
+ const __config = await loadProjectSddConfig(root);
51
+ const __paths = resolveSddPaths(root, __config);
52
+ const stores = createSddStores(__paths);
53
+ await ensureMandatorySddMigration(root);
54
+ const runtime = new McpRuntimeService(stores);
55
+ const response = await runtime.invoke(root, {
56
+ provider: options?.provider,
57
+ tool: tool,
58
+ args: {
59
+ ref: options?.ref,
60
+ rank: options?.rank,
61
+ limit: options?.limit ? Number.parseInt(options.limit, 10) : undefined,
62
+ maxAgents: options?.maxAgents ? Number.parseInt(options.maxAgents, 10) : undefined,
63
+ allReady: options?.allReady,
64
+ forceFrontend: options?.forceFrontend,
65
+ forceTransition: options?.forceTransition,
66
+ cwd: process.cwd(),
67
+ },
68
+ });
69
+ if (options?.json) {
70
+ console.log(JSON.stringify(response, null, 2));
71
+ return;
72
+ }
73
+ console.log(chalk.green(`OpenSDD MCP call completed: ${response.tool}`));
74
+ console.log(`Provider: ${response.provider}`);
75
+ console.log(`Invoked at: ${response.invoked_at}`);
76
+ console.log(JSON.stringify(response.result, null, 2));
77
+ });
78
+ sddCmd
79
+ .command('start <refOrText>')
80
+ .description('Starts FEAT/EPIC/FGAP/TD execution or creates a direct FEAT')
81
+ .alias('iniciar-execucao')
82
+ .option('--scale <scale>', 'Escala QUICK|STANDARD|LARGE')
83
+ .option('--schema <schema>', 'Schema para criar change em openspec/changes')
84
+ .option('--force', 'Bypass de bloqueios e conflitos de lock')
85
+ .option('--force-transition', 'Bypass das restrições e violações das lentes estruturais')
86
+ .option('--flow-mode <flowMode>', 'Flow: direct|standard|rigorous')
87
+ .option('--fluxo <flowMode>', 'Legacy Portuguese alias for --flow-mode')
88
+ .option('--json', 'JSON output')
89
+ .option('--no-render', 'Does not generate views after updating state')
90
+ .action(async (refOrText, options) => {
91
+ const root = resolveRoot();
92
+ const __config = await loadProjectSddConfig(root);
93
+ const __paths = resolveSddPaths(root, __config);
94
+ const stores = createSddStores(__paths);
95
+ await ensureMandatorySddMigration(root);
96
+ const flow = parseFlowModeOption(options?.flowMode || options?.fluxo);
97
+ const command = new StartService(stores);
98
+ const result = await command.execute(root, refOrText, {
99
+ scale: options?.scale,
100
+ schema: options?.schema,
101
+ force: options?.force,
102
+ forceTransition: options?.forceTransition,
103
+ flowMode: flow,
104
+ render: options?.render,
105
+ });
106
+ if (options?.json) {
107
+ console.log(JSON.stringify(result, null, 2));
108
+ return;
109
+ }
110
+ console.log(chalk.green(`Execucao iniciada para ${result.featureId}`));
111
+ console.log(`Change: ${result.changeName}`);
112
+ console.log(`Status: ${result.status}`);
113
+ console.log(`Guardrails: blocked=${result.start_guardrails.blocked_check.ok ? 'ok' : 'fail'} | lock=${result.start_guardrails.lock_check.ok ? 'ok' : 'fail'} | forced=${result.start_guardrails.forced ? 'sim' : 'nao'}`);
114
+ console.log(`Workspace ativo: ${result.active_path}`);
115
+ console.log(`Docs gerados: ${result.generated_docs.join(', ')}`);
116
+ console.log(`Fluxo: ${result.flow_mode}`);
117
+ console.log(`Bundles sugeridos: ${result.recommended_bundles.join(', ') || '-'}`);
118
+ });
119
+ sddCmd
120
+ .command('frontend-impact <featureId>')
121
+ .description('Declara impacto de frontend para uma FEAT')
122
+ .alias('impacto-frontend')
123
+ .option('--status <status>', 'Status: unknown|none|required')
124
+ .option('--reason <texto>', 'Justificativa obrigatoria para status=none')
125
+ .option('--routes <list>', 'Rotas separadas por virgula')
126
+ .option('--surfaces <list>', 'Superficies de UI separadas por virgula')
127
+ .option('--json', 'Saida em JSON')
128
+ .option('--no-render', 'Nao gera views apos atualizar estado')
129
+ .action(async (featureId, options) => {
130
+ const root = resolveRoot();
131
+ const __config = await loadProjectSddConfig(root);
132
+ const __paths = resolveSddPaths(root, __config);
133
+ const stores = createSddStores(__paths);
134
+ await ensureMandatorySddMigration(root);
135
+ const status = options?.status;
136
+ if (!status || !['unknown', 'none', 'required'].includes(status)) {
137
+ throw new Error('Valor invalido em --status. Use unknown, none ou required.');
138
+ }
139
+ const command = new FrontendImpactService(stores);
140
+ const result = await command.execute(root, featureId, {
141
+ status,
142
+ reason: options?.reason,
143
+ routes: parseCsvOption(options?.routes),
144
+ surfaces: parseCsvOption(options?.surfaces),
145
+ render: options?.render,
146
+ });
147
+ if (options?.json) {
148
+ console.log(JSON.stringify(result, null, 2));
149
+ return;
150
+ }
151
+ console.log(chalk.green(`Impacto frontend atualizado para ${result.feature_id}`));
152
+ console.log(`Status: ${result.frontend_impact_status}`);
153
+ console.log(`Declarado em: ${result.frontend_impact_declared_at || '-'}`);
154
+ console.log(`Superficies: ${result.frontend_surface_tokens.join(', ') || '-'}`);
155
+ });
156
+ sddCmd
157
+ .command('finalize')
158
+ .description('Consolida memoria e marca FEAT como DONE')
159
+ .alias('consolidar')
160
+ .option('--ref <featId>', 'Finaliza feature especifica (ex: FEAT-0001)')
161
+ .option('--all-ready', 'Finaliza todas as features prontas na fila')
162
+ .option('--no-adr', 'Nao gera ADR automatico nesta execucao')
163
+ .option('--force-frontend', 'Bypass dos guardrails de frontend com auditoria explicita')
164
+ .option('--force-transition', 'Bypass de bloqueios estruturais por lentes no finalize')
165
+ .option('--json', 'Saida em JSON')
166
+ .option('--no-render', 'Nao gera views apos atualizar estado')
167
+ .action(async (options) => {
168
+ const root = resolveRoot();
169
+ const __config = await loadProjectSddConfig(root);
170
+ const __paths = resolveSddPaths(root, __config);
171
+ const stores = createSddStores(__paths);
172
+ await ensureMandatorySddMigration(root);
173
+ const command = new FinalizeService(stores);
174
+ const result = await command.execute(root, {
175
+ ref: options?.ref,
176
+ allReady: options?.allReady,
177
+ noAdr: options?.noAdr,
178
+ forceFrontend: options?.forceFrontend,
179
+ forceTransition: options?.forceTransition,
180
+ cwd: process.cwd(),
181
+ render: options?.render,
182
+ });
183
+ if (options?.json) {
184
+ console.log(JSON.stringify(result, null, 2));
185
+ return;
186
+ }
187
+ if (result.finalized.length === 0) {
188
+ console.log('Nenhuma feature finalizada nesta execucao.');
189
+ }
190
+ else {
191
+ console.log(chalk.green(`Finalizadas: ${result.finalized.join(', ')}`));
192
+ }
193
+ console.log(`Liberadas: ${result.unblocked.join(', ') || '-'}`);
194
+ console.log(`Pendentes na fila: ${result.pending}`);
195
+ console.log(`Docs core atualizados: ${result.updated_core_docs?.join(', ') || '-'}`);
196
+ console.log(`README sincronizado: ${result.updated_readme ? 'sim' : 'nao'}`);
197
+ console.log(`Guia do agente sincronizado: ${result.updated_agent_guide ? 'sim' : 'nao'}`);
198
+ if (result.auto_frontend_gaps?.length) {
199
+ console.log(`FGAPs automáticos criados: ${result.auto_frontend_gaps.join(', ')}`);
200
+ }
201
+ if (result.frontend_guardrails?.length) {
202
+ const blocked = result.frontend_guardrails.filter((entry) => entry.blocked).length;
203
+ const forced = result.frontend_guardrails.filter((entry) => entry.forced).length;
204
+ console.log(`Guardrails frontend: avaliados=${result.frontend_guardrails.length} bloqueadas=${blocked} forced=${forced}`);
205
+ }
206
+ if (result.doc_warnings?.length) {
207
+ console.log(`Avisos de docs: ${result.doc_warnings.join(' | ')}`);
208
+ }
209
+ });
210
+ sddCmd
211
+ .command('context <ref>')
212
+ .description('Gera contexto objetivo para FEAT/EPIC/FGAP/TD (RAD legado ainda aceito)')
213
+ .alias('contexto')
214
+ .option('--json', 'Saida em JSON')
215
+ .action(async (ref, options) => {
216
+ const root = resolveRoot();
217
+ const __config = await loadProjectSddConfig(root);
218
+ const __paths = resolveSddPaths(root, __config);
219
+ const stores = createSddStores(__paths);
220
+ await ensureMandatorySddMigration(root);
221
+ const command = new ContextService(stores);
222
+ const context = await command.execute(root, ref);
223
+ if (options?.json) {
224
+ console.log(JSON.stringify(context, null, 2));
225
+ return;
226
+ }
227
+ console.log(`Contexto de ${context.target_id} (${context.target_type})`);
228
+ console.log(`Resumo: ${context.summary}`);
229
+ console.log(`Core docs: ${context.core_docs.join(', ')}`);
230
+ if (context.origin) {
231
+ const origin = context.origin;
232
+ console.log(`Origem: ${origin.type}${origin.ref ? ` (${origin.ref})` : ''}`);
233
+ }
234
+ if (context.related_features) {
235
+ const refs = context.related_features;
236
+ console.log(`Features relacionadas: ${refs.join(', ') || '-'}`);
237
+ }
238
+ if (context.recommended_skills) {
239
+ const skills = context.recommended_skills;
240
+ console.log(`Skills sugeridas: ${skills.join(', ') || '-'}`);
241
+ }
242
+ if (context.skill_execution_contract) {
243
+ const skillContract = context.skill_execution_contract;
244
+ if (skillContract.required) {
245
+ console.log(`Evidencia de skill: ${skillContract.required_skill_ids.join(', ')} -> ${skillContract.verification_location}`);
246
+ }
247
+ }
248
+ if (context.read_order) {
249
+ const readOrder = context.read_order;
250
+ console.log(`Ordem de leitura: ${readOrder.join(' -> ')}`);
251
+ }
252
+ if (context.frontend_impact_status) {
253
+ console.log(`Impacto frontend: ${String(context.frontend_impact_status || 'unknown')}`);
254
+ }
255
+ });
256
+ sddCmd
257
+ .command('onboard [target]')
258
+ .description('Gera onboarding estruturado para system, EPIC-#### ou FEAT-####')
259
+ .alias('integrar')
260
+ .alias('orientar')
261
+ .option('--json', 'Saida em JSON')
262
+ .option('--compact', 'Retorna payload resumido')
263
+ .option('--full', 'Retorna payload completo em JSON (desativa modo compacto automatico)')
264
+ .action(async (target = 'system', options) => {
265
+ const root = resolveRoot();
266
+ const __config = await loadProjectSddConfig(root);
267
+ const __paths = resolveSddPaths(root, __config);
268
+ const stores = createSddStores(__paths);
269
+ await ensureMandatorySddMigration(root);
270
+ const command = new OnboardService(stores);
271
+ const compact = options?.full ? false : (options?.compact ?? Boolean(options?.json));
272
+ const result = await command.execute(root, target, { compact });
273
+ if (options?.json) {
274
+ console.log(JSON.stringify(result, null, 2));
275
+ return;
276
+ }
277
+ const view = result;
278
+ console.log(`Onboarding: ${String(view.target || target)}`);
279
+ console.log(`Resumo: ${String(view.summary || '-')}`);
280
+ if (Array.isArray(view.read_order)) {
281
+ console.log(`Ordem de leitura: ${view.read_order.join(' -> ')}`);
282
+ }
283
+ if (Array.isArray(view.proximos_passos)) {
284
+ console.log(`Proximos passos: ${view.proximos_passos.join(', ')}`);
285
+ }
286
+ });
287
+ sddCmd
288
+ .command('aprovar <featId>')
289
+ .description('Aprova etapa de proposta, planejamento ou tarefas de uma FEAT')
290
+ .requiredOption('--etapa <etapa>', 'Etapa: proposta|planejamento|tarefas')
291
+ .option('--por <nome>', 'Quem aprovou')
292
+ .option('--observacao <texto>', 'Observacao da aprovacao')
293
+ .option('--json', 'Saida em JSON')
294
+ .option('--no-render', 'Nao gera views apos atualizar estado')
295
+ .action(async (featId, options) => {
296
+ const root = resolveRoot();
297
+ const __config = await loadProjectSddConfig(root);
298
+ const __paths = resolveSddPaths(root, __config);
299
+ const stores = createSddStores(__paths);
300
+ await ensureMandatorySddMigration(root);
301
+ const etapa = options?.etapa;
302
+ if (!etapa || !['proposta', 'planejamento', 'tarefas'].includes(etapa)) {
303
+ throw new Error('Valor invalido em --etapa. Use proposta, planejamento ou tarefas.');
304
+ }
305
+ const command = new ApproveService(stores);
306
+ const result = await command.execute(root, featId, etapa, {
307
+ by: options?.por,
308
+ note: options?.observacao,
309
+ render: options?.render,
310
+ });
311
+ if (options?.json) {
312
+ console.log(JSON.stringify(result, null, 2));
313
+ return;
314
+ }
315
+ console.log(chalk.green(`Etapa ${result.stage} aprovada para ${result.feature_id}`));
316
+ console.log(`Status do gate: ${result.status}`);
317
+ console.log(`Etapa atual da feature: ${result.current_stage}`);
318
+ });
319
+ sddCmd
320
+ .command('next [path]')
321
+ .description('Mostra FEATs prontas para iniciar em paralelo')
322
+ .alias('proximo')
323
+ .option('--rank <mode>', 'Ranking: impact|criticality|fifo (padrao: impact)')
324
+ .option('--limit <n>', 'Limite de itens prontos (padrao: 10)')
325
+ .option('--max-agents <n>', 'Limite de itens por onda (padrao: sem limite)')
326
+ .option('--json', 'Saida em JSON')
327
+ .action(async (targetPath = '.', options) => {
328
+ const root = resolveRoot(targetPath);
329
+ const __config = await loadProjectSddConfig(root);
330
+ const __paths = resolveSddPaths(root, __config);
331
+ const stores = createSddStores(__paths);
332
+ await ensureMandatorySddMigration(root);
333
+ if (options?.rank && !['impact', 'criticality', 'fifo'].includes(options.rank)) {
334
+ throw new Error('Valor invalido em --rank. Use impact, criticality ou fifo.');
335
+ }
336
+ const command = new NextService(stores);
337
+ const result = await command.execute(root, {
338
+ rank: options?.rank,
339
+ limit: options?.limit ? Number(options.limit) : undefined,
340
+ maxAgents: options?.maxAgents ? Number(options.maxAgents) : undefined,
341
+ });
342
+ if (options?.json) {
343
+ console.log(JSON.stringify(result, null, 2));
344
+ return;
345
+ }
346
+ console.log(`Ranking: ${result.rank}`);
347
+ console.log(`Prontas: ${result.ready.length}`);
348
+ for (const item of result.ready) {
349
+ const skills = item.recommended_skills.length > 0 ? item.recommended_skills.join(', ') : '-';
350
+ console.log(`- ${item.id}: ${item.title} | score=${item.score} | skills: ${skills}`);
351
+ console.log(` motivos: ${item.reasons.join('; ')}`);
352
+ }
353
+ console.log(`Bloqueadas: ${result.blocked.length}`);
354
+ for (const item of result.blocked) {
355
+ const deps = item.blocked_by.length > 0 ? item.blocked_by.join(', ') : '-';
356
+ console.log(`- ${item.id}: ${item.title} | blocked_by: ${deps}`);
357
+ }
358
+ console.log(`Conflitos de lock: ${result.conflicts.length}`);
359
+ for (const item of result.conflicts) {
360
+ const locks = item.lock_domains.length > 0 ? item.lock_domains.join(', ') : '-';
361
+ console.log(`- ${item.id}: ${item.title} | locks: ${locks}`);
362
+ }
363
+ if (result.waves?.length) {
364
+ console.log(`Ondas: ${result.waves.length}`);
365
+ result.waves.forEach((wave, index) => {
366
+ console.log(` Onda ${index + 1}: ${wave.length > 0 ? wave.join(', ') : '-'}`);
367
+ });
368
+ }
369
+ if (result.deferred?.length) {
370
+ console.log(`Adiados: ${result.deferred.length}`);
371
+ for (const item of result.deferred) {
372
+ console.log(`- ${item.id}: ${item.reasons.join('; ')}`);
373
+ }
374
+ }
375
+ });
376
+ sddCmd
377
+ .command('audit [path]')
378
+ .description('Audita a saude de meta-evolucao do SDD (placeholders, deliberacao, ADR e forced transition)')
379
+ .alias('auditar')
380
+ .option('--json', 'Saida em JSON')
381
+ .action(async (targetPath = '.', options) => {
382
+ const root = resolveRoot(targetPath);
383
+ const __config = await loadProjectSddConfig(root);
384
+ const __paths = resolveSddPaths(root, __config);
385
+ const stores = createSddStores(__paths);
386
+ await ensureMandatorySddMigration(root);
387
+ const command = new AuditService(stores);
388
+ const result = await command.execute(root);
389
+ if (options?.json) {
390
+ console.log(JSON.stringify(result, null, 2));
391
+ return;
392
+ }
393
+ console.log(chalk.green('Auditoria SDD concluida.'));
394
+ console.log(`Gerado em: ${result.generated_at}`);
395
+ console.log(`Score: ${result.score}% (limiar: ${result.meta_evolution.health_alert_threshold}%)`);
396
+ console.log(`Saude: ${result.healthy ? 'OK' : 'ALERTA'}`);
397
+ console.log(`Historico: ${result.audit_history.path} (${result.audit_history.total_runs} execucoes)`);
398
+ console.log(`Artefatos sem placeholder: ${result.metrics.artifacts_without_placeholder.ok}/${result.metrics.artifacts_without_placeholder.total} (${result.metrics.artifacts_without_placeholder.percent}%)`);
399
+ console.log(`Debates com deliberacao real: ${result.metrics.debates_with_real_deliberation.ok}/${result.metrics.debates_with_real_deliberation.total} (${result.metrics.debates_with_real_deliberation.percent}%)`);
400
+ console.log(`ADRs gerados vs esperados: ${result.metrics.adrs_generated_vs_expected.ok}/${result.metrics.adrs_generated_vs_expected.total} (${result.metrics.adrs_generated_vs_expected.percent}%)`);
401
+ console.log(`Quality contracts ready: ${result.metrics.quality_contracts_ready.ok}/${result.metrics.quality_contracts_ready.total} (${result.metrics.quality_contracts_ready.percent}%)`);
402
+ console.log(`Forced transitions detectadas: ${result.metrics.forced_transitions.total}`);
403
+ if (result.metrics.forced_transitions.feature_refs.length > 0) {
404
+ console.log(`Features com evidencias: ${result.metrics.forced_transitions.feature_refs.join(', ')}`);
405
+ }
406
+ console.log(result.recommendation);
407
+ });
408
+ }
409
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1,9 @@
1
+ import { type SddLanguage, type SddLayout } from '../../core/sdd/state.js';
2
+ import type { FlowMode } from '../../core/sdd/types.js';
3
+ export declare function parseCsvOption(value?: string): string[];
4
+ export declare function resolveRoot(targetPath?: string): string;
5
+ export declare function parseLangOption(value?: string): SddLanguage | undefined;
6
+ export declare function parseLayoutOption(value?: string): SddLayout | undefined;
7
+ export declare function parseFlowModeOption(value?: string): FlowMode | undefined;
8
+ export declare function ensureMandatorySddMigration(targetPath: string): Promise<void>;
9
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1,84 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { resolveProjectRoot } from '../../core/sdd/resolve-project-root.js';
5
+ import { loadProjectSddConfig, resolveSddPaths, } from '../../core/sdd/state.js';
6
+ import { assessSddMigration, SddMigrateCommand } from '../../core/sdd/migrate.js';
7
+ import { withStateLock } from '../../core/sdd/state-lock.js';
8
+ import { isInteractive } from '../../utils/interactive.js';
9
+ export function parseCsvOption(value) {
10
+ if (!value)
11
+ return [];
12
+ return value
13
+ .split(',')
14
+ .map((item) => item.trim())
15
+ .filter((item) => item.length > 0);
16
+ }
17
+ export function resolveRoot(targetPath = '.') {
18
+ return resolveProjectRoot(targetPath === '.' ? undefined : targetPath);
19
+ }
20
+ export function parseLangOption(value) {
21
+ if (!value)
22
+ return undefined;
23
+ if (value === 'pt-BR' || value === 'en-US')
24
+ return value;
25
+ throw new Error('Invalid --lang value. Use pt-BR or en-US.');
26
+ }
27
+ export function parseLayoutOption(value) {
28
+ if (!value)
29
+ return undefined;
30
+ if (value === 'legacy' || value === 'pt-BR' || value === 'en-US')
31
+ return value;
32
+ throw new Error('Invalid --layout value. Use legacy, pt-BR, or en-US.');
33
+ }
34
+ export function parseFlowModeOption(value) {
35
+ if (!value)
36
+ return undefined;
37
+ const normalized = value.trim().toLowerCase();
38
+ if (normalized === 'direct' || normalized === 'direto')
39
+ return 'direto';
40
+ if (normalized === 'standard' || normalized === 'padrao' || normalized === 'padrão')
41
+ return 'padrao';
42
+ if (normalized === 'rigorous' || normalized === 'rigoroso')
43
+ return 'rigoroso';
44
+ throw new Error('Invalid --flow-mode/--fluxo value. Use direct, standard, or rigorous.');
45
+ }
46
+ export async function ensureMandatorySddMigration(targetPath) {
47
+ const resolved = resolveRoot(targetPath);
48
+ const config = await loadProjectSddConfig(resolved);
49
+ const paths = resolveSddPaths(resolved, config);
50
+ try {
51
+ await Promise.all([
52
+ fs.access(paths.configFile),
53
+ fs.access(paths.stateFiles.discoveryIndex),
54
+ fs.access(paths.stateFiles.backlog),
55
+ ]);
56
+ }
57
+ catch {
58
+ return;
59
+ }
60
+ const assessment = await assessSddMigration(resolved);
61
+ if (!assessment.needsMigration) {
62
+ return;
63
+ }
64
+ const summary = assessment.reasons.join(' | ');
65
+ if (isInteractive()) {
66
+ const { confirm } = await import('@inquirer/prompts');
67
+ const approved = await confirm({
68
+ message: `Migracao SDD obrigatoria detectada. Deseja aplicar agora para continuar? ${summary}`,
69
+ default: true,
70
+ });
71
+ if (!approved) {
72
+ throw new Error('Operacao interrompida: aplique a migracao SDD mandatória com `openspec sdd migrate`.');
73
+ }
74
+ }
75
+ const stateDir = path.dirname(paths.stateFiles.discoveryIndex);
76
+ const result = await withStateLock(stateDir, async () => {
77
+ const command = new SddMigrateCommand();
78
+ return command.execute(resolved, { radToEpic: true });
79
+ });
80
+ for (const message of result.messages) {
81
+ console.log(chalk.yellow(`[sdd:migrate] ${message}`));
82
+ }
83
+ }
84
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSkillsCommands(sddCmd: Command): void;
3
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1,154 @@
1
+ import chalk from 'chalk';
2
+ import { loadProjectSddConfig, loadSkillCatalogState, resolveSddPaths } from '../../core/sdd/state.js';
3
+ import { listBundles, suggestSkills } from '../../core/sdd/skills.js';
4
+ import { createSddStores } from '../../core/sdd/store/sdd-stores.js';
5
+ import { SkillsSyncService } from '../../core/sdd/services/skills-sync.service.js';
6
+ import { SkillsInvokeService } from '../../core/sdd/services/skills-invoke.service.js';
7
+ import { ensureMandatorySddMigration, parseCsvOption, resolveRoot } from './shared.js';
8
+ export function registerSkillsCommands(sddCmd) {
9
+ const skillsCmd = sddCmd
10
+ .command('skills')
11
+ .description('Operacoes de curadoria e sugestao de skills');
12
+ skillsCmd.alias('habilidades');
13
+ skillsCmd
14
+ .command('bundles [path]')
15
+ .description('Lista os bundles disponiveis no catalogo de skills')
16
+ .alias('pacotes')
17
+ .option('--json', 'Retorna resultado em JSON')
18
+ .action(async (targetPath = '.', options) => {
19
+ const root = resolveRoot(targetPath);
20
+ const __config = await loadProjectSddConfig(root);
21
+ const __paths = resolveSddPaths(root, __config);
22
+ const stores = createSddStores(__paths);
23
+ void stores;
24
+ await ensureMandatorySddMigration(root);
25
+ const config = await loadProjectSddConfig(root);
26
+ const paths = resolveSddPaths(root, config);
27
+ const catalog = await loadSkillCatalogState(paths);
28
+ const bundles = listBundles(catalog);
29
+ if (options?.json) {
30
+ console.log(JSON.stringify(bundles, null, 2));
31
+ return;
32
+ }
33
+ console.log(`Bundles disponiveis: ${bundles.length}`);
34
+ for (const bundle of bundles) {
35
+ console.log(`- ${bundle.id} (${bundle.skill_ids.length} skills)`);
36
+ }
37
+ });
38
+ skillsCmd
39
+ .command('sync [path]')
40
+ .description('Sincroniza skills curadas do catalogo para ferramentas configuradas')
41
+ .alias('sincronizar')
42
+ .option('--bundle <id>', 'Filtra por bundle especifico (pode repetir via CSV com virgula)')
43
+ .option('--all', 'Sincroniza todas as skills do catalogo')
44
+ .option('--tools <list>', 'Ferramentas alvo separadas por virgula (ex: codex,cursor,claude)')
45
+ .action(async (targetPath = '.', options) => {
46
+ const root = resolveRoot(targetPath);
47
+ const __config = await loadProjectSddConfig(root);
48
+ const __paths = resolveSddPaths(root, __config);
49
+ const stores = createSddStores(__paths);
50
+ await ensureMandatorySddMigration(root);
51
+ const command = new SkillsSyncService(stores);
52
+ const bundles = parseCsvOption(options?.bundle);
53
+ const tools = parseCsvOption(options?.tools);
54
+ const result = await command.execute(root, {
55
+ bundles,
56
+ all: options?.all,
57
+ tools,
58
+ });
59
+ const config = await loadProjectSddConfig(root);
60
+ const paths = resolveSddPaths(root, config);
61
+ const localSkillsPath = `${paths.memoryRoot.replace(/\\/g, '/')}/${config.folders.skills}/${paths.skillsCuratedFolderName}`;
62
+ console.log(chalk.green(`Skills sincronizadas: ${result.synced}`));
63
+ console.log(`Skills locais (${localSkillsPath}): ${result.local_synced}`);
64
+ console.log(`Ferramentas atualizadas: ${result.tools.length > 0 ? result.tools.join(', ') : 'nenhuma'}`);
65
+ });
66
+ skillsCmd
67
+ .command('suggest [path]')
68
+ .description('Sugere skills por contexto (fase, dominio e bundle)')
69
+ .alias('sugerir')
70
+ .option('--phase <phase>', 'Fase da tarefa: discover|plan|execute|verify|finalize')
71
+ .option('--domains <list>', 'Dominios separados por virgula (ex: backend,security,api)')
72
+ .option('--bundles <list>', 'Bundles separados por virgula')
73
+ .option('--max <n>', 'Quantidade maxima de sugestoes (padrao: 5)')
74
+ .option('--json', 'Retorna resultado em JSON')
75
+ .action(async (targetPath = '.', options) => {
76
+ const root = resolveRoot(targetPath);
77
+ const __config = await loadProjectSddConfig(root);
78
+ const __paths = resolveSddPaths(root, __config);
79
+ const stores = createSddStores(__paths);
80
+ void stores;
81
+ await ensureMandatorySddMigration(root);
82
+ const config = await loadProjectSddConfig(root);
83
+ const paths = resolveSddPaths(root, config);
84
+ const catalog = await loadSkillCatalogState(paths);
85
+ const ranked = suggestSkills(catalog, {
86
+ phase: options?.phase,
87
+ domains: parseCsvOption(options?.domains),
88
+ bundles: parseCsvOption(options?.bundles),
89
+ max: options?.max ? Number(options.max) : undefined,
90
+ });
91
+ if (options?.json) {
92
+ console.log(JSON.stringify(ranked.map((entry) => ({
93
+ id: entry.skill.id,
94
+ title: entry.skill.title,
95
+ score: entry.score,
96
+ reasons: entry.reasons,
97
+ bundles: entry.skill.bundle_ids,
98
+ domains: entry.skill.domains,
99
+ phases: entry.skill.phases,
100
+ })), null, 2));
101
+ return;
102
+ }
103
+ if (ranked.length === 0) {
104
+ console.log('Nenhuma skill encontrada para os filtros informados.');
105
+ return;
106
+ }
107
+ console.log(`Sugestoes de skills (${ranked.length}):`);
108
+ for (const entry of ranked) {
109
+ const reasons = entry.reasons.length > 0 ? ` | criterios: ${entry.reasons.join('; ')}` : '';
110
+ console.log(`- ${entry.skill.id} (${entry.score})${reasons}`);
111
+ }
112
+ });
113
+ skillsCmd
114
+ .command('usar [path]')
115
+ .description('Monta um prompt pronto para invocar skills no agente')
116
+ .alias('invocar')
117
+ .option('--ids <list>', 'IDs de skills separados por virgula')
118
+ .option('--phase <phase>', 'Fase para sugestao: discover|plan|execute|verify|finalize')
119
+ .option('--domains <list>', 'Dominios separados por virgula')
120
+ .option('--bundles <list>', 'Bundles separados por virgula')
121
+ .option('--max <n>', 'Quantidade maxima quando usar sugestao (padrao: 5)')
122
+ .option('--objetivo <texto>', 'Objetivo em linguagem natural para o prompt')
123
+ .option('--ref <id>', 'Referencia de contexto (ex: FEAT-0001, EPIC-0001)')
124
+ .option('--json', 'Retorna payload em JSON')
125
+ .action(async (targetPath = '.', options) => {
126
+ const root = resolveRoot(targetPath);
127
+ const __config = await loadProjectSddConfig(root);
128
+ const __paths = resolveSddPaths(root, __config);
129
+ const stores = createSddStores(__paths);
130
+ await ensureMandatorySddMigration(root);
131
+ const command = new SkillsInvokeService(stores);
132
+ const result = await command.execute(root, {
133
+ ids: parseCsvOption(options?.ids),
134
+ phase: options?.phase,
135
+ domains: parseCsvOption(options?.domains),
136
+ bundles: parseCsvOption(options?.bundles),
137
+ max: options?.max ? Number(options.max) : undefined,
138
+ objective: options?.objetivo,
139
+ ref: options?.ref,
140
+ });
141
+ if (options?.json) {
142
+ console.log(JSON.stringify(result, null, 2));
143
+ return;
144
+ }
145
+ console.log(chalk.green(`Skills selecionadas: ${result.selected_skills.length}`));
146
+ for (const skill of result.selected_skills) {
147
+ console.log(`- ${skill.id} (${skill.title})`);
148
+ console.log(` path: ${skill.path}`);
149
+ }
150
+ console.log('\nPrompt pronto para usar no agente:\n');
151
+ console.log(result.prompt);
152
+ });
153
+ }
154
+ //# sourceMappingURL=skills.js.map