@pellux/goodvibes-sdk 0.34.0 → 0.34.2

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 (195) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +1 -1
  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/session-broker-state.d.ts.map +1 -1
  40. package/dist/platform/control-plane/session-broker-state.js +1 -3
  41. package/dist/platform/core/compaction-sections.d.ts +3 -1
  42. package/dist/platform/core/compaction-sections.d.ts.map +1 -1
  43. package/dist/platform/core/compaction-sections.js +70 -66
  44. package/dist/platform/core/context-compaction.d.ts.map +1 -1
  45. package/dist/platform/core/context-compaction.js +10 -16
  46. package/dist/platform/core/orchestrator-context-runtime.d.ts +2 -2
  47. package/dist/platform/core/orchestrator-context-runtime.d.ts.map +1 -1
  48. package/dist/platform/core/orchestrator-context-runtime.js +24 -21
  49. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  50. package/dist/platform/core/orchestrator-tool-runtime.js +2 -1
  51. package/dist/platform/core/session-lineage.d.ts +2 -5
  52. package/dist/platform/core/session-lineage.d.ts.map +1 -1
  53. package/dist/platform/core/session-lineage.js +4 -16
  54. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  55. package/dist/platform/core/wrfc-routing.js +1 -3
  56. package/dist/platform/daemon/http/mcp-routes.d.ts.map +1 -1
  57. package/dist/platform/daemon/http/mcp-routes.js +1 -3
  58. package/dist/platform/daemon/http/openai-compatible-routes.d.ts.map +1 -1
  59. package/dist/platform/daemon/http/openai-compatible-routes.js +1 -3
  60. package/dist/platform/daemon/http/runtime-routes.d.ts.map +1 -1
  61. package/dist/platform/daemon/http/runtime-routes.js +1 -3
  62. package/dist/platform/hooks/runners/http.d.ts.map +1 -1
  63. package/dist/platform/hooks/runners/http.js +9 -19
  64. package/dist/platform/integrations/webhooks.js +2 -11
  65. package/dist/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  66. package/dist/platform/knowledge/semantic/self-improvement.js +2 -21
  67. package/dist/platform/mcp/client.d.ts.map +1 -1
  68. package/dist/platform/mcp/client.js +1 -3
  69. package/dist/platform/mcp/config.d.ts.map +1 -1
  70. package/dist/platform/mcp/config.js +1 -3
  71. package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
  72. package/dist/platform/media/builtin-generation-providers.js +1 -6
  73. package/dist/platform/providers/anthropic-compat.d.ts.map +1 -1
  74. package/dist/platform/providers/anthropic-compat.js +11 -131
  75. package/dist/platform/providers/anthropic-sdk-provider.d.ts.map +1 -1
  76. package/dist/platform/providers/anthropic-sdk-provider.js +8 -42
  77. package/dist/platform/providers/anthropic-sse-assembler.d.ts +80 -0
  78. package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -0
  79. package/dist/platform/providers/anthropic-sse-assembler.js +146 -0
  80. package/dist/platform/providers/anthropic-stream.d.ts +30 -0
  81. package/dist/platform/providers/anthropic-stream.d.ts.map +1 -0
  82. package/dist/platform/providers/anthropic-stream.js +44 -0
  83. package/dist/platform/providers/anthropic-vertex.d.ts.map +1 -1
  84. package/dist/platform/providers/anthropic-vertex.js +1 -3
  85. package/dist/platform/providers/anthropic.d.ts.map +1 -1
  86. package/dist/platform/providers/anthropic.js +15 -151
  87. package/dist/platform/providers/capabilities.d.ts.map +1 -1
  88. package/dist/platform/providers/capabilities.js +11 -7
  89. package/dist/platform/providers/context-discovery.d.ts.map +1 -1
  90. package/dist/platform/providers/context-discovery.js +9 -16
  91. package/dist/platform/providers/context-window-fallback.d.ts +24 -0
  92. package/dist/platform/providers/context-window-fallback.d.ts.map +1 -0
  93. package/dist/platform/providers/context-window-fallback.js +48 -0
  94. package/dist/platform/providers/gemini.d.ts.map +1 -1
  95. package/dist/platform/providers/gemini.js +3 -6
  96. package/dist/platform/providers/json-ttl-cache.d.ts +35 -0
  97. package/dist/platform/providers/json-ttl-cache.d.ts.map +1 -0
  98. package/dist/platform/providers/json-ttl-cache.js +52 -0
  99. package/dist/platform/providers/llama-cpp.d.ts.map +1 -1
  100. package/dist/platform/providers/llama-cpp.js +2 -23
  101. package/dist/platform/providers/lm-studio-helpers.d.ts +1 -1
  102. package/dist/platform/providers/lm-studio-helpers.d.ts.map +1 -1
  103. package/dist/platform/providers/lm-studio-helpers.js +5 -25
  104. package/dist/platform/providers/model-benchmarks.d.ts.map +1 -1
  105. package/dist/platform/providers/model-benchmarks.js +11 -34
  106. package/dist/platform/providers/model-catalog-cache.d.ts.map +1 -1
  107. package/dist/platform/providers/model-catalog-cache.js +15 -38
  108. package/dist/platform/providers/model-catalog-synthetic.d.ts.map +1 -1
  109. package/dist/platform/providers/model-catalog-synthetic.js +3 -2
  110. package/dist/platform/providers/model-catalog.d.ts.map +1 -1
  111. package/dist/platform/providers/model-catalog.js +3 -2
  112. package/dist/platform/providers/model-limits.d.ts.map +1 -1
  113. package/dist/platform/providers/model-limits.js +18 -42
  114. package/dist/platform/providers/ollama.d.ts.map +1 -1
  115. package/dist/platform/providers/ollama.js +3 -24
  116. package/dist/platform/providers/openai-codex.d.ts.map +1 -1
  117. package/dist/platform/providers/openai-codex.js +8 -9
  118. package/dist/platform/providers/openai-compat.d.ts.map +1 -1
  119. package/dist/platform/providers/openai-compat.js +13 -40
  120. package/dist/platform/providers/openai-stream-helpers.d.ts +62 -0
  121. package/dist/platform/providers/openai-stream-helpers.d.ts.map +1 -0
  122. package/dist/platform/providers/openai-stream-helpers.js +73 -0
  123. package/dist/platform/providers/openai.d.ts.map +1 -1
  124. package/dist/platform/providers/openai.js +13 -41
  125. package/dist/platform/providers/provider-error.d.ts +17 -0
  126. package/dist/platform/providers/provider-error.d.ts.map +1 -0
  127. package/dist/platform/providers/provider-error.js +33 -0
  128. package/dist/platform/providers/provider-stop-reason.d.ts +15 -0
  129. package/dist/platform/providers/provider-stop-reason.d.ts.map +1 -0
  130. package/dist/platform/providers/provider-stop-reason.js +15 -0
  131. package/dist/platform/providers/sse-line-buffer.d.ts +13 -0
  132. package/dist/platform/providers/sse-line-buffer.d.ts.map +1 -0
  133. package/dist/platform/providers/sse-line-buffer.js +23 -0
  134. package/dist/platform/providers/tool-formats.d.ts +5 -0
  135. package/dist/platform/providers/tool-formats.d.ts.map +1 -1
  136. package/dist/platform/providers/tool-formats.js +14 -0
  137. package/dist/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
  138. package/dist/platform/runtime/bootstrap-runtime-events.js +6 -0
  139. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  140. package/dist/platform/runtime/bootstrap-services.js +4 -5
  141. package/dist/platform/runtime/emitters/workflows.d.ts +4 -0
  142. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  143. package/dist/platform/runtime/emitters/workflows.js +3 -0
  144. package/dist/platform/runtime/remote/distributed-runtime-store.d.ts.map +1 -1
  145. package/dist/platform/runtime/remote/distributed-runtime-store.js +1 -3
  146. package/dist/platform/runtime/retention/pruner.js +2 -5
  147. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  148. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +15 -14
  149. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts +6 -0
  150. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts.map +1 -1
  151. package/dist/platform/runtime/store/helpers/reducers/shared.js +8 -1
  152. package/dist/platform/runtime/telemetry/exporters/queue.d.ts.map +1 -1
  153. package/dist/platform/runtime/telemetry/exporters/queue.js +1 -7
  154. package/dist/platform/runtime/transports/http-helpers.d.ts +0 -1
  155. package/dist/platform/runtime/transports/http-helpers.d.ts.map +1 -1
  156. package/dist/platform/runtime/transports/http-helpers.js +1 -3
  157. package/dist/platform/runtime/ui-read-model-helpers.d.ts +2 -0
  158. package/dist/platform/runtime/ui-read-model-helpers.d.ts.map +1 -1
  159. package/dist/platform/runtime/ui-read-model-helpers.js +8 -0
  160. package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
  161. package/dist/platform/runtime/ui-read-models-core.js +3 -5
  162. package/dist/platform/runtime/ui-read-models-observability-remote.d.ts.map +1 -1
  163. package/dist/platform/runtime/ui-read-models-observability-remote.js +2 -4
  164. package/dist/platform/runtime/ui-read-models-operations.d.ts.map +1 -1
  165. package/dist/platform/runtime/ui-read-models-operations.js +8 -26
  166. package/dist/platform/scheduler/scheduler.d.ts.map +1 -1
  167. package/dist/platform/scheduler/scheduler.js +1 -3
  168. package/dist/platform/tools/agent/index.d.ts +1 -0
  169. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  170. package/dist/platform/tools/agent/index.js +1 -0
  171. package/dist/platform/tools/agent/predicates.d.ts +15 -0
  172. package/dist/platform/tools/agent/predicates.d.ts.map +1 -0
  173. package/dist/platform/tools/agent/predicates.js +15 -0
  174. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  175. package/dist/platform/tools/exec/runtime.js +1 -7
  176. package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
  177. package/dist/platform/tools/fetch/runtime.js +9 -20
  178. package/dist/platform/tools/shared/process-manager.d.ts.map +1 -1
  179. package/dist/platform/tools/shared/process-manager.js +1 -6
  180. package/dist/platform/utils/concurrency.d.ts +1 -0
  181. package/dist/platform/utils/concurrency.d.ts.map +1 -1
  182. package/dist/platform/utils/concurrency.js +1 -0
  183. package/dist/platform/utils/error-display.d.ts +9 -0
  184. package/dist/platform/utils/error-display.d.ts.map +1 -1
  185. package/dist/platform/utils/error-display.js +11 -0
  186. package/dist/platform/utils/fetch-with-timeout.d.ts +22 -2
  187. package/dist/platform/utils/fetch-with-timeout.d.ts.map +1 -1
  188. package/dist/platform/utils/fetch-with-timeout.js +33 -15
  189. package/dist/platform/utils/record-coerce.d.ts +5 -0
  190. package/dist/platform/utils/record-coerce.d.ts.map +1 -1
  191. package/dist/platform/utils/record-coerce.js +7 -0
  192. package/dist/platform/utils/retry.d.ts.map +1 -1
  193. package/dist/platform/utils/retry.js +2 -4
  194. package/dist/platform/version.js +1 -1
  195. package/package.json +9 -9
@@ -1,6 +1,6 @@
1
1
  import { logger } from '../utils/logger.js';
2
2
  import { classifyHostTrustTier, extractHostname, emitSsrfDeny } from '../tools/fetch/trust-tiers.js';
3
- import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
3
+ import { instrumentedFetch, createTimeoutController } from '../utils/fetch-with-timeout.js';
4
4
  // ---------------------------------------------------------------------------
5
5
  // WebhookNotifier
6
6
  // ---------------------------------------------------------------------------
@@ -159,7 +159,7 @@ export class WebhookNotifier {
159
159
  throw new Error(`WebhookNotifier: blocked URL — ${trustResult.reason}`);
160
160
  }
161
161
  }
162
- const signal = createTimeoutSignal(this.timeoutMs);
162
+ const signal = createTimeoutController(this.timeoutMs);
163
163
  try {
164
164
  const body = truncateUtf8(text, this.maxBodyBytes);
165
165
  const headers = { 'Content-Type': 'text/plain' };
@@ -238,15 +238,6 @@ function truncateUtf8(value, maxBytes) {
238
238
  }
239
239
  return out;
240
240
  }
241
- function createTimeoutSignal(timeoutMs) {
242
- if (typeof AbortSignal.timeout === 'function') {
243
- return { signal: AbortSignal.timeout(timeoutMs), dispose: () => { } };
244
- }
245
- const controller = new AbortController();
246
- const timer = setTimeout(() => controller.abort(new Error('Request timed out')), timeoutMs);
247
- timer.unref?.();
248
- return { signal: controller.signal, dispose: () => clearTimeout(timer) };
249
- }
250
241
  async function createWebhookSignatureHeaders(body, secret) {
251
242
  const timestamp = String(Math.floor(Date.now() / 1000));
252
243
  const encoder = new TextEncoder();
@@ -1 +1 @@
1
- {"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../src/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAOrE,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAyBpB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,4BAA4B,EAAE,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3I;AAwDD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CAsF7C"}
1
+ {"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../src/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAOrE,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AA0BpB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,4BAA4B,EAAE,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3I;AAmDD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CAsF7C"}
@@ -3,6 +3,7 @@ import { getKnowledgeSpaceId, normalizeKnowledgeSpaceId } from '../spaces.js';
3
3
  import { recoverNoRepairerTasks, recoverStaleActiveTasks } from './self-improvement-recovery.js';
4
4
  import { sourceKnowledgeSpace, uniqueStrings } from './utils.js';
5
5
  import { withTimeout } from './timeouts.js';
6
+ import { createTimeoutController } from '../../utils/fetch-with-timeout.js';
6
7
  import { updateRefinementTask, upsertRefinementTaskForGap } from './self-improvement-tasks.js';
7
8
  import { promoteRepairSources } from './self-improvement-promotion.js';
8
9
  import { discoverIntrinsicGaps } from './self-improvement-intrinsic-gaps.js';
@@ -299,7 +300,7 @@ async function executeGapRepair(options) {
299
300
  }
300
301
  async function runGapRepairerWithBudget(input) {
301
302
  const { input: runInput, spaceId, gap, gapContext, gapRepairer, remainingMs } = input;
302
- const budget = createAbortBudget(runInput.signal, remainingMs);
303
+ const budget = createTimeoutController(remainingMs, runInput.signal);
303
304
  try {
304
305
  return await withTimeout(gapRepairer({
305
306
  spaceId,
@@ -317,26 +318,6 @@ async function runGapRepairerWithBudget(input) {
317
318
  budget.dispose();
318
319
  }
319
320
  }
320
- function createAbortBudget(parentSignal, timeoutMs) {
321
- const controller = new AbortController();
322
- const abortRepair = () => controller.abort();
323
- if (parentSignal?.aborted) {
324
- controller.abort();
325
- }
326
- else {
327
- parentSignal?.addEventListener('abort', abortRepair, { once: true });
328
- }
329
- const timer = setTimeout(() => controller.abort(), timeoutMs);
330
- timer.unref?.();
331
- return {
332
- signal: controller.signal,
333
- dispose() {
334
- clearTimeout(timer);
335
- parentSignal?.removeEventListener('abort', abortRepair);
336
- controller.abort();
337
- },
338
- };
339
- }
340
321
  async function recordGapRepairAssessment(store, task, gap, result) {
341
322
  const ingestedSourceIds = result?.ingestedSourceIds ?? [];
342
323
  const acceptedSourceIds = uniqueStrings([...(result?.acceptedSourceIds ?? []), ...ingestedSourceIds]);
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/platform/mcp/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/platform/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  import { logger } from '../utils/logger.js';
9
9
  import { VERSION } from '../version.js';
10
10
  import { summarizeError } from '../utils/error-display.js';
11
+ import { isRecord } from '../utils/record-coerce.js';
11
12
  const DEFAULT_TIMEOUT_MS = 30_000;
12
13
  const PING_TIMEOUT_MS = 5_000;
13
14
  const RESTART_DELAY_MS = 2_000;
@@ -18,9 +19,6 @@ function isJsonRpcId(value) {
18
19
  function jsonRpcIdKey(id) {
19
20
  return `${typeof id}:${String(id)}`;
20
21
  }
21
- function isRecord(value) {
22
- return typeof value === 'object' && value !== null;
23
- }
24
22
  function isJsonRpcResponse(value) {
25
23
  return isRecord(value)
26
24
  && 'id' in value
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/platform/mcp/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxH,mEAAmE;IACnE,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAChF,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC;AAC1F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,CAAC;IACvG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAgCD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,iBAAiB,EAAE,CAmCzF;AA4DD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAoBhF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,CAG7F;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAUvD;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAQlF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/platform/mcp/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxH,mEAAmE;IACnE,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAChF,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC;AAC1F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,CAAC;IACvG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AA6BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,iBAAiB,EAAE,CAmCzF;AA4DD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAoBhF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,CAG7F;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAUvD;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAQlF"}
@@ -5,9 +5,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
5
5
  import { dirname, join } from 'path';
6
6
  import { logger } from '../utils/logger.js';
7
7
  import { summarizeError } from '../utils/error-display.js';
8
- function isRecord(value) {
9
- return typeof value === 'object' && value !== null && !Array.isArray(value);
10
- }
8
+ import { isRecord } from '../utils/record-coerce.js';
11
9
  function optionalStringArray(value) {
12
10
  return Array.isArray(value) && value.every((entry) => typeof entry === 'string')
13
11
  ? [...value]
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-generation-providers.d.ts","sourceRoot":"","sources":["../../../src/platform/media/builtin-generation-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAgqBhC,wBAAgB,0BAA0B,IAAI,SAAS,aAAa,EAAE,CAQrE"}
1
+ {"version":3,"file":"builtin-generation-providers.d.ts","sourceRoot":"","sources":["../../../src/platform/media/builtin-generation-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,wBAAwB,CAAC;AA4pBhC,wBAAgB,0BAA0B,IAAI,SAAS,aAAa,EAAE,CAQrE"}
@@ -1,6 +1,7 @@
1
1
  import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
2
2
  import { logger } from '../utils/logger.js';
3
3
  import { summarizeError } from '../utils/error-display.js';
4
+ import { sleep } from '../utils/concurrency.js';
4
5
  function readFirstEnv(envVars) {
5
6
  for (const envVar of envVars) {
6
7
  const value = process.env[envVar];
@@ -68,12 +69,6 @@ function buildRemoteArtifactMetadata(providerId, url, input) {
68
69
  } : {}),
69
70
  };
70
71
  }
71
- function sleep(ms) {
72
- return new Promise((resolve) => {
73
- const timer = setTimeout(resolve, ms);
74
- timer.unref?.();
75
- });
76
- }
77
72
  function resolveReferenceArtifact(request) {
78
73
  const options = asRecord(request.options);
79
74
  const candidate = asRecord(options?.['referenceArtifact']) ?? asRecord(options?.['sourceArtifact']);
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-compat.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/anthropic-compat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAiDxB,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,gFAAgF;IAChF,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,gFAAgF;IAChF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,qDAAqD;IACrD,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,YAAW,WAAW;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAE1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqB;gBAE1C,IAAI,EAAE,sBAAsB;IAkBxC,YAAY,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA+MhD,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA6C3F"}
1
+ {"version":3,"file":"anthropic-compat.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/anthropic-compat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAiBxB,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,gFAAgF;IAChF,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,gFAAgF;IAChF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,qDAAqD;IACrD,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,YAAW,WAAW;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAE1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqB;gBAE1C,IAAI,EAAE,sBAAsB;IAkBxC,YAAY,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAiGhD,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA6C3F"}
@@ -1,11 +1,11 @@
1
- import { REASONING_BUDGET_MAP } from './interface.js';
1
+ import { applyAnthropicThinking } from './anthropic-stream.js';
2
2
  import { ProviderError } from '../types/errors.js';
3
- import { mapAnthropicStopReason } from './stop-reason-maps.js';
4
3
  import { withRetry } from '../utils/retry.js';
5
- import { logger } from '../utils/logger.js';
6
4
  import { instrumentedLlmCall } from '../runtime/llm-observability.js';
7
- import { toAnthropicTools, toAnthropicMessages, fromAnthropicContent, parseToolCallArguments, } from './tool-formats.js';
5
+ import { toAnthropicTools, toAnthropicMessages, } from './tool-formats.js';
8
6
  import { toProviderError } from '../utils/error-display.js';
7
+ import { createAnthropicSSEState, readAnthropicSSEStream, assembleAnthropicContentBlocks } from './anthropic-sse-assembler.js';
8
+ import { resolveCompletedStopReason, withProviderStopReason } from './provider-stop-reason.js';
9
9
  import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
10
10
  const ANTHROPIC_API_VERSION = '2023-06-01';
11
11
  /**
@@ -69,16 +69,7 @@ export class AnthropicCompatProvider {
69
69
  if (tools && tools.length > 0) {
70
70
  body['tools'] = toAnthropicTools(tools);
71
71
  }
72
- if (reasoningEffort && reasoningEffort !== 'instant') {
73
- const budget = REASONING_BUDGET_MAP[reasoningEffort];
74
- if (budget !== undefined && budget > 0) {
75
- body['thinking'] = { type: 'enabled', budget_tokens: budget };
76
- const currentMax = body['max_tokens'] ?? 8192;
77
- if (currentMax <= budget) {
78
- body['max_tokens'] = budget + 4096;
79
- }
80
- }
81
- }
72
+ applyAnthropicThinking(body, reasoningEffort, Infinity);
82
73
  const headers = {
83
74
  'Content-Type': 'application/json',
84
75
  'anthropic-version': ANTHROPIC_API_VERSION,
@@ -121,15 +112,7 @@ export class AnthropicCompatProvider {
121
112
  });
122
113
  }
123
114
  // Parse SSE stream
124
- let responseText = '';
125
- let inputTokens = 0;
126
- let outputTokens = 0;
127
- let cacheReadTokens = 0;
128
- let cacheWriteTokens = 0;
129
- let rawStopReason;
130
- let stopReason = 'unknown';
131
- // Accumulate tool use blocks by index
132
- const toolBlocks = new Map();
115
+ const state = createAnthropicSSEState();
133
116
  const reader = res.body?.getReader();
134
117
  if (!reader) {
135
118
  throw new ProviderError(`AnthropicCompat(${this.name}) returned no response body.`, {
@@ -139,117 +122,14 @@ export class AnthropicCompatProvider {
139
122
  phase: 'response',
140
123
  });
141
124
  }
142
- const decoder = new TextDecoder();
143
- let buffer = '';
144
- try {
145
- while (true) {
146
- const { done, value } = await reader.read();
147
- if (done)
148
- break;
149
- buffer += decoder.decode(value, { stream: true });
150
- const lines = buffer.split('\n');
151
- buffer = lines.pop() ?? '';
152
- for (const line of lines) {
153
- if (!line.startsWith('data: '))
154
- continue;
155
- const data = line.slice(6).trim();
156
- if (!data || data === '[DONE]')
157
- continue;
158
- let event;
159
- try {
160
- event = JSON.parse(data);
161
- }
162
- catch {
163
- logger.warn('AnthropicCompat SSE: failed to parse JSON chunk', {
164
- chunkPreview: data.slice(0, 200),
165
- chunkLength: data.length,
166
- });
167
- continue;
168
- }
169
- if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
170
- const idx = event.index ?? 0;
171
- toolBlocks.set(idx, {
172
- id: event.content_block.id ?? '',
173
- name: event.content_block.name ?? '',
174
- args: '',
175
- });
176
- if (onDelta) {
177
- onDelta({ toolCalls: [{ index: idx, id: event.content_block.id, name: event.content_block.name }] });
178
- }
179
- }
180
- else if (event.type === 'content_block_delta') {
181
- const idx = event.index ?? 0;
182
- if (event.delta?.type === 'text_delta' && event.delta.text) {
183
- responseText += event.delta.text;
184
- if (onDelta)
185
- onDelta({ content: event.delta.text });
186
- }
187
- else if (event.delta?.type === 'thinking_delta' && event.delta.thinking) {
188
- if (onDelta)
189
- onDelta({ reasoning: event.delta.thinking });
190
- }
191
- else if (event.delta?.type === 'input_json_delta' && event.delta.partial_json) {
192
- const block = toolBlocks.get(idx);
193
- if (block)
194
- block.args += event.delta.partial_json;
195
- if (onDelta) {
196
- onDelta({ toolCalls: [{ index: idx, arguments: event.delta.partial_json }] });
197
- }
198
- }
199
- }
200
- else if (event.type === 'message_delta') {
201
- if (event.delta?.stop_reason) {
202
- rawStopReason = event.delta.stop_reason;
203
- stopReason = mapAnthropicStopReason(rawStopReason);
204
- }
205
- if (event.usage?.output_tokens)
206
- outputTokens = event.usage.output_tokens;
207
- if (event.usage?.cache_read_input_tokens != null)
208
- cacheReadTokens = event.usage.cache_read_input_tokens;
209
- if (event.usage?.cache_creation_input_tokens != null)
210
- cacheWriteTokens = event.usage.cache_creation_input_tokens;
211
- }
212
- else if (event.type === 'message_start') {
213
- if (event.message?.usage) {
214
- inputTokens = event.message.usage.input_tokens;
215
- outputTokens = event.message.usage.output_tokens;
216
- cacheReadTokens = event.message.usage.cache_read_input_tokens ?? 0;
217
- cacheWriteTokens = event.message.usage.cache_creation_input_tokens ?? 0;
218
- }
219
- }
220
- }
221
- }
222
- }
223
- finally {
224
- reader.releaseLock();
225
- }
226
- // Assemble content blocks
227
- const contentBlocks = [];
228
- if (responseText) {
229
- contentBlocks.push({ type: 'text', text: responseText });
230
- }
231
- for (const [, block] of [...toolBlocks.entries()].sort(([a], [b]) => a - b)) {
232
- const parsedInput = parseToolCallArguments(block.args, {
233
- provider: this.name,
234
- toolName: block.name,
235
- callId: block.id,
236
- });
237
- if (parsedInput === undefined)
238
- continue;
239
- contentBlocks.push({
240
- type: 'tool_use',
241
- id: block.id,
242
- name: block.name,
243
- input: parsedInput,
244
- });
245
- }
246
- const { text, toolCalls } = fromAnthropicContent(contentBlocks);
125
+ await readAnthropicSSEStream(reader, state, onDelta, `AnthropicCompat(${this.name})`);
126
+ const { text, toolCalls } = assembleAnthropicContentBlocks(state.toolBlocks, state.responseText, this.name);
247
127
  return {
248
128
  content: text,
249
129
  toolCalls,
250
- usage: { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens },
251
- stopReason: stopReason === 'unknown' && text ? 'completed' : stopReason,
252
- ...(rawStopReason !== undefined ? { providerStopReason: rawStopReason } : {}),
130
+ usage: { inputTokens: state.inputTokens, outputTokens: state.outputTokens, cacheReadTokens: state.cacheReadTokens, cacheWriteTokens: state.cacheWriteTokens },
131
+ stopReason: resolveCompletedStopReason(state.stopReason, text),
132
+ ...withProviderStopReason(state.rawStopReason),
253
133
  };
254
134
  }), { provider: this.name, model: model ?? this.defaultModel })).result;
255
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-sdk-provider.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/anthropic-sdk-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAEZ,WAAW,EACX,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAiBxB,KAAK,4BAA4B,GAAG;IAClC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH,CAAC;AAoBF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,4BAA4B,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,qBAAa,oBAAqB,YAAW,WAAW;IAI1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEG,OAAO,EAAE,2BAA2B;IAK3D,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsHhD,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAqC3F"}
1
+ {"version":3,"file":"anthropic-sdk-provider.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/anthropic-sdk-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAEZ,WAAW,EACX,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAkBxB,KAAK,4BAA4B,GAAG;IAClC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH,CAAC;AAcF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,4BAA4B,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,qBAAa,oBAAqB,YAAW,WAAW;IAI1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEG,OAAO,EAAE,2BAA2B;IAK3D,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA+FhD,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAqC3F"}
@@ -1,18 +1,13 @@
1
- import { REASONING_BUDGET_MAP } from './interface.js';
1
+ import { applyAnthropicThinking } from './anthropic-stream.js';
2
2
  import { mapAnthropicStopReason } from './stop-reason-maps.js';
3
- import { fromAnthropicContent, parseToolCallArguments, toAnthropicMessages, toAnthropicTools, } from './tool-formats.js';
3
+ import { normalizeAnthropicModel, toAnthropicMessages, toAnthropicTools, } from './tool-formats.js';
4
+ import { assembleAnthropicContentBlocks } from './anthropic-sse-assembler.js';
5
+ import { resolveCompletedStopReason, withProviderStopReason } from './provider-stop-reason.js';
4
6
  import { ProviderError } from '../types/errors.js';
5
7
  import { withRetry } from '../utils/retry.js';
6
8
  import { buildStandardProviderAuthRoutes } from './runtime-metadata.js';
7
9
  import { toProviderError } from '../utils/error-display.js';
8
10
  const DEFAULT_MAX_OUTPUT = 8192;
9
- function normalizeAnthropicModel(model) {
10
- if (model.startsWith('anthropic:'))
11
- return model.slice('anthropic:'.length);
12
- if (model.startsWith('anthropic/'))
13
- return model.slice('anthropic/'.length);
14
- return model;
15
- }
16
11
  export class AnthropicSdkProvider {
17
12
  options;
18
13
  name;
@@ -38,15 +33,7 @@ export class AnthropicSdkProvider {
38
33
  if (params.tools && params.tools.length > 0) {
39
34
  body['tools'] = toAnthropicTools(params.tools);
40
35
  }
41
- if (params.reasoningEffort && params.reasoningEffort !== 'instant') {
42
- const budget = REASONING_BUDGET_MAP[params.reasoningEffort];
43
- if (typeof budget === 'number' && budget > 0) {
44
- body['thinking'] = { type: 'enabled', budget_tokens: budget };
45
- const currentMax = body['max_tokens'] ?? DEFAULT_MAX_OUTPUT;
46
- if (currentMax <= budget)
47
- body['max_tokens'] = budget + 4096;
48
- }
49
- }
36
+ applyAnthropicThinking(body, params.reasoningEffort, Infinity);
50
37
  const toolBlocks = new Map();
51
38
  let responseText = '';
52
39
  let rawStopReason;
@@ -92,28 +79,7 @@ export class AnthropicSdkProvider {
92
79
  }
93
80
  }
94
81
  const finalMessage = await stream.finalMessage();
95
- const contentBlocks = [];
96
- if (responseText) {
97
- contentBlocks.push({ type: 'text', text: responseText });
98
- }
99
- for (const [, block] of [...toolBlocks.entries()].sort(([a], [b]) => a - b)) {
100
- const parsedInput = parseToolCallArguments(block.args, {
101
- provider: this.name,
102
- toolName: block.name,
103
- callId: block.id,
104
- });
105
- if (parsedInput === undefined)
106
- continue;
107
- contentBlocks.push({
108
- type: 'tool_use',
109
- id: block.id,
110
- name: block.name,
111
- input: parsedInput,
112
- });
113
- }
114
- const parsed = contentBlocks.length > 0
115
- ? fromAnthropicContent(contentBlocks)
116
- : fromAnthropicContent(finalMessage.content);
82
+ const parsed = assembleAnthropicContentBlocks(toolBlocks, responseText, this.name, finalMessage.content);
117
83
  return {
118
84
  content: parsed.text,
119
85
  toolCalls: parsed.toolCalls,
@@ -123,8 +89,8 @@ export class AnthropicSdkProvider {
123
89
  ...(finalMessage.usage.cache_read_input_tokens != null ? { cacheReadTokens: finalMessage.usage.cache_read_input_tokens } : {}),
124
90
  ...(finalMessage.usage.cache_creation_input_tokens != null ? { cacheWriteTokens: finalMessage.usage.cache_creation_input_tokens } : {}),
125
91
  },
126
- stopReason: stopReason === 'unknown' && parsed.text ? 'completed' : stopReason,
127
- ...(rawStopReason !== undefined ? { providerStopReason: rawStopReason } : {}),
92
+ stopReason: resolveCompletedStopReason(stopReason, parsed.text),
93
+ ...withProviderStopReason(rawStopReason),
128
94
  };
129
95
  }
130
96
  catch (error) {
@@ -0,0 +1,80 @@
1
+ import type { ChatStopReason, StreamDelta } from './interface.js';
2
+ import type { AnthropicContentBlock } from './tool-formats.js';
3
+ import { fromAnthropicContent } from './tool-formats.js';
4
+ /** Anthropic SSE event shape (wire format from both direct API and compat endpoints). */
5
+ export interface AnthropicSSEEvent {
6
+ type: string;
7
+ index?: number | undefined;
8
+ delta?: {
9
+ type?: string | undefined;
10
+ text?: string | undefined;
11
+ thinking?: string | undefined;
12
+ partial_json?: string | undefined;
13
+ stop_reason?: string | null | undefined;
14
+ };
15
+ content_block?: {
16
+ type: string;
17
+ id?: string | undefined;
18
+ name?: string | undefined;
19
+ };
20
+ message?: {
21
+ usage?: {
22
+ input_tokens: number;
23
+ output_tokens: number;
24
+ cache_read_input_tokens?: number | undefined;
25
+ cache_creation_input_tokens?: number | undefined;
26
+ };
27
+ };
28
+ usage?: {
29
+ input_tokens?: number | undefined;
30
+ output_tokens?: number | undefined;
31
+ cache_read_input_tokens?: number | undefined;
32
+ cache_creation_input_tokens?: number | undefined;
33
+ };
34
+ }
35
+ /** Mutable accumulator for a single Anthropic streaming response. */
36
+ export interface AnthropicSSEState {
37
+ responseText: string;
38
+ inputTokens: number;
39
+ outputTokens: number;
40
+ cacheReadTokens: number;
41
+ cacheWriteTokens: number;
42
+ rawStopReason: string | undefined;
43
+ stopReason: ChatStopReason;
44
+ toolBlocks: Map<number, {
45
+ id: string;
46
+ name: string;
47
+ args: string;
48
+ }>;
49
+ }
50
+ /** Create a fresh zero-valued SSE accumulator. */
51
+ export declare function createAnthropicSSEState(): AnthropicSSEState;
52
+ /**
53
+ * Dispatch one Anthropic SSE event into the accumulator.
54
+ * Mutates state in place and calls onDelta for real-time delivery.
55
+ */
56
+ export declare function processAnthropicSSEEvent(event: AnthropicSSEEvent, state: AnthropicSSEState, onDelta: ((delta: StreamDelta) => void) | undefined): void;
57
+ /**
58
+ * Read an Anthropic SSE stream to completion, dispatching each event through
59
+ * processAnthropicSSEEvent. Uses SseLineBuffer for correct CRLF handling.
60
+ *
61
+ * @param reader ReadableStream reader from the fetch response body.
62
+ * @param state Accumulator to mutate (created with createAnthropicSSEState).
63
+ * @param onDelta Optional streaming delta callback.
64
+ * @param providerLabel Used in warn logs, e.g. 'Anthropic' or 'AnthropicCompat(my-proxy)'.
65
+ */
66
+ export declare function readAnthropicSSEStream(reader: ReadableStreamDefaultReader<Uint8Array>, state: AnthropicSSEState, onDelta: ((delta: StreamDelta) => void) | undefined, providerLabel: string): Promise<void>;
67
+ /**
68
+ * Assemble the final content + toolCalls from accumulated streaming state.
69
+ * Sorts tool blocks by stream index, parses JSON arguments, and calls
70
+ * fromAnthropicContent to produce the canonical response shape.
71
+ *
72
+ * @param fallbackBlocks Used by the SDK provider: if no streaming content was
73
+ * accumulated, fall back to finalMessage.content instead of returning empty.
74
+ */
75
+ export declare function assembleAnthropicContentBlocks(toolBlocks: Map<number, {
76
+ id: string;
77
+ name: string;
78
+ args: string;
79
+ }>, responseText: string, providerName: string, fallbackBlocks?: AnthropicContentBlock[]): ReturnType<typeof fromAnthropicContent>;
80
+ //# sourceMappingURL=anthropic-sse-assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-sse-assembler.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/anthropic-sse-assembler.ts"],"names":[],"mappings":"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"}