@gempack/squad-mcp 0.8.1 → 0.10.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/resources/agent-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/resources/agent-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import type { AgentName } from "../config/ownership-matrix.js";
2
+ import { decodeSeverityScore, type RunRecord, type RunInvocation, type RunVerdict, type RunStatus } from "./store.js";
3
+ /**
4
+ * SQUAD RUNS AGGREGATION + RENDERING. Pure functions only — no I/O, no
5
+ * Date.now() side effects (clock is an injected parameter for testability).
6
+ *
7
+ * Per architect A-1 (cycle 1), this module folds in: token estimation
8
+ * (CHARS_PER_TOKEN_ESTIMATE + estimateTokens), record folding (pair
9
+ * `in_flight` with `completed | aborted` by id), aggregation views (outcomes
10
+ * + health, kept as separate read shapes per A-2), Unicode renderers (bar,
11
+ * sparkline — no ANSI; coloring happens in the skill layer).
12
+ *
13
+ * Per architect A-5, tokens are exposed only via `getEstTokens(record)` —
14
+ * the aggregator never branches on `est_tokens_method`. The metadata stays
15
+ * in the record for audit / future swap to host telemetry.
16
+ */
17
+ /**
18
+ * Rough English-prose-to-tokens conversion ratio. The actual Anthropic
19
+ * tokenizer varies by content type (prose ≈ 4 chars/token, dense code
20
+ * ≈ 2.5 chars/token), so 3.5 is a deliberately middle-of-the-road value
21
+ * for mixed dev workloads. The stats skill labels every token figure as
22
+ * "estimated (chars ÷ 3.5)" so users understand it's a rough indicator,
23
+ * not an invoice. Sub-folded into one constant so future swaps to host
24
+ * telemetry can simply rename the method tag.
25
+ */
26
+ export declare const CHARS_PER_TOKEN_ESTIMATE = 3.5;
27
+ /** Convert character count to estimated token count. Floor for stability. */
28
+ export declare function estimateTokens(chars: number): number;
29
+ /**
30
+ * Per-record token rollup. Architect A-5 enforcement point: ALL token
31
+ * arithmetic flows through this getter. The aggregator must never read
32
+ * `record.agents[i].prompt_chars` directly without going through here,
33
+ * so a future host-telemetry record (`est_tokens_method:
34
+ * "host-telemetry-v1"` with `tokens` fields populated and `chars` zero)
35
+ * silently substitutes without breaking aggregation math.
36
+ */
37
+ export declare function getEstTokens(record: RunRecord): {
38
+ input: number;
39
+ output: number;
40
+ total: number;
41
+ };
42
+ /** Per-agent token rollup across a run set. */
43
+ export declare function getEstTokensPerAgent(records: RunRecord[]): Map<AgentName, {
44
+ input: number;
45
+ output: number;
46
+ total: number;
47
+ }>;
48
+ /**
49
+ * Strip C0 (`\x00`-`\x1F` except `\t`), C1 (`\x7F`-`\x9F`), and ESC (`\x1B`)
50
+ * from a string before rendering it into a colored output panel.
51
+ *
52
+ * Security #5 mitigation: recorded fields like `mode_warning.message` are
53
+ * partially user-influenceable. An attacker who can stuff `\x1B[2J\x1B[H`
54
+ * (clear screen) or `\x1B]0;evil\x07` (set window title) into the journal
55
+ * would otherwise see it rendered into the user's terminal. We sanitize
56
+ * at the rendering boundary — the recorded data stays intact for forensics.
57
+ */
58
+ export declare function stripControlChars(s: string): string;
59
+ /**
60
+ * Time-to-live for an unpaired `in_flight` row before the aggregator treats
61
+ * it as `aborted`. Cycle 2 lowered from 24h → 1h because users were seeing
62
+ * crashed runs stuck as "still running" indefinitely in stats (developer
63
+ * Major #3).
64
+ */
65
+ export declare const IN_FLIGHT_TTL_MS: number;
66
+ export interface FoldedRun {
67
+ id: string;
68
+ /**
69
+ * Effective status after folding. `completed | aborted` if a finalization
70
+ * row exists; `in_flight` if only the Phase-1 row is present and recent;
71
+ * `aborted` (synthesized) if Phase-1 row is older than IN_FLIGHT_TTL_MS
72
+ * with no finalization.
73
+ */
74
+ status: RunStatus;
75
+ /** The chosen record after pair-resolution (finalization row when present). */
76
+ record: RunRecord;
77
+ /** True if this run was synthesized from a stranded in_flight row. */
78
+ synthesized_aborted: boolean;
79
+ }
80
+ /**
81
+ * Pair rows by id. Tiebreaker per QA cycle-2 finding: when two completed
82
+ * rows share an id (Phase-10 retry, host crash + resume), pick the one
83
+ * with the LATEST `started_at`; if those tie, the one that appears LATER
84
+ * in the input array (which corresponds to later file position because
85
+ * `readRuns` preserves append order). The chosen rule is documented so
86
+ * a future contributor doesn't silently swap to a different sort key.
87
+ */
88
+ export declare function foldById(records: RunRecord[], now?: number): FoldedRun[];
89
+ export interface RunFilter {
90
+ /** ISO 8601 start of inclusive range. */
91
+ since?: string;
92
+ /** Cap output to the most recent N runs. */
93
+ limit?: number;
94
+ /** Restrict to runs that included this agent (any role). */
95
+ agent?: AgentName;
96
+ /** Restrict to a single verdict. */
97
+ verdict?: RunVerdict;
98
+ /** Restrict to a single mode. */
99
+ mode?: "quick" | "normal" | "deep";
100
+ /** Restrict to a single invocation. */
101
+ invocation?: RunInvocation;
102
+ }
103
+ export declare function applyFilters(folded: FoldedRun[], filter: RunFilter): FoldedRun[];
104
+ export interface OutcomeAggregate {
105
+ total_runs: number;
106
+ verdict_counts: Record<RunVerdict, number>;
107
+ verdict_total: number;
108
+ score_buckets: {
109
+ range: string;
110
+ count: number;
111
+ min: number;
112
+ max: number;
113
+ }[];
114
+ invocation_counts: Record<RunInvocation, number>;
115
+ est_tokens_total: {
116
+ input: number;
117
+ output: number;
118
+ total: number;
119
+ };
120
+ est_tokens_per_run_avg: number;
121
+ est_tokens_per_agent: Map<AgentName, {
122
+ input: number;
123
+ output: number;
124
+ total: number;
125
+ }>;
126
+ /**
127
+ * True when the underlying journal has zero runs. The skill renders a
128
+ * dedicated "no runs yet" empty-state when this is set rather than a
129
+ * panel full of zero bars.
130
+ */
131
+ is_empty: boolean;
132
+ }
133
+ export interface HealthAggregate {
134
+ total_runs: number;
135
+ in_flight: number;
136
+ completed: number;
137
+ aborted: number;
138
+ synthesized_aborted: number;
139
+ /** Average batch_duration_ms across all agents in all folded runs. */
140
+ avg_batch_duration_ms_per_agent: Map<AgentName, number>;
141
+ /** Sum of batch_duration_ms per run, averaged across runs. */
142
+ avg_total_duration_ms: number;
143
+ }
144
+ /** Verdict histogram + score distribution. Excludes null-verdict (question/brainstorm). */
145
+ export declare function aggregateOutcomes(folded: FoldedRun[]): OutcomeAggregate;
146
+ /** Operational telemetry: in_flight/aborted/completed counts + batch times. */
147
+ export declare function aggregateHealth(folded: FoldedRun[]): HealthAggregate;
148
+ /**
149
+ * Bucket runs into `days` daily counts, ending at `now`. Returns an array
150
+ * of length `days` (oldest first). Used by the skill to render a sparkline.
151
+ */
152
+ export declare function trendByDay(folded: FoldedRun[], days: number, now?: number): number[];
153
+ /**
154
+ * Render a horizontal bar. `value/max` determines fill ratio; `width` is
155
+ * the total cell count. Uses Unicode block characters at 1/8 granularity
156
+ * for sub-cell precision so a value of "26% of width 10" renders as
157
+ * `██▌ ` rather than rounding to `██ `.
158
+ */
159
+ export declare function renderBar(value: number, max: number, width: number): string;
160
+ /** Render a series of values as a Unicode sparkline. */
161
+ export declare function renderSparkline(values: number[]): string;
162
+ /** Convert ms to a short human-readable form: "750ms", "12s", "1m 23s". */
163
+ export declare function formatDuration(ms: number): string;
164
+ /** Format a token count in the conventional "1.6M", "70k" shorthand. */
165
+ export declare function formatTokens(n: number): string;
166
+ export { decodeSeverityScore };
@@ -0,0 +1,381 @@
1
+ import { decodeSeverityScore, } from "./store.js";
2
+ /**
3
+ * SQUAD RUNS AGGREGATION + RENDERING. Pure functions only — no I/O, no
4
+ * Date.now() side effects (clock is an injected parameter for testability).
5
+ *
6
+ * Per architect A-1 (cycle 1), this module folds in: token estimation
7
+ * (CHARS_PER_TOKEN_ESTIMATE + estimateTokens), record folding (pair
8
+ * `in_flight` with `completed | aborted` by id), aggregation views (outcomes
9
+ * + health, kept as separate read shapes per A-2), Unicode renderers (bar,
10
+ * sparkline — no ANSI; coloring happens in the skill layer).
11
+ *
12
+ * Per architect A-5, tokens are exposed only via `getEstTokens(record)` —
13
+ * the aggregator never branches on `est_tokens_method`. The metadata stays
14
+ * in the record for audit / future swap to host telemetry.
15
+ */
16
+ /**
17
+ * Rough English-prose-to-tokens conversion ratio. The actual Anthropic
18
+ * tokenizer varies by content type (prose ≈ 4 chars/token, dense code
19
+ * ≈ 2.5 chars/token), so 3.5 is a deliberately middle-of-the-road value
20
+ * for mixed dev workloads. The stats skill labels every token figure as
21
+ * "estimated (chars ÷ 3.5)" so users understand it's a rough indicator,
22
+ * not an invoice. Sub-folded into one constant so future swaps to host
23
+ * telemetry can simply rename the method tag.
24
+ */
25
+ export const CHARS_PER_TOKEN_ESTIMATE = 3.5;
26
+ /** Convert character count to estimated token count. Floor for stability. */
27
+ export function estimateTokens(chars) {
28
+ if (!Number.isFinite(chars) || chars <= 0)
29
+ return 0;
30
+ return Math.floor(chars / CHARS_PER_TOKEN_ESTIMATE);
31
+ }
32
+ /**
33
+ * Per-record token rollup. Architect A-5 enforcement point: ALL token
34
+ * arithmetic flows through this getter. The aggregator must never read
35
+ * `record.agents[i].prompt_chars` directly without going through here,
36
+ * so a future host-telemetry record (`est_tokens_method:
37
+ * "host-telemetry-v1"` with `tokens` fields populated and `chars` zero)
38
+ * silently substitutes without breaking aggregation math.
39
+ */
40
+ export function getEstTokens(record) {
41
+ let input = 0;
42
+ let output = 0;
43
+ for (const a of record.agents) {
44
+ input += estimateTokens(a.prompt_chars);
45
+ output += estimateTokens(a.response_chars);
46
+ }
47
+ return { input, output, total: input + output };
48
+ }
49
+ /** Per-agent token rollup across a run set. */
50
+ export function getEstTokensPerAgent(records) {
51
+ const out = new Map();
52
+ for (const r of records) {
53
+ for (const a of r.agents) {
54
+ const acc = out.get(a.name) ?? { input: 0, output: 0, total: 0 };
55
+ acc.input += estimateTokens(a.prompt_chars);
56
+ acc.output += estimateTokens(a.response_chars);
57
+ acc.total = acc.input + acc.output;
58
+ out.set(a.name, acc);
59
+ }
60
+ }
61
+ return out;
62
+ }
63
+ /**
64
+ * Strip C0 (`\x00`-`\x1F` except `\t`), C1 (`\x7F`-`\x9F`), and ESC (`\x1B`)
65
+ * from a string before rendering it into a colored output panel.
66
+ *
67
+ * Security #5 mitigation: recorded fields like `mode_warning.message` are
68
+ * partially user-influenceable. An attacker who can stuff `\x1B[2J\x1B[H`
69
+ * (clear screen) or `\x1B]0;evil\x07` (set window title) into the journal
70
+ * would otherwise see it rendered into the user's terminal. We sanitize
71
+ * at the rendering boundary — the recorded data stays intact for forensics.
72
+ */
73
+ export function stripControlChars(s) {
74
+ // Tab (\x09) is preserved; everything else in C0/C1 ranges + ESC is dropped.
75
+ // U+007F (DEL) sits in the C1 range we strip; spaces (U+0020+) are kept.
76
+ return s.replace(/[\x00-\x08\x0A-\x1F\x7F-\x9F]/g, "");
77
+ }
78
+ /* -------------------------------------------------------------------------- */
79
+ /* Fold: pair in_flight + completed/aborted rows by id */
80
+ /* -------------------------------------------------------------------------- */
81
+ /**
82
+ * Time-to-live for an unpaired `in_flight` row before the aggregator treats
83
+ * it as `aborted`. Cycle 2 lowered from 24h → 1h because users were seeing
84
+ * crashed runs stuck as "still running" indefinitely in stats (developer
85
+ * Major #3).
86
+ */
87
+ export const IN_FLIGHT_TTL_MS = 60 * 60 * 1000;
88
+ /**
89
+ * Pair rows by id. Tiebreaker per QA cycle-2 finding: when two completed
90
+ * rows share an id (Phase-10 retry, host crash + resume), pick the one
91
+ * with the LATEST `started_at`; if those tie, the one that appears LATER
92
+ * in the input array (which corresponds to later file position because
93
+ * `readRuns` preserves append order). The chosen rule is documented so
94
+ * a future contributor doesn't silently swap to a different sort key.
95
+ */
96
+ export function foldById(records, now = Date.now()) {
97
+ const byId = new Map();
98
+ let idx = 0;
99
+ for (const rec of records) {
100
+ const wrapped = { rec, pos: idx++ };
101
+ const acc = byId.get(rec.id) ?? [];
102
+ acc.push(wrapped);
103
+ byId.set(rec.id, acc);
104
+ }
105
+ const folded = [];
106
+ for (const [id, group] of byId) {
107
+ // Prefer the last completed/aborted row (terminal wins over in_flight).
108
+ const terminals = group.filter((w) => w.rec.status === "completed" || w.rec.status === "aborted");
109
+ if (terminals.length > 0) {
110
+ // Sort by (started_at ASC, append-position ASC). Last wins. Comparator is
111
+ // O(1) because `pos` is precomputed.
112
+ terminals.sort((a, b) => {
113
+ if (a.rec.started_at !== b.rec.started_at)
114
+ return a.rec.started_at.localeCompare(b.rec.started_at);
115
+ return a.pos - b.pos;
116
+ });
117
+ const winner = terminals[terminals.length - 1].rec;
118
+ folded.push({ id, status: winner.status, record: winner, synthesized_aborted: false });
119
+ continue;
120
+ }
121
+ // No terminal row. The in_flight is either still running or stranded.
122
+ // We compare against the latest started_at (group is small; usually 1 row).
123
+ const inflight = group.find((w) => w.rec.status === "in_flight")?.rec;
124
+ if (!inflight) {
125
+ // Pathological: rows exist but none is in_flight or terminal. Shouldn't
126
+ // happen under our writer contract; skip silently rather than throw.
127
+ continue;
128
+ }
129
+ const startedMs = Date.parse(inflight.started_at);
130
+ const ageMs = Number.isFinite(startedMs) ? now - startedMs : 0;
131
+ if (ageMs > IN_FLIGHT_TTL_MS) {
132
+ // Synthesize an aborted view. The on-disk row is unchanged (no rewrite);
133
+ // the aggregator just reports it as aborted for stats purposes.
134
+ folded.push({
135
+ id,
136
+ status: "aborted",
137
+ record: { ...inflight, status: "aborted" },
138
+ synthesized_aborted: true,
139
+ });
140
+ }
141
+ else {
142
+ folded.push({ id, status: "in_flight", record: inflight, synthesized_aborted: false });
143
+ }
144
+ }
145
+ return folded;
146
+ }
147
+ export function applyFilters(folded, filter) {
148
+ let out = folded;
149
+ if (filter.since) {
150
+ const sinceMs = Date.parse(filter.since);
151
+ if (Number.isFinite(sinceMs)) {
152
+ out = out.filter((f) => {
153
+ const t = Date.parse(f.record.started_at);
154
+ return Number.isFinite(t) ? t >= sinceMs : false;
155
+ });
156
+ }
157
+ }
158
+ if (filter.invocation)
159
+ out = out.filter((f) => f.record.invocation === filter.invocation);
160
+ if (filter.mode)
161
+ out = out.filter((f) => f.record.mode === filter.mode);
162
+ if (filter.verdict) {
163
+ out = out.filter((f) => f.record.verdict === filter.verdict);
164
+ }
165
+ if (filter.agent) {
166
+ out = out.filter((f) => f.record.agents.some((a) => a.name === filter.agent));
167
+ }
168
+ if (typeof filter.limit === "number" && filter.limit > 0) {
169
+ // "Most recent N" — sort by started_at desc, take N, then re-sort asc
170
+ // so downstream consumers see chronological order.
171
+ const sorted = [...out].sort((a, b) => b.record.started_at.localeCompare(a.record.started_at));
172
+ out = sorted.slice(0, filter.limit).reverse();
173
+ }
174
+ return out;
175
+ }
176
+ /** Verdict histogram + score distribution. Excludes null-verdict (question/brainstorm). */
177
+ export function aggregateOutcomes(folded) {
178
+ const verdict_counts = {
179
+ APPROVED: 0,
180
+ CHANGES_REQUIRED: 0,
181
+ REJECTED: 0,
182
+ };
183
+ let verdict_total = 0;
184
+ const score_buckets = [
185
+ { range: "90-100", count: 0, min: 90, max: 100 },
186
+ { range: "80-89", count: 0, min: 80, max: 89 },
187
+ { range: "70-79", count: 0, min: 70, max: 79 },
188
+ { range: "<70", count: 0, min: 0, max: 69 },
189
+ ];
190
+ const invocation_counts = {
191
+ implement: 0,
192
+ review: 0,
193
+ task: 0,
194
+ question: 0,
195
+ brainstorm: 0,
196
+ debug: 0,
197
+ };
198
+ let inputTotal = 0;
199
+ let outputTotal = 0;
200
+ const perAgent = new Map();
201
+ let agentBearingRuns = 0;
202
+ for (const f of folded) {
203
+ invocation_counts[f.record.invocation] = (invocation_counts[f.record.invocation] ?? 0) + 1;
204
+ const tokens = getEstTokens(f.record);
205
+ inputTotal += tokens.input;
206
+ outputTotal += tokens.output;
207
+ if (f.record.agents.length > 0)
208
+ agentBearingRuns++;
209
+ for (const a of f.record.agents) {
210
+ const acc = perAgent.get(a.name) ?? { input: 0, output: 0, total: 0 };
211
+ acc.input += estimateTokens(a.prompt_chars);
212
+ acc.output += estimateTokens(a.response_chars);
213
+ acc.total = acc.input + acc.output;
214
+ perAgent.set(a.name, acc);
215
+ }
216
+ // Verdict histogram + score buckets ONLY for terminal rubric-bearing runs.
217
+ // question/brainstorm have verdict===null and are skipped from rubric
218
+ // panels but already counted in token totals above (QA M1).
219
+ if (f.status !== "completed")
220
+ continue;
221
+ if (f.record.verdict !== null && f.record.verdict !== undefined) {
222
+ verdict_counts[f.record.verdict]++;
223
+ verdict_total++;
224
+ }
225
+ const score = f.record.weighted_score;
226
+ if (typeof score === "number" && Number.isFinite(score)) {
227
+ const bucket = score_buckets.find((b) => score >= b.min && score <= b.max);
228
+ if (bucket)
229
+ bucket.count++;
230
+ }
231
+ }
232
+ const totalTokens = inputTotal + outputTotal;
233
+ return {
234
+ total_runs: folded.length,
235
+ verdict_counts,
236
+ verdict_total,
237
+ score_buckets,
238
+ invocation_counts,
239
+ est_tokens_total: { input: inputTotal, output: outputTotal, total: totalTokens },
240
+ est_tokens_per_run_avg: agentBearingRuns > 0 ? Math.floor(totalTokens / agentBearingRuns) : 0,
241
+ est_tokens_per_agent: perAgent,
242
+ is_empty: folded.length === 0,
243
+ };
244
+ }
245
+ /** Operational telemetry: in_flight/aborted/completed counts + batch times. */
246
+ export function aggregateHealth(folded) {
247
+ let in_flight = 0;
248
+ let completed = 0;
249
+ let aborted = 0;
250
+ let synthesized_aborted = 0;
251
+ const agentDurations = new Map();
252
+ let totalDurationSum = 0;
253
+ let totalDurationN = 0;
254
+ for (const f of folded) {
255
+ if (f.status === "in_flight")
256
+ in_flight++;
257
+ else if (f.status === "completed")
258
+ completed++;
259
+ else
260
+ aborted++;
261
+ if (f.synthesized_aborted)
262
+ synthesized_aborted++;
263
+ let runTotal = 0;
264
+ for (const a of f.record.agents) {
265
+ const acc = agentDurations.get(a.name) ?? { sum: 0, n: 0 };
266
+ acc.sum += a.batch_duration_ms;
267
+ acc.n++;
268
+ agentDurations.set(a.name, acc);
269
+ runTotal += a.batch_duration_ms;
270
+ }
271
+ if (f.record.agents.length > 0) {
272
+ totalDurationSum += runTotal;
273
+ totalDurationN++;
274
+ }
275
+ }
276
+ const avg_batch_duration_ms_per_agent = new Map();
277
+ for (const [name, { sum, n }] of agentDurations) {
278
+ avg_batch_duration_ms_per_agent.set(name, n > 0 ? Math.floor(sum / n) : 0);
279
+ }
280
+ return {
281
+ total_runs: folded.length,
282
+ in_flight,
283
+ completed,
284
+ aborted,
285
+ synthesized_aborted,
286
+ avg_batch_duration_ms_per_agent,
287
+ avg_total_duration_ms: totalDurationN > 0 ? Math.floor(totalDurationSum / totalDurationN) : 0,
288
+ };
289
+ }
290
+ /* -------------------------------------------------------------------------- */
291
+ /* Trend: runs/day sparkline buckets */
292
+ /* -------------------------------------------------------------------------- */
293
+ /**
294
+ * Bucket runs into `days` daily counts, ending at `now`. Returns an array
295
+ * of length `days` (oldest first). Used by the skill to render a sparkline.
296
+ */
297
+ export function trendByDay(folded, days, now = Date.now()) {
298
+ const buckets = new Array(days).fill(0);
299
+ const ONE_DAY_MS = 24 * 60 * 60 * 1000;
300
+ const oldest = now - days * ONE_DAY_MS;
301
+ for (const f of folded) {
302
+ const t = Date.parse(f.record.started_at);
303
+ if (!Number.isFinite(t))
304
+ continue;
305
+ if (t < oldest || t > now)
306
+ continue;
307
+ const idx = Math.min(days - 1, Math.floor((t - oldest) / ONE_DAY_MS));
308
+ if (idx >= 0 && idx < days)
309
+ buckets[idx]++;
310
+ }
311
+ return buckets;
312
+ }
313
+ /* -------------------------------------------------------------------------- */
314
+ /* Plain Unicode renderers — no ANSI inside the MCP server (architect) */
315
+ /* -------------------------------------------------------------------------- */
316
+ const FULL_BLOCKS = "█▉▊▋▌▍▎▏";
317
+ /**
318
+ * Render a horizontal bar. `value/max` determines fill ratio; `width` is
319
+ * the total cell count. Uses Unicode block characters at 1/8 granularity
320
+ * for sub-cell precision so a value of "26% of width 10" renders as
321
+ * `██▌ ` rather than rounding to `██ `.
322
+ */
323
+ export function renderBar(value, max, width) {
324
+ if (max <= 0 || !Number.isFinite(value) || value < 0)
325
+ return " ".repeat(width);
326
+ const clamped = Math.min(value, max);
327
+ const ratio = clamped / max;
328
+ const totalEighths = Math.round(ratio * width * 8);
329
+ const fullBlocks = Math.floor(totalEighths / 8);
330
+ const remainderEighths = totalEighths % 8;
331
+ let out = "█".repeat(fullBlocks);
332
+ if (remainderEighths > 0 && fullBlocks < width) {
333
+ out += FULL_BLOCKS[8 - remainderEighths];
334
+ }
335
+ return out.padEnd(width, " ");
336
+ }
337
+ const SPARK_GLYPHS = "▁▂▃▄▅▆▇█";
338
+ /** Render a series of values as a Unicode sparkline. */
339
+ export function renderSparkline(values) {
340
+ if (values.length === 0)
341
+ return "";
342
+ const max = Math.max(...values, 1);
343
+ let out = "";
344
+ for (const v of values) {
345
+ if (!Number.isFinite(v) || v <= 0) {
346
+ out += SPARK_GLYPHS[0];
347
+ continue;
348
+ }
349
+ const idx = Math.min(SPARK_GLYPHS.length - 1, Math.floor((v / max) * SPARK_GLYPHS.length));
350
+ out += SPARK_GLYPHS[idx];
351
+ }
352
+ return out;
353
+ }
354
+ /** Convert ms to a short human-readable form: "750ms", "12s", "1m 23s". */
355
+ export function formatDuration(ms) {
356
+ if (!Number.isFinite(ms) || ms < 0)
357
+ return "—";
358
+ if (ms < 1000)
359
+ return `${Math.round(ms)}ms`;
360
+ if (ms < 60_000)
361
+ return `${Math.round(ms / 1000)}s`;
362
+ const minutes = Math.floor(ms / 60_000);
363
+ const seconds = Math.round((ms % 60_000) / 1000);
364
+ return seconds === 0 ? `${minutes}m` : `${minutes}m ${seconds}s`;
365
+ }
366
+ /** Format a token count in the conventional "1.6M", "70k" shorthand. */
367
+ export function formatTokens(n) {
368
+ if (!Number.isFinite(n) || n < 0)
369
+ return "0";
370
+ if (n < 1_000)
371
+ return String(n);
372
+ if (n < 1_000_000)
373
+ return `${(n / 1_000).toFixed(n < 10_000 ? 1 : 0)}k`;
374
+ return `${(n / 1_000_000).toFixed(n < 10_000_000 ? 2 : 1)}M`;
375
+ }
376
+ /* -------------------------------------------------------------------------- */
377
+ /* Suggestion: re-emit decoded severity counts when needed (not for stats */
378
+ /* main panels — kept for future drill-down view). */
379
+ /* -------------------------------------------------------------------------- */
380
+ export { decodeSeverityScore };
381
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/runs/aggregate.ts"],"names":[],"mappings":"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"}