mythos-router 1.2.1 → 1.3.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.3.0] — 2026-04-26
11
+
12
+ ### Added
13
+ - **Provider Observability Dashboard** — Added the `mythos providers` command. A real-time, terminal-based dashboard that surfaces EMA latency trends, success rates, circuit breaker recovery ETAs, and a live "Leader" score. Includes a zero-flicker `--watch` mode.
14
+ - **SQLite Telemetry Backend** — Orchestration events are now persistently streamed to a dedicated `telemetry.db` using WAL pragmas and an asynchronous batching queue to guarantee zero hot-path blocking.
15
+ - **Contextual Decision Tracing** — The engine no longer just routes; it explains *why*. Routing traces now explicitly capture task type (`chat`, `code`, `analysis`), input token buckets, and latency-vs-success-rate reasoning logs.
16
+ - **Automated Retention Policies** — The telemetry engine aggressively self-prunes history, maintaining only the last 1,000 routing events and truncating error stack traces to prevent long-term database bloat.
17
+
10
18
  ## [1.2.1]
11
19
 
12
20
  ### Added
@@ -19,6 +27,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
19
27
  - **TDD Anti-Thrashing Guards** — The orchestrator will automatically abort the healing loop if Claude attempts the exact same fix or if output remains identically broken, preventing runaway API costs.
20
28
  - **Contributor Covenant** — Added `CODE_OF_CONDUCT.md` to formally establish community standards.
21
29
 
30
+ ### Fixed
31
+ - **Stable Provider Fallback** — Fixed an edge case in the `ProviderOrchestrator` where identical EMA scores (e.g., at startup) could cause unpredictable provider routing due to JS `sort()` instability. The engine now explicitly respects user-configured priorities as a tie-breaker.
32
+
22
33
  ### Security
23
34
  - **CodeQL Integration** — Added GitHub CodeQL scanning badge to `README.md`.
24
35
  - **Dependency Audit** — Triaged and validated false-positive Socket.dev supply chain alerts for `@anthropic-ai/sdk`.
package/dist/cli.js CHANGED
@@ -8,13 +8,14 @@ import { chatCommand } from './commands/chat.js';
8
8
  import { verifyCommand } from './commands/verify.js';
9
9
  import { dreamCommand } from './commands/dream.js';
10
10
  import { statsCommand } from './commands/stats.js';
11
+ import { providersCommand } from './commands/providers.js';
11
12
  import { DEFAULT_MAX_TOKENS_PER_SESSION, DEFAULT_MAX_TURNS, } from './config.js';
12
13
  const program = new Command();
13
14
  program
14
15
  .name('mythos')
15
16
  .description('Capybara-tier CLI router — Claude Opus 4.7 with Adaptive Thinking, ' +
16
17
  'Strict Write Discipline, and Self-Healing Memory.')
17
- .version('1.2.1');
18
+ .version('1.3.0');
18
19
  // ── mythos chat ──────────────────────────────────────────────
19
20
  program
20
21
  .command('chat')
@@ -57,6 +58,15 @@ program
57
58
  .action(async (options) => {
58
59
  await statsCommand(options);
59
60
  });
61
+ // ── mythos providers ─────────────────────────────────────────
62
+ program
63
+ .command('providers')
64
+ .description('Live dashboard of provider health, EMA scoring, and routing decisions')
65
+ .option('-w, --watch', 'Auto-refresh the dashboard when metrics change')
66
+ .option('--verbose', 'Show full error stacks for recent failures')
67
+ .action(async (options) => {
68
+ await providersCommand(options);
69
+ });
60
70
  // ── Default: show help ───────────────────────────────────────
61
71
  if (process.argv.length <= 2) {
62
72
  // Import banner and show it before help
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface ProvidersOptions {
2
+ watch?: boolean;
3
+ verbose?: boolean;
4
+ }
5
+ export declare function providersCommand(options: ProvidersOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0BD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H/E"}
@@ -0,0 +1,142 @@
1
+ import { TelemetryStore } from '../providers/telemetry.js';
2
+ import { c, hr, BANNER } from '../utils.js';
3
+ function calculateScore(m) {
4
+ let latencyWeight = 0.05;
5
+ let successWeight = 100;
6
+ return (m.successRate * successWeight) - (m.avgLatency * latencyWeight);
7
+ }
8
+ function getConfidence(totalCalls) {
9
+ if (totalCalls < 20)
10
+ return `${c.red}Low${c.reset}`;
11
+ if (totalCalls <= 100)
12
+ return `${c.yellow}Medium${c.reset}`;
13
+ return `${c.green}High${c.reset}`;
14
+ }
15
+ function stripAnsi(str) {
16
+ return str.replace(/\x1B\[\d+m/g, '');
17
+ }
18
+ function padAnsi(str, len) {
19
+ const visualLength = stripAnsi(str).length;
20
+ if (visualLength < len) {
21
+ return str + ' '.repeat(len - visualLength);
22
+ }
23
+ return str;
24
+ }
25
+ export async function providersCommand(options) {
26
+ const telemetry = TelemetryStore.getInstance();
27
+ const render = () => {
28
+ // Clear screen if watch mode
29
+ if (options.watch) {
30
+ console.clear();
31
+ }
32
+ console.log(BANNER);
33
+ console.log(` ${c.cyan}Provider Health & Orchestration State${c.reset}`);
34
+ console.log(hr());
35
+ const metrics = telemetry.getProviderMetrics();
36
+ if (metrics.length === 0) {
37
+ console.log(` ${c.dim}No provider telemetry found yet. Run a chat session to collect metrics.${c.reset}`);
38
+ if (!options.watch)
39
+ return;
40
+ }
41
+ else {
42
+ // Sort by score
43
+ metrics.sort((a, b) => calculateScore(b) - calculateScore(a));
44
+ const leader = metrics[0];
45
+ const leaderScore = calculateScore(leader).toFixed(1);
46
+ const confidence = getConfidence(leader.totalCalls);
47
+ console.log(` 🏆 ${c.bold}Leader:${c.reset} ${c.cyan}${leader.id}${c.reset} (Score: ${leaderScore}) [${confidence} Confidence]`);
48
+ console.log(hr());
49
+ // Table Header
50
+ const hProvider = padAnsi(`${c.bold}Provider${c.reset}`, 18);
51
+ const hStatus = padAnsi(`${c.bold}Status${c.reset}`, 35);
52
+ const hLatency = padAnsi(`${c.bold}EMA Latency${c.reset}`, 18);
53
+ const hSuccess = `${c.bold}Success Rate${c.reset}`;
54
+ console.log(` ${hProvider}| ${hStatus}| ${hLatency}| ${hSuccess}`);
55
+ console.log(` ` + '-'.repeat(85));
56
+ const now = Date.now();
57
+ for (const m of metrics) {
58
+ // Status formatting
59
+ let statusStr = `${c.green}🟢 Healthy${c.reset}`;
60
+ if (m.degradedUntil > now) {
61
+ const resetDate = new Date(m.degradedUntil);
62
+ const timeStr = `${resetDate.getHours()}:${resetDate.getMinutes().toString().padStart(2, '0')}`;
63
+ statusStr = `${c.yellow}🟡 Degraded${c.reset} ${c.dim}(until ~${timeStr})${c.reset}`;
64
+ }
65
+ else if (m.successRate < 0.85) {
66
+ statusStr = `${c.yellow}🟡 Degraded${c.reset} ${c.dim}(Low Success Rate)${c.reset}`;
67
+ }
68
+ // Latency with trend
69
+ const latDiff = m.prevAvgLatency ? (m.avgLatency - m.prevAvgLatency) / m.prevAvgLatency : 0;
70
+ let latArrow = '';
71
+ if (latDiff > 0.05)
72
+ latArrow = ` ${c.red}↑${c.reset}`;
73
+ else if (latDiff < -0.05)
74
+ latArrow = ` ${c.green}↓${c.reset}`;
75
+ const latStr = `${m.avgLatency.toFixed(0)}ms${latArrow}`;
76
+ // Success Rate with trend
77
+ const srDiff = m.successRate - m.prevSuccessRate;
78
+ let srArrow = '';
79
+ if (srDiff > 0.02)
80
+ srArrow = ` ${c.green}↑${c.reset}`;
81
+ else if (srDiff < -0.02)
82
+ srArrow = ` ${c.red}↓${c.reset}`;
83
+ const srStr = `${(m.successRate * 100).toFixed(1)}%${srArrow}`;
84
+ console.log(` ${padAnsi(m.id, 17)} | ${padAnsi(statusStr, 34)} | ${padAnsi(latStr, 17)} | ${srStr}`);
85
+ }
86
+ }
87
+ console.log(hr());
88
+ console.log(` ${c.bold}Recent Routing Decisions${c.reset}`);
89
+ const decisions = telemetry.getRecentDecisions(3);
90
+ if (decisions.length === 0) {
91
+ console.log(` ${c.dim}No recent routing decisions.${c.reset}`);
92
+ }
93
+ else {
94
+ for (const d of decisions) {
95
+ const dDate = new Date(d.timestamp);
96
+ const timeStr = `${dDate.getHours().toString().padStart(2, '0')}:${dDate.getMinutes().toString().padStart(2, '0')}:${dDate.getSeconds().toString().padStart(2, '0')}`;
97
+ console.log(` ${c.dim}[${timeStr}]${c.reset} ${c.cyan}${d.selectedProvider}${c.reset} chosen for "${d.taskType}" task (${d.inputSizeBucket} tokens):`);
98
+ console.log(` ↳ ${c.dim}${d.reasoning}${c.reset}`);
99
+ }
100
+ }
101
+ console.log(hr());
102
+ console.log(` ${c.bold}Recent Failures${c.reset}`);
103
+ const failures = telemetry.getRecentFailures(5);
104
+ if (failures.length === 0) {
105
+ console.log(` ${c.dim}No recent failures recorded.${c.reset}`);
106
+ }
107
+ else {
108
+ for (const f of failures) {
109
+ const fDate = new Date(f.timestamp);
110
+ const timeStr = `${fDate.getHours().toString().padStart(2, '0')}:${fDate.getMinutes().toString().padStart(2, '0')}:${fDate.getSeconds().toString().padStart(2, '0')}`;
111
+ console.log(` ${c.dim}[${timeStr}]${c.reset} ${c.red}${f.provider}${c.reset} | ${f.errorType} | ${f.shortMessage}`);
112
+ if (options.verbose && f.fullStack) {
113
+ console.log(` ↳ ${c.dim}${f.fullStack.split('\\n')[0].slice(0, 120)}...${c.reset}`);
114
+ }
115
+ }
116
+ }
117
+ if (options.watch) {
118
+ console.log(hr());
119
+ console.log(` ${c.dim}Watching for routing changes... (Ctrl+C to exit)${c.reset}`);
120
+ }
121
+ else {
122
+ console.log('');
123
+ }
124
+ };
125
+ if (!options.watch) {
126
+ render();
127
+ return;
128
+ }
129
+ // Watch Mode Loop
130
+ render();
131
+ let lastUpdated = telemetry.getLastUpdatedTime();
132
+ setInterval(() => {
133
+ const currentUpdated = telemetry.getLastUpdatedTime();
134
+ if (currentUpdated !== lastUpdated) {
135
+ lastUpdated = currentUpdated;
136
+ render();
137
+ }
138
+ }, 2000);
139
+ // Keep process alive for watch mode
140
+ return new Promise(() => { });
141
+ }
142
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { type BaseProvider, type Message, type StreamOptions, type SendOptions,
2
2
  interface ModelMetrics {
3
3
  successRate: number;
4
4
  avgLatency: number;
5
+ prevSuccessRate: number;
6
+ prevAvgLatency: number;
5
7
  costPer1k: number;
6
8
  totalCalls: number;
7
9
  totalFailures: number;
@@ -12,14 +14,17 @@ export declare class ProviderOrchestrator {
12
14
  private slots;
13
15
  private eventLog;
14
16
  private sessionId;
17
+ private telemetry;
15
18
  constructor();
16
19
  registerProvider(provider: BaseProvider, config?: Partial<ProviderConfig>): void;
17
20
  private selectProvider;
18
21
  private recordSuccess;
19
22
  private recordFailure;
20
23
  private tripCircuitBreaker;
24
+ private pushTelemetryState;
21
25
  private getWatchdogTimeout;
22
26
  private retryWithBackoff;
27
+ private logRoutingDecision;
23
28
  streamMessage(messages: Message[], options: StreamOptions): Promise<UnifiedResponse>;
24
29
  sendMessage(messages: Message[], options: SendOptions): Promise<UnifiedResponse>;
25
30
  private logEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/providers/orchestrator.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAIpB,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAqFD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAS;;IAU1B,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IA2BhF,OAAO,CAAC,cAAc;IA+DtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,kBAAkB;YAKZ,gBAAgB;IAyCxB,aAAa,CACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC;IAqIrB,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IA+D3B,OAAO,CAAC,QAAQ;IAQhB,WAAW,IAAI,SAAS,kBAAkB,EAAE;IAI5C,iBAAiB,IAAI,KAAK,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,cAAc,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAUF,YAAY,IAAI,MAAM;IAKtB,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/providers/orchestrator.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAIpB,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAqFD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAiB;;IAWlC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IA6BhF,OAAO,CAAC,cAAc;IAsEtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,kBAAkB;YAKZ,gBAAgB;IAyC9B,OAAO,CAAC,kBAAkB;IA+BpB,aAAa,CACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC;IAiJrB,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IA0E3B,OAAO,CAAC,QAAQ;IAQhB,WAAW,IAAI,SAAS,kBAAkB,EAAE;IAI5C,iBAAiB,IAAI,KAAK,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,cAAc,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAUF,YAAY,IAAI,MAAM;IAKtB,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
@@ -7,6 +7,7 @@
7
7
  // Zero external dependencies.
8
8
  // ─────────────────────────────────────────────────────────────
9
9
  import { createHash } from 'node:crypto';
10
+ import { TelemetryStore } from './telemetry.js';
10
11
  import { calculateCost } from './pricing.js';
11
12
  // ── Retry Configuration ──────────────────────────────────────
12
13
  const RETRY_BACKOFFS_MS = [100, 500, 1000];
@@ -49,13 +50,13 @@ function extractFallbackReason(err) {
49
50
  return 'server_error';
50
51
  }
51
52
  // ── Scoring Algorithm ────────────────────────────────────────
52
- function calculateScore(metrics, taskType = 'reasoning') {
53
+ function calculateScore(metrics, taskType = 'chat') {
53
54
  let latencyWeight = 0.05;
54
55
  let successWeight = 100;
55
56
  // Context-aware biasing
56
- if (taskType === 'fast')
57
+ if (taskType === 'chat')
57
58
  latencyWeight = 0.2;
58
- if (taskType === 'reasoning')
59
+ if (taskType === 'code' || taskType === 'analysis')
59
60
  successWeight = 150;
60
61
  return ((metrics.successRate * successWeight) -
61
62
  (metrics.avgLatency * latencyWeight) -
@@ -74,11 +75,13 @@ export class ProviderOrchestrator {
74
75
  slots = [];
75
76
  eventLog = [];
76
77
  sessionId;
78
+ telemetry;
77
79
  constructor() {
78
80
  this.sessionId = createHash('sha256')
79
81
  .update(`${Date.now()}-${Math.random()}`)
80
82
  .digest('hex')
81
83
  .slice(0, 12);
84
+ this.telemetry = TelemetryStore.getInstance();
82
85
  }
83
86
  // ── Provider Registration ────────────────────────────────
84
87
  registerProvider(provider, config) {
@@ -95,6 +98,8 @@ export class ProviderOrchestrator {
95
98
  metrics: {
96
99
  successRate: 1.0,
97
100
  avgLatency: 1000,
101
+ prevSuccessRate: 1.0,
102
+ prevAvgLatency: 1000,
98
103
  costPer1k: 0,
99
104
  totalCalls: 0,
100
105
  totalFailures: 0,
@@ -144,7 +149,7 @@ export class ProviderOrchestrator {
144
149
  return eligible; // Return all, but deterministicSelect will pick one
145
150
  }
146
151
  // Adaptive mode: sort by score (highest first)
147
- const taskType = options.taskType ?? 'reasoning';
152
+ const taskType = options.taskType ?? 'unknown';
148
153
  eligible.sort((a, b) => {
149
154
  // Healthy providers always beat degraded ones
150
155
  if (a.status === 'healthy' && b.status === 'degraded')
@@ -153,6 +158,11 @@ export class ProviderOrchestrator {
153
158
  return 1;
154
159
  const scoreA = calculateScore(a.metrics, taskType);
155
160
  const scoreB = calculateScore(b.metrics, taskType);
161
+ // Tie-breaker: if scores are virtually identical (e.g., at startup),
162
+ // respect the explicitly configured provider priority.
163
+ if (Math.abs(scoreA - scoreB) < 0.01) {
164
+ return a.config.priority - b.config.priority;
165
+ }
156
166
  return scoreB - scoreA;
157
167
  });
158
168
  return eligible;
@@ -160,22 +170,41 @@ export class ProviderOrchestrator {
160
170
  // ── Update Metrics (EMA) ─────────────────────────────────
161
171
  recordSuccess(slot, latencyMs, cost) {
162
172
  const m = slot.metrics;
173
+ m.prevSuccessRate = m.successRate;
174
+ m.prevAvgLatency = m.avgLatency;
163
175
  m.successRate = m.successRate * (1 - EMA_ALPHA) + 1.0 * EMA_ALPHA;
164
176
  m.avgLatency = m.avgLatency * (1 - EMA_ALPHA) + latencyMs * EMA_ALPHA;
165
177
  m.costPer1k = cost > 0 ? m.costPer1k * (1 - EMA_ALPHA) + cost * EMA_ALPHA : m.costPer1k;
166
178
  m.totalCalls++;
179
+ this.pushTelemetryState(slot);
167
180
  }
168
181
  recordFailure(slot, err) {
169
182
  const m = slot.metrics;
183
+ m.prevSuccessRate = m.successRate;
184
+ m.prevAvgLatency = m.avgLatency;
170
185
  m.successRate = m.successRate * (1 - EMA_ALPHA) + 0.0 * EMA_ALPHA;
171
186
  m.totalCalls++;
172
187
  m.totalFailures++;
173
188
  m.lastError = err.message;
174
189
  m.lastErrorTime = Date.now();
190
+ this.pushTelemetryState(slot);
175
191
  }
176
192
  tripCircuitBreaker(slot) {
177
193
  slot.status = 'degraded';
178
194
  slot.degradedUntil = Date.now() + CIRCUIT_BREAKER_COOLDOWN_MS;
195
+ this.pushTelemetryState(slot);
196
+ }
197
+ pushTelemetryState(slot) {
198
+ this.telemetry.updateMetrics({
199
+ id: slot.provider.id,
200
+ successRate: slot.metrics.successRate,
201
+ avgLatency: slot.metrics.avgLatency,
202
+ prevSuccessRate: slot.metrics.prevSuccessRate,
203
+ prevAvgLatency: slot.metrics.prevAvgLatency,
204
+ totalCalls: slot.metrics.totalCalls,
205
+ totalFailures: slot.metrics.totalFailures,
206
+ degradedUntil: slot.degradedUntil
207
+ });
179
208
  }
180
209
  // ── Adaptive Watchdog Timeout ────────────────────────────
181
210
  getWatchdogTimeout(slot) {
@@ -216,8 +245,36 @@ export class ProviderOrchestrator {
216
245
  throw lastErr;
217
246
  }
218
247
  // ── Stream Message (Primary API) ─────────────────────────
248
+ logRoutingDecision(messages, taskType, candidates) {
249
+ if (candidates.length === 0)
250
+ return;
251
+ const totalChars = messages.reduce((acc, m) => acc + m.content.length, 0);
252
+ const tokenEstimate = Math.ceil(totalChars / 4);
253
+ let bucket = '<4k';
254
+ if (tokenEstimate >= 4000 && tokenEstimate < 16000)
255
+ bucket = '4k-16k';
256
+ else if (tokenEstimate >= 16000)
257
+ bucket = '>16k';
258
+ const winner = candidates[0];
259
+ let reasoning = `Selected as only viable provider.`;
260
+ if (candidates.length > 1) {
261
+ const runnerUp = candidates[1];
262
+ const winScore = calculateScore(winner.metrics, taskType).toFixed(1);
263
+ const runScore = calculateScore(runnerUp.metrics, taskType).toFixed(1);
264
+ reasoning = `Score (${winScore}) beat ${runnerUp.provider.id} (${runScore}). EMA Latency: ${winner.metrics.avgLatency.toFixed(0)}ms vs ${runnerUp.metrics.avgLatency.toFixed(0)}ms.`;
265
+ }
266
+ this.telemetry.logDecision({
267
+ timestamp: Date.now(),
268
+ selectedProvider: winner.provider.id,
269
+ taskType,
270
+ inputSizeBucket: bucket,
271
+ reasoning
272
+ });
273
+ }
219
274
  async streamMessage(messages, options) {
220
275
  const candidates = this.selectProvider(options);
276
+ const taskType = options.taskType ?? 'unknown';
277
+ this.logRoutingDecision(messages, taskType, candidates);
221
278
  let fallbackTriggered = false;
222
279
  let primaryProvider = candidates[0]?.provider.id ?? 'none';
223
280
  let retryCount = 0;
@@ -294,6 +351,13 @@ export class ProviderOrchestrator {
294
351
  retryCount++;
295
352
  fallbackTriggered = true;
296
353
  const reason = extractFallbackReason(err);
354
+ this.telemetry.logFailure({
355
+ timestamp: Date.now(),
356
+ provider: slot.provider.id,
357
+ errorType: reason ?? 'server_error',
358
+ shortMessage: error.message.slice(0, 100),
359
+ fullStack: error.stack || error.message
360
+ });
297
361
  this.logEvent({
298
362
  timestamp: new Date().toISOString(),
299
363
  sessionId: this.sessionId,
@@ -325,6 +389,8 @@ export class ProviderOrchestrator {
325
389
  // ── Send Message (Non-Streaming) ─────────────────────────
326
390
  async sendMessage(messages, options) {
327
391
  const candidates = this.selectProvider(options);
392
+ const taskType = options.taskType ?? 'unknown';
393
+ this.logRoutingDecision(messages, taskType, candidates);
328
394
  let fallbackTriggered = false;
329
395
  let primaryProvider = candidates[0]?.provider.id ?? 'none';
330
396
  let retryCount = 0;
@@ -354,6 +420,13 @@ export class ProviderOrchestrator {
354
420
  this.recordFailure(slot, error);
355
421
  retryCount++;
356
422
  fallbackTriggered = true;
423
+ this.telemetry.logFailure({
424
+ timestamp: Date.now(),
425
+ provider: slot.provider.id,
426
+ errorType: 'server_error',
427
+ shortMessage: error.message.slice(0, 100),
428
+ fullStack: error.stack || error.message
429
+ });
357
430
  if (options.deterministic) {
358
431
  throw new Error(`[orchestrator] Deterministic mode: ${slot.provider.id} failed. Error: ${error.message}`);
359
432
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/providers/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/providers/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export interface ProviderState {
2
+ id: string;
3
+ successRate: number;
4
+ avgLatency: number;
5
+ prevSuccessRate: number;
6
+ prevAvgLatency: number;
7
+ totalCalls: number;
8
+ totalFailures: number;
9
+ degradedUntil: number;
10
+ }
11
+ export interface RoutingDecision {
12
+ timestamp: number;
13
+ selectedProvider: string;
14
+ taskType: 'chat' | 'code' | 'analysis' | 'unknown';
15
+ inputSizeBucket: string;
16
+ reasoning: string;
17
+ }
18
+ export interface FailureEvent {
19
+ timestamp: number;
20
+ provider: string;
21
+ errorType: string;
22
+ shortMessage: string;
23
+ fullStack: string;
24
+ }
25
+ export declare class TelemetryStore {
26
+ private static instance;
27
+ private db;
28
+ private metricUpdates;
29
+ private decisionQueue;
30
+ private failureQueue;
31
+ private flushTimer;
32
+ private shuttingDown;
33
+ private constructor();
34
+ static getInstance(): TelemetryStore;
35
+ private initSchema;
36
+ updateMetrics(state: ProviderState): void;
37
+ logDecision(decision: RoutingDecision): void;
38
+ logFailure(failure: FailureEvent): void;
39
+ private checkFlushQueue;
40
+ private startFlushTimer;
41
+ flush(): void;
42
+ private enforceRetention;
43
+ private setupGracefulShutdown;
44
+ getProviderMetrics(): ProviderState[];
45
+ getRecentDecisions(limit?: number): RoutingDecision[];
46
+ getRecentFailures(limit?: number): FailureEvent[];
47
+ getLastUpdatedTime(): number;
48
+ }
49
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/providers/telemetry.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,EAAE,CAAe;IAEzB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;WAaO,WAAW,IAAI,cAAc;IAO3C,OAAO,CAAC,UAAU;IAkCX,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKzC,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAK9C,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAOhB,KAAK,IAAI,IAAI;IA+DpB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,qBAAqB;IAYtB,kBAAkB,IAAI,aAAa,EAAE;IAkBrC,kBAAkB,CAAC,KAAK,GAAE,MAAU,GAAG,eAAe,EAAE;IAexD,iBAAiB,CAAC,KAAK,GAAE,MAAU,GAAG,YAAY,EAAE;IAepD,kBAAkB,IAAI,MAAM;CAQpC"}
@@ -0,0 +1,235 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // mythos-router :: providers/telemetry.ts
3
+ // Observable Telemetry Backend — SQLite-powered event streaming
4
+ //
5
+ // Separates state (metrics) from history (decisions, failures).
6
+ // Uses an asynchronous batching queue to prevent I/O blocking.
7
+ // ─────────────────────────────────────────────────────────────
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import * as os from 'node:os';
11
+ // @ts-ignore - node:sqlite is experimental in some versions
12
+ import { DatabaseSync } from 'node:sqlite';
13
+ const TELEMETRY_DIR = path.join(os.homedir(), '.mythos-router');
14
+ const TELEMETRY_DB_FILE = path.join(TELEMETRY_DIR, 'telemetry.db');
15
+ const FLUSH_INTERVAL_MS = 2000;
16
+ const FLUSH_EVENT_COUNT = 10;
17
+ const RETENTION_LIMIT = 1000;
18
+ export class TelemetryStore {
19
+ static instance;
20
+ db;
21
+ metricUpdates = new Map();
22
+ decisionQueue = [];
23
+ failureQueue = [];
24
+ flushTimer = null;
25
+ shuttingDown = false;
26
+ constructor() {
27
+ if (!fs.existsSync(TELEMETRY_DIR)) {
28
+ fs.mkdirSync(TELEMETRY_DIR, { recursive: true });
29
+ }
30
+ this.db = new DatabaseSync(TELEMETRY_DB_FILE);
31
+ this.db.exec('PRAGMA journal_mode=WAL;');
32
+ this.db.exec('PRAGMA synchronous=NORMAL;');
33
+ this.initSchema();
34
+ this.setupGracefulShutdown();
35
+ this.startFlushTimer();
36
+ }
37
+ static getInstance() {
38
+ if (!TelemetryStore.instance) {
39
+ TelemetryStore.instance = new TelemetryStore();
40
+ }
41
+ return TelemetryStore.instance;
42
+ }
43
+ initSchema() {
44
+ this.db.exec(`
45
+ CREATE TABLE IF NOT EXISTS provider_metrics (
46
+ id TEXT PRIMARY KEY,
47
+ success_rate REAL NOT NULL,
48
+ avg_latency REAL NOT NULL,
49
+ prev_success_rate REAL NOT NULL,
50
+ prev_avg_latency REAL NOT NULL,
51
+ total_calls INTEGER NOT NULL,
52
+ total_failures INTEGER NOT NULL,
53
+ degraded_until INTEGER NOT NULL,
54
+ updated_at INTEGER NOT NULL
55
+ );
56
+
57
+ CREATE TABLE IF NOT EXISTS routing_decisions (
58
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
59
+ timestamp INTEGER NOT NULL,
60
+ selected_provider TEXT NOT NULL,
61
+ task_type TEXT NOT NULL,
62
+ input_size_bucket TEXT NOT NULL,
63
+ reasoning TEXT NOT NULL
64
+ );
65
+
66
+ CREATE TABLE IF NOT EXISTS failures (
67
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
68
+ timestamp INTEGER NOT NULL,
69
+ provider TEXT NOT NULL,
70
+ error_type TEXT NOT NULL,
71
+ short_message TEXT NOT NULL,
72
+ full_stack TEXT NOT NULL
73
+ );
74
+ `);
75
+ }
76
+ updateMetrics(state) {
77
+ this.metricUpdates.set(state.id, state);
78
+ this.checkFlushQueue();
79
+ }
80
+ logDecision(decision) {
81
+ this.decisionQueue.push(decision);
82
+ this.checkFlushQueue();
83
+ }
84
+ logFailure(failure) {
85
+ this.failureQueue.push(failure);
86
+ this.checkFlushQueue();
87
+ }
88
+ checkFlushQueue() {
89
+ if (this.shuttingDown)
90
+ return;
91
+ const totalEvents = this.metricUpdates.size + this.decisionQueue.length + this.failureQueue.length;
92
+ if (totalEvents >= FLUSH_EVENT_COUNT) {
93
+ this.flush();
94
+ }
95
+ }
96
+ startFlushTimer() {
97
+ this.flushTimer = setInterval(() => {
98
+ this.flush();
99
+ }, FLUSH_INTERVAL_MS);
100
+ this.flushTimer.unref();
101
+ }
102
+ flush() {
103
+ if (this.metricUpdates.size === 0 && this.decisionQueue.length === 0 && this.failureQueue.length === 0) {
104
+ return;
105
+ }
106
+ try {
107
+ this.db.exec('BEGIN;');
108
+ const now = Date.now();
109
+ // Upsert Metrics (State)
110
+ const stmtMetrics = this.db.prepare(`
111
+ INSERT OR REPLACE INTO provider_metrics
112
+ (id, success_rate, avg_latency, prev_success_rate, prev_avg_latency, total_calls, total_failures, degraded_until, updated_at)
113
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
114
+ `);
115
+ for (const [_, state] of this.metricUpdates) {
116
+ stmtMetrics.run(state.id, state.successRate, state.avgLatency, state.prevSuccessRate, state.prevAvgLatency, state.totalCalls, state.totalFailures, state.degradedUntil, now);
117
+ }
118
+ // If there were decisions/failures but NO metric updates, we MUST update the global updated_at
119
+ // so the UI watch mode detects the change.
120
+ if (this.metricUpdates.size === 0 && (this.decisionQueue.length > 0 || this.failureQueue.length > 0)) {
121
+ this.db.exec(`UPDATE provider_metrics SET updated_at = ${now}`);
122
+ }
123
+ // Append Decisions (Events)
124
+ const stmtDecisions = this.db.prepare(`
125
+ INSERT INTO routing_decisions (timestamp, selected_provider, task_type, input_size_bucket, reasoning)
126
+ VALUES (?, ?, ?, ?, ?)
127
+ `);
128
+ for (const d of this.decisionQueue) {
129
+ stmtDecisions.run(d.timestamp, d.selectedProvider, d.taskType, d.inputSizeBucket, d.reasoning);
130
+ }
131
+ // Append Failures (Events)
132
+ const stmtFailures = this.db.prepare(`
133
+ INSERT INTO failures (timestamp, provider, error_type, short_message, full_stack)
134
+ VALUES (?, ?, ?, ?, ?)
135
+ `);
136
+ for (const f of this.failureQueue) {
137
+ // Truncate full stack to 4KB max
138
+ const stack = f.fullStack.slice(0, 4096);
139
+ stmtFailures.run(f.timestamp, f.provider, f.errorType, f.shortMessage, stack);
140
+ }
141
+ this.db.exec('COMMIT;');
142
+ this.metricUpdates.clear();
143
+ this.decisionQueue = [];
144
+ this.failureQueue = [];
145
+ this.enforceRetention();
146
+ }
147
+ catch (err) {
148
+ this.db.exec('ROLLBACK;');
149
+ }
150
+ }
151
+ enforceRetention() {
152
+ try {
153
+ this.db.exec(`
154
+ DELETE FROM routing_decisions
155
+ WHERE id < (SELECT MAX(id) - ${RETENTION_LIMIT} FROM routing_decisions);
156
+ `);
157
+ this.db.exec(`
158
+ DELETE FROM failures
159
+ WHERE id < (SELECT MAX(id) - ${RETENTION_LIMIT} FROM failures);
160
+ `);
161
+ }
162
+ catch (e) {
163
+ // Ignore
164
+ }
165
+ }
166
+ setupGracefulShutdown() {
167
+ const handleExit = () => {
168
+ this.shuttingDown = true;
169
+ if (this.flushTimer)
170
+ clearInterval(this.flushTimer);
171
+ this.flush();
172
+ };
173
+ process.on('exit', handleExit);
174
+ process.on('SIGINT', () => { handleExit(); process.exit(0); });
175
+ process.on('SIGTERM', () => { handleExit(); process.exit(0); });
176
+ }
177
+ getProviderMetrics() {
178
+ try {
179
+ const rows = this.db.prepare('SELECT * FROM provider_metrics').all();
180
+ return rows.map(r => ({
181
+ id: r.id,
182
+ successRate: r.success_rate,
183
+ avgLatency: r.avg_latency,
184
+ prevSuccessRate: r.prev_success_rate,
185
+ prevAvgLatency: r.prev_avg_latency,
186
+ totalCalls: r.total_calls,
187
+ totalFailures: r.total_failures,
188
+ degradedUntil: r.degraded_until
189
+ }));
190
+ }
191
+ catch {
192
+ return [];
193
+ }
194
+ }
195
+ getRecentDecisions(limit = 3) {
196
+ try {
197
+ const rows = this.db.prepare('SELECT * FROM routing_decisions ORDER BY id DESC LIMIT ?').all(limit);
198
+ return rows.map(r => ({
199
+ timestamp: r.timestamp,
200
+ selectedProvider: r.selected_provider,
201
+ taskType: r.task_type,
202
+ inputSizeBucket: r.input_size_bucket,
203
+ reasoning: r.reasoning
204
+ }));
205
+ }
206
+ catch {
207
+ return [];
208
+ }
209
+ }
210
+ getRecentFailures(limit = 5) {
211
+ try {
212
+ const rows = this.db.prepare('SELECT * FROM failures ORDER BY id DESC LIMIT ?').all(limit);
213
+ return rows.map(r => ({
214
+ timestamp: r.timestamp,
215
+ provider: r.provider,
216
+ errorType: r.error_type,
217
+ shortMessage: r.short_message,
218
+ fullStack: r.full_stack
219
+ }));
220
+ }
221
+ catch {
222
+ return [];
223
+ }
224
+ }
225
+ getLastUpdatedTime() {
226
+ try {
227
+ const row = this.db.prepare('SELECT MAX(updated_at) as last_ts FROM provider_metrics').get();
228
+ return row?.last_ts || 0;
229
+ }
230
+ catch {
231
+ return 0;
232
+ }
233
+ }
234
+ }
235
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/providers/telemetry.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export interface UnifiedResponse {
28
28
  };
29
29
  }
30
30
  export interface RequestOptions {
31
- taskType?: 'fast' | 'reasoning' | 'tooling';
31
+ taskType?: 'chat' | 'code' | 'analysis' | 'unknown';
32
32
  deterministic?: boolean;
33
33
  signal?: AbortSignal;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,iBAAiB,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAKD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAGD,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAGD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,cAAc,GAAG,WAAW,CAAC;AAG3E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAK7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEvD,aAAa,CACX,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5B,WAAW,CACT,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAGD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,qBAAqB,GAAG,eAAe,CAAC;IACrG,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mythos-router",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "Capybara-tier CLI router — Claude Opus 4.7 with Adaptive Thinking, Strict Write Discipline, and Self-Healing Memory",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,7 +21,7 @@
21
21
  "scripts": {
22
22
  "dev": "tsx src/cli.ts",
23
23
  "build": "tsc",
24
- "test": "node --import tsx --test test/**/*.test.ts",
24
+ "test": "node --import tsx --test \"test/**/*.test.ts\"",
25
25
  "prepublishOnly": "npm run build",
26
26
  "start": "node dist/cli.js",
27
27
  "chat": "tsx src/cli.ts chat",
@@ -57,13 +57,13 @@
57
57
  "url": "https://github.com/thewaltero/mythos-router/issues"
58
58
  },
59
59
  "dependencies": {
60
- "@anthropic-ai/sdk": "^0.90.0",
60
+ "@anthropic-ai/sdk": "^0.91.1",
61
61
  "commander": "^14.0.3"
62
62
  },
63
63
  "devDependencies": {
64
- "@types/node": "^22.0.0",
64
+ "@types/node": "^25.6.0",
65
65
  "tsx": "^4.19.0",
66
- "typescript": "^5.7.0"
66
+ "typescript": "^6.0.3"
67
67
  },
68
68
  "engines": {
69
69
  "node": ">=20.0.0"