codictator 0.0.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +5 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/index.ts +8 -0
- package/dist/builtin-packs/core/pack.json +2057 -0
- package/dist/builtin-packs/dotnet/index.ts +47 -0
- package/dist/builtin-packs/python/extract.ts +245 -0
- package/dist/builtin-packs/python/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/passing/basic/case.json +12 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/violating/basic/case.json +11 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/index.ts +57 -0
- package/dist/builtin-packs/python/pack.json +116 -0
- package/dist/builtin-packs/typescript/extract-clauses.ts +153 -0
- package/dist/builtin-packs/typescript/extract-literals.ts +111 -0
- package/dist/builtin-packs/typescript/extract-words.ts +79 -0
- package/dist/builtin-packs/typescript/extract.ts +77 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/exported/case.json +8 -0
- package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/index.ts +85 -0
- package/dist/builtin-packs/typescript/lex.ts +199 -0
- package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
- package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
- package/dist/builtin-packs/typescript/measures.ts +10 -0
- package/dist/builtin-packs/typescript/naming.ts +47 -0
- package/dist/builtin-packs/typescript/pack.json +169 -0
- package/dist/builtin-packs/typescript/patterns.ts +93 -0
- package/dist/builtin-packs/typescript/resolve.ts +224 -0
- package/dist/builtin-packs/typescript/strict.ts +177 -0
- package/dist/builtin-packs/typescript/titles.ts +184 -0
- package/dist/cli/baseline.d.ts +3 -0
- package/dist/cli/baseline.js +67 -0
- package/dist/cli/ci-bot-change.d.ts +3 -0
- package/dist/cli/ci-bot-change.js +54 -0
- package/dist/cli/ci-range.d.ts +18 -0
- package/dist/cli/ci-range.js +228 -0
- package/dist/cli/ci-summary.d.ts +3 -0
- package/dist/cli/ci-summary.js +45 -0
- package/dist/cli/ci.d.ts +4 -0
- package/dist/cli/ci.js +195 -0
- package/dist/cli/commands.d.ts +5 -0
- package/dist/cli/commands.js +39 -0
- package/dist/cli/deps.d.ts +3 -0
- package/dist/cli/deps.js +115 -0
- package/dist/cli/drift.d.ts +11 -0
- package/dist/cli/drift.js +91 -0
- package/dist/cli/evaluate.d.ts +20 -0
- package/dist/cli/evaluate.js +213 -0
- package/dist/cli/gate-scope.d.ts +11 -0
- package/dist/cli/gate-scope.js +93 -0
- package/dist/cli/git-hook.d.ts +3 -0
- package/dist/cli/git-hook.js +184 -0
- package/dist/cli/guardrail.d.ts +5 -0
- package/dist/cli/guardrail.js +190 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.js +198 -0
- package/dist/cli/init-plan.d.ts +23 -0
- package/dist/cli/init-plan.js +135 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.js +122 -0
- package/dist/cli/inspect-status.d.ts +8 -0
- package/dist/cli/inspect-status.js +164 -0
- package/dist/cli/inspect.d.ts +5 -0
- package/dist/cli/inspect.js +98 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +60 -0
- package/dist/cli/pack-adapters.d.ts +3 -0
- package/dist/cli/pack-adapters.js +81 -0
- package/dist/cli/packs.d.ts +6 -0
- package/dist/cli/packs.js +131 -0
- package/dist/cli/plan-launcher.d.ts +2 -0
- package/dist/cli/plan-launcher.js +272 -0
- package/dist/cli/plan.d.ts +25 -0
- package/dist/cli/plan.js +121 -0
- package/dist/cli/proofs-test.d.ts +3 -0
- package/dist/cli/proofs-test.js +77 -0
- package/dist/cli/proofs.d.ts +3 -0
- package/dist/cli/proofs.js +168 -0
- package/dist/cli/remediation.d.ts +3 -0
- package/dist/cli/remediation.js +107 -0
- package/dist/cli/report.d.ts +4 -0
- package/dist/cli/report.js +93 -0
- package/dist/cli/serve-eval.d.ts +2 -0
- package/dist/cli/serve-eval.js +165 -0
- package/dist/cli/serve-log.d.ts +2 -0
- package/dist/cli/serve-log.js +150 -0
- package/dist/cli/serve-methods.d.ts +2 -0
- package/dist/cli/serve-methods.js +181 -0
- package/dist/cli/serve-protocol.d.ts +35 -0
- package/dist/cli/serve-protocol.js +97 -0
- package/dist/cli/serve-run.d.ts +9 -0
- package/dist/cli/serve-run.js +135 -0
- package/dist/cli/serve-server.d.ts +5 -0
- package/dist/cli/serve-server.js +120 -0
- package/dist/cli/serve-shared.d.ts +34 -0
- package/dist/cli/serve-shared.js +20 -0
- package/dist/cli/serve-status.d.ts +2 -0
- package/dist/cli/serve-status.js +130 -0
- package/dist/cli/serve-transport.d.ts +2 -0
- package/dist/cli/serve-transport.js +114 -0
- package/dist/cli/shared.d.ts +35 -0
- package/dist/cli/shared.js +181 -0
- package/dist/cli/task-advance.d.ts +3 -0
- package/dist/cli/task-advance.js +144 -0
- package/dist/cli/task-phases.d.ts +3 -0
- package/dist/cli/task-phases.js +77 -0
- package/dist/cli/tasks.d.ts +12 -0
- package/dist/cli/tasks.js +176 -0
- package/dist/cli/transparency.d.ts +4 -0
- package/dist/cli/transparency.js +197 -0
- package/dist/cli/waivers.d.ts +3 -0
- package/dist/cli/waivers.js +195 -0
- package/dist/features/adapters/claude-code.d.ts +8 -0
- package/dist/features/adapters/claude-code.js +198 -0
- package/dist/features/adapters/claude-shaped.d.ts +4 -0
- package/dist/features/adapters/claude-shaped.js +174 -0
- package/dist/features/adapters/codex-cli.d.ts +8 -0
- package/dist/features/adapters/codex-cli.js +180 -0
- package/dist/features/adapters/contract.d.ts +104 -0
- package/dist/features/adapters/contract.js +17 -0
- package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
- package/dist/features/adapters/copilot-capabilities.js +46 -0
- package/dist/features/adapters/copilot.d.ts +8 -0
- package/dist/features/adapters/copilot.js +200 -0
- package/dist/features/adapters/cursor.d.ts +8 -0
- package/dist/features/adapters/cursor.js +245 -0
- package/dist/features/adapters/custom-event.d.ts +3 -0
- package/dist/features/adapters/custom-event.js +180 -0
- package/dist/features/adapters/custom-load.d.ts +3 -0
- package/dist/features/adapters/custom-load.js +185 -0
- package/dist/features/adapters/custom-shape.d.ts +21 -0
- package/dist/features/adapters/custom-shape.js +87 -0
- package/dist/features/adapters/custom.d.ts +9 -0
- package/dist/features/adapters/custom.js +130 -0
- package/dist/features/adapters/effective-cache.d.ts +5 -0
- package/dist/features/adapters/effective-cache.js +45 -0
- package/dist/features/adapters/gemini-cli.d.ts +6 -0
- package/dist/features/adapters/gemini-cli.js +160 -0
- package/dist/features/adapters/gemini-tables.d.ts +7 -0
- package/dist/features/adapters/gemini-tables.js +104 -0
- package/dist/features/adapters/hook-dispatch.d.ts +7 -0
- package/dist/features/adapters/hook-dispatch.js +97 -0
- package/dist/features/adapters/hook-injection.d.ts +12 -0
- package/dist/features/adapters/hook-injection.js +75 -0
- package/dist/features/adapters/hook-load.d.ts +15 -0
- package/dist/features/adapters/hook-load.js +152 -0
- package/dist/features/adapters/hook-scope.d.ts +3 -0
- package/dist/features/adapters/hook-scope.js +54 -0
- package/dist/features/adapters/index.d.ts +22 -0
- package/dist/features/adapters/index.js +86 -0
- package/dist/features/adapters/muse-code.d.ts +8 -0
- package/dist/features/adapters/muse-code.js +223 -0
- package/dist/features/adapters/opencode-bridge.d.ts +1 -0
- package/dist/features/adapters/opencode-bridge.js +230 -0
- package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
- package/dist/features/adapters/opencode-capabilities.js +47 -0
- package/dist/features/adapters/opencode-parse.d.ts +3 -0
- package/dist/features/adapters/opencode-parse.js +137 -0
- package/dist/features/adapters/opencode-tables.d.ts +5 -0
- package/dist/features/adapters/opencode-tables.js +63 -0
- package/dist/features/adapters/opencode.d.ts +10 -0
- package/dist/features/adapters/opencode.js +97 -0
- package/dist/features/adapters/runtime.d.ts +25 -0
- package/dist/features/adapters/runtime.js +148 -0
- package/dist/features/adapters/universal.d.ts +7 -0
- package/dist/features/adapters/universal.js +89 -0
- package/dist/features/arch/arch-profiles.d.ts +3 -0
- package/dist/features/arch/arch-profiles.js +5 -0
- package/dist/features/arch/checks.d.ts +25 -0
- package/dist/features/arch/checks.js +173 -0
- package/dist/features/arch/codictator-modules.d.ts +4 -0
- package/dist/features/arch/codictator-modules.js +180 -0
- package/dist/features/arch/cycle-walk.d.ts +1 -0
- package/dist/features/arch/cycle-walk.js +36 -0
- package/dist/features/arch/edge-checks.d.ts +13 -0
- package/dist/features/arch/edge-checks.js +186 -0
- package/dist/features/arch/graph.d.ts +32 -0
- package/dist/features/arch/graph.js +202 -0
- package/dist/features/arch/index.d.ts +29 -0
- package/dist/features/arch/index.js +16 -0
- package/dist/features/arch/layer-rules.d.ts +3 -0
- package/dist/features/arch/layer-rules.js +38 -0
- package/dist/features/arch/module-map-validation.d.ts +3 -0
- package/dist/features/arch/module-map-validation.js +30 -0
- package/dist/features/arch/module-mapping.d.ts +15 -0
- package/dist/features/arch/module-mapping.js +184 -0
- package/dist/features/arch/profiles.d.ts +4 -0
- package/dist/features/arch/profiles.js +8 -0
- package/dist/features/audit/append.d.ts +26 -0
- package/dist/features/audit/append.js +210 -0
- package/dist/features/audit/explain-table-tail.d.ts +2 -0
- package/dist/features/audit/explain-table-tail.js +29 -0
- package/dist/features/audit/explain-table.d.ts +8 -0
- package/dist/features/audit/explain-table.js +48 -0
- package/dist/features/audit/explain.d.ts +7 -0
- package/dist/features/audit/explain.js +87 -0
- package/dist/features/audit/index.d.ts +37 -0
- package/dist/features/audit/index.js +17 -0
- package/dist/features/audit/injection-event.d.ts +11 -0
- package/dist/features/audit/injection-event.js +17 -0
- package/dist/features/audit/read.d.ts +8 -0
- package/dist/features/audit/read.js +62 -0
- package/dist/features/audit/summarize.d.ts +1 -0
- package/dist/features/audit/summarize.js +41 -0
- package/dist/features/audit/surfaces.d.ts +47 -0
- package/dist/features/audit/surfaces.js +172 -0
- package/dist/features/audit/token-saver-evidence.d.ts +14 -0
- package/dist/features/audit/token-saver-evidence.js +85 -0
- package/dist/features/ci/changes.d.ts +28 -0
- package/dist/features/ci/changes.js +88 -0
- package/dist/features/ci/index.d.ts +22 -0
- package/dist/features/ci/index.js +75 -0
- package/dist/features/ci/protection-read.d.ts +3 -0
- package/dist/features/ci/protection-read.js +264 -0
- package/dist/features/ci/protection.d.ts +25 -0
- package/dist/features/ci/protection.js +101 -0
- package/dist/features/ci/workflow.d.ts +23 -0
- package/dist/features/ci/workflow.js +261 -0
- package/dist/features/config/human.d.ts +4 -0
- package/dist/features/config/human.js +31 -0
- package/dist/features/config/index.d.ts +37 -0
- package/dist/features/config/index.js +129 -0
- package/dist/features/config/pack-data.d.ts +18 -0
- package/dist/features/config/pack-data.js +116 -0
- package/dist/features/config/validate-sections.d.ts +6 -0
- package/dist/features/config/validate-sections.js +198 -0
- package/dist/features/config/validate-shared.d.ts +8 -0
- package/dist/features/config/validate-shared.js +69 -0
- package/dist/features/config/validate-tunables.d.ts +1 -0
- package/dist/features/config/validate-tunables.js +89 -0
- package/dist/features/config/validate.d.ts +2 -0
- package/dist/features/config/validate.js +57 -0
- package/dist/features/deps/bots.d.ts +5 -0
- package/dist/features/deps/bots.js +39 -0
- package/dist/features/deps/capabilities.d.ts +3 -0
- package/dist/features/deps/capabilities.js +91 -0
- package/dist/features/deps/check.d.ts +18 -0
- package/dist/features/deps/check.js +70 -0
- package/dist/features/deps/dependabot.d.ts +10 -0
- package/dist/features/deps/dependabot.js +154 -0
- package/dist/features/deps/eval.d.ts +41 -0
- package/dist/features/deps/eval.js +24 -0
- package/dist/features/deps/fields.d.ts +4 -0
- package/dist/features/deps/fields.js +18 -0
- package/dist/features/deps/index.d.ts +67 -0
- package/dist/features/deps/index.js +27 -0
- package/dist/features/deps/lockfile.d.ts +8 -0
- package/dist/features/deps/lockfile.js +87 -0
- package/dist/features/deps/npm.d.ts +22 -0
- package/dist/features/deps/npm.js +187 -0
- package/dist/features/deps/npmrc.d.ts +12 -0
- package/dist/features/deps/npmrc.js +50 -0
- package/dist/features/deps/nuget.d.ts +25 -0
- package/dist/features/deps/nuget.js +112 -0
- package/dist/features/deps/osv-ranges.d.ts +12 -0
- package/dist/features/deps/osv-ranges.js +83 -0
- package/dist/features/deps/osv.d.ts +16 -0
- package/dist/features/deps/osv.js +144 -0
- package/dist/features/deps/pypi-pyproject.d.ts +7 -0
- package/dist/features/deps/pypi-pyproject.js +118 -0
- package/dist/features/deps/pypi.d.ts +29 -0
- package/dist/features/deps/pypi.js +137 -0
- package/dist/features/deps/registry.d.ts +29 -0
- package/dist/features/deps/registry.js +158 -0
- package/dist/features/deps/renovate.d.ts +15 -0
- package/dist/features/deps/renovate.js +98 -0
- package/dist/features/deps/selection.d.ts +20 -0
- package/dist/features/deps/selection.js +150 -0
- package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
- package/dist/features/deps/snapshot-verdicts.js +184 -0
- package/dist/features/deps/stable.d.ts +19 -0
- package/dist/features/deps/stable.js +131 -0
- package/dist/features/deps/step-size.d.ts +7 -0
- package/dist/features/deps/step-size.js +24 -0
- package/dist/features/deps/upgrade.d.ts +35 -0
- package/dist/features/deps/upgrade.js +124 -0
- package/dist/features/deps/verdicts.d.ts +21 -0
- package/dist/features/deps/verdicts.js +219 -0
- package/dist/features/engine/evaluate.d.ts +12 -0
- package/dist/features/engine/evaluate.js +170 -0
- package/dist/features/engine/index.d.ts +21 -0
- package/dist/features/engine/index.js +24 -0
- package/dist/features/engine/message.d.ts +3 -0
- package/dist/features/engine/message.js +69 -0
- package/dist/features/engine/ratchet.d.ts +1 -0
- package/dist/features/engine/ratchet.js +63 -0
- package/dist/features/engine/run-enforcer.d.ts +4 -0
- package/dist/features/engine/run-enforcer.js +82 -0
- package/dist/features/engine/waivers.d.ts +23 -0
- package/dist/features/engine/waivers.js +169 -0
- package/dist/features/generator/draft.d.ts +7 -0
- package/dist/features/generator/draft.js +148 -0
- package/dist/features/generator/index.d.ts +22 -0
- package/dist/features/generator/index.js +8 -0
- package/dist/features/generator/llm-draft.d.ts +3 -0
- package/dist/features/generator/llm-draft.js +93 -0
- package/dist/features/generator/prompt.d.ts +25 -0
- package/dist/features/generator/prompt.js +105 -0
- package/dist/features/generator/self-test.d.ts +12 -0
- package/dist/features/generator/self-test.js +65 -0
- package/dist/features/generator/templates.d.ts +26 -0
- package/dist/features/generator/templates.js +177 -0
- package/dist/features/integrity/drift.d.ts +19 -0
- package/dist/features/integrity/drift.js +168 -0
- package/dist/features/integrity/hooks.d.ts +19 -0
- package/dist/features/integrity/hooks.js +54 -0
- package/dist/features/integrity/index.d.ts +10 -0
- package/dist/features/integrity/index.js +14 -0
- package/dist/features/integrity/manifest.d.ts +15 -0
- package/dist/features/integrity/manifest.js +26 -0
- package/dist/features/integrity/self-protection.d.ts +12 -0
- package/dist/features/integrity/self-protection.js +144 -0
- package/dist/features/llm/attempt.d.ts +17 -0
- package/dist/features/llm/attempt.js +99 -0
- package/dist/features/llm/errors.d.ts +5 -0
- package/dist/features/llm/errors.js +18 -0
- package/dist/features/llm/index.d.ts +23 -0
- package/dist/features/llm/index.js +46 -0
- package/dist/features/llm/presets.d.ts +25 -0
- package/dist/features/llm/presets.js +159 -0
- package/dist/features/llm/wire.d.ts +17 -0
- package/dist/features/llm/wire.js +163 -0
- package/dist/features/packs/accept.d.ts +7 -0
- package/dist/features/packs/accept.js +73 -0
- package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/arch-guards.js +193 -0
- package/dist/features/packs/enforcers/binding.d.ts +31 -0
- package/dist/features/packs/enforcers/binding.js +157 -0
- package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/ci-guards.js +131 -0
- package/dist/features/packs/enforcers/code-health.d.ts +9 -0
- package/dist/features/packs/enforcers/code-health.js +180 -0
- package/dist/features/packs/enforcers/code.d.ts +5 -0
- package/dist/features/packs/enforcers/code.js +129 -0
- package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
- package/dist/features/packs/enforcers/command-forbid.js +61 -0
- package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
- package/dist/features/packs/enforcers/deps-guards.js +235 -0
- package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
- package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
- package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
- package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
- package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/docs-guards.js +180 -0
- package/dist/features/packs/enforcers/engine-version-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/engine-version-guards.js +42 -0
- package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
- package/dist/features/packs/enforcers/external-attribute.js +122 -0
- package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
- package/dist/features/packs/enforcers/external-bind.js +206 -0
- package/dist/features/packs/enforcers/external-check.d.ts +7 -0
- package/dist/features/packs/enforcers/external-check.js +131 -0
- package/dist/features/packs/enforcers/external-output.d.ts +30 -0
- package/dist/features/packs/enforcers/external-output.js +144 -0
- package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
- package/dist/features/packs/enforcers/external-probe.js +65 -0
- package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
- package/dist/features/packs/enforcers/external-runs.js +162 -0
- package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
- package/dist/features/packs/enforcers/external-sarif.js +109 -0
- package/dist/features/packs/enforcers/external.d.ts +39 -0
- package/dist/features/packs/enforcers/external.js +11 -0
- package/dist/features/packs/enforcers/gate-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/gate-guards.js +117 -0
- package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
- package/dist/features/packs/enforcers/health-abstraction.js +126 -0
- package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
- package/dist/features/packs/enforcers/health-duplication.js +197 -0
- package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
- package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
- package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
- package/dist/features/packs/enforcers/health-lex-template.js +67 -0
- package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
- package/dist/features/packs/enforcers/health-lex.js +227 -0
- package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
- package/dist/features/packs/enforcers/health-markers.js +31 -0
- package/dist/features/packs/enforcers/health-measures.d.ts +26 -0
- package/dist/features/packs/enforcers/health-measures.js +223 -0
- package/dist/features/packs/enforcers/health-refs.d.ts +5 -0
- package/dist/features/packs/enforcers/health-refs.js +76 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
- package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/integrity-guards.js +202 -0
- package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
- package/dist/features/packs/enforcers/jsonkey.js +95 -0
- package/dist/features/packs/enforcers/parametric.d.ts +7 -0
- package/dist/features/packs/enforcers/parametric.js +138 -0
- package/dist/features/packs/enforcers/pattern.d.ts +11 -0
- package/dist/features/packs/enforcers/pattern.js +88 -0
- package/dist/features/packs/enforcers/placement.d.ts +10 -0
- package/dist/features/packs/enforcers/placement.js +54 -0
- package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/py-checks.js +131 -0
- package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
- package/dist/features/packs/enforcers/py-lex.js +271 -0
- package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/py-phantom.js +163 -0
- package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
- package/dist/features/packs/enforcers/py-pins.js +184 -0
- package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
- package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/records-guards.js +178 -0
- package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/remediation-guards.js +42 -0
- package/dist/features/packs/enforcers/required.d.ts +10 -0
- package/dist/features/packs/enforcers/required.js +65 -0
- package/dist/features/packs/enforcers/secret-scan.d.ts +6 -0
- package/dist/features/packs/enforcers/secret-scan.js +173 -0
- package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
- package/dist/features/packs/enforcers/shell-analyse.js +105 -0
- package/dist/features/packs/enforcers/sizes.d.ts +10 -0
- package/dist/features/packs/enforcers/sizes.js +82 -0
- package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/steering-guards.js +162 -0
- package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/testing-guards.js +118 -0
- package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/ts-checks.js +147 -0
- package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
- package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
- package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/ts-phantom.js +117 -0
- package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/ts-security-patterns.js +97 -0
- package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/workflow-guards.js +117 -0
- package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
- package/dist/features/packs/enforcers/write-confine.js +131 -0
- package/dist/features/packs/hashes.d.ts +6 -0
- package/dist/features/packs/hashes.js +84 -0
- package/dist/features/packs/index.d.ts +22 -0
- package/dist/features/packs/index.js +15 -0
- package/dist/features/packs/loader.d.ts +13 -0
- package/dist/features/packs/loader.js +205 -0
- package/dist/features/packs/manifest-decl.d.ts +13 -0
- package/dist/features/packs/manifest-decl.js +121 -0
- package/dist/features/packs/manifest.d.ts +7 -0
- package/dist/features/packs/manifest.js +95 -0
- package/dist/features/packs/params.d.ts +2 -0
- package/dist/features/packs/params.js +90 -0
- package/dist/features/packs/registry.d.ts +11 -0
- package/dist/features/packs/registry.js +136 -0
- package/dist/features/packs/selftest.d.ts +3 -0
- package/dist/features/packs/selftest.js +144 -0
- package/dist/features/records/bug-grammar.d.ts +17 -0
- package/dist/features/records/bug-grammar.js +128 -0
- package/dist/features/records/bug-registry.d.ts +9 -0
- package/dist/features/records/bug-registry.js +67 -0
- package/dist/features/records/bug-rows-immutable.d.ts +3 -0
- package/dist/features/records/bug-rows-immutable.js +52 -0
- package/dist/features/records/bugs.d.ts +2 -0
- package/dist/features/records/bugs.js +24 -0
- package/dist/features/records/docs-lines.d.ts +16 -0
- package/dist/features/records/docs-lines.js +36 -0
- package/dist/features/records/docs-prose.d.ts +14 -0
- package/dist/features/records/docs-prose.js +252 -0
- package/dist/features/records/docs-structure.d.ts +17 -0
- package/dist/features/records/docs-structure.js +223 -0
- package/dist/features/records/docs.d.ts +9 -0
- package/dist/features/records/docs.js +238 -0
- package/dist/features/records/history-checks.d.ts +6 -0
- package/dist/features/records/history-checks.js +94 -0
- package/dist/features/records/history-parse.d.ts +16 -0
- package/dist/features/records/history-parse.js +101 -0
- package/dist/features/records/history-scope.d.ts +5 -0
- package/dist/features/records/history-scope.js +86 -0
- package/dist/features/records/history.d.ts +3 -0
- package/dist/features/records/history.js +5 -0
- package/dist/features/records/index.d.ts +8 -0
- package/dist/features/records/index.js +11 -0
- package/dist/features/remediation/adoption.d.ts +32 -0
- package/dist/features/remediation/adoption.js +142 -0
- package/dist/features/remediation/index.d.ts +12 -0
- package/dist/features/remediation/index.js +21 -0
- package/dist/features/remediation/plan-chains.d.ts +3 -0
- package/dist/features/remediation/plan-chains.js +111 -0
- package/dist/features/remediation/plan-generate.d.ts +3 -0
- package/dist/features/remediation/plan-generate.js +129 -0
- package/dist/features/remediation/plan-kinds.d.ts +32 -0
- package/dist/features/remediation/plan-kinds.js +42 -0
- package/dist/features/remediation/plan-markers.d.ts +2 -0
- package/dist/features/remediation/plan-markers.js +155 -0
- package/dist/features/remediation/plan-merge.d.ts +6 -0
- package/dist/features/remediation/plan-merge.js +33 -0
- package/dist/features/remediation/plan.d.ts +4 -0
- package/dist/features/remediation/plan.js +7 -0
- package/dist/features/remediation/step-floor.d.ts +5 -0
- package/dist/features/remediation/step-floor.js +76 -0
- package/dist/features/remediation/step-gates.d.ts +18 -0
- package/dist/features/remediation/step-gates.js +77 -0
- package/dist/features/remediation/step-split.d.ts +12 -0
- package/dist/features/remediation/step-split.js +75 -0
- package/dist/features/remediation/steps.d.ts +3 -0
- package/dist/features/remediation/steps.js +6 -0
- package/dist/features/remediation/types.d.ts +37 -0
- package/dist/features/remediation/types.js +1 -0
- package/dist/features/security/index.d.ts +12 -0
- package/dist/features/security/index.js +142 -0
- package/dist/features/steering/agent-assets.d.ts +7 -0
- package/dist/features/steering/agent-assets.js +75 -0
- package/dist/features/steering/budgets.d.ts +20 -0
- package/dist/features/steering/budgets.js +86 -0
- package/dist/features/steering/checks.d.ts +7 -0
- package/dist/features/steering/checks.js +67 -0
- package/dist/features/steering/context-file.d.ts +11 -0
- package/dist/features/steering/context-file.js +107 -0
- package/dist/features/steering/graph-scan.d.ts +7 -0
- package/dist/features/steering/graph-scan.js +17 -0
- package/dist/features/steering/index.d.ts +30 -0
- package/dist/features/steering/index.js +45 -0
- package/dist/features/steering/injection.d.ts +23 -0
- package/dist/features/steering/injection.js +124 -0
- package/dist/features/steering/mcp.d.ts +2 -0
- package/dist/features/steering/mcp.js +18 -0
- package/dist/features/steering/precedence.d.ts +10 -0
- package/dist/features/steering/precedence.js +28 -0
- package/dist/features/steering/read-cache.d.ts +13 -0
- package/dist/features/steering/read-cache.js +51 -0
- package/dist/features/testing/base.d.ts +1 -0
- package/dist/features/testing/base.js +8 -0
- package/dist/features/testing/covers.d.ts +8 -0
- package/dist/features/testing/covers.js +50 -0
- package/dist/features/testing/evaluate.d.ts +19 -0
- package/dist/features/testing/evaluate.js +47 -0
- package/dist/features/testing/index.d.ts +10 -0
- package/dist/features/testing/index.js +13 -0
- package/dist/features/testing/integrity.d.ts +28 -0
- package/dist/features/testing/integrity.js +140 -0
- package/dist/features/testing/ledger.d.ts +11 -0
- package/dist/features/testing/ledger.js +51 -0
- package/dist/features/testing/proofs.d.ts +26 -0
- package/dist/features/testing/proofs.js +88 -0
- package/dist/features/testing/report.d.ts +6 -0
- package/dist/features/testing/report.js +16 -0
- package/dist/features/testing/scenarios.d.ts +34 -0
- package/dist/features/testing/scenarios.js +112 -0
- package/dist/features/testing/tap-parser.d.ts +9 -0
- package/dist/features/testing/tap-parser.js +96 -0
- package/dist/features/testing/trace.d.ts +23 -0
- package/dist/features/testing/trace.js +110 -0
- package/dist/features/workflow/index.d.ts +14 -0
- package/dist/features/workflow/index.js +19 -0
- package/dist/features/workflow/loop.d.ts +5 -0
- package/dist/features/workflow/loop.js +36 -0
- package/dist/features/workflow/phases.d.ts +10 -0
- package/dist/features/workflow/phases.js +184 -0
- package/dist/features/workflow/review.d.ts +25 -0
- package/dist/features/workflow/review.js +119 -0
- package/dist/features/workflow/tasks.d.ts +73 -0
- package/dist/features/workflow/tasks.js +80 -0
- package/dist/features/workflow/writes.d.ts +8 -0
- package/dist/features/workflow/writes.js +96 -0
- package/dist/kernel/clock.d.ts +4 -0
- package/dist/kernel/clock.js +5 -0
- package/dist/kernel/config-keys.d.ts +2 -0
- package/dist/kernel/config-keys.js +5 -0
- package/dist/kernel/config-toml-keys.d.ts +2 -0
- package/dist/kernel/config-toml-keys.js +237 -0
- package/dist/kernel/config-yaml-keys.d.ts +2 -0
- package/dist/kernel/config-yaml-keys.js +177 -0
- package/dist/kernel/contracts.d.ts +76 -0
- package/dist/kernel/contracts.js +9 -0
- package/dist/kernel/entry.d.ts +1 -0
- package/dist/kernel/entry.js +31 -0
- package/dist/kernel/env.d.ts +4 -0
- package/dist/kernel/env.js +5 -0
- package/dist/kernel/errors.d.ts +7 -0
- package/dist/kernel/errors.js +6 -0
- package/dist/kernel/fs-confine.d.ts +14 -0
- package/dist/kernel/fs-confine.js +129 -0
- package/dist/kernel/fs-errors.d.ts +8 -0
- package/dist/kernel/fs-errors.js +37 -0
- package/dist/kernel/fs.d.ts +28 -0
- package/dist/kernel/fs.js +245 -0
- package/dist/kernel/git.d.ts +16 -0
- package/dist/kernel/git.js +128 -0
- package/dist/kernel/glob.d.ts +1 -0
- package/dist/kernel/glob.js +178 -0
- package/dist/kernel/hash.d.ts +3 -0
- package/dist/kernel/hash.js +12 -0
- package/dist/kernel/host.d.ts +3 -0
- package/dist/kernel/host.js +48 -0
- package/dist/kernel/index.d.ts +115 -0
- package/dist/kernel/index.js +33 -0
- package/dist/kernel/json.d.ts +4 -0
- package/dist/kernel/json.js +68 -0
- package/dist/kernel/net-allow.d.ts +8 -0
- package/dist/kernel/net-allow.js +45 -0
- package/dist/kernel/net-fetch.d.ts +5 -0
- package/dist/kernel/net-fetch.js +135 -0
- package/dist/kernel/net.d.ts +10 -0
- package/dist/kernel/net.js +24 -0
- package/dist/kernel/path.d.ts +3 -0
- package/dist/kernel/path.js +40 -0
- package/dist/kernel/pattern.d.ts +2 -0
- package/dist/kernel/pattern.js +150 -0
- package/dist/kernel/proc.d.ts +6 -0
- package/dist/kernel/proc.js +207 -0
- package/dist/kernel/read-cache.d.ts +6 -0
- package/dist/kernel/read-cache.js +27 -0
- package/dist/kernel/redact.d.ts +1 -0
- package/dist/kernel/redact.js +206 -0
- package/dist/kernel/repo-root.d.ts +3 -0
- package/dist/kernel/repo-root.js +29 -0
- package/dist/kernel/result.d.ts +10 -0
- package/dist/kernel/result.js +6 -0
- package/dist/kernel/schema-helpers.d.ts +11 -0
- package/dist/kernel/schema-helpers.js +101 -0
- package/dist/kernel/schema.d.ts +2 -0
- package/dist/kernel/schema.js +203 -0
- package/dist/kernel/secret-paths.d.ts +3 -0
- package/dist/kernel/secret-paths.js +70 -0
- package/dist/kernel/shell-bypass.d.ts +4 -0
- package/dist/kernel/shell-bypass.js +151 -0
- package/dist/kernel/shell-cmd.d.ts +6 -0
- package/dist/kernel/shell-cmd.js +213 -0
- package/dist/kernel/shell-deny-cmd.d.ts +7 -0
- package/dist/kernel/shell-deny-cmd.js +35 -0
- package/dist/kernel/shell-deny-destroy.d.ts +7 -0
- package/dist/kernel/shell-deny-destroy.js +71 -0
- package/dist/kernel/shell-deny-escalate.d.ts +7 -0
- package/dist/kernel/shell-deny-escalate.js +96 -0
- package/dist/kernel/shell-deny-target.d.ts +4 -0
- package/dist/kernel/shell-deny-target.js +51 -0
- package/dist/kernel/shell-deny.d.ts +8 -0
- package/dist/kernel/shell-deny.js +171 -0
- package/dist/kernel/shell-scan.d.ts +3 -0
- package/dist/kernel/shell-scan.js +226 -0
- package/dist/kernel/shell-word.d.ts +15 -0
- package/dist/kernel/shell-word.js +216 -0
- package/dist/kernel/shell.d.ts +22 -0
- package/dist/kernel/shell.js +2 -0
- package/dist/kernel/stdin.d.ts +2 -0
- package/dist/kernel/stdin.js +59 -0
- package/dist/kernel/test-report.d.ts +7 -0
- package/dist/kernel/test-report.js +112 -0
- package/dist/kernel/version.d.ts +2 -0
- package/dist/kernel/version.js +46 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +19 -11
- package/schema/accepted.schema.json +20 -0
- package/schema/baseline.schema.json +17 -0
- package/schema/capability.schema.json +31 -0
- package/schema/cli/error.schema.json +15 -0
- package/schema/cli/explain.schema.json +19 -0
- package/schema/cli/report.schema.json +15 -0
- package/schema/cli/status.schema.json +51 -0
- package/schema/cli/verify.schema.json +15 -0
- package/schema/config.schema.json +43 -0
- package/schema/event-log.schema.json +52 -0
- package/schema/hook-decision.schema.json +13 -0
- package/schema/hook-event.schema.json +50 -0
- package/schema/manifest.schema.json +26 -0
- package/schema/pack-draft.schema.json +42 -0
- package/schema/pack.schema.json +70 -0
- package/schema/registry-snapshot.schema.json +41 -0
- package/schema/remediation-plan.schema.json +44 -0
- package/schema/review-findings.schema.json +25 -0
- package/schema/task-record.schema.json +49 -0
- package/schema/waivers.schema.json +29 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// SPEC §8.1: lookup over the error-code table (explain/nearest). The rows
|
|
2
|
+
// live in explain-table.ts and explain-table-tail.ts; this module combines
|
|
3
|
+
// them in SPEC §8.1 order and answers errorRowFor, explainCodeText and the
|
|
4
|
+
// CDX-E010 unknown-id text with the nearest known ids.
|
|
5
|
+
import { ERROR_ROWS_HEAD } from "./explain-table.js";
|
|
6
|
+
import { ERROR_ROWS_TAIL } from "./explain-table-tail.js";
|
|
7
|
+
// SPEC §8.1: all 58 explain targets in SPEC §8.1 order.
|
|
8
|
+
export const ERROR_ROWS = [
|
|
9
|
+
...ERROR_ROWS_HEAD,
|
|
10
|
+
...ERROR_ROWS_TAIL,
|
|
11
|
+
];
|
|
12
|
+
// SPEC §4.18.2: `codictator explain CDX-Ennn` prints the §8 row.
|
|
13
|
+
export function errorRowFor(code) {
|
|
14
|
+
for (const candidate of ERROR_ROWS) {
|
|
15
|
+
if (candidate.code === code) {
|
|
16
|
+
return candidate;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
// SPEC §4.18.2: whether explain() answers an id with a §8 row (as opposed
|
|
22
|
+
// to the CDX-E010 unknown-id path the CLI maps to exit 2).
|
|
23
|
+
export function isKnownExplainId(id) {
|
|
24
|
+
return errorRowFor(id) !== undefined;
|
|
25
|
+
}
|
|
26
|
+
// SPEC §4.18.2: the §8 row as human text; the code leads so the row is
|
|
27
|
+
// greppable, and the exit tells the caller which §8.2 bucket it lands in.
|
|
28
|
+
export function explainCodeText(rowValue) {
|
|
29
|
+
return [
|
|
30
|
+
`${rowValue.code}: ${rowValue.meaning} (exit ${rowValue.exit})`,
|
|
31
|
+
`Do instead: ${rowValue.remediation}`,
|
|
32
|
+
`See: SPEC §8.1 row ${rowValue.code}; codictator explain ${rowValue.code} prints this row.`,
|
|
33
|
+
].join("\n");
|
|
34
|
+
}
|
|
35
|
+
function tokensOf(value) {
|
|
36
|
+
return value
|
|
37
|
+
.toLowerCase()
|
|
38
|
+
.split(/[^a-z0-9]+/)
|
|
39
|
+
.filter((token) => token.length > 2);
|
|
40
|
+
}
|
|
41
|
+
// SPEC §4.18.6 EC-4: the nearest known ids for an unknown id. Scores each
|
|
42
|
+
// §8 row by word overlap with the query so a replay-flavoured id surfaces
|
|
43
|
+
// CDX-E011; ties break by code so the ranking is deterministic.
|
|
44
|
+
export function nearestExplainIds(id, limit = 3) {
|
|
45
|
+
const wanted = new Set(tokensOf(id));
|
|
46
|
+
const scored = [];
|
|
47
|
+
for (const candidate of ERROR_ROWS) {
|
|
48
|
+
if (candidate.code === "CDX-E010") {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const haystack = new Set(tokensOf(`${candidate.code} ${candidate.meaning} ${candidate.remediation}`));
|
|
52
|
+
let score = 0;
|
|
53
|
+
for (const token of wanted) {
|
|
54
|
+
if (haystack.has(token)) {
|
|
55
|
+
score += 1;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
scored.push({ code: candidate.code, score });
|
|
59
|
+
}
|
|
60
|
+
scored.sort((left, right) => right.score !== left.score
|
|
61
|
+
? right.score - left.score
|
|
62
|
+
: left.code < right.code
|
|
63
|
+
? -1
|
|
64
|
+
: 1);
|
|
65
|
+
return scored.slice(0, limit).map((entry) => entry.code);
|
|
66
|
+
}
|
|
67
|
+
// SPEC §4.18.6 EC-4 (and EC-5 when the query names a replay): CDX-E010
|
|
68
|
+
// with the nearest known ids, each with its one-line row.
|
|
69
|
+
export function explainUnknownText(id) {
|
|
70
|
+
const nearest = nearestExplainIds(id);
|
|
71
|
+
const lines = [
|
|
72
|
+
`CDX-E010: unknown rule, event or error id "${id}" (exit 2)`,
|
|
73
|
+
"Do instead: check the spelling; rule ids look like pack/rule, error codes like CDX-Ennn, events need codictator replay <eventId>.",
|
|
74
|
+
"Nearest known ids:",
|
|
75
|
+
];
|
|
76
|
+
for (const code of nearest) {
|
|
77
|
+
const found = errorRowFor(code);
|
|
78
|
+
if (found !== undefined) {
|
|
79
|
+
lines.push(`- ${found.code}: ${found.meaning} (exit ${found.exit})`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const replay = errorRowFor("CDX-E011");
|
|
83
|
+
if (nearest.includes("CDX-E011") && replay !== undefined) {
|
|
84
|
+
lines.push(`Do instead for replays: ${replay.remediation}`);
|
|
85
|
+
}
|
|
86
|
+
return lines.join("\n");
|
|
87
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Decision, Trigger } from "../../kernel/index.ts";
|
|
2
|
+
import { appendEvent, LOG_REL, type NewEvent } from "./append.ts";
|
|
3
|
+
import { errorRowFor, explainCodeText, explainUnknownText, isKnownExplainId, nearestExplainIds } from "./explain.ts";
|
|
4
|
+
import { buildInjectionEvent, type InjectionEventInput } from "./injection-event.ts";
|
|
5
|
+
import { type ReadEvents, readEvents } from "./read.ts";
|
|
6
|
+
import { buildCiSummary, buildReportText, buildStatusJson, buildStatusText, type CiSummaryInput, type HarnessLayerState, type HarnessStatus, type HelperStatus, type ReportInput, replaySummary, type StatusInput, summarizeTokenSaverEvidence, type TokenSaverEvidence, tokenSaverHelper } from "./surfaces.ts";
|
|
7
|
+
export { summarize } from "./summarize.ts";
|
|
8
|
+
export { appendEvent, buildCiSummary, buildInjectionEvent, buildReportText, buildStatusJson, buildStatusText, type CiSummaryInput, errorRowFor, explainCodeText, explainUnknownText, type HarnessLayerState, type HarnessStatus, type HelperStatus, type InjectionEventInput, isKnownExplainId, LOG_REL, type NewEvent, nearestExplainIds, type ReadEvents, type ReportInput, readEvents, replaySummary, type StatusInput, summarizeTokenSaverEvidence, type TokenSaverEvidence, tokenSaverHelper, };
|
|
9
|
+
export type EventKind = "verdict" | "injection" | "escalation" | "waiver" | "upgrade" | "integrity" | "tool" | "install" | "remediation" | "review" | "session" | "llm";
|
|
10
|
+
export interface EventFinding {
|
|
11
|
+
readonly ruleId: string;
|
|
12
|
+
readonly path?: string;
|
|
13
|
+
readonly line?: number;
|
|
14
|
+
readonly code?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface EventLogLine {
|
|
17
|
+
readonly v: 1;
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly ts: string;
|
|
20
|
+
readonly now: string;
|
|
21
|
+
readonly kind: EventKind;
|
|
22
|
+
readonly layer: string;
|
|
23
|
+
readonly trigger: Trigger;
|
|
24
|
+
readonly harness?: string;
|
|
25
|
+
readonly sessionId?: string;
|
|
26
|
+
readonly taskId?: string;
|
|
27
|
+
readonly ruleIds: ReadonlyArray<string>;
|
|
28
|
+
readonly decision?: Decision;
|
|
29
|
+
readonly findings?: ReadonlyArray<EventFinding>;
|
|
30
|
+
readonly waivers?: ReadonlyArray<string>;
|
|
31
|
+
readonly clockSkew?: boolean;
|
|
32
|
+
readonly durationMs: number;
|
|
33
|
+
readonly configHash: string;
|
|
34
|
+
readonly packs: Readonly<Record<string, string>>;
|
|
35
|
+
readonly message?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function explain(eventId: string): Promise<string>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { appendEvent, LOG_REL } from "./append.js";
|
|
2
|
+
import { errorRowFor, explainCodeText, explainUnknownText, isKnownExplainId, nearestExplainIds, } from "./explain.js";
|
|
3
|
+
import { buildInjectionEvent, } from "./injection-event.js";
|
|
4
|
+
import { readEvents } from "./read.js";
|
|
5
|
+
import { buildCiSummary, buildReportText, buildStatusJson, buildStatusText, replaySummary, summarizeTokenSaverEvidence, tokenSaverHelper, } from "./surfaces.js";
|
|
6
|
+
export { summarize } from "./summarize.js";
|
|
7
|
+
export { appendEvent, buildCiSummary, buildInjectionEvent, buildReportText, buildStatusJson, buildStatusText, errorRowFor, explainCodeText, explainUnknownText, isKnownExplainId, LOG_REL, nearestExplainIds, readEvents, replaySummary, summarizeTokenSaverEvidence, tokenSaverHelper, };
|
|
8
|
+
// SPEC §4.18.2: human-readable explanation of a rule, event or error id.
|
|
9
|
+
// Error codes print their §8 row; anything else prints CDX-E010 with the
|
|
10
|
+
// nearest known ids (EC-4), which names CDX-E011 for replay-flavoured ids.
|
|
11
|
+
export function explain(eventId) {
|
|
12
|
+
const found = errorRowFor(eventId);
|
|
13
|
+
if (found !== undefined) {
|
|
14
|
+
return Promise.resolve(explainCodeText(found));
|
|
15
|
+
}
|
|
16
|
+
return Promise.resolve(explainUnknownText(eventId));
|
|
17
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NewEvent } from "./append.ts";
|
|
2
|
+
export interface InjectionEventInput {
|
|
3
|
+
readonly content: string;
|
|
4
|
+
readonly trigger: "startup" | "compact" | "prompt";
|
|
5
|
+
readonly sessionId?: string;
|
|
6
|
+
readonly taskId?: string;
|
|
7
|
+
readonly harness?: string;
|
|
8
|
+
readonly configHash: string;
|
|
9
|
+
readonly packs?: Readonly<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
export declare function buildInjectionEvent(input: InjectionEventInput): NewEvent;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPEC §4.3.3 evaluation pattern (evaluate.ts:322): one NewEvent literal
|
|
2
|
+
// per emission; the log owns the id, timestamp and line shape (§7.10).
|
|
3
|
+
export function buildInjectionEvent(input) {
|
|
4
|
+
return {
|
|
5
|
+
kind: "injection",
|
|
6
|
+
layer: "L0",
|
|
7
|
+
trigger: input.trigger,
|
|
8
|
+
...(input.harness === undefined ? {} : { harness: input.harness }),
|
|
9
|
+
...(input.sessionId === undefined ? {} : { sessionId: input.sessionId }),
|
|
10
|
+
...(input.taskId === undefined ? {} : { taskId: input.taskId }),
|
|
11
|
+
ruleIds: [],
|
|
12
|
+
durationMs: 0,
|
|
13
|
+
configHash: input.configHash,
|
|
14
|
+
packs: input.packs ?? {},
|
|
15
|
+
message: input.content,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Ports } from "../../kernel/index.ts";
|
|
2
|
+
import { type Result } from "../../kernel/index.ts";
|
|
3
|
+
import type { EventLogLine } from "./index.ts";
|
|
4
|
+
export interface ReadEvents {
|
|
5
|
+
readonly events: ReadonlyArray<EventLogLine>;
|
|
6
|
+
readonly corrupt: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function readEvents(ports: Ports, repoRoot: string): Promise<Result<ReadEvents>>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// SPEC §4.18.1: line-delimited event log reads for explain, status and
|
|
2
|
+
// summaries. Corrupt lines are counted and skipped so one bad line never
|
|
3
|
+
// hides the rest of the log.
|
|
4
|
+
import { err, ok, parseJson } from "../../kernel/index.js";
|
|
5
|
+
import { LOG_REL } from "./append.js";
|
|
6
|
+
function isStringRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
// Bracket access through a variable keeps noPropertyAccessFromIndexSignature
|
|
10
|
+
// satisfied without tripping useLiteralKeys (kernel schema.ts pattern).
|
|
11
|
+
function field(record, name) {
|
|
12
|
+
return record[name];
|
|
13
|
+
}
|
|
14
|
+
function isEventLine(value) {
|
|
15
|
+
if (!isStringRecord(value)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return (field(value, "v") === 1 &&
|
|
19
|
+
typeof field(value, "id") === "string" &&
|
|
20
|
+
typeof field(value, "kind") === "string" &&
|
|
21
|
+
typeof field(value, "layer") === "string" &&
|
|
22
|
+
typeof field(value, "trigger") === "string" &&
|
|
23
|
+
Array.isArray(field(value, "ruleIds")) &&
|
|
24
|
+
typeof field(value, "durationMs") === "number" &&
|
|
25
|
+
typeof field(value, "configHash") === "string" &&
|
|
26
|
+
isStringRecord(field(value, "packs")));
|
|
27
|
+
}
|
|
28
|
+
function parseLines(text) {
|
|
29
|
+
const events = [];
|
|
30
|
+
let corrupt = 0;
|
|
31
|
+
for (const line of text.split("\n")) {
|
|
32
|
+
if (line === "") {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const parsed = parseJson(line);
|
|
36
|
+
if (!parsed.ok || !isEventLine(parsed.value)) {
|
|
37
|
+
corrupt += 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
events.push(parsed.value);
|
|
41
|
+
}
|
|
42
|
+
return { events, corrupt };
|
|
43
|
+
}
|
|
44
|
+
// A missing log is an empty log (SPEC §4.18.6 EC-3 recreates it on the next
|
|
45
|
+
// append); only real I/O failures are errors.
|
|
46
|
+
export async function readEvents(ports, repoRoot) {
|
|
47
|
+
const stripped = repoRoot.replace(/\/+$/, "");
|
|
48
|
+
const root = stripped === "" ? "." : stripped;
|
|
49
|
+
const logRel = `${root}/${LOG_REL}`;
|
|
50
|
+
const seen = await ports.fs.exists(logRel);
|
|
51
|
+
if (!seen.ok) {
|
|
52
|
+
return err(seen.error);
|
|
53
|
+
}
|
|
54
|
+
if (!seen.value) {
|
|
55
|
+
return ok({ events: [], corrupt: 0 });
|
|
56
|
+
}
|
|
57
|
+
const text = await ports.fs.readText(logRel);
|
|
58
|
+
if (!text.ok) {
|
|
59
|
+
return err(text.error);
|
|
60
|
+
}
|
|
61
|
+
return ok(parseLines(text.value));
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function summarize(since: string, limit: number): Promise<string>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// SPEC §4.18.6 EC-3/EC-6/EC-7: minimal Phase-4 status summary over the
|
|
2
|
+
// requested window. One entry per requested slot, gap entries where nothing
|
|
3
|
+
// is observed; the rollup stays within 60 KB with a truncation marker and
|
|
4
|
+
// counts (EC-6), and token metrics read "unavailable" where no harness
|
|
5
|
+
// reports usage data (EC-7), never zero.
|
|
6
|
+
import { redactSecrets } from "../../kernel/index.js";
|
|
7
|
+
const SUMMARY_MAX_BYTES = 60000;
|
|
8
|
+
// The truncation marker itself is reserved up front so the final text,
|
|
9
|
+
// head plus slots plus marker plus tail, never exceeds the cap.
|
|
10
|
+
const MARKER_RESERVE = 128;
|
|
11
|
+
function utf8Length(text) {
|
|
12
|
+
return new TextEncoder().encode(text).length;
|
|
13
|
+
}
|
|
14
|
+
// SPEC §4.18.6 EC-6: cap the slot entries so the summary fits 60 KB;
|
|
15
|
+
// the dropped count and the command to see all stay in the output.
|
|
16
|
+
function cappedSlots(since, limit) {
|
|
17
|
+
const slots = [];
|
|
18
|
+
const head = `status since ${since}: gap in event coverage, no events observed`;
|
|
19
|
+
const tail = "token metrics: unavailable (no harness usage data); run codictator report for all";
|
|
20
|
+
let used = utf8Length(head) + utf8Length(tail) + 2 + MARKER_RESERVE;
|
|
21
|
+
let slot = 1;
|
|
22
|
+
while (slot <= limit) {
|
|
23
|
+
const line = `gap: event ${slot} of the last ${limit} not observed`;
|
|
24
|
+
if (used + utf8Length(line) + 1 > SUMMARY_MAX_BYTES) {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
slots.push(line);
|
|
28
|
+
used += utf8Length(line) + 1;
|
|
29
|
+
slot += 1;
|
|
30
|
+
}
|
|
31
|
+
const dropped = limit - slots.length;
|
|
32
|
+
if (dropped > 0) {
|
|
33
|
+
slots.push(`[truncated ${dropped} entries with counts; run codictator report for all]`);
|
|
34
|
+
}
|
|
35
|
+
return [head, ...slots, tail];
|
|
36
|
+
}
|
|
37
|
+
// SPEC §4.18.3: status summary over recent events. Pure and deterministic:
|
|
38
|
+
// one entry per requested slot, gap entries where no event is observed.
|
|
39
|
+
export function summarize(since, limit) {
|
|
40
|
+
return Promise.resolve(redactSecrets(cappedSlots(since, limit).join("\n")));
|
|
41
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { EventLogLine } from "./index.ts";
|
|
2
|
+
import type { HelperStatus } from "./token-saver-evidence.ts";
|
|
3
|
+
export type { HelperStatus } from "./token-saver-evidence.ts";
|
|
4
|
+
export { summarizeTokenSaverEvidence, type TokenSaverEvidence, tokenSaverHelper, } from "./token-saver-evidence.ts";
|
|
5
|
+
export type HarnessLayerState = "active" | "inactive" | "unknown" | "unverified";
|
|
6
|
+
export interface HarnessStatus {
|
|
7
|
+
readonly harness: string;
|
|
8
|
+
readonly state: HarnessLayerState;
|
|
9
|
+
readonly layers: string;
|
|
10
|
+
}
|
|
11
|
+
export interface StatusInput {
|
|
12
|
+
readonly engineVersion: string;
|
|
13
|
+
readonly packs: Readonly<Record<string, string>>;
|
|
14
|
+
readonly harnesses: ReadonlyArray<HarnessStatus>;
|
|
15
|
+
readonly helpers?: ReadonlyArray<HelperStatus> | undefined;
|
|
16
|
+
readonly events: number;
|
|
17
|
+
readonly corrupt: number;
|
|
18
|
+
readonly gap: boolean;
|
|
19
|
+
readonly task?: string | undefined;
|
|
20
|
+
readonly waivers?: string | undefined;
|
|
21
|
+
readonly ratchet?: string | undefined;
|
|
22
|
+
readonly deps?: string | undefined;
|
|
23
|
+
readonly integrity?: string | undefined;
|
|
24
|
+
readonly escalations?: string | undefined;
|
|
25
|
+
readonly remediation?: string | undefined;
|
|
26
|
+
readonly now: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function buildStatusText(input: StatusInput): string;
|
|
29
|
+
export declare function buildStatusJson(input: StatusInput): unknown;
|
|
30
|
+
export declare function replaySummary(event: EventLogLine): string;
|
|
31
|
+
export interface CiSummaryInput {
|
|
32
|
+
readonly integrity: ReadonlyArray<string>;
|
|
33
|
+
readonly blocking: ReadonlyArray<string>;
|
|
34
|
+
readonly exceptions: ReadonlyArray<string>;
|
|
35
|
+
readonly waivers: ReadonlyArray<string>;
|
|
36
|
+
readonly deps: ReadonlyArray<string>;
|
|
37
|
+
readonly remediation: ReadonlyArray<string>;
|
|
38
|
+
readonly unverifiable: ReadonlyArray<string>;
|
|
39
|
+
readonly command: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function buildCiSummary(input: CiSummaryInput): string;
|
|
42
|
+
export interface ReportInput {
|
|
43
|
+
readonly events: ReadonlyArray<EventLogLine>;
|
|
44
|
+
readonly corrupt: number;
|
|
45
|
+
readonly now: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function buildReportText(input: ReportInput): string;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// SPEC §4.18.3-§4.18.5: replay, status, the CI summary and report.
|
|
2
|
+
// Pure builders over caller-supplied inputs: the CLI (composition root)
|
|
3
|
+
// reads the event log and config through ports and passes the data in, so
|
|
4
|
+
// this module stays kernel-only per SPEC §3.3.
|
|
5
|
+
export { summarizeTokenSaverEvidence, tokenSaverHelper, } from "./token-saver-evidence.js";
|
|
6
|
+
// SPEC §4.6.6: every required role renders present with its binary and
|
|
7
|
+
// pin, or missing; no required roles reads "none declared". The
|
|
8
|
+
// engine-satisfied token-saver row keeps its SPEC literal
|
|
9
|
+
// `token-saver: engine-satisfied`; a missing role with a named gap keeps
|
|
10
|
+
// the reason.
|
|
11
|
+
function helpersLine(helpers) {
|
|
12
|
+
if (helpers === undefined || helpers.length === 0) {
|
|
13
|
+
return "helpers: none declared";
|
|
14
|
+
}
|
|
15
|
+
const parts = helpers.map((helper) => {
|
|
16
|
+
if (helper.role === "token-saver" &&
|
|
17
|
+
helper.detail !== undefined &&
|
|
18
|
+
helper.detail.startsWith("engine-satisfied")) {
|
|
19
|
+
return `token-saver: ${helper.detail}`;
|
|
20
|
+
}
|
|
21
|
+
if (!helper.present && helper.detail !== undefined) {
|
|
22
|
+
return `${helper.role} missing (${helper.detail})`;
|
|
23
|
+
}
|
|
24
|
+
return helper.present
|
|
25
|
+
? `${helper.role} present${helper.detail === undefined ? "" : ` (${helper.detail})`}`
|
|
26
|
+
: `${helper.role} missing`;
|
|
27
|
+
});
|
|
28
|
+
return `helpers: ${parts.join(", ")}`;
|
|
29
|
+
}
|
|
30
|
+
// SPEC §4.18.3: trailing status rows with their fallbacks, so the screen
|
|
31
|
+
// builder stays a straight-line assembly.
|
|
32
|
+
function tailStatusLines(input) {
|
|
33
|
+
return [
|
|
34
|
+
`task: ${input.task ?? "none active"}`,
|
|
35
|
+
`waivers: ${input.waivers ?? "none in force"}`,
|
|
36
|
+
`ratchet: ${input.ratchet ?? "no baseline history"}`,
|
|
37
|
+
`deps: ${input.deps ?? "freshness unknown"}`,
|
|
38
|
+
`integrity: ${input.integrity ?? "unverified"}`,
|
|
39
|
+
`escalations: ${input.escalations ?? "none open"}`,
|
|
40
|
+
`remediation: ${input.remediation ?? "no plan"}`,
|
|
41
|
+
`events: ${input.events} observed, ${input.corrupt} corrupt${input.gap ? "; gap in coverage, log was deleted mid-session" : ""}`,
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
// SPEC §4.18.3: one screen with engine, packs, harness states, helper
|
|
45
|
+
// tools, task, waivers, ratchet, deps, integrity, escalations and
|
|
46
|
+
// remediation progress.
|
|
47
|
+
export function buildStatusText(input) {
|
|
48
|
+
const packs = Object.entries(input.packs)
|
|
49
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
50
|
+
.map(([name, version]) => `${name}@${version}`);
|
|
51
|
+
const lines = [
|
|
52
|
+
`codictator ${input.engineVersion} status at ${input.now}`,
|
|
53
|
+
`packs: ${packs.length === 0 ? "none configured" : packs.join(", ")}`,
|
|
54
|
+
"harnesses:",
|
|
55
|
+
];
|
|
56
|
+
for (const harness of input.harnesses) {
|
|
57
|
+
lines.push(`- ${harness.harness}: ${harness.state} (${harness.layers})`);
|
|
58
|
+
}
|
|
59
|
+
lines.push(helpersLine(input.helpers));
|
|
60
|
+
lines.push(...tailStatusLines(input));
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
// SPEC §4.18.3: the same status as data for the extension (--json).
|
|
64
|
+
export function buildStatusJson(input) {
|
|
65
|
+
return {
|
|
66
|
+
engineVersion: input.engineVersion,
|
|
67
|
+
packs: { ...input.packs },
|
|
68
|
+
harnesses: input.harnesses.map((harness) => ({ ...harness })),
|
|
69
|
+
helpers: input.helpers === undefined
|
|
70
|
+
? null
|
|
71
|
+
: input.helpers.map((helper) => ({ ...helper })),
|
|
72
|
+
events: input.events,
|
|
73
|
+
corrupt: input.corrupt,
|
|
74
|
+
gap: input.gap,
|
|
75
|
+
task: input.task ?? null,
|
|
76
|
+
waivers: input.waivers ?? null,
|
|
77
|
+
ratchet: input.ratchet ?? null,
|
|
78
|
+
deps: input.deps ?? null,
|
|
79
|
+
integrity: input.integrity ?? null,
|
|
80
|
+
escalations: input.escalations ?? null,
|
|
81
|
+
remediation: input.remediation ?? null,
|
|
82
|
+
now: input.now,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// SPEC §4.18.2: an event explains as its verdict, its inputs and its replay.
|
|
86
|
+
export function replaySummary(event) {
|
|
87
|
+
const packs = Object.entries(event.packs)
|
|
88
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
89
|
+
.map(([name, version]) => `${name}@${version}`)
|
|
90
|
+
.join(", ");
|
|
91
|
+
return [
|
|
92
|
+
`event ${event.id}: ${event.kind}/${event.layer} ${event.decision ?? "observed"}`,
|
|
93
|
+
`inputs: config ${event.configHash}, packs ${packs === "" ? "none" : packs}, now ${event.now}`,
|
|
94
|
+
`rerun: codictator replay ${event.id}`,
|
|
95
|
+
].join("\n");
|
|
96
|
+
}
|
|
97
|
+
const CI_SUMMARY_MAX_BYTES = 60000;
|
|
98
|
+
function section(title, lines) {
|
|
99
|
+
if (lines.length === 0) {
|
|
100
|
+
return [`## ${title}`, "none"];
|
|
101
|
+
}
|
|
102
|
+
return [`## ${title}`, ...lines];
|
|
103
|
+
}
|
|
104
|
+
// SPEC §4.18.4: Markdown in §4.18.4 order. Past 60 KB the lower-priority
|
|
105
|
+
// sections collapse to counts with the command to see all (EC-6).
|
|
106
|
+
export function buildCiSummary(input) {
|
|
107
|
+
const full = [
|
|
108
|
+
"# codictator CI summary",
|
|
109
|
+
...section("integrity then blocking findings", [
|
|
110
|
+
...input.integrity,
|
|
111
|
+
...input.blocking,
|
|
112
|
+
]),
|
|
113
|
+
...section("exceptions and review identity", input.exceptions),
|
|
114
|
+
...section("waivers and ratchet movement", input.waivers),
|
|
115
|
+
...section("dependencies", input.deps),
|
|
116
|
+
...section("remediation progress", input.remediation),
|
|
117
|
+
...section("unverifiable items", input.unverifiable),
|
|
118
|
+
].join("\n");
|
|
119
|
+
const bytes = new TextEncoder().encode(full).length;
|
|
120
|
+
if (bytes <= CI_SUMMARY_MAX_BYTES) {
|
|
121
|
+
return full;
|
|
122
|
+
}
|
|
123
|
+
const kept = [
|
|
124
|
+
"# codictator CI summary (truncated with counts)",
|
|
125
|
+
...section("integrity then blocking findings", [
|
|
126
|
+
...input.integrity,
|
|
127
|
+
...input.blocking,
|
|
128
|
+
]),
|
|
129
|
+
`exceptions: ${input.exceptions.length}, waivers: ${input.waivers.length}, deps: ${input.deps.length}, remediation: ${input.remediation.length}, unverifiable: ${input.unverifiable.length}`,
|
|
130
|
+
`run \`${input.command}\` for the full list`,
|
|
131
|
+
].join("\n");
|
|
132
|
+
return kept;
|
|
133
|
+
}
|
|
134
|
+
function rateText(matched, total) {
|
|
135
|
+
if (total === 0) {
|
|
136
|
+
return "no blocks observed";
|
|
137
|
+
}
|
|
138
|
+
return `${matched}/${total}`;
|
|
139
|
+
}
|
|
140
|
+
// SPEC §4.18.5: PRD §10 metrics from local sources only. Token metrics read
|
|
141
|
+
// "unavailable" where no harness reports usageData (EC-7), never zero.
|
|
142
|
+
export function buildReportText(input) {
|
|
143
|
+
let blocks = 0;
|
|
144
|
+
let corrections = 0;
|
|
145
|
+
let escalations = 0;
|
|
146
|
+
const latencies = [];
|
|
147
|
+
for (const event of input.events) {
|
|
148
|
+
if (event.decision === "block") {
|
|
149
|
+
blocks += 1;
|
|
150
|
+
}
|
|
151
|
+
if (event.kind === "escalation") {
|
|
152
|
+
escalations += 1;
|
|
153
|
+
}
|
|
154
|
+
if (event.decision === "block" || event.decision === "allow") {
|
|
155
|
+
corrections += event.decision === "allow" ? 1 : 0;
|
|
156
|
+
}
|
|
157
|
+
latencies.push(event.durationMs);
|
|
158
|
+
}
|
|
159
|
+
latencies.sort((left, right) => left - right);
|
|
160
|
+
const p95 = latencies.length === 0
|
|
161
|
+
? "no events observed"
|
|
162
|
+
: `${latencies[Math.min(latencies.length - 1, Math.floor(latencies.length * 0.95))] ?? 0}ms`;
|
|
163
|
+
return [
|
|
164
|
+
`codictator report at ${input.now}`,
|
|
165
|
+
`self-correction rate: ${rateText(corrections, blocks)} (allow after block, same rule and task)`,
|
|
166
|
+
`loop-breaker escalations: ${escalations}`,
|
|
167
|
+
"tokens per task, band breaches: unavailable (no harness usage data)",
|
|
168
|
+
`p95 event latency: ${p95}; install-to-green: unavailable (needs baseline history)`,
|
|
169
|
+
"ratchet totals: unavailable (needs git log of baseline.json)",
|
|
170
|
+
`corrupt lines skipped: ${input.corrupt}`,
|
|
171
|
+
].join("\n");
|
|
172
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EventLogLine } from "./index.ts";
|
|
2
|
+
export interface HelperStatus {
|
|
3
|
+
readonly role: string;
|
|
4
|
+
readonly present: boolean;
|
|
5
|
+
readonly detail?: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface TokenSaverEvidence {
|
|
8
|
+
readonly budget: string;
|
|
9
|
+
readonly injectionHash: string | undefined;
|
|
10
|
+
readonly injectionBytes: number | undefined;
|
|
11
|
+
readonly dedupeBlocked: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function summarizeTokenSaverEvidence(events: ReadonlyArray<EventLogLine>): TokenSaverEvidence;
|
|
14
|
+
export declare function tokenSaverHelper(evidence: TokenSaverEvidence): HelperStatus;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// SPEC §4.18.3 + §4.6.6: the token-saver helper row from live evidence.
|
|
2
|
+
// Split from surfaces.ts by responsibility (core/file-size): this module
|
|
3
|
+
// owns the token-saver evidence shape, its summary and its helper row;
|
|
4
|
+
// surfaces.ts keeps the status/CI/report builders and composes this row.
|
|
5
|
+
// SPEC §4.18.3: the budget band off the last injection's budget line. The
|
|
6
|
+
// renderer (steering, the threshold owner) names green, amber or red next
|
|
7
|
+
// to the counts; anything else is not a band, so it reads unavailable.
|
|
8
|
+
function injectionBudgetBand(message) {
|
|
9
|
+
if (message === undefined) {
|
|
10
|
+
return "unavailable";
|
|
11
|
+
}
|
|
12
|
+
let band = "unavailable";
|
|
13
|
+
for (const line of message.split("\n")) {
|
|
14
|
+
const rest = line.startsWith("Budget: ")
|
|
15
|
+
? line.slice("Budget: ".length)
|
|
16
|
+
: undefined;
|
|
17
|
+
if (rest === undefined) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (rest.startsWith("unavailable")) {
|
|
21
|
+
band = "unavailable";
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const named = rest.split(" ")[0];
|
|
25
|
+
band =
|
|
26
|
+
named === "green" || named === "amber" || named === "red"
|
|
27
|
+
? named
|
|
28
|
+
: "unavailable";
|
|
29
|
+
}
|
|
30
|
+
return band;
|
|
31
|
+
}
|
|
32
|
+
// SPEC §4.18.3: the token-saver evidence from the event log. Read-dedupe
|
|
33
|
+
// blocks are verdicts blocked with the core/read-dedupe rule; the last
|
|
34
|
+
// injection event carries the hash (its id ends in the content digest)
|
|
35
|
+
// and the byte count (its message length, 0 when messageless).
|
|
36
|
+
export function summarizeTokenSaverEvidence(events) {
|
|
37
|
+
let injectionHash;
|
|
38
|
+
let injectionBytes;
|
|
39
|
+
let injectionMessage;
|
|
40
|
+
let dedupeBlocked = 0;
|
|
41
|
+
for (const event of events) {
|
|
42
|
+
if (event.kind === "injection") {
|
|
43
|
+
const cut = event.id.lastIndexOf("-");
|
|
44
|
+
injectionHash = cut < 0 ? event.id : event.id.slice(cut + 1);
|
|
45
|
+
injectionBytes =
|
|
46
|
+
event.message === undefined
|
|
47
|
+
? 0
|
|
48
|
+
: new TextEncoder().encode(event.message).length;
|
|
49
|
+
injectionMessage = event.message;
|
|
50
|
+
}
|
|
51
|
+
if (event.decision === "block" &&
|
|
52
|
+
event.ruleIds.includes("core/read-dedupe")) {
|
|
53
|
+
dedupeBlocked += 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
budget: injectionBudgetBand(injectionMessage),
|
|
58
|
+
injectionHash,
|
|
59
|
+
injectionBytes,
|
|
60
|
+
dedupeBlocked,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// SPEC §4.18.3 + §4.6.6: the token-saver helper row from live evidence.
|
|
64
|
+
// All-absent evidence is a finding, not a pass: the role reads missing
|
|
65
|
+
// with the gap named instead of claiming engine-satisfied.
|
|
66
|
+
export function tokenSaverHelper(evidence) {
|
|
67
|
+
if (evidence.budget === "unavailable" &&
|
|
68
|
+
evidence.injectionHash === undefined &&
|
|
69
|
+
evidence.dedupeBlocked === 0) {
|
|
70
|
+
return {
|
|
71
|
+
role: "token-saver",
|
|
72
|
+
present: false,
|
|
73
|
+
detail: "no budget band, no scoped injection and no read-dedupe blocks in the event log",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const injection = evidence.injectionHash === undefined ||
|
|
77
|
+
evidence.injectionBytes === undefined
|
|
78
|
+
? "injection none"
|
|
79
|
+
: `injection ${evidence.injectionHash} ${evidence.injectionBytes}B`;
|
|
80
|
+
return {
|
|
81
|
+
role: "token-saver",
|
|
82
|
+
present: true,
|
|
83
|
+
detail: `engine-satisfied (budget ${evidence.budget}, ${injection}, dedupe ${evidence.dedupeBlocked} blocked)`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Finding } from "../engine/index.ts";
|
|
2
|
+
export interface BotChangeInput {
|
|
3
|
+
readonly author: string;
|
|
4
|
+
readonly filesChanged: ReadonlyArray<string>;
|
|
5
|
+
readonly isFork: boolean;
|
|
6
|
+
readonly trailerExempt: ReadonlyArray<string>;
|
|
7
|
+
}
|
|
8
|
+
export interface BotChangePlan {
|
|
9
|
+
readonly qualifies: boolean;
|
|
10
|
+
readonly writeCommit: boolean;
|
|
11
|
+
readonly findings: Array<Finding>;
|
|
12
|
+
}
|
|
13
|
+
export declare function isRecognisedBot(author: string, trailerExempt: ReadonlyArray<string>): boolean;
|
|
14
|
+
export declare function qualifyBotChange(input: BotChangeInput): BotChangePlan;
|
|
15
|
+
export interface SweepInput {
|
|
16
|
+
readonly sweepPrOpen: boolean;
|
|
17
|
+
readonly floorFindings: ReadonlyArray<Finding>;
|
|
18
|
+
}
|
|
19
|
+
export interface SweepPlan {
|
|
20
|
+
readonly pr: string;
|
|
21
|
+
readonly action: "update-in-place" | "create";
|
|
22
|
+
readonly findings: Array<Finding>;
|
|
23
|
+
}
|
|
24
|
+
export declare function planSweep(input: SweepInput): SweepPlan;
|
|
25
|
+
export declare function externalCiStatus(options: {
|
|
26
|
+
readonly host: "github" | "external";
|
|
27
|
+
readonly confirmed: boolean;
|
|
28
|
+
}): Array<Finding>;
|