@pellux/goodvibes-sdk 0.33.38 → 0.34.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 (199) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +1383 -4
  2. package/dist/events/workflows.d.ts +4 -0
  3. package/dist/events/workflows.d.ts.map +1 -1
  4. package/dist/platform/agents/message-bus-core.d.ts +11 -0
  5. package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
  6. package/dist/platform/agents/message-bus-core.js +28 -21
  7. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  8. package/dist/platform/agents/orchestrator-runner.js +6 -4
  9. package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
  10. package/dist/platform/agents/wrfc-config.js +16 -10
  11. package/dist/platform/agents/wrfc-controller.d.ts +26 -0
  12. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  13. package/dist/platform/agents/wrfc-controller.js +134 -138
  14. package/dist/platform/agents/wrfc-runtime-events.d.ts +1 -0
  15. package/dist/platform/agents/wrfc-runtime-events.d.ts.map +1 -1
  16. package/dist/platform/agents/wrfc-runtime-events.js +4 -1
  17. package/dist/platform/automation/delivery-manager.d.ts.map +1 -1
  18. package/dist/platform/automation/delivery-manager.js +1 -6
  19. package/dist/platform/batch/manager.d.ts.map +1 -1
  20. package/dist/platform/batch/manager.js +1 -3
  21. package/dist/platform/channels/policy-manager.d.ts.map +1 -1
  22. package/dist/platform/channels/policy-manager.js +1 -3
  23. package/dist/platform/channels/reply-pipeline.d.ts.map +1 -1
  24. package/dist/platform/channels/reply-pipeline.js +4 -0
  25. package/dist/platform/config/schema-domain-core.d.ts +1 -1
  26. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  27. package/dist/platform/config/schema-domain-core.js +12 -12
  28. package/dist/platform/config/schema-domain-runtime.d.ts +1 -1
  29. package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
  30. package/dist/platform/config/schema-domain-runtime.js +19 -18
  31. package/dist/platform/config/schema-domain-surfaces.d.ts +1 -1
  32. package/dist/platform/config/schema-domain-surfaces.d.ts.map +1 -1
  33. package/dist/platform/config/schema-domain-surfaces.js +4 -3
  34. package/dist/platform/config/schema-shared.d.ts +6 -0
  35. package/dist/platform/config/schema-shared.d.ts.map +1 -1
  36. package/dist/platform/config/schema-shared.js +21 -1
  37. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  38. package/dist/platform/control-plane/approval-broker.js +1 -3
  39. package/dist/platform/control-plane/method-catalog-calendar.d.ts +9 -0
  40. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -0
  41. package/dist/platform/control-plane/method-catalog-calendar.js +117 -0
  42. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  43. package/dist/platform/control-plane/method-catalog-channels.js +174 -0
  44. package/dist/platform/control-plane/method-catalog-email.d.ts +9 -0
  45. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -0
  46. package/dist/platform/control-plane/method-catalog-email.js +101 -0
  47. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  48. package/dist/platform/control-plane/method-catalog.js +4 -0
  49. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  50. package/dist/platform/control-plane/session-broker-state.js +1 -3
  51. package/dist/platform/core/compaction-sections.d.ts +5 -1
  52. package/dist/platform/core/compaction-sections.d.ts.map +1 -1
  53. package/dist/platform/core/compaction-sections.js +73 -66
  54. package/dist/platform/core/context-compaction.d.ts.map +1 -1
  55. package/dist/platform/core/context-compaction.js +9 -16
  56. package/dist/platform/core/orchestrator-context-runtime.d.ts +2 -2
  57. package/dist/platform/core/orchestrator-context-runtime.d.ts.map +1 -1
  58. package/dist/platform/core/orchestrator-context-runtime.js +24 -21
  59. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  60. package/dist/platform/core/orchestrator-tool-runtime.js +2 -1
  61. package/dist/platform/core/session-lineage.d.ts +2 -5
  62. package/dist/platform/core/session-lineage.d.ts.map +1 -1
  63. package/dist/platform/core/session-lineage.js +4 -16
  64. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  65. package/dist/platform/core/wrfc-routing.js +1 -3
  66. package/dist/platform/daemon/http/mcp-routes.d.ts.map +1 -1
  67. package/dist/platform/daemon/http/mcp-routes.js +1 -3
  68. package/dist/platform/daemon/http/openai-compatible-routes.d.ts.map +1 -1
  69. package/dist/platform/daemon/http/openai-compatible-routes.js +1 -3
  70. package/dist/platform/daemon/http/runtime-routes.d.ts.map +1 -1
  71. package/dist/platform/daemon/http/runtime-routes.js +1 -3
  72. package/dist/platform/hooks/runners/http.d.ts.map +1 -1
  73. package/dist/platform/hooks/runners/http.js +9 -19
  74. package/dist/platform/integrations/webhooks.js +2 -11
  75. package/dist/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  76. package/dist/platform/knowledge/semantic/self-improvement.js +2 -21
  77. package/dist/platform/mcp/client.d.ts.map +1 -1
  78. package/dist/platform/mcp/client.js +1 -3
  79. package/dist/platform/mcp/config.d.ts.map +1 -1
  80. package/dist/platform/mcp/config.js +1 -3
  81. package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
  82. package/dist/platform/media/builtin-generation-providers.js +1 -6
  83. package/dist/platform/providers/anthropic-compat.d.ts.map +1 -1
  84. package/dist/platform/providers/anthropic-compat.js +11 -131
  85. package/dist/platform/providers/anthropic-sdk-provider.d.ts.map +1 -1
  86. package/dist/platform/providers/anthropic-sdk-provider.js +8 -42
  87. package/dist/platform/providers/anthropic-sse-assembler.d.ts +80 -0
  88. package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -0
  89. package/dist/platform/providers/anthropic-sse-assembler.js +146 -0
  90. package/dist/platform/providers/anthropic-stream.d.ts +30 -0
  91. package/dist/platform/providers/anthropic-stream.d.ts.map +1 -0
  92. package/dist/platform/providers/anthropic-stream.js +44 -0
  93. package/dist/platform/providers/anthropic-vertex.d.ts.map +1 -1
  94. package/dist/platform/providers/anthropic-vertex.js +1 -3
  95. package/dist/platform/providers/anthropic.d.ts.map +1 -1
  96. package/dist/platform/providers/anthropic.js +15 -151
  97. package/dist/platform/providers/capabilities.d.ts.map +1 -1
  98. package/dist/platform/providers/capabilities.js +11 -7
  99. package/dist/platform/providers/context-discovery.d.ts.map +1 -1
  100. package/dist/platform/providers/context-discovery.js +9 -16
  101. package/dist/platform/providers/context-window-fallback.d.ts +24 -0
  102. package/dist/platform/providers/context-window-fallback.d.ts.map +1 -0
  103. package/dist/platform/providers/context-window-fallback.js +48 -0
  104. package/dist/platform/providers/gemini.d.ts.map +1 -1
  105. package/dist/platform/providers/gemini.js +3 -6
  106. package/dist/platform/providers/json-ttl-cache.d.ts +35 -0
  107. package/dist/platform/providers/json-ttl-cache.d.ts.map +1 -0
  108. package/dist/platform/providers/json-ttl-cache.js +52 -0
  109. package/dist/platform/providers/llama-cpp.d.ts.map +1 -1
  110. package/dist/platform/providers/llama-cpp.js +2 -23
  111. package/dist/platform/providers/lm-studio-helpers.d.ts +1 -1
  112. package/dist/platform/providers/lm-studio-helpers.d.ts.map +1 -1
  113. package/dist/platform/providers/lm-studio-helpers.js +5 -25
  114. package/dist/platform/providers/model-benchmarks.d.ts.map +1 -1
  115. package/dist/platform/providers/model-benchmarks.js +11 -34
  116. package/dist/platform/providers/model-catalog-cache.d.ts.map +1 -1
  117. package/dist/platform/providers/model-catalog-cache.js +15 -38
  118. package/dist/platform/providers/model-catalog-synthetic.d.ts.map +1 -1
  119. package/dist/platform/providers/model-catalog-synthetic.js +3 -2
  120. package/dist/platform/providers/model-catalog.d.ts.map +1 -1
  121. package/dist/platform/providers/model-catalog.js +3 -2
  122. package/dist/platform/providers/model-limits.d.ts.map +1 -1
  123. package/dist/platform/providers/model-limits.js +18 -42
  124. package/dist/platform/providers/ollama.d.ts.map +1 -1
  125. package/dist/platform/providers/ollama.js +3 -24
  126. package/dist/platform/providers/openai-codex.d.ts.map +1 -1
  127. package/dist/platform/providers/openai-codex.js +8 -9
  128. package/dist/platform/providers/openai-compat.d.ts.map +1 -1
  129. package/dist/platform/providers/openai-compat.js +13 -40
  130. package/dist/platform/providers/openai-stream-helpers.d.ts +62 -0
  131. package/dist/platform/providers/openai-stream-helpers.d.ts.map +1 -0
  132. package/dist/platform/providers/openai-stream-helpers.js +73 -0
  133. package/dist/platform/providers/openai.d.ts.map +1 -1
  134. package/dist/platform/providers/openai.js +13 -41
  135. package/dist/platform/providers/provider-error.d.ts +17 -0
  136. package/dist/platform/providers/provider-error.d.ts.map +1 -0
  137. package/dist/platform/providers/provider-error.js +33 -0
  138. package/dist/platform/providers/provider-stop-reason.d.ts +15 -0
  139. package/dist/platform/providers/provider-stop-reason.d.ts.map +1 -0
  140. package/dist/platform/providers/provider-stop-reason.js +15 -0
  141. package/dist/platform/providers/sse-line-buffer.d.ts +13 -0
  142. package/dist/platform/providers/sse-line-buffer.d.ts.map +1 -0
  143. package/dist/platform/providers/sse-line-buffer.js +23 -0
  144. package/dist/platform/providers/tool-formats.d.ts +5 -0
  145. package/dist/platform/providers/tool-formats.d.ts.map +1 -1
  146. package/dist/platform/providers/tool-formats.js +14 -0
  147. package/dist/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
  148. package/dist/platform/runtime/bootstrap-runtime-events.js +6 -0
  149. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  150. package/dist/platform/runtime/bootstrap-services.js +4 -5
  151. package/dist/platform/runtime/emitters/workflows.d.ts +4 -0
  152. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  153. package/dist/platform/runtime/emitters/workflows.js +3 -0
  154. package/dist/platform/runtime/remote/distributed-runtime-store.d.ts.map +1 -1
  155. package/dist/platform/runtime/remote/distributed-runtime-store.js +1 -3
  156. package/dist/platform/runtime/retention/pruner.js +2 -5
  157. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  158. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +15 -14
  159. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts +6 -0
  160. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts.map +1 -1
  161. package/dist/platform/runtime/store/helpers/reducers/shared.js +8 -1
  162. package/dist/platform/runtime/telemetry/exporters/queue.d.ts.map +1 -1
  163. package/dist/platform/runtime/telemetry/exporters/queue.js +1 -7
  164. package/dist/platform/runtime/transports/http-helpers.d.ts +0 -1
  165. package/dist/platform/runtime/transports/http-helpers.d.ts.map +1 -1
  166. package/dist/platform/runtime/transports/http-helpers.js +1 -3
  167. package/dist/platform/runtime/ui-read-model-helpers.d.ts +2 -0
  168. package/dist/platform/runtime/ui-read-model-helpers.d.ts.map +1 -1
  169. package/dist/platform/runtime/ui-read-model-helpers.js +8 -0
  170. package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
  171. package/dist/platform/runtime/ui-read-models-core.js +3 -5
  172. package/dist/platform/runtime/ui-read-models-observability-remote.d.ts.map +1 -1
  173. package/dist/platform/runtime/ui-read-models-observability-remote.js +2 -4
  174. package/dist/platform/runtime/ui-read-models-operations.d.ts.map +1 -1
  175. package/dist/platform/runtime/ui-read-models-operations.js +8 -26
  176. package/dist/platform/scheduler/scheduler.d.ts.map +1 -1
  177. package/dist/platform/scheduler/scheduler.js +1 -3
  178. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  179. package/dist/platform/tools/exec/runtime.js +1 -7
  180. package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
  181. package/dist/platform/tools/fetch/runtime.js +9 -20
  182. package/dist/platform/tools/shared/process-manager.d.ts.map +1 -1
  183. package/dist/platform/tools/shared/process-manager.js +1 -6
  184. package/dist/platform/utils/concurrency.d.ts +1 -0
  185. package/dist/platform/utils/concurrency.d.ts.map +1 -1
  186. package/dist/platform/utils/concurrency.js +1 -0
  187. package/dist/platform/utils/error-display.d.ts +9 -0
  188. package/dist/platform/utils/error-display.d.ts.map +1 -1
  189. package/dist/platform/utils/error-display.js +11 -0
  190. package/dist/platform/utils/fetch-with-timeout.d.ts +22 -2
  191. package/dist/platform/utils/fetch-with-timeout.d.ts.map +1 -1
  192. package/dist/platform/utils/fetch-with-timeout.js +33 -15
  193. package/dist/platform/utils/record-coerce.d.ts +5 -0
  194. package/dist/platform/utils/record-coerce.d.ts.map +1 -1
  195. package/dist/platform/utils/record-coerce.js +7 -0
  196. package/dist/platform/utils/retry.d.ts.map +1 -1
  197. package/dist/platform/utils/retry.js +2 -4
  198. package/dist/platform/version.js +1 -1
  199. package/package.json +9 -9
@@ -1,12 +1,13 @@
1
- import { REASONING_BUDGET_MAP } from './interface.js';
1
+ import { applyAnthropicThinking } from './anthropic-stream.js';
2
2
  import { getCacheCapability } from './cache-capability.js';
3
3
  import { mapAnthropicStopReason } from './stop-reason-maps.js';
4
4
  import { getDefaultStrategy } from './cache-strategy.js';
5
5
  import { ProviderError } from '../types/errors.js';
6
6
  import { withRetry } from '../utils/retry.js';
7
- import { logger } from '../utils/logger.js';
8
7
  import { instrumentedLlmCall } from '../runtime/llm-observability.js';
9
- import { toAnthropicTools, toAnthropicMessages, fromAnthropicContent, parseToolCallArguments, } from './tool-formats.js';
8
+ import { toAnthropicTools, toAnthropicMessages, fromAnthropicContent, normalizeAnthropicModel, } from './tool-formats.js';
9
+ import { createAnthropicSSEState, readAnthropicSSEStream, assembleAnthropicContentBlocks } from './anthropic-sse-assembler.js';
10
+ import { resolveCompletedStopReason, withProviderStopReason } from './provider-stop-reason.js';
10
11
  import { summarizeError, toProviderError } from '../utils/error-display.js';
11
12
  import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
12
13
  import { toRecord } from '../utils/record-coerce.js';
@@ -24,13 +25,6 @@ const NOOP_CACHE_HIT_TRACKER = {
24
25
  getHitRate: () => 0,
25
26
  recordTurn: () => { },
26
27
  };
27
- function normalizeAnthropicModel(model) {
28
- if (model.startsWith('anthropic:'))
29
- return model.slice('anthropic:'.length);
30
- if (model.startsWith('anthropic/'))
31
- return model.slice('anthropic/'.length);
32
- return model;
33
- }
34
28
  /** Clamp max_tokens to the model's known limit. */
35
29
  function clampMaxTokens(model, requested) {
36
30
  for (const { match, cap } of ANTHROPIC_MAX_OUTPUT) {
@@ -180,17 +174,7 @@ export class AnthropicProvider {
180
174
  }
181
175
  }
182
176
  body['messages'] = anthropicMessages;
183
- if (reasoningEffort && reasoningEffort !== 'instant') {
184
- const budget = REASONING_BUDGET_MAP[reasoningEffort];
185
- if (budget !== undefined && budget > 0) {
186
- body['thinking'] = { type: 'enabled', budget_tokens: budget };
187
- // max_tokens must be strictly greater than thinking.budget_tokens
188
- const currentMax = body['max_tokens'] ?? 8192;
189
- if (currentMax <= budget) {
190
- body['max_tokens'] = budget + 4096;
191
- }
192
- }
193
- }
177
+ applyAnthropicThinking(body, reasoningEffort, clampMaxTokens(resolvedModel, Infinity));
194
178
  const headers = {
195
179
  'Content-Type': 'application/json',
196
180
  'anthropic-version': ANTHROPIC_API_VERSION,
@@ -235,15 +219,7 @@ export class AnthropicProvider {
235
219
  });
236
220
  }
237
221
  // Parse SSE stream
238
- let responseText = '';
239
- let inputTokens = 0;
240
- let outputTokens = 0;
241
- let cacheReadTokens = 0;
242
- let cacheWriteTokens = 0;
243
- let rawStopReason;
244
- let stopReason = 'unknown';
245
- // Accumulate tool use blocks by index
246
- const toolBlocks = new Map();
222
+ const state = createAnthropicSSEState();
247
223
  const reader = res.body?.getReader();
248
224
  if (!reader) {
249
225
  throw new ProviderError('Anthropic chat returned no response body.', {
@@ -253,125 +229,21 @@ export class AnthropicProvider {
253
229
  phase: 'response',
254
230
  });
255
231
  }
256
- const decoder = new TextDecoder();
257
- let buffer = '';
258
- try {
259
- while (true) {
260
- const { done, value } = await reader.read();
261
- if (done)
262
- break;
263
- buffer += decoder.decode(value, { stream: true });
264
- const lines = buffer.split('\n');
265
- // Keep the last (potentially incomplete) line in buffer
266
- buffer = lines.pop() ?? '';
267
- for (const line of lines) {
268
- if (!line.startsWith('data: '))
269
- continue;
270
- const data = line.slice(6).trim();
271
- if (!data || data === '[DONE]')
272
- continue;
273
- let event;
274
- try {
275
- event = JSON.parse(data);
276
- }
277
- catch {
278
- logger.warn('Anthropic SSE: failed to parse JSON chunk', {
279
- chunkPreview: data.slice(0, 200),
280
- chunkLength: data.length,
281
- });
282
- continue;
283
- }
284
- if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
285
- const idx = event.index ?? 0;
286
- toolBlocks.set(idx, {
287
- id: event.content_block.id ?? '',
288
- name: event.content_block.name ?? '',
289
- args: '',
290
- });
291
- if (onDelta) {
292
- onDelta({ toolCalls: [{ index: idx, id: event.content_block.id, name: event.content_block.name }] });
293
- }
294
- }
295
- else if (event.type === 'content_block_delta') {
296
- const idx = event.index ?? 0;
297
- if (event.delta?.type === 'text_delta' && event.delta.text) {
298
- responseText += event.delta.text;
299
- if (onDelta)
300
- onDelta({ content: event.delta.text });
301
- }
302
- else if (event.delta?.type === 'thinking_delta' && event.delta.thinking) {
303
- if (onDelta)
304
- onDelta({ reasoning: event.delta.thinking });
305
- }
306
- else if (event.delta?.type === 'input_json_delta' && event.delta.partial_json) {
307
- const block = toolBlocks.get(idx);
308
- if (block)
309
- block.args += event.delta.partial_json;
310
- if (onDelta) {
311
- onDelta({ toolCalls: [{ index: idx, arguments: event.delta.partial_json }] });
312
- }
313
- }
314
- }
315
- else if (event.type === 'message_delta') {
316
- if (event.delta?.stop_reason) {
317
- rawStopReason = event.delta.stop_reason;
318
- stopReason = mapAnthropicStopReason(rawStopReason);
319
- }
320
- if (event.usage?.output_tokens)
321
- outputTokens = event.usage.output_tokens;
322
- if (event.usage?.cache_read_input_tokens != null)
323
- cacheReadTokens = event.usage.cache_read_input_tokens;
324
- if (event.usage?.cache_creation_input_tokens != null)
325
- cacheWriteTokens = event.usage.cache_creation_input_tokens;
326
- }
327
- else if (event.type === 'message_start') {
328
- if (event.message?.usage) {
329
- inputTokens = event.message.usage.input_tokens;
330
- outputTokens = event.message.usage.output_tokens;
331
- cacheReadTokens = event.message.usage.cache_read_input_tokens ?? 0;
332
- cacheWriteTokens = event.message.usage.cache_creation_input_tokens ?? 0;
333
- }
334
- }
335
- }
336
- }
337
- }
338
- finally {
339
- reader.releaseLock();
340
- }
341
- // Build the content blocks for fromAnthropicContent
342
- const contentBlocks = [];
343
- if (responseText) {
344
- contentBlocks.push({ type: 'text', text: responseText });
345
- }
346
- for (const [, block] of [...toolBlocks.entries()].sort(([a], [b]) => a - b)) {
347
- const parsedInput = parseToolCallArguments(block.args, {
348
- provider: this.name,
349
- toolName: block.name,
350
- callId: block.id,
351
- });
352
- if (parsedInput === undefined)
353
- continue;
354
- contentBlocks.push({
355
- type: 'tool_use',
356
- id: block.id,
357
- name: block.name,
358
- input: parsedInput,
359
- });
360
- }
361
- const { text, toolCalls } = fromAnthropicContent(contentBlocks);
232
+ await readAnthropicSSEStream(reader, state, onDelta, 'Anthropic');
233
+ const { text, toolCalls } = assembleAnthropicContentBlocks(state.toolBlocks, state.responseText, this.name);
362
234
  // Record cache metrics for strategy adaptation.
363
- this.cacheHitTracker.recordTurn({ inputTokens, cacheReadTokens, cacheWriteTokens });
235
+ this.cacheHitTracker.recordTurn({ inputTokens: state.inputTokens, cacheReadTokens: state.cacheReadTokens, cacheWriteTokens: state.cacheWriteTokens });
364
236
  const cap = getCacheCapability('anthropic');
365
237
  // Exclude write tokens from the denominator: writes are a one-time cost and inflate the
366
238
  // apparent miss rate on the first request. Read rate = reads / (billed input + reads).
367
- const hitRateDenom = inputTokens + cacheReadTokens;
368
- const hitRate = hitRateDenom > 0 ? cacheReadTokens / hitRateDenom : undefined;
239
+ const hitRateDenom = state.inputTokens + state.cacheReadTokens;
240
+ const hitRate = hitRateDenom > 0 ? state.cacheReadTokens / hitRateDenom : undefined;
369
241
  return {
370
242
  content: text,
371
243
  toolCalls,
372
- usage: { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens },
373
- stopReason: stopReason === 'unknown' && text ? 'completed' : stopReason,
374
- ...(rawStopReason !== undefined ? { providerStopReason: rawStopReason } : {}),
244
+ usage: { inputTokens: state.inputTokens, outputTokens: state.outputTokens, cacheReadTokens: state.cacheReadTokens, cacheWriteTokens: state.cacheWriteTokens },
245
+ stopReason: resolveCompletedStopReason(state.stopReason, text),
246
+ ...withProviderStopReason(state.rawStopReason),
375
247
  cacheMetrics: {
376
248
  strategy: cap.type === 'explicit' ? `explicit-${cap.maxBreakpoints}bp` : cap.type,
377
249
  breakpointsPlaced,
@@ -531,15 +403,7 @@ export class AnthropicProvider {
531
403
  if (params.tools && params.tools.length > 0) {
532
404
  body['tools'] = toAnthropicTools(params.tools);
533
405
  }
534
- if (params.reasoningEffort && params.reasoningEffort !== 'instant') {
535
- const budget = REASONING_BUDGET_MAP[params.reasoningEffort];
536
- if (budget !== undefined && budget > 0) {
537
- body['thinking'] = { type: 'enabled', budget_tokens: budget };
538
- const currentMax = body['max_tokens'] ?? 8192;
539
- if (currentMax <= budget)
540
- body['max_tokens'] = budget + 4096;
541
- }
542
- }
406
+ applyAnthropicThinking(body, params.reasoningEffort, clampMaxTokens(resolvedModel, Infinity));
543
407
  return body;
544
408
  }
545
409
  mapAnthropicBatchStatus(body) {
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/capabilities.ts"],"names":[],"mappings":"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"}
@@ -240,7 +240,7 @@ const PROVIDER_DEFAULTS = {
240
240
  parallelTools: true,
241
241
  jsonMode: true,
242
242
  reasoningControls: false,
243
- maxContextTokens: 131_072,
243
+ maxContextTokens: 256_000,
244
244
  maxOutputTokens: 8_192,
245
245
  timeoutMs: 120_000,
246
246
  },
@@ -274,12 +274,16 @@ const MODEL_OVERRIDES = {
274
274
  'claude-3-5-sonnet-20241022': { maxOutputTokens: 8_192 },
275
275
  'claude-3-7-sonnet-20250219': { reasoningControls: true, maxOutputTokens: 64_000 },
276
276
  // OpenAI reasoning models
277
- 'o1': { reasoningControls: true, jsonMode: false, maxOutputTokens: 32_768 },
278
- 'o1-mini': { reasoningControls: true, jsonMode: false, maxOutputTokens: 65_536 },
279
- 'o1-preview': { reasoningControls: true, jsonMode: false, maxOutputTokens: 32_768 },
280
- 'o3': { reasoningControls: true, maxOutputTokens: 100_000 },
281
- 'o3-mini': { reasoningControls: true, maxOutputTokens: 65_536 },
282
- 'o4-mini': { reasoningControls: true, maxOutputTokens: 65_536 },
277
+ 'o1': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 32_768 },
278
+ 'o1-mini': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
279
+ 'o1-preview': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 32_768 },
280
+ 'o3': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 100_000 },
281
+ 'o3-mini': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
282
+ 'o4-mini': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
283
+ // OpenAI large-context models
284
+ 'gpt-5': { maxContextTokens: 400_000 },
285
+ 'gpt-4.1': { maxContextTokens: 400_000 },
286
+ 'gpt-4.1-mini': { maxContextTokens: 400_000 },
283
287
  // Mercury models (InceptionLabs)
284
288
  'mercury-2': { toolCalling: false, parallelTools: false, reasoningControls: true, maxOutputTokens: 32_000 },
285
289
  'mercury-edit': { toolCalling: false, parallelTools: false, reasoningControls: false, maxOutputTokens: 32_000 },
@@ -1 +1 @@
1
- {"version":3,"file":"context-discovery.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AA8WlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0C9B"}
1
+ {"version":3,"file":"context-discovery.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAuWlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0C9B"}
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import { logger } from '../utils/logger.js';
20
20
  import { summarizeError } from '../utils/error-display.js';
21
- import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
21
+ import { instrumentedFetch, fetchWithTimeout } from '../utils/fetch-with-timeout.js';
22
22
  // ---------------------------------------------------------------------------
23
23
  // Constants
24
24
  // ---------------------------------------------------------------------------
@@ -48,21 +48,17 @@ function extractOrigin(baseURL) {
48
48
  * Returns the Response on success, or null on any error (timeout, network, 4xx/5xx).
49
49
  */
50
50
  async function probe(url, options = {}) {
51
- const controller = new AbortController();
52
- const timer = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS);
53
- timer.unref?.();
51
+ const headers = { Accept: 'application/json' };
52
+ if (options.apiKey)
53
+ headers['Authorization'] = `Bearer ${options.apiKey}`;
54
+ if (options.body)
55
+ headers['Content-Type'] = 'application/json';
54
56
  try {
55
- const headers = { Accept: 'application/json' };
56
- if (options.apiKey)
57
- headers['Authorization'] = `Bearer ${options.apiKey}`;
58
- if (options.body)
59
- headers['Content-Type'] = 'application/json';
60
- const response = await instrumentedFetch(url, {
57
+ const response = await fetchWithTimeout(url, {
61
58
  method: options.method ?? 'GET',
62
59
  headers,
63
60
  ...(options.body !== undefined ? { body: options.body } : {}),
64
- signal: controller.signal,
65
- });
61
+ }, PROBE_TIMEOUT_MS, instrumentedFetch);
66
62
  if (!response.ok) {
67
63
  logger.debug('[context-discovery] Non-OK probe response', { url, status: response.status });
68
64
  return null;
@@ -71,7 +67,7 @@ async function probe(url, options = {}) {
71
67
  }
72
68
  catch (err) {
73
69
  const name = err?.name;
74
- if (name === 'AbortError') {
70
+ if (name === 'AbortError' || name === 'TimeoutError') {
75
71
  logger.debug('[context-discovery] Probe timed out', { url });
76
72
  }
77
73
  else {
@@ -79,9 +75,6 @@ async function probe(url, options = {}) {
79
75
  }
80
76
  return null;
81
77
  }
82
- finally {
83
- clearTimeout(timer);
84
- }
85
78
  }
86
79
  /**
87
80
  * Safely parse JSON from a Response. Returns null on parse error.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Provider/model-family-aware context-window fallback.
3
+ *
4
+ * Used only when neither the live catalog (models.dev) nor the provider API
5
+ * reports a context window for a model — e.g. a model newer than the models.dev
6
+ * snapshot (the "brand-new gpt-5.5" case). A single flat default badly mis-sizes
7
+ * the window and drives auto-compaction to fire far too early (small default) or
8
+ * too late (large default, risking a provider "context length exceeded" error).
9
+ * Infer a sane family default from the provider and model id instead.
10
+ *
11
+ * The real window always wins whenever the catalog / OpenRouter / provider_api
12
+ * supplies one; this is the last line of defense, not a primary source.
13
+ */
14
+ /** Last-resort default when neither provider nor model id is recognised. */
15
+ export declare const FALLBACK_CONTEXT_WINDOW = 128000;
16
+ /**
17
+ * Best-effort context window (in tokens) inferred from provider + model id.
18
+ *
19
+ * Over-estimating is the dangerous direction (it risks context-overflow errors),
20
+ * so only known-large families get a large window; older/unknown families stay at
21
+ * the conservative {@link FALLBACK_CONTEXT_WINDOW}.
22
+ */
23
+ export declare function inferFallbackContextWindow(provider: string, modelId?: string): number;
24
+ //# sourceMappingURL=context-window-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window-fallback.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-window-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBrF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Provider/model-family-aware context-window fallback.
3
+ *
4
+ * Used only when neither the live catalog (models.dev) nor the provider API
5
+ * reports a context window for a model — e.g. a model newer than the models.dev
6
+ * snapshot (the "brand-new gpt-5.5" case). A single flat default badly mis-sizes
7
+ * the window and drives auto-compaction to fire far too early (small default) or
8
+ * too late (large default, risking a provider "context length exceeded" error).
9
+ * Infer a sane family default from the provider and model id instead.
10
+ *
11
+ * The real window always wins whenever the catalog / OpenRouter / provider_api
12
+ * supplies one; this is the last line of defense, not a primary source.
13
+ */
14
+ /** Last-resort default when neither provider nor model id is recognised. */
15
+ export const FALLBACK_CONTEXT_WINDOW = 128_000;
16
+ /**
17
+ * Best-effort context window (in tokens) inferred from provider + model id.
18
+ *
19
+ * Over-estimating is the dangerous direction (it risks context-overflow errors),
20
+ * so only known-large families get a large window; older/unknown families stay at
21
+ * the conservative {@link FALLBACK_CONTEXT_WINDOW}.
22
+ */
23
+ export function inferFallbackContextWindow(provider, modelId) {
24
+ const p = provider.toLowerCase();
25
+ const id = (modelId ?? '').toLowerCase();
26
+ if (p.includes('google') || p.includes('gemini') || id.startsWith('gemini'))
27
+ return 1_000_000;
28
+ if (p.includes('anthropic') || id.startsWith('claude'))
29
+ return 200_000;
30
+ if (p.includes('xai') || p.includes('grok') || id.startsWith('grok'))
31
+ return 256_000;
32
+ const looksOpenAI = p.includes('openai') ||
33
+ id.startsWith('gpt') ||
34
+ id.startsWith('chatgpt') ||
35
+ id.startsWith('o1') ||
36
+ id.startsWith('o3') ||
37
+ id.startsWith('o4');
38
+ if (looksOpenAI) {
39
+ // gpt-5 / gpt-4.1 families are 400k; the o-series reasoning models are 200k;
40
+ // gpt-4o / gpt-4-turbo / gpt-4o-mini and anything unrecognised stay at 128k.
41
+ if (id.startsWith('gpt-5') || id.startsWith('gpt-4.1') || id.startsWith('gpt-4-1'))
42
+ return 400_000;
43
+ if (id.startsWith('o1') || id.startsWith('o3') || id.startsWith('o4'))
44
+ return 200_000;
45
+ return 128_000;
46
+ }
47
+ return FALLBACK_CONTEXT_WINDOW;
48
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAexB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAuB3D;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAA6B;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB,CAAuB;IAChD,yEAAyE;IACzE,OAAO,CAAC,iBAAiB,CAAuB;IAChD,wCAAwC;IACxC,OAAO,CAAC,mBAAmB,CAAa;IACxC,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,EAAE,MAAM,EAAE,eAAe,GAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAA0B;IAKzG,OAAO,CAAC,gBAAgB;YAWV,mBAAmB;IA2F3B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA6MhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmD1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAmC3F"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAexB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwB3D;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAA6B;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB,CAAuB;IAChD,yEAAyE;IACzE,OAAO,CAAC,iBAAiB,CAAuB;IAChD,wCAAwC;IACxC,OAAO,CAAC,mBAAmB,CAAa;IACxC,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,EAAE,MAAM,EAAE,eAAe,GAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAA0B;IAKzG,OAAO,CAAC,gBAAgB;YAWV,mBAAmB;IA2F3B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwMhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmD1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAmC3F"}
@@ -7,6 +7,7 @@ import { fetchWithTimeout, instrumentedFetch } from '../utils/fetch-with-timeout
7
7
  import { instrumentedLlmCall } from '../runtime/llm-observability.js';
8
8
  import { toGeminiFunctionDeclarations, toGeminiContents, fromGeminiParts, } from './tool-formats.js';
9
9
  import { summarizeError, toProviderError } from '../utils/error-display.js';
10
+ import { SseLineBuffer } from './sse-line-buffer.js';
10
11
  const GEMINI_API_BASE = 'https://generativelanguage.googleapis.com/v1beta';
11
12
  const GEMINI_CACHE_TTL_SECONDS = 3600;
12
13
  const NOOP_CACHE_HIT_TRACKER = {
@@ -219,17 +220,13 @@ export class GeminiProvider {
219
220
  phase: 'response',
220
221
  });
221
222
  }
222
- const decoder = new TextDecoder();
223
- let buffer = '';
223
+ const sseBuffer = new SseLineBuffer();
224
224
  try {
225
225
  while (true) {
226
226
  const { done, value } = await reader.read();
227
227
  if (done)
228
228
  break;
229
- buffer += decoder.decode(value, { stream: true });
230
- const lines = buffer.split('\n');
231
- buffer = lines.pop() ?? '';
232
- for (const line of lines) {
229
+ for (const line of sseBuffer.feed(value)) {
233
230
  if (!line.startsWith('data: '))
234
231
  continue;
235
232
  const data = line.slice(6).trim();
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Generic on-disk TTL cache helpers shared by model-limits, model-catalog-cache,
3
+ * and model-benchmarks.
4
+ *
5
+ * Each cache file has the same envelope shape:
6
+ * { version: 1, fetchedAt: number, ttlMs: number, <payload> }
7
+ *
8
+ * Only the envelope fields and the single payload key/kind differ between caches;
9
+ * those differences are captured by the arguments to validateTtlCacheEnvelope.
10
+ */
11
+ /** 24-hour TTL in milliseconds. */
12
+ export declare const TTL_24H_MS = 86400000;
13
+ /** Base envelope fields shared by all on-disk TTL caches. */
14
+ export interface TtlCacheEnvelope {
15
+ version: 1;
16
+ fetchedAt: number;
17
+ ttlMs: number;
18
+ }
19
+ /**
20
+ * Returns true when the cache has exceeded its declared TTL.
21
+ */
22
+ export declare function isTtlCacheStale(cache: Pick<TtlCacheEnvelope, 'fetchedAt' | 'ttlMs'>): boolean;
23
+ /**
24
+ * Validate the shared TTL cache envelope and one payload field.
25
+ *
26
+ * @param value Raw parsed JSON value.
27
+ * @param payloadKey Name of the payload field (e.g. `'models'`, `'entries'`).
28
+ * @param payloadKind Whether the payload should be an `'object'` or `'array'`.
29
+ * @returns `{ cache: T }` on success, or `{ cache: null, reason }` on failure.
30
+ */
31
+ export declare function validateTtlCacheEnvelope<T>(value: unknown, payloadKey: string, payloadKind: 'object' | 'array'): {
32
+ cache: T | null;
33
+ reason?: string;
34
+ };
35
+ //# sourceMappingURL=json-ttl-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-ttl-cache.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/json-ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mCAAmC;AACnC,eAAO,MAAM,UAAU,WAAa,CAAC;AAErC,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,OAAO,CAE7F;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,QAAQ,GAAG,OAAO,GAC9B;IAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAuBtC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Generic on-disk TTL cache helpers shared by model-limits, model-catalog-cache,
3
+ * and model-benchmarks.
4
+ *
5
+ * Each cache file has the same envelope shape:
6
+ * { version: 1, fetchedAt: number, ttlMs: number, <payload> }
7
+ *
8
+ * Only the envelope fields and the single payload key/kind differ between caches;
9
+ * those differences are captured by the arguments to validateTtlCacheEnvelope.
10
+ */
11
+ /** 24-hour TTL in milliseconds. */
12
+ export const TTL_24H_MS = 86_400_000;
13
+ /**
14
+ * Returns true when the cache has exceeded its declared TTL.
15
+ */
16
+ export function isTtlCacheStale(cache) {
17
+ return Date.now() - cache.fetchedAt > cache.ttlMs;
18
+ }
19
+ /**
20
+ * Validate the shared TTL cache envelope and one payload field.
21
+ *
22
+ * @param value Raw parsed JSON value.
23
+ * @param payloadKey Name of the payload field (e.g. `'models'`, `'entries'`).
24
+ * @param payloadKind Whether the payload should be an `'object'` or `'array'`.
25
+ * @returns `{ cache: T }` on success, or `{ cache: null, reason }` on failure.
26
+ */
27
+ export function validateTtlCacheEnvelope(value, payloadKey, payloadKind) {
28
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
29
+ return { cache: null, reason: 'root value is not an object' };
30
+ }
31
+ const parsed = value;
32
+ if (parsed['version'] !== 1)
33
+ return { cache: null, reason: 'unsupported cache version' };
34
+ if (typeof parsed['fetchedAt'] !== 'number' || !Number.isFinite(parsed['fetchedAt'])) {
35
+ return { cache: null, reason: 'fetchedAt must be a finite number' };
36
+ }
37
+ if (typeof parsed['ttlMs'] !== 'number' || !Number.isFinite(parsed['ttlMs'])) {
38
+ return { cache: null, reason: 'ttlMs must be a finite number' };
39
+ }
40
+ const payload = parsed[payloadKey];
41
+ if (payloadKind === 'object') {
42
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
43
+ return { cache: null, reason: `${payloadKey} must be an object` };
44
+ }
45
+ }
46
+ else {
47
+ if (!Array.isArray(payload)) {
48
+ return { cache: null, reason: `${payloadKey} must be an array` };
49
+ }
50
+ }
51
+ return { cache: parsed };
52
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"llama-cpp.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/llama-cpp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,wBAAwB,EACxB,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAYpF,KAAK,WAAW,GAAG,CACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAqBvB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAEhE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqC;gBAEzD,IAAI,EAAE,uBAAuB;IAazC,YAAY,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAUhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;YAsC5E,yBAAyB;CAoGxC"}
1
+ {"version":3,"file":"llama-cpp.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/llama-cpp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,wBAAwB,EACxB,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAapF,KAAK,WAAW,GAAG,CACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAqBvB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAEhE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqC;gBAEzD,IAAI,EAAE,uBAAuB;IAazC,YAAY,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAUhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;YAsC5E,yBAAyB;CAoGxC"}
@@ -3,7 +3,8 @@ import { instrumentedLlmCall } from '../runtime/llm-observability.js';
3
3
  import { ProviderError } from '../types/errors.js';
4
4
  import { OpenAICompatProvider } from './openai-compat.js';
5
5
  import { mapLlamaCppStopReason } from './stop-reason-maps.js';
6
- import { summarizeError, toProviderError } from '../utils/error-display.js';
6
+ import { summarizeError } from '../utils/error-display.js';
7
+ import { getErrorStatus, normalizeProviderError } from './provider-error.js';
7
8
  import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
8
9
  import { extractTextToolCalls, fromOpenAIToolCalls, toOpenAIMessages, toOpenAITools, } from './tool-formats.js';
9
10
  export class LlamaCppProvider {
@@ -294,28 +295,6 @@ async function buildHttpError(prefix, response, provider, operation, phase) {
294
295
  phase,
295
296
  });
296
297
  }
297
- function normalizeProviderError(err, provider, operation, phase = 'request') {
298
- const status = getErrorStatus(err);
299
- return toProviderError(err, {
300
- ...(status !== undefined ? { statusCode: status } : {}),
301
- provider,
302
- operation,
303
- phase,
304
- });
305
- }
306
- function getErrorStatus(err) {
307
- if (err && typeof err === 'object') {
308
- const record = err;
309
- if (typeof record.status === 'number')
310
- return record.status;
311
- if (typeof record.statusCode === 'number')
312
- return record.statusCode;
313
- }
314
- return undefined;
315
- }
316
- function getErrorMessage(err) {
317
- return summarizeError(err);
318
- }
319
298
  function toRecord(value) {
320
299
  return value && typeof value === 'object' ? value : {};
321
300
  }
@@ -1,5 +1,6 @@
1
1
  import { ProviderError } from '../types/errors.js';
2
2
  import type { ToolDefinition } from '../types/tools.js';
3
+ export { normalizeProviderError } from './provider-error.js';
3
4
  import type { ChatRequest, ContentPart, ProviderMessage } from './interface.js';
4
5
  export type ResponsesInputItem = {
5
6
  role: 'user';
@@ -82,5 +83,4 @@ export declare function makeTranscriptKey(model: string, systemPrompt: string |
82
83
  export declare function toRecord(value: unknown): Record<string, unknown>;
83
84
  export declare function shouldFallbackFromNative(err: unknown): boolean;
84
85
  export declare function shouldFallbackFromResponses(err: unknown): boolean;
85
- export declare function normalizeProviderError(err: unknown, provider: string, operation: string, phase?: string): ProviderError;
86
86
  //# sourceMappingURL=lm-studio-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lm-studio-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/lm-studio-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lm-studio-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/lm-studio-helpers.ts"],"names":[],"mappings":"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"}