@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,577 @@
|
|
|
1
|
+
// The isolated SDK session builder: PiHost, and the ONLY module that imports the
|
|
2
|
+
// pi SDK at runtime (the extension factories are the other, tests/fences-engine
|
|
3
|
+
// pins both). An engine route that needs a pi session, the lens runner
|
|
4
|
+
// included, gets it from PiHost.makeSession and never touches the SDK itself.
|
|
5
|
+
//
|
|
6
|
+
// "Isolated" means the host reads and writes nothing it was not handed:
|
|
7
|
+
//
|
|
8
|
+
// - Every path pi would default to ~/.pi/agent is explicit: one private
|
|
9
|
+
// agentDir, and authPath / modelsPath / modelsStorePath inside it (the
|
|
10
|
+
// defaults are model-runtime.js:81, models-store.js:30 and
|
|
11
|
+
// settings-manager.js:223). PiHost refuses a relative or missing agentDir,
|
|
12
|
+
// so a forgotten path cannot fall through to the operator's home.
|
|
13
|
+
// - The ResourceLoader discovers nothing. No extension, skill, prompt
|
|
14
|
+
// template or theme is read from HOME, the agentDir, the cwd's .pi/ or
|
|
15
|
+
// .agents/ (the reviewed repo is untrusted input), or any ancestor. The
|
|
16
|
+
// only things a session sees are what the spec hands it: extension
|
|
17
|
+
// factories, the system prompt, and the context files (the reviewer
|
|
18
|
+
// stub, as data, never written into a checkout).
|
|
19
|
+
// - The model's bash gets an environment built from an allowlist over the
|
|
20
|
+
// spec's env, with the GitHub token names always stripped (envstrip.ts).
|
|
21
|
+
// - The tool list is an allowlist of exact names. A tool an extension
|
|
22
|
+
// registers that is not on it is dropped.
|
|
23
|
+
// - The model's tools do not reach what holds the run's secrets. Its
|
|
24
|
+
// bash runs as the separate tool uid when the host is given one
|
|
25
|
+
// (`toolUid`, from the image's QCR_TOOL_UID), which the kernel keeps out of
|
|
26
|
+
// /proc/<pid>/mem and environ of this process. Its file tools (read, grep,
|
|
27
|
+
// find, ls, edit, write) run in this process, so each path they are handed
|
|
28
|
+
// goes through a fence (toolfence.ts) that refuses /proc, /run/qcr-in and
|
|
29
|
+
// the agent dirs and the login's source, after resolving symlinks.
|
|
30
|
+
//
|
|
31
|
+
// The HTTP dispatcher follows the dispatcher ruling. pi's CLI installs an undici dispatcher at
|
|
32
|
+
// startup (configureHttpDispatcher, which the package does not export); an
|
|
33
|
+
// SDK host needs the same one, since provider requests and our own GitHub
|
|
34
|
+
// fetches go through it. PiHost deep-imports pi's own function so the settings
|
|
35
|
+
// match exactly, and installs it only when the route says it owns the process.
|
|
36
|
+
// Inside a CLI pi (the debug round, the companion, the pi plugin's commands)
|
|
37
|
+
// the dispatcher is pi's, and PiHost leaves it alone. Canary 6 pins the
|
|
38
|
+
// function and its settings.
|
|
39
|
+
//
|
|
40
|
+
// A host built by an extension of the running pi (`hostPi`, the plugin's
|
|
41
|
+
// /review) knows it is inside pi without the title heuristic, and loads
|
|
42
|
+
// nothing from pi's dist/ by file path: the running pi may be a bundle or a
|
|
43
|
+
// binary whose files are not the package's. pi's own location comes from its
|
|
44
|
+
// exported getPackageDir(), never from a module-path walk.
|
|
45
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync } from "node:fs";
|
|
46
|
+
import { access } from "node:fs/promises";
|
|
47
|
+
import { createRequire } from "node:module";
|
|
48
|
+
import { dirname, join, isAbsolute } from "node:path";
|
|
49
|
+
import { pathToFileURL } from "node:url";
|
|
50
|
+
import { randomUUID } from "node:crypto";
|
|
51
|
+
import { DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSession, createBashToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createEditToolDefinition, createWriteToolDefinition, getPackageDir, main as piCliMain, } from "@earendil-works/pi-coding-agent";
|
|
52
|
+
import { isProtectedWriteTarget } from "../../extensions/bash-guard.js";
|
|
53
|
+
import { GITHUB_TOKEN_ENVS } from "../envstrip.js";
|
|
54
|
+
import { routeProvider, splitProvider, twinProvider } from "../modelroute.js";
|
|
55
|
+
import { FENCED_TOOLS, createToolFence, credentialPaths, fencedOperations, guardedTool, loginSourceDirs, } from "./toolfence.js";
|
|
56
|
+
import { inheritingBashOperations, isolatedBashOperations } from "./tooluid.js";
|
|
57
|
+
// ---- the HTTP dispatcher -------------------------------------------------
|
|
58
|
+
/** Where undici keeps the process-global dispatcher: both Node's bundled fetch
|
|
59
|
+
* and the npm undici pi installs read this one symbol. */
|
|
60
|
+
export const UNDICI_GLOBAL_DISPATCHER = Symbol.for("undici.globalDispatcher.1");
|
|
61
|
+
/** Set on globalThis to the dispatcher PiHost itself installed. */
|
|
62
|
+
const INSTALLED_BY_PIHOST = Symbol.for("qcr.pisdk.dispatcher");
|
|
63
|
+
/** The idle timeout the production routes run pi with (bench/aacr/Dockerfile's
|
|
64
|
+
* project settings). pi's own default is five minutes. */
|
|
65
|
+
export const DEFAULT_HTTP_IDLE_TIMEOUT_MS = 120_000;
|
|
66
|
+
/** The process title pi's CLI gives itself: its APP_NAME (`pi` unless the
|
|
67
|
+
* package's piConfig renames it), with `-rpc` appended by the rpc entry. */
|
|
68
|
+
export function piCliTitles() {
|
|
69
|
+
let name = "pi";
|
|
70
|
+
try {
|
|
71
|
+
const pkg = JSON.parse(readFileSync(join(piPackageDir(), "package.json"), "utf8"));
|
|
72
|
+
name = pkg.piConfig?.name || name;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// pi not found: the default name is the best there is.
|
|
76
|
+
}
|
|
77
|
+
return [name, `${name}-rpc`];
|
|
78
|
+
}
|
|
79
|
+
/** True inside a pi CLI process (setupCli and rpc-entry set both signals): the
|
|
80
|
+
* dispatcher there is pi's own and must never be replaced. The environment flag
|
|
81
|
+
* alone is not proof: pi's bash tool hands it to every child, so a standalone
|
|
82
|
+
* `qcr review` started from a pi session inherits it. The process title is set
|
|
83
|
+
* per process and never inherited, so it must agree. */
|
|
84
|
+
export function insideCliPi(env = process.env, title = process.title) {
|
|
85
|
+
return env["PI_CODING_AGENT"] === "true" && piCliTitles().includes(title);
|
|
86
|
+
}
|
|
87
|
+
/** The directory of the pi package this module runs against: pi's own answer
|
|
88
|
+
* (its exported getPackageDir), so an extension inside a running pi, whose
|
|
89
|
+
* package directory holds no pi of its own, gets the running one. */
|
|
90
|
+
export function piPackageDir() {
|
|
91
|
+
return getPackageDir();
|
|
92
|
+
}
|
|
93
|
+
/** pi's own configureHttpDispatcher, deep-imported by file path (the export map
|
|
94
|
+
* does not publish it). It is the same module instance pi's SDK uses, so
|
|
95
|
+
* its fetch bookkeeping stays single. Throws if pi moved or renamed it: that is
|
|
96
|
+
* drift, and canary 6 is where a bump finds out. */
|
|
97
|
+
export async function loadConfigureHttpDispatcher() {
|
|
98
|
+
const file = join(piPackageDir(), "dist", "core", "http-dispatcher.js");
|
|
99
|
+
let mod;
|
|
100
|
+
try {
|
|
101
|
+
mod = createRequire(import.meta.url)(file);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
// Node < 22.12 cannot require() an ES module; the import cache is shared either way.
|
|
105
|
+
if (e.code !== "ERR_REQUIRE_ESM")
|
|
106
|
+
throw e;
|
|
107
|
+
mod = (await import(pathToFileURL(file).href));
|
|
108
|
+
}
|
|
109
|
+
if (typeof mod.configureHttpDispatcher !== "function")
|
|
110
|
+
throw new Error(`pi's configureHttpDispatcher is gone from ${file}: the pinned pi drifted from what pisdk.ts deep-imports (canary 6)`);
|
|
111
|
+
return mod.configureHttpDispatcher;
|
|
112
|
+
}
|
|
113
|
+
const CWD_PINNED = Symbol.for("qcr.picwd.pinned");
|
|
114
|
+
/** Make `SessionManager.open` default its cwd to `cwd()` (the launcher's, as its
|
|
115
|
+
* host resolves it) instead of the session header's, the way `resumeFile` below opens a session in the spec's cwd. Idempotent.
|
|
116
|
+
* An explicit override (pi's own missing-cwd recovery) still wins. VERIFY-ON-PIN: pi's
|
|
117
|
+
* CLI reaches the class's static `open` at call time (main.js createSessionManager;
|
|
118
|
+
* tests/picwd.test.ts drives the real one). */
|
|
119
|
+
export function pinSessionCwd(manager, cwd) {
|
|
120
|
+
const holder = manager;
|
|
121
|
+
if (holder[CWD_PINNED])
|
|
122
|
+
return;
|
|
123
|
+
const open = manager.open.bind(manager);
|
|
124
|
+
holder.open = (path, sessionDir, cwdOverride) => open(path, sessionDir, cwdOverride ?? cwd());
|
|
125
|
+
holder[CWD_PINNED] = true;
|
|
126
|
+
}
|
|
127
|
+
/** pi's own CLI entry (its cli.js: setupCli, then main) with the session cwd pinned
|
|
128
|
+
* to `cwd()`, the launching process's (src/picwd.ts). setupCli's steps are repeated
|
|
129
|
+
* here because the package does not export it: the same title and flags (so
|
|
130
|
+
* `insideCliPi` answers as in the CLI binary) and the same HTTP dispatcher. */
|
|
131
|
+
export async function runPiCliInCwd(argv, cwd) {
|
|
132
|
+
process.title = piCliTitles()[0];
|
|
133
|
+
process.env["PI_CODING_AGENT"] = "true";
|
|
134
|
+
process.env["AI_AGENT"] = "pi";
|
|
135
|
+
process.emitWarning = () => { };
|
|
136
|
+
(await loadConfigureHttpDispatcher())();
|
|
137
|
+
pinSessionCwd(SessionManager, cwd);
|
|
138
|
+
await piCliMain(argv);
|
|
139
|
+
}
|
|
140
|
+
let imageSniffer;
|
|
141
|
+
/** pi's own image sniffer (utils/mime.js), deep-imported the way the dispatcher
|
|
142
|
+
* is: the fenced read tool tells an image from its first bytes with it. Null
|
|
143
|
+
* where pi moved it: a file is then read as text, never as an image. */
|
|
144
|
+
export function loadImageSniffer() {
|
|
145
|
+
imageSniffer ??= (async () => {
|
|
146
|
+
try {
|
|
147
|
+
const file = join(piPackageDir(), "dist", "utils", "mime.js");
|
|
148
|
+
const mod = (await import(pathToFileURL(file).href));
|
|
149
|
+
return typeof mod.detectSupportedImageMimeType === "function"
|
|
150
|
+
? mod.detectSupportedImageMimeType
|
|
151
|
+
: null;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
157
|
+
return imageSniffer;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Make sure provider requests (and every Node fetch in the process) go through
|
|
161
|
+
* pi's dispatcher, installing it at most once and only when `ownsProcess`.
|
|
162
|
+
*
|
|
163
|
+
* Inside a CLI pi the dispatcher is pi's own and is never touched, whatever the
|
|
164
|
+
* route claims. Nor is one that PiHost installed and something else has since
|
|
165
|
+
* replaced. (undici wraps every dispatcher it is given, and Node creates its own
|
|
166
|
+
* lazily on the first fetch, so a dispatcher cannot be recognised as pi's by
|
|
167
|
+
* looking at it: the flag and title pi's CLI sets, and PiHost's own marker,
|
|
168
|
+
* are the facts there are.)
|
|
169
|
+
*/
|
|
170
|
+
export async function ensureHttpDispatcher(o) {
|
|
171
|
+
const g = globalThis;
|
|
172
|
+
if (o.hostPi === true || insideCliPi())
|
|
173
|
+
return "reused";
|
|
174
|
+
const ours = g[INSTALLED_BY_PIHOST];
|
|
175
|
+
if (ours !== undefined)
|
|
176
|
+
return g[UNDICI_GLOBAL_DISPATCHER] === ours ? "installed" : "reused";
|
|
177
|
+
if (!o.ownsProcess)
|
|
178
|
+
return "none";
|
|
179
|
+
(await loadConfigureHttpDispatcher())(o.idleTimeoutMs);
|
|
180
|
+
g[INSTALLED_BY_PIHOST] = g[UNDICI_GLOBAL_DISPATCHER];
|
|
181
|
+
return "installed";
|
|
182
|
+
}
|
|
183
|
+
// ---- the model's bash environment ---------------------------------------------
|
|
184
|
+
/** Names (or `PREFIX*` patterns) of the spec's env the model's bash receives by
|
|
185
|
+
* default. A route adds its own through `bashEnv.allow`. */
|
|
186
|
+
export const DEFAULT_BASH_ENV_ALLOW = [
|
|
187
|
+
"PATH",
|
|
188
|
+
"HOME",
|
|
189
|
+
"USER",
|
|
190
|
+
"LOGNAME",
|
|
191
|
+
"SHELL",
|
|
192
|
+
"LANG",
|
|
193
|
+
"LANGUAGE",
|
|
194
|
+
"LC_*",
|
|
195
|
+
"TERM",
|
|
196
|
+
"TZ",
|
|
197
|
+
"TMPDIR",
|
|
198
|
+
];
|
|
199
|
+
/** The session identity pi itself puts in the bash env (bash.js:137-153); the
|
|
200
|
+
* tool's prompt text promises them, so they pass. */
|
|
201
|
+
const PI_SESSION_ENV = [
|
|
202
|
+
"PI_SESSION_ID",
|
|
203
|
+
"PI_SESSION_FILE",
|
|
204
|
+
"PI_PROVIDER",
|
|
205
|
+
"PI_MODEL",
|
|
206
|
+
"PI_REASONING_LEVEL",
|
|
207
|
+
];
|
|
208
|
+
function allowed(name, patterns) {
|
|
209
|
+
return patterns.some((p) => (p.endsWith("*") ? name.startsWith(p.slice(0, -1)) : name === p));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The environment of one bash call: the spec's env filtered by the allowlist,
|
|
213
|
+
* pi's session identity, the route's explicit values, and never a GitHub token.
|
|
214
|
+
* The process's own env is not a source: a token the host holds cannot leak
|
|
215
|
+
* through here whatever the allowlist says.
|
|
216
|
+
*/
|
|
217
|
+
export function buildBashEnv(specEnv, piEnv, options = {}) {
|
|
218
|
+
const patterns = [...DEFAULT_BASH_ENV_ALLOW, ...(options.allow ?? [])];
|
|
219
|
+
const env = {};
|
|
220
|
+
for (const [name, value] of Object.entries(specEnv))
|
|
221
|
+
if (value !== undefined && allowed(name, patterns))
|
|
222
|
+
env[name] = value;
|
|
223
|
+
for (const name of PI_SESSION_ENV) {
|
|
224
|
+
const value = piEnv[name];
|
|
225
|
+
if (value !== undefined)
|
|
226
|
+
env[name] = value;
|
|
227
|
+
}
|
|
228
|
+
Object.assign(env, options.set);
|
|
229
|
+
for (const name of GITHUB_TOKEN_ENVS)
|
|
230
|
+
delete env[name];
|
|
231
|
+
return env;
|
|
232
|
+
}
|
|
233
|
+
// ---- provider auth discovery that does not look in HOME ------------------------
|
|
234
|
+
/** pi-ai's default auth context expands `~` to the operator's home to look for
|
|
235
|
+
* ambient credentials (google-vertex checks ~/.config/gcloud for ADC). A review
|
|
236
|
+
* host takes its credentials from the auth file it was given and from env, so
|
|
237
|
+
* `~` paths are simply absent. */
|
|
238
|
+
const ISOLATED_AUTH_CONTEXT = {
|
|
239
|
+
async env(name) {
|
|
240
|
+
const value = process.env[name];
|
|
241
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
242
|
+
},
|
|
243
|
+
async fileExists(path) {
|
|
244
|
+
if (path.startsWith("~"))
|
|
245
|
+
return false;
|
|
246
|
+
try {
|
|
247
|
+
await access(path);
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
/** ModelRuntime builds its provider collection with pi-ai's default context and
|
|
256
|
+
* exposes no way to pass another, so swap it on the collection. Fails closed:
|
|
257
|
+
* a pi that moved the field has to be looked at (canary 4). */
|
|
258
|
+
function isolateProviderAuth(runtime) {
|
|
259
|
+
const models = runtime.models;
|
|
260
|
+
if (!models || typeof models.authContext !== "object" || models.authContext === null)
|
|
261
|
+
throw new Error("pi's ModelRuntime no longer holds an authContext pisdk.ts isolates (canary 4)");
|
|
262
|
+
models.authContext = ISOLATED_AUTH_CONTEXT;
|
|
263
|
+
}
|
|
264
|
+
// ---- the resource loader that discovers nothing -------------------------------
|
|
265
|
+
/** What a package manager resolves to when there is nothing to resolve. */
|
|
266
|
+
const NO_RESOURCES = { extensions: [], skills: [], prompts: [], themes: [] };
|
|
267
|
+
class IsolatedResourceLoader extends DefaultResourceLoader {
|
|
268
|
+
constructor(o) {
|
|
269
|
+
super({
|
|
270
|
+
cwd: o.cwd,
|
|
271
|
+
agentDir: o.agentDir,
|
|
272
|
+
settingsManager: o.settingsManager,
|
|
273
|
+
extensionFactories: [...o.extensionFactories],
|
|
274
|
+
noExtensions: true,
|
|
275
|
+
noSkills: true,
|
|
276
|
+
noPromptTemplates: true,
|
|
277
|
+
noThemes: true,
|
|
278
|
+
noContextFiles: true,
|
|
279
|
+
// The belts to the switches' braces: whatever a discovery path still
|
|
280
|
+
// turned up (an extension's resources_discover, a pi that stops honouring
|
|
281
|
+
// a switch) is dropped here. This is where $HOME/.agents/skills is closed
|
|
282
|
+
// on the SDK route.
|
|
283
|
+
skillsOverride: () => ({ skills: [], diagnostics: [] }),
|
|
284
|
+
promptsOverride: () => ({ prompts: [], diagnostics: [] }),
|
|
285
|
+
themesOverride: () => ({ themes: [], diagnostics: [] }),
|
|
286
|
+
agentsFilesOverride: () => ({ agentsFiles: o.agentsFiles.map((f) => ({ ...f })) }),
|
|
287
|
+
systemPromptOverride: () => o.systemPrompt,
|
|
288
|
+
appendSystemPromptOverride: () => [...o.appendSystemPrompt],
|
|
289
|
+
});
|
|
290
|
+
// reload() asks the package manager to scan HOME (~/.agents/skills), the
|
|
291
|
+
// agentDir and every cwd ancestor before any switch applies, so the switches
|
|
292
|
+
// alone still read those directories. Nothing there may be read at all:
|
|
293
|
+
// replace the scan with an empty answer. Fail closed if pi's shape moves.
|
|
294
|
+
const self = this;
|
|
295
|
+
const pm = self.packageManager;
|
|
296
|
+
if (!pm ||
|
|
297
|
+
typeof pm["resolve"] !== "function" ||
|
|
298
|
+
typeof pm["resolveExtensionSources"] !== "function")
|
|
299
|
+
throw new Error("pi's DefaultResourceLoader no longer has the package manager pisdk.ts isolates (canary 4)");
|
|
300
|
+
pm["resolve"] = async () => NO_RESOURCES;
|
|
301
|
+
pm["resolveExtensionSources"] = async () => NO_RESOURCES;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** pi's own default tool set at the pin (DEFAULT_TOOL_NAMES). Canary 5 holds it. */
|
|
305
|
+
export const DEFAULT_TOOLS = ["read", "bash", "edit", "write"];
|
|
306
|
+
function checkToolAllowlist(tools) {
|
|
307
|
+
for (const t of tools)
|
|
308
|
+
if (!/^[A-Za-z0-9_][A-Za-z0-9_.:-]*$/.test(t))
|
|
309
|
+
throw new Error(`tool allowlist entries are exact names, got ${JSON.stringify(t)}`);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* The spec's model on this host. An OpenAI spec runs on the login that exists
|
|
313
|
+
* (modelroute.ts): the provider it names when that provider has a credential,
|
|
314
|
+
* else its twin (`openai-codex` <-> `openai`) when the twin has one and serves
|
|
315
|
+
* the same id. pi's own offline auth check decides (ModelRuntime.checkAuth
|
|
316
|
+
* reads the credential store and the runtime keys; the host's snapshot is
|
|
317
|
+
* empty, since it is created without a refresh).
|
|
318
|
+
*/
|
|
319
|
+
export async function resolveModel(runtime, model) {
|
|
320
|
+
if (typeof model !== "string")
|
|
321
|
+
return model;
|
|
322
|
+
const parts = splitProvider(model);
|
|
323
|
+
if (parts === null)
|
|
324
|
+
throw new Error(`model ${JSON.stringify(model)} is not known to the host`);
|
|
325
|
+
const twin = twinProvider(parts.provider);
|
|
326
|
+
let provider = parts.provider;
|
|
327
|
+
if (twin !== undefined) {
|
|
328
|
+
// VERIFY-ON-PIN (pi 1.4.0): checkAuth resolves undefined for a provider with
|
|
329
|
+
// no credential and an AuthCheck for one with an OAuth or API-key credential.
|
|
330
|
+
const usable = new Set();
|
|
331
|
+
for (const p of [parts.provider, twin])
|
|
332
|
+
if ((await runtime.checkAuth(p).catch(() => undefined)) !== undefined)
|
|
333
|
+
usable.add(p);
|
|
334
|
+
provider = routeProvider(parts.provider, parts.rest, {
|
|
335
|
+
hasCredential: (p) => usable.has(p),
|
|
336
|
+
hasModel: (p, id) => runtime.getModel(p, id) !== undefined,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
const found = runtime.getModel(provider, parts.rest);
|
|
340
|
+
if (!found)
|
|
341
|
+
throw new Error(`model ${JSON.stringify(model)} is not known to the host`);
|
|
342
|
+
return found;
|
|
343
|
+
}
|
|
344
|
+
/** The id a session JSONL's header carries; null when the file does not start
|
|
345
|
+
* with a session header. */
|
|
346
|
+
export function headerId(file) {
|
|
347
|
+
let first;
|
|
348
|
+
try {
|
|
349
|
+
// The header is the first line; a transcript can run to megabytes.
|
|
350
|
+
const fd = openSync(file, "r");
|
|
351
|
+
try {
|
|
352
|
+
const buf = Buffer.alloc(64 * 1024);
|
|
353
|
+
first = buf.toString("utf8", 0, readSync(fd, buf, 0, buf.length, 0)).split("\n", 1)[0];
|
|
354
|
+
}
|
|
355
|
+
finally {
|
|
356
|
+
closeSync(fd);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
try {
|
|
363
|
+
const h = JSON.parse(first ?? "");
|
|
364
|
+
return h.type === "session" && typeof h.id === "string" && h.id !== "" ? h.id : null;
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** The session manager a spec asks for. A session file that already exists is a
|
|
371
|
+
* resume, not a create, and is refused for `sessionFile`: nothing opens an old
|
|
372
|
+
* session by accident. A resume names its file as `resumeFile`, which must hold
|
|
373
|
+
* a session header: pi would otherwise start a fresh session (a new id, so a
|
|
374
|
+
* cold prompt cache) at a missing or empty path. */
|
|
375
|
+
function sessionManagerFor(spec) {
|
|
376
|
+
const { persist, sessionManager } = spec;
|
|
377
|
+
if (spec.sessionId !== undefined && (sessionManager || (persist && !("sessionDir" in persist))))
|
|
378
|
+
throw new Error("sessionId names a new session: not with a sessionManager, a sessionFile or a resumeFile");
|
|
379
|
+
if (spec.sessionId === "")
|
|
380
|
+
throw new Error("sessionId must not be empty");
|
|
381
|
+
if (sessionManager) {
|
|
382
|
+
if (persist)
|
|
383
|
+
throw new Error("give a sessionManager or persist, not both");
|
|
384
|
+
return sessionManager;
|
|
385
|
+
}
|
|
386
|
+
if (persist && "resumeFile" in persist) {
|
|
387
|
+
const file = persist.resumeFile;
|
|
388
|
+
if (!isAbsolute(file))
|
|
389
|
+
throw new Error(`a session file must be absolute, got ${file}`);
|
|
390
|
+
const id = headerId(file);
|
|
391
|
+
if (id === null)
|
|
392
|
+
throw new Error(`${file} is not a session JSONL to resume`);
|
|
393
|
+
// The cwd override keeps the session in the spec's cwd (the header's belongs
|
|
394
|
+
// to the machine that wrote it); the header on disk is not rewritten.
|
|
395
|
+
const manager = SessionManager.open(file, dirname(file), spec.cwd);
|
|
396
|
+
if (manager.getSessionId() !== id)
|
|
397
|
+
throw new Error(`resuming ${file} changed the session id (${id} -> ${manager.getSessionId()})`);
|
|
398
|
+
return manager;
|
|
399
|
+
}
|
|
400
|
+
if (persist && "sessionFile" in persist) {
|
|
401
|
+
const file = persist.sessionFile;
|
|
402
|
+
if (!isAbsolute(file))
|
|
403
|
+
throw new Error(`a session file must be absolute, got ${file}`);
|
|
404
|
+
if (existsSync(file))
|
|
405
|
+
throw new Error(`session file ${file} already exists`);
|
|
406
|
+
// open() on a path that does not exist yet is how pi starts a session at a
|
|
407
|
+
// chosen file; the cwd override keeps the header's cwd the spec's.
|
|
408
|
+
return SessionManager.open(file, dirname(file), spec.cwd);
|
|
409
|
+
}
|
|
410
|
+
if (persist)
|
|
411
|
+
return SessionManager.create(spec.cwd, persist.sessionDir, spec.sessionId !== undefined ? { id: spec.sessionId } : undefined);
|
|
412
|
+
// VERIFY-ON-PIN (pi 1.3.0, re-read at 1.4.0): inMemory({id}) sets the session id the provider
|
|
413
|
+
// keys its cache on (prompt_cache_key, session-id, x-client-request-id).
|
|
414
|
+
return SessionManager.inMemory(spec.cwd, { id: spec.sessionId ?? randomUUID() });
|
|
415
|
+
}
|
|
416
|
+
export class PiHost {
|
|
417
|
+
options;
|
|
418
|
+
agentDir;
|
|
419
|
+
modelRuntime;
|
|
420
|
+
/** What the host found or did about the HTTP dispatcher. */
|
|
421
|
+
dispatcher;
|
|
422
|
+
httpIdleTimeoutMs;
|
|
423
|
+
/** What the file tools are kept out of, or null. */
|
|
424
|
+
fence;
|
|
425
|
+
sessions = new Set();
|
|
426
|
+
constructor(options, modelRuntime, dispatcher, httpIdleTimeoutMs) {
|
|
427
|
+
this.options = options;
|
|
428
|
+
this.agentDir = options.agentDir;
|
|
429
|
+
this.modelRuntime = modelRuntime;
|
|
430
|
+
this.dispatcher = dispatcher;
|
|
431
|
+
this.httpIdleTimeoutMs = httpIdleTimeoutMs;
|
|
432
|
+
this.fence =
|
|
433
|
+
options.fence === false
|
|
434
|
+
? null
|
|
435
|
+
: (options.fence ??
|
|
436
|
+
createToolFence({
|
|
437
|
+
protectedWrite: isProtectedWriteTarget,
|
|
438
|
+
dirs: [
|
|
439
|
+
options.agentDir,
|
|
440
|
+
...(options.homeDir !== undefined ? [join(options.homeDir, ".pi")] : []),
|
|
441
|
+
...loginSourceDirs(process.env),
|
|
442
|
+
...credentialPaths(process.env),
|
|
443
|
+
...(options.fenceDirs ?? []),
|
|
444
|
+
],
|
|
445
|
+
}));
|
|
446
|
+
}
|
|
447
|
+
static async create(options) {
|
|
448
|
+
if (!isAbsolute(options.agentDir))
|
|
449
|
+
throw new Error(`PiHost needs an absolute private agentDir, got ${options.agentDir}`);
|
|
450
|
+
mkdirSync(options.agentDir, { recursive: true });
|
|
451
|
+
const idle = options.httpIdleTimeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS;
|
|
452
|
+
if (options.hostPi === true && options.ownsProcess === true)
|
|
453
|
+
throw new Error("a host inside a running pi does not own its process");
|
|
454
|
+
const dispatcher = await ensureHttpDispatcher({
|
|
455
|
+
ownsProcess: options.ownsProcess ?? false,
|
|
456
|
+
idleTimeoutMs: idle,
|
|
457
|
+
...(options.hostPi === true ? { hostPi: true } : {}),
|
|
458
|
+
});
|
|
459
|
+
const runtime = await ModelRuntime.create({
|
|
460
|
+
authPath: join(options.agentDir, "auth.json"),
|
|
461
|
+
modelsPath: join(options.agentDir, "models.json"),
|
|
462
|
+
modelsStorePath: join(options.agentDir, "models-store.json"),
|
|
463
|
+
...(options.credentials ? { credentials: options.credentials } : {}),
|
|
464
|
+
// No catalog refresh over the network at create: a review run does not
|
|
465
|
+
// wait on, or leak to, a model-list endpoint.
|
|
466
|
+
refreshOnCreate: false,
|
|
467
|
+
});
|
|
468
|
+
isolateProviderAuth(runtime);
|
|
469
|
+
await options.configureModels?.(runtime);
|
|
470
|
+
return new PiHost(options, runtime, dispatcher, idle);
|
|
471
|
+
}
|
|
472
|
+
/** A fresh settings manager per session: sessions never share mutable
|
|
473
|
+
* settings, and project settings (the reviewed repo's .pi/) are never read. */
|
|
474
|
+
settings() {
|
|
475
|
+
return SettingsManager.inMemory({ httpIdleTimeoutMs: this.httpIdleTimeoutMs, ...this.options.settings }, { projectTrusted: false });
|
|
476
|
+
}
|
|
477
|
+
/** The file tools of the allowlist, behind the fence. None when there is no fence. */
|
|
478
|
+
async fileTools(cwd, names) {
|
|
479
|
+
const fence = this.fence;
|
|
480
|
+
if (fence === null)
|
|
481
|
+
return [];
|
|
482
|
+
const ops = fencedOperations(fence, this.options.hostPi === true ? null : await loadImageSniffer());
|
|
483
|
+
const make = {
|
|
484
|
+
read: () => createReadToolDefinition(cwd, { operations: ops.read }),
|
|
485
|
+
grep: () => createGrepToolDefinition(cwd, { operations: ops.grep }),
|
|
486
|
+
find: () => createFindToolDefinition(cwd),
|
|
487
|
+
ls: () => createLsToolDefinition(cwd, { operations: ops.ls }),
|
|
488
|
+
edit: () => createEditToolDefinition(cwd, { operations: ops.edit }),
|
|
489
|
+
write: () => createWriteToolDefinition(cwd, { operations: ops.write }),
|
|
490
|
+
};
|
|
491
|
+
return FENCED_TOOLS.filter((n) => names.includes(n)).map((n) => guardedTool(make[n](), fence, cwd, this.options.homeDir));
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* One isolated, extension-bound session. The caller owns it: dispose it, or
|
|
495
|
+
* dispose the host to dispose every session it made.
|
|
496
|
+
*/
|
|
497
|
+
async makeSession(spec) {
|
|
498
|
+
const tools = [...(spec.tools ?? DEFAULT_TOOLS)];
|
|
499
|
+
checkToolAllowlist(tools);
|
|
500
|
+
const sessionManager = sessionManagerFor(spec);
|
|
501
|
+
const settingsManager = this.settings();
|
|
502
|
+
const resourceLoader = new IsolatedResourceLoader({
|
|
503
|
+
cwd: spec.cwd,
|
|
504
|
+
agentDir: this.agentDir,
|
|
505
|
+
settingsManager,
|
|
506
|
+
extensionFactories: spec.extensions ?? [],
|
|
507
|
+
systemPrompt: spec.systemPrompt,
|
|
508
|
+
appendSystemPrompt: spec.appendSystemPrompt ?? [],
|
|
509
|
+
agentsFiles: spec.agentsFiles ?? this.options.agentsFiles ?? [],
|
|
510
|
+
});
|
|
511
|
+
await resourceLoader.reload();
|
|
512
|
+
// The model's bash: its environment from the allowlist, and, where the host
|
|
513
|
+
// has a tool uid, its command run as that uid (tooluid.ts).
|
|
514
|
+
const bash = createBashToolDefinition(spec.cwd, {
|
|
515
|
+
spawnHook: (ctx) => ({
|
|
516
|
+
command: ctx.command,
|
|
517
|
+
cwd: ctx.cwd,
|
|
518
|
+
env: buildBashEnv(spec.env, ctx.env, spec.bashEnv),
|
|
519
|
+
}),
|
|
520
|
+
...(this.options.toolUid
|
|
521
|
+
? {
|
|
522
|
+
operations: isolatedBashOperations(this.options.toolUid, this.options.setprivBin, spec.inheritFds),
|
|
523
|
+
}
|
|
524
|
+
: spec.inheritFds?.length
|
|
525
|
+
? { operations: inheritingBashOperations(spec.inheritFds) }
|
|
526
|
+
: {}),
|
|
527
|
+
});
|
|
528
|
+
const files = await this.fileTools(spec.cwd, tools);
|
|
529
|
+
const { session } = await createAgentSession({
|
|
530
|
+
cwd: spec.cwd,
|
|
531
|
+
agentDir: this.agentDir,
|
|
532
|
+
model: await resolveModel(this.modelRuntime, spec.model),
|
|
533
|
+
...(spec.thinkingLevel ? { thinkingLevel: spec.thinkingLevel } : {}),
|
|
534
|
+
modelRuntime: this.modelRuntime,
|
|
535
|
+
resourceLoader,
|
|
536
|
+
sessionManager,
|
|
537
|
+
settingsManager,
|
|
538
|
+
tools,
|
|
539
|
+
customTools: [bash, ...files, ...(spec.customTools ?? [])],
|
|
540
|
+
});
|
|
541
|
+
try {
|
|
542
|
+
await session.bindExtensions({ onError: spec.onExtensionError });
|
|
543
|
+
// The allowlist is enforced by pi; this is the host checking pi's work.
|
|
544
|
+
const stray = session
|
|
545
|
+
.getAllTools()
|
|
546
|
+
.map((t) => t.name)
|
|
547
|
+
.filter((name) => !tools.includes(name));
|
|
548
|
+
if (stray.length > 0)
|
|
549
|
+
throw new Error(`tools outside the allowlist are registered: ${stray.join(", ")}`);
|
|
550
|
+
}
|
|
551
|
+
catch (e) {
|
|
552
|
+
session.dispose();
|
|
553
|
+
throw e;
|
|
554
|
+
}
|
|
555
|
+
this.sessions.add(session);
|
|
556
|
+
return session;
|
|
557
|
+
}
|
|
558
|
+
/** Dispose every session this host made. Idempotent. */
|
|
559
|
+
dispose() {
|
|
560
|
+
for (const s of this.sessions) {
|
|
561
|
+
try {
|
|
562
|
+
s.dispose();
|
|
563
|
+
}
|
|
564
|
+
catch {
|
|
565
|
+
/* already disposed */
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
this.sessions.clear();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
/** pi's own parse of a session file, as a worker's first act on it: open it and
|
|
572
|
+
* rebuild the context. No session is started and nothing is written to `file`.
|
|
573
|
+
* The cutover preflight (src/preflight.ts) resumes every open PR's JSONL with it. */
|
|
574
|
+
export function openSessionContext(file, sessionDir, cwd) {
|
|
575
|
+
SessionManager.open(file, sessionDir, cwd).buildSessionContext();
|
|
576
|
+
}
|
|
577
|
+
//# sourceMappingURL=pisdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pisdk.js","sourceRoot":"","sources":["../../../src/engine/pisdk.ts"],"names":[],"mappings":"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"}
|