@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,356 @@
|
|
|
1
|
+
# Review-sandbox provisioning (Ansible) — the VM/server route
|
|
2
|
+
|
|
3
|
+
Minimal, idempotent provisioning for the review sandbox: **one VM → the release
|
|
4
|
+
image in `daemon` mode** (`ghcr.io/quickchatai/quickreview`: the compiled app,
|
|
5
|
+
pinned pi, tmux, the seeds and the reviewer stub, all baked under `/opt/qcr`),
|
|
6
|
+
**beside the memory sidecar** (`ghcr.io/quickchatai/quickreview-memory`),
|
|
7
|
+
optionally with **cloudflared on the host** forwarding a public
|
|
8
|
+
hostname → `localhost:8787` → the container. The images are built ONCE, by CI,
|
|
9
|
+
from the release tag; the VM pulls those exact images by digest. **Nothing is
|
|
10
|
+
rsynced, built or installed on the VM by a deploy.** The host is provisioned
|
|
11
|
+
once (`deploy.sh provision`, this playbook), which installs a thin updater,
|
|
12
|
+
`qcr-update`, and its run spec; every deploy after that is
|
|
13
|
+
`deploy.sh release <version>`, which runs `ssh vm sudo qcr-update ...`.
|
|
14
|
+
|
|
15
|
+
> **`qcr onboard` drives this route for you.** The wizard's
|
|
16
|
+
> **topology** step offers it as one of two first-class answers — advertised as
|
|
17
|
+
> the always-on recommendation, because a reviewer that is asleep reviews
|
|
18
|
+
> nothing — then checks your ssh alias and agent *before* anything is built
|
|
19
|
+
> (the passphrase trap, in the open), fills `inventory.ini` from your answers,
|
|
20
|
+
> and runs the **same `scripts/deploy.sh` documented below**, with every one of
|
|
21
|
+
> its preflights. It composes this path; it does not replace it, and drift
|
|
22
|
+
> between the two is a bug. Everything here stays true for a manual run.
|
|
23
|
+
> The step-by-step walkthrough is
|
|
24
|
+
> [../../docs/onboarding.md](../../docs/onboarding.md).
|
|
25
|
+
|
|
26
|
+
**Prefer one machine?** The other first-class answer is the plain Docker path:
|
|
27
|
+
`docker compose up` on the released images — see `docker/README.md`. It
|
|
28
|
+
needs no server at all, and it reviews only while that machine is awake. This
|
|
29
|
+
Ansible route adds VM host setup, the optional tunnel, and the
|
|
30
|
+
`scripts/deploy.sh` provision/release/verify workflow on top of the same image.
|
|
31
|
+
|
|
32
|
+
**Ingress is a choice, not a requirement**: any HTTPS proxy or tunnel that
|
|
33
|
+
forwards your webhook hostname to the published port works. The cloudflared
|
|
34
|
+
tasks are gated on `cloudflared_enabled` (group_vars, default `true` — the
|
|
35
|
+
live deployment keeps its tunnel); set `-e cloudflared_enabled=false` to
|
|
36
|
+
bring your own ingress.
|
|
37
|
+
|
|
38
|
+
Running the whole sandbox inside one container is the isolation answer to pi
|
|
39
|
+
having no built-in permission system.
|
|
40
|
+
|
|
41
|
+
## Prerequisites (once, manual)
|
|
42
|
+
|
|
43
|
+
Items 2–4 are what `qcr onboard` fills in for you on this route; item 1 is
|
|
44
|
+
yours either way — the wizard never creates a machine.
|
|
45
|
+
|
|
46
|
+
1. **A VM you can reach over ssh by an alias**, with passwordless sudo for your
|
|
47
|
+
login. Any Linux host will do; the playbook installs everything else. The
|
|
48
|
+
live deployment runs a 4-vCPU / 100 GB box with no external IP, reached
|
|
49
|
+
through a bastion — that shape is a comfortable default, not a requirement.
|
|
50
|
+
The container is capped at 2 CPU / 8 GiB.
|
|
51
|
+
2. **Ingress**: either a Cloudflare tunnel (remote-managed tunnel, public
|
|
52
|
+
hostname → `http://localhost:8787`; its **token** saved as
|
|
53
|
+
`tunnel_token` in the local secrets dir (item 3) — required only with
|
|
54
|
+
`cloudflared_enabled: true`), or your own HTTPS proxy/tunnel pointed at
|
|
55
|
+
the VM's `localhost:8787` (then set `cloudflared_enabled: false`). The
|
|
56
|
+
wizard's ingress step writes that flag into `inventory.ini` for you: `true`
|
|
57
|
+
for the named-tunnel shape, `false` for every other one.
|
|
58
|
+
3. **Local secrets dir** — the install's `~/.config/qcr/<install>/secrets/`
|
|
59
|
+
(`deploy.sh provision` passes the install locator's answer as `secrets_src`;
|
|
60
|
+
an old `~/.config/quickreview-bot/` is never read — `qcr install migrate`
|
|
61
|
+
moves it) contains:
|
|
62
|
+
`app_id`, `app.pem`, `webhook_secret` (plus `openai_api_key` optional —
|
|
63
|
+
pi's API-key route — and `tunnel_token` when the tunnel is enabled), and
|
|
64
|
+
`openviking_root_key` / `openviking_reviewer_key` for the memory engine.
|
|
65
|
+
Memory embeds locally by default (nothing but the model call leaves the
|
|
66
|
+
VM); `openai_embeddings_api_key` exists only under the hosted-embeddings
|
|
67
|
+
opt-in, written as inventory host vars beside `cloudflared_enabled`
|
|
68
|
+
([docs/memory-embeddings.md](../../docs/memory-embeddings.md)).
|
|
69
|
+
`bash deploy/collect-secrets.sh` assembles the first set interactively; the
|
|
70
|
+
wizard's GitHub App and memory steps write the same files.
|
|
71
|
+
(Never any personal token.)
|
|
72
|
+
4. Controller tooling **on the machine you deploy from** — the deploy is an
|
|
73
|
+
Ansible run from here, not on the server:
|
|
74
|
+
```
|
|
75
|
+
ansible-galaxy collection install community.docker ansible.posix
|
|
76
|
+
cp inventory.example.ini inventory.ini # then edit — inventory.ini is
|
|
77
|
+
# gitignored (your real hostnames
|
|
78
|
+
# stay local; the example documents
|
|
79
|
+
# what to fill)
|
|
80
|
+
```
|
|
81
|
+
5. Pins ride `group_vars/all.yml` (pi, OpenViking, llama-cpp-python, …),
|
|
82
|
+
mirrored with `config.toml`; `tests/openviking.test.ts` and the
|
|
83
|
+
`scripts/deploy.sh` preflight refuse on drift. There is no `sandbox_src`:
|
|
84
|
+
nothing is synced from a working copy to the VM.
|
|
85
|
+
|
|
86
|
+
## Run
|
|
87
|
+
|
|
88
|
+
Through `scripts/deploy.sh`, which checks the pins and drift first:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
scripts/deploy.sh provision # once per VM (and when the run spec changes): host, secrets, directories, the updater
|
|
92
|
+
scripts/deploy.sh release 0.1.0 --manifest deploy-manifest-0.1.0.json # the deploy: ssh vm sudo qcr-update ...
|
|
93
|
+
scripts/deploy.sh verify # post-deploy checks over ssh
|
|
94
|
+
scripts/deploy.sh --dry-run <any of them> # the plan, nothing executed
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The old dev modes are gone: they refuse with a pointer to `release`. A fix
|
|
98
|
+
that cannot wait is a release too (a patch version); there is no working-copy
|
|
99
|
+
deploy.
|
|
100
|
+
|
|
101
|
+
**`provision`** runs this whole playbook (no tags): host packages + Docker →
|
|
102
|
+
(when `cloudflared_enabled`) cloudflared apt repo, install, service
|
|
103
|
+
registration with the tunnel token → directory layout under `/opt/quickreview/`
|
|
104
|
+
→ secrets copied `0400` → `/usr/local/sbin/qcr-update` (root `0755`, from
|
|
105
|
+
`deploy/qcr-update.sh`) and `/etc/qcr/update.conf` (root-owned, the run spec
|
|
106
|
+
`deploy.sh` renders from `group_vars` — container names, mounts, caps, CPU and
|
|
107
|
+
memory limits, networks, the sidecar's `openviking_*` env, a run-spec version
|
|
108
|
+
and a fingerprint) → the operator channel's seal → the runtime directories.
|
|
109
|
+
**It never pulls or starts an image.** Required vars (`deploy.sh` passes them):
|
|
110
|
+
`base_clone_dir` (the reviewed repo's base-clone directory, `[github]
|
|
111
|
+
clone_dir`, else the repo's basename), `secrets_src`, `update_conf_src`, and the
|
|
112
|
+
Slack token file names.
|
|
113
|
+
|
|
114
|
+
**`release`** reads CI's deploy manifest (`deploy/manifest.schema.json`: the
|
|
115
|
+
version, the revision, both images' index digests and per-arch digests, and the
|
|
116
|
+
pins they were built with), holds those pins to `config.toml` and `group_vars`
|
|
117
|
+
(the pins hold: pi, openviking, llama-cpp-python and the embedder file/sha256
|
|
118
|
+
must agree), refuses a run-spec fingerprint the VM does not hold ("re-run
|
|
119
|
+
provision"), and then sends the install's config home — `config.toml` and
|
|
120
|
+
`profiles/`, never `secrets/` — as a tar to
|
|
121
|
+
`ssh vm sudo qcr-update <version>@<digest> --memory-digest <digest>`.
|
|
122
|
+
`scripts/deploy.sh` refuses a config that lives only in the checkout or a
|
|
123
|
+
`[review] profile` the home (or the checkout's generic examples) does not hold.
|
|
124
|
+
|
|
125
|
+
### The updater (`qcr-update`)
|
|
126
|
+
|
|
127
|
+
In order (the header of `deploy/qcr-update.sh` is the contract): flock; refuse
|
|
128
|
+
unless the board is drained and idle (`draining=true`, `running_rounds=0`);
|
|
129
|
+
on the legacy layout refuse without `--cutover-ack <version>`; pull both images
|
|
130
|
+
by digest and check them (`qcr.layout`, a CI `qcr.build-sha`, `qcr.preflight`,
|
|
131
|
+
`qcr.runspec` no newer than `update.conf`'s); stage the config and run the NEW
|
|
132
|
+
image's `qcr config check --json` on it (a failure here changes nothing); stop
|
|
133
|
+
the daemon; snapshot `state.db` (+wal/shm) and a tar of `state/pi-sessions` into
|
|
134
|
+
`/var/backups/qcr/<version>-<ts>/` (root, `0600`; pihome is never included);
|
|
135
|
+
run the new image's `daemon --preflight` on a scratch copy of the snapshot with
|
|
136
|
+
`--network none`; on the legacy layout seed the sidecar store once (copy plus
|
|
137
|
+
checksum verify; the daemon's old store is untouched); swap the config
|
|
138
|
+
(`config-home` → `.prev`, `.next` → `config-home`); start the memory sidecar and
|
|
139
|
+
wait for `/ready` (a long timeout: a re-embed is a boot); recreate the daemon
|
|
140
|
+
container on the new image. At the cutover the recreate is the point of no
|
|
141
|
+
return: the first boot migrates forward.
|
|
142
|
+
|
|
143
|
+
**The tool uid (run spec v2).** The daemon runs as `container_uid`
|
|
144
|
+
and the model's tools as `tool_uid:tool_gid` (65534:4749), which cannot read
|
|
145
|
+
`secrets/`, pi's login or `state.db` (0600). The bot is not started as root, so
|
|
146
|
+
a `docker exec` into it still lands as `container_uid`; it reaches the tool
|
|
147
|
+
identity through the image's setid helper (`/usr/local/libexec/qcr/qcr-setid`,
|
|
148
|
+
built from `docker/setid/qcr-setid.c`, file capabilities), which switches to the
|
|
149
|
+
identity compiled into the image and to nothing else (never root), and which
|
|
150
|
+
only the gate group in the image's `qcr.setid-gid` label may run. The updater
|
|
151
|
+
refuses a run spec whose `TOOL_UID`/`TOOL_GID` differ from the image's
|
|
152
|
+
`qcr.tool-uid`/`qcr.tool-gid`. The recreate gives the bot `--group-add` for the
|
|
153
|
+
gate group and the tool gid, `--cap-drop ALL` with `SETUID`/`SETGID` (the
|
|
154
|
+
helper) only, `QCR_TOOLS_AS=<tool_uid>`, and no `no-new-privileges` (it would
|
|
155
|
+
void the helper; the model's tools carry `no_new_privs` of their own). The
|
|
156
|
+
operator channel needs no capability: the updater makes `commands/operator`
|
|
157
|
+
root's own `0755` before the bot starts, and the operator's `docker exec -u 0`
|
|
158
|
+
writes only into it. The playbook and the entrypoint share `state/` (`3775`),
|
|
159
|
+
`verdict/` (`2775`) and `commands/` (`3775`) with `tool_gid`; the sticky bit
|
|
160
|
+
keeps the tools from renaming or removing the daemon's entries. An image older
|
|
161
|
+
than run spec v2 has no label and gets no group. The entrypoint refuses to start
|
|
162
|
+
the bot when the helper cannot switch, or when the bot is not in the tool gid.
|
|
163
|
+
Adopting it is `provision` (the new updater and run spec v2), then a release
|
|
164
|
+
built with the helper.
|
|
165
|
+
|
|
166
|
+
**Rescue.** Any failure from the stop to the recreate restores `.prev`, removes
|
|
167
|
+
the newly started sidecar (the old one is put back), starts the old daemon
|
|
168
|
+
container, waits for its first reconcile in `status.json` (a healthy legacy
|
|
169
|
+
boot lifts the drain), re-sends `drain on` through the operator channel,
|
|
170
|
+
confirms `draining=true` and exits non-zero naming the step. Between the
|
|
171
|
+
auto-lift and the re-sent drain the dispatch pump may already have started held
|
|
172
|
+
`pending_wakes` rounds: the bot is left drained but rounds may be running, so a
|
|
173
|
+
retry waits for `running_rounds` 0. A failure after the recreate keeps the drain
|
|
174
|
+
on (a failed first reconcile never lifts it) and is fixed forward.
|
|
175
|
+
|
|
176
|
+
`sudo qcr-update status --json` reports the layout, the images' labels, the
|
|
177
|
+
run-spec version and fingerprint, the drain state and the last run.
|
|
178
|
+
|
|
179
|
+
### What is inside the container
|
|
180
|
+
|
|
181
|
+
The release image's app root is `/opt/qcr`, root-owned and read-only to the
|
|
182
|
+
container user. Everything the daemon writes lives in a host directory under
|
|
183
|
+
`/opt/quickreview/`, the same ones the legacy container mounted, bind-mounted
|
|
184
|
+
back in: `state/` → `/opt/qcr/state`, `pihome/` → `/home/qcr/.pi`, `secrets/`
|
|
185
|
+
and `config-home/` read-only at `/opt/quickreview/`, and `sandbox/{wt,archive,
|
|
186
|
+
commands,digest,inject,verdict,<clone>}` → `/opt/qcr/<name>`. The worktree
|
|
187
|
+
directory and the base clone are mounted a second time at their old path
|
|
188
|
+
(`/opt/quickreview/sandbox/…`), so the absolute paths git and pi recorded before
|
|
189
|
+
the cutover still resolve. `commands/operator` stays root-owned on the host and
|
|
190
|
+
is re-sealed on every run.
|
|
191
|
+
|
|
192
|
+
The TUI finds the container's app root by itself: it reads the running
|
|
193
|
+
container's `qcr.layout` label (`release` = `/opt/qcr`, no label = the legacy
|
|
194
|
+
`/opt/quickreview/sandbox`) and reads it again whenever the container id changes,
|
|
195
|
+
so the cutover needs no TUI key edited (`src/tui/layout.ts`). An explicit
|
|
196
|
+
`[tui] remote_sandbox_root` still wins; `deploy.sh` warns, and does not refuse,
|
|
197
|
+
when one names another root. `remote_state_dir` stays the host path.
|
|
198
|
+
|
|
199
|
+
### Pulling the release
|
|
200
|
+
|
|
201
|
+
The images are private and are pulled BY the updater, on the VM, by digest. The VM pulls them with ONE credential: your own CLASSIC
|
|
202
|
+
personal access token, scoped `read:packages` and nothing else, stored by
|
|
203
|
+
`docker login` in root's docker config on the VM host (never in a container,
|
|
204
|
+
env, argv or the secrets directory: the daemon holds only the App credential). Not the token `gh auth
|
|
205
|
+
token` prints: that one carries the full scopes of your gh login.
|
|
206
|
+
|
|
207
|
+
A deploy needs this login to exist before the first `release` (the pull is the
|
|
208
|
+
updater's first step, and a lapsed login fails there with nothing changed).
|
|
209
|
+
|
|
210
|
+
Once per VM, and again when the token is renewed (it expires after one year):
|
|
211
|
+
|
|
212
|
+
1. On github.com, Settings, Developer settings, Personal access tokens, Tokens
|
|
213
|
+
(classic): a new token, expiration one year, the single scope
|
|
214
|
+
`read:packages`.
|
|
215
|
+
2. Once a version is published, on the controller:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
scripts/vm-ghcr-login.sh --version <published X.Y.Z> # paste the token, then Ctrl-D
|
|
219
|
+
scripts/vm-ghcr-login.sh --version <X.Y.Z> --token-file <0600 file>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
The script refuses a token unless GitHub reports its scopes as exactly
|
|
223
|
+
`read:packages` and it has an expiry, runs `ssh <vm> sudo docker login ghcr.io
|
|
224
|
+
-u <you> --password-stdin`, checks the login with `docker manifest inspect` of
|
|
225
|
+
both images at that version, and records the expiry on the controller. It is
|
|
226
|
+
idempotent, and the token is never an argument or an environment variable.
|
|
227
|
+
|
|
228
|
+
A lapsed login fails the updater's pull before anything on the VM changes
|
|
229
|
+
(`qcr-update` refuses at its `pull` step). `scripts/deploy.sh verify` and
|
|
230
|
+
`release` warn 14 days before the recorded expiry. `ssh <vm> sudo docker logout ghcr.io` removes the login.
|
|
231
|
+
|
|
232
|
+
### The cutover (legacy image to release image)
|
|
233
|
+
|
|
234
|
+
The first `release` against a VM still running the legacy image
|
|
235
|
+
(`quickreview-sandbox:v1`, the Ubuntu image the retired `Dockerfile.j2` built)
|
|
236
|
+
swaps the image and the container shape in one restart, and the first boot
|
|
237
|
+
migrates forward. It needs the deliberate `--cutover-ack`, which `deploy.sh`
|
|
238
|
+
hands the updater as `--cutover-ack <version>`; without it both refuse, with
|
|
239
|
+
nothing changed. **Until the cutover the legacy VM takes no deploy**: if something urgent comes
|
|
240
|
+
up, drain and wait for the cutover window. Run `provision` first (it installs
|
|
241
|
+
the updater beside the legacy container and touches no image), then:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
qcr drain on # wait for running_rounds 0
|
|
245
|
+
scripts/deploy.sh --dry-run release 0.1.0 --manifest deploy-manifest-0.1.0.json --cutover-ack
|
|
246
|
+
scripts/deploy.sh release 0.1.0 --manifest deploy-manifest-0.1.0.json --cutover-ack
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Use `scripts/cutover.sh`, which runs these steps in order. At the cutover the
|
|
250
|
+
drain does NOT auto-lift: the release's first boot keeps the operator's drain as
|
|
251
|
+
the no-auto-lift hold (`drain_hold_carried`, then `drain_hold_kept` at its first
|
|
252
|
+
healthy reconcile; `draining_hold: true` in status.json), so no round starts
|
|
253
|
+
until the owner has triggered and checked one worker round and runs `qcr drain
|
|
254
|
+
off`. (A plain drain on a release-layout VM is still lifted by the new boot's
|
|
255
|
+
first healthy reconcile; `qcr drain on --hold` sets the hold by hand.) After
|
|
256
|
+
the deploy, `deploy.sh verify` shows the image and its build stamp, that pi's
|
|
257
|
+
`settings.json` carries no global bash-guard entry, and that `AGENTS.override.md` in the app root
|
|
258
|
+
is the 12-line reviewer stub.
|
|
259
|
+
|
|
260
|
+
### Rollback
|
|
261
|
+
|
|
262
|
+
There is no rollback across a migration. The first boot of a release migrates
|
|
263
|
+
`state.db` forward, and an older image run over the newer schema is not a
|
|
264
|
+
supported state. Going back is therefore a **forward fix**: cut a new release
|
|
265
|
+
(a patch version) that contains the fix or the revert, and `deploy.sh release`
|
|
266
|
+
it. Nothing is hand-edited on the VM.
|
|
267
|
+
|
|
268
|
+
What the updater does for you:
|
|
269
|
+
|
|
270
|
+
- **Before the recreate** (config check, stop, snapshot, preflight, sidecar
|
|
271
|
+
seed, config swap, sidecar `/ready`): any failure is a **rescue**. The
|
|
272
|
+
updater restores `config-home.prev`, puts the old containers back (they were
|
|
273
|
+
renamed to `<name>-prev`), waits for the old daemon's first reconcile,
|
|
274
|
+
re-sends `drain on` and exits non-zero naming the step. Nothing was migrated,
|
|
275
|
+
so the bot is exactly as it was, drained. Fix the cause and run the same
|
|
276
|
+
release again once `running_rounds` is 0.
|
|
277
|
+
- **After the recreate** the new boot has migrated state: no rescue. The drain
|
|
278
|
+
stays on until a first reconcile passes healthily; fix forward with a new
|
|
279
|
+
release.
|
|
280
|
+
- **The snapshot** of every run is `/var/backups/qcr/<version>-<ts>/` on the VM
|
|
281
|
+
(root, `0600`): `state.db` with its `-wal`/`-shm`, and a tar of
|
|
282
|
+
`state/pi-sessions`. It is the evidence and the manual restore point, not an
|
|
283
|
+
automatic one; pihome is never in it. Keep it until the release has proven
|
|
284
|
+
itself.
|
|
285
|
+
- **Left in place, never deleted by a deploy**: the legacy image
|
|
286
|
+
`quickreview-sandbox:v1` (nothing here removes an image), the previous
|
|
287
|
+
containers, and every host directory the container uses (state, pihome, the
|
|
288
|
+
sandbox tree, the memory sidecar's store).
|
|
289
|
+
Once the release has proven itself, the owner removes the leftovers with
|
|
290
|
+
`scripts/vm-postcutover-cleanup.sh` (run on the VM as root; a dry run first,
|
|
291
|
+
then `--apply <plan key>`): the legacy and VM-built images, the old rsynced
|
|
292
|
+
checkout by an allowlist that never touches a directory the containers mount,
|
|
293
|
+
and all but the newest three snapshots. It keeps `state/openviking` and the
|
|
294
|
+
`memory-state.rescued-*` stores, which are the owner's separate decision.
|
|
295
|
+
|
|
296
|
+
Redeploying a **previous** version is allowed only when no migration lies
|
|
297
|
+
between it and the running one; `qcr-update status --json` and the release
|
|
298
|
+
notes say whether one does. When in doubt, the answer is a forward fix.
|
|
299
|
+
|
|
300
|
+
## Verify
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
scripts/deploy.sh verify # all of the below, plus the image stamp, settings.json and the stub
|
|
304
|
+
ssh <vm> systemctl is-active cloudflared docker
|
|
305
|
+
ssh <vm> docker ps --filter name=quickreview-sandbox
|
|
306
|
+
ssh <vm> docker exec quickreview-sandbox tmux ls
|
|
307
|
+
ssh <vm> curl -sS http://127.0.0.1:8787/health # loopback-only by design
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
That is the same layering `qcr onboard`'s verification step runs — containers,
|
|
311
|
+
then the health endpoint, then GitHub's own webhook delivery log — and the
|
|
312
|
+
order matters: a container that is not up cannot answer a health probe, and a
|
|
313
|
+
daemon that is not answering cannot accept a delivery. While the tunnel is up
|
|
314
|
+
but the daemon is not, a GitHub test delivery returns a 502 *from cloudflared*
|
|
315
|
+
rather than timing out; that distinction is itself the proof the tunnel path
|
|
316
|
+
works.
|
|
317
|
+
|
|
318
|
+
## OpenAI auth for pi
|
|
319
|
+
|
|
320
|
+
Native in pi — nothing to install. Both routes and their
|
|
321
|
+
cost shapes are in [../../docs/llm-setup.md](../../docs/llm-setup.md); here is
|
|
322
|
+
what this route does with each:
|
|
323
|
+
|
|
324
|
+
- **API key (wired automatically)**: the daemon mode of the image's entrypoint
|
|
325
|
+
exports `OPENAI_API_KEY` from the mounted `secrets/openai_api_key`, so the tmux
|
|
326
|
+
server and every pi session inherit it. Works headless from the first boot.
|
|
327
|
+
- **ChatGPT-subscription OAuth (optional)**: run `/login` once inside any pi
|
|
328
|
+
session in the container (`docker exec -it quickreview-sandbox pi` →
|
|
329
|
+
`/login`); tokens land in `/home/qcr/.pi/agent/auth.json`, which lives on
|
|
330
|
+
the persistent `pihome` volume, auto-refresh, and **take precedence** over
|
|
331
|
+
the env-var key (pi's resolution order: CLI flag → auth.json → env var).
|
|
332
|
+
Both routes can coexist. A login here does **not** cover a companion
|
|
333
|
+
container on your own machine, or a pi you run on the host: pi's tokens do
|
|
334
|
+
not transfer, so each pi home needs its own.
|
|
335
|
+
|
|
336
|
+
The `pihome` volume also persists pi's session JSONLs across container
|
|
337
|
+
recreates — required for the sticky per-PR conversations, not just for auth.
|
|
338
|
+
|
|
339
|
+
## Notes
|
|
340
|
+
|
|
341
|
+
- Re-runs are safe: package installs are idempotent, the cloudflared service
|
|
342
|
+
task is guarded by `creates:`, secrets copies only rewrite on change. A
|
|
343
|
+
release recreates the containers (the updater's job, not this playbook's).
|
|
344
|
+
- The webhook port is published on loopback only; ingress is whatever HTTPS
|
|
345
|
+
proxy/tunnel you point at it (the optional cloudflared service, or your
|
|
346
|
+
own). No inbound firewall rule is ever needed.
|
|
347
|
+
- Image pins: pi and node are pinned in `group_vars/all.yml` (and are the
|
|
348
|
+
Dockerfile's ARG defaults, which tests hold equal); the images carry them as
|
|
349
|
+
labels (`qcr.pi`, `qcr.openviking`, ...) and the release manifest copies them.
|
|
350
|
+
Bumping them is a deliberate edit and a new release, never automatic.
|
|
351
|
+
- Jump-in from your own machine: a bot round runs in a worker with no tmux
|
|
352
|
+
session, so there is nothing to attach to. The operator TUI (`scripts/qcr
|
|
353
|
+
tui`, with `[tui] target = "ssh"`) shows each PR's live transcript;
|
|
354
|
+
`scripts/qcr open pr <n>` opens the PR's session in pi, forked; and
|
|
355
|
+
`scripts/qcr takeover <n>` / `debug-round <n>` put the PR in an interactive
|
|
356
|
+
pi (`takeover-pr-<n>` / `debug-pr-<n>`) that the TUI embeds in its pane.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Review-sandbox provisioning knobs. Target: an EXISTING, possibly shared VM
|
|
3
|
+
# (e.g. `my-vm`, an e2-standard-4 in your cloud project) — name it in
|
|
4
|
+
# inventory.ini (copy inventory.example.ini). The container is capped; the VM
|
|
5
|
+
# is assumed not ours to resize.
|
|
6
|
+
|
|
7
|
+
sandbox_root: /opt/quickreview # on the VM
|
|
8
|
+
webhook_port: 8787
|
|
9
|
+
|
|
10
|
+
# The daemon container's name (scripts/deploy.sh holds it to the name the
|
|
11
|
+
# updater and the verify checks use).
|
|
12
|
+
image_name: quickreview-sandbox
|
|
13
|
+
# The LEGACY image (Ubuntu + the rendered Dockerfile.j2, retired by the release
|
|
14
|
+
# image cutover). Nothing here builds or runs it any more; it stays on the VM
|
|
15
|
+
# under this tag as the rollback image (README, "Rollback to the legacy image").
|
|
16
|
+
image_tag: v1
|
|
17
|
+
|
|
18
|
+
# The images the updater (deploy/qcr-update.sh) pulls BY DIGEST: CI builds them
|
|
19
|
+
# once from the release tag and pushes them to these repositories, and
|
|
20
|
+
# `scripts/deploy.sh release <version>` reads the digests from the release's
|
|
21
|
+
# deploy manifest. Nothing is built on the VM. Never `latest`: no such tag exists.
|
|
22
|
+
release_image: ghcr.io/quickchatai/quickreview
|
|
23
|
+
release_memory_image: ghcr.io/quickchatai/quickreview-memory
|
|
24
|
+
# The release image's app root: root-owned, read-only to the container user,
|
|
25
|
+
# with the runtime directories bind-mounted into it from sandbox_root.
|
|
26
|
+
app_root: /opt/qcr
|
|
27
|
+
# Where the legacy container mounted the sandbox root. The playbook mounts the
|
|
28
|
+
# worktree directory and the base clone there too, so absolute paths recorded
|
|
29
|
+
# before the cutover (git worktree metadata, pi session headers) still resolve.
|
|
30
|
+
legacy_sandbox_root: /opt/quickreview/sandbox
|
|
31
|
+
|
|
32
|
+
node_major: "26"
|
|
33
|
+
# pi CLI npm package + exact version pin (registry-verified). The image never
|
|
34
|
+
# floats — bumping is a deliberate edit and a new release (CI builds the image).
|
|
35
|
+
pi_npm_package: "@earendil-works/pi-coding-agent"
|
|
36
|
+
pi_version: "1.4.0"
|
|
37
|
+
|
|
38
|
+
# No subagent-extension pin: lenses run through our own lens tool
|
|
39
|
+
# (packages/pi-plugin/src/engine/lens/), so there is nothing to pin. Never add a third-party
|
|
40
|
+
# subagent clone step here (it would bring in an unlicensed dependency).
|
|
41
|
+
|
|
42
|
+
# No memory-engine npm pin: memory is OpenViking (below) and its pi extension
|
|
43
|
+
# is vendored in the repo, not installed from npm. An npm memory package here
|
|
44
|
+
# would put a second memory engine in the image.
|
|
45
|
+
|
|
46
|
+
# OpenViking (github.com/volcengine/OpenViking) — the context store, run by the
|
|
47
|
+
# memory sidecar container (docker/memory/) beside the daemon's. Its server
|
|
48
|
+
# binds the container network; the local embedder it supervises stays on
|
|
49
|
+
# loopback 1934.
|
|
50
|
+
# Same pin discipline as pi_version: exact versions, never floating,
|
|
51
|
+
# bumping is a deliberate edit and a new release.
|
|
52
|
+
#
|
|
53
|
+
# TRIPLE MIRROR: openviking_version / llama_cpp_python_version here ==
|
|
54
|
+
# config.toml [openviking] version / llama_cpp_python_version == the memory
|
|
55
|
+
# image's ARG defaults (docker/memory/Dockerfile, tests/memory-image.test.ts)
|
|
56
|
+
# == the labels CI stamps on the memory image (qcr.openviking, ...), which the
|
|
57
|
+
# release's deploy manifest carries as `pins`.
|
|
58
|
+
# tests/openviking.test.ts fails on drift.
|
|
59
|
+
#
|
|
60
|
+
# llama-cpp-python is NOT an openviking dependency — it is an undeclared
|
|
61
|
+
# optional extra, and without it the default local dense embedder raises
|
|
62
|
+
# EmbeddingConfigurationError at startup, so the server cannot boot at all
|
|
63
|
+
# (verified against a running 0.4.15). It is also the runtime of the local
|
|
64
|
+
# English embedder (below). PyPI-verified pins: openviking 0.4.15
|
|
65
|
+
# (requires-python >=3.10; 24.04 ships 3.12), llama-cpp-python 0.3.35.
|
|
66
|
+
openviking_version: "0.4.15"
|
|
67
|
+
llama_cpp_python_version: "0.3.35"
|
|
68
|
+
openviking_venv: /opt/openviking/venv # a mirror of the memory image's baked OPENVIKING_VENV, not forwarded to the sidecar: changing it here changes nothing at runtime
|
|
69
|
+
openviking_port: 1933 # never a published port: loopback in the container that runs it
|
|
70
|
+
# WHO RUNS THE SERVER. "remote" (the VM's value) is the memory SIDECAR: a
|
|
71
|
+
# second container beside the daemon's (docker/memory/, the `memory_*` knobs
|
|
72
|
+
# below) runs OpenViking and its local embedder, owns the boot provisioning and
|
|
73
|
+
# the embedder re-embed, and holds its own copy of the store. The daemon then
|
|
74
|
+
# only probes it. "local" is the pre-sidecar layout — OpenViking a child of the
|
|
75
|
+
# daemon's container — which the release image cannot run (it carries no
|
|
76
|
+
# OpenViking), so the playbook and scripts/deploy.sh refuse it: the way back to
|
|
77
|
+
# it is the legacy image and the old playbook (README, "Rollback").
|
|
78
|
+
# MIRRORS config.toml [openviking] endpoint.
|
|
79
|
+
openviking_endpoint: "remote"
|
|
80
|
+
# ~/.openviking is symlinked here at boot, so memory lives on the state volume
|
|
81
|
+
# and survives an image rebuild. Must equal config.toml [openviking] home.
|
|
82
|
+
openviking_home: /opt/quickreview/state/openviking
|
|
83
|
+
openviking_workers: 1 # ov.conf server.workers (2-CPU cap)
|
|
84
|
+
openviking_queue_concurrency: 2 # ov.conf queue_workers.* (defaults 4/4/8) + embedding.max_concurrent (10)
|
|
85
|
+
# The embedder. LOCAL is the shipped default: a small
|
|
86
|
+
# ENGLISH embedding model served on loopback INSIDE the container by
|
|
87
|
+
# scripts/openviking-embedder.py (over the pinned llama_cpp_python above), so
|
|
88
|
+
# no memory text ever leaves the machine — nothing but the model call does.
|
|
89
|
+
# Under "local" the sidecar's entrypoint renders ov.conf's OpenAI-COMPATIBLE provider
|
|
90
|
+
# with api_base http://127.0.0.1:{{ openviking_local_embedder_port }}/v1 and no
|
|
91
|
+
# key — the engine's async client, so a search does not block the server.
|
|
92
|
+
# A HOSTED embedder is an explicit opt-in, written as INVENTORY HOST VARS on the
|
|
93
|
+
# host line (host vars outrank this file, and this file stays tracked and
|
|
94
|
+
# clean):
|
|
95
|
+
# openviking_embedding_provider=openai openviking_embedding_model=text-embedding-3-small openviking_embedding_dimension=1536
|
|
96
|
+
# plus the credential in <secrets_src>/<openviking_embedding_key_file> — a
|
|
97
|
+
# SEPARATE file from pi's openai_api_key, so either can be set without the
|
|
98
|
+
# other. The sidecar's entrypoint (docker/memory/entrypoint.sh) renders these into ov.conf `embedding.dense`; ov.conf
|
|
99
|
+
# carries NO `vlm` section either way (extraction, summaries and digest are
|
|
100
|
+
# off — memories are authored, never extracted).
|
|
101
|
+
# MIRRORS config.toml [openviking] embedding_provider / embedding_model /
|
|
102
|
+
# embedding_dimension / embedding_key_file; scripts/deploy.sh's preflight
|
|
103
|
+
# refuses on drift between config.toml and the EFFECTIVE ansible value (host
|
|
104
|
+
# var, else this file) — a config.toml that says "openai" over a boot that
|
|
105
|
+
# renders "local" would reset the vector store on the next start.
|
|
106
|
+
# Under "local" the model/dimension are the local embedder's (the pin below);
|
|
107
|
+
# the render uses the pin's own values and warns if these disagree.
|
|
108
|
+
openviking_embedding_provider: "local"
|
|
109
|
+
openviking_embedding_model: "bge-small-en-v1.5-f16"
|
|
110
|
+
openviking_embedding_dimension: 384
|
|
111
|
+
openviking_embedding_key_file: "openai_embeddings_api_key"
|
|
112
|
+
# The LOCAL EMBEDDER's model file — a rule-7 pin like
|
|
113
|
+
# openviking_version. TRIPLE MIRROR: these == config.toml [openviking]
|
|
114
|
+
# local_embedder_file (== dir/model.gguf) / local_embedder_url /
|
|
115
|
+
# local_embedder_sha256 == the memory image's model layer, which downloads the
|
|
116
|
+
# GGUF at BUILD time and refuses it unless the sha256 matches (the service
|
|
117
|
+
# re-checks it at every start). The image carries it whatever the provider, so
|
|
118
|
+
# a hosted opt-in can return to local without a rebuild; changing the pin needs
|
|
119
|
+
# a new release. tests/openviking.test.ts and the deploy
|
|
120
|
+
# preflight refuse on drift. The dimension is the model's own (the service's
|
|
121
|
+
# model table in scripts/openviking-embedder.py), mirrored here for the render.
|
|
122
|
+
openviking_local_embedder_model: "bge-small-en-v1.5-f16"
|
|
123
|
+
openviking_local_embedder_dimension: 384
|
|
124
|
+
openviking_local_embedder_dir: /opt/openviking/models
|
|
125
|
+
openviking_local_embedder_url: "https://huggingface.co/CompendiumLabs/bge-small-en-v1.5-gguf/resolve/d32f8c040ea3b516330eeb75b72bcc2d3a780ab7/bge-small-en-v1.5-f16.gguf"
|
|
126
|
+
openviking_local_embedder_sha256: "f0b2fef971e8366438bfd2d9aefea1b0115919389448806d290237f638bae999"
|
|
127
|
+
# The service: 127.0.0.1 only — NEVER a published port. One llama.cpp thread
|
|
128
|
+
# is the latency budget the model was chosen on. MIRRORS config.toml
|
|
129
|
+
# [openviking] local_embedder_port / local_embedder_threads (the daemon
|
|
130
|
+
# supervises the long-lived service from those; the boot's provisioning step
|
|
131
|
+
# runs it briefly from these).
|
|
132
|
+
openviking_local_embedder_port: 1934
|
|
133
|
+
openviking_local_embedder_threads: 1
|
|
134
|
+
# Server-side confinement. `api_key` makes every request carry a USER key the
|
|
135
|
+
# server confines to that user's tree; `dev` bypasses authentication and makes
|
|
136
|
+
# the two-user design nominal, so it is never the deployed value. MIRRORS
|
|
137
|
+
# config.toml [openviking] auth_mode / root_key_file / reviewer_key_file / provision_users;
|
|
138
|
+
# tests/openviking.test.ts and the scripts/deploy.sh preflight refuse on drift.
|
|
139
|
+
openviking_auth_mode: "api_key"
|
|
140
|
+
# Secret FILE NAMES under the container's read-only secrets mount. The ROOT key
|
|
141
|
+
# is the SERVER's own credential — ov.conf carries it (0600) and boot
|
|
142
|
+
# provisioning uses it; no daemon surface, no review session and no companion
|
|
143
|
+
# process ever holds it. The REVIEWER key is the one client credential the
|
|
144
|
+
# container may hold. The COMPANION key is deliberately ABSENT from this
|
|
145
|
+
# machine: a review session that could read it would reach companion memory,
|
|
146
|
+
# which is the whole thing confinement exists to prevent.
|
|
147
|
+
openviking_root_key_file: "openviking_root_key"
|
|
148
|
+
openviking_reviewer_key_file: "openviking_reviewer_key"
|
|
149
|
+
# Users boot provisioning ENSURES exist — created if absent, left alone if
|
|
150
|
+
# present, never rotated (a rotation orphans the distributed keys).
|
|
151
|
+
openviking_provision_users: "reviewer,companion"
|
|
152
|
+
|
|
153
|
+
# The memory sidecar (used under openviking_endpoint: remote). The container
|
|
154
|
+
# name is also its DNS name on the network below, so it MIRRORS config.toml
|
|
155
|
+
# [openviking] host (scripts/deploy.sh refuses drift). The port is
|
|
156
|
+
# openviking_port above, on the container network only — never published.
|
|
157
|
+
memory_container_name: quickreview-memory
|
|
158
|
+
# A user-defined bridge, because Docker resolves container names only there.
|
|
159
|
+
# The daemon's container joins it (and keeps its published webhook port); the
|
|
160
|
+
# network is not internal — the daemon still needs the internet.
|
|
161
|
+
memory_network: quickreview-memory
|
|
162
|
+
# The sidecar's OWN copy of the store, on the VM. Seeded ONCE from the daemon's
|
|
163
|
+
# `openviking_home` while the daemon container is stopped, verified file by
|
|
164
|
+
# file, and never deleted or overwritten afterwards (the .seeded marker). The
|
|
165
|
+
# old directory stays untouched as the rollback's store.
|
|
166
|
+
memory_state_dir: /opt/quickreview/memory-state
|
|
167
|
+
# Hard caps like the daemon's. PROVISIONAL: sized from the daemon container's
|
|
168
|
+
# 2 CPU / 8 GiB, which carried the server and the embedder as children; re-size
|
|
169
|
+
# from `docker stats quickreview-memory` once it has run under load.
|
|
170
|
+
memory_container_cpus: "1"
|
|
171
|
+
memory_container_memory: "3g"
|
|
172
|
+
|
|
173
|
+
timezone: Europe/Warsaw
|
|
174
|
+
container_uid: 1001 # the uid the daemon runs as and the host directories belong to
|
|
175
|
+
# The identity the model's tools run as: never the container
|
|
176
|
+
# uid, so they cannot read secrets/ or pi's login, and a gid of its own, which
|
|
177
|
+
# the container user is given too (--group-add) and which owns only the
|
|
178
|
+
# directories the model's scripts write (state/, verdict/, commands/). A MIRROR
|
|
179
|
+
# of the release image's compiled-in identity (docker/Dockerfile QCR_TOOL_UID /
|
|
180
|
+
# QCR_TOOL_GID, its qcr.tool-uid / qcr.tool-gid labels): the updater refuses a
|
|
181
|
+
# run spec that names another.
|
|
182
|
+
tool_uid: 65534
|
|
183
|
+
tool_gid: 4749
|
|
184
|
+
|
|
185
|
+
# Hard Docker limits — the VM may be shared with other workloads.
|
|
186
|
+
container_cpus: "2"
|
|
187
|
+
container_memory: "8g"
|
|
188
|
+
|
|
189
|
+
# Preflight refusal threshold on the shared box.
|
|
190
|
+
min_free_disk_gb: 15
|
|
191
|
+
|
|
192
|
+
# Ingress. The tunnel is OPTIONAL: any HTTPS proxy or tunnel that
|
|
193
|
+
# forwards your webhook hostname to localhost:{{ webhook_port }} on the VM
|
|
194
|
+
# works. `true` keeps the live deployment's cloudflared service (and then
|
|
195
|
+
# `tunnel_token` must exist under secrets_src); set false (or
|
|
196
|
+
# `-e cloudflared_enabled=false`) to bring your own ingress — no other task
|
|
197
|
+
# depends on the tunnel.
|
|
198
|
+
cloudflared_enabled: true
|
|
199
|
+
|
|
200
|
+
# Controller-side sources
|
|
201
|
+
# scripts/deploy.sh provision passes `-e secrets_src=<dir>` — the install
|
|
202
|
+
# locator's answer: [github] secrets_dir, else the install's config home
|
|
203
|
+
# (~/.config/qcr/<install>/secrets). This default — the default
|
|
204
|
+
# install's home — only serves a playbook run by hand.
|
|
205
|
+
secrets_src: "{{ lookup('env', 'HOME') }}/.config/qcr/default/secrets"
|
|
206
|
+
# Expected files there: app_id, app.pem, webhook_secret; openai_api_key
|
|
207
|
+
# optional (pi's API-key route); tunnel_token only when cloudflared_enabled;
|
|
208
|
+
# openai_embeddings_api_key only under the hosted-embedder opt-in above.
|
|
209
|
+
|
|
210
|
+
# Flat Slack token names copied from the controller secrets directory.
|
|
211
|
+
slack_bot_token_file: slack_bot_token
|
|
212
|
+
slack_app_token_file: slack_app_token
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copy to inventory.ini and fill in — inventory.ini is gitignored:
|
|
2
|
+
# it carries YOUR real hostnames and stays local to the controller machine.
|
|
3
|
+
#
|
|
4
|
+
# `scripts/qcr onboard` writes inventory.ini for you on the server route, from
|
|
5
|
+
# answers you have already given (the ssh alias, the login user your ssh config
|
|
6
|
+
# resolves, and whether the playbook should install cloudflared). This file
|
|
7
|
+
# documents what it writes, and what to fill if you do it by hand.
|
|
8
|
+
#
|
|
9
|
+
# What to fill:
|
|
10
|
+
# [quickreview] host — any ssh-reachable name for the target VM: a plain
|
|
11
|
+
# hostname, an ~/.ssh/config alias, or (on GCP) the
|
|
12
|
+
# alias `gcloud compute config-ssh` writes.
|
|
13
|
+
# ansible_user — the remote login user (omit when your ssh config
|
|
14
|
+
# already sets it, e.g. via config-ssh / OS Login).
|
|
15
|
+
# ansible_python_interpreter — leave as /usr/bin/python3 for Ubuntu/Debian.
|
|
16
|
+
|
|
17
|
+
[quickreview]
|
|
18
|
+
quickreview-sandbox.your-zone.your-dev-project
|
|
19
|
+
|
|
20
|
+
[quickreview:vars]
|
|
21
|
+
ansible_user=your_oslogin_user
|
|
22
|
+
ansible_python_interpreter=/usr/bin/python3
|
|
23
|
+
|
|
24
|
+
# GCP IAP-only alternative (no external IP, without config-ssh):
|
|
25
|
+
# ansible_ssh_common_args=-o ProxyCommand="gcloud compute start-iap-tunnel %h 22 --listen-on-stdin --project=your-dev-project --zone=your-zone"
|