@omnicross/core 0.1.4 → 0.1.6

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 (204) hide show
  1. package/dist/ApiConverter.cjs +2 -2
  2. package/dist/ApiConverter.js +1 -1
  3. package/dist/{CompletionService-DdWaAxq0.d.ts → CompletionService-C3BX0Ovy.d.ts} +4 -3
  4. package/dist/{CompletionService-D3a47vdU.d.cts → CompletionService-kNA17cfI.d.cts} +4 -3
  5. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +7 -5
  6. package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -3
  7. package/dist/{chunk-HRRYG2AX.js → chunk-23S5OPIO.js} +10 -1
  8. package/dist/chunk-25GXJCEZ.cjs +40 -0
  9. package/dist/chunk-2JYRIADS.js +40 -0
  10. package/dist/chunk-3Z5BQZFM.cjs +52 -0
  11. package/dist/{chunk-4VAVYUZS.cjs → chunk-4VLRHHFE.cjs} +82 -40
  12. package/dist/{chunk-VACWOIRE.cjs → chunk-4VZX5F4T.cjs} +39 -15
  13. package/dist/{chunk-FTQ7IQUC.js → chunk-6CL5HTPQ.js} +52 -10
  14. package/dist/chunk-6QQG7YG3.cjs +153 -0
  15. package/dist/{chunk-SU2GCLAC.cjs → chunk-6VUQPOV3.cjs} +359 -60
  16. package/dist/chunk-7AK7B36B.cjs +44 -0
  17. package/dist/{chunk-5ZQBEOMD.js → chunk-AT7B7SOZ.js} +25 -2
  18. package/dist/{chunk-IK3KE3AU.js → chunk-DE2SRBFZ.js} +1 -1
  19. package/dist/chunk-DLXZEZWO.cjs +285 -0
  20. package/dist/{chunk-UHGVBFU3.js → chunk-EBLFCNPY.js} +38 -14
  21. package/dist/chunk-EJLH6NFT.cjs +166 -0
  22. package/dist/chunk-HVBBDBS3.cjs +350 -0
  23. package/dist/{chunk-7Y47UCF2.js → chunk-IFXJ2BG7.js} +5 -38
  24. package/dist/{chunk-46ZIFWYG.cjs → chunk-IIRPUVPH.cjs} +7 -1
  25. package/dist/{chunk-YGXJGRFI.cjs → chunk-KBM2W6UY.cjs} +111 -24
  26. package/dist/{chunk-OCEUVQHW.cjs → chunk-KCVJWJST.cjs} +73 -3
  27. package/dist/chunk-LB6EBS6Y.js +69 -0
  28. package/dist/{chunk-C7PSERMH.js → chunk-LVUCAWMK.js} +1 -1
  29. package/dist/chunk-MKF46GNZ.js +350 -0
  30. package/dist/{chunk-HYN75H6G.cjs → chunk-MUHWHQVM.cjs} +1 -1
  31. package/dist/{chunk-Z7Y2NPHY.js → chunk-N5T4M4GU.js} +1 -1
  32. package/dist/{chunk-TIER4SUC.js → chunk-OEWZUX4G.js} +346 -47
  33. package/dist/chunk-OF3BECU2.cjs +69 -0
  34. package/dist/{chunk-RSJ3TWJQ.cjs → chunk-OKMJLEXX.cjs} +5 -5
  35. package/dist/chunk-OPRS4IQZ.js +153 -0
  36. package/dist/{chunk-XK5CIRMQ.js → chunk-SIZQQD6T.js} +72 -2
  37. package/dist/{chunk-DKPXN34V.cjs → chunk-SQYVORNP.cjs} +1334 -510
  38. package/dist/chunk-SYQF7OIR.js +52 -0
  39. package/dist/{chunk-S4WBV25P.js → chunk-TOVPMMHM.js} +111 -24
  40. package/dist/{chunk-QYTT6GE3.js → chunk-UDCC7EMR.js} +1093 -269
  41. package/dist/{chunk-E3UCVHLP.cjs → chunk-UNWKG6EI.cjs} +5 -38
  42. package/dist/{chunk-ZLX3KGXX.js → chunk-UX7VWA46.js} +135 -23
  43. package/dist/{chunk-7YN22L2H.cjs → chunk-V4TXMEJS.cjs} +5 -5
  44. package/dist/chunk-VRFBB5DB.js +44 -0
  45. package/dist/chunk-WB6PH56J.js +166 -0
  46. package/dist/{chunk-G2UTNSGU.js → chunk-WNKWAEUR.js} +7 -1
  47. package/dist/{chunk-SUEGJ75D.cjs → chunk-WYTEQ4Q5.cjs} +25 -2
  48. package/dist/{chunk-5ENKBSWO.js → chunk-YJVHCHQX.js} +42 -6
  49. package/dist/{chunk-VQY5W4YW.cjs → chunk-YK57NMIF.cjs} +44 -8
  50. package/dist/{chunk-KFI44N2R.cjs → chunk-YNJNTCSQ.cjs} +10 -1
  51. package/dist/completion/ApiKeyPoolService.cjs +12 -0
  52. package/dist/completion/ApiKeyPoolService.d.cts +6 -0
  53. package/dist/completion/ApiKeyPoolService.d.ts +6 -0
  54. package/dist/completion/ApiKeyPoolService.js +12 -0
  55. package/dist/completion/CompletionService.cjs +27 -24
  56. package/dist/completion/CompletionService.d.cts +2 -1
  57. package/dist/completion/CompletionService.d.ts +2 -1
  58. package/dist/completion/CompletionService.js +26 -23
  59. package/dist/completion.cjs +27 -24
  60. package/dist/completion.d.cts +2 -1
  61. package/dist/completion.d.ts +2 -1
  62. package/dist/completion.js +26 -23
  63. package/dist/index.cjs +53 -29
  64. package/dist/index.d.cts +8 -8
  65. package/dist/index.d.ts +8 -8
  66. package/dist/index.js +56 -32
  67. package/dist/{keyPolicy-Cp0FntZl.d.cts → keyPolicy-zdWTu3CQ.d.cts} +1 -1
  68. package/dist/{keyPolicy-Cp0FntZl.d.ts → keyPolicy-zdWTu3CQ.d.ts} +1 -1
  69. package/dist/outbound-api/auditCapture.cjs +2 -2
  70. package/dist/outbound-api/auditCapture.d.cts +5 -3
  71. package/dist/outbound-api/auditCapture.d.ts +5 -3
  72. package/dist/outbound-api/auditCapture.js +1 -1
  73. package/dist/outbound-api/quotaWarn.d.cts +1 -1
  74. package/dist/outbound-api/quotaWarn.d.ts +1 -1
  75. package/dist/outbound-api/routeResolver.cjs +2 -2
  76. package/dist/outbound-api/routeResolver.d.cts +4 -3
  77. package/dist/outbound-api/routeResolver.d.ts +4 -3
  78. package/dist/outbound-api/routeResolver.js +1 -1
  79. package/dist/outbound-api/subscriptionRegistryPort.d.cts +1 -0
  80. package/dist/outbound-api/subscriptionRegistryPort.d.ts +1 -0
  81. package/dist/outbound-api/types.d.cts +3 -2
  82. package/dist/outbound-api/types.d.ts +3 -2
  83. package/dist/outbound-api.cjs +49 -25
  84. package/dist/outbound-api.d.cts +127 -85
  85. package/dist/outbound-api.d.ts +127 -85
  86. package/dist/outbound-api.js +52 -28
  87. package/dist/pipeline/AccountAllowanceScheduling.cjs +15 -0
  88. package/dist/pipeline/AccountAllowanceScheduling.d.cts +90 -0
  89. package/dist/pipeline/AccountAllowanceScheduling.d.ts +90 -0
  90. package/dist/pipeline/AccountAllowanceScheduling.js +15 -0
  91. package/dist/pipeline/AccountAllowanceStore.cjs +20 -0
  92. package/dist/pipeline/AccountAllowanceStore.d.cts +77 -0
  93. package/dist/pipeline/AccountAllowanceStore.d.ts +77 -0
  94. package/dist/pipeline/AccountAllowanceStore.js +20 -0
  95. package/dist/pipeline/AuthSource.d.cts +11 -2
  96. package/dist/pipeline/AuthSource.d.ts +11 -2
  97. package/dist/pipeline/BoundAccountSelectionError.cjs +10 -0
  98. package/dist/pipeline/BoundAccountSelectionError.d.cts +28 -0
  99. package/dist/pipeline/BoundAccountSelectionError.d.ts +28 -0
  100. package/dist/pipeline/BoundAccountSelectionError.js +10 -0
  101. package/dist/pipeline/LlmConfigProviderAuth.d.cts +1 -0
  102. package/dist/pipeline/LlmConfigProviderAuth.d.ts +1 -0
  103. package/dist/pipeline/SubscriptionAccountHealth.cjs +4 -2
  104. package/dist/pipeline/SubscriptionAccountHealth.d.cts +34 -6
  105. package/dist/pipeline/SubscriptionAccountHealth.d.ts +34 -6
  106. package/dist/pipeline/SubscriptionAccountHealth.js +3 -1
  107. package/dist/pipeline/SubscriptionAuthSource.cjs +5 -2
  108. package/dist/pipeline/SubscriptionAuthSource.d.cts +1 -0
  109. package/dist/pipeline/SubscriptionAuthSource.d.ts +1 -0
  110. package/dist/pipeline/SubscriptionAuthSource.js +4 -1
  111. package/dist/pipeline/SubscriptionAuthStrategy.d.cts +8 -3
  112. package/dist/pipeline/SubscriptionAuthStrategy.d.ts +8 -3
  113. package/dist/pipeline/executeProviderCall.cjs +2 -2
  114. package/dist/pipeline/executeProviderCall.d.cts +8 -3
  115. package/dist/pipeline/executeProviderCall.d.ts +8 -3
  116. package/dist/pipeline/executeProviderCall.js +1 -1
  117. package/dist/pipeline/resolveProviderChain.d.cts +2 -3
  118. package/dist/pipeline/resolveProviderChain.d.ts +2 -3
  119. package/dist/pipeline/resolveSubscriptionChain.d.cts +1 -0
  120. package/dist/pipeline/resolveSubscriptionChain.d.ts +1 -0
  121. package/dist/pipeline/upstreamFetch.cjs +4 -2
  122. package/dist/pipeline/upstreamFetch.d.cts +6 -0
  123. package/dist/pipeline/upstreamFetch.d.ts +6 -0
  124. package/dist/pipeline/upstreamFetch.js +3 -1
  125. package/dist/pipeline/upstreamTrace.cjs +14 -0
  126. package/dist/pipeline/upstreamTrace.d.cts +85 -0
  127. package/dist/pipeline/upstreamTrace.d.ts +85 -0
  128. package/dist/pipeline/upstreamTrace.js +14 -0
  129. package/dist/ports/pricing-store.d.cts +4 -3
  130. package/dist/ports/pricing-store.d.ts +4 -3
  131. package/dist/ports.d.cts +4 -3
  132. package/dist/ports.d.ts +4 -3
  133. package/dist/provider-proxy/ProviderProxy.cjs +27 -24
  134. package/dist/provider-proxy/ProviderProxy.d.cts +1 -0
  135. package/dist/provider-proxy/ProviderProxy.d.ts +1 -0
  136. package/dist/provider-proxy/ProviderProxy.js +26 -23
  137. package/dist/provider-proxy/ingress/providerProxyShared.cjs +31 -24
  138. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +50 -5
  139. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +50 -5
  140. package/dist/provider-proxy/ingress/providerProxyShared.js +30 -23
  141. package/dist/provider-proxy/matchText.cjs +4 -2
  142. package/dist/provider-proxy/matchText.d.cts +41 -6
  143. package/dist/provider-proxy/matchText.d.ts +41 -6
  144. package/dist/provider-proxy/matchText.js +3 -1
  145. package/dist/provider-proxy/types.d.cts +30 -2
  146. package/dist/provider-proxy/types.d.ts +30 -2
  147. package/dist/provider-proxy.cjs +27 -24
  148. package/dist/provider-proxy.d.cts +1 -0
  149. package/dist/provider-proxy.d.ts +1 -0
  150. package/dist/provider-proxy.js +26 -23
  151. package/dist/{routeResolver-C4T7yClx.d.ts → routeResolver-CHTv_Bs5.d.ts} +1 -1
  152. package/dist/{routeResolver-CB3tvJKy.d.cts → routeResolver-kepxnfcC.d.cts} +1 -1
  153. package/dist/transformer/TransformerChainExecutor.cjs +2 -2
  154. package/dist/transformer/TransformerChainExecutor.js +1 -1
  155. package/dist/transformer/transformers/AnthropicTransformer.cjs +2 -2
  156. package/dist/transformer/transformers/AnthropicTransformer.js +1 -1
  157. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +3 -3
  158. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +2 -2
  159. package/dist/transformer/transformers/GeminiTransformer.cjs +3 -3
  160. package/dist/transformer/transformers/GeminiTransformer.js +2 -2
  161. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +2 -2
  162. package/dist/transformer/transformers/OpenAIResponseTransformer.d.cts +1 -1
  163. package/dist/transformer/transformers/OpenAIResponseTransformer.d.ts +1 -1
  164. package/dist/transformer/transformers/OpenAIResponseTransformer.js +1 -1
  165. package/dist/transformer/transformers/OpenAITransformer.cjs +6 -0
  166. package/dist/transformer/transformers/OpenAITransformer.d.cts +68 -0
  167. package/dist/transformer/transformers/OpenAITransformer.d.ts +68 -0
  168. package/dist/transformer/transformers/OpenAITransformer.js +6 -0
  169. package/dist/transformer/transformers.cjs +8 -14
  170. package/dist/transformer/transformers.d.cts +12 -48
  171. package/dist/transformer/transformers.d.ts +12 -48
  172. package/dist/transformer/transformers.js +11 -17
  173. package/dist/transformer/types.d.cts +17 -0
  174. package/dist/transformer/types.d.ts +17 -0
  175. package/dist/transformer.cjs +11 -12
  176. package/dist/transformer.d.cts +1 -2
  177. package/dist/transformer.d.ts +1 -2
  178. package/dist/transformer.js +11 -12
  179. package/dist/{types-B8Arpxn0.d.cts → types-H3wGZSOo.d.cts} +134 -7
  180. package/dist/{types-lgPYQuZS.d.ts → types-hsoKrVQS.d.ts} +134 -7
  181. package/dist/usage/pricing-engine.cjs +2 -2
  182. package/dist/usage/pricing-engine.d.cts +9 -1
  183. package/dist/usage/pricing-engine.d.ts +9 -1
  184. package/dist/usage/pricing-engine.js +1 -1
  185. package/dist/usage.cjs +2 -2
  186. package/dist/usage.js +1 -1
  187. package/package.json +1 -1
  188. package/dist/chunk-C72S6TTV.cjs +0 -49
  189. package/dist/chunk-DWKQZ2SK.cjs +0 -254
  190. package/dist/chunk-IAXWICZU.js +0 -69
  191. package/dist/chunk-QWBWGODS.cjs +0 -69
  192. package/dist/chunk-RGTR7CIO.cjs +0 -235
  193. package/dist/chunk-VPBAUQ2M.js +0 -235
  194. package/dist/chunk-YMFAJFQT.cjs +0 -173
  195. package/dist/chunk-Z7LUNECE.js +0 -49
  196. package/dist/chunk-ZJZAOKI7.js +0 -254
  197. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +0 -6
  198. package/dist/transformer/transformers/OpenCodeGoTransformer.d.cts +0 -51
  199. package/dist/transformer/transformers/OpenCodeGoTransformer.d.ts +0 -51
  200. package/dist/transformer/transformers/OpenCodeGoTransformer.js +0 -6
  201. package/dist/transformer/transformers/ReasoningTransformer.cjs +0 -6
  202. package/dist/transformer/transformers/ReasoningTransformer.d.cts +0 -47
  203. package/dist/transformer/transformers/ReasoningTransformer.d.ts +0 -47
  204. package/dist/transformer/transformers/ReasoningTransformer.js +0 -6
@@ -89,18 +89,6 @@ function validateEndpointModelConfig(config) {
89
89
  (kind) => !isNonBlankRef(map[kind])
90
90
  );
91
91
  }
92
- function validateServerModelConfig(config) {
93
- const errors = [];
94
- for (const endpoint of Object.keys(_chunk4IH4EL7Mcjs.ENDPOINT_MODEL_KINDS)) {
95
- const ep = config.endpoints.find((e) => e.endpoint === endpoint);
96
- const declared = modelKindsForEndpoint(endpoint);
97
- const missingKinds = ep ? validateEndpointModelConfig(ep) : [...declared];
98
- if (missingKinds.length > 0 && missingKinds.length < declared.length) {
99
- errors.push({ endpoint, missingKinds });
100
- }
101
- }
102
- return errors;
103
- }
104
92
 
105
93
  // src/outbound-api/modelPrefixDispatch.ts
106
94
  function classifyModelPrefix(model) {
@@ -149,6 +137,34 @@ function endpointSupportsSubscription(endpoint) {
149
137
  }
150
138
 
151
139
  // src/outbound-api/routeResolver.ts
140
+ function bindDelegatedSubscriptionProfile(profile, config) {
141
+ const preferredAccountId = config.boundAccountId;
142
+ const preferredAccountGroup = config.boundAccountGroup;
143
+ const boundAccountFallbackPolicy = config.boundAccountFallbackPolicy;
144
+ if (!preferredAccountId && !preferredAccountGroup) return profile;
145
+ const strategy = profile.authStrategy;
146
+ return {
147
+ ...profile,
148
+ authStrategy: {
149
+ kind: strategy.kind,
150
+ providerId: strategy.providerId,
151
+ applyHeaders(headers, hints) {
152
+ return strategy.applyHeaders(headers, {
153
+ ...hints,
154
+ preferredAccountId,
155
+ preferredAccountGroup,
156
+ boundAccountFallbackPolicy
157
+ });
158
+ },
159
+ onUnauthorized(sessionKey) {
160
+ return strategy.onUnauthorized(sessionKey);
161
+ },
162
+ describeStatus() {
163
+ return strategy.describeStatus();
164
+ }
165
+ }
166
+ };
167
+ }
152
168
  function parseModelRef(ref) {
153
169
  if (!ref) return null;
154
170
  const idx = ref.indexOf(",");
@@ -267,6 +283,8 @@ async function resolveRoute(args) {
267
283
  apiKey: resolveApiKey(provider.api_key),
268
284
  isOfficialProvider,
269
285
  passThrough: false,
286
+ preferredKeyId: config.boundKeyId,
287
+ boundKeyFallbackPolicy: config.boundKeyFallbackPolicy,
270
288
  attribution: { sessionId, apiKeyId: _nullishCoalesce(args.apiKeyId, () => ( null)) }
271
289
  };
272
290
  }
@@ -277,6 +295,8 @@ async function resolveRoute(args) {
277
295
  ingressFormat,
278
296
  authMode: "byo",
279
297
  providerId,
298
+ preferredKeyId: config.boundKeyId,
299
+ boundKeyFallbackPolicy: config.boundKeyFallbackPolicy,
280
300
  // Passthrough gate: the client's ORIGINAL requested id (kind-mapped only).
281
301
  requestedModel,
282
302
  // Usage attribution: the verified named-key id (undefined for internal traffic).
@@ -321,7 +341,10 @@ async function resolveSubscriptionRoute(args) {
321
341
  apiKey: "",
322
342
  isOfficialProvider: false,
323
343
  passThrough: false,
324
- subscriptionProfile: profile,
344
+ subscriptionProfile: bindDelegatedSubscriptionProfile(profile, config),
345
+ preferredAccountId: config.boundAccountId,
346
+ preferredAccountGroup: config.boundAccountGroup,
347
+ boundAccountFallbackPolicy: config.boundAccountFallbackPolicy,
325
348
  attribution: { sessionId, apiKeyId: _nullishCoalesce(apiKeyId, () => ( null)) }
326
349
  };
327
350
  const subscriptionConfig = providerId === "opencodego" ? await _optionalChain([registry, 'optionalAccess', _9 => _9.getOpenCodeGoConfig, 'optionalCall', _10 => _10()]) : void 0;
@@ -353,6 +376,8 @@ async function resolveSubscriptionRoute(args) {
353
376
  subscriptionConfig,
354
377
  // Per-request preferred account (provider/subscription duality); undefined ⇒ pool.
355
378
  preferredAccountId: config.boundAccountId,
379
+ preferredAccountGroup: config.boundAccountGroup,
380
+ boundAccountFallbackPolicy: config.boundAccountFallbackPolicy,
356
381
  anthropicSdkHints: hints
357
382
  };
358
383
  return { ok: true, route, usedRole: effectiveRole };
@@ -381,5 +406,4 @@ function resolveApiKey(apiKey) {
381
406
 
382
407
 
383
408
 
384
-
385
- exports.extractRequestedModel = extractRequestedModel; exports.detectRequestRole = detectRequestRole; exports.endpointToIngressFormat = endpointToIngressFormat; exports.isKindMappedEndpoint = isKindMappedEndpoint; exports.modelKindsForEndpoint = modelKindsForEndpoint; exports.detectModelKind = detectModelKind; exports.validateEndpointModelConfig = validateEndpointModelConfig; exports.validateServerModelConfig = validateServerModelConfig; exports.classifyModelPrefix = classifyModelPrefix; exports.resolvePrefixTarget = resolvePrefixTarget; exports.SUBSCRIPTION_PROVIDER_IDS = SUBSCRIPTION_PROVIDER_IDS; exports.isSubscriptionProviderId = isSubscriptionProviderId; exports.endpointSupportsSubscription = endpointSupportsSubscription; exports.parseModelRef = parseModelRef; exports.pickModelRefFromList = pickModelRefFromList; exports.resolveRoute = resolveRoute;
409
+ exports.extractRequestedModel = extractRequestedModel; exports.detectRequestRole = detectRequestRole; exports.endpointToIngressFormat = endpointToIngressFormat; exports.isKindMappedEndpoint = isKindMappedEndpoint; exports.modelKindsForEndpoint = modelKindsForEndpoint; exports.detectModelKind = detectModelKind; exports.validateEndpointModelConfig = validateEndpointModelConfig; exports.classifyModelPrefix = classifyModelPrefix; exports.resolvePrefixTarget = resolvePrefixTarget; exports.SUBSCRIPTION_PROVIDER_IDS = SUBSCRIPTION_PROVIDER_IDS; exports.isSubscriptionProviderId = isSubscriptionProviderId; exports.endpointSupportsSubscription = endpointSupportsSubscription; exports.parseModelRef = parseModelRef; exports.pickModelRefFromList = pickModelRefFromList; exports.resolveRoute = resolveRoute;
@@ -25,6 +25,40 @@ function formatBase64(data, mediaType) {
25
25
  if (data.startsWith("data:")) return data;
26
26
  return `data:${mediaType || "image/png"};base64,${data}`;
27
27
  }
28
+ function flattenToolResultContent(content) {
29
+ if (typeof content === "string") return content;
30
+ if (content == null) return "";
31
+ if (!Array.isArray(content)) return JSON.stringify(content);
32
+ const parts = [];
33
+ for (const block of content) {
34
+ if (typeof block === "string") {
35
+ parts.push(block);
36
+ continue;
37
+ }
38
+ if (!block || typeof block !== "object") continue;
39
+ const typed = block;
40
+ if (typed.type === "image" || typed.type === "image_url") {
41
+ parts.push("[image omitted]");
42
+ } else if (typeof typed.text === "string") {
43
+ parts.push(typed.text);
44
+ }
45
+ }
46
+ return parts.filter((text) => text !== "").join("\n");
47
+ }
48
+
49
+ // src/anthropicMaxTokens.ts
50
+ import { lookupCanonicalCapabilities } from "@omnicross/contracts/canonical-models";
51
+ var ANTHROPIC_FALLBACK_MAX_TOKENS = 128e3;
52
+ function resolveAnthropicMaxTokens(model, requested) {
53
+ if (typeof requested === "number" && Number.isFinite(requested) && requested > 0) {
54
+ return requested;
55
+ }
56
+ const canonical = model ? lookupCanonicalCapabilities(model)?.maxTokens : void 0;
57
+ if (typeof canonical === "number" && Number.isFinite(canonical) && canonical > 0) {
58
+ return canonical;
59
+ }
60
+ return ANTHROPIC_FALLBACK_MAX_TOKENS;
61
+ }
28
62
 
29
63
  // src/transformer/transformers/AnthropicRequestBuilder.ts
30
64
  function buildAnthropicRequestBody(request) {
@@ -129,7 +163,11 @@ function buildAnthropicRequestBody(request) {
129
163
  const body = {
130
164
  model: request.model,
131
165
  messages: anthropicMessages,
132
- max_tokens: request.max_tokens || 4096,
166
+ // Anthropic requires this field, so an absent caller cap must resolve to
167
+ // the model's real ceiling — NOT a small constant, which would silently
168
+ // truncate long responses (and corrupt tool-call JSON mid-stream).
169
+ // See `resolveAnthropicMaxTokens`.
170
+ max_tokens: resolveAnthropicMaxTokens(request.model, request.max_tokens),
133
171
  stream: request.stream ?? false
134
172
  };
135
173
  if (request.temperature !== void 0) {
@@ -237,6 +275,14 @@ function convertOpenAIResponseToAnthropic(openaiResponse) {
237
275
  }
238
276
  const message = choice.message;
239
277
  const content = [];
278
+ const thinking = message.thinking;
279
+ if (thinking?.content) {
280
+ content.push({
281
+ type: "thinking",
282
+ thinking: thinking.content,
283
+ signature: thinking.signature
284
+ });
285
+ }
240
286
  if (message.content) {
241
287
  content.push({
242
288
  type: "text",
@@ -262,14 +308,6 @@ function convertOpenAIResponseToAnthropic(openaiResponse) {
262
308
  });
263
309
  }
264
310
  }
265
- const thinking = message.thinking;
266
- if (thinking?.content) {
267
- content.push({
268
- type: "thinking",
269
- thinking: thinking.content,
270
- signature: thinking.signature
271
- });
272
- }
273
311
  const finishReason = choice.finish_reason;
274
312
  const stopReasonMapping = {
275
313
  stop: "end_turn",
@@ -337,7 +375,10 @@ function transformAnthropicRequestToUnified(request) {
337
375
  for (const tool of toolParts) {
338
376
  messages.push({
339
377
  role: "tool",
340
- content: typeof tool.content === "string" ? tool.content : JSON.stringify(tool.content),
378
+ // Claude Code sends tool results as a block ARRAY; stringifying it
379
+ // fed the model the literal `[{"type":"text","text":"…"}]` envelope
380
+ // on every tool result.
381
+ content: flattenToolResultContent(tool.content),
341
382
  tool_call_id: tool.tool_use_id,
342
383
  cache_control: tool.cache_control
343
384
  });
@@ -987,5 +1028,6 @@ var AnthropicTransformer = class {
987
1028
  };
988
1029
 
989
1030
  export {
1031
+ resolveAnthropicMaxTokens,
990
1032
  AnthropicTransformer
991
1033
  };
@@ -0,0 +1,153 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2;
2
+
3
+ var _chunkHVBBDBS3cjs = require('./chunk-HVBBDBS3.cjs');
4
+
5
+ // src/pipeline/AccountAllowanceScheduling.ts
6
+ var DEFAULT_POLICY = {
7
+ enabled: false,
8
+ demoteAtPercent: 80,
9
+ pauseAtPercent: 98,
10
+ priorityPenalty: 100
11
+ };
12
+ var HISTORY_LIMIT = 200;
13
+ var AccountAllowanceExhaustedError = (_class = class extends Error {
14
+ constructor(providerId, resumeAt) {
15
+ super(
16
+ resumeAt ? `All ${providerId} subscription accounts are paused by the allowance policy until ${resumeAt}` : `All ${providerId} subscription accounts are paused by the allowance policy`
17
+ );_class.prototype.__init.call(this);_class.prototype.__init2.call(this);;
18
+ this.providerId = providerId;
19
+ this.resumeAt = resumeAt;
20
+ this.name = "AccountAllowanceExhaustedError";
21
+ }
22
+
23
+
24
+ __init() {this.code = "account_allowance_exhausted"}
25
+ __init2() {this.status = 429}
26
+ }, _class);
27
+ function isAccountAllowanceExhaustedError(error) {
28
+ if (error instanceof AccountAllowanceExhaustedError) return true;
29
+ if (!error || typeof error !== "object") return false;
30
+ const value = error;
31
+ return value.code === "account_allowance_exhausted" && value.status === 429;
32
+ }
33
+ function freshWorstWindow(snapshot) {
34
+ return snapshot.windows.filter((window) => window.state === "fresh" && typeof window.usedPercent === "number").sort((left, right) => (_nullishCoalesce(right.usedPercent, () => ( -1))) - (_nullishCoalesce(left.usedPercent, () => ( -1))))[0];
35
+ }
36
+ var AccountAllowanceScheduling = (_class2 = class {
37
+ constructor(store = _chunkHVBBDBS3cjs.getSharedAccountAllowanceStore.call(void 0, ), now = Date.now) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
38
+ this.store = store;
39
+ this.now = now;
40
+ }
41
+
42
+
43
+ __init3() {this.config = { ...DEFAULT_POLICY }}
44
+ __init4() {this.history = []}
45
+ __init5() {this.lastRecorded = /* @__PURE__ */ new Map()}
46
+ configure(config) {
47
+ this.config = config ? { ...config } : { ...DEFAULT_POLICY };
48
+ }
49
+ getConfig() {
50
+ return { ...this.config };
51
+ }
52
+ evaluate(providerId, accountId, basePriority, now = this.now()) {
53
+ const decision = this.decide(providerId, accountId, basePriority, now);
54
+ this.recordApplied(decision);
55
+ return decision;
56
+ }
57
+ /**
58
+ * Project the current policy result without recording an applied decision.
59
+ * Admin/read-model callers use this so polling an account list never creates
60
+ * synthetic demotion/pause history entries.
61
+ */
62
+ preview(providerId, accountId, basePriority, now = this.now()) {
63
+ return this.decide(providerId, accountId, basePriority, now);
64
+ }
65
+ decide(providerId, accountId, basePriority, now) {
66
+ const decidedAt = new Date(now).toISOString();
67
+ const base = {
68
+ providerId,
69
+ accountId,
70
+ basePriority,
71
+ effectivePriority: basePriority,
72
+ schedulable: true,
73
+ decidedAt
74
+ };
75
+ if (!this.config.enabled) return { ...base, action: "ignore", reason: "policy-disabled" };
76
+ if (providerId !== "claude" && providerId !== "codex") {
77
+ return { ...base, action: "ignore", reason: "provider-unsupported" };
78
+ }
79
+ const snapshot = this.store.get(providerId, accountId, now);
80
+ if (!snapshot) return { ...base, action: "ignore", reason: "snapshot-missing" };
81
+ const worst = freshWorstWindow(snapshot);
82
+ if (!worst || worst.usedPercent === null) {
83
+ return { ...base, action: "ignore", reason: "snapshot-not-fresh", observedAt: snapshot.observedAt };
84
+ }
85
+ const resumeAt = _nullishCoalesce(worst.resetsAt, () => ( snapshot.expiresAt));
86
+ const resumeMs = resumeAt ? Date.parse(resumeAt) : Number.NaN;
87
+ const canPauseUntilKnownDeadline = Number.isFinite(resumeMs) && resumeMs > now;
88
+ let decision;
89
+ if (worst.usedPercent >= this.config.pauseAtPercent && canPauseUntilKnownDeadline) {
90
+ decision = {
91
+ ...base,
92
+ action: "pause",
93
+ reason: "pause-threshold",
94
+ schedulable: false,
95
+ usedPercent: worst.usedPercent,
96
+ observedAt: snapshot.observedAt,
97
+ resumeAt
98
+ };
99
+ } else if (worst.usedPercent >= this.config.demoteAtPercent) {
100
+ decision = {
101
+ ...base,
102
+ action: "demote",
103
+ reason: "demote-threshold",
104
+ effectivePriority: basePriority + this.config.priorityPenalty,
105
+ usedPercent: worst.usedPercent,
106
+ observedAt: snapshot.observedAt,
107
+ resumeAt: canPauseUntilKnownDeadline ? resumeAt : void 0
108
+ };
109
+ } else {
110
+ decision = {
111
+ ...base,
112
+ action: "normal",
113
+ reason: "below-threshold",
114
+ usedPercent: worst.usedPercent,
115
+ observedAt: snapshot.observedAt,
116
+ resumeAt: canPauseUntilKnownDeadline ? resumeAt : void 0
117
+ };
118
+ }
119
+ return decision;
120
+ }
121
+ getHistory() {
122
+ return this.history.map((decision) => ({ ...decision }));
123
+ }
124
+ clearHistory() {
125
+ this.history.length = 0;
126
+ this.lastRecorded.clear();
127
+ }
128
+ recordApplied(decision) {
129
+ if (decision.action !== "demote" && decision.action !== "pause") return;
130
+ const key = `${decision.providerId}\0${decision.accountId}`;
131
+ const signature = `${decision.action}\0${_nullishCoalesce(decision.observedAt, () => ( ""))}\0${_nullishCoalesce(decision.usedPercent, () => ( ""))}`;
132
+ if (this.lastRecorded.get(key) === signature) return;
133
+ this.lastRecorded.set(key, signature);
134
+ this.history.push({ ...decision });
135
+ if (this.history.length > HISTORY_LIMIT) this.history.splice(0, this.history.length - HISTORY_LIMIT);
136
+ }
137
+ }, _class2);
138
+ var sharedScheduling = null;
139
+ function getSharedAccountAllowanceScheduling() {
140
+ if (!sharedScheduling) sharedScheduling = new AccountAllowanceScheduling();
141
+ return sharedScheduling;
142
+ }
143
+ function __resetSharedAccountAllowanceSchedulingForTests() {
144
+ sharedScheduling = null;
145
+ }
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ exports.AccountAllowanceExhaustedError = AccountAllowanceExhaustedError; exports.isAccountAllowanceExhaustedError = isAccountAllowanceExhaustedError; exports.AccountAllowanceScheduling = AccountAllowanceScheduling; exports.getSharedAccountAllowanceScheduling = getSharedAccountAllowanceScheduling; exports.__resetSharedAccountAllowanceSchedulingForTests = __resetSharedAccountAllowanceSchedulingForTests;