@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
@@ -104,6 +104,11 @@ var SubscriptionAccountHealth = class {
104
104
  const preExisting = this.records.get(key);
105
105
  const record = preExisting ?? {};
106
106
  const status = input.status;
107
+ if (input.upstreamErrorType) {
108
+ console.info(
109
+ `[AccountHealth] upstream error type ${input.upstreamErrorType} (provider=${providerId} status=${String(status)})`
110
+ );
111
+ }
107
112
  const wasUnhealthyBefore = preExisting ? this.isUnhealthyAt(preExisting, now) : false;
108
113
  let anomalyState;
109
114
  let recovered = false;
@@ -5,8 +5,9 @@ import {
5
5
  import {
6
6
  extractReasoningIntent,
7
7
  normalizeThinkLevel,
8
+ recordDroppedField,
8
9
  resolveReasoningPlan
9
- } from "./chunk-N2EIM2XJ.js";
10
+ } from "./chunk-ZLNHPUFA.js";
10
11
 
11
12
  // src/transformer/transformers/OpenAIResponseTransformer.ts
12
13
  var OpenAIResponseTransformer = class {
@@ -33,6 +34,7 @@ var OpenAIResponseTransformer = class {
33
34
  */
34
35
  async transformRequestIn(request, provider, context) {
35
36
  const input = [];
37
+ const codexTools = request.meta?.codexTools;
36
38
  for (const msg of request.messages) {
37
39
  if (msg.role === "system") {
38
40
  const sysText = typeof msg.content === "string" ? msg.content : flattenContent(msg.content);
@@ -41,9 +43,10 @@ var OpenAIResponseTransformer = class {
41
43
  content: [{ type: "input_text", text: sysText }]
42
44
  });
43
45
  } else if (msg.role === "tool") {
46
+ const callId = msg.tool_call_id;
44
47
  input.push({
45
- type: "function_call_output",
46
- call_id: msg.tool_call_id,
48
+ type: codexTools?.customToolCallIds?.includes(callId ?? "") ? "custom_tool_call_output" : "function_call_output",
49
+ call_id: callId,
47
50
  output: typeof msg.content === "string" ? msg.content : ""
48
51
  });
49
52
  } else {
@@ -56,14 +59,13 @@ var OpenAIResponseTransformer = class {
56
59
  input.push(entry);
57
60
  for (const tc of msg.tool_calls) {
58
61
  const callId = tc.id;
59
- const itemId = callId.startsWith("fc_") ? callId : `fc_${callId.replace(/^(call_|fc_)/, "")}`;
60
- input.push({
61
- type: "function_call",
62
- id: itemId,
63
- call_id: callId,
64
- name: tc.function.name,
65
- arguments: tc.function.arguments
66
- });
62
+ input.push(encodeToolCallItem(
63
+ callId,
64
+ tc.function.name,
65
+ tc.function.arguments,
66
+ "completed",
67
+ codexTools
68
+ ));
67
69
  }
68
70
  continue;
69
71
  }
@@ -77,16 +79,25 @@ var OpenAIResponseTransformer = class {
77
79
  // set to true" otherwise). Always force it; a non-streaming CLIENT is
78
80
  // served by aggregating the SSE upstream of the wire (the ingress buffers
79
81
  // it into a single message), not by asking codex for a non-streaming reply.
80
- stream: true,
82
+ stream: context.responsesSourceFormat === this.name ? request.stream : true,
81
83
  // `store:false` is required by the codex backend and accepted by the
82
84
  // public Responses API (which defaults to store:true). Always set it so
83
85
  // codex relays (no discoverable url token) work without configuration.
84
86
  store: false,
85
- // `max_output_tokens` is intentionally omitted: the codex backend rejects
86
- // it, and the public API falls back to its default when absent. If a
87
- // public provider ever needs it honored, gate that on an opt-out flag.
88
- ...request.temperature !== void 0 ? { temperature: request.temperature } : {}
87
+ // `max_output_tokens`: the codex backend REJECTS it, so it maps only when
88
+ // the client already speaks the Responses wire (public providers); the
89
+ // public API falls back to its default when absent.
90
+ ...request.temperature !== void 0 ? { temperature: request.temperature } : {},
91
+ // R7 (claude-api-transform-fidelity): the Responses wire HAS `top_p`, so
92
+ // the decoded hub value maps through — conditionally (absent ⇒ absent).
93
+ ...request.top_p !== void 0 ? { top_p: request.top_p } : {},
94
+ ...context.responsesSourceFormat === this.name && request.max_tokens !== void 0 ? { max_output_tokens: request.max_tokens } : {}
89
95
  };
96
+ if (request.stop !== void 0) recordDroppedField(request, "stop", "openai-responses");
97
+ if (request.top_k !== void 0) recordDroppedField(request, "top_k", "openai-responses");
98
+ if (request.metadata_user_id !== void 0) {
99
+ recordDroppedField(request, "metadata_user_id", "openai-responses");
100
+ }
90
101
  const reasoningPlan = resolveReasoningPlan({
91
102
  intent: extractReasoningIntent(request),
92
103
  model: request.model,
@@ -96,15 +107,22 @@ var OpenAIResponseTransformer = class {
96
107
  preserveNativeEffort: context.reasoningSourceFormat === this.name
97
108
  });
98
109
  if (reasoningPlan?.kind === "level" && reasoningPlan.enabled) {
99
- body.reasoning = { effort: reasoningPlan.effort, summary: "auto" };
110
+ body.reasoning = {
111
+ effort: reasoningPlan.effort,
112
+ summary: typeof context.responsesReasoningSummary === "string" ? context.responsesReasoningSummary : "auto"
113
+ };
100
114
  }
101
115
  if (request.tools?.length) {
102
- body.tools = request.tools.map((tool) => ({
116
+ body.tools = request.tools.map((tool) => codexTools?.customToolNames?.includes(tool.function.name) ? {
117
+ type: "custom",
118
+ name: tool.function.name,
119
+ description: tool.function.description
120
+ } : {
103
121
  type: "function",
104
122
  name: tool.function.name,
105
123
  description: tool.function.description,
106
124
  parameters: tool.function.parameters
107
- }));
125
+ });
108
126
  }
109
127
  if (request.tool_choice) {
110
128
  if (typeof request.tool_choice === "string") {
@@ -122,7 +140,11 @@ var OpenAIResponseTransformer = class {
122
140
  async transformRequestOut(request, context) {
123
141
  const req = request;
124
142
  const messages = [];
125
- let codexTools = null;
143
+ let codexTools = collectCodexTools({ tools: req.tools });
144
+ context.responsesSourceFormat = this.name;
145
+ if (typeof req.reasoning?.summary === "string") {
146
+ context.responsesReasoningSummary = req.reasoning.summary;
147
+ }
126
148
  const instructions = typeof req.instructions === "string" ? req.instructions.trim() : "";
127
149
  if (instructions) {
128
150
  messages.push({ role: "system", content: instructions });
@@ -133,10 +155,11 @@ var OpenAIResponseTransformer = class {
133
155
  const itemType = typeof entry.type === "string" ? entry.type : void 0;
134
156
  if (itemType && SKIPPED_INPUT_ITEM_TYPES.has(itemType)) continue;
135
157
  if (itemType === "additional_tools") {
136
- codexTools = collectCodexTools(entry);
158
+ codexTools = mergeCodexTools(codexTools, collectCodexTools(entry));
137
159
  continue;
138
160
  }
139
161
  if (itemType === "custom_tool_call_output") {
162
+ rememberCustomCall(codexTools, entry.call_id);
140
163
  messages.push({
141
164
  role: "tool",
142
165
  content: flattenContent(entry.output),
@@ -145,6 +168,7 @@ var OpenAIResponseTransformer = class {
145
168
  continue;
146
169
  }
147
170
  if (itemType === "custom_tool_call") {
171
+ rememberCustomCall(codexTools, entry.call_id ?? entry.id, entry.name);
148
172
  const toolCall = {
149
173
  id: (entry.call_id ?? entry.id) || "",
150
174
  type: "function",
@@ -172,6 +196,7 @@ var OpenAIResponseTransformer = class {
172
196
  continue;
173
197
  }
174
198
  if (itemType === "function_call") {
199
+ rememberToolNamespace(codexTools, entry.name, entry.namespace);
175
200
  const toolCall = {
176
201
  id: (entry.call_id ?? entry.id) || "",
177
202
  type: "function",
@@ -214,28 +239,17 @@ var OpenAIResponseTransformer = class {
214
239
  };
215
240
  }
216
241
  const tools = [];
217
- if (req.tools?.length) {
218
- tools.push(
219
- ...req.tools.filter((t) => t.type === "function").map((t) => ({
220
- type: "function",
221
- function: {
222
- name: t.name || "",
223
- description: t.description || "",
224
- parameters: t.parameters || {}
225
- }
226
- }))
227
- );
228
- }
229
- if (codexTools?.tools.length) {
242
+ if (codexTools.tools.length) {
230
243
  const declared = new Set(tools.map((t) => t.function.name));
231
244
  tools.push(...codexTools.tools.filter((t) => !declared.has(t.function.name)));
232
245
  }
233
246
  if (tools.length) result.tools = tools;
234
- if (codexTools?.customToolNames.length || Object.keys(codexTools?.toolNamespaces ?? {}).length) {
247
+ if (codexTools.customToolNames.length || codexTools.customToolCallIds.length || Object.keys(codexTools.toolNamespaces).length) {
235
248
  result.meta = {
236
249
  ...result.meta,
237
250
  codexTools: {
238
251
  ...codexTools.customToolNames.length ? { customToolNames: codexTools.customToolNames } : {},
252
+ ...codexTools.customToolCallIds.length ? { customToolCallIds: codexTools.customToolCallIds } : {},
239
253
  ...Object.keys(codexTools.toolNamespaces).length ? { toolNamespaces: codexTools.toolNamespaces } : {}
240
254
  }
241
255
  };
@@ -346,7 +360,12 @@ function encodeToolCallItem(callId, name, argumentsJson, status, codexTools) {
346
360
  };
347
361
  }
348
362
  function collectCodexTools(entry) {
349
- const result = { tools: [], customToolNames: [], toolNamespaces: {} };
363
+ const result = {
364
+ tools: [],
365
+ customToolNames: [],
366
+ customToolCallIds: [],
367
+ toolNamespaces: {}
368
+ };
350
369
  const visit = (declarations, namespace) => {
351
370
  if (!Array.isArray(declarations)) return;
352
371
  for (const raw of declarations) {
@@ -387,6 +406,32 @@ function collectCodexTools(entry) {
387
406
  visit(entry.tools);
388
407
  return result;
389
408
  }
409
+ function mergeCodexTools(left, right) {
410
+ const tools = [...left.tools];
411
+ const names = new Set(tools.map((tool) => tool.function.name));
412
+ for (const tool of right.tools) {
413
+ if (!names.has(tool.function.name)) tools.push(tool);
414
+ }
415
+ return {
416
+ tools,
417
+ customToolNames: [.../* @__PURE__ */ new Set([...left.customToolNames, ...right.customToolNames])],
418
+ customToolCallIds: [.../* @__PURE__ */ new Set([...left.customToolCallIds, ...right.customToolCallIds])],
419
+ toolNamespaces: { ...left.toolNamespaces, ...right.toolNamespaces }
420
+ };
421
+ }
422
+ function rememberCustomCall(state, rawCallId, rawName) {
423
+ if (typeof rawCallId === "string" && rawCallId && !state.customToolCallIds.includes(rawCallId)) {
424
+ state.customToolCallIds.push(rawCallId);
425
+ }
426
+ if (typeof rawName === "string" && rawName && !state.customToolNames.includes(rawName)) {
427
+ state.customToolNames.push(rawName);
428
+ }
429
+ }
430
+ function rememberToolNamespace(state, rawName, rawNamespace) {
431
+ if (typeof rawName === "string" && rawName && typeof rawNamespace === "string" && rawNamespace) {
432
+ state.toolNamespaces[rawName] = rawNamespace;
433
+ }
434
+ }
390
435
  function flattenContent(content) {
391
436
  if (typeof content === "string") return content;
392
437
  if (!content) return "";
@@ -613,6 +658,17 @@ function convertResponseApiStreamToOpenAI(responseApiStream) {
613
658
  finish_reason: "stop"
614
659
  }]);
615
660
  break;
661
+ case "response.failed": {
662
+ safeEnqueue(
663
+ `data: ${JSON.stringify({
664
+ error: event.response?.error ?? { message: "response.failed" }
665
+ })}
666
+
667
+ `
668
+ );
669
+ safeEnqueue("data: [DONE]\n\n");
670
+ break;
671
+ }
616
672
  default:
617
673
  break;
618
674
  }
@@ -32,6 +32,12 @@ function bumpUpstreamProxyGeneration() {
32
32
  }
33
33
  }
34
34
  }
35
+ function isClientDisconnectAbort(signal) {
36
+ if (!signal?.aborted) return false;
37
+ const reason = signal.reason;
38
+ if (!reason || typeof reason !== "object") return false;
39
+ return reason.code === "client_disconnect";
40
+ }
35
41
  function normalizeProxy(cfg) {
36
42
  if ("url" in cfg) {
37
43
  let u;
@@ -144,7 +150,7 @@ function fetchUpstream(url, init, ctx) {
144
150
  return response;
145
151
  },
146
152
  (error) => {
147
- recordActivity(0);
153
+ if (!isClientDisconnectAbort(init.signal)) recordActivity(0);
148
154
  throw error;
149
155
  }
150
156
  );
@@ -158,7 +164,7 @@ function fetchUpstream(url, init, ctx) {
158
164
  const redactBodies = ctx.redactBodies === true;
159
165
  const requestBody = redactBodies ? REDACTED_BODY : typeof init.body === "string" ? init.body : null;
160
166
  const providerId = ctx.providerId;
161
- const accountId = ctx.accountId;
167
+ const accountId = ctx.traceAccountFingerprint ?? ctx.accountId;
162
168
  return doFetchWithActivity().then((res) => {
163
169
  const clone = res.clone();
164
170
  const status = res.status;