@quickchatai/quickreview 1.2.0 → 1.3.2

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.
Files changed (350) hide show
  1. package/README.md +116 -53
  2. package/bin/qcr.js +1 -1
  3. package/config.example.toml +25 -7
  4. package/deploy/ansible/README.md +20 -12
  5. package/deploy/ansible/inventory.example.ini +1 -1
  6. package/deploy/collect-secrets.sh +1 -1
  7. package/deploy/qcr-update.sh +1 -1
  8. package/dist/extensions/cli/home.js +14 -0
  9. package/dist/extensions/cli/home.js.map +1 -0
  10. package/dist/extensions/cli/selfimprove.js +18 -0
  11. package/dist/extensions/cli/selfimprove.js.map +1 -0
  12. package/dist/extensions/home.js +350 -0
  13. package/dist/extensions/home.js.map +1 -0
  14. package/dist/extensions/login-route.js +1 -1
  15. package/dist/extensions/login-route.js.map +1 -1
  16. package/dist/extensions/onboarding.js +8 -7
  17. package/dist/extensions/onboarding.js.map +1 -1
  18. package/dist/extensions/selfimprove.js +49 -0
  19. package/dist/extensions/selfimprove.js.map +1 -0
  20. package/dist/extensions/setup-scan.js +23 -592
  21. package/dist/extensions/setup-scan.js.map +1 -1
  22. package/dist/extensions/setup.js +2 -47
  23. package/dist/extensions/setup.js.map +1 -1
  24. package/dist/extensions/vendor/openviking-pi/index.js +4 -0
  25. package/dist/extensions/vendor/openviking-pi/index.js.map +1 -1
  26. package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +3 -1
  27. package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -1
  28. package/dist/extensions/vendor/openviking-pi/sync.js +81 -0
  29. package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -1
  30. package/dist/src/archive/restore.js +18 -15
  31. package/dist/src/archive/restore.js.map +1 -1
  32. package/dist/src/botworker.js +13 -2
  33. package/dist/src/botworker.js.map +1 -1
  34. package/dist/src/channelfs.js +3 -26
  35. package/dist/src/channelfs.js.map +1 -1
  36. package/dist/src/cli.js +14 -50
  37. package/dist/src/cli.js.map +1 -1
  38. package/dist/src/config.js +16 -0
  39. package/dist/src/config.js.map +1 -1
  40. package/dist/src/daemon.js +33 -4
  41. package/dist/src/daemon.js.map +1 -1
  42. package/dist/src/debuground.js +1 -0
  43. package/dist/src/debuground.js.map +1 -1
  44. package/dist/src/debugroundpi.js +1 -0
  45. package/dist/src/debugroundpi.js.map +1 -1
  46. package/dist/src/engine/caserunner-sdk.js +15 -251
  47. package/dist/src/engine/caserunner-sdk.js.map +1 -1
  48. package/dist/src/home/adapters.js +349 -0
  49. package/dist/src/home/adapters.js.map +1 -0
  50. package/dist/src/home/advanced.js +318 -0
  51. package/dist/src/home/advanced.js.map +1 -0
  52. package/dist/src/home/advancedtools.js +57 -0
  53. package/dist/src/home/advancedtools.js.map +1 -0
  54. package/dist/src/home/autoreview.js +325 -0
  55. package/dist/src/home/autoreview.js.map +1 -0
  56. package/dist/src/home/daemonstatus.js +32 -0
  57. package/dist/src/home/daemonstatus.js.map +1 -0
  58. package/dist/src/home/devicelogin.js +61 -0
  59. package/dist/src/home/devicelogin.js.map +1 -0
  60. package/dist/src/home/launch.js +202 -0
  61. package/dist/src/home/launch.js.map +1 -0
  62. package/dist/src/home/loginowner.js +205 -0
  63. package/dist/src/home/loginowner.js.map +1 -0
  64. package/dist/src/home/memory.js +122 -0
  65. package/dist/src/home/memory.js.map +1 -0
  66. package/dist/src/home/model.js +811 -0
  67. package/dist/src/home/model.js.map +1 -0
  68. package/dist/src/home/panel.js +520 -0
  69. package/dist/src/home/panel.js.map +1 -0
  70. package/dist/src/home/ports.js +19 -0
  71. package/dist/src/home/ports.js.map +1 -0
  72. package/dist/src/home/review.js +163 -0
  73. package/dist/src/home/review.js.map +1 -0
  74. package/dist/src/home/reviews.js +478 -0
  75. package/dist/src/home/reviews.js.map +1 -0
  76. package/dist/src/home/setup.js +507 -0
  77. package/dist/src/home/setup.js.map +1 -0
  78. package/dist/src/home/setupadapters.js +214 -0
  79. package/dist/src/home/setupadapters.js.map +1 -0
  80. package/dist/src/home/setupcard.js +199 -0
  81. package/dist/src/home/setupcard.js.map +1 -0
  82. package/dist/src/home/setuptools.js +45 -0
  83. package/dist/src/home/setuptools.js.map +1 -0
  84. package/dist/src/home/spend.js +160 -0
  85. package/dist/src/home/spend.js.map +1 -0
  86. package/dist/src/home/switches.js +209 -0
  87. package/dist/src/home/switches.js.map +1 -0
  88. package/dist/src/home/switchon.js +439 -0
  89. package/dist/src/home/switchon.js.map +1 -0
  90. package/dist/src/home/toolnames.js +41 -0
  91. package/dist/src/home/toolnames.js.map +1 -0
  92. package/dist/src/home/tune.js +341 -0
  93. package/dist/src/home/tune.js.map +1 -0
  94. package/dist/src/home/words.js +7 -0
  95. package/dist/src/home/words.js.map +1 -0
  96. package/dist/src/homes.js +14 -0
  97. package/dist/src/homes.js.map +1 -1
  98. package/dist/src/install.js +1 -1
  99. package/dist/src/install.js.map +1 -1
  100. package/dist/src/ipc/workerspec.js +8 -0
  101. package/dist/src/ipc/workerspec.js.map +1 -1
  102. package/dist/src/ledgercheck.js +39 -10
  103. package/dist/src/ledgercheck.js.map +1 -1
  104. package/dist/src/live/publish.js +1 -1
  105. package/dist/src/live/publish.js.map +1 -1
  106. package/dist/src/livecli.js +1 -1
  107. package/dist/src/livecli.js.map +1 -1
  108. package/dist/src/loginrefresh/handover.js +121 -0
  109. package/dist/src/loginrefresh/handover.js.map +1 -0
  110. package/dist/src/loginrefresh/lock.js +54 -3
  111. package/dist/src/loginrefresh/lock.js.map +1 -1
  112. package/dist/src/loginrefresh/refresher.js +33 -5
  113. package/dist/src/loginrefresh/refresher.js.map +1 -1
  114. package/dist/src/loginrefresh/supervisor.js +18 -1
  115. package/dist/src/loginrefresh/supervisor.js.map +1 -1
  116. package/dist/src/npmverbs.js +42 -12
  117. package/dist/src/npmverbs.js.map +1 -1
  118. package/dist/src/onboard/choices.js +6 -3
  119. package/dist/src/onboard/choices.js.map +1 -1
  120. package/dist/src/onboard/engine.js +33 -292
  121. package/dist/src/onboard/engine.js.map +1 -1
  122. package/dist/src/onboard/steps/bringup.js +3 -2
  123. package/dist/src/onboard/steps/bringup.js.map +1 -1
  124. package/dist/src/onboard/steps/configfill.js +18 -7
  125. package/dist/src/onboard/steps/configfill.js.map +1 -1
  126. package/dist/src/onboard/steps/loginshare.js +213 -0
  127. package/dist/src/onboard/steps/loginshare.js.map +1 -0
  128. package/dist/src/onboard/steps/memory.js +14 -2
  129. package/dist/src/onboard/steps/memory.js.map +1 -1
  130. package/dist/src/onboard/steps/repoconfig.js +72 -0
  131. package/dist/src/onboard/steps/repoconfig.js.map +1 -0
  132. package/dist/src/onboard/toolnames.js +2 -2
  133. package/dist/src/onboard/toolnames.js.map +1 -1
  134. package/dist/src/piagentdir.js +13 -0
  135. package/dist/src/piagentdir.js.map +1 -0
  136. package/dist/src/pilogin.js +31 -16
  137. package/dist/src/pilogin.js.map +1 -1
  138. package/dist/src/qcrbin.js +16 -11
  139. package/dist/src/qcrbin.js.map +1 -1
  140. package/dist/src/reviewargs.js +122 -0
  141. package/dist/src/reviewargs.js.map +1 -0
  142. package/dist/src/reviewcli.js +7 -161
  143. package/dist/src/reviewcli.js.map +1 -1
  144. package/dist/src/reviewdetach.js +76 -11
  145. package/dist/src/reviewdetach.js.map +1 -1
  146. package/dist/src/scancli.js +39 -691
  147. package/dist/src/scancli.js.map +1 -1
  148. package/dist/src/selfimprove.js +66 -0
  149. package/dist/src/selfimprove.js.map +1 -0
  150. package/dist/src/session-command-supervisor.js +38 -9
  151. package/dist/src/session-command-supervisor.js.map +1 -1
  152. package/dist/src/setup/adapters.js +5 -223
  153. package/dist/src/setup/adapters.js.map +1 -1
  154. package/dist/src/setup/caserunner.js +15 -249
  155. package/dist/src/setup/caserunner.js.map +1 -1
  156. package/dist/src/setup/engine.js +32 -341
  157. package/dist/src/setup/engine.js.map +1 -1
  158. package/dist/src/setup/facts.js +3 -592
  159. package/dist/src/setup/facts.js.map +1 -1
  160. package/dist/src/setup/findings.js +3 -947
  161. package/dist/src/setup/findings.js.map +1 -1
  162. package/dist/src/setup/presentation.js +3 -8
  163. package/dist/src/setup/presentation.js.map +1 -1
  164. package/dist/src/setup/scan.js +3 -724
  165. package/dist/src/setup/scan.js.map +1 -1
  166. package/dist/src/setup/scanbuild.js +9 -92
  167. package/dist/src/setup/scanbuild.js.map +1 -1
  168. package/dist/src/setup/scanlease.js +3 -250
  169. package/dist/src/setup/scanlease.js.map +1 -1
  170. package/dist/src/setup/scanreport.js +3 -288
  171. package/dist/src/setup/scanreport.js.map +1 -1
  172. package/dist/src/setup/scanrun.js +3 -1732
  173. package/dist/src/setup/scanrun.js.map +1 -1
  174. package/dist/src/setup/scantree.js +3 -256
  175. package/dist/src/setup/scantree.js.map +1 -1
  176. package/dist/src/setup/stage2request.js +3 -258
  177. package/dist/src/setup/stage2request.js.map +1 -1
  178. package/dist/src/setup/unitcut.js +3 -436
  179. package/dist/src/setup/unitcut.js.map +1 -1
  180. package/dist/src/state.js +75 -9
  181. package/dist/src/state.js.map +1 -1
  182. package/dist/src/takeover.js +1 -0
  183. package/dist/src/takeover.js.map +1 -1
  184. package/dist/src/takeoverpi.js +2 -1
  185. package/dist/src/takeoverpi.js.map +1 -1
  186. package/dist/src/tui/alerts.js +4 -1
  187. package/dist/src/tui/alerts.js.map +1 -1
  188. package/dist/src/tui/board.js +2 -2
  189. package/dist/src/tui/board.js.map +1 -1
  190. package/dist/src/tui/companion.js +2 -1
  191. package/dist/src/tui/companion.js.map +1 -1
  192. package/dist/src/tui/deploytab.js +2 -2
  193. package/dist/src/tui/deploytab.js.map +1 -1
  194. package/dist/src/tui/index.js +9 -6
  195. package/dist/src/tui/index.js.map +1 -1
  196. package/dist/src/tui/memory.js +3 -16
  197. package/dist/src/tui/memory.js.map +1 -1
  198. package/dist/src/tui/memoryurl.js +22 -0
  199. package/dist/src/tui/memoryurl.js.map +1 -0
  200. package/dist/src/tui/remote.js +1 -1
  201. package/dist/src/tui/remote.js.map +1 -1
  202. package/dist/src/tui/route.js +2 -2
  203. package/dist/src/tui/route.js.map +1 -1
  204. package/dist/src/tui/setupstate.js +8 -5
  205. package/dist/src/tui/setupstate.js.map +1 -1
  206. package/dist/src/tui/sshtriage.js +1 -1
  207. package/dist/src/tui/sshtriage.js.map +1 -1
  208. package/dist/src/verdicts.js +12 -0
  209. package/dist/src/verdicts.js.map +1 -1
  210. package/dist/src/wire.js +9 -4
  211. package/dist/src/wire.js.map +1 -1
  212. package/dist/src/workerbreaker.js +32 -5
  213. package/dist/src/workerbreaker.js.map +1 -1
  214. package/dist/src/workerworld.js +4 -0
  215. package/dist/src/workerworld.js.map +1 -1
  216. package/docker/README.md +1 -1
  217. package/docker/entrypoint.sh +40 -6
  218. package/docker-compose.yml +16 -1
  219. package/extensions/cli/home.ts +14 -0
  220. package/extensions/cli/selfimprove.ts +18 -0
  221. package/extensions/home.ts +484 -0
  222. package/extensions/login-route.ts +1 -1
  223. package/extensions/onboarding.ts +8 -7
  224. package/extensions/selfimprove.ts +65 -0
  225. package/extensions/setup-scan.ts +79 -766
  226. package/extensions/setup.ts +14 -70
  227. package/extensions/vendor/openviking-pi/NOTICE +5 -0
  228. package/extensions/vendor/openviking-pi/README.md +39 -5
  229. package/extensions/vendor/openviking-pi/index.ts +4 -0
  230. package/extensions/vendor/openviking-pi/patches/0014-one-turn-sync-in-flight.patch +239 -0
  231. package/extensions/vendor/openviking-pi/qcr-hooks.ts +3 -1
  232. package/extensions/vendor/openviking-pi/sync.ts +80 -0
  233. package/extensions/vendor/openviking-pi/upstream.json +2 -1
  234. package/package.json +6 -4
  235. package/prompts/onboarding.md +8 -7
  236. package/schemas/review-result.v1.json +60 -0
  237. package/scripts/deploy.sh +8 -6
  238. package/scripts/qcr-host.sh +28 -5
  239. package/scripts/vm-ghcr-login.sh +7 -4
  240. package/src/archive/restore.ts +18 -21
  241. package/src/botworker.ts +13 -2
  242. package/src/channelfs.ts +3 -26
  243. package/src/cli.ts +13 -54
  244. package/src/config.ts +38 -0
  245. package/src/daemon.ts +34 -4
  246. package/src/debuground.ts +3 -0
  247. package/src/debugroundpi.ts +1 -0
  248. package/src/engine/caserunner-sdk.ts +29 -314
  249. package/src/home/adapters.ts +418 -0
  250. package/src/home/advanced.ts +421 -0
  251. package/src/home/advancedtools.ts +96 -0
  252. package/src/home/autoreview.ts +385 -0
  253. package/src/home/daemonstatus.ts +55 -0
  254. package/src/home/devicelogin.ts +107 -0
  255. package/src/home/launch.ts +257 -0
  256. package/src/home/loginowner.ts +248 -0
  257. package/src/home/memory.ts +176 -0
  258. package/src/home/model.ts +965 -0
  259. package/src/home/panel.ts +666 -0
  260. package/src/home/ports.ts +338 -0
  261. package/src/home/review.ts +206 -0
  262. package/src/home/reviews.ts +565 -0
  263. package/src/home/setup.ts +689 -0
  264. package/src/home/setupadapters.ts +217 -0
  265. package/src/home/setupcard.ts +288 -0
  266. package/src/home/setuptools.ts +57 -0
  267. package/src/home/spend.ts +194 -0
  268. package/src/home/switches.ts +293 -0
  269. package/src/home/switchon.ts +554 -0
  270. package/src/home/toolnames.ts +46 -0
  271. package/src/home/tune.ts +405 -0
  272. package/src/home/words.ts +8 -0
  273. package/src/homes.ts +17 -0
  274. package/src/install.ts +1 -1
  275. package/src/ipc/workerspec.ts +15 -0
  276. package/src/ledgercheck.ts +45 -9
  277. package/src/live/publish.ts +4 -1
  278. package/src/livecli.ts +6 -1
  279. package/src/loginrefresh/handover.ts +138 -0
  280. package/src/loginrefresh/lock.ts +72 -3
  281. package/src/loginrefresh/refresher.ts +34 -5
  282. package/src/loginrefresh/supervisor.ts +25 -2
  283. package/src/npmverbs.ts +51 -11
  284. package/src/onboard/choices.ts +6 -3
  285. package/src/onboard/engine.ts +64 -434
  286. package/src/onboard/steps/bringup.ts +3 -2
  287. package/src/onboard/steps/configfill.ts +23 -7
  288. package/src/onboard/steps/loginshare.ts +258 -0
  289. package/src/onboard/steps/memory.ts +18 -2
  290. package/src/onboard/steps/repoconfig.ts +85 -0
  291. package/src/onboard/toolnames.ts +2 -2
  292. package/src/piagentdir.ts +12 -0
  293. package/src/pilogin.ts +32 -16
  294. package/src/qcrbin.ts +16 -11
  295. package/src/reviewargs.ts +119 -0
  296. package/src/reviewcli.ts +6 -167
  297. package/src/reviewdetach.ts +107 -13
  298. package/src/scancli.ts +75 -826
  299. package/src/selfimprove.ts +90 -0
  300. package/src/session-command-supervisor.ts +41 -8
  301. package/src/setup/adapters.ts +13 -221
  302. package/src/setup/caserunner.ts +34 -273
  303. package/src/setup/engine.ts +62 -496
  304. package/src/setup/facts.ts +3 -627
  305. package/src/setup/findings.ts +3 -1264
  306. package/src/setup/presentation.ts +3 -18
  307. package/src/setup/scan.ts +3 -1033
  308. package/src/setup/scanbuild.ts +20 -114
  309. package/src/setup/scanlease.ts +3 -297
  310. package/src/setup/scanreport.ts +3 -373
  311. package/src/setup/scanrun.ts +3 -2268
  312. package/src/setup/scantree.ts +3 -259
  313. package/src/setup/stage2request.ts +3 -347
  314. package/src/setup/unitcut.ts +3 -523
  315. package/src/state.ts +126 -11
  316. package/src/takeover.ts +5 -0
  317. package/src/takeoverpi.ts +3 -2
  318. package/src/tui/alerts.ts +9 -2
  319. package/src/tui/board.ts +2 -2
  320. package/src/tui/companion.ts +2 -1
  321. package/src/tui/deploytab.ts +2 -2
  322. package/src/tui/index.ts +9 -6
  323. package/src/tui/memory.ts +3 -15
  324. package/src/tui/memoryurl.ts +22 -0
  325. package/src/tui/remote.ts +1 -1
  326. package/src/tui/route.ts +2 -2
  327. package/src/tui/setupstate.ts +20 -16
  328. package/src/tui/sshtriage.ts +1 -1
  329. package/src/verdicts.ts +13 -0
  330. package/src/wire.ts +9 -4
  331. package/src/workerbreaker.ts +41 -5
  332. package/src/workerworld.ts +9 -1
  333. package/dist/src/live/projection.js +0 -450
  334. package/dist/src/live/projection.js.map +0 -1
  335. package/dist/src/live/read.js +0 -60
  336. package/dist/src/live/read.js.map +0 -1
  337. package/dist/src/onboard/launch.js +0 -75
  338. package/dist/src/onboard/launch.js.map +0 -1
  339. package/dist/src/setup/ledger.js +0 -207
  340. package/dist/src/setup/ledger.js.map +0 -1
  341. package/dist/src/setup/stage2.js +0 -617
  342. package/dist/src/setup/stage2.js.map +0 -1
  343. package/dist/src/setup/textsniff.js +0 -89
  344. package/dist/src/setup/textsniff.js.map +0 -1
  345. package/src/live/projection.ts +0 -491
  346. package/src/live/read.ts +0 -86
  347. package/src/onboard/launch.ts +0 -103
  348. package/src/setup/ledger.ts +0 -324
  349. package/src/setup/stage2.ts +0 -926
  350. package/src/setup/textsniff.ts +0 -95
@@ -0,0 +1,439 @@
1
+ // Switch-on: the steps that turn auto-review on from the home, on the
2
+ // plugin's step registry (the app's setup is the plugin's checklist with more
3
+ // steps, ADR 0001). They are the wizard's own step modules (src/onboard/
4
+ // steps/), registered here in the wizard's order, over the wizard's checklist
5
+ // file, so an answer given in either place is the same answer:
6
+ //
7
+ // machine_checks Docker, disk, ports (the wizard's preflight, plus the
8
+ // disk and the webhook port) — run first, before the home
9
+ // asks anything
10
+ // topology "this machine" (the home asks; another server goes to
11
+ // the advanced steps, never through here)
12
+ // github_account the person's own account: polling, no App
13
+ // escalation off ┐
14
+ // embeddings local │ silent defaults, each asked only by
15
+ // ingress polling ┘ the wizard; a recorded answer stands
16
+ // memory the memory offer's answer, when it was offered
17
+ // login_share the daemon reviews on the home's own login, which its
18
+ // refresher keeps while it runs: one login per box
19
+ // (src/onboard/steps/loginshare.ts)
20
+ // daemon_start start a stack that was brought up before (a second
21
+ // switch-on is this and little else: its data is kept)
22
+ // bringup the first time: pull and start the stack (restart:
23
+ // unless-stopped, so it survives reboots)
24
+ // memory_user_keys, verify_stack
25
+ // proof_round ┐ after switch-on, never walked by it: auto-review
26
+ // go_live ┘ comes up in dry-run. Going live is its own act
27
+ // (runGoLive): the wizard's proof round on one real pull
28
+ // request, read by the person, then one more confirm
29
+ // handed to the go-live step, the only thing here that
30
+ // may move dry_run, and only through goLiveStep
31
+ // (invariant 6)
32
+ //
33
+ // A step the checklist already records as done is not run again (its answer
34
+ // stands), except the two that act on the running machine: the machine checks
35
+ // and the daemon start.
36
+ //
37
+ // Memory is set up in two phases (src/onboard/steps/memorykeys.ts): its root
38
+ // key must be on disk before the engine boots, and its user keys can only be
39
+ // minted by the running engine. On a stack not running it yet, the memory
40
+ // step lands the root key and stops on the engine not answering; switch-on
41
+ // goes on, the engine is started, and before memory_user_keys the memory
42
+ // step runs again until the engine answers (memoryPhaseB). Any other memory
43
+ // failure ends the walk.
44
+ import { createServer } from "node:net";
45
+ import { execFile } from "node:child_process";
46
+ import { StepRegistry, } from "@quickchatai/pi-quickreview/src/setupchecklist.js";
47
+ import { BRINGUP_STEP_ID, BROUGHT_UP_CHOICE_KEY, bringUpStep } from "../onboard/steps/bringup.js";
48
+ import { DAEMON_SERVICE, DEFAULT_WEBHOOK_PORT, composeArgs, composePs, readEnvText, rootOf, serviceRow, } from "../onboard/steps/compose.js";
49
+ import { EMBEDDINGS_STEP_ID, embeddingsStep } from "../onboard/steps/embeddings.js";
50
+ import { ESCALATION_STEP_ID, escalationStep } from "../onboard/steps/escalation.js";
51
+ import { GITHUB_ACCOUNT_STEP_ID, githubAccountStep } from "../onboard/steps/githubaccount.js";
52
+ import { GO_LIVE_CONFIRMATION, GO_LIVE_STEP_ID, goLiveStep } from "../onboard/steps/golive.js";
53
+ import { INGRESS_STEP_ID, isUp, readEnvKey, ingressStep } from "../onboard/steps/ingress.js";
54
+ import { MEMORY_STEP_ID, memoryStep, waitsOnServer } from "../onboard/steps/memory.js";
55
+ import { MEMORY_KEYS_STEP_ID, memoryUserKeysStep } from "../onboard/steps/memorykeys.js";
56
+ import { preflightStep } from "../onboard/steps/preflight.js";
57
+ import { PROOF_CHOICE_KEY, PROOF_STEP_ID, parseProofRecord, proofRoundStep, } from "../onboard/steps/proof.js";
58
+ import { TOPOLOGY_STEP_ID, topologyOf, topologyStep } from "../onboard/steps/topology.js";
59
+ import { VERIFY_STACK_STEP_ID, verifyStackStep } from "../onboard/steps/verifyup.js";
60
+ import { LOGIN_SHARE_STEP_ID, loginShareStep, } from "../onboard/steps/loginshare.js";
61
+ export const MACHINE_CHECKS_STEP_ID = "machine_checks";
62
+ export const DAEMON_START_STEP_ID = "daemon_start";
63
+ /** Free disk the stack needs where Docker keeps its images: the two released
64
+ * images (the memory one carries its embedding model) and room to run. */
65
+ export const MIN_FREE_GB = 10;
66
+ /** Switch-on's steps, in the order they run (the registry sorts by `order`). */
67
+ export const SWITCH_ON_ORDER = [
68
+ MACHINE_CHECKS_STEP_ID,
69
+ TOPOLOGY_STEP_ID,
70
+ GITHUB_ACCOUNT_STEP_ID,
71
+ ESCALATION_STEP_ID,
72
+ EMBEDDINGS_STEP_ID,
73
+ INGRESS_STEP_ID,
74
+ MEMORY_STEP_ID,
75
+ LOGIN_SHARE_STEP_ID,
76
+ DAEMON_START_STEP_ID,
77
+ BRINGUP_STEP_ID,
78
+ MEMORY_KEYS_STEP_ID,
79
+ VERIFY_STACK_STEP_ID,
80
+ PROOF_STEP_ID,
81
+ GO_LIVE_STEP_ID,
82
+ ];
83
+ /** The steps that act on the running machine: run on every switch-on. */
84
+ const EVERY_TIME = new Set([MACHINE_CHECKS_STEP_ID, DAEMON_START_STEP_ID]);
85
+ /** The steps after switch-on, each the person's own act: never walked. */
86
+ const AFTER_SWITCH_ON = new Set([PROOF_STEP_ID, GO_LIVE_STEP_ID]);
87
+ /** How long phase B waits for a memory engine that has just started. */
88
+ export const MEMORY_WAIT_ATTEMPTS = 20;
89
+ export const MEMORY_WAIT_MS = 15_000;
90
+ /** Can something listen on 127.0.0.1:`port` now? */
91
+ export function loopbackPortFree(port) {
92
+ return new Promise((resolve) => {
93
+ const server = createServer();
94
+ server.once("error", (err) => resolve(err.code === "EADDRINUSE" || err.code === "EACCES" ? false : null));
95
+ server.listen(port, "127.0.0.1", () => server.close(() => resolve(true)));
96
+ });
97
+ }
98
+ /** The webhook port the stack publishes: the project `.env`'s
99
+ * QCR_WEBHOOK_PORT, else compose's default. */
100
+ export function webhookPort(root) {
101
+ const raw = (readEnvKey(readEnvText(root), "QCR_WEBHOOK_PORT") ?? "").trim();
102
+ return /^[0-9]{1,5}$/.test(raw) ? Number(raw) : DEFAULT_WEBHOOK_PORT;
103
+ }
104
+ /** `df -Pk <dir>`'s available space, in GB; null when it does not parse. */
105
+ export function freeGbFromDf(stdout) {
106
+ const row = stdout.trim().split("\n")[1];
107
+ const kb = Number(row?.trim().split(/\s+/)[3]);
108
+ return Number.isFinite(kb) ? kb / (1024 * 1024) : null;
109
+ }
110
+ async function diskCheck(runner, root) {
111
+ const info = await runner.run("docker", ["info", "--format", "{{.DockerRootDir}}"]);
112
+ const dir = info.code === 0 && info.stdout.trim() !== "" ? info.stdout.trim() : root;
113
+ const df = await runner.run("df", ["-Pk", dir]);
114
+ const gb = df.code === 0 ? freeGbFromDf(df.stdout) : null;
115
+ if (gb === null)
116
+ // Docker Desktop keeps its images inside its VM, where df cannot look:
117
+ // said as unknown, never as enough.
118
+ return {
119
+ name: "disk",
120
+ ok: true,
121
+ detail: `free disk unknown: ${dir} could not be measured (${(df.stderr || df.stdout).trim().split("\n")[0] || `exit ${df.code}`}); the stack needs about ${MIN_FREE_GB} GB`,
122
+ };
123
+ return gb >= MIN_FREE_GB
124
+ ? { name: "disk", ok: true, detail: `${Math.floor(gb)} GB free` }
125
+ : {
126
+ name: "disk",
127
+ ok: false,
128
+ detail: `only ${gb.toFixed(1)} GB free in ${dir}; the stack needs about ${MIN_FREE_GB} GB. Fix: free some space, then switch it on again`,
129
+ };
130
+ }
131
+ async function portCheck(runner, root, portFree) {
132
+ const port = webhookPort(root);
133
+ const ps = await composePs(runner, root);
134
+ if (ps.ok && isUp(serviceRow(ps.rows, DAEMON_SERVICE)))
135
+ return { name: "ports", ok: true, detail: `port ${port} is your own daemon's` };
136
+ const free = await portFree(port);
137
+ if (free === null)
138
+ return { name: "ports", ok: true, detail: `whether port ${port} is free is unknown` };
139
+ return free
140
+ ? { name: "ports", ok: true, detail: `port ${port} is free` }
141
+ : {
142
+ name: "ports",
143
+ ok: false,
144
+ detail: `port ${port} is in use by another program. Fix: stop it, or set QCR_WEBHOOK_PORT in ${root}/.env to a free port`,
145
+ };
146
+ }
147
+ /** The machine checks: the wizard's preflight (Docker, Compose, the images,
148
+ * the uid it records), then the disk and the webhook port. */
149
+ export function machineChecksStep(o = {}) {
150
+ const preflight = preflightStep();
151
+ const portFree = o.portFree ?? loopbackPortFree;
152
+ const run = async (ctx) => {
153
+ const base = await preflight.run(ctx);
154
+ const root = rootOf(ctx.adapters);
155
+ const checks = [
156
+ ...base.checks,
157
+ await diskCheck(ctx.adapters.runner, root),
158
+ await portCheck(ctx.adapters.runner, root, portFree),
159
+ ];
160
+ return {
161
+ ok: checks.every((c) => c.ok),
162
+ checks,
163
+ ...(base.data ? { data: base.data } : {}),
164
+ };
165
+ };
166
+ return {
167
+ id: MACHINE_CHECKS_STEP_ID,
168
+ title: "Machine checks: Docker, disk, ports",
169
+ explain: "Checks that this machine can run auto-review: Docker and Compose, free disk, the webhook port.",
170
+ order: preflight.order,
171
+ run,
172
+ verify: run,
173
+ };
174
+ }
175
+ // ---- the daemon start ---------------------------------------------------
176
+ /** Start a stack that was brought up before and switched off since: its
177
+ * containers and volumes are all there, so this is the whole of a second
178
+ * switch-on. Before the first bring-up there is nothing to start. */
179
+ export function daemonStartStep() {
180
+ const state = async (ctx) => {
181
+ const ps = await composePs(ctx.adapters.runner, rootOf(ctx.adapters));
182
+ if (!ps.ok)
183
+ return {
184
+ ok: false,
185
+ checks: [{ name: "daemon", ok: false, detail: `can't ask Docker: ${ps.detail}` }],
186
+ };
187
+ const up = isUp(serviceRow(ps.rows, DAEMON_SERVICE));
188
+ return {
189
+ ok: up,
190
+ checks: [
191
+ { name: "daemon", ok: up, detail: up ? "the daemon runs" : "the daemon is stopped" },
192
+ ],
193
+ };
194
+ };
195
+ return {
196
+ id: DAEMON_START_STEP_ID,
197
+ title: "Start the daemon",
198
+ explain: "Starts the stack a previous switch-on brought up; its data is kept.",
199
+ // after the config steps, just before the first bring-up (70)
200
+ order: 69,
201
+ enabled: (choices) => topologyOf(choices) === "local",
202
+ async run(ctx) {
203
+ if (typeof ctx.choices[BROUGHT_UP_CHOICE_KEY] !== "string")
204
+ return {
205
+ ok: true,
206
+ checks: [{ name: "daemon", ok: true, detail: "not brought up yet: bring-up starts it" }],
207
+ };
208
+ const now = await state(ctx);
209
+ if (now.ok)
210
+ return now;
211
+ const root = rootOf(ctx.adapters);
212
+ const r = await ctx.adapters.runner.run("docker", composeArgs(root, ["start", DAEMON_SERVICE]));
213
+ return r.code === 0
214
+ ? {
215
+ ok: true,
216
+ checks: [{ name: "daemon", ok: true, detail: "started, with its data as it was" }],
217
+ }
218
+ : {
219
+ ok: false,
220
+ checks: [
221
+ {
222
+ name: "daemon",
223
+ ok: false,
224
+ detail: `\`docker compose start ${DAEMON_SERVICE}\` exited ${r.code}: ${(r.stderr || r.stdout).trim().slice(0, 300) || "no output"}`,
225
+ },
226
+ ],
227
+ };
228
+ },
229
+ verify: state,
230
+ };
231
+ }
232
+ /** Switch-on's registry: the wizard's step modules plus the two above. */
233
+ export function switchOnRegistry(o = {}) {
234
+ return new StepRegistry([
235
+ machineChecksStep(o),
236
+ topologyStep(),
237
+ githubAccountStep(),
238
+ escalationStep(),
239
+ embeddingsStep(),
240
+ ingressStep(),
241
+ memoryStep(),
242
+ loginShareStep(o),
243
+ daemonStartStep(),
244
+ bringUpStep(),
245
+ memoryUserKeysStep(),
246
+ verifyStackStep(),
247
+ proofRoundStep(),
248
+ goLiveStep(),
249
+ ]);
250
+ }
251
+ /** What each step is handed: switch-on's silent defaults and the person's
252
+ * answers. Only go_live is ever handed the confirm, and only by runGoLive. */
253
+ export function switchOnInput(id, a) {
254
+ switch (id) {
255
+ case TOPOLOGY_STEP_ID:
256
+ return { choice: "local" };
257
+ case GITHUB_ACCOUNT_STEP_ID:
258
+ return { github_auth: "user", ...(a.repo ? { repo: a.repo } : {}) };
259
+ case ESCALATION_STEP_ID:
260
+ return { enable: "no" };
261
+ case INGRESS_STEP_ID:
262
+ return { choice: "polling" };
263
+ case MEMORY_STEP_ID:
264
+ return a.answers.memory === null
265
+ ? {}
266
+ : { choice: a.answers.memory ? "configure" : "declined" };
267
+ case GO_LIVE_STEP_ID:
268
+ return a.answers.confirmed === true
269
+ ? { decision: "go_live", confirm: GO_LIVE_CONFIRMATION }
270
+ : {};
271
+ default:
272
+ return {};
273
+ }
274
+ }
275
+ const line = (id, what) => `${id}: ${what}`;
276
+ const realSleep = (ms) => new Promise((r) => setTimeout(r, ms));
277
+ /** Memory's phase B on a stack that runs now: start the engine (when the
278
+ * caller can), then run the memory step again until the engine answers, for
279
+ * a bounded wait. The root key is already in place, so the engine read it at
280
+ * boot. A failure that is not the engine starting up ends it at once. */
281
+ export async function memoryPhaseB(r, input) {
282
+ if (r.startMemory) {
283
+ const up = await r.startMemory();
284
+ if (!up.ok)
285
+ return { ok: false, detail: `the memory engine did not start: ${up.detail}` };
286
+ }
287
+ r.progress?.("Waiting for the memory engine to answer…");
288
+ for (let attempt = 1;; attempt += 1) {
289
+ const res = await r.checklist.runStep(MEMORY_STEP_ID, input);
290
+ if (res.ok)
291
+ return { ok: true, detail: res.checks.map((c) => c.detail).join("; ") || "done" };
292
+ const why = res.failures.join("; ") || "it did not finish";
293
+ if (!waitsOnServer(res.checks) || attempt >= MEMORY_WAIT_ATTEMPTS)
294
+ return { ok: false, detail: why };
295
+ await (r.sleep ?? realSleep)(MEMORY_WAIT_MS);
296
+ }
297
+ }
298
+ /** The steps between the machine checks and the proof round, in order. The
299
+ * first that fails ends the walk with what it said, except memory's phase A
300
+ * waiting on an engine not yet running (its phase B follows the bring-up).
301
+ * No step here is ever handed a confirm: the go-live is not among them. */
302
+ export async function runSteps(r, steps) {
303
+ const say = (s) => {
304
+ steps.push(s);
305
+ r.progress?.(s);
306
+ };
307
+ const inputs = { answers: { memory: r.memory, confirmed: false }, repo: r.repo };
308
+ const failed = (id, title, why) => {
309
+ steps.push(line(id, `failed: ${why}`));
310
+ return { ok: false, detail: `${title}: ${why}` };
311
+ };
312
+ let memoryWaits = false;
313
+ const phaseB = async () => {
314
+ memoryWaits = false;
315
+ const b = await memoryPhaseB(r, switchOnInput(MEMORY_STEP_ID, inputs));
316
+ if (!b.ok)
317
+ return failed(MEMORY_STEP_ID, "Memory", b.detail);
318
+ say(line(MEMORY_STEP_ID, b.detail));
319
+ return { ok: true };
320
+ };
321
+ for (const s of r.checklist.list()) {
322
+ if (s.id === MACHINE_CHECKS_STEP_ID || AFTER_SWITCH_ON.has(s.id))
323
+ continue;
324
+ // the engine runs now (the bring-up, or a stack brought up before)
325
+ if (s.id === MEMORY_KEYS_STEP_ID && memoryWaits) {
326
+ const b = await phaseB();
327
+ if (!b.ok)
328
+ return b;
329
+ }
330
+ if (s.status === "disabled") {
331
+ say(line(s.id, "not on this route"));
332
+ continue;
333
+ }
334
+ // a memory "yes" given now runs even over a recorded answer
335
+ const answered = s.id === MEMORY_STEP_ID && r.memory === true;
336
+ if (s.status === "done" && !EVERY_TIME.has(s.id) && !answered) {
337
+ say(line(s.id, "already done"));
338
+ continue;
339
+ }
340
+ r.progress?.(`${s.title}…`);
341
+ const res = await r.checklist.runStep(s.id, switchOnInput(s.id, inputs));
342
+ if (!res.ok && s.id === MEMORY_STEP_ID && waitsOnServer(res.checks)) {
343
+ memoryWaits = true;
344
+ say(line(s.id, "its root key is placed; its user keys follow once the engine runs"));
345
+ continue;
346
+ }
347
+ if (!res.ok)
348
+ return failed(s.id, s.title, res.failures.join("; ") || "it did not finish");
349
+ say(line(s.id, res.checks.map((c) => c.detail).join("; ") || "done"));
350
+ }
351
+ if (memoryWaits)
352
+ return phaseB();
353
+ return { ok: true };
354
+ }
355
+ /**
356
+ * Run switch-on's steps after the machine checks, in order (runSteps).
357
+ * Auto-review comes up in dry-run: switch-on never runs the proof round or
358
+ * the go-live, whatever the config says. Going live is runGoLive, its own
359
+ * act with its own confirm.
360
+ */
361
+ export async function runSwitchOn(r) {
362
+ if (r.answers.confirmed !== true)
363
+ throw new Error("switch-on runs only on the person's confirm");
364
+ const steps = [];
365
+ const say = (s) => {
366
+ steps.push(s);
367
+ r.progress?.(s);
368
+ };
369
+ const walked = await runSteps({ ...r, memory: r.answers.memory }, steps);
370
+ if (!walked.ok) {
371
+ const dry = r.dryRun();
372
+ return { ok: false, live: dry === null ? null : !dry, detail: walked.detail, steps };
373
+ }
374
+ if (r.answers.memory === false) {
375
+ const stopped = await r.stopMemory();
376
+ say(line("memory", stopped.ok ? "kept off" : `could not be kept off: ${stopped.detail}`));
377
+ }
378
+ const dry = r.dryRun();
379
+ if (dry === false) {
380
+ say(line(GO_LIVE_STEP_ID, "already live"));
381
+ return { ok: true, live: true, detail: "Auto-review is on and posts live.", steps };
382
+ }
383
+ if (dry === null) {
384
+ steps.push(line(GO_LIVE_STEP_ID, "unknown: the config's dry_run cannot be read"));
385
+ return {
386
+ ok: false,
387
+ live: null,
388
+ detail: "Auto-review started, but whether it posts live is unknown: the config cannot be read.",
389
+ steps,
390
+ };
391
+ }
392
+ say(line(GO_LIVE_STEP_ID, "not yet: auto-review is in dry-run"));
393
+ return {
394
+ ok: true,
395
+ live: false,
396
+ detail: "Auto-review is on in dry-run: it reviews, and posts nothing yet. Going live is its own step: one review you read, then one more confirm.",
397
+ steps,
398
+ };
399
+ }
400
+ /** The proof round the checklist records, or null: what the go-live step
401
+ * demands (and re-verifies against the daemon's own state). */
402
+ export function recordedProof(checklist) {
403
+ return parseProofRecord(checklist.choices()[PROOF_CHOICE_KEY]);
404
+ }
405
+ /** The wizard's proof round on pull request `pr`, from dry-run: the daemon
406
+ * reviews it now, the round is followed through its own state, and the
407
+ * review it would have posted is read back. The detail is that review. */
408
+ export async function runProofRound(checklist, pr) {
409
+ const r = await checklist.runStep(PROOF_STEP_ID, { pr });
410
+ return r.ok
411
+ ? { ok: true, detail: r.checks.map((c) => c.detail).join("\n\n") }
412
+ : { ok: false, detail: r.failures.join("; ") || "the proof round did not finish" };
413
+ }
414
+ /** The go-live step, from dry-run, on the person's own go-live confirm
415
+ * (asked after the proof round, never the switch-on's). */
416
+ export async function runGoLive(checklist, answers) {
417
+ if (answers.confirmed !== true)
418
+ throw new Error("go-live runs only on the person's confirm");
419
+ const go = await checklist.runStep(GO_LIVE_STEP_ID, switchOnInput(GO_LIVE_STEP_ID, { answers: { memory: null, confirmed: true }, repo: null }));
420
+ return go.ok
421
+ ? { ok: true, detail: "Auto-review posts live now." }
422
+ : { ok: false, detail: go.failures.join("; ") || "going live did not finish" };
423
+ }
424
+ // ---- the real adapters -----------------------------------------------------
425
+ /** A process runner for the steps (a minute per call; the long pulls stream
426
+ * through the steps' own runner). */
427
+ export const stepRunner = {
428
+ run: (cmd, args) => new Promise((resolve) => {
429
+ execFile(cmd, args, { timeout: 60_000, maxBuffer: 16 << 20 }, (err, stdout, stderr) => {
430
+ const code = err === null ? 0 : typeof err.code === "number" ? err.code : 1;
431
+ resolve({
432
+ code,
433
+ stdout: String(stdout),
434
+ stderr: err && !stderr ? String(err.message) : String(stderr),
435
+ });
436
+ });
437
+ }),
438
+ };
439
+ //# sourceMappingURL=switchon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switchon.js","sourceRoot":"","sources":["../../../src/home/switchon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ // The home's tool names: one source for the extension that registers them
2
+ // (extensions/home.ts) and the launch that activates them (launch.ts).
3
+ //
4
+ // pi's `--tools <list>` is an allowlist over every tool, extension tools
5
+ // included (pi 1.4.0), so the reviewer-only launch names each home tool. The
6
+ // read tools are pi's own; bash, edit and write are never on the list.
7
+ /** The setup checklist's tools (src/home/setuptools.ts): one per step, and
8
+ * the next step. */
9
+ export const HOME_SETUP_TOOL_NAMES = [
10
+ "home_setup_next",
11
+ "home_sign_in",
12
+ "home_check_github",
13
+ "home_choose_repo",
14
+ ];
15
+ /** "Tune to this repo" and Advanced (src/home/advancedtools.ts). */
16
+ export const HOME_ADVANCED_TOOL_NAMES = ["home_tune", "home_tune_write", "home_advanced"];
17
+ /** Every tool the home registers. */
18
+ export const HOME_TOOL_NAMES = [
19
+ "home_status",
20
+ "home_refresh",
21
+ "home_move",
22
+ "home_select",
23
+ "home_open_pr",
24
+ "home_review_pr",
25
+ "home_show_review",
26
+ "home_stop_review",
27
+ "home_auto_review",
28
+ "home_memory",
29
+ "home_relogin",
30
+ ...HOME_SETUP_TOOL_NAMES,
31
+ ...HOME_ADVANCED_TOOL_NAMES,
32
+ ];
33
+ /** pi's built-in tools the reviewer-only home keeps: reading only. */
34
+ export const HOME_READ_TOOLS = ["read", "grep", "find", "ls"];
35
+ /** The plugin's tools, by the prefix its tools are named with. */
36
+ export const PLUGIN_TOOL_PATTERN = "qcr_*";
37
+ /** The whole `--tools` allowlist of the reviewer-only home. */
38
+ export function reviewerToolAllowlist() {
39
+ return [...HOME_READ_TOOLS, PLUGIN_TOOL_PATTERN, ...HOME_TOOL_NAMES];
40
+ }
41
+ //# sourceMappingURL=toolnames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolnames.js","sourceRoot":"","sources":["../../../src/home/toolnames.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uEAAuE;AACvE,EAAE;AACF,yEAAyE;AACzE,6EAA6E;AAC7E,uEAAuE;AAEvE;oBACoB;AACpB,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,iBAAiB;IACjB,cAAc;IACd,mBAAmB;IACnB,kBAAkB;CACV,CAAC;AAEX,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,eAAe,CAAU,CAAC;AAEnG,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa;IACb,cAAc;IACd,WAAW;IACX,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,GAAG,qBAAqB;IACxB,GAAG,wBAAwB;CACnB,CAAC;AAEX,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAEjF,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE3C,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,eAAe,EAAE,mBAAmB,EAAE,GAAG,eAAe,CAAC,CAAC;AACvE,CAAC"}