codictator 0.0.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +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,12 @@
|
|
|
1
|
+
import type { CdxError, Result } from "../kernel/index.ts";
|
|
2
|
+
export interface CliOptions {
|
|
3
|
+
readonly argv: ReadonlyArray<string>;
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly stdinText?: string;
|
|
6
|
+
readonly nodeVersion?: string;
|
|
7
|
+
readonly engineVersion?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runHook(options: CliOptions): Promise<number>;
|
|
10
|
+
export declare function runCommand(options: CliOptions): Promise<Result<number>>;
|
|
11
|
+
export declare function runServer(options: CliOptions): Promise<number>;
|
|
12
|
+
export type { CdxError };
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// SPEC §4.19: composition root. Commands, hook entry, server. May import
|
|
2
|
+
// everything (§3.3); owns no §7 format.
|
|
3
|
+
import { HOOK_PAYLOAD_MAX_BYTES, hookBudgetMs, runHookEvent, staticBlock, supportedHarness, } from "../features/adapters/index.js";
|
|
4
|
+
import { appendEvent } from "../features/audit/index.js";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { err, NodeEnv, NodeFs, NodeGit, NodeNet, NodeProc, ok, readStdinText, SystemClock, } from "../kernel/index.js";
|
|
7
|
+
import { COMMANDS, USAGE } from "./commands.js";
|
|
8
|
+
import { loadEvalEnforcers } from "./evaluate.js";
|
|
9
|
+
import { startStdioServer } from "./serve-server.js";
|
|
10
|
+
import { MIN_NODE_MAJOR, nodeMajor, nodeTooOldMessage, printHuman, usageError, } from "./shared.js";
|
|
11
|
+
// SPEC §4.19.3 steps 3 and 5: the verdict line lands in the resolved repo's
|
|
12
|
+
// event log. An append failure is the engine's CDX-E801 path, never a throw
|
|
13
|
+
// here, so writer faults stay fail-closed without crashing the hook.
|
|
14
|
+
// SPEC §4.1.1: the Fs is already confined to root, so the logical root is
|
|
15
|
+
// "." and every audit path stays repo-relative.
|
|
16
|
+
async function appendLine(root, event, ports) {
|
|
17
|
+
const fsMade = await NodeFs.create({ root });
|
|
18
|
+
if (!fsMade.ok) {
|
|
19
|
+
return fsMade;
|
|
20
|
+
}
|
|
21
|
+
return appendEvent({
|
|
22
|
+
fs: fsMade.value,
|
|
23
|
+
proc: ports.proc,
|
|
24
|
+
net: ports.net,
|
|
25
|
+
clock: ports.clock,
|
|
26
|
+
git: new NodeGit(ports.proc, root),
|
|
27
|
+
env: ports.env,
|
|
28
|
+
}, ".", event);
|
|
29
|
+
}
|
|
30
|
+
// The old-node rejection: a static block when the harness has one,
|
|
31
|
+
// stderr plus exit 6 otherwise.
|
|
32
|
+
function oldNodeExit(harness, version) {
|
|
33
|
+
const staticReply = harness === ""
|
|
34
|
+
? undefined
|
|
35
|
+
: staticBlock(harness, "CDX-E002", nodeTooOldMessage(version));
|
|
36
|
+
if (staticReply === undefined) {
|
|
37
|
+
process.stderr.write(`${nodeTooOldMessage(version)}\n`);
|
|
38
|
+
return 6;
|
|
39
|
+
}
|
|
40
|
+
return emitReply(staticReply.stdout, staticReply.stderr, staticReply.exitCode);
|
|
41
|
+
}
|
|
42
|
+
// A failed stdin wait fails closed: a static block when the harness has
|
|
43
|
+
// one, stderr plus exit 1 otherwise.
|
|
44
|
+
function blockedStdinExit(harness, code, message) {
|
|
45
|
+
const blocked = staticBlock(harness, code, message);
|
|
46
|
+
if (blocked === undefined) {
|
|
47
|
+
process.stderr.write(`${code} ${message}\n`);
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
return emitReply(blocked.stdout, blocked.stderr, blocked.exitCode);
|
|
51
|
+
}
|
|
52
|
+
// The hook invocation resolves its stdin first: an idle pipe fails closed
|
|
53
|
+
// with CDX-E902 instead of hanging past the time limit (§4.5.5), while an
|
|
54
|
+
// unknown harness never had a payload and answers without I/O.
|
|
55
|
+
async function invokeHookEvent(harness, event, stdinText, cwd, ports, append, engineVersion) {
|
|
56
|
+
let text = stdinText;
|
|
57
|
+
if (text === undefined && supportedHarness(harness)) {
|
|
58
|
+
const stdin = await readStdinText(HOOK_PAYLOAD_MAX_BYTES, hookBudgetMs(harness));
|
|
59
|
+
if (!stdin.ok) {
|
|
60
|
+
return blockedStdinExit(harness, stdin.error.code, stdin.error.message);
|
|
61
|
+
}
|
|
62
|
+
text = stdin.value;
|
|
63
|
+
}
|
|
64
|
+
const reply = await runHookEvent({
|
|
65
|
+
harness,
|
|
66
|
+
event,
|
|
67
|
+
stdinText: text ?? "",
|
|
68
|
+
cwd,
|
|
69
|
+
ports,
|
|
70
|
+
append,
|
|
71
|
+
engineVersion,
|
|
72
|
+
// SPEC §4.19.3 step 5: the hook evaluates the same pack enforcers
|
|
73
|
+
// the verify path loads (core plus the configured builtin packs),
|
|
74
|
+
// resolved against the runtime's root-confined ports.
|
|
75
|
+
loadEnforcers: loadEvalEnforcers,
|
|
76
|
+
});
|
|
77
|
+
return emitReply(reply.stdout, reply.stderr, reply.exitCode);
|
|
78
|
+
}
|
|
79
|
+
function emitReply(stdout, stderr, exitCode) {
|
|
80
|
+
if (stdout !== "") {
|
|
81
|
+
process.stdout.write(stdout);
|
|
82
|
+
}
|
|
83
|
+
if (stderr !== "") {
|
|
84
|
+
process.stderr.write(stderr);
|
|
85
|
+
}
|
|
86
|
+
return exitCode;
|
|
87
|
+
}
|
|
88
|
+
// SPEC §4.19.3: hook runtime entry; an uncaught error becomes a block. The
|
|
89
|
+
// reply goes to stdout verbatim (the harness parses it; golden EC-14 pins
|
|
90
|
+
// stdout exactly), diagnostics to stderr, and the harness exit code returns.
|
|
91
|
+
// Nothing reads the disk before the runtime resolves the repo root, so
|
|
92
|
+
// unknown harnesses and empty payloads answer without I/O.
|
|
93
|
+
export async function runHook(options) {
|
|
94
|
+
const harness = options.argv[1] ?? "";
|
|
95
|
+
const event = options.argv[2] ?? "";
|
|
96
|
+
const version = options.nodeVersion ?? process.version;
|
|
97
|
+
if (nodeMajor(version) < MIN_NODE_MAJOR) {
|
|
98
|
+
return oldNodeExit(harness, version);
|
|
99
|
+
}
|
|
100
|
+
const ports = {
|
|
101
|
+
proc: new NodeProc(),
|
|
102
|
+
net: new NodeNet(),
|
|
103
|
+
clock: new SystemClock(),
|
|
104
|
+
env: new NodeEnv(),
|
|
105
|
+
};
|
|
106
|
+
const append = (root, line) => appendLine(root, line, ports);
|
|
107
|
+
return invokeHookEvent(harness, event, options.stdinText, options.cwd, ports, append, options.engineVersion ?? ENGINE_VERSION);
|
|
108
|
+
}
|
|
109
|
+
function scanGlobals(argv, cwd) {
|
|
110
|
+
let json = false;
|
|
111
|
+
let quiet = false;
|
|
112
|
+
let help = false;
|
|
113
|
+
let override;
|
|
114
|
+
const rest = [];
|
|
115
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
116
|
+
const token = argv[index] ?? "";
|
|
117
|
+
if (token === "--json") {
|
|
118
|
+
json = true;
|
|
119
|
+
}
|
|
120
|
+
else if (token === "--quiet") {
|
|
121
|
+
quiet = true;
|
|
122
|
+
}
|
|
123
|
+
else if (token === "--help" || token === "-h") {
|
|
124
|
+
help = true;
|
|
125
|
+
}
|
|
126
|
+
else if (token === "--cwd") {
|
|
127
|
+
const next = argv[index + 1];
|
|
128
|
+
if (next === undefined) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
override = next;
|
|
132
|
+
index += 1;
|
|
133
|
+
}
|
|
134
|
+
else if (token.startsWith("--cwd=")) {
|
|
135
|
+
override = token.slice("--cwd=".length);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
rest.push(token);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { json, quiet, cwd: override ?? cwd, help, rest };
|
|
142
|
+
}
|
|
143
|
+
// SPEC §4.19 + §8.2: the command entry. The node floor fails as CDX-E002
|
|
144
|
+
// (exit 6); unknown commands or flags are usage errors (exit 2, no code).
|
|
145
|
+
async function runCommandImpl(options) {
|
|
146
|
+
const version = options.nodeVersion ?? process.version;
|
|
147
|
+
if (nodeMajor(version) < MIN_NODE_MAJOR) {
|
|
148
|
+
process.stderr.write(`${nodeTooOldMessage(version)}\n`);
|
|
149
|
+
return err({
|
|
150
|
+
code: "CDX-E002",
|
|
151
|
+
message: nodeTooOldMessage(version),
|
|
152
|
+
remediation: "Install a newer Node, then retry the tool call.",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const globals = scanGlobals(options.argv, options.cwd);
|
|
156
|
+
if (globals === undefined) {
|
|
157
|
+
return usageError(USAGE);
|
|
158
|
+
}
|
|
159
|
+
if (globals.help) {
|
|
160
|
+
printHuman(USAGE, globals.quiet);
|
|
161
|
+
return ok(0);
|
|
162
|
+
}
|
|
163
|
+
if (globals.rest.length === 0) {
|
|
164
|
+
return usageError(USAGE);
|
|
165
|
+
}
|
|
166
|
+
const [command, ...args] = globals.rest;
|
|
167
|
+
const handler = COMMANDS[command];
|
|
168
|
+
if (handler === undefined) {
|
|
169
|
+
return usageError(`${USAGE}\nunknown command "${command}"`);
|
|
170
|
+
}
|
|
171
|
+
return handler({
|
|
172
|
+
args,
|
|
173
|
+
json: globals.json,
|
|
174
|
+
quiet: globals.quiet,
|
|
175
|
+
cwd: globals.cwd,
|
|
176
|
+
nodeVersion: options.nodeVersion,
|
|
177
|
+
stdinText: undefined,
|
|
178
|
+
engineVersion: options.engineVersion ?? ENGINE_VERSION,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// SPEC §4.19: command dispatch (init, regen, verify, task, review, ...).
|
|
182
|
+
// The hook word routes back through the hook runtime; every other word
|
|
183
|
+
// goes through the command table in commands.ts. The hook reply is already emitted
|
|
184
|
+
// by runHook, so its harness exit code passes through as the value.
|
|
185
|
+
export function runCommand(options) {
|
|
186
|
+
if (options.argv[0] === "hook") {
|
|
187
|
+
return runHook(options).then((exitCode) => ({ ok: true, value: exitCode }));
|
|
188
|
+
}
|
|
189
|
+
return runCommandImpl(options);
|
|
190
|
+
}
|
|
191
|
+
// SPEC §7.15 + §4.19.5: stdio server entry for the vscode extension. The
|
|
192
|
+
// loop serves one NDJSON session on this process's stdio; commands run
|
|
193
|
+
// through the same table with per-call output capture (see serve-run.ts),
|
|
194
|
+
// so frames stay the only stdout bytes. A closed stdin (no piped client)
|
|
195
|
+
// exits 0 without serving.
|
|
196
|
+
export function runServer(options) {
|
|
197
|
+
return startStdioServer(options, runCommand);
|
|
198
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Result } from "../kernel/index.ts";
|
|
2
|
+
import { guardrailPlan } from "./plan.ts";
|
|
3
|
+
import type { CommandRequest } from "./shared.ts";
|
|
4
|
+
export interface InitFlags {
|
|
5
|
+
readonly harnesses: Array<string>;
|
|
6
|
+
readonly profile: string;
|
|
7
|
+
readonly packs: Array<string>;
|
|
8
|
+
readonly tools: Array<{
|
|
9
|
+
role: string;
|
|
10
|
+
command: string;
|
|
11
|
+
pin: string;
|
|
12
|
+
}>;
|
|
13
|
+
readonly repair: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function ensureBaseline(root: string, req: CommandRequest): Promise<Result<boolean>>;
|
|
16
|
+
export declare function defaultHarnesses(flags: InitFlags): Array<string>;
|
|
17
|
+
export declare function reportExisting(req: CommandRequest, root: string): Result<number>;
|
|
18
|
+
export declare function checkFreshConfig(root: string, req: CommandRequest): Promise<Result<number>>;
|
|
19
|
+
export declare function emitInitResult(req: CommandRequest, root: string, written: ReadonlyArray<{
|
|
20
|
+
path: string;
|
|
21
|
+
}>, baselineWritten: boolean): Result<number>;
|
|
22
|
+
export declare function initPreamble(req: CommandRequest): Promise<string | Result<number>>;
|
|
23
|
+
export declare function buildGuardrailPlan(root: string, flags: InitFlags, planned: ReadonlyArray<string>, engineVersion?: string): Promise<ReturnType<typeof guardrailPlan>>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// SPEC §4.13.1 + §4.14.1: init execution. Split from the init command
|
|
2
|
+
// (init.ts) by responsibility: flag parsing stays on the command, module
|
|
3
|
+
// detection, baseline, guards and plan assembly live here.
|
|
4
|
+
import { CODICTATOR_MODULES } from "../features/arch/index.js";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { captureBaseline } from "../features/remediation/index.js";
|
|
7
|
+
import { ok, parseJson, resolveRepoRoot, stableStringify, } from "../kernel/index.js";
|
|
8
|
+
import { buildHelperTool, guardrailPlan } from "./plan.js";
|
|
9
|
+
import { checkHuman, commandEnv, fail, loadRepoConfig, printHuman, printJson, readStateText, writeStateText, } from "./shared.js";
|
|
10
|
+
// SPEC §4.19.2: a helper tool proposal names the helper role, the binary
|
|
11
|
+
// and the exact pin from the human's registry lookup: role=command@pin.
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
// SPEC §4.11.2 + §3.3: on the Codictator repo itself, init proposes the
|
|
16
|
+
// canonical module map the arch guard dogfoods (profiles.ts), rewritten to
|
|
17
|
+
// repo-relative paths. Any other repo gets no modules; the human adds them.
|
|
18
|
+
async function detectCodictatorModules(root) {
|
|
19
|
+
const text = await readStateText(root, "packages/codictator/package.json");
|
|
20
|
+
if (text === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const parsed = parseJson(text);
|
|
24
|
+
if (!parsed.ok || !isRecord(parsed.value)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const nameKey = "name";
|
|
28
|
+
if (parsed.value[nameKey] !== "codictator") {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return CODICTATOR_MODULES.map((mod) => ({
|
|
32
|
+
name: mod.name,
|
|
33
|
+
path: `packages/codictator/${mod.path}`,
|
|
34
|
+
...(mod.kind === undefined ? {} : { kind: mod.kind }),
|
|
35
|
+
...(mod.entry === undefined ? {} : { entry: mod.entry }),
|
|
36
|
+
dependsOn: [...mod.dependsOn],
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
// SPEC §4.13.1 step 3: init captures the baseline. On a greenfield repo the
|
|
40
|
+
// first verify has no findings, so the capture is the empty ratchet. An
|
|
41
|
+
// existing baseline (repair, L3 tighten, capture) is never overwritten.
|
|
42
|
+
export async function ensureBaseline(root, req) {
|
|
43
|
+
const existing = await readStateText(root, ".codictator/baseline.json");
|
|
44
|
+
if (existing !== undefined) {
|
|
45
|
+
return ok(false);
|
|
46
|
+
}
|
|
47
|
+
const captured = await captureBaseline(root, []);
|
|
48
|
+
if (!captured.ok) {
|
|
49
|
+
return fail("CDX-E903", captured.error.message, captured.error.remediation, req.json);
|
|
50
|
+
}
|
|
51
|
+
const saved = await writeStateText(root, ".codictator/baseline.json", `${stableStringify(captured.value)}\n`);
|
|
52
|
+
if (!saved.ok) {
|
|
53
|
+
return fail("CDX-E903", saved.error.message, saved.error.remediation, req.json);
|
|
54
|
+
}
|
|
55
|
+
return ok(true);
|
|
56
|
+
}
|
|
57
|
+
// SPEC §4.19.2: init harnesses default to every known adapter id when no
|
|
58
|
+
// --harness flag is given; unknown ids fail as CDX-E301 via config
|
|
59
|
+
// validation, never silently.
|
|
60
|
+
const DEFAULT_HARNESSES = [
|
|
61
|
+
"muse-code",
|
|
62
|
+
"universal",
|
|
63
|
+
"claude-code",
|
|
64
|
+
"copilot",
|
|
65
|
+
"codex-cli",
|
|
66
|
+
"cursor",
|
|
67
|
+
"gemini-cli",
|
|
68
|
+
"opencode",
|
|
69
|
+
];
|
|
70
|
+
export function defaultHarnesses(flags) {
|
|
71
|
+
return flags.harnesses.length > 0 ? flags.harnesses : [...DEFAULT_HARNESSES];
|
|
72
|
+
}
|
|
73
|
+
export function reportExisting(req, root) {
|
|
74
|
+
printHuman("already a Codictator repo; rerun with --repair to regenerate", req.quiet);
|
|
75
|
+
if (req.json) {
|
|
76
|
+
printJson({ initialized: false, reason: "exists", root });
|
|
77
|
+
}
|
|
78
|
+
return ok(0);
|
|
79
|
+
}
|
|
80
|
+
export async function checkFreshConfig(root, req) {
|
|
81
|
+
const fresh = await loadRepoConfig(root, undefined, req.engineVersion ?? ENGINE_VERSION);
|
|
82
|
+
if (!fresh.ok) {
|
|
83
|
+
return fail("CDX-E901", fresh.error.message, "Rerun codictator init --repair; report the mismatch.", req.json, fresh.error.detail);
|
|
84
|
+
}
|
|
85
|
+
return ok(0);
|
|
86
|
+
}
|
|
87
|
+
export function emitInitResult(req, root, written, baselineWritten) {
|
|
88
|
+
const files = baselineWritten === false
|
|
89
|
+
? written
|
|
90
|
+
: [...written, { path: ".codictator/baseline.json" }];
|
|
91
|
+
if (req.json) {
|
|
92
|
+
printJson({
|
|
93
|
+
initialized: true,
|
|
94
|
+
root,
|
|
95
|
+
files: files.map((entry) => entry.path),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
for (const entry of files) {
|
|
100
|
+
printHuman(`wrote ${entry.path}`, req.quiet);
|
|
101
|
+
}
|
|
102
|
+
printHuman("init: run npm ci, then codictator install-hooks", req.quiet);
|
|
103
|
+
}
|
|
104
|
+
return ok(0);
|
|
105
|
+
}
|
|
106
|
+
export async function initPreamble(req) {
|
|
107
|
+
const human = checkHuman(commandEnv(), []);
|
|
108
|
+
if (!human.ok) {
|
|
109
|
+
return fail("CDX-E107", human.error.message, human.error.remediation, req.json);
|
|
110
|
+
}
|
|
111
|
+
const root = await resolveRepoRoot(req.cwd);
|
|
112
|
+
if (!root.ok) {
|
|
113
|
+
return fail("CDX-E703", root.error.message, root.error.remediation, req.json);
|
|
114
|
+
}
|
|
115
|
+
return root.value;
|
|
116
|
+
}
|
|
117
|
+
// The plan assembly handleInit writes: read-only inputs in, GuardrailPlan
|
|
118
|
+
// out. Writing stays on the command so the plan builder never touches
|
|
119
|
+
// the disk.
|
|
120
|
+
export async function buildGuardrailPlan(root, flags, planned, engineVersion = ENGINE_VERSION) {
|
|
121
|
+
const agents = await readStateText(root, "AGENTS.md");
|
|
122
|
+
const repoName = root.replaceAll("\\", "/").split("/").pop() ?? "repo";
|
|
123
|
+
const modules = await detectCodictatorModules(root);
|
|
124
|
+
const architecture = modules === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: {
|
|
127
|
+
...(flags.profile === "" ? {} : { profile: flags.profile }),
|
|
128
|
+
modules,
|
|
129
|
+
};
|
|
130
|
+
return guardrailPlan(planned, flags.profile, repoName, agents, {
|
|
131
|
+
packs: flags.packs.map((id) => ({ id, version: engineVersion })),
|
|
132
|
+
tools: flags.tools.map((tool) => buildHelperTool(tool)),
|
|
133
|
+
...(architecture === undefined ? {} : { architecture }),
|
|
134
|
+
}, engineVersion);
|
|
135
|
+
}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// SPEC §4.19.2 + §4.13.1: human-only adoption. Writes config, steering
|
|
2
|
+
// block, manifest, CI workflow, hooks and launcher; existing config needs
|
|
3
|
+
// --repair, unknown harnesses fail as CDX-E301 via validation.
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { isBuiltinPackId } from "../features/packs/index.js";
|
|
7
|
+
import { buildGuardrailPlan, checkFreshConfig, defaultHarnesses, emitInitResult, ensureBaseline, initPreamble, reportExisting, } from "./init-plan.js";
|
|
8
|
+
import { KNOWN_HELPER_ROLES, writePlan } from "./plan.js";
|
|
9
|
+
import { fail, readStateText, usageError } from "./shared.js";
|
|
10
|
+
const KNOWN_PROFILES = new Set([
|
|
11
|
+
"app",
|
|
12
|
+
"library",
|
|
13
|
+
"cli",
|
|
14
|
+
"service",
|
|
15
|
+
]);
|
|
16
|
+
function parseToolSpec(spec) {
|
|
17
|
+
const eq = spec.indexOf("=");
|
|
18
|
+
if (eq < 0) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const role = spec.slice(0, eq).trim();
|
|
22
|
+
const rest = spec.slice(eq + 1);
|
|
23
|
+
const at = rest.lastIndexOf("@");
|
|
24
|
+
if (at < 0) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const command = rest.slice(0, at).trim();
|
|
28
|
+
const pin = rest.slice(at + 1).trim();
|
|
29
|
+
if (!KNOWN_HELPER_ROLES.has(role) || command === "" || pin === "") {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return { role, command, pin };
|
|
33
|
+
}
|
|
34
|
+
function narrowInitProfile(profile) {
|
|
35
|
+
if (profile !== undefined && profile !== "" && !KNOWN_PROFILES.has(profile)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return profile ?? "";
|
|
39
|
+
}
|
|
40
|
+
function narrowInitPacks(packs) {
|
|
41
|
+
const ids = [...(packs ?? [])];
|
|
42
|
+
if (ids.some((id) => !isBuiltinPackId(id))) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return ids;
|
|
46
|
+
}
|
|
47
|
+
function narrowInitTools(specs) {
|
|
48
|
+
const tools = [];
|
|
49
|
+
for (const spec of specs ?? []) {
|
|
50
|
+
const tool = parseToolSpec(spec);
|
|
51
|
+
if (tool === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
tools.push(tool);
|
|
55
|
+
}
|
|
56
|
+
return tools;
|
|
57
|
+
}
|
|
58
|
+
function parseInitFlags(args) {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = parseArgs({
|
|
61
|
+
args: [...args],
|
|
62
|
+
options: {
|
|
63
|
+
harness: { type: "string", multiple: true, default: [] },
|
|
64
|
+
profile: { type: "string", default: "" },
|
|
65
|
+
pack: { type: "string", multiple: true, default: [] },
|
|
66
|
+
tool: { type: "string", multiple: true, default: [] },
|
|
67
|
+
repair: { type: "boolean", default: false },
|
|
68
|
+
},
|
|
69
|
+
allowPositionals: true,
|
|
70
|
+
});
|
|
71
|
+
if (parsed.positionals.length > 0) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const profile = narrowInitProfile(parsed.values.profile);
|
|
75
|
+
const packs = narrowInitPacks(parsed.values.pack);
|
|
76
|
+
const tools = narrowInitTools(parsed.values.tool);
|
|
77
|
+
if (profile === undefined || packs === undefined || tools === undefined) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
harnesses: [...(parsed.values.harness ?? [])],
|
|
82
|
+
profile,
|
|
83
|
+
packs,
|
|
84
|
+
tools,
|
|
85
|
+
repair: parsed.values.repair ?? false,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const INIT_USAGE = "usage: codictator init [--harness <id> ...] [--profile <app|library|cli|service>] [--pack <id> ...] [--tool <role>=<command>@<pin> ...] [--repair]";
|
|
93
|
+
export async function handleInit(req) {
|
|
94
|
+
const flags = parseInitFlags(req.args);
|
|
95
|
+
if (flags === undefined) {
|
|
96
|
+
return usageError(INIT_USAGE);
|
|
97
|
+
}
|
|
98
|
+
const root = await initPreamble(req);
|
|
99
|
+
if (typeof root !== "string") {
|
|
100
|
+
return root;
|
|
101
|
+
}
|
|
102
|
+
const planned = defaultHarnesses(flags);
|
|
103
|
+
const engineVersion = req.engineVersion ?? ENGINE_VERSION;
|
|
104
|
+
const existing = await readStateText(root, ".codictator/config.json");
|
|
105
|
+
if (existing !== undefined && !flags.repair) {
|
|
106
|
+
return reportExisting(req, root);
|
|
107
|
+
}
|
|
108
|
+
const plan = await buildGuardrailPlan(root, flags, planned, engineVersion);
|
|
109
|
+
const wrote = await writePlan(root, plan, engineVersion);
|
|
110
|
+
if (!wrote.ok) {
|
|
111
|
+
return fail("CDX-E903", wrote.error.message, wrote.error.remediation, req.json);
|
|
112
|
+
}
|
|
113
|
+
const fresh = await checkFreshConfig(root, req);
|
|
114
|
+
if (!fresh.ok) {
|
|
115
|
+
return fresh;
|
|
116
|
+
}
|
|
117
|
+
const baseline = await ensureBaseline(root, req);
|
|
118
|
+
if (!baseline.ok) {
|
|
119
|
+
return fail(baseline.error.code, baseline.error.message, baseline.error.remediation, req.json);
|
|
120
|
+
}
|
|
121
|
+
return emitInitResult(req, root, wrote.value, baseline.value);
|
|
122
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EventLogLine } from "../features/audit/index.ts";
|
|
2
|
+
import type { Result } from "../kernel/index.ts";
|
|
3
|
+
import type { CommandRequest } from "./shared.ts";
|
|
4
|
+
export declare function readLogEvents(root: string): Promise<{
|
|
5
|
+
events: ReadonlyArray<EventLogLine>;
|
|
6
|
+
corrupt: number;
|
|
7
|
+
} | undefined>;
|
|
8
|
+
export declare function handleStatus(req: CommandRequest): Promise<Result<number>>;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// SPEC §4.18.3: the status screen. Split from the verify command
|
|
2
|
+
// (inspect.ts) by responsibility: read-only screen here, trigger evaluation
|
|
3
|
+
// there. The event log, config and ports stay caller-owned.
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { CLAUDE_CODE_CAPABILITIES, CODEX_CAPABILITIES, COPILOT_CAPABILITIES, MUSE_CAPABILITIES, OPENCODE_CAPABILITIES, UNIVERSAL_CAPABILITIES, } from "../features/adapters/index.js";
|
|
6
|
+
import { buildStatusJson, buildStatusText, readEvents, summarizeTokenSaverEvidence, tokenSaverHelper, } from "../features/audit/index.js";
|
|
7
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
8
|
+
import { REQUIRED_HELPERS_DEFAULT } from "../features/steering/index.js";
|
|
9
|
+
import { ok } from "../kernel/index.js";
|
|
10
|
+
import { fail, loadRepoConfig, needRoot, portsFor, printHuman, printJson, usageError, } from "./shared.js";
|
|
11
|
+
// SPEC §4.18.1: the repo's event lines through caller-owned ports against
|
|
12
|
+
// the logical root "." (the Fs port takes repo-relative paths only).
|
|
13
|
+
export async function readLogEvents(root) {
|
|
14
|
+
const ports = await portsFor(root);
|
|
15
|
+
if (!ports.ok) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const read = await readEvents(ports.value, ".");
|
|
19
|
+
return read.ok ? read.value : undefined;
|
|
20
|
+
}
|
|
21
|
+
function harnessStates(observed) {
|
|
22
|
+
const declarations = [
|
|
23
|
+
MUSE_CAPABILITIES,
|
|
24
|
+
UNIVERSAL_CAPABILITIES,
|
|
25
|
+
CLAUDE_CODE_CAPABILITIES,
|
|
26
|
+
COPILOT_CAPABILITIES,
|
|
27
|
+
CODEX_CAPABILITIES,
|
|
28
|
+
OPENCODE_CAPABILITIES,
|
|
29
|
+
];
|
|
30
|
+
return declarations.map((candidate) => ({
|
|
31
|
+
harness: candidate.harness,
|
|
32
|
+
state: observed.has(candidate.harness)
|
|
33
|
+
? "active"
|
|
34
|
+
: "unverified",
|
|
35
|
+
layers: `L0:${candidate.layers.L0} L1:${candidate.layers.L1} L2:${candidate.layers.L2} L3:${candidate.layers.L3} L4:${candidate.layers.L4} L5:${candidate.layers.L5}`,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
function isRecord(value) {
|
|
39
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
40
|
+
}
|
|
41
|
+
// SPEC §4.6.6: the required helper roles come from config.steering, falling
|
|
42
|
+
// back to the pack default; a role is present when config.tools declares it
|
|
43
|
+
// (by role or id) at an exact pin.
|
|
44
|
+
function requiredRoles(steering) {
|
|
45
|
+
if (isRecord(steering)) {
|
|
46
|
+
const key = "requiredHelpers";
|
|
47
|
+
const found = steering[key];
|
|
48
|
+
if (Array.isArray(found) &&
|
|
49
|
+
found.every((entry) => typeof entry === "string")) {
|
|
50
|
+
return [...found];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return [...REQUIRED_HELPERS_DEFAULT];
|
|
54
|
+
}
|
|
55
|
+
function matchHelper(entry, role) {
|
|
56
|
+
if (!isRecord(entry)) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const idKey = "id";
|
|
60
|
+
const roleKey = "role";
|
|
61
|
+
const versionKey = "version";
|
|
62
|
+
const pinKey = "pin";
|
|
63
|
+
const id = entry[idKey];
|
|
64
|
+
if (typeof id !== "string" || id === "") {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if (entry[roleKey] !== role && id !== role) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const version = entry[versionKey];
|
|
71
|
+
const pin = isRecord(version) ? version[pinKey] : undefined;
|
|
72
|
+
if (typeof pin === "string" && pin !== "") {
|
|
73
|
+
return { role, present: true, detail: `${id} ${pin}` };
|
|
74
|
+
}
|
|
75
|
+
return { role, present: false };
|
|
76
|
+
}
|
|
77
|
+
function helperDetail(tools, role) {
|
|
78
|
+
if (!Array.isArray(tools)) {
|
|
79
|
+
return { role, present: false };
|
|
80
|
+
}
|
|
81
|
+
for (const entry of tools) {
|
|
82
|
+
const matched = matchHelper(entry, role);
|
|
83
|
+
if (matched !== undefined) {
|
|
84
|
+
return matched;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { role, present: false };
|
|
88
|
+
}
|
|
89
|
+
async function collectStatusParts(root, engineVersion) {
|
|
90
|
+
const log = await readLogEvents(root);
|
|
91
|
+
const events = log?.events ?? [];
|
|
92
|
+
const observed = new Set(events.map((event) => event.harness ?? "").filter((h) => h !== ""));
|
|
93
|
+
const packs = {};
|
|
94
|
+
let helpers = [];
|
|
95
|
+
const configured = await loadRepoConfig(root, undefined, engineVersion);
|
|
96
|
+
if (configured.ok) {
|
|
97
|
+
for (const pack of configured.value.effective.config.packs) {
|
|
98
|
+
packs[pack.id] =
|
|
99
|
+
typeof pack.version === "string" ? pack.version : "unpinned";
|
|
100
|
+
}
|
|
101
|
+
helpers = requiredRoles(configured.value.effective.config.steering).map((role) => helperDetail(configured.value.effective.config.tools, role));
|
|
102
|
+
// SPEC §4.6.6 + §4.18.3: the token-saver role is satisfied by the
|
|
103
|
+
// engine itself, so with no external pin the row carries live
|
|
104
|
+
// evidence instead of probing a binary. All-absent evidence reads
|
|
105
|
+
// missing: a finding, not a pass.
|
|
106
|
+
helpers = helpers.map((helper) => helper.role === "token-saver" && !helper.present
|
|
107
|
+
? tokenSaverHelper(summarizeTokenSaverEvidence(events))
|
|
108
|
+
: helper);
|
|
109
|
+
}
|
|
110
|
+
return { events, corrupt: log?.corrupt ?? 0, observed, packs, helpers };
|
|
111
|
+
}
|
|
112
|
+
function terseArgs(args, count) {
|
|
113
|
+
try {
|
|
114
|
+
const parsed = parseArgs({
|
|
115
|
+
args: [...args],
|
|
116
|
+
options: {},
|
|
117
|
+
allowPositionals: true,
|
|
118
|
+
});
|
|
119
|
+
return parsed.positionals.length === count;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// SPEC §4.18.3: one screen with engine, packs, harness states, task, waivers,
|
|
126
|
+
// ratchet, deps, integrity, escalations and remediation progress.
|
|
127
|
+
export async function handleStatus(req) {
|
|
128
|
+
if (!terseArgs(req.args, 0)) {
|
|
129
|
+
return usageError("usage: codictator status");
|
|
130
|
+
}
|
|
131
|
+
const root = await needRoot(req);
|
|
132
|
+
if (typeof root !== "string") {
|
|
133
|
+
return root;
|
|
134
|
+
}
|
|
135
|
+
const ports = await portsFor(root);
|
|
136
|
+
if (!ports.ok) {
|
|
137
|
+
return fail("CDX-E903", ports.error.message, ports.error.remediation, req.json);
|
|
138
|
+
}
|
|
139
|
+
const parts = await collectStatusParts(root, req.engineVersion ?? ENGINE_VERSION);
|
|
140
|
+
const input = {
|
|
141
|
+
engineVersion: req.engineVersion ?? ENGINE_VERSION,
|
|
142
|
+
packs: parts.packs,
|
|
143
|
+
harnesses: harnessStates(parts.observed),
|
|
144
|
+
helpers: parts.helpers,
|
|
145
|
+
events: parts.events.length,
|
|
146
|
+
corrupt: parts.corrupt,
|
|
147
|
+
gap: parts.events.length === 0,
|
|
148
|
+
task: undefined,
|
|
149
|
+
waivers: undefined,
|
|
150
|
+
ratchet: undefined,
|
|
151
|
+
deps: undefined,
|
|
152
|
+
integrity: undefined,
|
|
153
|
+
escalations: undefined,
|
|
154
|
+
remediation: undefined,
|
|
155
|
+
now: ports.value.clock.now(),
|
|
156
|
+
};
|
|
157
|
+
if (req.json) {
|
|
158
|
+
printJson(buildStatusJson(input));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
printHuman(buildStatusText(input), req.quiet);
|
|
162
|
+
}
|
|
163
|
+
return ok(0);
|
|
164
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Finding, Result } from "../kernel/index.ts";
|
|
2
|
+
import type { CommandRequest } from "./shared.ts";
|
|
3
|
+
export declare function printFinding(finding: Finding, quiet: boolean): void;
|
|
4
|
+
export declare function handleVerify(req: CommandRequest): Promise<Result<number>>;
|
|
5
|
+
export { handleStatus, readLogEvents } from "./inspect-status.ts";
|