@quickchatai/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 +401 -2
- package/THIRD-PARTY-NOTICES.md +134 -0
- package/agents/pass-abstraction.md +64 -0
- package/agents/pass-ask-human.md +134 -0
- package/agents/pass-backcompat.md +67 -0
- package/agents/pass-baseline.md +61 -0
- package/agents/pass-behaviour-delta.md +64 -0
- package/agents/pass-bounds.md +36 -0
- package/agents/pass-claims.md +31 -0
- package/agents/pass-concurrency.md +168 -0
- package/agents/pass-consistency.md +57 -0
- package/agents/pass-contracts.md +30 -0
- package/agents/pass-data-safety.md +54 -0
- package/agents/pass-deferred.md +35 -0
- package/agents/pass-delivery.md +37 -0
- package/agents/pass-duplication.md +60 -0
- package/agents/pass-intent.md +63 -0
- package/agents/pass-lint-conformance.md +46 -0
- package/agents/pass-maintainability.md +67 -0
- package/agents/pass-placement.md +68 -0
- package/agents/pass-prod-risk.md +24 -0
- package/agents/pass-rollout.md +32 -0
- package/agents/pass-roundtrip.md +46 -0
- package/agents/pass-security.md +31 -0
- package/agents/pass-simplicity.md +68 -0
- package/agents/pass-statelessness.md +27 -0
- package/agents/pass-style.md +37 -0
- package/agents/pass-sweep.md +57 -0
- package/agents/pass-tests.md +58 -0
- package/agents/pass-ui.md +23 -0
- package/agents/pass-validate.md +50 -0
- package/agents/pass-widened.md +46 -0
- package/agents/scan/pass-scan.md +86 -0
- package/bin/qcr.js +11 -0
- package/config.example.toml +1099 -0
- package/deploy/ansible/README.md +356 -0
- package/deploy/ansible/group_vars/all.yml +212 -0
- package/deploy/ansible/inventory.example.ini +25 -0
- package/deploy/ansible/playbook.yml +360 -0
- package/deploy/collect-secrets.sh +289 -0
- package/deploy/collect-slack-secrets.mjs +1190 -0
- package/deploy/github-app-manifest.json +31 -0
- package/deploy/manifest.schema.json +75 -0
- package/deploy/qcr-update.sh +803 -0
- package/deploy/reviewer/AGENTS.override.md +12 -0
- package/dist/extensions/cli/bash-guard-ambient.js +42 -0
- package/dist/extensions/cli/bash-guard-ambient.js.map +1 -0
- package/dist/extensions/cli/bash-guard.js +5 -0
- package/dist/extensions/cli/bash-guard.js.map +1 -0
- package/dist/extensions/cli/companion-guard.js +5 -0
- package/dist/extensions/cli/companion-guard.js.map +1 -0
- package/dist/extensions/cli/debug-round.js +8 -0
- package/dist/extensions/cli/debug-round.js.map +1 -0
- package/dist/extensions/cli/inject-bridge.js +5 -0
- package/dist/extensions/cli/inject-bridge.js.map +1 -0
- package/dist/extensions/cli/ledger-pin.js +5 -0
- package/dist/extensions/cli/ledger-pin.js.map +1 -0
- package/dist/extensions/cli/lens.js +13 -0
- package/dist/extensions/cli/lens.js.map +1 -0
- package/dist/extensions/cli/login-route.js +5 -0
- package/dist/extensions/cli/login-route.js.map +1 -0
- package/dist/extensions/cli/muted-theme.js +5 -0
- package/dist/extensions/cli/muted-theme.js.map +1 -0
- package/dist/extensions/cli/onboarding.js +5 -0
- package/dist/extensions/cli/onboarding.js.map +1 -0
- package/dist/extensions/cli/setup.js +5 -0
- package/dist/extensions/cli/setup.js.map +1 -0
- package/dist/extensions/cli/tui-view.js +5 -0
- package/dist/extensions/cli/tui-view.js.map +1 -0
- package/dist/extensions/companion-guard.js +361 -0
- package/dist/extensions/companion-guard.js.map +1 -0
- package/dist/extensions/debug-round.js +204 -0
- package/dist/extensions/debug-round.js.map +1 -0
- package/dist/extensions/inject-bridge.js +603 -0
- package/dist/extensions/inject-bridge.js.map +1 -0
- package/dist/extensions/login-route.js +180 -0
- package/dist/extensions/login-route.js.map +1 -0
- package/dist/extensions/muted-theme.js +12 -0
- package/dist/extensions/muted-theme.js.map +1 -0
- package/dist/extensions/onboarding.js +198 -0
- package/dist/extensions/onboarding.js.map +1 -0
- package/dist/extensions/setup-replay.js +269 -0
- package/dist/extensions/setup-replay.js.map +1 -0
- package/dist/extensions/setup-scan.js +998 -0
- package/dist/extensions/setup-scan.js.map +1 -0
- package/dist/extensions/setup-triage.js +175 -0
- package/dist/extensions/setup-triage.js.map +1 -0
- package/dist/extensions/setup.js +1160 -0
- package/dist/extensions/setup.js.map +1 -0
- package/dist/extensions/tui-view.js +389 -0
- package/dist/extensions/tui-view.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/client.js +376 -0
- package/dist/extensions/vendor/openviking-pi/client.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/config.js +189 -0
- package/dist/extensions/vendor/openviking-pi/config.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/index.js +421 -0
- package/dist/extensions/vendor/openviking-pi/index.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +86 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs +408 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +41 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js +290 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js +148 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +68 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js +77 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js +216 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js +154 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js +254 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js +94 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js +333 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/recall.js +108 -0
- package/dist/extensions/vendor/openviking-pi/recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs +529 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs +205 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs +442 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs +286 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +189 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs +580 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs +11 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs +63 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs +58 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/sync.js +127 -0
- package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js +25 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/tools.js +417 -0
- package/dist/extensions/vendor/openviking-pi/tools.js.map +1 -0
- package/dist/src/anomalies.js +483 -0
- package/dist/src/anomalies.js.map +1 -0
- package/dist/src/answerworker.js +180 -0
- package/dist/src/answerworker.js.map +1 -0
- package/dist/src/appstamp.js +68 -0
- package/dist/src/appstamp.js.map +1 -0
- package/dist/src/archive/admission.js +3 -0
- package/dist/src/archive/admission.js.map +1 -0
- package/dist/src/archive/archivedb.js +474 -0
- package/dist/src/archive/archivedb.js.map +1 -0
- package/dist/src/archive/archiver.js +1770 -0
- package/dist/src/archive/archiver.js.map +1 -0
- package/dist/src/archive/archivewrite.js +198 -0
- package/dist/src/archive/archivewrite.js.map +1 -0
- package/dist/src/archive/bundle.js +266 -0
- package/dist/src/archive/bundle.js.map +1 -0
- package/dist/src/archive/dbmove.js +638 -0
- package/dist/src/archive/dbmove.js.map +1 -0
- package/dist/src/archive/duplicatecounts.js +80 -0
- package/dist/src/archive/duplicatecounts.js.map +1 -0
- package/dist/src/archive/eligibility.js +113 -0
- package/dist/src/archive/eligibility.js.map +1 -0
- package/dist/src/archive/extract.js +288 -0
- package/dist/src/archive/extract.js.map +1 -0
- package/dist/src/archive/fsutil.js +330 -0
- package/dist/src/archive/fsutil.js.map +1 -0
- package/dist/src/archive/gzfile.js +277 -0
- package/dist/src/archive/gzfile.js.map +1 -0
- package/dist/src/archive/kinds.js +22 -0
- package/dist/src/archive/kinds.js.map +1 -0
- package/dist/src/archive/livecheckpoint.js +178 -0
- package/dist/src/archive/livecheckpoint.js.map +1 -0
- package/dist/src/archive/liveretention.js +145 -0
- package/dist/src/archive/liveretention.js.map +1 -0
- package/dist/src/archive/manifest.js +284 -0
- package/dist/src/archive/manifest.js.map +1 -0
- package/dist/src/archive/overseer.js +283 -0
- package/dist/src/archive/overseer.js.map +1 -0
- package/dist/src/archive/piglobal.js +129 -0
- package/dist/src/archive/piglobal.js.map +1 -0
- package/dist/src/archive/plan.js +398 -0
- package/dist/src/archive/plan.js.map +1 -0
- package/dist/src/archive/prarchive.js +831 -0
- package/dist/src/archive/prarchive.js.map +1 -0
- package/dist/src/archive/prfiles.js +303 -0
- package/dist/src/archive/prfiles.js.map +1 -0
- package/dist/src/archive/report.js +169 -0
- package/dist/src/archive/report.js.map +1 -0
- package/dist/src/archive/restore.js +276 -0
- package/dist/src/archive/restore.js.map +1 -0
- package/dist/src/archive/rows.js +106 -0
- package/dist/src/archive/rows.js.map +1 -0
- package/dist/src/archive/seal.js +480 -0
- package/dist/src/archive/seal.js.map +1 -0
- package/dist/src/archive/status.js +528 -0
- package/dist/src/archive/status.js.map +1 -0
- package/dist/src/archive/storepass.js +409 -0
- package/dist/src/archive/storepass.js.map +1 -0
- package/dist/src/backfill.js +217 -0
- package/dist/src/backfill.js.map +1 -0
- package/dist/src/bench/cost.js +87 -0
- package/dist/src/bench/exec.js +76 -0
- package/dist/src/bench/values.js +14 -0
- package/dist/src/botcontrol.js +127 -0
- package/dist/src/botcontrol.js.map +1 -0
- package/dist/src/botworker.js +805 -0
- package/dist/src/botworker.js.map +1 -0
- package/dist/src/capture.js +234 -0
- package/dist/src/capture.js.map +1 -0
- package/dist/src/cases.js +1491 -0
- package/dist/src/cases.js.map +1 -0
- package/dist/src/channelfs.js +27 -0
- package/dist/src/channelfs.js.map +1 -0
- package/dist/src/checklist.js +312 -0
- package/dist/src/checklist.js.map +1 -0
- package/dist/src/ciretry.js +92 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1947 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +334 -0
- package/dist/src/cliops.js.map +1 -0
- package/dist/src/clonedir.js +15 -0
- package/dist/src/clonedir.js.map +1 -0
- package/dist/src/commandeffects.js +43 -0
- package/dist/src/commandeffects.js.map +1 -0
- package/dist/src/commands.js +1335 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/companioninbox.js +203 -0
- package/dist/src/companioninbox.js.map +1 -0
- package/dist/src/compare.js +673 -0
- package/dist/src/compare.js.map +1 -0
- package/dist/src/config.js +1041 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/configcheck.js +111 -0
- package/dist/src/configcheck.js.map +1 -0
- package/dist/src/coreext.js +43 -0
- package/dist/src/coreext.js.map +1 -0
- package/dist/src/daemon.js +945 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/debuground.js +731 -0
- package/dist/src/debuground.js.map +1 -0
- package/dist/src/debugroundpi.js +223 -0
- package/dist/src/debugroundpi.js.map +1 -0
- package/dist/src/diagnostics.js +14 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/digest.js +139 -0
- package/dist/src/digest.js.map +1 -0
- package/dist/src/dispatch.js +1727 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/engine/answerguard.js +18 -0
- package/dist/src/engine/answerguard.js.map +1 -0
- package/dist/src/engine/botsdk.js +262 -0
- package/dist/src/engine/botsdk.js.map +1 -0
- package/dist/src/engine/caserunner-sdk.js +332 -0
- package/dist/src/engine/caserunner-sdk.js.map +1 -0
- package/dist/src/engine/debugpi.js +206 -0
- package/dist/src/engine/debugpi.js.map +1 -0
- package/dist/src/eod.js +473 -0
- package/dist/src/eod.js.map +1 -0
- package/dist/src/eodpinwatch.js +391 -0
- package/dist/src/eodpinwatch.js.map +1 -0
- package/dist/src/escalation.js +1009 -0
- package/dist/src/escalation.js.map +1 -0
- package/dist/src/eventloop.js +779 -0
- package/dist/src/eventloop.js.map +1 -0
- package/dist/src/execboundary.js +437 -0
- package/dist/src/execboundary.js.map +1 -0
- package/dist/src/feedback.js +915 -0
- package/dist/src/feedback.js.map +1 -0
- package/dist/src/findingscheck.js +200 -0
- package/dist/src/findingscheck.js.map +1 -0
- package/dist/src/fsdenied.js +26 -0
- package/dist/src/fsdenied.js.map +1 -0
- package/dist/src/ghread.js +181 -0
- package/dist/src/ghread.js.map +1 -0
- package/dist/src/github.js +1098 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/githubtoken.js +346 -0
- package/dist/src/githubtoken.js.map +1 -0
- package/dist/src/homes.js +103 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hostroute.js +24 -0
- package/dist/src/hostroute.js.map +1 -0
- package/dist/src/improvements.js +625 -0
- package/dist/src/improvements.js.map +1 -0
- package/dist/src/install.js +946 -0
- package/dist/src/install.js.map +1 -0
- package/dist/src/installkind.js +40 -0
- package/dist/src/installkind.js.map +1 -0
- package/dist/src/ipc/capability.js +286 -0
- package/dist/src/ipc/capability.js.map +1 -0
- package/dist/src/ipc/client.js +226 -0
- package/dist/src/ipc/client.js.map +1 -0
- package/dist/src/ipc/control.js +70 -0
- package/dist/src/ipc/control.js.map +1 -0
- package/dist/src/ipc/ghreadshim.js +77 -0
- package/dist/src/ipc/ghreadshim.js.map +1 -0
- package/dist/src/ipc/launcher.js +65 -0
- package/dist/src/ipc/launcher.js.map +1 -0
- package/dist/src/ipc/permits.js +293 -0
- package/dist/src/ipc/permits.js.map +1 -0
- package/dist/src/ipc/postshim.js +137 -0
- package/dist/src/ipc/postshim.js.map +1 -0
- package/dist/src/ipc/protocol.js +239 -0
- package/dist/src/ipc/protocol.js.map +1 -0
- package/dist/src/ipc/server.js +312 -0
- package/dist/src/ipc/server.js.map +1 -0
- package/dist/src/ipc/workerspec.js +148 -0
- package/dist/src/ipc/workerspec.js.map +1 -0
- package/dist/src/learner/learner.js +1272 -0
- package/dist/src/learner/learner.js.map +1 -0
- package/dist/src/learner/miner.js +948 -0
- package/dist/src/learner/miner.js.map +1 -0
- package/dist/src/learner/packet.js +216 -0
- package/dist/src/learner/packet.js.map +1 -0
- package/dist/src/learner/receipt.js +135 -0
- package/dist/src/learner/receipt.js.map +1 -0
- package/dist/src/learner/status.js +38 -0
- package/dist/src/learner/status.js.map +1 -0
- package/dist/src/ledgercheck.js +120 -0
- package/dist/src/ledgercheck.js.map +1 -0
- package/dist/src/lessonledger.js +451 -0
- package/dist/src/lessonledger.js.map +1 -0
- package/dist/src/lessonselect.js +639 -0
- package/dist/src/lessonselect.js.map +1 -0
- package/dist/src/lessonshadow.js +540 -0
- package/dist/src/lessonshadow.js.map +1 -0
- package/dist/src/levers.js +302 -0
- package/dist/src/levers.js.map +1 -0
- package/dist/src/live/projection.js +450 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/publish.js +83 -0
- package/dist/src/live/publish.js.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/livecli.js +288 -0
- package/dist/src/livecli.js.map +1 -0
- package/dist/src/loginhint.js +47 -0
- package/dist/src/loginhint.js.map +1 -0
- package/dist/src/loginrefresh/atomic.js +66 -0
- package/dist/src/loginrefresh/atomic.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +93 -0
- package/dist/src/loginrefresh/lock.js.map +1 -0
- package/dist/src/loginrefresh/main.js +58 -0
- package/dist/src/loginrefresh/main.js.map +1 -0
- package/dist/src/loginrefresh/pirefresh.js +52 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -0
- package/dist/src/loginrefresh/refresher.js +286 -0
- package/dist/src/loginrefresh/refresher.js.map +1 -0
- package/dist/src/loginrefresh/supervisor.js +253 -0
- package/dist/src/loginrefresh/supervisor.js.map +1 -0
- package/dist/src/loginrefresh/types.js +4 -0
- package/dist/src/loginrefresh/types.js.map +1 -0
- package/dist/src/memory/context.js +251 -0
- package/dist/src/memory/context.js.map +1 -0
- package/dist/src/memory/datafence.js +5 -0
- package/dist/src/memory/datafence.js.map +1 -0
- package/dist/src/memory/delivery.js +131 -0
- package/dist/src/memory/delivery.js.map +1 -0
- package/dist/src/memory/eventtags.js +81 -0
- package/dist/src/memory/eventtags.js.map +1 -0
- package/dist/src/memory/health.js +713 -0
- package/dist/src/memory/health.js.map +1 -0
- package/dist/src/memory/import.js +504 -0
- package/dist/src/memory/import.js.map +1 -0
- package/dist/src/memory/layout.js +252 -0
- package/dist/src/memory/layout.js.map +1 -0
- package/dist/src/memory/legacy-file.js +100 -0
- package/dist/src/memory/legacy-file.js.map +1 -0
- package/dist/src/memory/lessons.js +370 -0
- package/dist/src/memory/lessons.js.map +1 -0
- package/dist/src/memory/ovsession.js +449 -0
- package/dist/src/memory/ovsession.js.map +1 -0
- package/dist/src/memory/relayout.js +259 -0
- package/dist/src/memory/relayout.js.map +1 -0
- package/dist/src/memory/roundactivity.js +180 -0
- package/dist/src/memory/roundactivity.js.map +1 -0
- package/dist/src/memory/selection.js +690 -0
- package/dist/src/memory/selection.js.map +1 -0
- package/dist/src/memory/shadowstatus.js +69 -0
- package/dist/src/memory/shadowstatus.js.map +1 -0
- package/dist/src/memory/store.js +83 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/memory/textidentity.js +8 -0
- package/dist/src/memory/textidentity.js.map +1 -0
- package/dist/src/metrics.js +773 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/missingconfig.js +8 -0
- package/dist/src/missingconfig.js.map +1 -0
- package/dist/src/npmverbs.js +228 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +219 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +329 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +75 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/pipin.js +22 -0
- package/dist/src/onboard/pipin.js.map +1 -0
- package/dist/src/onboard/stepforward.js +41 -0
- package/dist/src/onboard/stepforward.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +214 -0
- package/dist/src/onboard/steps/appslug.js.map +1 -0
- package/dist/src/onboard/steps/bringup.js +408 -0
- package/dist/src/onboard/steps/bringup.js.map +1 -0
- package/dist/src/onboard/steps/compose.js +372 -0
- package/dist/src/onboard/steps/compose.js.map +1 -0
- package/dist/src/onboard/steps/configdelivery.js +50 -0
- package/dist/src/onboard/steps/configdelivery.js.map +1 -0
- package/dist/src/onboard/steps/configfill.js +1218 -0
- package/dist/src/onboard/steps/configfill.js.map +1 -0
- package/dist/src/onboard/steps/deploysh.js +80 -0
- package/dist/src/onboard/steps/deploysh.js.map +1 -0
- package/dist/src/onboard/steps/embeddings.js +472 -0
- package/dist/src/onboard/steps/embeddings.js.map +1 -0
- package/dist/src/onboard/steps/escalation.js +571 -0
- package/dist/src/onboard/steps/escalation.js.map +1 -0
- package/dist/src/onboard/steps/githubaccount.js +595 -0
- package/dist/src/onboard/steps/githubaccount.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +1150 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +508 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +78 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +817 -0
- package/dist/src/onboard/steps/ingress.js.map +1 -0
- package/dist/src/onboard/steps/inventory.js +420 -0
- package/dist/src/onboard/steps/inventory.js.map +1 -0
- package/dist/src/onboard/steps/llmauth.js +966 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1112 -0
- package/dist/src/onboard/steps/memory.js.map +1 -0
- package/dist/src/onboard/steps/memorykeys.js +43 -0
- package/dist/src/onboard/steps/memorykeys.js.map +1 -0
- package/dist/src/onboard/steps/preflight.js +172 -0
- package/dist/src/onboard/steps/preflight.js.map +1 -0
- package/dist/src/onboard/steps/proof.js +812 -0
- package/dist/src/onboard/steps/proof.js.map +1 -0
- package/dist/src/onboard/steps/ssh.js +300 -0
- package/dist/src/onboard/steps/ssh.js.map +1 -0
- package/dist/src/onboard/steps/topology.js +291 -0
- package/dist/src/onboard/steps/topology.js.map +1 -0
- package/dist/src/onboard/steps/transport.js +519 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/tuiroute.js +102 -0
- package/dist/src/onboard/steps/tuiroute.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +378 -0
- package/dist/src/onboard/steps/verifyup.js.map +1 -0
- package/dist/src/onboard/steps/vmdeploy.js +368 -0
- package/dist/src/onboard/steps/vmdeploy.js.map +1 -0
- package/dist/src/onboard/toml.js +53 -0
- package/dist/src/onboard/toml.js.map +1 -0
- package/dist/src/onboard/toolnames.js +30 -0
- package/dist/src/onboard/toolnames.js.map +1 -0
- package/dist/src/opencli.js +508 -0
- package/dist/src/opencli.js.map +1 -0
- package/dist/src/openpr.js +457 -0
- package/dist/src/openpr.js.map +1 -0
- package/dist/src/openviking/client.js +821 -0
- package/dist/src/openviking/client.js.map +1 -0
- package/dist/src/openviking/context.js +218 -0
- package/dist/src/openviking/context.js.map +1 -0
- package/dist/src/openviking/embedder.js +457 -0
- package/dist/src/openviking/embedder.js.map +1 -0
- package/dist/src/openviking/gapsink.js +38 -0
- package/dist/src/openviking/gapsink.js.map +1 -0
- package/dist/src/openviking/health.js +69 -0
- package/dist/src/openviking/health.js.map +1 -0
- package/dist/src/openviking/index.js +24 -0
- package/dist/src/openviking/index.js.map +1 -0
- package/dist/src/openviking/lessonfind.js +54 -0
- package/dist/src/openviking/lessonfind.js.map +1 -0
- package/dist/src/openviking/probe.js +89 -0
- package/dist/src/openviking/probe.js.map +1 -0
- package/dist/src/openviking/proc.js +95 -0
- package/dist/src/openviking/proc.js.map +1 -0
- package/dist/src/openviking/provisionreport.js +144 -0
- package/dist/src/openviking/provisionreport.js.map +1 -0
- package/dist/src/openviking/reembed.js +317 -0
- package/dist/src/openviking/reembed.js.map +1 -0
- package/dist/src/openviking/relayout.js +153 -0
- package/dist/src/openviking/relayout.js.map +1 -0
- package/dist/src/openviking/sidecar-main.js +39 -0
- package/dist/src/openviking/sidecar-main.js.map +1 -0
- package/dist/src/openviking/sidecar.js +79 -0
- package/dist/src/openviking/sidecar.js.map +1 -0
- package/dist/src/openviking/store.js +1758 -0
- package/dist/src/openviking/store.js.map +1 -0
- package/dist/src/openviking/supervisor.js +422 -0
- package/dist/src/openviking/supervisor.js.map +1 -0
- package/dist/src/openviking/types.js +5 -0
- package/dist/src/openviking/types.js.map +1 -0
- package/dist/src/operator-recovery.js +172 -0
- package/dist/src/operator-recovery.js.map +1 -0
- package/dist/src/operatormessage.js +44 -0
- package/dist/src/operatormessage.js.map +1 -0
- package/dist/src/operatorwrite.js +23 -0
- package/dist/src/operatorwrite.js.map +1 -0
- package/dist/src/outcomes.js +1364 -0
- package/dist/src/outcomes.js.map +1 -0
- package/dist/src/piauthcopy.js +5 -0
- package/dist/src/piauthcopy.js.map +1 -0
- package/dist/src/picli.js +45 -0
- package/dist/src/picli.js.map +1 -0
- package/dist/src/picwd.js +25 -0
- package/dist/src/picwd.js.map +1 -0
- package/dist/src/pilogin.js +35 -0
- package/dist/src/pilogin.js.map +1 -0
- package/dist/src/pingpong.js +1028 -0
- package/dist/src/pingpong.js.map +1 -0
- package/dist/src/posting-journal.js +442 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +666 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +216 -0
- package/dist/src/posting-receipt.js.map +1 -0
- package/dist/src/posting.js +348 -0
- package/dist/src/posting.js.map +1 -0
- package/dist/src/postops.js +637 -0
- package/dist/src/postops.js.map +1 -0
- package/dist/src/pr-activity.js +11 -0
- package/dist/src/pr-activity.js.map +1 -0
- package/dist/src/pr-author.js +5 -0
- package/dist/src/pr-author.js.map +1 -0
- package/dist/src/pr-conversation.js +355 -0
- package/dist/src/pr-conversation.js.map +1 -0
- package/dist/src/pr-session-lifecycle.js +542 -0
- package/dist/src/pr-session-lifecycle.js.map +1 -0
- package/dist/src/preflight.js +341 -0
- package/dist/src/preflight.js.map +1 -0
- package/dist/src/priorresolve.js +275 -0
- package/dist/src/priorresolve.js.map +1 -0
- package/dist/src/qcrbin.js +180 -0
- package/dist/src/qcrbin.js.map +1 -0
- package/dist/src/recheck.js +1399 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +840 -0
- package/dist/src/reconcile.js.map +1 -0
- package/dist/src/recordedfindings.js +15 -0
- package/dist/src/recordedfindings.js.map +1 -0
- package/dist/src/regression.js +546 -0
- package/dist/src/regression.js.map +1 -0
- package/dist/src/replay.js +598 -0
- package/dist/src/replay.js.map +1 -0
- package/dist/src/requiredpasses.js +113 -0
- package/dist/src/requiredpasses.js.map +1 -0
- package/dist/src/resumecheck.js +168 -0
- package/dist/src/resumecheck.js.map +1 -0
- package/dist/src/reviewcli.js +671 -0
- package/dist/src/reviewcli.js.map +1 -0
- package/dist/src/reviewcontext.js +22 -0
- package/dist/src/reviewcontext.js.map +1 -0
- package/dist/src/reviewdetach.js +574 -0
- package/dist/src/reviewdetach.js.map +1 -0
- package/dist/src/reviewhistory.js +310 -0
- package/dist/src/reviewhistory.js.map +1 -0
- package/dist/src/reviewhome.js +26 -0
- package/dist/src/reviewhome.js.map +1 -0
- package/dist/src/reviewmemory.js +110 -0
- package/dist/src/reviewmemory.js.map +1 -0
- package/dist/src/reviewnow.js +45 -0
- package/dist/src/reviewnow.js.map +1 -0
- package/dist/src/reviewrendercli.js +104 -0
- package/dist/src/reviewrendercli.js.map +1 -0
- package/dist/src/round-work.js +20 -0
- package/dist/src/round-work.js.map +1 -0
- package/dist/src/runhost.js +72 -0
- package/dist/src/runhost.js.map +1 -0
- package/dist/src/scanauth.js +25 -0
- package/dist/src/scanauth.js.map +1 -0
- package/dist/src/scanbox.js +846 -0
- package/dist/src/scanbox.js.map +1 -0
- package/dist/src/scancli.js +1074 -0
- package/dist/src/scancli.js.map +1 -0
- package/dist/src/scandriverlog.js +30 -0
- package/dist/src/scandriverlog.js.map +1 -0
- package/dist/src/session-bridge.js +75 -0
- package/dist/src/session-bridge.js.map +1 -0
- package/dist/src/session-command-payload.js +29 -0
- package/dist/src/session-command-payload.js.map +1 -0
- package/dist/src/session-command-supervisor.js +939 -0
- package/dist/src/session-command-supervisor.js.map +1 -0
- package/dist/src/sessionjsonl.js +85 -0
- package/dist/src/sessionjsonl.js.map +1 -0
- package/dist/src/sessions.js +541 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup/adapters.js +330 -0
- package/dist/src/setup/adapters.js.map +1 -0
- package/dist/src/setup/baselines.js +64 -0
- package/dist/src/setup/baselines.js.map +1 -0
- package/dist/src/setup/caserunner.js +554 -0
- package/dist/src/setup/caserunner.js.map +1 -0
- package/dist/src/setup/configcommit.js +358 -0
- package/dist/src/setup/configcommit.js.map +1 -0
- package/dist/src/setup/engine.js +672 -0
- package/dist/src/setup/engine.js.map +1 -0
- package/dist/src/setup/facts.js +593 -0
- package/dist/src/setup/facts.js.map +1 -0
- package/dist/src/setup/findings.js +948 -0
- package/dist/src/setup/findings.js.map +1 -0
- package/dist/src/setup/history.js +338 -0
- package/dist/src/setup/history.js.map +1 -0
- package/dist/src/setup/interview.js +185 -0
- package/dist/src/setup/interview.js.map +1 -0
- package/dist/src/setup/ledger.js +207 -0
- package/dist/src/setup/ledger.js.map +1 -0
- package/dist/src/setup/pins.js +43 -0
- package/dist/src/setup/pins.js.map +1 -0
- package/dist/src/setup/portrait.js +432 -0
- package/dist/src/setup/portrait.js.map +1 -0
- package/dist/src/setup/presentation.js +9 -0
- package/dist/src/setup/presentation.js.map +1 -0
- package/dist/src/setup/profile.js +417 -0
- package/dist/src/setup/profile.js.map +1 -0
- package/dist/src/setup/replay.js +240 -0
- package/dist/src/setup/replay.js.map +1 -0
- package/dist/src/setup/replaybuild.js +311 -0
- package/dist/src/setup/replaybuild.js.map +1 -0
- package/dist/src/setup/replayrun.js +806 -0
- package/dist/src/setup/replayrun.js.map +1 -0
- package/dist/src/setup/replaysource.js +169 -0
- package/dist/src/setup/replaysource.js.map +1 -0
- package/dist/src/setup/retune.js +333 -0
- package/dist/src/setup/retune.js.map +1 -0
- package/dist/src/setup/retunelog.js +51 -0
- package/dist/src/setup/retunelog.js.map +1 -0
- package/dist/src/setup/scan.js +725 -0
- package/dist/src/setup/scan.js.map +1 -0
- package/dist/src/setup/scanbuild.js +133 -0
- package/dist/src/setup/scanbuild.js.map +1 -0
- package/dist/src/setup/scanfacts.js +96 -0
- package/dist/src/setup/scanfacts.js.map +1 -0
- package/dist/src/setup/scanlease.js +251 -0
- package/dist/src/setup/scanlease.js.map +1 -0
- package/dist/src/setup/scanreport.js +289 -0
- package/dist/src/setup/scanreport.js.map +1 -0
- package/dist/src/setup/scanrun.js +1733 -0
- package/dist/src/setup/scanrun.js.map +1 -0
- package/dist/src/setup/scantree.js +257 -0
- package/dist/src/setup/scantree.js.map +1 -0
- package/dist/src/setup/stage2.js +617 -0
- package/dist/src/setup/stage2.js.map +1 -0
- package/dist/src/setup/stage2request.js +259 -0
- package/dist/src/setup/stage2request.js.map +1 -0
- package/dist/src/setup/survey.js +307 -0
- package/dist/src/setup/survey.js.map +1 -0
- package/dist/src/setup/surveyrun.js +549 -0
- package/dist/src/setup/surveyrun.js.map +1 -0
- package/dist/src/setup/textsniff.js +89 -0
- package/dist/src/setup/textsniff.js.map +1 -0
- package/dist/src/setup/trackersink.js +395 -0
- package/dist/src/setup/trackersink.js.map +1 -0
- package/dist/src/setup/triage.js +636 -0
- package/dist/src/setup/triage.js.map +1 -0
- package/dist/src/setup/tuning.js +585 -0
- package/dist/src/setup/tuning.js.map +1 -0
- package/dist/src/setup/unitcut.js +437 -0
- package/dist/src/setup/unitcut.js.map +1 -0
- package/dist/src/singleflight.js +72 -0
- package/dist/src/singleflight.js.map +1 -0
- package/dist/src/slack/announce.js +725 -0
- package/dist/src/slack/announce.js.map +1 -0
- package/dist/src/slack/api.js +227 -0
- package/dist/src/slack/api.js.map +1 -0
- package/dist/src/slack/messages.js +158 -0
- package/dist/src/slack/messages.js.map +1 -0
- package/dist/src/slack/origin.js +550 -0
- package/dist/src/slack/origin.js.map +1 -0
- package/dist/src/slack/policy.js +225 -0
- package/dist/src/slack/policy.js.map +1 -0
- package/dist/src/slack/reply.js +153 -0
- package/dist/src/slack/reply.js.map +1 -0
- package/dist/src/slack/router.js +189 -0
- package/dist/src/slack/router.js.map +1 -0
- package/dist/src/slack/socket.js +323 -0
- package/dist/src/slack/socket.js.map +1 -0
- package/dist/src/slack/types.js +11 -0
- package/dist/src/slack/types.js.map +1 -0
- package/dist/src/sqlitehint.js +30 -0
- package/dist/src/sqlitehint.js.map +1 -0
- package/dist/src/ssh-observation.js +25 -0
- package/dist/src/ssh-observation.js.map +1 -0
- package/dist/src/state.js +5869 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/statemachine.js +223 -0
- package/dist/src/statemachine.js.map +1 -0
- package/dist/src/stubs.js +52 -0
- package/dist/src/stubs.js.map +1 -0
- package/dist/src/takeover.js +506 -0
- package/dist/src/takeover.js.map +1 -0
- package/dist/src/takeoverpi.js +262 -0
- package/dist/src/takeoverpi.js.map +1 -0
- package/dist/src/terminal-failure.js +26 -0
- package/dist/src/terminal-failure.js.map +1 -0
- package/dist/src/thread-resolution-refusal.js +4 -0
- package/dist/src/thread-resolution-refusal.js.map +1 -0
- package/dist/src/tmux.js +126 -0
- package/dist/src/tmux.js.map +1 -0
- package/dist/src/trackerid.js +43 -0
- package/dist/src/trackerid.js.map +1 -0
- package/dist/src/transcriptindex.js +512 -0
- package/dist/src/transcriptindex.js.map +1 -0
- package/dist/src/tui/actions.js +404 -0
- package/dist/src/tui/actions.js.map +1 -0
- package/dist/src/tui/alerts.js +523 -0
- package/dist/src/tui/alerts.js.map +1 -0
- package/dist/src/tui/app.js +1884 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/archiveops.js +164 -0
- package/dist/src/tui/archiveops.js.map +1 -0
- package/dist/src/tui/autofile.js +191 -0
- package/dist/src/tui/autofile.js.map +1 -0
- package/dist/src/tui/board.js +1219 -0
- package/dist/src/tui/board.js.map +1 -0
- package/dist/src/tui/candidates.js +699 -0
- package/dist/src/tui/candidates.js.map +1 -0
- package/dist/src/tui/cellwidth.js +151 -0
- package/dist/src/tui/cellwidth.js.map +1 -0
- package/dist/src/tui/changelog-store.js +404 -0
- package/dist/src/tui/changelog-store.js.map +1 -0
- package/dist/src/tui/chord.js +26 -0
- package/dist/src/tui/chord.js.map +1 -0
- package/dist/src/tui/clipboard.js +81 -0
- package/dist/src/tui/clipboard.js.map +1 -0
- package/dist/src/tui/cmdbar.js +256 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1339 -0
- package/dist/src/tui/companion.js.map +1 -0
- package/dist/src/tui/companionplan.js +200 -0
- package/dist/src/tui/companionplan.js.map +1 -0
- package/dist/src/tui/companiontab.js +61 -0
- package/dist/src/tui/companiontab.js.map +1 -0
- package/dist/src/tui/confighome.js +105 -0
- package/dist/src/tui/confighome.js.map +1 -0
- package/dist/src/tui/connect.js +50 -0
- package/dist/src/tui/connect.js.map +1 -0
- package/dist/src/tui/deploy-ceremony.js +75 -0
- package/dist/src/tui/deploy-ceremony.js.map +1 -0
- package/dist/src/tui/deploy-drain.js +93 -0
- package/dist/src/tui/deploy-drain.js.map +1 -0
- package/dist/src/tui/deploy-process.js +234 -0
- package/dist/src/tui/deploy-process.js.map +1 -0
- package/dist/src/tui/deploytab.js +1263 -0
- package/dist/src/tui/deploytab.js.map +1 -0
- package/dist/src/tui/design.js +111 -0
- package/dist/src/tui/design.js.map +1 -0
- package/dist/src/tui/digesttab.js +148 -0
- package/dist/src/tui/digesttab.js.map +1 -0
- package/dist/src/tui/emptystate.js +32 -0
- package/dist/src/tui/emptystate.js.map +1 -0
- package/dist/src/tui/evidence.js +790 -0
- package/dist/src/tui/evidence.js.map +1 -0
- package/dist/src/tui/feed.js +415 -0
- package/dist/src/tui/feed.js.map +1 -0
- package/dist/src/tui/feedbacktab.js +907 -0
- package/dist/src/tui/feedbacktab.js.map +1 -0
- package/dist/src/tui/filters.js +75 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +328 -0
- package/dist/src/tui/ghread.js.map +1 -0
- package/dist/src/tui/historypull.js +61 -0
- package/dist/src/tui/historypull.js.map +1 -0
- package/dist/src/tui/inboxpull.js +197 -0
- package/dist/src/tui/inboxpull.js.map +1 -0
- package/dist/src/tui/index.js +1511 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/issuesink.js +206 -0
- package/dist/src/tui/issuesink.js.map +1 -0
- package/dist/src/tui/jsonfile.js +32 -0
- package/dist/src/tui/jsonfile.js.map +1 -0
- package/dist/src/tui/keys.js +97 -0
- package/dist/src/tui/keys.js.map +1 -0
- package/dist/src/tui/layout.js +70 -0
- package/dist/src/tui/layout.js.map +1 -0
- package/dist/src/tui/learning.js +469 -0
- package/dist/src/tui/learning.js.map +1 -0
- package/dist/src/tui/lessonswitch.js +103 -0
- package/dist/src/tui/lessonswitch.js.map +1 -0
- package/dist/src/tui/livecontrol.js +167 -0
- package/dist/src/tui/livecontrol.js.map +1 -0
- package/dist/src/tui/memforward.js +347 -0
- package/dist/src/tui/memforward.js.map +1 -0
- package/dist/src/tui/memincident.js +287 -0
- package/dist/src/tui/memincident.js.map +1 -0
- package/dist/src/tui/memory.js +485 -0
- package/dist/src/tui/memory.js.map +1 -0
- package/dist/src/tui/memtab.js +513 -0
- package/dist/src/tui/memtab.js.map +1 -0
- package/dist/src/tui/metricstab.js +979 -0
- package/dist/src/tui/metricstab.js.map +1 -0
- package/dist/src/tui/model.js +129 -0
- package/dist/src/tui/model.js.map +1 -0
- package/dist/src/tui/mouse.js +83 -0
- package/dist/src/tui/mouse.js.map +1 -0
- package/dist/src/tui/msg.js +196 -0
- package/dist/src/tui/msg.js.map +1 -0
- package/dist/src/tui/nativecompanion.js +321 -0
- package/dist/src/tui/nativecompanion.js.map +1 -0
- package/dist/src/tui/openurl.js +17 -0
- package/dist/src/tui/openurl.js.map +1 -0
- package/dist/src/tui/paint.js +501 -0
- package/dist/src/tui/paint.js.map +1 -0
- package/dist/src/tui/panes.js +74 -0
- package/dist/src/tui/panes.js.map +1 -0
- package/dist/src/tui/pipane.js +166 -0
- package/dist/src/tui/pipane.js.map +1 -0
- package/dist/src/tui/poll-hooks.js +11 -0
- package/dist/src/tui/poll-hooks.js.map +1 -0
- package/dist/src/tui/poll.js +113 -0
- package/dist/src/tui/poll.js.map +1 -0
- package/dist/src/tui/proposals.js +715 -0
- package/dist/src/tui/proposals.js.map +1 -0
- package/dist/src/tui/prpause.js +139 -0
- package/dist/src/tui/prpause.js.map +1 -0
- package/dist/src/tui/reload.js +351 -0
- package/dist/src/tui/reload.js.map +1 -0
- package/dist/src/tui/remote.js +318 -0
- package/dist/src/tui/remote.js.map +1 -0
- package/dist/src/tui/rollover.js +767 -0
- package/dist/src/tui/rollover.js.map +1 -0
- package/dist/src/tui/route.js +143 -0
- package/dist/src/tui/route.js.map +1 -0
- package/dist/src/tui/scantab.js +1053 -0
- package/dist/src/tui/scantab.js.map +1 -0
- package/dist/src/tui/setupentry.js +81 -0
- package/dist/src/tui/setupentry.js.map +1 -0
- package/dist/src/tui/setupstate.js +29 -0
- package/dist/src/tui/setupstate.js.map +1 -0
- package/dist/src/tui/sidebar.js +602 -0
- package/dist/src/tui/sidebar.js.map +1 -0
- package/dist/src/tui/sshtriage.js +490 -0
- package/dist/src/tui/sshtriage.js.map +1 -0
- package/dist/src/tui/startup.js +172 -0
- package/dist/src/tui/startup.js.map +1 -0
- package/dist/src/tui/tabs.js +41 -0
- package/dist/src/tui/tabs.js.map +1 -0
- package/dist/src/tui/termmirror.js +217 -0
- package/dist/src/tui/termmirror.js.map +1 -0
- package/dist/src/tui/theme.js +96 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/ticketstab.js +224 -0
- package/dist/src/tui/ticketstab.js.map +1 -0
- package/dist/src/tui/tmuxsocket.js +101 -0
- package/dist/src/tui/tmuxsocket.js.map +1 -0
- package/dist/src/tui/trackertickets.js +77 -0
- package/dist/src/tui/trackertickets.js.map +1 -0
- package/dist/src/tui/unwedge.js +235 -0
- package/dist/src/tui/unwedge.js.map +1 -0
- package/dist/src/tui/viewer.js +479 -0
- package/dist/src/tui/viewer.js.map +1 -0
- package/dist/src/tui/viewerinput.js +125 -0
- package/dist/src/tui/viewerinput.js.map +1 -0
- package/dist/src/updatenotice.js +143 -0
- package/dist/src/updatenotice.js.map +1 -0
- package/dist/src/usage.js +1007 -0
- package/dist/src/usage.js.map +1 -0
- package/dist/src/verdicts.js +3860 -0
- package/dist/src/verdicts.js.map +1 -0
- package/dist/src/version.js +58 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/wakes.js +411 -0
- package/dist/src/wakes.js.map +1 -0
- package/dist/src/webhook.js +736 -0
- package/dist/src/webhook.js.map +1 -0
- package/dist/src/webhookheal.js +238 -0
- package/dist/src/webhookheal.js.map +1 -0
- package/dist/src/wire.js +1823 -0
- package/dist/src/wire.js.map +1 -0
- package/dist/src/worker-session-host.js +531 -0
- package/dist/src/worker-session-host.js.map +1 -0
- package/dist/src/workerbreaker.js +112 -0
- package/dist/src/workerbreaker.js.map +1 -0
- package/dist/src/workercontrol.js +49 -0
- package/dist/src/workercontrol.js.map +1 -0
- package/dist/src/workerlease.js +351 -0
- package/dist/src/workerlease.js.map +1 -0
- package/dist/src/workerliveness.js +84 -0
- package/dist/src/workerliveness.js.map +1 -0
- package/dist/src/workerlog.js +65 -0
- package/dist/src/workerlog.js.map +1 -0
- package/dist/src/workerruntime.js +10 -0
- package/dist/src/workerruntime.js.map +1 -0
- package/dist/src/workersupervisor.js +1206 -0
- package/dist/src/workersupervisor.js.map +1 -0
- package/dist/src/workerusage.js +23 -0
- package/dist/src/workerusage.js.map +1 -0
- package/dist/src/workerworld.js +338 -0
- package/dist/src/workerworld.js.map +1 -0
- package/dist/src/worktrees.js +984 -0
- package/dist/src/worktrees.js.map +1 -0
- package/docker/Dockerfile +284 -0
- package/docker/Dockerfile.dockerignore +35 -0
- package/docker/README.md +221 -0
- package/docker/companion/Dockerfile +139 -0
- package/docker/companion/agents/evidence.md +34 -0
- package/docker/companion/agents/explore.md +26 -0
- package/docker/companion/agents/pass-survey.md +49 -0
- package/docker/companion/agents/study.md +26 -0
- package/docker/companion/entrypoint.sh +362 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +799 -0
- package/docker/memory/Dockerfile +191 -0
- package/docker/memory/Dockerfile.dockerignore +20 -0
- package/docker/memory/README.md +60 -0
- package/docker/memory/entrypoint.sh +163 -0
- package/docker/setid/qcr-setid.c +109 -0
- package/docker/tunnel/Dockerfile.cloudflared +51 -0
- package/docker/tunnel/Dockerfile.ngrok +40 -0
- package/docker/tunnel/sidecar.mjs +411 -0
- package/docker/vm/tmux.conf +26 -0
- package/docker-compose.yml +348 -0
- package/extensions/cli/bash-guard-ambient.ts +71 -0
- package/extensions/cli/bash-guard.ts +12 -0
- package/extensions/cli/companion-guard.ts +8 -0
- package/extensions/cli/debug-round.ts +9 -0
- package/extensions/cli/inject-bridge.ts +8 -0
- package/extensions/cli/ledger-pin.ts +13 -0
- package/extensions/cli/lens.ts +22 -0
- package/extensions/cli/login-route.ts +10 -0
- package/extensions/cli/muted-theme.ts +9 -0
- package/extensions/cli/onboarding.ts +8 -0
- package/extensions/cli/setup.ts +8 -0
- package/extensions/cli/tui-view.ts +8 -0
- package/extensions/companion-guard.ts +411 -0
- package/extensions/debug-round.ts +281 -0
- package/extensions/inject-bridge.ts +630 -0
- package/extensions/inline-bash.ts +102 -0
- package/extensions/login-route.ts +220 -0
- package/extensions/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +262 -0
- package/extensions/setup-replay.ts +336 -0
- package/extensions/setup-scan.ts +1236 -0
- package/extensions/setup-triage.ts +190 -0
- package/extensions/setup.ts +1428 -0
- package/extensions/tui-view.ts +489 -0
- package/extensions/vendor/openviking-pi/LICENSE +201 -0
- package/extensions/vendor/openviking-pi/NOTICE +68 -0
- package/extensions/vendor/openviking-pi/README.md +550 -0
- package/extensions/vendor/openviking-pi/client.ts +588 -0
- package/extensions/vendor/openviking-pi/config.json +28 -0
- package/extensions/vendor/openviking-pi/config.ts +271 -0
- package/extensions/vendor/openviking-pi/index.ts +523 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.d.mts +10 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +88 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.d.mts +80 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.mjs +406 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.d.mts +1 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +42 -0
- package/extensions/vendor/openviking-pi/patches/0000-vendoring-and-build-conformance.patch +726 -0
- package/extensions/vendor/openviking-pi/patches/0001-remove-session-before-compact-handler.patch +101 -0
- package/extensions/vendor/openviking-pi/patches/0002-no-ambient-work-in-subagent-leaves.patch +202 -0
- package/extensions/vendor/openviking-pi/patches/0003-never-auto-create-openviking-sessions.patch +120 -0
- package/extensions/vendor/openviking-pi/patches/0004-viking-write-durable-batch-write.patch +521 -0
- package/extensions/vendor/openviking-pi/patches/0005-second-memory-namespace.patch +786 -0
- package/extensions/vendor/openviking-pi/patches/0006-writes-that-stick-and-honest-errors.patch +996 -0
- package/extensions/vendor/openviking-pi/patches/0007-bounded-recall-no-commit.patch +794 -0
- package/extensions/vendor/openviking-pi/patches/0008-pr-derived-recall.patch +379 -0
- package/extensions/vendor/openviking-pi/patches/0009-pr-session-tools-in-round-areas.patch +375 -0
- package/extensions/vendor/openviking-pi/patches/0010-typed-lessons.patch +448 -0
- package/extensions/vendor/openviking-pi/patches/0011-review-session-memory-boundary.patch +382 -0
- package/extensions/vendor/openviking-pi/patches/0012-typecheck-against-the-real-pi.patch +129 -0
- package/extensions/vendor/openviking-pi/patches/0013-createopenviking-factory.patch +1168 -0
- package/extensions/vendor/openviking-pi/qcr-hint.ts +313 -0
- package/extensions/vendor/openviking-pi/qcr-honest.ts +183 -0
- package/extensions/vendor/openviking-pi/qcr-hooks.ts +87 -0
- package/extensions/vendor/openviking-pi/qcr-leaf.ts +78 -0
- package/extensions/vendor/openviking-pi/qcr-lesson.ts +231 -0
- package/extensions/vendor/openviking-pi/qcr-namespaces.ts +198 -0
- package/extensions/vendor/openviking-pi/qcr-recall.ts +288 -0
- package/extensions/vendor/openviking-pi/qcr-shim.ts +142 -0
- package/extensions/vendor/openviking-pi/qcr-write.ts +427 -0
- package/extensions/vendor/openviking-pi/recall.ts +149 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.d.mts +9 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.mjs +515 -0
- package/extensions/vendor/openviking-pi/shared/credentials.d.mts +14 -0
- package/extensions/vendor/openviking-pi/shared/credentials.mjs +228 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.d.mts +19 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.mjs +458 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.d.mts +17 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.mjs +294 -0
- package/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +195 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.d.mts +13 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.mjs +609 -0
- package/extensions/vendor/openviking-pi/shared/retryable.mjs +9 -0
- package/extensions/vendor/openviking-pi/shared/session-model.d.mts +3 -0
- package/extensions/vendor/openviking-pi/shared/session-model.mjs +57 -0
- package/extensions/vendor/openviking-pi/shared/uri-guard.mjs +56 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.d.mts +5 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/extensions/vendor/openviking-pi/sync.ts +163 -0
- package/extensions/vendor/openviking-pi/takeover.ts +36 -0
- package/extensions/vendor/openviking-pi/tools.ts +479 -0
- package/extensions/vendor/openviking-pi/upstream.json +48 -0
- package/package.json +138 -4
- package/profiles/default/README.md +21 -0
- package/profiles/default/addenda/.gitkeep +0 -0
- package/profiles/default/profile.toml +17 -0
- package/profiles/example-django/README.md +21 -0
- package/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/profiles/example-django/heuristics.toml +24 -0
- package/profiles/example-django/profile.toml +9 -0
- package/profiles/fast/README.md +24 -0
- package/profiles/fast/profile.toml +59 -0
- package/profiles/minimal/README.md +17 -0
- package/profiles/minimal/addenda/.gitkeep +0 -0
- package/profiles/minimal/profile.toml +8 -0
- package/profiles/snappy/README.md +24 -0
- package/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/profiles/snappy/profile.toml +46 -0
- package/prompts/companion-day-open.md +46 -0
- package/prompts/companion-first-run.md +104 -0
- package/prompts/companion.md +821 -0
- package/prompts/conversation-system.md +117 -0
- package/prompts/eod-sweep.md +120 -0
- package/prompts/onboarding.md +113 -0
- package/prompts/pass-common.md +52 -0
- package/prompts/pass-quality-common.md +22 -0
- package/prompts/round-first.md +874 -0
- package/prompts/round-follow-up.md +991 -0
- package/prompts/round-re-review.md +889 -0
- package/prompts/round-recheck.md +196 -0
- package/prompts/round-staleness.md +856 -0
- package/schemas/review-result.v1.json +391 -0
- package/schemas/scan-result.v1.json +421 -0
- package/schemas/version.v1.json +57 -0
- package/scripts/approve-pr.sh +16 -0
- package/scripts/build-stamp.mjs +67 -0
- package/scripts/commit-verdict.sh +155 -0
- package/scripts/companion-e2e.sh +250 -0
- package/scripts/companion-memory-forward.mjs +1966 -0
- package/scripts/config-fingerprint.sh +28 -0
- package/scripts/deploy-manifest.mjs +141 -0
- package/scripts/deploy.sh +1435 -0
- package/scripts/directory-lock.mjs +193 -0
- package/scripts/heartbeat-fresh.mjs +54 -0
- package/scripts/install-locator.sh +328 -0
- package/scripts/install-wrapper.sh +76 -0
- package/scripts/memory-search-check.mjs +98 -0
- package/scripts/mint-token.sh +233 -0
- package/scripts/openviking-embedder.py +392 -0
- package/scripts/openviking-ov-conf.mjs +161 -0
- package/scripts/openviking-provision.mjs +1122 -0
- package/scripts/openviking-reembed.mjs +1154 -0
- package/scripts/post-review.sh +16 -0
- package/scripts/pr-checks.sh +256 -0
- package/scripts/pr-context.py +174 -0
- package/scripts/pr-context.sh +63 -0
- package/scripts/pr-self.sh +144 -0
- package/scripts/pr-threads.sh +145 -0
- package/scripts/qcr +15 -0
- package/scripts/qcr-host.sh +769 -0
- package/scripts/render-review.sh +24 -0
- package/scripts/reply-thread.sh +16 -0
- package/scripts/required-passes.py +112 -0
- package/scripts/smoke-companion.sh +211 -0
- package/scripts/tui-deploy-runner.mjs +61 -0
- package/scripts/verify-dist.mjs +201 -0
- package/scripts/vm-ghcr-login.sh +188 -0
- package/seeds/agents/pass-baseline.md +61 -0
- package/seeds/agents/pass-contracts.md +30 -0
- package/seeds/agents/pass-data-safety.md +54 -0
- package/seeds/agents/pass-delivery.md +37 -0
- package/seeds/agents/pass-prod-risk.md +24 -0
- package/seeds/agents/pass-security.md +31 -0
- package/seeds/agents/pass-statelessness.md +27 -0
- package/seeds/agents/pass-ui.md +23 -0
- package/seeds/agents/pass-validate.md +50 -0
- package/seeds/prompts/conversation-system.md +117 -0
- package/seeds/prompts/eod-sweep.md +120 -0
- package/seeds/prompts/pass-common.md +52 -0
- package/skills/companion/adjudicate/SKILL.md +247 -0
- package/skills/companion/evidence/SKILL.md +150 -0
- package/skills/companion/land/SKILL.md +200 -0
- package/skills/companion/replay/SKILL.md +138 -0
- package/skills/companion/setup/SKILL.md +167 -0
- package/skills/companion/survey/SKILL.md +160 -0
- package/skills/selfimprove/README.md +34 -0
- package/skills/selfimprove/SKILL.md +127 -0
- package/skills/selfimprove/agents/openai.yaml +2 -0
- package/skills/selfimprove/commands/selfimprove.md +6 -0
- package/skills/selfimprove/references/fix-loop.md +49 -0
- package/skills/selfimprove/references/ledger.md +20 -0
- package/skills/selfimprove/references/setup.md +40 -0
- package/src/anomalies.ts +566 -0
- package/src/answerworker.ts +251 -0
- package/src/appstamp.ts +65 -0
- package/src/archive/admission.ts +3 -0
- package/src/archive/archivedb.ts +548 -0
- package/src/archive/archiver.ts +1963 -0
- package/src/archive/archivewrite.ts +279 -0
- package/src/archive/bundle.ts +333 -0
- package/src/archive/dbmove.ts +911 -0
- package/src/archive/duplicatecounts.ts +98 -0
- package/src/archive/eligibility.ts +181 -0
- package/src/archive/extract.ts +342 -0
- package/src/archive/fsutil.ts +415 -0
- package/src/archive/gzfile.ts +370 -0
- package/src/archive/kinds.ts +21 -0
- package/src/archive/livecheckpoint.ts +217 -0
- package/src/archive/liveretention.ts +180 -0
- package/src/archive/manifest.ts +519 -0
- package/src/archive/overseer.ts +336 -0
- package/src/archive/piglobal.ts +174 -0
- package/src/archive/plan.ts +612 -0
- package/src/archive/prarchive.ts +984 -0
- package/src/archive/prfiles.ts +406 -0
- package/src/archive/report.ts +252 -0
- package/src/archive/restore.ts +330 -0
- package/src/archive/rows.ts +187 -0
- package/src/archive/seal.ts +630 -0
- package/src/archive/status.ts +719 -0
- package/src/archive/storepass.ts +581 -0
- package/src/backfill.ts +362 -0
- package/src/bench/cost.ts +113 -0
- package/src/bench/exec.ts +90 -0
- package/src/bench/values.ts +13 -0
- package/src/botcontrol.ts +176 -0
- package/src/botworker.ts +953 -0
- package/src/capture.ts +321 -0
- package/src/cases.ts +1789 -0
- package/src/channelfs.ts +26 -0
- package/src/checklist.ts +506 -0
- package/src/ciretry.ts +142 -0
- package/src/cli.ts +2306 -0
- package/src/cliops.ts +385 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1704 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2070 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1327 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +272 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2251 -0
- package/src/engine/answerguard.ts +27 -0
- package/src/engine/botsdk.ts +336 -0
- package/src/engine/caserunner-sdk.ts +423 -0
- package/src/engine/debugpi.ts +247 -0
- package/src/eod.ts +669 -0
- package/src/eodpinwatch.ts +556 -0
- package/src/escalation.ts +1253 -0
- package/src/eventloop.ts +1045 -0
- package/src/execboundary.ts +645 -0
- package/src/feedback.ts +1162 -0
- package/src/findingscheck.ts +298 -0
- package/src/fsdenied.ts +24 -0
- package/src/ghread.ts +242 -0
- package/src/github.ts +1539 -0
- package/src/githubtoken.ts +435 -0
- package/src/homes.ts +175 -0
- package/src/hostroute.ts +53 -0
- package/src/improvements.ts +787 -0
- package/src/install.ts +1103 -0
- package/src/installkind.ts +50 -0
- package/src/ipc/capability.ts +333 -0
- package/src/ipc/client.ts +269 -0
- package/src/ipc/control.ts +90 -0
- package/src/ipc/ghreadshim.ts +94 -0
- package/src/ipc/launcher.ts +65 -0
- package/src/ipc/permits.ts +362 -0
- package/src/ipc/postshim.ts +164 -0
- package/src/ipc/protocol.ts +342 -0
- package/src/ipc/server.ts +371 -0
- package/src/ipc/workerspec.ts +218 -0
- package/src/learner/learner.ts +1655 -0
- package/src/learner/miner.ts +1290 -0
- package/src/learner/packet.ts +340 -0
- package/src/learner/receipt.ts +168 -0
- package/src/learner/status.ts +107 -0
- package/src/ledgercheck.ts +157 -0
- package/src/lessonledger.ts +703 -0
- package/src/lessonselect.ts +888 -0
- package/src/lessonshadow.ts +810 -0
- package/src/levers.ts +393 -0
- package/src/live/projection.ts +491 -0
- package/src/live/publish.ts +92 -0
- package/src/live/read.ts +86 -0
- package/src/livecli.ts +336 -0
- package/src/loginhint.ts +61 -0
- package/src/loginrefresh/atomic.ts +76 -0
- package/src/loginrefresh/lock.ts +104 -0
- package/src/loginrefresh/main.ts +59 -0
- package/src/loginrefresh/pirefresh.ts +60 -0
- package/src/loginrefresh/refresher.ts +326 -0
- package/src/loginrefresh/supervisor.ts +273 -0
- package/src/loginrefresh/types.ts +35 -0
- package/src/memory/context.ts +385 -0
- package/src/memory/datafence.ts +9 -0
- package/src/memory/delivery.ts +171 -0
- package/src/memory/eventtags.ts +80 -0
- package/src/memory/health.ts +953 -0
- package/src/memory/import.ts +664 -0
- package/src/memory/layout.ts +261 -0
- package/src/memory/legacy-file.ts +104 -0
- package/src/memory/lessons.ts +447 -0
- package/src/memory/ovsession.ts +601 -0
- package/src/memory/relayout.ts +335 -0
- package/src/memory/roundactivity.ts +209 -0
- package/src/memory/selection.ts +989 -0
- package/src/memory/shadowstatus.ts +125 -0
- package/src/memory/store.ts +275 -0
- package/src/memory/textidentity.ts +8 -0
- package/src/metrics.ts +1056 -0
- package/src/missingconfig.ts +7 -0
- package/src/npmverbs.ts +266 -0
- package/src/onboard/choices.ts +255 -0
- package/src/onboard/engine.ts +537 -0
- package/src/onboard/launch.ts +103 -0
- package/src/onboard/pipin.ts +31 -0
- package/src/onboard/stepforward.ts +61 -0
- package/src/onboard/steps/appslug.ts +268 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +490 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1440 -0
- package/src/onboard/steps/deploysh.ts +105 -0
- package/src/onboard/steps/embeddings.ts +550 -0
- package/src/onboard/steps/escalation.ts +640 -0
- package/src/onboard/steps/githubaccount.ts +716 -0
- package/src/onboard/steps/githubapp.ts +1498 -0
- package/src/onboard/steps/golive.ts +579 -0
- package/src/onboard/steps/index.ts +82 -0
- package/src/onboard/steps/ingress.ts +974 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1180 -0
- package/src/onboard/steps/memory.ts +1347 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +1042 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +338 -0
- package/src/onboard/steps/transport.ts +680 -0
- package/src/onboard/steps/tuiroute.ts +119 -0
- package/src/onboard/steps/verifyup.ts +467 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -0
- package/src/onboard/toolnames.ts +34 -0
- package/src/opencli.ts +591 -0
- package/src/openpr.ts +568 -0
- package/src/openviking/client.ts +1131 -0
- package/src/openviking/context.ts +263 -0
- package/src/openviking/embedder.ts +516 -0
- package/src/openviking/gapsink.ts +63 -0
- package/src/openviking/health.ts +83 -0
- package/src/openviking/index.ts +119 -0
- package/src/openviking/lessonfind.ts +92 -0
- package/src/openviking/probe.ts +129 -0
- package/src/openviking/proc.ts +110 -0
- package/src/openviking/provisionreport.ts +160 -0
- package/src/openviking/reembed.ts +412 -0
- package/src/openviking/relayout.ts +177 -0
- package/src/openviking/sidecar-main.ts +38 -0
- package/src/openviking/sidecar.ts +106 -0
- package/src/openviking/store.ts +2025 -0
- package/src/openviking/supervisor.ts +474 -0
- package/src/openviking/types.ts +174 -0
- package/src/operator-recovery.ts +237 -0
- package/src/operatormessage.ts +52 -0
- package/src/operatorwrite.ts +25 -0
- package/src/outcomes.ts +1677 -0
- package/src/piauthcopy.ts +12 -0
- package/src/picli.ts +49 -0
- package/src/picwd.ts +25 -0
- package/src/pilogin.ts +37 -0
- package/src/pingpong.ts +1339 -0
- package/src/posting-journal.ts +554 -0
- package/src/posting-outbox.ts +810 -0
- package/src/posting-receipt.ts +341 -0
- package/src/posting.ts +603 -0
- package/src/postops.ts +832 -0
- package/src/pr-activity.ts +20 -0
- package/src/pr-author.ts +6 -0
- package/src/pr-conversation.ts +432 -0
- package/src/pr-session-lifecycle.ts +631 -0
- package/src/preflight.ts +391 -0
- package/src/priorresolve.ts +343 -0
- package/src/qcrbin.ts +186 -0
- package/src/recheck.ts +1776 -0
- package/src/reconcile.ts +1056 -0
- package/src/recordedfindings.ts +27 -0
- package/src/regression.ts +833 -0
- package/src/replay.ts +816 -0
- package/src/requiredpasses.ts +148 -0
- package/src/resumecheck.ts +246 -0
- package/src/reviewcli.ts +787 -0
- package/src/reviewcontext.ts +35 -0
- package/src/reviewdetach.ts +734 -0
- package/src/reviewhistory.ts +441 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -0
- package/src/reviewnow.ts +76 -0
- package/src/reviewrendercli.ts +139 -0
- package/src/round-work.ts +42 -0
- package/src/runhost.ts +108 -0
- package/src/scanauth.ts +36 -0
- package/src/scanbox.ts +1081 -0
- package/src/scancli.ts +1296 -0
- package/src/scandriverlog.ts +32 -0
- package/src/session-bridge.ts +139 -0
- package/src/session-command-payload.ts +35 -0
- package/src/session-command-supervisor.ts +1142 -0
- package/src/sessionjsonl.ts +88 -0
- package/src/sessions.ts +659 -0
- package/src/setup/adapters.ts +335 -0
- package/src/setup/baselines.ts +110 -0
- package/src/setup/caserunner.ts +611 -0
- package/src/setup/configcommit.ts +443 -0
- package/src/setup/engine.ts +1001 -0
- package/src/setup/facts.ts +627 -0
- package/src/setup/findings.ts +1264 -0
- package/src/setup/history.ts +443 -0
- package/src/setup/interview.ts +243 -0
- package/src/setup/ledger.ts +324 -0
- package/src/setup/pins.ts +66 -0
- package/src/setup/portrait.ts +635 -0
- package/src/setup/presentation.ts +18 -0
- package/src/setup/profile.ts +508 -0
- package/src/setup/replay.ts +370 -0
- package/src/setup/replaybuild.ts +392 -0
- package/src/setup/replayrun.ts +1096 -0
- package/src/setup/replaysource.ts +198 -0
- package/src/setup/retune.ts +415 -0
- package/src/setup/retunelog.ts +95 -0
- package/src/setup/scan.ts +1033 -0
- package/src/setup/scanbuild.ts +168 -0
- package/src/setup/scanfacts.ts +107 -0
- package/src/setup/scanlease.ts +297 -0
- package/src/setup/scanreport.ts +373 -0
- package/src/setup/scanrun.ts +2268 -0
- package/src/setup/scantree.ts +259 -0
- package/src/setup/stage2.ts +926 -0
- package/src/setup/stage2request.ts +347 -0
- package/src/setup/survey.ts +458 -0
- package/src/setup/surveyrun.ts +758 -0
- package/src/setup/textsniff.ts +95 -0
- package/src/setup/trackersink.ts +433 -0
- package/src/setup/triage.ts +768 -0
- package/src/setup/tuning.ts +766 -0
- package/src/setup/unitcut.ts +523 -0
- package/src/singleflight.ts +86 -0
- package/src/slack/announce.ts +911 -0
- package/src/slack/api.ts +303 -0
- package/src/slack/messages.ts +288 -0
- package/src/slack/origin.ts +599 -0
- package/src/slack/policy.ts +354 -0
- package/src/slack/reply.ts +201 -0
- package/src/slack/router.ts +285 -0
- package/src/slack/socket.ts +384 -0
- package/src/slack/types.ts +108 -0
- package/src/sqlitehint.ts +32 -0
- package/src/ssh-observation.ts +30 -0
- package/src/state.ts +8261 -0
- package/src/statemachine.ts +372 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +306 -0
- package/src/terminal-failure.ts +41 -0
- package/src/thread-resolution-refusal.ts +2 -0
- package/src/tmux.ts +153 -0
- package/src/trackerid.ts +41 -0
- package/src/transcriptindex.ts +665 -0
- package/src/tui/actions.ts +484 -0
- package/src/tui/alerts.ts +666 -0
- package/src/tui/app.ts +2026 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1529 -0
- package/src/tui/candidates.ts +889 -0
- package/src/tui/cellwidth.ts +148 -0
- package/src/tui/changelog-store.ts +503 -0
- package/src/tui/chord.ts +25 -0
- package/src/tui/clipboard.ts +92 -0
- package/src/tui/cmdbar.ts +299 -0
- package/src/tui/companion.ts +1495 -0
- package/src/tui/companionplan.ts +247 -0
- package/src/tui/companiontab.ts +83 -0
- package/src/tui/confighome.ts +155 -0
- package/src/tui/connect.ts +74 -0
- package/src/tui/deploy-ceremony.ts +104 -0
- package/src/tui/deploy-drain.ts +129 -0
- package/src/tui/deploy-process.ts +265 -0
- package/src/tui/deploytab.ts +1523 -0
- package/src/tui/design.ts +125 -0
- package/src/tui/digesttab.ts +214 -0
- package/src/tui/emptystate.ts +39 -0
- package/src/tui/evidence.ts +999 -0
- package/src/tui/feed.ts +604 -0
- package/src/tui/feedbacktab.ts +1077 -0
- package/src/tui/filters.ts +94 -0
- package/src/tui/ghread.ts +388 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1656 -0
- package/src/tui/issuesink.ts +238 -0
- package/src/tui/jsonfile.ts +42 -0
- package/src/tui/keys.ts +109 -0
- package/src/tui/layout.ts +108 -0
- package/src/tui/learning.ts +627 -0
- package/src/tui/lessonswitch.ts +118 -0
- package/src/tui/livecontrol.ts +228 -0
- package/src/tui/memforward.ts +492 -0
- package/src/tui/memincident.ts +363 -0
- package/src/tui/memory.ts +620 -0
- package/src/tui/memtab.ts +606 -0
- package/src/tui/metricstab.ts +1177 -0
- package/src/tui/model.ts +165 -0
- package/src/tui/mouse.ts +98 -0
- package/src/tui/msg.ts +268 -0
- package/src/tui/nativecompanion.ts +417 -0
- package/src/tui/openurl.ts +21 -0
- package/src/tui/paint.ts +511 -0
- package/src/tui/panes.ts +98 -0
- package/src/tui/pipane.ts +219 -0
- package/src/tui/poll-hooks.ts +12 -0
- package/src/tui/poll.ts +147 -0
- package/src/tui/proposals.ts +838 -0
- package/src/tui/prpause.ts +159 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +421 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/route.ts +173 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/setupstate.ts +52 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +631 -0
- package/src/tui/startup.ts +231 -0
- package/src/tui/tabs.ts +45 -0
- package/src/tui/termmirror.ts +224 -0
- package/src/tui/theme.ts +96 -0
- package/src/tui/ticketstab.ts +310 -0
- package/src/tui/tmuxsocket.ts +129 -0
- package/src/tui/trackertickets.ts +84 -0
- package/src/tui/unwedge.ts +274 -0
- package/src/tui/viewer.ts +575 -0
- package/src/tui/viewerinput.ts +173 -0
- package/src/updatenotice.ts +178 -0
- package/src/usage.ts +1154 -0
- package/src/verdicts.ts +4707 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +951 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2182 -0
- package/src/worker-session-host.ts +602 -0
- package/src/workerbreaker.ts +156 -0
- package/src/workercontrol.ts +104 -0
- package/src/workerlease.ts +441 -0
- package/src/workerliveness.ts +103 -0
- package/src/workerlog.ts +79 -0
- package/src/workerruntime.ts +30 -0
- package/src/workersupervisor.ts +1538 -0
- package/src/workerusage.ts +42 -0
- package/src/workerworld.ts +433 -0
- package/src/worktrees.ts +1138 -0
- package/tests/fixtures/regression-cases.json +795 -0
- package/tests/fixtures/seed-manifest.json +19 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VENDORED VERBATIM from the pinned pi package's shipped example:
|
|
3
|
+
* @earendil-works/pi-coding-agent examples/extensions/inline-bash.ts
|
|
4
|
+
* (copied at 0.84.1; byte-identical at 0.84.4).
|
|
5
|
+
* Copied rather than referenced in-image because the load path must survive a
|
|
6
|
+
* pi version bump and be guardable host-side like every other /workspace
|
|
7
|
+
* extension. Re-copy on a pi pin bump (rule 7); do not hand-edit below this
|
|
8
|
+
* header. Companion QoL only — never loaded by VM sessions.
|
|
9
|
+
*
|
|
10
|
+
* Inline Bash Extension - expands inline bash commands in user prompts.
|
|
11
|
+
*
|
|
12
|
+
* Start pi with this extension:
|
|
13
|
+
* pi -e ./examples/extensions/inline-bash.ts
|
|
14
|
+
*
|
|
15
|
+
* Then type prompts with inline bash:
|
|
16
|
+
* What's in !{pwd}?
|
|
17
|
+
* The current branch is !{git branch --show-current} and status: !{git status --short}
|
|
18
|
+
* My node version is !{node --version}
|
|
19
|
+
*
|
|
20
|
+
* The !{command} patterns are executed and replaced with their output before
|
|
21
|
+
* the prompt is sent to the agent.
|
|
22
|
+
*
|
|
23
|
+
* Note: Regular !command syntax (whole-line bash) is preserved and works as before.
|
|
24
|
+
*/
|
|
25
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
26
|
+
|
|
27
|
+
export default function (pi: ExtensionAPI) {
|
|
28
|
+
const PATTERN = /!\{([^}]+)\}/g;
|
|
29
|
+
const TIMEOUT_MS = 30000;
|
|
30
|
+
|
|
31
|
+
pi.on("input", async (event, ctx) => {
|
|
32
|
+
const text = event.text;
|
|
33
|
+
|
|
34
|
+
// Don't process if it's a whole-line bash command (starts with !)
|
|
35
|
+
// This preserves the existing !command behavior
|
|
36
|
+
if (text.trimStart().startsWith("!") && !text.trimStart().startsWith("!{")) {
|
|
37
|
+
return { action: "continue" };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Check if there are any inline bash patterns
|
|
41
|
+
if (!PATTERN.test(text)) {
|
|
42
|
+
return { action: "continue" };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Reset regex state after test()
|
|
46
|
+
PATTERN.lastIndex = 0;
|
|
47
|
+
|
|
48
|
+
let result = text;
|
|
49
|
+
const expansions: Array<{ command: string; output: string; error?: string }> = [];
|
|
50
|
+
|
|
51
|
+
// Find all matches first (to avoid issues with replacing while iterating)
|
|
52
|
+
const matches: Array<{ full: string; command: string }> = [];
|
|
53
|
+
let match = PATTERN.exec(text);
|
|
54
|
+
while (match) {
|
|
55
|
+
matches.push({ full: match[0], command: match[1] });
|
|
56
|
+
match = PATTERN.exec(text);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Execute each command and collect results
|
|
60
|
+
for (const { full, command } of matches) {
|
|
61
|
+
try {
|
|
62
|
+
const bashResult = await pi.exec("bash", ["-c", command], {
|
|
63
|
+
timeout: TIMEOUT_MS,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const output = bashResult.stdout || bashResult.stderr || "";
|
|
67
|
+
const trimmed = output.trim();
|
|
68
|
+
|
|
69
|
+
if (bashResult.code !== 0 && bashResult.stderr) {
|
|
70
|
+
expansions.push({
|
|
71
|
+
command,
|
|
72
|
+
output: trimmed,
|
|
73
|
+
error: `exit code ${bashResult.code}`,
|
|
74
|
+
});
|
|
75
|
+
} else {
|
|
76
|
+
expansions.push({ command, output: trimmed });
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
result = result.replace(full, trimmed);
|
|
80
|
+
} catch (err) {
|
|
81
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
82
|
+
expansions.push({ command, output: "", error: errorMsg });
|
|
83
|
+
result = result.replace(full, `[error: ${errorMsg}]`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Show what was expanded (if UI available)
|
|
88
|
+
if (ctx.hasUI && expansions.length > 0) {
|
|
89
|
+
const summary = expansions
|
|
90
|
+
.map((e) => {
|
|
91
|
+
const status = e.error ? ` (${e.error})` : "";
|
|
92
|
+
const preview = e.output.length > 50 ? `${e.output.slice(0, 50)}...` : e.output;
|
|
93
|
+
return `!{${e.command}}${status} -> "${preview}"`;
|
|
94
|
+
})
|
|
95
|
+
.join("\n");
|
|
96
|
+
|
|
97
|
+
ctx.ui.notify(`Expanded ${expansions.length} inline command(s):\n${summary}`, "info");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return { action: "transform", text: result, images: event.images };
|
|
101
|
+
});
|
|
102
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// login-route — a pi that has no usable model login says so, and opens pi's
|
|
2
|
+
// own /login; a pi whose model names one OpenAI provider while the person
|
|
3
|
+
// logged in with the other runs the same model on the login that exists.
|
|
4
|
+
//
|
|
5
|
+
// Loaded by every CLI pi Quickreview starts for a person: the onboarding
|
|
6
|
+
// wizard (registered by extensions/onboarding.ts, which opens the login for
|
|
7
|
+
// the person), the companion, a takeover and a debug round (the env shim
|
|
8
|
+
// extensions/cli/login-route.ts, which prefills it). An SDK session needs none
|
|
9
|
+
// of this: PiHost routes its model the same way (packages/pi-plugin/src/engine/pisdk.ts).
|
|
10
|
+
//
|
|
11
|
+
// Three behaviours, each on pi's own API:
|
|
12
|
+
// - Model route. On session_start and before every prompt (the `input`
|
|
13
|
+
// event, which pi runs before it checks the model's credential), a model
|
|
14
|
+
// whose provider has no credential is switched to its OpenAI twin when the
|
|
15
|
+
// twin has one and serves the same id (packages/pi-plugin/src/modelroute.ts).
|
|
16
|
+
// The provider the spec names always wins when its login exists, so an
|
|
17
|
+
// install that works today is untouched. pi.setModel does not persist the
|
|
18
|
+
// switch to settings.
|
|
19
|
+
// - Login hint. When no usable model is left, a widget says exactly what to
|
|
20
|
+
// do, and pi's input line holds `/login`, so one Enter opens pi's login.
|
|
21
|
+
// The widget clears once a model is selected (`model_select`).
|
|
22
|
+
// - Open (the wizard only). pi runs `/login` only from its editor's submit
|
|
23
|
+
// (an extension cannot call the command), and the one public way to reach
|
|
24
|
+
// that submit is an editor component: pi wires its own submit handler
|
|
25
|
+
// onto every editor an extension installs. So the login is opened by
|
|
26
|
+
// installing a stock CustomEditor for an instant, submitting `/login`
|
|
27
|
+
// through the handler pi gave it, and restoring the editor that was there.
|
|
28
|
+
// When that wiring is not found, the prefilled `/login` is the fallback.
|
|
29
|
+
import {
|
|
30
|
+
CustomEditor,
|
|
31
|
+
type ExtensionAPI,
|
|
32
|
+
type ExtensionContext,
|
|
33
|
+
type ExtensionFactory,
|
|
34
|
+
type ExtensionUIContext,
|
|
35
|
+
} from "@earendil-works/pi-coding-agent";
|
|
36
|
+
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
37
|
+
import { routeProvider, twinProvider } from "@quickchatai/pi-quickreview/src/modelroute.js";
|
|
38
|
+
|
|
39
|
+
/** The widget key the hint is shown under. */
|
|
40
|
+
export const LOGIN_WIDGET = "qcr-login";
|
|
41
|
+
|
|
42
|
+
/** The command the hint prefills and the wizard submits: pi's own login,
|
|
43
|
+
* with every provider it offers. */
|
|
44
|
+
export const LOGIN_COMMAND = "/login";
|
|
45
|
+
|
|
46
|
+
/** What the person reads above the input line while no model is usable:
|
|
47
|
+
* which logins work and how to reach them in pi's menu (pi 1.4.0's labels),
|
|
48
|
+
* then how to (re)open the menu. `opened` says whether the menu is on screen. */
|
|
49
|
+
export function loginHintLines(opened: boolean): string[] {
|
|
50
|
+
return [
|
|
51
|
+
"Quickreview needs a model login before it can do anything. Any OpenAI login works:",
|
|
52
|
+
' - "Sign in with an account", then "OpenAI" (Sign in with ChatGPT) or "OpenAI Codex (legacy)";',
|
|
53
|
+
' - "Sign in with an API key", then type openai, pick "OpenAI" and paste your key (sk-...).',
|
|
54
|
+
opened
|
|
55
|
+
? `pi's login menu is open below. Closed it? Type ${LOGIN_COMMAND} and press Enter.`
|
|
56
|
+
: `Press Enter to open pi's login menu (${LOGIN_COMMAND} is on the input line).`,
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** How a pi opens the login when it needs one. */
|
|
61
|
+
export type LoginOpen = "submit" | "prefill";
|
|
62
|
+
|
|
63
|
+
export interface LoginRouteConfig {
|
|
64
|
+
/** "submit" opens pi's login menu; "prefill" leaves `/login` on the input
|
|
65
|
+
* line for one Enter. */
|
|
66
|
+
open: LoginOpen;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The config the env describes: QCR_LOGIN_OPEN=submit, else prefill. */
|
|
70
|
+
export function loginRouteConfigFromEnv(env: NodeJS.ProcessEnv): LoginRouteConfig {
|
|
71
|
+
return { open: env.QCR_LOGIN_OPEN === "submit" ? "submit" : "prefill" };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** What the model route did. */
|
|
75
|
+
export type ModelRouteOutcome =
|
|
76
|
+
/** The current model's provider has a credential. */
|
|
77
|
+
| "usable"
|
|
78
|
+
/** The model was moved to its OpenAI twin, whose login exists. */
|
|
79
|
+
| "switched"
|
|
80
|
+
/** There is a model, and neither it nor a twin has a credential. */
|
|
81
|
+
| "unusable"
|
|
82
|
+
/** There is no model at all. */
|
|
83
|
+
| "none";
|
|
84
|
+
|
|
85
|
+
type Registry = Pick<
|
|
86
|
+
ExtensionContext["modelRegistry"],
|
|
87
|
+
"find" | "getAvailable" | "getProviderAuthStatus"
|
|
88
|
+
>;
|
|
89
|
+
|
|
90
|
+
function hasCredential(registry: Registry, provider: string): boolean {
|
|
91
|
+
try {
|
|
92
|
+
return registry.getProviderAuthStatus(provider).configured;
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Keep the session's model on a login that exists: the model as it is when its
|
|
100
|
+
* provider has a credential, else its OpenAI twin when that has one.
|
|
101
|
+
*
|
|
102
|
+
* VERIFY-ON-PIN (pi 1.4.0): ModelRegistry.getProviderAuthStatus(p).configured
|
|
103
|
+
* covers a stored login, a stored or runtime key and an environment key, and
|
|
104
|
+
* the extension pi.setModel returns false (switching nothing) for a provider
|
|
105
|
+
* without a credential.
|
|
106
|
+
*/
|
|
107
|
+
export async function routeSessionModel(
|
|
108
|
+
pi: Pick<ExtensionAPI, "setModel">,
|
|
109
|
+
ctx: { model: Model<Api> | undefined; modelRegistry: Registry },
|
|
110
|
+
): Promise<ModelRouteOutcome> {
|
|
111
|
+
const model = ctx.model;
|
|
112
|
+
if (!model) return "none";
|
|
113
|
+
const registry = ctx.modelRegistry;
|
|
114
|
+
if (hasCredential(registry, model.provider)) return "usable";
|
|
115
|
+
if (twinProvider(model.provider) === undefined) return "unusable";
|
|
116
|
+
const provider = routeProvider(model.provider, model.id, {
|
|
117
|
+
hasCredential: (p) => hasCredential(registry, p),
|
|
118
|
+
hasModel: (p, id) => registry.find(p, id) !== undefined,
|
|
119
|
+
});
|
|
120
|
+
if (provider === model.provider) return "unusable";
|
|
121
|
+
const twin = registry.find(provider, model.id);
|
|
122
|
+
if (twin && (await pi.setModel(twin))) return "switched";
|
|
123
|
+
return "unusable";
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Does this pi need a login: no usable model, and none pi could pick? */
|
|
127
|
+
export function needsLogin(outcome: ModelRouteOutcome, registry: Registry): boolean {
|
|
128
|
+
if (outcome === "usable" || outcome === "switched") return false;
|
|
129
|
+
if (outcome === "unusable") return true;
|
|
130
|
+
try {
|
|
131
|
+
return registry.getAvailable().length === 0;
|
|
132
|
+
} catch {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
type EditorUi = Pick<ExtensionUIContext, "setEditorComponent" | "getEditorComponent">;
|
|
138
|
+
type MakeEditor = Parameters<ExtensionUIContext["setEditorComponent"]>[0] & {};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Submit `text` through pi's own editor submit, as if typed and Entered. pi
|
|
142
|
+
* runs its built-in commands (`/login` among them) only from that handler, and
|
|
143
|
+
* hands it to every editor component an extension installs: so a stock editor
|
|
144
|
+
* is installed, its handler taken, and the previous editor (pi's default, or
|
|
145
|
+
* another extension's) restored before anything renders. Returns false, having
|
|
146
|
+
* submitted nothing, when pi did not wire a handler.
|
|
147
|
+
*
|
|
148
|
+
* VERIFY-ON-PIN (pi 1.4.0, interactive-mode.js setCustomEditorComponent):
|
|
149
|
+
* `newEditor.onSubmit = this.defaultEditor.onSubmit` runs synchronously inside
|
|
150
|
+
* setEditorComponent, and setEditorComponent(undefined) restores the default
|
|
151
|
+
* editor with its text.
|
|
152
|
+
*/
|
|
153
|
+
export function submitThroughEditor(
|
|
154
|
+
ui: EditorUi,
|
|
155
|
+
text: string,
|
|
156
|
+
makeEditor: MakeEditor = (tui, theme, keybindings) => new CustomEditor(tui, theme, keybindings),
|
|
157
|
+
): boolean {
|
|
158
|
+
let made: { onSubmit?: (text: string) => void } | undefined;
|
|
159
|
+
const previous = ui.getEditorComponent();
|
|
160
|
+
try {
|
|
161
|
+
ui.setEditorComponent((tui, theme, keybindings) => {
|
|
162
|
+
const editor = makeEditor(tui, theme, keybindings);
|
|
163
|
+
made = editor;
|
|
164
|
+
return editor;
|
|
165
|
+
});
|
|
166
|
+
} catch {
|
|
167
|
+
made = undefined;
|
|
168
|
+
}
|
|
169
|
+
const submit = made?.onSubmit;
|
|
170
|
+
ui.setEditorComponent(previous);
|
|
171
|
+
if (typeof submit !== "function") return false;
|
|
172
|
+
void Promise.resolve()
|
|
173
|
+
.then(() => submit(text))
|
|
174
|
+
.catch(() => undefined);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
type HintUi = Pick<ExtensionUIContext, "setWidget" | "setEditorText"> & EditorUi;
|
|
179
|
+
|
|
180
|
+
/** Show the hint and open (or prefill) pi's login. Returns how it was opened. */
|
|
181
|
+
export function openLogin(ui: HintUi, open: LoginOpen): "submitted" | "prefilled" {
|
|
182
|
+
if (open === "submit" && submitThroughEditor(ui, LOGIN_COMMAND)) {
|
|
183
|
+
ui.setWidget(LOGIN_WIDGET, loginHintLines(true), { placement: "aboveEditor" });
|
|
184
|
+
return "submitted";
|
|
185
|
+
}
|
|
186
|
+
ui.setWidget(LOGIN_WIDGET, loginHintLines(false), { placement: "aboveEditor" });
|
|
187
|
+
ui.setEditorText(LOGIN_COMMAND);
|
|
188
|
+
return "prefilled";
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Register the model route and the login hint on `pi`. Exported so a host that
|
|
192
|
+
* builds its own onboarding extension (over `toolDefinitions`) gets the same
|
|
193
|
+
* first-run login as `qcr onboard`. */
|
|
194
|
+
export function registerLoginRoute(pi: ExtensionAPI, config: LoginRouteConfig): void {
|
|
195
|
+
if (typeof pi.on !== "function") return;
|
|
196
|
+
let shown = false;
|
|
197
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
198
|
+
const outcome = await routeSessionModel(pi, ctx);
|
|
199
|
+
if (!ctx.hasUI || !needsLogin(outcome, ctx.modelRegistry)) return;
|
|
200
|
+
shown = true;
|
|
201
|
+
openLogin(ctx.ui, config.open);
|
|
202
|
+
});
|
|
203
|
+
// pi checks the model's credential after this event, so a login made inside
|
|
204
|
+
// the session (its default model stays the spec's provider) is routed here.
|
|
205
|
+
pi.on("input", async (_event, ctx) => {
|
|
206
|
+
await routeSessionModel(pi, ctx);
|
|
207
|
+
return { action: "continue" };
|
|
208
|
+
});
|
|
209
|
+
pi.on("model_select", (_event, ctx) => {
|
|
210
|
+
if (!shown || !ctx.hasUI) return;
|
|
211
|
+
shown = false;
|
|
212
|
+
ctx.ui.setWidget(LOGIN_WIDGET, undefined);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** The factory, for a pi that loads the route by path (its shim) or a host
|
|
217
|
+
* that composes factories. */
|
|
218
|
+
export function createLoginRoute(config: LoginRouteConfig): ExtensionFactory {
|
|
219
|
+
return (pi) => registerLoginRoute(pi, config);
|
|
220
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "muted",
|
|
3
|
+
"vars": {
|
|
4
|
+
"text": "#c8ccd4",
|
|
5
|
+
"muted": "#7f8794",
|
|
6
|
+
"dim": "#606773",
|
|
7
|
+
"accent": "#82a6c9",
|
|
8
|
+
"border": "#526272",
|
|
9
|
+
"panel": "#20232a",
|
|
10
|
+
"panelSoft": "#24272f",
|
|
11
|
+
"panelError": "#302326"
|
|
12
|
+
},
|
|
13
|
+
"colors": {
|
|
14
|
+
"accent": "accent",
|
|
15
|
+
"border": "border",
|
|
16
|
+
"borderAccent": "accent",
|
|
17
|
+
"borderMuted": "dim",
|
|
18
|
+
"success": "#8fae9a",
|
|
19
|
+
"error": "#c78388",
|
|
20
|
+
"warning": "#c7aa78",
|
|
21
|
+
"muted": "muted",
|
|
22
|
+
"dim": "dim",
|
|
23
|
+
"text": "text",
|
|
24
|
+
"thinkingText": "muted",
|
|
25
|
+
"selectedBg": "panelSoft",
|
|
26
|
+
"scrollbarThumb": "#353a45",
|
|
27
|
+
"userMessageBg": "#252932",
|
|
28
|
+
"userMessageText": "text",
|
|
29
|
+
"customMessageBg": "#27252e",
|
|
30
|
+
"customMessageText": "text",
|
|
31
|
+
"customMessageLabel": "#a392bd",
|
|
32
|
+
"toolPendingBg": "panel",
|
|
33
|
+
"toolSuccessBg": "panel",
|
|
34
|
+
"toolErrorBg": "panelError",
|
|
35
|
+
"toolTitle": "#aeb7c4",
|
|
36
|
+
"toolOutput": "muted",
|
|
37
|
+
"mdHeading": "#c5ad82",
|
|
38
|
+
"mdLink": "accent",
|
|
39
|
+
"mdLinkUrl": "dim",
|
|
40
|
+
"mdCode": "#9fb8ba",
|
|
41
|
+
"mdCodeBlock": "#abb3bd",
|
|
42
|
+
"mdCodeBlockBorder": "dim",
|
|
43
|
+
"mdQuote": "muted",
|
|
44
|
+
"mdQuoteBorder": "border",
|
|
45
|
+
"mdHr": "dim",
|
|
46
|
+
"mdListBullet": "accent",
|
|
47
|
+
"toolDiffAdded": "#88a991",
|
|
48
|
+
"toolDiffRemoved": "#bd8085",
|
|
49
|
+
"toolDiffContext": "muted",
|
|
50
|
+
"syntaxComment": "#6f806f",
|
|
51
|
+
"syntaxKeyword": "#879fc1",
|
|
52
|
+
"syntaxFunction": "#b7aa82",
|
|
53
|
+
"syntaxVariable": "#9db3c5",
|
|
54
|
+
"syntaxString": "#9caf91",
|
|
55
|
+
"syntaxNumber": "#ad9dbc",
|
|
56
|
+
"syntaxType": "#84aaa8",
|
|
57
|
+
"syntaxOperator": "#aeb3bb",
|
|
58
|
+
"syntaxPunctuation": "#aeb3bb",
|
|
59
|
+
"thinkingOff": "dim",
|
|
60
|
+
"thinkingMinimal": "muted",
|
|
61
|
+
"thinkingLow": "#718da8",
|
|
62
|
+
"thinkingMedium": "#829bb5",
|
|
63
|
+
"thinkingHigh": "#9b8eae",
|
|
64
|
+
"thinkingXhigh": "#ad88b1",
|
|
65
|
+
"thinkingMax": "#bd8caf",
|
|
66
|
+
"bashMode": "#8fae9a"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// The fleet-wide low-contrast pi theme — default for EVERY pi session
|
|
2
|
+
// (companion and the VM per-PR/overseer sessions alike). Tool success
|
|
3
|
+
// intentionally uses the same neutral background as pending tools: command
|
|
4
|
+
// completion must not flash a bright green panel at the operator.
|
|
5
|
+
//
|
|
6
|
+
// VERIFY-ON-PIN: session_start's second argument and ctx.ui.setTheme are the
|
|
7
|
+
// documented 0.84.1 extension API, also exercised by pi's mac-system-theme
|
|
8
|
+
// example.
|
|
9
|
+
import type { ExtensionAPI, ExtensionFactory } from "@earendil-works/pi-coding-agent";
|
|
10
|
+
|
|
11
|
+
export const MUTED_THEME = "muted";
|
|
12
|
+
|
|
13
|
+
export function createMutedTheme(): ExtensionFactory {
|
|
14
|
+
return (pi: ExtensionAPI): void => {
|
|
15
|
+
pi.on("session_start", (_event, ctx) => {
|
|
16
|
+
const ui = ctx?.ui as
|
|
17
|
+
{ setTheme?: (theme: string) => { success: boolean; error?: string } } | undefined;
|
|
18
|
+
const result = ui?.setTheme?.(MUTED_THEME);
|
|
19
|
+
if (result && !result.success)
|
|
20
|
+
console.error(`[muted-theme] ${result.error ?? "could not select theme"}`);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
// onboarding — the wizard's tool belt. Loaded ONLY by `qcr onboard`
|
|
2
|
+
// (per spawn, `-e`, alongside --no-extensions — no ambient extension rides the
|
|
3
|
+
// onboarding session), never registered globally. pi jiti-loads this TS source
|
|
4
|
+
// on the HOST, so it imports the OnboardingEngine source directly and runs it
|
|
5
|
+
// in-process: pi talks, these deterministic tools act, and the LLM never
|
|
6
|
+
// freestyles a shell command (the built-in belt is read-only by argv).
|
|
7
|
+
//
|
|
8
|
+
// One tool per registered engine step (onboard_<id>), plus:
|
|
9
|
+
// - onboard_status: reconcile + checklist listing (resume re-verifies every
|
|
10
|
+
// claimed-done step against reality — the file is never trusted alone);
|
|
11
|
+
// - finish_and_exit: re-runs the FULL verification; anything red comes back
|
|
12
|
+
// as the tool result (no exit, ever, while red); all green marks the
|
|
13
|
+
// checklist complete, writes the companion's first-run marker
|
|
14
|
+
// (state/companion/first-run.json), and triggers pi's deferred shutdown —
|
|
15
|
+
// the `qcr onboard` process then opens the TUI.
|
|
16
|
+
//
|
|
17
|
+
// Convention notes (same shape as companion-guard/tui-view): degrade, never
|
|
18
|
+
// wedge — a pi without registerTool registers nothing and says so; a missing
|
|
19
|
+
// ctx.shutdown falls back to telling the operator to /exit.
|
|
20
|
+
import { execFile } from "node:child_process";
|
|
21
|
+
import { existsSync } from "node:fs";
|
|
22
|
+
import { join } from "node:path";
|
|
23
|
+
import type {
|
|
24
|
+
ExtensionAPI,
|
|
25
|
+
ExtensionFactory,
|
|
26
|
+
ExtensionToolContext,
|
|
27
|
+
} from "@earendil-works/pi-coding-agent";
|
|
28
|
+
import {
|
|
29
|
+
registerQcrTool,
|
|
30
|
+
textResult as text,
|
|
31
|
+
type QcrTool,
|
|
32
|
+
} from "@quickchatai/pi-quickreview/extensions/pi-tool.js";
|
|
33
|
+
import {
|
|
34
|
+
OnboardingEngine,
|
|
35
|
+
type CheckResult,
|
|
36
|
+
type OnboardAdapters,
|
|
37
|
+
type ReconcileReport,
|
|
38
|
+
type StepStatusLine,
|
|
39
|
+
} from "../src/onboard/engine.js";
|
|
40
|
+
import { defaultSteps } from "../src/onboard/steps/index.js";
|
|
41
|
+
import { openStepMemoryForward } from "../src/onboard/stepforward.js";
|
|
42
|
+
import { locateConfig } from "../src/install.js";
|
|
43
|
+
import { registerLoginRoute } from "./login-route.js";
|
|
44
|
+
import {
|
|
45
|
+
ONBOARD_FINISH_TOOL,
|
|
46
|
+
ONBOARD_STATUS_TOOL,
|
|
47
|
+
onboardStepToolName,
|
|
48
|
+
} from "../src/onboard/toolnames.js";
|
|
49
|
+
|
|
50
|
+
const NO_PARAMS = { type: "object", properties: {} } as const;
|
|
51
|
+
|
|
52
|
+
// ---- real adapters ----------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
/** The one real adapter assembly. Steps see the host only through this. */
|
|
55
|
+
export function realAdapters(root: string): OnboardAdapters {
|
|
56
|
+
return {
|
|
57
|
+
fetch: (input, init) => fetch(input, init),
|
|
58
|
+
runner: {
|
|
59
|
+
run: (cmd, args) =>
|
|
60
|
+
new Promise((resolvePromise) => {
|
|
61
|
+
execFile(cmd, args, { timeout: 60_000 }, (err, stdout, stderr) => {
|
|
62
|
+
const code = err === null ? 0 : typeof err.code === "number" ? err.code : 1;
|
|
63
|
+
resolvePromise({
|
|
64
|
+
code,
|
|
65
|
+
stdout: String(stdout),
|
|
66
|
+
stderr: err && !stderr ? String(err.message) : String(stderr),
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}),
|
|
70
|
+
},
|
|
71
|
+
clock: () => new Date(),
|
|
72
|
+
host: {
|
|
73
|
+
nodeVersion: process.version,
|
|
74
|
+
uid: typeof process.getuid === "function" ? process.getuid() : null,
|
|
75
|
+
inContainer: existsSync("/.dockerenv"),
|
|
76
|
+
},
|
|
77
|
+
// The install locator decides which config.toml the wizard edits —
|
|
78
|
+
// $QCR_CONFIG, else the install's config home (never the checkout's).
|
|
79
|
+
paths: { stateDir: join(root, "state"), configPath: locateConfig().path },
|
|
80
|
+
log: (line) => console.error(line),
|
|
81
|
+
memoryForward: (req) => openStepMemoryForward(req),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function buildEngine(root: string): OnboardingEngine {
|
|
86
|
+
return new OnboardingEngine(defaultSteps(), realAdapters(root));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ---- rendering --------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
export function renderChecks(checks: readonly CheckResult[]): string {
|
|
92
|
+
return checks.map((c) => `${c.ok ? "✓" : "✗"} ${c.name} — ${c.detail}`).join("\n");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function renderStatus(
|
|
96
|
+
lines: readonly StepStatusLine[],
|
|
97
|
+
reconciled: ReconcileReport,
|
|
98
|
+
): string {
|
|
99
|
+
const rows = lines.map((l) => {
|
|
100
|
+
const mark =
|
|
101
|
+
l.status === "done"
|
|
102
|
+
? "[done]"
|
|
103
|
+
: l.status === "disabled"
|
|
104
|
+
? "[skipped]"
|
|
105
|
+
: l.optional
|
|
106
|
+
? "[after setup]"
|
|
107
|
+
: "[ ]";
|
|
108
|
+
return `${mark} ${l.id} — ${l.title}${l.note ? ` (${l.note})` : ""}`;
|
|
109
|
+
});
|
|
110
|
+
const demoted = reconciled.demoted.map(
|
|
111
|
+
(d) => `re-verification demoted ${d.id}: ${d.failures.join("; ")}`,
|
|
112
|
+
);
|
|
113
|
+
return [
|
|
114
|
+
"Onboarding checklist (claimed-done steps were just re-verified against reality):",
|
|
115
|
+
...rows,
|
|
116
|
+
...demoted,
|
|
117
|
+
].join("\n");
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ---- tool belt --------------------------------------------------------------
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Build the tool definitions over an engine. `shutdown` is injected so tests
|
|
124
|
+
* assert the finish tool's refusal/exit behaviour without a pi; activate wires
|
|
125
|
+
* the real ctx probe.
|
|
126
|
+
*/
|
|
127
|
+
export function toolDefinitions(
|
|
128
|
+
engine: OnboardingEngine,
|
|
129
|
+
shutdown: (ctx?: Pick<ExtensionToolContext, "shutdown">) => void,
|
|
130
|
+
): QcrTool[] {
|
|
131
|
+
const stepTools: QcrTool[] = engine.stepDefs().map((step) => ({
|
|
132
|
+
name: onboardStepToolName(step.id),
|
|
133
|
+
label: step.title,
|
|
134
|
+
description:
|
|
135
|
+
`${step.explain} Deterministic: runs the "${step.id}" onboarding step's real checks and returns one ✓/✗ line per check. ` +
|
|
136
|
+
"Safe to re-run; a failed run leaves the step pending.",
|
|
137
|
+
promptSnippet: `Run the ${step.id} onboarding step`,
|
|
138
|
+
// A step that needs the operator's answer declares its own schema; the
|
|
139
|
+
// params land on the step as ctx.input (the ingress choice is one).
|
|
140
|
+
// Everything else takes no input at all.
|
|
141
|
+
parameters: step.parameters ?? NO_PARAMS,
|
|
142
|
+
execute: async (_id, params) => {
|
|
143
|
+
const result = await engine.runStep(step.id, params ?? {});
|
|
144
|
+
if (result.ok)
|
|
145
|
+
return text(`Step "${step.id}" completed and recorded.\n${renderChecks(result.checks)}`);
|
|
146
|
+
// A refusal (a disabled or unknown step) runs no checks: its reason is
|
|
147
|
+
// the engine's failures, and there are no red checks to fix.
|
|
148
|
+
if (result.checks.length === 0)
|
|
149
|
+
return text(
|
|
150
|
+
`Step "${step.id}" REFUSED — ${result.failures.join("; ") || "no reason given"}.`,
|
|
151
|
+
);
|
|
152
|
+
return text(
|
|
153
|
+
`Step "${step.id}" FAILED — fix the red checks and run it again.\n${renderChecks(result.checks)}`,
|
|
154
|
+
);
|
|
155
|
+
},
|
|
156
|
+
}));
|
|
157
|
+
|
|
158
|
+
const status: QcrTool = {
|
|
159
|
+
name: ONBOARD_STATUS_TOOL,
|
|
160
|
+
label: "Onboarding status",
|
|
161
|
+
description:
|
|
162
|
+
"The checklist: every step in order with its status. Re-verifies each claimed-done step against reality first " +
|
|
163
|
+
"(the state file is never trusted alone), so call this at the start of every session and after anything changes outside the tools.",
|
|
164
|
+
promptSnippet: "Read and re-verify the onboarding checklist",
|
|
165
|
+
parameters: NO_PARAMS,
|
|
166
|
+
execute: async () => {
|
|
167
|
+
const reconciled = await engine.reconcile();
|
|
168
|
+
return text(renderStatus(engine.list(), reconciled));
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const finish: QcrTool = {
|
|
173
|
+
name: ONBOARD_FINISH_TOOL,
|
|
174
|
+
label: "Finish onboarding",
|
|
175
|
+
description:
|
|
176
|
+
"Re-run EVERY verification. While anything is red this refuses and returns the failures — it never exits on red. " +
|
|
177
|
+
"When all green it marks onboarding complete, writes the companion first-run marker, and shuts this session down; " +
|
|
178
|
+
"the wizard process then opens the TUI.",
|
|
179
|
+
promptSnippet: "Verify everything and, only when green, finish onboarding",
|
|
180
|
+
parameters: NO_PARAMS,
|
|
181
|
+
execute: async (_id, _params, _signal, _onUpdate, ctx) => {
|
|
182
|
+
const result = await engine.finish();
|
|
183
|
+
if (!result.ok) {
|
|
184
|
+
const red = result.results
|
|
185
|
+
.filter((r) => !r.ok && !r.optional)
|
|
186
|
+
.map((r) => `✗ ${r.id}: ${r.failures.join("; ") || "not verified"}`);
|
|
187
|
+
return text(
|
|
188
|
+
`Not finished — these verifications are red:\n${red.join("\n")}\n` +
|
|
189
|
+
"Fix them (or run the step tools again), then call finish_and_exit once more.",
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
// Green: shut down AFTER this result is returned. The 250ms defer is
|
|
193
|
+
// belt-and-braces so the model sees the confirmation first.
|
|
194
|
+
// VERIFY-ON-PIN: ctx.shutdown's own idle-deferral (pi's ExtensionContext) may
|
|
195
|
+
// make the timer redundant — the onboarding smoke step is the evidence.
|
|
196
|
+
setTimeout(() => shutdown(ctx), 250);
|
|
197
|
+
return text(
|
|
198
|
+
`Every step verified green — onboarding is complete (recorded ${result.completed_at}).\n` +
|
|
199
|
+
`${result.marker_written ? "First-run marker written for the companion greeting." : "First-run marker already present — left untouched."}\n` +
|
|
200
|
+
"This session now shuts down and the TUI opens: the board lists the repository's open pull requests — " +
|
|
201
|
+
"select one and press R to review it now (dry-run: nothing is posted).",
|
|
202
|
+
);
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
return [...stepTools, status, finish];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ---- activation -------------------------------------------------------------
|
|
210
|
+
|
|
211
|
+
export interface OnboardingConfig {
|
|
212
|
+
/** The checkout the wizard inspects and writes the install's config for. */
|
|
213
|
+
root: string;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** The root the env describes: QCR_ROOT, else `cwd`. */
|
|
217
|
+
export function onboardingConfigFromEnv(env: NodeJS.ProcessEnv, cwd: string): OnboardingConfig {
|
|
218
|
+
return { root: env.QCR_ROOT ?? cwd };
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** The factory that registers the wizard's tools. The env shim is
|
|
222
|
+
* extensions/cli/onboarding.ts. */
|
|
223
|
+
export function createOnboarding(config: OnboardingConfig): ExtensionFactory {
|
|
224
|
+
return (pi) => registerOnboarding(pi, config);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* The onboarding session's first-run login: when pi has no usable model
|
|
229
|
+
* login, pi's own /login menu opens with a widget that says which logins work
|
|
230
|
+
* (any OpenAI one), and an OpenAI model whose provider has no login runs on
|
|
231
|
+
* the twin login that exists (extensions/login-route.ts). `qcr onboard`
|
|
232
|
+
* registers it with the tools; a host that builds its own onboarding
|
|
233
|
+
* extension over `toolDefinitions` + `registerQcrTool` calls it too.
|
|
234
|
+
*/
|
|
235
|
+
export function registerOnboardingSession(pi: ExtensionAPI): void {
|
|
236
|
+
registerLoginRoute(pi, { open: "submit" });
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function registerOnboarding(pi: ExtensionAPI, config: OnboardingConfig): void {
|
|
240
|
+
registerOnboardingSession(pi);
|
|
241
|
+
if (typeof pi.registerTool !== "function") {
|
|
242
|
+
// Degrade loudly, never wedge: pi still starts, the guide can only talk.
|
|
243
|
+
console.error(
|
|
244
|
+
"onboarding: pi.registerTool unavailable — no wizard tools registered; this pi cannot run onboarding.",
|
|
245
|
+
);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const engine = buildEngine(config.root);
|
|
249
|
+
const shutdown = (ctx?: Pick<ExtensionToolContext, "shutdown">): void => {
|
|
250
|
+
const fn = ctx?.shutdown ?? (pi as { shutdown?: () => void | Promise<void> }).shutdown;
|
|
251
|
+
if (typeof fn === "function") {
|
|
252
|
+
// VERIFY-ON-PIN: deferred clean shutdown with exit code 0 (pi 1.4.0's
|
|
253
|
+
// ExtensionContext.shutdown). Bound to the named onboarding smoke step.
|
|
254
|
+
void fn.call(ctx ?? pi);
|
|
255
|
+
} else {
|
|
256
|
+
console.error(
|
|
257
|
+
"onboarding: no shutdown API on this pi — type /exit to leave; the wizard will open the TUI.",
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
for (const def of toolDefinitions(engine, shutdown)) registerQcrTool(pi, def);
|
|
262
|
+
}
|