@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,105 @@
|
|
|
1
|
+
// scripts/deploy.sh, as the wizard invokes it.
|
|
2
|
+
//
|
|
3
|
+
// The guided path IS the manual path. This module is deliberately tiny and
|
|
4
|
+
// deliberately dumb: it builds the argv for the SAME script the deploying
|
|
5
|
+
// skill documents, and it does nothing else. In particular it passes:
|
|
6
|
+
//
|
|
7
|
+
// * no flag that skips a check — there is no such flag, and there must
|
|
8
|
+
// never be a reason to add one;
|
|
9
|
+
// * no environment override — the real StreamRunner spawns with the
|
|
10
|
+
// inherited environment and this builder has nowhere to put a `QC_*` var,
|
|
11
|
+
// so the wizard structurally cannot point the script at a different
|
|
12
|
+
// inventory, a different config or a different sandbox than the operator's
|
|
13
|
+
// own `scripts/deploy.sh` would use. The defaults it computes are exactly
|
|
14
|
+
// the ones the manual path gets: the install locator's config
|
|
15
|
+
// (`$QCR_CONFIG`, else the config home's config.toml — never the
|
|
16
|
+
// checkout's) and deploy/ansible/inventory.ini in the checkout.
|
|
17
|
+
//
|
|
18
|
+
// Every refusal therefore lands unchanged on the guided route: a dirty working
|
|
19
|
+
// tree, a pi/OpenViking pin mismatch (all five mirrors), the "PIN-ME"
|
|
20
|
+
// placeholder, a missing inventory or ansible-playbook, the disk and port
|
|
21
|
+
// preflights inside the playbook itself, and the drain advisory that warns
|
|
22
|
+
// when rounds are still running. The wizard's job is to run it and show what
|
|
23
|
+
// it said — never to soften it.
|
|
24
|
+
import { join } from "node:path";
|
|
25
|
+
import { CHOICE_KEYS } from "../choices.js";
|
|
26
|
+
import { sshAliasOf } from "./topology.js";
|
|
27
|
+
|
|
28
|
+
/** `provision` installs the host (packages, Docker, secrets, the updater) and
|
|
29
|
+
* ships no image; `release <version>` is the deploy (CI built the image once
|
|
30
|
+
* from the release tag; the VM pulls it by digest); `verify` asks what runs.
|
|
31
|
+
* `sync` and `rebuild` are gone from the script — it refuses them. */
|
|
32
|
+
export type DeployMode = "provision" | "release" | "verify";
|
|
33
|
+
|
|
34
|
+
/** The version spelling deploy.sh accepts: X.Y.Z, optionally -prerelease. It
|
|
35
|
+
* names an image tag, so nothing else gets near the argv. */
|
|
36
|
+
export const RELEASE_VERSION_RE = /^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.]+)?$/;
|
|
37
|
+
|
|
38
|
+
/** A typed version -> the spelling deploy.sh takes (a leading `v` is the git
|
|
39
|
+
* tag's, not the version's), or null. */
|
|
40
|
+
export function releaseVersionOf(raw: unknown): string | null {
|
|
41
|
+
const v = String(raw ?? "")
|
|
42
|
+
.trim()
|
|
43
|
+
.replace(/^v(?=\d)/, "");
|
|
44
|
+
return RELEASE_VERSION_RE.test(v) ? v : null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The release version recorded by the last successful deploy, or null. */
|
|
48
|
+
export function recordedReleaseVersion(choices: Readonly<Record<string, unknown>>): string | null {
|
|
49
|
+
const rec = choices[CHOICE_KEYS.vmDeployed];
|
|
50
|
+
if (typeof rec !== "object" || rec === null) return null;
|
|
51
|
+
// A record is the target host's own: one written for another alias is no
|
|
52
|
+
// version to ship to the host the topology names now.
|
|
53
|
+
if ((rec as Record<string, unknown>).host !== sshAliasOf(choices)) return null;
|
|
54
|
+
return releaseVersionOf((rec as Record<string, unknown>).version);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Match the deploy script's inherited inventory overrides without changing them. */
|
|
58
|
+
export function effectiveInventoryPath(root: string, env: NodeJS.ProcessEnv = process.env): string {
|
|
59
|
+
return (
|
|
60
|
+
env.QC_INVENTORY || join(env.QC_ANSIBLE_DIR || join(root, "deploy", "ansible"), "inventory.ini")
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const DEPLOY_SCRIPT_REL = "scripts/deploy.sh";
|
|
65
|
+
|
|
66
|
+
export function deployScriptPath(root: string): string {
|
|
67
|
+
return join(root, DEPLOY_SCRIPT_REL);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface DeployArgvOptions {
|
|
71
|
+
dryRun?: boolean;
|
|
72
|
+
/** Required by `release`, refused by every other mode. */
|
|
73
|
+
version?: string;
|
|
74
|
+
/** `release` only: the CI deploy manifest, when it is not the default
|
|
75
|
+
* `./deploy-manifest-<version>.json`. */
|
|
76
|
+
manifest?: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function words(mode: DeployMode, opts: DeployArgvOptions): string[] {
|
|
80
|
+
if (mode === "release") {
|
|
81
|
+
if (opts.version === undefined || !RELEASE_VERSION_RE.test(opts.version))
|
|
82
|
+
throw new Error(
|
|
83
|
+
`deploy.sh release needs a version (X.Y.Z), got ${JSON.stringify(opts.version)}`,
|
|
84
|
+
);
|
|
85
|
+
return [
|
|
86
|
+
...(opts.dryRun ? ["--dry-run"] : []),
|
|
87
|
+
"release",
|
|
88
|
+
opts.version,
|
|
89
|
+
...(opts.manifest ? ["--manifest", opts.manifest] : []),
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
if (opts.version !== undefined || opts.manifest !== undefined)
|
|
93
|
+
throw new Error(`deploy.sh ${mode} takes no version or manifest`);
|
|
94
|
+
return [...(opts.dryRun ? ["--dry-run"] : []), mode];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** `<root>/scripts/deploy.sh [--dry-run] release <version> | provision | verify`. */
|
|
98
|
+
export function deployArgv(root: string, mode: DeployMode, opts: DeployArgvOptions = {}): string[] {
|
|
99
|
+
return [deployScriptPath(root), ...words(mode, opts)];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** How the same invocation reads when the operator types it themselves. */
|
|
103
|
+
export function deployCommandLine(mode: DeployMode, opts: DeployArgvOptions = {}): string {
|
|
104
|
+
return deployArgv("", mode, opts).join(" ");
|
|
105
|
+
}
|
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
// The embedder step — where memory's vectors are computed, and the only
|
|
2
|
+
// place a new operator is asked about it.
|
|
3
|
+
//
|
|
4
|
+
// Why it is a step: the shipped default is the local embedder — a small
|
|
5
|
+
// English model served on loopback inside the daemon container — so nothing
|
|
6
|
+
// but the model call leaves the machine, memory text included. That default
|
|
7
|
+
// needs no answer and no key, which is exactly why the step exists: an
|
|
8
|
+
// operator who WANTS hosted embeddings must say so, in one place, and the
|
|
9
|
+
// whole installation then moves together — config.toml, the credential file, and (through the bring-up or
|
|
10
|
+
// inventory step) the environment the boot actually renders. Half of that is
|
|
11
|
+
// the failure this step makes impossible: a config that says "openai" over a
|
|
12
|
+
// boot that renders "local" is a vector-store reset on the next start.
|
|
13
|
+
//
|
|
14
|
+
// The credential is its own file: `openai_api_key` is pi's model credential
|
|
15
|
+
// and is never read for embeddings; the hosted opt-in reads
|
|
16
|
+
// `<secrets>/<embedding_key_file>` (default `openai_embeddings_api_key`).
|
|
17
|
+
// Either can be set without the other. The wizard never accepts the value
|
|
18
|
+
// through the pi session (it would land in a transcript) — it points at
|
|
19
|
+
// `deploy/collect-secrets.sh`, which reads it hidden and writes it 0600.
|
|
20
|
+
//
|
|
21
|
+
// Deterministic by construction: config and secrets are plain files under
|
|
22
|
+
// paths derived from the injected state dir; verify() neither prompts nor
|
|
23
|
+
// writes.
|
|
24
|
+
import { existsSync } from "node:fs";
|
|
25
|
+
import { join } from "node:path";
|
|
26
|
+
import { parse as parseToml } from "smol-toml";
|
|
27
|
+
import {
|
|
28
|
+
EMBEDDING_PROVIDERS,
|
|
29
|
+
HOSTED_EMBEDDING,
|
|
30
|
+
LOCAL_EMBEDDING,
|
|
31
|
+
OPENVIKING_DEFAULTS,
|
|
32
|
+
parseConfig,
|
|
33
|
+
ovConfEmbedder,
|
|
34
|
+
parseOpenViking,
|
|
35
|
+
type EmbeddingProvider,
|
|
36
|
+
type OpenVikingConfig,
|
|
37
|
+
} from "../../config.js";
|
|
38
|
+
import type { CheckResult, OnboardingStep, StepContext, StepReport } from "../engine.js";
|
|
39
|
+
import {
|
|
40
|
+
interviewConfigPath,
|
|
41
|
+
readTextOrNull,
|
|
42
|
+
readEnvText,
|
|
43
|
+
rootOf,
|
|
44
|
+
secretsDirFor,
|
|
45
|
+
writeAtomic,
|
|
46
|
+
} from "./compose.js";
|
|
47
|
+
import { assertNoDryRunEdit, patchToml, tomlString, type TomlEdit } from "./configfill.js";
|
|
48
|
+
import { validateOpenAiKey } from "./llmauth.js";
|
|
49
|
+
import { stackTransportFor } from "./transport.js";
|
|
50
|
+
import { vmInventoryStep } from "./inventory.js";
|
|
51
|
+
import { vmDeployStep } from "./vmdeploy.js";
|
|
52
|
+
import { readTomlKey, readEnvKey } from "./ingress.js";
|
|
53
|
+
import { topologyOf } from "./topology.js";
|
|
54
|
+
|
|
55
|
+
export const EMBEDDINGS_STEP_ID = "embeddings";
|
|
56
|
+
|
|
57
|
+
/** The embedder config.toml declares — what the bring-up step writes into the
|
|
58
|
+
* project `.env` and the inventory step writes as host vars. */
|
|
59
|
+
export interface DeclaredEmbedder {
|
|
60
|
+
provider: string;
|
|
61
|
+
model: string;
|
|
62
|
+
dimension: number;
|
|
63
|
+
keyFile: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** The loader's own reading of a config text's `[openviking]` block —
|
|
67
|
+
* defaults filled, `1_536` read as 1536, a hosted opt-in that omits its
|
|
68
|
+
* model/dimension given the HOSTED defaults — or null when the text does not
|
|
69
|
+
* parse or the loader refuses the block. */
|
|
70
|
+
function loaderOpenViking(configText: string): OpenVikingConfig | null {
|
|
71
|
+
try {
|
|
72
|
+
const doc = parseToml(configText) as Record<string, unknown>;
|
|
73
|
+
const block = doc.openviking;
|
|
74
|
+
return parseOpenViking(
|
|
75
|
+
typeof block === "object" && block !== null && !Array.isArray(block)
|
|
76
|
+
? (block as Record<string, unknown>)
|
|
77
|
+
: {},
|
|
78
|
+
);
|
|
79
|
+
} catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** The embedder an `[openviking]` block declares. */
|
|
85
|
+
export function embedderOf(ov: OpenVikingConfig): DeclaredEmbedder {
|
|
86
|
+
return {
|
|
87
|
+
provider: ov.embedding_provider,
|
|
88
|
+
model: ov.embedding_model,
|
|
89
|
+
dimension: ov.embedding_dimension,
|
|
90
|
+
keyFile: ov.embedding_key_file,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Read `[openviking] embedding_*` out of a config.toml text, defaults filled
|
|
96
|
+
* exactly as the loader fills them — so a config that omits the block (an
|
|
97
|
+
* older one, or a hand-trimmed one) is read as the shipped local default and
|
|
98
|
+
* not as "unknown".
|
|
99
|
+
*/
|
|
100
|
+
export function declaredEmbedderOf(configText: string): DeclaredEmbedder {
|
|
101
|
+
// The loader's own reading first, which is exactly what the daemon will
|
|
102
|
+
// run. Only a text that does not parse (or a block the loader refuses)
|
|
103
|
+
// falls back to the tolerant line reader below.
|
|
104
|
+
const ov = loaderOpenViking(configText);
|
|
105
|
+
if (ov !== null) return embedderOf(ov);
|
|
106
|
+
const get = (key: string): string | null =>
|
|
107
|
+
readTomlKey(configText, "openviking", key)?.trim() ?? null;
|
|
108
|
+
const dimensionRaw = get("embedding_dimension");
|
|
109
|
+
return {
|
|
110
|
+
provider: get("embedding_provider") ?? OPENVIKING_DEFAULTS.embedding_provider,
|
|
111
|
+
model: get("embedding_model") ?? OPENVIKING_DEFAULTS.embedding_model,
|
|
112
|
+
dimension:
|
|
113
|
+
dimensionRaw !== null && /^[0-9]+$/.test(dimensionRaw)
|
|
114
|
+
? Number(dimensionRaw)
|
|
115
|
+
: OPENVIKING_DEFAULTS.embedding_dimension,
|
|
116
|
+
keyFile: get("embedding_key_file") ?? OPENVIKING_DEFAULTS.embedding_key_file,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const EMBEDDER_FIELDS = [
|
|
121
|
+
{
|
|
122
|
+
key: "provider",
|
|
123
|
+
suffix: "EMBEDDING_PROVIDER",
|
|
124
|
+
fallback: OPENVIKING_DEFAULTS.embedding_provider,
|
|
125
|
+
},
|
|
126
|
+
{ key: "model", suffix: "EMBEDDING_MODEL", fallback: OPENVIKING_DEFAULTS.embedding_model },
|
|
127
|
+
{
|
|
128
|
+
key: "dimension",
|
|
129
|
+
suffix: "EMBEDDING_DIMENSION",
|
|
130
|
+
fallback: OPENVIKING_DEFAULTS.embedding_dimension,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
key: "keyFile",
|
|
134
|
+
suffix: "EMBEDDING_KEY_FILE",
|
|
135
|
+
fallback: OPENVIKING_DEFAULTS.embedding_key_file,
|
|
136
|
+
},
|
|
137
|
+
] as const;
|
|
138
|
+
const LOCAL_EMBEDDER_FIELDS = [
|
|
139
|
+
{ key: "port", suffix: "LOCAL_EMBEDDER_PORT", fallback: OPENVIKING_DEFAULTS.local_embedder_port },
|
|
140
|
+
{
|
|
141
|
+
key: "threads",
|
|
142
|
+
suffix: "LOCAL_EMBEDDER_THREADS",
|
|
143
|
+
fallback: OPENVIKING_DEFAULTS.local_embedder_threads,
|
|
144
|
+
},
|
|
145
|
+
] as const;
|
|
146
|
+
|
|
147
|
+
/** Every embedder host field, with the deploy's tracked fallback value. */
|
|
148
|
+
export const EMBEDDER_HOST_DEFAULTS: Readonly<Record<string, string>> = Object.fromEntries(
|
|
149
|
+
[...EMBEDDER_FIELDS, ...LOCAL_EMBEDDER_FIELDS].map((field) => [
|
|
150
|
+
`openviking_${field.suffix.toLowerCase()}`,
|
|
151
|
+
String(field.fallback),
|
|
152
|
+
]),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
/** The four `.env` keys docker-compose.yml passes into the daemon container. */
|
|
156
|
+
export function embedderEnvEntries(e: DeclaredEmbedder): Array<[string, string]> {
|
|
157
|
+
return EMBEDDER_FIELDS.map((field) => [`QCR_OPENVIKING_${field.suffix}`, String(e[field.key])]);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The local embedder's two runtime knobs as `.env` keys:
|
|
162
|
+
* docker-compose.yml passes them to the entrypoint, which renders ov.conf's
|
|
163
|
+
* `api_base` and runs the provisioning embedder on that port — while the
|
|
164
|
+
* daemon reads the same two from config.toml. Mirrored on every bring-up so
|
|
165
|
+
* they cannot disagree: a port the two disagree on is a search nothing serves.
|
|
166
|
+
* The loader's own reading of the block; a config it cannot read gives the
|
|
167
|
+
* shipped defaults, exactly as the daemon would refuse to start on it.
|
|
168
|
+
*/
|
|
169
|
+
export function localEmbedderEnvEntries(configText: string): Array<[string, string]> {
|
|
170
|
+
const runtime = localEmbedderRuntimeOf(configText);
|
|
171
|
+
return LOCAL_EMBEDDER_FIELDS.map((field) => [
|
|
172
|
+
`QCR_OPENVIKING_${field.suffix}`,
|
|
173
|
+
String(runtime[field.key]),
|
|
174
|
+
]);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** The local embedder's two runtime knobs. */
|
|
178
|
+
export interface LocalEmbedderRuntime {
|
|
179
|
+
port: number;
|
|
180
|
+
threads: number;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** The loader's own reading of the local embedder's port and threads; a
|
|
184
|
+
* config it cannot read gives the shipped defaults, exactly as the daemon
|
|
185
|
+
* would refuse to start on it. */
|
|
186
|
+
export function localEmbedderRuntimeOf(configText: string): LocalEmbedderRuntime {
|
|
187
|
+
const ov = loaderOpenViking(configText);
|
|
188
|
+
return {
|
|
189
|
+
port: ov?.local_embedder_port ?? OPENVIKING_DEFAULTS.local_embedder_port,
|
|
190
|
+
threads: ov?.local_embedder_threads ?? OPENVIKING_DEFAULTS.local_embedder_threads,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** The inventory HOST VARS for local embedder knobs that differ from the
|
|
195
|
+
* shipped defaults (which the tracked group_vars carry) — scripts/deploy.sh
|
|
196
|
+
* refuses a config.toml whose port or threads the deploy would not render. */
|
|
197
|
+
export function localEmbedderHostVars(rt: LocalEmbedderRuntime): Array<[string, string]> {
|
|
198
|
+
return LOCAL_EMBEDDER_FIELDS.filter((field) => rt[field.key] !== field.fallback).map((field) => [
|
|
199
|
+
`openviking_${field.suffix.toLowerCase()}`,
|
|
200
|
+
String(rt[field.key]),
|
|
201
|
+
]);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** The inventory HOST VARS for a hosted opt-in — nothing for the local
|
|
205
|
+
* default, which the tracked group_vars already carry. */
|
|
206
|
+
export function embedderHostVars(e: DeclaredEmbedder): Array<[string, string]> {
|
|
207
|
+
return EMBEDDER_FIELDS.filter(
|
|
208
|
+
(field) => e.provider !== "local" || String(e[field.key]) !== String(field.fallback),
|
|
209
|
+
).map((field) => [`openviking_${field.suffix.toLowerCase()}`, String(e[field.key])]);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export function describeEmbedder(e: {
|
|
213
|
+
provider: string;
|
|
214
|
+
model: string;
|
|
215
|
+
dimension: number;
|
|
216
|
+
}): string {
|
|
217
|
+
return `${e.provider}/${e.model} (${e.dimension} dims)`;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const LOCAL_SENTENCE =
|
|
221
|
+
"memory embeds LOCALLY, inside the memory container — no memory text leaves the machine, and nothing but the model call does. " +
|
|
222
|
+
"No key is needed and none is read";
|
|
223
|
+
const HOSTED_SENTENCE =
|
|
224
|
+
"memory embeds through OpenAI's hosted embeddings endpoint: EVERY memory entry's text, and every search query, is sent there. " +
|
|
225
|
+
"You chose this; the shipped default is local";
|
|
226
|
+
|
|
227
|
+
/** The credential check for the hosted opt-in — pi's key never counts. */
|
|
228
|
+
export function keyFileCheck(secretsDir: string, keyFile: string): CheckResult {
|
|
229
|
+
const path = join(secretsDir, keyFile);
|
|
230
|
+
const value = readTextOrNull(path)?.trim() ?? "";
|
|
231
|
+
if (validateOpenAiKey(value)) {
|
|
232
|
+
return {
|
|
233
|
+
name: "embeddings-key",
|
|
234
|
+
ok: true,
|
|
235
|
+
detail: `${path} is present (0600 by the wizard) — the memory engine reads it, and only it, for embeddings`,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const pi = existsSync(join(secretsDir, "openai_api_key"))
|
|
239
|
+
? " pi's openai_api_key is there, but it is pi's model credential and is deliberately NOT used for embeddings."
|
|
240
|
+
: "";
|
|
241
|
+
return {
|
|
242
|
+
name: "embeddings-key",
|
|
243
|
+
ok: false,
|
|
244
|
+
detail:
|
|
245
|
+
(value === ""
|
|
246
|
+
? `no ${keyFile} in ${secretsDir}.`
|
|
247
|
+
: `${path} exists but does not look like an OpenAI key.`) +
|
|
248
|
+
pi +
|
|
249
|
+
` Without it the memory engine refuses to start (memory degrades; the embedder is never switched silently). Fix: in another terminal, ` +
|
|
250
|
+
`\`bash deploy/collect-secrets.sh\` and paste the key at the ${OPENVIKING_DEFAULTS.embedding_key_file} prompt` +
|
|
251
|
+
(keyFile === OPENVIKING_DEFAULTS.embedding_key_file
|
|
252
|
+
? ""
|
|
253
|
+
: `; then securely copy ${join(secretsDir, OPENVIKING_DEFAULTS.embedding_key_file)} to ${path}, keeping mode 0600`) +
|
|
254
|
+
" (never through this session — it would land in a transcript), then run this step again",
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function propagationNote(ctx: StepContext): CheckResult {
|
|
259
|
+
const vm = topologyOf(ctx.choices) === "vm";
|
|
260
|
+
return {
|
|
261
|
+
name: "propagation",
|
|
262
|
+
ok: true,
|
|
263
|
+
detail: vm
|
|
264
|
+
? "the inventory step (68) writes these as HOST VARS on your inventory line, which is what the deploy renders. Run it again, including when switching back to local; scripts/deploy.sh refuses to deploy if config.toml and those values disagree"
|
|
265
|
+
: "the bring-up step (70) writes these into the project .env, which docker-compose.yml passes into the container",
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const MIGRATION_NOTE: CheckResult = {
|
|
270
|
+
name: "existing-store",
|
|
271
|
+
ok: true,
|
|
272
|
+
detail:
|
|
273
|
+
"if this installation already holds memory embedded under a DIFFERENT embedder, the next boot moves the old vectors aside " +
|
|
274
|
+
"(kept, never deleted) and the daemon re-embeds reviewer memory through the server once it is ready; the companion's namespace " +
|
|
275
|
+
"is yours to rebuild from this machine with `qcr memory reembed`. The memory TEXT is never touched. docs/memory-embeddings.md has the whole shape",
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/** Compare the compose inputs to the config the daemon loads, including shipped defaults. */
|
|
279
|
+
export function embedderInputsCheck(configText: string, envText: string): CheckResult {
|
|
280
|
+
const expected = [
|
|
281
|
+
...embedderEnvEntries(declaredEmbedderOf(configText)),
|
|
282
|
+
...localEmbedderEnvEntries(configText),
|
|
283
|
+
];
|
|
284
|
+
const defaults = Object.fromEntries([
|
|
285
|
+
...embedderEnvEntries(declaredEmbedderOf("")),
|
|
286
|
+
...localEmbedderEnvEntries(""),
|
|
287
|
+
]);
|
|
288
|
+
const changed = expected
|
|
289
|
+
.filter(([key, value]) => (readEnvKey(envText, key) ?? defaults[key]) !== value)
|
|
290
|
+
.map(([key]) => key);
|
|
291
|
+
return {
|
|
292
|
+
name: "embedder",
|
|
293
|
+
ok: changed.length === 0,
|
|
294
|
+
detail: changed.length
|
|
295
|
+
? `.env no longer renders config.toml's embedder (${changed.join(", ")}) — run the bring-up step again`
|
|
296
|
+
: "the environment renders the embedder config.toml declares",
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
async function activeEmbedderCheck(
|
|
301
|
+
ctx: StepContext,
|
|
302
|
+
declared: OpenVikingConfig,
|
|
303
|
+
): Promise<CheckResult> {
|
|
304
|
+
const expected = ovConfEmbedder(declared);
|
|
305
|
+
// Emit identity fields alone: ov.conf also contains credentials.
|
|
306
|
+
const script = `import {readFileSync} from "node:fs";
|
|
307
|
+
import {loadConfig} from "./dist/src/config.js";
|
|
308
|
+
const cfg=loadConfig();
|
|
309
|
+
const dense=JSON.parse(readFileSync(cfg.openviking.config_file,"utf8")).embedding?.dense;
|
|
310
|
+
console.log(JSON.stringify({provider:dense?.provider,model:dense?.model,dimension:dense?.dimension,api_base:dense?.api_base}));`;
|
|
311
|
+
// ov.conf lives in the memory engine's container; its image keeps the app
|
|
312
|
+
// in /opt/qcr and exports QCR_CONFIG only inside its entrypoint.
|
|
313
|
+
const result = await stackTransportFor(ctx).execMemory([
|
|
314
|
+
"sh",
|
|
315
|
+
"-c",
|
|
316
|
+
'cd /opt/qcr 2>/dev/null; QCR_CONFIG="${QCR_CONFIG:-/opt/quickreview/config-home/${QCR_CONFIG_NAME:-config.toml}}" ' +
|
|
317
|
+
'exec node --input-type=module -e "$0"',
|
|
318
|
+
script,
|
|
319
|
+
]);
|
|
320
|
+
let actual: Record<string, unknown> | undefined;
|
|
321
|
+
try {
|
|
322
|
+
const value: unknown = JSON.parse(result.stdout);
|
|
323
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value))
|
|
324
|
+
actual = value as Record<string, unknown>;
|
|
325
|
+
} catch {
|
|
326
|
+
/* unreadable remains unknown */
|
|
327
|
+
}
|
|
328
|
+
if (
|
|
329
|
+
result.code !== 0 ||
|
|
330
|
+
!actual ||
|
|
331
|
+
typeof actual.provider !== "string" ||
|
|
332
|
+
typeof actual.model !== "string" ||
|
|
333
|
+
typeof actual.dimension !== "number"
|
|
334
|
+
)
|
|
335
|
+
return {
|
|
336
|
+
name: "embedder-runtime",
|
|
337
|
+
ok: false,
|
|
338
|
+
detail: `the active embedder configuration is unreadable (exit ${result.code}${
|
|
339
|
+
result.stderr.trim() ? `: ${result.stderr.trim().slice(0, 200)}` : ""
|
|
340
|
+
}) — its provider is unknown; restore access to the memory container before verifying delivery`,
|
|
341
|
+
};
|
|
342
|
+
const matches =
|
|
343
|
+
actual.provider === expected.provider &&
|
|
344
|
+
actual.model === expected.model &&
|
|
345
|
+
actual.dimension === expected.dimension &&
|
|
346
|
+
actual.api_base === expected.api_base;
|
|
347
|
+
return {
|
|
348
|
+
name: "embedder-runtime",
|
|
349
|
+
ok: matches,
|
|
350
|
+
detail: matches
|
|
351
|
+
? "the active embedder matches config.toml"
|
|
352
|
+
: "the active embedder differs from config.toml — run bring-up (or inventory and a rebuild on the server route) before claiming the change delivered",
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export function embeddingsStep(): OnboardingStep {
|
|
357
|
+
return {
|
|
358
|
+
id: EMBEDDINGS_STEP_ID,
|
|
359
|
+
title: "Memory embeddings: local by default",
|
|
360
|
+
explain:
|
|
361
|
+
"Decides where the memory engine computes its vectors. The shipped default is LOCAL: a small English embedding model " +
|
|
362
|
+
`(${LOCAL_EMBEDDING.model}, pinned in the image) served on loopback inside the memory ` +
|
|
363
|
+
"container, so nothing but the model call ever leaves the machine — memory text included — and no key is needed. Calling this " +
|
|
364
|
+
"step with no arguments keeps whatever the config already declares (the local default on a fresh install); moving an " +
|
|
365
|
+
'installation back to local takes an explicit `provider: "local"`. The alternative is OpenAI\'s hosted embeddings (`provider: "openai"`): every memory ' +
|
|
366
|
+
"entry's text is then sent to OpenAI, and the credential is its OWN secrets file (openai_embeddings_api_key, via " +
|
|
367
|
+
"deploy/collect-secrets.sh) — pi's openai_api_key is never used for it. Do not offer the hosted option as an upgrade; offer it " +
|
|
368
|
+
"only if the operator asks, and say plainly what leaves the machine.",
|
|
369
|
+
order: 38,
|
|
370
|
+
parameters: {
|
|
371
|
+
type: "object",
|
|
372
|
+
properties: {
|
|
373
|
+
provider: {
|
|
374
|
+
type: "string",
|
|
375
|
+
enum: [...EMBEDDING_PROVIDERS],
|
|
376
|
+
description:
|
|
377
|
+
'"local" (the shipped default) or "openai" (hosted; sends memory text to OpenAI). Omit to keep what config.toml declares.',
|
|
378
|
+
},
|
|
379
|
+
model: {
|
|
380
|
+
type: "string",
|
|
381
|
+
description: `Hosted only: the embedding model (default ${HOSTED_EMBEDDING.model}). Ignored for local, which has one model.`,
|
|
382
|
+
},
|
|
383
|
+
dimension: {
|
|
384
|
+
type: "string",
|
|
385
|
+
description: `Hosted only: the vector dimension of that model (default ${HOSTED_EMBEDDING.dimension}). Ignored for local.`,
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
|
|
390
|
+
async run(ctx): Promise<StepReport> {
|
|
391
|
+
const path = interviewConfigPath(ctx);
|
|
392
|
+
const text = readTextOrNull(path);
|
|
393
|
+
if (text === null) {
|
|
394
|
+
return {
|
|
395
|
+
ok: false,
|
|
396
|
+
checks: [
|
|
397
|
+
{
|
|
398
|
+
name: "config.toml",
|
|
399
|
+
ok: false,
|
|
400
|
+
detail: `${path} does not exist yet — run the config_fill step first; this step then writes the embedder into it`,
|
|
401
|
+
},
|
|
402
|
+
],
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
const current = declaredEmbedderOf(text);
|
|
406
|
+
const rawProvider = String(ctx.input.provider ?? current.provider)
|
|
407
|
+
.trim()
|
|
408
|
+
.toLowerCase();
|
|
409
|
+
if (!(EMBEDDING_PROVIDERS as readonly string[]).includes(rawProvider)) {
|
|
410
|
+
return {
|
|
411
|
+
ok: false,
|
|
412
|
+
checks: [
|
|
413
|
+
{
|
|
414
|
+
name: "provider",
|
|
415
|
+
ok: false,
|
|
416
|
+
detail: `"${rawProvider}" is not an embedder — the choices are ${EMBEDDING_PROVIDERS.map((p) => `"${p}"`).join(" and ")}`,
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
const provider = rawProvider as EmbeddingProvider;
|
|
422
|
+
const model =
|
|
423
|
+
provider === "local"
|
|
424
|
+
? LOCAL_EMBEDDING.model
|
|
425
|
+
: String(
|
|
426
|
+
ctx.input.model ??
|
|
427
|
+
(current.provider === "openai" ? current.model : HOSTED_EMBEDDING.model),
|
|
428
|
+
).trim() || HOSTED_EMBEDDING.model;
|
|
429
|
+
const dimensionRaw =
|
|
430
|
+
provider === "local"
|
|
431
|
+
? String(LOCAL_EMBEDDING.dimension)
|
|
432
|
+
: String(
|
|
433
|
+
ctx.input.dimension ??
|
|
434
|
+
(current.provider === "openai" ? current.dimension : HOSTED_EMBEDDING.dimension),
|
|
435
|
+
).trim();
|
|
436
|
+
if (!/^[1-9][0-9]*$/.test(dimensionRaw)) {
|
|
437
|
+
return {
|
|
438
|
+
ok: false,
|
|
439
|
+
checks: [
|
|
440
|
+
{
|
|
441
|
+
name: "dimension",
|
|
442
|
+
ok: false,
|
|
443
|
+
detail: `"${dimensionRaw}" is not a vector dimension — a positive integer, e.g. 1536 for text-embedding-3-small`,
|
|
444
|
+
},
|
|
445
|
+
],
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
const edits: TomlEdit[] = [
|
|
449
|
+
{ section: "openviking", key: "embedding_provider", value: tomlString(provider) },
|
|
450
|
+
{ section: "openviking", key: "embedding_model", value: tomlString(model) },
|
|
451
|
+
{ section: "openviking", key: "embedding_dimension", value: dimensionRaw },
|
|
452
|
+
];
|
|
453
|
+
// Rule 1, structurally: the only wizard file that may write `dry_run`
|
|
454
|
+
// is golive.ts; every other edit list is asserted clean first.
|
|
455
|
+
assertNoDryRunEdit(edits);
|
|
456
|
+
const patched = patchToml(text, edits);
|
|
457
|
+
// Parse BEFORE writing — the loader's own validation is the lock, so a
|
|
458
|
+
// config this step writes can always be booted.
|
|
459
|
+
try {
|
|
460
|
+
parseConfig(patched);
|
|
461
|
+
} catch (err) {
|
|
462
|
+
return {
|
|
463
|
+
ok: false,
|
|
464
|
+
checks: [
|
|
465
|
+
{
|
|
466
|
+
name: "config validation",
|
|
467
|
+
ok: false,
|
|
468
|
+
detail: `the embedder this step would write does not load: ${String(err)} — nothing was written`,
|
|
469
|
+
},
|
|
470
|
+
],
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
if (patched !== text) writeAtomic(path, patched);
|
|
474
|
+
const declared = declaredEmbedderOf(patched);
|
|
475
|
+
|
|
476
|
+
const checks: CheckResult[] = [
|
|
477
|
+
{
|
|
478
|
+
name: "embedder",
|
|
479
|
+
ok: true,
|
|
480
|
+
detail: `${describeEmbedder(declared)} — ${provider === "local" ? LOCAL_SENTENCE : HOSTED_SENTENCE}`,
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
name: "config.toml",
|
|
484
|
+
ok: true,
|
|
485
|
+
detail: `[openviking] embedding_provider/model/dimension ${patched === text ? "already said this" : `written to ${path}`}, and it parses`,
|
|
486
|
+
},
|
|
487
|
+
];
|
|
488
|
+
if (provider !== "local")
|
|
489
|
+
checks.push(keyFileCheck(secretsDirFor(ctx.adapters, ctx.choices), declared.keyFile));
|
|
490
|
+
checks.push(propagationNote(ctx), MIGRATION_NOTE);
|
|
491
|
+
return {
|
|
492
|
+
ok: checks.every((c) => c.ok),
|
|
493
|
+
checks,
|
|
494
|
+
data: { provider, model: declared.model, dimension: declared.dimension, config_path: path },
|
|
495
|
+
};
|
|
496
|
+
},
|
|
497
|
+
|
|
498
|
+
async verify(ctx): Promise<StepReport> {
|
|
499
|
+
const path = interviewConfigPath(ctx);
|
|
500
|
+
const text = readTextOrNull(path);
|
|
501
|
+
if (text === null)
|
|
502
|
+
return {
|
|
503
|
+
ok: false,
|
|
504
|
+
checks: [{ name: "config.toml", ok: false, detail: `${path} does not exist` }],
|
|
505
|
+
};
|
|
506
|
+
let declared: DeclaredEmbedder;
|
|
507
|
+
let ov: OpenVikingConfig;
|
|
508
|
+
try {
|
|
509
|
+
ov = parseConfig(text).openviking;
|
|
510
|
+
declared = embedderOf(ov);
|
|
511
|
+
} catch (err) {
|
|
512
|
+
return {
|
|
513
|
+
ok: false,
|
|
514
|
+
checks: [
|
|
515
|
+
{ name: "config.toml", ok: false, detail: `${path} does not load: ${String(err)}` },
|
|
516
|
+
],
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
const checks: CheckResult[] = [
|
|
520
|
+
{
|
|
521
|
+
name: "embedder",
|
|
522
|
+
ok: true,
|
|
523
|
+
detail: `${describeEmbedder(declared)} — ${declared.provider === "local" ? LOCAL_SENTENCE : HOSTED_SENTENCE}`,
|
|
524
|
+
},
|
|
525
|
+
];
|
|
526
|
+
if (declared.provider !== "local")
|
|
527
|
+
checks.push(keyFileCheck(secretsDirFor(ctx.adapters, ctx.choices), declared.keyFile));
|
|
528
|
+
const state = await stackTransportFor(ctx).daemonState();
|
|
529
|
+
if (state.state === "unknown")
|
|
530
|
+
checks.push({
|
|
531
|
+
name: "embedder-runtime",
|
|
532
|
+
ok: false,
|
|
533
|
+
detail: `running embedder is unknown (${state.detail}) — restore host access before verifying delivery`,
|
|
534
|
+
});
|
|
535
|
+
else if (state.state === "running") {
|
|
536
|
+
if (ov.enabled) checks.push(await activeEmbedderCheck(ctx, ov));
|
|
537
|
+
if (topologyOf(ctx.choices) === "vm") {
|
|
538
|
+
const inventory = await vmInventoryStep().verify(ctx);
|
|
539
|
+
const deployed = await vmDeployStep().verify(ctx);
|
|
540
|
+
checks.push(...inventory.checks, ...deployed.checks);
|
|
541
|
+
} else
|
|
542
|
+
checks.push({
|
|
543
|
+
...embedderInputsCheck(text, readEnvText(rootOf(ctx.adapters))),
|
|
544
|
+
name: "embedder-inputs",
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
return { ok: checks.every((c) => c.ok), checks };
|
|
548
|
+
},
|
|
549
|
+
};
|
|
550
|
+
}
|