@devtrack-solution/codesdd 1.2.2 → 1.2.4-rc3

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 (413) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +170 -31
  3. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
  8. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
  9. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
  10. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
  11. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  12. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  13. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +372 -0
  14. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
  15. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  16. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +294 -0
  17. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +5 -5
  18. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  19. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
  20. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  21. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
  22. package/LICENSE +1 -1
  23. package/README.md +399 -53
  24. package/bin/codesdd.js +3 -2
  25. package/dist/applications/sdd/index.d.ts +16 -0
  26. package/dist/applications/sdd/index.js +16 -0
  27. package/dist/cli/index.d.ts +2 -2
  28. package/dist/cli/index.js +11 -558
  29. package/dist/cli/program.d.ts +14 -0
  30. package/dist/cli/program.js +645 -0
  31. package/dist/commands/change.js +5 -5
  32. package/dist/commands/completion.d.ts +1 -1
  33. package/dist/commands/completion.js +9 -2
  34. package/dist/commands/config.js +320 -20
  35. package/dist/commands/feedback.js +1 -1
  36. package/dist/commands/schema.d.ts +63 -0
  37. package/dist/commands/schema.js +12 -12
  38. package/dist/commands/sdd/backlog.d.ts +3 -0
  39. package/dist/commands/sdd/backlog.js +54 -0
  40. package/dist/commands/sdd/execution.js +489 -28
  41. package/dist/commands/sdd/plugin.d.ts +3 -0
  42. package/dist/commands/sdd/plugin.js +158 -0
  43. package/dist/commands/sdd/shared.d.ts +1 -0
  44. package/dist/commands/sdd/shared.js +11 -22
  45. package/dist/commands/sdd/skills.js +7 -0
  46. package/dist/commands/sdd.js +107 -15
  47. package/dist/commands/spec.js +9 -9
  48. package/dist/commands/validate.js +6 -6
  49. package/dist/commands/workflow/instructions.js +6 -6
  50. package/dist/commands/workflow/new-change.js +3 -3
  51. package/dist/commands/workflow/shared.d.ts +1 -1
  52. package/dist/commands/workflow/shared.js +4 -4
  53. package/dist/core/archive.js +15 -5
  54. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  55. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  56. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  57. package/dist/core/artifact-graph/resolver.js +6 -6
  58. package/dist/core/branding.js +3 -3
  59. package/dist/core/cli/command-matrix.js +19 -1
  60. package/dist/core/cli-command-quality.d.ts +27 -0
  61. package/dist/core/cli-command-quality.js +180 -0
  62. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  63. package/dist/core/command-generation/adapters/costrict.js +2 -2
  64. package/dist/core/command-generation/types.d.ts +1 -1
  65. package/dist/core/completions/command-registry.d.ts +1 -1
  66. package/dist/core/completions/command-registry.js +200 -12
  67. package/dist/core/completions/completion-provider.d.ts +14 -1
  68. package/dist/core/completions/completion-provider.js +29 -1
  69. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  70. package/dist/core/completions/generators/bash-generator.js +20 -12
  71. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  72. package/dist/core/completions/generators/fish-generator.js +39 -25
  73. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  74. package/dist/core/completions/generators/powershell-generator.js +21 -11
  75. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  76. package/dist/core/completions/generators/zsh-generator.js +21 -42
  77. package/dist/core/completions/installers/bash-installer.js +6 -6
  78. package/dist/core/completions/installers/fish-installer.js +1 -1
  79. package/dist/core/completions/installers/powershell-installer.js +14 -14
  80. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  81. package/dist/core/completions/installers/zsh-installer.js +36 -8
  82. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  83. package/dist/core/completions/templates/bash-templates.js +12 -6
  84. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  85. package/dist/core/completions/templates/fish-templates.js +20 -9
  86. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  87. package/dist/core/completions/templates/powershell-templates.js +13 -4
  88. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  89. package/dist/core/completions/templates/zsh-templates.js +18 -9
  90. package/dist/core/config-schema.d.ts +20 -1
  91. package/dist/core/config-schema.js +70 -2
  92. package/dist/core/config.d.ts +3 -3
  93. package/dist/core/config.js +4 -4
  94. package/dist/core/global-config.d.ts +57 -12
  95. package/dist/core/global-config.js +344 -27
  96. package/dist/core/index.d.ts +1 -1
  97. package/dist/core/index.js +2 -2
  98. package/dist/core/init.d.ts +6 -1
  99. package/dist/core/init.js +99 -77
  100. package/dist/core/legacy-cleanup.d.ts +17 -17
  101. package/dist/core/legacy-cleanup.js +96 -79
  102. package/dist/core/list.js +18 -4
  103. package/dist/core/migration.d.ts +3 -1
  104. package/dist/core/migration.js +7 -8
  105. package/dist/core/parsers/change-parser.js +1 -1
  106. package/dist/core/parsers/markdown-parser.js +2 -2
  107. package/dist/core/profile-sync-drift.d.ts +1 -1
  108. package/dist/core/profile-sync-drift.js +13 -13
  109. package/dist/core/project-config.d.ts +4 -4
  110. package/dist/core/project-config.js +11 -11
  111. package/dist/core/schemas/change.schema.d.ts +1 -1
  112. package/dist/core/schemas/change.schema.js +1 -1
  113. package/dist/core/schemas/spec.schema.d.ts +1 -1
  114. package/dist/core/schemas/spec.schema.js +1 -1
  115. package/dist/core/sdd/adr.js +23 -1
  116. package/dist/core/sdd/agent-binding.d.ts +346 -0
  117. package/dist/core/sdd/agent-binding.js +343 -0
  118. package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
  119. package/dist/core/sdd/agent-runtime-contract.js +200 -0
  120. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  121. package/dist/core/sdd/backlog-cli.js +146 -0
  122. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  123. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  124. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  125. package/dist/core/sdd/backlog-projection.js +89 -0
  126. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  127. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  128. package/dist/core/sdd/bootstrap.js +2 -2
  129. package/dist/core/sdd/check.d.ts +44 -0
  130. package/dist/core/sdd/check.js +62 -24
  131. package/dist/core/sdd/contract.d.ts +13 -0
  132. package/dist/core/sdd/contract.js +36 -0
  133. package/dist/core/sdd/coordination/coordination-adapters.d.ts +53 -8
  134. package/dist/core/sdd/coordination/coordination-adapters.js +182 -16
  135. package/dist/core/sdd/coordination/index.d.ts +1 -0
  136. package/dist/core/sdd/coordination/index.js +1 -0
  137. package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
  138. package/dist/core/sdd/coordination/redis-runtime.js +698 -0
  139. package/dist/core/sdd/deepagent-contracts.d.ts +370 -0
  140. package/dist/core/sdd/deepagent-contracts.js +235 -0
  141. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  142. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  143. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  144. package/dist/core/sdd/deepagents/backend.js +174 -0
  145. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  146. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  147. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  148. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  149. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  150. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  151. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  152. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  153. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  154. package/dist/core/sdd/deepagents/policy.js +358 -0
  155. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  156. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  157. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  158. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  159. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  160. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  161. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  162. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  163. package/dist/core/sdd/default-bootstrap-files.d.ts +3 -3
  164. package/dist/core/sdd/default-bootstrap-files.js +50 -10
  165. package/dist/core/sdd/default-skills.d.ts +30 -0
  166. package/dist/core/sdd/default-skills.js +288 -8
  167. package/dist/core/sdd/devtrack-api-appliance.d.ts +91 -0
  168. package/dist/core/sdd/devtrack-api-appliance.js +280 -0
  169. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  170. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  171. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  172. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  173. package/dist/core/sdd/diagnose.d.ts +59 -0
  174. package/dist/core/sdd/diagnose.js +37 -37
  175. package/dist/core/sdd/docs-sync.js +54 -20
  176. package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
  177. package/dist/core/sdd/domain/capability-diff.js +200 -0
  178. package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
  179. package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
  180. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  181. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  182. package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
  183. package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
  184. package/dist/core/sdd/domain/transition-engine.js +1 -0
  185. package/dist/core/sdd/entity-reference.d.ts +5 -0
  186. package/dist/core/sdd/entity-reference.js +22 -0
  187. package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
  188. package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
  189. package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
  190. package/dist/core/sdd/foundation-layer-manifest.js +117 -0
  191. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  192. package/dist/core/sdd/governance-backfill.js +359 -0
  193. package/dist/core/sdd/governance-parser.d.ts +21 -0
  194. package/dist/core/sdd/governance-parser.js +91 -0
  195. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  196. package/dist/core/sdd/governance-schemas.js +143 -0
  197. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  198. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  199. package/dist/core/sdd/init.d.ts +3 -0
  200. package/dist/core/sdd/init.js +6 -3
  201. package/dist/core/sdd/intent-guard.d.ts +22 -0
  202. package/dist/core/sdd/intent-guard.js +67 -0
  203. package/dist/core/sdd/json-schema.js +108 -6
  204. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  205. package/dist/core/sdd/knowledge-graph.js +288 -0
  206. package/dist/core/sdd/legacy-operations.js +507 -44
  207. package/dist/core/sdd/lenses.d.ts +1 -0
  208. package/dist/core/sdd/lenses.js +29 -1
  209. package/dist/core/sdd/migrate-workspace.js +95 -2
  210. package/dist/core/sdd/migrate.d.ts +1 -1
  211. package/dist/core/sdd/migrate.js +36 -2
  212. package/dist/core/sdd/package-security-gates.d.ts +21 -0
  213. package/dist/core/sdd/package-security-gates.js +119 -0
  214. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  215. package/dist/core/sdd/package-structure-gate.js +357 -0
  216. package/dist/core/sdd/parallel-feat-automation.d.ts +330 -0
  217. package/dist/core/sdd/parallel-feat-automation.js +424 -0
  218. package/dist/core/sdd/plugin-broker.d.ts +777 -0
  219. package/dist/core/sdd/plugin-broker.js +492 -0
  220. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  221. package/dist/core/sdd/plugin-certification.js +453 -0
  222. package/dist/core/sdd/plugin-cli.d.ts +139 -0
  223. package/dist/core/sdd/plugin-cli.js +265 -0
  224. package/dist/core/sdd/plugin-evidence.d.ts +348 -0
  225. package/dist/core/sdd/plugin-evidence.js +307 -0
  226. package/dist/core/sdd/plugin-manifest.d.ts +232 -0
  227. package/dist/core/sdd/plugin-manifest.js +225 -0
  228. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  229. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  230. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  231. package/dist/core/sdd/plugin-policy.js +212 -0
  232. package/dist/core/sdd/plugin-registry.d.ts +447 -0
  233. package/dist/core/sdd/plugin-registry.js +138 -0
  234. package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
  235. package/dist/core/sdd/plugin-sdk-contract.js +268 -0
  236. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  237. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  238. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  239. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  240. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  241. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  242. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  243. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  244. package/dist/core/sdd/quality-validation.d.ts +620 -0
  245. package/dist/core/sdd/quality-validation.js +239 -0
  246. package/dist/core/sdd/release-readiness.d.ts +19 -0
  247. package/dist/core/sdd/release-readiness.js +472 -0
  248. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  249. package/dist/core/sdd/resolve-project-root.js +11 -5
  250. package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
  251. package/dist/core/sdd/runtime-boundary-contract.js +90 -0
  252. package/dist/core/sdd/sanitize.d.ts +30 -1
  253. package/dist/core/sdd/sanitize.js +23 -23
  254. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
  255. package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
  256. package/dist/core/sdd/services/agent-run.service.d.ts +97 -0
  257. package/dist/core/sdd/services/agent-run.service.js +261 -0
  258. package/dist/core/sdd/services/breakdown.service.js +2 -1
  259. package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
  260. package/dist/core/sdd/services/capability-diff.service.js +26 -0
  261. package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
  262. package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
  263. package/dist/core/sdd/services/context.service.d.ts +43 -340
  264. package/dist/core/sdd/services/context.service.js +341 -25
  265. package/dist/core/sdd/services/debate.service.js +15 -2
  266. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  267. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  268. package/dist/core/sdd/services/finalize.service.d.ts +105 -0
  269. package/dist/core/sdd/services/finalize.service.js +499 -38
  270. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  271. package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
  272. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  273. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  274. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  275. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  276. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  277. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  278. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  279. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  280. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  281. package/dist/core/sdd/services/onboard.service.js +2 -1
  282. package/dist/core/sdd/services/rebuild.service.js +6 -1
  283. package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
  284. package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
  285. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  286. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  287. package/dist/core/sdd/services/start.service.js +6 -4
  288. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  289. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  290. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  291. package/dist/core/sdd/skill-evidence.js +38 -0
  292. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  293. package/dist/core/sdd/skill-policy-pool.js +185 -0
  294. package/dist/core/sdd/state.d.ts +23 -0
  295. package/dist/core/sdd/state.js +313 -66
  296. package/dist/core/sdd/store/sdd-stores.js +2 -2
  297. package/dist/core/sdd/structural-health.d.ts +55 -55
  298. package/dist/core/sdd/types.d.ts +60 -19
  299. package/dist/core/sdd/types.js +21 -0
  300. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  301. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  302. package/dist/core/sdd/views.js +17 -0
  303. package/dist/core/sdd/workspace-schemas.d.ts +670 -19
  304. package/dist/core/sdd/workspace-schemas.js +285 -5
  305. package/dist/core/sdd/write-manifest.js +22 -4
  306. package/dist/core/shared/skill-generation.d.ts +1 -1
  307. package/dist/core/shared/skill-generation.js +15 -15
  308. package/dist/core/shared/tool-detection.d.ts +3 -3
  309. package/dist/core/shared/tool-detection.js +14 -14
  310. package/dist/core/specs-apply.js +6 -6
  311. package/dist/core/templates/index.d.ts +1 -1
  312. package/dist/core/templates/index.js +1 -1
  313. package/dist/core/templates/workflows/apply-change.js +14 -14
  314. package/dist/core/templates/workflows/archive-change.js +32 -32
  315. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  316. package/dist/core/templates/workflows/continue-change.js +12 -12
  317. package/dist/core/templates/workflows/explore.js +29 -29
  318. package/dist/core/templates/workflows/feedback.js +6 -6
  319. package/dist/core/templates/workflows/ff-change.js +24 -24
  320. package/dist/core/templates/workflows/new-change.js +20 -20
  321. package/dist/core/templates/workflows/onboard.js +33 -33
  322. package/dist/core/templates/workflows/propose.js +23 -23
  323. package/dist/core/templates/workflows/sdd.js +8 -8
  324. package/dist/core/templates/workflows/sync-specs.js +19 -19
  325. package/dist/core/templates/workflows/verify-change.js +17 -17
  326. package/dist/core/update.d.ts +2 -2
  327. package/dist/core/update.js +16 -15
  328. package/dist/core/validation/constants.d.ts +1 -1
  329. package/dist/core/validation/constants.js +1 -1
  330. package/dist/core/view.js +11 -11
  331. package/dist/domains/sdd/index.d.ts +6 -0
  332. package/dist/domains/sdd/index.js +6 -0
  333. package/dist/infrastructures/sdd/index.d.ts +7 -0
  334. package/dist/infrastructures/sdd/index.js +6 -0
  335. package/dist/presentations/cli/sdd/index.d.ts +3 -0
  336. package/dist/presentations/cli/sdd/index.js +3 -0
  337. package/dist/shared/sdd/index.d.ts +3 -0
  338. package/dist/shared/sdd/index.js +2 -0
  339. package/dist/telemetry/config.d.ts +2 -1
  340. package/dist/telemetry/config.js +17 -8
  341. package/dist/telemetry/index.d.ts +10 -2
  342. package/dist/telemetry/index.js +40 -7
  343. package/dist/ui/ascii-patterns.d.ts +2 -2
  344. package/dist/ui/ascii-patterns.js +2 -2
  345. package/dist/ui/welcome-screen.js +2 -2
  346. package/dist/utils/change-metadata.d.ts +4 -4
  347. package/dist/utils/change-metadata.js +6 -6
  348. package/dist/utils/change-utils.d.ts +3 -3
  349. package/dist/utils/change-utils.js +5 -5
  350. package/dist/utils/file-system.js +1 -1
  351. package/dist/utils/interactive.js +1 -1
  352. package/dist/utils/item-discovery.js +4 -4
  353. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  354. package/dist/utils/legacy-spec-compat.js +2 -0
  355. package/dist/utils/shell-detection.d.ts +1 -0
  356. package/dist/utils/shell-detection.js +16 -0
  357. package/package.json +34 -21
  358. package/schemas/sdd/1-spec.schema.json +1 -1
  359. package/schemas/sdd/2-plan.schema.json +280 -3
  360. package/schemas/sdd/3-tasks.schema.json +73 -1
  361. package/schemas/sdd/4-changelog.schema.json +1 -1
  362. package/schemas/sdd/5-quality.schema.json +701 -5
  363. package/schemas/sdd/adr.schema.json +148 -0
  364. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  365. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  366. package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
  367. package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
  368. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  369. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  370. package/schemas/sdd/codesdd-plugin.schema.json +645 -0
  371. package/schemas/sdd/debate.schema.json +244 -0
  372. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  373. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  374. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  375. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  376. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  377. package/schemas/sdd/deepagent-run-request.schema.json +637 -0
  378. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  379. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  380. package/schemas/sdd/discarded.schema.json +127 -0
  381. package/schemas/sdd/epic.schema.json +147 -0
  382. package/schemas/sdd/insight.schema.json +136 -0
  383. package/schemas/sdd/parallel-feat-automation-plan.schema.json +304 -0
  384. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  385. package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
  386. package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
  387. package/schemas/sdd/plugin-artifact-manifest.schema.json +259 -0
  388. package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
  389. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  390. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  391. package/schemas/sdd/plugin-evidence-manifest.schema.json +678 -0
  392. package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
  393. package/schemas/sdd/plugin-package-governance.schema.json +74 -0
  394. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  395. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  396. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  397. package/schemas/sdd/plugin-registry.schema.json +729 -0
  398. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  399. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +954 -0
  400. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  401. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  402. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  403. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  404. package/schemas/sdd/quality-evidence-bundle.schema.json +1337 -0
  405. package/schemas/sdd/quality-run.schema.json +197 -0
  406. package/schemas/sdd/quality-scenario.schema.json +252 -0
  407. package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
  408. package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
  409. package/schemas/sdd/workspace-catalog.schema.json +13232 -35
  410. package/schemas/spec-driven/schema.yaml +4 -4
  411. package/schemas/spec-driven/templates/proposal.md +1 -1
  412. package/dist/utils/openspec-compat.d.ts +0 -2
  413. package/dist/utils/openspec-compat.js +0 -2
@@ -13,7 +13,7 @@ interface CompleteOptions {
13
13
  type: string;
14
14
  }
15
15
  /**
16
- * Command for managing shell completions for OpenSpec CLI
16
+ * Command for managing shell completions for CodeSDD CLI
17
17
  */
18
18
  export declare class CompletionCommand {
19
19
  private completionProvider;
@@ -6,7 +6,7 @@ import { CompletionProvider } from '../core/completions/completion-provider.js';
6
6
  import { getArchivedChangeIds } from '../utils/item-discovery.js';
7
7
  import { CLI_NAME } from '../core/branding.js';
8
8
  /**
9
- * Command for managing shell completions for OpenSpec CLI
9
+ * Command for managing shell completions for CodeSDD CLI
10
10
  */
11
11
  export class CompletionCommand {
12
12
  completionProvider;
@@ -180,7 +180,7 @@ export class CompletionCommand {
180
180
  };
181
181
  const configPath = configPaths[shell] || `${shell} configuration`;
182
182
  const confirmed = await confirm({
183
- message: `Remove OpenSpec configuration from ${configPath}?`,
183
+ message: `Remove CodeSDD configuration from ${configPath}?`,
184
184
  default: false,
185
185
  });
186
186
  if (!confirmed) {
@@ -237,6 +237,13 @@ export class CompletionCommand {
237
237
  }
238
238
  break;
239
239
  }
240
+ case 'schemas': {
241
+ const schemaNames = await this.completionProvider.getSchemaNames();
242
+ for (const name of schemaNames) {
243
+ console.log(`${name}\tworkflow schema`);
244
+ }
245
+ break;
246
+ }
240
247
  default:
241
248
  // Invalid type - silently exit with no output for graceful shell completion failure
242
249
  process.exitCode = 1;
@@ -1,12 +1,18 @@
1
1
  import { spawn, execSync } from 'node:child_process';
2
2
  import * as fs from 'node:fs';
3
+ import * as os from 'node:os';
3
4
  import * as path from 'node:path';
4
- import { getGlobalConfigPath, getGlobalConfig, saveGlobalConfig, } from '../core/global-config.js';
5
- import { getNestedValue, setNestedValue, deleteNestedValue, coerceValue, formatValueYaml, validateConfigKeyPath, validateConfig, DEFAULT_CONFIG, } from '../core/config-schema.js';
5
+ import { getGlobalConfigPath, getGlobalConfig, getGlobalCacheDir, getGlobalCacheTierDirs, ensureGlobalCacheLayout, readGlobalConfigRaw, parseTomlContent, saveGlobalConfig, } from '../core/global-config.js';
6
+ import { getNestedValue, setNestedValue, deleteNestedValue, coerceValue, formatValueYaml, validateConfigKeyPath, validateConfig, isSensitiveConfigPath, redactConfigSecrets, DEFAULT_CONFIG, } from '../core/config-schema.js';
6
7
  import { CORE_WORKFLOWS, ALL_WORKFLOWS, getProfileWorkflows } from '../core/profiles.js';
7
- import { OPENSPEC_DIR_NAME } from '../core/config.js';
8
8
  import { hasProjectConfigDrift } from '../core/profile-sync-drift.js';
9
9
  import { CLI_NAME } from '../core/branding.js';
10
+ import { resolveLegacySpecLiveRoot } from '../core/sdd/services/legacy-capability.service.js';
11
+ import { buildRedisOperationalReport, deleteKeysByPrefix, RedisClientFactory, resolveRedisBoundaryConfig, runRedisBenchmark, } from '../core/sdd/coordination/index.js';
12
+ import { buildCodesddStorageBoundaryReport } from '../core/sdd/runtime-boundary-contract.js';
13
+ import { buildDeepAgentsOperationalPreflight, createDeepAgentsPolicySnapshot, } from '../core/sdd/deepagents/policy.js';
14
+ import { detectShell } from '../utils/shell-detection.js';
15
+ import { ZshInstaller } from '../core/completions/installers/zsh-installer.js';
10
16
  const WORKFLOW_PROMPT_META = {
11
17
  propose: {
12
18
  name: 'Propose change',
@@ -50,9 +56,37 @@ const WORKFLOW_PROMPT_META = {
50
56
  },
51
57
  onboard: {
52
58
  name: 'Onboard',
53
- description: 'Guided onboarding flow for OpenSpec',
59
+ description: 'Guided onboarding flow for CodeSDD',
54
60
  },
55
61
  };
62
+ function resolveHomeDir() {
63
+ return process.env.HOME || process.env.USERPROFILE || os.homedir();
64
+ }
65
+ function buildCodesddEnvTemplate() {
66
+ return [
67
+ '#!/usr/bin/env zsh',
68
+ '# CodeSDD global runtime profile (non-secret settings only).',
69
+ 'export CODESDD_AGENT_PROVIDER="${CODESDD_AGENT_PROVIDER:-deepagents}"',
70
+ 'export CODESDD_DEEPAGENTS_ENABLED="${CODESDD_DEEPAGENTS_ENABLED:-false}"',
71
+ 'export CODESDD_DEEPAGENTS_RUNTIME="${CODESDD_DEEPAGENTS_RUNTIME:-disabled}"',
72
+ 'export CODESDD_AGENT_NETWORK_POLICY="${CODESDD_AGENT_NETWORK_POLICY:-disabled}"',
73
+ 'export CODESDD_DEEPAGENTS_PROVIDER_SMOKE="${CODESDD_DEEPAGENTS_PROVIDER_SMOKE:-0}"',
74
+ 'export CODESDD_REDIS_ENABLED="${CODESDD_REDIS_ENABLED:-false}"',
75
+ 'export CODESDD_REDIS_NAMESPACE="${CODESDD_REDIS_NAMESPACE:-codesdd}"',
76
+ '# export CODESDD_REDIS_URL="redis://localhost:6379"',
77
+ '# export CODESDD_REDIS_FALLBACK="filesystem"',
78
+ '# Optional live-provider launcher references. Keep values in your shell,',
79
+ '# password manager, CI secret store, or another untracked launcher context.',
80
+ '# export CODESDD_DEEPAGENTS_ENABLED=true',
81
+ '# export CODESDD_DEEPAGENTS_RUNTIME=deepagents-js',
82
+ '# export CODESDD_AGENT_NETWORK_POLICY=restricted',
83
+ '# export CODESDD_DEEPAGENTS_MODEL="azure-openai:gpt-4o-mini"',
84
+ '# export CODESDD_AGENT_ALLOWED_DOMAINS="api.openai.com"',
85
+ '# export AZURE_OPENAI_ENDPOINT="https://example-resource.openai.azure.com/"',
86
+ '# export AZURE_OPENAI_API_KEY="<secret-from-manager>"',
87
+ '',
88
+ ].join('\n');
89
+ }
56
90
  function isPromptCancellationError(error) {
57
91
  return (error instanceof Error &&
58
92
  (error.name === 'ExitPromptError' || error.message.includes('force closed the prompt with SIGINT')));
@@ -134,8 +168,8 @@ export function diffProfileState(before, after) {
134
168
  };
135
169
  }
136
170
  function maybeWarnConfigDrift(projectDir, state, colorize) {
137
- const openspecDir = path.join(projectDir, OPENSPEC_DIR_NAME);
138
- if (!fs.existsSync(openspecDir)) {
171
+ const codesddDir = resolveLegacySpecLiveRoot(projectDir);
172
+ if (!fs.existsSync(codesddDir)) {
139
173
  return;
140
174
  }
141
175
  if (!hasProjectConfigDrift(projectDir, state.workflows, state.delivery)) {
@@ -151,7 +185,7 @@ function maybeWarnConfigDrift(projectDir, state, colorize) {
151
185
  export function registerConfigCommand(program) {
152
186
  const configCmd = program
153
187
  .command('config')
154
- .description('View and modify global OpenSpec configuration')
188
+ .description('View and modify global CodeSDD configuration')
155
189
  .option('--scope <scope>', 'Config scope (only "global" supported currently)')
156
190
  .hook('preAction', (thisCommand) => {
157
191
  const opts = thisCommand.opts();
@@ -167,6 +201,249 @@ export function registerConfigCommand(program) {
167
201
  .action(() => {
168
202
  console.log(getGlobalConfigPath());
169
203
  });
204
+ // config init
205
+ configCmd
206
+ .command('init')
207
+ .description('Initialize ~/.codesdd runtime files and idempotent shell integration')
208
+ .option('--json', 'Output as JSON')
209
+ .action(async (options) => {
210
+ const homeDir = resolveHomeDir();
211
+ const configPath = getGlobalConfigPath();
212
+ const envPath = path.join(homeDir, '.codesdd', 'env.zsh');
213
+ if (!fs.existsSync(configPath)) {
214
+ saveGlobalConfig(getGlobalConfig());
215
+ }
216
+ const tierPaths = ensureGlobalCacheLayout();
217
+ const envTemplate = buildCodesddEnvTemplate();
218
+ if (!fs.existsSync(path.dirname(envPath))) {
219
+ fs.mkdirSync(path.dirname(envPath), { recursive: true });
220
+ }
221
+ fs.writeFileSync(envPath, envTemplate, { encoding: 'utf-8', mode: 0o600 });
222
+ try {
223
+ fs.chmodSync(envPath, 0o600);
224
+ }
225
+ catch {
226
+ // best effort on non-POSIX filesystems
227
+ }
228
+ const detectedShell = detectShell().shell;
229
+ let zshrcConfigured = false;
230
+ if (detectedShell === 'zsh' || process.env.SHELL?.toLowerCase().includes('zsh')) {
231
+ const installer = new ZshInstaller(homeDir);
232
+ zshrcConfigured = await installer.ensureCodesddEnvSource(envPath);
233
+ }
234
+ const payload = {
235
+ schema_version: 1,
236
+ config_path: configPath,
237
+ env_path: envPath,
238
+ cache_root: getGlobalCacheDir(),
239
+ cache_tiers: Object.keys(tierPaths),
240
+ shell_detected: detectedShell ?? 'unknown',
241
+ zshrc_configured: zshrcConfigured,
242
+ };
243
+ if (options.json) {
244
+ console.log(JSON.stringify(payload, null, 2));
245
+ return;
246
+ }
247
+ console.log(`Config file: ${configPath}`);
248
+ console.log(`Shell profile: ${envPath}`);
249
+ console.log(`Cache root: ${payload.cache_root}`);
250
+ console.log(`Cache tiers: ${payload.cache_tiers.join(', ')}`);
251
+ if (detectedShell === 'zsh') {
252
+ console.log('Zsh source block ensured for ~/.codesdd/env.zsh.');
253
+ }
254
+ else {
255
+ console.log('Shell source block was not changed automatically (non-zsh or undetected shell).');
256
+ }
257
+ });
258
+ // config doctor
259
+ configCmd
260
+ .command('doctor')
261
+ .description('Run operational readiness checks for DeepAgents/Azure, cache, and Redis boundary')
262
+ .option('--json', 'Output as JSON')
263
+ .action(async (options) => {
264
+ const snapshot = createDeepAgentsPolicySnapshot(process.env);
265
+ const preflight = buildDeepAgentsOperationalPreflight(snapshot, process.env);
266
+ const redisReport = await buildRedisOperationalReport({
267
+ env: process.env,
268
+ globalConfig: getGlobalConfig(),
269
+ });
270
+ const cacheTiers = getGlobalCacheTierDirs();
271
+ const storageBoundary = buildCodesddStorageBoundaryReport(process.cwd());
272
+ const report = {
273
+ schema_version: 1,
274
+ global_config_path: getGlobalConfigPath(),
275
+ cache: {
276
+ root: getGlobalCacheDir(),
277
+ tiers: Object.keys(cacheTiers),
278
+ },
279
+ storage_boundary: storageBoundary,
280
+ redis: {
281
+ requested: redisReport.requested,
282
+ namespace: redisReport.namespace,
283
+ status: redisReport.status,
284
+ fallback: redisReport.fallback,
285
+ redacted_url: redisReport.redacted_url,
286
+ latency_ms: redisReport.latency_ms,
287
+ reason: redisReport.reason,
288
+ validation_errors: redisReport.validation_errors,
289
+ warnings: redisReport.warnings,
290
+ },
291
+ deepagents: preflight,
292
+ };
293
+ if (options.json) {
294
+ console.log(JSON.stringify(report, null, 2));
295
+ }
296
+ else {
297
+ console.log(`Global config: ${report.global_config_path}`);
298
+ console.log(`Cache root: ${report.cache.root}`);
299
+ console.log(`Cache tiers: ${report.cache.tiers.join(', ')}`);
300
+ console.log(`Project state: ${report.storage_boundary.project_state_dir}`);
301
+ console.log(`Global runtime: ${report.storage_boundary.global_runtime_dir}`);
302
+ console.log(`Redis: ${report.redis.status} (namespace=${report.redis.namespace}, fallback=${report.redis.fallback})`);
303
+ if (report.redis.redacted_url) {
304
+ console.log(`Redis URL: ${report.redis.redacted_url}`);
305
+ }
306
+ if (report.redis.latency_ms !== undefined) {
307
+ console.log(`Redis latency: ${report.redis.latency_ms}ms`);
308
+ }
309
+ console.log(`Redis reason: ${report.redis.reason}`);
310
+ for (const warning of report.redis.warnings) {
311
+ console.log(`- ${warning}`);
312
+ }
313
+ for (const error of report.redis.validation_errors) {
314
+ console.log(`- ${error}`);
315
+ }
316
+ console.log(`DeepAgents preflight: ${preflight.status}`);
317
+ for (const reason of preflight.reasons) {
318
+ console.log(`- ${reason}`);
319
+ }
320
+ }
321
+ if (preflight.status === 'blocked' || redisReport.status === 'blocked') {
322
+ process.exitCode = 1;
323
+ }
324
+ });
325
+ const redisCmd = configCmd
326
+ .command('redis')
327
+ .description('Inspect and operate the optional Redis runtime backend');
328
+ redisCmd
329
+ .command('status')
330
+ .description('Show Redis runtime status')
331
+ .option('--json', 'Output as JSON')
332
+ .action(async (options) => {
333
+ const report = await buildRedisOperationalReport({
334
+ env: process.env,
335
+ globalConfig: getGlobalConfig(),
336
+ });
337
+ if (options.json) {
338
+ console.log(JSON.stringify(report, null, 2));
339
+ return;
340
+ }
341
+ console.log(`Redis: ${report.status}`);
342
+ console.log(`Namespace: ${report.namespace}`);
343
+ console.log(`Fallback: ${report.fallback}`);
344
+ if (report.redacted_url)
345
+ console.log(`URL: ${report.redacted_url}`);
346
+ if (report.latency_ms !== undefined)
347
+ console.log(`Latency: ${report.latency_ms}ms`);
348
+ console.log(`Reason: ${report.reason}`);
349
+ if (report.status === 'blocked')
350
+ process.exitCode = 1;
351
+ });
352
+ redisCmd
353
+ .command('ping')
354
+ .description('Ping Redis using the effective CodeSDD configuration')
355
+ .option('--json', 'Output as JSON')
356
+ .action(async (options) => {
357
+ const report = await buildRedisOperationalReport({
358
+ env: process.env,
359
+ globalConfig: getGlobalConfig(),
360
+ });
361
+ if (options.json) {
362
+ console.log(JSON.stringify(report, null, 2));
363
+ }
364
+ else {
365
+ console.log(`Redis ping: ${report.status}`);
366
+ if (report.latency_ms !== undefined)
367
+ console.log(`Latency: ${report.latency_ms}ms`);
368
+ console.log(report.reason);
369
+ }
370
+ if (report.status !== 'ready')
371
+ process.exitCode = 1;
372
+ });
373
+ redisCmd
374
+ .command('bench')
375
+ .description('Run a short redacted Redis latency benchmark')
376
+ .option('--json', 'Output as JSON')
377
+ .option('--iterations <n>', 'Number of benchmark iterations')
378
+ .action(async (options) => {
379
+ const iterations = options.iterations ? Number.parseInt(options.iterations, 10) : undefined;
380
+ const report = await runRedisBenchmark({
381
+ env: process.env,
382
+ globalConfig: getGlobalConfig(),
383
+ iterations,
384
+ });
385
+ if (options.json) {
386
+ console.log(JSON.stringify(report, null, 2));
387
+ }
388
+ else {
389
+ console.log(`Redis benchmark: ${report.status}`);
390
+ console.log(`Namespace: ${report.namespace}`);
391
+ console.log(`Iterations: ${report.iterations}`);
392
+ if (report.p50_ms !== undefined)
393
+ console.log(`p50: ${report.p50_ms}ms`);
394
+ if (report.p95_ms !== undefined)
395
+ console.log(`p95: ${report.p95_ms}ms`);
396
+ console.log(`Reason: ${report.reason}`);
397
+ }
398
+ if (report.status !== 'ready')
399
+ process.exitCode = 1;
400
+ });
401
+ redisCmd
402
+ .command('flush-namespace')
403
+ .description('Delete only keys under the effective CodeSDD Redis namespace')
404
+ .option('--json', 'Output as JSON')
405
+ .option('-y, --yes', 'Confirm namespace-scoped deletion')
406
+ .action(async (options) => {
407
+ const config = resolveRedisBoundaryConfig(process.env, getGlobalConfig());
408
+ if (!options.yes) {
409
+ console.error('Error: --yes is required to flush the CodeSDD Redis namespace.');
410
+ process.exitCode = 1;
411
+ return;
412
+ }
413
+ const report = await buildRedisOperationalReport({
414
+ env: process.env,
415
+ globalConfig: getGlobalConfig(),
416
+ });
417
+ if (report.status !== 'ready') {
418
+ if (options.json) {
419
+ console.log(JSON.stringify({ ...report, deleted_keys: 0 }, null, 2));
420
+ }
421
+ else {
422
+ console.log(`Redis namespace flush skipped: ${report.reason}`);
423
+ }
424
+ process.exitCode = 1;
425
+ return;
426
+ }
427
+ const factory = new RedisClientFactory(config);
428
+ try {
429
+ const deleted = await deleteKeysByPrefix(factory, `${config.namespace}:`);
430
+ const payload = {
431
+ schema_version: 1,
432
+ namespace: config.namespace,
433
+ deleted_keys: deleted,
434
+ status: 'ok',
435
+ };
436
+ if (options.json) {
437
+ console.log(JSON.stringify(payload, null, 2));
438
+ }
439
+ else {
440
+ console.log(`Deleted ${deleted} Redis key(s) under namespace ${config.namespace}.`);
441
+ }
442
+ }
443
+ finally {
444
+ await factory.close();
445
+ }
446
+ });
170
447
  // config list
171
448
  configCmd
172
449
  .command('list')
@@ -174,22 +451,20 @@ export function registerConfigCommand(program) {
174
451
  .option('--json', 'Output as JSON')
175
452
  .action((options) => {
176
453
  const config = getGlobalConfig();
454
+ const redactedConfig = redactConfigSecrets(config);
177
455
  if (options.json) {
178
- console.log(JSON.stringify(config, null, 2));
456
+ console.log(JSON.stringify(redactedConfig, null, 2));
179
457
  }
180
458
  else {
181
459
  // Read raw config to determine which values are explicit vs defaults
182
- const configPath = getGlobalConfigPath();
183
460
  let rawConfig = {};
184
461
  try {
185
- if (fs.existsSync(configPath)) {
186
- rawConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
187
- }
462
+ rawConfig = readGlobalConfigRaw();
188
463
  }
189
464
  catch {
190
465
  // If reading fails, treat all as defaults
191
466
  }
192
- console.log(formatValueYaml(config));
467
+ console.log(formatValueYaml(redactedConfig));
193
468
  // Annotate profile settings
194
469
  const profileSource = rawConfig.profile !== undefined ? '(explicit)' : '(default)';
195
470
  const deliverySource = rawConfig.delivery !== undefined ? '(explicit)' : '(default)';
@@ -205,6 +480,23 @@ export function registerConfigCommand(program) {
205
480
  else {
206
481
  console.log(` workflows: (none)`);
207
482
  }
483
+ const cacheTiers = getGlobalCacheTierDirs();
484
+ console.log(`\nCache settings:`);
485
+ console.log(` root: ${getGlobalCacheDir()}`);
486
+ console.log(` tiers: ${Object.keys(cacheTiers).join(', ')}`);
487
+ const redisBoundary = resolveRedisBoundaryConfig(process.env, config);
488
+ const redisStatus = redisBoundary.validationErrors.length > 0
489
+ ? 'blocked'
490
+ : redisBoundary.requested
491
+ ? 'requested-unavailable or ready after ping'
492
+ : 'disabled';
493
+ console.log(`\nRedis boundary:`);
494
+ console.log(` status: ${redisStatus}`);
495
+ console.log(` namespace: ${redisBoundary.namespace}`);
496
+ console.log(` fallback: ${redisBoundary.fallback}`);
497
+ if (redisBoundary.redactedUrl) {
498
+ console.log(` url: ${redisBoundary.redactedUrl}`);
499
+ }
208
500
  }
209
501
  });
210
502
  // config get
@@ -218,6 +510,10 @@ export function registerConfigCommand(program) {
218
510
  process.exitCode = 1;
219
511
  return;
220
512
  }
513
+ if (isSensitiveConfigPath(key)) {
514
+ console.log('[REDACTED]');
515
+ return;
516
+ }
221
517
  if (typeof value === 'object' && value !== null) {
222
518
  console.log(JSON.stringify(value));
223
519
  }
@@ -257,7 +553,11 @@ export function registerConfigCommand(program) {
257
553
  // Apply changes and save
258
554
  setNestedValue(config, key, coercedValue);
259
555
  saveGlobalConfig(config);
260
- const displayValue = typeof coercedValue === 'string' ? `"${coercedValue}"` : String(coercedValue);
556
+ const displayValue = isSensitiveConfigPath(key)
557
+ ? '[REDACTED]'
558
+ : typeof coercedValue === 'string'
559
+ ? `"${coercedValue}"`
560
+ : String(coercedValue);
261
561
  console.log(`Set ${key} = ${displayValue}`);
262
562
  });
263
563
  // config unset
@@ -351,7 +651,7 @@ export function registerConfigCommand(program) {
351
651
  });
352
652
  try {
353
653
  const rawConfig = fs.readFileSync(configPath, 'utf-8');
354
- const parsedConfig = JSON.parse(rawConfig);
654
+ const parsedConfig = parseTomlContent(rawConfig);
355
655
  const validation = validateConfig(parsedConfig);
356
656
  if (!validation.success) {
357
657
  console.error(`Error: Invalid configuration - ${validation.error}`);
@@ -363,7 +663,7 @@ export function registerConfigCommand(program) {
363
663
  console.error(`Error: Config file not found at ${configPath}`);
364
664
  }
365
665
  else if (error instanceof SyntaxError) {
366
- console.error(`Error: Invalid JSON in ${configPath}`);
666
+ console.error(`Error: Invalid TOML in ${configPath}`);
367
667
  console.error(error.message);
368
668
  }
369
669
  else {
@@ -377,7 +677,7 @@ export function registerConfigCommand(program) {
377
677
  .command('profile [preset]')
378
678
  .description('Configure workflow profile (interactive picker or preset shortcut)')
379
679
  .action(async (preset) => {
380
- // Preset shortcut: `openspec config profile core`
680
+ // Preset shortcut: `codesdd config profile core`
381
681
  if (preset === 'core') {
382
682
  const config = getGlobalConfig();
383
683
  config.profile = 'core';
@@ -517,10 +817,10 @@ export function registerConfigCommand(program) {
517
817
  config.delivery = nextState.delivery;
518
818
  config.workflows = nextState.workflows;
519
819
  saveGlobalConfig(config);
520
- // Check if inside an OpenSpec project
820
+ // Check if inside a legacy spec compatibility project
521
821
  const projectDir = process.cwd();
522
- const openspecDir = path.join(projectDir, OPENSPEC_DIR_NAME);
523
- if (fs.existsSync(openspecDir)) {
822
+ const codesddDir = resolveLegacySpecLiveRoot(projectDir);
823
+ if (fs.existsSync(codesddDir)) {
524
824
  const applyNow = await confirm({
525
825
  message: 'Apply changes to this project now?',
526
826
  default: true,
@@ -30,7 +30,7 @@ function isGhAuthenticated() {
30
30
  }
31
31
  }
32
32
  /**
33
- * Get OpenSDD version from package.json
33
+ * Get CodeSDD version from package.json
34
34
  */
35
35
  function getVersion() {
36
36
  try {
@@ -1,6 +1,69 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Schema source location type
4
+ */
5
+ export type SchemaSource = 'project' | 'user' | 'package';
6
+ /**
7
+ * Result of checking a schema location
8
+ */
9
+ export interface SchemaLocation {
10
+ source: SchemaSource;
11
+ path: string;
12
+ exists: boolean;
13
+ }
14
+ /**
15
+ * Schema resolution info with shadowing details
16
+ */
17
+ export interface SchemaResolution {
18
+ name: string;
19
+ source: SchemaSource;
20
+ path: string;
21
+ shadows: Array<{
22
+ source: SchemaSource;
23
+ path: string;
24
+ }>;
25
+ }
26
+ /**
27
+ * Validation issue structure
28
+ */
29
+ export interface ValidationIssue {
30
+ level: 'error' | 'warning';
31
+ path: string;
32
+ message: string;
33
+ }
34
+ /**
35
+ * Check all three locations for a schema and return which ones exist.
36
+ */
37
+ export declare function checkAllLocations(name: string, projectRoot: string): SchemaLocation[];
38
+ /**
39
+ * Get resolution info for a schema including shadow detection.
40
+ */
41
+ export declare function getSchemaResolution(name: string, projectRoot: string): SchemaResolution | null;
42
+ /**
43
+ * Get all schemas with resolution info.
44
+ */
45
+ export declare function getAllSchemasWithResolution(projectRoot: string): SchemaResolution[];
46
+ /**
47
+ * Validate a schema and return issues.
48
+ */
49
+ export declare function validateSchema(schemaDir: string, verbose?: boolean): {
50
+ valid: boolean;
51
+ issues: ValidationIssue[];
52
+ };
53
+ /**
54
+ * Validate schema name format (kebab-case).
55
+ */
56
+ export declare function isValidSchemaName(name: string): boolean;
57
+ /**
58
+ * Copy a directory recursively.
59
+ */
60
+ export declare function copyDirRecursive(src: string, dest: string): void;
2
61
  /**
3
62
  * Register the schema command and all its subcommands.
4
63
  */
5
64
  export declare function registerSchemaCommand(program: Command): void;
65
+ /**
66
+ * Create default template content for an artifact.
67
+ */
68
+ export declare function createDefaultTemplate(artifactId: string): string;
6
69
  //# sourceMappingURL=schema.d.ts.map
@@ -4,11 +4,11 @@ import ora from 'ora';
4
4
  import { stringify as stringifyYaml } from 'yaml';
5
5
  import { getSchemaDir, getProjectSchemasDir, getUserSchemasDir, getPackageSchemasDir, listSchemas, } from '../core/artifact-graph/resolver.js';
6
6
  import { parseSchema, SchemaValidationError } from '../core/artifact-graph/schema.js';
7
- import { resolveOpenSpecLiveSubpath } from '../core/sdd/services/legacy-capability.service.js';
7
+ import { resolveLegacySpecLiveSubpath } from '../core/sdd/services/legacy-capability.service.js';
8
8
  /**
9
9
  * Check all three locations for a schema and return which ones exist.
10
10
  */
11
- function checkAllLocations(name, projectRoot) {
11
+ export function checkAllLocations(name, projectRoot) {
12
12
  const locations = [];
13
13
  // Project location
14
14
  const projectDir = path.join(getProjectSchemasDir(projectRoot), name);
@@ -39,7 +39,7 @@ function checkAllLocations(name, projectRoot) {
39
39
  /**
40
40
  * Get resolution info for a schema including shadow detection.
41
41
  */
42
- function getSchemaResolution(name, projectRoot) {
42
+ export function getSchemaResolution(name, projectRoot) {
43
43
  const locations = checkAllLocations(name, projectRoot);
44
44
  const existingLocations = locations.filter((loc) => loc.exists);
45
45
  if (existingLocations.length === 0) {
@@ -60,7 +60,7 @@ function getSchemaResolution(name, projectRoot) {
60
60
  /**
61
61
  * Get all schemas with resolution info.
62
62
  */
63
- function getAllSchemasWithResolution(projectRoot) {
63
+ export function getAllSchemasWithResolution(projectRoot) {
64
64
  const schemaNames = listSchemas(projectRoot);
65
65
  const results = [];
66
66
  for (const name of schemaNames) {
@@ -74,7 +74,7 @@ function getAllSchemasWithResolution(projectRoot) {
74
74
  /**
75
75
  * Validate a schema and return issues.
76
76
  */
77
- function validateSchema(schemaDir, verbose = false) {
77
+ export function validateSchema(schemaDir, verbose = false) {
78
78
  const issues = [];
79
79
  const schemaPath = path.join(schemaDir, 'schema.yaml');
80
80
  // Check schema.yaml exists
@@ -157,13 +157,13 @@ function validateSchema(schemaDir, verbose = false) {
157
157
  /**
158
158
  * Validate schema name format (kebab-case).
159
159
  */
160
- function isValidSchemaName(name) {
160
+ export function isValidSchemaName(name) {
161
161
  return /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(name);
162
162
  }
163
163
  /**
164
164
  * Copy a directory recursively.
165
165
  */
166
- function copyDirRecursive(src, dest) {
166
+ export function copyDirRecursive(src, dest) {
167
167
  fs.mkdirSync(dest, { recursive: true });
168
168
  const entries = fs.readdirSync(src, { withFileTypes: true });
169
169
  for (const entry of entries) {
@@ -592,12 +592,12 @@ export function registerSchemaCommand(program) {
592
592
  console.log(JSON.stringify({
593
593
  created: false,
594
594
  error: `Schema '${name}' already exists`,
595
- suggestion: 'Use --force to overwrite or "openspec schema fork" to copy',
595
+ suggestion: 'Use --force to overwrite or "codesdd schema fork" to copy',
596
596
  }, null, 2));
597
597
  }
598
598
  else {
599
599
  console.error(`Error: Schema '${name}' already exists at ${schemaDir}`);
600
- console.error('Use --force to overwrite or "openspec schema fork" to copy');
600
+ console.error('Use --force to overwrite or "codesdd schema fork" to copy');
601
601
  }
602
602
  process.exitCode = 1;
603
603
  return;
@@ -734,7 +734,7 @@ export function registerSchemaCommand(program) {
734
734
  }
735
735
  // Update config if --default
736
736
  if (options?.default) {
737
- const configPath = resolveOpenSpecLiveSubpath(projectRoot, 'config.yaml');
737
+ const configPath = resolveLegacySpecLiveSubpath(projectRoot, 'config.yaml');
738
738
  if (fs.existsSync(configPath)) {
739
739
  const { parse: parseYaml, stringify: stringifyYaml2 } = await import('yaml');
740
740
  const configContent = fs.readFileSync(configPath, 'utf-8');
@@ -771,7 +771,7 @@ export function registerSchemaCommand(program) {
771
771
  console.log(`\nNext steps:`);
772
772
  console.log(` 1. Edit ${schemaDir}/schema.yaml to customize artifacts`);
773
773
  console.log(` 2. Modify templates in the schema directory`);
774
- console.log(` 3. Use with: openspec new --schema ${name}`);
774
+ console.log(` 3. Use with: codesdd new --schema ${name}`);
775
775
  }
776
776
  }
777
777
  catch (error) {
@@ -793,7 +793,7 @@ export function registerSchemaCommand(program) {
793
793
  /**
794
794
  * Create default template content for an artifact.
795
795
  */
796
- function createDefaultTemplate(artifactId) {
796
+ export function createDefaultTemplate(artifactId) {
797
797
  switch (artifactId) {
798
798
  case 'proposal':
799
799
  return `## Why
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBacklogCommands(sddCmd: Command): void;
3
+ //# sourceMappingURL=backlog.d.ts.map