bb-cc-lite 0.1.11 → 0.1.13

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 (56) hide show
  1. package/README.md +171 -71
  2. package/assets/statusline-coach-guard-demo.gif +0 -0
  3. package/dist/audit.d.ts +47 -0
  4. package/dist/audit.js +427 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/baseline-builder.d.ts +5 -0
  7. package/dist/baseline-builder.js +68 -31
  8. package/dist/baseline-builder.js.map +1 -1
  9. package/dist/baseline.d.ts +7 -2
  10. package/dist/baseline.js +53 -3
  11. package/dist/baseline.js.map +1 -1
  12. package/dist/cache-efficiency.d.ts +3 -0
  13. package/dist/cache-efficiency.js +38 -0
  14. package/dist/cache-efficiency.js.map +1 -0
  15. package/dist/cli.js +42 -0
  16. package/dist/cli.js.map +1 -1
  17. package/dist/doctor.js +10 -0
  18. package/dist/doctor.js.map +1 -1
  19. package/dist/event-store-persistence.js +21 -0
  20. package/dist/event-store-persistence.js.map +1 -1
  21. package/dist/event-store-queries.d.ts +3 -1
  22. package/dist/event-store-queries.js +48 -1
  23. package/dist/event-store-queries.js.map +1 -1
  24. package/dist/feedback-outcomes.js +6 -0
  25. package/dist/feedback-outcomes.js.map +1 -1
  26. package/dist/feedback-policy.d.ts +3 -1
  27. package/dist/feedback-policy.js +99 -0
  28. package/dist/feedback-policy.js.map +1 -1
  29. package/dist/file-identity.d.ts +8 -0
  30. package/dist/file-identity.js +43 -0
  31. package/dist/file-identity.js.map +1 -0
  32. package/dist/historical-replay.d.ts +12 -0
  33. package/dist/historical-replay.js +139 -43
  34. package/dist/historical-replay.js.map +1 -1
  35. package/dist/hook-control.js +7 -2
  36. package/dist/hook-control.js.map +1 -1
  37. package/dist/hook-payload.js +13 -4
  38. package/dist/hook-payload.js.map +1 -1
  39. package/dist/hook-summary.d.ts +2 -0
  40. package/dist/hook-summary.js +22 -1
  41. package/dist/hook-summary.js.map +1 -1
  42. package/dist/recovery-stats.d.ts +27 -1
  43. package/dist/recovery-stats.js +128 -5
  44. package/dist/recovery-stats.js.map +1 -1
  45. package/dist/settings.js +2 -1
  46. package/dist/settings.js.map +1 -1
  47. package/dist/signals.js +192 -19
  48. package/dist/signals.js.map +1 -1
  49. package/dist/status-input.js +15 -15
  50. package/dist/transcript.d.ts +1 -0
  51. package/dist/transcript.js +112 -1
  52. package/dist/transcript.js.map +1 -1
  53. package/dist/types.d.ts +57 -0
  54. package/dist/why.js +2 -0
  55. package/dist/why.js.map +1 -1
  56. package/package.json +1 -1
package/dist/audit.js ADDED
@@ -0,0 +1,427 @@
1
+ import { readdir, stat } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import { asRecord, numberField } from "./status-input.js";
5
+ import { parseTranscriptLines } from "./transcript.js";
6
+ import { readTranscriptTail } from "./transcript-reader.js";
7
+ const DEFAULT_RECENT_SESSIONS = 30;
8
+ const DEFAULT_MAX_BYTES_PER_TRANSCRIPT = 1024 * 1024;
9
+ const MAX_FORMATTED_FINDINGS = 8;
10
+ const MAX_RETRY_DURATION_MS = 5 * 60_000;
11
+ const MAX_RETRY_COST_USD = 0.25;
12
+ const RESET = "\u001b[0m";
13
+ const COLORS = {
14
+ title: "\u001b[1m",
15
+ Healthy: "\u001b[32m",
16
+ Careful: "\u001b[33m",
17
+ Stop: "\u001b[1;31m",
18
+ high: "\u001b[1;31m",
19
+ medium: "\u001b[33m",
20
+ low: "\u001b[2m"
21
+ };
22
+ export async function runAudit(options = {}) {
23
+ const recentLimit = normalizedRecentLimit(options.recent);
24
+ const candidates = options.transcriptPath
25
+ ? await directTranscriptCandidate(options.transcriptPath)
26
+ : options.allProjects
27
+ ? await allProjectTranscriptCandidates(options.homeDir, recentLimit)
28
+ : await projectTranscriptCandidates(options.homeDir, options.projectDir, recentLimit);
29
+ const findings = [];
30
+ let unreadableTranscripts = 0;
31
+ for (const [index, candidate] of candidates.entries()) {
32
+ const tail = await readTranscriptTail(candidate.path, {
33
+ maxBytes: options.maxBytesPerTranscript ?? DEFAULT_MAX_BYTES_PER_TRANSCRIPT
34
+ });
35
+ if (!tail.pathReadable) {
36
+ unreadableTranscripts += 1;
37
+ continue;
38
+ }
39
+ const summary = parseTranscriptLines(tail.lines, tail.bytesRead);
40
+ if (!summary.pathReadable) {
41
+ unreadableTranscripts += 1;
42
+ continue;
43
+ }
44
+ const finding = withSavingsEstimate(findingFromSummary(summary, index + 1), summary, transcriptMeasurementFromLines(tail.lines));
45
+ if (finding) {
46
+ findings.push(finding);
47
+ }
48
+ }
49
+ const sessionsWithFindings = new Set(findings.map((finding) => finding.session)).size;
50
+ const repeatedRetriesSpotted = findings.reduce((total, finding) => total + (finding.repeatedRetries || 0), 0);
51
+ const estimatedSavings = savingsEstimate(findings);
52
+ const confidence = reportConfidence(candidates.length - unreadableTranscripts, findings);
53
+ return {
54
+ scope: auditScope(options),
55
+ recentLimit,
56
+ sessionsScanned: candidates.length - unreadableTranscripts,
57
+ transcriptsFound: candidates.length,
58
+ unreadableTranscripts,
59
+ sessionsWithFindings,
60
+ findings: sortFindings(findings),
61
+ repeatedRetriesSpotted,
62
+ estimatedSavings,
63
+ reportConfidence: confidence.confidence,
64
+ reportConfidenceReason: confidence.reason
65
+ };
66
+ }
67
+ export function formatAuditReport(report, options = {}) {
68
+ const color = options.color === true;
69
+ const lines = [];
70
+ const scopeLabel = report.scope === "project"
71
+ ? `project transcripts, newest ${report.recentLimit}`
72
+ : report.scope === "all-projects"
73
+ ? `all local project transcripts, newest ${report.recentLimit}`
74
+ : "provided transcript";
75
+ const summaryLines = [
76
+ colorize("bb retrospective audit", "title", color),
77
+ `Scope: ${scopeLabel}`,
78
+ `Scanned: ${formatCount(report.sessionsScanned, "Claude Code session")}`
79
+ ];
80
+ if (report.unreadableTranscripts > 0) {
81
+ summaryLines.push(`Skipped: ${formatCount(report.unreadableTranscripts, "unreadable transcript")}`);
82
+ }
83
+ summaryLines.push(`Would have helped: ${formatCount(report.sessionsWithFindings, "session")}`);
84
+ lines.push(...box(summaryLines));
85
+ lines.push("");
86
+ if (report.findings.length === 0) {
87
+ lines.push(...box(["Findings", "none in the scanned transcript window."]));
88
+ }
89
+ else {
90
+ lines.push(...box(["Findings"]));
91
+ lines.push("State Conf Evidence");
92
+ for (const finding of report.findings.slice(0, MAX_FORMATTED_FINDINGS)) {
93
+ const state = colorize(finding.state.padEnd(7), finding.state, color);
94
+ const confidence = colorize(finding.confidence.padEnd(7), finding.confidence, color);
95
+ lines.push(`${state} ${confidence} session ${finding.session}: ${finding.evidence}`);
96
+ lines.push(` do: ${finding.action}`);
97
+ }
98
+ if (report.findings.length > MAX_FORMATTED_FINDINGS) {
99
+ lines.push(` plus ${report.findings.length - MAX_FORMATTED_FINDINGS} more derived findings`);
100
+ }
101
+ }
102
+ lines.push("");
103
+ const evidenceLines = [`Repeated retries spotted: ${report.repeatedRetriesSpotted}`];
104
+ if (report.estimatedSavings.measured) {
105
+ evidenceLines.push(`Measured duplicate retry cost/time: ${report.estimatedSavings.durationMinutes} min, ${formatCurrency(report.estimatedSavings.costUsd)}`);
106
+ }
107
+ else if (report.repeatedRetriesSpotted > 0) {
108
+ evidenceLines.push("Cost/time: not estimated; transcripts did not expose usable cost/duration metadata");
109
+ }
110
+ evidenceLines.push(`Report confidence: ${report.reportConfidence} - ${report.reportConfidenceReason}`);
111
+ lines.push(...box(evidenceLines));
112
+ lines.push("");
113
+ lines.push("Privacy: derived metadata only; no prompts, tool output, command text, file contents, raw paths, or raw session ids printed/stored.");
114
+ lines.push("Install live protection:");
115
+ lines.push("npx --yes bb-cc-lite install --scope local");
116
+ return lines.join("\n");
117
+ }
118
+ function findingFromSummary(summary, session) {
119
+ const episodeFinding = findingFromEpisodes(summary.failureEpisodes || [], session);
120
+ if (episodeFinding) {
121
+ return episodeFinding;
122
+ }
123
+ if (summary.editTestLoopFailures >= 2) {
124
+ return {
125
+ session,
126
+ state: "Stop",
127
+ confidence: "high",
128
+ reasonCode: "edit_test_retry_loop",
129
+ evidence: `edit-test loop failed ${summary.editTestLoopFailures}x`,
130
+ action: "inspect the failing test manually, then ask Claude for one targeted fix",
131
+ repeatedRetries: Math.max(0, summary.editTestLoopFailures - 1)
132
+ };
133
+ }
134
+ if (summary.hasUnvalidatedEdits) {
135
+ return {
136
+ session,
137
+ state: "Careful",
138
+ confidence: "medium",
139
+ reasonCode: "edit_without_validation",
140
+ evidence: "edits were left without validation",
141
+ action: "ask Claude to run the smallest relevant check"
142
+ };
143
+ }
144
+ if (isBusyWithoutProgress(summary)) {
145
+ return {
146
+ session,
147
+ state: "Careful",
148
+ confidence: "medium",
149
+ reasonCode: "busy_no_observed_progress",
150
+ evidence: `${summary.toolCalls} tool calls, no check or recovery seen`,
151
+ action: "pause and ask Claude what changed"
152
+ };
153
+ }
154
+ if (summary.compactionEvents > 0 && summary.postCompactionActivity === 0) {
155
+ return {
156
+ session,
157
+ state: "Careful",
158
+ confidence: "medium",
159
+ reasonCode: "compaction_goal_preservation",
160
+ evidence: "compaction event ended the scanned window",
161
+ action: "ask Claude to restate current goal and next 3 steps"
162
+ };
163
+ }
164
+ return undefined;
165
+ }
166
+ function withSavingsEstimate(finding, summary, measurement) {
167
+ if (!finding) {
168
+ return undefined;
169
+ }
170
+ const repeatedRetries = finding.repeatedRetries || 0;
171
+ if (repeatedRetries <= 0) {
172
+ return {
173
+ ...finding,
174
+ estimatedDurationMs: 0,
175
+ estimatedCostUsd: 0,
176
+ savingsEstimateSource: "fallback"
177
+ };
178
+ }
179
+ const toolCalls = Math.max(1, summary.toolCalls);
180
+ const measuredDurationPerRetry = measurement.durationMs === undefined ? undefined : clamp(measurement.durationMs / toolCalls, 0, MAX_RETRY_DURATION_MS);
181
+ const measuredCostPerRetry = measurement.costUsd === undefined ? undefined : clamp(measurement.costUsd / toolCalls, 0, MAX_RETRY_COST_USD);
182
+ const hasMeasuredSavings = measuredDurationPerRetry !== undefined || measuredCostPerRetry !== undefined;
183
+ return {
184
+ ...finding,
185
+ estimatedDurationMs: measuredDurationPerRetry === undefined ? undefined : repeatedRetries * measuredDurationPerRetry,
186
+ estimatedCostUsd: measuredCostPerRetry === undefined ? undefined : repeatedRetries * measuredCostPerRetry,
187
+ savingsEstimateSource: hasMeasuredSavings ? "measured" : "fallback"
188
+ };
189
+ }
190
+ function findingFromEpisodes(episodes, session) {
191
+ const risky = episodes
192
+ .filter((episode) => episode.attemptCount >= 2 || episode.blindRetryFailureCount >= 2)
193
+ .sort((left, right) => episodeScore(right) - episodeScore(left))[0];
194
+ if (!risky) {
195
+ return undefined;
196
+ }
197
+ const state = risky.attemptCount >= 3 || risky.blindRetryFailureCount >= 3 ? "Stop" : "Careful";
198
+ const confidence = state === "Stop" && (risky.blindRetryFailureCount >= 3 || risky.activeEnded) ? "high" : state === "Stop" ? "medium" : "medium";
199
+ const blindRetry = risky.blindRetryFailureCount >= risky.attemptCount || risky.blindRetryFailureCount >= 2;
200
+ return {
201
+ session,
202
+ state,
203
+ confidence,
204
+ reasonCode: state === "Stop" ? (blindRetry ? "blind_retry_loop" : "repeated_tool_failure") : blindRetry ? "blind_retry" : "tool_failure_repeated",
205
+ evidence: episodeEvidence(risky, blindRetry),
206
+ action: state === "Stop" ? "stop and inspect first failure" : "pause and inspect first failure before another retry",
207
+ repeatedRetries: Math.max(0, Math.max(risky.attemptCount, risky.blindRetryFailureCount) - 1)
208
+ };
209
+ }
210
+ function episodeEvidence(episode, blindRetry) {
211
+ const count = Math.max(episode.attemptCount, episode.blindRetryFailureCount);
212
+ if (blindRetry) {
213
+ return `same ${episode.label} failed ${formatFailureCount(count)} without a fix`;
214
+ }
215
+ if (episode.recovered) {
216
+ return `${episode.label} failed ${formatFailureCount(count)} before recovery`;
217
+ }
218
+ return `${episode.label} failed ${formatFailureCount(count)} without recovery`;
219
+ }
220
+ function episodeScore(episode) {
221
+ const count = Math.max(episode.attemptCount, episode.blindRetryFailureCount);
222
+ const stateScore = count >= 3 ? 100 : 50;
223
+ const activeScore = episode.activeEnded ? 10 : 0;
224
+ const blindScore = episode.blindRetryFailureCount >= 2 ? 5 : 0;
225
+ return stateScore + activeScore + blindScore + count;
226
+ }
227
+ function isBusyWithoutProgress(summary) {
228
+ const nonReadToolCalls = Math.max(0, summary.toolCalls - summary.readToolCalls);
229
+ return (summary.toolCalls >= 8 &&
230
+ nonReadToolCalls >= 6 &&
231
+ summary.failedToolResults === 0 &&
232
+ !summary.hasUnvalidatedEdits &&
233
+ !hasObservedProgress(summary) &&
234
+ !isReadHeavy(summary));
235
+ }
236
+ function isReadHeavy(summary) {
237
+ return (summary.toolCalls >= 4 &&
238
+ summary.readToolCalls >= 3 &&
239
+ summary.readToolCalls / Math.max(1, summary.toolCalls) >= 0.6 &&
240
+ summary.failedToolResults === 0 &&
241
+ !summary.hasUnvalidatedEdits);
242
+ }
243
+ function hasObservedProgress(summary) {
244
+ return Boolean(summary.observedProgress ||
245
+ summary.validationRecovered ||
246
+ (summary.validationSuccesses || 0) > 0 ||
247
+ (summary.toolRecoveryEvents || 0) > 0);
248
+ }
249
+ async function directTranscriptCandidate(path) {
250
+ const mtimeMs = await readableFileMtimeMs(path);
251
+ return mtimeMs === undefined ? [] : [{ path, mtimeMs }];
252
+ }
253
+ async function projectTranscriptCandidates(homeDir = homedir(), projectDir = process.cwd(), recentLimit = DEFAULT_RECENT_SESSIONS) {
254
+ const root = join(resolve(homeDir), ".claude", "projects", claudeProjectDirectoryName(projectDir));
255
+ return (await listTranscriptCandidates(root))
256
+ .sort((left, right) => right.mtimeMs - left.mtimeMs || left.path.localeCompare(right.path))
257
+ .slice(0, recentLimit);
258
+ }
259
+ async function allProjectTranscriptCandidates(homeDir = homedir(), recentLimit = DEFAULT_RECENT_SESSIONS) {
260
+ const root = join(resolve(homeDir), ".claude", "projects");
261
+ return (await listTranscriptCandidates(root))
262
+ .sort((left, right) => right.mtimeMs - left.mtimeMs || left.path.localeCompare(right.path))
263
+ .slice(0, recentLimit);
264
+ }
265
+ async function listTranscriptCandidates(root) {
266
+ const candidates = [];
267
+ const pending = [root];
268
+ while (pending.length > 0) {
269
+ const current = pending.pop();
270
+ let entries;
271
+ try {
272
+ entries = await readdir(current, { withFileTypes: true });
273
+ }
274
+ catch {
275
+ continue;
276
+ }
277
+ for (const entry of entries) {
278
+ const child = join(current, entry.name);
279
+ if (entry.isDirectory()) {
280
+ pending.push(child);
281
+ }
282
+ else if (entry.isFile() && entry.name.endsWith(".jsonl")) {
283
+ const mtimeMs = await readableFileMtimeMs(child);
284
+ if (mtimeMs !== undefined) {
285
+ candidates.push({ path: child, mtimeMs });
286
+ }
287
+ }
288
+ }
289
+ }
290
+ return candidates;
291
+ }
292
+ async function readableFileMtimeMs(path) {
293
+ try {
294
+ return (await stat(path)).mtimeMs;
295
+ }
296
+ catch {
297
+ return undefined;
298
+ }
299
+ }
300
+ function transcriptMeasurementFromLines(lines) {
301
+ let costUsd;
302
+ let durationMs;
303
+ for (const line of lines) {
304
+ let parsed;
305
+ try {
306
+ parsed = JSON.parse(line);
307
+ }
308
+ catch {
309
+ continue;
310
+ }
311
+ const entry = asRecord(parsed);
312
+ if (!entry) {
313
+ continue;
314
+ }
315
+ const entryCost = costUsdFromEntry(entry);
316
+ if (entryCost !== undefined) {
317
+ costUsd = Math.max(costUsd ?? 0, entryCost);
318
+ }
319
+ const entryDuration = durationMsFromEntry(entry);
320
+ if (entryDuration !== undefined) {
321
+ durationMs = Math.max(durationMs ?? 0, entryDuration);
322
+ }
323
+ }
324
+ return { costUsd, durationMs };
325
+ }
326
+ function costUsdFromEntry(entry) {
327
+ const cost = asRecord(entry.cost);
328
+ return (numberField(cost?.total_cost_usd) ??
329
+ numberField(cost?.totalCostUsd) ??
330
+ numberField(cost?.cost_usd) ??
331
+ numberField(entry.total_cost_usd) ??
332
+ numberField(entry.costUsd));
333
+ }
334
+ function durationMsFromEntry(entry) {
335
+ const cost = asRecord(entry.cost);
336
+ return (numberField(cost?.total_duration_ms) ??
337
+ numberField(cost?.totalDurationMs) ??
338
+ numberField(entry.duration_ms) ??
339
+ numberField(entry.durationMs));
340
+ }
341
+ function savingsEstimate(findings) {
342
+ const repeatedToolRunsAvoided = findings.reduce((total, finding) => total + (finding.repeatedRetries || 0), 0);
343
+ const durationMs = findings.reduce((total, finding) => total + (finding.estimatedDurationMs || 0), 0);
344
+ const costUsd = findings.reduce((total, finding) => total + (finding.estimatedCostUsd || 0), 0);
345
+ const measuredFindings = findings.filter((finding) => finding.savingsEstimateSource === "measured").length;
346
+ const measured = repeatedToolRunsAvoided > 0 && measuredFindings === findings.length && findings.length > 0;
347
+ const confidence = repeatedToolRunsAvoided === 0 ? "low" : measured ? "medium" : "low";
348
+ const basis = repeatedToolRunsAvoided === 0
349
+ ? "no repeated retries were found"
350
+ : measured
351
+ ? "time/cost used transcript metadata where Claude recorded it"
352
+ : "time/cost not estimated because transcripts did not expose usable cost/duration metadata";
353
+ return {
354
+ durationMinutes: measured ? Math.round(durationMs / 60_000) : 0,
355
+ costUsd: measured ? roundCurrency(costUsd) : 0,
356
+ repeatedToolRunsAvoided,
357
+ confidence,
358
+ basis,
359
+ measured
360
+ };
361
+ }
362
+ function normalizedRecentLimit(value) {
363
+ if (value === undefined || !Number.isFinite(value)) {
364
+ return DEFAULT_RECENT_SESSIONS;
365
+ }
366
+ return Math.max(1, Math.floor(value));
367
+ }
368
+ function auditScope(options) {
369
+ if (options.transcriptPath) {
370
+ return "transcript";
371
+ }
372
+ return options.allProjects ? "all-projects" : "project";
373
+ }
374
+ function claudeProjectDirectoryName(projectDir) {
375
+ return resolve(projectDir).replaceAll(/[\\/]/gu, "-");
376
+ }
377
+ function sortFindings(findings) {
378
+ return [...findings].sort((left, right) => findingScore(right) - findingScore(left) || left.session - right.session);
379
+ }
380
+ function findingScore(finding) {
381
+ const stateScore = finding.state === "Stop" ? 100 : finding.state === "Careful" ? 50 : 0;
382
+ const confidenceScore = finding.confidence === "high" ? 10 : finding.confidence === "medium" ? 5 : 0;
383
+ return stateScore + confidenceScore + (finding.repeatedRetries || 0);
384
+ }
385
+ function reportConfidence(sessionsScanned, findings) {
386
+ if (sessionsScanned === 0) {
387
+ return { confidence: "low", reason: "no local Claude Code transcripts were found for this scope" };
388
+ }
389
+ if (findings.some((finding) => finding.confidence === "high" && finding.state === "Stop")) {
390
+ return { confidence: "high", reason: "high-signal repeated failure patterns were found in scanned transcripts" };
391
+ }
392
+ if (findings.length > 0) {
393
+ return { confidence: "medium", reason: "moderate risk patterns were found, but retrospective replay cannot prove outcome changes" };
394
+ }
395
+ if (sessionsScanned >= 10) {
396
+ return { confidence: "medium", reason: "enough sessions were scanned, but no risky patterns surfaced" };
397
+ }
398
+ return { confidence: "low", reason: "small scanned sample and no risky patterns surfaced" };
399
+ }
400
+ function formatFailureCount(count) {
401
+ return count === 2 ? "twice" : `${count}x`;
402
+ }
403
+ function formatCount(count, noun) {
404
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
405
+ }
406
+ function formatCurrency(value) {
407
+ return `$${value.toFixed(2)}`;
408
+ }
409
+ function roundCurrency(value) {
410
+ return Number(value.toFixed(2));
411
+ }
412
+ function clamp(value, min, max) {
413
+ return Math.min(max, Math.max(min, value));
414
+ }
415
+ function box(lines) {
416
+ const width = Math.max(...lines.map(visibleLength), 0);
417
+ const border = `+${"-".repeat(width + 2)}+`;
418
+ return [border, ...lines.map((line) => `| ${line}${" ".repeat(width - visibleLength(line))} |`), border];
419
+ }
420
+ function colorize(value, key, enabled) {
421
+ return enabled ? `${COLORS[key]}${value}${RESET}` : value;
422
+ }
423
+ function visibleLength(value) {
424
+ // eslint-disable-next-line no-control-regex
425
+ return value.replace(/\u001b\[[0-9;]*m/gu, "").length;
426
+ }
427
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,13 @@ export interface BuildBaselineOptions {
8
8
  transcriptPath?: string;
9
9
  maxFiles?: number;
10
10
  maxBytesPerTranscript?: number;
11
+ scanBudgetMs?: number;
12
+ clock?: BaselineScanClock;
11
13
  now?: Date;
12
14
  }
15
+ export interface BaselineScanClock {
16
+ now: () => number;
17
+ }
13
18
  export declare function buildBaseline(options?: BuildBaselineOptions): Promise<{
14
19
  baseline: PersonalBaseline;
15
20
  projectBaseline?: PersonalBaseline;