@jsonstudio/llms 0.6.2172 → 0.6.3214

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 (524) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/args-mapping.js +8 -0
  3. package/dist/conversion/bridge-actions.js +367 -0
  4. package/dist/conversion/bridge-id-utils.js +13 -0
  5. package/dist/conversion/{shared/bridge-instructions.js → bridge-instructions.js} +2 -1
  6. package/dist/conversion/{shared/bridge-message-utils.d.ts → bridge-message-utils.d.ts} +1 -1
  7. package/dist/conversion/{shared/bridge-message-utils.js → bridge-message-utils.js} +5 -150
  8. package/dist/conversion/{shared/bridge-metadata.d.ts → bridge-metadata.d.ts} +1 -0
  9. package/dist/conversion/bridge-metadata.js +5 -0
  10. package/dist/conversion/bridge-policies.js +11 -0
  11. package/dist/conversion/codecs/gemini-openai-codec.js +27 -8
  12. package/dist/conversion/codecs/responses-openai-codec.js +1 -1
  13. package/dist/conversion/{shared/compaction-detect.d.ts → compaction-detect.d.ts} +1 -1
  14. package/dist/conversion/compaction-detect.js +4 -0
  15. package/dist/conversion/compat/actions/apply-patch-fixer.js +2 -2
  16. package/dist/conversion/compat/actions/deepseek-web-response.d.ts +0 -1
  17. package/dist/conversion/compat/actions/deepseek-web-response.js +15 -405
  18. package/dist/conversion/compat/actions/harvest-tool-calls-from-text.js +1 -1
  19. package/dist/conversion/compat/actions/lmstudio-responses-fc-ids.js +1 -1
  20. package/dist/conversion/compat/actions/qwen-transform.js +74 -2
  21. package/dist/conversion/compat/actions/snapshot.js +1 -1
  22. package/dist/conversion/compat/antigravity-session-signature.js +71 -1
  23. package/dist/conversion/compat/profiles/chat-deepseek-web.json +0 -22
  24. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  25. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  26. package/dist/conversion/compat/profiles/chat-glm.json +251 -72
  27. package/dist/conversion/compat/profiles/chat-iflow.json +174 -39
  28. package/dist/conversion/compat/profiles/chat-lmstudio.json +43 -14
  29. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  30. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  31. package/dist/conversion/hub/core/index.d.ts +1 -0
  32. package/dist/conversion/hub/core/stage-driver.js +2 -0
  33. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  34. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  35. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  36. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  37. package/dist/conversion/hub/hub-feature.js +3 -2
  38. package/dist/conversion/hub/node-support.js +9 -4
  39. package/dist/conversion/hub/operation-table/operation-table-runner.js +12 -8
  40. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +3 -3
  41. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +16 -13
  42. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +6 -10
  43. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +21 -73
  44. package/dist/conversion/hub/ops/operations.js +2 -121
  45. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  46. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  47. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  48. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  49. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  50. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  51. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  52. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  53. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +1 -0
  54. package/dist/conversion/hub/pipeline/hub-pipeline.js +165 -265
  55. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  56. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  57. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  58. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.d.ts +1 -1
  59. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +69 -81
  60. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  61. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  62. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  63. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  64. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  65. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  66. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  67. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  68. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  69. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  70. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  71. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  72. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  73. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  74. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  75. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  76. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  77. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  78. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  79. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  80. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  81. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  82. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  83. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +20 -3
  84. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +11 -199
  85. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  86. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  87. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  88. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  89. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  90. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  91. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  92. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  93. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  94. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  95. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  96. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  97. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +54 -39
  98. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +18 -5
  99. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  100. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  101. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  102. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  103. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  104. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  105. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  106. package/dist/conversion/hub/policy/protocol-spec.js +21 -149
  107. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  108. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  109. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  110. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  111. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  112. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  113. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  114. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  115. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  116. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  117. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  118. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  119. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  120. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  121. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  122. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  123. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  124. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  125. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  126. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  127. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  128. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  129. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  130. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  131. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  132. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  133. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  134. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  135. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  136. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  137. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  138. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  139. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  140. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  141. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  142. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  143. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  144. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  145. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  146. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  147. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  148. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  149. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  150. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  151. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  152. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  153. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  154. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  155. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  156. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  157. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  158. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  159. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  160. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  161. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  162. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  163. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  164. package/dist/conversion/hub/process/chat-process.js +12 -1701
  165. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  166. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  167. package/dist/conversion/hub/registry.js +5 -2
  168. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  169. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  170. package/dist/conversion/hub/response/provider-response.js +20 -26
  171. package/dist/conversion/hub/response/response-mappers.js +25 -27
  172. package/dist/conversion/hub/response/response-runtime.js +30 -98
  173. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  174. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  175. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  176. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  177. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  178. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  179. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  180. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  181. package/dist/conversion/hub/snapshot-recorder.js +11 -4
  182. package/dist/conversion/hub/standardized-bridge.js +11 -288
  183. package/dist/conversion/hub/tool-governance/engine.d.ts +8 -0
  184. package/dist/conversion/hub/tool-governance/engine.js +25 -63
  185. package/dist/conversion/hub/tool-governance/rules.js +73 -69
  186. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  187. package/dist/conversion/hub/tool-session-compat.js +17 -231
  188. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +6 -4
  189. package/dist/conversion/index.d.ts +1 -2
  190. package/dist/conversion/index.js +1 -2
  191. package/dist/conversion/jsonish.js +20 -0
  192. package/dist/conversion/mcp-injection.js +7 -0
  193. package/dist/conversion/media.js +4 -0
  194. package/dist/conversion/{shared/metadata-passthrough.d.ts → metadata-passthrough.d.ts} +1 -1
  195. package/dist/conversion/metadata-passthrough.js +20 -0
  196. package/dist/conversion/payload-budget.js +47 -0
  197. package/dist/conversion/protocol-field-allowlists.d.ts +7 -0
  198. package/dist/conversion/protocol-field-allowlists.js +9 -0
  199. package/dist/conversion/{shared/protocol-state.d.ts → protocol-state.d.ts} +2 -2
  200. package/dist/conversion/protocol-state.js +27 -0
  201. package/dist/conversion/{shared/errors.d.ts → provider-protocol-error.d.ts} +0 -3
  202. package/dist/conversion/provider-protocol-error.js +25 -0
  203. package/dist/conversion/responses/responses-host-policy.js +2 -12
  204. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +14 -87
  205. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +2 -1
  206. package/dist/conversion/responses/responses-openai-bridge.d.ts +1 -1
  207. package/dist/conversion/responses/responses-openai-bridge.js +62 -62
  208. package/dist/conversion/{shared/runtime-metadata.d.ts → runtime-metadata.d.ts} +1 -1
  209. package/dist/conversion/runtime-metadata.js +31 -0
  210. package/dist/conversion/shared/anthropic-message-utils.js +170 -21
  211. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  212. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  213. package/dist/conversion/shared/chat-request-filters.d.ts +3 -4
  214. package/dist/conversion/shared/chat-request-filters.js +22 -78
  215. package/dist/conversion/shared/gemini-tool-utils.d.ts +1 -1
  216. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  217. package/dist/conversion/shared/openai-finalizer.js +3 -1
  218. package/dist/conversion/shared/openai-message-normalize.js +13 -285
  219. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  220. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  221. package/dist/conversion/shared/reasoning-normalizer.js +10 -1
  222. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  223. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  224. package/dist/conversion/shared/reasoning-utils.js +7 -8
  225. package/dist/conversion/shared/responses-conversation-store.js +5 -83
  226. package/dist/conversion/shared/responses-output-builder.js +63 -55
  227. package/dist/conversion/shared/responses-reasoning-registry.d.ts +14 -2
  228. package/dist/conversion/shared/responses-reasoning-registry.js +41 -7
  229. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  230. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  231. package/dist/conversion/shared/responses-response-utils.js +103 -14
  232. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  233. package/dist/conversion/shared/responses-tool-utils.js +91 -15
  234. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  235. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +2 -2
  236. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  237. package/dist/conversion/shared/text-markup-normalizer.d.ts +3 -2
  238. package/dist/conversion/shared/text-markup-normalizer.js +2 -1
  239. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  240. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  241. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  242. package/dist/conversion/shared/tool-call-utils.js +3 -45
  243. package/dist/conversion/shared/tool-filter-pipeline.js +5 -100
  244. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  245. package/dist/conversion/shared/tool-governor.js +45 -127
  246. package/dist/conversion/shared/tool-harvester.js +2 -8
  247. package/dist/conversion/shared/tool-mapping.d.ts +1 -1
  248. package/dist/conversion/shared/tool-mapping.js +2 -5
  249. package/dist/conversion/shared/tooling.d.ts +0 -4
  250. package/dist/conversion/shared/tooling.js +18 -0
  251. package/dist/conversion/{shared/snapshot-utils.d.ts → snapshot-utils.d.ts} +11 -0
  252. package/dist/conversion/{shared/snapshot-utils.js → snapshot-utils.js} +14 -23
  253. package/dist/conversion/{shared → types}/bridge-message-types.d.ts +2 -0
  254. package/dist/conversion/types/text-markup-normalizer.d.ts +13 -0
  255. package/dist/filters/special/request-tools-normalize.js +1 -1
  256. package/dist/filters/special/response-tool-text-canonicalize.js +2 -2
  257. package/dist/native/router_hotpath_napi.node +0 -0
  258. package/dist/quota/quota-manager.js +31 -59
  259. package/dist/quota/quota-state.js +14 -7
  260. package/dist/router/virtual-router/bootstrap/profile-builder.d.ts +1 -0
  261. package/dist/router/virtual-router/bootstrap/profile-builder.js +13 -0
  262. package/dist/router/virtual-router/bootstrap/provider-normalization.d.ts +2 -0
  263. package/dist/router/virtual-router/bootstrap/provider-normalization.js +4 -1
  264. package/dist/router/virtual-router/bootstrap/streaming-helpers.d.ts +7 -0
  265. package/dist/router/virtual-router/bootstrap/streaming-helpers.js +44 -0
  266. package/dist/router/virtual-router/bootstrap.js +2 -0
  267. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  268. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  269. package/dist/router/virtual-router/engine/routing-state/store.d.ts +1 -2
  270. package/dist/router/virtual-router/engine/routing-state/store.js +50 -14
  271. package/dist/router/virtual-router/engine-legacy/config.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-legacy/config.js +108 -0
  273. package/dist/router/virtual-router/engine-legacy/direct-model.d.ts +10 -0
  274. package/dist/router/virtual-router/engine-legacy/direct-model.js +38 -0
  275. package/dist/router/virtual-router/engine-legacy/health.d.ts +13 -0
  276. package/dist/router/virtual-router/engine-legacy/health.js +104 -0
  277. package/dist/router/virtual-router/engine-legacy/helpers.d.ts +16 -0
  278. package/dist/router/virtual-router/engine-legacy/helpers.js +226 -0
  279. package/dist/router/virtual-router/engine-legacy/route-finalize.d.ts +9 -0
  280. package/dist/router/virtual-router/engine-legacy/route-finalize.js +84 -0
  281. package/dist/router/virtual-router/engine-legacy/route-selection.d.ts +17 -0
  282. package/dist/router/virtual-router/engine-legacy/route-selection.js +205 -0
  283. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.d.ts +3 -0
  284. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.js +36 -0
  285. package/dist/router/virtual-router/engine-legacy/route-state.d.ts +12 -0
  286. package/dist/router/virtual-router/engine-legacy/route-state.js +386 -0
  287. package/dist/router/virtual-router/engine-legacy/route-utils.d.ts +19 -0
  288. package/dist/router/virtual-router/engine-legacy/route-utils.js +212 -0
  289. package/dist/router/virtual-router/engine-legacy/routing.d.ts +8 -0
  290. package/dist/router/virtual-router/engine-legacy/routing.js +8 -0
  291. package/dist/router/virtual-router/engine-legacy/selection-core.d.ts +28 -0
  292. package/dist/router/virtual-router/engine-legacy/selection-core.js +112 -0
  293. package/dist/router/virtual-router/engine-legacy/selection-state.d.ts +16 -0
  294. package/dist/router/virtual-router/engine-legacy/selection-state.js +187 -0
  295. package/dist/router/virtual-router/engine-legacy/state-accessors.d.ts +21 -0
  296. package/dist/router/virtual-router/engine-legacy/state-accessors.js +118 -0
  297. package/dist/router/virtual-router/engine-legacy.d.ts +123 -0
  298. package/dist/router/virtual-router/engine-legacy.js +194 -0
  299. package/dist/router/virtual-router/engine-logging.d.ts +2 -0
  300. package/dist/router/virtual-router/engine-logging.js +11 -5
  301. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  302. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -26
  303. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  304. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  305. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  306. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  307. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  308. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  309. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  310. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  311. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  312. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  313. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  314. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  315. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  316. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  317. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  318. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  319. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  320. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  321. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  322. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  323. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  324. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  325. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  326. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  327. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  328. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  329. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.d.ts +1 -0
  330. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.js +54 -0
  331. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  332. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  333. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +72 -0
  334. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +405 -0
  335. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  336. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  337. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.d.ts +22 -0
  338. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.js +154 -0
  339. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  340. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  341. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  342. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  343. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  344. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  345. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  346. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  347. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  348. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  349. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  350. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  351. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  352. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  353. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  354. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  355. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  356. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  357. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  358. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +320 -0
  359. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  360. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  361. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  362. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  363. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  364. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  365. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +151 -0
  366. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1371 -0
  367. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.d.ts +2 -0
  368. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.js +69 -0
  369. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  370. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  371. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.d.ts +16 -0
  372. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.js +14 -0
  373. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.d.ts +2 -0
  374. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.js +86 -0
  375. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  376. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  377. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  378. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  379. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  380. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  381. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  382. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  383. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  384. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  385. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  386. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  387. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +216 -0
  388. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  389. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +128 -129
  390. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  391. package/dist/router/virtual-router/engine.d.ts +22 -105
  392. package/dist/router/virtual-router/engine.js +274 -1632
  393. package/dist/router/virtual-router/features.js +2 -2
  394. package/dist/router/virtual-router/load-balancer.d.ts +8 -0
  395. package/dist/router/virtual-router/load-balancer.js +65 -2
  396. package/dist/router/virtual-router/provider-registry.js +2 -0
  397. package/dist/router/virtual-router/routing-instructions/clean.d.ts +3 -0
  398. package/dist/router/virtual-router/routing-instructions/clean.js +34 -0
  399. package/dist/router/virtual-router/routing-instructions/parse.d.ts +18 -0
  400. package/dist/router/virtual-router/routing-instructions/parse.js +377 -0
  401. package/dist/router/virtual-router/routing-instructions/state.d.ts +4 -0
  402. package/dist/router/virtual-router/routing-instructions/state.js +245 -0
  403. package/dist/router/virtual-router/routing-instructions/types.d.ts +70 -0
  404. package/dist/router/virtual-router/routing-instructions/types.js +2 -0
  405. package/dist/router/virtual-router/routing-instructions.d.ts +5 -91
  406. package/dist/router/virtual-router/routing-instructions.js +4 -628
  407. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  408. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  409. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  410. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  411. package/dist/router/virtual-router/sticky-session-store.d.ts +4 -0
  412. package/dist/router/virtual-router/sticky-session-store.js +23 -83
  413. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  414. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  415. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  416. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  417. package/dist/router/virtual-router/token-counter.js +0 -9
  418. package/dist/router/virtual-router/tool-signals.js +21 -3
  419. package/dist/router/virtual-router/types.d.ts +13 -7
  420. package/dist/servertool/clock/config.js +23 -51
  421. package/dist/servertool/clock/io.js +1 -0
  422. package/dist/servertool/clock/session-scope.d.ts +2 -2
  423. package/dist/servertool/clock/session-scope.js +29 -40
  424. package/dist/servertool/engine.d.ts +9 -0
  425. package/dist/servertool/engine.js +267 -79
  426. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +3 -3
  427. package/dist/servertool/handlers/clock-auto.js +1 -1
  428. package/dist/servertool/handlers/clock.js +2 -2
  429. package/dist/servertool/handlers/compaction-detect.d.ts +1 -1
  430. package/dist/servertool/handlers/compaction-detect.js +1 -1
  431. package/dist/servertool/handlers/continue-execution.js +8 -4
  432. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  433. package/dist/servertool/handlers/gemini-empty-reply-continue.js +8 -2
  434. package/dist/servertool/handlers/iflow-model-error-retry.js +1 -1
  435. package/dist/servertool/handlers/recursive-detection-guard.js +1 -1
  436. package/dist/servertool/handlers/review.d.ts +1 -0
  437. package/dist/servertool/handlers/review.js +180 -0
  438. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  439. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  440. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +398 -90
  441. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  442. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  443. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  444. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +36 -62
  445. package/dist/servertool/handlers/stop-message-auto.js +393 -77
  446. package/dist/servertool/handlers/vision.js +1 -1
  447. package/dist/servertool/handlers/web-search.js +1 -1
  448. package/dist/servertool/reenter-backend.js +1 -1
  449. package/dist/servertool/server-side-tools.d.ts +1 -0
  450. package/dist/servertool/server-side-tools.js +92 -54
  451. package/dist/servertool/stop-gateway-context.js +1 -1
  452. package/dist/servertool/stop-message-compare-context.js +1 -1
  453. package/dist/servertool/types.d.ts +17 -0
  454. package/dist/sse/json-to-sse/event-generators/responses.d.ts +4 -0
  455. package/dist/sse/json-to-sse/event-generators/responses.js +95 -1
  456. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +6 -4
  457. package/dist/sse/sse-to-json/builders/response-builder.d.ts +8 -0
  458. package/dist/sse/sse-to-json/builders/response-builder.js +162 -4
  459. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +2 -0
  460. package/dist/sse/types/responses-types.d.ts +6 -2
  461. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  462. package/dist/tools/apply-patch/structured/coercion.js +5 -0
  463. package/dist/tools/args-json.js +29 -0
  464. package/dist/tools/exec-command/validator.d.ts +4 -1
  465. package/dist/tools/exec-command/validator.js +87 -3
  466. package/dist/tools/tool-registry.d.ts +7 -1
  467. package/dist/tools/tool-registry.js +3 -2
  468. package/package.json +121 -10
  469. package/dist/conversion/shared/args-mapping.js +0 -221
  470. package/dist/conversion/shared/bridge-actions.js +0 -881
  471. package/dist/conversion/shared/bridge-id-utils.js +0 -79
  472. package/dist/conversion/shared/bridge-metadata.js +0 -1
  473. package/dist/conversion/shared/bridge-policies.js +0 -195
  474. package/dist/conversion/shared/compaction-detect.js +0 -59
  475. package/dist/conversion/shared/errors.js +0 -31
  476. package/dist/conversion/shared/jsonish.js +0 -177
  477. package/dist/conversion/shared/mcp-injection.js +0 -173
  478. package/dist/conversion/shared/media.js +0 -9
  479. package/dist/conversion/shared/metadata-passthrough.js +0 -57
  480. package/dist/conversion/shared/payload-budget.js +0 -248
  481. package/dist/conversion/shared/protocol-field-allowlists.d.ts +0 -7
  482. package/dist/conversion/shared/protocol-field-allowlists.js +0 -149
  483. package/dist/conversion/shared/protocol-state.js +0 -23
  484. package/dist/conversion/shared/runtime-metadata.js +0 -23
  485. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -11
  486. package/dist/conversion/shared/snapshot-hooks.js +0 -503
  487. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.d.ts +0 -2
  488. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.js +0 -129
  489. package/dist/conversion/shared/text-markup-normalizer/extractors-json.d.ts +0 -4
  490. package/dist/conversion/shared/text-markup-normalizer/extractors-json.js +0 -637
  491. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.d.ts +0 -21
  492. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.js +0 -177
  493. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.d.ts +0 -5
  494. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.js +0 -385
  495. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.d.ts +0 -10
  496. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.js +0 -602
  497. package/dist/conversion/shared/text-markup-normalizer/extractors.d.ts +0 -5
  498. package/dist/conversion/shared/text-markup-normalizer/extractors.js +0 -4
  499. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  500. package/dist/conversion/shared/tool-canonicalizer.js +0 -42
  501. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  502. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  503. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  504. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  505. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  506. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  507. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  508. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  509. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  510. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  511. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  512. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  513. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  514. /package/dist/conversion/{shared/args-mapping.d.ts → args-mapping.d.ts} +0 -0
  515. /package/dist/conversion/{shared/bridge-actions.d.ts → bridge-actions.d.ts} +0 -0
  516. /package/dist/conversion/{shared/bridge-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
  517. /package/dist/conversion/{shared/bridge-instructions.d.ts → bridge-instructions.d.ts} +0 -0
  518. /package/dist/conversion/{shared/bridge-policies.d.ts → bridge-policies.d.ts} +0 -0
  519. /package/dist/conversion/{shared/jsonish.d.ts → jsonish.d.ts} +0 -0
  520. /package/dist/conversion/{shared/mcp-injection.d.ts → mcp-injection.d.ts} +0 -0
  521. /package/dist/conversion/{shared/media.d.ts → media.d.ts} +0 -0
  522. /package/dist/conversion/{shared/payload-budget.d.ts → payload-budget.d.ts} +0 -0
  523. /package/dist/conversion/{shared → types}/bridge-message-types.js +0 -0
  524. /package/dist/{servertool/handlers/stop-message-stage-policy/types.js → conversion/types/text-markup-normalizer.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { FilterEngine } from '../../filters/index.js';
2
2
  import { loadFieldMapConfig } from '../../filters/utils/fieldmap-loader.js';
3
- import { normalizeChatResponseReasoningTools } from './reasoning-tool-normalizer.js';
4
- import { createSnapshotWriter } from './snapshot-utils.js';
3
+ import { createSnapshotWriter } from '../snapshot-utils.js';
4
+ import { normalizeChatResponseReasoningToolsWithNative as normalizeChatResponseReasoningTools } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
5
5
  const REQUEST_FILTER_STAGES = [
6
6
  'request_pre',
7
7
  'request_map',
@@ -100,104 +100,11 @@ export async function runChatRequestToolFilters(chatRequest, options = {}) {
100
100
  recordStage('req_process_tool_filters_output', staged);
101
101
  return staged;
102
102
  }
103
- function applyLocalToolGovernance(chatRequest, rawPayload) {
103
+ function applyLocalToolGovernance(chatRequest, _rawPayload) {
104
104
  if (!chatRequest || typeof chatRequest !== 'object') {
105
105
  return chatRequest;
106
106
  }
107
- const messages = Array.isArray(chatRequest.messages) ? chatRequest.messages : undefined;
108
- const tools = Array.isArray(chatRequest.tools) ? chatRequest.tools : undefined;
109
- if (!tools || !tools.length) {
110
- return chatRequest;
111
- }
112
- const hasImageHint = detectImageHint(messages, rawPayload);
113
- if (hasImageHint) {
114
- // 有图片线索时不干预工具列表,保持由上游(Codex 等)决定 view_image 的暴露与使用。
115
- return chatRequest;
116
- }
117
- const filteredTools = tools.filter((tool) => {
118
- if (!tool || typeof tool !== 'object')
119
- return false;
120
- const fn = tool.function;
121
- if (!fn || typeof fn !== 'object')
122
- return true;
123
- const name = fn.name;
124
- if (typeof name !== 'string')
125
- return true;
126
- return name.trim() !== 'view_image';
127
- });
128
- if (filteredTools.length === tools.length) {
129
- return chatRequest;
130
- }
131
- return {
132
- ...chatRequest,
133
- tools: filteredTools
134
- };
135
- }
136
- function detectImageHint(messages, rawPayload) {
137
- const patterns = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg'];
138
- const hasImageExt = (value) => {
139
- if (typeof value !== 'string' || !value)
140
- return false;
141
- const lower = value.toLowerCase();
142
- return patterns.some(ext => lower.includes(ext));
143
- };
144
- const hasImageInMessage = (msg) => {
145
- if (!msg || typeof msg !== 'object')
146
- return false;
147
- const m = msg;
148
- const content = m.content;
149
- if (typeof content === 'string') {
150
- if (hasImageExt(content))
151
- return true;
152
- }
153
- else if (Array.isArray(content)) {
154
- for (const part of content) {
155
- if (!part || typeof part !== 'object')
156
- continue;
157
- const p = part;
158
- const t = String(p.type || '').toLowerCase();
159
- if (t.includes('image')) {
160
- return true;
161
- }
162
- if (hasImageExt(p.text))
163
- return true;
164
- const imageUrl = typeof p.image_url === 'string'
165
- ? p.image_url
166
- : p.image_url && typeof p.image_url.url === 'string'
167
- ? p.image_url.url
168
- : typeof p.url === 'string'
169
- ? p.url
170
- : undefined;
171
- if (hasImageExt(imageUrl))
172
- return true;
173
- if (hasImageExt(p.path))
174
- return true;
175
- }
176
- }
177
- return false;
178
- };
179
- // 仅考虑“当前这一轮”的用户输入是否包含图片链接或图片负载,避免因为历史上下文中曾经出现过图片而在后续轮次持续暴露 view_image。
180
- if (Array.isArray(messages)) {
181
- for (let i = messages.length - 1; i >= 0; i -= 1) {
182
- const msg = messages[i];
183
- if (!msg || typeof msg !== 'object')
184
- continue;
185
- const role = String(msg.role || '').toLowerCase();
186
- if (role !== 'user')
187
- continue;
188
- if (hasImageInMessage(msg)) {
189
- return true;
190
- }
191
- break;
192
- }
193
- }
194
- if (rawPayload && typeof rawPayload === 'object') {
195
- const text = rawPayload.content;
196
- if (hasImageExt(text)) {
197
- return true;
198
- }
199
- }
200
- return false;
107
+ return chatRequest;
201
108
  }
202
109
  export async function runChatResponseToolFilters(chatJson, options = {}) {
203
110
  const resCtxBase = {
@@ -220,9 +127,7 @@ export async function runChatResponseToolFilters(chatJson, options = {}) {
220
127
  recordStage('resp_process_tool_filters_input', chatJson);
221
128
  try {
222
129
  if (chatJson && typeof chatJson === 'object') {
223
- normalizeChatResponseReasoningTools(chatJson, {
224
- idPrefixBase: 'reasoning_choice'
225
- });
130
+ chatJson = normalizeChatResponseReasoningTools(chatJson, 'reasoning_choice');
226
131
  }
227
132
  }
228
133
  catch {
@@ -8,6 +8,12 @@ export interface ToolGovernanceOptions {
8
8
  baseDir?: string;
9
9
  };
10
10
  }
11
+ /**
12
+ * Process OpenAI Chat request (messages/tools) with unified 标准 governance.
13
+ * - Augment tools (strict schemas)
14
+ * - Inject/Refine system tool guidance (idempotent)
15
+ * - Canonicalize structured tool_calls; set content=null when applicable
16
+ */
11
17
  export declare function processChatRequestTools(request: Unknown, opts?: ToolGovernanceOptions): Unknown;
12
18
  export declare function normalizeApplyPatchToolCallsOnResponse(chat: Unknown): Unknown;
13
19
  export declare function normalizeApplyPatchToolCallsOnRequest(request: Unknown): Unknown;
@@ -6,9 +6,38 @@ import { augmentOpenAITools } from '../../guidance/index.js';
6
6
  import { validateToolCall } from '../../tools/tool-registry.js';
7
7
  import { captureApplyPatchRegression } from '../../tools/patch-regression-capturer.js';
8
8
  import { normalizeExecCommandArgs } from '../../tools/exec-command/normalize.js';
9
+ import { readRuntimeMetadata } from '../runtime-metadata.js';
10
+ import { normalizeChatResponseReasoningToolsWithNative } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
9
11
  function isObject(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
10
12
  // Note: tool schema strict augmentation removed per alignment
11
13
  function enforceChatBudget(chat, _modelId) { return chat; }
14
+ function resolveExecCommandGuardValidationOptions(payload) {
15
+ const carrier = isObject(payload.metadata)
16
+ ? payload.metadata
17
+ : payload;
18
+ const rt = readRuntimeMetadata(carrier);
19
+ if (!rt || typeof rt !== 'object') {
20
+ return undefined;
21
+ }
22
+ const guardRaw = rt.execCommandGuard;
23
+ if (!guardRaw || typeof guardRaw !== 'object' || Array.isArray(guardRaw)) {
24
+ return undefined;
25
+ }
26
+ const guard = guardRaw;
27
+ const enabled = guard.enabled === true;
28
+ if (!enabled) {
29
+ return undefined;
30
+ }
31
+ const policyFile = typeof guard.policyFile === 'string' && guard.policyFile.trim().length
32
+ ? guard.policyFile.trim()
33
+ : undefined;
34
+ return {
35
+ execCommandGuard: {
36
+ enabled: true,
37
+ ...(policyFile ? { policyFile } : {})
38
+ }
39
+ };
40
+ }
12
41
  function isTruthyEnv(value) {
13
42
  const v = typeof value === 'string' ? value.trim().toLowerCase() : '';
14
43
  return v === '1' || v === 'true' || v === 'yes' || v === 'on';
@@ -116,9 +145,11 @@ function buildExecCommandGuardScript(reason, message) {
116
145
  ? 'blocked by exec_command guard: git reset --hard is forbidden. Use git reset --mixed REF or git restore --source REF -- FILE.'
117
146
  : reason === 'forbidden_git_checkout_scope'
118
147
  ? 'blocked by exec_command guard: git checkout is allowed only for a single file. Use git checkout -- FILE or git checkout REF -- FILE.'
119
- : message && message.trim()
120
- ? `blocked by exec_command guard: ${message.trim()}`
121
- : fallback;
148
+ : reason === 'forbidden_exec_command_policy'
149
+ ? `policy 不允许: ${(message || '').trim() || 'command blocked by policy'}`
150
+ : message && message.trim()
151
+ ? `blocked by exec_command guard: ${message.trim()}`
152
+ : fallback;
122
153
  const compact = detail.replace(/\s+/g, ' ').trim() || fallback;
123
154
  return `bash -lc "printf '%s\\n' ${shellSingleQuote(compact)} >&2; exit 2"`;
124
155
  }
@@ -158,7 +189,7 @@ function buildBlockedExecCommandArgs(rawArgs, reason, message) {
158
189
  }
159
190
  }
160
191
  const EXEC_COMMAND_NAME_AS_COMMAND_PATTERN = /^(?:rg|wc|cat|ls|find|grep|git|sed|head|tail|awk|bash|sh|zsh|node|npm|pnpm|yarn|bd|echo|cp|mv|rm|mkdir|python|python3|perl|ruby)\b/i;
161
- function repairCommandNameAsExecToolCall(fn) {
192
+ function repairCommandNameAsExecToolCall(fn, validationOptions) {
162
193
  try {
163
194
  if (!fn)
164
195
  return false;
@@ -195,7 +226,7 @@ function repairCommandNameAsExecToolCall(fn) {
195
226
  if (typeof argsObj.cwd === 'string' && (!argsObj.workdir || typeof argsObj.workdir !== 'string')) {
196
227
  argsObj.workdir = String(argsObj.cwd);
197
228
  }
198
- const validation = validateToolCall('exec_command', JSON.stringify(argsObj));
229
+ const validation = validateToolCall('exec_command', JSON.stringify(argsObj), validationOptions);
199
230
  if (validation.ok && typeof validation.normalizedArgs === 'string') {
200
231
  fn.arguments = validation.normalizedArgs;
201
232
  }
@@ -247,114 +278,6 @@ function tryWriteSnapshot(options, stage, data) {
247
278
  * - Inject/Refine system tool guidance (idempotent)
248
279
  * - Canonicalize structured tool_calls; set content=null when applicable
249
280
  */
250
- const IMAGE_EXT_RE = /\.(png|jpe?g|gif|webp|bmp|svg)(?:[?#].*)?$/i;
251
- function hasImageReference(messages) {
252
- if (!Array.isArray(messages))
253
- return false;
254
- for (const entry of messages) {
255
- if (!entry || typeof entry !== 'object')
256
- continue;
257
- const content = entry.content;
258
- if (!content)
259
- continue;
260
- if (Array.isArray(content)) {
261
- if (content.some((part) => isImagePart(part)))
262
- return true;
263
- }
264
- else if (isObject(content)) {
265
- if (isImagePart(content))
266
- return true;
267
- }
268
- else if (typeof content === 'string') {
269
- if (stringHasImageLink(content))
270
- return true;
271
- }
272
- }
273
- return false;
274
- }
275
- function hasInputImage(entries) {
276
- if (!Array.isArray(entries))
277
- return false;
278
- for (const entry of entries) {
279
- if (!entry || typeof entry !== 'object')
280
- continue;
281
- const type = String(entry.type || '').toLowerCase();
282
- if (type.includes('image'))
283
- return true;
284
- const content = entry.content;
285
- if (!content)
286
- continue;
287
- if (Array.isArray(content)) {
288
- if (content.some((part) => isImagePart(part)))
289
- return true;
290
- }
291
- else if (isObject(content)) {
292
- if (isImagePart(content))
293
- return true;
294
- }
295
- }
296
- return false;
297
- }
298
- function attachmentsHaveImage(payload) {
299
- const attachments = payload?.attachments;
300
- if (!Array.isArray(attachments))
301
- return false;
302
- for (const attachment of attachments) {
303
- if (!attachment || typeof attachment !== 'object')
304
- continue;
305
- const mime = typeof attachment.mime === 'string' ? attachment.mime.toLowerCase() : '';
306
- if (mime.startsWith('image/'))
307
- return true;
308
- const name = typeof attachment.name === 'string' ? attachment.name : '';
309
- if (IMAGE_EXT_RE.test(name))
310
- return true;
311
- const url = typeof attachment.url === 'string' ? attachment.url : '';
312
- if (stringHasImageLink(url))
313
- return true;
314
- }
315
- return false;
316
- }
317
- function stringHasImageLink(value) {
318
- if (!value)
319
- return false;
320
- if (value.includes('cid:'))
321
- return true;
322
- if (IMAGE_EXT_RE.test(value))
323
- return true;
324
- const lowered = value.toLowerCase();
325
- return lowered.includes('image://');
326
- }
327
- function isImagePart(part) {
328
- if (!part || typeof part !== 'object')
329
- return false;
330
- const type = String(part.type || '').toLowerCase();
331
- if (type.includes('image'))
332
- return true;
333
- const imageUrl = part.image_url || part.imageUrl;
334
- if (typeof imageUrl === 'string')
335
- return true;
336
- if (isObject(imageUrl) && typeof imageUrl.url === 'string')
337
- return true;
338
- const url = part.url;
339
- if (typeof url === 'string' && stringHasImageLink(url))
340
- return true;
341
- return false;
342
- }
343
- function shouldExposeViewImage(payload) {
344
- if (hasImageReference(payload?.messages))
345
- return true;
346
- if (hasInputImage(payload?.input))
347
- return true;
348
- if (attachmentsHaveImage(payload))
349
- return true;
350
- return false;
351
- }
352
- function isViewImageTool(tool) {
353
- if (!tool || typeof tool !== 'object')
354
- return false;
355
- const name = String(tool.name || tool?.function?.name || '').toLowerCase();
356
- return name === 'view_image';
357
- }
358
281
  export function processChatRequestTools(request, opts) {
359
282
  const options = { ...(opts || {}) };
360
283
  if (!isObject(request))
@@ -365,13 +288,6 @@ export function processChatRequestTools(request, opts) {
365
288
  try {
366
289
  let tools = Array.isArray(out?.tools) ? out.tools : [];
367
290
  if (tools.length > 0) {
368
- if (!shouldExposeViewImage(out)) {
369
- const filtered = tools.filter((tool) => !isViewImageTool(tool));
370
- if (filtered.length !== tools.length) {
371
- tools = filtered;
372
- out.tools = tools;
373
- }
374
- }
375
291
  for (const t of tools) {
376
292
  if (!t || typeof t !== 'object')
377
293
  continue;
@@ -425,10 +341,11 @@ export function processChatRequestTools(request, opts) {
425
341
  * Process OpenAI Chat response (choices[0].message) with unified 标准 governance.
426
342
  * - Canonicalize structured tool_calls; ensure finish_reason and content=null policy
427
343
  */
428
- import { repairArgumentsToString, parseLenient } from './jsonish.js';
344
+ import { parseLenientJsonishWithNative as parseLenient, repairArgumentsToStringWithNative as repairArgumentsToString } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
429
345
  export function normalizeApplyPatchToolCallsOnResponse(chat) {
430
346
  try {
431
347
  const out = JSON.parse(JSON.stringify(chat));
348
+ const validationOptions = resolveExecCommandGuardValidationOptions(out);
432
349
  const choices = Array.isArray(out?.choices) ? out.choices : [];
433
350
  for (const ch of choices) {
434
351
  const msg = ch && ch.message ? ch.message : undefined;
@@ -438,7 +355,7 @@ export function normalizeApplyPatchToolCallsOnResponse(chat) {
438
355
  for (const tc of tcs) {
439
356
  try {
440
357
  const fn = tc && tc.function ? tc.function : undefined;
441
- repairCommandNameAsExecToolCall(fn);
358
+ repairCommandNameAsExecToolCall(fn, validationOptions);
442
359
  rewriteExecCommandApplyPatchCall(fn);
443
360
  const name = typeof fn?.name === 'string' ? String(fn.name).trim().toLowerCase() : '';
444
361
  if (name !== 'apply_patch')
@@ -488,6 +405,7 @@ export function normalizeApplyPatchToolCallsOnRequest(request) {
488
405
  function normalizeSpecialToolCallsOnRequest(request) {
489
406
  try {
490
407
  const out = JSON.parse(JSON.stringify(request));
408
+ const validationOptions = resolveExecCommandGuardValidationOptions(out);
491
409
  const messages = Array.isArray(out?.messages) ? out.messages : [];
492
410
  // 仅针对「当轮」工具调用做校验与形态修复:选择最后一条 assistant 消息
493
411
  let lastAssistantIndex = -1;
@@ -516,7 +434,7 @@ function normalizeSpecialToolCallsOnRequest(request) {
516
434
  for (const tc of tcs) {
517
435
  try {
518
436
  const fn = tc && tc.function ? tc.function : undefined;
519
- repairCommandNameAsExecToolCall(fn);
437
+ repairCommandNameAsExecToolCall(fn, validationOptions);
520
438
  if (rewriteExecCommandApplyPatchCall(fn)) {
521
439
  rewrittenNestedApplyPatchCount += 1;
522
440
  }
@@ -555,7 +473,7 @@ function normalizeSpecialToolCallsOnRequest(request) {
555
473
  // exec_command 兼容:TOON / map / string 一律收敛为 { cmd, command, workdir, ... }
556
474
  if (name === 'exec_command') {
557
475
  const argsStr = repairArgumentsToString(rawArgs);
558
- const validation = validateToolCall('exec_command', argsStr);
476
+ const validation = validateToolCall('exec_command', argsStr, validationOptions);
559
477
  if (validation && validation.ok && typeof validation.normalizedArgs === 'string') {
560
478
  fn.arguments = validation.normalizedArgs;
561
479
  }
@@ -603,6 +521,7 @@ function enhanceResponseToolArguments(chat) {
603
521
  if (!enable)
604
522
  return chat;
605
523
  const out = JSON.parse(JSON.stringify(chat));
524
+ const validationOptions = resolveExecCommandGuardValidationOptions(out);
606
525
  const choices = Array.isArray(out?.choices) ? out.choices : [];
607
526
  for (const ch of choices) {
608
527
  const msg = ch && ch.message ? ch.message : undefined;
@@ -686,7 +605,7 @@ function enhanceResponseToolArguments(chat) {
686
605
  }
687
606
  }
688
607
  else if (name === 'exec_command') {
689
- const validation = validateToolCall('exec_command', repaired);
608
+ const validation = validateToolCall('exec_command', repaired, validationOptions);
690
609
  if (validation.ok && typeof validation.normalizedArgs === 'string') {
691
610
  finalStr = validation.normalizedArgs;
692
611
  }
@@ -721,8 +640,7 @@ export function processChatResponseTools(resp) {
721
640
  if (!isObject(resp))
722
641
  return resp;
723
642
  try {
724
- const { canonicalizeChatResponseTools } = require('./tool-canonicalizer.js');
725
- const canon = canonicalizeChatResponseTools(resp);
643
+ const canon = normalizeChatResponseReasoningToolsWithNative(resp);
726
644
  const withPatch = normalizeApplyPatchToolCallsOnResponse(canon);
727
645
  return enhanceResponseToolArguments(withPatch);
728
646
  }
@@ -4,6 +4,7 @@
4
4
  // - Handles structural shapes (function_call legacy, tool_calls)
5
5
  // - Normalizes arguments (single JSON string), sets finish_reason when applicable
6
6
  import { isStructuredApplyPatchPayload } from '../../tools/apply-patch-structured.js';
7
+ import { repairArgumentsToStringWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
7
8
  function isObject(v) {
8
9
  return !!v && typeof v === 'object' && !Array.isArray(v);
9
10
  }
@@ -18,14 +19,7 @@ function hashString(s) {
18
19
  }
19
20
  }
20
21
  function toJsonString(v) {
21
- if (typeof v === 'string')
22
- return v;
23
- try {
24
- return JSON.stringify(v ?? {});
25
- }
26
- catch {
27
- return '{}';
28
- }
22
+ return repairArgumentsToStringWithNative(v);
29
23
  }
30
24
  function genId(ctx, i = 0) {
31
25
  const p = ctx?.idPrefix || 'call';
@@ -1,5 +1,5 @@
1
1
  import type { ChatToolDefinition } from '../hub/types/chat-envelope.js';
2
- import type { BridgeToolDefinition } from './bridge-message-types.js';
2
+ import type { BridgeToolDefinition } from '../types/bridge-message-types.js';
3
3
  export interface ToolCallFunction {
4
4
  name: string;
5
5
  arguments: string;
@@ -1,3 +1,4 @@
1
+ import { sanitizeResponsesFunctionNameWithNative } from '../../router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js';
1
2
  export function stringifyArgs(args) {
2
3
  if (typeof args === 'string')
3
4
  return args;
@@ -73,11 +74,7 @@ function enforceBuiltinToolSchema(name, candidate) {
73
74
  return asSchema(candidate);
74
75
  }
75
76
  const DEFAULT_SANITIZER = (value) => {
76
- if (typeof value === 'string') {
77
- const trimmed = value.trim();
78
- return trimmed.length ? trimmed : undefined;
79
- }
80
- return undefined;
77
+ return sanitizeResponsesFunctionNameWithNative(value);
81
78
  };
82
79
  function resolveToolName(candidate, options) {
83
80
  const sanitized = options?.sanitizeName?.(candidate);
@@ -1,7 +1,3 @@
1
- /**
2
- * Shared helpers for standard tool normalization (shell packing rules).
3
- * The goal is deterministic, minimal shaping so executors succeed consistently.
4
- */
5
1
  export interface ShellArgs {
6
2
  command: string | string[];
7
3
  workdir?: string;
@@ -2,6 +2,7 @@
2
2
  * Shared helpers for standard tool normalization (shell packing rules).
3
3
  * The goal is deterministic, minimal shaping so executors succeed consistently.
4
4
  */
5
+ import { parseLenientJsonishWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
5
6
  // We intentionally do NOT evaluate shell control operators (&&, |, etc.).
6
7
  // Codex CLI executor runs argv directly (execvp-like), not through a shell.
7
8
  // So we avoid wrapping with "bash -lc" and leave such tokens as-is.
@@ -45,6 +46,23 @@ export function splitCommandString(input) {
45
46
  const s = input.trim();
46
47
  if (!s)
47
48
  return [];
49
+ try {
50
+ if (s.startsWith('{') || s.startsWith('[')) {
51
+ const parsed = parseLenientJsonishWithNative(s);
52
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
53
+ const command = parsed.command;
54
+ if (Array.isArray(command)) {
55
+ const tokens = command.map((entry) => String(entry ?? '')).map((entry) => entry.trim()).filter(Boolean);
56
+ if (tokens.length) {
57
+ return tokens;
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ // Keep legacy parser path when native parse returns non-command payload.
65
+ }
48
66
  const out = [];
49
67
  let cur = '';
50
68
  let inSingle = false;
@@ -1,3 +1,13 @@
1
+ export interface SnapshotHookOptions {
2
+ endpoint: string;
3
+ stage: string;
4
+ requestId: string;
5
+ data: unknown;
6
+ verbosity?: 'minimal' | 'verbose';
7
+ channel?: string;
8
+ providerKey?: string;
9
+ groupRequestId?: string;
10
+ }
1
11
  interface SnapshotPayload {
2
12
  stage: string;
3
13
  requestId: string;
@@ -8,6 +18,7 @@ interface SnapshotPayload {
8
18
  groupRequestId?: string;
9
19
  }
10
20
  export declare function shouldRecordSnapshots(): boolean;
21
+ export declare function writeSnapshotViaHooks(options: SnapshotHookOptions): Promise<void>;
11
22
  export declare function recordSnapshot(options: SnapshotPayload): Promise<void>;
12
23
  export type SnapshotWriter = (stage: string, payload: unknown) => void;
13
24
  export declare function createSnapshotWriter(opts: {
@@ -1,27 +1,18 @@
1
- import { writeSnapshotViaHooks } from './snapshot-hooks.js';
2
- function resolveBoolFromEnv(value, fallback) {
3
- if (!value) {
4
- return fallback;
5
- }
6
- const normalized = value.trim().toLowerCase();
7
- if (['1', 'true', 'yes', 'on'].includes(normalized)) {
8
- return true;
9
- }
10
- if (['0', 'false', 'no', 'off'].includes(normalized)) {
11
- return false;
12
- }
13
- return fallback;
14
- }
1
+ import { shouldRecordSnapshotsWithNative, writeSnapshotViaHooksWithNative } from '../router/virtual-router/engine-selection/native-snapshot-hooks.js';
15
2
  export function shouldRecordSnapshots() {
16
- const hubFlag = process.env.ROUTECODEX_HUB_SNAPSHOTS;
17
- if (hubFlag && hubFlag.trim().length) {
18
- return resolveBoolFromEnv(hubFlag, true);
19
- }
20
- const sharedFlag = process.env.ROUTECODEX_SNAPSHOT ?? process.env.ROUTECODEX_SNAPSHOTS;
21
- if (sharedFlag && sharedFlag.trim().length) {
22
- return resolveBoolFromEnv(sharedFlag, true);
23
- }
24
- return true;
3
+ return shouldRecordSnapshotsWithNative();
4
+ }
5
+ export async function writeSnapshotViaHooks(options) {
6
+ writeSnapshotViaHooksWithNative({
7
+ endpoint: options.endpoint,
8
+ stage: options.stage,
9
+ requestId: options.requestId,
10
+ data: options.data,
11
+ verbosity: options.verbosity,
12
+ channel: options.channel,
13
+ providerKey: options.providerKey,
14
+ groupRequestId: options.groupRequestId
15
+ });
25
16
  }
26
17
  export async function recordSnapshot(options) {
27
18
  if (!shouldRecordSnapshots())
@@ -1,3 +1,4 @@
1
+ import type { NativeReqInboundSemanticLiftApplyInput } from '../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
1
2
  export type BridgeContentPart = {
2
3
  type: string;
3
4
  text?: string;
@@ -37,3 +38,4 @@ export type BridgeToolDefinition = {
37
38
  parameters?: unknown;
38
39
  };
39
40
  };
41
+ export type BridgeNativeEnvelope = NativeReqInboundSemanticLiftApplyInput['chatEnvelope'];
@@ -0,0 +1,13 @@
1
+ export type JsonToolArgumentAliasMap = Record<string, string[]>;
2
+ export type JsonToolRepairConfig = {
3
+ toolNameAliases?: Record<string, string>;
4
+ argumentAliases?: Record<string, JsonToolArgumentAliasMap>;
5
+ };
6
+ export type TextMarkupNormalizeOptions = {
7
+ jsonToolRepair?: JsonToolRepairConfig;
8
+ };
9
+ export type ToolCallLite = {
10
+ id?: string;
11
+ name: string;
12
+ args: string;
13
+ };
@@ -26,7 +26,7 @@ export class RequestOpenAIToolsNormalizeFilter {
26
26
  }
27
27
  let normalizedList = [];
28
28
  try {
29
- const mod = await import('../../conversion/shared/args-mapping.js');
29
+ const mod = await import('../../conversion/args-mapping.js');
30
30
  const normalizeTools = mod?.normalizeTools;
31
31
  if (typeof normalizeTools === 'function')
32
32
  normalizedList = normalizeTools(tools);
@@ -1,4 +1,4 @@
1
- import { canonicalizeChatResponseTools } from '../../conversion/shared/tool-canonicalizer.js';
1
+ import { normalizeChatResponseReasoningToolsWithNative } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
2
2
  /**
3
3
  * Canonicalize structured tool_calls (Chat path).
4
4
  *
@@ -10,7 +10,7 @@ export class ResponseToolTextCanonicalizeFilter {
10
10
  name = 'response_tool_text_canonicalize';
11
11
  stage = 'response_pre';
12
12
  apply(input) {
13
- const out = canonicalizeChatResponseTools(input);
13
+ const out = normalizeChatResponseReasoningToolsWithNative(input);
14
14
  return { ok: true, data: out };
15
15
  }
16
16
  }