@quickchatai/quickreview 1.1.0 → 1.3.1
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/README.md +137 -57
- package/bin/qcr.js +1 -1
- package/config.example.toml +60 -14
- package/deploy/ansible/README.md +20 -12
- package/deploy/ansible/inventory.example.ini +1 -1
- package/deploy/collect-secrets.sh +1 -1
- package/deploy/qcr-update.sh +1 -1
- package/dist/extensions/cli/home.js +14 -0
- package/dist/extensions/cli/home.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/selfimprove.js +18 -0
- package/dist/extensions/cli/selfimprove.js.map +1 -0
- package/dist/extensions/home.js +350 -0
- package/dist/extensions/home.js.map +1 -0
- package/dist/extensions/login-route.js +180 -0
- package/dist/extensions/login-route.js.map +1 -0
- package/dist/extensions/onboarding.js +35 -11
- package/dist/extensions/onboarding.js.map +1 -1
- package/dist/extensions/selfimprove.js +49 -0
- package/dist/extensions/selfimprove.js.map +1 -0
- package/dist/extensions/setup-scan.js +23 -592
- package/dist/extensions/setup-scan.js.map +1 -1
- package/dist/extensions/setup.js +2 -47
- package/dist/extensions/setup.js.map +1 -1
- package/dist/src/archive/restore.js +18 -15
- package/dist/src/archive/restore.js.map +1 -1
- package/dist/src/botworker.js +13 -2
- package/dist/src/botworker.js.map +1 -1
- package/dist/src/channelfs.js +3 -26
- package/dist/src/channelfs.js.map +1 -1
- package/dist/src/ciretry.js +2 -1
- package/dist/src/ciretry.js.map +1 -1
- package/dist/src/cli.js +54 -61
- package/dist/src/cli.js.map +1 -1
- package/dist/src/cliops.js +3 -2
- package/dist/src/cliops.js.map +1 -1
- package/dist/src/commands.js +25 -2
- package/dist/src/commands.js.map +1 -1
- package/dist/src/config.js +32 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/daemon.js +50 -8
- package/dist/src/daemon.js.map +1 -1
- package/dist/src/debuground.js +1 -0
- package/dist/src/debuground.js.map +1 -1
- package/dist/src/debugroundpi.js +6 -1
- package/dist/src/debugroundpi.js.map +1 -1
- package/dist/src/dispatch.js +5 -4
- package/dist/src/dispatch.js.map +1 -1
- package/dist/src/engine/caserunner-sdk.js +15 -251
- package/dist/src/engine/caserunner-sdk.js.map +1 -1
- package/dist/src/engine/debugpi.js +17 -5
- package/dist/src/engine/debugpi.js.map +1 -1
- package/dist/src/execboundary.js +10 -3
- package/dist/src/execboundary.js.map +1 -1
- package/dist/src/github.js +51 -16
- package/dist/src/github.js.map +1 -1
- package/dist/src/githubtoken.js +346 -0
- package/dist/src/githubtoken.js.map +1 -0
- package/dist/src/home/adapters.js +349 -0
- package/dist/src/home/adapters.js.map +1 -0
- package/dist/src/home/advanced.js +318 -0
- package/dist/src/home/advanced.js.map +1 -0
- package/dist/src/home/advancedtools.js +57 -0
- package/dist/src/home/advancedtools.js.map +1 -0
- package/dist/src/home/autoreview.js +325 -0
- package/dist/src/home/autoreview.js.map +1 -0
- package/dist/src/home/daemonstatus.js +32 -0
- package/dist/src/home/daemonstatus.js.map +1 -0
- package/dist/src/home/devicelogin.js +61 -0
- package/dist/src/home/devicelogin.js.map +1 -0
- package/dist/src/home/launch.js +202 -0
- package/dist/src/home/launch.js.map +1 -0
- package/dist/src/home/loginowner.js +205 -0
- package/dist/src/home/loginowner.js.map +1 -0
- package/dist/src/home/memory.js +122 -0
- package/dist/src/home/memory.js.map +1 -0
- package/dist/src/home/model.js +811 -0
- package/dist/src/home/model.js.map +1 -0
- package/dist/src/home/panel.js +520 -0
- package/dist/src/home/panel.js.map +1 -0
- package/dist/src/home/ports.js +19 -0
- package/dist/src/home/ports.js.map +1 -0
- package/dist/src/home/review.js +163 -0
- package/dist/src/home/review.js.map +1 -0
- package/dist/src/home/reviews.js +478 -0
- package/dist/src/home/reviews.js.map +1 -0
- package/dist/src/home/setup.js +507 -0
- package/dist/src/home/setup.js.map +1 -0
- package/dist/src/home/setupadapters.js +214 -0
- package/dist/src/home/setupadapters.js.map +1 -0
- package/dist/src/home/setupcard.js +199 -0
- package/dist/src/home/setupcard.js.map +1 -0
- package/dist/src/home/setuptools.js +45 -0
- package/dist/src/home/setuptools.js.map +1 -0
- package/dist/src/home/spend.js +160 -0
- package/dist/src/home/spend.js.map +1 -0
- package/dist/src/home/switches.js +209 -0
- package/dist/src/home/switches.js.map +1 -0
- package/dist/src/home/switchon.js +439 -0
- package/dist/src/home/switchon.js.map +1 -0
- package/dist/src/home/toolnames.js +41 -0
- package/dist/src/home/toolnames.js.map +1 -0
- package/dist/src/home/tune.js +341 -0
- package/dist/src/home/tune.js.map +1 -0
- package/dist/src/home/words.js +7 -0
- package/dist/src/home/words.js.map +1 -0
- package/dist/src/homes.js +14 -0
- package/dist/src/homes.js.map +1 -1
- package/dist/src/install.js +1 -1
- package/dist/src/install.js.map +1 -1
- package/dist/src/ipc/workerspec.js +8 -0
- package/dist/src/ipc/workerspec.js.map +1 -1
- package/dist/src/live/publish.js +1 -1
- package/dist/src/live/publish.js.map +1 -1
- package/dist/src/livecli.js +1 -1
- package/dist/src/livecli.js.map +1 -1
- package/dist/src/loginhint.js +8 -3
- package/dist/src/loginhint.js.map +1 -1
- package/dist/src/loginrefresh/handover.js +121 -0
- package/dist/src/loginrefresh/handover.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +54 -3
- package/dist/src/loginrefresh/lock.js.map +1 -1
- package/dist/src/loginrefresh/pirefresh.js +3 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -1
- package/dist/src/loginrefresh/refresher.js +33 -5
- package/dist/src/loginrefresh/refresher.js.map +1 -1
- package/dist/src/loginrefresh/supervisor.js +18 -1
- package/dist/src/loginrefresh/supervisor.js.map +1 -1
- package/dist/src/npmverbs.js +46 -14
- package/dist/src/npmverbs.js.map +1 -1
- package/dist/src/onboard/choices.js +35 -4
- package/dist/src/onboard/choices.js.map +1 -1
- package/dist/src/onboard/engine.js +32 -306
- package/dist/src/onboard/engine.js.map +1 -1
- 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 +4 -1
- package/dist/src/onboard/steps/appslug.js.map +1 -1
- package/dist/src/onboard/steps/bringup.js +3 -2
- package/dist/src/onboard/steps/bringup.js.map +1 -1
- package/dist/src/onboard/steps/compose.js +29 -0
- package/dist/src/onboard/steps/compose.js.map +1 -1
- package/dist/src/onboard/steps/configfill.js +120 -39
- package/dist/src/onboard/steps/configfill.js.map +1 -1
- 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 +65 -7
- package/dist/src/onboard/steps/githubapp.js.map +1 -1
- package/dist/src/onboard/steps/golive.js +2 -0
- package/dist/src/onboard/steps/golive.js.map +1 -1
- package/dist/src/onboard/steps/index.js +11 -0
- package/dist/src/onboard/steps/index.js.map +1 -1
- package/dist/src/onboard/steps/ingress.js +80 -25
- package/dist/src/onboard/steps/ingress.js.map +1 -1
- package/dist/src/onboard/steps/llmauth.js +103 -30
- package/dist/src/onboard/steps/llmauth.js.map +1 -1
- package/dist/src/onboard/steps/loginshare.js +213 -0
- package/dist/src/onboard/steps/loginshare.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +67 -3
- package/dist/src/onboard/steps/memory.js.map +1 -1
- package/dist/src/onboard/steps/proof.js +366 -56
- package/dist/src/onboard/steps/proof.js.map +1 -1
- package/dist/src/onboard/steps/repoconfig.js +72 -0
- package/dist/src/onboard/steps/repoconfig.js.map +1 -0
- package/dist/src/onboard/steps/topology.js +6 -6
- package/dist/src/onboard/steps/topology.js.map +1 -1
- package/dist/src/onboard/steps/transport.js +9 -1
- package/dist/src/onboard/steps/transport.js.map +1 -1
- 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 +17 -1
- package/dist/src/onboard/steps/verifyup.js.map +1 -1
- package/dist/src/onboard/toolnames.js +30 -0
- package/dist/src/onboard/toolnames.js.map +1 -0
- package/dist/src/operatorwrite.js +23 -0
- package/dist/src/operatorwrite.js.map +1 -0
- package/dist/src/outcomes.js +4 -1
- package/dist/src/outcomes.js.map +1 -1
- package/dist/src/piagentdir.js +13 -0
- package/dist/src/piagentdir.js.map +1 -0
- package/dist/src/pilogin.js +31 -16
- package/dist/src/pilogin.js.map +1 -1
- package/dist/src/posting-journal.js +2 -1
- package/dist/src/posting-journal.js.map +1 -1
- package/dist/src/posting-outbox.js +6 -2
- package/dist/src/posting-outbox.js.map +1 -1
- package/dist/src/posting-receipt.js +14 -1
- package/dist/src/posting-receipt.js.map +1 -1
- package/dist/src/qcrbin.js +16 -11
- package/dist/src/qcrbin.js.map +1 -1
- package/dist/src/recheck.js +2 -1
- package/dist/src/recheck.js.map +1 -1
- package/dist/src/reconcile.js +22 -2
- package/dist/src/reconcile.js.map +1 -1
- package/dist/src/reviewargs.js +122 -0
- package/dist/src/reviewargs.js.map +1 -0
- package/dist/src/reviewcli.js +7 -161
- package/dist/src/reviewcli.js.map +1 -1
- package/dist/src/reviewdetach.js +76 -11
- package/dist/src/reviewdetach.js.map +1 -1
- package/dist/src/reviewhistory.js +32 -6
- package/dist/src/reviewhistory.js.map +1 -1
- package/dist/src/reviewnow.js +45 -0
- package/dist/src/reviewnow.js.map +1 -0
- package/dist/src/scancli.js +39 -691
- package/dist/src/scancli.js.map +1 -1
- package/dist/src/selfimprove.js +66 -0
- package/dist/src/selfimprove.js.map +1 -0
- package/dist/src/setup/adapters.js +5 -223
- package/dist/src/setup/adapters.js.map +1 -1
- package/dist/src/setup/caserunner.js +15 -249
- package/dist/src/setup/caserunner.js.map +1 -1
- package/dist/src/setup/engine.js +32 -341
- package/dist/src/setup/engine.js.map +1 -1
- package/dist/src/setup/facts.js +3 -592
- package/dist/src/setup/facts.js.map +1 -1
- package/dist/src/setup/findings.js +3 -947
- package/dist/src/setup/findings.js.map +1 -1
- package/dist/src/setup/presentation.js +3 -8
- package/dist/src/setup/presentation.js.map +1 -1
- package/dist/src/setup/scan.js +3 -724
- package/dist/src/setup/scan.js.map +1 -1
- package/dist/src/setup/scanbuild.js +9 -92
- package/dist/src/setup/scanbuild.js.map +1 -1
- package/dist/src/setup/scanlease.js +3 -250
- package/dist/src/setup/scanlease.js.map +1 -1
- package/dist/src/setup/scanreport.js +3 -288
- package/dist/src/setup/scanreport.js.map +1 -1
- package/dist/src/setup/scanrun.js +3 -1732
- package/dist/src/setup/scanrun.js.map +1 -1
- package/dist/src/setup/scantree.js +3 -256
- package/dist/src/setup/scantree.js.map +1 -1
- package/dist/src/setup/stage2request.js +3 -258
- package/dist/src/setup/stage2request.js.map +1 -1
- package/dist/src/setup/unitcut.js +3 -436
- package/dist/src/setup/unitcut.js.map +1 -1
- package/dist/src/state.js +2 -0
- package/dist/src/state.js.map +1 -1
- package/dist/src/statemachine.js +4 -1
- package/dist/src/statemachine.js.map +1 -1
- package/dist/src/takeover.js +1 -0
- package/dist/src/takeover.js.map +1 -1
- package/dist/src/takeoverpi.js +15 -1
- package/dist/src/takeoverpi.js.map +1 -1
- package/dist/src/tui/app.js +49 -0
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/board.js +88 -12
- package/dist/src/tui/board.js.map +1 -1
- package/dist/src/tui/cmdbar.js +4 -1
- package/dist/src/tui/cmdbar.js.map +1 -1
- package/dist/src/tui/companion.js +76 -11
- package/dist/src/tui/companion.js.map +1 -1
- package/dist/src/tui/connect.js +7 -1
- package/dist/src/tui/connect.js.map +1 -1
- package/dist/src/tui/deploytab.js +2 -2
- package/dist/src/tui/deploytab.js.map +1 -1
- package/dist/src/tui/filters.js +5 -2
- package/dist/src/tui/filters.js.map +1 -1
- package/dist/src/tui/ghread.js +61 -5
- package/dist/src/tui/ghread.js.map +1 -1
- package/dist/src/tui/index.js +109 -20
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/memforward.js +39 -2
- package/dist/src/tui/memforward.js.map +1 -1
- package/dist/src/tui/memory.js +3 -16
- package/dist/src/tui/memory.js.map +1 -1
- package/dist/src/tui/memoryurl.js +22 -0
- package/dist/src/tui/memoryurl.js.map +1 -0
- package/dist/src/tui/model.js +25 -0
- package/dist/src/tui/model.js.map +1 -1
- package/dist/src/tui/prpause.js +7 -0
- package/dist/src/tui/prpause.js.map +1 -1
- package/dist/src/tui/remote.js +7 -1
- package/dist/src/tui/remote.js.map +1 -1
- package/dist/src/tui/route.js +143 -0
- package/dist/src/tui/route.js.map +1 -0
- package/dist/src/tui/setupstate.js +32 -0
- package/dist/src/tui/setupstate.js.map +1 -0
- package/dist/src/tui/sshtriage.js +102 -5
- package/dist/src/tui/sshtriage.js.map +1 -1
- package/dist/src/tui/theme.js +2 -1
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/unwedge.js +2 -12
- package/dist/src/tui/unwedge.js.map +1 -1
- package/dist/src/verdicts.js +17 -5
- package/dist/src/verdicts.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/src/webhook.js +12 -1
- package/dist/src/webhook.js.map +1 -1
- package/dist/src/wire.js +34 -8
- package/dist/src/wire.js.map +1 -1
- package/dist/src/workerworld.js +11 -1
- package/dist/src/workerworld.js.map +1 -1
- package/docker/README.md +1 -1
- package/docker/companion/entrypoint.sh +20 -1
- package/docker/entrypoint.sh +57 -6
- package/docker-compose.yml +16 -1
- package/extensions/cli/home.ts +14 -0
- package/extensions/cli/login-route.ts +10 -0
- package/extensions/cli/selfimprove.ts +18 -0
- package/extensions/home.ts +484 -0
- package/extensions/login-route.ts +220 -0
- package/extensions/onboarding.ts +41 -11
- package/extensions/selfimprove.ts +65 -0
- package/extensions/setup-scan.ts +79 -766
- package/extensions/setup.ts +14 -70
- package/package.json +6 -4
- package/prompts/onboarding.md +58 -18
- package/schemas/review-result.v1.json +60 -0
- package/scripts/deploy.sh +8 -6
- package/scripts/mint-token.sh +25 -4
- package/scripts/qcr-host.sh +28 -5
- package/scripts/vm-ghcr-login.sh +7 -4
- package/src/archive/restore.ts +18 -21
- package/src/botworker.ts +13 -2
- package/src/channelfs.ts +3 -26
- package/src/ciretry.ts +2 -1
- package/src/cli.ts +59 -67
- package/src/cliops.ts +3 -2
- package/src/commands.ts +28 -2
- package/src/config.ts +62 -4
- package/src/daemon.ts +58 -7
- package/src/debuground.ts +3 -0
- package/src/debugroundpi.ts +12 -1
- package/src/dispatch.ts +5 -4
- package/src/engine/caserunner-sdk.ts +29 -314
- package/src/engine/debugpi.ts +17 -5
- package/src/execboundary.ts +16 -4
- package/src/github.ts +57 -15
- package/src/githubtoken.ts +435 -0
- package/src/home/adapters.ts +418 -0
- package/src/home/advanced.ts +421 -0
- package/src/home/advancedtools.ts +96 -0
- package/src/home/autoreview.ts +385 -0
- package/src/home/daemonstatus.ts +55 -0
- package/src/home/devicelogin.ts +107 -0
- package/src/home/launch.ts +257 -0
- package/src/home/loginowner.ts +248 -0
- package/src/home/memory.ts +176 -0
- package/src/home/model.ts +965 -0
- package/src/home/panel.ts +666 -0
- package/src/home/ports.ts +338 -0
- package/src/home/review.ts +206 -0
- package/src/home/reviews.ts +565 -0
- package/src/home/setup.ts +689 -0
- package/src/home/setupadapters.ts +217 -0
- package/src/home/setupcard.ts +288 -0
- package/src/home/setuptools.ts +57 -0
- package/src/home/spend.ts +194 -0
- package/src/home/switches.ts +293 -0
- package/src/home/switchon.ts +554 -0
- package/src/home/toolnames.ts +46 -0
- package/src/home/tune.ts +405 -0
- package/src/home/words.ts +8 -0
- package/src/homes.ts +17 -0
- package/src/install.ts +1 -1
- package/src/ipc/workerspec.ts +15 -0
- package/src/live/publish.ts +4 -1
- package/src/livecli.ts +6 -1
- package/src/loginhint.ts +8 -3
- package/src/loginrefresh/handover.ts +138 -0
- package/src/loginrefresh/lock.ts +72 -3
- package/src/loginrefresh/pirefresh.ts +3 -0
- package/src/loginrefresh/refresher.ts +34 -5
- package/src/loginrefresh/supervisor.ts +25 -2
- package/src/npmverbs.ts +55 -13
- package/src/onboard/choices.ts +40 -4
- package/src/onboard/engine.ts +70 -421
- package/src/onboard/pipin.ts +31 -0
- package/src/onboard/stepforward.ts +61 -0
- package/src/onboard/steps/appslug.ts +4 -1
- package/src/onboard/steps/bringup.ts +3 -2
- package/src/onboard/steps/compose.ts +31 -0
- package/src/onboard/steps/configfill.ts +144 -40
- package/src/onboard/steps/githubaccount.ts +716 -0
- package/src/onboard/steps/githubapp.ts +92 -8
- package/src/onboard/steps/golive.ts +2 -0
- package/src/onboard/steps/index.ts +11 -0
- package/src/onboard/steps/ingress.ts +98 -31
- package/src/onboard/steps/llmauth.ts +114 -29
- package/src/onboard/steps/loginshare.ts +258 -0
- package/src/onboard/steps/memory.ts +76 -3
- package/src/onboard/steps/proof.ts +473 -55
- package/src/onboard/steps/repoconfig.ts +85 -0
- package/src/onboard/steps/topology.ts +7 -6
- package/src/onboard/steps/transport.ts +15 -0
- package/src/onboard/steps/tuiroute.ts +119 -0
- package/src/onboard/steps/verifyup.ts +20 -1
- package/src/onboard/toolnames.ts +34 -0
- package/src/operatorwrite.ts +25 -0
- package/src/outcomes.ts +8 -1
- package/src/piagentdir.ts +12 -0
- package/src/pilogin.ts +32 -16
- package/src/posting-journal.ts +6 -1
- package/src/posting-outbox.ts +10 -2
- package/src/posting-receipt.ts +17 -0
- package/src/qcrbin.ts +16 -11
- package/src/recheck.ts +2 -1
- package/src/reconcile.ts +29 -3
- package/src/reviewargs.ts +119 -0
- package/src/reviewcli.ts +6 -167
- package/src/reviewdetach.ts +107 -13
- package/src/reviewhistory.ts +20 -6
- package/src/reviewnow.ts +76 -0
- package/src/scancli.ts +75 -826
- package/src/selfimprove.ts +90 -0
- package/src/setup/adapters.ts +13 -221
- package/src/setup/caserunner.ts +34 -273
- package/src/setup/engine.ts +62 -496
- package/src/setup/facts.ts +3 -627
- package/src/setup/findings.ts +3 -1264
- package/src/setup/presentation.ts +3 -18
- package/src/setup/scan.ts +3 -1033
- package/src/setup/scanbuild.ts +20 -114
- package/src/setup/scanlease.ts +3 -297
- package/src/setup/scanreport.ts +3 -373
- package/src/setup/scanrun.ts +3 -2268
- package/src/setup/scantree.ts +3 -259
- package/src/setup/stage2request.ts +3 -347
- package/src/setup/unitcut.ts +3 -523
- package/src/state.ts +43 -0
- package/src/statemachine.ts +4 -1
- package/src/takeover.ts +5 -0
- package/src/takeoverpi.ts +16 -2
- package/src/tui/app.ts +47 -0
- package/src/tui/board.ts +111 -14
- package/src/tui/cmdbar.ts +4 -1
- package/src/tui/companion.ts +80 -11
- package/src/tui/connect.ts +7 -1
- package/src/tui/deploytab.ts +2 -2
- package/src/tui/filters.ts +7 -3
- package/src/tui/ghread.ts +74 -7
- package/src/tui/index.ts +117 -23
- package/src/tui/memforward.ts +52 -3
- package/src/tui/memory.ts +3 -15
- package/src/tui/memoryurl.ts +22 -0
- package/src/tui/model.ts +36 -2
- package/src/tui/prpause.ts +11 -2
- package/src/tui/remote.ts +9 -1
- package/src/tui/route.ts +173 -0
- package/src/tui/setupstate.ts +56 -0
- package/src/tui/sshtriage.ts +127 -6
- package/src/tui/theme.ts +2 -1
- package/src/tui/unwedge.ts +2 -14
- package/src/verdicts.ts +23 -5
- package/src/version.ts +1 -1
- package/src/webhook.ts +10 -1
- package/src/wire.ts +42 -9
- package/src/workerworld.ts +16 -2
- package/dist/src/live/projection.js +0 -450
- package/dist/src/live/projection.js.map +0 -1
- package/dist/src/live/read.js +0 -60
- package/dist/src/live/read.js.map +0 -1
- package/dist/src/onboard/launch.js +0 -83
- package/dist/src/onboard/launch.js.map +0 -1
- package/dist/src/setup/ledger.js +0 -207
- package/dist/src/setup/ledger.js.map +0 -1
- package/dist/src/setup/stage2.js +0 -617
- package/dist/src/setup/stage2.js.map +0 -1
- package/dist/src/setup/textsniff.js +0 -89
- package/dist/src/setup/textsniff.js.map +0 -1
- package/src/live/projection.ts +0 -491
- package/src/live/read.ts +0 -86
- package/src/onboard/launch.ts +0 -115
- package/src/setup/ledger.ts +0 -324
- package/src/setup/stage2.ts +0 -926
- package/src/setup/textsniff.ts +0 -95
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
// The home's real ports (src/home/ports.ts), and the one function that turns
|
|
2
|
+
// a process's environment into the home's options: the env shim
|
|
3
|
+
// (extensions/cli/home.ts) calls `homeOptionsFromEnv(process.env)`.
|
|
4
|
+
//
|
|
5
|
+
// pi login the auth file of the pi home the chat runs in: pi's own
|
|
6
|
+
// agent dir ($PI_CODING_AGENT_DIR, else ~/.pi/agent), read the
|
|
7
|
+
// way pi reads it, so the login line and the chat cannot
|
|
8
|
+
// disagree. Provider ids only, never a token.
|
|
9
|
+
// GitHub `gh`: the account, the repository's open PRs, the browser.
|
|
10
|
+
// repository `[github] repo` of the install's config.toml, read again on
|
|
11
|
+
// every refresh.
|
|
12
|
+
// clock Date.now.
|
|
13
|
+
// reviews the app's detached review runs, its review state and the
|
|
14
|
+
// daemon's status (src/home/reviews.ts), as the person: their
|
|
15
|
+
// environment, so the run uses their own pi login.
|
|
16
|
+
//
|
|
17
|
+
// auto-review, memory
|
|
18
|
+
// this machine's compose stack (src/home/autoreview.ts,
|
|
19
|
+
// src/home/memory.ts): the containers, the daemon's own
|
|
20
|
+
// status.json, and the switches over the wizard's steps.
|
|
21
|
+
// login owner
|
|
22
|
+
// the same pi agent dir: whether auto-review's refresher holds
|
|
23
|
+
// the login (its lock beside auth.json, shared into the stack)
|
|
24
|
+
// and whether its record says the login expired
|
|
25
|
+
// (src/home/loginowner.ts).
|
|
26
|
+
//
|
|
27
|
+
// spend the app's detached runs' costs and the daemon's recorded
|
|
28
|
+
// costs (src/home/spend.ts): unknown when either can't be read.
|
|
29
|
+
//
|
|
30
|
+
// The stack these drive is a compose project with the wizard's state under it
|
|
31
|
+
// (`homeStackRoot`): a checkout or the image is its own, an app installed by
|
|
32
|
+
// a package manager gets one in its state home, never inside the package.
|
|
33
|
+
import { execFile } from "node:child_process";
|
|
34
|
+
import { cpSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
35
|
+
import { join } from "node:path";
|
|
36
|
+
import { parse } from "smol-toml";
|
|
37
|
+
import { loginSummary } from "@quickchatai/pi-quickreview/src/engine/auth.js";
|
|
38
|
+
import { assetRoot } from "@quickchatai/pi-quickreview/src/assetroot.js";
|
|
39
|
+
import { postSavedReview } from "@quickchatai/pi-quickreview/src/savedpost.js";
|
|
40
|
+
import { HOME_DEFAULTS, sandboxRoot } from "../config.js";
|
|
41
|
+
import { loadOneShotConfig, locateConfig, stackRoot, stateHome } from "../homes.js";
|
|
42
|
+
import { openStepMemoryForward } from "../onboard/stepforward.js";
|
|
43
|
+
import { composeAutoReview, serviceState } from "./autoreview.js";
|
|
44
|
+
import { hostLoginOwner } from "./loginowner.js";
|
|
45
|
+
import { DAEMON_SERVICE } from "../onboard/steps/compose.js";
|
|
46
|
+
import { daemonSnapshot } from "./daemonstatus.js";
|
|
47
|
+
import { composeMemory } from "./memory.js";
|
|
48
|
+
import { realSpendPort } from "./spend.js";
|
|
49
|
+
import { composeAdvanced } from "./advanced.js";
|
|
50
|
+
import { checkoutTune } from "./tune.js";
|
|
51
|
+
import { stepRunner } from "./switchon.js";
|
|
52
|
+
import { piAgentDir } from "../piagentdir.js";
|
|
53
|
+
import { qcrChild, realDetachSeams, reviewsPort } from "./reviews.js";
|
|
54
|
+
import { known, unknown, } from "./ports.js";
|
|
55
|
+
/** The launch hands the child pi its model and tool set in these. */
|
|
56
|
+
export const HOME_MODEL_ENV = "QCR_HOME_MODEL";
|
|
57
|
+
export const HOME_TOOLS_ENV = "QCR_HOME_TOOLS";
|
|
58
|
+
export const execRunner = {
|
|
59
|
+
run: (cmd, args) => new Promise((resolve) => {
|
|
60
|
+
execFile(cmd, [...args], { timeout: 30_000, maxBuffer: 16 << 20 }, (err, stdout, stderr) => {
|
|
61
|
+
const e = err;
|
|
62
|
+
resolve({
|
|
63
|
+
code: e === null ? 0 : typeof e.code === "number" ? e.code : 1,
|
|
64
|
+
stdout: String(stdout),
|
|
65
|
+
stderr: e && !stderr ? String(e.message) : String(stderr),
|
|
66
|
+
...(e?.code === "ENOENT" ? { missing: true } : {}),
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
const firstLine = (s) => s.trim().split("\n")[0]?.trim() || "no output";
|
|
72
|
+
const isMissingFile = (err) => err?.code === "ENOENT";
|
|
73
|
+
const message = (err) => (err instanceof Error ? err.message : String(err));
|
|
74
|
+
/** The providers pi holds a login for in `agentDir`. No auth file is no
|
|
75
|
+
* login; a file that cannot be read or parsed is unknown. */
|
|
76
|
+
export function piLoginPort(agentDir, read = (p) => readFileSync(p, "utf8")) {
|
|
77
|
+
return {
|
|
78
|
+
providers: async () => {
|
|
79
|
+
const path = join(agentDir, "auth.json");
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = read(path);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return isMissingFile(err) ? known([]) : unknown(`can't read ${path}: ${message(err)}`);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return known(Object.keys(loginSummary(raw)));
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
return unknown(`can't parse ${path}: ${message(err)}`);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** gh's words for "you are not signed in". */
|
|
97
|
+
const SIGNED_OUT = /gh auth login|not logged in|authentication required|HTTP 401|bad credentials/i;
|
|
98
|
+
const PR_FIELDS = "number,title,author,updatedAt,isDraft,additions,deletions,changedFiles,headRefName,headRefOid";
|
|
99
|
+
export function githubPort(runner) {
|
|
100
|
+
const why = (r) => r.missing ? "gh is not installed" : `gh failed: ${firstLine(r.stderr)}`;
|
|
101
|
+
return {
|
|
102
|
+
user: async () => {
|
|
103
|
+
const r = await runner.run("gh", ["api", "user", "--jq", ".login"]);
|
|
104
|
+
if (r.code === 0 && r.stdout.trim() !== "")
|
|
105
|
+
return known(r.stdout.trim());
|
|
106
|
+
if (!r.missing && SIGNED_OUT.test(r.stderr))
|
|
107
|
+
return known(null);
|
|
108
|
+
return unknown(why(r));
|
|
109
|
+
},
|
|
110
|
+
openPulls: async (repo) => {
|
|
111
|
+
const r = await runner.run("gh", [
|
|
112
|
+
"pr",
|
|
113
|
+
"list",
|
|
114
|
+
"-R",
|
|
115
|
+
repo,
|
|
116
|
+
"--state",
|
|
117
|
+
"open",
|
|
118
|
+
"--limit",
|
|
119
|
+
"200",
|
|
120
|
+
"--json",
|
|
121
|
+
PR_FIELDS,
|
|
122
|
+
]);
|
|
123
|
+
if (r.code !== 0)
|
|
124
|
+
return unknown(why(r));
|
|
125
|
+
try {
|
|
126
|
+
return known(parsePulls(r.stdout));
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
return unknown(`gh's answer is not a pull request list: ${message(err)}`);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
openInBrowser: async (repo, pr) => {
|
|
133
|
+
const r = await runner.run("gh", ["pr", "view", String(pr), "-R", repo, "--web"]);
|
|
134
|
+
return r.code === 0 ? { ok: true } : { ok: false, why: why(r) };
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** `gh pr list --json` rows as OpenPulls; throws on a row of the wrong shape. */
|
|
139
|
+
export function parsePulls(json) {
|
|
140
|
+
const rows = JSON.parse(json);
|
|
141
|
+
if (!Array.isArray(rows))
|
|
142
|
+
throw new Error("not an array");
|
|
143
|
+
return rows.map((r) => {
|
|
144
|
+
if (typeof r["number"] !== "number" || typeof r["title"] !== "string")
|
|
145
|
+
throw new Error("a row without a number or title");
|
|
146
|
+
const author = r["author"];
|
|
147
|
+
const num = (k) => (typeof r[k] === "number" ? r[k] : 0);
|
|
148
|
+
return {
|
|
149
|
+
number: r["number"],
|
|
150
|
+
title: r["title"],
|
|
151
|
+
author: typeof author?.login === "string" ? author.login : "ghost",
|
|
152
|
+
updatedAt: typeof r["updatedAt"] === "string" ? r["updatedAt"] : "",
|
|
153
|
+
isDraft: r["isDraft"] === true,
|
|
154
|
+
additions: num("additions"),
|
|
155
|
+
deletions: num("deletions"),
|
|
156
|
+
changedFiles: num("changedFiles"),
|
|
157
|
+
headRefName: typeof r["headRefName"] === "string" ? r["headRefName"] : "",
|
|
158
|
+
headSha: typeof r["headRefOid"] === "string" ? r["headRefOid"] : "",
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/** `[github] repo` of the config at `configPath()`, located again on every
|
|
163
|
+
* read. No config file, or an empty repo, is no repository. */
|
|
164
|
+
export function repoPort(configPath, read = (p) => readFileSync(p, "utf8")) {
|
|
165
|
+
return {
|
|
166
|
+
repo: async () => {
|
|
167
|
+
let path;
|
|
168
|
+
let raw;
|
|
169
|
+
try {
|
|
170
|
+
path = configPath();
|
|
171
|
+
raw = read(path);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
return isMissingFile(err) ? known(null) : unknown(message(err));
|
|
175
|
+
}
|
|
176
|
+
let repo;
|
|
177
|
+
try {
|
|
178
|
+
repo = parse(raw)["github"]?.["repo"];
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
return unknown(`${path} is not valid TOML: ${message(err)}`);
|
|
182
|
+
}
|
|
183
|
+
if (repo === undefined || repo === "")
|
|
184
|
+
return known(null);
|
|
185
|
+
return typeof repo === "string" && /^[\w.-]+\/[\w.-]+$/.test(repo.trim())
|
|
186
|
+
? known(repo.trim())
|
|
187
|
+
: unknown(`${path}: [github] repo is not "owner/name" (${JSON.stringify(repo)})`);
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const NOT_YET = "the home cannot read it yet";
|
|
192
|
+
const notYet = async () => unknown(NOT_YET);
|
|
193
|
+
/** The ports that have no adapter yet: each answers unknown. */
|
|
194
|
+
export const unbuiltPorts = {
|
|
195
|
+
autoReview: { status: notYet },
|
|
196
|
+
memory: { status: notYet },
|
|
197
|
+
spend: { totals: notYet },
|
|
198
|
+
};
|
|
199
|
+
/** The reviewer as the person: the app's own bin and registry, the install's
|
|
200
|
+
* state home and config, in the environment the home runs in; auto-review's
|
|
201
|
+
* rounds from the daemon of the compose stack at `stack.root`. */
|
|
202
|
+
export function realReviewsPort(env, stack) {
|
|
203
|
+
const state = stateHome(env);
|
|
204
|
+
const appRoot = sandboxRoot();
|
|
205
|
+
// the home's own working directory (src/home/launch.ts `homePaths`)
|
|
206
|
+
const cwd = join(state, "home");
|
|
207
|
+
const proc = { execPath: process.execPath, bin: join(appRoot, "bin", "qcr.js"), cwd, env };
|
|
208
|
+
const config = () => loadOneShotConfig({ root: assetRoot(), env }).cfg;
|
|
209
|
+
return reviewsPort({
|
|
210
|
+
registry: join(state, "review", "detached"),
|
|
211
|
+
reportsDir: join(cwd, "reviews"),
|
|
212
|
+
reviewHome: join(state, "review"),
|
|
213
|
+
snapshot: () => daemonSnapshot(stack.runner, stack.root),
|
|
214
|
+
qcr: qcrChild(proc),
|
|
215
|
+
detach: realDetachSeams(proc),
|
|
216
|
+
post: async (file) => {
|
|
217
|
+
const r = await postSavedReview(file, {
|
|
218
|
+
config: config(),
|
|
219
|
+
dryrunDir: join(state, "review", "dryrun"),
|
|
220
|
+
github: { env },
|
|
221
|
+
});
|
|
222
|
+
return { failed: r.failed, line: r.line };
|
|
223
|
+
},
|
|
224
|
+
dryRun: () => config().dry_run,
|
|
225
|
+
now: () => Date.now(),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/** The wizard's adapters for switch-on's steps, over the app root. */
|
|
229
|
+
export function stepAdapters(root, configPath) {
|
|
230
|
+
return (log) => ({
|
|
231
|
+
fetch: (input, init) => fetch(input, init),
|
|
232
|
+
runner: stepRunner,
|
|
233
|
+
clock: () => new Date(),
|
|
234
|
+
host: {
|
|
235
|
+
nodeVersion: process.version,
|
|
236
|
+
uid: typeof process.getuid === "function" ? process.getuid() : null,
|
|
237
|
+
inContainer: existsSync("/.dockerenv"),
|
|
238
|
+
},
|
|
239
|
+
paths: { stateDir: join(root, "state"), configPath: configPath() },
|
|
240
|
+
log,
|
|
241
|
+
memoryForward: (req) => openStepMemoryForward(req),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
export function realHomeAdapters(o) {
|
|
245
|
+
const repo = repoPort(o.configPath);
|
|
246
|
+
const stack = o.root === undefined
|
|
247
|
+
? null
|
|
248
|
+
: {
|
|
249
|
+
root: o.root,
|
|
250
|
+
configPath: o.configPath,
|
|
251
|
+
runner: stepRunner,
|
|
252
|
+
stepAdapters: stepAdapters(o.root, o.configPath),
|
|
253
|
+
};
|
|
254
|
+
const daemonRuns = stack
|
|
255
|
+
? async () => {
|
|
256
|
+
const s = await serviceState(stack.runner, stack.root, DAEMON_SERVICE);
|
|
257
|
+
return s.kind === "known" ? s.value !== "stopped" : null;
|
|
258
|
+
}
|
|
259
|
+
: undefined;
|
|
260
|
+
return {
|
|
261
|
+
login: piLoginPort(o.agentDir),
|
|
262
|
+
loginOwner: hostLoginOwner({
|
|
263
|
+
loginDir: o.agentDir,
|
|
264
|
+
now: () => Date.now(),
|
|
265
|
+
...(daemonRuns ? { daemonRuns } : {}),
|
|
266
|
+
}),
|
|
267
|
+
github: githubPort(o.runner ?? execRunner),
|
|
268
|
+
repo,
|
|
269
|
+
clock: { now: () => Date.now() },
|
|
270
|
+
reviews: o.reviews,
|
|
271
|
+
...unbuiltPorts,
|
|
272
|
+
...(o.spend ? { spend: o.spend } : {}),
|
|
273
|
+
...(stack
|
|
274
|
+
? {
|
|
275
|
+
// switch-on shares the home's login with the stack (src/onboard/steps/loginshare.ts)
|
|
276
|
+
autoReview: composeAutoReview({ ...stack, loginDir: o.agentDir, now: () => Date.now() }),
|
|
277
|
+
memory: composeMemory({
|
|
278
|
+
...stack,
|
|
279
|
+
repo: async () => {
|
|
280
|
+
const r = await repo.repo();
|
|
281
|
+
return r.kind === "known" ? r.value : null;
|
|
282
|
+
},
|
|
283
|
+
}),
|
|
284
|
+
}
|
|
285
|
+
: {}),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/** What a compose project needs from the app: the stack, the tunnel
|
|
289
|
+
* wrappers' build context, and the config template the steps fill from. */
|
|
290
|
+
export const STACK_FILES = [
|
|
291
|
+
"docker-compose.yml",
|
|
292
|
+
join("docker", "tunnel"),
|
|
293
|
+
"config.example.toml",
|
|
294
|
+
];
|
|
295
|
+
/** The compose project the home's switches drive: src/homes.ts `stackRoot`,
|
|
296
|
+
* the one rule every surface that reads the stack uses. */
|
|
297
|
+
export function homeStackRoot(env, pkgRoot = sandboxRoot()) {
|
|
298
|
+
return stackRoot(env, pkgRoot);
|
|
299
|
+
}
|
|
300
|
+
/** Give a stack outside the package the package's own STACK_FILES, again on
|
|
301
|
+
* every launch, so an update brings the stack that matches the app. The
|
|
302
|
+
* person's state there (`.env`, `state/`) is never touched. A copy that
|
|
303
|
+
* fails is left to the compose-file check, which says what is missing. */
|
|
304
|
+
export function seedStack(root, pkgRoot) {
|
|
305
|
+
if (root === pkgRoot)
|
|
306
|
+
return;
|
|
307
|
+
for (const f of STACK_FILES) {
|
|
308
|
+
const from = join(pkgRoot, f);
|
|
309
|
+
if (!existsSync(from))
|
|
310
|
+
continue;
|
|
311
|
+
try {
|
|
312
|
+
mkdirSync(root, { recursive: true });
|
|
313
|
+
cpSync(from, join(root, f), { recursive: true, force: true });
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// the compose-file check names it
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/** The home's options from a process's environment: the env shim's one call. */
|
|
321
|
+
export function homeOptionsFromEnv(env) {
|
|
322
|
+
const model = (env[HOME_MODEL_ENV] ?? "").trim() || HOME_DEFAULTS.model;
|
|
323
|
+
const tools = env[HOME_TOOLS_ENV] === "full" ? "full" : "reviewer";
|
|
324
|
+
const root = homeStackRoot(env);
|
|
325
|
+
seedStack(root, sandboxRoot());
|
|
326
|
+
const configPath = () => locateConfig({ env }).path;
|
|
327
|
+
return {
|
|
328
|
+
adapters: realHomeAdapters({
|
|
329
|
+
agentDir: piAgentDir(env),
|
|
330
|
+
configPath,
|
|
331
|
+
reviews: realReviewsPort(env, { root, runner: stepRunner }),
|
|
332
|
+
root,
|
|
333
|
+
spend: realSpendPort({
|
|
334
|
+
registry: join(stateHome(env), "review", "detached"),
|
|
335
|
+
root,
|
|
336
|
+
runner: stepRunner,
|
|
337
|
+
}),
|
|
338
|
+
}),
|
|
339
|
+
model,
|
|
340
|
+
tools,
|
|
341
|
+
tune: checkoutTune({ env, root: assetRoot, configPath, runner: stepRunner }),
|
|
342
|
+
advanced: composeAdvanced({
|
|
343
|
+
root,
|
|
344
|
+
env,
|
|
345
|
+
stepAdapters: stepAdapters(root, configPath),
|
|
346
|
+
}),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/home/adapters.ts"],"names":[],"mappings":"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"}
|