@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,9 @@
1
1
  import { isJsonObject, jsonClone } from '../types/json.js';
2
2
  import { buildOpenAIChatFromAnthropic, buildAnthropicRequestFromOpenAIChat } from '../../codecs/anthropic-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 { mapAnthropicToolsToChat } from '../../shared/anthropic-message-utils.js';
3
7
  const ANTHROPIC_PARAMETER_KEYS = [
4
8
  'model',
5
9
  'temperature',
@@ -28,55 +32,6 @@ const ANTHROPIC_TOP_LEVEL_FIELDS = new Set([
28
32
  ]);
29
33
  const PASSTHROUGH_METADATA_PREFIX = 'rcc_passthrough_';
30
34
  const PASSTHROUGH_PARAMETERS = ['tool_choice'];
31
- function encodePassthroughParameters(chat) {
32
- if (!chat.parameters)
33
- return undefined;
34
- const encoded = {};
35
- for (const key of PASSTHROUGH_PARAMETERS) {
36
- const value = chat.parameters[key];
37
- if (value === undefined)
38
- continue;
39
- try {
40
- encoded[`${PASSTHROUGH_METADATA_PREFIX}${key}`] = JSON.stringify(value);
41
- }
42
- catch {
43
- continue;
44
- }
45
- }
46
- return Object.keys(encoded).length ? encoded : undefined;
47
- }
48
- function extractPassthroughParameters(metadataField) {
49
- if (!isJsonObject(metadataField))
50
- return {};
51
- const cloned = jsonClone(metadataField);
52
- const passthrough = {};
53
- let metadataMutated = false;
54
- let hasPassthrough = false;
55
- for (const key of Object.keys(cloned)) {
56
- if (!key.startsWith(PASSTHROUGH_METADATA_PREFIX))
57
- continue;
58
- const paramKey = key.slice(PASSTHROUGH_METADATA_PREFIX.length);
59
- if (!PASSTHROUGH_PARAMETERS.includes(paramKey))
60
- continue;
61
- const rawValue = cloned[key];
62
- if (typeof rawValue !== 'string')
63
- continue;
64
- try {
65
- const parsed = rawValue ? JSON.parse(rawValue) : undefined;
66
- passthrough[paramKey] = parsed;
67
- delete cloned[key];
68
- metadataMutated = true;
69
- hasPassthrough = true;
70
- }
71
- catch {
72
- continue;
73
- }
74
- }
75
- return {
76
- metadata: metadataMutated ? (Object.keys(cloned).length ? cloned : undefined) : cloned,
77
- passthrough: hasPassthrough ? passthrough : undefined
78
- };
79
- }
80
35
  function collectParameters(payload) {
81
36
  const params = {};
82
37
  for (const key of ANTHROPIC_PARAMETER_KEYS) {
@@ -89,34 +44,6 @@ function collectParameters(payload) {
89
44
  }
90
45
  return Object.keys(params).length ? params : undefined;
91
46
  }
92
- function normalizeAnthropicTools(rawTools, missing) {
93
- if (!Array.isArray(rawTools) || rawTools.length === 0)
94
- return undefined;
95
- const tools = [];
96
- rawTools.forEach((entry, index) => {
97
- if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
98
- missing.push({ path: `tools[${index}]`, reason: 'invalid_entry', originalValue: jsonClone(entry) });
99
- return;
100
- }
101
- const nameValue = entry.name;
102
- if (typeof nameValue !== 'string' || !nameValue.trim())
103
- return;
104
- const desc = entry.description;
105
- const schema = entry.input_schema;
106
- const parameters = schema && typeof schema === 'object' && !Array.isArray(schema)
107
- ? schema
108
- : { type: 'object', properties: {} };
109
- tools.push({
110
- type: 'function',
111
- function: {
112
- name: nameValue,
113
- description: typeof desc === 'string' ? desc : undefined,
114
- parameters
115
- }
116
- });
117
- });
118
- return tools.length ? tools : undefined;
119
- }
120
47
  function normalizeToolContent(content) {
121
48
  if (typeof content === 'string')
122
49
  return content;
@@ -149,43 +76,6 @@ function collectToolOutputsFromMessages(messages, missing) {
149
76
  });
150
77
  return outputs.length ? outputs : undefined;
151
78
  }
152
- function collectExtraFields(payload) {
153
- const extras = {};
154
- for (const key of Object.keys(payload)) {
155
- if (ANTHROPIC_TOP_LEVEL_FIELDS.has(key))
156
- continue;
157
- extras[key] = payload[key];
158
- }
159
- return Object.keys(extras).length ? extras : undefined;
160
- }
161
- function collectSystemSegments(systemField) {
162
- if (!systemField)
163
- return [];
164
- const flatten = (value) => {
165
- if (typeof value === 'string')
166
- return value;
167
- if (Array.isArray(value)) {
168
- return value.map(v => flatten(v)).filter(Boolean).join('\n');
169
- }
170
- if (value && typeof value === 'object') {
171
- const obj = value;
172
- if (typeof obj.text === 'string')
173
- return obj.text;
174
- if (typeof obj.content === 'string')
175
- return obj.content;
176
- if (Array.isArray(obj.content))
177
- return obj.content.map(v => flatten(v)).join('\n');
178
- }
179
- return '';
180
- };
181
- const text = flatten(systemField).trim();
182
- return text ? [text] : [];
183
- }
184
- function systemSegmentsToAnthropicBlocks(segments) {
185
- if (!segments || !segments.length)
186
- return undefined;
187
- return segments.map(seg => ({ type: 'text', text: seg }));
188
- }
189
79
  export class AnthropicSemanticMapper {
190
80
  async toChat(format, ctx) {
191
81
  const payload = (format.payload ?? {});
@@ -194,38 +84,55 @@ export class AnthropicSemanticMapper {
194
84
  missing.push({ path: 'messages', reason: 'absent' });
195
85
  if (typeof payload.model !== 'string')
196
86
  missing.push({ path: 'model', reason: 'absent' });
197
- const { messages } = buildOpenAIChatFromAnthropic(payload);
87
+ const openaiPayload = buildOpenAIChatFromAnthropic(payload);
88
+ const messages = Array.isArray(openaiPayload.messages)
89
+ ? openaiPayload.messages
90
+ : [];
198
91
  const toolOutputs = collectToolOutputsFromMessages(messages, missing);
199
- const tools = payload.tools ? normalizeAnthropicTools(payload.tools, missing) : undefined;
92
+ const tools = mapAnthropicToolsToChat(payload.tools, missing);
200
93
  let parameters = collectParameters(payload);
201
- const passthrough = extractPassthroughParameters(payload.metadata);
94
+ const passthrough = extractMetadataPassthrough(payload.metadata, {
95
+ prefix: PASSTHROUGH_METADATA_PREFIX,
96
+ keys: PASSTHROUGH_PARAMETERS
97
+ });
202
98
  if (passthrough.passthrough) {
203
99
  parameters = { ...(parameters || {}), ...passthrough.passthrough };
204
100
  }
205
- const systemSegments = collectSystemSegments(payload.system);
206
101
  const metadata = { context: ctx };
207
- if (systemSegments.length) {
208
- metadata.systemInstructions = systemSegments;
209
- }
210
- if (payload.system !== undefined) {
211
- metadata.rawSystem = jsonClone(payload.system);
212
- }
213
102
  if (payload.tools && Array.isArray(payload.tools) && payload.tools.length === 0) {
214
103
  metadata.toolsFieldPresent = true;
215
104
  }
216
105
  if (missing.length) {
217
106
  metadata.missingFields = missing;
218
107
  }
219
- const extraFields = collectExtraFields(payload);
220
- if (extraFields) {
221
- metadata.extraFields = extraFields;
222
- }
223
108
  if (passthrough.metadata) {
224
109
  metadata.providerMetadata = passthrough.metadata;
225
110
  }
226
111
  else if (payload.metadata && isJsonObject(payload.metadata)) {
227
112
  metadata.providerMetadata = jsonClone(payload.metadata);
228
113
  }
114
+ try {
115
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'anthropic-messages' });
116
+ const actions = resolvePolicyActions(bridgePolicy, 'request_inbound');
117
+ if (actions?.length) {
118
+ const actionState = createBridgeActionState({
119
+ messages: messages,
120
+ rawRequest: payload,
121
+ metadata: metadata
122
+ });
123
+ runBridgeActionPipeline({
124
+ stage: 'request_inbound',
125
+ actions,
126
+ protocol: bridgePolicy?.protocol ?? 'anthropic-messages',
127
+ moduleType: bridgePolicy?.moduleType ?? 'anthropic-messages',
128
+ requestId: ctx.requestId,
129
+ state: actionState
130
+ });
131
+ }
132
+ }
133
+ catch {
134
+ // best-effort metadata extraction
135
+ }
229
136
  return {
230
137
  messages,
231
138
  tools,
@@ -242,10 +149,13 @@ export class AnthropicSemanticMapper {
242
149
  const baseRequest = {
243
150
  ...(chat.parameters || {}),
244
151
  model,
245
- messages: chat.metadata?.systemInstructions ? chat.messages.filter(message => message.role !== 'system') : chat.messages,
152
+ messages: chat.messages,
246
153
  tools: chat.tools
247
154
  };
248
- const passthroughMetadata = encodePassthroughParameters(chat);
155
+ const passthroughMetadata = encodeMetadataPassthrough(chat.parameters, {
156
+ prefix: PASSTHROUGH_METADATA_PREFIX,
157
+ keys: PASSTHROUGH_PARAMETERS
158
+ });
249
159
  if (passthroughMetadata) {
250
160
  const rawMetadata = baseRequest.metadata;
251
161
  const existingMetadata = isJsonObject(rawMetadata)
@@ -259,43 +169,47 @@ export class AnthropicSemanticMapper {
259
169
  if (baseRequest.max_output_tokens && !baseRequest.max_tokens) {
260
170
  baseRequest.max_tokens = baseRequest.max_output_tokens;
261
171
  }
262
- const systemSegmentsRaw = Array.isArray(chat.metadata?.systemInstructions)
263
- ? chat.metadata?.systemInstructions
264
- : undefined;
265
- const systemSegments = systemSegmentsRaw?.filter((seg) => typeof seg === 'string' && seg.trim().length > 0);
266
- if (chat.metadata?.rawSystem !== undefined) {
267
- baseRequest.system = chat.metadata.rawSystem;
268
- }
269
- else if (systemSegments && systemSegments.length > 0) {
270
- baseRequest.system = systemSegmentsToAnthropicBlocks(systemSegments);
271
- }
272
172
  if (isJsonObject(chat.metadata?.providerMetadata)) {
273
173
  baseRequest.metadata = jsonClone(chat.metadata?.providerMetadata);
274
174
  }
275
175
  if (chat.metadata?.toolsFieldPresent && (!Array.isArray(chat.tools) || chat.tools.length === 0)) {
276
176
  baseRequest.tools = [];
277
177
  }
278
- if (isJsonObject(chat.metadata?.extraFields)) {
279
- for (const [key, value] of Object.entries(chat.metadata?.extraFields)) {
280
- if (baseRequest[key] === undefined) {
281
- baseRequest[key] = value;
282
- }
283
- }
284
- }
285
- const payload = buildAnthropicRequestFromOpenAIChat(baseRequest);
286
- if (chat.metadata?.rawSystem !== undefined) {
287
- payload.system = chat.metadata.rawSystem;
288
- }
178
+ const payloadSource = buildAnthropicRequestFromOpenAIChat(baseRequest);
179
+ const payload = JSON.parse(JSON.stringify(payloadSource));
289
180
  if (chat.metadata?.toolsFieldPresent && (!Array.isArray(chat.tools) || chat.tools.length === 0)) {
290
181
  payload.tools = [];
291
182
  }
292
- if (isJsonObject(chat.metadata?.extraFields)) {
293
- for (const [key, value] of Object.entries(chat.metadata?.extraFields)) {
294
- if (payload[key] === undefined) {
295
- payload[key] = value;
296
- }
183
+ try {
184
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'anthropic-messages' });
185
+ const actions = resolvePolicyActions(bridgePolicy, 'request_outbound');
186
+ if (actions?.length) {
187
+ const capturedToolResults = Array.isArray(chat.toolOutputs)
188
+ ? chat.toolOutputs.map((entry) => ({
189
+ tool_call_id: entry.tool_call_id,
190
+ output: entry.content,
191
+ name: entry.name
192
+ }))
193
+ : undefined;
194
+ const actionState = createBridgeActionState({
195
+ messages: Array.isArray(payload.messages) ? payload.messages : undefined,
196
+ rawRequest: payload,
197
+ metadata: chat.metadata,
198
+ capturedToolResults
199
+ });
200
+ runBridgeActionPipeline({
201
+ stage: 'request_outbound',
202
+ actions,
203
+ protocol: bridgePolicy?.protocol ?? 'anthropic-messages',
204
+ moduleType: bridgePolicy?.moduleType ?? 'anthropic-messages',
205
+ requestId: ctx.requestId,
206
+ state: actionState
207
+ });
297
208
  }
298
209
  }
210
+ catch {
211
+ // ignore metadata propagation failures
212
+ }
299
213
  return {
300
214
  protocol: 'anthropic-messages',
301
215
  direction: 'response',
@@ -1,4 +1,7 @@
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';
4
+ import { normalizeChatMessageContent } from '../../shared/chat-output-normalizer.js';
2
5
  const CHAT_PARAMETER_KEYS = [
3
6
  'model',
4
7
  'temperature',
@@ -115,6 +118,15 @@ function normalizeChatMessages(raw) {
115
118
  return;
116
119
  }
117
120
  const chatMessage = value;
121
+ if (roleValue !== 'system' && roleValue !== 'tool') {
122
+ const normalizedContent = normalizeChatMessageContent(chatMessage.content);
123
+ if (normalizedContent.contentText !== undefined) {
124
+ chatMessage.content = normalizedContent.contentText;
125
+ }
126
+ if (typeof normalizedContent.reasoningText === 'string' && normalizedContent.reasoningText.trim().length) {
127
+ chatMessage.reasoning_content = normalizedContent.reasoningText.trim();
128
+ }
129
+ }
118
130
  norm.messages.push(chatMessage);
119
131
  if (roleValue === 'system') {
120
132
  const segment = flattenSystemContent(chatMessage.content);
@@ -185,27 +197,10 @@ function extractParameters(body) {
185
197
  }
186
198
  return Object.keys(params).length ? params : undefined;
187
199
  }
188
- function collectExtraFields(payload) {
189
- const extras = {};
190
- for (const key of Object.keys(payload)) {
191
- if (KNOWN_TOP_LEVEL_FIELDS.has(key))
192
- continue;
193
- extras[key] = payload[key];
194
- }
195
- return Object.keys(extras).length ? extras : undefined;
196
- }
197
200
  export class ChatSemanticMapper {
198
201
  async toChat(format, ctx) {
199
202
  const payload = (format.payload ?? {});
200
203
  const normalized = normalizeChatMessages(payload.messages);
201
- const rawSystemSentinel = payload.__rcc_raw_system;
202
- const providerMetadataSentinel = payload.__rcc_provider_metadata;
203
- if (rawSystemSentinel !== undefined) {
204
- delete payload.__rcc_raw_system;
205
- }
206
- if (providerMetadataSentinel !== undefined) {
207
- delete payload.__rcc_provider_metadata;
208
- }
209
204
  const topLevelOutputs = normalizeStandaloneToolOutputs(payload.tool_outputs, normalized.missingFields);
210
205
  const toolOutputs = [...normalized.toolOutputs];
211
206
  for (const entry of topLevelOutputs) {
@@ -214,22 +209,6 @@ export class ChatSemanticMapper {
214
209
  }
215
210
  }
216
211
  const metadata = { context: ctx };
217
- if (typeof rawSystemSentinel === 'string') {
218
- try {
219
- metadata.rawSystem = JSON.parse(rawSystemSentinel);
220
- }
221
- catch {
222
- // ignore parse errors
223
- }
224
- }
225
- if (typeof providerMetadataSentinel === 'string') {
226
- try {
227
- metadata.providerMetadata = JSON.parse(providerMetadataSentinel);
228
- }
229
- catch {
230
- // ignore parse errors
231
- }
232
- }
233
212
  if (normalized.systemSegments.length) {
234
213
  metadata.systemInstructions = normalized.systemSegments;
235
214
  }
@@ -240,9 +219,27 @@ export class ChatSemanticMapper {
240
219
  if (normalized.missingFields.length) {
241
220
  metadata.missingFields = normalized.missingFields;
242
221
  }
243
- const extraFields = collectExtraFields(payload);
244
- if (extraFields) {
245
- metadata.extraFields = extraFields;
222
+ try {
223
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'openai-chat' });
224
+ const actions = resolvePolicyActions(bridgePolicy, 'request_inbound');
225
+ if (actions?.length) {
226
+ const actionState = createBridgeActionState({
227
+ messages: normalized.messages,
228
+ rawRequest: payload,
229
+ metadata: metadata
230
+ });
231
+ runBridgeActionPipeline({
232
+ stage: 'request_inbound',
233
+ actions,
234
+ protocol: bridgePolicy?.protocol ?? 'openai-chat',
235
+ moduleType: bridgePolicy?.moduleType ?? 'openai-chat',
236
+ requestId: ctx.requestId,
237
+ state: actionState
238
+ });
239
+ }
240
+ }
241
+ catch {
242
+ // noop: best-effort policy application
246
243
  }
247
244
  if (Array.isArray(payload.tools) && payload.tools.length === 0) {
248
245
  metadata.toolsFieldPresent = true;
@@ -261,17 +258,39 @@ export class ChatSemanticMapper {
261
258
  tools: chat.tools ?? (chat.metadata?.toolsFieldPresent ? [] : undefined),
262
259
  ...(chat.parameters || {})
263
260
  };
264
- if (chat.metadata?.rawSystem !== undefined) {
265
- try {
266
- payload.__rcc_raw_system = JSON.stringify(chat.metadata.rawSystem);
267
- }
268
- catch {
269
- // ignore serialization errors
261
+ try {
262
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'openai-chat' });
263
+ const actions = resolvePolicyActions(bridgePolicy, 'request_outbound');
264
+ if (actions?.length && Array.isArray(payload.messages)) {
265
+ const capturedToolResults = Array.isArray(chat.toolOutputs)
266
+ ? chat.toolOutputs.map((entry) => ({
267
+ tool_call_id: entry.tool_call_id,
268
+ output: entry.content,
269
+ name: entry.name
270
+ }))
271
+ : undefined;
272
+ const actionState = createBridgeActionState({
273
+ messages: payload.messages,
274
+ rawRequest: payload,
275
+ metadata: chat.metadata,
276
+ capturedToolResults
277
+ });
278
+ runBridgeActionPipeline({
279
+ stage: 'request_outbound',
280
+ actions,
281
+ protocol: bridgePolicy?.protocol ?? 'openai-chat',
282
+ moduleType: bridgePolicy?.moduleType ?? 'openai-chat',
283
+ requestId: ctx.requestId,
284
+ state: actionState
285
+ });
270
286
  }
271
287
  }
272
- if (chat.metadata?.providerMetadata && isJsonObject(chat.metadata.providerMetadata)) {
288
+ catch {
289
+ // ignore policy failures
290
+ }
291
+ if (chat.metadata?.rawSystem !== undefined) {
273
292
  try {
274
- payload.__rcc_provider_metadata = JSON.stringify(chat.metadata.providerMetadata);
293
+ payload.__rcc_raw_system = JSON.stringify(chat.metadata.rawSystem);
275
294
  }
276
295
  catch {
277
296
  // ignore serialization errors
@@ -284,14 +303,6 @@ export class ChatSemanticMapper {
284
303
  payload.max_tokens = payload.max_output_tokens;
285
304
  delete payload.max_output_tokens;
286
305
  }
287
- const extraFields = chat.metadata?.extraFields;
288
- if (isJsonObject(extraFields)) {
289
- for (const [key, value] of Object.entries(extraFields)) {
290
- if (payload[key] === undefined) {
291
- payload[key] = value;
292
- }
293
- }
294
- }
295
306
  return {
296
307
  protocol: 'openai-chat',
297
308
  direction: 'response',