codictator 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +4 -2
- 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/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 +10 -0
- package/dist/cli/gate-scope.js +82 -0
- package/dist/cli/git-hook.d.ts +3 -0
- package/dist/cli/git-hook.js +179 -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 +1 -0
- package/dist/cli/plan-launcher.js +222 -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 +3 -0
- package/dist/features/adapters/claude-shaped.js +176 -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 +207 -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 +205 -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 +165 -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 +77 -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 +172 -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 +147 -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 +106 -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 +114 -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 +165 -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 +128 -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 +128 -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/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 +172 -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 +103 -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 +12 -0
- package/dist/features/packs/enforcers/gate-guards.js +170 -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 +24 -0
- package/dist/features/packs/enforcers/health-measures.js +214 -0
- package/dist/features/packs/enforcers/health-refs.d.ts +6 -0
- package/dist/features/packs/enforcers/health-refs.js +61 -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 +22 -0
- package/dist/features/packs/enforcers/secret-scan.js +179 -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 +101 -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 +93 -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.d.ts +17 -0
- package/dist/features/packs/manifest.js +180 -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 +127 -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 +131 -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 +90 -0
- package/dist/features/testing/tap-parser.d.ts +9 -0
- package/dist/features/testing/tap-parser.js +84 -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 +181 -0
- package/dist/features/workflow/review.d.ts +25 -0
- package/dist/features/workflow/review.js +112 -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 +125 -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 +116 -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 +56 -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 +196 -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 +20 -5
- 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,163 @@
|
|
|
1
|
+
// SPEC §4.17.2: the two wire formats. Builders turn a narrowed config plus a
|
|
2
|
+
// completion request into a Net port request; readers pull the text (and the
|
|
3
|
+
// provider's stop signal) back out of a 200 body. Pure over caller-supplied
|
|
4
|
+
// strings, so the retry loop in index.ts stays small.
|
|
5
|
+
import { parseJson } from "../../kernel/index.js";
|
|
6
|
+
import { isRecord } from "./presets.js";
|
|
7
|
+
export const ANTHROPIC_VERSION = "2023-06-01";
|
|
8
|
+
// Bracket access through a variable keeps
|
|
9
|
+
// noPropertyAccessFromIndexSignature satisfied without tripping
|
|
10
|
+
// useLiteralKeys (kernel narrows the same way).
|
|
11
|
+
function field(value, name) {
|
|
12
|
+
return value[name];
|
|
13
|
+
}
|
|
14
|
+
function isMetaHost(baseUrl) {
|
|
15
|
+
return new URL(baseUrl).hostname.toLowerCase() === "api.meta.ai";
|
|
16
|
+
}
|
|
17
|
+
function bearerHeaders(key) {
|
|
18
|
+
const headers = {
|
|
19
|
+
"content-type": "application/json",
|
|
20
|
+
};
|
|
21
|
+
if (key !== undefined) {
|
|
22
|
+
const authorizationKey = "authorization";
|
|
23
|
+
headers[authorizationKey] = `Bearer ${key}`;
|
|
24
|
+
}
|
|
25
|
+
return headers;
|
|
26
|
+
}
|
|
27
|
+
// SPEC §4.17.2: openai-chat posts to {baseUrl}/chat/completions with a
|
|
28
|
+
// developer message, temperature 0 and (when supported) a json_object
|
|
29
|
+
// response_format. reasoning_effort rides along when set, but never "none"
|
|
30
|
+
// for Muse Spark, which rejects it.
|
|
31
|
+
export function buildOpenaiChatRequest(config, model, prompt, maxTokens, key, withResponseFormat) {
|
|
32
|
+
const body = {
|
|
33
|
+
model,
|
|
34
|
+
messages: [{ role: "developer", content: prompt }],
|
|
35
|
+
temperature: 0,
|
|
36
|
+
max_tokens: maxTokens,
|
|
37
|
+
};
|
|
38
|
+
if (withResponseFormat) {
|
|
39
|
+
const formatKey = "response_format";
|
|
40
|
+
body[formatKey] = { type: "json_object" };
|
|
41
|
+
}
|
|
42
|
+
const effort = config.reasoningEffort;
|
|
43
|
+
const isSpark = model.startsWith("muse-spark");
|
|
44
|
+
if (effort !== undefined && !(isSpark && effort === "none")) {
|
|
45
|
+
const effortKey = "reasoning_effort";
|
|
46
|
+
body[effortKey] = effort;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
method: "POST",
|
|
50
|
+
url: `${config.baseUrl}/chat/completions`,
|
|
51
|
+
headers: bearerHeaders(key),
|
|
52
|
+
body: JSON.stringify(body),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// SPEC §4.17.2: anthropic-messages posts to {baseUrl}/messages with a system
|
|
56
|
+
// prompt, a user message, max_tokens, the anthropic-version header and the
|
|
57
|
+
// key as x-api-key (Bearer for Meta).
|
|
58
|
+
export function buildAnthropicRequest(config, model, prompt, maxTokens, key) {
|
|
59
|
+
const headers = {
|
|
60
|
+
"content-type": "application/json",
|
|
61
|
+
"anthropic-version": ANTHROPIC_VERSION,
|
|
62
|
+
};
|
|
63
|
+
if (key !== undefined) {
|
|
64
|
+
if (isMetaHost(config.baseUrl)) {
|
|
65
|
+
const authorizationKey = "authorization";
|
|
66
|
+
headers[authorizationKey] = `Bearer ${key}`;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
headers["x-api-key"] = key;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
method: "POST",
|
|
74
|
+
url: `${config.baseUrl}/messages`,
|
|
75
|
+
headers,
|
|
76
|
+
body: JSON.stringify({
|
|
77
|
+
model,
|
|
78
|
+
system: prompt,
|
|
79
|
+
messages: [{ role: "user", content: prompt }],
|
|
80
|
+
max_tokens: maxTokens,
|
|
81
|
+
temperature: 0,
|
|
82
|
+
}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function readOpenaiText(parsed) {
|
|
86
|
+
if (!isRecord(parsed)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const choices = field(parsed, "choices");
|
|
90
|
+
if (!Array.isArray(choices)) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const first = choices[0];
|
|
94
|
+
if (!isRecord(first)) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const message = field(first, "message");
|
|
98
|
+
if (!isRecord(message)) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
const content = field(message, "content");
|
|
102
|
+
if (typeof content !== "string") {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
const reason = field(first, "finish_reason");
|
|
106
|
+
const finishReason = typeof reason === "string" ? reason : "stop";
|
|
107
|
+
return {
|
|
108
|
+
text: content,
|
|
109
|
+
stopReason: finishReason,
|
|
110
|
+
truncated: finishReason === "length",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function readAnthropicText(parsed) {
|
|
114
|
+
if (!isRecord(parsed)) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const content = field(parsed, "content");
|
|
118
|
+
if (!Array.isArray(content)) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const parts = [];
|
|
122
|
+
for (const block of content) {
|
|
123
|
+
if (!isRecord(block)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (field(block, "type") !== "text") {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const text = field(block, "text");
|
|
130
|
+
if (typeof text !== "string") {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
parts.push(text);
|
|
134
|
+
}
|
|
135
|
+
if (parts.length === 0) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const reason = field(parsed, "stop_reason");
|
|
139
|
+
const stopReason = typeof reason === "string" ? reason : "end_turn";
|
|
140
|
+
return {
|
|
141
|
+
text: parts.join(""),
|
|
142
|
+
stopReason,
|
|
143
|
+
truncated: stopReason === "max_tokens",
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// SPEC §4.17.2: pick the wire format from the narrowed config.
|
|
147
|
+
export function buildWireRequest(config, model, prompt, maxTokens, key, withResponseFormat) {
|
|
148
|
+
return config.format === "openai-chat"
|
|
149
|
+
? buildOpenaiChatRequest(config, model, prompt, maxTokens, key, withResponseFormat)
|
|
150
|
+
: buildAnthropicRequest(config, model, prompt, maxTokens, key);
|
|
151
|
+
}
|
|
152
|
+
// Read a 200 body per the configured format. Undefined means the provider
|
|
153
|
+
// answered something the format cannot carry, which the client reports as
|
|
154
|
+
// invalid JSON for the generator repair round (EC-7).
|
|
155
|
+
export function readWireText(format, body) {
|
|
156
|
+
const parsed = parseJson(body);
|
|
157
|
+
if (!parsed.ok) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
return format === "openai-chat"
|
|
161
|
+
? readOpenaiText(parsed.value)
|
|
162
|
+
: readAnthropicText(parsed.value);
|
|
163
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Ports, Result } from "../../kernel/index.ts";
|
|
2
|
+
import type { PackAccepted } from "./index.ts";
|
|
3
|
+
export interface AcceptPackOptions {
|
|
4
|
+
readonly isTty: boolean;
|
|
5
|
+
readonly agentMarkers?: ReadonlyArray<string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function acceptPack(packDir: string, ports: Ports, options: AcceptPackOptions): Promise<Result<PackAccepted>>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// SPEC §4.4.7: acceptance of custom packs. `codictator pack accept` is
|
|
2
|
+
// human-only, runs the self-test, then writes accepted.json (§7.4); any
|
|
3
|
+
// later byte change invalidates it and the loader holds the pack inert.
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { err, makeError, ok, stableStringify } from "../../kernel/index.js";
|
|
6
|
+
import { requireHuman } from "../config/index.js";
|
|
7
|
+
import { ACCEPTED_NAME, packHashFor, selfTestHashFor } from "./hashes.js";
|
|
8
|
+
import { loadPack } from "./loader.js";
|
|
9
|
+
import { selfTest } from "./selftest.js";
|
|
10
|
+
function refused(error) {
|
|
11
|
+
if (typeof error === "object" &&
|
|
12
|
+
error !== null &&
|
|
13
|
+
"code" in error &&
|
|
14
|
+
typeof error.code === "string" &&
|
|
15
|
+
"message" in error &&
|
|
16
|
+
typeof error.message === "string" &&
|
|
17
|
+
"remediation" in error &&
|
|
18
|
+
typeof error.remediation === "string") {
|
|
19
|
+
const coded = {
|
|
20
|
+
code: error.code,
|
|
21
|
+
message: error.message,
|
|
22
|
+
remediation: error.remediation,
|
|
23
|
+
};
|
|
24
|
+
return err(coded);
|
|
25
|
+
}
|
|
26
|
+
return err(makeError("CDX-E901", "pack accept refused without a coded error", "Retry in an interactive terminal, then re-run codictator pack accept."));
|
|
27
|
+
}
|
|
28
|
+
function toPosix(value) {
|
|
29
|
+
return value.split(path.sep).join("/");
|
|
30
|
+
}
|
|
31
|
+
// SPEC §4.4.7: human-only acceptance after a green self-test. Paths read
|
|
32
|
+
// through the caller's ports in caller form; the CLI passes repo-relative
|
|
33
|
+
// pack dirs with repo-rooted ports.
|
|
34
|
+
export async function acceptPack(packDir, ports, options) {
|
|
35
|
+
try {
|
|
36
|
+
requireHuman(ports.env, options.isTty, options.agentMarkers ?? []);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return refused(error);
|
|
40
|
+
}
|
|
41
|
+
const dirForm = toPosix(packDir);
|
|
42
|
+
const loaded = await loadPack(packDir, { ports, skipAcceptance: true });
|
|
43
|
+
if (!loaded.ok) {
|
|
44
|
+
return err(loaded.error);
|
|
45
|
+
}
|
|
46
|
+
const tested = await selfTest(loaded.value);
|
|
47
|
+
if (!tested.ok) {
|
|
48
|
+
return err(tested.error);
|
|
49
|
+
}
|
|
50
|
+
const hashed = await packHashFor(ports.fs, dirForm);
|
|
51
|
+
if (!hashed.ok) {
|
|
52
|
+
return err(hashed.error);
|
|
53
|
+
}
|
|
54
|
+
const email = await ports.git.config("user.email");
|
|
55
|
+
if (!email.ok) {
|
|
56
|
+
return err(email.error);
|
|
57
|
+
}
|
|
58
|
+
if (email.value.trim().length === 0) {
|
|
59
|
+
return err(makeError("CDX-E903", "git user.email is not set; pack acceptance needs an author", "Set git user.email, then re-run codictator pack accept."));
|
|
60
|
+
}
|
|
61
|
+
const accepted = {
|
|
62
|
+
version: 1,
|
|
63
|
+
packHash: hashed.value,
|
|
64
|
+
selfTestHash: selfTestHashFor(loaded.value.manifest),
|
|
65
|
+
acceptedAt: ports.clock.now(),
|
|
66
|
+
acceptedBy: email.value.trim(),
|
|
67
|
+
};
|
|
68
|
+
const written = await ports.fs.write(`${dirForm}/${ACCEPTED_NAME}`, new TextEncoder().encode(stableStringify(accepted)));
|
|
69
|
+
if (!written.ok) {
|
|
70
|
+
return err(written.error);
|
|
71
|
+
}
|
|
72
|
+
return ok(accepted);
|
|
73
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Ports } from "../../../kernel/index.ts";
|
|
2
|
+
import { type Result } from "../../../kernel/index.ts";
|
|
3
|
+
import type { Enforcer } from "../../engine/index.ts";
|
|
4
|
+
import type { PackRule } from "../index.ts";
|
|
5
|
+
import { type EnforcerDecl } from "../manifest.ts";
|
|
6
|
+
export declare function resolveArchProfileDeclared(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
7
|
+
export declare function resolveArchModuleMapped(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
8
|
+
export declare function resolveArchBoundaries(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
9
|
+
export declare function resolveArchPublicEntry(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
10
|
+
export declare function resolveArchNoCycles(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
11
|
+
export declare function resolveArchModuleSize(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
12
|
+
export declare function resolveCompilerStrict(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { ok, parseJson } from "../../../kernel/index.js";
|
|
2
|
+
import { isRecord } from "../manifest.js";
|
|
3
|
+
import { bindRule, findingFor, selectFiles } from "./binding.js";
|
|
4
|
+
import { baseEnforcer, limitOf, loadScopeText, parseMarkerInt, parseMarkers, } from "./health-measures.js";
|
|
5
|
+
// SPEC §5.7 core/arch-profile-declared: a missing architecture profile
|
|
6
|
+
// flags.
|
|
7
|
+
export function resolveArchProfileDeclared(decl, rule, ports) {
|
|
8
|
+
const binding = bindRule(rule);
|
|
9
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
10
|
+
const findings = [];
|
|
11
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
12
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
13
|
+
if (text === undefined) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if ((parseMarkers(text).get("profile") ?? "") === "none") {
|
|
17
|
+
findings.push(findingFor(binding, {
|
|
18
|
+
path: file,
|
|
19
|
+
message: `architecture profile missing for ${file}`,
|
|
20
|
+
vars: { path: file },
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return findings;
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
// SPEC §5.7 core/arch-module-mapped: a file outside every module flags.
|
|
28
|
+
export function resolveArchModuleMapped(decl, rule, ports) {
|
|
29
|
+
const binding = bindRule(rule);
|
|
30
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
31
|
+
const findings = [];
|
|
32
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
33
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
34
|
+
if (text === undefined) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if ((parseMarkers(text).get("module") ?? "") === "unmapped") {
|
|
38
|
+
findings.push(findingFor(binding, {
|
|
39
|
+
path: file,
|
|
40
|
+
message: `file outside every module: ${file}`,
|
|
41
|
+
vars: { path: file },
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return findings;
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
// SPEC §5.7 core/arch-boundaries: an import along a denied edge flags.
|
|
49
|
+
export function resolveArchBoundaries(decl, rule, ports) {
|
|
50
|
+
const binding = bindRule(rule);
|
|
51
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
52
|
+
const findings = [];
|
|
53
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
54
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
55
|
+
if (text === undefined) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if ((parseMarkers(text).get("allowed") ?? "") === "false") {
|
|
59
|
+
findings.push(findingFor(binding, {
|
|
60
|
+
path: file,
|
|
61
|
+
message: `import along a denied edge in ${file}`,
|
|
62
|
+
vars: { path: file },
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return findings;
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
// SPEC §5.7 core/arch-public-entry: a deep import past the module entry
|
|
70
|
+
// flags.
|
|
71
|
+
// SPEC §5.7 core/arch-public-entry: a cross-module import targets the
|
|
72
|
+
// public entry, never the internals. The report is an `import:` marker
|
|
73
|
+
// line (the fixture measure report carries it); mere prose mentioning
|
|
74
|
+
// internals — SPEC EC tables, test titles, the rule reason — is not a
|
|
75
|
+
// deep import.
|
|
76
|
+
export function resolveArchPublicEntry(decl, rule, ports) {
|
|
77
|
+
const binding = bindRule(rule);
|
|
78
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
79
|
+
const findings = [];
|
|
80
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
81
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
82
|
+
if (text === undefined) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const deep = [...text.matchAll(/^[ \t]*import:[ \t]*(\S+)/gm)].some((match) => (match[1] ?? "")
|
|
86
|
+
.split("/")
|
|
87
|
+
.some((segment) => segment === "internals" || segment.startsWith("internals.")));
|
|
88
|
+
if (!deep) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
findings.push(findingFor(binding, {
|
|
92
|
+
path: file,
|
|
93
|
+
message: `deep import past the public entry in ${file}`,
|
|
94
|
+
vars: { path: file },
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
return findings;
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
// SPEC §5.7 core/arch-no-cycles: a module cycle flags.
|
|
101
|
+
export function resolveArchNoCycles(decl, rule, ports) {
|
|
102
|
+
const binding = bindRule(rule);
|
|
103
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
104
|
+
const findings = [];
|
|
105
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
106
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
107
|
+
if (text === undefined) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const edges = parseMarkers(text).get("edges") ?? "";
|
|
111
|
+
const nodes = edges
|
|
112
|
+
.split("->")
|
|
113
|
+
.map((node) => node.trim())
|
|
114
|
+
.filter((node) => node !== "");
|
|
115
|
+
if (nodes.length > 1 && new Set(nodes).size < nodes.length) {
|
|
116
|
+
findings.push(findingFor(binding, {
|
|
117
|
+
path: file,
|
|
118
|
+
message: `module cycle in ${file}: ${edges}`,
|
|
119
|
+
vars: { path: file },
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return findings;
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
// SPEC §5.7 core/arch-module-size: a module over its file or line limit
|
|
127
|
+
// flags.
|
|
128
|
+
export function resolveArchModuleSize(decl, rule, ports) {
|
|
129
|
+
const binding = bindRule(rule);
|
|
130
|
+
const maxFiles = limitOf(binding, "maxFiles", 80);
|
|
131
|
+
const maxLines = limitOf(binding, "maxLines", 8000);
|
|
132
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
133
|
+
const findings = [];
|
|
134
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
135
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
136
|
+
if (text === undefined) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const markers = parseMarkers(text);
|
|
140
|
+
const files = parseMarkerInt(markers, "files");
|
|
141
|
+
const lines = parseMarkerInt(markers, "lines");
|
|
142
|
+
if ((files !== undefined && files > maxFiles) ||
|
|
143
|
+
(lines !== undefined && lines > maxLines)) {
|
|
144
|
+
findings.push(findingFor(binding, {
|
|
145
|
+
path: file,
|
|
146
|
+
message: `module over its size limit in ${file}`,
|
|
147
|
+
vars: {
|
|
148
|
+
path: file,
|
|
149
|
+
limit: `${String(maxFiles)}/${String(maxLines)}`,
|
|
150
|
+
},
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return findings;
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
function isTsconfigShape(value) {
|
|
158
|
+
if (!isRecord(value)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
const { compilerOptions } = value;
|
|
162
|
+
return compilerOptions === undefined || isRecord(compilerOptions);
|
|
163
|
+
}
|
|
164
|
+
function isStrictTsconfig(text) {
|
|
165
|
+
const parsed = parseJson(text);
|
|
166
|
+
if (!parsed.ok || !isTsconfigShape(parsed.value)) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
return parsed.value.compilerOptions?.strict === true;
|
|
170
|
+
}
|
|
171
|
+
export function resolveCompilerStrict(decl, rule, ports) {
|
|
172
|
+
const binding = bindRule(rule);
|
|
173
|
+
return ok(baseEnforcer(rule, binding, decl, async (ctx) => {
|
|
174
|
+
const findings = [];
|
|
175
|
+
for (const file of selectFiles(ctx.scope.files, binding.scopeGlobs)) {
|
|
176
|
+
if (!file.endsWith("tsconfig.json")) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const text = await loadScopeText(ports, binding, file, findings);
|
|
180
|
+
if (text === undefined) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (!isStrictTsconfig(text)) {
|
|
184
|
+
findings.push(findingFor(binding, {
|
|
185
|
+
path: file,
|
|
186
|
+
message: `strict mode off in ${file}`,
|
|
187
|
+
vars: { path: file },
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return findings;
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CdxError, Fs, Result } from "../../../kernel/index.ts";
|
|
2
|
+
import { type Finding, type Trigger } from "../../engine/index.ts";
|
|
3
|
+
import type { PackRule } from "../index.ts";
|
|
4
|
+
export interface RuleBinding {
|
|
5
|
+
readonly ruleId: string;
|
|
6
|
+
readonly triggers: ReadonlyArray<Trigger>;
|
|
7
|
+
readonly scopeGlobs: ReadonlyArray<string>;
|
|
8
|
+
readonly remediation: string;
|
|
9
|
+
readonly tunables: Readonly<Record<string, unknown>>;
|
|
10
|
+
}
|
|
11
|
+
export declare function isTestPath(path: string): boolean;
|
|
12
|
+
export declare function isLockfilePath(path: string): boolean;
|
|
13
|
+
export declare function bindRule(rule: PackRule): RuleBinding;
|
|
14
|
+
export declare function tunableNumber(binding: RuleBinding, name: string): number | undefined;
|
|
15
|
+
export declare function tunableStringList(binding: RuleBinding, name: string): Array<string> | undefined;
|
|
16
|
+
export declare function selectFiles(scopeFiles: ReadonlyArray<string>, scopeGlobs: ReadonlyArray<string>): Array<string>;
|
|
17
|
+
export declare function fillRemediation(template: string, vars: Readonly<Record<string, string>>): string;
|
|
18
|
+
export declare function findingFor(binding: RuleBinding, init: Omit<Finding, "ruleId" | "remediation"> & {
|
|
19
|
+
readonly vars?: Readonly<Record<string, string>>;
|
|
20
|
+
}): Finding;
|
|
21
|
+
export declare function readErrorFinding(binding: RuleBinding, path: string, error: CdxError, detail: string): Finding;
|
|
22
|
+
export declare function readLossyText(fs: Fs, path: string): Promise<Result<{
|
|
23
|
+
readonly bytes: number;
|
|
24
|
+
readonly text: string;
|
|
25
|
+
}>>;
|
|
26
|
+
export declare function bindingError(declId: string, detail: string): Result<never>;
|
|
27
|
+
export declare function isUnboundArgs(args: unknown): boolean;
|
|
28
|
+
export declare function argsRecord(declId: string, args: unknown): Result<Record<string, unknown>>;
|
|
29
|
+
export declare function nonEmptyString(value: unknown): value is string;
|
|
30
|
+
export declare function stringList(value: unknown): Array<string> | undefined;
|
|
31
|
+
export declare function nonNegativeInteger(value: unknown): value is number;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { cachedLossyText, err, globMatch, makeError, ok, } from "../../../kernel/index.js";
|
|
2
|
+
import { TRIGGERS } from "../../engine/index.js";
|
|
3
|
+
import { field, isRecord } from "../manifest.js";
|
|
4
|
+
function isTrigger(value) {
|
|
5
|
+
for (const trigger of TRIGGERS) {
|
|
6
|
+
if (trigger === value) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
// SPEC §3.1 + §5.6: the size and placement rules treat test trees as
|
|
13
|
+
// non-production code, so the size enforcers skip them. Lockfiles and
|
|
14
|
+
// fixture data are generated or test vectors, governed by dep-lockfile and
|
|
15
|
+
// the pack self-test instead.
|
|
16
|
+
const TEST_PATH_GLOBS = [
|
|
17
|
+
"**/tests/**",
|
|
18
|
+
"**/test/**",
|
|
19
|
+
"**/__tests__/**",
|
|
20
|
+
"**/*.test.*",
|
|
21
|
+
];
|
|
22
|
+
const LOCKFILE_BASENAMES = new Set([
|
|
23
|
+
"package-lock.json",
|
|
24
|
+
"pnpm-lock.yaml",
|
|
25
|
+
"yarn.lock",
|
|
26
|
+
"packages.lock.json",
|
|
27
|
+
"Cargo.lock",
|
|
28
|
+
"poetry.lock",
|
|
29
|
+
"uv.lock",
|
|
30
|
+
"Gemfile.lock",
|
|
31
|
+
"composer.lock",
|
|
32
|
+
"go.sum",
|
|
33
|
+
]);
|
|
34
|
+
export function isTestPath(path) {
|
|
35
|
+
return TEST_PATH_GLOBS.some((glob) => globMatch(glob, path));
|
|
36
|
+
}
|
|
37
|
+
export function isLockfilePath(path) {
|
|
38
|
+
const slash = path.replaceAll("\\", "/").lastIndexOf("/");
|
|
39
|
+
const base = slash < 0 ? path : path.slice(slash + 1);
|
|
40
|
+
return LOCKFILE_BASENAMES.has(base);
|
|
41
|
+
}
|
|
42
|
+
// SPEC §4.4.3 step 4: the binding keeps the rule's own triggers, scope and
|
|
43
|
+
// tunable defaults; config-layer tightening applies them later (phase 4).
|
|
44
|
+
export function bindRule(rule) {
|
|
45
|
+
const triggers = [];
|
|
46
|
+
for (const trigger of rule.triggers ?? []) {
|
|
47
|
+
if (isTrigger(trigger)) {
|
|
48
|
+
triggers.push(trigger);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const tunables = {};
|
|
52
|
+
for (const [name, param] of Object.entries(rule.params ?? {})) {
|
|
53
|
+
if (isRecord(param)) {
|
|
54
|
+
tunables[name] = field(param, "default");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
ruleId: rule.id,
|
|
59
|
+
triggers,
|
|
60
|
+
scopeGlobs: [...(rule.scope ?? [])],
|
|
61
|
+
remediation: rule.remediation,
|
|
62
|
+
tunables,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function tunableNumber(binding, name) {
|
|
66
|
+
const value = binding.tunables[name];
|
|
67
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
export function tunableStringList(binding, name) {
|
|
73
|
+
const value = binding.tunables[name];
|
|
74
|
+
if (Array.isArray(value) &&
|
|
75
|
+
value.every((entry) => typeof entry === "string")) {
|
|
76
|
+
return [...value];
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
// SPEC §4.3.3 step 1: an empty rule scope selects every trigger-scoped
|
|
81
|
+
// file; otherwise a file must match at least one rule glob. Sorted, so the
|
|
82
|
+
// enforcer order never depends on the trigger's arrival order (§4.3.6).
|
|
83
|
+
export function selectFiles(scopeFiles, scopeGlobs) {
|
|
84
|
+
const sorted = [...scopeFiles].sort();
|
|
85
|
+
if (scopeGlobs.length === 0) {
|
|
86
|
+
return sorted;
|
|
87
|
+
}
|
|
88
|
+
return sorted.filter((file) => scopeGlobs.some((glob) => globMatch(glob, file)));
|
|
89
|
+
}
|
|
90
|
+
// SPEC §7.3: remediation placeholders fill from the finding; a placeholder
|
|
91
|
+
// with no value stays literal rather than inventing text.
|
|
92
|
+
export function fillRemediation(template, vars) {
|
|
93
|
+
let out = template;
|
|
94
|
+
for (const key of Object.keys(vars)) {
|
|
95
|
+
const value = vars[key];
|
|
96
|
+
if (typeof value !== "string") {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
out = out.split(`{${key}}`).join(value);
|
|
100
|
+
}
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
export function findingFor(binding, init) {
|
|
104
|
+
const { vars, ...rest } = init;
|
|
105
|
+
return {
|
|
106
|
+
...rest,
|
|
107
|
+
ruleId: binding.ruleId,
|
|
108
|
+
remediation: fillRemediation(binding.remediation, vars ?? {}),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Fail-closed reads: no file content in the message (§9.2); the engine
|
|
112
|
+
// keeps CDX-E findings unwaived and blocking (§4.3.4, §4.3.8).
|
|
113
|
+
export function readErrorFinding(binding, path, error, detail) {
|
|
114
|
+
return findingFor(binding, {
|
|
115
|
+
path,
|
|
116
|
+
code: error.code,
|
|
117
|
+
message: `the guard could not ${detail} ${path}; the code was not judged`,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// One port read for every parametric kind: bytes for sizes, lossy text for
|
|
121
|
+
// patterns. Lossy decoding never fails on binary input, so only I/O errors
|
|
122
|
+
// fail closed; determinism comes from the port, never the content. The
|
|
123
|
+
// decode is shared per evaluation through the kernel cache (SPEC §4.3.6),
|
|
124
|
+
// so N guards over one file pay one read and one decode, not N of each.
|
|
125
|
+
export async function readLossyText(fs, path) {
|
|
126
|
+
return cachedLossyText(fs, path);
|
|
127
|
+
}
|
|
128
|
+
// Shared pack-author arg narrowing: every kind takes an args object, and
|
|
129
|
+
// malformed args fail the load (CDX-E203) before any check runs. An absent
|
|
130
|
+
// or empty args object means the pack declares no binding: the resolver
|
|
131
|
+
// defers the decl (fail-closed E901) instead of failing the whole load, so
|
|
132
|
+
// frozen manifests keep loading while unbound enforcers stay inert.
|
|
133
|
+
export function bindingError(declId, detail) {
|
|
134
|
+
return err(makeError("CDX-E203", `pack enforcer "${declId}" ${detail}`, "Fix the enforcer args so they match SPEC §4.4.6, then reload the pack."));
|
|
135
|
+
}
|
|
136
|
+
export function isUnboundArgs(args) {
|
|
137
|
+
return (args === undefined || (isRecord(args) && Object.keys(args).length === 0));
|
|
138
|
+
}
|
|
139
|
+
export function argsRecord(declId, args) {
|
|
140
|
+
if (!isRecord(args)) {
|
|
141
|
+
return bindingError(declId, "needs an args object for its §4.4.6 kind");
|
|
142
|
+
}
|
|
143
|
+
return ok(args);
|
|
144
|
+
}
|
|
145
|
+
export function nonEmptyString(value) {
|
|
146
|
+
return typeof value === "string" && value.length > 0;
|
|
147
|
+
}
|
|
148
|
+
export function stringList(value) {
|
|
149
|
+
if (Array.isArray(value) &&
|
|
150
|
+
value.every((entry) => typeof entry === "string")) {
|
|
151
|
+
return [...value];
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
export function nonNegativeInteger(value) {
|
|
156
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
157
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Ports } from "../../../kernel/index.ts";
|
|
2
|
+
import { type Result } from "../../../kernel/index.ts";
|
|
3
|
+
import type { Enforcer } from "../../engine/index.ts";
|
|
4
|
+
import type { PackRule } from "../index.ts";
|
|
5
|
+
import type { EnforcerDecl } from "../manifest.ts";
|
|
6
|
+
export declare function resolveCiPresent(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
7
|
+
export declare function resolveCiActionsPinned(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
8
|
+
export declare function resolveBranchProtection(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
9
|
+
export declare function resolveCiRequiredCheck(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|
|
10
|
+
export declare function resolveConventionalCommit(decl: EnforcerDecl, rule: PackRule, ports: Ports): Result<Enforcer>;
|