@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
@@ -2,6 +2,7 @@
2
2
  * 工具类型定义
3
3
  * 提供JSON↔SSE双向转换中常用的工具类型和辅助函数
4
4
  */
5
+ import type { JsonObject, JsonValue } from './core-interfaces.js';
5
6
  export type ProtocolType = 'chat' | 'responses';
6
7
  export type ConversionDirection = 'json_to_sse' | 'sse_to_json';
7
8
  export interface EventTypeMap {
@@ -17,9 +18,9 @@ export interface EventTypeMap {
17
18
  export interface GenericConverter<TProtocol extends ProtocolType, TDirection extends ConversionDirection> {
18
19
  protocol: TProtocol;
19
20
  direction: TDirection;
20
- convert(input: any, options: any): Promise<any>;
21
- validate?(input: any): boolean;
22
- getStats?(): any;
21
+ convert(input: unknown, options: JsonObject): Promise<unknown>;
22
+ validate?(input: unknown): boolean;
23
+ getStats?(): JsonObject;
23
24
  }
24
25
  export interface UnifiedConversionOptions {
25
26
  requestId: string;
@@ -34,12 +35,12 @@ export interface UnifiedConversionOptions {
34
35
  onError?: (error: Error) => void;
35
36
  onComplete?: () => void;
36
37
  }
37
- export interface UnifiedEventStream extends AsyncIterable<any> {
38
+ export interface UnifiedEventStream extends AsyncIterable<unknown> {
38
39
  protocol: ProtocolType;
39
40
  direction: ConversionDirection;
40
41
  requestId: string;
41
- getStats(): any;
42
- getConfig(): any;
42
+ getStats(): JsonObject;
43
+ getConfig(): JsonObject;
43
44
  pause?(): void;
44
45
  resume?(): void;
45
46
  complete(): void;
@@ -47,7 +48,7 @@ export interface UnifiedEventStream extends AsyncIterable<any> {
47
48
  on?(event: 'error', handler: (error: Error) => void): this;
48
49
  on?(event: 'complete', handler: () => void): this;
49
50
  on?(event: 'timeout', handler: () => void): this;
50
- on?(event: 'stats', handler: (stats: any) => void): this;
51
+ on?(event: 'stats', handler: (stats: JsonObject) => void): this;
51
52
  }
52
53
  export type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
53
54
  export type RequireKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;
@@ -58,8 +59,8 @@ export interface ChatJsonType {
58
59
  object: 'chat.completion' | 'chat.completion.chunk';
59
60
  created: number;
60
61
  model: string;
61
- choices: any[];
62
- usage?: any;
62
+ choices: unknown[];
63
+ usage?: JsonObject;
63
64
  }
64
65
  export type ChatSseEventType = 'chat_chunk' | 'chat.done' | 'error' | 'ping';
65
66
  export interface ResponsesJsonType {
@@ -68,11 +69,11 @@ export interface ResponsesJsonType {
68
69
  created_at: number;
69
70
  model: string;
70
71
  status: string;
71
- output: any[];
72
- usage?: any;
72
+ output: unknown[];
73
+ usage?: JsonObject;
73
74
  }
74
75
  export type ResponsesSseEventType = 'response.created' | 'response.in_progress' | 'response.completed' | 'response.required_action' | 'response.done' | 'response.output_item.added' | 'response.output_item.done' | 'response.content_part.added' | 'response.content_part.done' | 'response.output_text.delta' | 'response.output_text.done' | 'response.reasoning_text.delta' | 'response.reasoning_text.done' | 'response.function_call_arguments.delta' | 'response.function_call_arguments.done';
75
- export interface ConversionResult<TSuccess = any, TError = Error> {
76
+ export interface ConversionResult<TSuccess = unknown, TError = Error> {
76
77
  success: boolean;
77
78
  data?: TSuccess;
78
79
  error?: TError;
@@ -84,7 +85,7 @@ export interface ConversionResult<TSuccess = any, TError = Error> {
84
85
  direction: ConversionDirection;
85
86
  };
86
87
  }
87
- export type AsyncConversionResult<TSuccess = any, TError = Error> = Promise<ConversionResult<TSuccess, TError>>;
88
+ export type AsyncConversionResult<TSuccess = unknown, TError = Error> = Promise<ConversionResult<TSuccess, TError>>;
88
89
  export interface ConverterFactory {
89
90
  createJsonToSseConverter<TProtocol extends ProtocolType>(protocol: TProtocol, options: UnifiedConversionOptions): GenericConverter<TProtocol, 'json_to_sse'>;
90
91
  createSseToJsonConverter<TProtocol extends ProtocolType>(protocol: TProtocol, options: UnifiedConversionOptions): GenericConverter<TProtocol, 'sse_to_json'>;
@@ -95,7 +96,7 @@ export interface ConverterRegistry {
95
96
  list(): Array<{
96
97
  protocol: ProtocolType;
97
98
  direction: ConversionDirection;
98
- converter: GenericConverter<any, any>;
99
+ converter: GenericConverter<ProtocolType, ConversionDirection>;
99
100
  }>;
100
101
  }
101
102
  export interface Validator<T> {
@@ -112,13 +113,13 @@ export interface ValidationError {
112
113
  code: string;
113
114
  message: string;
114
115
  path: string;
115
- value?: any;
116
+ value?: JsonValue;
116
117
  }
117
118
  export interface ValidationWarning {
118
119
  code: string;
119
120
  message: string;
120
121
  path: string;
121
- value?: any;
122
+ value?: JsonValue;
122
123
  }
123
124
  export interface Serializer<T> {
124
125
  serialize(input: T): string;
@@ -138,14 +139,15 @@ export interface MetricsCollector {
138
139
  recordHistogram(name: string, value: number, tags?: Record<string, string>): void;
139
140
  setGauge(name: string, value: number, tags?: Record<string, string>): void;
140
141
  recordTimer(name: string, duration: number, tags?: Record<string, string>): void;
141
- getMetrics(): Record<string, any>;
142
+ getMetrics(): Record<string, unknown>;
142
143
  }
144
+ type LoggerMetadata = Record<string, unknown>;
143
145
  export interface Logger {
144
- debug(message: string, meta?: any): void;
145
- info(message: string, meta?: any): void;
146
- warn(message: string, meta?: any): void;
147
- error(message: string, error?: Error, meta?: any): void;
148
- child(meta: any): Logger;
146
+ debug(message: string, meta?: LoggerMetadata): void;
147
+ info(message: string, meta?: LoggerMetadata): void;
148
+ warn(message: string, meta?: LoggerMetadata): void;
149
+ error(message: string, error?: Error, meta?: LoggerMetadata): void;
150
+ child(meta: LoggerMetadata): Logger;
149
151
  }
150
152
  export interface RetryConfig {
151
153
  maxAttempts: number;
@@ -175,26 +177,27 @@ export interface HealthCheck {
175
177
  export interface HealthStatus {
176
178
  healthy: boolean;
177
179
  timestamp: number;
178
- details?: Record<string, any>;
180
+ details?: Record<string, unknown>;
179
181
  }
182
+ type LifecycleContext = Record<string, unknown>;
180
183
  export interface LifecycleHooks {
181
- beforeConversion?: (context: any) => Promise<void>;
182
- afterConversion?: (context: any, result: any) => Promise<void>;
183
- onError?: (context: any, error: Error) => Promise<void>;
184
- onTimeout?: (context: any) => Promise<void>;
185
- onRetry?: (context: any, attempt: number) => Promise<void>;
184
+ beforeConversion?: (context: LifecycleContext) => Promise<void>;
185
+ afterConversion?: (context: LifecycleContext, result: unknown) => Promise<void>;
186
+ onError?: (context: LifecycleContext, error: Error) => Promise<void>;
187
+ onTimeout?: (context: LifecycleContext) => Promise<void>;
188
+ onRetry?: (context: LifecycleContext, attempt: number) => Promise<void>;
186
189
  }
187
190
  export interface Middleware {
188
191
  name: string;
189
192
  priority: number;
190
- beforeConversion?: (context: any) => Promise<void>;
191
- afterConversion?: (context: any, result: any) => Promise<void>;
192
- onError?: (context: any, error: Error) => Promise<void>;
193
+ beforeConversion?: (context: LifecycleContext) => Promise<void>;
194
+ afterConversion?: (context: LifecycleContext, result: unknown) => Promise<void>;
195
+ onError?: (context: LifecycleContext, error: Error) => Promise<void>;
193
196
  }
194
197
  export interface Plugin {
195
198
  name: string;
196
199
  version: string;
197
- initialize(context: any): Promise<void>;
200
+ initialize(context: LifecycleContext): Promise<void>;
198
201
  destroy(): Promise<void>;
199
202
  getMiddlewares(): Middleware[];
200
203
  getHooks(): LifecycleHooks;
@@ -209,22 +212,23 @@ export interface EnvironmentParser {
209
212
  getNumber(key: string, defaultValue?: number): number;
210
213
  getBoolean(key: string, defaultValue?: boolean): boolean;
211
214
  getArray(key: string, delimiter?: string): string[];
212
- getObject(key: string): any;
215
+ getObject(key: string): JsonObject;
213
216
  }
214
217
  export declare const TypeGuards: {
215
- isString: (value: any) => value is string;
216
- isNumber: (value: any) => value is number;
217
- isBoolean: (value: any) => value is boolean;
218
- isObject: (value: any) => value is object;
219
- isArray: (value: any) => value is any[];
220
- isFunction: (value: any) => value is Function;
221
- isDate: (value: any) => value is Date;
222
- isNull: (value: any) => value is null;
223
- isUndefined: (value: any) => value is undefined;
224
- isNullOrUndefined: (value: any) => value is null | undefined;
218
+ isString: (value: unknown) => value is string;
219
+ isNumber: (value: unknown) => value is number;
220
+ isBoolean: (value: unknown) => value is boolean;
221
+ isObject: (value: unknown) => value is JsonObject;
222
+ isArray: (value: unknown) => value is JsonValue[];
223
+ isFunction: (value: unknown) => value is (...args: unknown[]) => unknown;
224
+ isDate: (value: unknown) => value is Date;
225
+ isNull: (value: unknown) => value is null;
226
+ isUndefined: (value: unknown) => value is undefined;
227
+ isNullOrUndefined: (value: unknown) => value is null | undefined;
225
228
  };
226
229
  export declare const AsyncUtils: {
227
230
  delay: (ms: number) => Promise<void>;
228
231
  timeout: <T>(promise: Promise<T>, ms: number) => Promise<T>;
229
232
  retry: <T>(fn: () => Promise<T>, config: RetryConfig) => Promise<T>;
230
233
  };
234
+ export {};
@@ -5,15 +5,15 @@
5
5
  // 类型守卫工具函数
6
6
  export const TypeGuards = {
7
7
  isString: (value) => typeof value === 'string',
8
- isNumber: (value) => typeof value === 'number' && !isNaN(value),
8
+ isNumber: (value) => typeof value === 'number' && !Number.isNaN(value),
9
9
  isBoolean: (value) => typeof value === 'boolean',
10
- isObject: (value) => value !== null && typeof value === 'object',
10
+ isObject: (value) => value !== null && typeof value === 'object' && !Array.isArray(value),
11
11
  isArray: (value) => Array.isArray(value),
12
12
  isFunction: (value) => typeof value === 'function',
13
13
  isDate: (value) => value instanceof Date,
14
14
  isNull: (value) => value === null,
15
15
  isUndefined: (value) => value === undefined,
16
- isNullOrUndefined: (value) => value == null
16
+ isNullOrUndefined: (value) => value === null || value === undefined
17
17
  };
18
18
  // 异步工具函数
19
19
  export const AsyncUtils = {
@@ -31,19 +31,16 @@ export const AsyncUtils = {
31
31
  return await fn();
32
32
  }
33
33
  catch (error) {
34
- lastError = error;
35
- if (!config.retryableErrors.includes(error.name) || attempt === config.maxAttempts) {
36
- throw error;
34
+ const normalizedError = error instanceof Error ? error : new Error(String(error));
35
+ lastError = normalizedError;
36
+ if (!config.retryableErrors.includes(normalizedError.name) || attempt === config.maxAttempts) {
37
+ throw normalizedError;
37
38
  }
38
39
  const delay = Math.min(config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt - 1), config.maxDelayMs);
39
- if (config.jitter) {
40
- await AsyncUtils.delay(delay + Math.random() * delay * 0.1);
41
- }
42
- else {
43
- await AsyncUtils.delay(delay);
44
- }
40
+ const jitter = config.jitter ? Math.random() * delay * 0.1 : 0;
41
+ await AsyncUtils.delay(delay + jitter);
45
42
  }
46
43
  }
47
- throw lastError;
44
+ throw lastError ?? new Error('Operation failed after retry attempts');
48
45
  }
49
46
  };
@@ -1,21 +1,77 @@
1
- function tryParse(s) {
1
+ // Tool registry and validator (single source of truth)
2
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
3
+ const asString = (value) => {
4
+ if (typeof value === 'string' && value.trim().length > 0) {
5
+ return value;
6
+ }
7
+ return null;
8
+ };
9
+ const asStringArray = (value) => {
10
+ if (!Array.isArray(value)) {
11
+ return null;
12
+ }
13
+ const normalized = [];
14
+ for (const entry of value) {
15
+ if (typeof entry !== 'string' || entry.trim().length === 0) {
16
+ return null;
17
+ }
18
+ normalized.push(entry);
19
+ }
20
+ return normalized;
21
+ };
22
+ const readBoolean = (value) => typeof value === 'boolean' ? value : undefined;
23
+ const readNumber = (value) => {
24
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
25
+ return undefined;
26
+ }
27
+ return value;
28
+ };
29
+ const tryParseJson = (input) => {
2
30
  try {
3
- const v = JSON.parse(s);
4
- return (v && typeof v === 'object') ? v : {};
31
+ const parsed = JSON.parse(input);
32
+ return isRecord(parsed) ? parsed : {};
5
33
  }
6
34
  catch {
7
35
  return {};
8
36
  }
9
- }
10
- function isImagePath(p) {
37
+ };
38
+ const toJson = (value) => {
11
39
  try {
12
- const s = String(p || '').toLowerCase();
13
- return /\.(png|jpg|jpeg|gif|webp|bmp|svg|tiff?|ico|heic|jxl)$/.test(s);
40
+ return JSON.stringify(value ?? {});
14
41
  }
15
42
  catch {
43
+ return '{}';
44
+ }
45
+ };
46
+ const detectForbiddenWrite = (script) => {
47
+ const normalized = script.toLowerCase();
48
+ if (!normalized) {
16
49
  return false;
17
50
  }
18
- }
51
+ if (/>\s*[^\s<]/.test(normalized)) {
52
+ return true;
53
+ }
54
+ if (/<<</.test(normalized) || /<</.test(normalized)) {
55
+ return true;
56
+ }
57
+ if (/\bsed\b[^\n]*-i\b/.test(normalized)) {
58
+ return true;
59
+ }
60
+ if (/\bed\b[^\n]*-s\b/.test(normalized)) {
61
+ return true;
62
+ }
63
+ if (/\btee\b\s+/.test(normalized)) {
64
+ return true;
65
+ }
66
+ return false;
67
+ };
68
+ const isImagePath = (value) => {
69
+ const pathValue = asString(value);
70
+ if (!pathValue) {
71
+ return false;
72
+ }
73
+ return /\.(png|jpg|jpeg|gif|webp|bmp|svg|tiff?|ico|heic|jxl)$/i.test(pathValue);
74
+ };
19
75
  export function getAllowedToolNames() {
20
76
  return [
21
77
  'shell',
@@ -24,131 +80,133 @@ export function getAllowedToolNames() {
24
80
  'view_image',
25
81
  'list_mcp_resources',
26
82
  'read_mcp_resource',
27
- 'list_mcp_resource_templates',
83
+ 'list_mcp_resource_templates'
28
84
  ];
29
85
  }
30
- function detectForbiddenWrite(script) {
31
- const s = script.toLowerCase();
32
- if (!s)
33
- return false;
34
- // forbid common write patterns via shell
35
- if (/>\s*[^\s<]/.test(s))
36
- return true; // redirection
37
- if (/<<</.test(s) || /<</.test(s))
38
- return true; // heredoc
39
- if (/\bsed\b[^\n]*\-i\b/.test(s))
40
- return true;
41
- if (/\bed\b[^\n]*\-s\b/.test(s))
42
- return true;
43
- if (/\btee\b\s+/.test(s))
44
- return true;
45
- return false;
46
- }
47
86
  export function validateToolCall(name, argsString) {
48
- const nm = String(name || '').trim();
49
- if (!nm)
87
+ const normalizedName = String(name || '').trim();
88
+ if (!normalizedName) {
50
89
  return { ok: false, reason: 'empty_tool_name' };
90
+ }
51
91
  const allowed = new Set(getAllowedToolNames());
52
- if (!allowed.has(nm))
92
+ if (!allowed.has(normalizedName)) {
53
93
  return { ok: false, reason: 'unknown_tool' };
54
- // Parse args once
55
- const rawObj = tryParse(typeof argsString === 'string' ? argsString : '{}');
56
- const toJson = (v) => { try {
57
- return JSON.stringify(v ?? {});
58
94
  }
59
- catch {
60
- return '{}';
61
- } };
62
- switch (nm) {
95
+ const rawArgs = tryParseJson(typeof argsString === 'string' ? argsString : '{}');
96
+ switch (normalizedName) {
63
97
  case 'apply_patch': {
64
- const patch = rawObj?.patch;
65
- if (typeof patch !== 'string' || patch.trim().length === 0) {
98
+ const patch = asString(rawArgs.patch);
99
+ if (!patch) {
66
100
  return { ok: false, reason: 'missing_patch' };
67
101
  }
68
102
  return { ok: true, normalizedArgs: toJson({ patch }) };
69
103
  }
70
104
  case 'shell': {
71
- let cmd = rawObj?.command;
72
- // Accept string command and coerce to argv array
73
- if (typeof cmd === 'string' && cmd.trim().length) {
74
- cmd = [cmd];
105
+ const rawCommand = rawArgs.command;
106
+ let normalizedCommand = null;
107
+ if (typeof rawCommand === 'string') {
108
+ normalizedCommand = [rawCommand];
109
+ }
110
+ else {
111
+ normalizedCommand = asStringArray(rawCommand);
75
112
  }
76
- if (!Array.isArray(cmd) || !cmd.every((x) => typeof x === 'string')) {
113
+ if (!normalizedCommand) {
77
114
  return { ok: false, reason: 'invalid_command' };
78
115
  }
79
- // 统一 bash -lc 处理:
80
- // - 当命令包含管道/与或/分号等元字符时,若未显式使用 bash -lc,则折叠为 ['bash','-lc','<script>']
81
- // - 对写入型重定向/heredoc/sed -i 等仍然严格拒绝(要求使用 apply_patch)
82
- const joinScript = (arr) => arr.join(' ');
83
- const looksBashLc = (arr) => arr.length >= 2 && arr[0] === 'bash' && arr[1] === '-lc';
84
- const hasMeta = (s) => /[|;&]/.test(s) || s.includes('&&') || s.includes('||');
85
- const scriptJoined = joinScript(cmd);
86
- // 拒绝危险写入模式
116
+ const scriptJoined = normalizedCommand.join(' ');
87
117
  if (detectForbiddenWrite(scriptJoined)) {
88
118
  return { ok: false, reason: 'forbidden_write_redirection' };
89
119
  }
90
- let finalCmd = cmd.slice();
91
- if (!looksBashLc(finalCmd) && hasMeta(scriptJoined)) {
92
- finalCmd = ['bash', '-lc', scriptJoined];
93
- }
94
- const out = { command: finalCmd };
95
- if (typeof rawObj?.workdir === 'string')
96
- out.workdir = rawObj.workdir;
97
- if (typeof rawObj?.timeout_ms === 'number')
98
- out.timeout_ms = rawObj.timeout_ms;
99
- if (typeof rawObj?.with_escalated_permissions === 'boolean')
100
- out.with_escalated_permissions = rawObj.with_escalated_permissions;
101
- if (typeof rawObj?.justification === 'string')
102
- out.justification = rawObj.justification;
103
- return { ok: true, normalizedArgs: toJson(out) };
120
+ const looksBashLc = (arr) => arr.length >= 2 && arr[0] === 'bash' && arr[1] === '-lc';
121
+ const hasMetaChars = (script) => /[|;&]/.test(script) || script.includes('&&') || script.includes('||');
122
+ let finalCommand = normalizedCommand.slice();
123
+ if (!looksBashLc(finalCommand) && hasMetaChars(scriptJoined)) {
124
+ finalCommand = ['bash', '-lc', scriptJoined];
125
+ }
126
+ const shellArgs = { command: finalCommand };
127
+ const workdir = asString(rawArgs.workdir);
128
+ if (workdir) {
129
+ shellArgs.workdir = workdir;
130
+ }
131
+ const timeout = readNumber(rawArgs.timeout_ms);
132
+ if (timeout !== undefined) {
133
+ shellArgs.timeout_ms = timeout;
134
+ }
135
+ const escalated = readBoolean(rawArgs.with_escalated_permissions);
136
+ if (typeof escalated === 'boolean') {
137
+ shellArgs.with_escalated_permissions = escalated;
138
+ }
139
+ const justification = asString(rawArgs.justification);
140
+ if (justification) {
141
+ shellArgs.justification = justification;
142
+ }
143
+ return { ok: true, normalizedArgs: toJson(shellArgs) };
104
144
  }
105
145
  case 'update_plan': {
106
- const plan = rawObj?.plan;
107
- if (!Array.isArray(plan))
146
+ if (!Array.isArray(rawArgs.plan)) {
108
147
  return { ok: false, reason: 'missing_plan' };
109
- // warn for >1 in_progress
110
- let inProg = 0;
111
- for (const it of plan) {
112
- if (it && typeof it === 'object' && it.status === 'in_progress')
113
- inProg += 1;
148
+ }
149
+ let inProgressCount = 0;
150
+ for (const entry of rawArgs.plan) {
151
+ if (isRecord(entry) && entry.status === 'in_progress') {
152
+ inProgressCount += 1;
153
+ }
114
154
  }
115
155
  const warnings = [];
116
- if (inProg > 1)
117
- warnings.push({ kind: 'multiple_in_progress', count: inProg });
118
- return { ok: true, warnings: warnings.length ? warnings : undefined, normalizedArgs: toJson({ explanation: rawObj?.explanation, plan }) };
156
+ if (inProgressCount > 1) {
157
+ warnings.push({ kind: 'multiple_in_progress', count: inProgressCount });
158
+ }
159
+ const explanation = asString(rawArgs.explanation);
160
+ return {
161
+ ok: true,
162
+ warnings: warnings.length ? warnings : undefined,
163
+ normalizedArgs: toJson({ explanation, plan: rawArgs.plan })
164
+ };
119
165
  }
120
166
  case 'view_image': {
121
- const path = rawObj?.path;
122
- if (typeof path !== 'string' || !isImagePath(path))
167
+ const pathValue = asString(rawArgs.path);
168
+ if (!pathValue || !isImagePath(pathValue)) {
123
169
  return { ok: false, reason: 'invalid_image_path' };
124
- return { ok: true, normalizedArgs: toJson({ path }) };
170
+ }
171
+ return { ok: true, normalizedArgs: toJson({ path: pathValue }) };
125
172
  }
126
173
  case 'list_mcp_resources': {
127
- // all optional; no heavy validation here
128
- const out = {};
129
- if (typeof rawObj?.server === 'string')
130
- out.server = rawObj.server;
131
- if (typeof rawObj?.filter === 'string')
132
- out.filter = rawObj.filter;
133
- if (typeof rawObj?.root === 'string')
134
- out.root = rawObj.root;
135
- return { ok: true, normalizedArgs: toJson(out) };
174
+ const payload = {};
175
+ const server = asString(rawArgs.server);
176
+ if (server) {
177
+ payload.server = server;
178
+ }
179
+ const filter = asString(rawArgs.filter);
180
+ if (filter) {
181
+ payload.filter = filter;
182
+ }
183
+ const root = asString(rawArgs.root);
184
+ if (root) {
185
+ payload.root = root;
186
+ }
187
+ return { ok: true, normalizedArgs: toJson(payload) };
136
188
  }
137
189
  case 'read_mcp_resource': {
138
- const server = rawObj?.server;
139
- const uri = rawObj?.uri;
140
- if (typeof server !== 'string' || typeof uri !== 'string')
190
+ const server = asString(rawArgs.server);
191
+ const uri = asString(rawArgs.uri);
192
+ if (!server || !uri) {
141
193
  return { ok: false, reason: 'missing_server_or_uri' };
194
+ }
142
195
  return { ok: true, normalizedArgs: toJson({ server, uri }) };
143
196
  }
144
197
  case 'list_mcp_resource_templates': {
145
- const out = {};
146
- if (typeof rawObj?.server === 'string')
147
- out.server = rawObj.server;
148
- if (typeof rawObj?.cursor === 'string')
149
- out.cursor = rawObj.cursor;
150
- return { ok: true, normalizedArgs: toJson(out) };
198
+ const payload = {};
199
+ const server = asString(rawArgs.server);
200
+ if (server) {
201
+ payload.server = server;
202
+ }
203
+ const cursor = asString(rawArgs.cursor);
204
+ if (cursor) {
205
+ payload.cursor = cursor;
206
+ }
207
+ return { ok: true, normalizedArgs: toJson(payload) };
151
208
  }
209
+ default:
210
+ return { ok: false, reason: 'unknown_tool' };
152
211
  }
153
- return { ok: false, reason: 'unknown_tool' };
154
212
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsonstudio/llms",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -8,6 +8,8 @@
8
8
  "scripts": {
9
9
  "build": "tsc -p tsconfig.json",
10
10
  "build:dev": "tsc -p tsconfig.json",
11
+ "lint": "eslint --no-eslintrc -c .eslintrc.json src --ext .ts --no-cache",
12
+ "lint:fix": "eslint --no-eslintrc -c .eslintrc.json src --ext .ts --no-cache --fix",
11
13
  "postbuild": "node scripts/tests/run-matrix-ci.mjs",
12
14
  "verif": "node scripts/tests/run-matrix-ci.mjs",
13
15
  "verif:bridge": "node scripts/tests/run-cross-bridge-ci.mjs",
@@ -18,16 +20,11 @@
18
20
  "capture:chat:lmstudio": "node scripts/tools/capture-chat-golden-lmstudio.mjs",
19
21
  "capture:chat:modelscope": "node scripts/tools/capture-chat-golden-modelscope.mjs",
20
22
  "test:matrix": "npm run build:dev && node scripts/tests/run-matrix-ci.mjs",
21
- "test:phase2": "npm run build && node scripts/tests/run-phase2a.mjs",
22
- "test:phase3-sse": "npm run build && node scripts/tests/sse-node-roundtrip.mjs",
23
- "test:anthropic-sse": "npm run build && node scripts/tests/anthropic-sse-node-roundtrip.mjs",
24
- "test:anthropic-node": "npm run build && node scripts/tests/anthropic-node-roundtrip.mjs",
25
23
  "capture:anthropic:golden": "node scripts/tools/capture-anthropic-golden.mjs --config $HOME/.routecodex/provider/glm-anthropic/config.json --prompt 'Say hi in one sentence'",
26
24
  "test:anthropic-golden": "npm run build && node scripts/tests/anthropic-golden-roundtrip.mjs",
27
25
  "test:looprt:gemini": "npm run build && node scripts/tests/loop-rt-gemini.mjs",
28
26
  "replay:responses:chat-sse": "node scripts/exp3-responses-sse-to-chat-sse.mjs",
29
27
  "replay:responses:loop": "node scripts/exp4-responses-sse-loop.mjs",
30
- "replay:chat:bridge": "node scripts/exp5-chat-direct-bridge.mjs",
31
28
  "test:virtual-router": "npm run build:dev && node scripts/tests/virtual-router-dry-run.mjs",
32
29
  "test:virtual-router-health": "npm run build:dev && node scripts/tests/virtual-router-health.mjs"
33
30
  },
@@ -56,10 +53,13 @@
56
53
  },
57
54
  "devDependencies": {
58
55
  "@types/node": "^20.11.25",
56
+ "@typescript-eslint/eslint-plugin": "^6.7.4",
57
+ "@typescript-eslint/parser": "^6.7.4",
58
+ "eslint": "^8.50.0",
59
59
  "typescript": "^5.4.0"
60
60
  },
61
61
  "files": [
62
62
  "dist",
63
63
  "README.md"
64
64
  ]
65
- }
65
+ }
@@ -1,10 +0,0 @@
1
- /**
2
- * LLMSwitch V2 API - 统一对外接口
3
- *
4
- * 提供 V2 版统一对外接口,保持向后兼容,同时支持新功能
5
- */
6
- export { LLMSwitchEngineV2 } from '../core/llmswitch-engine-v2.js';
7
- export { LLMSwitchFactoryV2, createLLMSwitchV2 } from '../core/llmswitch-factory-v2.js';
8
- export type { LLMSwitchV2Config, EndpointType, ProtocolType, ProcessingMode, LLMSwitchHookContext, LLMSwitchHookStage, SSEEvent, SSEProcessingResult, ProtocolConversionData, ToolProcessingData, LLMSwitchProcessingResult, LLMSwitchErrorInfo as LLMSwitchError, LLMSwitchMetrics, LLMSwitchHealthCheck, ILLMSwitchV2 } from './llmswitch-types.js';
9
- export type { ConfigValidationResult } from './llmswitch-config.js';
10
- export { DEFAULT_LLSWITCH_CONFIG, validateLLMSwitchConfig, mergeConfig, createConfigFromEnvironment } from './llmswitch-config.js';
package/dist/api/index.js DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * LLMSwitch V2 API - 统一对外接口
3
- *
4
- * 提供 V2 版统一对外接口,保持向后兼容,同时支持新功能
5
- */
6
- // 核心实现
7
- export { LLMSwitchEngineV2 } from '../core/llmswitch-engine-v2.js';
8
- export { LLMSwitchFactoryV2, createLLMSwitchV2 } from '../core/llmswitch-factory-v2.js';
9
- // 默认配置和验证
10
- export { DEFAULT_LLSWITCH_CONFIG, validateLLMSwitchConfig, mergeConfig, createConfigFromEnvironment } from './llmswitch-config.js';
11
- // V2 与 V1 解耦:不再从此处导出任何 V1 相关接口
@@ -1,15 +0,0 @@
1
- /**
2
- * LLMSwitch V2 配置类型和默认配置
3
- *
4
- * 定义LLMSwitch V2的配置结构、验证和默认值
5
- */
6
- import type { LLMSwitchV2Config } from './llmswitch-types.js';
7
- export declare const DEFAULT_LLSWITCH_CONFIG: LLMSwitchV2Config;
8
- export interface ConfigValidationResult {
9
- valid: boolean;
10
- errors: string[];
11
- warnings: string[];
12
- }
13
- export declare function validateLLMSwitchConfig(config: Partial<LLMSwitchV2Config>): ConfigValidationResult;
14
- export declare function mergeConfig(base: LLMSwitchV2Config, override: Partial<LLMSwitchV2Config>): LLMSwitchV2Config;
15
- export declare function createConfigFromEnvironment(): Partial<LLMSwitchV2Config>;