@spekoai/mcp 1.0.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 (50) hide show
  1. package/README.md +59 -0
  2. package/dist/data/benchmarks.d.ts +124 -0
  3. package/dist/data/benchmarks.d.ts.map +1 -0
  4. package/dist/data/benchmarks.js +176 -0
  5. package/dist/data/benchmarks.js.map +1 -0
  6. package/dist/data/templates.d.ts +39 -0
  7. package/dist/data/templates.d.ts.map +1 -0
  8. package/dist/data/templates.js +385 -0
  9. package/dist/data/templates.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +26 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/api-client.d.ts +71 -0
  15. package/dist/lib/api-client.d.ts.map +1 -0
  16. package/dist/lib/api-client.js +282 -0
  17. package/dist/lib/api-client.js.map +1 -0
  18. package/dist/lib/benchmark-utils.d.ts +45 -0
  19. package/dist/lib/benchmark-utils.d.ts.map +1 -0
  20. package/dist/lib/benchmark-utils.js +244 -0
  21. package/dist/lib/benchmark-utils.js.map +1 -0
  22. package/dist/lib/project-scanner.d.ts +16 -0
  23. package/dist/lib/project-scanner.d.ts.map +1 -0
  24. package/dist/lib/project-scanner.js +154 -0
  25. package/dist/lib/project-scanner.js.map +1 -0
  26. package/dist/lib/tier-gate.d.ts +14 -0
  27. package/dist/lib/tier-gate.d.ts.map +1 -0
  28. package/dist/lib/tier-gate.js +27 -0
  29. package/dist/lib/tier-gate.js.map +1 -0
  30. package/dist/tools/agent-crud.d.ts +3 -0
  31. package/dist/tools/agent-crud.d.ts.map +1 -0
  32. package/dist/tools/agent-crud.js +114 -0
  33. package/dist/tools/agent-crud.js.map +1 -0
  34. package/dist/tools/legacy.d.ts +3 -0
  35. package/dist/tools/legacy.d.ts.map +1 -0
  36. package/dist/tools/legacy.js +354 -0
  37. package/dist/tools/legacy.js.map +1 -0
  38. package/dist/tools/migrate.d.ts +3 -0
  39. package/dist/tools/migrate.d.ts.map +1 -0
  40. package/dist/tools/migrate.js +145 -0
  41. package/dist/tools/migrate.js.map +1 -0
  42. package/dist/tools/recommend.d.ts +3 -0
  43. package/dist/tools/recommend.d.ts.map +1 -0
  44. package/dist/tools/recommend.js +163 -0
  45. package/dist/tools/recommend.js.map +1 -0
  46. package/dist/tools/setup.d.ts +3 -0
  47. package/dist/tools/setup.d.ts.map +1 -0
  48. package/dist/tools/setup.js +104 -0
  49. package/dist/tools/setup.js.map +1 -0
  50. package/package.json +54 -0
@@ -0,0 +1,282 @@
1
+ const DEFAULT_API_BASE_URL = "https://api.speko.ai";
2
+ const DEFAULT_DASHBOARD_BASE_URL = "https://app.speko.ai";
3
+ function makeSyntheticId(prefix) {
4
+ const random = Math.random().toString(36).slice(2, 10);
5
+ return `${prefix}_${random}`;
6
+ }
7
+ function nowIso() {
8
+ return new Date().toISOString();
9
+ }
10
+ function normalizeAgentRecord(input, fallbackName, fallbackContext) {
11
+ const source = (input ?? {});
12
+ const id = typeof source.id === "string" ? source.id : makeSyntheticId("ag");
13
+ const createdAt = typeof source.created_at === "string"
14
+ ? source.created_at
15
+ : typeof source.createdAt === "string"
16
+ ? source.createdAt
17
+ : nowIso();
18
+ const updatedAt = typeof source.updated_at === "string"
19
+ ? source.updated_at
20
+ : typeof source.updatedAt === "string"
21
+ ? source.updatedAt
22
+ : createdAt;
23
+ return {
24
+ ...source,
25
+ id,
26
+ name: typeof source.name === "string" ? source.name : fallbackName,
27
+ context: typeof source.context === "string" ? source.context : fallbackContext,
28
+ systemPrompt: typeof source.system_prompt === "string"
29
+ ? source.system_prompt
30
+ : typeof source.systemPrompt === "string"
31
+ ? source.systemPrompt
32
+ : "",
33
+ language: typeof source.language === "string" ? source.language : "auto",
34
+ priority: typeof source.priority === "string" ? source.priority : "quality",
35
+ greeting: typeof source.greeting === "string" ? source.greeting : undefined,
36
+ createdAt,
37
+ updatedAt,
38
+ };
39
+ }
40
+ function normalizeStatus(input, agentId) {
41
+ const source = (input ?? {});
42
+ const metrics = source.metrics ?? {};
43
+ const health = typeof source.health === "string"
44
+ ? source.health
45
+ : typeof source.status === "string"
46
+ ? source.status
47
+ : "unknown";
48
+ const recentCalls = typeof source.recent_calls === "number"
49
+ ? source.recent_calls
50
+ : typeof source.recentCalls === "number"
51
+ ? source.recentCalls
52
+ : typeof metrics.recent_calls === "number"
53
+ ? metrics.recent_calls
54
+ : 0;
55
+ return {
56
+ ...source,
57
+ agentId,
58
+ health,
59
+ recentCalls,
60
+ successRate: typeof source.success_rate === "number"
61
+ ? source.success_rate
62
+ : typeof source.successRate === "number"
63
+ ? source.successRate
64
+ : typeof metrics.success_rate === "number"
65
+ ? metrics.success_rate
66
+ : undefined,
67
+ avgLatencyMs: typeof source.avg_latency_ms === "number"
68
+ ? source.avg_latency_ms
69
+ : typeof source.avgLatencyMs === "number"
70
+ ? source.avgLatencyMs
71
+ : typeof metrics.avg_latency_ms === "number"
72
+ ? metrics.avg_latency_ms
73
+ : undefined,
74
+ mode: typeof source.mode === "string" ? source.mode : undefined,
75
+ provider: typeof source.provider === "string" ? source.provider : undefined,
76
+ lastCallAt: typeof source.last_call_at === "string"
77
+ ? source.last_call_at
78
+ : typeof source.lastCallAt === "string"
79
+ ? source.lastCallAt
80
+ : undefined,
81
+ };
82
+ }
83
+ export class SpekoApiClient {
84
+ baseUrl;
85
+ dashboardBaseUrl;
86
+ apiKey;
87
+ fetchImpl;
88
+ mockMode;
89
+ allowMockFallback;
90
+ constructor(options = {}) {
91
+ this.baseUrl = (options.baseUrl ?? process.env.SPEKO_API_URL ?? DEFAULT_API_BASE_URL).replace(/\/+$/, "");
92
+ this.dashboardBaseUrl = (options.dashboardBaseUrl ?? process.env.SPEKO_DASHBOARD_URL ?? DEFAULT_DASHBOARD_BASE_URL).replace(/\/+$/, "");
93
+ this.apiKey =
94
+ options.apiKey ??
95
+ process.env.SPEKO_API_KEY ??
96
+ process.env.SPEKO_KEY ??
97
+ "";
98
+ this.fetchImpl = options.fetchImpl ?? fetch;
99
+ this.mockMode = options.mockMode ?? (process.env.SPEKO_MCP_MOCK_API === "1" || !this.apiKey);
100
+ this.allowMockFallback = options.allowMockFallback ?? true;
101
+ }
102
+ getDashboardUrl(agentId) {
103
+ return `${this.dashboardBaseUrl}/agents/${agentId}`;
104
+ }
105
+ async request(path, init) {
106
+ const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
107
+ ...init,
108
+ headers: {
109
+ "Content-Type": "application/json",
110
+ ...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),
111
+ ...(init.headers ?? {}),
112
+ },
113
+ });
114
+ if (!response.ok) {
115
+ const body = await response.text();
116
+ throw new Error(`Speko API ${response.status}: ${body || response.statusText}`);
117
+ }
118
+ if (response.status === 204) {
119
+ return {};
120
+ }
121
+ return (await response.json());
122
+ }
123
+ mockAgentFromInput(input, agentId = makeSyntheticId("ag")) {
124
+ return {
125
+ id: agentId,
126
+ name: "name" in input && typeof input.name === "string" ? input.name : `speko-agent-${agentId.slice(-6)}`,
127
+ context: typeof input.context === "string" ? input.context : "",
128
+ systemPrompt: typeof input.systemPrompt === "string" ? input.systemPrompt : "",
129
+ language: typeof input.language === "string" ? input.language : "auto",
130
+ priority: typeof input.priority === "string" ? input.priority : "quality",
131
+ greeting: typeof input.greeting === "string" ? input.greeting : undefined,
132
+ createdAt: nowIso(),
133
+ updatedAt: nowIso(),
134
+ };
135
+ }
136
+ async createAgent(input) {
137
+ if (this.mockMode) {
138
+ return {
139
+ data: this.mockAgentFromInput(input),
140
+ meta: {
141
+ mode: "mock",
142
+ baseUrl: this.baseUrl,
143
+ warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
144
+ },
145
+ };
146
+ }
147
+ const payload = {
148
+ name: input.name,
149
+ context: input.context,
150
+ system_prompt: input.systemPrompt,
151
+ language: input.language ?? "auto",
152
+ priority: input.priority ?? "quality",
153
+ greeting: input.greeting,
154
+ };
155
+ try {
156
+ const response = await this.request("/v1/agents", {
157
+ method: "POST",
158
+ body: JSON.stringify(payload),
159
+ });
160
+ const data = normalizeAgentRecord(response, input.name, input.context);
161
+ return {
162
+ data,
163
+ meta: {
164
+ mode: "live",
165
+ baseUrl: this.baseUrl,
166
+ },
167
+ };
168
+ }
169
+ catch (error) {
170
+ if (!this.allowMockFallback) {
171
+ throw error;
172
+ }
173
+ return {
174
+ data: this.mockAgentFromInput(input),
175
+ meta: {
176
+ mode: "mock",
177
+ baseUrl: this.baseUrl,
178
+ warning: `Live API create failed. Returned synthetic agent. ${error.message}`,
179
+ },
180
+ };
181
+ }
182
+ }
183
+ async updateAgent(agentId, input) {
184
+ if (this.mockMode) {
185
+ return {
186
+ data: this.mockAgentFromInput(input, agentId),
187
+ meta: {
188
+ mode: "mock",
189
+ baseUrl: this.baseUrl,
190
+ warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
191
+ },
192
+ };
193
+ }
194
+ const payload = {
195
+ ...(input.context !== undefined ? { context: input.context } : {}),
196
+ ...(input.systemPrompt !== undefined ? { system_prompt: input.systemPrompt } : {}),
197
+ ...(input.language !== undefined ? { language: input.language } : {}),
198
+ ...(input.priority !== undefined ? { priority: input.priority } : {}),
199
+ ...(input.greeting !== undefined ? { greeting: input.greeting } : {}),
200
+ };
201
+ try {
202
+ const response = await this.request(`/v1/agents/${agentId}`, {
203
+ method: "PATCH",
204
+ body: JSON.stringify(payload),
205
+ });
206
+ return {
207
+ data: normalizeAgentRecord(response, `speko-agent-${agentId.slice(-6)}`, input.context ?? ""),
208
+ meta: {
209
+ mode: "live",
210
+ baseUrl: this.baseUrl,
211
+ },
212
+ };
213
+ }
214
+ catch (error) {
215
+ if (!this.allowMockFallback) {
216
+ throw error;
217
+ }
218
+ return {
219
+ data: this.mockAgentFromInput(input, agentId),
220
+ meta: {
221
+ mode: "mock",
222
+ baseUrl: this.baseUrl,
223
+ warning: `Live API update failed. Returned synthetic update. ${error.message}`,
224
+ },
225
+ };
226
+ }
227
+ }
228
+ async getAgentStatus(agentId) {
229
+ if (this.mockMode) {
230
+ return {
231
+ data: {
232
+ agentId,
233
+ health: "unknown",
234
+ recentCalls: 0,
235
+ successRate: 1,
236
+ avgLatencyMs: 0,
237
+ mode: "unknown",
238
+ provider: "unknown",
239
+ },
240
+ meta: {
241
+ mode: "mock",
242
+ baseUrl: this.baseUrl,
243
+ warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
244
+ },
245
+ };
246
+ }
247
+ try {
248
+ const response = await this.request(`/v1/agents/${agentId}/status`, {
249
+ method: "GET",
250
+ });
251
+ return {
252
+ data: normalizeStatus(response, agentId),
253
+ meta: {
254
+ mode: "live",
255
+ baseUrl: this.baseUrl,
256
+ },
257
+ };
258
+ }
259
+ catch (statusError) {
260
+ if (!this.allowMockFallback) {
261
+ throw statusError;
262
+ }
263
+ return {
264
+ data: {
265
+ agentId,
266
+ health: "unknown",
267
+ recentCalls: 0,
268
+ successRate: 0,
269
+ avgLatencyMs: 0,
270
+ mode: "unknown",
271
+ provider: "unknown",
272
+ },
273
+ meta: {
274
+ mode: "mock",
275
+ baseUrl: this.baseUrl,
276
+ warning: `Live API status failed. Returned synthetic status. ${statusError.message}`,
277
+ },
278
+ };
279
+ }
280
+ }
281
+ }
282
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type BenchmarkEntry } from "../data/benchmarks.js";
2
+ export type ScoreWeights = {
3
+ latency: number;
4
+ quality: number;
5
+ cost: number;
6
+ };
7
+ export type ProviderCategory = "stt" | "llm" | "tts";
8
+ export type ParsedProviderModel = {
9
+ provider: string;
10
+ model?: string;
11
+ };
12
+ export type ParsedCombo = {
13
+ stt: ParsedProviderModel;
14
+ llm: ParsedProviderModel;
15
+ tts: ParsedProviderModel;
16
+ };
17
+ export declare const DEFAULT_WEIGHTS: ScoreWeights;
18
+ export declare const DATA_SOURCE_UPDATED_AT = "2026-02-15T00:00:00Z";
19
+ export type ToolOutputFormat = "markdown" | "json";
20
+ export declare function resolveLanguage(input: string): string | null;
21
+ export declare function getLanguageSuggestions(input: string): string[];
22
+ export declare function resolveProvider(input: string): string | null;
23
+ export declare function describeParsedCombo(combo: ParsedCombo): string;
24
+ export declare function parseComboMatches(combo: string): {
25
+ parsed: ParsedCombo;
26
+ entries: BenchmarkEntry[];
27
+ } | null;
28
+ export declare function getProviderModels(provider: string, category: ProviderCategory): string[];
29
+ export declare function isModelKnown(provider: string, category: ProviderCategory, model: string): boolean;
30
+ export declare function formatToolResponse(format: ToolOutputFormat, markdown: string, jsonPayload: unknown): {
31
+ content: Array<{
32
+ type: "text";
33
+ text: string;
34
+ }>;
35
+ };
36
+ export declare function listKnownProviders(category?: ProviderCategory): string[];
37
+ export declare function makeProviderMatch(input: string, provider: string): boolean;
38
+ export declare function getUseCaseWeights(useCase: string): ScoreWeights;
39
+ export declare function resolveUseCase(input: string): string;
40
+ export declare function getObjectiveWeights(optimizeFor: "balanced" | "latency" | "quality" | "cost", useCase: string): ScoreWeights;
41
+ export declare function rankBenchmarks(entries: BenchmarkEntry[], weights: ScoreWeights): Array<BenchmarkEntry & {
42
+ score: number;
43
+ }>;
44
+ export declare function clampMaxResults(value: number): number;
45
+ //# sourceMappingURL=benchmark-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-utils.d.ts","sourceRoot":"","sources":["../../src/lib/benchmark-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,YAAqD,CAAC;AACpF,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AA+EnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuB5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAuBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAI9D;AA2BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,IAAI,CAgB1G;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAKxF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjG;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,GACnB;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CASpD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAGxE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI1E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAG/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,EACxD,OAAO,EAAE,MAAM,GACd,YAAY,CAKd;AAaD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EAAE,EACzB,OAAO,EAAE,YAAY,GACpB,KAAK,CAAC,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAS3C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -0,0 +1,244 @@
1
+ import { BENCHMARK_DATA, PROVIDER_INFO, SUPPORTED_LANGUAGES, USE_CASE_PRIORITIES, } from "../data/benchmarks.js";
2
+ const MAX_RESULTS = 10;
3
+ const MIN_PROVIDER_INPUT_LENGTH = 3;
4
+ const MIN_LANGUAGE_PREFIX_LENGTH = 3;
5
+ export const DEFAULT_WEIGHTS = { latency: 70, quality: 70, cost: 60 };
6
+ export const DATA_SOURCE_UPDATED_AT = "2026-02-15T00:00:00Z";
7
+ const LANGUAGE_ALIASES = {
8
+ english: ["en", "eng", "american", "us", "gb"],
9
+ thai: ["th", "thai", "thai language"],
10
+ vietnamese: ["vi", "viet", "vietnamese"],
11
+ indonesian: ["id", "ind"],
12
+ filipino: ["tl", "filipino", "tagalog", "ph"],
13
+ japanese: ["ja", "jp", "nihongo"],
14
+ korean: ["ko", "kr", "hangul", "korean"],
15
+ cantonese: ["zh-yue", "cantonese", "kantonees", "cn-cant"],
16
+ mandarin: ["zh", "zh-cn", "zh-hans", "mandarin"],
17
+ malay: ["ms", "ms-my", "malay"],
18
+ };
19
+ const PROVIDER_ALIASES = {
20
+ Deepgram: ["deepgram", "deep gram"],
21
+ AssemblyAI: ["assemblyai", "assembly ai", "assembly"],
22
+ OpenAI: ["openai", "open ai", "open-ai", "gpt", "chatgpt"],
23
+ Speechmatics: ["speechmatics", "speech-matics", "speech matics"],
24
+ Google: ["google", "gemini"],
25
+ Anthropic: ["anthropic", "claude", "claude ai"],
26
+ Groq: ["groq", "llama", "llama 4", "llama-4", "llama4"],
27
+ Cartesia: ["cartesia", "cartes ia"],
28
+ ElevenLabs: ["elevenlabs", "eleven labs", "eleven", "eleven-labs"],
29
+ PlayHT: ["playht", "play ht", "play-ht"],
30
+ Rime: ["rime", "rime ai"],
31
+ };
32
+ const USE_CASE_ALIASES = {
33
+ "customer-support": ["customer support", "support", "cs", "customer"],
34
+ sales: ["sale", "sales", "revenue"],
35
+ "debt-collections": ["debt collection", "collections", "collection", "collections team"],
36
+ scheduling: ["schedule", "calendar", "appointments", "booking"],
37
+ "healthcare-triage": ["healthcare", "medical", "triage", "doctor", "clinic"],
38
+ "insurance-claims": ["claims", "insurance", "insurance claim", "claims ops"],
39
+ "lead-qualification": ["lead qualify", "leads", "qualification", "lead"],
40
+ "appointment-reminders": ["reminder", "appointment", "notification", "nudge"],
41
+ "banking-faq": ["banking", "faq", "finance", "compliance"],
42
+ "recruitment-screening": ["recruiting", "recruitment", "screening", "hiring", "interviews"],
43
+ };
44
+ const ALL_PROVIDERS = Object.keys(PROVIDER_ALIASES);
45
+ const normalizeTerm = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim().replace(/\s+/g, " ");
46
+ const normalizeUseCase = (useCase) => normalizeTerm(useCase).replace(/\s+/g, "-");
47
+ const normalizeProviderInput = (input) => normalizeTerm(input);
48
+ const PROVIDER_ALIAS_CATALOG = Object.entries(PROVIDER_ALIASES)
49
+ .flatMap(([provider, aliases]) => {
50
+ const allAliases = [...new Set([provider, ...aliases].map(normalizeProviderInput))].filter(Boolean);
51
+ return allAliases.map((alias) => ({ provider, alias }));
52
+ })
53
+ .sort((a, b) => b.alias.length - a.alias.length);
54
+ function resolveProviderMatch(input) {
55
+ const normalized = normalizeProviderInput(input);
56
+ if (!normalized || normalized.length < MIN_PROVIDER_INPUT_LENGTH)
57
+ return null;
58
+ for (const candidate of PROVIDER_ALIAS_CATALOG) {
59
+ if (candidate.alias.length < MIN_PROVIDER_INPUT_LENGTH)
60
+ continue;
61
+ if (candidate.alias === normalized ||
62
+ candidate.alias.startsWith(normalized) ||
63
+ normalized.startsWith(`${candidate.alias} `)) {
64
+ return {
65
+ provider: candidate.provider,
66
+ matchedAlias: candidate.alias,
67
+ };
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ export function resolveLanguage(input) {
73
+ const normalized = normalizeTerm(input);
74
+ if (!normalized)
75
+ return null;
76
+ const direct = SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang) === normalized);
77
+ if (direct)
78
+ return direct;
79
+ const canonical = Object.keys(LANGUAGE_ALIASES).find((lang) => {
80
+ const aliases = LANGUAGE_ALIASES[lang];
81
+ return aliases.some((alias) => normalized === normalizeTerm(alias));
82
+ });
83
+ if (canonical) {
84
+ return SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang) === canonical) ?? canonical;
85
+ }
86
+ if (normalized.length >= MIN_LANGUAGE_PREFIX_LENGTH) {
87
+ const startsWith = SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang).startsWith(normalized) || normalized.startsWith(normalizeTerm(lang)));
88
+ if (startsWith)
89
+ return startsWith;
90
+ }
91
+ return null;
92
+ }
93
+ export function getLanguageSuggestions(input) {
94
+ const normalized = normalizeTerm(input);
95
+ if (!normalized)
96
+ return SUPPORTED_LANGUAGES.slice(0, 5);
97
+ const exact = SUPPORTED_LANGUAGES.filter((lang) => normalizeTerm(lang).includes(normalized) || normalized.includes(normalizeTerm(lang)));
98
+ const byAlias = SUPPORTED_LANGUAGES.filter((lang) => (LANGUAGE_ALIASES[normalizeTerm(lang)] ?? []).some((alias) => normalizeTerm(alias).includes(normalized)));
99
+ return [...new Set([...exact, ...byAlias])].slice(0, 5);
100
+ }
101
+ export function resolveProvider(input) {
102
+ const resolved = resolveProviderMatch(input);
103
+ return resolved ? resolved.provider : null;
104
+ }
105
+ function parseProviderWithModel(input) {
106
+ const normalized = normalizeProviderInput(input);
107
+ if (!normalized)
108
+ return null;
109
+ const resolved = resolveProviderMatch(input);
110
+ if (!resolved)
111
+ return null;
112
+ const normalizedRemainder = normalized.slice(resolved.matchedAlias.length).trim();
113
+ if (!normalizedRemainder)
114
+ return { provider: resolved.provider };
115
+ const originalTrimmed = input.trim();
116
+ const aliasWords = resolved.matchedAlias.split(/\s+/).length;
117
+ const inputWords = originalTrimmed.split(/\s+/);
118
+ const originalModel = inputWords.slice(aliasWords).join(" ").trim();
119
+ return {
120
+ provider: resolved.provider,
121
+ model: originalModel || normalizedRemainder,
122
+ };
123
+ }
124
+ export function describeParsedCombo(combo) {
125
+ const stringifyPart = ({ provider, model }) => `${provider}${model ? ` ${model}` : ""}`;
126
+ return `${stringifyPart(combo.stt)} + ${stringifyPart(combo.llm)} + ${stringifyPart(combo.tts)}`;
127
+ }
128
+ function parseComboInput(desc) {
129
+ const parts = desc
130
+ .split(/\s*(?:\+|,|->)\s*/)
131
+ .map((part) => part.trim())
132
+ .filter(Boolean);
133
+ if (parts.length !== 3)
134
+ return null;
135
+ const [sttInput, llmInput, ttsInput] = parts;
136
+ const stt = parseProviderWithModel(sttInput);
137
+ const llm = parseProviderWithModel(llmInput);
138
+ const tts = parseProviderWithModel(ttsInput);
139
+ if (!stt || !llm || !tts)
140
+ return null;
141
+ return { stt, llm, tts };
142
+ }
143
+ function normalizeModel(model) {
144
+ return normalizeTerm(model).replace(/\s+/g, "-");
145
+ }
146
+ function modelMatches(modelA, modelB) {
147
+ return normalizeModel(modelA) === normalizeModel(modelB);
148
+ }
149
+ export function parseComboMatches(combo) {
150
+ const parsed = parseComboInput(combo);
151
+ if (!parsed)
152
+ return null;
153
+ const entries = BENCHMARK_DATA.filter((entry) => {
154
+ return (makeProviderMatch(parsed.stt.provider, entry.stt) &&
155
+ (!parsed.stt.model || modelMatches(entry.sttModel, parsed.stt.model)) &&
156
+ makeProviderMatch(parsed.llm.provider, entry.llm) &&
157
+ (!parsed.llm.model || modelMatches(entry.llmModel, parsed.llm.model)) &&
158
+ makeProviderMatch(parsed.tts.provider, entry.tts) &&
159
+ (!parsed.tts.model || modelMatches(entry.ttsModel, parsed.tts.model)));
160
+ });
161
+ return { parsed, entries };
162
+ }
163
+ export function getProviderModels(provider, category) {
164
+ const resolved = resolveProvider(provider);
165
+ if (!resolved)
166
+ return [];
167
+ const categoryMap = PROVIDER_INFO[category];
168
+ return categoryMap[resolved]?.models ?? [];
169
+ }
170
+ export function isModelKnown(provider, category, model) {
171
+ const supported = getProviderModels(provider, category);
172
+ return supported.some((knownModel) => modelMatches(knownModel, model));
173
+ }
174
+ export function formatToolResponse(format, markdown, jsonPayload) {
175
+ return {
176
+ content: [
177
+ {
178
+ type: "text",
179
+ text: format === "json" ? JSON.stringify(jsonPayload, null, 2) : markdown,
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ export function listKnownProviders(category) {
185
+ const providers = category ? Object.keys(PROVIDER_INFO[category]) : ALL_PROVIDERS;
186
+ return [...providers].sort((a, b) => a.localeCompare(b));
187
+ }
188
+ export function makeProviderMatch(input, provider) {
189
+ const normalizedInput = resolveProvider(input);
190
+ if (!normalizedInput)
191
+ return false;
192
+ return normalizeTerm(normalizedInput) === normalizeTerm(provider);
193
+ }
194
+ export function getUseCaseWeights(useCase) {
195
+ const normalizedUseCase = resolveUseCase(useCase);
196
+ return USE_CASE_PRIORITIES[normalizedUseCase] || DEFAULT_WEIGHTS;
197
+ }
198
+ export function resolveUseCase(input) {
199
+ const normalized = normalizeUseCase(input);
200
+ if (USE_CASE_PRIORITIES[normalized])
201
+ return normalized;
202
+ const direct = Object.entries(USE_CASE_ALIASES).find(([useCase, aliases]) => useCase === normalized ||
203
+ aliases.some((alias) => {
204
+ const normalizedAlias = normalizeUseCase(alias);
205
+ return (normalizedAlias === normalized ||
206
+ normalizedAlias.startsWith(normalized) ||
207
+ normalized.startsWith(normalizedAlias));
208
+ }));
209
+ return direct ? direct[0] : normalized;
210
+ }
211
+ export function getObjectiveWeights(optimizeFor, useCase) {
212
+ if (optimizeFor === "latency")
213
+ return { latency: 100, quality: 30, cost: 30 };
214
+ if (optimizeFor === "quality")
215
+ return { latency: 30, quality: 100, cost: 30 };
216
+ if (optimizeFor === "cost")
217
+ return { latency: 30, quality: 30, cost: 100 };
218
+ return getUseCaseWeights(useCase);
219
+ }
220
+ function scoreBenchmark(entry, weights) {
221
+ const latencyScore = Math.max(0, 100 - (entry.latencyMs - 100) * 0.5);
222
+ const qualityScore = (entry.quality / 5) * 100;
223
+ const costScore = Math.max(0, 100 - entry.costPerMin * 5000);
224
+ return Math.round(((latencyScore * weights.latency + qualityScore * weights.quality + costScore * weights.cost) /
225
+ (weights.latency + weights.quality + weights.cost)) *
226
+ 10) / 10;
227
+ }
228
+ export function rankBenchmarks(entries, weights) {
229
+ return entries
230
+ .map((entry) => ({ ...entry, score: scoreBenchmark(entry, weights) }))
231
+ .sort((a, b) => {
232
+ if (b.score !== a.score)
233
+ return b.score - a.score;
234
+ if (a.latencyMs !== b.latencyMs)
235
+ return a.latencyMs - b.latencyMs;
236
+ if (b.quality !== a.quality)
237
+ return b.quality - a.quality;
238
+ return a.costPerMin - b.costPerMin;
239
+ });
240
+ }
241
+ export function clampMaxResults(value) {
242
+ return Math.max(1, Math.min(Math.floor(value), MAX_RESULTS));
243
+ }
244
+ //# sourceMappingURL=benchmark-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-utils.js","sourceRoot":"","sources":["../../src/lib/benchmark-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAc/B,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAiB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAI7D,MAAM,gBAAgB,GAA6B;IACjD,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;IACjC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACxC,SAAS,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;IAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;IAChD,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,gBAAgB,GAA6B;IACjD,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;IACnC,UAAU,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC;IACrD,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;IAC1D,YAAY,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC;IAChE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;IAC/C,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;IACvD,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;IACnC,UAAU,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC;IAClE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,MAAM,gBAAgB,GAA6B;IACjD,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;IACnC,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,CAAC;IACxF,UAAU,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC;IAC/D,mBAAmB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC5E,kBAAkB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,CAAC;IAC5E,oBAAoB,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC;IACxE,uBAAuB,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC;IAC7E,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC;IAC1D,uBAAuB,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC;CAC5F,CAAC;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAEpD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9C,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9E,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClG,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAE/E,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC5D,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;IAC/B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpG,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;KACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEnD,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,yBAAyB;QAAE,OAAO,IAAI,CAAC;IAE9E,KAAK,MAAM,SAAS,IAAI,sBAAsB,EAAE,CAAC;QAC/C,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,yBAAyB;YAAE,SAAS;QAEjE,IACE,SAAS,CAAC,KAAK,KAAK,UAAU;YAC9B,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YACtC,UAAU,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAC5C,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,YAAY,EAAE,SAAS,CAAC,KAAK;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;IACtF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,IAAI,SAAS,CAAC;IAC5F,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,IAAI,0BAA0B,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CACzC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACnG,CAAC;QACF,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAC/F,CAAC;IACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAClD,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CACzG,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAClF,IAAI,CAAC,mBAAmB;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEjE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,aAAa,IAAI,mBAAmB;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAuB,EAAU,EAAE,CACzE,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3C,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,mBAAmB,CAAC;SAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC7C,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,MAAc;IAClD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,OAAO,CACL,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAA0B;IAC5E,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAyC,CAAC;IACpF,OAAO,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAA0B,EAAE,KAAa;IACtF,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAwB,EACxB,QAAgB,EAChB,WAAoB;IAEpB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;aAC1E;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAClF,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IAC/D,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,aAAa,CAAC,eAAe,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,eAAe,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,mBAAmB,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAEvD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAC1E,OAAO,KAAK,UAAU;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAChD,OAAO,CACL,eAAe,KAAK,UAAU;gBAC9B,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;gBACtC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CACvC,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAwD,EACxD,OAAe;IAEf,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC9E,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC9E,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC3E,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB,EAAE,OAAqB;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,KAAK,CACf,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3F,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,EAAE,CACL,GAAG,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAyB,EACzB,OAAqB;IAErB,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;SACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC1D,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type VoiceProviderDetection = "elevenlabs" | "deepgram" | "cartesia" | "openai-audio";
2
+ export interface ScanMatch {
3
+ provider: VoiceProviderDetection;
4
+ file: string;
5
+ line: number;
6
+ match: string;
7
+ snippet: string;
8
+ }
9
+ export interface ProjectScanResult {
10
+ rootDir: string;
11
+ filesScanned: number;
12
+ packageSignals: Record<VoiceProviderDetection, string[]>;
13
+ matches: ScanMatch[];
14
+ }
15
+ export declare function scanProjectForVoiceSetups(scanDir?: string): Promise<ProjectScanResult>;
16
+ //# sourceMappingURL=project-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/project-scanner.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAE7F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAqID,wBAAsB,yBAAyB,CAAC,OAAO,SAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwCzF"}