@quickchatai/quickreview 1.2.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 (322) hide show
  1. package/README.md +114 -50
  2. package/bin/qcr.js +1 -1
  3. package/config.example.toml +20 -6
  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/src/archive/restore.js +18 -15
  25. package/dist/src/archive/restore.js.map +1 -1
  26. package/dist/src/botworker.js +13 -2
  27. package/dist/src/botworker.js.map +1 -1
  28. package/dist/src/channelfs.js +3 -26
  29. package/dist/src/channelfs.js.map +1 -1
  30. package/dist/src/cli.js +12 -50
  31. package/dist/src/cli.js.map +1 -1
  32. package/dist/src/config.js +16 -0
  33. package/dist/src/config.js.map +1 -1
  34. package/dist/src/daemon.js +26 -0
  35. package/dist/src/daemon.js.map +1 -1
  36. package/dist/src/debuground.js +1 -0
  37. package/dist/src/debuground.js.map +1 -1
  38. package/dist/src/debugroundpi.js +1 -0
  39. package/dist/src/debugroundpi.js.map +1 -1
  40. package/dist/src/engine/caserunner-sdk.js +15 -251
  41. package/dist/src/engine/caserunner-sdk.js.map +1 -1
  42. package/dist/src/home/adapters.js +349 -0
  43. package/dist/src/home/adapters.js.map +1 -0
  44. package/dist/src/home/advanced.js +318 -0
  45. package/dist/src/home/advanced.js.map +1 -0
  46. package/dist/src/home/advancedtools.js +57 -0
  47. package/dist/src/home/advancedtools.js.map +1 -0
  48. package/dist/src/home/autoreview.js +325 -0
  49. package/dist/src/home/autoreview.js.map +1 -0
  50. package/dist/src/home/daemonstatus.js +32 -0
  51. package/dist/src/home/daemonstatus.js.map +1 -0
  52. package/dist/src/home/devicelogin.js +61 -0
  53. package/dist/src/home/devicelogin.js.map +1 -0
  54. package/dist/src/home/launch.js +202 -0
  55. package/dist/src/home/launch.js.map +1 -0
  56. package/dist/src/home/loginowner.js +205 -0
  57. package/dist/src/home/loginowner.js.map +1 -0
  58. package/dist/src/home/memory.js +122 -0
  59. package/dist/src/home/memory.js.map +1 -0
  60. package/dist/src/home/model.js +811 -0
  61. package/dist/src/home/model.js.map +1 -0
  62. package/dist/src/home/panel.js +520 -0
  63. package/dist/src/home/panel.js.map +1 -0
  64. package/dist/src/home/ports.js +19 -0
  65. package/dist/src/home/ports.js.map +1 -0
  66. package/dist/src/home/review.js +163 -0
  67. package/dist/src/home/review.js.map +1 -0
  68. package/dist/src/home/reviews.js +478 -0
  69. package/dist/src/home/reviews.js.map +1 -0
  70. package/dist/src/home/setup.js +507 -0
  71. package/dist/src/home/setup.js.map +1 -0
  72. package/dist/src/home/setupadapters.js +214 -0
  73. package/dist/src/home/setupadapters.js.map +1 -0
  74. package/dist/src/home/setupcard.js +199 -0
  75. package/dist/src/home/setupcard.js.map +1 -0
  76. package/dist/src/home/setuptools.js +45 -0
  77. package/dist/src/home/setuptools.js.map +1 -0
  78. package/dist/src/home/spend.js +160 -0
  79. package/dist/src/home/spend.js.map +1 -0
  80. package/dist/src/home/switches.js +209 -0
  81. package/dist/src/home/switches.js.map +1 -0
  82. package/dist/src/home/switchon.js +439 -0
  83. package/dist/src/home/switchon.js.map +1 -0
  84. package/dist/src/home/toolnames.js +41 -0
  85. package/dist/src/home/toolnames.js.map +1 -0
  86. package/dist/src/home/tune.js +341 -0
  87. package/dist/src/home/tune.js.map +1 -0
  88. package/dist/src/home/words.js +7 -0
  89. package/dist/src/home/words.js.map +1 -0
  90. package/dist/src/homes.js +14 -0
  91. package/dist/src/homes.js.map +1 -1
  92. package/dist/src/install.js +1 -1
  93. package/dist/src/install.js.map +1 -1
  94. package/dist/src/ipc/workerspec.js +8 -0
  95. package/dist/src/ipc/workerspec.js.map +1 -1
  96. package/dist/src/live/publish.js +1 -1
  97. package/dist/src/live/publish.js.map +1 -1
  98. package/dist/src/livecli.js +1 -1
  99. package/dist/src/livecli.js.map +1 -1
  100. package/dist/src/loginrefresh/handover.js +121 -0
  101. package/dist/src/loginrefresh/handover.js.map +1 -0
  102. package/dist/src/loginrefresh/lock.js +54 -3
  103. package/dist/src/loginrefresh/lock.js.map +1 -1
  104. package/dist/src/loginrefresh/refresher.js +33 -5
  105. package/dist/src/loginrefresh/refresher.js.map +1 -1
  106. package/dist/src/loginrefresh/supervisor.js +18 -1
  107. package/dist/src/loginrefresh/supervisor.js.map +1 -1
  108. package/dist/src/npmverbs.js +42 -12
  109. package/dist/src/npmverbs.js.map +1 -1
  110. package/dist/src/onboard/choices.js +6 -3
  111. package/dist/src/onboard/choices.js.map +1 -1
  112. package/dist/src/onboard/engine.js +33 -292
  113. package/dist/src/onboard/engine.js.map +1 -1
  114. package/dist/src/onboard/steps/bringup.js +3 -2
  115. package/dist/src/onboard/steps/bringup.js.map +1 -1
  116. package/dist/src/onboard/steps/configfill.js +18 -7
  117. package/dist/src/onboard/steps/configfill.js.map +1 -1
  118. package/dist/src/onboard/steps/loginshare.js +213 -0
  119. package/dist/src/onboard/steps/loginshare.js.map +1 -0
  120. package/dist/src/onboard/steps/memory.js +14 -2
  121. package/dist/src/onboard/steps/memory.js.map +1 -1
  122. package/dist/src/onboard/steps/repoconfig.js +72 -0
  123. package/dist/src/onboard/steps/repoconfig.js.map +1 -0
  124. package/dist/src/onboard/toolnames.js +2 -2
  125. package/dist/src/onboard/toolnames.js.map +1 -1
  126. package/dist/src/piagentdir.js +13 -0
  127. package/dist/src/piagentdir.js.map +1 -0
  128. package/dist/src/pilogin.js +31 -16
  129. package/dist/src/pilogin.js.map +1 -1
  130. package/dist/src/qcrbin.js +16 -11
  131. package/dist/src/qcrbin.js.map +1 -1
  132. package/dist/src/reviewargs.js +122 -0
  133. package/dist/src/reviewargs.js.map +1 -0
  134. package/dist/src/reviewcli.js +7 -161
  135. package/dist/src/reviewcli.js.map +1 -1
  136. package/dist/src/reviewdetach.js +76 -11
  137. package/dist/src/reviewdetach.js.map +1 -1
  138. package/dist/src/scancli.js +39 -691
  139. package/dist/src/scancli.js.map +1 -1
  140. package/dist/src/selfimprove.js +66 -0
  141. package/dist/src/selfimprove.js.map +1 -0
  142. package/dist/src/setup/adapters.js +5 -223
  143. package/dist/src/setup/adapters.js.map +1 -1
  144. package/dist/src/setup/caserunner.js +15 -249
  145. package/dist/src/setup/caserunner.js.map +1 -1
  146. package/dist/src/setup/engine.js +32 -341
  147. package/dist/src/setup/engine.js.map +1 -1
  148. package/dist/src/setup/facts.js +3 -592
  149. package/dist/src/setup/facts.js.map +1 -1
  150. package/dist/src/setup/findings.js +3 -947
  151. package/dist/src/setup/findings.js.map +1 -1
  152. package/dist/src/setup/presentation.js +3 -8
  153. package/dist/src/setup/presentation.js.map +1 -1
  154. package/dist/src/setup/scan.js +3 -724
  155. package/dist/src/setup/scan.js.map +1 -1
  156. package/dist/src/setup/scanbuild.js +9 -92
  157. package/dist/src/setup/scanbuild.js.map +1 -1
  158. package/dist/src/setup/scanlease.js +3 -250
  159. package/dist/src/setup/scanlease.js.map +1 -1
  160. package/dist/src/setup/scanreport.js +3 -288
  161. package/dist/src/setup/scanreport.js.map +1 -1
  162. package/dist/src/setup/scanrun.js +3 -1732
  163. package/dist/src/setup/scanrun.js.map +1 -1
  164. package/dist/src/setup/scantree.js +3 -256
  165. package/dist/src/setup/scantree.js.map +1 -1
  166. package/dist/src/setup/stage2request.js +3 -258
  167. package/dist/src/setup/stage2request.js.map +1 -1
  168. package/dist/src/setup/unitcut.js +3 -436
  169. package/dist/src/setup/unitcut.js.map +1 -1
  170. package/dist/src/state.js +2 -0
  171. package/dist/src/state.js.map +1 -1
  172. package/dist/src/takeover.js +1 -0
  173. package/dist/src/takeover.js.map +1 -1
  174. package/dist/src/takeoverpi.js +2 -1
  175. package/dist/src/takeoverpi.js.map +1 -1
  176. package/dist/src/tui/board.js +1 -1
  177. package/dist/src/tui/board.js.map +1 -1
  178. package/dist/src/tui/companion.js +2 -1
  179. package/dist/src/tui/companion.js.map +1 -1
  180. package/dist/src/tui/deploytab.js +2 -2
  181. package/dist/src/tui/deploytab.js.map +1 -1
  182. package/dist/src/tui/index.js +9 -6
  183. package/dist/src/tui/index.js.map +1 -1
  184. package/dist/src/tui/memory.js +3 -16
  185. package/dist/src/tui/memory.js.map +1 -1
  186. package/dist/src/tui/memoryurl.js +22 -0
  187. package/dist/src/tui/memoryurl.js.map +1 -0
  188. package/dist/src/tui/remote.js +1 -1
  189. package/dist/src/tui/remote.js.map +1 -1
  190. package/dist/src/tui/route.js +2 -2
  191. package/dist/src/tui/route.js.map +1 -1
  192. package/dist/src/tui/setupstate.js +8 -5
  193. package/dist/src/tui/setupstate.js.map +1 -1
  194. package/dist/src/tui/sshtriage.js +1 -1
  195. package/dist/src/tui/sshtriage.js.map +1 -1
  196. package/dist/src/wire.js +6 -2
  197. package/dist/src/wire.js.map +1 -1
  198. package/dist/src/workerworld.js +4 -0
  199. package/dist/src/workerworld.js.map +1 -1
  200. package/docker/README.md +1 -1
  201. package/docker/entrypoint.sh +40 -6
  202. package/docker-compose.yml +16 -1
  203. package/extensions/cli/home.ts +14 -0
  204. package/extensions/cli/selfimprove.ts +18 -0
  205. package/extensions/home.ts +484 -0
  206. package/extensions/login-route.ts +1 -1
  207. package/extensions/onboarding.ts +8 -7
  208. package/extensions/selfimprove.ts +65 -0
  209. package/extensions/setup-scan.ts +79 -766
  210. package/extensions/setup.ts +14 -70
  211. package/package.json +6 -4
  212. package/prompts/onboarding.md +8 -7
  213. package/schemas/review-result.v1.json +60 -0
  214. package/scripts/deploy.sh +8 -6
  215. package/scripts/qcr-host.sh +28 -5
  216. package/scripts/vm-ghcr-login.sh +7 -4
  217. package/src/archive/restore.ts +18 -21
  218. package/src/botworker.ts +13 -2
  219. package/src/channelfs.ts +3 -26
  220. package/src/cli.ts +11 -54
  221. package/src/config.ts +38 -0
  222. package/src/daemon.ts +26 -0
  223. package/src/debuground.ts +3 -0
  224. package/src/debugroundpi.ts +1 -0
  225. package/src/engine/caserunner-sdk.ts +29 -314
  226. package/src/home/adapters.ts +418 -0
  227. package/src/home/advanced.ts +421 -0
  228. package/src/home/advancedtools.ts +96 -0
  229. package/src/home/autoreview.ts +385 -0
  230. package/src/home/daemonstatus.ts +55 -0
  231. package/src/home/devicelogin.ts +107 -0
  232. package/src/home/launch.ts +257 -0
  233. package/src/home/loginowner.ts +248 -0
  234. package/src/home/memory.ts +176 -0
  235. package/src/home/model.ts +965 -0
  236. package/src/home/panel.ts +666 -0
  237. package/src/home/ports.ts +338 -0
  238. package/src/home/review.ts +206 -0
  239. package/src/home/reviews.ts +565 -0
  240. package/src/home/setup.ts +689 -0
  241. package/src/home/setupadapters.ts +217 -0
  242. package/src/home/setupcard.ts +288 -0
  243. package/src/home/setuptools.ts +57 -0
  244. package/src/home/spend.ts +194 -0
  245. package/src/home/switches.ts +293 -0
  246. package/src/home/switchon.ts +554 -0
  247. package/src/home/toolnames.ts +46 -0
  248. package/src/home/tune.ts +405 -0
  249. package/src/home/words.ts +8 -0
  250. package/src/homes.ts +17 -0
  251. package/src/install.ts +1 -1
  252. package/src/ipc/workerspec.ts +15 -0
  253. package/src/live/publish.ts +4 -1
  254. package/src/livecli.ts +6 -1
  255. package/src/loginrefresh/handover.ts +138 -0
  256. package/src/loginrefresh/lock.ts +72 -3
  257. package/src/loginrefresh/refresher.ts +34 -5
  258. package/src/loginrefresh/supervisor.ts +25 -2
  259. package/src/npmverbs.ts +51 -11
  260. package/src/onboard/choices.ts +6 -3
  261. package/src/onboard/engine.ts +64 -434
  262. package/src/onboard/steps/bringup.ts +3 -2
  263. package/src/onboard/steps/configfill.ts +23 -7
  264. package/src/onboard/steps/loginshare.ts +258 -0
  265. package/src/onboard/steps/memory.ts +18 -2
  266. package/src/onboard/steps/repoconfig.ts +85 -0
  267. package/src/onboard/toolnames.ts +2 -2
  268. package/src/piagentdir.ts +12 -0
  269. package/src/pilogin.ts +32 -16
  270. package/src/qcrbin.ts +16 -11
  271. package/src/reviewargs.ts +119 -0
  272. package/src/reviewcli.ts +6 -167
  273. package/src/reviewdetach.ts +107 -13
  274. package/src/scancli.ts +75 -826
  275. package/src/selfimprove.ts +90 -0
  276. package/src/setup/adapters.ts +13 -221
  277. package/src/setup/caserunner.ts +34 -273
  278. package/src/setup/engine.ts +62 -496
  279. package/src/setup/facts.ts +3 -627
  280. package/src/setup/findings.ts +3 -1264
  281. package/src/setup/presentation.ts +3 -18
  282. package/src/setup/scan.ts +3 -1033
  283. package/src/setup/scanbuild.ts +20 -114
  284. package/src/setup/scanlease.ts +3 -297
  285. package/src/setup/scanreport.ts +3 -373
  286. package/src/setup/scanrun.ts +3 -2268
  287. package/src/setup/scantree.ts +3 -259
  288. package/src/setup/stage2request.ts +3 -347
  289. package/src/setup/unitcut.ts +3 -523
  290. package/src/state.ts +25 -0
  291. package/src/takeover.ts +5 -0
  292. package/src/takeoverpi.ts +3 -2
  293. package/src/tui/board.ts +1 -1
  294. package/src/tui/companion.ts +2 -1
  295. package/src/tui/deploytab.ts +2 -2
  296. package/src/tui/index.ts +9 -6
  297. package/src/tui/memory.ts +3 -15
  298. package/src/tui/memoryurl.ts +22 -0
  299. package/src/tui/remote.ts +1 -1
  300. package/src/tui/route.ts +2 -2
  301. package/src/tui/setupstate.ts +20 -16
  302. package/src/tui/sshtriage.ts +1 -1
  303. package/src/wire.ts +6 -2
  304. package/src/workerworld.ts +9 -1
  305. package/dist/src/live/projection.js +0 -450
  306. package/dist/src/live/projection.js.map +0 -1
  307. package/dist/src/live/read.js +0 -60
  308. package/dist/src/live/read.js.map +0 -1
  309. package/dist/src/onboard/launch.js +0 -75
  310. package/dist/src/onboard/launch.js.map +0 -1
  311. package/dist/src/setup/ledger.js +0 -207
  312. package/dist/src/setup/ledger.js.map +0 -1
  313. package/dist/src/setup/stage2.js +0 -617
  314. package/dist/src/setup/stage2.js.map +0 -1
  315. package/dist/src/setup/textsniff.js +0 -89
  316. package/dist/src/setup/textsniff.js.map +0 -1
  317. package/src/live/projection.ts +0 -491
  318. package/src/live/read.ts +0 -86
  319. package/src/onboard/launch.ts +0 -103
  320. package/src/setup/ledger.ts +0 -324
  321. package/src/setup/stage2.ts +0 -926
  322. package/src/setup/textsniff.ts +0 -95
@@ -1,289 +1,4 @@
1
- // The scan report's read side and its stop channel: what the TUI's `[8] scan`
2
- // tab reads out of the state home, and the one file through which it asks
3
- // the companion to stop a running scan. A leaf like stage2request.ts:
4
- // it reaches its siblings by type only, so the TUI (which never imports the
5
- // setup engine — tests/single-shepherd.test.ts) can read the run record and
6
- // the findings store without carrying the case runner along.
7
- //
8
- // Two record files, both the engine's (this module owns their names and
9
- // their parsers, so the engine and the TUI can never read them differently):
10
- // `scan/run.json` (scanrun.ts — the current run and a short history) and
11
- // `scan/findings.json` (findings.ts — every finding with its state). Each is
12
- // read totally and is one of three facts: absent (no scan has written it),
13
- // read, or unreadable with the reason — never an empty list standing in for
14
- // a file that could not be read (the honest-unknown rule).
15
- //
16
- // The stop channel mirrors the stage-2 start channel: the TUI writes
17
- // `SCAN_STOP_FILE` naming the run it showed running; the companion's scan
18
- // belt picks it up within seconds, stops exactly that run (in-flight cases
19
- // aborted, the ledger resumes the rest) and answers in
20
- // `SCAN_STOP_RESULT_FILE`, naming the request it answered — so a stop is
21
- // answered once and never replayed onto a later run.
22
- import { join } from "node:path";
23
- import { readTextIfPresent, writeAtomic } from "../channelfs.js";
24
- export const FINDING_STATES = ["new", "promoted", "dismissed", "fixed"];
25
- export const RUN_FILE = "scan/run.json";
26
- export const RUN_VERSION = 1;
27
- export const FINDINGS_FILE = "scan/findings.json";
28
- export const FINDINGS_VERSION = 1;
29
- export const SCAN_STOP_FILE = "scan/stop.json";
30
- export const SCAN_STOP_RESULT_FILE = "scan/stop-result.json";
31
- export const VALIDITIES = ["confirmed", "likely", "doubtful"];
32
- /** Display order: confirmed first, unknown last. */
33
- export const VALIDITY_ORDER = [...VALIDITIES, "unknown"];
34
- /** The longest dismissal reason triage takes. The TUI checks it before
35
- * asking, so an over-long reason is refused where it is typed. */
36
- export const DISMISS_REASON_MAX = 500;
37
- /** A dismissed finding a re-scan settled as no longer reported (findings.ts
38
- * `unreported`): out of play, as a fixed one is, until a scan reports it again. */
39
- export const goneDismissal = (f) => f.state === "dismissed" && f.unreported != null;
40
- /** A finding's tier as stored — `unknown` when it carries none. */
41
- export function validityOf(f) {
42
- return f.validity !== undefined &&
43
- f.validity !== null &&
44
- VALIDITIES.includes(f.validity)
45
- ? f.validity
46
- : "unknown";
47
- }
48
- const clean = (err) => (err instanceof Error ? err.message : String(err));
49
- // ---- the two records ---------------------------------------------------------------
50
- /** Is a finding still standing — new, or promoted and not yet fixed? The
51
- * portrait's counts and the scan tab's weights read open the same way. */
52
- export const isOpenFinding = (f) => f.state === "new" || f.state === "promoted";
53
- /** A finding's resemblance to a DISMISSED one (findings.ts sets it when it
54
- * stores the finding), as a reader shows it: only on a finding still
55
- * untriaged (`new`) — once the operator promotes or dismisses it, the
56
- * resemblance is answered. */
57
- export function dismissedLookalike(f) {
58
- return f.state === "new" ? (f.resembles_dismissed ?? null) : null;
59
- }
60
- /** 1 for a finding flagged as resembling a dismissed one, else 0 — the sort
61
- * key that puts it below the unflagged findings of its tier. */
62
- export const lookalikeRank = (f) => dismissedLookalike(f) ? 1 : 0;
63
- /** Parse the run record; throws on anything this version does not read. */
64
- export function parseRunFile(text) {
65
- const raw = JSON.parse(text);
66
- if (typeof raw !== "object" || raw === null || raw.version !== RUN_VERSION)
67
- throw new Error("unknown version");
68
- const current = raw.current ?? null;
69
- if (current !== null && (typeof current !== "object" || !Array.isArray(current.cases))) {
70
- throw new Error("`current` is not a scan run");
71
- }
72
- return { version: RUN_VERSION, current, history: Array.isArray(raw.history) ? raw.history : [] };
73
- }
74
- /** Parse the findings store; throws on anything this version does not read. */
75
- export function parseFindingsFile(text) {
76
- const raw = JSON.parse(text);
77
- if (typeof raw !== "object" ||
78
- raw === null ||
79
- raw.version !== FINDINGS_VERSION ||
80
- !Array.isArray(raw.findings)) {
81
- throw new Error("not a version-1 findings store");
82
- }
83
- for (const f of raw.findings) {
84
- if (typeof f?.fingerprint !== "string" ||
85
- typeof f.path !== "string" ||
86
- typeof f.state !== "string") {
87
- throw new Error("a finding has no fingerprint, path or state");
88
- }
89
- }
90
- const q = raw.question ?? null;
91
- if (q !== null &&
92
- (typeof q.key !== "string" || !Array.isArray(q.unreported) || !Array.isArray(q.fresh))) {
93
- throw new Error("the pending match question is malformed");
94
- }
95
- return {
96
- version: FINDINGS_VERSION,
97
- findings: currentLookalikes(raw.findings.map(stickyDismissal)),
98
- question: q,
99
- };
100
- }
101
- /** A `resembles_dismissed` flag is written when a finding is stored; the
102
- * dismissal it names can change after that — re-dismissed with another
103
- * reason, promoted (the operator changed their mind), or folded into a fresh
104
- * finding by a match answer. Every reader goes through this parse, so the
105
- * flag is re-read against the store here: it names the finding that now
106
- * carries that fingerprint (itself, or the one it became an alias of) and
107
- * that finding's current reason while it is still dismissed, and it is
108
- * dropped otherwise — a stale "looks like a finding you dismissed" never
109
- * reaches the operator. */
110
- function currentLookalikes(findings) {
111
- if (!findings.some((f) => f.resembles_dismissed))
112
- return findings;
113
- const owner = new Map();
114
- for (const f of findings)
115
- for (const a of f.aliases ?? [])
116
- owner.set(a, f);
117
- for (const f of findings)
118
- owner.set(f.fingerprint, f);
119
- return findings.map((f) => {
120
- if (!f.resembles_dismissed)
121
- return f;
122
- const { resembles_dismissed: flag, ...rest } = f;
123
- const d = owner.get(flag.fingerprint);
124
- if (!d || d.state !== "dismissed" || d.fingerprint === f.fingerprint)
125
- return rest;
126
- return {
127
- ...rest,
128
- resembles_dismissed: {
129
- fingerprint: d.fingerprint,
130
- reason: d.dismissal?.reason ?? flag.reason,
131
- },
132
- };
133
- });
134
- }
135
- /** A legacy store may hold a dismissed finding recorded as `fixed` with
136
- * `fixed.from = "dismissed"`: it reads back as the dismissal it is, its fix
137
- * kept as the `unreported` audit stamp (findings.ts). Every other finding is
138
- * returned as it is. */
139
- function stickyDismissal(f) {
140
- if (f.state !== "fixed" || f.fixed?.from !== "dismissed")
141
- return f;
142
- const { run, sha, at } = f.fixed;
143
- return { ...f, state: "dismissed", fixed: null, unreported: { run, sha, at } };
144
- }
145
- function readRecord(home, rel, parse) {
146
- let text;
147
- try {
148
- text = readTextIfPresent(join(home, rel));
149
- }
150
- catch (err) {
151
- return { kind: "unreadable", why: `${rel} cannot be read: ${clean(err)}` };
152
- }
153
- if (text === null)
154
- return { kind: "absent" };
155
- try {
156
- return { kind: "read", value: parse(text) };
157
- }
158
- catch (err) {
159
- return { kind: "unreadable", why: `${rel} is not a record this version reads (${clean(err)})` };
160
- }
161
- }
162
- /** The scan run record in the state home at `home`. */
163
- export function readScanRuns(home) {
164
- return readRecord(home, RUN_FILE, (t) => {
165
- const f = parseRunFile(t);
166
- return { current: f.current, history: f.history };
167
- });
168
- }
169
- /** The findings store in the state home at `home`. */
170
- export function readScanFindings(home) {
171
- return readRecord(home, FINDINGS_FILE, (t) => {
172
- const f = parseFindingsFile(t);
173
- return { findings: f.findings, question: f.question ?? null };
174
- });
175
- }
176
- /** Parse a stop request, or null when it is not one. */
177
- export function parseStopRequest(text) {
178
- try {
179
- const r = JSON.parse(text);
180
- if (typeof r !== "object" ||
181
- r === null ||
182
- typeof r.id !== "string" ||
183
- r.id === "" ||
184
- typeof r.run !== "string" ||
185
- r.run === "")
186
- return null;
187
- return {
188
- id: r.id,
189
- run: r.run,
190
- at: typeof r.at === "string" ? r.at : "",
191
- by: r.by === "cli" || r.by === "companion" ? r.by : "tui",
192
- };
193
- }
194
- catch {
195
- return null;
196
- }
197
- }
198
- /** Parse a stop result, or null when it is not one. */
199
- export function parseStopResult(text) {
200
- try {
201
- const r = JSON.parse(text);
202
- if (typeof r !== "object" ||
203
- r === null ||
204
- typeof r.request !== "string" ||
205
- typeof r.ok !== "boolean")
206
- return null;
207
- return {
208
- request: r.request,
209
- run: typeof r.run === "string" ? r.run : "",
210
- at: typeof r.at === "string" ? r.at : "",
211
- ok: r.ok,
212
- errors: Array.isArray(r.errors)
213
- ? r.errors.filter((e) => typeof e === "string")
214
- : [],
215
- ...(typeof r.in_flight === "string" || r.in_flight === null
216
- ? { in_flight: r.in_flight }
217
- : {}),
218
- };
219
- }
220
- catch {
221
- return null;
222
- }
223
- }
224
- /**
225
- * The TUI's stop: ask the companion to stop the run `run`, which the TUI
226
- * showed running. Refused when the record cannot be read or no longer shows
227
- * that run running — a stop is never aimed at a run the operator did not see.
228
- * The notice line says what was asked, or why nothing was.
229
- */
230
- export function clickStopScan(home, run, now = new Date(), by = "tui") {
231
- const read = readScanRuns(home);
232
- if (read.kind === "unreadable")
233
- return { ok: false, line: `scan not stopped: ${read.why}` };
234
- const cur = read.kind === "read" ? read.value.current : null;
235
- if (cur === null || cur.id !== run || cur.state !== "running") {
236
- return {
237
- ok: false,
238
- line: `scan not stopped: ${run} is no longer running — look at the report again`,
239
- };
240
- }
241
- const request = {
242
- id: `${now.toISOString()}-${Math.random().toString(36).slice(2, 8)}`,
243
- run,
244
- at: now.toISOString(),
245
- by,
246
- };
247
- try {
248
- writeAtomic(join(home, SCAN_STOP_FILE), `${JSON.stringify(request)}\n`);
249
- }
250
- catch (err) {
251
- return {
252
- ok: false,
253
- line: `scan not stopped: the stop request could not be written: ${clean(err)}`,
254
- };
255
- }
256
- return {
257
- ok: true,
258
- request: request.id,
259
- line: `stop asked for ${run} — the companion stops it within seconds; the ledger resumes the rest`,
260
- };
261
- }
262
- export function readStopResult(home) {
263
- let text;
264
- try {
265
- text = readTextIfPresent(join(home, SCAN_STOP_RESULT_FILE));
266
- }
267
- catch (err) {
268
- return { kind: "unreadable", why: `${SCAN_STOP_RESULT_FILE}: ${clean(err)}` };
269
- }
270
- const r = text === null ? null : parseStopResult(text);
271
- return r === null ? { kind: "absent" } : { kind: "read", result: r };
272
- }
273
- /** What became of the stop `request`: the companion's answer, or null while
274
- * it has not answered (a companion that is down stops nothing — and runs
275
- * nothing either). */
276
- export function scanStopOutcome(home, request) {
277
- const read = readStopResult(home);
278
- // Not "no answer yet": the answer may be there, unreadable — said once,
279
- // never polled for silently.
280
- if (read.kind === "unreadable")
281
- return `the scan stop's answer cannot be read (${read.why}) — check scan_status`;
282
- if (read.kind === "absent" || read.result.request !== request)
283
- return null;
284
- const r = read.result;
285
- return r.ok
286
- ? `scan ${r.run} stopped — what finished is in the ledger`
287
- : `scan stop refused: ${r.errors.join("; ")}`;
288
- }
1
+ // Moved to the plugin (packages/pi-plugin/src/scan/scanreport.ts), the scan engine's
2
+ // home: this name stays for the app's importers.
3
+ export * from "@quickchatai/pi-quickreview/src/scan/scanreport.js";
289
4
  //# sourceMappingURL=scanreport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanreport.js","sourceRoot":"","sources":["../../../src/setup/scanreport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanreport.js","sourceRoot":"","sources":["../../../src/setup/scanreport.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,iDAAiD;AACjD,cAAc,oDAAoD,CAAC"}