@animalabs/membrane 0.1.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 (131) hide show
  1. package/dist/context/index.d.ts +10 -0
  2. package/dist/context/index.d.ts.map +1 -0
  3. package/dist/context/index.js +9 -0
  4. package/dist/context/index.js.map +1 -0
  5. package/dist/context/process.d.ts +22 -0
  6. package/dist/context/process.d.ts.map +1 -0
  7. package/dist/context/process.js +369 -0
  8. package/dist/context/process.js.map +1 -0
  9. package/dist/context/types.d.ts +118 -0
  10. package/dist/context/types.d.ts.map +1 -0
  11. package/dist/context/types.js +60 -0
  12. package/dist/context/types.js.map +1 -0
  13. package/dist/index.d.ts +12 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +18 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/membrane.d.ts +96 -0
  18. package/dist/membrane.d.ts.map +1 -0
  19. package/dist/membrane.js +893 -0
  20. package/dist/membrane.js.map +1 -0
  21. package/dist/providers/anthropic.d.ts +36 -0
  22. package/dist/providers/anthropic.d.ts.map +1 -0
  23. package/dist/providers/anthropic.js +265 -0
  24. package/dist/providers/anthropic.js.map +1 -0
  25. package/dist/providers/index.d.ts +8 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/dist/providers/index.js +8 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/providers/openai-compatible.d.ts +74 -0
  30. package/dist/providers/openai-compatible.d.ts.map +1 -0
  31. package/dist/providers/openai-compatible.js +412 -0
  32. package/dist/providers/openai-compatible.js.map +1 -0
  33. package/dist/providers/openai.d.ts +69 -0
  34. package/dist/providers/openai.d.ts.map +1 -0
  35. package/dist/providers/openai.js +455 -0
  36. package/dist/providers/openai.js.map +1 -0
  37. package/dist/providers/openrouter.d.ts +76 -0
  38. package/dist/providers/openrouter.d.ts.map +1 -0
  39. package/dist/providers/openrouter.js +492 -0
  40. package/dist/providers/openrouter.js.map +1 -0
  41. package/dist/transforms/chat.d.ts +52 -0
  42. package/dist/transforms/chat.d.ts.map +1 -0
  43. package/dist/transforms/chat.js +136 -0
  44. package/dist/transforms/chat.js.map +1 -0
  45. package/dist/transforms/index.d.ts +6 -0
  46. package/dist/transforms/index.d.ts.map +1 -0
  47. package/dist/transforms/index.js +6 -0
  48. package/dist/transforms/index.js.map +1 -0
  49. package/dist/transforms/prefill.d.ts +89 -0
  50. package/dist/transforms/prefill.d.ts.map +1 -0
  51. package/dist/transforms/prefill.js +401 -0
  52. package/dist/transforms/prefill.js.map +1 -0
  53. package/dist/types/config.d.ts +103 -0
  54. package/dist/types/config.d.ts.map +1 -0
  55. package/dist/types/config.js +21 -0
  56. package/dist/types/config.js.map +1 -0
  57. package/dist/types/content.d.ts +81 -0
  58. package/dist/types/content.d.ts.map +1 -0
  59. package/dist/types/content.js +40 -0
  60. package/dist/types/content.js.map +1 -0
  61. package/dist/types/errors.d.ts +42 -0
  62. package/dist/types/errors.d.ts.map +1 -0
  63. package/dist/types/errors.js +208 -0
  64. package/dist/types/errors.js.map +1 -0
  65. package/dist/types/index.d.ts +18 -0
  66. package/dist/types/index.d.ts.map +1 -0
  67. package/dist/types/index.js +9 -0
  68. package/dist/types/index.js.map +1 -0
  69. package/dist/types/message.d.ts +46 -0
  70. package/dist/types/message.d.ts.map +1 -0
  71. package/dist/types/message.js +38 -0
  72. package/dist/types/message.js.map +1 -0
  73. package/dist/types/provider.d.ts +155 -0
  74. package/dist/types/provider.d.ts.map +1 -0
  75. package/dist/types/provider.js +5 -0
  76. package/dist/types/provider.js.map +1 -0
  77. package/dist/types/request.d.ts +78 -0
  78. package/dist/types/request.d.ts.map +1 -0
  79. package/dist/types/request.js +5 -0
  80. package/dist/types/request.js.map +1 -0
  81. package/dist/types/response.d.ts +131 -0
  82. package/dist/types/response.d.ts.map +1 -0
  83. package/dist/types/response.js +7 -0
  84. package/dist/types/response.js.map +1 -0
  85. package/dist/types/streaming.d.ts +164 -0
  86. package/dist/types/streaming.d.ts.map +1 -0
  87. package/dist/types/streaming.js +5 -0
  88. package/dist/types/streaming.js.map +1 -0
  89. package/dist/types/tools.d.ts +71 -0
  90. package/dist/types/tools.d.ts.map +1 -0
  91. package/dist/types/tools.js +5 -0
  92. package/dist/types/tools.js.map +1 -0
  93. package/dist/utils/index.d.ts +5 -0
  94. package/dist/utils/index.d.ts.map +1 -0
  95. package/dist/utils/index.js +5 -0
  96. package/dist/utils/index.js.map +1 -0
  97. package/dist/utils/stream-parser.d.ts +53 -0
  98. package/dist/utils/stream-parser.d.ts.map +1 -0
  99. package/dist/utils/stream-parser.js +359 -0
  100. package/dist/utils/stream-parser.js.map +1 -0
  101. package/dist/utils/tool-parser.d.ts +130 -0
  102. package/dist/utils/tool-parser.d.ts.map +1 -0
  103. package/dist/utils/tool-parser.js +571 -0
  104. package/dist/utils/tool-parser.js.map +1 -0
  105. package/package.json +37 -0
  106. package/src/context/index.ts +24 -0
  107. package/src/context/process.ts +520 -0
  108. package/src/context/types.ts +231 -0
  109. package/src/index.ts +23 -0
  110. package/src/membrane.ts +1174 -0
  111. package/src/providers/anthropic.ts +340 -0
  112. package/src/providers/index.ts +31 -0
  113. package/src/providers/openai-compatible.ts +570 -0
  114. package/src/providers/openai.ts +625 -0
  115. package/src/providers/openrouter.ts +662 -0
  116. package/src/transforms/chat.ts +212 -0
  117. package/src/transforms/index.ts +22 -0
  118. package/src/transforms/prefill.ts +585 -0
  119. package/src/types/config.ts +172 -0
  120. package/src/types/content.ts +181 -0
  121. package/src/types/errors.ts +277 -0
  122. package/src/types/index.ts +154 -0
  123. package/src/types/message.ts +89 -0
  124. package/src/types/provider.ts +249 -0
  125. package/src/types/request.ts +131 -0
  126. package/src/types/response.ts +223 -0
  127. package/src/types/streaming.ts +231 -0
  128. package/src/types/tools.ts +92 -0
  129. package/src/utils/index.ts +15 -0
  130. package/src/utils/stream-parser.ts +440 -0
  131. package/src/utils/tool-parser.ts +715 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * OpenAI Direct provider adapter
3
+ *
4
+ * Direct adapter for OpenAI's API with support for modern models:
5
+ * - GPT-4o, GPT-4 Turbo
6
+ * - GPT-5, GPT-5-mini (uses max_completion_tokens)
7
+ * - o1, o3, o4-mini reasoning models
8
+ *
9
+ * Key differences from generic OpenAI-compatible:
10
+ * - Uses max_completion_tokens for newer models (not max_tokens)
11
+ * - Handles reasoning models' special requirements
12
+ * - Direct API integration with proper error handling
13
+ */
14
+ import { MembraneError, rateLimitError, contextLengthError, authError, serverError, abortError, networkError, } from '../types/index.js';
15
+ // ============================================================================
16
+ // Model Detection Helpers
17
+ // ============================================================================
18
+ /**
19
+ * Models that require max_completion_tokens instead of max_tokens
20
+ */
21
+ const COMPLETION_TOKENS_MODELS = [
22
+ 'gpt-5',
23
+ 'gpt-5-mini',
24
+ 'o1',
25
+ 'o1-mini',
26
+ 'o1-preview',
27
+ 'o3',
28
+ 'o3-mini',
29
+ 'o4-mini',
30
+ ];
31
+ /**
32
+ * Check if a model requires max_completion_tokens parameter
33
+ */
34
+ function requiresCompletionTokens(model) {
35
+ return COMPLETION_TOKENS_MODELS.some(prefix => model.startsWith(prefix));
36
+ }
37
+ /**
38
+ * Models that don't support custom temperature (only default 1.0)
39
+ */
40
+ const NO_TEMPERATURE_MODELS = [
41
+ 'gpt-5', // Base GPT-5 models
42
+ 'gpt-5-mini',
43
+ 'o1', // Reasoning models
44
+ 'o1-mini',
45
+ 'o1-preview',
46
+ 'o3',
47
+ 'o3-mini',
48
+ 'o4-mini',
49
+ ];
50
+ /**
51
+ * Check if a model doesn't support custom temperature
52
+ */
53
+ function noTemperatureSupport(model) {
54
+ return NO_TEMPERATURE_MODELS.some(prefix => model.startsWith(prefix));
55
+ }
56
+ /**
57
+ * Models that don't support stop sequences (reasoning models)
58
+ */
59
+ const NO_STOP_MODELS = [
60
+ 'o1', // Reasoning models don't support stop sequences
61
+ 'o1-mini',
62
+ 'o1-preview',
63
+ 'o3',
64
+ 'o3-mini',
65
+ 'o4-mini',
66
+ ];
67
+ /**
68
+ * Check if a model doesn't support stop sequences
69
+ */
70
+ function noStopSupport(model) {
71
+ return NO_STOP_MODELS.some(prefix => model.startsWith(prefix));
72
+ }
73
+ // ============================================================================
74
+ // OpenAI Adapter
75
+ // ============================================================================
76
+ export class OpenAIAdapter {
77
+ name = 'openai';
78
+ apiKey;
79
+ baseURL;
80
+ organization;
81
+ defaultMaxTokens;
82
+ constructor(config = {}) {
83
+ this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
84
+ this.baseURL = config.baseURL ?? 'https://api.openai.com/v1';
85
+ this.organization = config.organization;
86
+ this.defaultMaxTokens = config.defaultMaxTokens ?? 4096;
87
+ if (!this.apiKey) {
88
+ throw new Error('OpenAI API key not provided');
89
+ }
90
+ }
91
+ supportsModel(modelId) {
92
+ // OpenAI models typically start with gpt-, o1, o3, o4
93
+ return (modelId.startsWith('gpt-') ||
94
+ modelId.startsWith('o1') ||
95
+ modelId.startsWith('o3') ||
96
+ modelId.startsWith('o4'));
97
+ }
98
+ async complete(request, options) {
99
+ const openAIRequest = this.buildRequest(request);
100
+ try {
101
+ const response = await this.makeRequest(openAIRequest, options);
102
+ return this.parseResponse(response, request.model);
103
+ }
104
+ catch (error) {
105
+ throw this.handleError(error);
106
+ }
107
+ }
108
+ async stream(request, callbacks, options) {
109
+ const openAIRequest = this.buildRequest(request);
110
+ openAIRequest.stream = true;
111
+ // Request usage data in stream for cache metrics
112
+ openAIRequest.stream_options = { include_usage: true };
113
+ try {
114
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
115
+ method: 'POST',
116
+ headers: this.getHeaders(),
117
+ body: JSON.stringify(openAIRequest),
118
+ signal: options?.signal,
119
+ });
120
+ if (!response.ok) {
121
+ const errorText = await response.text();
122
+ throw new Error(`OpenAI API error: ${response.status} ${errorText}`);
123
+ }
124
+ const reader = response.body?.getReader();
125
+ if (!reader) {
126
+ throw new Error('No response body');
127
+ }
128
+ const decoder = new TextDecoder();
129
+ let accumulated = '';
130
+ let finishReason = 'stop';
131
+ let toolCalls = [];
132
+ let streamUsage;
133
+ while (true) {
134
+ const { done, value } = await reader.read();
135
+ if (done)
136
+ break;
137
+ const chunk = decoder.decode(value, { stream: true });
138
+ const lines = chunk.split('\n').filter(line => line.startsWith('data: '));
139
+ for (const line of lines) {
140
+ const data = line.slice(6);
141
+ if (data === '[DONE]')
142
+ continue;
143
+ try {
144
+ const parsed = JSON.parse(data);
145
+ const delta = parsed.choices?.[0]?.delta;
146
+ if (delta?.content) {
147
+ accumulated += delta.content;
148
+ callbacks.onChunk(delta.content);
149
+ }
150
+ // Handle streaming tool calls
151
+ if (delta?.tool_calls) {
152
+ for (const tc of delta.tool_calls) {
153
+ const index = tc.index ?? 0;
154
+ if (!toolCalls[index]) {
155
+ toolCalls[index] = {
156
+ id: tc.id ?? '',
157
+ type: 'function',
158
+ function: { name: '', arguments: '' },
159
+ };
160
+ }
161
+ if (tc.id)
162
+ toolCalls[index].id = tc.id;
163
+ if (tc.function?.name)
164
+ toolCalls[index].function.name = tc.function.name;
165
+ if (tc.function?.arguments) {
166
+ toolCalls[index].function.arguments += tc.function.arguments;
167
+ }
168
+ }
169
+ }
170
+ if (parsed.choices?.[0]?.finish_reason) {
171
+ finishReason = parsed.choices[0].finish_reason;
172
+ }
173
+ // Capture usage data (comes in final chunk with stream_options.include_usage)
174
+ if (parsed.usage) {
175
+ streamUsage = parsed.usage;
176
+ }
177
+ }
178
+ catch {
179
+ // Ignore parse errors in stream
180
+ }
181
+ }
182
+ }
183
+ // Build response with accumulated data
184
+ const message = {
185
+ role: 'assistant',
186
+ content: accumulated || null,
187
+ };
188
+ if (toolCalls.length > 0) {
189
+ message.tool_calls = toolCalls;
190
+ }
191
+ return this.parseStreamedResponse(message, finishReason, request.model, streamUsage);
192
+ }
193
+ catch (error) {
194
+ throw this.handleError(error);
195
+ }
196
+ }
197
+ getHeaders() {
198
+ const headers = {
199
+ 'Authorization': `Bearer ${this.apiKey}`,
200
+ 'Content-Type': 'application/json',
201
+ };
202
+ if (this.organization) {
203
+ headers['OpenAI-Organization'] = this.organization;
204
+ }
205
+ return headers;
206
+ }
207
+ buildRequest(request) {
208
+ const messages = this.convertMessages(request.messages);
209
+ const model = request.model;
210
+ const maxTokens = request.maxTokens || this.defaultMaxTokens;
211
+ const params = {
212
+ model,
213
+ messages,
214
+ };
215
+ // Use appropriate max tokens parameter based on model
216
+ if (requiresCompletionTokens(model)) {
217
+ params.max_completion_tokens = maxTokens;
218
+ }
219
+ else {
220
+ params.max_tokens = maxTokens;
221
+ }
222
+ // Some models (gpt-5, o1, o3, o4) don't support custom temperature
223
+ if (request.temperature !== undefined && !noTemperatureSupport(model)) {
224
+ params.temperature = request.temperature;
225
+ }
226
+ // Reasoning models (o1, o3, o4) don't support stop sequences
227
+ if (request.stopSequences && request.stopSequences.length > 0 && !noStopSupport(model)) {
228
+ params.stop = request.stopSequences;
229
+ }
230
+ if (request.tools && request.tools.length > 0) {
231
+ params.tools = this.convertTools(request.tools);
232
+ }
233
+ // Apply extra params (can override automatic choices)
234
+ if (request.extra) {
235
+ Object.assign(params, request.extra);
236
+ }
237
+ return params;
238
+ }
239
+ convertMessages(messages) {
240
+ // Use flatMap to handle one-to-many expansion (multiple tool_results → multiple messages)
241
+ return messages.flatMap(msg => {
242
+ // If it's already in OpenAI format, pass through
243
+ if (msg.role && (typeof msg.content === 'string' || msg.content === null || msg.tool_calls)) {
244
+ return [msg];
245
+ }
246
+ // Convert from Anthropic-style format
247
+ if (Array.isArray(msg.content)) {
248
+ const textParts = [];
249
+ const toolCalls = [];
250
+ const toolResults = [];
251
+ for (const block of msg.content) {
252
+ if (block.type === 'text') {
253
+ textParts.push(block.text);
254
+ }
255
+ else if (block.type === 'tool_use') {
256
+ toolCalls.push({
257
+ id: block.id,
258
+ type: 'function',
259
+ function: {
260
+ name: block.name,
261
+ arguments: JSON.stringify(block.input),
262
+ },
263
+ });
264
+ }
265
+ else if (block.type === 'tool_result') {
266
+ // Collect ALL tool results - each becomes a separate message
267
+ toolResults.push({
268
+ role: 'tool',
269
+ tool_call_id: block.tool_use_id || block.toolUseId,
270
+ content: typeof block.content === 'string' ? block.content : JSON.stringify(block.content),
271
+ });
272
+ }
273
+ }
274
+ // If we have tool results, return them (possibly multiple)
275
+ if (toolResults.length > 0) {
276
+ return toolResults;
277
+ }
278
+ // Otherwise build normal message
279
+ const result = {
280
+ role: msg.role,
281
+ content: textParts.join('\n') || null,
282
+ };
283
+ if (toolCalls.length > 0) {
284
+ result.tool_calls = toolCalls;
285
+ }
286
+ return [result];
287
+ }
288
+ return [{
289
+ role: msg.role,
290
+ content: msg.content,
291
+ }];
292
+ });
293
+ }
294
+ convertTools(tools) {
295
+ return tools.map(tool => {
296
+ const inputSchema = tool.inputSchema || tool.input_schema || { type: 'object', properties: {} };
297
+ return {
298
+ type: 'function',
299
+ function: {
300
+ name: tool.name,
301
+ description: tool.description,
302
+ parameters: inputSchema,
303
+ },
304
+ };
305
+ });
306
+ }
307
+ async makeRequest(request, options) {
308
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
309
+ method: 'POST',
310
+ headers: this.getHeaders(),
311
+ body: JSON.stringify(request),
312
+ signal: options?.signal,
313
+ });
314
+ if (!response.ok) {
315
+ const errorText = await response.text();
316
+ throw new Error(`OpenAI API error: ${response.status} ${errorText}`);
317
+ }
318
+ return response.json();
319
+ }
320
+ parseResponse(response, requestedModel) {
321
+ const choice = response.choices[0];
322
+ const message = choice?.message;
323
+ // Extract prompt caching details (OpenAI automatic caching for prompts ≥1024 tokens)
324
+ const cachedTokens = response.usage?.prompt_tokens_details?.cached_tokens ?? 0;
325
+ return {
326
+ content: this.messageToContent(message),
327
+ stopReason: this.mapFinishReason(choice?.finish_reason),
328
+ stopSequence: undefined,
329
+ usage: {
330
+ inputTokens: response.usage?.prompt_tokens ?? 0,
331
+ outputTokens: response.usage?.completion_tokens ?? 0,
332
+ // OpenAI's automatic prompt caching - cached tokens are read from cache
333
+ // Note: OpenAI doesn't have separate "creation" tokens - it's automatic
334
+ cacheReadTokens: cachedTokens > 0 ? cachedTokens : undefined,
335
+ },
336
+ model: response.model ?? requestedModel,
337
+ raw: response,
338
+ };
339
+ }
340
+ parseStreamedResponse(message, finishReason, requestedModel, streamUsage) {
341
+ // Extract cached tokens from stream usage if available
342
+ const cachedTokens = streamUsage?.prompt_tokens_details?.cached_tokens ?? 0;
343
+ return {
344
+ content: this.messageToContent(message),
345
+ stopReason: this.mapFinishReason(finishReason),
346
+ stopSequence: undefined,
347
+ usage: {
348
+ inputTokens: streamUsage?.prompt_tokens ?? 0,
349
+ outputTokens: streamUsage?.completion_tokens ?? 0,
350
+ cacheReadTokens: cachedTokens > 0 ? cachedTokens : undefined,
351
+ },
352
+ model: requestedModel,
353
+ raw: { message, finish_reason: finishReason, usage: streamUsage },
354
+ };
355
+ }
356
+ messageToContent(message) {
357
+ if (!message)
358
+ return [];
359
+ const content = [];
360
+ if (message.content) {
361
+ content.push({ type: 'text', text: message.content });
362
+ }
363
+ if (message.tool_calls) {
364
+ for (const tc of message.tool_calls) {
365
+ content.push({
366
+ type: 'tool_use',
367
+ id: tc.id,
368
+ name: tc.function.name,
369
+ input: JSON.parse(tc.function.arguments || '{}'),
370
+ });
371
+ }
372
+ }
373
+ return content;
374
+ }
375
+ mapFinishReason(reason) {
376
+ switch (reason) {
377
+ case 'stop':
378
+ return 'end_turn';
379
+ case 'length':
380
+ return 'max_tokens';
381
+ case 'tool_calls':
382
+ return 'tool_use';
383
+ case 'content_filter':
384
+ return 'refusal';
385
+ default:
386
+ return 'end_turn';
387
+ }
388
+ }
389
+ handleError(error) {
390
+ if (error instanceof Error) {
391
+ const message = error.message;
392
+ // OpenAI specific error patterns
393
+ if (message.includes('429') || message.includes('rate_limit')) {
394
+ // Try to extract retry-after
395
+ const retryMatch = message.match(/retry after (\d+)/i);
396
+ const retryAfter = retryMatch?.[1] ? parseInt(retryMatch[1], 10) * 1000 : undefined;
397
+ return rateLimitError(message, retryAfter, error);
398
+ }
399
+ if (message.includes('401') || message.includes('invalid_api_key') || message.includes('Incorrect API key')) {
400
+ return authError(message, error);
401
+ }
402
+ if (message.includes('context_length') || message.includes('maximum context') || message.includes('too long')) {
403
+ return contextLengthError(message, error);
404
+ }
405
+ if (message.includes('500') || message.includes('502') || message.includes('503') || message.includes('server_error')) {
406
+ return serverError(message, undefined, error);
407
+ }
408
+ if (error.name === 'AbortError') {
409
+ return abortError();
410
+ }
411
+ if (message.includes('network') || message.includes('fetch') || message.includes('ECONNREFUSED')) {
412
+ return networkError(message, error);
413
+ }
414
+ }
415
+ return new MembraneError({
416
+ type: 'unknown',
417
+ message: error instanceof Error ? error.message : String(error),
418
+ retryable: false,
419
+ rawError: error,
420
+ });
421
+ }
422
+ }
423
+ // ============================================================================
424
+ // Content Conversion Utilities
425
+ // ============================================================================
426
+ /**
427
+ * Convert normalized content blocks to OpenAI message format
428
+ */
429
+ export function toOpenAIContent(blocks) {
430
+ const textBlocks = blocks.filter(b => b.type === 'text');
431
+ if (textBlocks.length === 0)
432
+ return null;
433
+ return textBlocks.map(b => b.text).join('\n');
434
+ }
435
+ /**
436
+ * Convert OpenAI response message to normalized content blocks
437
+ */
438
+ export function fromOpenAIContent(message) {
439
+ const result = [];
440
+ if (message.content) {
441
+ result.push({ type: 'text', text: message.content });
442
+ }
443
+ if (message.tool_calls) {
444
+ for (const tc of message.tool_calls) {
445
+ result.push({
446
+ type: 'tool_use',
447
+ id: tc.id,
448
+ name: tc.function.name,
449
+ input: JSON.parse(tc.function.arguments || '{}'),
450
+ });
451
+ }
452
+ }
453
+ return result;
454
+ }
455
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,EACL,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAyE3B,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,wBAAwB,GAAG;IAC/B,OAAO;IACP,YAAY;IACZ,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,IAAI;IACJ,SAAS;IACT,SAAS;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAQ,oBAAoB;IACnC,YAAY;IACZ,IAAI,EAAW,mBAAmB;IAClC,SAAS;IACT,YAAY;IACZ,IAAI;IACJ,SAAS;IACT,SAAS;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,IAAI,EAAW,gDAAgD;IAC/D,SAAS;IACT,YAAY;IACZ,IAAI;IACJ,SAAS;IACT,SAAS;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,QAAQ,CAAC;IACjB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,YAAY,CAAU;IACtB,gBAAgB,CAAS;IAEjC,YAAY,SAA8B,EAAE;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAExD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,sDAAsD;QACtD,OAAO,CACL,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAwB,EACxB,OAAgC;QAEhC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,SAA0B,EAC1B,OAAgC;QAEhC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;QAC5B,iDAAiD;QACjD,aAAa,CAAC,cAAc,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBACnC,MAAM,EAAE,OAAO,EAAE,MAAM;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,YAAY,GAAG,MAAM,CAAC;YAC1B,IAAI,SAAS,GAAqB,EAAE,CAAC;YACrC,IAAI,WAAgD,CAAC;YAErD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,IAAI,KAAK,QAAQ;wBAAE,SAAS;oBAEhC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;wBAEzC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;4BACnB,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC;4BAC7B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACnC,CAAC;wBAED,8BAA8B;wBAC9B,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;4BACtB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gCAClC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;gCAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oCACtB,SAAS,CAAC,KAAK,CAAC,GAAG;wCACjB,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;wCACf,IAAI,EAAE,UAAU;wCAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;qCACtC,CAAC;gCACJ,CAAC;gCACD,IAAI,EAAE,CAAC,EAAE;oCAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gCACvC,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI;oCAAE,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gCACzE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;oCAC3B,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gCAC/D,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;4BACvC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;wBACjD,CAAC;wBAED,8EAA8E;wBAC9E,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;4BACjB,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;wBAC7B,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,gCAAgC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,uCAAuC;YACvC,MAAM,OAAO,GAAkB;gBAC7B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,WAAW,IAAI,IAAI;aAC7B,CAAC;YAEF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;YACjC,CAAC;YAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,OAAO,GAA2B;YACtC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;YACxC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QACrD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY,CAAC,OAAwB;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAiB,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE7D,MAAM,MAAM,GAAQ;YAClB,KAAK;YACL,QAAQ;SACT,CAAC;QAEF,sDAAsD;QACtD,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,mEAAmE;QACnE,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC3C,CAAC;QAED,6DAA6D;QAC7D,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACvF,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;QAC3D,CAAC;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,QAAe;QACrC,0FAA0F;QAC1F,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,iDAAiD;YACjD,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5F,OAAO,CAAC,GAAoB,CAAC,CAAC;YAChC,CAAC;YAED,sCAAsC;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAqB,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAoB,EAAE,CAAC;gBAExC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACrC,SAAS,CAAC,IAAI,CAAC;4BACb,EAAE,EAAE,KAAK,CAAC,EAAE;4BACZ,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE;gCACR,IAAI,EAAE,KAAK,CAAC,IAAI;gCAChB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;6BACvC;yBACF,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBACxC,6DAA6D;wBAC7D,WAAW,CAAC,IAAI,CAAC;4BACf,IAAI,EAAE,MAAe;4BACrB,YAAY,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS;4BAClD,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;yBAC3F,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,WAAW,CAAC;gBACrB,CAAC;gBAED,iCAAiC;gBACjC,MAAM,MAAM,GAAkB;oBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;iBACtC,CAAC;gBAEF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;gBAChC,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC;oBACN,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YAEhG,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,UAAU,EAAE,WAAW;iBACxB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAY,EAAE,OAAgC;QACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAA6B,CAAC;IACpD,CAAC;IAEO,aAAa,CAAC,QAAwB,EAAE,cAAsB;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;QAEhC,qFAAqF;QACrF,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,aAAa,IAAI,CAAC,CAAC;QAE/E,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC;YACvD,YAAY,EAAE,SAAS;YACvB,KAAK,EAAE;gBACL,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;gBAC/C,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;gBACpD,wEAAwE;gBACxE,wEAAwE;gBACxE,eAAe,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC7D;YACD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,cAAc;YACvC,GAAG,EAAE,QAAQ;SACd,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAC3B,OAAsB,EACtB,YAAoB,EACpB,cAAsB,EACtB,WAAqC;QAErC,uDAAuD;QACvD,MAAM,YAAY,GAAG,WAAW,EAAE,qBAAqB,EAAE,aAAa,IAAI,CAAC,CAAC;QAE5E,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;YAC9C,YAAY,EAAE,SAAS;YACvB,KAAK,EAAE;gBACL,WAAW,EAAE,WAAW,EAAE,aAAa,IAAI,CAAC;gBAC5C,YAAY,EAAE,WAAW,EAAE,iBAAiB,IAAI,CAAC;gBACjD,eAAe,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC7D;YACD,KAAK,EAAE,cAAc;YACrB,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE;SAClE,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,OAAkC;QACzD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAExB,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU;oBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe,CAAC,MAA0B;QAChD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,UAAU,CAAC;YACpB,KAAK,QAAQ;gBACX,OAAO,YAAY,CAAC;YACtB,KAAK,YAAY;gBACf,OAAO,UAAU,CAAC;YACpB,KAAK,gBAAgB;gBACnB,OAAO,SAAS,CAAC;YACnB;gBACE,OAAO,UAAU,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAc;QAChC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAE9B,iCAAiC;YACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,6BAA6B;gBAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpF,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5G,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9G,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtH,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,UAAU,EAAE,CAAC;YACtB,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjG,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;CACF;AAED,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAA0C,CAAC;IAClG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * OpenRouter provider adapter
3
+ *
4
+ * Handles OpenAI-compatible API with tool_calls format
5
+ */
6
+ import type { ProviderAdapter, ProviderRequest, ProviderRequestOptions, ProviderResponse, StreamCallbacks, ContentBlock } from '../types/index.js';
7
+ /** Content block for Anthropic-style caching through OpenRouter */
8
+ interface OpenRouterContentBlock {
9
+ type: 'text';
10
+ text: string;
11
+ cache_control?: {
12
+ type: 'ephemeral';
13
+ };
14
+ }
15
+ interface OpenRouterMessage {
16
+ role: 'user' | 'assistant' | 'system' | 'tool';
17
+ /** Can be string, null, or content blocks array (for Claude cache_control) */
18
+ content?: string | null | OpenRouterContentBlock[];
19
+ tool_calls?: OpenRouterToolCall[];
20
+ tool_call_id?: string;
21
+ }
22
+ interface OpenRouterToolCall {
23
+ id: string;
24
+ type: 'function';
25
+ function: {
26
+ name: string;
27
+ arguments: string;
28
+ };
29
+ }
30
+ export interface OpenRouterAdapterConfig {
31
+ /** API key (defaults to OPENROUTER_API_KEY env var) */
32
+ apiKey?: string;
33
+ /** Base URL (default: https://openrouter.ai/api/v1) */
34
+ baseURL?: string;
35
+ /** HTTP Referer header for OpenRouter */
36
+ httpReferer?: string;
37
+ /** X-Title header for OpenRouter */
38
+ xTitle?: string;
39
+ /** Default max tokens */
40
+ defaultMaxTokens?: number;
41
+ }
42
+ export declare class OpenRouterAdapter implements ProviderAdapter {
43
+ readonly name = "openrouter";
44
+ private apiKey;
45
+ private baseURL;
46
+ private httpReferer;
47
+ private xTitle;
48
+ private defaultMaxTokens;
49
+ constructor(config?: OpenRouterAdapterConfig);
50
+ supportsModel(modelId: string): boolean;
51
+ complete(request: ProviderRequest, options?: ProviderRequestOptions): Promise<ProviderResponse>;
52
+ stream(request: ProviderRequest, callbacks: StreamCallbacks, options?: ProviderRequestOptions): Promise<ProviderResponse>;
53
+ private getHeaders;
54
+ private buildRequest;
55
+ private convertMessages;
56
+ private convertTools;
57
+ private makeRequest;
58
+ private parseResponse;
59
+ private parseStreamedResponse;
60
+ private messageToContent;
61
+ private mapFinishReason;
62
+ private handleError;
63
+ }
64
+ /**
65
+ * Convert normalized content blocks to OpenRouter format
66
+ */
67
+ export declare function toOpenRouterMessages(messages: {
68
+ role: string;
69
+ content: ContentBlock[];
70
+ }[]): OpenRouterMessage[];
71
+ /**
72
+ * Convert OpenRouter response to normalized content blocks
73
+ */
74
+ export declare function fromOpenRouterMessage(message: OpenRouterMessage): ContentBlock[];
75
+ export {};
76
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAe3B,mEAAmE;AACnE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACvC;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAqCD,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,qBAAa,iBAAkB,YAAW,eAAe;IACvD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,GAAE,uBAA4B;IAYhD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKjC,QAAQ,CACZ,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAWtB,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAoG5B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAwEpB,OAAO,CAAC,eAAe;IA+EvB,OAAO,CAAC,YAAY;YAWN,WAAW;IAgBzB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,WAAW;CAoCpB;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,EAAE,GACpD,iBAAiB,EAAE,CAmDrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,EAAE,CA4BhF"}