@omnicross/core 0.1.7 → 0.1.9

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 (117) hide show
  1. package/dist/{ProviderProxy-C-xqrkKi.d.ts → ProviderProxy--ROec6VI.d.ts} +22 -3
  2. package/dist/{ProviderProxy-CnMQYN59.d.cts → ProviderProxy-QdwNV6l1.d.cts} +22 -3
  3. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +5 -3
  4. package/dist/auth/GeminiCodeAssistProjectResolver.js +4 -2
  5. package/dist/{chunk-N5T4M4GU.js → chunk-2UTGX6FM.js} +2 -2
  6. package/dist/{chunk-32O35CIF.js → chunk-45FHEOKW.js} +22 -7
  7. package/dist/{chunk-LVUCAWMK.js → chunk-55FMGZ3L.js} +13 -5
  8. package/dist/{chunk-OF3BECU2.cjs → chunk-56QD3YW6.cjs} +18 -5
  9. package/dist/{chunk-V4TXMEJS.cjs → chunk-5LNYGCIW.cjs} +15 -7
  10. package/dist/chunk-77USGNRW.cjs +37 -0
  11. package/dist/chunk-AOFWNWLT.cjs +203 -0
  12. package/dist/{chunk-LB6EBS6Y.js → chunk-CCVRRJOX.js} +17 -4
  13. package/dist/{chunk-OVQBNVSV.cjs → chunk-CMVXX7ON.cjs} +42 -27
  14. package/dist/{chunk-E3COOKUP.js → chunk-CQIJCPMF.js} +1108 -271
  15. package/dist/{chunk-OJGQKHN5.cjs → chunk-EPN67EGP.cjs} +3 -0
  16. package/dist/{chunk-PEGTIPB3.js → chunk-HKB656B4.js} +37 -43
  17. package/dist/chunk-N2EIM2XJ.js +203 -0
  18. package/dist/{chunk-MYYR3HZL.js → chunk-NGYOO5TO.js} +5 -5
  19. package/dist/{chunk-OKMJLEXX.cjs → chunk-OC6DOOFX.cjs} +5 -5
  20. package/dist/{chunk-2Z4XM3H5.cjs → chunk-P7EM6BND.cjs} +10 -10
  21. package/dist/{chunk-KBM2W6UY.cjs → chunk-RICPANBY.cjs} +41 -24
  22. package/dist/{chunk-TOVPMMHM.js → chunk-S3DYFEBE.js} +37 -20
  23. package/dist/{chunk-SOO562NM.js → chunk-UAPBLNN2.js} +3 -0
  24. package/dist/chunk-WYVGULTQ.js +37 -0
  25. package/dist/{chunk-4BB343BI.cjs → chunk-XELFM7KL.cjs} +1381 -544
  26. package/dist/{chunk-OXHNSZ53.cjs → chunk-ZQQUD66M.cjs} +54 -60
  27. package/dist/completion/ApiKeyPoolService.cjs +32 -1
  28. package/dist/completion/ApiKeyPoolService.d.cts +17 -1
  29. package/dist/completion/ApiKeyPoolService.d.ts +17 -1
  30. package/dist/completion/ApiKeyPoolService.js +31 -0
  31. package/dist/completion/CompletionService.cjs +13 -11
  32. package/dist/completion/CompletionService.js +12 -10
  33. package/dist/completion.cjs +13 -11
  34. package/dist/completion.js +12 -10
  35. package/dist/index.cjs +69 -11
  36. package/dist/index.d.cts +7 -7
  37. package/dist/index.d.ts +7 -7
  38. package/dist/index.js +68 -10
  39. package/dist/outbound-api/routeResolver.d.cts +4 -4
  40. package/dist/outbound-api/routeResolver.d.ts +4 -4
  41. package/dist/outbound-api/types.d.cts +3 -3
  42. package/dist/outbound-api/types.d.ts +3 -3
  43. package/dist/outbound-api.cjs +13 -11
  44. package/dist/outbound-api.d.cts +5 -5
  45. package/dist/outbound-api.d.ts +5 -5
  46. package/dist/outbound-api.js +12 -10
  47. package/dist/pipeline/AccountAllowanceScheduling.d.cts +3 -3
  48. package/dist/pipeline/AccountAllowanceScheduling.d.ts +3 -3
  49. package/dist/pipeline/executeProviderCall.d.cts +2 -0
  50. package/dist/pipeline/executeProviderCall.d.ts +2 -0
  51. package/dist/pipeline/resolveProviderChain.d.cts +1 -0
  52. package/dist/pipeline/resolveProviderChain.d.ts +1 -0
  53. package/dist/pipeline/resolveSubscriptionChain.d.cts +2 -0
  54. package/dist/pipeline/resolveSubscriptionChain.d.ts +2 -0
  55. package/dist/ports/provider-config-source.d.cts +1 -0
  56. package/dist/ports/provider-config-source.d.ts +1 -0
  57. package/dist/ports.d.cts +3 -3
  58. package/dist/ports.d.ts +3 -3
  59. package/dist/provider-proxy/ProviderProxy.cjs +13 -11
  60. package/dist/provider-proxy/ProviderProxy.d.cts +1 -1
  61. package/dist/provider-proxy/ProviderProxy.d.ts +1 -1
  62. package/dist/provider-proxy/ProviderProxy.js +12 -10
  63. package/dist/provider-proxy/ingress/providerProxyShared.cjs +13 -11
  64. package/dist/provider-proxy/ingress/providerProxyShared.js +12 -10
  65. package/dist/provider-proxy/types.d.cts +15 -1
  66. package/dist/provider-proxy/types.d.ts +15 -1
  67. package/dist/provider-proxy.cjs +69 -11
  68. package/dist/provider-proxy.d.cts +254 -8
  69. package/dist/provider-proxy.d.ts +254 -8
  70. package/dist/provider-proxy.js +70 -12
  71. package/dist/{routeResolver-BxOfunbm.d.ts → routeResolver-C0mkkZaM.d.ts} +1 -1
  72. package/dist/{routeResolver-D5OzD0iM.d.cts → routeResolver-CVFE8KKe.d.cts} +1 -1
  73. package/dist/transformer/TransformerChainExecutor.d.cts +2 -0
  74. package/dist/transformer/TransformerChainExecutor.d.ts +2 -0
  75. package/dist/transformer/TransformerService.d.cts +2 -0
  76. package/dist/transformer/TransformerService.d.ts +2 -0
  77. package/dist/transformer/transformers/AnthropicTransformer.cjs +4 -2
  78. package/dist/transformer/transformers/AnthropicTransformer.d.cts +7 -2
  79. package/dist/transformer/transformers/AnthropicTransformer.d.ts +7 -2
  80. package/dist/transformer/transformers/AnthropicTransformer.js +3 -1
  81. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +5 -3
  82. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.cts +2 -0
  83. package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.ts +2 -0
  84. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +4 -2
  85. package/dist/transformer/transformers/GeminiTransformer.cjs +5 -3
  86. package/dist/transformer/transformers/GeminiTransformer.d.cts +4 -2
  87. package/dist/transformer/transformers/GeminiTransformer.d.ts +4 -2
  88. package/dist/transformer/transformers/GeminiTransformer.js +4 -2
  89. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -2
  90. package/dist/transformer/transformers/OpenAIResponseTransformer.d.cts +4 -2
  91. package/dist/transformer/transformers/OpenAIResponseTransformer.d.ts +4 -2
  92. package/dist/transformer/transformers/OpenAIResponseTransformer.js +2 -1
  93. package/dist/transformer/transformers/OpenAITransformer.cjs +3 -2
  94. package/dist/transformer/transformers/OpenAITransformer.d.cts +3 -1
  95. package/dist/transformer/transformers/OpenAITransformer.d.ts +3 -1
  96. package/dist/transformer/transformers/OpenAITransformer.js +2 -1
  97. package/dist/transformer/transformers.cjs +10 -8
  98. package/dist/transformer/transformers.d.cts +2 -0
  99. package/dist/transformer/transformers.d.ts +2 -0
  100. package/dist/transformer/transformers.js +9 -7
  101. package/dist/transformer/types.d.cts +16 -5
  102. package/dist/transformer/types.d.ts +16 -5
  103. package/dist/transformer.cjs +28 -9
  104. package/dist/transformer.d.cts +76 -1
  105. package/dist/transformer.d.ts +76 -1
  106. package/dist/transformer.js +28 -9
  107. package/dist/{types-CqZD77rS.d.ts → types-BB8pxk_3.d.ts} +1 -1
  108. package/dist/{types-gjJ5lJ5n.d.cts → types-C2MwkLah.d.cts} +1 -1
  109. package/dist/usage/usage-recorder.cjs +2 -2
  110. package/dist/usage/usage-recorder.d.cts +6 -0
  111. package/dist/usage/usage-recorder.d.ts +6 -0
  112. package/dist/usage/usage-recorder.js +1 -1
  113. package/dist/usage.cjs +2 -2
  114. package/dist/usage.js +1 -1
  115. package/package.json +1 -1
  116. /package/dist/{chunk-FZ46M34D.cjs → chunk-QVOB2DNX.cjs} +0 -0
  117. /package/dist/{chunk-46RLHI7D.js → chunk-WTQMX2Q6.js} +0 -0
@@ -2,6 +2,16 @@
2
2
 
3
3
  var _chunk5RSZYQJHcjs = require('./chunk-5RSZYQJH.cjs');
4
4
 
5
+
6
+
7
+
8
+ var _chunk77USGNRWcjs = require('./chunk-77USGNRW.cjs');
9
+
10
+
11
+
12
+
13
+ var _chunkAOFWNWLTcjs = require('./chunk-AOFWNWLT.cjs');
14
+
5
15
  // src/transformer/transformers/AnthropicToolHandling.ts
6
16
  function isServerSideTool(tool) {
7
17
  const type = String(tool.type || "");
@@ -18,38 +28,6 @@ function convertAnthropicToolsToOpenAI(tools) {
18
28
  }));
19
29
  }
20
30
 
21
- // src/transformer/transformers/AnthropicTypes.ts
22
- function getThinkLevel(budgetTokens) {
23
- if (!budgetTokens || budgetTokens <= 0) return "none";
24
- if (budgetTokens < 4096) return "low";
25
- if (budgetTokens < 16384) return "medium";
26
- return "high";
27
- }
28
- function formatBase64(data, mediaType) {
29
- if (data.startsWith("data:")) return data;
30
- return `data:${mediaType || "image/png"};base64,${data}`;
31
- }
32
- function flattenToolResultContent(content) {
33
- if (typeof content === "string") return content;
34
- if (content == null) return "";
35
- if (!Array.isArray(content)) return JSON.stringify(content);
36
- const parts = [];
37
- for (const block of content) {
38
- if (typeof block === "string") {
39
- parts.push(block);
40
- continue;
41
- }
42
- if (!block || typeof block !== "object") continue;
43
- const typed = block;
44
- if (typed.type === "image" || typed.type === "image_url") {
45
- parts.push("[image omitted]");
46
- } else if (typeof typed.text === "string") {
47
- parts.push(typed.text);
48
- }
49
- }
50
- return parts.filter((text) => text !== "").join("\n");
51
- }
52
-
53
31
  // src/anthropicMaxTokens.ts
54
32
  var _canonicalmodels = require('@omnicross/contracts/canonical-models');
55
33
  var ANTHROPIC_FALLBACK_MAX_TOKENS = 128e3;
@@ -65,7 +43,7 @@ function resolveAnthropicMaxTokens(model, requested) {
65
43
  }
66
44
 
67
45
  // src/transformer/transformers/AnthropicRequestBuilder.ts
68
- function buildAnthropicRequestBody(request) {
46
+ function buildAnthropicRequestBody(request, provider) {
69
47
  let systemContent;
70
48
  const anthropicMessages = [];
71
49
  for (let i = 0; i < request.messages.length; i++) {
@@ -202,10 +180,18 @@ function buildAnthropicRequestBody(request) {
202
180
  body.tool_choice = { type: "tool", name: request.tool_choice.function.name };
203
181
  }
204
182
  }
205
- if (_optionalChain([request, 'access', _9 => _9.reasoning, 'optionalAccess', _10 => _10.enabled])) {
206
- const budgetMap = { low: 2048, medium: 8192, high: 32768 };
207
- const budget = request.reasoning.max_tokens || budgetMap[request.reasoning.effort || "medium"] || 8192;
208
- body.thinking = { type: "enabled", budget_tokens: budget };
183
+ const reasoningPlan = _chunkAOFWNWLTcjs.resolveReasoningPlan.call(void 0, {
184
+ intent: _chunkAOFWNWLTcjs.extractReasoningIntent.call(void 0, request),
185
+ model: request.model,
186
+ provider,
187
+ target: "anthropic",
188
+ requestMaxTokens: request.max_tokens
189
+ });
190
+ if (_optionalChain([reasoningPlan, 'optionalAccess', _9 => _9.kind]) === "level" && reasoningPlan.enabled) {
191
+ body.thinking = { type: "adaptive" };
192
+ body.output_config = { effort: reasoningPlan.effort };
193
+ } else if (_optionalChain([reasoningPlan, 'optionalAccess', _10 => _10.kind]) === "budget" && reasoningPlan.enabled) {
194
+ body.thinking = { type: "enabled", budget_tokens: reasoningPlan.budgetTokens };
209
195
  body.temperature = 1;
210
196
  }
211
197
  return body;
@@ -380,7 +366,7 @@ function transformAnthropicRequestToUnified(request) {
380
366
  // Claude Code sends tool results as a block ARRAY; stringifying it
381
367
  // fed the model the literal `[{"type":"text","text":"…"}]` envelope
382
368
  // on every tool result.
383
- content: flattenToolResultContent(tool.content),
369
+ content: _chunk77USGNRWcjs.flattenToolResultContent.call(void 0, tool.content),
384
370
  tool_call_id: tool.tool_use_id,
385
371
  cache_control: tool.cache_control
386
372
  });
@@ -397,7 +383,7 @@ function transformAnthropicRequestToUnified(request) {
397
383
  return {
398
384
  type: "image_url",
399
385
  image_url: {
400
- url: imagePart.source.type === "base64" ? formatBase64(imagePart.source.data || "", imagePart.source.media_type) : imagePart.source.url || ""
386
+ url: imagePart.source.type === "base64" ? _chunk77USGNRWcjs.formatBase64.call(void 0, imagePart.source.data || "", imagePart.source.media_type) : imagePart.source.url || ""
401
387
  },
402
388
  media_type: imagePart.source.media_type
403
389
  };
@@ -461,10 +447,18 @@ function transformAnthropicRequestToUnified(request) {
461
447
  result._serverSideTools = serverSideTools;
462
448
  }
463
449
  if (anthropicRequest.thinking) {
464
- result.reasoning = {
465
- effort: getThinkLevel(anthropicRequest.thinking.budget_tokens),
466
- enabled: anthropicRequest.thinking.type === "enabled"
467
- };
450
+ if (anthropicRequest.thinking.type === "disabled") {
451
+ result.reasoning = { effort: "none", enabled: false };
452
+ } else if (anthropicRequest.thinking.type === "adaptive") {
453
+ const effort = _chunkAOFWNWLTcjs.normalizeThinkLevel.call(void 0, _optionalChain([anthropicRequest, 'access', _23 => _23.output_config, 'optionalAccess', _24 => _24.effort]));
454
+ if (effort) result.reasoning = { effort, enabled: effort !== "none" };
455
+ } else {
456
+ result.reasoning = {
457
+ effort: _chunk77USGNRWcjs.getThinkLevel.call(void 0, anthropicRequest.thinking.budget_tokens),
458
+ enabled: true,
459
+ ...typeof anthropicRequest.thinking.budget_tokens === "number" ? { max_tokens: anthropicRequest.thinking.budget_tokens } : {}
460
+ };
461
+ }
468
462
  }
469
463
  if (anthropicRequest.tool_choice) {
470
464
  if (anthropicRequest.tool_choice.type === "tool" && anthropicRequest.tool_choice.name) {
@@ -580,7 +574,7 @@ function convertAnthropicStreamToOpenAI(anthropicStream, logger) {
580
574
  `);
581
575
  } else if (event.content_block.type === "web_search_tool_result") {
582
576
  const searches = event.content_block.content;
583
- if (_optionalChain([searches, 'optionalAccess', _23 => _23.length])) {
577
+ if (_optionalChain([searches, 'optionalAccess', _25 => _25.length])) {
584
578
  const formatted = searches.map((s) => `[${s.title}](${s.url}): ${s.page_content || s.snippet || ""}`).join("\n");
585
579
  const chunk = {
586
580
  id: messageId,
@@ -628,7 +622,7 @@ ${formatted}` },
628
622
  `);
629
623
  }
630
624
  } catch (e) {
631
- _optionalChain([logger, 'optionalAccess', _24 => _24.error, 'call', _25 => _25("Error parsing Anthropic stream event:", e)]);
625
+ _optionalChain([logger, 'optionalAccess', _26 => _26.error, 'call', _27 => _27("Error parsing Anthropic stream event:", e)]);
632
626
  }
633
627
  }
634
628
  }
@@ -760,20 +754,20 @@ data: ${JSON.stringify({
760
754
 
761
755
  `);
762
756
  }
763
- const choice = _optionalChain([chunk, 'access', _26 => _26.choices, 'optionalAccess', _27 => _27[0]]);
757
+ const choice = _optionalChain([chunk, 'access', _28 => _28.choices, 'optionalAccess', _29 => _29[0]]);
764
758
  if (!choice) continue;
765
759
  if (chunk.usage) {
766
760
  stopReasonDelta = {
767
761
  type: "message_delta",
768
762
  delta: { stop_reason: "end_turn", stop_sequence: null },
769
763
  usage: {
770
- input_tokens: (chunk.usage.prompt_tokens || 0) - (_optionalChain([chunk, 'access', _28 => _28.usage, 'access', _29 => _29.prompt_tokens_details, 'optionalAccess', _30 => _30.cached_tokens]) || 0),
764
+ input_tokens: (chunk.usage.prompt_tokens || 0) - (_optionalChain([chunk, 'access', _30 => _30.usage, 'access', _31 => _31.prompt_tokens_details, 'optionalAccess', _32 => _32.cached_tokens]) || 0),
771
765
  output_tokens: chunk.usage.completion_tokens || 0,
772
- cache_read_input_tokens: _optionalChain([chunk, 'access', _31 => _31.usage, 'access', _32 => _32.prompt_tokens_details, 'optionalAccess', _33 => _33.cached_tokens]) || 0
766
+ cache_read_input_tokens: _optionalChain([chunk, 'access', _33 => _33.usage, 'access', _34 => _34.prompt_tokens_details, 'optionalAccess', _35 => _35.cached_tokens]) || 0
773
767
  }
774
768
  };
775
769
  }
776
- if (_optionalChain([choice, 'access', _34 => _34.delta, 'optionalAccess', _35 => _35.thinking])) {
770
+ if (_optionalChain([choice, 'access', _36 => _36.delta, 'optionalAccess', _37 => _37.thinking])) {
777
771
  if (!isThinkingStarted) {
778
772
  const thinkingBlockIndex = assignContentBlockIndex();
779
773
  safeEnqueue(`event: content_block_start
@@ -815,7 +809,7 @@ data: ${JSON.stringify({
815
809
  `);
816
810
  }
817
811
  }
818
- if (_optionalChain([choice, 'access', _36 => _36.delta, 'optionalAccess', _37 => _37.content])) {
812
+ if (_optionalChain([choice, 'access', _38 => _38.delta, 'optionalAccess', _39 => _39.content])) {
819
813
  if (!hasTextContentStarted) {
820
814
  if (currentContentBlockIndex >= 0 && isThinkingStarted) {
821
815
  safeEnqueue(`event: content_block_stop
@@ -847,7 +841,7 @@ data: ${JSON.stringify({
847
841
 
848
842
  `);
849
843
  }
850
- if (_optionalChain([choice, 'access', _38 => _38.delta, 'optionalAccess', _39 => _39.tool_calls])) {
844
+ if (_optionalChain([choice, 'access', _40 => _40.delta, 'optionalAccess', _41 => _41.tool_calls])) {
851
845
  for (const toolCall of choice.delta.tool_calls) {
852
846
  const toolCallIndex = _nullishCoalesce(toolCall.index, () => ( 0));
853
847
  if (!toolCallIndexToContentBlockIndex.has(toolCallIndex)) {
@@ -870,7 +864,7 @@ data: ${JSON.stringify({
870
864
  content_block: {
871
865
  type: "tool_use",
872
866
  id: toolCall.id || `call_${Date.now()}_${toolCallIndex}`,
873
- name: _optionalChain([toolCall, 'access', _40 => _40.function, 'optionalAccess', _41 => _41.name]) || `tool_${toolCallIndex}`,
867
+ name: _optionalChain([toolCall, 'access', _42 => _42.function, 'optionalAccess', _43 => _43.name]) || `tool_${toolCallIndex}`,
874
868
  input: {}
875
869
  }
876
870
  })}
@@ -878,7 +872,7 @@ data: ${JSON.stringify({
878
872
  `);
879
873
  currentContentBlockIndex = newBlockIndex;
880
874
  }
881
- if (_optionalChain([toolCall, 'access', _42 => _42.function, 'optionalAccess', _43 => _43.arguments])) {
875
+ if (_optionalChain([toolCall, 'access', _44 => _44.function, 'optionalAccess', _45 => _45.arguments])) {
882
876
  const blockIndex = toolCallIndexToContentBlockIndex.get(toolCallIndex);
883
877
  if (blockIndex !== void 0) {
884
878
  safeEnqueue(`event: content_block_delta
@@ -907,14 +901,14 @@ data: ${JSON.stringify({
907
901
  stop_sequence: null
908
902
  },
909
903
  usage: {
910
- input_tokens: (_optionalChain([chunk, 'access', _44 => _44.usage, 'optionalAccess', _45 => _45.prompt_tokens]) || 0) - (_optionalChain([chunk, 'access', _46 => _46.usage, 'optionalAccess', _47 => _47.prompt_tokens_details, 'optionalAccess', _48 => _48.cached_tokens]) || 0),
911
- output_tokens: _optionalChain([chunk, 'access', _49 => _49.usage, 'optionalAccess', _50 => _50.completion_tokens]) || 0,
912
- cache_read_input_tokens: _optionalChain([chunk, 'access', _51 => _51.usage, 'optionalAccess', _52 => _52.prompt_tokens_details, 'optionalAccess', _53 => _53.cached_tokens]) || 0
904
+ input_tokens: (_optionalChain([chunk, 'access', _46 => _46.usage, 'optionalAccess', _47 => _47.prompt_tokens]) || 0) - (_optionalChain([chunk, 'access', _48 => _48.usage, 'optionalAccess', _49 => _49.prompt_tokens_details, 'optionalAccess', _50 => _50.cached_tokens]) || 0),
905
+ output_tokens: _optionalChain([chunk, 'access', _51 => _51.usage, 'optionalAccess', _52 => _52.completion_tokens]) || 0,
906
+ cache_read_input_tokens: _optionalChain([chunk, 'access', _53 => _53.usage, 'optionalAccess', _54 => _54.prompt_tokens_details, 'optionalAccess', _55 => _55.cached_tokens]) || 0
913
907
  }
914
908
  };
915
909
  }
916
910
  } catch (e) {
917
- _optionalChain([logger, 'optionalAccess', _54 => _54.error, 'call', _55 => _55("Error parsing stream chunk:", e)]);
911
+ _optionalChain([logger, 'optionalAccess', _56 => _56.error, 'call', _57 => _57("Error parsing stream chunk:", e)]);
918
912
  }
919
913
  }
920
914
  }
@@ -938,7 +932,7 @@ var AnthropicTransformer = (_class = class {
938
932
  __init2() {this.endPoint = "/v1/messages"}
939
933
 
940
934
  constructor(options) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
941
- this.useBearer = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _56 => _56.UseBearer]), () => ( false));
935
+ this.useBearer = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _58 => _58.UseBearer]), () => ( false));
942
936
  }
943
937
  /**
944
938
  * Handle authentication - Anthropic uses x-api-key header
@@ -994,8 +988,8 @@ var AnthropicTransformer = (_class = class {
994
988
  * This is the reverse of transformRequestOut — converts OpenAI/unified format
995
989
  * to Anthropic's expected request body structure.
996
990
  */
997
- async transformRequestIn(request, _provider, _context) {
998
- return buildAnthropicRequestBody(request);
991
+ async transformRequestIn(request, provider, _context) {
992
+ return buildAnthropicRequestBody(request, provider);
999
993
  }
1000
994
  /**
1001
995
  * Transform Anthropic response to OpenAI/unified format
@@ -172,6 +172,37 @@ var ApiKeyPoolService = (_class = class {
172
172
  const keys = await this.getAllKeys(providerId);
173
173
  return keys.length > 0;
174
174
  }
175
+ /** Secret-free strict preflight for a named provider key. */
176
+ async hasUsableKey(providerId, keyId) {
177
+ const keys = await this.getAvailableKeys(providerId);
178
+ return keys.some((key) => key.id === keyId);
179
+ }
180
+ /** Secret-free existence/availability split for strict Route Lease targets. */
181
+ async getKeyAvailability(providerId, keyId) {
182
+ const all = await this.getAllKeys(providerId);
183
+ if (!all.some((key) => key.id === keyId)) return "not-found";
184
+ return (await this.getAvailableKeys(providerId)).some((key) => key.id === keyId) ? "usable" : "unavailable";
185
+ }
186
+ /** Secret-free preflight for at least one enabled, non-cooling pool key. */
187
+ async hasUsableKeys(providerId) {
188
+ return (await this.getAvailableKeys(providerId)).length > 0;
189
+ }
190
+ /** Preserve pool exhaustion and its earliest safe retry horizon for Route Lease. */
191
+ async getPoolAvailability(providerId) {
192
+ const all = await this.getAllKeys(providerId);
193
+ if (all.length === 0) return { outcome: "empty" };
194
+ if ((await this.getAvailableKeys(providerId)).length > 0) return { outcome: "usable" };
195
+ const now = Date.now();
196
+ const coolingUntil = all.filter((key) => key.enabled).map((key) => _nullishCoalesce(_optionalChain([this, 'access', _ => _.cooldowns, 'access', _2 => _2.get, 'call', _3 => _3(key.id), 'optionalAccess', _4 => _4.until]), () => ( 0))).filter((until) => until > now);
197
+ if (coolingUntil.length > 0) {
198
+ const earliest = Math.min(...coolingUntil);
199
+ return {
200
+ outcome: "exhausted",
201
+ retryAfterSeconds: Math.max(1, Math.min(3600, Math.ceil((earliest - now) / 1e3)))
202
+ };
203
+ }
204
+ return { outcome: "unavailable" };
205
+ }
175
206
  /**
176
207
  * Get the live (in-memory) rate-limit cooldown health for a provider's keys.
177
208
  *
@@ -240,7 +271,7 @@ var ApiKeyPoolService = (_class = class {
240
271
  */
241
272
  applyCooldown(keyId, providerId, statusCode) {
242
273
  const current = this.cooldowns.get(keyId);
243
- const errors = (_nullishCoalesce(_optionalChain([current, 'optionalAccess', _ => _.errors]), () => ( 0))) + 1;
274
+ const errors = (_nullishCoalesce(_optionalChain([current, 'optionalAccess', _5 => _5.errors]), () => ( 0))) + 1;
244
275
  const cooldownMs = Math.min(
245
276
  this.DEFAULT_COOLDOWN_MS * Math.pow(this.COOLDOWN_MULTIPLIER, errors - 1),
246
277
  this.MAX_COOLDOWN_MS
@@ -20,6 +20,14 @@ interface KeyHealthEntry {
20
20
  }
21
21
  /** Provider-scoped map of keyId → live cooldown health (cooling keys only). */
22
22
  type KeyHealthMap = Record<string, KeyHealthEntry>;
23
+ type ProviderKeyPoolAvailability = {
24
+ readonly outcome: 'usable';
25
+ } | {
26
+ readonly outcome: 'empty' | 'unavailable';
27
+ } | {
28
+ readonly outcome: 'exhausted';
29
+ readonly retryAfterSeconds: number;
30
+ };
23
31
  /** Function type for loading API keys from the database */
24
32
  type ApiKeysLoader = (providerId: string) => Promise<ApiKeyEntry[]>;
25
33
  /** Function type for disabling a key in the database (on auth failure) */
@@ -111,6 +119,14 @@ declare class ApiKeyPoolService {
111
119
  * Check if a provider has any keys in the pool.
112
120
  */
113
121
  hasKeys(providerId: string): Promise<boolean>;
122
+ /** Secret-free strict preflight for a named provider key. */
123
+ hasUsableKey(providerId: string, keyId: string): Promise<boolean>;
124
+ /** Secret-free existence/availability split for strict Route Lease targets. */
125
+ getKeyAvailability(providerId: string, keyId: string): Promise<'usable' | 'unavailable' | 'not-found'>;
126
+ /** Secret-free preflight for at least one enabled, non-cooling pool key. */
127
+ hasUsableKeys(providerId: string): Promise<boolean>;
128
+ /** Preserve pool exhaustion and its earliest safe retry horizon for Route Lease. */
129
+ getPoolAvailability(providerId: string): Promise<ProviderKeyPoolAvailability>;
114
130
  /**
115
131
  * Get the live (in-memory) rate-limit cooldown health for a provider's keys.
116
132
  *
@@ -153,4 +169,4 @@ declare class ApiKeyPoolService {
153
169
  private cleanupExpiredCooldowns;
154
170
  }
155
171
 
156
- export { type ApiKeyAutoDisabler, type ApiKeyDisabler, ApiKeyPoolService, type ApiKeyResolver, type ApiKeysLoader, type KeyHealthEntry, type KeyHealthMap };
172
+ export { type ApiKeyAutoDisabler, type ApiKeyDisabler, ApiKeyPoolService, type ApiKeyResolver, type ApiKeysLoader, type KeyHealthEntry, type KeyHealthMap, type ProviderKeyPoolAvailability };
@@ -20,6 +20,14 @@ interface KeyHealthEntry {
20
20
  }
21
21
  /** Provider-scoped map of keyId → live cooldown health (cooling keys only). */
22
22
  type KeyHealthMap = Record<string, KeyHealthEntry>;
23
+ type ProviderKeyPoolAvailability = {
24
+ readonly outcome: 'usable';
25
+ } | {
26
+ readonly outcome: 'empty' | 'unavailable';
27
+ } | {
28
+ readonly outcome: 'exhausted';
29
+ readonly retryAfterSeconds: number;
30
+ };
23
31
  /** Function type for loading API keys from the database */
24
32
  type ApiKeysLoader = (providerId: string) => Promise<ApiKeyEntry[]>;
25
33
  /** Function type for disabling a key in the database (on auth failure) */
@@ -111,6 +119,14 @@ declare class ApiKeyPoolService {
111
119
  * Check if a provider has any keys in the pool.
112
120
  */
113
121
  hasKeys(providerId: string): Promise<boolean>;
122
+ /** Secret-free strict preflight for a named provider key. */
123
+ hasUsableKey(providerId: string, keyId: string): Promise<boolean>;
124
+ /** Secret-free existence/availability split for strict Route Lease targets. */
125
+ getKeyAvailability(providerId: string, keyId: string): Promise<'usable' | 'unavailable' | 'not-found'>;
126
+ /** Secret-free preflight for at least one enabled, non-cooling pool key. */
127
+ hasUsableKeys(providerId: string): Promise<boolean>;
128
+ /** Preserve pool exhaustion and its earliest safe retry horizon for Route Lease. */
129
+ getPoolAvailability(providerId: string): Promise<ProviderKeyPoolAvailability>;
114
130
  /**
115
131
  * Get the live (in-memory) rate-limit cooldown health for a provider's keys.
116
132
  *
@@ -153,4 +169,4 @@ declare class ApiKeyPoolService {
153
169
  private cleanupExpiredCooldowns;
154
170
  }
155
171
 
156
- export { type ApiKeyAutoDisabler, type ApiKeyDisabler, ApiKeyPoolService, type ApiKeyResolver, type ApiKeysLoader, type KeyHealthEntry, type KeyHealthMap };
172
+ export { type ApiKeyAutoDisabler, type ApiKeyDisabler, ApiKeyPoolService, type ApiKeyResolver, type ApiKeysLoader, type KeyHealthEntry, type KeyHealthMap, type ProviderKeyPoolAvailability };
@@ -172,6 +172,37 @@ var ApiKeyPoolService = class {
172
172
  const keys = await this.getAllKeys(providerId);
173
173
  return keys.length > 0;
174
174
  }
175
+ /** Secret-free strict preflight for a named provider key. */
176
+ async hasUsableKey(providerId, keyId) {
177
+ const keys = await this.getAvailableKeys(providerId);
178
+ return keys.some((key) => key.id === keyId);
179
+ }
180
+ /** Secret-free existence/availability split for strict Route Lease targets. */
181
+ async getKeyAvailability(providerId, keyId) {
182
+ const all = await this.getAllKeys(providerId);
183
+ if (!all.some((key) => key.id === keyId)) return "not-found";
184
+ return (await this.getAvailableKeys(providerId)).some((key) => key.id === keyId) ? "usable" : "unavailable";
185
+ }
186
+ /** Secret-free preflight for at least one enabled, non-cooling pool key. */
187
+ async hasUsableKeys(providerId) {
188
+ return (await this.getAvailableKeys(providerId)).length > 0;
189
+ }
190
+ /** Preserve pool exhaustion and its earliest safe retry horizon for Route Lease. */
191
+ async getPoolAvailability(providerId) {
192
+ const all = await this.getAllKeys(providerId);
193
+ if (all.length === 0) return { outcome: "empty" };
194
+ if ((await this.getAvailableKeys(providerId)).length > 0) return { outcome: "usable" };
195
+ const now = Date.now();
196
+ const coolingUntil = all.filter((key) => key.enabled).map((key) => this.cooldowns.get(key.id)?.until ?? 0).filter((until) => until > now);
197
+ if (coolingUntil.length > 0) {
198
+ const earliest = Math.min(...coolingUntil);
199
+ return {
200
+ outcome: "exhausted",
201
+ retryAfterSeconds: Math.max(1, Math.min(3600, Math.ceil((earliest - now) / 1e3)))
202
+ };
203
+ }
204
+ return { outcome: "unavailable" };
205
+ }
175
206
  /**
176
207
  * Get the live (in-memory) rate-limit cooldown health for a provider's keys.
177
208
  *
@@ -1,17 +1,17 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk4BB343BIcjs = require('../chunk-4BB343BI.cjs');
3
+ var _chunkXELFM7KLcjs = require('../chunk-XELFM7KL.cjs');
4
4
  require('../chunk-HQP3K7PU.cjs');
5
- require('../chunk-FZ46M34D.cjs');
6
- require('../chunk-2Z4XM3H5.cjs');
7
- require('../chunk-OXHNSZ53.cjs');
8
- require('../chunk-V4TXMEJS.cjs');
9
- require('../chunk-OVQBNVSV.cjs');
5
+ require('../chunk-QVOB2DNX.cjs');
6
+ require('../chunk-P7EM6BND.cjs');
7
+ require('../chunk-ZQQUD66M.cjs');
8
+ require('../chunk-5LNYGCIW.cjs');
9
+ require('../chunk-CMVXX7ON.cjs');
10
10
  require('../chunk-5RSZYQJH.cjs');
11
- require('../chunk-OF3BECU2.cjs');
11
+ require('../chunk-56QD3YW6.cjs');
12
12
  require('../chunk-EYZYXJTJ.cjs');
13
13
  require('../chunk-2E42SAW3.cjs');
14
- require('../chunk-OJGQKHN5.cjs');
14
+ require('../chunk-EPN67EGP.cjs');
15
15
  require('../chunk-IIRPUVPH.cjs');
16
16
  require('../chunk-GBHYAGX3.cjs');
17
17
  require('../chunk-3OPYJG76.cjs');
@@ -43,8 +43,10 @@ require('../chunk-FCR77GYM.cjs');
43
43
  require('../chunk-AEOZIDEB.cjs');
44
44
  require('../chunk-XSVNC2UD.cjs');
45
45
  require('../chunk-GDIXXKF2.cjs');
46
- require('../chunk-OKMJLEXX.cjs');
47
- require('../chunk-KBM2W6UY.cjs');
46
+ require('../chunk-OC6DOOFX.cjs');
47
+ require('../chunk-RICPANBY.cjs');
48
+ require('../chunk-77USGNRW.cjs');
49
+ require('../chunk-AOFWNWLT.cjs');
48
50
  require('../chunk-RJUONLUQ.cjs');
49
51
  require('../chunk-235MXAGX.cjs');
50
52
  require('../chunk-HVBBDBS3.cjs');
@@ -55,4 +57,4 @@ require('../chunk-GMMT7RVN.cjs');
55
57
  require('../chunk-UNEFIWXI.cjs');
56
58
 
57
59
 
58
- exports.CompletionService = _chunk4BB343BIcjs.CompletionService;
60
+ exports.CompletionService = _chunkXELFM7KLcjs.CompletionService;
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  CompletionService
3
- } from "../chunk-E3COOKUP.js";
3
+ } from "../chunk-CQIJCPMF.js";
4
4
  import "../chunk-VVEHS2LI.js";
5
- import "../chunk-46RLHI7D.js";
6
- import "../chunk-MYYR3HZL.js";
7
- import "../chunk-PEGTIPB3.js";
8
- import "../chunk-LVUCAWMK.js";
9
- import "../chunk-32O35CIF.js";
5
+ import "../chunk-WTQMX2Q6.js";
6
+ import "../chunk-NGYOO5TO.js";
7
+ import "../chunk-HKB656B4.js";
8
+ import "../chunk-55FMGZ3L.js";
9
+ import "../chunk-45FHEOKW.js";
10
10
  import "../chunk-FU7EAR73.js";
11
- import "../chunk-LB6EBS6Y.js";
11
+ import "../chunk-CCVRRJOX.js";
12
12
  import "../chunk-7VU7V2E4.js";
13
13
  import "../chunk-FXR6N3SR.js";
14
- import "../chunk-SOO562NM.js";
14
+ import "../chunk-UAPBLNN2.js";
15
15
  import "../chunk-WNKWAEUR.js";
16
16
  import "../chunk-MZNPGW5Q.js";
17
17
  import "../chunk-DK4A7DLE.js";
@@ -43,8 +43,10 @@ import "../chunk-K5NM7VAH.js";
43
43
  import "../chunk-WNY4WMRF.js";
44
44
  import "../chunk-OZFM4X3S.js";
45
45
  import "../chunk-5NJLQ6T6.js";
46
- import "../chunk-N5T4M4GU.js";
47
- import "../chunk-TOVPMMHM.js";
46
+ import "../chunk-2UTGX6FM.js";
47
+ import "../chunk-S3DYFEBE.js";
48
+ import "../chunk-WYVGULTQ.js";
49
+ import "../chunk-N2EIM2XJ.js";
48
50
  import "../chunk-RJ5ZGNI3.js";
49
51
  import "../chunk-3WD4HTR2.js";
50
52
  import "../chunk-MKF46GNZ.js";
@@ -9,18 +9,18 @@
9
9
 
10
10
 
11
11
 
12
- var _chunk4BB343BIcjs = require('./chunk-4BB343BI.cjs');
12
+ var _chunkXELFM7KLcjs = require('./chunk-XELFM7KL.cjs');
13
13
  require('./chunk-HQP3K7PU.cjs');
14
- require('./chunk-FZ46M34D.cjs');
15
- require('./chunk-2Z4XM3H5.cjs');
16
- require('./chunk-OXHNSZ53.cjs');
17
- require('./chunk-V4TXMEJS.cjs');
18
- require('./chunk-OVQBNVSV.cjs');
14
+ require('./chunk-QVOB2DNX.cjs');
15
+ require('./chunk-P7EM6BND.cjs');
16
+ require('./chunk-ZQQUD66M.cjs');
17
+ require('./chunk-5LNYGCIW.cjs');
18
+ require('./chunk-CMVXX7ON.cjs');
19
19
  require('./chunk-5RSZYQJH.cjs');
20
- require('./chunk-OF3BECU2.cjs');
20
+ require('./chunk-56QD3YW6.cjs');
21
21
  require('./chunk-EYZYXJTJ.cjs');
22
22
  require('./chunk-2E42SAW3.cjs');
23
- require('./chunk-OJGQKHN5.cjs');
23
+ require('./chunk-EPN67EGP.cjs');
24
24
  require('./chunk-IIRPUVPH.cjs');
25
25
  require('./chunk-GBHYAGX3.cjs');
26
26
  require('./chunk-3OPYJG76.cjs');
@@ -64,8 +64,10 @@ require('./chunk-FCR77GYM.cjs');
64
64
  require('./chunk-AEOZIDEB.cjs');
65
65
  require('./chunk-XSVNC2UD.cjs');
66
66
  require('./chunk-GDIXXKF2.cjs');
67
- require('./chunk-OKMJLEXX.cjs');
68
- require('./chunk-KBM2W6UY.cjs');
67
+ require('./chunk-OC6DOOFX.cjs');
68
+ require('./chunk-RICPANBY.cjs');
69
+ require('./chunk-77USGNRW.cjs');
70
+ require('./chunk-AOFWNWLT.cjs');
69
71
  require('./chunk-RJUONLUQ.cjs');
70
72
  require('./chunk-235MXAGX.cjs');
71
73
  require('./chunk-HVBBDBS3.cjs');
@@ -110,4 +112,4 @@ require('./chunk-UNEFIWXI.cjs');
110
112
 
111
113
 
112
114
 
113
- exports.BuiltinToolExecutor = _chunkNZYN7C3Pcjs.BuiltinToolExecutor; exports.CompletionService = _chunk4BB343BIcjs.CompletionService; exports.NATIVE_SEARCH_TOOL_NAMES = _chunkGMMT7RVNcjs.NATIVE_SEARCH_TOOL_NAMES; exports.addOpenRouterProviderToRequest = _chunk4BB343BIcjs.addOpenRouterProviderToRequest; exports.applyAugmentation = _chunkJMJBSACDcjs.applyAugmentation; exports.attachStreamEventBuffer = _chunk4BB343BIcjs.attach; exports.buildAnthropicApiUrl = _chunkA2YMUCBTcjs.buildAnthropicApiUrl; exports.buildAzureOpenAIApiUrl = _chunkA2YMUCBTcjs.buildAzureOpenAIApiUrl; exports.buildGeminiApiUrl = _chunkA2YMUCBTcjs.buildGeminiApiUrl; exports.buildNativeSearchAugmentation = _chunkJMJBSACDcjs.buildNativeSearchAugmentation; exports.buildOpenAIApiUrl = _chunkA2YMUCBTcjs.buildOpenAIApiUrl; exports.buildOpenAIResponseApiUrl = _chunkA2YMUCBTcjs.buildOpenAIResponseApiUrl; exports.buildProviderApiUrl = _chunkA2YMUCBTcjs.buildProviderApiUrl; exports.convertMessageToAnthropic = _chunk4BB343BIcjs.convertMessageToAnthropic; exports.convertMessageToGemini = _chunk4BB343BIcjs.convertMessageToGemini; exports.convertMessageToOpenAI = _chunk4BB343BIcjs.convertMessageToOpenAI; exports.detectNativeSearch = _chunkJMJBSACDcjs.detectNativeSearch; exports.emitStreamEvent = _chunk4BB343BIcjs.emit; exports.getBuiltinSearchTools = _chunkNZYN7C3Pcjs.getBuiltinSearchTools; exports.getOpenRouterProviderConfig = _chunk4BB343BIcjs.getOpenRouterProviderConfig; exports.getProviderHeaders = _chunkQ27JY5RGcjs.getProviderHeaders; exports.normalizeAzureEndpoint = _chunkA2YMUCBTcjs.normalizeAzureEndpoint; exports.registerStreamEventBuffer = _chunk4BB343BIcjs.register; exports.releaseStreamEventBuffer = _chunk4BB343BIcjs.release; exports.resolveApiFormat = _chunkA2YMUCBTcjs.resolveApiFormat; exports.resolveProviderEndpoint = _chunkA2YMUCBTcjs.resolveProviderEndpoint;
115
+ exports.BuiltinToolExecutor = _chunkNZYN7C3Pcjs.BuiltinToolExecutor; exports.CompletionService = _chunkXELFM7KLcjs.CompletionService; exports.NATIVE_SEARCH_TOOL_NAMES = _chunkGMMT7RVNcjs.NATIVE_SEARCH_TOOL_NAMES; exports.addOpenRouterProviderToRequest = _chunkXELFM7KLcjs.addOpenRouterProviderToRequest; exports.applyAugmentation = _chunkJMJBSACDcjs.applyAugmentation; exports.attachStreamEventBuffer = _chunkXELFM7KLcjs.attach; exports.buildAnthropicApiUrl = _chunkA2YMUCBTcjs.buildAnthropicApiUrl; exports.buildAzureOpenAIApiUrl = _chunkA2YMUCBTcjs.buildAzureOpenAIApiUrl; exports.buildGeminiApiUrl = _chunkA2YMUCBTcjs.buildGeminiApiUrl; exports.buildNativeSearchAugmentation = _chunkJMJBSACDcjs.buildNativeSearchAugmentation; exports.buildOpenAIApiUrl = _chunkA2YMUCBTcjs.buildOpenAIApiUrl; exports.buildOpenAIResponseApiUrl = _chunkA2YMUCBTcjs.buildOpenAIResponseApiUrl; exports.buildProviderApiUrl = _chunkA2YMUCBTcjs.buildProviderApiUrl; exports.convertMessageToAnthropic = _chunkXELFM7KLcjs.convertMessageToAnthropic; exports.convertMessageToGemini = _chunkXELFM7KLcjs.convertMessageToGemini; exports.convertMessageToOpenAI = _chunkXELFM7KLcjs.convertMessageToOpenAI; exports.detectNativeSearch = _chunkJMJBSACDcjs.detectNativeSearch; exports.emitStreamEvent = _chunkXELFM7KLcjs.emit; exports.getBuiltinSearchTools = _chunkNZYN7C3Pcjs.getBuiltinSearchTools; exports.getOpenRouterProviderConfig = _chunkXELFM7KLcjs.getOpenRouterProviderConfig; exports.getProviderHeaders = _chunkQ27JY5RGcjs.getProviderHeaders; exports.normalizeAzureEndpoint = _chunkA2YMUCBTcjs.normalizeAzureEndpoint; exports.registerStreamEventBuffer = _chunkXELFM7KLcjs.register; exports.releaseStreamEventBuffer = _chunkXELFM7KLcjs.release; exports.resolveApiFormat = _chunkA2YMUCBTcjs.resolveApiFormat; exports.resolveProviderEndpoint = _chunkA2YMUCBTcjs.resolveProviderEndpoint;
@@ -9,18 +9,18 @@ import {
9
9
  getOpenRouterProviderConfig,
10
10
  register,
11
11
  release
12
- } from "./chunk-E3COOKUP.js";
12
+ } from "./chunk-CQIJCPMF.js";
13
13
  import "./chunk-VVEHS2LI.js";
14
- import "./chunk-46RLHI7D.js";
15
- import "./chunk-MYYR3HZL.js";
16
- import "./chunk-PEGTIPB3.js";
17
- import "./chunk-LVUCAWMK.js";
18
- import "./chunk-32O35CIF.js";
14
+ import "./chunk-WTQMX2Q6.js";
15
+ import "./chunk-NGYOO5TO.js";
16
+ import "./chunk-HKB656B4.js";
17
+ import "./chunk-55FMGZ3L.js";
18
+ import "./chunk-45FHEOKW.js";
19
19
  import "./chunk-FU7EAR73.js";
20
- import "./chunk-LB6EBS6Y.js";
20
+ import "./chunk-CCVRRJOX.js";
21
21
  import "./chunk-7VU7V2E4.js";
22
22
  import "./chunk-FXR6N3SR.js";
23
- import "./chunk-SOO562NM.js";
23
+ import "./chunk-UAPBLNN2.js";
24
24
  import "./chunk-WNKWAEUR.js";
25
25
  import "./chunk-MZNPGW5Q.js";
26
26
  import "./chunk-DK4A7DLE.js";
@@ -64,8 +64,10 @@ import "./chunk-K5NM7VAH.js";
64
64
  import "./chunk-WNY4WMRF.js";
65
65
  import "./chunk-OZFM4X3S.js";
66
66
  import "./chunk-5NJLQ6T6.js";
67
- import "./chunk-N5T4M4GU.js";
68
- import "./chunk-TOVPMMHM.js";
67
+ import "./chunk-2UTGX6FM.js";
68
+ import "./chunk-S3DYFEBE.js";
69
+ import "./chunk-WYVGULTQ.js";
70
+ import "./chunk-N2EIM2XJ.js";
69
71
  import "./chunk-RJ5ZGNI3.js";
70
72
  import "./chunk-3WD4HTR2.js";
71
73
  import "./chunk-MKF46GNZ.js";