@relayplane/proxy 1.5.25 → 1.5.28

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,634 @@
1
+ "use strict";
2
+ /**
3
+ * Osmosis Mesh Integration for RelayPlane Proxy
4
+ *
5
+ * Connects the proxy to the collective knowledge mesh via dynamic imports.
6
+ * Includes Level 1 (local aggregation) and Level 2 (LLM distillation).
7
+ * All mesh features are failure-tolerant and never crash the proxy.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.DEFAULT_DISTILL_CONFIG = exports.DEFAULT_MESH_CONFIG = void 0;
44
+ exports.initMesh = initMesh;
45
+ exports.recordMeshAtom = recordMeshAtom;
46
+ exports.getMeshRoutingHint = getMeshRoutingHint;
47
+ exports.getMeshStatus = getMeshStatus;
48
+ exports.triggerManualSync = triggerManualSync;
49
+ exports.getMeshTips = getMeshTips;
50
+ exports.getMeshQuery = getMeshQuery;
51
+ exports.getMeshAtoms = getMeshAtoms;
52
+ exports.shutdownMesh = shutdownMesh;
53
+ const path = __importStar(require("node:path"));
54
+ const os = __importStar(require("node:os"));
55
+ const fs = __importStar(require("node:fs"));
56
+ exports.DEFAULT_MESH_CONFIG = {
57
+ enabled: false,
58
+ contribute: false,
59
+ meshUrl: 'https://mesh.relayplane.com',
60
+ syncIntervalMs: 300_000,
61
+ dataDir: path.join(os.homedir(), '.relayplane', 'mesh'),
62
+ };
63
+ exports.DEFAULT_DISTILL_CONFIG = {
64
+ enabled: false,
65
+ apiKey: '',
66
+ model: 'gpt-4o-mini',
67
+ batchSize: 50,
68
+ };
69
+ const aggregationCounters = new Map();
70
+ const AGGREGATION_THRESHOLD = 20;
71
+ function getAggKey(model, taskType) {
72
+ return `${model}::${taskType}`;
73
+ }
74
+ function computeP95(latencies) {
75
+ if (latencies.length === 0)
76
+ return 0;
77
+ const sorted = [...latencies].sort((a, b) => a - b);
78
+ const idx = Math.ceil(sorted.length * 0.95) - 1;
79
+ return sorted[Math.max(0, idx)];
80
+ }
81
+ function tryCreatePatternAtom(key, counter) {
82
+ if (!atomStore || !meshAvailable)
83
+ return;
84
+ try {
85
+ const [model, taskType] = key.split('::');
86
+ const successRate = counter.successes / counter.count;
87
+ const avgLatency = counter.totalLatency / counter.count;
88
+ const avgCost = counter.totalCost / counter.count;
89
+ const p95 = computeP95(counter.latencies);
90
+ const observation = `${model} for ${taskType}: ${Math.round(successRate * 100)}% success, avg ${(avgLatency / 1000).toFixed(1)}s, $${avgCost.toFixed(4)}/call, p95 ${(p95 / 1000).toFixed(1)}s (n=${counter.count})`;
91
+ atomStore.createAtom({
92
+ type: 'pattern',
93
+ observation,
94
+ context: JSON.stringify({
95
+ model,
96
+ task_type: taskType,
97
+ success_rate: successRate,
98
+ avg_latency_ms: Math.round(avgLatency),
99
+ avg_cost_usd: avgCost,
100
+ p95_latency_ms: Math.round(p95),
101
+ sample_size: counter.count,
102
+ source: 'level1-aggregation',
103
+ }),
104
+ confidence: Math.min(0.5 + counter.count * 0.01, 0.95),
105
+ fitness_score: 0.85,
106
+ trust_tier: 'verified',
107
+ source_agent_hash: `proxy-${os.hostname()}`,
108
+ decay_rate: 0.995,
109
+ });
110
+ patternCount++;
111
+ }
112
+ catch {
113
+ // Never crash
114
+ }
115
+ }
116
+ // ── Level 2: LLM Distillation State ─────────────────────────
117
+ let distiller = null;
118
+ let distillConfig = { ...exports.DEFAULT_DISTILL_CONFIG };
119
+ let lastDistillRun = null;
120
+ let totalDistilled = 0;
121
+ let patternCount = 0;
122
+ // ── Lazy-loaded references ───────────────────────────────────
123
+ let atomStore = null;
124
+ let syncHandle = null;
125
+ let meshAvailable = false;
126
+ let lastSyncTimestamp;
127
+ let lastSyncErrors = [];
128
+ // ── User plan check ──────────────────────────────────────────
129
+ function getUserPlan() {
130
+ try {
131
+ const credPath = path.join(os.homedir(), '.relayplane', 'credentials.json');
132
+ const raw = fs.readFileSync(credPath, 'utf8');
133
+ const creds = JSON.parse(raw);
134
+ return creds.plan || 'free';
135
+ }
136
+ catch {
137
+ return 'free';
138
+ }
139
+ }
140
+ function isMeshAllowed() {
141
+ const plan = getUserPlan();
142
+ return plan !== 'free'; // Starter+ gets mesh access
143
+ }
144
+ // ── Initialize ───────────────────────────────────────────────
145
+ async function initMesh(config, log) {
146
+ if (!config.enabled) {
147
+ log('Mesh: disabled in config');
148
+ return;
149
+ }
150
+ if (!isMeshAllowed()) {
151
+ log('Mesh: not available on free tier');
152
+ return;
153
+ }
154
+ try {
155
+ // Dynamic import so proxy works without mesh packages
156
+ const meshCore = await import('@relayplane/mesh-core');
157
+ // Ensure data directory exists
158
+ fs.mkdirSync(config.dataDir, { recursive: true });
159
+ const dbPath = path.join(config.dataDir, 'atoms.db');
160
+ atomStore = new meshCore.AtomStore(dbPath);
161
+ meshAvailable = true;
162
+ log(`Mesh: initialized (store at ${dbPath})`);
163
+ // Initialize distill config
164
+ distillConfig = { ...exports.DEFAULT_DISTILL_CONFIG, ...(config.distill || {}) };
165
+ // Initialize Level 2 LLM distillation if configured
166
+ if (distillConfig.enabled && distillConfig.apiKey) {
167
+ try {
168
+ const meshCoreDistill = await import('@relayplane/mesh-core');
169
+ const { BatchDistiller, llmDistill, toCreateAtoms } = meshCoreDistill;
170
+ distiller = new BatchDistiller({
171
+ batchSize: distillConfig.batchSize,
172
+ distillFn: async (trace) => {
173
+ // We accumulate and batch-distill on flush, not per-trace
174
+ return null;
175
+ },
176
+ });
177
+ // Override flush to use LLM distillation
178
+ const originalFlush = distiller.flush.bind(distiller);
179
+ distiller.flushWithLLM = async () => {
180
+ const traces = distiller.drain();
181
+ if (traces.length === 0)
182
+ return;
183
+ try {
184
+ const distilled = await llmDistill(traces, {
185
+ apiUrl: 'https://api.openai.com/v1/chat/completions',
186
+ apiKey: distillConfig.apiKey,
187
+ model: distillConfig.model,
188
+ minTraces: 5,
189
+ maxTokens: 1024,
190
+ });
191
+ const createAtoms = toCreateAtoms(distilled, `proxy-${os.hostname()}`);
192
+ for (const atomData of createAtoms) {
193
+ try {
194
+ // Set distilled atoms to 'verified' so they get pushed to mesh
195
+ atomData.trust_tier = 'verified';
196
+ atomData.fitness_score = Math.max(atomData.fitness_score || 0, 0.8);
197
+ if (atomData.type === 'negative') {
198
+ atomStore.createNegativeAtom(atomData);
199
+ }
200
+ else {
201
+ atomStore.createToolAtom(atomData);
202
+ }
203
+ totalDistilled++;
204
+ }
205
+ catch { /* skip individual atom errors */ }
206
+ }
207
+ lastDistillRun = new Date().toISOString();
208
+ log(`Mesh: LLM distillation produced ${createAtoms.length} atoms from ${traces.length} traces`);
209
+ }
210
+ catch (err) {
211
+ log(`Mesh: LLM distillation failed — ${err.message}`);
212
+ }
213
+ };
214
+ log(`Mesh: Level 2 LLM distillation enabled (model: ${distillConfig.model}, batch: ${distillConfig.batchSize})`);
215
+ }
216
+ catch (err) {
217
+ log(`Mesh: Level 2 distillation init failed — ${err.message}`);
218
+ distiller = null;
219
+ }
220
+ }
221
+ // Start background sync if enabled
222
+ if (config.syncIntervalMs > 0) {
223
+ startSyncLoop(config, log);
224
+ }
225
+ }
226
+ catch (err) {
227
+ log(`Mesh: failed to initialize — ${err.message}`);
228
+ meshAvailable = false;
229
+ }
230
+ }
231
+ // ── Sync Loop ────────────────────────────────────────────────
232
+ function startSyncLoop(config, log) {
233
+ if (syncHandle)
234
+ return;
235
+ const doSync = async () => {
236
+ if (!atomStore || !meshAvailable)
237
+ return;
238
+ try {
239
+ const meshSync = await import('@relayplane/mesh-sync');
240
+ // Pull always (if mesh enabled)
241
+ const pullResult = await meshSync.pullAtoms(atomStore, config.meshUrl);
242
+ // Push only if contributing — only distilled/pattern atoms get pushed
243
+ // Raw ToolAtoms have trust_tier='local' and won't be shared
244
+ // PatternAtoms and LLM-distilled atoms have trust_tier='verified'
245
+ let pushResult = { pushed: 0, errors: [] };
246
+ if (config.contribute) {
247
+ pushResult = await meshSync.pushAtoms(atomStore, config.meshUrl);
248
+ }
249
+ lastSyncTimestamp = new Date().toISOString();
250
+ lastSyncErrors = [...(pullResult.errors || []), ...(pushResult.errors || [])];
251
+ if (pullResult.pulled > 0 || pushResult.pushed > 0) {
252
+ log(`Mesh sync: pulled ${pullResult.pulled}, pushed ${pushResult.pushed}`);
253
+ }
254
+ }
255
+ catch (err) {
256
+ lastSyncErrors = [err.message];
257
+ log(`Mesh sync error: ${err.message}`);
258
+ }
259
+ };
260
+ // Initial sync after short delay
261
+ setTimeout(() => doSync().catch(() => { }), 5000);
262
+ // Periodic sync
263
+ syncHandle = setInterval(() => doSync().catch(() => { }), config.syncIntervalMs);
264
+ }
265
+ // ── Record Request Atom ──────────────────────────────────────
266
+ function recordMeshAtom(data) {
267
+ if (!atomStore || !meshAvailable)
268
+ return;
269
+ try {
270
+ const agentHash = `proxy-${os.hostname()}`;
271
+ // Store raw ToolAtom with trust_tier='local' (won't be pushed to mesh)
272
+ atomStore.createToolAtom({
273
+ type: 'tool',
274
+ observation: `${data.taskType} request: ${data.originalModel} → ${data.modelUsed} | ${data.success ? 'success' : 'failure'} | ${data.latencyMs}ms | $${data.costUsd.toFixed(4)}`,
275
+ context: JSON.stringify({
276
+ task_type: data.taskType,
277
+ model_used: data.modelUsed,
278
+ original_model: data.originalModel,
279
+ tokens_in: data.tokensIn,
280
+ tokens_out: data.tokensOut,
281
+ cost_usd: data.costUsd,
282
+ latency_ms: data.latencyMs,
283
+ routing_changed: data.routingChanged,
284
+ }),
285
+ confidence: data.success ? 0.8 : 0.6,
286
+ fitness_score: data.success ? 0.7 : 0.3,
287
+ trust_tier: 'local',
288
+ source_agent_hash: agentHash,
289
+ decay_rate: 0.99,
290
+ tool_name: data.modelUsed,
291
+ params_hash: data.taskType,
292
+ outcome: (data.success ? 'success' : 'failure'),
293
+ error_signature: null,
294
+ latency_ms: data.latencyMs,
295
+ reliability_score: data.success ? 0.9 : 0.1,
296
+ });
297
+ // ── Level 1: Local Aggregation ─────────────────────────
298
+ const aggKey = getAggKey(data.modelUsed, data.taskType);
299
+ let counter = aggregationCounters.get(aggKey);
300
+ if (!counter) {
301
+ counter = { count: 0, successes: 0, failures: 0, totalLatency: 0, totalCost: 0, latencies: [] };
302
+ aggregationCounters.set(aggKey, counter);
303
+ }
304
+ counter.count++;
305
+ if (data.success)
306
+ counter.successes++;
307
+ else
308
+ counter.failures++;
309
+ counter.totalLatency += data.latencyMs;
310
+ counter.totalCost += data.costUsd;
311
+ counter.latencies.push(data.latencyMs);
312
+ if (counter.count >= AGGREGATION_THRESHOLD) {
313
+ tryCreatePatternAtom(aggKey, counter);
314
+ // Reset counter
315
+ aggregationCounters.set(aggKey, { count: 0, successes: 0, failures: 0, totalLatency: 0, totalCost: 0, latencies: [] });
316
+ }
317
+ // ── Level 2: Feed to LLM Distiller ─────────────────────
318
+ if (distiller) {
319
+ const trace = {
320
+ toolName: data.modelUsed,
321
+ params: { task_type: data.taskType, original_model: data.originalModel },
322
+ result: { tokens_in: data.tokensIn, tokens_out: data.tokensOut, cost_usd: data.costUsd },
323
+ error: data.success ? null : 'request_failure',
324
+ latencyMs: data.latencyMs,
325
+ outcome: (data.success ? 'success' : 'failure'),
326
+ agentId: agentHash,
327
+ timestamp: new Date().toISOString(),
328
+ };
329
+ const batchReady = distiller.add(trace);
330
+ if (batchReady && distiller.flushWithLLM) {
331
+ // Non-blocking LLM distillation
332
+ distiller.flushWithLLM().catch(() => { });
333
+ }
334
+ }
335
+ }
336
+ catch {
337
+ // Never crash the proxy
338
+ }
339
+ }
340
+ // ── Routing Hints ────────────────────────────────────────────
341
+ function getMeshRoutingHint(taskType, candidateModel) {
342
+ if (!atomStore || !meshAvailable)
343
+ return null;
344
+ try {
345
+ // Query atoms related to this task type + model
346
+ const atoms = atomStore.search(taskType);
347
+ if (!atoms || atoms.length === 0)
348
+ return null;
349
+ // Filter to atoms about the candidate model
350
+ const relevant = atoms.filter((a) => {
351
+ try {
352
+ const ctx = JSON.parse(a.context || '{}');
353
+ return ctx.model_used === candidateModel || ctx.original_model === candidateModel;
354
+ }
355
+ catch {
356
+ return a.observation?.includes(candidateModel);
357
+ }
358
+ });
359
+ if (relevant.length < 3)
360
+ return null; // Need enough data
361
+ // Calculate failure rate
362
+ const failures = relevant.filter((a) => a.outcome === 'failure').length;
363
+ const failureRate = failures / relevant.length;
364
+ if (failureRate > 0.5) {
365
+ return {
366
+ avoidModel: candidateModel,
367
+ reason: `Mesh data: ${candidateModel} has ${Math.round(failureRate * 100)}% failure rate for ${taskType} tasks (${relevant.length} observations)`,
368
+ };
369
+ }
370
+ return null;
371
+ }
372
+ catch {
373
+ return null;
374
+ }
375
+ }
376
+ // ── API Handlers ─────────────────────────────────────────────
377
+ function getMeshStatus(config) {
378
+ const allAtoms = atomStore ? (atomStore.getAll() ?? []) : [];
379
+ const rawCount = allAtoms.filter((a) => a.type === 'tool' && a.trust_tier === 'local').length;
380
+ const patCount = allAtoms.filter((a) => a.type === 'pattern').length;
381
+ return {
382
+ available: meshAvailable,
383
+ enabled: config.enabled,
384
+ atomCount: allAtoms.length,
385
+ contributing: config.contribute,
386
+ meshUrl: config.meshUrl,
387
+ dataDir: config.dataDir,
388
+ lastSync: lastSyncTimestamp,
389
+ syncErrors: lastSyncErrors.length > 0 ? lastSyncErrors : undefined,
390
+ distillation: {
391
+ enabled: distillConfig.enabled && !!distillConfig.apiKey,
392
+ pendingTraces: distiller ? distiller.pending : 0,
393
+ lastRun: lastDistillRun,
394
+ totalDistilled,
395
+ },
396
+ patterns: patCount,
397
+ rawAtoms: rawCount,
398
+ };
399
+ }
400
+ async function triggerManualSync(config) {
401
+ if (!atomStore || !meshAvailable) {
402
+ return { success: false, message: 'Mesh not initialized' };
403
+ }
404
+ try {
405
+ const meshSync = await import('@relayplane/mesh-sync');
406
+ const result = await meshSync.syncWithMesh(atomStore, config.meshUrl);
407
+ lastSyncTimestamp = new Date().toISOString();
408
+ lastSyncErrors = result.errors || [];
409
+ return {
410
+ success: true,
411
+ message: `Synced: pushed ${result.pushed}, pulled ${result.pulled}, deduped ${result.deduped}`,
412
+ };
413
+ }
414
+ catch (err) {
415
+ return { success: false, message: err.message };
416
+ }
417
+ }
418
+ function getMeshTips(taskType) {
419
+ if (!atomStore || !meshAvailable) {
420
+ return { tips: [], warnings: [], lastDistillation: null, totalAtoms: 0, distilledAtoms: 0 };
421
+ }
422
+ try {
423
+ const allAtoms = atomStore.getAll();
424
+ // Prefer PatternAtoms and high-fitness atoms
425
+ const patterns = allAtoms.filter((a) => a.type === 'pattern');
426
+ const highFitness = allAtoms.filter((a) => a.fitness_score >= 0.8 && a.type !== 'pattern');
427
+ // Build model stats from patterns and raw atoms
428
+ const modelStats = new Map();
429
+ // Parse pattern atoms for stats
430
+ for (const atom of patterns) {
431
+ try {
432
+ const ctx = JSON.parse(atom.context || '{}');
433
+ const model = ctx.model;
434
+ const tt = ctx.task_type;
435
+ if (!model || !tt)
436
+ continue;
437
+ if (taskType && tt !== taskType)
438
+ continue;
439
+ if (!modelStats.has(tt))
440
+ modelStats.set(tt, new Map());
441
+ modelStats.get(tt).set(model, {
442
+ successRate: ctx.success_rate,
443
+ avgCost: ctx.avg_cost_usd,
444
+ avgLatency: ctx.avg_latency_ms,
445
+ sampleSize: ctx.sample_size,
446
+ confidence: atom.confidence,
447
+ });
448
+ }
449
+ catch { /* skip */ }
450
+ }
451
+ // Fallback: aggregate from raw ToolAtoms if no patterns yet
452
+ if (modelStats.size === 0) {
453
+ const toolAtoms = allAtoms.filter((a) => a.type === 'tool');
454
+ for (const atom of toolAtoms.slice(0, 500)) {
455
+ try {
456
+ const ctx = JSON.parse(atom.context || '{}');
457
+ const model = ctx.model_used;
458
+ const tt = ctx.task_type;
459
+ if (!model || !tt)
460
+ continue;
461
+ if (taskType && tt !== taskType)
462
+ continue;
463
+ if (!modelStats.has(tt))
464
+ modelStats.set(tt, new Map());
465
+ const existing = modelStats.get(tt).get(model) || {
466
+ successRate: 0, avgCost: 0, avgLatency: 0, sampleSize: 0, confidence: 0,
467
+ };
468
+ const n = existing.sampleSize;
469
+ const isSuccess = atom.outcome === 'success' ? 1 : 0;
470
+ existing.successRate = (existing.successRate * n + isSuccess) / (n + 1);
471
+ existing.avgCost = (existing.avgCost * n + (ctx.cost_usd || 0)) / (n + 1);
472
+ existing.avgLatency = (existing.avgLatency * n + (ctx.latency_ms || 0)) / (n + 1);
473
+ existing.sampleSize = n + 1;
474
+ existing.confidence = Math.min(0.5 + (n + 1) * 0.01, 0.95);
475
+ modelStats.get(tt).set(model, existing);
476
+ }
477
+ catch { /* skip */ }
478
+ }
479
+ }
480
+ const tips = [];
481
+ const warnings = [];
482
+ for (const [tt, models] of modelStats) {
483
+ // Sort models by success rate to find best alternative
484
+ const sorted = [...models.entries()].sort((a, b) => b[1].successRate - a[1].successRate);
485
+ const bestModel = sorted[0]?.[0];
486
+ for (const [model, stats] of models) {
487
+ if (stats.sampleSize < 3)
488
+ continue;
489
+ if (stats.successRate >= 0.8) {
490
+ tips.push({
491
+ model,
492
+ taskType: tt,
493
+ recommendation: 'preferred',
494
+ reason: `${Math.round(stats.successRate * 100)}% success rate, avg $${stats.avgCost.toFixed(4)}/call (n=${stats.sampleSize})`,
495
+ confidence: stats.confidence,
496
+ });
497
+ }
498
+ else if (stats.successRate < 0.5 && stats.sampleSize >= 5) {
499
+ const tip = {
500
+ model,
501
+ taskType: tt,
502
+ recommendation: 'avoid',
503
+ reason: `${Math.round(stats.successRate * 100)}% failure rate for ${tt} tasks (n=${stats.sampleSize})`,
504
+ confidence: stats.confidence,
505
+ };
506
+ if (bestModel && bestModel !== model) {
507
+ tip.alternative = bestModel;
508
+ }
509
+ tips.push(tip);
510
+ warnings.push(`${model} has high failure rate for ${tt} tasks`);
511
+ }
512
+ }
513
+ }
514
+ return {
515
+ tips: tips.sort((a, b) => b.confidence - a.confidence).slice(0, 20),
516
+ warnings,
517
+ lastDistillation: lastDistillRun,
518
+ totalAtoms: allAtoms.length,
519
+ distilledAtoms: totalDistilled + patternCount,
520
+ };
521
+ }
522
+ catch {
523
+ return { tips: [], warnings: [], lastDistillation: null, totalAtoms: 0, distilledAtoms: 0 };
524
+ }
525
+ }
526
+ function getMeshQuery(taskType, model, limit = 10) {
527
+ if (!atomStore || !meshAvailable) {
528
+ return { taskType: taskType || null, rankings: [], warnings: [], source: 'unavailable' };
529
+ }
530
+ try {
531
+ const allAtoms = atomStore.getAll();
532
+ // Build rankings from pattern atoms first, fall back to raw tool atoms
533
+ const modelData = new Map();
534
+ // Check pattern atoms first
535
+ const patterns = allAtoms.filter((a) => a.type === 'pattern');
536
+ let source = 'local';
537
+ for (const atom of patterns) {
538
+ try {
539
+ const ctx = JSON.parse(atom.context || '{}');
540
+ if (taskType && ctx.task_type !== taskType)
541
+ continue;
542
+ if (model && ctx.model !== model)
543
+ continue;
544
+ const m = ctx.model;
545
+ if (!m)
546
+ continue;
547
+ const existing = modelData.get(m) || { successes: 0, total: 0, totalCost: 0, totalLatency: 0 };
548
+ existing.successes += Math.round(ctx.success_rate * ctx.sample_size);
549
+ existing.total += ctx.sample_size;
550
+ existing.totalCost += ctx.avg_cost_usd * ctx.sample_size;
551
+ existing.totalLatency += ctx.avg_latency_ms * ctx.sample_size;
552
+ modelData.set(m, existing);
553
+ source = 'local+mesh';
554
+ }
555
+ catch { /* skip */ }
556
+ }
557
+ // Supplement with raw tool atoms
558
+ const toolAtoms = allAtoms.filter((a) => a.type === 'tool');
559
+ for (const atom of toolAtoms) {
560
+ try {
561
+ const ctx = JSON.parse(atom.context || '{}');
562
+ if (taskType && ctx.task_type !== taskType)
563
+ continue;
564
+ if (model && ctx.model_used !== model)
565
+ continue;
566
+ const m = ctx.model_used;
567
+ if (!m)
568
+ continue;
569
+ const existing = modelData.get(m) || { successes: 0, total: 0, totalCost: 0, totalLatency: 0 };
570
+ existing.total++;
571
+ if (atom.outcome === 'success')
572
+ existing.successes++;
573
+ existing.totalCost += ctx.cost_usd || 0;
574
+ existing.totalLatency += ctx.latency_ms || 0;
575
+ modelData.set(m, existing);
576
+ }
577
+ catch { /* skip */ }
578
+ }
579
+ const warnings = [];
580
+ const rankings = [];
581
+ for (const [m, data] of modelData) {
582
+ if (data.total < 1)
583
+ continue;
584
+ const successRate = data.successes / data.total;
585
+ const avgCost = data.totalCost / data.total;
586
+ const avgLatency = Math.round(data.totalLatency / data.total);
587
+ // Score: weighted combination of success rate (primary) and cost efficiency
588
+ const score = parseFloat((successRate * 0.7 + (1 - Math.min(avgCost, 0.1) / 0.1) * 0.3).toFixed(2));
589
+ rankings.push({ model: m, score, successRate: parseFloat(successRate.toFixed(3)), avgCost: parseFloat(avgCost.toFixed(4)), avgLatency, sampleSize: data.total });
590
+ if (successRate < 0.5 && data.total >= 5) {
591
+ warnings.push(`${m}: ${Math.round((1 - successRate) * 100)}% failure rate (n=${data.total})`);
592
+ }
593
+ }
594
+ rankings.sort((a, b) => b.score - a.score);
595
+ return {
596
+ taskType: taskType || null,
597
+ rankings: rankings.slice(0, limit),
598
+ warnings,
599
+ source,
600
+ };
601
+ }
602
+ catch {
603
+ return { taskType: taskType || null, rankings: [], warnings: [], source: 'error' };
604
+ }
605
+ }
606
+ function getMeshAtoms(limit = 100, offset = 0) {
607
+ if (!atomStore || !meshAvailable)
608
+ return [];
609
+ try {
610
+ const all = atomStore.getAll();
611
+ return all.slice(offset, offset + limit);
612
+ }
613
+ catch {
614
+ return [];
615
+ }
616
+ }
617
+ // ── Shutdown ─────────────────────────────────────────────────
618
+ function shutdownMesh() {
619
+ if (syncHandle) {
620
+ clearInterval(syncHandle);
621
+ syncHandle = null;
622
+ }
623
+ if (atomStore) {
624
+ try {
625
+ atomStore.close();
626
+ }
627
+ catch { /* ignore */ }
628
+ atomStore = null;
629
+ }
630
+ meshAvailable = false;
631
+ distiller = null;
632
+ aggregationCounters.clear();
633
+ }
634
+ //# sourceMappingURL=mesh-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-integration.js","sourceRoot":"","sources":["../src/mesh-integration.ts"],"names":[],"mappings":"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"}