@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,24 @@
1
+ import { exec } from '../lib/shell.js';
2
+ import { createPR } from '../lib/github.js';
3
+ import type { PromotionProposal } from '../lib/routing-promotion.js';
4
+ export type EvolveRoutingOptions = {
5
+ dryRun?: boolean;
6
+ demote?: string;
7
+ projectDir?: string;
8
+ baseBranch?: string;
9
+ /** Injectable for tests. */
10
+ createPR?: typeof createPR;
11
+ /** Injectable for tests. */
12
+ exec?: typeof exec;
13
+ /** Injectable for tests — epoch ms. */
14
+ nowMs?: number;
15
+ };
16
+ /** Result returned so callers (tests, CLI) can assert on the outcome. */
17
+ export type EvolveRoutingResult = {
18
+ status: 'promoted' | 'demoted' | 'no-proposals' | 'stale-matrix' | 'no-config' | 'dry-run' | 'error';
19
+ proposals?: PromotionProposal[];
20
+ branch?: string;
21
+ prUrl?: string;
22
+ message?: string;
23
+ };
24
+ export declare function evolveRoutingCommand(options?: EvolveRoutingOptions): Promise<EvolveRoutingResult>;
@@ -0,0 +1,320 @@
1
+ /**
2
+ * `alpha-loop evolve routing` — promote/demote routing stages as draft PRs.
3
+ *
4
+ * Reads recent per-stage telemetry and aggregates it into routing cells
5
+ * (same code path as `alpha-loop report routing`). When a local cell beats
6
+ * the frontier on thresholds defined in issue #163, a draft PR is opened
7
+ * with the `.alpha-loop.yaml` diff + supporting metrics + a one-click
8
+ * rollback snippet. Manual demotions (`--demote <stage>`) bypass the eval
9
+ * freshness gate and produce the same draft-PR flow.
10
+ */
11
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { log } from '../lib/logger.js';
14
+ import { loadConfig, getFallbackPolicy } from '../lib/config.js';
15
+ import { exec, formatTimestamp } from '../lib/shell.js';
16
+ import { createPR } from '../lib/github.js';
17
+ import { aggregateRouting, readAllStageTelemetry, readSessionManifests, } from '../lib/telemetry.js';
18
+ import { evaluatePromotion, applyRoutingDiff, buildDemotionYaml, } from '../lib/routing-promotion.js';
19
+ import { appendRoutingHistory, latestMatrixRunTime, MATRIX_FRESHNESS_WINDOW_MS } from '../lib/routing-history.js';
20
+ const DEFAULT_CONFIG_PATH = '.alpha-loop.yaml';
21
+ export async function evolveRoutingCommand(options = {}) {
22
+ const projectDir = options.projectDir ?? process.cwd();
23
+ const configPath = join(projectDir, DEFAULT_CONFIG_PATH);
24
+ const config = loadConfig();
25
+ const baseBranch = options.baseBranch ?? config.baseBranch;
26
+ const nowMs = options.nowMs ?? Date.now();
27
+ const prCreator = options.createPR ?? createPR;
28
+ const shellExec = options.exec ?? exec;
29
+ if (!existsSync(configPath)) {
30
+ log.error(`No ${DEFAULT_CONFIG_PATH} found at ${configPath}`);
31
+ return { status: 'no-config', message: 'missing .alpha-loop.yaml' };
32
+ }
33
+ // Manual demotion short-circuits before the promotion path. No matrix
34
+ // freshness gate — demotion is always safe to trigger by hand.
35
+ if (options.demote) {
36
+ return demoteManually(options.demote, {
37
+ projectDir,
38
+ configPath,
39
+ config,
40
+ baseBranch,
41
+ dryRun: options.dryRun,
42
+ prCreator,
43
+ shellExec,
44
+ });
45
+ }
46
+ // Freshness gate: promotion must not fire without a recent matrix run.
47
+ const latestMs = latestMatrixRunTime(projectDir);
48
+ if (latestMs == null || nowMs - latestMs > MATRIX_FRESHNESS_WINDOW_MS) {
49
+ const age = latestMs == null ? 'never run' : `${Math.round((nowMs - latestMs) / (24 * 60 * 60 * 1000))} days ago`;
50
+ log.error(`Matrix eval is stale (last run: ${age}). Run \`alpha-loop eval --matrix --execute\` within the last 7 days first.`);
51
+ return { status: 'stale-matrix', message: `matrix eval last run: ${age}` };
52
+ }
53
+ // Aggregate cells from the same telemetry path that `alpha-loop report routing` uses.
54
+ const items = readAllStageTelemetry(projectDir);
55
+ const manifests = readSessionManifests(projectDir);
56
+ const agg = aggregateRouting(items, manifests);
57
+ const proposals = evaluatePromotion(agg.cells);
58
+ if (proposals.length === 0) {
59
+ log.info('No promotions meet the thresholds (>=30 runs, cost savings >=40%, success delta >= -3%, tool error < 2%).');
60
+ return { status: 'no-proposals', proposals: [] };
61
+ }
62
+ log.step(`Proposing ${proposals.length} promotion(s):`);
63
+ for (const p of proposals) {
64
+ console.log(` - ${p.stage}: ${p.from.model} → ${p.to.model} (savings ${(p.metrics.costPerIssueSavingsPct * 100).toFixed(1)}%, Δsuccess ${(p.metrics.pipelineSuccessDelta * 100).toFixed(1)}pp, err ${(p.metrics.toolErrorRate * 100).toFixed(2)}%)`);
65
+ }
66
+ const yamlBefore = readFileSync(configPath, 'utf-8');
67
+ const { yaml: yamlAfter, diff } = applyRoutingDiff(yamlBefore, proposals);
68
+ if (options.dryRun) {
69
+ log.dry('Would write new .alpha-loop.yaml:');
70
+ console.log(diff);
71
+ log.dry('Would open draft PR on branch routing/promote-<ts>.');
72
+ return { status: 'dry-run', proposals };
73
+ }
74
+ const timestamp = formatTimestamp(new Date(nowMs));
75
+ const branch = `routing/promote-${timestamp}`;
76
+ try {
77
+ writeFileSync(configPath, yamlAfter, 'utf-8');
78
+ const branchRes = shellExec(`git checkout -b "${branch}"`, { cwd: projectDir });
79
+ if (branchRes.exitCode !== 0) {
80
+ throw new Error(`Failed to create branch ${branch}: ${branchRes.stderr || branchRes.stdout}`);
81
+ }
82
+ const addRes = shellExec(`git add "${DEFAULT_CONFIG_PATH}"`, { cwd: projectDir });
83
+ if (addRes.exitCode !== 0) {
84
+ throw new Error(`Failed to stage config: ${addRes.stderr}`);
85
+ }
86
+ const commitMsg = `evolve(routing): promote ${proposals.map((p) => p.stage).join(', ')}`;
87
+ const commitRes = shellExec(`git commit -m ${JSON.stringify(commitMsg)}`, { cwd: projectDir });
88
+ if (commitRes.exitCode !== 0) {
89
+ throw new Error(`Failed to commit: ${commitRes.stderr || commitRes.stdout}`);
90
+ }
91
+ const commitSha = shellExec('git rev-parse HEAD', { cwd: projectDir }).stdout.trim().slice(0, 12);
92
+ const prBody = renderPromotionPrBody(proposals, yamlBefore, diff, commitSha);
93
+ if (!config.repo) {
94
+ log.warn('No repo configured — skipping PR creation. Commit was made locally.');
95
+ return { status: 'promoted', branch, proposals, message: 'no repo configured; branch created locally' };
96
+ }
97
+ const prUrl = prCreator({
98
+ repo: config.repo,
99
+ base: baseBranch,
100
+ head: branch,
101
+ title: `routing: promote ${proposals.map((p) => p.stage).join(', ')}`,
102
+ body: prBody,
103
+ cwd: projectDir,
104
+ });
105
+ log.success(`Draft PR opened: ${prUrl}`);
106
+ for (const p of proposals) {
107
+ const entry = {
108
+ timestamp,
109
+ action: 'promote',
110
+ stage: p.stage,
111
+ from: p.from,
112
+ to: p.to,
113
+ reason: `cost savings ${(p.metrics.costPerIssueSavingsPct * 100).toFixed(1)}%, pipeline_success_delta ${(p.metrics.pipelineSuccessDelta * 100).toFixed(1)}pp`,
114
+ metrics: {
115
+ runs: p.metrics.runs,
116
+ pipeline_success_delta: p.metrics.pipelineSuccessDelta,
117
+ cost_per_issue_delta: p.metrics.costPerIssueDelta,
118
+ tool_error_rate: p.metrics.toolErrorRate,
119
+ },
120
+ prUrl,
121
+ };
122
+ appendRoutingHistory(entry, projectDir);
123
+ }
124
+ return { status: 'promoted', proposals, branch, prUrl };
125
+ }
126
+ catch (err) {
127
+ // Best-effort rollback of the yaml write so the worktree isn't left dirty.
128
+ try {
129
+ writeFileSync(configPath, yamlBefore, 'utf-8');
130
+ }
131
+ catch {
132
+ /* ignore */
133
+ }
134
+ const msg = err instanceof Error ? err.message : String(err);
135
+ log.error(`Promotion failed: ${msg}`);
136
+ return { status: 'error', message: msg };
137
+ }
138
+ }
139
+ async function demoteManually(stage, ctx) {
140
+ const policy = getFallbackPolicy(ctx.config);
141
+ if (!policy?.escalate_to) {
142
+ log.error(`No routing.fallback.escalate_to configured — cannot demote stage ${stage}.`);
143
+ return { status: 'error', message: 'missing routing.fallback.escalate_to' };
144
+ }
145
+ const yamlBefore = readFileSync(ctx.configPath, 'utf-8');
146
+ const stages = (ctx.config.routing?.stages ?? {});
147
+ const currentStage = stages[stage];
148
+ const { yaml: yamlAfter, diff } = buildDemotionYaml(yamlBefore, stage, policy.escalate_to);
149
+ log.step(`Manual demotion: ${stage} → ${policy.escalate_to.model} @ ${policy.escalate_to.endpoint}`);
150
+ if (ctx.dryRun) {
151
+ log.dry('Would write new .alpha-loop.yaml:');
152
+ console.log(diff);
153
+ return {
154
+ status: 'dry-run',
155
+ proposals: [
156
+ {
157
+ stage,
158
+ from: currentStage ? { model: currentStage.model, endpoint: currentStage.endpoint } : { model: 'current' },
159
+ to: { model: policy.escalate_to.model, endpoint: policy.escalate_to.endpoint },
160
+ metrics: {
161
+ runs: 0,
162
+ pipelineSuccessDelta: 0,
163
+ costPerIssueDelta: 0,
164
+ costPerIssueSavingsPct: 0,
165
+ toolErrorRate: 0,
166
+ frontierCostPerIssue: null,
167
+ candidateCostPerIssue: null,
168
+ },
169
+ },
170
+ ],
171
+ };
172
+ }
173
+ const timestamp = formatTimestamp(new Date());
174
+ const branch = `routing/demote-${stage}-${timestamp}`;
175
+ try {
176
+ writeFileSync(ctx.configPath, yamlAfter, 'utf-8');
177
+ const branchRes = ctx.shellExec(`git checkout -b "${branch}"`, { cwd: ctx.projectDir });
178
+ if (branchRes.exitCode !== 0) {
179
+ throw new Error(`Failed to create branch: ${branchRes.stderr || branchRes.stdout}`);
180
+ }
181
+ const addRes = ctx.shellExec(`git add "${DEFAULT_CONFIG_PATH}"`, { cwd: ctx.projectDir });
182
+ if (addRes.exitCode !== 0) {
183
+ throw new Error(`Failed to stage: ${addRes.stderr}`);
184
+ }
185
+ const commitMsg = `evolve(routing): manual demotion of ${stage}`;
186
+ const commitRes = ctx.shellExec(`git commit -m ${JSON.stringify(commitMsg)}`, { cwd: ctx.projectDir });
187
+ if (commitRes.exitCode !== 0) {
188
+ throw new Error(`Failed to commit: ${commitRes.stderr || commitRes.stdout}`);
189
+ }
190
+ const commitSha = ctx.shellExec('git rev-parse HEAD', { cwd: ctx.projectDir }).stdout.trim().slice(0, 12);
191
+ const prBody = renderDemotionPrBody(stage, currentStage, policy.escalate_to, diff, commitSha, 'manual');
192
+ let prUrl;
193
+ if (ctx.config.repo) {
194
+ prUrl = ctx.prCreator({
195
+ repo: ctx.config.repo,
196
+ base: ctx.baseBranch,
197
+ head: branch,
198
+ title: `routing: demote ${stage}`,
199
+ body: prBody,
200
+ cwd: ctx.projectDir,
201
+ });
202
+ log.success(`Draft PR opened: ${prUrl}`);
203
+ }
204
+ else {
205
+ log.warn('No repo configured — skipping PR creation.');
206
+ }
207
+ const entry = {
208
+ timestamp,
209
+ action: 'manual_demote',
210
+ stage,
211
+ from: currentStage ? { model: currentStage.model, endpoint: currentStage.endpoint } : { model: 'unknown' },
212
+ to: { model: policy.escalate_to.model, endpoint: policy.escalate_to.endpoint },
213
+ reason: 'manual demotion via --demote flag',
214
+ prUrl,
215
+ };
216
+ appendRoutingHistory(entry, ctx.projectDir);
217
+ return {
218
+ status: 'demoted',
219
+ branch,
220
+ prUrl,
221
+ proposals: [
222
+ {
223
+ stage,
224
+ from: currentStage ? { model: currentStage.model, endpoint: currentStage.endpoint } : { model: 'current' },
225
+ to: { model: policy.escalate_to.model, endpoint: policy.escalate_to.endpoint },
226
+ metrics: {
227
+ runs: 0,
228
+ pipelineSuccessDelta: 0,
229
+ costPerIssueDelta: 0,
230
+ costPerIssueSavingsPct: 0,
231
+ toolErrorRate: 0,
232
+ frontierCostPerIssue: null,
233
+ candidateCostPerIssue: null,
234
+ },
235
+ },
236
+ ],
237
+ };
238
+ }
239
+ catch (err) {
240
+ try {
241
+ writeFileSync(ctx.configPath, yamlBefore, 'utf-8');
242
+ }
243
+ catch {
244
+ /* ignore */
245
+ }
246
+ const msg = err instanceof Error ? err.message : String(err);
247
+ log.error(`Demotion failed: ${msg}`);
248
+ return { status: 'error', message: msg };
249
+ }
250
+ }
251
+ function renderPromotionPrBody(proposals, yamlBefore, diff, commitSha) {
252
+ const lines = [];
253
+ lines.push('## Routing Promotion');
254
+ lines.push('');
255
+ lines.push('This PR was generated automatically by `alpha-loop evolve routing` after the matrix eval crossed the promotion thresholds.');
256
+ lines.push('');
257
+ lines.push('**Thresholds (issue #163):**');
258
+ lines.push('- >= 30 runs');
259
+ lines.push('- pipeline_success_delta >= -3%');
260
+ lines.push('- cost_per_issue_delta <= -40% (>=40% savings)');
261
+ lines.push('- tool_error_rate < 2%');
262
+ lines.push('');
263
+ lines.push('## Proposed Changes');
264
+ lines.push('');
265
+ lines.push('| Stage | From | To | Runs | ΔSuccess | Savings | Err rate |');
266
+ lines.push('| --- | --- | --- | ---: | ---: | ---: | ---: |');
267
+ for (const p of proposals) {
268
+ lines.push(`| \`${p.stage}\` | \`${p.from.model}\` | \`${p.to.model}\` | ${p.metrics.runs} | ${(p.metrics.pipelineSuccessDelta * 100).toFixed(1)}pp | ${(p.metrics.costPerIssueSavingsPct * 100).toFixed(1)}% | ${(p.metrics.toolErrorRate * 100).toFixed(2)}% |`);
269
+ }
270
+ lines.push('');
271
+ lines.push('## Config Diff');
272
+ lines.push('');
273
+ lines.push('```yaml');
274
+ lines.push(diff || '(no diff computed)');
275
+ lines.push('```');
276
+ lines.push('');
277
+ lines.push('## Rollback');
278
+ lines.push('');
279
+ lines.push('To revert this change:');
280
+ lines.push('');
281
+ lines.push('```bash');
282
+ lines.push(`git revert ${commitSha}`);
283
+ lines.push('```');
284
+ lines.push('');
285
+ lines.push('Or restore the previous `.alpha-loop.yaml` snippet manually:');
286
+ lines.push('');
287
+ lines.push('```yaml');
288
+ lines.push(extractRoutingStages(yamlBefore));
289
+ lines.push('```');
290
+ return lines.join('\n');
291
+ }
292
+ function renderDemotionPrBody(stage, current, fallback, diff, commitSha, kind) {
293
+ const lines = [];
294
+ lines.push('## Routing Demotion');
295
+ lines.push('');
296
+ lines.push(`This ${kind === 'manual' ? 'manual' : 'automatic'} demotion reverts stage \`${stage}\` to the configured fallback.`);
297
+ lines.push('');
298
+ lines.push(`- **Stage:** \`${stage}\``);
299
+ lines.push(`- **From:** ${current ? `\`${current.model}\` @ \`${current.endpoint}\`` : '(unset)'}`);
300
+ lines.push(`- **To:** \`${fallback.model}\` @ \`${fallback.endpoint}\``);
301
+ lines.push('');
302
+ lines.push('## Config Diff');
303
+ lines.push('');
304
+ lines.push('```yaml');
305
+ lines.push(diff);
306
+ lines.push('```');
307
+ lines.push('');
308
+ lines.push('## Rollback');
309
+ lines.push('');
310
+ lines.push('```bash');
311
+ lines.push(`git revert ${commitSha}`);
312
+ lines.push('```');
313
+ return lines.join('\n');
314
+ }
315
+ /** Extract just the `routing.stages:` block from the previous yaml for the PR body. */
316
+ function extractRoutingStages(yamlBefore) {
317
+ const match = yamlBefore.match(/^routing:[\s\S]*?(?=^\S|\Z)/m);
318
+ return match ? match[0].trimEnd() : '(no routing block in previous config)';
319
+ }
320
+ //# sourceMappingURL=evolve-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolve-routing.js","sourceRoot":"","sources":["../../src/commands/evolve-routing.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  export declare function historyList(sessionsDir: string, projectDir?: string): void;
2
2
  export declare function historyDetail(sessionsDir: string, sessionName: string): void;
3
3
  export declare function historyQa(sessionsDir: string, sessionName: string): void;
4
+ export declare function historyTelemetry(sessionName: string, projectDir?: string): void;
4
5
  export declare function historyClean(sessionsDir: string): void;
5
6
  export declare function historyCommand(session: string | undefined, options: {
6
7
  qa?: boolean;
7
8
  clean?: boolean;
9
+ telemetry?: boolean;
8
10
  }): void;
@@ -1,6 +1,7 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { log } from '../lib/logger.js';
4
+ import { readStageTelemetry } from '../lib/telemetry.js';
4
5
  function formatDuration(seconds) {
5
6
  if (!seconds || seconds <= 0)
6
7
  return '';
@@ -176,6 +177,21 @@ export function historyDetail(sessionsDir, sessionName) {
176
177
  console.log(`Issues: ${results.length} (${successCount} succeeded, ${results.length - successCount} failed)`);
177
178
  console.log(`Duration: ${formatDuration(totalDuration)}`);
178
179
  console.log('');
180
+ // Stage-revert banner: if any issue in this session has an active revert event, flag it.
181
+ const activeReverts = new Set();
182
+ for (const r of results) {
183
+ for (const ev of r.escalationEvents ?? []) {
184
+ if (ev.type === 'stage_revert' || ev.type === 'stage_revert_active') {
185
+ activeReverts.add(`${ev.stage}: ${ev.from_model} -> ${ev.to_model}`);
186
+ }
187
+ }
188
+ }
189
+ if (activeReverts.size > 0) {
190
+ console.log('Stage reverts active (pinned to fallback):');
191
+ for (const line of activeReverts)
192
+ console.log(` ! ${line}`);
193
+ console.log('');
194
+ }
179
195
  console.log('Issues:');
180
196
  for (const result of results) {
181
197
  const symbol = result.status === 'success' ? '\u2713' : '\u2717';
@@ -195,6 +211,22 @@ export function historyDetail(sessionsDir, sessionName) {
195
211
  const verify = result.verifyPassing ? 'verify \u2713' : 'verify \u2717';
196
212
  console.log(` ${symbol} #${String(result.issueNum).padEnd(4)} ${result.title}`);
197
213
  console.log(` ${statusText.padEnd(12)} ${durStr.padEnd(10)} ${tests} ${verify}`);
214
+ // Escalation events, grouped by stage, printed inline under the stage row.
215
+ const events = result.escalationEvents ?? [];
216
+ if (events.length > 0) {
217
+ const byStage = new Map();
218
+ for (const ev of events) {
219
+ const list = byStage.get(ev.stage) ?? [];
220
+ list.push(ev);
221
+ byStage.set(ev.stage, list);
222
+ }
223
+ for (const [stage, stageEvents] of byStage) {
224
+ for (const ev of stageEvents) {
225
+ const symbol = ev.type === 'escalation' ? '\u21b3' : '!';
226
+ console.log(` ${symbol} ${ev.type}: ${stage} [${ev.from_model} \u2192 ${ev.to_model}] reason=${ev.reason} (turn ${ev.turn_index})`);
227
+ }
228
+ }
229
+ }
198
230
  }
199
231
  console.log('');
200
232
  // Show paths to useful files (only available for local sessions)
@@ -237,6 +269,65 @@ export function historyQa(sessionsDir, sessionName) {
237
269
  }
238
270
  console.log(fs.readFileSync(qaPath, 'utf-8'));
239
271
  }
272
+ /**
273
+ * Load per-stage telemetry for a session. Looks first in the traces dir
274
+ * (stages.jsonl written during the run), then falls back to the session
275
+ * manifest's embedded `stages` field for sessions pushed by teammates.
276
+ */
277
+ function loadStageTelemetry(sessionName, projectDir) {
278
+ const root = projectDir ?? process.cwd();
279
+ // Trace dirs mirror traces.ts: session/<ts> -> session-<ts>.
280
+ const traceName = sessionName.replace(/\//g, '-');
281
+ const traceDir = path.join(root, '.alpha-loop', 'traces', traceName);
282
+ if (fs.existsSync(path.join(traceDir, 'stages.jsonl'))) {
283
+ return readStageTelemetry(traceDir);
284
+ }
285
+ const manifests = loadManifests(projectDir);
286
+ const manifest = manifests.get(sessionName);
287
+ return manifest?.stages ?? [];
288
+ }
289
+ function fmtNumber(n, digits = 0) {
290
+ return n.toLocaleString('en-US', {
291
+ minimumFractionDigits: digits,
292
+ maximumFractionDigits: digits,
293
+ });
294
+ }
295
+ export function historyTelemetry(sessionName, projectDir) {
296
+ const entries = loadStageTelemetry(sessionName, projectDir);
297
+ if (entries.length === 0) {
298
+ console.log(`No per-stage telemetry recorded for this session.`);
299
+ return;
300
+ }
301
+ console.log(`Stage telemetry for ${sessionName}:`);
302
+ console.log('');
303
+ const header = ['stage', 'model', 'endpoint', 'tok_in', 'tok_out', 'cost_usd', 'wall_s', 'tool_err', 'ok'];
304
+ console.log(header.join('\t'));
305
+ let totalCost = 0;
306
+ let totalTokensIn = 0;
307
+ let totalTokensOut = 0;
308
+ let totalWall = 0;
309
+ let totalErrs = 0;
310
+ for (const e of entries) {
311
+ totalCost += e.cost_usd;
312
+ totalTokensIn += e.tokens_in;
313
+ totalTokensOut += e.tokens_out;
314
+ totalWall += e.wall_time_s;
315
+ totalErrs += e.tool_errors;
316
+ console.log([
317
+ e.stage,
318
+ e.model,
319
+ e.endpoint,
320
+ fmtNumber(e.tokens_in),
321
+ fmtNumber(e.tokens_out),
322
+ `$${e.cost_usd.toFixed(4)}`,
323
+ e.wall_time_s.toFixed(2),
324
+ String(e.tool_errors),
325
+ e.stage_success ? 'ok' : 'fail',
326
+ ].join('\t'));
327
+ }
328
+ console.log('');
329
+ console.log(`Totals: ${entries.length} stage(s), ${fmtNumber(totalTokensIn)} in / ${fmtNumber(totalTokensOut)} out, $${totalCost.toFixed(4)}, ${totalWall.toFixed(1)}s wall, ${totalErrs} tool error(s)`);
330
+ }
240
331
  export function historyClean(sessionsDir) {
241
332
  const sessions = findSessionDirs(sessionsDir);
242
333
  if (sessions.length === 0) {
@@ -275,7 +366,10 @@ export function historyCommand(session, options) {
275
366
  return;
276
367
  }
277
368
  if (session) {
278
- if (options.qa) {
369
+ if (options.telemetry) {
370
+ historyTelemetry(session);
371
+ }
372
+ else if (options.qa) {
279
373
  historyQa(sessionsDir, session);
280
374
  }
281
375
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * On Apple Silicon + 64GB+ RAM, point users at the local-model docs.
3
+ * Does not modify the YAML — the docs walk the user through the full setup.
4
+ * Silent on non-matching hardware and non-TTY environments.
5
+ */
6
+ export declare function maybeOfferLocalMode(): Promise<void>;
1
7
  /**
2
8
  * Check for required GitHub labels and interactively create missing ones.
3
9
  */
@@ -22,6 +22,7 @@ import { ghExec } from '../lib/rate-limit.js';
22
22
  import { log } from '../lib/logger.js';
23
23
  import { syncAgentAssets, migrateToTemplates, resolveHarnesses } from './sync.js';
24
24
  import { findDistributionTemplatesDir } from '../lib/templates.js';
25
+ import { shouldOfferLocalMode, getTotalMemoryGB } from '../lib/hardware.js';
25
26
  const CONFIG_FILE = '.alpha-loop.yaml';
26
27
  const ISSUE_TEMPLATE = `name: Agent-Ready Task
27
28
  description: A well-structured task for the automated agent loop to implement
@@ -95,7 +96,7 @@ function configTemplate(repo) {
95
96
  return `# Alpha Loop configuration
96
97
  repo: ${repo}
97
98
  project: 0 # GitHub Project number (find it in your project URL)
98
- agent: claude # AI agent CLI: claude, codex, opencode
99
+ agent: claude # AI agent CLI: claude, codex, opencode, lmstudio, ollama
99
100
  # model: # AI model (omit to use agent's default, e.g., opus, gpt-5.4)
100
101
  label: ready
101
102
  base_branch: main
@@ -172,6 +173,29 @@ const REQUIRED_LABELS = [
172
173
  { name: 'epic', color: '8B5CF6', description: 'Tracker issue with sub-issue checklist' },
173
174
  { name: 'needs-human-input', color: 'E99695', description: 'Requires human review or decision' },
174
175
  ];
176
+ /**
177
+ * On Apple Silicon + 64GB+ RAM, point users at the local-model docs.
178
+ * Does not modify the YAML — the docs walk the user through the full setup.
179
+ * Silent on non-matching hardware and non-TTY environments.
180
+ */
181
+ export async function maybeOfferLocalMode() {
182
+ if (!shouldOfferLocalMode())
183
+ return;
184
+ if (!process.stdin.isTTY)
185
+ return;
186
+ const memGB = Math.round(getTotalMemoryGB());
187
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
188
+ const answer = await new Promise((resolve) => {
189
+ rl.question(`Detected Apple Silicon + ${memGB}GB RAM. Use hybrid (local build/test + cloud plan/review) mode? [y/N]: `, resolve);
190
+ });
191
+ rl.close();
192
+ if (answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes') {
193
+ log.info('Hybrid mode setup is documented in:');
194
+ log.info(' - docs/local-models.md (LM Studio / Ollama install, hardware tuning)');
195
+ log.info(' - docs/routing-profiles.md (copy-pasteable hybrid-v1 routing config)');
196
+ log.info('Alpha-loop did not modify .alpha-loop.yaml — follow the docs when ready.');
197
+ }
198
+ }
175
199
  /**
176
200
  * Check for required GitHub labels and interactively create missing ones.
177
201
  */
@@ -325,6 +349,7 @@ export async function initCommand() {
325
349
  writeFileSync(CONFIG_FILE, configTemplate(repo));
326
350
  log.success(`Created ${CONFIG_FILE}`);
327
351
  }
352
+ await maybeOfferLocalMode();
328
353
  // --- Step 2: Set up .gitignore ---
329
354
  log.step('Step 2: Git ignore');
330
355
  ensureGitignore();