@quickchatai/pi-quickreview 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +75 -2
- package/assets/agents/pass-abstraction.md +64 -0
- package/assets/agents/pass-ask-human.md +134 -0
- package/assets/agents/pass-backcompat.md +67 -0
- package/assets/agents/pass-baseline.md +61 -0
- package/assets/agents/pass-behaviour-delta.md +64 -0
- package/assets/agents/pass-bounds.md +36 -0
- package/assets/agents/pass-claims.md +31 -0
- package/assets/agents/pass-concurrency.md +168 -0
- package/assets/agents/pass-consistency.md +57 -0
- package/assets/agents/pass-contracts.md +30 -0
- package/assets/agents/pass-data-safety.md +54 -0
- package/assets/agents/pass-deferred.md +35 -0
- package/assets/agents/pass-delivery.md +37 -0
- package/assets/agents/pass-duplication.md +60 -0
- package/assets/agents/pass-intent.md +63 -0
- package/assets/agents/pass-lint-conformance.md +46 -0
- package/assets/agents/pass-maintainability.md +67 -0
- package/assets/agents/pass-placement.md +68 -0
- package/assets/agents/pass-prod-risk.md +24 -0
- package/assets/agents/pass-rollout.md +32 -0
- package/assets/agents/pass-roundtrip.md +46 -0
- package/assets/agents/pass-security.md +31 -0
- package/assets/agents/pass-simplicity.md +68 -0
- package/assets/agents/pass-statelessness.md +27 -0
- package/assets/agents/pass-style.md +37 -0
- package/assets/agents/pass-sweep.md +57 -0
- package/assets/agents/pass-tests.md +58 -0
- package/assets/agents/pass-ui.md +23 -0
- package/assets/agents/pass-validate.md +50 -0
- package/assets/agents/pass-widened.md +46 -0
- package/assets/agents/scan/pass-scan.md +86 -0
- package/assets/config.example.toml +1067 -0
- package/assets/deploy/reviewer/AGENTS.override.md +12 -0
- package/assets/profiles/default/README.md +21 -0
- package/assets/profiles/default/addenda/.gitkeep +0 -0
- package/assets/profiles/default/profile.toml +17 -0
- package/assets/profiles/example-django/README.md +21 -0
- package/assets/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/assets/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/assets/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/assets/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/assets/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/assets/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/assets/profiles/example-django/heuristics.toml +24 -0
- package/assets/profiles/example-django/profile.toml +9 -0
- package/assets/profiles/fast/README.md +24 -0
- package/assets/profiles/fast/profile.toml +59 -0
- package/assets/profiles/minimal/README.md +17 -0
- package/assets/profiles/minimal/addenda/.gitkeep +0 -0
- package/assets/profiles/minimal/profile.toml +8 -0
- package/assets/profiles/snappy/README.md +24 -0
- package/assets/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/assets/profiles/snappy/profile.toml +46 -0
- package/assets/prompts/companion-day-open.md +46 -0
- package/assets/prompts/companion-first-run.md +104 -0
- package/assets/prompts/companion.md +821 -0
- package/assets/prompts/conversation-system.md +117 -0
- package/assets/prompts/eod-sweep.md +120 -0
- package/assets/prompts/onboarding.md +74 -0
- package/assets/prompts/pass-common.md +52 -0
- package/assets/prompts/pass-quality-common.md +22 -0
- package/assets/prompts/round-first.md +874 -0
- package/assets/prompts/round-follow-up.md +991 -0
- package/assets/prompts/round-re-review.md +889 -0
- package/assets/prompts/round-recheck.md +196 -0
- package/assets/prompts/round-staleness.md +856 -0
- package/assets/schemas/review-result.v1.json +391 -0
- package/assets/schemas/scan-result.v1.json +421 -0
- package/assets/schemas/version.v1.json +57 -0
- package/assets/seed-manifest.json +19 -0
- package/assets/seeds/agents/pass-baseline.md +61 -0
- package/assets/seeds/agents/pass-contracts.md +30 -0
- package/assets/seeds/agents/pass-data-safety.md +54 -0
- package/assets/seeds/agents/pass-delivery.md +37 -0
- package/assets/seeds/agents/pass-prod-risk.md +24 -0
- package/assets/seeds/agents/pass-security.md +31 -0
- package/assets/seeds/agents/pass-statelessness.md +27 -0
- package/assets/seeds/agents/pass-ui.md +23 -0
- package/assets/seeds/agents/pass-validate.md +50 -0
- package/assets/seeds/prompts/conversation-system.md +117 -0
- package/assets/seeds/prompts/eod-sweep.md +120 -0
- package/assets/seeds/prompts/pass-common.md +52 -0
- package/dist/extensions/bash-guard.d.ts +467 -0
- package/dist/extensions/bash-guard.d.ts.map +1 -0
- package/dist/extensions/bash-guard.js +3058 -0
- package/dist/extensions/bash-guard.js.map +1 -0
- package/dist/extensions/finding-clusters.d.ts +33 -0
- package/dist/extensions/finding-clusters.d.ts.map +1 -0
- package/dist/extensions/finding-clusters.js +218 -0
- package/dist/extensions/finding-clusters.js.map +1 -0
- package/dist/extensions/ledger-pin.d.ts +76 -0
- package/dist/extensions/ledger-pin.d.ts.map +1 -0
- package/dist/extensions/ledger-pin.js +331 -0
- package/dist/extensions/ledger-pin.js.map +1 -0
- package/dist/extensions/lens.d.ts +43 -0
- package/dist/extensions/lens.d.ts.map +1 -0
- package/dist/extensions/lens.js +150 -0
- package/dist/extensions/lens.js.map +1 -0
- package/dist/extensions/pi-tool.d.ts +22 -0
- package/dist/extensions/pi-tool.d.ts.map +1 -0
- package/dist/extensions/pi-tool.js +20 -0
- package/dist/extensions/pi-tool.js.map +1 -0
- package/dist/extensions/quickreview.d.ts +21 -0
- package/dist/extensions/quickreview.d.ts.map +1 -0
- package/dist/extensions/quickreview.js +132 -0
- package/dist/extensions/quickreview.js.map +1 -0
- package/dist/src/anchors.d.ts +54 -0
- package/dist/src/anchors.d.ts.map +1 -0
- package/dist/src/anchors.js +127 -0
- package/dist/src/anchors.js.map +1 -0
- package/dist/src/assetroot.d.ts +16 -0
- package/dist/src/assetroot.d.ts.map +1 -0
- package/dist/src/assetroot.js +77 -0
- package/dist/src/assetroot.js.map +1 -0
- package/dist/src/authwatch.d.ts +61 -0
- package/dist/src/authwatch.d.ts.map +1 -0
- package/dist/src/authwatch.js +210 -0
- package/dist/src/authwatch.js.map +1 -0
- package/dist/src/budget.d.ts +15 -0
- package/dist/src/budget.d.ts.map +1 -0
- package/dist/src/budget.js +32 -0
- package/dist/src/budget.js.map +1 -0
- package/dist/src/casebudget.d.ts +3 -0
- package/dist/src/casebudget.d.ts.map +1 -0
- package/dist/src/casebudget.js +3 -0
- package/dist/src/casebudget.js.map +1 -0
- package/dist/src/cigate.d.ts +116 -0
- package/dist/src/cigate.d.ts.map +1 -0
- package/dist/src/cigate.js +176 -0
- package/dist/src/cigate.js.map +1 -0
- package/dist/src/codespan.d.ts +46 -0
- package/dist/src/codespan.d.ts.map +1 -0
- package/dist/src/codespan.js +75 -0
- package/dist/src/codespan.js.map +1 -0
- package/dist/src/contextpack.d.ts +56 -0
- package/dist/src/contextpack.d.ts.map +1 -0
- package/dist/src/contextpack.js +195 -0
- package/dist/src/contextpack.js.map +1 -0
- package/dist/src/contract.d.ts +8 -0
- package/dist/src/contract.d.ts.map +1 -0
- package/dist/src/contract.js +21 -0
- package/dist/src/contract.js.map +1 -0
- package/dist/src/coverage.d.ts +32 -0
- package/dist/src/coverage.d.ts.map +1 -0
- package/dist/src/coverage.js +85 -0
- package/dist/src/coverage.js.map +1 -0
- package/dist/src/datafence.d.ts +19 -0
- package/dist/src/datafence.d.ts.map +1 -0
- package/dist/src/datafence.js +60 -0
- package/dist/src/datafence.js.map +1 -0
- package/dist/src/dedup.d.ts +65 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/dedup.js +459 -0
- package/dist/src/dedup.js.map +1 -0
- package/dist/src/depsources.d.ts +304 -0
- package/dist/src/depsources.d.ts.map +1 -0
- package/dist/src/depsources.js +3367 -0
- package/dist/src/depsources.js.map +1 -0
- package/dist/src/diffinput.d.ts +10 -0
- package/dist/src/diffinput.d.ts.map +1 -0
- package/dist/src/diffinput.js +172 -0
- package/dist/src/diffinput.js.map +1 -0
- package/dist/src/doubtwords.d.ts +10 -0
- package/dist/src/doubtwords.d.ts.map +1 -0
- package/dist/src/doubtwords.js +13 -0
- package/dist/src/doubtwords.js.map +1 -0
- package/dist/src/ecosystem.d.ts +148 -0
- package/dist/src/ecosystem.d.ts.map +1 -0
- package/dist/src/ecosystem.js +338 -0
- package/dist/src/ecosystem.js.map +1 -0
- package/dist/src/engine/agentdir.d.ts +5 -0
- package/dist/src/engine/agentdir.d.ts.map +1 -0
- package/dist/src/engine/agentdir.js +21 -0
- package/dist/src/engine/agentdir.js.map +1 -0
- package/dist/src/engine/auth.d.ts +214 -0
- package/dist/src/engine/auth.d.ts.map +1 -0
- package/dist/src/engine/auth.js +374 -0
- package/dist/src/engine/auth.js.map +1 -0
- package/dist/src/engine/budget.d.ts +60 -0
- package/dist/src/engine/budget.d.ts.map +1 -0
- package/dist/src/engine/budget.js +113 -0
- package/dist/src/engine/budget.js.map +1 -0
- package/dist/src/engine/capfd.d.ts +6 -0
- package/dist/src/engine/capfd.d.ts.map +1 -0
- package/dist/src/engine/capfd.js +21 -0
- package/dist/src/engine/capfd.js.map +1 -0
- package/dist/src/engine/caseout.d.ts +66 -0
- package/dist/src/engine/caseout.d.ts.map +1 -0
- package/dist/src/engine/caseout.js +107 -0
- package/dist/src/engine/caseout.js.map +1 -0
- package/dist/src/engine/context.d.ts +57 -0
- package/dist/src/engine/context.d.ts.map +1 -0
- package/dist/src/engine/context.js +212 -0
- package/dist/src/engine/context.js.map +1 -0
- package/dist/src/engine/envmap.d.ts +13 -0
- package/dist/src/engine/envmap.d.ts.map +1 -0
- package/dist/src/engine/envmap.js +372 -0
- package/dist/src/engine/envmap.js.map +1 -0
- package/dist/src/engine/extfiles.d.ts +7 -0
- package/dist/src/engine/extfiles.d.ts.map +1 -0
- package/dist/src/engine/extfiles.js +23 -0
- package/dist/src/engine/extfiles.js.map +1 -0
- package/dist/src/engine/keyroute.d.ts +21 -0
- package/dist/src/engine/keyroute.d.ts.map +1 -0
- package/dist/src/engine/keyroute.js +58 -0
- package/dist/src/engine/keyroute.js.map +1 -0
- package/dist/src/engine/lens/cache-group.d.ts +20 -0
- package/dist/src/engine/lens/cache-group.d.ts.map +1 -0
- package/dist/src/engine/lens/cache-group.js +31 -0
- package/dist/src/engine/lens/cache-group.js.map +1 -0
- package/dist/src/engine/lens/cache-run.d.ts +65 -0
- package/dist/src/engine/lens/cache-run.d.ts.map +1 -0
- package/dist/src/engine/lens/cache-run.js +159 -0
- package/dist/src/engine/lens/cache-run.js.map +1 -0
- package/dist/src/engine/lens/deadline.d.ts +54 -0
- package/dist/src/engine/lens/deadline.d.ts.map +1 -0
- package/dist/src/engine/lens/deadline.js +111 -0
- package/dist/src/engine/lens/deadline.js.map +1 -0
- package/dist/src/engine/lens/engine-tools.d.ts +13 -0
- package/dist/src/engine/lens/engine-tools.d.ts.map +1 -0
- package/dist/src/engine/lens/engine-tools.js +37 -0
- package/dist/src/engine/lens/engine-tools.js.map +1 -0
- package/dist/src/engine/lens/env.d.ts +23 -0
- package/dist/src/engine/lens/env.d.ts.map +1 -0
- package/dist/src/engine/lens/env.js +42 -0
- package/dist/src/engine/lens/env.js.map +1 -0
- package/dist/src/engine/lens/launch-plan.d.ts +63 -0
- package/dist/src/engine/lens/launch-plan.d.ts.map +1 -0
- package/dist/src/engine/lens/launch-plan.js +203 -0
- package/dist/src/engine/lens/launch-plan.js.map +1 -0
- package/dist/src/engine/lens/leaf-cache.d.ts +22 -0
- package/dist/src/engine/lens/leaf-cache.d.ts.map +1 -0
- package/dist/src/engine/lens/leaf-cache.js +115 -0
- package/dist/src/engine/lens/leaf-cache.js.map +1 -0
- package/dist/src/engine/lens/permits.d.ts +14 -0
- package/dist/src/engine/lens/permits.d.ts.map +1 -0
- package/dist/src/engine/lens/permits.js +18 -0
- package/dist/src/engine/lens/permits.js.map +1 -0
- package/dist/src/engine/lens/registry.d.ts +55 -0
- package/dist/src/engine/lens/registry.d.ts.map +1 -0
- package/dist/src/engine/lens/registry.js +140 -0
- package/dist/src/engine/lens/registry.js.map +1 -0
- package/dist/src/engine/lens/round-lens.d.ts +16 -0
- package/dist/src/engine/lens/round-lens.d.ts.map +1 -0
- package/dist/src/engine/lens/round-lens.js +46 -0
- package/dist/src/engine/lens/round-lens.js.map +1 -0
- package/dist/src/engine/lens/runlens.d.ts +103 -0
- package/dist/src/engine/lens/runlens.d.ts.map +1 -0
- package/dist/src/engine/lens/runlens.js +538 -0
- package/dist/src/engine/lens/runlens.js.map +1 -0
- package/dist/src/engine/lens/section.d.ts +19 -0
- package/dist/src/engine/lens/section.d.ts.map +1 -0
- package/dist/src/engine/lens/section.js +40 -0
- package/dist/src/engine/lens/section.js.map +1 -0
- package/dist/src/engine/lens/semaphore.d.ts +13 -0
- package/dist/src/engine/lens/semaphore.d.ts.map +1 -0
- package/dist/src/engine/lens/semaphore.js +44 -0
- package/dist/src/engine/lens/semaphore.js.map +1 -0
- package/dist/src/engine/lens/tool.d.ts +34 -0
- package/dist/src/engine/lens/tool.d.ts.map +1 -0
- package/dist/src/engine/lens/tool.js +345 -0
- package/dist/src/engine/lens/tool.js.map +1 -0
- package/dist/src/engine/lens/wave.d.ts +63 -0
- package/dist/src/engine/lens/wave.d.ts.map +1 -0
- package/dist/src/engine/lens/wave.js +95 -0
- package/dist/src/engine/lens/wave.js.map +1 -0
- package/dist/src/engine/livesessions.d.ts +21 -0
- package/dist/src/engine/livesessions.d.ts.map +1 -0
- package/dist/src/engine/livesessions.js +57 -0
- package/dist/src/engine/livesessions.js.map +1 -0
- package/dist/src/engine/livewire.d.ts +18 -0
- package/dist/src/engine/livewire.d.ts.map +1 -0
- package/dist/src/engine/livewire.js +31 -0
- package/dist/src/engine/livewire.js.map +1 -0
- package/dist/src/engine/openable.d.ts +37 -0
- package/dist/src/engine/openable.d.ts.map +1 -0
- package/dist/src/engine/openable.js +120 -0
- package/dist/src/engine/openable.js.map +1 -0
- package/dist/src/engine/pisdk.d.ts +226 -0
- package/dist/src/engine/pisdk.d.ts.map +1 -0
- package/dist/src/engine/pisdk.js +552 -0
- package/dist/src/engine/pisdk.js.map +1 -0
- package/dist/src/engine/port.d.ts +144 -0
- package/dist/src/engine/port.d.ts.map +1 -0
- package/dist/src/engine/port.js +16 -0
- package/dist/src/engine/port.js.map +1 -0
- package/dist/src/engine/prompts.d.ts +159 -0
- package/dist/src/engine/prompts.d.ts.map +1 -0
- package/dist/src/engine/prompts.js +339 -0
- package/dist/src/engine/prompts.js.map +1 -0
- package/dist/src/engine/render.d.ts +10 -0
- package/dist/src/engine/render.d.ts.map +1 -0
- package/dist/src/engine/render.js +23 -0
- package/dist/src/engine/render.js.map +1 -0
- package/dist/src/engine/reviewruntime.d.ts +13 -0
- package/dist/src/engine/reviewruntime.d.ts.map +1 -0
- package/dist/src/engine/reviewruntime.js +35 -0
- package/dist/src/engine/reviewruntime.js.map +1 -0
- package/dist/src/engine/reviewsdk.d.ts +75 -0
- package/dist/src/engine/reviewsdk.d.ts.map +1 -0
- package/dist/src/engine/reviewsdk.js +180 -0
- package/dist/src/engine/reviewsdk.js.map +1 -0
- package/dist/src/engine/round.d.ts +166 -0
- package/dist/src/engine/round.d.ts.map +1 -0
- package/dist/src/engine/round.js +543 -0
- package/dist/src/engine/round.js.map +1 -0
- package/dist/src/engine/roundagents.d.ts +17 -0
- package/dist/src/engine/roundagents.d.ts.map +1 -0
- package/dist/src/engine/roundagents.js +49 -0
- package/dist/src/engine/roundagents.js.map +1 -0
- package/dist/src/engine/roundevents.d.ts +110 -0
- package/dist/src/engine/roundevents.d.ts.map +1 -0
- package/dist/src/engine/roundevents.js +276 -0
- package/dist/src/engine/roundevents.js.map +1 -0
- package/dist/src/engine/roundsdk.d.ts +33 -0
- package/dist/src/engine/roundsdk.d.ts.map +1 -0
- package/dist/src/engine/roundsdk.js +76 -0
- package/dist/src/engine/roundsdk.js.map +1 -0
- package/dist/src/engine/sdkruntime.d.ts +23 -0
- package/dist/src/engine/sdkruntime.d.ts.map +1 -0
- package/dist/src/engine/sdkruntime.js +340 -0
- package/dist/src/engine/sdkruntime.js.map +1 -0
- package/dist/src/engine/select.d.ts +16 -0
- package/dist/src/engine/select.d.ts.map +1 -0
- package/dist/src/engine/select.js +32 -0
- package/dist/src/engine/select.js.map +1 -0
- package/dist/src/engine/sessionwrap.d.ts +4 -0
- package/dist/src/engine/sessionwrap.d.ts.map +1 -0
- package/dist/src/engine/sessionwrap.js +31 -0
- package/dist/src/engine/sessionwrap.js.map +1 -0
- package/dist/src/engine/toolfence.d.ts +90 -0
- package/dist/src/engine/toolfence.d.ts.map +1 -0
- package/dist/src/engine/toolfence.js +378 -0
- package/dist/src/engine/toolfence.js.map +1 -0
- package/dist/src/engine/tooluid.d.ts +128 -0
- package/dist/src/engine/tooluid.d.ts.map +1 -0
- package/dist/src/engine/tooluid.js +401 -0
- package/dist/src/engine/tooluid.js.map +1 -0
- package/dist/src/envstrip.d.ts +10 -0
- package/dist/src/envstrip.d.ts.map +1 -0
- package/dist/src/envstrip.js +15 -0
- package/dist/src/envstrip.js.map +1 -0
- package/dist/src/escalationprompt.d.ts +22 -0
- package/dist/src/escalationprompt.d.ts.map +1 -0
- package/dist/src/escalationprompt.js +54 -0
- package/dist/src/escalationprompt.js.map +1 -0
- package/dist/src/execfn.d.ts +29 -0
- package/dist/src/execfn.d.ts.map +1 -0
- package/dist/src/execfn.js +55 -0
- package/dist/src/execfn.js.map +1 -0
- package/dist/src/finding-chain.d.ts +40 -0
- package/dist/src/finding-chain.d.ts.map +1 -0
- package/dist/src/finding-chain.js +76 -0
- package/dist/src/finding-chain.js.map +1 -0
- package/dist/src/finding-row.d.ts +24 -0
- package/dist/src/finding-row.d.ts.map +1 -0
- package/dist/src/finding-row.js +26 -0
- package/dist/src/finding-row.js.map +1 -0
- package/dist/src/findingkey.d.ts +99 -0
- package/dist/src/findingkey.d.ts.map +1 -0
- package/dist/src/findingkey.js +210 -0
- package/dist/src/findingkey.js.map +1 -0
- package/dist/src/findingsrecord.d.ts +175 -0
- package/dist/src/findingsrecord.d.ts.map +1 -0
- package/dist/src/findingsrecord.js +410 -0
- package/dist/src/findingsrecord.js.map +1 -0
- package/dist/src/followup-mode.d.ts +4 -0
- package/dist/src/followup-mode.d.ts.map +1 -0
- package/dist/src/followup-mode.js +6 -0
- package/dist/src/followup-mode.js.map +1 -0
- package/dist/src/gate.d.ts +199 -0
- package/dist/src/gate.d.ts.map +1 -0
- package/dist/src/gate.js +315 -0
- package/dist/src/gate.js.map +1 -0
- package/dist/src/ghcred.d.ts +58 -0
- package/dist/src/ghcred.d.ts.map +1 -0
- package/dist/src/ghcred.js +139 -0
- package/dist/src/ghcred.js.map +1 -0
- package/dist/src/githubAuth.d.ts +32 -0
- package/dist/src/githubAuth.d.ts.map +1 -0
- package/dist/src/githubAuth.js +116 -0
- package/dist/src/githubAuth.js.map +1 -0
- package/dist/src/githubcore.d.ts +20 -0
- package/dist/src/githubcore.d.ts.map +1 -0
- package/dist/src/githubcore.js +20 -0
- package/dist/src/githubcore.js.map +1 -0
- package/dist/src/glob.d.ts +11 -0
- package/dist/src/glob.d.ts.map +1 -0
- package/dist/src/glob.js +69 -0
- package/dist/src/glob.js.map +1 -0
- package/dist/src/guards.d.ts +93 -0
- package/dist/src/guards.d.ts.map +1 -0
- package/dist/src/guards.js +306 -0
- package/dist/src/guards.js.map +1 -0
- package/dist/src/heartbeat.d.ts +29 -0
- package/dist/src/heartbeat.d.ts.map +1 -0
- package/dist/src/heartbeat.js +87 -0
- package/dist/src/heartbeat.js.map +1 -0
- package/dist/src/heuristics.d.ts +247 -0
- package/dist/src/heuristics.d.ts.map +1 -0
- package/dist/src/heuristics.js +927 -0
- package/dist/src/heuristics.js.map +1 -0
- package/dist/src/homes.d.ts +181 -0
- package/dist/src/homes.d.ts.map +1 -0
- package/dist/src/homes.js +242 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hunkheader.d.ts +11 -0
- package/dist/src/hunkheader.d.ts.map +1 -0
- package/dist/src/hunkheader.js +18 -0
- package/dist/src/hunkheader.js.map +1 -0
- package/dist/src/include.d.ts +435 -0
- package/dist/src/include.d.ts.map +1 -0
- package/dist/src/include.js +1692 -0
- package/dist/src/include.js.map +1 -0
- package/dist/src/launchvocab.d.ts +36 -0
- package/dist/src/launchvocab.d.ts.map +1 -0
- package/dist/src/launchvocab.js +59 -0
- package/dist/src/launchvocab.js.map +1 -0
- package/dist/src/ledgercarry.d.ts +24 -0
- package/dist/src/ledgercarry.d.ts.map +1 -0
- package/dist/src/ledgercarry.js +109 -0
- package/dist/src/ledgercarry.js.map +1 -0
- package/dist/src/lensids.d.ts +7 -0
- package/dist/src/lensids.d.ts.map +1 -0
- package/dist/src/lensids.js +53 -0
- package/dist/src/lensids.js.map +1 -0
- package/dist/src/lensplanning.d.ts +8 -0
- package/dist/src/lensplanning.d.ts.map +1 -0
- package/dist/src/lensplanning.js +126 -0
- package/dist/src/lensplanning.js.map +1 -0
- package/dist/src/lensresult.d.ts +94 -0
- package/dist/src/lensresult.d.ts.map +1 -0
- package/dist/src/lensresult.js +162 -0
- package/dist/src/lensresult.js.map +1 -0
- package/dist/src/lenstuning.d.ts +97 -0
- package/dist/src/lenstuning.d.ts.map +1 -0
- package/dist/src/lenstuning.js +326 -0
- package/dist/src/lenstuning.js.map +1 -0
- package/dist/src/lintconfig.d.ts +31 -0
- package/dist/src/lintconfig.d.ts.map +1 -0
- package/dist/src/lintconfig.js +543 -0
- package/dist/src/lintconfig.js.map +1 -0
- package/dist/src/live/events.d.ts +188 -0
- package/dist/src/live/events.d.ts.map +1 -0
- package/dist/src/live/events.js +136 -0
- package/dist/src/live/events.js.map +1 -0
- package/dist/src/live/writer.d.ts +54 -0
- package/dist/src/live/writer.d.ts.map +1 -0
- package/dist/src/live/writer.js +516 -0
- package/dist/src/live/writer.js.map +1 -0
- package/dist/src/localreview.d.ts +128 -0
- package/dist/src/localreview.d.ts.map +1 -0
- package/dist/src/localreview.js +426 -0
- package/dist/src/localreview.js.map +1 -0
- package/dist/src/loosenedtests.d.ts +13 -0
- package/dist/src/loosenedtests.d.ts.map +1 -0
- package/dist/src/loosenedtests.js +188 -0
- package/dist/src/loosenedtests.js.map +1 -0
- package/dist/src/memoryport.d.ts +264 -0
- package/dist/src/memoryport.d.ts.map +1 -0
- package/dist/src/memoryport.js +445 -0
- package/dist/src/memoryport.js.map +1 -0
- package/dist/src/migrations.d.ts +106 -0
- package/dist/src/migrations.d.ts.map +1 -0
- package/dist/src/migrations.js +373 -0
- package/dist/src/migrations.js.map +1 -0
- package/dist/src/oneshot.d.ts +12 -0
- package/dist/src/oneshot.d.ts.map +1 -0
- package/dist/src/oneshot.js +8 -0
- package/dist/src/oneshot.js.map +1 -0
- package/dist/src/packing.d.ts +11 -0
- package/dist/src/packing.d.ts.map +1 -0
- package/dist/src/packing.js +31 -0
- package/dist/src/packing.js.map +1 -0
- package/dist/src/passes.d.ts +16 -0
- package/dist/src/passes.d.ts.map +1 -0
- package/dist/src/passes.js +104 -0
- package/dist/src/passes.js.map +1 -0
- package/dist/src/passtasks.d.ts +68 -0
- package/dist/src/passtasks.d.ts.map +1 -0
- package/dist/src/passtasks.js +360 -0
- package/dist/src/passtasks.js.map +1 -0
- package/dist/src/pathinside.d.ts +5 -0
- package/dist/src/pathinside.d.ts.map +1 -0
- package/dist/src/pathinside.js +9 -0
- package/dist/src/pathinside.js.map +1 -0
- package/dist/src/pibuiltins.d.ts +36 -0
- package/dist/src/pibuiltins.d.ts.map +1 -0
- package/dist/src/pibuiltins.js +83 -0
- package/dist/src/pibuiltins.js.map +1 -0
- package/dist/src/plankey.d.ts +4 -0
- package/dist/src/plankey.d.ts.map +1 -0
- package/dist/src/plankey.js +10 -0
- package/dist/src/plankey.js.map +1 -0
- package/dist/src/planner.d.ts +375 -0
- package/dist/src/planner.d.ts.map +1 -0
- package/dist/src/planner.js +722 -0
- package/dist/src/planner.js.map +1 -0
- package/dist/src/plugin/args.d.ts +19 -0
- package/dist/src/plugin/args.d.ts.map +1 -0
- package/dist/src/plugin/args.js +107 -0
- package/dist/src/plugin/args.js.map +1 -0
- package/dist/src/plugin/index.d.ts +3 -0
- package/dist/src/plugin/index.d.ts.map +1 -0
- package/dist/src/plugin/index.js +14 -0
- package/dist/src/plugin/index.js.map +1 -0
- package/dist/src/plugin/login.d.ts +39 -0
- package/dist/src/plugin/login.d.ts.map +1 -0
- package/dist/src/plugin/login.js +73 -0
- package/dist/src/plugin/login.js.map +1 -0
- package/dist/src/plugin/review.d.ts +27 -0
- package/dist/src/plugin/review.d.ts.map +1 -0
- package/dist/src/plugin/review.js +298 -0
- package/dist/src/plugin/review.js.map +1 -0
- package/dist/src/plugin/runner.d.ts +6 -0
- package/dist/src/plugin/runner.d.ts.map +1 -0
- package/dist/src/plugin/runner.js +65 -0
- package/dist/src/plugin/runner.js.map +1 -0
- package/dist/src/plugin/scan.d.ts +79 -0
- package/dist/src/plugin/scan.d.ts.map +1 -0
- package/dist/src/plugin/scan.js +348 -0
- package/dist/src/plugin/scan.js.map +1 -0
- package/dist/src/plugin/session.d.ts +56 -0
- package/dist/src/plugin/session.d.ts.map +1 -0
- package/dist/src/plugin/session.js +2 -0
- package/dist/src/plugin/session.js.map +1 -0
- package/dist/src/plugin/setup.d.ts +19 -0
- package/dist/src/plugin/setup.d.ts.map +1 -0
- package/dist/src/plugin/setup.js +142 -0
- package/dist/src/plugin/setup.js.map +1 -0
- package/dist/src/plugin/versiongate.d.ts +26 -0
- package/dist/src/plugin/versiongate.d.ts.map +1 -0
- package/dist/src/plugin/versiongate.js +83 -0
- package/dist/src/plugin/versiongate.js.map +1 -0
- package/dist/src/postingkey.d.ts +8 -0
- package/dist/src/postingkey.d.ts.map +1 -0
- package/dist/src/postingkey.js +25 -0
- package/dist/src/postingkey.js.map +1 -0
- package/dist/src/postingpolicy.d.ts +108 -0
- package/dist/src/postingpolicy.d.ts.map +1 -0
- package/dist/src/postingpolicy.js +341 -0
- package/dist/src/postingpolicy.js.map +1 -0
- package/dist/src/pr-identity.d.ts +3 -0
- package/dist/src/pr-identity.d.ts.map +1 -0
- package/dist/src/pr-identity.js +9 -0
- package/dist/src/pr-identity.js.map +1 -0
- package/dist/src/prdelta.d.ts +181 -0
- package/dist/src/prdelta.d.ts.map +1 -0
- package/dist/src/prdelta.js +501 -0
- package/dist/src/prdelta.js.map +1 -0
- package/dist/src/pricing.d.ts +94 -0
- package/dist/src/pricing.d.ts.map +1 -0
- package/dist/src/pricing.js +209 -0
- package/dist/src/pricing.js.map +1 -0
- package/dist/src/priorfindings.d.ts +167 -0
- package/dist/src/priorfindings.d.ts.map +1 -0
- package/dist/src/priorfindings.js +445 -0
- package/dist/src/priorfindings.js.map +1 -0
- package/dist/src/priortasks.d.ts +31 -0
- package/dist/src/priortasks.d.ts.map +1 -0
- package/dist/src/priortasks.js +119 -0
- package/dist/src/priortasks.js.map +1 -0
- package/dist/src/profilelookup.d.ts +59 -0
- package/dist/src/profilelookup.d.ts.map +1 -0
- package/dist/src/profilelookup.js +98 -0
- package/dist/src/profilelookup.js.map +1 -0
- package/dist/src/profileoverrides.d.ts +91 -0
- package/dist/src/profileoverrides.d.ts.map +1 -0
- package/dist/src/profileoverrides.js +313 -0
- package/dist/src/profileoverrides.js.map +1 -0
- package/dist/src/profiles.d.ts +144 -0
- package/dist/src/profiles.d.ts.map +1 -0
- package/dist/src/profiles.js +604 -0
- package/dist/src/profiles.js.map +1 -0
- package/dist/src/promptdoc.d.ts +3 -0
- package/dist/src/promptdoc.d.ts.map +1 -0
- package/dist/src/promptdoc.js +18 -0
- package/dist/src/promptdoc.js.map +1 -0
- package/dist/src/prtarget.d.ts +70 -0
- package/dist/src/prtarget.d.ts.map +1 -0
- package/dist/src/prtarget.js +181 -0
- package/dist/src/prtarget.js.map +1 -0
- package/dist/src/recheckorder.d.ts +32 -0
- package/dist/src/recheckorder.d.ts.map +1 -0
- package/dist/src/recheckorder.js +5 -0
- package/dist/src/recheckorder.js.map +1 -0
- package/dist/src/reviewapi.d.ts +207 -0
- package/dist/src/reviewapi.d.ts.map +1 -0
- package/dist/src/reviewapi.js +939 -0
- package/dist/src/reviewapi.js.map +1 -0
- package/dist/src/reviewbotfindings.d.ts +33 -0
- package/dist/src/reviewbotfindings.d.ts.map +1 -0
- package/dist/src/reviewbotfindings.js +80 -0
- package/dist/src/reviewbotfindings.js.map +1 -0
- package/dist/src/reviewconfig.d.ts +741 -0
- package/dist/src/reviewconfig.d.ts.map +1 -0
- package/dist/src/reviewconfig.js +797 -0
- package/dist/src/reviewconfig.js.map +1 -0
- package/dist/src/reviewdelta.d.ts +51 -0
- package/dist/src/reviewdelta.d.ts.map +1 -0
- package/dist/src/reviewdelta.js +119 -0
- package/dist/src/reviewdelta.js.map +1 -0
- package/dist/src/reviewdest.d.ts +86 -0
- package/dist/src/reviewdest.d.ts.map +1 -0
- package/dist/src/reviewdest.js +142 -0
- package/dist/src/reviewdest.js.map +1 -0
- package/dist/src/reviewerstub.d.ts +12 -0
- package/dist/src/reviewerstub.d.ts.map +1 -0
- package/dist/src/reviewerstub.js +28 -0
- package/dist/src/reviewerstub.js.map +1 -0
- package/dist/src/reviewhost.d.ts +58 -0
- package/dist/src/reviewhost.d.ts.map +1 -0
- package/dist/src/reviewhost.js +135 -0
- package/dist/src/reviewhost.js.map +1 -0
- package/dist/src/reviewpost.d.ts +79 -0
- package/dist/src/reviewpost.d.ts.map +1 -0
- package/dist/src/reviewpost.js +233 -0
- package/dist/src/reviewpost.js.map +1 -0
- package/dist/src/reviewrender.d.ts +154 -0
- package/dist/src/reviewrender.d.ts.map +1 -0
- package/dist/src/reviewrender.js +480 -0
- package/dist/src/reviewrender.js.map +1 -0
- package/dist/src/reviewstate.d.ts +62 -0
- package/dist/src/reviewstate.d.ts.map +1 -0
- package/dist/src/reviewstate.js +167 -0
- package/dist/src/reviewstate.js.map +1 -0
- package/dist/src/reviewstore.d.ts +17 -0
- package/dist/src/reviewstore.d.ts.map +1 -0
- package/dist/src/reviewstore.js +105 -0
- package/dist/src/reviewstore.js.map +1 -0
- package/dist/src/round-progress.d.ts +120 -0
- package/dist/src/round-progress.d.ts.map +1 -0
- package/dist/src/round-progress.js +172 -0
- package/dist/src/round-progress.js.map +1 -0
- package/dist/src/round-stage-deadlines.d.ts +12 -0
- package/dist/src/round-stage-deadlines.d.ts.map +1 -0
- package/dist/src/round-stage-deadlines.js +10 -0
- package/dist/src/round-stage-deadlines.js.map +1 -0
- package/dist/src/session-command.d.ts +19 -0
- package/dist/src/session-command.d.ts.map +1 -0
- package/dist/src/session-command.js +20 -0
- package/dist/src/session-command.js.map +1 -0
- package/dist/src/settledread.d.ts +61 -0
- package/dist/src/settledread.d.ts.map +1 -0
- package/dist/src/settledread.js +135 -0
- package/dist/src/settledread.js.map +1 -0
- package/dist/src/severity.d.ts +167 -0
- package/dist/src/severity.d.ts.map +1 -0
- package/dist/src/severity.js +364 -0
- package/dist/src/severity.js.map +1 -0
- package/dist/src/severityrank.d.ts +8 -0
- package/dist/src/severityrank.d.ts.map +1 -0
- package/dist/src/severityrank.js +16 -0
- package/dist/src/severityrank.js.map +1 -0
- package/dist/src/standing-review.d.ts +45 -0
- package/dist/src/standing-review.d.ts.map +1 -0
- package/dist/src/standing-review.js +43 -0
- package/dist/src/standing-review.js.map +1 -0
- package/dist/src/storerows.d.ts +225 -0
- package/dist/src/storerows.d.ts.map +1 -0
- package/dist/src/storerows.js +7 -0
- package/dist/src/storerows.js.map +1 -0
- package/dist/src/styleguide.d.ts +25 -0
- package/dist/src/styleguide.d.ts.map +1 -0
- package/dist/src/styleguide.js +272 -0
- package/dist/src/styleguide.js.map +1 -0
- package/dist/src/sweepstatus.d.ts +42 -0
- package/dist/src/sweepstatus.d.ts.map +1 -0
- package/dist/src/sweepstatus.js +97 -0
- package/dist/src/sweepstatus.js.map +1 -0
- package/dist/src/templates.d.ts +243 -0
- package/dist/src/templates.d.ts.map +1 -0
- package/dist/src/templates.js +847 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/types.d.ts +639 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +90 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/unifieddiff.d.ts +22 -0
- package/dist/src/unifieddiff.d.ts.map +1 -0
- package/dist/src/unifieddiff.js +176 -0
- package/dist/src/unifieddiff.js.map +1 -0
- package/dist/src/yieldloop.d.ts +2 -0
- package/dist/src/yieldloop.d.ts.map +1 -0
- package/dist/src/yieldloop.js +14 -0
- package/dist/src/yieldloop.js.map +1 -0
- package/package.json +60 -4
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// The QuickReview pi plugin: /review, /scan, /qcr-setup and /selfimprove in a
|
|
2
|
+
// user's own pi. A factory over its config (the host entry,
|
|
3
|
+
// src/plugin/index.ts, reads the process's env and home once and hands them
|
|
4
|
+
// in); the commands themselves are src/plugin/.
|
|
5
|
+
//
|
|
6
|
+
// At load the running pi's VERSION is checked against the range the package
|
|
7
|
+
// declares (src/plugin/versiongate.ts). Outside it the plugin registers no
|
|
8
|
+
// command and says so once, at the session's start.
|
|
9
|
+
//
|
|
10
|
+
// The person's own session gets commands and messages from the plugin, never
|
|
11
|
+
// a tool: the review's lens tools exist only inside the engine's own nested
|
|
12
|
+
// sessions (passes are leaves: the single-shepherd invariant in AGENTS.md).
|
|
13
|
+
import { VERSION, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { loginSummary } from "../src/engine/auth.js";
|
|
17
|
+
import { REVIEW_MESSAGE, runReviewCommand } from "../src/plugin/review.js";
|
|
18
|
+
import { runScanCommand, runSelfImproveCommand } from "../src/plugin/scan.js";
|
|
19
|
+
import { runSetupCommand } from "../src/plugin/setup.js";
|
|
20
|
+
import { declaredPiRange, piGate } from "../src/plugin/versiongate.js";
|
|
21
|
+
/** The commands, in the order /qcr-setup names them. */
|
|
22
|
+
export const QUICKREVIEW_COMMANDS = ["review", "scan", "qcr-setup", "selfimprove"];
|
|
23
|
+
/** The host pi's auth, by the shape the plugin asks of it. */
|
|
24
|
+
function hostAuth(ctx, agentDir) {
|
|
25
|
+
const registry = ctx.modelRegistry;
|
|
26
|
+
return {
|
|
27
|
+
logins() {
|
|
28
|
+
const file = join(agentDir, "auth.json");
|
|
29
|
+
if (!existsSync(file))
|
|
30
|
+
return {};
|
|
31
|
+
try {
|
|
32
|
+
return loginSummary(readFileSync(file, "utf8"));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
configured: (provider) => registry.getProviderAuthStatus(provider).configured,
|
|
39
|
+
refresh: async (provider, minValidityMs) => {
|
|
40
|
+
// VERIFY-ON-PIN: the registry facade asks for pi's own five minutes of
|
|
41
|
+
// validity only; its model runtime takes a longer minimum and refreshes
|
|
42
|
+
// under the host's own lock when the token is shorter than that. Absent
|
|
43
|
+
// that runtime, the facade's refresh is the most this pi offers.
|
|
44
|
+
const runtime = registry.runtime;
|
|
45
|
+
if (typeof runtime?.getAuth === "function")
|
|
46
|
+
await runtime.getAuth(provider, { minOAuthValidityMs: minValidityMs });
|
|
47
|
+
else
|
|
48
|
+
await registry.getProviderAuth(provider);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Is `data` the Esc key, as the terminal sends it? */
|
|
53
|
+
const isEscape = (data) => data === "\x1b" || data === "\x1b[27u";
|
|
54
|
+
function sessionUi(pi, ctx, print) {
|
|
55
|
+
return {
|
|
56
|
+
mode: ctx.mode,
|
|
57
|
+
interactive: ctx.hasUI,
|
|
58
|
+
select: (title, options, signal) => ctx.ui.select(title, options, signal ? { signal } : undefined),
|
|
59
|
+
confirm: (title, message, signal) => ctx.ui.confirm(title, message, signal ? { signal } : undefined),
|
|
60
|
+
notify: (message, level) => ctx.ui.notify(message, level),
|
|
61
|
+
status: (text) => ctx.ui.setStatus("quickreview", text),
|
|
62
|
+
onEscape: (handler) => ctx.mode === "tui"
|
|
63
|
+
? ctx.ui.onTerminalInput((data) => {
|
|
64
|
+
if (!isEscape(data))
|
|
65
|
+
return undefined;
|
|
66
|
+
handler();
|
|
67
|
+
return { consume: true };
|
|
68
|
+
})
|
|
69
|
+
: () => { },
|
|
70
|
+
show: (markdown, details) => pi.sendMessage({ customType: REVIEW_MESSAGE, content: markdown, display: true, details }),
|
|
71
|
+
tellAgent: (text) => ctx.isIdle() ? pi.sendUserMessage(text) : pi.sendUserMessage(text, { deliverAs: "followUp" }),
|
|
72
|
+
print,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** The plugin's extension factory over `config`. */
|
|
76
|
+
export function createQuickReview(config) {
|
|
77
|
+
return (pi) => {
|
|
78
|
+
const version = config.piVersion ?? VERSION;
|
|
79
|
+
const range = config.range ?? declaredPiRange();
|
|
80
|
+
const refused = piGate(version, range);
|
|
81
|
+
if (refused !== null) {
|
|
82
|
+
let told = false;
|
|
83
|
+
pi.on("session_start", (_event, ctx) => {
|
|
84
|
+
if (told)
|
|
85
|
+
return;
|
|
86
|
+
told = true;
|
|
87
|
+
ctx.ui.notify(refused, "error");
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// The current session's end: a run in flight stops with it.
|
|
92
|
+
let shutdown = new AbortController();
|
|
93
|
+
pi.on("session_start", () => {
|
|
94
|
+
if (shutdown.signal.aborted)
|
|
95
|
+
shutdown = new AbortController();
|
|
96
|
+
});
|
|
97
|
+
pi.on("session_shutdown", () => shutdown.abort());
|
|
98
|
+
let busy = false;
|
|
99
|
+
const command = (name, description, run) => pi.registerCommand(name, {
|
|
100
|
+
description,
|
|
101
|
+
handler: async (args, ctx) => {
|
|
102
|
+
if (busy) {
|
|
103
|
+
ctx.ui.notify("QuickReview is already running a command in this session", "warning");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
busy = true;
|
|
107
|
+
try {
|
|
108
|
+
const agentDir = config.agentDir ?? getAgentDir();
|
|
109
|
+
const host = {
|
|
110
|
+
cwd: ctx.cwd,
|
|
111
|
+
env: config.env,
|
|
112
|
+
home: config.home,
|
|
113
|
+
piVersion: version,
|
|
114
|
+
agentDir,
|
|
115
|
+
auth: hostAuth(ctx, agentDir),
|
|
116
|
+
runner: config.runner,
|
|
117
|
+
shutdown: shutdown.signal,
|
|
118
|
+
};
|
|
119
|
+
await run(args.trim(), host, sessionUi(pi, ctx, config.print));
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
busy = false;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
command("review", "QuickReview: review a PR, this branch or the uncommitted tree (--preview prices it)", runReviewCommand);
|
|
127
|
+
command("scan", "QuickReview: scan the whole repo (needs the qcr CLI; --sandbox docker to sandbox it)", runScanCommand);
|
|
128
|
+
command("qcr-setup", "QuickReview: check what the plugin needs, install qcr", (_a, host, ui) => runSetupCommand(host, ui, { range }));
|
|
129
|
+
command("selfimprove", "QuickReview: scan this repo, then have this session's agent fix the findings", runSelfImproveCommand);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=quickreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickreview.js","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type Side = "RIGHT" | "LEFT";
|
|
2
|
+
export interface ChangedRun {
|
|
3
|
+
side: Side;
|
|
4
|
+
/** First and last line number of the run, in the file version for `side`. */
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
/** 0-based index of the hunk this run belongs to (runs never span hunks). */
|
|
8
|
+
hunk: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AnchorRequest {
|
|
11
|
+
path: string;
|
|
12
|
+
side: Side;
|
|
13
|
+
/** Last line of the anchored range (GitHub's `line`). */
|
|
14
|
+
line: number;
|
|
15
|
+
/** First line of a multi-line anchor (GitHub's `start_line`); optional. */
|
|
16
|
+
start_line?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Changed-line runs of one file's unified patch.
|
|
20
|
+
*
|
|
21
|
+
* A run is a maximal sequence of consecutive changed lines on one side inside
|
|
22
|
+
* one hunk. Context lines (` `) end a run on both sides. A `-` line does not
|
|
23
|
+
* advance the RIGHT line counter (and a `+` does not advance LEFT), so a
|
|
24
|
+
* `+ / - / +` sequence stays one RIGHT run — the line numbers are contiguous.
|
|
25
|
+
*/
|
|
26
|
+
export declare function changedRuns(patch: string): ChangedRun[];
|
|
27
|
+
/** All changed runs of a PR, keyed by file path (own properties only, so a
|
|
28
|
+
* file named `__proto__` is a key like any other). */
|
|
29
|
+
export declare function runsByPath(patches: Record<string, string>): Record<string, ChangedRun[]>;
|
|
30
|
+
/** Why an anchor cannot be placed on the diff. */
|
|
31
|
+
export type AnchorRejectReason = "unknown-path" | "no-runs" | "outside-changed-run" | "inverted-range";
|
|
32
|
+
export type AnchorCheck = {
|
|
33
|
+
ok: true;
|
|
34
|
+
} | {
|
|
35
|
+
ok: false;
|
|
36
|
+
reason: AnchorRejectReason;
|
|
37
|
+
};
|
|
38
|
+
/** Validate one anchor against the runs of its claimed path. */
|
|
39
|
+
export declare function checkAnchor(runs: Record<string, ChangedRun[]>, req: AnchorRequest): AnchorCheck;
|
|
40
|
+
export interface AnchorPartition<T extends AnchorRequest> {
|
|
41
|
+
accepted: T[];
|
|
42
|
+
rejected: Array<{
|
|
43
|
+
comment: T;
|
|
44
|
+
reason: AnchorRejectReason;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Split inline comments into those that anchor cleanly and those that must be
|
|
49
|
+
* stripped into the body. Never throws — an unparseable/absent patch simply
|
|
50
|
+
* means the comment cannot be anchored.
|
|
51
|
+
*/
|
|
52
|
+
export declare function partitionByAnchor<T extends AnchorRequest>(comments: T[], patches: Record<string, string>): AnchorPartition<T>;
|
|
53
|
+
export declare const ANCHOR_REASON_TEXT: Record<AnchorRejectReason, string>;
|
|
54
|
+
//# sourceMappingURL=anchors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchors.d.ts","sourceRoot":"","sources":["../../src/anchors.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CA4DvD;AAED;sDACsD;AACtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAIxF;AAED,kDAAkD;AAClD,MAAM,MAAM,kBAAkB,GAC5B,cAAc,GAAG,SAAS,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEnF,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,CAW/F;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa;IACtD,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,aAAa,EACvD,QAAQ,EAAE,CAAC,EAAE,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,eAAe,CAAC,CAAC,CAAC,CAUpB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAKjE,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Inline-comment anchor validation: each claimed range must lie completely
|
|
2
|
+
// within one changed-line run in one hunk on the exact claimed path and side.
|
|
3
|
+
//
|
|
4
|
+
// GitHub rejects the *whole* review call when a single inline comment fails to
|
|
5
|
+
// anchor, so every comment is validated here first and anything invalid is
|
|
6
|
+
// stripped into the summary-body overflow instead — never a failed post.
|
|
7
|
+
//
|
|
8
|
+
// Input is the unified patch text GitHub returns per file in the PR files API
|
|
9
|
+
// (`patch` field). Pure module: no I/O.
|
|
10
|
+
import { parseHunkHeader } from "./hunkheader.js";
|
|
11
|
+
/**
|
|
12
|
+
* Changed-line runs of one file's unified patch.
|
|
13
|
+
*
|
|
14
|
+
* A run is a maximal sequence of consecutive changed lines on one side inside
|
|
15
|
+
* one hunk. Context lines (` `) end a run on both sides. A `-` line does not
|
|
16
|
+
* advance the RIGHT line counter (and a `+` does not advance LEFT), so a
|
|
17
|
+
* `+ / - / +` sequence stays one RIGHT run — the line numbers are contiguous.
|
|
18
|
+
*/
|
|
19
|
+
export function changedRuns(patch) {
|
|
20
|
+
const runs = [];
|
|
21
|
+
let hunk = -1;
|
|
22
|
+
let oldLine = 0;
|
|
23
|
+
let newLine = 0;
|
|
24
|
+
const open = {};
|
|
25
|
+
const close = (side) => {
|
|
26
|
+
for (const s of side ? [side] : ["RIGHT", "LEFT"]) {
|
|
27
|
+
const run = open[s];
|
|
28
|
+
if (run) {
|
|
29
|
+
runs.push(run);
|
|
30
|
+
delete open[s];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const extend = (side, line) => {
|
|
35
|
+
const run = open[side];
|
|
36
|
+
if (run && run.end + 1 === line) {
|
|
37
|
+
run.end = line;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
close(side);
|
|
41
|
+
open[side] = { side, start: line, end: line, hunk };
|
|
42
|
+
};
|
|
43
|
+
for (const raw of patch.split("\n")) {
|
|
44
|
+
if (raw.startsWith("@@")) {
|
|
45
|
+
close();
|
|
46
|
+
const h = parseHunkHeader(raw);
|
|
47
|
+
if (!h)
|
|
48
|
+
continue;
|
|
49
|
+
hunk += 1;
|
|
50
|
+
oldLine = h.old_start;
|
|
51
|
+
newLine = h.new_start;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (hunk < 0)
|
|
55
|
+
continue; // preamble (diff --git / index / --- / +++)
|
|
56
|
+
if (raw.startsWith("\\"))
|
|
57
|
+
continue; // ""
|
|
58
|
+
const marker = raw.length === 0 ? " " : raw[0];
|
|
59
|
+
if (marker === "+") {
|
|
60
|
+
extend("RIGHT", newLine);
|
|
61
|
+
newLine += 1;
|
|
62
|
+
}
|
|
63
|
+
else if (marker === "-") {
|
|
64
|
+
extend("LEFT", oldLine);
|
|
65
|
+
oldLine += 1;
|
|
66
|
+
}
|
|
67
|
+
else if (marker === " ") {
|
|
68
|
+
close();
|
|
69
|
+
oldLine += 1;
|
|
70
|
+
newLine += 1;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Unknown line shape (e.g. a truncated patch): be conservative.
|
|
74
|
+
close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
close();
|
|
78
|
+
// Deterministic order: by hunk, then start line, then LEFT before RIGHT.
|
|
79
|
+
const sideRank = (s) => (s === "LEFT" ? 0 : 1);
|
|
80
|
+
return runs.sort((a, b) => a.hunk - b.hunk || a.start - b.start || sideRank(a.side) - sideRank(b.side));
|
|
81
|
+
}
|
|
82
|
+
/** All changed runs of a PR, keyed by file path (own properties only, so a
|
|
83
|
+
* file named `__proto__` is a key like any other). */
|
|
84
|
+
export function runsByPath(patches) {
|
|
85
|
+
return Object.fromEntries(Object.entries(patches).map(([path, patch]) => [path, changedRuns(patch)]));
|
|
86
|
+
}
|
|
87
|
+
/** Validate one anchor against the runs of its claimed path. */
|
|
88
|
+
export function checkAnchor(runs, req) {
|
|
89
|
+
// Own keys only: a path such as `constructor` names no file of the diff.
|
|
90
|
+
const fileRuns = Object.hasOwn(runs, req.path) ? runs[req.path] : undefined;
|
|
91
|
+
if (!fileRuns)
|
|
92
|
+
return { ok: false, reason: "unknown-path" };
|
|
93
|
+
if (fileRuns.length === 0)
|
|
94
|
+
return { ok: false, reason: "no-runs" };
|
|
95
|
+
const end = req.line;
|
|
96
|
+
const start = req.start_line ?? req.line;
|
|
97
|
+
if (start > end)
|
|
98
|
+
return { ok: false, reason: "inverted-range" };
|
|
99
|
+
return fileRuns.some((r) => r.side === req.side && start >= r.start && end <= r.end)
|
|
100
|
+
? { ok: true }
|
|
101
|
+
: { ok: false, reason: "outside-changed-run" };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Split inline comments into those that anchor cleanly and those that must be
|
|
105
|
+
* stripped into the body. Never throws — an unparseable/absent patch simply
|
|
106
|
+
* means the comment cannot be anchored.
|
|
107
|
+
*/
|
|
108
|
+
export function partitionByAnchor(comments, patches) {
|
|
109
|
+
const runs = runsByPath(patches);
|
|
110
|
+
const accepted = [];
|
|
111
|
+
const rejected = [];
|
|
112
|
+
for (const c of comments) {
|
|
113
|
+
const check = checkAnchor(runs, c);
|
|
114
|
+
if (check.ok)
|
|
115
|
+
accepted.push(c);
|
|
116
|
+
else
|
|
117
|
+
rejected.push({ comment: c, reason: check.reason });
|
|
118
|
+
}
|
|
119
|
+
return { accepted, rejected };
|
|
120
|
+
}
|
|
121
|
+
export const ANCHOR_REASON_TEXT = {
|
|
122
|
+
"unknown-path": "path is not in this PR's diff",
|
|
123
|
+
"no-runs": "file has no changed lines in this PR",
|
|
124
|
+
"outside-changed-run": "line is outside any changed-line run on that side",
|
|
125
|
+
"inverted-range": "start_line is after line",
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=anchors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../src/anchors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** The nearest directory at or above `dir` that holds a package.json — robust
|
|
2
|
+
* under both dist/src (built) and src (vitest). `what` names it in the error. */
|
|
3
|
+
export declare function packageRootFrom(dir: string, what: string): string;
|
|
4
|
+
/** The data root for a module in `dir`. An installed package (inside a
|
|
5
|
+
* `node_modules/`) reads its own `assets/`, wherever it was installed, even
|
|
6
|
+
* under a checkout of this repo. Otherwise the checkout comes first: a module
|
|
7
|
+
* under it reads the repo root's data, never the frozen copy a pack of the
|
|
8
|
+
* package makes in its `assets/` (the postpack removes it, but a pack that
|
|
9
|
+
* stopped half way leaves it, and it is gitignored, so nothing shows it). Else
|
|
10
|
+
* the first directory at or above `dir` that holds the data: an `assets/`
|
|
11
|
+
* with `agents/` in it (an installed package; the answer is that `assets/`),
|
|
12
|
+
* or one holding both `agents/` and `prompts/`. */
|
|
13
|
+
export declare function assetRootFrom(dir: string): string;
|
|
14
|
+
/** The root of the review core's shipped data. */
|
|
15
|
+
export declare function assetRoot(): string;
|
|
16
|
+
//# sourceMappingURL=assetroot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetroot.d.ts","sourceRoot":"","sources":["../../src/assetroot.ts"],"names":[],"mappings":"AAWA;iFACiF;AACjF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjE;AA0BD;;;;;;;;mDAQmD;AACnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,kDAAkD;AAClD,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Where the review core's shipped data lives: prompts/, agents/, seeds/,
|
|
2
|
+
// profiles/ (the generic examples), schemas/, deploy/reviewer and the seed
|
|
3
|
+
// manifest. Resolved from this module's own location, however the package
|
|
4
|
+
// was installed: an installed package carries a byte copy of the data in its
|
|
5
|
+
// own `assets/` (its prepack, scripts/plugin-assets.mjs, makes it, and its
|
|
6
|
+
// postpack removes it again), and in the checkout the data is the repo
|
|
7
|
+
// root's, above packages/pi-plugin, whatever a pack left behind.
|
|
8
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
9
|
+
import { dirname, join, resolve } from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
/** The nearest directory at or above `dir` that holds a package.json — robust
|
|
12
|
+
* under both dist/src (built) and src (vitest). `what` names it in the error. */
|
|
13
|
+
export function packageRootFrom(dir, what) {
|
|
14
|
+
let at = dir;
|
|
15
|
+
for (let i = 0; i < 5; i++) {
|
|
16
|
+
if (existsSync(resolve(at, "package.json")))
|
|
17
|
+
return at;
|
|
18
|
+
at = resolve(at, "..");
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`${what} not found (no package.json above module dir)`);
|
|
21
|
+
}
|
|
22
|
+
/** Is `at` this repo's checkout: the data itself (agents/ and prompts/) with
|
|
23
|
+
* the review core's package beneath it? */
|
|
24
|
+
function isCheckout(at) {
|
|
25
|
+
return (existsSync(join(at, "agents")) &&
|
|
26
|
+
existsSync(join(at, "prompts")) &&
|
|
27
|
+
existsSync(join(at, "packages", "pi-plugin", "package.json")));
|
|
28
|
+
}
|
|
29
|
+
/** The installed package `dir` is in: the nearest directory at or above it
|
|
30
|
+
* with a package.json, when that directory really sits inside a
|
|
31
|
+
* `node_modules/` (symlinks resolved: a workspace link into a checkout is the
|
|
32
|
+
* checkout) and carries its data in `assets/`. Null for a module in a checkout. */
|
|
33
|
+
function installedPackageAssets(dir) {
|
|
34
|
+
for (let at = resolve(dir);; at = dirname(at)) {
|
|
35
|
+
if (existsSync(join(at, "package.json"))) {
|
|
36
|
+
const inside = realpathSync(at).split(/[\\/]/).includes("node_modules");
|
|
37
|
+
return inside && existsSync(join(at, "assets", "agents")) ? join(at, "assets") : null;
|
|
38
|
+
}
|
|
39
|
+
if (dirname(at) === at)
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** The data root for a module in `dir`. An installed package (inside a
|
|
44
|
+
* `node_modules/`) reads its own `assets/`, wherever it was installed, even
|
|
45
|
+
* under a checkout of this repo. Otherwise the checkout comes first: a module
|
|
46
|
+
* under it reads the repo root's data, never the frozen copy a pack of the
|
|
47
|
+
* package makes in its `assets/` (the postpack removes it, but a pack that
|
|
48
|
+
* stopped half way leaves it, and it is gitignored, so nothing shows it). Else
|
|
49
|
+
* the first directory at or above `dir` that holds the data: an `assets/`
|
|
50
|
+
* with `agents/` in it (an installed package; the answer is that `assets/`),
|
|
51
|
+
* or one holding both `agents/` and `prompts/`. */
|
|
52
|
+
export function assetRootFrom(dir) {
|
|
53
|
+
const start = resolve(dir);
|
|
54
|
+
const own = installedPackageAssets(start);
|
|
55
|
+
if (own !== null)
|
|
56
|
+
return own;
|
|
57
|
+
for (let at = start;; at = dirname(at)) {
|
|
58
|
+
if (isCheckout(at))
|
|
59
|
+
return at;
|
|
60
|
+
if (dirname(at) === at)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
for (let at = start;; at = dirname(at)) {
|
|
64
|
+
if (existsSync(join(at, "assets", "agents")))
|
|
65
|
+
return join(at, "assets");
|
|
66
|
+
if (existsSync(join(at, "agents")) && existsSync(join(at, "prompts")))
|
|
67
|
+
return at;
|
|
68
|
+
if (dirname(at) === at)
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`asset root not found: no assets/agents/, and no directory with agents/ and prompts/, above ${dir}`);
|
|
72
|
+
}
|
|
73
|
+
/** The root of the review core's shipped data. */
|
|
74
|
+
export function assetRoot() {
|
|
75
|
+
return assetRootFrom(dirname(fileURLToPath(import.meta.url)));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=assetroot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetroot.js","sourceRoot":"","sources":["../../src/assetroot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const PI_AUTH_ERROR_RE: RegExp;
|
|
2
|
+
/** True when a JSONL line is a record carrying an auth-failure `errorMessage`
|
|
3
|
+
* field — at any depth, since a subagent's failed message arrives nested in
|
|
4
|
+
* its tool result. Text inside string values (tool output, quoted JSON) never
|
|
5
|
+
* matches: it is data, not a key. Non-JSON lines never match. */
|
|
6
|
+
export declare function lineHasAuthError(line: string): boolean;
|
|
7
|
+
/** Only the tail is read: session JSONLs grow large, and a live auth failure
|
|
8
|
+
* is by definition near the end of the file. */
|
|
9
|
+
export declare const AUTH_TAIL_BYTES: number;
|
|
10
|
+
export interface AuthScanHit {
|
|
11
|
+
file: string;
|
|
12
|
+
mtimeMs: number;
|
|
13
|
+
}
|
|
14
|
+
/** Scan *.jsonl files modified at/after `sinceMs` (dir + one sublevel) for
|
|
15
|
+
* auth-error signatures. Unreadable files are skipped — observation must
|
|
16
|
+
* never throw into the daemon tick — and counted (`scanPiAuth`'s `unread`),
|
|
17
|
+
* so a caller keeps them inside its next window.
|
|
18
|
+
*
|
|
19
|
+
* `seen` (path → byte offset, updated in place) makes the scan read only what
|
|
20
|
+
* was appended since the last scan, so an old error still inside the tail
|
|
21
|
+
* never matches again after a re-login and the flag can clear. A file not in
|
|
22
|
+
* `seen` is read tail-only.
|
|
23
|
+
*
|
|
24
|
+
* `seen` is also pruned: an entry under `sessionsDir` whose file
|
|
25
|
+
* the listing no longer shows — archived, or its whole session dir gone — is
|
|
26
|
+
* dropped, so the map tracks the live tree instead of every file that ever
|
|
27
|
+
* existed. Only a listing that answered prunes: an entry under a directory
|
|
28
|
+
* that could not be read stays (its file is unknown, never gone). */
|
|
29
|
+
export declare function scanPiAuthErrors(sessionsDir: string, sinceMs: number, seen?: Map<string, number>): AuthScanHit[];
|
|
30
|
+
/** How long a detection keeps the status flag up with no fresh errors. */
|
|
31
|
+
export declare const AUTH_FLAG_FRESH_MS: number;
|
|
32
|
+
export interface PiAuthStatus {
|
|
33
|
+
last_at: string;
|
|
34
|
+
hits: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Stateful watcher for the daemon tick. Each scan covers files modified since
|
|
38
|
+
* the previous scan (first scan looks 10 minutes back). `status()` reports
|
|
39
|
+
* the flag while the last detection is fresh (< AUTH_FLAG_FRESH_MS) — the
|
|
40
|
+
* flag clears itself once the errors stop.
|
|
41
|
+
*/
|
|
42
|
+
export declare class PiAuthWatch {
|
|
43
|
+
private readonly now;
|
|
44
|
+
private sinceMs;
|
|
45
|
+
private lastErrorAt;
|
|
46
|
+
private totalHits;
|
|
47
|
+
/** Per-file offset already scanned — a match is a NEW error line, never an
|
|
48
|
+
* old one the tail still holds. */
|
|
49
|
+
private readonly seen;
|
|
50
|
+
private readonly sessionsDirs;
|
|
51
|
+
constructor(
|
|
52
|
+
/** One root, or several: each is scanned the same way (dir + one sublevel). */
|
|
53
|
+
sessionsDirs: string | readonly string[], now?: () => Date);
|
|
54
|
+
/** How many files the scan is tracking an offset for — the live tree's
|
|
55
|
+
* session files it has read, never every file that ever existed. */
|
|
56
|
+
trackedFiles(): number;
|
|
57
|
+
/** Returns the NEW hits found this scan (empty array when quiet). */
|
|
58
|
+
scan(): AuthScanHit[];
|
|
59
|
+
status(): PiAuthStatus | undefined;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=authwatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authwatch.d.ts","sourceRoot":"","sources":["../../src/authwatch.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,gBAAgB,QAAoE,CAAC;AAElG;;;iEAGiE;AACjE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBtD;AAED;gDACgD;AAChD,eAAO,MAAM,eAAe,QAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAwBD;;;;;;;;;;;;;;qEAcqE;AACrE,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB,WAAW,EAAE,CAEf;AAoED,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IAapB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAZtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAK;IACtB;uCACmC;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAElD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;;IAG/C,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,IAAuB;IAMrD;wEACoE;IACpE,YAAY,IAAI,MAAM;IAItB,qEAAqE;IACrE,IAAI,IAAI,WAAW,EAAE;IAiBrB,MAAM,IAAI,YAAY,GAAG,SAAS;CAKnC"}
|