@jsonstudio/rcc 0.89.168 → 0.89.333

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 (323) hide show
  1. package/README.md +18 -15
  2. package/dist/build-info.js +2 -2
  3. package/dist/cli.js +32 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +28 -5
  6. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  7. package/dist/error-handling/quiet-error-handling-center.d.ts +9 -0
  8. package/dist/error-handling/quiet-error-handling-center.js +141 -0
  9. package/dist/error-handling/quiet-error-handling-center.js.map +1 -0
  10. package/dist/error-handling/route-error-hub.js +8 -2
  11. package/dist/error-handling/route-error-hub.js.map +1 -1
  12. package/dist/modules/pipeline/utils/colored-logger.d.ts +2 -0
  13. package/dist/modules/pipeline/utils/colored-logger.js +20 -3
  14. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  15. package/dist/providers/auth/antigravity-userinfo-helper.d.ts +10 -0
  16. package/dist/providers/auth/antigravity-userinfo-helper.js +140 -0
  17. package/dist/providers/auth/antigravity-userinfo-helper.js.map +1 -0
  18. package/dist/providers/auth/oauth-lifecycle.js +140 -8
  19. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  20. package/dist/providers/auth/token-scanner/index.d.ts +32 -0
  21. package/dist/providers/auth/token-scanner/index.js +86 -0
  22. package/dist/providers/auth/token-scanner/index.js.map +1 -0
  23. package/dist/providers/auth/tokenfile-auth.d.ts +17 -0
  24. package/dist/providers/auth/tokenfile-auth.js +27 -5
  25. package/dist/providers/auth/tokenfile-auth.js.map +1 -1
  26. package/dist/providers/core/api/provider-types.d.ts +10 -0
  27. package/dist/providers/core/config/oauth-flows.d.ts +2 -0
  28. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  29. package/dist/providers/core/config/provider-oauth-configs.js +85 -0
  30. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  31. package/dist/providers/core/runtime/base-provider.d.ts +2 -0
  32. package/dist/providers/core/runtime/base-provider.js +135 -15
  33. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  34. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +8 -3
  35. package/dist/providers/core/runtime/gemini-cli-http-provider.js +262 -64
  36. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  37. package/dist/providers/core/runtime/http-transport-provider.d.ts +25 -0
  38. package/dist/providers/core/runtime/http-transport-provider.js +305 -67
  39. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  40. package/dist/providers/core/runtime/provider-error-classifier.d.ts +2 -2
  41. package/dist/providers/core/runtime/provider-error-classifier.js +14 -4
  42. package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
  43. package/dist/providers/core/runtime/provider-factory.d.ts +1 -0
  44. package/dist/providers/core/runtime/provider-factory.js +37 -8
  45. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  46. package/dist/providers/core/runtime/responses-provider.d.ts +3 -3
  47. package/dist/providers/core/runtime/responses-provider.js +48 -114
  48. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  49. package/dist/providers/core/strategies/oauth-auth-code-flow.js +11 -3
  50. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  51. package/dist/providers/core/utils/http-client.d.ts +5 -0
  52. package/dist/providers/core/utils/http-client.js +29 -3
  53. package/dist/providers/core/utils/http-client.js.map +1 -1
  54. package/dist/providers/core/utils/provider-error-reporter.js +8 -2
  55. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  56. package/dist/providers/core/utils/snapshot-writer.js +5 -1
  57. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  58. package/dist/providers/profile/provider-profile-loader.js +8 -4
  59. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  60. package/dist/runtime/runtime-flags.d.ts +4 -0
  61. package/dist/runtime/runtime-flags.js +32 -0
  62. package/dist/runtime/runtime-flags.js.map +1 -0
  63. package/dist/server/handlers/handler-utils.js +29 -2
  64. package/dist/server/handlers/handler-utils.js.map +1 -1
  65. package/dist/server/handlers/messages-handler.js +27 -26
  66. package/dist/server/handlers/messages-handler.js.map +1 -1
  67. package/dist/server/handlers/responses-handler.js +35 -1
  68. package/dist/server/handlers/responses-handler.js.map +1 -1
  69. package/dist/server/runtime/http-server/index.d.ts +1 -0
  70. package/dist/server/runtime/http-server/index.js +39 -4
  71. package/dist/server/runtime/http-server/index.js.map +1 -1
  72. package/dist/server/runtime/http-server/request-executor.d.ts +4 -0
  73. package/dist/server/runtime/http-server/request-executor.js +99 -4
  74. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  75. package/dist/server/utils/sse-request-parser.d.ts +1 -0
  76. package/dist/server/utils/sse-request-parser.js +17 -6
  77. package/dist/server/utils/sse-request-parser.js.map +1 -1
  78. package/dist/server/utils/warmup-detector.d.ts +7 -0
  79. package/dist/server/utils/warmup-detector.js +125 -0
  80. package/dist/server/utils/warmup-detector.js.map +1 -0
  81. package/dist/server/utils/warmup-storm-tracker.d.ts +9 -0
  82. package/dist/server/utils/warmup-storm-tracker.js +61 -0
  83. package/dist/server/utils/warmup-storm-tracker.js.map +1 -0
  84. package/dist/utils/debug-utils.js +14 -0
  85. package/dist/utils/debug-utils.js.map +1 -1
  86. package/dist/utils/error-handler-registry.js +6 -5
  87. package/dist/utils/error-handler-registry.js.map +1 -1
  88. package/dist/utils/error-handling-utils.js +4 -3
  89. package/dist/utils/error-handling-utils.js.map +1 -1
  90. package/dist/utils/log-helpers.d.ts +6 -0
  91. package/dist/utils/log-helpers.js +90 -0
  92. package/dist/utils/log-helpers.js.map +1 -0
  93. package/dist/utils/logger.d.ts +8 -0
  94. package/dist/utils/logger.js +55 -2
  95. package/dist/utils/logger.js.map +1 -1
  96. package/dist/utils/snapshot-writer.js +2 -6
  97. package/dist/utils/snapshot-writer.js.map +1 -1
  98. package/node_modules/@jsonstudio/llms/dist/conversion/codecs/gemini-openai-codec.js +15 -1
  99. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/auto-thinking.d.ts +6 -0
  100. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/auto-thinking.js +25 -0
  101. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/field-mapping.d.ts +14 -0
  102. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/field-mapping.js +155 -0
  103. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-tool-extraction.d.ts +2 -0
  104. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-tool-extraction.js +264 -0
  105. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwen-transform.d.ts +3 -0
  106. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwen-transform.js +209 -0
  107. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/request-rules.d.ts +24 -0
  108. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/request-rules.js +63 -0
  109. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-blacklist.d.ts +14 -0
  110. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-blacklist.js +85 -0
  111. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-normalize.d.ts +5 -0
  112. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-normalize.js +121 -0
  113. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-validate.d.ts +5 -0
  114. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/response-validate.js +76 -0
  115. package/{dist/providers/compat/utils/snapshot-writer.d.ts → node_modules/@jsonstudio/llms/dist/conversion/compat/actions/snapshot.d.ts} +2 -2
  116. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/snapshot.js +21 -0
  117. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/tool-schema.d.ts +6 -0
  118. package/{dist/providers/compat/glm/utils/tool-schema-helpers.js → node_modules/@jsonstudio/llms/dist/conversion/compat/actions/tool-schema.js} +6 -1
  119. package/{dist/providers/compat/filters → node_modules/@jsonstudio/llms/dist/conversion/compat/actions}/universal-shape-filter.d.ts +17 -22
  120. package/{dist/providers/compat/filters → node_modules/@jsonstudio/llms/dist/conversion/compat/actions}/universal-shape-filter.js +35 -99
  121. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-glm.json +187 -13
  122. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-iflow.json +177 -9
  123. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-lmstudio.json +10 -2
  124. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwen.json +14 -10
  125. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.d.ts +7 -2
  126. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.js +5 -665
  127. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +9 -0
  128. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +845 -0
  129. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.d.ts +47 -0
  130. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.d.ts +2 -0
  131. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.js +35 -1
  132. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +2 -2
  133. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/target-utils.js +3 -0
  134. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/response-runtime.js +19 -2
  135. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-host-policy.d.ts +6 -0
  136. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-host-policy.js +14 -0
  137. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +51 -2
  138. package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils.js +6 -0
  139. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-reasoning-registry.d.ts +4 -0
  140. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-reasoning-registry.js +62 -1
  141. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-response-utils.js +23 -1
  142. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-canonicalizer.d.ts +2 -0
  143. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.js +11 -0
  144. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/bootstrap.js +251 -12
  145. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/classifier.js +11 -4
  146. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/context-advisor.d.ts +21 -0
  147. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/context-advisor.js +76 -0
  148. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.d.ts +11 -0
  149. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +187 -28
  150. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/features.js +22 -457
  151. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/health-manager.js +2 -7
  152. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/message-utils.d.ts +7 -0
  153. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/message-utils.js +66 -0
  154. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/provider-registry.js +6 -2
  155. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-estimator.d.ts +2 -0
  156. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-estimator.js +16 -0
  157. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-file-scanner.d.ts +15 -0
  158. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-file-scanner.js +56 -0
  159. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/tool-signals.d.ts +13 -0
  160. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/tool-signals.js +403 -0
  161. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.d.ts +21 -1
  162. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.js +1 -0
  163. package/node_modules/@jsonstudio/llms/package.json +2 -2
  164. package/package.json +11 -10
  165. package/scripts/README.md +26 -12
  166. package/scripts/auth-antigravity-token.mjs +64 -0
  167. package/scripts/auth-gemini-cli-token.mjs +96 -0
  168. package/scripts/auth-iflow-manual.mjs +81 -0
  169. package/scripts/auth-iflow-token-direct.mjs +87 -0
  170. package/scripts/auth-iflow-token.mjs +77 -0
  171. package/scripts/copy-compat-assets.mjs +3 -15
  172. package/scripts/install-verify.mjs +1 -0
  173. package/scripts/replay-codex-sample.mjs +13 -8
  174. package/scripts/tests/chat-pipeline-blackbox.mjs +1 -1
  175. package/scripts/tools/capture-provider-goldens.mjs +8 -7
  176. package/scripts/verify-client-headers.mjs +224 -0
  177. package/dist/providers/compat/base-compatibility.d.ts +0 -27
  178. package/dist/providers/compat/base-compatibility.js +0 -143
  179. package/dist/providers/compat/base-compatibility.js.map +0 -1
  180. package/dist/providers/compat/compat-directory-loader.d.ts +0 -4
  181. package/dist/providers/compat/compat-directory-loader.js +0 -85
  182. package/dist/providers/compat/compat-directory-loader.js.map +0 -1
  183. package/dist/providers/compat/compatibility-adapter.d.ts +0 -18
  184. package/dist/providers/compat/compatibility-adapter.js +0 -104
  185. package/dist/providers/compat/compatibility-adapter.js.map +0 -1
  186. package/dist/providers/compat/compatibility-factory.d.ts +0 -57
  187. package/dist/providers/compat/compatibility-factory.js +0 -155
  188. package/dist/providers/compat/compatibility-factory.js.map +0 -1
  189. package/dist/providers/compat/compatibility-interface.d.ts +0 -35
  190. package/dist/providers/compat/compatibility-interface.js +0 -2
  191. package/dist/providers/compat/compatibility-interface.js.map +0 -1
  192. package/dist/providers/compat/compatibility-manager.d.ts +0 -85
  193. package/dist/providers/compat/compatibility-manager.js +0 -368
  194. package/dist/providers/compat/compatibility-manager.js.map +0 -1
  195. package/dist/providers/compat/config/config-compatibility.d.ts +0 -28
  196. package/dist/providers/compat/config/config-compatibility.js +0 -95
  197. package/dist/providers/compat/config/config-compatibility.js.map +0 -1
  198. package/dist/providers/compat/field-mapping.d.ts +0 -102
  199. package/dist/providers/compat/field-mapping.js +0 -447
  200. package/dist/providers/compat/field-mapping.js.map +0 -1
  201. package/dist/providers/compat/filters/blacklist-sanitizer.d.ts +0 -45
  202. package/dist/providers/compat/filters/blacklist-sanitizer.js +0 -133
  203. package/dist/providers/compat/filters/blacklist-sanitizer.js.map +0 -1
  204. package/dist/providers/compat/filters/response-blacklist-sanitizer.d.ts +0 -28
  205. package/dist/providers/compat/filters/response-blacklist-sanitizer.js +0 -138
  206. package/dist/providers/compat/filters/response-blacklist-sanitizer.js.map +0 -1
  207. package/dist/providers/compat/filters/universal-shape-filter.js.map +0 -1
  208. package/dist/providers/compat/glm/config/blacklist-rules.json +0 -22
  209. package/dist/providers/compat/glm/config/field-mappings.json +0 -92
  210. package/dist/providers/compat/glm/config/response-blacklist.json +0 -7
  211. package/dist/providers/compat/glm/config/shape-filters.json +0 -37
  212. package/dist/providers/compat/glm/field-mapping/field-mapping-processor.d.ts +0 -28
  213. package/dist/providers/compat/glm/field-mapping/field-mapping-processor.js +0 -306
  214. package/dist/providers/compat/glm/field-mapping/field-mapping-processor.js.map +0 -1
  215. package/dist/providers/compat/glm/functions/glm-processor.d.ts +0 -50
  216. package/dist/providers/compat/glm/functions/glm-processor.js +0 -134
  217. package/dist/providers/compat/glm/functions/glm-processor.js.map +0 -1
  218. package/dist/providers/compat/glm/glm-compatibility.d.ts +0 -34
  219. package/dist/providers/compat/glm/glm-compatibility.js +0 -117
  220. package/dist/providers/compat/glm/glm-compatibility.js.map +0 -1
  221. package/dist/providers/compat/glm/hooks/base-hook.d.ts +0 -21
  222. package/dist/providers/compat/glm/hooks/base-hook.js +0 -53
  223. package/dist/providers/compat/glm/hooks/base-hook.js.map +0 -1
  224. package/dist/providers/compat/glm/hooks/glm-request-validation-hook.d.ts +0 -24
  225. package/dist/providers/compat/glm/hooks/glm-request-validation-hook.js +0 -268
  226. package/dist/providers/compat/glm/hooks/glm-request-validation-hook.js.map +0 -1
  227. package/dist/providers/compat/glm/hooks/glm-response-normalization-hook.d.ts +0 -21
  228. package/dist/providers/compat/glm/hooks/glm-response-normalization-hook.js +0 -171
  229. package/dist/providers/compat/glm/hooks/glm-response-normalization-hook.js.map +0 -1
  230. package/dist/providers/compat/glm/hooks/glm-response-validation-hook.d.ts +0 -25
  231. package/dist/providers/compat/glm/hooks/glm-response-validation-hook.js +0 -236
  232. package/dist/providers/compat/glm/hooks/glm-response-validation-hook.js.map +0 -1
  233. package/dist/providers/compat/glm/hooks/glm-tool-cleaning-hook.d.ts +0 -26
  234. package/dist/providers/compat/glm/hooks/glm-tool-cleaning-hook.js +0 -186
  235. package/dist/providers/compat/glm/hooks/glm-tool-cleaning-hook.js.map +0 -1
  236. package/dist/providers/compat/glm/index.d.ts +0 -24
  237. package/dist/providers/compat/glm/index.js +0 -29
  238. package/dist/providers/compat/glm/index.js.map +0 -1
  239. package/dist/providers/compat/glm/utils/tool-schema-helpers.d.ts +0 -3
  240. package/dist/providers/compat/glm/utils/tool-schema-helpers.js.map +0 -1
  241. package/dist/providers/compat/iflow/config/field-mappings.json +0 -92
  242. package/dist/providers/compat/iflow/config/shape-filters.json +0 -37
  243. package/dist/providers/compat/iflow/field-mapping/iflow-field-mapping-processor.d.ts +0 -34
  244. package/dist/providers/compat/iflow/field-mapping/iflow-field-mapping-processor.js +0 -386
  245. package/dist/providers/compat/iflow/field-mapping/iflow-field-mapping-processor.js.map +0 -1
  246. package/dist/providers/compat/iflow/functions/iflow-processor.d.ts +0 -53
  247. package/dist/providers/compat/iflow/functions/iflow-processor.js +0 -215
  248. package/dist/providers/compat/iflow/functions/iflow-processor.js.map +0 -1
  249. package/dist/providers/compat/iflow/hooks/base-hook.d.ts +0 -23
  250. package/dist/providers/compat/iflow/hooks/base-hook.js +0 -59
  251. package/dist/providers/compat/iflow/hooks/base-hook.js.map +0 -1
  252. package/dist/providers/compat/iflow/hooks/iflow-request-validation-hook.d.ts +0 -23
  253. package/dist/providers/compat/iflow/hooks/iflow-request-validation-hook.js +0 -279
  254. package/dist/providers/compat/iflow/hooks/iflow-request-validation-hook.js.map +0 -1
  255. package/dist/providers/compat/iflow/hooks/iflow-response-normalization-hook.d.ts +0 -20
  256. package/dist/providers/compat/iflow/hooks/iflow-response-normalization-hook.js +0 -180
  257. package/dist/providers/compat/iflow/hooks/iflow-response-normalization-hook.js.map +0 -1
  258. package/dist/providers/compat/iflow/hooks/iflow-response-validation-hook.d.ts +0 -23
  259. package/dist/providers/compat/iflow/hooks/iflow-response-validation-hook.js +0 -232
  260. package/dist/providers/compat/iflow/hooks/iflow-response-validation-hook.js.map +0 -1
  261. package/dist/providers/compat/iflow/hooks/iflow-tool-cleaning-hook.d.ts +0 -25
  262. package/dist/providers/compat/iflow/hooks/iflow-tool-cleaning-hook.js +0 -216
  263. package/dist/providers/compat/iflow/hooks/iflow-tool-cleaning-hook.js.map +0 -1
  264. package/dist/providers/compat/iflow/iflow-compatibility.d.ts +0 -24
  265. package/dist/providers/compat/iflow/iflow-compatibility.js +0 -94
  266. package/dist/providers/compat/iflow/iflow-compatibility.js.map +0 -1
  267. package/dist/providers/compat/index.d.ts +0 -59
  268. package/dist/providers/compat/index.js +0 -83
  269. package/dist/providers/compat/index.js.map +0 -1
  270. package/dist/providers/compat/lmstudio-compatibility.d.ts +0 -44
  271. package/dist/providers/compat/lmstudio-compatibility.js +0 -193
  272. package/dist/providers/compat/lmstudio-compatibility.js.map +0 -1
  273. package/dist/providers/compat/passthrough-compatibility.d.ts +0 -29
  274. package/dist/providers/compat/passthrough-compatibility.js +0 -83
  275. package/dist/providers/compat/passthrough-compatibility.js.map +0 -1
  276. package/dist/providers/compat/profiles/chat/glm/index.d.ts +0 -6
  277. package/dist/providers/compat/profiles/chat/glm/index.js +0 -6
  278. package/dist/providers/compat/profiles/chat/glm/index.js.map +0 -1
  279. package/dist/providers/compat/profiles/chat/iflow/index.d.ts +0 -6
  280. package/dist/providers/compat/profiles/chat/iflow/index.js +0 -6
  281. package/dist/providers/compat/profiles/chat/iflow/index.js.map +0 -1
  282. package/dist/providers/compat/profiles/chat/lmstudio/index.d.ts +0 -6
  283. package/dist/providers/compat/profiles/chat/lmstudio/index.js +0 -6
  284. package/dist/providers/compat/profiles/chat/lmstudio/index.js.map +0 -1
  285. package/dist/providers/compat/profiles/chat/qwen/index.d.ts +0 -6
  286. package/dist/providers/compat/profiles/chat/qwen/index.js +0 -6
  287. package/dist/providers/compat/profiles/chat/qwen/index.js.map +0 -1
  288. package/dist/providers/compat/profiles/compat/passthrough/index.d.ts +0 -6
  289. package/dist/providers/compat/profiles/compat/passthrough/index.js +0 -6
  290. package/dist/providers/compat/profiles/compat/passthrough/index.js.map +0 -1
  291. package/dist/providers/compat/profiles/responses/c4m/index.d.ts +0 -6
  292. package/dist/providers/compat/profiles/responses/c4m/index.js +0 -6
  293. package/dist/providers/compat/profiles/responses/c4m/index.js.map +0 -1
  294. package/dist/providers/compat/profiles/responses/default/index.d.ts +0 -6
  295. package/dist/providers/compat/profiles/responses/default/index.js +0 -6
  296. package/dist/providers/compat/profiles/responses/default/index.js.map +0 -1
  297. package/dist/providers/compat/profiles/responses/fai/index.d.ts +0 -6
  298. package/dist/providers/compat/profiles/responses/fai/index.js +0 -6
  299. package/dist/providers/compat/profiles/responses/fai/index.js.map +0 -1
  300. package/dist/providers/compat/profiles/responses/fc/index.d.ts +0 -6
  301. package/dist/providers/compat/profiles/responses/fc/index.js +0 -6
  302. package/dist/providers/compat/profiles/responses/fc/index.js.map +0 -1
  303. package/dist/providers/compat/qwen/index.d.ts +0 -4
  304. package/dist/providers/compat/qwen/index.js +0 -6
  305. package/dist/providers/compat/qwen/index.js.map +0 -1
  306. package/dist/providers/compat/qwen-compatibility.d.ts +0 -52
  307. package/dist/providers/compat/qwen-compatibility.js +0 -330
  308. package/dist/providers/compat/qwen-compatibility.js.map +0 -1
  309. package/dist/providers/compat/register-compat-module.d.ts +0 -8
  310. package/dist/providers/compat/register-compat-module.js +0 -53
  311. package/dist/providers/compat/register-compat-module.js.map +0 -1
  312. package/dist/providers/compat/responses/c4m-responses-compatibility.d.ts +0 -27
  313. package/dist/providers/compat/responses/c4m-responses-compatibility.js +0 -197
  314. package/dist/providers/compat/responses/c4m-responses-compatibility.js.map +0 -1
  315. package/dist/providers/compat/standard-compatibility-utils.d.ts +0 -1
  316. package/dist/providers/compat/standard-compatibility-utils.js +0 -77
  317. package/dist/providers/compat/standard-compatibility-utils.js.map +0 -1
  318. package/dist/providers/compat/standard-compatibility.d.ts +0 -31
  319. package/dist/providers/compat/standard-compatibility.js +0 -118
  320. package/dist/providers/compat/standard-compatibility.js.map +0 -1
  321. package/dist/providers/compat/utils/snapshot-writer.js +0 -62
  322. package/dist/providers/compat/utils/snapshot-writer.js.map +0 -1
  323. package/scripts/check-glm-compat.mjs +0 -47
@@ -1,6 +1,14 @@
1
- import type { UnknownObject } from '../../../modules/pipeline/types/common-types.js';
2
- import type { CompatibilityContext } from '../compatibility-interface.js';
3
- type FilterConfig = {
1
+ import type { AdapterContext } from '../../hub/types/chat-envelope.js';
2
+ import type { JsonObject } from '../../hub/types/json.js';
3
+ type RequestMessagesRule = {
4
+ when?: {
5
+ role?: 'system' | 'user' | 'assistant' | 'tool';
6
+ hasToolCalls?: boolean;
7
+ };
8
+ action: 'drop' | 'keep' | 'set';
9
+ set?: Record<string, unknown>;
10
+ };
11
+ export interface FilterConfig {
4
12
  request: {
5
13
  allowTopLevel: string[];
6
14
  messages: {
@@ -16,14 +24,7 @@ type FilterConfig = {
16
24
  assistantToolCalls?: {
17
25
  functionArgumentsType?: 'object' | 'string';
18
26
  };
19
- messagesRules?: Array<{
20
- when?: {
21
- role?: 'system' | 'user' | 'assistant' | 'tool';
22
- hasToolCalls?: boolean;
23
- };
24
- action: 'drop' | 'keep' | 'set';
25
- set?: Record<string, unknown>;
26
- }>;
27
+ messagesRules?: RequestMessagesRule[];
27
28
  };
28
29
  response: {
29
30
  allowTopLevel: string[];
@@ -46,22 +47,16 @@ type FilterConfig = {
46
47
  allow: string[];
47
48
  };
48
49
  };
49
- };
50
+ }
50
51
  export declare class UniversalShapeFilter {
51
- private cfg;
52
- private readonly configPath?;
53
- private readonly inlineConfig?;
54
- constructor(options?: {
55
- configPath?: string;
56
- config?: FilterConfig;
57
- });
58
- initialize(): Promise<void>;
52
+ private readonly cfg;
53
+ constructor(config: FilterConfig);
54
+ applyRequestFilter(payload: JsonObject): JsonObject;
55
+ applyResponseFilter(payload: JsonObject, ctx?: AdapterContext): JsonObject;
59
56
  private shallowPick;
60
57
  private toObjectArgs;
61
58
  private toStringArgs;
62
59
  private normalizeToolContent;
63
- applyRequestFilter(payload: UnknownObject): Promise<UnknownObject>;
64
- applyResponseFilter(payload: UnknownObject, _ctx?: CompatibilityContext): Promise<UnknownObject>;
65
60
  private normalizeRequestMessages;
66
61
  private normalizeSingleMessage;
67
62
  private normalizeAssistantToolCalls;
@@ -1,5 +1,3 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
1
  const DEFAULT_TOOL_OUTPUT = 'Command succeeded (no output).';
4
2
  function isRecord(value) {
5
3
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -14,55 +12,43 @@ function hasArrayItems(value) {
14
12
  return Array.isArray(value) && value.length > 0;
15
13
  }
16
14
  export class UniversalShapeFilter {
17
- cfg = null;
18
- configPath;
19
- inlineConfig;
20
- constructor(options = {}) {
21
- this.configPath = options.configPath;
22
- this.inlineConfig = options.config;
15
+ cfg;
16
+ constructor(config) {
17
+ this.cfg = config;
23
18
  }
24
- async initialize() {
25
- if (this.inlineConfig) {
26
- this.cfg = this.inlineConfig;
27
- return;
28
- }
29
- const file = this.configPath ? (path.isAbsolute(this.configPath) ? this.configPath : path.join(process.cwd(), this.configPath)) : '';
30
- if (file) {
31
- try {
32
- const text = await fs.readFile(file, 'utf-8');
33
- this.cfg = JSON.parse(text);
34
- return;
35
- }
36
- catch { /* fallthrough to default */ }
37
- }
38
- this.cfg = {
39
- request: {
40
- allowTopLevel: ['model', 'messages', 'stream', 'thinking', 'do_sample', 'temperature', 'top_p', 'max_tokens', 'tool_stream', 'tools', 'tool_choice', 'stop', 'response_format', 'request_id', 'user_id'],
41
- messages: { allowedRoles: ['system', 'user', 'assistant', 'tool'], assistantWithToolCallsContentNull: true, toolContentStringify: true },
42
- tools: { normalize: true, forceToolChoiceAuto: true },
43
- assistantToolCalls: { functionArgumentsType: 'string' } // 修复:默认使用string格式而不是object
44
- },
45
- response: {
46
- // 保留 Responses 协议关键字段,避免在合成/转换前被丢弃
47
- allowTopLevel: [
48
- 'id', 'request_id', 'created', 'model',
49
- 'choices', 'usage', 'video_result', 'web_search', 'content_filter',
50
- // Responses 专有/常见:
51
- 'required_action', 'output', 'output_text', 'status'
52
- ],
53
- choices: {
54
- required: true,
55
- message: {
56
- allow: ['role', 'content', 'reasoning_content', 'audio', 'tool_calls'],
57
- roleDefault: 'assistant',
58
- contentNullWhenToolCalls: true,
59
- tool_calls: { function: { nameRequired: true, argumentsType: 'string' } }
60
- },
61
- finish_reason: ['stop', 'tool_calls', 'length', 'sensitive', 'network_error']
62
- },
63
- usage: { allow: ['prompt_tokens', 'completion_tokens', 'prompt_tokens_details', 'total_tokens'] }
19
+ applyRequestFilter(payload) {
20
+ const cfg = this.cfg;
21
+ const allow = new Set(cfg.request.allowTopLevel);
22
+ const src = toRecord(payload);
23
+ const out = {};
24
+ for (const key of Object.keys(src)) {
25
+ if (allow.has(key)) {
26
+ out[key] = src[key];
64
27
  }
65
- };
28
+ }
29
+ const normalizedMessages = this.normalizeRequestMessages(out.messages, cfg.request);
30
+ out.messages = normalizedMessages;
31
+ this.normalizeTools(out, cfg.request);
32
+ this.cleanupToolChoice(out);
33
+ return out;
34
+ }
35
+ applyResponseFilter(payload, ctx) {
36
+ const envFlag = String(process.env.RCC_COMPAT_FILTER_OFF_RESPONSES || '1').toLowerCase();
37
+ const envBypass = !(envFlag === '0' || envFlag === 'false' || envFlag === 'off');
38
+ const entryEndpoint = ctx?.entryEndpoint ?? ctx?.endpoint;
39
+ const entry = typeof entryEndpoint === 'string' ? entryEndpoint.toLowerCase() : '';
40
+ if (entry === '/v1/responses' || envBypass) {
41
+ return payload;
42
+ }
43
+ const cfg = this.cfg;
44
+ const src = toRecord(payload);
45
+ const out = this.shallowPick(src, cfg.response.allowTopLevel);
46
+ const choices = Array.isArray(src.choices) ? src.choices : [];
47
+ out.choices = choices.map((choice, idx) => this.normalizeResponseChoice(choice, idx, cfg.response));
48
+ if (src.usage && typeof src.usage === 'object') {
49
+ out.usage = this.shallowPick(src.usage, cfg.response.usage?.allow || []);
50
+ }
51
+ return out;
66
52
  }
67
53
  shallowPick(obj, allow) {
68
54
  if (!isRecord(obj)) {
@@ -119,51 +105,6 @@ export class UniversalShapeFilter {
119
105
  return DEFAULT_TOOL_OUTPUT;
120
106
  }
121
107
  }
122
- async applyRequestFilter(payload) {
123
- const cfg = this.cfg;
124
- const allow = new Set(cfg.request.allowTopLevel);
125
- const src = toRecord(payload);
126
- const out = {};
127
- for (const key of Object.keys(src)) {
128
- if (allow.has(key)) {
129
- out[key] = src[key];
130
- }
131
- }
132
- const normalizedMessages = this.normalizeRequestMessages(out.messages, cfg.request);
133
- out.messages = normalizedMessages;
134
- this.normalizeTools(out, cfg.request);
135
- this.cleanupToolChoice(out);
136
- return out;
137
- }
138
- async applyResponseFilter(payload, _ctx) {
139
- // Bypass shape filtering by default to keep system running; can be turned off via env.
140
- // Default: RCC_COMPAT_FILTER_OFF_RESPONSES is treated as ON unless explicitly set to 0/false/off.
141
- const envFlag = String(process.env.RCC_COMPAT_FILTER_OFF_RESPONSES || '1').toLowerCase();
142
- const envBypass = !(envFlag === '0' || envFlag === 'false' || envFlag === 'off');
143
- try {
144
- const ctx = _ctx;
145
- const entryEndpoint = typeof ctx?.entryEndpoint === 'string' ? ctx.entryEndpoint : undefined;
146
- const fallbackEndpoint = typeof ctx?.endpoint === 'string' ? ctx.endpoint : undefined;
147
- const entry = String(entryEndpoint ?? fallbackEndpoint ?? '').toLowerCase();
148
- if (entry === '/v1/responses' || envBypass) {
149
- return payload;
150
- }
151
- }
152
- catch {
153
- if (envBypass) {
154
- return payload;
155
- }
156
- }
157
- const cfg = this.cfg;
158
- const src = toRecord(payload);
159
- const out = this.shallowPick(src, cfg.response.allowTopLevel);
160
- const choices = Array.isArray(src.choices) ? src.choices : [];
161
- out.choices = choices.map((choice, idx) => this.normalizeResponseChoice(choice, idx, cfg.response));
162
- if (src.usage && typeof src.usage === 'object') {
163
- out.usage = this.shallowPick(src.usage, cfg.response.usage?.allow || []);
164
- }
165
- return out;
166
- }
167
108
  normalizeRequestMessages(messages, requestCfg) {
168
109
  const entries = toArray(messages);
169
110
  const normalized = entries.map(entry => this.normalizeSingleMessage(entry, requestCfg));
@@ -435,12 +376,7 @@ export class UniversalShapeFilter {
435
376
  if (typeof tc.id === 'string') {
436
377
  normalized.id = tc.id;
437
378
  }
438
- if (tc.mcp) {
439
- const existing = isRecord(normalized._glm) ? normalized._glm : {};
440
- normalized._glm = { ...existing, mcp: tc.mcp };
441
- }
442
379
  return normalized;
443
380
  });
444
381
  }
445
382
  }
446
- //# sourceMappingURL=universal-shape-filter.js.map
@@ -1,17 +1,191 @@
1
1
  {
2
2
  "id": "chat:glm",
3
3
  "protocol": "openai-chat",
4
- "direction": "request",
5
- "mappings": [
6
- {
7
- "action": "rename",
8
- "from": "response_format",
9
- "to": "metadata.generation.response_format"
10
- },
11
- {
12
- "action": "remove",
13
- "path": "metadata.clientModelId"
14
- }
15
- ],
16
- "filters": []
4
+ "request": {
5
+ "mappings": [
6
+ { "action": "snapshot", "phase": "compat-pre" },
7
+ { "action": "dto_unwrap" },
8
+ {
9
+ "action": "rename",
10
+ "from": "response_format",
11
+ "to": "metadata.generation.response_format"
12
+ },
13
+ {
14
+ "action": "remove",
15
+ "path": "metadata.clientModelId"
16
+ },
17
+ {
18
+ "action": "shape_filter",
19
+ "target": "request",
20
+ "config": {
21
+ "request": {
22
+ "allowTopLevel": [
23
+ "model", "messages", "stream", "thinking", "do_sample", "temperature", "top_p",
24
+ "max_tokens", "tools", "tool_choice", "stop", "response_format"
25
+ ],
26
+ "messages": {
27
+ "allowedRoles": ["system", "user", "assistant", "tool"],
28
+ "assistantWithToolCallsContentNull": true,
29
+ "toolContentStringify": false
30
+ },
31
+ "messagesRules": [],
32
+ "tools": {
33
+ "normalize": false,
34
+ "forceToolChoiceAuto": true
35
+ },
36
+ "assistantToolCalls": { "functionArgumentsType": "string" }
37
+ },
38
+ "response": {
39
+ "allowTopLevel": [
40
+ "id", "request_id", "created", "model",
41
+ "choices", "usage", "video_result", "web_search", "content_filter",
42
+ "required_action", "output", "output_text", "status"
43
+ ],
44
+ "choices": {
45
+ "required": true,
46
+ "message": {
47
+ "allow": ["role", "content", "reasoning_content", "audio", "tool_calls"],
48
+ "roleDefault": "assistant",
49
+ "contentNullWhenToolCalls": true,
50
+ "tool_calls": { "function": { "nameRequired": true, "argumentsType": "string" } }
51
+ },
52
+ "finish_reason": ["stop", "tool_calls", "length", "sensitive", "network_error"]
53
+ },
54
+ "usage": { "allow": ["prompt_tokens", "completion_tokens", "prompt_tokens_details", "total_tokens"] }
55
+ }
56
+ }
57
+ },
58
+ {
59
+ "action": "apply_rules",
60
+ "config": {
61
+ "tools": {
62
+ "function": {
63
+ "removeKeys": ["strict", "json_schema"]
64
+ }
65
+ },
66
+ "messages": {
67
+ "assistantToolCalls": {
68
+ "function": {
69
+ "removeKeys": ["strict"]
70
+ }
71
+ }
72
+ },
73
+ "topLevel": {
74
+ "conditional": [
75
+ { "when": { "tools": "empty" }, "remove": ["tool_choice"] }
76
+ ]
77
+ }
78
+ }
79
+ },
80
+ {
81
+ "action": "field_map",
82
+ "direction": "incoming",
83
+ "config": [
84
+ { "sourcePath": "usage.prompt_tokens", "targetPath": "usage.input_tokens", "type": "number" },
85
+ { "sourcePath": "usage.completion_tokens", "targetPath": "usage.output_tokens", "type": "number" },
86
+ { "sourcePath": "created", "targetPath": "created_at", "type": "number" },
87
+ { "sourcePath": "request_id", "targetPath": "request_id", "type": "string" },
88
+ { "sourcePath": "model", "targetPath": "model", "type": "string", "transform": "normalizeModelName" },
89
+ {
90
+ "sourcePath": "choices[*].message.tool_calls[*].function.arguments",
91
+ "targetPath": "choices[*].message.tool_calls[*].function.arguments",
92
+ "type": "string"
93
+ }
94
+ ]
95
+ },
96
+ { "action": "tool_schema_sanitize", "mode": "glm_shell" },
97
+ {
98
+ "action": "auto_thinking",
99
+ "config": {
100
+ "modelPrefixes": ["glm-4.7", "glm-4.6", "glm-4.5", "glm-z1"],
101
+ "excludePrefixes": ["glm-4.6v"]
102
+ }
103
+ },
104
+ { "action": "snapshot", "phase": "compat-post" },
105
+ { "action": "dto_rewrap" }
106
+ ]
107
+ },
108
+ "response": {
109
+ "mappings": [
110
+ { "action": "snapshot", "phase": "compat-pre" },
111
+ { "action": "dto_unwrap" },
112
+ {
113
+ "action": "resp_blacklist",
114
+ "config": {
115
+ "paths": ["usage.prompt_tokens_details.cached_tokens"],
116
+ "keepCritical": true
117
+ }
118
+ },
119
+ {
120
+ "action": "shape_filter",
121
+ "target": "response",
122
+ "config": {
123
+ "request": {
124
+ "allowTopLevel": [
125
+ "model", "messages", "stream", "thinking", "do_sample", "temperature", "top_p",
126
+ "max_tokens", "tools", "tool_choice", "stop", "response_format"
127
+ ],
128
+ "messages": {
129
+ "allowedRoles": ["system", "user", "assistant", "tool"],
130
+ "assistantWithToolCallsContentNull": true,
131
+ "toolContentStringify": false
132
+ },
133
+ "messagesRules": [],
134
+ "tools": {
135
+ "normalize": false,
136
+ "forceToolChoiceAuto": true
137
+ },
138
+ "assistantToolCalls": { "functionArgumentsType": "string" }
139
+ },
140
+ "response": {
141
+ "allowTopLevel": [
142
+ "id", "request_id", "created", "model",
143
+ "choices", "usage", "video_result", "web_search", "content_filter",
144
+ "required_action", "output", "output_text", "status"
145
+ ],
146
+ "choices": {
147
+ "required": true,
148
+ "message": {
149
+ "allow": ["role", "content", "reasoning_content", "audio", "tool_calls"],
150
+ "roleDefault": "assistant",
151
+ "contentNullWhenToolCalls": true,
152
+ "tool_calls": { "function": { "nameRequired": true, "argumentsType": "string" } }
153
+ },
154
+ "finish_reason": ["stop", "tool_calls", "length", "sensitive", "network_error"]
155
+ },
156
+ "usage": { "allow": ["prompt_tokens", "completion_tokens", "prompt_tokens_details", "total_tokens"] }
157
+ }
158
+ }
159
+ },
160
+ {
161
+ "action": "field_map",
162
+ "direction": "outgoing",
163
+ "config": [
164
+ { "sourcePath": "usage.input_tokens", "targetPath": "usage.prompt_tokens", "type": "number" },
165
+ { "sourcePath": "usage.output_tokens", "targetPath": "usage.completion_tokens", "type": "number" },
166
+ { "sourcePath": "usage.total_input_tokens", "targetPath": "usage.prompt_tokens", "type": "number" },
167
+ { "sourcePath": "usage.total_output_tokens", "targetPath": "usage.completion_tokens", "type": "number" },
168
+ { "sourcePath": "created_at", "targetPath": "created", "type": "number" },
169
+ { "sourcePath": "request_id", "targetPath": "request_id", "type": "string" },
170
+ {
171
+ "sourcePath": "choices[*].finish_reason",
172
+ "targetPath": "choices[*].finish_reason",
173
+ "type": "string",
174
+ "transform": "normalizeFinishReason"
175
+ },
176
+ {
177
+ "sourcePath": "choices[*].message.tool_calls[*].function.arguments",
178
+ "targetPath": "choices[*].message.tool_calls[*].function.arguments",
179
+ "type": "string"
180
+ }
181
+ ]
182
+ },
183
+ { "action": "tool_schema_sanitize", "mode": "glm_shell" },
184
+ { "action": "response_normalize" },
185
+ { "action": "extract_glm_tool_markup" },
186
+ { "action": "response_validate" },
187
+ { "action": "snapshot", "phase": "compat-post" },
188
+ { "action": "dto_rewrap" }
189
+ ]
190
+ }
17
191
  }
@@ -3,6 +3,8 @@
3
3
  "protocol": "openai-chat",
4
4
  "request": {
5
5
  "mappings": [
6
+ { "action": "snapshot", "phase": "compat-pre" },
7
+ { "action": "dto_unwrap" },
6
8
  {
7
9
  "action": "remove",
8
10
  "path": "metadata.toolCallIdStyle"
@@ -14,23 +16,189 @@
14
16
  {
15
17
  "action": "remove",
16
18
  "path": "metadata.providerHint"
17
- }
19
+ },
20
+ {
21
+ "action": "shape_filter",
22
+ "target": "request",
23
+ "config": {
24
+ "request": {
25
+ "allowTopLevel": [
26
+ "model",
27
+ "messages",
28
+ "stream",
29
+ "thinking",
30
+ "do_sample",
31
+ "temperature",
32
+ "top_p",
33
+ "max_tokens",
34
+ "tools",
35
+ "tool_choice",
36
+ "stop",
37
+ "response_format"
38
+ ],
39
+ "messages": {
40
+ "allowedRoles": ["system", "user", "assistant", "tool"],
41
+ "assistantWithToolCallsContentNull": true,
42
+ "toolContentStringify": false
43
+ },
44
+ "messagesRules": [],
45
+ "tools": {
46
+ "normalize": false,
47
+ "forceToolChoiceAuto": true
48
+ },
49
+ "assistantToolCalls": { "functionArgumentsType": "string" }
50
+ },
51
+ "response": {
52
+ "allowTopLevel": [
53
+ "id",
54
+ "request_id",
55
+ "created",
56
+ "model",
57
+ "choices",
58
+ "usage",
59
+ "video_result",
60
+ "web_search",
61
+ "content_filter",
62
+ "required_action",
63
+ "output",
64
+ "output_text",
65
+ "status"
66
+ ],
67
+ "choices": {
68
+ "required": true,
69
+ "message": {
70
+ "allow": ["role", "content", "reasoning_content", "audio", "tool_calls"],
71
+ "roleDefault": "assistant",
72
+ "contentNullWhenToolCalls": true,
73
+ "tool_calls": { "function": { "nameRequired": true, "argumentsType": "string" } }
74
+ },
75
+ "finish_reason": ["stop", "tool_calls", "length", "sensitive", "network_error"]
76
+ },
77
+ "usage": {
78
+ "allow": ["prompt_tokens", "completion_tokens", "prompt_tokens_details", "total_tokens"]
79
+ }
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "action": "field_map",
85
+ "direction": "incoming",
86
+ "config": [
87
+ { "sourcePath": "usage.prompt_tokens", "targetPath": "usage.input_tokens", "type": "number" },
88
+ { "sourcePath": "usage.completion_tokens", "targetPath": "usage.output_tokens", "type": "number" },
89
+ { "sourcePath": "created", "targetPath": "created_at", "type": "number" },
90
+ { "sourcePath": "request_id", "targetPath": "request_id", "type": "string" },
91
+ {
92
+ "sourcePath": "model",
93
+ "targetPath": "model",
94
+ "type": "string",
95
+ "transform": "normalizeModelName"
96
+ },
97
+ {
98
+ "sourcePath": "choices[*].message.tool_calls[*].function.arguments",
99
+ "targetPath": "choices[*].message.tool_calls[*].function.arguments",
100
+ "type": "string"
101
+ }
102
+ ]
103
+ },
104
+ { "action": "tool_schema_sanitize", "mode": "glm_shell" },
105
+ { "action": "snapshot", "phase": "compat-post" },
106
+ { "action": "dto_rewrap" }
18
107
  ]
19
108
  },
20
109
  "response": {
21
110
  "mappings": [
111
+ { "action": "snapshot", "phase": "compat-pre" },
112
+ { "action": "dto_unwrap" },
22
113
  {
23
- "action": "rename",
24
- "from": "created_at",
25
- "to": "created"
114
+ "action": "shape_filter",
115
+ "target": "response",
116
+ "config": {
117
+ "request": {
118
+ "allowTopLevel": [
119
+ "model",
120
+ "messages",
121
+ "stream",
122
+ "thinking",
123
+ "do_sample",
124
+ "temperature",
125
+ "top_p",
126
+ "max_tokens",
127
+ "tools",
128
+ "tool_choice",
129
+ "stop",
130
+ "response_format"
131
+ ],
132
+ "messages": {
133
+ "allowedRoles": ["system", "user", "assistant", "tool"],
134
+ "assistantWithToolCallsContentNull": true,
135
+ "toolContentStringify": false
136
+ },
137
+ "messagesRules": [],
138
+ "tools": {
139
+ "normalize": false,
140
+ "forceToolChoiceAuto": true
141
+ },
142
+ "assistantToolCalls": { "functionArgumentsType": "string" }
143
+ },
144
+ "response": {
145
+ "allowTopLevel": [
146
+ "id",
147
+ "request_id",
148
+ "created",
149
+ "model",
150
+ "choices",
151
+ "usage",
152
+ "video_result",
153
+ "web_search",
154
+ "content_filter",
155
+ "required_action",
156
+ "output",
157
+ "output_text",
158
+ "status"
159
+ ],
160
+ "choices": {
161
+ "required": true,
162
+ "message": {
163
+ "allow": ["role", "content", "reasoning_content", "audio", "tool_calls"],
164
+ "roleDefault": "assistant",
165
+ "contentNullWhenToolCalls": true,
166
+ "tool_calls": { "function": { "nameRequired": true, "argumentsType": "string" } }
167
+ },
168
+ "finish_reason": ["stop", "tool_calls", "length", "sensitive", "network_error"]
169
+ },
170
+ "usage": {
171
+ "allow": ["prompt_tokens", "completion_tokens", "prompt_tokens_details", "total_tokens"]
172
+ }
173
+ }
174
+ }
26
175
  },
27
176
  {
28
- "action": "convert_responses_output_to_choices"
177
+ "action": "field_map",
178
+ "direction": "outgoing",
179
+ "config": [
180
+ { "sourcePath": "usage.input_tokens", "targetPath": "usage.prompt_tokens", "type": "number" },
181
+ { "sourcePath": "usage.output_tokens", "targetPath": "usage.completion_tokens", "type": "number" },
182
+ { "sourcePath": "usage.total_input_tokens", "targetPath": "usage.prompt_tokens", "type": "number" },
183
+ { "sourcePath": "usage.total_output_tokens", "targetPath": "usage.completion_tokens", "type": "number" },
184
+ { "sourcePath": "created_at", "targetPath": "created", "type": "number" },
185
+ { "sourcePath": "request_id", "targetPath": "request_id", "type": "string" },
186
+ {
187
+ "sourcePath": "choices[*].finish_reason",
188
+ "targetPath": "choices[*].finish_reason",
189
+ "type": "string",
190
+ "transform": "normalizeFinishReason"
191
+ },
192
+ {
193
+ "sourcePath": "choices[*].message.tool_calls[*].function.arguments",
194
+ "targetPath": "choices[*].message.tool_calls[*].function.arguments",
195
+ "type": "string"
196
+ }
197
+ ]
29
198
  },
30
- {
31
- "action": "stringify",
32
- "path": "choices[*].message.tool_calls[*].function.arguments"
33
- }
199
+ { "action": "tool_schema_sanitize", "mode": "glm_shell" },
200
+ { "action": "snapshot", "phase": "compat-post" },
201
+ { "action": "dto_rewrap" }
34
202
  ]
35
203
  }
36
204
  }