@allocator-one/rcl 4.4.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1415 -0
- package/dist/ci.d.ts +16 -0
- package/dist/ci.js +42 -0
- package/dist/ci.js.map +1 -0
- package/dist/config/data-dir.d.ts +6 -0
- package/dist/config/data-dir.js +12 -0
- package/dist/config/data-dir.js.map +1 -0
- package/dist/config/defaults.d.ts +82 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/harness.d.ts +40 -0
- package/dist/config/harness.js +151 -0
- package/dist/config/harness.js.map +1 -0
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.js +131 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/provider-concurrency.d.ts +4 -0
- package/dist/config/provider-concurrency.js +6 -0
- package/dist/config/provider-concurrency.js.map +1 -0
- package/dist/config/providers.d.ts +3 -0
- package/dist/config/providers.js +9 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/schema.d.ts +179 -0
- package/dist/config/schema.js +115 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/consensus/claim-contract.d.ts +9 -0
- package/dist/consensus/claim-contract.js +307 -0
- package/dist/consensus/claim-contract.js.map +1 -0
- package/dist/consensus/claim-identity.d.ts +5 -0
- package/dist/consensus/claim-identity.js +39 -0
- package/dist/consensus/claim-identity.js.map +1 -0
- package/dist/consensus/deduper.d.ts +43 -0
- package/dist/consensus/deduper.js +1052 -0
- package/dist/consensus/deduper.js.map +1 -0
- package/dist/consensus/finding-identity.d.ts +20 -0
- package/dist/consensus/finding-identity.js +49 -0
- package/dist/consensus/finding-identity.js.map +1 -0
- package/dist/consensus/gating.d.ts +215 -0
- package/dist/consensus/gating.js +699 -0
- package/dist/consensus/gating.js.map +1 -0
- package/dist/consensus/parser.d.ts +22 -0
- package/dist/consensus/parser.js +255 -0
- package/dist/consensus/parser.js.map +1 -0
- package/dist/consensus/semantic-deduper.d.ts +10 -0
- package/dist/consensus/semantic-deduper.js +70 -0
- package/dist/consensus/semantic-deduper.js.map +1 -0
- package/dist/consensus/types.d.ts +196 -0
- package/dist/consensus/types.js +2 -0
- package/dist/consensus/types.js.map +1 -0
- package/dist/consensus/verification-contract.d.ts +8 -0
- package/dist/consensus/verification-contract.js +95 -0
- package/dist/consensus/verification-contract.js.map +1 -0
- package/dist/consensus/voter.d.ts +29 -0
- package/dist/consensus/voter.js +394 -0
- package/dist/consensus/voter.js.map +1 -0
- package/dist/converge/attempt-budget.d.ts +88 -0
- package/dist/converge/attempt-budget.js +717 -0
- package/dist/converge/attempt-budget.js.map +1 -0
- package/dist/converge/bound-fix-recovery-source.d.ts +24 -0
- package/dist/converge/bound-fix-recovery-source.js +25 -0
- package/dist/converge/bound-fix-recovery-source.js.map +1 -0
- package/dist/converge/bound-fix-recovery.d.ts +15 -0
- package/dist/converge/bound-fix-recovery.js +65 -0
- package/dist/converge/bound-fix-recovery.js.map +1 -0
- package/dist/converge/correction-anchors.d.ts +1 -0
- package/dist/converge/correction-anchors.js +2 -0
- package/dist/converge/correction-anchors.js.map +1 -0
- package/dist/converge/cycle-remote.d.ts +6 -0
- package/dist/converge/cycle-remote.js +41 -0
- package/dist/converge/cycle-remote.js.map +1 -0
- package/dist/converge/delivery-reconciliation.d.ts +17 -0
- package/dist/converge/delivery-reconciliation.js +53 -0
- package/dist/converge/delivery-reconciliation.js.map +1 -0
- package/dist/converge/finding-identity.d.ts +6 -0
- package/dist/converge/finding-identity.js +7 -0
- package/dist/converge/finding-identity.js.map +1 -0
- package/dist/converge/fresh-review.d.ts +37 -0
- package/dist/converge/fresh-review.js +351 -0
- package/dist/converge/fresh-review.js.map +1 -0
- package/dist/converge/launch-guard.d.ts +55 -0
- package/dist/converge/launch-guard.js +363 -0
- package/dist/converge/launch-guard.js.map +1 -0
- package/dist/converge/launch-preflight.d.ts +5 -0
- package/dist/converge/launch-preflight.js +41 -0
- package/dist/converge/launch-preflight.js.map +1 -0
- package/dist/converge/launch-record.d.ts +136 -0
- package/dist/converge/launch-record.js +86 -0
- package/dist/converge/launch-record.js.map +1 -0
- package/dist/converge/legacy-launch-health.d.ts +311 -0
- package/dist/converge/legacy-launch-health.js +159 -0
- package/dist/converge/legacy-launch-health.js.map +1 -0
- package/dist/converge/legacy-roster.d.ts +29 -0
- package/dist/converge/legacy-roster.js +268 -0
- package/dist/converge/legacy-roster.js.map +1 -0
- package/dist/converge/native-lock.d.ts +18 -0
- package/dist/converge/native-lock.js +122 -0
- package/dist/converge/native-lock.js.map +1 -0
- package/dist/converge/ordinary-pending-export.d.ts +67 -0
- package/dist/converge/ordinary-pending-export.js +175 -0
- package/dist/converge/ordinary-pending-export.js.map +1 -0
- package/dist/converge/ordinary-pending-package.d.ts +28 -0
- package/dist/converge/ordinary-pending-package.js +36 -0
- package/dist/converge/ordinary-pending-package.js.map +1 -0
- package/dist/converge/pending-legacy-resume.d.ts +119 -0
- package/dist/converge/pending-legacy-resume.js +720 -0
- package/dist/converge/pending-legacy-resume.js.map +1 -0
- package/dist/converge/pending-recovery-source.d.ts +131 -0
- package/dist/converge/pending-recovery-source.js +71 -0
- package/dist/converge/pending-recovery-source.js.map +1 -0
- package/dist/converge/recovery-launch.d.ts +66 -0
- package/dist/converge/recovery-launch.js +518 -0
- package/dist/converge/recovery-launch.js.map +1 -0
- package/dist/converge/retained-report.d.ts +29 -0
- package/dist/converge/retained-report.js +218 -0
- package/dist/converge/retained-report.js.map +1 -0
- package/dist/converge/retry-source.d.ts +25 -0
- package/dist/converge/retry-source.js +13 -0
- package/dist/converge/retry-source.js.map +1 -0
- package/dist/converge/review-cycle.d.ts +49 -0
- package/dist/converge/review-cycle.js +26 -0
- package/dist/converge/review-cycle.js.map +1 -0
- package/dist/converge/round-gap-schema.d.ts +66 -0
- package/dist/converge/round-gap-schema.js +51 -0
- package/dist/converge/round-gap-schema.js.map +1 -0
- package/dist/converge/round-gap.d.ts +38 -0
- package/dist/converge/round-gap.js +334 -0
- package/dist/converge/round-gap.js.map +1 -0
- package/dist/converge/run-state.d.ts +224 -0
- package/dist/converge/run-state.js +564 -0
- package/dist/converge/run-state.js.map +1 -0
- package/dist/converge/stale-report-schema.d.ts +42 -0
- package/dist/converge/stale-report-schema.js +79 -0
- package/dist/converge/stale-report-schema.js.map +1 -0
- package/dist/converge/stale-report-storage.d.ts +47 -0
- package/dist/converge/stale-report-storage.js +172 -0
- package/dist/converge/stale-report-storage.js.map +1 -0
- package/dist/converge/stale-report.d.ts +14 -0
- package/dist/converge/stale-report.js +213 -0
- package/dist/converge/stale-report.js.map +1 -0
- package/dist/converge/target-ownership.d.ts +29 -0
- package/dist/converge/target-ownership.js +95 -0
- package/dist/converge/target-ownership.js.map +1 -0
- package/dist/converge/terminal-rejection-schema.d.ts +42 -0
- package/dist/converge/terminal-rejection-schema.js +39 -0
- package/dist/converge/terminal-rejection-schema.js.map +1 -0
- package/dist/converge/terminal-rejection.d.ts +13 -0
- package/dist/converge/terminal-rejection.js +275 -0
- package/dist/converge/terminal-rejection.js.map +1 -0
- package/dist/coordination/registry-lock.d.ts +82 -0
- package/dist/coordination/registry-lock.js +498 -0
- package/dist/coordination/registry-lock.js.map +1 -0
- package/dist/discuss.d.ts +53 -0
- package/dist/discuss.js +112 -0
- package/dist/discuss.js.map +1 -0
- package/dist/dispatch/adapter.d.ts +32 -0
- package/dist/dispatch/adapter.js +2 -0
- package/dist/dispatch/adapter.js.map +1 -0
- package/dist/dispatch/anthropic.d.ts +10 -0
- package/dist/dispatch/anthropic.js +235 -0
- package/dist/dispatch/anthropic.js.map +1 -0
- package/dist/dispatch/async-lane.d.ts +127 -0
- package/dist/dispatch/async-lane.js +414 -0
- package/dist/dispatch/async-lane.js.map +1 -0
- package/dist/dispatch/capture-council.d.ts +63 -0
- package/dist/dispatch/capture-council.js +137 -0
- package/dist/dispatch/capture-council.js.map +1 -0
- package/dist/dispatch/captured-async.d.ts +67 -0
- package/dist/dispatch/captured-async.js +40 -0
- package/dist/dispatch/captured-async.js.map +1 -0
- package/dist/dispatch/captured-inputs.d.ts +50 -0
- package/dist/dispatch/captured-inputs.js +190 -0
- package/dist/dispatch/captured-inputs.js.map +1 -0
- package/dist/dispatch/checkpoint-async-context.d.ts +27 -0
- package/dist/dispatch/checkpoint-async-context.js +51 -0
- package/dist/dispatch/checkpoint-async-context.js.map +1 -0
- package/dist/dispatch/checkpoint-async-execution.d.ts +22 -0
- package/dist/dispatch/checkpoint-async-execution.js +130 -0
- package/dist/dispatch/checkpoint-async-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-async-store.d.ts +134 -0
- package/dist/dispatch/checkpoint-async-store.js +534 -0
- package/dist/dispatch/checkpoint-async-store.js.map +1 -0
- package/dist/dispatch/checkpoint-async-unknown.d.ts +19 -0
- package/dist/dispatch/checkpoint-async-unknown.js +46 -0
- package/dist/dispatch/checkpoint-async-unknown.js.map +1 -0
- package/dist/dispatch/checkpoint-async.d.ts +252 -0
- package/dist/dispatch/checkpoint-async.js +270 -0
- package/dist/dispatch/checkpoint-async.js.map +1 -0
- package/dist/dispatch/checkpoint-gating-execution.d.ts +26 -0
- package/dist/dispatch/checkpoint-gating-execution.js +84 -0
- package/dist/dispatch/checkpoint-gating-execution.js.map +1 -0
- package/dist/dispatch/checkpoint-phase-limits.d.ts +5 -0
- package/dist/dispatch/checkpoint-phase-limits.js +11 -0
- package/dist/dispatch/checkpoint-phase-limits.js.map +1 -0
- package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
- package/dist/dispatch/checkpoint-verification-context.js +48 -0
- package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
- package/dist/dispatch/checkpoint-verification.d.ts +213 -0
- package/dist/dispatch/checkpoint-verification.js +381 -0
- package/dist/dispatch/checkpoint-verification.js.map +1 -0
- package/dist/dispatch/checkpoint.d.ts +329 -0
- package/dist/dispatch/checkpoint.js +1418 -0
- package/dist/dispatch/checkpoint.js.map +1 -0
- package/dist/dispatch/google.d.ts +10 -0
- package/dist/dispatch/google.js +158 -0
- package/dist/dispatch/google.js.map +1 -0
- package/dist/dispatch/late-audit.d.ts +23 -0
- package/dist/dispatch/late-audit.js +133 -0
- package/dist/dispatch/late-audit.js.map +1 -0
- package/dist/dispatch/merge.d.ts +29 -0
- package/dist/dispatch/merge.js +112 -0
- package/dist/dispatch/merge.js.map +1 -0
- package/dist/dispatch/openai-compat.d.ts +30 -0
- package/dist/dispatch/openai-compat.js +166 -0
- package/dist/dispatch/openai-compat.js.map +1 -0
- package/dist/dispatch/openai.d.ts +10 -0
- package/dist/dispatch/openai.js +159 -0
- package/dist/dispatch/openai.js.map +1 -0
- package/dist/dispatch/original-execution.d.ts +30 -0
- package/dist/dispatch/original-execution.js +91 -0
- package/dist/dispatch/original-execution.js.map +1 -0
- package/dist/dispatch/original-launch.d.ts +37 -0
- package/dist/dispatch/original-launch.js +117 -0
- package/dist/dispatch/original-launch.js.map +1 -0
- package/dist/dispatch/quorum.d.ts +15 -0
- package/dist/dispatch/quorum.js +33 -0
- package/dist/dispatch/quorum.js.map +1 -0
- package/dist/dispatch/recovery-operation.d.ts +44 -0
- package/dist/dispatch/recovery-operation.js +146 -0
- package/dist/dispatch/recovery-operation.js.map +1 -0
- package/dist/dispatch/recovery-policy.d.ts +54 -0
- package/dist/dispatch/recovery-policy.js +157 -0
- package/dist/dispatch/recovery-policy.js.map +1 -0
- package/dist/dispatch/recovery.d.ts +78 -0
- package/dist/dispatch/recovery.js +299 -0
- package/dist/dispatch/recovery.js.map +1 -0
- package/dist/dispatch/retained-async.d.ts +13 -0
- package/dist/dispatch/retained-async.js +101 -0
- package/dist/dispatch/retained-async.js.map +1 -0
- package/dist/dispatch/reviewer-identity.d.ts +10 -0
- package/dist/dispatch/reviewer-identity.js +19 -0
- package/dist/dispatch/reviewer-identity.js.map +1 -0
- package/dist/dispatch/runner.d.ts +76 -0
- package/dist/dispatch/runner.js +415 -0
- package/dist/dispatch/runner.js.map +1 -0
- package/dist/dispatch/utils.d.ts +159 -0
- package/dist/dispatch/utils.js +381 -0
- package/dist/dispatch/utils.js.map +1 -0
- package/dist/dispatch/verification-execution.d.ts +48 -0
- package/dist/dispatch/verification-execution.js +252 -0
- package/dist/dispatch/verification-execution.js.map +1 -0
- package/dist/dispatch/verification-late-audit.d.ts +17 -0
- package/dist/dispatch/verification-late-audit.js +117 -0
- package/dist/dispatch/verification-late-audit.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.d.ts +30 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js +100 -0
- package/dist/evidence/claim-recovery/authenticated-carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.d.ts +46 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js +120 -0
- package/dist/evidence/claim-recovery/authenticated-receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/carrier-inventory.d.ts +49 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js +340 -0
- package/dist/evidence/claim-recovery/carrier-inventory.js.map +1 -0
- package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
- package/dist/evidence/claim-recovery/claim-index.js +56 -0
- package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
- package/dist/evidence/claim-recovery/confirmation.d.ts +53 -0
- package/dist/evidence/claim-recovery/confirmation.js +151 -0
- package/dist/evidence/claim-recovery/confirmation.js.map +1 -0
- package/dist/evidence/claim-recovery/context.d.ts +15 -0
- package/dist/evidence/claim-recovery/context.js +40 -0
- package/dist/evidence/claim-recovery/context.js.map +1 -0
- package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
- package/dist/evidence/claim-recovery/proof-storage.js +97 -0
- package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/anchors.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/anchors.js +22 -0
- package/dist/evidence/claim-recovery/validation/anchors.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js +364 -0
- package/dist/evidence/claim-recovery/validation/carrier-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.d.ts +83 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/carrier-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claim-split.d.ts +57 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js +209 -0
- package/dist/evidence/claim-recovery/validation/claim-split.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
- package/dist/evidence/claim-recovery/validation/claims.js +108 -0
- package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/current-projection.d.ts +36 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js +424 -0
- package/dist/evidence/claim-recovery/validation/current-projection.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
- package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
- package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
- package/dist/evidence/claim-recovery/validation/materials.js +160 -0
- package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-material.d.ts +27 -0
- package/dist/evidence/claim-recovery/validation/native-material.js +35 -0
- package/dist/evidence/claim-recovery/validation/native-material.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.d.ts +79 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js +187 -0
- package/dist/evidence/claim-recovery/validation/native-occurrences.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/native-state.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/native-state.js +385 -0
- package/dist/evidence/claim-recovery/validation/native-state.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/obligations.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/obligations.js +65 -0
- package/dist/evidence/claim-recovery/validation/obligations.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.d.ts +45 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js +208 -0
- package/dist/evidence/claim-recovery/validation/occurrence-source.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.d.ts +101 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js +2 -0
- package/dist/evidence/claim-recovery/validation/occurrence-types.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/occurrence.d.ts +30 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js +227 -0
- package/dist/evidence/claim-recovery/validation/occurrence.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
- package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
- package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
- package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
- package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
- package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.d.ts +3 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js +22 -0
- package/dist/evidence/claim-recovery/validation/semantic-cache.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.d.ts +9 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js +347 -0
- package/dist/evidence/claim-recovery/validation/semantic-validation.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sighting.d.ts +2 -0
- package/dist/evidence/claim-recovery/validation/sighting.js +15 -0
- package/dist/evidence/claim-recovery/validation/sighting.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/sources.d.ts +15 -0
- package/dist/evidence/claim-recovery/validation/sources.js +2 -0
- package/dist/evidence/claim-recovery/validation/sources.js.map +1 -0
- package/dist/evidence/claim-recovery/validation/types.d.ts +126 -0
- package/dist/evidence/claim-recovery/validation/types.js +2 -0
- package/dist/evidence/claim-recovery/validation/types.js.map +1 -0
- package/dist/evidence/claim-split.d.ts +1 -0
- package/dist/evidence/claim-split.js +2 -0
- package/dist/evidence/claim-split.js.map +1 -0
- package/dist/evidence/event-receipts.d.ts +16 -0
- package/dist/evidence/event-receipts.js +41 -0
- package/dist/evidence/event-receipts.js.map +1 -0
- package/dist/evidence/finding-recovery.d.ts +23 -0
- package/dist/evidence/finding-recovery.js +74 -0
- package/dist/evidence/finding-recovery.js.map +1 -0
- package/dist/evidence/finding-retriage.d.ts +14 -0
- package/dist/evidence/finding-retriage.js +57 -0
- package/dist/evidence/finding-retriage.js.map +1 -0
- package/dist/evidence/format.d.ts +18 -0
- package/dist/evidence/format.js +152 -0
- package/dist/evidence/format.js.map +1 -0
- package/dist/evidence/original-run/decode.d.ts +30 -0
- package/dist/evidence/original-run/decode.js +208 -0
- package/dist/evidence/original-run/decode.js.map +1 -0
- package/dist/evidence/original-run/journal.d.ts +31 -0
- package/dist/evidence/original-run/journal.js +157 -0
- package/dist/evidence/original-run/journal.js.map +1 -0
- package/dist/evidence/original-run/lock-path.d.ts +17 -0
- package/dist/evidence/original-run/lock-path.js +116 -0
- package/dist/evidence/original-run/lock-path.js.map +1 -0
- package/dist/evidence/original-run/lock-scope.d.ts +21 -0
- package/dist/evidence/original-run/lock-scope.js +61 -0
- package/dist/evidence/original-run/lock-scope.js.map +1 -0
- package/dist/evidence/original-run/lock.d.ts +33 -0
- package/dist/evidence/original-run/lock.js +259 -0
- package/dist/evidence/original-run/lock.js.map +1 -0
- package/dist/evidence/original-run/remote.d.ts +23 -0
- package/dist/evidence/original-run/remote.js +110 -0
- package/dist/evidence/original-run/remote.js.map +1 -0
- package/dist/evidence/original-run/source.d.ts +61 -0
- package/dist/evidence/original-run/source.js +267 -0
- package/dist/evidence/original-run/source.js.map +1 -0
- package/dist/evidence/reads.d.ts +11 -0
- package/dist/evidence/reads.js +16 -0
- package/dist/evidence/reads.js.map +1 -0
- package/dist/evidence/recover-finding.d.ts +17 -0
- package/dist/evidence/recover-finding.js +65 -0
- package/dist/evidence/recover-finding.js.map +1 -0
- package/dist/evidence/recover-run.d.ts +26 -0
- package/dist/evidence/recover-run.js +180 -0
- package/dist/evidence/recover-run.js.map +1 -0
- package/dist/evidence/retained-time-budget.d.ts +9 -0
- package/dist/evidence/retained-time-budget.js +14 -0
- package/dist/evidence/retained-time-budget.js.map +1 -0
- package/dist/evidence/retriage-finding.d.ts +12 -0
- package/dist/evidence/retriage-finding.js +67 -0
- package/dist/evidence/retriage-finding.js.map +1 -0
- package/dist/evidence/reviewer-lineage.d.ts +35 -0
- package/dist/evidence/reviewer-lineage.js +293 -0
- package/dist/evidence/reviewer-lineage.js.map +1 -0
- package/dist/evidence/reviewer-original.d.ts +67 -0
- package/dist/evidence/reviewer-original.js +148 -0
- package/dist/evidence/reviewer-original.js.map +1 -0
- package/dist/evidence/reviewer-recovery.d.ts +74 -0
- package/dist/evidence/reviewer-recovery.js +179 -0
- package/dist/evidence/reviewer-recovery.js.map +1 -0
- package/dist/evidence/reviewer-status.d.ts +145 -0
- package/dist/evidence/reviewer-status.js +302 -0
- package/dist/evidence/reviewer-status.js.map +1 -0
- package/dist/evidence/show.d.ts +10 -0
- package/dist/evidence/show.js +41 -0
- package/dist/evidence/show.js.map +1 -0
- package/dist/evidence/status.d.ts +38 -0
- package/dist/evidence/status.js +73 -0
- package/dist/evidence/status.js.map +1 -0
- package/dist/evidence/target.d.ts +17 -0
- package/dist/evidence/target.js +74 -0
- package/dist/evidence/target.js.map +1 -0
- package/dist/evidence/types.d.ts +176 -0
- package/dist/evidence/types.js +109 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2688 -0
- package/dist/index.js.map +1 -0
- package/dist/models/seed.d.ts +44 -0
- package/dist/models/seed.js +175 -0
- package/dist/models/seed.js.map +1 -0
- package/dist/models/server-stats.d.ts +80 -0
- package/dist/models/server-stats.js +109 -0
- package/dist/models/server-stats.js.map +1 -0
- package/dist/models/stats-store.d.ts +84 -0
- package/dist/models/stats-store.js +572 -0
- package/dist/models/stats-store.js.map +1 -0
- package/dist/output/artifacts.d.ts +16 -0
- package/dist/output/artifacts.js +29 -0
- package/dist/output/artifacts.js.map +1 -0
- package/dist/output/assembly-refusal.d.ts +8 -0
- package/dist/output/assembly-refusal.js +14 -0
- package/dist/output/assembly-refusal.js.map +1 -0
- package/dist/output/github.d.ts +12 -0
- package/dist/output/github.js +214 -0
- package/dist/output/github.js.map +1 -0
- package/dist/output/json.d.ts +3 -0
- package/dist/output/json.js +8 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/markdown.d.ts +3 -0
- package/dist/output/markdown.js +281 -0
- package/dist/output/markdown.js.map +1 -0
- package/dist/output/progress.d.ts +55 -0
- package/dist/output/progress.js +180 -0
- package/dist/output/progress.js.map +1 -0
- package/dist/output/sanitize.d.ts +18 -0
- package/dist/output/sanitize.js +46 -0
- package/dist/output/sanitize.js.map +1 -0
- package/dist/output/terminal.d.ts +2 -0
- package/dist/output/terminal.js +172 -0
- package/dist/output/terminal.js.map +1 -0
- package/dist/prepare/chunker.d.ts +18 -0
- package/dist/prepare/chunker.js +325 -0
- package/dist/prepare/chunker.js.map +1 -0
- package/dist/prepare/language.d.ts +1 -0
- package/dist/prepare/language.js +99 -0
- package/dist/prepare/language.js.map +1 -0
- package/dist/prepare/prompt-builder.d.ts +44 -0
- package/dist/prepare/prompt-builder.js +102 -0
- package/dist/prepare/prompt-builder.js.map +1 -0
- package/dist/prepare/unified-diff.d.ts +40 -0
- package/dist/prepare/unified-diff.js +135 -0
- package/dist/prepare/unified-diff.js.map +1 -0
- package/dist/prompts/base.d.ts +3 -0
- package/dist/prompts/base.js +53 -0
- package/dist/prompts/base.js.map +1 -0
- package/dist/prompts/hardening.d.ts +19 -0
- package/dist/prompts/hardening.js +67 -0
- package/dist/prompts/hardening.js.map +1 -0
- package/dist/prompts/languages/elixir.d.ts +1 -0
- package/dist/prompts/languages/elixir.js +13 -0
- package/dist/prompts/languages/elixir.js.map +1 -0
- package/dist/prompts/languages/generic.d.ts +1 -0
- package/dist/prompts/languages/generic.js +11 -0
- package/dist/prompts/languages/generic.js.map +1 -0
- package/dist/prompts/languages/python.d.ts +1 -0
- package/dist/prompts/languages/python.js +14 -0
- package/dist/prompts/languages/python.js.map +1 -0
- package/dist/prompts/languages/typescript.d.ts +1 -0
- package/dist/prompts/languages/typescript.js +13 -0
- package/dist/prompts/languages/typescript.js.map +1 -0
- package/dist/prompts/plan.d.ts +15 -0
- package/dist/prompts/plan.js +55 -0
- package/dist/prompts/plan.js.map +1 -0
- package/dist/report/aggregation-inputs.d.ts +52 -0
- package/dist/report/aggregation-inputs.js +114 -0
- package/dist/report/aggregation-inputs.js.map +1 -0
- package/dist/report/assembly.d.ts +43 -0
- package/dist/report/assembly.js +133 -0
- package/dist/report/assembly.js.map +1 -0
- package/dist/report/blocking-health.d.ts +64 -0
- package/dist/report/blocking-health.js +156 -0
- package/dist/report/blocking-health.js.map +1 -0
- package/dist/report/checkpoint-assembly.d.ts +10 -0
- package/dist/report/checkpoint-assembly.js +17 -0
- package/dist/report/checkpoint-assembly.js.map +1 -0
- package/dist/report/checkpoint-consensus.d.ts +59 -0
- package/dist/report/checkpoint-consensus.js +197 -0
- package/dist/report/checkpoint-consensus.js.map +1 -0
- package/dist/report/checkpoint-gating.d.ts +36 -0
- package/dist/report/checkpoint-gating.js +110 -0
- package/dist/report/checkpoint-gating.js.map +1 -0
- package/dist/report/checkpoint-projection.d.ts +76 -0
- package/dist/report/checkpoint-projection.js +122 -0
- package/dist/report/checkpoint-projection.js.map +1 -0
- package/dist/report/consensus-assembly.d.ts +37 -0
- package/dist/report/consensus-assembly.js +33 -0
- package/dist/report/consensus-assembly.js.map +1 -0
- package/dist/report/recovery-source.d.ts +7 -0
- package/dist/report/recovery-source.js +7 -0
- package/dist/report/recovery-source.js.map +1 -0
- package/dist/report/reviewer-artifact.d.ts +118 -0
- package/dist/report/reviewer-artifact.js +381 -0
- package/dist/report/reviewer-artifact.js.map +1 -0
- package/dist/report/reviewer-evidence-schema.d.ts +42 -0
- package/dist/report/reviewer-evidence-schema.js +28 -0
- package/dist/report/reviewer-evidence-schema.js.map +1 -0
- package/dist/report/reviewer-evidence.d.ts +54 -0
- package/dist/report/reviewer-evidence.js +229 -0
- package/dist/report/reviewer-evidence.js.map +1 -0
- package/dist/report/reviewer-health.d.ts +62 -0
- package/dist/report/reviewer-health.js +105 -0
- package/dist/report/reviewer-health.js.map +1 -0
- package/dist/report/run-header.d.ts +219 -0
- package/dist/report/run-header.js +307 -0
- package/dist/report/run-header.js.map +1 -0
- package/dist/report/supplemental-async.d.ts +19 -0
- package/dist/report/supplemental-async.js +85 -0
- package/dist/report/supplemental-async.js.map +1 -0
- package/dist/report/uuid.d.ts +16 -0
- package/dist/report/uuid.js +41 -0
- package/dist/report/uuid.js.map +1 -0
- package/dist/resolver/git.d.ts +16 -0
- package/dist/resolver/git.js +77 -0
- package/dist/resolver/git.js.map +1 -0
- package/dist/resolver/github-client.d.ts +82 -0
- package/dist/resolver/github-client.js +27 -0
- package/dist/resolver/github-client.js.map +1 -0
- package/dist/resolver/github.d.ts +29 -0
- package/dist/resolver/github.js +166 -0
- package/dist/resolver/github.js.map +1 -0
- package/dist/resolver/local.d.ts +3 -0
- package/dist/resolver/local.js +75 -0
- package/dist/resolver/local.js.map +1 -0
- package/dist/resolver/plan.d.ts +8 -0
- package/dist/resolver/plan.js +44 -0
- package/dist/resolver/plan.js.map +1 -0
- package/dist/resolver/target.d.ts +35 -0
- package/dist/resolver/target.js +112 -0
- package/dist/resolver/target.js.map +1 -0
- package/dist/resolver/types.d.ts +43 -0
- package/dist/resolver/types.js +2 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/roles/builtin.d.ts +4 -0
- package/dist/roles/builtin.js +282 -0
- package/dist/roles/builtin.js.map +1 -0
- package/dist/roles/dispatcher.d.ts +26 -0
- package/dist/roles/dispatcher.js +96 -0
- package/dist/roles/dispatcher.js.map +1 -0
- package/dist/roles/legacy-4.1.10.d.ts +2 -0
- package/dist/roles/legacy-4.1.10.js +320 -0
- package/dist/roles/legacy-4.1.10.js.map +1 -0
- package/dist/roles/legacy-4.4.9.d.ts +4 -0
- package/dist/roles/legacy-4.4.9.js +282 -0
- package/dist/roles/legacy-4.4.9.js.map +1 -0
- package/dist/roles/loader.d.ts +10 -0
- package/dist/roles/loader.js +104 -0
- package/dist/roles/loader.js.map +1 -0
- package/dist/roles/types.d.ts +13 -0
- package/dist/roles/types.js +2 -0
- package/dist/roles/types.js.map +1 -0
- package/dist/telemetry/abort-signal.d.ts +13 -0
- package/dist/telemetry/abort-signal.js +40 -0
- package/dist/telemetry/abort-signal.js.map +1 -0
- package/dist/telemetry/attest.d.ts +98 -0
- package/dist/telemetry/attest.js +331 -0
- package/dist/telemetry/attest.js.map +1 -0
- package/dist/telemetry/attested-retry.d.ts +79 -0
- package/dist/telemetry/attested-retry.js +195 -0
- package/dist/telemetry/attested-retry.js.map +1 -0
- package/dist/telemetry/attested-reviewer-delivery.d.ts +58 -0
- package/dist/telemetry/attested-reviewer-delivery.js +238 -0
- package/dist/telemetry/attested-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/backfill.d.ts +95 -0
- package/dist/telemetry/backfill.js +460 -0
- package/dist/telemetry/backfill.js.map +1 -0
- package/dist/telemetry/credentials.d.ts +44 -0
- package/dist/telemetry/credentials.js +87 -0
- package/dist/telemetry/credentials.js.map +1 -0
- package/dist/telemetry/deliver.d.ts +152 -0
- package/dist/telemetry/deliver.js +662 -0
- package/dist/telemetry/deliver.js.map +1 -0
- package/dist/telemetry/envelope-validation.d.ts +13 -0
- package/dist/telemetry/envelope-validation.js +196 -0
- package/dist/telemetry/envelope-validation.js.map +1 -0
- package/dist/telemetry/envelope.d.ts +159 -0
- package/dist/telemetry/envelope.js +288 -0
- package/dist/telemetry/envelope.js.map +1 -0
- package/dist/telemetry/events.d.ts +68 -0
- package/dist/telemetry/events.js +79 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/notice.d.ts +15 -0
- package/dist/telemetry/notice.js +67 -0
- package/dist/telemetry/notice.js.map +1 -0
- package/dist/telemetry/outbox.d.ts +166 -0
- package/dist/telemetry/outbox.js +741 -0
- package/dist/telemetry/outbox.js.map +1 -0
- package/dist/telemetry/quarantine.d.ts +105 -0
- package/dist/telemetry/quarantine.js +224 -0
- package/dist/telemetry/quarantine.js.map +1 -0
- package/dist/telemetry/read-sink.d.ts +31 -0
- package/dist/telemetry/read-sink.js +25 -0
- package/dist/telemetry/read-sink.js.map +1 -0
- package/dist/telemetry/recovery/command.d.ts +16 -0
- package/dist/telemetry/recovery/command.js +70 -0
- package/dist/telemetry/recovery/command.js.map +1 -0
- package/dist/telemetry/recovery/discovery.d.ts +8 -0
- package/dist/telemetry/recovery/discovery.js +277 -0
- package/dist/telemetry/recovery/discovery.js.map +1 -0
- package/dist/telemetry/recovery/files.d.ts +20 -0
- package/dist/telemetry/recovery/files.js +123 -0
- package/dist/telemetry/recovery/files.js.map +1 -0
- package/dist/telemetry/recovery/plan.d.ts +10 -0
- package/dist/telemetry/recovery/plan.js +325 -0
- package/dist/telemetry/recovery/plan.js.map +1 -0
- package/dist/telemetry/recovery/source.d.ts +328 -0
- package/dist/telemetry/recovery/source.js +253 -0
- package/dist/telemetry/recovery/source.js.map +1 -0
- package/dist/telemetry/recovery/types.d.ts +100 -0
- package/dist/telemetry/recovery/types.js +2 -0
- package/dist/telemetry/recovery/types.js.map +1 -0
- package/dist/telemetry/recovery-request-budget.d.ts +39 -0
- package/dist/telemetry/recovery-request-budget.js +102 -0
- package/dist/telemetry/recovery-request-budget.js.map +1 -0
- package/dist/telemetry/report-consistency.d.ts +11 -0
- package/dist/telemetry/report-consistency.js +111 -0
- package/dist/telemetry/report-consistency.js.map +1 -0
- package/dist/telemetry/reviewer-delivery.d.ts +39 -0
- package/dist/telemetry/reviewer-delivery.js +279 -0
- package/dist/telemetry/reviewer-delivery.js.map +1 -0
- package/dist/telemetry/reviewer-preflight.d.ts +13 -0
- package/dist/telemetry/reviewer-preflight.js +56 -0
- package/dist/telemetry/reviewer-preflight.js.map +1 -0
- package/dist/telemetry/scrub.d.ts +53 -0
- package/dist/telemetry/scrub.js +205 -0
- package/dist/telemetry/scrub.js.map +1 -0
- package/dist/telemetry/sink.d.ts +212 -0
- package/dist/telemetry/sink.js +813 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/telemetry/terminal-reviewer-delivery.d.ts +18 -0
- package/dist/telemetry/terminal-reviewer-delivery.js +27 -0
- package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -0
- package/dist/telemetry/transient-input.d.ts +2 -0
- package/dist/telemetry/transient-input.js +37 -0
- package/dist/telemetry/transient-input.js.map +1 -0
- package/dist/telemetry/verification.d.ts +9 -0
- package/dist/telemetry/verification.js +12 -0
- package/dist/telemetry/verification.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-policy.js","sourceRoot":"","sources":["../../src/dispatch/recovery-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { ModelReview } from '../consensus/types.js';
|
|
2
|
+
import { type NativeTargetOwnership } from '../converge/target-ownership.js';
|
|
3
|
+
import type { BuiltPrompt } from '../prepare/prompt-builder.js';
|
|
4
|
+
import type { ReviewAssignment } from '../roles/types.js';
|
|
5
|
+
import { CheckpointJournal, type CheckpointState, type FrozenCheckpointPlan, type PaidAttempt } from './checkpoint.js';
|
|
6
|
+
import { type RecoveryAttempt, type RecoveryPreview } from './recovery-policy.js';
|
|
7
|
+
import { type RunnerOptions } from './runner.js';
|
|
8
|
+
import { type RecoveryOperation, type RecoveryRuntimeBounds } from './recovery-operation.js';
|
|
9
|
+
export interface ReviewerRecoveryOptions {
|
|
10
|
+
commonDir: string;
|
|
11
|
+
ownership: NativeTargetOwnership;
|
|
12
|
+
/** New successor journal; original terminal journals are read-only sources. */
|
|
13
|
+
journal: CheckpointJournal;
|
|
14
|
+
plan: FrozenCheckpointPlan;
|
|
15
|
+
expectedPlan: FrozenCheckpointPlan;
|
|
16
|
+
assignments: ReviewAssignment[];
|
|
17
|
+
prompts: BuiltPrompt[];
|
|
18
|
+
/** Validated immutable source history, excluding the successor's own attempts. */
|
|
19
|
+
sourceAttempts: readonly RecoveryAttempt[];
|
|
20
|
+
/** Original dispatch retains prepared secondary work; successors only top up blocking seats. */
|
|
21
|
+
includeSecondary?: boolean;
|
|
22
|
+
fraction: number;
|
|
23
|
+
maxAdditionalCalls: number;
|
|
24
|
+
maxAttemptsPerCell: number;
|
|
25
|
+
/** Remaining time from the persisted operation, not a new budget on resume. */
|
|
26
|
+
remainingMs: number;
|
|
27
|
+
timeoutMs: number;
|
|
28
|
+
concurrency: number;
|
|
29
|
+
providerConcurrency?: RunnerOptions['providerConcurrency'];
|
|
30
|
+
adapterFactory?: RunnerOptions['adapterFactory'];
|
|
31
|
+
reasoningEffort?: RunnerOptions['reasoningEffort'];
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
/**
|
|
34
|
+
* Newly durable physical results only, including failures; never retained or
|
|
35
|
+
* uncertain placeholders. Receives isolated copies. Rejection stops dispatch
|
|
36
|
+
* through the acceptance boundary without undoing recorded results or spend.
|
|
37
|
+
*/
|
|
38
|
+
onPhysicalReviewComplete?: (review: ModelReview, callIndex: number, paidAttempt: PaidAttempt) => void | Promise<void>;
|
|
39
|
+
auditLateReview?: RunnerOptions['auditLateReview'];
|
|
40
|
+
/** Audit-only callback pinned to the durable physical intent from its wave. */
|
|
41
|
+
auditLateAttempt?: (review: ModelReview, callIndex: number, paidAttempt: PaidAttempt) => void | Promise<void>;
|
|
42
|
+
onLateAuditError?: RunnerOptions['onLateAuditError'];
|
|
43
|
+
}
|
|
44
|
+
export interface ReviewerRecoveryResult {
|
|
45
|
+
preview: RecoveryPreview;
|
|
46
|
+
/** Complete original matrix order, with unstarted/uncertain cells explicit. */
|
|
47
|
+
reviews: ModelReview[];
|
|
48
|
+
/** All attempts charged to this successor, including earlier interrupted invocations. */
|
|
49
|
+
newAttempts: number;
|
|
50
|
+
stoppedBy?: 'canceled' | 'no_dispatch';
|
|
51
|
+
/** Setup failures are diagnostics, never newly billed or successful attempts. */
|
|
52
|
+
setupFailures?: Array<{
|
|
53
|
+
cell: string;
|
|
54
|
+
review: ModelReview;
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
export type CapturedRecoveryOptions = Omit<ReviewerRecoveryOptions, 'plan' | 'assignments' | 'prompts' | 'fraction' | 'maxAdditionalCalls' | 'maxAttemptsPerCell' | 'remainingMs' | 'timeoutMs' | 'concurrency' | 'providerConcurrency' | 'reasoningEffort' | 'includeSecondary'> & {
|
|
58
|
+
/** Exact operation already claimed and bound by the outer source/authority validator. */
|
|
59
|
+
operation: RecoveryOperation;
|
|
60
|
+
runtimeBounds?: RecoveryRuntimeBounds;
|
|
61
|
+
nowMs?: () => number;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Internal execution boundary for saved inputs and limits. This is not a CLI
|
|
65
|
+
* admission path: the caller still validates source report/lineage, server
|
|
66
|
+
* support, producer authority and the native launch claim before invoking it.
|
|
67
|
+
* Only the existing journal supplies prompts and persisted spend/time caps.
|
|
68
|
+
*/
|
|
69
|
+
export declare function recoverCapturedAssignments(options: CapturedRecoveryOptions): Promise<ReviewerRecoveryResult>;
|
|
70
|
+
/** Read physical attempts without counting a reused source success as a new call. */
|
|
71
|
+
export declare function recoveryAttemptsFromCheckpoint(state: CheckpointState): RecoveryAttempt[];
|
|
72
|
+
/**
|
|
73
|
+
* Execute the missing portion under the guard's existing ownership. The caller
|
|
74
|
+
* must first validate the source report/lineage, server capability and producer
|
|
75
|
+
* authority, then claim the native attempt and provide its persisted bounds.
|
|
76
|
+
* This engine never performs delivery, native admission or an approval decision.
|
|
77
|
+
*/
|
|
78
|
+
export declare function recoverReviewerAssignments(input: ReviewerRecoveryOptions): Promise<ReviewerRecoveryResult>;
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { setTimeout as delay } from 'node:timers/promises';
|
|
3
|
+
import { assertNativeTargetOwnership, withOwnedNativeOperation } from '../converge/target-ownership.js';
|
|
4
|
+
import { freezeCheckpointPlan, blockingCheckpointSeatIds, checkpointRecoveryCells, requireReviewerLaneBinding } from './checkpoint.js';
|
|
5
|
+
import { previewReviewerRecovery } from './recovery-policy.js';
|
|
6
|
+
import { resolveQuorumPolicy } from './quorum.js';
|
|
7
|
+
import { defaultAdapterFactory, reviewCallIdentity, runReviews } from './runner.js';
|
|
8
|
+
import { retryDelay } from './utils.js';
|
|
9
|
+
import { DEFAULT_CONCURRENCY, DEFAULT_REASONING_EFFORT, DEFAULT_TIMEOUT_MS } from '../config/defaults.js';
|
|
10
|
+
import { decodeCapturedInputs } from './captured-inputs.js';
|
|
11
|
+
import { decodeRecoveryOperation, encodeRecoveryOperation, remainingRecoveryBudget } from './recovery-operation.js';
|
|
12
|
+
/**
|
|
13
|
+
* Internal execution boundary for saved inputs and limits. This is not a CLI
|
|
14
|
+
* admission path: the caller still validates source report/lineage, server
|
|
15
|
+
* support, producer authority and the native launch claim before invoking it.
|
|
16
|
+
* Only the existing journal supplies prompts and persisted spend/time caps.
|
|
17
|
+
*/
|
|
18
|
+
export async function recoverCapturedAssignments(options) {
|
|
19
|
+
const expectedOperation = encodeRecoveryOperation(options.operation);
|
|
20
|
+
const expectedPlan = freezeCheckpointPlan(options.expectedPlan);
|
|
21
|
+
requireReviewerLaneBinding(expectedPlan);
|
|
22
|
+
const sourceAttempts = structuredClone(options.sourceAttempts);
|
|
23
|
+
const runtimeBounds = options.runtimeBounds === undefined ? undefined : structuredClone(options.runtimeBounds);
|
|
24
|
+
const capturedOptions = { ...options, expectedPlan, sourceAttempts, runtimeBounds };
|
|
25
|
+
return withOwnedNativeOperation(options.ownership, options.commonDir, expectedPlan.target, async (ownership) => {
|
|
26
|
+
const bindings = await capturedOptions.journal.readBindings();
|
|
27
|
+
if (bindings['captured-inputs'] === undefined || bindings.operation === undefined)
|
|
28
|
+
throw new Error('recovery_missing_bindings');
|
|
29
|
+
const operation = decodeRecoveryOperation(bindings.operation);
|
|
30
|
+
if (bindings.operation !== expectedOperation || operation.target !== expectedPlan.target ||
|
|
31
|
+
operation.planDigest !== expectedPlan.digest)
|
|
32
|
+
throw new Error('recovery_operation_mismatch');
|
|
33
|
+
const captured = decodeCapturedInputs(bindings['captured-inputs'], expectedPlan);
|
|
34
|
+
if (captured.digest !== operation.capturedInputsSha256)
|
|
35
|
+
throw new Error('recovery_captured_inputs_mismatch');
|
|
36
|
+
const budget = remainingRecoveryBudget(operation, (capturedOptions.nowMs ?? Date.now)(), runtimeBounds);
|
|
37
|
+
return recoverReviewerAssignments({ ...capturedOptions, ownership, plan: captured.plan, includeSecondary: false,
|
|
38
|
+
assignments: captured.assignments, prompts: captured.prompts, fraction: captured.policy.fraction,
|
|
39
|
+
timeoutMs: captured.config.timeout ?? DEFAULT_TIMEOUT_MS,
|
|
40
|
+
concurrency: captured.config.concurrency ?? DEFAULT_CONCURRENCY,
|
|
41
|
+
providerConcurrency: captured.config.providerConcurrency,
|
|
42
|
+
reasoningEffort: captured.config.reasoningEffort ?? DEFAULT_REASONING_EFFORT,
|
|
43
|
+
remainingMs: budget.remainingMs, maxAdditionalCalls: budget.maxAdditionalCalls,
|
|
44
|
+
maxAttemptsPerCell: budget.maxAttemptsPerCell });
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** Read physical attempts without counting a reused source success as a new call. */
|
|
48
|
+
export function recoveryAttemptsFromCheckpoint(state) {
|
|
49
|
+
const outcomes = new Map(state.outcomes.map(outcome => [outcome.paidAttempt.id, outcome]));
|
|
50
|
+
return state.records.filter(record => record.type === 'intent').map(record => {
|
|
51
|
+
const outcome = outcomes.get(record.paidAttempt.id);
|
|
52
|
+
if (outcome && outcome.cell !== record.cell)
|
|
53
|
+
throw new Error('recovery_attempt_cell_mismatch');
|
|
54
|
+
return { id: record.paidAttempt.id, cell: record.cell,
|
|
55
|
+
...(outcome ? { outcome: JSON.parse(outcome.result.reviewBytes) } : {}) };
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Execute the missing portion under the guard's existing ownership. The caller
|
|
60
|
+
* must first validate the source report/lineage, server capability and producer
|
|
61
|
+
* authority, then claim the native attempt and provide its persisted bounds.
|
|
62
|
+
* This engine never performs delivery, native admission or an approval decision.
|
|
63
|
+
*/
|
|
64
|
+
export async function recoverReviewerAssignments(input) {
|
|
65
|
+
const startedAt = performance.now();
|
|
66
|
+
input = { ...input };
|
|
67
|
+
if ((input.auditLateAttempt || input.auditLateReview) && typeof input.onLateAuditError !== 'function') {
|
|
68
|
+
throw new Error('Late review audit requires an error sink');
|
|
69
|
+
}
|
|
70
|
+
const plan = freezeCheckpointPlan(input.plan);
|
|
71
|
+
if (plan.digest !== input.plan.digest || plan.digest !== input.expectedPlan.digest ||
|
|
72
|
+
JSON.stringify(plan.cells) !== JSON.stringify(input.plan.cells) ||
|
|
73
|
+
JSON.stringify(plan.cells) !== JSON.stringify(input.expectedPlan.cells) ||
|
|
74
|
+
input.journal.getPlan().digest !== plan.digest)
|
|
75
|
+
throw new Error('recovery_plan_mismatch');
|
|
76
|
+
const assignments = structuredClone(input.assignments), prompts = structuredClone(input.prompts);
|
|
77
|
+
const sourceAttempts = structuredClone(input.sourceAttempts);
|
|
78
|
+
if (assignments.length !== plan.cells.length || prompts.length !== plan.cells.length)
|
|
79
|
+
throw new Error('recovery_matrix_mismatch');
|
|
80
|
+
for (const [index, cell] of plan.cells.entries()) {
|
|
81
|
+
const assignment = assignments[index], prompt = prompts[index];
|
|
82
|
+
if (assignment.model !== cell.model || assignment.provider !== cell.route || assignment.role.name !== cell.role) {
|
|
83
|
+
throw new Error('recovery_assignment_mismatch');
|
|
84
|
+
}
|
|
85
|
+
const digest = (text) => createHash('sha256').update(text).digest('hex');
|
|
86
|
+
if (digest(prompt.systemPrompt) !== cell.systemPromptSha256 || digest(prompt.userPrompt) !== cell.userPromptSha256) {
|
|
87
|
+
throw new Error('recovery_prompt_mismatch');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (!Number.isFinite(input.remainingMs) || input.remainingMs < 0 || input.remainingMs > 2_147_483_647) {
|
|
91
|
+
throw new Error('recovery_invalid_deadline');
|
|
92
|
+
}
|
|
93
|
+
const deadline = startedAt + input.remainingMs;
|
|
94
|
+
await assertNativeTargetOwnership(input.ownership, input.commonDir, plan.target);
|
|
95
|
+
// Serialize whole invocations using the guard's existing ownership. A second
|
|
96
|
+
// resume must see the first one's completed writes, not a partially published
|
|
97
|
+
// record. Child operations below remain reentrant without another target lock.
|
|
98
|
+
return withOwnedNativeOperation(input.ownership, input.commonDir, plan.target, async (ownership) => {
|
|
99
|
+
input = { ...input, ownership };
|
|
100
|
+
const blockingSeatIds = blockingCheckpointSeatIds(plan);
|
|
101
|
+
const policy = resolveQuorumPolicy(blockingSeatIds.length, input.fraction);
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const abort = () => controller.abort();
|
|
104
|
+
if (input.signal?.aborted)
|
|
105
|
+
abort();
|
|
106
|
+
else
|
|
107
|
+
input.signal?.addEventListener('abort', abort, { once: true });
|
|
108
|
+
const timer = setTimeout(abort, Math.max(0, deadline - performance.now()));
|
|
109
|
+
let waves = 0;
|
|
110
|
+
const setupFailuresByIndex = new Map();
|
|
111
|
+
function preview(attempts, newAttempts) {
|
|
112
|
+
return previewReviewerRecovery(checkpointRecoveryCells(plan), attempts, policy, {
|
|
113
|
+
maxAttemptsPerCell: input.maxAttemptsPerCell,
|
|
114
|
+
maxAdditionalCalls: input.maxAdditionalCalls,
|
|
115
|
+
additionalCallsUsed: newAttempts,
|
|
116
|
+
remainingMs: Math.max(0, deadline - performance.now()),
|
|
117
|
+
}, [...setupFailuresByIndex.keys()].map(index => plan.cells[index].id), input.includeSecondary === true);
|
|
118
|
+
}
|
|
119
|
+
async function capture() {
|
|
120
|
+
const state = await input.journal.read();
|
|
121
|
+
const own = recoveryAttemptsFromCheckpoint(state);
|
|
122
|
+
const attempts = [...sourceAttempts, ...own];
|
|
123
|
+
return { state, attempts, own, preview: preview(attempts, own.length) };
|
|
124
|
+
}
|
|
125
|
+
function finish(snapshot, stoppedBy) {
|
|
126
|
+
const last = new Map(snapshot.attempts.map(attempt => [attempt.cell, attempt]));
|
|
127
|
+
const reviews = plan.cells.map((cell, index) => setupFailuresByIndex.get(index) ?? last.get(cell.id)?.outcome ?? {
|
|
128
|
+
model: cell.model, role: cell.role, provider: cell.route, status: 'canceled',
|
|
129
|
+
findings: [], durationMs: 0,
|
|
130
|
+
error: last.has(cell.id) ? 'Provider outcome is uncertain and possibly billed.' : 'Original assignment has not been started.',
|
|
131
|
+
});
|
|
132
|
+
return { preview: snapshot.preview, reviews, newAttempts: snapshot.own.length,
|
|
133
|
+
...(setupFailuresByIndex.size ? { setupFailures: [...setupFailuresByIndex].map(([index, review]) => ({ cell: plan.cells[index].id, review })) } : {}),
|
|
134
|
+
...(stoppedBy ? { stoppedBy } : {}) };
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const prior = await capture();
|
|
138
|
+
if (prior.preview.nextAction === 'retry_missing_assignments' &&
|
|
139
|
+
!controller.signal.aborted && !prior.state.finalized) {
|
|
140
|
+
// Exclusive invocation ownership means these intents belong to an earlier
|
|
141
|
+
// executor. Retain their uncertain cost before replaying a new selection.
|
|
142
|
+
const recorded = new Set(prior.state.records.filter(record => record.type === 'uncertain')
|
|
143
|
+
.map(record => record.paidAttempt.id));
|
|
144
|
+
for (const pending of prior.state.uncertain) {
|
|
145
|
+
if (!recorded.has(pending.paidAttempt.id)) {
|
|
146
|
+
await input.journal.recordUncertain(pending.cell, pending.paidAttempt, 'Previous executor ended without a recorded outcome; call remains possibly billed.', ownership);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
while (true) {
|
|
151
|
+
const before = await capture();
|
|
152
|
+
if (before.preview.nextAction !== 'retry_missing_assignments')
|
|
153
|
+
return finish(before);
|
|
154
|
+
if (controller.signal.aborted)
|
|
155
|
+
return finish(before, 'canceled');
|
|
156
|
+
if (before.state.finalized)
|
|
157
|
+
throw new Error('recovery_successor_finalized');
|
|
158
|
+
const selected = new Map(before.attempts.filter(attempt => attempt.outcome?.status === 'success')
|
|
159
|
+
.map(attempt => [attempt.cell, attempt.outcome]));
|
|
160
|
+
const inFlight = new Map();
|
|
161
|
+
const running = new Set();
|
|
162
|
+
const adapters = new Map();
|
|
163
|
+
const pendingIntentWrites = [];
|
|
164
|
+
const returned = await runReviews(assignments, prompts, {
|
|
165
|
+
timeoutMs: input.timeoutMs, concurrency: input.concurrency,
|
|
166
|
+
providerConcurrency: input.providerConcurrency,
|
|
167
|
+
// Every physical call has a durable intent; SDK/adapter retries cannot
|
|
168
|
+
// happen invisibly inside this accounting boundary.
|
|
169
|
+
maxRetries: 0, reasoningEffort: input.reasoningEffort,
|
|
170
|
+
adapterFactory: provider => {
|
|
171
|
+
const adapter = adapters.get(provider);
|
|
172
|
+
if (!adapter)
|
|
173
|
+
throw new Error('recovery_missing_prepared_adapter');
|
|
174
|
+
return adapter;
|
|
175
|
+
}, quorum: { fraction: policy.fraction, blockingSeatIds },
|
|
176
|
+
seatIds: plan.cells.map(cell => cell.seat), signal: controller.signal,
|
|
177
|
+
retainedReviews: before.preview.retainedCallIndices.map(callIndex => ({ callIndex,
|
|
178
|
+
callIdentity: reviewCallIdentity(assignments[callIndex], prompts[callIndex], callIndex, plan.cells[callIndex].seat),
|
|
179
|
+
review: selected.get(plan.cells[callIndex].id),
|
|
180
|
+
})),
|
|
181
|
+
eligibleCallIndices: before.preview.eligibleCallIndices.filter(index => !setupFailuresByIndex.has(index)),
|
|
182
|
+
beforeReview: (index, signal) => {
|
|
183
|
+
const operation = withOwnedNativeOperation(input.ownership, input.commonDir, plan.target, async (ownership) => {
|
|
184
|
+
if (signal.aborted)
|
|
185
|
+
return false;
|
|
186
|
+
const current = await capture();
|
|
187
|
+
// The preview reserves work; every durable paid intent must still
|
|
188
|
+
// respect this invocation's possibly tighter runtime call bound.
|
|
189
|
+
if (current.own.length >= input.maxAdditionalCalls)
|
|
190
|
+
return false;
|
|
191
|
+
// Our own running calls still have a chance to succeed. Treat their
|
|
192
|
+
// pending intents as reserved work, not uncertain previous invocations,
|
|
193
|
+
// when deciding whether another missing cell could complete quorum.
|
|
194
|
+
const activeIds = new Set([...running].map(index => inFlight.get(index).id));
|
|
195
|
+
const planning = current.attempts.filter(attempt => attempt.outcome !== undefined || !activeIds.has(attempt.id));
|
|
196
|
+
const now = preview(planning, current.own.length - activeIds.size);
|
|
197
|
+
if (now.nextAction !== 'retry_missing_assignments' || controller.signal.aborted ||
|
|
198
|
+
!now.eligibleCallIndices.includes(index))
|
|
199
|
+
return false;
|
|
200
|
+
// Prepare only an eligible cell, before its durable paid intent.
|
|
201
|
+
// Constructor/configuration failures never start a provider call.
|
|
202
|
+
const assignment = assignments[index];
|
|
203
|
+
if (!adapters.has(assignment.provider)) {
|
|
204
|
+
try {
|
|
205
|
+
adapters.set(assignment.provider, input.adapterFactory
|
|
206
|
+
? input.adapterFactory(assignment.provider)
|
|
207
|
+
: defaultAdapterFactory(assignment.provider, input.reasoningEffort));
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
setupFailuresByIndex.set(index, { model: assignment.model, role: assignment.role.name,
|
|
211
|
+
provider: assignment.provider, status: 'error', findings: [], durationMs: 0,
|
|
212
|
+
error: error instanceof Error ? error.message : String(error) });
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (signal.aborted || controller.signal.aborted)
|
|
217
|
+
return false;
|
|
218
|
+
const attempt = { id: randomUUID(), kind: 'paid' };
|
|
219
|
+
await input.journal.recordIntent(plan.cells[index].id, attempt, ownership);
|
|
220
|
+
inFlight.set(index, attempt);
|
|
221
|
+
running.add(index);
|
|
222
|
+
});
|
|
223
|
+
pendingIntentWrites.push(operation);
|
|
224
|
+
return operation;
|
|
225
|
+
},
|
|
226
|
+
acceptReview: async (review, index) => {
|
|
227
|
+
running.delete(index);
|
|
228
|
+
const attempt = inFlight.get(index);
|
|
229
|
+
if (!attempt)
|
|
230
|
+
throw new Error('recovery_missing_paid_intent');
|
|
231
|
+
const cell = plan.cells[index];
|
|
232
|
+
if (review.status === 'canceled') {
|
|
233
|
+
await input.journal.recordUncertain(cell.id, attempt, review.error ?? 'Provider canceled with an unknown outcome.', input.ownership);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
const result = review.status === 'success'
|
|
237
|
+
? { kind: 'success', chunk: cell.chunk, reviewBytes: JSON.stringify(review) }
|
|
238
|
+
: { kind: 'failure', chunk: cell.chunk, reviewBytes: JSON.stringify(review), possiblyBilled: true };
|
|
239
|
+
await input.journal.recordResult(cell.id, attempt, result, input.ownership);
|
|
240
|
+
// Observe the exact persisted snapshot, not a provider-owned object
|
|
241
|
+
// that may have changed while the durable write was pending.
|
|
242
|
+
await input.onPhysicalReviewComplete?.(JSON.parse(result.reviewBytes), index, { ...attempt });
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
auditLateReview: input.auditLateAttempt ? async (review, index) => {
|
|
246
|
+
// This closure retains this wave's map, so a later retry can never
|
|
247
|
+
// substitute its new paid intent for a delayed earlier response.
|
|
248
|
+
const attempt = inFlight.get(index);
|
|
249
|
+
if (!attempt)
|
|
250
|
+
throw new Error('recovery_missing_late_paid_intent');
|
|
251
|
+
const callbacks = [Promise.resolve().then(() => input.auditLateAttempt(structuredClone(review), index, { ...attempt }))];
|
|
252
|
+
if (input.auditLateReview)
|
|
253
|
+
callbacks.push(Promise.resolve().then(() => input.auditLateReview(structuredClone(review), index)));
|
|
254
|
+
const failures = (await Promise.allSettled(callbacks)).filter(result => result.status === 'rejected').map(result => result.reason);
|
|
255
|
+
if (failures.length === 1)
|
|
256
|
+
throw failures[0];
|
|
257
|
+
if (failures.length > 1)
|
|
258
|
+
throw new AggregateError(failures, 'late_audit_callbacks_failed');
|
|
259
|
+
} : input.auditLateReview,
|
|
260
|
+
onLateAuditError: input.onLateAuditError,
|
|
261
|
+
});
|
|
262
|
+
// Provider cancellation can win while an already-started intent fsync
|
|
263
|
+
// finishes. Drain those owned writes before reading the terminal state.
|
|
264
|
+
await Promise.all(pendingIntentWrites);
|
|
265
|
+
returned.forEach((review, index) => {
|
|
266
|
+
if (review.status === 'error' && !inFlight.has(index))
|
|
267
|
+
setupFailuresByIndex.set(index, review);
|
|
268
|
+
});
|
|
269
|
+
const after = await capture();
|
|
270
|
+
if (after.preview.nextAction !== 'retry_missing_assignments')
|
|
271
|
+
return finish(after);
|
|
272
|
+
if (controller.signal.aborted)
|
|
273
|
+
return finish(after, 'canceled');
|
|
274
|
+
if (after.own.length === before.own.length) {
|
|
275
|
+
if (JSON.stringify(after.preview.eligibleCallIndices) !== JSON.stringify(before.preview.eligibleCallIndices))
|
|
276
|
+
continue;
|
|
277
|
+
const stopped = finish(after, 'no_dispatch');
|
|
278
|
+
return { ...stopped,
|
|
279
|
+
preview: { ...stopped.preview, nextAction: 'inspect_blocked_assignments', eligibleCallIndices: [] },
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
if (controller.signal.aborted)
|
|
283
|
+
return finish(after, 'canceled');
|
|
284
|
+
try {
|
|
285
|
+
await delay(Math.min(retryDelay(waves++), Math.max(0, deadline - performance.now())), undefined, { signal: controller.signal });
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
if (!controller.signal.aborted)
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
clearTimeout(timer);
|
|
295
|
+
input.signal?.removeEventListener('abort', abort);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/dispatch/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAA8B,MAAM,iCAAiC,CAAC;AAGpI,OAAO,EAAqB,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,0BAA0B,EAAqE,MAAM,iBAAiB,CAAC;AAC7N,OAAO,EAAE,uBAAuB,EAA8C,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAC5B,MAAM,yBAAyB,CAAC;AA0DtF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAgC;IAC/E,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/G,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IACpF,OAAO,wBAAwB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;QAC3G,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9D,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAChI,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,QAAQ,CAAC,SAAS,KAAK,iBAAiB,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YACtF,SAAS,CAAC,UAAU,KAAK,YAAY,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACxG,OAAO,0BAA0B,CAAC,EAAE,GAAG,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK;YAC7G,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAChG,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,kBAAkB;YACxD,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,mBAAmB;YAC/D,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB;YACxD,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,IAAI,wBAAwB;YAC5E,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC9E,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,8BAA8B,CAAC,KAAsB;IACnE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAY,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/F,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,WAAY,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAK;YACrD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7F,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAA8B;IAC7E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM;QAChF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjG,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7D,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAClI,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;QACjE,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAChH,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnH,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,aAAa,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/C,MAAM,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjF,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,OAAO,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;QAC/F,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;;YAC9B,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE5D,SAAS,OAAO,CAAC,QAA2B,EAAE,WAAmB;YAC/D,OAAO,uBAAuB,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC9E,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,mBAAmB,EAAE,WAAW;gBAChC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;aACvD,EAAE,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC;QAC5G,CAAC;QACD,KAAK,UAAU,OAAO;YACpB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,GAAG,CAAC,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,SAAS,MAAM,CAAC,QAA6C,EAAE,SAA+C;YAC5G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI;gBAC/G,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAmB;gBACrF,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,2CAA2C;aAC9H,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM;gBAC3E,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtJ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,2BAA2B;gBAC1D,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvD,0EAA0E;gBAC1E,0EAA0E;gBAC1E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;qBACvF,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAY,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1C,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC1C,MAAM,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EACnE,mFAAmF,EAAE,SAAS,CAAC,CAAC;oBACpG,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;gBAC/B,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,2BAA2B;oBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrF,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC;qBAC9F,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;gBAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;gBAClD,MAAM,mBAAmB,GAAuB,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE;oBACtD,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC1D,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9C,uEAAuE;oBACvE,oDAAoD;oBACpD,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe;oBACrD,cAAc,EAAE,QAAQ,CAAC,EAAE;wBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACvC,IAAI,CAAC,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;wBACnE,OAAO,OAAO,CAAC;oBACjB,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE;oBACzD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM;oBACrE,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;wBAC/E,YAAY,EAAE,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAE,EAAE,OAAO,CAAC,SAAS,CAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC;wBACtH,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,EAAE,CAAE;qBACjD,CAAC,CAAC;oBACH,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACzG,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;wBAC9B,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAC,SAAS,EAAC,EAAE;4BAC1G,IAAI,MAAM,CAAC,OAAO;gCAAE,OAAO,KAAK,CAAC;4BACjC,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;4BAChC,kEAAkE;4BAClE,iEAAiE;4BACjE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,kBAAkB;gCAAE,OAAO,KAAK,CAAC;4BACjE,oEAAoE;4BACpE,wEAAwE;4BACxE,oEAAoE;4BACpE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;4BACnE,IAAI,GAAG,CAAC,UAAU,KAAK,2BAA2B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gCAC7E,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC;gCAAE,OAAO,KAAK,CAAC;4BACzD,iEAAiE;4BACjE,kEAAkE;4BAClE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAE,CAAC;4BACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACvC,IAAI,CAAC;oCACH,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc;wCACpD,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC;wCAC3C,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;gCACzE,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI;wCACnF,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;wCAC3E,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oCACnE,OAAO,KAAK,CAAC;gCACf,CAAC;4BACH,CAAC;4BACD,IAAI,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gCAAE,OAAO,KAAK,CAAC;4BAC9D,MAAM,OAAO,GAAgB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4BAChE,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;4BAC5E,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACrB,CAAC,CAAC,CAAC;wBACH,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACpC,OAAO,SAAS,CAAC;oBACnB,CAAC;oBACD,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;wBACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,CAAC,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;wBAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;wBAChC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;4BACjC,MAAM,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,4CAA4C,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;wBACvI,CAAC;6BAAM,CAAC;4BACN,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS;gCACxC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gCACtF,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;4BAC/G,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;4BAC5E,oEAAoE;4BACpE,6DAA6D;4BAC7D,MAAM,KAAK,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAgB,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;wBAC/G,CAAC;oBACH,CAAC;oBACD,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;wBAChE,mEAAmE;wBACnE,iEAAiE;wBACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,CAAC,OAAO;4BAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;wBACnE,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC1H,IAAI,KAAK,CAAC,eAAe;4BAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,eAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;wBAChI,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACnI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;4BAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;4BAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;oBAC7F,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe;oBACzB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;iBACzC,CAAC,CAAC;gBACH,sEAAsE;gBACtE,wEAAwE;gBACxE,MAAM,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBACjC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;wBAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACjG,CAAC,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,2BAA2B;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnF,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAChE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;wBAAE,SAAS;oBACvH,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;oBAC7C,OAAO,EAAE,GAAG,OAAO;wBACjB,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,EAAE,EAAE;qBACpG,CAAC;gBACJ,CAAC;gBACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAChE,IAAI,CAAC;oBAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBAAC,CAAC;gBACxI,OAAO,KAAK,EAAE,CAAC;oBAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,KAAK,CAAC;gBAAC,CAAC;YAChE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ModelReview } from '../consensus/types.js';
|
|
2
|
+
import type { ReviewAdapter } from './adapter.js';
|
|
3
|
+
import { type AsyncDelegate } from './checkpoint-async-store.js';
|
|
4
|
+
export declare const MAX_ASYNC_DELEGATE_BYTES = 16384;
|
|
5
|
+
/** Bounded transient stdin; delegation secrets never appear in argv or a credential file. */
|
|
6
|
+
export declare function readRetainedAsyncInput(stream: AsyncIterable<Uint8Array | string>): Promise<string>;
|
|
7
|
+
/** Launch the existing detached lifecycle with only a restricted same-checkpoint capability. */
|
|
8
|
+
export declare function launchRetainedAsyncWorkers(delegates: readonly AsyncDelegate[], onError: () => void, cliScript?: string): Promise<number>;
|
|
9
|
+
/** Run one delegated async call; ordinary opinions remain derivative of durable original accounting. */
|
|
10
|
+
export declare function runRetainedAsyncWorker(bytes: string, dependencies?: {
|
|
11
|
+
adapterFactory?: (provider: string) => ReviewAdapter;
|
|
12
|
+
publish?: (review: ModelReview) => Promise<void>;
|
|
13
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { readTransientInput } from '../telemetry/transient-input.js';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { CheckpointJournal } from './checkpoint.js';
|
|
5
|
+
import { decodeCapturedInputs } from './captured-inputs.js';
|
|
6
|
+
import { openCapturedAsyncDelegate, readAsyncPhase, recordAsyncLateFailure } from './checkpoint-async-store.js';
|
|
7
|
+
import { executeCheckpointAsync } from './checkpoint-async-execution.js';
|
|
8
|
+
import { parseAsyncReview } from './checkpoint-async.js';
|
|
9
|
+
import { defaultAdapterFactory } from './runner.js';
|
|
10
|
+
import { asyncTargetKey, publishAsyncReview, resolveAsyncStoreDir, workerEnv } from './async-lane.js';
|
|
11
|
+
export const MAX_ASYNC_DELEGATE_BYTES = 16_384;
|
|
12
|
+
function refuse() { throw new Error('retained_async_invalid_delegation'); }
|
|
13
|
+
function defaultCliScript() {
|
|
14
|
+
const extension = /\.[cm]?ts$/.test(fileURLToPath(import.meta.url)) ? 'ts' : 'js';
|
|
15
|
+
return fileURLToPath(new URL(`../index.${extension}`, import.meta.url));
|
|
16
|
+
}
|
|
17
|
+
/** Bounded transient stdin; delegation secrets never appear in argv or a credential file. */
|
|
18
|
+
export async function readRetainedAsyncInput(stream) {
|
|
19
|
+
return readTransientInput(stream, MAX_ASYNC_DELEGATE_BYTES);
|
|
20
|
+
}
|
|
21
|
+
/** Launch the existing detached lifecycle with only a restricted same-checkpoint capability. */
|
|
22
|
+
export async function launchRetainedAsyncWorkers(delegates, onError, cliScript = defaultCliScript()) {
|
|
23
|
+
const payloads = delegates.map(delegate => {
|
|
24
|
+
let bytes;
|
|
25
|
+
try {
|
|
26
|
+
bytes = JSON.stringify(delegate);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
refuse();
|
|
30
|
+
}
|
|
31
|
+
if (typeof bytes !== 'string' || Buffer.byteLength(bytes) > MAX_ASYNC_DELEGATE_BYTES)
|
|
32
|
+
refuse();
|
|
33
|
+
return bytes;
|
|
34
|
+
});
|
|
35
|
+
const launches = payloads.map(async (bytes) => {
|
|
36
|
+
let errorReported = false;
|
|
37
|
+
const reportErrorOnce = () => { if (!errorReported) {
|
|
38
|
+
errorReported = true;
|
|
39
|
+
onError();
|
|
40
|
+
} };
|
|
41
|
+
try {
|
|
42
|
+
const child = spawn(process.execPath, [...(/\.[cm]?ts$/.test(cliScript) ? ['--import', import.meta.resolve('tsx')] : []), cliScript, 'retained-async-worker'], {
|
|
43
|
+
detached: true, stdio: ['pipe', 'ignore', 'ignore'], env: workerEnv(),
|
|
44
|
+
});
|
|
45
|
+
const spawned = new Promise(resolve => {
|
|
46
|
+
let settled = false;
|
|
47
|
+
child.once('spawn', () => { if (!settled) {
|
|
48
|
+
settled = true;
|
|
49
|
+
resolve(true);
|
|
50
|
+
} });
|
|
51
|
+
child.on('error', () => { reportErrorOnce(); if (!settled) {
|
|
52
|
+
settled = true;
|
|
53
|
+
resolve(false);
|
|
54
|
+
} });
|
|
55
|
+
});
|
|
56
|
+
child.stdin.on('error', reportErrorOnce);
|
|
57
|
+
child.stdin.end(bytes);
|
|
58
|
+
child.unref();
|
|
59
|
+
return await spawned ? 1 : 0;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
reportErrorOnce();
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return (await Promise.all(launches)).reduce((total, value) => total + value, 0);
|
|
67
|
+
}
|
|
68
|
+
/** Run one delegated async call; ordinary opinions remain derivative of durable original accounting. */
|
|
69
|
+
export async function runRetainedAsyncWorker(bytes, dependencies = {}) {
|
|
70
|
+
if (typeof bytes !== 'string' || Buffer.byteLength(bytes) > MAX_ASYNC_DELEGATE_BYTES || Buffer.from(bytes).toString('utf8') !== bytes)
|
|
71
|
+
refuse();
|
|
72
|
+
let delegate;
|
|
73
|
+
try {
|
|
74
|
+
delegate = JSON.parse(bytes);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return refuse();
|
|
78
|
+
}
|
|
79
|
+
const original = await openCapturedAsyncDelegate(delegate);
|
|
80
|
+
const journal = await CheckpointJournal.inspectRead(delegate.checkpointPath);
|
|
81
|
+
const captured = decodeCapturedInputs((await journal.readBindings())['captured-inputs'], journal.getPlan());
|
|
82
|
+
// This immutable private phase binding was proven under original native ownership.
|
|
83
|
+
// A pending launch need not have a runId, and later rounds cannot redirect it.
|
|
84
|
+
const opinionTarget = asyncTargetKey('', delegate.target, original.opinionCycle.cycleId ?? undefined);
|
|
85
|
+
await executeCheckpointAsync({ delegate,
|
|
86
|
+
adapterFactory: call => (dependencies.adapterFactory ?? (provider => defaultAdapterFactory(provider, captured.config.reasoningEffort)))(call.provider),
|
|
87
|
+
onLateAuditError: (_error, attemptId) => recordAsyncLateFailure(delegate, attemptId),
|
|
88
|
+
});
|
|
89
|
+
const state = (await readAsyncPhase({ commonDir: delegate.commonDir, namespace: delegate.namespace,
|
|
90
|
+
plan: journal.getPlan() })).state;
|
|
91
|
+
const latestIntent = state.intents.filter(intent => intent.callIndex === delegate.callIndex).at(-1);
|
|
92
|
+
const durable = latestIntent && state.outcomes.find(outcome => outcome.attemptId === latestIntent.attemptId);
|
|
93
|
+
if (durable) {
|
|
94
|
+
const review = structuredClone(parseAsyncReview(durable.reviewBytes, original.call.ref));
|
|
95
|
+
const publish = dependencies.publish ?? (async (review) => publishAsyncReview(await resolveAsyncStoreDir(delegate.commonDir), opinionTarget, review));
|
|
96
|
+
await publish(review);
|
|
97
|
+
}
|
|
98
|
+
// The hidden command exits here even if an adapter ignored abort. Unknown
|
|
99
|
+
// intents remain possibly billed; no provider retry or fabricated opinion.
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=retained-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retained-async.js","sourceRoot":"","sources":["../../src/dispatch/retained-async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The existing consensus key is eligible only when it identifies one exact tuple. */
|
|
2
|
+
export interface ReviewerIdentity {
|
|
3
|
+
readonly model: string;
|
|
4
|
+
readonly role: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class AmbiguousReviewerIdentityError extends Error {
|
|
7
|
+
constructor(first: ReviewerIdentity, second: ReviewerIdentity);
|
|
8
|
+
}
|
|
9
|
+
/** Preserve duplicate assignment instances and legacy merge semantics for eligible inputs. */
|
|
10
|
+
export declare function assertUnambiguousReviewerIdentities(reviewers: readonly ReviewerIdentity[]): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class AmbiguousReviewerIdentityError extends Error {
|
|
2
|
+
constructor(first, second) {
|
|
3
|
+
super(`ambiguous_reviewer_identity: ${JSON.stringify([first.model, first.role])} and ${JSON.stringify([second.model, second.role])} share a consensus key. Use unambiguous reviewer model and role combinations.`);
|
|
4
|
+
this.name = 'AmbiguousReviewerIdentityError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
/** Preserve duplicate assignment instances and legacy merge semantics for eligible inputs. */
|
|
8
|
+
export function assertUnambiguousReviewerIdentities(reviewers) {
|
|
9
|
+
const byKey = new Map();
|
|
10
|
+
for (const reviewer of reviewers) {
|
|
11
|
+
const key = `${reviewer.model}::${reviewer.role}`;
|
|
12
|
+
const previous = byKey.get(key);
|
|
13
|
+
if (previous && (previous.model !== reviewer.model || previous.role !== reviewer.role)) {
|
|
14
|
+
throw new AmbiguousReviewerIdentityError(previous, reviewer);
|
|
15
|
+
}
|
|
16
|
+
byKey.set(key, reviewer);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=reviewer-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer-identity.js","sourceRoot":"","sources":["../../src/dispatch/reviewer-identity.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,YAAY,KAAuB,EAAE,MAAwB;QAC3D,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,+EAA+E,CAAC,CAAC;QACnN,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,8FAA8F;AAC9F,MAAM,UAAU,mCAAmC,CAAC,SAAsC;IACxF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|