@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,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Review-sandbox PROVISIONING -- one VM, cloudflared on the host, the thin
|
|
3
|
+
# updater installed once. See README.md in this directory. Idempotent; re-run
|
|
4
|
+
# freely. Run it through scripts/deploy.sh provision, which names the extra
|
|
5
|
+
# vars (base_clone_dir, secrets_src, the Slack token names and update_conf_src,
|
|
6
|
+
# the run spec it renders from group_vars).
|
|
7
|
+
#
|
|
8
|
+
# This playbook installs the host, the secrets, the directory layout and the
|
|
9
|
+
# updater (/usr/local/sbin/qcr-update, deploy/qcr-update.sh) with its run spec
|
|
10
|
+
# (/etc/qcr/update.conf). It NEVER pulls or starts an image: every deploy is
|
|
11
|
+
# `scripts/deploy.sh release <version>`, which runs `ssh vm sudo qcr-update ...`
|
|
12
|
+
# (the images are built once by CI and pulled by digest; the containers are the
|
|
13
|
+
# updater's). Nothing is rsynced, built or installed on the VM by a deploy.
|
|
14
|
+
|
|
15
|
+
- name: Preflight — refuse to trample the shared VM
|
|
16
|
+
hosts: quickreview
|
|
17
|
+
become: true
|
|
18
|
+
tasks:
|
|
19
|
+
- name: Is the sandbox already installed here? (re-runs are fine)
|
|
20
|
+
ansible.builtin.stat:
|
|
21
|
+
path: "{{ sandbox_root }}"
|
|
22
|
+
register: sandbox_dir
|
|
23
|
+
|
|
24
|
+
- name: Check whether the webhook port is already bound
|
|
25
|
+
ansible.builtin.command: ss -ltnH sport = :{{ webhook_port }}
|
|
26
|
+
register: port_check
|
|
27
|
+
changed_when: false
|
|
28
|
+
|
|
29
|
+
- name: "Fail: port {{ webhook_port }} is taken by something that is not us"
|
|
30
|
+
ansible.builtin.fail:
|
|
31
|
+
msg: >-
|
|
32
|
+
Port {{ webhook_port }} is already bound on the VM and
|
|
33
|
+
{{ sandbox_root }} does not exist — another service owns it. Pick a
|
|
34
|
+
different webhook_port or free the port before deploying.
|
|
35
|
+
when: not sandbox_dir.stat.exists and port_check.stdout | trim | length > 0
|
|
36
|
+
|
|
37
|
+
- name: Check for a pre-existing cloudflared service
|
|
38
|
+
ansible.builtin.systemd:
|
|
39
|
+
name: cloudflared
|
|
40
|
+
register: cf_service
|
|
41
|
+
failed_when: false
|
|
42
|
+
when: cloudflared_enabled | bool
|
|
43
|
+
|
|
44
|
+
- name: "Fail: a foreign cloudflared already runs here"
|
|
45
|
+
ansible.builtin.fail:
|
|
46
|
+
msg: >-
|
|
47
|
+
cloudflared.service is already active on the VM but the sandbox
|
|
48
|
+
was never installed — it is serving someone else's tunnel. The
|
|
49
|
+
`cloudflared service install` step would clobber it. Wire the
|
|
50
|
+
quickreview hostname into the existing tunnel instead, or run the two
|
|
51
|
+
side by side manually, then re-run with `-e cloudflared_enabled=false`.
|
|
52
|
+
when: >-
|
|
53
|
+
cloudflared_enabled | bool and
|
|
54
|
+
not sandbox_dir.stat.exists and
|
|
55
|
+
cf_service.status is defined and
|
|
56
|
+
(cf_service.status.ActiveState | default('inactive')) == 'active'
|
|
57
|
+
|
|
58
|
+
- name: "Fail: not enough free disk"
|
|
59
|
+
ansible.builtin.fail:
|
|
60
|
+
msg: "Less than {{ min_free_disk_gb }} GB free on / — the shared VM is too full for the image + worktrees."
|
|
61
|
+
vars:
|
|
62
|
+
root_mount: "{{ ansible_mounts | selectattr('mount', 'equalto', '/') | first }}"
|
|
63
|
+
when: (root_mount.size_available | int) < (min_free_disk_gb | int) * 1024 * 1024 * 1024
|
|
64
|
+
|
|
65
|
+
# The cloudflared tasks below are OPTIONAL: `cloudflared_enabled`
|
|
66
|
+
# defaults true in group_vars — the live deployment keeps its tunnel — but any
|
|
67
|
+
# other HTTPS ingress to the published webhook port works just as well. Set
|
|
68
|
+
# `-e cloudflared_enabled=false` and bring your own proxy/tunnel; nothing else
|
|
69
|
+
# in this playbook depends on the tunnel existing.
|
|
70
|
+
- name: Host setup — packages, Docker, cloudflared tunnel (optional)
|
|
71
|
+
hosts: quickreview
|
|
72
|
+
become: true
|
|
73
|
+
vars:
|
|
74
|
+
base_packages: [python3-docker, git, curl, ca-certificates, gnupg, rsync]
|
|
75
|
+
tasks:
|
|
76
|
+
# Refresh the apt cache only when a package is actually missing. The VM
|
|
77
|
+
# is shared and carries third-party repos we do not own; a broken one makes
|
|
78
|
+
# python-apt's cache update fail (with an empty error), and an unconditional
|
|
79
|
+
# update_cache would then fail every rebuild even with every package
|
|
80
|
+
# already installed.
|
|
81
|
+
- name: Installed packages
|
|
82
|
+
ansible.builtin.package_facts:
|
|
83
|
+
|
|
84
|
+
- name: Base packages
|
|
85
|
+
ansible.builtin.apt:
|
|
86
|
+
name: "{{ base_packages }}"
|
|
87
|
+
state: present
|
|
88
|
+
update_cache: true
|
|
89
|
+
when: base_packages | difference(ansible_facts.packages.keys() | list) | length > 0
|
|
90
|
+
|
|
91
|
+
# The VM already runs Docker CE (containerd.io conflicts with
|
|
92
|
+
# docker.io's containerd) — only install a Docker at all when none exists.
|
|
93
|
+
- name: Is Docker already installed?
|
|
94
|
+
ansible.builtin.command: docker --version
|
|
95
|
+
register: docker_present
|
|
96
|
+
changed_when: false
|
|
97
|
+
failed_when: false
|
|
98
|
+
|
|
99
|
+
- name: Install docker.io when Docker is absent
|
|
100
|
+
ansible.builtin.apt:
|
|
101
|
+
name: docker.io
|
|
102
|
+
state: present
|
|
103
|
+
when: docker_present.rc != 0
|
|
104
|
+
|
|
105
|
+
- name: Docker service enabled and running
|
|
106
|
+
ansible.builtin.systemd:
|
|
107
|
+
name: docker
|
|
108
|
+
state: started
|
|
109
|
+
enabled: true
|
|
110
|
+
|
|
111
|
+
- name: Cloudflare package signing key
|
|
112
|
+
ansible.builtin.get_url:
|
|
113
|
+
url: https://pkg.cloudflare.com/cloudflare-main.gpg
|
|
114
|
+
dest: /usr/share/keyrings/cloudflare-main.gpg
|
|
115
|
+
mode: "0644"
|
|
116
|
+
when: cloudflared_enabled | bool
|
|
117
|
+
|
|
118
|
+
- name: Cloudflared apt repository
|
|
119
|
+
ansible.builtin.apt_repository:
|
|
120
|
+
repo: "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared {{ ansible_distribution_release }} main"
|
|
121
|
+
filename: cloudflared
|
|
122
|
+
state: present
|
|
123
|
+
when: cloudflared_enabled | bool
|
|
124
|
+
|
|
125
|
+
- name: Install cloudflared
|
|
126
|
+
ansible.builtin.apt:
|
|
127
|
+
name: cloudflared
|
|
128
|
+
state: present
|
|
129
|
+
# Same rule as the base packages: no cache refresh for a package the
|
|
130
|
+
# host already has.
|
|
131
|
+
update_cache: "{{ 'cloudflared' not in ansible_facts.packages }}"
|
|
132
|
+
when: cloudflared_enabled | bool
|
|
133
|
+
|
|
134
|
+
- name: Register cloudflared as a systemd service (remote-managed tunnel)
|
|
135
|
+
ansible.builtin.command:
|
|
136
|
+
cmd: cloudflared service install {{ lookup('file', secrets_src + '/tunnel_token') | trim }}
|
|
137
|
+
creates: /etc/systemd/system/cloudflared.service
|
|
138
|
+
no_log: true
|
|
139
|
+
when: cloudflared_enabled | bool
|
|
140
|
+
|
|
141
|
+
- name: Cloudflared service running
|
|
142
|
+
ansible.builtin.systemd:
|
|
143
|
+
name: cloudflared
|
|
144
|
+
state: started
|
|
145
|
+
enabled: true
|
|
146
|
+
when: cloudflared_enabled | bool
|
|
147
|
+
|
|
148
|
+
- name: Provision — directory layout, secrets, the updater and its run spec
|
|
149
|
+
hosts: quickreview
|
|
150
|
+
become: true
|
|
151
|
+
tasks:
|
|
152
|
+
- name: Directory layout (container user = uid {{ container_uid }})
|
|
153
|
+
ansible.builtin.file:
|
|
154
|
+
path: "{{ item.path }}"
|
|
155
|
+
state: directory
|
|
156
|
+
mode: "{{ item.mode }}"
|
|
157
|
+
owner: "{{ item.owner | default(container_uid) }}"
|
|
158
|
+
group: "{{ item.group | default(item.owner | default(container_uid)) }}"
|
|
159
|
+
loop:
|
|
160
|
+
- { path: "{{ sandbox_root }}", mode: "0755", owner: "root" }
|
|
161
|
+
- { path: "{{ sandbox_root }}/sandbox", mode: "0755" }
|
|
162
|
+
# Shared with the model's tools through their own gid (tool_gid), as
|
|
163
|
+
# the bot's entrypoint sets it (share_tool_dirs): setgid, so what
|
|
164
|
+
# either side makes stays in that group, and sticky, so the tool uid
|
|
165
|
+
# never renames or removes the daemon's entries (state.db among them).
|
|
166
|
+
- { path: "{{ sandbox_root }}/state", mode: "3775", group: "{{ tool_gid }}" }
|
|
167
|
+
# OpenViking's home: ~/.openviking is symlinked here at boot,
|
|
168
|
+
# so memories + vector db + ov.conf survive an image rebuild. 0700 —
|
|
169
|
+
# ov.conf carries the server's root key (and, under the hosted
|
|
170
|
+
# embeddings opt-in, that credential too).
|
|
171
|
+
- { path: "{{ openviking_home }}", mode: "0700" }
|
|
172
|
+
- { path: "{{ sandbox_root }}/pihome", mode: "0700" }
|
|
173
|
+
- { path: "{{ sandbox_root }}/secrets", mode: "0700" }
|
|
174
|
+
# The install's config home as the updater ships it (config.toml +
|
|
175
|
+
# profiles/ from the tar on its stdin), mounted read-only. Created
|
|
176
|
+
# here so the first bind mount has a source.
|
|
177
|
+
- { path: "{{ sandbox_root }}/config-home", mode: "0755" }
|
|
178
|
+
|
|
179
|
+
- name: Secrets into place (readable only by the container user)
|
|
180
|
+
ansible.builtin.copy:
|
|
181
|
+
src: "{{ secrets_src }}/{{ item }}"
|
|
182
|
+
dest: "{{ sandbox_root }}/secrets/{{ item }}"
|
|
183
|
+
mode: "0400"
|
|
184
|
+
owner: "{{ container_uid }}"
|
|
185
|
+
group: "{{ container_uid }}"
|
|
186
|
+
loop: [app_id, app.pem, webhook_secret]
|
|
187
|
+
no_log: true
|
|
188
|
+
|
|
189
|
+
# Optional — the deployment uses the ChatGPT-OAuth route: pi auths via
|
|
190
|
+
# `/login` inside the container; the key file ships only if present.
|
|
191
|
+
- name: OpenAI API key (optional under the OAuth route)
|
|
192
|
+
ansible.builtin.copy:
|
|
193
|
+
src: "{{ secrets_src }}/openai_api_key"
|
|
194
|
+
dest: "{{ sandbox_root }}/secrets/openai_api_key"
|
|
195
|
+
mode: "0400"
|
|
196
|
+
owner: "{{ container_uid }}"
|
|
197
|
+
group: "{{ container_uid }}"
|
|
198
|
+
no_log: true
|
|
199
|
+
when: lookup('ansible.builtin.fileglob', secrets_src + '/openai_api_key') | length > 0
|
|
200
|
+
|
|
201
|
+
# The HOSTED embeddings credential — a separate file from pi's
|
|
202
|
+
# key, present only when the operator opted into a hosted embedder
|
|
203
|
+
# (openviking_embedding_provider != local). Copied-if-present; absent by
|
|
204
|
+
# default, because the shipped embedder is local and needs no key.
|
|
205
|
+
- name: Hosted embeddings key (optional — only under the hosted-embedder opt-in)
|
|
206
|
+
ansible.builtin.copy:
|
|
207
|
+
src: "{{ secrets_src }}/{{ openviking_embedding_key_file }}"
|
|
208
|
+
dest: "{{ sandbox_root }}/secrets/{{ openviking_embedding_key_file }}"
|
|
209
|
+
mode: "0400"
|
|
210
|
+
owner: "{{ container_uid }}"
|
|
211
|
+
group: "{{ container_uid }}"
|
|
212
|
+
no_log: true
|
|
213
|
+
when: lookup('ansible.builtin.fileglob', secrets_src + '/' + openviking_embedding_key_file) | length > 0
|
|
214
|
+
|
|
215
|
+
# The OpenViking auth keys. Copied-if-present, matching the
|
|
216
|
+
# openai_api_key idiom — a missing root key degrades the boot LOUDLY to
|
|
217
|
+
# auth_mode=dev (the entrypoint warns), it never blocks the deploy. The
|
|
218
|
+
# companion key must NEVER be in this list (rule 8: it never touches the VM).
|
|
219
|
+
- name: OpenViking auth keys (root + reviewer; confinement is dev-mode without them)
|
|
220
|
+
ansible.builtin.copy:
|
|
221
|
+
src: "{{ secrets_src }}/{{ item }}"
|
|
222
|
+
dest: "{{ sandbox_root }}/secrets/{{ item }}"
|
|
223
|
+
mode: "0400"
|
|
224
|
+
owner: "{{ container_uid }}"
|
|
225
|
+
group: "{{ container_uid }}"
|
|
226
|
+
loop: ["{{ openviking_root_key_file }}", "{{ openviking_reviewer_key_file }}"]
|
|
227
|
+
no_log: true
|
|
228
|
+
when: lookup('ansible.builtin.fileglob', secrets_src + '/' + item) | length > 0
|
|
229
|
+
|
|
230
|
+
# The Slack concierge's tokens, under the configured [slack] token file
|
|
231
|
+
# names. Copied-if-present: Slack is
|
|
232
|
+
# optional and off by default, but with `[slack] enabled = true` a missing
|
|
233
|
+
# token is a hard startup error (validateSlackConfig), so whatever the
|
|
234
|
+
# Slack wizard saved in the secrets dir must reach the container.
|
|
235
|
+
- name: Slack tokens (optional — present once the Slack wizard has run)
|
|
236
|
+
ansible.builtin.copy:
|
|
237
|
+
src: "{{ secrets_src }}/{{ item }}"
|
|
238
|
+
dest: "{{ sandbox_root }}/secrets/{{ item }}"
|
|
239
|
+
mode: "0400"
|
|
240
|
+
owner: "{{ container_uid }}"
|
|
241
|
+
group: "{{ container_uid }}"
|
|
242
|
+
loop: ["{{ slack_bot_token_file }}", "{{ slack_app_token_file }}"]
|
|
243
|
+
no_log: true
|
|
244
|
+
when: lookup('ansible.builtin.fileglob', secrets_src + '/' + item) | length > 0
|
|
245
|
+
|
|
246
|
+
# ---- the thin updater ------------------------------------------------------
|
|
247
|
+
# Installed ONCE, here. After this, a deploy is
|
|
248
|
+
# `ssh vm sudo qcr-update <version>@<digest> ...` and nothing else runs on
|
|
249
|
+
# the VM. The script is deploy/qcr-update.sh from the checkout this
|
|
250
|
+
# playbook came from; the run spec is rendered by scripts/deploy.sh from
|
|
251
|
+
# group_vars (and the inventory's host vars over them) so the controller
|
|
252
|
+
# can recompute its fingerprint and refuse a drift with "re-run provision".
|
|
253
|
+
- name: The updater's directories (root only)
|
|
254
|
+
ansible.builtin.file:
|
|
255
|
+
path: "{{ item.path }}"
|
|
256
|
+
state: directory
|
|
257
|
+
mode: "{{ item.mode }}"
|
|
258
|
+
owner: root
|
|
259
|
+
group: root
|
|
260
|
+
loop:
|
|
261
|
+
- { path: /etc/qcr, mode: "0755" }
|
|
262
|
+
- { path: /var/backups/qcr, mode: "0700" }
|
|
263
|
+
- { path: /var/lib/qcr-update, mode: "0700" }
|
|
264
|
+
|
|
265
|
+
- name: The updater (/usr/local/sbin/qcr-update, root 0755)
|
|
266
|
+
ansible.builtin.copy:
|
|
267
|
+
src: "{{ playbook_dir }}/../qcr-update.sh"
|
|
268
|
+
dest: /usr/local/sbin/qcr-update
|
|
269
|
+
mode: "0755"
|
|
270
|
+
owner: root
|
|
271
|
+
group: root
|
|
272
|
+
|
|
273
|
+
- name: The updater's run spec (/etc/qcr/update.conf, root-owned)
|
|
274
|
+
ansible.builtin.copy:
|
|
275
|
+
src: "{{ update_conf_src | mandatory }}"
|
|
276
|
+
dest: /etc/qcr/update.conf
|
|
277
|
+
mode: "0644"
|
|
278
|
+
owner: root
|
|
279
|
+
group: root
|
|
280
|
+
|
|
281
|
+
# Re-seal an existing channel without granting authority to session-owned
|
|
282
|
+
# files, creating the daemon's commands/ parent, or following a symlink.
|
|
283
|
+
- name: Operator command channel present?
|
|
284
|
+
ansible.builtin.stat:
|
|
285
|
+
path: "{{ sandbox_root }}/sandbox/commands/operator"
|
|
286
|
+
register: operator_channel
|
|
287
|
+
|
|
288
|
+
- name: Operator command channel stays root-owned 0755 (the seal)
|
|
289
|
+
ansible.builtin.file:
|
|
290
|
+
path: "{{ sandbox_root }}/sandbox/commands/operator"
|
|
291
|
+
state: directory
|
|
292
|
+
owner: "0"
|
|
293
|
+
group: "0"
|
|
294
|
+
mode: "0755"
|
|
295
|
+
when: operator_channel.stat.exists and operator_channel.stat.isdir and not operator_channel.stat.islnk
|
|
296
|
+
|
|
297
|
+
# Docker would create a missing bind-mount source as root, which the
|
|
298
|
+
# container user could not write. The host directories are the SAME ones the
|
|
299
|
+
# legacy container mounted whole as /opt/quickreview/sandbox; the release image's
|
|
300
|
+
# app root is read-only, so each runtime directory is mounted on its own (by
|
|
301
|
+
# the updater). commands/ is created for the container user only; the
|
|
302
|
+
# operator channel below it is never created here (see the seal).
|
|
303
|
+
- name: Runtime directories the containers mount (container user = uid {{ container_uid }})
|
|
304
|
+
ansible.builtin.file:
|
|
305
|
+
path: "{{ sandbox_root }}/sandbox/{{ item }}"
|
|
306
|
+
state: directory
|
|
307
|
+
mode: "0755"
|
|
308
|
+
owner: "{{ container_uid }}"
|
|
309
|
+
group: "{{ container_uid }}"
|
|
310
|
+
loop:
|
|
311
|
+
- wt
|
|
312
|
+
- archive
|
|
313
|
+
- digest
|
|
314
|
+
- inject
|
|
315
|
+
# the PR sessions' own HOME (<app root>/pihome)
|
|
316
|
+
- pihome
|
|
317
|
+
- "{{ base_clone_dir | mandatory }}"
|
|
318
|
+
|
|
319
|
+
# What the model's tools write (their scripts' verdicts and session
|
|
320
|
+
# commands), shared through the tool gid exactly as the bot's entrypoint
|
|
321
|
+
# sets it, so a provision never takes it back from a running bot: setgid on
|
|
322
|
+
# both; commands/ also sticky (the root-owned operator channel inside it
|
|
323
|
+
# cannot be renamed away); verdict/ not, since commit-verdict.sh, run as the
|
|
324
|
+
# tool uid, publishes by renaming what the session's write tool staged.
|
|
325
|
+
- name: Directories shared with the model's tools (tool gid {{ tool_gid }})
|
|
326
|
+
ansible.builtin.file:
|
|
327
|
+
path: "{{ sandbox_root }}/sandbox/{{ item.path }}"
|
|
328
|
+
state: directory
|
|
329
|
+
mode: "{{ item.mode }}"
|
|
330
|
+
owner: "{{ container_uid }}"
|
|
331
|
+
group: "{{ tool_gid }}"
|
|
332
|
+
loop:
|
|
333
|
+
- { path: commands, mode: "3775" }
|
|
334
|
+
- { path: verdict, mode: "2775" }
|
|
335
|
+
|
|
336
|
+
# The memory sidecar's store directories. The sidecar CONTAINER and its
|
|
337
|
+
# network are the updater's; its store is seeded from the daemon's once, by
|
|
338
|
+
# the updater, on the legacy layout.
|
|
339
|
+
- name: Directories for the sidecar's store (container user = uid {{ container_uid }})
|
|
340
|
+
ansible.builtin.file:
|
|
341
|
+
path: "{{ item }}"
|
|
342
|
+
state: directory
|
|
343
|
+
mode: "0700"
|
|
344
|
+
owner: "{{ container_uid }}"
|
|
345
|
+
group: "{{ container_uid }}"
|
|
346
|
+
loop:
|
|
347
|
+
- "{{ openviking_home }}"
|
|
348
|
+
- "{{ memory_state_dir }}"
|
|
349
|
+
|
|
350
|
+
- name: Note — what happens next
|
|
351
|
+
ansible.builtin.debug:
|
|
352
|
+
msg: >-
|
|
353
|
+
Provisioned. No image was pulled or started. Deploy with
|
|
354
|
+
`scripts/deploy.sh release <version>`. The webhook port is published on
|
|
355
|
+
127.0.0.1:{{ webhook_port }} only by the daemon container the updater
|
|
356
|
+
creates.
|
|
357
|
+
{% if cloudflared_enabled | bool %}cloudflared forwards the public
|
|
358
|
+
hostname -> localhost:{{ webhook_port }} -> container.{% else %}
|
|
359
|
+
cloudflared is disabled (cloudflared_enabled=false) — point your own
|
|
360
|
+
HTTPS proxy or tunnel at localhost:{{ webhook_port }}.{% endif %}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Interactive wizard: collect the quickreview secrets into the install's secrets
|
|
3
|
+
# dir — $QC_SECRETS_DIR, else the install locator's answer: the live config's
|
|
4
|
+
# [github] secrets_dir when set, else <config home>/secrets
|
|
5
|
+
# (~/.config/qcr/<install>/secrets) — the dir deploy.sh and the daemon read. An old
|
|
6
|
+
# ~/.config/quickreview-bot/ is never read (`qcr install migrate` moves it).
|
|
7
|
+
# Values are read with hidden input and NEVER printed back. Re-run any time —
|
|
8
|
+
# existing files are kept unless you choose to replace them.
|
|
9
|
+
#
|
|
10
|
+
# `scripts/qcr onboard` writes app_id / app.pem / webhook_secret itself, from
|
|
11
|
+
# the GitHub App manifest exchange, and mints the OpenViking keys — so on the
|
|
12
|
+
# guided path you only reach for this script for the values it points you at
|
|
13
|
+
# (the OpenAI key, a tunnel token, an ngrok authtoken, the hosted-embeddings
|
|
14
|
+
# key under that opt-in). It writes the same file
|
|
15
|
+
# names with the same validation and the same 0600 mode; the two paths must
|
|
16
|
+
# stay in step. See docs/onboarding.md.
|
|
17
|
+
#
|
|
18
|
+
# The wizard is deployment-shape-aware: the first choice is HOW the
|
|
19
|
+
# GitHub webhook reaches the daemon, and the required set follows from it.
|
|
20
|
+
# tunnel — a Cloudflare Tunnel on the host fronts the webhook port
|
|
21
|
+
# (tunnel_token REQUIRED)
|
|
22
|
+
# docker — plain Docker; you bring your own ingress/TLS to the webhook port
|
|
23
|
+
# (tunnel_token not needed)
|
|
24
|
+
# The choice persists in <secrets dir>/deploy_shape; QC_DEPLOY_SHAPE=tunnel|docker
|
|
25
|
+
# overrides it non-interactively.
|
|
26
|
+
#
|
|
27
|
+
# bash deploy/collect-secrets.sh # prompt for whatever is missing
|
|
28
|
+
# bash deploy/collect-secrets.sh --force # offer to replace existing files too
|
|
29
|
+
set -euo pipefail
|
|
30
|
+
|
|
31
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
32
|
+
. "$ROOT/scripts/install-locator.sh"
|
|
33
|
+
|
|
34
|
+
# [github] secrets_dir out of the live config, as written — "" when the config
|
|
35
|
+
# or the key is absent, which leaves the choice to the install locator.
|
|
36
|
+
configured_secrets_dir() {
|
|
37
|
+
local config
|
|
38
|
+
config="$(qcr_locate_config "$ROOT" 2>/dev/null)" || return 0
|
|
39
|
+
[[ -r "$config" ]] || return 0
|
|
40
|
+
awk '
|
|
41
|
+
/^\[github\][[:space:]]*(#.*)?$/ { in_t = 1; next }
|
|
42
|
+
/^\[/ { in_t = 0 }
|
|
43
|
+
in_t && /^[[:space:]]*secrets_dir[[:space:]]*=/ {
|
|
44
|
+
line = $0
|
|
45
|
+
sub(/^[^=]*=[[:space:]]*/, "", line)
|
|
46
|
+
sub(/[[:space:]]*(#.*)?$/, "", line)
|
|
47
|
+
gsub(/^["'"'"']|["'"'"']$/, "", line)
|
|
48
|
+
print line
|
|
49
|
+
exit
|
|
50
|
+
}
|
|
51
|
+
' "$config"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if [[ -n "${QC_SECRETS_DIR:-}" ]]; then
|
|
55
|
+
DIR="$(qcr_locate_secrets "" "$QC_SECRETS_DIR")"
|
|
56
|
+
else
|
|
57
|
+
DIR="$(qcr_locate_secrets "$(configured_secrets_dir)")" || exit 1
|
|
58
|
+
fi
|
|
59
|
+
FORCE=0
|
|
60
|
+
[[ "${1:-}" == "--force" ]] && FORCE=1
|
|
61
|
+
|
|
62
|
+
bold() { printf '\033[1m%s\033[0m\n' "$*"; }
|
|
63
|
+
ok() { printf ' \033[32m✔\033[0m %s\n' "$*"; }
|
|
64
|
+
bad() { printf ' \033[31m✘\033[0m %s\n' "$*"; }
|
|
65
|
+
info() { printf ' · %s\n' "$*"; }
|
|
66
|
+
|
|
67
|
+
mkdir -p "$DIR"
|
|
68
|
+
chmod 700 "$DIR"
|
|
69
|
+
|
|
70
|
+
SHAPE_FILE="$DIR/deploy_shape"
|
|
71
|
+
|
|
72
|
+
status_of() { # file
|
|
73
|
+
if [[ -s "$DIR/$1" ]]; then
|
|
74
|
+
printf 'present (%s bytes, %s)' "$(wc -c < "$DIR/$1" | tr -d ' ')" "$(date -r "$DIR/$1" '+%Y-%m-%d %H:%M')"
|
|
75
|
+
else
|
|
76
|
+
printf 'MISSING'
|
|
77
|
+
fi
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
shape() { # -> "tunnel" | "docker" | "" (unset)
|
|
81
|
+
if [[ -s "$SHAPE_FILE" ]]; then cat "$SHAPE_FILE"; fi
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
save_shape() { # tunnel|docker
|
|
85
|
+
umask 077
|
|
86
|
+
printf '%s' "$1" > "$SHAPE_FILE"
|
|
87
|
+
chmod 600 "$SHAPE_FILE"
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
choose_shape() {
|
|
91
|
+
if [[ -n "${QC_DEPLOY_SHAPE:-}" ]]; then
|
|
92
|
+
case "$QC_DEPLOY_SHAPE" in
|
|
93
|
+
tunnel|docker) save_shape "$QC_DEPLOY_SHAPE"; info "deployment shape: $QC_DEPLOY_SHAPE (from QC_DEPLOY_SHAPE)"; return 0 ;;
|
|
94
|
+
*) bad "QC_DEPLOY_SHAPE must be 'tunnel' or 'docker' (got: $QC_DEPLOY_SHAPE)"; exit 1 ;;
|
|
95
|
+
esac
|
|
96
|
+
fi
|
|
97
|
+
local current; current="$(shape)"
|
|
98
|
+
if [[ -n "$current" && $FORCE -eq 0 ]]; then
|
|
99
|
+
info "deployment shape: $current (stored; re-run with --force to change)"
|
|
100
|
+
return 0
|
|
101
|
+
fi
|
|
102
|
+
bold "deployment shape — how does the GitHub webhook reach the daemon?"
|
|
103
|
+
info "1) tunnel — Cloudflare Tunnel on the host fronts the webhook port (needs tunnel_token)"
|
|
104
|
+
info "2) docker — plain Docker; you bring your own ingress/TLS to the webhook port (no tunnel_token)"
|
|
105
|
+
local a
|
|
106
|
+
while true; do
|
|
107
|
+
if ! read -r -p " choose [1/2]${current:+ (Enter keeps: $current)}: " a; then
|
|
108
|
+
[[ -n "$current" ]] && { save_shape "$current"; return 0; }
|
|
109
|
+
bad "no input — set QC_DEPLOY_SHAPE=tunnel|docker to choose non-interactively"
|
|
110
|
+
exit 1
|
|
111
|
+
fi
|
|
112
|
+
case "$a" in
|
|
113
|
+
1|tunnel) save_shape tunnel; break ;;
|
|
114
|
+
2|docker) save_shape docker; break ;;
|
|
115
|
+
"") if [[ -n "$current" ]]; then save_shape "$current"; break; fi; bad "pick 1 or 2" ;;
|
|
116
|
+
*) bad "pick 1 or 2" ;;
|
|
117
|
+
esac
|
|
118
|
+
done
|
|
119
|
+
ok "deployment shape: $(shape)"
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
overview() {
|
|
123
|
+
local s; s="$(shape)"
|
|
124
|
+
bold "quickreview secrets — $DIR (deployment shape: ${s:-unset})"
|
|
125
|
+
for f in app_id app.pem webhook_secret tunnel_token openai_api_key openai_embeddings_api_key openviking_root_key openviking_reviewer_key; do
|
|
126
|
+
printf ' %-24s %s\n' "$f" "$(status_of "$f")"
|
|
127
|
+
done
|
|
128
|
+
if [[ "$s" == "docker" ]]; then
|
|
129
|
+
info "tunnel_token is NOT required under the docker shape (own ingress)"
|
|
130
|
+
else
|
|
131
|
+
info "tunnel_token is required under the tunnel shape"
|
|
132
|
+
fi
|
|
133
|
+
info "openai_api_key is OPTIONAL (pi's model credential on the API-key route; ChatGPT-OAuth route: pi /login instead)"
|
|
134
|
+
info "openai_embeddings_api_key is OPTIONAL and SEPARATE: memory embeds LOCALLY by default and nothing"
|
|
135
|
+
info "but the model call leaves the machine. Only a hosted-embeddings opt-in (config.toml [openviking]"
|
|
136
|
+
info "embedding_provider = \"openai\") reads it — pi's key is never used for embeddings."
|
|
137
|
+
info "openviking_root_key / openviking_reviewer_key: memory. Missing root key => the"
|
|
138
|
+
info "server falls back to auth_mode=dev and per-user confinement is NOT enforced."
|
|
139
|
+
info "NEVER put the COMPANION key here — a review session could read it (rule 8)."
|
|
140
|
+
echo
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
want() { # file -> 0 if we should prompt for it
|
|
144
|
+
if [[ -s "$DIR/$1" ]]; then
|
|
145
|
+
if [[ $FORCE -eq 1 ]]; then
|
|
146
|
+
read -r -p " $1 exists — replace it? [y/N] " a
|
|
147
|
+
[[ "$a" == "y" || "$a" == "Y" ]]
|
|
148
|
+
else
|
|
149
|
+
return 1
|
|
150
|
+
fi
|
|
151
|
+
fi
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
save() { # file (value on stdin)
|
|
155
|
+
umask 077
|
|
156
|
+
cat > "$DIR/$1"
|
|
157
|
+
chmod 600 "$DIR/$1"
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
prompt_hidden() { # file label validator-fn
|
|
161
|
+
local file=$1 label=$2 validate=$3 value
|
|
162
|
+
while true; do
|
|
163
|
+
read -r -s -p " paste $label (input hidden, Enter to submit; empty to skip): " value || value=""
|
|
164
|
+
echo
|
|
165
|
+
if [[ -z "$value" ]]; then
|
|
166
|
+
info "skipped $file"
|
|
167
|
+
return 0
|
|
168
|
+
fi
|
|
169
|
+
if printf '%s' "$value" | "$validate"; then
|
|
170
|
+
printf '%s' "$value" | save "$file"
|
|
171
|
+
ok "$file saved"
|
|
172
|
+
return 0
|
|
173
|
+
fi
|
|
174
|
+
bad "that doesn't look right — try again (or Enter to skip)"
|
|
175
|
+
done
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
# ---- validators (read candidate on stdin, exit 0/1, print reason on stderr) --
|
|
179
|
+
v_app_id() { grep -qE '^[0-9]{1,12}$' || { echo " app_id must be a number (GitHub App settings → App ID)" >&2; return 1; }; }
|
|
180
|
+
v_secret() { local v; v="$(cat)"; [[ ${#v} -ge 8 ]] || { echo " suspiciously short (<8 chars)" >&2; return 1; }; }
|
|
181
|
+
v_token() { local v; v="$(cat)"; [[ ${#v} -ge 60 && "$v" != *" "* ]] || { echo " tunnel token should be one long unbroken string (connector page → the string after 'cloudflared service install')" >&2; return 1; }; }
|
|
182
|
+
# The same rule as validateOpenAiKey (src/onboard/steps/llmauth.ts): sk- plus at
|
|
183
|
+
# least one more character, one unbroken string. tests/onboard-llmauth.test.ts
|
|
184
|
+
# runs this function against the TypeScript validator's table. The whitespace
|
|
185
|
+
# list is ECMAScript whitespace, matched as exact strings regardless of locale.
|
|
186
|
+
v_openai() { local v c; v="$(cat)"; for c in $'\t' $'\n' $'\v' $'\f' $'\r' ' ' $'\xc2\xa0' $'\xe1\x9a\x80' $'\xe2\x80\x80' $'\xe2\x80\x81' $'\xe2\x80\x82' $'\xe2\x80\x83' $'\xe2\x80\x84' $'\xe2\x80\x85' $'\xe2\x80\x86' $'\xe2\x80\x87' $'\xe2\x80\x88' $'\xe2\x80\x89' $'\xe2\x80\x8a' $'\xe2\x80\xa8' $'\xe2\x80\xa9' $'\xe2\x80\xaf' $'\xe2\x81\x9f' $'\xe3\x80\x80' $'\xef\xbb\xbf'; do if [[ "$v" == *"$c"* ]]; then v=""; break; fi; done; [[ "$v" == sk-?* ]] || { echo " OpenAI keys start with sk- and contain no spaces" >&2; return 1; }; }
|
|
187
|
+
# OpenViking keys have no documented prefix — length and "one unbroken string"
|
|
188
|
+
# is everything we can honestly assert about them.
|
|
189
|
+
v_nonempty() { local v; v="$(cat)"; [[ ${#v} -ge 16 && "$v" != *" "* ]] || { echo " expected one unbroken string of at least 16 characters" >&2; return 1; }; }
|
|
190
|
+
|
|
191
|
+
prompt_pem() {
|
|
192
|
+
want app.pem || return 0
|
|
193
|
+
bold "app.pem — the GitHub App private key"
|
|
194
|
+
info "GitHub → Settings → Developer settings → GitHub Apps → your App → Private keys"
|
|
195
|
+
read -r -e -p " path to the downloaded .pem (or Enter to paste it instead): " pempath || return 0
|
|
196
|
+
if [[ -n "$pempath" ]]; then
|
|
197
|
+
pempath="${pempath/#\~/$HOME}"
|
|
198
|
+
[[ -r "$pempath" ]] || { bad "cannot read $pempath"; return 1; }
|
|
199
|
+
save app.pem < "$pempath"
|
|
200
|
+
else
|
|
201
|
+
info "paste the whole PEM, then Ctrl-D on an empty line:"
|
|
202
|
+
save app.pem
|
|
203
|
+
fi
|
|
204
|
+
if openssl pkey -in "$DIR/app.pem" -noout 2>/dev/null; then
|
|
205
|
+
ok "app.pem saved (valid private key)"
|
|
206
|
+
else
|
|
207
|
+
bad "app.pem does not parse as a private key — re-run to fix"
|
|
208
|
+
rm -f "$DIR/app.pem"
|
|
209
|
+
return 1
|
|
210
|
+
fi
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
choose_shape
|
|
214
|
+
overview
|
|
215
|
+
|
|
216
|
+
if want app_id; then
|
|
217
|
+
bold "app_id — the numeric GitHub App ID"
|
|
218
|
+
prompt_hidden app_id "the App ID" v_app_id
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
prompt_pem || true
|
|
222
|
+
|
|
223
|
+
if want webhook_secret; then
|
|
224
|
+
bold "webhook_secret — the secret on the App's webhook config"
|
|
225
|
+
prompt_hidden webhook_secret "the webhook secret" v_secret
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
if [[ "$(shape)" == "tunnel" ]]; then
|
|
229
|
+
if want tunnel_token; then
|
|
230
|
+
bold "tunnel_token — Cloudflare Zero Trust → Networks → Tunnels → connector token"
|
|
231
|
+
prompt_hidden tunnel_token "the tunnel token" v_token
|
|
232
|
+
fi
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
if want openai_api_key; then
|
|
236
|
+
bold "openai_api_key — OPTIONAL: pi's model credential on the API-key route (skip under ChatGPT OAuth)"
|
|
237
|
+
info "NOT used for memory embeddings — those run locally unless you opt into a hosted embedder below"
|
|
238
|
+
prompt_hidden openai_api_key "the OpenAI API key" v_openai
|
|
239
|
+
fi
|
|
240
|
+
|
|
241
|
+
# The HOSTED embeddings credential, its OWN file. The shipped
|
|
242
|
+
# default embeds memory locally (nothing but the model call leaves), so this
|
|
243
|
+
# is needed ONLY by an operator who set config.toml [openviking]
|
|
244
|
+
# embedding_provider = "openai". Kept separate from pi's key on purpose: either
|
|
245
|
+
# can be set without the other.
|
|
246
|
+
if want openai_embeddings_api_key; then
|
|
247
|
+
bold "openai_embeddings_api_key — OPTIONAL: only under the hosted-embeddings opt-in (skip to keep memory local)"
|
|
248
|
+
info "read by the memory engine alone; leaving it unset changes nothing about pi's credential"
|
|
249
|
+
prompt_hidden openai_embeddings_api_key "the OpenAI key for embeddings" v_openai
|
|
250
|
+
fi
|
|
251
|
+
|
|
252
|
+
# The memory engine's identity. Two files, and only two: the SERVER's
|
|
253
|
+
# own root key (ov.conf needs it to run in api_key mode; boot provisioning uses
|
|
254
|
+
# it to create users) and the REVIEWER user key (the one client credential this
|
|
255
|
+
# container may hold). The COMPANION key never belongs on this machine: review
|
|
256
|
+
# sessions run in this container, and a companion key they could read would
|
|
257
|
+
# defeat the confinement entirely.
|
|
258
|
+
if want openviking_root_key; then
|
|
259
|
+
bold "openviking_root_key — the OpenViking SERVER root key (api_key mode + boot provisioning)"
|
|
260
|
+
info "never handed to a session, the companion, or the daemon; ov.conf holds it 0600"
|
|
261
|
+
prompt_hidden openviking_root_key "the OpenViking root key" v_nonempty
|
|
262
|
+
fi
|
|
263
|
+
|
|
264
|
+
if want openviking_reviewer_key; then
|
|
265
|
+
bold "openviking_reviewer_key — the reviewer USER key (daemon + every review session)"
|
|
266
|
+
info "the SAME value goes in $(qcr_locate_keys_file) on your PC"
|
|
267
|
+
prompt_hidden openviking_reviewer_key "the reviewer USER key" v_nonempty
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
echo
|
|
271
|
+
overview
|
|
272
|
+
SHAPE_NOW="$(shape)"
|
|
273
|
+
required=(app_id app.pem webhook_secret)
|
|
274
|
+
if [[ "$SHAPE_NOW" == "tunnel" ]]; then
|
|
275
|
+
required+=(tunnel_token)
|
|
276
|
+
fi
|
|
277
|
+
missing=0
|
|
278
|
+
for f in "${required[@]}"; do
|
|
279
|
+
[[ -s "$DIR/$f" ]] || { bad "still missing: $f"; missing=1; }
|
|
280
|
+
done
|
|
281
|
+
if [[ $missing -eq 0 ]]; then
|
|
282
|
+
ok "all required secrets in place for the '$SHAPE_NOW' shape — tell the session 'secrets done' to continue the deploy"
|
|
283
|
+
if [[ "$SHAPE_NOW" == "docker" && -s "$DIR/tunnel_token" ]]; then
|
|
284
|
+
info "tunnel_token is present but unused under the docker shape"
|
|
285
|
+
fi
|
|
286
|
+
else
|
|
287
|
+
info "re-run this wizard to fill the gaps (deploy will refuse until they exist)"
|
|
288
|
+
exit 1
|
|
289
|
+
fi
|