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,10 @@
|
|
|
1
|
+
import type { Net, NetRequest, NetResponse } from "./index.ts";
|
|
2
|
+
import { NET_ALLOWLIST, type NodeNetOptions, netHostAllowed, rejectNetUrl } from "./net-allow.ts";
|
|
3
|
+
import { NET_MAX_BODY_BYTES, NET_MAX_REDIRECTS } from "./net-fetch.ts";
|
|
4
|
+
import { type Result } from "./result.ts";
|
|
5
|
+
export { NET_ALLOWLIST, NET_MAX_BODY_BYTES, NET_MAX_REDIRECTS, type NodeNetOptions, netHostAllowed, rejectNetUrl, };
|
|
6
|
+
export declare class NodeNet implements Net {
|
|
7
|
+
private readonly extraHosts;
|
|
8
|
+
constructor(options?: NodeNetOptions);
|
|
9
|
+
request(req: NetRequest): Promise<Result<NetResponse>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NET_ALLOWLIST, netHostAllowed, rejectNetUrl, } from "./net-allow.js";
|
|
2
|
+
import { fetchOnce, NET_MAX_BODY_BYTES, NET_MAX_REDIRECTS, } from "./net-fetch.js";
|
|
3
|
+
import { err } from "./result.js";
|
|
4
|
+
export { NET_ALLOWLIST, NET_MAX_BODY_BYTES, NET_MAX_REDIRECTS, netHostAllowed, rejectNetUrl, };
|
|
5
|
+
export class NodeNet {
|
|
6
|
+
extraHosts;
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
this.extraHosts = options.extraHosts ?? [];
|
|
9
|
+
}
|
|
10
|
+
request(req) {
|
|
11
|
+
if (req.method === "") {
|
|
12
|
+
throw new Error("net request must name an HTTP method");
|
|
13
|
+
}
|
|
14
|
+
// SPEC §4.1.3 EC-4: rejected before any socket opens.
|
|
15
|
+
const rejected = rejectNetUrl(req.url, this.extraHosts);
|
|
16
|
+
if (rejected !== undefined) {
|
|
17
|
+
return Promise.resolve(err(rejected));
|
|
18
|
+
}
|
|
19
|
+
const current = new URL(req.url);
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
fetchOnce(current, req.method, req.headers, req.body, req.timeoutMs, 0, this.extraHosts, resolve);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// SPEC §4.1.2: POSIX-separated, repo-relative, case preserved. A path with
|
|
2
|
+
// .. that normalises inside the repo is allowed and the normalised path is
|
|
3
|
+
// used (EC-2); one that escapes the root fails with CDX-E701 (EC-1).
|
|
4
|
+
import { makeError } from "./errors.js";
|
|
5
|
+
import { err, ok } from "./result.js";
|
|
6
|
+
function escapeError() {
|
|
7
|
+
return makeError("CDX-E701", "path escapes the repo root", "Keep the path inside the repo root; remove leading .. segments.");
|
|
8
|
+
}
|
|
9
|
+
export function toRepoPath(path) {
|
|
10
|
+
if (path === "") {
|
|
11
|
+
return err(escapeError());
|
|
12
|
+
}
|
|
13
|
+
const slashed = path.replace(/\\/g, "/");
|
|
14
|
+
if (slashed.startsWith("/") || /^[A-Za-z]:(\/|$)/.test(slashed)) {
|
|
15
|
+
return err(escapeError());
|
|
16
|
+
}
|
|
17
|
+
const kept = [];
|
|
18
|
+
for (const part of slashed.split("/")) {
|
|
19
|
+
if (part === "" || part === ".") {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (part === "..") {
|
|
23
|
+
const previous = kept.pop();
|
|
24
|
+
if (previous === undefined) {
|
|
25
|
+
return err(escapeError());
|
|
26
|
+
}
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
kept.push(part);
|
|
30
|
+
}
|
|
31
|
+
if (kept.length === 0) {
|
|
32
|
+
return ok(".");
|
|
33
|
+
}
|
|
34
|
+
return ok(kept.join("/"));
|
|
35
|
+
}
|
|
36
|
+
// SPEC §4.7.3: writes into .git/ are blocked except through git itself.
|
|
37
|
+
// The input is a repo-relative normalised path as toRepoPath returns it.
|
|
38
|
+
export function isGitDirPath(rel) {
|
|
39
|
+
return rel === ".git" || rel.startsWith(".git/");
|
|
40
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// SPEC §9.2: every regex from a pack, config or generator is checked before
|
|
2
|
+
// use. Length is capped at 1,000, nested quantifiers over overlapping groups
|
|
3
|
+
// ((a+)+-class) and backreferences are rejected, and matching runs per line
|
|
4
|
+
// with a 10 ms per-file budget enforced by the caller. Violations fail with
|
|
5
|
+
// CDX-E902, never a throw.
|
|
6
|
+
import { makeError } from "./errors.js";
|
|
7
|
+
import { err, ok } from "./result.js";
|
|
8
|
+
const MAX_PATTERN_LENGTH = 1000;
|
|
9
|
+
function tooLongError() {
|
|
10
|
+
return err(makeError("CDX-E902", "pattern exceeds the 1,000-character safety budget", "Shorten the pattern or split it into several anchored patterns."));
|
|
11
|
+
}
|
|
12
|
+
function nestedError() {
|
|
13
|
+
return err(makeError("CDX-E902", "pattern nests a quantifier inside a quantified group", "Rewrite without nested quantifiers; match per line instead."));
|
|
14
|
+
}
|
|
15
|
+
function backreferenceError() {
|
|
16
|
+
return err(makeError("CDX-E902", "pattern uses a backreference", "Rewrite the pattern without backreferences."));
|
|
17
|
+
}
|
|
18
|
+
function invalidError() {
|
|
19
|
+
return err(makeError("CDX-E902", "pattern has unbalanced parentheses", "Balance every opening parenthesis before using the pattern."));
|
|
20
|
+
}
|
|
21
|
+
// SPEC §9.2: scan with escape and character-class awareness so an escaped
|
|
22
|
+
// parenthesis or a bracketed quantifier cannot hide a nested quantifier.
|
|
23
|
+
export function checkPattern(pattern) {
|
|
24
|
+
if (pattern.length > MAX_PATTERN_LENGTH) {
|
|
25
|
+
return tooLongError();
|
|
26
|
+
}
|
|
27
|
+
const groups = [];
|
|
28
|
+
let quantifiedInside = false;
|
|
29
|
+
let index = 0;
|
|
30
|
+
while (index < pattern.length) {
|
|
31
|
+
const current = pattern.charAt(index);
|
|
32
|
+
if (current === "\\") {
|
|
33
|
+
const next = pattern.charAt(index + 1);
|
|
34
|
+
if (next !== "" && next >= "1" && next <= "9") {
|
|
35
|
+
return backreferenceError();
|
|
36
|
+
}
|
|
37
|
+
if (next === "k") {
|
|
38
|
+
return backreferenceError();
|
|
39
|
+
}
|
|
40
|
+
index += 2;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (current === "[") {
|
|
44
|
+
index += 1;
|
|
45
|
+
if (pattern.charAt(index) === "^") {
|
|
46
|
+
index += 1;
|
|
47
|
+
}
|
|
48
|
+
if (pattern.charAt(index) === "]") {
|
|
49
|
+
index += 1;
|
|
50
|
+
}
|
|
51
|
+
while (index < pattern.length && pattern.charAt(index) !== "]") {
|
|
52
|
+
if (pattern.charAt(index) === "\\") {
|
|
53
|
+
index += 1;
|
|
54
|
+
}
|
|
55
|
+
index += 1;
|
|
56
|
+
}
|
|
57
|
+
index += 1;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (current === "(") {
|
|
61
|
+
groups.push({ quantifiedInside });
|
|
62
|
+
quantifiedInside = false;
|
|
63
|
+
index += 1;
|
|
64
|
+
// SPEC §9.2: a ? directly after ( opens a non-capturing or
|
|
65
|
+
// lookaround group; it quantifies nothing.
|
|
66
|
+
if (pattern.charAt(index) === "?") {
|
|
67
|
+
index += 1;
|
|
68
|
+
const marker = pattern.charAt(index);
|
|
69
|
+
if (marker === ":" || marker === "=" || marker === "!") {
|
|
70
|
+
index += 1;
|
|
71
|
+
}
|
|
72
|
+
else if (marker === "<") {
|
|
73
|
+
const close = pattern.indexOf(">", index);
|
|
74
|
+
if (close >= 0) {
|
|
75
|
+
index = close + 1;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (current === ")") {
|
|
82
|
+
const frame = groups.pop();
|
|
83
|
+
if (frame === undefined) {
|
|
84
|
+
return invalidError();
|
|
85
|
+
}
|
|
86
|
+
const quantifier = pattern.charAt(index + 1);
|
|
87
|
+
const groupQuantified = quantifier === "+" || quantifier === "*" || quantifier === "?";
|
|
88
|
+
const braceQuantified = quantifier === "{";
|
|
89
|
+
if ((groupQuantified || braceQuantified) && quantifiedInside) {
|
|
90
|
+
return nestedError();
|
|
91
|
+
}
|
|
92
|
+
quantifiedInside =
|
|
93
|
+
frame.quantifiedInside || groupQuantified || braceQuantified;
|
|
94
|
+
index += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (current === "+" || current === "*" || current === "?") {
|
|
98
|
+
quantifiedInside = true;
|
|
99
|
+
index += 1;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (current === "{") {
|
|
103
|
+
const rest = pattern.slice(index);
|
|
104
|
+
if (/^\{\d+(,\d*)?\}/.test(rest)) {
|
|
105
|
+
quantifiedInside = true;
|
|
106
|
+
}
|
|
107
|
+
index += 1;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
index += 1;
|
|
111
|
+
}
|
|
112
|
+
if (groups.length > 0) {
|
|
113
|
+
return invalidError();
|
|
114
|
+
}
|
|
115
|
+
return ok(undefined);
|
|
116
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Proc, ProcOptions, ProcResult } from "./index.ts";
|
|
2
|
+
export declare const PROC_ENV_ALLOWLIST: ReadonlyArray<string>;
|
|
3
|
+
export declare function buildProcEnv(requested: Readonly<Record<string, string>>): Record<string, string>;
|
|
4
|
+
export declare class NodeProc implements Proc {
|
|
5
|
+
run(argv: ReadonlyArray<string>, options: ProcOptions): Promise<ProcResult>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// SPEC §4.1.1 and §9.2: the real Proc port. argv arrays only, shell:false
|
|
2
|
+
// always, the child env built from the §9.2 allowlist (plus a tool's envPass
|
|
3
|
+
// restricted to that allowlist, GITHUB_* only when CI is set). Output past
|
|
4
|
+
// maxOutputBytes kills the tree and returns truncated:true; a timeout kills
|
|
5
|
+
// the process tree (SIGTERM, then SIGKILL or taskkill /T /F within 1 s) and
|
|
6
|
+
// returns timedOut:true.
|
|
7
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
8
|
+
// SPEC §9.2: the only names a child process may inherit or receive.
|
|
9
|
+
export const PROC_ENV_ALLOWLIST = [
|
|
10
|
+
"CI",
|
|
11
|
+
"HOME",
|
|
12
|
+
"LANG",
|
|
13
|
+
"LC_ALL",
|
|
14
|
+
"PATH",
|
|
15
|
+
"SystemRoot",
|
|
16
|
+
"TEMP",
|
|
17
|
+
"TMP",
|
|
18
|
+
"TMPDIR",
|
|
19
|
+
"USERPROFILE",
|
|
20
|
+
];
|
|
21
|
+
function takeEnv(into, name, value) {
|
|
22
|
+
if (value !== undefined) {
|
|
23
|
+
into[name] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function buildProcEnv(requested) {
|
|
27
|
+
const child = {};
|
|
28
|
+
const { CI: requestedCI } = requested;
|
|
29
|
+
const { CI: ambientCI } = process.env;
|
|
30
|
+
const ciActive = (requestedCI ?? ambientCI ?? "") !== "";
|
|
31
|
+
for (const name of PROC_ENV_ALLOWLIST) {
|
|
32
|
+
takeEnv(child, name, requested[name] ?? process.env[name]);
|
|
33
|
+
}
|
|
34
|
+
if (ciActive) {
|
|
35
|
+
for (const [name, value] of Object.entries(process.env)) {
|
|
36
|
+
if (name.startsWith("GITHUB_")) {
|
|
37
|
+
takeEnv(child, name, value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
for (const [name, value] of Object.entries(requested)) {
|
|
41
|
+
if (name.startsWith("GITHUB_")) {
|
|
42
|
+
takeEnv(child, name, value);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return child;
|
|
47
|
+
}
|
|
48
|
+
const KILL_GRACE_MS = 500;
|
|
49
|
+
function signalOne(pid, signal) {
|
|
50
|
+
try {
|
|
51
|
+
process.kill(pid, signal);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// SPEC §4.1.3 EC-6: the tree dies within 1 s even when the child ignores
|
|
59
|
+
// SIGTERM. POSIX kills the process group (SIGTERM, then SIGKILL after the
|
|
60
|
+
// grace); Windows has no SIGTERM semantics, so the first action is already
|
|
61
|
+
// taskkill /T /F, repeated on escalation to catch late grandchildren.
|
|
62
|
+
function killTree(pid, escalate) {
|
|
63
|
+
if (pid === undefined) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
if (process.platform === "win32") {
|
|
68
|
+
spawnSync("taskkill", ["/pid", String(pid), "/T", "/F"], {
|
|
69
|
+
stdio: "ignore",
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (escalate) {
|
|
74
|
+
if (!signalOne(-pid, "SIGKILL")) {
|
|
75
|
+
signalOne(pid, "SIGKILL");
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!signalOne(-pid, "SIGTERM")) {
|
|
80
|
+
signalOne(pid, "SIGTERM");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function pushChunk(state, store, chunk, max, kill) {
|
|
88
|
+
if (state.keptBytes >= max) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const room = max - state.keptBytes;
|
|
92
|
+
if (chunk.length <= room) {
|
|
93
|
+
store.push(chunk);
|
|
94
|
+
state.keptBytes += chunk.length;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
store.push(chunk.subarray(0, room));
|
|
98
|
+
state.keptBytes += room;
|
|
99
|
+
state.truncated = true;
|
|
100
|
+
kill();
|
|
101
|
+
}
|
|
102
|
+
function clearRunTimers(state) {
|
|
103
|
+
if (state.timer !== undefined) {
|
|
104
|
+
clearTimeout(state.timer);
|
|
105
|
+
state.timer = undefined;
|
|
106
|
+
}
|
|
107
|
+
if (state.grace !== undefined) {
|
|
108
|
+
clearTimeout(state.grace);
|
|
109
|
+
state.grace = undefined;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function makeRunState() {
|
|
113
|
+
return {
|
|
114
|
+
out: [],
|
|
115
|
+
err: [],
|
|
116
|
+
keptBytes: 0,
|
|
117
|
+
truncated: false,
|
|
118
|
+
timedOut: false,
|
|
119
|
+
settled: false,
|
|
120
|
+
timer: undefined,
|
|
121
|
+
grace: undefined,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function armTimeout(state, timeoutMs, onTimeout) {
|
|
125
|
+
state.timer = setTimeout(() => {
|
|
126
|
+
state.timedOut = true;
|
|
127
|
+
onTimeout();
|
|
128
|
+
}, timeoutMs);
|
|
129
|
+
}
|
|
130
|
+
function wireOutput(child, state, maxOutputBytes, ensureDead) {
|
|
131
|
+
child.stdout?.on("data", (chunk) => {
|
|
132
|
+
pushChunk(state, state.out, chunk, maxOutputBytes, ensureDead);
|
|
133
|
+
});
|
|
134
|
+
child.stderr?.on("data", (chunk) => {
|
|
135
|
+
pushChunk(state, state.err, chunk, maxOutputBytes, ensureDead);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function wireCompletion(child, finish) {
|
|
139
|
+
child.on("error", () => {
|
|
140
|
+
finish(-1);
|
|
141
|
+
});
|
|
142
|
+
child.on("close", (code) => {
|
|
143
|
+
finish(code ?? -1);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function feedStdin(child, stdin) {
|
|
147
|
+
if (stdin === undefined) {
|
|
148
|
+
child.stdin?.end();
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
child.stdin?.on("error", () => {
|
|
152
|
+
child.stdin?.destroy();
|
|
153
|
+
});
|
|
154
|
+
child.stdin?.write(stdin, () => {
|
|
155
|
+
child.stdin?.end();
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function runNodeProcess(file, args, options) {
|
|
159
|
+
return new Promise((resolve) => {
|
|
160
|
+
const state = makeRunState();
|
|
161
|
+
const finish = (code) => {
|
|
162
|
+
if (state.settled) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
state.settled = true;
|
|
166
|
+
clearRunTimers(state);
|
|
167
|
+
resolve({
|
|
168
|
+
code,
|
|
169
|
+
stdout: Buffer.concat(state.out).toString("utf8"),
|
|
170
|
+
stderr: Buffer.concat(state.err).toString("utf8"),
|
|
171
|
+
timedOut: state.timedOut,
|
|
172
|
+
truncated: state.truncated,
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
// SPEC §4.1.1: argv array only, shell:false; detached on POSIX so the
|
|
176
|
+
// timeout kill reaches the whole process group (EC-6).
|
|
177
|
+
const child = spawn(file, [...args], {
|
|
178
|
+
cwd: options.cwd,
|
|
179
|
+
env: buildProcEnv(options.env),
|
|
180
|
+
shell: false,
|
|
181
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
182
|
+
windowsHide: true,
|
|
183
|
+
detached: process.platform !== "win32",
|
|
184
|
+
});
|
|
185
|
+
const ensureDead = () => {
|
|
186
|
+
killTree(child.pid, false);
|
|
187
|
+
if (state.grace === undefined) {
|
|
188
|
+
state.grace = setTimeout(() => {
|
|
189
|
+
killTree(child.pid, true);
|
|
190
|
+
}, KILL_GRACE_MS);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
armTimeout(state, options.timeoutMs, ensureDead);
|
|
194
|
+
wireOutput(child, state, options.maxOutputBytes, ensureDead);
|
|
195
|
+
wireCompletion(child, finish);
|
|
196
|
+
feedStdin(child, options.stdin);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
export class NodeProc {
|
|
200
|
+
run(argv, options) {
|
|
201
|
+
const [file, ...args] = argv;
|
|
202
|
+
if (file === undefined) {
|
|
203
|
+
throw new Error("proc argv must list an executable first");
|
|
204
|
+
}
|
|
205
|
+
return runNodeProcess(file, args, options);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const caches = new WeakMap();
|
|
2
|
+
const decoder = new TextDecoder("utf-8", { fatal: false });
|
|
3
|
+
export function cachedLossyText(fs, path) {
|
|
4
|
+
let perFs = caches.get(fs);
|
|
5
|
+
if (perFs === undefined) {
|
|
6
|
+
perFs = new Map();
|
|
7
|
+
caches.set(fs, perFs);
|
|
8
|
+
}
|
|
9
|
+
const hit = perFs.get(path);
|
|
10
|
+
if (hit !== undefined) {
|
|
11
|
+
return hit;
|
|
12
|
+
}
|
|
13
|
+
const pending = fs.read(path).then((loaded) => {
|
|
14
|
+
if (!loaded.ok) {
|
|
15
|
+
return loaded;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
ok: true,
|
|
19
|
+
value: {
|
|
20
|
+
bytes: loaded.value.length,
|
|
21
|
+
text: decoder.decode(loaded.value),
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
perFs.set(path, pending);
|
|
26
|
+
return pending;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function redactSecrets(text: string): string;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// SPEC §4.7.1 detectors, implemented here in the kernel so engine, audit,
|
|
2
|
+
// adapters and generator can redact without importing security (§3.3).
|
|
3
|
+
// Every match is replaced by its first 4 characters plus its length;
|
|
4
|
+
// env references, placeholders and fixture paths are left unchanged.
|
|
5
|
+
const KNOWN_FORMATS = [
|
|
6
|
+
/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z0-9 ]*PRIVATE KEY-----/g,
|
|
7
|
+
/\bAKIA[0-9A-Z]{16}\b/g,
|
|
8
|
+
/\bghp_[A-Za-z0-9]{36,}\b/g,
|
|
9
|
+
/\bgho_[A-Za-z0-9]{36,}\b/g,
|
|
10
|
+
/\bghs_[A-Za-z0-9]{36,}\b/g,
|
|
11
|
+
/\bghu_[A-Za-z0-9]{36,}\b/g,
|
|
12
|
+
/\bghr_[A-Za-z0-9]{36,}\b/g,
|
|
13
|
+
/\bgithub_pat_[A-Za-z0-9_]{22,}\b/g,
|
|
14
|
+
/\bglpat-[A-Za-z0-9_-]{20,}/g,
|
|
15
|
+
/\bxox[abposr]-[A-Za-z0-9-]{8,}/g,
|
|
16
|
+
/\b[rs]k_live_[A-Za-z0-9]{16,}/g,
|
|
17
|
+
/\bAIza[A-Za-z0-9_-]{35}\b/g,
|
|
18
|
+
/\bnpm_[A-Za-z0-9]{36}\b/g,
|
|
19
|
+
/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}/g,
|
|
20
|
+
/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g,
|
|
21
|
+
];
|
|
22
|
+
// Keyword-first half of the assignment detector (SPEC §4.7.1): the same
|
|
23
|
+
// keyword alternation the old `["']?([A-Za-z0-9_.$-]*...)` pattern used,
|
|
24
|
+
// run alone so the engine can use a literal search instead of backtracking
|
|
25
|
+
// the leading name-character run at every position.
|
|
26
|
+
const KEYWORD_PATTERN = /secret|token|passw(?:or)?d|api[_-]?key|private[_-]?key|client[_-]?secret/gi;
|
|
27
|
+
// Sticky tail of an assignment match, anchored at the end of the keyword:
|
|
28
|
+
// the optional quote, separator and value run of the original pattern,
|
|
29
|
+
// split so the value (group 2) stays available for the entropy check.
|
|
30
|
+
const ASSIGNMENT_MID = /["']?\s*[:=]\s*["']?/y;
|
|
31
|
+
const ASSIGNMENT_VALUE = /[^\s"'`;,]+/y;
|
|
32
|
+
const ALLOW_PATTERNS = [
|
|
33
|
+
/process\.env\.[A-Za-z_][A-Za-z0-9_]*/g,
|
|
34
|
+
/\$\{[A-Za-z_][A-Za-z0-9_]*\}/g,
|
|
35
|
+
/\$[A-Za-z_][A-Za-z0-9_]*/g,
|
|
36
|
+
/os\.environ\s*\[[^\]\n]*\]/g,
|
|
37
|
+
];
|
|
38
|
+
const PLACEHOLDER_PATTERN = /^(?:x+|changeme|example|your[-_].*|<.*>)$/i;
|
|
39
|
+
function allowSpans(text) {
|
|
40
|
+
const spans = [];
|
|
41
|
+
for (const pattern of ALLOW_PATTERNS) {
|
|
42
|
+
pattern.lastIndex = 0;
|
|
43
|
+
let match = pattern.exec(text);
|
|
44
|
+
while (match !== null) {
|
|
45
|
+
spans.push({
|
|
46
|
+
start: match.index,
|
|
47
|
+
end: match.index + match[0].length,
|
|
48
|
+
replacement: match[0],
|
|
49
|
+
});
|
|
50
|
+
match = pattern.exec(text);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return spans;
|
|
54
|
+
}
|
|
55
|
+
// The `[A-Za-z0-9_.$-]` name class of the assignment detector as char
|
|
56
|
+
// codes, for the backward scan to the start of the name run.
|
|
57
|
+
function isNameChar(code) {
|
|
58
|
+
return ((code >= 0x30 && code <= 0x39) ||
|
|
59
|
+
(code >= 0x41 && code <= 0x5a) ||
|
|
60
|
+
(code >= 0x61 && code <= 0x7a) ||
|
|
61
|
+
code === 0x24 ||
|
|
62
|
+
code === 0x2e ||
|
|
63
|
+
code === 0x2d ||
|
|
64
|
+
code === 0x5f);
|
|
65
|
+
}
|
|
66
|
+
function isQuote(value) {
|
|
67
|
+
return value === '"' || value === "'";
|
|
68
|
+
}
|
|
69
|
+
function redact(match) {
|
|
70
|
+
return `${match.slice(0, 4)}…(${match.length})`;
|
|
71
|
+
}
|
|
72
|
+
function shannonPerChar(value) {
|
|
73
|
+
const counts = new Map();
|
|
74
|
+
for (const char of value) {
|
|
75
|
+
counts.set(char, (counts.get(char) ?? 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
let entropy = 0;
|
|
78
|
+
for (const count of counts.values()) {
|
|
79
|
+
const probability = count / value.length;
|
|
80
|
+
entropy -= probability * Math.log2(probability);
|
|
81
|
+
}
|
|
82
|
+
return entropy;
|
|
83
|
+
}
|
|
84
|
+
function isAllowedSecret(candidate) {
|
|
85
|
+
return PLACEHOLDER_PATTERN.test(candidate);
|
|
86
|
+
}
|
|
87
|
+
function assignmentSpans(text) {
|
|
88
|
+
const spans = [];
|
|
89
|
+
// Keyword-first scan: the original leading `[A-Za-z0-9_.$-]*` made the
|
|
90
|
+
// engine backtrack over every long run of name characters (quadratic on
|
|
91
|
+
// inputs like 65KB of `a`). Anchoring each attempt at a keyword keeps
|
|
92
|
+
// every scan over disjoint input. The original pattern also allowed
|
|
93
|
+
// trailing name characters after the keyword (`aws_secret_access_key`),
|
|
94
|
+
// so the separator check runs at the end of the name run; the floor
|
|
95
|
+
// advances past every examined run, keeping the scan linear.
|
|
96
|
+
KEYWORD_PATTERN.lastIndex = 0;
|
|
97
|
+
let keyword = KEYWORD_PATTERN.exec(text);
|
|
98
|
+
let floor = 0;
|
|
99
|
+
while (keyword !== null) {
|
|
100
|
+
const keywordStart = keyword.index;
|
|
101
|
+
const keywordEnd = keywordStart + keyword[0].length;
|
|
102
|
+
if (keywordStart >= floor) {
|
|
103
|
+
let nameEnd = keywordEnd;
|
|
104
|
+
while (nameEnd < text.length && isNameChar(text.charCodeAt(nameEnd))) {
|
|
105
|
+
nameEnd += 1;
|
|
106
|
+
}
|
|
107
|
+
floor = nameEnd;
|
|
108
|
+
ASSIGNMENT_MID.lastIndex = nameEnd;
|
|
109
|
+
const mid = ASSIGNMENT_MID.exec(text);
|
|
110
|
+
if (mid !== null) {
|
|
111
|
+
ASSIGNMENT_VALUE.lastIndex = ASSIGNMENT_MID.lastIndex;
|
|
112
|
+
const value = ASSIGNMENT_VALUE.exec(text);
|
|
113
|
+
if (value !== null) {
|
|
114
|
+
let end = ASSIGNMENT_VALUE.lastIndex;
|
|
115
|
+
if (isQuote(text[end])) {
|
|
116
|
+
end += 1;
|
|
117
|
+
}
|
|
118
|
+
let start = keywordStart;
|
|
119
|
+
while (start > 0 && isNameChar(text.charCodeAt(start - 1))) {
|
|
120
|
+
start -= 1;
|
|
121
|
+
}
|
|
122
|
+
if (start > 0 && isQuote(text[start - 1])) {
|
|
123
|
+
start -= 1;
|
|
124
|
+
}
|
|
125
|
+
const candidate = value[0];
|
|
126
|
+
const full = text.slice(start, end);
|
|
127
|
+
if (candidate.length >= 20 &&
|
|
128
|
+
shannonPerChar(candidate) >= 4 &&
|
|
129
|
+
!isAllowedSecret(candidate)) {
|
|
130
|
+
spans.push({
|
|
131
|
+
start,
|
|
132
|
+
end,
|
|
133
|
+
replacement: redact(full),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
floor = end;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
keyword = KEYWORD_PATTERN.exec(text);
|
|
141
|
+
}
|
|
142
|
+
return spans;
|
|
143
|
+
}
|
|
144
|
+
function formatSpans(text) {
|
|
145
|
+
const spans = [];
|
|
146
|
+
for (const pattern of KNOWN_FORMATS) {
|
|
147
|
+
pattern.lastIndex = 0;
|
|
148
|
+
let match = pattern.exec(text);
|
|
149
|
+
while (match !== null) {
|
|
150
|
+
const found = match[0];
|
|
151
|
+
if (!isAllowedSecret(found)) {
|
|
152
|
+
spans.push({
|
|
153
|
+
start: match.index,
|
|
154
|
+
end: match.index + found.length,
|
|
155
|
+
replacement: redact(found),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
match = pattern.exec(text);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return spans;
|
|
162
|
+
}
|
|
163
|
+
function mergeSpans(spans) {
|
|
164
|
+
const sorted = [...spans].sort((a, b) => a.start - b.start || b.end - a.end);
|
|
165
|
+
const merged = [];
|
|
166
|
+
for (const span of sorted) {
|
|
167
|
+
const last = merged[merged.length - 1];
|
|
168
|
+
if (last === undefined || span.start >= last.end) {
|
|
169
|
+
merged.push(span);
|
|
170
|
+
}
|
|
171
|
+
else if (span.end > last.end) {
|
|
172
|
+
merged[merged.length - 1] = { ...last, end: span.end };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return merged;
|
|
176
|
+
}
|
|
177
|
+
export function redactSecrets(text) {
|
|
178
|
+
// Both lists are sorted and non-overlapping after merging, so one sweep
|
|
179
|
+
// each replaces the per-candidate overlap scans (SPEC §4.7.1: the sort
|
|
180
|
+
// keeps the widest of overlapping candidates first, so the survivor is
|
|
181
|
+
// unchanged).
|
|
182
|
+
const allowed = mergeSpans(allowSpans(text));
|
|
183
|
+
const candidates = [...formatSpans(text), ...assignmentSpans(text)];
|
|
184
|
+
candidates.sort((a, b) => a.start - b.start || b.end - a.end);
|
|
185
|
+
const parts = [];
|
|
186
|
+
let cursor = 0;
|
|
187
|
+
let allowedIndex = 0;
|
|
188
|
+
for (const span of candidates) {
|
|
189
|
+
if (span.start < cursor) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
while (allowedIndex < allowed.length &&
|
|
193
|
+
(allowed[allowedIndex]?.end ?? 0) <= span.start) {
|
|
194
|
+
allowedIndex += 1;
|
|
195
|
+
}
|
|
196
|
+
const blocker = allowed[allowedIndex];
|
|
197
|
+
if (blocker !== undefined && blocker.start < span.end) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
parts.push(text.slice(cursor, span.start));
|
|
201
|
+
parts.push(span.replacement);
|
|
202
|
+
cursor = span.end;
|
|
203
|
+
}
|
|
204
|
+
parts.push(text.slice(cursor));
|
|
205
|
+
return parts.join("");
|
|
206
|
+
}
|