@quickchatai/pi-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 (241) hide show
  1. package/README.md +79 -27
  2. package/assets/config.example.toml +60 -14
  3. package/assets/prompts/onboarding.md +58 -18
  4. package/assets/schemas/review-result.v1.json +60 -0
  5. package/dist/extensions/quickreview.d.ts +13 -5
  6. package/dist/extensions/quickreview.d.ts.map +1 -1
  7. package/dist/extensions/quickreview.js +77 -25
  8. package/dist/extensions/quickreview.js.map +1 -1
  9. package/dist/src/engine/auth.d.ts +4 -0
  10. package/dist/src/engine/auth.d.ts.map +1 -1
  11. package/dist/src/engine/auth.js +11 -2
  12. package/dist/src/engine/auth.js.map +1 -1
  13. package/dist/src/engine/envmap.d.ts.map +1 -1
  14. package/dist/src/engine/envmap.js +5 -0
  15. package/dist/src/engine/envmap.js.map +1 -1
  16. package/dist/src/engine/lens/activity.d.ts +45 -0
  17. package/dist/src/engine/lens/activity.d.ts.map +1 -0
  18. package/dist/src/engine/lens/activity.js +118 -0
  19. package/dist/src/engine/lens/activity.js.map +1 -0
  20. package/dist/src/engine/lens/runlens.d.ts +7 -0
  21. package/dist/src/engine/lens/runlens.d.ts.map +1 -1
  22. package/dist/src/engine/lens/runlens.js +30 -1
  23. package/dist/src/engine/lens/runlens.js.map +1 -1
  24. package/dist/src/engine/lens/tool.d.ts +7 -0
  25. package/dist/src/engine/lens/tool.d.ts.map +1 -1
  26. package/dist/src/engine/lens/tool.js +101 -18
  27. package/dist/src/engine/lens/tool.js.map +1 -1
  28. package/dist/src/engine/lens/wave.d.ts +6 -0
  29. package/dist/src/engine/lens/wave.d.ts.map +1 -1
  30. package/dist/src/engine/lens/wave.js +16 -0
  31. package/dist/src/engine/lens/wave.js.map +1 -1
  32. package/dist/src/engine/pisdk.d.ts +9 -0
  33. package/dist/src/engine/pisdk.d.ts.map +1 -1
  34. package/dist/src/engine/pisdk.js +29 -4
  35. package/dist/src/engine/pisdk.js.map +1 -1
  36. package/dist/src/githubAuth.d.ts +39 -1
  37. package/dist/src/githubAuth.d.ts.map +1 -1
  38. package/dist/src/githubAuth.js +75 -8
  39. package/dist/src/githubAuth.js.map +1 -1
  40. package/dist/src/guards.d.ts +14 -1
  41. package/dist/src/guards.d.ts.map +1 -1
  42. package/dist/src/guards.js +61 -2
  43. package/dist/src/guards.js.map +1 -1
  44. package/dist/src/homes.js +1 -1
  45. package/dist/src/homes.js.map +1 -1
  46. package/dist/src/identity.d.ts +34 -0
  47. package/dist/src/identity.d.ts.map +1 -0
  48. package/dist/src/identity.js +67 -0
  49. package/dist/src/identity.js.map +1 -0
  50. package/dist/src/live/events.d.ts +3 -0
  51. package/dist/src/live/events.d.ts.map +1 -1
  52. package/dist/src/live/events.js.map +1 -1
  53. package/dist/src/live/lensline.d.ts +20 -0
  54. package/dist/src/live/lensline.d.ts.map +1 -0
  55. package/dist/src/live/lensline.js +70 -0
  56. package/dist/src/live/lensline.js.map +1 -0
  57. package/dist/src/live/projection.d.ts +55 -0
  58. package/dist/src/live/projection.d.ts.map +1 -0
  59. package/dist/src/live/projection.js +465 -0
  60. package/dist/src/live/projection.js.map +1 -0
  61. package/dist/src/live/read.d.ts +24 -0
  62. package/dist/src/live/read.d.ts.map +1 -0
  63. package/dist/src/live/read.js +60 -0
  64. package/dist/src/live/read.js.map +1 -0
  65. package/dist/src/live/writer.d.ts +3 -0
  66. package/dist/src/live/writer.d.ts.map +1 -1
  67. package/dist/src/live/writer.js +6 -1
  68. package/dist/src/live/writer.js.map +1 -1
  69. package/dist/src/localreview.d.ts +18 -8
  70. package/dist/src/localreview.d.ts.map +1 -1
  71. package/dist/src/localreview.js +103 -43
  72. package/dist/src/localreview.js.map +1 -1
  73. package/dist/src/modelroute.d.ts +42 -0
  74. package/dist/src/modelroute.d.ts.map +1 -0
  75. package/dist/src/modelroute.js +126 -0
  76. package/dist/src/modelroute.js.map +1 -0
  77. package/dist/src/plugin/args.d.ts +38 -7
  78. package/dist/src/plugin/args.d.ts.map +1 -1
  79. package/dist/src/plugin/args.js +134 -37
  80. package/dist/src/plugin/args.js.map +1 -1
  81. package/dist/src/plugin/login.d.ts +11 -4
  82. package/dist/src/plugin/login.d.ts.map +1 -1
  83. package/dist/src/plugin/login.js +28 -26
  84. package/dist/src/plugin/login.js.map +1 -1
  85. package/dist/src/plugin/messages.d.ts +7 -0
  86. package/dist/src/plugin/messages.d.ts.map +1 -0
  87. package/dist/src/plugin/messages.js +13 -0
  88. package/dist/src/plugin/messages.js.map +1 -0
  89. package/dist/src/plugin/review.d.ts +52 -6
  90. package/dist/src/plugin/review.d.ts.map +1 -1
  91. package/dist/src/plugin/review.js +269 -99
  92. package/dist/src/plugin/review.js.map +1 -1
  93. package/dist/src/plugin/scan.d.ts +80 -44
  94. package/dist/src/plugin/scan.d.ts.map +1 -1
  95. package/dist/src/plugin/scan.js +450 -233
  96. package/dist/src/plugin/scan.js.map +1 -1
  97. package/dist/src/plugin/scancases.d.ts +33 -0
  98. package/dist/src/plugin/scancases.d.ts.map +1 -0
  99. package/dist/src/plugin/scancases.js +153 -0
  100. package/dist/src/plugin/scancases.js.map +1 -0
  101. package/dist/src/plugin/settings.d.ts +18 -0
  102. package/dist/src/plugin/settings.d.ts.map +1 -0
  103. package/dist/src/plugin/settings.js +47 -0
  104. package/dist/src/plugin/settings.js.map +1 -0
  105. package/dist/src/plugin/setup.d.ts +35 -12
  106. package/dist/src/plugin/setup.d.ts.map +1 -1
  107. package/dist/src/plugin/setup.js +258 -118
  108. package/dist/src/plugin/setup.js.map +1 -1
  109. package/dist/src/plugin/versiongate.js +1 -1
  110. package/dist/src/plugin/versiongate.js.map +1 -1
  111. package/dist/src/profileoverrides.d.ts +3 -0
  112. package/dist/src/profileoverrides.d.ts.map +1 -1
  113. package/dist/src/profileoverrides.js +9 -2
  114. package/dist/src/profileoverrides.js.map +1 -1
  115. package/dist/src/reviewapi.d.ts +22 -31
  116. package/dist/src/reviewapi.d.ts.map +1 -1
  117. package/dist/src/reviewapi.js +90 -66
  118. package/dist/src/reviewapi.js.map +1 -1
  119. package/dist/src/reviewconfig.d.ts +12 -0
  120. package/dist/src/reviewconfig.d.ts.map +1 -1
  121. package/dist/src/reviewconfig.js +9 -1
  122. package/dist/src/reviewconfig.js.map +1 -1
  123. package/dist/src/reviewdest.d.ts +1 -1
  124. package/dist/src/reviewdest.d.ts.map +1 -1
  125. package/dist/src/reviewdest.js +4 -3
  126. package/dist/src/reviewdest.js.map +1 -1
  127. package/dist/src/reviewtarget.d.ts +36 -0
  128. package/dist/src/reviewtarget.d.ts.map +1 -0
  129. package/dist/src/reviewtarget.js +6 -0
  130. package/dist/src/reviewtarget.js.map +1 -0
  131. package/dist/src/round-progress.d.ts +5 -0
  132. package/dist/src/round-progress.d.ts.map +1 -1
  133. package/dist/src/round-progress.js.map +1 -1
  134. package/dist/src/savedpost.d.ts +65 -0
  135. package/dist/src/savedpost.d.ts.map +1 -0
  136. package/dist/src/savedpost.js +131 -0
  137. package/dist/src/savedpost.js.map +1 -0
  138. package/dist/src/scan/caseread.d.ts +84 -0
  139. package/dist/src/scan/caseread.d.ts.map +1 -0
  140. package/dist/src/scan/caseread.js +263 -0
  141. package/dist/src/scan/caseread.js.map +1 -0
  142. package/dist/src/scan/channelfs.d.ts +6 -0
  143. package/dist/src/scan/channelfs.d.ts.map +1 -0
  144. package/dist/src/scan/channelfs.js +27 -0
  145. package/dist/src/scan/channelfs.js.map +1 -0
  146. package/dist/src/scan/cutrender.d.ts +13 -0
  147. package/dist/src/scan/cutrender.d.ts.map +1 -0
  148. package/dist/src/scan/cutrender.js +51 -0
  149. package/dist/src/scan/cutrender.js.map +1 -0
  150. package/dist/src/scan/facts.d.ts +72 -0
  151. package/dist/src/scan/facts.d.ts.map +1 -0
  152. package/dist/src/scan/facts.js +593 -0
  153. package/dist/src/scan/facts.js.map +1 -0
  154. package/dist/src/scan/findings.d.ts +320 -0
  155. package/dist/src/scan/findings.d.ts.map +1 -0
  156. package/dist/src/scan/findings.js +948 -0
  157. package/dist/src/scan/findings.js.map +1 -0
  158. package/dist/src/scan/ledger.d.ts +116 -0
  159. package/dist/src/scan/ledger.d.ts.map +1 -0
  160. package/dist/src/scan/ledger.js +207 -0
  161. package/dist/src/scan/ledger.js.map +1 -0
  162. package/dist/src/scan/presentation.d.ts +19 -0
  163. package/dist/src/scan/presentation.d.ts.map +1 -0
  164. package/dist/src/scan/presentation.js +9 -0
  165. package/dist/src/scan/presentation.js.map +1 -0
  166. package/dist/src/scan/scan.d.ts +354 -0
  167. package/dist/src/scan/scan.d.ts.map +1 -0
  168. package/dist/src/scan/scan.js +725 -0
  169. package/dist/src/scan/scan.js.map +1 -0
  170. package/dist/src/scan/scanagents.d.ts +23 -0
  171. package/dist/src/scan/scanagents.d.ts.map +1 -0
  172. package/dist/src/scan/scanagents.js +99 -0
  173. package/dist/src/scan/scanagents.js.map +1 -0
  174. package/dist/src/scan/scanassemble.d.ts +65 -0
  175. package/dist/src/scan/scanassemble.d.ts.map +1 -0
  176. package/dist/src/scan/scanassemble.js +93 -0
  177. package/dist/src/scan/scanassemble.js.map +1 -0
  178. package/dist/src/scan/scanfs.d.ts +26 -0
  179. package/dist/src/scan/scanfs.d.ts.map +1 -0
  180. package/dist/src/scan/scanfs.js +229 -0
  181. package/dist/src/scan/scanfs.js.map +1 -0
  182. package/dist/src/scan/scanlease.d.ts +50 -0
  183. package/dist/src/scan/scanlease.d.ts.map +1 -0
  184. package/dist/src/scan/scanlease.js +251 -0
  185. package/dist/src/scan/scanlease.js.map +1 -0
  186. package/dist/src/scan/scanleaves.d.ts +55 -0
  187. package/dist/src/scan/scanleaves.d.ts.map +1 -0
  188. package/dist/src/scan/scanleaves.js +258 -0
  189. package/dist/src/scan/scanleaves.js.map +1 -0
  190. package/dist/src/scan/scanports.d.ts +79 -0
  191. package/dist/src/scan/scanports.d.ts.map +1 -0
  192. package/dist/src/scan/scanports.js +8 -0
  193. package/dist/src/scan/scanports.js.map +1 -0
  194. package/dist/src/scan/scanrender.d.ts +128 -0
  195. package/dist/src/scan/scanrender.d.ts.map +1 -0
  196. package/dist/src/scan/scanrender.js +527 -0
  197. package/dist/src/scan/scanrender.js.map +1 -0
  198. package/dist/src/scan/scanreport.d.ts +126 -0
  199. package/dist/src/scan/scanreport.d.ts.map +1 -0
  200. package/dist/src/scan/scanreport.js +289 -0
  201. package/dist/src/scan/scanreport.js.map +1 -0
  202. package/dist/src/scan/scanrun.d.ts +472 -0
  203. package/dist/src/scan/scanrun.d.ts.map +1 -0
  204. package/dist/src/scan/scanrun.js +1733 -0
  205. package/dist/src/scan/scanrun.js.map +1 -0
  206. package/dist/src/scan/scantree.d.ts +21 -0
  207. package/dist/src/scan/scantree.d.ts.map +1 -0
  208. package/dist/src/scan/scantree.js +297 -0
  209. package/dist/src/scan/scantree.js.map +1 -0
  210. package/dist/src/scan/scanverbs.d.ts +208 -0
  211. package/dist/src/scan/scanverbs.d.ts.map +1 -0
  212. package/dist/src/scan/scanverbs.js +689 -0
  213. package/dist/src/scan/scanverbs.js.map +1 -0
  214. package/dist/src/scan/stage2.d.ts +221 -0
  215. package/dist/src/scan/stage2.d.ts.map +1 -0
  216. package/dist/src/scan/stage2.js +617 -0
  217. package/dist/src/scan/stage2.js.map +1 -0
  218. package/dist/src/scan/stage2request.d.ts +125 -0
  219. package/dist/src/scan/stage2request.d.ts.map +1 -0
  220. package/dist/src/scan/stage2request.js +259 -0
  221. package/dist/src/scan/stage2request.js.map +1 -0
  222. package/dist/src/scan/textsniff.d.ts +14 -0
  223. package/dist/src/scan/textsniff.d.ts.map +1 -0
  224. package/dist/src/scan/textsniff.js +88 -0
  225. package/dist/src/scan/textsniff.js.map +1 -0
  226. package/dist/src/scan/unitcut.d.ts +135 -0
  227. package/dist/src/scan/unitcut.d.ts.map +1 -0
  228. package/dist/src/scan/unitcut.js +437 -0
  229. package/dist/src/scan/unitcut.js.map +1 -0
  230. package/dist/src/scan/unitcutstore.d.ts +155 -0
  231. package/dist/src/scan/unitcutstore.d.ts.map +1 -0
  232. package/dist/src/scan/unitcutstore.js +381 -0
  233. package/dist/src/scan/unitcutstore.js.map +1 -0
  234. package/dist/src/setupchecklist.d.ts +240 -0
  235. package/dist/src/setupchecklist.d.ts.map +1 -0
  236. package/dist/src/setupchecklist.js +407 -0
  237. package/dist/src/setupchecklist.js.map +1 -0
  238. package/package.json +7 -3
  239. package/skills/qcr-review/SKILL.md +24 -0
  240. package/skills/qcr-scan/SKILL.md +23 -0
  241. package/skills/qcr-setup/SKILL.md +18 -0
@@ -1,9 +1,18 @@
1
- // /review inside a user's pi: the production review (the core's `review()`,
2
- // the same pipeline `qcr review` runs) hosted in this pi process.
1
+ // /qcr-review inside a user's pi: the production review (the core's
2
+ // `review()`, the same pipeline `qcr review` runs) hosted in this pi process,
3
+ // in the background.
3
4
  //
5
+ // - The command returns at once: the review runs in the same process while
6
+ // the person keeps chatting. The status line shows its progress
7
+ // (`reviewStatusLine`), and the result arrives as the plugin's review
8
+ // message. One review runs per session at a time; a second start says which
9
+ // one is running, and `/qcr-review --stop` (or the session ending) stops it.
10
+ // A preview, and pi's print mode, run in the foreground: a preview starts
11
+ // nothing, and print mode ends when the command returns.
4
12
  // - The repo is pi's cwd. The config is the person's qcr config when one is
5
13
  // there (`$QCR_CONFIG`, or the install's config home), else the shipped
6
- // defaults; it is only read.
14
+ // defaults; it is only read. A preset (args.ts) is the core's own review
15
+ // options, named.
7
16
  // - The login is the host pi's, borrowed (login.ts): the host refreshes a
8
17
  // short one first, and the run reads a refresh-disabled copy.
9
18
  // - The run's sessions are nested SDK sessions in this process, isolated
@@ -12,13 +21,13 @@
12
21
  // tool from the review: the lens tools exist only inside the engine's
13
22
  // sessions. Nothing here owns the process: a wedged turn ends its own
14
23
  // sessions, never pi.
15
- // - Esc (or the session ending) stops the run.
16
- // - Where the result goes follows the destination rule (reviewdest.ts): flags,
17
- // else the repo's saved default, else asked each time, else printed. A post
18
- // goes through the one MutationGate with the install's dry_run; nothing
19
- // here sets it.
20
- // - The result's JSON is kept in the run's directory under the qcr state
21
- // home, as `qcr review` keeps its runs.
24
+ // - The result is shown in the session and kept as files (the markdown report
25
+ // and the result's JSON in the run's directory under the qcr state home, as
26
+ // `qcr review` keeps its runs). After a PR review the posting rule in pi's
27
+ // settings (settings.ts) decides: ask, with "No, keep it here" first; never;
28
+ // or always. A post is one comment-only review through the one
29
+ // MutationGate with the install's dry_run (the core's `offerPost`); nothing
30
+ // here sets dry_run.
22
31
  import { execFileSync } from "node:child_process";
23
32
  import { appendFileSync, mkdirSync, writeFileSync } from "node:fs";
24
33
  import { dirname, join } from "node:path";
@@ -27,22 +36,25 @@ import { PI_REFRESH_MARGIN_MS } from "../engine/auth.js";
27
36
  import { contextFrom } from "../engine/context.js";
28
37
  import { lazyReviewRuntime } from "../engine/reviewruntime.js";
29
38
  import { homeProfilePlaces, loadOneShotConfig, stateHome } from "../homes.js";
39
+ import { runningLensLines } from "../live/lensline.js";
40
+ import { latestLiveRound, viewRound } from "../live/read.js";
30
41
  import { preview as corePreview, review as coreReview, } from "../reviewapi.js";
31
- import { loadDefaultDestinationsIn, planDestinations, saveDefaultDestinationsIn, } from "../reviewdest.js";
32
42
  import { prepareReviewHost } from "../reviewhost.js";
33
- import { parseReviewCommand } from "./args.js";
34
- import { borrowLogin, reviewProviders } from "./login.js";
35
- /** The custom message type the review is shown as. */
36
- export const REVIEW_MESSAGE = "qcr-review";
43
+ import { parseReviewCommand, reviewLabel, REVIEW_PRESETS } from "./args.js";
44
+ import { borrowLogin } from "./login.js";
45
+ import { reviewProviders } from "../modelroute.js";
46
+ import { DEFAULT_SETTINGS } from "./settings.js";
47
+ import { KEEP_IT_HERE, postAnswer } from "./messages.js";
48
+ export { KEEP_IT_HERE, postAnswer, REVIEW_MESSAGE } from "./messages.js";
37
49
  /** A review's wall clock, as `qcr review`'s. */
38
50
  export const REVIEW_TIMEOUT_MS = 60 * 60_000;
39
51
  /** What a refused login says inside pi: pi's own /login is the fix. */
40
52
  export const PLUGIN_AUTH_WORDS = {
41
- missing: (src) => `no pi login at ${src}: run /login in pi, then /review again`,
42
- expiring: ({ provider, expiresAt, needMs }) => `your ${provider ?? "pi"} login expires at ${new Date(expiresAt).toISOString()}, inside this review's ${Math.round(needMs / 60_000)}-minute window, and pi did not renew it. Run /login${provider ? ` ${provider}` : ""} in pi, then /review again.`,
53
+ missing: (src) => `no pi login at ${src}: run /login in pi, then /qcr-review again`,
54
+ expiring: ({ provider, expiresAt, needMs }) => `your ${provider ?? "pi"} login expires at ${new Date(expiresAt).toISOString()}, inside this review's ${Math.round(needMs / 60_000)}-minute window, and pi did not renew it. Run /login${provider ? ` ${provider}` : ""} in pi, then /qcr-review again.`,
43
55
  };
44
- /** How long a stopped review (Esc, the session ending) gets to wind down
45
- * before /review gives up waiting on it and returns. */
56
+ /** How long a stopped review (`--stop`, the session ending) gets to wind
57
+ * down before /qcr-review gives up waiting on it. */
46
58
  export const STOP_GRACE_MS = 30_000;
47
59
  export const REVIEW_DEPS = {
48
60
  review: coreReview,
@@ -51,91 +63,179 @@ export const REVIEW_DEPS = {
51
63
  runtime: lazyReviewRuntime,
52
64
  };
53
65
  const fence = (lang, text) => `\`\`\`${lang}\n${text.trimEnd()}\n\`\`\``;
54
- /** One run of /review. Never throws: every refusal reaches the person. */
55
- export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
56
- const fail = (message) => {
57
- if (ui.mode === "print")
58
- ui.print(`✗ ${message}`);
59
- ui.notify(message, "error");
60
- };
61
- const cmd = parseReviewCommand(line);
66
+ const elapsed = (ms) => {
67
+ const s = Math.max(0, Math.floor(ms / 1000));
68
+ return s >= 60 ? `${Math.floor(s / 60)}m ${String(s % 60).padStart(2, "0")}s` : `${s}s`;
69
+ };
70
+ /** The status line for the review in flight: what it reviews, its stage, and
71
+ * what the round's start said (lenses, price, hard stop), with the time
72
+ * since it started. Every status line /qcr-review shows is built here. */
73
+ export function reviewStatusLine(p, now) {
74
+ const since = elapsed(now - p.startedAt);
75
+ switch (p.stage) {
76
+ case "pricing":
77
+ return `QuickReview: pricing ${p.label}…`;
78
+ case "preparing":
79
+ return `QuickReview: preparing the review of ${p.label}… ${since}`;
80
+ case "running": {
81
+ const plan = [
82
+ ...(p.lenses !== undefined ? [`${p.lenses} lens${p.lenses === 1 ? "" : "es"}`] : []),
83
+ ...(p.estimateUsd !== undefined ? [`about $${p.estimateUsd.toFixed(2)}`] : []),
84
+ ...(p.capUsd !== undefined && p.capUsd !== null
85
+ ? [`stops at $${p.capUsd.toFixed(2)}`]
86
+ : []),
87
+ ];
88
+ const now = p.running?.length
89
+ ? ` · ${p.running[0]}${p.running.length > 1 ? ` (+${p.running.length - 1} more)` : ""}`
90
+ : "";
91
+ return `QuickReview: reviewing ${p.label}${plan.length ? ` — ${plan.join(", ")}` : ""} · ${since}${now}`;
92
+ }
93
+ case "asking":
94
+ return `QuickReview: ${p.label} reviewed in ${since} — post it?`;
95
+ case "posting":
96
+ return `QuickReview: posting the review of ${p.label}…`;
97
+ }
98
+ }
99
+ /** One line per running lens of the review in `runDir`, read from its live
100
+ * log: none when the log is missing or unreadable, which never costs the
101
+ * review its status line. */
102
+ export function liveLensLines(runDir, now) {
103
+ try {
104
+ const ref = latestLiveRound(runDir);
105
+ const agents = ref ? viewRound(ref).snapshot?.agents : undefined;
106
+ return agents ? runningLensLines(agents, { nowMs: now }) : [];
107
+ }
108
+ catch {
109
+ return [];
110
+ }
111
+ }
112
+ /** The one review a session runs at a time. */
113
+ export class ReviewSlot {
114
+ current = null;
115
+ /** What is being reviewed now; null when nothing is. */
116
+ get running() {
117
+ return this.current?.label ?? null;
118
+ }
119
+ /** Stop the review in flight; what it was reviewing, or null when none runs. */
120
+ stop() {
121
+ if (this.current === null)
122
+ return null;
123
+ this.current.stop.abort();
124
+ return this.current.label;
125
+ }
126
+ /** Resolves once no review runs. */
127
+ async idle() {
128
+ while (this.current !== null)
129
+ await this.current.done;
130
+ }
131
+ /** Hold `done` as the review in flight until it settles. */
132
+ hold(label, stop, done) {
133
+ const entry = { label, stop, done };
134
+ this.current = entry;
135
+ void done.finally(() => {
136
+ if (this.current === entry)
137
+ this.current = null;
138
+ });
139
+ }
140
+ }
141
+ const fail = (ui, message) => {
142
+ if (ui.mode === "print")
143
+ ui.print(`✗ ${message}`);
144
+ ui.notify(message, "error");
145
+ };
146
+ /**
147
+ * /qcr-review. Starts the review and returns at once (pi's print mode and a
148
+ * preview wait for it); the review then runs in `slot`, one at a time. Never
149
+ * throws: every refusal reaches the person.
150
+ */
151
+ export async function startReviewCommand(line, host, ui, o) {
152
+ const settings = o.settings ?? DEFAULT_SETTINGS;
153
+ const cmd = parseReviewCommand(line, settings.preset);
62
154
  if ("error" in cmd)
63
- return fail(cmd.error);
155
+ return fail(ui, cmd.error);
156
+ if ("stop" in cmd) {
157
+ const stopped = o.slot.stop();
158
+ if (stopped === null)
159
+ return ui.notify("no QuickReview review is running here", "info");
160
+ return ui.notify(`stopping the review of ${stopped}…`, "warning");
161
+ }
162
+ const running = o.slot.running;
163
+ if (running !== null)
164
+ return ui.notify(`QuickReview is already reviewing ${running}: one review runs at a time. Its result arrives here; /qcr-review --stop stops it.`, "warning");
165
+ const label = reviewLabel(cmd);
166
+ const stop = new AbortController();
167
+ // A preview starts nothing and print mode ends with the command: both wait.
168
+ const background = !cmd.preview && ui.interactive;
169
+ const done = reviewJob(cmd, label, host, ui, {
170
+ deps: o.deps ?? REVIEW_DEPS,
171
+ settings,
172
+ stop: stop.signal,
173
+ }).catch((err) => fail(ui, err instanceof Error ? err.message : String(err)));
174
+ o.slot.hold(label, stop, done);
175
+ if (!background)
176
+ return done;
177
+ ui.notify(`QuickReview is reviewing ${label} in the background. Keep chatting: the result arrives here as a message.`, "info");
178
+ }
179
+ /** One /qcr-review, waited for to its end (its result shown, its post asked):
180
+ * the command's work without the background. */
181
+ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS, settings = DEFAULT_SETTINGS) {
182
+ const slot = new ReviewSlot();
183
+ await startReviewCommand(line, host, ui, { slot, deps, settings });
184
+ await slot.idle();
185
+ }
186
+ /** The review itself, from the config to the result in the session. */
187
+ async function reviewJob(cmd, label, host, ui, o) {
188
+ const { deps } = o;
64
189
  const env = { ...host.env, HOME: host.home };
65
190
  const warn = (l) => ui.notify(l, "warning");
191
+ const preset = cmd.preset !== null ? REVIEW_PRESETS[cmd.preset] : null;
66
192
  let root;
67
193
  let cfg;
68
194
  let ecosystem;
69
- let configPath;
70
195
  const profileHomes = homeProfilePlaces(env);
71
196
  try {
72
197
  root = deps.root();
73
198
  const loaded = loadOneShotConfig({ root, env, warn });
74
- configPath = loaded.path;
75
- ({ cfg, ecosystem } = contextFrom(root, loaded, cmd.profile ?? loaded.cfg.review.profile, "", { homes: profileHomes }, warn));
199
+ ({ cfg, ecosystem } = contextFrom(root, loaded, cmd.profile ?? loaded.cfg.review.profile, preset?.levers ?? "", { homes: profileHomes }, warn));
76
200
  }
77
201
  catch (err) {
78
- return fail(err instanceof Error ? err.message : String(err));
202
+ return fail(ui, err instanceof Error ? err.message : String(err));
79
203
  }
80
204
  const state = stateHome(env);
81
205
  const storeDir = join(state, "review");
82
206
  const target = cmd.target;
83
- let destinations = [];
84
- // Posting goes through the one gate with the install's dry_run: a config
85
- // that keeps dry_run on (the shipped defaults do) would record the post and
86
- // send nothing, so posting is neither offered nor accepted, and that is said
87
- // before the review is paid for.
88
- const postBlocked = cfg.dry_run &&
89
- (configPath === null
90
- ? "posting needs a qcr config with dry_run = false, and there is none: the shipped defaults keep dry_run on"
91
- : `posting needs dry_run = false, and ${configPath} keeps dry_run on`);
92
207
  if (!cmd.preview && target.kind !== "diff" && target.kind !== "pr" && !isGitWorkTree(host.cwd))
93
- return fail(`${host.cwd} is not inside a git repository: /review reviews a git checkout`);
208
+ return fail(ui, `${host.cwd} is not inside a git repository: /qcr-review reviews a git checkout`);
209
+ // The providers whose logins ride into the run: the config's, routed by
210
+ // borrowLogin to the OpenAI login that exists.
211
+ let runProviders = reviewProviders(cfg);
212
+ const progress = {
213
+ label,
214
+ stage: cmd.preview ? "pricing" : "preparing",
215
+ startedAt: Date.now(),
216
+ };
217
+ const showStatus = () => ui.status(reviewStatusLine(progress, Date.now()));
94
218
  if (!cmd.preview) {
95
219
  // The borrowed login first: refreshed by the host when short, refused
96
220
  // with a hint when pi has none for a provider the review runs on, before
97
- // the person is asked anything.
221
+ // anything is paid for.
98
222
  const borrowed = await borrowLogin({
99
- providers: reviewProviders(cfg),
223
+ providers: runProviders,
100
224
  host: host.auth,
101
225
  needMs: REVIEW_TIMEOUT_MS,
102
226
  marginMs: PI_REFRESH_MARGIN_MS,
103
227
  });
104
228
  if (!borrowed.ok)
105
- return fail(borrowed.error);
106
- if (postBlocked && cmd.to.includes("pr"))
107
- return fail(`${postBlocked}; the review was not started.`);
108
- const plan = planDestinations({
109
- explicit: cmd.to,
110
- json: cmd.json,
111
- interactive: ui.interactive,
112
- saved: loadDefaultDestinationsIn(storeDir, host.cwd),
113
- target: { pr: target.kind === "pr" && !postBlocked },
114
- surface: "session",
115
- });
116
- if (plan.kind === "ask" && target.kind === "pr" && postBlocked)
117
- ui.notify(`${postBlocked}: the review is not offered for posting.`, "info");
118
- if (plan.kind === "fixed")
119
- destinations = plan.destinations;
120
- else {
121
- const labels = plan.menu.map((m) => m.label);
122
- const picked = await ui.select("Where should the review go?", labels, host.shutdown);
123
- const item = plan.menu.find((m) => m.label === picked);
124
- if (item === undefined)
125
- return ui.notify("review cancelled", "info");
126
- destinations = item.pick.destinations;
127
- if (item.pick.remember) {
128
- const kept = saveDefaultDestinationsIn(storeDir, host.cwd, destinations);
129
- ui.notify(kept
130
- ? "kept as this repo's default: pass --to to choose otherwise"
131
- : `this choice could not be kept as a default: ${host.cwd} is not in a git repo`, kept ? "info" : "warning");
132
- }
133
- }
229
+ return fail(ui, borrowed.error);
230
+ runProviders = borrowed.providers;
134
231
  }
232
+ // The result is shown here and kept as files; JSON alone with --json. A
233
+ // post is never a destination: the posting rule offers it after the review.
234
+ const destinations = cmd.preview ? [] : cmd.json ? ["json"] : ["terminal", "file"];
135
235
  // A turn that ignores its abort and dispose cannot be killed here: the
136
236
  // process is the person's pi. The budget's last resort (and a stop that does
137
- // not end the run within its grace) abandons the run instead, so /review
138
- // returns and pi keeps running.
237
+ // not end the run within its grace) abandons the run instead, so the
238
+ // command's work ends and pi keeps running.
139
239
  let abandon = () => { };
140
240
  const abandoned = new Promise((_, reject) => {
141
241
  abandon = (why) => reject(new Error(why));
@@ -147,13 +247,14 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
147
247
  graceTimer = setTimeout(() => abandon("the review did not stop in time: it was abandoned, and pi keeps running"), STOP_GRACE_MS);
148
248
  graceTimer.unref?.();
149
249
  }, { once: true });
150
- const onShutdown = () => stop.abort();
151
- host.shutdown.addEventListener("abort", onShutdown, { once: true });
152
- const offEscape = ui.onEscape(() => {
153
- if (!stop.signal.aborted)
154
- ui.notify("stopping the review…", "warning");
155
- stop.abort();
156
- });
250
+ const onStop = () => stop.abort();
251
+ // `/qcr-review --stop` and the session's end both stop it.
252
+ for (const s of [o.stop, host.shutdown]) {
253
+ if (s.aborted)
254
+ stop.abort();
255
+ else
256
+ s.addEventListener("abort", onStop, { once: true });
257
+ }
157
258
  let runDir = null;
158
259
  const logFile = join(storeDir, "plugin.log");
159
260
  const log = (l) => {
@@ -165,6 +266,19 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
165
266
  // a diagnostics line that cannot be kept never costs the review
166
267
  }
167
268
  };
269
+ // The review as the post question showed it: it is not shown twice.
270
+ let shownInOffer = false;
271
+ const offerPost = postOffer(o.settings.posting, ui, {
272
+ onAsk: () => {
273
+ shownInOffer = true;
274
+ progress.stage = "asking";
275
+ showStatus();
276
+ },
277
+ onPost: () => {
278
+ progress.stage = "posting";
279
+ showStatus();
280
+ },
281
+ });
168
282
  const opts = {
169
283
  repoDir: host.cwd,
170
284
  root,
@@ -191,17 +305,17 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
191
305
  });
192
306
  },
193
307
  // Only the review's providers ride into the run, as borrowLogin renewed
194
- // them: a person's pi holds other logins, which neither go along nor
195
- // refuse the run.
308
+ // (and, for an OpenAI model, routed) them: a person's pi holds other
309
+ // logins, which neither go along nor refuse the run.
196
310
  prepareHost: (req) => prepareReviewHost({
197
311
  ...req,
198
312
  profile: req.profile,
199
313
  authWords: PLUGIN_AUTH_WORDS,
200
- authProviders: reviewProviders(cfg),
314
+ authProviders: runProviders,
201
315
  }),
202
316
  memory: null,
203
317
  destinations,
204
- full: cmd.full,
318
+ full: preset?.full ?? false,
205
319
  limits: {
206
320
  route: "laptop",
207
321
  ...(cmd.limitUsd !== undefined ? { limitUsd: cmd.limitUsd } : {}),
@@ -209,16 +323,31 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
209
323
  },
210
324
  };
211
325
  const io = {
212
- confirm: ui.interactive ? (q, o) => ui.confirm("QuickReview", q, o?.signal) : null,
213
- progress: (l) => ui.notify(l, "info"),
214
- started: (s) => ui.status(`QuickReview: ${s.lenses.length} lenses, about $${s.estimateUsd.toFixed(2)}` +
215
- `${s.capUsd !== null ? `, stops at $${s.capUsd.toFixed(2)}` : ""}` +
216
- `${ui.mode === "tui" ? " — Esc stops it" : ""}`),
326
+ confirm: ui.interactive ? (q, a) => ui.confirm("QuickReview", q, a?.signal) : null,
327
+ // the preview's lines and the memory notice: the status line carries the
328
+ // plan and the price, so these go to the run's log
329
+ progress: log,
330
+ started: (s) => {
331
+ progress.stage = "running";
332
+ progress.lenses = s.lenses.length;
333
+ progress.estimateUsd = s.estimateUsd;
334
+ progress.capUsd = s.capUsd;
335
+ showStatus();
336
+ },
337
+ ...(cmd.preview || offerPost === undefined ? {} : { offerPost }),
217
338
  warn,
218
339
  log,
219
340
  signal: stop.signal,
220
341
  };
221
- ui.status(cmd.preview ? "QuickReview: pricing…" : "QuickReview: preparing…");
342
+ // Each second: the time, and once the round runs, what its lenses are doing.
343
+ const tick = () => {
344
+ if (runDir !== null && progress.stage === "running")
345
+ progress.running = liveLensLines(runDir, Date.now());
346
+ showStatus();
347
+ };
348
+ showStatus();
349
+ const ticker = setInterval(tick, 1000);
350
+ ticker.unref?.();
222
351
  let result;
223
352
  try {
224
353
  result = await Promise.race([
@@ -227,15 +356,44 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
227
356
  ]);
228
357
  }
229
358
  catch (err) {
230
- return fail(err instanceof Error ? err.message : String(err));
359
+ return fail(ui, err instanceof Error ? err.message : String(err));
231
360
  }
232
361
  finally {
362
+ clearInterval(ticker);
233
363
  clearTimeout(graceTimer);
234
- offEscape();
235
- host.shutdown.removeEventListener("abort", onShutdown);
364
+ for (const s of [o.stop, host.shutdown])
365
+ s.removeEventListener("abort", onStop);
236
366
  ui.status(undefined);
237
367
  }
238
- deliver(result, { cmd, destinations, runDir, ui });
368
+ deliver(result, { cmd, destinations, runDir, ui, shownInOffer });
369
+ }
370
+ /** The post question the posting rule makes of a finished PR review
371
+ * (`ReviewIo.offerPost`): asked with No first, never asked, or answered yes.
372
+ * Nobody to ask (print mode) is a no. */
373
+ function postOffer(rule, ui, on) {
374
+ if (rule === "never")
375
+ return undefined;
376
+ if (rule === "always")
377
+ return async (offer) => {
378
+ ui.notify(`posting the review to PR #${offer.pr}, as your posting rule says`, "info");
379
+ on.onPost();
380
+ return true;
381
+ };
382
+ if (!ui.interactive)
383
+ return undefined;
384
+ return async (offer, a) => {
385
+ on.onAsk();
386
+ // the review first, so the question is about something the person has read
387
+ ui.show(offer.markdown, { pr: offer.pr, repo: offer.repo });
388
+ const yes = postAnswer(offer.dryRun);
389
+ const picked = await ui.select(`Post this review to PR #${offer.pr} (${offer.repo}) on GitHub as a comment-only review?`, [KEEP_IT_HERE, yes], a?.signal);
390
+ if (picked !== yes) {
391
+ ui.notify(`the review of PR #${offer.pr} stays here: nothing was posted`, "info");
392
+ return false;
393
+ }
394
+ on.onPost();
395
+ return true;
396
+ };
239
397
  }
240
398
  /** Is `dir` inside a git work tree? */
241
399
  function isGitWorkTree(dir) {
@@ -288,11 +446,23 @@ function deliver(r, o) {
288
446
  const savedNote = saved.length > 0 ? `\n\nSaved: ${saved.map((p) => `\`${p}\``).join(", ")}` : "";
289
447
  if (dests.has("json"))
290
448
  ui.show(fence("json", json), r.data);
291
- if (o.cmd.preview || dests.has("terminal") || (!dests.has("json") && r.markdown === null))
449
+ if (o.shownInOffer) {
450
+ if (saved.length > 0)
451
+ ui.notify(`review saved: ${saved.join(", ")}`, "info");
452
+ }
453
+ else if (o.cmd.preview || dests.has("terminal") || (!dests.has("json") && r.markdown === null))
292
454
  ui.show(human + savedNote, r.data);
293
455
  else if (dests.has("file"))
294
456
  ui.notify(`review saved: ${saved.join(", ")}`, "info");
295
- if (r.exitCode !== 0)
296
- ui.notify(r.text.split("\n")[0] ?? "the review did not finish", "error");
457
+ // What the post did, the core's own line (sent, recorded in a dry run, or
458
+ // refused): the last line of its text.
459
+ const post = r.data["post"];
460
+ if (typeof post === "object" && post !== null) {
461
+ const line = r.text.trimEnd().split("\n").pop() ?? "";
462
+ const ok = post.ok === true;
463
+ ui.notify(line, ok ? "info" : "error");
464
+ }
465
+ else if (r.exitCode !== 0)
466
+ ui.notify(r.text.split("\n").find((l) => l.trim() !== "") ?? "the review did not finish", "error");
297
467
  }
298
468
  //# sourceMappingURL=review.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"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"}