opencode-cursor-proxy 1.0.1

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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/README.zh-CN.md +136 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/api/agent-service.d.ts +136 -0
  8. package/dist/lib/api/agent-service.js +938 -0
  9. package/dist/lib/api/agent-service.js.map +1 -0
  10. package/dist/lib/api/ai-service.d.ts +26 -0
  11. package/dist/lib/api/ai-service.js +38 -0
  12. package/dist/lib/api/ai-service.js.map +1 -0
  13. package/dist/lib/api/cursor-client.d.ts +119 -0
  14. package/dist/lib/api/cursor-client.js +511 -0
  15. package/dist/lib/api/cursor-client.js.map +1 -0
  16. package/dist/lib/api/cursor-models.d.ts +13 -0
  17. package/dist/lib/api/cursor-models.js +34 -0
  18. package/dist/lib/api/cursor-models.js.map +1 -0
  19. package/dist/lib/api/openai-compat.d.ts +10 -0
  20. package/dist/lib/api/openai-compat.js +262 -0
  21. package/dist/lib/api/openai-compat.js.map +1 -0
  22. package/dist/lib/api/proto/agent-messages.d.ts +25 -0
  23. package/dist/lib/api/proto/agent-messages.js +132 -0
  24. package/dist/lib/api/proto/agent-messages.js.map +1 -0
  25. package/dist/lib/api/proto/bidi.d.ts +17 -0
  26. package/dist/lib/api/proto/bidi.js +24 -0
  27. package/dist/lib/api/proto/bidi.js.map +1 -0
  28. package/dist/lib/api/proto/decoding.d.ts +19 -0
  29. package/dist/lib/api/proto/decoding.js +118 -0
  30. package/dist/lib/api/proto/decoding.js.map +1 -0
  31. package/dist/lib/api/proto/encoding.d.ts +64 -0
  32. package/dist/lib/api/proto/encoding.js +180 -0
  33. package/dist/lib/api/proto/encoding.js.map +1 -0
  34. package/dist/lib/api/proto/exec.d.ts +12 -0
  35. package/dist/lib/api/proto/exec.js +383 -0
  36. package/dist/lib/api/proto/exec.js.map +1 -0
  37. package/dist/lib/api/proto/index.d.ts +13 -0
  38. package/dist/lib/api/proto/index.js +10 -0
  39. package/dist/lib/api/proto/index.js.map +1 -0
  40. package/dist/lib/api/proto/interaction.d.ts +15 -0
  41. package/dist/lib/api/proto/interaction.js +99 -0
  42. package/dist/lib/api/proto/interaction.js.map +1 -0
  43. package/dist/lib/api/proto/kv.d.ts +52 -0
  44. package/dist/lib/api/proto/kv.js +156 -0
  45. package/dist/lib/api/proto/kv.js.map +1 -0
  46. package/dist/lib/api/proto/tool-calls.d.ts +9 -0
  47. package/dist/lib/api/proto/tool-calls.js +144 -0
  48. package/dist/lib/api/proto/tool-calls.js.map +1 -0
  49. package/dist/lib/api/proto/types.d.ts +201 -0
  50. package/dist/lib/api/proto/types.js +10 -0
  51. package/dist/lib/api/proto/types.js.map +1 -0
  52. package/dist/lib/auth/helpers.d.ts +40 -0
  53. package/dist/lib/auth/helpers.js +103 -0
  54. package/dist/lib/auth/helpers.js.map +1 -0
  55. package/dist/lib/auth/index.d.ts +7 -0
  56. package/dist/lib/auth/index.js +10 -0
  57. package/dist/lib/auth/index.js.map +1 -0
  58. package/dist/lib/auth/login.d.ts +55 -0
  59. package/dist/lib/auth/login.js +184 -0
  60. package/dist/lib/auth/login.js.map +1 -0
  61. package/dist/lib/config.d.ts +153 -0
  62. package/dist/lib/config.js +182 -0
  63. package/dist/lib/config.js.map +1 -0
  64. package/dist/lib/openai-compat/handler.d.ts +40 -0
  65. package/dist/lib/openai-compat/handler.js +808 -0
  66. package/dist/lib/openai-compat/handler.js.map +1 -0
  67. package/dist/lib/openai-compat/index.d.ts +9 -0
  68. package/dist/lib/openai-compat/index.js +13 -0
  69. package/dist/lib/openai-compat/index.js.map +1 -0
  70. package/dist/lib/openai-compat/types.d.ts +127 -0
  71. package/dist/lib/openai-compat/types.js +6 -0
  72. package/dist/lib/openai-compat/types.js.map +1 -0
  73. package/dist/lib/openai-compat/utils.d.ts +143 -0
  74. package/dist/lib/openai-compat/utils.js +348 -0
  75. package/dist/lib/openai-compat/utils.js.map +1 -0
  76. package/dist/lib/session-reuse.d.ts +88 -0
  77. package/dist/lib/session-reuse.js +198 -0
  78. package/dist/lib/session-reuse.js.map +1 -0
  79. package/dist/lib/storage.d.ts +55 -0
  80. package/dist/lib/storage.js +159 -0
  81. package/dist/lib/storage.js.map +1 -0
  82. package/dist/lib/utils/cache.d.ts +131 -0
  83. package/dist/lib/utils/cache.js +297 -0
  84. package/dist/lib/utils/cache.js.map +1 -0
  85. package/dist/lib/utils/fetch.d.ts +84 -0
  86. package/dist/lib/utils/fetch.js +261 -0
  87. package/dist/lib/utils/fetch.js.map +1 -0
  88. package/dist/lib/utils/index.d.ts +13 -0
  89. package/dist/lib/utils/index.js +22 -0
  90. package/dist/lib/utils/index.js.map +1 -0
  91. package/dist/lib/utils/jwt.d.ts +40 -0
  92. package/dist/lib/utils/jwt.js +102 -0
  93. package/dist/lib/utils/jwt.js.map +1 -0
  94. package/dist/lib/utils/logger.d.ts +107 -0
  95. package/dist/lib/utils/logger.js +227 -0
  96. package/dist/lib/utils/logger.js.map +1 -0
  97. package/dist/lib/utils/model-resolver.d.ts +49 -0
  98. package/dist/lib/utils/model-resolver.js +503 -0
  99. package/dist/lib/utils/model-resolver.js.map +1 -0
  100. package/dist/lib/utils/request-pool.d.ts +38 -0
  101. package/dist/lib/utils/request-pool.js +105 -0
  102. package/dist/lib/utils/request-pool.js.map +1 -0
  103. package/dist/lib/utils/request-transformer.d.ts +87 -0
  104. package/dist/lib/utils/request-transformer.js +154 -0
  105. package/dist/lib/utils/request-transformer.js.map +1 -0
  106. package/dist/lib/utils/tokenizer.d.ts +14 -0
  107. package/dist/lib/utils/tokenizer.js +76 -0
  108. package/dist/lib/utils/tokenizer.js.map +1 -0
  109. package/dist/plugin/index.d.ts +8 -0
  110. package/dist/plugin/index.js +9 -0
  111. package/dist/plugin/index.js.map +1 -0
  112. package/dist/plugin/plugin.d.ts +21 -0
  113. package/dist/plugin/plugin.js +309 -0
  114. package/dist/plugin/plugin.js.map +1 -0
  115. package/dist/plugin/types.d.ts +120 -0
  116. package/dist/plugin/types.js +7 -0
  117. package/dist/plugin/types.js.map +1 -0
  118. package/dist/server.d.ts +15 -0
  119. package/dist/server.js +95 -0
  120. package/dist/server.js.map +1 -0
  121. package/package.json +79 -0
@@ -0,0 +1,503 @@
1
+ /**
2
+ * Model Resolver and Normalizer
3
+ *
4
+ * Provides intelligent model name resolution with:
5
+ * - Explicit model mapping for known models
6
+ * - Pattern-based fallback matching
7
+ * - Provider prefix handling (e.g., "openai/gpt-4o" -> "gpt-4o")
8
+ * - Reasoning configuration per model
9
+ */
10
+ const MODEL_ALIASES = {
11
+ // GPT-4 family
12
+ "gpt4": "gpt-4o",
13
+ "gpt-4": "gpt-4o",
14
+ "gpt4o": "gpt-4o",
15
+ "gpt-4-turbo": "gpt-4o",
16
+ "gpt-4o-latest": "gpt-4o",
17
+ "4o": "gpt-4o",
18
+ "4o-mini": "gpt-4o-mini",
19
+ // GPT-5 family (future-proofing)
20
+ "gpt5": "gpt-5",
21
+ "gpt-5-turbo": "gpt-5",
22
+ "5": "gpt-5",
23
+ // Claude family
24
+ "claude": "claude-sonnet-4",
25
+ "claude-3": "claude-3.5-sonnet",
26
+ "claude-4": "claude-sonnet-4",
27
+ "claude-sonnet": "claude-sonnet-4",
28
+ "claude-opus": "claude-opus-4",
29
+ "claude-3.5": "claude-3.5-sonnet",
30
+ "claude-3.5-sonnet-latest": "claude-3.5-sonnet",
31
+ "sonnet": "claude-sonnet-4",
32
+ "sonnet-4": "claude-sonnet-4",
33
+ "sonnet-3.5": "claude-3.5-sonnet",
34
+ "opus": "claude-opus-4",
35
+ "opus-4": "claude-opus-4",
36
+ "opus-3": "claude-3-opus",
37
+ "haiku": "claude-3-haiku",
38
+ "haiku-3": "claude-3-haiku",
39
+ // OpenAI reasoning models
40
+ "o1": "o1",
41
+ "o1-mini": "o1-mini",
42
+ "o1-preview": "o1-preview",
43
+ "o3": "o3",
44
+ "o3-mini": "o3-mini",
45
+ "o4-mini": "o4-mini",
46
+ // Gemini family
47
+ "gemini": "gemini-2.5-pro",
48
+ "gemini-pro": "gemini-2.5-pro",
49
+ "gemini-flash": "gemini-2.0-flash",
50
+ "gemini-1.5": "gemini-1.5-pro",
51
+ "gemini-2.0": "gemini-2.0-flash",
52
+ "gemini-2.5": "gemini-2.5-pro",
53
+ "flash": "gemini-2.0-flash",
54
+ "flash-2": "gemini-2.0-flash",
55
+ // DeepSeek family
56
+ "deepseek": "deepseek-v3",
57
+ "deepseek-chat": "deepseek-v3",
58
+ "deepseek-coder": "deepseek-coder",
59
+ "deepseek-r1": "deepseek-r1",
60
+ "r1": "deepseek-r1",
61
+ // Mistral family
62
+ "mistral": "mistral-large",
63
+ "mistral-large": "mistral-large",
64
+ "mixtral": "mixtral-8x22b",
65
+ "codestral": "codestral",
66
+ // Meta Llama family
67
+ "llama": "llama-3.3-70b",
68
+ "llama-3": "llama-3.3-70b",
69
+ "llama-3.3": "llama-3.3-70b",
70
+ "llama-70b": "llama-3.3-70b",
71
+ // Grok family
72
+ "grok": "grok-2",
73
+ "grok-2": "grok-2",
74
+ "grok-3": "grok-3",
75
+ // Defaults
76
+ "default": "gpt-4o",
77
+ "auto": "gpt-4o",
78
+ };
79
+ const MODEL_CONFIGS = {
80
+ // --- GPT-4 Family ---
81
+ "gpt-4o": {
82
+ reasoningEffort: "medium",
83
+ reasoningSummary: "auto",
84
+ supportsTools: true,
85
+ supportsVision: true,
86
+ supportsStreaming: true,
87
+ maxContextTokens: 128000,
88
+ maxOutputTokens: 16384,
89
+ family: "gpt",
90
+ isReasoningModel: false,
91
+ },
92
+ "gpt-4o-mini": {
93
+ reasoningEffort: "low",
94
+ reasoningSummary: "auto",
95
+ supportsTools: true,
96
+ supportsVision: true,
97
+ supportsStreaming: true,
98
+ maxContextTokens: 128000,
99
+ maxOutputTokens: 16384,
100
+ family: "gpt",
101
+ isReasoningModel: false,
102
+ },
103
+ // --- GPT-5 Family (future-proofing) ---
104
+ "gpt-5": {
105
+ reasoningEffort: "xhigh",
106
+ reasoningSummary: "detailed",
107
+ supportsTools: true,
108
+ supportsVision: true,
109
+ supportsStreaming: true,
110
+ maxContextTokens: 256000,
111
+ maxOutputTokens: 32768,
112
+ family: "gpt",
113
+ isReasoningModel: false,
114
+ },
115
+ // --- OpenAI Reasoning Models ---
116
+ "o1": {
117
+ reasoningEffort: "high",
118
+ reasoningSummary: "detailed",
119
+ supportsTools: false,
120
+ supportsVision: false,
121
+ supportsStreaming: true,
122
+ maxContextTokens: 128000,
123
+ maxOutputTokens: 32768,
124
+ family: "o-series",
125
+ isReasoningModel: true,
126
+ },
127
+ "o1-mini": {
128
+ reasoningEffort: "medium",
129
+ reasoningSummary: "auto",
130
+ supportsTools: false,
131
+ supportsVision: false,
132
+ supportsStreaming: true,
133
+ maxContextTokens: 128000,
134
+ maxOutputTokens: 65536,
135
+ family: "o-series",
136
+ isReasoningModel: true,
137
+ },
138
+ "o1-preview": {
139
+ reasoningEffort: "high",
140
+ reasoningSummary: "detailed",
141
+ supportsTools: false,
142
+ supportsVision: false,
143
+ supportsStreaming: true,
144
+ maxContextTokens: 128000,
145
+ maxOutputTokens: 32768,
146
+ family: "o-series",
147
+ isReasoningModel: true,
148
+ },
149
+ "o3": {
150
+ reasoningEffort: "xhigh",
151
+ reasoningSummary: "detailed",
152
+ supportsTools: true,
153
+ supportsVision: true,
154
+ supportsStreaming: true,
155
+ maxContextTokens: 200000,
156
+ maxOutputTokens: 100000,
157
+ family: "o-series",
158
+ isReasoningModel: true,
159
+ },
160
+ "o3-mini": {
161
+ reasoningEffort: "high",
162
+ reasoningSummary: "auto",
163
+ supportsTools: true,
164
+ supportsVision: false,
165
+ supportsStreaming: true,
166
+ maxContextTokens: 200000,
167
+ maxOutputTokens: 65536,
168
+ family: "o-series",
169
+ isReasoningModel: true,
170
+ },
171
+ "o4-mini": {
172
+ reasoningEffort: "high",
173
+ reasoningSummary: "auto",
174
+ supportsTools: true,
175
+ supportsVision: true,
176
+ supportsStreaming: true,
177
+ maxContextTokens: 200000,
178
+ maxOutputTokens: 100000,
179
+ family: "o-series",
180
+ isReasoningModel: true,
181
+ },
182
+ // --- Claude 3.5 Family ---
183
+ "claude-3.5-sonnet": {
184
+ reasoningEffort: "medium",
185
+ reasoningSummary: "auto",
186
+ supportsTools: true,
187
+ supportsVision: true,
188
+ supportsStreaming: true,
189
+ maxContextTokens: 200000,
190
+ maxOutputTokens: 8192,
191
+ family: "claude",
192
+ isReasoningModel: false,
193
+ },
194
+ "claude-3-opus": {
195
+ reasoningEffort: "high",
196
+ reasoningSummary: "detailed",
197
+ supportsTools: true,
198
+ supportsVision: true,
199
+ supportsStreaming: true,
200
+ maxContextTokens: 200000,
201
+ maxOutputTokens: 4096,
202
+ family: "claude",
203
+ isReasoningModel: false,
204
+ },
205
+ "claude-3-haiku": {
206
+ reasoningEffort: "low",
207
+ reasoningSummary: "concise",
208
+ supportsTools: true,
209
+ supportsVision: true,
210
+ supportsStreaming: true,
211
+ maxContextTokens: 200000,
212
+ maxOutputTokens: 4096,
213
+ family: "claude",
214
+ isReasoningModel: false,
215
+ },
216
+ // --- Claude 4 Family ---
217
+ "claude-sonnet-4": {
218
+ reasoningEffort: "high",
219
+ reasoningSummary: "detailed",
220
+ supportsTools: true,
221
+ supportsVision: true,
222
+ supportsStreaming: true,
223
+ maxContextTokens: 200000,
224
+ maxOutputTokens: 16384,
225
+ family: "claude",
226
+ isReasoningModel: false,
227
+ },
228
+ "claude-opus-4": {
229
+ reasoningEffort: "xhigh",
230
+ reasoningSummary: "detailed",
231
+ supportsTools: true,
232
+ supportsVision: true,
233
+ supportsStreaming: true,
234
+ maxContextTokens: 200000,
235
+ maxOutputTokens: 32768,
236
+ family: "claude",
237
+ isReasoningModel: false,
238
+ },
239
+ // --- Gemini Family ---
240
+ "gemini-1.5-pro": {
241
+ reasoningEffort: "medium",
242
+ reasoningSummary: "auto",
243
+ supportsTools: true,
244
+ supportsVision: true,
245
+ supportsStreaming: true,
246
+ maxContextTokens: 1000000,
247
+ maxOutputTokens: 8192,
248
+ family: "gemini",
249
+ isReasoningModel: false,
250
+ },
251
+ "gemini-1.5-flash": {
252
+ reasoningEffort: "low",
253
+ reasoningSummary: "concise",
254
+ supportsTools: true,
255
+ supportsVision: true,
256
+ supportsStreaming: true,
257
+ maxContextTokens: 1000000,
258
+ maxOutputTokens: 8192,
259
+ family: "gemini",
260
+ isReasoningModel: false,
261
+ },
262
+ "gemini-2.0-flash": {
263
+ reasoningEffort: "medium",
264
+ reasoningSummary: "auto",
265
+ supportsTools: true,
266
+ supportsVision: true,
267
+ supportsStreaming: true,
268
+ maxContextTokens: 1000000,
269
+ maxOutputTokens: 8192,
270
+ family: "gemini",
271
+ isReasoningModel: false,
272
+ },
273
+ "gemini-2.5-pro": {
274
+ reasoningEffort: "high",
275
+ reasoningSummary: "auto",
276
+ supportsTools: true,
277
+ supportsVision: true,
278
+ supportsStreaming: true,
279
+ maxContextTokens: 2000000,
280
+ maxOutputTokens: 65536,
281
+ family: "gemini",
282
+ isReasoningModel: true,
283
+ },
284
+ // --- DeepSeek Family ---
285
+ "deepseek-v3": {
286
+ reasoningEffort: "medium",
287
+ reasoningSummary: "auto",
288
+ supportsTools: true,
289
+ supportsVision: false,
290
+ supportsStreaming: true,
291
+ maxContextTokens: 64000,
292
+ maxOutputTokens: 8192,
293
+ family: "deepseek",
294
+ isReasoningModel: false,
295
+ },
296
+ "deepseek-coder": {
297
+ reasoningEffort: "medium",
298
+ reasoningSummary: "auto",
299
+ supportsTools: true,
300
+ supportsVision: false,
301
+ supportsStreaming: true,
302
+ maxContextTokens: 64000,
303
+ maxOutputTokens: 8192,
304
+ family: "deepseek",
305
+ isReasoningModel: false,
306
+ },
307
+ "deepseek-r1": {
308
+ reasoningEffort: "xhigh",
309
+ reasoningSummary: "detailed",
310
+ supportsTools: true,
311
+ supportsVision: false,
312
+ supportsStreaming: true,
313
+ maxContextTokens: 64000,
314
+ maxOutputTokens: 65536,
315
+ family: "deepseek",
316
+ isReasoningModel: true,
317
+ },
318
+ // --- Mistral Family ---
319
+ "mistral-large": {
320
+ reasoningEffort: "medium",
321
+ reasoningSummary: "auto",
322
+ supportsTools: true,
323
+ supportsVision: false,
324
+ supportsStreaming: true,
325
+ maxContextTokens: 128000,
326
+ maxOutputTokens: 8192,
327
+ family: "mistral",
328
+ isReasoningModel: false,
329
+ },
330
+ "mixtral-8x22b": {
331
+ reasoningEffort: "medium",
332
+ reasoningSummary: "auto",
333
+ supportsTools: true,
334
+ supportsVision: false,
335
+ supportsStreaming: true,
336
+ maxContextTokens: 64000,
337
+ maxOutputTokens: 8192,
338
+ family: "mistral",
339
+ isReasoningModel: false,
340
+ },
341
+ "codestral": {
342
+ reasoningEffort: "medium",
343
+ reasoningSummary: "auto",
344
+ supportsTools: true,
345
+ supportsVision: false,
346
+ supportsStreaming: true,
347
+ maxContextTokens: 32000,
348
+ maxOutputTokens: 8192,
349
+ family: "mistral",
350
+ isReasoningModel: false,
351
+ },
352
+ // --- Meta Llama Family ---
353
+ "llama-3.3-70b": {
354
+ reasoningEffort: "medium",
355
+ reasoningSummary: "auto",
356
+ supportsTools: true,
357
+ supportsVision: false,
358
+ supportsStreaming: true,
359
+ maxContextTokens: 128000,
360
+ maxOutputTokens: 8192,
361
+ family: "llama",
362
+ isReasoningModel: false,
363
+ },
364
+ // --- Grok Family ---
365
+ "grok-2": {
366
+ reasoningEffort: "medium",
367
+ reasoningSummary: "auto",
368
+ supportsTools: true,
369
+ supportsVision: true,
370
+ supportsStreaming: true,
371
+ maxContextTokens: 128000,
372
+ maxOutputTokens: 8192,
373
+ family: "grok",
374
+ isReasoningModel: false,
375
+ },
376
+ "grok-3": {
377
+ reasoningEffort: "high",
378
+ reasoningSummary: "detailed",
379
+ supportsTools: true,
380
+ supportsVision: true,
381
+ supportsStreaming: true,
382
+ maxContextTokens: 200000,
383
+ maxOutputTokens: 16384,
384
+ family: "grok",
385
+ isReasoningModel: true,
386
+ },
387
+ };
388
+ export function stripProviderPrefix(model) {
389
+ if (model.includes("/")) {
390
+ return model.split("/").pop() ?? model;
391
+ }
392
+ return model;
393
+ }
394
+ export function normalizeModelName(model) {
395
+ if (!model)
396
+ return "gpt-4o";
397
+ const stripped = stripProviderPrefix(model);
398
+ const lower = stripped.toLowerCase();
399
+ if (MODEL_ALIASES[lower]) {
400
+ return MODEL_ALIASES[lower];
401
+ }
402
+ if (MODEL_ALIASES[stripped]) {
403
+ return MODEL_ALIASES[stripped];
404
+ }
405
+ return stripped;
406
+ }
407
+ export function resolveModel(requestedModel, availableModels) {
408
+ const normalized = normalizeModelName(requestedModel);
409
+ const directMatch = availableModels.find((m) => m.modelId === normalized || m.displayModelId === normalized);
410
+ if (directMatch) {
411
+ return directMatch.modelId;
412
+ }
413
+ const aliasMatch = availableModels.find((m) => m.aliases.includes(normalized));
414
+ if (aliasMatch) {
415
+ return aliasMatch.modelId;
416
+ }
417
+ const partialMatch = availableModels.find((m) => m.modelId.includes(normalized) ||
418
+ (m.displayModelId && m.displayModelId.includes(normalized)));
419
+ if (partialMatch) {
420
+ return partialMatch.modelId;
421
+ }
422
+ return normalized;
423
+ }
424
+ export function getModelConfig(model) {
425
+ const normalized = normalizeModelName(model);
426
+ return MODEL_CONFIGS[normalized] ?? {
427
+ reasoningEffort: "medium",
428
+ reasoningSummary: "auto",
429
+ supportsTools: true,
430
+ supportsVision: false,
431
+ maxContextTokens: 128000,
432
+ };
433
+ }
434
+ export function getReasoningConfig(model, overrides) {
435
+ const config = getModelConfig(model);
436
+ return {
437
+ effort: overrides?.effort ?? config.reasoningEffort ?? "medium",
438
+ summary: overrides?.summary ?? config.reasoningSummary ?? "auto",
439
+ };
440
+ }
441
+ export function supportsToolCalling(model) {
442
+ const config = getModelConfig(model);
443
+ return config.supportsTools ?? true;
444
+ }
445
+ export function supportsVision(model) {
446
+ const config = getModelConfig(model);
447
+ return config.supportsVision ?? false;
448
+ }
449
+ export function getMaxContextTokens(model) {
450
+ const config = getModelConfig(model);
451
+ return config.maxContextTokens ?? 128000;
452
+ }
453
+ export function getMaxOutputTokens(model) {
454
+ const config = getModelConfig(model);
455
+ return config.maxOutputTokens ?? 8192;
456
+ }
457
+ export function supportsStreaming(model) {
458
+ const config = getModelConfig(model);
459
+ return config.supportsStreaming ?? true;
460
+ }
461
+ export function isReasoningModel(model) {
462
+ const config = getModelConfig(model);
463
+ return config.isReasoningModel ?? false;
464
+ }
465
+ export function getModelFamily(model) {
466
+ const config = getModelConfig(model);
467
+ return config.family ?? "unknown";
468
+ }
469
+ /**
470
+ * Get all available model aliases
471
+ */
472
+ export function getModelAliases() {
473
+ return { ...MODEL_ALIASES };
474
+ }
475
+ /**
476
+ * Get all model configurations
477
+ */
478
+ export function getAllModelConfigs() {
479
+ return { ...MODEL_CONFIGS };
480
+ }
481
+ export function getModelOwner(modelName) {
482
+ const lower = modelName.toLowerCase();
483
+ if (lower.includes("gpt") || lower.includes("o1") || lower.includes("o3")) {
484
+ return "openai";
485
+ }
486
+ if (lower.includes("claude")) {
487
+ return "anthropic";
488
+ }
489
+ if (lower.includes("gemini")) {
490
+ return "google";
491
+ }
492
+ if (lower.includes("deepseek")) {
493
+ return "deepseek";
494
+ }
495
+ if (lower.includes("mistral") || lower.includes("mixtral")) {
496
+ return "mistral";
497
+ }
498
+ if (lower.includes("llama")) {
499
+ return "meta";
500
+ }
501
+ return "cursor";
502
+ }
503
+ //# sourceMappingURL=model-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../../src/lib/utils/model-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Request Connection Pool
3
+ *
4
+ * Provides connection pooling and request deduplication for:
5
+ * - Reducing connection overhead
6
+ * - Preventing duplicate concurrent requests
7
+ * - Managing concurrent request limits
8
+ */
9
+ export interface PoolOptions {
10
+ maxConcurrent?: number;
11
+ maxQueueSize?: number;
12
+ requestTimeoutMs?: number;
13
+ }
14
+ export declare class RequestPool {
15
+ private pending;
16
+ private activeCount;
17
+ private maxConcurrent;
18
+ private maxQueueSize;
19
+ private requestTimeoutMs;
20
+ private queue;
21
+ constructor(options?: PoolOptions);
22
+ dedupe<T>(key: string, fn: () => Promise<T>): Promise<T>;
23
+ private execute;
24
+ get stats(): {
25
+ activeCount: number;
26
+ pendingCount: number;
27
+ queueLength: number;
28
+ maxConcurrent: number;
29
+ };
30
+ clear(): void;
31
+ }
32
+ export declare function dedupeRequest<T>(key: string, fn: () => Promise<T>): Promise<T>;
33
+ export declare function getPoolStats(): {
34
+ activeCount: number;
35
+ pendingCount: number;
36
+ queueLength: number;
37
+ maxConcurrent: number;
38
+ };
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Request Connection Pool
3
+ *
4
+ * Provides connection pooling and request deduplication for:
5
+ * - Reducing connection overhead
6
+ * - Preventing duplicate concurrent requests
7
+ * - Managing concurrent request limits
8
+ */
9
+ import { createLogger } from "./logger";
10
+ const logger = createLogger("request-pool");
11
+ export class RequestPool {
12
+ pending = new Map();
13
+ activeCount = 0;
14
+ maxConcurrent;
15
+ maxQueueSize;
16
+ requestTimeoutMs;
17
+ queue = [];
18
+ constructor(options = {}) {
19
+ this.maxConcurrent = options.maxConcurrent ?? 10;
20
+ this.maxQueueSize = options.maxQueueSize ?? 100;
21
+ this.requestTimeoutMs = options.requestTimeoutMs ?? 120000;
22
+ }
23
+ async dedupe(key, fn) {
24
+ const existing = this.pending.get(key);
25
+ if (existing) {
26
+ logger.debug(`Deduplicating request: ${key}`);
27
+ return new Promise((resolve, reject) => {
28
+ existing.resolvers.push({ resolve, reject });
29
+ });
30
+ }
31
+ const resolvers = [];
32
+ const promise = this.execute(fn).then((result) => {
33
+ this.pending.delete(key);
34
+ for (const { resolve } of resolvers) {
35
+ resolve(result);
36
+ }
37
+ return result;
38
+ }, (error) => {
39
+ this.pending.delete(key);
40
+ for (const { reject } of resolvers) {
41
+ reject(error);
42
+ }
43
+ throw error;
44
+ });
45
+ const pendingRequest = {
46
+ key,
47
+ promise,
48
+ resolvers,
49
+ startedAt: Date.now(),
50
+ };
51
+ this.pending.set(key, pendingRequest);
52
+ return promise;
53
+ }
54
+ async execute(fn) {
55
+ if (this.activeCount >= this.maxConcurrent) {
56
+ if (this.queue.length >= this.maxQueueSize) {
57
+ throw new Error("Request queue is full");
58
+ }
59
+ await new Promise((resolve) => {
60
+ this.queue.push(resolve);
61
+ });
62
+ }
63
+ this.activeCount++;
64
+ try {
65
+ const timeoutPromise = new Promise((_, reject) => {
66
+ setTimeout(() => {
67
+ reject(new Error(`Request timed out after ${this.requestTimeoutMs}ms`));
68
+ }, this.requestTimeoutMs);
69
+ });
70
+ return await Promise.race([fn(), timeoutPromise]);
71
+ }
72
+ finally {
73
+ this.activeCount--;
74
+ const next = this.queue.shift();
75
+ if (next) {
76
+ next();
77
+ }
78
+ }
79
+ }
80
+ get stats() {
81
+ return {
82
+ activeCount: this.activeCount,
83
+ pendingCount: this.pending.size,
84
+ queueLength: this.queue.length,
85
+ maxConcurrent: this.maxConcurrent,
86
+ };
87
+ }
88
+ clear() {
89
+ for (const [key, pending] of this.pending) {
90
+ for (const { reject } of pending.resolvers) {
91
+ reject(new Error("Pool cleared"));
92
+ }
93
+ this.pending.delete(key);
94
+ }
95
+ this.queue = [];
96
+ }
97
+ }
98
+ const defaultPool = new RequestPool();
99
+ export function dedupeRequest(key, fn) {
100
+ return defaultPool.dedupe(key, fn);
101
+ }
102
+ export function getPoolStats() {
103
+ return defaultPool.stats;
104
+ }
105
+ //# sourceMappingURL=request-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-pool.js","sourceRoot":"","sources":["../../../src/lib/utils/request-pool.ts"],"names":[],"mappings":"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"}