@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,216 @@
|
|
|
1
|
+
// QCR FORK — file added by PATCH 10 (typed lessons). Not upstream.
|
|
2
|
+
// a curated lesson carries a machine header, written by the tool.
|
|
3
|
+
//
|
|
4
|
+
// The pure half, kept free of pi and of the OV client so
|
|
5
|
+
// `tests/openviking-fork.test.ts` can exercise it (`tools.ts` cannot be
|
|
6
|
+
// imported from a test).
|
|
7
|
+
//
|
|
8
|
+
// The EOD curator wrote its lessons as prose: 10 of 17 carried no machine
|
|
9
|
+
// header, the rest spelled type, lens and evidence three ways in the body, and
|
|
10
|
+
// nothing could tell which lens a lesson was for or which human evidence it
|
|
11
|
+
// rested on. `viking_write` now takes a structured `lesson` parameter and
|
|
12
|
+
// RENDERS the header itself, on the entry's first line:
|
|
13
|
+
//
|
|
14
|
+
// #lesson kind=<repo-fact|look-for|dont-raise|convention> lens=<ids>
|
|
15
|
+
// class=<slug> paths=<globs> evidence=<refs>
|
|
16
|
+
//
|
|
17
|
+
// (one line; lists comma-separated; no whitespace in a value). The daemon's
|
|
18
|
+
// reader is `src/memory/lessons.ts` (`parseLesson`); the test suite pins this
|
|
19
|
+
// renderer against it, and `LESSON_LENS_IDS` here equal to the daemon's built
|
|
20
|
+
// passes (`ALL_PASSES`) — one list, two readers, like PATCH 9's areas. An
|
|
21
|
+
// unknown lens id is REFUSED: a lesson for a lens nobody runs would be
|
|
22
|
+
// delivered to nobody. A lesson is written into `experiences/` and nowhere
|
|
23
|
+
// else, and its content may not carry a header of its own.
|
|
24
|
+
/** The lesson kinds — the daemon's `LESSON_KINDS`. */
|
|
25
|
+
export const LESSON_KINDS = ["repo-fact", "look-for", "dont-raise", "convention"];
|
|
26
|
+
/** The lens ids a lesson may name: every pass the daemon builds, the
|
|
27
|
+
* validator included. Pinned equal to `src/passes.ts` `ALL_PASSES`. */
|
|
28
|
+
export const LESSON_LENS_IDS = [
|
|
29
|
+
"pass-baseline",
|
|
30
|
+
"pass-ui",
|
|
31
|
+
"pass-contracts",
|
|
32
|
+
"pass-data-safety",
|
|
33
|
+
"pass-security",
|
|
34
|
+
"pass-statelessness",
|
|
35
|
+
"pass-prod-risk",
|
|
36
|
+
"pass-delivery",
|
|
37
|
+
"pass-intent",
|
|
38
|
+
"pass-placement",
|
|
39
|
+
"pass-simplicity",
|
|
40
|
+
"pass-backcompat",
|
|
41
|
+
"pass-concurrency",
|
|
42
|
+
"pass-ask-human",
|
|
43
|
+
"pass-widened",
|
|
44
|
+
"pass-roundtrip",
|
|
45
|
+
"pass-deferred",
|
|
46
|
+
"pass-bounds",
|
|
47
|
+
"pass-claims",
|
|
48
|
+
"pass-rollout",
|
|
49
|
+
"pass-behaviour-delta",
|
|
50
|
+
"pass-sweep",
|
|
51
|
+
"pass-tests",
|
|
52
|
+
"pass-maintainability",
|
|
53
|
+
"pass-duplication",
|
|
54
|
+
"pass-abstraction",
|
|
55
|
+
"pass-consistency",
|
|
56
|
+
"pass-style",
|
|
57
|
+
"pass-lint-conformance",
|
|
58
|
+
"pass-validate",
|
|
59
|
+
];
|
|
60
|
+
const CLASS_RE = /^[a-z0-9][a-z0-9._-]{0,79}$/;
|
|
61
|
+
const GLOB_RE = /^[^\s,]{1,200}$/;
|
|
62
|
+
const REF_RE = /^[a-z][a-z0-9-]{0,19}:[^\s,]{1,200}$/;
|
|
63
|
+
const LIMITS = { lenses: 8, paths: 12, evidence: 16 };
|
|
64
|
+
/** Where a lesson may be written: a file directly in a user's
|
|
65
|
+
* `memories/experiences/`. */
|
|
66
|
+
const LESSON_URI_RE = /^viking:\/\/user\/[^/\s]+\/memories\/experiences\/[^/\s]+$/;
|
|
67
|
+
function list(raw) {
|
|
68
|
+
if (raw === undefined || raw === null)
|
|
69
|
+
return [];
|
|
70
|
+
const items = Array.isArray(raw) ? raw : typeof raw === "string" ? raw.split(",") : null;
|
|
71
|
+
if (!items)
|
|
72
|
+
return null;
|
|
73
|
+
const out = [];
|
|
74
|
+
for (const v of items) {
|
|
75
|
+
if (typeof v !== "string")
|
|
76
|
+
return null;
|
|
77
|
+
const t = v.trim();
|
|
78
|
+
if (t !== "" && !out.includes(t))
|
|
79
|
+
out.push(t);
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The header line for a structured `lesson`, or the sentence saying what is
|
|
85
|
+
* wrong with it. Every field is required; `baseline` is read as
|
|
86
|
+
* `pass-baseline`; nothing unknown is accepted.
|
|
87
|
+
*/
|
|
88
|
+
export function buildLessonHeader(raw, known = LESSON_LENS_IDS) {
|
|
89
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
90
|
+
return { ok: false, error: "`lesson` must be an object {kind, lens, class, paths, evidence}." };
|
|
91
|
+
const o = raw;
|
|
92
|
+
const unknown = Object.keys(o).filter((k) => !["kind", "lens", "class", "paths", "evidence"].includes(k));
|
|
93
|
+
if (unknown.length > 0)
|
|
94
|
+
return { ok: false, error: `Unknown lesson field(s): ${unknown.join(", ")}.` };
|
|
95
|
+
const kind = typeof o["kind"] === "string" ? o["kind"].trim().toLowerCase() : "";
|
|
96
|
+
if (!LESSON_KINDS.includes(kind))
|
|
97
|
+
return { ok: false, error: `lesson.kind must be one of ${LESSON_KINDS.join(", ")}.` };
|
|
98
|
+
const lensRaw = list(o["lens"]);
|
|
99
|
+
if (!lensRaw || lensRaw.length === 0)
|
|
100
|
+
return { ok: false, error: "lesson.lens must name at least one lens id (e.g. pass-baseline)." };
|
|
101
|
+
if (lensRaw.length > LIMITS.lenses)
|
|
102
|
+
return { ok: false, error: `lesson.lens names ${lensRaw.length} lenses; at most ${LIMITS.lenses}.` };
|
|
103
|
+
const lens = [];
|
|
104
|
+
const bad = [];
|
|
105
|
+
for (const id of lensRaw) {
|
|
106
|
+
const t = id.toLowerCase();
|
|
107
|
+
const k = known.includes(t) ? t : known.includes(`pass-${t}`) ? `pass-${t}` : null;
|
|
108
|
+
if (k === null)
|
|
109
|
+
bad.push(id);
|
|
110
|
+
else if (!lens.includes(k))
|
|
111
|
+
lens.push(k);
|
|
112
|
+
}
|
|
113
|
+
if (bad.length > 0)
|
|
114
|
+
return {
|
|
115
|
+
ok: false,
|
|
116
|
+
error: `Unknown lens id(s): ${bad.join(", ")}. A lesson names built passes only (${known.join(", ")}).`,
|
|
117
|
+
};
|
|
118
|
+
const cls = typeof o["class"] === "string" ? o["class"].trim().toLowerCase() : "";
|
|
119
|
+
if (!CLASS_RE.test(cls))
|
|
120
|
+
return {
|
|
121
|
+
ok: false,
|
|
122
|
+
error: "lesson.class must be a slug: lowercase letters, digits, '.', '_' or '-' (e.g. baseline.pre-existing-scope).",
|
|
123
|
+
};
|
|
124
|
+
const paths = list(o["paths"]);
|
|
125
|
+
if (!paths || paths.length === 0)
|
|
126
|
+
return { ok: false, error: "lesson.paths must name at least one path glob (`**` for the whole repo)." };
|
|
127
|
+
if (paths.length > LIMITS.paths)
|
|
128
|
+
return { ok: false, error: `lesson.paths names ${paths.length} globs; at most ${LIMITS.paths}.` };
|
|
129
|
+
const badGlob = paths.find((p) => !GLOB_RE.test(p));
|
|
130
|
+
if (badGlob !== undefined)
|
|
131
|
+
return {
|
|
132
|
+
ok: false,
|
|
133
|
+
error: `Path glob "${badGlob}" may not contain whitespace or a comma (write a brace expansion as separate globs).`,
|
|
134
|
+
};
|
|
135
|
+
const evidence = list(o["evidence"]);
|
|
136
|
+
if (!evidence || evidence.length === 0)
|
|
137
|
+
return {
|
|
138
|
+
ok: false,
|
|
139
|
+
error: "lesson.evidence must cite at least one ref (pr:<n>, comment:<id>, case:<name>, commit:<sha>, cand:<id>) — no lesson without evidence.",
|
|
140
|
+
};
|
|
141
|
+
if (evidence.length > LIMITS.evidence)
|
|
142
|
+
return { ok: false, error: `lesson.evidence cites ${evidence.length} refs; at most ${LIMITS.evidence}.` };
|
|
143
|
+
const badRef = evidence.find((r) => !REF_RE.test(r));
|
|
144
|
+
if (badRef !== undefined)
|
|
145
|
+
return {
|
|
146
|
+
ok: false,
|
|
147
|
+
error: `Evidence ref "${badRef}" must be <kind>:<id> with no whitespace or comma (e.g. pr:5312, cand:c42).`,
|
|
148
|
+
};
|
|
149
|
+
return {
|
|
150
|
+
ok: true,
|
|
151
|
+
header: [
|
|
152
|
+
"#lesson",
|
|
153
|
+
`kind=${kind}`,
|
|
154
|
+
`lens=${lens.join(",")}`,
|
|
155
|
+
`class=${cls}`,
|
|
156
|
+
`paths=${paths.join(",")}`,
|
|
157
|
+
`evidence=${evidence.join(",")}`,
|
|
158
|
+
].join(" "),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* [QCR PATCH 11] The `#hash` tags an entry's HEADER carries — the leading run
|
|
163
|
+
* of `#…` tokens, exactly the daemon's reader (src/memory/eventtags.ts
|
|
164
|
+
* `parseHashTags`, pinned equal by test). A typed lesson is an entry whose
|
|
165
|
+
* header carries `#lesson`.
|
|
166
|
+
*/
|
|
167
|
+
export function headerHashTags(text) {
|
|
168
|
+
const out = [];
|
|
169
|
+
for (const token of String(text ?? "").split(/\s+/)) {
|
|
170
|
+
if (token === "")
|
|
171
|
+
continue;
|
|
172
|
+
if (!token.startsWith("#"))
|
|
173
|
+
break;
|
|
174
|
+
const tag = token.slice(1).toLowerCase();
|
|
175
|
+
if (tag !== "" && !out.includes(tag))
|
|
176
|
+
out.push(tag);
|
|
177
|
+
}
|
|
178
|
+
return out;
|
|
179
|
+
}
|
|
180
|
+
/** [QCR PATCH 11] The refusal for content that types a lesson header by hand
|
|
181
|
+
* (no `lesson` parameter), or null. The header is the tool's to write: a
|
|
182
|
+
* hand-typed `#lesson … evidence=cand:c<id>` line would adopt learner
|
|
183
|
+
* candidates with no field checked — and a review session reading untrusted
|
|
184
|
+
* PR text could be talked into writing one (integration review). */
|
|
185
|
+
export function handTypedLessonRefusal(content) {
|
|
186
|
+
if (!headerHashTags(String(content ?? "").trim()).includes("lesson"))
|
|
187
|
+
return null;
|
|
188
|
+
return "Refusing a hand-typed `#lesson` header: write a lesson with the `lesson` parameter {kind, lens, class, paths, evidence} — the tool writes the header — and start `content` with the lesson's prose.";
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The content of a lesson entry: the rendered header on the first line, the
|
|
192
|
+
* author's prose after it. Refused when the target is not in `experiences/`
|
|
193
|
+
* or the prose already opens with a header of its own — the header is the
|
|
194
|
+
* tool's to write, so a hand-typed one can neither duplicate nor contradict
|
|
195
|
+
* it.
|
|
196
|
+
*/
|
|
197
|
+
export function withLessonHeader(uri, content, lesson, known = LESSON_LENS_IDS) {
|
|
198
|
+
if (!LESSON_URI_RE.test(uri))
|
|
199
|
+
return {
|
|
200
|
+
ok: false,
|
|
201
|
+
error: `A lesson is written into experiences/ (viking://user/<user>/memories/experiences/<name>.md); got "${uri}".`,
|
|
202
|
+
};
|
|
203
|
+
const built = buildLessonHeader(lesson, known);
|
|
204
|
+
if (!built.ok)
|
|
205
|
+
return built;
|
|
206
|
+
const prose = String(content ?? "").trim();
|
|
207
|
+
if (prose === "")
|
|
208
|
+
return { ok: false, error: "A lesson needs its one-sentence rule in `content`." };
|
|
209
|
+
if (/^#lesson\b/i.test(prose) || /^#[a-z0-9-]+\s+kind=/i.test(prose))
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
error: "Leave the header out of `content` — the tool writes it from `lesson`. Start `content` with the lesson's prose.",
|
|
213
|
+
};
|
|
214
|
+
return { ok: true, content: `${built.header}\n\n${prose}` };
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=qcr-lesson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qcr-lesson.js","sourceRoot":"","sources":["../../../../extensions/vendor/openviking-pi/qcr-lesson.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// QCR FORK — file added by PATCH 5 (a second memory namespace). Not upstream.
|
|
2
|
+
//
|
|
3
|
+
// WHAT THIS SOLVES. Upstream builds ONE `OVClient` from ONE key, so a pi can
|
|
4
|
+
// only ever reach the user tree that key owns. The companion on the owner's PC
|
|
5
|
+
// holds TWO OpenViking USER keys — its own (`user/companion/`) and the
|
|
6
|
+
// reviewer's (`user/reviewer/`, the key the daemon and every review session
|
|
7
|
+
// hold) — because the ratified design is that the companion and the TUI can do
|
|
8
|
+
// EVERYTHING with memory, read and write, over every piece of it, while
|
|
9
|
+
// automated review sessions hold the reviewer key alone and stay confined
|
|
10
|
+
// server-side (docs/companion-memory-access.md).
|
|
11
|
+
//
|
|
12
|
+
// The second key was already delivered to the companion container as
|
|
13
|
+
// `OPENVIKING_REVIEWER_KEY` and proven usable; nothing consumed it. This file
|
|
14
|
+
// is the pure half of consuming it: which extra namespaces exist, and which
|
|
15
|
+
// namespace a given tool call is addressing. The clients themselves are built
|
|
16
|
+
// in `index.ts` and handed to `tools.ts` — pure logic lives here so
|
|
17
|
+
// `tests/openviking-fork.test.ts` can exercise it (`tools.ts` and `index.ts`
|
|
18
|
+
// cannot be imported from a test; they pull typebox and the pi packages).
|
|
19
|
+
//
|
|
20
|
+
// SHAPE BORROWED, NOT INVENTED. The TUI solved the same problem first
|
|
21
|
+
// (`src/tui/memory.ts`): one client per namespace, keys read by env
|
|
22
|
+
// name from the shared keys file, and every addressed operation prefixed with
|
|
23
|
+
// the namespace that owns it so a verb routes back to the right key. A
|
|
24
|
+
// namespace-prefixed address is the established convention; here the address
|
|
25
|
+
// the model already types is a `viking://user/<namespace>/…` URI, so the URI
|
|
26
|
+
// carries the prefix and an explicit `namespace` parameter settles the rest.
|
|
27
|
+
//
|
|
28
|
+
// THREE PROPERTIES THIS FILE IS RESPONSIBLE FOR:
|
|
29
|
+
//
|
|
30
|
+
// 1. A LEAF NEVER GETS A SECOND NAMESPACE. PATCH 2 stops all ambient work in
|
|
31
|
+
// a pi-subagents leaf and PATCH 4 withholds the write tool there; a second
|
|
32
|
+
// client must not become a way around either. `resolveExtraNamespaces`
|
|
33
|
+
// returns [] for a leaf, `index.ts` does not even call it in the leaf
|
|
34
|
+
// path, and `tools.ts` discards any namespaces handed to a leaf.
|
|
35
|
+
// 2. THE ROOT-KEY GUARD COVERS BOTH KEYS. Upstream's resolver ends its
|
|
36
|
+
// fallback chain at the server's `root_api_key`, which our state-volume
|
|
37
|
+
// symlink puts within reach. The second key goes through the SAME
|
|
38
|
+
// `withoutRootKey` guard as the first — a new key must not reopen the hole
|
|
39
|
+
// PATCH 0000 closed.
|
|
40
|
+
// 3. A REVIEW SESSION IS UNCHANGED. A PR session's own identity already IS
|
|
41
|
+
// `reviewer` (`OPENVIKING_USER=reviewer`, key in a 0600 ovcli.conf, and
|
|
42
|
+
// the daemon never puts `OPENVIKING_REVIEWER_KEY` in a session env), so a
|
|
43
|
+
// namespace whose user equals our own is dropped rather than duplicated:
|
|
44
|
+
// even if that variable ever appeared in a session, it would add nothing.
|
|
45
|
+
// And with a single namespace, routing is a constant and the tools keep
|
|
46
|
+
// the exact parameters and text they have today.
|
|
47
|
+
import { withoutRootKey } from "./config.js";
|
|
48
|
+
/** The extra namespace this fork knows how to build. */
|
|
49
|
+
export const REVIEWER_NAMESPACE = "reviewer";
|
|
50
|
+
/** Env name carrying the reviewer USER key. Spelled the same in
|
|
51
|
+
* `src/tui/companion.ts` (`KEY_NAMES`), `src/tui/memory.ts` (`USER_KEY_ENV`)
|
|
52
|
+
* and the keys file — do not invent a second spelling. */
|
|
53
|
+
export const REVIEWER_KEY_ENV = "OPENVIKING_REVIEWER_KEY";
|
|
54
|
+
/** Which OpenViking USER the reviewer key owns. Overridable only because the
|
|
55
|
+
* user name is a deployment fact; the default is what the daemon uses. */
|
|
56
|
+
export const REVIEWER_USER_ENV = "OPENVIKING_REVIEWER_USER";
|
|
57
|
+
function trimmed(value) {
|
|
58
|
+
return typeof value === "string" ? value.trim() : "";
|
|
59
|
+
}
|
|
60
|
+
/** What the model calls the namespace this pi authenticates as. `own` only
|
|
61
|
+
* when no `OPENVIKING_USER` was configured at all. */
|
|
62
|
+
export function ownNamespaceName(user) {
|
|
63
|
+
return trimmed(user).toLowerCase() || "own";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The namespaces this process can reach BESIDES its own identity.
|
|
67
|
+
*
|
|
68
|
+
* Today that is at most one — `reviewer`, when `OPENVIKING_REVIEWER_KEY` is in
|
|
69
|
+
* the environment. Its ABSENCE is a normal state, not an error: the process
|
|
70
|
+
* then reaches its own tree only, exactly as before this patch.
|
|
71
|
+
*/
|
|
72
|
+
export function resolveExtraNamespaces(config, env = process.env, opts = {}) {
|
|
73
|
+
// (1) A leaf gets nothing ambient and no second key. See PATCH 2.
|
|
74
|
+
if (opts.leaf === true)
|
|
75
|
+
return [];
|
|
76
|
+
const rawKey = trimmed(env[REVIEWER_KEY_ENV]);
|
|
77
|
+
if (!rawKey)
|
|
78
|
+
return [];
|
|
79
|
+
// (2) The same guard the primary key goes through. If this IS the server's
|
|
80
|
+
// root key it is dropped and the namespace simply does not exist — the fork
|
|
81
|
+
// never authenticates as ROOT, by any route, including a new one.
|
|
82
|
+
const guard = opts.guardRootKey ?? withoutRootKey;
|
|
83
|
+
const guarded = guard({ apiKey: rawKey, hasApiKey: true }, env);
|
|
84
|
+
if (!guarded.hasApiKey || !guarded.apiKey)
|
|
85
|
+
return [];
|
|
86
|
+
const user = trimmed(env[REVIEWER_USER_ENV]).toLowerCase() || REVIEWER_NAMESPACE;
|
|
87
|
+
// (3) Never a second client for the tree we already are. This is what keeps
|
|
88
|
+
// a review session (whose own user IS `reviewer`) structurally single-keyed.
|
|
89
|
+
if (ownNamespaceName(config.user) === user)
|
|
90
|
+
return [];
|
|
91
|
+
return [{ name: REVIEWER_NAMESPACE, user, apiKey: guarded.apiKey }];
|
|
92
|
+
}
|
|
93
|
+
/** The user tree a `viking://user/<space>/…` URI names, lowercased. `null`
|
|
94
|
+
* for anything else — including the reserved-word form (`viking://user/
|
|
95
|
+
* memories/…`) the client expands server-side, which names no namespace. */
|
|
96
|
+
export function namespaceOfUri(uri) {
|
|
97
|
+
const match = /^\s*viking:\/\/user\/([A-Za-z0-9._-]+)/i.exec(String(uri ?? ""));
|
|
98
|
+
return match ? match[1].toLowerCase() : null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Which namespace a tool call is touching.
|
|
102
|
+
*
|
|
103
|
+
* `names[0]` is this pi's own identity and the default. Two ways to name
|
|
104
|
+
* another one, and they must agree:
|
|
105
|
+
*
|
|
106
|
+
* * `namespace: "reviewer"` — explicit, and what the tool schema advertises;
|
|
107
|
+
* * a `viking://user/reviewer/…` URI — implicit, because the address the
|
|
108
|
+
* model already types carries the namespace prefix.
|
|
109
|
+
*
|
|
110
|
+
* Disagreement is REFUSED rather than resolved by precedence: writing to the
|
|
111
|
+
* wrong memory tree is silent, and a rule the model has to remember is exactly
|
|
112
|
+
* the kind of thing it will get wrong at 3am.
|
|
113
|
+
*
|
|
114
|
+
* With ONE namespace this is a constant function that never fails — the
|
|
115
|
+
* single-key case (every review session) keeps today's behaviour exactly.
|
|
116
|
+
*/
|
|
117
|
+
export function routeNamespace(params, names) {
|
|
118
|
+
const known = names.map((n) => n.toLowerCase());
|
|
119
|
+
const fallback = known[0] ?? "";
|
|
120
|
+
if (known.length <= 1)
|
|
121
|
+
return { ok: true, namespace: fallback };
|
|
122
|
+
const explicit = trimmed(params.namespace).toLowerCase();
|
|
123
|
+
if (explicit && !known.includes(explicit)) {
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
error: `Unknown memory namespace "${explicit}". This pi reaches: ${known.join(", ")}.` +
|
|
127
|
+
(explicit === REVIEWER_NAMESPACE ? ` Reviewer memory needs ${REVIEWER_KEY_ENV} in this process's environment.` : ""),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const implied = namespaceOfUri(params.uri) ?? namespaceOfUri(params.scope);
|
|
131
|
+
if (implied && known.includes(implied)) {
|
|
132
|
+
if (explicit && explicit !== implied) {
|
|
133
|
+
return {
|
|
134
|
+
ok: false,
|
|
135
|
+
error: `That URI is in the ${implied} memory tree but namespace says "${explicit}". ` +
|
|
136
|
+
"Pass one or the other, not two different answers.",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return { ok: true, namespace: implied };
|
|
140
|
+
}
|
|
141
|
+
return { ok: true, namespace: explicit || fallback };
|
|
142
|
+
}
|
|
143
|
+
/** The sentence appended to every namespace-aware tool description. Written
|
|
144
|
+
* once so the four tools cannot drift apart on what they tell the model. */
|
|
145
|
+
export function namespaceNote(names) {
|
|
146
|
+
if (names.length <= 1)
|
|
147
|
+
return "";
|
|
148
|
+
const own = names[0];
|
|
149
|
+
const others = names.slice(1);
|
|
150
|
+
return (` MEMORY NAMESPACES: this pi reaches ${names.join(" and ")} — ${own} is your own memory and the default, ` +
|
|
151
|
+
`${others.join(" and ")} is the review system's. Pick one with \`namespace\`, or address a ` +
|
|
152
|
+
"viking://user/<namespace>/… URI (the two must agree); every answer is prefixed with the tree it came from.");
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=qcr-namespaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qcr-namespaces.js","sourceRoot":"","sources":["../../../../extensions/vendor/openviking-pi/qcr-namespaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
// QCR FORK — file added by PATCH 7 (bounded recall, no commit). Not upstream.
|
|
2
|
+
// S3, owner ruling R3: "PR sessions keep the OpenViking extension,
|
|
3
|
+
// bounded: the per-turn recall wait is capped at 500 ms and query expansion is
|
|
4
|
+
// off."
|
|
5
|
+
//
|
|
6
|
+
// The pure half of three fixes, kept free of pi and of the OV client so
|
|
7
|
+
// `tests/openviking-fork.test.ts` can exercise it (`index.ts` cannot be
|
|
8
|
+
// imported from a test).
|
|
9
|
+
//
|
|
10
|
+
// 1. RECALL NEVER HOLDS A TURN PAST ITS BUDGET. The `context` hook awaited
|
|
11
|
+
// the recall search before every provider request, and that search could
|
|
12
|
+
// spend a 15 s expansion fuse and then a `/search/recall` fallback with its
|
|
13
|
+
// own 10 s — on a server whose local embedder blocks its one event loop
|
|
14
|
+
// (search p50 22 s, max 155 s, 2026-10-03..06). `budgetedFetch` gives every
|
|
15
|
+
// request of one recall the time left on ONE deadline and starts nothing
|
|
16
|
+
// once it has passed (it throws, which ends the fallback chain before it
|
|
17
|
+
// sends a request); `raceBudget` is the belt that returns the hook on time
|
|
18
|
+
// whatever the chain is doing.
|
|
19
|
+
// 2. A RETIRED ENTRY IS NEVER RECALLED. Retire is a `#retired` header tag and
|
|
20
|
+
// the file stays in the indexed root, so a semantic search finds it. The
|
|
21
|
+
// daemon already knows the retired set (its store sweep) and publishes the
|
|
22
|
+
// URIs to a file beside the sessions' ovcli.conf (`QCR_OV_RETIRED_FILE`);
|
|
23
|
+
// `retiredGuard` sends them as `exclude_uris`, and drops any recalled entry
|
|
24
|
+
// whose own text opens with the tag (the header-only rule of
|
|
25
|
+
// `src/memory/eventtags.ts` `parseHashTags` — a `#retired` quoted further
|
|
26
|
+
// in is prose, not a retirement).
|
|
27
|
+
// 3. NOTHING COMMITS.: commit exists to PROMOTE session notes into
|
|
28
|
+
// memories through an extraction model this deployment never configures,
|
|
29
|
+
// so every commit archived the raw notes and produced nothing (143 archives
|
|
30
|
+
// on the VM, 0 overviews). The commit calls are gone from sync/index; a
|
|
31
|
+
// commit queued on disk by an older build is refused here, never replayed.
|
|
32
|
+
import { readFileSync } from "node:fs";
|
|
33
|
+
/** The longest the `context` hook waits for recall before the turn proceeds
|
|
34
|
+
* without it (R3). A cap: a caller may ask for less, never for more. */
|
|
35
|
+
export const RECALL_WAIT_MS = 500;
|
|
36
|
+
/** The server's `MAX_EXCLUDE_URIS` (context_assembler/params.py). */
|
|
37
|
+
export const MAX_RECALL_EXCLUSIONS = 200;
|
|
38
|
+
/** Where the daemon publishes the retired URIs. Not a secret: the URIs of
|
|
39
|
+
* retired entries the session's own key can already list. */
|
|
40
|
+
export const RETIRED_FILE_ENV = "QCR_OV_RETIRED_FILE";
|
|
41
|
+
/** The seam's retirement tag (src/openviking/store.ts `RETIRED_TAG`). */
|
|
42
|
+
export const RETIRED_TAG = "retired";
|
|
43
|
+
/** Thrown by a budgeted fetch once the deadline has passed. It ends the
|
|
44
|
+
* recall chain where it stands — nothing further is sent, and nothing is
|
|
45
|
+
* cached from a request that was never made — and `raceBudget` turns it into
|
|
46
|
+
* "no recall this turn". */
|
|
47
|
+
export class RecallBudgetSpent extends Error {
|
|
48
|
+
constructor() {
|
|
49
|
+
super("recall budget spent");
|
|
50
|
+
this.name = "RecallBudgetSpent";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Every request of one recall shares ONE deadline. A request gets the time
|
|
55
|
+
* left on it as its own timeout (the client aborts it there), and once none is
|
|
56
|
+
* left nothing is started — the `/search/recall` and raw-find fallbacks
|
|
57
|
+
* included, which used to double the load exactly when the server was slow.
|
|
58
|
+
*/
|
|
59
|
+
export function budgetedFetch(inner, deadlineAt, now = Date.now) {
|
|
60
|
+
return async (path, init, options) => {
|
|
61
|
+
const remaining = Math.floor(deadlineAt - now());
|
|
62
|
+
if (remaining < 5)
|
|
63
|
+
throw new RecallBudgetSpent(); // a few ms only race the abort that just fired
|
|
64
|
+
const asked = Number(options?.timeoutMs);
|
|
65
|
+
const timeoutMs = Number.isFinite(asked) && asked > 0 ? Math.min(asked, remaining) : remaining;
|
|
66
|
+
return inner(path, init, { ...(options ?? {}), timeoutMs });
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* `work`, or `fallback` once `ms` have passed. Never rejects: a recall that
|
|
71
|
+
* throws is a recall that found nothing. The work is NOT cancelled — under a
|
|
72
|
+
* `budgetedFetch` it has nothing left to send by then — and a late answer is
|
|
73
|
+
* discarded, never injected into a later turn of the same run (that would
|
|
74
|
+
* rewrite a message the provider has already cached).
|
|
75
|
+
*/
|
|
76
|
+
export async function raceBudget(work, ms, fallback) {
|
|
77
|
+
const settled = work.then((value) => ({ value, timedOut: false }), () => ({ value: fallback, timedOut: false }));
|
|
78
|
+
if (!(ms > 0))
|
|
79
|
+
return { value: fallback, timedOut: true };
|
|
80
|
+
let timer;
|
|
81
|
+
try {
|
|
82
|
+
return await Promise.race([
|
|
83
|
+
settled,
|
|
84
|
+
new Promise((resolve) => {
|
|
85
|
+
timer = setTimeout(() => resolve({ value: fallback, timedOut: true }), ms);
|
|
86
|
+
timer.unref?.();
|
|
87
|
+
}),
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
if (timer !== undefined)
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Does this text OPEN with the `#retired` tag? Header-only, exactly like
|
|
97
|
+
* `parseHashTags` (src/memory/eventtags.ts): the leading run of `#tag` tokens
|
|
98
|
+
* is the header and the scan stops at the first word that is not one, so a
|
|
99
|
+
* `[feedback]` entry quoting "mark it #retired" is not hidden by its prose.
|
|
100
|
+
* `tests/openviking-fork.test.ts` pins the two parsers against each other.
|
|
101
|
+
*/
|
|
102
|
+
export function hasRetiredHeader(text) {
|
|
103
|
+
for (const token of String(text ?? "").split(/\s+/)) {
|
|
104
|
+
if (token === "")
|
|
105
|
+
continue;
|
|
106
|
+
if (!token.startsWith("#"))
|
|
107
|
+
return false;
|
|
108
|
+
if (token.slice(1).toLowerCase() === RETIRED_TAG)
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The retired URIs the daemon published (`{"uris": [...]}`), or `[]`.
|
|
115
|
+
* Total: no path, no file, a garbled file — all mean "no exclusions", and the
|
|
116
|
+
* header filter in `retiredGuard` still applies.
|
|
117
|
+
*/
|
|
118
|
+
export function readRetiredUris(path, read = defaultRead) {
|
|
119
|
+
if (!path || path.trim() === "")
|
|
120
|
+
return [];
|
|
121
|
+
let parsed;
|
|
122
|
+
try {
|
|
123
|
+
parsed = JSON.parse(read(path.trim()));
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const raw = parsed?.uris;
|
|
129
|
+
if (!Array.isArray(raw))
|
|
130
|
+
return [];
|
|
131
|
+
const out = [];
|
|
132
|
+
for (const uri of raw) {
|
|
133
|
+
if (typeof uri !== "string" || !uri.startsWith("viking://") || out.includes(uri))
|
|
134
|
+
continue;
|
|
135
|
+
out.push(uri);
|
|
136
|
+
if (out.length >= MAX_RECALL_EXCLUSIONS)
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
function defaultRead(p) {
|
|
142
|
+
return readFileSync(p, "utf8");
|
|
143
|
+
}
|
|
144
|
+
/** One assembled entry exactly as the server renders it
|
|
145
|
+
* (`retrieve/context_assembler/render.py` `render_entry`), so a block we had
|
|
146
|
+
* to re-render after dropping a retired entry reads like the server's. */
|
|
147
|
+
export function renderContextEntry(entry) {
|
|
148
|
+
const attr = (v) => String(v ?? "")
|
|
149
|
+
.replace(/&/g, "&")
|
|
150
|
+
.replace(/"/g, """)
|
|
151
|
+
.replace(/</g, "<");
|
|
152
|
+
const score = Number(entry.score);
|
|
153
|
+
const head = `<memory uri="${attr(entry.uri)}" type="${attr(entry.category)}"` +
|
|
154
|
+
` score="${(Number.isFinite(score) ? score : 0).toFixed(2)}" detail="${String(entry.detail ?? "")}"`;
|
|
155
|
+
const text = String(entry.text ?? "");
|
|
156
|
+
if (text === "")
|
|
157
|
+
return `${head} />`;
|
|
158
|
+
return `${head}>\n${text.replace(/<(\/?)memory(?=[\s/>])/gi, "<\\$1memory")}\n</memory>`;
|
|
159
|
+
}
|
|
160
|
+
const CONTEXT_PATHS = new Set(["/api/v1/search/search", "/api/v1/search/recall"]);
|
|
161
|
+
const FIND_PATH = "/api/v1/search/find";
|
|
162
|
+
/**
|
|
163
|
+
* Retired entries out of every recall request this fetch carries:
|
|
164
|
+
* * a context search or the `/search/recall` preset is SENT the published
|
|
165
|
+
* retired URIs as `exclude_uris` (merged with any it already carried,
|
|
166
|
+
* capped at the server's 200) — list-mode search rejects the field, so
|
|
167
|
+
* only a `mode: "context"` body gets it;
|
|
168
|
+
* * whatever comes back is FILTERED: an entry the list names, or whose own
|
|
169
|
+
* text opens with `#retired`, is dropped, and the rendered block is
|
|
170
|
+
* rebuilt from what is left (the digest with it — it was written from the
|
|
171
|
+
* dropped entry too);
|
|
172
|
+
* * the raw-find fallback's `memories` are filtered the same way.
|
|
173
|
+
*/
|
|
174
|
+
export function retiredGuard(inner, retired) {
|
|
175
|
+
return async (path, init, options) => {
|
|
176
|
+
let excluded = [];
|
|
177
|
+
try {
|
|
178
|
+
excluded = retired();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
excluded = [];
|
|
182
|
+
}
|
|
183
|
+
const excludedSet = new Set(excluded);
|
|
184
|
+
let sent = init;
|
|
185
|
+
if (CONTEXT_PATHS.has(path) && typeof init?.body === "string" && excluded.length > 0) {
|
|
186
|
+
try {
|
|
187
|
+
const body = JSON.parse(init.body);
|
|
188
|
+
if (path !== "/api/v1/search/search" || body["mode"] === "context") {
|
|
189
|
+
const have = Array.isArray(body["exclude_uris"])
|
|
190
|
+
? body["exclude_uris"].filter((u) => typeof u === "string")
|
|
191
|
+
: [];
|
|
192
|
+
body["exclude_uris"] = [...new Set([...have, ...excluded])].slice(0, MAX_RECALL_EXCLUSIONS);
|
|
193
|
+
sent = { ...init, body: JSON.stringify(body) };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
sent = init;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const res = await inner(path, sent, options);
|
|
201
|
+
if (!res?.ok || !res.result || typeof res.result !== "object")
|
|
202
|
+
return res;
|
|
203
|
+
const isRetired = (uri, text) => (typeof uri === "string" && excludedSet.has(uri)) || hasRetiredHeader(text);
|
|
204
|
+
if (CONTEXT_PATHS.has(path) && Array.isArray(res.result.entries)) {
|
|
205
|
+
const entries = res.result.entries;
|
|
206
|
+
const kept = entries.filter((e) => !isRetired(e?.["uri"], e?.["text"] ?? e?.["content"]));
|
|
207
|
+
if (kept.length === entries.length)
|
|
208
|
+
return res;
|
|
209
|
+
return {
|
|
210
|
+
...res,
|
|
211
|
+
result: {
|
|
212
|
+
...res.result,
|
|
213
|
+
entries: kept,
|
|
214
|
+
rendered: kept.map(renderContextEntry).join("\n"),
|
|
215
|
+
digest: "",
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (path === FIND_PATH && Array.isArray(res.result.memories)) {
|
|
220
|
+
const memories = res.result.memories;
|
|
221
|
+
const kept = memories.filter((m) => !isRetired(m?.["uri"], m?.["abstract"] ?? m?.["overview"]));
|
|
222
|
+
if (kept.length === memories.length)
|
|
223
|
+
return res;
|
|
224
|
+
return { ...res, result: { ...res.result, memories: kept } };
|
|
225
|
+
}
|
|
226
|
+
return res;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/** Is this the commit route of a session? */
|
|
230
|
+
export function isCommitPath(path) {
|
|
231
|
+
return /^\/api\/v1\/sessions\/[^/]+\/commit(?:[?#].*)?$/.test(path);
|
|
232
|
+
}
|
|
233
|
+
/** What a refused commit answers: a 400 the pending queue treats as final
|
|
234
|
+
* (`retryable.mjs`), so a commit an older build queued is dropped, not
|
|
235
|
+
* retried. */
|
|
236
|
+
export const COMMIT_REFUSED = Object.freeze({
|
|
237
|
+
ok: false,
|
|
238
|
+
status: 400,
|
|
239
|
+
result: null,
|
|
240
|
+
error: Object.freeze({
|
|
241
|
+
code: "QCR_COMMIT_DISABLED",
|
|
242
|
+
message: "session commit is disabled in this fork: it only promotes notes through an " +
|
|
243
|
+
"extraction model this deployment does not run",
|
|
244
|
+
}),
|
|
245
|
+
});
|
|
246
|
+
/** A fetch that never sends a session commit. */
|
|
247
|
+
export function refuseCommits(inner) {
|
|
248
|
+
return async (path, init, options) => {
|
|
249
|
+
if (isCommitPath(path))
|
|
250
|
+
return { ...COMMIT_REFUSED };
|
|
251
|
+
return inner(path, init, options);
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=qcr-recall.js.map
|