@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,5 +1,10 @@
1
1
  import { isJsonObject, jsonClone } from '../types/json.js';
2
2
  import { buildOpenAIChatFromGeminiRequest } from '../../codecs/gemini-openai-codec.js';
3
+ import { createBridgeActionState, runBridgeActionPipeline } from '../../shared/bridge-actions.js';
4
+ import { resolveBridgePolicy, resolvePolicyActions } from '../../shared/bridge-policies.js';
5
+ import { encodeMetadataPassthrough, extractMetadataPassthrough } from '../../shared/metadata-passthrough.js';
6
+ import { mapBridgeToolsToChat, mapChatToolsToBridge } from '../../shared/tool-mapping.js';
7
+ import { prepareGeminiToolsForBridge, buildGeminiToolsFromBridge } from '../../shared/gemini-tool-utils.js';
3
8
  const GENERATION_CONFIG_KEYS = [
4
9
  { source: 'temperature', target: 'temperature' },
5
10
  { source: 'topP', target: 'top_p' },
@@ -9,65 +14,8 @@ const GENERATION_CONFIG_KEYS = [
9
14
  { source: 'responseMimeType', target: 'response_mime_type' },
10
15
  { source: 'stopSequences', target: 'stop_sequences' }
11
16
  ];
12
- const GEMINI_TOP_LEVEL_FIELDS = new Set([
13
- 'model',
14
- 'contents',
15
- 'tools',
16
- 'systemInstruction',
17
- 'generationConfig',
18
- 'safetySettings',
19
- 'metadata',
20
- 'toolConfig'
21
- ]);
22
17
  const PASSTHROUGH_METADATA_PREFIX = 'rcc_passthrough_';
23
18
  const PASSTHROUGH_PARAMETERS = ['tool_choice'];
24
- function encodePassthroughParametersFromChat(chat) {
25
- if (!chat.parameters)
26
- return undefined;
27
- const encoded = {};
28
- for (const key of PASSTHROUGH_PARAMETERS) {
29
- const value = chat.parameters[key];
30
- if (value === undefined)
31
- continue;
32
- try {
33
- encoded[`${PASSTHROUGH_METADATA_PREFIX}${key}`] = JSON.stringify(value);
34
- }
35
- catch {
36
- continue;
37
- }
38
- }
39
- return Object.keys(encoded).length ? encoded : undefined;
40
- }
41
- function extractPassthroughParametersFromMetadata(metadataField) {
42
- if (!metadataField)
43
- return {};
44
- const cloned = jsonClone(metadataField);
45
- const passthrough = {};
46
- let mutated = false;
47
- for (const key of Object.keys(cloned)) {
48
- if (!key.startsWith(PASSTHROUGH_METADATA_PREFIX))
49
- continue;
50
- const paramKey = key.slice(PASSTHROUGH_METADATA_PREFIX.length);
51
- if (!PASSTHROUGH_PARAMETERS.includes(paramKey))
52
- continue;
53
- const rawValue = cloned[key];
54
- if (typeof rawValue !== 'string')
55
- continue;
56
- try {
57
- const parsed = rawValue ? JSON.parse(rawValue) : undefined;
58
- passthrough[paramKey] = parsed;
59
- delete cloned[key];
60
- mutated = true;
61
- }
62
- catch {
63
- continue;
64
- }
65
- }
66
- return {
67
- cleaned: mutated ? (Object.keys(cloned).length ? cloned : undefined) : cloned,
68
- passthrough: Object.keys(passthrough).length ? passthrough : undefined
69
- };
70
- }
71
19
  function normalizeToolOutputs(messages, missing) {
72
20
  const outputs = [];
73
21
  messages.forEach((msg, index) => {
@@ -119,53 +67,6 @@ function collectSystemSegments(systemInstruction) {
119
67
  const text = flatten(systemInstruction).trim();
120
68
  return text ? [text] : [];
121
69
  }
122
- function normalizeGeminiTools(rawTools, missing) {
123
- if (!rawTools)
124
- return undefined;
125
- const arr = Array.isArray(rawTools) ? rawTools : [rawTools];
126
- const tools = [];
127
- arr.forEach((entry, index) => {
128
- if (!entry || typeof entry !== 'object') {
129
- missing.push({ path: `tools[${index}]`, reason: 'invalid_entry', originalValue: jsonClone(entry) });
130
- return;
131
- }
132
- const obj = entry;
133
- const declarations = Array.isArray(obj.functionDeclarations) ? obj.functionDeclarations : undefined;
134
- if (declarations && declarations.length) {
135
- declarations.forEach((decl, declIndex) => {
136
- if (!decl || typeof decl !== 'object') {
137
- missing.push({ path: `tools[${index}].functionDeclarations[${declIndex}]`, reason: 'invalid_entry' });
138
- return;
139
- }
140
- const def = decl;
141
- const name = typeof def.name === 'string' ? def.name : undefined;
142
- if (!name)
143
- return;
144
- tools.push({
145
- type: 'function',
146
- function: {
147
- name,
148
- description: typeof def.description === 'string' ? def.description : undefined,
149
- parameters: isJsonObject(def.parameters) ? jsonClone(def.parameters) : { type: 'object', properties: {} }
150
- }
151
- });
152
- });
153
- return;
154
- }
155
- const name = typeof obj.name === 'string' ? obj.name : undefined;
156
- if (!name)
157
- return;
158
- tools.push({
159
- type: 'function',
160
- function: {
161
- name,
162
- description: typeof obj.description === 'string' ? obj.description : undefined,
163
- parameters: isJsonObject(obj.parameters) ? jsonClone(obj.parameters) : { type: 'object', properties: {} }
164
- }
165
- });
166
- });
167
- return tools.length ? tools : undefined;
168
- }
169
70
  function collectParameters(payload) {
170
71
  const params = {};
171
72
  if (typeof payload.model === 'string') {
@@ -189,15 +90,6 @@ function collectParameters(payload) {
189
90
  }
190
91
  return Object.keys(params).length ? params : undefined;
191
92
  }
192
- function collectExtraFields(payload) {
193
- const extras = {};
194
- for (const key of Object.keys(payload)) {
195
- if (GEMINI_TOP_LEVEL_FIELDS.has(key))
196
- continue;
197
- extras[key] = payload[key];
198
- }
199
- return Object.keys(extras).length ? extras : undefined;
200
- }
201
93
  function buildGeminiRequestFromChat(chat, metadata) {
202
94
  const contents = [];
203
95
  for (const message of chat.messages) {
@@ -276,7 +168,11 @@ function buildGeminiRequestFromChat(chat, metadata) {
276
168
  }
277
169
  }
278
170
  if (chat.tools && chat.tools.length) {
279
- request.tools = buildGeminiToolsFromChat(chat.tools);
171
+ const bridgeDefs = mapChatToolsToBridge(chat.tools);
172
+ const geminiTools = buildGeminiToolsFromBridge(bridgeDefs);
173
+ if (geminiTools) {
174
+ request.tools = geminiTools;
175
+ }
280
176
  }
281
177
  const generationConfig = buildGenerationConfigFromParameters(chat.parameters || {});
282
178
  if (Object.keys(generationConfig).length) {
@@ -309,7 +205,10 @@ function buildGeminiRequestFromChat(chat, metadata) {
309
205
  request.metadata = request.metadata ?? {};
310
206
  request.metadata.__rcc_tools_field_present = '1';
311
207
  }
312
- const passthrough = encodePassthroughParametersFromChat(chat);
208
+ const passthrough = encodeMetadataPassthrough(chat.parameters, {
209
+ prefix: PASSTHROUGH_METADATA_PREFIX,
210
+ keys: PASSTHROUGH_PARAMETERS
211
+ });
313
212
  if (passthrough) {
314
213
  request.metadata = request.metadata ?? {};
315
214
  for (const [key, value] of Object.entries(passthrough)) {
@@ -318,26 +217,6 @@ function buildGeminiRequestFromChat(chat, metadata) {
318
217
  }
319
218
  return request;
320
219
  }
321
- function buildGeminiToolsFromChat(tools) {
322
- const geminiTools = [];
323
- tools.forEach((tool) => {
324
- if (!tool || tool.type !== 'function')
325
- return;
326
- const fn = tool.function;
327
- if (!fn || typeof fn.name !== 'string')
328
- return;
329
- geminiTools.push({
330
- functionDeclarations: [
331
- {
332
- name: fn.name,
333
- description: fn.description,
334
- parameters: cloneAsJsonValue(fn.parameters ?? { type: 'object', properties: {} })
335
- }
336
- ]
337
- });
338
- });
339
- return geminiTools;
340
- }
341
220
  function buildGenerationConfigFromParameters(parameters) {
342
221
  const config = {};
343
222
  for (const { source, target } of GENERATION_CONFIG_KEYS) {
@@ -391,12 +270,13 @@ export class GeminiSemanticMapper {
391
270
  async toChat(format, ctx) {
392
271
  const payload = (format.payload ?? {});
393
272
  const missing = [];
394
- const { messages } = buildOpenAIChatFromGeminiRequest(payload);
273
+ const { messages: builtMessages } = buildOpenAIChatFromGeminiRequest(payload);
274
+ let messages = Array.isArray(builtMessages) ? builtMessages : [];
395
275
  if (!Array.isArray(payload.contents)) {
396
276
  missing.push({ path: 'contents', reason: 'absent' });
397
277
  }
398
- const toolOutputs = normalizeToolOutputs(messages, missing);
399
- const tools = payload.tools ? normalizeGeminiTools(payload.tools, missing) : undefined;
278
+ const bridgeTools = prepareGeminiToolsForBridge(payload.tools, missing);
279
+ const tools = bridgeTools ? mapBridgeToolsToChat(bridgeTools) : undefined;
400
280
  let parameters = collectParameters(payload);
401
281
  const metadata = { context: ctx };
402
282
  const systemSegments = collectSystemSegments(payload.systemInstruction);
@@ -414,15 +294,38 @@ export class GeminiSemanticMapper {
414
294
  if (missing.length) {
415
295
  metadata.missingFields = missing;
416
296
  }
417
- const extraFields = collectExtraFields(payload);
418
- if (extraFields) {
419
- metadata.extraFields = extraFields;
297
+ try {
298
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'gemini-chat' });
299
+ const actions = resolvePolicyActions(bridgePolicy, 'request_inbound');
300
+ if (actions?.length) {
301
+ const actionState = createBridgeActionState({
302
+ messages: messages,
303
+ rawRequest: payload,
304
+ metadata: metadata
305
+ });
306
+ runBridgeActionPipeline({
307
+ stage: 'request_inbound',
308
+ actions,
309
+ protocol: bridgePolicy?.protocol ?? 'gemini-chat',
310
+ moduleType: bridgePolicy?.moduleType ?? 'gemini-chat',
311
+ requestId: ctx.requestId,
312
+ state: actionState
313
+ });
314
+ messages = actionState.messages;
315
+ }
420
316
  }
421
- const passthrough = extractPassthroughParametersFromMetadata(payload.metadata);
317
+ catch {
318
+ // best-effort policy execution
319
+ }
320
+ const toolOutputs = normalizeToolOutputs(messages, missing);
321
+ const passthrough = extractMetadataPassthrough(payload.metadata, {
322
+ prefix: PASSTHROUGH_METADATA_PREFIX,
323
+ keys: PASSTHROUGH_PARAMETERS
324
+ });
422
325
  if (passthrough.passthrough) {
423
326
  parameters = { ...(parameters || {}), ...passthrough.passthrough };
424
327
  }
425
- const providerMetadataSource = passthrough.cleaned ?? payload.metadata;
328
+ const providerMetadataSource = passthrough.metadata ?? payload.metadata;
426
329
  if (providerMetadataSource) {
427
330
  const providerMetadata = jsonClone(providerMetadataSource);
428
331
  let toolsFieldPresent = false;
@@ -465,6 +368,36 @@ export class GeminiSemanticMapper {
465
368
  }
466
369
  async fromChat(chat, ctx) {
467
370
  const envelopePayload = buildGeminiRequestFromChat(chat, chat.metadata);
371
+ try {
372
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'gemini-chat' });
373
+ const actions = resolvePolicyActions(bridgePolicy, 'request_outbound');
374
+ if (actions?.length) {
375
+ const capturedToolResults = Array.isArray(chat.toolOutputs)
376
+ ? chat.toolOutputs.map((entry) => ({
377
+ tool_call_id: entry.tool_call_id,
378
+ output: entry.content,
379
+ name: entry.name
380
+ }))
381
+ : undefined;
382
+ const actionState = createBridgeActionState({
383
+ messages: Array.isArray(chat.messages) ? chat.messages : [],
384
+ rawRequest: envelopePayload,
385
+ metadata: chat.metadata,
386
+ capturedToolResults
387
+ });
388
+ runBridgeActionPipeline({
389
+ stage: 'request_outbound',
390
+ actions,
391
+ protocol: bridgePolicy?.protocol ?? 'gemini-chat',
392
+ moduleType: bridgePolicy?.moduleType ?? 'gemini-chat',
393
+ requestId: ctx.requestId,
394
+ state: actionState
395
+ });
396
+ }
397
+ }
398
+ catch {
399
+ // ignore policy failures
400
+ }
468
401
  return {
469
402
  protocol: 'gemini-chat',
470
403
  direction: 'response',
@@ -1,4 +1,6 @@
1
1
  import { isJsonObject, jsonClone } from '../types/json.js';
2
+ import { createBridgeActionState, runBridgeActionPipeline } from '../../shared/bridge-actions.js';
3
+ import { resolveBridgePolicy, resolvePolicyActions } from '../../shared/bridge-policies.js';
2
4
  import { captureResponsesContext, buildChatRequestFromResponses, buildResponsesRequestFromChat } from '../../responses/responses-openai-bridge.js';
3
5
  const RESPONSES_PARAMETER_KEYS = [
4
6
  'model',
@@ -20,34 +22,6 @@ const RESPONSES_PARAMETER_KEYS = [
20
22
  'stop_sequences',
21
23
  'modalities'
22
24
  ];
23
- const RESPONSES_TOP_LEVEL_FIELDS = new Set([
24
- 'input',
25
- 'tools',
26
- 'tool_outputs',
27
- 'instructions',
28
- 'response_id',
29
- 'previous_response_id',
30
- 'conversation',
31
- 'parallel_tool_calls',
32
- 'tool_choice',
33
- 'stream',
34
- 'metadata',
35
- 'include',
36
- 'store',
37
- 'user',
38
- 'response_format',
39
- 'model',
40
- 'temperature',
41
- 'top_p',
42
- 'top_k',
43
- 'max_tokens',
44
- 'max_output_tokens',
45
- 'logit_bias',
46
- 'seed',
47
- 'modalities',
48
- 'instructions_is_raw'
49
- ]);
50
- const RESPONSES_METADATA_SENTINEL_TOOLS = '__rcc_tools_field_present';
51
25
  function mapToolOutputs(entries, missing) {
52
26
  if (!entries || !entries.length)
53
27
  return undefined;
@@ -146,15 +120,6 @@ function normalizeMessages(value, missing) {
146
120
  });
147
121
  return messages;
148
122
  }
149
- function collectExtraFields(payload) {
150
- const extras = {};
151
- for (const key of Object.keys(payload)) {
152
- if (RESPONSES_TOP_LEVEL_FIELDS.has(key) || RESPONSES_PARAMETER_KEYS.includes(key))
153
- continue;
154
- extras[key] = payload[key];
155
- }
156
- return Object.keys(extras).length ? extras : undefined;
157
- }
158
123
  function serializeSystemContent(message) {
159
124
  if (!message)
160
125
  return undefined;
@@ -192,40 +157,37 @@ export class ResponsesSemanticMapper {
192
157
  const responsesContext = captureResponsesContext(payload, { route: { requestId: ctx.requestId } });
193
158
  const { request, toolsNormalized } = buildChatRequestFromResponses(payload, responsesContext);
194
159
  const missingFields = [];
195
- if (!responsesContext.instructions) {
196
- missingFields.push({ path: 'instructions', reason: 'absent' });
197
- }
198
160
  const messages = normalizeMessages(request.messages, missingFields);
199
161
  const toolOutputs = mapToolOutputs(payload.tool_outputs, missingFields);
200
162
  const parameters = collectParameters(payload, responsesContext.stream);
201
163
  const metadata = { context: ctx };
202
- if (payload.metadata && typeof payload.metadata === 'object') {
203
- const providerMetadata = jsonClone(payload.metadata);
204
- if (isJsonObject(providerMetadata)) {
205
- if (Object.prototype.hasOwnProperty.call(providerMetadata, RESPONSES_METADATA_SENTINEL_TOOLS)) {
206
- const sentinel = providerMetadata[RESPONSES_METADATA_SENTINEL_TOOLS];
207
- if (sentinel === '1' || sentinel === true) {
208
- metadata.toolsFieldPresent = true;
209
- }
210
- delete providerMetadata[RESPONSES_METADATA_SENTINEL_TOOLS];
211
- }
164
+ try {
165
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'openai-responses', moduleType: 'openai-responses' });
166
+ const actions = resolvePolicyActions(bridgePolicy, 'request_inbound');
167
+ if (actions?.length) {
168
+ const actionState = createBridgeActionState({
169
+ rawRequest: payload,
170
+ metadata: metadata
171
+ });
172
+ runBridgeActionPipeline({
173
+ stage: 'request_inbound',
174
+ actions,
175
+ protocol: bridgePolicy?.protocol ?? 'openai-responses',
176
+ moduleType: bridgePolicy?.moduleType ?? 'openai-responses',
177
+ requestId: ctx.requestId,
178
+ state: actionState
179
+ });
212
180
  }
213
- metadata.providerMetadata = providerMetadata;
181
+ }
182
+ catch {
183
+ // ignore policy hook failures
214
184
  }
215
185
  if (missingFields.length) {
216
186
  metadata.missingFields = missingFields;
217
187
  }
218
- const extraFields = collectExtraFields(payload);
219
- if (extraFields) {
220
- metadata.extraFields = extraFields;
221
- }
222
188
  if (responsesContext.responseFormat) {
223
189
  metadata.responseFormat = jsonClone(responsesContext.responseFormat);
224
190
  }
225
- const hasSystemMessage = messages.some(message => message?.role === 'system');
226
- if (!hasSystemMessage && typeof responsesContext.instructions === 'string' && responsesContext.instructions.length) {
227
- messages.unshift({ role: 'system', content: responsesContext.instructions });
228
- }
229
191
  return {
230
192
  messages,
231
193
  tools: normalizeTools(toolsNormalized, missingFields),
@@ -254,100 +216,6 @@ export class ResponsesSemanticMapper {
254
216
  : { originalSystemMessages };
255
217
  const responsesResult = buildResponsesRequestFromChat(requestShape, responsesContext);
256
218
  const responses = responsesResult.request;
257
- const normalizeUserInstructionFromMessage = (message) => {
258
- if (!message)
259
- return undefined;
260
- const content = message.content;
261
- if (typeof content === 'string') {
262
- const trimmed = content.trim();
263
- return trimmed.length ? trimmed : undefined;
264
- }
265
- if (Array.isArray(content)) {
266
- const fragments = [];
267
- for (const fragment of content) {
268
- if (typeof fragment === 'string') {
269
- fragments.push(fragment);
270
- }
271
- else if (fragment && typeof fragment === 'object') {
272
- const partText = typeof fragment.text === 'string'
273
- ? String(fragment.text)
274
- : (typeof fragment.content === 'string'
275
- ? String(fragment.content)
276
- : undefined);
277
- if (partText && partText.trim().length) {
278
- fragments.push(partText);
279
- }
280
- }
281
- }
282
- if (fragments.length) {
283
- const joined = fragments.join('').trim();
284
- return joined.length ? joined : undefined;
285
- }
286
- }
287
- return undefined;
288
- };
289
- const normalizeUserInstructionFromInput = (payload) => {
290
- const entries = Array.isArray(payload.input) ? payload.input : [];
291
- for (let i = entries.length - 1; i >= 0; i -= 1) {
292
- const entry = entries[i];
293
- const roleSource = entry.role ?? entry?.message?.role;
294
- const role = typeof roleSource === 'string' ? roleSource.toLowerCase() : '';
295
- if (role !== 'user')
296
- continue;
297
- const content = entry?.content ?? entry?.message?.content;
298
- if (typeof content === 'string') {
299
- const trimmed = content.trim();
300
- if (trimmed.length)
301
- return trimmed;
302
- continue;
303
- }
304
- if (Array.isArray(content)) {
305
- const parts = [];
306
- for (const fragment of content) {
307
- if (typeof fragment === 'string') {
308
- parts.push(fragment);
309
- }
310
- else if (fragment && typeof fragment === 'object') {
311
- const text = typeof fragment.text === 'string'
312
- ? String(fragment.text)
313
- : (typeof fragment.content === 'string'
314
- ? String(fragment.content)
315
- : undefined);
316
- if (text && text.trim().length) {
317
- parts.push(text);
318
- }
319
- }
320
- }
321
- if (parts.length) {
322
- const joined = parts.join('').trim();
323
- if (joined.length)
324
- return joined;
325
- }
326
- }
327
- }
328
- return undefined;
329
- };
330
- const latestUserMessage = [...(chat.messages || [])]
331
- .reverse()
332
- .find((message) => typeof message?.role === 'string' && message.role.toLowerCase() === 'user');
333
- const existingInstruction = typeof responses.instructions === 'string'
334
- ? responses.instructions.trim()
335
- : undefined;
336
- if (!existingInstruction || !existingInstruction.length) {
337
- const messageInstruction = normalizeUserInstructionFromMessage(latestUserMessage);
338
- if (messageInstruction && messageInstruction.trim().length) {
339
- responses.instructions = messageInstruction.trim();
340
- }
341
- else {
342
- const inputInstruction = normalizeUserInstructionFromInput(responses);
343
- if (inputInstruction && inputInstruction.trim().length) {
344
- responses.instructions = inputInstruction.trim();
345
- }
346
- }
347
- }
348
- else {
349
- responses.instructions = existingInstruction;
350
- }
351
219
  if (chat.parameters && chat.parameters.stream !== undefined) {
352
220
  responses.stream = chat.parameters.stream;
353
221
  }
@@ -358,15 +226,27 @@ export class ResponsesSemanticMapper {
358
226
  name: entry.name
359
227
  }));
360
228
  }
361
- // Responses outbound 不再附带 metadata;系统提示由 instructions 字段承担
362
- const extraFields = chat.metadata?.extraFields;
363
- if (isJsonObject(extraFields)) {
364
- for (const [key, value] of Object.entries(extraFields)) {
365
- if (responses[key] === undefined) {
366
- responses[key] = value;
367
- }
229
+ try {
230
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'openai-responses', moduleType: 'openai-responses' });
231
+ const actions = resolvePolicyActions(bridgePolicy, 'request_outbound');
232
+ if (actions?.length) {
233
+ const actionState = createBridgeActionState({
234
+ rawRequest: responses,
235
+ metadata: chat.metadata
236
+ });
237
+ runBridgeActionPipeline({
238
+ stage: 'request_outbound',
239
+ actions,
240
+ protocol: bridgePolicy?.protocol ?? 'openai-responses',
241
+ moduleType: bridgePolicy?.moduleType ?? 'openai-responses',
242
+ requestId: ctx.requestId,
243
+ state: actionState
244
+ });
368
245
  }
369
246
  }
247
+ catch {
248
+ // ignore metadata propagation failures
249
+ }
370
250
  return {
371
251
  protocol: 'openai-responses',
372
252
  direction: 'response',
@@ -56,6 +56,9 @@ export function standardizedToChatEnvelope(request, options) {
56
56
  const metadata = {
57
57
  context: adapterContext
58
58
  };
59
+ if (typeof adapterContext.toolCallIdStyle === 'string' && adapterContext.toolCallIdStyle.length) {
60
+ metadata.toolCallIdStyle = adapterContext.toolCallIdStyle;
61
+ }
59
62
  if (hubState?.missingFields) {
60
63
  metadata.missingFields = hubState.missingFields;
61
64
  }
@@ -0,0 +1,16 @@
1
+ import type { JsonObject } from '../types/json.js';
2
+ import type { StandardizedRequest } from '../types/standardized.js';
3
+ import type { GovernedChatCompletionPayload, GovernedStandardizedRequest, ToolGovernanceProtocol, ToolGovernanceRegistry } from './types.js';
4
+ export declare class ToolGovernanceError extends Error {
5
+ readonly protocol: ToolGovernanceProtocol;
6
+ readonly direction: 'request' | 'response';
7
+ readonly field: string;
8
+ constructor(message: string, protocol: ToolGovernanceProtocol, direction: 'request' | 'response', field: string);
9
+ }
10
+ export declare class ToolGovernanceEngine {
11
+ private readonly registry;
12
+ constructor(registry?: ToolGovernanceRegistry);
13
+ governRequest(request: StandardizedRequest, protocol: ToolGovernanceProtocol): GovernedStandardizedRequest;
14
+ governResponse(payload: JsonObject, protocol: ToolGovernanceProtocol): GovernedChatCompletionPayload;
15
+ private resolveRules;
16
+ }