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.
- package/LICENSE +9 -0
- package/README.md +5 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/index.ts +8 -0
- package/dist/builtin-packs/core/pack.json +2057 -0
- package/dist/builtin-packs/dotnet/index.ts +47 -0
- package/dist/builtin-packs/python/extract.ts +245 -0
- package/dist/builtin-packs/python/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/passing/basic/case.json +12 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/violating/basic/case.json +11 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/index.ts +57 -0
- package/dist/builtin-packs/python/pack.json +116 -0
- package/dist/builtin-packs/typescript/extract-clauses.ts +153 -0
- package/dist/builtin-packs/typescript/extract-literals.ts +111 -0
- package/dist/builtin-packs/typescript/extract-words.ts +79 -0
- package/dist/builtin-packs/typescript/extract.ts +77 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/exported/case.json +8 -0
- package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/index.ts +85 -0
- package/dist/builtin-packs/typescript/lex.ts +199 -0
- package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
- package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
- package/dist/builtin-packs/typescript/measures.ts +10 -0
- package/dist/builtin-packs/typescript/naming.ts +47 -0
- package/dist/builtin-packs/typescript/pack.json +169 -0
- package/dist/builtin-packs/typescript/patterns.ts +93 -0
- package/dist/builtin-packs/typescript/resolve.ts +224 -0
- package/dist/builtin-packs/typescript/strict.ts +177 -0
- package/dist/builtin-packs/typescript/titles.ts +184 -0
- package/dist/cli/baseline.d.ts +3 -0
- package/dist/cli/baseline.js +67 -0
- package/dist/cli/ci-bot-change.d.ts +3 -0
- package/dist/cli/ci-bot-change.js +54 -0
- package/dist/cli/ci-range.d.ts +18 -0
- package/dist/cli/ci-range.js +228 -0
- package/dist/cli/ci-summary.d.ts +3 -0
- package/dist/cli/ci-summary.js +45 -0
- package/dist/cli/ci.d.ts +4 -0
- package/dist/cli/ci.js +195 -0
- package/dist/cli/commands.d.ts +5 -0
- package/dist/cli/commands.js +39 -0
- package/dist/cli/deps.d.ts +3 -0
- package/dist/cli/deps.js +115 -0
- package/dist/cli/drift.d.ts +11 -0
- package/dist/cli/drift.js +91 -0
- package/dist/cli/evaluate.d.ts +20 -0
- package/dist/cli/evaluate.js +213 -0
- package/dist/cli/gate-scope.d.ts +11 -0
- package/dist/cli/gate-scope.js +93 -0
- package/dist/cli/git-hook.d.ts +3 -0
- package/dist/cli/git-hook.js +184 -0
- package/dist/cli/guardrail.d.ts +5 -0
- package/dist/cli/guardrail.js +190 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.js +198 -0
- package/dist/cli/init-plan.d.ts +23 -0
- package/dist/cli/init-plan.js +135 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.js +122 -0
- package/dist/cli/inspect-status.d.ts +8 -0
- package/dist/cli/inspect-status.js +164 -0
- package/dist/cli/inspect.d.ts +5 -0
- package/dist/cli/inspect.js +98 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +60 -0
- package/dist/cli/pack-adapters.d.ts +3 -0
- package/dist/cli/pack-adapters.js +81 -0
- package/dist/cli/packs.d.ts +6 -0
- package/dist/cli/packs.js +131 -0
- package/dist/cli/plan-launcher.d.ts +2 -0
- package/dist/cli/plan-launcher.js +272 -0
- package/dist/cli/plan.d.ts +25 -0
- package/dist/cli/plan.js +121 -0
- package/dist/cli/proofs-test.d.ts +3 -0
- package/dist/cli/proofs-test.js +77 -0
- package/dist/cli/proofs.d.ts +3 -0
- package/dist/cli/proofs.js +168 -0
- package/dist/cli/remediation.d.ts +3 -0
- package/dist/cli/remediation.js +107 -0
- package/dist/cli/report.d.ts +4 -0
- package/dist/cli/report.js +93 -0
- package/dist/cli/serve-eval.d.ts +2 -0
- package/dist/cli/serve-eval.js +165 -0
- package/dist/cli/serve-log.d.ts +2 -0
- package/dist/cli/serve-log.js +150 -0
- package/dist/cli/serve-methods.d.ts +2 -0
- package/dist/cli/serve-methods.js +181 -0
- package/dist/cli/serve-protocol.d.ts +35 -0
- package/dist/cli/serve-protocol.js +97 -0
- package/dist/cli/serve-run.d.ts +9 -0
- package/dist/cli/serve-run.js +135 -0
- package/dist/cli/serve-server.d.ts +5 -0
- package/dist/cli/serve-server.js +120 -0
- package/dist/cli/serve-shared.d.ts +34 -0
- package/dist/cli/serve-shared.js +20 -0
- package/dist/cli/serve-status.d.ts +2 -0
- package/dist/cli/serve-status.js +130 -0
- package/dist/cli/serve-transport.d.ts +2 -0
- package/dist/cli/serve-transport.js +114 -0
- package/dist/cli/shared.d.ts +35 -0
- package/dist/cli/shared.js +181 -0
- package/dist/cli/task-advance.d.ts +3 -0
- package/dist/cli/task-advance.js +144 -0
- package/dist/cli/task-phases.d.ts +3 -0
- package/dist/cli/task-phases.js +77 -0
- package/dist/cli/tasks.d.ts +12 -0
- package/dist/cli/tasks.js +176 -0
- package/dist/cli/transparency.d.ts +4 -0
- package/dist/cli/transparency.js +197 -0
- package/dist/cli/waivers.d.ts +3 -0
- package/dist/cli/waivers.js +195 -0
- package/dist/features/adapters/claude-code.d.ts +8 -0
- package/dist/features/adapters/claude-code.js +198 -0
- package/dist/features/adapters/claude-shaped.d.ts +4 -0
- package/dist/features/adapters/claude-shaped.js +174 -0
- package/dist/features/adapters/codex-cli.d.ts +8 -0
- package/dist/features/adapters/codex-cli.js +180 -0
- package/dist/features/adapters/contract.d.ts +104 -0
- package/dist/features/adapters/contract.js +17 -0
- package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
- package/dist/features/adapters/copilot-capabilities.js +46 -0
- package/dist/features/adapters/copilot.d.ts +8 -0
- package/dist/features/adapters/copilot.js +200 -0
- package/dist/features/adapters/cursor.d.ts +8 -0
- package/dist/features/adapters/cursor.js +245 -0
- package/dist/features/adapters/custom-event.d.ts +3 -0
- package/dist/features/adapters/custom-event.js +180 -0
- package/dist/features/adapters/custom-load.d.ts +3 -0
- package/dist/features/adapters/custom-load.js +185 -0
- package/dist/features/adapters/custom-shape.d.ts +21 -0
- package/dist/features/adapters/custom-shape.js +87 -0
- package/dist/features/adapters/custom.d.ts +9 -0
- package/dist/features/adapters/custom.js +130 -0
- package/dist/features/adapters/effective-cache.d.ts +5 -0
- package/dist/features/adapters/effective-cache.js +45 -0
- package/dist/features/adapters/gemini-cli.d.ts +6 -0
- package/dist/features/adapters/gemini-cli.js +160 -0
- package/dist/features/adapters/gemini-tables.d.ts +7 -0
- package/dist/features/adapters/gemini-tables.js +104 -0
- package/dist/features/adapters/hook-dispatch.d.ts +7 -0
- package/dist/features/adapters/hook-dispatch.js +97 -0
- package/dist/features/adapters/hook-injection.d.ts +12 -0
- package/dist/features/adapters/hook-injection.js +75 -0
- package/dist/features/adapters/hook-load.d.ts +15 -0
- package/dist/features/adapters/hook-load.js +152 -0
- package/dist/features/adapters/hook-scope.d.ts +3 -0
- package/dist/features/adapters/hook-scope.js +54 -0
- package/dist/features/adapters/index.d.ts +22 -0
- package/dist/features/adapters/index.js +86 -0
- package/dist/features/adapters/muse-code.d.ts +8 -0
- package/dist/features/adapters/muse-code.js +223 -0
- package/dist/features/adapters/opencode-bridge.d.ts +1 -0
- package/dist/features/adapters/opencode-bridge.js +230 -0
- package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
- package/dist/features/adapters/opencode-capabilities.js +47 -0
- package/dist/features/adapters/opencode-parse.d.ts +3 -0
- package/dist/features/adapters/opencode-parse.js +137 -0
- package/dist/features/adapters/opencode-tables.d.ts +5 -0
- package/dist/features/adapters/opencode-tables.js +63 -0
- package/dist/features/adapters/opencode.d.ts +10 -0
- package/dist/features/adapters/opencode.js +97 -0
- package/dist/features/adapters/runtime.d.ts +25 -0
- package/dist/features/adapters/runtime.js +148 -0
- package/dist/features/adapters/universal.d.ts +7 -0
- package/dist/features/adapters/universal.js +89 -0
- package/dist/features/arch/arch-profiles.d.ts +3 -0
- package/dist/features/arch/arch-profiles.js +5 -0
- package/dist/features/arch/checks.d.ts +25 -0
- package/dist/features/arch/checks.js +173 -0
- package/dist/features/arch/codictator-modules.d.ts +4 -0
- package/dist/features/arch/codictator-modules.js +180 -0
- package/dist/features/arch/cycle-walk.d.ts +1 -0
- package/dist/features/arch/cycle-walk.js +36 -0
- package/dist/features/arch/edge-checks.d.ts +13 -0
- package/dist/features/arch/edge-checks.js +186 -0
- package/dist/features/arch/graph.d.ts +32 -0
- package/dist/features/arch/graph.js +202 -0
- package/dist/features/arch/index.d.ts +29 -0
- package/dist/features/arch/index.js +16 -0
- package/dist/features/arch/layer-rules.d.ts +3 -0
- package/dist/features/arch/layer-rules.js +38 -0
- package/dist/features/arch/module-map-validation.d.ts +3 -0
- package/dist/features/arch/module-map-validation.js +30 -0
- package/dist/features/arch/module-mapping.d.ts +15 -0
- package/dist/features/arch/module-mapping.js +184 -0
- package/dist/features/arch/profiles.d.ts +4 -0
- package/dist/features/arch/profiles.js +8 -0
- package/dist/features/audit/append.d.ts +26 -0
- package/dist/features/audit/append.js +210 -0
- package/dist/features/audit/explain-table-tail.d.ts +2 -0
- package/dist/features/audit/explain-table-tail.js +29 -0
- package/dist/features/audit/explain-table.d.ts +8 -0
- package/dist/features/audit/explain-table.js +48 -0
- package/dist/features/audit/explain.d.ts +7 -0
- package/dist/features/audit/explain.js +87 -0
- package/dist/features/audit/index.d.ts +37 -0
- package/dist/features/audit/index.js +17 -0
- package/dist/features/audit/injection-event.d.ts +11 -0
- package/dist/features/audit/injection-event.js +17 -0
- package/dist/features/audit/read.d.ts +8 -0
- package/dist/features/audit/read.js +62 -0
- package/dist/features/audit/summarize.d.ts +1 -0
- package/dist/features/audit/summarize.js +41 -0
- package/dist/features/audit/surfaces.d.ts +47 -0
- package/dist/features/audit/surfaces.js +172 -0
- package/dist/features/audit/token-saver-evidence.d.ts +14 -0
- package/dist/features/audit/token-saver-evidence.js +85 -0
- package/dist/features/ci/changes.d.ts +28 -0
- package/dist/features/ci/changes.js +88 -0
- package/dist/features/ci/index.d.ts +22 -0
- package/dist/features/ci/index.js +75 -0
- package/dist/features/ci/protection-read.d.ts +3 -0
- package/dist/features/ci/protection-read.js +264 -0
- package/dist/features/ci/protection.d.ts +25 -0
- package/dist/features/ci/protection.js +101 -0
- package/dist/features/ci/workflow.d.ts +23 -0
- package/dist/features/ci/workflow.js +261 -0
- package/dist/features/config/human.d.ts +4 -0
- package/dist/features/config/human.js +31 -0
- package/dist/features/config/index.d.ts +37 -0
- package/dist/features/config/index.js +129 -0
- package/dist/features/config/pack-data.d.ts +18 -0
- package/dist/features/config/pack-data.js +116 -0
- package/dist/features/config/validate-sections.d.ts +6 -0
- package/dist/features/config/validate-sections.js +198 -0
- package/dist/features/config/validate-shared.d.ts +8 -0
- package/dist/features/config/validate-shared.js +69 -0
- package/dist/features/config/validate-tunables.d.ts +1 -0
- package/dist/features/config/validate-tunables.js +89 -0
- package/dist/features/config/validate.d.ts +2 -0
- package/dist/features/config/validate.js +57 -0
- package/dist/features/deps/bots.d.ts +5 -0
- package/dist/features/deps/bots.js +39 -0
- package/dist/features/deps/capabilities.d.ts +3 -0
- package/dist/features/deps/capabilities.js +91 -0
- package/dist/features/deps/check.d.ts +18 -0
- package/dist/features/deps/check.js +70 -0
- package/dist/features/deps/dependabot.d.ts +10 -0
- package/dist/features/deps/dependabot.js +154 -0
- package/dist/features/deps/eval.d.ts +41 -0
- package/dist/features/deps/eval.js +24 -0
- package/dist/features/deps/fields.d.ts +4 -0
- package/dist/features/deps/fields.js +18 -0
- package/dist/features/deps/index.d.ts +67 -0
- package/dist/features/deps/index.js +27 -0
- package/dist/features/deps/lockfile.d.ts +8 -0
- package/dist/features/deps/lockfile.js +87 -0
- package/dist/features/deps/npm.d.ts +22 -0
- package/dist/features/deps/npm.js +187 -0
- package/dist/features/deps/npmrc.d.ts +12 -0
- package/dist/features/deps/npmrc.js +50 -0
- package/dist/features/deps/nuget.d.ts +25 -0
- package/dist/features/deps/nuget.js +112 -0
- package/dist/features/deps/osv-ranges.d.ts +12 -0
- package/dist/features/deps/osv-ranges.js +83 -0
- package/dist/features/deps/osv.d.ts +16 -0
- package/dist/features/deps/osv.js +144 -0
- package/dist/features/deps/pypi-pyproject.d.ts +7 -0
- package/dist/features/deps/pypi-pyproject.js +118 -0
- package/dist/features/deps/pypi.d.ts +29 -0
- package/dist/features/deps/pypi.js +137 -0
- package/dist/features/deps/registry.d.ts +29 -0
- package/dist/features/deps/registry.js +158 -0
- package/dist/features/deps/renovate.d.ts +15 -0
- package/dist/features/deps/renovate.js +98 -0
- package/dist/features/deps/selection.d.ts +20 -0
- package/dist/features/deps/selection.js +150 -0
- package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
- package/dist/features/deps/snapshot-verdicts.js +184 -0
- package/dist/features/deps/stable.d.ts +19 -0
- package/dist/features/deps/stable.js +131 -0
- package/dist/features/deps/step-size.d.ts +7 -0
- package/dist/features/deps/step-size.js +24 -0
- package/dist/features/deps/upgrade.d.ts +35 -0
- package/dist/features/deps/upgrade.js +124 -0
- package/dist/features/deps/verdicts.d.ts +21 -0
- package/dist/features/deps/verdicts.js +219 -0
- package/dist/features/engine/evaluate.d.ts +12 -0
- package/dist/features/engine/evaluate.js +170 -0
- package/dist/features/engine/index.d.ts +21 -0
- package/dist/features/engine/index.js +24 -0
- package/dist/features/engine/message.d.ts +3 -0
- package/dist/features/engine/message.js +69 -0
- package/dist/features/engine/ratchet.d.ts +1 -0
- package/dist/features/engine/ratchet.js +63 -0
- package/dist/features/engine/run-enforcer.d.ts +4 -0
- package/dist/features/engine/run-enforcer.js +82 -0
- package/dist/features/engine/waivers.d.ts +23 -0
- package/dist/features/engine/waivers.js +169 -0
- package/dist/features/generator/draft.d.ts +7 -0
- package/dist/features/generator/draft.js +148 -0
- package/dist/features/generator/index.d.ts +22 -0
- package/dist/features/generator/index.js +8 -0
- package/dist/features/generator/llm-draft.d.ts +3 -0
- package/dist/features/generator/llm-draft.js +93 -0
- package/dist/features/generator/prompt.d.ts +25 -0
- package/dist/features/generator/prompt.js +105 -0
- package/dist/features/generator/self-test.d.ts +12 -0
- package/dist/features/generator/self-test.js +65 -0
- package/dist/features/generator/templates.d.ts +26 -0
- package/dist/features/generator/templates.js +177 -0
- package/dist/features/integrity/drift.d.ts +19 -0
- package/dist/features/integrity/drift.js +168 -0
- package/dist/features/integrity/hooks.d.ts +19 -0
- package/dist/features/integrity/hooks.js +54 -0
- package/dist/features/integrity/index.d.ts +10 -0
- package/dist/features/integrity/index.js +14 -0
- package/dist/features/integrity/manifest.d.ts +15 -0
- package/dist/features/integrity/manifest.js +26 -0
- package/dist/features/integrity/self-protection.d.ts +12 -0
- package/dist/features/integrity/self-protection.js +144 -0
- package/dist/features/llm/attempt.d.ts +17 -0
- package/dist/features/llm/attempt.js +99 -0
- package/dist/features/llm/errors.d.ts +5 -0
- package/dist/features/llm/errors.js +18 -0
- package/dist/features/llm/index.d.ts +23 -0
- package/dist/features/llm/index.js +46 -0
- package/dist/features/llm/presets.d.ts +25 -0
- package/dist/features/llm/presets.js +159 -0
- package/dist/features/llm/wire.d.ts +17 -0
- package/dist/features/llm/wire.js +163 -0
- package/dist/features/packs/accept.d.ts +7 -0
- package/dist/features/packs/accept.js +73 -0
- package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/arch-guards.js +193 -0
- package/dist/features/packs/enforcers/binding.d.ts +31 -0
- package/dist/features/packs/enforcers/binding.js +157 -0
- package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/ci-guards.js +131 -0
- package/dist/features/packs/enforcers/code-health.d.ts +9 -0
- package/dist/features/packs/enforcers/code-health.js +180 -0
- package/dist/features/packs/enforcers/code.d.ts +5 -0
- package/dist/features/packs/enforcers/code.js +129 -0
- package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
- package/dist/features/packs/enforcers/command-forbid.js +61 -0
- package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
- package/dist/features/packs/enforcers/deps-guards.js +235 -0
- package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
- package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
- package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
- package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
- package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/docs-guards.js +180 -0
- package/dist/features/packs/enforcers/engine-version-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/engine-version-guards.js +42 -0
- package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
- package/dist/features/packs/enforcers/external-attribute.js +122 -0
- package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
- package/dist/features/packs/enforcers/external-bind.js +206 -0
- package/dist/features/packs/enforcers/external-check.d.ts +7 -0
- package/dist/features/packs/enforcers/external-check.js +131 -0
- package/dist/features/packs/enforcers/external-output.d.ts +30 -0
- package/dist/features/packs/enforcers/external-output.js +144 -0
- package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
- package/dist/features/packs/enforcers/external-probe.js +65 -0
- package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
- package/dist/features/packs/enforcers/external-runs.js +162 -0
- package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
- package/dist/features/packs/enforcers/external-sarif.js +109 -0
- package/dist/features/packs/enforcers/external.d.ts +39 -0
- package/dist/features/packs/enforcers/external.js +11 -0
- package/dist/features/packs/enforcers/gate-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/gate-guards.js +117 -0
- package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
- package/dist/features/packs/enforcers/health-abstraction.js +126 -0
- package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
- package/dist/features/packs/enforcers/health-duplication.js +197 -0
- package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
- package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
- package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
- package/dist/features/packs/enforcers/health-lex-template.js +67 -0
- package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
- package/dist/features/packs/enforcers/health-lex.js +227 -0
- package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
- package/dist/features/packs/enforcers/health-markers.js +31 -0
- package/dist/features/packs/enforcers/health-measures.d.ts +26 -0
- package/dist/features/packs/enforcers/health-measures.js +223 -0
- package/dist/features/packs/enforcers/health-refs.d.ts +5 -0
- package/dist/features/packs/enforcers/health-refs.js +76 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
- package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/integrity-guards.js +202 -0
- package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
- package/dist/features/packs/enforcers/jsonkey.js +95 -0
- package/dist/features/packs/enforcers/parametric.d.ts +7 -0
- package/dist/features/packs/enforcers/parametric.js +138 -0
- package/dist/features/packs/enforcers/pattern.d.ts +11 -0
- package/dist/features/packs/enforcers/pattern.js +88 -0
- package/dist/features/packs/enforcers/placement.d.ts +10 -0
- package/dist/features/packs/enforcers/placement.js +54 -0
- package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/py-checks.js +131 -0
- package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
- package/dist/features/packs/enforcers/py-lex.js +271 -0
- package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/py-phantom.js +163 -0
- package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
- package/dist/features/packs/enforcers/py-pins.js +184 -0
- package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
- package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/records-guards.js +178 -0
- package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/remediation-guards.js +42 -0
- package/dist/features/packs/enforcers/required.d.ts +10 -0
- package/dist/features/packs/enforcers/required.js +65 -0
- package/dist/features/packs/enforcers/secret-scan.d.ts +6 -0
- package/dist/features/packs/enforcers/secret-scan.js +173 -0
- package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
- package/dist/features/packs/enforcers/shell-analyse.js +105 -0
- package/dist/features/packs/enforcers/sizes.d.ts +10 -0
- package/dist/features/packs/enforcers/sizes.js +82 -0
- package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/steering-guards.js +162 -0
- package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/testing-guards.js +118 -0
- package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/ts-checks.js +147 -0
- package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
- package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
- package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/ts-phantom.js +117 -0
- package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/ts-security-patterns.js +97 -0
- package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/workflow-guards.js +117 -0
- package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
- package/dist/features/packs/enforcers/write-confine.js +131 -0
- package/dist/features/packs/hashes.d.ts +6 -0
- package/dist/features/packs/hashes.js +84 -0
- package/dist/features/packs/index.d.ts +22 -0
- package/dist/features/packs/index.js +15 -0
- package/dist/features/packs/loader.d.ts +13 -0
- package/dist/features/packs/loader.js +205 -0
- package/dist/features/packs/manifest-decl.d.ts +13 -0
- package/dist/features/packs/manifest-decl.js +121 -0
- package/dist/features/packs/manifest.d.ts +7 -0
- package/dist/features/packs/manifest.js +95 -0
- package/dist/features/packs/params.d.ts +2 -0
- package/dist/features/packs/params.js +90 -0
- package/dist/features/packs/registry.d.ts +11 -0
- package/dist/features/packs/registry.js +136 -0
- package/dist/features/packs/selftest.d.ts +3 -0
- package/dist/features/packs/selftest.js +144 -0
- package/dist/features/records/bug-grammar.d.ts +17 -0
- package/dist/features/records/bug-grammar.js +128 -0
- package/dist/features/records/bug-registry.d.ts +9 -0
- package/dist/features/records/bug-registry.js +67 -0
- package/dist/features/records/bug-rows-immutable.d.ts +3 -0
- package/dist/features/records/bug-rows-immutable.js +52 -0
- package/dist/features/records/bugs.d.ts +2 -0
- package/dist/features/records/bugs.js +24 -0
- package/dist/features/records/docs-lines.d.ts +16 -0
- package/dist/features/records/docs-lines.js +36 -0
- package/dist/features/records/docs-prose.d.ts +14 -0
- package/dist/features/records/docs-prose.js +252 -0
- package/dist/features/records/docs-structure.d.ts +17 -0
- package/dist/features/records/docs-structure.js +223 -0
- package/dist/features/records/docs.d.ts +9 -0
- package/dist/features/records/docs.js +238 -0
- package/dist/features/records/history-checks.d.ts +6 -0
- package/dist/features/records/history-checks.js +94 -0
- package/dist/features/records/history-parse.d.ts +16 -0
- package/dist/features/records/history-parse.js +101 -0
- package/dist/features/records/history-scope.d.ts +5 -0
- package/dist/features/records/history-scope.js +86 -0
- package/dist/features/records/history.d.ts +3 -0
- package/dist/features/records/history.js +5 -0
- package/dist/features/records/index.d.ts +8 -0
- package/dist/features/records/index.js +11 -0
- package/dist/features/remediation/adoption.d.ts +32 -0
- package/dist/features/remediation/adoption.js +142 -0
- package/dist/features/remediation/index.d.ts +12 -0
- package/dist/features/remediation/index.js +21 -0
- package/dist/features/remediation/plan-chains.d.ts +3 -0
- package/dist/features/remediation/plan-chains.js +111 -0
- package/dist/features/remediation/plan-generate.d.ts +3 -0
- package/dist/features/remediation/plan-generate.js +129 -0
- package/dist/features/remediation/plan-kinds.d.ts +32 -0
- package/dist/features/remediation/plan-kinds.js +42 -0
- package/dist/features/remediation/plan-markers.d.ts +2 -0
- package/dist/features/remediation/plan-markers.js +155 -0
- package/dist/features/remediation/plan-merge.d.ts +6 -0
- package/dist/features/remediation/plan-merge.js +33 -0
- package/dist/features/remediation/plan.d.ts +4 -0
- package/dist/features/remediation/plan.js +7 -0
- package/dist/features/remediation/step-floor.d.ts +5 -0
- package/dist/features/remediation/step-floor.js +76 -0
- package/dist/features/remediation/step-gates.d.ts +18 -0
- package/dist/features/remediation/step-gates.js +77 -0
- package/dist/features/remediation/step-split.d.ts +12 -0
- package/dist/features/remediation/step-split.js +75 -0
- package/dist/features/remediation/steps.d.ts +3 -0
- package/dist/features/remediation/steps.js +6 -0
- package/dist/features/remediation/types.d.ts +37 -0
- package/dist/features/remediation/types.js +1 -0
- package/dist/features/security/index.d.ts +12 -0
- package/dist/features/security/index.js +142 -0
- package/dist/features/steering/agent-assets.d.ts +7 -0
- package/dist/features/steering/agent-assets.js +75 -0
- package/dist/features/steering/budgets.d.ts +20 -0
- package/dist/features/steering/budgets.js +86 -0
- package/dist/features/steering/checks.d.ts +7 -0
- package/dist/features/steering/checks.js +67 -0
- package/dist/features/steering/context-file.d.ts +11 -0
- package/dist/features/steering/context-file.js +107 -0
- package/dist/features/steering/graph-scan.d.ts +7 -0
- package/dist/features/steering/graph-scan.js +17 -0
- package/dist/features/steering/index.d.ts +30 -0
- package/dist/features/steering/index.js +45 -0
- package/dist/features/steering/injection.d.ts +23 -0
- package/dist/features/steering/injection.js +124 -0
- package/dist/features/steering/mcp.d.ts +2 -0
- package/dist/features/steering/mcp.js +18 -0
- package/dist/features/steering/precedence.d.ts +10 -0
- package/dist/features/steering/precedence.js +28 -0
- package/dist/features/steering/read-cache.d.ts +13 -0
- package/dist/features/steering/read-cache.js +51 -0
- package/dist/features/testing/base.d.ts +1 -0
- package/dist/features/testing/base.js +8 -0
- package/dist/features/testing/covers.d.ts +8 -0
- package/dist/features/testing/covers.js +50 -0
- package/dist/features/testing/evaluate.d.ts +19 -0
- package/dist/features/testing/evaluate.js +47 -0
- package/dist/features/testing/index.d.ts +10 -0
- package/dist/features/testing/index.js +13 -0
- package/dist/features/testing/integrity.d.ts +28 -0
- package/dist/features/testing/integrity.js +140 -0
- package/dist/features/testing/ledger.d.ts +11 -0
- package/dist/features/testing/ledger.js +51 -0
- package/dist/features/testing/proofs.d.ts +26 -0
- package/dist/features/testing/proofs.js +88 -0
- package/dist/features/testing/report.d.ts +6 -0
- package/dist/features/testing/report.js +16 -0
- package/dist/features/testing/scenarios.d.ts +34 -0
- package/dist/features/testing/scenarios.js +112 -0
- package/dist/features/testing/tap-parser.d.ts +9 -0
- package/dist/features/testing/tap-parser.js +96 -0
- package/dist/features/testing/trace.d.ts +23 -0
- package/dist/features/testing/trace.js +110 -0
- package/dist/features/workflow/index.d.ts +14 -0
- package/dist/features/workflow/index.js +19 -0
- package/dist/features/workflow/loop.d.ts +5 -0
- package/dist/features/workflow/loop.js +36 -0
- package/dist/features/workflow/phases.d.ts +10 -0
- package/dist/features/workflow/phases.js +184 -0
- package/dist/features/workflow/review.d.ts +25 -0
- package/dist/features/workflow/review.js +119 -0
- package/dist/features/workflow/tasks.d.ts +73 -0
- package/dist/features/workflow/tasks.js +80 -0
- package/dist/features/workflow/writes.d.ts +8 -0
- package/dist/features/workflow/writes.js +96 -0
- package/dist/kernel/clock.d.ts +4 -0
- package/dist/kernel/clock.js +5 -0
- package/dist/kernel/config-keys.d.ts +2 -0
- package/dist/kernel/config-keys.js +5 -0
- package/dist/kernel/config-toml-keys.d.ts +2 -0
- package/dist/kernel/config-toml-keys.js +237 -0
- package/dist/kernel/config-yaml-keys.d.ts +2 -0
- package/dist/kernel/config-yaml-keys.js +177 -0
- package/dist/kernel/contracts.d.ts +76 -0
- package/dist/kernel/contracts.js +9 -0
- package/dist/kernel/entry.d.ts +1 -0
- package/dist/kernel/entry.js +31 -0
- package/dist/kernel/env.d.ts +4 -0
- package/dist/kernel/env.js +5 -0
- package/dist/kernel/errors.d.ts +7 -0
- package/dist/kernel/errors.js +6 -0
- package/dist/kernel/fs-confine.d.ts +14 -0
- package/dist/kernel/fs-confine.js +129 -0
- package/dist/kernel/fs-errors.d.ts +8 -0
- package/dist/kernel/fs-errors.js +37 -0
- package/dist/kernel/fs.d.ts +28 -0
- package/dist/kernel/fs.js +245 -0
- package/dist/kernel/git.d.ts +16 -0
- package/dist/kernel/git.js +128 -0
- package/dist/kernel/glob.d.ts +1 -0
- package/dist/kernel/glob.js +178 -0
- package/dist/kernel/hash.d.ts +3 -0
- package/dist/kernel/hash.js +12 -0
- package/dist/kernel/host.d.ts +3 -0
- package/dist/kernel/host.js +48 -0
- package/dist/kernel/index.d.ts +115 -0
- package/dist/kernel/index.js +33 -0
- package/dist/kernel/json.d.ts +4 -0
- package/dist/kernel/json.js +68 -0
- package/dist/kernel/net-allow.d.ts +8 -0
- package/dist/kernel/net-allow.js +45 -0
- package/dist/kernel/net-fetch.d.ts +5 -0
- package/dist/kernel/net-fetch.js +135 -0
- package/dist/kernel/net.d.ts +10 -0
- package/dist/kernel/net.js +24 -0
- package/dist/kernel/path.d.ts +3 -0
- package/dist/kernel/path.js +40 -0
- package/dist/kernel/pattern.d.ts +2 -0
- package/dist/kernel/pattern.js +150 -0
- package/dist/kernel/proc.d.ts +6 -0
- package/dist/kernel/proc.js +207 -0
- package/dist/kernel/read-cache.d.ts +6 -0
- package/dist/kernel/read-cache.js +27 -0
- package/dist/kernel/redact.d.ts +1 -0
- package/dist/kernel/redact.js +206 -0
- package/dist/kernel/repo-root.d.ts +3 -0
- package/dist/kernel/repo-root.js +29 -0
- package/dist/kernel/result.d.ts +10 -0
- package/dist/kernel/result.js +6 -0
- package/dist/kernel/schema-helpers.d.ts +11 -0
- package/dist/kernel/schema-helpers.js +101 -0
- package/dist/kernel/schema.d.ts +2 -0
- package/dist/kernel/schema.js +203 -0
- package/dist/kernel/secret-paths.d.ts +3 -0
- package/dist/kernel/secret-paths.js +70 -0
- package/dist/kernel/shell-bypass.d.ts +4 -0
- package/dist/kernel/shell-bypass.js +151 -0
- package/dist/kernel/shell-cmd.d.ts +6 -0
- package/dist/kernel/shell-cmd.js +213 -0
- package/dist/kernel/shell-deny-cmd.d.ts +7 -0
- package/dist/kernel/shell-deny-cmd.js +35 -0
- package/dist/kernel/shell-deny-destroy.d.ts +7 -0
- package/dist/kernel/shell-deny-destroy.js +71 -0
- package/dist/kernel/shell-deny-escalate.d.ts +7 -0
- package/dist/kernel/shell-deny-escalate.js +96 -0
- package/dist/kernel/shell-deny-target.d.ts +4 -0
- package/dist/kernel/shell-deny-target.js +51 -0
- package/dist/kernel/shell-deny.d.ts +8 -0
- package/dist/kernel/shell-deny.js +171 -0
- package/dist/kernel/shell-scan.d.ts +3 -0
- package/dist/kernel/shell-scan.js +226 -0
- package/dist/kernel/shell-word.d.ts +15 -0
- package/dist/kernel/shell-word.js +216 -0
- package/dist/kernel/shell.d.ts +22 -0
- package/dist/kernel/shell.js +2 -0
- package/dist/kernel/stdin.d.ts +2 -0
- package/dist/kernel/stdin.js +59 -0
- package/dist/kernel/test-report.d.ts +7 -0
- package/dist/kernel/test-report.js +112 -0
- package/dist/kernel/version.d.ts +2 -0
- package/dist/kernel/version.js +46 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +19 -11
- package/schema/accepted.schema.json +20 -0
- package/schema/baseline.schema.json +17 -0
- package/schema/capability.schema.json +31 -0
- package/schema/cli/error.schema.json +15 -0
- package/schema/cli/explain.schema.json +19 -0
- package/schema/cli/report.schema.json +15 -0
- package/schema/cli/status.schema.json +51 -0
- package/schema/cli/verify.schema.json +15 -0
- package/schema/config.schema.json +43 -0
- package/schema/event-log.schema.json +52 -0
- package/schema/hook-decision.schema.json +13 -0
- package/schema/hook-event.schema.json +50 -0
- package/schema/manifest.schema.json +26 -0
- package/schema/pack-draft.schema.json +42 -0
- package/schema/pack.schema.json +70 -0
- package/schema/registry-snapshot.schema.json +41 -0
- package/schema/remediation-plan.schema.json +44 -0
- package/schema/review-findings.schema.json +25 -0
- package/schema/task-record.schema.json +49 -0
- package/schema/waivers.schema.json +29 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// SPEC §4.19.2 + §4.3.3: trigger evaluation for `verify`. Resolves the
|
|
2
|
+
// scope from the verify flags, loads the always-on core pack plus the
|
|
3
|
+
// builtin language packs config packs name, and runs the engine over the
|
|
4
|
+
// scope. Findings merge with the drift findings in inspect.ts; pack load
|
|
5
|
+
// failures fail closed with their own code. Custom packs stay out until
|
|
6
|
+
// their acceptance flow lands (core/custom-pack-selftest is red).
|
|
7
|
+
import { createEngine } from "../features/engine/index.js";
|
|
8
|
+
import { isBuiltinPackId, loadBuiltinPack, resolveManifestEnforcers, } from "../features/packs/index.js";
|
|
9
|
+
import { err, isFixturePath, ok } from "../kernel/index.js";
|
|
10
|
+
// SPEC §4.3.2: the layer flag selects the trigger family. L1 and L2 are
|
|
11
|
+
// the local gate (pre-tool); L3 and above review the change as CI would.
|
|
12
|
+
export function triggerForLayer(layer) {
|
|
13
|
+
return layer === "L3" || layer === "L4" || layer === "L5"
|
|
14
|
+
? "review"
|
|
15
|
+
: "pre-tool";
|
|
16
|
+
}
|
|
17
|
+
function sortedUnique(files) {
|
|
18
|
+
return [...new Set(files)].sort();
|
|
19
|
+
}
|
|
20
|
+
function splitLines(output) {
|
|
21
|
+
return output
|
|
22
|
+
.split("\n")
|
|
23
|
+
.map((line) => line.trim())
|
|
24
|
+
.filter((line) => line !== "");
|
|
25
|
+
}
|
|
26
|
+
async function runGitList(ports, argv) {
|
|
27
|
+
const ran = await ports.proc.run(argv, {
|
|
28
|
+
cwd: ports.root,
|
|
29
|
+
env: {},
|
|
30
|
+
timeoutMs: 30000,
|
|
31
|
+
maxOutputBytes: 8 * 1024 * 1024,
|
|
32
|
+
});
|
|
33
|
+
if (ran.timedOut || ran.truncated || ran.code !== 0) {
|
|
34
|
+
return err({
|
|
35
|
+
code: "CDX-E703",
|
|
36
|
+
message: `git ${argv[1] ?? ""} failed while resolving the verify scope`,
|
|
37
|
+
remediation: "Run inside a git repository with git on PATH.",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return { ok: true, value: splitLines(ran.stdout) };
|
|
41
|
+
}
|
|
42
|
+
// SPEC §4.19.2: --staged evaluates the staged tree, --base/--head the
|
|
43
|
+
// range, --all and the bare command the tracked tree plus staged edits.
|
|
44
|
+
// SPEC §4.4.1 + §10.2: pack self-test fixtures are rule test data, judged
|
|
45
|
+
// by `pack test` and the red suite, not by verify. A committed violating
|
|
46
|
+
// fixture would flag on every run and can never be "fixed" without breaking
|
|
47
|
+
// the self-test, so every scope here excludes fixture dirs.
|
|
48
|
+
function withoutFixtures(files) {
|
|
49
|
+
return files.filter((file) => !isFixturePath(file));
|
|
50
|
+
}
|
|
51
|
+
export async function resolveVerifyScope(ports, flags) {
|
|
52
|
+
const trigger = triggerForLayer(flags.layer);
|
|
53
|
+
if (flags.staged) {
|
|
54
|
+
const staged = await ports.git.stagedFiles();
|
|
55
|
+
if (!staged.ok) {
|
|
56
|
+
return err(staged.error);
|
|
57
|
+
}
|
|
58
|
+
const files = withoutFixtures(staged.value);
|
|
59
|
+
return ok({
|
|
60
|
+
trigger,
|
|
61
|
+
files,
|
|
62
|
+
note: `staged ${String(files.length)} files`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (flags.base !== undefined && flags.head !== undefined) {
|
|
66
|
+
const ranged = await runGitList(ports, [
|
|
67
|
+
"git",
|
|
68
|
+
"diff",
|
|
69
|
+
"--name-only",
|
|
70
|
+
flags.base,
|
|
71
|
+
flags.head,
|
|
72
|
+
]);
|
|
73
|
+
if (!ranged.ok) {
|
|
74
|
+
return err(ranged.error);
|
|
75
|
+
}
|
|
76
|
+
const files = withoutFixtures(ranged.value);
|
|
77
|
+
return ok({
|
|
78
|
+
trigger,
|
|
79
|
+
files,
|
|
80
|
+
note: `range ${flags.base}..${flags.head}`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const tracked = await runGitList(ports, ["git", "ls-files"]);
|
|
84
|
+
if (!tracked.ok) {
|
|
85
|
+
return err(tracked.error);
|
|
86
|
+
}
|
|
87
|
+
const staged = await ports.git.stagedFiles();
|
|
88
|
+
if (!staged.ok) {
|
|
89
|
+
return err(staged.error);
|
|
90
|
+
}
|
|
91
|
+
return ok({
|
|
92
|
+
trigger,
|
|
93
|
+
files: sortedUnique(withoutFixtures([...tracked.value, ...staged.value])),
|
|
94
|
+
note: "tracked tree",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// SPEC §4.3.6: one verify evaluation reads each scope file once. Enforcers
|
|
98
|
+
// close over the same ports, so without sharing a full-tree scope costs one
|
|
99
|
+
// sweep per enforcer and every guard exceeds its budget under disk
|
|
100
|
+
// contention. This memo shares in-flight and completed reads across the
|
|
101
|
+
// evaluation; writes, appends and removals invalidate the path. Results are
|
|
102
|
+
// copies, so a guard can never mutate another guard's bytes.
|
|
103
|
+
function sharedRead(inner, reads) {
|
|
104
|
+
return (path) => {
|
|
105
|
+
const hit = reads.get(path);
|
|
106
|
+
if (hit !== undefined) {
|
|
107
|
+
return hit.then((result) => result.ok ? { ok: true, value: result.value.slice() } : result);
|
|
108
|
+
}
|
|
109
|
+
const pending = inner.read(path);
|
|
110
|
+
reads.set(path, pending);
|
|
111
|
+
return pending.then((result) => result.ok ? { ok: true, value: result.value.slice() } : result);
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function sharedReadText(inner, texts) {
|
|
115
|
+
return (path) => {
|
|
116
|
+
const hit = texts.get(path);
|
|
117
|
+
if (hit !== undefined) {
|
|
118
|
+
return hit;
|
|
119
|
+
}
|
|
120
|
+
const pending = inner.readText(path);
|
|
121
|
+
texts.set(path, pending);
|
|
122
|
+
return pending;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function sharedRealpath(inner, reals) {
|
|
126
|
+
return (path) => {
|
|
127
|
+
const hit = reals.get(path);
|
|
128
|
+
if (hit !== undefined) {
|
|
129
|
+
return hit;
|
|
130
|
+
}
|
|
131
|
+
const pending = inner.realpath(path);
|
|
132
|
+
reals.set(path, pending);
|
|
133
|
+
return pending;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function sharedReads(inner) {
|
|
137
|
+
const reads = new Map();
|
|
138
|
+
const texts = new Map();
|
|
139
|
+
const reals = new Map();
|
|
140
|
+
const drop = (path) => {
|
|
141
|
+
reads.delete(path);
|
|
142
|
+
texts.delete(path);
|
|
143
|
+
reals.delete(path);
|
|
144
|
+
};
|
|
145
|
+
const invalidate = (done, path) => done.then((result) => {
|
|
146
|
+
if (result.ok) {
|
|
147
|
+
drop(path);
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
read: sharedRead(inner, reads),
|
|
153
|
+
readText: sharedReadText(inner, texts),
|
|
154
|
+
write: (path, content) => invalidate(inner.write(path, content), path),
|
|
155
|
+
append: (path, content) => invalidate(inner.append(path, content), path),
|
|
156
|
+
remove: (path) => invalidate(inner.remove(path), path),
|
|
157
|
+
stat: (path) => inner.stat(path),
|
|
158
|
+
list: (dir) => inner.list(dir),
|
|
159
|
+
glob: (pattern, dir) => inner.glob(pattern, dir),
|
|
160
|
+
exists: (path) => inner.exists(path),
|
|
161
|
+
realpath: sharedRealpath(inner, reals),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// SPEC §4.4.2: the core pack is always loaded; language packs join from
|
|
165
|
+
// config.packs order. A config that names core does not load it twice.
|
|
166
|
+
// Every pack resolves against the caller's ports; the verify caller shares
|
|
167
|
+
// one read cache across them, so scope files read repo-relatively (§4.1.1)
|
|
168
|
+
// exactly once per run.
|
|
169
|
+
export async function loadEvalEnforcers(ports, packIds, excludeRuleIds = new Set()) {
|
|
170
|
+
const core = await loadBuiltinPack("core");
|
|
171
|
+
if (!core.ok) {
|
|
172
|
+
return err(core.error);
|
|
173
|
+
}
|
|
174
|
+
const manifests = [core.value.manifest];
|
|
175
|
+
for (const id of packIds) {
|
|
176
|
+
if (id === "core" || !isBuiltinPackId(id)) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const loaded = await loadBuiltinPack(id);
|
|
180
|
+
if (!loaded.ok) {
|
|
181
|
+
return err(loaded.error);
|
|
182
|
+
}
|
|
183
|
+
manifests.push(loaded.value.manifest);
|
|
184
|
+
}
|
|
185
|
+
const enforcers = [];
|
|
186
|
+
for (const manifest of manifests) {
|
|
187
|
+
const resolved = resolveManifestEnforcers(manifest, ports);
|
|
188
|
+
if (!resolved.ok) {
|
|
189
|
+
return err(resolved.error);
|
|
190
|
+
}
|
|
191
|
+
enforcers.push(...resolved.value);
|
|
192
|
+
}
|
|
193
|
+
return ok(enforcers.filter((enforcer) => !excludeRuleIds.has(enforcer.id)));
|
|
194
|
+
}
|
|
195
|
+
export async function evaluateScope(ports, packIds, scope, now, configHash,
|
|
196
|
+
// BUG-0014: diff-scope callers pass the diff-unsound rule ids (the gate
|
|
197
|
+
// subset); tree callers omit it and judge everything.
|
|
198
|
+
options = {}) {
|
|
199
|
+
const cached = { ...ports, fs: sharedReads(ports.fs) };
|
|
200
|
+
const excluded = options.excludeRuleIds ?? new Set();
|
|
201
|
+
const loaded = await loadEvalEnforcers(cached, packIds, excluded);
|
|
202
|
+
if (!loaded.ok) {
|
|
203
|
+
return err(loaded.error);
|
|
204
|
+
}
|
|
205
|
+
const engine = createEngine(loaded.value, { configHash });
|
|
206
|
+
const verdict = await engine.evaluate(scope.trigger, {
|
|
207
|
+
files: [...scope.files],
|
|
208
|
+
...(scope.proposedContent === undefined || scope.proposedContent === ""
|
|
209
|
+
? {}
|
|
210
|
+
: { proposedContent: scope.proposedContent }),
|
|
211
|
+
}, now);
|
|
212
|
+
return ok([...verdict.findings]);
|
|
213
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Finding, Result } from "../kernel/index.ts";
|
|
2
|
+
import type { CommandPorts } from "./shared.ts";
|
|
3
|
+
export declare const GATE_DIFF_UNSOUND_RULES: ReadonlySet<string>;
|
|
4
|
+
export declare function isGateDiffSound(ruleId: string): boolean;
|
|
5
|
+
export interface GateScope {
|
|
6
|
+
readonly files: ReadonlyArray<string>;
|
|
7
|
+
readonly note: string;
|
|
8
|
+
readonly proposedContent?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function addedLines(diff: string): string;
|
|
11
|
+
export declare function evaluateGateScope(ports: CommandPorts, packIds: ReadonlyArray<string>, scope: GateScope, now: string, configHash: string): Promise<Result<Array<Finding>>>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// BUG-0014 + SPEC §4.3.2: the gate rule subset over diff scopes. A gate
|
|
2
|
+
// judges a staged or pushed diff, not the tree, so enforcers that need
|
|
3
|
+
// whole-tree visibility (core/dead-code: an export looks unused when its
|
|
4
|
+
// importers are outside the diff) or test-title inputs (core/spec-trace:
|
|
5
|
+
// an empty rule scope selects every scoped file, so every normally
|
|
6
|
+
// commented file flags) are unsound there. They stay on the human
|
|
7
|
+
// `review` command over the tree; every other rule is sound on a diff.
|
|
8
|
+
// The phase-5 finer trigger is this rule subset, not a new trigger name.
|
|
9
|
+
import { err, ok, stableStringify } from "../kernel/index.js";
|
|
10
|
+
import { evaluateScope } from "./evaluate.js";
|
|
11
|
+
export const GATE_DIFF_UNSOUND_RULES = new Set([
|
|
12
|
+
"core/dead-code",
|
|
13
|
+
"core/spec-trace",
|
|
14
|
+
]);
|
|
15
|
+
// BUG-0014: gates select the diff-sound subset; the tree review keeps all.
|
|
16
|
+
export function isGateDiffSound(ruleId) {
|
|
17
|
+
return !GATE_DIFF_UNSOUND_RULES.has(ruleId);
|
|
18
|
+
}
|
|
19
|
+
// BUG-0014: canonical-key order, deterministic across OSes (§4.3.6 EC-12).
|
|
20
|
+
// One string comparison replaces the engine's field-by-field order, so the
|
|
21
|
+
// merge stays under the complexity floor without its own ordering rules.
|
|
22
|
+
function compareGateFindings(a, b) {
|
|
23
|
+
const left = gateFindingKey(a);
|
|
24
|
+
const right = gateFindingKey(b);
|
|
25
|
+
if (left === right) {
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
return left < right ? -1 : 1;
|
|
29
|
+
}
|
|
30
|
+
function gateFindingKey(finding) {
|
|
31
|
+
return stableStringify({
|
|
32
|
+
ruleId: finding.ruleId,
|
|
33
|
+
path: finding.path ?? "",
|
|
34
|
+
line: finding.line ?? 0,
|
|
35
|
+
code: finding.code ?? "",
|
|
36
|
+
message: finding.message,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// BUG-0014: the two gate legs overlap on rules with both triggers
|
|
40
|
+
// (core/no-secrets), so the merge dedupes exact findings.
|
|
41
|
+
function mergeGateFindings(first, second) {
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
const merged = [];
|
|
44
|
+
for (const finding of [...first, ...second]) {
|
|
45
|
+
const key = gateFindingKey(finding);
|
|
46
|
+
if (seen.has(key)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
seen.add(key);
|
|
50
|
+
merged.push(finding);
|
|
51
|
+
}
|
|
52
|
+
return merged.sort(compareGateFindings);
|
|
53
|
+
}
|
|
54
|
+
// BUG-0022 + SPEC §4.7.1: the L3 gate judges added lines only, so a commit
|
|
55
|
+
// deleting a flagged literal passes while staging one still blocks. A diff
|
|
56
|
+
// carries its removed lines as `-` rows; scanning the raw diff would match
|
|
57
|
+
// those and make the removal uncommittable.
|
|
58
|
+
export function addedLines(diff) {
|
|
59
|
+
return diff
|
|
60
|
+
.split("\n")
|
|
61
|
+
.filter((line) => line.startsWith("+") && !line.startsWith("+++"))
|
|
62
|
+
.map((line) => line.slice(1))
|
|
63
|
+
.join("\n");
|
|
64
|
+
}
|
|
65
|
+
// BUG-0014 + SPEC §4.3.2: the gate evaluation over a diff scope. The
|
|
66
|
+
// pre-tool leg keeps today's fail-closed local verdict byte for byte; the
|
|
67
|
+
// review leg adds the diff-sound review subset over the same files, so the
|
|
68
|
+
// gate no longer accepts the coverage loss the pre-tool-only mitigation
|
|
69
|
+
// took. The diff-unsound rules never run here, whatever their triggers say.
|
|
70
|
+
export async function evaluateGateScope(ports, packIds, scope, now, configHash) {
|
|
71
|
+
const input = scope.proposedContent === undefined || scope.proposedContent === ""
|
|
72
|
+
? {}
|
|
73
|
+
: { proposedContent: scope.proposedContent };
|
|
74
|
+
const local = await evaluateScope(ports, packIds, {
|
|
75
|
+
trigger: "pre-tool",
|
|
76
|
+
files: [...scope.files],
|
|
77
|
+
note: scope.note,
|
|
78
|
+
...input,
|
|
79
|
+
}, now, configHash);
|
|
80
|
+
if (!local.ok) {
|
|
81
|
+
return err(local.error);
|
|
82
|
+
}
|
|
83
|
+
const review = await evaluateScope(ports, packIds, {
|
|
84
|
+
trigger: "review",
|
|
85
|
+
files: [...scope.files],
|
|
86
|
+
note: scope.note,
|
|
87
|
+
...input,
|
|
88
|
+
}, now, configHash, { excludeRuleIds: GATE_DIFF_UNSOUND_RULES });
|
|
89
|
+
if (!review.ok) {
|
|
90
|
+
return err(review.error);
|
|
91
|
+
}
|
|
92
|
+
return ok(mergeGateFindings(local.value, review.value));
|
|
93
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// SPEC §4.14.4 + §4.7: the git-hook engine path. Installed hooks exec
|
|
2
|
+
// the launcher as `run.mjs git <hook>`; the launcher routes the `git` word
|
|
3
|
+
// here (SPEC §4.19.3). pre-commit and pre-push evaluate the staged or pushed
|
|
4
|
+
// the change with the gate rule subset `verify` loads over staged scopes —
|
|
5
|
+
// new scope plumbing, no new detection logic. commit-msg appends
|
|
6
|
+
// the Codictator-L3 trailer §4.14.2 checks at L4.
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { ENGINE_VERSION, HOOK_MARKER } from "../features/config/index.js";
|
|
9
|
+
import { err, makeError, ok, readHostText, writeHostText, } from "../kernel/index.js";
|
|
10
|
+
import { addedLines, evaluateGateScope } from "./gate-scope.js";
|
|
11
|
+
import { printFinding } from "./inspect.js";
|
|
12
|
+
import { commandEnv, fail, loadRepoConfig, MIN_NODE_MAJOR, needRoot, nodeMajor, nodeTooOldMessage, printHuman, printJson, reportError, usageError, } from "./shared.js";
|
|
13
|
+
const GIT_TIMEOUT_MS = 30000;
|
|
14
|
+
const GIT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
|
|
15
|
+
async function runGitText(ports, argv) {
|
|
16
|
+
const ran = await ports.proc.run(argv, {
|
|
17
|
+
cwd: ports.root,
|
|
18
|
+
env: {},
|
|
19
|
+
timeoutMs: GIT_TIMEOUT_MS,
|
|
20
|
+
maxOutputBytes: GIT_MAX_OUTPUT_BYTES,
|
|
21
|
+
});
|
|
22
|
+
if (ran.timedOut || ran.truncated || ran.code !== 0) {
|
|
23
|
+
return err(makeError("CDX-E703", `git ${argv[1] ?? ""} failed while reading the hook scope`, "Run inside a git repository with git on PATH."));
|
|
24
|
+
}
|
|
25
|
+
return ok(ran.stdout);
|
|
26
|
+
}
|
|
27
|
+
function emitGitVerdict(req, hook, findings) {
|
|
28
|
+
if (req.json) {
|
|
29
|
+
printJson({
|
|
30
|
+
hook,
|
|
31
|
+
decision: findings.length === 0 ? "allow" : "block",
|
|
32
|
+
findings,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
for (const finding of findings) {
|
|
37
|
+
printFinding(finding, req.quiet);
|
|
38
|
+
}
|
|
39
|
+
if (findings.length === 0) {
|
|
40
|
+
printHuman(`${hook}: pass`, req.quiet);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
printHuman(`${hook}: blocked (${String(findings.length)} findings)`, req.quiet);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return ok(findings.length === 0 ? 0 : 1);
|
|
47
|
+
}
|
|
48
|
+
async function evaluateGitChange(ports, req, hook, packIds, files, content, now, configHash) {
|
|
49
|
+
// BUG-0014 + SPEC §4.3.2: gates judge pre-tool plus the diff-sound
|
|
50
|
+
// review subset, the phase-5 finer trigger as a rule subset. The
|
|
51
|
+
// diff-unsound rules (spec-trace, dead-code) stay on the human
|
|
52
|
+
// `review` command over the tree; a review trigger here once blocked
|
|
53
|
+
// every normally-commented file.
|
|
54
|
+
const evaluated = await evaluateGateScope(ports, packIds, {
|
|
55
|
+
files: [...files],
|
|
56
|
+
note: hook,
|
|
57
|
+
...(content === "" ? {} : { proposedContent: addedLines(content) }),
|
|
58
|
+
}, now, configHash);
|
|
59
|
+
if (!evaluated.ok) {
|
|
60
|
+
return reportError(evaluated.error, req.json);
|
|
61
|
+
}
|
|
62
|
+
return emitGitVerdict(req, hook, evaluated.value);
|
|
63
|
+
}
|
|
64
|
+
// SPEC §4.7.1: L3 scans staged content. The staged file list scopes the
|
|
65
|
+
// disk reads while the staged diff rides as proposed content, so a secret
|
|
66
|
+
// staged but not yet matching the worktree still blocks.
|
|
67
|
+
async function runPreCommit(req, ports, packIds, now, configHash) {
|
|
68
|
+
const staged = await ports.git.stagedFiles();
|
|
69
|
+
if (!staged.ok) {
|
|
70
|
+
return reportError(staged.error, req.json);
|
|
71
|
+
}
|
|
72
|
+
if (staged.value.length === 0) {
|
|
73
|
+
return emitGitVerdict(req, "pre-commit", []);
|
|
74
|
+
}
|
|
75
|
+
const diff = await runGitText(ports, ["git", "diff", "--cached", "--"]);
|
|
76
|
+
if (!diff.ok) {
|
|
77
|
+
return reportError(diff.error, req.json);
|
|
78
|
+
}
|
|
79
|
+
return evaluateGitChange(ports, req, "pre-commit", packIds, staged.value, diff.value, now, configHash);
|
|
80
|
+
}
|
|
81
|
+
// SPEC §4.14.4: git hands commit-msg the COMMIT_EDITMSG path, absolute in a
|
|
82
|
+
// linked worktree (under the main repo's .git/worktrees/<name>/ dir, outside
|
|
83
|
+
// the worktree root) but relative to the repo root (`.git/COMMIT_EDITMSG`)
|
|
84
|
+
// in the main worktree. The confined Fs port rejects absolute paths
|
|
85
|
+
// (CDX-E701), so the hook uses kernel-owned host I/O — which itself
|
|
86
|
+
// requires absolute paths — resolving a relative handoff against the
|
|
87
|
+
// invocation cwd first; an unreadable or unwritable message file blocks
|
|
88
|
+
// fail-closed.
|
|
89
|
+
async function runCommitMsg(req, configHash) {
|
|
90
|
+
if (req.args.length !== 2 || req.args[1] === undefined) {
|
|
91
|
+
return usageError("usage: codictator git commit-msg <file>");
|
|
92
|
+
}
|
|
93
|
+
const raw = req.args[1];
|
|
94
|
+
const file = path.isAbsolute(raw) ? raw : path.resolve(req.cwd, raw);
|
|
95
|
+
const trailer = `Codictator-L3: ${configHash.slice(0, 12)}`;
|
|
96
|
+
const read = await readHostText(file);
|
|
97
|
+
if (!read.ok) {
|
|
98
|
+
return reportError(read.error, req.json);
|
|
99
|
+
}
|
|
100
|
+
if (read.value.split("\n").some((line) => line.startsWith("Codictator-L3: "))) {
|
|
101
|
+
return ok(0);
|
|
102
|
+
}
|
|
103
|
+
const base = read.value.endsWith("\n") ? read.value : `${read.value}\n`;
|
|
104
|
+
const wrote = await writeHostText(file, `${base}\n${trailer}\n`);
|
|
105
|
+
if (!wrote.ok) {
|
|
106
|
+
return reportError(wrote.error, req.json);
|
|
107
|
+
}
|
|
108
|
+
return ok(0);
|
|
109
|
+
}
|
|
110
|
+
// SPEC §4.3.2: pre-push judges the `@{push}..HEAD` diff. Without an
|
|
111
|
+
// upstream there is no pushed range; the commits were gated at commit time.
|
|
112
|
+
async function runPrePush(req, ports, packIds, now, configHash) {
|
|
113
|
+
const upstream = await runGitText(ports, [
|
|
114
|
+
"git",
|
|
115
|
+
"rev-parse",
|
|
116
|
+
"--verify",
|
|
117
|
+
"@{push}",
|
|
118
|
+
]);
|
|
119
|
+
if (!upstream.ok || upstream.value.trim() === "") {
|
|
120
|
+
return emitGitVerdict(req, "pre-push", []);
|
|
121
|
+
}
|
|
122
|
+
const base = upstream.value.trim();
|
|
123
|
+
const names = await runGitText(ports, [
|
|
124
|
+
"git",
|
|
125
|
+
"diff",
|
|
126
|
+
"--name-only",
|
|
127
|
+
base,
|
|
128
|
+
"HEAD",
|
|
129
|
+
"--",
|
|
130
|
+
]);
|
|
131
|
+
if (!names.ok) {
|
|
132
|
+
return reportError(names.error, req.json);
|
|
133
|
+
}
|
|
134
|
+
const diff = await runGitText(ports, ["git", "diff", base, "HEAD", "--"]);
|
|
135
|
+
if (!diff.ok) {
|
|
136
|
+
return reportError(diff.error, req.json);
|
|
137
|
+
}
|
|
138
|
+
const files = names.value
|
|
139
|
+
.split("\n")
|
|
140
|
+
.map((line) => line.trim())
|
|
141
|
+
.filter((line) => line !== "");
|
|
142
|
+
return evaluateGitChange(ports, req, "pre-push", packIds, files, diff.value, now, configHash);
|
|
143
|
+
}
|
|
144
|
+
// SPEC §4.2.3 with §4.19.3, same shape as the L1 runtime hookEnv: the
|
|
145
|
+
// launcher marks this engine process CODICTATOR_HOOK=1, which authorizes
|
|
146
|
+
// evaluation instead of refusing it. Only the launcher's own marker is
|
|
147
|
+
// hidden, so a foreign agent marker still refuses CDX-E107 in loadConfig.
|
|
148
|
+
function hookEnv(inner) {
|
|
149
|
+
return {
|
|
150
|
+
get: (name) => name === HOOK_MARKER ? undefined : inner.get(name),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// SPEC §4.19.3: the `git` word entry. Args arrive without the word itself:
|
|
154
|
+
// `pre-commit`, `commit-msg <file>` or `pre-push`. Unknown hooks are usage
|
|
155
|
+
// errors (exit 2); every evaluation failure blocks.
|
|
156
|
+
export async function handleGitHook(req) {
|
|
157
|
+
const version = req.nodeVersion ?? process.version;
|
|
158
|
+
if (nodeMajor(version) < MIN_NODE_MAJOR) {
|
|
159
|
+
return fail("CDX-E002", nodeTooOldMessage(version), "Install a newer Node, then retry the hook.", req.json);
|
|
160
|
+
}
|
|
161
|
+
const hook = req.args[0] ?? "";
|
|
162
|
+
if (hook !== "pre-commit" && hook !== "commit-msg" && hook !== "pre-push") {
|
|
163
|
+
return usageError("usage: codictator git <pre-commit|commit-msg <file>|pre-push>");
|
|
164
|
+
}
|
|
165
|
+
const root = await needRoot(req);
|
|
166
|
+
if (typeof root !== "string") {
|
|
167
|
+
return root;
|
|
168
|
+
}
|
|
169
|
+
const configured = await loadRepoConfig(root, hookEnv(commandEnv()), req.engineVersion ?? ENGINE_VERSION);
|
|
170
|
+
if (!configured.ok) {
|
|
171
|
+
return fail(configured.error.code, configured.error.message, "Fix .codictator/config.json, then retry.", req.json);
|
|
172
|
+
}
|
|
173
|
+
const ports = configured.value.ports;
|
|
174
|
+
const packIds = configured.value.effective.config.packs.map((entry) => entry.id);
|
|
175
|
+
const now = ports.clock.now();
|
|
176
|
+
const configHash = configured.value.effective.configHash;
|
|
177
|
+
if (hook === "commit-msg") {
|
|
178
|
+
return runCommitMsg(req, configHash);
|
|
179
|
+
}
|
|
180
|
+
if (hook === "pre-push") {
|
|
181
|
+
return runPrePush(req, ports, packIds, now, configHash);
|
|
182
|
+
}
|
|
183
|
+
return runPreCommit(req, ports, packIds, now, configHash);
|
|
184
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Result } from "../kernel/index.ts";
|
|
2
|
+
import type { CommandRequest } from "./shared.ts";
|
|
3
|
+
export declare function handleRegen(req: CommandRequest): Promise<Result<number>>;
|
|
4
|
+
export declare function handleInstallHooks(req: CommandRequest): Promise<Result<number>>;
|
|
5
|
+
export declare function handleUninstall(req: CommandRequest): Promise<Result<number>>;
|