@devtrack-solution/codesdd 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +160 -28
  3. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +1 -1
  4. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  5. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  6. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +317 -0
  7. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  8. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +295 -0
  9. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +4 -4
  10. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  11. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  12. package/LICENSE +1 -1
  13. package/README.md +243 -51
  14. package/bin/codesdd.js +3 -2
  15. package/dist/cli/index.d.ts +2 -2
  16. package/dist/cli/index.js +11 -558
  17. package/dist/cli/program.d.ts +14 -0
  18. package/dist/cli/program.js +645 -0
  19. package/dist/commands/change.js +5 -5
  20. package/dist/commands/completion.d.ts +1 -1
  21. package/dist/commands/completion.js +9 -2
  22. package/dist/commands/config.js +159 -20
  23. package/dist/commands/feedback.js +1 -1
  24. package/dist/commands/schema.d.ts +63 -0
  25. package/dist/commands/schema.js +12 -12
  26. package/dist/commands/sdd/backlog.d.ts +3 -0
  27. package/dist/commands/sdd/backlog.js +54 -0
  28. package/dist/commands/sdd/execution.js +147 -16
  29. package/dist/commands/sdd/plugin.d.ts +3 -0
  30. package/dist/commands/sdd/plugin.js +153 -0
  31. package/dist/commands/sdd/shared.js +2 -23
  32. package/dist/commands/sdd/skills.js +7 -0
  33. package/dist/commands/sdd.js +69 -12
  34. package/dist/commands/spec.js +9 -9
  35. package/dist/commands/validate.js +6 -6
  36. package/dist/commands/workflow/instructions.js +6 -6
  37. package/dist/commands/workflow/new-change.js +3 -3
  38. package/dist/commands/workflow/shared.d.ts +1 -1
  39. package/dist/commands/workflow/shared.js +4 -4
  40. package/dist/core/archive.js +15 -5
  41. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  42. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  43. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  44. package/dist/core/artifact-graph/resolver.js +6 -6
  45. package/dist/core/branding.js +3 -3
  46. package/dist/core/cli/command-matrix.js +10 -1
  47. package/dist/core/cli-command-quality.d.ts +27 -0
  48. package/dist/core/cli-command-quality.js +171 -0
  49. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  50. package/dist/core/command-generation/adapters/costrict.js +2 -2
  51. package/dist/core/command-generation/types.d.ts +1 -1
  52. package/dist/core/completions/command-registry.d.ts +1 -1
  53. package/dist/core/completions/command-registry.js +155 -12
  54. package/dist/core/completions/completion-provider.d.ts +14 -1
  55. package/dist/core/completions/completion-provider.js +29 -1
  56. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  57. package/dist/core/completions/generators/bash-generator.js +20 -12
  58. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  59. package/dist/core/completions/generators/fish-generator.js +39 -25
  60. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  61. package/dist/core/completions/generators/powershell-generator.js +21 -11
  62. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  63. package/dist/core/completions/generators/zsh-generator.js +21 -42
  64. package/dist/core/completions/installers/bash-installer.js +6 -6
  65. package/dist/core/completions/installers/fish-installer.js +1 -1
  66. package/dist/core/completions/installers/powershell-installer.js +14 -14
  67. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  68. package/dist/core/completions/installers/zsh-installer.js +36 -8
  69. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  70. package/dist/core/completions/templates/bash-templates.js +12 -6
  71. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  72. package/dist/core/completions/templates/fish-templates.js +20 -9
  73. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  74. package/dist/core/completions/templates/powershell-templates.js +13 -4
  75. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  76. package/dist/core/completions/templates/zsh-templates.js +18 -9
  77. package/dist/core/config-schema.d.ts +3 -1
  78. package/dist/core/config-schema.js +26 -1
  79. package/dist/core/config.d.ts +3 -3
  80. package/dist/core/config.js +4 -4
  81. package/dist/core/global-config.d.ts +41 -12
  82. package/dist/core/global-config.js +344 -27
  83. package/dist/core/index.d.ts +1 -1
  84. package/dist/core/index.js +2 -2
  85. package/dist/core/init.d.ts +6 -1
  86. package/dist/core/init.js +99 -77
  87. package/dist/core/legacy-cleanup.d.ts +17 -17
  88. package/dist/core/legacy-cleanup.js +96 -79
  89. package/dist/core/list.js +18 -4
  90. package/dist/core/migration.d.ts +3 -1
  91. package/dist/core/migration.js +7 -8
  92. package/dist/core/parsers/change-parser.js +1 -1
  93. package/dist/core/parsers/markdown-parser.js +2 -2
  94. package/dist/core/profile-sync-drift.d.ts +1 -1
  95. package/dist/core/profile-sync-drift.js +13 -13
  96. package/dist/core/project-config.d.ts +4 -4
  97. package/dist/core/project-config.js +11 -11
  98. package/dist/core/schemas/change.schema.d.ts +1 -1
  99. package/dist/core/schemas/change.schema.js +1 -1
  100. package/dist/core/schemas/spec.schema.d.ts +1 -1
  101. package/dist/core/schemas/spec.schema.js +1 -1
  102. package/dist/core/sdd/adr.js +23 -1
  103. package/dist/core/sdd/agent-binding.d.ts +346 -0
  104. package/dist/core/sdd/agent-binding.js +343 -0
  105. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  106. package/dist/core/sdd/backlog-cli.js +146 -0
  107. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  108. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  109. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  110. package/dist/core/sdd/backlog-projection.js +89 -0
  111. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  112. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  113. package/dist/core/sdd/bootstrap.js +2 -2
  114. package/dist/core/sdd/check.d.ts +42 -0
  115. package/dist/core/sdd/check.js +22 -22
  116. package/dist/core/sdd/contract.d.ts +13 -0
  117. package/dist/core/sdd/contract.js +36 -0
  118. package/dist/core/sdd/coordination/coordination-adapters.d.ts +38 -0
  119. package/dist/core/sdd/coordination/coordination-adapters.js +139 -1
  120. package/dist/core/sdd/deepagent-contracts.d.ts +276 -0
  121. package/dist/core/sdd/deepagent-contracts.js +173 -0
  122. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  123. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  124. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  125. package/dist/core/sdd/deepagents/backend.js +174 -0
  126. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  127. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  128. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  129. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  130. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  131. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  132. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  133. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  134. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  135. package/dist/core/sdd/deepagents/policy.js +358 -0
  136. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  137. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  138. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  139. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  140. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  141. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  142. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  143. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  144. package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
  145. package/dist/core/sdd/default-bootstrap-files.js +36 -2
  146. package/dist/core/sdd/default-skills.d.ts +30 -0
  147. package/dist/core/sdd/default-skills.js +181 -5
  148. package/dist/core/sdd/devtrack-api-appliance.d.ts +84 -0
  149. package/dist/core/sdd/devtrack-api-appliance.js +257 -0
  150. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  151. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  152. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  153. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  154. package/dist/core/sdd/diagnose.d.ts +59 -0
  155. package/dist/core/sdd/diagnose.js +37 -37
  156. package/dist/core/sdd/docs-sync.js +33 -5
  157. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  158. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  159. package/dist/core/sdd/domain/transition-engine.js +1 -0
  160. package/dist/core/sdd/entity-reference.d.ts +5 -0
  161. package/dist/core/sdd/entity-reference.js +22 -0
  162. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  163. package/dist/core/sdd/governance-backfill.js +359 -0
  164. package/dist/core/sdd/governance-parser.d.ts +21 -0
  165. package/dist/core/sdd/governance-parser.js +91 -0
  166. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  167. package/dist/core/sdd/governance-schemas.js +143 -0
  168. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  169. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  170. package/dist/core/sdd/init.d.ts +3 -0
  171. package/dist/core/sdd/init.js +6 -3
  172. package/dist/core/sdd/json-schema.js +100 -6
  173. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  174. package/dist/core/sdd/knowledge-graph.js +288 -0
  175. package/dist/core/sdd/legacy-operations.js +431 -43
  176. package/dist/core/sdd/lenses.d.ts +1 -0
  177. package/dist/core/sdd/lenses.js +29 -1
  178. package/dist/core/sdd/migrate-workspace.js +56 -2
  179. package/dist/core/sdd/migrate.d.ts +1 -1
  180. package/dist/core/sdd/migrate.js +36 -2
  181. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  182. package/dist/core/sdd/package-structure-gate.js +362 -0
  183. package/dist/core/sdd/parallel-feat-automation.d.ts +152 -0
  184. package/dist/core/sdd/parallel-feat-automation.js +212 -0
  185. package/dist/core/sdd/plugin-broker.d.ts +558 -0
  186. package/dist/core/sdd/plugin-broker.js +482 -0
  187. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  188. package/dist/core/sdd/plugin-certification.js +453 -0
  189. package/dist/core/sdd/plugin-cli.d.ts +109 -0
  190. package/dist/core/sdd/plugin-cli.js +198 -0
  191. package/dist/core/sdd/plugin-evidence.d.ts +275 -0
  192. package/dist/core/sdd/plugin-evidence.js +307 -0
  193. package/dist/core/sdd/plugin-manifest.d.ts +164 -0
  194. package/dist/core/sdd/plugin-manifest.js +215 -0
  195. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  196. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  197. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  198. package/dist/core/sdd/plugin-policy.js +212 -0
  199. package/dist/core/sdd/plugin-registry.d.ts +311 -0
  200. package/dist/core/sdd/plugin-registry.js +138 -0
  201. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  202. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  203. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  204. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  205. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  206. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  207. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  208. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  209. package/dist/core/sdd/quality-validation.d.ts +547 -0
  210. package/dist/core/sdd/quality-validation.js +239 -0
  211. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  212. package/dist/core/sdd/resolve-project-root.js +11 -5
  213. package/dist/core/sdd/sanitize.d.ts +30 -1
  214. package/dist/core/sdd/sanitize.js +23 -23
  215. package/dist/core/sdd/services/agent-run.service.d.ts +65 -0
  216. package/dist/core/sdd/services/agent-run.service.js +189 -0
  217. package/dist/core/sdd/services/breakdown.service.js +2 -1
  218. package/dist/core/sdd/services/context.service.js +18 -16
  219. package/dist/core/sdd/services/debate.service.js +15 -2
  220. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  221. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  222. package/dist/core/sdd/services/finalize.service.d.ts +80 -0
  223. package/dist/core/sdd/services/finalize.service.js +323 -24
  224. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  225. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  226. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  227. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  228. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  229. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  230. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  231. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  232. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  233. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  234. package/dist/core/sdd/services/onboard.service.js +2 -1
  235. package/dist/core/sdd/services/rebuild.service.js +6 -1
  236. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  237. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  238. package/dist/core/sdd/services/start.service.js +6 -4
  239. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  240. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  241. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  242. package/dist/core/sdd/skill-evidence.js +38 -0
  243. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  244. package/dist/core/sdd/skill-policy-pool.js +185 -0
  245. package/dist/core/sdd/state.d.ts +22 -0
  246. package/dist/core/sdd/state.js +66 -41
  247. package/dist/core/sdd/structural-health.d.ts +42 -42
  248. package/dist/core/sdd/types.d.ts +33 -7
  249. package/dist/core/sdd/types.js +17 -0
  250. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  251. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  252. package/dist/core/sdd/workspace-schemas.d.ts +285 -14
  253. package/dist/core/sdd/workspace-schemas.js +148 -0
  254. package/dist/core/sdd/write-manifest.js +22 -4
  255. package/dist/core/shared/skill-generation.d.ts +1 -1
  256. package/dist/core/shared/skill-generation.js +15 -15
  257. package/dist/core/shared/tool-detection.d.ts +3 -3
  258. package/dist/core/shared/tool-detection.js +14 -14
  259. package/dist/core/specs-apply.js +6 -6
  260. package/dist/core/templates/index.d.ts +1 -1
  261. package/dist/core/templates/index.js +1 -1
  262. package/dist/core/templates/workflows/apply-change.js +14 -14
  263. package/dist/core/templates/workflows/archive-change.js +32 -32
  264. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  265. package/dist/core/templates/workflows/continue-change.js +12 -12
  266. package/dist/core/templates/workflows/explore.js +29 -29
  267. package/dist/core/templates/workflows/feedback.js +6 -6
  268. package/dist/core/templates/workflows/ff-change.js +24 -24
  269. package/dist/core/templates/workflows/new-change.js +20 -20
  270. package/dist/core/templates/workflows/onboard.js +33 -33
  271. package/dist/core/templates/workflows/propose.js +23 -23
  272. package/dist/core/templates/workflows/sdd.js +8 -8
  273. package/dist/core/templates/workflows/sync-specs.js +19 -19
  274. package/dist/core/templates/workflows/verify-change.js +17 -17
  275. package/dist/core/update.d.ts +2 -2
  276. package/dist/core/update.js +16 -15
  277. package/dist/core/validation/constants.d.ts +1 -1
  278. package/dist/core/validation/constants.js +1 -1
  279. package/dist/core/view.js +11 -11
  280. package/dist/telemetry/config.d.ts +2 -1
  281. package/dist/telemetry/config.js +17 -8
  282. package/dist/telemetry/index.d.ts +10 -2
  283. package/dist/telemetry/index.js +40 -7
  284. package/dist/ui/ascii-patterns.d.ts +2 -2
  285. package/dist/ui/ascii-patterns.js +2 -2
  286. package/dist/ui/welcome-screen.js +2 -2
  287. package/dist/utils/change-metadata.d.ts +4 -4
  288. package/dist/utils/change-metadata.js +6 -6
  289. package/dist/utils/change-utils.d.ts +3 -3
  290. package/dist/utils/change-utils.js +5 -5
  291. package/dist/utils/file-system.js +1 -1
  292. package/dist/utils/interactive.js +1 -1
  293. package/dist/utils/item-discovery.js +4 -4
  294. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  295. package/dist/utils/legacy-spec-compat.js +2 -0
  296. package/dist/utils/shell-detection.d.ts +1 -0
  297. package/dist/utils/shell-detection.js +16 -0
  298. package/package.json +27 -17
  299. package/schemas/sdd/1-spec.schema.json +1 -1
  300. package/schemas/sdd/2-plan.schema.json +73 -1
  301. package/schemas/sdd/3-tasks.schema.json +73 -1
  302. package/schemas/sdd/4-changelog.schema.json +1 -1
  303. package/schemas/sdd/5-quality.schema.json +442 -2
  304. package/schemas/sdd/adr.schema.json +148 -0
  305. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  306. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  307. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  308. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  309. package/schemas/sdd/codesdd-plugin.schema.json +474 -0
  310. package/schemas/sdd/debate.schema.json +244 -0
  311. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  312. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  313. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  314. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  315. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  316. package/schemas/sdd/deepagent-run-request.schema.json +321 -0
  317. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  318. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  319. package/schemas/sdd/discarded.schema.json +127 -0
  320. package/schemas/sdd/epic.schema.json +147 -0
  321. package/schemas/sdd/insight.schema.json +136 -0
  322. package/schemas/sdd/parallel-feat-automation-plan.schema.json +215 -0
  323. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  324. package/schemas/sdd/plugin-artifact-manifest.schema.json +150 -0
  325. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  326. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  327. package/schemas/sdd/plugin-evidence-manifest.schema.json +569 -0
  328. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  329. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  330. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  331. package/schemas/sdd/plugin-registry.schema.json +558 -0
  332. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  333. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +845 -0
  334. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  335. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  336. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  337. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  338. package/schemas/sdd/quality-evidence-bundle.schema.json +1228 -0
  339. package/schemas/sdd/quality-run.schema.json +197 -0
  340. package/schemas/sdd/quality-scenario.schema.json +252 -0
  341. package/schemas/sdd/workspace-catalog.schema.json +9841 -22
  342. package/schemas/spec-driven/schema.yaml +4 -4
  343. package/schemas/spec-driven/templates/proposal.md +1 -1
  344. package/dist/utils/openspec-compat.d.ts +0 -2
  345. package/dist/utils/openspec-compat.js +0 -2
@@ -1,4 +1,8 @@
1
1
  import { withStateLock } from '../state-lock.js';
2
+ import { createHash } from 'node:crypto';
3
+ import path from 'node:path';
4
+ import { promises as fs } from 'node:fs';
5
+ import { createProjectFingerprint, ensureGlobalCacheLayout, getGlobalCacheDir } from '../../global-config.js';
2
6
  export class FileSystemLockAdapter {
3
7
  stateDir;
4
8
  constructor(stateDir) {
@@ -31,6 +35,131 @@ export class InMemoryCoordinationCache {
31
35
  this.entries.clear();
32
36
  }
33
37
  }
38
+ export class MultiTierCoordinationCache {
39
+ l1Cache = new InMemoryCoordinationCache();
40
+ projectFingerprint;
41
+ configFingerprint;
42
+ namespace;
43
+ l2Root;
44
+ constructor(options) {
45
+ this.projectFingerprint = createProjectFingerprint(options.projectRoot);
46
+ this.configFingerprint = options.configFingerprint ?? 'default';
47
+ this.namespace = options.namespace ?? 'coordination';
48
+ this.l2Root = path.join(options.cacheRootDir ?? getGlobalCacheDir(), 'projects', this.projectFingerprint, this.namespace);
49
+ }
50
+ async get(key) {
51
+ const l1Value = await this.l1Cache.get(key);
52
+ if (typeof l1Value !== 'undefined') {
53
+ return l1Value;
54
+ }
55
+ const filePath = this.toEntryPath(key);
56
+ const diskEntry = await this.readEntry(filePath);
57
+ if (!diskEntry) {
58
+ return undefined;
59
+ }
60
+ const ttlMs = this.remainingTtlMs(diskEntry.expires_at);
61
+ if (ttlMs === 0) {
62
+ await this.safeUnlink(filePath);
63
+ return undefined;
64
+ }
65
+ await this.l1Cache.set(key, diskEntry.value, ttlMs > 0 ? { ttlMs } : {});
66
+ return diskEntry.value;
67
+ }
68
+ async set(key, value, options = {}) {
69
+ await this.l1Cache.set(key, value, options);
70
+ await fs.mkdir(this.l2Root, { recursive: true });
71
+ const entry = {
72
+ schema_version: 1,
73
+ key,
74
+ value,
75
+ created_at: new Date().toISOString(),
76
+ expires_at: options.ttlMs ? new Date(Date.now() + options.ttlMs).toISOString() : undefined,
77
+ project_fingerprint: this.projectFingerprint,
78
+ config_fingerprint: this.configFingerprint,
79
+ namespace: this.namespace,
80
+ };
81
+ await fs.writeFile(this.toEntryPath(key), JSON.stringify(entry), 'utf-8');
82
+ }
83
+ async delete(key) {
84
+ await this.l1Cache.delete(key);
85
+ await this.safeUnlink(this.toEntryPath(key));
86
+ }
87
+ async clear() {
88
+ await this.l1Cache.clear();
89
+ await fs.rm(this.l2Root, { recursive: true, force: true });
90
+ }
91
+ async pruneExpired() {
92
+ const files = await this.listEntryFiles();
93
+ let pruned = 0;
94
+ for (const filePath of files) {
95
+ const entry = await this.readEntry(filePath);
96
+ if (!entry) {
97
+ continue;
98
+ }
99
+ if (this.remainingTtlMs(entry.expires_at) === 0) {
100
+ await this.safeUnlink(filePath);
101
+ pruned += 1;
102
+ }
103
+ }
104
+ return pruned;
105
+ }
106
+ describeTierState() {
107
+ return {
108
+ root: this.l2Root,
109
+ projectFingerprint: this.projectFingerprint,
110
+ namespace: this.namespace,
111
+ };
112
+ }
113
+ toEntryPath(key) {
114
+ const hashedKey = createHash('sha256').update(key).digest('hex');
115
+ return path.join(this.l2Root, `${hashedKey}.json`);
116
+ }
117
+ remainingTtlMs(expiresAtIso) {
118
+ if (!expiresAtIso) {
119
+ return -1;
120
+ }
121
+ const expiresAt = Date.parse(expiresAtIso);
122
+ if (Number.isNaN(expiresAt)) {
123
+ return 0;
124
+ }
125
+ const remaining = expiresAt - Date.now();
126
+ return remaining > 0 ? remaining : 0;
127
+ }
128
+ async listEntryFiles() {
129
+ try {
130
+ const files = await fs.readdir(this.l2Root);
131
+ return files
132
+ .filter((fileName) => fileName.endsWith('.json'))
133
+ .map((fileName) => path.join(this.l2Root, fileName));
134
+ }
135
+ catch {
136
+ return [];
137
+ }
138
+ }
139
+ async readEntry(filePath) {
140
+ try {
141
+ const raw = await fs.readFile(filePath, 'utf-8');
142
+ const parsed = JSON.parse(raw);
143
+ if (parsed.schema_version !== 1 ||
144
+ parsed.project_fingerprint !== this.projectFingerprint ||
145
+ parsed.config_fingerprint !== this.configFingerprint) {
146
+ return undefined;
147
+ }
148
+ return parsed;
149
+ }
150
+ catch {
151
+ return undefined;
152
+ }
153
+ }
154
+ async safeUnlink(filePath) {
155
+ try {
156
+ await fs.unlink(filePath);
157
+ }
158
+ catch {
159
+ // best effort cleanup
160
+ }
161
+ }
162
+ }
34
163
  export class InMemoryCoordinationQueue {
35
164
  topics = new Map();
36
165
  async enqueue(topic, item) {
@@ -68,9 +197,18 @@ export function resolveRedisBoundaryConfig(env = process.env) {
68
197
  };
69
198
  }
70
199
  export function createFilesystemFirstCoordinationAdapters(options) {
200
+ if (!options.cacheRootDir) {
201
+ ensureGlobalCacheLayout();
202
+ }
71
203
  const redis = resolveRedisBoundaryConfig(options.env);
204
+ const cache = new MultiTierCoordinationCache({
205
+ projectRoot: options.projectRoot ?? process.cwd(),
206
+ configFingerprint: options.configFingerprint,
207
+ cacheRootDir: options.cacheRootDir,
208
+ });
72
209
  return {
73
210
  mode: 'filesystem',
211
+ cacheTier: cache.describeTierState(),
74
212
  redis: {
75
213
  ...redis,
76
214
  status: redis.requested ? 'requested-unavailable' : 'disabled',
@@ -79,7 +217,7 @@ export function createFilesystemFirstCoordinationAdapters(options) {
79
217
  : 'Redis is optional and disabled; filesystem-first defaults are authoritative.',
80
218
  },
81
219
  locks: new FileSystemLockAdapter(options.stateDir),
82
- cache: new InMemoryCoordinationCache(),
220
+ cache,
83
221
  queues: new InMemoryCoordinationQueue(),
84
222
  events: new InMemoryCoordinationEventBus(),
85
223
  };
@@ -0,0 +1,276 @@
1
+ import { z } from 'zod';
2
+ export declare const deepagentEnvContractSchema: z.ZodObject<{
3
+ schema_version: z.ZodLiteral<1>;
4
+ contract: z.ZodLiteral<"deepagent-env-contract/v1">;
5
+ runtime_mode: z.ZodDefault<z.ZodEnum<{
6
+ disabled: "disabled";
7
+ fake: "fake";
8
+ "deepagents-js": "deepagents-js";
9
+ }>>;
10
+ model_ref: z.ZodOptional<z.ZodString>;
11
+ planner_model_ref: z.ZodOptional<z.ZodString>;
12
+ reviewer_model_ref: z.ZodOptional<z.ZodString>;
13
+ coder_model_ref: z.ZodOptional<z.ZodString>;
14
+ execution_limits: z.ZodDefault<z.ZodObject<{
15
+ max_iterations: z.ZodOptional<z.ZodNumber>;
16
+ max_subagents: z.ZodOptional<z.ZodNumber>;
17
+ max_parallel: z.ZodOptional<z.ZodNumber>;
18
+ }, z.core.$strip>>;
19
+ provider_profile: z.ZodOptional<z.ZodString>;
20
+ env_allowlist: z.ZodDefault<z.ZodArray<z.ZodString>>;
21
+ secret_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
22
+ credential_env_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
23
+ endpoint_env_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
24
+ sandbox_passthrough_rules: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ network_mode: z.ZodDefault<z.ZodEnum<{
26
+ disabled: "disabled";
27
+ restricted: "restricted";
28
+ enabled: "enabled";
29
+ }>>;
30
+ blocked_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
31
+ masked_config_fingerprint: z.ZodString;
32
+ }, z.core.$strip>;
33
+ export declare const deepagentRunRequestSchema: z.ZodObject<{
34
+ schema_version: z.ZodLiteral<1>;
35
+ contract: z.ZodLiteral<"deepagent-run-request/v1">;
36
+ provider: z.ZodLiteral<"deepagents">;
37
+ feature_ref: z.ZodString;
38
+ mode: z.ZodEnum<{
39
+ validate: "validate";
40
+ "read-only": "read-only";
41
+ plan: "plan";
42
+ "apply-sandbox": "apply-sandbox";
43
+ "apply-approved": "apply-approved";
44
+ }>;
45
+ objective: z.ZodString;
46
+ allowed_tools: z.ZodDefault<z.ZodArray<z.ZodString>>;
47
+ write_scope: z.ZodObject<{
48
+ allow_project_writes: z.ZodDefault<z.ZodBoolean>;
49
+ allowed_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
50
+ }, z.core.$strip>;
51
+ network_policy: z.ZodObject<{
52
+ mode: z.ZodDefault<z.ZodEnum<{
53
+ disabled: "disabled";
54
+ restricted: "restricted";
55
+ enabled: "enabled";
56
+ }>>;
57
+ allowlist: z.ZodDefault<z.ZodArray<z.ZodString>>;
58
+ }, z.core.$strip>;
59
+ env_contract: z.ZodObject<{
60
+ schema_version: z.ZodLiteral<1>;
61
+ contract: z.ZodLiteral<"deepagent-env-contract/v1">;
62
+ runtime_mode: z.ZodDefault<z.ZodEnum<{
63
+ disabled: "disabled";
64
+ fake: "fake";
65
+ "deepagents-js": "deepagents-js";
66
+ }>>;
67
+ model_ref: z.ZodOptional<z.ZodString>;
68
+ planner_model_ref: z.ZodOptional<z.ZodString>;
69
+ reviewer_model_ref: z.ZodOptional<z.ZodString>;
70
+ coder_model_ref: z.ZodOptional<z.ZodString>;
71
+ execution_limits: z.ZodDefault<z.ZodObject<{
72
+ max_iterations: z.ZodOptional<z.ZodNumber>;
73
+ max_subagents: z.ZodOptional<z.ZodNumber>;
74
+ max_parallel: z.ZodOptional<z.ZodNumber>;
75
+ }, z.core.$strip>>;
76
+ provider_profile: z.ZodOptional<z.ZodString>;
77
+ env_allowlist: z.ZodDefault<z.ZodArray<z.ZodString>>;
78
+ secret_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
79
+ credential_env_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
80
+ endpoint_env_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
81
+ sandbox_passthrough_rules: z.ZodDefault<z.ZodArray<z.ZodString>>;
82
+ network_mode: z.ZodDefault<z.ZodEnum<{
83
+ disabled: "disabled";
84
+ restricted: "restricted";
85
+ enabled: "enabled";
86
+ }>>;
87
+ blocked_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
88
+ masked_config_fingerprint: z.ZodString;
89
+ }, z.core.$strip>;
90
+ skill_ids: z.ZodDefault<z.ZodArray<z.ZodString>>;
91
+ plugin_envelopes: z.ZodDefault<z.ZodArray<z.ZodObject<{
92
+ plugin_id: z.ZodString;
93
+ capability: z.ZodString;
94
+ version: z.ZodString;
95
+ }, z.core.$strip>>>;
96
+ reversa_scope: z.ZodObject<{
97
+ enabled: z.ZodDefault<z.ZodBoolean>;
98
+ objective: z.ZodOptional<z.ZodString>;
99
+ targets: z.ZodDefault<z.ZodArray<z.ZodString>>;
100
+ }, z.core.$strip>;
101
+ expected_evidence: z.ZodArray<z.ZodString>;
102
+ }, z.core.$strip>;
103
+ export declare const deepagentRunPlanSchema: z.ZodObject<{
104
+ schema_version: z.ZodLiteral<1>;
105
+ contract: z.ZodLiteral<"deepagent-run-plan/v1">;
106
+ run_id: z.ZodString;
107
+ feature_ref: z.ZodString;
108
+ mode: z.ZodEnum<{
109
+ validate: "validate";
110
+ "read-only": "read-only";
111
+ plan: "plan";
112
+ "apply-sandbox": "apply-sandbox";
113
+ "apply-approved": "apply-approved";
114
+ }>;
115
+ tactical_steps: z.ZodArray<z.ZodObject<{
116
+ id: z.ZodString;
117
+ title: z.ZodString;
118
+ objective: z.ZodString;
119
+ subagent: z.ZodOptional<z.ZodString>;
120
+ }, z.core.$strip>>;
121
+ subagent_routing: z.ZodArray<z.ZodObject<{
122
+ subagent: z.ZodString;
123
+ purpose: z.ZodString;
124
+ task_ids: z.ZodDefault<z.ZodArray<z.ZodString>>;
125
+ }, z.core.$strip>>;
126
+ required_approvals: z.ZodDefault<z.ZodArray<z.ZodString>>;
127
+ expected_tool_calls: z.ZodDefault<z.ZodArray<z.ZodString>>;
128
+ write_manifest_preview: z.ZodDefault<z.ZodArray<z.ZodString>>;
129
+ validation_matrix: z.ZodDefault<z.ZodArray<z.ZodObject<{
130
+ requirement: z.ZodString;
131
+ validation: z.ZodString;
132
+ evidence_kind: z.ZodString;
133
+ }, z.core.$strip>>>;
134
+ residual_risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
135
+ id: z.ZodString;
136
+ severity: z.ZodEnum<{
137
+ low: "low";
138
+ medium: "medium";
139
+ high: "high";
140
+ critical: "critical";
141
+ }>;
142
+ summary: z.ZodString;
143
+ mitigation: z.ZodOptional<z.ZodString>;
144
+ }, z.core.$strip>>>;
145
+ }, z.core.$strip>;
146
+ export declare const deepagentToolCallEvidenceSchema: z.ZodObject<{
147
+ schema_version: z.ZodLiteral<1>;
148
+ contract: z.ZodLiteral<"deepagent-tool-call-evidence/v1">;
149
+ tool_name: z.ZodString;
150
+ input_hash: z.ZodString;
151
+ output_hash: z.ZodString;
152
+ state_access_class: z.ZodEnum<{
153
+ read: "read";
154
+ write: "write";
155
+ execute: "execute";
156
+ network: "network";
157
+ }>;
158
+ policy_gate: z.ZodString;
159
+ hitl_decision: z.ZodDefault<z.ZodEnum<{
160
+ edit: "edit";
161
+ none: "none";
162
+ approve: "approve";
163
+ reject: "reject";
164
+ respond: "respond";
165
+ }>>;
166
+ duration_ms: z.ZodNumber;
167
+ result: z.ZodEnum<{
168
+ error: "error";
169
+ blocked: "blocked";
170
+ ok: "ok";
171
+ }>;
172
+ }, z.core.$strip>;
173
+ export declare const deepagentSubagentEvidenceSchema: z.ZodObject<{
174
+ schema_version: z.ZodLiteral<1>;
175
+ contract: z.ZodLiteral<"deepagent-subagent-evidence/v1">;
176
+ subagent_name: z.ZodString;
177
+ prompt_purpose: z.ZodString;
178
+ tools_used: z.ZodDefault<z.ZodArray<z.ZodString>>;
179
+ skills_used: z.ZodDefault<z.ZodArray<z.ZodString>>;
180
+ inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
181
+ structured_output: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
182
+ confidence: z.ZodNumber;
183
+ risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
184
+ id: z.ZodString;
185
+ severity: z.ZodEnum<{
186
+ low: "low";
187
+ medium: "medium";
188
+ high: "high";
189
+ critical: "critical";
190
+ }>;
191
+ summary: z.ZodString;
192
+ mitigation: z.ZodOptional<z.ZodString>;
193
+ }, z.core.$strip>>>;
194
+ }, z.core.$strip>;
195
+ export declare const deepagentDecisionEvidenceSchema: z.ZodObject<{
196
+ schema_version: z.ZodLiteral<1>;
197
+ contract: z.ZodLiteral<"deepagent-decision-evidence/v1">;
198
+ decision_point: z.ZodString;
199
+ alternatives: z.ZodArray<z.ZodString>;
200
+ selected_option: z.ZodString;
201
+ adr_required: z.ZodBoolean;
202
+ rationale: z.ZodString;
203
+ approvals: z.ZodDefault<z.ZodArray<z.ZodString>>;
204
+ }, z.core.$strip>;
205
+ export declare const deepagentQualityEvidenceSchema: z.ZodObject<{
206
+ schema_version: z.ZodLiteral<1>;
207
+ contract: z.ZodLiteral<"deepagent-quality-evidence/v1">;
208
+ matrix: z.ZodArray<z.ZodObject<{
209
+ requirement_id: z.ZodString;
210
+ validation_id: z.ZodString;
211
+ evidence_refs: z.ZodDefault<z.ZodArray<z.ZodObject<{
212
+ kind: z.ZodString;
213
+ ref: z.ZodString;
214
+ path: z.ZodOptional<z.ZodString>;
215
+ }, z.core.$strip>>>;
216
+ residual_risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
217
+ id: z.ZodString;
218
+ severity: z.ZodEnum<{
219
+ low: "low";
220
+ medium: "medium";
221
+ high: "high";
222
+ critical: "critical";
223
+ }>;
224
+ summary: z.ZodString;
225
+ mitigation: z.ZodOptional<z.ZodString>;
226
+ }, z.core.$strip>>>;
227
+ }, z.core.$strip>>;
228
+ }, z.core.$strip>;
229
+ export declare const deepagentRunEvidenceSchema: z.ZodObject<{
230
+ schema_version: z.ZodLiteral<1>;
231
+ contract: z.ZodLiteral<"deepagent-run-evidence/v1">;
232
+ run_id: z.ZodString;
233
+ feature_ref: z.ZodString;
234
+ mode: z.ZodEnum<{
235
+ validate: "validate";
236
+ "read-only": "read-only";
237
+ plan: "plan";
238
+ "apply-sandbox": "apply-sandbox";
239
+ "apply-approved": "apply-approved";
240
+ }>;
241
+ status: z.ZodEnum<{
242
+ completed: "completed";
243
+ blocked: "blocked";
244
+ failed: "failed";
245
+ running: "running";
246
+ allowed: "allowed";
247
+ }>;
248
+ model_metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
249
+ config_fingerprint: z.ZodString;
250
+ plan_ref: z.ZodString;
251
+ artifacts: z.ZodDefault<z.ZodArray<z.ZodString>>;
252
+ validations: z.ZodDefault<z.ZodArray<z.ZodString>>;
253
+ decisions: z.ZodDefault<z.ZodArray<z.ZodObject<{
254
+ schema_version: z.ZodLiteral<1>;
255
+ contract: z.ZodLiteral<"deepagent-decision-evidence/v1">;
256
+ decision_point: z.ZodString;
257
+ alternatives: z.ZodArray<z.ZodString>;
258
+ selected_option: z.ZodString;
259
+ adr_required: z.ZodBoolean;
260
+ rationale: z.ZodString;
261
+ approvals: z.ZodDefault<z.ZodArray<z.ZodString>>;
262
+ }, z.core.$strip>>>;
263
+ risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
264
+ id: z.ZodString;
265
+ severity: z.ZodEnum<{
266
+ low: "low";
267
+ medium: "medium";
268
+ high: "high";
269
+ critical: "critical";
270
+ }>;
271
+ summary: z.ZodString;
272
+ mitigation: z.ZodOptional<z.ZodString>;
273
+ }, z.core.$strip>>>;
274
+ finalize_intent: z.ZodDefault<z.ZodBoolean>;
275
+ }, z.core.$strip>;
276
+ //# sourceMappingURL=deepagent-contracts.d.ts.map
@@ -0,0 +1,173 @@
1
+ import { z } from 'zod';
2
+ const FEATURE_REF_PATTERN = /^FEAT-\d{4}$/;
3
+ const deepagentModeSchema = z.enum([
4
+ 'read-only',
5
+ 'plan',
6
+ 'validate',
7
+ 'apply-sandbox',
8
+ 'apply-approved',
9
+ ]);
10
+ const deepagentStatusSchema = z.enum(['allowed', 'blocked', 'running', 'completed', 'failed']);
11
+ const deepagentNetworkModeSchema = z.enum(['disabled', 'restricted', 'enabled']);
12
+ const deepagentRuntimeModeSchema = z.enum(['disabled', 'fake', 'deepagents-js']);
13
+ const deepagentExecutionLimitsSchema = z.object({
14
+ max_iterations: z.number().int().positive().optional(),
15
+ max_subagents: z.number().int().positive().optional(),
16
+ max_parallel: z.number().int().positive().optional(),
17
+ });
18
+ const deepagentEvidenceRefSchema = z.object({
19
+ kind: z.string().min(1),
20
+ ref: z.string().min(1),
21
+ path: z.string().min(1).optional(),
22
+ });
23
+ const deepagentRiskSchema = z.object({
24
+ id: z.string().min(1),
25
+ severity: z.enum(['low', 'medium', 'high', 'critical']),
26
+ summary: z.string().min(1),
27
+ mitigation: z.string().min(1).optional(),
28
+ });
29
+ export const deepagentEnvContractSchema = z.object({
30
+ schema_version: z.literal(1),
31
+ contract: z.literal('deepagent-env-contract/v1'),
32
+ runtime_mode: deepagentRuntimeModeSchema.default('disabled'),
33
+ model_ref: z.string().min(1).optional(),
34
+ planner_model_ref: z.string().min(1).optional(),
35
+ reviewer_model_ref: z.string().min(1).optional(),
36
+ coder_model_ref: z.string().min(1).optional(),
37
+ execution_limits: deepagentExecutionLimitsSchema.default({}),
38
+ provider_profile: z.string().min(1).optional(),
39
+ env_allowlist: z.array(z.string().min(1)).default([]),
40
+ secret_refs: z.array(z.string().min(1)).default([]),
41
+ credential_env_refs: z.array(z.string().min(1)).default([]),
42
+ endpoint_env_refs: z.array(z.string().min(1)).default([]),
43
+ sandbox_passthrough_rules: z.array(z.string().min(1)).default([]),
44
+ network_mode: deepagentNetworkModeSchema.default('disabled'),
45
+ blocked_paths: z.array(z.string().min(1)).default([]),
46
+ masked_config_fingerprint: z.string().min(1),
47
+ });
48
+ export const deepagentRunRequestSchema = z.object({
49
+ schema_version: z.literal(1),
50
+ contract: z.literal('deepagent-run-request/v1'),
51
+ provider: z.literal('deepagents'),
52
+ feature_ref: z.string().regex(FEATURE_REF_PATTERN),
53
+ mode: deepagentModeSchema,
54
+ objective: z.string().min(1),
55
+ allowed_tools: z.array(z.string().min(1)).default([]),
56
+ write_scope: z.object({
57
+ allow_project_writes: z.boolean().default(false),
58
+ allowed_paths: z.array(z.string().min(1)).default([]),
59
+ }),
60
+ network_policy: z.object({
61
+ mode: deepagentNetworkModeSchema.default('disabled'),
62
+ allowlist: z.array(z.string().min(1)).default([]),
63
+ }),
64
+ env_contract: deepagentEnvContractSchema,
65
+ skill_ids: z.array(z.string().min(1)).default([]),
66
+ plugin_envelopes: z
67
+ .array(z.object({
68
+ plugin_id: z.string().min(1),
69
+ capability: z.string().min(1),
70
+ version: z.string().min(1),
71
+ }))
72
+ .default([]),
73
+ reversa_scope: z.object({
74
+ enabled: z.boolean().default(false),
75
+ objective: z.string().min(1).optional(),
76
+ targets: z.array(z.string().min(1)).default([]),
77
+ }),
78
+ expected_evidence: z.array(z.string().min(1)).min(1),
79
+ });
80
+ export const deepagentRunPlanSchema = z.object({
81
+ schema_version: z.literal(1),
82
+ contract: z.literal('deepagent-run-plan/v1'),
83
+ run_id: z.string().min(1),
84
+ feature_ref: z.string().regex(FEATURE_REF_PATTERN),
85
+ mode: deepagentModeSchema,
86
+ tactical_steps: z
87
+ .array(z.object({
88
+ id: z.string().min(1),
89
+ title: z.string().min(1),
90
+ objective: z.string().min(1),
91
+ subagent: z.string().min(1).optional(),
92
+ }))
93
+ .min(1),
94
+ subagent_routing: z.array(z.object({
95
+ subagent: z.string().min(1),
96
+ purpose: z.string().min(1),
97
+ task_ids: z.array(z.string().min(1)).default([]),
98
+ })),
99
+ required_approvals: z.array(z.string().min(1)).default([]),
100
+ expected_tool_calls: z.array(z.string().min(1)).default([]),
101
+ write_manifest_preview: z.array(z.string().min(1)).default([]),
102
+ validation_matrix: z
103
+ .array(z.object({
104
+ requirement: z.string().min(1),
105
+ validation: z.string().min(1),
106
+ evidence_kind: z.string().min(1),
107
+ }))
108
+ .default([]),
109
+ residual_risks: z.array(deepagentRiskSchema).default([]),
110
+ });
111
+ export const deepagentToolCallEvidenceSchema = z.object({
112
+ schema_version: z.literal(1),
113
+ contract: z.literal('deepagent-tool-call-evidence/v1'),
114
+ tool_name: z.string().min(1),
115
+ input_hash: z.string().min(1),
116
+ output_hash: z.string().min(1),
117
+ state_access_class: z.enum(['read', 'write', 'execute', 'network']),
118
+ policy_gate: z.string().min(1),
119
+ hitl_decision: z.enum(['none', 'approve', 'reject', 'edit', 'respond']).default('none'),
120
+ duration_ms: z.number().int().nonnegative(),
121
+ result: z.enum(['ok', 'error', 'blocked']),
122
+ });
123
+ export const deepagentSubagentEvidenceSchema = z.object({
124
+ schema_version: z.literal(1),
125
+ contract: z.literal('deepagent-subagent-evidence/v1'),
126
+ subagent_name: z.string().min(1),
127
+ prompt_purpose: z.string().min(1),
128
+ tools_used: z.array(z.string().min(1)).default([]),
129
+ skills_used: z.array(z.string().min(1)).default([]),
130
+ inputs: z.record(z.string(), z.unknown()).default({}),
131
+ structured_output: z.record(z.string(), z.unknown()).default({}),
132
+ confidence: z.number().min(0).max(1),
133
+ risks: z.array(deepagentRiskSchema).default([]),
134
+ });
135
+ export const deepagentDecisionEvidenceSchema = z.object({
136
+ schema_version: z.literal(1),
137
+ contract: z.literal('deepagent-decision-evidence/v1'),
138
+ decision_point: z.string().min(1),
139
+ alternatives: z.array(z.string().min(1)).min(1),
140
+ selected_option: z.string().min(1),
141
+ adr_required: z.boolean(),
142
+ rationale: z.string().min(1),
143
+ approvals: z.array(z.string().min(1)).default([]),
144
+ });
145
+ export const deepagentQualityEvidenceSchema = z.object({
146
+ schema_version: z.literal(1),
147
+ contract: z.literal('deepagent-quality-evidence/v1'),
148
+ matrix: z
149
+ .array(z.object({
150
+ requirement_id: z.string().min(1),
151
+ validation_id: z.string().min(1),
152
+ evidence_refs: z.array(deepagentEvidenceRefSchema).default([]),
153
+ residual_risks: z.array(deepagentRiskSchema).default([]),
154
+ }))
155
+ .min(1),
156
+ });
157
+ export const deepagentRunEvidenceSchema = z.object({
158
+ schema_version: z.literal(1),
159
+ contract: z.literal('deepagent-run-evidence/v1'),
160
+ run_id: z.string().min(1),
161
+ feature_ref: z.string().regex(FEATURE_REF_PATTERN),
162
+ mode: deepagentModeSchema,
163
+ status: deepagentStatusSchema,
164
+ model_metadata: z.record(z.string(), z.unknown()).default({}),
165
+ config_fingerprint: z.string().min(1),
166
+ plan_ref: z.string().min(1),
167
+ artifacts: z.array(z.string().min(1)).default([]),
168
+ validations: z.array(z.string().min(1)).default([]),
169
+ decisions: z.array(deepagentDecisionEvidenceSchema).default([]),
170
+ risks: z.array(deepagentRiskSchema).default([]),
171
+ finalize_intent: z.boolean().default(false),
172
+ });
173
+ //# sourceMappingURL=deepagent-contracts.js.map
@@ -0,0 +1,2 @@
1
+ export declare function evaluateAdrGovernorDocument(content: string): string[];
2
+ //# sourceMappingURL=adr-governor.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { LENSES, extractSectionContent, validateDocumentAgainstLens } from '../lenses.js';
2
+ const ADR_TEMPLATE_SENTINELS = [
3
+ 'Describe the context that motivated this architecture decision, including constraints and trade-offs.',
4
+ 'Document the decision, the change scope, and the alternatives rejected.',
5
+ 'List positive impacts, residual risks, and mitigation actions.',
6
+ ];
7
+ export function evaluateAdrGovernorDocument(content) {
8
+ const trimmed = content.trim();
9
+ if (!trimmed) {
10
+ return ['ADR content is empty'];
11
+ }
12
+ const reasons = [];
13
+ const lensViolations = validateDocumentAgainstLens(trimmed, LENSES.adr);
14
+ if (lensViolations.length > 0) {
15
+ reasons.push(...lensViolations.map((violation) => `ADR lens violation: ${violation}`));
16
+ }
17
+ for (const sentinel of ADR_TEMPLATE_SENTINELS) {
18
+ if (trimmed.includes(sentinel)) {
19
+ reasons.push(`ADR still contains template placeholder text: ${sentinel}`);
20
+ }
21
+ }
22
+ for (const section of ['## Context', '## Decision', '## Consequences']) {
23
+ const sectionContent = extractSectionContent(trimmed, section);
24
+ if (sectionContent.trim().length < 20) {
25
+ reasons.push(`${section} must contain concrete decision content`);
26
+ }
27
+ }
28
+ return Array.from(new Set(reasons));
29
+ }
30
+ //# sourceMappingURL=adr-governor.js.map