@allocator-one/rcl 4.4.19
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 +21 -0
- package/README.md +1415 -0
- package/dist/ci.d.ts +16 -0
- package/dist/ci.js +42 -0
- package/dist/ci.js.map +1 -0
- package/dist/config/data-dir.d.ts +6 -0
- package/dist/config/data-dir.js +12 -0
- package/dist/config/data-dir.js.map +1 -0
- package/dist/config/defaults.d.ts +82 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/harness.d.ts +40 -0
- package/dist/config/harness.js +151 -0
- package/dist/config/harness.js.map +1 -0
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.js +131 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/provider-concurrency.d.ts +4 -0
- package/dist/config/provider-concurrency.js +6 -0
- package/dist/config/provider-concurrency.js.map +1 -0
- package/dist/config/providers.d.ts +3 -0
- package/dist/config/providers.js +9 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/schema.d.ts +179 -0
- package/dist/config/schema.js +115 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/consensus/claim-contract.d.ts +9 -0
- package/dist/consensus/claim-contract.js +307 -0
- package/dist/consensus/claim-contract.js.map +1 -0
- package/dist/consensus/claim-identity.d.ts +5 -0
- package/dist/consensus/claim-identity.js +39 -0
- package/dist/consensus/claim-identity.js.map +1 -0
- package/dist/consensus/deduper.d.ts +43 -0
- package/dist/consensus/deduper.js +1052 -0
- package/dist/consensus/deduper.js.map +1 -0
- package/dist/consensus/finding-identity.d.ts +20 -0
- package/dist/consensus/finding-identity.js +49 -0
- package/dist/consensus/finding-identity.js.map +1 -0
- package/dist/consensus/gating.d.ts +215 -0
- package/dist/consensus/gating.js +699 -0
- package/dist/consensus/gating.js.map +1 -0
- package/dist/consensus/parser.d.ts +22 -0
- package/dist/consensus/parser.js +255 -0
- package/dist/consensus/parser.js.map +1 -0
- package/dist/consensus/semantic-deduper.d.ts +10 -0
- package/dist/consensus/semantic-deduper.js +70 -0
- package/dist/consensus/semantic-deduper.js.map +1 -0
- package/dist/consensus/types.d.ts +196 -0
- package/dist/consensus/types.js +2 -0
- package/dist/consensus/types.js.map +1 -0
- package/dist/consensus/verification-contract.d.ts +8 -0
- package/dist/consensus/verification-contract.js +95 -0
- package/dist/consensus/verification-contract.js.map +1 -0
- package/dist/consensus/voter.d.ts +29 -0
- package/dist/consensus/voter.js +394 -0
- package/dist/consensus/voter.js.map +1 -0
- package/dist/converge/attempt-budget.d.ts +88 -0
- package/dist/converge/attempt-budget.js +717 -0
- package/dist/converge/attempt-budget.js.map +1 -0
- package/dist/converge/bound-fix-recovery-source.d.ts +24 -0
- package/dist/converge/bound-fix-recovery-source.js +25 -0
- package/dist/converge/bound-fix-recovery-source.js.map +1 -0
- package/dist/converge/bound-fix-recovery.d.ts +15 -0
- package/dist/converge/bound-fix-recovery.js +65 -0
- package/dist/converge/bound-fix-recovery.js.map +1 -0
- package/dist/converge/correction-anchors.d.ts +1 -0
- package/dist/converge/correction-anchors.js +2 -0
- package/dist/converge/correction-anchors.js.map +1 -0
- package/dist/converge/cycle-remote.d.ts +6 -0
- package/dist/converge/cycle-remote.js +41 -0
- package/dist/converge/cycle-remote.js.map +1 -0
- package/dist/converge/delivery-reconciliation.d.ts +17 -0
- package/dist/converge/delivery-reconciliation.js +53 -0
- package/dist/converge/delivery-reconciliation.js.map +1 -0
- package/dist/converge/finding-identity.d.ts +6 -0
- package/dist/converge/finding-identity.js +7 -0
- package/dist/converge/finding-identity.js.map +1 -0
- package/dist/converge/fresh-review.d.ts +37 -0
- package/dist/converge/fresh-review.js +351 -0
- package/dist/converge/fresh-review.js.map +1 -0
- package/dist/converge/launch-guard.d.ts +55 -0
- package/dist/converge/launch-guard.js +363 -0
- package/dist/converge/launch-guard.js.map +1 -0
- package/dist/converge/launch-preflight.d.ts +5 -0
- package/dist/converge/launch-preflight.js +41 -0
- package/dist/converge/launch-preflight.js.map +1 -0
- package/dist/converge/launch-record.d.ts +136 -0
- package/dist/converge/launch-record.js +86 -0
- package/dist/converge/launch-record.js.map +1 -0
- package/dist/converge/legacy-launch-health.d.ts +311 -0
- package/dist/converge/legacy-launch-health.js +159 -0
- package/dist/converge/legacy-launch-health.js.map +1 -0
- package/dist/converge/legacy-roster.d.ts +29 -0
- package/dist/converge/legacy-roster.js +268 -0
- package/dist/converge/legacy-roster.js.map +1 -0
- package/dist/converge/native-lock.d.ts +18 -0
- package/dist/converge/native-lock.js +122 -0
- package/dist/converge/native-lock.js.map +1 -0
- package/dist/converge/ordinary-pending-export.d.ts +67 -0
- package/dist/converge/ordinary-pending-export.js +175 -0
- package/dist/converge/ordinary-pending-export.js.map +1 -0
- package/dist/converge/ordinary-pending-package.d.ts +28 -0
- package/dist/converge/ordinary-pending-package.js +36 -0
- package/dist/converge/ordinary-pending-package.js.map +1 -0
- package/dist/converge/pending-legacy-resume.d.ts +119 -0
- package/dist/converge/pending-legacy-resume.js +720 -0
- package/dist/converge/pending-legacy-resume.js.map +1 -0
- package/dist/converge/pending-recovery-source.d.ts +131 -0
- package/dist/converge/pending-recovery-source.js +71 -0
- package/dist/converge/pending-recovery-source.js.map +1 -0
- package/dist/converge/recovery-launch.d.ts +66 -0
- package/dist/converge/recovery-launch.js +518 -0
- package/dist/converge/recovery-launch.js.map +1 -0
- package/dist/converge/retained-report.d.ts +29 -0
- package/dist/converge/retained-report.js +218 -0
- package/dist/converge/retained-report.js.map +1 -0
- package/dist/converge/retry-source.d.ts +25 -0
- package/dist/converge/retry-source.js +13 -0
- package/dist/converge/retry-source.js.map +1 -0
- package/dist/converge/review-cycle.d.ts +49 -0
- package/dist/converge/review-cycle.js +26 -0
- package/dist/converge/review-cycle.js.map +1 -0
- package/dist/converge/round-gap-schema.d.ts +66 -0
- package/dist/converge/round-gap-schema.js +51 -0
- package/dist/converge/round-gap-schema.js.map +1 -0
- package/dist/converge/round-gap.d.ts +38 -0
- package/dist/converge/round-gap.js +334 -0
- package/dist/converge/round-gap.js.map +1 -0
- package/dist/converge/run-state.d.ts +224 -0
- package/dist/converge/run-state.js +564 -0
- package/dist/converge/run-state.js.map +1 -0
- package/dist/converge/stale-report-schema.d.ts +42 -0
- package/dist/converge/stale-report-schema.js +79 -0
- package/dist/converge/stale-report-schema.js.map +1 -0
- package/dist/converge/stale-report-storage.d.ts +47 -0
- package/dist/converge/stale-report-storage.js +172 -0
- package/dist/converge/stale-report-storage.js.map +1 -0
- package/dist/converge/stale-report.d.ts +14 -0
- package/dist/converge/stale-report.js +213 -0
- package/dist/converge/stale-report.js.map +1 -0
- package/dist/converge/target-ownership.d.ts +29 -0
- package/dist/converge/target-ownership.js +95 -0
- package/dist/converge/target-ownership.js.map +1 -0
- package/dist/converge/terminal-rejection-schema.d.ts +42 -0
- package/dist/converge/terminal-rejection-schema.js +39 -0
- package/dist/converge/terminal-rejection-schema.js.map +1 -0
- package/dist/converge/terminal-rejection.d.ts +13 -0
- package/dist/converge/terminal-rejection.js +275 -0
- package/dist/converge/terminal-rejection.js.map +1 -0
- package/dist/coordination/registry-lock.d.ts +82 -0
- package/dist/coordination/registry-lock.js +498 -0
- package/dist/coordination/registry-lock.js.map +1 -0
- package/dist/discuss.d.ts +53 -0
- package/dist/discuss.js +112 -0
- package/dist/discuss.js.map +1 -0
- package/dist/dispatch/adapter.d.ts +32 -0
- package/dist/dispatch/adapter.js +2 -0
- package/dist/dispatch/adapter.js.map +1 -0
- package/dist/dispatch/anthropic.d.ts +10 -0
- package/dist/dispatch/anthropic.js +235 -0
- package/dist/dispatch/anthropic.js.map +1 -0
- package/dist/dispatch/async-lane.d.ts +127 -0
- package/dist/dispatch/async-lane.js +414 -0
- package/dist/dispatch/async-lane.js.map +1 -0
- package/dist/dispatch/capture-council.d.ts +63 -0
- package/dist/dispatch/capture-council.js +137 -0
- package/dist/dispatch/capture-council.js.map +1 -0
- package/dist/dispatch/captured-async.d.ts +67 -0
- package/dist/dispatch/captured-async.js +40 -0
- package/dist/dispatch/captured-async.js.map +1 -0
- package/dist/dispatch/captured-inputs.d.ts +50 -0
- package/dist/dispatch/captured-inputs.js +190 -0
- package/dist/dispatch/captured-inputs.js.map +1 -0
- package/dist/dispatch/checkpoint-async-context.d.ts +27 -0
- package/dist/dispatch/checkpoint-async-context.js +51 -0
- package/dist/dispatch/checkpoint-async-context.js.map +1 -0
- package/dist/dispatch/checkpoint-async-execution.d.ts +22 -0
- package/dist/dispatch/checkpoint-async-execution.js +130 -0
- package/dist/dispatch/checkpoint-async-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-async-store.d.ts +134 -0
- package/dist/dispatch/checkpoint-async-store.js +534 -0
- package/dist/dispatch/checkpoint-async-store.js.map +1 -0
- package/dist/dispatch/checkpoint-async-unknown.d.ts +19 -0
- package/dist/dispatch/checkpoint-async-unknown.js +46 -0
- package/dist/dispatch/checkpoint-async-unknown.js.map +1 -0
- package/dist/dispatch/checkpoint-async.d.ts +252 -0
- package/dist/dispatch/checkpoint-async.js +270 -0
- package/dist/dispatch/checkpoint-async.js.map +1 -0
- package/dist/dispatch/checkpoint-gating-execution.d.ts +26 -0
- package/dist/dispatch/checkpoint-gating-execution.js +84 -0
- package/dist/dispatch/checkpoint-gating-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-phase-limits.d.ts +5 -0
- package/dist/dispatch/checkpoint-phase-limits.js +11 -0
- package/dist/dispatch/checkpoint-phase-limits.js.map +1 -0
- package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
- package/dist/dispatch/checkpoint-verification-context.js +48 -0
- package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
- package/dist/dispatch/checkpoint-verification.d.ts +213 -0
- package/dist/dispatch/checkpoint-verification.js +381 -0
- package/dist/dispatch/checkpoint-verification.js.map +1 -0
- package/dist/dispatch/checkpoint.d.ts +329 -0
- package/dist/dispatch/checkpoint.js +1418 -0
- package/dist/dispatch/checkpoint.js.map +1 -0
- package/dist/dispatch/google.d.ts +10 -0
- package/dist/dispatch/google.js +158 -0
- package/dist/dispatch/google.js.map +1 -0
- package/dist/dispatch/late-audit.d.ts +23 -0
- package/dist/dispatch/late-audit.js +133 -0
- package/dist/dispatch/late-audit.js.map +1 -0
- package/dist/dispatch/merge.d.ts +29 -0
- package/dist/dispatch/merge.js +112 -0
- package/dist/dispatch/merge.js.map +1 -0
- package/dist/dispatch/openai-compat.d.ts +30 -0
- package/dist/dispatch/openai-compat.js +166 -0
- package/dist/dispatch/openai-compat.js.map +1 -0
- package/dist/dispatch/openai.d.ts +10 -0
- package/dist/dispatch/openai.js +159 -0
- package/dist/dispatch/openai.js.map +1 -0
- package/dist/dispatch/original-execution.d.ts +30 -0
- package/dist/dispatch/original-execution.js +91 -0
- package/dist/dispatch/original-execution.js.map +1 -0
- package/dist/dispatch/original-launch.d.ts +37 -0
- package/dist/dispatch/original-launch.js +117 -0
- package/dist/dispatch/original-launch.js.map +1 -0
- package/dist/dispatch/quorum.d.ts +15 -0
- package/dist/dispatch/quorum.js +33 -0
- package/dist/dispatch/quorum.js.map +1 -0
- package/dist/dispatch/recovery-operation.d.ts +44 -0
- package/dist/dispatch/recovery-operation.js +146 -0
- package/dist/dispatch/recovery-operation.js.map +1 -0
- package/dist/dispatch/recovery-policy.d.ts +54 -0
- package/dist/dispatch/recovery-policy.js +157 -0
- package/dist/dispatch/recovery-policy.js.map +1 -0
- package/dist/dispatch/recovery.d.ts +78 -0
- package/dist/dispatch/recovery.js +299 -0
- package/dist/dispatch/recovery.js.map +1 -0
- package/dist/dispatch/retained-async.d.ts +13 -0
- package/dist/dispatch/retained-async.js +101 -0
- package/dist/dispatch/retained-async.js.map +1 -0
- package/dist/dispatch/reviewer-identity.d.ts +10 -0
- package/dist/dispatch/reviewer-identity.js +19 -0
- package/dist/dispatch/reviewer-identity.js.map +1 -0
- package/dist/dispatch/runner.d.ts +76 -0
- package/dist/dispatch/runner.js +415 -0
- package/dist/dispatch/runner.js.map +1 -0
- package/dist/dispatch/utils.d.ts +159 -0
- package/dist/dispatch/utils.js +381 -0
- package/dist/dispatch/utils.js.map +1 -0
- package/dist/dispatch/verification-execution.d.ts +48 -0
- package/dist/dispatch/verification-execution.js +252 -0
- package/dist/dispatch/verification-execution.js.map +1 -0
- package/dist/dispatch/verification-late-audit.d.ts +17 -0
- package/dist/dispatch/verification-late-audit.js +117 -0
- package/dist/dispatch/verification-late-audit.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.d.ts +30 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js +100 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.d.ts +46 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js +120 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/carrier-inventory.d.ts +49 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js +340 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js.map +1 -0
- package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
- package/dist/evidence/claim-recovery/claim-index.js +56 -0
- package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
- package/dist/evidence/claim-recovery/confirmation.d.ts +53 -0
- package/dist/evidence/claim-recovery/confirmation.js +151 -0
- package/dist/evidence/claim-recovery/confirmation.js.map +1 -0
- package/dist/evidence/claim-recovery/context.d.ts +15 -0
- package/dist/evidence/claim-recovery/context.js +40 -0
- package/dist/evidence/claim-recovery/context.js.map +1 -0
- package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
- package/dist/evidence/claim-recovery/proof-storage.js +97 -0
- package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/anchors.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/anchors.js +22 -0
- package/dist/evidence/claim-recovery/validation/anchors.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js +364 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.d.ts +83 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claim-split.d.ts +57 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js +209 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/claims.js +108 -0
- package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/current-projection.d.ts +36 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js +424 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
- package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
- package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
- package/dist/evidence/claim-recovery/validation/materials.js +160 -0
- package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-material.d.ts +27 -0
- package/dist/evidence/claim-recovery/validation/native-material.js +35 -0
- package/dist/evidence/claim-recovery/validation/native-material.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.d.ts +79 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js +187 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-state.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/native-state.js +385 -0
- package/dist/evidence/claim-recovery/validation/native-state.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/obligations.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/obligations.js +65 -0
- package/dist/evidence/claim-recovery/validation/obligations.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js +208 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.d.ts +101 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence.d.ts +30 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js +227 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
- package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
- package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
- package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
- package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.d.ts +3 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js +22 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js +347 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sighting.d.ts +2 -0
- package/dist/evidence/claim-recovery/validation/sighting.js +15 -0
- package/dist/evidence/claim-recovery/validation/sighting.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sources.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/sources.js +2 -0
- package/dist/evidence/claim-recovery/validation/sources.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/types.d.ts +126 -0
- package/dist/evidence/claim-recovery/validation/types.js +2 -0
- package/dist/evidence/claim-recovery/validation/types.js.map +1 -0
- package/dist/evidence/claim-split.d.ts +1 -0
- package/dist/evidence/claim-split.js +2 -0
- package/dist/evidence/claim-split.js.map +1 -0
- package/dist/evidence/event-receipts.d.ts +16 -0
- package/dist/evidence/event-receipts.js +41 -0
- package/dist/evidence/event-receipts.js.map +1 -0
- package/dist/evidence/finding-recovery.d.ts +23 -0
- package/dist/evidence/finding-recovery.js +74 -0
- package/dist/evidence/finding-recovery.js.map +1 -0
- package/dist/evidence/finding-retriage.d.ts +14 -0
- package/dist/evidence/finding-retriage.js +57 -0
- package/dist/evidence/finding-retriage.js.map +1 -0
- package/dist/evidence/format.d.ts +18 -0
- package/dist/evidence/format.js +152 -0
- package/dist/evidence/format.js.map +1 -0
- package/dist/evidence/original-run/decode.d.ts +30 -0
- package/dist/evidence/original-run/decode.js +208 -0
- package/dist/evidence/original-run/decode.js.map +1 -0
- package/dist/evidence/original-run/journal.d.ts +31 -0
- package/dist/evidence/original-run/journal.js +157 -0
- package/dist/evidence/original-run/journal.js.map +1 -0
- package/dist/evidence/original-run/lock-path.d.ts +17 -0
- package/dist/evidence/original-run/lock-path.js +116 -0
- package/dist/evidence/original-run/lock-path.js.map +1 -0
- package/dist/evidence/original-run/lock-scope.d.ts +21 -0
- package/dist/evidence/original-run/lock-scope.js +61 -0
- package/dist/evidence/original-run/lock-scope.js.map +1 -0
- package/dist/evidence/original-run/lock.d.ts +33 -0
- package/dist/evidence/original-run/lock.js +259 -0
- package/dist/evidence/original-run/lock.js.map +1 -0
- package/dist/evidence/original-run/remote.d.ts +23 -0
- package/dist/evidence/original-run/remote.js +110 -0
- package/dist/evidence/original-run/remote.js.map +1 -0
- package/dist/evidence/original-run/source.d.ts +61 -0
- package/dist/evidence/original-run/source.js +267 -0
- package/dist/evidence/original-run/source.js.map +1 -0
- package/dist/evidence/reads.d.ts +11 -0
- package/dist/evidence/reads.js +16 -0
- package/dist/evidence/reads.js.map +1 -0
- package/dist/evidence/recover-finding.d.ts +17 -0
- package/dist/evidence/recover-finding.js +65 -0
- package/dist/evidence/recover-finding.js.map +1 -0
- package/dist/evidence/recover-run.d.ts +26 -0
- package/dist/evidence/recover-run.js +180 -0
- package/dist/evidence/recover-run.js.map +1 -0
- package/dist/evidence/retained-time-budget.d.ts +9 -0
- package/dist/evidence/retained-time-budget.js +14 -0
- package/dist/evidence/retained-time-budget.js.map +1 -0
- package/dist/evidence/retriage-finding.d.ts +12 -0
- package/dist/evidence/retriage-finding.js +67 -0
- package/dist/evidence/retriage-finding.js.map +1 -0
- package/dist/evidence/reviewer-lineage.d.ts +35 -0
- package/dist/evidence/reviewer-lineage.js +293 -0
- package/dist/evidence/reviewer-lineage.js.map +1 -0
- package/dist/evidence/reviewer-original.d.ts +67 -0
- package/dist/evidence/reviewer-original.js +148 -0
- package/dist/evidence/reviewer-original.js.map +1 -0
- package/dist/evidence/reviewer-recovery.d.ts +74 -0
- package/dist/evidence/reviewer-recovery.js +179 -0
- package/dist/evidence/reviewer-recovery.js.map +1 -0
- package/dist/evidence/reviewer-status.d.ts +145 -0
- package/dist/evidence/reviewer-status.js +302 -0
- package/dist/evidence/reviewer-status.js.map +1 -0
- package/dist/evidence/show.d.ts +10 -0
- package/dist/evidence/show.js +41 -0
- package/dist/evidence/show.js.map +1 -0
- package/dist/evidence/status.d.ts +38 -0
- package/dist/evidence/status.js +73 -0
- package/dist/evidence/status.js.map +1 -0
- package/dist/evidence/target.d.ts +17 -0
- package/dist/evidence/target.js +74 -0
- package/dist/evidence/target.js.map +1 -0
- package/dist/evidence/types.d.ts +176 -0
- package/dist/evidence/types.js +109 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2688 -0
- package/dist/index.js.map +1 -0
- package/dist/models/seed.d.ts +44 -0
- package/dist/models/seed.js +175 -0
- package/dist/models/seed.js.map +1 -0
- package/dist/models/server-stats.d.ts +80 -0
- package/dist/models/server-stats.js +109 -0
- package/dist/models/server-stats.js.map +1 -0
- package/dist/models/stats-store.d.ts +84 -0
- package/dist/models/stats-store.js +572 -0
- package/dist/models/stats-store.js.map +1 -0
- package/dist/output/artifacts.d.ts +16 -0
- package/dist/output/artifacts.js +29 -0
- package/dist/output/artifacts.js.map +1 -0
- package/dist/output/assembly-refusal.d.ts +8 -0
- package/dist/output/assembly-refusal.js +14 -0
- package/dist/output/assembly-refusal.js.map +1 -0
- package/dist/output/github.d.ts +12 -0
- package/dist/output/github.js +214 -0
- package/dist/output/github.js.map +1 -0
- package/dist/output/json.d.ts +3 -0
- package/dist/output/json.js +8 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/markdown.d.ts +3 -0
- package/dist/output/markdown.js +281 -0
- package/dist/output/markdown.js.map +1 -0
- package/dist/output/progress.d.ts +55 -0
- package/dist/output/progress.js +180 -0
- package/dist/output/progress.js.map +1 -0
- package/dist/output/sanitize.d.ts +18 -0
- package/dist/output/sanitize.js +46 -0
- package/dist/output/sanitize.js.map +1 -0
- package/dist/output/terminal.d.ts +2 -0
- package/dist/output/terminal.js +172 -0
- package/dist/output/terminal.js.map +1 -0
- package/dist/prepare/chunker.d.ts +18 -0
- package/dist/prepare/chunker.js +325 -0
- package/dist/prepare/chunker.js.map +1 -0
- package/dist/prepare/language.d.ts +1 -0
- package/dist/prepare/language.js +99 -0
- package/dist/prepare/language.js.map +1 -0
- package/dist/prepare/prompt-builder.d.ts +44 -0
- package/dist/prepare/prompt-builder.js +102 -0
- package/dist/prepare/prompt-builder.js.map +1 -0
- package/dist/prepare/unified-diff.d.ts +40 -0
- package/dist/prepare/unified-diff.js +135 -0
- package/dist/prepare/unified-diff.js.map +1 -0
- package/dist/prompts/base.d.ts +3 -0
- package/dist/prompts/base.js +53 -0
- package/dist/prompts/base.js.map +1 -0
- package/dist/prompts/hardening.d.ts +19 -0
- package/dist/prompts/hardening.js +67 -0
- package/dist/prompts/hardening.js.map +1 -0
- package/dist/prompts/languages/elixir.d.ts +1 -0
- package/dist/prompts/languages/elixir.js +13 -0
- package/dist/prompts/languages/elixir.js.map +1 -0
- package/dist/prompts/languages/generic.d.ts +1 -0
- package/dist/prompts/languages/generic.js +11 -0
- package/dist/prompts/languages/generic.js.map +1 -0
- package/dist/prompts/languages/python.d.ts +1 -0
- package/dist/prompts/languages/python.js +14 -0
- package/dist/prompts/languages/python.js.map +1 -0
- package/dist/prompts/languages/typescript.d.ts +1 -0
- package/dist/prompts/languages/typescript.js +13 -0
- package/dist/prompts/languages/typescript.js.map +1 -0
- package/dist/prompts/plan.d.ts +15 -0
- package/dist/prompts/plan.js +55 -0
- package/dist/prompts/plan.js.map +1 -0
- package/dist/report/aggregation-inputs.d.ts +52 -0
- package/dist/report/aggregation-inputs.js +114 -0
- package/dist/report/aggregation-inputs.js.map +1 -0
- package/dist/report/assembly.d.ts +43 -0
- package/dist/report/assembly.js +133 -0
- package/dist/report/assembly.js.map +1 -0
- package/dist/report/blocking-health.d.ts +64 -0
- package/dist/report/blocking-health.js +156 -0
- package/dist/report/blocking-health.js.map +1 -0
- package/dist/report/checkpoint-assembly.d.ts +10 -0
- package/dist/report/checkpoint-assembly.js +17 -0
- package/dist/report/checkpoint-assembly.js.map +1 -0
- package/dist/report/checkpoint-consensus.d.ts +59 -0
- package/dist/report/checkpoint-consensus.js +197 -0
- package/dist/report/checkpoint-consensus.js.map +1 -0
- package/dist/report/checkpoint-gating.d.ts +36 -0
- package/dist/report/checkpoint-gating.js +110 -0
- package/dist/report/checkpoint-gating.js.map +1 -0
- package/dist/report/checkpoint-projection.d.ts +76 -0
- package/dist/report/checkpoint-projection.js +122 -0
- package/dist/report/checkpoint-projection.js.map +1 -0
- package/dist/report/consensus-assembly.d.ts +37 -0
- package/dist/report/consensus-assembly.js +33 -0
- package/dist/report/consensus-assembly.js.map +1 -0
- package/dist/report/recovery-source.d.ts +7 -0
- package/dist/report/recovery-source.js +7 -0
- package/dist/report/recovery-source.js.map +1 -0
- package/dist/report/reviewer-artifact.d.ts +118 -0
- package/dist/report/reviewer-artifact.js +381 -0
- package/dist/report/reviewer-artifact.js.map +1 -0
- package/dist/report/reviewer-evidence-schema.d.ts +42 -0
- package/dist/report/reviewer-evidence-schema.js +28 -0
- package/dist/report/reviewer-evidence-schema.js.map +1 -0
- package/dist/report/reviewer-evidence.d.ts +54 -0
- package/dist/report/reviewer-evidence.js +229 -0
- package/dist/report/reviewer-evidence.js.map +1 -0
- package/dist/report/reviewer-health.d.ts +62 -0
- package/dist/report/reviewer-health.js +105 -0
- package/dist/report/reviewer-health.js.map +1 -0
- package/dist/report/run-header.d.ts +219 -0
- package/dist/report/run-header.js +307 -0
- package/dist/report/run-header.js.map +1 -0
- package/dist/report/supplemental-async.d.ts +19 -0
- package/dist/report/supplemental-async.js +85 -0
- package/dist/report/supplemental-async.js.map +1 -0
- package/dist/report/uuid.d.ts +16 -0
- package/dist/report/uuid.js +41 -0
- package/dist/report/uuid.js.map +1 -0
- package/dist/resolver/git.d.ts +16 -0
- package/dist/resolver/git.js +77 -0
- package/dist/resolver/git.js.map +1 -0
- package/dist/resolver/github-client.d.ts +82 -0
- package/dist/resolver/github-client.js +27 -0
- package/dist/resolver/github-client.js.map +1 -0
- package/dist/resolver/github.d.ts +29 -0
- package/dist/resolver/github.js +166 -0
- package/dist/resolver/github.js.map +1 -0
- package/dist/resolver/local.d.ts +3 -0
- package/dist/resolver/local.js +75 -0
- package/dist/resolver/local.js.map +1 -0
- package/dist/resolver/plan.d.ts +8 -0
- package/dist/resolver/plan.js +44 -0
- package/dist/resolver/plan.js.map +1 -0
- package/dist/resolver/target.d.ts +35 -0
- package/dist/resolver/target.js +112 -0
- package/dist/resolver/target.js.map +1 -0
- package/dist/resolver/types.d.ts +43 -0
- package/dist/resolver/types.js +2 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/roles/builtin.d.ts +4 -0
- package/dist/roles/builtin.js +282 -0
- package/dist/roles/builtin.js.map +1 -0
- package/dist/roles/dispatcher.d.ts +26 -0
- package/dist/roles/dispatcher.js +96 -0
- package/dist/roles/dispatcher.js.map +1 -0
- package/dist/roles/legacy-4.1.10.d.ts +2 -0
- package/dist/roles/legacy-4.1.10.js +320 -0
- package/dist/roles/legacy-4.1.10.js.map +1 -0
- package/dist/roles/legacy-4.4.9.d.ts +4 -0
- package/dist/roles/legacy-4.4.9.js +282 -0
- package/dist/roles/legacy-4.4.9.js.map +1 -0
- package/dist/roles/loader.d.ts +10 -0
- package/dist/roles/loader.js +104 -0
- package/dist/roles/loader.js.map +1 -0
- package/dist/roles/types.d.ts +13 -0
- package/dist/roles/types.js +2 -0
- package/dist/roles/types.js.map +1 -0
- package/dist/telemetry/abort-signal.d.ts +13 -0
- package/dist/telemetry/abort-signal.js +40 -0
- package/dist/telemetry/abort-signal.js.map +1 -0
- package/dist/telemetry/attest.d.ts +98 -0
- package/dist/telemetry/attest.js +331 -0
- package/dist/telemetry/attest.js.map +1 -0
- package/dist/telemetry/attested-retry.d.ts +79 -0
- package/dist/telemetry/attested-retry.js +195 -0
- package/dist/telemetry/attested-retry.js.map +1 -0
- package/dist/telemetry/attested-reviewer-delivery.d.ts +58 -0
- package/dist/telemetry/attested-reviewer-delivery.js +238 -0
- package/dist/telemetry/attested-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/backfill.d.ts +95 -0
- package/dist/telemetry/backfill.js +460 -0
- package/dist/telemetry/backfill.js.map +1 -0
- package/dist/telemetry/credentials.d.ts +44 -0
- package/dist/telemetry/credentials.js +87 -0
- package/dist/telemetry/credentials.js.map +1 -0
- package/dist/telemetry/deliver.d.ts +152 -0
- package/dist/telemetry/deliver.js +662 -0
- package/dist/telemetry/deliver.js.map +1 -0
- package/dist/telemetry/envelope-validation.d.ts +13 -0
- package/dist/telemetry/envelope-validation.js +196 -0
- package/dist/telemetry/envelope-validation.js.map +1 -0
- package/dist/telemetry/envelope.d.ts +159 -0
- package/dist/telemetry/envelope.js +288 -0
- package/dist/telemetry/envelope.js.map +1 -0
- package/dist/telemetry/events.d.ts +68 -0
- package/dist/telemetry/events.js +79 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/notice.d.ts +15 -0
- package/dist/telemetry/notice.js +67 -0
- package/dist/telemetry/notice.js.map +1 -0
- package/dist/telemetry/outbox.d.ts +166 -0
- package/dist/telemetry/outbox.js +741 -0
- package/dist/telemetry/outbox.js.map +1 -0
- package/dist/telemetry/quarantine.d.ts +105 -0
- package/dist/telemetry/quarantine.js +224 -0
- package/dist/telemetry/quarantine.js.map +1 -0
- package/dist/telemetry/read-sink.d.ts +31 -0
- package/dist/telemetry/read-sink.js +25 -0
- package/dist/telemetry/read-sink.js.map +1 -0
- package/dist/telemetry/recovery/command.d.ts +16 -0
- package/dist/telemetry/recovery/command.js +70 -0
- package/dist/telemetry/recovery/command.js.map +1 -0
- package/dist/telemetry/recovery/discovery.d.ts +8 -0
- package/dist/telemetry/recovery/discovery.js +277 -0
- package/dist/telemetry/recovery/discovery.js.map +1 -0
- package/dist/telemetry/recovery/files.d.ts +20 -0
- package/dist/telemetry/recovery/files.js +123 -0
- package/dist/telemetry/recovery/files.js.map +1 -0
- package/dist/telemetry/recovery/plan.d.ts +10 -0
- package/dist/telemetry/recovery/plan.js +325 -0
- package/dist/telemetry/recovery/plan.js.map +1 -0
- package/dist/telemetry/recovery/source.d.ts +328 -0
- package/dist/telemetry/recovery/source.js +253 -0
- package/dist/telemetry/recovery/source.js.map +1 -0
- package/dist/telemetry/recovery/types.d.ts +100 -0
- package/dist/telemetry/recovery/types.js +2 -0
- package/dist/telemetry/recovery/types.js.map +1 -0
- package/dist/telemetry/recovery-request-budget.d.ts +39 -0
- package/dist/telemetry/recovery-request-budget.js +102 -0
- package/dist/telemetry/recovery-request-budget.js.map +1 -0
- package/dist/telemetry/report-consistency.d.ts +11 -0
- package/dist/telemetry/report-consistency.js +111 -0
- package/dist/telemetry/report-consistency.js.map +1 -0
- package/dist/telemetry/reviewer-delivery.d.ts +39 -0
- package/dist/telemetry/reviewer-delivery.js +279 -0
- package/dist/telemetry/reviewer-delivery.js.map +1 -0
- package/dist/telemetry/reviewer-preflight.d.ts +13 -0
- package/dist/telemetry/reviewer-preflight.js +56 -0
- package/dist/telemetry/reviewer-preflight.js.map +1 -0
- package/dist/telemetry/scrub.d.ts +53 -0
- package/dist/telemetry/scrub.js +205 -0
- package/dist/telemetry/scrub.js.map +1 -0
- package/dist/telemetry/sink.d.ts +212 -0
- package/dist/telemetry/sink.js +813 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/telemetry/terminal-reviewer-delivery.d.ts +18 -0
- package/dist/telemetry/terminal-reviewer-delivery.js +27 -0
- package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/transient-input.d.ts +2 -0
- package/dist/telemetry/transient-input.js +37 -0
- package/dist/telemetry/transient-input.js.map +1 -0
- package/dist/telemetry/verification.d.ts +9 -0
- package/dist/telemetry/verification.js +12 -0
- package/dist/telemetry/verification.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/config/providers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,eAAe;CACP,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Node clamps longer timer delays to 1 ms. */
|
|
3
|
+
export declare const MAX_TIMER_DELAY_MS = 2147483647;
|
|
4
|
+
export declare const SeveritySchema: z.ZodEnum<{
|
|
5
|
+
critical: "critical";
|
|
6
|
+
important: "important";
|
|
7
|
+
minor: "minor";
|
|
8
|
+
nitpick: "nitpick";
|
|
9
|
+
}>;
|
|
10
|
+
export declare const CategorySchema: z.ZodEnum<{
|
|
11
|
+
security: "security";
|
|
12
|
+
correctness: "correctness";
|
|
13
|
+
"best-practices": "best-practices";
|
|
14
|
+
tests: "tests";
|
|
15
|
+
"api-design": "api-design";
|
|
16
|
+
}>;
|
|
17
|
+
export declare const ReviewerPairSchema: z.ZodObject<{
|
|
18
|
+
model: z.ZodString;
|
|
19
|
+
role: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export declare const RoleConfigSchema: z.ZodObject<{
|
|
22
|
+
name: z.ZodString;
|
|
23
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
24
|
+
focus: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
severityBias: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export declare const ThresholdsSchema: z.ZodObject<{
|
|
28
|
+
minConsensusScore: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
minConfidence: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
dedupeLineWindow: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
jaccardThreshold: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export declare const OutputSchema: z.ZodObject<{
|
|
34
|
+
terminal: z.ZodOptional<z.ZodBoolean>;
|
|
35
|
+
json: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
+
markdown: z.ZodOptional<z.ZodBoolean>;
|
|
37
|
+
github: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
jsonPath: z.ZodOptional<z.ZodString>;
|
|
39
|
+
markdownPath: z.ZodOptional<z.ZodString>;
|
|
40
|
+
belowThresholdAppendix: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
export declare const ReasoningEffortSchema: z.ZodEnum<{
|
|
43
|
+
low: "low";
|
|
44
|
+
medium: "medium";
|
|
45
|
+
high: "high";
|
|
46
|
+
}>;
|
|
47
|
+
export declare const VerificationReasoningEffortSchema: z.ZodEnum<{
|
|
48
|
+
low: "low";
|
|
49
|
+
medium: "medium";
|
|
50
|
+
high: "high";
|
|
51
|
+
xhigh: "xhigh";
|
|
52
|
+
max: "max";
|
|
53
|
+
}>;
|
|
54
|
+
export type VerificationReasoningEffort = z.infer<typeof VerificationReasoningEffortSchema>;
|
|
55
|
+
/**
|
|
56
|
+
* Convergence gating (RCL-23). `verified-consensus` (default): a finding
|
|
57
|
+
* gates only when multi-model, critical, or confirmed with evidence by the verification
|
|
58
|
+
* pass. `all-findings` restores the legacy behavior where every
|
|
59
|
+
* critical/important finding gates.
|
|
60
|
+
*/
|
|
61
|
+
export declare const GatingSchema: z.ZodObject<{
|
|
62
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
63
|
+
"verified-consensus": "verified-consensus";
|
|
64
|
+
"all-findings": "all-findings";
|
|
65
|
+
}>>;
|
|
66
|
+
minModels: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
verificationModel: z.ZodOptional<z.ZodString>;
|
|
68
|
+
verificationReasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
69
|
+
low: "low";
|
|
70
|
+
medium: "medium";
|
|
71
|
+
high: "high";
|
|
72
|
+
xhigh: "xhigh";
|
|
73
|
+
max: "max";
|
|
74
|
+
}>>;
|
|
75
|
+
verificationTimeout: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
verificationPassTimeout: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
/**
|
|
79
|
+
* Evidence delivery to Harness (epic IO-12475, section 8.6). `telemetry`
|
|
80
|
+
* is the payload tier: `off` sends nothing, `envelope` the run header and
|
|
81
|
+
* stats, `findings` adds findings and calls, `full` (default) also uploads
|
|
82
|
+
* the JSON and Markdown reports. `parseFailures` opts in to sending a
|
|
83
|
+
* parse-failed call's raw model answer (fenced code and key-shaped strings
|
|
84
|
+
* removed, 32 KB cap).
|
|
85
|
+
*/
|
|
86
|
+
export declare const HarnessSchema: z.ZodObject<{
|
|
87
|
+
telemetry: z.ZodOptional<z.ZodEnum<{
|
|
88
|
+
off: "off";
|
|
89
|
+
envelope: "envelope";
|
|
90
|
+
findings: "findings";
|
|
91
|
+
full: "full";
|
|
92
|
+
}>>;
|
|
93
|
+
parseFailures: z.ZodOptional<z.ZodBoolean>;
|
|
94
|
+
}, z.core.$strip>;
|
|
95
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
96
|
+
models: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
97
|
+
secondaryModels: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
98
|
+
asyncModels: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
99
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
100
|
+
reviewers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
101
|
+
model: z.ZodString;
|
|
102
|
+
role: z.ZodString;
|
|
103
|
+
}, z.core.$strip>>>;
|
|
104
|
+
customRoles: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
107
|
+
focus: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
108
|
+
severityBias: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
109
|
+
}, z.core.$strip>>>;
|
|
110
|
+
thresholds: z.ZodOptional<z.ZodObject<{
|
|
111
|
+
minConsensusScore: z.ZodOptional<z.ZodNumber>;
|
|
112
|
+
minConfidence: z.ZodOptional<z.ZodNumber>;
|
|
113
|
+
dedupeLineWindow: z.ZodOptional<z.ZodNumber>;
|
|
114
|
+
jaccardThreshold: z.ZodOptional<z.ZodNumber>;
|
|
115
|
+
}, z.core.$strip>>;
|
|
116
|
+
gating: z.ZodOptional<z.ZodObject<{
|
|
117
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
118
|
+
"verified-consensus": "verified-consensus";
|
|
119
|
+
"all-findings": "all-findings";
|
|
120
|
+
}>>;
|
|
121
|
+
minModels: z.ZodOptional<z.ZodNumber>;
|
|
122
|
+
verificationModel: z.ZodOptional<z.ZodString>;
|
|
123
|
+
verificationReasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
124
|
+
low: "low";
|
|
125
|
+
medium: "medium";
|
|
126
|
+
high: "high";
|
|
127
|
+
xhigh: "xhigh";
|
|
128
|
+
max: "max";
|
|
129
|
+
}>>;
|
|
130
|
+
verificationTimeout: z.ZodOptional<z.ZodNumber>;
|
|
131
|
+
verificationPassTimeout: z.ZodOptional<z.ZodNumber>;
|
|
132
|
+
}, z.core.$strip>>;
|
|
133
|
+
output: z.ZodOptional<z.ZodObject<{
|
|
134
|
+
terminal: z.ZodOptional<z.ZodBoolean>;
|
|
135
|
+
json: z.ZodOptional<z.ZodBoolean>;
|
|
136
|
+
markdown: z.ZodOptional<z.ZodBoolean>;
|
|
137
|
+
github: z.ZodOptional<z.ZodBoolean>;
|
|
138
|
+
jsonPath: z.ZodOptional<z.ZodString>;
|
|
139
|
+
markdownPath: z.ZodOptional<z.ZodString>;
|
|
140
|
+
belowThresholdAppendix: z.ZodOptional<z.ZodBoolean>;
|
|
141
|
+
}, z.core.$strip>>;
|
|
142
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
143
|
+
asyncTimeout: z.ZodOptional<z.ZodNumber>;
|
|
144
|
+
quorumFraction: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
maxRetries: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
concurrency: z.ZodOptional<z.ZodNumber>;
|
|
147
|
+
providerConcurrency: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
|
|
148
|
+
anthropic: "anthropic";
|
|
149
|
+
openai: "openai";
|
|
150
|
+
google: "google";
|
|
151
|
+
openrouter: "openrouter";
|
|
152
|
+
"openai-compat": "openai-compat";
|
|
153
|
+
}> & z.core.$partial, z.ZodNumber>>;
|
|
154
|
+
reasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
155
|
+
low: "low";
|
|
156
|
+
medium: "medium";
|
|
157
|
+
high: "high";
|
|
158
|
+
}>>;
|
|
159
|
+
githubToken: z.ZodOptional<z.ZodString>;
|
|
160
|
+
context: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
161
|
+
spec: z.ZodOptional<z.ZodString>;
|
|
162
|
+
focus: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
163
|
+
harness: z.ZodOptional<z.ZodObject<{
|
|
164
|
+
telemetry: z.ZodOptional<z.ZodEnum<{
|
|
165
|
+
off: "off";
|
|
166
|
+
envelope: "envelope";
|
|
167
|
+
findings: "findings";
|
|
168
|
+
full: "full";
|
|
169
|
+
}>>;
|
|
170
|
+
parseFailures: z.ZodOptional<z.ZodBoolean>;
|
|
171
|
+
}, z.core.$strip>>;
|
|
172
|
+
}, z.core.$strip>;
|
|
173
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
174
|
+
export type ReviewerPair = z.infer<typeof ReviewerPairSchema>;
|
|
175
|
+
export type RoleConfig = z.infer<typeof RoleConfigSchema>;
|
|
176
|
+
export type Thresholds = z.infer<typeof ThresholdsSchema>;
|
|
177
|
+
export type Severity = z.infer<typeof SeveritySchema>;
|
|
178
|
+
export type ReasoningEffort = z.infer<typeof ReasoningEffortSchema>;
|
|
179
|
+
export type Category = z.infer<typeof CategorySchema>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MODEL_PROVIDERS } from './providers.js';
|
|
3
|
+
/** Node clamps longer timer delays to 1 ms. */
|
|
4
|
+
export const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
5
|
+
const TimerDelaySchema = z.number().finite().positive().max(MAX_TIMER_DELAY_MS);
|
|
6
|
+
const ProviderConcurrencyKeySchema = z.enum(MODEL_PROVIDERS);
|
|
7
|
+
export const SeveritySchema = z.enum(['critical', 'important', 'minor', 'nitpick']);
|
|
8
|
+
export const CategorySchema = z.enum([
|
|
9
|
+
'security',
|
|
10
|
+
'correctness',
|
|
11
|
+
'best-practices',
|
|
12
|
+
'tests',
|
|
13
|
+
'api-design',
|
|
14
|
+
]);
|
|
15
|
+
export const ReviewerPairSchema = z.object({
|
|
16
|
+
model: z.string(),
|
|
17
|
+
role: z.string(),
|
|
18
|
+
});
|
|
19
|
+
export const RoleConfigSchema = z.object({
|
|
20
|
+
name: z.string(),
|
|
21
|
+
systemPrompt: z.string().optional(),
|
|
22
|
+
focus: z.array(z.string()).optional(),
|
|
23
|
+
severityBias: z.record(z.string(), z.number()).optional(),
|
|
24
|
+
});
|
|
25
|
+
export const ThresholdsSchema = z.object({
|
|
26
|
+
minConsensusScore: z.number().min(0).max(1).optional(),
|
|
27
|
+
minConfidence: z.number().min(0).max(1).optional(),
|
|
28
|
+
dedupeLineWindow: z.number().int().positive().optional(),
|
|
29
|
+
jaccardThreshold: z.number().min(0).max(1).optional(),
|
|
30
|
+
});
|
|
31
|
+
export const OutputSchema = z.object({
|
|
32
|
+
terminal: z.boolean().optional(),
|
|
33
|
+
json: z.boolean().optional(),
|
|
34
|
+
markdown: z.boolean().optional(),
|
|
35
|
+
github: z.boolean().optional(),
|
|
36
|
+
jsonPath: z.string().optional(),
|
|
37
|
+
markdownPath: z.string().optional(),
|
|
38
|
+
/**
|
|
39
|
+
* Carry below-threshold findings into the report's demoted "worth
|
|
40
|
+
* checking" appendix (and the JSON `belowThresholdFindings` field).
|
|
41
|
+
* Default true; set false to drop them outright as before 1.6.0.
|
|
42
|
+
*/
|
|
43
|
+
belowThresholdAppendix: z.boolean().optional(),
|
|
44
|
+
});
|
|
45
|
+
export const ReasoningEffortSchema = z.enum(['low', 'medium', 'high']);
|
|
46
|
+
export const VerificationReasoningEffortSchema = z.enum(['low', 'medium', 'high', 'xhigh', 'max']);
|
|
47
|
+
/**
|
|
48
|
+
* Convergence gating (RCL-23). `verified-consensus` (default): a finding
|
|
49
|
+
* gates only when multi-model, critical, or confirmed with evidence by the verification
|
|
50
|
+
* pass. `all-findings` restores the legacy behavior where every
|
|
51
|
+
* critical/important finding gates.
|
|
52
|
+
*/
|
|
53
|
+
export const GatingSchema = z.object({
|
|
54
|
+
mode: z.enum(['verified-consensus', 'all-findings']).optional(),
|
|
55
|
+
/** Distinct supporting models that make a finding consensus-gated. */
|
|
56
|
+
minModels: z.number().int().min(2).optional(),
|
|
57
|
+
/** Direct-API model for the refutation pass (openrouter/ is rejected). */
|
|
58
|
+
verificationModel: z.string().optional(),
|
|
59
|
+
/** OpenAI verifier effort, independent of reviewer reasoning effort. */
|
|
60
|
+
verificationReasoningEffort: VerificationReasoningEffortSchema.optional(),
|
|
61
|
+
/** Per-call timeout (ms) for the verification pass. */
|
|
62
|
+
verificationTimeout: TimerDelaySchema.optional(),
|
|
63
|
+
/** Whole-pass timeout (ms) across every verification batch. */
|
|
64
|
+
verificationPassTimeout: TimerDelaySchema.optional(),
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Evidence delivery to Harness (epic IO-12475, section 8.6). `telemetry`
|
|
68
|
+
* is the payload tier: `off` sends nothing, `envelope` the run header and
|
|
69
|
+
* stats, `findings` adds findings and calls, `full` (default) also uploads
|
|
70
|
+
* the JSON and Markdown reports. `parseFailures` opts in to sending a
|
|
71
|
+
* parse-failed call's raw model answer (fenced code and key-shaped strings
|
|
72
|
+
* removed, 32 KB cap).
|
|
73
|
+
*/
|
|
74
|
+
export const HarnessSchema = z.object({
|
|
75
|
+
telemetry: z.enum(['off', 'envelope', 'findings', 'full']).optional(),
|
|
76
|
+
parseFailures: z.boolean().optional(),
|
|
77
|
+
});
|
|
78
|
+
export const ConfigSchema = z.object({
|
|
79
|
+
models: z.array(z.string()).optional(),
|
|
80
|
+
secondaryModels: z.array(z.string()).optional(),
|
|
81
|
+
/**
|
|
82
|
+
* Async bonus reviewers — fired with each round, never awaited. Results
|
|
83
|
+
* that have arrived by the next round's dedup are merged then and marked
|
|
84
|
+
* async in the report. Never on the blocking path.
|
|
85
|
+
*/
|
|
86
|
+
asyncModels: z.array(z.string()).optional(),
|
|
87
|
+
roles: z.array(z.string()).optional(),
|
|
88
|
+
reviewers: z.array(ReviewerPairSchema).optional(),
|
|
89
|
+
customRoles: z.array(RoleConfigSchema).optional(),
|
|
90
|
+
thresholds: ThresholdsSchema.optional(),
|
|
91
|
+
gating: GatingSchema.optional(),
|
|
92
|
+
output: OutputSchema.optional(),
|
|
93
|
+
timeout: z.number().positive().optional(),
|
|
94
|
+
/** Per-call timeout (ms) for the async lane; defaults higher than `timeout`. */
|
|
95
|
+
asyncTimeout: z.number().positive().optional(),
|
|
96
|
+
/**
|
|
97
|
+
* Fraction of planned calls whose completion closes a review round;
|
|
98
|
+
* outstanding non-core calls are canceled. 1 disables early closure.
|
|
99
|
+
* Floored at ⅔ so a closed round can still pass the converge
|
|
100
|
+
* reviewer-health check (successful ≥ ⅔ of total).
|
|
101
|
+
*/
|
|
102
|
+
quorumFraction: z.number().min(2 / 3).max(1).optional(),
|
|
103
|
+
maxRetries: z.number().int().nonnegative().optional(),
|
|
104
|
+
concurrency: z.number().int().positive().optional(),
|
|
105
|
+
/** Per-provider admission caps, applied in addition to global concurrency. */
|
|
106
|
+
providerConcurrency: z.partialRecord(ProviderConcurrencyKeySchema, z.number().int().positive().max(Number.MAX_SAFE_INTEGER)).optional(),
|
|
107
|
+
/** Reasoning budget for providers that support it (currently OpenRouter). */
|
|
108
|
+
reasoningEffort: ReasoningEffortSchema.optional(),
|
|
109
|
+
githubToken: z.string().optional(),
|
|
110
|
+
context: z.array(z.string()).optional(),
|
|
111
|
+
spec: z.string().optional(),
|
|
112
|
+
focus: z.array(z.string()).optional(),
|
|
113
|
+
harness: HarnessSchema.optional(),
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Finding } from './types.js';
|
|
2
|
+
import type { ClaimDescriptor } from '../evidence/claim-recovery/validation/claims.js';
|
|
3
|
+
type ClaimText = Pick<Finding, 'file' | 'title' | 'description' | 'suggestedFix'>;
|
|
4
|
+
/** Every accepted sentence is parsed; no subset of a compound claim qualifies. */
|
|
5
|
+
export declare function describeContract(f: ClaimText): ClaimDescriptor | undefined;
|
|
6
|
+
export declare function isContractDescriptor(descriptor: ClaimDescriptor): boolean;
|
|
7
|
+
/** Applies only to explicitly generated contracts, never to retained free text. */
|
|
8
|
+
export declare function compareContractDescriptors(a: ClaimDescriptor, b: ClaimDescriptor): 'exact_descriptor' | 'supported_paraphrase' | undefined;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
const PREFIX = 'rcl-claim-contract-v1:';
|
|
2
|
+
const CONTRACTS = {
|
|
3
|
+
'embedded-authentication-key': {
|
|
4
|
+
fields: ['authentication purpose', 'constant binding', 'configuration binding'],
|
|
5
|
+
condition: 'The named authentication key is embedded in source instead of loaded from external configuration.',
|
|
6
|
+
},
|
|
7
|
+
'sql-value-interpolation': {
|
|
8
|
+
fields: ['operation binding', 'query action', 'table', 'column', 'operator', 'input binding'],
|
|
9
|
+
condition: 'The named input value is interpolated into SQL syntax instead of passed as a bound parameter.',
|
|
10
|
+
},
|
|
11
|
+
'absent-owner-authorization': {
|
|
12
|
+
fields: ['principal', 'action', 'resource', 'required owner condition'],
|
|
13
|
+
condition: 'Authentication alone permits deletion of another user resource without checking ownership.',
|
|
14
|
+
},
|
|
15
|
+
'unbounded-collection-materialization': {
|
|
16
|
+
fields: ['collection', 'read operation', 'absent bound'],
|
|
17
|
+
condition: 'Reading the named collection materializes all records without a row bound.',
|
|
18
|
+
},
|
|
19
|
+
'label-derived-privilege': {
|
|
20
|
+
fields: ['guard binding', 'principal field', 'comparison operator', 'comparison literal', 'required condition'],
|
|
21
|
+
condition: 'The privilege decision compares the principal username to a label instead of checking role membership.',
|
|
22
|
+
},
|
|
23
|
+
'unguarded-map-field-access': {
|
|
24
|
+
fields: ['helper', 'receiver', 'field', 'guarded sibling fields', 'access operation', 'failure condition'],
|
|
25
|
+
condition: 'Strict map field access without a presence guard raises KeyError when the named key is absent.',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
function evidence(kind, subject) {
|
|
29
|
+
return CONTRACTS[kind].fields.map((label, index) => `${label}: ${subject[index]}`).join('; ');
|
|
30
|
+
}
|
|
31
|
+
const text = (value) => value.trim().replace(/\s+/g, ' ').replace(/[.!]$/, '');
|
|
32
|
+
const sentences = (value) => value.trim().split(/(?<=[.!?])\s+(?=[A-Z])/).map(text);
|
|
33
|
+
/**
|
|
34
|
+
* Bounded grammar productions for the same key-externalization predicate.
|
|
35
|
+
* Referents are local to the parsed key. Neither arbitrary explanatory prose
|
|
36
|
+
* nor a consequence involving another token purpose is thrown away.
|
|
37
|
+
*/
|
|
38
|
+
function keyExternalizationClause(sentence, purpose) {
|
|
39
|
+
const key = '(?:this(?: (?:key|secret))?|(?:the )?(?:key|secret)s?)';
|
|
40
|
+
const source = '(?:source(?: code)?|code)';
|
|
41
|
+
const external = '(?:(?:an? )?environment variables?|external configuration|a secrets manager)';
|
|
42
|
+
const destination = `${external}(?: or ${external})?`;
|
|
43
|
+
const motivation = '(?: to prevent secret exposure in source control)?';
|
|
44
|
+
const modal = '(?:must|should)';
|
|
45
|
+
const externalize = new RegExp(`^${key} ${modal} (?:never be hardcoded in ${source} and ${modal} )?be loaded from ${destination}${motivation}$`, 'i');
|
|
46
|
+
const imperative = new RegExp(`^(?:load ${key} from ${destination}|use ${destination})$`, 'i');
|
|
47
|
+
if (externalize.test(sentence) || imperative.test(sentence))
|
|
48
|
+
return true;
|
|
49
|
+
const actor = '(?:anyone who reads the source code|an attacker with source access)';
|
|
50
|
+
const capability = '(?:can|could|may)';
|
|
51
|
+
const tokens = `(?:${purpose}s|${purpose} tokens)`;
|
|
52
|
+
const forge = new RegExp(`^${actor} ${capability} (?:forge|create) valid ${tokens} and impersonate (?:any user|users)$`, 'i');
|
|
53
|
+
return forge.test(sentence);
|
|
54
|
+
}
|
|
55
|
+
function hardcodedKey(f) {
|
|
56
|
+
const title = /^Hardcoded (?:([A-Z][A-Z0-9_]*) )?secret(?: key)?(?: in ([A-Z][A-Z0-9_]*) verification| exposes authentication to attack)?$/.exec(text(f.title));
|
|
57
|
+
if (!title)
|
|
58
|
+
return;
|
|
59
|
+
const purpose = title[1] ?? title[2];
|
|
60
|
+
if (!purpose)
|
|
61
|
+
return;
|
|
62
|
+
const binding = /^const ([A-Za-z_$][\w$]*) = process\.env\.([A-Za-z_$][\w$]*)/.exec((f.suggestedFix ?? '').trim());
|
|
63
|
+
if (!binding)
|
|
64
|
+
return;
|
|
65
|
+
const parts = sentences(f.description);
|
|
66
|
+
const literal = /^A hardcoded secret ('[^']*'|"[^"]*") is used for ([A-Z][A-Z0-9_]*) signing and verification$/.exec(parts[0] ?? '');
|
|
67
|
+
const staticKey = /^The ([A-Z][A-Z0-9_]*)(?: signing)? (?:secret|key) (?:is|was|remains) (?:hardcoded (?:as a string literal|in (?:the )?(?:source|code))|a hardcoded string constant)$/.exec(parts[0] ?? '');
|
|
68
|
+
if ((literal?.[2] ?? staticKey?.[1]) !== purpose)
|
|
69
|
+
return;
|
|
70
|
+
if (!parts.slice(1).every(part => keyExternalizationClause(part, purpose)))
|
|
71
|
+
return;
|
|
72
|
+
return { kind: 'embedded-authentication-key', subject: [`${purpose} signing and verification`, binding[1], binding[2]],
|
|
73
|
+
condition: 'The named authentication key is embedded in source instead of loaded from external configuration.',
|
|
74
|
+
// The original finding retains its source observation. A fresh semantic
|
|
75
|
+
// descriptor needs only its presence, never another copy of a credential.
|
|
76
|
+
observations: literal ? ['Source literal observed'] : [] };
|
|
77
|
+
}
|
|
78
|
+
/** Accept a direct query argument or an immediately used immutable binding. */
|
|
79
|
+
function sqlParameter(fix, query) {
|
|
80
|
+
const before = fix.slice(0, query.index);
|
|
81
|
+
const after = fix.slice(query.index + query[0].length);
|
|
82
|
+
const call = '[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)*';
|
|
83
|
+
if (before.trimEnd().endsWith('(')) {
|
|
84
|
+
return /^\s*,\s*\[\s*([A-Za-z_$][\w$]*)\s*\]\s*\)/.exec(after)?.[1];
|
|
85
|
+
}
|
|
86
|
+
const statement = before.slice(Math.max(before.lastIndexOf(';'), before.lastIndexOf('\n')) + 1);
|
|
87
|
+
const declaration = /^\s*const ([A-Za-z_$][\w$]*)\s*=\s*$/.exec(statement);
|
|
88
|
+
if (!declaration)
|
|
89
|
+
return;
|
|
90
|
+
const binding = declaration[1].replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
91
|
+
return new RegExp(`^\\s*;\\s*(?:return\\s+|await\\s+)?${call}\\(\\s*${binding}\\s*,\\s*\\[\\s*([A-Za-z_$][\\w$]*)\\s*\\]\\s*\\)(?:\\s*;)?$`).exec(after.trimEnd())?.[1];
|
|
92
|
+
}
|
|
93
|
+
function sqlInterpolation(f) {
|
|
94
|
+
const title = /^SQL injection(?: vulnerability)? (?:in|via string interpolation in) ([A-Za-z_$][\w$]*|DELETE endpoint)$/i.exec(text(f.title));
|
|
95
|
+
if (!title)
|
|
96
|
+
return;
|
|
97
|
+
const fix = f.suggestedFix ?? '';
|
|
98
|
+
const queries = [...fix.matchAll(/(['"])(SELECT \* FROM ([A-Za-z_][\w]*) WHERE ([A-Za-z_][\w]*) = (?:\$1|\?)|DELETE FROM ([A-Za-z_][\w]*) WHERE ([A-Za-z_][\w]*) = \$1)\1/gi)];
|
|
99
|
+
if (queries.length !== 1)
|
|
100
|
+
return;
|
|
101
|
+
const query = queries[0];
|
|
102
|
+
const parameter = sqlParameter(fix, query);
|
|
103
|
+
if (!parameter)
|
|
104
|
+
return;
|
|
105
|
+
const operation = query[3] ? 'SELECT' : 'DELETE';
|
|
106
|
+
const table = query[3] ?? query[5];
|
|
107
|
+
const column = query[4] ?? query[6];
|
|
108
|
+
const parts = sentences(f.description);
|
|
109
|
+
const core = /^(User-controlled input|The ([A-Za-z_$][\w$]*) parameter|The user ID from the URL parameter|The ([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+) value) is (?:directly )?interpolated(?: directly)? into (?:a |the )?(SQL query string|SQL string|SQL query|SQL DELETE statement)(?: without sanitization(?: or parameterization)?)?$/i.exec(parts[0] ?? '');
|
|
110
|
+
if (!core)
|
|
111
|
+
return;
|
|
112
|
+
const namedSource = core[2] ?? core[3]?.split('.').at(-1);
|
|
113
|
+
if (namedSource && namedSource !== parameter)
|
|
114
|
+
return;
|
|
115
|
+
if (core[4]?.toUpperCase() === 'SQL DELETE STATEMENT' && operation !== 'DELETE')
|
|
116
|
+
return;
|
|
117
|
+
if (title[1]?.toUpperCase() === 'DELETE ENDPOINT' && operation !== 'DELETE')
|
|
118
|
+
return;
|
|
119
|
+
if (!parts.slice(1).every(part => /^This (?:is a (?:classic|textbook) SQL injection vulnerability|allows SQL injection attacks)$/i.test(part)))
|
|
120
|
+
return;
|
|
121
|
+
return { kind: 'sql-value-interpolation', subject: [title[1], operation, table, column, '=', parameter],
|
|
122
|
+
condition: 'The named input value is interpolated into SQL syntax instead of passed as a bound parameter.', observations: [] };
|
|
123
|
+
}
|
|
124
|
+
function ownerAuthorization(f) {
|
|
125
|
+
const title = /^(?:IDOR: missing authorization on DELETE endpoint|Missing authorization check allows any user to delete any ([a-z]+)|IDOR vulnerability [—–-] missing ownership check on delete)$/i.exec(text(f.title));
|
|
126
|
+
if (!title)
|
|
127
|
+
return;
|
|
128
|
+
const parts = sentences(f.description);
|
|
129
|
+
let deletion = false;
|
|
130
|
+
let ownership = false;
|
|
131
|
+
let resource;
|
|
132
|
+
// A named route is supported only when it names this file's resource and
|
|
133
|
+
// its sole parameter is the target id. Other routes/conditions stay raw.
|
|
134
|
+
const fileResource = f.file.split('/').at(-1)?.replace(/\.[^.]+$/, '').toLowerCase();
|
|
135
|
+
for (const part of parts) {
|
|
136
|
+
const effect = /^Any authenticated user can delete any (?:other user's ([a-z]+)(?: by supplying a different user ID in the URL)?|([a-z]+) including other users' ([a-z]+)s)$/i.exec(part);
|
|
137
|
+
if (effect) {
|
|
138
|
+
const target = (effect[1] ?? effect[3]).toLowerCase();
|
|
139
|
+
const namedResource = effect[2]?.toLowerCase();
|
|
140
|
+
if (resource && resource !== target ||
|
|
141
|
+
namedResource && namedResource !== target && namedResource !== `${target}s`)
|
|
142
|
+
return;
|
|
143
|
+
resource = target;
|
|
144
|
+
deletion = true;
|
|
145
|
+
}
|
|
146
|
+
else if (/^The endpoint only (?:checks|validates) authentication but not authorization$/i.test(part)) {
|
|
147
|
+
ownership = true;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const route = /^The DELETE \/([A-Za-z_][\w]*)\/:id endpoint only (?:checks|validates) authentication but not authorization$/i.exec(part);
|
|
151
|
+
if (route) {
|
|
152
|
+
if (route[1].toLowerCase() !== fileResource)
|
|
153
|
+
return;
|
|
154
|
+
ownership = true;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const owner = /^There is no check that the requesting user owns the ([a-z]+) being deleted$/i.exec(part);
|
|
158
|
+
const ownerResource = owner?.[1]?.toLowerCase();
|
|
159
|
+
if (!ownerResource || resource && resource !== ownerResource)
|
|
160
|
+
return;
|
|
161
|
+
resource = ownerResource;
|
|
162
|
+
ownership = true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (!deletion || !ownership || !resource || title[1] && title[1].toLowerCase() !== resource)
|
|
166
|
+
return;
|
|
167
|
+
return { kind: 'absent-owner-authorization', subject: ['authenticated user', 'DELETE', resource, 'requesting user owns target resource'],
|
|
168
|
+
condition: 'Authentication alone permits deletion of another user resource without checking ownership.', observations: [] };
|
|
169
|
+
}
|
|
170
|
+
function unboundedCollection(f) {
|
|
171
|
+
const title = /^(?:Missing pagination on ([A-Za-z_][\w]*) listing endpoint|Unbounded query on ([A-Za-z_][\w]*) table)$/i.exec(text(f.title));
|
|
172
|
+
if (!title)
|
|
173
|
+
return;
|
|
174
|
+
const parts = sentences(f.description);
|
|
175
|
+
const route = /^The GET \/([A-Za-z_][\w]*) endpoint fetches all ([A-Za-z_][\w]*) without pagination$/i.exec(parts[0] ?? '');
|
|
176
|
+
const sql = /^SELECT \* FROM ([A-Za-z_][\w]*) without a LIMIT clause will return all records$/i.exec(parts[0] ?? '');
|
|
177
|
+
if (!route && !sql)
|
|
178
|
+
return;
|
|
179
|
+
if (route && route[1].toLowerCase() !== route[2].toLowerCase())
|
|
180
|
+
return;
|
|
181
|
+
const resource = (route?.[1] ?? sql[1]).toLowerCase();
|
|
182
|
+
if ((title[1] ?? title[2]).toLowerCase().replace(/s$/, '') !== resource.replace(/s$/, ''))
|
|
183
|
+
return;
|
|
184
|
+
if (!parts.slice(1).every(part => /^(?:This will cause performance issues and excessive memory usage at scale|Add pagination to prevent memory exhaustion)$/i.test(part)))
|
|
185
|
+
return;
|
|
186
|
+
return { kind: 'unbounded-collection-materialization', subject: [resource, 'read all records', 'no pagination or row limit'],
|
|
187
|
+
condition: 'Reading the named collection materializes all records without a row bound.', observations: [] };
|
|
188
|
+
}
|
|
189
|
+
function labelPrivilege(f) {
|
|
190
|
+
const title = /^(?:([a-z]+) check uses username instead of role|Broken ([a-z]+) role check [—–-] compares username instead of role)$/i.exec(text(f.title));
|
|
191
|
+
if (!title)
|
|
192
|
+
return;
|
|
193
|
+
const parts = sentences(f.description);
|
|
194
|
+
const core = /^The ([A-Za-z_$][\w$]*) (?:middleware|guard) checks (?:if )?([A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*) === ('[^']*'|"[^"]*") (?:instead of checking a proper role field|which is a broken security check)$/i.exec(parts[0] ?? '');
|
|
195
|
+
if (!core)
|
|
196
|
+
return;
|
|
197
|
+
if (core[2].split('.').at(-1)?.toLowerCase() !== 'username')
|
|
198
|
+
return;
|
|
199
|
+
const literal = core[3].slice(1, -1);
|
|
200
|
+
if ((title[1] ?? title[2]).toLowerCase() !== literal.toLowerCase())
|
|
201
|
+
return;
|
|
202
|
+
// The effects and remedy must refer to the same privilege named in the
|
|
203
|
+
// compared literal. Other principals, conditions, or extra duties refuse.
|
|
204
|
+
const escaped = literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
205
|
+
const effects = new RegExp(`^Any user named ['"]${escaped}['"] would get ${escaped} access, and actual ${escaped}s with different usernames would be denied$`, 'i');
|
|
206
|
+
const flag = `is${literal[0].toUpperCase()}${literal.slice(1)}`;
|
|
207
|
+
if (!parts.slice(1).every(part => effects.test(part) || part === `It should verify a roles array or an ${flag} flag`))
|
|
208
|
+
return;
|
|
209
|
+
return { kind: 'label-derived-privilege', subject: [core[1], core[2], '===', literal, 'role membership'],
|
|
210
|
+
condition: 'The privilege decision compares the principal username to a label instead of checking role membership.', observations: [] };
|
|
211
|
+
}
|
|
212
|
+
/** Parse the access and its absent-key precondition, including contextual guards. */
|
|
213
|
+
function mapFieldAccess(f) {
|
|
214
|
+
if ((f.description.match(/`/g) ?? []).length % 2 !== 0)
|
|
215
|
+
return;
|
|
216
|
+
const parts = sentences(f.description.replaceAll('`', ''));
|
|
217
|
+
if (parts.length !== 2)
|
|
218
|
+
return;
|
|
219
|
+
const first = /^([A-Za-z_][\w]*(?:\/\d+)?) safely Map\.gets :([A-Za-z_][\w]*) \/ :([A-Za-z_][\w]*), then uses ([A-Za-z_][\w]*)\.([A-Za-z_][\w]*) with dot access for the final fallback$/.exec(parts[0]) ??
|
|
220
|
+
/^([A-Za-z_][\w]*(?:\/\d+)?) retrieves :([A-Za-z_][\w]*) and :([A-Za-z_][\w]*) defensively using Map\.get\/2, but accesses ([A-Za-z_][\w]*)\.([A-Za-z_][\w]*) using dot syntax$/.exec(parts[0]);
|
|
221
|
+
if (!first)
|
|
222
|
+
return;
|
|
223
|
+
const [, helper, guardedA, guardedB, receiver, field] = first;
|
|
224
|
+
const title = /^([A-Za-z_][\w]*(?:\/\d+)?) mixes Map\.get with hard field access$/.exec(text(f.title));
|
|
225
|
+
const accessTitle = /^Unsafe map field access ([A-Za-z_][\w]*)\.([A-Za-z_][\w]*) in ([A-Za-z_][\w]*(?:\/\d+)?)$/.exec(text(f.title));
|
|
226
|
+
if (!title && !accessTitle)
|
|
227
|
+
return;
|
|
228
|
+
const titleHelper = title?.[1] ?? accessTitle[3];
|
|
229
|
+
if (titleHelper.includes('/') ? titleHelper !== helper : titleHelper !== helper.split('/')[0])
|
|
230
|
+
return;
|
|
231
|
+
if (accessTitle && (accessTitle[1] !== receiver || accessTitle[2] !== field))
|
|
232
|
+
return;
|
|
233
|
+
const absent = /^A bare ([A-Za-z_][\w]*) map missing :([A-Za-z_][\w]*) will raise KeyError(?: despite the comment that this ("[^"]+"|“[^”]+”))?$/.exec(parts[1]);
|
|
234
|
+
const conditional = /^If ([A-Za-z_][\w]*) is missing the :([A-Za-z_][\w]*) key, evaluating ([A-Za-z_][\w]*)\.([A-Za-z_][\w]*) will raise a KeyError$/.exec(parts[1]);
|
|
235
|
+
if (!absent && !conditional)
|
|
236
|
+
return;
|
|
237
|
+
if ((absent?.[1] ?? conditional[1]) !== receiver || (absent?.[2] ?? conditional[2]) !== field)
|
|
238
|
+
return;
|
|
239
|
+
if (conditional && (conditional[3] !== receiver || conditional[4] !== field))
|
|
240
|
+
return;
|
|
241
|
+
return { kind: 'unguarded-map-field-access', subject: [helper, receiver, field, [guardedA, guardedB].sort().join(','), 'strict dot access', 'absent key raises KeyError'],
|
|
242
|
+
condition: CONTRACTS['unguarded-map-field-access'].condition,
|
|
243
|
+
// A quoted comment is attributed context, not an asserted extra runtime
|
|
244
|
+
// obligation. Preserve it verbatim in its immutable sighting descriptor.
|
|
245
|
+
observations: absent?.[3] ? [`Quoted comment observed: ${absent[3]}`] : [] };
|
|
246
|
+
}
|
|
247
|
+
/** Every accepted sentence is parsed; no subset of a compound claim qualifies. */
|
|
248
|
+
export function describeContract(f) {
|
|
249
|
+
const contract = hardcodedKey(f) ?? sqlInterpolation(f) ?? ownerAuthorization(f) ?? unboundedCollection(f) ?? labelPrivilege(f) ?? mapFieldAccess(f);
|
|
250
|
+
if (!contract)
|
|
251
|
+
return;
|
|
252
|
+
const descriptor = {
|
|
253
|
+
version: 1,
|
|
254
|
+
operation: `${f.file} :: ${PREFIX}${JSON.stringify([contract.kind, contract.subject])}`,
|
|
255
|
+
invariant: contract.condition,
|
|
256
|
+
evidence: [evidence(contract.kind, contract.subject), ...contract.observations],
|
|
257
|
+
};
|
|
258
|
+
if ([descriptor.operation, descriptor.invariant, ...descriptor.evidence].some(value => [...value].length > 500))
|
|
259
|
+
return;
|
|
260
|
+
return descriptor;
|
|
261
|
+
}
|
|
262
|
+
export function isContractDescriptor(descriptor) {
|
|
263
|
+
return descriptor.operation.includes(` :: ${PREFIX}`);
|
|
264
|
+
}
|
|
265
|
+
/** Applies only to explicitly generated contracts, never to retained free text. */
|
|
266
|
+
export function compareContractDescriptors(a, b) {
|
|
267
|
+
const parse = (descriptor) => {
|
|
268
|
+
const marker = descriptor.operation.indexOf(` :: ${PREFIX}`);
|
|
269
|
+
if (marker <= 0)
|
|
270
|
+
return;
|
|
271
|
+
try {
|
|
272
|
+
const parsed = JSON.parse(descriptor.operation.slice(marker + ` :: ${PREFIX}`.length));
|
|
273
|
+
if (!Array.isArray(parsed) || parsed.length !== 2 || typeof parsed[0] !== 'string' ||
|
|
274
|
+
!Object.hasOwn(CONTRACTS, parsed[0]) || !Array.isArray(parsed[1]))
|
|
275
|
+
return;
|
|
276
|
+
const kind = parsed[0];
|
|
277
|
+
const subject = parsed[1];
|
|
278
|
+
if (subject.length !== CONTRACTS[kind].fields.length || !subject.every(value => typeof value === 'string' && value.length > 0))
|
|
279
|
+
return;
|
|
280
|
+
if (descriptor.invariant !== CONTRACTS[kind].condition || descriptor.evidence[0] !== evidence(kind, subject))
|
|
281
|
+
return;
|
|
282
|
+
if (!['embedded-authentication-key', 'unguarded-map-field-access'].includes(kind) && descriptor.evidence.length !== 1)
|
|
283
|
+
return;
|
|
284
|
+
if (descriptor.evidence.length > 2)
|
|
285
|
+
return;
|
|
286
|
+
return kind;
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
const kind = parse(a);
|
|
293
|
+
if (!kind || parse(b) !== kind)
|
|
294
|
+
return;
|
|
295
|
+
if (a.operation !== b.operation || a.invariant !== b.invariant || a.evidence[0] !== b.evidence[0])
|
|
296
|
+
return;
|
|
297
|
+
// Embedding any literal violates this contract. New descriptors retain only
|
|
298
|
+
// the observation's presence; historical literal observations stay readable
|
|
299
|
+
// and are compared without rewriting their immutable descriptor bytes.
|
|
300
|
+
const observation = kind === 'unguarded-map-field-access'
|
|
301
|
+
? /^Quoted comment observed: ("[^"]+"|“[^”]+”)$/
|
|
302
|
+
: /^Source literal observed(?:: ('[^']*'|"[^"]*"))?$/;
|
|
303
|
+
if (![...a.evidence.slice(1), ...b.evidence.slice(1)].every(value => observation.test(value)))
|
|
304
|
+
return;
|
|
305
|
+
return JSON.stringify(a.evidence) === JSON.stringify(b.evidence) ? 'exact_descriptor' : 'supported_paraphrase';
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=claim-contract.js.map
|