@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,474 @@
|
|
|
1
|
+
// The OpenViking server as a supervised child of the daemon.
|
|
2
|
+
//
|
|
3
|
+
// Why the daemon and not a second entrypoint process: the container has ONE
|
|
4
|
+
// PID 1 (docker's `init: true` reaps, the entrypoint execs the daemon), and a
|
|
5
|
+
// backgrounded server in the entrypoint would have no owner — nothing to
|
|
6
|
+
// notice a crash, nothing to fold its logs into `docker logs`, nothing to
|
|
7
|
+
// report it in the heartbeat. Here the daemon owns it end to end.
|
|
8
|
+
//
|
|
9
|
+
// Three properties this shape enforces rather than documents:
|
|
10
|
+
//
|
|
11
|
+
// * No boot ordering. `start()` never waits for the server to become ready;
|
|
12
|
+
// the daemon comes up regardless and rounds run memory-less until `/ready`
|
|
13
|
+
// passes. Nothing in this module can delay or block a review round.
|
|
14
|
+
// * Never gives up. A crash schedules a respawn on a capped backoff ladder,
|
|
15
|
+
// forever. An engine that stays down is worse than a slow retry, and every
|
|
16
|
+
// memory call site already degrades.
|
|
17
|
+
// * Never throws at the heartbeat. `status()` is synchronous, reads only
|
|
18
|
+
// cached samples, and returns a minimal block on any internal error — the
|
|
19
|
+
// status writer must not be able to fail on the memory engine.
|
|
20
|
+
//
|
|
21
|
+
// Monitoring only: RSS/CPU ride the heartbeat, with no RSS watchdog and no
|
|
22
|
+
// auto-restart on a memory budget. Do not add one.
|
|
23
|
+
//
|
|
24
|
+
// `[openviking] endpoint = "remote"` is the memory sidecar (docker/memory/):
|
|
25
|
+
// the server is some other container's process. This class then supervises
|
|
26
|
+
// nothing — no binary check, no spawn, no restart ladder — and keeps only the
|
|
27
|
+
// health loop, so the heartbeat, `onReady` and memory health read the sidecar
|
|
28
|
+
// the same way they read the child. `local` (the default) never reaches that
|
|
29
|
+
// branch: its code path is the one that was here before the switch.
|
|
30
|
+
import { existsSync } from "node:fs";
|
|
31
|
+
import { spawn as nodeSpawn } from "node:child_process";
|
|
32
|
+
import { openVikingBaseUrl, type OpenVikingConfig } from "../config.js";
|
|
33
|
+
import { probeHealth, type FetchLike } from "./health.js";
|
|
34
|
+
import { ProcSampler } from "./proc.js";
|
|
35
|
+
import type { OpenVikingHealth, OpenVikingStatus, ProcSample } from "./types.js";
|
|
36
|
+
|
|
37
|
+
/** The slice of ChildProcess this module uses — the whole spawn seam. */
|
|
38
|
+
export interface SupervisedChild {
|
|
39
|
+
readonly pid?: number | undefined;
|
|
40
|
+
stdout: { on(event: "data", cb: (chunk: unknown) => void): unknown } | null;
|
|
41
|
+
stderr: { on(event: "data", cb: (chunk: unknown) => void): unknown } | null;
|
|
42
|
+
on(event: "exit", cb: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;
|
|
43
|
+
on(event: "error", cb: (err: Error) => void): unknown;
|
|
44
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type SpawnFn = (
|
|
48
|
+
command: string,
|
|
49
|
+
args: string[],
|
|
50
|
+
options: { cwd?: string; env: NodeJS.ProcessEnv; stdio: ["ignore", "pipe", "pipe"] },
|
|
51
|
+
) => SupervisedChild;
|
|
52
|
+
|
|
53
|
+
/** A scheduled callback plus its canceller — the single timer seam, so tests
|
|
54
|
+
* drive restarts and health polls without real clocks. */
|
|
55
|
+
export type Schedule = (fn: () => void, ms: number) => () => void;
|
|
56
|
+
|
|
57
|
+
/** How long a SIGTERM'd child gets before SIGKILL on daemon shutdown. */
|
|
58
|
+
const STOP_GRACE_MS = 5_000;
|
|
59
|
+
|
|
60
|
+
/** A supervised child's stdout and stderr, line-buffered: each complete,
|
|
61
|
+
* non-blank line (trailing whitespace trimmed) goes to `onLine`; a partial
|
|
62
|
+
* chunk waits for the rest of its line. */
|
|
63
|
+
export function foldChildLines(child: SupervisedChild, onLine: (line: string) => void): void {
|
|
64
|
+
for (const stream of [child.stdout, child.stderr]) {
|
|
65
|
+
if (!stream) continue;
|
|
66
|
+
let buffer = "";
|
|
67
|
+
stream.on("data", (chunk: unknown) => {
|
|
68
|
+
buffer += String(chunk);
|
|
69
|
+
const lines = buffer.split("\n");
|
|
70
|
+
buffer = lines.pop() ?? "";
|
|
71
|
+
for (const line of lines) if (line.trim()) onLine(line.trimEnd());
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** The capped restart ladder: the delay before restart number `attempt + 1`
|
|
77
|
+
* (the last rung repeats; an empty ladder is 5 s). */
|
|
78
|
+
export function restartDelayMs(ladder: readonly number[], attempt: number): number {
|
|
79
|
+
const rungs = ladder.length > 0 ? ladder : [5000];
|
|
80
|
+
return rungs[Math.min(attempt, rungs.length - 1)]!;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Stop a child: SIGTERM, then SIGKILL after `STOP_GRACE_MS`; resolves at its
|
|
84
|
+
* exit, at the kill, or at once when the signal cannot be sent (already
|
|
85
|
+
* gone). Never rejects. */
|
|
86
|
+
export function terminateChild(child: SupervisedChild, schedule: Schedule): Promise<void> {
|
|
87
|
+
return new Promise<void>((resolve) => {
|
|
88
|
+
let settled = false;
|
|
89
|
+
const finish = (): void => {
|
|
90
|
+
if (settled) return;
|
|
91
|
+
settled = true;
|
|
92
|
+
resolve();
|
|
93
|
+
};
|
|
94
|
+
const cancelKill = schedule(() => {
|
|
95
|
+
try {
|
|
96
|
+
child.kill("SIGKILL");
|
|
97
|
+
} catch {
|
|
98
|
+
/* already gone */
|
|
99
|
+
}
|
|
100
|
+
finish();
|
|
101
|
+
}, STOP_GRACE_MS);
|
|
102
|
+
child.on("exit", () => {
|
|
103
|
+
cancelKill();
|
|
104
|
+
finish();
|
|
105
|
+
});
|
|
106
|
+
try {
|
|
107
|
+
child.kill("SIGTERM");
|
|
108
|
+
} catch {
|
|
109
|
+
cancelKill();
|
|
110
|
+
finish();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface SupervisorDeps {
|
|
116
|
+
cfg: OpenVikingConfig;
|
|
117
|
+
log: (msg: string, extra?: unknown) => void;
|
|
118
|
+
spawn?: SpawnFn;
|
|
119
|
+
fetchFn?: FetchLike;
|
|
120
|
+
now?: () => Date;
|
|
121
|
+
/** Test seam for the binary-presence guard. */
|
|
122
|
+
exists?: (path: string) => boolean;
|
|
123
|
+
sampler?: ProcSampler;
|
|
124
|
+
schedule?: Schedule;
|
|
125
|
+
/** Fired by the health loop each time `/ready` turns from not-ready to
|
|
126
|
+
* ready — the first pass after boot and again after every restart. The one
|
|
127
|
+
* hook for work that needs a LIVE server and must not be awaited at boot
|
|
128
|
+
* (the daemon materializes the memory root here). A throw is logged and
|
|
129
|
+
* swallowed: a callback cannot take the health loop down. */
|
|
130
|
+
onReady?: () => void;
|
|
131
|
+
/** The address the spawned server binds (`--host`), when it differs from
|
|
132
|
+
* the address the daemon probes (`cfg.host`). The sidecar binds every
|
|
133
|
+
* interface of its private network and probes itself on loopback. */
|
|
134
|
+
bindHost?: string;
|
|
135
|
+
/** A precondition for the first spawn — the local embedder the
|
|
136
|
+
* server's `/ready` probes. Polled every `pollMs` until `open()` holds or
|
|
137
|
+
* `maxWaitMs` has passed; past the bound the server starts anyway, said
|
|
138
|
+
* loudly (searches fail until the embedder serves — memory is degraded,
|
|
139
|
+
* never held back for good). A respawn never waits: a server crash is not
|
|
140
|
+
* the embedder's to gate, and `start()` still returns at once. */
|
|
141
|
+
startGate?: { open: () => boolean; maxWaitMs: number; pollMs?: number; what: string };
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const defaultSchedule: Schedule = (fn, ms) => {
|
|
145
|
+
const t = setTimeout(fn, ms);
|
|
146
|
+
t.unref?.();
|
|
147
|
+
return () => clearTimeout(t);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export class OpenVikingSupervisor {
|
|
151
|
+
private readonly cfg: OpenVikingConfig;
|
|
152
|
+
private readonly log: (msg: string, extra?: unknown) => void;
|
|
153
|
+
private readonly spawnFn: SpawnFn;
|
|
154
|
+
private readonly fetchFn: FetchLike | undefined;
|
|
155
|
+
private readonly now: () => Date;
|
|
156
|
+
private readonly exists: (path: string) => boolean;
|
|
157
|
+
private readonly sampler: ProcSampler;
|
|
158
|
+
private readonly schedule: Schedule;
|
|
159
|
+
private readonly onReady: (() => void) | undefined;
|
|
160
|
+
private readonly startGate: SupervisorDeps["startGate"];
|
|
161
|
+
private readonly bindHost: string;
|
|
162
|
+
private readonly remote: boolean;
|
|
163
|
+
private waitingSince: number | null = null;
|
|
164
|
+
private cancelGate: (() => void) | null = null;
|
|
165
|
+
|
|
166
|
+
private child: SupervisedChild | null = null;
|
|
167
|
+
private childPid: number | undefined;
|
|
168
|
+
private startedAt: number | null = null;
|
|
169
|
+
private attempt = 0;
|
|
170
|
+
private restarts = 0;
|
|
171
|
+
private stopping = false;
|
|
172
|
+
private started = false;
|
|
173
|
+
private unavailable = false;
|
|
174
|
+
|
|
175
|
+
private health: OpenVikingHealth | null = null;
|
|
176
|
+
/** Consecutive polls that reached the server but not its `/ready`. */
|
|
177
|
+
private notReadyPolls = 0;
|
|
178
|
+
private proc: ProcSample | undefined;
|
|
179
|
+
private lastExit: OpenVikingStatus["last_exit"];
|
|
180
|
+
private lastError: string | undefined;
|
|
181
|
+
|
|
182
|
+
private cancelRestart: (() => void) | null = null;
|
|
183
|
+
private cancelHealth: (() => void) | null = null;
|
|
184
|
+
|
|
185
|
+
constructor(deps: SupervisorDeps) {
|
|
186
|
+
this.cfg = deps.cfg;
|
|
187
|
+
this.log = deps.log;
|
|
188
|
+
this.spawnFn = deps.spawn ?? ((cmd, args, opts) => nodeSpawn(cmd, args, opts));
|
|
189
|
+
this.fetchFn = deps.fetchFn;
|
|
190
|
+
this.now = deps.now ?? (() => new Date());
|
|
191
|
+
this.exists = deps.exists ?? existsSync;
|
|
192
|
+
this.sampler = deps.sampler ?? new ProcSampler();
|
|
193
|
+
this.schedule = deps.schedule ?? defaultSchedule;
|
|
194
|
+
this.onReady = deps.onReady;
|
|
195
|
+
this.startGate = deps.startGate;
|
|
196
|
+
this.bindHost = deps.bindHost ?? deps.cfg.host;
|
|
197
|
+
this.remote = deps.cfg.endpoint === "remote";
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Spawn the server and arm the health loop. Synchronous and non-blocking:
|
|
201
|
+
* the daemon's boot never waits on the memory engine. */
|
|
202
|
+
start(): void {
|
|
203
|
+
if (this.started) return;
|
|
204
|
+
this.started = true;
|
|
205
|
+
if (!this.cfg.enabled) {
|
|
206
|
+
this.log("openviking: disabled in config.toml — the daemon runs memory-less");
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (this.remote) {
|
|
210
|
+
// The memory sidecar owns the server. Nothing to spawn, nothing to
|
|
211
|
+
// restart — a down sidecar is the container runtime's to restart —
|
|
212
|
+
// and the first probe is fired, never awaited.
|
|
213
|
+
this.log(
|
|
214
|
+
`openviking: endpoint = remote — the memory sidecar serves ${openVikingBaseUrl(this.cfg)}; the daemon only probes it`,
|
|
215
|
+
);
|
|
216
|
+
void this.poll().finally(() => this.armHealthLoop());
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// A dev PC has no venv. Report unavailable ONCE and stop; the binary will
|
|
220
|
+
// not appear without an image rebuild, so retrying is pure noise.
|
|
221
|
+
if (!this.exists(this.cfg.bin)) {
|
|
222
|
+
this.unavailable = true;
|
|
223
|
+
this.lastError = `binary not found: ${this.cfg.bin}`;
|
|
224
|
+
this.log(`openviking: ${this.lastError} — not supervising (rounds run memory-less)`);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (this.startGate && !this.gateOpen()) {
|
|
228
|
+
this.waitingSince = this.now().getTime();
|
|
229
|
+
this.log(`openviking: waiting for ${this.startGate.what} before starting the server`);
|
|
230
|
+
this.waitForGate();
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
this.spawnChild();
|
|
234
|
+
this.armHealthLoop();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
private gateOpen(): boolean {
|
|
238
|
+
try {
|
|
239
|
+
return this.startGate?.open() ?? true;
|
|
240
|
+
} catch (err) {
|
|
241
|
+
// A gate that throws is no reason to keep memory down.
|
|
242
|
+
this.log("openviking: start gate threw — starting the server", err);
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** Poll the start gate on the timer seam; spawn once it opens or
|
|
248
|
+
* its bound passes. */
|
|
249
|
+
private waitForGate(): void {
|
|
250
|
+
const gate = this.startGate;
|
|
251
|
+
if (!gate || this.stopping) return;
|
|
252
|
+
this.cancelGate = this.schedule(() => {
|
|
253
|
+
this.cancelGate = null;
|
|
254
|
+
if (this.stopping) return;
|
|
255
|
+
const waited = this.now().getTime() - (this.waitingSince ?? this.now().getTime());
|
|
256
|
+
if (this.gateOpen()) {
|
|
257
|
+
this.log(`openviking: ${gate.what} is ready — starting the server`);
|
|
258
|
+
} else if (waited >= gate.maxWaitMs) {
|
|
259
|
+
this.log(
|
|
260
|
+
`openviking: ${gate.what} is not ready after ${Math.round(waited / 1000)}s — starting the server anyway; memory search fails until it serves`,
|
|
261
|
+
);
|
|
262
|
+
} else {
|
|
263
|
+
this.waitForGate();
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
this.waitingSince = null;
|
|
267
|
+
this.spawnChild();
|
|
268
|
+
this.armHealthLoop();
|
|
269
|
+
}, gate.pollMs ?? 500);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private spawnChild(): void {
|
|
273
|
+
if (this.stopping) return;
|
|
274
|
+
this.cancelRestart = null;
|
|
275
|
+
this.notReadyPolls = 0;
|
|
276
|
+
const args = [
|
|
277
|
+
"--config",
|
|
278
|
+
this.cfg.config_file,
|
|
279
|
+
"--host",
|
|
280
|
+
this.bindHost,
|
|
281
|
+
"--port",
|
|
282
|
+
String(this.cfg.port),
|
|
283
|
+
];
|
|
284
|
+
try {
|
|
285
|
+
const child = this.spawnFn(this.cfg.bin, args, {
|
|
286
|
+
...(this.exists(this.cfg.home) ? { cwd: this.cfg.home } : {}),
|
|
287
|
+
env: { ...process.env, OPENVIKING_CONFIG_FILE: this.cfg.config_file },
|
|
288
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
289
|
+
});
|
|
290
|
+
this.child = child;
|
|
291
|
+
this.childPid = child.pid;
|
|
292
|
+
this.startedAt = this.now().getTime();
|
|
293
|
+
this.sampler.reset();
|
|
294
|
+
this.foldLogs(child);
|
|
295
|
+
child.on("error", (err) => {
|
|
296
|
+
// A spawn failure surfaces here, not as a throw. Treat it as an exit so
|
|
297
|
+
// the backoff ladder governs the retry.
|
|
298
|
+
this.lastError = err.message;
|
|
299
|
+
this.log("openviking: spawn error", err);
|
|
300
|
+
// Node emits `error` then `close` for a failed spawn — never `exit` —
|
|
301
|
+
// and leaves `pid` unset. An error on a child that HAS a pid (a failed
|
|
302
|
+
// kill) is not an exit: the live process stays tracked.
|
|
303
|
+
if (this.child !== child || child.pid !== undefined) return;
|
|
304
|
+
this.child = null;
|
|
305
|
+
this.childPid = undefined;
|
|
306
|
+
this.startedAt = null;
|
|
307
|
+
this.sampler.reset();
|
|
308
|
+
this.proc = undefined;
|
|
309
|
+
this.health = null;
|
|
310
|
+
this.scheduleRestart();
|
|
311
|
+
});
|
|
312
|
+
child.on("exit", (code, signal) => this.onExit(code, signal));
|
|
313
|
+
this.log(
|
|
314
|
+
`openviking: server started (pid ${child.pid ?? "?"}) on ${this.cfg.host}:${this.cfg.port}`,
|
|
315
|
+
);
|
|
316
|
+
} catch (err) {
|
|
317
|
+
this.child = null;
|
|
318
|
+
this.childPid = undefined;
|
|
319
|
+
this.lastError = err instanceof Error ? err.message : String(err);
|
|
320
|
+
this.log("openviking: spawn failed", err);
|
|
321
|
+
this.scheduleRestart();
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/** Line-buffered stdout/stderr into the daemon log — one place to read when
|
|
326
|
+
* something goes wrong, which is the whole point of supervising it here. */
|
|
327
|
+
private foldLogs(child: SupervisedChild): void {
|
|
328
|
+
foldChildLines(child, (line) => this.log(`openviking: ${line}`));
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private onExit(code: number | null, signal: NodeJS.Signals | null): void {
|
|
332
|
+
const upMs = this.startedAt !== null ? this.now().getTime() - this.startedAt : 0;
|
|
333
|
+
this.child = null;
|
|
334
|
+
this.childPid = undefined;
|
|
335
|
+
this.startedAt = null;
|
|
336
|
+
this.sampler.reset();
|
|
337
|
+
this.proc = undefined;
|
|
338
|
+
this.health = null;
|
|
339
|
+
this.notReadyPolls = 0;
|
|
340
|
+
this.lastExit = { code, signal, at: this.now().toISOString() };
|
|
341
|
+
if (this.stopping) return;
|
|
342
|
+
// A child that survived the reset window is not crash-looping: start the
|
|
343
|
+
// ladder over, so an unrelated crash months later retries in a second.
|
|
344
|
+
if (upMs >= this.cfg.restart_reset_after_s * 1000) this.attempt = 0;
|
|
345
|
+
this.log(
|
|
346
|
+
`openviking: server exited (code=${code ?? "null"} signal=${signal ?? "null"}) after ${Math.round(upMs / 1000)}s`,
|
|
347
|
+
);
|
|
348
|
+
this.scheduleRestart();
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
private scheduleRestart(): void {
|
|
352
|
+
if (this.stopping) return;
|
|
353
|
+
const delay = restartDelayMs(this.cfg.restart_backoff_ms, this.attempt);
|
|
354
|
+
this.attempt += 1;
|
|
355
|
+
this.restarts += 1;
|
|
356
|
+
this.log(`openviking: restarting in ${delay}ms (attempt ${this.attempt})`);
|
|
357
|
+
this.cancelRestart = this.schedule(() => this.spawnChild(), delay);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/** Self-rescheduling rather than an interval: two polls can never overlap,
|
|
361
|
+
* so a hung probe cannot pile up requests against a struggling server. */
|
|
362
|
+
private armHealthLoop(): void {
|
|
363
|
+
if (this.stopping) return;
|
|
364
|
+
this.cancelHealth = this.schedule(() => {
|
|
365
|
+
void this.poll().finally(() => this.armHealthLoop());
|
|
366
|
+
}, this.cfg.health_interval_s * 1000);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** One health + resource sample into the cache. Never rejects. */
|
|
370
|
+
async poll(): Promise<void> {
|
|
371
|
+
const wasReady = this.health?.ready ?? false;
|
|
372
|
+
const child = this.child;
|
|
373
|
+
let health: OpenVikingHealth;
|
|
374
|
+
try {
|
|
375
|
+
health = await probeHealth({
|
|
376
|
+
baseUrl: openVikingBaseUrl(this.cfg),
|
|
377
|
+
timeoutMs: this.cfg.health_timeout_ms,
|
|
378
|
+
...(this.fetchFn ? { fetchFn: this.fetchFn } : {}),
|
|
379
|
+
now: this.now,
|
|
380
|
+
});
|
|
381
|
+
} catch (err) {
|
|
382
|
+
// probeHealth is total, but a caller-supplied fetch seam is not.
|
|
383
|
+
health = {
|
|
384
|
+
reachable: false,
|
|
385
|
+
ready: false,
|
|
386
|
+
error: err instanceof Error ? err.message : String(err),
|
|
387
|
+
at: this.now().toISOString(),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
// A probe that raced an exit or a respawn describes a process that is no
|
|
391
|
+
// longer the tracked one: the exit already cleared the cache, and the next
|
|
392
|
+
// poll reads the new child. Installing it would report a dead server ready
|
|
393
|
+
// and fire onReady for it.
|
|
394
|
+
if (this.child !== child || this.stopping) return;
|
|
395
|
+
this.health = health;
|
|
396
|
+
// The server answered, so a spawn failure from before it came up is
|
|
397
|
+
// history: the probe's own error (if any) is the current one.
|
|
398
|
+
if (health.reachable) this.lastError = undefined;
|
|
399
|
+
this.notReadyPolls = this.health.reachable && !this.health.ready ? this.notReadyPolls + 1 : 0;
|
|
400
|
+
this.proc = this.childPid !== undefined ? this.sampler.sample(this.childPid) : undefined;
|
|
401
|
+
if (this.health.ready && !wasReady) {
|
|
402
|
+
try {
|
|
403
|
+
this.onReady?.();
|
|
404
|
+
} catch (err) {
|
|
405
|
+
this.log("openviking: onReady callback threw", err);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/** The `openviking` block of status.json. Synchronous, cached, total. */
|
|
411
|
+
status(): OpenVikingStatus {
|
|
412
|
+
try {
|
|
413
|
+
const base: OpenVikingStatus = {
|
|
414
|
+
enabled: this.cfg.enabled && !this.unavailable,
|
|
415
|
+
// A remote server has no child here: "running" is "answering".
|
|
416
|
+
running: this.remote ? (this.health?.reachable ?? false) : this.child !== null,
|
|
417
|
+
reachable: this.health?.reachable ?? false,
|
|
418
|
+
ready: this.health?.ready ?? false,
|
|
419
|
+
not_ready_polls: this.notReadyPolls,
|
|
420
|
+
pinned_version: this.cfg.version,
|
|
421
|
+
restarts: this.restarts,
|
|
422
|
+
};
|
|
423
|
+
const version = this.health?.version;
|
|
424
|
+
return {
|
|
425
|
+
...base,
|
|
426
|
+
...(this.remote ? { endpoint: "remote" as const } : {}),
|
|
427
|
+
...(this.childPid !== undefined ? { pid: this.childPid } : {}),
|
|
428
|
+
...(version ? { version, version_drift: version !== this.cfg.version } : {}),
|
|
429
|
+
...(this.startedAt !== null ? { started_at: new Date(this.startedAt).toISOString() } : {}),
|
|
430
|
+
...(this.lastExit ? { last_exit: this.lastExit } : {}),
|
|
431
|
+
...((this.lastError ?? this.health?.error)
|
|
432
|
+
? { last_error: this.lastError ?? this.health?.error }
|
|
433
|
+
: {}),
|
|
434
|
+
...(this.proc?.rss_bytes !== undefined ? { rss_bytes: this.proc.rss_bytes } : {}),
|
|
435
|
+
...(this.proc?.cpu_pct !== undefined ? { cpu_pct: this.proc.cpu_pct } : {}),
|
|
436
|
+
...(this.health ? { checked_at: this.health.at } : {}),
|
|
437
|
+
...(this.waitingSince !== null && this.startGate
|
|
438
|
+
? {
|
|
439
|
+
waiting_for: `${this.startGate.what} (since ${new Date(this.waitingSince).toISOString()})`,
|
|
440
|
+
}
|
|
441
|
+
: {}),
|
|
442
|
+
};
|
|
443
|
+
} catch {
|
|
444
|
+
return {
|
|
445
|
+
enabled: false,
|
|
446
|
+
running: false,
|
|
447
|
+
reachable: false,
|
|
448
|
+
ready: false,
|
|
449
|
+
pinned_version: this.cfg.version,
|
|
450
|
+
restarts: this.restarts,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/** SIGTERM, then SIGKILL after the grace window. Bounded, so daemon shutdown
|
|
456
|
+
* can await it without risking a hang. */
|
|
457
|
+
async stop(): Promise<void> {
|
|
458
|
+
if (this.stopping) return;
|
|
459
|
+
this.stopping = true;
|
|
460
|
+
this.cancelRestart?.();
|
|
461
|
+
this.cancelRestart = null;
|
|
462
|
+
this.cancelHealth?.();
|
|
463
|
+
this.cancelHealth = null;
|
|
464
|
+
this.cancelGate?.();
|
|
465
|
+
this.cancelGate = null;
|
|
466
|
+
this.waitingSince = null;
|
|
467
|
+
const child = this.child;
|
|
468
|
+
if (!child) return;
|
|
469
|
+
await terminateChild(child, this.schedule);
|
|
470
|
+
this.child = null;
|
|
471
|
+
this.childPid = undefined;
|
|
472
|
+
this.log("openviking: server stopped");
|
|
473
|
+
}
|
|
474
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Shared shapes for the OpenViking runtime. Kept in their own module
|
|
2
|
+
// so `src/state.ts` can type the heartbeat block without importing the
|
|
3
|
+
// supervisor (and its child-process machinery) into every status writer.
|
|
4
|
+
|
|
5
|
+
/** One health sample: what `/health` and `/ready` said, plus what it cost. */
|
|
6
|
+
export interface OpenVikingHealth {
|
|
7
|
+
/** `/health` answered successfully (a non-2xx answer reads as unreachable,
|
|
8
|
+
* with the status in `error`). */
|
|
9
|
+
reachable: boolean;
|
|
10
|
+
/** `/ready` returned 200 — AGFS, VectorDB, key manager and embedding are all
|
|
11
|
+
* usable. 503 means "up but not serving memory yet", which is a legitimate
|
|
12
|
+
* steady state during warm-up and must never look like a crash. */
|
|
13
|
+
ready: boolean;
|
|
14
|
+
/** Server-reported version from `/health` (unauthenticated). */
|
|
15
|
+
version?: string;
|
|
16
|
+
/** Why the probe failed, when it did. Never thrown — always reported. */
|
|
17
|
+
error?: string;
|
|
18
|
+
/** ISO instant of the probe. */
|
|
19
|
+
at: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** How a supervised child last exited. */
|
|
23
|
+
export interface ChildExit {
|
|
24
|
+
code: number | null;
|
|
25
|
+
signal: string | null;
|
|
26
|
+
at: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A `/proc/<pid>` sample of the supervised child. */
|
|
30
|
+
export interface ProcSample {
|
|
31
|
+
rss_bytes: number;
|
|
32
|
+
/** Percent of ONE core since the previous sample (so 200 = both cores of the
|
|
33
|
+
* 2-CPU cap). Absent on the first sample — a rate needs two points. */
|
|
34
|
+
cpu_pct?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** An embedder identity — provider, model and dimension, never a credential.
|
|
38
|
+
* The three keys the server's own compatibility check compares. */
|
|
39
|
+
export interface Embedder {
|
|
40
|
+
provider: string;
|
|
41
|
+
model: string;
|
|
42
|
+
dimension: number;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** One namespace row of the re-embed journal (scripts/openviking-reembed.mjs). */
|
|
46
|
+
export interface ReembedNamespace {
|
|
47
|
+
/** `operator` = a namespace whose key this host does not hold; its holder
|
|
48
|
+
* rebuilds it (`qcr memory reembed`) and receipts it (`settle`). */
|
|
49
|
+
state: "pending" | "failed" | "completed" | "operator";
|
|
50
|
+
at?: string;
|
|
51
|
+
attempts?: number;
|
|
52
|
+
detail?: string;
|
|
53
|
+
task_id?: string;
|
|
54
|
+
scanned_records?: number;
|
|
55
|
+
rebuilt_records?: number;
|
|
56
|
+
failed_records?: number;
|
|
57
|
+
unsupported_records?: number;
|
|
58
|
+
settled_by?: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** What the script's `journalStatus` answers — the journal, read. */
|
|
62
|
+
export interface ReembedJournalStatus {
|
|
63
|
+
state: "none" | "pending" | "failed" | "completed" | "unreadable";
|
|
64
|
+
embedder?: Embedder;
|
|
65
|
+
previous?: Embedder | null;
|
|
66
|
+
reset_at?: string;
|
|
67
|
+
moved_to?: string;
|
|
68
|
+
awaiting_operator?: string[];
|
|
69
|
+
namespaces?: Record<string, ReembedNamespace>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The `reembed` block inside `openviking`: the embedder migration
|
|
74
|
+
* as the daemon sees it. `unknown` means the journal could not be read at all
|
|
75
|
+
* — never folded into `none`.
|
|
76
|
+
*/
|
|
77
|
+
export interface ReembedStatus extends Omit<ReembedJournalStatus, "state"> {
|
|
78
|
+
state: ReembedJournalStatus["state"] | "unknown";
|
|
79
|
+
/** Resume attempts this daemon process has made. */
|
|
80
|
+
attempts: number;
|
|
81
|
+
last_run_at?: string;
|
|
82
|
+
last_error?: string;
|
|
83
|
+
/** config.toml `[openviking] embedding_*` names a different embedder than
|
|
84
|
+
* the ov.conf the entrypoint rendered — reported, never corrected here.
|
|
85
|
+
* Both sides are spelled as ov.conf spells them (`ovConfEmbedder`): under
|
|
86
|
+
* `local` that is the engine's OpenAI-compatible provider and the loopback
|
|
87
|
+
* `api_base` of the local embedder. */
|
|
88
|
+
config_drift?: {
|
|
89
|
+
config_toml: Embedder & { api_base?: string };
|
|
90
|
+
ov_conf: Embedder & { api_base?: string };
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The `embedder` block inside `openviking`: the local English
|
|
96
|
+
* embedder the daemon supervises beside the server. `off` = not the embedder
|
|
97
|
+
* in use (a hosted opt-in, or an ov.conf that does not route to it — `reason`
|
|
98
|
+
* says which); `unavailable` = a file it needs is missing (reported once, never
|
|
99
|
+
* retried); `supervised` = the daemon runs it, `ready` once `/health` answers.
|
|
100
|
+
*/
|
|
101
|
+
export interface LocalEmbedderStatus {
|
|
102
|
+
state: "off" | "unavailable" | "supervised";
|
|
103
|
+
reason?: string;
|
|
104
|
+
model: string;
|
|
105
|
+
port: number;
|
|
106
|
+
threads: number;
|
|
107
|
+
running: boolean;
|
|
108
|
+
ready: boolean;
|
|
109
|
+
restarts: number;
|
|
110
|
+
pid?: number;
|
|
111
|
+
started_at?: string;
|
|
112
|
+
last_exit?: ChildExit;
|
|
113
|
+
last_error?: string;
|
|
114
|
+
checked_at?: string;
|
|
115
|
+
rss_bytes?: number;
|
|
116
|
+
cpu_pct?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* The `openviking` block of `state/status.json`.
|
|
121
|
+
*
|
|
122
|
+
* The supervisor's fields are a CACHED read: `OpenVikingSupervisor.status()`
|
|
123
|
+
* is synchronous and never throws, because the heartbeat writer must not be
|
|
124
|
+
* able to fail — or block — on the memory engine. The `reembed` block is the
|
|
125
|
+
* exception: its status rereads the journal file synchronously.
|
|
126
|
+
*/
|
|
127
|
+
export interface OpenVikingStatus {
|
|
128
|
+
enabled: boolean;
|
|
129
|
+
/** Present (as "remote") only when the server is the memory sidecar's:
|
|
130
|
+
* the daemon probes it and supervises nothing, so `running` means
|
|
131
|
+
* "reachable". Absent for the in-container server. */
|
|
132
|
+
endpoint?: "remote";
|
|
133
|
+
/** The supervisor believes a child process is alive. */
|
|
134
|
+
running: boolean;
|
|
135
|
+
pid?: number;
|
|
136
|
+
/** `/health` answered successfully on the last poll. */
|
|
137
|
+
reachable: boolean;
|
|
138
|
+
/** `/ready` returned 200 on the last poll — the gate that matters. */
|
|
139
|
+
ready: boolean;
|
|
140
|
+
/** Consecutive polls where `/health` answered but `/ready` did not (0 once
|
|
141
|
+
* ready again or unreachable). One slow `/ready` — it runs an embedding,
|
|
142
|
+
* and the one-thread embedder may be busy with a case batch — is no
|
|
143
|
+
* verdict on its own (`memoryServing`). Absent from an older daemon. */
|
|
144
|
+
not_ready_polls?: number;
|
|
145
|
+
/** Server-reported version. */
|
|
146
|
+
version?: string;
|
|
147
|
+
/** config.toml `[openviking] version` — the triple-mirrored pin. */
|
|
148
|
+
pinned_version: string;
|
|
149
|
+
/** Reported version present and != the pin. Absent when unknown. */
|
|
150
|
+
version_drift?: boolean;
|
|
151
|
+
/** Restarts since the daemon booted. */
|
|
152
|
+
restarts: number;
|
|
153
|
+
/** ISO instant the current child started. */
|
|
154
|
+
started_at?: string;
|
|
155
|
+
last_exit?: ChildExit;
|
|
156
|
+
/** Last spawn/probe failure, human-readable. */
|
|
157
|
+
last_error?: string;
|
|
158
|
+
/** Resident set size of the server process (measured ~400 MiB idle, ~460 MiB
|
|
159
|
+
* warm). Monitoring only — there is no RSS watchdog and no auto-restart on a
|
|
160
|
+
* memory budget; do not add one. */
|
|
161
|
+
rss_bytes?: number;
|
|
162
|
+
/** Percent of one core since the previous sample. CPU is the cost to watch
|
|
163
|
+
* (~1.63 core-seconds per ~500 B write on the 2-core quota). */
|
|
164
|
+
cpu_pct?: number;
|
|
165
|
+
/** ISO instant of the last health poll. */
|
|
166
|
+
checked_at?: string;
|
|
167
|
+
/** The server's first start is held for this (the local embedder its
|
|
168
|
+
* `/ready` probes), bounded. Absent once it started. */
|
|
169
|
+
waiting_for?: string;
|
|
170
|
+
/** The embedder migration. Absent when no driver runs. */
|
|
171
|
+
reembed?: ReembedStatus;
|
|
172
|
+
/** The local English embedder. Absent when no supervisor runs. */
|
|
173
|
+
embedder?: LocalEmbedderStatus;
|
|
174
|
+
}
|