@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"stage2.js","sourceRoot":"","sources":["../../../src/setup/stage2.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- // Is a file TEXT a lens can read, or a binary it cannot? One answer for every
2
- // reader of the reviewed checkout (the scan's materialised trees and the
3
- // setup engine's checkout reader), so the two never disagree about a file.
4
- //
5
- // git's bare test — any NUL in the first 8000 bytes is binary — would drop a
6
- // source file with ONE stray NUL (a literal NUL in a template literal) out of
7
- // every lens's coverage. The sniff below keeps git's NUL probe as the trigger
8
- // but needs corroboration before it calls a file binary: a known-binary
9
- // extension, a high share of control bytes, or a
10
- // sample that is not UTF-8 at all. Compressed or encoded bytes (images,
11
- // archives, fonts, object code) fail those overwhelmingly; a text file with a
12
- // stray control byte passes them.
13
- //
14
- // A file judged binary is never silently absent: the caller reports it as
15
- // `skipped: binary` (see `ScanTree.whyUnreadable`).
16
- /** git's own probe window. */
17
- export const SNIFF_BYTES = 8000;
18
- /** Share of control bytes in the window above which a NUL-bearing file is
19
- * binary. Uniformly random bytes carry ~11%; source text carries ~0. */
20
- const CONTROL_SHARE = 0.05;
21
- /** Extensions that corroborate a NUL: a NUL-bearing file under one of these
22
- * names is binary without further evidence. Consulted ONLY once the NUL probe
23
- * fires, so a NUL-free file stays text whatever its name — exactly git's
24
- * answer (a text `.bin` fixture or a Wavefront `.obj` is never silently
25
- * dropped). */
26
- const BINARY_EXT_RE = /\.(png|jpe?g|gif|bmp|ico|webp|avif|tiff?|pdf|zip|gz|tgz|bz2|xz|zst|7z|rar|jar|war|whl|egg|so|dylib|dll|exe|o|a|lib|class|pyc|pyo|wasm|woff2?|ttf|otf|eot|mp3|mp4|m4a|wav|ogg|flac|webm|mov|avi|sqlite3?|db|bin)$/i;
27
- export function isBinaryPath(path) {
28
- return BINARY_EXT_RE.test(path);
29
- }
30
- /** A control byte that no text carries: C0 minus tab, LF, VT, FF, CR, and
31
- * ESC (terminal colour codes in logs and fixtures); plus DEL. */
32
- function isControl(b) {
33
- return ((b < 0x20 &&
34
- b !== 0x09 &&
35
- b !== 0x0a &&
36
- b !== 0x0b &&
37
- b !== 0x0c &&
38
- b !== 0x0d &&
39
- b !== 0x1b) ||
40
- b === 0x7f);
41
- }
42
- const utf8 = new TextDecoder("utf-8", { fatal: true });
43
- /** Is the window valid UTF-8? A window cut mid-file may end inside one
44
- * multi-byte sequence, so up to three trailing bytes are forgiven. */
45
- function isUtf8(window, truncated) {
46
- for (let cut = 0; cut <= (truncated ? 3 : 0); cut++) {
47
- try {
48
- utf8.decode(window.subarray(0, window.length - cut));
49
- return true;
50
- }
51
- catch {
52
- /* try one byte shorter */
53
- }
54
- }
55
- return false;
56
- }
57
- /** Binary? No NUL in git's window is text, as git says. A NUL is binary only
58
- * when corroborated: a known-binary extension of `path` (repo-relative), a
59
- * high share of control bytes, or a window that is not UTF-8. */
60
- export function isBinaryContent(buf, path = "") {
61
- const window = buf.subarray(0, SNIFF_BYTES);
62
- if (!window.includes(0))
63
- return false;
64
- if (path !== "" && isBinaryPath(path))
65
- return true;
66
- let control = 0;
67
- for (const b of window)
68
- if (isControl(b))
69
- control++;
70
- if (control > 1 && control / window.length > CONTROL_SHARE)
71
- return true;
72
- return !isUtf8(window, buf.length > window.length);
73
- }
74
- /** Text for a prompt, a ledger note or a terminal: every control character a
75
- * lens or a screen must never receive raw (NUL above all) rendered as a
76
- * visible `\u00XX` escape. Tab and newline are kept. */
77
- export function escapeControls(text) {
78
- // eslint-disable-next-line no-control-regex
79
- return text.replace(/[\u0000-\u0008\u000b-\u001f\u007f]/g, (c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, "0")}`);
80
- }
81
- /** Source line bounds: an empty file has none; a terminal newline adds no line. */
82
- export function textLineCount(text) {
83
- let count = 0;
84
- for (let i = 0; i < text.length; i++)
85
- if (text.charCodeAt(i) === 10)
86
- count++;
87
- return text !== "" && !text.endsWith("\n") ? count + 1 : count;
88
- }
89
- //# sourceMappingURL=textsniff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textsniff.js","sourceRoot":"","sources":["../../../src/setup/textsniff.ts"],"names":[],"mappings":"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"}
@@ -1,491 +0,0 @@
1
- // The round-progress v2 projection of a LiveEvent log.
2
- //
3
- // extensions/round-progress.ts publishes `state/round-progress/pr-<n>.json`
4
- // (and the append-only transition log beside it) from inside the tmux pi, by
5
- // listening to pi's events. This module reproduces both from the LiveEvent log
6
- // alone, so the engine routes - which have no such extension - and a viewer
7
- // reading a finished or running round all get the same snapshot, with the
8
- // contract in packages/pi-plugin/src/round-progress.ts unchanged: board.ts, requiredpasses.ts and
9
- // the supervisor read it as they always have.
10
- //
11
- // The extension is the REFERENCE. Every rule here mirrors the handler it
12
- // stands for, line by line, because the golden test
13
- // (tests/live-projection-golden.test.ts) holds the two byte-equal on the same
14
- // events. The one place the log is coarser than pi's stream is time: a held
15
- // update is stamped at its window's flush (~250 ms), so a heartbeat or a
16
- // `started_at` taken from an update can differ from the extension's by that
17
- // much. Nothing the supervisor decides on (the milestones' order, statuses,
18
- // command identity) depends on it.
19
- import { parseSessionCommandMarker } from "@quickchatai/pi-quickreview/src/session-command.js";
20
- import {
21
- isLiveAgentStatus,
22
- type LiveAgentProgress,
23
- type LiveAgentStatus,
24
- type PassExecutionPhase,
25
- type ProgressLogLine,
26
- type ProgressTransition,
27
- type RoundProgressSnapshot,
28
- } from "@quickchatai/pi-quickreview/src/round-progress.js";
29
- import type { LiveEvent, LiveResult } from "@quickchatai/pi-quickreview/src/live/events.js";
30
-
31
- function text(value: unknown): string | undefined {
32
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
33
- }
34
-
35
- function number(value: unknown): number {
36
- return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : 0;
37
- }
38
-
39
- function status(value: unknown, exitCode?: unknown): LiveAgentStatus {
40
- if (isLiveAgentStatus(value)) return value;
41
- return exitCode === 0 ? "completed" : exitCode === undefined ? "running" : "failed";
42
- }
43
-
44
- /** The round number rides the order's posting calls (`QCR_ROUND_NO=<k>`, with
45
- * or without `export`); the head rides the Worktree line. */
46
- function reviewIdentity(body: string): { round_no: number; head_sha: string } | undefined {
47
- const round = /(?:^|\s)(?:export )?QCR_ROUND_NO=(\d+)(?=\s|$)/.exec(body);
48
- const head = /\*\*Worktree\*\*:[^\n]* @ `([^`]+)`/.exec(body);
49
- if (!round || !head) return undefined;
50
- const roundNo = Number(round[1]);
51
- return Number.isInteger(roundNo) && roundNo > 0
52
- ? { round_no: roundNo, head_sha: head[1]! }
53
- : undefined;
54
- }
55
-
56
- function currentTool(progress: LiveResult["progress"]): string | undefined {
57
- if (!Array.isArray(progress?.recent_tools)) return undefined;
58
- const tools = progress.recent_tools;
59
- const picked = [...tools].reverse().find((x) => x.status === "running") ?? tools.at(-1);
60
- if (!picked) return undefined;
61
- const name = text(picked.tool) ?? "tool";
62
- const args = text(picked.args);
63
- return args ? `${name}: ${args.slice(0, 120)}` : name;
64
- }
65
-
66
- function asAgent(
67
- result: LiveResult,
68
- fallbackAgent?: string,
69
- live = false,
70
- ): LiveAgentProgress | undefined {
71
- const agent = text(result.agent) ?? fallbackAgent;
72
- if (!agent) return undefined;
73
- const progress = result.progress;
74
- const native = result.native ?? { tool_count: 0 };
75
- const error = text(progress?.error) ?? text(result.error_message);
76
- const exit = result.exit_code;
77
- const nativeFailed =
78
- (typeof exit === "number" && exit > 0) ||
79
- result.stop_reason === "error" ||
80
- result.stop_reason === "aborted";
81
- const st: LiveAgentStatus = isLiveAgentStatus(progress?.status)
82
- ? progress.status
83
- : nativeFailed
84
- ? "failed"
85
- : live || exit === -1 || exit === undefined
86
- ? "running"
87
- : status(undefined, exit);
88
- const tool = currentTool(progress) ?? (live ? native.last_tool : undefined);
89
- const last = text(progress?.last_message) ?? native.last_text;
90
- return {
91
- agent,
92
- status: st,
93
- duration_ms: number(progress?.duration_ms),
94
- tool_count: number(progress?.tool_count) || native.tool_count,
95
- ...(tool ? { current_tool: tool } : {}),
96
- ...(last ? { last_message: last } : {}),
97
- ...(error ? { error } : {}),
98
- };
99
- }
100
-
101
- export interface ProjectionIdentity {
102
- pr: number;
103
- session: string;
104
- }
105
-
106
- export class RoundProgressProjection {
107
- private snapshotState: RoundProgressSnapshot | undefined;
108
- private written: string | undefined;
109
- private readonly log: ProgressLogLine[] = [];
110
- private lastHeartbeat = 0;
111
- private clock = "";
112
- private readonly agents = new Map<string, LiveAgentProgress>();
113
- private readonly callAgents = new Map<string, string[]>();
114
- private readonly runKeys = new Map<string, string>();
115
- private readonly endLogged = new Set<string>();
116
- /** The children of each open lens call, rebuilt from the changed slots. */
117
- private readonly calls = new Map<string, LiveResult[]>();
118
-
119
- constructor(private readonly who: ProjectionIdentity) {}
120
-
121
- /** The snapshot as its file would hold it now (the last write). */
122
- get snapshot(): RoundProgressSnapshot | undefined {
123
- return this.written === undefined
124
- ? undefined
125
- : (JSON.parse(this.written) as RoundProgressSnapshot);
126
- }
127
-
128
- /** The bytes of `pr-<n>.json`. */
129
- get snapshotJson(): string | undefined {
130
- return this.written;
131
- }
132
-
133
- /** The transition lines, in order. */
134
- get transitions(): readonly ProgressLogLine[] {
135
- return this.log;
136
- }
137
-
138
- /** The bytes of `pr-<n>.jsonl` (before its size-cap rotation). */
139
- get transitionsJsonl(): string {
140
- return this.log.map((l) => `${JSON.stringify(l)}\n`).join("");
141
- }
142
-
143
- apply(event: LiveEvent): void {
144
- this.clock = event.at;
145
- switch (event.type) {
146
- case "agent_start":
147
- return this.agentStart();
148
- case "message_start":
149
- return this.messageStart(event.role, event.text);
150
- case "turn_start":
151
- case "message_delta":
152
- return this.heartbeat();
153
- case "tool_start":
154
- return this.toolStart(event);
155
- case "tool_update":
156
- return this.toolUpdate(event);
157
- case "tool_end":
158
- return this.toolEnd(event);
159
- case "agent_settled":
160
- return this.settled();
161
- default:
162
- return;
163
- }
164
- }
165
-
166
- // ---- the extension's helpers --------------------------------------------------
167
-
168
- private nowIso(): string {
169
- return this.clock;
170
- }
171
-
172
- private bindRun(run: string | null, key: string): string {
173
- if (run === null) return key;
174
- const held = this.runKeys.get(run);
175
- if (held !== undefined) return held;
176
- this.runKeys.set(run, key);
177
- return key;
178
- }
179
-
180
- private executionKeys(callId: string, names: readonly string[]): string[] {
181
- const seen = new Map<string, number>();
182
- return names.map((agent) => {
183
- const n = (seen.get(agent) ?? 0) + 1;
184
- seen.set(agent, n);
185
- return n === 1 ? `${callId}:${agent}` : `${callId}:${agent}#${n}`;
186
- });
187
- }
188
-
189
- private write(): void {
190
- const snapshot = this.snapshotState;
191
- if (!snapshot) return;
192
- snapshot.updated_at = this.nowIso();
193
- snapshot.agents = [...this.agents.values()];
194
- this.written = `${JSON.stringify(snapshot)}\n`;
195
- }
196
-
197
- private transition(entry: ProgressTransition): void {
198
- const snapshot = this.snapshotState;
199
- if (!snapshot) return;
200
- this.log.push({
201
- at: this.nowIso(),
202
- pr: this.who.pr,
203
- session: this.who.session,
204
- run_started_at: snapshot.run_started_at,
205
- ...(snapshot.command_id ? { command_id: snapshot.command_id } : {}),
206
- ...entry,
207
- });
208
- }
209
-
210
- private passEnded(agent: LiveAgentProgress): void {
211
- const key = agent.execution_id;
212
- if (!key || agent.status === "running" || this.endLogged.has(key)) return;
213
- this.endLogged.add(key);
214
- this.transition({
215
- event: "pass_end",
216
- execution_id: key,
217
- agent: agent.agent,
218
- status: agent.status,
219
- });
220
- }
221
-
222
- private fanoutSeen(): void {
223
- const snapshot = this.snapshotState;
224
- if (!snapshot || this.agents.size === 0) return;
225
- snapshot.first_lens_started_at ??= this.nowIso();
226
- snapshot.fanout_started_at ??= snapshot.first_lens_started_at;
227
- }
228
-
229
- private activity(description: string): void {
230
- const snapshot = this.snapshotState;
231
- if (!snapshot) return;
232
- snapshot.last_activity = description;
233
- snapshot.last_activity_at = this.nowIso();
234
- this.write();
235
- }
236
-
237
- private heartbeat(): void {
238
- if (!this.snapshotState) return;
239
- const now = Date.parse(this.clock);
240
- if (now - this.lastHeartbeat < 1_000) return;
241
- this.lastHeartbeat = now;
242
- this.write();
243
- }
244
-
245
- private freshSnapshot(lastActivity: string): RoundProgressSnapshot {
246
- const at = this.nowIso();
247
- this.agents.clear();
248
- this.callAgents.clear();
249
- this.runKeys.clear();
250
- this.endLogged.clear();
251
- return {
252
- version: 2,
253
- pr: this.who.pr,
254
- session: this.who.session,
255
- run_started_at: at,
256
- updated_at: at,
257
- parent_status: "active",
258
- last_activity_at: at,
259
- last_activity: lastActivity,
260
- agents: [],
261
- };
262
- }
263
-
264
- /** The children of a call after this line: the slots it carries laid over
265
- * what the call's earlier lines left. */
266
- private merge(id: string, n: number, changed: readonly LiveResult[]): LiveResult[] {
267
- const held = this.calls.get(id) ?? [];
268
- for (const r of changed) held[r.slot] = r;
269
- const full = Array.from({ length: n }, (_, slot) => held[slot] ?? { slot });
270
- this.calls.set(id, full);
271
- return full;
272
- }
273
-
274
- // ---- the handlers ---------------------------------------------------------------
275
-
276
- private agentStart(): void {
277
- // pi's automatic retry or queued continuation emits another agent_start
278
- // inside the SAME outer run: an inner start keeps the run's command,
279
- // milestones and passes.
280
- if (this.snapshotState && this.snapshotState.parent_status === "active") {
281
- this.activity("parent run continued");
282
- return;
283
- }
284
- this.snapshotState = this.freshSnapshot("parent run started");
285
- this.write();
286
- this.transition({ event: "parent_start" });
287
- }
288
-
289
- private messageStart(role: string, body: string | undefined): void {
290
- const snapshot = this.snapshotState;
291
- if (!snapshot || role !== "user" || !body) return;
292
- const marker = parseSessionCommandMarker(body);
293
- if (!marker) return;
294
- // A different command in a run that has one already is a new execution.
295
- let current = snapshot;
296
- if (current.command_id !== undefined && current.command_id !== marker.id) {
297
- current = this.freshSnapshot("parent run started");
298
- this.snapshotState = current;
299
- }
300
- current.command_id = marker.id;
301
- current.command_sha256 = marker.payloadSha256;
302
- const identity = reviewIdentity(body);
303
- if (identity) {
304
- current.round_no = identity.round_no;
305
- current.head_sha = identity.head_sha;
306
- }
307
- const firstAcceptance = current.command_accepted_at === undefined;
308
- current.command_accepted_at ??= this.nowIso();
309
- current.preparing_at ??= current.command_accepted_at;
310
- if (firstAcceptance)
311
- this.transition({
312
- event: "command_accepted",
313
- ...(current.round_no !== undefined ? { round_no: current.round_no } : {}),
314
- ...(current.head_sha !== undefined ? { head_sha: current.head_sha } : {}),
315
- });
316
- this.activity(`command ${marker.id} accepted; parent preparing compact fanout context`);
317
- }
318
-
319
- private toolStart(ev: Extract<LiveEvent, { type: "tool_start" }>): void {
320
- const snapshot = this.snapshotState;
321
- if (!snapshot) return;
322
- const executions = ev.executions ?? [];
323
- if (executions.length > 0) {
324
- const names = executions.map(({ agent }) => agent);
325
- const at = this.nowIso();
326
- this.callAgents.set(ev.id, names);
327
- const keys = this.executionKeys(ev.id, names);
328
- for (const [index, agent] of names.entries()) {
329
- const key = keys[index]!;
330
- const phase: PassExecutionPhase | undefined = executions[index]?.phase;
331
- this.agents.set(key, {
332
- execution_id: key,
333
- agent,
334
- ...(phase ? { phase } : {}),
335
- status: "running",
336
- duration_ms: 0,
337
- tool_count: 0,
338
- started_at: at,
339
- });
340
- this.transition({ event: "pass_start", execution_id: key, agent });
341
- }
342
- snapshot.first_lens_started_at ??= at;
343
- snapshot.fanout_started_at ??= snapshot.first_lens_started_at;
344
- snapshot.active_tool = `subagent: ${names.join(", ")}`;
345
- this.activity(`${names.join(", ")} started`);
346
- return;
347
- }
348
- snapshot.active_tool = ev.preview ? `${ev.tool}: ${ev.preview}` : ev.tool;
349
- this.activity(snapshot.active_tool);
350
- }
351
-
352
- private toolUpdate(ev: Extract<LiveEvent, { type: "tool_update" }>): void {
353
- const snapshot = this.snapshotState;
354
- if (!snapshot) return;
355
- const fallbacks = this.callAgents.get(ev.id) ?? [];
356
- const reported = this.merge(ev.id, ev.n, ev.results);
357
- // Native parallel mode marks a still-running slot with exitCode -1 and a
358
- // finished one with its real exit code.
359
- let changed = false;
360
- const updated = reported.flatMap((result, index) => {
361
- const agent = asAgent(
362
- result,
363
- fallbacks[index] ?? (fallbacks.length === 1 ? fallbacks[0] : undefined),
364
- ev.mode === "parallel" ? result.exit_code === -1 : true,
365
- );
366
- return agent ? [{ agent, run: result.id ?? null }] : [];
367
- });
368
- const updateKeys = this.executionKeys(
369
- ev.id,
370
- updated.map(({ agent }) => agent.agent),
371
- );
372
- for (const [index, { agent, run }] of updated.entries()) {
373
- const key = this.bindRun(run, updateKeys[index]!);
374
- const previous = this.agents.get(key);
375
- // A parallel slot can finish while its siblings still run: a terminal
376
- // record carries its completion milestone from the first update that
377
- // reports it, and a running one never carries one.
378
- const { finished_at: previousFinished, ...kept } = previous ?? {};
379
- const next: LiveAgentProgress = {
380
- ...kept,
381
- ...agent,
382
- execution_id: key,
383
- started_at: previous?.started_at ?? this.nowIso(),
384
- ...(agent.status === "running" ? {} : { finished_at: previousFinished ?? this.nowIso() }),
385
- };
386
- this.agents.set(key, next);
387
- this.passEnded(next);
388
- snapshot.active_tool = `subagent: ${agent.agent}`;
389
- changed = true;
390
- }
391
- this.fanoutSeen();
392
- if (changed) this.write();
393
- else this.heartbeat();
394
- }
395
-
396
- private toolEnd(ev: Extract<LiveEvent, { type: "tool_end" }>): void {
397
- const snapshot = this.snapshotState;
398
- if (!snapshot) return;
399
- const id = ev.id;
400
- const fallbacks = this.callAgents.get(id) ?? [];
401
- const reported = this.merge(id, ev.n, ev.results);
402
- this.calls.delete(id);
403
- const finalAgents: LiveAgentProgress[] = [];
404
- const ended = reported.flatMap((result, index) => {
405
- const agent = asAgent(
406
- result,
407
- fallbacks[index] ?? (fallbacks.length === 1 ? fallbacks[0] : undefined),
408
- );
409
- return agent ? [{ agent, run: result.id ?? null }] : [];
410
- });
411
- const endKeys = this.executionKeys(
412
- id,
413
- ended.map(({ agent }) => agent.agent),
414
- );
415
- for (const [index, { agent, run }] of ended.entries()) {
416
- const key = this.bindRun(run, endKeys[index]!);
417
- const previous = this.agents.get(key);
418
- // A child the call returns still running (a placeholder) carries no
419
- // finish time, as in toolUpdate: the parser refuses the pair.
420
- const { finished_at: previousFinished, ...kept } = previous ?? {};
421
- const finalAgent: LiveAgentProgress = {
422
- ...kept,
423
- ...agent,
424
- execution_id: key,
425
- started_at: previous?.started_at ?? this.nowIso(),
426
- ...(agent.status === "running" ? {} : { finished_at: previousFinished ?? this.nowIso() }),
427
- };
428
- this.agents.set(key, finalAgent);
429
- finalAgents.push(finalAgent);
430
- this.passEnded(finalAgent);
431
- }
432
- if (finalAgents.length === 0 && fallbacks.length > 0) {
433
- const failed = ev.is_error;
434
- const fallbackKeys = this.executionKeys(id, fallbacks);
435
- for (const [index, fallback] of fallbacks.entries()) {
436
- const key = fallbackKeys[index]!;
437
- const previous = this.agents.get(key);
438
- if (previous && previous.status !== "running") {
439
- finalAgents.push(previous);
440
- continue;
441
- }
442
- const finalAgent: LiveAgentProgress = {
443
- ...(previous ?? {
444
- execution_id: key,
445
- agent: fallback,
446
- duration_ms: 0,
447
- tool_count: 0,
448
- started_at: this.nowIso(),
449
- }),
450
- status: failed ? "failed" : "completed",
451
- finished_at: previous?.finished_at ?? this.nowIso(),
452
- };
453
- this.agents.set(key, finalAgent);
454
- finalAgents.push(finalAgent);
455
- this.passEnded(finalAgent);
456
- }
457
- }
458
- this.fanoutSeen();
459
- this.callAgents.delete(id);
460
- snapshot.active_tool = undefined;
461
- this.activity(
462
- finalAgents.length > 0
463
- ? `${finalAgents.map((agent) => `${agent.agent} ${agent.status}`).join(", ")}`
464
- : `${ev.tool} ${ev.is_error ? "failed" : "completed"}`,
465
- );
466
- }
467
-
468
- private settled(): void {
469
- const snapshot = this.snapshotState;
470
- if (!snapshot) return;
471
- snapshot.parent_status = "settled";
472
- snapshot.active_tool = undefined;
473
- this.activity("parent session settled");
474
- this.transition({ event: "parent_settle" });
475
- }
476
- }
477
-
478
- /** Project a main log. The identity (PR, session) comes from its
479
- * `session_start` line; a log with none, or for a round that has no PR number,
480
- * projects to nothing - as the extension does nothing outside a numbered PR
481
- * session. */
482
- export function projectRoundProgress(
483
- events: readonly LiveEvent[],
484
- ): RoundProgressProjection | undefined {
485
- const start = events.find((e) => e.type === "session_start");
486
- if (start?.type !== "session_start" || start.stream !== "main" || start.pr === null)
487
- return undefined;
488
- const projection = new RoundProgressProjection({ pr: start.pr, session: start.session });
489
- for (const e of events) projection.apply(e);
490
- return projection;
491
- }