@quickchatai/pi-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 (218) hide show
  1. package/README.md +79 -27
  2. package/assets/config.example.toml +20 -6
  3. package/assets/prompts/onboarding.md +8 -7
  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/lens/activity.d.ts +45 -0
  14. package/dist/src/engine/lens/activity.d.ts.map +1 -0
  15. package/dist/src/engine/lens/activity.js +118 -0
  16. package/dist/src/engine/lens/activity.js.map +1 -0
  17. package/dist/src/engine/lens/runlens.d.ts +7 -0
  18. package/dist/src/engine/lens/runlens.d.ts.map +1 -1
  19. package/dist/src/engine/lens/runlens.js +30 -1
  20. package/dist/src/engine/lens/runlens.js.map +1 -1
  21. package/dist/src/engine/lens/tool.d.ts +7 -0
  22. package/dist/src/engine/lens/tool.d.ts.map +1 -1
  23. package/dist/src/engine/lens/tool.js +101 -18
  24. package/dist/src/engine/lens/tool.js.map +1 -1
  25. package/dist/src/engine/lens/wave.d.ts +6 -0
  26. package/dist/src/engine/lens/wave.d.ts.map +1 -1
  27. package/dist/src/engine/lens/wave.js +16 -0
  28. package/dist/src/engine/lens/wave.js.map +1 -1
  29. package/dist/src/homes.js +1 -1
  30. package/dist/src/homes.js.map +1 -1
  31. package/dist/src/live/events.d.ts +3 -0
  32. package/dist/src/live/events.d.ts.map +1 -1
  33. package/dist/src/live/events.js.map +1 -1
  34. package/dist/src/live/lensline.d.ts +20 -0
  35. package/dist/src/live/lensline.d.ts.map +1 -0
  36. package/dist/src/live/lensline.js +70 -0
  37. package/dist/src/live/lensline.js.map +1 -0
  38. package/dist/src/live/projection.d.ts +55 -0
  39. package/dist/src/live/projection.d.ts.map +1 -0
  40. package/dist/src/live/projection.js +465 -0
  41. package/dist/src/live/projection.js.map +1 -0
  42. package/dist/src/live/read.d.ts +24 -0
  43. package/dist/src/live/read.d.ts.map +1 -0
  44. package/dist/src/live/read.js +60 -0
  45. package/dist/src/live/read.js.map +1 -0
  46. package/dist/src/live/writer.d.ts +3 -0
  47. package/dist/src/live/writer.d.ts.map +1 -1
  48. package/dist/src/live/writer.js +6 -1
  49. package/dist/src/live/writer.js.map +1 -1
  50. package/dist/src/localreview.d.ts +18 -8
  51. package/dist/src/localreview.d.ts.map +1 -1
  52. package/dist/src/localreview.js +103 -43
  53. package/dist/src/localreview.js.map +1 -1
  54. package/dist/src/modelroute.d.ts +4 -0
  55. package/dist/src/modelroute.d.ts.map +1 -1
  56. package/dist/src/modelroute.js +21 -0
  57. package/dist/src/modelroute.js.map +1 -1
  58. package/dist/src/plugin/args.d.ts +38 -7
  59. package/dist/src/plugin/args.d.ts.map +1 -1
  60. package/dist/src/plugin/args.js +134 -37
  61. package/dist/src/plugin/args.js.map +1 -1
  62. package/dist/src/plugin/login.d.ts +8 -4
  63. package/dist/src/plugin/login.d.ts.map +1 -1
  64. package/dist/src/plugin/login.js +25 -32
  65. package/dist/src/plugin/login.js.map +1 -1
  66. package/dist/src/plugin/messages.d.ts +7 -0
  67. package/dist/src/plugin/messages.d.ts.map +1 -0
  68. package/dist/src/plugin/messages.js +13 -0
  69. package/dist/src/plugin/messages.js.map +1 -0
  70. package/dist/src/plugin/review.d.ts +52 -6
  71. package/dist/src/plugin/review.d.ts.map +1 -1
  72. package/dist/src/plugin/review.js +261 -95
  73. package/dist/src/plugin/review.js.map +1 -1
  74. package/dist/src/plugin/scan.d.ts +80 -44
  75. package/dist/src/plugin/scan.d.ts.map +1 -1
  76. package/dist/src/plugin/scan.js +450 -233
  77. package/dist/src/plugin/scan.js.map +1 -1
  78. package/dist/src/plugin/scancases.d.ts +33 -0
  79. package/dist/src/plugin/scancases.d.ts.map +1 -0
  80. package/dist/src/plugin/scancases.js +153 -0
  81. package/dist/src/plugin/scancases.js.map +1 -0
  82. package/dist/src/plugin/settings.d.ts +18 -0
  83. package/dist/src/plugin/settings.d.ts.map +1 -0
  84. package/dist/src/plugin/settings.js +47 -0
  85. package/dist/src/plugin/settings.js.map +1 -0
  86. package/dist/src/plugin/setup.d.ts +35 -12
  87. package/dist/src/plugin/setup.d.ts.map +1 -1
  88. package/dist/src/plugin/setup.js +258 -118
  89. package/dist/src/plugin/setup.js.map +1 -1
  90. package/dist/src/plugin/versiongate.js +1 -1
  91. package/dist/src/plugin/versiongate.js.map +1 -1
  92. package/dist/src/profileoverrides.d.ts +3 -0
  93. package/dist/src/profileoverrides.d.ts.map +1 -1
  94. package/dist/src/profileoverrides.js +9 -2
  95. package/dist/src/profileoverrides.js.map +1 -1
  96. package/dist/src/reviewapi.d.ts +22 -31
  97. package/dist/src/reviewapi.d.ts.map +1 -1
  98. package/dist/src/reviewapi.js +90 -66
  99. package/dist/src/reviewapi.js.map +1 -1
  100. package/dist/src/reviewdest.d.ts +1 -1
  101. package/dist/src/reviewdest.d.ts.map +1 -1
  102. package/dist/src/reviewdest.js +4 -3
  103. package/dist/src/reviewdest.js.map +1 -1
  104. package/dist/src/reviewtarget.d.ts +36 -0
  105. package/dist/src/reviewtarget.d.ts.map +1 -0
  106. package/dist/src/reviewtarget.js +6 -0
  107. package/dist/src/reviewtarget.js.map +1 -0
  108. package/dist/src/round-progress.d.ts +5 -0
  109. package/dist/src/round-progress.d.ts.map +1 -1
  110. package/dist/src/round-progress.js.map +1 -1
  111. package/dist/src/savedpost.d.ts +65 -0
  112. package/dist/src/savedpost.d.ts.map +1 -0
  113. package/dist/src/savedpost.js +131 -0
  114. package/dist/src/savedpost.js.map +1 -0
  115. package/dist/src/scan/caseread.d.ts +84 -0
  116. package/dist/src/scan/caseread.d.ts.map +1 -0
  117. package/dist/src/scan/caseread.js +263 -0
  118. package/dist/src/scan/caseread.js.map +1 -0
  119. package/dist/src/scan/channelfs.d.ts +6 -0
  120. package/dist/src/scan/channelfs.d.ts.map +1 -0
  121. package/dist/src/scan/channelfs.js +27 -0
  122. package/dist/src/scan/channelfs.js.map +1 -0
  123. package/dist/src/scan/cutrender.d.ts +13 -0
  124. package/dist/src/scan/cutrender.d.ts.map +1 -0
  125. package/dist/src/scan/cutrender.js +51 -0
  126. package/dist/src/scan/cutrender.js.map +1 -0
  127. package/dist/src/scan/facts.d.ts +72 -0
  128. package/dist/src/scan/facts.d.ts.map +1 -0
  129. package/dist/src/scan/facts.js +593 -0
  130. package/dist/src/scan/facts.js.map +1 -0
  131. package/dist/src/scan/findings.d.ts +320 -0
  132. package/dist/src/scan/findings.d.ts.map +1 -0
  133. package/dist/src/scan/findings.js +948 -0
  134. package/dist/src/scan/findings.js.map +1 -0
  135. package/dist/src/scan/ledger.d.ts +116 -0
  136. package/dist/src/scan/ledger.d.ts.map +1 -0
  137. package/dist/src/scan/ledger.js +207 -0
  138. package/dist/src/scan/ledger.js.map +1 -0
  139. package/dist/src/scan/presentation.d.ts +19 -0
  140. package/dist/src/scan/presentation.d.ts.map +1 -0
  141. package/dist/src/scan/presentation.js +9 -0
  142. package/dist/src/scan/presentation.js.map +1 -0
  143. package/dist/src/scan/scan.d.ts +354 -0
  144. package/dist/src/scan/scan.d.ts.map +1 -0
  145. package/dist/src/scan/scan.js +725 -0
  146. package/dist/src/scan/scan.js.map +1 -0
  147. package/dist/src/scan/scanagents.d.ts +23 -0
  148. package/dist/src/scan/scanagents.d.ts.map +1 -0
  149. package/dist/src/scan/scanagents.js +99 -0
  150. package/dist/src/scan/scanagents.js.map +1 -0
  151. package/dist/src/scan/scanassemble.d.ts +65 -0
  152. package/dist/src/scan/scanassemble.d.ts.map +1 -0
  153. package/dist/src/scan/scanassemble.js +93 -0
  154. package/dist/src/scan/scanassemble.js.map +1 -0
  155. package/dist/src/scan/scanfs.d.ts +26 -0
  156. package/dist/src/scan/scanfs.d.ts.map +1 -0
  157. package/dist/src/scan/scanfs.js +229 -0
  158. package/dist/src/scan/scanfs.js.map +1 -0
  159. package/dist/src/scan/scanlease.d.ts +50 -0
  160. package/dist/src/scan/scanlease.d.ts.map +1 -0
  161. package/dist/src/scan/scanlease.js +251 -0
  162. package/dist/src/scan/scanlease.js.map +1 -0
  163. package/dist/src/scan/scanleaves.d.ts +55 -0
  164. package/dist/src/scan/scanleaves.d.ts.map +1 -0
  165. package/dist/src/scan/scanleaves.js +258 -0
  166. package/dist/src/scan/scanleaves.js.map +1 -0
  167. package/dist/src/scan/scanports.d.ts +79 -0
  168. package/dist/src/scan/scanports.d.ts.map +1 -0
  169. package/dist/src/scan/scanports.js +8 -0
  170. package/dist/src/scan/scanports.js.map +1 -0
  171. package/dist/src/scan/scanrender.d.ts +128 -0
  172. package/dist/src/scan/scanrender.d.ts.map +1 -0
  173. package/dist/src/scan/scanrender.js +527 -0
  174. package/dist/src/scan/scanrender.js.map +1 -0
  175. package/dist/src/scan/scanreport.d.ts +126 -0
  176. package/dist/src/scan/scanreport.d.ts.map +1 -0
  177. package/dist/src/scan/scanreport.js +289 -0
  178. package/dist/src/scan/scanreport.js.map +1 -0
  179. package/dist/src/scan/scanrun.d.ts +472 -0
  180. package/dist/src/scan/scanrun.d.ts.map +1 -0
  181. package/dist/src/scan/scanrun.js +1733 -0
  182. package/dist/src/scan/scanrun.js.map +1 -0
  183. package/dist/src/scan/scantree.d.ts +21 -0
  184. package/dist/src/scan/scantree.d.ts.map +1 -0
  185. package/dist/src/scan/scantree.js +297 -0
  186. package/dist/src/scan/scantree.js.map +1 -0
  187. package/dist/src/scan/scanverbs.d.ts +208 -0
  188. package/dist/src/scan/scanverbs.d.ts.map +1 -0
  189. package/dist/src/scan/scanverbs.js +689 -0
  190. package/dist/src/scan/scanverbs.js.map +1 -0
  191. package/dist/src/scan/stage2.d.ts +221 -0
  192. package/dist/src/scan/stage2.d.ts.map +1 -0
  193. package/dist/src/scan/stage2.js +617 -0
  194. package/dist/src/scan/stage2.js.map +1 -0
  195. package/dist/src/scan/stage2request.d.ts +125 -0
  196. package/dist/src/scan/stage2request.d.ts.map +1 -0
  197. package/dist/src/scan/stage2request.js +259 -0
  198. package/dist/src/scan/stage2request.js.map +1 -0
  199. package/dist/src/scan/textsniff.d.ts +14 -0
  200. package/dist/src/scan/textsniff.d.ts.map +1 -0
  201. package/dist/src/scan/textsniff.js +88 -0
  202. package/dist/src/scan/textsniff.js.map +1 -0
  203. package/dist/src/scan/unitcut.d.ts +135 -0
  204. package/dist/src/scan/unitcut.d.ts.map +1 -0
  205. package/dist/src/scan/unitcut.js +437 -0
  206. package/dist/src/scan/unitcut.js.map +1 -0
  207. package/dist/src/scan/unitcutstore.d.ts +155 -0
  208. package/dist/src/scan/unitcutstore.d.ts.map +1 -0
  209. package/dist/src/scan/unitcutstore.js +381 -0
  210. package/dist/src/scan/unitcutstore.js.map +1 -0
  211. package/dist/src/setupchecklist.d.ts +240 -0
  212. package/dist/src/setupchecklist.d.ts.map +1 -0
  213. package/dist/src/setupchecklist.js +407 -0
  214. package/dist/src/setupchecklist.js.map +1 -0
  215. package/package.json +7 -3
  216. package/skills/qcr-review/SKILL.md +24 -0
  217. package/skills/qcr-scan/SKILL.md +23 -0
  218. 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,53 +63,162 @@ 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`);
94
209
  // The providers whose logins ride into the run: the config's, routed by
95
210
  // borrowLogin to the OpenAI login that exists.
96
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()));
97
218
  if (!cmd.preview) {
98
219
  // The borrowed login first: refreshed by the host when short, refused
99
220
  // with a hint when pi has none for a provider the review runs on, before
100
- // the person is asked anything.
221
+ // anything is paid for.
101
222
  const borrowed = await borrowLogin({
102
223
  providers: runProviders,
103
224
  host: host.auth,
@@ -105,41 +226,16 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
105
226
  marginMs: PI_REFRESH_MARGIN_MS,
106
227
  });
107
228
  if (!borrowed.ok)
108
- return fail(borrowed.error);
229
+ return fail(ui, borrowed.error);
109
230
  runProviders = borrowed.providers;
110
- if (postBlocked && cmd.to.includes("pr"))
111
- return fail(`${postBlocked}; the review was not started.`);
112
- const plan = planDestinations({
113
- explicit: cmd.to,
114
- json: cmd.json,
115
- interactive: ui.interactive,
116
- saved: loadDefaultDestinationsIn(storeDir, host.cwd),
117
- target: { pr: target.kind === "pr" && !postBlocked },
118
- surface: "session",
119
- });
120
- if (plan.kind === "ask" && target.kind === "pr" && postBlocked)
121
- ui.notify(`${postBlocked}: the review is not offered for posting.`, "info");
122
- if (plan.kind === "fixed")
123
- destinations = plan.destinations;
124
- else {
125
- const labels = plan.menu.map((m) => m.label);
126
- const picked = await ui.select("Where should the review go?", labels, host.shutdown);
127
- const item = plan.menu.find((m) => m.label === picked);
128
- if (item === undefined)
129
- return ui.notify("review cancelled", "info");
130
- destinations = item.pick.destinations;
131
- if (item.pick.remember) {
132
- const kept = saveDefaultDestinationsIn(storeDir, host.cwd, destinations);
133
- ui.notify(kept
134
- ? "kept as this repo's default: pass --to to choose otherwise"
135
- : `this choice could not be kept as a default: ${host.cwd} is not in a git repo`, kept ? "info" : "warning");
136
- }
137
- }
138
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"];
139
235
  // A turn that ignores its abort and dispose cannot be killed here: the
140
236
  // process is the person's pi. The budget's last resort (and a stop that does
141
- // not end the run within its grace) abandons the run instead, so /review
142
- // 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.
143
239
  let abandon = () => { };
144
240
  const abandoned = new Promise((_, reject) => {
145
241
  abandon = (why) => reject(new Error(why));
@@ -151,13 +247,14 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
151
247
  graceTimer = setTimeout(() => abandon("the review did not stop in time: it was abandoned, and pi keeps running"), STOP_GRACE_MS);
152
248
  graceTimer.unref?.();
153
249
  }, { once: true });
154
- const onShutdown = () => stop.abort();
155
- host.shutdown.addEventListener("abort", onShutdown, { once: true });
156
- const offEscape = ui.onEscape(() => {
157
- if (!stop.signal.aborted)
158
- ui.notify("stopping the review…", "warning");
159
- stop.abort();
160
- });
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
+ }
161
258
  let runDir = null;
162
259
  const logFile = join(storeDir, "plugin.log");
163
260
  const log = (l) => {
@@ -169,6 +266,19 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
169
266
  // a diagnostics line that cannot be kept never costs the review
170
267
  }
171
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
+ });
172
282
  const opts = {
173
283
  repoDir: host.cwd,
174
284
  root,
@@ -205,7 +315,7 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
205
315
  }),
206
316
  memory: null,
207
317
  destinations,
208
- full: cmd.full,
318
+ full: preset?.full ?? false,
209
319
  limits: {
210
320
  route: "laptop",
211
321
  ...(cmd.limitUsd !== undefined ? { limitUsd: cmd.limitUsd } : {}),
@@ -213,16 +323,31 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
213
323
  },
214
324
  };
215
325
  const io = {
216
- confirm: ui.interactive ? (q, o) => ui.confirm("QuickReview", q, o?.signal) : null,
217
- progress: (l) => ui.notify(l, "info"),
218
- started: (s) => ui.status(`QuickReview: ${s.lenses.length} lenses, about $${s.estimateUsd.toFixed(2)}` +
219
- `${s.capUsd !== null ? `, stops at $${s.capUsd.toFixed(2)}` : ""}` +
220
- `${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 }),
221
338
  warn,
222
339
  log,
223
340
  signal: stop.signal,
224
341
  };
225
- 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?.();
226
351
  let result;
227
352
  try {
228
353
  result = await Promise.race([
@@ -231,15 +356,44 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
231
356
  ]);
232
357
  }
233
358
  catch (err) {
234
- return fail(err instanceof Error ? err.message : String(err));
359
+ return fail(ui, err instanceof Error ? err.message : String(err));
235
360
  }
236
361
  finally {
362
+ clearInterval(ticker);
237
363
  clearTimeout(graceTimer);
238
- offEscape();
239
- host.shutdown.removeEventListener("abort", onShutdown);
364
+ for (const s of [o.stop, host.shutdown])
365
+ s.removeEventListener("abort", onStop);
240
366
  ui.status(undefined);
241
367
  }
242
- 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
+ };
243
397
  }
244
398
  /** Is `dir` inside a git work tree? */
245
399
  function isGitWorkTree(dir) {
@@ -292,11 +446,23 @@ function deliver(r, o) {
292
446
  const savedNote = saved.length > 0 ? `\n\nSaved: ${saved.map((p) => `\`${p}\``).join(", ")}` : "";
293
447
  if (dests.has("json"))
294
448
  ui.show(fence("json", json), r.data);
295
- 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))
296
454
  ui.show(human + savedNote, r.data);
297
455
  else if (dests.has("file"))
298
456
  ui.notify(`review saved: ${saved.join(", ")}`, "info");
299
- if (r.exitCode !== 0)
300
- 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");
301
467
  }
302
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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"}