codictator 0.0.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (835) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +5 -0
  3. package/dist/builtin-packs/core/fixtures/agent-assets-present/passing/basic/case.json +10 -0
  4. package/dist/builtin-packs/core/fixtures/agent-assets-present/violating/basic/case.json +10 -0
  5. package/dist/builtin-packs/core/fixtures/arch-boundaries/passing/basic/case.json +10 -0
  6. package/dist/builtin-packs/core/fixtures/arch-boundaries/violating/basic/case.json +10 -0
  7. package/dist/builtin-packs/core/fixtures/arch-module-mapped/passing/basic/case.json +10 -0
  8. package/dist/builtin-packs/core/fixtures/arch-module-mapped/violating/basic/case.json +10 -0
  9. package/dist/builtin-packs/core/fixtures/arch-module-size/passing/basic/case.json +10 -0
  10. package/dist/builtin-packs/core/fixtures/arch-module-size/violating/basic/case.json +10 -0
  11. package/dist/builtin-packs/core/fixtures/arch-no-cycles/passing/basic/case.json +10 -0
  12. package/dist/builtin-packs/core/fixtures/arch-no-cycles/violating/basic/case.json +10 -0
  13. package/dist/builtin-packs/core/fixtures/arch-profile-declared/passing/basic/case.json +10 -0
  14. package/dist/builtin-packs/core/fixtures/arch-profile-declared/violating/basic/case.json +10 -0
  15. package/dist/builtin-packs/core/fixtures/arch-public-entry/passing/basic/case.json +10 -0
  16. package/dist/builtin-packs/core/fixtures/arch-public-entry/violating/basic/case.json +10 -0
  17. package/dist/builtin-packs/core/fixtures/branch-protection/passing/basic/case.json +10 -0
  18. package/dist/builtin-packs/core/fixtures/branch-protection/violating/basic/case.json +10 -0
  19. package/dist/builtin-packs/core/fixtures/bug-registry/passing/basic/case.json +10 -0
  20. package/dist/builtin-packs/core/fixtures/bug-registry/violating/basic/case.json +10 -0
  21. package/dist/builtin-packs/core/fixtures/bug-rows-immutable/passing/basic/case.json +10 -0
  22. package/dist/builtin-packs/core/fixtures/bug-rows-immutable/violating/basic/case.json +10 -0
  23. package/dist/builtin-packs/core/fixtures/ci-actions-pinned/passing/basic/case.json +10 -0
  24. package/dist/builtin-packs/core/fixtures/ci-actions-pinned/violating/basic/case.json +10 -0
  25. package/dist/builtin-packs/core/fixtures/ci-present/passing/basic/case.json +10 -0
  26. package/dist/builtin-packs/core/fixtures/ci-present/violating/basic/case.json +10 -0
  27. package/dist/builtin-packs/core/fixtures/ci-required-check/passing/basic/case.json +10 -0
  28. package/dist/builtin-packs/core/fixtures/ci-required-check/violating/basic/case.json +10 -0
  29. package/dist/builtin-packs/core/fixtures/compiler-strict/passing/basic/case.json +10 -0
  30. package/dist/builtin-packs/core/fixtures/compiler-strict/violating/basic/case.json +10 -0
  31. package/dist/builtin-packs/core/fixtures/complexity/passing/basic/case.json +10 -0
  32. package/dist/builtin-packs/core/fixtures/complexity/violating/basic/case.json +10 -0
  33. package/dist/builtin-packs/core/fixtures/context-hard-band/passing/basic/case.json +10 -0
  34. package/dist/builtin-packs/core/fixtures/context-hard-band/violating/basic/case.json +10 -0
  35. package/dist/builtin-packs/core/fixtures/context-soft-band/passing/basic/case.json +10 -0
  36. package/dist/builtin-packs/core/fixtures/context-soft-band/violating/basic/case.json +10 -0
  37. package/dist/builtin-packs/core/fixtures/conventional-commit/passing/basic/case.json +10 -0
  38. package/dist/builtin-packs/core/fixtures/conventional-commit/violating/basic/case.json +10 -0
  39. package/dist/builtin-packs/core/fixtures/coverage-floor/passing/basic/case.json +10 -0
  40. package/dist/builtin-packs/core/fixtures/coverage-floor/violating/basic/case.json +10 -0
  41. package/dist/builtin-packs/core/fixtures/custom-pack-selftest/passing/basic/case.json +10 -0
  42. package/dist/builtin-packs/core/fixtures/custom-pack-selftest/violating/basic/case.json +10 -0
  43. package/dist/builtin-packs/core/fixtures/dangerous-shell/passing/basic/case.json +10 -0
  44. package/dist/builtin-packs/core/fixtures/dangerous-shell/violating/basic/case.json +10 -0
  45. package/dist/builtin-packs/core/fixtures/dead-code/passing/basic/case.json +10 -0
  46. package/dist/builtin-packs/core/fixtures/dead-code/violating/basic/case.json +10 -0
  47. package/dist/builtin-packs/core/fixtures/dep-exact-pin/passing/basic/case.json +10 -0
  48. package/dist/builtin-packs/core/fixtures/dep-exact-pin/violating/basic/case.json +10 -0
  49. package/dist/builtin-packs/core/fixtures/dep-latest-stable/passing/basic/case.json +10 -0
  50. package/dist/builtin-packs/core/fixtures/dep-latest-stable/violating/basic/case.json +10 -0
  51. package/dist/builtin-packs/core/fixtures/dep-license/passing/basic/case.json +10 -0
  52. package/dist/builtin-packs/core/fixtures/dep-license/violating/basic/case.json +10 -0
  53. package/dist/builtin-packs/core/fixtures/dep-lockfile/passing/basic/case.json +10 -0
  54. package/dist/builtin-packs/core/fixtures/dep-lockfile/violating/basic/case.json +10 -0
  55. package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/passing/basic/case.json +10 -0
  56. package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/violating/basic/case.json +10 -0
  57. package/dist/builtin-packs/core/fixtures/dep-no-deprecated/passing/basic/case.json +10 -0
  58. package/dist/builtin-packs/core/fixtures/dep-no-deprecated/violating/basic/case.json +10 -0
  59. package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/passing/basic/case.json +10 -0
  60. package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/violating/basic/case.json +10 -0
  61. package/dist/builtin-packs/core/fixtures/dep-one-per-capability/passing/basic/case.json +10 -0
  62. package/dist/builtin-packs/core/fixtures/dep-one-per-capability/violating/basic/case.json +10 -0
  63. package/dist/builtin-packs/core/fixtures/diagnose-before-fix/passing/basic/case.json +10 -0
  64. package/dist/builtin-packs/core/fixtures/diagnose-before-fix/violating/basic/case.json +10 -0
  65. package/dist/builtin-packs/core/fixtures/doc-breadth/passing/basic/case.json +10 -0
  66. package/dist/builtin-packs/core/fixtures/doc-breadth/violating/basic/case.json +10 -0
  67. package/dist/builtin-packs/core/fixtures/doc-density/passing/basic/case.json +10 -0
  68. package/dist/builtin-packs/core/fixtures/doc-density/violating/basic/case.json +10 -0
  69. package/dist/builtin-packs/core/fixtures/doc-links-valid/passing/basic/case.json +10 -0
  70. package/dist/builtin-packs/core/fixtures/doc-links-valid/violating/basic/case.json +10 -0
  71. package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/passing/basic/case.json +10 -0
  72. package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/violating/basic/case.json +10 -0
  73. package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/passing/basic/case.json +10 -0
  74. package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/violating/basic/case.json +10 -0
  75. package/dist/builtin-packs/core/fixtures/doc-one-level/passing/basic/case.json +10 -0
  76. package/dist/builtin-packs/core/fixtures/doc-one-level/violating/basic/case.json +10 -0
  77. package/dist/builtin-packs/core/fixtures/doc-placement/passing/basic/case.json +10 -0
  78. package/dist/builtin-packs/core/fixtures/doc-placement/violating/basic/case.json +10 -0
  79. package/dist/builtin-packs/core/fixtures/doc-router-leaf/passing/basic/case.json +10 -0
  80. package/dist/builtin-packs/core/fixtures/doc-router-leaf/violating/basic/case.json +10 -0
  81. package/dist/builtin-packs/core/fixtures/doc-single-owner/passing/basic/case.json +10 -0
  82. package/dist/builtin-packs/core/fixtures/doc-single-owner/violating/basic/case.json +10 -0
  83. package/dist/builtin-packs/core/fixtures/doc-size/passing/basic/case.json +10 -0
  84. package/dist/builtin-packs/core/fixtures/doc-size/violating/basic/case.json +10 -0
  85. package/dist/builtin-packs/core/fixtures/duplication/passing/basic/case.json +10 -0
  86. package/dist/builtin-packs/core/fixtures/duplication/violating/basic/case.json +10 -0
  87. package/dist/builtin-packs/core/fixtures/engine-version-match/passing/basic/case.json +10 -0
  88. package/dist/builtin-packs/core/fixtures/engine-version-match/violating/basic/case.json +10 -0
  89. package/dist/builtin-packs/core/fixtures/file-naming/passing/basic/case.json +10 -0
  90. package/dist/builtin-packs/core/fixtures/file-naming/violating/basic/case.json +10 -0
  91. package/dist/builtin-packs/core/fixtures/file-size/passing/basic/case.json +10 -0
  92. package/dist/builtin-packs/core/fixtures/file-size/violating/basic/case.json +10 -0
  93. package/dist/builtin-packs/core/fixtures/function-size/passing/basic/case.json +10 -0
  94. package/dist/builtin-packs/core/fixtures/function-size/violating/basic/case.json +10 -0
  95. package/dist/builtin-packs/core/fixtures/graph-before-scan/passing/basic/case.json +10 -0
  96. package/dist/builtin-packs/core/fixtures/graph-before-scan/violating/basic/case.json +10 -0
  97. package/dist/builtin-packs/core/fixtures/guardrail-manifest/passing/basic/case.json +10 -0
  98. package/dist/builtin-packs/core/fixtures/guardrail-manifest/violating/basic/case.json +10 -0
  99. package/dist/builtin-packs/core/fixtures/history-append-only/passing/basic/case.json +10 -0
  100. package/dist/builtin-packs/core/fixtures/history-append-only/violating/basic/case.json +10 -0
  101. package/dist/builtin-packs/core/fixtures/history-entry/passing/basic/case.json +10 -0
  102. package/dist/builtin-packs/core/fixtures/history-entry/violating/basic/case.json +10 -0
  103. package/dist/builtin-packs/core/fixtures/history-entry-complete/passing/basic/case.json +10 -0
  104. package/dist/builtin-packs/core/fixtures/history-entry-complete/violating/basic/case.json +10 -0
  105. package/dist/builtin-packs/core/fixtures/hooks-active/passing/basic/case.json +10 -0
  106. package/dist/builtin-packs/core/fixtures/hooks-active/violating/basic/case.json +10 -0
  107. package/dist/builtin-packs/core/fixtures/loop-breaker/passing/basic/case.json +10 -0
  108. package/dist/builtin-packs/core/fixtures/loop-breaker/violating/basic/case.json +10 -0
  109. package/dist/builtin-packs/core/fixtures/max-file-bytes/passing/basic/case.json +10 -0
  110. package/dist/builtin-packs/core/fixtures/max-file-bytes/violating/basic/case.json +10 -0
  111. package/dist/builtin-packs/core/fixtures/mcp-declared/passing/basic/case.json +10 -0
  112. package/dist/builtin-packs/core/fixtures/mcp-declared/violating/basic/case.json +10 -0
  113. package/dist/builtin-packs/core/fixtures/no-assertion-loss/passing/basic/case.json +10 -0
  114. package/dist/builtin-packs/core/fixtures/no-assertion-loss/violating/basic/case.json +10 -0
  115. package/dist/builtin-packs/core/fixtures/no-baseline-raise/passing/basic/case.json +10 -0
  116. package/dist/builtin-packs/core/fixtures/no-baseline-raise/violating/basic/case.json +10 -0
  117. package/dist/builtin-packs/core/fixtures/no-bypass/passing/basic/case.json +10 -0
  118. package/dist/builtin-packs/core/fixtures/no-bypass/violating/basic/case.json +10 -0
  119. package/dist/builtin-packs/core/fixtures/no-fixture-shrink/passing/basic/case.json +10 -0
  120. package/dist/builtin-packs/core/fixtures/no-fixture-shrink/violating/basic/case.json +10 -0
  121. package/dist/builtin-packs/core/fixtures/no-guard-removal/passing/basic/case.json +10 -0
  122. package/dist/builtin-packs/core/fixtures/no-guard-removal/violating/basic/case.json +10 -0
  123. package/dist/builtin-packs/core/fixtures/no-new-suppressions/passing/basic/case.json +10 -0
  124. package/dist/builtin-packs/core/fixtures/no-new-suppressions/violating/basic/case.json +10 -0
  125. package/dist/builtin-packs/core/fixtures/no-secret-reads/passing/basic/case.json +10 -0
  126. package/dist/builtin-packs/core/fixtures/no-secret-reads/violating/basic/case.json +10 -0
  127. package/dist/builtin-packs/core/fixtures/no-secrets/passing/basic/case.json +10 -0
  128. package/dist/builtin-packs/core/fixtures/no-secrets/violating/basic/case.json +10 -0
  129. package/dist/builtin-packs/core/fixtures/no-skipped-tests/passing/basic/case.json +10 -0
  130. package/dist/builtin-packs/core/fixtures/no-skipped-tests/violating/basic/case.json +10 -0
  131. package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/passing/basic/case.json +10 -0
  132. package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/violating/basic/case.json +10 -0
  133. package/dist/builtin-packs/core/fixtures/no-threshold-lowering/passing/basic/case.json +10 -0
  134. package/dist/builtin-packs/core/fixtures/no-threshold-lowering/violating/basic/case.json +10 -0
  135. package/dist/builtin-packs/core/fixtures/perf-budgets/passing/basic/case.json +10 -0
  136. package/dist/builtin-packs/core/fixtures/perf-budgets/violating/basic/case.json +10 -0
  137. package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/passing/basic/case.json +10 -0
  138. package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/violating/basic/case.json +10 -0
  139. package/dist/builtin-packs/core/fixtures/read-dedupe/passing/basic/case.json +10 -0
  140. package/dist/builtin-packs/core/fixtures/read-dedupe/violating/basic/case.json +10 -0
  141. package/dist/builtin-packs/core/fixtures/red-before-green/passing/basic/case.json +10 -0
  142. package/dist/builtin-packs/core/fixtures/red-before-green/violating/basic/case.json +10 -0
  143. package/dist/builtin-packs/core/fixtures/regression-test-for-fix/passing/basic/case.json +10 -0
  144. package/dist/builtin-packs/core/fixtures/regression-test-for-fix/violating/basic/case.json +10 -0
  145. package/dist/builtin-packs/core/fixtures/remediation-step-size/passing/basic/case.json +10 -0
  146. package/dist/builtin-packs/core/fixtures/remediation-step-size/violating/basic/case.json +10 -0
  147. package/dist/builtin-packs/core/fixtures/repo-hygiene/passing/basic/case.json +10 -0
  148. package/dist/builtin-packs/core/fixtures/repo-hygiene/violating/basic/case.json +10 -0
  149. package/dist/builtin-packs/core/fixtures/review-gate/passing/basic/case.json +10 -0
  150. package/dist/builtin-packs/core/fixtures/review-gate/violating/basic/case.json +10 -0
  151. package/dist/builtin-packs/core/fixtures/review-round-cap/passing/basic/case.json +10 -0
  152. package/dist/builtin-packs/core/fixtures/review-round-cap/violating/basic/case.json +10 -0
  153. package/dist/builtin-packs/core/fixtures/session-tool-call-limit/passing/basic/case.json +10 -0
  154. package/dist/builtin-packs/core/fixtures/session-tool-call-limit/violating/basic/case.json +10 -0
  155. package/dist/builtin-packs/core/fixtures/spec-trace/passing/basic/case.json +10 -0
  156. package/dist/builtin-packs/core/fixtures/spec-trace/violating/basic/case.json +10 -0
  157. package/dist/builtin-packs/core/fixtures/test-command-intact/passing/basic/case.json +10 -0
  158. package/dist/builtin-packs/core/fixtures/test-command-intact/violating/basic/case.json +10 -0
  159. package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/passing/basic/case.json +10 -0
  160. package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/violating/basic/case.json +10 -0
  161. package/dist/builtin-packs/core/fixtures/waivers-valid/passing/basic/case.json +10 -0
  162. package/dist/builtin-packs/core/fixtures/waivers-valid/violating/basic/case.json +10 -0
  163. package/dist/builtin-packs/core/fixtures/workflow-gates/passing/basic/case.json +10 -0
  164. package/dist/builtin-packs/core/fixtures/workflow-gates/violating/basic/case.json +10 -0
  165. package/dist/builtin-packs/core/fixtures/write-confinement/passing/basic/case.json +10 -0
  166. package/dist/builtin-packs/core/fixtures/write-confinement/violating/basic/case.json +10 -0
  167. package/dist/builtin-packs/core/fixtures/writes-within-plan/passing/basic/case.json +10 -0
  168. package/dist/builtin-packs/core/fixtures/writes-within-plan/violating/basic/case.json +10 -0
  169. package/dist/builtin-packs/core/index.ts +8 -0
  170. package/dist/builtin-packs/core/pack.json +2057 -0
  171. package/dist/builtin-packs/dotnet/index.ts +47 -0
  172. package/dist/builtin-packs/python/extract.ts +245 -0
  173. package/dist/builtin-packs/python/fixtures/lint/passing/basic/case.json +10 -0
  174. package/dist/builtin-packs/python/fixtures/lint/violating/basic/case.json +10 -0
  175. package/dist/builtin-packs/python/fixtures/no-phantom-import/passing/basic/case.json +12 -0
  176. package/dist/builtin-packs/python/fixtures/no-phantom-import/violating/basic/case.json +11 -0
  177. package/dist/builtin-packs/python/fixtures/security-patterns/passing/basic/case.json +10 -0
  178. package/dist/builtin-packs/python/fixtures/security-patterns/violating/basic/case.json +10 -0
  179. package/dist/builtin-packs/python/fixtures/typecheck/passing/basic/case.json +10 -0
  180. package/dist/builtin-packs/python/fixtures/typecheck/violating/basic/case.json +10 -0
  181. package/dist/builtin-packs/python/index.ts +57 -0
  182. package/dist/builtin-packs/python/pack.json +116 -0
  183. package/dist/builtin-packs/typescript/extract-clauses.ts +153 -0
  184. package/dist/builtin-packs/typescript/extract-literals.ts +111 -0
  185. package/dist/builtin-packs/typescript/extract-words.ts +79 -0
  186. package/dist/builtin-packs/typescript/extract.ts +77 -0
  187. package/dist/builtin-packs/typescript/fixtures/lint/passing/basic/case.json +10 -0
  188. package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
  189. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
  190. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
  191. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
  192. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
  193. package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
  194. package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
  195. package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
  196. package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
  197. package/dist/builtin-packs/typescript/index.ts +85 -0
  198. package/dist/builtin-packs/typescript/lex.ts +199 -0
  199. package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
  200. package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
  201. package/dist/builtin-packs/typescript/measures.ts +10 -0
  202. package/dist/builtin-packs/typescript/naming.ts +47 -0
  203. package/dist/builtin-packs/typescript/pack.json +169 -0
  204. package/dist/builtin-packs/typescript/patterns.ts +93 -0
  205. package/dist/builtin-packs/typescript/resolve.ts +224 -0
  206. package/dist/builtin-packs/typescript/strict.ts +177 -0
  207. package/dist/builtin-packs/typescript/titles.ts +184 -0
  208. package/dist/cli/baseline.d.ts +3 -0
  209. package/dist/cli/baseline.js +67 -0
  210. package/dist/cli/ci-bot-change.d.ts +3 -0
  211. package/dist/cli/ci-bot-change.js +54 -0
  212. package/dist/cli/ci-range.d.ts +18 -0
  213. package/dist/cli/ci-range.js +228 -0
  214. package/dist/cli/ci-summary.d.ts +3 -0
  215. package/dist/cli/ci-summary.js +45 -0
  216. package/dist/cli/ci.d.ts +4 -0
  217. package/dist/cli/ci.js +195 -0
  218. package/dist/cli/commands.d.ts +5 -0
  219. package/dist/cli/commands.js +39 -0
  220. package/dist/cli/deps.d.ts +3 -0
  221. package/dist/cli/deps.js +115 -0
  222. package/dist/cli/drift.d.ts +11 -0
  223. package/dist/cli/drift.js +91 -0
  224. package/dist/cli/evaluate.d.ts +20 -0
  225. package/dist/cli/evaluate.js +213 -0
  226. package/dist/cli/gate-scope.d.ts +10 -0
  227. package/dist/cli/gate-scope.js +82 -0
  228. package/dist/cli/git-hook.d.ts +3 -0
  229. package/dist/cli/git-hook.js +179 -0
  230. package/dist/cli/guardrail.d.ts +5 -0
  231. package/dist/cli/guardrail.js +190 -0
  232. package/dist/cli/index.d.ts +12 -0
  233. package/dist/cli/index.js +198 -0
  234. package/dist/cli/init-plan.d.ts +23 -0
  235. package/dist/cli/init-plan.js +135 -0
  236. package/dist/cli/init.d.ts +3 -0
  237. package/dist/cli/init.js +122 -0
  238. package/dist/cli/inspect-status.d.ts +8 -0
  239. package/dist/cli/inspect-status.js +164 -0
  240. package/dist/cli/inspect.d.ts +5 -0
  241. package/dist/cli/inspect.js +98 -0
  242. package/dist/cli/main.d.ts +2 -0
  243. package/dist/cli/main.js +60 -0
  244. package/dist/cli/pack-adapters.d.ts +3 -0
  245. package/dist/cli/pack-adapters.js +81 -0
  246. package/dist/cli/packs.d.ts +6 -0
  247. package/dist/cli/packs.js +131 -0
  248. package/dist/cli/plan-launcher.d.ts +1 -0
  249. package/dist/cli/plan-launcher.js +222 -0
  250. package/dist/cli/plan.d.ts +25 -0
  251. package/dist/cli/plan.js +121 -0
  252. package/dist/cli/proofs-test.d.ts +3 -0
  253. package/dist/cli/proofs-test.js +77 -0
  254. package/dist/cli/proofs.d.ts +3 -0
  255. package/dist/cli/proofs.js +168 -0
  256. package/dist/cli/remediation.d.ts +3 -0
  257. package/dist/cli/remediation.js +107 -0
  258. package/dist/cli/report.d.ts +4 -0
  259. package/dist/cli/report.js +93 -0
  260. package/dist/cli/serve-eval.d.ts +2 -0
  261. package/dist/cli/serve-eval.js +165 -0
  262. package/dist/cli/serve-log.d.ts +2 -0
  263. package/dist/cli/serve-log.js +150 -0
  264. package/dist/cli/serve-methods.d.ts +2 -0
  265. package/dist/cli/serve-methods.js +181 -0
  266. package/dist/cli/serve-protocol.d.ts +35 -0
  267. package/dist/cli/serve-protocol.js +97 -0
  268. package/dist/cli/serve-run.d.ts +9 -0
  269. package/dist/cli/serve-run.js +135 -0
  270. package/dist/cli/serve-server.d.ts +5 -0
  271. package/dist/cli/serve-server.js +120 -0
  272. package/dist/cli/serve-shared.d.ts +34 -0
  273. package/dist/cli/serve-shared.js +20 -0
  274. package/dist/cli/serve-status.d.ts +2 -0
  275. package/dist/cli/serve-status.js +130 -0
  276. package/dist/cli/serve-transport.d.ts +2 -0
  277. package/dist/cli/serve-transport.js +114 -0
  278. package/dist/cli/shared.d.ts +35 -0
  279. package/dist/cli/shared.js +181 -0
  280. package/dist/cli/task-advance.d.ts +3 -0
  281. package/dist/cli/task-advance.js +144 -0
  282. package/dist/cli/task-phases.d.ts +3 -0
  283. package/dist/cli/task-phases.js +77 -0
  284. package/dist/cli/tasks.d.ts +12 -0
  285. package/dist/cli/tasks.js +176 -0
  286. package/dist/cli/transparency.d.ts +4 -0
  287. package/dist/cli/transparency.js +197 -0
  288. package/dist/cli/waivers.d.ts +3 -0
  289. package/dist/cli/waivers.js +195 -0
  290. package/dist/features/adapters/claude-code.d.ts +8 -0
  291. package/dist/features/adapters/claude-code.js +198 -0
  292. package/dist/features/adapters/claude-shaped.d.ts +3 -0
  293. package/dist/features/adapters/claude-shaped.js +176 -0
  294. package/dist/features/adapters/codex-cli.d.ts +8 -0
  295. package/dist/features/adapters/codex-cli.js +180 -0
  296. package/dist/features/adapters/contract.d.ts +104 -0
  297. package/dist/features/adapters/contract.js +17 -0
  298. package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
  299. package/dist/features/adapters/copilot-capabilities.js +46 -0
  300. package/dist/features/adapters/copilot.d.ts +8 -0
  301. package/dist/features/adapters/copilot.js +207 -0
  302. package/dist/features/adapters/cursor.d.ts +8 -0
  303. package/dist/features/adapters/cursor.js +245 -0
  304. package/dist/features/adapters/custom-event.d.ts +3 -0
  305. package/dist/features/adapters/custom-event.js +180 -0
  306. package/dist/features/adapters/custom-load.d.ts +3 -0
  307. package/dist/features/adapters/custom-load.js +185 -0
  308. package/dist/features/adapters/custom-shape.d.ts +21 -0
  309. package/dist/features/adapters/custom-shape.js +87 -0
  310. package/dist/features/adapters/custom.d.ts +9 -0
  311. package/dist/features/adapters/custom.js +130 -0
  312. package/dist/features/adapters/effective-cache.d.ts +5 -0
  313. package/dist/features/adapters/effective-cache.js +45 -0
  314. package/dist/features/adapters/gemini-cli.d.ts +6 -0
  315. package/dist/features/adapters/gemini-cli.js +160 -0
  316. package/dist/features/adapters/gemini-tables.d.ts +7 -0
  317. package/dist/features/adapters/gemini-tables.js +104 -0
  318. package/dist/features/adapters/hook-dispatch.d.ts +7 -0
  319. package/dist/features/adapters/hook-dispatch.js +97 -0
  320. package/dist/features/adapters/hook-injection.d.ts +12 -0
  321. package/dist/features/adapters/hook-injection.js +75 -0
  322. package/dist/features/adapters/hook-load.d.ts +15 -0
  323. package/dist/features/adapters/hook-load.js +152 -0
  324. package/dist/features/adapters/hook-scope.d.ts +3 -0
  325. package/dist/features/adapters/hook-scope.js +54 -0
  326. package/dist/features/adapters/index.d.ts +22 -0
  327. package/dist/features/adapters/index.js +86 -0
  328. package/dist/features/adapters/muse-code.d.ts +8 -0
  329. package/dist/features/adapters/muse-code.js +223 -0
  330. package/dist/features/adapters/opencode-bridge.d.ts +1 -0
  331. package/dist/features/adapters/opencode-bridge.js +230 -0
  332. package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
  333. package/dist/features/adapters/opencode-capabilities.js +47 -0
  334. package/dist/features/adapters/opencode-parse.d.ts +3 -0
  335. package/dist/features/adapters/opencode-parse.js +137 -0
  336. package/dist/features/adapters/opencode-tables.d.ts +5 -0
  337. package/dist/features/adapters/opencode-tables.js +63 -0
  338. package/dist/features/adapters/opencode.d.ts +10 -0
  339. package/dist/features/adapters/opencode.js +97 -0
  340. package/dist/features/adapters/runtime.d.ts +25 -0
  341. package/dist/features/adapters/runtime.js +148 -0
  342. package/dist/features/adapters/universal.d.ts +7 -0
  343. package/dist/features/adapters/universal.js +89 -0
  344. package/dist/features/arch/arch-profiles.d.ts +3 -0
  345. package/dist/features/arch/arch-profiles.js +5 -0
  346. package/dist/features/arch/checks.d.ts +25 -0
  347. package/dist/features/arch/checks.js +173 -0
  348. package/dist/features/arch/codictator-modules.d.ts +4 -0
  349. package/dist/features/arch/codictator-modules.js +180 -0
  350. package/dist/features/arch/cycle-walk.d.ts +1 -0
  351. package/dist/features/arch/cycle-walk.js +36 -0
  352. package/dist/features/arch/edge-checks.d.ts +13 -0
  353. package/dist/features/arch/edge-checks.js +186 -0
  354. package/dist/features/arch/graph.d.ts +32 -0
  355. package/dist/features/arch/graph.js +202 -0
  356. package/dist/features/arch/index.d.ts +29 -0
  357. package/dist/features/arch/index.js +16 -0
  358. package/dist/features/arch/layer-rules.d.ts +3 -0
  359. package/dist/features/arch/layer-rules.js +38 -0
  360. package/dist/features/arch/module-map-validation.d.ts +3 -0
  361. package/dist/features/arch/module-map-validation.js +30 -0
  362. package/dist/features/arch/module-mapping.d.ts +15 -0
  363. package/dist/features/arch/module-mapping.js +184 -0
  364. package/dist/features/arch/profiles.d.ts +4 -0
  365. package/dist/features/arch/profiles.js +8 -0
  366. package/dist/features/audit/append.d.ts +26 -0
  367. package/dist/features/audit/append.js +205 -0
  368. package/dist/features/audit/explain-table-tail.d.ts +2 -0
  369. package/dist/features/audit/explain-table-tail.js +29 -0
  370. package/dist/features/audit/explain-table.d.ts +8 -0
  371. package/dist/features/audit/explain-table.js +48 -0
  372. package/dist/features/audit/explain.d.ts +7 -0
  373. package/dist/features/audit/explain.js +87 -0
  374. package/dist/features/audit/index.d.ts +37 -0
  375. package/dist/features/audit/index.js +17 -0
  376. package/dist/features/audit/injection-event.d.ts +11 -0
  377. package/dist/features/audit/injection-event.js +17 -0
  378. package/dist/features/audit/read.d.ts +8 -0
  379. package/dist/features/audit/read.js +62 -0
  380. package/dist/features/audit/summarize.d.ts +1 -0
  381. package/dist/features/audit/summarize.js +41 -0
  382. package/dist/features/audit/surfaces.d.ts +47 -0
  383. package/dist/features/audit/surfaces.js +165 -0
  384. package/dist/features/audit/token-saver-evidence.d.ts +14 -0
  385. package/dist/features/audit/token-saver-evidence.js +85 -0
  386. package/dist/features/ci/changes.d.ts +28 -0
  387. package/dist/features/ci/changes.js +88 -0
  388. package/dist/features/ci/index.d.ts +22 -0
  389. package/dist/features/ci/index.js +75 -0
  390. package/dist/features/ci/protection-read.d.ts +3 -0
  391. package/dist/features/ci/protection-read.js +264 -0
  392. package/dist/features/ci/protection.d.ts +25 -0
  393. package/dist/features/ci/protection.js +77 -0
  394. package/dist/features/ci/workflow.d.ts +23 -0
  395. package/dist/features/ci/workflow.js +261 -0
  396. package/dist/features/config/human.d.ts +4 -0
  397. package/dist/features/config/human.js +31 -0
  398. package/dist/features/config/index.d.ts +37 -0
  399. package/dist/features/config/index.js +129 -0
  400. package/dist/features/config/pack-data.d.ts +18 -0
  401. package/dist/features/config/pack-data.js +116 -0
  402. package/dist/features/config/validate-sections.d.ts +6 -0
  403. package/dist/features/config/validate-sections.js +198 -0
  404. package/dist/features/config/validate-shared.d.ts +8 -0
  405. package/dist/features/config/validate-shared.js +69 -0
  406. package/dist/features/config/validate-tunables.d.ts +1 -0
  407. package/dist/features/config/validate-tunables.js +89 -0
  408. package/dist/features/config/validate.d.ts +2 -0
  409. package/dist/features/config/validate.js +57 -0
  410. package/dist/features/deps/bots.d.ts +5 -0
  411. package/dist/features/deps/bots.js +39 -0
  412. package/dist/features/deps/capabilities.d.ts +3 -0
  413. package/dist/features/deps/capabilities.js +91 -0
  414. package/dist/features/deps/check.d.ts +18 -0
  415. package/dist/features/deps/check.js +70 -0
  416. package/dist/features/deps/dependabot.d.ts +10 -0
  417. package/dist/features/deps/dependabot.js +154 -0
  418. package/dist/features/deps/eval.d.ts +41 -0
  419. package/dist/features/deps/eval.js +24 -0
  420. package/dist/features/deps/fields.d.ts +4 -0
  421. package/dist/features/deps/fields.js +18 -0
  422. package/dist/features/deps/index.d.ts +67 -0
  423. package/dist/features/deps/index.js +27 -0
  424. package/dist/features/deps/lockfile.d.ts +8 -0
  425. package/dist/features/deps/lockfile.js +87 -0
  426. package/dist/features/deps/npm.d.ts +22 -0
  427. package/dist/features/deps/npm.js +172 -0
  428. package/dist/features/deps/npmrc.d.ts +12 -0
  429. package/dist/features/deps/npmrc.js +50 -0
  430. package/dist/features/deps/nuget.d.ts +25 -0
  431. package/dist/features/deps/nuget.js +112 -0
  432. package/dist/features/deps/osv-ranges.d.ts +12 -0
  433. package/dist/features/deps/osv-ranges.js +83 -0
  434. package/dist/features/deps/osv.d.ts +16 -0
  435. package/dist/features/deps/osv.js +144 -0
  436. package/dist/features/deps/pypi-pyproject.d.ts +7 -0
  437. package/dist/features/deps/pypi-pyproject.js +118 -0
  438. package/dist/features/deps/pypi.d.ts +29 -0
  439. package/dist/features/deps/pypi.js +137 -0
  440. package/dist/features/deps/registry.d.ts +29 -0
  441. package/dist/features/deps/registry.js +147 -0
  442. package/dist/features/deps/renovate.d.ts +15 -0
  443. package/dist/features/deps/renovate.js +98 -0
  444. package/dist/features/deps/selection.d.ts +20 -0
  445. package/dist/features/deps/selection.js +150 -0
  446. package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
  447. package/dist/features/deps/snapshot-verdicts.js +184 -0
  448. package/dist/features/deps/stable.d.ts +19 -0
  449. package/dist/features/deps/stable.js +106 -0
  450. package/dist/features/deps/step-size.d.ts +7 -0
  451. package/dist/features/deps/step-size.js +24 -0
  452. package/dist/features/deps/upgrade.d.ts +35 -0
  453. package/dist/features/deps/upgrade.js +114 -0
  454. package/dist/features/deps/verdicts.d.ts +21 -0
  455. package/dist/features/deps/verdicts.js +219 -0
  456. package/dist/features/engine/evaluate.d.ts +12 -0
  457. package/dist/features/engine/evaluate.js +165 -0
  458. package/dist/features/engine/index.d.ts +21 -0
  459. package/dist/features/engine/index.js +24 -0
  460. package/dist/features/engine/message.d.ts +3 -0
  461. package/dist/features/engine/message.js +69 -0
  462. package/dist/features/engine/ratchet.d.ts +1 -0
  463. package/dist/features/engine/ratchet.js +63 -0
  464. package/dist/features/engine/run-enforcer.d.ts +4 -0
  465. package/dist/features/engine/run-enforcer.js +82 -0
  466. package/dist/features/engine/waivers.d.ts +23 -0
  467. package/dist/features/engine/waivers.js +169 -0
  468. package/dist/features/generator/draft.d.ts +7 -0
  469. package/dist/features/generator/draft.js +148 -0
  470. package/dist/features/generator/index.d.ts +22 -0
  471. package/dist/features/generator/index.js +8 -0
  472. package/dist/features/generator/llm-draft.d.ts +3 -0
  473. package/dist/features/generator/llm-draft.js +93 -0
  474. package/dist/features/generator/prompt.d.ts +25 -0
  475. package/dist/features/generator/prompt.js +105 -0
  476. package/dist/features/generator/self-test.d.ts +12 -0
  477. package/dist/features/generator/self-test.js +65 -0
  478. package/dist/features/generator/templates.d.ts +26 -0
  479. package/dist/features/generator/templates.js +177 -0
  480. package/dist/features/integrity/drift.d.ts +19 -0
  481. package/dist/features/integrity/drift.js +168 -0
  482. package/dist/features/integrity/hooks.d.ts +19 -0
  483. package/dist/features/integrity/hooks.js +54 -0
  484. package/dist/features/integrity/index.d.ts +10 -0
  485. package/dist/features/integrity/index.js +14 -0
  486. package/dist/features/integrity/manifest.d.ts +15 -0
  487. package/dist/features/integrity/manifest.js +26 -0
  488. package/dist/features/integrity/self-protection.d.ts +12 -0
  489. package/dist/features/integrity/self-protection.js +144 -0
  490. package/dist/features/llm/attempt.d.ts +17 -0
  491. package/dist/features/llm/attempt.js +99 -0
  492. package/dist/features/llm/errors.d.ts +5 -0
  493. package/dist/features/llm/errors.js +18 -0
  494. package/dist/features/llm/index.d.ts +23 -0
  495. package/dist/features/llm/index.js +46 -0
  496. package/dist/features/llm/presets.d.ts +25 -0
  497. package/dist/features/llm/presets.js +159 -0
  498. package/dist/features/llm/wire.d.ts +17 -0
  499. package/dist/features/llm/wire.js +163 -0
  500. package/dist/features/packs/accept.d.ts +7 -0
  501. package/dist/features/packs/accept.js +73 -0
  502. package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
  503. package/dist/features/packs/enforcers/arch-guards.js +193 -0
  504. package/dist/features/packs/enforcers/binding.d.ts +31 -0
  505. package/dist/features/packs/enforcers/binding.js +157 -0
  506. package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
  507. package/dist/features/packs/enforcers/ci-guards.js +128 -0
  508. package/dist/features/packs/enforcers/code-health.d.ts +9 -0
  509. package/dist/features/packs/enforcers/code-health.js +180 -0
  510. package/dist/features/packs/enforcers/code.d.ts +5 -0
  511. package/dist/features/packs/enforcers/code.js +128 -0
  512. package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
  513. package/dist/features/packs/enforcers/command-forbid.js +61 -0
  514. package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
  515. package/dist/features/packs/enforcers/deps-guards.js +235 -0
  516. package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
  517. package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
  518. package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
  519. package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
  520. package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
  521. package/dist/features/packs/enforcers/docs-guards.js +180 -0
  522. package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
  523. package/dist/features/packs/enforcers/external-attribute.js +122 -0
  524. package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
  525. package/dist/features/packs/enforcers/external-bind.js +172 -0
  526. package/dist/features/packs/enforcers/external-check.d.ts +7 -0
  527. package/dist/features/packs/enforcers/external-check.js +131 -0
  528. package/dist/features/packs/enforcers/external-output.d.ts +30 -0
  529. package/dist/features/packs/enforcers/external-output.js +144 -0
  530. package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
  531. package/dist/features/packs/enforcers/external-probe.js +65 -0
  532. package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
  533. package/dist/features/packs/enforcers/external-runs.js +162 -0
  534. package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
  535. package/dist/features/packs/enforcers/external-sarif.js +103 -0
  536. package/dist/features/packs/enforcers/external.d.ts +39 -0
  537. package/dist/features/packs/enforcers/external.js +11 -0
  538. package/dist/features/packs/enforcers/gate-guards.d.ts +12 -0
  539. package/dist/features/packs/enforcers/gate-guards.js +170 -0
  540. package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
  541. package/dist/features/packs/enforcers/health-abstraction.js +126 -0
  542. package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
  543. package/dist/features/packs/enforcers/health-duplication.js +197 -0
  544. package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
  545. package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
  546. package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
  547. package/dist/features/packs/enforcers/health-lex-template.js +67 -0
  548. package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
  549. package/dist/features/packs/enforcers/health-lex.js +227 -0
  550. package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
  551. package/dist/features/packs/enforcers/health-markers.js +31 -0
  552. package/dist/features/packs/enforcers/health-measures.d.ts +24 -0
  553. package/dist/features/packs/enforcers/health-measures.js +214 -0
  554. package/dist/features/packs/enforcers/health-refs.d.ts +6 -0
  555. package/dist/features/packs/enforcers/health-refs.js +61 -0
  556. package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
  557. package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
  558. package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
  559. package/dist/features/packs/enforcers/integrity-guards.js +202 -0
  560. package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
  561. package/dist/features/packs/enforcers/jsonkey.js +95 -0
  562. package/dist/features/packs/enforcers/parametric.d.ts +7 -0
  563. package/dist/features/packs/enforcers/parametric.js +138 -0
  564. package/dist/features/packs/enforcers/pattern.d.ts +11 -0
  565. package/dist/features/packs/enforcers/pattern.js +88 -0
  566. package/dist/features/packs/enforcers/placement.d.ts +10 -0
  567. package/dist/features/packs/enforcers/placement.js +54 -0
  568. package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
  569. package/dist/features/packs/enforcers/py-checks.js +131 -0
  570. package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
  571. package/dist/features/packs/enforcers/py-lex.js +271 -0
  572. package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
  573. package/dist/features/packs/enforcers/py-phantom.js +163 -0
  574. package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
  575. package/dist/features/packs/enforcers/py-pins.js +184 -0
  576. package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
  577. package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
  578. package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
  579. package/dist/features/packs/enforcers/records-guards.js +178 -0
  580. package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
  581. package/dist/features/packs/enforcers/remediation-guards.js +42 -0
  582. package/dist/features/packs/enforcers/required.d.ts +10 -0
  583. package/dist/features/packs/enforcers/required.js +65 -0
  584. package/dist/features/packs/enforcers/secret-scan.d.ts +22 -0
  585. package/dist/features/packs/enforcers/secret-scan.js +179 -0
  586. package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
  587. package/dist/features/packs/enforcers/shell-analyse.js +105 -0
  588. package/dist/features/packs/enforcers/sizes.d.ts +10 -0
  589. package/dist/features/packs/enforcers/sizes.js +82 -0
  590. package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
  591. package/dist/features/packs/enforcers/steering-guards.js +162 -0
  592. package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
  593. package/dist/features/packs/enforcers/testing-guards.js +118 -0
  594. package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
  595. package/dist/features/packs/enforcers/ts-checks.js +101 -0
  596. package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
  597. package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
  598. package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
  599. package/dist/features/packs/enforcers/ts-phantom.js +117 -0
  600. package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
  601. package/dist/features/packs/enforcers/ts-security-patterns.js +93 -0
  602. package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
  603. package/dist/features/packs/enforcers/workflow-guards.js +117 -0
  604. package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
  605. package/dist/features/packs/enforcers/write-confine.js +131 -0
  606. package/dist/features/packs/hashes.d.ts +6 -0
  607. package/dist/features/packs/hashes.js +84 -0
  608. package/dist/features/packs/index.d.ts +22 -0
  609. package/dist/features/packs/index.js +15 -0
  610. package/dist/features/packs/loader.d.ts +13 -0
  611. package/dist/features/packs/loader.js +205 -0
  612. package/dist/features/packs/manifest.d.ts +17 -0
  613. package/dist/features/packs/manifest.js +180 -0
  614. package/dist/features/packs/params.d.ts +2 -0
  615. package/dist/features/packs/params.js +90 -0
  616. package/dist/features/packs/registry.d.ts +11 -0
  617. package/dist/features/packs/registry.js +136 -0
  618. package/dist/features/packs/selftest.d.ts +3 -0
  619. package/dist/features/packs/selftest.js +127 -0
  620. package/dist/features/records/bug-grammar.d.ts +17 -0
  621. package/dist/features/records/bug-grammar.js +128 -0
  622. package/dist/features/records/bug-registry.d.ts +9 -0
  623. package/dist/features/records/bug-registry.js +67 -0
  624. package/dist/features/records/bug-rows-immutable.d.ts +3 -0
  625. package/dist/features/records/bug-rows-immutable.js +52 -0
  626. package/dist/features/records/bugs.d.ts +2 -0
  627. package/dist/features/records/bugs.js +24 -0
  628. package/dist/features/records/docs-lines.d.ts +16 -0
  629. package/dist/features/records/docs-lines.js +36 -0
  630. package/dist/features/records/docs-prose.d.ts +14 -0
  631. package/dist/features/records/docs-prose.js +252 -0
  632. package/dist/features/records/docs-structure.d.ts +17 -0
  633. package/dist/features/records/docs-structure.js +223 -0
  634. package/dist/features/records/docs.d.ts +9 -0
  635. package/dist/features/records/docs.js +238 -0
  636. package/dist/features/records/history-checks.d.ts +6 -0
  637. package/dist/features/records/history-checks.js +94 -0
  638. package/dist/features/records/history-parse.d.ts +16 -0
  639. package/dist/features/records/history-parse.js +101 -0
  640. package/dist/features/records/history-scope.d.ts +5 -0
  641. package/dist/features/records/history-scope.js +86 -0
  642. package/dist/features/records/history.d.ts +3 -0
  643. package/dist/features/records/history.js +5 -0
  644. package/dist/features/records/index.d.ts +8 -0
  645. package/dist/features/records/index.js +11 -0
  646. package/dist/features/remediation/adoption.d.ts +32 -0
  647. package/dist/features/remediation/adoption.js +131 -0
  648. package/dist/features/remediation/index.d.ts +12 -0
  649. package/dist/features/remediation/index.js +21 -0
  650. package/dist/features/remediation/plan-chains.d.ts +3 -0
  651. package/dist/features/remediation/plan-chains.js +111 -0
  652. package/dist/features/remediation/plan-generate.d.ts +3 -0
  653. package/dist/features/remediation/plan-generate.js +129 -0
  654. package/dist/features/remediation/plan-kinds.d.ts +32 -0
  655. package/dist/features/remediation/plan-kinds.js +42 -0
  656. package/dist/features/remediation/plan-markers.d.ts +2 -0
  657. package/dist/features/remediation/plan-markers.js +155 -0
  658. package/dist/features/remediation/plan-merge.d.ts +6 -0
  659. package/dist/features/remediation/plan-merge.js +33 -0
  660. package/dist/features/remediation/plan.d.ts +4 -0
  661. package/dist/features/remediation/plan.js +7 -0
  662. package/dist/features/remediation/step-floor.d.ts +5 -0
  663. package/dist/features/remediation/step-floor.js +76 -0
  664. package/dist/features/remediation/step-gates.d.ts +18 -0
  665. package/dist/features/remediation/step-gates.js +77 -0
  666. package/dist/features/remediation/step-split.d.ts +12 -0
  667. package/dist/features/remediation/step-split.js +75 -0
  668. package/dist/features/remediation/steps.d.ts +3 -0
  669. package/dist/features/remediation/steps.js +6 -0
  670. package/dist/features/remediation/types.d.ts +37 -0
  671. package/dist/features/remediation/types.js +1 -0
  672. package/dist/features/security/index.d.ts +12 -0
  673. package/dist/features/security/index.js +142 -0
  674. package/dist/features/steering/agent-assets.d.ts +7 -0
  675. package/dist/features/steering/agent-assets.js +75 -0
  676. package/dist/features/steering/budgets.d.ts +20 -0
  677. package/dist/features/steering/budgets.js +86 -0
  678. package/dist/features/steering/checks.d.ts +7 -0
  679. package/dist/features/steering/checks.js +67 -0
  680. package/dist/features/steering/context-file.d.ts +11 -0
  681. package/dist/features/steering/context-file.js +107 -0
  682. package/dist/features/steering/graph-scan.d.ts +7 -0
  683. package/dist/features/steering/graph-scan.js +17 -0
  684. package/dist/features/steering/index.d.ts +30 -0
  685. package/dist/features/steering/index.js +45 -0
  686. package/dist/features/steering/injection.d.ts +23 -0
  687. package/dist/features/steering/injection.js +124 -0
  688. package/dist/features/steering/mcp.d.ts +2 -0
  689. package/dist/features/steering/mcp.js +18 -0
  690. package/dist/features/steering/precedence.d.ts +10 -0
  691. package/dist/features/steering/precedence.js +28 -0
  692. package/dist/features/steering/read-cache.d.ts +13 -0
  693. package/dist/features/steering/read-cache.js +51 -0
  694. package/dist/features/testing/base.d.ts +1 -0
  695. package/dist/features/testing/base.js +8 -0
  696. package/dist/features/testing/covers.d.ts +8 -0
  697. package/dist/features/testing/covers.js +50 -0
  698. package/dist/features/testing/evaluate.d.ts +19 -0
  699. package/dist/features/testing/evaluate.js +47 -0
  700. package/dist/features/testing/index.d.ts +10 -0
  701. package/dist/features/testing/index.js +13 -0
  702. package/dist/features/testing/integrity.d.ts +28 -0
  703. package/dist/features/testing/integrity.js +140 -0
  704. package/dist/features/testing/ledger.d.ts +11 -0
  705. package/dist/features/testing/ledger.js +51 -0
  706. package/dist/features/testing/proofs.d.ts +26 -0
  707. package/dist/features/testing/proofs.js +88 -0
  708. package/dist/features/testing/report.d.ts +6 -0
  709. package/dist/features/testing/report.js +16 -0
  710. package/dist/features/testing/scenarios.d.ts +34 -0
  711. package/dist/features/testing/scenarios.js +90 -0
  712. package/dist/features/testing/tap-parser.d.ts +9 -0
  713. package/dist/features/testing/tap-parser.js +84 -0
  714. package/dist/features/testing/trace.d.ts +23 -0
  715. package/dist/features/testing/trace.js +110 -0
  716. package/dist/features/workflow/index.d.ts +14 -0
  717. package/dist/features/workflow/index.js +19 -0
  718. package/dist/features/workflow/loop.d.ts +5 -0
  719. package/dist/features/workflow/loop.js +36 -0
  720. package/dist/features/workflow/phases.d.ts +10 -0
  721. package/dist/features/workflow/phases.js +181 -0
  722. package/dist/features/workflow/review.d.ts +25 -0
  723. package/dist/features/workflow/review.js +112 -0
  724. package/dist/features/workflow/tasks.d.ts +73 -0
  725. package/dist/features/workflow/tasks.js +80 -0
  726. package/dist/features/workflow/writes.d.ts +8 -0
  727. package/dist/features/workflow/writes.js +96 -0
  728. package/dist/kernel/clock.d.ts +4 -0
  729. package/dist/kernel/clock.js +5 -0
  730. package/dist/kernel/config-keys.d.ts +2 -0
  731. package/dist/kernel/config-keys.js +5 -0
  732. package/dist/kernel/config-toml-keys.d.ts +2 -0
  733. package/dist/kernel/config-toml-keys.js +237 -0
  734. package/dist/kernel/config-yaml-keys.d.ts +2 -0
  735. package/dist/kernel/config-yaml-keys.js +177 -0
  736. package/dist/kernel/contracts.d.ts +76 -0
  737. package/dist/kernel/contracts.js +9 -0
  738. package/dist/kernel/entry.d.ts +1 -0
  739. package/dist/kernel/entry.js +31 -0
  740. package/dist/kernel/env.d.ts +4 -0
  741. package/dist/kernel/env.js +5 -0
  742. package/dist/kernel/errors.d.ts +7 -0
  743. package/dist/kernel/errors.js +6 -0
  744. package/dist/kernel/fs-confine.d.ts +14 -0
  745. package/dist/kernel/fs-confine.js +129 -0
  746. package/dist/kernel/fs-errors.d.ts +8 -0
  747. package/dist/kernel/fs-errors.js +37 -0
  748. package/dist/kernel/fs.d.ts +28 -0
  749. package/dist/kernel/fs.js +245 -0
  750. package/dist/kernel/git.d.ts +16 -0
  751. package/dist/kernel/git.js +125 -0
  752. package/dist/kernel/glob.d.ts +1 -0
  753. package/dist/kernel/glob.js +178 -0
  754. package/dist/kernel/hash.d.ts +3 -0
  755. package/dist/kernel/hash.js +12 -0
  756. package/dist/kernel/host.d.ts +3 -0
  757. package/dist/kernel/host.js +48 -0
  758. package/dist/kernel/index.d.ts +115 -0
  759. package/dist/kernel/index.js +33 -0
  760. package/dist/kernel/json.d.ts +4 -0
  761. package/dist/kernel/json.js +68 -0
  762. package/dist/kernel/net-allow.d.ts +8 -0
  763. package/dist/kernel/net-allow.js +45 -0
  764. package/dist/kernel/net-fetch.d.ts +5 -0
  765. package/dist/kernel/net-fetch.js +135 -0
  766. package/dist/kernel/net.d.ts +10 -0
  767. package/dist/kernel/net.js +24 -0
  768. package/dist/kernel/path.d.ts +3 -0
  769. package/dist/kernel/path.js +40 -0
  770. package/dist/kernel/pattern.d.ts +2 -0
  771. package/dist/kernel/pattern.js +116 -0
  772. package/dist/kernel/proc.d.ts +6 -0
  773. package/dist/kernel/proc.js +207 -0
  774. package/dist/kernel/read-cache.d.ts +6 -0
  775. package/dist/kernel/read-cache.js +27 -0
  776. package/dist/kernel/redact.d.ts +1 -0
  777. package/dist/kernel/redact.js +206 -0
  778. package/dist/kernel/repo-root.d.ts +3 -0
  779. package/dist/kernel/repo-root.js +29 -0
  780. package/dist/kernel/result.d.ts +10 -0
  781. package/dist/kernel/result.js +6 -0
  782. package/dist/kernel/schema-helpers.d.ts +11 -0
  783. package/dist/kernel/schema-helpers.js +101 -0
  784. package/dist/kernel/schema.d.ts +2 -0
  785. package/dist/kernel/schema.js +203 -0
  786. package/dist/kernel/secret-paths.d.ts +3 -0
  787. package/dist/kernel/secret-paths.js +56 -0
  788. package/dist/kernel/shell-bypass.d.ts +4 -0
  789. package/dist/kernel/shell-bypass.js +151 -0
  790. package/dist/kernel/shell-cmd.d.ts +6 -0
  791. package/dist/kernel/shell-cmd.js +196 -0
  792. package/dist/kernel/shell-deny-cmd.d.ts +7 -0
  793. package/dist/kernel/shell-deny-cmd.js +35 -0
  794. package/dist/kernel/shell-deny-destroy.d.ts +7 -0
  795. package/dist/kernel/shell-deny-destroy.js +71 -0
  796. package/dist/kernel/shell-deny-escalate.d.ts +7 -0
  797. package/dist/kernel/shell-deny-escalate.js +96 -0
  798. package/dist/kernel/shell-deny-target.d.ts +4 -0
  799. package/dist/kernel/shell-deny-target.js +51 -0
  800. package/dist/kernel/shell-deny.d.ts +8 -0
  801. package/dist/kernel/shell-deny.js +171 -0
  802. package/dist/kernel/shell-scan.d.ts +3 -0
  803. package/dist/kernel/shell-scan.js +226 -0
  804. package/dist/kernel/shell-word.d.ts +15 -0
  805. package/dist/kernel/shell-word.js +216 -0
  806. package/dist/kernel/shell.d.ts +22 -0
  807. package/dist/kernel/shell.js +2 -0
  808. package/dist/kernel/stdin.d.ts +2 -0
  809. package/dist/kernel/stdin.js +59 -0
  810. package/dist/kernel/test-report.d.ts +7 -0
  811. package/dist/kernel/test-report.js +112 -0
  812. package/dist/kernel/version.d.ts +2 -0
  813. package/dist/kernel/version.js +46 -0
  814. package/dist/tsconfig.build.tsbuildinfo +1 -0
  815. package/package.json +19 -11
  816. package/schema/accepted.schema.json +20 -0
  817. package/schema/baseline.schema.json +17 -0
  818. package/schema/capability.schema.json +31 -0
  819. package/schema/cli/error.schema.json +15 -0
  820. package/schema/cli/explain.schema.json +19 -0
  821. package/schema/cli/report.schema.json +15 -0
  822. package/schema/cli/status.schema.json +51 -0
  823. package/schema/cli/verify.schema.json +15 -0
  824. package/schema/config.schema.json +43 -0
  825. package/schema/event-log.schema.json +52 -0
  826. package/schema/hook-decision.schema.json +13 -0
  827. package/schema/hook-event.schema.json +50 -0
  828. package/schema/manifest.schema.json +26 -0
  829. package/schema/pack-draft.schema.json +42 -0
  830. package/schema/pack.schema.json +70 -0
  831. package/schema/registry-snapshot.schema.json +41 -0
  832. package/schema/remediation-plan.schema.json +44 -0
  833. package/schema/review-findings.schema.json +25 -0
  834. package/schema/task-record.schema.json +49 -0
  835. package/schema/waivers.schema.json +29 -0
@@ -0,0 +1,63 @@
1
+ import { normalizeToolName } from "./contract.js";
2
+ // SPEC §4.5.3: per-adapter table. OpenCode tool names are unverified until a
3
+ // first-party capture (§4.5.7); an unknown name maps to other and is still
4
+ // seen by tool.pre.other rules.
5
+ export const OPENCODE_TOOL_TABLE = {
6
+ write: "write",
7
+ edit: "write",
8
+ notebookedit: "write",
9
+ create: "write",
10
+ apply_patch: "write",
11
+ bash: "shell",
12
+ shell: "shell",
13
+ exec: "shell",
14
+ terminal: "shell",
15
+ bashoutput: "shell",
16
+ read: "read",
17
+ cat: "read",
18
+ view: "read",
19
+ glob: "search",
20
+ grep: "search",
21
+ search: "search",
22
+ find: "search",
23
+ ls: "search",
24
+ webfetch: "web",
25
+ websearch: "web",
26
+ fetch: "web",
27
+ curl: "web",
28
+ task: "task",
29
+ todo: "task",
30
+ todowrite: "task",
31
+ todoread: "task",
32
+ };
33
+ export function normalizeOpenCodeToolName(name) {
34
+ return normalizeToolName(OPENCODE_TOOL_TABLE, name);
35
+ }
36
+ // SPEC §4.5.3: OpenCode events to normalised triggers. The per-prompt hooks
37
+ // (chat.message, the experimental transform) both feed the prompt trigger:
38
+ // the bridge spawns prompt.submit and caches the returned additionalContext,
39
+ // so the launcher evaluates the same steering content either way (EC-22).
40
+ const OPENCODE_EVENT_TABLE = {
41
+ "tool.execute.before": "pre-tool",
42
+ "tool.pre.write": "pre-tool",
43
+ "tool.pre.shell": "pre-tool",
44
+ "tool.pre.read": "pre-tool",
45
+ "tool.pre.search": "pre-tool",
46
+ "tool.pre.other": "pre-tool",
47
+ "tool.execute.after": "post-tool",
48
+ "tool.post.write": "post-tool",
49
+ "session.idle": "post-tool",
50
+ "message.updated": "post-tool",
51
+ stop: "post-tool",
52
+ "session.created": "startup",
53
+ "session.start": "startup",
54
+ "session.compacted": "compact",
55
+ "experimental.session.compacting": "compact",
56
+ "compact.post": "compact",
57
+ "prompt.submit": "prompt",
58
+ "chat.message": "prompt",
59
+ "experimental.chat.system.transform": "prompt",
60
+ };
61
+ export function mapOpenCodeEvent(event) {
62
+ return OPENCODE_EVENT_TABLE[event];
63
+ }
@@ -0,0 +1,10 @@
1
+ import type { Adapter, HookDecision, HookReply } from "./contract.ts";
2
+ import { parseOpenCodeEvent } from "./opencode-parse.ts";
3
+ import { normalizeOpenCodeToolName } from "./opencode-tables.ts";
4
+ export { normalizeOpenCodeToolName, parseOpenCodeEvent };
5
+ export declare function replyOpenCode(decision: HookDecision): HookReply;
6
+ export declare function staticBlockOpenCode(code: string, message: string): HookReply;
7
+ export declare const OPENCODE_VERSION_MINIMUM = "1.15.0";
8
+ export declare const OPENCODE_VERSION_MAXIMUM_EXCLUSIVE = "2.0.0";
9
+ export declare function isOpenCodeVersionSupported(version: string): boolean;
10
+ export declare const opencodeAdapter: Adapter;
@@ -0,0 +1,97 @@
1
+ // SPEC §4.5.4: the OpenCode adapter. Parse, reply and staticBlock are pure;
2
+ // hookIoVerified stays false until a first-party capture lands (§4.5.7).
3
+ // Tables live in opencode-tables.ts and payload narrowing in
4
+ // opencode-parse.ts; this file owns the reply/render/adapter assembly and
5
+ // keeps the original barrel path, so existing imports keep working.
6
+ import { stableStringify } from "../../kernel/index.js";
7
+ import { OPENCODE_BRIDGE_SOURCE } from "./opencode-bridge.js";
8
+ import { OPENCODE_CAPABILITIES } from "./opencode-capabilities.js";
9
+ import { parseOpenCodeEvent } from "./opencode-parse.js";
10
+ import { normalizeOpenCodeToolName } from "./opencode-tables.js";
11
+ export { normalizeOpenCodeToolName, parseOpenCodeEvent };
12
+ // SPEC §4.5.4 with S29: the wire is Codictator's own HookDecision JSON on
13
+ // stdout, exit 0. The bridge throws on a block reply, so gating stays closed.
14
+ export function replyOpenCode(decision) {
15
+ return {
16
+ exitCode: 0,
17
+ stdout: JSON.stringify({
18
+ decision: decision.decision,
19
+ ...(decision.message === undefined ? {} : { message: decision.message }),
20
+ ...(decision.additionalContext === undefined
21
+ ? {}
22
+ : { additionalContext: decision.additionalContext }),
23
+ eventId: decision.eventId,
24
+ }),
25
+ stderr: "",
26
+ };
27
+ }
28
+ // SPEC §4.5.1: the pre-engine deny form, embedded by regen for CDX-E002 and
29
+ // CDX-E003. No engine state, so it works when the engine is missing.
30
+ export function staticBlockOpenCode(code, message) {
31
+ return replyOpenCode({
32
+ decision: "block",
33
+ message: `${code} ${message}`,
34
+ eventId: "static",
35
+ });
36
+ }
37
+ // SPEC §4.5.4 OpenCode version range (SPEC §11 S32): the hooks above exist
38
+ // in the type definitions across >=1.15.0 <2.0.0. status compares
39
+ // opencode --version against this range (EC-24); outside it, L1 and
40
+ // contextInject show unknown while L3 and L4 keep enforcing.
41
+ export const OPENCODE_VERSION_MINIMUM = "1.15.0";
42
+ export const OPENCODE_VERSION_MAXIMUM_EXCLUSIVE = "2.0.0";
43
+ function versionParts(version) {
44
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(version.trim());
45
+ if (match === null) {
46
+ return undefined;
47
+ }
48
+ const parts = match.slice(1, 4).map((part) => Number(part));
49
+ if (parts.some((part) => !Number.isSafeInteger(part))) {
50
+ return undefined;
51
+ }
52
+ return parts;
53
+ }
54
+ function compareVersions(left, right) {
55
+ for (let index = 0; index < 3; index += 1) {
56
+ const a = left[index] ?? 0;
57
+ const b = right[index] ?? 0;
58
+ if (a !== b) {
59
+ return a < b ? -1 : 1;
60
+ }
61
+ }
62
+ return 0;
63
+ }
64
+ export function isOpenCodeVersionSupported(version) {
65
+ const seen = versionParts(version);
66
+ const minimum = versionParts(OPENCODE_VERSION_MINIMUM);
67
+ const maximum = versionParts(OPENCODE_VERSION_MAXIMUM_EXCLUSIVE);
68
+ if (seen === undefined || minimum === undefined || maximum === undefined) {
69
+ return false;
70
+ }
71
+ return (compareVersions(seen, minimum) >= 0 && compareVersions(seen, maximum) < 0);
72
+ }
73
+ // SPEC §4.5.4: owned opencode.json keys. Bypass-command deny patterns come
74
+ // from §4.14.3 in phase 9; until then the owned list is empty.
75
+ function renderOpenCodeJson() {
76
+ return stableStringify({
77
+ compaction: { auto: true },
78
+ permission: { bash: [] },
79
+ });
80
+ }
81
+ function renderOpenCode(_input) {
82
+ return [
83
+ {
84
+ path: ".opencode/plugins/codictator.mjs",
85
+ content: OPENCODE_BRIDGE_SOURCE,
86
+ },
87
+ { path: "opencode.json", content: renderOpenCodeJson() },
88
+ ];
89
+ }
90
+ export const opencodeAdapter = {
91
+ id: "opencode",
92
+ capabilities: OPENCODE_CAPABILITIES,
93
+ render: renderOpenCode,
94
+ parse: parseOpenCodeEvent,
95
+ reply: replyOpenCode,
96
+ staticBlock: staticBlockOpenCode,
97
+ };
@@ -0,0 +1,25 @@
1
+ import type { Clock, Env, Net, Ports, Proc, Result } from "../../kernel/index.ts";
2
+ import type { Enforcer, EngineOptions } from "../engine/index.ts";
3
+ import type { HookReply } from "./contract.ts";
4
+ export interface HookBasePorts {
5
+ readonly proc: Proc;
6
+ readonly net: Net;
7
+ readonly clock: Clock;
8
+ readonly env: Env;
9
+ }
10
+ export type HookAppend = (repoRoot: string, event: Parameters<NonNullable<EngineOptions["append"]>>[0]) => Promise<Result<void>>;
11
+ export interface HookRunRequest {
12
+ readonly harness: string;
13
+ readonly event: string;
14
+ readonly stdinText: string;
15
+ readonly cwd: string;
16
+ readonly ports: HookBasePorts;
17
+ readonly append: HookAppend;
18
+ readonly budgetMs?: number;
19
+ readonly engineVersion?: string;
20
+ readonly loadEnforcers?: HookEnforcerLoader;
21
+ }
22
+ export type HookEnforcerLoader = (ports: Ports, packIds: ReadonlyArray<string>) => Promise<Result<ReadonlyArray<Enforcer>>>;
23
+ export declare function runHookEvent(request: HookRunRequest): Promise<HookReply>;
24
+ export declare function supportedHarness(harness: string): boolean;
25
+ export declare function staticBlock(harness: string, code: string, message: string): HookReply | undefined;
@@ -0,0 +1,148 @@
1
+ import { NodeFs, NodeGit, parseJson } from "../../kernel/index.js";
2
+ import { ENGINE_VERSION } from "../config/index.js";
3
+ import { createEngine } from "../engine/index.js";
4
+ import { HOOK_PAYLOAD_MAX_BYTES } from "./contract.js";
5
+ import { adapterFor, allowReply, blockReply, hookBudgetMs, stopHookActive, unknownHarnessReply, } from "./hook-dispatch.js";
6
+ import { emitInjectionEvent } from "./hook-injection.js";
7
+ import { errorCodeOf, errorMessageOf, hookEnv, loadEffective, resolveRoot, } from "./hook-load.js";
8
+ import { hookScope } from "./hook-scope.js";
9
+ // SPEC §4.19.3: any uncaught error blocks CDX-E901; the time limit blocks
10
+ // CDX-E902. Both replies go through the adapter so the harness gates
11
+ // closed in its own deny form.
12
+ export async function runHookEvent(request) {
13
+ const adapter = adapterFor(request.harness);
14
+ if (adapter === undefined) {
15
+ return unknownHarnessReply(request.harness);
16
+ }
17
+ try {
18
+ return await runHookInner(request, adapter);
19
+ }
20
+ catch {
21
+ return blockReply(adapter, "CDX-E901", "the hook runtime failed before replying");
22
+ }
23
+ }
24
+ async function runHookInner(request, adapter) {
25
+ if (new TextEncoder().encode(request.stdinText).length > HOOK_PAYLOAD_MAX_BYTES) {
26
+ return blockReply(adapter, "CDX-E305", "hook payload over 8 MiB is refused; write the file in smaller edits");
27
+ }
28
+ if (request.stdinText.trim() === "") {
29
+ return blockReply(adapter, "CDX-E303", "hook stdin is empty");
30
+ }
31
+ const parsed = parseJson(request.stdinText);
32
+ if (!parsed.ok) {
33
+ return blockReply(adapter, "CDX-E303", "hook payload is not JSON");
34
+ }
35
+ const raw = parsed.value;
36
+ const hookEvent = adapter.parse(request.event, raw);
37
+ if (!hookEvent.ok) {
38
+ return blockReply(adapter, hookEvent.error.code, hookEvent.error.message);
39
+ }
40
+ const event = hookEvent.value;
41
+ const root = await resolveRoot(request.ports, event.cwd === "" ? request.cwd : event.cwd);
42
+ if (root === undefined) {
43
+ return allowReply(adapter, "no-root");
44
+ }
45
+ if (stopHookActive(adapter, event, raw)) {
46
+ return allowReply(adapter, "stop-active");
47
+ }
48
+ const effective = await loadEffective(request.ports, root, adapter, request.engineVersion ?? ENGINE_VERSION);
49
+ if (!effective.ok) {
50
+ return effective.reply;
51
+ }
52
+ const fsMade = await NodeFs.create({ root });
53
+ if (!fsMade.ok) {
54
+ return blockReply(adapter, "CDX-E801", fsMade.error.message);
55
+ }
56
+ if (request.loadEnforcers === undefined) {
57
+ return blockReply(adapter, "CDX-E901", "the hook cannot evaluate without enforcers");
58
+ }
59
+ const ports = {
60
+ fs: fsMade.value,
61
+ proc: request.ports.proc,
62
+ net: request.ports.net,
63
+ clock: request.ports.clock,
64
+ git: new NodeGit(request.ports.proc, root),
65
+ env: hookEnv(request.ports.env),
66
+ };
67
+ const loaded = await request.loadEnforcers(ports, effective.value.config.packs.map((entry) => entry.id));
68
+ if (!loaded.ok) {
69
+ return blockReply(adapter, errorCodeOf(loaded.error, "CDX-E203"), errorMessageOf(loaded.error));
70
+ }
71
+ const engine = createEngine(loaded.value, {
72
+ configHash: effective.value.configHash,
73
+ append: (verdict) => request.append(root, verdict),
74
+ });
75
+ const scope = hookScope(event, root);
76
+ // SPEC §4.6.3 + §4.18.3: the L0 triggers render the scoped injection
77
+ // and land the auditable event before evaluation, so the status row
78
+ // reads live evidence even when the verdict blocks. An unwritable log
79
+ // blocks CDX-E801, like the verdict path.
80
+ const injected = await emitInjectionEvent({
81
+ event,
82
+ scope,
83
+ steering: effective.value.config.steering,
84
+ configHash: effective.value.configHash,
85
+ root,
86
+ append: request.append,
87
+ });
88
+ if (!injected.ok) {
89
+ return blockReply(adapter, injected.error.code, injected.error.message);
90
+ }
91
+ const budgetMs = hookBudgetMs(request.harness, request.budgetMs);
92
+ const timeoutSignal = Symbol("hook-timeout");
93
+ let timer;
94
+ try {
95
+ const pending = engine.evaluate(event.trigger, scope, request.ports.clock.now());
96
+ const verdict = await Promise.race([
97
+ pending,
98
+ new Promise((_resolve, reject) => {
99
+ timer = setTimeout(() => {
100
+ reject(timeoutSignal);
101
+ }, budgetMs);
102
+ }),
103
+ ]);
104
+ if (verdict.decision === "block" || verdict.decision === "escalate") {
105
+ return adapter.reply({
106
+ decision: "block",
107
+ message: verdict.message,
108
+ eventId: verdict.eventId,
109
+ });
110
+ }
111
+ // Muse Code has no advise form: without steering injection (phase 9)
112
+ // an advise collapses to allow. OpenCode carries it on the wire.
113
+ if (verdict.decision === "advise" &&
114
+ verdict.message !== "" &&
115
+ adapter.id === "opencode") {
116
+ return adapter.reply({
117
+ decision: "advise",
118
+ message: verdict.message,
119
+ eventId: verdict.eventId,
120
+ });
121
+ }
122
+ return adapter.reply({ decision: "allow", eventId: verdict.eventId });
123
+ }
124
+ catch (error) {
125
+ if (error === timeoutSignal) {
126
+ return blockReply(adapter, "CDX-E902", "the hook exceeded its time limit");
127
+ }
128
+ throw error;
129
+ }
130
+ finally {
131
+ if (timer !== undefined) {
132
+ clearTimeout(timer);
133
+ }
134
+ }
135
+ }
136
+ export function supportedHarness(harness) {
137
+ return adapterFor(harness) !== undefined;
138
+ }
139
+ // The pre-engine deny in the harness's own form (SPEC §4.5.1): staticBlock
140
+ // carries no engine state, so the launcher and the CLI start path use it
141
+ // when the engine cannot run (CDX-E002, CDX-E003).
142
+ export function staticBlock(harness, code, message) {
143
+ const adapter = adapterFor(harness);
144
+ if (adapter === undefined) {
145
+ return undefined;
146
+ }
147
+ return adapter.staticBlock(code, message);
148
+ }
@@ -0,0 +1,7 @@
1
+ import type { Result } from "../../kernel/index.ts";
2
+ import type { Adapter, CapabilityDeclaration, HookDecision, HookEvent, HookReply } from "./contract.ts";
3
+ export declare const UNIVERSAL_CAPABILITIES: CapabilityDeclaration;
4
+ export declare function parseUniversalEvent(event: string, _raw: unknown): Result<HookEvent>;
5
+ export declare function replyUniversal(decision: HookDecision): HookReply;
6
+ export declare function staticBlockUniversal(code: string, message: string): HookReply;
7
+ export declare const universalAdapter: Adapter;
@@ -0,0 +1,89 @@
1
+ import { err, makeError } from "../../kernel/index.js";
2
+ export const UNIVERSAL_CAPABILITIES = {
3
+ harness: "universal",
4
+ adapterVersion: "0.0.0",
5
+ verifiedAgainst: {
6
+ version: "1.0.0",
7
+ date: "2026-10-26",
8
+ source: "no vendor release; fixture note packages/codictator/fixtures/harness/universal/1.0.0 (§4.5.7)",
9
+ },
10
+ layers: {
11
+ L0: "native",
12
+ L1: "none",
13
+ L2: "none",
14
+ L3: "native",
15
+ L4: "native",
16
+ L5: "none",
17
+ },
18
+ controls: {
19
+ contextFile: true,
20
+ contextInject: false,
21
+ postCompactInject: false,
22
+ promptBlock: false,
23
+ preToolBlock: false,
24
+ readBlock: false,
25
+ postToolFeedback: false,
26
+ autoCompactConfig: "none",
27
+ forceCompact: false,
28
+ forceClear: false,
29
+ usageData: "none",
30
+ skills: false,
31
+ subagents: false,
32
+ commands: false,
33
+ projectPermissions: false,
34
+ trustRequired: false,
35
+ timeoutFailMode: "unknown",
36
+ launcherMissingFailMode: "unknown",
37
+ hookIoVerified: false,
38
+ projectRootSource: "git",
39
+ agentEnvMarkers: [],
40
+ },
41
+ gaps: [
42
+ "no native hook traffic: L1 is none by design, never verified",
43
+ "git-hook and CI enforcement land with phases 9.5 and 9.6",
44
+ ],
45
+ };
46
+ // SPEC §4.5.4: no native hook traffic exists, so any hook payload fails
47
+ // closed with CDX-E303. This is unreachable through regen (no hook command
48
+ // is ever installed for universal); it only guards a hand-run launcher.
49
+ export function parseUniversalEvent(event, _raw) {
50
+ return err(makeError("CDX-E303", `unparseable universal hook payload: no hook traffic for ${event}`, "Configure a native harness adapter, or rely on git hooks and CI."));
51
+ }
52
+ // SPEC §4.5.1: the static deny form. Universal has no native deny shape, so
53
+ // the wire is Codictator's own HookDecision JSON, the same wire the OpenCode
54
+ // bridge already speaks (§7.8).
55
+ export function replyUniversal(decision) {
56
+ return {
57
+ exitCode: 0,
58
+ stdout: JSON.stringify({
59
+ decision: decision.decision,
60
+ ...(decision.message === undefined ? {} : { message: decision.message }),
61
+ ...(decision.additionalContext === undefined
62
+ ? {}
63
+ : { additionalContext: decision.additionalContext }),
64
+ eventId: decision.eventId,
65
+ }),
66
+ stderr: "",
67
+ };
68
+ }
69
+ export function staticBlockUniversal(code, message) {
70
+ return replyUniversal({
71
+ decision: "block",
72
+ message: `${code} ${message}`,
73
+ eventId: "static",
74
+ });
75
+ }
76
+ // SPEC §4.5.4: universal owns no harness-native files. AGENTS.md is rendered
77
+ // by steering (§4.6.2), the git hooks by integrity (§4.14.4) and the workflow
78
+ // by CI (§4.15); this render stays empty so regen never writes a file here.
79
+ function renderUniversal(_input) {
80
+ return [];
81
+ }
82
+ export const universalAdapter = {
83
+ id: "universal",
84
+ capabilities: UNIVERSAL_CAPABILITIES,
85
+ render: renderUniversal,
86
+ parse: parseUniversalEvent,
87
+ reply: replyUniversal,
88
+ staticBlock: staticBlockUniversal,
89
+ };
@@ -0,0 +1,3 @@
1
+ export declare const ARCH_PROFILES: readonly ["app", "library", "cli", "service"];
2
+ export type ArchProfile = (typeof ARCH_PROFILES)[number];
3
+ export declare function isArchProfile(value: string): value is ArchProfile;
@@ -0,0 +1,5 @@
1
+ // SPEC §4.11.1: the four profiles and the module kinds each one allows.
2
+ export const ARCH_PROFILES = ["app", "library", "cli", "service"];
3
+ export function isArchProfile(value) {
4
+ return ARCH_PROFILES.includes(value);
5
+ }
@@ -0,0 +1,25 @@
1
+ import type { CheckContext, Finding } from "../engine/index.ts";
2
+ import type { ModuleNode } from "./index.ts";
3
+ import { type ArchDenyRule } from "./module-mapping.ts";
4
+ export interface ArchCheckOptions {
5
+ readonly modules?: ReadonlyArray<ModuleNode>;
6
+ readonly profile?: string;
7
+ readonly layerDirs?: ReadonlyArray<string>;
8
+ readonly deny?: ReadonlyArray<ArchDenyRule>;
9
+ }
10
+ export declare function checkArchProfile(profile: string | undefined, modules: ReadonlyArray<ModuleNode>): Array<Finding>;
11
+ export interface ModuleSizeSummary {
12
+ readonly module: string;
13
+ readonly files: number;
14
+ readonly lines: number;
15
+ }
16
+ export interface ModuleSizeLimits {
17
+ readonly maxFiles?: number;
18
+ readonly maxLines?: number;
19
+ }
20
+ export declare function checkModuleSize(summary: ReadonlyArray<ModuleSizeSummary>, limits?: ModuleSizeLimits): Array<Finding>;
21
+ export declare function checkArch(ctx: CheckContext, refs: ReadonlyArray<{
22
+ readonly from: string;
23
+ readonly to: string;
24
+ readonly line: number;
25
+ }>, options?: ArchCheckOptions): Promise<Array<Finding>>;
@@ -0,0 +1,173 @@
1
+ import { isArchProfile } from "./arch-profiles.js";
2
+ import { findModuleCycle } from "./cycle-walk.js";
3
+ import { checkResolvedEdge, resolveEdge, } from "./edge-checks.js";
4
+ import { deriveModules, mappedFinding, } from "./module-mapping.js";
5
+ // SPEC §4.11.4 core/arch-no-cycles: Tarjan over the resolved module edges;
6
+ // L1 judges only cycles through new edges, so the message prints the cycle.
7
+ function addEdgeToGraph(depends, edgeAt, edge) {
8
+ if (edge.fromMod === undefined ||
9
+ edge.toMod === undefined ||
10
+ edge.fromMod.name === edge.toMod.name) {
11
+ return;
12
+ }
13
+ const list = depends.get(edge.fromMod.name) ?? [];
14
+ if (!list.includes(edge.toMod.name)) {
15
+ list.push(edge.toMod.name);
16
+ list.sort();
17
+ }
18
+ depends.set(edge.fromMod.name, list);
19
+ const key = `${edge.fromMod.name}|${edge.toMod.name}`;
20
+ if (!edgeAt.has(key)) {
21
+ edgeAt.set(key, edge);
22
+ }
23
+ }
24
+ function collectArchGraph(edges) {
25
+ const depends = new Map();
26
+ const edgeAt = new Map();
27
+ for (const edge of edges) {
28
+ addEdgeToGraph(depends, edgeAt, edge);
29
+ }
30
+ return { depends, edgeAt };
31
+ }
32
+ function cycleFindingFor(cycle, edgeAt) {
33
+ const finding = {
34
+ ruleId: "core/arch-no-cycles",
35
+ message: `module cycle closes through new edges: ${cycle.join(" -> ")}`,
36
+ remediation: "Remove one edge of the cycle, or merge the modules.",
37
+ };
38
+ const first = edgeAt.get(`${cycle[0]}|${cycle[1] ?? ""}`);
39
+ if (first === undefined) {
40
+ return finding;
41
+ }
42
+ return { ...finding, path: first.from, line: first.line };
43
+ }
44
+ function checkCycles(edges) {
45
+ const { depends, edgeAt } = collectArchGraph(edges);
46
+ const names = [...depends.keys()].sort();
47
+ const cycle = findModuleCycle(names, depends);
48
+ if (cycle === undefined) {
49
+ return [];
50
+ }
51
+ return [cycleFindingFor(cycle, edgeAt)];
52
+ }
53
+ // SPEC §4.11.4 core/arch-profile-declared: the profile is set and every
54
+ // module kind is valid for it.
55
+ export function checkArchProfile(profile, modules) {
56
+ if (profile === undefined) {
57
+ return [];
58
+ }
59
+ if (!isArchProfile(profile)) {
60
+ return [
61
+ {
62
+ ruleId: "core/arch-profile-declared",
63
+ message: `unknown architecture profile "${profile}"`,
64
+ remediation: "Use one of app, library, cli or service (SPEC §4.11.1).",
65
+ },
66
+ ];
67
+ }
68
+ const valid = {
69
+ app: ["feature", "shared", "kernel", "composition"],
70
+ library: ["public", "internal", "kernel"],
71
+ cli: ["command", "feature", "kernel", "composition"],
72
+ service: ["transport", "feature", "shared", "kernel", "composition"],
73
+ };
74
+ const allowed = valid[profile] ?? [];
75
+ return modules
76
+ .filter((mod) => mod.kind !== undefined && !allowed.includes(mod.kind))
77
+ .map((mod) => ({
78
+ ruleId: "core/arch-profile-declared",
79
+ message: `module ${mod.name} has kind "${mod.kind ?? ""}", invalid for profile ${profile}`,
80
+ remediation: `Give the module a kind ${profile} allows (${allowed.join(", ")}).`,
81
+ }));
82
+ }
83
+ // SPEC §4.11.4 core/arch-module-size: the fitness function over per-module
84
+ // file and line counts. Without limits it only reports the summary.
85
+ export function checkModuleSize(summary, limits = {}) {
86
+ const findings = [];
87
+ for (const row of summary) {
88
+ if (limits.maxFiles !== undefined && row.files > limits.maxFiles) {
89
+ findings.push({
90
+ ruleId: "core/arch-module-size",
91
+ message: `module ${row.module} holds ${row.files} files, over the limit ${limits.maxFiles}`,
92
+ remediation: "Split the module along responsibilities, never mechanically at the limit.",
93
+ });
94
+ }
95
+ if (limits.maxLines !== undefined && row.lines > limits.maxLines) {
96
+ findings.push({
97
+ ruleId: "core/arch-module-size",
98
+ message: `module ${row.module} holds ${row.lines} lines, over the limit ${limits.maxLines}`,
99
+ remediation: "Split the module along responsibilities, never mechanically at the limit.",
100
+ });
101
+ }
102
+ }
103
+ return findings;
104
+ }
105
+ function findingKey(finding) {
106
+ return JSON.stringify([
107
+ finding.ruleId,
108
+ finding.path ?? "",
109
+ finding.line ?? 0,
110
+ finding.code ?? "",
111
+ finding.message,
112
+ ]);
113
+ }
114
+ function compareFindings(left, right) {
115
+ if (left.ruleId !== right.ruleId) {
116
+ return left.ruleId < right.ruleId ? -1 : 1;
117
+ }
118
+ const leftPath = left.path ?? "";
119
+ const rightPath = right.path ?? "";
120
+ if (leftPath !== rightPath) {
121
+ return leftPath < rightPath ? -1 : 1;
122
+ }
123
+ return (left.line ?? 0) - (right.line ?? 0);
124
+ }
125
+ function dedupeFindings(findings) {
126
+ const seen = new Set();
127
+ const kept = [];
128
+ for (const finding of findings) {
129
+ const key = findingKey(finding);
130
+ if (seen.has(key)) {
131
+ continue;
132
+ }
133
+ seen.add(key);
134
+ kept.push(finding);
135
+ }
136
+ kept.sort(compareFindings);
137
+ return kept;
138
+ }
139
+ // SPEC §4.11.4: the boundary and layering checks for the evaluation path.
140
+ // Without a configured map the modules derive from the refs and every
141
+ // cross-module edge fails closed, so L1 blocks a violation before it exists.
142
+ export async function checkArch(ctx, refs, options = {}) {
143
+ void ctx;
144
+ const modules = options.modules ?? deriveModules(refs);
145
+ const profile = options.profile ?? "app";
146
+ const layerDirs = options.layerDirs ?? [];
147
+ const deny = options.deny ?? [];
148
+ const ordered = [...refs].sort((left, right) => left.from < right.from
149
+ ? -1
150
+ : left.from > right.from
151
+ ? 1
152
+ : left.line - right.line);
153
+ const edges = ordered.map((ref) => resolveEdge(modules, ref.from, ref.line, ref.to));
154
+ const findings = [];
155
+ const unmappedFrom = new Map();
156
+ for (const edge of edges) {
157
+ if (edge.fromMod === undefined) {
158
+ const first = unmappedFrom.get(edge.from);
159
+ if (first === undefined || edge.line < first) {
160
+ unmappedFrom.set(edge.from, edge.line);
161
+ }
162
+ }
163
+ }
164
+ for (const from of [...unmappedFrom.keys()].sort()) {
165
+ findings.push(mappedFinding(from, unmappedFrom.get(from) ?? 1, `source file ${from} sits outside every architecture module`));
166
+ }
167
+ for (const edge of edges) {
168
+ findings.push(...checkResolvedEdge(edge, profile, layerDirs, deny));
169
+ }
170
+ findings.push(...checkCycles(edges));
171
+ findings.push(...checkArchProfile(options.profile, modules));
172
+ return dedupeFindings(findings);
173
+ }
@@ -0,0 +1,4 @@
1
+ import type { ArchProfile } from "./arch-profiles.ts";
2
+ import type { ModuleNode } from "./index.ts";
3
+ export declare const CODICTATOR_PROFILE: ArchProfile;
4
+ export declare const CODICTATOR_MODULES: ReadonlyArray<ModuleNode>;