@jsonstudio/rcc 0.89.3 → 0.89.168

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 (284) hide show
  1. package/README.md +240 -179
  2. package/config/modules.json +1 -11
  3. package/dist/build-info.js +3 -3
  4. package/dist/build-info.js.map +1 -1
  5. package/dist/client/gemini-cli/gemini-cli-protocol-client.d.ts +16 -0
  6. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +56 -0
  7. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -0
  8. package/dist/client/openai/chat-protocol-client.js.map +1 -1
  9. package/dist/config/modules.json +1 -11
  10. package/dist/core/provider-health-manager.d.ts +17 -0
  11. package/dist/core/provider-health-manager.js +66 -0
  12. package/dist/core/provider-health-manager.js.map +1 -0
  13. package/dist/error-handling/route-error-hub.d.ts +48 -0
  14. package/dist/error-handling/route-error-hub.js +131 -0
  15. package/dist/error-handling/route-error-hub.js.map +1 -0
  16. package/dist/index.js +26 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/modules/llmswitch/bridge.d.ts +2 -0
  19. package/dist/modules/llmswitch/bridge.js +17 -0
  20. package/dist/modules/llmswitch/bridge.js.map +1 -1
  21. package/dist/modules/pipeline/utils/colored-logger.d.ts +14 -0
  22. package/dist/modules/pipeline/utils/colored-logger.js +48 -0
  23. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -0
  24. package/dist/modules/pipeline/utils/debug-logger.d.ts +2 -0
  25. package/dist/modules/pipeline/utils/debug-logger.js +36 -0
  26. package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
  27. package/dist/providers/auth/gemini-cli-userinfo-helper.d.ts +53 -0
  28. package/dist/providers/auth/gemini-cli-userinfo-helper.js +152 -0
  29. package/dist/providers/auth/gemini-cli-userinfo-helper.js.map +1 -0
  30. package/dist/providers/auth/oauth-auth.js +3 -2
  31. package/dist/providers/auth/oauth-auth.js.map +1 -1
  32. package/dist/providers/auth/oauth-lifecycle.js +21 -20
  33. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  34. package/dist/providers/auth/oauth-logger.d.ts +1 -0
  35. package/dist/providers/auth/oauth-logger.js +21 -0
  36. package/dist/providers/auth/oauth-logger.js.map +1 -0
  37. package/dist/providers/compat/compat-directory-loader.js +2 -55
  38. package/dist/providers/compat/compat-directory-loader.js.map +1 -1
  39. package/dist/providers/compat/compatibility-factory.d.ts +4 -4
  40. package/dist/providers/compat/compatibility-factory.js +108 -0
  41. package/dist/providers/compat/compatibility-factory.js.map +1 -1
  42. package/dist/providers/compat/glm/glm-compatibility.d.ts +2 -2
  43. package/dist/providers/compat/glm/glm-compatibility.js +7 -7
  44. package/dist/providers/compat/glm/glm-compatibility.js.map +1 -1
  45. package/dist/providers/compat/glm/index.js +0 -6
  46. package/dist/providers/compat/glm/index.js.map +1 -1
  47. package/dist/providers/compat/iflow/iflow-compatibility.d.ts +1 -1
  48. package/dist/providers/compat/iflow/iflow-compatibility.js +6 -6
  49. package/dist/providers/compat/iflow/iflow-compatibility.js.map +1 -1
  50. package/dist/providers/compat/index.d.ts +0 -6
  51. package/dist/providers/compat/index.js +0 -7
  52. package/dist/providers/compat/index.js.map +1 -1
  53. package/dist/providers/compat/lmstudio-compatibility.d.ts +2 -2
  54. package/dist/providers/compat/lmstudio-compatibility.js +4 -4
  55. package/dist/providers/compat/lmstudio-compatibility.js.map +1 -1
  56. package/dist/providers/compat/passthrough-compatibility.d.ts +1 -1
  57. package/dist/providers/compat/passthrough-compatibility.js +3 -3
  58. package/dist/providers/compat/passthrough-compatibility.js.map +1 -1
  59. package/dist/providers/compat/profiles/chat/glm/index.d.ts +6 -0
  60. package/dist/providers/compat/profiles/chat/glm/index.js +6 -0
  61. package/dist/providers/compat/profiles/chat/glm/index.js.map +1 -0
  62. package/dist/providers/compat/profiles/chat/iflow/index.d.ts +6 -0
  63. package/dist/providers/compat/profiles/chat/iflow/index.js +6 -0
  64. package/dist/providers/compat/profiles/chat/iflow/index.js.map +1 -0
  65. package/dist/providers/compat/profiles/chat/lmstudio/index.d.ts +6 -0
  66. package/dist/providers/compat/profiles/chat/lmstudio/index.js +6 -0
  67. package/dist/providers/compat/profiles/chat/lmstudio/index.js.map +1 -0
  68. package/dist/providers/compat/profiles/chat/qwen/index.d.ts +6 -0
  69. package/dist/providers/compat/profiles/chat/qwen/index.js +6 -0
  70. package/dist/providers/compat/profiles/chat/qwen/index.js.map +1 -0
  71. package/dist/providers/compat/profiles/compat/passthrough/index.d.ts +6 -0
  72. package/dist/providers/compat/profiles/compat/passthrough/index.js +6 -0
  73. package/dist/providers/compat/profiles/compat/passthrough/index.js.map +1 -0
  74. package/dist/providers/compat/profiles/responses/c4m/index.d.ts +6 -0
  75. package/dist/providers/compat/profiles/responses/c4m/index.js +6 -0
  76. package/dist/providers/compat/profiles/responses/c4m/index.js.map +1 -0
  77. package/dist/providers/compat/profiles/responses/default/index.d.ts +6 -0
  78. package/dist/providers/compat/profiles/responses/default/index.js +6 -0
  79. package/dist/providers/compat/profiles/responses/default/index.js.map +1 -0
  80. package/dist/providers/compat/profiles/responses/fai/index.d.ts +6 -0
  81. package/dist/providers/compat/profiles/responses/fai/index.js +6 -0
  82. package/dist/providers/compat/profiles/responses/fai/index.js.map +1 -0
  83. package/dist/providers/compat/profiles/responses/fc/index.d.ts +6 -0
  84. package/dist/providers/compat/profiles/responses/fc/index.js +6 -0
  85. package/dist/providers/compat/profiles/responses/fc/index.js.map +1 -0
  86. package/dist/providers/compat/qwen/index.js +0 -6
  87. package/dist/providers/compat/qwen/index.js.map +1 -1
  88. package/dist/providers/compat/qwen-compatibility.d.ts +2 -2
  89. package/dist/providers/compat/qwen-compatibility.js +4 -4
  90. package/dist/providers/compat/qwen-compatibility.js.map +1 -1
  91. package/dist/providers/compat/register-compat-module.d.ts +8 -0
  92. package/dist/providers/compat/register-compat-module.js +53 -0
  93. package/dist/providers/compat/register-compat-module.js.map +1 -0
  94. package/dist/providers/compat/responses/c4m-responses-compatibility.d.ts +6 -2
  95. package/dist/providers/compat/responses/c4m-responses-compatibility.js +85 -3
  96. package/dist/providers/compat/responses/c4m-responses-compatibility.js.map +1 -1
  97. package/dist/providers/compat/standard-compatibility-utils.js +45 -15
  98. package/dist/providers/compat/standard-compatibility-utils.js.map +1 -1
  99. package/dist/providers/core/api/provider-config.d.ts +1 -1
  100. package/dist/providers/core/api/provider-types.d.ts +3 -1
  101. package/dist/providers/core/api/provider-types.js +1 -0
  102. package/dist/providers/core/api/provider-types.js.map +1 -1
  103. package/dist/providers/core/config/service-profiles.js +19 -2
  104. package/dist/providers/core/config/service-profiles.js.map +1 -1
  105. package/dist/providers/core/runtime/base-provider.d.ts +8 -0
  106. package/dist/providers/core/runtime/base-provider.js +79 -36
  107. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  108. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +33 -0
  109. package/dist/providers/core/runtime/gemini-cli-http-provider.js +156 -0
  110. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -0
  111. package/dist/providers/core/runtime/gemini-http-provider.d.ts +1 -2
  112. package/dist/providers/core/runtime/gemini-http-provider.js +0 -12
  113. package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
  114. package/dist/providers/core/runtime/http-request-executor.d.ts +42 -0
  115. package/dist/providers/core/runtime/http-request-executor.js +133 -0
  116. package/dist/providers/core/runtime/http-request-executor.js.map +1 -0
  117. package/dist/providers/core/runtime/http-transport-provider.d.ts +7 -11
  118. package/dist/providers/core/runtime/http-transport-provider.js +226 -371
  119. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  120. package/dist/providers/core/runtime/provider-error-classifier.d.ts +25 -0
  121. package/dist/providers/core/runtime/provider-error-classifier.js +139 -0
  122. package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -0
  123. package/dist/providers/core/runtime/provider-error-types.d.ts +23 -0
  124. package/dist/providers/core/runtime/provider-error-types.js +2 -0
  125. package/dist/providers/core/runtime/provider-error-types.js.map +1 -0
  126. package/dist/providers/core/runtime/provider-factory.d.ts +1 -1
  127. package/dist/providers/core/runtime/provider-factory.js +14 -0
  128. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  129. package/dist/providers/core/runtime/provider-runtime-metadata.d.ts +1 -0
  130. package/dist/providers/core/runtime/provider-runtime-metadata.js.map +1 -1
  131. package/dist/providers/core/runtime/responses-provider.d.ts +7 -0
  132. package/dist/providers/core/runtime/responses-provider.js +228 -12
  133. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  134. package/dist/providers/core/strategies/oauth-auth-code-flow.js +10 -9
  135. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  136. package/dist/providers/core/strategies/oauth-device-flow.js +10 -9
  137. package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
  138. package/dist/providers/core/utils/provider-error-reporter.js +63 -15
  139. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  140. package/dist/providers/core/utils/provider-type-utils.d.ts +1 -1
  141. package/dist/providers/core/utils/provider-type-utils.js +6 -1
  142. package/dist/providers/core/utils/provider-type-utils.js.map +1 -1
  143. package/dist/providers/core/utils/snapshot-writer.d.ts +10 -0
  144. package/dist/providers/core/utils/snapshot-writer.js +85 -0
  145. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  146. package/dist/providers/mock/mock-provider-runtime.js +44 -0
  147. package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
  148. package/dist/providers/profile/provider-profile-loader.js +26 -19
  149. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  150. package/dist/providers/profile/provider-profile.d.ts +2 -2
  151. package/dist/server/handlers/chat-handler.js +9 -3
  152. package/dist/server/handlers/chat-handler.js.map +1 -1
  153. package/dist/server/handlers/handler-utils.d.ts +7 -1
  154. package/dist/server/handlers/handler-utils.js +64 -52
  155. package/dist/server/handlers/handler-utils.js.map +1 -1
  156. package/dist/server/handlers/messages-handler.js +9 -3
  157. package/dist/server/handlers/messages-handler.js.map +1 -1
  158. package/dist/server/handlers/responses-handler.js +21 -13
  159. package/dist/server/handlers/responses-handler.js.map +1 -1
  160. package/dist/server/runtime/http-server/colored-logger.d.ts +1 -0
  161. package/dist/server/runtime/http-server/colored-logger.js +33 -0
  162. package/dist/server/runtime/http-server/colored-logger.js.map +1 -0
  163. package/dist/server/runtime/http-server/index.d.ts +3 -0
  164. package/dist/server/runtime/http-server/index.js +76 -19
  165. package/dist/server/runtime/http-server/index.js.map +1 -1
  166. package/dist/server/runtime/http-server/provider-utils.d.ts +3 -1
  167. package/dist/server/runtime/http-server/provider-utils.js +12 -2
  168. package/dist/server/runtime/http-server/provider-utils.js.map +1 -1
  169. package/dist/server/runtime/http-server/request-executor.js +6 -2
  170. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  171. package/dist/server/runtime/http-server/routes.js +31 -11
  172. package/dist/server/runtime/http-server/routes.js.map +1 -1
  173. package/dist/server/runtime/http-server/types.d.ts +2 -1
  174. package/dist/utils/error-center-payload.d.ts +7 -0
  175. package/dist/utils/error-center-payload.js +67 -0
  176. package/dist/utils/error-center-payload.js.map +1 -0
  177. package/dist/utils/error-handler-registry.d.ts +7 -0
  178. package/dist/utils/error-handler-registry.js +44 -12
  179. package/dist/utils/error-handler-registry.js.map +1 -1
  180. package/node_modules/@jsonstudio/llms/dist/conversion/codecs/responses-openai-codec.js +16 -1
  181. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-glm.json +17 -0
  182. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-iflow.json +36 -0
  183. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-lmstudio.json +37 -0
  184. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwen.json +18 -0
  185. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/responses-c4m.json +45 -0
  186. package/node_modules/@jsonstudio/llms/dist/conversion/config/compat-profiles.json +38 -0
  187. package/node_modules/@jsonstudio/llms/dist/conversion/config/sample-config.json +314 -0
  188. package/node_modules/@jsonstudio/llms/dist/conversion/config/version-switch.json +150 -0
  189. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.d.ts +4 -0
  190. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.js +667 -0
  191. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-profile-store.d.ts +2 -0
  192. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-profile-store.js +76 -0
  193. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.d.ts +62 -0
  194. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.js +1 -0
  195. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.d.ts +2 -0
  196. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.js +110 -29
  197. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.d.ts +14 -0
  198. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +23 -0
  199. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +34 -0
  200. package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process.js +4 -1
  201. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +26 -0
  202. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.d.ts +1 -0
  203. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +71 -0
  204. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-conversation-store.d.ts +35 -0
  205. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-conversation-store.js +64 -19
  206. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.d.ts +21 -0
  207. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.js +138 -22
  208. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.d.ts +21 -0
  209. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.js +116 -1
  210. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-mapping.js +52 -2
  211. package/node_modules/@jsonstudio/llms/dist/filters/config/openai-openai.fieldmap.json +18 -0
  212. package/node_modules/@jsonstudio/llms/dist/filters/special/request-tools-normalize.js +20 -1
  213. package/node_modules/@jsonstudio/llms/dist/guidance/index.js +6 -2
  214. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/bootstrap.js +16 -7
  215. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/classifier.js +40 -37
  216. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/default-thinking-keywords.d.ts +1 -0
  217. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/default-thinking-keywords.js +13 -0
  218. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.d.ts +39 -0
  219. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +52 -11
  220. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/features.js +340 -11
  221. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-counter.d.ts +2 -0
  222. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-counter.js +105 -0
  223. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.d.ts +8 -0
  224. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.js +2 -2
  225. package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/builders/response-builder.d.ts +2 -0
  226. package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/builders/response-builder.js +53 -11
  227. package/node_modules/@jsonstudio/llms/dist/test-output/virtual-router/results.json +1 -0
  228. package/node_modules/@jsonstudio/llms/dist/test-output/virtual-router/summary.json +12 -0
  229. package/node_modules/@jsonstudio/llms/dist/tools/tool-registry.js +4 -3
  230. package/node_modules/@jsonstudio/llms/package.json +3 -3
  231. package/package.json +13 -10
  232. package/scripts/analyze-routing-classifier.mjs +166 -0
  233. package/scripts/analyze-routing-samples.mjs +216 -0
  234. package/scripts/analyze-thinking-keywords.mjs +17 -2
  235. package/scripts/build-core.mjs +8 -0
  236. package/scripts/classify-sample-tools.mjs +252 -0
  237. package/scripts/ensure-llmswitch-mode.mjs +95 -0
  238. package/scripts/gen-build-info.mjs +58 -4
  239. package/scripts/install-global.sh +1 -1
  240. package/scripts/install-release.sh +7 -0
  241. package/scripts/mock-provider/run-regressions.mjs +60 -14
  242. package/scripts/pack-mode.mjs +30 -1
  243. package/scripts/publish-rcc.mjs +31 -0
  244. package/scripts/tests/apply-patch-loop.mjs +100 -9
  245. package/scripts/tests/golden-provider-cycle.mjs +12 -1
  246. package/scripts/tests/responses-provider-dry-run.mjs +15 -1
  247. package/scripts/tests/virtual-router-health.mjs +12 -5
  248. package/scripts/tools/capture-provider-goldens.mjs +75 -25
  249. package/scripts/tools/responses-golden-dry-run.mjs +17 -1
  250. package/scripts/tools/responses-provider-replay.mjs +17 -1
  251. package/scripts/tools/sync-ci-goldens.mjs +131 -0
  252. package/scripts/verification/samples/openai-chat-list-local-files.json +19 -796
  253. package/scripts/verify-e2e-toolcall.mjs +52 -0
  254. package/dist/providers/compat/config/index.d.ts +0 -1
  255. package/dist/providers/compat/config/index.js +0 -5
  256. package/dist/providers/compat/config/index.js.map +0 -1
  257. package/dist/providers/compat/iflow/index.d.ts +0 -27
  258. package/dist/providers/compat/iflow/index.js +0 -32
  259. package/dist/providers/compat/iflow/index.js.map +0 -1
  260. package/dist/providers/compat/lmstudio/index.d.ts +0 -4
  261. package/dist/providers/compat/lmstudio/index.js +0 -10
  262. package/dist/providers/compat/lmstudio/index.js.map +0 -1
  263. package/dist/providers/compat/passthrough/index.d.ts +0 -4
  264. package/dist/providers/compat/passthrough/index.js +0 -9
  265. package/dist/providers/compat/passthrough/index.js.map +0 -1
  266. package/dist/providers/compat/responses/index.d.ts +0 -1
  267. package/dist/providers/compat/responses/index.js +0 -8
  268. package/dist/providers/compat/responses/index.js.map +0 -1
  269. package/dist/providers/core/composite/compat/anthropic.d.ts +0 -3
  270. package/dist/providers/core/composite/compat/anthropic.js +0 -7
  271. package/dist/providers/core/composite/compat/anthropic.js.map +0 -1
  272. package/dist/providers/core/composite/compat/gemini.d.ts +0 -3
  273. package/dist/providers/core/composite/compat/gemini.js +0 -7
  274. package/dist/providers/core/composite/compat/gemini.js.map +0 -1
  275. package/dist/providers/core/composite/compat/openai-compat-aggregator.d.ts +0 -9
  276. package/dist/providers/core/composite/compat/openai-compat-aggregator.js +0 -135
  277. package/dist/providers/core/composite/compat/openai-compat-aggregator.js.map +0 -1
  278. package/dist/providers/core/composite/compat/responses.d.ts +0 -3
  279. package/dist/providers/core/composite/compat/responses.js +0 -91
  280. package/dist/providers/core/composite/compat/responses.js.map +0 -1
  281. package/dist/providers/core/composite/provider-composite.d.ts +0 -50
  282. package/dist/providers/core/composite/provider-composite.js +0 -235
  283. package/dist/providers/core/composite/provider-composite.js.map +0 -1
  284. package/scripts/tests/apply-patch-loop.mjs.bak +0 -363
@@ -0,0 +1,42 @@
1
+ import type { HttpClient } from '../utils/http-client.js';
2
+ import type { UnknownObject } from '../../../types/common-types.js';
3
+ import type { ProviderContext } from '../api/provider-types.js';
4
+ import type { ProviderErrorAugmented } from './provider-error-types.js';
5
+ export type PreparedHttpRequest = {
6
+ endpoint: string;
7
+ headers: Record<string, string>;
8
+ targetUrl: string;
9
+ body: UnknownObject;
10
+ entryEndpoint?: string;
11
+ clientRequestId?: string;
12
+ wantsSse: boolean;
13
+ };
14
+ export type HttpRequestExecutorDeps = {
15
+ wantsUpstreamSse(request: UnknownObject, context: ProviderContext): boolean;
16
+ getEffectiveEndpoint(): string;
17
+ resolveRequestEndpoint(request: UnknownObject, defaultEndpoint: string): string;
18
+ buildRequestHeaders(): Promise<Record<string, string>>;
19
+ finalizeRequestHeaders(headers: Record<string, string>, request: UnknownObject): Promise<Record<string, string>>;
20
+ applyStreamModeHeaders(headers: Record<string, string>, wantsSse: boolean): Record<string, string>;
21
+ getEffectiveBaseUrl(): string;
22
+ buildHttpRequestBody(request: UnknownObject): UnknownObject;
23
+ prepareSseRequestBody(body: UnknownObject, context: ProviderContext): void;
24
+ getEntryEndpointFromPayload(request: UnknownObject): string | undefined;
25
+ getClientRequestIdFromContext(context: ProviderContext): string | undefined;
26
+ wrapUpstreamSseResponse(stream: NodeJS.ReadableStream, context: ProviderContext): Promise<UnknownObject>;
27
+ getHttpRetryLimit(): number;
28
+ shouldRetryHttpError(error: unknown, attempt: number, maxAttempts: number): boolean;
29
+ delayBeforeHttpRetry(attempt: number): Promise<void>;
30
+ tryRecoverOAuthAndReplay?(error: unknown, requestInfo: PreparedHttpRequest, processedRequest: UnknownObject, captureSse: boolean, context: ProviderContext): Promise<unknown | undefined>;
31
+ normalizeHttpError(error: unknown, processedRequest: UnknownObject, requestInfo: PreparedHttpRequest, context: ProviderContext): Promise<ProviderErrorAugmented>;
32
+ };
33
+ export declare class HttpRequestExecutor {
34
+ private readonly httpClient;
35
+ private readonly deps;
36
+ constructor(httpClient: HttpClient, deps: HttpRequestExecutorDeps);
37
+ execute(processedRequest: UnknownObject, context: ProviderContext): Promise<unknown>;
38
+ private prepareHttpRequest;
39
+ private snapshotProviderRequest;
40
+ private executeHttpRequestWithRetries;
41
+ private executeHttpRequestOnce;
42
+ }
@@ -0,0 +1,133 @@
1
+ import { attachProviderSseSnapshotStream, shouldCaptureProviderStreamSnapshots, writeProviderSnapshot } from '../utils/snapshot-writer.js';
2
+ export class HttpRequestExecutor {
3
+ httpClient;
4
+ deps;
5
+ constructor(httpClient, deps) {
6
+ this.httpClient = httpClient;
7
+ this.deps = deps;
8
+ }
9
+ async execute(processedRequest, context) {
10
+ const prepared = await this.prepareHttpRequest(processedRequest, context);
11
+ await this.snapshotProviderRequest(prepared, context);
12
+ try {
13
+ return await this.executeHttpRequestWithRetries(prepared, processedRequest, context);
14
+ }
15
+ catch (error) {
16
+ const normalized = await this.deps.normalizeHttpError(error, processedRequest, prepared, context);
17
+ throw normalized;
18
+ }
19
+ }
20
+ async prepareHttpRequest(processedRequest, context) {
21
+ const wantsSse = this.deps.wantsUpstreamSse(processedRequest, context);
22
+ const defaultEndpoint = this.deps.getEffectiveEndpoint();
23
+ const endpoint = this.deps.resolveRequestEndpoint(processedRequest, defaultEndpoint);
24
+ const headers = await this.deps.buildRequestHeaders();
25
+ let finalHeaders = await this.deps.finalizeRequestHeaders(headers, processedRequest);
26
+ finalHeaders = this.deps.applyStreamModeHeaders(finalHeaders, wantsSse);
27
+ const targetUrl = `${this.deps.getEffectiveBaseUrl().replace(/\/$/, '')}/${endpoint.startsWith('/') ? endpoint.slice(1) : endpoint}`;
28
+ const finalBody = this.deps.buildHttpRequestBody(processedRequest);
29
+ if (wantsSse) {
30
+ this.deps.prepareSseRequestBody(finalBody, context);
31
+ }
32
+ const entryEndpoint = this.deps.getEntryEndpointFromPayload(processedRequest);
33
+ const clientRequestId = this.deps.getClientRequestIdFromContext(context);
34
+ return {
35
+ endpoint,
36
+ headers: finalHeaders,
37
+ targetUrl,
38
+ body: finalBody,
39
+ entryEndpoint,
40
+ clientRequestId,
41
+ wantsSse
42
+ };
43
+ }
44
+ async snapshotProviderRequest(requestInfo, context) {
45
+ try {
46
+ await writeProviderSnapshot({
47
+ phase: 'provider-request',
48
+ requestId: context.requestId,
49
+ data: requestInfo.body,
50
+ headers: requestInfo.headers,
51
+ url: requestInfo.targetUrl,
52
+ entryEndpoint: requestInfo.entryEndpoint,
53
+ clientRequestId: requestInfo.clientRequestId
54
+ });
55
+ }
56
+ catch {
57
+ /* ignore snapshot failures */
58
+ }
59
+ }
60
+ async executeHttpRequestWithRetries(requestInfo, processedRequest, context) {
61
+ const captureSse = shouldCaptureProviderStreamSnapshots();
62
+ const maxAttempts = this.deps.getHttpRetryLimit();
63
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
64
+ try {
65
+ return await this.executeHttpRequestOnce(requestInfo, context, captureSse);
66
+ }
67
+ catch (error) {
68
+ if (this.deps.tryRecoverOAuthAndReplay) {
69
+ const oauthReplay = await this.deps.tryRecoverOAuthAndReplay(error, requestInfo, processedRequest, captureSse, context);
70
+ if (oauthReplay) {
71
+ return oauthReplay;
72
+ }
73
+ }
74
+ const shouldRetry = this.deps.shouldRetryHttpError(error, attempt, maxAttempts);
75
+ if (shouldRetry) {
76
+ await this.deps.delayBeforeHttpRetry(attempt);
77
+ continue;
78
+ }
79
+ throw error;
80
+ }
81
+ }
82
+ throw new Error('provider-runtime-error: http retries exhausted');
83
+ }
84
+ async executeHttpRequestOnce(requestInfo, context, captureSse) {
85
+ if (requestInfo.wantsSse) {
86
+ const upstreamStream = await this.httpClient.postStream(requestInfo.endpoint, requestInfo.body, requestInfo.headers);
87
+ const streamForHost = captureSse
88
+ ? attachProviderSseSnapshotStream(upstreamStream, {
89
+ requestId: context.requestId,
90
+ headers: requestInfo.headers,
91
+ url: requestInfo.targetUrl,
92
+ entryEndpoint: requestInfo.entryEndpoint,
93
+ clientRequestId: requestInfo.clientRequestId
94
+ })
95
+ : upstreamStream;
96
+ const wrapped = await this.deps.wrapUpstreamSseResponse(streamForHost, context);
97
+ if (!captureSse) {
98
+ try {
99
+ await writeProviderSnapshot({
100
+ phase: 'provider-response',
101
+ requestId: context.requestId,
102
+ data: { mode: 'sse' },
103
+ headers: requestInfo.headers,
104
+ url: requestInfo.targetUrl,
105
+ entryEndpoint: requestInfo.entryEndpoint,
106
+ clientRequestId: requestInfo.clientRequestId
107
+ });
108
+ }
109
+ catch {
110
+ /* ignore snapshot failures */
111
+ }
112
+ }
113
+ return wrapped;
114
+ }
115
+ const response = await this.httpClient.post(requestInfo.endpoint, requestInfo.body, requestInfo.headers);
116
+ try {
117
+ await writeProviderSnapshot({
118
+ phase: 'provider-response',
119
+ requestId: context.requestId,
120
+ data: response,
121
+ headers: requestInfo.headers,
122
+ url: requestInfo.targetUrl,
123
+ entryEndpoint: requestInfo.entryEndpoint,
124
+ clientRequestId: requestInfo.clientRequestId
125
+ });
126
+ }
127
+ catch {
128
+ /* ignore snapshot failures */
129
+ }
130
+ return response;
131
+ }
132
+ }
133
+ //# sourceMappingURL=http-request-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request-executor.js","sourceRoot":"","sources":["../../../../src/providers/core/runtime/http-request-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,EACpC,qBAAqB,EACtB,MAAM,6BAA6B,CAAC;AA+CrC,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,UAAsB,EACtB,IAA6B;QAD7B,eAAU,GAAV,UAAU,CAAY;QACtB,SAAI,GAAJ,IAAI,CAAyB;IAC7C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,gBAA+B,EAAE,OAAwB;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClG,MAAM,UAAU,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,gBAA+B,EAC/B,OAAwB;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACrF,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrI,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,YAAY;YACrB,SAAS;YACT,IAAI,EAAE,SAAS;YACf,aAAa;YACb,eAAe;YACf,QAAQ;SACT,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,WAAgC,EAAE,OAAwB;QAC9F,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC;gBAC1B,KAAK,EAAE,kBAAkB;gBACzB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,GAAG,EAAE,WAAW,CAAC,SAAS;gBAC1B,aAAa,EAAE,WAAW,CAAC,aAAa;gBACxC,eAAe,EAAE,WAAW,CAAC,eAAe;aAC7C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,6BAA6B,CACzC,WAAgC,EAChC,gBAA+B,EAC/B,OAAwB;QAExB,MAAM,UAAU,GAAG,oCAAoC,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBACvC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAC1D,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,OAAO,CACR,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,WAAW,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBAChF,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBAC9C,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,WAAgC,EAChC,OAAwB,EACxB,UAAmB;QAEnB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YACrH,MAAM,aAAa,GAAG,UAAU;gBAC9B,CAAC,CAAC,+BAA+B,CAAC,cAAc,EAAE;oBAChD,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,GAAG,EAAE,WAAW,CAAC,SAAS;oBAC1B,aAAa,EAAE,WAAW,CAAC,aAAa;oBACxC,eAAe,EAAE,WAAW,CAAC,eAAe;iBAC7C,CAAC;gBACF,CAAC,CAAC,cAAc,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAChF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,qBAAqB,CAAC;wBAC1B,KAAK,EAAE,mBAAmB;wBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;wBACrB,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,GAAG,EAAE,WAAW,CAAC,SAAS;wBAC1B,aAAa,EAAE,WAAW,CAAC,aAAa;wBACxC,eAAe,EAAE,WAAW,CAAC,eAAe;qBAC7C,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACzG,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC;gBAC1B,KAAK,EAAE,mBAAmB;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,GAAG,EAAE,WAAW,CAAC,SAAS;gBAC1B,aAAa,EAAE,WAAW,CAAC,aAAa;gBACxC,eAAe,EAAE,WAAW,CAAC,eAAe;aAC7C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -10,7 +10,6 @@
10
10
  */
11
11
  import { BaseProvider } from './base-provider.js';
12
12
  import { HttpClient } from '../utils/http-client.js';
13
- import { HookSystemIntegration } from '../hooks/hooks-integration.js';
14
13
  import type { IAuthProvider } from '../../auth/auth-interface.js';
15
14
  import type { OpenAIStandardConfig } from '../api/provider-config.js';
16
15
  import type { ProviderContext, ServiceProfile } from '../api/provider-types.js';
@@ -23,8 +22,8 @@ export declare class HttpTransportProvider extends BaseProvider {
23
22
  protected authProvider: IAuthProvider | null;
24
23
  protected httpClient: HttpClient;
25
24
  protected serviceProfile: ServiceProfile;
26
- protected hookSystemIntegration: HookSystemIntegration;
27
25
  protected protocolClient: ProtocolClient;
26
+ private requestExecutor;
28
27
  private injectedConfig;
29
28
  constructor(config: OpenAIStandardConfig, dependencies: ModuleDependencies, moduleType: string, protocolClient?: HttpProtocolClient<ProtocolRequestPayload>);
30
29
  /**
@@ -33,17 +32,10 @@ export declare class HttpTransportProvider extends BaseProvider {
33
32
  protected onInitialize(): Promise<void>;
34
33
  setConfig(cfg: unknown): void;
35
34
  getConfig(): unknown;
36
- /**
37
- * 初始化Hook系统集成
38
- */
39
- private initializeHookSystem;
40
- /**
41
- * 配置Hook调试(保持向后兼容)
42
- */
43
- private configureHookDebugging;
44
35
  protected getServiceProfile(): ServiceProfile;
45
36
  protected createAuthProvider(): IAuthProvider;
46
37
  protected createHttpClient(): void;
38
+ private createRequestExecutorDeps;
47
39
  protected preprocessRequest(request: UnknownObject): Promise<UnknownObject>;
48
40
  protected postprocessResponse(response: unknown, context: ProviderContext): Promise<UnknownObject>;
49
41
  protected sendRequestInternal(request: UnknownObject): Promise<unknown>;
@@ -52,6 +44,11 @@ export declare class HttpTransportProvider extends BaseProvider {
52
44
  protected prepareSseRequestBody(_body: UnknownObject, _context: ProviderContext): void;
53
45
  protected wrapUpstreamSseResponse(stream: NodeJS.ReadableStream, _context: ProviderContext): Promise<UnknownObject>;
54
46
  protected performHealthCheck(url: string): Promise<boolean>;
47
+ private getHttpRetryLimit;
48
+ private delayBeforeHttpRetry;
49
+ private shouldRetryHttpError;
50
+ private tryRecoverOAuthAndReplay;
51
+ private normalizeHttpError;
55
52
  /**
56
53
  * 为特定请求确定最终 endpoint(默认使用配置值,可由子类覆写)
57
54
  */
@@ -71,7 +68,6 @@ export declare class HttpTransportProvider extends BaseProvider {
71
68
  protected getEffectiveEndpoint(): string;
72
69
  private pickRuntimeBaseUrl;
73
70
  private looksLikeAbsoluteUrl;
74
- private getHookManager;
75
71
  private getConfigExtensions;
76
72
  private getEntryEndpointFromPayload;
77
73
  private asResponseRecord;