@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
package/src/eod.ts
ADDED
|
@@ -0,0 +1,669 @@
|
|
|
1
|
+
// EOD scheduling — a daily wall-clock fire in the configured [eod] timezone,
|
|
2
|
+
// DST-correct, using Intl only (no date libs).
|
|
3
|
+
//
|
|
4
|
+
// Why daemon-side: every pi scheduler extension is in-process —
|
|
5
|
+
// it fires only while a session happens to be open, queues nothing, and none
|
|
6
|
+
// exposes a timezone, so a "Warsaw end of day" trigger would drift an hour
|
|
7
|
+
// across CET/CEST and silently skip days. The daemon owns the clock instead.
|
|
8
|
+
//
|
|
9
|
+
// DST semantics chosen (documented, tested):
|
|
10
|
+
// * The fire instant is the next instant strictly after `now` whose WALL
|
|
11
|
+
// CLOCK in `timeZone` reads exactly `timeHHMM`. Exactly one fire per local
|
|
12
|
+
// calendar day, on transition days too: the spring-forward day is 23h long
|
|
13
|
+
// (gap between consecutive fires 23h), the fall-back day 25h — the fire
|
|
14
|
+
// still lands at 18:00 local on both, with the UTC offset flipping
|
|
15
|
+
// (18:00 CEST = 16:00Z, 18:00 CET = 17:00Z).
|
|
16
|
+
// * Nonexistent wall times (inside a spring-forward gap — cannot happen for
|
|
17
|
+
// 18:00 in Warsaw, but the helper is general): fire at the shifted-forward
|
|
18
|
+
// instant, i.e. the candidate whose local clock lands after the requested
|
|
19
|
+
// time. Nothing is skipped.
|
|
20
|
+
// * Ambiguous wall times (inside a repeated fall-back hour — again not 18:00
|
|
21
|
+
// in Warsaw): fire at the FIRST (earlier, still-DST) occurrence, once only.
|
|
22
|
+
import { stripModelDocs } from "@quickchatai/pi-quickreview/src/promptdoc.js";
|
|
23
|
+
import { readFileSync } from "node:fs";
|
|
24
|
+
import { withinBudget } from "@quickchatai/pi-quickreview/src/budget.js";
|
|
25
|
+
import { NEUTRAL_IDENTITY_VARS } from "@quickchatai/pi-quickreview/src/include.js";
|
|
26
|
+
import { render, type TemplateVars } from "@quickchatai/pi-quickreview/src/templates.js";
|
|
27
|
+
|
|
28
|
+
const MAX_TIMEOUT_MS = 2 ** 31 - 1;
|
|
29
|
+
const DAY_MS = 86_400_000;
|
|
30
|
+
|
|
31
|
+
export interface ZonedParts {
|
|
32
|
+
year: number;
|
|
33
|
+
month: number; // 1-12
|
|
34
|
+
day: number;
|
|
35
|
+
hour: number;
|
|
36
|
+
minute: number;
|
|
37
|
+
second: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const formatterCache = new Map<string, Intl.DateTimeFormat>();
|
|
41
|
+
|
|
42
|
+
function formatter(timeZone: string): Intl.DateTimeFormat {
|
|
43
|
+
let f = formatterCache.get(timeZone);
|
|
44
|
+
if (!f) {
|
|
45
|
+
f = new Intl.DateTimeFormat("en-US", {
|
|
46
|
+
timeZone,
|
|
47
|
+
hour12: false,
|
|
48
|
+
year: "numeric",
|
|
49
|
+
month: "2-digit",
|
|
50
|
+
day: "2-digit",
|
|
51
|
+
hour: "2-digit",
|
|
52
|
+
minute: "2-digit",
|
|
53
|
+
second: "2-digit",
|
|
54
|
+
});
|
|
55
|
+
formatterCache.set(timeZone, f);
|
|
56
|
+
}
|
|
57
|
+
return f;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Wall-clock parts of `instant` in `timeZone`. */
|
|
61
|
+
export function zonedParts(instant: Date, timeZone: string): ZonedParts {
|
|
62
|
+
const parts = formatter(timeZone).formatToParts(instant);
|
|
63
|
+
const get = (type: string): number => Number(parts.find((p) => p.type === type)?.value ?? "0");
|
|
64
|
+
// hour12:false can render midnight as "24" in some ICU versions — only the
|
|
65
|
+
// hour field is affected.
|
|
66
|
+
const hour = get("hour") % 24;
|
|
67
|
+
return {
|
|
68
|
+
year: get("year"),
|
|
69
|
+
month: get("month"),
|
|
70
|
+
day: get("day"),
|
|
71
|
+
hour,
|
|
72
|
+
minute: get("minute"),
|
|
73
|
+
second: get("second"),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** "YYYY-MM-DD" local calendar date in `timeZone` — the digest/date stamp. */
|
|
78
|
+
export function zoneDateString(instant: Date, timeZone: string): string {
|
|
79
|
+
const p = zonedParts(instant, timeZone);
|
|
80
|
+
return `${String(p.year).padStart(4, "0")}-${String(p.month).padStart(2, "0")}-${String(p.day).padStart(2, "0")}`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** The digest files among `names` (`<YYYY-MM-DD>.md`, the sweep's own
|
|
84
|
+
* naming), oldest first — lexicographic is chronological. The one reading the
|
|
85
|
+
* daemon's headline and the TUI's digest tab share. */
|
|
86
|
+
/** The sandbox-root subdirectory the day digests live in. */
|
|
87
|
+
export const DIGEST_DIR_NAME = "digest";
|
|
88
|
+
|
|
89
|
+
export function digestFiles(names: Iterable<string>): string[] {
|
|
90
|
+
return [...names].filter((f) => /^\d{4}-\d{2}-\d{2}\.md$/.test(f)).sort();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The operations-day token: "YYYY-MM-DD" in the configured
|
|
95
|
+
* operations timezone (`[ops] timezone`, `cfg.ops.timezone`). The ONE
|
|
96
|
+
* day-naming implementation — the [feedback] same-day addendum, the agent
|
|
97
|
+
* rebuild rollover and the Slack day caps all derive their day through it;
|
|
98
|
+
* callers thread the zone from config rather than importing a constant.
|
|
99
|
+
*/
|
|
100
|
+
export function opsDay(timeZone: string, now: Date = new Date()): string {
|
|
101
|
+
return zoneDateString(now, timeZone);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Zone offset (ms east of UTC) in effect at `instant`. */
|
|
105
|
+
export function zoneOffsetMs(instant: Date, timeZone: string): number {
|
|
106
|
+
const p = zonedParts(instant, timeZone);
|
|
107
|
+
const asUtc = Date.UTC(p.year, p.month - 1, p.day, p.hour, p.minute, p.second);
|
|
108
|
+
// Millisecond component is not exposed by the formatter; strip it from both sides.
|
|
109
|
+
return asUtc - (instant.getTime() - (instant.getTime() % 1000));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Parse "HH:MM" strictly. */
|
|
113
|
+
export function parseHHMM(time: string): { hour: number; minute: number } {
|
|
114
|
+
const m = /^(\d{2}):(\d{2})$/.exec(time.trim());
|
|
115
|
+
if (!m) throw new Error(`bad eod time '${time}' — expected HH:MM`);
|
|
116
|
+
const hour = Number(m[1]);
|
|
117
|
+
const minute = Number(m[2]);
|
|
118
|
+
if (hour > 23 || minute > 59) throw new Error(`bad eod time '${time}'`);
|
|
119
|
+
return { hour, minute };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* The instant at which the wall clock in `timeZone` reads
|
|
124
|
+
* yyyy-mm-dd hh:mm — resolving DST gaps/overlaps per the semantics above.
|
|
125
|
+
*/
|
|
126
|
+
export function localWallClockToInstant(
|
|
127
|
+
year: number,
|
|
128
|
+
month: number,
|
|
129
|
+
day: number,
|
|
130
|
+
hour: number,
|
|
131
|
+
minute: number,
|
|
132
|
+
timeZone: string,
|
|
133
|
+
): Date {
|
|
134
|
+
const naive = Date.UTC(year, month - 1, day, hour, minute, 0);
|
|
135
|
+
// The offset can only take one of (at most) two values around a transition:
|
|
136
|
+
// sample a day either side of the target.
|
|
137
|
+
const before = zoneOffsetMs(new Date(naive - DAY_MS), timeZone);
|
|
138
|
+
const after = zoneOffsetMs(new Date(naive + DAY_MS), timeZone);
|
|
139
|
+
const candidates = Array.from(new Set([naive - before, naive - after])).sort((a, b) => a - b);
|
|
140
|
+
|
|
141
|
+
const matches = candidates.filter((ts) => {
|
|
142
|
+
const p = zonedParts(new Date(ts), timeZone);
|
|
143
|
+
return (
|
|
144
|
+
p.year === year &&
|
|
145
|
+
p.month === month &&
|
|
146
|
+
p.day === day &&
|
|
147
|
+
p.hour === hour &&
|
|
148
|
+
p.minute === minute
|
|
149
|
+
);
|
|
150
|
+
});
|
|
151
|
+
if (matches.length > 0) return new Date(matches[0]!); // ambiguous → first (earlier) occurrence
|
|
152
|
+
|
|
153
|
+
// Nonexistent wall time (inside a spring-forward gap): take the candidate
|
|
154
|
+
// whose local clock lands AFTER the requested time — the shifted-forward fire.
|
|
155
|
+
const shifted = candidates.filter((ts) => {
|
|
156
|
+
const p = zonedParts(new Date(ts), timeZone);
|
|
157
|
+
return Date.UTC(p.year, p.month - 1, p.day, p.hour, p.minute) > naive;
|
|
158
|
+
});
|
|
159
|
+
return new Date(shifted.length > 0 ? Math.min(...shifted) : Math.max(...candidates));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The calendar day year-month-day in `timeZone` as a half-open instant window
|
|
164
|
+
* [start, end): midnight to midnight on that zone's wall clock, so the 23 h
|
|
165
|
+
* and 25 h DST days are exact.
|
|
166
|
+
*/
|
|
167
|
+
export function zoneDayBounds(
|
|
168
|
+
year: number,
|
|
169
|
+
month: number,
|
|
170
|
+
day: number,
|
|
171
|
+
timeZone: string,
|
|
172
|
+
): { start: Date; end: Date } {
|
|
173
|
+
const next = new Date(Date.UTC(year, month - 1, day + 1));
|
|
174
|
+
return {
|
|
175
|
+
start: localWallClockToInstant(year, month, day, 0, 0, timeZone),
|
|
176
|
+
end: localWallClockToInstant(
|
|
177
|
+
next.getUTCFullYear(),
|
|
178
|
+
next.getUTCMonth() + 1,
|
|
179
|
+
next.getUTCDate(),
|
|
180
|
+
0,
|
|
181
|
+
0,
|
|
182
|
+
timeZone,
|
|
183
|
+
),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* The next instant strictly after `now` whose wall clock in `timeZone` reads
|
|
189
|
+
* `timeHHMM`. Pure — no timers, no I/O.
|
|
190
|
+
*/
|
|
191
|
+
export function nextEodFire(now: Date, timeHHMM: string, timeZone: string): Date {
|
|
192
|
+
const { hour, minute } = parseHHMM(timeHHMM);
|
|
193
|
+
const today = zonedParts(now, timeZone);
|
|
194
|
+
let candidate = localWallClockToInstant(
|
|
195
|
+
today.year,
|
|
196
|
+
today.month,
|
|
197
|
+
today.day,
|
|
198
|
+
hour,
|
|
199
|
+
minute,
|
|
200
|
+
timeZone,
|
|
201
|
+
);
|
|
202
|
+
if (candidate.getTime() > now.getTime()) return candidate;
|
|
203
|
+
// Advance one local calendar day (calendar arithmetic on the wall date, so
|
|
204
|
+
// 23h/25h days do not matter).
|
|
205
|
+
const next = new Date(Date.UTC(today.year, today.month - 1, today.day) + DAY_MS);
|
|
206
|
+
candidate = localWallClockToInstant(
|
|
207
|
+
next.getUTCFullYear(),
|
|
208
|
+
next.getUTCMonth() + 1,
|
|
209
|
+
next.getUTCDate(),
|
|
210
|
+
hour,
|
|
211
|
+
minute,
|
|
212
|
+
timeZone,
|
|
213
|
+
);
|
|
214
|
+
return candidate;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** The headings of the sections the daemon renders after the seed. The
|
|
218
|
+
* frozen eod-sweep seed sends the curator to "Outcomes to curate" by name, so
|
|
219
|
+
* a rename here contradicts the seed — tests/eod-seed-coherence.test.ts holds
|
|
220
|
+
* the two together. */
|
|
221
|
+
export const EOD_SECTIONS = Object.freeze({
|
|
222
|
+
layout: "Reviewer memory layout",
|
|
223
|
+
curation: "Outcomes to curate",
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
/** Render the eod-sweep template: `{{date}}` plus the identity
|
|
227
|
+
* variables (`{{owner_name}}`/`{{repo}}`/`{{bot_login}}`), through the strict
|
|
228
|
+
* renderer — an unknown `{{…}}` throws rather than reaching the session.
|
|
229
|
+
* `dayContext` (optional) is daemon-measured context — e.g. the day's
|
|
230
|
+
* cancellation summary — appended after the seeded template, which
|
|
231
|
+
* we may not edit (rule 6): the sweep session is told to carry it into the
|
|
232
|
+
* digest it writes. */
|
|
233
|
+
export function renderEodPrompt(
|
|
234
|
+
template: string,
|
|
235
|
+
date: string,
|
|
236
|
+
dayContext?: string,
|
|
237
|
+
identity: Readonly<TemplateVars> = NEUTRAL_IDENTITY_VARS,
|
|
238
|
+
memoryLayout?: string,
|
|
239
|
+
curation?: string,
|
|
240
|
+
): string {
|
|
241
|
+
let out = render(stripModelDocs(template), { ...identity, date });
|
|
242
|
+
// Where each kind of memory entry lives — the memory layout, which the
|
|
243
|
+
// seed does not spell in full. Not digest material: its own section, before
|
|
244
|
+
// the lines the digest carries.
|
|
245
|
+
if (memoryLayout?.trim())
|
|
246
|
+
out = `${out.replace(/\n*$/, "\n")}\n## ${EOD_SECTIONS.layout}\n\n${memoryLayout.trim()}\n`;
|
|
247
|
+
// What to do with the day's outcomes packet — the learner's
|
|
248
|
+
// candidates, the typed-lesson write and the curation receipt. Instructions,
|
|
249
|
+
// not digest material: its own section, like the layout note. The seed
|
|
250
|
+
// names this section ("Start from the outcomes packet"), so the heading is
|
|
251
|
+
// a contract with the seed (tests/eod-seed-coherence.test.ts).
|
|
252
|
+
if (curation?.trim())
|
|
253
|
+
out = `${out.replace(/\n*$/, "\n")}\n## ${EOD_SECTIONS.curation}\n\n${curation.trim()}\n`;
|
|
254
|
+
if (!dayContext?.trim()) return out;
|
|
255
|
+
return (
|
|
256
|
+
`${out.replace(/\n*$/, "\n")}\n` +
|
|
257
|
+
`## Daemon-measured context for ${date}\n\n` +
|
|
258
|
+
`Carry these lines into today's digest verbatim (under Spend):\n\n` +
|
|
259
|
+
`${dayContext.trim()}\n`
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export type TimerHandle = unknown;
|
|
264
|
+
|
|
265
|
+
/** What `dayContext` may answer: the digest's lines, and the curation
|
|
266
|
+
* section the prompt renders after the seed. */
|
|
267
|
+
export interface EodDayContext {
|
|
268
|
+
lines: string;
|
|
269
|
+
curation?: string;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** Wait for `dayContext`, total: a throw, a rejection or a timeout is "no
|
|
273
|
+
* context" — the sweep itself must still fire — and is reported to
|
|
274
|
+
* `onMissing` (a throw from which is swallowed). */
|
|
275
|
+
async function resolveDayContext(
|
|
276
|
+
fn: EodTimerDeps["dayContext"],
|
|
277
|
+
date: string,
|
|
278
|
+
timeoutMs: number,
|
|
279
|
+
onMissing?: EodTimerDeps["onContextMissing"],
|
|
280
|
+
): Promise<EodDayContext> {
|
|
281
|
+
if (!fn) return { lines: "" };
|
|
282
|
+
try {
|
|
283
|
+
const read = await withinBudget(
|
|
284
|
+
Promise.resolve().then(() => fn(date)),
|
|
285
|
+
timeoutMs,
|
|
286
|
+
);
|
|
287
|
+
if (read.kind === "budget") {
|
|
288
|
+
safely(() => onMissing?.(date, `no answer within ${timeoutMs} ms`));
|
|
289
|
+
return { lines: "" };
|
|
290
|
+
}
|
|
291
|
+
const answer = read.value;
|
|
292
|
+
if (answer === null || answer === undefined) return { lines: "" };
|
|
293
|
+
return typeof answer === "string" ? { lines: answer } : answer;
|
|
294
|
+
} catch (err) {
|
|
295
|
+
safely(() => onMissing?.(date, err));
|
|
296
|
+
return { lines: "" };
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** `context`, with `noCuration`'s section in place of a curation it lacks.
|
|
301
|
+
* Total: a throwing or empty fallback leaves it as it was. */
|
|
302
|
+
function withCurationFallback(
|
|
303
|
+
context: EodDayContext,
|
|
304
|
+
noCuration: EodTimerDeps["noCuration"],
|
|
305
|
+
date: string,
|
|
306
|
+
): EodDayContext {
|
|
307
|
+
if (context.curation?.trim() || !noCuration) return context;
|
|
308
|
+
try {
|
|
309
|
+
const curation = noCuration(date);
|
|
310
|
+
return typeof curation === "string" && curation.trim() ? { ...context, curation } : context;
|
|
311
|
+
} catch {
|
|
312
|
+
return context;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/** Why a day's sweep was deferred. */
|
|
317
|
+
export type EodHoldReason = "draining" | "sweep_in_flight";
|
|
318
|
+
|
|
319
|
+
export interface EodTimerDeps {
|
|
320
|
+
timeHHMM: string;
|
|
321
|
+
timeZone: string;
|
|
322
|
+
/** eod-sweep.md contents; read lazily so an edit lands without a restart. */
|
|
323
|
+
readPrompt: () => string;
|
|
324
|
+
/** Identity variable map (`identityVars(cfg)` in production);
|
|
325
|
+
* neutral role wording when absent. */
|
|
326
|
+
identity?: Readonly<TemplateVars>;
|
|
327
|
+
/** Daemon-measured lines for the fired date, appended to the prompt so the
|
|
328
|
+
* sweep carries them into the digest (e.g. the cancellation summary).
|
|
329
|
+
* A throw here never loses the sweep: the prompt just goes out bare.
|
|
330
|
+
* It may answer ASYNCHRONOUSLY (the learner builds the day's
|
|
331
|
+
* outcomes packet here) and with a `curation` section beside the lines —
|
|
332
|
+
* waited for at most `dayContextTimeoutMs`, after which the sweep goes out
|
|
333
|
+
* without it. */
|
|
334
|
+
dayContext?: (date: string) => string | EodDayContext | Promise<string | EodDayContext>;
|
|
335
|
+
/** How long the sweep waits for `dayContext` (default 90 s). */
|
|
336
|
+
dayContextTimeoutMs?: number;
|
|
337
|
+
/** `dayContext` threw, rejected or missed `dayContextTimeoutMs`: the sweep
|
|
338
|
+
* goes out without it; this says why (the error, or the timeout). */
|
|
339
|
+
onContextMissing?: (date: string, why: unknown) => void;
|
|
340
|
+
/** The `## Outcomes to curate` section for a sweep whose
|
|
341
|
+
* `dayContext` brought no curation — no learner, a packet that failed, or a
|
|
342
|
+
* context that did not answer in time. The seed starts §1 from
|
|
343
|
+
* that section, so with this set it is never silently absent
|
|
344
|
+
* (`renderNoPacketSection` in wire.ts). A throw costs the section, never
|
|
345
|
+
* the sweep. */
|
|
346
|
+
noCuration?: (date: string) => string;
|
|
347
|
+
/** The memory layout the curator writes into (`MEMORY_LAYOUT_NOTE`),
|
|
348
|
+
* rendered after the seed in its own section. */
|
|
349
|
+
memoryLayout?: string;
|
|
350
|
+
/** Deploy-window drain: when this returns true at fire time the sweep is
|
|
351
|
+
* DEFERRED, never skipped:
|
|
352
|
+
* `onHeld` fires, the day joins the `deferred` set, and it fires once this
|
|
353
|
+
* returns false again — checked every `deferPollMs`, and across a restart
|
|
354
|
+
* when `deferred` persists the set. A throwing probe counts as "not held":
|
|
355
|
+
* a broken check must not silently eat the sweep. */
|
|
356
|
+
shouldHold?: () => boolean;
|
|
357
|
+
/** True while an earlier sweep is still being worked — wire.ts: the
|
|
358
|
+
* pinned-area watch window is open. A day whose fire comes up
|
|
359
|
+
* then is deferred behind it like a drained one, so two sweeps never run
|
|
360
|
+
* at once: the curator works one day at a time, and the watch judges each
|
|
361
|
+
* day's window on that day's work. A throwing probe counts as "not in
|
|
362
|
+
* flight". */
|
|
363
|
+
sweepInFlight?: () => boolean;
|
|
364
|
+
/** A day was deferred: `draining` (the drain), or `sweep_in_flight` (an
|
|
365
|
+
* earlier day's sweep is still open or still retrying its inject). */
|
|
366
|
+
onHeld?: (date: string, why: EodHoldReason) => void;
|
|
367
|
+
/** Where the owed days — deferred, or firing and not yet settled — survive
|
|
368
|
+
* a restart (wire.ts: state.db). Without it they live as long as this
|
|
369
|
+
* timer. */
|
|
370
|
+
deferred?: { load(): string[]; save(dates: string[]): void };
|
|
371
|
+
/** `deferred` threw: on `load` (`dates` null — what was owed is unknown) or
|
|
372
|
+
* on `save` (the set it was writing). Scheduling carries on in memory; only
|
|
373
|
+
* a restart could lose or repeat those days. */
|
|
374
|
+
onDeferredStoreFailed?: (op: "load" | "save", dates: string[] | null, err: unknown) => void;
|
|
375
|
+
/** How often a deferred sweep re-checks the drain. */
|
|
376
|
+
deferPollMs?: number;
|
|
377
|
+
/** Called when an owed day fires from the set — deferred, or loaded at boot
|
|
378
|
+
* after a restart interrupted its fire — before its injection. */
|
|
379
|
+
onDeferredFire?: (date: string) => void;
|
|
380
|
+
/** Writes the day's sweep as one companion-inbox item (class `eod`, id
|
|
381
|
+
* `eod-<date>`). `date` is the day the prompt sweeps — a deferred day's, not
|
|
382
|
+
* today's — so a wrapper (the pin watch) can name the window after the day it
|
|
383
|
+
* watches. Delivered once the item is on disk: the companion picks it up
|
|
384
|
+
* whenever it is next running, so the sweep runs late, never not at all. */
|
|
385
|
+
writeInbox: (message: string, date: string) => Promise<void>;
|
|
386
|
+
/** The waits before each RETRY of a failed inbox write — its
|
|
387
|
+
* length is the retry count. Defaults to `EOD_DEFAULTS.retryBackoffMs`. */
|
|
388
|
+
retryBackoffMs?: readonly number[];
|
|
389
|
+
/** Every attempt failed: the day's sweep did not reach the inbox.
|
|
390
|
+
* wire.ts raises the `eod_inject_failed` wake. */
|
|
391
|
+
onInjectFailed?: (date: string, err: unknown, attempts: number) => void;
|
|
392
|
+
now?: () => Date;
|
|
393
|
+
setTimer?: (cb: () => void, ms: number) => TimerHandle;
|
|
394
|
+
clearTimer?: (handle: TimerHandle) => void;
|
|
395
|
+
/** Called after a successful inbox write, with the local date that fired. */
|
|
396
|
+
onFire?: (date: string) => void;
|
|
397
|
+
/** Every failed attempt, retried or not. */
|
|
398
|
+
onError?: (err: unknown) => void;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export const EOD_DEFAULTS = Object.freeze({
|
|
402
|
+
/** A deferred sweep looks for the drain to lift this often. */
|
|
403
|
+
deferPollMs: 60_000,
|
|
404
|
+
/** Three retries of a failed injection: after 1, 5 and 15 minutes. */
|
|
405
|
+
retryBackoffMs: Object.freeze([60_000, 300_000, 900_000]),
|
|
406
|
+
/** How long a fire waits for its day context (the learner builds the
|
|
407
|
+
* outcomes packet there, a mine and a memory read included). */
|
|
408
|
+
dayContextTimeoutMs: 90_000,
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
export interface EodTimer {
|
|
412
|
+
/** The instant the currently-armed timer is aiming at. */
|
|
413
|
+
nextFire(): Date;
|
|
414
|
+
/** The days still owed a sweep: deferred, or firing and not yet settled. */
|
|
415
|
+
deferredDates(): string[];
|
|
416
|
+
stop(): void;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/** Read the seeded prompt file (never rewritten by us). */
|
|
420
|
+
export function promptReader(path: string): () => string {
|
|
421
|
+
return () => readFileSync(path, "utf8");
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/** Run an observer callback; a throw from it is swallowed — it must never
|
|
425
|
+
* turn into a lost or a doubled sweep. */
|
|
426
|
+
function safely(fn: () => void): void {
|
|
427
|
+
try {
|
|
428
|
+
fn();
|
|
429
|
+
} catch {
|
|
430
|
+
// an observer's problem, not the sweep's
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Arm the daily EOD injection: at each fire, render prompts/eod-sweep.md with
|
|
436
|
+
* the zone-local date and write it to the companion inbox, then reschedule.
|
|
437
|
+
* Long waits are chunked around the 2^31-1 ms setTimeout ceiling.
|
|
438
|
+
*
|
|
439
|
+
* Two guarantees ride on top. A drain DEFERS the day rather than
|
|
440
|
+
* skipping it: the date joins a persisted set and fires, oldest first and
|
|
441
|
+
* one at a time, once the drain lifts — a deploy-window drain is usually
|
|
442
|
+
* followed by a restart, which is why the set is persisted. "One at a time"
|
|
443
|
+
* means one SWEEP at a time, not one inject: a day never fires while another
|
|
444
|
+
* fire is in flight or `sweepInFlight` says the last sweep is still being
|
|
445
|
+
* worked, and a day whose hour comes up then is deferred behind it. And an injection
|
|
446
|
+
* that fails is retried (`retryBackoffMs`) before `onInjectFailed` says the
|
|
447
|
+
* day's curation did not happen; every firing day — its own hour's or a
|
|
448
|
+
* deferred one — sits in the persisted set until its fire has finished, so a
|
|
449
|
+
* restart mid-retry fires it again rather than never.
|
|
450
|
+
*/
|
|
451
|
+
export function startEodTimer(deps: EodTimerDeps): EodTimer {
|
|
452
|
+
const now = deps.now ?? (() => new Date());
|
|
453
|
+
const setT = deps.setTimer ?? ((cb, ms) => setTimeout(cb, ms));
|
|
454
|
+
const clearT = deps.clearTimer ?? ((h) => clearTimeout(h as ReturnType<typeof setTimeout>));
|
|
455
|
+
const backoff = deps.retryBackoffMs ?? EOD_DEFAULTS.retryBackoffMs;
|
|
456
|
+
const deferPollMs = Math.max(1, deps.deferPollMs ?? EOD_DEFAULTS.deferPollMs);
|
|
457
|
+
|
|
458
|
+
let target = nextEodFire(now(), deps.timeHHMM, deps.timeZone);
|
|
459
|
+
let handle: TimerHandle | null = null;
|
|
460
|
+
let pollHandle: TimerHandle | null = null;
|
|
461
|
+
/** Pending retry waits: stop() cancels the timer AND releases the waiter,
|
|
462
|
+
* so a fire in its backoff ends ("stopped") instead of hanging forever. */
|
|
463
|
+
const waits = new Map<TimerHandle, () => void>();
|
|
464
|
+
let stopped = false;
|
|
465
|
+
let deferred: string[] = [];
|
|
466
|
+
try {
|
|
467
|
+
deferred = [...new Set(deps.deferred?.load() ?? [])].sort();
|
|
468
|
+
} catch (err) {
|
|
469
|
+
deferred = [];
|
|
470
|
+
safely(() => deps.onDeferredStoreFailed?.("load", null, err));
|
|
471
|
+
}
|
|
472
|
+
/** A fire (the day's own, or a deferred one) is in flight — injecting or
|
|
473
|
+
* waiting out a retry. One at a time. */
|
|
474
|
+
let firing = false;
|
|
475
|
+
|
|
476
|
+
const persist = (): void => {
|
|
477
|
+
try {
|
|
478
|
+
deps.deferred?.save(deferred);
|
|
479
|
+
} catch (err) {
|
|
480
|
+
// The in-memory set still fires it; only a restart could lose it.
|
|
481
|
+
safely(() => deps.onDeferredStoreFailed?.("save", [...deferred], err));
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
/** The day is owed until its fire settles. */
|
|
486
|
+
const owe = (date: string): void => {
|
|
487
|
+
if (deferred.includes(date)) return;
|
|
488
|
+
deferred = [...deferred, date].sort();
|
|
489
|
+
persist();
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
/** A fire finished: a settled day leaves the owed set and the next owed day
|
|
493
|
+
* may fire. Stopped before it settled (a shutdown during the retries), it
|
|
494
|
+
* stays in the persisted set, so the next boot fires it again. */
|
|
495
|
+
const settle = (date: string, outcome: "delivered" | "failed" | "stopped"): void => {
|
|
496
|
+
firing = false;
|
|
497
|
+
if (outcome === "stopped") return;
|
|
498
|
+
deferred = deferred.filter((d) => d !== date);
|
|
499
|
+
persist();
|
|
500
|
+
armPoll();
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
const held = (): boolean => {
|
|
504
|
+
try {
|
|
505
|
+
return deps.shouldHold?.() === true;
|
|
506
|
+
} catch {
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
/** Another sweep is still running: ours, or the one the watch window is
|
|
512
|
+
* open for. */
|
|
513
|
+
const busy = (): boolean => {
|
|
514
|
+
if (firing) return true;
|
|
515
|
+
try {
|
|
516
|
+
return deps.sweepInFlight?.() === true;
|
|
517
|
+
} catch {
|
|
518
|
+
return false;
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
const arm = (): void => {
|
|
523
|
+
if (stopped) return;
|
|
524
|
+
const delay = Math.max(0, target.getTime() - now().getTime());
|
|
525
|
+
handle = setT(tick, Math.min(delay, MAX_TIMEOUT_MS));
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
const wait = (ms: number): Promise<void> =>
|
|
529
|
+
new Promise((resolve) => {
|
|
530
|
+
const h = setT(() => {
|
|
531
|
+
waits.delete(h);
|
|
532
|
+
resolve();
|
|
533
|
+
}, ms);
|
|
534
|
+
waits.set(h, resolve);
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
/** Render and inject one day's sweep, retrying a failed injection.
|
|
538
|
+
* `stopped` — the timer was stopped before the day was settled either way. */
|
|
539
|
+
const fire = async (date: string): Promise<"delivered" | "failed" | "stopped"> => {
|
|
540
|
+
// Context is best-effort and bounded; the sweep itself must still fire.
|
|
541
|
+
const context = withCurationFallback(
|
|
542
|
+
await resolveDayContext(
|
|
543
|
+
deps.dayContext,
|
|
544
|
+
date,
|
|
545
|
+
deps.dayContextTimeoutMs ?? EOD_DEFAULTS.dayContextTimeoutMs,
|
|
546
|
+
deps.onContextMissing,
|
|
547
|
+
),
|
|
548
|
+
deps.noCuration,
|
|
549
|
+
date,
|
|
550
|
+
);
|
|
551
|
+
let lastErr: unknown = null;
|
|
552
|
+
for (let attempt = 0; attempt <= backoff.length; attempt += 1) {
|
|
553
|
+
if (stopped) return "stopped";
|
|
554
|
+
try {
|
|
555
|
+
await deps.writeInbox(
|
|
556
|
+
renderEodPrompt(
|
|
557
|
+
deps.readPrompt(),
|
|
558
|
+
date,
|
|
559
|
+
context.lines,
|
|
560
|
+
deps.identity,
|
|
561
|
+
deps.memoryLayout,
|
|
562
|
+
context.curation,
|
|
563
|
+
),
|
|
564
|
+
date,
|
|
565
|
+
);
|
|
566
|
+
} catch (err) {
|
|
567
|
+
lastErr = err;
|
|
568
|
+
safely(() => deps.onError?.(err));
|
|
569
|
+
if (attempt < backoff.length) await wait(backoff[attempt]!);
|
|
570
|
+
continue;
|
|
571
|
+
}
|
|
572
|
+
// Outside the try: a throwing observer must not read as a failed
|
|
573
|
+
// injection and re-inject a sweep that was delivered.
|
|
574
|
+
safely(() => deps.onFire?.(date));
|
|
575
|
+
return "delivered";
|
|
576
|
+
}
|
|
577
|
+
if (stopped) return "stopped";
|
|
578
|
+
safely(() => deps.onInjectFailed?.(date, lastErr, backoff.length + 1));
|
|
579
|
+
return "failed";
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
/** `fire`, total. Its context, render and inject steps already catch their
|
|
583
|
+
* own failures; should anything still reject, the day settles as failed —
|
|
584
|
+
* reported like an exhausted inject, with no attempt counted — rather than
|
|
585
|
+
* leaving `firing` set and every later sweep deferred behind it. */
|
|
586
|
+
const fireSettled = (date: string): Promise<"delivered" | "failed" | "stopped"> =>
|
|
587
|
+
fire(date).catch((err: unknown) => {
|
|
588
|
+
safely(() => deps.onInjectFailed?.(date, err, 0));
|
|
589
|
+
return "failed" as const;
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
const armPoll = (): void => {
|
|
593
|
+
if (stopped || pollHandle !== null || deferred.length === 0) return;
|
|
594
|
+
pollHandle = setT(poll, deferPollMs);
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
/** A deferred day fires once the drain has lifted — oldest first, one at
|
|
598
|
+
* a time, never while another sweep is in flight; it leaves the set only
|
|
599
|
+
* when its fire has finished. */
|
|
600
|
+
const poll = (): void => {
|
|
601
|
+
pollHandle = null;
|
|
602
|
+
if (stopped || deferred.length === 0) return;
|
|
603
|
+
if (busy() || held()) {
|
|
604
|
+
armPoll();
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
const date = deferred[0]!;
|
|
608
|
+
firing = true;
|
|
609
|
+
safely(() => deps.onDeferredFire?.(date));
|
|
610
|
+
void fireSettled(date).then((outcome) => settle(date, outcome));
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
// Move the target to the next daily fire and arm the wait for it.
|
|
614
|
+
const advance = (): void => {
|
|
615
|
+
target = nextEodFire(now(), deps.timeHHMM, deps.timeZone);
|
|
616
|
+
arm();
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
const tick = (): void => {
|
|
620
|
+
if (stopped) return;
|
|
621
|
+
if (now().getTime() < target.getTime()) {
|
|
622
|
+
arm(); // chunked wait — not yet due
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
const date = zoneDateString(target, deps.timeZone);
|
|
626
|
+
const why: EodHoldReason | null = held() ? "draining" : busy() ? "sweep_in_flight" : null;
|
|
627
|
+
if (why !== null) {
|
|
628
|
+
owe(date);
|
|
629
|
+
safely(() => deps.onHeld?.(date, why));
|
|
630
|
+
armPoll();
|
|
631
|
+
advance();
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
// The day is OWED until its fire settles: it rides the persisted set
|
|
635
|
+
// with the deferred days, so a restart while its context is built or its
|
|
636
|
+
// inject retries fires it again rather than never.
|
|
637
|
+
owe(date);
|
|
638
|
+
if (deferred[0] !== date) {
|
|
639
|
+
// An older day is still owed: oldest first, so it fires now and this
|
|
640
|
+
// day is deferred behind its sweep.
|
|
641
|
+
if (pollHandle !== null) clearT(pollHandle);
|
|
642
|
+
poll();
|
|
643
|
+
safely(() => deps.onHeld?.(date, "sweep_in_flight"));
|
|
644
|
+
advance();
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
firing = true;
|
|
648
|
+
advance();
|
|
649
|
+
void fireSettled(date).then((outcome) => settle(date, outcome));
|
|
650
|
+
};
|
|
651
|
+
|
|
652
|
+
arm();
|
|
653
|
+
// A day a drain deferred before a restart still fires once it lifts.
|
|
654
|
+
armPoll();
|
|
655
|
+
return {
|
|
656
|
+
nextFire: () => target,
|
|
657
|
+
deferredDates: () => [...deferred],
|
|
658
|
+
stop: () => {
|
|
659
|
+
stopped = true;
|
|
660
|
+
if (handle !== null) clearT(handle);
|
|
661
|
+
if (pollHandle !== null) clearT(pollHandle);
|
|
662
|
+
for (const [h, release] of waits) {
|
|
663
|
+
clearT(h);
|
|
664
|
+
release();
|
|
665
|
+
}
|
|
666
|
+
waits.clear();
|
|
667
|
+
},
|
|
668
|
+
};
|
|
669
|
+
}
|