@jsonstudio/llms 0.4.3 → 0.4.4

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 (416) 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 +4 -2
  6. package/dist/conversion/hub/pipeline/hub-pipeline.js +4 -5
  7. package/dist/conversion/hub/process/chat-process.js +258 -41
  8. package/dist/conversion/hub/response/provider-response.js +8 -2
  9. package/dist/conversion/hub/tool-governance/engine.d.ts +16 -0
  10. package/dist/conversion/hub/tool-governance/engine.js +266 -0
  11. package/dist/conversion/hub/tool-governance/index.d.ts +3 -0
  12. package/dist/conversion/hub/tool-governance/index.js +2 -0
  13. package/dist/conversion/hub/tool-governance/rules.d.ts +2 -0
  14. package/dist/conversion/hub/tool-governance/rules.js +76 -0
  15. package/dist/conversion/hub/tool-governance/types.d.ts +38 -0
  16. package/dist/conversion/index.d.ts +1 -0
  17. package/dist/conversion/index.js +1 -0
  18. package/dist/conversion/responses/responses-openai-bridge.js +5 -3
  19. package/dist/sse/sse-to-json/builders/response-builder.js +2 -1
  20. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +37 -23
  21. package/dist/sse/sse-to-json/parsers/sse-parser.js +20 -12
  22. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
  23. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
  24. package/dist/sse/types/chat-types.d.ts +9 -6
  25. package/dist/sse/types/conversion-context.d.ts +14 -11
  26. package/dist/sse/types/core-interfaces.d.ts +6 -2
  27. package/dist/sse/types/index.d.ts +1 -1
  28. package/dist/sse/types/responses-types.d.ts +20 -20
  29. package/dist/sse/types/sse-events.d.ts +4 -3
  30. package/dist/sse/types/stream-state.d.ts +34 -39
  31. package/dist/sse/types/utility-types.d.ts +47 -43
  32. package/dist/sse/types/utility-types.js +10 -13
  33. package/dist/tools/tool-registry.js +156 -98
  34. package/package.json +7 -7
  35. package/dist/api/index.d.ts +0 -10
  36. package/dist/api/index.js +0 -11
  37. package/dist/api/llmswitch-config.d.ts +0 -15
  38. package/dist/api/llmswitch-config.js +0 -415
  39. package/dist/api/llmswitch-types.d.ts +0 -412
  40. package/dist/api/llmswitch-types.js +0 -60
  41. package/dist/bridge/routecodex-adapter.d.ts +0 -74
  42. package/dist/config/index.d.ts +0 -3
  43. package/dist/config/index.js +0 -5
  44. package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
  45. package/dist/config-unified/unified-config.d.ts +0 -26
  46. package/dist/conversion/codec-registry.d.ts +0 -10
  47. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +0 -23
  48. package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
  49. package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
  50. package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
  51. package/dist/conversion/config/config-manager.d.ts +0 -212
  52. package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
  53. package/dist/conversion/conversion-v3/adapters/index.js +0 -1
  54. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
  55. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
  56. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
  57. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
  58. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
  59. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
  60. package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
  61. package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
  62. package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
  63. package/dist/conversion/conversion-v3/config/default-configs.js +0 -1007
  64. package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
  65. package/dist/conversion/conversion-v3/config/index.js +0 -5
  66. package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
  67. package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
  68. package/dist/conversion/conversion-v3/index.d.ts +0 -11
  69. package/dist/conversion/conversion-v3/index.js +0 -17
  70. package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
  71. package/dist/conversion/conversion-v3/nodes/index.js +0 -149
  72. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
  73. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
  74. package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
  75. package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
  76. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
  77. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
  78. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
  79. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
  80. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
  81. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
  82. package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
  83. package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
  84. package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
  85. package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
  86. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
  87. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
  88. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
  89. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
  90. package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
  91. package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
  92. package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
  93. package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
  94. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
  95. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
  96. package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
  97. package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
  98. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
  99. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
  100. package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
  101. package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
  102. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
  103. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
  104. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
  105. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
  106. package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
  107. package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
  108. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
  109. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
  110. package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
  111. package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
  112. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -30
  113. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -360
  114. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
  115. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
  116. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
  117. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
  118. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
  119. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
  120. package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
  121. package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
  122. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
  123. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
  124. package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
  125. package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
  126. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
  127. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
  128. package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
  129. package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
  130. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
  131. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
  132. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
  133. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
  134. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
  135. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
  136. package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
  137. package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
  138. package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
  139. package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
  140. package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
  141. package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
  142. package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
  143. package/dist/conversion/conversion-v3/sse/index.js +0 -115
  144. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  145. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
  146. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  147. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
  148. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  149. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
  150. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  151. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
  152. package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
  153. package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
  154. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  155. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
  156. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  157. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
  158. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  159. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
  160. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
  161. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
  162. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
  163. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
  164. package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
  165. package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
  166. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
  167. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
  168. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  169. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
  170. package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
  171. package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
  172. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  173. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
  174. package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
  175. package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
  176. package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
  177. package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
  178. package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
  179. package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
  180. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  181. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
  182. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  183. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
  184. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  185. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
  186. package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
  187. package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
  188. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  189. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
  190. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
  191. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
  192. package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
  193. package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
  194. package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
  195. package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
  196. package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
  197. package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
  198. package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
  199. package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
  200. package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
  201. package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
  202. package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
  203. package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
  204. package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
  205. package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
  206. package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
  207. package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
  208. package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
  209. package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
  210. package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
  211. package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
  212. package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
  213. package/dist/conversion/conversion-v3/standards/errors.js +0 -27
  214. package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
  215. package/dist/conversion/conversion-v3/standards/index.js +0 -11
  216. package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
  217. package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
  218. package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
  219. package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
  220. package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
  221. package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
  222. package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
  223. package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
  224. package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
  225. package/dist/conversion/conversion-v3/types/config-types.js +0 -13
  226. package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
  227. package/dist/conversion/conversion-v3/types/index.js +0 -11
  228. package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
  229. package/dist/conversion/conversion-v3/types/node-types.js +0 -20
  230. package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
  231. package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
  232. package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
  233. package/dist/conversion/conversion-v3/types/request-types.js +0 -26
  234. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
  235. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
  236. package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
  237. package/dist/conversion/conversion-v3/validations/index.js +0 -7
  238. package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
  239. package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
  240. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
  241. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
  242. package/dist/conversion/hub/config/types.d.ts +0 -26
  243. package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
  244. package/dist/conversion/hub/core/hub-context.d.ts +0 -21
  245. package/dist/conversion/hub/core/index.d.ts +0 -3
  246. package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
  247. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
  248. package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
  249. package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
  250. package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
  251. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +0 -17
  252. package/dist/conversion/hub/hub-feature.d.ts +0 -1
  253. package/dist/conversion/hub/node-support.d.ts +0 -19
  254. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
  255. package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
  256. package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
  257. package/dist/conversion/hub/process/chat-process.d.ts +0 -13
  258. package/dist/conversion/hub/registry.d.ts +0 -28
  259. package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
  260. package/dist/conversion/hub/response/provider-response.d.ts +0 -20
  261. package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
  262. package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
  263. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
  264. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
  265. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
  266. package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
  267. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
  268. package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
  269. package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
  270. package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
  271. package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
  272. package/dist/conversion/hub/types/errors.d.ts +0 -5
  273. package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
  274. package/dist/conversion/hub/types/index.d.ts +0 -6
  275. package/dist/conversion/hub/types/json.d.ts +0 -9
  276. package/dist/conversion/hub/types/node.d.ts +0 -31
  277. package/dist/conversion/hub/types/standardized.d.ts +0 -94
  278. package/dist/conversion/responses/responses-openai-bridge.d.ts +0 -95
  279. package/dist/conversion/schema-validator.d.ts +0 -7
  280. package/dist/conversion/shared/args-mapping.d.ts +0 -18
  281. package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
  282. package/dist/conversion/shared/jsonish.d.ts +0 -3
  283. package/dist/conversion/shared/mcp-injection.d.ts +0 -2
  284. package/dist/conversion/shared/media.d.ts +0 -1
  285. package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
  286. package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
  287. package/dist/conversion/shared/payload-budget.d.ts +0 -13
  288. package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
  289. package/dist/conversion/shared/responses-conversation-store.d.ts +0 -41
  290. package/dist/conversion/shared/responses-id-utils.d.ts +0 -7
  291. package/dist/conversion/shared/responses-instructions.d.ts +0 -1
  292. package/dist/conversion/shared/responses-metadata.d.ts +0 -1
  293. package/dist/conversion/shared/responses-request-adapter.d.ts +0 -66
  294. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
  295. package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
  296. package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
  297. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  298. package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
  299. package/dist/conversion/shared/tool-governor.d.ts +0 -27
  300. package/dist/conversion/shared/tool-harvester.d.ts +0 -31
  301. package/dist/conversion/shared/tool-mapping.d.ts +0 -10
  302. package/dist/conversion/shared/tooling.d.ts +0 -26
  303. package/dist/conversion/types.d.ts +0 -33
  304. package/dist/core/index.d.ts +0 -6
  305. package/dist/core/index.js +0 -9
  306. package/dist/core/llmswitch-engine-v2.d.ts +0 -132
  307. package/dist/core/llmswitch-engine-v2.js +0 -649
  308. package/dist/core/llmswitch-factory-v2.d.ts +0 -123
  309. package/dist/core/llmswitch-factory-v2.js +0 -521
  310. package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
  311. package/dist/endpoints/base-endpoint-handler.js +0 -545
  312. package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
  313. package/dist/endpoints/chat-endpoint-handler.js +0 -218
  314. package/dist/endpoints/endpoint-router.d.ts +0 -127
  315. package/dist/endpoints/endpoint-router.js +0 -438
  316. package/dist/endpoints/index.d.ts +0 -13
  317. package/dist/endpoints/index.js +0 -11
  318. package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
  319. package/dist/endpoints/messages-endpoint-handler.js +0 -238
  320. package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
  321. package/dist/endpoints/responses-endpoint-handler.js +0 -233
  322. package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
  323. package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
  324. package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
  325. package/dist/filters/engine.d.ts +0 -16
  326. package/dist/filters/index.d.ts +0 -19
  327. package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
  328. package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
  329. package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
  330. package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
  331. package/dist/filters/special/request-tools-normalize.d.ts +0 -12
  332. package/dist/filters/special/response-finish-invariants.d.ts +0 -11
  333. package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
  334. package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
  335. package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
  336. package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
  337. package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
  338. package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
  339. package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
  340. package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
  341. package/dist/filters/special/tool-post-constraints.d.ts +0 -31
  342. package/dist/filters/types.d.ts +0 -68
  343. package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
  344. package/dist/filters/utils/snapshot-writer.d.ts +0 -10
  345. package/dist/guidance/index.d.ts +0 -3
  346. package/dist/hooks/hooks-integration.d.ts +0 -161
  347. package/dist/hooks/hooks-integration.js +0 -519
  348. package/dist/hooks/index.d.ts +0 -10
  349. package/dist/hooks/index.js +0 -13
  350. package/dist/html-to-markdown.d.ts +0 -5
  351. package/dist/html-to-markdown.js +0 -66
  352. package/dist/http/sse-response.d.ts +0 -22
  353. package/dist/router/virtual-router/bootstrap.d.ts +0 -6
  354. package/dist/router/virtual-router/classifier.d.ts +0 -10
  355. package/dist/router/virtual-router/engine.d.ts +0 -35
  356. package/dist/router/virtual-router/error-center.d.ts +0 -10
  357. package/dist/router/virtual-router/features.d.ts +0 -3
  358. package/dist/router/virtual-router/health-manager.d.ts +0 -18
  359. package/dist/router/virtual-router/load-balancer.d.ts +0 -18
  360. package/dist/router/virtual-router/provider-registry.d.ts +0 -11
  361. package/dist/router/virtual-router/types.d.ts +0 -206
  362. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  363. package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  364. package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  365. package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  366. package/dist/sse/json-to-sse/index.d.ts +0 -6
  367. package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  368. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  369. package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  370. package/dist/sse/registry/sse-codec-registry.d.ts +0 -32
  371. package/dist/sse/shared/chat-serializer.d.ts +0 -4
  372. package/dist/sse/shared/constants.d.ts +0 -272
  373. package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
  374. package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  375. package/dist/sse/shared/serializers/index.d.ts +0 -39
  376. package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  377. package/dist/sse/shared/serializers/types.d.ts +0 -51
  378. package/dist/sse/shared/utils.d.ts +0 -254
  379. package/dist/sse/shared/writer.d.ts +0 -111
  380. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  381. package/dist/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  382. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  383. package/dist/sse/sse-to-json/index.d.ts +0 -6
  384. package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  385. package/dist/sse/types/anthropic-types.d.ts +0 -87
  386. package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
  387. package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
  388. package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
  389. package/dist/tools/proxy/executors/web-fetch.js +0 -39
  390. package/dist/tools/proxy/registry.d.ts +0 -8
  391. package/dist/tools/proxy/registry.js +0 -14
  392. package/dist/tools/proxy/types.d.ts +0 -29
  393. package/dist/tools/tool-registry.d.ts +0 -8
  394. package/dist/tools/web-fetch-html.d.ts +0 -15
  395. package/dist/tools/web-fetch-html.js +0 -83
  396. package/dist/utils/conversion-adapter.d.ts +0 -65
  397. package/dist/utils/conversion-adapter.js +0 -183
  398. package/dist/utils/error-factory.d.ts +0 -88
  399. package/dist/utils/error-factory.js +0 -138
  400. package/dist/utils/error-utils.d.ts +0 -334
  401. package/dist/utils/error-utils.js +0 -782
  402. package/dist/utils/index.d.ts +0 -8
  403. package/dist/utils/index.js +0 -13
  404. package/dist/utils/performance-utils.d.ts +0 -205
  405. package/dist/utils/performance-utils.js +0 -440
  406. package/dist/utils/profile-mapper.d.ts +0 -32
  407. package/dist/utils/profile-mapper.js +0 -269
  408. package/dist/utils/request-processor.d.ts +0 -52
  409. package/dist/utils/request-processor.js +0 -210
  410. package/dist/utils/request-utils.d.ts +0 -117
  411. package/dist/utils/request-utils.js +0 -333
  412. package/dist/utils/response-utils.d.ts +0 -127
  413. package/dist/utils/response-utils.js +0 -516
  414. package/dist/utils/token-counter.d.ts +0 -89
  415. package/dist/utils/token-counter.js +0 -541
  416. /package/dist/{tools/proxy → conversion/hub/tool-governance}/types.js +0 -0
@@ -1,87 +0,0 @@
1
- import { NodeType, NodeStatus } from '../../types/index.js';
2
- function unwrapOpenAIResponse(payload) {
3
- let current = payload;
4
- const seen = new Set();
5
- while (current && typeof current === 'object' && !Array.isArray(current) && !seen.has(current)) {
6
- seen.add(current);
7
- if ('choices' in current || 'id' in current || 'object' in current)
8
- break;
9
- if ('data' in current && current.data && typeof current.data === 'object') {
10
- current = current.data;
11
- continue;
12
- }
13
- break;
14
- }
15
- return current;
16
- }
17
- /**
18
- * OpenAI provider response → canonical chat response输入节点
19
- */
20
- export class OpenAIResponseInputNode {
21
- id;
22
- config;
23
- type = NodeType.INPUT;
24
- status = NodeStatus.IDLE;
25
- name;
26
- constructor(id, config) {
27
- this.id = id;
28
- this.config = config;
29
- this.name = config.name || 'OpenAI Response Input Node';
30
- }
31
- async execute(context) {
32
- const start = Date.now();
33
- this.status = NodeStatus.RUNNING;
34
- try {
35
- const payload = context.data?.payload ?? context.data ?? context.request.payload;
36
- const chatShape = unwrapOpenAIResponse(payload);
37
- const responseContext = {
38
- toolContext: {
39
- originalRequest: context.request.context?.metadata?.originalRequest,
40
- requestId: context.request.id,
41
- entryEndpoint: context.request.context?.entryEndpoint || context.request.endpoint
42
- }
43
- };
44
- this.status = NodeStatus.COMPLETED;
45
- return {
46
- success: true,
47
- data: {
48
- responsePayload: chatShape,
49
- responseContext
50
- },
51
- metadata: {
52
- node: this.id,
53
- executionTime: Date.now() - start,
54
- startTime: start,
55
- endTime: Date.now()
56
- }
57
- };
58
- }
59
- catch (error) {
60
- this.status = NodeStatus.FAILED;
61
- return {
62
- success: false,
63
- error: {
64
- code: 'OPENAI_RESPONSE_INPUT_ERROR',
65
- message: error instanceof Error ? error.message : 'Failed to normalize OpenAI response',
66
- cause: error instanceof Error ? error : undefined
67
- },
68
- metadata: {
69
- node: this.id,
70
- executionTime: Date.now() - start,
71
- startTime: start,
72
- endTime: Date.now()
73
- }
74
- };
75
- }
76
- }
77
- validate() {
78
- return {
79
- valid: true,
80
- errors: [],
81
- warnings: []
82
- };
83
- }
84
- async cleanup() {
85
- this.status = NodeStatus.IDLE;
86
- }
87
- }
@@ -1 +0,0 @@
1
- export { buildProcessedRequestFromChatResponse } from '../../../hub/response/chat-response-utils.js';
@@ -1 +0,0 @@
1
- export { buildProcessedRequestFromChatResponse } from '../../../hub/response/chat-response-utils.js';
@@ -1,12 +0,0 @@
1
- import { NodeType, NodeStatus, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
2
- export declare class ResponsesResponseInputNode implements PipelineNode {
3
- readonly id: string;
4
- readonly config: NodeConfig;
5
- readonly type = NodeType.INPUT;
6
- status: NodeStatus;
7
- readonly name: string;
8
- constructor(id: string, config: NodeConfig);
9
- execute(context: NodeContext): Promise<NodeResult>;
10
- validate(): ValidationResult;
11
- cleanup(): Promise<void>;
12
- }
@@ -1,67 +0,0 @@
1
- import { NodeType, NodeStatus } from '../../types/index.js';
2
- import { buildChatResponseFromResponses } from '../../../responses/responses-openai-bridge.js';
3
- export class ResponsesResponseInputNode {
4
- id;
5
- config;
6
- type = NodeType.INPUT;
7
- status = NodeStatus.IDLE;
8
- name;
9
- constructor(id, config) {
10
- this.id = id;
11
- this.config = config;
12
- this.name = config.name || 'Responses Response Input Node';
13
- }
14
- async execute(context) {
15
- const start = Date.now();
16
- this.status = NodeStatus.RUNNING;
17
- try {
18
- const payload = context.data?.payload ?? context.data ?? context.request.payload;
19
- const chatShape = buildChatResponseFromResponses(payload);
20
- const responseContext = {
21
- toolContext: {
22
- originalRequest: context.request.context?.metadata?.originalRequest,
23
- requestId: context.request.id,
24
- entryEndpoint: context.request.context?.entryEndpoint || context.request.endpoint
25
- }
26
- };
27
- this.status = NodeStatus.COMPLETED;
28
- return {
29
- success: true,
30
- data: {
31
- responsePayload: chatShape,
32
- rawResponsesPayload: payload,
33
- responseContext
34
- },
35
- metadata: {
36
- node: this.id,
37
- executionTime: Date.now() - start,
38
- startTime: start,
39
- endTime: Date.now()
40
- }
41
- };
42
- }
43
- catch (error) {
44
- this.status = NodeStatus.FAILED;
45
- return {
46
- success: false,
47
- error: {
48
- code: 'RESPONSES_RESPONSE_INPUT_ERROR',
49
- message: error instanceof Error ? error.message : 'Failed to normalize OpenAI Responses payload',
50
- cause: error instanceof Error ? error : undefined
51
- },
52
- metadata: {
53
- node: this.id,
54
- executionTime: Date.now() - start,
55
- startTime: start,
56
- endTime: Date.now()
57
- }
58
- };
59
- }
60
- }
61
- validate() {
62
- return { valid: true, errors: [], warnings: [] };
63
- }
64
- async cleanup() {
65
- this.status = NodeStatus.IDLE;
66
- }
67
- }
@@ -1,3 +0,0 @@
1
- export { SSEInputNode } from './sse-input-node.js';
2
- export { SSEOutputNode } from './sse-output-node.js';
3
- export { SSEPassthroughNode } from './sse-passthrough-node.js';
@@ -1,3 +0,0 @@
1
- export { SSEInputNode } from './sse-input-node.js';
2
- export { SSEOutputNode } from './sse-output-node.js';
3
- export { SSEPassthroughNode } from './sse-passthrough-node.js';
@@ -1,27 +0,0 @@
1
- import { NodeType, NodeStatus, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
2
- /**
3
- * SSE 输入节点(重构版本)
4
- *
5
- * 将上游 SSE 请求上下文转换为标准 JSON 载荷。
6
- * 基于配置驱动的轻量级编排器,使用标准化的 codec registry。
7
- */
8
- export declare class SSEInputNode implements PipelineNode {
9
- readonly id: string;
10
- readonly config: NodeConfig;
11
- readonly type = NodeType.INPUT;
12
- status: NodeStatus;
13
- readonly name: string;
14
- constructor(id: string, config: NodeConfig);
15
- execute(context: NodeContext): Promise<NodeResult>;
16
- private getParserConfig;
17
- private resolveSseProtocol;
18
- private applyCompatibilityFilters;
19
- private detectInputFormat;
20
- private convertSSEToJson;
21
- private createSseEventStream;
22
- private unwrapReadable;
23
- private passThroughJson;
24
- private wrapError;
25
- validate(): ValidationResult;
26
- cleanup(): Promise<void>;
27
- }
@@ -1,165 +0,0 @@
1
- import { Readable } from 'stream';
2
- import { NodeType, NodeStatus, ConversionError } from '../../types/index.js';
3
- import { defaultSseCodecRegistry } from '../../../../sse/index.js';
4
- /**
5
- * SSE 输入节点(重构版本)
6
- *
7
- * 将上游 SSE 请求上下文转换为标准 JSON 载荷。
8
- * 基于配置驱动的轻量级编排器,使用标准化的 codec registry。
9
- */
10
- export class SSEInputNode {
11
- id;
12
- config;
13
- type = NodeType.INPUT;
14
- status = NodeStatus.IDLE;
15
- name;
16
- constructor(id, config) {
17
- this.id = id;
18
- this.config = config;
19
- this.name = config.name || 'SSE Input Node';
20
- }
21
- async execute(context) {
22
- const start = Date.now();
23
- this.status = NodeStatus.RUNNING;
24
- try {
25
- const parserConfig = this.getParserConfig(context);
26
- const filteredConfig = await this.applyCompatibilityFilters(parserConfig, context);
27
- const inputFormat = this.detectInputFormat(context);
28
- if (inputFormat === 'sse-stream') {
29
- const result = await this.convertSSEToJson(context, filteredConfig);
30
- this.status = NodeStatus.COMPLETED;
31
- return {
32
- success: true,
33
- data: result,
34
- metadata: {
35
- node: this.id,
36
- executionTime: Date.now() - start,
37
- startTime: start,
38
- endTime: Date.now()
39
- }
40
- };
41
- }
42
- return this.passThroughJson(context, start);
43
- }
44
- catch (error) {
45
- this.status = NodeStatus.FAILED;
46
- throw this.wrapError(error);
47
- }
48
- }
49
- getParserConfig(context) {
50
- const requestContext = context.request.context;
51
- const nestedMetadata = requestContext?.metadata;
52
- const metadataSource = nestedMetadata ?? requestContext;
53
- const provider = metadataSource?.provider ?? requestContext?.provider;
54
- const profile = provider?.profile;
55
- const providedModel = typeof metadataSource?.model === 'string' ? metadataSource.model : undefined;
56
- const providerProtocol = typeof metadataSource?.providerProtocol === 'string'
57
- ? metadataSource.providerProtocol
58
- : undefined;
59
- const entryEndpoint = typeof metadataSource?.entryEndpoint === 'string'
60
- ? metadataSource.entryEndpoint
61
- : context.request.endpoint;
62
- return {
63
- protocol: this.resolveSseProtocol(profile, providerProtocol, entryEndpoint),
64
- model: providedModel
65
- };
66
- }
67
- resolveSseProtocol(profile, providerProtocol, entryEndpoint) {
68
- const candidates = [
69
- profile,
70
- providerProtocol,
71
- entryEndpoint
72
- ].filter((value) => typeof value === 'string');
73
- for (const value of candidates) {
74
- const lowered = value.toLowerCase();
75
- if (lowered.includes('responses')) {
76
- return 'openai-responses';
77
- }
78
- if (lowered.includes('messages') || lowered.includes('anthropic')) {
79
- return 'anthropic-messages';
80
- }
81
- }
82
- return 'openai-chat';
83
- }
84
- async applyCompatibilityFilters(config, _context) {
85
- return config;
86
- }
87
- detectInputFormat(context) {
88
- const payload = context.request.payload;
89
- if (payload && typeof payload === 'object' && 'readable' in payload) {
90
- return 'sse-stream';
91
- }
92
- if (payload && typeof payload === 'object') {
93
- return 'json-object';
94
- }
95
- return 'json-object';
96
- }
97
- async convertSSEToJson(context, config) {
98
- const readable = this.unwrapReadable(context.request.payload);
99
- const codec = defaultSseCodecRegistry.get(config.protocol);
100
- try {
101
- const result = await codec.convertSseToJson(this.createSseEventStream(readable), {
102
- requestId: context.request.id,
103
- model: config.model,
104
- direction: 'request'
105
- });
106
- if (!result || typeof result !== 'object') {
107
- throw new ConversionError('SSE converter returned empty payload', this.id);
108
- }
109
- return result;
110
- }
111
- catch (error) {
112
- throw new ConversionError(`${config.protocol} SSE conversion failed: ${error.message}`, this.id);
113
- }
114
- }
115
- createSseEventStream(sseStream) {
116
- const iterator = async function* () {
117
- for await (const chunk of sseStream) {
118
- yield typeof chunk === 'string' ? chunk : chunk.toString();
119
- }
120
- };
121
- return iterator();
122
- }
123
- unwrapReadable(payload) {
124
- if (payload && typeof payload === 'object' && 'readable' in payload) {
125
- const candidate = payload.readable;
126
- if (candidate instanceof Readable) {
127
- return candidate;
128
- }
129
- }
130
- return payload;
131
- }
132
- passThroughJson(context, startTime) {
133
- const payload = context.request.payload;
134
- if (!payload || typeof payload !== 'object') {
135
- throw new ConversionError('JSON payload must be an object', this.id);
136
- }
137
- this.status = NodeStatus.COMPLETED;
138
- return {
139
- success: true,
140
- data: payload,
141
- metadata: {
142
- node: this.id,
143
- executionTime: Date.now() - startTime,
144
- startTime,
145
- endTime: Date.now()
146
- }
147
- };
148
- }
149
- wrapError(error) {
150
- if (error instanceof ConversionError) {
151
- return error;
152
- }
153
- return new ConversionError(`SSE input conversion failed: ${error.message}`, this.id);
154
- }
155
- validate() {
156
- return {
157
- valid: true,
158
- errors: [],
159
- warnings: []
160
- };
161
- }
162
- async cleanup() {
163
- this.status = NodeStatus.IDLE;
164
- }
165
- }
@@ -1,19 +0,0 @@
1
- import { NodeStatus, NodeType, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
2
- /**
3
- * SSE 输出节点
4
- *
5
- * 将转换后的响应根据是否流式输出为 JSON 或 Readable SSE 流。
6
- */
7
- export declare class SSEOutputNode implements PipelineNode {
8
- readonly id: string;
9
- readonly config: NodeConfig;
10
- readonly type = NodeType.OUTPUT;
11
- status: NodeStatus;
12
- readonly name: string;
13
- constructor(id: string, config: NodeConfig);
14
- execute(context: NodeContext): Promise<NodeResult>;
15
- validate(): ValidationResult;
16
- cleanup(): Promise<void>;
17
- private createStreamingResponse;
18
- private resolveModelId;
19
- }
@@ -1,267 +0,0 @@
1
- import { PassThrough } from 'node:stream';
2
- import { NodeStatus, NodeType } from '../../types/index.js';
3
- import { defaultSseCodecRegistry } from '../../../../sse/index.js';
4
- function getPipelineDirection(context) {
5
- const metadata = context.request.context?.metadata;
6
- const direction = typeof metadata?.direction === 'string' ? metadata.direction.toLowerCase() : '';
7
- return direction === 'response' ? 'response' : 'request';
8
- }
9
- function mapResumeToolOutputs(meta) {
10
- if (!Array.isArray(meta))
11
- return [];
12
- const mapped = [];
13
- meta.forEach((entry, index) => {
14
- if (!entry || typeof entry !== 'object')
15
- return;
16
- const rec = entry;
17
- const originalId = typeof rec.originalId === 'string' && rec.originalId.trim()
18
- ? rec.originalId.trim()
19
- : undefined;
20
- const callIdRaw = typeof rec.callId === 'string' && rec.callId.trim()
21
- ? rec.callId.trim()
22
- : undefined;
23
- const callId = callIdRaw || (originalId ? (originalId.startsWith('fc_') ? originalId : `fc_${originalId}`) : `fc_resume_${index}`);
24
- const outputText = typeof rec.outputText === 'string' ? rec.outputText : '';
25
- mapped.push({
26
- id: callId,
27
- type: 'function_call_output',
28
- call_id: callId,
29
- tool_call_id: originalId,
30
- output: outputText
31
- });
32
- });
33
- return mapped;
34
- }
35
- function resolveMetadata(context) {
36
- const ctx = context.request.context?.metadata;
37
- return (ctx && typeof ctx === 'object') ? ctx : {};
38
- }
39
- function getOriginalRequest(metadata) {
40
- const original = metadata?.originalRequest;
41
- return original && typeof original === 'object' ? original : undefined;
42
- }
43
- function normalizeStreamingFlag(value) {
44
- if (typeof value === 'boolean')
45
- return value;
46
- if (typeof value === 'string') {
47
- const lowered = value.trim().toLowerCase();
48
- if (['true', '1', 'yes', 'always'].includes(lowered))
49
- return true;
50
- if (['false', '0', 'no', 'never'].includes(lowered))
51
- return false;
52
- }
53
- return undefined;
54
- }
55
- function metadataRequestsStreaming(meta) {
56
- if (!meta)
57
- return false;
58
- const inboundFlag = normalizeStreamingFlag(meta.inboundStream);
59
- if (inboundFlag)
60
- return true;
61
- const directFlag = normalizeStreamingFlag(meta.stream);
62
- if (directFlag)
63
- return true;
64
- const clientFlag = normalizeStreamingFlag(meta.clientStream);
65
- if (clientFlag)
66
- return true;
67
- if (typeof meta.streaming === 'string') {
68
- const lowered = meta.streaming.toLowerCase();
69
- if (lowered === 'always')
70
- return true;
71
- if (lowered === 'auto' && clientFlag)
72
- return true;
73
- }
74
- return false;
75
- }
76
- function shouldStreamResponse(context, conversionResponse) {
77
- const metadata = resolveMetadata(context);
78
- if (metadataRequestsStreaming(metadata))
79
- return true;
80
- const orig = getOriginalRequest(metadata);
81
- if (orig) {
82
- const origStream = normalizeStreamingFlag(orig.stream);
83
- if (origStream === true)
84
- return true;
85
- }
86
- if (conversionResponse?.metadata && conversionResponse.metadata?.streaming === true)
87
- return true;
88
- return false;
89
- }
90
- function fallbackSSE(payload, requestId) {
91
- const stream = new PassThrough();
92
- try {
93
- stream.write(`data: ${JSON.stringify({ error: payload, requestId })}\n\n`);
94
- }
95
- catch {
96
- stream.write('data: {"error":{"message":"sse_fallback"}}\n\n');
97
- }
98
- stream.write('data: [DONE]\n\n');
99
- stream.end();
100
- return stream;
101
- }
102
- function resolveFormat(contextData) {
103
- const conversionResponse = contextData?.conversionResponse;
104
- const explicit = typeof conversionResponse?.format === 'string' ? conversionResponse.format : undefined;
105
- if (explicit)
106
- return explicit;
107
- const outputFormat = contextData?.outputFormat;
108
- return typeof outputFormat === 'string' ? outputFormat : '';
109
- }
110
- function normalizeFormatToProtocol(format) {
111
- if (!format) {
112
- return 'openai-chat';
113
- }
114
- const lowered = format.toLowerCase();
115
- if (lowered === 'openai-chat' || lowered === 'processed-chat') {
116
- return 'openai-chat';
117
- }
118
- if (lowered === 'openai-responses') {
119
- return 'openai-responses';
120
- }
121
- if (lowered === 'anthropic-messages' || lowered === 'anthropic') {
122
- return 'anthropic-messages';
123
- }
124
- return null;
125
- }
126
- function resolveResponsePayload(contextData) {
127
- const conversionResponse = contextData?.conversionResponse;
128
- if (conversionResponse?.data && typeof conversionResponse.data === 'object') {
129
- return conversionResponse.data;
130
- }
131
- const outputData = contextData?.outputData;
132
- if (outputData && typeof outputData === 'object') {
133
- return outputData;
134
- }
135
- return undefined;
136
- }
137
- /**
138
- * SSE 输出节点
139
- *
140
- * 将转换后的响应根据是否流式输出为 JSON 或 Readable SSE 流。
141
- */
142
- export class SSEOutputNode {
143
- id;
144
- config;
145
- type = NodeType.OUTPUT;
146
- status = NodeStatus.IDLE;
147
- name;
148
- constructor(id, config) {
149
- this.id = id;
150
- this.config = config;
151
- this.name = config.name || 'SSE Output Node';
152
- }
153
- async execute(context) {
154
- const start = Date.now();
155
- this.status = NodeStatus.RUNNING;
156
- const direction = getPipelineDirection(context);
157
- if (direction !== 'response') {
158
- this.status = NodeStatus.COMPLETED;
159
- return {
160
- success: true,
161
- data: context.data ?? {},
162
- metadata: {
163
- node: this.id,
164
- executionTime: Date.now() - start,
165
- startTime: start,
166
- endTime: Date.now()
167
- }
168
- };
169
- }
170
- const data = context.data;
171
- const conversionResponse = data?.conversionResponse;
172
- const responsePayload = resolveResponsePayload(data ?? {});
173
- const format = resolveFormat(data ?? {});
174
- const wantsStream = shouldStreamResponse(context, conversionResponse);
175
- const metadata = resolveMetadata(context);
176
- if (wantsStream) {
177
- const stream = await this.createStreamingResponse(format, responsePayload, context.request.id, metadata);
178
- this.status = NodeStatus.COMPLETED;
179
- return {
180
- success: true,
181
- data: {
182
- __sse_responses: stream,
183
- passthrough: context.pipeline.isPassthrough,
184
- format
185
- },
186
- metadata: {
187
- node: this.id,
188
- executionTime: Date.now() - start,
189
- startTime: start,
190
- endTime: Date.now()
191
- }
192
- };
193
- }
194
- // 非流式路径:
195
- // - Responses 输出:返回标准 Responses JSON(response 节点),并保留 sseStream 供快照/调试。
196
- // - 其他输出:保持原有 sseStream 形状,避免干扰 Chat / Anthropic 等路径。
197
- this.status = NodeStatus.COMPLETED;
198
- const responsePayloadData = conversionResponse?.data ?? responsePayload;
199
- const includeResponsePayload = typeof format === 'string' && format.toLowerCase() === 'openai-responses';
200
- return {
201
- success: true,
202
- data: {
203
- ...(includeResponsePayload ? {
204
- response: responsePayloadData,
205
- responseMetadata: conversionResponse?.metadata
206
- } : {}),
207
- sseStream: conversionResponse ?? responsePayload,
208
- passthrough: context.pipeline.isPassthrough,
209
- format
210
- },
211
- metadata: {
212
- node: this.id,
213
- executionTime: Date.now() - start,
214
- startTime: start,
215
- endTime: Date.now()
216
- }
217
- };
218
- }
219
- validate() {
220
- return {
221
- valid: true,
222
- errors: [],
223
- warnings: []
224
- };
225
- }
226
- async cleanup() {
227
- this.status = NodeStatus.IDLE;
228
- }
229
- async createStreamingResponse(format, payload, requestId, metadata) {
230
- if (!payload) {
231
- return fallbackSSE({ message: 'sse_not_available', format }, requestId);
232
- }
233
- const protocol = normalizeFormatToProtocol(format);
234
- if (!protocol) {
235
- return fallbackSSE({ message: 'sse_protocol_unsupported', format }, requestId);
236
- }
237
- try {
238
- const codec = defaultSseCodecRegistry.get(protocol);
239
- const resumeItems = mapResumeToolOutputs(metadata?.responsesResume?.toolOutputsDetailed);
240
- const stream = await codec.convertJsonToSse(payload, {
241
- requestId,
242
- model: this.resolveModelId(payload),
243
- direction: 'response',
244
- resumeToolOutputs: resumeItems.length ? resumeItems : undefined
245
- });
246
- return stream;
247
- }
248
- catch (error) {
249
- console.error('[SSEOutputNode] Error creating streaming response:', error);
250
- return fallbackSSE({
251
- error: 'sse_conversion_failed',
252
- message: error instanceof Error ? error.message : 'Unknown error',
253
- format,
254
- protocol
255
- }, requestId);
256
- }
257
- }
258
- resolveModelId(payload) {
259
- if ('model' in payload && typeof payload.model === 'string') {
260
- return payload.model;
261
- }
262
- if ('response' in payload && payload.response && typeof payload.response.model === 'string') {
263
- return payload.response.model;
264
- }
265
- return 'unknown';
266
- }
267
- }
@@ -1,18 +0,0 @@
1
- import { NodeStatus, NodeType, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
2
- /**
3
- * SSE 直通节点
4
- *
5
- * 在需要保持 SSE 原样透传时使用。
6
- * 仅做元数据记录,不改变数据内容。
7
- */
8
- export declare class SSEPassthroughNode implements PipelineNode {
9
- readonly id: string;
10
- readonly config: NodeConfig;
11
- readonly type = NodeType.PROCESS;
12
- status: NodeStatus;
13
- readonly name: string;
14
- constructor(id: string, config: NodeConfig);
15
- execute(context: NodeContext): Promise<NodeResult>;
16
- validate(): ValidationResult;
17
- cleanup(): Promise<void>;
18
- }