@quickchatai/pi-quickreview 1.2.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +79 -27
  2. package/assets/config.example.toml +25 -7
  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 +17 -5
  6. package/dist/extensions/quickreview.d.ts.map +1 -1
  7. package/dist/extensions/quickreview.js +79 -26
  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/index.d.ts.map +1 -1
  63. package/dist/src/plugin/index.js +5 -1
  64. package/dist/src/plugin/index.js.map +1 -1
  65. package/dist/src/plugin/login.d.ts +8 -4
  66. package/dist/src/plugin/login.d.ts.map +1 -1
  67. package/dist/src/plugin/login.js +25 -32
  68. package/dist/src/plugin/login.js.map +1 -1
  69. package/dist/src/plugin/messages.d.ts +7 -0
  70. package/dist/src/plugin/messages.d.ts.map +1 -0
  71. package/dist/src/plugin/messages.js +13 -0
  72. package/dist/src/plugin/messages.js.map +1 -0
  73. package/dist/src/plugin/peers.d.ts +17 -0
  74. package/dist/src/plugin/peers.d.ts.map +1 -0
  75. package/dist/src/plugin/peers.js +55 -0
  76. package/dist/src/plugin/peers.js.map +1 -0
  77. package/dist/src/plugin/review.d.ts +52 -6
  78. package/dist/src/plugin/review.d.ts.map +1 -1
  79. package/dist/src/plugin/review.js +261 -95
  80. package/dist/src/plugin/review.js.map +1 -1
  81. package/dist/src/plugin/scan.d.ts +80 -44
  82. package/dist/src/plugin/scan.d.ts.map +1 -1
  83. package/dist/src/plugin/scan.js +450 -233
  84. package/dist/src/plugin/scan.js.map +1 -1
  85. package/dist/src/plugin/scancases.d.ts +33 -0
  86. package/dist/src/plugin/scancases.d.ts.map +1 -0
  87. package/dist/src/plugin/scancases.js +153 -0
  88. package/dist/src/plugin/scancases.js.map +1 -0
  89. package/dist/src/plugin/settings.d.ts +18 -0
  90. package/dist/src/plugin/settings.d.ts.map +1 -0
  91. package/dist/src/plugin/settings.js +47 -0
  92. package/dist/src/plugin/settings.js.map +1 -0
  93. package/dist/src/plugin/setup.d.ts +35 -12
  94. package/dist/src/plugin/setup.d.ts.map +1 -1
  95. package/dist/src/plugin/setup.js +258 -118
  96. package/dist/src/plugin/setup.js.map +1 -1
  97. package/dist/src/plugin/versiongate.d.ts +3 -0
  98. package/dist/src/plugin/versiongate.d.ts.map +1 -1
  99. package/dist/src/plugin/versiongate.js +9 -4
  100. package/dist/src/plugin/versiongate.js.map +1 -1
  101. package/dist/src/profileoverrides.d.ts +3 -0
  102. package/dist/src/profileoverrides.d.ts.map +1 -1
  103. package/dist/src/profileoverrides.js +9 -2
  104. package/dist/src/profileoverrides.js.map +1 -1
  105. package/dist/src/reviewapi.d.ts +22 -31
  106. package/dist/src/reviewapi.d.ts.map +1 -1
  107. package/dist/src/reviewapi.js +90 -66
  108. package/dist/src/reviewapi.js.map +1 -1
  109. package/dist/src/reviewdest.d.ts +1 -1
  110. package/dist/src/reviewdest.d.ts.map +1 -1
  111. package/dist/src/reviewdest.js +4 -3
  112. package/dist/src/reviewdest.js.map +1 -1
  113. package/dist/src/reviewtarget.d.ts +36 -0
  114. package/dist/src/reviewtarget.d.ts.map +1 -0
  115. package/dist/src/reviewtarget.js +6 -0
  116. package/dist/src/reviewtarget.js.map +1 -0
  117. package/dist/src/round-progress.d.ts +5 -0
  118. package/dist/src/round-progress.d.ts.map +1 -1
  119. package/dist/src/round-progress.js.map +1 -1
  120. package/dist/src/round-stage-deadlines.d.ts +26 -1
  121. package/dist/src/round-stage-deadlines.d.ts.map +1 -1
  122. package/dist/src/round-stage-deadlines.js +45 -2
  123. package/dist/src/round-stage-deadlines.js.map +1 -1
  124. package/dist/src/savedpost.d.ts +65 -0
  125. package/dist/src/savedpost.d.ts.map +1 -0
  126. package/dist/src/savedpost.js +131 -0
  127. package/dist/src/savedpost.js.map +1 -0
  128. package/dist/src/scan/caseread.d.ts +84 -0
  129. package/dist/src/scan/caseread.d.ts.map +1 -0
  130. package/dist/src/scan/caseread.js +263 -0
  131. package/dist/src/scan/caseread.js.map +1 -0
  132. package/dist/src/scan/channelfs.d.ts +6 -0
  133. package/dist/src/scan/channelfs.d.ts.map +1 -0
  134. package/dist/src/scan/channelfs.js +27 -0
  135. package/dist/src/scan/channelfs.js.map +1 -0
  136. package/dist/src/scan/cutrender.d.ts +13 -0
  137. package/dist/src/scan/cutrender.d.ts.map +1 -0
  138. package/dist/src/scan/cutrender.js +51 -0
  139. package/dist/src/scan/cutrender.js.map +1 -0
  140. package/dist/src/scan/facts.d.ts +72 -0
  141. package/dist/src/scan/facts.d.ts.map +1 -0
  142. package/dist/src/scan/facts.js +593 -0
  143. package/dist/src/scan/facts.js.map +1 -0
  144. package/dist/src/scan/findings.d.ts +320 -0
  145. package/dist/src/scan/findings.d.ts.map +1 -0
  146. package/dist/src/scan/findings.js +948 -0
  147. package/dist/src/scan/findings.js.map +1 -0
  148. package/dist/src/scan/ledger.d.ts +116 -0
  149. package/dist/src/scan/ledger.d.ts.map +1 -0
  150. package/dist/src/scan/ledger.js +207 -0
  151. package/dist/src/scan/ledger.js.map +1 -0
  152. package/dist/src/scan/presentation.d.ts +19 -0
  153. package/dist/src/scan/presentation.d.ts.map +1 -0
  154. package/dist/src/scan/presentation.js +9 -0
  155. package/dist/src/scan/presentation.js.map +1 -0
  156. package/dist/src/scan/scan.d.ts +354 -0
  157. package/dist/src/scan/scan.d.ts.map +1 -0
  158. package/dist/src/scan/scan.js +725 -0
  159. package/dist/src/scan/scan.js.map +1 -0
  160. package/dist/src/scan/scanagents.d.ts +23 -0
  161. package/dist/src/scan/scanagents.d.ts.map +1 -0
  162. package/dist/src/scan/scanagents.js +99 -0
  163. package/dist/src/scan/scanagents.js.map +1 -0
  164. package/dist/src/scan/scanassemble.d.ts +65 -0
  165. package/dist/src/scan/scanassemble.d.ts.map +1 -0
  166. package/dist/src/scan/scanassemble.js +93 -0
  167. package/dist/src/scan/scanassemble.js.map +1 -0
  168. package/dist/src/scan/scanfs.d.ts +26 -0
  169. package/dist/src/scan/scanfs.d.ts.map +1 -0
  170. package/dist/src/scan/scanfs.js +229 -0
  171. package/dist/src/scan/scanfs.js.map +1 -0
  172. package/dist/src/scan/scanlease.d.ts +50 -0
  173. package/dist/src/scan/scanlease.d.ts.map +1 -0
  174. package/dist/src/scan/scanlease.js +251 -0
  175. package/dist/src/scan/scanlease.js.map +1 -0
  176. package/dist/src/scan/scanleaves.d.ts +55 -0
  177. package/dist/src/scan/scanleaves.d.ts.map +1 -0
  178. package/dist/src/scan/scanleaves.js +258 -0
  179. package/dist/src/scan/scanleaves.js.map +1 -0
  180. package/dist/src/scan/scanports.d.ts +79 -0
  181. package/dist/src/scan/scanports.d.ts.map +1 -0
  182. package/dist/src/scan/scanports.js +8 -0
  183. package/dist/src/scan/scanports.js.map +1 -0
  184. package/dist/src/scan/scanrender.d.ts +128 -0
  185. package/dist/src/scan/scanrender.d.ts.map +1 -0
  186. package/dist/src/scan/scanrender.js +527 -0
  187. package/dist/src/scan/scanrender.js.map +1 -0
  188. package/dist/src/scan/scanreport.d.ts +126 -0
  189. package/dist/src/scan/scanreport.d.ts.map +1 -0
  190. package/dist/src/scan/scanreport.js +289 -0
  191. package/dist/src/scan/scanreport.js.map +1 -0
  192. package/dist/src/scan/scanrun.d.ts +472 -0
  193. package/dist/src/scan/scanrun.d.ts.map +1 -0
  194. package/dist/src/scan/scanrun.js +1733 -0
  195. package/dist/src/scan/scanrun.js.map +1 -0
  196. package/dist/src/scan/scantree.d.ts +21 -0
  197. package/dist/src/scan/scantree.d.ts.map +1 -0
  198. package/dist/src/scan/scantree.js +297 -0
  199. package/dist/src/scan/scantree.js.map +1 -0
  200. package/dist/src/scan/scanverbs.d.ts +208 -0
  201. package/dist/src/scan/scanverbs.d.ts.map +1 -0
  202. package/dist/src/scan/scanverbs.js +689 -0
  203. package/dist/src/scan/scanverbs.js.map +1 -0
  204. package/dist/src/scan/stage2.d.ts +221 -0
  205. package/dist/src/scan/stage2.d.ts.map +1 -0
  206. package/dist/src/scan/stage2.js +617 -0
  207. package/dist/src/scan/stage2.js.map +1 -0
  208. package/dist/src/scan/stage2request.d.ts +125 -0
  209. package/dist/src/scan/stage2request.d.ts.map +1 -0
  210. package/dist/src/scan/stage2request.js +259 -0
  211. package/dist/src/scan/stage2request.js.map +1 -0
  212. package/dist/src/scan/textsniff.d.ts +14 -0
  213. package/dist/src/scan/textsniff.d.ts.map +1 -0
  214. package/dist/src/scan/textsniff.js +88 -0
  215. package/dist/src/scan/textsniff.js.map +1 -0
  216. package/dist/src/scan/unitcut.d.ts +135 -0
  217. package/dist/src/scan/unitcut.d.ts.map +1 -0
  218. package/dist/src/scan/unitcut.js +437 -0
  219. package/dist/src/scan/unitcut.js.map +1 -0
  220. package/dist/src/scan/unitcutstore.d.ts +155 -0
  221. package/dist/src/scan/unitcutstore.d.ts.map +1 -0
  222. package/dist/src/scan/unitcutstore.js +381 -0
  223. package/dist/src/scan/unitcutstore.js.map +1 -0
  224. package/dist/src/setupchecklist.d.ts +240 -0
  225. package/dist/src/setupchecklist.d.ts.map +1 -0
  226. package/dist/src/setupchecklist.js +407 -0
  227. package/dist/src/setupchecklist.js.map +1 -0
  228. package/package.json +7 -3
  229. package/skills/qcr-review/SKILL.md +24 -0
  230. package/skills/qcr-scan/SKILL.md +23 -0
  231. package/skills/qcr-setup/SKILL.md +18 -0
@@ -0,0 +1,472 @@
1
+ import type { LensTuningMap } from "../lenstuning.js";
2
+ import { type PassTier } from "../types.js";
3
+ import type { ScanConfig, ScanDepth } from "../reviewconfig.js";
4
+ import type { CaseRunner, Refusal, StateFs } from "./scanports.js";
5
+ import { type ReconcileResult } from "./findings.js";
6
+ import { type ExclusionReason, type ScanCasePlan, type ScanRate, type ScanSuggestion, type SkippedFile, type TreeFile, type UnreadableReason } from "./scan.js";
7
+ import { type Stage2StartResult, type StoredStage2Proposal } from "./stage2request.js";
8
+ import type { UnitCut } from "./unitcut.js";
9
+ import { type ScanLease } from "./scanlease.js";
10
+ import { RUN_FILE, RUN_VERSION, type ScanStopResult } from "./scanreport.js";
11
+ /**
12
+ * Why a lens's answer is not a reading of its case, or null when it is. A
13
+ * lens can answer NONE without opening a file; such an answer must not
14
+ * record the files as read in the ledger, nor price the lens.
15
+ *
16
+ * `reads` is what the case runner saw the lens's file-read calls name
17
+ * (`CaseOutcome.reads`); absent means the runner cannot tell, and unknown is
18
+ * never judged as zero. A reading needs at least one focus file opened at
19
+ * its path under the tree root. The runner reports each read resolved to the
20
+ * file it opened, so a relative read counts exactly when it resolved inside
21
+ * the tree: the lens runs outside the tree (first-party cwd), and a relative
22
+ * `api/x.py` opened the app root's copy — another repository — which is no
23
+ * reading of the case. A read left relative (a runner that cannot resolve)
24
+ * is never credited, and a read of some other file (a CLAUDE.md, a caller)
25
+ * is context, not the case. Pure.
26
+ */
27
+ export declare function unreadFocus(reads: readonly string[] | undefined, focus: readonly string[], root: string): string | null;
28
+ /**
29
+ * The focus files a lens opened, by the same reading `unreadFocus` makes: a
30
+ * read resolved inside the tree root naming the file. Null when the runner
31
+ * cannot tell (`reads` absent). A focus file the lens never opened is no
32
+ * reading of THAT file, whatever it read of the others: it gets no ledger
33
+ * row, so it is read again and a reconcile never settles its findings fixed
34
+ * from a reading that never happened. Pure.
35
+ */
36
+ export declare function openedFocus(reads: readonly string[] | undefined, focus: readonly string[], root: string): Set<string> | null;
37
+ /** The repository at one sha, materialised where the lenses read it. */
38
+ export interface ScanTree {
39
+ sha: string;
40
+ /** Absolute path of the materialised tree — what the lens is told. */
41
+ root: string;
42
+ files: TreeFile[];
43
+ read(path: string): string | null;
44
+ lines(path: string): number | null;
45
+ /** Why `read` answers null for a listed file (`binary`, `too-big`), or
46
+ * null when it reads. Optional: a tree without it reports `unreadable`. */
47
+ whyUnreadable?(path: string): UnreadableReason | null;
48
+ }
49
+ /** The reviewed checkout as a source of trees (READ-ONLY). */
50
+ export interface ScanSource {
51
+ readonly location: string;
52
+ /** The full commit sha `ref` names, or null (unknown ref, no checkout). */
53
+ resolve(ref: string): string | null;
54
+ /** The tree at `sha`, materialised; earlier trees other than `keep` may be
55
+ * removed to bound the disk. */
56
+ open(sha: string, keep: readonly string[]): {
57
+ ok: true;
58
+ tree: ScanTree;
59
+ } | {
60
+ ok: false;
61
+ reason: string;
62
+ };
63
+ /** The files (and content hashes) at `sha`, listed without materialising
64
+ * anything, or null when git cannot list them — a delta's baseline. */
65
+ list(sha: string): TreeFile[] | null;
66
+ }
67
+ /** The resolved settings a scan runs with: `config.toml [scan]` under the
68
+ * profile's `[scan]` (the profile wins). The validator — the skeptic — has
69
+ * no tier of its own: it runs at the tier of the lens it judges. */
70
+ export interface ScanSettings {
71
+ scan: ScanConfig;
72
+ /** The profile's per-lens tuning — which deep lenses stage 2 may run, at
73
+ * which tiers and effort. */
74
+ lenses?: LensTuningMap;
75
+ /** `[models] risk_passes` — built at `sol-high` only. */
76
+ riskPasses?: readonly string[];
77
+ }
78
+ export interface ScanPorts {
79
+ state: StateFs;
80
+ clock: () => Date;
81
+ /** Runs one case as background subagents, from the scan agent build. */
82
+ cases: CaseRunner;
83
+ source: ScanSource;
84
+ /** The SAVED unit cut (the engine's), or why there is none. */
85
+ savedCut: () => {
86
+ ok: true;
87
+ cut: UnitCut;
88
+ } | Refusal;
89
+ settings: () => {
90
+ ok: true;
91
+ settings: ScanSettings;
92
+ } | Refusal;
93
+ /** (Re)build the scan agents where `cases` reads them. */
94
+ buildAgents: (settings: ScanSettings) => {
95
+ ok: true;
96
+ } | Refusal;
97
+ /** After the run's reconcile: close the tickets of promoted findings it
98
+ * found fixed (triage.ts `closeFixed`). Absent: nothing closes. */
99
+ closeFixedTickets?: () => Promise<{
100
+ closed: readonly unknown[];
101
+ problems: readonly string[];
102
+ }>;
103
+ /** The driver lease shared with other processes over this state home
104
+ * (scanlease.ts). Absent: this runner knows only its own run, and any
105
+ * other run recorded as running reads as interrupted. */
106
+ lease?: ScanLease;
107
+ log?: (line: string) => void;
108
+ }
109
+ export { RUN_FILE, RUN_VERSION };
110
+ export declare const SUGGESTIONS_FILE = "scan/suggestions.json";
111
+ /** Under the state home: every case's event stream, one directory per run
112
+ * (`caserunner.ts` `transcriptFile`). */
113
+ export declare const SCAN_TRANSCRIPTS_DIR = "scan/transcripts";
114
+ /** Summaries of finished runs kept beside the current one. */
115
+ export declare const RUN_HISTORY = 20;
116
+ export type ScanMode = "calibration" | "stage1" | "delta" | "stage2";
117
+ export type ScanCaseStatus = "pending" | "running" | "done" | "failed" | "stopped" | "skipped";
118
+ export type ScanRunState = "running" | "complete" | "partial" | "stopped" | "capped";
119
+ export interface ScanCaseState {
120
+ id: string;
121
+ unit: string;
122
+ part: number;
123
+ parts: number;
124
+ files: string[];
125
+ /** A file read in line ranges: the range this case reports inside. */
126
+ ranges?: Array<{
127
+ path: string;
128
+ start: number;
129
+ end: number;
130
+ total: number;
131
+ }>;
132
+ lines: number;
133
+ estimate_usd: number | null;
134
+ status: ScanCaseStatus;
135
+ /** Stage 1 plus the validator; null when the runner could not price it. */
136
+ cost_usd: number | null;
137
+ findings: number;
138
+ /** Findings the validator doubted — kept, marked "may not be valid". */
139
+ doubted: number;
140
+ /** Findings the skeptic confirmed / found likely (absent on records
141
+ * written before the tiers). */
142
+ confirmed?: number;
143
+ likely?: number;
144
+ /** Answer items that could not be read or anchored. */
145
+ dropped: number;
146
+ /** The lens's file-read calls, counted; absent when the runner could not
147
+ * tell. */
148
+ reads?: number;
149
+ /** Focus files the lens never opened — no coverage, read again. Absent
150
+ * when it opened every one, or the runner could not tell. */
151
+ unopened?: string[];
152
+ /** The case's and its validator's event streams, relative to
153
+ * `SCAN_TRANSCRIPTS_DIR`; absent when none was kept. */
154
+ transcript?: string;
155
+ validator_transcript?: string;
156
+ suggestions: ScanSuggestion[];
157
+ error: string | null;
158
+ started_at: string | null;
159
+ finished_at: string | null;
160
+ /** Stage 2: the row's lens, tier, reason and every unit it spans. */
161
+ lens?: string;
162
+ tier?: PassTier;
163
+ reason?: string;
164
+ units?: string[];
165
+ }
166
+ export interface ScanRun {
167
+ id: string;
168
+ mode: ScanMode;
169
+ sha: string;
170
+ plan_key: string;
171
+ started_at: string;
172
+ finished_at: string | null;
173
+ state: ScanRunState;
174
+ /** The hard stop: the approved estimate, or the calibration cap. */
175
+ cap_usd: number;
176
+ estimate_usd: number | null;
177
+ /** Priced cost, plus the estimate of every case that finished unpriced. */
178
+ spent_usd: number;
179
+ unpriced_cases: number;
180
+ settings: {
181
+ tier: PassTier;
182
+ effort: string;
183
+ validator: boolean;
184
+ validate_tier: PassTier | null;
185
+ /** `"deep"` for a deep run; absent = standard. */
186
+ depth?: ScanDepth;
187
+ };
188
+ cases: ScanCaseState[];
189
+ problems: string[];
190
+ /** What the run's end did to the stored findings; null until it
191
+ * ran, or when it could not. */
192
+ matching?: ReconcileResult | null;
193
+ /** Tickets of promoted findings this run's end closed as fixed. */
194
+ tickets_closed?: number;
195
+ }
196
+ export interface ScanRunSummary {
197
+ id: string;
198
+ mode: ScanMode;
199
+ sha: string;
200
+ state: ScanRunState | "interrupted";
201
+ started_at: string;
202
+ finished_at: string | null;
203
+ cases_done: number;
204
+ cases: number;
205
+ findings: number;
206
+ spent_usd: number;
207
+ }
208
+ export interface RunFile {
209
+ version: number;
210
+ current: ScanRun | null;
211
+ history: ScanRunSummary[];
212
+ }
213
+ export interface StoredSuggestion extends ScanSuggestion {
214
+ unit: string;
215
+ sha: string;
216
+ run: string;
217
+ at: string;
218
+ }
219
+ export interface ScanPreview {
220
+ key: string;
221
+ mode: ScanMode;
222
+ sha: string;
223
+ cases: Array<ScanCasePlan & {
224
+ estimate_usd: number | null;
225
+ }>;
226
+ files: number;
227
+ lines: number;
228
+ /** Null for a calibration run: that is what it measures. */
229
+ estimate_usd: number | null;
230
+ /** The run would stop hard here. */
231
+ cap_usd: number;
232
+ rate: ScanRate | null;
233
+ /** The run's depth (`[scan] depth`). */
234
+ depth: ScanDepth;
235
+ /** The rate stands on readings at the other depth: nothing at this depth
236
+ * is priced at these settings yet. */
237
+ rate_across_depth: boolean;
238
+ /** Priced cases the rate stands on, and how many calibration wants. */
239
+ calibration: {
240
+ measured: number;
241
+ wanted: number;
242
+ };
243
+ /** Stage-1 cases a calibration run leaves for the next one (0 for any
244
+ * other run, which reads every case it plans). */
245
+ remaining_cases: number;
246
+ excluded: Record<ExclusionReason, number>;
247
+ covered: number;
248
+ unassigned: string[];
249
+ unreadable: number;
250
+ /** The unreadable files by path and reason — `skipped: binary` is said,
251
+ * never silently absent. */
252
+ skipped: SkippedFile[];
253
+ settings: ScanRun["settings"] & {
254
+ exclude: string[];
255
+ concurrency: number;
256
+ };
257
+ /** A delta: the last scan's sha it compares against, and how many of its
258
+ * files are unchanged since but still owed a complete reading (never read,
259
+ * cut short, unreadable before). Null for a full preview. `owed_shallow`
260
+ * (a deep delta only): how many of those a complete standard reading covers
261
+ * at this content — owed only because no deep reading does. */
262
+ delta: {
263
+ since: string;
264
+ owed: number;
265
+ owed_shallow?: number;
266
+ } | null;
267
+ /** Set when there is nothing to read but the findings still owe a
268
+ * reconcile: why. The run reads no case and only settles them. */
269
+ reconcile_only?: string;
270
+ /** Why a start would be refused whatever the key. */
271
+ blockers: string[];
272
+ }
273
+ export interface ScanStatus {
274
+ ok: boolean;
275
+ problems: string[];
276
+ run: (ScanRun & {
277
+ display: ScanRunState | "interrupted";
278
+ }) | null;
279
+ active: boolean;
280
+ history: ScanRunSummary[];
281
+ /** `files`: distinct paths stage 1 read; `deep_files`: distinct file × lens
282
+ * pairs stage 2 read. */
283
+ ledger: {
284
+ files: number;
285
+ deep_files: number;
286
+ cost_usd: number;
287
+ } | null;
288
+ }
289
+ /** What `proposeStage2` answers. */
290
+ export type Stage2Proposal = StoredStage2Proposal;
291
+ /** Why a candidate the skeptic's answer never mentioned is doubtful. */
292
+ export declare const UNMENTIONED_REASON = "the skeptic listed it neither as a survivor nor under DOUBTED \u2014 kept, not upheld";
293
+ /** The run record, read totally: an unreadable file is the error beside an
294
+ * empty record, never a throw (the portrait and the re-tune read it too). */
295
+ export declare function readRunFile(state: StateFs): {
296
+ file: RunFile;
297
+ error: string | null;
298
+ };
299
+ export declare function runSummary(run: ScanRun, state: ScanRunSummary["state"]): ScanRunSummary;
300
+ /**
301
+ * The scan runs that finished — complete, partial, stopped or capped —
302
+ * newest first (what a portrait refresh and a re-tune stand on). A
303
+ * run still `running` in the file is either live or was interrupted; neither
304
+ * is a scan whose findings are settled.
305
+ */
306
+ export declare function finishedRuns(state: StateFs): {
307
+ runs: ScanRunSummary[];
308
+ error: string | null;
309
+ };
310
+ export declare class ScanRunner {
311
+ private readonly ports;
312
+ private active;
313
+ private starting;
314
+ /** The commit a start still planning has opened: its tree is kept, like
315
+ * the active run's, from a preview or proposal planned meanwhile. */
316
+ private startingSha;
317
+ private consuming;
318
+ /** Renews the driver lease from a start's claim to its run's end. */
319
+ private renewTimer;
320
+ /** The run the lease is renewed for (null while a start plans). */
321
+ private leaseRun;
322
+ /** Runs whose driver lease was lost: stopped, and never written again —
323
+ * the run record is the new holder's. */
324
+ private readonly fenced;
325
+ private readonly ledger;
326
+ private readonly findings;
327
+ constructor(ports: ScanPorts);
328
+ private load;
329
+ private store;
330
+ private summary;
331
+ /** What every plan reads first: the settings, the saved cut, the commit
332
+ * `ref` names (default HEAD), its tree and the ledger. Opening a tree
333
+ * prunes the others, never the active run's nor a planning start's;
334
+ * `claim` (a start planning) marks this one as the starting start's. */
335
+ private prerequisites;
336
+ private plan;
337
+ /** Why a run that reads nothing must still run, or null: an open finding
338
+ * on a file the tree no longer holds (outside the pending match question,
339
+ * which waits for the companion's answer), or a last run that ended before
340
+ * its own reconcile (interrupted, or its reconcile failed). */
341
+ private reconcileOwed;
342
+ /** What a scan would read and cost now at `sha` (default the checkout's
343
+ * HEAD), and the key a start must quote. */
344
+ preview(args?: {
345
+ sha?: string;
346
+ delta?: boolean;
347
+ }): Promise<{
348
+ ok: true;
349
+ preview: ScanPreview;
350
+ } | Refusal>;
351
+ /** Start the previewed run in the background. Returns once it is recorded. */
352
+ start(args: {
353
+ key?: unknown;
354
+ sha?: string;
355
+ delta?: boolean;
356
+ }): Promise<{
357
+ ok: true;
358
+ run: ScanRun;
359
+ } | Refusal>;
360
+ /** Why no start may begin now: a run is active, or another start is still
361
+ * planning. Two starts in parallel (a model may issue tool calls
362
+ * concurrently) must not both pass the active check while the first is
363
+ * still planning: that would run — and pay for — the same scan twice. */
364
+ private refuseBusy;
365
+ /** Hold the starting slot across a start's planning and launch. */
366
+ private holdingStart;
367
+ /** Still holding the lease a start claimed, right before it launches? A
368
+ * planning that blocked past the lease's life may have lost it. */
369
+ private leaseLost;
370
+ /** Renew the lease for `run` every LEASE_RENEW_MS until stopRenewing. */
371
+ private renewLease;
372
+ private stopRenewing;
373
+ /** One renewal. A lease found lost (this process was suspended past its
374
+ * life, and another took it over) stops the run it was held for: its
375
+ * in-flight cases are aborted and it writes the run record no more. */
376
+ private renewTick;
377
+ private startPlanned;
378
+ /** Record a new run as current and drive its cases in the background. */
379
+ private launch;
380
+ /** Hold the driver lease for `run` while it is driven: renewed on the
381
+ * start's timer, given up when it ends. */
382
+ private holdLease;
383
+ /** The latest run, the history and the ledger's totals. */
384
+ status(): ScanStatus;
385
+ /** Stop the running scan: in-flight cases are aborted, pending ones never
386
+ * start; what finished stays in the ledger, so a later start resumes. */
387
+ stop(): {
388
+ ok: true;
389
+ id: string;
390
+ } | Refusal;
391
+ /** Resolves when no scan is running (tests; a clean shutdown). */
392
+ idle(): Promise<void>;
393
+ /** Stage 1's stored deep-lens suggestions (stage 2's input). */
394
+ suggestions(): {
395
+ suggestions: StoredSuggestion[];
396
+ error: string | null;
397
+ };
398
+ /** The latest stored stage-2 proposal, none, or why it cannot be read. */
399
+ stage2Proposal(): {
400
+ proposal: StoredStage2Proposal | null;
401
+ error: string | null;
402
+ };
403
+ /** Plan the companion's rows at `deep` (true / false), or at `[scan] depth`
404
+ * when it is undefined; the settings returned carry that depth, so the
405
+ * build and the run are at it too. */
406
+ private planStage2;
407
+ /**
408
+ * Plan and STORE a stage-2 proposal from the companion's rows: checked,
409
+ * tests paired, priced from the ledger, fitted to `budget_usd` when given.
410
+ * `deep` (true / false) sets its depth, else `[scan] depth`; a deep one adds
411
+ * the floor after the companion's rows, which may then be none.
412
+ * Runs nothing. The stored proposal replaces the previous one — it is what
413
+ * the TUI shows and what a start's key must name.
414
+ */
415
+ proposeStage2(args: {
416
+ rows?: unknown;
417
+ budget_usd?: unknown;
418
+ sha?: string;
419
+ deep?: unknown;
420
+ }): Promise<{
421
+ ok: true;
422
+ proposal: Stage2Proposal;
423
+ } | Refusal>;
424
+ /**
425
+ * Start the stored stage-2 proposal whose key is quoted — on the
426
+ * operator's word (the companion) or their click (the TUI, through
427
+ * `consumeStage2Request`). Re-planned first: a proposal that moved since it
428
+ * was shown is refused. Hard stop at its estimate — or, when `rows` keeps
429
+ * only some of its runnable rows (the TUI's plan pane), exactly
430
+ * those rows, stopped hard at their total.
431
+ */
432
+ startStage2(args: {
433
+ key?: unknown;
434
+ rows?: unknown;
435
+ }, onAccepted?: (run: ScanRun) => void): Promise<{
436
+ ok: true;
437
+ run: ScanRun;
438
+ } | Refusal>;
439
+ private startStage2Planned;
440
+ /**
441
+ * Answer the TUI's start request, if there is one not yet answered: start
442
+ * the proposal it names and write the outcome to `STAGE2_RESULT_FILE`.
443
+ * Resolves null when there is nothing to answer. The companion's scan belt
444
+ * polls this; one request is answered once.
445
+ */
446
+ consumeStage2Request(): Promise<Stage2StartResult | null>;
447
+ /**
448
+ * Answer the TUI's stop request (scanreport.ts), if there is one
449
+ * not yet answered: stop the run it names when that is the run in flight
450
+ * here, and write the outcome to `SCAN_STOP_RESULT_FILE`. A request naming
451
+ * another run — or arriving when nothing runs in this companion (a run
452
+ * recorded as running that nobody is driving is already interrupted) — is
453
+ * refused, never aimed at whatever runs now. Answered once.
454
+ */
455
+ consumeStopRequest(): ScanStopResult | null;
456
+ private drive;
457
+ /** One case, start to finish. Resolves with what it cost (its estimate
458
+ * when the runner could not price it); a runner failure is an outcome, so
459
+ * it rejects only when the run record cannot be written. */
460
+ private runCase;
461
+ private runOne;
462
+ private storeSuggestions;
463
+ /** The run's end, whatever ended it: what re-read files no longer report
464
+ * is fixed, or handed to the companion (findings.ts reconcile). Only
465
+ * FINISHED cases wrote ledger rows, so only their reading counts. */
466
+ private reconcile;
467
+ /** A promoted finding the reconcile fixed has its ticket closed with the
468
+ * run's sha; a refused close is a problem on the run, retried next time. */
469
+ private closeFixedTickets;
470
+ private settle;
471
+ }
472
+ //# sourceMappingURL=scanrun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanrun.d.ts","sourceRoot":"","sources":["../../../src/scan/scanrun.ts"],"names":[],"mappings":"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"}