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,104 @@
1
+ import { normalizeToolName } from "./contract.js";
2
+ export const GEMINI_CAPABILITIES = {
3
+ harness: "gemini-cli",
4
+ adapterVersion: "0.0.0",
5
+ verifiedAgainst: {
6
+ version: "0.0.0",
7
+ date: "2026-10-26",
8
+ source: "SPEC §4.5.4 Gemini CLI row; vendor version unpinned until a first-party capture (§4.5.7)",
9
+ },
10
+ layers: {
11
+ L0: "native",
12
+ L1: "native",
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: true,
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: true,
35
+ timeoutFailMode: "unknown",
36
+ launcherMissingFailMode: "unknown",
37
+ hookIoVerified: false,
38
+ projectRootSource: "cwd",
39
+ agentEnvMarkers: [],
40
+ },
41
+ gaps: [
42
+ "hookIoVerified is false until a first-party capture passes (§4.5.7)",
43
+ "trusted-folder requirement unverified",
44
+ "compaction events unverified",
45
+ ],
46
+ };
47
+ export const GEMINI_TOOL_TABLE = {
48
+ write: "write",
49
+ edit: "write",
50
+ create: "write",
51
+ apply_patch: "write",
52
+ bash: "shell",
53
+ shell: "shell",
54
+ exec: "shell",
55
+ terminal: "shell",
56
+ read: "read",
57
+ cat: "read",
58
+ view: "read",
59
+ glob: "search",
60
+ grep: "search",
61
+ search: "search",
62
+ find: "search",
63
+ ls: "search",
64
+ webfetch: "web",
65
+ websearch: "web",
66
+ fetch: "web",
67
+ task: "task",
68
+ todo: "task",
69
+ };
70
+ export function normalizeGeminiToolName(name) {
71
+ return normalizeToolName(GEMINI_TOOL_TABLE, name);
72
+ }
73
+ // SPEC §4.5.3: native Gemini CLI events to the normalised trigger. Unknown
74
+ // names stay undefined so parse fails closed. AfterAgent feeds post-tool
75
+ // like every sibling stop-ish native (cursor stop, claude-shaped
76
+ // Stop/stop, opencode stop); the engine matches no rules on it and allows,
77
+ // which is the safe stop-hook behaviour (cf. §4.5.2: post-tool events
78
+ // never gate).
79
+ export const GEMINI_TRIGGER_TABLE = {
80
+ BeforeTool: "pre-tool",
81
+ "tool.pre.write": "pre-tool",
82
+ "tool.pre.shell": "pre-tool",
83
+ "tool.pre.read": "pre-tool",
84
+ "tool.pre.search": "pre-tool",
85
+ "tool.pre.web": "pre-tool",
86
+ "tool.pre.task": "pre-tool",
87
+ "tool.pre.other": "pre-tool",
88
+ AfterTool: "post-tool",
89
+ "tool.post.write": "post-tool",
90
+ "tool.post.shell": "post-tool",
91
+ "tool.post.read": "post-tool",
92
+ "tool.post.search": "post-tool",
93
+ "tool.post.web": "post-tool",
94
+ "tool.post.task": "post-tool",
95
+ "tool.post.other": "post-tool",
96
+ SessionStart: "startup",
97
+ "session.start": "startup",
98
+ BeforeAgent: "prompt",
99
+ "prompt.submit": "prompt",
100
+ AfterAgent: "post-tool",
101
+ };
102
+ export function mapGeminiEvent(event) {
103
+ return GEMINI_TRIGGER_TABLE[event];
104
+ }
@@ -0,0 +1,7 @@
1
+ import type { Adapter, HookEvent, HookReply } from "./contract.ts";
2
+ export declare function hookBudgetMs(harness: string, override?: number): number;
3
+ export declare function adapterFor(harness: string): Adapter | undefined;
4
+ export declare function unknownHarnessReply(harness: string): HookReply;
5
+ export declare function blockReply(adapter: Adapter, code: string, message: string): HookReply;
6
+ export declare function allowReply(adapter: Adapter, eventId: string): HookReply;
7
+ export declare function stopHookActive(adapter: Adapter, event: HookEvent, raw: unknown): boolean;
@@ -0,0 +1,97 @@
1
+ // SPEC §4.19.3: harness routing and the pre-engine reply forms for the
2
+ // hook runtime. Split from runtime.ts; the adapter lookup owns the
3
+ // reply-capable harness set, and every pre-engine block answers in the
4
+ // harness's own deny form.
5
+ import { claudeCodeAdapter } from "./claude-code.js";
6
+ import { codexCliAdapter } from "./codex-cli.js";
7
+ import { COPILOT_TIMEOUT_SEC, copilotAdapter } from "./copilot.js";
8
+ import { cursorAdapter } from "./cursor.js";
9
+ import { geminiCliAdapter } from "./gemini-cli.js";
10
+ import { museAdapter } from "./muse-code.js";
11
+ import { opencodeAdapter } from "./opencode.js";
12
+ import { universalAdapter } from "./universal.js";
13
+ // SPEC §4.5.5 with §9.3: the hook time limit is min(harness timeout - 1 s,
14
+ // hard limit). Muse Code documents no hook timeout, so the 5 s hard limit
15
+ // applies; the OpenCode bridge spawns with a 5 s timeout, so 4 s here.
16
+ // Copilot entries carry timeoutSec and fail open on timeout, so the budget
17
+ // is min(timeoutSec - 1 s, hard limit), which still lands on the hard limit.
18
+ // The CLI start path bounds its stdin wait with the same budget.
19
+ export function hookBudgetMs(harness, override) {
20
+ if (override !== undefined) {
21
+ return override;
22
+ }
23
+ if (harness === "opencode") {
24
+ return 4000;
25
+ }
26
+ if (harness === "copilot") {
27
+ return Math.min(COPILOT_TIMEOUT_SEC * 1000 - 1000, 5000);
28
+ }
29
+ return 5000;
30
+ }
31
+ export function adapterFor(harness) {
32
+ // SPEC §4.5.6: custom adapters resolve through loadCustomAdapter (async
33
+ // and root-confined), never through this sync registry, so every
34
+ // custom: id stays unknown here until its loader joins the runtime.
35
+ if (harness === museAdapter.id) {
36
+ return museAdapter;
37
+ }
38
+ if (harness === opencodeAdapter.id) {
39
+ return opencodeAdapter;
40
+ }
41
+ if (harness === claudeCodeAdapter.id) {
42
+ return claudeCodeAdapter;
43
+ }
44
+ if (harness === copilotAdapter.id) {
45
+ return copilotAdapter;
46
+ }
47
+ if (harness === cursorAdapter.id) {
48
+ return cursorAdapter;
49
+ }
50
+ if (harness === geminiCliAdapter.id) {
51
+ return geminiCliAdapter;
52
+ }
53
+ if (harness === codexCliAdapter.id) {
54
+ return codexCliAdapter;
55
+ }
56
+ if (harness === universalAdapter.id) {
57
+ return universalAdapter;
58
+ }
59
+ return undefined;
60
+ }
61
+ // SPEC §4.19.3: unknown harness id blocks CDX-E301. No adapter owns the
62
+ // reply shape, so the wire is the HookDecision JSON the bridge already
63
+ // speaks (§7.8); the hook exit stays 0 so harnesses read the reply.
64
+ export function unknownHarnessReply(harness) {
65
+ return {
66
+ exitCode: 0,
67
+ stdout: JSON.stringify({
68
+ decision: "block",
69
+ message: `CDX-E301 unknown harness id "${harness}"`,
70
+ eventId: "static",
71
+ }),
72
+ stderr: "",
73
+ };
74
+ }
75
+ export function blockReply(adapter, code, message) {
76
+ return adapter.reply({
77
+ decision: "block",
78
+ message: `${code} ${message}`,
79
+ eventId: "static",
80
+ });
81
+ }
82
+ export function allowReply(adapter, eventId) {
83
+ return adapter.reply({ decision: "allow", eventId });
84
+ }
85
+ // SPEC §4.5.4: Stop never blocks when the payload carries
86
+ // stop_hook_active, even with open findings, so the harness never loops.
87
+ export function stopHookActive(adapter, event, raw) {
88
+ if (adapter.id !== "muse-code" || event.event !== "Stop") {
89
+ return false;
90
+ }
91
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
92
+ return false;
93
+ }
94
+ const stopActive = ("stop_hook_active" in raw && raw.stop_hook_active === true) ||
95
+ ("stopHookActive" in raw && raw.stopHookActive === true);
96
+ return stopActive;
97
+ }
@@ -0,0 +1,12 @@
1
+ import type { Result, Scope } from "../../kernel/index.ts";
2
+ import type { HookEvent } from "./contract.ts";
3
+ import type { HookAppend } from "./runtime.ts";
4
+ export interface InjectionEmission {
5
+ readonly event: HookEvent;
6
+ readonly scope: Scope;
7
+ readonly steering: unknown;
8
+ readonly configHash: string;
9
+ readonly root: string;
10
+ readonly append: HookAppend;
11
+ }
12
+ export declare function emitInjectionEvent(input: InjectionEmission): Promise<Result<boolean>>;
@@ -0,0 +1,75 @@
1
+ import { ok } from "../../kernel/index.js";
2
+ import { renderScopedInjection, SCOPED_INJECTION_MAX_BYTES, } from "../steering/index.js";
3
+ // SPEC §4.6.3: the injection renders on session start, after compaction
4
+ // and on prompt submit, all L0 triggers. Tool triggers carry no injection.
5
+ function isInjectionTrigger(trigger) {
6
+ return trigger === "startup" || trigger === "compact" || trigger === "prompt";
7
+ }
8
+ // SPEC §4.6.7 EC-4: used tokens count only when present and sane; a
9
+ // missing or negative count leaves the band unavailable, never estimated.
10
+ function usedTokensOf(usage) {
11
+ const seen = usage?.contextTokens;
12
+ if (seen === undefined || !Number.isFinite(seen) || seen < 0) {
13
+ return undefined;
14
+ }
15
+ return seen;
16
+ }
17
+ // SPEC §4.6.7 EC-4: the window is the live usage window, else the
18
+ // configured steering window; an absent or non-positive window leaves the
19
+ // band unavailable, never estimated.
20
+ function hasWindow(value) {
21
+ return typeof value === "object" && value !== null && !Array.isArray(value);
22
+ }
23
+ function contextWindowOf(usage, steering) {
24
+ const seen = usage?.contextWindow;
25
+ if (seen !== undefined && Number.isFinite(seen) && seen > 0) {
26
+ return seen;
27
+ }
28
+ if (hasWindow(steering)) {
29
+ const configured = steering.contextWindow;
30
+ if (typeof configured === "number" &&
31
+ Number.isFinite(configured) &&
32
+ configured > 0) {
33
+ return configured;
34
+ }
35
+ }
36
+ return undefined;
37
+ }
38
+ // SPEC §4.6.3: the injection scope is the lexical hook scope, so the
39
+ // render names the same targets the verdict judges. L0 triggers carry no
40
+ // tool, so the scope is empty and the render takes the no-task branch;
41
+ // the budget line still carries the band.
42
+ function injectionScope(scope) {
43
+ return [...scope.files, ...(scope.proposedPaths ?? [])];
44
+ }
45
+ // SPEC §4.18.1 + §4.6.3: render the scoped injection for an L0 trigger
46
+ // and append the auditable event. Non-injection triggers append nothing.
47
+ // An append failure returns the audit error so the runtime blocks closed.
48
+ export async function emitInjectionEvent(input) {
49
+ const trigger = input.event.trigger;
50
+ if (!isInjectionTrigger(trigger)) {
51
+ return ok(false);
52
+ }
53
+ const usedTokens = usedTokensOf(input.event.usage);
54
+ const contextWindow = contextWindowOf(input.event.usage, input.steering);
55
+ const rendered = await renderScopedInjection(input.event.sessionId, injectionScope(input.scope), SCOPED_INJECTION_MAX_BYTES, {
56
+ ...(usedTokens === undefined ? {} : { usedTokens }),
57
+ ...(contextWindow === undefined ? {} : { contextWindow }),
58
+ });
59
+ const appended = await input.append(input.root, {
60
+ kind: "injection",
61
+ layer: "L0",
62
+ trigger,
63
+ harness: input.event.harness,
64
+ sessionId: input.event.sessionId,
65
+ ruleIds: [],
66
+ durationMs: 0,
67
+ configHash: input.configHash,
68
+ packs: {},
69
+ message: rendered.content,
70
+ });
71
+ if (!appended.ok) {
72
+ return appended;
73
+ }
74
+ return ok(true);
75
+ }
@@ -0,0 +1,15 @@
1
+ import type { Env } from "../../kernel/index.ts";
2
+ import type { EffectiveConfig } from "../config/index.ts";
3
+ import type { Adapter, HookReply } from "./contract.ts";
4
+ import type { HookBasePorts } from "./runtime.ts";
5
+ export declare function hookEnv(env: Env): Env;
6
+ export declare function resolveRoot(ports: HookBasePorts, startDir: string): Promise<string | undefined>;
7
+ export declare function loadEffective(ports: HookBasePorts, root: string, adapter: Adapter, engineVersion?: string): Promise<{
8
+ readonly ok: true;
9
+ value: EffectiveConfig;
10
+ } | {
11
+ readonly ok: false;
12
+ reply: HookReply;
13
+ }>;
14
+ export declare function errorCodeOf(error: unknown, fallback: string): string;
15
+ export declare function errorMessageOf(error: unknown): string;
@@ -0,0 +1,152 @@
1
+ import { NodeFs, NodeGit, parseJson, stableStringify, } from "../../kernel/index.js";
2
+ import { ENGINE_VERSION, HOOK_MARKER, loadConfig } from "../config/index.js";
3
+ import { cacheKeyFor, readCacheFile, storeBytes } from "./effective-cache.js";
4
+ import { allowReply, blockReply } from "./hook-dispatch.js";
5
+ // SPEC §4.2.3 with §4.19.3: CODICTATOR_HOOK=1 is the launcher's own mark
6
+ // on the hook process, authorizing evaluation; the §4.2.3 refusal targets
7
+ // agent markers on human-only commands, not the hook reading config to
8
+ // evaluate. The runtime loads config with every marker intact except the
9
+ // launcher's own, so a foreign agent marker in the hook environment still
10
+ // refuses CDX-E107 through loadConfig.
11
+ export function hookEnv(env) {
12
+ return {
13
+ get: (name) => name === HOOK_MARKER ? undefined : env.get(name),
14
+ };
15
+ }
16
+ // SPEC §4.19.3 step 2: the repo root from the payload cwd, else the process
17
+ // cwd, via git rev-parse. A cwd git cannot resolve is outside any Codictator
18
+ // repo, so the hook allows silently and the git-hook/CI backstops keep
19
+ // enforcing (§4.2 EC-2). The resolved root is canonicalized once via the
20
+ // kernel Fs port before config load and engine confinement: confinePath
21
+ // realpaths files before comparing against the root, so the root side must
22
+ // be canonical too — on macOS $TMPDIR lives under /var, which is a symlink
23
+ // to /private/var, and an unresolved root fails every confined access
24
+ // closed with CDX-E701. Only the kernel touches node:fs (§10.3 item 3), so
25
+ // this goes through NodeFs (whose explicit-root create already resolves via
26
+ // realpath) and reads the canonical root back with realpath(".").
27
+ // realpath is idempotent when no symlinks are present, so this is a no-op
28
+ // on Windows/Linux; a root NodeFs cannot resolve keeps the git answer, so
29
+ // unreadable roots still fail closed with CDX-E801 downstream instead of
30
+ // here.
31
+ async function canonicalRoot(root) {
32
+ const made = await NodeFs.create({ root });
33
+ if (!made.ok) {
34
+ return root;
35
+ }
36
+ const real = await made.value.realpath(".");
37
+ if (!real.ok) {
38
+ return root;
39
+ }
40
+ return real.value;
41
+ }
42
+ export async function resolveRoot(ports, startDir) {
43
+ const git = new NodeGit(ports.proc, startDir);
44
+ const root = await git.root();
45
+ if (!root.ok) {
46
+ return undefined;
47
+ }
48
+ return canonicalRoot(root.value);
49
+ }
50
+ // SPEC §4.19.3 step 3: the effective-config cache file. The keyed cache
51
+ // read lives in effective-cache.ts; the repo-relative rel paths stay here
52
+ // with the loader that reads them (§4.1.1).
53
+ const CACHE_REL = ".codictator/cache/effective.json";
54
+ const CONFIG_REL = ".codictator/config.json";
55
+ const WAIVERS_REL = ".codictator/waivers.json";
56
+ const BASELINE_REL = ".codictator/baseline.json";
57
+ export async function loadEffective(ports, root, adapter, engineVersion = ENGINE_VERSION) {
58
+ const fsMade = await NodeFs.create({ root });
59
+ if (!fsMade.ok) {
60
+ return {
61
+ ok: false,
62
+ reply: blockReply(adapter, "CDX-E801", fsMade.error.message),
63
+ };
64
+ }
65
+ // SPEC §4.1.1: Fs paths are repo-relative, so every call below is
66
+ // relative (CONFIG_REL, CACHE_REL). loadConfig takes the same logical
67
+ // root for the same reason; the Fs is already confined to root.
68
+ const fs = fsMade.value;
69
+ const seen = await fs.exists(CONFIG_REL);
70
+ if (!seen.ok) {
71
+ return {
72
+ ok: false,
73
+ reply: blockReply(adapter, "CDX-E801", seen.error.message),
74
+ };
75
+ }
76
+ if (!seen.value) {
77
+ return { ok: false, reply: allowReply(adapter, "no-config") };
78
+ }
79
+ const bytes = await fs.read(CONFIG_REL);
80
+ if (!bytes.ok) {
81
+ return {
82
+ ok: false,
83
+ reply: blockReply(adapter, "CDX-E801", bytes.error.message),
84
+ };
85
+ }
86
+ const key = cacheKeyFor([
87
+ bytes.value,
88
+ await storeBytes(fs, WAIVERS_REL),
89
+ await storeBytes(fs, BASELINE_REL),
90
+ ]);
91
+ const cached = await fs.readText(CACHE_REL);
92
+ if (cached.ok) {
93
+ const parsed = parseJson(cached.value);
94
+ if (parsed.ok) {
95
+ const hit = readCacheFile(parsed.value, key, engineVersion);
96
+ if (hit !== undefined) {
97
+ return {
98
+ ok: true,
99
+ value: { config: hit, configHash: key },
100
+ };
101
+ }
102
+ }
103
+ }
104
+ let effective;
105
+ try {
106
+ // The Fs is already confined to root, so the logical root is "."
107
+ // and config resolution reads repo-relative paths (§4.1.1).
108
+ effective = await loadConfig(".", {
109
+ fs,
110
+ proc: ports.proc,
111
+ net: ports.net,
112
+ clock: ports.clock,
113
+ git: new NodeGit(ports.proc, root),
114
+ env: hookEnv(ports.env),
115
+ }, engineVersion);
116
+ }
117
+ catch (error) {
118
+ return {
119
+ ok: false,
120
+ reply: blockReply(adapter, errorCodeOf(error, "CDX-E101"), errorMessageOf(error)),
121
+ };
122
+ }
123
+ // Best effort: a cache write failure never blocks the hook; the
124
+ // resolved config is authoritative and the next run re-resolves.
125
+ const line = new TextEncoder().encode(stableStringify({ v: 1, key, config: effective.config }));
126
+ const written = await fs.write(CACHE_REL, line);
127
+ if (!written.ok) {
128
+ return { ok: true, value: effective };
129
+ }
130
+ return { ok: true, value: effective };
131
+ }
132
+ export function errorCodeOf(error, fallback) {
133
+ if (typeof error === "object" &&
134
+ error !== null &&
135
+ "code" in error &&
136
+ typeof error.code === "string" &&
137
+ error.code !== "") {
138
+ return error.code;
139
+ }
140
+ return fallback;
141
+ }
142
+ // SPEC §9.2 with CONVENTIONS: error text never carries payload content,
143
+ // so pre-engine blocks use static strings only.
144
+ export function errorMessageOf(error) {
145
+ if (typeof error === "object" &&
146
+ error !== null &&
147
+ "message" in error &&
148
+ typeof error.message === "string") {
149
+ return error.message;
150
+ }
151
+ return "the hook runtime failed before evaluation";
152
+ }
@@ -0,0 +1,3 @@
1
+ import type { Scope } from "../engine/index.ts";
2
+ import type { HookEvent } from "./contract.ts";
3
+ export declare function hookScope(event: HookEvent, root: string): Scope;
@@ -0,0 +1,54 @@
1
+ // SPEC §4.3.2 + §4.7: the L1 hook scope for the adapter runtime. Split
2
+ // from runtime.ts; the scope stays lexical (no disk reads) so every
3
+ // harness path judges the one tool call, not the tree.
4
+ import { analyseShell } from "../../kernel/index.js";
5
+ // SPEC §4.3.2 + §4.7: the L1 hook scope is the one tool call, not the
6
+ // disk tree. Harness tool paths are absolute and usually name files that
7
+ // do not exist yet, so scoping them for disk reads would fail closed on
8
+ // every benign call. The proposed write content and the shell command
9
+ // text ride the scope instead, for the L1 enforcers to judge, together
10
+ // with the lexical write/read targets: the tool file paths plus the shell
11
+ // redirection targets parsed from the command. Absolute targets resolve
12
+ // lexically against the repo root; anything else stays as spelled. No
13
+ // disk is read: target existence is never probed.
14
+ function relativizeTarget(root, target) {
15
+ const slashed = target.replace(/\\/g, "/");
16
+ const base = root.replace(/\\/g, "/").replace(/\/+$/, "");
17
+ if (slashed === base) {
18
+ return ".";
19
+ }
20
+ if (slashed.startsWith(`${base}/`)) {
21
+ return slashed.slice(base.length + 1);
22
+ }
23
+ return target;
24
+ }
25
+ export function hookScope(event, root) {
26
+ const tool = event.tool;
27
+ const targets = new Set();
28
+ for (const raw of tool?.paths ?? []) {
29
+ targets.add(relativizeTarget(root, raw));
30
+ }
31
+ // SPEC §4.7.3 EC-8: shell redirection targets (`>`, `>>`, `tee`,
32
+ // `Out-File`, `cp`/`mv` destinations) are write targets too. The parse
33
+ // is lexical only (analyseShell never touches the disk); an
34
+ // unparseable command contributes no targets because the
35
+ // dangerous-shell enforcer already blocks it fail-closed (CDX-E306).
36
+ const command = tool?.command;
37
+ if (command !== undefined && command !== "") {
38
+ const parsed = analyseShell(command);
39
+ if (parsed.ok) {
40
+ for (const target of parsed.value.writeTargets) {
41
+ targets.add(relativizeTarget(root, target));
42
+ }
43
+ }
44
+ }
45
+ return {
46
+ files: [],
47
+ sessionId: event.sessionId,
48
+ ...(tool?.proposedContent === undefined
49
+ ? {}
50
+ : { proposedContent: tool.proposedContent }),
51
+ ...(command === undefined ? {} : { shellCommand: command }),
52
+ ...(targets.size === 0 ? {} : { proposedPaths: [...targets].sort() }),
53
+ };
54
+ }
@@ -0,0 +1,22 @@
1
+ import type { Result } from "../../kernel/index.ts";
2
+ import type { Decision, Trigger } from "../engine/index.ts";
3
+ import { CLAUDE_CODE_CAPABILITIES, claudeCodeAdapter, normalizeClaudeCodeToolName, parseClaudeCodeEvent, replyClaudeCode, staticBlockClaudeCode } from "./claude-code.ts";
4
+ import { CODEX_CAPABILITIES, codexCliAdapter, normalizeCodexToolName, parseCodexEvent, replyCodex, staticBlockCodex } from "./codex-cli.ts";
5
+ import type { Adapter, CapabilityDeclaration, FileArtifact, HookDecision, HookEvent, HookReply, HookToolCall, RenderInput, ToolKind } from "./contract.ts";
6
+ import { HOOK_PAYLOAD_MAX_BYTES } from "./contract.ts";
7
+ import { COPILOT_TIMEOUT_SEC, copilotAdapter, normalizeCopilotToolName, parseCopilotEvent, replyCopilot, staticBlockCopilot } from "./copilot.ts";
8
+ import { COPILOT_CAPABILITIES } from "./copilot-capabilities.ts";
9
+ import { CURSOR_CAPABILITIES, cursorAdapter, normalizeCursorToolName, parseCursorEvent, replyCursor, staticBlockCursor } from "./cursor.ts";
10
+ import { checkCustomContract, loadCustomAdapter, renderCustomHarnessFiles, renderCustomRegenFragment } from "./custom.ts";
11
+ import { geminiCliAdapter, parseGeminiEvent, replyGemini, staticBlockGemini } from "./gemini-cli.ts";
12
+ import { GEMINI_CAPABILITIES, normalizeGeminiToolName } from "./gemini-tables.ts";
13
+ import { MUSE_CAPABILITIES, museAdapter, normalizeMuseToolName, parseMuseEvent, replyMuse, staticBlockMuse } from "./muse-code.ts";
14
+ import { isOpenCodeVersionSupported, normalizeOpenCodeToolName, OPENCODE_VERSION_MAXIMUM_EXCLUSIVE, OPENCODE_VERSION_MINIMUM, opencodeAdapter, parseOpenCodeEvent, replyOpenCode, staticBlockOpenCode } from "./opencode.ts";
15
+ import { OPENCODE_CAPABILITIES } from "./opencode-capabilities.ts";
16
+ import { parseUniversalEvent, replyUniversal, staticBlockUniversal, UNIVERSAL_CAPABILITIES, universalAdapter } from "./universal.ts";
17
+ export { hookBudgetMs } from "./hook-dispatch.ts";
18
+ export { type HookAppend, type HookBasePorts, type HookEnforcerLoader, type HookRunRequest, runHookEvent, staticBlock, supportedHarness, } from "./runtime.ts";
19
+ export type { Adapter, CapabilityDeclaration, Decision, FileArtifact, HookDecision, HookEvent, HookReply, HookToolCall, RenderInput, ToolKind, Trigger, };
20
+ export { CLAUDE_CODE_CAPABILITIES, CODEX_CAPABILITIES, COPILOT_CAPABILITIES, COPILOT_TIMEOUT_SEC, CURSOR_CAPABILITIES, checkCustomContract, claudeCodeAdapter, codexCliAdapter, copilotAdapter, cursorAdapter, GEMINI_CAPABILITIES, geminiCliAdapter, HOOK_PAYLOAD_MAX_BYTES, isOpenCodeVersionSupported, loadCustomAdapter, MUSE_CAPABILITIES, museAdapter, normalizeClaudeCodeToolName, normalizeCodexToolName, normalizeCopilotToolName, normalizeCursorToolName, normalizeGeminiToolName, normalizeMuseToolName, normalizeOpenCodeToolName, OPENCODE_CAPABILITIES, OPENCODE_VERSION_MAXIMUM_EXCLUSIVE, OPENCODE_VERSION_MINIMUM, opencodeAdapter, parseClaudeCodeEvent, parseCodexEvent, parseCopilotEvent, parseCursorEvent, parseGeminiEvent, parseMuseEvent, parseOpenCodeEvent, parseUniversalEvent, renderCustomHarnessFiles, renderCustomRegenFragment, replyClaudeCode, replyCodex, replyCopilot, replyCursor, replyGemini, replyMuse, replyOpenCode, replyUniversal, staticBlockClaudeCode, staticBlockCodex, staticBlockCopilot, staticBlockCursor, staticBlockGemini, staticBlockMuse, staticBlockOpenCode, staticBlockUniversal, UNIVERSAL_CAPABILITIES, universalAdapter, };
21
+ export declare function parseEvent(harness: string, event: string, raw: unknown): Result<HookEvent>;
22
+ export declare function renderReply(harness: string, decision: HookDecision): HookReply;
@@ -0,0 +1,86 @@
1
+ import { err, makeError } from "../../kernel/index.js";
2
+ import { CLAUDE_CODE_CAPABILITIES, claudeCodeAdapter, normalizeClaudeCodeToolName, parseClaudeCodeEvent, replyClaudeCode, staticBlockClaudeCode, } from "./claude-code.js";
3
+ import { CODEX_CAPABILITIES, codexCliAdapter, normalizeCodexToolName, parseCodexEvent, replyCodex, staticBlockCodex, } from "./codex-cli.js";
4
+ import { HOOK_PAYLOAD_MAX_BYTES } from "./contract.js";
5
+ import { COPILOT_TIMEOUT_SEC, copilotAdapter, normalizeCopilotToolName, parseCopilotEvent, replyCopilot, staticBlockCopilot, } from "./copilot.js";
6
+ import { COPILOT_CAPABILITIES } from "./copilot-capabilities.js";
7
+ import { CURSOR_CAPABILITIES, cursorAdapter, normalizeCursorToolName, parseCursorEvent, replyCursor, staticBlockCursor, } from "./cursor.js";
8
+ import { checkCustomContract, loadCustomAdapter, renderCustomHarnessFiles, renderCustomRegenFragment, } from "./custom.js";
9
+ import { geminiCliAdapter, parseGeminiEvent, replyGemini, staticBlockGemini, } from "./gemini-cli.js";
10
+ import { GEMINI_CAPABILITIES, normalizeGeminiToolName, } from "./gemini-tables.js";
11
+ import { MUSE_CAPABILITIES, museAdapter, normalizeMuseToolName, parseMuseEvent, replyMuse, staticBlockMuse, } from "./muse-code.js";
12
+ import { isOpenCodeVersionSupported, normalizeOpenCodeToolName, OPENCODE_VERSION_MAXIMUM_EXCLUSIVE, OPENCODE_VERSION_MINIMUM, opencodeAdapter, parseOpenCodeEvent, replyOpenCode, staticBlockOpenCode, } from "./opencode.js";
13
+ import { OPENCODE_CAPABILITIES } from "./opencode-capabilities.js";
14
+ import { parseUniversalEvent, replyUniversal, staticBlockUniversal, UNIVERSAL_CAPABILITIES, universalAdapter, } from "./universal.js";
15
+ export { hookBudgetMs } from "./hook-dispatch.js";
16
+ export { runHookEvent, staticBlock, supportedHarness, } from "./runtime.js";
17
+ export { CLAUDE_CODE_CAPABILITIES, CODEX_CAPABILITIES, COPILOT_CAPABILITIES, COPILOT_TIMEOUT_SEC, CURSOR_CAPABILITIES, checkCustomContract, claudeCodeAdapter, codexCliAdapter, copilotAdapter, cursorAdapter, GEMINI_CAPABILITIES, geminiCliAdapter, HOOK_PAYLOAD_MAX_BYTES, isOpenCodeVersionSupported, loadCustomAdapter, MUSE_CAPABILITIES, museAdapter, normalizeClaudeCodeToolName, normalizeCodexToolName, normalizeCopilotToolName, normalizeCursorToolName, normalizeGeminiToolName, normalizeMuseToolName, normalizeOpenCodeToolName, OPENCODE_CAPABILITIES, OPENCODE_VERSION_MAXIMUM_EXCLUSIVE, OPENCODE_VERSION_MINIMUM, opencodeAdapter, parseClaudeCodeEvent, parseCodexEvent, parseCopilotEvent, parseCursorEvent, parseGeminiEvent, parseMuseEvent, parseOpenCodeEvent, parseUniversalEvent, renderCustomHarnessFiles, renderCustomRegenFragment, replyClaudeCode, replyCodex, replyCopilot, replyCursor, replyGemini, replyMuse, replyOpenCode, replyUniversal, staticBlockClaudeCode, staticBlockCodex, staticBlockCopilot, staticBlockCursor, staticBlockGemini, staticBlockMuse, staticBlockOpenCode, staticBlockUniversal, UNIVERSAL_CAPABILITIES, universalAdapter, };
18
+ // SPEC §4.5.3: native harness payload to the normalised event. Payloads
19
+ // over the 8 MiB cap block CDX-E305 here too (§4.5 EC-11), so the parse
20
+ // layer enforces the same limit the runtime stdin read enforces.
21
+ export function parseEvent(harness, event, raw) {
22
+ const text = JSON.stringify(raw);
23
+ if (text !== undefined &&
24
+ new TextEncoder().encode(text).length > HOOK_PAYLOAD_MAX_BYTES) {
25
+ return err(makeError("CDX-E305", "hook payload over 8 MiB is refused", "Write the file in smaller edits, then retry the tool call."));
26
+ }
27
+ if (harness === museAdapter.id) {
28
+ return museAdapter.parse(event, raw);
29
+ }
30
+ if (harness === opencodeAdapter.id) {
31
+ return opencodeAdapter.parse(event, raw);
32
+ }
33
+ if (harness === claudeCodeAdapter.id) {
34
+ return claudeCodeAdapter.parse(event, raw);
35
+ }
36
+ if (harness === copilotAdapter.id) {
37
+ return copilotAdapter.parse(event, raw);
38
+ }
39
+ if (harness === cursorAdapter.id) {
40
+ return cursorAdapter.parse(event, raw);
41
+ }
42
+ if (harness === geminiCliAdapter.id) {
43
+ return geminiCliAdapter.parse(event, raw);
44
+ }
45
+ if (harness === codexCliAdapter.id) {
46
+ return codexCliAdapter.parse(event, raw);
47
+ }
48
+ if (harness === universalAdapter.id) {
49
+ return universalAdapter.parse(event, raw);
50
+ }
51
+ // SPEC §4.5.6: the sync event seam cannot resolve custom adapters (the
52
+ // loader is async and root-confined), so every custom: id answers
53
+ // CDX-E301 here; callers with a root use loadCustomAdapter instead.
54
+ if (harness.startsWith("custom:")) {
55
+ return err(makeError("CDX-E301", `unknown harness id "${harness}"`, "Install the adapter under .codictator/adapters/<id>/adapter.mjs, then load it with loadCustomAdapter."));
56
+ }
57
+ throw new Error(`not implemented: SPEC §4.5.4 adapter for ${harness}`);
58
+ }
59
+ // SPEC §4.5.4: verdict to the harness-native reply.
60
+ export function renderReply(harness, decision) {
61
+ if (harness === museAdapter.id) {
62
+ return museAdapter.reply(decision);
63
+ }
64
+ if (harness === opencodeAdapter.id) {
65
+ return opencodeAdapter.reply(decision);
66
+ }
67
+ if (harness === claudeCodeAdapter.id) {
68
+ return claudeCodeAdapter.reply(decision);
69
+ }
70
+ if (harness === copilotAdapter.id) {
71
+ return copilotAdapter.reply(decision);
72
+ }
73
+ if (harness === cursorAdapter.id) {
74
+ return cursorAdapter.reply(decision);
75
+ }
76
+ if (harness === geminiCliAdapter.id) {
77
+ return geminiCliAdapter.reply(decision);
78
+ }
79
+ if (harness === codexCliAdapter.id) {
80
+ return codexCliAdapter.reply(decision);
81
+ }
82
+ if (harness === universalAdapter.id) {
83
+ return universalAdapter.reply(decision);
84
+ }
85
+ throw new Error(`not implemented: SPEC §4.5.4 adapter for ${harness}`);
86
+ }
@@ -0,0 +1,8 @@
1
+ import type { Result } from "../../kernel/index.ts";
2
+ import type { Adapter, CapabilityDeclaration, HookDecision, HookEvent, HookReply, ToolKind } from "./contract.ts";
3
+ export declare function normalizeMuseToolName(name: string): ToolKind;
4
+ export declare function parseMuseEvent(event: string, raw: unknown): Result<HookEvent>;
5
+ export declare function replyMuse(decision: HookDecision): HookReply;
6
+ export declare function staticBlockMuse(code: string, message: string): HookReply;
7
+ export declare const MUSE_CAPABILITIES: CapabilityDeclaration;
8
+ export declare const museAdapter: Adapter;