@quickchatai/quickreview 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +385 -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 +1067 -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/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/muted-theme.js +12 -0
- package/dist/extensions/muted-theme.js.map +1 -0
- package/dist/extensions/onboarding.js +175 -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 +91 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1916 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +333 -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 +1312 -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 +1027 -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 +929 -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 +219 -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 +1726 -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 +194 -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 +430 -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 +1063 -0
- package/dist/src/github.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 +42 -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 +49 -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 +226 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +191 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +344 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +83 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +211 -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 +343 -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 +1148 -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/githubapp.js +1092 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +506 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +67 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +762 -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 +893 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1060 -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 +502 -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 +511 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +362 -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/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/outcomes.js +1361 -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 +441 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +662 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +203 -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 +1398 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +820 -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 +284 -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/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 +220 -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 +249 -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 +1835 -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 +1143 -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 +253 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1275 -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 +44 -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 +72 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +272 -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 +1425 -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 +310 -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 +104 -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 +132 -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 +312 -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/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/sidebar.js +602 -0
- package/dist/src/tui/sidebar.js.map +1 -0
- package/dist/src/tui/sshtriage.js +393 -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 +95 -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 +245 -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 +3848 -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 +725 -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 +1801 -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 +332 -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 +343 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +782 -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/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/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +233 -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 +74 -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 +212 -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 +141 -0
- package/src/cli.ts +2271 -0
- package/src/cliops.ts +384 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1678 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2050 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1302 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +262 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2250 -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 +235 -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 +633 -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 +1497 -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 +56 -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 +57 -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 +264 -0
- package/src/onboard/choices.ts +222 -0
- package/src/onboard/engine.ts +518 -0
- package/src/onboard/launch.ts +115 -0
- package/src/onboard/steps/appslug.ts +265 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +459 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1352 -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/githubapp.ts +1414 -0
- package/src/onboard/steps/golive.ts +577 -0
- package/src/onboard/steps/index.ts +71 -0
- package/src/onboard/steps/ingress.ts +907 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1095 -0
- package/src/onboard/steps/memory.ts +1290 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +624 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +337 -0
- package/src/onboard/steps/transport.ts +665 -0
- package/src/onboard/steps/verifyup.ts +448 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -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/outcomes.ts +1670 -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 +549 -0
- package/src/posting-outbox.ts +802 -0
- package/src/posting-receipt.ts +324 -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 +1775 -0
- package/src/reconcile.ts +1030 -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 +427 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -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 +8243 -0
- package/src/statemachine.ts +369 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +293 -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 +1979 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1432 -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 +296 -0
- package/src/tui/companion.ts +1427 -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 +68 -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 +90 -0
- package/src/tui/ghread.ts +321 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1565 -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 +443 -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 +131 -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 +150 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +413 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +510 -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 +95 -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 +286 -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 +4689 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +942 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2153 -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 +427 -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,139 @@
|
|
|
1
|
+
# The clone route's scan sandbox image (src/scanbox.ts). Now this is NOT
|
|
2
|
+
# the companion: the local companion is the release image (docker/Dockerfile)
|
|
3
|
+
# in `companion` mode, built by `qcr companion rebuild`. What is left here is
|
|
4
|
+
# the throwaway container `qcr scan start` drives a scan in
|
|
5
|
+
# ([scan] sandbox = "docker", default image `qcr-scan`), through the one-shot
|
|
6
|
+
# mode of docker/companion/entrypoint.sh. It goes when scanbox moves onto the
|
|
7
|
+
# release image. A plain `docker build` from the app root (`qcr scan rebuild`
|
|
8
|
+
# runs it, after `npm run build`):
|
|
9
|
+
#
|
|
10
|
+
# docker build -t qcr-scan -f docker/companion/Dockerfile \
|
|
11
|
+
# --build-arg COMPANION_UID="$(id -u)" --build-arg BUILD_SHA=<stamp> .
|
|
12
|
+
#
|
|
13
|
+
# The context is the whole checkout, narrowed by the root .dockerignore to what
|
|
14
|
+
# the image copies: the built app (below).
|
|
15
|
+
#
|
|
16
|
+
# Deltas from the VM image:
|
|
17
|
+
# - node:26 base instead of ubuntu + NodeSource (same major, less plumbing).
|
|
18
|
+
# - no memory extension baked in: memory is OpenViking over the
|
|
19
|
+
# host-owned forward, through the vendored extension mounted at /workspace.
|
|
20
|
+
# - no gh CLI / mint-token credential helper / webhook port: the companion
|
|
21
|
+
# reads the daemon over ssh and writes local files, it never mutates GitHub.
|
|
22
|
+
# - its own pihome volume: never share the VM's auth.json (OAuth tokens
|
|
23
|
+
# refresh in place; two hosts refreshing one grant is a hazard). One-time
|
|
24
|
+
# `/login` inside the container is a HITL step.
|
|
25
|
+
FROM node:26-bookworm
|
|
26
|
+
|
|
27
|
+
ENV DEBIAN_FRONTEND=noninteractive \
|
|
28
|
+
TZ=Europe/Warsaw
|
|
29
|
+
|
|
30
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
31
|
+
ca-certificates curl git jq openssh-client tzdata \
|
|
32
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
33
|
+
|
|
34
|
+
# tmux 3.5a from source — bookworm ships 3.3a, below the ≥3.5 needed for
|
|
35
|
+
# `extended-keys-format csi-u` (modified keys actually reaching pi). Recipe
|
|
36
|
+
# copied from the VM image so both sides speak the same key protocol.
|
|
37
|
+
ARG TMUX_VERSION=3.5a
|
|
38
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
39
|
+
build-essential libevent-dev libncurses-dev bison pkg-config \
|
|
40
|
+
&& curl -fsSL https://github.com/tmux/tmux/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz \
|
|
41
|
+
| tar xz -C /tmp \
|
|
42
|
+
&& cd /tmp/tmux-${TMUX_VERSION} && ./configure && make -j"$(nproc)" && make install \
|
|
43
|
+
&& rm -rf /tmp/tmux-${TMUX_VERSION} \
|
|
44
|
+
&& apt-get purge -y bison && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*
|
|
45
|
+
|
|
46
|
+
# pi — pinned, never floating. Pin must equal config.toml [pi], package.json's
|
|
47
|
+
# `qcrPi` block and deploy/ansible/group_vars, or every VERIFY-ON-PIN assumption
|
|
48
|
+
# in this repo is void.
|
|
49
|
+
ARG PI_PACKAGE=@earendil-works/pi-coding-agent
|
|
50
|
+
ARG PI_VERSION=1.4.0
|
|
51
|
+
RUN npm install -g ${PI_PACKAGE}@${PI_VERSION}
|
|
52
|
+
|
|
53
|
+
# No memory extension is installed here. The companion's memory is OpenViking
|
|
54
|
+
# on the VM, reached over a host-owned forward, and its pi extension is the
|
|
55
|
+
# vendored+patched `extensions/vendor/openviking-pi` bind-mounted at /workspace
|
|
56
|
+
# and passed with `--extension` by src/tui/companion.ts — nothing to bake into
|
|
57
|
+
# the image. Do not add a local memory package (pi-memory, qmd): a second
|
|
58
|
+
# engine writing a local MEMORY.md would fork the companion's memory silently.
|
|
59
|
+
|
|
60
|
+
# Non-root, and the uid MUST match the invoking host user: every interesting
|
|
61
|
+
# mount here is a host bind mount the companion writes (/alerts, /feed,
|
|
62
|
+
# /workspace, /tracker), so a mismatched uid means "Permission denied" on the
|
|
63
|
+
# very first alert file (the VM image's 1001 does not transfer to a laptop). Both
|
|
64
|
+
# scripts/companion-e2e.sh and scripts/smoke-companion.sh build with
|
|
65
|
+
# `--build-arg COMPANION_UID="$(id -u)"`; the default is the usual desktop
|
|
66
|
+
# 1000. --non-unique because node:26 already ships a uid-1000 `node` user.
|
|
67
|
+
ARG COMPANION_UID=1000
|
|
68
|
+
RUN useradd --create-home --non-unique --uid ${COMPANION_UID} companion \
|
|
69
|
+
&& mkdir -p /home/companion/.pi /workspace /tracker /feed /alerts \
|
|
70
|
+
&& chown -R companion:companion /home/companion /feed /alerts
|
|
71
|
+
|
|
72
|
+
COPY docker/companion/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
73
|
+
# The memory health watcher. Baked into the image rather than read off
|
|
74
|
+
# /workspace so it starts with the container, before any repo build exists.
|
|
75
|
+
COPY docker/companion/memory-health.mjs /usr/local/lib/qcr/memory-health.mjs
|
|
76
|
+
RUN chmod 0755 /usr/local/bin/entrypoint.sh && chmod 0644 /usr/local/lib/qcr/memory-health.mjs
|
|
77
|
+
|
|
78
|
+
# The app, baked in for the scan sandbox (src/scanbox.ts): a `qcr scan`
|
|
79
|
+
# driver runs from /opt/qcr and needs nothing from the checkout — the built
|
|
80
|
+
# dist, its runtime dependencies, and the agent, prompt, seed and profile
|
|
81
|
+
# trees the scan's agent build reads. src/ and extensions/ ride along so an
|
|
82
|
+
# extension loaded from here resolves its imports. Root-owned: the companion
|
|
83
|
+
# user reads it and never writes it. The list is src/appstamp.ts BAKED_PATHS.
|
|
84
|
+
WORKDIR /opt/qcr
|
|
85
|
+
COPY package.json package-lock.json /opt/qcr/
|
|
86
|
+
# The review core's workspace manifest first: `npm ci` links the package.
|
|
87
|
+
COPY packages/pi-plugin/package.json /opt/qcr/packages/pi-plugin/package.json
|
|
88
|
+
RUN npm ci --omit=dev && npm cache clean --force
|
|
89
|
+
COPY dist /opt/qcr/dist
|
|
90
|
+
COPY packages/pi-plugin /opt/qcr/packages/pi-plugin
|
|
91
|
+
COPY src /opt/qcr/src
|
|
92
|
+
COPY extensions /opt/qcr/extensions
|
|
93
|
+
COPY agents /opt/qcr/agents
|
|
94
|
+
COPY prompts /opt/qcr/prompts
|
|
95
|
+
COPY seeds /opt/qcr/seeds
|
|
96
|
+
COPY profiles /opt/qcr/profiles
|
|
97
|
+
COPY docker/companion /opt/qcr/docker/companion
|
|
98
|
+
# The build stamp: the hash `qcr companion rebuild` computed over exactly the
|
|
99
|
+
# files copied above. `qcr scan start` refuses an image whose stamp is not
|
|
100
|
+
# the checkout's (src/appstamp.ts).
|
|
101
|
+
ARG BUILD_SHA=unstamped
|
|
102
|
+
LABEL qcr.build-sha="${BUILD_SHA}"
|
|
103
|
+
RUN printf '%s\n' "${BUILD_SHA}" > /opt/qcr/BUILD_SHA
|
|
104
|
+
|
|
105
|
+
# Mount points — the lifecycle code (src/tui/companion.ts) wires the host side:
|
|
106
|
+
# /home/companion/.pi named volume companion-pihome (OAuth, sessions, memory)
|
|
107
|
+
# /workspace the review-sandbox repo, rw
|
|
108
|
+
# /tracker the issue tracker, rw (actor `companion`)
|
|
109
|
+
# /feed TUI → companion ambient snapshots
|
|
110
|
+
# /alerts companion → TUI alert files
|
|
111
|
+
#
|
|
112
|
+
# A scan sandbox container (src/scanbox.ts) mounts a different, smaller set:
|
|
113
|
+
# the reviewed repo read-only, the state home, its own pi home volume and the
|
|
114
|
+
# config, and runs `node /opt/qcr/dist/src/cli.js scan … --foreground`
|
|
115
|
+
# through the entrypoint's one-shot mode.
|
|
116
|
+
#
|
|
117
|
+
# Its ssh to the VM (the companion boundary, full ssh) is the host's agent socket,
|
|
118
|
+
# ssh config and known_hosts, mounted read-only by src/tui/companion.ts — never
|
|
119
|
+
# a key file. Memory does not ride it: OpenViking is reached over a forward
|
|
120
|
+
# owned by the host (scripts/companion-memory-forward.mjs), at
|
|
121
|
+
# OPENVIKING_ENDPOINT on the qcr-memory docker bridge with the two USER keys
|
|
122
|
+
# docker passes in via --env-file.
|
|
123
|
+
VOLUME ["/home/companion/.pi"]
|
|
124
|
+
|
|
125
|
+
USER companion
|
|
126
|
+
# HOME must be set EXPLICITLY. `useradd --non-unique --uid 1000 companion`
|
|
127
|
+
# leaves two passwd entries at uid 1000, and docker resolves `USER companion`
|
|
128
|
+
# back through the uid to the FIRST of them — node:26's own `node` user — so
|
|
129
|
+
# HOME would be /home/node while the pihome volume is mounted on
|
|
130
|
+
# /home/companion/.pi. Everything pi writes to $HOME/.pi (settings, trust,
|
|
131
|
+
# `auth.json`) would then land on the container's writable layer and the OAuth
|
|
132
|
+
# login would not survive a recreate. Do not remove this line, and do not
|
|
133
|
+
# "simplify" it by dropping the companion user: uid 1000 is required to write
|
|
134
|
+
# /workspace and /tracker as the host user, so the collision cannot be avoided
|
|
135
|
+
# — only overridden.
|
|
136
|
+
ENV HOME=/home/companion
|
|
137
|
+
WORKDIR /workspace
|
|
138
|
+
|
|
139
|
+
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evidence
|
|
3
|
+
description: Reads finished-round evidence for one PR — transcripts under /evidence plus the reviewed source at /reviewed-repo — and reports what actually happened
|
|
4
|
+
tools: read, grep, find, ls
|
|
5
|
+
model: openai-codex/gpt-6.1-sol:medium
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a round-evidence reader inside the quickreview companion container. You
|
|
9
|
+
run as an isolated process with NO inherited context: the task description is
|
|
10
|
+
all you know — it should name a PR (`pr-<n>`) and a question; if it does not
|
|
11
|
+
name one, say so and stop.
|
|
12
|
+
|
|
13
|
+
Sources, all read-only:
|
|
14
|
+
- `/evidence/pr-<n>/` — finished-round artifacts the TUI copied down from the
|
|
15
|
+
VM (session transcripts, verdicts, lens outputs). This is the record of what
|
|
16
|
+
the reviewer actually did.
|
|
17
|
+
- `/reviewed-repo` — the reviewed repo's source, for checking a finding
|
|
18
|
+
against the code it talks about.
|
|
19
|
+
|
|
20
|
+
Your job: answer the question from the evidence — what a session concluded,
|
|
21
|
+
which lens produced a finding, whether a claim in a review matches the code —
|
|
22
|
+
and return a brief with exact citations (file, and line or entry offset).
|
|
23
|
+
|
|
24
|
+
Discipline:
|
|
25
|
+
- The evidence is the authority on what happened; the code is the authority on
|
|
26
|
+
what is true. Keep the two apart in your answer.
|
|
27
|
+
- Quote the decisive lines verbatim when short; summarize when long, and say
|
|
28
|
+
where the full text lives.
|
|
29
|
+
- An empty or missing `/evidence/pr-<n>/` is an answer ("no rounds copied for
|
|
30
|
+
this PR"), not an error to improvise around.
|
|
31
|
+
|
|
32
|
+
Output: verdict on the question first, then the supporting citations, then
|
|
33
|
+
anything adjacent you noticed that the caller did not ask about (one line
|
|
34
|
+
each, clearly marked as unasked).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore
|
|
3
|
+
description: Read-only codebase recon — finds code, maps structure, answers "where/how is X done" across /workspace and /reviewed-repo
|
|
4
|
+
tools: read, grep, find, ls
|
|
5
|
+
model: openai-codex/gpt-6.1-sol:low
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a read-only codebase scout inside the quickreview companion container.
|
|
9
|
+
You run as an isolated process with NO inherited context: everything you know
|
|
10
|
+
about the task is in the task description you were given. If it names no
|
|
11
|
+
directory, assume `/workspace` (the review-sandbox repo). `/reviewed-repo` is
|
|
12
|
+
the reviewed product's source, mounted read-only.
|
|
13
|
+
|
|
14
|
+
Your job: answer the question you were given by reading code, and return a
|
|
15
|
+
compact brief the caller can act on without re-opening the files.
|
|
16
|
+
|
|
17
|
+
Discipline:
|
|
18
|
+
- You cannot write anything, and you must not try to work around that.
|
|
19
|
+
- Cite every claim as `path:line` so the caller can jump straight there.
|
|
20
|
+
- Distinguish plainly between what you VERIFIED by reading and what you
|
|
21
|
+
inferred; never present an inference as a read.
|
|
22
|
+
- If the question cannot be answered from the mounted trees, say exactly that
|
|
23
|
+
and what was searched — a clean "not found here" beats a guess.
|
|
24
|
+
|
|
25
|
+
Output: a short summary first (2-3 sentences), then findings as a cited list,
|
|
26
|
+
then open questions if any.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-survey
|
|
3
|
+
description: The setup survey's lens — reads one survey case of the reviewed repo (the repo-wide directive files and design docs, or one unit's code sample) and writes the conventions and architecture a reviewer must know. Hunts no bugs. Launched by the setup engine; not for ad-hoc questions (use explore).
|
|
4
|
+
tools: read, grep, find, ls
|
|
5
|
+
model: openai-codex/gpt-6.1-sol:low
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the survey lens of a code reviewer being set up on a repository it has
|
|
9
|
+
never seen. You run as an isolated process with NO inherited context: the task
|
|
10
|
+
description names the case — the repo-wide read or one unit — and the exact
|
|
11
|
+
files to read. The repository is mounted read-only; you cannot change it and
|
|
12
|
+
must not try.
|
|
13
|
+
|
|
14
|
+
Your job is to learn the repo, not to review it. What you write becomes the
|
|
15
|
+
reviewer's memory: every later pull-request review of this repo reads it. So
|
|
16
|
+
write only what a careful reviewer would need to know before judging a change
|
|
17
|
+
here, and write it so it is still true next month.
|
|
18
|
+
|
|
19
|
+
What to write:
|
|
20
|
+
- **conventions** — how code here is expected to be written: naming, layout
|
|
21
|
+
of a module, error handling, logging, how tests are organised, what the
|
|
22
|
+
directive files demand or forbid, the house style where it is stated or
|
|
23
|
+
consistently followed.
|
|
24
|
+
- **architecture** — how this part is put together: its layers and where each
|
|
25
|
+
kind of code lives, its entry points, the models or schemas it owns, the
|
|
26
|
+
boundaries it keeps with the rest of the repo, the invariants its design
|
|
27
|
+
depends on.
|
|
28
|
+
|
|
29
|
+
Discipline:
|
|
30
|
+
- Read every file you were given, in the order given. Directive files and
|
|
31
|
+
design docs are read IN FULL — they are the team's own words and outrank
|
|
32
|
+
your inference.
|
|
33
|
+
- A note states one thing and names the file(s) that show it, as repo-relative
|
|
34
|
+
paths. A convention you saw once is not a convention: say what you saw
|
|
35
|
+
only when the files state it or the sample follows it consistently.
|
|
36
|
+
- Keep what the files SAY apart from what you infer. Mark an inference
|
|
37
|
+
("appears to", "the sample suggests").
|
|
38
|
+
- No findings. Do not report bugs, risks, smells or improvements — a survey
|
|
39
|
+
that hunts bugs is a scan, and it is not your job.
|
|
40
|
+
- Do not restate a note the task says the repo-wide read already made.
|
|
41
|
+
- Nothing generic: "code should be readable" teaches a reviewer nothing.
|
|
42
|
+
|
|
43
|
+
Output grammar (parsed by a program — follow it exactly):
|
|
44
|
+
- One note per paragraph, each opening with its kind in brackets at the start
|
|
45
|
+
of a line: `[convention] …` or `[architecture] …`. A note may run over
|
|
46
|
+
several lines; a blank line ends it.
|
|
47
|
+
- At most 12 notes, each at most a few sentences (longer is cut).
|
|
48
|
+
- Nothing else is kept: no headings, no preamble, no summary.
|
|
49
|
+
- If the case teaches nothing a reviewer needs, answer exactly `NONE`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: study
|
|
3
|
+
description: Reads long-form material — tracker tickets and maps under /tracker, docs, specs, session notes — and returns a faithful digest scoped to a question
|
|
4
|
+
tools: read, grep, find, ls
|
|
5
|
+
model: openai-codex/gpt-6.1-sol:medium
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a document reader inside the quickreview companion container. You run as
|
|
9
|
+
an isolated process with NO inherited context: the task description is all you
|
|
10
|
+
know. Typical sources: `/tracker` (the issue tracker — efforts, maps, tickets,
|
|
11
|
+
inbox drops), `/workspace/docs`, `/workspace/prompts`, `/tracker-docs`.
|
|
12
|
+
|
|
13
|
+
Your job: read what you were pointed at (or find it by ticket id / filename),
|
|
14
|
+
and return a digest scoped to the caller's question — not a general summary.
|
|
15
|
+
|
|
16
|
+
Discipline:
|
|
17
|
+
- Read-only. You never claim, edit, or resolve a ticket; you only report.
|
|
18
|
+
- Preserve the source's own decisions verbatim where they matter — ratified
|
|
19
|
+
decisions, hard rules, and "rejected: …" lines are load-bearing and must not
|
|
20
|
+
be paraphrased into something weaker.
|
|
21
|
+
- Keep provenance: every point in the digest names the file it came from
|
|
22
|
+
(and the ticket id where there is one).
|
|
23
|
+
- If sources conflict, surface the conflict; do not silently pick one.
|
|
24
|
+
|
|
25
|
+
Output: the answer to the question first, then the digest as a cited list,
|
|
26
|
+
then a "what I did not read" line if you had to cut scope.
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# The scan sandbox image's entrypoint (docker/companion/Dockerfile). Its one-shot
|
|
3
|
+
# mode is all that is used now the local companion is the release image
|
|
4
|
+
# in `companion` mode (docker/entrypoint.sh). The companion branch below is the
|
|
5
|
+
# superseded one and goes with this image.
|
|
6
|
+
#
|
|
7
|
+
# Companion container entrypoint. PID 1 owns exactly two jobs:
|
|
8
|
+
# start a correctly-configured tmux server and then stay alive. pi itself is
|
|
9
|
+
# spawned by the TUI through `docker exec` (src/tui/companion.ts), the same
|
|
10
|
+
# adopt-don't-kill shape the VM sessions use — so a pi crash never takes the
|
|
11
|
+
# container (and the conversation volume) with it.
|
|
12
|
+
#
|
|
13
|
+
# One-shot mode: given a command (`docker run … <image> <cmd…>`), it
|
|
14
|
+
# provisions pi's settings and then execs that command instead of the tmux
|
|
15
|
+
# server — how the scan sandbox runs its driver (src/scanbox.ts) and how
|
|
16
|
+
# `qcr scan login` / `doctor` run pi. Its own lines go to stderr, so the
|
|
17
|
+
# command's stdout is the command's; with QCR_DRIVER_LOG set, both go to that
|
|
18
|
+
# file (the scan driver's log in the mounted state home).
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
if [ "$#" -gt 0 ]; then
|
|
22
|
+
ENTRY_MODE=oneshot
|
|
23
|
+
if [ -n "${QCR_DRIVER_LOG:-}" ]; then
|
|
24
|
+
mkdir -p "$(dirname "$QCR_DRIVER_LOG")"
|
|
25
|
+
exec >>"$QCR_DRIVER_LOG" 2>&1
|
|
26
|
+
fi
|
|
27
|
+
exec 3>&1 1>&2
|
|
28
|
+
else
|
|
29
|
+
ENTRY_MODE=companion
|
|
30
|
+
fi
|
|
31
|
+
# The settings merge below reads it: a one-shot container has no /workspace.
|
|
32
|
+
export QCR_ENTRY_MODE="$ENTRY_MODE"
|
|
33
|
+
|
|
34
|
+
PI_HOME_DIR="${HOME}/.pi"
|
|
35
|
+
mkdir -p "$PI_HOME_DIR/agent" 2>/dev/null || true
|
|
36
|
+
if [ "$ENTRY_MODE" = companion ]; then
|
|
37
|
+
mkdir -p /workspace /tracker /feed /alerts 2>/dev/null || true
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Durability guard. pi writes its OAuth token, settings and trust store under
|
|
41
|
+
# $HOME/.pi. If that is NOT the mounted volume (a uid collision moving $HOME is
|
|
42
|
+
# enough), every one of them lives on the container's writable layer and dies
|
|
43
|
+
# with the next recreate — the login silently stops persisting, and nobody
|
|
44
|
+
# finds out until they are asked to log in again. Loud, never fatal: a
|
|
45
|
+
# companion that starts is worth more than one that is right, and the operator
|
|
46
|
+
# can see this line. The companion's alone: a one-shot container's pi home is
|
|
47
|
+
# what it mounts — the scan sandbox's is a private tmpfs, meant to vanish.
|
|
48
|
+
# /proc/mounts, not `mountpoint`: util-linux is not guaranteed in the base
|
|
49
|
+
# image, and a guard that reports a false alarm when its own tool is missing
|
|
50
|
+
# teaches you to ignore it.
|
|
51
|
+
if [ "$ENTRY_MODE" = companion ]; then
|
|
52
|
+
if ! awk -v d="$PI_HOME_DIR" '$2 == d { found = 1 } END { exit !found }' /proc/mounts; then
|
|
53
|
+
echo "!! $PI_HOME_DIR is NOT a mount point — pi's OAuth token and settings will"
|
|
54
|
+
echo "!! NOT survive a container recreate. Expected the companion-pihome volume"
|
|
55
|
+
echo "!! here. HOME=$HOME; check the Dockerfile's ENV HOME against"
|
|
56
|
+
echo "!! CONTAINER.piHome in src/tui/companion.ts."
|
|
57
|
+
else
|
|
58
|
+
echo "pi home on the volume: $PI_HOME_DIR (OAuth + conversation are durable)"
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Everything from here to the pi settings is the companion's: its mounts,
|
|
63
|
+
# its tmux and its git identity. A one-shot container skips it.
|
|
64
|
+
if [ "$ENTRY_MODE" = companion ]; then
|
|
65
|
+
|
|
66
|
+
# Reviewed-repo mount. The reviewed repo's source arrives READ-ONLY at
|
|
67
|
+
# /reviewed-repo so the companion can read the code a review is about. It is
|
|
68
|
+
# conditional by design (src/tui/companion.ts runArgv): a host without the
|
|
69
|
+
# checkout gets no mount, and that must leave the companion under-equipped
|
|
70
|
+
# rather than unable to start — same degrade discipline as the skills dir and
|
|
71
|
+
# the vendored extension. Never `mkdir` it as a fallback: an empty tree reads
|
|
72
|
+
# as "the code says nothing", which is worse than a plainly absent mount.
|
|
73
|
+
if [ -d /reviewed-repo ] && [ -n "$(ls -A /reviewed-repo 2>/dev/null)" ]; then
|
|
74
|
+
echo "reviewed repo mounted READ-ONLY at /reviewed-repo (read it; you can never write it)"
|
|
75
|
+
else
|
|
76
|
+
echo "!! /reviewed-repo is not mounted — no reviewed-repo source to read."
|
|
77
|
+
echo "!! Set [companion] reviewed_repo_dir to the reviewed repo's checkout on this host."
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Evidence store. Finished-round artefacts the TUI copied down from
|
|
81
|
+
# the VM arrive READ-ONLY at /evidence. Say which world this boot is in: an
|
|
82
|
+
# empty store (no rounds copied yet) and an absent mount look identical from
|
|
83
|
+
# inside the conversation, and only one of them is a misconfiguration.
|
|
84
|
+
if [ -d /evidence ]; then
|
|
85
|
+
echo "round evidence mounted READ-ONLY at /evidence ($(ls -1 /evidence 2>/dev/null | wc -l) PR dirs)"
|
|
86
|
+
else
|
|
87
|
+
echo "!! /evidence is not mounted — no finished-round transcripts to read."
|
|
88
|
+
echo "!! Set [companion] evidence_dir and restart the TUI (qcr companion rebuild not needed)."
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# Read-only GitHub token. The TUI mints it on the host and re-mints
|
|
92
|
+
# it into /github-read before it expires; only the file's PRESENCE is echoed,
|
|
93
|
+
# never a value. Absent = the TUI has no App credential or is not running.
|
|
94
|
+
if [ -s /github-read/github-read.env ]; then
|
|
95
|
+
echo "read-only GitHub token file at /github-read/github-read.env (source it; it cannot write)"
|
|
96
|
+
else
|
|
97
|
+
echo "!! no read-only GitHub token yet — GitHub reads unavailable until the TUI mints one."
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# csi-u extended keys must be configured BEFORE the server starts, or modified
|
|
101
|
+
# Enter (Shift/Alt/Ctrl) collapses to plain Enter before reaching pi and the
|
|
102
|
+
# TUI's steer/queue keys die. Requires tmux ≥3.5 (built from source in the
|
|
103
|
+
# image). Same three lines as the VM entrypoint — keep them in sync.
|
|
104
|
+
cat > "$HOME/.tmux.conf" <<'TMUXCONF'
|
|
105
|
+
# csi-u extended keys end-to-end — do not remove.
|
|
106
|
+
set -g extended-keys on
|
|
107
|
+
set -g extended-keys-format csi-u
|
|
108
|
+
set -as terminal-features 'xterm*:extkeys'
|
|
109
|
+
# Mouse wheel scrolls the pane HISTORY (tmux copy-mode), not pi's prompt list;
|
|
110
|
+
# pi /copy propagates via OSC 52 through set-clipboard. Keep in sync with the
|
|
111
|
+
# VM entrypoint template.
|
|
112
|
+
set -g mouse on
|
|
113
|
+
set -g set-clipboard on
|
|
114
|
+
set -as terminal-features 'xterm*:clipboard'
|
|
115
|
+
set -g history-limit 50000
|
|
116
|
+
# Muted look — no bright greens anywhere.
|
|
117
|
+
set -g status-style 'bg=colour235,fg=colour247'
|
|
118
|
+
set -g status-left-style 'fg=colour250'
|
|
119
|
+
set -g status-right-style 'fg=colour244'
|
|
120
|
+
set -g window-status-current-style 'fg=colour252,bold'
|
|
121
|
+
set -g message-style 'bg=colour235,fg=colour250'
|
|
122
|
+
set -g mode-style 'bg=colour238,fg=colour252'
|
|
123
|
+
set -g pane-border-style 'fg=colour238'
|
|
124
|
+
set -g pane-active-border-style 'fg=colour245'
|
|
125
|
+
TMUXCONF
|
|
126
|
+
|
|
127
|
+
# Git identity. The companion commits its own work to the mounted
|
|
128
|
+
# repo with a `[companion]` prefix, and git refuses to commit at all without an
|
|
129
|
+
# identity ("Please tell me who you are"). ~/.gitconfig lives on the container's
|
|
130
|
+
# writable layer, NOT the pihome volume, so it is rewritten every start rather
|
|
131
|
+
# than seeded once. Author, not committer-of-record for anyone else: the name
|
|
132
|
+
# says plainly which hands made the commit.
|
|
133
|
+
# `|| true` on every one: `set -e` is on, and a git that exits non-zero here
|
|
134
|
+
# would take the CONTAINER down at boot — mounting a git WORKTREE at /workspace
|
|
135
|
+
# does it, because its `.git` is a file pointing at a path that does not exist
|
|
136
|
+
# inside the container, and git fails while discovering the repo. An unusable
|
|
137
|
+
# git identity degrades the companion's committing; it must never stop the
|
|
138
|
+
# companion from starting.
|
|
139
|
+
git config --global user.name "QCR Companion" || true
|
|
140
|
+
git config --global user.email "companion@quickchat.ai" || true
|
|
141
|
+
# The repo is bind-mounted from the host and owned by the same uid, so
|
|
142
|
+
# safe.directory is not needed — but a uid mismatch (a rebuilt image with a
|
|
143
|
+
# different COMPANION_UID) would otherwise wedge every git call with a
|
|
144
|
+
# confusing ownership error rather than a permission one.
|
|
145
|
+
git config --global --add safe.directory /workspace || true
|
|
146
|
+
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
# pi settings. ~/.pi lives on a named volume; the merge below preserves every
|
|
150
|
+
# existing key (hand edits win, append-only extensions).
|
|
151
|
+
#
|
|
152
|
+
# No memory extension is registered here. The companion's memory is
|
|
153
|
+
# OpenViking on the VM, and its vendored+patched extension is passed per spawn
|
|
154
|
+
# with `--extension` by src/tui/companion.ts — a per-spawn flag, not a global
|
|
155
|
+
# registration.
|
|
156
|
+
SETTINGS="$PI_HOME_DIR/agent/settings.json"
|
|
157
|
+
mkdir -p "$PI_HOME_DIR/agent"
|
|
158
|
+
# Idempotent MERGE (mirrors the VM entrypoint): seeding only when the file is
|
|
159
|
+
# absent would skip every key once pi itself had written settings.json.
|
|
160
|
+
node <<'PI_EXT_MERGE'
|
|
161
|
+
const fs = require("fs");
|
|
162
|
+
// A one-shot container (the scan sandbox, `qcr scan login`) mounts no
|
|
163
|
+
// /workspace: the skills, the companion agent set and the /workspace trust
|
|
164
|
+
// are the companion's alone, and are left untouched there.
|
|
165
|
+
const oneshot = process.env.QCR_ENTRY_MODE === "oneshot";
|
|
166
|
+
const path = process.env.HOME + "/.pi/agent/settings.json";
|
|
167
|
+
let cfg = {};
|
|
168
|
+
try { cfg = JSON.parse(fs.readFileSync(path, "utf8")); } catch {}
|
|
169
|
+
if (!Array.isArray(cfg.extensions)) cfg.extensions = [];
|
|
170
|
+
// Never block on pi's interactive "Trust project folder?" modal (mirrors the
|
|
171
|
+
// VM entrypoint — the pr-5334 stall).
|
|
172
|
+
cfg.defaultProjectTrust = "always";
|
|
173
|
+
// pi 1.0 made the interactive TUI fullscreen by default. Sessions run under
|
|
174
|
+
// tmux and the operator TUI mirrors and scrolls their panes, so keep the
|
|
175
|
+
// terminal's normal scrollback (pi 0.99's default) — packages/pi-plugin/src/pibuiltins.ts PI_TUI_MODE.
|
|
176
|
+
cfg.tuiMode = "regular";
|
|
177
|
+
// pi 0.99's built-in extensions (mcp, codemode, tool-search, llama.cpp) are
|
|
178
|
+
// switched OFF, as on the VM: MCP launches server processes from any trusted
|
|
179
|
+
// mcp.json — a path around companion-guard, which vetoes TOOL CALLS — and the
|
|
180
|
+
// other three change the tool/provider set (reasons per built-in:
|
|
181
|
+
// packages/pi-plugin/src/pibuiltins.ts, the list this mirrors). Documented switch: a
|
|
182
|
+
// `-builtin:<name>` entry in the global `extensions`. This one key overrides
|
|
183
|
+
// "hand edits win": any other global `builtin:` entry is dropped first.
|
|
184
|
+
const DISABLED_BUILTINS = ["-builtin:mcp", "-builtin:codemode", "-builtin:tool-search", "-builtin:llama.cpp"];
|
|
185
|
+
cfg.extensions = cfg.extensions.filter((p) => !/^[-+!]?builtin:/.test(p)).concat(DISABLED_BUILTINS);
|
|
186
|
+
|
|
187
|
+
// Skills. The repo carries the vendored mattpocock set at
|
|
188
|
+
// /workspace/.claude/skills/ — wayfinder, grilling, domain-modeling and 22
|
|
189
|
+
// more. pi supports SKILL.md natively, but `.claude/skills` is NOT one of the
|
|
190
|
+
// paths it looks in on its own (~/.pi/agent/skills, ~/.agents/skills,
|
|
191
|
+
// .pi/skills and .agents/skills in cwd+ancestors, package skills/ dirs). Until
|
|
192
|
+
// this registration they were plain files the system prompt had to name by
|
|
193
|
+
// hand, one at a time, with no progressive disclosure: the companion could
|
|
194
|
+
// only use a skill it had already been told existed.
|
|
195
|
+
//
|
|
196
|
+
// The settings `skills` array is pi's documented interop hook for exactly this
|
|
197
|
+
// — the docs' own example is ["~/.claude/skills", "~/.codex/skills"]
|
|
198
|
+
//. VERIFY-ON-PIN: array-of-directories form, and that a
|
|
199
|
+
// registered dir is scanned one level deep for <name>/SKILL.md.
|
|
200
|
+
//
|
|
201
|
+
// COMPANION ONLY — deliberately not mirrored into the VM entrypoint. Reviewer
|
|
202
|
+
// lens passes are leaves (rule 9) and a charting/planning skill set is nothing
|
|
203
|
+
// a lens should be able to reach for mid-round.
|
|
204
|
+
//
|
|
205
|
+
// Registered only when the dir is really there: an unmounted /workspace must
|
|
206
|
+
// leave the companion under-equipped, never unable to start. Same degrade
|
|
207
|
+
// discipline as the vendored OpenViking extension in piArgv.
|
|
208
|
+
const skillsDir = "/workspace/.claude/skills";
|
|
209
|
+
if (!Array.isArray(cfg.skills)) cfg.skills = [];
|
|
210
|
+
const skillsPresent = !oneshot && fs.existsSync(skillsDir);
|
|
211
|
+
if (skillsPresent && !cfg.skills.includes(skillsDir)) cfg.skills.push(skillsDir);
|
|
212
|
+
|
|
213
|
+
// OUR OWN skills, a SECOND registered directory. `.claude/skills` is
|
|
214
|
+
// a pinned vendored copy (see .claude/skills/VENDORED.md — it is re-copied
|
|
215
|
+
// wholesale on an upstream bump), so a companion skill we author cannot live
|
|
216
|
+
// there: the next vendor pass would either clobber it or make the folder no
|
|
217
|
+
// longer a clean mirror. It gets its own tree at /workspace/skills/companion/,
|
|
218
|
+
// scanned one level deep for <name>/SKILL.md exactly like the vendored one —
|
|
219
|
+
// which is why this is a second ARRAY ENTRY and not a merged parent dir.
|
|
220
|
+
// Guarded independently and the same way: a missing dir leaves the companion
|
|
221
|
+
// under-equipped (it keeps the vendored set), never unable to start.
|
|
222
|
+
const ourSkillsDir = "/workspace/skills/companion";
|
|
223
|
+
const ourSkillsPresent = !oneshot && fs.existsSync(ourSkillsDir);
|
|
224
|
+
if (ourSkillsPresent && !cfg.skills.includes(ourSkillsDir)) cfg.skills.push(ourSkillsDir);
|
|
225
|
+
// `/skill:<name>` from pi's own input line. The embedded companion column is a
|
|
226
|
+
// TERMINAL (rule: every byte goes to pi), so the owner's `/` commands reach pi
|
|
227
|
+
// directly — this is what makes the set invocable by hand as well as by the
|
|
228
|
+
// model. Set unconditionally, like defaultProjectTrust: seed-only-if-absent is
|
|
229
|
+
// how keys silently stopped landing once pi had written settings.json itself.
|
|
230
|
+
cfg.enableSkillCommands = true;
|
|
231
|
+
// The configured model ("provider/model[:thinking]", [companion] model) is
|
|
232
|
+
// pi's default on every start, so a fresh login or a bare `pi` never falls
|
|
233
|
+
// back to a model an older login stored.
|
|
234
|
+
const defModel = process.env.QCR_PI_DEFAULT_MODEL || "";
|
|
235
|
+
const defMatch = /^([^/:\s]+)\/([^:\s]+)(?::([a-z]+))?$/.exec(defModel);
|
|
236
|
+
if (defMatch) {
|
|
237
|
+
cfg.defaultProvider = defMatch[1];
|
|
238
|
+
cfg.defaultModel = defMatch[2];
|
|
239
|
+
if (defMatch[3]) cfg.defaultThinkingLevel = defMatch[3];
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
fs.writeFileSync(path, JSON.stringify(cfg, null, 2) + "\n");
|
|
243
|
+
console.log("pi settings merged (extensions: " + (cfg.extensions.join(", ") || "none registered globally") + ")");
|
|
244
|
+
if (!oneshot) {
|
|
245
|
+
console.log(
|
|
246
|
+
cfg.skills.length
|
|
247
|
+
? "pi skills registered: " + cfg.skills.join(", ") + " (/skill:<name> enabled)"
|
|
248
|
+
: "!! no skills registered. Is /workspace mounted?",
|
|
249
|
+
);
|
|
250
|
+
// Each missing dir says so on its own line: the two degrade independently, and
|
|
251
|
+
// "the vendored set is there" must never read as "adjudicate is there".
|
|
252
|
+
if (!skillsPresent) console.log("!! " + skillsDir + " is missing — the vendored skill set is not registered.");
|
|
253
|
+
if (!ourSkillsPresent) console.log("!! " + ourSkillsDir + " is missing — our own skills (adjudicate) are not registered.");
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Braces to that belt (mirrors the VM entrypoint): pre-seed the trust store
|
|
257
|
+
// for the workspace, so even a settings regression — or a pihome volume
|
|
258
|
+
// carrying an older settings.json — cannot re-surface the modal. The third
|
|
259
|
+
// layer is `--approve` on the spawn itself (src/tui/companion.ts piArgv).
|
|
260
|
+
// /workspace, not /opt/quickreview: that is where the repo is mounted here.
|
|
261
|
+
if (!oneshot) {
|
|
262
|
+
const trustFile = process.env.HOME + "/.pi/agent/trust.json";
|
|
263
|
+
let trust = {};
|
|
264
|
+
try { trust = JSON.parse(fs.readFileSync(trustFile, "utf8")); } catch {}
|
|
265
|
+
if (trust["/workspace"] !== true) {
|
|
266
|
+
trust["/workspace"] = true;
|
|
267
|
+
fs.writeFileSync(trustFile, JSON.stringify(trust, null, 2) + "\n");
|
|
268
|
+
}
|
|
269
|
+
console.log("pi project trust: defaultProjectTrust=always, /workspace pre-trusted");
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Agent discovery for the lens tool (packages/pi-plugin/extensions/lens.ts): its agent dir's
|
|
273
|
+
// `agents` is $HOME/.pi/agent/agents; link that at the companion agent set (explore/evidence/study) riding the
|
|
274
|
+
// /workspace mount. Same degrade discipline as the skills dirs: a missing
|
|
275
|
+
// /workspace leaves the link dangling and discovery simply finds no agents —
|
|
276
|
+
// an under-equipped companion, never one that won't start. Symlink-or-absent
|
|
277
|
+
// only: a REAL directory here is someone's own agents and is never clobbered.
|
|
278
|
+
if (!oneshot) {
|
|
279
|
+
const agentsLink = process.env.HOME + "/.pi/agent/agents";
|
|
280
|
+
const companionAgents = "/workspace/docker/companion/agents";
|
|
281
|
+
try {
|
|
282
|
+
const st = fs.lstatSync(agentsLink, { throwIfNoEntry: false });
|
|
283
|
+
if (st && !st.isSymbolicLink()) {
|
|
284
|
+
console.log("!! " + agentsLink + " exists and is not a symlink — NOT touching it; the companion agent set is not discoverable");
|
|
285
|
+
} else {
|
|
286
|
+
if (st) fs.unlinkSync(agentsLink);
|
|
287
|
+
fs.symlinkSync(companionAgents, agentsLink);
|
|
288
|
+
console.log("pi user agents dir -> " + companionAgents);
|
|
289
|
+
}
|
|
290
|
+
} catch (e) {
|
|
291
|
+
console.log("!! could not link " + agentsLink + ": " + e.message);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
PI_EXT_MERGE
|
|
295
|
+
|
|
296
|
+
# One-shot: the command takes the container from here, its stdout restored.
|
|
297
|
+
if [ "$ENTRY_MODE" = oneshot ]; then
|
|
298
|
+
exec 1>&3 3>&-
|
|
299
|
+
exec "$@"
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
# OpenAI auth: the OAuth route (`/login` once inside a pi session) persists in
|
|
303
|
+
# $PI_HOME_DIR/agent/auth.json on the volume and takes precedence over the env
|
|
304
|
+
# var. OPENAI_API_KEY is honored when the caller passes one.
|
|
305
|
+
# Provider prefix under OAuth is `openai-codex/`, not `openai/`.
|
|
306
|
+
|
|
307
|
+
# Memory health watcher: probes OpenViking through the host-owned
|
|
308
|
+
# forward and drops an alert file into /alerts when it stops answering (and a
|
|
309
|
+
# notice when it comes back). Backgrounded and non-fatal by construction — an
|
|
310
|
+
# unwired or unreachable memory path degrades the companion, it never wedges
|
|
311
|
+
# it. With no QCR_MEMORY_ENDPOINT in the env the watcher exits immediately.
|
|
312
|
+
if [ -n "${QCR_MEMORY_ENDPOINT:-}${OPENVIKING_URL:-}${OPENVIKING_BASE_URL:-}" ] && [ -f /usr/local/lib/qcr/memory-health.mjs ]; then
|
|
313
|
+
node /usr/local/lib/qcr/memory-health.mjs &
|
|
314
|
+
else
|
|
315
|
+
echo "memory watcher idle: no OpenViking endpoint configured for this container"
|
|
316
|
+
fi
|
|
317
|
+
|
|
318
|
+
# The tmux server is the jump-in surface: `docker exec -it <c> tmux attach -t
|
|
319
|
+
# companion`. Panes inherit the SERVER's env, not the client's — per-session
|
|
320
|
+
# QCR_* vars ride the pi command line (see spawnPi in src/tui/companion.ts).
|
|
321
|
+
tmux start-server
|
|
322
|
+
|
|
323
|
+
# Stay alive, and DIE PROMPTLY when asked.
|
|
324
|
+
#
|
|
325
|
+
# PID 1 has no default signal dispositions, so a signal with no explicit
|
|
326
|
+
# handler is ignored outright and `docker stop` would wait its full 10 s
|
|
327
|
+
# timeout before SIGKILL — after the TUI has already restored the terminal,
|
|
328
|
+
# leaving it dead for those 10 s. A trap gives PID 1 the handler it lacks.
|
|
329
|
+
# `sleep &` + `wait` rather than `exec`, because a foreground child would
|
|
330
|
+
# block the trap until it returned.
|
|
331
|
+
term() {
|
|
332
|
+
kill "$child" 2>/dev/null || true
|
|
333
|
+
exit 0
|
|
334
|
+
}
|
|
335
|
+
trap term TERM INT
|
|
336
|
+
sleep infinity &
|
|
337
|
+
child=$!
|
|
338
|
+
# `|| true`: a signal makes `wait` return 128+N, and under `set -e` that status
|
|
339
|
+
# would end the script before the trap's own `exit 0`, and the container would
|
|
340
|
+
# record "Exited (128)" on every clean stop, which reads like a crash in
|
|
341
|
+
# `docker ps -a`.
|
|
342
|
+
wait "$child" || true
|
|
343
|
+
exit 0
|