@quickchatai/quickreview 0.0.0-stage → 1.2.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 +401 -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 +1099 -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/login-route.js +5 -0
- package/dist/extensions/cli/login-route.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/login-route.js +180 -0
- package/dist/extensions/login-route.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 +198 -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 +92 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1947 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +334 -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 +1335 -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 +1041 -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 +945 -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 +223 -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 +1727 -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 +206 -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 +437 -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 +1098 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/githubtoken.js +346 -0
- package/dist/src/githubtoken.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 +47 -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 +52 -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 +228 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +219 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +329 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +75 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/pipin.js +22 -0
- package/dist/src/onboard/pipin.js.map +1 -0
- package/dist/src/onboard/stepforward.js +41 -0
- package/dist/src/onboard/stepforward.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +214 -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 +372 -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 +1218 -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/githubaccount.js +595 -0
- package/dist/src/onboard/steps/githubaccount.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +1150 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +508 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +78 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +817 -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 +966 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1112 -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 +812 -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 +519 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/tuiroute.js +102 -0
- package/dist/src/onboard/steps/tuiroute.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +378 -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/onboard/toolnames.js +30 -0
- package/dist/src/onboard/toolnames.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/operatorwrite.js +23 -0
- package/dist/src/operatorwrite.js.map +1 -0
- package/dist/src/outcomes.js +1364 -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 +442 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +666 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +216 -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 +1399 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +840 -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 +310 -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/reviewnow.js +45 -0
- package/dist/src/reviewnow.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 +223 -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 +262 -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 +1884 -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 +1219 -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 +256 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1339 -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 +50 -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 +75 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +328 -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 +1511 -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 +347 -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 +129 -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 +139 -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 +318 -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/route.js +143 -0
- package/dist/src/tui/route.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/setupstate.js +29 -0
- package/dist/src/tui/setupstate.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 +490 -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 +96 -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 +235 -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 +3860 -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 +736 -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 +1823 -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 +338 -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 +362 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +799 -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/login-route.ts +10 -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/login-route.ts +220 -0
- package/extensions/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +262 -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 +113 -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 +233 -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 +142 -0
- package/src/cli.ts +2306 -0
- package/src/cliops.ts +385 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1704 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2070 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1327 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +272 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2251 -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 +247 -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 +645 -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 +1539 -0
- package/src/githubtoken.ts +435 -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 +61 -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 +60 -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 +266 -0
- package/src/onboard/choices.ts +255 -0
- package/src/onboard/engine.ts +537 -0
- package/src/onboard/launch.ts +103 -0
- package/src/onboard/pipin.ts +31 -0
- package/src/onboard/stepforward.ts +61 -0
- package/src/onboard/steps/appslug.ts +268 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +490 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1440 -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/githubaccount.ts +716 -0
- package/src/onboard/steps/githubapp.ts +1498 -0
- package/src/onboard/steps/golive.ts +579 -0
- package/src/onboard/steps/index.ts +82 -0
- package/src/onboard/steps/ingress.ts +974 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1180 -0
- package/src/onboard/steps/memory.ts +1347 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +1042 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +338 -0
- package/src/onboard/steps/transport.ts +680 -0
- package/src/onboard/steps/tuiroute.ts +119 -0
- package/src/onboard/steps/verifyup.ts +467 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -0
- package/src/onboard/toolnames.ts +34 -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/operatorwrite.ts +25 -0
- package/src/outcomes.ts +1677 -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 +554 -0
- package/src/posting-outbox.ts +810 -0
- package/src/posting-receipt.ts +341 -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 +1776 -0
- package/src/reconcile.ts +1056 -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 +441 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -0
- package/src/reviewnow.ts +76 -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 +8261 -0
- package/src/statemachine.ts +372 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +306 -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 +2026 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1529 -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 +299 -0
- package/src/tui/companion.ts +1495 -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 +74 -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 +94 -0
- package/src/tui/ghread.ts +388 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1656 -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 +492 -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 +165 -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 +159 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +421 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/route.ts +173 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/setupstate.ts +52 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +631 -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 +96 -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 +274 -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 +4707 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +951 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2182 -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 +433 -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,537 @@
|
|
|
1
|
+
// OnboardingEngine — the seam of the onboarding wizard: a checklist state
|
|
2
|
+
// machine plus deterministic step implementations behind injected adapters.
|
|
3
|
+
// pi is a thin driver over this engine (extensions/onboarding.ts registers one
|
|
4
|
+
// tool per step); the engine
|
|
5
|
+
// itself is fully drivable from tests and from a non-LLM fallback entry, and
|
|
6
|
+
// nothing in here touches the network, Docker, or a real pi except through
|
|
7
|
+
// the adapters.
|
|
8
|
+
//
|
|
9
|
+
// Resumability contract:
|
|
10
|
+
// - checklist state persists to state/onboarding/checklist.json after every
|
|
11
|
+
// step, tmp+rename atomic (the verdicts.ts convention);
|
|
12
|
+
// - startup reconciles claimed state against reality: a step claimed done is
|
|
13
|
+
// re-verified with its verify(), never trusted from the file alone;
|
|
14
|
+
// - a fully-done checklist re-runs as verify-only (the wizard doubles as a
|
|
15
|
+
// diagnostic);
|
|
16
|
+
// - a corrupt/unreadable checklist degrades to a fresh one (the resume
|
|
17
|
+
// re-verifies everything anyway) — never a crash.
|
|
18
|
+
//
|
|
19
|
+
// The finish path writes the first-run marker state/companion/first-run.json
|
|
20
|
+
// ({"completed_at": "<iso>"}) exactly once — the contract the companion's
|
|
21
|
+
// first-run greeting consumes. Keep the path and shape stable.
|
|
22
|
+
import type { StepForward, StepForwardRequest } from "./stepforward.js";
|
|
23
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
24
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
25
|
+
|
|
26
|
+
// ---- adapters ---------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
export interface ProcessResult {
|
|
29
|
+
code: number;
|
|
30
|
+
stdout: string;
|
|
31
|
+
stderr: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Process seam. Never throws: a missing binary is a nonzero code with the
|
|
35
|
+
* error text in stderr, so a step can render it as a plain red check. */
|
|
36
|
+
export interface ProcessRunner {
|
|
37
|
+
run(cmd: string, args: string[]): Promise<ProcessResult>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Everything a step may touch outside its own logic. All injected — tests
|
|
41
|
+
* fake every field; extensions/onboarding.ts builds the real set. Steps use
|
|
42
|
+
* fetch (manifest exchange, health probes) and prompter (non-LLM fallback
|
|
43
|
+
* entry) as they need them; preflight needs neither. */
|
|
44
|
+
export interface OnboardAdapters {
|
|
45
|
+
/** HTTP seam (GitHub App manifest exchange, health endpoints, …). */
|
|
46
|
+
fetch: typeof fetch;
|
|
47
|
+
runner: ProcessRunner;
|
|
48
|
+
clock: () => Date;
|
|
49
|
+
/** Interactive fallback question seam. pi is the normal prompter — steps
|
|
50
|
+
* driven from the pi session get their answers as tool inputs instead. */
|
|
51
|
+
prompter?: (question: string) => Promise<string>;
|
|
52
|
+
/** Deterministic host facts, captured once by the real assembly so steps
|
|
53
|
+
* never read process globals themselves. `uid` is null where the platform
|
|
54
|
+
* has no uid (Windows). `inContainer`: the wizard is running inside a
|
|
55
|
+
* container (the release image), where there is no Docker to drive —
|
|
56
|
+
* bring-up then prints the host's commands instead. */
|
|
57
|
+
host: { nodeVersion: string; uid: number | null; inContainer?: boolean };
|
|
58
|
+
/** Filesystem roots. `stateDir` is `<sandbox root>/state`; `configPath` is
|
|
59
|
+
* the live config.toml as the install locator resolved it — the
|
|
60
|
+
* one file every step reads and writes, captured once by the real assembly
|
|
61
|
+
* so no step builds a config path itself. */
|
|
62
|
+
paths: { stateDir: string; configPath: string };
|
|
63
|
+
log?: (line: string) => void;
|
|
64
|
+
/** Opens the local memory forward for one step call (src/onboard/stepforward.ts):
|
|
65
|
+
* the compose route's memory engine is reachable from this machine only
|
|
66
|
+
* through it. The real assembly sets it; absent (every test), no forward is
|
|
67
|
+
* opened and the step sees whatever already listens. */
|
|
68
|
+
memoryForward?: (req: StepForwardRequest) => Promise<StepForward | null>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ---- step vocabulary --------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
export interface CheckResult {
|
|
74
|
+
name: string;
|
|
75
|
+
ok: boolean;
|
|
76
|
+
detail: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** What run() and verify() both return. `data` (run only) is persisted onto
|
|
80
|
+
* the step's checklist record and handed back as ctx.data on later calls. */
|
|
81
|
+
export interface StepReport {
|
|
82
|
+
ok: boolean;
|
|
83
|
+
checks: CheckResult[];
|
|
84
|
+
data?: Record<string, unknown>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface StepContext {
|
|
88
|
+
adapters: OnboardAdapters;
|
|
89
|
+
/** The tool call's inputs — the operator's answer to a step that asks one
|
|
90
|
+
* (`{}` for a step that declares no `parameters`, and always on verify()).
|
|
91
|
+
* A step that needs an answer and does not get one must return a refusal
|
|
92
|
+
* naming the options, never a guess: the wizard offers, the operator picks. */
|
|
93
|
+
input: Readonly<Record<string, unknown>>;
|
|
94
|
+
/** Recorded operator choices (topology, auth route, captured uid, …). */
|
|
95
|
+
choices: Readonly<Record<string, unknown>>;
|
|
96
|
+
/** This step's persisted data from a previous run ({} on first run). */
|
|
97
|
+
data: Readonly<Record<string, unknown>>;
|
|
98
|
+
/** Record an operator choice / derived fact for later steps (persisted with
|
|
99
|
+
* the step result). */
|
|
100
|
+
recordChoice(key: string, value: unknown): void;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* One onboarding step (the registered set is defaultSteps in
|
|
105
|
+
* src/onboard/steps/index.ts); the interface is the extension point:
|
|
106
|
+
* - `id` must be tool-name-safe ([a-z][a-z0-9_]*) — the pi extension
|
|
107
|
+
* registers each step as tool `onboard_<id>`;
|
|
108
|
+
* - `explain` is the teach-text the guide relays before running the step;
|
|
109
|
+
* - `enabled` gates on recorded choices (e.g. the VM route's steps are
|
|
110
|
+
* disabled on the laptop topology); absent ⇒ always enabled;
|
|
111
|
+
* - `run` performs the step; `verify` re-checks its outcome against reality
|
|
112
|
+
* and must be safe to call any number of times.
|
|
113
|
+
*/
|
|
114
|
+
export interface OnboardingStep {
|
|
115
|
+
id: string;
|
|
116
|
+
title: string;
|
|
117
|
+
explain: string;
|
|
118
|
+
/** Ascending display/registration order. */
|
|
119
|
+
order: number;
|
|
120
|
+
/** JSON-schema object the step's pi tool declares, for steps that need the
|
|
121
|
+
* operator's answer (a choice, a hostname). Absent ⇒ the tool takes no
|
|
122
|
+
* input, which is the common case. */
|
|
123
|
+
parameters?: unknown;
|
|
124
|
+
enabled?(choices: Readonly<Record<string, unknown>>): boolean;
|
|
125
|
+
/** After setup: the step still runs and verifies like any other, but the
|
|
126
|
+
* checklist completes without it — finish never waits on it. (The first
|
|
127
|
+
* review and the go-live flip: the board offers them once setup is done.) */
|
|
128
|
+
optional?: boolean;
|
|
129
|
+
run(ctx: StepContext): Promise<StepReport>;
|
|
130
|
+
verify(ctx: StepContext): Promise<StepReport>;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function failures(checks: readonly CheckResult[]): string[] {
|
|
134
|
+
return checks.filter((c) => !c.ok).map((c) => `${c.name}: ${c.detail}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ---- checklist file ---------------------------------------------------------
|
|
138
|
+
|
|
139
|
+
export const CHECKLIST_VERSION = 1;
|
|
140
|
+
|
|
141
|
+
export interface StepRecord {
|
|
142
|
+
status: "pending" | "done";
|
|
143
|
+
completed_at: string | null;
|
|
144
|
+
/** Last successful re-verification (resume / finish). */
|
|
145
|
+
verified_at: string | null;
|
|
146
|
+
/** Why a claimed-done step was demoted, or other engine notes. */
|
|
147
|
+
note: string | null;
|
|
148
|
+
data: Record<string, unknown>;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export interface ChecklistFile {
|
|
152
|
+
version: number;
|
|
153
|
+
created_at: string;
|
|
154
|
+
updated_at: string;
|
|
155
|
+
/** Set exactly once, by finish() when every enabled step verifies green.
|
|
156
|
+
* History — when onboarding first finished; it never moves and never clears. */
|
|
157
|
+
completed_at: string | null;
|
|
158
|
+
/** When a completed checklist stopped verifying (a demotion, a failed run,
|
|
159
|
+
* a refused finish, a newly-enabled unfinished step, a step run again —
|
|
160
|
+
* a run changes what the full verification checked); null/absent while the
|
|
161
|
+
* completion still holds. A green finish() clears it. Whether onboarding is
|
|
162
|
+
* complete now is `completed_at` set and this unset. */
|
|
163
|
+
reopened_at?: string | null;
|
|
164
|
+
choices: Record<string, unknown>;
|
|
165
|
+
steps: Record<string, StepRecord>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function checklistPath(stateDir: string): string {
|
|
169
|
+
return join(stateDir, "onboarding", "checklist.json");
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** The first-run contract path: the companion's first-run greeting keys off this
|
|
173
|
+
* file. Written once, by finish(), shape {"completed_at": "<iso>"}. */
|
|
174
|
+
export function firstRunMarkerPath(stateDir: string): string {
|
|
175
|
+
return join(stateDir, "companion", "first-run.json");
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function isPlainObject(v: unknown): v is Record<string, unknown> {
|
|
179
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Read the checklist; null when absent or unreadable (both mean "fresh"). */
|
|
183
|
+
export function readChecklist(stateDir: string): ChecklistFile | null {
|
|
184
|
+
const path = checklistPath(stateDir);
|
|
185
|
+
if (!existsSync(path)) return null;
|
|
186
|
+
try {
|
|
187
|
+
const raw = JSON.parse(readFileSync(path, "utf8")) as unknown;
|
|
188
|
+
if (typeof raw !== "object" || raw === null) return null;
|
|
189
|
+
const file = raw as ChecklistFile;
|
|
190
|
+
// Every field the engine dereferences is checked here: a file that parses
|
|
191
|
+
// but lacks one (hand-edited, foreign) would otherwise throw out of a
|
|
192
|
+
// step predicate or record() on every call — a wedge, not a fresh start.
|
|
193
|
+
if (typeof file.version !== "number") return null;
|
|
194
|
+
if (!isPlainObject(file.choices)) return null;
|
|
195
|
+
if (file.completed_at !== null && typeof file.completed_at !== "string") return null;
|
|
196
|
+
if (!isPlainObject(file.steps)) return null;
|
|
197
|
+
for (const rec of Object.values(file.steps)) {
|
|
198
|
+
if (!isPlainObject(rec) || !isPlainObject(rec.data)) return null;
|
|
199
|
+
}
|
|
200
|
+
return file;
|
|
201
|
+
} catch {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Does the checklist file say onboarding finished? The CLI's post-exit
|
|
207
|
+
* handoff reads exactly this (the finish tool only sets it after a full green
|
|
208
|
+
* re-verification, so "the file says so" is a verified claim). */
|
|
209
|
+
export function checklistComplete(stateDir: string): boolean {
|
|
210
|
+
const file = readChecklist(stateDir);
|
|
211
|
+
return file !== null && completeNow(file);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** Is onboarding complete NOW: finished once, and not reopened since. The one
|
|
215
|
+
* reading of the two fields, for the file on disk and the engine's copy. */
|
|
216
|
+
function completeNow(file: Pick<ChecklistFile, "completed_at" | "reopened_at">): boolean {
|
|
217
|
+
return typeof file.completed_at === "string" && !file.reopened_at;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** `<sandbox root>` — the parent of `paths.stateDir`, by the adapters'
|
|
221
|
+
* contract (stateDir = `<sandbox root>/state`). The one place that says so. */
|
|
222
|
+
export function sandboxRoot(paths: { readonly stateDir: string }): string {
|
|
223
|
+
return resolve(paths.stateDir, "..");
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** tmp+rename atomic write — the one writer every onboarding file write goes
|
|
227
|
+
* through (the checklist, config.toml, .env, the inventory): a reader, the
|
|
228
|
+
* daemon's own loader one bind mount away included, never sees a half-written
|
|
229
|
+
* file, and an interrupted write leaves the previous file whole. */
|
|
230
|
+
export function writeAtomic(path: string, content: string): void {
|
|
231
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
232
|
+
const tmp = join(dirname(path), `.${basename(path)}.onboard.tmp`);
|
|
233
|
+
writeFileSync(tmp, content);
|
|
234
|
+
renameSync(tmp, path);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** A file's text, or null when it cannot be read for any reason. For a read
|
|
238
|
+
* where only ABSENCE may be null, read it yourself. */
|
|
239
|
+
export function readTextOrNull(path: string): string | null {
|
|
240
|
+
try {
|
|
241
|
+
return readFileSync(path, "utf8");
|
|
242
|
+
} catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// ---- engine -----------------------------------------------------------------
|
|
248
|
+
|
|
249
|
+
export interface StepStatusLine {
|
|
250
|
+
id: string;
|
|
251
|
+
title: string;
|
|
252
|
+
explain: string;
|
|
253
|
+
status: "pending" | "done" | "disabled";
|
|
254
|
+
note: string | null;
|
|
255
|
+
/** The step's `optional` flag: setup completes without it. */
|
|
256
|
+
optional?: boolean;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export interface ReconcileReport {
|
|
260
|
+
/** Claimed-done steps whose verify() held. */
|
|
261
|
+
verified: string[];
|
|
262
|
+
/** Claimed-done steps whose verify() failed — demoted to pending. */
|
|
263
|
+
demoted: Array<{ id: string; failures: string[] }>;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export interface StepRunResult {
|
|
267
|
+
id: string;
|
|
268
|
+
ok: boolean;
|
|
269
|
+
checks: CheckResult[];
|
|
270
|
+
failures: string[];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export interface VerifyAllResult {
|
|
274
|
+
ok: boolean;
|
|
275
|
+
/** `optional` results are reported but never hold `ok` false. */
|
|
276
|
+
results: Array<{ id: string; ok: boolean; failures: string[]; optional?: boolean }>;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export type FinishResult =
|
|
280
|
+
| { ok: true; completed_at: string; marker_written: boolean }
|
|
281
|
+
| { ok: false; results: VerifyAllResult["results"] };
|
|
282
|
+
|
|
283
|
+
export class OnboardingEngine {
|
|
284
|
+
private readonly registry: OnboardingStep[];
|
|
285
|
+
private checklist: ChecklistFile;
|
|
286
|
+
|
|
287
|
+
constructor(
|
|
288
|
+
steps: OnboardingStep[],
|
|
289
|
+
private readonly adapters: OnboardAdapters,
|
|
290
|
+
) {
|
|
291
|
+
this.registry = [...steps].sort((a, b) => a.order - b.order);
|
|
292
|
+
const loaded = readChecklist(adapters.paths.stateDir);
|
|
293
|
+
if (loaded === null && existsSync(checklistPath(adapters.paths.stateDir))) {
|
|
294
|
+
adapters.log?.(
|
|
295
|
+
"onboarding: checklist file unreadable — starting fresh (recorded choices and step progress were reset)",
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
this.checklist = loaded ?? this.fresh();
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
private fresh(): ChecklistFile {
|
|
302
|
+
const now = this.adapters.clock().toISOString();
|
|
303
|
+
return {
|
|
304
|
+
version: CHECKLIST_VERSION,
|
|
305
|
+
created_at: now,
|
|
306
|
+
updated_at: now,
|
|
307
|
+
completed_at: null,
|
|
308
|
+
choices: {},
|
|
309
|
+
steps: {},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private save(): void {
|
|
314
|
+
this.checklist.updated_at = this.adapters.clock().toISOString();
|
|
315
|
+
writeAtomic(
|
|
316
|
+
checklistPath(this.adapters.paths.stateDir),
|
|
317
|
+
`${JSON.stringify(this.checklist, null, 2)}\n`,
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private record(id: string): StepRecord {
|
|
322
|
+
const existing = this.checklist.steps[id];
|
|
323
|
+
if (existing) return existing;
|
|
324
|
+
const created: StepRecord = {
|
|
325
|
+
status: "pending",
|
|
326
|
+
completed_at: null,
|
|
327
|
+
verified_at: null,
|
|
328
|
+
note: null,
|
|
329
|
+
data: {},
|
|
330
|
+
};
|
|
331
|
+
this.checklist.steps[id] = created;
|
|
332
|
+
return created;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private ctxFor(id: string, input: Record<string, unknown> = {}): StepContext {
|
|
336
|
+
return {
|
|
337
|
+
adapters: this.adapters,
|
|
338
|
+
input,
|
|
339
|
+
choices: this.checklist.choices,
|
|
340
|
+
data: this.record(id).data,
|
|
341
|
+
recordChoice: (key, value) => {
|
|
342
|
+
this.checklist.choices[key] = value;
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/** The registered steps, in order (the pi tools register off this). */
|
|
348
|
+
stepDefs(): readonly OnboardingStep[] {
|
|
349
|
+
return this.registry;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
private enabled(step: OnboardingStep): boolean {
|
|
353
|
+
return step.enabled ? step.enabled(this.checklist.choices) : true;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
choices(): Readonly<Record<string, unknown>> {
|
|
357
|
+
return this.checklist.choices;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
isComplete(): boolean {
|
|
361
|
+
return completeNow(this.checklist);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** A completed checklist no longer verifies: withdraw the current-completion
|
|
365
|
+
* claim (the post-exit handoff reads it) without touching the history. */
|
|
366
|
+
private reopen(): void {
|
|
367
|
+
if (this.checklist.completed_at === null || this.checklist.reopened_at) return;
|
|
368
|
+
this.checklist.reopened_at = this.adapters.clock().toISOString();
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
list(): StepStatusLine[] {
|
|
372
|
+
return this.registry.map((step) => {
|
|
373
|
+
const rec = this.checklist.steps[step.id];
|
|
374
|
+
return {
|
|
375
|
+
id: step.id,
|
|
376
|
+
title: step.title,
|
|
377
|
+
explain: step.explain,
|
|
378
|
+
status: this.enabled(step) ? (rec?.status ?? "pending") : "disabled",
|
|
379
|
+
note: rec?.note ?? null,
|
|
380
|
+
...(step.optional ? { optional: true } : {}),
|
|
381
|
+
};
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Resume: re-verify every enabled claimed-done step against reality. A step
|
|
387
|
+
* whose verify() fails is demoted to pending with the failures in its note —
|
|
388
|
+
* the file's claim is never trusted alone. A fully-done checklist therefore
|
|
389
|
+
* re-runs as verify-only. Persists once at the end.
|
|
390
|
+
*/
|
|
391
|
+
async reconcile(): Promise<ReconcileReport> {
|
|
392
|
+
const report: ReconcileReport = { verified: [], demoted: [] };
|
|
393
|
+
for (const step of this.registry) {
|
|
394
|
+
if (!this.enabled(step)) continue;
|
|
395
|
+
const rec = this.checklist.steps[step.id];
|
|
396
|
+
if (!rec || rec.status !== "done") {
|
|
397
|
+
this.reopen();
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
const outcome = await this.safeVerify(step);
|
|
401
|
+
if (outcome.ok) {
|
|
402
|
+
rec.verified_at = this.adapters.clock().toISOString();
|
|
403
|
+
report.verified.push(step.id);
|
|
404
|
+
} else {
|
|
405
|
+
const fails = failures(outcome.checks);
|
|
406
|
+
rec.status = "pending";
|
|
407
|
+
rec.note = `re-verification failed: ${fails.join("; ") || "unknown"}`;
|
|
408
|
+
this.reopen();
|
|
409
|
+
report.demoted.push({ id: step.id, failures: fails });
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
this.save();
|
|
413
|
+
return report;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/** Run one step, optionally with the operator's answer (`input`, the pi
|
|
417
|
+
* tool's params). Unknown/disabled ids are refusals-as-answers, never
|
|
418
|
+
* throws (the caller is an LLM tool belt). Persists after the step. */
|
|
419
|
+
async runStep(id: string, input: Record<string, unknown> = {}): Promise<StepRunResult> {
|
|
420
|
+
const step = this.registry.find((s) => s.id === id);
|
|
421
|
+
if (!step) {
|
|
422
|
+
return {
|
|
423
|
+
id,
|
|
424
|
+
ok: false,
|
|
425
|
+
checks: [],
|
|
426
|
+
failures: [`unknown step "${id}" — known: ${this.registry.map((s) => s.id).join(", ")}`],
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
if (!this.enabled(step)) {
|
|
430
|
+
return {
|
|
431
|
+
id,
|
|
432
|
+
ok: false,
|
|
433
|
+
checks: [],
|
|
434
|
+
failures: [`step "${id}" is disabled by the recorded choices`],
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
const rec = this.record(id);
|
|
438
|
+
rec.status = "pending";
|
|
439
|
+
this.reopen();
|
|
440
|
+
this.save();
|
|
441
|
+
let report: StepReport;
|
|
442
|
+
try {
|
|
443
|
+
report = await step.run(this.ctxFor(id, input));
|
|
444
|
+
} catch (err) {
|
|
445
|
+
report = {
|
|
446
|
+
ok: false,
|
|
447
|
+
checks: [{ name: id, ok: false, detail: `step threw: ${String(err)}` }],
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
if (report.data) rec.data = { ...rec.data, ...report.data };
|
|
451
|
+
if (report.ok) {
|
|
452
|
+
rec.status = "done";
|
|
453
|
+
rec.completed_at = this.adapters.clock().toISOString();
|
|
454
|
+
rec.verified_at = null;
|
|
455
|
+
rec.note = null;
|
|
456
|
+
// A run acts on the installation (choices, config, deploys) after the
|
|
457
|
+
// full verification that backed the completion claim: only the next
|
|
458
|
+
// green finish() may make that claim again.
|
|
459
|
+
this.reopen();
|
|
460
|
+
} else {
|
|
461
|
+
rec.status = "pending";
|
|
462
|
+
rec.note = `last run failed: ${failures(report.checks).join("; ") || "unknown"}`;
|
|
463
|
+
this.reopen();
|
|
464
|
+
}
|
|
465
|
+
this.save();
|
|
466
|
+
return { id, ok: report.ok, checks: report.checks, failures: failures(report.checks) };
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
private async safeVerify(step: OnboardingStep): Promise<StepReport> {
|
|
470
|
+
try {
|
|
471
|
+
return await step.verify(this.ctxFor(step.id));
|
|
472
|
+
} catch (err) {
|
|
473
|
+
return {
|
|
474
|
+
ok: false,
|
|
475
|
+
checks: [{ name: step.id, ok: false, detail: `verify threw: ${String(err)}` }],
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Verify every enabled step — done or not. A pending step whose verify()
|
|
482
|
+
* holds is promoted to done (its outcome exists in reality, which is the
|
|
483
|
+
* only truth the checklist mirrors); a done step whose verify() fails
|
|
484
|
+
* reports red here (finish refuses) but demotion is reconcile()'s job.
|
|
485
|
+
*/
|
|
486
|
+
async verifyAll(): Promise<VerifyAllResult> {
|
|
487
|
+
const results: VerifyAllResult["results"] = [];
|
|
488
|
+
for (const step of this.registry) {
|
|
489
|
+
if (!this.enabled(step)) continue;
|
|
490
|
+
const outcome = await this.safeVerify(step);
|
|
491
|
+
const rec = this.record(step.id);
|
|
492
|
+
if (outcome.ok) {
|
|
493
|
+
rec.verified_at = this.adapters.clock().toISOString();
|
|
494
|
+
if (rec.status !== "done") {
|
|
495
|
+
rec.status = "done";
|
|
496
|
+
rec.completed_at = rec.completed_at ?? rec.verified_at;
|
|
497
|
+
rec.note = "verified green without a recorded run";
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
results.push({
|
|
501
|
+
id: step.id,
|
|
502
|
+
ok: outcome.ok,
|
|
503
|
+
failures: failures(outcome.checks),
|
|
504
|
+
...(step.optional ? { optional: true } : {}),
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
this.save();
|
|
508
|
+
return { ok: results.every((r) => r.ok || r.optional === true), results };
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* The finish tool's engine half: re-run the full verification checklist.
|
|
513
|
+
* Anything red ⇒ refuse with the failures (the caller returns them as the
|
|
514
|
+
* tool result and does not exit). All green ⇒ mark the checklist complete
|
|
515
|
+
* and write the first-run marker — once: a marker already on disk is left
|
|
516
|
+
* untouched, so the completed_at the companion greets on never moves.
|
|
517
|
+
*/
|
|
518
|
+
async finish(): Promise<FinishResult> {
|
|
519
|
+
const all = await this.verifyAll();
|
|
520
|
+
if (!all.ok) {
|
|
521
|
+
this.reopen();
|
|
522
|
+
this.save();
|
|
523
|
+
return { ok: false, results: all.results };
|
|
524
|
+
}
|
|
525
|
+
const completedAt = this.checklist.completed_at ?? this.adapters.clock().toISOString();
|
|
526
|
+
this.checklist.completed_at = completedAt;
|
|
527
|
+
this.checklist.reopened_at = null;
|
|
528
|
+
this.save();
|
|
529
|
+
const marker = firstRunMarkerPath(this.adapters.paths.stateDir);
|
|
530
|
+
let markerWritten = false;
|
|
531
|
+
if (!existsSync(marker)) {
|
|
532
|
+
writeAtomic(marker, `${JSON.stringify({ completed_at: completedAt })}\n`);
|
|
533
|
+
markerWritten = true;
|
|
534
|
+
}
|
|
535
|
+
return { ok: true, completed_at: completedAt, marker_written: markerWritten };
|
|
536
|
+
}
|
|
537
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// `qcr onboard` mechanics: launch pi at the pinned version via npx
|
|
2
|
+
// (pi stays a non-dependency — this works from a bare clone with only Node and
|
|
3
|
+
// the checkout), hand it the onboarding system prompt + exactly one onboarding
|
|
4
|
+
// extension + a restricted built-in tool set, and on exit either exec the TUI
|
|
5
|
+
// (checklist complete) or say how to resume.
|
|
6
|
+
//
|
|
7
|
+
// Everything effectful is injected (spawn, completion read, log), so tests
|
|
8
|
+
// drive the whole flow with fakes; src/cli.ts cmdOnboard is the one real
|
|
9
|
+
// assembly.
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { defaultSteps } from "./steps/index.js";
|
|
12
|
+
import { onboardingToolAllowlist } from "./toolnames.js";
|
|
13
|
+
|
|
14
|
+
// The pin reader lives in a leaf module: src/version.ts (on the daemon's import
|
|
15
|
+
// graph) needs it, and this module imports the whole step registry.
|
|
16
|
+
export { piPinFromPackageJson, type PiPin } from "./pipin.js";
|
|
17
|
+
import type { PiPin } from "./pipin.js";
|
|
18
|
+
|
|
19
|
+
/** Dedicated onboarding session store — never the reviewer/companion dirs, so
|
|
20
|
+
* onboarding cannot pollute (or be polluted by) any other pi session store. */
|
|
21
|
+
export function onboardingSessionDir(root: string): string {
|
|
22
|
+
return join(root, "state", "onboarding", "pi-sessions");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The full npx argv for the onboarding pi session.
|
|
27
|
+
*
|
|
28
|
+
* `--approve` is the same never-block-on-input rule as buildPiCommand
|
|
29
|
+
* (src/sessions.ts) and the companion's piArgv: the wizard must never stall
|
|
30
|
+
* on pi's interactive "Trust project folder?" modal.
|
|
31
|
+
*
|
|
32
|
+
* VERIFY-ON-PIN: `--no-extensions`, `--no-skills`, `--no-context-files`,
|
|
33
|
+
* `-e <path>` and `--tools <list>` against the pinned pi version's --help —
|
|
34
|
+
* the intent (no ambient extensions, exactly one onboarding extension, a
|
|
35
|
+
* read-only built-in belt) is the design decision; the exact flag spellings
|
|
36
|
+
* are unverified statically and belong to the named onboarding smoke step.
|
|
37
|
+
*
|
|
38
|
+
* `--tools` is an allowlist over extension tools too (pi 1.4.0; pinned by
|
|
39
|
+
* tests/onboard-tools-sdk.test.ts on the real SDK), so it names every wizard
|
|
40
|
+
* tool, derived from the step registry: a step added there is active here
|
|
41
|
+
* with no second edit. bash, write and edit stay off it.
|
|
42
|
+
*/
|
|
43
|
+
export function onboardingPiArgv(
|
|
44
|
+
pin: PiPin,
|
|
45
|
+
root: string,
|
|
46
|
+
stepIds: readonly string[] = defaultSteps().map((s) => s.id),
|
|
47
|
+
): string[] {
|
|
48
|
+
return [
|
|
49
|
+
"npx",
|
|
50
|
+
"-y",
|
|
51
|
+
`${pin.package}@${pin.version}`,
|
|
52
|
+
"--approve",
|
|
53
|
+
"--no-extensions",
|
|
54
|
+
"--no-skills",
|
|
55
|
+
"--no-context-files",
|
|
56
|
+
"-e",
|
|
57
|
+
join(root, "extensions", "cli", "onboarding.ts"),
|
|
58
|
+
"--system-prompt",
|
|
59
|
+
join(root, "prompts", "onboarding.md"),
|
|
60
|
+
"--tools",
|
|
61
|
+
onboardingToolAllowlist(stepIds).join(","),
|
|
62
|
+
"--session-dir",
|
|
63
|
+
onboardingSessionDir(root),
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface OnboardRunDeps {
|
|
68
|
+
pin: PiPin;
|
|
69
|
+
root: string;
|
|
70
|
+
/** Spawn with stdio inherited; resolves with the exit code (a spawn failure
|
|
71
|
+
* is a nonzero code, never a throw). */
|
|
72
|
+
spawn(cmd: string, args: string[]): Promise<number>;
|
|
73
|
+
/** Does the checklist file say every step verified? (engine.checklistComplete
|
|
74
|
+
* over state/ — the finish tool only sets the flag after a green re-verify.) */
|
|
75
|
+
isComplete(): boolean;
|
|
76
|
+
log(line: string): void;
|
|
77
|
+
/** Compiled CLI path for the TUI handoff (dist/src/cli.js). */
|
|
78
|
+
cliPath: string;
|
|
79
|
+
/** Node binary for the handoff; defaults to the running one. */
|
|
80
|
+
nodeBin?: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Run the onboarding session and handle the handoff:
|
|
85
|
+
* - checklist complete after pi exits ⇒ open the TUI (same stdio);
|
|
86
|
+
* - otherwise print how to resume — `qcr onboard` again re-verifies
|
|
87
|
+
* completed steps and continues at the first unfinished one.
|
|
88
|
+
*/
|
|
89
|
+
export async function runOnboard(deps: OnboardRunDeps): Promise<number> {
|
|
90
|
+
const argv = onboardingPiArgv(deps.pin, deps.root);
|
|
91
|
+
deps.log(
|
|
92
|
+
`onboarding: launching pi ${deps.pin.package}@${deps.pin.version} via npx (first run downloads it — give it a moment)`,
|
|
93
|
+
);
|
|
94
|
+
const code = await deps.spawn(argv[0]!, argv.slice(1));
|
|
95
|
+
if (deps.isComplete()) {
|
|
96
|
+
deps.log("onboarding: checklist verified complete — opening the TUI.");
|
|
97
|
+
return deps.spawn(deps.nodeBin ?? process.execPath, [deps.cliPath, "tui"]);
|
|
98
|
+
}
|
|
99
|
+
deps.log(
|
|
100
|
+
"onboarding: not finished yet. Run `qcr onboard` again to resume — completed steps are re-verified, not repeated.",
|
|
101
|
+
);
|
|
102
|
+
return code;
|
|
103
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// The pinned pi version, read from package.json. A leaf: the daemon reaches it
|
|
2
|
+
// through src/version.ts, so it imports nothing from the onboarding wizard.
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
|
|
6
|
+
export interface PiPin {
|
|
7
|
+
package: string;
|
|
8
|
+
version: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** The pin from package.json's "qcrPi" block — the mirror that exists on a bare
|
|
12
|
+
* public clone, where config.toml does not (the wizard writes it later).
|
|
13
|
+
* config.toml [pi] stays the preferred source when it loads (cmdOnboard tries
|
|
14
|
+
* it first); both mirror the same pinned version by rule 7's discipline. */
|
|
15
|
+
export function piPinFromPackageJson(
|
|
16
|
+
root: string,
|
|
17
|
+
readFile: (p: string) => string = (p) => readFileSync(p, "utf8"),
|
|
18
|
+
): PiPin | null {
|
|
19
|
+
try {
|
|
20
|
+
const pkg = JSON.parse(readFile(join(root, "package.json"))) as {
|
|
21
|
+
qcrPi?: { package?: unknown; version?: unknown };
|
|
22
|
+
};
|
|
23
|
+
const pi = pkg.qcrPi;
|
|
24
|
+
if (pi && typeof pi.package === "string" && typeof pi.version === "string") {
|
|
25
|
+
return { package: pi.package, version: pi.version };
|
|
26
|
+
}
|
|
27
|
+
} catch {
|
|
28
|
+
// fall through — the caller reports the missing pin
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|