@omnicross/core 0.1.10 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +7 -0
  2. package/dist/{BuiltinToolExecutor-CS2WpXhM.d.cts → BuiltinToolExecutor-BHgH-EaZ.d.cts} +25 -2
  3. package/dist/{BuiltinToolExecutor-BluWyeob.d.ts → BuiltinToolExecutor-Bi1LmiTP.d.ts} +25 -2
  4. package/dist/{CompletionService-kNA17cfI.d.cts → CompletionService-BniP7j88.d.cts} +2 -2
  5. package/dist/{CompletionService-C3BX0Ovy.d.ts → CompletionService-BqrKPwfA.d.ts} +2 -2
  6. package/dist/{ProviderProxy-QdwNV6l1.d.cts → ProviderProxy-Bz_nkOwq.d.cts} +1 -1
  7. package/dist/{ProviderProxy--ROec6VI.d.ts → ProviderProxy-Ckr6oTrE.d.ts} +1 -1
  8. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +6 -6
  9. package/dist/auth/GeminiCodeAssistProjectResolver.js +4 -4
  10. package/dist/{chunk-NGYOO5TO.js → chunk-2C3TTBS7.js} +7 -7
  11. package/dist/{chunk-QUSEZNYS.cjs → chunk-32SRZFFP.cjs} +4 -1
  12. package/dist/chunk-4JOU54M5.js +200 -0
  13. package/dist/{chunk-2UTGX6FM.js → chunk-4VVCXVB7.js} +1 -1
  14. package/dist/{chunk-RJUONLUQ.cjs → chunk-4Z3ZLLC2.cjs} +14 -8
  15. package/dist/chunk-6DDYNS2B.cjs +384 -0
  16. package/dist/{chunk-GXEZ2R3E.js → chunk-6OKXH2TW.js} +18 -7
  17. package/dist/{chunk-YWL7YZWS.cjs → chunk-7LRTPNFL.cjs} +5 -0
  18. package/dist/{chunk-CCVRRJOX.js → chunk-7PIUVCKK.js} +9 -2
  19. package/dist/chunk-7RJI3NDI.cjs +236 -0
  20. package/dist/{chunk-IIRPUVPH.cjs → chunk-7ZHBN75N.cjs} +3 -1
  21. package/dist/chunk-D4WNI6BR.cjs +386 -0
  22. package/dist/chunk-DBBR6RHF.js +236 -0
  23. package/dist/chunk-E4QHVXV5.cjs +118 -0
  24. package/dist/{chunk-HKB656B4.js → chunk-EUZRH544.js} +55 -287
  25. package/dist/{chunk-WNKWAEUR.js → chunk-EYGBM2VC.js} +3 -1
  26. package/dist/{chunk-UWDW6PN3.cjs → chunk-FX325I5Q.cjs} +20 -9
  27. package/dist/chunk-G4CZIUIB.cjs +200 -0
  28. package/dist/chunk-HCOQQAZE.cjs +123 -0
  29. package/dist/chunk-HL2YSPL7.cjs +673 -0
  30. package/dist/{chunk-55FMGZ3L.js → chunk-HN74IGEO.js} +1 -1
  31. package/dist/{chunk-ZY6KU6P3.js → chunk-HOMUGKHR.js} +8 -5
  32. package/dist/{chunk-AOFWNWLT.cjs → chunk-IUL4VWNU.cjs} +22 -1
  33. package/dist/{chunk-5LNYGCIW.cjs → chunk-KIQ2HA2A.cjs} +5 -5
  34. package/dist/{chunk-MUHWHQVM.cjs → chunk-KQBLZMP6.cjs} +4 -3
  35. package/dist/chunk-LFEH7CEO.js +384 -0
  36. package/dist/chunk-LFPQ2OVH.js +386 -0
  37. package/dist/{chunk-FEBAQI5A.js → chunk-LKDAN4D7.js} +6363 -1350
  38. package/dist/chunk-LQYS2N47.js +3923 -0
  39. package/dist/{chunk-NZYN7C3P.cjs → chunk-MPXOKQJP.cjs} +53 -53
  40. package/dist/chunk-MZEGQSKQ.js +118 -0
  41. package/dist/chunk-N76KU6F5.js +123 -0
  42. package/dist/chunk-NLUOTJWB.js +673 -0
  43. package/dist/{chunk-CMVXX7ON.cjs → chunk-NOITAVHA.cjs} +114 -58
  44. package/dist/{chunk-Q27JY5RG.cjs → chunk-OIKREZVQ.cjs} +7 -4
  45. package/dist/{chunk-ZQQUD66M.cjs → chunk-POUTD5AM.cjs} +63 -295
  46. package/dist/{chunk-6D4W22P4.js → chunk-QIIAMBTM.js} +4 -1
  47. package/dist/{chunk-56QD3YW6.cjs → chunk-QWNUOR7F.cjs} +11 -4
  48. package/dist/{chunk-S3DYFEBE.js → chunk-R4VCO2CB.js} +10 -1
  49. package/dist/{chunk-4VZX5F4T.cjs → chunk-T6NWPIYZ.cjs} +5 -2
  50. package/dist/{chunk-EBLFCNPY.js → chunk-U47LQXPB.js} +5 -2
  51. package/dist/chunk-UPQIWJIE.cjs +3923 -0
  52. package/dist/{chunk-N7OOJI5V.js → chunk-V2UKUTJ3.js} +5 -0
  53. package/dist/{chunk-45FHEOKW.js → chunk-V53ZEFXC.js} +92 -36
  54. package/dist/{chunk-RJ5ZGNI3.js → chunk-VL5TUDTM.js} +8 -2
  55. package/dist/{chunk-TIT74RIL.cjs → chunk-VSYQ6XYN.cjs} +6837 -1824
  56. package/dist/{chunk-OC6DOOFX.cjs → chunk-VXRTQZF2.cjs} +5 -5
  57. package/dist/{chunk-RICPANBY.cjs → chunk-WX2E2G7H.cjs} +13 -4
  58. package/dist/{chunk-DE2SRBFZ.js → chunk-X335TJNS.js} +4 -3
  59. package/dist/{chunk-CDHS2QDC.js → chunk-Y4CRNHJO.js} +53 -53
  60. package/dist/{chunk-P7EM6BND.cjs → chunk-ZAPN7XA6.cjs} +10 -10
  61. package/dist/{chunk-N2EIM2XJ.js → chunk-ZLNHPUFA.js} +22 -1
  62. package/dist/completion/BuiltinToolExecutor.cjs +2 -2
  63. package/dist/completion/BuiltinToolExecutor.d.cts +3 -1
  64. package/dist/completion/BuiltinToolExecutor.d.ts +3 -1
  65. package/dist/completion/BuiltinToolExecutor.js +1 -1
  66. package/dist/completion/CompletionService.cjs +32 -28
  67. package/dist/completion/CompletionService.d.cts +7 -3
  68. package/dist/completion/CompletionService.d.ts +7 -3
  69. package/dist/completion/CompletionService.js +31 -27
  70. package/dist/completion.cjs +40 -36
  71. package/dist/completion.d.cts +7 -3
  72. package/dist/completion.d.ts +7 -3
  73. package/dist/completion.js +39 -35
  74. package/dist/egress-I46O_p5L.d.cts +126 -0
  75. package/dist/egress-I46O_p5L.d.ts +126 -0
  76. package/dist/frontends-Doz0RaWu.d.cts +97 -0
  77. package/dist/frontends-Doz0RaWu.d.ts +97 -0
  78. package/dist/image-generation.cjs +52 -0
  79. package/dist/image-generation.d.cts +96 -0
  80. package/dist/image-generation.d.ts +96 -0
  81. package/dist/image-generation.js +52 -0
  82. package/dist/index.cjs +142 -32
  83. package/dist/index.d.cts +16 -8
  84. package/dist/index.d.ts +16 -8
  85. package/dist/index.js +159 -49
  86. package/dist/openai-operation.cjs +18 -0
  87. package/dist/openai-operation.d.cts +22 -0
  88. package/dist/openai-operation.d.ts +22 -0
  89. package/dist/openai-operation.js +18 -0
  90. package/dist/outbound-api/auditCapture.cjs +3 -3
  91. package/dist/outbound-api/auditCapture.d.cts +13 -2
  92. package/dist/outbound-api/auditCapture.d.ts +13 -2
  93. package/dist/outbound-api/auditCapture.js +2 -2
  94. package/dist/outbound-api/auditRedact.cjs +2 -2
  95. package/dist/outbound-api/auditRedact.js +1 -1
  96. package/dist/outbound-api/routeResolver.cjs +2 -2
  97. package/dist/outbound-api/routeResolver.d.cts +11 -4
  98. package/dist/outbound-api/routeResolver.d.ts +11 -4
  99. package/dist/outbound-api/routeResolver.js +1 -1
  100. package/dist/outbound-api/subscriptionRegistryPort.d.cts +5 -1
  101. package/dist/outbound-api/subscriptionRegistryPort.d.ts +5 -1
  102. package/dist/outbound-api/types.d.cts +10 -3
  103. package/dist/outbound-api/types.d.ts +10 -3
  104. package/dist/outbound-api.cjs +65 -33
  105. package/dist/outbound-api.d.cts +205 -10
  106. package/dist/outbound-api.d.ts +205 -10
  107. package/dist/outbound-api.js +64 -32
  108. package/dist/pipeline/AccountAllowanceScheduling.d.cts +22 -15
  109. package/dist/pipeline/AccountAllowanceScheduling.d.ts +22 -15
  110. package/dist/pipeline/LlmConfigProviderAuth.cjs +3 -3
  111. package/dist/pipeline/LlmConfigProviderAuth.js +2 -2
  112. package/dist/pipeline/SubscriptionAccountHealth.cjs +2 -2
  113. package/dist/pipeline/SubscriptionAccountHealth.d.cts +7 -0
  114. package/dist/pipeline/SubscriptionAccountHealth.d.ts +7 -0
  115. package/dist/pipeline/SubscriptionAccountHealth.js +1 -1
  116. package/dist/pipeline/executeProviderCall.cjs +2 -2
  117. package/dist/pipeline/executeProviderCall.d.cts +11 -6
  118. package/dist/pipeline/executeProviderCall.d.ts +11 -6
  119. package/dist/pipeline/executeProviderCall.js +1 -1
  120. package/dist/pipeline/upstreamFetch.cjs +2 -2
  121. package/dist/pipeline/upstreamFetch.d.cts +5 -0
  122. package/dist/pipeline/upstreamFetch.d.ts +5 -0
  123. package/dist/pipeline/upstreamFetch.js +1 -1
  124. package/dist/ports.d.cts +10 -3
  125. package/dist/ports.d.ts +10 -3
  126. package/dist/provider-proxy/ProviderProxy.cjs +32 -28
  127. package/dist/provider-proxy/ProviderProxy.d.cts +6 -2
  128. package/dist/provider-proxy/ProviderProxy.d.ts +6 -2
  129. package/dist/provider-proxy/ProviderProxy.js +31 -27
  130. package/dist/provider-proxy/identity/codexCliHeaders.cjs +4 -2
  131. package/dist/provider-proxy/identity/codexCliHeaders.d.cts +26 -6
  132. package/dist/provider-proxy/identity/codexCliHeaders.d.ts +26 -6
  133. package/dist/provider-proxy/identity/codexCliHeaders.js +5 -3
  134. package/dist/provider-proxy/ingress/providerProxyShared.cjs +36 -28
  135. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +41 -9
  136. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +41 -9
  137. package/dist/provider-proxy/ingress/providerProxyShared.js +35 -27
  138. package/dist/provider-proxy/types.d.cts +17 -483
  139. package/dist/provider-proxy/types.d.ts +17 -483
  140. package/dist/provider-proxy.cjs +46 -28
  141. package/dist/provider-proxy.d.cts +34 -8
  142. package/dist/provider-proxy.d.ts +34 -8
  143. package/dist/provider-proxy.js +45 -27
  144. package/dist/proxy-UZTtjPZx.d.cts +18 -0
  145. package/dist/proxy-UZTtjPZx.d.ts +18 -0
  146. package/dist/{routeResolver-CVFE8KKe.d.cts → routeResolver-Da0yvkL1.d.cts} +4 -2
  147. package/dist/{routeResolver-C0mkkZaM.d.ts → routeResolver-STwMz_G4.d.ts} +4 -2
  148. package/dist/runtime-6QXNU526.cjs +8 -0
  149. package/dist/runtime-M5WXLD2R.js +8 -0
  150. package/dist/runtime-t8AZacFF.d.cts +233 -0
  151. package/dist/runtime-t8AZacFF.d.ts +233 -0
  152. package/dist/search/api.cjs +761 -0
  153. package/dist/search/api.d.cts +370 -0
  154. package/dist/search/api.d.ts +370 -0
  155. package/dist/search/api.js +761 -0
  156. package/dist/search/http.cjs +37 -0
  157. package/dist/search/http.d.cts +269 -0
  158. package/dist/search/http.d.ts +269 -0
  159. package/dist/search/http.js +37 -0
  160. package/dist/search.cjs +57 -0
  161. package/dist/search.d.cts +113 -0
  162. package/dist/search.d.ts +113 -0
  163. package/dist/search.js +57 -0
  164. package/dist/transformer/TransformerChainExecutor.cjs +2 -2
  165. package/dist/transformer/TransformerChainExecutor.d.cts +2 -2
  166. package/dist/transformer/TransformerChainExecutor.d.ts +2 -2
  167. package/dist/transformer/TransformerChainExecutor.js +1 -1
  168. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.cjs +16 -0
  169. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.d.cts +53 -0
  170. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.d.ts +53 -0
  171. package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.js +16 -0
  172. package/dist/transformer/transformers/AnthropicTransformer.cjs +4 -3
  173. package/dist/transformer/transformers/AnthropicTransformer.js +3 -2
  174. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -4
  175. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +3 -3
  176. package/dist/transformer/transformers/GeminiTransformer.cjs +4 -4
  177. package/dist/transformer/transformers/GeminiTransformer.js +3 -3
  178. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -3
  179. package/dist/transformer/transformers/OpenAIResponseTransformer.js +2 -2
  180. package/dist/transformer/transformers/OpenAITransformer.cjs +3 -3
  181. package/dist/transformer/transformers/OpenAITransformer.js +2 -2
  182. package/dist/transformer/transformers.cjs +11 -10
  183. package/dist/transformer/transformers.js +12 -11
  184. package/dist/transformer/types.d.cts +39 -4
  185. package/dist/transformer/types.d.ts +39 -4
  186. package/dist/transformer.cjs +14 -13
  187. package/dist/transformer.js +13 -12
  188. package/dist/types-BSIJdsyl.d.cts +1130 -0
  189. package/dist/types-Be-yt_6T.d.cts +196 -0
  190. package/dist/types-By9Tg6-I.d.ts +1130 -0
  191. package/dist/types-CbCZqLGg.d.cts +127 -0
  192. package/dist/types-CbCZqLGg.d.ts +127 -0
  193. package/dist/{types-C2MwkLah.d.cts → types-D-oHYusb.d.cts} +250 -21
  194. package/dist/types-Dm4_36V4.d.ts +196 -0
  195. package/dist/{types-BB8pxk_3.d.ts → types-Dvlpjn0d.d.ts} +250 -21
  196. package/dist/usage.cjs +2 -2
  197. package/dist/usage.d.cts +6 -1
  198. package/dist/usage.d.ts +6 -1
  199. package/dist/usage.js +1 -1
  200. package/package.json +71 -64
  201. package/dist/chunk-FCR77GYM.cjs +0 -33
  202. package/dist/chunk-K5NM7VAH.js +0 -33
  203. /package/dist/{chunk-XXFYLL7R.js → chunk-ECZ3ZE2C.js} +0 -0
  204. /package/dist/{chunk-3SCOLIPT.cjs → chunk-MXI2PWIC.cjs} +0 -0
@@ -1,3 +1,6 @@
1
+ import {
2
+ convertOpenAIStreamToAnthropic
3
+ } from "./chunk-LFEH7CEO.js";
1
4
  import {
2
5
  anthropicUsageToChatUsage
3
6
  } from "./chunk-FU7EAR73.js";
@@ -9,8 +12,9 @@ import {
9
12
  import {
10
13
  extractReasoningIntent,
11
14
  normalizeThinkLevel,
15
+ recordDroppedField,
12
16
  resolveReasoningPlan
13
- } from "./chunk-N2EIM2XJ.js";
17
+ } from "./chunk-ZLNHPUFA.js";
14
18
 
15
19
  // src/transformer/transformers/AnthropicToolHandling.ts
16
20
  function isServerSideTool(tool) {
@@ -155,6 +159,14 @@ function buildAnthropicRequestBody(request, provider) {
155
159
  if (request.temperature !== void 0) {
156
160
  body.temperature = request.temperature;
157
161
  }
162
+ if (request.stop !== void 0 && request.stop.length > 0) {
163
+ body.stop_sequences = request.stop;
164
+ }
165
+ if (request.top_p !== void 0) body.top_p = request.top_p;
166
+ if (request.top_k !== void 0) body.top_k = request.top_k;
167
+ if (request.metadata_user_id !== void 0) {
168
+ body.metadata = { user_id: request.metadata_user_id };
169
+ }
158
170
  if (systemContent !== void 0) {
159
171
  body.system = systemContent;
160
172
  }
@@ -325,6 +337,7 @@ function convertOpenAIResponseToAnthropic(openaiResponse) {
325
337
  function transformAnthropicRequestToUnified(request) {
326
338
  const anthropicRequest = request;
327
339
  const messages = [];
340
+ let redactedSeen = false;
328
341
  if (anthropicRequest.system) {
329
342
  if (typeof anthropicRequest.system === "string") {
330
343
  messages.push({
@@ -419,15 +432,40 @@ function transformAnthropicRequestToUnified(request) {
419
432
  }
420
433
  }));
421
434
  }
422
- const thinkingPart = msg.content.find(
423
- (c) => c.type === "thinking"
424
- );
425
- if (thinkingPart?.thinking) {
435
+ let thinkingText = "";
436
+ let firstSignature;
437
+ let sawRedacted = false;
438
+ for (const block of msg.content) {
439
+ if (block.type === "thinking") {
440
+ const t = block.thinking;
441
+ if (typeof t === "string" && t.length > 0) {
442
+ if (thinkingText.length > 0) thinkingText += "\n";
443
+ thinkingText += t;
444
+ }
445
+ const signature = block.signature;
446
+ if (signature) {
447
+ if (firstSignature === void 0) {
448
+ firstSignature = signature;
449
+ } else if (typeof t === "string" && t.length > 0) {
450
+ thinkingText += `
451
+ [signature: ${signature}]`;
452
+ }
453
+ }
454
+ } else if (block.type === "redacted_thinking") {
455
+ sawRedacted = true;
456
+ if (thinkingText.length > 0) thinkingText += "\n";
457
+ thinkingText += "[redacted thinking omitted]";
458
+ }
459
+ }
460
+ if (thinkingText.length > 0) {
426
461
  assistantMessage.thinking = {
427
- content: thinkingPart.thinking,
428
- signature: thinkingPart.signature
462
+ content: thinkingText,
463
+ signature: firstSignature
429
464
  };
430
465
  }
466
+ if (sawRedacted) {
467
+ redactedSeen = true;
468
+ }
431
469
  messages.push(assistantMessage);
432
470
  }
433
471
  }
@@ -443,6 +481,16 @@ function transformAnthropicRequestToUnified(request) {
443
481
  stream: anthropicRequest.stream,
444
482
  tools: functionTools?.length ? functionTools : void 0
445
483
  };
484
+ const raw = anthropicRequest;
485
+ if (Array.isArray(raw.stop_sequences)) {
486
+ result.stop = raw.stop_sequences.filter((s) => typeof s === "string");
487
+ }
488
+ if (typeof raw.top_p === "number") result.top_p = raw.top_p;
489
+ if (typeof raw.top_k === "number") result.top_k = raw.top_k;
490
+ if (typeof raw.metadata?.user_id === "string") result.metadata_user_id = raw.metadata.user_id;
491
+ if (redactedSeen) {
492
+ recordDroppedField(result, "redacted_thinking", "unified");
493
+ }
446
494
  if (serverSideTools.length > 0) {
447
495
  result._serverSideTools = serverSideTools;
448
496
  }
@@ -644,286 +692,6 @@ ${formatted}` },
644
692
  });
645
693
  }
646
694
 
647
- // src/transformer/transformers/AnthropicOpenAIToAnthropicStream.ts
648
- function convertOpenAIStreamToAnthropic(openaiStream, _context, logger) {
649
- const decoder = new TextDecoder();
650
- const encoder = new TextEncoder();
651
- let hasStarted = false;
652
- let hasTextContentStarted = false;
653
- let isThinkingStarted = false;
654
- let contentIndex = 0;
655
- let currentContentBlockIndex = -1;
656
- const toolCallIndexToContentBlockIndex = /* @__PURE__ */ new Map();
657
- return new ReadableStream({
658
- start: async (controller) => {
659
- const reader = openaiStream.getReader();
660
- let buffer = "";
661
- const messageId = `msg_${Date.now()}`;
662
- let model = "unknown";
663
- let isClosed = false;
664
- let stopReasonDelta = null;
665
- const safeEnqueue = (data) => {
666
- if (!isClosed) {
667
- try {
668
- controller.enqueue(encoder.encode(data));
669
- } catch (_e) {
670
- isClosed = true;
671
- }
672
- }
673
- };
674
- const assignContentBlockIndex = () => {
675
- return contentIndex++;
676
- };
677
- const safeClose = () => {
678
- if (isClosed) return;
679
- if (currentContentBlockIndex >= 0) {
680
- safeEnqueue(`event: content_block_stop
681
- data: ${JSON.stringify({
682
- type: "content_block_stop",
683
- index: currentContentBlockIndex
684
- })}
685
-
686
- `);
687
- }
688
- if (stopReasonDelta) {
689
- safeEnqueue(`event: message_delta
690
- data: ${JSON.stringify(stopReasonDelta)}
691
-
692
- `);
693
- } else {
694
- safeEnqueue(`event: message_delta
695
- data: ${JSON.stringify({
696
- type: "message_delta",
697
- delta: { stop_reason: "end_turn", stop_sequence: null },
698
- usage: { input_tokens: 0, output_tokens: 0 }
699
- })}
700
-
701
- `);
702
- }
703
- safeEnqueue(`event: message_stop
704
- data: ${JSON.stringify({ type: "message_stop" })}
705
-
706
- `);
707
- try {
708
- controller.close();
709
- } catch (_e) {
710
- }
711
- isClosed = true;
712
- };
713
- try {
714
- while (true) {
715
- const { done, value } = await reader.read();
716
- if (done) break;
717
- buffer += decoder.decode(value, { stream: true });
718
- const lines = buffer.split("\n");
719
- buffer = lines.pop() || "";
720
- for (const line of lines) {
721
- if (isClosed) break;
722
- if (!line.startsWith("data:")) continue;
723
- const data = line.slice(5).trim();
724
- if (data === "[DONE]") continue;
725
- try {
726
- const chunk = JSON.parse(data);
727
- if (chunk.error) {
728
- safeEnqueue(`event: error
729
- data: ${JSON.stringify({
730
- type: "error",
731
- message: { type: "api_error", message: JSON.stringify(chunk.error) }
732
- })}
733
-
734
- `);
735
- continue;
736
- }
737
- model = chunk.model || model;
738
- if (!hasStarted) {
739
- hasStarted = true;
740
- safeEnqueue(`event: message_start
741
- data: ${JSON.stringify({
742
- type: "message_start",
743
- message: {
744
- id: messageId,
745
- type: "message",
746
- role: "assistant",
747
- content: [],
748
- model,
749
- stop_reason: null,
750
- stop_sequence: null,
751
- usage: { input_tokens: 0, output_tokens: 0 }
752
- }
753
- })}
754
-
755
- `);
756
- }
757
- const choice = chunk.choices?.[0];
758
- if (!choice) continue;
759
- if (chunk.usage) {
760
- stopReasonDelta = {
761
- type: "message_delta",
762
- delta: { stop_reason: "end_turn", stop_sequence: null },
763
- usage: {
764
- input_tokens: (chunk.usage.prompt_tokens || 0) - (chunk.usage.prompt_tokens_details?.cached_tokens || 0),
765
- output_tokens: chunk.usage.completion_tokens || 0,
766
- cache_read_input_tokens: chunk.usage.prompt_tokens_details?.cached_tokens || 0
767
- }
768
- };
769
- }
770
- if (choice.delta?.thinking) {
771
- if (!isThinkingStarted) {
772
- const thinkingBlockIndex = assignContentBlockIndex();
773
- safeEnqueue(`event: content_block_start
774
- data: ${JSON.stringify({
775
- type: "content_block_start",
776
- index: thinkingBlockIndex,
777
- content_block: { type: "thinking", thinking: "" }
778
- })}
779
-
780
- `);
781
- currentContentBlockIndex = thinkingBlockIndex;
782
- isThinkingStarted = true;
783
- }
784
- if (choice.delta.thinking.signature) {
785
- safeEnqueue(`event: content_block_delta
786
- data: ${JSON.stringify({
787
- type: "content_block_delta",
788
- index: currentContentBlockIndex,
789
- delta: { type: "signature_delta", signature: choice.delta.thinking.signature }
790
- })}
791
-
792
- `);
793
- safeEnqueue(`event: content_block_stop
794
- data: ${JSON.stringify({
795
- type: "content_block_stop",
796
- index: currentContentBlockIndex
797
- })}
798
-
799
- `);
800
- currentContentBlockIndex = -1;
801
- } else if (choice.delta.thinking.content) {
802
- safeEnqueue(`event: content_block_delta
803
- data: ${JSON.stringify({
804
- type: "content_block_delta",
805
- index: currentContentBlockIndex,
806
- delta: { type: "thinking_delta", thinking: choice.delta.thinking.content }
807
- })}
808
-
809
- `);
810
- }
811
- }
812
- if (choice.delta?.content) {
813
- if (!hasTextContentStarted) {
814
- if (currentContentBlockIndex >= 0 && isThinkingStarted) {
815
- safeEnqueue(`event: content_block_stop
816
- data: ${JSON.stringify({
817
- type: "content_block_stop",
818
- index: currentContentBlockIndex
819
- })}
820
-
821
- `);
822
- }
823
- hasTextContentStarted = true;
824
- const textBlockIndex = assignContentBlockIndex();
825
- safeEnqueue(`event: content_block_start
826
- data: ${JSON.stringify({
827
- type: "content_block_start",
828
- index: textBlockIndex,
829
- content_block: { type: "text", text: "" }
830
- })}
831
-
832
- `);
833
- currentContentBlockIndex = textBlockIndex;
834
- }
835
- safeEnqueue(`event: content_block_delta
836
- data: ${JSON.stringify({
837
- type: "content_block_delta",
838
- index: currentContentBlockIndex,
839
- delta: { type: "text_delta", text: choice.delta.content }
840
- })}
841
-
842
- `);
843
- }
844
- if (choice.delta?.tool_calls) {
845
- for (const toolCall of choice.delta.tool_calls) {
846
- const toolCallIndex = toolCall.index ?? 0;
847
- if (!toolCallIndexToContentBlockIndex.has(toolCallIndex)) {
848
- if (currentContentBlockIndex >= 0) {
849
- safeEnqueue(`event: content_block_stop
850
- data: ${JSON.stringify({
851
- type: "content_block_stop",
852
- index: currentContentBlockIndex
853
- })}
854
-
855
- `);
856
- hasTextContentStarted = false;
857
- }
858
- const newBlockIndex = assignContentBlockIndex();
859
- toolCallIndexToContentBlockIndex.set(toolCallIndex, newBlockIndex);
860
- safeEnqueue(`event: content_block_start
861
- data: ${JSON.stringify({
862
- type: "content_block_start",
863
- index: newBlockIndex,
864
- content_block: {
865
- type: "tool_use",
866
- id: toolCall.id || `call_${Date.now()}_${toolCallIndex}`,
867
- name: toolCall.function?.name || `tool_${toolCallIndex}`,
868
- input: {}
869
- }
870
- })}
871
-
872
- `);
873
- currentContentBlockIndex = newBlockIndex;
874
- }
875
- if (toolCall.function?.arguments) {
876
- const blockIndex = toolCallIndexToContentBlockIndex.get(toolCallIndex);
877
- if (blockIndex !== void 0) {
878
- safeEnqueue(`event: content_block_delta
879
- data: ${JSON.stringify({
880
- type: "content_block_delta",
881
- index: blockIndex,
882
- delta: { type: "input_json_delta", partial_json: toolCall.function.arguments }
883
- })}
884
-
885
- `);
886
- }
887
- }
888
- }
889
- }
890
- if (choice.finish_reason) {
891
- const stopReasonMapping = {
892
- stop: "end_turn",
893
- length: "max_tokens",
894
- tool_calls: "tool_use",
895
- content_filter: "stop_sequence"
896
- };
897
- stopReasonDelta = {
898
- type: "message_delta",
899
- delta: {
900
- stop_reason: stopReasonMapping[choice.finish_reason] || "end_turn",
901
- stop_sequence: null
902
- },
903
- usage: {
904
- input_tokens: (chunk.usage?.prompt_tokens || 0) - (chunk.usage?.prompt_tokens_details?.cached_tokens || 0),
905
- output_tokens: chunk.usage?.completion_tokens || 0,
906
- cache_read_input_tokens: chunk.usage?.prompt_tokens_details?.cached_tokens || 0
907
- }
908
- };
909
- }
910
- } catch (e) {
911
- logger?.error("Error parsing stream chunk:", e);
912
- }
913
- }
914
- }
915
- } catch (e) {
916
- if (!isClosed) {
917
- controller.error(e);
918
- }
919
- } finally {
920
- safeClose();
921
- reader.releaseLock();
922
- }
923
- }
924
- });
925
- }
926
-
927
695
  // src/transformer/transformers/AnthropicTransformer.ts
928
696
  var AnthropicTransformer = class {
929
697
  static TransformerName = "anthropic";
@@ -30,6 +30,7 @@ var TransformerChainExecutor = class {
30
30
  providerName: provider.name
31
31
  };
32
32
  let requestBody = request;
33
+ let endpointRequest;
33
34
  let config = {};
34
35
  let bypass = false;
35
36
  bypass = this.shouldBypassTransformers(
@@ -60,6 +61,7 @@ var TransformerChainExecutor = class {
60
61
  this.logger.error(`transformRequestOut error: ${this.getErrorMessage(error)}`);
61
62
  throw error;
62
63
  }
64
+ endpointRequest = requestBody;
63
65
  }
64
66
  if (!bypass && chain.providerTransformers.length > 0) {
65
67
  this.logger.debug(`Executing ${chain.providerTransformers.length} provider transformers`);
@@ -118,7 +120,7 @@ var TransformerChainExecutor = class {
118
120
  true
119
121
  );
120
122
  }
121
- return { requestBody, config, bypass };
123
+ return { requestBody, endpointRequest, config, bypass };
122
124
  }
123
125
  /**
124
126
  * Execute the response transformation chain
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkFCR77GYMcjs = require('./chunk-FCR77GYM.cjs');
4
3
 
4
+ var _chunkAEOZIDEBcjs = require('./chunk-AEOZIDEB.cjs');
5
5
 
6
6
 
7
- var _chunkAEOZIDEBcjs = require('./chunk-AEOZIDEB.cjs');
7
+ var _chunkHCOQQAZEcjs = require('./chunk-HCOQQAZE.cjs');
8
8
 
9
9
 
10
10
  var _chunkXSVNC2UDcjs = require('./chunk-XSVNC2UD.cjs');
@@ -195,24 +195,35 @@ function resolveClientIp(req, trustForwardedFor) {
195
195
  }
196
196
  return _nullishCoalesce(_optionalChain([req, 'access', _8 => _8.socket, 'optionalAccess', _9 => _9.remoteAddress]), () => ( void 0));
197
197
  }
198
- function beginAuditCapture(req, res, now) {
198
+ function beginAuditCapture(req, res, now, options) {
199
199
  const config = _chunkAEOZIDEBcjs.getAuditCaptureConfig.call(void 0, );
200
200
  if (!config) return null;
201
+ const captureBodies = config.captureBodies;
201
202
  let requestBody;
202
203
  const responseChunks = [];
203
204
  let responseBytes = 0;
204
205
  let responseTruncated = false;
206
+ let bodiesSuppressed = _optionalChain([options, 'optionalAccess', _10 => _10.suppressBodies]) === true;
205
207
  let finished = false;
206
208
  const ctx = {
207
209
  setRequestBody(raw) {
208
- if (config.captureBodies) {
209
- requestBody = truncateToBytes(_chunkFCR77GYMcjs.redactAuditText.call(void 0, raw), config.maxBodyBytes);
210
+ if (captureBodies && !bodiesSuppressed) {
211
+ requestBody = truncateToBytes(_chunkHCOQQAZEcjs.redactAuditText.call(void 0, raw), config.maxBodyBytes);
210
212
  }
213
+ },
214
+ suppressBodies() {
215
+ if (bodiesSuppressed) return;
216
+ bodiesSuppressed = true;
217
+ requestBody = void 0;
218
+ responseChunks.length = 0;
219
+ responseBytes = 0;
220
+ responseTruncated = false;
211
221
  }
212
222
  };
213
- if (config.captureBodies) {
223
+ if (captureBodies && !bodiesSuppressed) {
214
224
  installResponseCapture(res, {
215
225
  push(chunk) {
226
+ if (bodiesSuppressed) return;
216
227
  if (config.maxBodyBytes < 0) {
217
228
  responseChunks.push(chunk);
218
229
  responseBytes += chunk.length;
@@ -261,9 +272,9 @@ function beginAuditCapture(req, res, now) {
261
272
  if (!record.model && usage.model) record.model = usage.model;
262
273
  if (!record.provider && usage.provider) record.provider = usage.provider;
263
274
  }
264
- if (ctx.error) record.error = _chunkFCR77GYMcjs.redactAuditText.call(void 0, ctx.error);
275
+ if (ctx.error) record.error = _chunkHCOQQAZEcjs.redactAuditText.call(void 0, ctx.error);
265
276
  if (ctx.sessionKey) record.sessionKey = ctx.sessionKey;
266
- if (config.captureBodies) {
277
+ if (captureBodies && !bodiesSuppressed) {
267
278
  if (requestBody != null && requestBody.length > 0) {
268
279
  record.requestBody = requestBody;
269
280
  }
@@ -271,7 +282,7 @@ function beginAuditCapture(req, res, now) {
271
282
  const captured = Buffer.concat(responseChunks, responseBytes);
272
283
  const decoded = decodeCapturedBody(captured, responseTruncated);
273
284
  const body = config.compactStreamingBodies ? compactSseBody(decoded) : decoded;
274
- record.responseBody = truncateToBytes(_chunkFCR77GYMcjs.redactAuditText.call(void 0, body), config.maxBodyBytes);
285
+ record.responseBody = truncateToBytes(_chunkHCOQQAZEcjs.redactAuditText.call(void 0, body), config.maxBodyBytes);
275
286
  }
276
287
  if (record.requestBody !== void 0 || record.responseBody !== void 0) {
277
288
  record.hasBody = true;
@@ -0,0 +1,200 @@
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; var _class3;// src/openai-operation/openAIOperation.ts
2
+ var OPERATIONS = {
3
+ "chat.completions.create": {
4
+ id: "chat.completions.create",
5
+ policyFamily: "chat",
6
+ routeFamily: "chat",
7
+ owner: "builtin",
8
+ bodyKind: "json",
9
+ requestedModelSource: "request"
10
+ },
11
+ "responses.create": {
12
+ id: "responses.create",
13
+ policyFamily: "responses",
14
+ routeFamily: "responses",
15
+ owner: "builtin",
16
+ bodyKind: "json",
17
+ requestedModelSource: "request"
18
+ },
19
+ "responses.compact": {
20
+ id: "responses.compact",
21
+ policyFamily: "responses",
22
+ routeFamily: "responses",
23
+ owner: "extension",
24
+ bodyKind: "json",
25
+ requestedModelSource: "request"
26
+ },
27
+ "images.generate": {
28
+ id: "images.generate",
29
+ policyFamily: "images",
30
+ routeFamily: "images",
31
+ owner: "extension",
32
+ bodyKind: "json",
33
+ requestedModelSource: "configured"
34
+ },
35
+ "images.edit": {
36
+ id: "images.edit",
37
+ policyFamily: "images",
38
+ routeFamily: "images",
39
+ owner: "extension",
40
+ bodyKind: "multipart",
41
+ requestedModelSource: "configured"
42
+ }
43
+ };
44
+ var MATCH_ORDER = [
45
+ { id: "responses.compact", suffix: ["responses", "compact"] },
46
+ { id: "images.generate", suffix: ["images", "generations"] },
47
+ { id: "images.edit", suffix: ["images", "edits"] },
48
+ { id: "chat.completions.create", suffix: ["chat", "completions"] },
49
+ { id: "responses.create", suffix: ["responses"] }
50
+ ];
51
+ function getOpenAIOperation(id) {
52
+ return OPERATIONS[id];
53
+ }
54
+ function pathSegments(url) {
55
+ const queryIndex = url.indexOf("?");
56
+ const path = queryIndex >= 0 ? url.slice(0, queryIndex) : url;
57
+ return path.split("/").filter(Boolean);
58
+ }
59
+ function hasExactSuffix(segments, suffix) {
60
+ if (segments.length < suffix.length) return false;
61
+ const offset = segments.length - suffix.length;
62
+ return suffix.every((segment, index) => segments[offset + index] === segment);
63
+ }
64
+ function classifyOpenAIOperation(method, url) {
65
+ if (method !== "POST" || !url) return null;
66
+ const segments = pathSegments(url);
67
+ for (const candidate of MATCH_ORDER) {
68
+ if (hasExactSuffix(segments, candidate.suffix)) return OPERATIONS[candidate.id];
69
+ }
70
+ return null;
71
+ }
72
+
73
+ // src/openai-operation/openAIOperationRegistry.ts
74
+ var OpenAIOperationRegistrationError = (_class = class extends Error {
75
+ constructor(code, message) {
76
+ super(message);_class.prototype.__init.call(this);;
77
+ this.code = code;
78
+ }
79
+
80
+ __init() {this.name = "OpenAIOperationRegistrationError"}
81
+ }, _class);
82
+ var OpenAIOperationError = (_class2 = class extends Error {
83
+ __init2() {this.name = "OpenAIOperationError"}
84
+
85
+
86
+
87
+
88
+ constructor(init) {
89
+ super(init.message);_class2.prototype.__init2.call(this);;
90
+ this.status = init.status;
91
+ this.code = init.code;
92
+ this.retryable = _nullishCoalesce(init.retryable, () => ( false));
93
+ this.headers = _nullishCoalesce(init.headers, () => ( {}));
94
+ }
95
+ }, _class2);
96
+ var SAFE_LOCAL_ERROR_HEADERS = /* @__PURE__ */ new Set(["retry-after", "x-request-id"]);
97
+ function safeErrorHeaders(headers) {
98
+ const safe = {};
99
+ for (const [name, value] of Object.entries(headers)) {
100
+ if (SAFE_LOCAL_ERROR_HEADERS.has(name.toLowerCase())) safe[name] = value;
101
+ }
102
+ return safe;
103
+ }
104
+ function writeOpenAIOperationError(res, error) {
105
+ if (res.headersSent || res.writableEnded) return false;
106
+ res.writeHead(error.status, {
107
+ "Content-Type": "application/json",
108
+ ...safeErrorHeaders(error.headers)
109
+ });
110
+ res.end(JSON.stringify({
111
+ error: {
112
+ type: "openai_operation_error",
113
+ code: error.code,
114
+ message: error.message,
115
+ retryable: error.retryable
116
+ }
117
+ }));
118
+ return true;
119
+ }
120
+ function unsupportedOpenAIOperation(operation) {
121
+ return new OpenAIOperationError({
122
+ status: 501,
123
+ code: "unsupported_capability",
124
+ message: `Operation '${operation.id}' is not available`
125
+ });
126
+ }
127
+ var OpenAIOperationRegistry = (_class3 = class {constructor() { _class3.prototype.__init3.call(this); }
128
+ __init3() {this.handlers = /* @__PURE__ */ new Map()}
129
+ register(operationId, handler) {
130
+ const operation = getOpenAIOperation(operationId);
131
+ if (operation.owner !== "extension") {
132
+ throw new OpenAIOperationRegistrationError(
133
+ "builtin_operation",
134
+ `Operation '${operationId}' is owned by a built-in ingress`
135
+ );
136
+ }
137
+ if (this.handlers.has(operationId)) {
138
+ throw new OpenAIOperationRegistrationError(
139
+ "duplicate_operation_handler",
140
+ `Operation '${operationId}' already has a handler`
141
+ );
142
+ }
143
+ this.handlers.set(operationId, handler);
144
+ let disposed = false;
145
+ return () => {
146
+ if (disposed) return;
147
+ disposed = true;
148
+ if (this.handlers.get(operationId) === handler) this.handlers.delete(operationId);
149
+ };
150
+ }
151
+ has(operationId) {
152
+ return this.handlers.has(operationId);
153
+ }
154
+ async dispatch(context) {
155
+ const handler = this.handlers.get(context.operation.id);
156
+ if (!handler) return false;
157
+ const controller = new AbortController();
158
+ const abort = () => {
159
+ if (!controller.signal.aborted) controller.abort();
160
+ };
161
+ const onRequestClose = () => {
162
+ if (context.request.aborted || !context.request.complete) abort();
163
+ };
164
+ const onResponseClose = () => {
165
+ if (!context.response.writableEnded) abort();
166
+ };
167
+ context.request.once("aborted", abort);
168
+ context.request.once("close", onRequestClose);
169
+ context.response.once("close", onResponseClose);
170
+ if (context.request.aborted || context.response.destroyed) abort();
171
+ try {
172
+ await handler({ ...context, signal: controller.signal });
173
+ return true;
174
+ } catch (error) {
175
+ const publicError = error instanceof OpenAIOperationError ? error : new OpenAIOperationError({
176
+ status: 500,
177
+ code: "operation_handler_failed",
178
+ message: `Operation '${context.operation.id}' handler failed`
179
+ });
180
+ if (!writeOpenAIOperationError(context.response, publicError)) {
181
+ throw new Error(publicError.message);
182
+ }
183
+ return true;
184
+ } finally {
185
+ context.request.removeListener("aborted", abort);
186
+ context.request.removeListener("close", onRequestClose);
187
+ context.response.removeListener("close", onResponseClose);
188
+ }
189
+ }
190
+ }, _class3);
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+ exports.getOpenAIOperation = getOpenAIOperation; exports.classifyOpenAIOperation = classifyOpenAIOperation; exports.OpenAIOperationRegistrationError = OpenAIOperationRegistrationError; exports.OpenAIOperationError = OpenAIOperationError; exports.writeOpenAIOperationError = writeOpenAIOperationError; exports.unsupportedOpenAIOperation = unsupportedOpenAIOperation; exports.OpenAIOperationRegistry = OpenAIOperationRegistry;