@quickchatai/quickreview 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +385 -2
- package/THIRD-PARTY-NOTICES.md +134 -0
- package/agents/pass-abstraction.md +64 -0
- package/agents/pass-ask-human.md +134 -0
- package/agents/pass-backcompat.md +67 -0
- package/agents/pass-baseline.md +61 -0
- package/agents/pass-behaviour-delta.md +64 -0
- package/agents/pass-bounds.md +36 -0
- package/agents/pass-claims.md +31 -0
- package/agents/pass-concurrency.md +168 -0
- package/agents/pass-consistency.md +57 -0
- package/agents/pass-contracts.md +30 -0
- package/agents/pass-data-safety.md +54 -0
- package/agents/pass-deferred.md +35 -0
- package/agents/pass-delivery.md +37 -0
- package/agents/pass-duplication.md +60 -0
- package/agents/pass-intent.md +63 -0
- package/agents/pass-lint-conformance.md +46 -0
- package/agents/pass-maintainability.md +67 -0
- package/agents/pass-placement.md +68 -0
- package/agents/pass-prod-risk.md +24 -0
- package/agents/pass-rollout.md +32 -0
- package/agents/pass-roundtrip.md +46 -0
- package/agents/pass-security.md +31 -0
- package/agents/pass-simplicity.md +68 -0
- package/agents/pass-statelessness.md +27 -0
- package/agents/pass-style.md +37 -0
- package/agents/pass-sweep.md +57 -0
- package/agents/pass-tests.md +58 -0
- package/agents/pass-ui.md +23 -0
- package/agents/pass-validate.md +50 -0
- package/agents/pass-widened.md +46 -0
- package/agents/scan/pass-scan.md +86 -0
- package/bin/qcr.js +11 -0
- package/config.example.toml +1067 -0
- package/deploy/ansible/README.md +356 -0
- package/deploy/ansible/group_vars/all.yml +212 -0
- package/deploy/ansible/inventory.example.ini +25 -0
- package/deploy/ansible/playbook.yml +360 -0
- package/deploy/collect-secrets.sh +289 -0
- package/deploy/collect-slack-secrets.mjs +1190 -0
- package/deploy/github-app-manifest.json +31 -0
- package/deploy/manifest.schema.json +75 -0
- package/deploy/qcr-update.sh +803 -0
- package/deploy/reviewer/AGENTS.override.md +12 -0
- package/dist/extensions/cli/bash-guard-ambient.js +42 -0
- package/dist/extensions/cli/bash-guard-ambient.js.map +1 -0
- package/dist/extensions/cli/bash-guard.js +5 -0
- package/dist/extensions/cli/bash-guard.js.map +1 -0
- package/dist/extensions/cli/companion-guard.js +5 -0
- package/dist/extensions/cli/companion-guard.js.map +1 -0
- package/dist/extensions/cli/debug-round.js +8 -0
- package/dist/extensions/cli/debug-round.js.map +1 -0
- package/dist/extensions/cli/inject-bridge.js +5 -0
- package/dist/extensions/cli/inject-bridge.js.map +1 -0
- package/dist/extensions/cli/ledger-pin.js +5 -0
- package/dist/extensions/cli/ledger-pin.js.map +1 -0
- package/dist/extensions/cli/lens.js +13 -0
- package/dist/extensions/cli/lens.js.map +1 -0
- package/dist/extensions/cli/muted-theme.js +5 -0
- package/dist/extensions/cli/muted-theme.js.map +1 -0
- package/dist/extensions/cli/onboarding.js +5 -0
- package/dist/extensions/cli/onboarding.js.map +1 -0
- package/dist/extensions/cli/setup.js +5 -0
- package/dist/extensions/cli/setup.js.map +1 -0
- package/dist/extensions/cli/tui-view.js +5 -0
- package/dist/extensions/cli/tui-view.js.map +1 -0
- package/dist/extensions/companion-guard.js +361 -0
- package/dist/extensions/companion-guard.js.map +1 -0
- package/dist/extensions/debug-round.js +204 -0
- package/dist/extensions/debug-round.js.map +1 -0
- package/dist/extensions/inject-bridge.js +603 -0
- package/dist/extensions/inject-bridge.js.map +1 -0
- package/dist/extensions/muted-theme.js +12 -0
- package/dist/extensions/muted-theme.js.map +1 -0
- package/dist/extensions/onboarding.js +175 -0
- package/dist/extensions/onboarding.js.map +1 -0
- package/dist/extensions/setup-replay.js +269 -0
- package/dist/extensions/setup-replay.js.map +1 -0
- package/dist/extensions/setup-scan.js +998 -0
- package/dist/extensions/setup-scan.js.map +1 -0
- package/dist/extensions/setup-triage.js +175 -0
- package/dist/extensions/setup-triage.js.map +1 -0
- package/dist/extensions/setup.js +1160 -0
- package/dist/extensions/setup.js.map +1 -0
- package/dist/extensions/tui-view.js +389 -0
- package/dist/extensions/tui-view.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/client.js +376 -0
- package/dist/extensions/vendor/openviking-pi/client.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/config.js +189 -0
- package/dist/extensions/vendor/openviking-pi/config.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/index.js +421 -0
- package/dist/extensions/vendor/openviking-pi/index.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +86 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs +408 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +41 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js +290 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js +148 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +68 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js +77 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js +216 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js +154 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js +254 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js +94 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js +333 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/recall.js +108 -0
- package/dist/extensions/vendor/openviking-pi/recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs +529 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs +205 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs +442 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs +286 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +189 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs +580 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs +11 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs +63 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs +58 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/sync.js +127 -0
- package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js +25 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/tools.js +417 -0
- package/dist/extensions/vendor/openviking-pi/tools.js.map +1 -0
- package/dist/src/anomalies.js +483 -0
- package/dist/src/anomalies.js.map +1 -0
- package/dist/src/answerworker.js +180 -0
- package/dist/src/answerworker.js.map +1 -0
- package/dist/src/appstamp.js +68 -0
- package/dist/src/appstamp.js.map +1 -0
- package/dist/src/archive/admission.js +3 -0
- package/dist/src/archive/admission.js.map +1 -0
- package/dist/src/archive/archivedb.js +474 -0
- package/dist/src/archive/archivedb.js.map +1 -0
- package/dist/src/archive/archiver.js +1770 -0
- package/dist/src/archive/archiver.js.map +1 -0
- package/dist/src/archive/archivewrite.js +198 -0
- package/dist/src/archive/archivewrite.js.map +1 -0
- package/dist/src/archive/bundle.js +266 -0
- package/dist/src/archive/bundle.js.map +1 -0
- package/dist/src/archive/dbmove.js +638 -0
- package/dist/src/archive/dbmove.js.map +1 -0
- package/dist/src/archive/duplicatecounts.js +80 -0
- package/dist/src/archive/duplicatecounts.js.map +1 -0
- package/dist/src/archive/eligibility.js +113 -0
- package/dist/src/archive/eligibility.js.map +1 -0
- package/dist/src/archive/extract.js +288 -0
- package/dist/src/archive/extract.js.map +1 -0
- package/dist/src/archive/fsutil.js +330 -0
- package/dist/src/archive/fsutil.js.map +1 -0
- package/dist/src/archive/gzfile.js +277 -0
- package/dist/src/archive/gzfile.js.map +1 -0
- package/dist/src/archive/kinds.js +22 -0
- package/dist/src/archive/kinds.js.map +1 -0
- package/dist/src/archive/livecheckpoint.js +178 -0
- package/dist/src/archive/livecheckpoint.js.map +1 -0
- package/dist/src/archive/liveretention.js +145 -0
- package/dist/src/archive/liveretention.js.map +1 -0
- package/dist/src/archive/manifest.js +284 -0
- package/dist/src/archive/manifest.js.map +1 -0
- package/dist/src/archive/overseer.js +283 -0
- package/dist/src/archive/overseer.js.map +1 -0
- package/dist/src/archive/piglobal.js +129 -0
- package/dist/src/archive/piglobal.js.map +1 -0
- package/dist/src/archive/plan.js +398 -0
- package/dist/src/archive/plan.js.map +1 -0
- package/dist/src/archive/prarchive.js +831 -0
- package/dist/src/archive/prarchive.js.map +1 -0
- package/dist/src/archive/prfiles.js +303 -0
- package/dist/src/archive/prfiles.js.map +1 -0
- package/dist/src/archive/report.js +169 -0
- package/dist/src/archive/report.js.map +1 -0
- package/dist/src/archive/restore.js +276 -0
- package/dist/src/archive/restore.js.map +1 -0
- package/dist/src/archive/rows.js +106 -0
- package/dist/src/archive/rows.js.map +1 -0
- package/dist/src/archive/seal.js +480 -0
- package/dist/src/archive/seal.js.map +1 -0
- package/dist/src/archive/status.js +528 -0
- package/dist/src/archive/status.js.map +1 -0
- package/dist/src/archive/storepass.js +409 -0
- package/dist/src/archive/storepass.js.map +1 -0
- package/dist/src/backfill.js +217 -0
- package/dist/src/backfill.js.map +1 -0
- package/dist/src/bench/cost.js +87 -0
- package/dist/src/bench/exec.js +76 -0
- package/dist/src/bench/values.js +14 -0
- package/dist/src/botcontrol.js +127 -0
- package/dist/src/botcontrol.js.map +1 -0
- package/dist/src/botworker.js +805 -0
- package/dist/src/botworker.js.map +1 -0
- package/dist/src/capture.js +234 -0
- package/dist/src/capture.js.map +1 -0
- package/dist/src/cases.js +1491 -0
- package/dist/src/cases.js.map +1 -0
- package/dist/src/channelfs.js +27 -0
- package/dist/src/channelfs.js.map +1 -0
- package/dist/src/checklist.js +312 -0
- package/dist/src/checklist.js.map +1 -0
- package/dist/src/ciretry.js +91 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1916 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +333 -0
- package/dist/src/cliops.js.map +1 -0
- package/dist/src/clonedir.js +15 -0
- package/dist/src/clonedir.js.map +1 -0
- package/dist/src/commandeffects.js +43 -0
- package/dist/src/commandeffects.js.map +1 -0
- package/dist/src/commands.js +1312 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/companioninbox.js +203 -0
- package/dist/src/companioninbox.js.map +1 -0
- package/dist/src/compare.js +673 -0
- package/dist/src/compare.js.map +1 -0
- package/dist/src/config.js +1027 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/configcheck.js +111 -0
- package/dist/src/configcheck.js.map +1 -0
- package/dist/src/coreext.js +43 -0
- package/dist/src/coreext.js.map +1 -0
- package/dist/src/daemon.js +929 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/debuground.js +731 -0
- package/dist/src/debuground.js.map +1 -0
- package/dist/src/debugroundpi.js +219 -0
- package/dist/src/debugroundpi.js.map +1 -0
- package/dist/src/diagnostics.js +14 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/digest.js +139 -0
- package/dist/src/digest.js.map +1 -0
- package/dist/src/dispatch.js +1726 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/engine/answerguard.js +18 -0
- package/dist/src/engine/answerguard.js.map +1 -0
- package/dist/src/engine/botsdk.js +262 -0
- package/dist/src/engine/botsdk.js.map +1 -0
- package/dist/src/engine/caserunner-sdk.js +332 -0
- package/dist/src/engine/caserunner-sdk.js.map +1 -0
- package/dist/src/engine/debugpi.js +194 -0
- package/dist/src/engine/debugpi.js.map +1 -0
- package/dist/src/eod.js +473 -0
- package/dist/src/eod.js.map +1 -0
- package/dist/src/eodpinwatch.js +391 -0
- package/dist/src/eodpinwatch.js.map +1 -0
- package/dist/src/escalation.js +1009 -0
- package/dist/src/escalation.js.map +1 -0
- package/dist/src/eventloop.js +779 -0
- package/dist/src/eventloop.js.map +1 -0
- package/dist/src/execboundary.js +430 -0
- package/dist/src/execboundary.js.map +1 -0
- package/dist/src/feedback.js +915 -0
- package/dist/src/feedback.js.map +1 -0
- package/dist/src/findingscheck.js +200 -0
- package/dist/src/findingscheck.js.map +1 -0
- package/dist/src/fsdenied.js +26 -0
- package/dist/src/fsdenied.js.map +1 -0
- package/dist/src/ghread.js +181 -0
- package/dist/src/ghread.js.map +1 -0
- package/dist/src/github.js +1063 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/homes.js +103 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hostroute.js +24 -0
- package/dist/src/hostroute.js.map +1 -0
- package/dist/src/improvements.js +625 -0
- package/dist/src/improvements.js.map +1 -0
- package/dist/src/install.js +946 -0
- package/dist/src/install.js.map +1 -0
- package/dist/src/installkind.js +40 -0
- package/dist/src/installkind.js.map +1 -0
- package/dist/src/ipc/capability.js +286 -0
- package/dist/src/ipc/capability.js.map +1 -0
- package/dist/src/ipc/client.js +226 -0
- package/dist/src/ipc/client.js.map +1 -0
- package/dist/src/ipc/control.js +70 -0
- package/dist/src/ipc/control.js.map +1 -0
- package/dist/src/ipc/ghreadshim.js +77 -0
- package/dist/src/ipc/ghreadshim.js.map +1 -0
- package/dist/src/ipc/launcher.js +65 -0
- package/dist/src/ipc/launcher.js.map +1 -0
- package/dist/src/ipc/permits.js +293 -0
- package/dist/src/ipc/permits.js.map +1 -0
- package/dist/src/ipc/postshim.js +137 -0
- package/dist/src/ipc/postshim.js.map +1 -0
- package/dist/src/ipc/protocol.js +239 -0
- package/dist/src/ipc/protocol.js.map +1 -0
- package/dist/src/ipc/server.js +312 -0
- package/dist/src/ipc/server.js.map +1 -0
- package/dist/src/ipc/workerspec.js +148 -0
- package/dist/src/ipc/workerspec.js.map +1 -0
- package/dist/src/learner/learner.js +1272 -0
- package/dist/src/learner/learner.js.map +1 -0
- package/dist/src/learner/miner.js +948 -0
- package/dist/src/learner/miner.js.map +1 -0
- package/dist/src/learner/packet.js +216 -0
- package/dist/src/learner/packet.js.map +1 -0
- package/dist/src/learner/receipt.js +135 -0
- package/dist/src/learner/receipt.js.map +1 -0
- package/dist/src/learner/status.js +38 -0
- package/dist/src/learner/status.js.map +1 -0
- package/dist/src/ledgercheck.js +120 -0
- package/dist/src/ledgercheck.js.map +1 -0
- package/dist/src/lessonledger.js +451 -0
- package/dist/src/lessonledger.js.map +1 -0
- package/dist/src/lessonselect.js +639 -0
- package/dist/src/lessonselect.js.map +1 -0
- package/dist/src/lessonshadow.js +540 -0
- package/dist/src/lessonshadow.js.map +1 -0
- package/dist/src/levers.js +302 -0
- package/dist/src/levers.js.map +1 -0
- package/dist/src/live/projection.js +450 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/publish.js +83 -0
- package/dist/src/live/publish.js.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/livecli.js +288 -0
- package/dist/src/livecli.js.map +1 -0
- package/dist/src/loginhint.js +42 -0
- package/dist/src/loginhint.js.map +1 -0
- package/dist/src/loginrefresh/atomic.js +66 -0
- package/dist/src/loginrefresh/atomic.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +93 -0
- package/dist/src/loginrefresh/lock.js.map +1 -0
- package/dist/src/loginrefresh/main.js +58 -0
- package/dist/src/loginrefresh/main.js.map +1 -0
- package/dist/src/loginrefresh/pirefresh.js +49 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -0
- package/dist/src/loginrefresh/refresher.js +286 -0
- package/dist/src/loginrefresh/refresher.js.map +1 -0
- package/dist/src/loginrefresh/supervisor.js +253 -0
- package/dist/src/loginrefresh/supervisor.js.map +1 -0
- package/dist/src/loginrefresh/types.js +4 -0
- package/dist/src/loginrefresh/types.js.map +1 -0
- package/dist/src/memory/context.js +251 -0
- package/dist/src/memory/context.js.map +1 -0
- package/dist/src/memory/datafence.js +5 -0
- package/dist/src/memory/datafence.js.map +1 -0
- package/dist/src/memory/delivery.js +131 -0
- package/dist/src/memory/delivery.js.map +1 -0
- package/dist/src/memory/eventtags.js +81 -0
- package/dist/src/memory/eventtags.js.map +1 -0
- package/dist/src/memory/health.js +713 -0
- package/dist/src/memory/health.js.map +1 -0
- package/dist/src/memory/import.js +504 -0
- package/dist/src/memory/import.js.map +1 -0
- package/dist/src/memory/layout.js +252 -0
- package/dist/src/memory/layout.js.map +1 -0
- package/dist/src/memory/legacy-file.js +100 -0
- package/dist/src/memory/legacy-file.js.map +1 -0
- package/dist/src/memory/lessons.js +370 -0
- package/dist/src/memory/lessons.js.map +1 -0
- package/dist/src/memory/ovsession.js +449 -0
- package/dist/src/memory/ovsession.js.map +1 -0
- package/dist/src/memory/relayout.js +259 -0
- package/dist/src/memory/relayout.js.map +1 -0
- package/dist/src/memory/roundactivity.js +180 -0
- package/dist/src/memory/roundactivity.js.map +1 -0
- package/dist/src/memory/selection.js +690 -0
- package/dist/src/memory/selection.js.map +1 -0
- package/dist/src/memory/shadowstatus.js +69 -0
- package/dist/src/memory/shadowstatus.js.map +1 -0
- package/dist/src/memory/store.js +83 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/memory/textidentity.js +8 -0
- package/dist/src/memory/textidentity.js.map +1 -0
- package/dist/src/metrics.js +773 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/missingconfig.js +8 -0
- package/dist/src/missingconfig.js.map +1 -0
- package/dist/src/npmverbs.js +226 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +191 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +344 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +83 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +211 -0
- package/dist/src/onboard/steps/appslug.js.map +1 -0
- package/dist/src/onboard/steps/bringup.js +408 -0
- package/dist/src/onboard/steps/bringup.js.map +1 -0
- package/dist/src/onboard/steps/compose.js +343 -0
- package/dist/src/onboard/steps/compose.js.map +1 -0
- package/dist/src/onboard/steps/configdelivery.js +50 -0
- package/dist/src/onboard/steps/configdelivery.js.map +1 -0
- package/dist/src/onboard/steps/configfill.js +1148 -0
- package/dist/src/onboard/steps/configfill.js.map +1 -0
- package/dist/src/onboard/steps/deploysh.js +80 -0
- package/dist/src/onboard/steps/deploysh.js.map +1 -0
- package/dist/src/onboard/steps/embeddings.js +472 -0
- package/dist/src/onboard/steps/embeddings.js.map +1 -0
- package/dist/src/onboard/steps/escalation.js +571 -0
- package/dist/src/onboard/steps/escalation.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +1092 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +506 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +67 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +762 -0
- package/dist/src/onboard/steps/ingress.js.map +1 -0
- package/dist/src/onboard/steps/inventory.js +420 -0
- package/dist/src/onboard/steps/inventory.js.map +1 -0
- package/dist/src/onboard/steps/llmauth.js +893 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1060 -0
- package/dist/src/onboard/steps/memory.js.map +1 -0
- package/dist/src/onboard/steps/memorykeys.js +43 -0
- package/dist/src/onboard/steps/memorykeys.js.map +1 -0
- package/dist/src/onboard/steps/preflight.js +172 -0
- package/dist/src/onboard/steps/preflight.js.map +1 -0
- package/dist/src/onboard/steps/proof.js +502 -0
- package/dist/src/onboard/steps/proof.js.map +1 -0
- package/dist/src/onboard/steps/ssh.js +300 -0
- package/dist/src/onboard/steps/ssh.js.map +1 -0
- package/dist/src/onboard/steps/topology.js +291 -0
- package/dist/src/onboard/steps/topology.js.map +1 -0
- package/dist/src/onboard/steps/transport.js +511 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +362 -0
- package/dist/src/onboard/steps/verifyup.js.map +1 -0
- package/dist/src/onboard/steps/vmdeploy.js +368 -0
- package/dist/src/onboard/steps/vmdeploy.js.map +1 -0
- package/dist/src/onboard/toml.js +53 -0
- package/dist/src/onboard/toml.js.map +1 -0
- package/dist/src/opencli.js +508 -0
- package/dist/src/opencli.js.map +1 -0
- package/dist/src/openpr.js +457 -0
- package/dist/src/openpr.js.map +1 -0
- package/dist/src/openviking/client.js +821 -0
- package/dist/src/openviking/client.js.map +1 -0
- package/dist/src/openviking/context.js +218 -0
- package/dist/src/openviking/context.js.map +1 -0
- package/dist/src/openviking/embedder.js +457 -0
- package/dist/src/openviking/embedder.js.map +1 -0
- package/dist/src/openviking/gapsink.js +38 -0
- package/dist/src/openviking/gapsink.js.map +1 -0
- package/dist/src/openviking/health.js +69 -0
- package/dist/src/openviking/health.js.map +1 -0
- package/dist/src/openviking/index.js +24 -0
- package/dist/src/openviking/index.js.map +1 -0
- package/dist/src/openviking/lessonfind.js +54 -0
- package/dist/src/openviking/lessonfind.js.map +1 -0
- package/dist/src/openviking/probe.js +89 -0
- package/dist/src/openviking/probe.js.map +1 -0
- package/dist/src/openviking/proc.js +95 -0
- package/dist/src/openviking/proc.js.map +1 -0
- package/dist/src/openviking/provisionreport.js +144 -0
- package/dist/src/openviking/provisionreport.js.map +1 -0
- package/dist/src/openviking/reembed.js +317 -0
- package/dist/src/openviking/reembed.js.map +1 -0
- package/dist/src/openviking/relayout.js +153 -0
- package/dist/src/openviking/relayout.js.map +1 -0
- package/dist/src/openviking/sidecar-main.js +39 -0
- package/dist/src/openviking/sidecar-main.js.map +1 -0
- package/dist/src/openviking/sidecar.js +79 -0
- package/dist/src/openviking/sidecar.js.map +1 -0
- package/dist/src/openviking/store.js +1758 -0
- package/dist/src/openviking/store.js.map +1 -0
- package/dist/src/openviking/supervisor.js +422 -0
- package/dist/src/openviking/supervisor.js.map +1 -0
- package/dist/src/openviking/types.js +5 -0
- package/dist/src/openviking/types.js.map +1 -0
- package/dist/src/operator-recovery.js +172 -0
- package/dist/src/operator-recovery.js.map +1 -0
- package/dist/src/operatormessage.js +44 -0
- package/dist/src/operatormessage.js.map +1 -0
- package/dist/src/outcomes.js +1361 -0
- package/dist/src/outcomes.js.map +1 -0
- package/dist/src/piauthcopy.js +5 -0
- package/dist/src/piauthcopy.js.map +1 -0
- package/dist/src/picli.js +45 -0
- package/dist/src/picli.js.map +1 -0
- package/dist/src/picwd.js +25 -0
- package/dist/src/picwd.js.map +1 -0
- package/dist/src/pilogin.js +35 -0
- package/dist/src/pilogin.js.map +1 -0
- package/dist/src/pingpong.js +1028 -0
- package/dist/src/pingpong.js.map +1 -0
- package/dist/src/posting-journal.js +441 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +662 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +203 -0
- package/dist/src/posting-receipt.js.map +1 -0
- package/dist/src/posting.js +348 -0
- package/dist/src/posting.js.map +1 -0
- package/dist/src/postops.js +637 -0
- package/dist/src/postops.js.map +1 -0
- package/dist/src/pr-activity.js +11 -0
- package/dist/src/pr-activity.js.map +1 -0
- package/dist/src/pr-author.js +5 -0
- package/dist/src/pr-author.js.map +1 -0
- package/dist/src/pr-conversation.js +355 -0
- package/dist/src/pr-conversation.js.map +1 -0
- package/dist/src/pr-session-lifecycle.js +542 -0
- package/dist/src/pr-session-lifecycle.js.map +1 -0
- package/dist/src/preflight.js +341 -0
- package/dist/src/preflight.js.map +1 -0
- package/dist/src/priorresolve.js +275 -0
- package/dist/src/priorresolve.js.map +1 -0
- package/dist/src/qcrbin.js +180 -0
- package/dist/src/qcrbin.js.map +1 -0
- package/dist/src/recheck.js +1398 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +820 -0
- package/dist/src/reconcile.js.map +1 -0
- package/dist/src/recordedfindings.js +15 -0
- package/dist/src/recordedfindings.js.map +1 -0
- package/dist/src/regression.js +546 -0
- package/dist/src/regression.js.map +1 -0
- package/dist/src/replay.js +598 -0
- package/dist/src/replay.js.map +1 -0
- package/dist/src/requiredpasses.js +113 -0
- package/dist/src/requiredpasses.js.map +1 -0
- package/dist/src/resumecheck.js +168 -0
- package/dist/src/resumecheck.js.map +1 -0
- package/dist/src/reviewcli.js +671 -0
- package/dist/src/reviewcli.js.map +1 -0
- package/dist/src/reviewcontext.js +22 -0
- package/dist/src/reviewcontext.js.map +1 -0
- package/dist/src/reviewdetach.js +574 -0
- package/dist/src/reviewdetach.js.map +1 -0
- package/dist/src/reviewhistory.js +284 -0
- package/dist/src/reviewhistory.js.map +1 -0
- package/dist/src/reviewhome.js +26 -0
- package/dist/src/reviewhome.js.map +1 -0
- package/dist/src/reviewmemory.js +110 -0
- package/dist/src/reviewmemory.js.map +1 -0
- package/dist/src/reviewrendercli.js +104 -0
- package/dist/src/reviewrendercli.js.map +1 -0
- package/dist/src/round-work.js +20 -0
- package/dist/src/round-work.js.map +1 -0
- package/dist/src/runhost.js +72 -0
- package/dist/src/runhost.js.map +1 -0
- package/dist/src/scanauth.js +25 -0
- package/dist/src/scanauth.js.map +1 -0
- package/dist/src/scanbox.js +846 -0
- package/dist/src/scanbox.js.map +1 -0
- package/dist/src/scancli.js +1074 -0
- package/dist/src/scancli.js.map +1 -0
- package/dist/src/scandriverlog.js +30 -0
- package/dist/src/scandriverlog.js.map +1 -0
- package/dist/src/session-bridge.js +75 -0
- package/dist/src/session-bridge.js.map +1 -0
- package/dist/src/session-command-payload.js +29 -0
- package/dist/src/session-command-payload.js.map +1 -0
- package/dist/src/session-command-supervisor.js +939 -0
- package/dist/src/session-command-supervisor.js.map +1 -0
- package/dist/src/sessionjsonl.js +85 -0
- package/dist/src/sessionjsonl.js.map +1 -0
- package/dist/src/sessions.js +541 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup/adapters.js +330 -0
- package/dist/src/setup/adapters.js.map +1 -0
- package/dist/src/setup/baselines.js +64 -0
- package/dist/src/setup/baselines.js.map +1 -0
- package/dist/src/setup/caserunner.js +554 -0
- package/dist/src/setup/caserunner.js.map +1 -0
- package/dist/src/setup/configcommit.js +358 -0
- package/dist/src/setup/configcommit.js.map +1 -0
- package/dist/src/setup/engine.js +672 -0
- package/dist/src/setup/engine.js.map +1 -0
- package/dist/src/setup/facts.js +593 -0
- package/dist/src/setup/facts.js.map +1 -0
- package/dist/src/setup/findings.js +948 -0
- package/dist/src/setup/findings.js.map +1 -0
- package/dist/src/setup/history.js +338 -0
- package/dist/src/setup/history.js.map +1 -0
- package/dist/src/setup/interview.js +185 -0
- package/dist/src/setup/interview.js.map +1 -0
- package/dist/src/setup/ledger.js +207 -0
- package/dist/src/setup/ledger.js.map +1 -0
- package/dist/src/setup/pins.js +43 -0
- package/dist/src/setup/pins.js.map +1 -0
- package/dist/src/setup/portrait.js +432 -0
- package/dist/src/setup/portrait.js.map +1 -0
- package/dist/src/setup/presentation.js +9 -0
- package/dist/src/setup/presentation.js.map +1 -0
- package/dist/src/setup/profile.js +417 -0
- package/dist/src/setup/profile.js.map +1 -0
- package/dist/src/setup/replay.js +240 -0
- package/dist/src/setup/replay.js.map +1 -0
- package/dist/src/setup/replaybuild.js +311 -0
- package/dist/src/setup/replaybuild.js.map +1 -0
- package/dist/src/setup/replayrun.js +806 -0
- package/dist/src/setup/replayrun.js.map +1 -0
- package/dist/src/setup/replaysource.js +169 -0
- package/dist/src/setup/replaysource.js.map +1 -0
- package/dist/src/setup/retune.js +333 -0
- package/dist/src/setup/retune.js.map +1 -0
- package/dist/src/setup/retunelog.js +51 -0
- package/dist/src/setup/retunelog.js.map +1 -0
- package/dist/src/setup/scan.js +725 -0
- package/dist/src/setup/scan.js.map +1 -0
- package/dist/src/setup/scanbuild.js +133 -0
- package/dist/src/setup/scanbuild.js.map +1 -0
- package/dist/src/setup/scanfacts.js +96 -0
- package/dist/src/setup/scanfacts.js.map +1 -0
- package/dist/src/setup/scanlease.js +251 -0
- package/dist/src/setup/scanlease.js.map +1 -0
- package/dist/src/setup/scanreport.js +289 -0
- package/dist/src/setup/scanreport.js.map +1 -0
- package/dist/src/setup/scanrun.js +1733 -0
- package/dist/src/setup/scanrun.js.map +1 -0
- package/dist/src/setup/scantree.js +257 -0
- package/dist/src/setup/scantree.js.map +1 -0
- package/dist/src/setup/stage2.js +617 -0
- package/dist/src/setup/stage2.js.map +1 -0
- package/dist/src/setup/stage2request.js +259 -0
- package/dist/src/setup/stage2request.js.map +1 -0
- package/dist/src/setup/survey.js +307 -0
- package/dist/src/setup/survey.js.map +1 -0
- package/dist/src/setup/surveyrun.js +549 -0
- package/dist/src/setup/surveyrun.js.map +1 -0
- package/dist/src/setup/textsniff.js +89 -0
- package/dist/src/setup/textsniff.js.map +1 -0
- package/dist/src/setup/trackersink.js +395 -0
- package/dist/src/setup/trackersink.js.map +1 -0
- package/dist/src/setup/triage.js +636 -0
- package/dist/src/setup/triage.js.map +1 -0
- package/dist/src/setup/tuning.js +585 -0
- package/dist/src/setup/tuning.js.map +1 -0
- package/dist/src/setup/unitcut.js +437 -0
- package/dist/src/setup/unitcut.js.map +1 -0
- package/dist/src/singleflight.js +72 -0
- package/dist/src/singleflight.js.map +1 -0
- package/dist/src/slack/announce.js +725 -0
- package/dist/src/slack/announce.js.map +1 -0
- package/dist/src/slack/api.js +227 -0
- package/dist/src/slack/api.js.map +1 -0
- package/dist/src/slack/messages.js +158 -0
- package/dist/src/slack/messages.js.map +1 -0
- package/dist/src/slack/origin.js +550 -0
- package/dist/src/slack/origin.js.map +1 -0
- package/dist/src/slack/policy.js +225 -0
- package/dist/src/slack/policy.js.map +1 -0
- package/dist/src/slack/reply.js +153 -0
- package/dist/src/slack/reply.js.map +1 -0
- package/dist/src/slack/router.js +189 -0
- package/dist/src/slack/router.js.map +1 -0
- package/dist/src/slack/socket.js +323 -0
- package/dist/src/slack/socket.js.map +1 -0
- package/dist/src/slack/types.js +11 -0
- package/dist/src/slack/types.js.map +1 -0
- package/dist/src/sqlitehint.js +30 -0
- package/dist/src/sqlitehint.js.map +1 -0
- package/dist/src/ssh-observation.js +25 -0
- package/dist/src/ssh-observation.js.map +1 -0
- package/dist/src/state.js +5869 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/statemachine.js +220 -0
- package/dist/src/statemachine.js.map +1 -0
- package/dist/src/stubs.js +52 -0
- package/dist/src/stubs.js.map +1 -0
- package/dist/src/takeover.js +506 -0
- package/dist/src/takeover.js.map +1 -0
- package/dist/src/takeoverpi.js +249 -0
- package/dist/src/takeoverpi.js.map +1 -0
- package/dist/src/terminal-failure.js +26 -0
- package/dist/src/terminal-failure.js.map +1 -0
- package/dist/src/thread-resolution-refusal.js +4 -0
- package/dist/src/thread-resolution-refusal.js.map +1 -0
- package/dist/src/tmux.js +126 -0
- package/dist/src/tmux.js.map +1 -0
- package/dist/src/trackerid.js +43 -0
- package/dist/src/trackerid.js.map +1 -0
- package/dist/src/transcriptindex.js +512 -0
- package/dist/src/transcriptindex.js.map +1 -0
- package/dist/src/tui/actions.js +404 -0
- package/dist/src/tui/actions.js.map +1 -0
- package/dist/src/tui/alerts.js +523 -0
- package/dist/src/tui/alerts.js.map +1 -0
- package/dist/src/tui/app.js +1835 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/archiveops.js +164 -0
- package/dist/src/tui/archiveops.js.map +1 -0
- package/dist/src/tui/autofile.js +191 -0
- package/dist/src/tui/autofile.js.map +1 -0
- package/dist/src/tui/board.js +1143 -0
- package/dist/src/tui/board.js.map +1 -0
- package/dist/src/tui/candidates.js +699 -0
- package/dist/src/tui/candidates.js.map +1 -0
- package/dist/src/tui/cellwidth.js +151 -0
- package/dist/src/tui/cellwidth.js.map +1 -0
- package/dist/src/tui/changelog-store.js +404 -0
- package/dist/src/tui/changelog-store.js.map +1 -0
- package/dist/src/tui/chord.js +26 -0
- package/dist/src/tui/chord.js.map +1 -0
- package/dist/src/tui/clipboard.js +81 -0
- package/dist/src/tui/clipboard.js.map +1 -0
- package/dist/src/tui/cmdbar.js +253 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1275 -0
- package/dist/src/tui/companion.js.map +1 -0
- package/dist/src/tui/companionplan.js +200 -0
- package/dist/src/tui/companionplan.js.map +1 -0
- package/dist/src/tui/companiontab.js +61 -0
- package/dist/src/tui/companiontab.js.map +1 -0
- package/dist/src/tui/confighome.js +105 -0
- package/dist/src/tui/confighome.js.map +1 -0
- package/dist/src/tui/connect.js +44 -0
- package/dist/src/tui/connect.js.map +1 -0
- package/dist/src/tui/deploy-ceremony.js +75 -0
- package/dist/src/tui/deploy-ceremony.js.map +1 -0
- package/dist/src/tui/deploy-drain.js +93 -0
- package/dist/src/tui/deploy-drain.js.map +1 -0
- package/dist/src/tui/deploy-process.js +234 -0
- package/dist/src/tui/deploy-process.js.map +1 -0
- package/dist/src/tui/deploytab.js +1263 -0
- package/dist/src/tui/deploytab.js.map +1 -0
- package/dist/src/tui/design.js +111 -0
- package/dist/src/tui/design.js.map +1 -0
- package/dist/src/tui/digesttab.js +148 -0
- package/dist/src/tui/digesttab.js.map +1 -0
- package/dist/src/tui/emptystate.js +32 -0
- package/dist/src/tui/emptystate.js.map +1 -0
- package/dist/src/tui/evidence.js +790 -0
- package/dist/src/tui/evidence.js.map +1 -0
- package/dist/src/tui/feed.js +415 -0
- package/dist/src/tui/feed.js.map +1 -0
- package/dist/src/tui/feedbacktab.js +907 -0
- package/dist/src/tui/feedbacktab.js.map +1 -0
- package/dist/src/tui/filters.js +72 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +272 -0
- package/dist/src/tui/ghread.js.map +1 -0
- package/dist/src/tui/historypull.js +61 -0
- package/dist/src/tui/historypull.js.map +1 -0
- package/dist/src/tui/inboxpull.js +197 -0
- package/dist/src/tui/inboxpull.js.map +1 -0
- package/dist/src/tui/index.js +1425 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/issuesink.js +206 -0
- package/dist/src/tui/issuesink.js.map +1 -0
- package/dist/src/tui/jsonfile.js +32 -0
- package/dist/src/tui/jsonfile.js.map +1 -0
- package/dist/src/tui/keys.js +97 -0
- package/dist/src/tui/keys.js.map +1 -0
- package/dist/src/tui/layout.js +70 -0
- package/dist/src/tui/layout.js.map +1 -0
- package/dist/src/tui/learning.js +469 -0
- package/dist/src/tui/learning.js.map +1 -0
- package/dist/src/tui/lessonswitch.js +103 -0
- package/dist/src/tui/lessonswitch.js.map +1 -0
- package/dist/src/tui/livecontrol.js +167 -0
- package/dist/src/tui/livecontrol.js.map +1 -0
- package/dist/src/tui/memforward.js +310 -0
- package/dist/src/tui/memforward.js.map +1 -0
- package/dist/src/tui/memincident.js +287 -0
- package/dist/src/tui/memincident.js.map +1 -0
- package/dist/src/tui/memory.js +485 -0
- package/dist/src/tui/memory.js.map +1 -0
- package/dist/src/tui/memtab.js +513 -0
- package/dist/src/tui/memtab.js.map +1 -0
- package/dist/src/tui/metricstab.js +979 -0
- package/dist/src/tui/metricstab.js.map +1 -0
- package/dist/src/tui/model.js +104 -0
- package/dist/src/tui/model.js.map +1 -0
- package/dist/src/tui/mouse.js +83 -0
- package/dist/src/tui/mouse.js.map +1 -0
- package/dist/src/tui/msg.js +196 -0
- package/dist/src/tui/msg.js.map +1 -0
- package/dist/src/tui/nativecompanion.js +321 -0
- package/dist/src/tui/nativecompanion.js.map +1 -0
- package/dist/src/tui/openurl.js +17 -0
- package/dist/src/tui/openurl.js.map +1 -0
- package/dist/src/tui/paint.js +501 -0
- package/dist/src/tui/paint.js.map +1 -0
- package/dist/src/tui/panes.js +74 -0
- package/dist/src/tui/panes.js.map +1 -0
- package/dist/src/tui/pipane.js +166 -0
- package/dist/src/tui/pipane.js.map +1 -0
- package/dist/src/tui/poll-hooks.js +11 -0
- package/dist/src/tui/poll-hooks.js.map +1 -0
- package/dist/src/tui/poll.js +113 -0
- package/dist/src/tui/poll.js.map +1 -0
- package/dist/src/tui/proposals.js +715 -0
- package/dist/src/tui/proposals.js.map +1 -0
- package/dist/src/tui/prpause.js +132 -0
- package/dist/src/tui/prpause.js.map +1 -0
- package/dist/src/tui/reload.js +351 -0
- package/dist/src/tui/reload.js.map +1 -0
- package/dist/src/tui/remote.js +312 -0
- package/dist/src/tui/remote.js.map +1 -0
- package/dist/src/tui/rollover.js +767 -0
- package/dist/src/tui/rollover.js.map +1 -0
- package/dist/src/tui/scantab.js +1053 -0
- package/dist/src/tui/scantab.js.map +1 -0
- package/dist/src/tui/setupentry.js +81 -0
- package/dist/src/tui/setupentry.js.map +1 -0
- package/dist/src/tui/sidebar.js +602 -0
- package/dist/src/tui/sidebar.js.map +1 -0
- package/dist/src/tui/sshtriage.js +393 -0
- package/dist/src/tui/sshtriage.js.map +1 -0
- package/dist/src/tui/startup.js +172 -0
- package/dist/src/tui/startup.js.map +1 -0
- package/dist/src/tui/tabs.js +41 -0
- package/dist/src/tui/tabs.js.map +1 -0
- package/dist/src/tui/termmirror.js +217 -0
- package/dist/src/tui/termmirror.js.map +1 -0
- package/dist/src/tui/theme.js +95 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/ticketstab.js +224 -0
- package/dist/src/tui/ticketstab.js.map +1 -0
- package/dist/src/tui/tmuxsocket.js +101 -0
- package/dist/src/tui/tmuxsocket.js.map +1 -0
- package/dist/src/tui/trackertickets.js +77 -0
- package/dist/src/tui/trackertickets.js.map +1 -0
- package/dist/src/tui/unwedge.js +245 -0
- package/dist/src/tui/unwedge.js.map +1 -0
- package/dist/src/tui/viewer.js +479 -0
- package/dist/src/tui/viewer.js.map +1 -0
- package/dist/src/tui/viewerinput.js +125 -0
- package/dist/src/tui/viewerinput.js.map +1 -0
- package/dist/src/updatenotice.js +143 -0
- package/dist/src/updatenotice.js.map +1 -0
- package/dist/src/usage.js +1007 -0
- package/dist/src/usage.js.map +1 -0
- package/dist/src/verdicts.js +3848 -0
- package/dist/src/verdicts.js.map +1 -0
- package/dist/src/version.js +58 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/wakes.js +411 -0
- package/dist/src/wakes.js.map +1 -0
- package/dist/src/webhook.js +725 -0
- package/dist/src/webhook.js.map +1 -0
- package/dist/src/webhookheal.js +238 -0
- package/dist/src/webhookheal.js.map +1 -0
- package/dist/src/wire.js +1801 -0
- package/dist/src/wire.js.map +1 -0
- package/dist/src/worker-session-host.js +531 -0
- package/dist/src/worker-session-host.js.map +1 -0
- package/dist/src/workerbreaker.js +112 -0
- package/dist/src/workerbreaker.js.map +1 -0
- package/dist/src/workercontrol.js +49 -0
- package/dist/src/workercontrol.js.map +1 -0
- package/dist/src/workerlease.js +351 -0
- package/dist/src/workerlease.js.map +1 -0
- package/dist/src/workerliveness.js +84 -0
- package/dist/src/workerliveness.js.map +1 -0
- package/dist/src/workerlog.js +65 -0
- package/dist/src/workerlog.js.map +1 -0
- package/dist/src/workerruntime.js +10 -0
- package/dist/src/workerruntime.js.map +1 -0
- package/dist/src/workersupervisor.js +1206 -0
- package/dist/src/workersupervisor.js.map +1 -0
- package/dist/src/workerusage.js +23 -0
- package/dist/src/workerusage.js.map +1 -0
- package/dist/src/workerworld.js +332 -0
- package/dist/src/workerworld.js.map +1 -0
- package/dist/src/worktrees.js +984 -0
- package/dist/src/worktrees.js.map +1 -0
- package/docker/Dockerfile +284 -0
- package/docker/Dockerfile.dockerignore +35 -0
- package/docker/README.md +221 -0
- package/docker/companion/Dockerfile +139 -0
- package/docker/companion/agents/evidence.md +34 -0
- package/docker/companion/agents/explore.md +26 -0
- package/docker/companion/agents/pass-survey.md +49 -0
- package/docker/companion/agents/study.md +26 -0
- package/docker/companion/entrypoint.sh +343 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +782 -0
- package/docker/memory/Dockerfile +191 -0
- package/docker/memory/Dockerfile.dockerignore +20 -0
- package/docker/memory/README.md +60 -0
- package/docker/memory/entrypoint.sh +163 -0
- package/docker/setid/qcr-setid.c +109 -0
- package/docker/tunnel/Dockerfile.cloudflared +51 -0
- package/docker/tunnel/Dockerfile.ngrok +40 -0
- package/docker/tunnel/sidecar.mjs +411 -0
- package/docker/vm/tmux.conf +26 -0
- package/docker-compose.yml +348 -0
- package/extensions/cli/bash-guard-ambient.ts +71 -0
- package/extensions/cli/bash-guard.ts +12 -0
- package/extensions/cli/companion-guard.ts +8 -0
- package/extensions/cli/debug-round.ts +9 -0
- package/extensions/cli/inject-bridge.ts +8 -0
- package/extensions/cli/ledger-pin.ts +13 -0
- package/extensions/cli/lens.ts +22 -0
- package/extensions/cli/muted-theme.ts +9 -0
- package/extensions/cli/onboarding.ts +8 -0
- package/extensions/cli/setup.ts +8 -0
- package/extensions/cli/tui-view.ts +8 -0
- package/extensions/companion-guard.ts +411 -0
- package/extensions/debug-round.ts +281 -0
- package/extensions/inject-bridge.ts +630 -0
- package/extensions/inline-bash.ts +102 -0
- package/extensions/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +233 -0
- package/extensions/setup-replay.ts +336 -0
- package/extensions/setup-scan.ts +1236 -0
- package/extensions/setup-triage.ts +190 -0
- package/extensions/setup.ts +1428 -0
- package/extensions/tui-view.ts +489 -0
- package/extensions/vendor/openviking-pi/LICENSE +201 -0
- package/extensions/vendor/openviking-pi/NOTICE +68 -0
- package/extensions/vendor/openviking-pi/README.md +550 -0
- package/extensions/vendor/openviking-pi/client.ts +588 -0
- package/extensions/vendor/openviking-pi/config.json +28 -0
- package/extensions/vendor/openviking-pi/config.ts +271 -0
- package/extensions/vendor/openviking-pi/index.ts +523 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.d.mts +10 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +88 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.d.mts +80 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.mjs +406 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.d.mts +1 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +42 -0
- package/extensions/vendor/openviking-pi/patches/0000-vendoring-and-build-conformance.patch +726 -0
- package/extensions/vendor/openviking-pi/patches/0001-remove-session-before-compact-handler.patch +101 -0
- package/extensions/vendor/openviking-pi/patches/0002-no-ambient-work-in-subagent-leaves.patch +202 -0
- package/extensions/vendor/openviking-pi/patches/0003-never-auto-create-openviking-sessions.patch +120 -0
- package/extensions/vendor/openviking-pi/patches/0004-viking-write-durable-batch-write.patch +521 -0
- package/extensions/vendor/openviking-pi/patches/0005-second-memory-namespace.patch +786 -0
- package/extensions/vendor/openviking-pi/patches/0006-writes-that-stick-and-honest-errors.patch +996 -0
- package/extensions/vendor/openviking-pi/patches/0007-bounded-recall-no-commit.patch +794 -0
- package/extensions/vendor/openviking-pi/patches/0008-pr-derived-recall.patch +379 -0
- package/extensions/vendor/openviking-pi/patches/0009-pr-session-tools-in-round-areas.patch +375 -0
- package/extensions/vendor/openviking-pi/patches/0010-typed-lessons.patch +448 -0
- package/extensions/vendor/openviking-pi/patches/0011-review-session-memory-boundary.patch +382 -0
- package/extensions/vendor/openviking-pi/patches/0012-typecheck-against-the-real-pi.patch +129 -0
- package/extensions/vendor/openviking-pi/patches/0013-createopenviking-factory.patch +1168 -0
- package/extensions/vendor/openviking-pi/qcr-hint.ts +313 -0
- package/extensions/vendor/openviking-pi/qcr-honest.ts +183 -0
- package/extensions/vendor/openviking-pi/qcr-hooks.ts +87 -0
- package/extensions/vendor/openviking-pi/qcr-leaf.ts +78 -0
- package/extensions/vendor/openviking-pi/qcr-lesson.ts +231 -0
- package/extensions/vendor/openviking-pi/qcr-namespaces.ts +198 -0
- package/extensions/vendor/openviking-pi/qcr-recall.ts +288 -0
- package/extensions/vendor/openviking-pi/qcr-shim.ts +142 -0
- package/extensions/vendor/openviking-pi/qcr-write.ts +427 -0
- package/extensions/vendor/openviking-pi/recall.ts +149 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.d.mts +9 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.mjs +515 -0
- package/extensions/vendor/openviking-pi/shared/credentials.d.mts +14 -0
- package/extensions/vendor/openviking-pi/shared/credentials.mjs +228 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.d.mts +19 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.mjs +458 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.d.mts +17 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.mjs +294 -0
- package/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +195 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.d.mts +13 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.mjs +609 -0
- package/extensions/vendor/openviking-pi/shared/retryable.mjs +9 -0
- package/extensions/vendor/openviking-pi/shared/session-model.d.mts +3 -0
- package/extensions/vendor/openviking-pi/shared/session-model.mjs +57 -0
- package/extensions/vendor/openviking-pi/shared/uri-guard.mjs +56 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.d.mts +5 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/extensions/vendor/openviking-pi/sync.ts +163 -0
- package/extensions/vendor/openviking-pi/takeover.ts +36 -0
- package/extensions/vendor/openviking-pi/tools.ts +479 -0
- package/extensions/vendor/openviking-pi/upstream.json +48 -0
- package/package.json +138 -4
- package/profiles/default/README.md +21 -0
- package/profiles/default/addenda/.gitkeep +0 -0
- package/profiles/default/profile.toml +17 -0
- package/profiles/example-django/README.md +21 -0
- package/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/profiles/example-django/heuristics.toml +24 -0
- package/profiles/example-django/profile.toml +9 -0
- package/profiles/fast/README.md +24 -0
- package/profiles/fast/profile.toml +59 -0
- package/profiles/minimal/README.md +17 -0
- package/profiles/minimal/addenda/.gitkeep +0 -0
- package/profiles/minimal/profile.toml +8 -0
- package/profiles/snappy/README.md +24 -0
- package/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/profiles/snappy/profile.toml +46 -0
- package/prompts/companion-day-open.md +46 -0
- package/prompts/companion-first-run.md +104 -0
- package/prompts/companion.md +821 -0
- package/prompts/conversation-system.md +117 -0
- package/prompts/eod-sweep.md +120 -0
- package/prompts/onboarding.md +74 -0
- package/prompts/pass-common.md +52 -0
- package/prompts/pass-quality-common.md +22 -0
- package/prompts/round-first.md +874 -0
- package/prompts/round-follow-up.md +991 -0
- package/prompts/round-re-review.md +889 -0
- package/prompts/round-recheck.md +196 -0
- package/prompts/round-staleness.md +856 -0
- package/schemas/review-result.v1.json +391 -0
- package/schemas/scan-result.v1.json +421 -0
- package/schemas/version.v1.json +57 -0
- package/scripts/approve-pr.sh +16 -0
- package/scripts/build-stamp.mjs +67 -0
- package/scripts/commit-verdict.sh +155 -0
- package/scripts/companion-e2e.sh +250 -0
- package/scripts/companion-memory-forward.mjs +1966 -0
- package/scripts/config-fingerprint.sh +28 -0
- package/scripts/deploy-manifest.mjs +141 -0
- package/scripts/deploy.sh +1435 -0
- package/scripts/directory-lock.mjs +193 -0
- package/scripts/heartbeat-fresh.mjs +54 -0
- package/scripts/install-locator.sh +328 -0
- package/scripts/install-wrapper.sh +76 -0
- package/scripts/memory-search-check.mjs +98 -0
- package/scripts/mint-token.sh +212 -0
- package/scripts/openviking-embedder.py +392 -0
- package/scripts/openviking-ov-conf.mjs +161 -0
- package/scripts/openviking-provision.mjs +1122 -0
- package/scripts/openviking-reembed.mjs +1154 -0
- package/scripts/post-review.sh +16 -0
- package/scripts/pr-checks.sh +256 -0
- package/scripts/pr-context.py +174 -0
- package/scripts/pr-context.sh +63 -0
- package/scripts/pr-self.sh +144 -0
- package/scripts/pr-threads.sh +145 -0
- package/scripts/qcr +15 -0
- package/scripts/qcr-host.sh +769 -0
- package/scripts/render-review.sh +24 -0
- package/scripts/reply-thread.sh +16 -0
- package/scripts/required-passes.py +112 -0
- package/scripts/smoke-companion.sh +211 -0
- package/scripts/tui-deploy-runner.mjs +61 -0
- package/scripts/verify-dist.mjs +201 -0
- package/scripts/vm-ghcr-login.sh +188 -0
- package/seeds/agents/pass-baseline.md +61 -0
- package/seeds/agents/pass-contracts.md +30 -0
- package/seeds/agents/pass-data-safety.md +54 -0
- package/seeds/agents/pass-delivery.md +37 -0
- package/seeds/agents/pass-prod-risk.md +24 -0
- package/seeds/agents/pass-security.md +31 -0
- package/seeds/agents/pass-statelessness.md +27 -0
- package/seeds/agents/pass-ui.md +23 -0
- package/seeds/agents/pass-validate.md +50 -0
- package/seeds/prompts/conversation-system.md +117 -0
- package/seeds/prompts/eod-sweep.md +120 -0
- package/seeds/prompts/pass-common.md +52 -0
- package/skills/companion/adjudicate/SKILL.md +247 -0
- package/skills/companion/evidence/SKILL.md +150 -0
- package/skills/companion/land/SKILL.md +200 -0
- package/skills/companion/replay/SKILL.md +138 -0
- package/skills/companion/setup/SKILL.md +167 -0
- package/skills/companion/survey/SKILL.md +160 -0
- package/skills/selfimprove/README.md +34 -0
- package/skills/selfimprove/SKILL.md +127 -0
- package/skills/selfimprove/agents/openai.yaml +2 -0
- package/skills/selfimprove/commands/selfimprove.md +6 -0
- package/skills/selfimprove/references/fix-loop.md +49 -0
- package/skills/selfimprove/references/ledger.md +20 -0
- package/skills/selfimprove/references/setup.md +40 -0
- package/src/anomalies.ts +566 -0
- package/src/answerworker.ts +251 -0
- package/src/appstamp.ts +65 -0
- package/src/archive/admission.ts +3 -0
- package/src/archive/archivedb.ts +548 -0
- package/src/archive/archiver.ts +1963 -0
- package/src/archive/archivewrite.ts +279 -0
- package/src/archive/bundle.ts +333 -0
- package/src/archive/dbmove.ts +911 -0
- package/src/archive/duplicatecounts.ts +98 -0
- package/src/archive/eligibility.ts +181 -0
- package/src/archive/extract.ts +342 -0
- package/src/archive/fsutil.ts +415 -0
- package/src/archive/gzfile.ts +370 -0
- package/src/archive/kinds.ts +21 -0
- package/src/archive/livecheckpoint.ts +217 -0
- package/src/archive/liveretention.ts +180 -0
- package/src/archive/manifest.ts +519 -0
- package/src/archive/overseer.ts +336 -0
- package/src/archive/piglobal.ts +174 -0
- package/src/archive/plan.ts +612 -0
- package/src/archive/prarchive.ts +984 -0
- package/src/archive/prfiles.ts +406 -0
- package/src/archive/report.ts +252 -0
- package/src/archive/restore.ts +330 -0
- package/src/archive/rows.ts +187 -0
- package/src/archive/seal.ts +630 -0
- package/src/archive/status.ts +719 -0
- package/src/archive/storepass.ts +581 -0
- package/src/backfill.ts +362 -0
- package/src/bench/cost.ts +113 -0
- package/src/bench/exec.ts +90 -0
- package/src/bench/values.ts +13 -0
- package/src/botcontrol.ts +176 -0
- package/src/botworker.ts +953 -0
- package/src/capture.ts +321 -0
- package/src/cases.ts +1789 -0
- package/src/channelfs.ts +26 -0
- package/src/checklist.ts +506 -0
- package/src/ciretry.ts +141 -0
- package/src/cli.ts +2271 -0
- package/src/cliops.ts +384 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1678 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2050 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1302 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +262 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2250 -0
- package/src/engine/answerguard.ts +27 -0
- package/src/engine/botsdk.ts +336 -0
- package/src/engine/caserunner-sdk.ts +423 -0
- package/src/engine/debugpi.ts +235 -0
- package/src/eod.ts +669 -0
- package/src/eodpinwatch.ts +556 -0
- package/src/escalation.ts +1253 -0
- package/src/eventloop.ts +1045 -0
- package/src/execboundary.ts +633 -0
- package/src/feedback.ts +1162 -0
- package/src/findingscheck.ts +298 -0
- package/src/fsdenied.ts +24 -0
- package/src/ghread.ts +242 -0
- package/src/github.ts +1497 -0
- package/src/homes.ts +175 -0
- package/src/hostroute.ts +53 -0
- package/src/improvements.ts +787 -0
- package/src/install.ts +1103 -0
- package/src/installkind.ts +50 -0
- package/src/ipc/capability.ts +333 -0
- package/src/ipc/client.ts +269 -0
- package/src/ipc/control.ts +90 -0
- package/src/ipc/ghreadshim.ts +94 -0
- package/src/ipc/launcher.ts +65 -0
- package/src/ipc/permits.ts +362 -0
- package/src/ipc/postshim.ts +164 -0
- package/src/ipc/protocol.ts +342 -0
- package/src/ipc/server.ts +371 -0
- package/src/ipc/workerspec.ts +218 -0
- package/src/learner/learner.ts +1655 -0
- package/src/learner/miner.ts +1290 -0
- package/src/learner/packet.ts +340 -0
- package/src/learner/receipt.ts +168 -0
- package/src/learner/status.ts +107 -0
- package/src/ledgercheck.ts +157 -0
- package/src/lessonledger.ts +703 -0
- package/src/lessonselect.ts +888 -0
- package/src/lessonshadow.ts +810 -0
- package/src/levers.ts +393 -0
- package/src/live/projection.ts +491 -0
- package/src/live/publish.ts +92 -0
- package/src/live/read.ts +86 -0
- package/src/livecli.ts +336 -0
- package/src/loginhint.ts +56 -0
- package/src/loginrefresh/atomic.ts +76 -0
- package/src/loginrefresh/lock.ts +104 -0
- package/src/loginrefresh/main.ts +59 -0
- package/src/loginrefresh/pirefresh.ts +57 -0
- package/src/loginrefresh/refresher.ts +326 -0
- package/src/loginrefresh/supervisor.ts +273 -0
- package/src/loginrefresh/types.ts +35 -0
- package/src/memory/context.ts +385 -0
- package/src/memory/datafence.ts +9 -0
- package/src/memory/delivery.ts +171 -0
- package/src/memory/eventtags.ts +80 -0
- package/src/memory/health.ts +953 -0
- package/src/memory/import.ts +664 -0
- package/src/memory/layout.ts +261 -0
- package/src/memory/legacy-file.ts +104 -0
- package/src/memory/lessons.ts +447 -0
- package/src/memory/ovsession.ts +601 -0
- package/src/memory/relayout.ts +335 -0
- package/src/memory/roundactivity.ts +209 -0
- package/src/memory/selection.ts +989 -0
- package/src/memory/shadowstatus.ts +125 -0
- package/src/memory/store.ts +275 -0
- package/src/memory/textidentity.ts +8 -0
- package/src/metrics.ts +1056 -0
- package/src/missingconfig.ts +7 -0
- package/src/npmverbs.ts +264 -0
- package/src/onboard/choices.ts +222 -0
- package/src/onboard/engine.ts +518 -0
- package/src/onboard/launch.ts +115 -0
- package/src/onboard/steps/appslug.ts +265 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +459 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1352 -0
- package/src/onboard/steps/deploysh.ts +105 -0
- package/src/onboard/steps/embeddings.ts +550 -0
- package/src/onboard/steps/escalation.ts +640 -0
- package/src/onboard/steps/githubapp.ts +1414 -0
- package/src/onboard/steps/golive.ts +577 -0
- package/src/onboard/steps/index.ts +71 -0
- package/src/onboard/steps/ingress.ts +907 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1095 -0
- package/src/onboard/steps/memory.ts +1290 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +624 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +337 -0
- package/src/onboard/steps/transport.ts +665 -0
- package/src/onboard/steps/verifyup.ts +448 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -0
- package/src/opencli.ts +591 -0
- package/src/openpr.ts +568 -0
- package/src/openviking/client.ts +1131 -0
- package/src/openviking/context.ts +263 -0
- package/src/openviking/embedder.ts +516 -0
- package/src/openviking/gapsink.ts +63 -0
- package/src/openviking/health.ts +83 -0
- package/src/openviking/index.ts +119 -0
- package/src/openviking/lessonfind.ts +92 -0
- package/src/openviking/probe.ts +129 -0
- package/src/openviking/proc.ts +110 -0
- package/src/openviking/provisionreport.ts +160 -0
- package/src/openviking/reembed.ts +412 -0
- package/src/openviking/relayout.ts +177 -0
- package/src/openviking/sidecar-main.ts +38 -0
- package/src/openviking/sidecar.ts +106 -0
- package/src/openviking/store.ts +2025 -0
- package/src/openviking/supervisor.ts +474 -0
- package/src/openviking/types.ts +174 -0
- package/src/operator-recovery.ts +237 -0
- package/src/operatormessage.ts +52 -0
- package/src/outcomes.ts +1670 -0
- package/src/piauthcopy.ts +12 -0
- package/src/picli.ts +49 -0
- package/src/picwd.ts +25 -0
- package/src/pilogin.ts +37 -0
- package/src/pingpong.ts +1339 -0
- package/src/posting-journal.ts +549 -0
- package/src/posting-outbox.ts +802 -0
- package/src/posting-receipt.ts +324 -0
- package/src/posting.ts +603 -0
- package/src/postops.ts +832 -0
- package/src/pr-activity.ts +20 -0
- package/src/pr-author.ts +6 -0
- package/src/pr-conversation.ts +432 -0
- package/src/pr-session-lifecycle.ts +631 -0
- package/src/preflight.ts +391 -0
- package/src/priorresolve.ts +343 -0
- package/src/qcrbin.ts +186 -0
- package/src/recheck.ts +1775 -0
- package/src/reconcile.ts +1030 -0
- package/src/recordedfindings.ts +27 -0
- package/src/regression.ts +833 -0
- package/src/replay.ts +816 -0
- package/src/requiredpasses.ts +148 -0
- package/src/resumecheck.ts +246 -0
- package/src/reviewcli.ts +787 -0
- package/src/reviewcontext.ts +35 -0
- package/src/reviewdetach.ts +734 -0
- package/src/reviewhistory.ts +427 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -0
- package/src/reviewrendercli.ts +139 -0
- package/src/round-work.ts +42 -0
- package/src/runhost.ts +108 -0
- package/src/scanauth.ts +36 -0
- package/src/scanbox.ts +1081 -0
- package/src/scancli.ts +1296 -0
- package/src/scandriverlog.ts +32 -0
- package/src/session-bridge.ts +139 -0
- package/src/session-command-payload.ts +35 -0
- package/src/session-command-supervisor.ts +1142 -0
- package/src/sessionjsonl.ts +88 -0
- package/src/sessions.ts +659 -0
- package/src/setup/adapters.ts +335 -0
- package/src/setup/baselines.ts +110 -0
- package/src/setup/caserunner.ts +611 -0
- package/src/setup/configcommit.ts +443 -0
- package/src/setup/engine.ts +1001 -0
- package/src/setup/facts.ts +627 -0
- package/src/setup/findings.ts +1264 -0
- package/src/setup/history.ts +443 -0
- package/src/setup/interview.ts +243 -0
- package/src/setup/ledger.ts +324 -0
- package/src/setup/pins.ts +66 -0
- package/src/setup/portrait.ts +635 -0
- package/src/setup/presentation.ts +18 -0
- package/src/setup/profile.ts +508 -0
- package/src/setup/replay.ts +370 -0
- package/src/setup/replaybuild.ts +392 -0
- package/src/setup/replayrun.ts +1096 -0
- package/src/setup/replaysource.ts +198 -0
- package/src/setup/retune.ts +415 -0
- package/src/setup/retunelog.ts +95 -0
- package/src/setup/scan.ts +1033 -0
- package/src/setup/scanbuild.ts +168 -0
- package/src/setup/scanfacts.ts +107 -0
- package/src/setup/scanlease.ts +297 -0
- package/src/setup/scanreport.ts +373 -0
- package/src/setup/scanrun.ts +2268 -0
- package/src/setup/scantree.ts +259 -0
- package/src/setup/stage2.ts +926 -0
- package/src/setup/stage2request.ts +347 -0
- package/src/setup/survey.ts +458 -0
- package/src/setup/surveyrun.ts +758 -0
- package/src/setup/textsniff.ts +95 -0
- package/src/setup/trackersink.ts +433 -0
- package/src/setup/triage.ts +768 -0
- package/src/setup/tuning.ts +766 -0
- package/src/setup/unitcut.ts +523 -0
- package/src/singleflight.ts +86 -0
- package/src/slack/announce.ts +911 -0
- package/src/slack/api.ts +303 -0
- package/src/slack/messages.ts +288 -0
- package/src/slack/origin.ts +599 -0
- package/src/slack/policy.ts +354 -0
- package/src/slack/reply.ts +201 -0
- package/src/slack/router.ts +285 -0
- package/src/slack/socket.ts +384 -0
- package/src/slack/types.ts +108 -0
- package/src/sqlitehint.ts +32 -0
- package/src/ssh-observation.ts +30 -0
- package/src/state.ts +8243 -0
- package/src/statemachine.ts +369 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +293 -0
- package/src/terminal-failure.ts +41 -0
- package/src/thread-resolution-refusal.ts +2 -0
- package/src/tmux.ts +153 -0
- package/src/trackerid.ts +41 -0
- package/src/transcriptindex.ts +665 -0
- package/src/tui/actions.ts +484 -0
- package/src/tui/alerts.ts +666 -0
- package/src/tui/app.ts +1979 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1432 -0
- package/src/tui/candidates.ts +889 -0
- package/src/tui/cellwidth.ts +148 -0
- package/src/tui/changelog-store.ts +503 -0
- package/src/tui/chord.ts +25 -0
- package/src/tui/clipboard.ts +92 -0
- package/src/tui/cmdbar.ts +296 -0
- package/src/tui/companion.ts +1427 -0
- package/src/tui/companionplan.ts +247 -0
- package/src/tui/companiontab.ts +83 -0
- package/src/tui/confighome.ts +155 -0
- package/src/tui/connect.ts +68 -0
- package/src/tui/deploy-ceremony.ts +104 -0
- package/src/tui/deploy-drain.ts +129 -0
- package/src/tui/deploy-process.ts +265 -0
- package/src/tui/deploytab.ts +1523 -0
- package/src/tui/design.ts +125 -0
- package/src/tui/digesttab.ts +214 -0
- package/src/tui/emptystate.ts +39 -0
- package/src/tui/evidence.ts +999 -0
- package/src/tui/feed.ts +604 -0
- package/src/tui/feedbacktab.ts +1077 -0
- package/src/tui/filters.ts +90 -0
- package/src/tui/ghread.ts +321 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1565 -0
- package/src/tui/issuesink.ts +238 -0
- package/src/tui/jsonfile.ts +42 -0
- package/src/tui/keys.ts +109 -0
- package/src/tui/layout.ts +108 -0
- package/src/tui/learning.ts +627 -0
- package/src/tui/lessonswitch.ts +118 -0
- package/src/tui/livecontrol.ts +228 -0
- package/src/tui/memforward.ts +443 -0
- package/src/tui/memincident.ts +363 -0
- package/src/tui/memory.ts +620 -0
- package/src/tui/memtab.ts +606 -0
- package/src/tui/metricstab.ts +1177 -0
- package/src/tui/model.ts +131 -0
- package/src/tui/mouse.ts +98 -0
- package/src/tui/msg.ts +268 -0
- package/src/tui/nativecompanion.ts +417 -0
- package/src/tui/openurl.ts +21 -0
- package/src/tui/paint.ts +511 -0
- package/src/tui/panes.ts +98 -0
- package/src/tui/pipane.ts +219 -0
- package/src/tui/poll-hooks.ts +12 -0
- package/src/tui/poll.ts +147 -0
- package/src/tui/proposals.ts +838 -0
- package/src/tui/prpause.ts +150 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +413 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +510 -0
- package/src/tui/startup.ts +231 -0
- package/src/tui/tabs.ts +45 -0
- package/src/tui/termmirror.ts +224 -0
- package/src/tui/theme.ts +95 -0
- package/src/tui/ticketstab.ts +310 -0
- package/src/tui/tmuxsocket.ts +129 -0
- package/src/tui/trackertickets.ts +84 -0
- package/src/tui/unwedge.ts +286 -0
- package/src/tui/viewer.ts +575 -0
- package/src/tui/viewerinput.ts +173 -0
- package/src/updatenotice.ts +178 -0
- package/src/usage.ts +1154 -0
- package/src/verdicts.ts +4689 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +942 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2153 -0
- package/src/worker-session-host.ts +602 -0
- package/src/workerbreaker.ts +156 -0
- package/src/workercontrol.ts +104 -0
- package/src/workerlease.ts +441 -0
- package/src/workerliveness.ts +103 -0
- package/src/workerlog.ts +79 -0
- package/src/workerruntime.ts +30 -0
- package/src/workersupervisor.ts +1538 -0
- package/src/workerusage.ts +42 -0
- package/src/workerworld.ts +427 -0
- package/src/worktrees.ts +1138 -0
- package/tests/fixtures/regression-cases.json +795 -0
- package/tests/fixtures/seed-manifest.json +19 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
// Review history, the companion's half (setup & scan spec "Review
|
|
2
|
+
// history"). The VM prints a digest of what past reviews said
|
|
3
|
+
// (`src/reviewhistory.ts`), the PC writes it into the state home
|
|
4
|
+
// (`src/tui/historypull.ts`), and here the companion reads it and hands back
|
|
5
|
+
// THEMES — the recurring things this team asks for in review, in the
|
|
6
|
+
// companion's own words.
|
|
7
|
+
//
|
|
8
|
+
// The boundary this module exists for: the raw comments are colleagues' names
|
|
9
|
+
// and words, and they never leave the state home. The companion may read them
|
|
10
|
+
// (that is how it condenses), but what goes onward — to reviewer memory as
|
|
11
|
+
// `#history` entries, and to the repo portrait through `readHistoryThemes` —
|
|
12
|
+
// is only the validated theme list. A theme that quotes a raw comment (eight
|
|
13
|
+
// words running) or names a comment's author is REFUSED, with the reason, so
|
|
14
|
+
// the companion rewrites it; nothing is silently trimmed into something the
|
|
15
|
+
// companion did not say. The quote check is a belt, not a proof: a paraphrase
|
|
16
|
+
// close enough to be a quote in all but word order gets through, and the
|
|
17
|
+
// companion's prompt carries the rule too.
|
|
18
|
+
//
|
|
19
|
+
// Persistence: `<state home>/setup/history-themes.json` — the saved themes and
|
|
20
|
+
// the ones they replaced. Memory: a save RETIRES the earlier unpinned
|
|
21
|
+
// `#history` entries and writes the new ones, so a re-run supersedes rather
|
|
22
|
+
// than piles up (the survey's rule); a pinned, `#manual` or `source=manual` one is the
|
|
23
|
+
// operator's and is left alone.
|
|
24
|
+
import { dehash, parseEventTags, parseHashTags } from "../memory/eventtags.js";
|
|
25
|
+
import { normalizeTag, refOf, type MemoryStore } from "../memory/store.js";
|
|
26
|
+
import { parseDigest, type ReviewHistoryDigest } from "../reviewhistory.js";
|
|
27
|
+
import type { StateFs } from "./engine.js";
|
|
28
|
+
|
|
29
|
+
/** The digest's place in the state home — `historypull.ts` writes it here. */
|
|
30
|
+
export const HISTORY_DIGEST_FILE = "setup/review-history.json";
|
|
31
|
+
export const HISTORY_THEMES_FILE = "setup/history-themes.json";
|
|
32
|
+
export const HISTORY_THEMES_VERSION = 1;
|
|
33
|
+
export const HISTORY_TAG = "history";
|
|
34
|
+
|
|
35
|
+
/** One save carries at most this many themes — the scan's pattern cap. */
|
|
36
|
+
export const MAX_THEMES = 20;
|
|
37
|
+
export const THEME_TITLE_MAX = 80;
|
|
38
|
+
export const THEME_SUMMARY_MAX = 400;
|
|
39
|
+
/** A theme sharing this many consecutive words with a raw comment quotes it. */
|
|
40
|
+
export const QUOTE_WORDS = 8;
|
|
41
|
+
/** A page of raw items the companion reads at a time. */
|
|
42
|
+
export const HISTORY_PAGE_MAX = 200;
|
|
43
|
+
|
|
44
|
+
export const THEME_SOURCES = ["human", "bot", "feedback", "mixed"] as const;
|
|
45
|
+
export type ThemeSource = (typeof THEME_SOURCES)[number];
|
|
46
|
+
|
|
47
|
+
export interface HistoryTheme {
|
|
48
|
+
title: string;
|
|
49
|
+
summary: string;
|
|
50
|
+
/** Which half of the history shows it: human reviewers, the daemon's own
|
|
51
|
+
* rounds, `[feedback]`, or more than one. */
|
|
52
|
+
source: ThemeSource;
|
|
53
|
+
/** How many items the companion counted behind it. */
|
|
54
|
+
weight: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface HistoryThemesFile {
|
|
58
|
+
version: number;
|
|
59
|
+
saved_at: string;
|
|
60
|
+
repo: string;
|
|
61
|
+
/** Which digest the themes were condensed from. */
|
|
62
|
+
digest_generated_at: string;
|
|
63
|
+
themes: HistoryTheme[];
|
|
64
|
+
previous: { saved_at: string; themes: HistoryTheme[] } | null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type DigestRead =
|
|
68
|
+
| { state: "absent" }
|
|
69
|
+
| { state: "unreadable"; error: string }
|
|
70
|
+
| { state: "ok"; digest: ReviewHistoryDigest };
|
|
71
|
+
|
|
72
|
+
/** The digest in the state home, if there is one this version reads. */
|
|
73
|
+
export function readDigest(fs: StateFs): DigestRead {
|
|
74
|
+
let text: string | null;
|
|
75
|
+
try {
|
|
76
|
+
text = fs.read(HISTORY_DIGEST_FILE);
|
|
77
|
+
} catch (err) {
|
|
78
|
+
return { state: "unreadable", error: `${HISTORY_DIGEST_FILE} cannot be read: ${String(err)}` };
|
|
79
|
+
}
|
|
80
|
+
if (text === null) return { state: "absent" };
|
|
81
|
+
const p = parseDigest(text);
|
|
82
|
+
return p.ok
|
|
83
|
+
? { state: "ok", digest: p.digest }
|
|
84
|
+
: { state: "unreadable", error: `${HISTORY_DIGEST_FILE}: ${p.error}` };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ---- the companion's view ----
|
|
88
|
+
|
|
89
|
+
export const HISTORY_SECTIONS = ["human", "rounds", "feedback"] as const;
|
|
90
|
+
export type HistorySection = (typeof HISTORY_SECTIONS)[number];
|
|
91
|
+
|
|
92
|
+
export interface HistorySummary {
|
|
93
|
+
repo: string;
|
|
94
|
+
generated_at: string;
|
|
95
|
+
since: string;
|
|
96
|
+
months: number;
|
|
97
|
+
human_comments: number;
|
|
98
|
+
prs_scanned: number;
|
|
99
|
+
prs_enumerated: number;
|
|
100
|
+
truncated: boolean;
|
|
101
|
+
rounds: number;
|
|
102
|
+
feedback: number;
|
|
103
|
+
problems: string[];
|
|
104
|
+
/** Nothing in any half — a repo with no merged-PR reviews, rounds or feedback. */
|
|
105
|
+
empty: boolean;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function summarize(d: ReviewHistoryDigest): HistorySummary {
|
|
109
|
+
return {
|
|
110
|
+
repo: d.repo,
|
|
111
|
+
generated_at: d.generated_at,
|
|
112
|
+
since: d.window.since,
|
|
113
|
+
months: d.window.months,
|
|
114
|
+
human_comments: d.human.comments.length,
|
|
115
|
+
prs_scanned: d.human.prs_scanned,
|
|
116
|
+
prs_enumerated: d.human.prs_enumerated,
|
|
117
|
+
truncated: d.human.truncated,
|
|
118
|
+
rounds: d.rounds.length,
|
|
119
|
+
feedback: d.feedback.length,
|
|
120
|
+
problems: d.problems,
|
|
121
|
+
empty: d.human.comments.length === 0 && d.rounds.length === 0 && d.feedback.length === 0,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** One page of one half, rendered as lines the companion reads in context.
|
|
126
|
+
* Raw text, by design: this is the condensing step, inside the state home's
|
|
127
|
+
* boundary. */
|
|
128
|
+
export function historyPage(
|
|
129
|
+
d: ReviewHistoryDigest,
|
|
130
|
+
section: HistorySection,
|
|
131
|
+
offset: number,
|
|
132
|
+
limit: number,
|
|
133
|
+
): { total: number; offset: number; lines: string[] } {
|
|
134
|
+
const lim = Math.max(1, Math.min(HISTORY_PAGE_MAX, Math.floor(limit)));
|
|
135
|
+
const off = Math.max(0, Math.floor(offset));
|
|
136
|
+
const one = (s: string | null): string => (s ?? "").replace(/\s+/g, " ").trim();
|
|
137
|
+
let all: string[];
|
|
138
|
+
if (section === "human") {
|
|
139
|
+
all = d.human.comments.map(
|
|
140
|
+
(c) =>
|
|
141
|
+
`#${c.pr} ${c.kind}${c.path ? ` ${c.path}` : ""} [${c.state}] @${c.author}: ${one(c.body)}`,
|
|
142
|
+
);
|
|
143
|
+
} else if (section === "rounds") {
|
|
144
|
+
all = d.rounds.map(
|
|
145
|
+
(r) =>
|
|
146
|
+
`#${r.pr} round ${r.round_no}${r.backfilled ? " (imported)" : ""} ${r.verdict ?? "—"} ${r.finished_at ?? ""}: ${one(r.summary) || "(no summary)"}`,
|
|
147
|
+
);
|
|
148
|
+
} else {
|
|
149
|
+
all = d.feedback.map(
|
|
150
|
+
(f) =>
|
|
151
|
+
`#${f.pr} ${f.kind} ${f.created_at}${f.author ? ` @${f.author}` : ""}: ${one(f.body) || "(no text)"}`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
return { total: all.length, offset: off, lines: all.slice(off, off + lim) };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ---- themes: validation and the leak belt ----
|
|
158
|
+
|
|
159
|
+
export type ThemeRefusal = { ok: false; errors: string[] };
|
|
160
|
+
|
|
161
|
+
const words = (t: string): string[] =>
|
|
162
|
+
t
|
|
163
|
+
.normalize("NFKC")
|
|
164
|
+
.toLowerCase()
|
|
165
|
+
.split(/[^\p{L}\p{N}_]+/u)
|
|
166
|
+
.filter((w) => w !== "");
|
|
167
|
+
|
|
168
|
+
/** The raw human text of a digest — what must not travel. Round summaries are
|
|
169
|
+
* the daemon's own prose, not a colleague's, and are not in here. */
|
|
170
|
+
function rawTexts(d: ReviewHistoryDigest): string[] {
|
|
171
|
+
return [...d.human.comments.map((c) => c.body), ...d.feedback.map((f) => f.body ?? "")];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function authorsOf(d: ReviewHistoryDigest): Set<string> {
|
|
175
|
+
const out = new Set<string>();
|
|
176
|
+
for (const c of d.human.comments) out.add(c.author.toLowerCase());
|
|
177
|
+
for (const f of d.feedback) if (f.author) out.add(f.author.toLowerCase());
|
|
178
|
+
out.delete("");
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Every window of QUOTE_WORDS consecutive words, joined by a space. */
|
|
183
|
+
function* shinglesOf(w: readonly string[]): Generator<string> {
|
|
184
|
+
for (let i = 0; i + QUOTE_WORDS <= w.length; i++) yield w.slice(i, i + QUOTE_WORDS).join(" ");
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* What a theme's text gives away, or [] when it gives nothing: a run of
|
|
189
|
+
* QUOTE_WORDS words out of any raw comment, or a comment author's login —
|
|
190
|
+
* `@login` always, and the bare login when it cannot pass for an ordinary word
|
|
191
|
+
* (four characters or more, or carrying a digit or a hyphen).
|
|
192
|
+
*/
|
|
193
|
+
export function leakChecker(d: ReviewHistoryDigest): (text: string) => string[] {
|
|
194
|
+
const shingles = new Set<string>();
|
|
195
|
+
for (const raw of rawTexts(d)) for (const s of shinglesOf(words(raw))) shingles.add(s);
|
|
196
|
+
const authors = authorsOf(d);
|
|
197
|
+
return (text) => {
|
|
198
|
+
const out: string[] = [];
|
|
199
|
+
const tw = words(text);
|
|
200
|
+
for (const s of shinglesOf(tw)) {
|
|
201
|
+
if (shingles.has(s)) {
|
|
202
|
+
out.push(`quotes a raw review comment ("${s}…") — say it in your own words`);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const lower = text.toLowerCase();
|
|
207
|
+
const tokens = new Set(lower.split(/[^a-z0-9_-]+/).filter(Boolean));
|
|
208
|
+
for (const login of authors) {
|
|
209
|
+
const distinctive = login.length >= 4 || /[\d-]/.test(login);
|
|
210
|
+
if (lower.includes(`@${login}`) || (distinctive && tokens.has(login))) {
|
|
211
|
+
out.push(`names a comment author (${login}) — themes are about the code, not who said it`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return out;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** One-shot form of `leakChecker`. */
|
|
219
|
+
export function leaksIn(text: string, d: ReviewHistoryDigest): string[] {
|
|
220
|
+
return leakChecker(d)(text);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** Strict: the companion's list, or every reason it is not one. */
|
|
224
|
+
export function normalizeThemes(raw: unknown): { ok: true; themes: HistoryTheme[] } | ThemeRefusal {
|
|
225
|
+
if (!Array.isArray(raw))
|
|
226
|
+
return {
|
|
227
|
+
ok: false,
|
|
228
|
+
errors: ["`themes` must be an array (empty is allowed: an empty history has none)"],
|
|
229
|
+
};
|
|
230
|
+
const errors: string[] = [];
|
|
231
|
+
if (raw.length > MAX_THEMES)
|
|
232
|
+
errors.push(
|
|
233
|
+
`at most ${MAX_THEMES} themes per save (got ${raw.length}) — merge the smaller ones`,
|
|
234
|
+
);
|
|
235
|
+
const themes: HistoryTheme[] = [];
|
|
236
|
+
for (const [i, t] of raw.entries()) {
|
|
237
|
+
const o = (t ?? {}) as Record<string, unknown>;
|
|
238
|
+
const title = typeof o.title === "string" ? o.title.trim() : "";
|
|
239
|
+
const summary = typeof o.summary === "string" ? o.summary.trim() : "";
|
|
240
|
+
const source = o.source;
|
|
241
|
+
const weight =
|
|
242
|
+
typeof o.weight === "string" && /^\d+$/.test(o.weight) ? Number(o.weight) : o.weight;
|
|
243
|
+
const at = `themes[${i}]`;
|
|
244
|
+
if (title === "" || title.length > THEME_TITLE_MAX)
|
|
245
|
+
errors.push(`${at}.title must be 1..${THEME_TITLE_MAX} characters`);
|
|
246
|
+
if (summary === "" || summary.length > THEME_SUMMARY_MAX)
|
|
247
|
+
errors.push(`${at}.summary must be 1..${THEME_SUMMARY_MAX} characters`);
|
|
248
|
+
if (/[\r\n]/.test(title) || /[\r\n]/.test(summary))
|
|
249
|
+
errors.push(`${at}: one line each — no newlines`);
|
|
250
|
+
if (title.startsWith("#") || summary.startsWith("#"))
|
|
251
|
+
errors.push(`${at}: must not start with '#' (tags are the tool's to write)`);
|
|
252
|
+
if (typeof source !== "string" || !(THEME_SOURCES as readonly string[]).includes(source)) {
|
|
253
|
+
errors.push(`${at}.source must be one of ${THEME_SOURCES.join(" | ")}`);
|
|
254
|
+
}
|
|
255
|
+
if (typeof weight !== "number" || !Number.isInteger(weight) || weight < 1)
|
|
256
|
+
errors.push(`${at}.weight must be a positive integer (items behind it)`);
|
|
257
|
+
themes.push({ title, summary, source: source as ThemeSource, weight: weight as number });
|
|
258
|
+
}
|
|
259
|
+
return errors.length > 0 ? { ok: false, errors } : { ok: true, themes };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** The one memory entry text a theme becomes. The header is ours (`#history`
|
|
263
|
+
* then `k=v`), and the fixed word `Theme:` ends it, so nothing the companion
|
|
264
|
+
* wrote can extend the header into a tag (`src/memory/eventtags.ts`); its own
|
|
265
|
+
* `#word`s are de-hashed, so a theme about "our #manual notes" never reads as
|
|
266
|
+
* a manual entry to a whole-text tag reader. */
|
|
267
|
+
export function themeEntryText(t: HistoryTheme): string {
|
|
268
|
+
return `#${HISTORY_TAG} source=${t.source} weight=${t.weight} Theme: ${dehash(`${t.title} — ${t.summary}`)}`;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// ---- save & read ----
|
|
272
|
+
|
|
273
|
+
export interface MemoryOutcome {
|
|
274
|
+
written: number;
|
|
275
|
+
retired: number;
|
|
276
|
+
/** Why memory was not (fully) written — the themes are saved regardless. */
|
|
277
|
+
problems: string[];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export interface SaveThemesDeps {
|
|
281
|
+
state: StateFs;
|
|
282
|
+
memory: MemoryStore | null;
|
|
283
|
+
clock: () => Date;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export type SaveThemesResult =
|
|
287
|
+
{ ok: true; themes: HistoryTheme[]; memory: MemoryOutcome } | ThemeRefusal;
|
|
288
|
+
|
|
289
|
+
function readThemesFile(fs: StateFs): { file: HistoryThemesFile | null; error: string | null } {
|
|
290
|
+
let text: string | null;
|
|
291
|
+
try {
|
|
292
|
+
text = fs.read(HISTORY_THEMES_FILE);
|
|
293
|
+
} catch (err) {
|
|
294
|
+
return { file: null, error: `${HISTORY_THEMES_FILE} cannot be read: ${String(err)}` };
|
|
295
|
+
}
|
|
296
|
+
if (text === null) return { file: null, error: null };
|
|
297
|
+
try {
|
|
298
|
+
const f = JSON.parse(text) as HistoryThemesFile;
|
|
299
|
+
if (f.version !== HISTORY_THEMES_VERSION || !Array.isArray(f.themes))
|
|
300
|
+
throw new Error("not a themes file this version reads");
|
|
301
|
+
const n = normalizeThemes(f.themes);
|
|
302
|
+
if (!n.ok) throw new Error(n.errors.join("; "));
|
|
303
|
+
return { file: { ...f, themes: n.themes }, error: null };
|
|
304
|
+
} catch (err) {
|
|
305
|
+
return {
|
|
306
|
+
file: null,
|
|
307
|
+
error: `${HISTORY_THEMES_FILE}: ${String(err)} — nothing will overwrite it; move it aside to start over`,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Save the companion's themes: validated, checked against the digest they came
|
|
314
|
+
* from for anything raw, then written to the state home and — when this
|
|
315
|
+
* assembly has memory — to reviewer memory as `#history` entries, replacing
|
|
316
|
+
* the earlier unpinned ones. Refused outright when there is no digest to have
|
|
317
|
+
* condensed from, or a themes file this version cannot read is in the way.
|
|
318
|
+
*/
|
|
319
|
+
export async function saveHistoryThemes(
|
|
320
|
+
deps: SaveThemesDeps,
|
|
321
|
+
raw: unknown,
|
|
322
|
+
): Promise<SaveThemesResult> {
|
|
323
|
+
const read = readDigest(deps.state);
|
|
324
|
+
if (read.state === "absent") {
|
|
325
|
+
return {
|
|
326
|
+
ok: false,
|
|
327
|
+
errors: [
|
|
328
|
+
"no review history digest in the state home yet — the owner runs `qcr history pull` to fetch one",
|
|
329
|
+
],
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
if (read.state === "unreadable") return { ok: false, errors: [read.error] };
|
|
333
|
+
const n = normalizeThemes(raw);
|
|
334
|
+
if (!n.ok) return n;
|
|
335
|
+
const leaksOf = leakChecker(read.digest);
|
|
336
|
+
const leaks = n.themes.flatMap((t, i) =>
|
|
337
|
+
leaksOf(`${t.title} ${t.summary}`).map((l) => `themes[${i}] ${l}`),
|
|
338
|
+
);
|
|
339
|
+
if (leaks.length > 0) return { ok: false, errors: leaks };
|
|
340
|
+
const prior = readThemesFile(deps.state);
|
|
341
|
+
if (prior.error !== null) return { ok: false, errors: [prior.error] };
|
|
342
|
+
|
|
343
|
+
const file: HistoryThemesFile = {
|
|
344
|
+
version: HISTORY_THEMES_VERSION,
|
|
345
|
+
saved_at: deps.clock().toISOString(),
|
|
346
|
+
repo: read.digest.repo,
|
|
347
|
+
digest_generated_at: read.digest.generated_at,
|
|
348
|
+
themes: n.themes,
|
|
349
|
+
previous: prior.file ? { saved_at: prior.file.saved_at, themes: prior.file.themes } : null,
|
|
350
|
+
};
|
|
351
|
+
deps.state.write(HISTORY_THEMES_FILE, `${JSON.stringify(file, null, 2)}\n`);
|
|
352
|
+
|
|
353
|
+
const memory: MemoryOutcome = { written: 0, retired: 0, problems: [] };
|
|
354
|
+
if (deps.memory === null) {
|
|
355
|
+
memory.problems.push(
|
|
356
|
+
"no reviewer memory in this assembly — themes saved to the state home only",
|
|
357
|
+
);
|
|
358
|
+
return { ok: true, themes: n.themes, memory };
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
// The store's `tags` scan the whole text (search wants a quoted `#tag`),
|
|
362
|
+
// but only the HEADER says what an entry is: a feedback comment reading
|
|
363
|
+
// "keep #history out of billing" is not an earlier theme to retire, and
|
|
364
|
+
// a theme that mentions "#manual" is not the owner's own entry.
|
|
365
|
+
const sweeper = deps.memory as MemoryStore & {
|
|
366
|
+
sweep?: () => Promise<{
|
|
367
|
+
entries: Awaited<ReturnType<MemoryStore["read"]>>;
|
|
368
|
+
unread: string[];
|
|
369
|
+
}>;
|
|
370
|
+
};
|
|
371
|
+
const snapshot = typeof sweeper.sweep === "function" ? await sweeper.sweep() : null;
|
|
372
|
+
const incomplete = snapshot !== null && snapshot.unread.length > 0;
|
|
373
|
+
if (incomplete)
|
|
374
|
+
memory.problems.push(
|
|
375
|
+
"earlier history themes UNKNOWN — memory enumeration is incomplete; supersession cannot be confirmed",
|
|
376
|
+
);
|
|
377
|
+
const old = (snapshot?.entries ?? (await deps.memory.search("", { tag: HISTORY_TAG }))).filter(
|
|
378
|
+
(e) => {
|
|
379
|
+
const header = parseHashTags(e.text).map(normalizeTag);
|
|
380
|
+
return (
|
|
381
|
+
header.includes(HISTORY_TAG) &&
|
|
382
|
+
!e.pinned &&
|
|
383
|
+
!header.includes("manual") &&
|
|
384
|
+
parseEventTags(e.text).source !== "manual"
|
|
385
|
+
);
|
|
386
|
+
},
|
|
387
|
+
);
|
|
388
|
+
// The new themes land BEFORE the old ones go: a write memory refuses (or
|
|
389
|
+
// a stop between the two) leaves the earlier themes live, never neither.
|
|
390
|
+
const retained = new Set<(typeof old)[number]>();
|
|
391
|
+
for (const t of n.themes) {
|
|
392
|
+
const text = themeEntryText(t);
|
|
393
|
+
const existing = old.find((e) => e.text === text);
|
|
394
|
+
if (existing) {
|
|
395
|
+
retained.add(existing);
|
|
396
|
+
memory.written++;
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const r = await deps.memory.apply({ op: "note", text });
|
|
400
|
+
if (r.ok) memory.written++;
|
|
401
|
+
else memory.problems.push(`could not write "${t.title}": ${r.message}`);
|
|
402
|
+
}
|
|
403
|
+
if (incomplete || memory.written < n.themes.length) {
|
|
404
|
+
memory.problems.push(
|
|
405
|
+
`the earlier #${HISTORY_TAG} entries are kept — ${incomplete ? "earlier themes could not all be read" : "not every new theme was written"}; the next save replaces them`,
|
|
406
|
+
);
|
|
407
|
+
} else {
|
|
408
|
+
for (const e of old) {
|
|
409
|
+
if (retained.has(e)) continue;
|
|
410
|
+
const r = await deps.memory.apply({ op: "retire", ...refOf(e) });
|
|
411
|
+
if (r.ok) memory.retired++;
|
|
412
|
+
else
|
|
413
|
+
memory.problems.push(`could not retire an earlier #${HISTORY_TAG} entry: ${r.message}`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
} catch (err) {
|
|
417
|
+
memory.problems.push(`memory unreachable: ${String(err)}`);
|
|
418
|
+
}
|
|
419
|
+
return { ok: true, themes: n.themes, memory };
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* The saved themes — the ONLY thing about review history the repo portrait
|
|
424
|
+
* carries, never the digest (the portrait reads the digest only to
|
|
425
|
+
* check its narrative quotes none of it). Null when none are saved or the file
|
|
426
|
+
* cannot be read.
|
|
427
|
+
*/
|
|
428
|
+
export function readHistoryThemes(fs: StateFs): HistoryThemesFile | null {
|
|
429
|
+
return readThemesFile(fs).file;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/** `readHistoryThemes` with the two nulls told apart — the portrait records
|
|
433
|
+
* an unreadable themes file as UNKNOWN, never as "no themes yet". */
|
|
434
|
+
export function historyThemesState(
|
|
435
|
+
fs: StateFs,
|
|
436
|
+
):
|
|
437
|
+
| { state: "absent" }
|
|
438
|
+
| { state: "unreadable"; error: string }
|
|
439
|
+
| { state: "ok"; file: HistoryThemesFile } {
|
|
440
|
+
const r = readThemesFile(fs);
|
|
441
|
+
if (r.error !== null) return { state: "unreadable", error: r.error };
|
|
442
|
+
return r.file === null ? { state: "absent" } : { state: "ok", file: r.file };
|
|
443
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// The setup interview's deterministic half (setup & scan spec "Interview
|
|
2
|
+
// mapping"). The companion runs the interview — adaptive, driven by
|
|
3
|
+
// the repo portrait — and this file is what its answers MEAN: a fixed list of
|
|
4
|
+
// concerns, a priority per concern, and one table in code that turns a
|
|
5
|
+
// priority into lens settings. The same answers always produce the same
|
|
6
|
+
// profile, and every setting can say which concern put it there.
|
|
7
|
+
//
|
|
8
|
+
// Four points every interview covers, whatever else it asks (FIXED_POINTS):
|
|
9
|
+
// the project's goals (words, which become lens emphasis), what must block a
|
|
10
|
+
// merge, the risk areas (security, data, money, compliance), and style &
|
|
11
|
+
// tests. Every concern below belongs to one of the last three; the goals are
|
|
12
|
+
// recorded as text. A profile write is refused until every concern has a
|
|
13
|
+
// priority — that is how "covers the four points" is a property of the tool
|
|
14
|
+
// rather than a hope about the conversation.
|
|
15
|
+
//
|
|
16
|
+
// The table owns four keys of `[lenses.<pass>]` (packages/pi-plugin/src/lenstuning.ts) — `enabled`,
|
|
17
|
+
// `min_tier`, `effort`, `max_severity` — on every lens a concern names, and
|
|
18
|
+
// nothing else: `emphasis` is the companion's words, `guide` is a drafted
|
|
19
|
+
// style guide, and a lens no concern names is never touched. `normal` is the
|
|
20
|
+
// shipped behaviour, so it CLEARS those four keys rather than writing them.
|
|
21
|
+
// A lens two concerns share takes the HIGHER priority of the two: switching
|
|
22
|
+
// one concern off never switches off a lens another concern still wants.
|
|
23
|
+
//
|
|
24
|
+
// Pure — no port, no clock, no disk.
|
|
25
|
+
import type { LensTuning } from "@quickchatai/pi-quickreview/src/lenstuning.js";
|
|
26
|
+
|
|
27
|
+
/** The four points every setup interview covers. */
|
|
28
|
+
export const FIXED_POINTS = [
|
|
29
|
+
{
|
|
30
|
+
name: "goals",
|
|
31
|
+
question: "What is this project for, and what does a good change to it look like?",
|
|
32
|
+
},
|
|
33
|
+
{ name: "merge-blocking", question: "What must stop a pull request from merging?" },
|
|
34
|
+
{ name: "risk", question: "Which risk areas matter here — security, data, money, compliance?" },
|
|
35
|
+
{ name: "style-tests", question: "How much do code style and tests matter in review?" },
|
|
36
|
+
] as const;
|
|
37
|
+
|
|
38
|
+
export type FixedPoint = (typeof FIXED_POINTS)[number]["name"];
|
|
39
|
+
|
|
40
|
+
/** How much one concern matters to this repo, highest first. */
|
|
41
|
+
export const PRIORITIES = ["critical", "important", "normal", "ignore"] as const;
|
|
42
|
+
export type Priority = (typeof PRIORITIES)[number];
|
|
43
|
+
|
|
44
|
+
/** The keys of `[lenses.<pass>]` the table owns. */
|
|
45
|
+
export const TABLE_KEYS = ["enabled", "min_tier", "effort", "max_severity"] as const;
|
|
46
|
+
export type TableSettings = Pick<LensTuning, (typeof TABLE_KEYS)[number]>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* THE table: a priority → the lens settings it means.
|
|
50
|
+
*
|
|
51
|
+
* critical — on, at the strongest tier, at the model's ceiling, and able
|
|
52
|
+
* to block (`P0` lifts every cap the lens would otherwise carry);
|
|
53
|
+
* important — on (a lens a `[review]` lever gates runs anyway), never below
|
|
54
|
+
* the mid tier, at medium effort; its own severity cap stands;
|
|
55
|
+
* normal — nothing: the shipped behaviour (and a re-tune back to normal
|
|
56
|
+
* clears whatever an earlier answer wrote);
|
|
57
|
+
* ignore — off: not planned, not addable, not paid for.
|
|
58
|
+
*/
|
|
59
|
+
export const PRIORITY_SETTINGS: Readonly<Record<Priority, Readonly<TableSettings>>> = {
|
|
60
|
+
critical: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
min_tier: "sol-high",
|
|
63
|
+
effort: "high",
|
|
64
|
+
max_severity: "P0",
|
|
65
|
+
},
|
|
66
|
+
important: { enabled: true, min_tier: "sol-med", effort: "medium" },
|
|
67
|
+
normal: {},
|
|
68
|
+
ignore: { enabled: false },
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export interface Concern {
|
|
72
|
+
name: string;
|
|
73
|
+
point: Exclude<FixedPoint, "goals">;
|
|
74
|
+
title: string;
|
|
75
|
+
/** The lenses whose settings this concern's priority decides. */
|
|
76
|
+
lenses: readonly string[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The concerns, and the lenses each one decides. Neither the validator
|
|
81
|
+
* (`pass-validate` — a profile may switch it off by hand, the interview never
|
|
82
|
+
* does), `pass-intent` (its question/nit cap is fixed by design) nor
|
|
83
|
+
* `pass-ask-human` is here.
|
|
84
|
+
*/
|
|
85
|
+
export const CONCERNS: readonly Concern[] = [
|
|
86
|
+
{
|
|
87
|
+
name: "correctness",
|
|
88
|
+
point: "merge-blocking",
|
|
89
|
+
title: "Correctness — logic bugs, broken invariants, local slips",
|
|
90
|
+
lenses: ["pass-baseline", "pass-widened", "pass-sweep"],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "reliability",
|
|
94
|
+
point: "merge-blocking",
|
|
95
|
+
title: "Production reliability — behaviour changes, many pods, queued work",
|
|
96
|
+
lenses: ["pass-prod-risk", "pass-statelessness", "pass-deferred"],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "compatibility",
|
|
100
|
+
point: "merge-blocking",
|
|
101
|
+
title: "Deploy-window compatibility — old and new code running together",
|
|
102
|
+
lenses: ["pass-backcompat", "pass-rollout"],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "integrations",
|
|
106
|
+
point: "merge-blocking",
|
|
107
|
+
title: "External contracts — provider payloads and their semantics",
|
|
108
|
+
lenses: ["pass-contracts"],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "frontend",
|
|
112
|
+
point: "merge-blocking",
|
|
113
|
+
title: "Frontend state — effects, mutations, async UI",
|
|
114
|
+
lenses: ["pass-ui"],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "design",
|
|
118
|
+
point: "merge-blocking",
|
|
119
|
+
title: "Design — placement, simplicity, abstraction, duplication, consistency",
|
|
120
|
+
lenses: [
|
|
121
|
+
"pass-placement",
|
|
122
|
+
"pass-simplicity",
|
|
123
|
+
"pass-abstraction",
|
|
124
|
+
"pass-maintainability",
|
|
125
|
+
"pass-duplication",
|
|
126
|
+
"pass-consistency",
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "security",
|
|
131
|
+
point: "risk",
|
|
132
|
+
title: "Security — authz, injection, tenant isolation, trust bounds",
|
|
133
|
+
lenses: ["pass-security", "pass-bounds"],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: "data",
|
|
137
|
+
point: "risk",
|
|
138
|
+
title: "Data safety — migrations, backfills, persisted bytes",
|
|
139
|
+
lenses: ["pass-data-safety", "pass-roundtrip"],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: "money",
|
|
143
|
+
point: "risk",
|
|
144
|
+
title: "Money — payments and billing: double charges, lost events, races",
|
|
145
|
+
lenses: ["pass-contracts", "pass-delivery", "pass-concurrency"],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "compliance",
|
|
149
|
+
point: "risk",
|
|
150
|
+
title: "Compliance — personal data, audit trails, retention",
|
|
151
|
+
lenses: ["pass-security", "pass-data-safety"],
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: "style",
|
|
155
|
+
point: "style-tests",
|
|
156
|
+
title: "Code style — against a written guide",
|
|
157
|
+
lenses: ["pass-style"],
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "tests",
|
|
161
|
+
point: "style-tests",
|
|
162
|
+
title: "Tests — what the change breaks, what its tests really test",
|
|
163
|
+
lenses: ["pass-tests"],
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
export const CONCERN_NAMES: readonly string[] = CONCERNS.map((c) => c.name);
|
|
168
|
+
|
|
169
|
+
export type Priorities = Readonly<Record<string, Priority>>;
|
|
170
|
+
|
|
171
|
+
/** Higher wins: `PRIORITIES` is highest first. */
|
|
172
|
+
const rankOf = (p: Priority): number => PRIORITIES.length - PRIORITIES.indexOf(p);
|
|
173
|
+
|
|
174
|
+
/** Read a `{concern: priority}` object the companion sent. Unknown concerns
|
|
175
|
+
* and unknown priorities are refused by name; a missing concern is not an
|
|
176
|
+
* error here (the write decides whether the set is complete). */
|
|
177
|
+
export function parsePriorities(
|
|
178
|
+
raw: unknown,
|
|
179
|
+
): { ok: true; priorities: Record<string, Priority> } | { ok: false; errors: string[] } {
|
|
180
|
+
if (raw === undefined || raw === null) return { ok: true, priorities: {} };
|
|
181
|
+
if (typeof raw !== "object" || Array.isArray(raw)) {
|
|
182
|
+
return { ok: false, errors: ["`priorities` must be an object of {concern: priority}"] };
|
|
183
|
+
}
|
|
184
|
+
const errors: string[] = [];
|
|
185
|
+
const out: Record<string, Priority> = {};
|
|
186
|
+
for (const [concern, value] of Object.entries(raw as Record<string, unknown>)) {
|
|
187
|
+
if (!CONCERN_NAMES.includes(concern)) {
|
|
188
|
+
errors.push(`unknown concern "${concern}" — one of: ${CONCERN_NAMES.join(", ")}`);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const p = typeof value === "string" ? value.trim().toLowerCase() : value;
|
|
192
|
+
if (!(PRIORITIES as readonly unknown[]).includes(p)) {
|
|
193
|
+
errors.push(
|
|
194
|
+
`${concern}: priority must be one of ${PRIORITIES.join(", ")}, got ${JSON.stringify(value)}`,
|
|
195
|
+
);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
out[concern] = p as Priority;
|
|
199
|
+
}
|
|
200
|
+
return errors.length > 0 ? { ok: false, errors } : { ok: true, priorities: out };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** The concerns `priorities` does not answer yet, in table order. */
|
|
204
|
+
export function unansweredConcerns(priorities: Priorities): string[] {
|
|
205
|
+
return CONCERN_NAMES.filter((c) => priorities[c] === undefined);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** One lens's settings as the table decides them, and why. */
|
|
209
|
+
export interface LensDecision {
|
|
210
|
+
lens: string;
|
|
211
|
+
priority: Priority;
|
|
212
|
+
/** The concern(s) at that priority that decided it. */
|
|
213
|
+
because: string[];
|
|
214
|
+
settings: TableSettings;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* The table applied: every lens any concern names, at the highest priority
|
|
219
|
+
* among the concerns naming it, with that priority's settings. Only concerns
|
|
220
|
+
* present in `priorities` count; a lens none of them names is absent.
|
|
221
|
+
* Deterministic (lens name order).
|
|
222
|
+
*/
|
|
223
|
+
export function lensDecisions(priorities: Priorities): LensDecision[] {
|
|
224
|
+
const best = new Map<string, { priority: Priority; because: string[] }>();
|
|
225
|
+
for (const concern of CONCERNS) {
|
|
226
|
+
const p = priorities[concern.name];
|
|
227
|
+
if (p === undefined) continue;
|
|
228
|
+
for (const lens of concern.lenses) {
|
|
229
|
+
const cur = best.get(lens);
|
|
230
|
+
if (!cur || rankOf(p) > rankOf(cur.priority))
|
|
231
|
+
best.set(lens, { priority: p, because: [concern.name] });
|
|
232
|
+
else if (rankOf(p) === rankOf(cur.priority)) cur.because.push(concern.name);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return [...best.entries()]
|
|
236
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
237
|
+
.map(([lens, { priority, because }]) => ({
|
|
238
|
+
lens,
|
|
239
|
+
priority,
|
|
240
|
+
because,
|
|
241
|
+
settings: { ...PRIORITY_SETTINGS[priority] },
|
|
242
|
+
}));
|
|
243
|
+
}
|