@quickchatai/pi-quickreview 0.0.0-stage → 1.2.0
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 +23 -0
- package/README.md +75 -2
- package/assets/agents/pass-abstraction.md +64 -0
- package/assets/agents/pass-ask-human.md +134 -0
- package/assets/agents/pass-backcompat.md +67 -0
- package/assets/agents/pass-baseline.md +61 -0
- package/assets/agents/pass-behaviour-delta.md +64 -0
- package/assets/agents/pass-bounds.md +36 -0
- package/assets/agents/pass-claims.md +31 -0
- package/assets/agents/pass-concurrency.md +168 -0
- package/assets/agents/pass-consistency.md +57 -0
- package/assets/agents/pass-contracts.md +30 -0
- package/assets/agents/pass-data-safety.md +54 -0
- package/assets/agents/pass-deferred.md +35 -0
- package/assets/agents/pass-delivery.md +37 -0
- package/assets/agents/pass-duplication.md +60 -0
- package/assets/agents/pass-intent.md +63 -0
- package/assets/agents/pass-lint-conformance.md +46 -0
- package/assets/agents/pass-maintainability.md +67 -0
- package/assets/agents/pass-placement.md +68 -0
- package/assets/agents/pass-prod-risk.md +24 -0
- package/assets/agents/pass-rollout.md +32 -0
- package/assets/agents/pass-roundtrip.md +46 -0
- package/assets/agents/pass-security.md +31 -0
- package/assets/agents/pass-simplicity.md +68 -0
- package/assets/agents/pass-statelessness.md +27 -0
- package/assets/agents/pass-style.md +37 -0
- package/assets/agents/pass-sweep.md +57 -0
- package/assets/agents/pass-tests.md +58 -0
- package/assets/agents/pass-ui.md +23 -0
- package/assets/agents/pass-validate.md +50 -0
- package/assets/agents/pass-widened.md +46 -0
- package/assets/agents/scan/pass-scan.md +86 -0
- package/assets/config.example.toml +1099 -0
- package/assets/deploy/reviewer/AGENTS.override.md +12 -0
- package/assets/profiles/default/README.md +21 -0
- package/assets/profiles/default/addenda/.gitkeep +0 -0
- package/assets/profiles/default/profile.toml +17 -0
- package/assets/profiles/example-django/README.md +21 -0
- package/assets/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/assets/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/assets/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/assets/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/assets/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/assets/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/assets/profiles/example-django/heuristics.toml +24 -0
- package/assets/profiles/example-django/profile.toml +9 -0
- package/assets/profiles/fast/README.md +24 -0
- package/assets/profiles/fast/profile.toml +59 -0
- package/assets/profiles/minimal/README.md +17 -0
- package/assets/profiles/minimal/addenda/.gitkeep +0 -0
- package/assets/profiles/minimal/profile.toml +8 -0
- package/assets/profiles/snappy/README.md +24 -0
- package/assets/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/assets/profiles/snappy/profile.toml +46 -0
- package/assets/prompts/companion-day-open.md +46 -0
- package/assets/prompts/companion-first-run.md +104 -0
- package/assets/prompts/companion.md +821 -0
- package/assets/prompts/conversation-system.md +117 -0
- package/assets/prompts/eod-sweep.md +120 -0
- package/assets/prompts/onboarding.md +113 -0
- package/assets/prompts/pass-common.md +52 -0
- package/assets/prompts/pass-quality-common.md +22 -0
- package/assets/prompts/round-first.md +874 -0
- package/assets/prompts/round-follow-up.md +991 -0
- package/assets/prompts/round-re-review.md +889 -0
- package/assets/prompts/round-recheck.md +196 -0
- package/assets/prompts/round-staleness.md +856 -0
- package/assets/schemas/review-result.v1.json +391 -0
- package/assets/schemas/scan-result.v1.json +421 -0
- package/assets/schemas/version.v1.json +57 -0
- package/assets/seed-manifest.json +19 -0
- package/assets/seeds/agents/pass-baseline.md +61 -0
- package/assets/seeds/agents/pass-contracts.md +30 -0
- package/assets/seeds/agents/pass-data-safety.md +54 -0
- package/assets/seeds/agents/pass-delivery.md +37 -0
- package/assets/seeds/agents/pass-prod-risk.md +24 -0
- package/assets/seeds/agents/pass-security.md +31 -0
- package/assets/seeds/agents/pass-statelessness.md +27 -0
- package/assets/seeds/agents/pass-ui.md +23 -0
- package/assets/seeds/agents/pass-validate.md +50 -0
- package/assets/seeds/prompts/conversation-system.md +117 -0
- package/assets/seeds/prompts/eod-sweep.md +120 -0
- package/assets/seeds/prompts/pass-common.md +52 -0
- package/dist/extensions/bash-guard.d.ts +467 -0
- package/dist/extensions/bash-guard.d.ts.map +1 -0
- package/dist/extensions/bash-guard.js +3058 -0
- package/dist/extensions/bash-guard.js.map +1 -0
- package/dist/extensions/finding-clusters.d.ts +33 -0
- package/dist/extensions/finding-clusters.d.ts.map +1 -0
- package/dist/extensions/finding-clusters.js +218 -0
- package/dist/extensions/finding-clusters.js.map +1 -0
- package/dist/extensions/ledger-pin.d.ts +76 -0
- package/dist/extensions/ledger-pin.d.ts.map +1 -0
- package/dist/extensions/ledger-pin.js +331 -0
- package/dist/extensions/ledger-pin.js.map +1 -0
- package/dist/extensions/lens.d.ts +43 -0
- package/dist/extensions/lens.d.ts.map +1 -0
- package/dist/extensions/lens.js +150 -0
- package/dist/extensions/lens.js.map +1 -0
- package/dist/extensions/pi-tool.d.ts +22 -0
- package/dist/extensions/pi-tool.d.ts.map +1 -0
- package/dist/extensions/pi-tool.js +20 -0
- package/dist/extensions/pi-tool.js.map +1 -0
- package/dist/extensions/quickreview.d.ts +21 -0
- package/dist/extensions/quickreview.d.ts.map +1 -0
- package/dist/extensions/quickreview.js +132 -0
- package/dist/extensions/quickreview.js.map +1 -0
- package/dist/src/anchors.d.ts +54 -0
- package/dist/src/anchors.d.ts.map +1 -0
- package/dist/src/anchors.js +127 -0
- package/dist/src/anchors.js.map +1 -0
- package/dist/src/assetroot.d.ts +16 -0
- package/dist/src/assetroot.d.ts.map +1 -0
- package/dist/src/assetroot.js +77 -0
- package/dist/src/assetroot.js.map +1 -0
- package/dist/src/authwatch.d.ts +61 -0
- package/dist/src/authwatch.d.ts.map +1 -0
- package/dist/src/authwatch.js +210 -0
- package/dist/src/authwatch.js.map +1 -0
- package/dist/src/budget.d.ts +15 -0
- package/dist/src/budget.d.ts.map +1 -0
- package/dist/src/budget.js +32 -0
- package/dist/src/budget.js.map +1 -0
- package/dist/src/casebudget.d.ts +3 -0
- package/dist/src/casebudget.d.ts.map +1 -0
- package/dist/src/casebudget.js +3 -0
- package/dist/src/casebudget.js.map +1 -0
- package/dist/src/cigate.d.ts +116 -0
- package/dist/src/cigate.d.ts.map +1 -0
- package/dist/src/cigate.js +176 -0
- package/dist/src/cigate.js.map +1 -0
- package/dist/src/codespan.d.ts +46 -0
- package/dist/src/codespan.d.ts.map +1 -0
- package/dist/src/codespan.js +75 -0
- package/dist/src/codespan.js.map +1 -0
- package/dist/src/contextpack.d.ts +56 -0
- package/dist/src/contextpack.d.ts.map +1 -0
- package/dist/src/contextpack.js +195 -0
- package/dist/src/contextpack.js.map +1 -0
- package/dist/src/contract.d.ts +8 -0
- package/dist/src/contract.d.ts.map +1 -0
- package/dist/src/contract.js +21 -0
- package/dist/src/contract.js.map +1 -0
- package/dist/src/coverage.d.ts +32 -0
- package/dist/src/coverage.d.ts.map +1 -0
- package/dist/src/coverage.js +85 -0
- package/dist/src/coverage.js.map +1 -0
- package/dist/src/datafence.d.ts +19 -0
- package/dist/src/datafence.d.ts.map +1 -0
- package/dist/src/datafence.js +60 -0
- package/dist/src/datafence.js.map +1 -0
- package/dist/src/dedup.d.ts +65 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/dedup.js +459 -0
- package/dist/src/dedup.js.map +1 -0
- package/dist/src/depsources.d.ts +304 -0
- package/dist/src/depsources.d.ts.map +1 -0
- package/dist/src/depsources.js +3367 -0
- package/dist/src/depsources.js.map +1 -0
- package/dist/src/diffinput.d.ts +10 -0
- package/dist/src/diffinput.d.ts.map +1 -0
- package/dist/src/diffinput.js +172 -0
- package/dist/src/diffinput.js.map +1 -0
- package/dist/src/doubtwords.d.ts +10 -0
- package/dist/src/doubtwords.d.ts.map +1 -0
- package/dist/src/doubtwords.js +13 -0
- package/dist/src/doubtwords.js.map +1 -0
- package/dist/src/ecosystem.d.ts +148 -0
- package/dist/src/ecosystem.d.ts.map +1 -0
- package/dist/src/ecosystem.js +338 -0
- package/dist/src/ecosystem.js.map +1 -0
- package/dist/src/engine/agentdir.d.ts +5 -0
- package/dist/src/engine/agentdir.d.ts.map +1 -0
- package/dist/src/engine/agentdir.js +21 -0
- package/dist/src/engine/agentdir.js.map +1 -0
- package/dist/src/engine/auth.d.ts +214 -0
- package/dist/src/engine/auth.d.ts.map +1 -0
- package/dist/src/engine/auth.js +374 -0
- package/dist/src/engine/auth.js.map +1 -0
- package/dist/src/engine/budget.d.ts +60 -0
- package/dist/src/engine/budget.d.ts.map +1 -0
- package/dist/src/engine/budget.js +113 -0
- package/dist/src/engine/budget.js.map +1 -0
- package/dist/src/engine/capfd.d.ts +6 -0
- package/dist/src/engine/capfd.d.ts.map +1 -0
- package/dist/src/engine/capfd.js +21 -0
- package/dist/src/engine/capfd.js.map +1 -0
- package/dist/src/engine/caseout.d.ts +66 -0
- package/dist/src/engine/caseout.d.ts.map +1 -0
- package/dist/src/engine/caseout.js +107 -0
- package/dist/src/engine/caseout.js.map +1 -0
- package/dist/src/engine/context.d.ts +57 -0
- package/dist/src/engine/context.d.ts.map +1 -0
- package/dist/src/engine/context.js +212 -0
- package/dist/src/engine/context.js.map +1 -0
- package/dist/src/engine/envmap.d.ts +13 -0
- package/dist/src/engine/envmap.d.ts.map +1 -0
- package/dist/src/engine/envmap.js +377 -0
- package/dist/src/engine/envmap.js.map +1 -0
- package/dist/src/engine/extfiles.d.ts +7 -0
- package/dist/src/engine/extfiles.d.ts.map +1 -0
- package/dist/src/engine/extfiles.js +23 -0
- package/dist/src/engine/extfiles.js.map +1 -0
- package/dist/src/engine/keyroute.d.ts +21 -0
- package/dist/src/engine/keyroute.d.ts.map +1 -0
- package/dist/src/engine/keyroute.js +58 -0
- package/dist/src/engine/keyroute.js.map +1 -0
- package/dist/src/engine/lens/cache-group.d.ts +20 -0
- package/dist/src/engine/lens/cache-group.d.ts.map +1 -0
- package/dist/src/engine/lens/cache-group.js +31 -0
- package/dist/src/engine/lens/cache-group.js.map +1 -0
- package/dist/src/engine/lens/cache-run.d.ts +65 -0
- package/dist/src/engine/lens/cache-run.d.ts.map +1 -0
- package/dist/src/engine/lens/cache-run.js +159 -0
- package/dist/src/engine/lens/cache-run.js.map +1 -0
- package/dist/src/engine/lens/deadline.d.ts +54 -0
- package/dist/src/engine/lens/deadline.d.ts.map +1 -0
- package/dist/src/engine/lens/deadline.js +111 -0
- package/dist/src/engine/lens/deadline.js.map +1 -0
- package/dist/src/engine/lens/engine-tools.d.ts +13 -0
- package/dist/src/engine/lens/engine-tools.d.ts.map +1 -0
- package/dist/src/engine/lens/engine-tools.js +37 -0
- package/dist/src/engine/lens/engine-tools.js.map +1 -0
- package/dist/src/engine/lens/env.d.ts +23 -0
- package/dist/src/engine/lens/env.d.ts.map +1 -0
- package/dist/src/engine/lens/env.js +42 -0
- package/dist/src/engine/lens/env.js.map +1 -0
- package/dist/src/engine/lens/launch-plan.d.ts +63 -0
- package/dist/src/engine/lens/launch-plan.d.ts.map +1 -0
- package/dist/src/engine/lens/launch-plan.js +203 -0
- package/dist/src/engine/lens/launch-plan.js.map +1 -0
- package/dist/src/engine/lens/leaf-cache.d.ts +22 -0
- package/dist/src/engine/lens/leaf-cache.d.ts.map +1 -0
- package/dist/src/engine/lens/leaf-cache.js +115 -0
- package/dist/src/engine/lens/leaf-cache.js.map +1 -0
- package/dist/src/engine/lens/permits.d.ts +14 -0
- package/dist/src/engine/lens/permits.d.ts.map +1 -0
- package/dist/src/engine/lens/permits.js +18 -0
- package/dist/src/engine/lens/permits.js.map +1 -0
- package/dist/src/engine/lens/registry.d.ts +55 -0
- package/dist/src/engine/lens/registry.d.ts.map +1 -0
- package/dist/src/engine/lens/registry.js +140 -0
- package/dist/src/engine/lens/registry.js.map +1 -0
- package/dist/src/engine/lens/round-lens.d.ts +16 -0
- package/dist/src/engine/lens/round-lens.d.ts.map +1 -0
- package/dist/src/engine/lens/round-lens.js +46 -0
- package/dist/src/engine/lens/round-lens.js.map +1 -0
- package/dist/src/engine/lens/runlens.d.ts +103 -0
- package/dist/src/engine/lens/runlens.d.ts.map +1 -0
- package/dist/src/engine/lens/runlens.js +538 -0
- package/dist/src/engine/lens/runlens.js.map +1 -0
- package/dist/src/engine/lens/section.d.ts +19 -0
- package/dist/src/engine/lens/section.d.ts.map +1 -0
- package/dist/src/engine/lens/section.js +40 -0
- package/dist/src/engine/lens/section.js.map +1 -0
- package/dist/src/engine/lens/semaphore.d.ts +13 -0
- package/dist/src/engine/lens/semaphore.d.ts.map +1 -0
- package/dist/src/engine/lens/semaphore.js +44 -0
- package/dist/src/engine/lens/semaphore.js.map +1 -0
- package/dist/src/engine/lens/tool.d.ts +34 -0
- package/dist/src/engine/lens/tool.d.ts.map +1 -0
- package/dist/src/engine/lens/tool.js +345 -0
- package/dist/src/engine/lens/tool.js.map +1 -0
- package/dist/src/engine/lens/wave.d.ts +63 -0
- package/dist/src/engine/lens/wave.d.ts.map +1 -0
- package/dist/src/engine/lens/wave.js +95 -0
- package/dist/src/engine/lens/wave.js.map +1 -0
- package/dist/src/engine/livesessions.d.ts +21 -0
- package/dist/src/engine/livesessions.d.ts.map +1 -0
- package/dist/src/engine/livesessions.js +57 -0
- package/dist/src/engine/livesessions.js.map +1 -0
- package/dist/src/engine/livewire.d.ts +18 -0
- package/dist/src/engine/livewire.d.ts.map +1 -0
- package/dist/src/engine/livewire.js +31 -0
- package/dist/src/engine/livewire.js.map +1 -0
- package/dist/src/engine/openable.d.ts +37 -0
- package/dist/src/engine/openable.d.ts.map +1 -0
- package/dist/src/engine/openable.js +120 -0
- package/dist/src/engine/openable.js.map +1 -0
- package/dist/src/engine/pisdk.d.ts +235 -0
- package/dist/src/engine/pisdk.d.ts.map +1 -0
- package/dist/src/engine/pisdk.js +577 -0
- package/dist/src/engine/pisdk.js.map +1 -0
- package/dist/src/engine/port.d.ts +144 -0
- package/dist/src/engine/port.d.ts.map +1 -0
- package/dist/src/engine/port.js +16 -0
- package/dist/src/engine/port.js.map +1 -0
- package/dist/src/engine/prompts.d.ts +159 -0
- package/dist/src/engine/prompts.d.ts.map +1 -0
- package/dist/src/engine/prompts.js +339 -0
- package/dist/src/engine/prompts.js.map +1 -0
- package/dist/src/engine/render.d.ts +10 -0
- package/dist/src/engine/render.d.ts.map +1 -0
- package/dist/src/engine/render.js +23 -0
- package/dist/src/engine/render.js.map +1 -0
- package/dist/src/engine/reviewruntime.d.ts +13 -0
- package/dist/src/engine/reviewruntime.d.ts.map +1 -0
- package/dist/src/engine/reviewruntime.js +35 -0
- package/dist/src/engine/reviewruntime.js.map +1 -0
- package/dist/src/engine/reviewsdk.d.ts +75 -0
- package/dist/src/engine/reviewsdk.d.ts.map +1 -0
- package/dist/src/engine/reviewsdk.js +180 -0
- package/dist/src/engine/reviewsdk.js.map +1 -0
- package/dist/src/engine/round.d.ts +166 -0
- package/dist/src/engine/round.d.ts.map +1 -0
- package/dist/src/engine/round.js +543 -0
- package/dist/src/engine/round.js.map +1 -0
- package/dist/src/engine/roundagents.d.ts +17 -0
- package/dist/src/engine/roundagents.d.ts.map +1 -0
- package/dist/src/engine/roundagents.js +49 -0
- package/dist/src/engine/roundagents.js.map +1 -0
- package/dist/src/engine/roundevents.d.ts +110 -0
- package/dist/src/engine/roundevents.d.ts.map +1 -0
- package/dist/src/engine/roundevents.js +276 -0
- package/dist/src/engine/roundevents.js.map +1 -0
- package/dist/src/engine/roundsdk.d.ts +33 -0
- package/dist/src/engine/roundsdk.d.ts.map +1 -0
- package/dist/src/engine/roundsdk.js +76 -0
- package/dist/src/engine/roundsdk.js.map +1 -0
- package/dist/src/engine/sdkruntime.d.ts +23 -0
- package/dist/src/engine/sdkruntime.d.ts.map +1 -0
- package/dist/src/engine/sdkruntime.js +340 -0
- package/dist/src/engine/sdkruntime.js.map +1 -0
- package/dist/src/engine/select.d.ts +16 -0
- package/dist/src/engine/select.d.ts.map +1 -0
- package/dist/src/engine/select.js +32 -0
- package/dist/src/engine/select.js.map +1 -0
- package/dist/src/engine/sessionwrap.d.ts +4 -0
- package/dist/src/engine/sessionwrap.d.ts.map +1 -0
- package/dist/src/engine/sessionwrap.js +31 -0
- package/dist/src/engine/sessionwrap.js.map +1 -0
- package/dist/src/engine/toolfence.d.ts +90 -0
- package/dist/src/engine/toolfence.d.ts.map +1 -0
- package/dist/src/engine/toolfence.js +378 -0
- package/dist/src/engine/toolfence.js.map +1 -0
- package/dist/src/engine/tooluid.d.ts +128 -0
- package/dist/src/engine/tooluid.d.ts.map +1 -0
- package/dist/src/engine/tooluid.js +401 -0
- package/dist/src/engine/tooluid.js.map +1 -0
- package/dist/src/envstrip.d.ts +10 -0
- package/dist/src/envstrip.d.ts.map +1 -0
- package/dist/src/envstrip.js +15 -0
- package/dist/src/envstrip.js.map +1 -0
- package/dist/src/escalationprompt.d.ts +22 -0
- package/dist/src/escalationprompt.d.ts.map +1 -0
- package/dist/src/escalationprompt.js +54 -0
- package/dist/src/escalationprompt.js.map +1 -0
- package/dist/src/execfn.d.ts +29 -0
- package/dist/src/execfn.d.ts.map +1 -0
- package/dist/src/execfn.js +55 -0
- package/dist/src/execfn.js.map +1 -0
- package/dist/src/finding-chain.d.ts +40 -0
- package/dist/src/finding-chain.d.ts.map +1 -0
- package/dist/src/finding-chain.js +76 -0
- package/dist/src/finding-chain.js.map +1 -0
- package/dist/src/finding-row.d.ts +24 -0
- package/dist/src/finding-row.d.ts.map +1 -0
- package/dist/src/finding-row.js +26 -0
- package/dist/src/finding-row.js.map +1 -0
- package/dist/src/findingkey.d.ts +99 -0
- package/dist/src/findingkey.d.ts.map +1 -0
- package/dist/src/findingkey.js +210 -0
- package/dist/src/findingkey.js.map +1 -0
- package/dist/src/findingsrecord.d.ts +175 -0
- package/dist/src/findingsrecord.d.ts.map +1 -0
- package/dist/src/findingsrecord.js +410 -0
- package/dist/src/findingsrecord.js.map +1 -0
- package/dist/src/followup-mode.d.ts +4 -0
- package/dist/src/followup-mode.d.ts.map +1 -0
- package/dist/src/followup-mode.js +6 -0
- package/dist/src/followup-mode.js.map +1 -0
- package/dist/src/gate.d.ts +199 -0
- package/dist/src/gate.d.ts.map +1 -0
- package/dist/src/gate.js +315 -0
- package/dist/src/gate.js.map +1 -0
- package/dist/src/ghcred.d.ts +58 -0
- package/dist/src/ghcred.d.ts.map +1 -0
- package/dist/src/ghcred.js +139 -0
- package/dist/src/ghcred.js.map +1 -0
- package/dist/src/githubAuth.d.ts +70 -0
- package/dist/src/githubAuth.d.ts.map +1 -0
- package/dist/src/githubAuth.js +183 -0
- package/dist/src/githubAuth.js.map +1 -0
- package/dist/src/githubcore.d.ts +20 -0
- package/dist/src/githubcore.d.ts.map +1 -0
- package/dist/src/githubcore.js +20 -0
- package/dist/src/githubcore.js.map +1 -0
- package/dist/src/glob.d.ts +11 -0
- package/dist/src/glob.d.ts.map +1 -0
- package/dist/src/glob.js +69 -0
- package/dist/src/glob.js.map +1 -0
- package/dist/src/guards.d.ts +106 -0
- package/dist/src/guards.d.ts.map +1 -0
- package/dist/src/guards.js +365 -0
- package/dist/src/guards.js.map +1 -0
- package/dist/src/heartbeat.d.ts +29 -0
- package/dist/src/heartbeat.d.ts.map +1 -0
- package/dist/src/heartbeat.js +87 -0
- package/dist/src/heartbeat.js.map +1 -0
- package/dist/src/heuristics.d.ts +247 -0
- package/dist/src/heuristics.d.ts.map +1 -0
- package/dist/src/heuristics.js +927 -0
- package/dist/src/heuristics.js.map +1 -0
- package/dist/src/homes.d.ts +181 -0
- package/dist/src/homes.d.ts.map +1 -0
- package/dist/src/homes.js +242 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hunkheader.d.ts +11 -0
- package/dist/src/hunkheader.d.ts.map +1 -0
- package/dist/src/hunkheader.js +18 -0
- package/dist/src/hunkheader.js.map +1 -0
- package/dist/src/identity.d.ts +34 -0
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/src/identity.js +67 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/include.d.ts +435 -0
- package/dist/src/include.d.ts.map +1 -0
- package/dist/src/include.js +1692 -0
- package/dist/src/include.js.map +1 -0
- package/dist/src/launchvocab.d.ts +36 -0
- package/dist/src/launchvocab.d.ts.map +1 -0
- package/dist/src/launchvocab.js +59 -0
- package/dist/src/launchvocab.js.map +1 -0
- package/dist/src/ledgercarry.d.ts +24 -0
- package/dist/src/ledgercarry.d.ts.map +1 -0
- package/dist/src/ledgercarry.js +109 -0
- package/dist/src/ledgercarry.js.map +1 -0
- package/dist/src/lensids.d.ts +7 -0
- package/dist/src/lensids.d.ts.map +1 -0
- package/dist/src/lensids.js +53 -0
- package/dist/src/lensids.js.map +1 -0
- package/dist/src/lensplanning.d.ts +8 -0
- package/dist/src/lensplanning.d.ts.map +1 -0
- package/dist/src/lensplanning.js +126 -0
- package/dist/src/lensplanning.js.map +1 -0
- package/dist/src/lensresult.d.ts +94 -0
- package/dist/src/lensresult.d.ts.map +1 -0
- package/dist/src/lensresult.js +162 -0
- package/dist/src/lensresult.js.map +1 -0
- package/dist/src/lenstuning.d.ts +97 -0
- package/dist/src/lenstuning.d.ts.map +1 -0
- package/dist/src/lenstuning.js +326 -0
- package/dist/src/lenstuning.js.map +1 -0
- package/dist/src/lintconfig.d.ts +31 -0
- package/dist/src/lintconfig.d.ts.map +1 -0
- package/dist/src/lintconfig.js +543 -0
- package/dist/src/lintconfig.js.map +1 -0
- package/dist/src/live/events.d.ts +188 -0
- package/dist/src/live/events.d.ts.map +1 -0
- package/dist/src/live/events.js +136 -0
- package/dist/src/live/events.js.map +1 -0
- package/dist/src/live/writer.d.ts +54 -0
- package/dist/src/live/writer.d.ts.map +1 -0
- package/dist/src/live/writer.js +516 -0
- package/dist/src/live/writer.js.map +1 -0
- package/dist/src/localreview.d.ts +128 -0
- package/dist/src/localreview.d.ts.map +1 -0
- package/dist/src/localreview.js +426 -0
- package/dist/src/localreview.js.map +1 -0
- package/dist/src/loosenedtests.d.ts +13 -0
- package/dist/src/loosenedtests.d.ts.map +1 -0
- package/dist/src/loosenedtests.js +188 -0
- package/dist/src/loosenedtests.js.map +1 -0
- package/dist/src/memoryport.d.ts +264 -0
- package/dist/src/memoryport.d.ts.map +1 -0
- package/dist/src/memoryport.js +445 -0
- package/dist/src/memoryport.js.map +1 -0
- package/dist/src/migrations.d.ts +106 -0
- package/dist/src/migrations.d.ts.map +1 -0
- package/dist/src/migrations.js +373 -0
- package/dist/src/migrations.js.map +1 -0
- package/dist/src/modelroute.d.ts +38 -0
- package/dist/src/modelroute.d.ts.map +1 -0
- package/dist/src/modelroute.js +105 -0
- package/dist/src/modelroute.js.map +1 -0
- package/dist/src/oneshot.d.ts +12 -0
- package/dist/src/oneshot.d.ts.map +1 -0
- package/dist/src/oneshot.js +8 -0
- package/dist/src/oneshot.js.map +1 -0
- package/dist/src/packing.d.ts +11 -0
- package/dist/src/packing.d.ts.map +1 -0
- package/dist/src/packing.js +31 -0
- package/dist/src/packing.js.map +1 -0
- package/dist/src/passes.d.ts +16 -0
- package/dist/src/passes.d.ts.map +1 -0
- package/dist/src/passes.js +104 -0
- package/dist/src/passes.js.map +1 -0
- package/dist/src/passtasks.d.ts +68 -0
- package/dist/src/passtasks.d.ts.map +1 -0
- package/dist/src/passtasks.js +360 -0
- package/dist/src/passtasks.js.map +1 -0
- package/dist/src/pathinside.d.ts +5 -0
- package/dist/src/pathinside.d.ts.map +1 -0
- package/dist/src/pathinside.js +9 -0
- package/dist/src/pathinside.js.map +1 -0
- package/dist/src/pibuiltins.d.ts +36 -0
- package/dist/src/pibuiltins.d.ts.map +1 -0
- package/dist/src/pibuiltins.js +83 -0
- package/dist/src/pibuiltins.js.map +1 -0
- package/dist/src/plankey.d.ts +4 -0
- package/dist/src/plankey.d.ts.map +1 -0
- package/dist/src/plankey.js +10 -0
- package/dist/src/plankey.js.map +1 -0
- package/dist/src/planner.d.ts +375 -0
- package/dist/src/planner.d.ts.map +1 -0
- package/dist/src/planner.js +722 -0
- package/dist/src/planner.js.map +1 -0
- package/dist/src/plugin/args.d.ts +19 -0
- package/dist/src/plugin/args.d.ts.map +1 -0
- package/dist/src/plugin/args.js +107 -0
- package/dist/src/plugin/args.js.map +1 -0
- package/dist/src/plugin/index.d.ts +3 -0
- package/dist/src/plugin/index.d.ts.map +1 -0
- package/dist/src/plugin/index.js +14 -0
- package/dist/src/plugin/index.js.map +1 -0
- package/dist/src/plugin/login.d.ts +42 -0
- package/dist/src/plugin/login.d.ts.map +1 -0
- package/dist/src/plugin/login.js +82 -0
- package/dist/src/plugin/login.js.map +1 -0
- package/dist/src/plugin/review.d.ts +27 -0
- package/dist/src/plugin/review.d.ts.map +1 -0
- package/dist/src/plugin/review.js +302 -0
- package/dist/src/plugin/review.js.map +1 -0
- package/dist/src/plugin/runner.d.ts +6 -0
- package/dist/src/plugin/runner.d.ts.map +1 -0
- package/dist/src/plugin/runner.js +65 -0
- package/dist/src/plugin/runner.js.map +1 -0
- package/dist/src/plugin/scan.d.ts +79 -0
- package/dist/src/plugin/scan.d.ts.map +1 -0
- package/dist/src/plugin/scan.js +348 -0
- package/dist/src/plugin/scan.js.map +1 -0
- package/dist/src/plugin/session.d.ts +56 -0
- package/dist/src/plugin/session.d.ts.map +1 -0
- package/dist/src/plugin/session.js +2 -0
- package/dist/src/plugin/session.js.map +1 -0
- package/dist/src/plugin/setup.d.ts +19 -0
- package/dist/src/plugin/setup.d.ts.map +1 -0
- package/dist/src/plugin/setup.js +142 -0
- package/dist/src/plugin/setup.js.map +1 -0
- package/dist/src/plugin/versiongate.d.ts +26 -0
- package/dist/src/plugin/versiongate.d.ts.map +1 -0
- package/dist/src/plugin/versiongate.js +83 -0
- package/dist/src/plugin/versiongate.js.map +1 -0
- package/dist/src/postingkey.d.ts +8 -0
- package/dist/src/postingkey.d.ts.map +1 -0
- package/dist/src/postingkey.js +25 -0
- package/dist/src/postingkey.js.map +1 -0
- package/dist/src/postingpolicy.d.ts +108 -0
- package/dist/src/postingpolicy.d.ts.map +1 -0
- package/dist/src/postingpolicy.js +341 -0
- package/dist/src/postingpolicy.js.map +1 -0
- package/dist/src/pr-identity.d.ts +3 -0
- package/dist/src/pr-identity.d.ts.map +1 -0
- package/dist/src/pr-identity.js +9 -0
- package/dist/src/pr-identity.js.map +1 -0
- package/dist/src/prdelta.d.ts +181 -0
- package/dist/src/prdelta.d.ts.map +1 -0
- package/dist/src/prdelta.js +501 -0
- package/dist/src/prdelta.js.map +1 -0
- package/dist/src/pricing.d.ts +94 -0
- package/dist/src/pricing.d.ts.map +1 -0
- package/dist/src/pricing.js +209 -0
- package/dist/src/pricing.js.map +1 -0
- package/dist/src/priorfindings.d.ts +167 -0
- package/dist/src/priorfindings.d.ts.map +1 -0
- package/dist/src/priorfindings.js +445 -0
- package/dist/src/priorfindings.js.map +1 -0
- package/dist/src/priortasks.d.ts +31 -0
- package/dist/src/priortasks.d.ts.map +1 -0
- package/dist/src/priortasks.js +119 -0
- package/dist/src/priortasks.js.map +1 -0
- package/dist/src/profilelookup.d.ts +59 -0
- package/dist/src/profilelookup.d.ts.map +1 -0
- package/dist/src/profilelookup.js +98 -0
- package/dist/src/profilelookup.js.map +1 -0
- package/dist/src/profileoverrides.d.ts +91 -0
- package/dist/src/profileoverrides.d.ts.map +1 -0
- package/dist/src/profileoverrides.js +313 -0
- package/dist/src/profileoverrides.js.map +1 -0
- package/dist/src/profiles.d.ts +144 -0
- package/dist/src/profiles.d.ts.map +1 -0
- package/dist/src/profiles.js +604 -0
- package/dist/src/profiles.js.map +1 -0
- package/dist/src/promptdoc.d.ts +3 -0
- package/dist/src/promptdoc.d.ts.map +1 -0
- package/dist/src/promptdoc.js +18 -0
- package/dist/src/promptdoc.js.map +1 -0
- package/dist/src/prtarget.d.ts +70 -0
- package/dist/src/prtarget.d.ts.map +1 -0
- package/dist/src/prtarget.js +181 -0
- package/dist/src/prtarget.js.map +1 -0
- package/dist/src/recheckorder.d.ts +32 -0
- package/dist/src/recheckorder.d.ts.map +1 -0
- package/dist/src/recheckorder.js +5 -0
- package/dist/src/recheckorder.js.map +1 -0
- package/dist/src/reviewapi.d.ts +207 -0
- package/dist/src/reviewapi.d.ts.map +1 -0
- package/dist/src/reviewapi.js +939 -0
- package/dist/src/reviewapi.js.map +1 -0
- package/dist/src/reviewbotfindings.d.ts +33 -0
- package/dist/src/reviewbotfindings.d.ts.map +1 -0
- package/dist/src/reviewbotfindings.js +80 -0
- package/dist/src/reviewbotfindings.js.map +1 -0
- package/dist/src/reviewconfig.d.ts +753 -0
- package/dist/src/reviewconfig.d.ts.map +1 -0
- package/dist/src/reviewconfig.js +805 -0
- package/dist/src/reviewconfig.js.map +1 -0
- package/dist/src/reviewdelta.d.ts +51 -0
- package/dist/src/reviewdelta.d.ts.map +1 -0
- package/dist/src/reviewdelta.js +119 -0
- package/dist/src/reviewdelta.js.map +1 -0
- package/dist/src/reviewdest.d.ts +86 -0
- package/dist/src/reviewdest.d.ts.map +1 -0
- package/dist/src/reviewdest.js +142 -0
- package/dist/src/reviewdest.js.map +1 -0
- package/dist/src/reviewerstub.d.ts +12 -0
- package/dist/src/reviewerstub.d.ts.map +1 -0
- package/dist/src/reviewerstub.js +28 -0
- package/dist/src/reviewerstub.js.map +1 -0
- package/dist/src/reviewhost.d.ts +58 -0
- package/dist/src/reviewhost.d.ts.map +1 -0
- package/dist/src/reviewhost.js +135 -0
- package/dist/src/reviewhost.js.map +1 -0
- package/dist/src/reviewpost.d.ts +79 -0
- package/dist/src/reviewpost.d.ts.map +1 -0
- package/dist/src/reviewpost.js +233 -0
- package/dist/src/reviewpost.js.map +1 -0
- package/dist/src/reviewrender.d.ts +154 -0
- package/dist/src/reviewrender.d.ts.map +1 -0
- package/dist/src/reviewrender.js +480 -0
- package/dist/src/reviewrender.js.map +1 -0
- package/dist/src/reviewstate.d.ts +62 -0
- package/dist/src/reviewstate.d.ts.map +1 -0
- package/dist/src/reviewstate.js +167 -0
- package/dist/src/reviewstate.js.map +1 -0
- package/dist/src/reviewstore.d.ts +17 -0
- package/dist/src/reviewstore.d.ts.map +1 -0
- package/dist/src/reviewstore.js +105 -0
- package/dist/src/reviewstore.js.map +1 -0
- package/dist/src/round-progress.d.ts +120 -0
- package/dist/src/round-progress.d.ts.map +1 -0
- package/dist/src/round-progress.js +172 -0
- package/dist/src/round-progress.js.map +1 -0
- package/dist/src/round-stage-deadlines.d.ts +12 -0
- package/dist/src/round-stage-deadlines.d.ts.map +1 -0
- package/dist/src/round-stage-deadlines.js +10 -0
- package/dist/src/round-stage-deadlines.js.map +1 -0
- package/dist/src/session-command.d.ts +19 -0
- package/dist/src/session-command.d.ts.map +1 -0
- package/dist/src/session-command.js +20 -0
- package/dist/src/session-command.js.map +1 -0
- package/dist/src/settledread.d.ts +61 -0
- package/dist/src/settledread.d.ts.map +1 -0
- package/dist/src/settledread.js +135 -0
- package/dist/src/settledread.js.map +1 -0
- package/dist/src/severity.d.ts +167 -0
- package/dist/src/severity.d.ts.map +1 -0
- package/dist/src/severity.js +364 -0
- package/dist/src/severity.js.map +1 -0
- package/dist/src/severityrank.d.ts +8 -0
- package/dist/src/severityrank.d.ts.map +1 -0
- package/dist/src/severityrank.js +16 -0
- package/dist/src/severityrank.js.map +1 -0
- package/dist/src/standing-review.d.ts +45 -0
- package/dist/src/standing-review.d.ts.map +1 -0
- package/dist/src/standing-review.js +43 -0
- package/dist/src/standing-review.js.map +1 -0
- package/dist/src/storerows.d.ts +225 -0
- package/dist/src/storerows.d.ts.map +1 -0
- package/dist/src/storerows.js +7 -0
- package/dist/src/storerows.js.map +1 -0
- package/dist/src/styleguide.d.ts +25 -0
- package/dist/src/styleguide.d.ts.map +1 -0
- package/dist/src/styleguide.js +272 -0
- package/dist/src/styleguide.js.map +1 -0
- package/dist/src/sweepstatus.d.ts +42 -0
- package/dist/src/sweepstatus.d.ts.map +1 -0
- package/dist/src/sweepstatus.js +97 -0
- package/dist/src/sweepstatus.js.map +1 -0
- package/dist/src/templates.d.ts +243 -0
- package/dist/src/templates.d.ts.map +1 -0
- package/dist/src/templates.js +847 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/types.d.ts +639 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +90 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/unifieddiff.d.ts +22 -0
- package/dist/src/unifieddiff.d.ts.map +1 -0
- package/dist/src/unifieddiff.js +176 -0
- package/dist/src/unifieddiff.js.map +1 -0
- package/dist/src/yieldloop.d.ts +2 -0
- package/dist/src/yieldloop.d.ts.map +1 -0
- package/dist/src/yieldloop.js +14 -0
- package/dist/src/yieldloop.js.map +1 -0
- package/package.json +60 -4
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
// The PR-owned inter-round delta (follow-up rounds; docs/follow-up-rounds.md):
|
|
2
|
+
// what the author changed between two reviewed heads, read with git over a
|
|
3
|
+
// repository the caller names. Its parsers and types are pure; its reader runs
|
|
4
|
+
// git through an injected ExecFn. The daemon reads it over the base clone
|
|
5
|
+
// (`WorktreeManager.prOwnedDelta`), `qcr review` over the repo the person is
|
|
6
|
+
// standing in (packages/pi-plugin/src/reviewdelta.ts), and the planner (packages/pi-plugin/src/planner.ts) plans a
|
|
7
|
+
// follow-up round from it.
|
|
8
|
+
import { runOrThrow } from "./execfn.js";
|
|
9
|
+
import { parseHunkHeader } from "./hunkheader.js";
|
|
10
|
+
import { gitDiffHeaderPaths, unquoteGitPath } from "./unifieddiff.js";
|
|
11
|
+
/** A commit sha, abbreviated or full. */
|
|
12
|
+
const SHA_RE = /^[0-9a-f]{7,40}$/i;
|
|
13
|
+
/**
|
|
14
|
+
* The new-side changed ranges of one file's unified hunks (any context
|
|
15
|
+
* size — `-U0` and `-U3` read the same). Pure. Each hunk is bounded by the
|
|
16
|
+
* counts its `@@ -a,b +c,d @@` header promises, so a removed line whose text
|
|
17
|
+
* starts `-- ` (an SQL comment) or `++` is read as the body line it is, never
|
|
18
|
+
* as a file header. A contiguous run of `-`/`+` lines is one change: its
|
|
19
|
+
* added lines are its range; a run with no added line is a deletion point
|
|
20
|
+
* after the last new-side line before it.
|
|
21
|
+
*/
|
|
22
|
+
export function parseNewSideRanges(hunks) {
|
|
23
|
+
const ranges = [];
|
|
24
|
+
let additions = 0;
|
|
25
|
+
let deletions = 0;
|
|
26
|
+
let ok = true;
|
|
27
|
+
let sawHunk = false;
|
|
28
|
+
let oldLeft = 0;
|
|
29
|
+
let newLeft = 0;
|
|
30
|
+
let newLine = 0;
|
|
31
|
+
let runStart = -1;
|
|
32
|
+
let runPlus = 0;
|
|
33
|
+
let runMinus = false;
|
|
34
|
+
const flush = () => {
|
|
35
|
+
if (runPlus > 0)
|
|
36
|
+
ranges.push([runStart, runPlus]);
|
|
37
|
+
else if (runMinus)
|
|
38
|
+
ranges.push([newLine - 1, 0]);
|
|
39
|
+
runStart = -1;
|
|
40
|
+
runPlus = 0;
|
|
41
|
+
runMinus = false;
|
|
42
|
+
};
|
|
43
|
+
for (const line of hunks.split("\n")) {
|
|
44
|
+
const inHunk = oldLeft > 0 || newLeft > 0;
|
|
45
|
+
if (!inHunk) {
|
|
46
|
+
flush();
|
|
47
|
+
const h = parseHunkHeader(line);
|
|
48
|
+
if (!h)
|
|
49
|
+
continue;
|
|
50
|
+
sawHunk = true;
|
|
51
|
+
oldLeft = h.old_count;
|
|
52
|
+
newLeft = h.new_count;
|
|
53
|
+
// An empty new side names the line BEFORE the hunk.
|
|
54
|
+
newLine = newLeft === 0 ? h.new_start + 1 : h.new_start;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const ch = line[0];
|
|
58
|
+
if (ch === "\\")
|
|
59
|
+
continue; // ""
|
|
60
|
+
if (ch === "+") {
|
|
61
|
+
if (newLeft === 0) {
|
|
62
|
+
ok = false;
|
|
63
|
+
oldLeft = newLeft = 0;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (runPlus === 0)
|
|
67
|
+
runStart = newLine;
|
|
68
|
+
runPlus += 1;
|
|
69
|
+
additions += 1;
|
|
70
|
+
newLine += 1;
|
|
71
|
+
newLeft -= 1;
|
|
72
|
+
}
|
|
73
|
+
else if (ch === "-") {
|
|
74
|
+
if (oldLeft === 0) {
|
|
75
|
+
ok = false;
|
|
76
|
+
oldLeft = newLeft = 0;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
runMinus = true;
|
|
80
|
+
deletions += 1;
|
|
81
|
+
oldLeft -= 1;
|
|
82
|
+
}
|
|
83
|
+
else if (ch === " " || line === "") {
|
|
84
|
+
// `diff.suppressBlankEmpty` writes an empty context line as "".
|
|
85
|
+
flush();
|
|
86
|
+
newLine += 1;
|
|
87
|
+
oldLeft = Math.max(0, oldLeft - 1);
|
|
88
|
+
newLeft = Math.max(0, newLeft - 1);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
ok = false;
|
|
92
|
+
flush();
|
|
93
|
+
oldLeft = newLeft = 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (oldLeft > 0 || newLeft > 0)
|
|
97
|
+
ok = false; // a hunk cut short
|
|
98
|
+
flush();
|
|
99
|
+
if (!sawHunk && hunks.trim() !== "")
|
|
100
|
+
ok = false;
|
|
101
|
+
return { ranges, additions, deletions, ok };
|
|
102
|
+
}
|
|
103
|
+
/** A `---`/`+++`/`rename to` path: the trailing tab git appends to a path
|
|
104
|
+
* with a space dropped, the quoting undone, the `a/`/`b/` prefix removed. */
|
|
105
|
+
export function sectionPath(raw, prefix) {
|
|
106
|
+
const p = unquoteGitPath(raw.replace(/\t$/, ""));
|
|
107
|
+
if (p === null)
|
|
108
|
+
return null;
|
|
109
|
+
if (prefix === "")
|
|
110
|
+
return p;
|
|
111
|
+
return p.startsWith(prefix) ? p.slice(prefix.length) : null;
|
|
112
|
+
}
|
|
113
|
+
/** Split `git diff` patch output (explicit `a/`/`b/` prefixes) into its
|
|
114
|
+
* file sections. Pure. Inside a section only the lines before its first
|
|
115
|
+
* `@@` are headers — a removed `-- comment` line is never read as one. */
|
|
116
|
+
export function parsePatchSections(diff) {
|
|
117
|
+
const out = [];
|
|
118
|
+
const lines = diff.split("\n");
|
|
119
|
+
let i = 0;
|
|
120
|
+
while (i < lines.length) {
|
|
121
|
+
const head = lines[i];
|
|
122
|
+
if (!head.startsWith("diff --git ")) {
|
|
123
|
+
i += 1;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const hp = gitDiffHeaderPaths(head.slice("diff --git ".length));
|
|
127
|
+
let minus;
|
|
128
|
+
let plus;
|
|
129
|
+
let renameFrom = null;
|
|
130
|
+
let renameTo = null;
|
|
131
|
+
let deleted = false;
|
|
132
|
+
let added = false;
|
|
133
|
+
let binary = false;
|
|
134
|
+
let gitlink = false;
|
|
135
|
+
let modeChanged = false;
|
|
136
|
+
i += 1;
|
|
137
|
+
while (i < lines.length &&
|
|
138
|
+
!lines[i].startsWith("@@") &&
|
|
139
|
+
!lines[i].startsWith("diff --git ")) {
|
|
140
|
+
const l = lines[i];
|
|
141
|
+
if (l.startsWith("--- "))
|
|
142
|
+
minus = l === "--- /dev/null" ? null : sectionPath(l.slice(4), "a/");
|
|
143
|
+
else if (l.startsWith("+++ "))
|
|
144
|
+
plus = l === "+++ /dev/null" ? null : sectionPath(l.slice(4), "b/");
|
|
145
|
+
else if (l.startsWith("rename from ") || l.startsWith("copy from "))
|
|
146
|
+
renameFrom = sectionPath(l.slice(l.indexOf(" from ") + 6), "");
|
|
147
|
+
else if (l.startsWith("rename to ") || l.startsWith("copy to "))
|
|
148
|
+
renameTo = sectionPath(l.slice(l.indexOf(" to ") + 4), "");
|
|
149
|
+
else if (l.startsWith("deleted file mode"))
|
|
150
|
+
deleted = true;
|
|
151
|
+
else if (l.startsWith("new file mode"))
|
|
152
|
+
added = true;
|
|
153
|
+
else if (l.startsWith("old mode ") || l.startsWith("new mode "))
|
|
154
|
+
modeChanged = true;
|
|
155
|
+
else if (l.startsWith("Binary files ") || l === "GIT binary patch")
|
|
156
|
+
binary = true;
|
|
157
|
+
if (/ 160000$|^index [0-9a-f]+\.\.[0-9a-f]+ 160000$/.test(l))
|
|
158
|
+
gitlink = true;
|
|
159
|
+
i += 1;
|
|
160
|
+
}
|
|
161
|
+
const body = [];
|
|
162
|
+
while (i < lines.length && !lines[i].startsWith("diff --git ")) {
|
|
163
|
+
body.push(lines[i]);
|
|
164
|
+
i += 1;
|
|
165
|
+
}
|
|
166
|
+
while (body.length && body[body.length - 1] === "")
|
|
167
|
+
body.pop();
|
|
168
|
+
const hunks = body.length ? body.join("\n") + "\n" : "";
|
|
169
|
+
if (/^[-+]Subproject commit /m.test(hunks))
|
|
170
|
+
gitlink = true;
|
|
171
|
+
const newPath = plus ?? renameTo ?? (plus === null ? null : hp.b);
|
|
172
|
+
const oldPath = minus ?? renameFrom ?? (minus === null ? null : hp.a);
|
|
173
|
+
out.push({
|
|
174
|
+
path: deleted || plus === null ? (oldPath ?? hp.a) : (newPath ?? null),
|
|
175
|
+
old_path: oldPath ?? null,
|
|
176
|
+
deleted: deleted || plus === null,
|
|
177
|
+
added: added || minus === null,
|
|
178
|
+
binary,
|
|
179
|
+
gitlink,
|
|
180
|
+
...(modeChanged ? { mode_changed: true } : {}),
|
|
181
|
+
hunks,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
/** `git diff --name-status -z` output, read. Pure; null when it does not
|
|
187
|
+
* parse (a path a rename/copy entry promised is missing, an unknown shape). */
|
|
188
|
+
export function parseNameStatusZ(out) {
|
|
189
|
+
const tok = out.split("\0");
|
|
190
|
+
if (tok[tok.length - 1] === "")
|
|
191
|
+
tok.pop();
|
|
192
|
+
const entries = [];
|
|
193
|
+
let i = 0;
|
|
194
|
+
while (i < tok.length) {
|
|
195
|
+
const st = tok[i];
|
|
196
|
+
const m = /^([A-Z])\d*$/.exec(st);
|
|
197
|
+
if (!m)
|
|
198
|
+
return null;
|
|
199
|
+
const letter = m[1];
|
|
200
|
+
if (letter === "R" || letter === "C") {
|
|
201
|
+
const from = tok[i + 1];
|
|
202
|
+
const to = tok[i + 2];
|
|
203
|
+
if (from === undefined || to === undefined)
|
|
204
|
+
return null;
|
|
205
|
+
entries.push({ status: letter, path: to, old_path: from });
|
|
206
|
+
i += 3;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const p = tok[i + 1];
|
|
210
|
+
if (p === undefined)
|
|
211
|
+
return null;
|
|
212
|
+
entries.push({ status: letter, path: p });
|
|
213
|
+
i += 2;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return entries;
|
|
217
|
+
}
|
|
218
|
+
/** The GitHub `status` spelling of a name-status letter, so a delta file
|
|
219
|
+
* reads like a `PrFileEntry`. */
|
|
220
|
+
export function githubStatusOf(letter) {
|
|
221
|
+
switch (letter) {
|
|
222
|
+
case "A":
|
|
223
|
+
return "added";
|
|
224
|
+
case "D":
|
|
225
|
+
return "removed";
|
|
226
|
+
case "R":
|
|
227
|
+
return "renamed";
|
|
228
|
+
case "C":
|
|
229
|
+
return "copied";
|
|
230
|
+
case "M":
|
|
231
|
+
return "modified";
|
|
232
|
+
default:
|
|
233
|
+
return "changed"; // T (type change), U, X, B
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/** Join name-status entries with their patch sections into delta files.
|
|
237
|
+
* Pure. An entry no section matches is scoped whole — never dropped. */
|
|
238
|
+
export function joinDeltaFiles(entries, sections) {
|
|
239
|
+
const byPath = new Map();
|
|
240
|
+
for (const s of sections) {
|
|
241
|
+
if (s.path === null)
|
|
242
|
+
continue;
|
|
243
|
+
const list = byPath.get(s.path) ?? [];
|
|
244
|
+
list.push(s);
|
|
245
|
+
byPath.set(s.path, list);
|
|
246
|
+
}
|
|
247
|
+
return entries.map((e) => {
|
|
248
|
+
const secs = byPath.get(e.path) ?? [];
|
|
249
|
+
const hunks = secs.map((s) => s.hunks).join("");
|
|
250
|
+
const parse = parseNewSideRanges(hunks);
|
|
251
|
+
const binary = secs.some((s) => s.binary);
|
|
252
|
+
const gitlink = secs.some((s) => s.gitlink);
|
|
253
|
+
const modeChanged = secs.some((s) => s.mode_changed);
|
|
254
|
+
const deleted = e.status === "D";
|
|
255
|
+
// A rename/copy with no content change has a section and no hunks: no
|
|
256
|
+
// lines, but the section is what proves it was read.
|
|
257
|
+
const unread = secs.length === 0 || !parse.ok;
|
|
258
|
+
const typeChange = e.status === "T" || secs.length > 1;
|
|
259
|
+
const file = {
|
|
260
|
+
path: e.path,
|
|
261
|
+
status: githubStatusOf(e.status),
|
|
262
|
+
additions: parse.additions,
|
|
263
|
+
deletions: parse.deletions,
|
|
264
|
+
ranges: parse.ranges,
|
|
265
|
+
whole_file: deleted || binary || gitlink || modeChanged || unread || typeChange,
|
|
266
|
+
patch: binary ? "" : hunks,
|
|
267
|
+
};
|
|
268
|
+
if (e.old_path !== undefined)
|
|
269
|
+
file.old_path = e.old_path;
|
|
270
|
+
if (binary)
|
|
271
|
+
file.binary = true;
|
|
272
|
+
return file;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/** Delta files as the `PrFileEntry` shape the plan heuristics and
|
|
276
|
+
* `classifyDelta` read. */
|
|
277
|
+
export function deltaAsPrFiles(files) {
|
|
278
|
+
return files.map((f) => ({
|
|
279
|
+
filename: f.path,
|
|
280
|
+
additions: f.additions,
|
|
281
|
+
deletions: f.deletions,
|
|
282
|
+
status: f.status,
|
|
283
|
+
...(f.patch !== "" ? { patch: f.patch } : {}),
|
|
284
|
+
...(f.old_path !== undefined ? { previous_filename: f.old_path } : {}),
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
/** The local ref PR `pr`'s head is fetched into. */
|
|
288
|
+
export function prFetchRef(pr) {
|
|
289
|
+
return `refs/qcr/pr-${pr}`;
|
|
290
|
+
}
|
|
291
|
+
/** True when `sha` is present in the repository at `cwd` (no fetch). */
|
|
292
|
+
export async function gitHasCommit(run, cwd, sha) {
|
|
293
|
+
if (!SHA_RE.test(sha))
|
|
294
|
+
return false;
|
|
295
|
+
const res = await run("git", ["cat-file", "-e", `${sha}^{commit}`], { cwd });
|
|
296
|
+
return res.code === 0;
|
|
297
|
+
}
|
|
298
|
+
/** `git merge-base --is-ancestor`: true yes, false no, null unknown. */
|
|
299
|
+
export async function gitIsAncestor(run, cwd, a, b) {
|
|
300
|
+
const res = await run("git", ["merge-base", "--is-ancestor", a, b], { cwd });
|
|
301
|
+
return res.code === 0 ? true : res.code === 1 ? false : null;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* The commits of `shas` the repository still lacks after fetching them on
|
|
305
|
+
* miss: by sha first (GitHub serves a reachable want-sha), then PR `pr`'s head
|
|
306
|
+
* ref, the reliable route for PR-branch heads. A fetch that fails is no
|
|
307
|
+
* throw — the answer is what is still missing.
|
|
308
|
+
*/
|
|
309
|
+
export async function fetchMissingCommits(repo, shas, pr) {
|
|
310
|
+
const missing = async () => {
|
|
311
|
+
const out = [];
|
|
312
|
+
for (const sha of shas)
|
|
313
|
+
if (!(await repo.hasCommit(sha)))
|
|
314
|
+
out.push(sha);
|
|
315
|
+
return out;
|
|
316
|
+
};
|
|
317
|
+
let gone = await missing();
|
|
318
|
+
if (gone.length) {
|
|
319
|
+
await repo.run("git", ["fetch", "--force", "origin", ...gone], { cwd: repo.cwd });
|
|
320
|
+
gone = await missing();
|
|
321
|
+
}
|
|
322
|
+
if (gone.length && pr !== undefined && Number.isInteger(pr) && pr > 0) {
|
|
323
|
+
const refspec = `+refs/pull/${pr}/head:${prFetchRef(pr)}`;
|
|
324
|
+
await repo.run("git", ["fetch", "--force", "origin", refspec], { cwd: repo.cwd });
|
|
325
|
+
gone = await missing();
|
|
326
|
+
}
|
|
327
|
+
return gone;
|
|
328
|
+
}
|
|
329
|
+
/** The plain `DeltaRepo` over the repository at `cwd`: no memo, and a
|
|
330
|
+
* missing commit is fetched through `run` like any other git. */
|
|
331
|
+
export function gitDeltaRepo(run, cwd) {
|
|
332
|
+
const repo = {
|
|
333
|
+
run,
|
|
334
|
+
cwd,
|
|
335
|
+
hasCommit: (sha) => gitHasCommit(run, cwd, sha),
|
|
336
|
+
fetchMissing: (shas, pr) => fetchMissingCommits(repo, shas, pr),
|
|
337
|
+
pathAt: async (sha, path) => (await run("git", ["cat-file", "-e", `${sha}:${path}`], { cwd })).code === 0,
|
|
338
|
+
};
|
|
339
|
+
return repo;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* The PR-owned change between two reviewed heads (follow-up rounds;
|
|
343
|
+
* `docs/follow-up-rounds.md`): the reviewed head `from` is replayed
|
|
344
|
+
* onto the content the new head `to` actually builds on (`mergeBase`, the
|
|
345
|
+
* round's own `merge_base`) with `git merge-tree`, and that synthetic tree
|
|
346
|
+
* is diffed against `to`. Base content cancels out — a clean master merge
|
|
347
|
+
* (with or without a merge commit) and a rebase leave only what the author
|
|
348
|
+
* changed — while a master change the author dropped shows as a hunk, and
|
|
349
|
+
* a replay that conflicts names its paths, scoped whole and tagged for the
|
|
350
|
+
* both-parents audit. Ranges are at `to`'s line numbers, keyed by the new
|
|
351
|
+
* path.
|
|
352
|
+
*
|
|
353
|
+
* Read-only towards every ref but the PR's own fetch ref; merge-tree writes
|
|
354
|
+
* tree and blob objects into the repository's store, as the worktree
|
|
355
|
+
* manager's `resolvedFilesInMerges` does. Every step is an async child
|
|
356
|
+
* process. Total: any unknown is `{ok:false, reason}` and the caller runs the
|
|
357
|
+
* full round — this reader never returns a partial delta.
|
|
358
|
+
*
|
|
359
|
+
* `baseSha` (the base branch tip the round fetched) makes the base check
|
|
360
|
+
* real: the base content the reviewed head held must still be under
|
|
361
|
+
* `mergeBase`, else the author rebased onto an older base (or un-merged
|
|
362
|
+
* master) and the replay would read base drift as the PR's — `base-rewound`.
|
|
363
|
+
* `fromMergeBase` (the merge base the reviewed round recorded), when known,
|
|
364
|
+
* catches a force-pushed base the same way.
|
|
365
|
+
*/
|
|
366
|
+
export async function readPrOwnedDelta(repo, q) {
|
|
367
|
+
const fail = (reason, detail) => detail === undefined ? { ok: false, reason } : { ok: false, reason, detail };
|
|
368
|
+
const git = (args) => runOrThrow(repo.run, "git", args, { cwd: repo.cwd });
|
|
369
|
+
const isAncestor = (a, b) => gitIsAncestor(repo.run, repo.cwd, a, b);
|
|
370
|
+
if (!SHA_RE.test(q.from ?? ""))
|
|
371
|
+
return fail("no-reviewed-head");
|
|
372
|
+
if (!SHA_RE.test(q.mergeBase ?? ""))
|
|
373
|
+
return fail("no-merge-base");
|
|
374
|
+
if (!SHA_RE.test(q.to ?? ""))
|
|
375
|
+
return fail("diff-failed", "head is not a sha");
|
|
376
|
+
try {
|
|
377
|
+
for (const sha of [q.to, q.mergeBase])
|
|
378
|
+
if (!(await repo.hasCommit(sha)))
|
|
379
|
+
return fail("diff-failed", `${sha} not in the clone`);
|
|
380
|
+
// Fetch on miss, as resolvedFilesInMerges.
|
|
381
|
+
if ((await repo.fetchMissing([q.from], q.pr)).length)
|
|
382
|
+
return fail("old-head-missing");
|
|
383
|
+
// 1. The base may only have moved forward between the two reviews.
|
|
384
|
+
const anchor = q.baseSha && SHA_RE.test(q.baseSha) && (await repo.hasCommit(q.baseSha))
|
|
385
|
+
? q.baseSha
|
|
386
|
+
: q.mergeBase;
|
|
387
|
+
const b0 = await repo.run("git", ["merge-base", q.from, anchor], { cwd: repo.cwd });
|
|
388
|
+
if (b0.code === 1)
|
|
389
|
+
return fail("base-rewound", "no common history");
|
|
390
|
+
if (b0.code !== 0)
|
|
391
|
+
return fail("diff-failed", "merge-base");
|
|
392
|
+
const b0sha = b0.stdout.trim();
|
|
393
|
+
const forward = await isAncestor(b0sha, q.mergeBase);
|
|
394
|
+
if (forward === null)
|
|
395
|
+
return fail("diff-failed", "is-ancestor");
|
|
396
|
+
if (!forward)
|
|
397
|
+
return fail("base-rewound");
|
|
398
|
+
if (q.fromMergeBase) {
|
|
399
|
+
if (!SHA_RE.test(q.fromMergeBase))
|
|
400
|
+
return fail("base-rewound", "recorded base unusable");
|
|
401
|
+
const kept = await isAncestor(q.fromMergeBase, q.mergeBase);
|
|
402
|
+
if (kept !== true)
|
|
403
|
+
return fail("base-rewound", "recorded base not under the new base");
|
|
404
|
+
}
|
|
405
|
+
// 2. The reviewed PR replayed onto the base content `to` has.
|
|
406
|
+
let tree;
|
|
407
|
+
const conflicted = [];
|
|
408
|
+
const onBase = await isAncestor(q.mergeBase, q.from);
|
|
409
|
+
if (onBase === null)
|
|
410
|
+
return fail("diff-failed", "is-ancestor");
|
|
411
|
+
if (onBase) {
|
|
412
|
+
tree = (await git(["rev-parse", `${q.from}^{tree}`])).stdout.trim();
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
const mt = await repo.run("git", ["merge-tree", "--write-tree", "-z", "--name-only", "--no-messages", q.from, q.mergeBase], { cwd: repo.cwd });
|
|
416
|
+
if (mt.code !== 0 && mt.code !== 1) {
|
|
417
|
+
const cause = mt.stderr.trim().slice(0, 500);
|
|
418
|
+
return fail("merge-tree-failed", `exit ${mt.code}${cause ? `: ${cause}` : ""}`);
|
|
419
|
+
}
|
|
420
|
+
const tok = mt.stdout.split("\0");
|
|
421
|
+
tree = (tok[0] ?? "").trim();
|
|
422
|
+
if (mt.code === 1)
|
|
423
|
+
for (const p of tok.slice(1))
|
|
424
|
+
if (p !== "" && !conflicted.includes(p))
|
|
425
|
+
conflicted.push(p);
|
|
426
|
+
if (mt.code === 1 && conflicted.length === 0)
|
|
427
|
+
return fail("merge-tree-failed", "conflict without a path");
|
|
428
|
+
}
|
|
429
|
+
if (!/^[0-9a-f]{40}([0-9a-f]{24})?$/.test(tree))
|
|
430
|
+
return fail("merge-tree-failed", "no tree");
|
|
431
|
+
// 3. The delta, at new-head line numbers.
|
|
432
|
+
const conflictSet = new Set(conflicted);
|
|
433
|
+
const read = async (from, paths) => {
|
|
434
|
+
const diff = [
|
|
435
|
+
"--literal-pathspecs",
|
|
436
|
+
"-c",
|
|
437
|
+
"core.quotePath=false",
|
|
438
|
+
"-c",
|
|
439
|
+
"diff.noprefix=false",
|
|
440
|
+
"diff",
|
|
441
|
+
"--no-color",
|
|
442
|
+
"--no-ext-diff",
|
|
443
|
+
"--no-textconv",
|
|
444
|
+
"--no-relative",
|
|
445
|
+
"--submodule=short",
|
|
446
|
+
"-M",
|
|
447
|
+
];
|
|
448
|
+
const spec = paths ? ["--", ...paths] : [];
|
|
449
|
+
const ns = await git([...diff, "-z", "--name-status", from, q.to, ...spec]);
|
|
450
|
+
const patch = await git([
|
|
451
|
+
...diff,
|
|
452
|
+
"--src-prefix=a/",
|
|
453
|
+
"--dst-prefix=b/",
|
|
454
|
+
"-U3",
|
|
455
|
+
from,
|
|
456
|
+
q.to,
|
|
457
|
+
...spec,
|
|
458
|
+
]);
|
|
459
|
+
const entries = parseNameStatusZ(ns.stdout);
|
|
460
|
+
if (entries === null)
|
|
461
|
+
return null;
|
|
462
|
+
return joinDeltaFiles(entries, parsePatchSections(patch.stdout));
|
|
463
|
+
};
|
|
464
|
+
const delta = await read(tree);
|
|
465
|
+
if (delta === null)
|
|
466
|
+
return fail("diff-failed", "name-status");
|
|
467
|
+
const files = delta.filter((f) => !conflictSet.has(f.path));
|
|
468
|
+
// A rename out of a conflicted path was compared against marker blobs.
|
|
469
|
+
for (const f of files)
|
|
470
|
+
if (f.old_path && conflictSet.has(f.old_path))
|
|
471
|
+
f.whole_file = true;
|
|
472
|
+
if (conflicted.length) {
|
|
473
|
+
// Never diff marker blobs as content: a conflicted file's scope is
|
|
474
|
+
// the PR's own hunks for it, whole-file, for the both-parents audit.
|
|
475
|
+
const own = await read(q.mergeBase, conflicted);
|
|
476
|
+
if (own === null)
|
|
477
|
+
return fail("diff-failed", "name-status (conflicts)");
|
|
478
|
+
for (const p of conflicted) {
|
|
479
|
+
const f = own.find((o) => o.path === p) ?? {
|
|
480
|
+
path: p,
|
|
481
|
+
status: (await repo.pathAt(q.to, p)) ? "modified" : "removed",
|
|
482
|
+
additions: 0,
|
|
483
|
+
deletions: 0,
|
|
484
|
+
ranges: [],
|
|
485
|
+
whole_file: true,
|
|
486
|
+
patch: "",
|
|
487
|
+
};
|
|
488
|
+
f.whole_file = true;
|
|
489
|
+
f.conflict = true;
|
|
490
|
+
files.push(f);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
files.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
494
|
+
const lines = files.reduce((n, f) => n + f.additions + f.deletions, 0);
|
|
495
|
+
return { ok: true, tree, files, lines, conflicted };
|
|
496
|
+
}
|
|
497
|
+
catch (err) {
|
|
498
|
+
return fail("diff-failed", err instanceof Error ? err.message.slice(0, 200) : String(err));
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=prdelta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prdelta.js","sourceRoot":"","sources":["../../src/prdelta.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,0EAA0E;AAC1E,6EAA6E;AAC7E,mHAAmH;AACnH,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtE,yCAAyC;AACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAmBnC;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;aAC7C,IAAI,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,QAAQ,GAAG,CAAC,CAAC,CAAC;QACd,OAAO,GAAG,CAAC,CAAC;QACZ,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC;YACtB,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC;YACtB,oDAAoD;YACpD,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI;YAAE,SAAS,CAAC,gCAAgC;QAC3D,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,EAAE,GAAG,KAAK,CAAC;gBACX,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,OAAO,KAAK,CAAC;gBAAE,QAAQ,GAAG,OAAO,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC;YACb,SAAS,IAAI,CAAC,CAAC;YACf,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,EAAE,GAAG,KAAK,CAAC;gBACX,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,IAAI,CAAC,CAAC;YACf,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACrC,gEAAgE;YAChE,KAAK,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,KAAK,CAAC;YACX,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,EAAE,GAAG,KAAK,CAAC,CAAC,mBAAmB;IAC/D,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,EAAE,GAAG,KAAK,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC;AAmBD;6EAC6E;AAC7E,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,MAAwB;IAC/D,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED;;0EAE0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,IAAI,KAAgC,CAAC;QACrC,IAAI,IAA+B,CAAC;QACpC,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,CAAC,IAAI,CAAC,CAAC;QACP,OACE,CAAC,GAAG,KAAK,CAAC,MAAM;YAChB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAC3B,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EACpC,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACpB,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBACtB,KAAK,GAAG,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBAClE,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC3B,IAAI,GAAG,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBACjE,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;gBACjE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBAC5D,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC7D,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBACxD,IAAI,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC;iBACtD,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC;iBAChD,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;gBAAE,WAAW,GAAG,IAAI,CAAC;iBAC/E,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,kBAAkB;gBAAE,MAAM,GAAG,IAAI,CAAC;YAClF,IAAI,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC;YAC7E,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACrB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,KAAK,IAAI,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;YACtE,QAAQ,EAAE,OAAO,IAAI,IAAI;YACzB,OAAO,EAAE,OAAO,IAAI,IAAI,KAAK,IAAI;YACjC,KAAK,EAAE,KAAK,IAAI,KAAK,KAAK,IAAI;YAC9B,MAAM;YACN,OAAO;YACP,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD;+EAC+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACnB,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;iCACiC;AACjC,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,OAAO,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC;QAClB,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,SAAS,CAAC,CAAC,2BAA2B;IACjD,CAAC;AACH,CAAC;AAmDD;wEACwE;AACxE,MAAM,UAAU,cAAc,CAC5B,OAAmC,EACnC,QAAiC;IAEjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,SAAS;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,sEAAsE;QACtE,qDAAqD;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,MAAM,IAAI,GAAqB;YAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,WAAW,IAAI,MAAM,IAAI,UAAU;YAC/E,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;SAC3B,CAAC;QACF,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACzD,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;2BAC2B;AAC3B,MAAM,UAAU,cAAc,CAAC,KAAkC;IAQ/D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,QAAQ,EAAE,CAAC,CAAC,IAAI;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC,CAAC,CAAC;AACN,CAAC;AAiBD,oDAAoD;AACpD,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,eAAe,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,GAAW,EACX,CAAS,EACT,CAAS;IAET,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAkD,EAClD,IAAuB,EACvB,EAAW;IAEX,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,IAAI,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,cAAc,EAAE,SAAS,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;iEACiE;AACjE,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,MAAM,IAAI,GAAc;QACtB,GAAG;QACH,GAAG;QACH,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAC1B,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;KAC/E,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,CAOC;IAED,MAAM,IAAI,GAAG,CAAC,MAA+B,EAAE,MAAe,EAAgB,EAAE,CAC9E,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,mBAAmB,CAAC,CAAC;QAC1F,2CAA2C;QAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEtF,mEAAmE;QACnE,MAAM,MAAM,GACV,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;gBAAE,OAAO,IAAI,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;YACzF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;QACzF,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAY,CAAC;QACjB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CACvB,KAAK,EACL,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,EACzF,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAClB,CAAC;YACF,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;gBACf,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAC1C,OAAO,IAAI,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAE7F,0CAA0C;QAC1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,KAAgB,EAAE,EAAE;YACpD,MAAM,IAAI,GAAG;gBACX,qBAAqB;gBACrB,IAAI;gBACJ,sBAAsB;gBACtB,IAAI;gBACJ,qBAAqB;gBACrB,MAAM;gBACN,YAAY;gBACZ,eAAe;gBACf,eAAe;gBACf,eAAe;gBACf,mBAAmB;gBACnB,IAAI;aACL,CAAC;YACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC;gBACtB,GAAG,IAAI;gBACP,iBAAiB;gBACjB,iBAAiB;gBACjB,KAAK;gBACL,IAAI;gBACJ,CAAC,CAAC,EAAE;gBACJ,GAAG,IAAI;aACR,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,uEAAuE;QACvE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;QAC1F,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,mEAAmE;YACnE,qEAAqE;YACrE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAqB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;oBAC3D,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;oBAC7D,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,CAAC;oBACZ,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,EAAE;iBACV,CAAC;gBACF,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/** A number, or 0 for anything that is not a finite one. */
|
|
2
|
+
export declare function finiteNumber(value: unknown): number;
|
|
3
|
+
/** Child usage accepts either a scalar cost or a total-bearing object. */
|
|
4
|
+
export declare function usageCost(value: unknown): number;
|
|
5
|
+
/** pi's price list for the openai-codex models the priced arms run on, $ per
|
|
6
|
+
* million tokens (model catalog `cost` in pi 0.99.1, unchanged at 1.0.0 — VERIFY-ON-PIN). The
|
|
7
|
+
* pricing is per MODEL: gpt-6.1-sol's cache reads cost half of gpt-6-sol's.
|
|
8
|
+
* Requests above 272k input tokens are priced higher by pi; the bridge-driven
|
|
9
|
+
* arms' calls stay well below that (PR-Agent clamps at 32k by default). */
|
|
10
|
+
export declare const CODEX_USD_PER_MTOK: {
|
|
11
|
+
readonly "gpt-6-sol": {
|
|
12
|
+
readonly input: 2;
|
|
13
|
+
readonly cacheRead: 0.2;
|
|
14
|
+
readonly output: 10;
|
|
15
|
+
};
|
|
16
|
+
readonly "gpt-6.1-sol": {
|
|
17
|
+
readonly input: 2;
|
|
18
|
+
readonly cacheRead: 0.1;
|
|
19
|
+
readonly output: 10;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type PricedModel = keyof typeof CODEX_USD_PER_MTOK;
|
|
23
|
+
/** gpt-6-sol's rates — the model every priced arm ran on before gpt-6.1-sol. */
|
|
24
|
+
export declare const GPT6_SOL_USD_PER_MTOK: {
|
|
25
|
+
readonly input: 2;
|
|
26
|
+
readonly cacheRead: 0.2;
|
|
27
|
+
readonly output: 10;
|
|
28
|
+
};
|
|
29
|
+
/** The rates for a case's model; a summary that names none predates per-model
|
|
30
|
+
* pricing and ran on gpt-6-sol. An unknown model has no price — never a guess. */
|
|
31
|
+
export declare function ratesFor(model: string | null | undefined): {
|
|
32
|
+
input: number;
|
|
33
|
+
cacheRead: number;
|
|
34
|
+
output: number;
|
|
35
|
+
} | null;
|
|
36
|
+
/** OpenAI-style counts (input INCLUDING its cached part) as pi-style usage:
|
|
37
|
+
* input without cache reads, the cached part — capped at the input — apart. */
|
|
38
|
+
export declare function piUsageFromInclusive(input: number, cached: number, output: number): {
|
|
39
|
+
input: number;
|
|
40
|
+
cacheRead: number;
|
|
41
|
+
output: number;
|
|
42
|
+
};
|
|
43
|
+
export interface CaseCost {
|
|
44
|
+
usd: number;
|
|
45
|
+
/** "pi": summed from pi's own per-call costs; "priced": the bridge's tokens
|
|
46
|
+
* priced at CODEX_USD_PER_MTOK for the case's model (the OCR, OpenCode and
|
|
47
|
+
* PR-Agent arms); "claude": Claude Code's own total_cost_usd. */
|
|
48
|
+
source: "pi" | "priced" | "claude";
|
|
49
|
+
/** The model the tokens were priced as ("priced" only). */
|
|
50
|
+
model?: string;
|
|
51
|
+
}
|
|
52
|
+
/** The slim bundle's per-case price (bench/aacr/export_runs.py, compare.py
|
|
53
|
+
* `SLIM_COST_KEY`). */
|
|
54
|
+
export declare const SLIM_COST_KEY = "bench_cost_usd";
|
|
55
|
+
/** A pi `--mode json` stream's running price. An assistant `message_end` adds
|
|
56
|
+
* its own price. A lens tool call (`subagent`/`launch_plan`, or `lens`/
|
|
57
|
+
* `lens_wave`) prices its lens children twice over its life: each `tool_execution_update` carries what they have
|
|
58
|
+
* spent so far (counted as the largest value seen for that toolCallId — the
|
|
59
|
+
* figure only grows, and a repeated or reordered update adds nothing), and the
|
|
60
|
+
* `tool_execution_end` carries the final figure, which REPLACES that value
|
|
61
|
+
* rather than adding to it. A stream with no updates (every pi-events.jsonl
|
|
62
|
+
* runPi writes) prices as it always did: the ends alone.
|
|
63
|
+
*
|
|
64
|
+
* Each LENS RUN counts once. A result with an `id` (LensResult v1) is owned by
|
|
65
|
+
* the first call — or ledger line — that reports it; every later carrier of
|
|
66
|
+
* the same run adds nothing. A result without an `id` is the native shape and
|
|
67
|
+
* always counts. A lens-ledger line (`add` takes the lines of
|
|
68
|
+
* lens-ledger.jsonl too) prices a run no tool result reported, and a cache
|
|
69
|
+
* warm-up, which only the ledger records. */
|
|
70
|
+
export declare class EventCostMeter {
|
|
71
|
+
private readonly perCall;
|
|
72
|
+
/** Open tool call → its instance key (a repeated toolCallId after an end is
|
|
73
|
+
* a new call). */
|
|
74
|
+
private readonly instance;
|
|
75
|
+
/** Lens run id → the instance (or the ledger) that owns its price. */
|
|
76
|
+
private readonly owner;
|
|
77
|
+
private total;
|
|
78
|
+
private settled;
|
|
79
|
+
private claim;
|
|
80
|
+
/** Feed one event line; returns the change in the running price (negative
|
|
81
|
+
* only when a call's final figure comes in under its largest live one). */
|
|
82
|
+
add(line: string): number;
|
|
83
|
+
/** The running price over everything fed so far. */
|
|
84
|
+
get totalUsd(): number;
|
|
85
|
+
}
|
|
86
|
+
/** What one pi `--mode json` event line costs on its own: an assistant
|
|
87
|
+
* `message_end`'s price, or the children a lens tool update or end reports. Zero for any other line, or one that is not JSON. Summing it
|
|
88
|
+
* over a stream that carries updates counts a call once per update — price a
|
|
89
|
+
* stream with an EventCostMeter. */
|
|
90
|
+
export declare function eventLineCostUsd(line: string): number;
|
|
91
|
+
/** The round's lens ledger, beside the events in a case dir. */
|
|
92
|
+
export declare const LENS_LEDGER_FILE = "lens-ledger.jsonl";
|
|
93
|
+
export declare function caseCostUsd(caseDir: string): CaseCost | null;
|
|
94
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/pricing.ts"],"names":[],"mappings":"AAiBA,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIhD;AAID;;;;2EAI2E;AAC3E,eAAO,MAAM,kBAAkB;;;;;;;;;;;CAG0D,CAAC;AAE1F,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE1D,gFAAgF;AAChF,eAAO,MAAM,qBAAqB;;;;CAAkC,CAAC;AAErE;kFACkF;AAClF,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG7D;AAED;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGtD;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ;;qEAEiE;IACjE,MAAM,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;uBACuB;AACvB,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAuB9C;;;;;;;;;;;;;;6CAc6C;AAC7C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD;sBACkB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,KAAK;IASb;+EAC2E;IAC3E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAsDzB,oDAAoD;IACpD,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAED;;;oCAGoC;AACpC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA+C5D"}
|