@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,300 @@
|
|
|
1
|
+
// ssh preflight — the FIRST thing the VM route does, and the reason
|
|
2
|
+
// it is first is one specific failure mode.
|
|
3
|
+
//
|
|
4
|
+
// THE PASSPHRASE TRAP. An ssh key with a passphrase and no agent does not
|
|
5
|
+
// fail: it PROMPTS. A prompt inside a wizard has nowhere to appear and nobody
|
|
6
|
+
// to type into it, so what the operator sees is the deploy stopping dead,
|
|
7
|
+
// halfway through an Ansible run, with no output and no explanation. That is
|
|
8
|
+
// the single worst thing this route can do, and it is closed here in two ways:
|
|
9
|
+
//
|
|
10
|
+
// 1. STRUCTURALLY — every ssh this wizard runs, in this step and in the ssh
|
|
11
|
+
// transport (transport.ts), carries `-o BatchMode=yes`. BatchMode makes
|
|
12
|
+
// ssh refuse to ask: no passphrase prompt, no password prompt, no host-key
|
|
13
|
+
// question. A key that would have prompted fails instantly with a message
|
|
14
|
+
// instead of hanging forever with none. There is no code path in
|
|
15
|
+
// onboarding that builds an ssh command without it — `sshArgv` is the only
|
|
16
|
+
// builder, and it always prepends the options.
|
|
17
|
+
// 2. IN THE OPEN — this step probes the alias, the agent and a real
|
|
18
|
+
// connection BEFORE anything is minted, written or deployed, and when the
|
|
19
|
+
// agent is empty it hands the operator the exact command to run IN THEIR
|
|
20
|
+
// OWN SHELL. It cannot run `ssh-add` for them: the passphrase prompt
|
|
21
|
+
// belongs to their terminal, not ours. Saying so plainly is the whole
|
|
22
|
+
// point.
|
|
23
|
+
//
|
|
24
|
+
// Everything else here follows from that: the alias must be one ssh actually
|
|
25
|
+
// knows, the controller must have ansible-playbook (the deploy dies without
|
|
26
|
+
// it), and remote sudo must be passwordless (the playbook runs `become: true`,
|
|
27
|
+
// and a sudo password prompt is the same hang wearing a different hat).
|
|
28
|
+
import { sshIdentityLines, sshAgentUnavailable, sshConfigRows, SSH_HOST_KEY_FAILURE, SSH_DNS_FAILURE, SSH_TIMEOUT_FAILURE, SSH_ROUTE_FAILURE, } from "../../ssh-observation.js";
|
|
29
|
+
import { CHOICE_KEYS } from "../choices.js";
|
|
30
|
+
import { shellQuote } from "../../tui/remote.js";
|
|
31
|
+
import { SSH_ALIAS_RE, TOPOLOGY_STEP_ID, sshAliasOf, topologyOf } from "./topology.js";
|
|
32
|
+
export const SSH_PREFLIGHT_STEP_ID = "ssh_preflight";
|
|
33
|
+
/** Resolved login user, recorded for the inventory's `ansible_user`. */
|
|
34
|
+
export const SSH_USER_CHOICE_KEY = CHOICE_KEYS.sshUser;
|
|
35
|
+
/**
|
|
36
|
+
* The options EVERY onboarding ssh carries.
|
|
37
|
+
*
|
|
38
|
+
* `BatchMode=yes` is the load-bearing one (see the header): it turns every
|
|
39
|
+
* would-be prompt into an immediate, explained failure. `ConnectTimeout` keeps
|
|
40
|
+
* an unreachable box from eating the engine runner's whole budget.
|
|
41
|
+
*/
|
|
42
|
+
export const SSH_BATCH_OPTS = ["-o", "BatchMode=yes", "-o", "ConnectTimeout=10"];
|
|
43
|
+
/** The ONE ssh command builder in onboarding. Remote argv is quoted
|
|
44
|
+
* into a single command string, because ssh hands its arguments to a remote
|
|
45
|
+
* shell rather than execing them. */
|
|
46
|
+
export function sshArgv(host, remote) {
|
|
47
|
+
return [...SSH_BATCH_OPTS, host, remote.map(shellQuote).join(" ")];
|
|
48
|
+
}
|
|
49
|
+
/** How the same command reads when the operator types it themselves. */
|
|
50
|
+
export function sshCommandLine(host, remote) {
|
|
51
|
+
return `ssh ${host} ${remote.map(shellQuote).join(" ")}`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `ssh-add -l`, read totally. Exit 0 = identities listed, 1 = the agent is
|
|
55
|
+
* running but empty, 2 = there is no agent to talk to. Anything else is
|
|
56
|
+
* "unknown", which is never reported as a failure on its own — the connection
|
|
57
|
+
* probe is the authority, and this only shapes the advice it gives.
|
|
58
|
+
*/
|
|
59
|
+
export function parseSshAddList(code, stdout, stderr) {
|
|
60
|
+
const text = `${stdout}\n${stderr}`;
|
|
61
|
+
if (code === 0) {
|
|
62
|
+
const lines = sshIdentityLines(stdout);
|
|
63
|
+
return {
|
|
64
|
+
kind: "keys",
|
|
65
|
+
count: lines.length,
|
|
66
|
+
detail: lines.length === 1 ? "1 key" : `${lines.length} keys`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (/no identities/i.test(text))
|
|
70
|
+
return { kind: "empty", count: 0, detail: "the agent is running but holds no keys" };
|
|
71
|
+
if (sshAgentUnavailable(code, text)) {
|
|
72
|
+
return { kind: "no-agent", count: 0, detail: "no ssh agent is reachable from this shell" };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
kind: "unknown",
|
|
76
|
+
count: 0,
|
|
77
|
+
detail: (stderr || stdout).trim().slice(0, 200) || `ssh-add -l exited ${code}`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** Classify an ssh failure from its own words. Pure — the step turns this into
|
|
81
|
+
* advice, and the tests drive every branch without an ssh anywhere. */
|
|
82
|
+
export function classifySshFailure(stderr) {
|
|
83
|
+
const t = stderr.toLowerCase();
|
|
84
|
+
if (SSH_DNS_FAILURE.test(t) || /nodename nor servname/.test(t))
|
|
85
|
+
return "no-such-host";
|
|
86
|
+
if (SSH_HOST_KEY_FAILURE.test(t))
|
|
87
|
+
return "host-key";
|
|
88
|
+
if (/permission denied|no supported authentication|too many authentication failures|publickey/.test(t))
|
|
89
|
+
return "auth";
|
|
90
|
+
if (SSH_TIMEOUT_FAILURE.test(t) || /timed out|timeout/.test(t))
|
|
91
|
+
return "timeout";
|
|
92
|
+
if (SSH_ROUTE_FAILURE.test(t))
|
|
93
|
+
return "refused";
|
|
94
|
+
return "unknown";
|
|
95
|
+
}
|
|
96
|
+
/** The commands that load a key into the agent, run in the operator's own
|
|
97
|
+
* shell — starting an agent first when there is none. One rendering for every
|
|
98
|
+
* check that hands them out. */
|
|
99
|
+
export function agentLoadCommands(agent) {
|
|
100
|
+
return agent.kind === "no-agent"
|
|
101
|
+
? ' eval "$(ssh-agent -s)"\n ssh-add ~/.ssh/id_ed25519'
|
|
102
|
+
: " ssh-add ~/.ssh/id_ed25519";
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The remedy, in the operator's own shell, for a failed connection. `agent`
|
|
106
|
+
* shapes it because the same "Permission denied (publickey)" means two very
|
|
107
|
+
* different things depending on whether the agent is empty (your key is not
|
|
108
|
+
* loaded — the passphrase case) or full (the server does not have your key).
|
|
109
|
+
*/
|
|
110
|
+
export function connectionAdvice(failure, agent, alias) {
|
|
111
|
+
const batch = "Every ssh this wizard runs carries -o BatchMode=yes, so it fails in the open instead of hanging on a prompt you cannot see.";
|
|
112
|
+
switch (failure) {
|
|
113
|
+
case "no-such-host":
|
|
114
|
+
return (`ssh cannot resolve "${alias}" at all. Fix: it must be a name ssh knows — either a real hostname/IP, or a Host entry in ` +
|
|
115
|
+
`~/.ssh/config. Check with:\n ssh -G ${alias} | head -3\nand try \`ssh ${alias}\` in your own shell until that works; ` +
|
|
116
|
+
"then run this step again.");
|
|
117
|
+
case "host-key":
|
|
118
|
+
return ('ssh refused on the host key. That is deliberate: BatchMode never answers the "are you sure you want to continue ' +
|
|
119
|
+
`connecting?" question for you. Fix, in your own shell:\n ssh ${alias} true\naccept the fingerprint once (or fix a ` +
|
|
120
|
+
`changed key with \`ssh-keygen -R ${alias}\`), then run this step again. ${batch}`);
|
|
121
|
+
case "auth":
|
|
122
|
+
return agent.kind === "keys"
|
|
123
|
+
? `the connection reached ${alias} and it rejected your key (${agent.detail} loaded). Fix: the PUBLIC half of one of ` +
|
|
124
|
+
`those keys must be in ~/.ssh/authorized_keys on ${alias}. \`ssh-copy-id ${alias}\` does it if you can log in ` +
|
|
125
|
+
`another way. ${batch}`
|
|
126
|
+
: `your ssh agent has no usable key (${agent.detail}), so ${alias} had nothing to authenticate with. THIS IS THE ` +
|
|
127
|
+
"PASSPHRASE CASE, and it is the one that would otherwise hang a deploy halfway through:\n\n" +
|
|
128
|
+
`${agentLoadCommands(agent)}\n` +
|
|
129
|
+
"\nRun that IN YOUR OWN SHELL — the passphrase prompt belongs to your terminal and this wizard must never try to " +
|
|
130
|
+
`type into it. (Use the path of your own key if it is not id_ed25519.) Then run this step again. ${batch}`;
|
|
131
|
+
case "timeout":
|
|
132
|
+
return `the connection to ${alias} timed out. Fix: is the machine up, and is port 22 reachable from here (firewall, VPN, bastion)? ${batch}`;
|
|
133
|
+
case "refused":
|
|
134
|
+
return `${alias} refused the connection. Fix: sshd must be running and reachable on the port your config uses. ${batch}`;
|
|
135
|
+
default:
|
|
136
|
+
return (`ssh failed and did not say anything this step recognises. Fix: run \`ssh ${alias} true\` in your own shell — its ` +
|
|
137
|
+
`message is the one to act on. ${batch}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function run(runner, cmd, args) {
|
|
141
|
+
return runner.run(cmd, [...args]);
|
|
142
|
+
}
|
|
143
|
+
export function sshPreflightStep(opts = {}) {
|
|
144
|
+
const probeSudo = opts.probeSudo ?? true;
|
|
145
|
+
async function probe(ctx) {
|
|
146
|
+
const alias = sshAliasOf(ctx.choices);
|
|
147
|
+
if (alias === "" || !SSH_ALIAS_RE.test(alias)) {
|
|
148
|
+
return {
|
|
149
|
+
ok: false,
|
|
150
|
+
checks: [
|
|
151
|
+
{
|
|
152
|
+
name: "alias",
|
|
153
|
+
ok: false,
|
|
154
|
+
detail: `no ssh alias is recorded — run the ${TOPOLOGY_STEP_ID} step with choice: "vm" and ssh_host: "<alias>" first`,
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const { runner } = ctx.adapters;
|
|
160
|
+
const checks = [];
|
|
161
|
+
// 1. is there an ssh at all?
|
|
162
|
+
const version = await run(runner, "ssh", ["-V"]);
|
|
163
|
+
if (version.code !== 0) {
|
|
164
|
+
checks.push({
|
|
165
|
+
name: "ssh-binary",
|
|
166
|
+
ok: false,
|
|
167
|
+
detail: `\`ssh -V\` exited ${version.code} (${(version.stderr || version.stdout).trim() || "no output"}) — Fix: install an OpenSSH client`,
|
|
168
|
+
});
|
|
169
|
+
return { ok: false, checks };
|
|
170
|
+
}
|
|
171
|
+
checks.push({
|
|
172
|
+
name: "ssh-binary",
|
|
173
|
+
ok: true,
|
|
174
|
+
detail: (version.stderr || version.stdout).trim().split("\n")[0] ?? "ssh present",
|
|
175
|
+
});
|
|
176
|
+
// 2. does ssh know this alias, and as what?
|
|
177
|
+
const resolved = await run(runner, "ssh", ["-G", alias]);
|
|
178
|
+
if (resolved.code !== 0) {
|
|
179
|
+
checks.push({
|
|
180
|
+
name: "alias",
|
|
181
|
+
ok: false,
|
|
182
|
+
detail: `\`ssh -G ${alias}\` exited ${resolved.code}: ${(resolved.stderr || resolved.stdout).trim().slice(0, 300) || "no output"} — ` +
|
|
183
|
+
"Fix: that usually means ~/.ssh/config has an error, or the alias is not a name ssh can use at all",
|
|
184
|
+
});
|
|
185
|
+
return { ok: false, checks };
|
|
186
|
+
}
|
|
187
|
+
const facts = parseSshConfig(resolved.stdout);
|
|
188
|
+
if (facts.user !== "")
|
|
189
|
+
ctx.recordChoice(CHOICE_KEYS.sshUser, facts.user);
|
|
190
|
+
checks.push({
|
|
191
|
+
name: "alias",
|
|
192
|
+
ok: true,
|
|
193
|
+
detail: `${alias} → ${facts.user ? `${facts.user}@` : ""}${facts.hostname || alias}:${facts.port || "22"}` +
|
|
194
|
+
(facts.hostname === alias
|
|
195
|
+
? " (no ~/.ssh/config Host entry matched, so ssh treats the alias as the hostname itself)"
|
|
196
|
+
: ""),
|
|
197
|
+
});
|
|
198
|
+
// 3+4. What the agent holds, and then the authority: a real,
|
|
199
|
+
// non-interactive connection. The CONNECTION decides — an empty agent is
|
|
200
|
+
// perfectly fine when the key has no passphrase, and the agent line exists
|
|
201
|
+
// to shape the advice, never to fail the step on its own.
|
|
202
|
+
const agentRaw = await run(runner, "ssh-add", ["-l"]);
|
|
203
|
+
const agent = parseSshAddList(agentRaw.code, agentRaw.stdout, agentRaw.stderr);
|
|
204
|
+
const connect = await run(runner, "ssh", sshArgv(alias, ["true"]));
|
|
205
|
+
const connected = connect.code === 0;
|
|
206
|
+
checks.push({
|
|
207
|
+
name: "ssh-agent",
|
|
208
|
+
ok: agent.kind === "keys" || connected,
|
|
209
|
+
detail: agent.kind === "keys"
|
|
210
|
+
? `your ssh agent holds ${agent.detail} — a passphrase-protected key can be used without ever prompting`
|
|
211
|
+
: connected
|
|
212
|
+
? `${agent.detail}, and the connection below still succeeded — so your key has no passphrase and needs no agent`
|
|
213
|
+
: `${agent.detail}. If your key has a passphrase this fails the connection below rather than prompting, which is ` +
|
|
214
|
+
"deliberate. Load it in your own shell:\n" +
|
|
215
|
+
agentLoadCommands(agent),
|
|
216
|
+
});
|
|
217
|
+
if (!connected) {
|
|
218
|
+
const failure = classifySshFailure(connect.stderr || connect.stdout);
|
|
219
|
+
checks.push({
|
|
220
|
+
name: "connection",
|
|
221
|
+
ok: false,
|
|
222
|
+
detail: `\`${sshCommandLine(alias, ["true"])}\` failed (exit ${connect.code}): ` +
|
|
223
|
+
`${(connect.stderr || connect.stdout).trim().split("\n").slice(-2).join(" ").slice(0, 240) || "no output"}\n\n` +
|
|
224
|
+
connectionAdvice(failure, agent, alias),
|
|
225
|
+
});
|
|
226
|
+
return { ok: false, checks };
|
|
227
|
+
}
|
|
228
|
+
checks.push({
|
|
229
|
+
name: "connection",
|
|
230
|
+
ok: true,
|
|
231
|
+
detail: `\`${sshCommandLine(alias, ["true"])}\` succeeded without prompting for anything — the deploy cannot hang on a passphrase`,
|
|
232
|
+
});
|
|
233
|
+
// 5. passwordless sudo: the playbook runs as root on the box, and a sudo
|
|
234
|
+
// password prompt is the same hang in different clothes.
|
|
235
|
+
if (probeSudo) {
|
|
236
|
+
const sudo = await run(runner, "ssh", sshArgv(alias, ["sudo", "-n", "true"]));
|
|
237
|
+
checks.push(sudo.code === 0
|
|
238
|
+
? {
|
|
239
|
+
name: "remote-sudo",
|
|
240
|
+
ok: true,
|
|
241
|
+
detail: `sudo on ${alias} works without a password — the Ansible deploy can install packages and run Docker`,
|
|
242
|
+
}
|
|
243
|
+
: {
|
|
244
|
+
name: "remote-sudo",
|
|
245
|
+
ok: false,
|
|
246
|
+
detail: `\`sudo -n true\` on ${alias} exited ${sudo.code} (${(sudo.stderr || sudo.stdout).trim().slice(0, 200) || "no output"}). ` +
|
|
247
|
+
"The deploy runs as root on that machine (packages, Docker, the container), and a sudo PASSWORD PROMPT would hang " +
|
|
248
|
+
"it exactly the way an ssh passphrase would. Fix: give your login passwordless sudo there — on most clouds that is " +
|
|
249
|
+
"already true for the default user; otherwise add a sudoers line for it. (You can also deploy by hand with " +
|
|
250
|
+
"`ansible-playbook --ask-become-pass`, but then the wizard cannot drive it for you.)",
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// 6. the controller side: the deploy is an ansible-playbook run.
|
|
254
|
+
const ansible = await run(runner, "ansible-playbook", ["--version"]);
|
|
255
|
+
checks.push(ansible.code === 0
|
|
256
|
+
? {
|
|
257
|
+
name: "ansible",
|
|
258
|
+
ok: true,
|
|
259
|
+
detail: (ansible.stdout || ansible.stderr).trim().split("\n")[0] ??
|
|
260
|
+
"ansible-playbook present",
|
|
261
|
+
}
|
|
262
|
+
: {
|
|
263
|
+
name: "ansible",
|
|
264
|
+
ok: false,
|
|
265
|
+
detail: `\`ansible-playbook --version\` exited ${ansible.code} — the deploy IS an Ansible run from this machine, and ` +
|
|
266
|
+
"scripts/deploy.sh refuses without it. Fix: install Ansible here (`pipx install ansible`, `pip install --user " +
|
|
267
|
+
"ansible`, or your package manager). Nothing needs to be installed on the server by hand — the playbook does that.",
|
|
268
|
+
});
|
|
269
|
+
return {
|
|
270
|
+
ok: checks.every((c) => c.ok),
|
|
271
|
+
checks,
|
|
272
|
+
data: { alias, user: facts.user, hostname: facts.hostname },
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
id: SSH_PREFLIGHT_STEP_ID,
|
|
277
|
+
title: "ssh: prove the alias, the agent and the passphrase trap — before anything is deployed",
|
|
278
|
+
explain: "The very first thing the server route does, and deliberately so. It checks that ssh knows your alias, that your agent " +
|
|
279
|
+
"holds a usable key, that a real connection succeeds without prompting for anything, that sudo on that machine needs no " +
|
|
280
|
+
"password, and that this machine has Ansible. The one worth explaining out loud: a passphrase-protected key with no agent " +
|
|
281
|
+
"does not fail, it PROMPTS — and a prompt inside a deploy is an invisible hang. Every ssh here uses BatchMode, so it fails " +
|
|
282
|
+
"in the open instead, and when the agent is empty this step hands them the exact `ssh-add` line to run in their OWN shell.",
|
|
283
|
+
order: 22,
|
|
284
|
+
enabled: (choices) => topologyOf(choices) === "vm",
|
|
285
|
+
run: probe,
|
|
286
|
+
verify: probe,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/** `ssh -G <alias>` prints one lowercase `key value` per line. */
|
|
290
|
+
export function parseSshConfig(stdout) {
|
|
291
|
+
const facts = { hostname: "", user: "", port: "" };
|
|
292
|
+
for (const [key, value] of sshConfigRows(stdout)) {
|
|
293
|
+
if (key !== "hostname" && key !== "user" && key !== "port")
|
|
294
|
+
continue;
|
|
295
|
+
if (facts[key] === "")
|
|
296
|
+
facts[key] = value;
|
|
297
|
+
}
|
|
298
|
+
return facts;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=ssh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../../src/onboard/steps/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// Topology — the wizard's first real question, and the one that
|
|
2
|
+
// decides what the rest of the wizard even is.
|
|
3
|
+
//
|
|
4
|
+
// WHY IT SITS AT ORDER 20, between preflight (10) and LLM auth (30):
|
|
5
|
+
//
|
|
6
|
+
// * preflight (10) is not a question at all — it establishes that this
|
|
7
|
+
// machine can run *anything* (Node, Docker, a uid to build images with).
|
|
8
|
+
// It has to come first because a machine that cannot run Docker cannot run
|
|
9
|
+
// either topology, and asking someone to choose between two things they
|
|
10
|
+
// cannot have is not a question, it is a trap.
|
|
11
|
+
// * topology (20) comes next because every later step reads it: LLM auth's
|
|
12
|
+
// honest "how many browser logins are coming" answer differs by route,
|
|
13
|
+
// the ingress step's recommended default differs, config_fill only asks
|
|
14
|
+
// for an ssh alias on the VM route, and the whole bring-up tail is either
|
|
15
|
+
// `docker compose up` here or the Ansible deploy over there. Asking it
|
|
16
|
+
// later would mean asking questions whose answers we would then throw
|
|
17
|
+
// away.
|
|
18
|
+
// * the ssh preflight (22) follows IMMEDIATELY on the VM route — see
|
|
19
|
+
// ssh.ts. The alias and the agent are proven before a single credential is
|
|
20
|
+
// minted or a single config key written, because a dead alias found at
|
|
21
|
+
// deploy time has already cost the operator the entire interview.
|
|
22
|
+
//
|
|
23
|
+
// BOTH ANSWERS ARE FIRST-CLASS. "A VM or server over ssh" is advertised as
|
|
24
|
+
// the always-on recommendation (it is not the "advanced" path), and
|
|
25
|
+
// "this computer" is a complete, supported installation — the trade is stated
|
|
26
|
+
// in the operator's own terms and then they pick.
|
|
27
|
+
//
|
|
28
|
+
// SWITCHING IS A GUIDED, EXPLICIT ACT. A re-run that names a different
|
|
29
|
+
// topology does NOT silently reconfigure: it refuses once, says exactly what
|
|
30
|
+
// changes and what is left running where, and demands the confirmation phrase.
|
|
31
|
+
// The engine then does the rest by itself — the steps that belong to the old
|
|
32
|
+
// route go `disabled`, the new route's steps are pending, and the shared tail
|
|
33
|
+
// (verification, proof, the flip) re-verifies against the new transport and is
|
|
34
|
+
// demoted if it no longer holds. Nothing is torn down behind the operator's
|
|
35
|
+
// back: a stack on the machine they are switching away from keeps running
|
|
36
|
+
// until they stop it, and this step says so.
|
|
37
|
+
import { CHOICE_KEYS, TOPOLOGY_CHOICES, memberOf } from "../choices.js";
|
|
38
|
+
export const TOPOLOGY_STEP_ID = "topology";
|
|
39
|
+
/** The one place the topology is recorded — an alias of the shared key, so
|
|
40
|
+
* this step and every reader name the same declaration (src/onboard/choices.ts). */
|
|
41
|
+
export const TOPOLOGY_CHOICE_KEY = CHOICE_KEYS.topology;
|
|
42
|
+
/** The ssh alias of the review host, recorded on the VM route. config_fill's
|
|
43
|
+
* `[tui] ssh_host` question reads this key (its `from` list), so the operator
|
|
44
|
+
* is never asked for the same alias twice. */
|
|
45
|
+
export const SSH_ALIAS_CHOICE_KEY = CHOICE_KEYS.sshAlias;
|
|
46
|
+
/** The recorded topology. Absent ⇒ "local", the compose path, so a checklist
|
|
47
|
+
* that never recorded a topology keeps its meaning. */
|
|
48
|
+
export function topologyOf(choices) {
|
|
49
|
+
return choices[TOPOLOGY_CHOICE_KEY] === "vm" ? "vm" : "local";
|
|
50
|
+
}
|
|
51
|
+
/** Was a topology ever actually recorded? (`topologyOf` defaults; this does
|
|
52
|
+
* not — switching has to be able to tell "unset" from "local".) */
|
|
53
|
+
export function topologyRecorded(choices) {
|
|
54
|
+
const raw = choices[TOPOLOGY_CHOICE_KEY];
|
|
55
|
+
return typeof raw === "string" ? memberOf(TOPOLOGY_CHOICES, raw) : null;
|
|
56
|
+
}
|
|
57
|
+
export function sshAliasOf(choices) {
|
|
58
|
+
const raw = choices[SSH_ALIAS_CHOICE_KEY];
|
|
59
|
+
return typeof raw === "string" ? raw.trim() : "";
|
|
60
|
+
}
|
|
61
|
+
/** An ssh alias as it appears in ~/.ssh/config — a Host name, not a URL.
|
|
62
|
+
* Never a leading dash: ssh would read it as an option, not the destination. */
|
|
63
|
+
export const SSH_ALIAS_RE = /^[A-Za-z0-9._][A-Za-z0-9._-]*$/;
|
|
64
|
+
const TOPOLOGY_OPTION_METADATA = {
|
|
65
|
+
vm: {
|
|
66
|
+
headline: "A VM or server over ssh — RECOMMENDED, because a reviewer that is asleep reviews nothing",
|
|
67
|
+
tradeoffs: [
|
|
68
|
+
"it is on 24/7: pull requests opened while you sleep, while your laptop is shut, or while you are on a plane still get reviewed",
|
|
69
|
+
"you bring the box (any ssh-reachable Linux machine — a cheap cloud VM is plenty); the wizard does not create one for you",
|
|
70
|
+
"setup rides the same Ansible deploy the maintainers use, with every one of its preflights: clean tree, version-pin coherence, disk space, and a refusal while the bot is not drained and idle (no review rounds running)",
|
|
71
|
+
"your operator TUI reaches it over ssh, so you need an ssh alias and a key your agent can use — checked in the very next step, before anything is built",
|
|
72
|
+
"the recommended webhook ingress here is a named Cloudflare tunnel on your own domain: a permanent hostname, no rotation",
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
local: {
|
|
76
|
+
headline: "This computer — everything in Docker on the machine you are sitting at",
|
|
77
|
+
tradeoffs: [
|
|
78
|
+
"nothing else to own: `docker compose up` and the whole system is here — daemon, memory engine, tunnel",
|
|
79
|
+
"it reviews only while this machine is awake and the containers are running; close the lid and the reviewer stops",
|
|
80
|
+
"zero third-party signup on the default path: the quick tunnel needs no account, and the daemon re-points its own webhook URL when that hostname rotates",
|
|
81
|
+
"the honest way to try QuickReview, and a perfectly good permanent setup for one person on a desktop that stays on",
|
|
82
|
+
"you can switch to a server later by re-running this step — the answers you gave (repo, App, keys) are kept",
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export const TOPOLOGY_OPTIONS = TOPOLOGY_CHOICES.map((id) => ({
|
|
87
|
+
id,
|
|
88
|
+
...TOPOLOGY_OPTION_METADATA[id],
|
|
89
|
+
}));
|
|
90
|
+
/** The offer text — what the guide reads out when nothing is recorded yet. */
|
|
91
|
+
export function renderTopologyOptions() {
|
|
92
|
+
return TOPOLOGY_OPTIONS.map((o) => [`${o.id}: ${o.headline}`, ...o.tradeoffs.map((t) => ` - ${t}`)].join("\n")).join("\n\n");
|
|
93
|
+
}
|
|
94
|
+
/** Not "yes": changing where the system lives is worth a sentence. */
|
|
95
|
+
export const TOPOLOGY_SWITCH_CONFIRMATION = "SWITCH TOPOLOGY";
|
|
96
|
+
export function isSwitchConfirmation(value) {
|
|
97
|
+
return typeof value === "string" && value.trim().toUpperCase() === TOPOLOGY_SWITCH_CONFIRMATION;
|
|
98
|
+
}
|
|
99
|
+
/** What changes when the operator moves between the two routes — read out
|
|
100
|
+
* BEFORE the switch, never after it. */
|
|
101
|
+
export function switchConsequences(from, to) {
|
|
102
|
+
const lines = [
|
|
103
|
+
`You recorded "${from}" earlier and are now asking for "${to}". That is a real change of where your reviewer lives, so it is`,
|
|
104
|
+
"an explicit act rather than a quiet re-configuration. What happens:",
|
|
105
|
+
"",
|
|
106
|
+
to === "vm"
|
|
107
|
+
? " • the compose steps (bring the stack up) stop applying; the Ansible deploy over ssh takes their place"
|
|
108
|
+
: " • the ssh steps (ssh preflight, inventory, deploy) stop applying; `docker compose up` on this machine takes their place",
|
|
109
|
+
" • verification, the proof round and the go-live decision stay — they simply run against the new host, and any of them",
|
|
110
|
+
" that no longer holds there is marked unfinished again the next time the checklist re-verifies",
|
|
111
|
+
" • everything you have already answered is kept: the repo, the GitHub App, the labels, the memory keys, your config",
|
|
112
|
+
to === "vm"
|
|
113
|
+
? " • the ssh alias and a usable key are checked in the very next step, before anything is deployed"
|
|
114
|
+
: " • the TUI moves back to talking to local Docker; `[tui] ssh_host` stops being used",
|
|
115
|
+
"",
|
|
116
|
+
from === "local"
|
|
117
|
+
? " • NOTHING IS TORN DOWN. Containers already running on this machine keep running until you stop them yourself"
|
|
118
|
+
: " • NOTHING IS TORN DOWN. Anything already deployed on the server keeps running until you stop it yourself",
|
|
119
|
+
" (`docker compose down` here, or stopping the container on the server).",
|
|
120
|
+
"",
|
|
121
|
+
`If that is what you want, call this step again with choice: "${to}" and confirm: "${TOPOLOGY_SWITCH_CONFIRMATION}".`,
|
|
122
|
+
];
|
|
123
|
+
return lines.join("\n");
|
|
124
|
+
}
|
|
125
|
+
function choiceOf(input) {
|
|
126
|
+
const raw = String(input.choice ?? "")
|
|
127
|
+
.trim()
|
|
128
|
+
.toLowerCase();
|
|
129
|
+
if (raw === "vm" || raw === "server" || raw === "ssh")
|
|
130
|
+
return "vm";
|
|
131
|
+
if (raw === "local" || raw === "laptop" || raw === "this_computer")
|
|
132
|
+
return "local";
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function aliasOf(input, choices) {
|
|
136
|
+
const raw = input.ssh_host ?? input.alias;
|
|
137
|
+
const typed = typeof raw === "string" ? raw.trim() : "";
|
|
138
|
+
return typed !== "" ? typed : sshAliasOf(choices);
|
|
139
|
+
}
|
|
140
|
+
function offerCheck() {
|
|
141
|
+
return {
|
|
142
|
+
name: "choice",
|
|
143
|
+
ok: false,
|
|
144
|
+
detail: "Read both of these out, in this order, and let them pick. Neither answer is the advanced one.\n\n" +
|
|
145
|
+
`${renderTopologyOptions()}\n\n` +
|
|
146
|
+
'Then call this step again with choice: "vm" (and ssh_host: "<the alias from your ~/.ssh/config>") or choice: "local".',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export function topologyStep() {
|
|
150
|
+
return {
|
|
151
|
+
id: TOPOLOGY_STEP_ID,
|
|
152
|
+
title: "Where should your reviewer live?",
|
|
153
|
+
explain: "The first real question, and it steers everything after it. Two answers, both fully supported: a VM or server you " +
|
|
154
|
+
"reach over ssh — the always-on recommendation, because a reviewer that is asleep reviews nothing — or this computer, " +
|
|
155
|
+
"in Docker, which needs no server at all and is the honest way to try the system. Call this tool with no arguments to " +
|
|
156
|
+
"get both options with their real trade-offs, read them out, then call it again with their answer. On the server route " +
|
|
157
|
+
"ask for the ssh alias at the same time: it is the only extra thing that route needs from them.",
|
|
158
|
+
order: 20,
|
|
159
|
+
parameters: {
|
|
160
|
+
type: "object",
|
|
161
|
+
properties: {
|
|
162
|
+
choice: {
|
|
163
|
+
type: "string",
|
|
164
|
+
enum: TOPOLOGY_CHOICES,
|
|
165
|
+
description: 'Where the reviewer will run: "vm" (a VM/server over ssh) or "local" (this computer). Omit to read out both options.',
|
|
166
|
+
},
|
|
167
|
+
ssh_host: {
|
|
168
|
+
type: "string",
|
|
169
|
+
description: 'VM route only: the ssh alias of that machine, exactly as you would type it after `ssh`. Ignored for "local".',
|
|
170
|
+
},
|
|
171
|
+
confirm: {
|
|
172
|
+
type: "string",
|
|
173
|
+
description: `Only needed when CHANGING an already-recorded topology: the words ${TOPOLOGY_SWITCH_CONFIRMATION}.`,
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
async run(ctx) {
|
|
178
|
+
const choice = choiceOf(ctx.input);
|
|
179
|
+
const recorded = topologyRecorded(ctx.choices);
|
|
180
|
+
if (choice === null) {
|
|
181
|
+
const checks = [offerCheck()];
|
|
182
|
+
if (recorded !== null) {
|
|
183
|
+
checks.push({
|
|
184
|
+
name: "recorded",
|
|
185
|
+
ok: true,
|
|
186
|
+
detail: `"${recorded}" is recorded from an earlier run — calling this step with the same answer changes nothing.`,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return { ok: false, checks };
|
|
190
|
+
}
|
|
191
|
+
// Switching: explicit, guided, and never a side effect of a re-run.
|
|
192
|
+
if (recorded !== null && recorded !== choice && !isSwitchConfirmation(ctx.input.confirm)) {
|
|
193
|
+
return {
|
|
194
|
+
ok: false,
|
|
195
|
+
checks: [{ name: "switch", ok: false, detail: switchConsequences(recorded, choice) }],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const switching = recorded !== null && recorded !== choice;
|
|
199
|
+
const checks = [];
|
|
200
|
+
if (choice === "vm") {
|
|
201
|
+
const alias = aliasOf(ctx.input, ctx.choices);
|
|
202
|
+
if (alias === "") {
|
|
203
|
+
return {
|
|
204
|
+
ok: false,
|
|
205
|
+
checks: [
|
|
206
|
+
{
|
|
207
|
+
name: "ssh-alias",
|
|
208
|
+
ok: false,
|
|
209
|
+
detail: "the server route needs the ssh alias of that machine — the name you would type after `ssh`, as it appears in " +
|
|
210
|
+
'~/.ssh/config. Call this step again with choice: "vm" and ssh_host: "<alias>". (If you normally type a full ' +
|
|
211
|
+
"user@host, add a Host entry for it in ~/.ssh/config first: the deploy, the TUI and the memory forward all use " +
|
|
212
|
+
"that one name.)",
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (!SSH_ALIAS_RE.test(alias)) {
|
|
218
|
+
return {
|
|
219
|
+
ok: false,
|
|
220
|
+
checks: [
|
|
221
|
+
{
|
|
222
|
+
name: "ssh-alias",
|
|
223
|
+
ok: false,
|
|
224
|
+
detail: `"${alias}" is not an ssh alias — an alias is letters, digits, dots, dashes and underscores (a Host name from ` +
|
|
225
|
+
"~/.ssh/config), not a URL, not user@host and not a command. Nothing was recorded.",
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
ctx.recordChoice(CHOICE_KEYS.sshAlias, alias);
|
|
231
|
+
checks.push({
|
|
232
|
+
name: "ssh-alias",
|
|
233
|
+
ok: true,
|
|
234
|
+
detail: `${alias} recorded — the deploy, the operator TUI and the memory forward all use this one name, and the very next ` +
|
|
235
|
+
"step proves it works (alias, agent, and the passphrase trap) before anything is built or deployed",
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
ctx.recordChoice(CHOICE_KEYS.topology, choice);
|
|
239
|
+
const option = TOPOLOGY_OPTIONS.find((o) => o.id === choice);
|
|
240
|
+
checks.unshift({ name: "topology", ok: true, detail: `${option.id} — ${option.headline}` });
|
|
241
|
+
if (switching) {
|
|
242
|
+
checks.push({
|
|
243
|
+
name: "switch",
|
|
244
|
+
ok: true,
|
|
245
|
+
detail: `switched from "${recorded}" to "${choice}" on your explicit confirmation. Nothing was torn down: whatever is ` +
|
|
246
|
+
"already running where you came from keeps running until you stop it. Run the checklist status next — the steps " +
|
|
247
|
+
"that belong to the other route now show as skipped, and anything that no longer holds here is unfinished again.",
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
ok: true,
|
|
252
|
+
checks,
|
|
253
|
+
data: { topology: choice, recorded_at: ctx.adapters.clock().toISOString() },
|
|
254
|
+
};
|
|
255
|
+
},
|
|
256
|
+
async verify(ctx) {
|
|
257
|
+
const recorded = topologyRecorded(ctx.choices);
|
|
258
|
+
if (recorded === null) {
|
|
259
|
+
return {
|
|
260
|
+
ok: false,
|
|
261
|
+
checks: [
|
|
262
|
+
{
|
|
263
|
+
name: "topology",
|
|
264
|
+
ok: false,
|
|
265
|
+
detail: "no topology recorded yet — run this step: it is the question the rest of the wizard is shaped by",
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
const checks = [
|
|
271
|
+
{
|
|
272
|
+
name: "topology",
|
|
273
|
+
ok: true,
|
|
274
|
+
detail: `${recorded} — ${TOPOLOGY_OPTIONS.find((o) => o.id === recorded).headline}`,
|
|
275
|
+
},
|
|
276
|
+
];
|
|
277
|
+
if (recorded === "vm") {
|
|
278
|
+
const alias = sshAliasOf(ctx.choices);
|
|
279
|
+
checks.push(alias !== ""
|
|
280
|
+
? { name: "ssh-alias", ok: true, detail: `${alias} recorded as the review host` }
|
|
281
|
+
: {
|
|
282
|
+
name: "ssh-alias",
|
|
283
|
+
ok: false,
|
|
284
|
+
detail: 'the VM route is recorded but no ssh alias is — run this step again with choice: "vm" and ssh_host: "<alias>"',
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return { ok: checks.every((c) => c.ok), checks };
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=topology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../../src/onboard/steps/topology.ts"],"names":[],"mappings":"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"}
|