@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.
Files changed (471) hide show
  1. package/README.md +137 -57
  2. package/bin/qcr.js +1 -1
  3. package/config.example.toml +60 -14
  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/login-route.js +5 -0
  11. package/dist/extensions/cli/login-route.js.map +1 -0
  12. package/dist/extensions/cli/selfimprove.js +18 -0
  13. package/dist/extensions/cli/selfimprove.js.map +1 -0
  14. package/dist/extensions/home.js +350 -0
  15. package/dist/extensions/home.js.map +1 -0
  16. package/dist/extensions/login-route.js +180 -0
  17. package/dist/extensions/login-route.js.map +1 -0
  18. package/dist/extensions/onboarding.js +35 -11
  19. package/dist/extensions/onboarding.js.map +1 -1
  20. package/dist/extensions/selfimprove.js +49 -0
  21. package/dist/extensions/selfimprove.js.map +1 -0
  22. package/dist/extensions/setup-scan.js +23 -592
  23. package/dist/extensions/setup-scan.js.map +1 -1
  24. package/dist/extensions/setup.js +2 -47
  25. package/dist/extensions/setup.js.map +1 -1
  26. package/dist/src/archive/restore.js +18 -15
  27. package/dist/src/archive/restore.js.map +1 -1
  28. package/dist/src/botworker.js +13 -2
  29. package/dist/src/botworker.js.map +1 -1
  30. package/dist/src/channelfs.js +3 -26
  31. package/dist/src/channelfs.js.map +1 -1
  32. package/dist/src/ciretry.js +2 -1
  33. package/dist/src/ciretry.js.map +1 -1
  34. package/dist/src/cli.js +54 -61
  35. package/dist/src/cli.js.map +1 -1
  36. package/dist/src/cliops.js +3 -2
  37. package/dist/src/cliops.js.map +1 -1
  38. package/dist/src/commands.js +25 -2
  39. package/dist/src/commands.js.map +1 -1
  40. package/dist/src/config.js +32 -2
  41. package/dist/src/config.js.map +1 -1
  42. package/dist/src/daemon.js +50 -8
  43. package/dist/src/daemon.js.map +1 -1
  44. package/dist/src/debuground.js +1 -0
  45. package/dist/src/debuground.js.map +1 -1
  46. package/dist/src/debugroundpi.js +6 -1
  47. package/dist/src/debugroundpi.js.map +1 -1
  48. package/dist/src/dispatch.js +5 -4
  49. package/dist/src/dispatch.js.map +1 -1
  50. package/dist/src/engine/caserunner-sdk.js +15 -251
  51. package/dist/src/engine/caserunner-sdk.js.map +1 -1
  52. package/dist/src/engine/debugpi.js +17 -5
  53. package/dist/src/engine/debugpi.js.map +1 -1
  54. package/dist/src/execboundary.js +10 -3
  55. package/dist/src/execboundary.js.map +1 -1
  56. package/dist/src/github.js +51 -16
  57. package/dist/src/github.js.map +1 -1
  58. package/dist/src/githubtoken.js +346 -0
  59. package/dist/src/githubtoken.js.map +1 -0
  60. package/dist/src/home/adapters.js +349 -0
  61. package/dist/src/home/adapters.js.map +1 -0
  62. package/dist/src/home/advanced.js +318 -0
  63. package/dist/src/home/advanced.js.map +1 -0
  64. package/dist/src/home/advancedtools.js +57 -0
  65. package/dist/src/home/advancedtools.js.map +1 -0
  66. package/dist/src/home/autoreview.js +325 -0
  67. package/dist/src/home/autoreview.js.map +1 -0
  68. package/dist/src/home/daemonstatus.js +32 -0
  69. package/dist/src/home/daemonstatus.js.map +1 -0
  70. package/dist/src/home/devicelogin.js +61 -0
  71. package/dist/src/home/devicelogin.js.map +1 -0
  72. package/dist/src/home/launch.js +202 -0
  73. package/dist/src/home/launch.js.map +1 -0
  74. package/dist/src/home/loginowner.js +205 -0
  75. package/dist/src/home/loginowner.js.map +1 -0
  76. package/dist/src/home/memory.js +122 -0
  77. package/dist/src/home/memory.js.map +1 -0
  78. package/dist/src/home/model.js +811 -0
  79. package/dist/src/home/model.js.map +1 -0
  80. package/dist/src/home/panel.js +520 -0
  81. package/dist/src/home/panel.js.map +1 -0
  82. package/dist/src/home/ports.js +19 -0
  83. package/dist/src/home/ports.js.map +1 -0
  84. package/dist/src/home/review.js +163 -0
  85. package/dist/src/home/review.js.map +1 -0
  86. package/dist/src/home/reviews.js +478 -0
  87. package/dist/src/home/reviews.js.map +1 -0
  88. package/dist/src/home/setup.js +507 -0
  89. package/dist/src/home/setup.js.map +1 -0
  90. package/dist/src/home/setupadapters.js +214 -0
  91. package/dist/src/home/setupadapters.js.map +1 -0
  92. package/dist/src/home/setupcard.js +199 -0
  93. package/dist/src/home/setupcard.js.map +1 -0
  94. package/dist/src/home/setuptools.js +45 -0
  95. package/dist/src/home/setuptools.js.map +1 -0
  96. package/dist/src/home/spend.js +160 -0
  97. package/dist/src/home/spend.js.map +1 -0
  98. package/dist/src/home/switches.js +209 -0
  99. package/dist/src/home/switches.js.map +1 -0
  100. package/dist/src/home/switchon.js +439 -0
  101. package/dist/src/home/switchon.js.map +1 -0
  102. package/dist/src/home/toolnames.js +41 -0
  103. package/dist/src/home/toolnames.js.map +1 -0
  104. package/dist/src/home/tune.js +341 -0
  105. package/dist/src/home/tune.js.map +1 -0
  106. package/dist/src/home/words.js +7 -0
  107. package/dist/src/home/words.js.map +1 -0
  108. package/dist/src/homes.js +14 -0
  109. package/dist/src/homes.js.map +1 -1
  110. package/dist/src/install.js +1 -1
  111. package/dist/src/install.js.map +1 -1
  112. package/dist/src/ipc/workerspec.js +8 -0
  113. package/dist/src/ipc/workerspec.js.map +1 -1
  114. package/dist/src/live/publish.js +1 -1
  115. package/dist/src/live/publish.js.map +1 -1
  116. package/dist/src/livecli.js +1 -1
  117. package/dist/src/livecli.js.map +1 -1
  118. package/dist/src/loginhint.js +8 -3
  119. package/dist/src/loginhint.js.map +1 -1
  120. package/dist/src/loginrefresh/handover.js +121 -0
  121. package/dist/src/loginrefresh/handover.js.map +1 -0
  122. package/dist/src/loginrefresh/lock.js +54 -3
  123. package/dist/src/loginrefresh/lock.js.map +1 -1
  124. package/dist/src/loginrefresh/pirefresh.js +3 -0
  125. package/dist/src/loginrefresh/pirefresh.js.map +1 -1
  126. package/dist/src/loginrefresh/refresher.js +33 -5
  127. package/dist/src/loginrefresh/refresher.js.map +1 -1
  128. package/dist/src/loginrefresh/supervisor.js +18 -1
  129. package/dist/src/loginrefresh/supervisor.js.map +1 -1
  130. package/dist/src/npmverbs.js +46 -14
  131. package/dist/src/npmverbs.js.map +1 -1
  132. package/dist/src/onboard/choices.js +35 -4
  133. package/dist/src/onboard/choices.js.map +1 -1
  134. package/dist/src/onboard/engine.js +32 -306
  135. package/dist/src/onboard/engine.js.map +1 -1
  136. package/dist/src/onboard/pipin.js +22 -0
  137. package/dist/src/onboard/pipin.js.map +1 -0
  138. package/dist/src/onboard/stepforward.js +41 -0
  139. package/dist/src/onboard/stepforward.js.map +1 -0
  140. package/dist/src/onboard/steps/appslug.js +4 -1
  141. package/dist/src/onboard/steps/appslug.js.map +1 -1
  142. package/dist/src/onboard/steps/bringup.js +3 -2
  143. package/dist/src/onboard/steps/bringup.js.map +1 -1
  144. package/dist/src/onboard/steps/compose.js +29 -0
  145. package/dist/src/onboard/steps/compose.js.map +1 -1
  146. package/dist/src/onboard/steps/configfill.js +120 -39
  147. package/dist/src/onboard/steps/configfill.js.map +1 -1
  148. package/dist/src/onboard/steps/githubaccount.js +595 -0
  149. package/dist/src/onboard/steps/githubaccount.js.map +1 -0
  150. package/dist/src/onboard/steps/githubapp.js +65 -7
  151. package/dist/src/onboard/steps/githubapp.js.map +1 -1
  152. package/dist/src/onboard/steps/golive.js +2 -0
  153. package/dist/src/onboard/steps/golive.js.map +1 -1
  154. package/dist/src/onboard/steps/index.js +11 -0
  155. package/dist/src/onboard/steps/index.js.map +1 -1
  156. package/dist/src/onboard/steps/ingress.js +80 -25
  157. package/dist/src/onboard/steps/ingress.js.map +1 -1
  158. package/dist/src/onboard/steps/llmauth.js +103 -30
  159. package/dist/src/onboard/steps/llmauth.js.map +1 -1
  160. package/dist/src/onboard/steps/loginshare.js +213 -0
  161. package/dist/src/onboard/steps/loginshare.js.map +1 -0
  162. package/dist/src/onboard/steps/memory.js +67 -3
  163. package/dist/src/onboard/steps/memory.js.map +1 -1
  164. package/dist/src/onboard/steps/proof.js +366 -56
  165. package/dist/src/onboard/steps/proof.js.map +1 -1
  166. package/dist/src/onboard/steps/repoconfig.js +72 -0
  167. package/dist/src/onboard/steps/repoconfig.js.map +1 -0
  168. package/dist/src/onboard/steps/topology.js +6 -6
  169. package/dist/src/onboard/steps/topology.js.map +1 -1
  170. package/dist/src/onboard/steps/transport.js +9 -1
  171. package/dist/src/onboard/steps/transport.js.map +1 -1
  172. package/dist/src/onboard/steps/tuiroute.js +102 -0
  173. package/dist/src/onboard/steps/tuiroute.js.map +1 -0
  174. package/dist/src/onboard/steps/verifyup.js +17 -1
  175. package/dist/src/onboard/steps/verifyup.js.map +1 -1
  176. package/dist/src/onboard/toolnames.js +30 -0
  177. package/dist/src/onboard/toolnames.js.map +1 -0
  178. package/dist/src/operatorwrite.js +23 -0
  179. package/dist/src/operatorwrite.js.map +1 -0
  180. package/dist/src/outcomes.js +4 -1
  181. package/dist/src/outcomes.js.map +1 -1
  182. package/dist/src/piagentdir.js +13 -0
  183. package/dist/src/piagentdir.js.map +1 -0
  184. package/dist/src/pilogin.js +31 -16
  185. package/dist/src/pilogin.js.map +1 -1
  186. package/dist/src/posting-journal.js +2 -1
  187. package/dist/src/posting-journal.js.map +1 -1
  188. package/dist/src/posting-outbox.js +6 -2
  189. package/dist/src/posting-outbox.js.map +1 -1
  190. package/dist/src/posting-receipt.js +14 -1
  191. package/dist/src/posting-receipt.js.map +1 -1
  192. package/dist/src/qcrbin.js +16 -11
  193. package/dist/src/qcrbin.js.map +1 -1
  194. package/dist/src/recheck.js +2 -1
  195. package/dist/src/recheck.js.map +1 -1
  196. package/dist/src/reconcile.js +22 -2
  197. package/dist/src/reconcile.js.map +1 -1
  198. package/dist/src/reviewargs.js +122 -0
  199. package/dist/src/reviewargs.js.map +1 -0
  200. package/dist/src/reviewcli.js +7 -161
  201. package/dist/src/reviewcli.js.map +1 -1
  202. package/dist/src/reviewdetach.js +76 -11
  203. package/dist/src/reviewdetach.js.map +1 -1
  204. package/dist/src/reviewhistory.js +32 -6
  205. package/dist/src/reviewhistory.js.map +1 -1
  206. package/dist/src/reviewnow.js +45 -0
  207. package/dist/src/reviewnow.js.map +1 -0
  208. package/dist/src/scancli.js +39 -691
  209. package/dist/src/scancli.js.map +1 -1
  210. package/dist/src/selfimprove.js +66 -0
  211. package/dist/src/selfimprove.js.map +1 -0
  212. package/dist/src/setup/adapters.js +5 -223
  213. package/dist/src/setup/adapters.js.map +1 -1
  214. package/dist/src/setup/caserunner.js +15 -249
  215. package/dist/src/setup/caserunner.js.map +1 -1
  216. package/dist/src/setup/engine.js +32 -341
  217. package/dist/src/setup/engine.js.map +1 -1
  218. package/dist/src/setup/facts.js +3 -592
  219. package/dist/src/setup/facts.js.map +1 -1
  220. package/dist/src/setup/findings.js +3 -947
  221. package/dist/src/setup/findings.js.map +1 -1
  222. package/dist/src/setup/presentation.js +3 -8
  223. package/dist/src/setup/presentation.js.map +1 -1
  224. package/dist/src/setup/scan.js +3 -724
  225. package/dist/src/setup/scan.js.map +1 -1
  226. package/dist/src/setup/scanbuild.js +9 -92
  227. package/dist/src/setup/scanbuild.js.map +1 -1
  228. package/dist/src/setup/scanlease.js +3 -250
  229. package/dist/src/setup/scanlease.js.map +1 -1
  230. package/dist/src/setup/scanreport.js +3 -288
  231. package/dist/src/setup/scanreport.js.map +1 -1
  232. package/dist/src/setup/scanrun.js +3 -1732
  233. package/dist/src/setup/scanrun.js.map +1 -1
  234. package/dist/src/setup/scantree.js +3 -256
  235. package/dist/src/setup/scantree.js.map +1 -1
  236. package/dist/src/setup/stage2request.js +3 -258
  237. package/dist/src/setup/stage2request.js.map +1 -1
  238. package/dist/src/setup/unitcut.js +3 -436
  239. package/dist/src/setup/unitcut.js.map +1 -1
  240. package/dist/src/state.js +2 -0
  241. package/dist/src/state.js.map +1 -1
  242. package/dist/src/statemachine.js +4 -1
  243. package/dist/src/statemachine.js.map +1 -1
  244. package/dist/src/takeover.js +1 -0
  245. package/dist/src/takeover.js.map +1 -1
  246. package/dist/src/takeoverpi.js +15 -1
  247. package/dist/src/takeoverpi.js.map +1 -1
  248. package/dist/src/tui/app.js +49 -0
  249. package/dist/src/tui/app.js.map +1 -1
  250. package/dist/src/tui/board.js +88 -12
  251. package/dist/src/tui/board.js.map +1 -1
  252. package/dist/src/tui/cmdbar.js +4 -1
  253. package/dist/src/tui/cmdbar.js.map +1 -1
  254. package/dist/src/tui/companion.js +76 -11
  255. package/dist/src/tui/companion.js.map +1 -1
  256. package/dist/src/tui/connect.js +7 -1
  257. package/dist/src/tui/connect.js.map +1 -1
  258. package/dist/src/tui/deploytab.js +2 -2
  259. package/dist/src/tui/deploytab.js.map +1 -1
  260. package/dist/src/tui/filters.js +5 -2
  261. package/dist/src/tui/filters.js.map +1 -1
  262. package/dist/src/tui/ghread.js +61 -5
  263. package/dist/src/tui/ghread.js.map +1 -1
  264. package/dist/src/tui/index.js +109 -20
  265. package/dist/src/tui/index.js.map +1 -1
  266. package/dist/src/tui/memforward.js +39 -2
  267. package/dist/src/tui/memforward.js.map +1 -1
  268. package/dist/src/tui/memory.js +3 -16
  269. package/dist/src/tui/memory.js.map +1 -1
  270. package/dist/src/tui/memoryurl.js +22 -0
  271. package/dist/src/tui/memoryurl.js.map +1 -0
  272. package/dist/src/tui/model.js +25 -0
  273. package/dist/src/tui/model.js.map +1 -1
  274. package/dist/src/tui/prpause.js +7 -0
  275. package/dist/src/tui/prpause.js.map +1 -1
  276. package/dist/src/tui/remote.js +7 -1
  277. package/dist/src/tui/remote.js.map +1 -1
  278. package/dist/src/tui/route.js +143 -0
  279. package/dist/src/tui/route.js.map +1 -0
  280. package/dist/src/tui/setupstate.js +32 -0
  281. package/dist/src/tui/setupstate.js.map +1 -0
  282. package/dist/src/tui/sshtriage.js +102 -5
  283. package/dist/src/tui/sshtriage.js.map +1 -1
  284. package/dist/src/tui/theme.js +2 -1
  285. package/dist/src/tui/theme.js.map +1 -1
  286. package/dist/src/tui/unwedge.js +2 -12
  287. package/dist/src/tui/unwedge.js.map +1 -1
  288. package/dist/src/verdicts.js +17 -5
  289. package/dist/src/verdicts.js.map +1 -1
  290. package/dist/src/version.js +1 -1
  291. package/dist/src/version.js.map +1 -1
  292. package/dist/src/webhook.js +12 -1
  293. package/dist/src/webhook.js.map +1 -1
  294. package/dist/src/wire.js +34 -8
  295. package/dist/src/wire.js.map +1 -1
  296. package/dist/src/workerworld.js +11 -1
  297. package/dist/src/workerworld.js.map +1 -1
  298. package/docker/README.md +1 -1
  299. package/docker/companion/entrypoint.sh +20 -1
  300. package/docker/entrypoint.sh +57 -6
  301. package/docker-compose.yml +16 -1
  302. package/extensions/cli/home.ts +14 -0
  303. package/extensions/cli/login-route.ts +10 -0
  304. package/extensions/cli/selfimprove.ts +18 -0
  305. package/extensions/home.ts +484 -0
  306. package/extensions/login-route.ts +220 -0
  307. package/extensions/onboarding.ts +41 -11
  308. package/extensions/selfimprove.ts +65 -0
  309. package/extensions/setup-scan.ts +79 -766
  310. package/extensions/setup.ts +14 -70
  311. package/package.json +6 -4
  312. package/prompts/onboarding.md +58 -18
  313. package/schemas/review-result.v1.json +60 -0
  314. package/scripts/deploy.sh +8 -6
  315. package/scripts/mint-token.sh +25 -4
  316. package/scripts/qcr-host.sh +28 -5
  317. package/scripts/vm-ghcr-login.sh +7 -4
  318. package/src/archive/restore.ts +18 -21
  319. package/src/botworker.ts +13 -2
  320. package/src/channelfs.ts +3 -26
  321. package/src/ciretry.ts +2 -1
  322. package/src/cli.ts +59 -67
  323. package/src/cliops.ts +3 -2
  324. package/src/commands.ts +28 -2
  325. package/src/config.ts +62 -4
  326. package/src/daemon.ts +58 -7
  327. package/src/debuground.ts +3 -0
  328. package/src/debugroundpi.ts +12 -1
  329. package/src/dispatch.ts +5 -4
  330. package/src/engine/caserunner-sdk.ts +29 -314
  331. package/src/engine/debugpi.ts +17 -5
  332. package/src/execboundary.ts +16 -4
  333. package/src/github.ts +57 -15
  334. package/src/githubtoken.ts +435 -0
  335. package/src/home/adapters.ts +418 -0
  336. package/src/home/advanced.ts +421 -0
  337. package/src/home/advancedtools.ts +96 -0
  338. package/src/home/autoreview.ts +385 -0
  339. package/src/home/daemonstatus.ts +55 -0
  340. package/src/home/devicelogin.ts +107 -0
  341. package/src/home/launch.ts +257 -0
  342. package/src/home/loginowner.ts +248 -0
  343. package/src/home/memory.ts +176 -0
  344. package/src/home/model.ts +965 -0
  345. package/src/home/panel.ts +666 -0
  346. package/src/home/ports.ts +338 -0
  347. package/src/home/review.ts +206 -0
  348. package/src/home/reviews.ts +565 -0
  349. package/src/home/setup.ts +689 -0
  350. package/src/home/setupadapters.ts +217 -0
  351. package/src/home/setupcard.ts +288 -0
  352. package/src/home/setuptools.ts +57 -0
  353. package/src/home/spend.ts +194 -0
  354. package/src/home/switches.ts +293 -0
  355. package/src/home/switchon.ts +554 -0
  356. package/src/home/toolnames.ts +46 -0
  357. package/src/home/tune.ts +405 -0
  358. package/src/home/words.ts +8 -0
  359. package/src/homes.ts +17 -0
  360. package/src/install.ts +1 -1
  361. package/src/ipc/workerspec.ts +15 -0
  362. package/src/live/publish.ts +4 -1
  363. package/src/livecli.ts +6 -1
  364. package/src/loginhint.ts +8 -3
  365. package/src/loginrefresh/handover.ts +138 -0
  366. package/src/loginrefresh/lock.ts +72 -3
  367. package/src/loginrefresh/pirefresh.ts +3 -0
  368. package/src/loginrefresh/refresher.ts +34 -5
  369. package/src/loginrefresh/supervisor.ts +25 -2
  370. package/src/npmverbs.ts +55 -13
  371. package/src/onboard/choices.ts +40 -4
  372. package/src/onboard/engine.ts +70 -421
  373. package/src/onboard/pipin.ts +31 -0
  374. package/src/onboard/stepforward.ts +61 -0
  375. package/src/onboard/steps/appslug.ts +4 -1
  376. package/src/onboard/steps/bringup.ts +3 -2
  377. package/src/onboard/steps/compose.ts +31 -0
  378. package/src/onboard/steps/configfill.ts +144 -40
  379. package/src/onboard/steps/githubaccount.ts +716 -0
  380. package/src/onboard/steps/githubapp.ts +92 -8
  381. package/src/onboard/steps/golive.ts +2 -0
  382. package/src/onboard/steps/index.ts +11 -0
  383. package/src/onboard/steps/ingress.ts +98 -31
  384. package/src/onboard/steps/llmauth.ts +114 -29
  385. package/src/onboard/steps/loginshare.ts +258 -0
  386. package/src/onboard/steps/memory.ts +76 -3
  387. package/src/onboard/steps/proof.ts +473 -55
  388. package/src/onboard/steps/repoconfig.ts +85 -0
  389. package/src/onboard/steps/topology.ts +7 -6
  390. package/src/onboard/steps/transport.ts +15 -0
  391. package/src/onboard/steps/tuiroute.ts +119 -0
  392. package/src/onboard/steps/verifyup.ts +20 -1
  393. package/src/onboard/toolnames.ts +34 -0
  394. package/src/operatorwrite.ts +25 -0
  395. package/src/outcomes.ts +8 -1
  396. package/src/piagentdir.ts +12 -0
  397. package/src/pilogin.ts +32 -16
  398. package/src/posting-journal.ts +6 -1
  399. package/src/posting-outbox.ts +10 -2
  400. package/src/posting-receipt.ts +17 -0
  401. package/src/qcrbin.ts +16 -11
  402. package/src/recheck.ts +2 -1
  403. package/src/reconcile.ts +29 -3
  404. package/src/reviewargs.ts +119 -0
  405. package/src/reviewcli.ts +6 -167
  406. package/src/reviewdetach.ts +107 -13
  407. package/src/reviewhistory.ts +20 -6
  408. package/src/reviewnow.ts +76 -0
  409. package/src/scancli.ts +75 -826
  410. package/src/selfimprove.ts +90 -0
  411. package/src/setup/adapters.ts +13 -221
  412. package/src/setup/caserunner.ts +34 -273
  413. package/src/setup/engine.ts +62 -496
  414. package/src/setup/facts.ts +3 -627
  415. package/src/setup/findings.ts +3 -1264
  416. package/src/setup/presentation.ts +3 -18
  417. package/src/setup/scan.ts +3 -1033
  418. package/src/setup/scanbuild.ts +20 -114
  419. package/src/setup/scanlease.ts +3 -297
  420. package/src/setup/scanreport.ts +3 -373
  421. package/src/setup/scanrun.ts +3 -2268
  422. package/src/setup/scantree.ts +3 -259
  423. package/src/setup/stage2request.ts +3 -347
  424. package/src/setup/unitcut.ts +3 -523
  425. package/src/state.ts +43 -0
  426. package/src/statemachine.ts +4 -1
  427. package/src/takeover.ts +5 -0
  428. package/src/takeoverpi.ts +16 -2
  429. package/src/tui/app.ts +47 -0
  430. package/src/tui/board.ts +111 -14
  431. package/src/tui/cmdbar.ts +4 -1
  432. package/src/tui/companion.ts +80 -11
  433. package/src/tui/connect.ts +7 -1
  434. package/src/tui/deploytab.ts +2 -2
  435. package/src/tui/filters.ts +7 -3
  436. package/src/tui/ghread.ts +74 -7
  437. package/src/tui/index.ts +117 -23
  438. package/src/tui/memforward.ts +52 -3
  439. package/src/tui/memory.ts +3 -15
  440. package/src/tui/memoryurl.ts +22 -0
  441. package/src/tui/model.ts +36 -2
  442. package/src/tui/prpause.ts +11 -2
  443. package/src/tui/remote.ts +9 -1
  444. package/src/tui/route.ts +173 -0
  445. package/src/tui/setupstate.ts +56 -0
  446. package/src/tui/sshtriage.ts +127 -6
  447. package/src/tui/theme.ts +2 -1
  448. package/src/tui/unwedge.ts +2 -14
  449. package/src/verdicts.ts +23 -5
  450. package/src/version.ts +1 -1
  451. package/src/webhook.ts +10 -1
  452. package/src/wire.ts +42 -9
  453. package/src/workerworld.ts +16 -2
  454. package/dist/src/live/projection.js +0 -450
  455. package/dist/src/live/projection.js.map +0 -1
  456. package/dist/src/live/read.js +0 -60
  457. package/dist/src/live/read.js.map +0 -1
  458. package/dist/src/onboard/launch.js +0 -83
  459. package/dist/src/onboard/launch.js.map +0 -1
  460. package/dist/src/setup/ledger.js +0 -207
  461. package/dist/src/setup/ledger.js.map +0 -1
  462. package/dist/src/setup/stage2.js +0 -617
  463. package/dist/src/setup/stage2.js.map +0 -1
  464. package/dist/src/setup/textsniff.js +0 -89
  465. package/dist/src/setup/textsniff.js.map +0 -1
  466. package/src/live/projection.ts +0 -491
  467. package/src/live/read.ts +0 -86
  468. package/src/onboard/launch.ts +0 -115
  469. package/src/setup/ledger.ts +0 -324
  470. package/src/setup/stage2.ts +0 -926
  471. package/src/setup/textsniff.ts +0 -95
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/home/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,520 @@
1
+ import { matchesKey, truncateToWidth, visibleWidth, wrapTextWithAnsi, } from "@earendil-works/pi-tui";
2
+ import { clockOf } from "@quickchatai/pi-quickreview/src/live/lensline.js";
3
+ import { ago, providerLabel } from "./model.js";
4
+ import { sevOf, shortWhere, whereOf } from "./review.js";
5
+ import { pickUpPhrase } from "./switches.js";
6
+ import { money, plural } from "./words.js";
7
+ /** Where the panel sits: the reference placement. */
8
+ export const HOME_OVERLAY = {
9
+ anchor: "top-right",
10
+ width: "34%",
11
+ minWidth: 74,
12
+ margin: { top: 1, right: 1 },
13
+ nonCapturing: true,
14
+ };
15
+ /** The rows the panel leaves under it for pi's editor and footer. */
16
+ export const EDITOR_ROWS = 8;
17
+ /** Each list shows this many rows before "… n more" wherever the column
18
+ * allows; the details area gives way before a list goes under it. */
19
+ export const LIST_ROWS = 10;
20
+ /** A notice wraps onto at most this many rows. */
21
+ const NOTICE_ROWS = 3;
22
+ /** The finished view lists this many findings before "… n more". */
23
+ const FINDING_ROWS = 8;
24
+ /** "now" lines for this many running lenses, then "and n more". */
25
+ const NOW_ROWS = 4;
26
+ const SPIN = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
27
+ /** How many pull requests each list may show, out of `room` rows for both
28
+ * lists (their titles aside). Each gets half, its "… n more" row included; a
29
+ * list that needs less gives the rest to the other. */
30
+ export function listCaps(room, need) {
31
+ const base = Math.max(3, Math.floor((room - 2) / 2));
32
+ const rows = (n, cap) => (n > cap ? cap + 1 : Math.max(1, n));
33
+ const toReview = Math.max(base, room - rows(need.reviewed, base) - 1);
34
+ return { toReview, reviewed: Math.max(base, room - rows(need.toReview, toReview) - 1) };
35
+ }
36
+ /** Would a list show fewer than LIST_ROWS while it has more to show? */
37
+ function cramped(caps, need) {
38
+ return ((need.toReview > caps.toReview && caps.toReview < LIST_ROWS) ||
39
+ (need.reviewed > caps.reviewed && caps.reviewed < LIST_ROWS));
40
+ }
41
+ export class HomePanel {
42
+ th;
43
+ host;
44
+ /** rendered line → the pull request drawn on it, for clicks and hover */
45
+ rowMap = new Map();
46
+ constructor(th, host) {
47
+ this.th = th;
48
+ this.host = host;
49
+ }
50
+ get m() {
51
+ return this.host.model;
52
+ }
53
+ c(color, s) {
54
+ return this.th.fg(color, s);
55
+ }
56
+ spin() {
57
+ return SPIN[this.host.frame() % SPIN.length];
58
+ }
59
+ edge(s) {
60
+ return this.c(this.host.focused() ? "borderAccent" : "borderMuted", s);
61
+ }
62
+ /** One framed row, the right part pushed to the edge. */
63
+ row(w, left, right = "", selected = false) {
64
+ const inner = w - 4;
65
+ const r = right ? ` ${right}` : "";
66
+ const l = truncateToWidth(left, Math.max(1, inner - visibleWidth(r)), "…");
67
+ const gap = Math.max(0, inner - visibleWidth(l) - visibleWidth(r));
68
+ let text = ` ${l}${" ".repeat(gap)}${r} `;
69
+ if (selected)
70
+ text = this.th.bg("selectedBg", text);
71
+ return `${this.edge("│")}${text}${this.edge("│")}`;
72
+ }
73
+ /** A divider, optionally titled, with a count on the right. */
74
+ rule(w, title = "", count = "") {
75
+ const left = title
76
+ ? `${this.edge("├─ ")}${this.th.bold(this.c("text", title))} `
77
+ : this.edge("├");
78
+ const right = count ? ` ${this.c("muted", count)}${this.edge(" ─┤")}` : this.edge("┤");
79
+ const fill = Math.max(0, w - visibleWidth(left) - visibleWidth(right));
80
+ return `${left}${this.edge("─".repeat(fill))}${right}`;
81
+ }
82
+ top(w) {
83
+ const left = `${this.edge("╭─ ")}${this.th.bold(this.c("accent", "quickreview"))} `;
84
+ const repo = this.m.state.repo;
85
+ const name = repo.kind === "known"
86
+ ? (repo.value ?? "no repository")
87
+ : repo.kind === "unknown"
88
+ ? "repository unknown"
89
+ : "…";
90
+ const right = ` ${this.c("muted", name)}${this.edge(" ─╮")}`;
91
+ const fill = Math.max(0, w - visibleWidth(left) - visibleWidth(right));
92
+ return `${left}${this.edge("─".repeat(fill))}${right}`;
93
+ }
94
+ bottom(w) {
95
+ return this.edge(`╰${"─".repeat(Math.max(0, w - 2))}╯`);
96
+ }
97
+ checking(label) {
98
+ return `${this.c("accent", this.spin())} ${label} ${this.c("dim", "checking…")}`;
99
+ }
100
+ /** The auto-review row, with the switch's key on the right where the home
101
+ * can switch it and the row says nothing there. */
102
+ autoRow() {
103
+ const [left, right] = this.autoLine();
104
+ if (right !== "" || !this.m.canSwitch("autoReview"))
105
+ return [left, right];
106
+ const s = this.m.state.autoReview;
107
+ if (s.kind === "pending")
108
+ return [left, right];
109
+ const on = s.kind === "known" && s.value.state !== "off";
110
+ const key = this.host.focused() ? "a" : "alt+a";
111
+ return [left, this.c("dim", `${key} ${on ? "switches it off" : "turns it on"}`)];
112
+ }
113
+ /** What auto-review picks up, when the home knows where to read it. */
114
+ triggerRow() {
115
+ const t = this.m.state.trigger;
116
+ if (t === null)
117
+ return null;
118
+ if (t.kind === "pending")
119
+ return this.c("dim", " picks up … checking");
120
+ return this.c("dim", ` picks up ${pickUpPhrase(t.kind === "known" ? t.value : null)}`);
121
+ }
122
+ autoLine() {
123
+ const s = this.m.state.autoReview;
124
+ const c = (k, t) => this.c(k, t);
125
+ if (s.kind === "pending")
126
+ return [this.checking("Auto-review"), ""];
127
+ if (s.kind === "unknown")
128
+ return [
129
+ `${c("dim", "?")} Auto-review ${c("muted", "unknown")} ${c("dim", "· can't read its status")}`,
130
+ "",
131
+ ];
132
+ const when = s.value.checkedAt === undefined
133
+ ? ""
134
+ : c("dim", `checked ${ago(s.value.checkedAt, this.m.now())} ago`);
135
+ switch (s.value.state) {
136
+ case "off":
137
+ return [`${c("dim", "○")} Auto-review ${c("muted", "off")}`, ""];
138
+ case "starting":
139
+ return [`${c("warning", this.spin())} Auto-review ${c("warning", "starting")}`, ""];
140
+ case "on-live":
141
+ return [
142
+ `${c("success", "●")} Auto-review ${c("success", "on")} ${c("muted", "· live")}`,
143
+ when,
144
+ ];
145
+ case "on-dry":
146
+ return [
147
+ `${c("accent", "●")} Auto-review ${c("accent", "on")} ${c("muted", "· dry-run")}`,
148
+ when,
149
+ ];
150
+ case "paused-login":
151
+ return [
152
+ `${c("warning", "‖")} Auto-review ${c("warning", "paused")} ${c("muted", `· ${s.value.cause ?? "login expired"}`)}`,
153
+ "",
154
+ ];
155
+ case "broken":
156
+ return [
157
+ `${c("error", "✗")} Auto-review ${c("error", "stopped")}${s.value.cause ? ` ${c("muted", `· ${s.value.cause}`)}` : ""}`,
158
+ "",
159
+ ];
160
+ }
161
+ }
162
+ memLine() {
163
+ const s = this.m.state.memory;
164
+ const left = s.kind === "pending"
165
+ ? this.checking("Memory")
166
+ : s.kind === "unknown"
167
+ ? `${this.c("dim", "?")} Memory ${this.c("muted", "unknown")}`
168
+ : s.value === "on"
169
+ ? `${this.c("success", "●")} Memory ${this.c("success", "on")}`
170
+ : s.value === "starting"
171
+ ? `${this.c("warning", this.spin())} Memory ${this.c("warning", "starting")}`
172
+ : `${this.c("dim", "○")} Memory ${this.c("muted", "off")}${this.memoryCost()}`;
173
+ const sp = this.m.state.spend;
174
+ const right = sp.kind === "pending"
175
+ ? this.c("dim", "spend checking…")
176
+ : sp.kind === "unknown"
177
+ ? this.c("dim", "spend unknown")
178
+ : this.c("muted", `${money(sp.value.today)} today · ${money(sp.value.month)} this month`);
179
+ return [left, right];
180
+ }
181
+ /** Memory's RAM cost and key while it is off, where the home can switch it. */
182
+ memoryCost() {
183
+ const control = this.m.memoryControl();
184
+ if (!control)
185
+ return "";
186
+ const key = this.host.focused() ? "m" : "alt+m";
187
+ return this.c("dim", ` · ${control.ramCost()} · ${key}`);
188
+ }
189
+ loginLine() {
190
+ const label = providerLabel(this.m.chatProvider());
191
+ const signed = this.m.signedIn();
192
+ // one login per box: an expired one says so, with the key that signs in again
193
+ const expired = this.m.loginExpired();
194
+ const again = this.host.relogin ? (this.host.focused() ? "l" : "alt+l") : null;
195
+ const login = this.m.state.login.kind === "pending"
196
+ ? `${this.c("accent", this.spin())} ${this.c("muted", label)} ${this.c("dim", "checking…")}`
197
+ : this.host.signingAgain?.()
198
+ ? `${this.c("accent", this.spin())} ${this.c("muted", label)} ${this.c("dim", "signing in again…")}`
199
+ : expired !== null
200
+ ? `${this.c("error", "✗")} ${this.c("muted", label)} ${this.c("error", expired)}${again ? ` ${this.c("dim", "·")} ${this.c("accent", again)} ${this.c("muted", "sign in again")}` : ""}`
201
+ : signed === null
202
+ ? `${this.c("dim", "?")} ${this.c("muted", label)} unknown`
203
+ : signed
204
+ ? `${this.c("success", "✓")} ${this.c("muted", label)} ${label === "OpenAI" ? "ChatGPT" : "signed in"}`
205
+ : `${this.c("warning", "✗")} ${this.c("muted", label)} ${this.c("warning", "not signed in")}`;
206
+ const g = this.m.state.github;
207
+ const gh = g.kind === "pending"
208
+ ? `${this.c("accent", this.spin())} ${this.c("muted", "GitHub")} ${this.c("dim", "checking…")}`
209
+ : g.kind === "unknown"
210
+ ? `${this.c("dim", "?")} ${this.c("muted", "GitHub")} unknown`
211
+ : g.value === null
212
+ ? `${this.c("warning", "✗")} ${this.c("muted", "GitHub")} ${this.c("warning", "not signed in")}`
213
+ : `${this.c("success", "✓")} ${this.c("muted", "GitHub")} @${g.value}`;
214
+ return [
215
+ `${login} ${gh}`,
216
+ this.c("dim", this.m.tools === "full" ? "all pi tools" : "reviewer tools"),
217
+ ];
218
+ }
219
+ /** "~$1.33 · stops at $2.66", "price unknown", a spinner while pricing,
220
+ * or nothing before it is asked for. */
221
+ price(q, long) {
222
+ if (q === null)
223
+ return "";
224
+ if (q.kind === "pending")
225
+ return this.c("dim", `${this.spin()} pricing`);
226
+ if (q.kind === "unknown")
227
+ return this.c("dim", "price unknown");
228
+ const cap = q.value.capUsd;
229
+ return this.c("dim", `~${money(q.value.estimateUsd)}${long ? (cap === null ? " · no hard stop" : ` · stops at ${money(cap)}`) : ""}`);
230
+ }
231
+ /** A run's lens bar: done of planned, `cells` wide. */
232
+ bar(run, cells) {
233
+ const done = run.lenses.filter((l) => l.state === "done" || l.state === "failed").length;
234
+ const filled = Math.round((done / Math.max(1, run.lenses.length)) * cells);
235
+ return `${this.c("accent", "▰".repeat(filled))}${this.c("dim", "▱".repeat(cells - filled))} ${this.c("muted", `${done}/${run.lenses.length || "?"}`)}`;
236
+ }
237
+ prRow(w, p, review, isSel) {
238
+ let mark;
239
+ let right;
240
+ const run = this.m.runs.get(p.number);
241
+ if (run && this.m.isRunning(p.number)) {
242
+ mark = this.c("accent", this.spin());
243
+ right = this.bar(run, 8);
244
+ }
245
+ else if (review) {
246
+ mark = review.high ? this.c("warning", "●") : this.c("success", "✓");
247
+ right =
248
+ review.findings === null
249
+ ? this.c("muted", "reviewed")
250
+ : review.findings === 0
251
+ ? this.c("success", "clean")
252
+ : this.c(review.high ? "warning" : "muted", plural(review.findings, "finding"));
253
+ right += this.c("dim", ` · ${review.by} · ${ago(review.at, this.m.now())}`);
254
+ }
255
+ else {
256
+ mark = this.c("dim", "○");
257
+ const price = this.price(this.m.quoteOf(p), false);
258
+ right =
259
+ this.c("dim", `@${p.author} · ${ago(Date.parse(p.updatedAt), this.m.now())}`) +
260
+ (price && this.m.quoteOf(p)?.kind === "known" ? this.c("dim", " · ") + price : "");
261
+ }
262
+ const cursor = isSel ? this.c("accent", "▌") : " ";
263
+ const num = this.c(isSel ? "accent" : "muted", `#${p.number}`);
264
+ const title = `${isSel ? this.th.bold(p.title) : p.title}${p.isDraft ? ` ${this.c("dim", "draft")}` : ""}`;
265
+ return this.row(w, `${cursor}${mark} ${num} ${title}`, right, isSel);
266
+ }
267
+ /** One list's rows: up to `cap`, a window that keeps the selection in view,
268
+ * then "… n more". */
269
+ listRows(w, out, rows, cap) {
270
+ const sel = rows.findIndex((r) => r.pull.number === this.m.selected);
271
+ const start = rows.length <= cap || sel < cap ? 0 : Math.min(sel - cap + 1, rows.length - cap);
272
+ for (const r of rows.slice(start, start + cap)) {
273
+ this.rowMap.set(out.length, r.pull.number);
274
+ out.push(this.prRow(w, r.pull, r.review, r.pull.number === this.m.selected));
275
+ }
276
+ if (rows.length > cap)
277
+ out.push(this.row(w, this.c("dim", `… ${rows.length - cap} more`)));
278
+ }
279
+ pending(s, w) {
280
+ return s.kind === "unknown"
281
+ ? this.row(w, this.c("warning", `Unknown — ${s.why}.`))
282
+ : this.row(w, `${this.c("accent", this.spin())} ${this.c("dim", "reading the pull requests…")}`);
283
+ }
284
+ need() {
285
+ const l = this.m.lists();
286
+ return l && { toReview: l.toReview.length, reviewed: l.reviewed?.length ?? 1 };
287
+ }
288
+ lists(w, out, room) {
289
+ const l = this.m.lists();
290
+ if (l === null) {
291
+ out.push(this.rule(w, "To review", "?"));
292
+ out.push(this.pending(this.m.state.pulls, w));
293
+ out.push(this.rule(w, "Reviewed", "?"));
294
+ out.push(this.pending(this.m.state.pulls, w));
295
+ return;
296
+ }
297
+ // auto-review's note, when its half is unknown, takes a row of the room
298
+ const note = l.reviewed !== null && this.m.autoUnknown() !== null ? 1 : 0;
299
+ const caps = listCaps(room - note, this.need());
300
+ out.push(this.rule(w, "To review", String(l.toReview.length)));
301
+ if (l.toReview.length === 0)
302
+ out.push(this.row(w, this.c("dim", "Nothing waiting. New pull requests show up here.")));
303
+ this.listRows(w, out, l.toReview.map((pull) => ({ pull })), caps.toReview);
304
+ const reviews = this.m.state.reviews;
305
+ out.push(this.rule(w, "Reviewed", l.reviewed === null ? "?" : String(l.reviewed.length)));
306
+ if (l.reviewed === null)
307
+ out.push(this.row(w, this.c("warning", `Unknown — ${reviews.kind === "unknown" ? reviews.why : "still reading"}.`)));
308
+ else if (l.reviewed.length === 0)
309
+ out.push(this.row(w, this.c("dim", "Nothing reviewed here yet.")));
310
+ else
311
+ this.listRows(w, out, l.reviewed, caps.reviewed);
312
+ const auto = this.m.autoUnknown();
313
+ if (l.reviewed !== null && auto !== null)
314
+ out.push(this.row(w, this.c("dim", `Auto-review's reviews unknown — ${auto}.`)));
315
+ }
316
+ details(w) {
317
+ const p = this.m.selectedPull();
318
+ if (!p)
319
+ return [];
320
+ const c = (k, t) => this.c(k, t);
321
+ const run = this.m.runs.get(p.number);
322
+ const running = run !== undefined && this.m.isRunning(p.number);
323
+ const out = [this.rule(w, `#${p.number}`, running && run.runId ? `run ${run.runId}` : "")];
324
+ out.push(this.row(w, this.th.bold(p.title)));
325
+ const size = ` · ${c("success", `+${p.additions}`)} ${c("error", `−${p.deletions}`)} in ${plural(p.changedFiles, "file")}`;
326
+ out.push(this.row(w, c("muted", `@${p.author} · updated ${ago(Date.parse(p.updatedAt), this.m.now())} ago · ${p.headRefName}`) + size));
327
+ const review = this.m.reviewOf(p.number);
328
+ if (running)
329
+ out.push(...this.progress(w, run));
330
+ else {
331
+ out.push(this.row(w, ""));
332
+ // a failed or stopped run says why, and the PR stays reviewable
333
+ if (run?.stage === "failed" && (review === undefined || (run.ended ?? 0) >= review.at))
334
+ out.push(this.row(w, c("warning", `✗ The last review stopped: ${run.error ?? "unknown"}`)));
335
+ if (review)
336
+ out.push(...this.finishedView(w, review));
337
+ else
338
+ out.push(this.row(w, `${c("dim", "○")} Not reviewed yet. ${c("accent", this.host.focused() ? "⏎" : "alt+r")} ${c("muted", "reviews it now, in the background")}`, this.price(this.m.quoteOf(p), true)));
339
+ }
340
+ out.push(this.row(w, `${c("accent", this.host.focused() ? "o" : "alt+o")} ${c("muted", "opens it on GitHub")}`));
341
+ return out;
342
+ }
343
+ /** A running review: the plan, the lens bar and chips, validate and
344
+ * write-up, then what each running lens is doing now. */
345
+ progress(w, r) {
346
+ const c = (k, t) => this.c(k, t);
347
+ const now = this.m.now();
348
+ const order = ["plan", "lenses", "validate", "write", "done"];
349
+ const at = order.indexOf(r.stage);
350
+ const mark = (i) => at > i ? c("success", "✓") : at === i ? c("accent", this.spin()) : c("dim", "○");
351
+ const price = r.est === null
352
+ ? "price unknown"
353
+ : `~${money(r.est)}${r.cap === null ? "" : `, stops at ${money(r.cap)}`}`;
354
+ const plan = r.lenses.length > 0
355
+ ? `${r.files === undefined ? "" : `${plural(r.files, "file")} → `}${r.lenses.length} lens${r.lenses.length === 1 ? "" : "es"}`
356
+ : (r.now ?? "planning");
357
+ const out = [
358
+ this.row(w, ""),
359
+ this.row(w, `${mark(0)} Plan ${c("muted", plan)}`, c("dim", `${clockOf(now - r.started)} · ${price}`)),
360
+ this.row(w, `${mark(1)} Lenses ${this.bar(r, 12)}`),
361
+ ];
362
+ const chip = (l) => l.state === "done"
363
+ ? `${c("success", "✓")} ${c("muted", l.name)}${c("dim", ` ${l.tools}t`)}${l.findings ? c("warning", ` ·${l.findings}`) : ""}`
364
+ : l.state === "run"
365
+ ? `${c("accent", this.spin())} ${l.name}${c("dim", ` ${clockOf(now - (l.since ?? now))}`)}`
366
+ : l.state === "failed"
367
+ ? `${c("error", "✗")} ${c("muted", l.name)}`
368
+ : `${c("dim", "○")} ${c("dim", l.name)}`;
369
+ const cell = Math.max(0, ...r.lenses.map((l) => l.name.length)) + 9;
370
+ const pad = (t) => t + " ".repeat(Math.max(0, cell - visibleWidth(t)));
371
+ const chips = r.lenses.map(chip);
372
+ for (let i = 0; i < chips.length; i += 3)
373
+ out.push(this.row(w, ` ${chips
374
+ .slice(i, i + 3)
375
+ .map(pad)
376
+ .join("")}`));
377
+ out.push(this.row(w, `${mark(2)} Validate ${c("muted", "checks every finding against the code")}`));
378
+ out.push(this.row(w, `${mark(3)} Write-up ${c("muted", "the review, ready to read or post")}`));
379
+ out.push(this.row(w, ""));
380
+ // what the reviewer is doing right now: one line per running lens
381
+ const busy = r.lenses.filter((l) => l.state === "run");
382
+ if (busy.length === 0)
383
+ out.push(this.row(w, `${c("dim", "now")} ${c("muted", r.now ?? "starting")}`));
384
+ for (const l of busy.slice(0, NOW_ROWS)) {
385
+ const line = l.line ?? `${l.name} · ${clockOf(now - (l.since ?? now))}`;
386
+ const cut = line.indexOf(" · ");
387
+ const name = cut < 0 ? line : line.slice(0, cut);
388
+ const rest = cut < 0 ? "" : line.slice(cut + 3);
389
+ out.push(this.row(w, `${c("dim", "now")} ${c("accent", name)} ${c("muted", rest)}`));
390
+ }
391
+ if (busy.length > NOW_ROWS)
392
+ out.push(this.row(w, c("dim", ` and ${busy.length - NOW_ROWS} more`)));
393
+ return out;
394
+ }
395
+ /** A finished review: who, how many, the time and the real cost, then one
396
+ * line per finding. */
397
+ finishedView(w, r) {
398
+ const c = (k, t) => this.c(k, t);
399
+ const right = [
400
+ ...(r.tookMs !== undefined ? [`took ${clockOf(r.tookMs)}`] : []),
401
+ ...(r.costUsd !== undefined ? [r.costUsd === null ? "cost unknown" : money(r.costUsd)] : []),
402
+ ...(r.tookMs === undefined && r.costUsd === undefined
403
+ ? [`${ago(r.at, this.m.now())} ago`]
404
+ : []),
405
+ ].join(" · ");
406
+ const count = r.findings === null ? "findings on the pull request" : plural(r.findings, "finding");
407
+ const out = [
408
+ this.row(w, `${c("success", "✓")} Reviewed by ${r.by === "auto" ? "auto-review" : "you"} · ${c(r.high ? "warning" : "text", count)}`, c("dim", right)),
409
+ ];
410
+ const list = r.list ?? [];
411
+ for (const f of list.slice(0, FINDING_ROWS)) {
412
+ const sev = sevOf(f.severity);
413
+ out.push(this.row(w, ` ${c(sev === "high" ? "warning" : sev === "medium" ? "text" : "muted", sev.padEnd(6))} ${c("dim", shortWhere(whereOf(f)))} ${f.title}`));
414
+ }
415
+ if (list.length > FINDING_ROWS)
416
+ out.push(this.row(w, c("dim", ` … ${list.length - FINDING_ROWS} more`)));
417
+ if (r.list !== undefined && list.length === 0)
418
+ out.push(this.row(w, c("muted", " Nothing worth raising.")));
419
+ out.push(this.row(w, ` ${c("accent", this.host.focused() ? "⏎" : "alt+r")} ${c("muted", "shows the review in the chat")}`));
420
+ return out;
421
+ }
422
+ hints(w) {
423
+ const k = (key, label) => `${this.c("accent", key)} ${this.c("muted", label)}`;
424
+ const p = this.m.selectedPull();
425
+ const running = p !== undefined && this.m.isRunning(p.number);
426
+ const enter = p === undefined ? null : !running && this.m.reviewOf(p.number) ? "show review" : "review";
427
+ const f = this.host.focused();
428
+ const items = [
429
+ ...(enter !== null && !running ? [k(f ? "⏎" : "alt+r", enter)] : []),
430
+ k(f ? "j/k" : "alt+j/k", "move"),
431
+ k(f ? "o" : "alt+o", "open"),
432
+ ...(running ? [k(f ? "s" : "alt+s", "stop")] : []),
433
+ k(f ? "u" : "alt+u", "refresh"),
434
+ k(f ? "esc" : "f2", f ? "chat" : "focus"),
435
+ // alt+t and alt+x while typing: the hints keep to the column's width
436
+ ...(f && this.host.tune ? [k("t", "tune")] : []),
437
+ ...(f && this.host.advanced ? [k("x", "advanced")] : []),
438
+ ];
439
+ return this.row(w, items.join(" "));
440
+ }
441
+ render(width) {
442
+ const w = Math.max(40, width);
443
+ this.rowMap.clear();
444
+ const target = Math.max(20, this.host.rows() - EDITOR_ROWS);
445
+ const [a, aRight] = this.autoRow();
446
+ const [mem, spend] = this.memLine();
447
+ const [login, tools] = this.loginLine();
448
+ const picks = this.triggerRow();
449
+ const body = [
450
+ this.top(w),
451
+ this.row(w, a, aRight),
452
+ ...(picks === null ? [] : [this.row(w, picks)]),
453
+ this.row(w, mem, spend),
454
+ this.row(w, login, tools),
455
+ ];
456
+ const foot = [this.rule(w)];
457
+ const n = this.m.notice;
458
+ if (n) {
459
+ const color = n.kind === "ok" ? "success" : n.kind === "warn" ? "warning" : "text";
460
+ for (const l of wrapTextWithAnsi(n.text, w - 4).slice(0, NOTICE_ROWS))
461
+ foot.push(this.row(w, this.c(color, l)));
462
+ }
463
+ foot.push(this.hints(w), this.bottom(w));
464
+ // the setup checklist is the card's (src/home/setupcard.ts), never the panel's
465
+ // two titles and the rows of both lists share what the rest leaves
466
+ const roomWith = (d) => target - body.length - d - foot.length - 2;
467
+ let detail = this.details(w);
468
+ const need = this.need();
469
+ if (need && detail.length > 0 && cramped(listCaps(roomWith(detail.length), need), need))
470
+ detail = [];
471
+ this.lists(w, body, roomWith(detail.length));
472
+ // a tall details area (a running review's lenses, a finished one's
473
+ // findings) keeps to what the lists left: its head stays, its tail is cut
474
+ const left = target - body.length - foot.length;
475
+ if (detail.length > left)
476
+ detail = left >= 4 ? [...detail.slice(0, left - 1), this.row(w, this.c("dim", "…"))] : [];
477
+ const spare = Math.max(0, target - body.length - detail.length - foot.length);
478
+ const blank = Array.from({ length: spare }, () => this.row(w, ""));
479
+ return [...body, ...blank, ...detail, ...foot].map((l) => truncateToWidth(l, w));
480
+ }
481
+ handleInput(data) {
482
+ const m = this.m;
483
+ if (matchesKey(data, "escape"))
484
+ this.host.unfocus();
485
+ else if (data === "j" || matchesKey(data, "down"))
486
+ m.move(1);
487
+ else if (data === "k" || matchesKey(data, "up"))
488
+ m.move(-1);
489
+ else if (data === "o")
490
+ void m.openPr();
491
+ else if (data === "u")
492
+ void m.refresh();
493
+ else if (matchesKey(data, "enter"))
494
+ void m.enter();
495
+ else if (data === "r")
496
+ void m.review();
497
+ else if (data === "s")
498
+ void m.stopReview();
499
+ else if (data === "a")
500
+ void m.switchAutoReview(this.host.ask?.());
501
+ else if (data === "m")
502
+ void m.switchMemory(this.host.ask?.());
503
+ else if (data === "l")
504
+ this.host.relogin?.();
505
+ else if (data === "t")
506
+ this.host.tune?.();
507
+ else if (data === "x")
508
+ this.host.advanced?.();
509
+ }
510
+ handleMouse(e) {
511
+ if (e.type !== "click" && e.type !== "move")
512
+ return undefined;
513
+ const pr = this.rowMap.get(e.y);
514
+ if (pr !== undefined)
515
+ this.m.select(pr);
516
+ return e.type === "click" ? { focus: true } : undefined;
517
+ }
518
+ invalidate() { }
519
+ }
520
+ //# sourceMappingURL=panel.js.map