@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
@@ -1,4 +1,6 @@
1
- import { type StructuralDiagnosticReport, type StructuralSanitizerReport, type StructuralSanitizerTransactionManifest } from './structural-health.js';
1
+ import { type StructuralDiagnosticReport, type StructuralSanitizerReport, type StructuralSanitizerTransactionManifest, type StructuralSanitizerTransactionOperation } from './structural-health.js';
2
+ export type Finding = StructuralDiagnosticReport['findings'][number];
3
+ export type SanitizerAction = StructuralSanitizerReport['actions'][number];
2
4
  export interface SddSanitizeCommandOptions {
3
5
  dryRun?: boolean;
4
6
  apply?: boolean;
@@ -27,6 +29,33 @@ export declare class SddSanitizeOptionsError extends Error {
27
29
  export declare class SddSanitizeApplyError extends Error {
28
30
  constructor(message: string);
29
31
  }
32
+ export declare function actionToken(input: string): string;
33
+ export declare function createSourceReportId(report: StructuralDiagnosticReport): string;
34
+ export declare function isInsidePath(rootPath: string, candidatePath: string): boolean;
35
+ export declare function toAuditTimestampToken(value?: Date): string;
36
+ export declare function createTransactionId(sourceReportId: string, value?: Date): string;
37
+ export declare function pathExists(targetPath: string): Promise<boolean>;
38
+ export declare function hashPath(targetPath: string): Promise<string | undefined>;
39
+ export declare function resolveInSddRoot(projectRoot: string, memoryRoot: string, candidatePath: string, label: string): Promise<string>;
40
+ export declare function transactionDirs(projectRoot: string, transactionId: string): {
41
+ sanitizeRoot: string;
42
+ backupRoot: string;
43
+ manifestPath: string;
44
+ auditLogPath: string;
45
+ };
46
+ export declare function backupPath(targetPath: string, backupRoot: string): Promise<string | undefined>;
47
+ export declare function removePathSafely(targetPath: string): Promise<void>;
48
+ export declare function toLifecycleTargetPath(finding: Finding): string | undefined;
49
+ export declare function toQuarantinePath(location?: string): string | undefined;
50
+ export declare function toWorkspaceBackupPath(location?: string): string | undefined;
51
+ export declare function inferOperation(finding: Finding): SanitizerAction['operation'];
52
+ export declare function makeActionFromFinding(finding: Finding, index: number): SanitizerAction;
53
+ export declare function buildSanitizerDryRunReport(report: StructuralDiagnosticReport): StructuralSanitizerReport;
54
+ export declare function manifestSummary(operations: StructuralSanitizerTransactionOperation[]): StructuralSanitizerTransactionManifest['summary'];
55
+ export declare function writeAuditLog(auditLogPath: string, lines: Array<Record<string, unknown>>): Promise<void>;
56
+ export declare function rollbackOperation(projectRoot: string, memoryRoot: string, rollback: StructuralSanitizerTransactionOperation['rollback']): Promise<void>;
57
+ export declare function applySanitizerPlan(projectRoot: string, source: 'diagnose' | 'report', diagnosticReport: StructuralDiagnosticReport, dryRunReport: StructuralSanitizerReport): Promise<SddSanitizeResult>;
58
+ export declare function loadDiagnosticReportFromFile(projectRoot: string, reportPath: string): Promise<StructuralDiagnosticReport>;
30
59
  export declare function formatSanitizerText(report: StructuralSanitizerReport): string;
31
60
  export declare class SddSanitizeCommand {
32
61
  execute(projectRoot: string, options?: SddSanitizeCommandOptions): Promise<SddSanitizeResult>;
@@ -19,11 +19,11 @@ export class SddSanitizeApplyError extends Error {
19
19
  this.name = 'SddSanitizeApplyError';
20
20
  }
21
21
  }
22
- function actionToken(input) {
22
+ export function actionToken(input) {
23
23
  const normalized = input.toUpperCase().replace(/[^A-Z0-9]+/g, '-').replace(/^-+|-+$/g, '');
24
24
  return normalized.length > 0 ? normalized : 'GENERIC';
25
25
  }
26
- function createSourceReportId(report) {
26
+ export function createSourceReportId(report) {
27
27
  const digest = createHash('sha1')
28
28
  .update(JSON.stringify({
29
29
  root_path: report.root_path,
@@ -43,19 +43,19 @@ function createSourceReportId(report) {
43
43
  .toUpperCase();
44
44
  return `SH-REPORT-${digest}`;
45
45
  }
46
- function isInsidePath(rootPath, candidatePath) {
46
+ export function isInsidePath(rootPath, candidatePath) {
47
47
  const relative = path.relative(rootPath, candidatePath);
48
48
  return relative === '' || (!!relative && !relative.startsWith('..') && !path.isAbsolute(relative));
49
49
  }
50
- function toAuditTimestampToken(value = new Date()) {
50
+ export function toAuditTimestampToken(value = new Date()) {
51
51
  return value.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
52
52
  }
53
- function createTransactionId(sourceReportId, value = new Date()) {
53
+ export function createTransactionId(sourceReportId, value = new Date()) {
54
54
  const timestamp = toAuditTimestampToken(value);
55
55
  const suffix = createHash('sha1').update(`${sourceReportId}:${value.toISOString()}`).digest('hex').slice(0, 8).toUpperCase();
56
56
  return `SAN-${timestamp}-${suffix}`;
57
57
  }
58
- async function pathExists(targetPath) {
58
+ export async function pathExists(targetPath) {
59
59
  try {
60
60
  await lstat(targetPath);
61
61
  return true;
@@ -64,7 +64,7 @@ async function pathExists(targetPath) {
64
64
  return false;
65
65
  }
66
66
  }
67
- async function hashPath(targetPath) {
67
+ export async function hashPath(targetPath) {
68
68
  let stat;
69
69
  try {
70
70
  stat = await lstat(targetPath);
@@ -88,7 +88,7 @@ async function hashPath(targetPath) {
88
88
  }
89
89
  return `other:${stat.mode}`;
90
90
  }
91
- async function resolveInSddRoot(projectRoot, memoryRoot, candidatePath, label) {
91
+ export async function resolveInSddRoot(projectRoot, memoryRoot, candidatePath, label) {
92
92
  try {
93
93
  return await RootResolver.verifyRealpathContainment(projectRoot, memoryRoot, candidatePath, label);
94
94
  }
@@ -99,7 +99,7 @@ async function resolveInSddRoot(projectRoot, memoryRoot, candidatePath, label) {
99
99
  throw error;
100
100
  }
101
101
  }
102
- function transactionDirs(projectRoot, transactionId) {
102
+ export function transactionDirs(projectRoot, transactionId) {
103
103
  const sanitizeRoot = path.resolve(projectRoot, '.sdd', 'reports', 'sanitize');
104
104
  const backupRoot = path.join(sanitizeRoot, transactionId, 'backups');
105
105
  return {
@@ -109,7 +109,7 @@ function transactionDirs(projectRoot, transactionId) {
109
109
  auditLogPath: path.join(sanitizeRoot, `${transactionId}-audit.jsonl`),
110
110
  };
111
111
  }
112
- async function backupPath(targetPath, backupRoot) {
112
+ export async function backupPath(targetPath, backupRoot) {
113
113
  if (!(await pathExists(targetPath)))
114
114
  return undefined;
115
115
  const suffix = createHash('sha1').update(targetPath).digest('hex').slice(0, 10);
@@ -118,7 +118,7 @@ async function backupPath(targetPath, backupRoot) {
118
118
  await cp(targetPath, backupPathResolved, { recursive: true });
119
119
  return backupPathResolved;
120
120
  }
121
- async function removePathSafely(targetPath) {
121
+ export async function removePathSafely(targetPath) {
122
122
  const stat = await lstat(targetPath).catch(() => null);
123
123
  if (!stat)
124
124
  return;
@@ -128,7 +128,7 @@ async function removePathSafely(targetPath) {
128
128
  }
129
129
  await unlink(targetPath);
130
130
  }
131
- function toLifecycleTargetPath(finding) {
131
+ export function toLifecycleTargetPath(finding) {
132
132
  const evidence = finding.evidence;
133
133
  const expectedRoot = typeof evidence.expected_root === 'string' ? evidence.expected_root : undefined;
134
134
  const itemId = typeof evidence.id === 'string' ? evidence.id : undefined;
@@ -143,19 +143,19 @@ function toLifecycleTargetPath(finding) {
143
143
  }
144
144
  return undefined;
145
145
  }
146
- function toQuarantinePath(location) {
146
+ export function toQuarantinePath(location) {
147
147
  if (!location)
148
148
  return undefined;
149
149
  const baseName = path.posix.basename(location);
150
150
  return path.posix.join('.sdd', 'quarantine', baseName);
151
151
  }
152
- function toWorkspaceBackupPath(location) {
152
+ export function toWorkspaceBackupPath(location) {
153
153
  if (!location)
154
154
  return undefined;
155
155
  const normalized = location.replace(/\\/g, '/').replace(/^\.sdd\//, '');
156
156
  return path.posix.join('.sdd', 'backup', normalized);
157
157
  }
158
- function inferOperation(finding) {
158
+ export function inferOperation(finding) {
159
159
  switch (finding.rule_id) {
160
160
  case 'SH-RULE-MISSING-DIRECTORY':
161
161
  return 'mkdir';
@@ -179,7 +179,7 @@ function inferOperation(finding) {
179
179
  return 'manual_review';
180
180
  }
181
181
  }
182
- function makeActionFromFinding(finding, index) {
182
+ export function makeActionFromFinding(finding, index) {
183
183
  const operation = inferOperation(finding);
184
184
  const actionId = `SH-ACTION-${actionToken(finding.finding_id)}-${actionToken(operation)}-${index + 1}`;
185
185
  const candidate = {
@@ -216,7 +216,7 @@ function makeActionFromFinding(finding, index) {
216
216
  const id = typeof evidence.id === 'string' ? evidence.id : undefined;
217
217
  const hasLegacyMarkdown = evidence.has_legacy_markdown === true;
218
218
  candidate.notes = hasLegacyMarkdown && id
219
- ? `${candidate.notes} Suggested migration: opensdd sdd migrate-workspace --feat ${id}.`
219
+ ? `${candidate.notes} Suggested migration: codesdd sdd migrate-workspace --feat ${id}.`
220
220
  : `${candidate.notes} Suggested repair: manually edit the YAML to satisfy the workspace schema.`;
221
221
  }
222
222
  if (finding.rule_id === 'SH-RULE-LIFECYCLE-VIOLATION') {
@@ -233,7 +233,7 @@ function makeActionFromFinding(finding, index) {
233
233
  }
234
234
  return StructuralSanitizerActionSchema.parse(candidate);
235
235
  }
236
- function buildSanitizerDryRunReport(report) {
236
+ export function buildSanitizerDryRunReport(report) {
237
237
  const actions = [];
238
238
  const blockedActions = [];
239
239
  report.findings.forEach((finding, index) => {
@@ -253,7 +253,7 @@ function buildSanitizerDryRunReport(report) {
253
253
  blocked_actions: blockedActions,
254
254
  });
255
255
  }
256
- function manifestSummary(operations) {
256
+ export function manifestSummary(operations) {
257
257
  return {
258
258
  applied: operations.filter((item) => item.status === 'applied').length,
259
259
  skipped: operations.filter((item) => item.status === 'skipped').length,
@@ -261,7 +261,7 @@ function manifestSummary(operations) {
261
261
  rolled_back: operations.filter((item) => item.status === 'rolled_back').length,
262
262
  };
263
263
  }
264
- async function writeAuditLog(auditLogPath, lines) {
264
+ export async function writeAuditLog(auditLogPath, lines) {
265
265
  await mkdir(path.dirname(auditLogPath), { recursive: true });
266
266
  if (lines.length === 0) {
267
267
  await writeFile(auditLogPath, '', 'utf-8');
@@ -270,7 +270,7 @@ async function writeAuditLog(auditLogPath, lines) {
270
270
  const payload = `${lines.map((line) => JSON.stringify(line)).join('\n')}\n`;
271
271
  await writeFile(auditLogPath, payload, 'utf-8');
272
272
  }
273
- async function rollbackOperation(projectRoot, memoryRoot, rollback) {
273
+ export async function rollbackOperation(projectRoot, memoryRoot, rollback) {
274
274
  const operation = StructuralSanitizerRollbackOperationSchema.parse(rollback);
275
275
  if (operation.operation === 'noop')
276
276
  return;
@@ -302,7 +302,7 @@ async function rollbackOperation(projectRoot, memoryRoot, rollback) {
302
302
  await cp(backup, target, { recursive: true });
303
303
  }
304
304
  }
305
- async function applySanitizerPlan(projectRoot, source, diagnosticReport, dryRunReport) {
305
+ export async function applySanitizerPlan(projectRoot, source, diagnosticReport, dryRunReport) {
306
306
  const config = await loadProjectSddConfig(projectRoot);
307
307
  const paths = resolveSddPaths(path.resolve(projectRoot), config);
308
308
  const transactionId = createTransactionId(dryRunReport.source_report_id);
@@ -581,7 +581,7 @@ async function applySanitizerPlan(projectRoot, source, diagnosticReport, dryRunR
581
581
  transaction: manifest,
582
582
  };
583
583
  }
584
- async function loadDiagnosticReportFromFile(projectRoot, reportPath) {
584
+ export async function loadDiagnosticReportFromFile(projectRoot, reportPath) {
585
585
  const absolutePath = path.resolve(projectRoot, reportPath);
586
586
  let raw;
587
587
  try {
@@ -0,0 +1,150 @@
1
+ import { z } from 'zod';
2
+ export declare const sdkAgentPluginCoverageScopeSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ label: z.ZodString;
5
+ metrics: z.ZodObject<{
6
+ statements: z.ZodOptional<z.ZodNumber>;
7
+ branches: z.ZodOptional<z.ZodNumber>;
8
+ functions: z.ZodOptional<z.ZodNumber>;
9
+ lines: z.ZodOptional<z.ZodNumber>;
10
+ }, z.core.$strip>;
11
+ target: z.ZodOptional<z.ZodObject<{
12
+ statements: z.ZodOptional<z.ZodNumber>;
13
+ branches: z.ZodOptional<z.ZodNumber>;
14
+ functions: z.ZodOptional<z.ZodNumber>;
15
+ lines: z.ZodOptional<z.ZodNumber>;
16
+ }, z.core.$strip>>;
17
+ }, z.core.$strip>;
18
+ export declare const sdkAgentPluginQualityGateInputSchema: z.ZodObject<{
19
+ schema_version: z.ZodDefault<z.ZodLiteral<1>>;
20
+ generated_at: z.ZodString;
21
+ feature_ref: z.ZodOptional<z.ZodString>;
22
+ package_governance: z.ZodOptional<z.ZodUnknown>;
23
+ language_runtime: z.ZodOptional<z.ZodUnknown>;
24
+ artifact_map: z.ZodOptional<z.ZodUnknown>;
25
+ agent_runtime_plans: z.ZodDefault<z.ZodArray<z.ZodUnknown>>;
26
+ plugin_compliance_indexes: z.ZodDefault<z.ZodArray<z.ZodUnknown>>;
27
+ coverage_scopes: z.ZodDefault<z.ZodArray<z.ZodObject<{
28
+ id: z.ZodString;
29
+ label: z.ZodString;
30
+ metrics: z.ZodObject<{
31
+ statements: z.ZodOptional<z.ZodNumber>;
32
+ branches: z.ZodOptional<z.ZodNumber>;
33
+ functions: z.ZodOptional<z.ZodNumber>;
34
+ lines: z.ZodOptional<z.ZodNumber>;
35
+ }, z.core.$strip>;
36
+ target: z.ZodOptional<z.ZodObject<{
37
+ statements: z.ZodOptional<z.ZodNumber>;
38
+ branches: z.ZodOptional<z.ZodNumber>;
39
+ functions: z.ZodOptional<z.ZodNumber>;
40
+ lines: z.ZodOptional<z.ZodNumber>;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>>>;
43
+ required_agent_providers: z.ZodDefault<z.ZodArray<z.ZodEnum<{
44
+ codex: "codex";
45
+ opencode: "opencode";
46
+ deepagents: "deepagents";
47
+ }>>>;
48
+ coverage_target: z.ZodDefault<z.ZodObject<{
49
+ statements: z.ZodOptional<z.ZodNumber>;
50
+ branches: z.ZodOptional<z.ZodNumber>;
51
+ functions: z.ZodOptional<z.ZodNumber>;
52
+ lines: z.ZodOptional<z.ZodNumber>;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>;
55
+ export declare const sdkAgentPluginQualityGateIssueSchema: z.ZodObject<{
56
+ code: z.ZodString;
57
+ severity: z.ZodEnum<{
58
+ fail: "fail";
59
+ warn: "warn";
60
+ }>;
61
+ message: z.ZodString;
62
+ remediation: z.ZodString;
63
+ path: z.ZodOptional<z.ZodString>;
64
+ }, z.core.$strip>;
65
+ export declare const sdkAgentPluginQualityGateSchema: z.ZodObject<{
66
+ id: z.ZodString;
67
+ domain: z.ZodEnum<{
68
+ coverage: "coverage";
69
+ "agent-runtime": "agent-runtime";
70
+ "plugin-sdk": "plugin-sdk";
71
+ "plugin-compliance": "plugin-compliance";
72
+ "foundation-architecture": "foundation-architecture";
73
+ }>;
74
+ status: z.ZodEnum<{
75
+ pass: "pass";
76
+ fail: "fail";
77
+ warn: "warn";
78
+ }>;
79
+ severity: z.ZodEnum<{
80
+ info: "info";
81
+ fail: "fail";
82
+ warn: "warn";
83
+ }>;
84
+ evidence: z.ZodString;
85
+ issues: z.ZodDefault<z.ZodArray<z.ZodObject<{
86
+ code: z.ZodString;
87
+ severity: z.ZodEnum<{
88
+ fail: "fail";
89
+ warn: "warn";
90
+ }>;
91
+ message: z.ZodString;
92
+ remediation: z.ZodString;
93
+ path: z.ZodOptional<z.ZodString>;
94
+ }, z.core.$strip>>>;
95
+ }, z.core.$strip>;
96
+ export declare const sdkAgentPluginQualityGateReportSchema: z.ZodObject<{
97
+ schema_version: z.ZodLiteral<1>;
98
+ generated_at: z.ZodString;
99
+ feature_ref: z.ZodOptional<z.ZodString>;
100
+ decision: z.ZodEnum<{
101
+ warning: "warning";
102
+ failed: "failed";
103
+ passed: "passed";
104
+ }>;
105
+ summary: z.ZodObject<{
106
+ total: z.ZodNumber;
107
+ passed: z.ZodNumber;
108
+ warned: z.ZodNumber;
109
+ failed: z.ZodNumber;
110
+ }, z.core.$strip>;
111
+ gates: z.ZodArray<z.ZodObject<{
112
+ id: z.ZodString;
113
+ domain: z.ZodEnum<{
114
+ coverage: "coverage";
115
+ "agent-runtime": "agent-runtime";
116
+ "plugin-sdk": "plugin-sdk";
117
+ "plugin-compliance": "plugin-compliance";
118
+ "foundation-architecture": "foundation-architecture";
119
+ }>;
120
+ status: z.ZodEnum<{
121
+ pass: "pass";
122
+ fail: "fail";
123
+ warn: "warn";
124
+ }>;
125
+ severity: z.ZodEnum<{
126
+ info: "info";
127
+ fail: "fail";
128
+ warn: "warn";
129
+ }>;
130
+ evidence: z.ZodString;
131
+ issues: z.ZodDefault<z.ZodArray<z.ZodObject<{
132
+ code: z.ZodString;
133
+ severity: z.ZodEnum<{
134
+ fail: "fail";
135
+ warn: "warn";
136
+ }>;
137
+ message: z.ZodString;
138
+ remediation: z.ZodString;
139
+ path: z.ZodOptional<z.ZodString>;
140
+ }, z.core.$strip>>>;
141
+ }, z.core.$strip>>;
142
+ }, z.core.$strip>;
143
+ export type SdkAgentPluginCoverageScope = z.infer<typeof sdkAgentPluginCoverageScopeSchema>;
144
+ export type SdkAgentPluginQualityGateInput = z.input<typeof sdkAgentPluginQualityGateInputSchema>;
145
+ export type SdkAgentPluginQualityGateIssue = z.infer<typeof sdkAgentPluginQualityGateIssueSchema>;
146
+ export type SdkAgentPluginQualityGate = z.infer<typeof sdkAgentPluginQualityGateSchema>;
147
+ export type SdkAgentPluginQualityGateReport = z.infer<typeof sdkAgentPluginQualityGateReportSchema>;
148
+ export declare function buildSdkAgentPluginQualityGateReport(value: SdkAgentPluginQualityGateInput): SdkAgentPluginQualityGateReport;
149
+ export declare function buildSdkAgentPluginQualityGateJsonSchemas(): Record<string, unknown>;
150
+ //# sourceMappingURL=sdk-agent-plugin-quality-gates.d.ts.map
@@ -0,0 +1,258 @@
1
+ import { toJSONSchema, z } from 'zod';
2
+ import { agentRuntimeCommandPlanSchema, agentRuntimeProviderSchema, } from './agent-runtime-contract.js';
3
+ import { validateFoundationArtifactMapArchitecture } from './foundation-artifact-map-validator.js';
4
+ import { pluginComplianceIndexSchema } from './plugin-evidence.js';
5
+ import { pluginArtifactMapSchema, pluginLanguageRuntimeSchema, pluginPackageGovernanceSchema, } from './plugin-sdk-contract.js';
6
+ const JSON_SCHEMA_DRAFT = 'https://json-schema.org/draft/2020-12/schema';
7
+ const FEATURE_REF_PATTERN = /^FEAT-\d{4}$/;
8
+ const ISSUE_CODE_PATTERN = /^[A-Z][A-Z0-9_]*$/;
9
+ const coverageMetricsSchema = z
10
+ .object({
11
+ statements: z.number().min(0).max(100).optional(),
12
+ branches: z.number().min(0).max(100).optional(),
13
+ functions: z.number().min(0).max(100).optional(),
14
+ lines: z.number().min(0).max(100).optional(),
15
+ })
16
+ .refine((metrics) => Object.keys(metrics).length > 0, {
17
+ message: 'At least one coverage metric is required.',
18
+ });
19
+ export const sdkAgentPluginCoverageScopeSchema = z.object({
20
+ id: z.string().min(1),
21
+ label: z.string().min(1),
22
+ metrics: coverageMetricsSchema,
23
+ target: coverageMetricsSchema.optional(),
24
+ });
25
+ export const sdkAgentPluginQualityGateInputSchema = z.object({
26
+ schema_version: z.literal(1).default(1),
27
+ generated_at: z.string().datetime(),
28
+ feature_ref: z.string().regex(FEATURE_REF_PATTERN).optional(),
29
+ package_governance: z.unknown().optional(),
30
+ language_runtime: z.unknown().optional(),
31
+ artifact_map: z.unknown().optional(),
32
+ agent_runtime_plans: z.array(z.unknown()).default([]),
33
+ plugin_compliance_indexes: z.array(z.unknown()).default([]),
34
+ coverage_scopes: z.array(sdkAgentPluginCoverageScopeSchema).default([]),
35
+ required_agent_providers: z.array(agentRuntimeProviderSchema).default(['deepagents', 'codex', 'opencode']),
36
+ coverage_target: coverageMetricsSchema.default({
37
+ statements: 95,
38
+ branches: 85,
39
+ functions: 95,
40
+ lines: 95,
41
+ }),
42
+ });
43
+ export const sdkAgentPluginQualityGateIssueSchema = z.object({
44
+ code: z.string().regex(ISSUE_CODE_PATTERN),
45
+ severity: z.enum(['warn', 'fail']),
46
+ message: z.string().min(1),
47
+ remediation: z.string().min(1),
48
+ path: z.string().min(1).optional(),
49
+ });
50
+ export const sdkAgentPluginQualityGateSchema = z.object({
51
+ id: z.string().min(1),
52
+ domain: z.enum([
53
+ 'plugin-sdk',
54
+ 'agent-runtime',
55
+ 'plugin-compliance',
56
+ 'foundation-architecture',
57
+ 'coverage',
58
+ ]),
59
+ status: z.enum(['pass', 'warn', 'fail']),
60
+ severity: z.enum(['info', 'warn', 'fail']),
61
+ evidence: z.string().min(1),
62
+ issues: z.array(sdkAgentPluginQualityGateIssueSchema).default([]),
63
+ });
64
+ export const sdkAgentPluginQualityGateReportSchema = z.object({
65
+ schema_version: z.literal(1),
66
+ generated_at: z.string().datetime(),
67
+ feature_ref: z.string().regex(FEATURE_REF_PATTERN).optional(),
68
+ decision: z.enum(['passed', 'warning', 'failed']),
69
+ summary: z.object({
70
+ total: z.number().int().nonnegative(),
71
+ passed: z.number().int().nonnegative(),
72
+ warned: z.number().int().nonnegative(),
73
+ failed: z.number().int().nonnegative(),
74
+ }),
75
+ gates: z.array(sdkAgentPluginQualityGateSchema).min(1),
76
+ });
77
+ const COVERAGE_METRICS = ['statements', 'branches', 'functions', 'lines'];
78
+ export function buildSdkAgentPluginQualityGateReport(value) {
79
+ const input = sdkAgentPluginQualityGateInputSchema.parse(value);
80
+ const gates = [
81
+ packageGovernanceGate(input.package_governance),
82
+ languageRuntimeGate(input.language_runtime),
83
+ artifactMapGate(input.artifact_map),
84
+ agentRuntimeGate(input.agent_runtime_plans, input.required_agent_providers),
85
+ pluginComplianceGate(input.plugin_compliance_indexes),
86
+ coverageGate(input.coverage_scopes, input.coverage_target),
87
+ ];
88
+ const summary = {
89
+ total: gates.length,
90
+ passed: gates.filter((gate) => gate.status === 'pass').length,
91
+ warned: gates.filter((gate) => gate.status === 'warn').length,
92
+ failed: gates.filter((gate) => gate.status === 'fail').length,
93
+ };
94
+ return sdkAgentPluginQualityGateReportSchema.parse({
95
+ schema_version: 1,
96
+ generated_at: input.generated_at,
97
+ feature_ref: input.feature_ref,
98
+ decision: summary.failed > 0 ? 'failed' : summary.warned > 0 ? 'warning' : 'passed',
99
+ summary,
100
+ gates,
101
+ });
102
+ }
103
+ export function buildSdkAgentPluginQualityGateJsonSchemas() {
104
+ return {
105
+ 'sdk-agent-plugin-quality-gate-input.yaml': normalizeJsonSchema(sdkAgentPluginQualityGateInputSchema, 'CodeSDD SDK Agent Plugin Quality Gate Input', 'Input contract for validating plugin SDK, agent runtime, plugin compliance, Foundation artifact map, and coverage evidence together.'),
106
+ 'sdk-agent-plugin-quality-gate-report.yaml': normalizeJsonSchema(sdkAgentPluginQualityGateReportSchema, 'CodeSDD SDK Agent Plugin Quality Gate Report', 'Machine-readable quality gate report for SDK contracts, agent runtimes, plugin compliance indexes, Foundation artifact maps, and coverage scopes.'),
107
+ };
108
+ }
109
+ function packageGovernanceGate(value) {
110
+ if (value === undefined) {
111
+ return gate('plugin-sdk.package-governance', 'plugin-sdk', [
112
+ issue('SDK_PACKAGE_GOVERNANCE_MISSING', 'fail', 'Plugin package governance evidence is missing.', 'Attach package_governance from @devtrack-solution/codesdd-plugin-sdk before accepting the plugin package.'),
113
+ ], 'No package governance evidence was provided.');
114
+ }
115
+ const parsed = pluginPackageGovernanceSchema.safeParse(value);
116
+ if (!parsed.success) {
117
+ return gate('plugin-sdk.package-governance', 'plugin-sdk', [
118
+ issue('SDK_PACKAGE_GOVERNANCE_INVALID', 'fail', `Package governance failed validation: ${formatIssues(parsed.error.issues)}`, 'Use the @devtrack-solution/codesdd-plugin-* package prefix, SemVer, package kind, and required discovery keywords.'),
119
+ ], 'Package governance evidence failed SDK validation.');
120
+ }
121
+ return gate('plugin-sdk.package-governance', 'plugin-sdk', [], `Package governance passed for ${parsed.data.package_name}.`);
122
+ }
123
+ function languageRuntimeGate(value) {
124
+ if (value === undefined) {
125
+ return gate('plugin-sdk.language-runtime', 'plugin-sdk', [
126
+ issue('SDK_LANGUAGE_RUNTIME_MISSING', 'fail', 'Plugin language runtime evidence is missing.', 'Declare language_runtime with bridge and transport metadata before planning standalone plugin execution.'),
127
+ ], 'No language runtime evidence was provided.');
128
+ }
129
+ const parsed = pluginLanguageRuntimeSchema.safeParse(value);
130
+ if (!parsed.success) {
131
+ return gate('plugin-sdk.language-runtime', 'plugin-sdk', [
132
+ issue('SDK_LANGUAGE_RUNTIME_INVALID', 'fail', `Language runtime failed validation: ${formatIssues(parsed.error.issues)}`, 'Use a valid bridge for the plugin language and declare commands for process-backed runtimes.'),
133
+ ], 'Language runtime evidence failed SDK validation.');
134
+ }
135
+ return gate('plugin-sdk.language-runtime', 'plugin-sdk', [], `Language runtime passed for ${parsed.data.language} through ${parsed.data.bridge}.`);
136
+ }
137
+ function artifactMapGate(value) {
138
+ if (value === undefined) {
139
+ return gate('foundation.artifact-map', 'foundation-architecture', [
140
+ issue('SDK_ARTIFACT_MAP_MISSING', 'fail', 'Plugin artifact map evidence is missing.', 'Attach a typed artifact map before accepting generated or modified project files.'),
141
+ ], 'No artifact map evidence was provided.');
142
+ }
143
+ const sdkParsed = pluginArtifactMapSchema.safeParse(value);
144
+ if (!sdkParsed.success) {
145
+ return gate('foundation.artifact-map', 'foundation-architecture', [
146
+ issue('SDK_ARTIFACT_MAP_INVALID', 'fail', `Artifact map failed SDK validation: ${formatIssues(sdkParsed.error.issues)}`, 'Validate artifact maps with the CodeSDD plugin SDK before Foundation architecture checks run.'),
147
+ ], 'Artifact map failed SDK schema validation.');
148
+ }
149
+ const foundation = validateFoundationArtifactMapArchitecture(sdkParsed.data);
150
+ const issues = foundation.findings.map((finding) => issue(finding.code, 'warn', finding.message, finding.remediation, finding.path));
151
+ return gate('foundation.artifact-map', 'foundation-architecture', issues, `Artifact map contains ${sdkParsed.data.artifacts.length} artifacts; Foundation architecture status is ${foundation.status}.`);
152
+ }
153
+ function agentRuntimeGate(values, requiredProviders) {
154
+ const plansByProvider = new Map();
155
+ const issues = [];
156
+ values.forEach((value, index) => {
157
+ const parsed = agentRuntimeCommandPlanSchema.safeParse(value);
158
+ if (!parsed.success) {
159
+ issues.push(issue('AGENT_RUNTIME_PLAN_INVALID', 'fail', `Agent runtime plan at index ${index} failed validation: ${formatIssues(parsed.error.issues)}`, 'Build agent execution through the Agent Runtime v2 command-plan contract.', `agent_runtime_plans.${index}`));
160
+ return;
161
+ }
162
+ const plan = parsed.data;
163
+ plansByProvider.set(plan.provider, (plansByProvider.get(plan.provider) ?? 0) + 1);
164
+ if (plan.status === 'blocked') {
165
+ issues.push(issue('AGENT_RUNTIME_PLAN_BLOCKED', 'fail', `${plan.provider} plan is blocked: ${plan.reasons.join('; ') || 'no reason provided'}`, 'Resolve runtime policy findings or keep the agent outside executable apply flows.', `agent_runtime_plans.${index}`));
166
+ }
167
+ });
168
+ for (const provider of requiredProviders) {
169
+ if (!plansByProvider.has(provider)) {
170
+ issues.push(issue('AGENT_RUNTIME_PROVIDER_MISSING', 'fail', `Required agent runtime provider ${provider} has no command plan.`, 'Attach command plans for DeepAgents, Codex exec, and OpenCode run before closing agent-runtime coverage.', provider));
171
+ }
172
+ }
173
+ return gate('agent-runtime.v2-command-plans', 'agent-runtime', issues, `Validated ${values.length} agent runtime plans across ${plansByProvider.size} providers.`);
174
+ }
175
+ function pluginComplianceGate(values) {
176
+ const issues = [];
177
+ if (values.length === 0) {
178
+ issues.push(issue('PLUGIN_COMPLIANCE_INDEX_MISSING', 'fail', 'No plugin compliance index was attached.', 'Attach at least one compliance index generated from plugin evidence before accepting plugin quality gates.'));
179
+ }
180
+ values.forEach((value, index) => {
181
+ const parsed = pluginComplianceIndexSchema.safeParse(value);
182
+ if (!parsed.success) {
183
+ issues.push(issue('PLUGIN_COMPLIANCE_INDEX_INVALID', 'fail', `Plugin compliance index at index ${index} failed validation: ${formatIssues(parsed.error.issues)}`, 'Build compliance indexes through the plugin evidence contract.', `plugin_compliance_indexes.${index}`));
184
+ return;
185
+ }
186
+ if (parsed.data.decision === 'non-compliant') {
187
+ issues.push(issue('PLUGIN_COMPLIANCE_NON_COMPLIANT', 'fail', `${parsed.data.plugin_ref.id}@${parsed.data.plugin_ref.version} is non-compliant with score ${parsed.data.score}.`, 'Resolve failing compliance criteria before enabling plugin execution.', `plugin_compliance_indexes.${index}`));
188
+ }
189
+ else if (parsed.data.decision === 'warning') {
190
+ issues.push(issue('PLUGIN_COMPLIANCE_WARNING', 'warn', `${parsed.data.plugin_ref.id}@${parsed.data.plugin_ref.version} has warning compliance with score ${parsed.data.score}.`, 'Record the accepted residual risk or improve plugin evidence before apply modes.', `plugin_compliance_indexes.${index}`));
191
+ }
192
+ });
193
+ return gate('plugin-compliance.indexes', 'plugin-compliance', issues, `Validated ${values.length} plugin compliance indexes.`);
194
+ }
195
+ function coverageGate(scopes, defaultTarget) {
196
+ const issues = [];
197
+ if (scopes.length === 0) {
198
+ issues.push(issue('COVERAGE_SCOPE_MISSING', 'fail', 'No coverage scope evidence was attached.', 'Attach coverage metrics for touched SDK, agent runtime, and plugin modules.'));
199
+ }
200
+ for (const scope of scopes) {
201
+ const target = { ...defaultTarget, ...scope.target };
202
+ for (const metric of COVERAGE_METRICS) {
203
+ const targetValue = target[metric];
204
+ if (targetValue === undefined)
205
+ continue;
206
+ const actual = scope.metrics[metric];
207
+ if (actual === undefined) {
208
+ issues.push(issue('COVERAGE_METRIC_MISSING', 'fail', `Coverage scope ${scope.id} is missing ${metric} coverage.`, `Record ${metric} coverage or remove ${metric} from the scope target.`, scope.id));
209
+ }
210
+ else if (actual < targetValue) {
211
+ issues.push(issue('COVERAGE_TARGET_MISSED', 'fail', `Coverage scope ${scope.id} has ${metric} ${formatPercent(actual)}, below target ${formatPercent(targetValue)}.`, 'Add tests for the touched contract or record a formal CodeSDD exception with compensating controls.', scope.id));
212
+ }
213
+ }
214
+ }
215
+ return gate('coverage.touched-contracts', 'coverage', issues, `Validated ${scopes.length} coverage scopes against touched-contract targets.`);
216
+ }
217
+ function gate(id, domain, issues, evidence) {
218
+ const status = issues.some((item) => item.severity === 'fail')
219
+ ? 'fail'
220
+ : issues.length > 0
221
+ ? 'warn'
222
+ : 'pass';
223
+ return sdkAgentPluginQualityGateSchema.parse({
224
+ id,
225
+ domain,
226
+ status,
227
+ severity: status === 'pass' ? 'info' : status,
228
+ evidence,
229
+ issues,
230
+ });
231
+ }
232
+ function issue(code, severity, message, remediation, path) {
233
+ return sdkAgentPluginQualityGateIssueSchema.parse({
234
+ code,
235
+ severity,
236
+ message,
237
+ remediation,
238
+ path,
239
+ });
240
+ }
241
+ function normalizeJsonSchema(schema, title, description) {
242
+ return {
243
+ ...toJSONSchema(schema),
244
+ $schema: JSON_SCHEMA_DRAFT,
245
+ title,
246
+ description,
247
+ };
248
+ }
249
+ function formatIssues(issues) {
250
+ return issues.map((item) => {
251
+ const issuePath = item.path.length > 0 ? item.path.join('.') : '<root>';
252
+ return `${issuePath}: ${item.message}`;
253
+ }).join('; ');
254
+ }
255
+ function formatPercent(value) {
256
+ return `${value.toFixed(2)} percent`;
257
+ }
258
+ //# sourceMappingURL=sdk-agent-plugin-quality-gates.js.map