@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,331 @@
|
|
|
1
|
+
import { parsePrIdentity as parseOwnPr } from "../src/pr-identity.js";
|
|
2
|
+
// ledger-pin — keeps the review ledger alive across pi's native compaction.
|
|
3
|
+
//
|
|
4
|
+
// The PR session maintains a fenced block that starts with "LEDGER PR #<n> @
|
|
5
|
+
// <sha>" (see prompts/conversation-system.md). Compaction is token-driven and
|
|
6
|
+
// would happily summarise it away, so this extension hooks
|
|
7
|
+
// session_before_compact, finds the most recent ledger block in the entries
|
|
8
|
+
// the hook hands it, and returns a REAL compaction: pi's own
|
|
9
|
+
// default summary, produced by calling the package's exported `compact()`
|
|
10
|
+
// (the function pi would have called itself), with the pinned ledger block
|
|
11
|
+
// appended to it VERBATIM. That summary is what pi puts back in front of the
|
|
12
|
+
// model after compaction, so the ledger survives word for word. Any failure
|
|
13
|
+
// on that path (no model, no auth, the summariser threw, a shape we do not
|
|
14
|
+
// recognise) returns nothing, and pi runs its default compaction unchanged:
|
|
15
|
+
// never a cancelled compaction, never a wedged session. The ledger then still
|
|
16
|
+
// comes back through the daemon, because every round order re-hands the
|
|
17
|
+
// mirrored snapshot (packages/pi-plugin/src/ledgercarry.ts).
|
|
18
|
+
//
|
|
19
|
+
// pi 1.0.0 reads only `cancel` and `compaction` from the handler's result, so
|
|
20
|
+
// returning a whole compaction is the only way to pin anything.
|
|
21
|
+
//
|
|
22
|
+
// It also mirrors the newest ledger block to state/ledgers/<session>.md after
|
|
23
|
+
// every turn — that snapshot is what archiveAndClose() copies into
|
|
24
|
+
// archive/pr-<n>/ (the session JSONL alone would need parsing).
|
|
25
|
+
//
|
|
26
|
+
// Only a block whose PR number equals the session's OWN PR (QCR_PR, riding
|
|
27
|
+
// the pi command line per session) is ever mirrored or pinned. Sessions quote
|
|
28
|
+
// sibling PRs' ledger headers when reading their posted reviews for format
|
|
29
|
+
// reference; without the filter a sibling's ledger would be persisted over
|
|
30
|
+
// the session's own. A session with no / garbage
|
|
31
|
+
// QCR_PR (the overseer) mirrors NO PR ledger, ever — fail safe is no mirror.
|
|
32
|
+
//
|
|
33
|
+
// pi is a dependency of this repo, so the pi API is typechecked against its own
|
|
34
|
+
// declarations; what a live session does with it stays VERIFY-ON-PIN.
|
|
35
|
+
// The compaction contract was read out of pi 1.0.0's shipped dist (the
|
|
36
|
+
// `qcr-bench:fast1` image, docker create + docker cp, no container run); each
|
|
37
|
+
// tag below names the file and symbol it was checked against.
|
|
38
|
+
import { backtickFence } from "../src/codespan.js";
|
|
39
|
+
import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
40
|
+
import { dirname, join } from "node:path";
|
|
41
|
+
import { randomUUID } from "node:crypto";
|
|
42
|
+
// A block runs from its "LEDGER PR #<n>" header to the next fence / blank
|
|
43
|
+
// line + heading / NEXT ledger header / end — the last terminator keeps a
|
|
44
|
+
// quoted sibling header from being swallowed into the preceding block's body.
|
|
45
|
+
const LEDGER_RE = /(^|\n)\s*LEDGER\s+PR\s+#(\d+)[^\n]*\n[\s\S]*?(?=\n```|\n\s*\n\s*#|\n\s*LEDGER\s+PR\s+#|$)/g;
|
|
46
|
+
/** The session's own PR number from QCR_PR — undefined for the overseer (no
|
|
47
|
+
* QCR_PR) and for anything that is not a plain digit string (fail safe). */
|
|
48
|
+
export { parsePrIdentity as parseOwnPr } from "../src/pr-identity.js";
|
|
49
|
+
/** Deep-walk an unknown payload collecting every string that could be message
|
|
50
|
+
* text. // VERIFY-ON-PIN: the event payload shape is undocumented, so this is
|
|
51
|
+
* deliberately shape-agnostic rather than assuming `event.messages`. */
|
|
52
|
+
export function collectText(value, out = [], depth = 0) {
|
|
53
|
+
if (depth > 8 || value == null)
|
|
54
|
+
return out;
|
|
55
|
+
if (typeof value === "string") {
|
|
56
|
+
out.push(value);
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
if (Array.isArray(value)) {
|
|
60
|
+
for (const v of value)
|
|
61
|
+
collectText(v, out, depth + 1);
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
if (typeof value === "object") {
|
|
65
|
+
for (const v of Object.values(value))
|
|
66
|
+
collectText(v, out, depth + 1);
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
// The format's own example in the system prompt (prompts/conversation-system.md
|
|
71
|
+
// renders `LEDGER PR #<n> @ <head-sha>` with the PR's number filled in) names a
|
|
72
|
+
// placeholder where a ledger names its head. A worker that wrote no ledger in a
|
|
73
|
+
// recheck mirrored that example over #6114's real ledger (2026-10-22).
|
|
74
|
+
const PLACEHOLDER_HEAD_RE = /^\s*LEDGER\s+PR\s+#\d+\s*@\s*</;
|
|
75
|
+
/** A block opened right after a fence of four or more backticks runs to that
|
|
76
|
+
* fence's close, so a three-backtick quote inside it stays part of the ledger.
|
|
77
|
+
* undefined when no such fence encloses the header. */
|
|
78
|
+
function wrappedBlock(text, match) {
|
|
79
|
+
const start = (match.index ?? 0) + (match[1] ?? "").length;
|
|
80
|
+
const open = /(?:^|\n)(`{4,})[^\n`]*\n\s*$/.exec(text.slice(0, start));
|
|
81
|
+
if (!open)
|
|
82
|
+
return undefined;
|
|
83
|
+
const rest = text.slice(start);
|
|
84
|
+
const close = new RegExp(`\\n\\s*${open[1]}\`*[ \\t]*(?:\\n|$)`).exec(rest);
|
|
85
|
+
const end = close ? close.index : rest.length;
|
|
86
|
+
return rest.slice(0, end);
|
|
87
|
+
}
|
|
88
|
+
/** The last (most recent) LEDGER block for the session's OWN PR, trimmed.
|
|
89
|
+
* Blocks naming any other PR are ignored (reported via onIgnore) — even when
|
|
90
|
+
* they appear after the own-PR block. With no own PR (overseer / garbage
|
|
91
|
+
* QCR_PR) every block is ignored and nothing is returned. A block whose head is
|
|
92
|
+
* a `<placeholder>` is the format's example, never a ledger, and is skipped. */
|
|
93
|
+
export function extractLedger(texts, ownPr, onIgnore = () => { }) {
|
|
94
|
+
let found;
|
|
95
|
+
for (const text of texts) {
|
|
96
|
+
for (const match of text.matchAll(LEDGER_RE)) {
|
|
97
|
+
const pr = Number(match[2]);
|
|
98
|
+
const block = wrappedBlock(text, match) ?? match[0];
|
|
99
|
+
if (PLACEHOLDER_HEAD_RE.test(block.trim()))
|
|
100
|
+
continue;
|
|
101
|
+
if (ownPr !== undefined && pr === ownPr)
|
|
102
|
+
found = block.trim();
|
|
103
|
+
else
|
|
104
|
+
onIgnore(pr);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return found;
|
|
108
|
+
}
|
|
109
|
+
export function ledgerSnapshotPath(env, session, cwd) {
|
|
110
|
+
const explicit = env.QCR_LEDGER_FILE?.trim();
|
|
111
|
+
if (explicit)
|
|
112
|
+
return explicit;
|
|
113
|
+
const root = env.QCR_SANDBOX_ROOT?.trim() || cwd;
|
|
114
|
+
return join(root, "state", "ledgers", `${session}.md`);
|
|
115
|
+
}
|
|
116
|
+
function writeSnapshot(path, body) {
|
|
117
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
118
|
+
let previous = "";
|
|
119
|
+
try {
|
|
120
|
+
previous = readFileSync(path, "utf8");
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* first snapshot */
|
|
124
|
+
}
|
|
125
|
+
if (previous.trim() === body.trim())
|
|
126
|
+
return;
|
|
127
|
+
const tmp = `${path}.tmp-${process.pid}-${randomUUID()}`;
|
|
128
|
+
try {
|
|
129
|
+
writeFileSync(tmp, `${body}\n`);
|
|
130
|
+
renameSync(tmp, path);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
rmSync(tmp, { force: true });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Sentinels around the pinned block, so the next compaction can strip the
|
|
137
|
+
* previous copy out of `previousSummary` before pi's summariser sees it (it
|
|
138
|
+
* would otherwise paraphrase a stale ledger into the new summary). */
|
|
139
|
+
export const PIN_OPEN = "<!-- qcr:ledger-pin -->";
|
|
140
|
+
export const PIN_CLOSE = "<!-- /qcr:ledger-pin -->";
|
|
141
|
+
/** A fence longer than any backtick run in `body`, so a ledger that quotes
|
|
142
|
+
* code can never close its own fence early. */
|
|
143
|
+
export const fenceFor = backtickFence;
|
|
144
|
+
/** The block appended to the compaction summary: PR meta + the ledger,
|
|
145
|
+
* verbatim, between the sentinels. */
|
|
146
|
+
export function pinnedBlock(meta, ledger) {
|
|
147
|
+
const fence = fenceFor(ledger);
|
|
148
|
+
return [
|
|
149
|
+
PIN_OPEN,
|
|
150
|
+
"PINNED LEDGER — your review ledger exactly as you last wrote it, appended",
|
|
151
|
+
"verbatim to this compaction summary by the ledger-pin extension. It is the",
|
|
152
|
+
"checklist the next round starts from; the summary above is a paraphrase.",
|
|
153
|
+
...(meta ? ["", meta] : []),
|
|
154
|
+
"",
|
|
155
|
+
fence,
|
|
156
|
+
ledger,
|
|
157
|
+
fence,
|
|
158
|
+
PIN_CLOSE,
|
|
159
|
+
].join("\n");
|
|
160
|
+
}
|
|
161
|
+
/** `summary` with every pinned block (sentinels inclusive) removed. */
|
|
162
|
+
export function stripPinned(summary) {
|
|
163
|
+
let out = summary;
|
|
164
|
+
for (;;) {
|
|
165
|
+
const open = out.indexOf(PIN_OPEN);
|
|
166
|
+
if (open < 0)
|
|
167
|
+
return out.trimEnd();
|
|
168
|
+
const close = out.indexOf(PIN_CLOSE, open);
|
|
169
|
+
if (close < 0)
|
|
170
|
+
return out.slice(0, open).trimEnd();
|
|
171
|
+
out = out.slice(0, open).trimEnd() + out.slice(close + PIN_CLOSE.length);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Load `compact` from the installed (= pinned) pi package, resolved inside
|
|
175
|
+
* the pi process, so it lands on the running instance
|
|
176
|
+
* (tests/pi-resolution.test.ts). VERIFY-ON-PIN: pi 1.0.0 `dist/index.js` exports `compact`
|
|
177
|
+
* (re-exported from `dist/core/compaction/index.js`). Undefined when the
|
|
178
|
+
* import fails or the export is missing. */
|
|
179
|
+
export async function loadPiCompact() {
|
|
180
|
+
try {
|
|
181
|
+
const pkg = (await import("@earendil-works/pi-coding-agent"));
|
|
182
|
+
return typeof pkg.compact === "function" ? pkg.compact : undefined;
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function isPreparation(value) {
|
|
189
|
+
if (!value || typeof value !== "object")
|
|
190
|
+
return false;
|
|
191
|
+
const p = value;
|
|
192
|
+
return typeof p.firstKeptEntryId === "string" && typeof p.tokensBefore === "number";
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The pinned compaction: pi's own default summary with the pinned block
|
|
196
|
+
* appended. It mirrors pi 1.0.0's `AgentSession._runDefaultCompaction`
|
|
197
|
+
* (dist/core/agent-session.js): resolve request auth for the session model,
|
|
198
|
+
* then `compact(preparation, model, apiKey, headers, customInstructions,
|
|
199
|
+
* signal, thinkingLevel, streamFn, env)`. The stream function is the model
|
|
200
|
+
* registry's `streamSimple`, which is what pi's own agent streamFn delegates
|
|
201
|
+
* to (dist/core/sdk.js, `modelRuntime.streamSimple`; ModelRegistry.streamSimple
|
|
202
|
+
* is that same runtime call). Returns undefined on ANY failure, so pi falls
|
|
203
|
+
* back to its default compaction rather than cancelling one.
|
|
204
|
+
* VERIFY-ON-PIN, whole function: every name here is from pi 1.0.0's dist and
|
|
205
|
+
* has not yet run in a live session.
|
|
206
|
+
*/
|
|
207
|
+
export async function pinnedCompaction(event, ctx, pinned, compactFn, log = () => { }) {
|
|
208
|
+
const fail = (why) => {
|
|
209
|
+
log(`[ledger-pin] pinned compaction unavailable (${why}); pi runs its default compaction and the ledger returns with the next round order`);
|
|
210
|
+
return undefined;
|
|
211
|
+
};
|
|
212
|
+
if (!compactFn)
|
|
213
|
+
return fail("pi's compact() is not exported by the installed package");
|
|
214
|
+
const preparation = event.preparation;
|
|
215
|
+
if (!isPreparation(preparation))
|
|
216
|
+
return fail("event.preparation has no firstKeptEntryId/tokensBefore");
|
|
217
|
+
const registry = ctx?.modelRegistry;
|
|
218
|
+
const model = ctx?.model;
|
|
219
|
+
if (!registry || typeof registry.getApiKeyAndHeaders !== "function")
|
|
220
|
+
return fail("no model registry");
|
|
221
|
+
if (!model || typeof model !== "object")
|
|
222
|
+
return fail("no session model");
|
|
223
|
+
try {
|
|
224
|
+
const auth = await registry.getApiKeyAndHeaders(model);
|
|
225
|
+
if (!auth.ok)
|
|
226
|
+
return fail(`auth: ${auth.error}`);
|
|
227
|
+
const requestModel = auth.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model;
|
|
228
|
+
const forSummary = typeof preparation.previousSummary === "string"
|
|
229
|
+
? { ...preparation, previousSummary: stripPinned(preparation.previousSummary) }
|
|
230
|
+
: preparation;
|
|
231
|
+
const custom = typeof event.customInstructions === "string" ? event.customInstructions : undefined;
|
|
232
|
+
const signal = event.signal instanceof AbortSignal ? event.signal : undefined;
|
|
233
|
+
const result = await compactFn(forSummary, requestModel, auth.apiKey,
|
|
234
|
+
// ProviderHeaders allows null values (a header to drop); compact() types
|
|
235
|
+
// them as strings, and pi hands its own summariser the same object.
|
|
236
|
+
auth.headers, custom, signal, ctx?.thinkingLevel, (m, c, o) => registry.streamSimple(m, c, o), auth.env);
|
|
237
|
+
if (!result ||
|
|
238
|
+
typeof result.summary !== "string" ||
|
|
239
|
+
typeof result.firstKeptEntryId !== "string" ||
|
|
240
|
+
typeof result.tokensBefore !== "number")
|
|
241
|
+
return fail("compact() returned no usable result");
|
|
242
|
+
return {
|
|
243
|
+
compaction: {
|
|
244
|
+
...result,
|
|
245
|
+
summary: `${stripPinned(result.summary)}\n\n${pinned}`,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
return fail(`summariser threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** The custom entry type ledger-pin writes into the session file. */
|
|
254
|
+
export const LEDGER_ENTRY_TYPE = "qcr-review-ledger";
|
|
255
|
+
/** The config the env describes (QCR_SESSION_NAME, QCR_PR_META, QCR_PR, and
|
|
256
|
+
* the snapshot path from ledgerSnapshotPath, `cwd` standing in for an absent
|
|
257
|
+
* sandbox root). */
|
|
258
|
+
export function ledgerPinConfigFromEnv(env, cwd, deps = {}) {
|
|
259
|
+
const session = env.QCR_SESSION_NAME?.trim() || "session";
|
|
260
|
+
return {
|
|
261
|
+
prMeta: env.QCR_PR_META?.trim() ?? "",
|
|
262
|
+
ownPr: parseOwnPr(env.QCR_PR),
|
|
263
|
+
snapshotPath: ledgerSnapshotPath(env, session, cwd),
|
|
264
|
+
...deps,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** The factory an SDK session loads. Its env shim is extensions/cli/ledger-pin.ts. */
|
|
268
|
+
export function createLedgerPin(config) {
|
|
269
|
+
return (pi) => {
|
|
270
|
+
registerLedgerPin(pi, config);
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function registerLedgerPin(pi, config) {
|
|
274
|
+
const loadCompact = config.loadCompact ?? loadPiCompact;
|
|
275
|
+
const log = config.log ?? (() => { });
|
|
276
|
+
const { prMeta: meta, ownPr, snapshotPath } = config;
|
|
277
|
+
let lastLedger = "";
|
|
278
|
+
let persistedLedger = "";
|
|
279
|
+
const capture = (source) => {
|
|
280
|
+
const onIgnore = (pr) => {
|
|
281
|
+
const who = ownPr === undefined ? "session has no QCR_PR" : `own PR is #${ownPr}`;
|
|
282
|
+
log(`[ledger-pin] debug: ignoring LEDGER PR #${pr} (${who})`);
|
|
283
|
+
};
|
|
284
|
+
const ledger = extractLedger(collectText(source), ownPr, onIgnore) ?? lastLedger;
|
|
285
|
+
if (ledger)
|
|
286
|
+
lastLedger = ledger;
|
|
287
|
+
if (ledger && ledger !== persistedLedger) {
|
|
288
|
+
try {
|
|
289
|
+
writeSnapshot(snapshotPath, ledger);
|
|
290
|
+
persistedLedger = ledger;
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
log(`[ledger-pin] snapshot write failed: ${String(err)}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return ledger;
|
|
297
|
+
};
|
|
298
|
+
// VERIFY-ON-PIN: "turn_end". pi 1.0.0 `TurnEndEvent` (dist/core/extensions/
|
|
299
|
+
// types.d.ts) carries the turn's `message` and `toolResults`; the walk stays
|
|
300
|
+
// shape-agnostic.
|
|
301
|
+
pi.on("turn_end", (event) => {
|
|
302
|
+
capture(event);
|
|
303
|
+
});
|
|
304
|
+
// VERIFY-ON-PIN: pi 1.0.0 `SessionBeforeCompactEvent` (dist/core/extensions/
|
|
305
|
+
// types.d.ts) is { preparation, branchEntries, customInstructions?, reason,
|
|
306
|
+
// willRetry, signal }. The handler gets (event, ctx: ExtensionContext) and
|
|
307
|
+
// may return `SessionBeforeCompactResult` = { cancel?, compaction? }, the
|
|
308
|
+
// only two keys `dist/core/agent-session.js` reads (both `compact()` and
|
|
309
|
+
// `_runAutoCompaction()`). The ledger is looked for in `branchEntries`
|
|
310
|
+
// (oldest first, so the newest own block wins), falling back to the whole
|
|
311
|
+
// event if that field is ever missing.
|
|
312
|
+
pi.on("session_before_compact", async (event, ctx) => {
|
|
313
|
+
const ledger = capture(Array.isArray(event.branchEntries) ? event.branchEntries : event);
|
|
314
|
+
if (!ledger)
|
|
315
|
+
return;
|
|
316
|
+
// Persist it into the session file too, so archival never depends on the
|
|
317
|
+
// summariser. VERIFY-ON-PIN: pi 1.0.0 `ExtensionAPI.appendEntry<T>(
|
|
318
|
+
// customType: string, data?: T): void` (dist/core/extensions/types.d.ts),
|
|
319
|
+
// implemented in dist/core/agent-session.js as
|
|
320
|
+
// `sessionManager.appendCustomEntry(customType, data)`: a `custom` entry,
|
|
321
|
+
// never sent to the model.
|
|
322
|
+
try {
|
|
323
|
+
pi.appendEntry?.(LEDGER_ENTRY_TYPE, { pr: ownPr, ledger, meta });
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
log(`[ledger-pin] appendEntry failed: ${String(err)}`);
|
|
327
|
+
}
|
|
328
|
+
return pinnedCompaction(event, ctx, pinnedBlock(meta, ledger), await loadCompact(), log);
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=ledger-pin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-pin.js","sourceRoot":"","sources":["../../extensions/ledger-pin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ExtensionFactory, ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type AgentRegistry } from "../src/engine/lens/registry.js";
|
|
3
|
+
import { type LensRunConfig } from "../src/engine/lens/runlens.js";
|
|
4
|
+
import { LENS_TOOL, LENS_WAVE_TOOL, type LensToolDeps } from "../src/engine/lens/tool.js";
|
|
5
|
+
import { LensWave } from "../src/engine/lens/wave.js";
|
|
6
|
+
import { PiHost } from "../src/engine/pisdk.js";
|
|
7
|
+
export { LENS_TOOL, LENS_WAVE_TOOL };
|
|
8
|
+
/** The two tools as pi ToolDefinitions, over `deps`. */
|
|
9
|
+
export declare function lensTools(deps: LensToolDeps): ToolDefinition[];
|
|
10
|
+
/** The factory that registers `lens` and `lens_wave` on a pi. */
|
|
11
|
+
export declare function createLens(deps: LensToolDeps): ExtensionFactory;
|
|
12
|
+
/** The runner of an interactive pi, from its environment. Exported so the shim's
|
|
13
|
+
* wiring can be tested with a host of its own, and so an engine route (the bench)
|
|
14
|
+
* can build its round's runner the same way over agents it keeps elsewhere
|
|
15
|
+
* (`registry`; omitted: the agent dir's own `agents`). */
|
|
16
|
+
export declare function lensRunConfigFromEnv(env: Readonly<Record<string, string | undefined>>, host: PiHost, cwd: string, registry?: AgentRegistry): LensRunConfig;
|
|
17
|
+
/** The interactive pi's lens tools and the board and runner behind them. */
|
|
18
|
+
export interface InteractiveLens {
|
|
19
|
+
/** Registers `lens` and `lens_wave` on a pi. */
|
|
20
|
+
factory: ExtensionFactory;
|
|
21
|
+
/** The runner a pass starts on (builds the host on its first pass). */
|
|
22
|
+
runner: LensToolDeps["runner"];
|
|
23
|
+
/** The rows in flight: what `lens_wave` joins. A round's wave starts on it. */
|
|
24
|
+
wave: LensWave;
|
|
25
|
+
}
|
|
26
|
+
/** The interactive pi's lens tools over `makeHost`, which builds the PiHost on
|
|
27
|
+
* the first pass. Exported so a test can hand it a host of its own, and so the
|
|
28
|
+
* debug round (extensions/debug-round.ts) can start its planned wave on the very
|
|
29
|
+
* board and runner the session's `lens_wave` reads. */
|
|
30
|
+
export declare function interactiveLensBoard(env: Readonly<Record<string, string | undefined>>, cwd: () => string, makeHost: (agentDir: string) => Promise<PiHost>,
|
|
31
|
+
/** Final say on the runner's config (the debug round adds the reviewer stub,
|
|
32
|
+
* the bash env allowlist and the context pack). */
|
|
33
|
+
adjust?: (config: LensRunConfig) => LensRunConfig): InteractiveLens;
|
|
34
|
+
export declare function interactiveLens(env: Readonly<Record<string, string | undefined>>, cwd: () => string, makeHost: (agentDir: string) => Promise<PiHost>,
|
|
35
|
+
/** Where the runner's warnings go (`[lens] …`), one line each: the host's.
|
|
36
|
+
* Omitted: nowhere. */
|
|
37
|
+
warn?: (line: string) => void): ExtensionFactory;
|
|
38
|
+
/** A runner config adjustment that sends its warnings to `warn`, prefixed. */
|
|
39
|
+
export declare function lensWarnTo(warn: ((line: string) => void) | undefined): (config: LensRunConfig) => LensRunConfig;
|
|
40
|
+
/** The host an interactive pi's lens passes run on, from its env. `homeDir` is
|
|
41
|
+
* the user's home the host resolved (the tool fence keeps its `.pi` out). */
|
|
42
|
+
export declare function interactiveHostFor(env: Readonly<Record<string, string | undefined>>, homeDir?: string): (agentDir: string) => Promise<PiHost>;
|
|
43
|
+
//# sourceMappingURL=lens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../extensions/lens.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EACf,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,SAAS,EACT,cAAc,EAEd,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAShD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAErC,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,EAAE,CAE9D;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAI/D;AAcD;;;0DAG0D;AAC1D,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,aAAa,GACvB,aAAa,CAqBf;AA6CD,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,uEAAuE;IACvE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,+EAA+E;IAC/E,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;uDAGuD;AACvD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,GAAG,EAAE,MAAM,MAAM,EACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AAC/C;mDACmD;AACnD,MAAM,GAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAwB,GAC1D,eAAe,CAIjB;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,GAAG,EAAE,MAAM,MAAM,EACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AAC/C;uBACuB;AACvB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC5B,gBAAgB,CAElB;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GACzC,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,CAE1C;AAED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAEvC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// lens — our lens tools (`lens`, `lens_wave`) as a pi extension, the interactive
|
|
2
|
+
// pi's way to run lenses in-process on the SDK.
|
|
3
|
+
//
|
|
4
|
+
// The tools themselves are packages/pi-plugin/src/engine/lens/tool.ts; this file gives them to pi,
|
|
5
|
+
// in the two shapes the hosts want:
|
|
6
|
+
//
|
|
7
|
+
// lensTools(deps) the two ToolDefinitions, for an SDK main session's
|
|
8
|
+
// `customTools` (the engine routes hand them over data,
|
|
9
|
+
// packages/pi-plugin/src/engine/lens/engine-tools.ts)
|
|
10
|
+
// createLens(deps) the factory that registers them on a pi
|
|
11
|
+
// extensions/cli/lens.ts the env shim for an interactive pi (a debug round, the
|
|
12
|
+
// companion): it builds the lens runner on first use
|
|
13
|
+
//
|
|
14
|
+
// The tmux bot does NOT load this file. pi's native `subagent` and the glue's
|
|
15
|
+
// `launch_plan` (extensions/subagents.ts) are retired. A lens session is
|
|
16
|
+
// never given either of these tools (the runner refuses an agent file that
|
|
17
|
+
// lists one, include.ts strips them at build time), so a pass cannot fan out.
|
|
18
|
+
// They ride the session's own extension list, never the global settings.json.
|
|
19
|
+
//
|
|
20
|
+
// The shim's lens sessions are SDK sessions of this pi process. It builds a
|
|
21
|
+
// PiHost over the pi's own agent dir (`PI_CODING_AGENT_DIR`) with a read-only
|
|
22
|
+
// copy of its login, and leaves the HTTP dispatcher to the CLI pi
|
|
23
|
+
// (`ownsProcess` false). The host is built when the first lens is asked for, so
|
|
24
|
+
// a missing login fails that call, never the pi's start-up. This is the one
|
|
25
|
+
// extension that may reach packages/pi-plugin/src/engine/pisdk.ts (tests/helpers/engine-fences.ts).
|
|
26
|
+
//
|
|
27
|
+
// VERIFY-ON-PIN: defineTool's and registerTool's definition shape, as in
|
|
28
|
+
// finding-clusters.ts.
|
|
29
|
+
import { dirname, isAbsolute, join } from "node:path";
|
|
30
|
+
import { defineTool } from "@earendil-works/pi-coding-agent";
|
|
31
|
+
import { agentDirSettings } from "../src/engine/agentdir.js";
|
|
32
|
+
import { applyEnvApiKeys, engineCredentials } from "../src/engine/auth.js";
|
|
33
|
+
import { LENS_LEDGER_FILE, LENS_SESSIONS_DIR } from "../src/engine/openable.js";
|
|
34
|
+
import { resolvePassDeadlineMs } from "../src/engine/lens/deadline.js";
|
|
35
|
+
import { loadBuiltAgents } from "../src/engine/lens/registry.js";
|
|
36
|
+
import { createLensRunner, } from "../src/engine/lens/runlens.js";
|
|
37
|
+
import { LENS_TOOL, LENS_WAVE_TOOL, lensToolDefinitions, } from "../src/engine/lens/tool.js";
|
|
38
|
+
import { LensWave } from "../src/engine/lens/wave.js";
|
|
39
|
+
import { PiHost } from "../src/engine/pisdk.js";
|
|
40
|
+
import { bashGuardConfigFromEnv, createBashGuard } from "./bash-guard.js";
|
|
41
|
+
import { toPiTool } from "./pi-tool.js";
|
|
42
|
+
import { resolveCacheGroup, resolveCacheStagger, resolveMaxConcurrency, } from "../src/engine/lens/env.js";
|
|
43
|
+
export { LENS_TOOL, LENS_WAVE_TOOL };
|
|
44
|
+
/** The two tools as pi ToolDefinitions, over `deps`. */
|
|
45
|
+
export function lensTools(deps) {
|
|
46
|
+
return lensToolDefinitions(deps).map((t) => defineTool(toPiTool(t)));
|
|
47
|
+
}
|
|
48
|
+
/** The factory that registers `lens` and `lens_wave` on a pi. */
|
|
49
|
+
export function createLens(deps) {
|
|
50
|
+
return (pi) => {
|
|
51
|
+
for (const tool of lensTools(deps))
|
|
52
|
+
pi.registerTool(tool);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** How long a lens session has before its login must not expire: the
|
|
56
|
+
* longest a round runs. */
|
|
57
|
+
const LOGIN_WINDOW_MS = 90 * 60_000;
|
|
58
|
+
/** The agent dir an interactive pi runs over; anything but an absolute path is refused. */
|
|
59
|
+
function requireAgentDir(env) {
|
|
60
|
+
const agentDir = env["PI_CODING_AGENT_DIR"];
|
|
61
|
+
if (agentDir === undefined || !isAbsolute(agentDir))
|
|
62
|
+
throw new Error(`lens: PI_CODING_AGENT_DIR is not an absolute path (${String(agentDir)})`);
|
|
63
|
+
return agentDir;
|
|
64
|
+
}
|
|
65
|
+
/** The runner of an interactive pi, from its environment. Exported so the shim's
|
|
66
|
+
* wiring can be tested with a host of its own, and so an engine route (the bench)
|
|
67
|
+
* can build its round's runner the same way over agents it keeps elsewhere
|
|
68
|
+
* (`registry`; omitted: the agent dir's own `agents`). */
|
|
69
|
+
export function lensRunConfigFromEnv(env, host, cwd, registry) {
|
|
70
|
+
const agentDir = requireAgentDir(env);
|
|
71
|
+
const ledger = env["QCR_LEDGER_FILE"];
|
|
72
|
+
const group = resolveCacheGroup({ ...env });
|
|
73
|
+
const deadlineMs = resolvePassDeadlineMs({ ...env });
|
|
74
|
+
return {
|
|
75
|
+
host,
|
|
76
|
+
permits: resolveMaxConcurrency({ ...env }),
|
|
77
|
+
registry: registry ?? loadBuiltAgents(join(agentDir, "agents")),
|
|
78
|
+
cwd,
|
|
79
|
+
env,
|
|
80
|
+
bashGuard: createBashGuard(bashGuardConfigFromEnv(env, cwd)),
|
|
81
|
+
ledgerPath: join(ledger ? dirname(ledger) : agentDir, LENS_LEDGER_FILE),
|
|
82
|
+
// A round's lens sessions are kept beside its ledger; an interactive pi
|
|
83
|
+
// with no round keeps none, and never writes into its own agent dir.
|
|
84
|
+
...(ledger ? { sessionsDir: join(dirname(ledger), LENS_SESSIONS_DIR) } : {}),
|
|
85
|
+
...(deadlineMs !== undefined ? { deadlineMs } : {}),
|
|
86
|
+
// The round's context pack belongs to a wave the engine launches; an
|
|
87
|
+
// interactive pi's groups are warmed by the stagger.
|
|
88
|
+
...(group > 0 ? { cache: { size: group, staggerMs: resolveCacheStagger({ ...env }) } } : {}),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/** The shim's runner: the host and the runner are built by the first pass. */
|
|
92
|
+
function lazyRunner(env, cwd, makeHost, adjust) {
|
|
93
|
+
let built;
|
|
94
|
+
const ensure = () => {
|
|
95
|
+
built ??= (async () => {
|
|
96
|
+
const agentDir = requireAgentDir(env);
|
|
97
|
+
const host = await makeHost(agentDir);
|
|
98
|
+
return createLensRunner(adjust(lensRunConfigFromEnv(env, host, cwd())));
|
|
99
|
+
})();
|
|
100
|
+
// A host that failed to build is not kept: the next ask tries again.
|
|
101
|
+
built.catch(() => {
|
|
102
|
+
built = undefined;
|
|
103
|
+
});
|
|
104
|
+
return built;
|
|
105
|
+
};
|
|
106
|
+
return { run: async (request) => (await ensure()).run(request) };
|
|
107
|
+
}
|
|
108
|
+
/** A PiHost over the interactive pi's own agent dir: a read-only copy of its
|
|
109
|
+
* login, pi's dispatcher left alone. */
|
|
110
|
+
async function interactiveHost(agentDir, env, homeDir) {
|
|
111
|
+
const auth = engineCredentials({ srcDir: agentDir, needMs: LOGIN_WINDOW_MS });
|
|
112
|
+
return PiHost.create({
|
|
113
|
+
agentDir,
|
|
114
|
+
ownsProcess: false,
|
|
115
|
+
...(homeDir !== undefined ? { homeDir } : {}),
|
|
116
|
+
credentials: auth.credentials,
|
|
117
|
+
settings: agentDirSettings(agentDir),
|
|
118
|
+
configureModels: async (runtime) => {
|
|
119
|
+
await applyEnvApiKeys(runtime, env);
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/** The interactive pi's lens tools over `makeHost`, which builds the PiHost on
|
|
124
|
+
* the first pass. Exported so a test can hand it a host of its own, and so the
|
|
125
|
+
* debug round (extensions/debug-round.ts) can start its planned wave on the very
|
|
126
|
+
* board and runner the session's `lens_wave` reads. */
|
|
127
|
+
export function interactiveLensBoard(env, cwd, makeHost,
|
|
128
|
+
/** Final say on the runner's config (the debug round adds the reviewer stub,
|
|
129
|
+
* the bash env allowlist and the context pack). */
|
|
130
|
+
adjust = (c) => c) {
|
|
131
|
+
const runner = lazyRunner(env, cwd, makeHost, adjust);
|
|
132
|
+
const wave = new LensWave();
|
|
133
|
+
return { factory: createLens({ runner, wave, env, cwd }), runner, wave };
|
|
134
|
+
}
|
|
135
|
+
export function interactiveLens(env, cwd, makeHost,
|
|
136
|
+
/** Where the runner's warnings go (`[lens] …`), one line each: the host's.
|
|
137
|
+
* Omitted: nowhere. */
|
|
138
|
+
warn) {
|
|
139
|
+
return interactiveLensBoard(env, cwd, makeHost, lensWarnTo(warn)).factory;
|
|
140
|
+
}
|
|
141
|
+
/** A runner config adjustment that sends its warnings to `warn`, prefixed. */
|
|
142
|
+
export function lensWarnTo(warn) {
|
|
143
|
+
return (c) => (warn ? { ...c, warn: (m) => warn(`[lens] ${m}`) } : c);
|
|
144
|
+
}
|
|
145
|
+
/** The host an interactive pi's lens passes run on, from its env. `homeDir` is
|
|
146
|
+
* the user's home the host resolved (the tool fence keeps its `.pi` out). */
|
|
147
|
+
export function interactiveHostFor(env, homeDir) {
|
|
148
|
+
return (dir) => interactiveHost(dir, env, homeDir);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=lens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens.js","sourceRoot":"","sources":["../../extensions/lens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AgentToolResult, ExtensionAPI, ExtensionToolContext, ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
/** What a tool hands back to the model: text only, which is all ours emit. */
|
|
3
|
+
export type QcrToolResult = Omit<AgentToolResult<Record<string, unknown> | undefined>, "content"> & {
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: "text";
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
export type QcrTool = Omit<ToolDefinition, "execute"> & {
|
|
10
|
+
execute(id: string, params: Record<string, unknown>, signal?: AbortSignal, onUpdate?: unknown, ctx?: ExtensionToolContext): QcrToolResult | Promise<QcrToolResult>;
|
|
11
|
+
};
|
|
12
|
+
/** A text-only tool result; `details` rides along only when given. */
|
|
13
|
+
export declare function textResult(text: string, details?: Record<string, unknown>): QcrToolResult;
|
|
14
|
+
/** A refused setup call as the tool result: what was asked, then one line per error. */
|
|
15
|
+
export declare function refusedResult(what: string, r: {
|
|
16
|
+
errors: readonly string[];
|
|
17
|
+
}): QcrToolResult;
|
|
18
|
+
/** `tool` as pi's contract has it: a synchronous `execute` awaited into the
|
|
19
|
+
* Promise pi asks for. */
|
|
20
|
+
export declare function toPiTool(tool: QcrTool): ToolDefinition;
|
|
21
|
+
export declare function registerQcrTool(pi: ExtensionAPI, tool: QcrTool): void;
|
|
22
|
+
//# sourceMappingURL=pi-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-tool.d.ts","sourceRoot":"","sources":["../../extensions/pi-tool.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACf,MAAM,iCAAiC,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,EACpD,SAAS,CACV,GAAG;IACF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;IACtD,OAAO,CACL,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,OAAO,EAClB,GAAG,CAAC,EAAE,oBAAoB,GACzB,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3C,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAEzF;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,aAAa,CAE3F;AAED;0BAC0B;AAC1B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAMtD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** A text-only tool result; `details` rides along only when given. */
|
|
2
|
+
export function textResult(text, details) {
|
|
3
|
+
return { content: [{ type: "text", text }], details };
|
|
4
|
+
}
|
|
5
|
+
/** A refused setup call as the tool result: what was asked, then one line per error. */
|
|
6
|
+
export function refusedResult(what, r) {
|
|
7
|
+
return textResult(`${what} refused:\n${r.errors.map((e) => `✗ ${e}`).join("\n")}`);
|
|
8
|
+
}
|
|
9
|
+
/** `tool` as pi's contract has it: a synchronous `execute` awaited into the
|
|
10
|
+
* Promise pi asks for. */
|
|
11
|
+
export function toPiTool(tool) {
|
|
12
|
+
return {
|
|
13
|
+
...tool,
|
|
14
|
+
execute: async (id, params, signal, onUpdate, ctx) => tool.execute(id, params, signal, onUpdate, ctx),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function registerQcrTool(pi, tool) {
|
|
18
|
+
pi.registerTool(toPiTool(tool));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=pi-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-tool.js","sourceRoot":"","sources":["../../extensions/pi-tool.ts"],"names":[],"mappings":"AA8BA,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAiC;IACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,CAAgC;IAC1E,OAAO,UAAU,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;0BAC0B;AAC1B,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CACnD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAiC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAgB,EAAE,IAAa;IAC7D,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { Runner } from "../src/plugin/session.js";
|
|
3
|
+
/** What the host entry hands the plugin. */
|
|
4
|
+
export interface QuickReviewConfig {
|
|
5
|
+
/** The process environment, read once by the host entry. */
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
/** The user's home. */
|
|
8
|
+
home: string;
|
|
9
|
+
runner: Runner;
|
|
10
|
+
/** Standard output (pi's print mode shows a command's result there). */
|
|
11
|
+
print: (text: string) => void;
|
|
12
|
+
/** Test seams: the running pi's version, its agent dir, the range. */
|
|
13
|
+
piVersion?: string;
|
|
14
|
+
agentDir?: string;
|
|
15
|
+
range?: string;
|
|
16
|
+
}
|
|
17
|
+
/** The commands, in the order /qcr-setup names them. */
|
|
18
|
+
export declare const QUICKREVIEW_COMMANDS: readonly ["review", "scan", "qcr-setup", "selfimprove"];
|
|
19
|
+
/** The plugin's extension factory over `config`. */
|
|
20
|
+
export declare function createQuickReview(config: QuickReviewConfig): (pi: ExtensionAPI) => void;
|
|
21
|
+
//# sourceMappingURL=quickreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickreview.d.ts","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,iCAAiC,CAAC;AAOzC,OAAO,KAAK,EAAc,MAAM,EAAa,MAAM,0BAA0B,CAAC;AAI9E,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,yDAA0D,CAAC;AAoE5F,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAuEvF"}
|