@quickchatai/pi-quickreview 0.0.0-stage → 1.1.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 +1067 -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 +74 -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 +372 -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 +226 -0
- package/dist/src/engine/pisdk.d.ts.map +1 -0
- package/dist/src/engine/pisdk.js +552 -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 +32 -0
- package/dist/src/githubAuth.d.ts.map +1 -0
- package/dist/src/githubAuth.js +116 -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 +93 -0
- package/dist/src/guards.d.ts.map +1 -0
- package/dist/src/guards.js +306 -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/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/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 +39 -0
- package/dist/src/plugin/login.d.ts.map +1 -0
- package/dist/src/plugin/login.js +73 -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 +298 -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 +741 -0
- package/dist/src/reviewconfig.d.ts.map +1 -0
- package/dist/src/reviewconfig.js +797 -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,543 @@
|
|
|
1
|
+
// One review round on an injected runtime: write the round's artifacts, send
|
|
2
|
+
// the main session the production round order, send ONE follow-up when the
|
|
3
|
+
// outputs are missing or unreadable, then read the files and render them
|
|
4
|
+
// through the production review renderer.
|
|
5
|
+
//
|
|
6
|
+
// The runtime hosts the session. On the process runtime the follow-up is a
|
|
7
|
+
// `--continue` respawn of the same pi session; on the SDK runtime it is a
|
|
8
|
+
// second turn on the same live session. The round does not know which: it sees
|
|
9
|
+
// the port (port.ts) and nothing of pi's command line or SDK.
|
|
10
|
+
//
|
|
11
|
+
// Shared by the benchmark (src/bench/runner.ts reviewCase) and `qcr review`
|
|
12
|
+
// (through packages/pi-plugin/src/oneshot.ts). It takes a prepared tree, its file list, a target
|
|
13
|
+
// description and an output directory; it knows nothing of bench cases,
|
|
14
|
+
// stores or prefetching. No daemon, tmux, inject bridge or memory: a process
|
|
15
|
+
// that exits when the round settles (the companion boundary: no GitHub
|
|
16
|
+
// credential reaches it).
|
|
17
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { delimiter, dirname, join } from "node:path";
|
|
19
|
+
import { CONTEXT_PACK_FILE } from "../contextpack.js";
|
|
20
|
+
import { isDefaultPosting } from "../postingpolicy.js";
|
|
21
|
+
import { modelErrorKind, modelErrorsFromEvents, stagesFromEvents, usageFromEvents, } from "./roundevents.js";
|
|
22
|
+
import { CASE_FILES, POLICED_ORIGINALS } from "./caseout.js";
|
|
23
|
+
import { caseCostUsd } from "../pricing.js";
|
|
24
|
+
import { lineHasAuthError } from "../authwatch.js";
|
|
25
|
+
import { checkAuth, classifyAuthFailure } from "./auth.js";
|
|
26
|
+
import { apiKeyEnv } from "./keyroute.js";
|
|
27
|
+
import { GIT_ISOLATION_ENV, GITHUB_TOKEN_ENVS } from "../envstrip.js";
|
|
28
|
+
import { openRoundSink } from "./livewire.js";
|
|
29
|
+
import { planLaunch } from "./lens/launch-plan.js";
|
|
30
|
+
import { launchWave, } from "./lens/wave.js";
|
|
31
|
+
import { LENS_SESSIONS_DIR, MAIN_SESSION_DIR, openEnvOf, writeOpenMeta } from "./openable.js";
|
|
32
|
+
import { engineLensSection, renderOneShotPrompts, } from "./prompts.js";
|
|
33
|
+
import { renderBenchOutputs } from "./render.js";
|
|
34
|
+
import { coreExtensionFile } from "./extfiles.js";
|
|
35
|
+
/** The extensions a round's main session runs with, in load order: the
|
|
36
|
+
* command guard, the ledger pin, and the live PR session's `cluster_findings`
|
|
37
|
+
* tool (the same grouping code on both routes). */
|
|
38
|
+
export const ROUND_EXTENSIONS = [
|
|
39
|
+
"bash-guard",
|
|
40
|
+
"ledger-pin",
|
|
41
|
+
"finding-clusters",
|
|
42
|
+
];
|
|
43
|
+
export function readJson(path) {
|
|
44
|
+
try {
|
|
45
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Why a session's JSON output file cannot be used: `undefined` when it parses,
|
|
52
|
+
* `"missing"` when absent, otherwise the parser's message. */
|
|
53
|
+
export function jsonProblem(path) {
|
|
54
|
+
if (!existsSync(path))
|
|
55
|
+
return "missing";
|
|
56
|
+
try {
|
|
57
|
+
JSON.parse(readFileSync(path, "utf8"));
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return String(err instanceof Error ? err.message : err).slice(0, 300);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** The BENCHMARK MODE files a scorer reads as JSON: the outcome always; the
|
|
65
|
+
* findings record when the bench renders the posted review from it, else the
|
|
66
|
+
* session's own comments. */
|
|
67
|
+
function scoredOutputs(renderOutputs) {
|
|
68
|
+
return renderOutputs
|
|
69
|
+
? [CASE_FILES.findings, CASE_FILES.outcome]
|
|
70
|
+
: [CASE_FILES.comments, CASE_FILES.outcome];
|
|
71
|
+
}
|
|
72
|
+
/** The scored BENCHMARK MODE files the session wrote that do not parse. A
|
|
73
|
+
* missing file is not listed here (`missingOutputs` lists it). */
|
|
74
|
+
export function unparseableOutputs(caseDir, renderOutputs) {
|
|
75
|
+
const names = scoredOutputs(renderOutputs);
|
|
76
|
+
const out = [];
|
|
77
|
+
for (const n of names) {
|
|
78
|
+
const p = jsonProblem(join(caseDir, n));
|
|
79
|
+
if (p !== undefined && p !== "missing")
|
|
80
|
+
out.push(`${n} is not valid JSON (${p})`);
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
/** The scored BENCHMARK MODE files the session has not written. */
|
|
85
|
+
export function missingOutputs(caseDir, renderOutputs) {
|
|
86
|
+
return scoredOutputs(renderOutputs).filter((n) => !existsSync(join(caseDir, n)));
|
|
87
|
+
}
|
|
88
|
+
/** The session's event stream and stderr in a case dir. */
|
|
89
|
+
export const PI_RUN_FILES = ["pi-events.jsonl", "pi-stderr.log"];
|
|
90
|
+
/** The typed refusal in a round's output, if the provider refused the login. */
|
|
91
|
+
function authRefusal(stderrLines, eventsFile, streamError) {
|
|
92
|
+
for (const text of [...stderrLines, streamError ?? ""]) {
|
|
93
|
+
const refused = classifyAuthFailure(text.trim().slice(0, 300));
|
|
94
|
+
if (refused)
|
|
95
|
+
return refused;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
for (const line of readFileSync(eventsFile, "utf8").split("\n")) {
|
|
99
|
+
if (!lineHasAuthError(line))
|
|
100
|
+
continue;
|
|
101
|
+
// The provider's own text is the record's errorMessage; the line is long.
|
|
102
|
+
const said = /"errorMessage":("(?:[^"\\]|\\.)*")/.exec(line)?.[1];
|
|
103
|
+
const text = said === undefined ? line : JSON.parse(said);
|
|
104
|
+
return classifyAuthFailure(text.slice(0, 300));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// An unreadable stream is reported by the usage step.
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
/** How long a round waits for the engine's wave rows to settle once it has
|
|
113
|
+
* ended them (each ends its session and writes its ledger line). */
|
|
114
|
+
const WAVE_SETTLE_MS = 15_000;
|
|
115
|
+
/** Write the round's files into `i.outDir` and work out the session's env, order
|
|
116
|
+
* and wave. `route` is the engine route the round runs on, if any. Throws only
|
|
117
|
+
* for an unwritable output dir or a login that cannot cover the run (`auth`). */
|
|
118
|
+
export function prepareRound(i, route) {
|
|
119
|
+
const { cfg, outDir, tree, root } = i;
|
|
120
|
+
// Before a file is written or a session started: a login that cannot cover
|
|
121
|
+
// the run is refused here, typed (AuthExpiring), not found out by pi.
|
|
122
|
+
if (i.auth)
|
|
123
|
+
checkAuth(i.auth, { needMs: i.timeoutMs });
|
|
124
|
+
const ownTmp = i.tmpDir === undefined;
|
|
125
|
+
const tmpDir = i.tmpDir ?? join(outDir, "tmp");
|
|
126
|
+
mkdirSync(outDir, { recursive: true });
|
|
127
|
+
// What an earlier attempt wrote here is not this attempt's review.
|
|
128
|
+
for (const f of [...Object.values(CASE_FILES), ...POLICED_ORIGINALS, ...PI_RUN_FILES])
|
|
129
|
+
rmSync(join(outDir, f), { force: true });
|
|
130
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
131
|
+
mkdirSync(tmpDir, { recursive: true });
|
|
132
|
+
try {
|
|
133
|
+
const rendered = i.prompts ??
|
|
134
|
+
renderOneShotPrompts({
|
|
135
|
+
root,
|
|
136
|
+
cfg,
|
|
137
|
+
ecosystem: i.ecosystem,
|
|
138
|
+
target: i.target,
|
|
139
|
+
tree,
|
|
140
|
+
caseDir: outDir,
|
|
141
|
+
files: i.files,
|
|
142
|
+
issuedAt: new Date().toISOString(),
|
|
143
|
+
...(i.dependencyNote ? { dependencyNote: i.dependencyNote } : {}),
|
|
144
|
+
...(i.memory ? { memory: i.memory } : {}),
|
|
145
|
+
});
|
|
146
|
+
// An earlier attempt's task files never leak into this one: launch_plan
|
|
147
|
+
// launches every task file the dir holds.
|
|
148
|
+
rmSync(join(outDir, "tasks"), { recursive: true, force: true });
|
|
149
|
+
rmSync(join(outDir, CONTEXT_PACK_FILE), { force: true });
|
|
150
|
+
for (const f of rendered.extraFiles ?? []) {
|
|
151
|
+
mkdirSync(dirname(f.path), { recursive: true });
|
|
152
|
+
writeFileSync(f.path, f.text);
|
|
153
|
+
}
|
|
154
|
+
if (rendered.contextPack)
|
|
155
|
+
writeFileSync(rendered.contextPack.path, rendered.contextPack.text);
|
|
156
|
+
if (rendered.taskFiles.length) {
|
|
157
|
+
mkdirSync(join(outDir, "tasks"), { recursive: true });
|
|
158
|
+
for (const t of rendered.taskFiles)
|
|
159
|
+
writeFileSync(t.path, t.text);
|
|
160
|
+
}
|
|
161
|
+
const sysPath = join(outDir, "system-prompt.md");
|
|
162
|
+
writeFileSync(sysPath, rendered.system);
|
|
163
|
+
writeFileSync(join(outDir, "files.json"), JSON.stringify(i.files.map(({ patch: _p, ...f }) => f), null, 2));
|
|
164
|
+
const sessionName = i.sessionName ?? `oneshot-${i.target.number}`;
|
|
165
|
+
const env = {
|
|
166
|
+
PATH: process.env.PATH ?? "/usr/local/bin:/usr/bin:/bin",
|
|
167
|
+
HOME: process.env.HOME ?? "/tmp",
|
|
168
|
+
TMPDIR: tmpDir,
|
|
169
|
+
LANG: "C.UTF-8",
|
|
170
|
+
PI_CODING_AGENT_DIR: i.agentDir,
|
|
171
|
+
QCR_SUBAGENT_SCOPE: i.agentScope ?? "project",
|
|
172
|
+
QCR_SUBAGENT_MAX_CONCURRENCY: String(cfg.engine.lens_max_concurrency),
|
|
173
|
+
QCR_SUBAGENT_CACHE_GROUP: String(cfg.engine.lens_cache_group),
|
|
174
|
+
QCR_SUBAGENT_CACHE_STAGGER_MS: String(cfg.engine.lens_cache_stagger_ms),
|
|
175
|
+
QCR_SUBAGENT_PASS_DEADLINE_MIN: String(cfg.engine.lens_pass_deadline_min),
|
|
176
|
+
// This run's task dirs are its sanctioned launch_plan dirs
|
|
177
|
+
// (production's live under state/pr-<n>-round-<k>-passes/).
|
|
178
|
+
QCR_LAUNCH_PLAN_DIRS: [
|
|
179
|
+
join(outDir, "tasks"),
|
|
180
|
+
join(outDir, "tasks-optional"),
|
|
181
|
+
join(outDir, "tasks-sweep"),
|
|
182
|
+
].join(delimiter),
|
|
183
|
+
QCR_SANDBOX_ROOT: root,
|
|
184
|
+
QCR_SESSION_NAME: sessionName,
|
|
185
|
+
QCR_PR: String(i.target.number),
|
|
186
|
+
QCR_PR_META: `PR #${i.target.number} — ${i.target.title ?? i.target.repo} (worktree ${tree})`,
|
|
187
|
+
QCR_WORKTREE: tree,
|
|
188
|
+
QCR_LEDGER_FILE: join(outDir, "ledger.md"),
|
|
189
|
+
QCR_PI_VERSION: cfg.pi.version,
|
|
190
|
+
...GIT_ISOLATION_ENV,
|
|
191
|
+
// An `anthropic/` model arm: pi's anthropic provider reads this key.
|
|
192
|
+
...(process.env.ANTHROPIC_API_KEY
|
|
193
|
+
? { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY }
|
|
194
|
+
: {}),
|
|
195
|
+
// The API-key route (packages/pi-plugin/src/engine/keyroute.ts); nothing on the login route.
|
|
196
|
+
...apiKeyEnv(),
|
|
197
|
+
};
|
|
198
|
+
// No GitHub credential reaches a process whose model runs bash.
|
|
199
|
+
for (const k of GITHUB_TOKEN_ENVS)
|
|
200
|
+
delete env[k];
|
|
201
|
+
// The engine lens route (wave.ts EngineRoute): the planned wave is what
|
|
202
|
+
// `planLaunch` reads from this run's `tasks/` (pass-validate excluded), the
|
|
203
|
+
// same plan `lens_wave` resolves its dirs to. Nothing is started yet.
|
|
204
|
+
const startWarnings = [];
|
|
205
|
+
let waveUnits = [];
|
|
206
|
+
if (route?.plannedWave && rendered.taskFiles.length) {
|
|
207
|
+
const plan = planLaunch({ dirs: [join(outDir, "tasks")] }, env);
|
|
208
|
+
if (plan.ok)
|
|
209
|
+
waveUnits = plan.units;
|
|
210
|
+
else
|
|
211
|
+
startWarnings.push(`engine wave not planned: ${plan.error}`.slice(0, 300));
|
|
212
|
+
}
|
|
213
|
+
const prompts = route
|
|
214
|
+
? {
|
|
215
|
+
...rendered,
|
|
216
|
+
order: `${rendered.order}\n\n${engineLensSection(join(outDir, "tasks"), waveUnits.length
|
|
217
|
+
? { dir: dirname(waveUnits[0].path), agents: waveUnits.map((u) => u.agent) }
|
|
218
|
+
: null)}`,
|
|
219
|
+
}
|
|
220
|
+
: rendered;
|
|
221
|
+
writeFileSync(join(outDir, "round-order.md"), prompts.order);
|
|
222
|
+
// What `qcr open` needs to start pi on this run's sessions again.
|
|
223
|
+
writeOpenMeta(outDir, {
|
|
224
|
+
version: 1,
|
|
225
|
+
sessionName,
|
|
226
|
+
cwd: i.cwd ?? root,
|
|
227
|
+
model: cfg.models.conversation,
|
|
228
|
+
env: openEnvOf(env),
|
|
229
|
+
});
|
|
230
|
+
const sessionDir = join(outDir, MAIN_SESSION_DIR);
|
|
231
|
+
// This attempt's session only: an earlier attempt's JSONL left here would
|
|
232
|
+
// make `resumable` true and `--continue` would resume THAT conversation.
|
|
233
|
+
rmSync(sessionDir, { recursive: true, force: true });
|
|
234
|
+
// …and its lens sessions: `qcr open --lens` lists what THIS attempt ran.
|
|
235
|
+
rmSync(join(outDir, LENS_SESSIONS_DIR), { recursive: true, force: true });
|
|
236
|
+
return {
|
|
237
|
+
prompts,
|
|
238
|
+
sysPath,
|
|
239
|
+
env,
|
|
240
|
+
sessionName,
|
|
241
|
+
sessionDir,
|
|
242
|
+
events: join(outDir, PI_RUN_FILES[0]),
|
|
243
|
+
stderr: join(outDir, PI_RUN_FILES[1]),
|
|
244
|
+
waveUnits,
|
|
245
|
+
startWarnings,
|
|
246
|
+
tmpDir,
|
|
247
|
+
ownTmp,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
if (ownTmp)
|
|
252
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
253
|
+
throw err;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** Run one review round on `runtime`. A round that fails is a returned outcome
|
|
257
|
+
* (`error`, absent `outcome`), never a throw; only an unwritable output dir, a
|
|
258
|
+
* login that cannot cover the run (`auth`), or a runtime that cannot create the
|
|
259
|
+
* session (`runtime.create` rejects) throws.
|
|
260
|
+
*
|
|
261
|
+
* A runtime that hosts the engine's lens tools (`runtime.engineLens`, wave.ts)
|
|
262
|
+
* makes this an engine lens route: the order gains the engine-only section
|
|
263
|
+
* (prompts.ts engineLensSection), and with `plannedWave` the round starts the
|
|
264
|
+
* planned discovery wave itself, from the round's `tasks/` (never pass-validate),
|
|
265
|
+
* after the main session exists and before its first prompt; the session joins it
|
|
266
|
+
* through `lens_wave` (rule 9). Everything else stays the session's. */
|
|
267
|
+
export async function runRound(i, runtime) {
|
|
268
|
+
const log = i.log ?? (() => { });
|
|
269
|
+
const label = i.label ?? `${i.target.repo}#${i.target.number}`;
|
|
270
|
+
const started = i.startedAt ?? Date.now();
|
|
271
|
+
const { cfg, outDir, root } = i;
|
|
272
|
+
const route = runtime.engineLens;
|
|
273
|
+
const prep = prepareRound(i, route);
|
|
274
|
+
const { env, prompts, sysPath, sessionName, sessionDir, events, stderr, waveUnits } = prep;
|
|
275
|
+
let session;
|
|
276
|
+
let sink;
|
|
277
|
+
let unhear;
|
|
278
|
+
let endWave = async () => { };
|
|
279
|
+
const stopTurn = () => void session?.abort();
|
|
280
|
+
try {
|
|
281
|
+
i.signal?.throwIfAborted();
|
|
282
|
+
// Host isolation: pi discovers nothing of its own. `-ne` leaves only the
|
|
283
|
+
// extensions named below (so neither ~/.pi/agent, nor a project's `.pi/`,
|
|
284
|
+
// nor a package can add one to the session) and `-ns` no skill; lens
|
|
285
|
+
// passes get bash-guard from the lens tool's factory, not a global setting.
|
|
286
|
+
// `-nc` is deliberately absent: the cwd's context file is the reviewer stub.
|
|
287
|
+
log(`review: ${label} — ${i.files.length} files, lenses ${prompts.plannedLenses.join(" ")}`);
|
|
288
|
+
const cwd = i.cwd ?? root;
|
|
289
|
+
session = await runtime.create({
|
|
290
|
+
cwd,
|
|
291
|
+
env,
|
|
292
|
+
model: cfg.models.conversation,
|
|
293
|
+
systemPromptFile: sysPath,
|
|
294
|
+
// The extension list is the whole list: the session discovers none.
|
|
295
|
+
// The modules are the core's own, found beside this one however the
|
|
296
|
+
// package is installed; the SDK route loads their factories (the
|
|
297
|
+
// round's extras, roundsdk.ts) and a runtime without those extras
|
|
298
|
+
// refuses a spec that names extensions rather than run unguarded.
|
|
299
|
+
extensions: ROUND_EXTENSIONS.map((name) => coreExtensionFile(name)),
|
|
300
|
+
name: sessionName,
|
|
301
|
+
sessionDir,
|
|
302
|
+
eventsFile: events,
|
|
303
|
+
stderrFile: stderr,
|
|
304
|
+
limits: { timeoutMs: i.timeoutMs, ...(i.capUsd !== undefined ? { capUsd: i.capUsd } : {}) },
|
|
305
|
+
cliFlags: ["--approve", "-ne", "-ns"],
|
|
306
|
+
});
|
|
307
|
+
i.signal?.throwIfAborted();
|
|
308
|
+
// VERIFY-ON-PIN: a stop that lands once the first prompt is sent but before
|
|
309
|
+
// pi's agent has made the turn's own abort controller reaches an idle pi
|
|
310
|
+
// session's abort(); that pi then ends the turn it is about to start, rather
|
|
311
|
+
// than dropping the abort and running it in full, is assumed, not shown.
|
|
312
|
+
i.signal?.addEventListener("abort", stopTurn, { once: true });
|
|
313
|
+
// The live log hears every event, the `*_update`s too, from the first
|
|
314
|
+
// prompt on; a log that cannot be opened never costs the review.
|
|
315
|
+
if (i.live) {
|
|
316
|
+
try {
|
|
317
|
+
const heard = openRoundSink(i.live, { pr: i.target.number, session: sessionName }, env, (m) => log(`review: ${label} — ${m}`));
|
|
318
|
+
sink = heard;
|
|
319
|
+
unhear = session.subscribe((event) => heard.feed(event), { updates: true });
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
log(`review: ${label} — live log not started: ${String(err).slice(0, 200)}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// The engine starts the planned wave before the main session's first turn,
|
|
326
|
+
// so the lenses are in flight while it reads. The runner paces the sessions
|
|
327
|
+
// (its cap, its cache groups and its creation stagger, cpu-gate finding 4).
|
|
328
|
+
if (route) {
|
|
329
|
+
route.wave.clear();
|
|
330
|
+
if (waveUnits.length) {
|
|
331
|
+
const stop = new AbortController();
|
|
332
|
+
const rows = launchWave(route.wave, route.runner, waveUnits, stop.signal);
|
|
333
|
+
log(`review: ${label} — engine wave: ${rows.length} lenses started`);
|
|
334
|
+
// Ends what the session did not join, and waits for the rows to write
|
|
335
|
+
// their ledger lines (the round's price counts them).
|
|
336
|
+
endWave = async () => {
|
|
337
|
+
stop.abort();
|
|
338
|
+
let timer;
|
|
339
|
+
await Promise.race([
|
|
340
|
+
Promise.allSettled(rows.map((row) => row.done)),
|
|
341
|
+
new Promise((resolve) => (timer = setTimeout(resolve, WAVE_SETTLE_MS))),
|
|
342
|
+
]);
|
|
343
|
+
clearTimeout(timer);
|
|
344
|
+
endWave = async () => { };
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
let r = await session.prompt(prompts.order);
|
|
349
|
+
const result = {
|
|
350
|
+
prompts,
|
|
351
|
+
plannedLenses: prompts.plannedLenses,
|
|
352
|
+
piRun: r,
|
|
353
|
+
continued: false,
|
|
354
|
+
capped: r.capped === true,
|
|
355
|
+
warnings: [],
|
|
356
|
+
costUsd: null,
|
|
357
|
+
review: null,
|
|
358
|
+
};
|
|
359
|
+
const outcomePath = join(outDir, CASE_FILES.outcome);
|
|
360
|
+
// One continuation, never more: the live system's answer to a round that
|
|
361
|
+
// stopped short is redelivery, not a fresh review. Same session — a
|
|
362
|
+
// `--continue` respawn on the process runtime, a second turn on the live
|
|
363
|
+
// session on the SDK runtime — and only if there IS one: pi persists a
|
|
364
|
+
// session after its first assistant message, and `--continue` on an empty
|
|
365
|
+
// session dir silently starts a NEW session that would review with no
|
|
366
|
+
// round order at all.
|
|
367
|
+
// A round whose files are there but do not parse stopped short too (a
|
|
368
|
+
// model that broke its own JSON escaping): the same one continuation,
|
|
369
|
+
// told which file and what the parser said. So did one that wrote its
|
|
370
|
+
// outcome (the file written last) without a file the scorer reads.
|
|
371
|
+
const broken = existsSync(outcomePath)
|
|
372
|
+
? unparseableOutputs(outDir, cfg.review.render_outputs)
|
|
373
|
+
: [];
|
|
374
|
+
const missing = existsSync(outcomePath)
|
|
375
|
+
? missingOutputs(outDir, cfg.review.render_outputs)
|
|
376
|
+
: [];
|
|
377
|
+
const resumable = (existsSync(sessionDir) && readdirSync(sessionDir).some((f) => f.endsWith(".jsonl"))) ||
|
|
378
|
+
session.sessionFile !== null;
|
|
379
|
+
if (!r.timedOut && !r.streamError && !existsSync(outcomePath) && !resumable) {
|
|
380
|
+
result.error = `pi exited ${String(r.code)} before any assistant message — nothing to continue`;
|
|
381
|
+
}
|
|
382
|
+
const stoppedShort = !existsSync(outcomePath) || broken.length > 0 || missing.length > 0;
|
|
383
|
+
if (!r.timedOut &&
|
|
384
|
+
!r.streamError &&
|
|
385
|
+
!result.capped &&
|
|
386
|
+
stoppedShort &&
|
|
387
|
+
resumable &&
|
|
388
|
+
!i.signal?.aborted) {
|
|
389
|
+
const left = i.timeoutMs - (Date.now() - started);
|
|
390
|
+
if (left > 120_000) {
|
|
391
|
+
result.continued = true;
|
|
392
|
+
log(broken.length
|
|
393
|
+
? `review: ${label} — ${broken.join("; ")}, one continuation`
|
|
394
|
+
: missing.length
|
|
395
|
+
? `review: ${label} — ${missing.join(", ")} not written, one continuation`
|
|
396
|
+
: `review: ${label} — no outcome.json yet, one continuation`);
|
|
397
|
+
const delivery = await session.followUp(broken.length
|
|
398
|
+
? `Your BENCHMARK MODE files in ${outDir} cannot be read: ${broken.join("; ")}. Rewrite ${broken.length > 1 ? "them" : "it"} as valid JSON with the same content — plain double quotes, no escaped quotes around keys or values — and write ${CASE_FILES.outcome} last.`
|
|
399
|
+
: cfg.review.render_outputs
|
|
400
|
+
? `You stopped before the BENCHMARK MODE files were complete. Finish the round now and write ${CASE_FILES.findings} (with the posting fields) and, last, ${CASE_FILES.outcome} in ${outDir}.`
|
|
401
|
+
: `You stopped before the BENCHMARK MODE files were complete. Finish the round now and write ${CASE_FILES.comments}, ${CASE_FILES.review}, ${CASE_FILES.findings} and, last, ${CASE_FILES.outcome} in ${outDir}.`, {
|
|
402
|
+
timeoutMs: left,
|
|
403
|
+
// What is left of the round's cap is what the session's stats say
|
|
404
|
+
// it has spent, whichever runtime metered it.
|
|
405
|
+
...(i.capUsd !== undefined
|
|
406
|
+
? { capUsd: Math.max(0, i.capUsd - session.stats().spentUsd) }
|
|
407
|
+
: {}),
|
|
408
|
+
});
|
|
409
|
+
// The session is idle after its first turn, so the follow-up ran now.
|
|
410
|
+
if (delivery.status !== "handled")
|
|
411
|
+
throw new Error(`the continuation was not run: ${delivery.status}`);
|
|
412
|
+
r = delivery.result;
|
|
413
|
+
result.piRun = r;
|
|
414
|
+
result.capped = r.capped === true;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// The turns are over: a wave row nobody joined is not wanted any more.
|
|
418
|
+
await endWave();
|
|
419
|
+
return settleRound(i, prep, result, r, session.stats().spentUsd);
|
|
420
|
+
}
|
|
421
|
+
finally {
|
|
422
|
+
i.signal?.removeEventListener("abort", stopTurn);
|
|
423
|
+
unhear?.();
|
|
424
|
+
sink?.close();
|
|
425
|
+
await endWave();
|
|
426
|
+
await session?.dispose();
|
|
427
|
+
if (prep.ownTmp)
|
|
428
|
+
rmSync(prep.tmpDir, { recursive: true, force: true });
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
/** Read what a finished round left in `outDir`: warnings from pi's stderr, the
|
|
432
|
+
* refused login, usage and stages, the price, and the outcome, findings and
|
|
433
|
+
* rendered review. `r` is the last turn; `metered` is what the session's budget
|
|
434
|
+
* counted, the price when the stream cannot be priced. */
|
|
435
|
+
export function settleRound(i, prep, result, r, metered) {
|
|
436
|
+
const { cfg, outDir } = i;
|
|
437
|
+
const { events, stderr, startWarnings } = prep;
|
|
438
|
+
const outcomePath = join(outDir, CASE_FILES.outcome);
|
|
439
|
+
const stderrLines = readFileSync(stderr, "utf8").split("\n");
|
|
440
|
+
result.warnings = [
|
|
441
|
+
...startWarnings,
|
|
442
|
+
...new Set(stderrLines
|
|
443
|
+
.filter((l) => /warn|error|fatal|failed/i.test(l))
|
|
444
|
+
.map((l) => l.trim().slice(0, 300))),
|
|
445
|
+
].slice(0, 20);
|
|
446
|
+
if (r.streamError)
|
|
447
|
+
result.error = `output stream failed: ${r.streamError}`;
|
|
448
|
+
// A provider that refused the login says so in pi's own output: a line of
|
|
449
|
+
// stderr, or a failed assistant message in the event stream (a record
|
|
450
|
+
// field, never text a tool printed: authwatch's rule). The typed error is
|
|
451
|
+
// what authwatch and a route's exit status branch on.
|
|
452
|
+
const refused = authRefusal(stderrLines, events, r.streamError);
|
|
453
|
+
if (refused)
|
|
454
|
+
result.authError = refused;
|
|
455
|
+
// Usage is telemetry: a failure to read it must never cost the review.
|
|
456
|
+
try {
|
|
457
|
+
const lines = readFileSync(events, "utf8").split("\n");
|
|
458
|
+
result.usage = usageFromEvents(lines);
|
|
459
|
+
result.modelErrors = modelErrorsFromEvents(lines);
|
|
460
|
+
// Per-stage cost and time (stages.json; the per-phase totals ride along).
|
|
461
|
+
const stages = stagesFromEvents(lines);
|
|
462
|
+
writeFileSync(join(outDir, "stages.json"), JSON.stringify(stages, null, 2) + "\n");
|
|
463
|
+
result.stages = stages.phases;
|
|
464
|
+
// pi's own stderr reports what never reached a message (a refused
|
|
465
|
+
// connection, a 429 before the first token).
|
|
466
|
+
for (const w of result.warnings) {
|
|
467
|
+
const kind = modelErrorKind(w);
|
|
468
|
+
if (kind === "usage_limit")
|
|
469
|
+
result.modelErrors.usage_limit = (result.modelErrors.usage_limit ?? 0) + 1;
|
|
470
|
+
else if (kind === "rate_limited")
|
|
471
|
+
result.modelErrors.rate_limited++;
|
|
472
|
+
else if (kind === "overloaded")
|
|
473
|
+
result.modelErrors.overloaded++;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
catch (err) {
|
|
477
|
+
result.warnings.push(`usage unreadable: ${String(err).slice(0, 200)}`);
|
|
478
|
+
}
|
|
479
|
+
// The price of the whole round, lens children included: the case dir's
|
|
480
|
+
// event stream and lens ledger priced as the bench prices them. A stream
|
|
481
|
+
// that cannot be priced falls back to what the session's budget metered
|
|
482
|
+
// (zero when no cap was set, so unpriced).
|
|
483
|
+
try {
|
|
484
|
+
result.costUsd = caseCostUsd(outDir)?.usd ?? (metered > 0 ? metered : null);
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
result.costUsd = metered > 0 ? metered : null;
|
|
488
|
+
}
|
|
489
|
+
const outcome = readJson(outcomePath);
|
|
490
|
+
if (outcome !== undefined)
|
|
491
|
+
result.outcome = outcome;
|
|
492
|
+
else if (result.authError && result.error === undefined)
|
|
493
|
+
result.error = `the provider refused the login: ${result.authError.message.slice(0, 200)}`;
|
|
494
|
+
// `[review] render_outputs`: comments.json and review.md rendered from the
|
|
495
|
+
// findings record, as production's render-review.sh renders them. A
|
|
496
|
+
// session that wrote its own files anyway is overruled: the record is the
|
|
497
|
+
// source.
|
|
498
|
+
if (cfg.review.render_outputs) {
|
|
499
|
+
const record = readJson(join(outDir, CASE_FILES.findings));
|
|
500
|
+
if (record !== undefined) {
|
|
501
|
+
const out = renderBenchOutputs(record, outcome, cfg);
|
|
502
|
+
writeFileSync(join(outDir, CASE_FILES.comments), JSON.stringify(out.rendered.comments, null, 2) + "\n");
|
|
503
|
+
writeFileSync(join(outDir, CASE_FILES.review), out.rendered.body);
|
|
504
|
+
// The duplicate-merge post-check's and the posting policy's
|
|
505
|
+
// dispositions, kept in the record (the session's own beside it).
|
|
506
|
+
if (out.record !== record) {
|
|
507
|
+
writeFileSync(join(outDir, POLICED_ORIGINALS[2]), JSON.stringify(record, null, 2) + "\n");
|
|
508
|
+
writeFileSync(join(outDir, CASE_FILES.findings), JSON.stringify(out.record, null, 2) + "\n");
|
|
509
|
+
}
|
|
510
|
+
// The `[posting]` cut ran inside the render step, as on the live
|
|
511
|
+
// route — so a caller must not cut a second time.
|
|
512
|
+
if (!isDefaultPosting(cfg.posting)) {
|
|
513
|
+
result.renderedPosting = {
|
|
514
|
+
kept: out.rendered.comments.length + out.rendered.in_body,
|
|
515
|
+
withheld: out.withheld.map((w) => ({
|
|
516
|
+
path: w.path ?? "",
|
|
517
|
+
line: w.line ?? 0,
|
|
518
|
+
source: w.inline ? "inline" : "body",
|
|
519
|
+
cls: w.cls,
|
|
520
|
+
severity: w.severity,
|
|
521
|
+
word: w.word,
|
|
522
|
+
title: w.title,
|
|
523
|
+
})),
|
|
524
|
+
body: cfg.posting.body,
|
|
525
|
+
};
|
|
526
|
+
writeFileSync(join(outDir, POLICED_ORIGINALS[3]), JSON.stringify(result.renderedPosting, null, 2) + "\n");
|
|
527
|
+
}
|
|
528
|
+
if (out.rendered.problems.length)
|
|
529
|
+
result.warnings.push(...out.rendered.problems.slice(0, 10).map((p) => `render: ${p}`.slice(0, 300)));
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
const findings = readJson(join(outDir, CASE_FILES.findings));
|
|
533
|
+
if (findings !== undefined)
|
|
534
|
+
result.findings = findings;
|
|
535
|
+
const comments = readJson(join(outDir, CASE_FILES.comments));
|
|
536
|
+
if (Array.isArray(comments))
|
|
537
|
+
result.comments = comments;
|
|
538
|
+
const reviewPath = join(outDir, CASE_FILES.review);
|
|
539
|
+
if (existsSync(reviewPath))
|
|
540
|
+
result.review = readFileSync(reviewPath, "utf8");
|
|
541
|
+
return result;
|
|
542
|
+
}
|
|
543
|
+
//# sourceMappingURL=round.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round.js","sourceRoot":"","sources":["../../../src/engine/round.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CoreConfig } from "../reviewconfig.js";
|
|
2
|
+
import { type ProfileLookup } from "../profiles.js";
|
|
3
|
+
/** Build the lens + validator agents into `<root>/.pi/agents` — the PROJECT
|
|
4
|
+
* scope the subagents glue reads when QCR_SUBAGENT_SCOPE=project. The VM uses
|
|
5
|
+
* the user scope (a symlink in its own pihome); here the user scope is the
|
|
6
|
+
* companion's shared agent dir, whose `agents` belongs to the companion.
|
|
7
|
+
* `out` overrides the dir: the `qcr review` route builds into its private agent
|
|
8
|
+
* dir's `agents` (src/hostroute.ts) and runs with the user scope. */
|
|
9
|
+
export declare function buildBenchAgents(root: string, cfg: CoreConfig, out?: string,
|
|
10
|
+
/** A profile's replacements (packages/pi-plugin/src/profileoverrides.ts): `readFile` serves a
|
|
11
|
+
* replaced agent or prompt, `lookup` adds the repo profile's layer. Absent:
|
|
12
|
+
* the shipped files and the named profile alone, as always. */
|
|
13
|
+
profile?: {
|
|
14
|
+
readFile?: (path: string) => string;
|
|
15
|
+
lookup?: ProfileLookup;
|
|
16
|
+
}): number;
|
|
17
|
+
//# sourceMappingURL=roundagents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roundagents.d.ts","sourceRoot":"","sources":["../../../src/engine/roundagents.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE9F;;;;;qEAKqE;AACrE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,UAAU,EACf,GAAG,GAAE,MAAoC;AACzC;;+DAE+D;AAC/D,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GAC5E,MAAM,CA0BR"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// The lens and validator agents a one-shot round's session resolves, built from
|
|
2
|
+
// the shipped agents with the production addenda: the bench builds them into
|
|
3
|
+
// its project scope, `qcr review` into its run's private agent dir
|
|
4
|
+
// (src/hostroute.ts).
|
|
5
|
+
import { mkdirSync, readdirSync, rmSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { buildAgents, configAddenda, identityVars, PASS_ADDENDA } from "../include.js";
|
|
8
|
+
import { lensTuningAddenda, roundAgentModels } from "../lenstuning.js";
|
|
9
|
+
import { postingPolicyAddenda } from "../postingpolicy.js";
|
|
10
|
+
import { loadProfileAddenda, loadProfileEcosystem } from "../profiles.js";
|
|
11
|
+
/** Build the lens + validator agents into `<root>/.pi/agents` — the PROJECT
|
|
12
|
+
* scope the subagents glue reads when QCR_SUBAGENT_SCOPE=project. The VM uses
|
|
13
|
+
* the user scope (a symlink in its own pihome); here the user scope is the
|
|
14
|
+
* companion's shared agent dir, whose `agents` belongs to the companion.
|
|
15
|
+
* `out` overrides the dir: the `qcr review` route builds into its private agent
|
|
16
|
+
* dir's `agents` (src/hostroute.ts) and runs with the user scope. */
|
|
17
|
+
export function buildBenchAgents(root, cfg, out = join(root, ".pi", "agents"),
|
|
18
|
+
/** A profile's replacements (packages/pi-plugin/src/profileoverrides.ts): `readFile` serves a
|
|
19
|
+
* replaced agent or prompt, `lookup` adds the repo profile's layer. Absent:
|
|
20
|
+
* the shipped files and the named profile alone, as always. */
|
|
21
|
+
profile = {}) {
|
|
22
|
+
// Empty it rather than remove it: in the sandbox it is a tmpfs MOUNTPOINT
|
|
23
|
+
// (the root filesystem is read-only), and a mountpoint cannot be rmdir'd.
|
|
24
|
+
mkdirSync(out, { recursive: true });
|
|
25
|
+
for (const f of readdirSync(out))
|
|
26
|
+
rmSync(join(out, f), { recursive: true, force: true });
|
|
27
|
+
const built = buildAgents(join(root, "agents"), out, {
|
|
28
|
+
// The bench round runs without the memory extension (header: memory off).
|
|
29
|
+
memory: false,
|
|
30
|
+
root,
|
|
31
|
+
...(profile.readFile ? { readFile: profile.readFile } : {}),
|
|
32
|
+
tiers: cfg.models.tiers,
|
|
33
|
+
riskPasses: cfg.models.risk_passes,
|
|
34
|
+
validateTier: cfg.models.validate_tier,
|
|
35
|
+
vars: identityVars(cfg),
|
|
36
|
+
ecosystem: loadProfileEcosystem(root, cfg.review.profile, profile.lookup),
|
|
37
|
+
models: roundAgentModels(cfg),
|
|
38
|
+
addenda: [
|
|
39
|
+
...PASS_ADDENDA,
|
|
40
|
+
...configAddenda(cfg.review),
|
|
41
|
+
...loadProfileAddenda(root, cfg.review.profile, profile.lookup),
|
|
42
|
+
...lensTuningAddenda(cfg.lenses),
|
|
43
|
+
// The profile's `[posting]` policy, compiled for the validator.
|
|
44
|
+
...postingPolicyAddenda(cfg.posting),
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
return built.length;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=roundagents.js.map
|