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,190 @@
|
|
|
1
|
+
// SPEC §4.14.4 + §4.14.5 + §4.19.2: regen, install-hooks and uninstall.
|
|
2
|
+
// Regen re-renders guardrails from config and rewrites the manifest;
|
|
3
|
+
// install-hooks writes the hooks and points core.hooksPath at them;
|
|
4
|
+
// uninstall removes generated files with the CI warning.
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
import { renderCustomRegenFragment } from "../features/adapters/index.js";
|
|
7
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
8
|
+
import { EXPECTED_HOOKS_PATH, HOOK_NAMES, hookInstallPlan, renderHookScript, } from "../features/integrity/index.js";
|
|
9
|
+
import { err, ok, resolveRepoRoot } from "../kernel/index.js";
|
|
10
|
+
import { guardrailPlan, writePlan } from "./plan.js";
|
|
11
|
+
import { checkHuman, commandEnv, fail, loadRepoConfig, portsFor, printHuman, printJson, readStateText, usageError, } from "./shared.js";
|
|
12
|
+
function repoNameOf(root) {
|
|
13
|
+
return root.replaceAll("\\", "/").split("/").pop() ?? "repo";
|
|
14
|
+
}
|
|
15
|
+
// SPEC §4.14.5: regen re-renders from config, so a profile chosen at init
|
|
16
|
+
// survives regeneration instead of being dropped from the rewritten config.
|
|
17
|
+
function profileOf(architecture) {
|
|
18
|
+
if (typeof architecture === "object" && architecture !== null) {
|
|
19
|
+
const profile = architecture.profile;
|
|
20
|
+
if (typeof profile === "string" && profile !== "") {
|
|
21
|
+
return profile;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
// SPEC §4.14.5: regen re-renders guardrails from config and rewrites the
|
|
27
|
+
// manifest; user text outside managed regions survives.
|
|
28
|
+
// Regen, install-hooks and uninstall reject positionals the same way.
|
|
29
|
+
function rejectPositionals(args, usage) {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = parseArgs({
|
|
32
|
+
args: [...args],
|
|
33
|
+
options: {},
|
|
34
|
+
allowPositionals: true,
|
|
35
|
+
});
|
|
36
|
+
if (parsed.positionals.length > 0) {
|
|
37
|
+
return usageError(usage);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return usageError(usage);
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
export async function handleRegen(req) {
|
|
46
|
+
const rejected = rejectPositionals(req.args, "usage: codictator regen");
|
|
47
|
+
if (rejected !== undefined) {
|
|
48
|
+
return rejected;
|
|
49
|
+
}
|
|
50
|
+
const root = await resolveRepoRoot(req.cwd);
|
|
51
|
+
if (!root.ok) {
|
|
52
|
+
return fail("CDX-E703", root.error.message, root.error.remediation, req.json);
|
|
53
|
+
}
|
|
54
|
+
const loaded = await loadRepoConfig(root.value, undefined, req.engineVersion ?? ENGINE_VERSION);
|
|
55
|
+
if (!loaded.ok) {
|
|
56
|
+
return fail(loaded.error.code, loaded.error.message, "Fix .codictator/config.json, then retry.", req.json);
|
|
57
|
+
}
|
|
58
|
+
const agents = await readStateText(root.value, "AGENTS.md");
|
|
59
|
+
const configured = loaded.value.effective.config;
|
|
60
|
+
const profile = profileOf(configured.architecture);
|
|
61
|
+
const customFiles = await renderCustomRegenFragment(root.value, configured);
|
|
62
|
+
if (!customFiles.ok) {
|
|
63
|
+
return fail(customFiles.error.code, customFiles.error.message, customFiles.error.remediation, req.json);
|
|
64
|
+
}
|
|
65
|
+
const plan = guardrailPlan(loaded.value.effective.config.harnesses, profile, repoNameOf(root.value), agents, {
|
|
66
|
+
packs: configured.packs,
|
|
67
|
+
tunables: configured.tunables,
|
|
68
|
+
architecture: configured.architecture,
|
|
69
|
+
tools: configured.tools,
|
|
70
|
+
}, req.engineVersion ?? ENGINE_VERSION);
|
|
71
|
+
const wrote = await writePlan(root.value, { files: [...plan.files, ...customFiles.value] }, req.engineVersion ?? ENGINE_VERSION);
|
|
72
|
+
if (!wrote.ok) {
|
|
73
|
+
return fail("CDX-E903", wrote.error.message, wrote.error.remediation, req.json);
|
|
74
|
+
}
|
|
75
|
+
if (req.json) {
|
|
76
|
+
printJson({
|
|
77
|
+
regenerated: true,
|
|
78
|
+
root: root.value,
|
|
79
|
+
files: wrote.value.map((entry) => entry.path),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
for (const entry of wrote.value) {
|
|
84
|
+
printHuman(`regenerated ${entry.path}`, req.quiet);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return ok(0);
|
|
88
|
+
}
|
|
89
|
+
function encode(text) {
|
|
90
|
+
return new TextEncoder().encode(text);
|
|
91
|
+
}
|
|
92
|
+
async function writeHookFiles(root) {
|
|
93
|
+
const ports = await portsFor(root);
|
|
94
|
+
if (!ports.ok) {
|
|
95
|
+
return err(ports.error);
|
|
96
|
+
}
|
|
97
|
+
for (const hook of HOOK_NAMES) {
|
|
98
|
+
const done = await ports.value.fs.write(`${EXPECTED_HOOKS_PATH}/${hook}`, encode(renderHookScript(hook)));
|
|
99
|
+
if (!done.ok) {
|
|
100
|
+
return err(done.error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const plan = hookInstallPlan({});
|
|
104
|
+
const attrs = await ports.value.fs.write(`${EXPECTED_HOOKS_PATH}/.gitattributes`, encode(plan.gitattributes));
|
|
105
|
+
if (!attrs.ok) {
|
|
106
|
+
return err(attrs.error);
|
|
107
|
+
}
|
|
108
|
+
return ok(true);
|
|
109
|
+
}
|
|
110
|
+
async function configureHooksPath(root, req) {
|
|
111
|
+
const ports = await portsFor(root);
|
|
112
|
+
if (!ports.ok) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const plan = hookInstallPlan({});
|
|
116
|
+
const set = await ports.value.proc.run(["git", "config", "core.hooksPath", plan.hooksPath], { cwd: root, env: {}, timeoutMs: 15000, maxOutputBytes: 65536 });
|
|
117
|
+
if (set.code !== 0) {
|
|
118
|
+
printHuman("warn: git config core.hooksPath failed; set it by hand", req.quiet);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// SPEC §4.14.4: install-hooks writes the hooks and points core.hooksPath
|
|
122
|
+
// at them; the npm prepare script and gitattributes remediation ship too.
|
|
123
|
+
export async function handleInstallHooks(req) {
|
|
124
|
+
const rejected = rejectPositionals(req.args, "usage: codictator install-hooks");
|
|
125
|
+
if (rejected !== undefined) {
|
|
126
|
+
return rejected;
|
|
127
|
+
}
|
|
128
|
+
const root = await resolveRepoRoot(req.cwd);
|
|
129
|
+
if (!root.ok) {
|
|
130
|
+
return fail("CDX-E703", root.error.message, root.error.remediation, req.json);
|
|
131
|
+
}
|
|
132
|
+
const written = await writeHookFiles(root.value);
|
|
133
|
+
if (!written.ok) {
|
|
134
|
+
return fail("CDX-E903", written.error.message, written.error.remediation, req.json);
|
|
135
|
+
}
|
|
136
|
+
await configureHooksPath(root.value, req);
|
|
137
|
+
const plan = hookInstallPlan({});
|
|
138
|
+
if (req.json) {
|
|
139
|
+
printJson({ installed: true, hooksPath: plan.hooksPath, root: root.value });
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
printHuman(`hooks installed at ${plan.hooksPath}; prepare script: ${plan.prepareScript}`, req.quiet);
|
|
143
|
+
}
|
|
144
|
+
return ok(0);
|
|
145
|
+
}
|
|
146
|
+
async function removeGuardrails(root) {
|
|
147
|
+
const ports = await portsFor(root);
|
|
148
|
+
if (!ports.ok) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const targets = [
|
|
152
|
+
".codictator/config.json",
|
|
153
|
+
".codictator/manifest.json",
|
|
154
|
+
".github/workflows/codictator.yml",
|
|
155
|
+
...HOOK_NAMES.map((hook) => `${EXPECTED_HOOKS_PATH}/${hook}`),
|
|
156
|
+
];
|
|
157
|
+
for (const target of targets) {
|
|
158
|
+
const seen = await ports.value.fs.exists(target);
|
|
159
|
+
if (seen.ok && seen.value) {
|
|
160
|
+
await ports.value.fs.remove(target);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// SPEC §4.19.2: uninstall removes generated files, records a guardrail
|
|
165
|
+
// entry, and prints that CI fails until its workflow and required check
|
|
166
|
+
// are removed too. Human-only.
|
|
167
|
+
export async function handleUninstall(req) {
|
|
168
|
+
const rejected = rejectPositionals(req.args, "usage: codictator uninstall");
|
|
169
|
+
if (rejected !== undefined) {
|
|
170
|
+
return rejected;
|
|
171
|
+
}
|
|
172
|
+
const human = checkHuman(commandEnv(), []);
|
|
173
|
+
if (!human.ok) {
|
|
174
|
+
return fail("CDX-E107", human.error.message, human.error.remediation, req.json);
|
|
175
|
+
}
|
|
176
|
+
const root = await resolveRepoRoot(req.cwd);
|
|
177
|
+
if (!root.ok) {
|
|
178
|
+
return fail("CDX-E703", root.error.message, root.error.remediation, req.json);
|
|
179
|
+
}
|
|
180
|
+
await removeGuardrails(root.value);
|
|
181
|
+
const note = "CI will fail until its workflow and required check are removed too.";
|
|
182
|
+
if (req.json) {
|
|
183
|
+
printJson({ uninstalled: true, root: root.value, note });
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
printHuman(`uninstalled guardrails from ${root.value}`, req.quiet);
|
|
187
|
+
printHuman(note, req.quiet);
|
|
188
|
+
}
|
|
189
|
+
return ok(0);
|
|
190
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CdxError, Result } from "../kernel/index.ts";
|
|
2
|
+
export interface CliOptions {
|
|
3
|
+
readonly argv: ReadonlyArray<string>;
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly stdinText?: string;
|
|
6
|
+
readonly nodeVersion?: string;
|
|
7
|
+
readonly engineVersion?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runHook(options: CliOptions): Promise<number>;
|
|
10
|
+
export declare function runCommand(options: CliOptions): Promise<Result<number>>;
|
|
11
|
+
export declare function runServer(options: CliOptions): Promise<number>;
|
|
12
|
+
export type { CdxError };
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// SPEC §4.19: composition root. Commands, hook entry, server. May import
|
|
2
|
+
// everything (§3.3); owns no §7 format.
|
|
3
|
+
import { HOOK_PAYLOAD_MAX_BYTES, hookBudgetMs, runHookEvent, staticBlock, supportedHarness, } from "../features/adapters/index.js";
|
|
4
|
+
import { appendEvent } from "../features/audit/index.js";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { err, NodeEnv, NodeFs, NodeGit, NodeNet, NodeProc, ok, readStdinText, SystemClock, } from "../kernel/index.js";
|
|
7
|
+
import { COMMANDS, USAGE } from "./commands.js";
|
|
8
|
+
import { loadEvalEnforcers } from "./evaluate.js";
|
|
9
|
+
import { startStdioServer } from "./serve-server.js";
|
|
10
|
+
import { MIN_NODE_MAJOR, nodeMajor, nodeTooOldMessage, printHuman, usageError, } from "./shared.js";
|
|
11
|
+
// SPEC §4.19.3 steps 3 and 5: the verdict line lands in the resolved repo's
|
|
12
|
+
// event log. An append failure is the engine's CDX-E801 path, never a throw
|
|
13
|
+
// here, so writer faults stay fail-closed without crashing the hook.
|
|
14
|
+
// SPEC §4.1.1: the Fs is already confined to root, so the logical root is
|
|
15
|
+
// "." and every audit path stays repo-relative.
|
|
16
|
+
async function appendLine(root, event, ports) {
|
|
17
|
+
const fsMade = await NodeFs.create({ root });
|
|
18
|
+
if (!fsMade.ok) {
|
|
19
|
+
return fsMade;
|
|
20
|
+
}
|
|
21
|
+
return appendEvent({
|
|
22
|
+
fs: fsMade.value,
|
|
23
|
+
proc: ports.proc,
|
|
24
|
+
net: ports.net,
|
|
25
|
+
clock: ports.clock,
|
|
26
|
+
git: new NodeGit(ports.proc, root),
|
|
27
|
+
env: ports.env,
|
|
28
|
+
}, ".", event);
|
|
29
|
+
}
|
|
30
|
+
// The old-node rejection: a static block when the harness has one,
|
|
31
|
+
// stderr plus exit 6 otherwise.
|
|
32
|
+
function oldNodeExit(harness, version) {
|
|
33
|
+
const staticReply = harness === ""
|
|
34
|
+
? undefined
|
|
35
|
+
: staticBlock(harness, "CDX-E002", nodeTooOldMessage(version));
|
|
36
|
+
if (staticReply === undefined) {
|
|
37
|
+
process.stderr.write(`${nodeTooOldMessage(version)}\n`);
|
|
38
|
+
return 6;
|
|
39
|
+
}
|
|
40
|
+
return emitReply(staticReply.stdout, staticReply.stderr, staticReply.exitCode);
|
|
41
|
+
}
|
|
42
|
+
// A failed stdin wait fails closed: a static block when the harness has
|
|
43
|
+
// one, stderr plus exit 1 otherwise.
|
|
44
|
+
function blockedStdinExit(harness, code, message) {
|
|
45
|
+
const blocked = staticBlock(harness, code, message);
|
|
46
|
+
if (blocked === undefined) {
|
|
47
|
+
process.stderr.write(`${code} ${message}\n`);
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
return emitReply(blocked.stdout, blocked.stderr, blocked.exitCode);
|
|
51
|
+
}
|
|
52
|
+
// The hook invocation resolves its stdin first: an idle pipe fails closed
|
|
53
|
+
// with CDX-E902 instead of hanging past the time limit (§4.5.5), while an
|
|
54
|
+
// unknown harness never had a payload and answers without I/O.
|
|
55
|
+
async function invokeHookEvent(harness, event, stdinText, cwd, ports, append, engineVersion) {
|
|
56
|
+
let text = stdinText;
|
|
57
|
+
if (text === undefined && supportedHarness(harness)) {
|
|
58
|
+
const stdin = await readStdinText(HOOK_PAYLOAD_MAX_BYTES, hookBudgetMs(harness));
|
|
59
|
+
if (!stdin.ok) {
|
|
60
|
+
return blockedStdinExit(harness, stdin.error.code, stdin.error.message);
|
|
61
|
+
}
|
|
62
|
+
text = stdin.value;
|
|
63
|
+
}
|
|
64
|
+
const reply = await runHookEvent({
|
|
65
|
+
harness,
|
|
66
|
+
event,
|
|
67
|
+
stdinText: text ?? "",
|
|
68
|
+
cwd,
|
|
69
|
+
ports,
|
|
70
|
+
append,
|
|
71
|
+
engineVersion,
|
|
72
|
+
// SPEC §4.19.3 step 5: the hook evaluates the same pack enforcers
|
|
73
|
+
// the verify path loads (core plus the configured builtin packs),
|
|
74
|
+
// resolved against the runtime's root-confined ports.
|
|
75
|
+
loadEnforcers: loadEvalEnforcers,
|
|
76
|
+
});
|
|
77
|
+
return emitReply(reply.stdout, reply.stderr, reply.exitCode);
|
|
78
|
+
}
|
|
79
|
+
function emitReply(stdout, stderr, exitCode) {
|
|
80
|
+
if (stdout !== "") {
|
|
81
|
+
process.stdout.write(stdout);
|
|
82
|
+
}
|
|
83
|
+
if (stderr !== "") {
|
|
84
|
+
process.stderr.write(stderr);
|
|
85
|
+
}
|
|
86
|
+
return exitCode;
|
|
87
|
+
}
|
|
88
|
+
// SPEC §4.19.3: hook runtime entry; an uncaught error becomes a block. The
|
|
89
|
+
// reply goes to stdout verbatim (the harness parses it; golden EC-14 pins
|
|
90
|
+
// stdout exactly), diagnostics to stderr, and the harness exit code returns.
|
|
91
|
+
// Nothing reads the disk before the runtime resolves the repo root, so
|
|
92
|
+
// unknown harnesses and empty payloads answer without I/O.
|
|
93
|
+
export async function runHook(options) {
|
|
94
|
+
const harness = options.argv[1] ?? "";
|
|
95
|
+
const event = options.argv[2] ?? "";
|
|
96
|
+
const version = options.nodeVersion ?? process.version;
|
|
97
|
+
if (nodeMajor(version) < MIN_NODE_MAJOR) {
|
|
98
|
+
return oldNodeExit(harness, version);
|
|
99
|
+
}
|
|
100
|
+
const ports = {
|
|
101
|
+
proc: new NodeProc(),
|
|
102
|
+
net: new NodeNet(),
|
|
103
|
+
clock: new SystemClock(),
|
|
104
|
+
env: new NodeEnv(),
|
|
105
|
+
};
|
|
106
|
+
const append = (root, line) => appendLine(root, line, ports);
|
|
107
|
+
return invokeHookEvent(harness, event, options.stdinText, options.cwd, ports, append, options.engineVersion ?? ENGINE_VERSION);
|
|
108
|
+
}
|
|
109
|
+
function scanGlobals(argv, cwd) {
|
|
110
|
+
let json = false;
|
|
111
|
+
let quiet = false;
|
|
112
|
+
let help = false;
|
|
113
|
+
let override;
|
|
114
|
+
const rest = [];
|
|
115
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
116
|
+
const token = argv[index] ?? "";
|
|
117
|
+
if (token === "--json") {
|
|
118
|
+
json = true;
|
|
119
|
+
}
|
|
120
|
+
else if (token === "--quiet") {
|
|
121
|
+
quiet = true;
|
|
122
|
+
}
|
|
123
|
+
else if (token === "--help" || token === "-h") {
|
|
124
|
+
help = true;
|
|
125
|
+
}
|
|
126
|
+
else if (token === "--cwd") {
|
|
127
|
+
const next = argv[index + 1];
|
|
128
|
+
if (next === undefined) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
override = next;
|
|
132
|
+
index += 1;
|
|
133
|
+
}
|
|
134
|
+
else if (token.startsWith("--cwd=")) {
|
|
135
|
+
override = token.slice("--cwd=".length);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
rest.push(token);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { json, quiet, cwd: override ?? cwd, help, rest };
|
|
142
|
+
}
|
|
143
|
+
// SPEC §4.19 + §8.2: the command entry. The node floor fails as CDX-E002
|
|
144
|
+
// (exit 6); unknown commands or flags are usage errors (exit 2, no code).
|
|
145
|
+
async function runCommandImpl(options) {
|
|
146
|
+
const version = options.nodeVersion ?? process.version;
|
|
147
|
+
if (nodeMajor(version) < MIN_NODE_MAJOR) {
|
|
148
|
+
process.stderr.write(`${nodeTooOldMessage(version)}\n`);
|
|
149
|
+
return err({
|
|
150
|
+
code: "CDX-E002",
|
|
151
|
+
message: nodeTooOldMessage(version),
|
|
152
|
+
remediation: "Install a newer Node, then retry the tool call.",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const globals = scanGlobals(options.argv, options.cwd);
|
|
156
|
+
if (globals === undefined) {
|
|
157
|
+
return usageError(USAGE);
|
|
158
|
+
}
|
|
159
|
+
if (globals.help) {
|
|
160
|
+
printHuman(USAGE, globals.quiet);
|
|
161
|
+
return ok(0);
|
|
162
|
+
}
|
|
163
|
+
if (globals.rest.length === 0) {
|
|
164
|
+
return usageError(USAGE);
|
|
165
|
+
}
|
|
166
|
+
const [command, ...args] = globals.rest;
|
|
167
|
+
const handler = COMMANDS[command];
|
|
168
|
+
if (handler === undefined) {
|
|
169
|
+
return usageError(`${USAGE}\nunknown command "${command}"`);
|
|
170
|
+
}
|
|
171
|
+
return handler({
|
|
172
|
+
args,
|
|
173
|
+
json: globals.json,
|
|
174
|
+
quiet: globals.quiet,
|
|
175
|
+
cwd: globals.cwd,
|
|
176
|
+
nodeVersion: options.nodeVersion,
|
|
177
|
+
stdinText: undefined,
|
|
178
|
+
engineVersion: options.engineVersion ?? ENGINE_VERSION,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// SPEC §4.19: command dispatch (init, regen, verify, task, review, ...).
|
|
182
|
+
// The hook word routes back through the hook runtime; every other word
|
|
183
|
+
// goes through the command table in commands.ts. The hook reply is already emitted
|
|
184
|
+
// by runHook, so its harness exit code passes through as the value.
|
|
185
|
+
export function runCommand(options) {
|
|
186
|
+
if (options.argv[0] === "hook") {
|
|
187
|
+
return runHook(options).then((exitCode) => ({ ok: true, value: exitCode }));
|
|
188
|
+
}
|
|
189
|
+
return runCommandImpl(options);
|
|
190
|
+
}
|
|
191
|
+
// SPEC §7.15 + §4.19.5: stdio server entry for the vscode extension. The
|
|
192
|
+
// loop serves one NDJSON session on this process's stdio; commands run
|
|
193
|
+
// through the same table with per-call output capture (see serve-run.ts),
|
|
194
|
+
// so frames stay the only stdout bytes. A closed stdin (no piped client)
|
|
195
|
+
// exits 0 without serving.
|
|
196
|
+
export function runServer(options) {
|
|
197
|
+
return startStdioServer(options, runCommand);
|
|
198
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Result } from "../kernel/index.ts";
|
|
2
|
+
import { guardrailPlan } from "./plan.ts";
|
|
3
|
+
import type { CommandRequest } from "./shared.ts";
|
|
4
|
+
export interface InitFlags {
|
|
5
|
+
readonly harnesses: Array<string>;
|
|
6
|
+
readonly profile: string;
|
|
7
|
+
readonly packs: Array<string>;
|
|
8
|
+
readonly tools: Array<{
|
|
9
|
+
role: string;
|
|
10
|
+
command: string;
|
|
11
|
+
pin: string;
|
|
12
|
+
}>;
|
|
13
|
+
readonly repair: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function ensureBaseline(root: string, req: CommandRequest): Promise<Result<boolean>>;
|
|
16
|
+
export declare function defaultHarnesses(flags: InitFlags): Array<string>;
|
|
17
|
+
export declare function reportExisting(req: CommandRequest, root: string): Result<number>;
|
|
18
|
+
export declare function checkFreshConfig(root: string, req: CommandRequest): Promise<Result<number>>;
|
|
19
|
+
export declare function emitInitResult(req: CommandRequest, root: string, written: ReadonlyArray<{
|
|
20
|
+
path: string;
|
|
21
|
+
}>, baselineWritten: boolean): Result<number>;
|
|
22
|
+
export declare function initPreamble(req: CommandRequest): Promise<string | Result<number>>;
|
|
23
|
+
export declare function buildGuardrailPlan(root: string, flags: InitFlags, planned: ReadonlyArray<string>, engineVersion?: string): Promise<ReturnType<typeof guardrailPlan>>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// SPEC §4.13.1 + §4.14.1: init execution. Split from the init command
|
|
2
|
+
// (init.ts) by responsibility: flag parsing stays on the command, module
|
|
3
|
+
// detection, baseline, guards and plan assembly live here.
|
|
4
|
+
import { CODICTATOR_MODULES } from "../features/arch/index.js";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { captureBaseline } from "../features/remediation/index.js";
|
|
7
|
+
import { ok, parseJson, resolveRepoRoot, stableStringify, } from "../kernel/index.js";
|
|
8
|
+
import { buildHelperTool, guardrailPlan } from "./plan.js";
|
|
9
|
+
import { checkHuman, commandEnv, fail, loadRepoConfig, printHuman, printJson, readStateText, writeStateText, } from "./shared.js";
|
|
10
|
+
// SPEC §4.19.2: a helper tool proposal names the helper role, the binary
|
|
11
|
+
// and the exact pin from the human's registry lookup: role=command@pin.
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
// SPEC §4.11.2 + §3.3: on the Codictator repo itself, init proposes the
|
|
16
|
+
// canonical module map the arch guard dogfoods (profiles.ts), rewritten to
|
|
17
|
+
// repo-relative paths. Any other repo gets no modules; the human adds them.
|
|
18
|
+
async function detectCodictatorModules(root) {
|
|
19
|
+
const text = await readStateText(root, "packages/codictator/package.json");
|
|
20
|
+
if (text === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const parsed = parseJson(text);
|
|
24
|
+
if (!parsed.ok || !isRecord(parsed.value)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const nameKey = "name";
|
|
28
|
+
if (parsed.value[nameKey] !== "codictator") {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return CODICTATOR_MODULES.map((mod) => ({
|
|
32
|
+
name: mod.name,
|
|
33
|
+
path: `packages/codictator/${mod.path}`,
|
|
34
|
+
...(mod.kind === undefined ? {} : { kind: mod.kind }),
|
|
35
|
+
...(mod.entry === undefined ? {} : { entry: mod.entry }),
|
|
36
|
+
dependsOn: [...mod.dependsOn],
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
// SPEC §4.13.1 step 3: init captures the baseline. On a greenfield repo the
|
|
40
|
+
// first verify has no findings, so the capture is the empty ratchet. An
|
|
41
|
+
// existing baseline (repair, L3 tighten, capture) is never overwritten.
|
|
42
|
+
export async function ensureBaseline(root, req) {
|
|
43
|
+
const existing = await readStateText(root, ".codictator/baseline.json");
|
|
44
|
+
if (existing !== undefined) {
|
|
45
|
+
return ok(false);
|
|
46
|
+
}
|
|
47
|
+
const captured = await captureBaseline(root, []);
|
|
48
|
+
if (!captured.ok) {
|
|
49
|
+
return fail("CDX-E903", captured.error.message, captured.error.remediation, req.json);
|
|
50
|
+
}
|
|
51
|
+
const saved = await writeStateText(root, ".codictator/baseline.json", `${stableStringify(captured.value)}\n`);
|
|
52
|
+
if (!saved.ok) {
|
|
53
|
+
return fail("CDX-E903", saved.error.message, saved.error.remediation, req.json);
|
|
54
|
+
}
|
|
55
|
+
return ok(true);
|
|
56
|
+
}
|
|
57
|
+
// SPEC §4.19.2: init harnesses default to every known adapter id when no
|
|
58
|
+
// --harness flag is given; unknown ids fail as CDX-E301 via config
|
|
59
|
+
// validation, never silently.
|
|
60
|
+
const DEFAULT_HARNESSES = [
|
|
61
|
+
"muse-code",
|
|
62
|
+
"universal",
|
|
63
|
+
"claude-code",
|
|
64
|
+
"copilot",
|
|
65
|
+
"codex-cli",
|
|
66
|
+
"cursor",
|
|
67
|
+
"gemini-cli",
|
|
68
|
+
"opencode",
|
|
69
|
+
];
|
|
70
|
+
export function defaultHarnesses(flags) {
|
|
71
|
+
return flags.harnesses.length > 0 ? flags.harnesses : [...DEFAULT_HARNESSES];
|
|
72
|
+
}
|
|
73
|
+
export function reportExisting(req, root) {
|
|
74
|
+
printHuman("already a Codictator repo; rerun with --repair to regenerate", req.quiet);
|
|
75
|
+
if (req.json) {
|
|
76
|
+
printJson({ initialized: false, reason: "exists", root });
|
|
77
|
+
}
|
|
78
|
+
return ok(0);
|
|
79
|
+
}
|
|
80
|
+
export async function checkFreshConfig(root, req) {
|
|
81
|
+
const fresh = await loadRepoConfig(root, undefined, req.engineVersion ?? ENGINE_VERSION);
|
|
82
|
+
if (!fresh.ok) {
|
|
83
|
+
return fail("CDX-E901", fresh.error.message, "Rerun codictator init --repair; report the mismatch.", req.json, fresh.error.detail);
|
|
84
|
+
}
|
|
85
|
+
return ok(0);
|
|
86
|
+
}
|
|
87
|
+
export function emitInitResult(req, root, written, baselineWritten) {
|
|
88
|
+
const files = baselineWritten === false
|
|
89
|
+
? written
|
|
90
|
+
: [...written, { path: ".codictator/baseline.json" }];
|
|
91
|
+
if (req.json) {
|
|
92
|
+
printJson({
|
|
93
|
+
initialized: true,
|
|
94
|
+
root,
|
|
95
|
+
files: files.map((entry) => entry.path),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
for (const entry of files) {
|
|
100
|
+
printHuman(`wrote ${entry.path}`, req.quiet);
|
|
101
|
+
}
|
|
102
|
+
printHuman("init: run npm ci, then codictator install-hooks", req.quiet);
|
|
103
|
+
}
|
|
104
|
+
return ok(0);
|
|
105
|
+
}
|
|
106
|
+
export async function initPreamble(req) {
|
|
107
|
+
const human = checkHuman(commandEnv(), []);
|
|
108
|
+
if (!human.ok) {
|
|
109
|
+
return fail("CDX-E107", human.error.message, human.error.remediation, req.json);
|
|
110
|
+
}
|
|
111
|
+
const root = await resolveRepoRoot(req.cwd);
|
|
112
|
+
if (!root.ok) {
|
|
113
|
+
return fail("CDX-E703", root.error.message, root.error.remediation, req.json);
|
|
114
|
+
}
|
|
115
|
+
return root.value;
|
|
116
|
+
}
|
|
117
|
+
// The plan assembly handleInit writes: read-only inputs in, GuardrailPlan
|
|
118
|
+
// out. Writing stays on the command so the plan builder never touches
|
|
119
|
+
// the disk.
|
|
120
|
+
export async function buildGuardrailPlan(root, flags, planned, engineVersion = ENGINE_VERSION) {
|
|
121
|
+
const agents = await readStateText(root, "AGENTS.md");
|
|
122
|
+
const repoName = root.replaceAll("\\", "/").split("/").pop() ?? "repo";
|
|
123
|
+
const modules = await detectCodictatorModules(root);
|
|
124
|
+
const architecture = modules === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: {
|
|
127
|
+
...(flags.profile === "" ? {} : { profile: flags.profile }),
|
|
128
|
+
modules,
|
|
129
|
+
};
|
|
130
|
+
return guardrailPlan(planned, flags.profile, repoName, agents, {
|
|
131
|
+
packs: flags.packs.map((id) => ({ id, version: engineVersion })),
|
|
132
|
+
tools: flags.tools.map((tool) => buildHelperTool(tool)),
|
|
133
|
+
...(architecture === undefined ? {} : { architecture }),
|
|
134
|
+
}, engineVersion);
|
|
135
|
+
}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// SPEC §4.19.2 + §4.13.1: human-only adoption. Writes config, steering
|
|
2
|
+
// block, manifest, CI workflow, hooks and launcher; existing config needs
|
|
3
|
+
// --repair, unknown harnesses fail as CDX-E301 via validation.
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { ENGINE_VERSION } from "../features/config/index.js";
|
|
6
|
+
import { isBuiltinPackId } from "../features/packs/index.js";
|
|
7
|
+
import { buildGuardrailPlan, checkFreshConfig, defaultHarnesses, emitInitResult, ensureBaseline, initPreamble, reportExisting, } from "./init-plan.js";
|
|
8
|
+
import { KNOWN_HELPER_ROLES, writePlan } from "./plan.js";
|
|
9
|
+
import { fail, readStateText, usageError } from "./shared.js";
|
|
10
|
+
const KNOWN_PROFILES = new Set([
|
|
11
|
+
"app",
|
|
12
|
+
"library",
|
|
13
|
+
"cli",
|
|
14
|
+
"service",
|
|
15
|
+
]);
|
|
16
|
+
function parseToolSpec(spec) {
|
|
17
|
+
const eq = spec.indexOf("=");
|
|
18
|
+
if (eq < 0) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const role = spec.slice(0, eq).trim();
|
|
22
|
+
const rest = spec.slice(eq + 1);
|
|
23
|
+
const at = rest.lastIndexOf("@");
|
|
24
|
+
if (at < 0) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const command = rest.slice(0, at).trim();
|
|
28
|
+
const pin = rest.slice(at + 1).trim();
|
|
29
|
+
if (!KNOWN_HELPER_ROLES.has(role) || command === "" || pin === "") {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return { role, command, pin };
|
|
33
|
+
}
|
|
34
|
+
function narrowInitProfile(profile) {
|
|
35
|
+
if (profile !== undefined && profile !== "" && !KNOWN_PROFILES.has(profile)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return profile ?? "";
|
|
39
|
+
}
|
|
40
|
+
function narrowInitPacks(packs) {
|
|
41
|
+
const ids = [...(packs ?? [])];
|
|
42
|
+
if (ids.some((id) => !isBuiltinPackId(id))) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return ids;
|
|
46
|
+
}
|
|
47
|
+
function narrowInitTools(specs) {
|
|
48
|
+
const tools = [];
|
|
49
|
+
for (const spec of specs ?? []) {
|
|
50
|
+
const tool = parseToolSpec(spec);
|
|
51
|
+
if (tool === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
tools.push(tool);
|
|
55
|
+
}
|
|
56
|
+
return tools;
|
|
57
|
+
}
|
|
58
|
+
function parseInitFlags(args) {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = parseArgs({
|
|
61
|
+
args: [...args],
|
|
62
|
+
options: {
|
|
63
|
+
harness: { type: "string", multiple: true, default: [] },
|
|
64
|
+
profile: { type: "string", default: "" },
|
|
65
|
+
pack: { type: "string", multiple: true, default: [] },
|
|
66
|
+
tool: { type: "string", multiple: true, default: [] },
|
|
67
|
+
repair: { type: "boolean", default: false },
|
|
68
|
+
},
|
|
69
|
+
allowPositionals: true,
|
|
70
|
+
});
|
|
71
|
+
if (parsed.positionals.length > 0) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const profile = narrowInitProfile(parsed.values.profile);
|
|
75
|
+
const packs = narrowInitPacks(parsed.values.pack);
|
|
76
|
+
const tools = narrowInitTools(parsed.values.tool);
|
|
77
|
+
if (profile === undefined || packs === undefined || tools === undefined) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
harnesses: [...(parsed.values.harness ?? [])],
|
|
82
|
+
profile,
|
|
83
|
+
packs,
|
|
84
|
+
tools,
|
|
85
|
+
repair: parsed.values.repair ?? false,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const INIT_USAGE = "usage: codictator init [--harness <id> ...] [--profile <app|library|cli|service>] [--pack <id> ...] [--tool <role>=<command>@<pin> ...] [--repair]";
|
|
93
|
+
export async function handleInit(req) {
|
|
94
|
+
const flags = parseInitFlags(req.args);
|
|
95
|
+
if (flags === undefined) {
|
|
96
|
+
return usageError(INIT_USAGE);
|
|
97
|
+
}
|
|
98
|
+
const root = await initPreamble(req);
|
|
99
|
+
if (typeof root !== "string") {
|
|
100
|
+
return root;
|
|
101
|
+
}
|
|
102
|
+
const planned = defaultHarnesses(flags);
|
|
103
|
+
const engineVersion = req.engineVersion ?? ENGINE_VERSION;
|
|
104
|
+
const existing = await readStateText(root, ".codictator/config.json");
|
|
105
|
+
if (existing !== undefined && !flags.repair) {
|
|
106
|
+
return reportExisting(req, root);
|
|
107
|
+
}
|
|
108
|
+
const plan = await buildGuardrailPlan(root, flags, planned, engineVersion);
|
|
109
|
+
const wrote = await writePlan(root, plan, engineVersion);
|
|
110
|
+
if (!wrote.ok) {
|
|
111
|
+
return fail("CDX-E903", wrote.error.message, wrote.error.remediation, req.json);
|
|
112
|
+
}
|
|
113
|
+
const fresh = await checkFreshConfig(root, req);
|
|
114
|
+
if (!fresh.ok) {
|
|
115
|
+
return fresh;
|
|
116
|
+
}
|
|
117
|
+
const baseline = await ensureBaseline(root, req);
|
|
118
|
+
if (!baseline.ok) {
|
|
119
|
+
return fail(baseline.error.code, baseline.error.message, baseline.error.remediation, req.json);
|
|
120
|
+
}
|
|
121
|
+
return emitInitResult(req, root, wrote.value, baseline.value);
|
|
122
|
+
}
|