@jsonstudio/llms 0.4.3 → 0.4.5

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 (542) hide show
  1. package/README.md +3 -1
  2. package/dist/bridge/routecodex-adapter.js +6 -3
  3. package/dist/config-unified/enhanced-path-resolver.js +14 -6
  4. package/dist/config-unified/unified-config.js +103 -59
  5. package/dist/conversion/codec-registry.js +15 -3
  6. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +3 -13
  7. package/dist/conversion/codecs/anthropic-openai-codec.js +18 -473
  8. package/dist/conversion/codecs/gemini-openai-codec.js +91 -48
  9. package/dist/conversion/codecs/responses-openai-codec.js +9 -2
  10. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +3 -0
  11. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +3 -0
  12. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +3 -0
  13. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +2 -0
  14. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +9 -0
  15. package/dist/conversion/hub/node-support.js +3 -1
  16. package/dist/conversion/hub/pipeline/hub-pipeline.js +41 -37
  17. package/dist/conversion/hub/process/chat-process.js +258 -41
  18. package/dist/conversion/hub/response/provider-response.js +9 -3
  19. package/dist/conversion/hub/response/response-mappers.js +1 -1
  20. package/dist/conversion/hub/response/response-runtime.js +109 -10
  21. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +70 -156
  22. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +63 -52
  23. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +76 -143
  24. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +40 -160
  25. package/dist/conversion/hub/standardized-bridge.js +3 -0
  26. package/dist/conversion/hub/tool-governance/engine.d.ts +16 -0
  27. package/dist/conversion/hub/tool-governance/engine.js +266 -0
  28. package/dist/conversion/hub/tool-governance/index.d.ts +3 -0
  29. package/dist/conversion/hub/tool-governance/index.js +2 -0
  30. package/dist/conversion/hub/tool-governance/rules.d.ts +2 -0
  31. package/dist/conversion/hub/tool-governance/rules.js +76 -0
  32. package/dist/conversion/hub/tool-governance/types.d.ts +38 -0
  33. package/dist/conversion/index.d.ts +6 -0
  34. package/dist/conversion/index.js +6 -0
  35. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.d.ts +12 -0
  36. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.js +100 -0
  37. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.d.ts +15 -0
  38. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.js +174 -0
  39. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.d.ts +14 -0
  40. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.js +166 -0
  41. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.d.ts +13 -0
  42. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.js +66 -0
  43. package/dist/conversion/pipeline/hooks/adapter-context.d.ts +7 -0
  44. package/dist/conversion/pipeline/hooks/adapter-context.js +18 -0
  45. package/dist/conversion/pipeline/hooks/protocol-hooks.d.ts +67 -0
  46. package/dist/conversion/pipeline/hooks/protocol-hooks.js +1 -0
  47. package/dist/conversion/pipeline/index.d.ts +35 -0
  48. package/dist/conversion/pipeline/index.js +103 -0
  49. package/dist/conversion/pipeline/meta/meta-bag.d.ts +20 -0
  50. package/dist/conversion/pipeline/meta/meta-bag.js +81 -0
  51. package/dist/conversion/pipeline/schema/canonical-chat.d.ts +18 -0
  52. package/dist/conversion/pipeline/schema/canonical-chat.js +1 -0
  53. package/dist/conversion/pipeline/schema/index.d.ts +1 -0
  54. package/dist/conversion/pipeline/schema/index.js +1 -0
  55. package/dist/conversion/responses/responses-openai-bridge.d.ts +11 -58
  56. package/dist/conversion/responses/responses-openai-bridge.js +157 -1144
  57. package/dist/conversion/shared/anthropic-message-utils.d.ts +12 -0
  58. package/dist/conversion/shared/anthropic-message-utils.js +587 -0
  59. package/dist/conversion/shared/bridge-actions.d.ts +39 -0
  60. package/dist/conversion/shared/bridge-actions.js +709 -0
  61. package/dist/conversion/shared/{responses-conversation-store.d.ts → bridge-conversation-store.d.ts} +7 -7
  62. package/dist/conversion/shared/bridge-conversation-store.js +279 -0
  63. package/dist/conversion/shared/bridge-id-utils.js +42 -0
  64. package/dist/conversion/shared/bridge-instructions.d.ts +1 -0
  65. package/dist/conversion/shared/bridge-instructions.js +113 -0
  66. package/dist/conversion/shared/bridge-message-types.d.ts +39 -0
  67. package/dist/conversion/shared/bridge-message-types.js +1 -0
  68. package/dist/conversion/shared/bridge-message-utils.d.ts +22 -0
  69. package/dist/conversion/shared/bridge-message-utils.js +473 -0
  70. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  71. package/dist/conversion/shared/bridge-metadata.js +1 -0
  72. package/dist/conversion/shared/bridge-policies.d.ts +18 -0
  73. package/dist/conversion/shared/bridge-policies.js +276 -0
  74. package/dist/conversion/shared/bridge-request-adapter.d.ts +28 -0
  75. package/dist/conversion/shared/bridge-request-adapter.js +430 -0
  76. package/dist/conversion/shared/chat-output-normalizer.d.ts +4 -0
  77. package/dist/conversion/shared/chat-output-normalizer.js +56 -0
  78. package/dist/conversion/shared/chat-request-filters.js +24 -1
  79. package/dist/conversion/shared/gemini-tool-utils.d.ts +5 -0
  80. package/dist/conversion/shared/gemini-tool-utils.js +130 -0
  81. package/dist/conversion/shared/metadata-passthrough.d.ts +11 -0
  82. package/dist/conversion/shared/metadata-passthrough.js +57 -0
  83. package/dist/conversion/shared/output-content-normalizer.d.ts +12 -0
  84. package/dist/conversion/shared/output-content-normalizer.js +119 -0
  85. package/dist/conversion/shared/reasoning-normalizer.d.ts +21 -0
  86. package/dist/conversion/shared/reasoning-normalizer.js +368 -0
  87. package/dist/conversion/shared/reasoning-tool-normalizer.d.ts +12 -0
  88. package/dist/conversion/shared/reasoning-tool-normalizer.js +132 -0
  89. package/dist/conversion/shared/reasoning-tool-parser.d.ts +10 -0
  90. package/dist/conversion/shared/reasoning-tool-parser.js +95 -0
  91. package/dist/conversion/shared/reasoning-utils.d.ts +2 -0
  92. package/dist/conversion/shared/reasoning-utils.js +42 -0
  93. package/dist/conversion/shared/responses-conversation-store.js +5 -11
  94. package/dist/conversion/shared/responses-message-utils.d.ts +15 -0
  95. package/dist/conversion/shared/responses-message-utils.js +206 -0
  96. package/dist/conversion/shared/responses-output-builder.d.ts +15 -0
  97. package/dist/conversion/shared/responses-output-builder.js +179 -0
  98. package/dist/conversion/shared/responses-output-utils.d.ts +7 -0
  99. package/dist/conversion/shared/responses-output-utils.js +108 -0
  100. package/dist/conversion/shared/responses-request-adapter.d.ts +3 -41
  101. package/dist/conversion/shared/responses-request-adapter.js +9 -40
  102. package/dist/conversion/shared/responses-response-utils.d.ts +3 -0
  103. package/dist/conversion/shared/responses-response-utils.js +209 -0
  104. package/dist/conversion/shared/responses-tool-utils.d.ts +12 -0
  105. package/dist/conversion/shared/responses-tool-utils.js +90 -0
  106. package/dist/conversion/shared/responses-types.d.ts +33 -0
  107. package/dist/conversion/shared/responses-types.js +1 -0
  108. package/dist/conversion/shared/tool-call-utils.d.ts +11 -0
  109. package/dist/conversion/shared/tool-call-utils.js +56 -0
  110. package/dist/conversion/shared/tool-mapping.d.ts +9 -0
  111. package/dist/conversion/shared/tool-mapping.js +124 -0
  112. package/dist/conversion/shared/tool-normalizers.d.ts +4 -0
  113. package/dist/conversion/shared/tool-normalizers.js +84 -0
  114. package/dist/router/virtual-router/bootstrap.js +18 -3
  115. package/dist/router/virtual-router/provider-registry.js +4 -2
  116. package/dist/router/virtual-router/types.d.ts +6 -0
  117. package/dist/sse/index.d.ts +38 -2
  118. package/dist/sse/index.js +27 -0
  119. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +12 -9
  120. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.js +106 -73
  121. package/dist/sse/json-to-sse/chat-json-to-sse-converter.js +6 -2
  122. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.d.ts +14 -0
  123. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.js +99 -0
  124. package/dist/sse/json-to-sse/index.d.ts +2 -1
  125. package/dist/sse/json-to-sse/index.js +2 -0
  126. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.d.ts +13 -0
  127. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.js +150 -0
  128. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +3 -1
  129. package/dist/sse/json-to-sse/sequencers/chat-sequencer.js +49 -3
  130. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.d.ts +10 -0
  131. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.js +95 -0
  132. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +31 -5
  133. package/dist/sse/registry/sse-codec-registry.d.ts +1 -1
  134. package/dist/sse/registry/sse-codec-registry.js +30 -1
  135. package/dist/sse/shared/reasoning-dispatcher.d.ts +10 -0
  136. package/dist/sse/shared/reasoning-dispatcher.js +25 -0
  137. package/dist/sse/shared/responses-output-normalizer.d.ts +12 -0
  138. package/dist/sse/shared/responses-output-normalizer.js +45 -0
  139. package/dist/sse/shared/serializers/anthropic-event-serializer.d.ts +2 -0
  140. package/dist/sse/shared/serializers/anthropic-event-serializer.js +9 -0
  141. package/dist/sse/shared/serializers/gemini-event-serializer.d.ts +2 -0
  142. package/dist/sse/shared/serializers/gemini-event-serializer.js +5 -0
  143. package/dist/sse/shared/serializers/index.d.ts +2 -0
  144. package/dist/sse/shared/serializers/index.js +2 -0
  145. package/dist/sse/shared/writer.d.ts +17 -1
  146. package/dist/sse/shared/writer.js +37 -1
  147. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +9 -11
  148. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.js +92 -127
  149. package/dist/sse/sse-to-json/builders/anthropic-response-builder.d.ts +16 -0
  150. package/dist/sse/sse-to-json/builders/anthropic-response-builder.js +151 -0
  151. package/dist/sse/sse-to-json/builders/response-builder.d.ts +1 -1
  152. package/dist/sse/sse-to-json/builders/response-builder.js +29 -7
  153. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +8 -0
  154. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +116 -26
  155. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.d.ts +13 -0
  156. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.js +160 -0
  157. package/dist/sse/sse-to-json/index.d.ts +2 -1
  158. package/dist/sse/sse-to-json/index.js +2 -0
  159. package/dist/sse/sse-to-json/parsers/sse-parser.js +73 -13
  160. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
  161. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
  162. package/dist/sse/types/anthropic-types.d.ts +119 -36
  163. package/dist/sse/types/anthropic-types.js +8 -5
  164. package/dist/sse/types/chat-types.d.ts +19 -6
  165. package/dist/sse/types/chat-types.js +2 -1
  166. package/dist/sse/types/conversion-context.d.ts +14 -11
  167. package/dist/sse/types/core-interfaces.d.ts +7 -3
  168. package/dist/sse/types/gemini-types.d.ts +116 -0
  169. package/dist/sse/types/gemini-types.js +5 -0
  170. package/dist/sse/types/index.d.ts +5 -2
  171. package/dist/sse/types/index.js +2 -0
  172. package/dist/sse/types/responses-types.d.ts +20 -20
  173. package/dist/sse/types/sse-events.d.ts +4 -3
  174. package/dist/sse/types/stream-state.d.ts +34 -39
  175. package/dist/sse/types/utility-types.d.ts +47 -43
  176. package/dist/sse/types/utility-types.js +10 -13
  177. package/dist/tools/tool-registry.js +156 -98
  178. package/package.json +7 -7
  179. package/dist/api/index.d.ts +0 -10
  180. package/dist/api/index.js +0 -11
  181. package/dist/api/llmswitch-config.d.ts +0 -15
  182. package/dist/api/llmswitch-config.js +0 -415
  183. package/dist/api/llmswitch-types.d.ts +0 -412
  184. package/dist/api/llmswitch-types.js +0 -60
  185. package/dist/bridge/routecodex-adapter.d.ts +0 -74
  186. package/dist/config/index.d.ts +0 -3
  187. package/dist/config/index.js +0 -5
  188. package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
  189. package/dist/config-unified/unified-config.d.ts +0 -26
  190. package/dist/conversion/codec-registry.d.ts +0 -10
  191. package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
  192. package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
  193. package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
  194. package/dist/conversion/config/config-manager.d.ts +0 -212
  195. package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
  196. package/dist/conversion/conversion-v3/adapters/index.js +0 -1
  197. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
  198. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
  199. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
  200. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
  201. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
  202. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
  203. package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
  204. package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
  205. package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
  206. package/dist/conversion/conversion-v3/config/default-configs.js +0 -1007
  207. package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
  208. package/dist/conversion/conversion-v3/config/index.js +0 -5
  209. package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
  210. package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
  211. package/dist/conversion/conversion-v3/index.d.ts +0 -11
  212. package/dist/conversion/conversion-v3/index.js +0 -17
  213. package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
  214. package/dist/conversion/conversion-v3/nodes/index.js +0 -149
  215. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
  216. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
  217. package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
  218. package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
  219. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
  220. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
  221. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
  222. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
  223. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
  224. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
  225. package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
  226. package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
  227. package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
  228. package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
  229. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
  230. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
  231. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
  232. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
  233. package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
  234. package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
  235. package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
  236. package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
  237. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
  238. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
  239. package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
  240. package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
  241. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
  242. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
  243. package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
  244. package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
  245. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
  246. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
  247. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
  248. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
  249. package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
  250. package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
  251. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
  252. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
  253. package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
  254. package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
  255. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -30
  256. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -360
  257. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
  258. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
  259. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
  260. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
  261. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
  262. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
  263. package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
  264. package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
  265. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
  266. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
  267. package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
  268. package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
  269. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
  270. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
  271. package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
  272. package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
  273. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
  274. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
  275. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
  276. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
  277. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
  278. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
  279. package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
  280. package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
  281. package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
  282. package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
  283. package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
  284. package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
  285. package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
  286. package/dist/conversion/conversion-v3/sse/index.js +0 -115
  287. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  288. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
  289. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  290. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
  291. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  292. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
  293. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  294. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
  295. package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
  296. package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
  297. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  298. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
  299. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  300. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
  301. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  302. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
  303. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
  304. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
  305. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
  306. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
  307. package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
  308. package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
  309. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
  310. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
  311. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  312. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
  313. package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
  314. package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
  315. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  316. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
  317. package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
  318. package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
  319. package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
  320. package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
  321. package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
  322. package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
  323. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  324. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
  325. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  326. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
  327. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  328. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
  329. package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
  330. package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
  331. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  332. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
  333. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
  334. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
  335. package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
  336. package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
  337. package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
  338. package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
  339. package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
  340. package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
  341. package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
  342. package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
  343. package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
  344. package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
  345. package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
  346. package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
  347. package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
  348. package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
  349. package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
  350. package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
  351. package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
  352. package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
  353. package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
  354. package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
  355. package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
  356. package/dist/conversion/conversion-v3/standards/errors.js +0 -27
  357. package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
  358. package/dist/conversion/conversion-v3/standards/index.js +0 -11
  359. package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
  360. package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
  361. package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
  362. package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
  363. package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
  364. package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
  365. package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
  366. package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
  367. package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
  368. package/dist/conversion/conversion-v3/types/config-types.js +0 -13
  369. package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
  370. package/dist/conversion/conversion-v3/types/index.js +0 -11
  371. package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
  372. package/dist/conversion/conversion-v3/types/node-types.js +0 -20
  373. package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
  374. package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
  375. package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
  376. package/dist/conversion/conversion-v3/types/request-types.js +0 -26
  377. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
  378. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
  379. package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
  380. package/dist/conversion/conversion-v3/validations/index.js +0 -7
  381. package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
  382. package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
  383. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
  384. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
  385. package/dist/conversion/hub/config/types.d.ts +0 -26
  386. package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
  387. package/dist/conversion/hub/core/hub-context.d.ts +0 -21
  388. package/dist/conversion/hub/core/index.d.ts +0 -3
  389. package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
  390. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
  391. package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
  392. package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
  393. package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
  394. package/dist/conversion/hub/hub-feature.d.ts +0 -1
  395. package/dist/conversion/hub/node-support.d.ts +0 -19
  396. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
  397. package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
  398. package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
  399. package/dist/conversion/hub/process/chat-process.d.ts +0 -13
  400. package/dist/conversion/hub/registry.d.ts +0 -28
  401. package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
  402. package/dist/conversion/hub/response/provider-response.d.ts +0 -20
  403. package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
  404. package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
  405. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
  406. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
  407. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
  408. package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
  409. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
  410. package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
  411. package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
  412. package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
  413. package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
  414. package/dist/conversion/hub/types/errors.d.ts +0 -5
  415. package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
  416. package/dist/conversion/hub/types/index.d.ts +0 -6
  417. package/dist/conversion/hub/types/json.d.ts +0 -9
  418. package/dist/conversion/hub/types/node.d.ts +0 -31
  419. package/dist/conversion/hub/types/standardized.d.ts +0 -94
  420. package/dist/conversion/schema-validator.d.ts +0 -7
  421. package/dist/conversion/shared/args-mapping.d.ts +0 -18
  422. package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
  423. package/dist/conversion/shared/jsonish.d.ts +0 -3
  424. package/dist/conversion/shared/mcp-injection.d.ts +0 -2
  425. package/dist/conversion/shared/media.d.ts +0 -1
  426. package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
  427. package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
  428. package/dist/conversion/shared/payload-budget.d.ts +0 -13
  429. package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
  430. package/dist/conversion/shared/responses-instructions.d.ts +0 -1
  431. package/dist/conversion/shared/responses-metadata.d.ts +0 -1
  432. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
  433. package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
  434. package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
  435. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  436. package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
  437. package/dist/conversion/shared/tool-governor.d.ts +0 -27
  438. package/dist/conversion/shared/tool-harvester.d.ts +0 -31
  439. package/dist/conversion/shared/tooling.d.ts +0 -26
  440. package/dist/conversion/types.d.ts +0 -33
  441. package/dist/core/index.d.ts +0 -6
  442. package/dist/core/index.js +0 -9
  443. package/dist/core/llmswitch-engine-v2.d.ts +0 -132
  444. package/dist/core/llmswitch-engine-v2.js +0 -649
  445. package/dist/core/llmswitch-factory-v2.d.ts +0 -123
  446. package/dist/core/llmswitch-factory-v2.js +0 -521
  447. package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
  448. package/dist/endpoints/base-endpoint-handler.js +0 -545
  449. package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
  450. package/dist/endpoints/chat-endpoint-handler.js +0 -218
  451. package/dist/endpoints/endpoint-router.d.ts +0 -127
  452. package/dist/endpoints/endpoint-router.js +0 -438
  453. package/dist/endpoints/index.d.ts +0 -13
  454. package/dist/endpoints/index.js +0 -11
  455. package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
  456. package/dist/endpoints/messages-endpoint-handler.js +0 -238
  457. package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
  458. package/dist/endpoints/responses-endpoint-handler.js +0 -233
  459. package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
  460. package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
  461. package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
  462. package/dist/filters/engine.d.ts +0 -16
  463. package/dist/filters/index.d.ts +0 -19
  464. package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
  465. package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
  466. package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
  467. package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
  468. package/dist/filters/special/request-tools-normalize.d.ts +0 -12
  469. package/dist/filters/special/response-finish-invariants.d.ts +0 -11
  470. package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
  471. package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
  472. package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
  473. package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
  474. package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
  475. package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
  476. package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
  477. package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
  478. package/dist/filters/special/tool-post-constraints.d.ts +0 -31
  479. package/dist/filters/types.d.ts +0 -68
  480. package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
  481. package/dist/filters/utils/snapshot-writer.d.ts +0 -10
  482. package/dist/guidance/index.d.ts +0 -3
  483. package/dist/hooks/hooks-integration.d.ts +0 -161
  484. package/dist/hooks/hooks-integration.js +0 -519
  485. package/dist/hooks/index.d.ts +0 -10
  486. package/dist/hooks/index.js +0 -13
  487. package/dist/html-to-markdown.d.ts +0 -5
  488. package/dist/html-to-markdown.js +0 -66
  489. package/dist/http/sse-response.d.ts +0 -22
  490. package/dist/router/virtual-router/bootstrap.d.ts +0 -6
  491. package/dist/router/virtual-router/classifier.d.ts +0 -10
  492. package/dist/router/virtual-router/engine.d.ts +0 -35
  493. package/dist/router/virtual-router/error-center.d.ts +0 -10
  494. package/dist/router/virtual-router/features.d.ts +0 -3
  495. package/dist/router/virtual-router/health-manager.d.ts +0 -18
  496. package/dist/router/virtual-router/load-balancer.d.ts +0 -18
  497. package/dist/router/virtual-router/provider-registry.d.ts +0 -11
  498. package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  499. package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  500. package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  501. package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  502. package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  503. package/dist/sse/shared/chat-serializer.d.ts +0 -4
  504. package/dist/sse/shared/constants.d.ts +0 -272
  505. package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
  506. package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  507. package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  508. package/dist/sse/shared/serializers/types.d.ts +0 -51
  509. package/dist/sse/shared/utils.d.ts +0 -254
  510. package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  511. package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
  512. package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
  513. package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
  514. package/dist/tools/proxy/executors/web-fetch.js +0 -39
  515. package/dist/tools/proxy/registry.d.ts +0 -8
  516. package/dist/tools/proxy/registry.js +0 -14
  517. package/dist/tools/proxy/types.d.ts +0 -29
  518. package/dist/tools/tool-registry.d.ts +0 -8
  519. package/dist/tools/web-fetch-html.d.ts +0 -15
  520. package/dist/tools/web-fetch-html.js +0 -83
  521. package/dist/utils/conversion-adapter.d.ts +0 -65
  522. package/dist/utils/conversion-adapter.js +0 -183
  523. package/dist/utils/error-factory.d.ts +0 -88
  524. package/dist/utils/error-factory.js +0 -138
  525. package/dist/utils/error-utils.d.ts +0 -334
  526. package/dist/utils/error-utils.js +0 -782
  527. package/dist/utils/index.d.ts +0 -8
  528. package/dist/utils/index.js +0 -13
  529. package/dist/utils/performance-utils.d.ts +0 -205
  530. package/dist/utils/performance-utils.js +0 -440
  531. package/dist/utils/profile-mapper.d.ts +0 -32
  532. package/dist/utils/profile-mapper.js +0 -269
  533. package/dist/utils/request-processor.d.ts +0 -52
  534. package/dist/utils/request-processor.js +0 -210
  535. package/dist/utils/request-utils.d.ts +0 -117
  536. package/dist/utils/request-utils.js +0 -333
  537. package/dist/utils/response-utils.d.ts +0 -127
  538. package/dist/utils/response-utils.js +0 -516
  539. package/dist/utils/token-counter.d.ts +0 -89
  540. package/dist/utils/token-counter.js +0 -541
  541. /package/dist/{tools/proxy → conversion/hub/tool-governance}/types.js +0 -0
  542. /package/dist/conversion/shared/{responses-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
@@ -1,3 +1,8 @@
1
+ import { createBridgeActionState, runBridgeActionPipeline } from '../shared/bridge-actions.js';
2
+ import { resolveBridgePolicy, resolvePolicyActions } from '../shared/bridge-policies.js';
3
+ import { normalizeChatMessageContent } from '../shared/chat-output-normalizer.js';
4
+ import { mapBridgeToolsToChat } from '../shared/tool-mapping.js';
5
+ import { prepareGeminiToolsForBridge } from '../shared/gemini-tool-utils.js';
1
6
  function isObject(v) {
2
7
  return !!v && typeof v === 'object' && !Array.isArray(v);
3
8
  }
@@ -48,49 +53,6 @@ function mapChatRoleToGemini(role) {
48
53
  return 'tool';
49
54
  return 'user';
50
55
  }
51
- function mapGeminiToolsToOpenAI(tools) {
52
- const out = [];
53
- if (!tools)
54
- return out;
55
- const arr = Array.isArray(tools) ? tools : [tools];
56
- for (const t of arr) {
57
- if (!t || typeof t !== 'object')
58
- continue;
59
- const tObj = t;
60
- const fds = Array.isArray(tObj.functionDeclarations) ? tObj.functionDeclarations : [];
61
- if (fds.length) {
62
- for (const fd of fds) {
63
- if (!fd || typeof fd !== 'object')
64
- continue;
65
- const name = typeof fd.name === 'string' ? String(fd.name) : undefined;
66
- if (!name)
67
- continue;
68
- const description = typeof fd.description === 'string' ? String(fd.description) : undefined;
69
- const parameters = isObject(fd.parameters)
70
- ? JSON.parse(JSON.stringify(fd.parameters))
71
- : { type: 'object', properties: {} };
72
- const fn = { name, parameters };
73
- if (description)
74
- fn.description = description;
75
- out.push({ type: 'function', function: fn });
76
- }
77
- continue;
78
- }
79
- // 单个函数声明形状:直接把对象视为 FunctionDeclaration
80
- const name = typeof tObj.name === 'string' ? String(tObj.name) : undefined;
81
- if (name) {
82
- const description = typeof tObj.description === 'string' ? String(tObj.description) : undefined;
83
- const parameters = isObject(tObj.parameters)
84
- ? JSON.parse(JSON.stringify(tObj.parameters))
85
- : { type: 'object', properties: {} };
86
- const fn = { name, parameters };
87
- if (description)
88
- fn.description = description;
89
- out.push({ type: 'function', function: fn });
90
- }
91
- }
92
- return out;
93
- }
94
56
  export function buildOpenAIChatFromGeminiRequest(payload) {
95
57
  const messages = [];
96
58
  // systemInstruction → Chat system 消息
@@ -160,8 +122,21 @@ export function buildOpenAIChatFromGeminiRequest(payload) {
160
122
  continue;
161
123
  }
162
124
  }
163
- if (textParts.length > 0 || toolCalls.length > 0) {
164
- const msg = { role, content: textParts.join('\n') };
125
+ const combinedText = textParts.join('\n');
126
+ const normalized = combinedText.length ? normalizeChatMessageContent(combinedText) : { contentText: undefined, reasoningText: undefined };
127
+ const hasText = typeof normalized.contentText === 'string' && normalized.contentText.length > 0;
128
+ const reasoningChunks = [];
129
+ if (typeof normalized.reasoningText === 'string' && normalized.reasoningText.trim().length) {
130
+ reasoningChunks.push(normalized.reasoningText.trim());
131
+ }
132
+ if (hasText || toolCalls.length > 0 || reasoningChunks.length > 0) {
133
+ const msg = {
134
+ role,
135
+ content: normalized.contentText ?? combinedText ?? ''
136
+ };
137
+ if (reasoningChunks.length) {
138
+ msg.reasoning_content = reasoningChunks.join('\n');
139
+ }
165
140
  if (toolCalls.length)
166
141
  msg.tool_calls = toolCalls;
167
142
  messages.push(msg);
@@ -178,6 +153,7 @@ export function buildOpenAIChatFromGeminiResponse(payload) {
178
153
  const role = mapGeminiRoleToChat(content.role);
179
154
  const parts = Array.isArray(content.parts) ? content.parts : [];
180
155
  const textParts = [];
156
+ const reasoningParts = [];
181
157
  const toolCalls = [];
182
158
  for (const part of parts) {
183
159
  if (!part || typeof part !== 'object')
@@ -189,6 +165,21 @@ export function buildOpenAIChatFromGeminiResponse(payload) {
189
165
  textParts.push(t);
190
166
  continue;
191
167
  }
168
+ if (Array.isArray(pObj.content)) {
169
+ for (const inner of pObj.content) {
170
+ if (typeof inner === 'string') {
171
+ textParts.push(inner);
172
+ }
173
+ else if (inner && typeof inner === 'object' && typeof inner.text === 'string') {
174
+ textParts.push(inner.text);
175
+ }
176
+ }
177
+ continue;
178
+ }
179
+ if (typeof pObj.reasoning === 'string') {
180
+ reasoningParts.push(pObj.reasoning);
181
+ continue;
182
+ }
192
183
  if (pObj.functionCall && typeof pObj.functionCall === 'object') {
193
184
  const fc = pObj.functionCall;
194
185
  const name = typeof fc.name === 'string' ? String(fc.name) : undefined;
@@ -234,13 +225,42 @@ export function buildOpenAIChatFromGeminiResponse(payload) {
234
225
  usage.completion_tokens = completionTokens;
235
226
  if (Number.isFinite(totalTokens))
236
227
  usage.total_tokens = totalTokens;
228
+ const combinedText = textParts.join('\n');
229
+ const normalized = combinedText.length ? normalizeChatMessageContent(combinedText) : { contentText: undefined, reasoningText: undefined };
237
230
  const chatMsg = {
238
231
  role,
239
- content: textParts.join('\n')
232
+ content: normalized.contentText ?? combinedText ?? ''
240
233
  };
234
+ if (typeof normalized.reasoningText === 'string' && normalized.reasoningText.trim().length) {
235
+ reasoningParts.push(normalized.reasoningText.trim());
236
+ }
237
+ if (reasoningParts.length) {
238
+ chatMsg.reasoning_content = reasoningParts.join('\n');
239
+ }
241
240
  if (toolCalls.length) {
242
241
  chatMsg.tool_calls = toolCalls;
243
242
  }
243
+ try {
244
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'gemini-chat' });
245
+ const actions = resolvePolicyActions(bridgePolicy, 'response_inbound');
246
+ if (actions?.length) {
247
+ const actionState = createBridgeActionState({
248
+ messages: [chatMsg],
249
+ rawResponse: isObject(payload) ? payload : undefined
250
+ });
251
+ runBridgeActionPipeline({
252
+ stage: 'response_inbound',
253
+ actions,
254
+ protocol: bridgePolicy?.protocol ?? 'gemini-chat',
255
+ moduleType: bridgePolicy?.moduleType ?? 'gemini-chat',
256
+ requestId: typeof payload?.id === 'string' ? String(payload.id) : undefined,
257
+ state: actionState
258
+ });
259
+ }
260
+ }
261
+ catch {
262
+ // best-effort policy execution
263
+ }
244
264
  const chatResp = {
245
265
  id: payload?.id || `chatcmpl_${Date.now()}`,
246
266
  object: 'chat.completion',
@@ -276,6 +296,28 @@ export function buildGeminiFromOpenAIChat(chatResp) {
276
296
  return 'STOP';
277
297
  })();
278
298
  const baseRole = mapChatRoleToGemini(msg.role || 'assistant');
299
+ if (msg) {
300
+ try {
301
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'gemini-chat' });
302
+ const actions = resolvePolicyActions(bridgePolicy, 'response_outbound');
303
+ if (actions?.length) {
304
+ const actionState = createBridgeActionState({
305
+ messages: [msg]
306
+ });
307
+ runBridgeActionPipeline({
308
+ stage: 'response_outbound',
309
+ actions,
310
+ protocol: bridgePolicy?.protocol ?? 'gemini-chat',
311
+ moduleType: bridgePolicy?.moduleType ?? 'gemini-chat',
312
+ requestId: typeof chatResp?.id === 'string' ? String(chatResp.id) : undefined,
313
+ state: actionState
314
+ });
315
+ }
316
+ }
317
+ catch {
318
+ // ignore policy failures
319
+ }
320
+ }
279
321
  const parts = [];
280
322
  const contentText = (() => {
281
323
  const raw = msg.content;
@@ -377,8 +419,9 @@ export class GeminiOpenAIConversionCodec {
377
419
  const { messages } = buildOpenAIChatFromGeminiRequest(payload);
378
420
  const out = { model, messages };
379
421
  try {
380
- const tools = mapGeminiToolsToOpenAI(payload?.tools);
381
- if (tools.length > 0)
422
+ const bridgeTools = prepareGeminiToolsForBridge(payload?.tools);
423
+ const tools = bridgeTools ? mapBridgeToolsToChat(bridgeTools) : undefined;
424
+ if (tools && tools.length > 0)
382
425
  out.tools = tools;
383
426
  }
384
427
  catch {
@@ -1,5 +1,5 @@
1
1
  import { buildResponsesPayloadFromChat, runStandardChatRequestFilters } from '../index.js';
2
- import { captureResponsesContext, buildChatRequestFromResponses } from '../shared/responses-request-adapter.js';
2
+ import { captureResponsesContext, buildChatRequestFromResponses } from '../responses/responses-openai-bridge.js';
3
3
  import { FilterEngine, ResponseToolTextCanonicalizeFilter, ResponseToolArgumentsStringifyFilter, ResponseFinishInvariantsFilter } from '../../filters/index.js';
4
4
  // Ported from root package (no behavior change). Types relaxed.
5
5
  export class ResponsesOpenAIConversionCodec {
@@ -82,7 +82,14 @@ export class ResponsesOpenAIConversionCodec {
82
82
  entryEndpoint: context.entryEndpoint ?? dto.metadata?.entryEndpoint ?? context.endpoint,
83
83
  endpoint: context.endpoint ?? dto.metadata?.endpoint
84
84
  };
85
- return runStandardChatRequestFilters(chatRequest, profile, ctxForFilters);
85
+ const filtered = await runStandardChatRequestFilters(chatRequest, profile, ctxForFilters);
86
+ if (filtered && typeof filtered === 'object') {
87
+ const maybe = filtered;
88
+ if (maybe.max_tokens === undefined && typeof maybe.max_output_tokens === 'number') {
89
+ maybe.max_tokens = maybe.max_output_tokens;
90
+ }
91
+ }
92
+ return filtered;
86
93
  }
87
94
  async convertResponse(payload, _profile, context) {
88
95
  await this.ensureInit();
@@ -1,6 +1,8 @@
1
+ import { normalizeReasoningInAnthropicPayload } from '../../shared/reasoning-normalizer.js';
1
2
  export class AnthropicFormatAdapter {
2
3
  protocol = 'anthropic-messages';
3
4
  async parseRequest(original, _ctx) {
5
+ normalizeReasoningInAnthropicPayload(original);
4
6
  return {
5
7
  protocol: this.protocol,
6
8
  direction: 'request',
@@ -11,6 +13,7 @@ export class AnthropicFormatAdapter {
11
13
  return format.payload;
12
14
  }
13
15
  async parseResponse(original, _ctx) {
16
+ normalizeReasoningInAnthropicPayload(original);
14
17
  return {
15
18
  protocol: this.protocol,
16
19
  direction: 'response',
@@ -1,6 +1,8 @@
1
+ import { normalizeReasoningInChatPayload } from '../../shared/reasoning-normalizer.js';
1
2
  export class ChatFormatAdapter {
2
3
  protocol = 'openai-chat';
3
4
  async parseRequest(original, _ctx) {
5
+ normalizeReasoningInChatPayload(original);
4
6
  return {
5
7
  protocol: this.protocol,
6
8
  direction: 'request',
@@ -11,6 +13,7 @@ export class ChatFormatAdapter {
11
13
  return format.payload;
12
14
  }
13
15
  async parseResponse(original, _ctx) {
16
+ normalizeReasoningInChatPayload(original);
14
17
  return {
15
18
  protocol: this.protocol,
16
19
  direction: 'response',
@@ -1,6 +1,8 @@
1
+ import { normalizeReasoningInGeminiPayload } from '../../shared/reasoning-normalizer.js';
1
2
  export class GeminiFormatAdapter {
2
3
  protocol = 'gemini-chat';
3
4
  async parseRequest(original, _ctx) {
5
+ normalizeReasoningInGeminiPayload(original);
4
6
  return {
5
7
  protocol: this.protocol,
6
8
  direction: 'request',
@@ -11,6 +13,7 @@ export class GeminiFormatAdapter {
11
13
  return format.payload;
12
14
  }
13
15
  async parseResponse(original, _ctx) {
16
+ normalizeReasoningInGeminiPayload(original);
14
17
  return {
15
18
  protocol: this.protocol,
16
19
  direction: 'response',
@@ -6,6 +6,8 @@ interface ResponsesFormatPayload extends JsonObject {
6
6
  input?: JsonValue[];
7
7
  tools?: JsonValue[];
8
8
  tool_outputs?: JsonValue[];
9
+ output?: JsonValue[];
10
+ id?: string;
9
11
  }
10
12
  export declare class ResponsesFormatAdapter implements FormatAdapter {
11
13
  readonly protocol = "openai-responses";
@@ -1,6 +1,11 @@
1
+ import { normalizeReasoningInResponsesPayload } from '../../shared/reasoning-normalizer.js';
1
2
  export class ResponsesFormatAdapter {
2
3
  protocol = 'openai-responses';
3
4
  async parseRequest(original, _ctx) {
5
+ normalizeReasoningInResponsesPayload(original, {
6
+ includeInput: true,
7
+ includeInstructions: true
8
+ });
4
9
  return {
5
10
  protocol: this.protocol,
6
11
  direction: 'request',
@@ -11,6 +16,10 @@ export class ResponsesFormatAdapter {
11
16
  return format.payload;
12
17
  }
13
18
  async parseResponse(original, _ctx) {
19
+ normalizeReasoningInResponsesPayload(original, {
20
+ includeOutput: true,
21
+ includeRequiredAction: true
22
+ });
14
23
  return {
15
24
  protocol: this.protocol,
16
25
  direction: 'response',
@@ -102,6 +102,7 @@ function deriveAdapterContext(context, fallbackProtocol) {
102
102
  (typeof metadata.providerProtocol === 'string' ? metadata.providerProtocol : undefined) ||
103
103
  fallbackProtocol;
104
104
  const streamingHint = metadata.stream === true ? 'force' : metadata.stream === false ? 'disable' : 'auto';
105
+ const toolCallIdStyle = typeof metadata.toolCallIdStyle === 'string' ? metadata.toolCallIdStyle : undefined;
105
106
  return {
106
107
  requestId: context.request.id,
107
108
  entryEndpoint: (typeof requestContext.entryEndpoint === 'string' ? requestContext.entryEndpoint : context.request.endpoint) ||
@@ -110,6 +111,7 @@ function deriveAdapterContext(context, fallbackProtocol) {
110
111
  providerId: (target?.providerKey || metadata.providerKey),
111
112
  routeId: metadata.routeName,
112
113
  profileId: metadata.pipelineId,
113
- streamingHint
114
+ streamingHint,
115
+ toolCallIdStyle
114
116
  };
115
117
  }
@@ -85,7 +85,7 @@ export class HubPipeline {
85
85
  });
86
86
  return {
87
87
  processedRequest: processResult.processedRequest,
88
- nodeResult: this.convertV3NodeResult('hub-chat-process', processResult.nodeResult)
88
+ nodeResult: this.convertProcessNodeResult('hub-chat-process', processResult.nodeResult)
89
89
  };
90
90
  }
91
91
  routeRequest(request, normalized) {
@@ -121,6 +121,9 @@ export class HubPipeline {
121
121
  metadata.providerType = target.providerType;
122
122
  metadata.modelId = target.modelId;
123
123
  metadata.processMode = target.processMode || 'chat';
124
+ if (target.responsesConfig?.toolCallIdStyle) {
125
+ metadata.toolCallIdStyle = target.responsesConfig.toolCallIdStyle;
126
+ }
124
127
  if (originalModel && typeof originalModel === 'string' && originalModel.trim()) {
125
128
  const trimmed = originalModel.trim();
126
129
  if (typeof metadata.originalModelId !== 'string' || !metadata.originalModelId) {
@@ -237,9 +240,7 @@ export class HubPipeline {
237
240
  const entryEndpoint = typeof metadataRecord.entryEndpoint === 'string'
238
241
  ? normalizeEndpoint(metadataRecord.entryEndpoint)
239
242
  : endpoint;
240
- const providerProtocol = typeof metadataRecord.providerProtocol === 'string'
241
- ? metadataRecord.providerProtocol
242
- : inferProviderProtocol(entryEndpoint);
243
+ const providerProtocol = resolveProviderProtocol(metadataRecord.providerProtocol);
243
244
  const processMode = metadataRecord.processMode === 'passthrough' ? 'passthrough' : 'chat';
244
245
  const direction = metadataRecord.direction === 'response' ? 'response' : 'request';
245
246
  const stage = metadataRecord.stage === 'outbound' ? 'outbound' : 'inbound';
@@ -299,17 +300,16 @@ export class HubPipeline {
299
300
  error: result.error
300
301
  };
301
302
  }
302
- convertV3NodeResult(id, result) {
303
+ convertProcessNodeResult(id, result) {
303
304
  return {
304
305
  id,
305
306
  success: result.success,
306
307
  metadata: result.metadata,
307
308
  error: result.error
308
309
  ? {
309
- code: result.error.code,
310
+ code: result.error.code ?? 'hub_chat_process_error',
310
311
  message: result.error.message,
311
- details: result.error.details,
312
- cause: result.error.cause
312
+ details: result.error.details
313
313
  }
314
314
  : undefined
315
315
  };
@@ -359,15 +359,11 @@ export class HubPipeline {
359
359
  }
360
360
  }
361
361
  resolveSseProtocol(context) {
362
- const providerMeta = context.metadata.provider ?? undefined;
363
- const profile = typeof providerMeta?.profile === 'string' ? providerMeta.profile : undefined;
364
- const providerProtocol = typeof context.metadata.providerProtocol === 'string'
365
- ? context.metadata.providerProtocol
366
- : context.providerProtocol;
367
- const routeHint = typeof context.metadata.routeHint === 'string'
368
- ? context.metadata.routeHint
369
- : undefined;
370
- return inferSseProtocol(routeHint, providerProtocol, context.entryEndpoint);
362
+ const explicitProtocol = resolveSseProtocolFromMetadata(context.metadata);
363
+ if (explicitProtocol) {
364
+ return explicitProtocol;
365
+ }
366
+ return context.providerProtocol;
371
367
  }
372
368
  extractModelHint(metadata) {
373
369
  if (typeof metadata.model === 'string' && metadata.model.trim()) {
@@ -396,26 +392,34 @@ function normalizeEndpoint(endpoint) {
396
392
  const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
397
393
  return normalized.replace(/\/{2,}/g, '/');
398
394
  }
399
- function inferProviderProtocol(endpoint) {
400
- const lowered = endpoint.toLowerCase();
401
- if (lowered.includes('/v1/messages'))
402
- return 'anthropic-messages';
403
- if (lowered.includes('/v1/responses'))
404
- return 'openai-responses';
405
- if (lowered.includes('/v1beta'))
406
- return 'gemini-chat';
407
- return 'openai-chat';
395
+ function resolveProviderProtocol(value) {
396
+ if (typeof value !== 'string' || !value.trim()) {
397
+ return 'openai-chat';
398
+ }
399
+ const normalized = value.trim().toLowerCase();
400
+ const mapped = PROVIDER_PROTOCOL_ALIASES[normalized];
401
+ if (mapped) {
402
+ return mapped;
403
+ }
404
+ throw new Error(`[HubPipeline] Unsupported providerProtocol "${value}". Configure a valid protocol (openai-chat|openai-responses|anthropic-messages|gemini-chat).`);
408
405
  }
409
- function inferSseProtocol(routeHint, providerProtocol, entryEndpoint) {
410
- const candidates = [routeHint, providerProtocol, entryEndpoint].filter((value) => typeof value === 'string' && value.length > 0);
411
- for (const candidate of candidates) {
412
- const lowered = candidate.toLowerCase();
413
- if (lowered.includes('responses')) {
414
- return 'openai-responses';
415
- }
416
- if (lowered.includes('messages') || lowered.includes('anthropic')) {
417
- return 'anthropic-messages';
418
- }
406
+ const PROVIDER_PROTOCOL_ALIASES = {
407
+ 'openai-chat': 'openai-chat',
408
+ openai: 'openai-chat',
409
+ chat: 'openai-chat',
410
+ 'responses': 'openai-responses',
411
+ 'openai-responses': 'openai-responses',
412
+ 'anthropic': 'anthropic-messages',
413
+ 'anthropic-messages': 'anthropic-messages',
414
+ 'messages': 'anthropic-messages',
415
+ 'gemini': 'gemini-chat',
416
+ 'google-gemini': 'gemini-chat',
417
+ 'gemini-chat': 'gemini-chat'
418
+ };
419
+ function resolveSseProtocolFromMetadata(metadata) {
420
+ const candidate = metadata.sseProtocol ?? metadata.clientSseProtocol ?? metadata.routeSseProtocol;
421
+ if (typeof candidate !== 'string' || !candidate.trim()) {
422
+ return undefined;
419
423
  }
420
- return 'openai-chat';
424
+ return resolveProviderProtocol(candidate);
421
425
  }