@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,24 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# render-review.sh — render this round's review body and inline comments from
|
|
3
|
+
# its findings record (`[review] render_outputs`, packages/pi-plugin/src/reviewrender.ts).
|
|
4
|
+
#
|
|
5
|
+
# reads state/findings/pr-<n>-round-<k>.json
|
|
6
|
+
# writes state/pr-<n>-round-<k>-review.md and state/pr-<n>-round-<k>-comments.json
|
|
7
|
+
#
|
|
8
|
+
# It posts nothing and reaches nothing outside state/: the session then posts
|
|
9
|
+
# those two files through post-review.sh / approve-pr.sh, so every posting-time
|
|
10
|
+
# guard still applies.
|
|
11
|
+
#
|
|
12
|
+
# Usage: render-review.sh <pr-number> <round-number>
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
16
|
+
. "$ROOT/scripts/install-locator.sh"
|
|
17
|
+
CONFIG="$(qcr_locate_config "$ROOT")" || exit 1
|
|
18
|
+
|
|
19
|
+
die() { echo "render-review: $*" >&2; exit 1; }
|
|
20
|
+
PR="${1:-}"; ROUND="${2:-}"
|
|
21
|
+
[[ "$PR" =~ ^[0-9]+$ && "$ROUND" =~ ^[0-9]+$ ]] || die "usage: render-review.sh <pr-number> <round-number>"
|
|
22
|
+
|
|
23
|
+
BOT="$(sed -n '/^\[github\]/,/^\[/p' "$CONFIG" | sed -n 's/^[[:space:]]*bot_login[[:space:]]*=[[:space:]]*"\{0,1\}\([^"#]*\)"\{0,1\}.*/\1/p' | head -n1 | sed 's/[[:space:]]*$//' || true)"
|
|
24
|
+
exec node "$ROOT/dist/src/reviewrendercli.js" "$ROOT" "$PR" "$ROUND" "$BOT"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# reply-thread.sh — reply to an existing PR review comment (author ping-pong).
|
|
3
|
+
#
|
|
4
|
+
# A thin client of the daemon's post endpoint (src/ipc/postshim.ts). The host
|
|
5
|
+
# a session runs on holds no GitHub credential and no config: the daemon
|
|
6
|
+
# builds the payload, runs the posting-time guards and posts through the one
|
|
7
|
+
# MutationGate with the install's dry_run. This script keeps its seeded name
|
|
8
|
+
# and arguments and does nothing else; without the worker socket and the
|
|
9
|
+
# capability fd in env the client refuses.
|
|
10
|
+
#
|
|
11
|
+
# Usage: reply-thread.sh <pr-number> <comment-id> <body-file>
|
|
12
|
+
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
16
|
+
exec node "$ROOT/dist/src/ipc/postshim.js" reply "$@"
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""required-passes.py — the posting route's required-pass check.
|
|
3
|
+
|
|
4
|
+
required-passes.py <state.db> <round-progress-dir> <pr> <round_no>
|
|
5
|
+
|
|
6
|
+
Prints one line and exits:
|
|
7
|
+
0 "complete" or "unknown: <why>" — posting may go on
|
|
8
|
+
3 "missing: <lens> (...)" — a required pass failed and never
|
|
9
|
+
completed; post NOTHING
|
|
10
|
+
The shell mirror of src/requiredpasses.ts (`requiredPassGap`): the required
|
|
11
|
+
rows are the round's recorded plan rows marked `required` by the plan builder
|
|
12
|
+
(pass-baseline and the risk passes), the evidence is the session's live
|
|
13
|
+
round-progress snapshot. Only positive evidence blocks: an unreadable plan supplies
|
|
14
|
+
no required rows, so the result is complete; with required rows, an unreadable
|
|
15
|
+
snapshot, or a snapshot of another round, is unknown and never blocks.
|
|
16
|
+
tests/required-passes.test.ts runs this against the TypeScript rule.
|
|
17
|
+
"""
|
|
18
|
+
import json
|
|
19
|
+
import os
|
|
20
|
+
import re
|
|
21
|
+
import sqlite3
|
|
22
|
+
import sys
|
|
23
|
+
|
|
24
|
+
TIER_SUFFIX = re.compile(r"--(?:terra-med|sol-med|sol-high)$")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def lens_for_agent(agent):
|
|
28
|
+
return TIER_SUFFIX.sub("", agent)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def load_plans(db, pr, round_no):
|
|
32
|
+
try:
|
|
33
|
+
con = sqlite3.connect(f"file:{db}?mode=ro", uri=True, timeout=5)
|
|
34
|
+
try:
|
|
35
|
+
try:
|
|
36
|
+
row = con.execute(
|
|
37
|
+
"SELECT pass_plan, sweep_plan FROM rounds WHERE pr = ? AND round_no = ? ORDER BY id DESC LIMIT 1",
|
|
38
|
+
(pr, round_no),
|
|
39
|
+
).fetchone()
|
|
40
|
+
except sqlite3.OperationalError:
|
|
41
|
+
# Older databases predate the optional pre-approval sweep.
|
|
42
|
+
row = con.execute(
|
|
43
|
+
"SELECT pass_plan, NULL FROM rounds WHERE pr = ? AND round_no = ? ORDER BY id DESC LIMIT 1",
|
|
44
|
+
(pr, round_no),
|
|
45
|
+
).fetchone()
|
|
46
|
+
finally:
|
|
47
|
+
con.close()
|
|
48
|
+
except Exception:
|
|
49
|
+
return (None, None)
|
|
50
|
+
if not row:
|
|
51
|
+
return (None, None)
|
|
52
|
+
def parse(raw):
|
|
53
|
+
try:
|
|
54
|
+
plan = json.loads(raw)
|
|
55
|
+
return plan if isinstance(plan, list) else None
|
|
56
|
+
except Exception:
|
|
57
|
+
return None
|
|
58
|
+
return (parse(row[0]), parse(row[1]))
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def load_progress(progress_dir, pr):
|
|
62
|
+
try:
|
|
63
|
+
with open(os.path.join(progress_dir, f"pr-{pr}.json")) as fh:
|
|
64
|
+
value = json.load(fh)
|
|
65
|
+
except Exception:
|
|
66
|
+
return None
|
|
67
|
+
if not isinstance(value, dict) or value.get("pr") != pr or not isinstance(value.get("agents"), list):
|
|
68
|
+
return None
|
|
69
|
+
return value
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def gap(plan, progress, round_no, sweep_plan=None):
|
|
73
|
+
required = {}
|
|
74
|
+
for phase, rows in (("plan", plan), ("sweep", sweep_plan)):
|
|
75
|
+
for row in rows or []:
|
|
76
|
+
if isinstance(row, dict) and row.get("required") is True and isinstance(row.get("lens"), str):
|
|
77
|
+
key = (phase, row["lens"])
|
|
78
|
+
required[key] = required.get(key, 0) + 1
|
|
79
|
+
if not required:
|
|
80
|
+
return ("complete", None)
|
|
81
|
+
if progress is None:
|
|
82
|
+
return ("unknown", "no readable round-progress snapshot")
|
|
83
|
+
if progress.get("round_no") != round_no:
|
|
84
|
+
return ("unknown", f"round-progress snapshot is for round {progress.get('round_no', '?')}, not {round_no}")
|
|
85
|
+
missing = []
|
|
86
|
+
for (phase, lens), rows in required.items():
|
|
87
|
+
runs = [
|
|
88
|
+
a for a in progress["agents"]
|
|
89
|
+
if isinstance(a, dict) and isinstance(a.get("agent"), str) and lens_for_agent(a["agent"]) == lens
|
|
90
|
+
and (a.get("phase") == "sweep" if phase == "sweep" else a.get("phase") in (None, "plan"))
|
|
91
|
+
]
|
|
92
|
+
completed = sum(1 for a in runs if a.get("status") == "completed")
|
|
93
|
+
failed = [a for a in runs if a.get("status") == "failed"]
|
|
94
|
+
if failed and completed < rows:
|
|
95
|
+
errors = "; ".join(a.get("error") or "failed" for a in failed)
|
|
96
|
+
missing.append(f"{'sweep ' if phase == 'sweep' else ''}{lens} ({completed}/{rows} completed, {len(failed)} failed: {errors})")
|
|
97
|
+
return ("missing", ", ".join(missing)) if missing else ("complete", None)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def main(argv):
|
|
101
|
+
if len(argv) != 5 or not argv[3].isdigit() or not argv[4].isdigit():
|
|
102
|
+
print("unknown: usage: required-passes.py <state.db> <round-progress-dir> <pr> <round_no>")
|
|
103
|
+
return 0
|
|
104
|
+
db, progress_dir, pr, round_no = argv[1], argv[2], int(argv[3]), int(argv[4])
|
|
105
|
+
plan, sweep_plan = load_plans(db, pr, round_no)
|
|
106
|
+
state, detail = gap(plan, load_progress(progress_dir, pr), round_no, sweep_plan)
|
|
107
|
+
print(state if detail is None else f"{state}: {detail}")
|
|
108
|
+
return 3 if state == "missing" else 0
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == "__main__":
|
|
112
|
+
sys.exit(main(sys.argv))
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# smoke-companion.sh — the manual checklist for the local companion.
|
|
3
|
+
# `npm run smoke:companion`.
|
|
4
|
+
#
|
|
5
|
+
# Unlike scripts/companion-e2e.sh (throwaway container, fake sinks, proves the
|
|
6
|
+
# plumbing) this walks the REAL companion the way `qcr tui` does it:
|
|
7
|
+
#
|
|
8
|
+
# 1. the image builds / is present
|
|
9
|
+
# 2. qcr companion up → status running → adopt is idempotent
|
|
10
|
+
# 3. pi auth persisted on the pihome volume (SKIPPED until /login has run)
|
|
11
|
+
# 4. the container holds no key file (only the agent socket, ssh config and
|
|
12
|
+
# known_hosts, rule 8), ssh to the VM works through the agent when the
|
|
13
|
+
# host has one, and OpenViking is reached through the memory forward
|
|
14
|
+
# 5. an overseer inject lands in the daemon's inject dir — DRY BY DEFAULT:
|
|
15
|
+
# prints the exact command; only --live actually writes to the VM
|
|
16
|
+
# 6. daily rollover on a faked date (QCR_FAKE_TODAY) against the real
|
|
17
|
+
# container, into temp state — the persistent rollover state is untouched
|
|
18
|
+
# 7. qcr companion down leaves the volumes (and the conversation) alone
|
|
19
|
+
#
|
|
20
|
+
# Nothing here mutates GitHub. Step 5 is the only step that can touch the VM at
|
|
21
|
+
# all, and it is opt-in.
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
ROOT="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/.." && pwd)"
|
|
25
|
+
LIVE=0
|
|
26
|
+
[[ "${1:-}" == "--live" ]] && LIVE=1
|
|
27
|
+
|
|
28
|
+
PASS=0
|
|
29
|
+
FAIL=0
|
|
30
|
+
SKIP=0
|
|
31
|
+
pass() { printf 'PASS %s\n' "$1"; PASS=$((PASS + 1)); }
|
|
32
|
+
fail() { printf 'FAIL %s\n' "$1"; FAIL=$((FAIL + 1)); }
|
|
33
|
+
skip() { printf 'SKIP %s\n' "$1"; SKIP=$((SKIP + 1)); }
|
|
34
|
+
step() { printf '\n--- %s\n' "$1"; }
|
|
35
|
+
|
|
36
|
+
command -v docker >/dev/null 2>&1 || { echo "smoke:companion: docker is required" >&2; exit 2; }
|
|
37
|
+
|
|
38
|
+
WORK="$(mktemp -d -t qcr-companion-smoke-XXXXXX)"
|
|
39
|
+
# A run that did not succeed keeps the directory: its failure lines point at build.log and ssh.log.
|
|
40
|
+
trap 'rc=$?; if [[ "$rc" -eq 0 ]]; then rm -rf "$WORK"; else echo "smoke:companion: logs kept in $WORK" >&2; fi' EXIT
|
|
41
|
+
|
|
42
|
+
# dist must exist before any of the node one-liners below.
|
|
43
|
+
(cd "$ROOT" && npm run --silent build)
|
|
44
|
+
|
|
45
|
+
# Config values, read once through the same loader the TUI uses. The emitted
|
|
46
|
+
# lines are plain KEY="value" pairs; a value containing a double quote or a
|
|
47
|
+
# backslash is rejected rather than eval'd.
|
|
48
|
+
CONF="$(cd "$ROOT" && node --input-type=module -e '
|
|
49
|
+
const { loadConfig } = await import("./dist/src/config.js");
|
|
50
|
+
const c = loadConfig();
|
|
51
|
+
const emit = (k, v) => {
|
|
52
|
+
if (/["\\$`]/.test(String(v))) throw new Error(`unsafe config value for ${k}: ${v}`);
|
|
53
|
+
console.log(`${k}="${v}"`);
|
|
54
|
+
};
|
|
55
|
+
emit("CONTAINER", c.companion.container_name);
|
|
56
|
+
emit("IMAGE", c.companion.image);
|
|
57
|
+
emit("PIHOME", c.companion.pihome_volume);
|
|
58
|
+
emit("SESSION", c.companion.session);
|
|
59
|
+
emit("SSH_HOST", c.tui.ssh_host);
|
|
60
|
+
emit("VM_CONTAINER", c.tui.container);
|
|
61
|
+
emit("VM_ROOT", c.tui.remote_sandbox_root);
|
|
62
|
+
emit("SUDO", c.tui.sudo_docker ? 1 : 0);
|
|
63
|
+
')"
|
|
64
|
+
eval "$CONF"
|
|
65
|
+
DOCKER_ON_VM="docker"
|
|
66
|
+
[[ "$SUDO" == "1" ]] && DOCKER_ON_VM="sudo docker"
|
|
67
|
+
|
|
68
|
+
# remote_sandbox_root ships empty: the container's qcr.layout label decides
|
|
69
|
+
# (the same probe as src/tui/layout.ts).
|
|
70
|
+
if [[ -z "$VM_ROOT" ]]; then
|
|
71
|
+
LAYOUT="$(ssh "$SSH_HOST" "$DOCKER_ON_VM inspect -f '{{index .Config.Labels \"qcr.layout\"}}' $VM_CONTAINER" 2>/dev/null || true)"
|
|
72
|
+
VM_ROOT="$(cd "$ROOT" && node --input-type=module -e '
|
|
73
|
+
const { rootForLayout } = await import("./dist/src/tui/layout.js");
|
|
74
|
+
console.log(rootForLayout(process.argv[1] === "release" ? "release" : "legacy"));
|
|
75
|
+
' "$LAYOUT")"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
QCR="$ROOT/scripts/qcr"
|
|
79
|
+
|
|
80
|
+
# The app's build stamp (src/appstamp.ts) for the image's qcr.build-sha label.
|
|
81
|
+
app_stamp() {
|
|
82
|
+
node --input-type=module -e 'const m = await import(process.argv[1]); console.log(m.appStamp(process.argv[2]));' \
|
|
83
|
+
"$1/dist/src/appstamp.js" "$1"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# --- 1. image ----------------------------------------------------------------
|
|
87
|
+
step "image"
|
|
88
|
+
# The release image (docker/Dockerfile) compiles the app itself.
|
|
89
|
+
if docker image inspect "$IMAGE" >/dev/null 2>&1; then
|
|
90
|
+
pass "image $IMAGE present"
|
|
91
|
+
elif docker build -t "$IMAGE" -f "$ROOT/docker/Dockerfile" \
|
|
92
|
+
--build-arg BUILD_SHA="$(app_stamp "$ROOT")" \
|
|
93
|
+
"$ROOT" >"$WORK/build.log" 2>&1; then
|
|
94
|
+
pass "image $IMAGE built"
|
|
95
|
+
else
|
|
96
|
+
fail "image $IMAGE builds (see $WORK/build.log)"
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# --- 2. lifecycle ------------------------------------------------------------
|
|
100
|
+
step "qcr companion up / status"
|
|
101
|
+
if "$QCR" companion up >"$WORK/up.log" 2>&1; then pass "qcr companion up: $(tail -1 "$WORK/up.log")"; else fail "qcr companion up ($(tail -1 "$WORK/up.log"))"; fi
|
|
102
|
+
if "$QCR" companion up >"$WORK/up2.log" 2>&1 && grep -q "adopted" "$WORK/up2.log"; then
|
|
103
|
+
pass "second up adopts, never spawns a twin"
|
|
104
|
+
else
|
|
105
|
+
fail "second up adopts (got: $(tail -1 "$WORK/up2.log"))"
|
|
106
|
+
fi
|
|
107
|
+
if "$QCR" companion status 2>&1 | grep -q running; then pass "qcr companion status: running"; else fail "qcr companion status: running"; fi
|
|
108
|
+
|
|
109
|
+
# --- 3. pi auth --------------------------------------------------------------
|
|
110
|
+
step "pi auth (one-time /login)"
|
|
111
|
+
if docker exec "$CONTAINER" sh -c 'test -f "$HOME/.pi/agent/auth.json"' >/dev/null 2>&1; then
|
|
112
|
+
pass "auth.json persisted on volume $PIHOME"
|
|
113
|
+
else
|
|
114
|
+
skip "auth.json absent — run: docker exec -it $CONTAINER tmux attach -t $SESSION, then /login"
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
# --- 4. full ssh through the agent, no key in the container; memory reachable --
|
|
118
|
+
# Rule 8: the companion holds the owner's full ssh
|
|
119
|
+
# to the VM as the host's agent socket, ssh config and known_hosts, mounted
|
|
120
|
+
# read-only. A key FILE in the container is the failure; ssh itself working is
|
|
121
|
+
# expected whenever the host has an agent.
|
|
122
|
+
step "companion holds no key file"
|
|
123
|
+
keys="$(docker exec "$CONTAINER" sh -c 'ls -A "$HOME/.ssh" 2>/dev/null' | grep -vxE 'config|known_hosts' || true)"
|
|
124
|
+
if [ -n "$keys" ]; then
|
|
125
|
+
fail "~/.ssh in the container holds more than config and known_hosts: $keys (rule 8: never a key file)"
|
|
126
|
+
else
|
|
127
|
+
pass "~/.ssh holds at most config and known_hosts"
|
|
128
|
+
fi
|
|
129
|
+
step "ssh to the VM through the host's agent"
|
|
130
|
+
if [ -z "${SSH_AUTH_SOCK:-}" ]; then
|
|
131
|
+
skip "no ssh agent on this host — the companion gets none either"
|
|
132
|
+
elif docker exec "$CONTAINER" ssh -o BatchMode=yes -o ConnectTimeout=5 "$SSH_HOST" true >"$WORK/ssh.log" 2>&1; then
|
|
133
|
+
pass "ssh $SSH_HOST works inside the container, through the agent"
|
|
134
|
+
else
|
|
135
|
+
fail "ssh $SSH_HOST failed inside the container (see $WORK/ssh.log) — is the agent mounted? (rule 8)"
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
step "memory reachable from inside the container"
|
|
139
|
+
MEM_URL="${QCR_MEMORY_ENDPOINT:-http://198.51.100.1:1933}"
|
|
140
|
+
if docker exec "$CONTAINER" node -e "
|
|
141
|
+
fetch('$MEM_URL/health').then(r => r.ok ? process.exit(0) : process.exit(1)).catch(() => process.exit(1))
|
|
142
|
+
" >"$WORK/memory.log" 2>&1; then
|
|
143
|
+
pass "OpenViking /health reachable at $MEM_URL"
|
|
144
|
+
else
|
|
145
|
+
skip "OpenViking unreachable at $MEM_URL — is the forward installed? (scripts/companion-memory-forward.mjs status)"
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# --- 5. overseer inject (dry by default) -------------------------------------
|
|
149
|
+
step "overseer inject (dry-run unless --live)"
|
|
150
|
+
INJECT_DIR="$VM_ROOT/inject/overseer"
|
|
151
|
+
NAME="$(date -u +%Y-%m-%dT%H-%M-%SZ)-smoke.md"
|
|
152
|
+
# Exactly the shape src/tui/msg.ts writes: atomic tmp+mv into the daemon's
|
|
153
|
+
# inject dir, content on stdin so it never rides a command line.
|
|
154
|
+
WRITE_CMD="$DOCKER_ON_VM exec -i $VM_CONTAINER sh -c \"mkdir -p '$INJECT_DIR' && cat > '$INJECT_DIR/.$NAME.tmp' && mv '$INJECT_DIR/.$NAME.tmp' '$INJECT_DIR/$NAME'\""
|
|
155
|
+
PROBE_CMD="$DOCKER_ON_VM exec $VM_CONTAINER sh -c \"test -f '$INJECT_DIR/.done/$NAME'\""
|
|
156
|
+
if [[ "$LIVE" == "1" ]]; then
|
|
157
|
+
if printf '[companion smoke] ignore me — smoke:companion inject check.\n' |
|
|
158
|
+
ssh "$SSH_HOST" "$WRITE_CMD" >"$WORK/inject.log" 2>&1; then
|
|
159
|
+
sleep 5
|
|
160
|
+
if ssh "$SSH_HOST" "$PROBE_CMD" >/dev/null 2>&1; then
|
|
161
|
+
pass "overseer inject delivered (bridge archived it)"
|
|
162
|
+
else
|
|
163
|
+
fail "overseer inject delivered — file still pending in $INJECT_DIR"
|
|
164
|
+
fi
|
|
165
|
+
else
|
|
166
|
+
fail "overseer inject write ($(tail -1 "$WORK/inject.log"))"
|
|
167
|
+
fi
|
|
168
|
+
else
|
|
169
|
+
printf ' would run: ssh %s %s\n' "$SSH_HOST" "$WRITE_CMD"
|
|
170
|
+
skip "overseer inject — pass --live to actually write to the VM"
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
# --- 6. rollover on a faked date ---------------------------------------------
|
|
174
|
+
step "daily rollover (QCR_FAKE_TODAY, temp state)"
|
|
175
|
+
mkdir -p "$WORK/state" "$WORK/inject"
|
|
176
|
+
printf '{"last_open_date":"1999-12-31","updated_at":""}\n' > "$WORK/state/rollover.json"
|
|
177
|
+
if (cd "$ROOT" && QCR_FAKE_TODAY=2099-01-01 node --input-type=module -e '
|
|
178
|
+
const { loadConfig } = await import("./dist/src/config.js");
|
|
179
|
+
const { CompanionRollover } = await import("./dist/src/tui/rollover.js");
|
|
180
|
+
const { realDockerRunner } = await import("./dist/src/tui/companion.js");
|
|
181
|
+
const work = process.argv[1];
|
|
182
|
+
const r = new CompanionRollover(loadConfig().companion, realDockerRunner, {
|
|
183
|
+
statePath: `${work}/state/rollover.json`,
|
|
184
|
+
policyStatePath: `${work}/state/alert-policy.json`,
|
|
185
|
+
templatePath: "prompts/companion-day-open.md",
|
|
186
|
+
injectDir: `${work}/inject`,
|
|
187
|
+
});
|
|
188
|
+
const report = await r.run();
|
|
189
|
+
for (const s of report.steps) console.log(` · ${s}`);
|
|
190
|
+
if (report.verdict.kind !== "rollover") { console.error(`expected a rollover, got ${report.verdict.kind}`); process.exit(1); }
|
|
191
|
+
if (!report.dayOpen || /\{\{\w+\}\}/.test(report.dayOpen)) { console.error("day-open has unfilled placeholders"); process.exit(1); }
|
|
192
|
+
' "$WORK"); then
|
|
193
|
+
pass "rollover archived + assembled the day-open message"
|
|
194
|
+
# It went to the temp inject dir, never the live one.
|
|
195
|
+
if [[ -f "$WORK/inject/2099-01-01-day-open.md" ]]; then
|
|
196
|
+
pass "day-open queued ($(wc -c <"$WORK/inject/2099-01-01-day-open.md") bytes, temp dir only)"
|
|
197
|
+
else
|
|
198
|
+
fail "day-open queued"
|
|
199
|
+
fi
|
|
200
|
+
else
|
|
201
|
+
fail "rollover on a faked date"
|
|
202
|
+
fi
|
|
203
|
+
printf ' note: this killed the live companion pi session; qcr tui respawns it.\n'
|
|
204
|
+
|
|
205
|
+
# --- 7. down -----------------------------------------------------------------
|
|
206
|
+
step "qcr companion down"
|
|
207
|
+
if "$QCR" companion down >"$WORK/down.log" 2>&1; then pass "qcr companion down: $(tail -1 "$WORK/down.log")"; else fail "qcr companion down"; fi
|
|
208
|
+
if docker volume inspect "$PIHOME" >/dev/null 2>&1; then pass "pihome volume $PIHOME survived the stop"; else fail "pihome volume $PIHOME survived the stop"; fi
|
|
209
|
+
|
|
210
|
+
printf '\n=== companion smoke: %d passed, %d failed, %d skipped\n' "$PASS" "$FAIL" "$SKIP"
|
|
211
|
+
[[ "$FAIL" -eq 0 ]]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Detached child for the TUI deploy tab: `deploy.sh release <version>`. The
|
|
3
|
+
// operator's checkout is rebuilt by the pull that follows a release, which
|
|
4
|
+
// re-execs the TUI; this process must outlive that re-exec and leave a durable
|
|
5
|
+
// result the new TUI generation can attach to.
|
|
6
|
+
import { closeSync, fsyncSync, mkdirSync, openSync, renameSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
|
|
10
|
+
const [root, logPath, resultPath, version] = process.argv.slice(2);
|
|
11
|
+
if (!root || !logPath || !resultPath || !version) process.exit(2);
|
|
12
|
+
// The same spelling scripts/deploy.sh accepts for a release: it names an image tag.
|
|
13
|
+
if (!/^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.]+)?$/.test(version)) process.exit(2);
|
|
14
|
+
mkdirSync(dirname(logPath), { recursive: true });
|
|
15
|
+
const logFd = openSync(logPath, "a", 0o600);
|
|
16
|
+
const child = spawn("bash", [join(root, "scripts", "deploy.sh"), "release", version], {
|
|
17
|
+
cwd: root,
|
|
18
|
+
env: { ...process.env, ANSIBLE_FORCE_COLOR: "0", PY_COLORS: "0", NO_COLOR: "1" },
|
|
19
|
+
stdio: ["ignore", logFd, logFd],
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
let stopping = false;
|
|
23
|
+
const stop = () => {
|
|
24
|
+
if (stopping) return;
|
|
25
|
+
stopping = true;
|
|
26
|
+
try {
|
|
27
|
+
child.kill("SIGTERM");
|
|
28
|
+
} catch {
|
|
29
|
+
/* already gone */
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
process.on("SIGTERM", stop);
|
|
33
|
+
process.on("SIGINT", stop);
|
|
34
|
+
|
|
35
|
+
let finished = false;
|
|
36
|
+
const finish = (code, signal, error) => {
|
|
37
|
+
if (finished) return;
|
|
38
|
+
finished = true;
|
|
39
|
+
closeSync(logFd);
|
|
40
|
+
const result = {
|
|
41
|
+
code: typeof code === "number" ? code : null,
|
|
42
|
+
signal: signal ?? null,
|
|
43
|
+
...(error ? { error: String(error) } : {}),
|
|
44
|
+
finished_at: new Date().toISOString(),
|
|
45
|
+
};
|
|
46
|
+
const tmp = `${resultPath}.tmp-${process.pid}`;
|
|
47
|
+
const fd = openSync(tmp, "w", 0o600);
|
|
48
|
+
writeFileSync(fd, `${JSON.stringify(result, null, 2)}\n`);
|
|
49
|
+
fsyncSync(fd);
|
|
50
|
+
closeSync(fd);
|
|
51
|
+
renameSync(tmp, resultPath);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
child.on("error", (err) => {
|
|
55
|
+
finish(1, null, err);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
});
|
|
58
|
+
child.on("close", (code, signal) => {
|
|
59
|
+
finish(code, signal);
|
|
60
|
+
process.exit(typeof code === "number" ? code : 1);
|
|
61
|
+
});
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Does `dist/` actually contain what the build claims to have produced?
|
|
3
|
+
//
|
|
4
|
+
// Why this exists: `tsconfig.json` runs `incremental` (so
|
|
5
|
+
// `npm run dev`'s blocking typecheck is ~1s instead of ~4s) plus
|
|
6
|
+
// `noEmitOnError` (so a failing build cannot re-exec the TUI from a
|
|
7
|
+
// half-written dist). Together they leave one hole: tsc decides what to emit
|
|
8
|
+
// from its BUILD INFO, not from what is on disk. Delete one emitted file —
|
|
9
|
+
//
|
|
10
|
+
// rm dist/src/tui/startup.js && npx tsc -b # exit 0
|
|
11
|
+
//
|
|
12
|
+
// — and tsc says everything is up to date and emits nothing. `npm run build`
|
|
13
|
+
// reports success over a `dist/` that is missing a module. The same state
|
|
14
|
+
// arrives from an interrupted build, a half-copied tree, or a `find … -delete`
|
|
15
|
+
// that went wider than intended.
|
|
16
|
+
//
|
|
17
|
+
// That is survivable in `dev-tui.sh` (node throws ERR_MODULE_NOT_FOUND on the
|
|
18
|
+
// spot). It is not survivable in `deploy.sh`, which rsyncs `dist/` to the VM:
|
|
19
|
+
// the missing module ships, and the daemon crashes there instead of here.
|
|
20
|
+
//
|
|
21
|
+
// So "the build succeeded" means "and the output is on disk", for the app's
|
|
22
|
+
// dist/ and for every project the root tsconfig.json references (the review
|
|
23
|
+
// core's packages/pi-plugin/dist). Cheap (a few hundred stats),
|
|
24
|
+
// dependency-free, and runs from a bare checkout.
|
|
25
|
+
//
|
|
26
|
+
// The reverse hole too: tsc never deletes the output of an input that is gone.
|
|
27
|
+
// A source moved or removed leaves its old compiled module behind — still
|
|
28
|
+
// importable, still hashed into the companion's app stamp, still copied into
|
|
29
|
+
// an image built from the host's dist/. So a compiled module with no source
|
|
30
|
+
// among the current inputs is an error as well, and the fix is the same cold
|
|
31
|
+
// build.
|
|
32
|
+
import { existsSync, readFileSync, readdirSync, rmSync } from "node:fs";
|
|
33
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
34
|
+
import { fileURLToPath } from "node:url";
|
|
35
|
+
|
|
36
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
37
|
+
export const ROOT = resolve(HERE, "..");
|
|
38
|
+
|
|
39
|
+
/** tsconfig.json carries `//` comments; JSON.parse does not. */
|
|
40
|
+
export function readTsconfig(root = ROOT) {
|
|
41
|
+
const raw = readFileSync(join(root, "tsconfig.json"), "utf8");
|
|
42
|
+
return JSON.parse(raw.replace(/^\s*\/\/.*$/gm, ""));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Every `.ts` tsc is asked to compile, as repo-relative POSIX paths.
|
|
47
|
+
*
|
|
48
|
+
* Deliberately derived from tsconfig's own `include`/`exclude` rather than
|
|
49
|
+
* hard-coded: the excluded set (e.g. `extensions/inline-bash.ts`, loaded from
|
|
50
|
+
* source by pi's jiti) can change, and a checker that disagrees with the
|
|
51
|
+
* compiler is worse than no checker.
|
|
52
|
+
* `.d.ts` files declare types and emit nothing.
|
|
53
|
+
* The explicit `.mjs` include (allowJs, for the vendored OpenViking helpers)
|
|
54
|
+
* lists those files too: tsc copies them, and the worker needs them in dist/.
|
|
55
|
+
*/
|
|
56
|
+
export function inputFiles(root = ROOT, cfg = readTsconfig(root)) {
|
|
57
|
+
const includeRoots = (cfg.include ?? [])
|
|
58
|
+
.map((pattern) => pattern.split("/")[0])
|
|
59
|
+
.filter((dir, i, all) => all.indexOf(dir) === i);
|
|
60
|
+
const excluded = new Set((cfg.exclude ?? []).map((p) => p.replace(/\/+$/, "")));
|
|
61
|
+
// A plain-JS tree the include names (`dir/**/*.mjs`, with allowJs) is emitted
|
|
62
|
+
// too, under the same name.
|
|
63
|
+
const jsDirs = (cfg.include ?? [])
|
|
64
|
+
.filter((pattern) => pattern.endsWith(".mjs"))
|
|
65
|
+
.map((pattern) => pattern.split("/**")[0]);
|
|
66
|
+
const out = [];
|
|
67
|
+
const walk = (relDir) => {
|
|
68
|
+
if (excluded.has(relDir)) return;
|
|
69
|
+
let entries;
|
|
70
|
+
try {
|
|
71
|
+
entries = readdirSync(join(root, relDir), { withFileTypes: true });
|
|
72
|
+
} catch {
|
|
73
|
+
return; // an include root that does not exist here is not a failure
|
|
74
|
+
}
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const rel = `${relDir}/${entry.name}`;
|
|
77
|
+
if (excluded.has(rel)) continue;
|
|
78
|
+
if (entry.isDirectory()) walk(rel);
|
|
79
|
+
else if (entry.name.endsWith(".ts") && !entry.name.endsWith(".d.ts")) out.push(rel);
|
|
80
|
+
else if (entry.name.endsWith(".mjs") && jsDirs.some((dir) => rel.startsWith(`${dir}/`)))
|
|
81
|
+
out.push(rel);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
for (const dir of includeRoots) walk(dir);
|
|
85
|
+
return out.sort();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Where tsc puts a given input. No `rootDir` is set, so the inferred one is
|
|
89
|
+
* the repo root and the tree is mirrored under `outDir` (`dist/src/…`). A `.mjs`
|
|
90
|
+
* keeps its name. */
|
|
91
|
+
export function emittedPath(relTs, cfg = readTsconfig()) {
|
|
92
|
+
return `${cfg.compilerOptions?.outDir ?? "dist"}/${relTs.replace(/\.ts$/, ".js")}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The projects `tsc -b` builds: the root's, and each one its `references`
|
|
96
|
+
* name (packages/pi-plugin, the review core), as repo-relative directories
|
|
97
|
+
* ("" is the root). */
|
|
98
|
+
export function projectDirs(root = ROOT) {
|
|
99
|
+
const refs = (readTsconfig(root).references ?? []).map((r) => r.path.replace(/\/+$/, ""));
|
|
100
|
+
return ["", ...refs];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Inputs whose compiled output is not on disk, across every project the
|
|
104
|
+
* build compiles, as repo-relative paths. Empty = the build is real. */
|
|
105
|
+
export function missingArtifacts(root = ROOT) {
|
|
106
|
+
return projectDirs(root).flatMap((dir) => {
|
|
107
|
+
const at = join(root, dir);
|
|
108
|
+
const cfg = readTsconfig(at);
|
|
109
|
+
const rel = (p) => (dir ? `${dir}/${p}` : p);
|
|
110
|
+
return inputFiles(at, cfg)
|
|
111
|
+
.map((f) => ({ source: rel(f), emitted: rel(emittedPath(f, cfg)) }))
|
|
112
|
+
.filter(({ emitted }) => !existsSync(join(root, emitted)));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Compiled modules (`.js`, `.mjs`) in a project's outDir that no current
|
|
117
|
+
* input emits, as repo-relative paths: what a moved or deleted source left
|
|
118
|
+
* behind. Empty = nothing stale. */
|
|
119
|
+
export function orphanedArtifacts(root = ROOT) {
|
|
120
|
+
return projectDirs(root).flatMap((dir) => {
|
|
121
|
+
const at = join(root, dir);
|
|
122
|
+
const cfg = readTsconfig(at);
|
|
123
|
+
const rel = (p) => (dir ? `${dir}/${p}` : p);
|
|
124
|
+
const outDir = cfg.compilerOptions?.outDir ?? "dist";
|
|
125
|
+
const emitted = new Set(inputFiles(at, cfg).map((f) => emittedPath(f, cfg)));
|
|
126
|
+
const out = [];
|
|
127
|
+
const walk = (relDir) => {
|
|
128
|
+
let entries;
|
|
129
|
+
try {
|
|
130
|
+
entries = readdirSync(join(at, relDir), { withFileTypes: true });
|
|
131
|
+
} catch {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
const p = `${relDir}/${entry.name}`;
|
|
136
|
+
if (entry.isDirectory()) walk(p);
|
|
137
|
+
else if (/\.m?js$/.test(entry.name) && !emitted.has(p)) out.push(rel(p));
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
walk(outDir);
|
|
141
|
+
return out.sort();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Deletes what `orphanedArtifacts` finds, with each module's map and
|
|
146
|
+
* declarations, and returns the modules removed. tsc never deletes the output
|
|
147
|
+
* of a moved or removed source, and a dist/ is ours alone, so the build clears
|
|
148
|
+
* the leftovers rather than failing every existing checkout. */
|
|
149
|
+
export function removeOrphanedArtifacts(root = ROOT) {
|
|
150
|
+
const orphans = orphanedArtifacts(root);
|
|
151
|
+
for (const f of orphans) {
|
|
152
|
+
const stem = f.replace(/\.(m?)js$/, "");
|
|
153
|
+
for (const p of [
|
|
154
|
+
f,
|
|
155
|
+
`${f}.map`,
|
|
156
|
+
`${stem}.d.ts`,
|
|
157
|
+
`${stem}.d.ts.map`,
|
|
158
|
+
`${stem}.d.mts`,
|
|
159
|
+
`${stem}.d.mts.map`,
|
|
160
|
+
])
|
|
161
|
+
rmSync(join(root, p), { force: true });
|
|
162
|
+
}
|
|
163
|
+
return orphans;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const COLD_BUILD = " rm -rf dist packages/*/dist node_modules/.cache && npm run build";
|
|
167
|
+
|
|
168
|
+
function main() {
|
|
169
|
+
const root = process.argv[2] ? resolve(process.argv[2]) : ROOT;
|
|
170
|
+
for (const dir of projectDirs(root)) {
|
|
171
|
+
const at = join(root, dir);
|
|
172
|
+
const outDir = join(at, readTsconfig(at).compilerOptions?.outDir ?? "dist");
|
|
173
|
+
if (!existsSync(outDir)) {
|
|
174
|
+
console.error(
|
|
175
|
+
`verify-dist: ${relative(root, outDir) || outDir} does not exist — the build produced nothing.`,
|
|
176
|
+
);
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const removed = removeOrphanedArtifacts(root);
|
|
181
|
+
if (removed.length > 0)
|
|
182
|
+
console.error(
|
|
183
|
+
`verify-dist: removed ${removed.length} compiled file(s) whose source is gone (moved or deleted).`,
|
|
184
|
+
);
|
|
185
|
+
const missing = missingArtifacts(root);
|
|
186
|
+
if (missing.length === 0) return;
|
|
187
|
+
console.error(
|
|
188
|
+
`verify-dist: the build reported success but ${missing.length} compiled file(s) are missing from a dist/:`,
|
|
189
|
+
);
|
|
190
|
+
for (const { source, emitted } of missing.slice(0, 20))
|
|
191
|
+
console.error(` ${emitted} (from ${source})`);
|
|
192
|
+
if (missing.length > 20) console.error(` … and ${missing.length - 20} more`);
|
|
193
|
+
console.error("");
|
|
194
|
+
console.error("This is `incremental`: tsc emits from its build info, not from what is on disk,");
|
|
195
|
+
console.error("so a file deleted after the last successful build is never re-emitted. Fix with:");
|
|
196
|
+
console.error(COLD_BUILD);
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// `node scripts/verify-dist.mjs` runs the check; importing it does not.
|
|
201
|
+
if (process.argv[1] && resolve(process.argv[1]) === resolve(fileURLToPath(import.meta.url))) main();
|