codictator 0.0.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (840) 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/passing/exported/case.json +8 -0
  189. package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
  190. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
  191. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
  192. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
  193. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
  194. package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
  195. package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
  196. package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
  197. package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
  198. package/dist/builtin-packs/typescript/index.ts +85 -0
  199. package/dist/builtin-packs/typescript/lex.ts +199 -0
  200. package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
  201. package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
  202. package/dist/builtin-packs/typescript/measures.ts +10 -0
  203. package/dist/builtin-packs/typescript/naming.ts +47 -0
  204. package/dist/builtin-packs/typescript/pack.json +169 -0
  205. package/dist/builtin-packs/typescript/patterns.ts +93 -0
  206. package/dist/builtin-packs/typescript/resolve.ts +224 -0
  207. package/dist/builtin-packs/typescript/strict.ts +177 -0
  208. package/dist/builtin-packs/typescript/titles.ts +184 -0
  209. package/dist/cli/baseline.d.ts +3 -0
  210. package/dist/cli/baseline.js +67 -0
  211. package/dist/cli/ci-bot-change.d.ts +3 -0
  212. package/dist/cli/ci-bot-change.js +54 -0
  213. package/dist/cli/ci-range.d.ts +18 -0
  214. package/dist/cli/ci-range.js +228 -0
  215. package/dist/cli/ci-summary.d.ts +3 -0
  216. package/dist/cli/ci-summary.js +45 -0
  217. package/dist/cli/ci.d.ts +4 -0
  218. package/dist/cli/ci.js +195 -0
  219. package/dist/cli/commands.d.ts +5 -0
  220. package/dist/cli/commands.js +39 -0
  221. package/dist/cli/deps.d.ts +3 -0
  222. package/dist/cli/deps.js +115 -0
  223. package/dist/cli/drift.d.ts +11 -0
  224. package/dist/cli/drift.js +91 -0
  225. package/dist/cli/evaluate.d.ts +20 -0
  226. package/dist/cli/evaluate.js +213 -0
  227. package/dist/cli/gate-scope.d.ts +11 -0
  228. package/dist/cli/gate-scope.js +93 -0
  229. package/dist/cli/git-hook.d.ts +3 -0
  230. package/dist/cli/git-hook.js +184 -0
  231. package/dist/cli/guardrail.d.ts +5 -0
  232. package/dist/cli/guardrail.js +190 -0
  233. package/dist/cli/index.d.ts +12 -0
  234. package/dist/cli/index.js +198 -0
  235. package/dist/cli/init-plan.d.ts +23 -0
  236. package/dist/cli/init-plan.js +135 -0
  237. package/dist/cli/init.d.ts +3 -0
  238. package/dist/cli/init.js +122 -0
  239. package/dist/cli/inspect-status.d.ts +8 -0
  240. package/dist/cli/inspect-status.js +164 -0
  241. package/dist/cli/inspect.d.ts +5 -0
  242. package/dist/cli/inspect.js +98 -0
  243. package/dist/cli/main.d.ts +2 -0
  244. package/dist/cli/main.js +60 -0
  245. package/dist/cli/pack-adapters.d.ts +3 -0
  246. package/dist/cli/pack-adapters.js +81 -0
  247. package/dist/cli/packs.d.ts +6 -0
  248. package/dist/cli/packs.js +131 -0
  249. package/dist/cli/plan-launcher.d.ts +2 -0
  250. package/dist/cli/plan-launcher.js +272 -0
  251. package/dist/cli/plan.d.ts +25 -0
  252. package/dist/cli/plan.js +121 -0
  253. package/dist/cli/proofs-test.d.ts +3 -0
  254. package/dist/cli/proofs-test.js +77 -0
  255. package/dist/cli/proofs.d.ts +3 -0
  256. package/dist/cli/proofs.js +168 -0
  257. package/dist/cli/remediation.d.ts +3 -0
  258. package/dist/cli/remediation.js +107 -0
  259. package/dist/cli/report.d.ts +4 -0
  260. package/dist/cli/report.js +93 -0
  261. package/dist/cli/serve-eval.d.ts +2 -0
  262. package/dist/cli/serve-eval.js +165 -0
  263. package/dist/cli/serve-log.d.ts +2 -0
  264. package/dist/cli/serve-log.js +150 -0
  265. package/dist/cli/serve-methods.d.ts +2 -0
  266. package/dist/cli/serve-methods.js +181 -0
  267. package/dist/cli/serve-protocol.d.ts +35 -0
  268. package/dist/cli/serve-protocol.js +97 -0
  269. package/dist/cli/serve-run.d.ts +9 -0
  270. package/dist/cli/serve-run.js +135 -0
  271. package/dist/cli/serve-server.d.ts +5 -0
  272. package/dist/cli/serve-server.js +120 -0
  273. package/dist/cli/serve-shared.d.ts +34 -0
  274. package/dist/cli/serve-shared.js +20 -0
  275. package/dist/cli/serve-status.d.ts +2 -0
  276. package/dist/cli/serve-status.js +130 -0
  277. package/dist/cli/serve-transport.d.ts +2 -0
  278. package/dist/cli/serve-transport.js +114 -0
  279. package/dist/cli/shared.d.ts +35 -0
  280. package/dist/cli/shared.js +181 -0
  281. package/dist/cli/task-advance.d.ts +3 -0
  282. package/dist/cli/task-advance.js +144 -0
  283. package/dist/cli/task-phases.d.ts +3 -0
  284. package/dist/cli/task-phases.js +77 -0
  285. package/dist/cli/tasks.d.ts +12 -0
  286. package/dist/cli/tasks.js +176 -0
  287. package/dist/cli/transparency.d.ts +4 -0
  288. package/dist/cli/transparency.js +197 -0
  289. package/dist/cli/waivers.d.ts +3 -0
  290. package/dist/cli/waivers.js +195 -0
  291. package/dist/features/adapters/claude-code.d.ts +8 -0
  292. package/dist/features/adapters/claude-code.js +198 -0
  293. package/dist/features/adapters/claude-shaped.d.ts +4 -0
  294. package/dist/features/adapters/claude-shaped.js +174 -0
  295. package/dist/features/adapters/codex-cli.d.ts +8 -0
  296. package/dist/features/adapters/codex-cli.js +180 -0
  297. package/dist/features/adapters/contract.d.ts +104 -0
  298. package/dist/features/adapters/contract.js +17 -0
  299. package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
  300. package/dist/features/adapters/copilot-capabilities.js +46 -0
  301. package/dist/features/adapters/copilot.d.ts +8 -0
  302. package/dist/features/adapters/copilot.js +200 -0
  303. package/dist/features/adapters/cursor.d.ts +8 -0
  304. package/dist/features/adapters/cursor.js +245 -0
  305. package/dist/features/adapters/custom-event.d.ts +3 -0
  306. package/dist/features/adapters/custom-event.js +180 -0
  307. package/dist/features/adapters/custom-load.d.ts +3 -0
  308. package/dist/features/adapters/custom-load.js +185 -0
  309. package/dist/features/adapters/custom-shape.d.ts +21 -0
  310. package/dist/features/adapters/custom-shape.js +87 -0
  311. package/dist/features/adapters/custom.d.ts +9 -0
  312. package/dist/features/adapters/custom.js +130 -0
  313. package/dist/features/adapters/effective-cache.d.ts +5 -0
  314. package/dist/features/adapters/effective-cache.js +45 -0
  315. package/dist/features/adapters/gemini-cli.d.ts +6 -0
  316. package/dist/features/adapters/gemini-cli.js +160 -0
  317. package/dist/features/adapters/gemini-tables.d.ts +7 -0
  318. package/dist/features/adapters/gemini-tables.js +104 -0
  319. package/dist/features/adapters/hook-dispatch.d.ts +7 -0
  320. package/dist/features/adapters/hook-dispatch.js +97 -0
  321. package/dist/features/adapters/hook-injection.d.ts +12 -0
  322. package/dist/features/adapters/hook-injection.js +75 -0
  323. package/dist/features/adapters/hook-load.d.ts +15 -0
  324. package/dist/features/adapters/hook-load.js +152 -0
  325. package/dist/features/adapters/hook-scope.d.ts +3 -0
  326. package/dist/features/adapters/hook-scope.js +54 -0
  327. package/dist/features/adapters/index.d.ts +22 -0
  328. package/dist/features/adapters/index.js +86 -0
  329. package/dist/features/adapters/muse-code.d.ts +8 -0
  330. package/dist/features/adapters/muse-code.js +223 -0
  331. package/dist/features/adapters/opencode-bridge.d.ts +1 -0
  332. package/dist/features/adapters/opencode-bridge.js +230 -0
  333. package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
  334. package/dist/features/adapters/opencode-capabilities.js +47 -0
  335. package/dist/features/adapters/opencode-parse.d.ts +3 -0
  336. package/dist/features/adapters/opencode-parse.js +137 -0
  337. package/dist/features/adapters/opencode-tables.d.ts +5 -0
  338. package/dist/features/adapters/opencode-tables.js +63 -0
  339. package/dist/features/adapters/opencode.d.ts +10 -0
  340. package/dist/features/adapters/opencode.js +97 -0
  341. package/dist/features/adapters/runtime.d.ts +25 -0
  342. package/dist/features/adapters/runtime.js +148 -0
  343. package/dist/features/adapters/universal.d.ts +7 -0
  344. package/dist/features/adapters/universal.js +89 -0
  345. package/dist/features/arch/arch-profiles.d.ts +3 -0
  346. package/dist/features/arch/arch-profiles.js +5 -0
  347. package/dist/features/arch/checks.d.ts +25 -0
  348. package/dist/features/arch/checks.js +173 -0
  349. package/dist/features/arch/codictator-modules.d.ts +4 -0
  350. package/dist/features/arch/codictator-modules.js +180 -0
  351. package/dist/features/arch/cycle-walk.d.ts +1 -0
  352. package/dist/features/arch/cycle-walk.js +36 -0
  353. package/dist/features/arch/edge-checks.d.ts +13 -0
  354. package/dist/features/arch/edge-checks.js +186 -0
  355. package/dist/features/arch/graph.d.ts +32 -0
  356. package/dist/features/arch/graph.js +202 -0
  357. package/dist/features/arch/index.d.ts +29 -0
  358. package/dist/features/arch/index.js +16 -0
  359. package/dist/features/arch/layer-rules.d.ts +3 -0
  360. package/dist/features/arch/layer-rules.js +38 -0
  361. package/dist/features/arch/module-map-validation.d.ts +3 -0
  362. package/dist/features/arch/module-map-validation.js +30 -0
  363. package/dist/features/arch/module-mapping.d.ts +15 -0
  364. package/dist/features/arch/module-mapping.js +184 -0
  365. package/dist/features/arch/profiles.d.ts +4 -0
  366. package/dist/features/arch/profiles.js +8 -0
  367. package/dist/features/audit/append.d.ts +26 -0
  368. package/dist/features/audit/append.js +210 -0
  369. package/dist/features/audit/explain-table-tail.d.ts +2 -0
  370. package/dist/features/audit/explain-table-tail.js +29 -0
  371. package/dist/features/audit/explain-table.d.ts +8 -0
  372. package/dist/features/audit/explain-table.js +48 -0
  373. package/dist/features/audit/explain.d.ts +7 -0
  374. package/dist/features/audit/explain.js +87 -0
  375. package/dist/features/audit/index.d.ts +37 -0
  376. package/dist/features/audit/index.js +17 -0
  377. package/dist/features/audit/injection-event.d.ts +11 -0
  378. package/dist/features/audit/injection-event.js +17 -0
  379. package/dist/features/audit/read.d.ts +8 -0
  380. package/dist/features/audit/read.js +62 -0
  381. package/dist/features/audit/summarize.d.ts +1 -0
  382. package/dist/features/audit/summarize.js +41 -0
  383. package/dist/features/audit/surfaces.d.ts +47 -0
  384. package/dist/features/audit/surfaces.js +172 -0
  385. package/dist/features/audit/token-saver-evidence.d.ts +14 -0
  386. package/dist/features/audit/token-saver-evidence.js +85 -0
  387. package/dist/features/ci/changes.d.ts +28 -0
  388. package/dist/features/ci/changes.js +88 -0
  389. package/dist/features/ci/index.d.ts +22 -0
  390. package/dist/features/ci/index.js +75 -0
  391. package/dist/features/ci/protection-read.d.ts +3 -0
  392. package/dist/features/ci/protection-read.js +264 -0
  393. package/dist/features/ci/protection.d.ts +25 -0
  394. package/dist/features/ci/protection.js +101 -0
  395. package/dist/features/ci/workflow.d.ts +23 -0
  396. package/dist/features/ci/workflow.js +261 -0
  397. package/dist/features/config/human.d.ts +4 -0
  398. package/dist/features/config/human.js +31 -0
  399. package/dist/features/config/index.d.ts +37 -0
  400. package/dist/features/config/index.js +129 -0
  401. package/dist/features/config/pack-data.d.ts +18 -0
  402. package/dist/features/config/pack-data.js +116 -0
  403. package/dist/features/config/validate-sections.d.ts +6 -0
  404. package/dist/features/config/validate-sections.js +198 -0
  405. package/dist/features/config/validate-shared.d.ts +8 -0
  406. package/dist/features/config/validate-shared.js +69 -0
  407. package/dist/features/config/validate-tunables.d.ts +1 -0
  408. package/dist/features/config/validate-tunables.js +89 -0
  409. package/dist/features/config/validate.d.ts +2 -0
  410. package/dist/features/config/validate.js +57 -0
  411. package/dist/features/deps/bots.d.ts +5 -0
  412. package/dist/features/deps/bots.js +39 -0
  413. package/dist/features/deps/capabilities.d.ts +3 -0
  414. package/dist/features/deps/capabilities.js +91 -0
  415. package/dist/features/deps/check.d.ts +18 -0
  416. package/dist/features/deps/check.js +70 -0
  417. package/dist/features/deps/dependabot.d.ts +10 -0
  418. package/dist/features/deps/dependabot.js +154 -0
  419. package/dist/features/deps/eval.d.ts +41 -0
  420. package/dist/features/deps/eval.js +24 -0
  421. package/dist/features/deps/fields.d.ts +4 -0
  422. package/dist/features/deps/fields.js +18 -0
  423. package/dist/features/deps/index.d.ts +67 -0
  424. package/dist/features/deps/index.js +27 -0
  425. package/dist/features/deps/lockfile.d.ts +8 -0
  426. package/dist/features/deps/lockfile.js +87 -0
  427. package/dist/features/deps/npm.d.ts +22 -0
  428. package/dist/features/deps/npm.js +187 -0
  429. package/dist/features/deps/npmrc.d.ts +12 -0
  430. package/dist/features/deps/npmrc.js +50 -0
  431. package/dist/features/deps/nuget.d.ts +25 -0
  432. package/dist/features/deps/nuget.js +112 -0
  433. package/dist/features/deps/osv-ranges.d.ts +12 -0
  434. package/dist/features/deps/osv-ranges.js +83 -0
  435. package/dist/features/deps/osv.d.ts +16 -0
  436. package/dist/features/deps/osv.js +144 -0
  437. package/dist/features/deps/pypi-pyproject.d.ts +7 -0
  438. package/dist/features/deps/pypi-pyproject.js +118 -0
  439. package/dist/features/deps/pypi.d.ts +29 -0
  440. package/dist/features/deps/pypi.js +137 -0
  441. package/dist/features/deps/registry.d.ts +29 -0
  442. package/dist/features/deps/registry.js +158 -0
  443. package/dist/features/deps/renovate.d.ts +15 -0
  444. package/dist/features/deps/renovate.js +98 -0
  445. package/dist/features/deps/selection.d.ts +20 -0
  446. package/dist/features/deps/selection.js +150 -0
  447. package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
  448. package/dist/features/deps/snapshot-verdicts.js +184 -0
  449. package/dist/features/deps/stable.d.ts +19 -0
  450. package/dist/features/deps/stable.js +131 -0
  451. package/dist/features/deps/step-size.d.ts +7 -0
  452. package/dist/features/deps/step-size.js +24 -0
  453. package/dist/features/deps/upgrade.d.ts +35 -0
  454. package/dist/features/deps/upgrade.js +124 -0
  455. package/dist/features/deps/verdicts.d.ts +21 -0
  456. package/dist/features/deps/verdicts.js +219 -0
  457. package/dist/features/engine/evaluate.d.ts +12 -0
  458. package/dist/features/engine/evaluate.js +170 -0
  459. package/dist/features/engine/index.d.ts +21 -0
  460. package/dist/features/engine/index.js +24 -0
  461. package/dist/features/engine/message.d.ts +3 -0
  462. package/dist/features/engine/message.js +69 -0
  463. package/dist/features/engine/ratchet.d.ts +1 -0
  464. package/dist/features/engine/ratchet.js +63 -0
  465. package/dist/features/engine/run-enforcer.d.ts +4 -0
  466. package/dist/features/engine/run-enforcer.js +82 -0
  467. package/dist/features/engine/waivers.d.ts +23 -0
  468. package/dist/features/engine/waivers.js +169 -0
  469. package/dist/features/generator/draft.d.ts +7 -0
  470. package/dist/features/generator/draft.js +148 -0
  471. package/dist/features/generator/index.d.ts +22 -0
  472. package/dist/features/generator/index.js +8 -0
  473. package/dist/features/generator/llm-draft.d.ts +3 -0
  474. package/dist/features/generator/llm-draft.js +93 -0
  475. package/dist/features/generator/prompt.d.ts +25 -0
  476. package/dist/features/generator/prompt.js +105 -0
  477. package/dist/features/generator/self-test.d.ts +12 -0
  478. package/dist/features/generator/self-test.js +65 -0
  479. package/dist/features/generator/templates.d.ts +26 -0
  480. package/dist/features/generator/templates.js +177 -0
  481. package/dist/features/integrity/drift.d.ts +19 -0
  482. package/dist/features/integrity/drift.js +168 -0
  483. package/dist/features/integrity/hooks.d.ts +19 -0
  484. package/dist/features/integrity/hooks.js +54 -0
  485. package/dist/features/integrity/index.d.ts +10 -0
  486. package/dist/features/integrity/index.js +14 -0
  487. package/dist/features/integrity/manifest.d.ts +15 -0
  488. package/dist/features/integrity/manifest.js +26 -0
  489. package/dist/features/integrity/self-protection.d.ts +12 -0
  490. package/dist/features/integrity/self-protection.js +144 -0
  491. package/dist/features/llm/attempt.d.ts +17 -0
  492. package/dist/features/llm/attempt.js +99 -0
  493. package/dist/features/llm/errors.d.ts +5 -0
  494. package/dist/features/llm/errors.js +18 -0
  495. package/dist/features/llm/index.d.ts +23 -0
  496. package/dist/features/llm/index.js +46 -0
  497. package/dist/features/llm/presets.d.ts +25 -0
  498. package/dist/features/llm/presets.js +159 -0
  499. package/dist/features/llm/wire.d.ts +17 -0
  500. package/dist/features/llm/wire.js +163 -0
  501. package/dist/features/packs/accept.d.ts +7 -0
  502. package/dist/features/packs/accept.js +73 -0
  503. package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
  504. package/dist/features/packs/enforcers/arch-guards.js +193 -0
  505. package/dist/features/packs/enforcers/binding.d.ts +31 -0
  506. package/dist/features/packs/enforcers/binding.js +157 -0
  507. package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
  508. package/dist/features/packs/enforcers/ci-guards.js +131 -0
  509. package/dist/features/packs/enforcers/code-health.d.ts +9 -0
  510. package/dist/features/packs/enforcers/code-health.js +180 -0
  511. package/dist/features/packs/enforcers/code.d.ts +5 -0
  512. package/dist/features/packs/enforcers/code.js +129 -0
  513. package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
  514. package/dist/features/packs/enforcers/command-forbid.js +61 -0
  515. package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
  516. package/dist/features/packs/enforcers/deps-guards.js +235 -0
  517. package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
  518. package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
  519. package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
  520. package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
  521. package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
  522. package/dist/features/packs/enforcers/docs-guards.js +180 -0
  523. package/dist/features/packs/enforcers/engine-version-guards.d.ts +6 -0
  524. package/dist/features/packs/enforcers/engine-version-guards.js +42 -0
  525. package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
  526. package/dist/features/packs/enforcers/external-attribute.js +122 -0
  527. package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
  528. package/dist/features/packs/enforcers/external-bind.js +206 -0
  529. package/dist/features/packs/enforcers/external-check.d.ts +7 -0
  530. package/dist/features/packs/enforcers/external-check.js +131 -0
  531. package/dist/features/packs/enforcers/external-output.d.ts +30 -0
  532. package/dist/features/packs/enforcers/external-output.js +144 -0
  533. package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
  534. package/dist/features/packs/enforcers/external-probe.js +65 -0
  535. package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
  536. package/dist/features/packs/enforcers/external-runs.js +162 -0
  537. package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
  538. package/dist/features/packs/enforcers/external-sarif.js +109 -0
  539. package/dist/features/packs/enforcers/external.d.ts +39 -0
  540. package/dist/features/packs/enforcers/external.js +11 -0
  541. package/dist/features/packs/enforcers/gate-guards.d.ts +11 -0
  542. package/dist/features/packs/enforcers/gate-guards.js +117 -0
  543. package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
  544. package/dist/features/packs/enforcers/health-abstraction.js +126 -0
  545. package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
  546. package/dist/features/packs/enforcers/health-duplication.js +197 -0
  547. package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
  548. package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
  549. package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
  550. package/dist/features/packs/enforcers/health-lex-template.js +67 -0
  551. package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
  552. package/dist/features/packs/enforcers/health-lex.js +227 -0
  553. package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
  554. package/dist/features/packs/enforcers/health-markers.js +31 -0
  555. package/dist/features/packs/enforcers/health-measures.d.ts +26 -0
  556. package/dist/features/packs/enforcers/health-measures.js +223 -0
  557. package/dist/features/packs/enforcers/health-refs.d.ts +5 -0
  558. package/dist/features/packs/enforcers/health-refs.js +76 -0
  559. package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
  560. package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
  561. package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
  562. package/dist/features/packs/enforcers/integrity-guards.js +202 -0
  563. package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
  564. package/dist/features/packs/enforcers/jsonkey.js +95 -0
  565. package/dist/features/packs/enforcers/parametric.d.ts +7 -0
  566. package/dist/features/packs/enforcers/parametric.js +138 -0
  567. package/dist/features/packs/enforcers/pattern.d.ts +11 -0
  568. package/dist/features/packs/enforcers/pattern.js +88 -0
  569. package/dist/features/packs/enforcers/placement.d.ts +10 -0
  570. package/dist/features/packs/enforcers/placement.js +54 -0
  571. package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
  572. package/dist/features/packs/enforcers/py-checks.js +131 -0
  573. package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
  574. package/dist/features/packs/enforcers/py-lex.js +271 -0
  575. package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
  576. package/dist/features/packs/enforcers/py-phantom.js +163 -0
  577. package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
  578. package/dist/features/packs/enforcers/py-pins.js +184 -0
  579. package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
  580. package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
  581. package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
  582. package/dist/features/packs/enforcers/records-guards.js +178 -0
  583. package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
  584. package/dist/features/packs/enforcers/remediation-guards.js +42 -0
  585. package/dist/features/packs/enforcers/required.d.ts +10 -0
  586. package/dist/features/packs/enforcers/required.js +65 -0
  587. package/dist/features/packs/enforcers/secret-scan.d.ts +6 -0
  588. package/dist/features/packs/enforcers/secret-scan.js +173 -0
  589. package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
  590. package/dist/features/packs/enforcers/shell-analyse.js +105 -0
  591. package/dist/features/packs/enforcers/sizes.d.ts +10 -0
  592. package/dist/features/packs/enforcers/sizes.js +82 -0
  593. package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
  594. package/dist/features/packs/enforcers/steering-guards.js +162 -0
  595. package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
  596. package/dist/features/packs/enforcers/testing-guards.js +118 -0
  597. package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
  598. package/dist/features/packs/enforcers/ts-checks.js +147 -0
  599. package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
  600. package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
  601. package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
  602. package/dist/features/packs/enforcers/ts-phantom.js +117 -0
  603. package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
  604. package/dist/features/packs/enforcers/ts-security-patterns.js +97 -0
  605. package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
  606. package/dist/features/packs/enforcers/workflow-guards.js +117 -0
  607. package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
  608. package/dist/features/packs/enforcers/write-confine.js +131 -0
  609. package/dist/features/packs/hashes.d.ts +6 -0
  610. package/dist/features/packs/hashes.js +84 -0
  611. package/dist/features/packs/index.d.ts +22 -0
  612. package/dist/features/packs/index.js +15 -0
  613. package/dist/features/packs/loader.d.ts +13 -0
  614. package/dist/features/packs/loader.js +205 -0
  615. package/dist/features/packs/manifest-decl.d.ts +13 -0
  616. package/dist/features/packs/manifest-decl.js +121 -0
  617. package/dist/features/packs/manifest.d.ts +7 -0
  618. package/dist/features/packs/manifest.js +95 -0
  619. package/dist/features/packs/params.d.ts +2 -0
  620. package/dist/features/packs/params.js +90 -0
  621. package/dist/features/packs/registry.d.ts +11 -0
  622. package/dist/features/packs/registry.js +136 -0
  623. package/dist/features/packs/selftest.d.ts +3 -0
  624. package/dist/features/packs/selftest.js +144 -0
  625. package/dist/features/records/bug-grammar.d.ts +17 -0
  626. package/dist/features/records/bug-grammar.js +128 -0
  627. package/dist/features/records/bug-registry.d.ts +9 -0
  628. package/dist/features/records/bug-registry.js +67 -0
  629. package/dist/features/records/bug-rows-immutable.d.ts +3 -0
  630. package/dist/features/records/bug-rows-immutable.js +52 -0
  631. package/dist/features/records/bugs.d.ts +2 -0
  632. package/dist/features/records/bugs.js +24 -0
  633. package/dist/features/records/docs-lines.d.ts +16 -0
  634. package/dist/features/records/docs-lines.js +36 -0
  635. package/dist/features/records/docs-prose.d.ts +14 -0
  636. package/dist/features/records/docs-prose.js +252 -0
  637. package/dist/features/records/docs-structure.d.ts +17 -0
  638. package/dist/features/records/docs-structure.js +223 -0
  639. package/dist/features/records/docs.d.ts +9 -0
  640. package/dist/features/records/docs.js +238 -0
  641. package/dist/features/records/history-checks.d.ts +6 -0
  642. package/dist/features/records/history-checks.js +94 -0
  643. package/dist/features/records/history-parse.d.ts +16 -0
  644. package/dist/features/records/history-parse.js +101 -0
  645. package/dist/features/records/history-scope.d.ts +5 -0
  646. package/dist/features/records/history-scope.js +86 -0
  647. package/dist/features/records/history.d.ts +3 -0
  648. package/dist/features/records/history.js +5 -0
  649. package/dist/features/records/index.d.ts +8 -0
  650. package/dist/features/records/index.js +11 -0
  651. package/dist/features/remediation/adoption.d.ts +32 -0
  652. package/dist/features/remediation/adoption.js +142 -0
  653. package/dist/features/remediation/index.d.ts +12 -0
  654. package/dist/features/remediation/index.js +21 -0
  655. package/dist/features/remediation/plan-chains.d.ts +3 -0
  656. package/dist/features/remediation/plan-chains.js +111 -0
  657. package/dist/features/remediation/plan-generate.d.ts +3 -0
  658. package/dist/features/remediation/plan-generate.js +129 -0
  659. package/dist/features/remediation/plan-kinds.d.ts +32 -0
  660. package/dist/features/remediation/plan-kinds.js +42 -0
  661. package/dist/features/remediation/plan-markers.d.ts +2 -0
  662. package/dist/features/remediation/plan-markers.js +155 -0
  663. package/dist/features/remediation/plan-merge.d.ts +6 -0
  664. package/dist/features/remediation/plan-merge.js +33 -0
  665. package/dist/features/remediation/plan.d.ts +4 -0
  666. package/dist/features/remediation/plan.js +7 -0
  667. package/dist/features/remediation/step-floor.d.ts +5 -0
  668. package/dist/features/remediation/step-floor.js +76 -0
  669. package/dist/features/remediation/step-gates.d.ts +18 -0
  670. package/dist/features/remediation/step-gates.js +77 -0
  671. package/dist/features/remediation/step-split.d.ts +12 -0
  672. package/dist/features/remediation/step-split.js +75 -0
  673. package/dist/features/remediation/steps.d.ts +3 -0
  674. package/dist/features/remediation/steps.js +6 -0
  675. package/dist/features/remediation/types.d.ts +37 -0
  676. package/dist/features/remediation/types.js +1 -0
  677. package/dist/features/security/index.d.ts +12 -0
  678. package/dist/features/security/index.js +142 -0
  679. package/dist/features/steering/agent-assets.d.ts +7 -0
  680. package/dist/features/steering/agent-assets.js +75 -0
  681. package/dist/features/steering/budgets.d.ts +20 -0
  682. package/dist/features/steering/budgets.js +86 -0
  683. package/dist/features/steering/checks.d.ts +7 -0
  684. package/dist/features/steering/checks.js +67 -0
  685. package/dist/features/steering/context-file.d.ts +11 -0
  686. package/dist/features/steering/context-file.js +107 -0
  687. package/dist/features/steering/graph-scan.d.ts +7 -0
  688. package/dist/features/steering/graph-scan.js +17 -0
  689. package/dist/features/steering/index.d.ts +30 -0
  690. package/dist/features/steering/index.js +45 -0
  691. package/dist/features/steering/injection.d.ts +23 -0
  692. package/dist/features/steering/injection.js +124 -0
  693. package/dist/features/steering/mcp.d.ts +2 -0
  694. package/dist/features/steering/mcp.js +18 -0
  695. package/dist/features/steering/precedence.d.ts +10 -0
  696. package/dist/features/steering/precedence.js +28 -0
  697. package/dist/features/steering/read-cache.d.ts +13 -0
  698. package/dist/features/steering/read-cache.js +51 -0
  699. package/dist/features/testing/base.d.ts +1 -0
  700. package/dist/features/testing/base.js +8 -0
  701. package/dist/features/testing/covers.d.ts +8 -0
  702. package/dist/features/testing/covers.js +50 -0
  703. package/dist/features/testing/evaluate.d.ts +19 -0
  704. package/dist/features/testing/evaluate.js +47 -0
  705. package/dist/features/testing/index.d.ts +10 -0
  706. package/dist/features/testing/index.js +13 -0
  707. package/dist/features/testing/integrity.d.ts +28 -0
  708. package/dist/features/testing/integrity.js +140 -0
  709. package/dist/features/testing/ledger.d.ts +11 -0
  710. package/dist/features/testing/ledger.js +51 -0
  711. package/dist/features/testing/proofs.d.ts +26 -0
  712. package/dist/features/testing/proofs.js +88 -0
  713. package/dist/features/testing/report.d.ts +6 -0
  714. package/dist/features/testing/report.js +16 -0
  715. package/dist/features/testing/scenarios.d.ts +34 -0
  716. package/dist/features/testing/scenarios.js +112 -0
  717. package/dist/features/testing/tap-parser.d.ts +9 -0
  718. package/dist/features/testing/tap-parser.js +96 -0
  719. package/dist/features/testing/trace.d.ts +23 -0
  720. package/dist/features/testing/trace.js +110 -0
  721. package/dist/features/workflow/index.d.ts +14 -0
  722. package/dist/features/workflow/index.js +19 -0
  723. package/dist/features/workflow/loop.d.ts +5 -0
  724. package/dist/features/workflow/loop.js +36 -0
  725. package/dist/features/workflow/phases.d.ts +10 -0
  726. package/dist/features/workflow/phases.js +184 -0
  727. package/dist/features/workflow/review.d.ts +25 -0
  728. package/dist/features/workflow/review.js +119 -0
  729. package/dist/features/workflow/tasks.d.ts +73 -0
  730. package/dist/features/workflow/tasks.js +80 -0
  731. package/dist/features/workflow/writes.d.ts +8 -0
  732. package/dist/features/workflow/writes.js +96 -0
  733. package/dist/kernel/clock.d.ts +4 -0
  734. package/dist/kernel/clock.js +5 -0
  735. package/dist/kernel/config-keys.d.ts +2 -0
  736. package/dist/kernel/config-keys.js +5 -0
  737. package/dist/kernel/config-toml-keys.d.ts +2 -0
  738. package/dist/kernel/config-toml-keys.js +237 -0
  739. package/dist/kernel/config-yaml-keys.d.ts +2 -0
  740. package/dist/kernel/config-yaml-keys.js +177 -0
  741. package/dist/kernel/contracts.d.ts +76 -0
  742. package/dist/kernel/contracts.js +9 -0
  743. package/dist/kernel/entry.d.ts +1 -0
  744. package/dist/kernel/entry.js +31 -0
  745. package/dist/kernel/env.d.ts +4 -0
  746. package/dist/kernel/env.js +5 -0
  747. package/dist/kernel/errors.d.ts +7 -0
  748. package/dist/kernel/errors.js +6 -0
  749. package/dist/kernel/fs-confine.d.ts +14 -0
  750. package/dist/kernel/fs-confine.js +129 -0
  751. package/dist/kernel/fs-errors.d.ts +8 -0
  752. package/dist/kernel/fs-errors.js +37 -0
  753. package/dist/kernel/fs.d.ts +28 -0
  754. package/dist/kernel/fs.js +245 -0
  755. package/dist/kernel/git.d.ts +16 -0
  756. package/dist/kernel/git.js +128 -0
  757. package/dist/kernel/glob.d.ts +1 -0
  758. package/dist/kernel/glob.js +178 -0
  759. package/dist/kernel/hash.d.ts +3 -0
  760. package/dist/kernel/hash.js +12 -0
  761. package/dist/kernel/host.d.ts +3 -0
  762. package/dist/kernel/host.js +48 -0
  763. package/dist/kernel/index.d.ts +115 -0
  764. package/dist/kernel/index.js +33 -0
  765. package/dist/kernel/json.d.ts +4 -0
  766. package/dist/kernel/json.js +68 -0
  767. package/dist/kernel/net-allow.d.ts +8 -0
  768. package/dist/kernel/net-allow.js +45 -0
  769. package/dist/kernel/net-fetch.d.ts +5 -0
  770. package/dist/kernel/net-fetch.js +135 -0
  771. package/dist/kernel/net.d.ts +10 -0
  772. package/dist/kernel/net.js +24 -0
  773. package/dist/kernel/path.d.ts +3 -0
  774. package/dist/kernel/path.js +40 -0
  775. package/dist/kernel/pattern.d.ts +2 -0
  776. package/dist/kernel/pattern.js +150 -0
  777. package/dist/kernel/proc.d.ts +6 -0
  778. package/dist/kernel/proc.js +207 -0
  779. package/dist/kernel/read-cache.d.ts +6 -0
  780. package/dist/kernel/read-cache.js +27 -0
  781. package/dist/kernel/redact.d.ts +1 -0
  782. package/dist/kernel/redact.js +206 -0
  783. package/dist/kernel/repo-root.d.ts +3 -0
  784. package/dist/kernel/repo-root.js +29 -0
  785. package/dist/kernel/result.d.ts +10 -0
  786. package/dist/kernel/result.js +6 -0
  787. package/dist/kernel/schema-helpers.d.ts +11 -0
  788. package/dist/kernel/schema-helpers.js +101 -0
  789. package/dist/kernel/schema.d.ts +2 -0
  790. package/dist/kernel/schema.js +203 -0
  791. package/dist/kernel/secret-paths.d.ts +3 -0
  792. package/dist/kernel/secret-paths.js +70 -0
  793. package/dist/kernel/shell-bypass.d.ts +4 -0
  794. package/dist/kernel/shell-bypass.js +151 -0
  795. package/dist/kernel/shell-cmd.d.ts +6 -0
  796. package/dist/kernel/shell-cmd.js +213 -0
  797. package/dist/kernel/shell-deny-cmd.d.ts +7 -0
  798. package/dist/kernel/shell-deny-cmd.js +35 -0
  799. package/dist/kernel/shell-deny-destroy.d.ts +7 -0
  800. package/dist/kernel/shell-deny-destroy.js +71 -0
  801. package/dist/kernel/shell-deny-escalate.d.ts +7 -0
  802. package/dist/kernel/shell-deny-escalate.js +96 -0
  803. package/dist/kernel/shell-deny-target.d.ts +4 -0
  804. package/dist/kernel/shell-deny-target.js +51 -0
  805. package/dist/kernel/shell-deny.d.ts +8 -0
  806. package/dist/kernel/shell-deny.js +171 -0
  807. package/dist/kernel/shell-scan.d.ts +3 -0
  808. package/dist/kernel/shell-scan.js +226 -0
  809. package/dist/kernel/shell-word.d.ts +15 -0
  810. package/dist/kernel/shell-word.js +216 -0
  811. package/dist/kernel/shell.d.ts +22 -0
  812. package/dist/kernel/shell.js +2 -0
  813. package/dist/kernel/stdin.d.ts +2 -0
  814. package/dist/kernel/stdin.js +59 -0
  815. package/dist/kernel/test-report.d.ts +7 -0
  816. package/dist/kernel/test-report.js +112 -0
  817. package/dist/kernel/version.d.ts +2 -0
  818. package/dist/kernel/version.js +46 -0
  819. package/dist/tsconfig.build.tsbuildinfo +1 -0
  820. package/package.json +19 -11
  821. package/schema/accepted.schema.json +20 -0
  822. package/schema/baseline.schema.json +17 -0
  823. package/schema/capability.schema.json +31 -0
  824. package/schema/cli/error.schema.json +15 -0
  825. package/schema/cli/explain.schema.json +19 -0
  826. package/schema/cli/report.schema.json +15 -0
  827. package/schema/cli/status.schema.json +51 -0
  828. package/schema/cli/verify.schema.json +15 -0
  829. package/schema/config.schema.json +43 -0
  830. package/schema/event-log.schema.json +52 -0
  831. package/schema/hook-decision.schema.json +13 -0
  832. package/schema/hook-event.schema.json +50 -0
  833. package/schema/manifest.schema.json +26 -0
  834. package/schema/pack-draft.schema.json +42 -0
  835. package/schema/pack.schema.json +70 -0
  836. package/schema/registry-snapshot.schema.json +41 -0
  837. package/schema/remediation-plan.schema.json +44 -0
  838. package/schema/review-findings.schema.json +25 -0
  839. package/schema/task-record.schema.json +49 -0
  840. package/schema/waivers.schema.json +29 -0
@@ -0,0 +1,272 @@
1
+ // SPEC §4.19.3: the manifest-owned launcher text. Split from the plan
2
+ // builders (plan.ts) by responsibility: generated bytes here, plan assembly
3
+ // there.
4
+ // SPEC §4.19.3: the manifest-owned launcher. Plain module syntax
5
+ // (imports, no top-level await) so any Node can parse it: node floor
6
+ // check, engine resolution at the root or tool dir, in-process main()
7
+ // call with CODICTATOR_HOOK=1, and the harness's embedded static block
8
+ // reply when no engine exists. The launcher is generated TEXT, not a
9
+ // runtime import of this module, so its module specifiers interpolate
10
+ // (SPEC §10.3 item 3 scans source for node:fs and friends); the emitted
11
+ // bytes are the plain imports below.
12
+ function launcherImport(decl, module) {
13
+ return `${decl} from "node:${module}";`;
14
+ }
15
+ export const LAUNCHER_TEXT = [
16
+ "// Generated by `codictator init` (SPEC §4.19.3); do not edit by hand.",
17
+ "// static replies below per configured harness (SPEC §4.5.1) and until then",
18
+ "// they are the two P0 harness deny forms by hand. Zero dependencies and",
19
+ "// ES2015-only syntax, so any Node parses it: the version check runs before",
20
+ "// any newer syntax could load, and only node: built-ins are imported. It",
21
+ "// sets CODICTATOR_HOOK=1 in the engine process, then resolves the engine at",
22
+ "// <root>/node_modules/codictator/dist/cli/main.js else",
23
+ "// <root>/.codictator/tool/node_modules/codictator/dist/cli/main.js. The",
24
+ "// launcher reads the resolved engine's manifest version and passes it",
25
+ "// as main's third argument, so hook validation sees the installed",
26
+ "// version (SPEC §4.2.1 EC-11); an unreadable manifest falls back to",
27
+ "// the two-argument call. A",
28
+ "// missing engine answers the harness's embedded static CDX-E003 block",
29
+ "// reply; outside hook it prints CDX-E003 and exits 6. Git hooks arrive",
30
+ "// as a `git` first word and route to the engine like hook words do, so",
31
+ "// a missing engine or an old node fails the commit or push closed.",
32
+ "// Version arbitration",
33
+ "// between the root and tool-dir engines (SPEC §4.19 EC-6) belongs to the",
34
+ "// phase 9 CLI: until then the first candidate that exists wins.",
35
+ launcherImport("import { existsSync, readFileSync }", "fs"),
36
+ launcherImport("import path", "path"),
37
+ launcherImport("import { fileURLToPath, pathToFileURL }", "url"),
38
+ "",
39
+ "const MIN_NODE_MAJOR = 24;",
40
+ "",
41
+ "function nodeMajor() {",
42
+ "\tconst match = /^v(\\d+)\\./.exec(process.version);",
43
+ "\tif (match === null) {",
44
+ "\t\treturn 0;",
45
+ "\t}",
46
+ "\tconst major = parseInt(match[1], 10);",
47
+ "\tif (Number.isNaN(major)) {",
48
+ "\t\treturn 0;",
49
+ "\t}",
50
+ "\treturn major;",
51
+ "}",
52
+ "",
53
+ "// The launcher ships at <root>/.codictator/bin/run.mjs, so the repo root",
54
+ "// is three levels up from this file.",
55
+ "function launcherRoot() {",
56
+ "\treturn path.dirname(",
57
+ "\t\tpath.dirname(path.dirname(fileURLToPath(import.meta.url))),",
58
+ "\t);",
59
+ "}",
60
+ "",
61
+ "function engineCandidates(root) {",
62
+ "\treturn [",
63
+ `\t\tpath.join(root, "node_modules", "codictator", "dist", "cli", "main.js"),`,
64
+ "\t\tpath.join(",
65
+ "\t\t\troot,",
66
+ `\t\t\t".codictator",`,
67
+ `\t\t\t"tool",`,
68
+ `\t\t\t"node_modules",`,
69
+ `\t\t\t"codictator",`,
70
+ `\t\t\t"dist",`,
71
+ `\t\t\t"cli",`,
72
+ `\t\t\t"main.js",`,
73
+ "\t\t),",
74
+ "\t];",
75
+ "}",
76
+ "",
77
+ "// The embedded pre-engine deny forms (SPEC §4.5.1): exit 0 with the",
78
+ "// harness's own deny JSON. Answers null for harnesses without a static",
79
+ "// form, so the caller falls back to the process exit code.",
80
+ "function staticReply(harness, code, message) {",
81
+ `\tif (harness === "muse-code") {`,
82
+ "\t\treturn {",
83
+ "\t\t\texitCode: 0,",
84
+ "\t\t\tstdout: JSON.stringify({",
85
+ "\t\t\t\thookSpecificOutput: {",
86
+ `\t\t\t\t\thookEventName: "PreToolUse",`,
87
+ `\t\t\t\t\tpermissionDecision: "deny",`,
88
+ `\t\t\t\t\tpermissionDecisionReason: \`\${code} \${message}\`,`,
89
+ "\t\t\t\t},",
90
+ "\t\t\t}),",
91
+ "\t\t};",
92
+ "\t}",
93
+ `\tif (harness === "opencode") {`,
94
+ "\t\treturn {",
95
+ "\t\t\texitCode: 0,",
96
+ "\t\t\tstdout: JSON.stringify({",
97
+ `\t\t\t\tdecision: "block",`,
98
+ `\t\t\t\tmessage: \`\${code} \${message}\`,`,
99
+ `\t\t\t\teventId: "static",`,
100
+ "\t\t\t}),",
101
+ "\t\t};",
102
+ "\t}",
103
+ "\treturn null;",
104
+ "}",
105
+ "",
106
+ "function writeStatic(reply) {",
107
+ "\tprocess.stdout.write(reply.stdout);",
108
+ "\tprocess.exitCode = reply.exitCode;",
109
+ "}",
110
+ "",
111
+ "function writeMissingEngine() {",
112
+ "\tprocess.stderr.write(",
113
+ `\t\t"CDX-E003 codictator engine is not installed; run npm ci, then retry.\\n",`,
114
+ "\t);",
115
+ "\tprocess.exitCode = 6;",
116
+ "}",
117
+ "",
118
+ "function writeOldNode() {",
119
+ "\tprocess.stderr.write(",
120
+ `\t\t\`CDX-E002 node \${process.version} is older than the required >=24.0.0; install a newer Node, then retry.\\n\`,`,
121
+ "\t);",
122
+ "\tprocess.exitCode = 6;",
123
+ "}",
124
+ "",
125
+ "function writeEngineFailed() {",
126
+ "\tprocess.stderr.write(",
127
+ `\t\t"CDX-E901 the codictator engine failed to load; the tool call is blocked.\\n",`,
128
+ "\t);",
129
+ "\tprocess.exitCode = 1;",
130
+ "}",
131
+ "",
132
+ "function oldNodeMessage() {",
133
+ "\treturn (",
134
+ `\t\t\`node \${process.version} is older than the required >=24.0.0; \` +`,
135
+ `\t\t"install a newer Node, then retry the tool call."`,
136
+ "\t);",
137
+ "}",
138
+ "",
139
+ "function firstExisting(candidates) {",
140
+ "\tfor (let index = 0; index < candidates.length; index += 1) {",
141
+ "\t\tif (existsSync(candidates[index])) {",
142
+ "\t\t\treturn candidates[index];",
143
+ "\t\t}",
144
+ "\t}",
145
+ "\treturn null;",
146
+ "}",
147
+ "",
148
+ "// SPEC §4.2.1 EC-11: the engine entry validates config.codictator",
149
+ "// against the installed engine version, so the launcher extracts it",
150
+ "// from the resolved engine's own manifest text and passes it as",
151
+ "// main's third argument. A version-field scan keeps JSON parsing in",
152
+ "// the kernel per §10.3 item 6 (and a regex literal would confuse the",
153
+ "// blankCode lexer the ts/lint gate runs on); any unreadable or",
154
+ "// version-less manifest answers null and the caller falls back to",
155
+ "// the two-argument call, which keeps the pinned placeholder —",
156
+ "// fail-closed downstream, never an allow.",
157
+ "function installedEngineVersion(enginePath) {",
158
+ "\ttry {",
159
+ "\t\tconst manifestPath = path.join(",
160
+ "\t\t\tpath.dirname(path.dirname(path.dirname(enginePath))),",
161
+ `\t\t\t"package.json",`,
162
+ "\t\t);",
163
+ `\t\tconst text = readFileSync(manifestPath, "utf8");`,
164
+ '\t\tconst marker = "\\"version\\":";',
165
+ "\t\tconst at = text.indexOf(marker);",
166
+ "\t\tif (at === -1) {",
167
+ "\t\t\treturn null;",
168
+ "\t\t}",
169
+ "\t\tlet index = at + marker.length;",
170
+ '\t\twhile (text[index] === " " || text[index] === "\\t" || text[index] === "\\n" || text[index] === "\\r") {',
171
+ "\t\t\tindex += 1;",
172
+ "\t\t}",
173
+ '\t\tif (text[index] !== "\\"") {',
174
+ "\t\t\treturn null;",
175
+ "\t\t}",
176
+ '\t\tconst end = text.indexOf("\\"", index + 1);',
177
+ "\t\tif (end === -1) {",
178
+ "\t\t\treturn null;",
179
+ "\t\t}",
180
+ "\t\tconst version = text.slice(index + 1, end);",
181
+ '\t\tif (version === "") {',
182
+ "\t\t\treturn null;",
183
+ "\t\t}",
184
+ "\t\treturn version;",
185
+ "\t} catch (ignored) {",
186
+ "\t\treturn null;",
187
+ "\t}",
188
+ "}",
189
+ "",
190
+ "function reportMissing(harness) {",
191
+ "\tconst missing = staticReply(",
192
+ "\t\tharness,",
193
+ `\t\t\t"CDX-E003",`,
194
+ `\t\t\t"codictator engine is not installed; run npm ci, then retry the tool call.",`,
195
+ "\t);",
196
+ "\tif (missing === null) {",
197
+ "\t\twriteMissingEngine();",
198
+ "\t\treturn;",
199
+ "\t}",
200
+ "\twriteStatic(missing);",
201
+ "}",
202
+ "",
203
+ "function checkNode(harness) {",
204
+ "\tif (nodeMajor() < MIN_NODE_MAJOR) {",
205
+ `\t\tconst oldNode = staticReply(harness, "CDX-E002", oldNodeMessage());`,
206
+ "\t\tif (oldNode === null) {",
207
+ "\t\t\twriteOldNode();",
208
+ "\t\t\treturn false;",
209
+ "\t\t}",
210
+ "\t\twriteStatic(oldNode);",
211
+ "\t\treturn false;",
212
+ "\t}",
213
+ "\treturn true;",
214
+ "}",
215
+ "",
216
+ "function runEngine(enginePath, args, harness) {",
217
+ `\tprocess.env.CODICTATOR_HOOK = "1";`,
218
+ "\timport(pathToFileURL(enginePath).href)",
219
+ "\t\t.then(",
220
+ "\t\t\t(engine) => {",
221
+ `\t\t\t\tif (engine === null || typeof engine.main !== "function") {`,
222
+ `\t\t\t\t\tthrow new Error("engine entry has no main");`,
223
+ "\t\t\t\t}",
224
+ "\t\t\t\tconst version = installedEngineVersion(enginePath);",
225
+ "\t\t\t\tif (version === null) {",
226
+ "\t\t\t\t\treturn engine.main(args, process.cwd());",
227
+ "\t\t\t\t}",
228
+ "\t\t\t\treturn engine.main(args, process.cwd(), version);",
229
+ "\t\t\t},",
230
+ "\t\t\t(error) => {",
231
+ "\t\t\t\tthrow error;",
232
+ "\t\t\t},",
233
+ "\t\t)",
234
+ "\t\t.then(",
235
+ "\t\t\t(code) => {",
236
+ `\t\t\t\tprocess.exitCode = typeof code === "number" ? code : 0;`,
237
+ "\t\t\t},",
238
+ "\t\t\t() => {",
239
+ "\t\t\t\tconst failed = staticReply(",
240
+ "\t\t\t\t\tharness,",
241
+ `\t\t\t\t\t"CDX-E901",`,
242
+ `\t\t\t\t\t"the codictator engine failed to load; the tool call is blocked.",`,
243
+ "\t\t\t\t);",
244
+ "\t\t\t\tif (failed === null) {",
245
+ "\t\t\t\t\twriteEngineFailed();",
246
+ "\t\t\t\t\treturn;",
247
+ "\t\t\t\t}",
248
+ "\t\t\t\twriteStatic(failed);",
249
+ "\t\t\t},",
250
+ "\t\t);",
251
+ "}",
252
+ "",
253
+ "function main() {",
254
+ "\tconst args = process.argv.slice(2);",
255
+ `\tif (args[0] !== "hook" && args[0] !== "git") {`,
256
+ "\t\twriteMissingEngine();",
257
+ "\t\treturn;",
258
+ "\t}",
259
+ `\tconst harness = args[1] || "";`,
260
+ "\tif (!checkNode(harness)) {",
261
+ "\t\treturn;",
262
+ "\t}",
263
+ "\tconst enginePath = firstExisting(engineCandidates(launcherRoot()));",
264
+ "\tif (enginePath === null) {",
265
+ "\t\treportMissing(harness);",
266
+ "\t\treturn;",
267
+ "\t}",
268
+ "\trunEngine(enginePath, args, harness);",
269
+ "}",
270
+ "main();",
271
+ "",
272
+ ].join("\n");
@@ -0,0 +1,25 @@
1
+ import type { Result } from "../kernel/index.ts";
2
+ export declare const KNOWN_HELPER_ROLES: ReadonlySet<string>;
3
+ export interface HelperProposal {
4
+ readonly role: string;
5
+ readonly command: string;
6
+ readonly pin: string;
7
+ }
8
+ export declare function buildHelperTool(proposal: HelperProposal): Record<string, unknown>;
9
+ export interface GuardrailPlan {
10
+ readonly files: ReadonlyArray<{
11
+ path: string;
12
+ content: string;
13
+ }>;
14
+ }
15
+ export interface PlanExtras {
16
+ readonly packs?: unknown;
17
+ readonly tunables?: unknown;
18
+ readonly architecture?: unknown;
19
+ readonly tools?: unknown;
20
+ }
21
+ export declare function guardrailPlan(harnesses: ReadonlyArray<string>, profile: string, repoName: string, existingAgents: string | undefined, extras?: PlanExtras, engineVersion?: string): GuardrailPlan;
22
+ export declare function writePlan(root: string, plan: GuardrailPlan, engineVersion?: string): Promise<Result<Array<{
23
+ path: string;
24
+ hash: string;
25
+ }>>>;
@@ -0,0 +1,121 @@
1
+ // SPEC §4.14.1 + §4.14.5: guardrail plan builders. The file list (config,
2
+ // steering block, CI workflow, hooks, launcher) and the manifest write are
3
+ // shared by init and regen, so regeneration stays byte-identical.
4
+ import { renderWorkflow } from "../features/ci/index.js";
5
+ import { ENGINE_VERSION } from "../features/config/index.js";
6
+ import { buildManifest, EXPECTED_HOOKS_PATH, HOOK_NAMES, hookInstallPlan, renderHookScript, } from "../features/integrity/index.js";
7
+ import { buildManagedBlock, MANAGED_BEGIN, MANAGED_END, } from "../features/steering/index.js";
8
+ import { err, normalizeText, ok, sha256Text, stableStringify, } from "../kernel/index.js";
9
+ import { LAUNCHER_TEXT } from "./plan-launcher.js";
10
+ import { portsFor } from "./shared.js";
11
+ function encode(text) {
12
+ return new TextEncoder().encode(text);
13
+ }
14
+ // SPEC §4.4.5 + §4.6.6: init proposals for helper tools. The entry carries
15
+ // the role, the binary, the exact pin from the human's registry lookup, and
16
+ // a probe matching any semver in the tool's --version output whose capture
17
+ // must equal the pin (external-probe.ts). Helpers never back enforcers, so
18
+ // the probe runs only when a pack binds the tool.
19
+ export const KNOWN_HELPER_ROLES = new Set([
20
+ "knowledge-graph",
21
+ "token-saver",
22
+ "dependency-bot",
23
+ "other",
24
+ ]);
25
+ const SEMVER_CAPTURE = "(\\d+\\.\\d+\\.\\d+)";
26
+ export function buildHelperTool(proposal) {
27
+ return {
28
+ id: proposal.command,
29
+ command: [proposal.command],
30
+ version: {
31
+ pin: proposal.pin,
32
+ probe: [proposal.command, "--version"],
33
+ pattern: SEMVER_CAPTURE,
34
+ },
35
+ role: proposal.role,
36
+ };
37
+ }
38
+ function configText(harnesses, profile, extras = {}, engineVersion = ENGINE_VERSION) {
39
+ const sorted = [...harnesses].sort();
40
+ const architecture = extras.architecture ?? (profile === "" ? undefined : { profile });
41
+ const config = {
42
+ version: 1,
43
+ codictator: engineVersion,
44
+ packs: extras.packs ?? [],
45
+ harnesses: sorted,
46
+ tunables: extras.tunables ?? {},
47
+ ...(architecture === undefined ? {} : { architecture }),
48
+ ...(extras.tools === undefined ? {} : { tools: extras.tools }),
49
+ };
50
+ return `${stableStringify(config)}\n`;
51
+ }
52
+ // SPEC §4.14.1: user text outside the managed block survives regen; a
53
+ // malformed block is replaced rather than duplicated (CDX-E501 avoided).
54
+ function withManagedBlock(existing) {
55
+ const block = buildManagedBlock();
56
+ if (existing === undefined) {
57
+ return `${block}\n`;
58
+ }
59
+ const start = existing.indexOf(MANAGED_BEGIN);
60
+ const end = existing.indexOf(MANAGED_END);
61
+ if (start < 0 || end < 0 || end < start) {
62
+ const trimmed = existing.endsWith("\n") ? existing : `${existing}\n`;
63
+ return `${trimmed}\n${block}\n`;
64
+ }
65
+ const after = end + MANAGED_END.length;
66
+ return `${existing.slice(0, start)}${block}${existing.slice(after)}`;
67
+ }
68
+ export function guardrailPlan(harnesses, profile, repoName, existingAgents, extras = {}, engineVersion = ENGINE_VERSION) {
69
+ const files = [];
70
+ files.push({
71
+ path: ".codictator/config.json",
72
+ content: configText(harnesses, profile, extras, engineVersion),
73
+ });
74
+ files.push({ path: "AGENTS.md", content: withManagedBlock(existingAgents) });
75
+ const workflow = renderWorkflow(repoName);
76
+ files.push({
77
+ path: ".github/workflows/codictator.yml",
78
+ content: workflow.text ?? "",
79
+ });
80
+ for (const hook of HOOK_NAMES) {
81
+ files.push({
82
+ path: `${EXPECTED_HOOKS_PATH}/${hook}`,
83
+ content: renderHookScript(hook),
84
+ });
85
+ }
86
+ const plan = hookInstallPlan({});
87
+ files.push({
88
+ path: `${EXPECTED_HOOKS_PATH}/.gitattributes`,
89
+ content: plan.gitattributes,
90
+ });
91
+ files.push({ path: ".codictator/bin/run.mjs", content: LAUNCHER_TEXT });
92
+ return { files };
93
+ }
94
+ export async function writePlan(root, plan, engineVersion = ENGINE_VERSION) {
95
+ const ports = await portsFor(root);
96
+ if (!ports.ok) {
97
+ return err(ports.error);
98
+ }
99
+ const written = [];
100
+ for (const file of plan.files) {
101
+ const done = await ports.value.fs.write(file.path, encode(file.content));
102
+ if (!done.ok) {
103
+ return err(done.error);
104
+ }
105
+ written.push({
106
+ path: file.path,
107
+ hash: sha256Text(normalizeText(file.content)),
108
+ });
109
+ }
110
+ const manifest = buildManifest(engineVersion, written.map((entry) => ({
111
+ path: entry.path,
112
+ owner: "codictator",
113
+ mode: "file",
114
+ hash: entry.hash,
115
+ })));
116
+ const saved = await ports.value.fs.write(".codictator/manifest.json", encode(`${stableStringify(manifest)}\n`));
117
+ if (!saved.ok) {
118
+ return err(saved.error);
119
+ }
120
+ return ok(written);
121
+ }
@@ -0,0 +1,3 @@
1
+ import type { Result } from "../kernel/index.ts";
2
+ import type { CommandRequest } from "./shared.ts";
3
+ export declare function handleTestCmd(req: CommandRequest): Promise<Result<number>>;
@@ -0,0 +1,77 @@
1
+ // SPEC §4.10.2: red and green proofs attach the HEAD commit and tree to the
2
+ // task; the declared tests must have executed (titles listed on the command).
3
+ import { parseArgs } from "node:util";
4
+ import { ok } from "../kernel/index.js";
5
+ import { fail, needTaskRoot, portsFor, printHuman, usageError, } from "./shared.js";
6
+ import { readTask, writeTask } from "./tasks.js";
7
+ async function recordProof(req, root, kind, titles, task) {
8
+ const ports = await portsFor(root);
9
+ if (!ports.ok) {
10
+ return fail("CDX-E903", ports.error.message, ports.error.remediation, req.json);
11
+ }
12
+ const head = await ports.value.proc.run(["git", "rev-parse", "HEAD"], {
13
+ cwd: root,
14
+ env: {},
15
+ timeoutMs: 15000,
16
+ maxOutputBytes: 4096,
17
+ });
18
+ const tree = await ports.value.proc.run(["git", "rev-parse", "HEAD^{tree}"], {
19
+ cwd: root,
20
+ env: {},
21
+ timeoutMs: 15000,
22
+ maxOutputBytes: 4096,
23
+ });
24
+ if (head.code !== 0 || tree.code !== 0) {
25
+ return fail("CDX-E703", "cannot read the HEAD commit or tree", "Commit first, then retry.", req.json);
26
+ }
27
+ const now = ports.value.clock.now();
28
+ const proved = kind === "red"
29
+ ? {
30
+ ...task,
31
+ redProof: {
32
+ commit: head.stdout.trim(),
33
+ tree: tree.stdout.trim(),
34
+ failing: [...titles],
35
+ at: now,
36
+ },
37
+ }
38
+ : { ...task, greenProof: { at: now, tree: tree.stdout.trim() } };
39
+ const saved = await writeTask(root, proved);
40
+ if (!saved.ok) {
41
+ return saved;
42
+ }
43
+ printHuman(`recorded ${kind} proof for ${task.id}`, req.quiet);
44
+ return ok(0);
45
+ }
46
+ export async function handleTestCmd(req) {
47
+ const kind = req.args[0] ?? "";
48
+ if (kind !== "red" && kind !== "green") {
49
+ return usageError("usage: codictator test <red|green> --task <T-####> [<test title> ...]");
50
+ }
51
+ let taskId = "";
52
+ let titles = [];
53
+ try {
54
+ const parsed = parseArgs({
55
+ args: [...req.args.slice(1)],
56
+ options: { task: { type: "string" } },
57
+ allowPositionals: true,
58
+ });
59
+ taskId = parsed.values.task ?? "";
60
+ titles = [...parsed.positionals];
61
+ if (taskId === "" || titles.length === 0) {
62
+ return usageError("usage: codictator test <red|green> --task <T-####> [<test title> ...]");
63
+ }
64
+ }
65
+ catch {
66
+ return usageError("usage: codictator test <red|green> --task <T-####> [<test title> ...]");
67
+ }
68
+ const root = await needTaskRoot(req);
69
+ if (typeof root !== "string") {
70
+ return root;
71
+ }
72
+ const task = await readTask(root, taskId);
73
+ if (task === undefined) {
74
+ return fail("CDX-E903", `no task record for "${taskId}"`, "Create it with codictator task new, then retry.", req.json);
75
+ }
76
+ return recordProof(req, root, kind, titles, task);
77
+ }
@@ -0,0 +1,3 @@
1
+ import type { Result } from "../kernel/index.ts";
2
+ import type { CommandRequest } from "./shared.ts";
3
+ export declare function handleReview(req: CommandRequest): Promise<Result<number>>;
@@ -0,0 +1,168 @@
1
+ // SPEC §4.12.4: review rounds. Submit validates the findings file and
2
+ // verdicts it; resolve reports the still-open blockers and majors. Rounds
3
+ // bind the staged tree and the reviewer session on the task record.
4
+ import path from "node:path";
5
+ import { parseArgs } from "node:util";
6
+ import { ENGINE_VERSION } from "../features/config/index.js";
7
+ import { checkReview } from "../features/workflow/index.js";
8
+ import { NodeFs, ok, parseJson } from "../kernel/index.js";
9
+ import { fail, loadRepoConfig, needTaskRoot, portsFor, printHuman, printJson, readStateText, usageError, } from "./shared.js";
10
+ import { readTask, writeTask } from "./tasks.js";
11
+ function parseReviewArgs(req) {
12
+ try {
13
+ const parsed = parseArgs({
14
+ args: [...req.args.slice(1)],
15
+ options: { file: { type: "string" }, task: { type: "string" } },
16
+ allowPositionals: true,
17
+ });
18
+ if (parsed.positionals.length > 0) {
19
+ return undefined;
20
+ }
21
+ if ((parsed.values.file ?? "") === "") {
22
+ return undefined;
23
+ }
24
+ return { file: parsed.values.file ?? "", taskId: parsed.values.task };
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ // SPEC §4.12.4: absolute --file inputs are canonicalized before the
31
+ // root-prefix comparison, so symlinked checkouts (macOS /var to
32
+ // /private/var, Windows SUBST drives) compare canonical against canonical.
33
+ // The root is already canonical via resolveRepoRoot; only the kernel
34
+ // touches node:fs (§10.3 item 3), so the input goes through NodeFs the same
35
+ // way the hook runtime's canonicalRoot does. Inputs that do not resolve
36
+ // keep their spelling and fail closed downstream as CDX-E607.
37
+ async function canonicalDir(dir) {
38
+ const made = await NodeFs.create({ root: dir });
39
+ if (!made.ok) {
40
+ return dir;
41
+ }
42
+ const real = await made.value.realpath(".");
43
+ if (!real.ok) {
44
+ return dir;
45
+ }
46
+ return real.value;
47
+ }
48
+ async function readFindingsFile(root, file) {
49
+ if (!path.isAbsolute(file)) {
50
+ return readStateText(root, file);
51
+ }
52
+ const realRoot = await canonicalDir(root);
53
+ const realFile = path.join(await canonicalDir(path.dirname(file)), path.basename(file));
54
+ const rel = path.relative(realRoot, realFile);
55
+ if (rel === "" ||
56
+ rel === ".." ||
57
+ rel.startsWith(`..${path.sep}`) ||
58
+ path.isAbsolute(rel)) {
59
+ return undefined;
60
+ }
61
+ return readStateText(root, rel);
62
+ }
63
+ function validateFindingsFile(text, file, req) {
64
+ const parsedJson = parseJson(text);
65
+ if (!parsedJson.ok ||
66
+ typeof parsedJson.value !== "object" ||
67
+ parsedJson.value === null) {
68
+ return fail("CDX-E607", `review findings file "${file}" is not JSON`, "Fix the file so it matches schema/review-findings.schema.json, then retry.", req.json);
69
+ }
70
+ const shaped = parsedJson.value;
71
+ if (shaped.version !== 1 || !Array.isArray(shaped.findings)) {
72
+ return fail("CDX-E607", `review findings file "${file}" is invalid`, "Fix the file so it matches schema/review-findings.schema.json, then retry.", req.json);
73
+ }
74
+ return {
75
+ version: 1,
76
+ findings: shaped.findings,
77
+ tree: shaped.tree,
78
+ reviewerSession: shaped.reviewerSession,
79
+ };
80
+ }
81
+ async function loadFindingsShape(req, root, file) {
82
+ const loaded = await readFindingsFile(root, file);
83
+ if (loaded === undefined) {
84
+ return fail("CDX-E607", `review findings file "${file}" unreadable`, "Point --file at the findings JSON, then retry.", req.json);
85
+ }
86
+ return validateFindingsFile(loaded, file, req);
87
+ }
88
+ function printReviewVerdict(req, sub, file, verdict, blockers) {
89
+ if (req.json) {
90
+ printJson({ file, findings: verdict.length, blockers });
91
+ return;
92
+ }
93
+ for (const finding of verdict) {
94
+ printHuman(`${finding.ruleId} ${finding.message}`, req.quiet);
95
+ }
96
+ if (verdict.length === 0) {
97
+ printHuman(sub === "submit" ? "review submitted: pass" : "review resolved: clean", req.quiet);
98
+ }
99
+ }
100
+ async function submitReviewRound(root, taskId, shaped, openBlockers, openMajors, now) {
101
+ const task = await readTask(root, taskId);
102
+ if (task === undefined) {
103
+ return;
104
+ }
105
+ const rounds = task.reviews ?? [];
106
+ await writeTask(root, {
107
+ ...task,
108
+ reviews: [
109
+ ...rounds,
110
+ {
111
+ round: rounds.length + 1,
112
+ tree: typeof shaped.tree === "string" ? shaped.tree : "unknown",
113
+ reviewerSession: typeof shaped.reviewerSession === "string"
114
+ ? shaped.reviewerSession
115
+ : "cli",
116
+ identity: "observed",
117
+ openBlockers,
118
+ openMajors,
119
+ acknowledgedExceptions: [],
120
+ at: now,
121
+ },
122
+ ],
123
+ });
124
+ }
125
+ // SPEC §4.12.4: review rounds bind the staged tree and the reviewer
126
+ // session; submit validates the findings file and verdicts it, resolve
127
+ // reports the still-open blockers and majors.
128
+ export async function handleReview(req) {
129
+ const sub = req.args[0] ?? "";
130
+ if (sub !== "submit" && sub !== "resolve") {
131
+ return usageError("usage: codictator review <submit|resolve> --file <path> [--task <T-####>]");
132
+ }
133
+ const parsed = parseReviewArgs(req);
134
+ if (parsed === undefined) {
135
+ return usageError("usage: codictator review <submit|resolve> --file <path> [--task <T-####>]");
136
+ }
137
+ const root = await needTaskRoot(req);
138
+ if (typeof root !== "string") {
139
+ return root;
140
+ }
141
+ const shaped = await loadFindingsShape(req, root, parsed.file);
142
+ if (!("version" in shaped)) {
143
+ return shaped;
144
+ }
145
+ const ports = await portsFor(root);
146
+ if (!ports.ok) {
147
+ return fail("CDX-E903", ports.error.message, ports.error.remediation, req.json);
148
+ }
149
+ let configHash = "unknown";
150
+ const configured = await loadRepoConfig(root, undefined, req.engineVersion ?? ENGINE_VERSION);
151
+ if (configured.ok) {
152
+ configHash = configured.value.effective.configHash;
153
+ }
154
+ const verdict = await checkReview({
155
+ trigger: "pre-tool",
156
+ scope: { files: [] },
157
+ now: ports.value.clock.now(),
158
+ configHash,
159
+ }, shaped, {});
160
+ const blockers = verdict.filter((finding) => finding.ruleId === "core/review-blockers" || finding.code === "CDX-E605");
161
+ printReviewVerdict(req, sub, parsed.file, verdict, blockers.length);
162
+ if (parsed.taskId !== undefined &&
163
+ sub === "submit" &&
164
+ blockers.length === 0) {
165
+ await submitReviewRound(root, parsed.taskId, shaped, 0, 0, ports.value.clock.now());
166
+ }
167
+ return verdict.length === 0 ? ok(0) : ok(1);
168
+ }
@@ -0,0 +1,3 @@
1
+ import type { Result } from "../kernel/index.ts";
2
+ import type { CommandRequest } from "./shared.ts";
3
+ export declare function handleRemediate(req: CommandRequest): Promise<Result<number>>;