mcp-agent-foundry 1.0.1 → 1.2.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.
Files changed (78) hide show
  1. package/README.md +22 -2
  2. package/dist/cli/setup-wizard.d.ts +4 -2
  3. package/dist/cli/setup-wizard.d.ts.map +1 -1
  4. package/dist/cli/setup-wizard.js +1024 -37
  5. package/dist/cli/setup-wizard.js.map +1 -1
  6. package/dist/cli/test-connection.d.ts +34 -2
  7. package/dist/cli/test-connection.d.ts.map +1 -1
  8. package/dist/cli/test-connection.js +384 -2
  9. package/dist/cli/test-connection.js.map +1 -1
  10. package/dist/cli.d.ts +15 -3
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +198 -30
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config/defaults.d.ts +2 -2
  15. package/dist/config/defaults.js +16 -16
  16. package/dist/config/defaults.js.map +1 -1
  17. package/dist/config/validator.d.ts +113 -0
  18. package/dist/config/validator.d.ts.map +1 -1
  19. package/dist/config/validator.js +113 -0
  20. package/dist/config/validator.js.map +1 -1
  21. package/dist/failover/health-tracker.d.ts +175 -0
  22. package/dist/failover/health-tracker.d.ts.map +1 -0
  23. package/dist/failover/health-tracker.js +350 -0
  24. package/dist/failover/health-tracker.js.map +1 -0
  25. package/dist/failover/index.d.ts +9 -0
  26. package/dist/failover/index.d.ts.map +1 -0
  27. package/dist/failover/index.js +9 -0
  28. package/dist/failover/index.js.map +1 -0
  29. package/dist/failover/orchestrator.d.ts +189 -0
  30. package/dist/failover/orchestrator.d.ts.map +1 -0
  31. package/dist/failover/orchestrator.js +488 -0
  32. package/dist/failover/orchestrator.js.map +1 -0
  33. package/dist/failover/pricing.d.ts +115 -0
  34. package/dist/failover/pricing.d.ts.map +1 -0
  35. package/dist/failover/pricing.js +283 -0
  36. package/dist/failover/pricing.js.map +1 -0
  37. package/dist/persistence/state-schema.d.ts +50 -0
  38. package/dist/persistence/state-schema.d.ts.map +1 -1
  39. package/dist/persistence/state-schema.js +2 -0
  40. package/dist/persistence/state-schema.js.map +1 -1
  41. package/dist/providers/fireworks.d.ts +23 -0
  42. package/dist/providers/fireworks.d.ts.map +1 -0
  43. package/dist/providers/fireworks.js +31 -0
  44. package/dist/providers/fireworks.js.map +1 -0
  45. package/dist/providers/groq.d.ts +23 -0
  46. package/dist/providers/groq.d.ts.map +1 -0
  47. package/dist/providers/groq.js +31 -0
  48. package/dist/providers/groq.js.map +1 -0
  49. package/dist/providers/kimi-code.d.ts +32 -0
  50. package/dist/providers/kimi-code.d.ts.map +1 -0
  51. package/dist/providers/kimi-code.js +46 -0
  52. package/dist/providers/kimi-code.js.map +1 -0
  53. package/dist/providers/kimi.d.ts +1 -1
  54. package/dist/providers/kimi.js +1 -1
  55. package/dist/providers/openrouter.d.ts +23 -0
  56. package/dist/providers/openrouter.d.ts.map +1 -0
  57. package/dist/providers/openrouter.js +31 -0
  58. package/dist/providers/openrouter.js.map +1 -0
  59. package/dist/providers/perplexity.d.ts +29 -0
  60. package/dist/providers/perplexity.d.ts.map +1 -0
  61. package/dist/providers/perplexity.js +51 -0
  62. package/dist/providers/perplexity.js.map +1 -0
  63. package/dist/providers/together.d.ts +23 -0
  64. package/dist/providers/together.d.ts.map +1 -0
  65. package/dist/providers/together.js +31 -0
  66. package/dist/providers/together.js.map +1 -0
  67. package/dist/router/engine.d.ts +21 -0
  68. package/dist/router/engine.d.ts.map +1 -1
  69. package/dist/router/engine.js +81 -21
  70. package/dist/router/engine.js.map +1 -1
  71. package/dist/server.d.ts.map +1 -1
  72. package/dist/server.js +49 -0
  73. package/dist/server.js.map +1 -1
  74. package/dist/types.d.ts +52 -1
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js +14 -0
  77. package/dist/types.js.map +1 -1
  78. package/package.json +1 -1
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Provider Pricing Service
3
+ *
4
+ * Fetches and caches pricing data for LLM providers to enable cost-aware routing.
5
+ * Uses OpenRouter API as the primary data source for comprehensive pricing info.
6
+ */
7
+ // ============================================================================
8
+ // Constants
9
+ // ============================================================================
10
+ const DEFAULT_CONFIG = {
11
+ cacheTtlMs: 86400000, // 24 hours
12
+ openRouterApiKey: '',
13
+ timeoutMs: 10000,
14
+ };
15
+ /**
16
+ * Manual pricing data for providers not on OpenRouter.
17
+ * Updated January 2026.
18
+ */
19
+ const MANUAL_PRICING = [
20
+ // ZAI (GLM) - Very affordable Chinese provider
21
+ {
22
+ provider: 'zai',
23
+ model: 'glm-4.7',
24
+ inputPerMillion: 0.01,
25
+ outputPerMillion: 0.01,
26
+ source: 'manual',
27
+ updatedAt: new Date('2026-01-01'),
28
+ },
29
+ {
30
+ provider: 'zai',
31
+ model: 'glm-4',
32
+ inputPerMillion: 0.01,
33
+ outputPerMillion: 0.01,
34
+ source: 'manual',
35
+ updatedAt: new Date('2026-01-01'),
36
+ },
37
+ // Kimi (Moonshot) - Competitive pricing
38
+ {
39
+ provider: 'kimi',
40
+ model: 'moonshot-v1-128k',
41
+ inputPerMillion: 0.02,
42
+ outputPerMillion: 0.02,
43
+ source: 'manual',
44
+ updatedAt: new Date('2026-01-01'),
45
+ },
46
+ {
47
+ provider: 'kimi-code',
48
+ model: 'kimi-code',
49
+ inputPerMillion: 0.00, // Subscription-based
50
+ outputPerMillion: 0.00,
51
+ source: 'manual',
52
+ updatedAt: new Date('2026-01-01'),
53
+ },
54
+ // Ollama - Free (local)
55
+ {
56
+ provider: 'ollama',
57
+ model: 'llama3.3:70b',
58
+ inputPerMillion: 0.00,
59
+ outputPerMillion: 0.00,
60
+ source: 'manual',
61
+ updatedAt: new Date('2026-01-01'),
62
+ },
63
+ ];
64
+ /**
65
+ * Mapping from Agent Foundry provider names to OpenRouter model prefixes.
66
+ */
67
+ const PROVIDER_MODEL_PREFIXES = {
68
+ anthropic: ['anthropic/'],
69
+ openai: ['openai/'],
70
+ google: ['google/'],
71
+ deepseek: ['deepseek/'],
72
+ perplexity: ['perplexity/'],
73
+ groq: ['groq/'],
74
+ together: ['together/'],
75
+ fireworks: ['fireworks/'],
76
+ };
77
+ // ============================================================================
78
+ // PricingService Class
79
+ // ============================================================================
80
+ /**
81
+ * Service for fetching and managing provider pricing data.
82
+ *
83
+ * Features:
84
+ * - Fetches pricing from OpenRouter API
85
+ * - Caches pricing data with configurable TTL
86
+ * - Falls back to manual pricing for providers not on OpenRouter
87
+ * - Provides cost comparison utilities
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const pricing = new PricingService(logger);
92
+ * await pricing.refresh();
93
+ *
94
+ * // Get pricing for a specific model
95
+ * const cost = pricing.getPricing('openai', 'gpt-4o');
96
+ *
97
+ * // Sort providers by cost
98
+ * const sorted = pricing.sortByCost(['openai', 'anthropic', 'deepseek']);
99
+ * ```
100
+ */
101
+ export class PricingService {
102
+ config;
103
+ logger;
104
+ cache = new Map();
105
+ lastFetch = null;
106
+ constructor(logger, config) {
107
+ this.logger = logger;
108
+ this.config = { ...DEFAULT_CONFIG, ...config };
109
+ // Initialize with manual pricing
110
+ for (const pricing of MANUAL_PRICING) {
111
+ const key = this.getCacheKey(pricing.provider, pricing.model);
112
+ this.cache.set(key, pricing);
113
+ }
114
+ }
115
+ /**
116
+ * Fetch/refresh pricing data from OpenRouter API.
117
+ */
118
+ async refresh() {
119
+ try {
120
+ this.logger.info('Fetching pricing data from OpenRouter...');
121
+ const controller = new AbortController();
122
+ const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
123
+ try {
124
+ const headers = {
125
+ 'Content-Type': 'application/json',
126
+ };
127
+ if (this.config.openRouterApiKey) {
128
+ headers['Authorization'] = `Bearer ${this.config.openRouterApiKey}`;
129
+ }
130
+ const response = await fetch('https://openrouter.ai/api/v1/models', {
131
+ method: 'GET',
132
+ headers,
133
+ signal: controller.signal,
134
+ });
135
+ if (!response.ok) {
136
+ throw new Error(`OpenRouter API returned ${response.status}`);
137
+ }
138
+ const data = (await response.json());
139
+ this.parseOpenRouterResponse(data);
140
+ this.lastFetch = new Date();
141
+ this.logger.info('Pricing data refreshed', {
142
+ modelCount: this.cache.size,
143
+ });
144
+ }
145
+ finally {
146
+ clearTimeout(timeout);
147
+ }
148
+ }
149
+ catch (error) {
150
+ this.logger.warn('Failed to fetch pricing from OpenRouter', {
151
+ error: error instanceof Error ? error.message : String(error),
152
+ });
153
+ // Continue with cached/manual data
154
+ }
155
+ }
156
+ /**
157
+ * Get pricing for a specific provider/model.
158
+ */
159
+ getPricing(provider, model) {
160
+ // Try exact match first
161
+ const exactKey = this.getCacheKey(provider, model);
162
+ const exact = this.cache.get(exactKey);
163
+ if (exact) {
164
+ return exact;
165
+ }
166
+ // Try finding by model prefix for OpenRouter data
167
+ for (const [key, pricing] of this.cache) {
168
+ if (pricing.provider === provider && pricing.model.includes(model)) {
169
+ return pricing;
170
+ }
171
+ }
172
+ return undefined;
173
+ }
174
+ /**
175
+ * Get all cached pricing data.
176
+ */
177
+ getAllPricing() {
178
+ return Array.from(this.cache.values());
179
+ }
180
+ /**
181
+ * Sort providers by cost (cheapest first).
182
+ * Uses average of input/output costs for comparison.
183
+ */
184
+ sortByCost(providers) {
185
+ return providers
186
+ .map((p) => {
187
+ const pricing = this.getPricing(p.provider, p.model);
188
+ const cost = pricing
189
+ ? (pricing.inputPerMillion + pricing.outputPerMillion) / 2
190
+ : Infinity; // Unknown cost goes last
191
+ return { ...p, cost };
192
+ })
193
+ .sort((a, b) => a.cost - b.cost);
194
+ }
195
+ /**
196
+ * Get cheapest provider from a list.
197
+ */
198
+ getCheapest(providers) {
199
+ const sorted = this.sortByCost(providers);
200
+ return sorted[0];
201
+ }
202
+ /**
203
+ * Check if cache is stale.
204
+ */
205
+ isCacheStale() {
206
+ if (!this.lastFetch) {
207
+ return true;
208
+ }
209
+ const age = Date.now() - this.lastFetch.getTime();
210
+ return age > this.config.cacheTtlMs;
211
+ }
212
+ /**
213
+ * Format a cost summary string for logging.
214
+ */
215
+ formatCostSummary(providers) {
216
+ const lines = [];
217
+ for (const { provider, model } of providers) {
218
+ const pricing = this.getPricing(provider, model);
219
+ if (pricing) {
220
+ const avgCost = (pricing.inputPerMillion + pricing.outputPerMillion) / 2;
221
+ lines.push(` ${provider} (${model}): $${avgCost.toFixed(2)}/1M tokens`);
222
+ }
223
+ else {
224
+ lines.push(` ${provider} (${model}): pricing unknown`);
225
+ }
226
+ }
227
+ return lines.join('\n');
228
+ }
229
+ /**
230
+ * Calculate estimated cost for a request.
231
+ */
232
+ estimateCost(provider, model, inputTokens, outputTokens) {
233
+ const pricing = this.getPricing(provider, model);
234
+ if (!pricing) {
235
+ return null;
236
+ }
237
+ const inputCost = (inputTokens / 1_000_000) * pricing.inputPerMillion;
238
+ const outputCost = (outputTokens / 1_000_000) * pricing.outputPerMillion;
239
+ return inputCost + outputCost;
240
+ }
241
+ // ==========================================================================
242
+ // Private Methods
243
+ // ==========================================================================
244
+ getCacheKey(provider, model) {
245
+ return `${provider}:${model}`;
246
+ }
247
+ parseOpenRouterResponse(response) {
248
+ for (const model of response.data) {
249
+ // Parse provider from model ID (e.g., "anthropic/claude-3-opus")
250
+ const [providerPrefix, ...modelParts] = model.id.split('/');
251
+ const modelName = modelParts.join('/');
252
+ // Map OpenRouter provider prefix to our provider name
253
+ let ourProvider;
254
+ for (const [provider, prefixes] of Object.entries(PROVIDER_MODEL_PREFIXES)) {
255
+ if (prefixes.some((p) => model.id.startsWith(p))) {
256
+ ourProvider = provider;
257
+ break;
258
+ }
259
+ }
260
+ if (!ourProvider) {
261
+ ourProvider = providerPrefix; // Use as-is if not mapped
262
+ }
263
+ // Parse pricing (OpenRouter returns string prices per token)
264
+ const inputPrice = model.pricing?.prompt
265
+ ? parseFloat(model.pricing.prompt) * 1_000_000
266
+ : 0;
267
+ const outputPrice = model.pricing?.completion
268
+ ? parseFloat(model.pricing.completion) * 1_000_000
269
+ : 0;
270
+ const pricing = {
271
+ provider: ourProvider,
272
+ model: modelName,
273
+ inputPerMillion: inputPrice,
274
+ outputPerMillion: outputPrice,
275
+ source: 'openrouter',
276
+ updatedAt: new Date(),
277
+ };
278
+ const key = this.getCacheKey(ourProvider, modelName);
279
+ this.cache.set(key, pricing);
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/failover/pricing.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,52 @@ export interface PersistedPipelineState {
84
84
  /** Last update timestamp */
85
85
  updatedAt: number;
86
86
  }
87
+ /**
88
+ * Persisted health state for a provider.
89
+ */
90
+ export interface PersistedProviderHealth {
91
+ /** Provider name */
92
+ provider: string;
93
+ /** Current health status */
94
+ status: 'healthy' | 'degraded' | 'unhealthy';
95
+ /** Number of consecutive failures */
96
+ consecutiveFailures: number;
97
+ /** Cooldown end timestamp (null if not in cooldown) */
98
+ cooldownUntil: number | null;
99
+ /** Rolling average latency in ms */
100
+ latencyMs: number;
101
+ /** Total successful requests */
102
+ successCount: number;
103
+ /** Total failed requests */
104
+ failureCount: number;
105
+ /** Last successful request timestamp */
106
+ lastSuccessAt: number | null;
107
+ /** Last error timestamp */
108
+ lastErrorAt: number | null;
109
+ /** Last error message */
110
+ lastErrorMessage: string | null;
111
+ /** Last error HTTP status code */
112
+ lastErrorCode: number | null;
113
+ }
114
+ /**
115
+ * Persisted failover event for diagnostics.
116
+ */
117
+ export interface PersistedFailoverEvent {
118
+ /** Event timestamp */
119
+ timestamp: number;
120
+ /** Role that triggered the failover */
121
+ role: string;
122
+ /** Provider that failed */
123
+ fromProvider: string;
124
+ /** Provider switched to */
125
+ toProvider: string;
126
+ /** Reason for failover */
127
+ reason: string;
128
+ /** HTTP error code if applicable */
129
+ errorCode?: number;
130
+ /** Error message */
131
+ errorMessage?: string;
132
+ }
87
133
  /**
88
134
  * Root persisted state structure.
89
135
  * This is the complete state saved to .agent-foundry/state.json.
@@ -103,6 +149,10 @@ export interface PersistedState {
103
149
  conflicts: PersistedConflictState[];
104
150
  /** All persisted pipelines */
105
151
  pipelines: PersistedPipelineState[];
152
+ /** Provider health states */
153
+ providerHealth?: PersistedProviderHealth[];
154
+ /** Recent failover events (last 100) */
155
+ failoverEvents?: PersistedFailoverEvent[];
106
156
  }
107
157
  /**
108
158
  * Current state schema version.
@@ -1 +1 @@
1
- {"version":3,"file":"state-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAClF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,mCAAmC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAMD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CASjD"}
1
+ {"version":3,"file":"state-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAClF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,mCAAmC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kCAAkC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,6BAA6B;IAC7B,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC3C,wCAAwC;IACxC,cAAc,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC3C;AAMD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAWjD"}
@@ -23,6 +23,8 @@ export function createEmptyState() {
23
23
  worktrees: [],
24
24
  conflicts: [],
25
25
  pipelines: [],
26
+ providerHealth: [],
27
+ failoverEvents: [],
26
28
  };
27
29
  }
28
30
  //# sourceMappingURL=state-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-schema.js","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+HH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"state-schema.js","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuLH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Fireworks AI Provider Implementation
3
+ *
4
+ * Fireworks AI provides fast inference for DeepSeek, Llama, and other open models.
5
+ * It uses an OpenAI-compatible API format.
6
+ * This provider extends OpenAIProvider with the correct name identifier.
7
+ */
8
+ import { OpenAIProvider } from './openai.js';
9
+ import type { ProviderConfig } from '../types.js';
10
+ /**
11
+ * Fireworks AI API provider adapter.
12
+ *
13
+ * Uses OpenAI-compatible API format with Fireworks AI endpoints.
14
+ * Provides fast inference for DeepSeek, Llama, and other models.
15
+ *
16
+ * Default base URL: https://api.fireworks.ai/inference/v1
17
+ * Available models: accounts/fireworks/models/llama-v3p3-70b-instruct, accounts/fireworks/models/deepseek-v3
18
+ */
19
+ export declare class FireworksProvider extends OpenAIProvider {
20
+ readonly name = "fireworks";
21
+ constructor(config: ProviderConfig);
22
+ }
23
+ //# sourceMappingURL=fireworks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireworks.d.ts","sourceRoot":"","sources":["../../src/providers/fireworks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAyB,IAAI,eAAe;gBAEhC,MAAM,EAAE,cAAc;CAQnC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Fireworks AI Provider Implementation
3
+ *
4
+ * Fireworks AI provides fast inference for DeepSeek, Llama, and other open models.
5
+ * It uses an OpenAI-compatible API format.
6
+ * This provider extends OpenAIProvider with the correct name identifier.
7
+ */
8
+ import { OpenAIProvider } from './openai.js';
9
+ // Default base URL for Fireworks AI API
10
+ const FIREWORKS_BASE_URL = 'https://api.fireworks.ai/inference/v1';
11
+ /**
12
+ * Fireworks AI API provider adapter.
13
+ *
14
+ * Uses OpenAI-compatible API format with Fireworks AI endpoints.
15
+ * Provides fast inference for DeepSeek, Llama, and other models.
16
+ *
17
+ * Default base URL: https://api.fireworks.ai/inference/v1
18
+ * Available models: accounts/fireworks/models/llama-v3p3-70b-instruct, accounts/fireworks/models/deepseek-v3
19
+ */
20
+ export class FireworksProvider extends OpenAIProvider {
21
+ name = 'fireworks';
22
+ constructor(config) {
23
+ // Ensure base_url defaults to Fireworks AI endpoint if not specified
24
+ const configWithDefaults = {
25
+ ...config,
26
+ base_url: config.base_url ?? FIREWORKS_BASE_URL,
27
+ };
28
+ super(configWithDefaults);
29
+ }
30
+ }
31
+ //# sourceMappingURL=fireworks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireworks.js","sourceRoot":"","sources":["../../src/providers/fireworks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,wCAAwC;AACxC,MAAM,kBAAkB,GAAG,uCAAuC,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IAC1B,IAAI,GAAG,WAAW,CAAC;IAE5C,YAAY,MAAsB;QAChC,qEAAqE;QACrE,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,kBAAkB;SAChD,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Groq Provider Implementation
3
+ *
4
+ * Groq provides ultra-fast LPU inference (up to 18x faster than GPU).
5
+ * It uses an OpenAI-compatible API format.
6
+ * This provider extends OpenAIProvider with the correct name identifier.
7
+ */
8
+ import { OpenAIProvider } from './openai.js';
9
+ import type { ProviderConfig } from '../types.js';
10
+ /**
11
+ * Groq API provider adapter.
12
+ *
13
+ * Uses OpenAI-compatible API format with Groq endpoints.
14
+ * Provides ultra-fast inference using custom LPU hardware.
15
+ *
16
+ * Default base URL: https://api.groq.com/openai/v1
17
+ * Available models: llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it
18
+ */
19
+ export declare class GroqProvider extends OpenAIProvider {
20
+ readonly name = "groq";
21
+ constructor(config: ProviderConfig);
22
+ }
23
+ //# sourceMappingURL=groq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,SAAyB,IAAI,UAAU;gBAE3B,MAAM,EAAE,cAAc;CAQnC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Groq Provider Implementation
3
+ *
4
+ * Groq provides ultra-fast LPU inference (up to 18x faster than GPU).
5
+ * It uses an OpenAI-compatible API format.
6
+ * This provider extends OpenAIProvider with the correct name identifier.
7
+ */
8
+ import { OpenAIProvider } from './openai.js';
9
+ // Default base URL for Groq API
10
+ const GROQ_BASE_URL = 'https://api.groq.com/openai/v1';
11
+ /**
12
+ * Groq API provider adapter.
13
+ *
14
+ * Uses OpenAI-compatible API format with Groq endpoints.
15
+ * Provides ultra-fast inference using custom LPU hardware.
16
+ *
17
+ * Default base URL: https://api.groq.com/openai/v1
18
+ * Available models: llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it
19
+ */
20
+ export class GroqProvider extends OpenAIProvider {
21
+ name = 'groq';
22
+ constructor(config) {
23
+ // Ensure base_url defaults to Groq endpoint if not specified
24
+ const configWithDefaults = {
25
+ ...config,
26
+ base_url: config.base_url ?? GROQ_BASE_URL,
27
+ };
28
+ super(configWithDefaults);
29
+ }
30
+ }
31
+ //# sourceMappingURL=groq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,gCAAgC;AAChC,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,cAAc;IACrB,IAAI,GAAG,MAAM,CAAC;IAEvC,YAAY,MAAsB;QAChC,6DAA6D;QAC7D,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa;SAC3C,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Kimi Code Provider Implementation
3
+ *
4
+ * Kimi Code is a separate API endpoint from the regular Moonshot (Kimi) API.
5
+ * It uses the same API key but requires:
6
+ * - Different base URL: https://api.kimi.com/coding/v1
7
+ * - Special User-Agent header: claude-code/1.0
8
+ * - Model: kimi-for-coding
9
+ *
10
+ * The API is OpenAI-compatible, so we extend OpenAIProvider.
11
+ */
12
+ import { OpenAIProvider } from './openai.js';
13
+ import type { ProviderConfig } from '../types.js';
14
+ /**
15
+ * Kimi Code API provider adapter.
16
+ *
17
+ * Uses OpenAI-compatible API format with the Kimi Code endpoint.
18
+ * CRITICAL: Requires User-Agent header set to 'claude-code/1.0' or the API rejects requests.
19
+ *
20
+ * Default base URL: https://api.kimi.com/coding/v1
21
+ * Default model: kimi-for-coding
22
+ */
23
+ export declare class KimiCodeProvider extends OpenAIProvider {
24
+ readonly name = "kimi-code";
25
+ constructor(config: ProviderConfig);
26
+ /**
27
+ * Build headers for Kimi Code API requests.
28
+ * CRITICAL: Adds the required User-Agent header that Kimi Code API mandates.
29
+ */
30
+ protected buildHeaders(): Record<string, string>;
31
+ }
32
+ //# sourceMappingURL=kimi-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-code.d.ts","sourceRoot":"","sources":["../../src/providers/kimi-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,SAAyB,IAAI,eAAe;gBAEhC,MAAM,EAAE,cAAc;IASlC;;;OAGG;cACgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ1D"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Kimi Code Provider Implementation
3
+ *
4
+ * Kimi Code is a separate API endpoint from the regular Moonshot (Kimi) API.
5
+ * It uses the same API key but requires:
6
+ * - Different base URL: https://api.kimi.com/coding/v1
7
+ * - Special User-Agent header: claude-code/1.0
8
+ * - Model: kimi-for-coding
9
+ *
10
+ * The API is OpenAI-compatible, so we extend OpenAIProvider.
11
+ */
12
+ import { OpenAIProvider } from './openai.js';
13
+ // Constants for Kimi Code API
14
+ const KIMI_CODE_BASE_URL = 'https://api.kimi.com/coding/v1';
15
+ const KIMI_CODE_USER_AGENT = 'claude-code/1.0';
16
+ /**
17
+ * Kimi Code API provider adapter.
18
+ *
19
+ * Uses OpenAI-compatible API format with the Kimi Code endpoint.
20
+ * CRITICAL: Requires User-Agent header set to 'claude-code/1.0' or the API rejects requests.
21
+ *
22
+ * Default base URL: https://api.kimi.com/coding/v1
23
+ * Default model: kimi-for-coding
24
+ */
25
+ export class KimiCodeProvider extends OpenAIProvider {
26
+ name = 'kimi-code';
27
+ constructor(config) {
28
+ // Ensure base_url defaults to Kimi Code endpoint if not specified
29
+ const configWithDefaults = {
30
+ ...config,
31
+ base_url: config.base_url ?? KIMI_CODE_BASE_URL,
32
+ };
33
+ super(configWithDefaults);
34
+ }
35
+ /**
36
+ * Build headers for Kimi Code API requests.
37
+ * CRITICAL: Adds the required User-Agent header that Kimi Code API mandates.
38
+ */
39
+ buildHeaders() {
40
+ const headers = super.buildHeaders();
41
+ // Kimi Code API requires this specific User-Agent header
42
+ headers['User-Agent'] = KIMI_CODE_USER_AGENT;
43
+ return headers;
44
+ }
45
+ }
46
+ //# sourceMappingURL=kimi-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-code.js","sourceRoot":"","sources":["../../src/providers/kimi-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,8BAA8B;AAC9B,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IACzB,IAAI,GAAG,WAAW,CAAC;IAE5C,YAAY,MAAsB;QAChC,kEAAkE;QAClE,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,kBAAkB;SAChD,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACgB,YAAY;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAErC,yDAAyD;QACzD,OAAO,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC;QAE7C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -10,7 +10,7 @@ import type { ProviderConfig } from '../types.js';
10
10
  * Kimi (Moonshot AI) API provider adapter.
11
11
  *
12
12
  * Uses OpenAI-compatible API format but with Kimi endpoints.
13
- * Default base URL: https://api.moonshot.cn/v1
13
+ * Default base URL: https://api.moonshot.ai/v1
14
14
  */
15
15
  export declare class KimiProvider extends OpenAIProvider {
16
16
  readonly name = "kimi";
@@ -9,7 +9,7 @@ import { OpenAIProvider } from './openai.js';
9
9
  * Kimi (Moonshot AI) API provider adapter.
10
10
  *
11
11
  * Uses OpenAI-compatible API format but with Kimi endpoints.
12
- * Default base URL: https://api.moonshot.cn/v1
12
+ * Default base URL: https://api.moonshot.ai/v1
13
13
  */
14
14
  export class KimiProvider extends OpenAIProvider {
15
15
  name = 'kimi';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * OpenRouter Provider Implementation
3
+ *
4
+ * OpenRouter provides a unified gateway to 300+ AI models via a single API.
5
+ * It uses an OpenAI-compatible API format.
6
+ * This provider extends OpenAIProvider with the correct name identifier.
7
+ */
8
+ import { OpenAIProvider } from './openai.js';
9
+ import type { ProviderConfig } from '../types.js';
10
+ /**
11
+ * OpenRouter API provider adapter.
12
+ *
13
+ * Uses OpenAI-compatible API format with OpenRouter endpoints.
14
+ * Provides access to 300+ models via a single API.
15
+ *
16
+ * Default base URL: https://openrouter.ai/api/v1
17
+ * Default model: openrouter/auto (automatically selects best model)
18
+ */
19
+ export declare class OpenRouterProvider extends OpenAIProvider {
20
+ readonly name = "openrouter";
21
+ constructor(config: ProviderConfig);
22
+ }
23
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,SAAyB,IAAI,gBAAgB;gBAEjC,MAAM,EAAE,cAAc;CAQnC"}