@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,82 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
import type { GitHubTarget } from './github.js';
|
|
3
|
+
export declare function createGitHubClient(token?: string): Promise<Octokit>;
|
|
4
|
+
export declare function getGitHubPullRequest(client: Octokit, target: GitHubTarget): Promise<import("@octokit/types").OctokitResponse<{
|
|
5
|
+
url: string;
|
|
6
|
+
id: number;
|
|
7
|
+
node_id: string;
|
|
8
|
+
html_url: string;
|
|
9
|
+
diff_url: string;
|
|
10
|
+
patch_url: string;
|
|
11
|
+
issue_url: string;
|
|
12
|
+
commits_url: string;
|
|
13
|
+
review_comments_url: string;
|
|
14
|
+
review_comment_url: string;
|
|
15
|
+
comments_url: string;
|
|
16
|
+
statuses_url: string;
|
|
17
|
+
number: number;
|
|
18
|
+
state: "open" | "closed";
|
|
19
|
+
locked: boolean;
|
|
20
|
+
title: string;
|
|
21
|
+
user: import("@octokit/openapi-types").components["schemas"]["simple-user"];
|
|
22
|
+
body: string | null;
|
|
23
|
+
labels: {
|
|
24
|
+
id: number;
|
|
25
|
+
node_id: string;
|
|
26
|
+
url: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string | null;
|
|
29
|
+
color: string;
|
|
30
|
+
default: boolean;
|
|
31
|
+
}[];
|
|
32
|
+
milestone: import("@octokit/openapi-types").components["schemas"]["nullable-milestone"];
|
|
33
|
+
active_lock_reason?: string | null;
|
|
34
|
+
created_at: string;
|
|
35
|
+
updated_at: string;
|
|
36
|
+
closed_at: string | null;
|
|
37
|
+
merged_at: string | null;
|
|
38
|
+
merge_commit_sha: string | null;
|
|
39
|
+
assignee: import("@octokit/openapi-types").components["schemas"]["nullable-simple-user"];
|
|
40
|
+
assignees?: import("@octokit/openapi-types").components["schemas"]["simple-user"][] | null;
|
|
41
|
+
requested_reviewers?: import("@octokit/openapi-types").components["schemas"]["simple-user"][] | null;
|
|
42
|
+
requested_teams?: import("@octokit/openapi-types").components["schemas"]["team-simple"][] | null;
|
|
43
|
+
head: {
|
|
44
|
+
label: string;
|
|
45
|
+
ref: string;
|
|
46
|
+
repo: import("@octokit/openapi-types").components["schemas"]["repository"];
|
|
47
|
+
sha: string;
|
|
48
|
+
user: import("@octokit/openapi-types").components["schemas"]["simple-user"];
|
|
49
|
+
};
|
|
50
|
+
base: {
|
|
51
|
+
label: string;
|
|
52
|
+
ref: string;
|
|
53
|
+
repo: import("@octokit/openapi-types").components["schemas"]["repository"];
|
|
54
|
+
sha: string;
|
|
55
|
+
user: import("@octokit/openapi-types").components["schemas"]["simple-user"];
|
|
56
|
+
};
|
|
57
|
+
_links: {
|
|
58
|
+
comments: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
59
|
+
commits: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
60
|
+
statuses: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
61
|
+
html: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
62
|
+
issue: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
63
|
+
review_comments: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
64
|
+
review_comment: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
65
|
+
self: import("@octokit/openapi-types").components["schemas"]["link"];
|
|
66
|
+
};
|
|
67
|
+
author_association: import("@octokit/openapi-types").components["schemas"]["author-association"];
|
|
68
|
+
auto_merge: import("@octokit/openapi-types").components["schemas"]["auto-merge"];
|
|
69
|
+
draft?: boolean;
|
|
70
|
+
merged: boolean;
|
|
71
|
+
mergeable: boolean | null;
|
|
72
|
+
rebaseable?: boolean | null;
|
|
73
|
+
mergeable_state: string;
|
|
74
|
+
merged_by: import("@octokit/openapi-types").components["schemas"]["nullable-simple-user"];
|
|
75
|
+
comments: number;
|
|
76
|
+
review_comments: number;
|
|
77
|
+
maintainer_can_modify: boolean;
|
|
78
|
+
commits: number;
|
|
79
|
+
additions: number;
|
|
80
|
+
deletions: number;
|
|
81
|
+
changed_files: number;
|
|
82
|
+
}, 200>>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { Octokit } from '@octokit/rest';
|
|
3
|
+
export async function createGitHubClient(token) {
|
|
4
|
+
const configuredToken = token?.trim() || process.env['GITHUB_TOKEN']?.trim();
|
|
5
|
+
const auth = configuredToken || await new Promise((resolve) => {
|
|
6
|
+
execFile('gh', ['auth', 'token', '--hostname', 'github.com'], { encoding: 'utf8', timeout: 5000, maxBuffer: 16384 }, (error, stdout) => resolve(error ? undefined : stdout.trim() || undefined));
|
|
7
|
+
});
|
|
8
|
+
return new Octokit({ auth });
|
|
9
|
+
}
|
|
10
|
+
export async function getGitHubPullRequest(client, target) {
|
|
11
|
+
try {
|
|
12
|
+
return await client.pulls.get({
|
|
13
|
+
owner: target.owner,
|
|
14
|
+
repo: target.repo,
|
|
15
|
+
pull_number: target.number,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (typeof error === 'object' && error !== null && 'status' in error && error.status === 404) {
|
|
20
|
+
throw new Error('PR fetch returned 404 — the pull request may not exist or access may be missing. ' +
|
|
21
|
+
'For private repos, verify access with gh auth status --hostname github.com, ' +
|
|
22
|
+
'or set GITHUB_TOKEN or githubToken in config.');
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=github-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-client.js","sourceRoot":"","sources":["../../src/resolver/github-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAc;IACrD,MAAM,eAAe,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,eAAe,IAAI,MAAM,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;QAChF,QAAQ,CACN,IAAI,EACJ,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,EAC7C,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EACrD,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,CAC3E,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAe,EAAE,MAAoB;IAC9E,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CACb,mFAAmF;gBACnF,8EAA8E;gBAC9E,+CAA+C,CAChD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Octokit } from '@octokit/rest';
|
|
2
|
+
import type { Diff } from './types.js';
|
|
3
|
+
export interface GitHubTarget {
|
|
4
|
+
owner: string;
|
|
5
|
+
repo: string;
|
|
6
|
+
number: number;
|
|
7
|
+
}
|
|
8
|
+
/** A GitHub repository by owner and name. */
|
|
9
|
+
export interface RepoRef {
|
|
10
|
+
owner: string;
|
|
11
|
+
repo: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const GITHUB_OWNER_PATTERN = "[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9]))*";
|
|
14
|
+
export declare const GITHUB_REPO_PATTERN = "[A-Za-z0-9_.-]+";
|
|
15
|
+
/** The pair as a repository, or `null` when GitHub would not accept either segment. */
|
|
16
|
+
export declare function legalRepo(owner: string, repo: string): RepoRef | null;
|
|
17
|
+
/** An `owner/repo` argument as a repository, or `null` when it is not one GitHub would accept. */
|
|
18
|
+
export declare function parseRepoName(text: string): RepoRef | null;
|
|
19
|
+
/**
|
|
20
|
+
* Whether a positional target names a GitHub PR (`owner/repo#N` or a PR
|
|
21
|
+
* URL). Everything else a caller passes is a local patch file — by shape,
|
|
22
|
+
* not by extension, so `fix.DIFF`, `patches/fix` and `changes.txt` all route
|
|
23
|
+
* to the patch loader instead of failing as an "invalid GitHub target".
|
|
24
|
+
*/
|
|
25
|
+
export declare function isGitHubTarget(target: string): boolean;
|
|
26
|
+
export declare function parseGitHubTarget(target: string): GitHubTarget;
|
|
27
|
+
export declare function fetchPRDiff(target: GitHubTarget, token?: string, octokitClient?: Octokit, options?: {
|
|
28
|
+
requireMergeBase?: boolean;
|
|
29
|
+
}): Promise<Diff>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { detectLanguage } from '../prepare/language.js';
|
|
2
|
+
import { createGitHubClient, getGitHubPullRequest } from './github-client.js';
|
|
3
|
+
// GitHub's segment rules: an owner is alphanumerics and single hyphens (no
|
|
4
|
+
// leading or trailing hyphen); a repository is alphanumerics, `-`, `_` and
|
|
5
|
+
// `.`, never `.` or `..` — so neither can carry a control character, a path
|
|
6
|
+
// separator or a dot-segment into a request path.
|
|
7
|
+
export const GITHUB_OWNER_PATTERN = '[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9]))*';
|
|
8
|
+
export const GITHUB_REPO_PATTERN = '[A-Za-z0-9_.-]+';
|
|
9
|
+
const OWNER_RE = new RegExp(`^${GITHUB_OWNER_PATTERN}$`);
|
|
10
|
+
const REPO_RE = new RegExp(`^${GITHUB_REPO_PATTERN}$`);
|
|
11
|
+
/** The pair as a repository, or `null` when GitHub would not accept either segment. */
|
|
12
|
+
export function legalRepo(owner, repo) {
|
|
13
|
+
if (!OWNER_RE.test(owner) || !REPO_RE.test(repo) || repo === '.' || repo === '..')
|
|
14
|
+
return null;
|
|
15
|
+
return { owner, repo };
|
|
16
|
+
}
|
|
17
|
+
/** An `owner/repo` argument as a repository, or `null` when it is not one GitHub would accept. */
|
|
18
|
+
export function parseRepoName(text) {
|
|
19
|
+
const parts = text.trim().split('/');
|
|
20
|
+
if (parts.length !== 2)
|
|
21
|
+
return null;
|
|
22
|
+
return legalRepo(parts[0], parts[1]);
|
|
23
|
+
}
|
|
24
|
+
// Anchored: the whole target must be a PR URL (any scheme, optional www,
|
|
25
|
+
// optional sub-page such as /files, optional query or fragment) or the short
|
|
26
|
+
// owner/repo#N form with single-segment owner and repo. A local path that
|
|
27
|
+
// merely contains "github.com/…/pull/N" or ends in "#2" is not a PR.
|
|
28
|
+
const PR_URL = /^(?:https?:\/\/)?(?:www\.)?github\.com(?::\d+)?\/([^/\s#?]+)\/([^/\s#?]+)\/pull\/(\d+)(?:\/[^\s?#]*)?(?:[?#].*)?$/i;
|
|
29
|
+
const PR_SHORT = /^([^/#\s]+)\/([^/#\s]+)#(\d+)$/;
|
|
30
|
+
/**
|
|
31
|
+
* Whether a positional target names a GitHub PR (`owner/repo#N` or a PR
|
|
32
|
+
* URL). Everything else a caller passes is a local patch file — by shape,
|
|
33
|
+
* not by extension, so `fix.DIFF`, `patches/fix` and `changes.txt` all route
|
|
34
|
+
* to the patch loader instead of failing as an "invalid GitHub target".
|
|
35
|
+
*/
|
|
36
|
+
export function isGitHubTarget(target) {
|
|
37
|
+
return PR_URL.test(target) || PR_SHORT.test(target);
|
|
38
|
+
}
|
|
39
|
+
export function parseGitHubTarget(target) {
|
|
40
|
+
// Supports: owner/repo#123 or https://github.com/owner/repo/pull/123
|
|
41
|
+
const prUrlMatch = target.match(PR_URL);
|
|
42
|
+
if (prUrlMatch) {
|
|
43
|
+
return {
|
|
44
|
+
owner: prUrlMatch[1],
|
|
45
|
+
repo: prUrlMatch[2],
|
|
46
|
+
number: parseInt(prUrlMatch[3], 10),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const shortMatch = target.match(PR_SHORT);
|
|
50
|
+
if (shortMatch) {
|
|
51
|
+
return {
|
|
52
|
+
owner: shortMatch[1],
|
|
53
|
+
repo: shortMatch[2],
|
|
54
|
+
number: parseInt(shortMatch[3], 10),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`Invalid GitHub target: "${target}". Use owner/repo#123 or a GitHub PR URL.`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* GitHub's compare endpoint returns the changed files only in its first
|
|
61
|
+
* response and caps them at 300 (paging applies to commits, not files).
|
|
62
|
+
*/
|
|
63
|
+
const COMPARE_FILE_CAP = 300;
|
|
64
|
+
/**
|
|
65
|
+
* The PR's changed files, bound to the SHAs the PR response named.
|
|
66
|
+
*
|
|
67
|
+
* Preferred path: `GET /compare/{base}...{head}` — the same merge-base
|
|
68
|
+
* comparison a PR shows, addressed by immutable object ids, so nothing that
|
|
69
|
+
* happens to the PR after `pulls.get` can change what comes back. GitHub
|
|
70
|
+
* includes at most 300 files in that response, so it is authoritative only
|
|
71
|
+
* below the cap.
|
|
72
|
+
*
|
|
73
|
+
* Large PRs fall back to the PR-number-addressed listing (paged to 3,000
|
|
74
|
+
* files), bracketed by PR reads: if the head or base moved while the pages
|
|
75
|
+
* were fetched, the report is not bound. A move-and-move-back inside that
|
|
76
|
+
* window is not detectable here; every PR up to the compare cap takes the
|
|
77
|
+
* pinned path and has no such window.
|
|
78
|
+
*/
|
|
79
|
+
async function fetchChangedFiles(octokit, target, pr, requireMergeBase) {
|
|
80
|
+
let mergeBaseSha;
|
|
81
|
+
if (requireMergeBase && (![pr.base.sha, pr.head.sha].every(sha => /^[a-f0-9]{40}$/.test(sha)))) {
|
|
82
|
+
throw new Error("A retained PR needs exact commits to resolve its effective merge base.");
|
|
83
|
+
}
|
|
84
|
+
if (requireMergeBase || pr.changed_files <= COMPARE_FILE_CAP) {
|
|
85
|
+
let files;
|
|
86
|
+
try {
|
|
87
|
+
const { data } = await octokit.repos.compareCommitsWithBasehead({
|
|
88
|
+
owner: target.owner,
|
|
89
|
+
repo: target.repo,
|
|
90
|
+
basehead: `${pr.base.sha}...${pr.head.sha}`,
|
|
91
|
+
});
|
|
92
|
+
files = data.files ?? [];
|
|
93
|
+
mergeBaseSha = data.merge_base_commit?.sha;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// A compare the API refuses (e.g. an object id it cannot resolve for
|
|
97
|
+
// this repository) must not fail the review: the bracketed listing
|
|
98
|
+
// below still binds the files, just less tightly.
|
|
99
|
+
files = undefined;
|
|
100
|
+
}
|
|
101
|
+
// Complete only when it accounts for every file the PR reports; anything
|
|
102
|
+
// else (the 300 cap, or an API nuance) falls through to the listing.
|
|
103
|
+
if (requireMergeBase && (typeof mergeBaseSha !== "string" || !/^[a-f0-9]{40}$/.test(mergeBaseSha))) {
|
|
104
|
+
throw new Error("The exact PR comparison did not provide a valid effective merge base.");
|
|
105
|
+
}
|
|
106
|
+
if (files !== undefined && files.length === pr.changed_files)
|
|
107
|
+
return { files, ...(requireMergeBase ? { mergeBaseSha } : {}) };
|
|
108
|
+
}
|
|
109
|
+
const listed = await octokit.paginate(octokit.pulls.listFiles, {
|
|
110
|
+
owner: target.owner,
|
|
111
|
+
repo: target.repo,
|
|
112
|
+
pull_number: target.number,
|
|
113
|
+
per_page: 100,
|
|
114
|
+
});
|
|
115
|
+
const recheck = (await getGitHubPullRequest(octokit, target)).data;
|
|
116
|
+
if (recheck.head.sha !== pr.head.sha || recheck.base.sha !== pr.base.sha) {
|
|
117
|
+
throw new Error(`PR #${target.number} moved (${pr.base.sha}...${pr.head.sha} → ${recheck.base.sha}...${recheck.head.sha}) while its ${listed.length} files were being listed — rerun the review.`);
|
|
118
|
+
}
|
|
119
|
+
// GitHub lists at most 3,000 files; a shorter list than the PR reports is
|
|
120
|
+
// an incomplete diff, and an incomplete diff must never read as reviewed.
|
|
121
|
+
if (listed.length !== recheck.changed_files) {
|
|
122
|
+
throw new Error(`PR #${target.number} reports ${recheck.changed_files} changed files but the API listed ${listed.length} — the diff is incomplete (GitHub lists at most 3,000 files), refusing to review it as if it were whole.`);
|
|
123
|
+
}
|
|
124
|
+
return { files: listed, ...(requireMergeBase ? { mergeBaseSha } : {}) };
|
|
125
|
+
}
|
|
126
|
+
export async function fetchPRDiff(target, token, octokitClient, options = {}) {
|
|
127
|
+
const octokit = octokitClient ?? await createGitHubClient(token);
|
|
128
|
+
const pr = (await getGitHubPullRequest(octokit, target)).data;
|
|
129
|
+
// Exact-head binding: the files come from a compare pinned to the base and
|
|
130
|
+
// head object ids this very response named (see fetchChangedFiles for the
|
|
131
|
+
// large-PR fallback and its bracket), so the patches belong to `head_sha`.
|
|
132
|
+
const { files, mergeBaseSha } = await fetchChangedFiles(octokit, target, pr, options.requireMergeBase === true);
|
|
133
|
+
const metadata = {
|
|
134
|
+
owner: target.owner,
|
|
135
|
+
repo: target.repo,
|
|
136
|
+
number: target.number,
|
|
137
|
+
title: pr.title,
|
|
138
|
+
body: pr.body ?? '',
|
|
139
|
+
author: pr.user?.login ?? 'unknown',
|
|
140
|
+
base: pr.base.ref,
|
|
141
|
+
head: pr.head.ref,
|
|
142
|
+
headSha: pr.head.sha,
|
|
143
|
+
baseSha: pr.base.sha,
|
|
144
|
+
...(mergeBaseSha ? { mergeBaseSha } : {}),
|
|
145
|
+
...(pr.merge_commit_sha ? { mergeCommitSha: pr.merge_commit_sha } : {}),
|
|
146
|
+
url: pr.html_url,
|
|
147
|
+
labels: pr.labels.map((l) => l.name),
|
|
148
|
+
draft: pr.draft ?? false,
|
|
149
|
+
};
|
|
150
|
+
const fileChanges = files.map((f) => ({
|
|
151
|
+
filename: f.filename,
|
|
152
|
+
status: f.status,
|
|
153
|
+
additions: f.additions,
|
|
154
|
+
deletions: f.deletions,
|
|
155
|
+
patch: f.patch ?? '',
|
|
156
|
+
language: detectLanguage(f.filename),
|
|
157
|
+
previousFilename: f.previous_filename,
|
|
158
|
+
...(f.sha ? { blobSha: f.sha } : {}),
|
|
159
|
+
}));
|
|
160
|
+
return {
|
|
161
|
+
files: fileChanges,
|
|
162
|
+
metadata,
|
|
163
|
+
source: 'github',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/resolver/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { detectLanguage } from '../prepare/language.js';
|
|
3
|
+
function parseDiffText(diffText) {
|
|
4
|
+
const hunks = [];
|
|
5
|
+
const fileBlocks = diffText.split(/^diff --git /m).filter(Boolean);
|
|
6
|
+
for (const block of fileBlocks) {
|
|
7
|
+
const lines = block.split('\n');
|
|
8
|
+
const headerLine = lines[0] ?? '';
|
|
9
|
+
// Extract filenames from "a/path b/path"
|
|
10
|
+
const headerMatch = headerLine.match(/^a\/(.+) b\/(.+)$/);
|
|
11
|
+
if (!headerMatch)
|
|
12
|
+
continue;
|
|
13
|
+
const aPath = headerMatch[1];
|
|
14
|
+
const bPath = headerMatch[2];
|
|
15
|
+
let status = 'modified';
|
|
16
|
+
let previousFilename;
|
|
17
|
+
const deletedMatch = block.match(/^deleted file mode/m);
|
|
18
|
+
const newFileMatch = block.match(/^new file mode/m);
|
|
19
|
+
const renameFromMatch = block.match(/^rename from (.+)$/m);
|
|
20
|
+
const renameToMatch = block.match(/^rename to (.+)$/m);
|
|
21
|
+
if (deletedMatch) {
|
|
22
|
+
status = 'deleted';
|
|
23
|
+
}
|
|
24
|
+
else if (newFileMatch) {
|
|
25
|
+
status = 'added';
|
|
26
|
+
}
|
|
27
|
+
else if (renameFromMatch && renameToMatch) {
|
|
28
|
+
status = 'renamed';
|
|
29
|
+
previousFilename = renameFromMatch[1].trim();
|
|
30
|
+
}
|
|
31
|
+
const filename = status === 'deleted' ? aPath : bPath;
|
|
32
|
+
// Extract the actual patch lines (@@...)
|
|
33
|
+
const patchStart = block.indexOf('\n@@');
|
|
34
|
+
const patch = patchStart >= 0 ? block.slice(patchStart + 1) : '';
|
|
35
|
+
let additions = 0;
|
|
36
|
+
let deletions = 0;
|
|
37
|
+
for (const line of patch.split('\n')) {
|
|
38
|
+
if (line.startsWith('+') && !line.startsWith('+++'))
|
|
39
|
+
additions++;
|
|
40
|
+
if (line.startsWith('-') && !line.startsWith('---'))
|
|
41
|
+
deletions++;
|
|
42
|
+
}
|
|
43
|
+
hunks.push({
|
|
44
|
+
filename,
|
|
45
|
+
status,
|
|
46
|
+
previousFilename,
|
|
47
|
+
patch,
|
|
48
|
+
additions,
|
|
49
|
+
deletions,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return hunks;
|
|
53
|
+
}
|
|
54
|
+
export async function loadLocalDiff(filePath) {
|
|
55
|
+
const content = await readFile(filePath, 'utf-8');
|
|
56
|
+
return parseDiffFromString(content);
|
|
57
|
+
}
|
|
58
|
+
export function parseDiffFromString(diffText) {
|
|
59
|
+
const hunks = parseDiffText(diffText);
|
|
60
|
+
const files = hunks.map((h) => ({
|
|
61
|
+
filename: h.filename,
|
|
62
|
+
status: h.status,
|
|
63
|
+
additions: h.additions,
|
|
64
|
+
deletions: h.deletions,
|
|
65
|
+
patch: h.patch,
|
|
66
|
+
language: detectLanguage(h.filename),
|
|
67
|
+
previousFilename: h.previousFilename,
|
|
68
|
+
}));
|
|
69
|
+
return {
|
|
70
|
+
files,
|
|
71
|
+
source: 'local',
|
|
72
|
+
rawDiff: diffText,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/resolver/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Diff } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load a plan document as a synthetic single-file diff (the whole document
|
|
4
|
+
* as added lines) so the entire review pipeline — chunking, prompts,
|
|
5
|
+
* dedup, consensus, output — works unchanged. Finding line numbers map
|
|
6
|
+
* 1:1 onto plan document lines because the synthetic hunk starts at +1.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadPlanAsDiff(path: string): Promise<Diff>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Plans beyond this size are not reviewable in one council pass anyway;
|
|
4
|
+
* failing loudly beats silently truncating what the models see. (The
|
|
5
|
+
* chunker additionally splits large plans at its own line limits.)
|
|
6
|
+
*/
|
|
7
|
+
const MAX_PLAN_BYTES = 400_000;
|
|
8
|
+
/**
|
|
9
|
+
* Load a plan document as a synthetic single-file diff (the whole document
|
|
10
|
+
* as added lines) so the entire review pipeline — chunking, prompts,
|
|
11
|
+
* dedup, consensus, output — works unchanged. Finding line numbers map
|
|
12
|
+
* 1:1 onto plan document lines because the synthetic hunk starts at +1.
|
|
13
|
+
*/
|
|
14
|
+
export async function loadPlanAsDiff(path) {
|
|
15
|
+
let content;
|
|
16
|
+
try {
|
|
17
|
+
content = await readFile(path, 'utf-8');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error(`Could not read plan file: ${path}`);
|
|
21
|
+
}
|
|
22
|
+
if (Buffer.byteLength(content, 'utf-8') > MAX_PLAN_BYTES) {
|
|
23
|
+
throw new Error(`Plan file exceeds ${MAX_PLAN_BYTES / 1000}KB: ${path}. Split it or review a section.`);
|
|
24
|
+
}
|
|
25
|
+
if (!content.trim()) {
|
|
26
|
+
throw new Error(`Plan file is empty: ${path}`);
|
|
27
|
+
}
|
|
28
|
+
const lines = content.replace(/\n$/, '').split('\n');
|
|
29
|
+
const patch = `@@ -0,0 +1,${lines.length} @@\n` + lines.map((l) => `+${l}`).join('\n');
|
|
30
|
+
return {
|
|
31
|
+
files: [
|
|
32
|
+
{
|
|
33
|
+
filename: path,
|
|
34
|
+
status: 'added',
|
|
35
|
+
additions: lines.length,
|
|
36
|
+
deletions: 0,
|
|
37
|
+
patch,
|
|
38
|
+
language: 'plan',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
source: 'local',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/resolver/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC;;;;GAIG;AACH,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,cAAc,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,qBAAqB,cAAc,GAAG,IAAI,OAAO,IAAI,iCAAiC,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,cAAc,KAAK,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvF,OAAO;QACL,KAAK,EAAE;YACL;gBACE,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,SAAS,EAAE,CAAC;gBACZ,KAAK;gBACL,QAAQ,EAAE,MAAM;aACjB;SACF;QACD,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Diff } from './types.js';
|
|
2
|
+
import type { GitHeads } from './git.js';
|
|
3
|
+
import { type RunHeaderInput } from '../report/run-header.js';
|
|
4
|
+
/**
|
|
5
|
+
* Exact-head binding (IO-12475 section 8.1): which commit a diff belongs
|
|
6
|
+
* to. PR mode takes the SHAs GitHub returned with the PR; git modes use the
|
|
7
|
+
* HEAD the caller resolved around the diff read (see `runReview`); a patch
|
|
8
|
+
* file carries only its digest unless the caller vouches for its head with
|
|
9
|
+
* --head-sha — the file could have come from anywhere, so rcl never guesses
|
|
10
|
+
* from the working directory.
|
|
11
|
+
*/
|
|
12
|
+
export type ReviewTarget = RunHeaderInput['target'];
|
|
13
|
+
export type GitDiffMode = 'staged' | 'working-tree';
|
|
14
|
+
export interface TargetOverrides {
|
|
15
|
+
headSha?: string;
|
|
16
|
+
baseSha?: string;
|
|
17
|
+
/**
|
|
18
|
+
* The pull request a patch-file review is evidence for (`owner/repo#N` or a
|
|
19
|
+
* pull request URL), so Harness can verify its head and count the run for
|
|
20
|
+
* that pull request's gate (RCL-39). A converge target of the same form
|
|
21
|
+
* attributes the run the same way.
|
|
22
|
+
*/
|
|
23
|
+
forPr?: string;
|
|
24
|
+
convergeTarget?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function resolveReviewTarget(diff: Diff, gitMode: GitDiffMode | undefined, opts: TargetOverrides, deps?: {
|
|
27
|
+
gitHeads?: GitHeads;
|
|
28
|
+
resolveGitHeads?: () => Promise<GitHeads>;
|
|
29
|
+
}): Promise<ReviewTarget>;
|
|
30
|
+
/**
|
|
31
|
+
* `--expect-head-sha`: refuse to review a target whose head is not the one
|
|
32
|
+
* the caller expects. The message names the way out for each target kind —
|
|
33
|
+
* a patch file can be vouched for with --head-sha, a git mode cannot.
|
|
34
|
+
*/
|
|
35
|
+
export declare function assertExpectedHead(target: ReviewTarget, expected: string): void;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { resolveGitHeads } from './git.js';
|
|
2
|
+
import { validateSha } from '../report/run-header.js';
|
|
3
|
+
import { isGitHubTarget, parseGitHubTarget } from './github.js';
|
|
4
|
+
import { parseRepoName } from './github.js';
|
|
5
|
+
export async function resolveReviewTarget(diff, gitMode, opts, deps = {}) {
|
|
6
|
+
const overrideGiven = opts.headSha !== undefined || opts.baseSha !== undefined;
|
|
7
|
+
// `--for-pr` names the pull request a patch file stands for; a PR target
|
|
8
|
+
// names its own, and a git mode reviews a checkout, not a pull request.
|
|
9
|
+
if (opts.forPr !== undefined && (diff.metadata || gitMode)) {
|
|
10
|
+
throw new Error('--for-pr applies to patch files only; a PR target names its pull request itself and a git mode reviews the checkout.');
|
|
11
|
+
}
|
|
12
|
+
if (diff.metadata) {
|
|
13
|
+
if (overrideGiven) {
|
|
14
|
+
throw new Error('--head-sha and --base-sha apply to patch files only; a PR target resolves its heads from GitHub.');
|
|
15
|
+
}
|
|
16
|
+
const m = diff.metadata;
|
|
17
|
+
return {
|
|
18
|
+
kind: 'pr',
|
|
19
|
+
repo: `${m.owner}/${m.repo}`,
|
|
20
|
+
prNumber: m.number,
|
|
21
|
+
url: m.url,
|
|
22
|
+
headSha: m.headSha,
|
|
23
|
+
baseSha: m.baseSha,
|
|
24
|
+
headRef: m.head,
|
|
25
|
+
baseRef: m.base,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (gitMode) {
|
|
29
|
+
if (overrideGiven) {
|
|
30
|
+
throw new Error(`--head-sha and --base-sha apply to patch files only; --${gitMode} resolves HEAD itself.`);
|
|
31
|
+
}
|
|
32
|
+
const heads = deps.gitHeads ?? (await (deps.resolveGitHeads ?? resolveGitHeads)());
|
|
33
|
+
return { kind: gitMode === 'staged' ? 'staged' : 'working_tree', ...heads };
|
|
34
|
+
}
|
|
35
|
+
const attributed = pullRequestFor(opts);
|
|
36
|
+
// Evidence for a pull request binds to a commit: an attributed patch without
|
|
37
|
+
// its head could be any bytes presented against that pull request's gate.
|
|
38
|
+
// The explicit flag is refused without one; a converge target only
|
|
39
|
+
// attributes when the head is there, since it is a bookkeeping key first.
|
|
40
|
+
if (attributed && opts.headSha === undefined && attributed.source === '--for-pr') {
|
|
41
|
+
throw new Error('A patch review bound to a pull request by --for-pr needs --head-sha: evidence binds to the commit it reviewed.');
|
|
42
|
+
}
|
|
43
|
+
const pr = attributed && opts.headSha !== undefined ? attributed : undefined;
|
|
44
|
+
return {
|
|
45
|
+
kind: 'patch',
|
|
46
|
+
...(pr ? { repo: `${pr.owner}/${pr.repo}`, prNumber: pr.number, url: `https://github.com/${pr.owner}/${pr.repo}/pull/${pr.number}` } : {}),
|
|
47
|
+
...(opts.headSha !== undefined ? { headSha: validateSha(opts.headSha, '--head-sha') } : {}),
|
|
48
|
+
...(opts.baseSha !== undefined ? { baseSha: validateSha(opts.baseSha, '--base-sha') } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The pull request a patch review stands for: `--for-pr` when given (an
|
|
53
|
+
* invalid value is an error), else a converge target that parses cleanly as
|
|
54
|
+
* `owner/repo#N` (anything else — a slug such as `rcl-7`, a malformed
|
|
55
|
+
* reference — is a bookkeeping key and attributes nothing).
|
|
56
|
+
*/
|
|
57
|
+
function pullRequestFor(opts) {
|
|
58
|
+
if (opts.forPr !== undefined) {
|
|
59
|
+
const text = opts.forPr.trim();
|
|
60
|
+
if (!isGitHubTarget(text))
|
|
61
|
+
throw new Error(`--for-pr must name a pull request as owner/repo#N or a pull request URL, got "${text}".`);
|
|
62
|
+
const pr = checked(parseGitHubTarget(text));
|
|
63
|
+
if (!pr)
|
|
64
|
+
throw new Error('--for-pr does not name a GitHub pull request.');
|
|
65
|
+
return { ...pr, source: '--for-pr' };
|
|
66
|
+
}
|
|
67
|
+
if (opts.convergeTarget !== undefined && isGitHubTarget(opts.convergeTarget.trim())) {
|
|
68
|
+
const pr = checked(parseGitHubTarget(opts.convergeTarget.trim()));
|
|
69
|
+
return pr ? { ...pr, source: '--converge-target' } : undefined;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/** GitHub's segment rules for both names and a positive number, lower-cased (one spelling, one key on the server); `null` otherwise. */
|
|
74
|
+
function checked(pr) {
|
|
75
|
+
if (parseRepoName(`${pr.owner}/${pr.repo}`) === null || !Number.isSafeInteger(pr.number) || pr.number <= 0)
|
|
76
|
+
return null;
|
|
77
|
+
return { owner: pr.owner.toLowerCase(), repo: pr.repo.toLowerCase(), number: pr.number };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* `--expect-head-sha`: refuse to review a target whose head is not the one
|
|
81
|
+
* the caller expects. The message names the way out for each target kind —
|
|
82
|
+
* a patch file can be vouched for with --head-sha, a git mode cannot.
|
|
83
|
+
*/
|
|
84
|
+
export function assertExpectedHead(target, expected) {
|
|
85
|
+
const sha = validateSha(expected, '--expect-head-sha');
|
|
86
|
+
if (target.headSha === undefined) {
|
|
87
|
+
// A PR target always carries its head (PRMetadata requires it); only a
|
|
88
|
+
// patch file or a git mode outside a repository can lack one.
|
|
89
|
+
const hint = target.kind === 'patch'
|
|
90
|
+
? 'pass --head-sha with the patch file'
|
|
91
|
+
: 'HEAD could not be resolved (not a git repository, or an unborn branch)';
|
|
92
|
+
throw new Error(`--expect-head-sha was given but this ${describeKind(target.kind)} has no head SHA: ${hint}.`);
|
|
93
|
+
}
|
|
94
|
+
if (target.headSha !== sha) {
|
|
95
|
+
throw new Error(`Resolved head ${target.headSha} does not match --expect-head-sha ${sha}; the target has moved — refusing to review.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function describeKind(kind) {
|
|
99
|
+
switch (kind) {
|
|
100
|
+
case 'pr':
|
|
101
|
+
return 'PR';
|
|
102
|
+
case 'patch':
|
|
103
|
+
return 'patch file';
|
|
104
|
+
case 'working_tree':
|
|
105
|
+
return 'working-tree diff';
|
|
106
|
+
case 'staged':
|
|
107
|
+
return 'staged diff';
|
|
108
|
+
case 'plan':
|
|
109
|
+
return 'plan';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/resolver/target.ts"],"names":[],"mappings":"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"}
|