@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,307 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { detectProvider } from '../roles/dispatcher.js';
|
|
3
|
+
import { uuidv7 } from './uuid.js';
|
|
4
|
+
export function sha256Hex(data) {
|
|
5
|
+
return createHash('sha256').update(data).digest('hex');
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* JSON with object keys sorted at every level, so digests ignore key order.
|
|
9
|
+
* Values JSON cannot express (undefined, functions, symbols) serialize as
|
|
10
|
+
* `null` — the same as `JSON.stringify` does for them inside arrays — so the
|
|
11
|
+
* result is always a string and never the bare `undefined` JSON.stringify
|
|
12
|
+
* returns for a top-level non-value.
|
|
13
|
+
*/
|
|
14
|
+
export function stableStringify(value) {
|
|
15
|
+
if (Array.isArray(value)) {
|
|
16
|
+
return `[${value.map((v) => stableStringify(v)).join(',')}]`;
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === 'object' && value !== null) {
|
|
19
|
+
const entries = Object.entries(value)
|
|
20
|
+
.filter(([, v]) => v !== undefined)
|
|
21
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
22
|
+
.map(([k, v]) => `${JSON.stringify(k)}:${stableStringify(v)}`);
|
|
23
|
+
return `{${entries.join(',')}}`;
|
|
24
|
+
}
|
|
25
|
+
const encoded = JSON.stringify(value);
|
|
26
|
+
return encoded === undefined ? 'null' : encoded;
|
|
27
|
+
}
|
|
28
|
+
export function guardedInputSha256(value) {
|
|
29
|
+
return sha256Hex(stableStringify(value));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Digest of what the council actually read: every file's name, status,
|
|
33
|
+
* previous name and patch, sorted by filename so the value is independent of
|
|
34
|
+
* listing order. The serialization is JSON — every field delimited and
|
|
35
|
+
* escaped — so two distinct diffs cannot collide by sharing a separator
|
|
36
|
+
* character in a filename or patch line. Uniform across PR, patch, git and
|
|
37
|
+
* plan modes (PR mode has no raw diff).
|
|
38
|
+
*/
|
|
39
|
+
export function diffDigest(files) {
|
|
40
|
+
// Streamed file by file — the bytes hashed are exactly
|
|
41
|
+
// stableStringify(array of records), but only one record's patch is ever
|
|
42
|
+
// serialized at a time, so a very large diff never needs a second full
|
|
43
|
+
// copy of itself in memory.
|
|
44
|
+
const hash = createHash('sha256');
|
|
45
|
+
const sorted = [...files].sort((a, b) => a.filename < b.filename ? -1 : a.filename > b.filename ? 1 : 0);
|
|
46
|
+
hash.update('[');
|
|
47
|
+
sorted.forEach((f, i) => {
|
|
48
|
+
if (i > 0)
|
|
49
|
+
hash.update(',');
|
|
50
|
+
// additions/deletions are part of the record: for a binary or oversized
|
|
51
|
+
// file GitHub sends no patch, and the counts are then the only thing
|
|
52
|
+
// that distinguishes two different changes to it.
|
|
53
|
+
hash.update(stableStringify({
|
|
54
|
+
filename: f.filename,
|
|
55
|
+
status: f.status,
|
|
56
|
+
previousFilename: f.previousFilename ?? null,
|
|
57
|
+
patch: f.patch,
|
|
58
|
+
additions: f.additions,
|
|
59
|
+
deletions: f.deletions,
|
|
60
|
+
// Binds a patchless (binary / oversized) file to its content where
|
|
61
|
+
// the source provides a blob id.
|
|
62
|
+
blobSha: f.blobSha ?? null,
|
|
63
|
+
}));
|
|
64
|
+
});
|
|
65
|
+
hash.update(']');
|
|
66
|
+
return hash.digest('hex');
|
|
67
|
+
}
|
|
68
|
+
/** Config fields that are credentials: never part of any digest. */
|
|
69
|
+
export const EXCLUDED_CONFIG_FIELDS = ['githubToken', 'harness'];
|
|
70
|
+
/**
|
|
71
|
+
* The config fields the digest covers — an explicit allow-list. Every key of
|
|
72
|
+
* `ConfigSchema` must appear either here or in `EXCLUDED_CONFIG_FIELDS`: the
|
|
73
|
+
* exhaustiveness assertion below turns a new field into a compile error until
|
|
74
|
+
* someone decides which list it belongs to, so a new setting can neither be
|
|
75
|
+
* silently dropped from the digest nor a new credential silently hashed.
|
|
76
|
+
*/
|
|
77
|
+
export const DIGESTED_CONFIG_FIELDS = [
|
|
78
|
+
'models',
|
|
79
|
+
'secondaryModels',
|
|
80
|
+
'asyncModels',
|
|
81
|
+
'roles',
|
|
82
|
+
'reviewers',
|
|
83
|
+
'customRoles',
|
|
84
|
+
'thresholds',
|
|
85
|
+
'gating',
|
|
86
|
+
'output',
|
|
87
|
+
'timeout',
|
|
88
|
+
'asyncTimeout',
|
|
89
|
+
'quorumFraction',
|
|
90
|
+
'maxRetries',
|
|
91
|
+
'concurrency',
|
|
92
|
+
'providerConcurrency',
|
|
93
|
+
'reasoningEffort',
|
|
94
|
+
'context',
|
|
95
|
+
'spec',
|
|
96
|
+
'focus',
|
|
97
|
+
];
|
|
98
|
+
const _everyConfigFieldDecided = true;
|
|
99
|
+
void _everyConfigFieldDecided;
|
|
100
|
+
/** Canonical allow-listed, resolved config fields (never a credential). */
|
|
101
|
+
export function configIdentity(config) {
|
|
102
|
+
const projection = {};
|
|
103
|
+
for (const key of DIGESTED_CONFIG_FIELDS) {
|
|
104
|
+
if (config[key] !== undefined)
|
|
105
|
+
projection[key] = config[key];
|
|
106
|
+
}
|
|
107
|
+
return stableStringify(projection);
|
|
108
|
+
}
|
|
109
|
+
/** Digest shared by report headers, launch identity and original-policy proof. */
|
|
110
|
+
export function configDigest(config) {
|
|
111
|
+
return sha256Hex(configIdentity(config));
|
|
112
|
+
}
|
|
113
|
+
/** A dispatched seat's lane: the council's own models block, the others are secondary. */
|
|
114
|
+
export function assignmentLane(model, coreModels, explicit = false) {
|
|
115
|
+
return explicit || coreModels.includes(model) ? 'blocking' : 'secondary';
|
|
116
|
+
}
|
|
117
|
+
export function buildRoster(input) {
|
|
118
|
+
const roster = input.assignments.map((a) => ({
|
|
119
|
+
model: a.model,
|
|
120
|
+
role: a.role.name,
|
|
121
|
+
provider: a.provider,
|
|
122
|
+
lane: assignmentLane(a.model, input.coreModels, input.explicit),
|
|
123
|
+
}));
|
|
124
|
+
for (const a of input.asyncAssignments) {
|
|
125
|
+
roster.push({ model: a.model, role: a.role.name, provider: a.provider, lane: 'async' });
|
|
126
|
+
}
|
|
127
|
+
if (input.gating.mode === 'verified-consensus' && input.gating.verificationModel) {
|
|
128
|
+
roster.push({
|
|
129
|
+
model: input.gating.verificationModel,
|
|
130
|
+
role: 'verification',
|
|
131
|
+
provider: detectProvider(input.gating.verificationModel),
|
|
132
|
+
lane: 'verification',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return roster;
|
|
136
|
+
}
|
|
137
|
+
const MAX_HOST_CHARS = 64;
|
|
138
|
+
/** Environment markers → agent name. Only these variables are ever read. */
|
|
139
|
+
const AGENT_MARKERS = [
|
|
140
|
+
['CLAUDECODE', 'claude-code'],
|
|
141
|
+
['CLAUDE_CODE_ENTRYPOINT', 'claude-code'],
|
|
142
|
+
['CODEX_SANDBOX', 'codex'],
|
|
143
|
+
['CODEX_CI', 'codex'],
|
|
144
|
+
['CURSOR_AGENT', 'cursor'],
|
|
145
|
+
['GEMINI_CLI', 'gemini-cli'],
|
|
146
|
+
['AIDER_MODEL', 'aider'],
|
|
147
|
+
];
|
|
148
|
+
/**
|
|
149
|
+
* Who appears to be driving this run. Recorded as a CLAIM: the server's
|
|
150
|
+
* authoritative actor is the credential's user (and, for attested runs, the
|
|
151
|
+
* OIDC claims). Pure: reads only the allow-listed variables of the `env`
|
|
152
|
+
* it is handed.
|
|
153
|
+
*/
|
|
154
|
+
/**
|
|
155
|
+
* CI markers → the variable carrying that provider's run id (when it has
|
|
156
|
+
* one). Provider-specific markers come first; the generic `CI` flag most
|
|
157
|
+
* providers also set is the last resort and carries no run id.
|
|
158
|
+
*/
|
|
159
|
+
const CI_MARKERS = [
|
|
160
|
+
['GITHUB_ACTIONS', 'GITHUB_RUN_ID'],
|
|
161
|
+
['GITLAB_CI', 'CI_PIPELINE_ID'],
|
|
162
|
+
['CIRCLECI', 'CIRCLE_WORKFLOW_ID'],
|
|
163
|
+
['BUILDKITE', 'BUILDKITE_BUILD_ID'],
|
|
164
|
+
['JENKINS_URL', 'BUILD_ID'],
|
|
165
|
+
['CI', undefined],
|
|
166
|
+
];
|
|
167
|
+
export function detectRunner(env, hostname) {
|
|
168
|
+
const host = hostname.slice(0, MAX_HOST_CHARS);
|
|
169
|
+
const isSet = (name) => (env[name] ?? '').trim() !== '';
|
|
170
|
+
for (const [envVar, runIdVar] of CI_MARKERS) {
|
|
171
|
+
if (!isSet(envVar))
|
|
172
|
+
continue;
|
|
173
|
+
const runId = runIdVar !== undefined ? env[runIdVar]?.trim() : undefined;
|
|
174
|
+
return { kind: 'ci', ...(runId ? { ci_run_id: runId } : {}), host };
|
|
175
|
+
}
|
|
176
|
+
for (const [envVar, agent] of AGENT_MARKERS) {
|
|
177
|
+
if (isSet(envVar))
|
|
178
|
+
return { kind: 'agent', agent, host };
|
|
179
|
+
}
|
|
180
|
+
return { kind: 'human', host };
|
|
181
|
+
}
|
|
182
|
+
const HARNESS_ISSUE_SOURCE = /^harness_issue:[A-Z][A-Z0-9]*-\d+$/;
|
|
183
|
+
export function parseSpecSource(value) {
|
|
184
|
+
if (value === 'flag' || value === 'repo_file')
|
|
185
|
+
return value;
|
|
186
|
+
if (HARNESS_ISSUE_SOURCE.test(value))
|
|
187
|
+
return value;
|
|
188
|
+
throw new Error(`Invalid --spec-source "${value}". Use flag, repo_file, or harness_issue:<ID> (e.g. harness_issue:IO-1234).`);
|
|
189
|
+
}
|
|
190
|
+
/** A full Git object id: SHA-1 (40 hex) or SHA-256 repositories (64 hex). */
|
|
191
|
+
export const FULL_OBJECT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
192
|
+
/** Exact-head binding needs the full object id; abbreviations are ambiguous. */
|
|
193
|
+
export function validateSha(value, flag) {
|
|
194
|
+
const sha = value.trim().toLowerCase();
|
|
195
|
+
if (!FULL_OBJECT_ID.test(sha)) {
|
|
196
|
+
throw new Error(`${flag} must be a full 40- or 64-character hex commit SHA, got "${value}".`);
|
|
197
|
+
}
|
|
198
|
+
// Git's null object id means "no object" — a review cannot be bound to it.
|
|
199
|
+
if (/^0+$/.test(sha)) {
|
|
200
|
+
throw new Error(`${flag} is the null object id (all zeros), which names no commit.`);
|
|
201
|
+
}
|
|
202
|
+
return sha;
|
|
203
|
+
}
|
|
204
|
+
function positiveInt(value, flag) {
|
|
205
|
+
if (value === undefined || value === '')
|
|
206
|
+
return undefined;
|
|
207
|
+
const n = Number(value);
|
|
208
|
+
if (!Number.isSafeInteger(n) || n < 1) {
|
|
209
|
+
throw new Error(`${flag} must be a positive integer, got "${value}".`);
|
|
210
|
+
}
|
|
211
|
+
return n;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* The converge loop's context for this round. Flags win over the
|
|
215
|
+
* `RCL_CONVERGE_*` environment the rcl-converge skill exports; without a
|
|
216
|
+
* target there is no converge context at all.
|
|
217
|
+
*/
|
|
218
|
+
export function resolveConvergeContext(flags, env) {
|
|
219
|
+
// A blank flag is "unset", so the environment still applies — a shell
|
|
220
|
+
// expanding an empty variable into --round "" must not erase the round.
|
|
221
|
+
const flag = (value) => value === undefined || value.trim() === '' ? undefined : value.trim();
|
|
222
|
+
const target = (flag(flags.convergeTarget) ?? env['RCL_CONVERGE_TARGET'] ?? '').trim();
|
|
223
|
+
// Validate before deciding whether a context exists at all: a bad --round
|
|
224
|
+
// must fail fast even when the target is missing, and a round or attempt
|
|
225
|
+
// without a target is a mistake, not something to drop silently.
|
|
226
|
+
const round = positiveInt(flag(flags.round) ?? env['RCL_CONVERGE_ROUND'], '--round');
|
|
227
|
+
const attempt = positiveInt(flag(flags.attempt) ?? env['RCL_CONVERGE_ATTEMPT'], '--attempt');
|
|
228
|
+
if (target === '') {
|
|
229
|
+
if (round !== undefined || attempt !== undefined) {
|
|
230
|
+
throw new Error('--round / --attempt (or RCL_CONVERGE_ROUND / RCL_CONVERGE_ATTEMPT) need a converge target: pass --converge-target <key> or RCL_CONVERGE_TARGET.');
|
|
231
|
+
}
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
target,
|
|
236
|
+
...(round !== undefined ? { round } : {}),
|
|
237
|
+
...(attempt !== undefined ? { attempt } : {}),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/** One human-readable phrase for status lines and the Markdown header. */
|
|
241
|
+
export function describeRunTarget(target) {
|
|
242
|
+
const where = target.kind === 'pr'
|
|
243
|
+
? `${target.repo ?? '?'}#${target.pr_number ?? '?'}`
|
|
244
|
+
: target.kind === 'working_tree'
|
|
245
|
+
? 'working tree'
|
|
246
|
+
: target.kind;
|
|
247
|
+
const head = target.head_sha ? ` @ ${target.head_sha.slice(0, 12)}` : '';
|
|
248
|
+
return `${where}${head} (diff ${target.diff_sha256.slice(0, 12)})`;
|
|
249
|
+
}
|
|
250
|
+
export function buildRunHeader(input) {
|
|
251
|
+
const { target, diff } = input;
|
|
252
|
+
if (input.cycleId !== undefined && input.converge?.cycleId !== undefined && input.cycleId !== input.converge.cycleId) {
|
|
253
|
+
throw new Error('review_cycle_header_mismatch');
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
id: input.id ?? uuidv7(),
|
|
257
|
+
rcl_version: input.rclVersion,
|
|
258
|
+
command: input.command,
|
|
259
|
+
target: {
|
|
260
|
+
kind: target.kind,
|
|
261
|
+
...(target.repo !== undefined ? { repo: target.repo } : {}),
|
|
262
|
+
...(target.prNumber !== undefined ? { pr_number: target.prNumber } : {}),
|
|
263
|
+
...(target.url !== undefined ? { url: target.url } : {}),
|
|
264
|
+
...(target.headSha !== undefined ? { head_sha: target.headSha } : {}),
|
|
265
|
+
...(target.baseSha !== undefined ? { base_sha: target.baseSha } : {}),
|
|
266
|
+
...(target.headRef !== undefined ? { head_ref: target.headRef } : {}),
|
|
267
|
+
...(target.baseRef !== undefined ? { base_ref: target.baseRef } : {}),
|
|
268
|
+
diff_sha256: diffDigest(diff.files),
|
|
269
|
+
files: diff.files.length,
|
|
270
|
+
additions: diff.files.reduce((sum, f) => sum + f.additions, 0),
|
|
271
|
+
deletions: diff.files.reduce((sum, f) => sum + f.deletions, 0),
|
|
272
|
+
},
|
|
273
|
+
roster: input.roster.map((r) => ({ ...r })),
|
|
274
|
+
config_sha256: configDigest(input.config),
|
|
275
|
+
thresholds: {
|
|
276
|
+
min_consensus_score: input.thresholds.minConsensusScore,
|
|
277
|
+
min_confidence: input.thresholds.minConfidence,
|
|
278
|
+
dedupe_line_window: input.thresholds.dedupeLineWindow,
|
|
279
|
+
jaccard_threshold: input.thresholds.jaccardThreshold,
|
|
280
|
+
},
|
|
281
|
+
gating: {
|
|
282
|
+
mode: input.gating.mode,
|
|
283
|
+
min_models: input.gating.minModels,
|
|
284
|
+
...(input.gating.verificationModel !== undefined
|
|
285
|
+
? { verification_model: input.gating.verificationModel }
|
|
286
|
+
: {}),
|
|
287
|
+
...(input.gating.verificationReasoningEffort ? { verification_reasoning_effort: input.gating.verificationReasoningEffort } : {}),
|
|
288
|
+
verification_timeout_ms: input.gating.verificationTimeoutMs,
|
|
289
|
+
verification_pass_timeout_ms: input.gating.verificationPassTimeoutMs,
|
|
290
|
+
},
|
|
291
|
+
...(input.spec ? { spec: { source: input.spec.source, sha256: input.spec.sha256 } } : {}),
|
|
292
|
+
context_files: (input.contextFiles ?? []).map((c) => ({ path: c.path, sha256: c.sha256 })),
|
|
293
|
+
...(input.plan ? { plan: { focus: input.plan.focus } } : {}),
|
|
294
|
+
runner: { ...input.runner },
|
|
295
|
+
started_at: input.startedAt.toISOString(),
|
|
296
|
+
finished_at: input.finishedAt.toISOString(),
|
|
297
|
+
duration_ms: Math.max(0, input.finishedAt.getTime() - input.startedAt.getTime()),
|
|
298
|
+
ci_exit_code: input.ciExitCode,
|
|
299
|
+
...((input.cycleId ?? input.converge?.cycleId) ? { cycle_id: input.cycleId ?? input.converge?.cycleId } : {}),
|
|
300
|
+
...(input.converge ? { converge: {
|
|
301
|
+
target: input.converge.target,
|
|
302
|
+
...(input.converge.round !== undefined ? { round: input.converge.round } : {}),
|
|
303
|
+
...(input.converge.attempt !== undefined ? { attempt: input.converge.attempt } : {}),
|
|
304
|
+
} } : {}),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=run-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-header.js","sourceRoot":"","sources":["../../src/report/run-header.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ModelReview } from '../consensus/types.js';
|
|
2
|
+
type DeepReadonly<T> = T extends object ? {
|
|
3
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
4
|
+
} : T;
|
|
5
|
+
export type SupplementalAsync = DeepReadonly<{
|
|
6
|
+
version: 1;
|
|
7
|
+
bytes: string;
|
|
8
|
+
digest: string;
|
|
9
|
+
asyncLaunched: number;
|
|
10
|
+
reviews: ModelReview[];
|
|
11
|
+
reviewBytes: string[];
|
|
12
|
+
}>;
|
|
13
|
+
/** Structural snapshot only; it does not establish worker, provider, or server authority. */
|
|
14
|
+
export declare function isSupplementalAsync(value: unknown): value is SupplementalAsync;
|
|
15
|
+
/** Decode a canonical immutable async snapshot captured during original aggregation. */
|
|
16
|
+
export declare function decodeSupplementalAsync(bytes: string): SupplementalAsync;
|
|
17
|
+
/** Capture exact opaque async review strings in their aggregation order. */
|
|
18
|
+
export declare function captureSupplementalAsync(reviewBytes: readonly string[], asyncLaunched: number): SupplementalAsync;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { blockingCheckpointReviewSchema } from '../dispatch/checkpoint.js';
|
|
4
|
+
import { stableStringify } from './run-header.js';
|
|
5
|
+
const MAX_BYTES = 8 * 1024 * 1024;
|
|
6
|
+
const integer = z.number().int().nonnegative().safe();
|
|
7
|
+
const wireSchema = z.object({ version: z.literal(1), asyncLaunched: integer, reviewBytes: z.array(z.string()) }).strict();
|
|
8
|
+
const asyncReviewSchema = blockingCheckpointReviewSchema.extend({ async: z.literal(true) }).strict();
|
|
9
|
+
const validated = new WeakSet();
|
|
10
|
+
function sha256(bytes) { return createHash('sha256').update(bytes).digest('hex'); }
|
|
11
|
+
function bound(bytes) {
|
|
12
|
+
if (typeof bytes !== 'string' || Buffer.byteLength(bytes, 'utf8') > MAX_BYTES)
|
|
13
|
+
throw new Error('supplemental_async_too_large');
|
|
14
|
+
if (Buffer.from(bytes, 'utf8').toString('utf8') !== bytes)
|
|
15
|
+
throw new Error('supplemental_async_invalid_bytes');
|
|
16
|
+
}
|
|
17
|
+
function deepFreeze(value) {
|
|
18
|
+
if (value && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
19
|
+
for (const child of Object.values(value))
|
|
20
|
+
deepFreeze(child);
|
|
21
|
+
Object.freeze(value);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function snapshot(wire, bytes) {
|
|
26
|
+
const reviews = wire.reviewBytes.map((reviewBytes) => {
|
|
27
|
+
bound(reviewBytes);
|
|
28
|
+
let value;
|
|
29
|
+
try {
|
|
30
|
+
value = JSON.parse(reviewBytes);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new Error('supplemental_async_invalid_review');
|
|
34
|
+
}
|
|
35
|
+
const parsed = asyncReviewSchema.safeParse(value);
|
|
36
|
+
if (!parsed.success)
|
|
37
|
+
throw new Error('supplemental_async_invalid_review');
|
|
38
|
+
return parsed.data;
|
|
39
|
+
});
|
|
40
|
+
const document = deepFreeze({
|
|
41
|
+
version: 1,
|
|
42
|
+
bytes,
|
|
43
|
+
digest: sha256(bytes),
|
|
44
|
+
asyncLaunched: wire.asyncLaunched,
|
|
45
|
+
reviews,
|
|
46
|
+
reviewBytes: [...wire.reviewBytes],
|
|
47
|
+
});
|
|
48
|
+
validated.add(document);
|
|
49
|
+
return document;
|
|
50
|
+
}
|
|
51
|
+
/** Structural snapshot only; it does not establish worker, provider, or server authority. */
|
|
52
|
+
export function isSupplementalAsync(value) {
|
|
53
|
+
return typeof value === 'object' && value !== null && validated.has(value);
|
|
54
|
+
}
|
|
55
|
+
/** Decode a canonical immutable async snapshot captured during original aggregation. */
|
|
56
|
+
export function decodeSupplementalAsync(bytes) {
|
|
57
|
+
bound(bytes);
|
|
58
|
+
let value;
|
|
59
|
+
try {
|
|
60
|
+
value = JSON.parse(bytes);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error('supplemental_async_invalid_document');
|
|
64
|
+
}
|
|
65
|
+
const parsed = wireSchema.safeParse(value);
|
|
66
|
+
if (!parsed.success)
|
|
67
|
+
throw new Error('supplemental_async_invalid_document');
|
|
68
|
+
if (stableStringify(parsed.data) !== bytes)
|
|
69
|
+
throw new Error('supplemental_async_noncanonical');
|
|
70
|
+
return snapshot(parsed.data, bytes);
|
|
71
|
+
}
|
|
72
|
+
/** Capture exact opaque async review strings in their aggregation order. */
|
|
73
|
+
export function captureSupplementalAsync(reviewBytes, asyncLaunched) {
|
|
74
|
+
const wire = { version: 1, asyncLaunched, reviewBytes: [...reviewBytes] };
|
|
75
|
+
const parsed = wireSchema.safeParse(wire);
|
|
76
|
+
if (!parsed.success) {
|
|
77
|
+
if (!Number.isSafeInteger(asyncLaunched) || asyncLaunched < 0)
|
|
78
|
+
throw new Error('supplemental_async_invalid_async_launched');
|
|
79
|
+
throw new Error('supplemental_async_invalid_document');
|
|
80
|
+
}
|
|
81
|
+
const bytes = stableStringify(parsed.data);
|
|
82
|
+
bound(bytes);
|
|
83
|
+
return snapshot(parsed.data, bytes);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=supplemental-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplemental-async.js","sourceRoot":"","sources":["../../src/report/supplemental-async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9562 UUID version 7: 48-bit Unix millisecond timestamp, then version
|
|
3
|
+
* and variant bits over random data. Time-ordered so run ids sort by
|
|
4
|
+
* creation on the server, random enough to be a safe idempotency key for
|
|
5
|
+
* retried deliveries. Node's `randomUUID()` is v4 and carries no time.
|
|
6
|
+
*/
|
|
7
|
+
export declare function uuidv7(now?: number): string;
|
|
8
|
+
/** The namespace `rcl telemetry backfill` derives run ids in (RCL-38). */
|
|
9
|
+
export declare const UUID_NAMESPACE_RCL_BACKFILL = "7d3b1c2e-8a4f-4b6d-9c1e-2f3a4b5c6d7e";
|
|
10
|
+
/**
|
|
11
|
+
* RFC 4122 version 5: SHA-1 of the namespace UUID's bytes followed by the
|
|
12
|
+
* name, with the version and variant bits set. Deterministic — the same name
|
|
13
|
+
* in the same namespace is the same id, which is what makes a backfill
|
|
14
|
+
* re-run a no-op on the server.
|
|
15
|
+
*/
|
|
16
|
+
export declare function uuidv5(name: string, namespace: string): string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* RFC 9562 UUID version 7: 48-bit Unix millisecond timestamp, then version
|
|
4
|
+
* and variant bits over random data. Time-ordered so run ids sort by
|
|
5
|
+
* creation on the server, random enough to be a safe idempotency key for
|
|
6
|
+
* retried deliveries. Node's `randomUUID()` is v4 and carries no time.
|
|
7
|
+
*/
|
|
8
|
+
export function uuidv7(now = Date.now()) {
|
|
9
|
+
const bytes = randomBytes(16);
|
|
10
|
+
// The timestamp field is an unsigned 48-bit integer: clamp a pre-epoch or
|
|
11
|
+
// fractional clock reading rather than letting BigInt two's-complement
|
|
12
|
+
// bits scramble the sort order (or throw on a non-integer).
|
|
13
|
+
const millis = Number.isFinite(now) ? Math.max(0, Math.floor(now)) : 0;
|
|
14
|
+
const ts = BigInt(millis) & 0xffffffffffffn;
|
|
15
|
+
for (let i = 5; i >= 0; i--) {
|
|
16
|
+
bytes[i] = Number((ts >> BigInt(8 * (5 - i))) & 0xffn);
|
|
17
|
+
}
|
|
18
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x70; // version 7
|
|
19
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80; // RFC variant
|
|
20
|
+
const hex = bytes.toString('hex');
|
|
21
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
22
|
+
}
|
|
23
|
+
/** The namespace `rcl telemetry backfill` derives run ids in (RCL-38). */
|
|
24
|
+
export const UUID_NAMESPACE_RCL_BACKFILL = '7d3b1c2e-8a4f-4b6d-9c1e-2f3a4b5c6d7e';
|
|
25
|
+
/**
|
|
26
|
+
* RFC 4122 version 5: SHA-1 of the namespace UUID's bytes followed by the
|
|
27
|
+
* name, with the version and variant bits set. Deterministic — the same name
|
|
28
|
+
* in the same namespace is the same id, which is what makes a backfill
|
|
29
|
+
* re-run a no-op on the server.
|
|
30
|
+
*/
|
|
31
|
+
export function uuidv5(name, namespace) {
|
|
32
|
+
const ns = Buffer.from(namespace.replace(/-/g, ''), 'hex');
|
|
33
|
+
if (ns.length !== 16)
|
|
34
|
+
throw new Error('uuidv5 namespace must be a UUID');
|
|
35
|
+
const hash = createHash('sha1').update(ns).update(Buffer.from(name, 'utf8')).digest();
|
|
36
|
+
hash[6] = (hash[6] & 0x0f) | 0x50;
|
|
37
|
+
hash[8] = (hash[8] & 0x3f) | 0x80;
|
|
38
|
+
const hex = hash.subarray(0, 16).toString('hex');
|
|
39
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=uuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/report/uuid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Diff } from './types.js';
|
|
2
|
+
export type GitDiffMode = 'staged' | 'working-tree';
|
|
3
|
+
export interface GitHeads {
|
|
4
|
+
/** `git rev-parse HEAD` — the commit a staged/working-tree review is relative to. */
|
|
5
|
+
headSha?: string;
|
|
6
|
+
/** Merge-base of HEAD with the remote default branch (`origin/HEAD`, then `origin/main`). */
|
|
7
|
+
baseSha?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Best-effort exact-head binding for local review modes (IO-12475 section
|
|
11
|
+
* 8.1). Never throws: outside a repository, on an unborn branch, or without
|
|
12
|
+
* a remote default branch the corresponding field is simply absent and the
|
|
13
|
+
* report records only the diff digest.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveGitHeads(cwd?: string): Promise<GitHeads>;
|
|
16
|
+
export declare function loadGitDiff(mode: GitDiffMode, cwd?: string): Promise<Diff>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { execFile } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { parseDiffFromString } from './local.js';
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
// Diffs larger than this are unreviewable by the council anyway; failing
|
|
6
|
+
// loudly beats silently truncating what the models see.
|
|
7
|
+
const MAX_DIFF_BYTES = 10 * 1024 * 1024;
|
|
8
|
+
const MODE_ARGS = {
|
|
9
|
+
// Staged changes only (what `git commit` would pick up right now).
|
|
10
|
+
staged: ['diff', '--cached'],
|
|
11
|
+
// Everything uncommitted relative to HEAD: staged + unstaged. Untracked
|
|
12
|
+
// files are invisible to `git diff` and therefore not reviewed.
|
|
13
|
+
'working-tree': ['diff', 'HEAD'],
|
|
14
|
+
};
|
|
15
|
+
async function runGit(args, cwd) {
|
|
16
|
+
try {
|
|
17
|
+
const { stdout } = await execFileAsync('git',
|
|
18
|
+
// quotepath off so non-ASCII filenames survive parseDiffText's header
|
|
19
|
+
// match; ext-diff off so a configured external diff tool can't replace
|
|
20
|
+
// the unified format the parser expects.
|
|
21
|
+
['-c', 'core.quotepath=false', ...args, '--no-color', '--no-ext-diff'], { cwd, maxBuffer: MAX_DIFF_BYTES });
|
|
22
|
+
return stdout;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const stderr = err.stderr?.trim();
|
|
26
|
+
throw new Error(`git ${args.join(' ')} failed${stderr ? `: ${stderr}` : `: ${String(err)}`}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** A full object id in either repository format: SHA-1 (40 hex) or SHA-256 (64 hex). */
|
|
30
|
+
const FULL_OBJECT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
31
|
+
async function revParse(cwd, ...args) {
|
|
32
|
+
try {
|
|
33
|
+
const { stdout } = await execFileAsync('git', args, { cwd });
|
|
34
|
+
const sha = stdout.trim();
|
|
35
|
+
return FULL_OBJECT_ID.test(sha) ? sha : undefined;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The remote default branch: `origin/HEAD` when the clone recorded it, else
|
|
43
|
+
* the conventional names in order. Shallow CI checkouts and `git remote add`
|
|
44
|
+
* clones have no `origin/HEAD`, so the fallbacks carry real weight.
|
|
45
|
+
*/
|
|
46
|
+
const DEFAULT_BRANCH_FALLBACKS = ['origin/main', 'origin/master'];
|
|
47
|
+
/**
|
|
48
|
+
* Best-effort exact-head binding for local review modes (IO-12475 section
|
|
49
|
+
* 8.1). Never throws: outside a repository, on an unborn branch, or without
|
|
50
|
+
* a remote default branch the corresponding field is simply absent and the
|
|
51
|
+
* report records only the diff digest.
|
|
52
|
+
*/
|
|
53
|
+
export async function resolveGitHeads(cwd = process.cwd()) {
|
|
54
|
+
const headSha = await revParse(cwd, 'rev-parse', 'HEAD');
|
|
55
|
+
if (headSha === undefined)
|
|
56
|
+
return {};
|
|
57
|
+
let baseSha;
|
|
58
|
+
for (const ref of ['origin/HEAD', ...DEFAULT_BRANCH_FALLBACKS]) {
|
|
59
|
+
baseSha = await revParse(cwd, 'merge-base', 'HEAD', ref);
|
|
60
|
+
if (baseSha !== undefined)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
return { headSha, ...(baseSha !== undefined ? { baseSha } : {}) };
|
|
64
|
+
}
|
|
65
|
+
export async function loadGitDiff(mode, cwd = process.cwd()) {
|
|
66
|
+
// Fail with a clear message when we're not in a git repository (or git is
|
|
67
|
+
// missing) before attempting the actual diff.
|
|
68
|
+
try {
|
|
69
|
+
await execFileAsync('git', ['rev-parse', '--git-dir'], { cwd });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new Error(`--${mode} requires running inside a git repository`);
|
|
73
|
+
}
|
|
74
|
+
const diffText = await runGit(MODE_ARGS[mode], cwd);
|
|
75
|
+
return { ...parseDiffFromString(diffText), source: 'local' };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/resolver/git.ts"],"names":[],"mappings":"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"}
|