@bradtaylorsf/alpha-loop 1.14.0 → 1.14.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 (66) hide show
  1. package/README.md +73 -1
  2. package/dist/cli.js +37 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/eval.d.ts +22 -0
  5. package/dist/commands/eval.js +105 -1
  6. package/dist/commands/eval.js.map +1 -1
  7. package/dist/commands/evolve-routing.d.ts +24 -0
  8. package/dist/commands/evolve-routing.js +320 -0
  9. package/dist/commands/evolve-routing.js.map +1 -0
  10. package/dist/commands/history.d.ts +2 -0
  11. package/dist/commands/history.js +95 -1
  12. package/dist/commands/history.js.map +1 -1
  13. package/dist/commands/init.d.ts +6 -0
  14. package/dist/commands/init.js +26 -1
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/report.d.ts +7 -0
  17. package/dist/commands/report.js +27 -0
  18. package/dist/commands/report.js.map +1 -0
  19. package/dist/commands/scan.d.ts +1 -1
  20. package/dist/commands/scan.js.map +1 -1
  21. package/dist/engine/agents.d.ts +30 -8
  22. package/dist/engine/agents.js +94 -10
  23. package/dist/engine/agents.js.map +1 -1
  24. package/dist/engine/prerequisites.d.ts +40 -2
  25. package/dist/engine/prerequisites.js +126 -2
  26. package/dist/engine/prerequisites.js.map +1 -1
  27. package/dist/lib/agent.d.ts +39 -2
  28. package/dist/lib/agent.js +106 -4
  29. package/dist/lib/agent.js.map +1 -1
  30. package/dist/lib/config.d.ts +73 -1
  31. package/dist/lib/config.js +214 -1
  32. package/dist/lib/config.js.map +1 -1
  33. package/dist/lib/escalation.d.ts +102 -0
  34. package/dist/lib/escalation.js +241 -0
  35. package/dist/lib/escalation.js.map +1 -0
  36. package/dist/lib/eval-matrix.d.ts +125 -0
  37. package/dist/lib/eval-matrix.js +317 -0
  38. package/dist/lib/eval-matrix.js.map +1 -0
  39. package/dist/lib/eval-report.d.ts +12 -0
  40. package/dist/lib/eval-report.js +132 -0
  41. package/dist/lib/eval-report.js.map +1 -0
  42. package/dist/lib/eval-secret-scan.d.ts +41 -0
  43. package/dist/lib/eval-secret-scan.js +163 -0
  44. package/dist/lib/eval-secret-scan.js.map +1 -0
  45. package/dist/lib/eval.js +7 -4
  46. package/dist/lib/eval.js.map +1 -1
  47. package/dist/lib/hardware.d.ts +9 -0
  48. package/dist/lib/hardware.js +32 -0
  49. package/dist/lib/hardware.js.map +1 -0
  50. package/dist/lib/pipeline.d.ts +5 -1
  51. package/dist/lib/pipeline.js +217 -16
  52. package/dist/lib/pipeline.js.map +1 -1
  53. package/dist/lib/prerequisites.js +11 -3
  54. package/dist/lib/prerequisites.js.map +1 -1
  55. package/dist/lib/routing-history.d.ts +43 -0
  56. package/dist/lib/routing-history.js +112 -0
  57. package/dist/lib/routing-history.js.map +1 -0
  58. package/dist/lib/routing-promotion.d.ts +95 -0
  59. package/dist/lib/routing-promotion.js +229 -0
  60. package/dist/lib/routing-promotion.js.map +1 -0
  61. package/dist/lib/session.js +13 -0
  62. package/dist/lib/session.js.map +1 -1
  63. package/dist/lib/telemetry.d.ts +147 -0
  64. package/dist/lib/telemetry.js +353 -0
  65. package/dist/lib/telemetry.js.map +1 -0
  66. package/package.json +1 -1
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Per-Stage Telemetry — granular metrics per pipeline stage invocation.
3
+ *
4
+ * Session-level cost logs hide which stage burned the tokens. For A/B routing
5
+ * analysis we need apples-to-apples metrics per (stage, model) cell across many
6
+ * issues. This module defines the StageTelemetry record, persistence helpers
7
+ * (stages.jsonl in the trace dir), and aggregation math for the
8
+ * `alpha-loop report routing` command.
9
+ */
10
+ import { existsSync, mkdirSync, readdirSync, readFileSync, appendFileSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { estimateCost } from './config.js';
13
+ /**
14
+ * Build a StageTelemetry record from an AgentResult and stage context.
15
+ *
16
+ * Uses the agent's reported cost/tokens when present. Falls back to the
17
+ * pricing table (0 for local endpoints since pricing entries are 0/0).
18
+ */
19
+ export function buildStageTelemetry(agentResult, stage, config, ctx) {
20
+ const model = agentResult.model || config.model;
21
+ const endpointName = ctx.endpoint ?? 'default';
22
+ const isLocal = ctx.endpointType === 'anthropic_compat' || ctx.endpointType === 'openai_compat';
23
+ let tokensIn;
24
+ let tokensOut;
25
+ let costUsd;
26
+ if (agentResult.costUsd != null &&
27
+ agentResult.inputTokens != null &&
28
+ agentResult.outputTokens != null) {
29
+ tokensIn = agentResult.inputTokens;
30
+ tokensOut = agentResult.outputTokens;
31
+ costUsd = isLocal ? 0 : agentResult.costUsd;
32
+ }
33
+ else {
34
+ // Estimate tokens from output length (chars / 4 ≈ tokens).
35
+ tokensOut = Math.round(agentResult.output.length / 4);
36
+ tokensIn = Math.round(tokensOut * 1.3);
37
+ costUsd = isLocal ? 0 : estimateCost(model, tokensIn, tokensOut, config.pricing);
38
+ }
39
+ return {
40
+ stage,
41
+ model,
42
+ endpoint: endpointName,
43
+ endpoint_type: ctx.endpointType,
44
+ tokens_in: tokensIn,
45
+ tokens_out: tokensOut,
46
+ cost_usd: Math.round(costUsd * 1_000_000) / 1_000_000,
47
+ wall_time_s: Math.round((agentResult.duration / 1000) * 1000) / 1000,
48
+ tool_calls: agentResult.toolCalls ?? 0,
49
+ tool_errors: agentResult.toolErrors ?? 0,
50
+ stage_success: agentResult.exitCode === 0,
51
+ started_at: ctx.startedAt ?? new Date(Date.now() - agentResult.duration).toISOString(),
52
+ profile: ctx.profile,
53
+ issue_num: ctx.issueNum,
54
+ };
55
+ }
56
+ function stagesJsonlPath(runDirPath) {
57
+ return join(runDirPath, 'stages.jsonl');
58
+ }
59
+ /**
60
+ * Append a stage telemetry entry to the run's stages.jsonl file.
61
+ * Creates the file and parent directory when needed.
62
+ */
63
+ export function writeStageTelemetry(runDirPath, entry) {
64
+ mkdirSync(runDirPath, { recursive: true });
65
+ const line = JSON.stringify(entry) + '\n';
66
+ appendFileSync(stagesJsonlPath(runDirPath), line);
67
+ }
68
+ /**
69
+ * Read all stage telemetry entries for a single run.
70
+ * Returns an empty array if the file doesn't exist or has parse errors.
71
+ */
72
+ export function readStageTelemetry(runDirPath) {
73
+ const filePath = stagesJsonlPath(runDirPath);
74
+ if (!existsSync(filePath))
75
+ return [];
76
+ const raw = readFileSync(filePath, 'utf-8');
77
+ const entries = [];
78
+ for (const line of raw.split('\n')) {
79
+ const trimmed = line.trim();
80
+ if (!trimmed)
81
+ continue;
82
+ try {
83
+ entries.push(JSON.parse(trimmed));
84
+ }
85
+ catch {
86
+ /* skip invalid line */
87
+ }
88
+ }
89
+ return entries;
90
+ }
91
+ /**
92
+ * Scan `.alpha-loop/traces/` under the given project dir and return all
93
+ * stage telemetry entries across all runs, each tagged with its session name.
94
+ */
95
+ export function readAllStageTelemetry(projectDir) {
96
+ const root = join(projectDir ?? process.cwd(), '.alpha-loop', 'traces');
97
+ if (!existsSync(root))
98
+ return [];
99
+ const out = [];
100
+ for (const name of readdirSync(root)) {
101
+ const dir = join(root, name);
102
+ const entries = readStageTelemetry(dir);
103
+ if (entries.length > 0) {
104
+ out.push({ session: name, entries });
105
+ }
106
+ }
107
+ return out;
108
+ }
109
+ /**
110
+ * Load session manifests written to `.alpha-loop/learnings/` by finalizeSession.
111
+ * Used by the reporter to join cost data with shipped-issue counts.
112
+ */
113
+ export function readSessionManifests(projectDir) {
114
+ const dir = join(projectDir ?? process.cwd(), '.alpha-loop', 'learnings');
115
+ if (!existsSync(dir))
116
+ return [];
117
+ const out = [];
118
+ for (const file of readdirSync(dir)) {
119
+ if (!file.startsWith('session-') || !file.endsWith('.json'))
120
+ continue;
121
+ try {
122
+ const raw = readFileSync(join(dir, file), 'utf-8');
123
+ const parsed = JSON.parse(raw);
124
+ if (parsed.name)
125
+ out.push(parsed);
126
+ }
127
+ catch {
128
+ /* skip invalid */
129
+ }
130
+ }
131
+ return out;
132
+ }
133
+ function median(values) {
134
+ if (values.length === 0)
135
+ return 0;
136
+ const sorted = [...values].sort((a, b) => a - b);
137
+ const mid = Math.floor(sorted.length / 2);
138
+ return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
139
+ }
140
+ /**
141
+ * Aggregate stage telemetry across sessions into per (stage, model) cells.
142
+ *
143
+ * - `pipeline_success_rate`: fraction of parent sessions that shipped a
144
+ * successful issue while this (stage, model) cell was active.
145
+ * - `cost_per_issue_shipped`: total cost across this cell divided by the
146
+ * number of shipped (status=success, filesChanged>0) issues in the sessions
147
+ * where this cell ran.
148
+ * - `median_wall_time_s`: median wall_time_s across invocations.
149
+ * - `tool_error_rate`: sum(tool_errors) / sum(tool_calls || runs).
150
+ * - Delta columns compare each cell against the cell at the same `stage` with
151
+ * `model` matching the baseline. When `baseline` is 'all-frontier' (default)
152
+ * we pick the highest-cost cell per stage as the baseline (frontier).
153
+ */
154
+ export function aggregateRouting(items, manifests, opts = {}) {
155
+ const baseline = opts.baseline ?? 'all-frontier';
156
+ const manifestByName = new Map();
157
+ for (const m of manifests)
158
+ manifestByName.set(m.name, m);
159
+ const buckets = new Map();
160
+ const sessionShipped = new Map();
161
+ const sessionsSeen = new Set();
162
+ let totalStages = 0;
163
+ for (const { session, entries } of items) {
164
+ const sessionName = deriveSessionName(session);
165
+ const manifest = manifestByName.get(sessionName) ?? manifestByName.get(session);
166
+ // Count shipped issues per session (success + filesChanged > 0).
167
+ if (manifest && !sessionShipped.has(session)) {
168
+ const shipped = (manifest.results ?? []).filter((r) => r.status === 'success' && (r.filesChanged ?? 0) > 0).length;
169
+ sessionShipped.set(session, shipped);
170
+ }
171
+ for (const e of entries) {
172
+ if (opts.profile && e.profile !== opts.profile)
173
+ continue;
174
+ if (opts.sinceMs && new Date(e.started_at).getTime() < opts.sinceMs)
175
+ continue;
176
+ sessionsSeen.add(session);
177
+ totalStages++;
178
+ const key = `${e.stage}::${e.model}`;
179
+ let bucket = buckets.get(key);
180
+ if (!bucket) {
181
+ bucket = {
182
+ stage: e.stage,
183
+ model: e.model,
184
+ endpoint: e.endpoint,
185
+ endpoint_type: e.endpoint_type,
186
+ profile: e.profile,
187
+ runs: 0,
188
+ tokens_in: 0,
189
+ tokens_out: 0,
190
+ total_cost_usd: 0,
191
+ wall_times: [],
192
+ tool_calls: 0,
193
+ tool_errors: 0,
194
+ sessions: new Set(),
195
+ };
196
+ buckets.set(key, bucket);
197
+ }
198
+ bucket.runs++;
199
+ bucket.tokens_in += e.tokens_in;
200
+ bucket.tokens_out += e.tokens_out;
201
+ bucket.total_cost_usd += e.cost_usd;
202
+ bucket.wall_times.push(e.wall_time_s);
203
+ bucket.tool_calls += e.tool_calls;
204
+ bucket.tool_errors += e.tool_errors;
205
+ bucket.sessions.add(session);
206
+ }
207
+ }
208
+ let totalCost = 0;
209
+ let totalIssuesShipped = 0;
210
+ for (const s of sessionsSeen)
211
+ totalIssuesShipped += sessionShipped.get(s) ?? 0;
212
+ const cells = [];
213
+ for (const b of buckets.values()) {
214
+ totalCost += b.total_cost_usd;
215
+ // Shipped issues among sessions that ran this (stage, model).
216
+ let shipped = 0;
217
+ let successfulSessions = 0;
218
+ for (const s of b.sessions) {
219
+ const perSession = sessionShipped.get(s) ?? 0;
220
+ shipped += perSession;
221
+ if (perSession > 0)
222
+ successfulSessions++;
223
+ }
224
+ const pipeline_success_rate = b.sessions.size > 0 ? successfulSessions / b.sessions.size : 0;
225
+ const cost_per_issue_shipped = shipped > 0 ? b.total_cost_usd / shipped : null;
226
+ const tool_error_rate = b.tool_calls > 0 ? b.tool_errors / b.tool_calls : (b.runs > 0 ? b.tool_errors / b.runs : 0);
227
+ cells.push({
228
+ stage: b.stage,
229
+ model: b.model,
230
+ endpoint: b.endpoint,
231
+ endpoint_type: b.endpoint_type,
232
+ profile: b.profile,
233
+ runs: b.runs,
234
+ tokens_in: b.tokens_in,
235
+ tokens_out: b.tokens_out,
236
+ total_cost_usd: Math.round(b.total_cost_usd * 10000) / 10000,
237
+ pipeline_success_rate: Math.round(pipeline_success_rate * 1000) / 1000,
238
+ cost_per_issue_shipped: cost_per_issue_shipped != null ? Math.round(cost_per_issue_shipped * 10000) / 10000 : null,
239
+ median_wall_time_s: Math.round(median(b.wall_times) * 1000) / 1000,
240
+ tool_error_rate: Math.round(tool_error_rate * 10000) / 10000,
241
+ });
242
+ }
243
+ // Pick per-stage baseline: the cell with the highest total_cost_usd
244
+ // (treats frontier models as the reference point). Stable for ties: first seen wins.
245
+ const baselineByStage = new Map();
246
+ for (const cell of cells) {
247
+ const current = baselineByStage.get(cell.stage);
248
+ if (!current || cell.total_cost_usd > current.total_cost_usd) {
249
+ baselineByStage.set(cell.stage, cell);
250
+ }
251
+ }
252
+ for (const cell of cells) {
253
+ const b = baselineByStage.get(cell.stage);
254
+ if (!b || b === cell) {
255
+ cell.delta_cost_per_issue_shipped_vs_baseline = null;
256
+ cell.delta_median_wall_time_s_vs_baseline = null;
257
+ cell.delta_tool_error_rate_vs_baseline = null;
258
+ cell.delta_pipeline_success_rate_vs_baseline = null;
259
+ continue;
260
+ }
261
+ cell.delta_cost_per_issue_shipped_vs_baseline =
262
+ cell.cost_per_issue_shipped != null && b.cost_per_issue_shipped != null
263
+ ? Math.round((cell.cost_per_issue_shipped - b.cost_per_issue_shipped) * 10000) / 10000
264
+ : null;
265
+ cell.delta_median_wall_time_s_vs_baseline =
266
+ Math.round((cell.median_wall_time_s - b.median_wall_time_s) * 1000) / 1000;
267
+ cell.delta_tool_error_rate_vs_baseline =
268
+ Math.round((cell.tool_error_rate - b.tool_error_rate) * 10000) / 10000;
269
+ cell.delta_pipeline_success_rate_vs_baseline =
270
+ Math.round((cell.pipeline_success_rate - b.pipeline_success_rate) * 1000) / 1000;
271
+ }
272
+ cells.sort((a, b) => (a.stage.localeCompare(b.stage) || a.model.localeCompare(b.model)));
273
+ return {
274
+ cells,
275
+ total_sessions: sessionsSeen.size,
276
+ total_stages: totalStages,
277
+ total_issues_shipped: totalIssuesShipped,
278
+ total_cost_usd: Math.round(totalCost * 10000) / 10000,
279
+ filters: {
280
+ profile: opts.profile,
281
+ since_ms: opts.sinceMs,
282
+ baseline,
283
+ },
284
+ };
285
+ }
286
+ /**
287
+ * Trace directory names stored on disk include a replaced slash (e.g.
288
+ * `session-20260401-120000`). Session manifests reference the original
289
+ * `session/20260401-120000` form. This helper mirrors `traces.ts:runDir`.
290
+ */
291
+ function deriveSessionName(dirName) {
292
+ if (dirName.startsWith('session-')) {
293
+ return dirName.replace(/^session-/, 'session/');
294
+ }
295
+ return dirName;
296
+ }
297
+ /**
298
+ * Format an aggregation as a human-readable table or JSON string.
299
+ */
300
+ export function formatRoutingReport(agg, opts = {}) {
301
+ if (opts.json) {
302
+ return JSON.stringify(agg, null, 2);
303
+ }
304
+ if (agg.cells.length === 0) {
305
+ return 'No per-stage telemetry recorded yet. Run alpha-loop with `routing:` configured to populate stages.jsonl.';
306
+ }
307
+ const lines = [];
308
+ lines.push(`Routing report — ${agg.total_sessions} session(s), ${agg.total_stages} stage invocation(s), ${agg.total_issues_shipped} shipped`);
309
+ if (agg.filters.profile)
310
+ lines.push(` Profile: ${agg.filters.profile}`);
311
+ if (agg.filters.since_ms)
312
+ lines.push(` Since: ${new Date(agg.filters.since_ms).toISOString()}`);
313
+ lines.push(` Baseline: ${agg.filters.baseline} (highest-cost cell per stage)`);
314
+ lines.push('');
315
+ const header = ['stage', 'model', 'runs', 'tok_in', 'tok_out', 'cost_usd', 'cost/issue', 'wall_s', 'err_rate', 'Δcost/issue'];
316
+ lines.push(header.join('\t'));
317
+ for (const c of agg.cells) {
318
+ const costPerIssue = c.cost_per_issue_shipped != null ? `$${c.cost_per_issue_shipped.toFixed(4)}` : 'n/a';
319
+ const delta = c.delta_cost_per_issue_shipped_vs_baseline;
320
+ const deltaStr = delta == null ? '—' : (delta >= 0 ? `+$${delta.toFixed(4)}` : `-$${Math.abs(delta).toFixed(4)}`);
321
+ lines.push([
322
+ c.stage,
323
+ c.model,
324
+ String(c.runs),
325
+ String(c.tokens_in),
326
+ String(c.tokens_out),
327
+ `$${c.total_cost_usd.toFixed(4)}`,
328
+ costPerIssue,
329
+ c.median_wall_time_s.toFixed(2),
330
+ c.tool_error_rate.toFixed(4),
331
+ deltaStr,
332
+ ].join('\t'));
333
+ }
334
+ lines.push('');
335
+ lines.push(`Total cost: $${agg.total_cost_usd.toFixed(4)}`);
336
+ return lines.join('\n');
337
+ }
338
+ /**
339
+ * Parse a duration string like "30d", "12h", "45m", "90s" into milliseconds.
340
+ * Returns undefined when the input is empty or unparseable.
341
+ */
342
+ export function parseDuration(input) {
343
+ if (!input)
344
+ return undefined;
345
+ const match = /^(\d+)([smhd])$/.exec(input.trim());
346
+ if (!match)
347
+ return undefined;
348
+ const n = parseInt(match[1], 10);
349
+ const unit = match[2];
350
+ const mult = unit === 's' ? 1000 : unit === 'm' ? 60_000 : unit === 'h' ? 3_600_000 : 86_400_000;
351
+ return n * mult;
352
+ }
353
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bradtaylorsf/alpha-loop",
3
- "version": "1.14.0",
3
+ "version": "1.14.2",
4
4
  "description": "Agent-agnostic automated development loop: Plan → Build → Test → Review → Ship",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.0.0",