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