bb-cc-lite 0.1.10 → 0.1.12
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.
- package/README.md +166 -54
- package/dist/audit.d.ts +47 -0
- package/dist/audit.js +427 -0
- package/dist/audit.js.map +1 -0
- package/dist/cli.js +47 -4
- package/dist/cli.js.map +1 -1
- package/dist/decision-presentation.d.ts +2 -1
- package/dist/decision-presentation.js +3 -2
- package/dist/decision-presentation.js.map +1 -1
- package/dist/event-store-persistence.d.ts +1 -0
- package/dist/event-store-persistence.js +64 -1
- package/dist/event-store-persistence.js.map +1 -1
- package/dist/event-store-queries.js +5 -2
- package/dist/event-store-queries.js.map +1 -1
- package/dist/failure-episodes.d.ts +6 -2
- package/dist/failure-episodes.js +8 -8
- package/dist/failure-episodes.js.map +1 -1
- package/dist/feedback-outcomes.d.ts +9 -0
- package/dist/feedback-outcomes.js +190 -0
- package/dist/feedback-outcomes.js.map +1 -0
- package/dist/hook-control.js +30 -7
- package/dist/hook-control.js.map +1 -1
- package/dist/hook-payload.d.ts +4 -1
- package/dist/hook-payload.js +7 -3
- package/dist/hook-payload.js.map +1 -1
- package/dist/project-config.d.ts +6 -0
- package/dist/project-config.js +93 -0
- package/dist/project-config.js.map +1 -0
- package/dist/renderer.js +7 -5
- package/dist/renderer.js.map +1 -1
- package/dist/statusline.js +10 -3
- package/dist/statusline.js.map +1 -1
- package/dist/store.d.ts +4 -1
- package/dist/store.js +31 -1
- package/dist/store.js.map +1 -1
- package/dist/tool-metadata.d.ts +2 -0
- package/dist/tool-metadata.js +20 -2
- package/dist/tool-metadata.js.map +1 -1
- package/dist/transcript.d.ts +7 -2
- package/dist/transcript.js +7 -7
- package/dist/transcript.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/why.d.ts +15 -2
- package/dist/why.js +130 -5
- package/dist/why.js.map +1 -1
- 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_boundary",
|
|
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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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { buildPersonalBaseline, clearPersonalBaseline, formatDoctorChecks, runDoctor } from "./doctor.js";
|
|
3
|
+
import { formatAuditReport, runAudit } from "./audit.js";
|
|
3
4
|
import { runBaselineRefresh } from "./baseline-refresh.js";
|
|
4
5
|
import { handleHook } from "./hook-control.js";
|
|
5
6
|
import { installStatusLine, uninstallStatusLine } from "./settings.js";
|
|
6
7
|
import { readStdin } from "./status-input.js";
|
|
7
8
|
import { createStatusLine } from "./statusline.js";
|
|
8
|
-
import { formatWhy,
|
|
9
|
+
import { formatWhy, formatWhyJson, getWhyContext, shouldColorWhy } from "./why.js";
|
|
9
10
|
async function main() {
|
|
10
11
|
const args = parseArgs(process.argv.slice(2));
|
|
11
12
|
switch (args.command) {
|
|
@@ -27,6 +28,9 @@ async function main() {
|
|
|
27
28
|
case "doctor":
|
|
28
29
|
await commandDoctor(args);
|
|
29
30
|
break;
|
|
31
|
+
case "audit":
|
|
32
|
+
await commandAudit(args);
|
|
33
|
+
break;
|
|
30
34
|
case "baseline-refresh":
|
|
31
35
|
await commandBaselineRefresh(args);
|
|
32
36
|
break;
|
|
@@ -140,16 +144,17 @@ async function commandHook(args) {
|
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
async function commandWhy(args) {
|
|
143
|
-
const
|
|
147
|
+
const context = await getWhyContext({ sessionId: stringFlag(args, "session") });
|
|
148
|
+
const decision = context.decision;
|
|
144
149
|
if (args.flags.json) {
|
|
145
|
-
console.log(JSON.stringify(decision
|
|
150
|
+
console.log(JSON.stringify(decision ? formatWhyJson(decision, context.feedbackOutcomes) : null, null, 2));
|
|
146
151
|
return;
|
|
147
152
|
}
|
|
148
153
|
if (!decision) {
|
|
149
154
|
console.log("No bb-cc-lite decision has been recorded yet. Run the statusline command from Claude Code first.");
|
|
150
155
|
return;
|
|
151
156
|
}
|
|
152
|
-
console.log(formatWhy(decision));
|
|
157
|
+
console.log(formatWhy(decision, { feedbackOutcomes: context.feedbackOutcomes, color: shouldColorWhy() }));
|
|
153
158
|
}
|
|
154
159
|
async function commandDoctor(args) {
|
|
155
160
|
const checks = await runDoctor({
|
|
@@ -168,6 +173,29 @@ async function commandDoctor(args) {
|
|
|
168
173
|
process.exitCode = 1;
|
|
169
174
|
}
|
|
170
175
|
}
|
|
176
|
+
async function commandAudit(args) {
|
|
177
|
+
if (args.flags["all-projects"] && args.flags.transcript) {
|
|
178
|
+
throw new Error("--all-projects cannot be combined with --transcript");
|
|
179
|
+
}
|
|
180
|
+
if (args.flags["all-projects"] && args.flags.project) {
|
|
181
|
+
throw new Error("--all-projects cannot be combined with --project");
|
|
182
|
+
}
|
|
183
|
+
const report = await runAudit({
|
|
184
|
+
projectDir: stringFlag(args, "project"),
|
|
185
|
+
homeDir: stringFlag(args, "home"),
|
|
186
|
+
transcriptPath: stringFlag(args, "transcript"),
|
|
187
|
+
allProjects: Boolean(args.flags["all-projects"]),
|
|
188
|
+
recent: numberFlag(args, "recent")
|
|
189
|
+
});
|
|
190
|
+
if (args.flags.json) {
|
|
191
|
+
console.log(JSON.stringify(report, null, 2));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
console.log(formatAuditReport(report, { color: shouldUseColor() }));
|
|
195
|
+
}
|
|
196
|
+
function shouldUseColor() {
|
|
197
|
+
return Boolean(process.stdout.isTTY && !process.env.NO_COLOR && process.env.BB_CC_LITE_COLOR !== "0");
|
|
198
|
+
}
|
|
171
199
|
function parseArgs(argv) {
|
|
172
200
|
const [command = "help", ...rest] = argv;
|
|
173
201
|
const flags = {};
|
|
@@ -224,10 +252,23 @@ function stringFlag(args, name) {
|
|
|
224
252
|
const value = args.flags[name];
|
|
225
253
|
return typeof value === "string" ? value : undefined;
|
|
226
254
|
}
|
|
255
|
+
function numberFlag(args, name) {
|
|
256
|
+
const value = stringFlag(args, name);
|
|
257
|
+
if (value === undefined) {
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
const parsed = Number(value);
|
|
261
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
262
|
+
return parsed;
|
|
263
|
+
}
|
|
264
|
+
throw new Error(`Invalid --${name} ${value}; expected a positive number`);
|
|
265
|
+
}
|
|
227
266
|
function printHelp() {
|
|
228
267
|
console.log(`bb-cc-lite
|
|
229
268
|
|
|
230
269
|
Usage:
|
|
270
|
+
bb-cc-lite audit [--project <path>] [--all-projects] [--transcript <path>]
|
|
271
|
+
[--recent <count>] [--json]
|
|
231
272
|
bb-cc-lite install [--scope local|project|user] [--observe-only] [--guard]
|
|
232
273
|
[--replace] [--no-learn]
|
|
233
274
|
bb-cc-lite statusline
|
|
@@ -238,6 +279,8 @@ Usage:
|
|
|
238
279
|
bb-cc-lite uninstall [--scope local|project|user] [--force]
|
|
239
280
|
|
|
240
281
|
Learning:
|
|
282
|
+
audit scans recent local Claude JSONL history without installing bb-cc-lite.
|
|
283
|
+
--all-projects scans newest local transcripts across ~/.claude/projects.
|
|
241
284
|
install enables coach mode and builds a small local baseline by default.
|
|
242
285
|
--observe-only keeps display and local telemetry without Claude-facing feedback.
|
|
243
286
|
--guard enables coach feedback plus strict repeated-validation retry denial.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAwC,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,6 @@ export interface DecisionPresentation {
|
|
|
7
7
|
evidence: DecisionEvidence[];
|
|
8
8
|
impact: string;
|
|
9
9
|
action: string;
|
|
10
|
+
feedbackNote?: string;
|
|
10
11
|
}
|
|
11
|
-
export declare function toDecisionPresentation(decision: Decision): DecisionPresentation;
|
|
12
|
+
export declare function toDecisionPresentation(decision: Decision, feedbackNote?: string): DecisionPresentation;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function toDecisionPresentation(decision) {
|
|
1
|
+
export function toDecisionPresentation(decision, feedbackNote) {
|
|
2
2
|
return {
|
|
3
3
|
state: decision.state,
|
|
4
4
|
diagnosis: decision.diagnosis,
|
|
@@ -6,7 +6,8 @@ export function toDecisionPresentation(decision) {
|
|
|
6
6
|
primaryEvidence: decision.primaryEvidence,
|
|
7
7
|
evidence: decision.evidence,
|
|
8
8
|
impact: decision.impact,
|
|
9
|
-
action: decision.action
|
|
9
|
+
action: decision.action,
|
|
10
|
+
feedbackNote
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=decision-presentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-presentation.js","sourceRoot":"","sources":["../src/decision-presentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decision-presentation.js","sourceRoot":"","sources":["../src/decision-presentation.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,sBAAsB,CAAC,QAAkB,EAAE,YAAqB;IAC9E,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EventStoreData } from "./types.js";
|
|
2
2
|
export declare const STORE_LIMIT = 100;
|
|
3
3
|
export declare const HOOK_STORE_LIMIT = 500;
|
|
4
|
+
export declare const FEEDBACK_OUTCOME_STORE_LIMIT = 500;
|
|
4
5
|
export declare function readStore(storePath?: string): Promise<EventStoreData>;
|
|
5
6
|
export declare function writeStore(store: EventStoreData, storePath: string): Promise<void>;
|
|
6
7
|
export declare function updateStore<T>(storePath: string, update: (store: EventStoreData) => {
|