swarm-engine 1.41.0 → 1.43.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.
@@ -0,0 +1,588 @@
1
+ /**
2
+ * BenefitsCollector — aggregates optimization metrics during orchestration
3
+ * and produces a user-facing summary of what the engine did for them.
4
+ */
5
+ // ─── Collector ────────────────────────────────────────────────
6
+ /**
7
+ * Collects benefits metrics during orchestration execution.
8
+ * Call increment methods as optimizations occur, then call `build()` at the end.
9
+ */
10
+ export class BenefitsCollector {
11
+ // Token savings accumulators
12
+ _smartRoutingSaved = 0;
13
+ _promptCompressionSaved = 0;
14
+ _verbatimCompactionSaved = 0;
15
+ _contextDecaySaved = 0;
16
+ _cacheSavingsUsd = 0;
17
+ // Graph counters
18
+ _contextRoutingDecisions = 0;
19
+ _coModHintsInjected = 0;
20
+ _confidenceGatesEvaluated = 0;
21
+ _gatesTriggered = 0;
22
+ _reviewFindingsRecorded = 0;
23
+ // ML counters
24
+ _gnnPredictionsMade = 0;
25
+ _highRiskNodesIdentified = 0;
26
+ _agentsDroppedML = 0;
27
+ _agentsDroppedRules = 0;
28
+ _dropoutTokensSaved = 0;
29
+ _affinityEscalations = 0;
30
+ _trajectoryPredictionsMade = 0;
31
+ // Adaptive counters
32
+ _phasesSkipped = 0;
33
+ _modelDowngrades = 0;
34
+ _modelUpgrades = 0;
35
+ _cascadeTierChanges = 0;
36
+ _budgetWarnings = 0;
37
+ _livingSpecUpdates = 0;
38
+ // ─── Token savings methods ────────────────────────────────
39
+ addSmartRoutingSaved(tokens) {
40
+ this._smartRoutingSaved += tokens;
41
+ }
42
+ addPromptCompressionSaved(tokens) {
43
+ this._promptCompressionSaved += tokens;
44
+ }
45
+ addVerbatimCompactionSaved(tokens) {
46
+ this._verbatimCompactionSaved += tokens;
47
+ }
48
+ addContextDecaySaved(tokens) {
49
+ this._contextDecaySaved += tokens;
50
+ }
51
+ addCacheSavingsUsd(usd) {
52
+ this._cacheSavingsUsd += usd;
53
+ }
54
+ // ─── Graph methods ────────────────────────────────────────
55
+ addContextRoutingDecision() {
56
+ this._contextRoutingDecisions++;
57
+ }
58
+ addCoModHintInjected() {
59
+ this._coModHintsInjected++;
60
+ }
61
+ addConfidenceGateEvaluated(triggered) {
62
+ this._confidenceGatesEvaluated++;
63
+ if (triggered)
64
+ this._gatesTriggered++;
65
+ }
66
+ addReviewFindingRecorded() {
67
+ this._reviewFindingsRecorded++;
68
+ }
69
+ // ─── ML methods ───────────────────────────────────────────
70
+ addGnnPrediction(highRiskCount) {
71
+ this._gnnPredictionsMade++;
72
+ this._highRiskNodesIdentified += highRiskCount;
73
+ }
74
+ addAgentDroppedML(estimatedTokensSaved) {
75
+ this._agentsDroppedML++;
76
+ this._dropoutTokensSaved += estimatedTokensSaved;
77
+ }
78
+ addAgentDroppedRules() {
79
+ this._agentsDroppedRules++;
80
+ }
81
+ addAffinityEscalation() {
82
+ this._affinityEscalations++;
83
+ }
84
+ addTrajectoryPrediction() {
85
+ this._trajectoryPredictionsMade++;
86
+ }
87
+ // ─── Adaptive methods ─────────────────────────────────────
88
+ addPhaseSkipped() {
89
+ this._phasesSkipped++;
90
+ }
91
+ addModelDowngrade() {
92
+ this._modelDowngrades++;
93
+ }
94
+ addModelUpgrade() {
95
+ this._modelUpgrades++;
96
+ }
97
+ addCascadeTierChange() {
98
+ this._cascadeTierChanges++;
99
+ }
100
+ addBudgetWarning() {
101
+ this._budgetWarnings++;
102
+ }
103
+ addLivingSpecUpdate() {
104
+ this._livingSpecUpdates++;
105
+ }
106
+ // ─── Build ────────────────────────────────────────────────
107
+ /**
108
+ * Build the final summary. Call at orchestration end.
109
+ *
110
+ * @param opts.actualTotalTokens — total input tokens actually consumed (used to compute savingsPercent)
111
+ * @param opts.actualCostUsd — total USD cost of the orchestration
112
+ * @param opts.durationMs — wall-clock duration in milliseconds
113
+ * @param opts.agentsExecuted — number of agents that ran
114
+ * @param opts.phasesExecuted — number of phases that ran
115
+ * @param opts.historicalAvgCostUsd — average cost for this pattern from history (null if none)
116
+ * @param opts.patternRunsRecorded — how many historical runs exist for this pattern
117
+ * @param opts.historicalSuccessRate — success rate from history (null if none)
118
+ */
119
+ build(opts) {
120
+ const totalTokensSaved = this._smartRoutingSaved +
121
+ this._promptCompressionSaved +
122
+ this._verbatimCompactionSaved +
123
+ this._contextDecaySaved +
124
+ this._dropoutTokensSaved;
125
+ // What would have been used without optimizations = actual + saved
126
+ const wouldHaveUsed = opts.actualTotalTokens + totalTokensSaved;
127
+ const savingsPercent = totalTokensSaved > 0 && wouldHaveUsed > 0 ? Math.round((totalTokensSaved / wouldHaveUsed) * 100) : 0;
128
+ const costDelta = opts.historicalAvgCostUsd != null ? opts.actualCostUsd - opts.historicalAvgCostUsd : null;
129
+ return {
130
+ tokens: {
131
+ smartRoutingSaved: this._smartRoutingSaved,
132
+ promptCompressionSaved: this._promptCompressionSaved,
133
+ verbatimCompactionSaved: this._verbatimCompactionSaved,
134
+ contextDecaySaved: this._contextDecaySaved,
135
+ cacheSavingsUsd: Math.round(this._cacheSavingsUsd * 10000) / 10000,
136
+ totalTokensSaved,
137
+ savingsPercent,
138
+ },
139
+ graph: {
140
+ contextRoutingDecisions: this._contextRoutingDecisions,
141
+ coModHintsInjected: this._coModHintsInjected,
142
+ confidenceGatesEvaluated: this._confidenceGatesEvaluated,
143
+ gatesTriggered: this._gatesTriggered,
144
+ patternRunsRecorded: opts.patternRunsRecorded ?? 0,
145
+ historicalSuccessRate: opts.historicalSuccessRate ?? null,
146
+ reviewFindingsRecorded: this._reviewFindingsRecorded,
147
+ },
148
+ ml: {
149
+ gnnPredictionsMade: this._gnnPredictionsMade,
150
+ highRiskNodesIdentified: this._highRiskNodesIdentified,
151
+ agentsDroppedML: this._agentsDroppedML,
152
+ agentsDroppedRules: this._agentsDroppedRules,
153
+ dropoutTokensSaved: this._dropoutTokensSaved,
154
+ affinityEscalations: this._affinityEscalations,
155
+ trajectoryPredictionsMade: this._trajectoryPredictionsMade,
156
+ },
157
+ adaptive: {
158
+ phasesSkipped: this._phasesSkipped,
159
+ modelDowngrades: this._modelDowngrades,
160
+ modelUpgrades: this._modelUpgrades,
161
+ cascadeTierChanges: this._cascadeTierChanges,
162
+ budgetWarnings: this._budgetWarnings,
163
+ livingSpecUpdates: this._livingSpecUpdates,
164
+ },
165
+ actualCostUsd: Math.round(opts.actualCostUsd * 10000) / 10000,
166
+ historicalAvgCostUsd: opts.historicalAvgCostUsd ?? null,
167
+ costDeltaUsd: costDelta != null ? Math.round(costDelta * 10000) / 10000 : null,
168
+ durationMs: opts.durationMs,
169
+ agentsExecuted: opts.agentsExecuted,
170
+ phasesExecuted: opts.phasesExecuted,
171
+ };
172
+ }
173
+ /** Reset all counters */
174
+ reset() {
175
+ this._smartRoutingSaved = 0;
176
+ this._promptCompressionSaved = 0;
177
+ this._verbatimCompactionSaved = 0;
178
+ this._contextDecaySaved = 0;
179
+ this._cacheSavingsUsd = 0;
180
+ this._contextRoutingDecisions = 0;
181
+ this._coModHintsInjected = 0;
182
+ this._confidenceGatesEvaluated = 0;
183
+ this._gatesTriggered = 0;
184
+ this._reviewFindingsRecorded = 0;
185
+ this._gnnPredictionsMade = 0;
186
+ this._highRiskNodesIdentified = 0;
187
+ this._agentsDroppedML = 0;
188
+ this._agentsDroppedRules = 0;
189
+ this._dropoutTokensSaved = 0;
190
+ this._affinityEscalations = 0;
191
+ this._trajectoryPredictionsMade = 0;
192
+ this._phasesSkipped = 0;
193
+ this._modelDowngrades = 0;
194
+ this._modelUpgrades = 0;
195
+ this._cascadeTierChanges = 0;
196
+ this._budgetWarnings = 0;
197
+ this._livingSpecUpdates = 0;
198
+ }
199
+ }
200
+ // ─── Formatter ────────────────────────────────────────────────
201
+ /** Format a number with commas: 12345 → "12,345" */
202
+ function fmtNum(n) {
203
+ return n.toLocaleString('en-US');
204
+ }
205
+ /** Format a USD amount to 4 decimal places */
206
+ function fmtUsd(n) {
207
+ return `$${n.toFixed(4)}`;
208
+ }
209
+ /**
210
+ * Format a BenefitsSummary into a human-readable string.
211
+ * Only shows sections that have at least one non-zero metric.
212
+ * Uses plain text (no box-drawing characters).
213
+ */
214
+ export function formatBenefitsSummary(summary) {
215
+ const sections = [];
216
+ // ─── Token Efficiency ───────────────────────────────────
217
+ const t = summary.tokens;
218
+ const tokenLines = [];
219
+ if (t.smartRoutingSaved > 0) {
220
+ tokenLines.push(` Smart routing saved ~${fmtNum(t.smartRoutingSaved)} tokens (filtered irrelevant phase outputs)`);
221
+ }
222
+ if (t.promptCompressionSaved > 0) {
223
+ tokenLines.push(` Prompt compression saved ~${fmtNum(t.promptCompressionSaved)} tokens (stripped markdown boilerplate)`);
224
+ }
225
+ if (t.verbatimCompactionSaved > 0) {
226
+ tokenLines.push(` Verbatim compaction saved ~${fmtNum(t.verbatimCompactionSaved)} tokens (replaced file reads with refs)`);
227
+ }
228
+ if (t.contextDecaySaved > 0) {
229
+ tokenLines.push(` Context decay saved ~${fmtNum(t.contextDecaySaved)} tokens (older phases summarized)`);
230
+ }
231
+ if (t.cacheSavingsUsd > 0) {
232
+ tokenLines.push(` Cache savings: ${fmtUsd(t.cacheSavingsUsd)} (shared prefix caching across parallel agents)`);
233
+ }
234
+ if (t.totalTokensSaved > 0) {
235
+ tokenLines.push(` Total: ~${fmtNum(t.totalTokensSaved)} tokens saved (${t.savingsPercent}% reduction)`);
236
+ }
237
+ if (tokenLines.length > 0) {
238
+ sections.push(`TOKEN EFFICIENCY\n${tokenLines.join('\n')}`);
239
+ }
240
+ // ─── Knowledge Graph ────────────────────────────────────
241
+ const g = summary.graph;
242
+ const graphLines = [];
243
+ if (g.contextRoutingDecisions > 0) {
244
+ graphLines.push(` ${fmtNum(g.contextRoutingDecisions)} context routing decisions (graph-optimized context per agent)`);
245
+ }
246
+ if (g.coModHintsInjected > 0) {
247
+ graphLines.push(` ${fmtNum(g.coModHintsInjected)} co-modification hints (suggested related files from history)`);
248
+ }
249
+ if (g.confidenceGatesEvaluated > 0) {
250
+ const triggeredPart = g.gatesTriggered > 0
251
+ ? `, ${fmtNum(g.gatesTriggered)} triggered (prevented low-quality handoff)`
252
+ : ', 0 triggered';
253
+ graphLines.push(` ${fmtNum(g.confidenceGatesEvaluated)} confidence gates evaluated${triggeredPart}`);
254
+ }
255
+ if (g.patternRunsRecorded > 0 && g.historicalSuccessRate != null) {
256
+ graphLines.push(` Pattern has ${g.historicalSuccessRate}% success rate across ${fmtNum(g.patternRunsRecorded)} historical runs`);
257
+ }
258
+ if (g.reviewFindingsRecorded > 0) {
259
+ graphLines.push(` ${fmtNum(g.reviewFindingsRecorded)} review findings recorded to graph`);
260
+ }
261
+ if (graphLines.length > 0) {
262
+ sections.push(`KNOWLEDGE GRAPH\n${graphLines.join('\n')}`);
263
+ }
264
+ // ─── ML/GNN Predictions ─────────────────────────────────
265
+ const m = summary.ml;
266
+ const mlLines = [];
267
+ if (m.gnnPredictionsMade > 0) {
268
+ mlLines.push(` ${fmtNum(m.gnnPredictionsMade)} GNN risk predictions, ${fmtNum(m.highRiskNodesIdentified)} high-risk nodes identified`);
269
+ }
270
+ if (m.agentsDroppedML > 0) {
271
+ mlLines.push(` ${fmtNum(m.agentsDroppedML)} agents dropped by predictive dropout (saved ~${fmtNum(m.dropoutTokensSaved)} tokens)`);
272
+ }
273
+ if (m.agentsDroppedRules > 0) {
274
+ mlLines.push(` ${fmtNum(m.agentsDroppedRules)} agents dropped by rule-based dropout`);
275
+ }
276
+ if (m.affinityEscalations > 0) {
277
+ mlLines.push(` ${fmtNum(m.affinityEscalations)} affinity escalation${m.affinityEscalations === 1 ? '' : 's'} (upgraded model for historically-difficult files)`);
278
+ }
279
+ if (m.trajectoryPredictionsMade > 0) {
280
+ mlLines.push(` ${fmtNum(m.trajectoryPredictionsMade)} trajectory predictions (success probability forecasts)`);
281
+ }
282
+ if (mlLines.length > 0) {
283
+ sections.push(`ML/GNN PREDICTIONS\n${mlLines.join('\n')}`);
284
+ }
285
+ // ─── Adaptive Optimization ──────────────────────────────
286
+ const a = summary.adaptive;
287
+ const adaptiveLines = [];
288
+ if (a.phasesSkipped > 0) {
289
+ adaptiveLines.push(` ${fmtNum(a.phasesSkipped)} phase${a.phasesSkipped === 1 ? '' : 's'} skipped (replanner determined ${a.phasesSkipped === 1 ? 'it was' : 'they were'} redundant)`);
290
+ }
291
+ if (a.modelDowngrades > 0) {
292
+ adaptiveLines.push(` ${fmtNum(a.modelDowngrades)} model downgrade${a.modelDowngrades === 1 ? '' : 's'} (used cheaper model where safe)`);
293
+ }
294
+ if (a.modelUpgrades > 0) {
295
+ adaptiveLines.push(` ${fmtNum(a.modelUpgrades)} model upgrade${a.modelUpgrades === 1 ? '' : 's'} (used more capable model where needed)`);
296
+ }
297
+ if (a.cascadeTierChanges > 0) {
298
+ adaptiveLines.push(` ${fmtNum(a.cascadeTierChanges)} cascade tier change${a.cascadeTierChanges === 1 ? '' : 's'} (started cheap, escalated on failure)`);
299
+ }
300
+ if (a.budgetWarnings > 0) {
301
+ adaptiveLines.push(` ${fmtNum(a.budgetWarnings)} budget warning${a.budgetWarnings === 1 ? '' : 's'} issued`);
302
+ }
303
+ if (a.livingSpecUpdates > 0) {
304
+ adaptiveLines.push(` Living spec refined ${fmtNum(a.livingSpecUpdates)} time${a.livingSpecUpdates === 1 ? '' : 's'} during execution`);
305
+ }
306
+ if (adaptiveLines.length > 0) {
307
+ sections.push(`ADAPTIVE OPTIMIZATION\n${adaptiveLines.join('\n')}`);
308
+ }
309
+ // ─── Cost line ──────────────────────────────────────────
310
+ let costLine = `COST: ${fmtUsd(summary.actualCostUsd)}`;
311
+ if (summary.historicalAvgCostUsd != null && summary.costDeltaUsd != null) {
312
+ const direction = summary.costDeltaUsd <= 0 ? 'saved' : 'over';
313
+ const delta = Math.abs(summary.costDeltaUsd);
314
+ costLine += ` (historical avg: ${fmtUsd(summary.historicalAvgCostUsd)}, ${direction} ${fmtUsd(delta)} vs baseline)`;
315
+ }
316
+ sections.push(costLine);
317
+ return sections.join('\n\n');
318
+ }
319
+ // ─── Styled Table Formatter ──────────────────────────────────
320
+ /** Measure display width in a monospace terminal (ASCII = 1 col) */
321
+ function displayWidth(s) {
322
+ let w = 0;
323
+ for (const ch of s) {
324
+ // East Asian wide characters take 2 columns; everything else takes 1.
325
+ // Simplified: codepoints above 0x1100 that are CJK/emoji get 2, rest get 1.
326
+ const cp = ch.codePointAt(0) ?? 0;
327
+ if ((cp >= 0x1100 && cp <= 0x115f) ||
328
+ (cp >= 0x2e80 && cp <= 0xa4cf) ||
329
+ (cp >= 0xac00 && cp <= 0xd7a3) ||
330
+ (cp >= 0xf900 && cp <= 0xfaff) ||
331
+ (cp >= 0xfe10 && cp <= 0xfe6f) ||
332
+ (cp >= 0xff01 && cp <= 0xff60) ||
333
+ (cp >= 0xffe0 && cp <= 0xffe6) ||
334
+ (cp >= 0x1f000 && cp <= 0x1faff) ||
335
+ (cp >= 0x20000 && cp <= 0x2fa1f)) {
336
+ w += 2;
337
+ }
338
+ else {
339
+ w += 1;
340
+ }
341
+ }
342
+ return w;
343
+ }
344
+ /** Right-pad a string to a target display width */
345
+ function padTo(s, target) {
346
+ const gap = target - displayWidth(s);
347
+ return s + ' '.repeat(Math.max(gap, 0));
348
+ }
349
+ /**
350
+ * Format a BenefitsSummary as a styled box-drawing table.
351
+ * Only shows sections that have at least one non-zero metric.
352
+ * No emojis inside the box — uses text labels to avoid alignment issues.
353
+ */
354
+ export function formatBenefitsTable(summary) {
355
+ const sections = [];
356
+ // ─── Token Efficiency ───────────────────────────────────
357
+ const t = summary.tokens;
358
+ const tokenRows = [];
359
+ if (t.smartRoutingSaved > 0) {
360
+ tokenRows.push({
361
+ label: 'Smart routing',
362
+ value: `-${fmtNum(t.smartRoutingSaved)} tok`,
363
+ detail: 'filtered phase outputs',
364
+ });
365
+ }
366
+ if (t.promptCompressionSaved > 0) {
367
+ tokenRows.push({
368
+ label: 'Prompt compression',
369
+ value: `-${fmtNum(t.promptCompressionSaved)} tok`,
370
+ detail: 'stripped boilerplate',
371
+ });
372
+ }
373
+ if (t.verbatimCompactionSaved > 0) {
374
+ tokenRows.push({
375
+ label: 'Verbatim compaction',
376
+ value: `-${fmtNum(t.verbatimCompactionSaved)} tok`,
377
+ detail: 'replaced with refs',
378
+ });
379
+ }
380
+ if (t.contextDecaySaved > 0) {
381
+ tokenRows.push({
382
+ label: 'Context decay',
383
+ value: `-${fmtNum(t.contextDecaySaved)} tok`,
384
+ detail: 'older phases summarized',
385
+ });
386
+ }
387
+ if (t.cacheSavingsUsd > 0) {
388
+ tokenRows.push({ label: 'Cache savings', value: fmtUsd(t.cacheSavingsUsd), detail: 'prefix sharing' });
389
+ }
390
+ if (t.totalTokensSaved > 0) {
391
+ tokenRows.push({
392
+ label: 'TOTAL SAVED',
393
+ value: `-${fmtNum(t.totalTokensSaved)} tok`,
394
+ detail: `${t.savingsPercent}% reduction`,
395
+ });
396
+ }
397
+ if (tokenRows.length > 0) {
398
+ sections.push({ title: 'TOKEN EFFICIENCY', rows: tokenRows });
399
+ }
400
+ // ─── Knowledge Graph ────────────────────────────────────
401
+ const g = summary.graph;
402
+ const graphRows = [];
403
+ if (g.contextRoutingDecisions > 0) {
404
+ graphRows.push({
405
+ label: 'Context routing',
406
+ value: `${fmtNum(g.contextRoutingDecisions)}`,
407
+ detail: 'graph-optimized per agent',
408
+ });
409
+ }
410
+ if (g.coModHintsInjected > 0) {
411
+ graphRows.push({
412
+ label: 'Co-mod hints',
413
+ value: `${fmtNum(g.coModHintsInjected)}`,
414
+ detail: 'related files from history',
415
+ });
416
+ }
417
+ if (g.confidenceGatesEvaluated > 0) {
418
+ const detail = g.gatesTriggered > 0 ? `${g.gatesTriggered} blocked handoff` : 'all passed';
419
+ graphRows.push({ label: 'Confidence gates', value: `${fmtNum(g.confidenceGatesEvaluated)} eval`, detail });
420
+ }
421
+ if (g.patternRunsRecorded > 0 && g.historicalSuccessRate != null) {
422
+ graphRows.push({
423
+ label: 'Pattern history',
424
+ value: `${g.historicalSuccessRate}% success`,
425
+ detail: `${fmtNum(g.patternRunsRecorded)} runs`,
426
+ });
427
+ }
428
+ if (g.reviewFindingsRecorded > 0) {
429
+ graphRows.push({
430
+ label: 'Review findings',
431
+ value: `${fmtNum(g.reviewFindingsRecorded)}`,
432
+ detail: 'recorded to graph',
433
+ });
434
+ }
435
+ if (graphRows.length > 0) {
436
+ sections.push({ title: 'KNOWLEDGE GRAPH', rows: graphRows });
437
+ }
438
+ // ─── ML/GNN ─────────────────────────────────────────────
439
+ const m = summary.ml;
440
+ const mlRows = [];
441
+ if (m.gnnPredictionsMade > 0) {
442
+ mlRows.push({
443
+ label: 'GNN risk scan',
444
+ value: `${fmtNum(m.highRiskNodesIdentified)} high-risk`,
445
+ detail: `${fmtNum(m.gnnPredictionsMade)} predictions`,
446
+ });
447
+ }
448
+ if (m.agentsDroppedML > 0) {
449
+ mlRows.push({
450
+ label: 'Predictive dropout',
451
+ value: `${fmtNum(m.agentsDroppedML)} agents`,
452
+ detail: `-${fmtNum(m.dropoutTokensSaved)} tok saved`,
453
+ });
454
+ }
455
+ if (m.agentsDroppedRules > 0) {
456
+ mlRows.push({
457
+ label: 'Rule-based dropout',
458
+ value: `${fmtNum(m.agentsDroppedRules)} agents`,
459
+ detail: 'redundant removed',
460
+ });
461
+ }
462
+ if (m.affinityEscalations > 0) {
463
+ mlRows.push({
464
+ label: 'Affinity escalation',
465
+ value: `${fmtNum(m.affinityEscalations)}`,
466
+ detail: 'model upgraded for hard files',
467
+ });
468
+ }
469
+ if (m.trajectoryPredictionsMade > 0) {
470
+ mlRows.push({
471
+ label: 'Trajectory forecast',
472
+ value: `${fmtNum(m.trajectoryPredictionsMade)}`,
473
+ detail: 'success probabilities',
474
+ });
475
+ }
476
+ if (mlRows.length > 0) {
477
+ sections.push({ title: 'ML / GNN', rows: mlRows });
478
+ }
479
+ // ─── Adaptive ───────────────────────────────────────────
480
+ const a = summary.adaptive;
481
+ const adaptiveRows = [];
482
+ if (a.phasesSkipped > 0) {
483
+ adaptiveRows.push({ label: 'Phases skipped', value: `${fmtNum(a.phasesSkipped)}`, detail: 'replanner: redundant' });
484
+ }
485
+ if (a.modelDowngrades > 0) {
486
+ adaptiveRows.push({
487
+ label: 'Model downgrades',
488
+ value: `${fmtNum(a.modelDowngrades)}`,
489
+ detail: 'cheaper where safe',
490
+ });
491
+ }
492
+ if (a.modelUpgrades > 0) {
493
+ adaptiveRows.push({
494
+ label: 'Model upgrades',
495
+ value: `${fmtNum(a.modelUpgrades)}`,
496
+ detail: 'stronger where needed',
497
+ });
498
+ }
499
+ if (a.cascadeTierChanges > 0) {
500
+ adaptiveRows.push({
501
+ label: 'Cascade changes',
502
+ value: `${fmtNum(a.cascadeTierChanges)}`,
503
+ detail: 'start cheap, escalate',
504
+ });
505
+ }
506
+ if (a.livingSpecUpdates > 0) {
507
+ adaptiveRows.push({
508
+ label: 'Living spec',
509
+ value: `${fmtNum(a.livingSpecUpdates)} updates`,
510
+ detail: 'refined during run',
511
+ });
512
+ }
513
+ if (adaptiveRows.length > 0) {
514
+ sections.push({ title: 'ADAPTIVE', rows: adaptiveRows });
515
+ }
516
+ // ─── Pre-compute cost bar to include in width calc ──────
517
+ let costText = `Cost: ${fmtUsd(summary.actualCostUsd)}`;
518
+ if (summary.historicalAvgCostUsd != null && summary.costDeltaUsd != null) {
519
+ const dir = summary.costDeltaUsd <= 0 ? 'saved' : 'over';
520
+ costText += ` (avg: ${fmtUsd(summary.historicalAvgCostUsd)}, ${dir} ${fmtUsd(Math.abs(summary.costDeltaUsd))})`;
521
+ }
522
+ if (summary.tokens.savingsPercent > 0) {
523
+ costText += ` | ${summary.tokens.savingsPercent}% tokens saved`;
524
+ }
525
+ costText += ` | ${fmtNum(summary.agentsExecuted)} agents | ${fmtNum(summary.phasesExecuted)} phases | ${(summary.durationMs / 1000).toFixed(1)}s`;
526
+ // ─── Compute column widths ──────────────────────────────
527
+ const allRows = sections.flatMap((s) => s.rows);
528
+ const treePrefix = 5; // " ├─ " or " └─ "
529
+ const labelW = Math.max(20, ...allRows.map((r) => displayWidth(r.label)));
530
+ const valueW = Math.max(14, ...allRows.map((r) => displayWidth(r.value)));
531
+ const detailW = Math.max(20, ...allRows.map((r) => displayWidth(r.detail)));
532
+ // Row content: " " + tree + label + " " + value + " " + detail + " "
533
+ const rowInnerW = 2 + treePrefix + labelW + 2 + valueW + 2 + detailW + 2;
534
+ // Cost bar wraps if needed — don't let it blow out the table width
535
+ const costInnerW = Math.min(2 + displayWidth(costText) + 2, rowInnerW + 10);
536
+ const innerW = Math.max(rowInnerW, costInnerW, 64);
537
+ // ─── Build table ────────────────────────────────────────
538
+ const H = '\u2500'; // ─
539
+ const V = '\u2502'; // │
540
+ const TL = '\u250c'; // ┌
541
+ const TR = '\u2510'; // ┐
542
+ const BL = '\u2514'; // └
543
+ const BR = '\u2518'; // ┘
544
+ const LT = '\u251c'; // ├
545
+ const RT = '\u2524'; // ┤
546
+ const bottomBorder = `${BL}${H.repeat(innerW)}${BR}`;
547
+ const separator = `${LT}${H.repeat(innerW)}${RT}`;
548
+ const emptyRow = `${V}${' '.repeat(innerW)}${V}`;
549
+ const lines = [];
550
+ // Title row
551
+ const title = ' Engine Benefits ';
552
+ const titlePad = innerW - displayWidth(title) - 1;
553
+ lines.push(`${TL}${H}${title}${H.repeat(Math.max(0, titlePad))}${TR}`);
554
+ // Cost bar at top — truncate if wider than table
555
+ const maxCostW = innerW - 4; // 2 padding each side
556
+ if (displayWidth(costText) > maxCostW) {
557
+ // Trim from the end (drop duration/phases if needed)
558
+ let trimmed = costText;
559
+ while (displayWidth(trimmed) > maxCostW - 3 && trimmed.length > 0) {
560
+ trimmed = trimmed.slice(0, -1);
561
+ }
562
+ costText = trimmed.trimEnd() + '...';
563
+ }
564
+ lines.push(`${V} ${padTo(costText, innerW - 2)}${V}`);
565
+ lines.push(separator);
566
+ for (let si = 0; si < sections.length; si++) {
567
+ const section = sections[si];
568
+ // Section header
569
+ lines.push(`${V} ${padTo(section.title, innerW - 2)}${V}`);
570
+ for (let ri = 0; ri < section.rows.length; ri++) {
571
+ const row = section.rows[ri];
572
+ const isLast = ri === section.rows.length - 1;
573
+ const tree = isLast ? '\u2514\u2500' : '\u251c\u2500'; // └─ or ├─
574
+ const labelPart = `${tree} ${padTo(row.label, labelW)}`;
575
+ const valuePart = padTo(row.value, valueW);
576
+ const detailPart = padTo(row.detail, detailW);
577
+ const content = `${labelPart} ${valuePart} ${detailPart}`;
578
+ lines.push(`${V} ${padTo(content, innerW - 2)}${V}`);
579
+ }
580
+ // Add separator between sections (not after last)
581
+ if (si < sections.length - 1) {
582
+ lines.push(emptyRow);
583
+ }
584
+ }
585
+ lines.push(bottomBorder);
586
+ return lines.join('\n');
587
+ }
588
+ //# sourceMappingURL=benefits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benefits.js","sourceRoot":"","sources":["../../src/runtime/benefits.ts"],"names":[],"mappings":"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"}