@quickchatai/quickreview 0.0.0-stage → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +401 -2
- package/THIRD-PARTY-NOTICES.md +134 -0
- package/agents/pass-abstraction.md +64 -0
- package/agents/pass-ask-human.md +134 -0
- package/agents/pass-backcompat.md +67 -0
- package/agents/pass-baseline.md +61 -0
- package/agents/pass-behaviour-delta.md +64 -0
- package/agents/pass-bounds.md +36 -0
- package/agents/pass-claims.md +31 -0
- package/agents/pass-concurrency.md +168 -0
- package/agents/pass-consistency.md +57 -0
- package/agents/pass-contracts.md +30 -0
- package/agents/pass-data-safety.md +54 -0
- package/agents/pass-deferred.md +35 -0
- package/agents/pass-delivery.md +37 -0
- package/agents/pass-duplication.md +60 -0
- package/agents/pass-intent.md +63 -0
- package/agents/pass-lint-conformance.md +46 -0
- package/agents/pass-maintainability.md +67 -0
- package/agents/pass-placement.md +68 -0
- package/agents/pass-prod-risk.md +24 -0
- package/agents/pass-rollout.md +32 -0
- package/agents/pass-roundtrip.md +46 -0
- package/agents/pass-security.md +31 -0
- package/agents/pass-simplicity.md +68 -0
- package/agents/pass-statelessness.md +27 -0
- package/agents/pass-style.md +37 -0
- package/agents/pass-sweep.md +57 -0
- package/agents/pass-tests.md +58 -0
- package/agents/pass-ui.md +23 -0
- package/agents/pass-validate.md +50 -0
- package/agents/pass-widened.md +46 -0
- package/agents/scan/pass-scan.md +86 -0
- package/bin/qcr.js +11 -0
- package/config.example.toml +1099 -0
- package/deploy/ansible/README.md +356 -0
- package/deploy/ansible/group_vars/all.yml +212 -0
- package/deploy/ansible/inventory.example.ini +25 -0
- package/deploy/ansible/playbook.yml +360 -0
- package/deploy/collect-secrets.sh +289 -0
- package/deploy/collect-slack-secrets.mjs +1190 -0
- package/deploy/github-app-manifest.json +31 -0
- package/deploy/manifest.schema.json +75 -0
- package/deploy/qcr-update.sh +803 -0
- package/deploy/reviewer/AGENTS.override.md +12 -0
- package/dist/extensions/cli/bash-guard-ambient.js +42 -0
- package/dist/extensions/cli/bash-guard-ambient.js.map +1 -0
- package/dist/extensions/cli/bash-guard.js +5 -0
- package/dist/extensions/cli/bash-guard.js.map +1 -0
- package/dist/extensions/cli/companion-guard.js +5 -0
- package/dist/extensions/cli/companion-guard.js.map +1 -0
- package/dist/extensions/cli/debug-round.js +8 -0
- package/dist/extensions/cli/debug-round.js.map +1 -0
- package/dist/extensions/cli/inject-bridge.js +5 -0
- package/dist/extensions/cli/inject-bridge.js.map +1 -0
- package/dist/extensions/cli/ledger-pin.js +5 -0
- package/dist/extensions/cli/ledger-pin.js.map +1 -0
- package/dist/extensions/cli/lens.js +13 -0
- package/dist/extensions/cli/lens.js.map +1 -0
- package/dist/extensions/cli/login-route.js +5 -0
- package/dist/extensions/cli/login-route.js.map +1 -0
- package/dist/extensions/cli/muted-theme.js +5 -0
- package/dist/extensions/cli/muted-theme.js.map +1 -0
- package/dist/extensions/cli/onboarding.js +5 -0
- package/dist/extensions/cli/onboarding.js.map +1 -0
- package/dist/extensions/cli/setup.js +5 -0
- package/dist/extensions/cli/setup.js.map +1 -0
- package/dist/extensions/cli/tui-view.js +5 -0
- package/dist/extensions/cli/tui-view.js.map +1 -0
- package/dist/extensions/companion-guard.js +361 -0
- package/dist/extensions/companion-guard.js.map +1 -0
- package/dist/extensions/debug-round.js +204 -0
- package/dist/extensions/debug-round.js.map +1 -0
- package/dist/extensions/inject-bridge.js +603 -0
- package/dist/extensions/inject-bridge.js.map +1 -0
- package/dist/extensions/login-route.js +180 -0
- package/dist/extensions/login-route.js.map +1 -0
- package/dist/extensions/muted-theme.js +12 -0
- package/dist/extensions/muted-theme.js.map +1 -0
- package/dist/extensions/onboarding.js +198 -0
- package/dist/extensions/onboarding.js.map +1 -0
- package/dist/extensions/setup-replay.js +269 -0
- package/dist/extensions/setup-replay.js.map +1 -0
- package/dist/extensions/setup-scan.js +998 -0
- package/dist/extensions/setup-scan.js.map +1 -0
- package/dist/extensions/setup-triage.js +175 -0
- package/dist/extensions/setup-triage.js.map +1 -0
- package/dist/extensions/setup.js +1160 -0
- package/dist/extensions/setup.js.map +1 -0
- package/dist/extensions/tui-view.js +389 -0
- package/dist/extensions/tui-view.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/client.js +376 -0
- package/dist/extensions/vendor/openviking-pi/client.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/config.js +189 -0
- package/dist/extensions/vendor/openviking-pi/config.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/index.js +421 -0
- package/dist/extensions/vendor/openviking-pi/index.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +86 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs +408 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +41 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js +290 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js +148 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +68 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js +77 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js +216 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js +154 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js +254 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js +94 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js +333 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/recall.js +108 -0
- package/dist/extensions/vendor/openviking-pi/recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs +529 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs +205 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs +442 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs +286 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +189 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs +580 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs +11 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs +63 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs +58 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/sync.js +127 -0
- package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js +25 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/tools.js +417 -0
- package/dist/extensions/vendor/openviking-pi/tools.js.map +1 -0
- package/dist/src/anomalies.js +483 -0
- package/dist/src/anomalies.js.map +1 -0
- package/dist/src/answerworker.js +180 -0
- package/dist/src/answerworker.js.map +1 -0
- package/dist/src/appstamp.js +68 -0
- package/dist/src/appstamp.js.map +1 -0
- package/dist/src/archive/admission.js +3 -0
- package/dist/src/archive/admission.js.map +1 -0
- package/dist/src/archive/archivedb.js +474 -0
- package/dist/src/archive/archivedb.js.map +1 -0
- package/dist/src/archive/archiver.js +1770 -0
- package/dist/src/archive/archiver.js.map +1 -0
- package/dist/src/archive/archivewrite.js +198 -0
- package/dist/src/archive/archivewrite.js.map +1 -0
- package/dist/src/archive/bundle.js +266 -0
- package/dist/src/archive/bundle.js.map +1 -0
- package/dist/src/archive/dbmove.js +638 -0
- package/dist/src/archive/dbmove.js.map +1 -0
- package/dist/src/archive/duplicatecounts.js +80 -0
- package/dist/src/archive/duplicatecounts.js.map +1 -0
- package/dist/src/archive/eligibility.js +113 -0
- package/dist/src/archive/eligibility.js.map +1 -0
- package/dist/src/archive/extract.js +288 -0
- package/dist/src/archive/extract.js.map +1 -0
- package/dist/src/archive/fsutil.js +330 -0
- package/dist/src/archive/fsutil.js.map +1 -0
- package/dist/src/archive/gzfile.js +277 -0
- package/dist/src/archive/gzfile.js.map +1 -0
- package/dist/src/archive/kinds.js +22 -0
- package/dist/src/archive/kinds.js.map +1 -0
- package/dist/src/archive/livecheckpoint.js +178 -0
- package/dist/src/archive/livecheckpoint.js.map +1 -0
- package/dist/src/archive/liveretention.js +145 -0
- package/dist/src/archive/liveretention.js.map +1 -0
- package/dist/src/archive/manifest.js +284 -0
- package/dist/src/archive/manifest.js.map +1 -0
- package/dist/src/archive/overseer.js +283 -0
- package/dist/src/archive/overseer.js.map +1 -0
- package/dist/src/archive/piglobal.js +129 -0
- package/dist/src/archive/piglobal.js.map +1 -0
- package/dist/src/archive/plan.js +398 -0
- package/dist/src/archive/plan.js.map +1 -0
- package/dist/src/archive/prarchive.js +831 -0
- package/dist/src/archive/prarchive.js.map +1 -0
- package/dist/src/archive/prfiles.js +303 -0
- package/dist/src/archive/prfiles.js.map +1 -0
- package/dist/src/archive/report.js +169 -0
- package/dist/src/archive/report.js.map +1 -0
- package/dist/src/archive/restore.js +276 -0
- package/dist/src/archive/restore.js.map +1 -0
- package/dist/src/archive/rows.js +106 -0
- package/dist/src/archive/rows.js.map +1 -0
- package/dist/src/archive/seal.js +480 -0
- package/dist/src/archive/seal.js.map +1 -0
- package/dist/src/archive/status.js +528 -0
- package/dist/src/archive/status.js.map +1 -0
- package/dist/src/archive/storepass.js +409 -0
- package/dist/src/archive/storepass.js.map +1 -0
- package/dist/src/backfill.js +217 -0
- package/dist/src/backfill.js.map +1 -0
- package/dist/src/bench/cost.js +87 -0
- package/dist/src/bench/exec.js +76 -0
- package/dist/src/bench/values.js +14 -0
- package/dist/src/botcontrol.js +127 -0
- package/dist/src/botcontrol.js.map +1 -0
- package/dist/src/botworker.js +805 -0
- package/dist/src/botworker.js.map +1 -0
- package/dist/src/capture.js +234 -0
- package/dist/src/capture.js.map +1 -0
- package/dist/src/cases.js +1491 -0
- package/dist/src/cases.js.map +1 -0
- package/dist/src/channelfs.js +27 -0
- package/dist/src/channelfs.js.map +1 -0
- package/dist/src/checklist.js +312 -0
- package/dist/src/checklist.js.map +1 -0
- package/dist/src/ciretry.js +92 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1947 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +334 -0
- package/dist/src/cliops.js.map +1 -0
- package/dist/src/clonedir.js +15 -0
- package/dist/src/clonedir.js.map +1 -0
- package/dist/src/commandeffects.js +43 -0
- package/dist/src/commandeffects.js.map +1 -0
- package/dist/src/commands.js +1335 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/companioninbox.js +203 -0
- package/dist/src/companioninbox.js.map +1 -0
- package/dist/src/compare.js +673 -0
- package/dist/src/compare.js.map +1 -0
- package/dist/src/config.js +1041 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/configcheck.js +111 -0
- package/dist/src/configcheck.js.map +1 -0
- package/dist/src/coreext.js +43 -0
- package/dist/src/coreext.js.map +1 -0
- package/dist/src/daemon.js +945 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/debuground.js +731 -0
- package/dist/src/debuground.js.map +1 -0
- package/dist/src/debugroundpi.js +223 -0
- package/dist/src/debugroundpi.js.map +1 -0
- package/dist/src/diagnostics.js +14 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/digest.js +139 -0
- package/dist/src/digest.js.map +1 -0
- package/dist/src/dispatch.js +1727 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/engine/answerguard.js +18 -0
- package/dist/src/engine/answerguard.js.map +1 -0
- package/dist/src/engine/botsdk.js +262 -0
- package/dist/src/engine/botsdk.js.map +1 -0
- package/dist/src/engine/caserunner-sdk.js +332 -0
- package/dist/src/engine/caserunner-sdk.js.map +1 -0
- package/dist/src/engine/debugpi.js +206 -0
- package/dist/src/engine/debugpi.js.map +1 -0
- package/dist/src/eod.js +473 -0
- package/dist/src/eod.js.map +1 -0
- package/dist/src/eodpinwatch.js +391 -0
- package/dist/src/eodpinwatch.js.map +1 -0
- package/dist/src/escalation.js +1009 -0
- package/dist/src/escalation.js.map +1 -0
- package/dist/src/eventloop.js +779 -0
- package/dist/src/eventloop.js.map +1 -0
- package/dist/src/execboundary.js +437 -0
- package/dist/src/execboundary.js.map +1 -0
- package/dist/src/feedback.js +915 -0
- package/dist/src/feedback.js.map +1 -0
- package/dist/src/findingscheck.js +200 -0
- package/dist/src/findingscheck.js.map +1 -0
- package/dist/src/fsdenied.js +26 -0
- package/dist/src/fsdenied.js.map +1 -0
- package/dist/src/ghread.js +181 -0
- package/dist/src/ghread.js.map +1 -0
- package/dist/src/github.js +1098 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/githubtoken.js +346 -0
- package/dist/src/githubtoken.js.map +1 -0
- package/dist/src/homes.js +103 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hostroute.js +24 -0
- package/dist/src/hostroute.js.map +1 -0
- package/dist/src/improvements.js +625 -0
- package/dist/src/improvements.js.map +1 -0
- package/dist/src/install.js +946 -0
- package/dist/src/install.js.map +1 -0
- package/dist/src/installkind.js +40 -0
- package/dist/src/installkind.js.map +1 -0
- package/dist/src/ipc/capability.js +286 -0
- package/dist/src/ipc/capability.js.map +1 -0
- package/dist/src/ipc/client.js +226 -0
- package/dist/src/ipc/client.js.map +1 -0
- package/dist/src/ipc/control.js +70 -0
- package/dist/src/ipc/control.js.map +1 -0
- package/dist/src/ipc/ghreadshim.js +77 -0
- package/dist/src/ipc/ghreadshim.js.map +1 -0
- package/dist/src/ipc/launcher.js +65 -0
- package/dist/src/ipc/launcher.js.map +1 -0
- package/dist/src/ipc/permits.js +293 -0
- package/dist/src/ipc/permits.js.map +1 -0
- package/dist/src/ipc/postshim.js +137 -0
- package/dist/src/ipc/postshim.js.map +1 -0
- package/dist/src/ipc/protocol.js +239 -0
- package/dist/src/ipc/protocol.js.map +1 -0
- package/dist/src/ipc/server.js +312 -0
- package/dist/src/ipc/server.js.map +1 -0
- package/dist/src/ipc/workerspec.js +148 -0
- package/dist/src/ipc/workerspec.js.map +1 -0
- package/dist/src/learner/learner.js +1272 -0
- package/dist/src/learner/learner.js.map +1 -0
- package/dist/src/learner/miner.js +948 -0
- package/dist/src/learner/miner.js.map +1 -0
- package/dist/src/learner/packet.js +216 -0
- package/dist/src/learner/packet.js.map +1 -0
- package/dist/src/learner/receipt.js +135 -0
- package/dist/src/learner/receipt.js.map +1 -0
- package/dist/src/learner/status.js +38 -0
- package/dist/src/learner/status.js.map +1 -0
- package/dist/src/ledgercheck.js +120 -0
- package/dist/src/ledgercheck.js.map +1 -0
- package/dist/src/lessonledger.js +451 -0
- package/dist/src/lessonledger.js.map +1 -0
- package/dist/src/lessonselect.js +639 -0
- package/dist/src/lessonselect.js.map +1 -0
- package/dist/src/lessonshadow.js +540 -0
- package/dist/src/lessonshadow.js.map +1 -0
- package/dist/src/levers.js +302 -0
- package/dist/src/levers.js.map +1 -0
- package/dist/src/live/projection.js +450 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/publish.js +83 -0
- package/dist/src/live/publish.js.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/livecli.js +288 -0
- package/dist/src/livecli.js.map +1 -0
- package/dist/src/loginhint.js +47 -0
- package/dist/src/loginhint.js.map +1 -0
- package/dist/src/loginrefresh/atomic.js +66 -0
- package/dist/src/loginrefresh/atomic.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +93 -0
- package/dist/src/loginrefresh/lock.js.map +1 -0
- package/dist/src/loginrefresh/main.js +58 -0
- package/dist/src/loginrefresh/main.js.map +1 -0
- package/dist/src/loginrefresh/pirefresh.js +52 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -0
- package/dist/src/loginrefresh/refresher.js +286 -0
- package/dist/src/loginrefresh/refresher.js.map +1 -0
- package/dist/src/loginrefresh/supervisor.js +253 -0
- package/dist/src/loginrefresh/supervisor.js.map +1 -0
- package/dist/src/loginrefresh/types.js +4 -0
- package/dist/src/loginrefresh/types.js.map +1 -0
- package/dist/src/memory/context.js +251 -0
- package/dist/src/memory/context.js.map +1 -0
- package/dist/src/memory/datafence.js +5 -0
- package/dist/src/memory/datafence.js.map +1 -0
- package/dist/src/memory/delivery.js +131 -0
- package/dist/src/memory/delivery.js.map +1 -0
- package/dist/src/memory/eventtags.js +81 -0
- package/dist/src/memory/eventtags.js.map +1 -0
- package/dist/src/memory/health.js +713 -0
- package/dist/src/memory/health.js.map +1 -0
- package/dist/src/memory/import.js +504 -0
- package/dist/src/memory/import.js.map +1 -0
- package/dist/src/memory/layout.js +252 -0
- package/dist/src/memory/layout.js.map +1 -0
- package/dist/src/memory/legacy-file.js +100 -0
- package/dist/src/memory/legacy-file.js.map +1 -0
- package/dist/src/memory/lessons.js +370 -0
- package/dist/src/memory/lessons.js.map +1 -0
- package/dist/src/memory/ovsession.js +449 -0
- package/dist/src/memory/ovsession.js.map +1 -0
- package/dist/src/memory/relayout.js +259 -0
- package/dist/src/memory/relayout.js.map +1 -0
- package/dist/src/memory/roundactivity.js +180 -0
- package/dist/src/memory/roundactivity.js.map +1 -0
- package/dist/src/memory/selection.js +690 -0
- package/dist/src/memory/selection.js.map +1 -0
- package/dist/src/memory/shadowstatus.js +69 -0
- package/dist/src/memory/shadowstatus.js.map +1 -0
- package/dist/src/memory/store.js +83 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/memory/textidentity.js +8 -0
- package/dist/src/memory/textidentity.js.map +1 -0
- package/dist/src/metrics.js +773 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/missingconfig.js +8 -0
- package/dist/src/missingconfig.js.map +1 -0
- package/dist/src/npmverbs.js +228 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +219 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +329 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +75 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/pipin.js +22 -0
- package/dist/src/onboard/pipin.js.map +1 -0
- package/dist/src/onboard/stepforward.js +41 -0
- package/dist/src/onboard/stepforward.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +214 -0
- package/dist/src/onboard/steps/appslug.js.map +1 -0
- package/dist/src/onboard/steps/bringup.js +408 -0
- package/dist/src/onboard/steps/bringup.js.map +1 -0
- package/dist/src/onboard/steps/compose.js +372 -0
- package/dist/src/onboard/steps/compose.js.map +1 -0
- package/dist/src/onboard/steps/configdelivery.js +50 -0
- package/dist/src/onboard/steps/configdelivery.js.map +1 -0
- package/dist/src/onboard/steps/configfill.js +1218 -0
- package/dist/src/onboard/steps/configfill.js.map +1 -0
- package/dist/src/onboard/steps/deploysh.js +80 -0
- package/dist/src/onboard/steps/deploysh.js.map +1 -0
- package/dist/src/onboard/steps/embeddings.js +472 -0
- package/dist/src/onboard/steps/embeddings.js.map +1 -0
- package/dist/src/onboard/steps/escalation.js +571 -0
- package/dist/src/onboard/steps/escalation.js.map +1 -0
- package/dist/src/onboard/steps/githubaccount.js +595 -0
- package/dist/src/onboard/steps/githubaccount.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +1150 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +508 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +78 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +817 -0
- package/dist/src/onboard/steps/ingress.js.map +1 -0
- package/dist/src/onboard/steps/inventory.js +420 -0
- package/dist/src/onboard/steps/inventory.js.map +1 -0
- package/dist/src/onboard/steps/llmauth.js +966 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1112 -0
- package/dist/src/onboard/steps/memory.js.map +1 -0
- package/dist/src/onboard/steps/memorykeys.js +43 -0
- package/dist/src/onboard/steps/memorykeys.js.map +1 -0
- package/dist/src/onboard/steps/preflight.js +172 -0
- package/dist/src/onboard/steps/preflight.js.map +1 -0
- package/dist/src/onboard/steps/proof.js +812 -0
- package/dist/src/onboard/steps/proof.js.map +1 -0
- package/dist/src/onboard/steps/ssh.js +300 -0
- package/dist/src/onboard/steps/ssh.js.map +1 -0
- package/dist/src/onboard/steps/topology.js +291 -0
- package/dist/src/onboard/steps/topology.js.map +1 -0
- package/dist/src/onboard/steps/transport.js +519 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/tuiroute.js +102 -0
- package/dist/src/onboard/steps/tuiroute.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +378 -0
- package/dist/src/onboard/steps/verifyup.js.map +1 -0
- package/dist/src/onboard/steps/vmdeploy.js +368 -0
- package/dist/src/onboard/steps/vmdeploy.js.map +1 -0
- package/dist/src/onboard/toml.js +53 -0
- package/dist/src/onboard/toml.js.map +1 -0
- package/dist/src/onboard/toolnames.js +30 -0
- package/dist/src/onboard/toolnames.js.map +1 -0
- package/dist/src/opencli.js +508 -0
- package/dist/src/opencli.js.map +1 -0
- package/dist/src/openpr.js +457 -0
- package/dist/src/openpr.js.map +1 -0
- package/dist/src/openviking/client.js +821 -0
- package/dist/src/openviking/client.js.map +1 -0
- package/dist/src/openviking/context.js +218 -0
- package/dist/src/openviking/context.js.map +1 -0
- package/dist/src/openviking/embedder.js +457 -0
- package/dist/src/openviking/embedder.js.map +1 -0
- package/dist/src/openviking/gapsink.js +38 -0
- package/dist/src/openviking/gapsink.js.map +1 -0
- package/dist/src/openviking/health.js +69 -0
- package/dist/src/openviking/health.js.map +1 -0
- package/dist/src/openviking/index.js +24 -0
- package/dist/src/openviking/index.js.map +1 -0
- package/dist/src/openviking/lessonfind.js +54 -0
- package/dist/src/openviking/lessonfind.js.map +1 -0
- package/dist/src/openviking/probe.js +89 -0
- package/dist/src/openviking/probe.js.map +1 -0
- package/dist/src/openviking/proc.js +95 -0
- package/dist/src/openviking/proc.js.map +1 -0
- package/dist/src/openviking/provisionreport.js +144 -0
- package/dist/src/openviking/provisionreport.js.map +1 -0
- package/dist/src/openviking/reembed.js +317 -0
- package/dist/src/openviking/reembed.js.map +1 -0
- package/dist/src/openviking/relayout.js +153 -0
- package/dist/src/openviking/relayout.js.map +1 -0
- package/dist/src/openviking/sidecar-main.js +39 -0
- package/dist/src/openviking/sidecar-main.js.map +1 -0
- package/dist/src/openviking/sidecar.js +79 -0
- package/dist/src/openviking/sidecar.js.map +1 -0
- package/dist/src/openviking/store.js +1758 -0
- package/dist/src/openviking/store.js.map +1 -0
- package/dist/src/openviking/supervisor.js +422 -0
- package/dist/src/openviking/supervisor.js.map +1 -0
- package/dist/src/openviking/types.js +5 -0
- package/dist/src/openviking/types.js.map +1 -0
- package/dist/src/operator-recovery.js +172 -0
- package/dist/src/operator-recovery.js.map +1 -0
- package/dist/src/operatormessage.js +44 -0
- package/dist/src/operatormessage.js.map +1 -0
- package/dist/src/operatorwrite.js +23 -0
- package/dist/src/operatorwrite.js.map +1 -0
- package/dist/src/outcomes.js +1364 -0
- package/dist/src/outcomes.js.map +1 -0
- package/dist/src/piauthcopy.js +5 -0
- package/dist/src/piauthcopy.js.map +1 -0
- package/dist/src/picli.js +45 -0
- package/dist/src/picli.js.map +1 -0
- package/dist/src/picwd.js +25 -0
- package/dist/src/picwd.js.map +1 -0
- package/dist/src/pilogin.js +35 -0
- package/dist/src/pilogin.js.map +1 -0
- package/dist/src/pingpong.js +1028 -0
- package/dist/src/pingpong.js.map +1 -0
- package/dist/src/posting-journal.js +442 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +666 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +216 -0
- package/dist/src/posting-receipt.js.map +1 -0
- package/dist/src/posting.js +348 -0
- package/dist/src/posting.js.map +1 -0
- package/dist/src/postops.js +637 -0
- package/dist/src/postops.js.map +1 -0
- package/dist/src/pr-activity.js +11 -0
- package/dist/src/pr-activity.js.map +1 -0
- package/dist/src/pr-author.js +5 -0
- package/dist/src/pr-author.js.map +1 -0
- package/dist/src/pr-conversation.js +355 -0
- package/dist/src/pr-conversation.js.map +1 -0
- package/dist/src/pr-session-lifecycle.js +542 -0
- package/dist/src/pr-session-lifecycle.js.map +1 -0
- package/dist/src/preflight.js +341 -0
- package/dist/src/preflight.js.map +1 -0
- package/dist/src/priorresolve.js +275 -0
- package/dist/src/priorresolve.js.map +1 -0
- package/dist/src/qcrbin.js +180 -0
- package/dist/src/qcrbin.js.map +1 -0
- package/dist/src/recheck.js +1399 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +840 -0
- package/dist/src/reconcile.js.map +1 -0
- package/dist/src/recordedfindings.js +15 -0
- package/dist/src/recordedfindings.js.map +1 -0
- package/dist/src/regression.js +546 -0
- package/dist/src/regression.js.map +1 -0
- package/dist/src/replay.js +598 -0
- package/dist/src/replay.js.map +1 -0
- package/dist/src/requiredpasses.js +113 -0
- package/dist/src/requiredpasses.js.map +1 -0
- package/dist/src/resumecheck.js +168 -0
- package/dist/src/resumecheck.js.map +1 -0
- package/dist/src/reviewcli.js +671 -0
- package/dist/src/reviewcli.js.map +1 -0
- package/dist/src/reviewcontext.js +22 -0
- package/dist/src/reviewcontext.js.map +1 -0
- package/dist/src/reviewdetach.js +574 -0
- package/dist/src/reviewdetach.js.map +1 -0
- package/dist/src/reviewhistory.js +310 -0
- package/dist/src/reviewhistory.js.map +1 -0
- package/dist/src/reviewhome.js +26 -0
- package/dist/src/reviewhome.js.map +1 -0
- package/dist/src/reviewmemory.js +110 -0
- package/dist/src/reviewmemory.js.map +1 -0
- package/dist/src/reviewnow.js +45 -0
- package/dist/src/reviewnow.js.map +1 -0
- package/dist/src/reviewrendercli.js +104 -0
- package/dist/src/reviewrendercli.js.map +1 -0
- package/dist/src/round-work.js +20 -0
- package/dist/src/round-work.js.map +1 -0
- package/dist/src/runhost.js +72 -0
- package/dist/src/runhost.js.map +1 -0
- package/dist/src/scanauth.js +25 -0
- package/dist/src/scanauth.js.map +1 -0
- package/dist/src/scanbox.js +846 -0
- package/dist/src/scanbox.js.map +1 -0
- package/dist/src/scancli.js +1074 -0
- package/dist/src/scancli.js.map +1 -0
- package/dist/src/scandriverlog.js +30 -0
- package/dist/src/scandriverlog.js.map +1 -0
- package/dist/src/session-bridge.js +75 -0
- package/dist/src/session-bridge.js.map +1 -0
- package/dist/src/session-command-payload.js +29 -0
- package/dist/src/session-command-payload.js.map +1 -0
- package/dist/src/session-command-supervisor.js +939 -0
- package/dist/src/session-command-supervisor.js.map +1 -0
- package/dist/src/sessionjsonl.js +85 -0
- package/dist/src/sessionjsonl.js.map +1 -0
- package/dist/src/sessions.js +541 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup/adapters.js +330 -0
- package/dist/src/setup/adapters.js.map +1 -0
- package/dist/src/setup/baselines.js +64 -0
- package/dist/src/setup/baselines.js.map +1 -0
- package/dist/src/setup/caserunner.js +554 -0
- package/dist/src/setup/caserunner.js.map +1 -0
- package/dist/src/setup/configcommit.js +358 -0
- package/dist/src/setup/configcommit.js.map +1 -0
- package/dist/src/setup/engine.js +672 -0
- package/dist/src/setup/engine.js.map +1 -0
- package/dist/src/setup/facts.js +593 -0
- package/dist/src/setup/facts.js.map +1 -0
- package/dist/src/setup/findings.js +948 -0
- package/dist/src/setup/findings.js.map +1 -0
- package/dist/src/setup/history.js +338 -0
- package/dist/src/setup/history.js.map +1 -0
- package/dist/src/setup/interview.js +185 -0
- package/dist/src/setup/interview.js.map +1 -0
- package/dist/src/setup/ledger.js +207 -0
- package/dist/src/setup/ledger.js.map +1 -0
- package/dist/src/setup/pins.js +43 -0
- package/dist/src/setup/pins.js.map +1 -0
- package/dist/src/setup/portrait.js +432 -0
- package/dist/src/setup/portrait.js.map +1 -0
- package/dist/src/setup/presentation.js +9 -0
- package/dist/src/setup/presentation.js.map +1 -0
- package/dist/src/setup/profile.js +417 -0
- package/dist/src/setup/profile.js.map +1 -0
- package/dist/src/setup/replay.js +240 -0
- package/dist/src/setup/replay.js.map +1 -0
- package/dist/src/setup/replaybuild.js +311 -0
- package/dist/src/setup/replaybuild.js.map +1 -0
- package/dist/src/setup/replayrun.js +806 -0
- package/dist/src/setup/replayrun.js.map +1 -0
- package/dist/src/setup/replaysource.js +169 -0
- package/dist/src/setup/replaysource.js.map +1 -0
- package/dist/src/setup/retune.js +333 -0
- package/dist/src/setup/retune.js.map +1 -0
- package/dist/src/setup/retunelog.js +51 -0
- package/dist/src/setup/retunelog.js.map +1 -0
- package/dist/src/setup/scan.js +725 -0
- package/dist/src/setup/scan.js.map +1 -0
- package/dist/src/setup/scanbuild.js +133 -0
- package/dist/src/setup/scanbuild.js.map +1 -0
- package/dist/src/setup/scanfacts.js +96 -0
- package/dist/src/setup/scanfacts.js.map +1 -0
- package/dist/src/setup/scanlease.js +251 -0
- package/dist/src/setup/scanlease.js.map +1 -0
- package/dist/src/setup/scanreport.js +289 -0
- package/dist/src/setup/scanreport.js.map +1 -0
- package/dist/src/setup/scanrun.js +1733 -0
- package/dist/src/setup/scanrun.js.map +1 -0
- package/dist/src/setup/scantree.js +257 -0
- package/dist/src/setup/scantree.js.map +1 -0
- package/dist/src/setup/stage2.js +617 -0
- package/dist/src/setup/stage2.js.map +1 -0
- package/dist/src/setup/stage2request.js +259 -0
- package/dist/src/setup/stage2request.js.map +1 -0
- package/dist/src/setup/survey.js +307 -0
- package/dist/src/setup/survey.js.map +1 -0
- package/dist/src/setup/surveyrun.js +549 -0
- package/dist/src/setup/surveyrun.js.map +1 -0
- package/dist/src/setup/textsniff.js +89 -0
- package/dist/src/setup/textsniff.js.map +1 -0
- package/dist/src/setup/trackersink.js +395 -0
- package/dist/src/setup/trackersink.js.map +1 -0
- package/dist/src/setup/triage.js +636 -0
- package/dist/src/setup/triage.js.map +1 -0
- package/dist/src/setup/tuning.js +585 -0
- package/dist/src/setup/tuning.js.map +1 -0
- package/dist/src/setup/unitcut.js +437 -0
- package/dist/src/setup/unitcut.js.map +1 -0
- package/dist/src/singleflight.js +72 -0
- package/dist/src/singleflight.js.map +1 -0
- package/dist/src/slack/announce.js +725 -0
- package/dist/src/slack/announce.js.map +1 -0
- package/dist/src/slack/api.js +227 -0
- package/dist/src/slack/api.js.map +1 -0
- package/dist/src/slack/messages.js +158 -0
- package/dist/src/slack/messages.js.map +1 -0
- package/dist/src/slack/origin.js +550 -0
- package/dist/src/slack/origin.js.map +1 -0
- package/dist/src/slack/policy.js +225 -0
- package/dist/src/slack/policy.js.map +1 -0
- package/dist/src/slack/reply.js +153 -0
- package/dist/src/slack/reply.js.map +1 -0
- package/dist/src/slack/router.js +189 -0
- package/dist/src/slack/router.js.map +1 -0
- package/dist/src/slack/socket.js +323 -0
- package/dist/src/slack/socket.js.map +1 -0
- package/dist/src/slack/types.js +11 -0
- package/dist/src/slack/types.js.map +1 -0
- package/dist/src/sqlitehint.js +30 -0
- package/dist/src/sqlitehint.js.map +1 -0
- package/dist/src/ssh-observation.js +25 -0
- package/dist/src/ssh-observation.js.map +1 -0
- package/dist/src/state.js +5869 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/statemachine.js +223 -0
- package/dist/src/statemachine.js.map +1 -0
- package/dist/src/stubs.js +52 -0
- package/dist/src/stubs.js.map +1 -0
- package/dist/src/takeover.js +506 -0
- package/dist/src/takeover.js.map +1 -0
- package/dist/src/takeoverpi.js +262 -0
- package/dist/src/takeoverpi.js.map +1 -0
- package/dist/src/terminal-failure.js +26 -0
- package/dist/src/terminal-failure.js.map +1 -0
- package/dist/src/thread-resolution-refusal.js +4 -0
- package/dist/src/thread-resolution-refusal.js.map +1 -0
- package/dist/src/tmux.js +126 -0
- package/dist/src/tmux.js.map +1 -0
- package/dist/src/trackerid.js +43 -0
- package/dist/src/trackerid.js.map +1 -0
- package/dist/src/transcriptindex.js +512 -0
- package/dist/src/transcriptindex.js.map +1 -0
- package/dist/src/tui/actions.js +404 -0
- package/dist/src/tui/actions.js.map +1 -0
- package/dist/src/tui/alerts.js +523 -0
- package/dist/src/tui/alerts.js.map +1 -0
- package/dist/src/tui/app.js +1884 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/archiveops.js +164 -0
- package/dist/src/tui/archiveops.js.map +1 -0
- package/dist/src/tui/autofile.js +191 -0
- package/dist/src/tui/autofile.js.map +1 -0
- package/dist/src/tui/board.js +1219 -0
- package/dist/src/tui/board.js.map +1 -0
- package/dist/src/tui/candidates.js +699 -0
- package/dist/src/tui/candidates.js.map +1 -0
- package/dist/src/tui/cellwidth.js +151 -0
- package/dist/src/tui/cellwidth.js.map +1 -0
- package/dist/src/tui/changelog-store.js +404 -0
- package/dist/src/tui/changelog-store.js.map +1 -0
- package/dist/src/tui/chord.js +26 -0
- package/dist/src/tui/chord.js.map +1 -0
- package/dist/src/tui/clipboard.js +81 -0
- package/dist/src/tui/clipboard.js.map +1 -0
- package/dist/src/tui/cmdbar.js +256 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1339 -0
- package/dist/src/tui/companion.js.map +1 -0
- package/dist/src/tui/companionplan.js +200 -0
- package/dist/src/tui/companionplan.js.map +1 -0
- package/dist/src/tui/companiontab.js +61 -0
- package/dist/src/tui/companiontab.js.map +1 -0
- package/dist/src/tui/confighome.js +105 -0
- package/dist/src/tui/confighome.js.map +1 -0
- package/dist/src/tui/connect.js +50 -0
- package/dist/src/tui/connect.js.map +1 -0
- package/dist/src/tui/deploy-ceremony.js +75 -0
- package/dist/src/tui/deploy-ceremony.js.map +1 -0
- package/dist/src/tui/deploy-drain.js +93 -0
- package/dist/src/tui/deploy-drain.js.map +1 -0
- package/dist/src/tui/deploy-process.js +234 -0
- package/dist/src/tui/deploy-process.js.map +1 -0
- package/dist/src/tui/deploytab.js +1263 -0
- package/dist/src/tui/deploytab.js.map +1 -0
- package/dist/src/tui/design.js +111 -0
- package/dist/src/tui/design.js.map +1 -0
- package/dist/src/tui/digesttab.js +148 -0
- package/dist/src/tui/digesttab.js.map +1 -0
- package/dist/src/tui/emptystate.js +32 -0
- package/dist/src/tui/emptystate.js.map +1 -0
- package/dist/src/tui/evidence.js +790 -0
- package/dist/src/tui/evidence.js.map +1 -0
- package/dist/src/tui/feed.js +415 -0
- package/dist/src/tui/feed.js.map +1 -0
- package/dist/src/tui/feedbacktab.js +907 -0
- package/dist/src/tui/feedbacktab.js.map +1 -0
- package/dist/src/tui/filters.js +75 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +328 -0
- package/dist/src/tui/ghread.js.map +1 -0
- package/dist/src/tui/historypull.js +61 -0
- package/dist/src/tui/historypull.js.map +1 -0
- package/dist/src/tui/inboxpull.js +197 -0
- package/dist/src/tui/inboxpull.js.map +1 -0
- package/dist/src/tui/index.js +1511 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/issuesink.js +206 -0
- package/dist/src/tui/issuesink.js.map +1 -0
- package/dist/src/tui/jsonfile.js +32 -0
- package/dist/src/tui/jsonfile.js.map +1 -0
- package/dist/src/tui/keys.js +97 -0
- package/dist/src/tui/keys.js.map +1 -0
- package/dist/src/tui/layout.js +70 -0
- package/dist/src/tui/layout.js.map +1 -0
- package/dist/src/tui/learning.js +469 -0
- package/dist/src/tui/learning.js.map +1 -0
- package/dist/src/tui/lessonswitch.js +103 -0
- package/dist/src/tui/lessonswitch.js.map +1 -0
- package/dist/src/tui/livecontrol.js +167 -0
- package/dist/src/tui/livecontrol.js.map +1 -0
- package/dist/src/tui/memforward.js +347 -0
- package/dist/src/tui/memforward.js.map +1 -0
- package/dist/src/tui/memincident.js +287 -0
- package/dist/src/tui/memincident.js.map +1 -0
- package/dist/src/tui/memory.js +485 -0
- package/dist/src/tui/memory.js.map +1 -0
- package/dist/src/tui/memtab.js +513 -0
- package/dist/src/tui/memtab.js.map +1 -0
- package/dist/src/tui/metricstab.js +979 -0
- package/dist/src/tui/metricstab.js.map +1 -0
- package/dist/src/tui/model.js +129 -0
- package/dist/src/tui/model.js.map +1 -0
- package/dist/src/tui/mouse.js +83 -0
- package/dist/src/tui/mouse.js.map +1 -0
- package/dist/src/tui/msg.js +196 -0
- package/dist/src/tui/msg.js.map +1 -0
- package/dist/src/tui/nativecompanion.js +321 -0
- package/dist/src/tui/nativecompanion.js.map +1 -0
- package/dist/src/tui/openurl.js +17 -0
- package/dist/src/tui/openurl.js.map +1 -0
- package/dist/src/tui/paint.js +501 -0
- package/dist/src/tui/paint.js.map +1 -0
- package/dist/src/tui/panes.js +74 -0
- package/dist/src/tui/panes.js.map +1 -0
- package/dist/src/tui/pipane.js +166 -0
- package/dist/src/tui/pipane.js.map +1 -0
- package/dist/src/tui/poll-hooks.js +11 -0
- package/dist/src/tui/poll-hooks.js.map +1 -0
- package/dist/src/tui/poll.js +113 -0
- package/dist/src/tui/poll.js.map +1 -0
- package/dist/src/tui/proposals.js +715 -0
- package/dist/src/tui/proposals.js.map +1 -0
- package/dist/src/tui/prpause.js +139 -0
- package/dist/src/tui/prpause.js.map +1 -0
- package/dist/src/tui/reload.js +351 -0
- package/dist/src/tui/reload.js.map +1 -0
- package/dist/src/tui/remote.js +318 -0
- package/dist/src/tui/remote.js.map +1 -0
- package/dist/src/tui/rollover.js +767 -0
- package/dist/src/tui/rollover.js.map +1 -0
- package/dist/src/tui/route.js +143 -0
- package/dist/src/tui/route.js.map +1 -0
- package/dist/src/tui/scantab.js +1053 -0
- package/dist/src/tui/scantab.js.map +1 -0
- package/dist/src/tui/setupentry.js +81 -0
- package/dist/src/tui/setupentry.js.map +1 -0
- package/dist/src/tui/setupstate.js +29 -0
- package/dist/src/tui/setupstate.js.map +1 -0
- package/dist/src/tui/sidebar.js +602 -0
- package/dist/src/tui/sidebar.js.map +1 -0
- package/dist/src/tui/sshtriage.js +490 -0
- package/dist/src/tui/sshtriage.js.map +1 -0
- package/dist/src/tui/startup.js +172 -0
- package/dist/src/tui/startup.js.map +1 -0
- package/dist/src/tui/tabs.js +41 -0
- package/dist/src/tui/tabs.js.map +1 -0
- package/dist/src/tui/termmirror.js +217 -0
- package/dist/src/tui/termmirror.js.map +1 -0
- package/dist/src/tui/theme.js +96 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/ticketstab.js +224 -0
- package/dist/src/tui/ticketstab.js.map +1 -0
- package/dist/src/tui/tmuxsocket.js +101 -0
- package/dist/src/tui/tmuxsocket.js.map +1 -0
- package/dist/src/tui/trackertickets.js +77 -0
- package/dist/src/tui/trackertickets.js.map +1 -0
- package/dist/src/tui/unwedge.js +235 -0
- package/dist/src/tui/unwedge.js.map +1 -0
- package/dist/src/tui/viewer.js +479 -0
- package/dist/src/tui/viewer.js.map +1 -0
- package/dist/src/tui/viewerinput.js +125 -0
- package/dist/src/tui/viewerinput.js.map +1 -0
- package/dist/src/updatenotice.js +143 -0
- package/dist/src/updatenotice.js.map +1 -0
- package/dist/src/usage.js +1007 -0
- package/dist/src/usage.js.map +1 -0
- package/dist/src/verdicts.js +3860 -0
- package/dist/src/verdicts.js.map +1 -0
- package/dist/src/version.js +58 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/wakes.js +411 -0
- package/dist/src/wakes.js.map +1 -0
- package/dist/src/webhook.js +736 -0
- package/dist/src/webhook.js.map +1 -0
- package/dist/src/webhookheal.js +238 -0
- package/dist/src/webhookheal.js.map +1 -0
- package/dist/src/wire.js +1823 -0
- package/dist/src/wire.js.map +1 -0
- package/dist/src/worker-session-host.js +531 -0
- package/dist/src/worker-session-host.js.map +1 -0
- package/dist/src/workerbreaker.js +112 -0
- package/dist/src/workerbreaker.js.map +1 -0
- package/dist/src/workercontrol.js +49 -0
- package/dist/src/workercontrol.js.map +1 -0
- package/dist/src/workerlease.js +351 -0
- package/dist/src/workerlease.js.map +1 -0
- package/dist/src/workerliveness.js +84 -0
- package/dist/src/workerliveness.js.map +1 -0
- package/dist/src/workerlog.js +65 -0
- package/dist/src/workerlog.js.map +1 -0
- package/dist/src/workerruntime.js +10 -0
- package/dist/src/workerruntime.js.map +1 -0
- package/dist/src/workersupervisor.js +1206 -0
- package/dist/src/workersupervisor.js.map +1 -0
- package/dist/src/workerusage.js +23 -0
- package/dist/src/workerusage.js.map +1 -0
- package/dist/src/workerworld.js +338 -0
- package/dist/src/workerworld.js.map +1 -0
- package/dist/src/worktrees.js +984 -0
- package/dist/src/worktrees.js.map +1 -0
- package/docker/Dockerfile +284 -0
- package/docker/Dockerfile.dockerignore +35 -0
- package/docker/README.md +221 -0
- package/docker/companion/Dockerfile +139 -0
- package/docker/companion/agents/evidence.md +34 -0
- package/docker/companion/agents/explore.md +26 -0
- package/docker/companion/agents/pass-survey.md +49 -0
- package/docker/companion/agents/study.md +26 -0
- package/docker/companion/entrypoint.sh +362 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +799 -0
- package/docker/memory/Dockerfile +191 -0
- package/docker/memory/Dockerfile.dockerignore +20 -0
- package/docker/memory/README.md +60 -0
- package/docker/memory/entrypoint.sh +163 -0
- package/docker/setid/qcr-setid.c +109 -0
- package/docker/tunnel/Dockerfile.cloudflared +51 -0
- package/docker/tunnel/Dockerfile.ngrok +40 -0
- package/docker/tunnel/sidecar.mjs +411 -0
- package/docker/vm/tmux.conf +26 -0
- package/docker-compose.yml +348 -0
- package/extensions/cli/bash-guard-ambient.ts +71 -0
- package/extensions/cli/bash-guard.ts +12 -0
- package/extensions/cli/companion-guard.ts +8 -0
- package/extensions/cli/debug-round.ts +9 -0
- package/extensions/cli/inject-bridge.ts +8 -0
- package/extensions/cli/ledger-pin.ts +13 -0
- package/extensions/cli/lens.ts +22 -0
- package/extensions/cli/login-route.ts +10 -0
- package/extensions/cli/muted-theme.ts +9 -0
- package/extensions/cli/onboarding.ts +8 -0
- package/extensions/cli/setup.ts +8 -0
- package/extensions/cli/tui-view.ts +8 -0
- package/extensions/companion-guard.ts +411 -0
- package/extensions/debug-round.ts +281 -0
- package/extensions/inject-bridge.ts +630 -0
- package/extensions/inline-bash.ts +102 -0
- package/extensions/login-route.ts +220 -0
- package/extensions/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +262 -0
- package/extensions/setup-replay.ts +336 -0
- package/extensions/setup-scan.ts +1236 -0
- package/extensions/setup-triage.ts +190 -0
- package/extensions/setup.ts +1428 -0
- package/extensions/tui-view.ts +489 -0
- package/extensions/vendor/openviking-pi/LICENSE +201 -0
- package/extensions/vendor/openviking-pi/NOTICE +68 -0
- package/extensions/vendor/openviking-pi/README.md +550 -0
- package/extensions/vendor/openviking-pi/client.ts +588 -0
- package/extensions/vendor/openviking-pi/config.json +28 -0
- package/extensions/vendor/openviking-pi/config.ts +271 -0
- package/extensions/vendor/openviking-pi/index.ts +523 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.d.mts +10 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +88 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.d.mts +80 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.mjs +406 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.d.mts +1 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +42 -0
- package/extensions/vendor/openviking-pi/patches/0000-vendoring-and-build-conformance.patch +726 -0
- package/extensions/vendor/openviking-pi/patches/0001-remove-session-before-compact-handler.patch +101 -0
- package/extensions/vendor/openviking-pi/patches/0002-no-ambient-work-in-subagent-leaves.patch +202 -0
- package/extensions/vendor/openviking-pi/patches/0003-never-auto-create-openviking-sessions.patch +120 -0
- package/extensions/vendor/openviking-pi/patches/0004-viking-write-durable-batch-write.patch +521 -0
- package/extensions/vendor/openviking-pi/patches/0005-second-memory-namespace.patch +786 -0
- package/extensions/vendor/openviking-pi/patches/0006-writes-that-stick-and-honest-errors.patch +996 -0
- package/extensions/vendor/openviking-pi/patches/0007-bounded-recall-no-commit.patch +794 -0
- package/extensions/vendor/openviking-pi/patches/0008-pr-derived-recall.patch +379 -0
- package/extensions/vendor/openviking-pi/patches/0009-pr-session-tools-in-round-areas.patch +375 -0
- package/extensions/vendor/openviking-pi/patches/0010-typed-lessons.patch +448 -0
- package/extensions/vendor/openviking-pi/patches/0011-review-session-memory-boundary.patch +382 -0
- package/extensions/vendor/openviking-pi/patches/0012-typecheck-against-the-real-pi.patch +129 -0
- package/extensions/vendor/openviking-pi/patches/0013-createopenviking-factory.patch +1168 -0
- package/extensions/vendor/openviking-pi/qcr-hint.ts +313 -0
- package/extensions/vendor/openviking-pi/qcr-honest.ts +183 -0
- package/extensions/vendor/openviking-pi/qcr-hooks.ts +87 -0
- package/extensions/vendor/openviking-pi/qcr-leaf.ts +78 -0
- package/extensions/vendor/openviking-pi/qcr-lesson.ts +231 -0
- package/extensions/vendor/openviking-pi/qcr-namespaces.ts +198 -0
- package/extensions/vendor/openviking-pi/qcr-recall.ts +288 -0
- package/extensions/vendor/openviking-pi/qcr-shim.ts +142 -0
- package/extensions/vendor/openviking-pi/qcr-write.ts +427 -0
- package/extensions/vendor/openviking-pi/recall.ts +149 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.d.mts +9 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.mjs +515 -0
- package/extensions/vendor/openviking-pi/shared/credentials.d.mts +14 -0
- package/extensions/vendor/openviking-pi/shared/credentials.mjs +228 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.d.mts +19 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.mjs +458 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.d.mts +17 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.mjs +294 -0
- package/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +195 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.d.mts +13 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.mjs +609 -0
- package/extensions/vendor/openviking-pi/shared/retryable.mjs +9 -0
- package/extensions/vendor/openviking-pi/shared/session-model.d.mts +3 -0
- package/extensions/vendor/openviking-pi/shared/session-model.mjs +57 -0
- package/extensions/vendor/openviking-pi/shared/uri-guard.mjs +56 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.d.mts +5 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/extensions/vendor/openviking-pi/sync.ts +163 -0
- package/extensions/vendor/openviking-pi/takeover.ts +36 -0
- package/extensions/vendor/openviking-pi/tools.ts +479 -0
- package/extensions/vendor/openviking-pi/upstream.json +48 -0
- package/package.json +138 -4
- package/profiles/default/README.md +21 -0
- package/profiles/default/addenda/.gitkeep +0 -0
- package/profiles/default/profile.toml +17 -0
- package/profiles/example-django/README.md +21 -0
- package/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/profiles/example-django/heuristics.toml +24 -0
- package/profiles/example-django/profile.toml +9 -0
- package/profiles/fast/README.md +24 -0
- package/profiles/fast/profile.toml +59 -0
- package/profiles/minimal/README.md +17 -0
- package/profiles/minimal/addenda/.gitkeep +0 -0
- package/profiles/minimal/profile.toml +8 -0
- package/profiles/snappy/README.md +24 -0
- package/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/profiles/snappy/profile.toml +46 -0
- package/prompts/companion-day-open.md +46 -0
- package/prompts/companion-first-run.md +104 -0
- package/prompts/companion.md +821 -0
- package/prompts/conversation-system.md +117 -0
- package/prompts/eod-sweep.md +120 -0
- package/prompts/onboarding.md +113 -0
- package/prompts/pass-common.md +52 -0
- package/prompts/pass-quality-common.md +22 -0
- package/prompts/round-first.md +874 -0
- package/prompts/round-follow-up.md +991 -0
- package/prompts/round-re-review.md +889 -0
- package/prompts/round-recheck.md +196 -0
- package/prompts/round-staleness.md +856 -0
- package/schemas/review-result.v1.json +391 -0
- package/schemas/scan-result.v1.json +421 -0
- package/schemas/version.v1.json +57 -0
- package/scripts/approve-pr.sh +16 -0
- package/scripts/build-stamp.mjs +67 -0
- package/scripts/commit-verdict.sh +155 -0
- package/scripts/companion-e2e.sh +250 -0
- package/scripts/companion-memory-forward.mjs +1966 -0
- package/scripts/config-fingerprint.sh +28 -0
- package/scripts/deploy-manifest.mjs +141 -0
- package/scripts/deploy.sh +1435 -0
- package/scripts/directory-lock.mjs +193 -0
- package/scripts/heartbeat-fresh.mjs +54 -0
- package/scripts/install-locator.sh +328 -0
- package/scripts/install-wrapper.sh +76 -0
- package/scripts/memory-search-check.mjs +98 -0
- package/scripts/mint-token.sh +233 -0
- package/scripts/openviking-embedder.py +392 -0
- package/scripts/openviking-ov-conf.mjs +161 -0
- package/scripts/openviking-provision.mjs +1122 -0
- package/scripts/openviking-reembed.mjs +1154 -0
- package/scripts/post-review.sh +16 -0
- package/scripts/pr-checks.sh +256 -0
- package/scripts/pr-context.py +174 -0
- package/scripts/pr-context.sh +63 -0
- package/scripts/pr-self.sh +144 -0
- package/scripts/pr-threads.sh +145 -0
- package/scripts/qcr +15 -0
- package/scripts/qcr-host.sh +769 -0
- package/scripts/render-review.sh +24 -0
- package/scripts/reply-thread.sh +16 -0
- package/scripts/required-passes.py +112 -0
- package/scripts/smoke-companion.sh +211 -0
- package/scripts/tui-deploy-runner.mjs +61 -0
- package/scripts/verify-dist.mjs +201 -0
- package/scripts/vm-ghcr-login.sh +188 -0
- package/seeds/agents/pass-baseline.md +61 -0
- package/seeds/agents/pass-contracts.md +30 -0
- package/seeds/agents/pass-data-safety.md +54 -0
- package/seeds/agents/pass-delivery.md +37 -0
- package/seeds/agents/pass-prod-risk.md +24 -0
- package/seeds/agents/pass-security.md +31 -0
- package/seeds/agents/pass-statelessness.md +27 -0
- package/seeds/agents/pass-ui.md +23 -0
- package/seeds/agents/pass-validate.md +50 -0
- package/seeds/prompts/conversation-system.md +117 -0
- package/seeds/prompts/eod-sweep.md +120 -0
- package/seeds/prompts/pass-common.md +52 -0
- package/skills/companion/adjudicate/SKILL.md +247 -0
- package/skills/companion/evidence/SKILL.md +150 -0
- package/skills/companion/land/SKILL.md +200 -0
- package/skills/companion/replay/SKILL.md +138 -0
- package/skills/companion/setup/SKILL.md +167 -0
- package/skills/companion/survey/SKILL.md +160 -0
- package/skills/selfimprove/README.md +34 -0
- package/skills/selfimprove/SKILL.md +127 -0
- package/skills/selfimprove/agents/openai.yaml +2 -0
- package/skills/selfimprove/commands/selfimprove.md +6 -0
- package/skills/selfimprove/references/fix-loop.md +49 -0
- package/skills/selfimprove/references/ledger.md +20 -0
- package/skills/selfimprove/references/setup.md +40 -0
- package/src/anomalies.ts +566 -0
- package/src/answerworker.ts +251 -0
- package/src/appstamp.ts +65 -0
- package/src/archive/admission.ts +3 -0
- package/src/archive/archivedb.ts +548 -0
- package/src/archive/archiver.ts +1963 -0
- package/src/archive/archivewrite.ts +279 -0
- package/src/archive/bundle.ts +333 -0
- package/src/archive/dbmove.ts +911 -0
- package/src/archive/duplicatecounts.ts +98 -0
- package/src/archive/eligibility.ts +181 -0
- package/src/archive/extract.ts +342 -0
- package/src/archive/fsutil.ts +415 -0
- package/src/archive/gzfile.ts +370 -0
- package/src/archive/kinds.ts +21 -0
- package/src/archive/livecheckpoint.ts +217 -0
- package/src/archive/liveretention.ts +180 -0
- package/src/archive/manifest.ts +519 -0
- package/src/archive/overseer.ts +336 -0
- package/src/archive/piglobal.ts +174 -0
- package/src/archive/plan.ts +612 -0
- package/src/archive/prarchive.ts +984 -0
- package/src/archive/prfiles.ts +406 -0
- package/src/archive/report.ts +252 -0
- package/src/archive/restore.ts +330 -0
- package/src/archive/rows.ts +187 -0
- package/src/archive/seal.ts +630 -0
- package/src/archive/status.ts +719 -0
- package/src/archive/storepass.ts +581 -0
- package/src/backfill.ts +362 -0
- package/src/bench/cost.ts +113 -0
- package/src/bench/exec.ts +90 -0
- package/src/bench/values.ts +13 -0
- package/src/botcontrol.ts +176 -0
- package/src/botworker.ts +953 -0
- package/src/capture.ts +321 -0
- package/src/cases.ts +1789 -0
- package/src/channelfs.ts +26 -0
- package/src/checklist.ts +506 -0
- package/src/ciretry.ts +142 -0
- package/src/cli.ts +2306 -0
- package/src/cliops.ts +385 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1704 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2070 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1327 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +272 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2251 -0
- package/src/engine/answerguard.ts +27 -0
- package/src/engine/botsdk.ts +336 -0
- package/src/engine/caserunner-sdk.ts +423 -0
- package/src/engine/debugpi.ts +247 -0
- package/src/eod.ts +669 -0
- package/src/eodpinwatch.ts +556 -0
- package/src/escalation.ts +1253 -0
- package/src/eventloop.ts +1045 -0
- package/src/execboundary.ts +645 -0
- package/src/feedback.ts +1162 -0
- package/src/findingscheck.ts +298 -0
- package/src/fsdenied.ts +24 -0
- package/src/ghread.ts +242 -0
- package/src/github.ts +1539 -0
- package/src/githubtoken.ts +435 -0
- package/src/homes.ts +175 -0
- package/src/hostroute.ts +53 -0
- package/src/improvements.ts +787 -0
- package/src/install.ts +1103 -0
- package/src/installkind.ts +50 -0
- package/src/ipc/capability.ts +333 -0
- package/src/ipc/client.ts +269 -0
- package/src/ipc/control.ts +90 -0
- package/src/ipc/ghreadshim.ts +94 -0
- package/src/ipc/launcher.ts +65 -0
- package/src/ipc/permits.ts +362 -0
- package/src/ipc/postshim.ts +164 -0
- package/src/ipc/protocol.ts +342 -0
- package/src/ipc/server.ts +371 -0
- package/src/ipc/workerspec.ts +218 -0
- package/src/learner/learner.ts +1655 -0
- package/src/learner/miner.ts +1290 -0
- package/src/learner/packet.ts +340 -0
- package/src/learner/receipt.ts +168 -0
- package/src/learner/status.ts +107 -0
- package/src/ledgercheck.ts +157 -0
- package/src/lessonledger.ts +703 -0
- package/src/lessonselect.ts +888 -0
- package/src/lessonshadow.ts +810 -0
- package/src/levers.ts +393 -0
- package/src/live/projection.ts +491 -0
- package/src/live/publish.ts +92 -0
- package/src/live/read.ts +86 -0
- package/src/livecli.ts +336 -0
- package/src/loginhint.ts +61 -0
- package/src/loginrefresh/atomic.ts +76 -0
- package/src/loginrefresh/lock.ts +104 -0
- package/src/loginrefresh/main.ts +59 -0
- package/src/loginrefresh/pirefresh.ts +60 -0
- package/src/loginrefresh/refresher.ts +326 -0
- package/src/loginrefresh/supervisor.ts +273 -0
- package/src/loginrefresh/types.ts +35 -0
- package/src/memory/context.ts +385 -0
- package/src/memory/datafence.ts +9 -0
- package/src/memory/delivery.ts +171 -0
- package/src/memory/eventtags.ts +80 -0
- package/src/memory/health.ts +953 -0
- package/src/memory/import.ts +664 -0
- package/src/memory/layout.ts +261 -0
- package/src/memory/legacy-file.ts +104 -0
- package/src/memory/lessons.ts +447 -0
- package/src/memory/ovsession.ts +601 -0
- package/src/memory/relayout.ts +335 -0
- package/src/memory/roundactivity.ts +209 -0
- package/src/memory/selection.ts +989 -0
- package/src/memory/shadowstatus.ts +125 -0
- package/src/memory/store.ts +275 -0
- package/src/memory/textidentity.ts +8 -0
- package/src/metrics.ts +1056 -0
- package/src/missingconfig.ts +7 -0
- package/src/npmverbs.ts +266 -0
- package/src/onboard/choices.ts +255 -0
- package/src/onboard/engine.ts +537 -0
- package/src/onboard/launch.ts +103 -0
- package/src/onboard/pipin.ts +31 -0
- package/src/onboard/stepforward.ts +61 -0
- package/src/onboard/steps/appslug.ts +268 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +490 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1440 -0
- package/src/onboard/steps/deploysh.ts +105 -0
- package/src/onboard/steps/embeddings.ts +550 -0
- package/src/onboard/steps/escalation.ts +640 -0
- package/src/onboard/steps/githubaccount.ts +716 -0
- package/src/onboard/steps/githubapp.ts +1498 -0
- package/src/onboard/steps/golive.ts +579 -0
- package/src/onboard/steps/index.ts +82 -0
- package/src/onboard/steps/ingress.ts +974 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1180 -0
- package/src/onboard/steps/memory.ts +1347 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +1042 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +338 -0
- package/src/onboard/steps/transport.ts +680 -0
- package/src/onboard/steps/tuiroute.ts +119 -0
- package/src/onboard/steps/verifyup.ts +467 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -0
- package/src/onboard/toolnames.ts +34 -0
- package/src/opencli.ts +591 -0
- package/src/openpr.ts +568 -0
- package/src/openviking/client.ts +1131 -0
- package/src/openviking/context.ts +263 -0
- package/src/openviking/embedder.ts +516 -0
- package/src/openviking/gapsink.ts +63 -0
- package/src/openviking/health.ts +83 -0
- package/src/openviking/index.ts +119 -0
- package/src/openviking/lessonfind.ts +92 -0
- package/src/openviking/probe.ts +129 -0
- package/src/openviking/proc.ts +110 -0
- package/src/openviking/provisionreport.ts +160 -0
- package/src/openviking/reembed.ts +412 -0
- package/src/openviking/relayout.ts +177 -0
- package/src/openviking/sidecar-main.ts +38 -0
- package/src/openviking/sidecar.ts +106 -0
- package/src/openviking/store.ts +2025 -0
- package/src/openviking/supervisor.ts +474 -0
- package/src/openviking/types.ts +174 -0
- package/src/operator-recovery.ts +237 -0
- package/src/operatormessage.ts +52 -0
- package/src/operatorwrite.ts +25 -0
- package/src/outcomes.ts +1677 -0
- package/src/piauthcopy.ts +12 -0
- package/src/picli.ts +49 -0
- package/src/picwd.ts +25 -0
- package/src/pilogin.ts +37 -0
- package/src/pingpong.ts +1339 -0
- package/src/posting-journal.ts +554 -0
- package/src/posting-outbox.ts +810 -0
- package/src/posting-receipt.ts +341 -0
- package/src/posting.ts +603 -0
- package/src/postops.ts +832 -0
- package/src/pr-activity.ts +20 -0
- package/src/pr-author.ts +6 -0
- package/src/pr-conversation.ts +432 -0
- package/src/pr-session-lifecycle.ts +631 -0
- package/src/preflight.ts +391 -0
- package/src/priorresolve.ts +343 -0
- package/src/qcrbin.ts +186 -0
- package/src/recheck.ts +1776 -0
- package/src/reconcile.ts +1056 -0
- package/src/recordedfindings.ts +27 -0
- package/src/regression.ts +833 -0
- package/src/replay.ts +816 -0
- package/src/requiredpasses.ts +148 -0
- package/src/resumecheck.ts +246 -0
- package/src/reviewcli.ts +787 -0
- package/src/reviewcontext.ts +35 -0
- package/src/reviewdetach.ts +734 -0
- package/src/reviewhistory.ts +441 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -0
- package/src/reviewnow.ts +76 -0
- package/src/reviewrendercli.ts +139 -0
- package/src/round-work.ts +42 -0
- package/src/runhost.ts +108 -0
- package/src/scanauth.ts +36 -0
- package/src/scanbox.ts +1081 -0
- package/src/scancli.ts +1296 -0
- package/src/scandriverlog.ts +32 -0
- package/src/session-bridge.ts +139 -0
- package/src/session-command-payload.ts +35 -0
- package/src/session-command-supervisor.ts +1142 -0
- package/src/sessionjsonl.ts +88 -0
- package/src/sessions.ts +659 -0
- package/src/setup/adapters.ts +335 -0
- package/src/setup/baselines.ts +110 -0
- package/src/setup/caserunner.ts +611 -0
- package/src/setup/configcommit.ts +443 -0
- package/src/setup/engine.ts +1001 -0
- package/src/setup/facts.ts +627 -0
- package/src/setup/findings.ts +1264 -0
- package/src/setup/history.ts +443 -0
- package/src/setup/interview.ts +243 -0
- package/src/setup/ledger.ts +324 -0
- package/src/setup/pins.ts +66 -0
- package/src/setup/portrait.ts +635 -0
- package/src/setup/presentation.ts +18 -0
- package/src/setup/profile.ts +508 -0
- package/src/setup/replay.ts +370 -0
- package/src/setup/replaybuild.ts +392 -0
- package/src/setup/replayrun.ts +1096 -0
- package/src/setup/replaysource.ts +198 -0
- package/src/setup/retune.ts +415 -0
- package/src/setup/retunelog.ts +95 -0
- package/src/setup/scan.ts +1033 -0
- package/src/setup/scanbuild.ts +168 -0
- package/src/setup/scanfacts.ts +107 -0
- package/src/setup/scanlease.ts +297 -0
- package/src/setup/scanreport.ts +373 -0
- package/src/setup/scanrun.ts +2268 -0
- package/src/setup/scantree.ts +259 -0
- package/src/setup/stage2.ts +926 -0
- package/src/setup/stage2request.ts +347 -0
- package/src/setup/survey.ts +458 -0
- package/src/setup/surveyrun.ts +758 -0
- package/src/setup/textsniff.ts +95 -0
- package/src/setup/trackersink.ts +433 -0
- package/src/setup/triage.ts +768 -0
- package/src/setup/tuning.ts +766 -0
- package/src/setup/unitcut.ts +523 -0
- package/src/singleflight.ts +86 -0
- package/src/slack/announce.ts +911 -0
- package/src/slack/api.ts +303 -0
- package/src/slack/messages.ts +288 -0
- package/src/slack/origin.ts +599 -0
- package/src/slack/policy.ts +354 -0
- package/src/slack/reply.ts +201 -0
- package/src/slack/router.ts +285 -0
- package/src/slack/socket.ts +384 -0
- package/src/slack/types.ts +108 -0
- package/src/sqlitehint.ts +32 -0
- package/src/ssh-observation.ts +30 -0
- package/src/state.ts +8261 -0
- package/src/statemachine.ts +372 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +306 -0
- package/src/terminal-failure.ts +41 -0
- package/src/thread-resolution-refusal.ts +2 -0
- package/src/tmux.ts +153 -0
- package/src/trackerid.ts +41 -0
- package/src/transcriptindex.ts +665 -0
- package/src/tui/actions.ts +484 -0
- package/src/tui/alerts.ts +666 -0
- package/src/tui/app.ts +2026 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1529 -0
- package/src/tui/candidates.ts +889 -0
- package/src/tui/cellwidth.ts +148 -0
- package/src/tui/changelog-store.ts +503 -0
- package/src/tui/chord.ts +25 -0
- package/src/tui/clipboard.ts +92 -0
- package/src/tui/cmdbar.ts +299 -0
- package/src/tui/companion.ts +1495 -0
- package/src/tui/companionplan.ts +247 -0
- package/src/tui/companiontab.ts +83 -0
- package/src/tui/confighome.ts +155 -0
- package/src/tui/connect.ts +74 -0
- package/src/tui/deploy-ceremony.ts +104 -0
- package/src/tui/deploy-drain.ts +129 -0
- package/src/tui/deploy-process.ts +265 -0
- package/src/tui/deploytab.ts +1523 -0
- package/src/tui/design.ts +125 -0
- package/src/tui/digesttab.ts +214 -0
- package/src/tui/emptystate.ts +39 -0
- package/src/tui/evidence.ts +999 -0
- package/src/tui/feed.ts +604 -0
- package/src/tui/feedbacktab.ts +1077 -0
- package/src/tui/filters.ts +94 -0
- package/src/tui/ghread.ts +388 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1656 -0
- package/src/tui/issuesink.ts +238 -0
- package/src/tui/jsonfile.ts +42 -0
- package/src/tui/keys.ts +109 -0
- package/src/tui/layout.ts +108 -0
- package/src/tui/learning.ts +627 -0
- package/src/tui/lessonswitch.ts +118 -0
- package/src/tui/livecontrol.ts +228 -0
- package/src/tui/memforward.ts +492 -0
- package/src/tui/memincident.ts +363 -0
- package/src/tui/memory.ts +620 -0
- package/src/tui/memtab.ts +606 -0
- package/src/tui/metricstab.ts +1177 -0
- package/src/tui/model.ts +165 -0
- package/src/tui/mouse.ts +98 -0
- package/src/tui/msg.ts +268 -0
- package/src/tui/nativecompanion.ts +417 -0
- package/src/tui/openurl.ts +21 -0
- package/src/tui/paint.ts +511 -0
- package/src/tui/panes.ts +98 -0
- package/src/tui/pipane.ts +219 -0
- package/src/tui/poll-hooks.ts +12 -0
- package/src/tui/poll.ts +147 -0
- package/src/tui/proposals.ts +838 -0
- package/src/tui/prpause.ts +159 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +421 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/route.ts +173 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/setupstate.ts +52 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +631 -0
- package/src/tui/startup.ts +231 -0
- package/src/tui/tabs.ts +45 -0
- package/src/tui/termmirror.ts +224 -0
- package/src/tui/theme.ts +96 -0
- package/src/tui/ticketstab.ts +310 -0
- package/src/tui/tmuxsocket.ts +129 -0
- package/src/tui/trackertickets.ts +84 -0
- package/src/tui/unwedge.ts +274 -0
- package/src/tui/viewer.ts +575 -0
- package/src/tui/viewerinput.ts +173 -0
- package/src/updatenotice.ts +178 -0
- package/src/usage.ts +1154 -0
- package/src/verdicts.ts +4707 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +951 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2182 -0
- package/src/worker-session-host.ts +602 -0
- package/src/workerbreaker.ts +156 -0
- package/src/workercontrol.ts +104 -0
- package/src/workerlease.ts +441 -0
- package/src/workerliveness.ts +103 -0
- package/src/workerlog.ts +79 -0
- package/src/workerruntime.ts +30 -0
- package/src/workersupervisor.ts +1538 -0
- package/src/workerusage.ts +42 -0
- package/src/workerworld.ts +433 -0
- package/src/worktrees.ts +1138 -0
- package/tests/fixtures/regression-cases.json +795 -0
- package/tests/fixtures/seed-manifest.json +19 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Quickchat AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
|
package/README.md
CHANGED
|
@@ -1,3 +1,402 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">QuickReview</h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<b>A self-hosted AI code reviewer for GitHub pull requests: many narrow reviewers, one verified review.</b>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/quickchatai/quickreview/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/quickchatai/quickreview/actions/workflows/ci.yml/badge.svg?branch=main"></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@quickchatai/quickreview"><img alt="npm" src="https://img.shields.io/npm/v/%40quickchatai%2Fquickreview?label=npm"></a>
|
|
10
|
+
<a href="https://github.com/quickchatai/quickreview/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/quickchatai/quickreview?label=release"></a>
|
|
11
|
+
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
A single model asked to "review this PR" reads the diff once, from one angle,
|
|
15
|
+
and stops when it has found something worth saying. QuickReview fans each
|
|
16
|
+
change out to **a dozen or so narrow, read-only lens passes** that each look
|
|
17
|
+
for one kind of problem and never see each other's output. It merges their
|
|
18
|
+
findings so one root cause gets one comment, and an **adversarial validator
|
|
19
|
+
re-derives every candidate from the code** before one review is posted.
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<img src="docs/media/lenses.gif" width="800"
|
|
23
|
+
alt="Animation: nine lens passes sweep the same diff in parallel, each marking the lines where it finds a problem; findings that share a root cause merge, eight candidates into six causes; the validator re-derives each from the code, keeps four and strikes two with a reason (below the bar; refuted); the four survivors become one posted review, three blockers and one question, marked REQUEST_CHANGES.">
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
On 185 real PRs with 520 defects each verified in the code, it finds
|
|
27
|
+
**97% of the high-severity defects and 89% of all of them**; the strongest
|
|
28
|
+
third-party configuration we measured finds 67%. That recall costs more:
|
|
29
|
+
about $2 and 17 minutes per PR, where the other tools take $0.07–0.53 and
|
|
30
|
+
0.7–2.3 minutes ([Benchmarks](#benchmarks)).
|
|
31
|
+
|
|
32
|
+
Around the review sits a small, deterministic TypeScript daemon with no LLM
|
|
33
|
+
in its decision path. It takes GitHub App webhooks, runs an authoritative
|
|
34
|
+
reconcile poll, keeps one sticky [pi](https://github.com/earendil-works/pi)
|
|
35
|
+
session per PR, and posts as *your* GitHub App through one gated mutation
|
|
36
|
+
path, on your infrastructure, under your keys.
|
|
37
|
+
|
|
38
|
+
**Status: beta.** The reviewer has run continuously since mid-August 2026 on
|
|
39
|
+
a busy commercial repository. The packaging for other teams is young: expect
|
|
40
|
+
rough edges in setup. `dry_run = true` is the shipped default, so a fresh
|
|
41
|
+
install never posts anything.
|
|
42
|
+
|
|
43
|
+
## How a review works
|
|
44
|
+
|
|
45
|
+
1. **Plan the lenses by rule.** Plain code, not a model, reads the changed
|
|
46
|
+
files and the PR text and plans the passes, each with the reason it was
|
|
47
|
+
planned. The PR's session may add a lens or raise its reasoning tier, with
|
|
48
|
+
a stated reason; it may never drop one.
|
|
49
|
+
2. **Fan out isolated lenses.** Each pass is a leaf agent with read-only
|
|
50
|
+
tools, the diff and a worktree at the exact head. None can see another
|
|
51
|
+
pass, spawn agents, or run your code. `pass-baseline` and `pass-tests` run
|
|
52
|
+
on every code change, `pass-sweep` reads every changed file line by line,
|
|
53
|
+
and the rest are picked by path, content and size: behaviour delta, code
|
|
54
|
+
quality, intent against the PR text, backward compatibility, security,
|
|
55
|
+
data safety, concurrency, bounds, rollout and more.
|
|
56
|
+
3. **Merge duplicates.** One root cause becomes one comment anchored at its
|
|
57
|
+
cause, with the other sites in its body
|
|
58
|
+
([docs/duplicate-merge.md](docs/duplicate-merge.md)).
|
|
59
|
+
4. **Validate.** `pass-validate` re-reads the code for every candidate and
|
|
60
|
+
keeps, demotes, doubts or kills it from a closed vocabulary. A plausible
|
|
61
|
+
but wrong finding costs more than a missed nit.
|
|
62
|
+
5. **Post one review.** Severities map to tags by fixed rules (any surviving
|
|
63
|
+
blocker means REQUEST_CHANGES), the review posts through the gate, and
|
|
64
|
+
every candidate, posted or not, lands in a per-finding reasoning record.
|
|
65
|
+
|
|
66
|
+
The lens catalogue, with each lens's trigger and severity cap, is §3.3 of the
|
|
67
|
+
[QuickReview report](bench/aacr/paper/quickreview.pdf).
|
|
68
|
+
|
|
69
|
+
## Benchmarks
|
|
70
|
+
|
|
71
|
+
Recall is the headline: a review that misses the defect has failed, whatever
|
|
72
|
+
else it does. Precision, cost and time are shown beside it, because that is
|
|
73
|
+
where QuickReview pays. Its results are the frozen build of 2026-10-04 on
|
|
74
|
+
`gpt-6.1-sol`, shipped defaults, one review per PR. The third-party tools we
|
|
75
|
+
ran used the best configuration we found for each, the OpenAI-based ones on
|
|
76
|
+
the same model, under the same judge on the same PRs.
|
|
77
|
+
|
|
78
|
+
<picture>
|
|
79
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/media/bench-aacr-dark.png">
|
|
80
|
+
<img src="docs/media/bench-aacr.png" alt="AACR-Bench, 185 PRs, 520 verified defects. Share of high-severity defects found: QuickReview 97%, Codex CLI 90%, pi-review panel 89%, OpenCode 84%, Claude Code 81%, open-code-review 71%, PR-Agent 62%. Share of all defects found: QuickReview 89%, pi-review panel 67%, Claude Code 62%, open-code-review 57%, Codex CLI 55%, OpenCode 51%, PR-Agent 37%.">
|
|
81
|
+
</picture>
|
|
82
|
+
|
|
83
|
+
**AACR-Bench, verified defects.** AACR-Bench's own reference comments are
|
|
84
|
+
mostly not real problems, so we built a key of 520 defects, each verified in
|
|
85
|
+
the code, and a judge for it. Over the panel and Codex CLI the lead holds
|
|
86
|
+
under a paired bootstrap on high and on high + medium defects (+8.3 points
|
|
87
|
+
[+1.9, +14.6] on high over the panel). The price: 6.9 comments per PR, 42%
|
|
88
|
+
of them true but minor.
|
|
89
|
+
|
|
90
|
+
<picture>
|
|
91
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/media/bench-martian-dark.png">
|
|
92
|
+
<img src="docs/media/bench-martian.png" alt="Martian Code Review Bench, 50 PRs, precision against recall. QuickReview: recall 65.8%, precision 16.2%, the highest recall and the lowest precision of seven reviewers. qodo-extended-v2 60.1% / 56.2%, cubic-v2 60.1% / 54.3%, open-code-review 58.9% / 26.7%, Claude Code 41.1% / 36.5%, PR-Agent 36.1% / 41.9%, OpenCode 33.5% / 32.7%.">
|
|
93
|
+
</picture>
|
|
94
|
+
|
|
95
|
+
**Martian, 50 PRs.** Martian scores against about three "golden" comments
|
|
96
|
+
per PR and counts every other comment as a false positive. It extracts about
|
|
97
|
+
12.8 issues per PR from QuickReview's reviews, so QuickReview has the highest
|
|
98
|
+
recall and the lowest precision. We
|
|
99
|
+
audited the goldens: of the 86 that describe a real defect the PR
|
|
100
|
+
introduces, it finds 75 (87%), the most of any tool.
|
|
101
|
+
|
|
102
|
+
<picture>
|
|
103
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/media/bench-qodo-dark.png">
|
|
104
|
+
<img src="docs/media/bench-qodo.png" alt="Qodo PR-Review-Bench, 100 PRs, 580 injected issues, precision against recall for 13 reviewers. QuickReview: recall 45.3%, precision 37.3%, second on recall behind qodo-exhaustive (46.4%) and the lowest precision.">
|
|
105
|
+
</picture>
|
|
106
|
+
|
|
107
|
+
**Qodo PR-Review-Bench, 100 PRs.** 580 injected issues: 309 functional bugs
|
|
108
|
+
and 271 violations of rules written in the repo. QuickReview finds the most
|
|
109
|
+
functional bugs of the thirteen tools (52.1%) and the second-most issues
|
|
110
|
+
overall, at the lowest precision; it is fourth on F1.
|
|
111
|
+
|
|
112
|
+
<details>
|
|
113
|
+
<summary>The full tables</summary>
|
|
114
|
+
|
|
115
|
+
**AACR-Bench** (185 PRs, 10 languages, 520 verified defects; a partly found defect counts ½)
|
|
116
|
+
|
|
117
|
+
| Reviewer | High (90) | High + medium (235) | All (520) | Comments correct | $/PR | Median min/PR |
|
|
118
|
+
|---|---|---|---|---|---|---|
|
|
119
|
+
| **QuickReview** | **87.5 (97%)** | **222 (94.5%)** | **461 (89%)** | 92% | 2.06 | 17.5 |
|
|
120
|
+
| pi-review panel (high) | 80 (89%) | 199 (85%) | 347.5 (67%) | 89% | 0.27 | 1.8 |
|
|
121
|
+
| Claude Code (Opus 5.5) | 72.5 (81%) | 177.5 (76%) | 324.5 (62%) | 81% | 0.20 | 0.7 |
|
|
122
|
+
| open-code-review (high) | 63.5 (71%) | 165.5 (70%) | 298.5 (57%) | 86% | 0.53 | 1.8 |
|
|
123
|
+
| Codex CLI (high) | 81 (90%) | 182.5 (78%) | 287 (55%) | 93% | 0.14 | 2.1 |
|
|
124
|
+
| OpenCode (+ PR text) | 76 (84%) | 175 (74%) | 263.5 (51%) | 93% | 0.17 | 2.3 |
|
|
125
|
+
| PR-Agent | 55.5 (62%) | 125.5 (53%) | 194 (37%) | 76% | 0.07 | 1.9 |
|
|
126
|
+
|
|
127
|
+
**Martian** (50 PRs, Core; one `gpt-6.1-sol` judge for every row, the vendor rows re-judged from their published comments)
|
|
128
|
+
|
|
129
|
+
| Tool | Precision | Recall | F1 | F2 | Real goldens (86) | $/PR | min/PR |
|
|
130
|
+
|---|---|---|---|---|---|---|---|
|
|
131
|
+
| **QuickReview** | 16.2 | **65.8** | 26.1 | 40.9 | **75 (87%)** | 2.84 | 26.1 |
|
|
132
|
+
| qodo-extended-v2 | 56.2 | 60.1 | **58.1** | **59.3** | 68 (79%) | – | – |
|
|
133
|
+
| cubic-v2 | 54.3 | 60.1 | 57.1 | 58.9 | 58 (67%) | – | – |
|
|
134
|
+
| open-code-review | 26.7 | 58.9 | 36.8 | 47.4 | 67 (78%) | 0.86 | 3.3 |
|
|
135
|
+
| PR-Agent | 41.9 | 36.1 | 38.8 | 37.1 | 46 (53%) | 0.09 | 1.4 |
|
|
136
|
+
| claude-code | 36.5 | 41.1 | 38.7 | 40.1 | 45 (52%) | – | – |
|
|
137
|
+
| OpenCode | 32.7 | 33.5 | 33.1 | 33.4 | 48 (56%) | 0.19 | 2.4 |
|
|
138
|
+
|
|
139
|
+
**Qodo PR-Review-Bench** (100 PRs; one `gpt-6.1-sol` judge under Qodo's stated matching rule; five more vendors are in the paper)
|
|
140
|
+
|
|
141
|
+
| Tool | Comments/PR | Precision | Recall | F1 | Functional recall | Rule recall | $/PR | min/PR |
|
|
142
|
+
|---|---|---|---|---|---|---|---|---|
|
|
143
|
+
| qodo-exhaustive | 4.6 | 58.0 | **46.4** | **51.5** | 48.2 | **44.3** | – | – |
|
|
144
|
+
| qodo-precise | 3.1 | 68.0 | 35.9 | 47.0 | 36.2 | 35.4 | – | – |
|
|
145
|
+
| augment | 2.5 | 67.5 | 29.7 | 41.2 | 49.2 | 7.4 | – | – |
|
|
146
|
+
| **QuickReview** | 7.1 | 37.3 | 45.3 | 40.9 | **52.1** | 37.6 | 2.48 | 19.6 |
|
|
147
|
+
| OpenCode | 2.6 | 64.9 | 29.0 | 40.0 | 43.7 | 12.2 | 0.20 | 2.3 |
|
|
148
|
+
| copilot | 4.2 | 46.8 | 33.6 | 39.1 | 46.3 | 19.2 | – | – |
|
|
149
|
+
| open-code-review | 3.5 | 47.1 | 28.1 | 35.2 | 45.6 | 8.1 | 0.46 | 1.9 |
|
|
150
|
+
| PR-Agent | 3.4 | 47.2 | 27.2 | 34.5 | 43.7 | 8.5 | 0.10 | 1.2 |
|
|
151
|
+
|
|
152
|
+
</details>
|
|
153
|
+
|
|
154
|
+
**Held-out PRs.** The last tuning round was mined from misses on part of
|
|
155
|
+
each benchmark. On the PRs kept out of it, the frozen build finds 83% of
|
|
156
|
+
AACR-Bench's defects (20 PRs), ties qodo-extended-v2 on Martian's real
|
|
157
|
+
goldens (43 of 52, 30 PRs), and reaches 60.3% recall and F1 53.0 on Qodo
|
|
158
|
+
(31 PRs), against 51.3 for qodo-exhaustive.
|
|
159
|
+
|
|
160
|
+
**Read more.** Two papers carry the method, every table and the threats to
|
|
161
|
+
validity: [*Measuring whether a code review finds the real
|
|
162
|
+
defects*](bench/aacr/paper/benchmark.pdf) and [*QuickReview: a multi-pass
|
|
163
|
+
automated code reviewer*](bench/aacr/paper/quickreview.pdf).
|
|
164
|
+
[`bench/aacr/README.md`](bench/aacr/README.md#reproduce) shows how to
|
|
165
|
+
re-score the runs with no keys, re-judge them, or re-run the benchmark on
|
|
166
|
+
your own keys; the run archive will be published separately. Costs are list
|
|
167
|
+
prices; on a ChatGPT plan they are quota, not a bill. The charts are drawn
|
|
168
|
+
by `bench/aacr/showcase/readme_charts.py`.
|
|
169
|
+
|
|
170
|
+
## Why this exists
|
|
171
|
+
|
|
172
|
+
> Nobody on your team is actually reviewing the volume of code your team now
|
|
173
|
+
> produces. The author asks their agent to write the code, the reviewer asks
|
|
174
|
+
> their agent to review it, the author replies "address the comments" — two
|
|
175
|
+
> humans spending a day as slow message brokers between two AIs. The review
|
|
176
|
+
> was already AI on both sides. The dead time was ours.
|
|
177
|
+
|
|
178
|
+
QuickReview moves human judgment up a level, to "is this something we need
|
|
179
|
+
and want?", while the machine checks what is checkable. The philosophy, in
|
|
180
|
+
short, is in [**MANIFESTO.md**](MANIFESTO.md).
|
|
181
|
+
|
|
182
|
+
## What it does around the review
|
|
183
|
+
|
|
184
|
+
<p align="center">
|
|
185
|
+
<img src="docs/media/pr-lifecycle.gif" width="800"
|
|
186
|
+
alt="Animation, about two minutes: a GitHub pull-request page for PR #42 beside the PR's own reviewer bot and a lifecycle strip (tracked, queued, reviewing, awaiting author, closed). A review label triggers the bot; it checks out the whole repository, follows callers and library source, and reads the repo's written rules and CI. Lens passes report candidates, the validator drops three, and the bot posts a REQUEST_CHANGES review with two rule-citing blockers, a question and a deferred finding it files as issue #57. The author replies on two threads: the bot concedes one after checking the claim and holds the other, citing the line. After a fix and a re-request, the bot verifies and resolves the fixed threads, leaves the deferred one open, approves on green CI, and a teammate merges.">
|
|
187
|
+
</p>
|
|
188
|
+
|
|
189
|
+
- **Reviews on trigger.** A label or a team review request marks a PR;
|
|
190
|
+
everything else is ignored, and bot-authored PRs never queue.
|
|
191
|
+
- **One sticky session per PR** follows it through pushes, author replies,
|
|
192
|
+
re-reviews and rechecks, with a pinned findings ledger that survives
|
|
193
|
+
context compaction.
|
|
194
|
+
- **A hard severity contract:** P0–P2 blockers, questions, nits; a
|
|
195
|
+
reachability gate; a cap on nits in re-reviews. `[check this]` marks what a
|
|
196
|
+
human must verify, `[ask your human]` what the author's AI must ask its
|
|
197
|
+
person, `[deferred]` what is real but not for this PR (the reviewer files
|
|
198
|
+
it).
|
|
199
|
+
- **CI-aware approvals.** Without green CI at the head, approval is withheld
|
|
200
|
+
and the review posts as a COMMENT.
|
|
201
|
+
- **Post-approval rechecks.** Pushes, CI results, base advances and replies
|
|
202
|
+
wake the same session; the only allowed change of verdict is APPROVE →
|
|
203
|
+
REQUEST_CHANGES, never a silent re-approve.
|
|
204
|
+
- **A learning loop.** `[feedback]` comments and signals such as merges over
|
|
205
|
+
a standing block demote the validator's bar the same day; an end-of-day
|
|
206
|
+
sweep curates durable learnings, and rubric changes land only on one-click
|
|
207
|
+
human ratification.
|
|
208
|
+
- **One mutation gate.** Every GitHub write goes through one gate with
|
|
209
|
+
posting-time guards; in dry-run each would-be write lands in
|
|
210
|
+
`state/dryrun/`. No code path dismisses a review.
|
|
211
|
+
- **Sovereign by default.** Self-hosted daemon, your GitHub App, your memory
|
|
212
|
+
store, rules as files in your repo. Only the model call and the names of
|
|
213
|
+
packages a PR imports (fetched from npm and PyPI so the reviewer can read
|
|
214
|
+
the library; `[review] dependency_sources = false` turns it off) leave your
|
|
215
|
+
infrastructure. Memory embeds locally.
|
|
216
|
+
- **The reviewer reads code; it never runs it.** The layers that hold that
|
|
217
|
+
line, what they guarantee and what they do not, are written as claims you
|
|
218
|
+
can falsify in [docs/exec-boundary.md](docs/exec-boundary.md). Please try.
|
|
219
|
+
|
|
220
|
+
Optional, and each degrades cleanly when unconfigured: an operator TUI, a
|
|
221
|
+
Slack concierge, a local companion session, opt-in escalation notes, and the
|
|
222
|
+
[OpenViking](https://github.com/volcengine/OpenViking)-backed reviewer memory.
|
|
223
|
+
|
|
224
|
+
## Quickstart
|
|
225
|
+
|
|
226
|
+
You need **Docker** with Compose v2, a model login, and either `gh` signed in
|
|
227
|
+
to your own GitHub account or **a GitHub account that can create an App** on
|
|
228
|
+
the repository to review. On Windows, run everything inside **WSL2**.
|
|
229
|
+
|
|
230
|
+
There is a second route that needs no App: `[github] auth = "user"` runs the
|
|
231
|
+
reviewer on **your own GitHub account**. Use it on one box where `gh` is
|
|
232
|
+
already signed in. It is polling-only, with no webhooks and no tunnel. Every
|
|
233
|
+
review it posts is a COMMENT that states its verdict, because an automated
|
|
234
|
+
verdict must never count as your approval and GitHub refuses either on your own
|
|
235
|
+
PR. Your token reaches the daemon only as the 0600 file
|
|
236
|
+
`<secrets dir>/github_token`, which `qcr github-token sync` refreshes from
|
|
237
|
+
`gh`. It never comes from the environment or a command line. On the App route
|
|
238
|
+
no personal access token is used.
|
|
239
|
+
|
|
240
|
+
```sh
|
|
241
|
+
# once: install `qcr`, the host wrapper the image writes (docs/host-wrapper.md);
|
|
242
|
+
# the images are public on ghcr.io
|
|
243
|
+
docker run --rm --user "$(id -u):$(id -g)" -v ~/.local/bin:/out \
|
|
244
|
+
ghcr.io/quickchatai/quickreview:<version> install
|
|
245
|
+
|
|
246
|
+
qcr onboard # the whole setup, guided
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`qcr onboard` is a pi agent that walks you through setup using named,
|
|
250
|
+
deterministic tools whose results you see. pi's `/login` opens by itself the
|
|
251
|
+
first time; any OpenAI login works ([docs/llm-setup.md](docs/llm-setup.md)).
|
|
252
|
+
It checks the machine, takes your own GitHub account where `gh` is signed in
|
|
253
|
+
(or **creates your GitHub App in one click** from a pinned manifest, if you
|
|
254
|
+
want a bot identity or webhooks), asks for one repository, defaults to polling,
|
|
255
|
+
mints the memory keys and brings the stack up. Setup ends there, and the TUI
|
|
256
|
+
opens on the board: it lists every open pull request of the repository, and
|
|
257
|
+
**`R` on the one you select reviews it now**, with no label to add, its
|
|
258
|
+
progress on the board and, in dry-run, the review recorded instead of posted.
|
|
259
|
+
Re-run `qcr onboard` to go live once you have read a review. It is resumable,
|
|
260
|
+
and re-running it on a working install is a diagnostic. Every step:
|
|
261
|
+
[docs/onboarding.md](docs/onboarding.md).
|
|
262
|
+
|
|
263
|
+
### Where the reviewer lives
|
|
264
|
+
|
|
265
|
+
- **This computer**, in Docker ([docker/README.md](docker/README.md)): the
|
|
266
|
+
pick when the machine is itself an always-on server, such as a cloud VM;
|
|
267
|
+
on a laptop it reviews only while the machine is awake.
|
|
268
|
+
- **A server over ssh**, recommended when your own computer sleeps. Setup
|
|
269
|
+
rides the Ansible deploy
|
|
270
|
+
([deploy/ansible/README.md](deploy/ansible/README.md)); it needs
|
|
271
|
+
passwordless sudo there and `ansible-playbook` on your machine.
|
|
272
|
+
|
|
273
|
+
Polling is the default: the daemon checks GitHub every few minutes and
|
|
274
|
+
exposes nothing, at the cost of trigger latency up to one poll interval and
|
|
275
|
+
quiet author-reply routing and `[feedback]` loop. Webhooks need an HTTPS URL:
|
|
276
|
+
a Cloudflare quick tunnel, ngrok or your own named Cloudflare tunnel, on the
|
|
277
|
+
App route only. The trade-offs are in
|
|
278
|
+
[docker/README.md](docker/README.md).
|
|
279
|
+
|
|
280
|
+
`dry_run = true` stays on until you flip it, through the wizard's go-live
|
|
281
|
+
step or by hand ([docs/ownership.md](docs/ownership.md)); a dry-run install
|
|
282
|
+
is a complete one whose reviews are files you read. Slack is set up
|
|
283
|
+
separately, any time, with `npm run slack:setup` from a clone (the image
|
|
284
|
+
does not carry it yet).
|
|
285
|
+
|
|
286
|
+
## Install with npm
|
|
287
|
+
|
|
288
|
+
The npm package is the whole app, the same code the image runs, as the `qcr`
|
|
289
|
+
command on Node 26 or later (npm, pnpm and bun all work; an older Node is
|
|
290
|
+
not blocked, but only 26+ is supported):
|
|
291
|
+
|
|
292
|
+
```sh
|
|
293
|
+
npm i -g @quickchatai/quickreview
|
|
294
|
+
|
|
295
|
+
qcr login # pi's own /login, for the review's models
|
|
296
|
+
qcr review # review this branch against its base, with no daemon
|
|
297
|
+
qcr review 123 # review a pull request (or pass its URL)
|
|
298
|
+
qcr pi # pi with the QuickReview plugin: /review /scan /selfimprove /qcr-setup
|
|
299
|
+
qcr update # update qcr with the package manager that installed it
|
|
300
|
+
qcr # the admin TUI
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`qcr review` asks where the result goes (shown, saved as markdown and JSON,
|
|
304
|
+
or posted to the PR as a comment-only review through the same gate as the
|
|
305
|
+
bot); piped or with `--json`, it prints. Without Docker, memory is off and
|
|
306
|
+
the companion runs unsandboxed, and both say so; the release image is still
|
|
307
|
+
the better host for an always-on bot ([docker/README.md](docker/README.md)).
|
|
308
|
+
|
|
309
|
+
Already using pi? Install just the plugin:
|
|
310
|
+
`pi install npm:@quickchatai/pi-quickreview`
|
|
311
|
+
([packages/pi-plugin/README.md](packages/pi-plugin/README.md)).
|
|
312
|
+
|
|
313
|
+
## Configuring and running it
|
|
314
|
+
|
|
315
|
+
- **Repo profiles** ([docs/profiles.md](docs/profiles.md)): house-rule
|
|
316
|
+
addenda, lens-selection heuristics and per-lens switches. Shipped:
|
|
317
|
+
`default`, `example-django`, `minimal`, `fast` and `snappy`; start from
|
|
318
|
+
`extends = "default"` and write only what differs.
|
|
319
|
+
- **Presets:** `[review] preset` is `default`, `max` (every model at its
|
|
320
|
+
ceiling) or `low` (about half the cost and time, lower recall).
|
|
321
|
+
- **Cost:** the daemon is one small container; the model spend is per round.
|
|
322
|
+
On AACR-Bench a review averaged $2.06 per PR at list prices (median
|
|
323
|
+
$1.87); on Martian's and Qodo's PRs, $2.84 and $2.48. Watch it with `qcr spend` and `qcr today`, time to first verdict
|
|
324
|
+
with `qcr metrics`, and start with the trigger label on a few PRs.
|
|
325
|
+
- **Operating:** `qcr status`, `qcr why <pr>`, `qcr tui`, and
|
|
326
|
+
`docker compose logs -f daemon` on the laptop route.
|
|
327
|
+
|
|
328
|
+
**Direction:** per-lens yield drives lens tuning, profiles grow beyond
|
|
329
|
+
Django, and review history is fed back into your implementing agents'
|
|
330
|
+
instructions. **Non-goals:** no
|
|
331
|
+
rebuilding GitHub's PR workflow, no running your code, no hard round budget,
|
|
332
|
+
no reading the implementing conversation, and the fixer and the reviewer are
|
|
333
|
+
never the same system ([MANIFESTO.md](MANIFESTO.md)).
|
|
334
|
+
|
|
335
|
+
## Documentation
|
|
336
|
+
|
|
337
|
+
- [docs/architecture/README.md](docs/architecture/README.md) — the process map, the review lifecycle, the sessions, the data model, the safety seams
|
|
338
|
+
- [docs/onboarding.md](docs/onboarding.md) — the guided setup, step by step
|
|
339
|
+
- [docs/github-app-setup.md](docs/github-app-setup.md) — the GitHub App, and how to register it by hand
|
|
340
|
+
- [docs/llm-setup.md](docs/llm-setup.md) — the two LLM credential routes
|
|
341
|
+
- [docker/README.md](docker/README.md) — the compose stack, ingress shapes, version pin
|
|
342
|
+
- [deploy/ansible/README.md](deploy/ansible/README.md) — the server route
|
|
343
|
+
- [docs/host-wrapper.md](docs/host-wrapper.md) — the `qcr` host wrapper
|
|
344
|
+
- [docs/profiles.md](docs/profiles.md) — repo profiles and per-lens tuning
|
|
345
|
+
- [packages/pi-plugin/README.md](packages/pi-plugin/README.md) — the pi plugin
|
|
346
|
+
- [docs/plugin.md](docs/plugin.md) — the Claude Code plugin
|
|
347
|
+
- [docs/ownership.md](docs/ownership.md) — the owner-only surfaces: the dry-run flag, frozen seeds, ratification
|
|
348
|
+
- [docs/exec-boundary.md](docs/exec-boundary.md) — what stops a review session running your code
|
|
349
|
+
- [docs/memory-embeddings.md](docs/memory-embeddings.md) — the embedder: local by default, hosted opt-in
|
|
350
|
+
- [bench/aacr/README.md](bench/aacr/README.md) — the benchmark harness
|
|
351
|
+
- [AGENTS.md](AGENTS.md) — orientation for an AI agent editing this codebase
|
|
352
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md), [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and [SECURITY.md](SECURITY.md)
|
|
353
|
+
|
|
354
|
+
## Appendix — setting up by hand
|
|
355
|
+
|
|
356
|
+
`qcr onboard` composes these tools rather than replacing them; re-running it
|
|
357
|
+
afterwards re-checks every step without rewriting what already holds.
|
|
358
|
+
|
|
359
|
+
```sh
|
|
360
|
+
IMG=ghcr.io/quickchatai/quickreview:<version>
|
|
361
|
+
mkdir qcr-bot && cd qcr-bot
|
|
362
|
+
docker run --rm --entrypoint tar $IMG -C /opt/qcr -cf - docker-compose.yml docker/tunnel | tar -xf -
|
|
363
|
+
mkdir -p ~/.config/qcr/default/secrets # app_id, app.pem, webhook_secret, one file each, 0600
|
|
364
|
+
docker run --rm --entrypoint cat $IMG /opt/qcr/config.example.toml \
|
|
365
|
+
> ~/.config/qcr/default/config.toml # fill the marked values
|
|
366
|
+
# .env: QCR_VERSION, QCR_UID, QCR_CONFIG_HOME, QCR_SECRETS_DIR, QCR_CLONE_DIR (docker/README.md)
|
|
367
|
+
docker compose pull --ignore-buildable
|
|
368
|
+
docker compose up -d
|
|
369
|
+
curl -s http://127.0.0.1:8787/health
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Then point your HTTPS ingress at the webhook port, install the App, create
|
|
373
|
+
the trigger label and label a PR: `state/dryrun/` fills up. The memory keys
|
|
374
|
+
are minted by the running server, so run `qcr onboard` for that step even if
|
|
375
|
+
you did the rest by hand; declining memory is supported.
|
|
376
|
+
|
|
377
|
+
## Star history
|
|
378
|
+
|
|
379
|
+
<a href="https://www.star-history.com/#quickchatai/quickreview&Date">
|
|
380
|
+
<picture>
|
|
381
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=quickchatai/quickreview&type=Date&theme=dark">
|
|
382
|
+
<img alt="Star history of quickchatai/quickreview" src="https://api.star-history.com/svg?repos=quickchatai/quickreview&type=Date">
|
|
383
|
+
</picture>
|
|
384
|
+
</a>
|
|
385
|
+
|
|
386
|
+
## Acknowledgements
|
|
387
|
+
|
|
388
|
+
- **[Matt Pocock's skills](https://github.com/mattpocock/skills)**: processes
|
|
389
|
+
as versioned files an agent can follow. Its wayfinding, spec-writing,
|
|
390
|
+
ticketing and grilling skills drove the loop that built this codebase.
|
|
391
|
+
- **[pi](https://github.com/earendil-works/pi)**: small, sharp agent sessions
|
|
392
|
+
you can attach to, with extensions that compose. Every review session is a
|
|
393
|
+
pi session.
|
|
394
|
+
- **[OpenViking](https://github.com/volcengine/OpenViking)**: the memory
|
|
395
|
+
engine behind the reviewer's learning, on your own infrastructure.
|
|
396
|
+
- **[pr-agent](https://github.com/qodo-ai/pr-agent)**: studied closely in
|
|
397
|
+
[docs/pr-agent-comparison.md](docs/pr-agent-comparison.md).
|
|
398
|
+
|
|
399
|
+
## License
|
|
400
|
+
|
|
401
|
+
MIT ([LICENSE](LICENSE)); third-party attributions in
|
|
402
|
+
[THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
This repository is licensed under the MIT License (see `LICENSE`). It
|
|
4
|
+
redistributes the third-party components below. Each entry names the upstream,
|
|
5
|
+
its license, and where the full text and provenance live in this tree.
|
|
6
|
+
|
|
7
|
+
## extensions/vendor/openviking-pi — OpenViking pi coding-agent extension
|
|
8
|
+
|
|
9
|
+
- Upstream: <https://github.com/volcengine/OpenViking>, path
|
|
10
|
+
`examples/pi-coding-agent-extension`, tag `v0.4.15`
|
|
11
|
+
(base commit `d436baa23c83938b22bb0aab08b0ce48568b5ff4`).
|
|
12
|
+
- License: **Apache-2.0**. The OpenViking project as a whole is AGPLv3, but
|
|
13
|
+
`examples/` — where this extension lives — is Apache-2.0 (see the upstream
|
|
14
|
+
README, "License").
|
|
15
|
+
- Full license text: `extensions/vendor/openviking-pi/LICENSE`.
|
|
16
|
+
- Attribution and modification notice (Apache-2.0 §4(b)):
|
|
17
|
+
`extensions/vendor/openviking-pi/NOTICE` — this is a MODIFIED copy; the full
|
|
18
|
+
delta is the `patches/` series beside it, and
|
|
19
|
+
`extensions/vendor/openviking-pi/upstream.json` is the machine-readable
|
|
20
|
+
provenance record.
|
|
21
|
+
|
|
22
|
+
## extensions/inline-bash.ts — pi example extension
|
|
23
|
+
|
|
24
|
+
- Upstream: the pi coding agent package
|
|
25
|
+
`@earendil-works/pi-coding-agent`, file
|
|
26
|
+
`examples/extensions/inline-bash.ts`, vendored verbatim (2026-08-25 at
|
|
27
|
+
0.84.1; byte-identical at the current 0.84.4 pin).
|
|
28
|
+
- License: **MIT** (the pi package's license). The MIT text as it applies to
|
|
29
|
+
this file:
|
|
30
|
+
|
|
31
|
+
> MIT License
|
|
32
|
+
>
|
|
33
|
+
> Copyright (c) 2025 Mario Zechner
|
|
34
|
+
>
|
|
35
|
+
> Permission is hereby granted, free of charge, to any person obtaining a
|
|
36
|
+
> copy of this software and associated documentation files (the
|
|
37
|
+
> "Software"), to deal in the Software without restriction, including
|
|
38
|
+
> without limitation the rights to use, copy, modify, merge, publish,
|
|
39
|
+
> distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
40
|
+
> persons to whom the Software is furnished to do so, subject to the
|
|
41
|
+
> following conditions:
|
|
42
|
+
>
|
|
43
|
+
> The above copyright notice and this permission notice shall be included
|
|
44
|
+
> in all copies or substantial portions of the Software.
|
|
45
|
+
>
|
|
46
|
+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
47
|
+
> OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
48
|
+
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
49
|
+
> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
50
|
+
> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
51
|
+
> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
52
|
+
> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
53
|
+
|
|
54
|
+
## .claude/skills — vendored skill set
|
|
55
|
+
|
|
56
|
+
- Upstream: <https://github.com/mattpocock/skills>, pinned by commit in
|
|
57
|
+
`.claude/skills/VENDORED.md`.
|
|
58
|
+
- License: **MIT** (Copyright (c) 2026 Matt Pocock). Full text:
|
|
59
|
+
`.claude/skills/LICENSE`.
|
|
60
|
+
- First-party exception (authored for this project, licensed under the
|
|
61
|
+
repository's own `LICENSE`, NOT part of the upstream set): the
|
|
62
|
+
`selfimprove` skill. The `skills/companion/` directory at the repository
|
|
63
|
+
root is likewise first-party.
|
|
64
|
+
|
|
65
|
+
## bench/aacr — third-party benchmark data
|
|
66
|
+
|
|
67
|
+
The benchmark harness (`bench/aacr/`) commits rows derived from four public
|
|
68
|
+
benchmarks: case sets (PR ids, commits, and the PR author's title and
|
|
69
|
+
description) and, for Martian, its golden comments. Each set file's `dataset`
|
|
70
|
+
field pins the source commit and file hash (`sets/dedup5-*.json` are cut
|
|
71
|
+
from the four below and name their source the same way). No third-party review-tool
|
|
72
|
+
comment text is committed: vendor reviews and SWE-PRBench's human review
|
|
73
|
+
comments are fetched from the pinned sources at run time and verified by hash
|
|
74
|
+
(`bench/aacr/ext/sweprbench/dataset-manifest.sha256`, the Martian manifest
|
|
75
|
+
sha256 in `sets/martian*.json`). The exceptions are the reviewer-output
|
|
76
|
+
fixtures and the verbatim prompts and harness code listed under "bench/aacr —
|
|
77
|
+
reviewer prompts, harness code and output fixtures" below.
|
|
78
|
+
|
|
79
|
+
- **AACR-Bench** — <https://github.com/alibaba/aacr-bench> (dataset commit
|
|
80
|
+
`ab8af8d5`, harness commit `68a5697`), **Apache-2.0**. Derived here:
|
|
81
|
+
`sets/` (smoke10, dev10, holdout10, fresh10, rest145, full and their
|
|
82
|
+
subsets), `references.json`, `bot_references.json`, `sets/*.labels.json`,
|
|
83
|
+
and the defect keys in `defects/` (a modified work: our verified answer key
|
|
84
|
+
over AACR-Bench's PRs).
|
|
85
|
+
- **Martian code-review-benchmark** — <https://github.com/withmartian/code-review-benchmark>
|
|
86
|
+
(commit `e616e84`), **MIT**. Derived here: `sets/martian*.json`,
|
|
87
|
+
`ext/martian/fork-prs.json`, and the golden comments quoted in
|
|
88
|
+
`ext/martian-tuning/golden-audit-full.json`.
|
|
89
|
+
- **Qodo PR-Review-Bench** — <https://huggingface.co/datasets/Qodo/PR-Review-Bench>
|
|
90
|
+
(commit `a73957c`), **MIT**. Derived here: `sets/qodo-*.json`.
|
|
91
|
+
- **SWE-PRBench** — <https://huggingface.co/datasets/foundry-ai/swe-prbench>
|
|
92
|
+
(commit `b87f579`), **CC-BY-4.0**. Derived here: `sets/sweprbench-*.json`
|
|
93
|
+
(PR metadata with each PR's title and description from the dataset's
|
|
94
|
+
`prs.jsonl`); attribution: SWE-PRBench, FoundryHQ-AI.
|
|
95
|
+
|
|
96
|
+
## bench/aacr — reviewer prompts, harness code and output fixtures
|
|
97
|
+
|
|
98
|
+
`bench/aacr/docs/PROMPTS.md` reproduces, word for word, the prompts and code
|
|
99
|
+
each compared reviewer ran with, so a reader can check what produced a number.
|
|
100
|
+
The test suite keeps a few real outputs of those reviewers as parser fixtures.
|
|
101
|
+
Each item names its source and, for code and prompt text, its license:
|
|
102
|
+
|
|
103
|
+
- **AACR-Bench harness code** — <https://github.com/alibaba/aacr-bench>
|
|
104
|
+
(harness commit `68a5697`), **Apache-2.0**. Quoted unmodified in
|
|
105
|
+
`bench/aacr/docs/PROMPTS.md`: `evaluation/judge.py` (§3), the findings
|
|
106
|
+
prompt fragment of `reviewers/codex.py` (§5.2, §5.3; also restated in
|
|
107
|
+
`src/bench/opencode.ts`) and `reviewers/claude.py` (§5.5).
|
|
108
|
+
- **OpenCode** — <https://github.com/sst/opencode>, **MIT**. Its built-in
|
|
109
|
+
`review` command template, copied verbatim from 1.18.33, is in
|
|
110
|
+
`src/bench/opencode.ts` and quoted in `bench/aacr/docs/PROMPTS.md` §5.3.
|
|
111
|
+
- **pi-review** — [`@zephyrdeng/pi-review`](https://github.com/ZephyrDeng/pi-review)
|
|
112
|
+
0.18.0, **MIT**. Its `resources/system-prompt.md` (which carries its own
|
|
113
|
+
MIT credit for the prompt structure it was inspired by) and the output
|
|
114
|
+
contract of `dist/prompt.js` are quoted in `bench/aacr/docs/PROMPTS.md`
|
|
115
|
+
§5.4; `tests/fixtures/pireview-stdout-immich.txt` is one real pi-review
|
|
116
|
+
output on a public PR.
|
|
117
|
+
- **Claude Code** `/code-review` output — `tests/fixtures/claude-prose/*.md`
|
|
118
|
+
are real outputs of the Claude Code arm on public benchmark PRs, kept as the
|
|
119
|
+
golden set of the prose parser (`tests/bench-claude-prose.test.ts`).
|
|
120
|
+
Claude Code's own prompt is not reproduced (it is internal to the CLI).
|
|
121
|
+
|
|
122
|
+
## Subagents — no third-party component
|
|
123
|
+
|
|
124
|
+
Lenses run through the first-party lens tool (`packages/pi-plugin/src/engine/lens/`), SDK sessions
|
|
125
|
+
of the host process — nothing is vendored or redistributed, so no notice entry
|
|
126
|
+
is needed. (The pi-package example subagent extension that once filled this
|
|
127
|
+
role, loaded by `extensions/subagents.ts`, is retired.)
|
|
128
|
+
|
|
129
|
+
## npm dependencies
|
|
130
|
+
|
|
131
|
+
Runtime and development npm packages (`better-sqlite3`, `smol-toml`,
|
|
132
|
+
`typescript`, `vitest`, …) are installed from
|
|
133
|
+
the registry, not vendored; their licenses ride the packages themselves under
|
|
134
|
+
`node_modules/` and are all MIT/Apache-2.0/BSD-family. See `package.json`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-abstraction
|
|
3
|
+
description: Abstraction review pass — are the functions, types, interfaces and parameters this change introduces or reshapes drawn at the right level for their job? Mixed levels, leaky or missing abstractions, speculative generality, contracts that do not say what they guarantee. Capped at P2.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: abstraction level
|
|
10
|
+
|
|
11
|
+
Apply to: the BOUNDARIES this change draws or moves — the functions, classes,
|
|
12
|
+
types, interfaces, parameters and return values it introduces or reshapes —
|
|
13
|
+
judged by whether each sits at the right level of abstraction for its job and
|
|
14
|
+
for the callers that use it. (Where code lives is `pass-placement`; whether
|
|
15
|
+
it could be less code is `pass-simplicity`; this lens asks whether the
|
|
16
|
+
boundaries and contracts are at the right level.)
|
|
17
|
+
|
|
18
|
+
## Anchor on the callers and the repo
|
|
19
|
+
|
|
20
|
+
An abstraction is only wrong in terms of what it costs its users. Every
|
|
21
|
+
finding cites the evidence: the call sites that have to know an internal, the
|
|
22
|
+
flag each caller has to pass, the three places that re-assemble the same
|
|
23
|
+
parameter bundle, the repo's existing abstraction for the same concept that
|
|
24
|
+
this one ignores — file and line.
|
|
25
|
+
|
|
26
|
+
## What to look for
|
|
27
|
+
|
|
28
|
+
- **Mixed levels in one unit.** A function that interleaves high-level
|
|
29
|
+
orchestration (what happens) with low-level mechanics (byte offsets, SQL
|
|
30
|
+
strings, retry arithmetic) so neither reads clearly — name the seam that
|
|
31
|
+
splits them.
|
|
32
|
+
- **Leaky abstractions.** A new interface that exposes its implementation:
|
|
33
|
+
callers receive raw rows, library exceptions, internal ids, or have to call
|
|
34
|
+
methods in a particular order to use it correctly.
|
|
35
|
+
- **Missing abstractions.** The same group of values passed together
|
|
36
|
+
everywhere; a primitive (string, int, dict) standing in for a concept with
|
|
37
|
+
rules; a boolean flag parameter selecting between two behaviours at each
|
|
38
|
+
call site; stringly-typed states where the repo models the concept.
|
|
39
|
+
- **Wrong generality.** Speculative generic machinery — a strategy, registry,
|
|
40
|
+
plugin point, config option — with one implementation and no second in
|
|
41
|
+
sight; or the reverse, a one-off special case bolted on where the repo's
|
|
42
|
+
own pattern is general.
|
|
43
|
+
- **Contracts that do not say what they guarantee.** A signature where
|
|
44
|
+
everything is optional or `any`, a return value whose absence means three
|
|
45
|
+
different things, a function whose name promises a level (a "get") while
|
|
46
|
+
doing work at another (a network call, a write).
|
|
47
|
+
|
|
48
|
+
## Findings give the better boundary
|
|
49
|
+
|
|
50
|
+
A bare "this is at the wrong level" is noise. Name the boundary that fits —
|
|
51
|
+
the function to split out, the type to introduce, the parameter to drop — and
|
|
52
|
+
what it buys the callers you cited. A remedy larger than the PR is a design
|
|
53
|
+
objection, not a merge blocker: say so.
|
|
54
|
+
|
|
55
|
+
{{include:prompts/pass-quality-common.md}}
|
|
56
|
+
|
|
57
|
+
## Severity is capped at P2
|
|
58
|
+
|
|
59
|
+
A misdrawn boundary that works is structural debt: every finding from this
|
|
60
|
+
lens is `P2` at most, and `P2` only when the cited callers are already paying
|
|
61
|
+
for it in this change; otherwise `P3`.
|
|
62
|
+
|
|
63
|
+
`NONE` is the correct output when the change's boundaries fit their job —
|
|
64
|
+
most changes.
|