@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,535 +1,20 @@
1
- import { jsonClone } from '../hub/types/json.js';
2
- function isPlainRecord(value) {
3
- return !!value && typeof value === 'object' && !Array.isArray(value);
4
- }
5
- function normalizeSchemaMapEntries(value) {
6
- if (!Array.isArray(value)) {
7
- return undefined;
8
- }
9
- const out = {};
10
- for (const entry of value) {
11
- if (!isPlainRecord(entry)) {
12
- return undefined;
13
- }
14
- const key = typeof entry.key === 'string' ? entry.key.trim() : '';
15
- if (!key) {
16
- return undefined;
17
- }
18
- if (!Object.prototype.hasOwnProperty.call(entry, 'value')) {
19
- return undefined;
20
- }
21
- out[key] = entry.value;
22
- }
23
- return out;
24
- }
25
- function pickBestSchemaVariant(variants) {
26
- if (!Array.isArray(variants) || variants.length === 0) {
27
- return { type: 'object', properties: {} };
28
- }
29
- const score = (value) => {
30
- if (!isPlainRecord(value)) {
31
- return 0;
32
- }
33
- const type = typeof value.type === 'string' ? value.type.trim().toLowerCase() : '';
34
- // Prefer 'string' to maximize compatibility (can carry arbitrary serialized content),
35
- // then object/array, then primitives.
36
- if (type === 'string')
37
- return 100;
38
- if (type === 'object')
39
- return 80;
40
- if (type === 'array')
41
- return 60;
42
- if (type === 'integer' || type === 'number' || type === 'boolean')
43
- return 50;
44
- return 10;
45
- };
46
- let best = variants[0];
47
- let bestScore = score(best);
48
- for (const candidate of variants.slice(1)) {
49
- const candidateScore = score(candidate);
50
- if (candidateScore > bestScore) {
51
- best = candidate;
52
- bestScore = candidateScore;
53
- }
54
- }
55
- return best;
56
- }
57
- function normalizeSchemaTypes(value) {
58
- if (!value || typeof value !== 'object') {
59
- return value;
60
- }
61
- if (Array.isArray(value)) {
62
- return value.map((entry) => normalizeSchemaTypes(entry));
63
- }
64
- const record = value;
65
- const out = {};
66
- for (const [key, val] of Object.entries(record)) {
67
- if (key === 'type' && typeof val === 'string') {
68
- // Antigravity-Manager alignment: keep JSON-Schema-like lowercase types.
69
- out[key] = val.trim().toLowerCase();
70
- continue;
71
- }
72
- if (key === 'type' && Array.isArray(val)) {
73
- // Antigravity-Manager alignment: Gemini protobuf Schema.type is not repeating.
74
- // JSON Schema may use union types like ["string","null"], which triggers:
75
- // "Proto field is not repeating, cannot start list."
76
- const candidates = val
77
- .filter((entry) => typeof entry === 'string')
78
- .map((entry) => String(entry).trim().toLowerCase())
79
- .filter((entry) => entry && entry !== 'null');
80
- const preferred = candidates.includes('string')
81
- ? 'string'
82
- : candidates.includes('object')
83
- ? 'object'
84
- : candidates.includes('array')
85
- ? 'array'
86
- : candidates.includes('integer')
87
- ? 'integer'
88
- : candidates.includes('number')
89
- ? 'number'
90
- : candidates.includes('boolean')
91
- ? 'boolean'
92
- : candidates[0];
93
- if (preferred) {
94
- out[key] = preferred;
95
- }
96
- continue;
97
- }
98
- if (key === 'properties') {
99
- const normalizedMap = normalizeSchemaMapEntries(val);
100
- if (normalizedMap) {
101
- out[key] = normalizeSchemaTypes(normalizedMap);
102
- continue;
103
- }
104
- if (val && typeof val === 'object') {
105
- out[key] = normalizeSchemaTypes(val);
106
- continue;
107
- }
108
- }
109
- if (key === 'enum' && Array.isArray(val)) {
110
- // Antigravity-Manager alignment: Gemini rejects non-string enum values in tool schemas.
111
- out[key] = val.map((entry) => {
112
- if (typeof entry === 'string')
113
- return entry;
114
- if (entry === null)
115
- return 'null';
116
- if (typeof entry === 'number' || typeof entry === 'boolean')
117
- return String(entry);
118
- try {
119
- return JSON.stringify(entry);
120
- }
121
- catch {
122
- return String(entry);
123
- }
124
- });
125
- continue;
126
- }
127
- if ((key === 'properties' || key === 'items') && val && typeof val === 'object') {
128
- out[key] = normalizeSchemaTypes(val);
129
- continue;
130
- }
131
- if ((key === 'anyOf' || key === 'oneOf' || key === 'allOf') && Array.isArray(val)) {
132
- out[key] = val.map((entry) => normalizeSchemaTypes(entry));
133
- continue;
134
- }
135
- out[key] = normalizeSchemaTypes(val);
136
- }
137
- return out;
138
- }
139
- function cloneParameters(value) {
140
- if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
141
- return value;
142
- }
143
- if (Array.isArray(value)) {
144
- return value.map((entry) => cloneParameters(entry));
145
- }
146
- if (isPlainRecord(value)) {
147
- // Normalize JSON Schema const → enum to improve compatibility with functionDeclarations.parameters.
148
- // Some upstreams reject `const` but accept `enum`.
149
- if (Object.prototype.hasOwnProperty.call(value, 'const') && !Object.prototype.hasOwnProperty.call(value, 'enum')) {
150
- const cloned = {};
151
- for (const [key, entry] of Object.entries(value)) {
152
- if (key === 'const') {
153
- cloned.enum = [cloneParameters(entry)];
154
- continue;
155
- }
156
- cloned[key] = cloneParameters(entry);
157
- }
158
- return cloned;
159
- }
160
- // Gemini function_declarations.parameters only support a subset of JSON Schema.
161
- // Additionally, recent Antigravity/Gemini backends may produce MALFORMED_FUNCTION_CALL
162
- // when schemas include combinators (oneOf/anyOf/allOf). Prefer a safe single-variant schema.
163
- const combinator = Array.isArray(value.oneOf)
164
- ? 'oneOf'
165
- : Array.isArray(value.anyOf)
166
- ? 'anyOf'
167
- : Array.isArray(value.allOf)
168
- ? 'allOf'
169
- : undefined;
170
- if (combinator) {
171
- const variants = value[combinator];
172
- const chosen = pickBestSchemaVariant(Array.isArray(variants) ? variants : []);
173
- const simplified = cloneParameters(chosen);
174
- // Preserve description if present on the wrapper node.
175
- if (isPlainRecord(simplified) &&
176
- typeof value.description === 'string' &&
177
- typeof simplified.description !== 'string') {
178
- simplified.description = String(value.description);
179
- }
180
- return simplified;
181
- }
182
- const cloned = {};
183
- for (const [key, entry] of Object.entries(value)) {
184
- // Antigravity-Manager alignment: some tool pipelines serialize schema maps as [{ key, value }, ...].
185
- // Gemini expects `properties` to be an object/map, not a list.
186
- if (key === 'properties') {
187
- const normalizedMap = normalizeSchemaMapEntries(entry);
188
- if (normalizedMap) {
189
- cloned.properties = cloneParameters(normalizedMap);
190
- continue;
191
- }
192
- }
193
- // Antigravity-Manager alignment: Gemini protobuf Schema.type is not repeating.
194
- // Drop union array types like ["string","null"] to a single stable type.
195
- if (key === 'type' && Array.isArray(entry)) {
196
- const candidates = entry
197
- .filter((v) => typeof v === 'string')
198
- .map((v) => String(v).trim().toLowerCase())
199
- .filter((v) => v && v !== 'null');
200
- if (candidates.length) {
201
- // Prefer STRING to maximize compatibility.
202
- cloned.type = candidates.includes('string')
203
- ? 'string'
204
- : candidates.includes('object')
205
- ? 'object'
206
- : candidates.includes('array')
207
- ? 'array'
208
- : candidates.includes('integer')
209
- ? 'integer'
210
- : candidates.includes('number')
211
- ? 'number'
212
- : candidates.includes('boolean')
213
- ? 'boolean'
214
- : candidates[0];
215
- }
216
- continue;
217
- }
218
- // Gemini function_declarations.parameters only support a subset of JSON Schema.
219
- // Drop meta/unsupported fields that cause INVALID_ARGUMENT, such as $schema/exclusiveMinimum/propertyNames.
220
- if (typeof key === 'string') {
221
- if (key.startsWith('$'))
222
- continue;
223
- if (key === 'const')
224
- continue;
225
- if (key === 'default' || key === 'examples' || key === 'example' || key === 'title')
226
- continue;
227
- if (key === 'deprecated' || key === 'readOnly' || key === 'writeOnly')
228
- continue;
229
- if (key === 'patternProperties' || key === 'dependentRequired' || key === 'dependentSchemas')
230
- continue;
231
- if (key === 'unevaluatedProperties' || key === 'unevaluatedItems')
232
- continue;
233
- if (key === 'contains' || key === 'minContains' || key === 'maxContains')
234
- continue;
235
- if (key === 'contentEncoding' || key === 'contentMediaType' || key === 'contentSchema')
236
- continue;
237
- if (key === 'if' || key === 'then' || key === 'else' || key === 'not')
238
- continue;
239
- if (key === 'exclusiveMinimum' || key === 'exclusiveMaximum' || key === 'propertyNames')
240
- continue;
241
- // Keep Gemini tool schemas mostly permissive to avoid upstream MALFORMED_FUNCTION_CALL on strict validation.
242
- // Preserve `required` for Gemini validation (align with gcli2api), but still drop additionalProperties.
243
- if (key === 'additionalProperties')
244
- continue;
245
- if (key === 'external_web_access')
246
- continue;
247
- // Combinators are handled at the node level above.
248
- if (key === 'oneOf' || key === 'anyOf' || key === 'allOf')
249
- continue;
250
- }
251
- cloned[key] = cloneParameters(entry);
252
- }
253
- // Antigravity-Manager alignment: required must only reference keys present in properties.
254
- const propNode = cloned.properties;
255
- const reqNode = cloned.required;
256
- if (isPlainRecord(propNode) && Array.isArray(reqNode)) {
257
- const valid = new Set(Object.keys(propNode));
258
- const filtered = reqNode.filter((v) => typeof v === 'string' && valid.has(v));
259
- if (filtered.length) {
260
- cloned.required = filtered;
261
- }
262
- else {
263
- delete cloned.required;
264
- }
265
- }
266
- return cloned;
267
- }
268
- return { type: 'object', properties: {} };
269
- }
270
- function declarationToBridge(declaration) {
271
- if (!declaration || typeof declaration !== 'object') {
272
- return null;
273
- }
274
- const def = declaration;
275
- const name = typeof def.name === 'string' ? def.name : undefined;
276
- if (!name) {
277
- return null;
278
- }
279
- const description = typeof def.description === 'string' ? def.description : undefined;
280
- const parameters = cloneParameters(def.parameters ?? { type: 'object', properties: {} });
281
- return {
282
- type: 'function',
283
- function: {
284
- name,
285
- description,
286
- parameters
287
- }
288
- };
289
- }
290
- function legacyToolToBridge(entry) {
291
- const name = typeof entry.name === 'string' ? entry.name : undefined;
292
- if (!name) {
293
- return null;
294
- }
295
- const description = typeof entry.description === 'string' ? entry.description : undefined;
296
- const parameters = cloneParameters(entry.parameters ?? { type: 'object', properties: {} });
297
- return {
298
- type: 'function',
299
- function: {
300
- name,
301
- description,
302
- parameters
303
- }
304
- };
305
- }
1
+ import { buildGeminiToolsFromBridgeWithNative, prepareGeminiToolsForBridgeWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
306
2
  export function prepareGeminiToolsForBridge(rawTools, missing) {
307
3
  if (!rawTools) {
308
4
  return undefined;
309
5
  }
310
- const arr = Array.isArray(rawTools) ? rawTools : [rawTools];
311
- const defs = [];
312
- arr.forEach((entry, index) => {
313
- if (!entry || typeof entry !== 'object') {
314
- missing?.push({
315
- path: `tools[${index}]`,
316
- reason: 'invalid_entry',
317
- originalValue: jsonClone(entry)
318
- });
319
- return;
320
- }
321
- const obj = entry;
322
- const declarations = Array.isArray(obj.functionDeclarations) ? obj.functionDeclarations : undefined;
323
- if (declarations && declarations.length) {
324
- declarations.forEach((decl, declIndex) => {
325
- const converted = declarationToBridge(decl);
326
- if (converted) {
327
- defs.push(converted);
328
- }
329
- else {
330
- missing?.push({ path: `tools[${index}].functionDeclarations[${declIndex}]`, reason: 'invalid_entry' });
331
- }
332
- });
333
- return;
334
- }
335
- const converted = legacyToolToBridge(obj);
336
- if (converted) {
337
- defs.push(converted);
338
- return;
339
- }
340
- missing?.push({ path: `tools[${index}]`, reason: 'invalid_entry' });
341
- });
342
- return defs.length ? defs : undefined;
6
+ const result = prepareGeminiToolsForBridgeWithNative(rawTools, Array.isArray(missing) ? missing : []);
7
+ if (Array.isArray(missing)) {
8
+ missing.splice(0, missing.length, ...result.missing);
9
+ }
10
+ const defs = result.defs;
11
+ return defs && defs.length ? defs : undefined;
343
12
  }
344
13
  export function buildGeminiToolsFromBridge(defs, options) {
345
14
  if (!defs || !defs.length) {
346
15
  return undefined;
347
16
  }
348
17
  const mode = options?.mode === 'antigravity' ? 'antigravity' : 'default';
349
- // Cloud Code Assist / Gemini CLI is sensitive to tool array shape.
350
- // Keep all function declarations in a single tool group to match gcli2api snapshots
351
- // and avoid backend-specific limits on the number of tool groups.
352
- const functionDeclarations = [];
353
- const normalizeToolName = (name) => mode === 'antigravity' ? String(name || '').replace(/-/g, '_') : String(name || '');
354
- const applyFixups = (name, parameters) => {
355
- if (!parameters || typeof parameters !== 'object' || Array.isArray(parameters)) {
356
- return parameters;
357
- }
358
- const params = parameters;
359
- const propsRaw = params.properties;
360
- const props = isPlainRecord(propsRaw) ? propsRaw : {};
361
- const isAntigravity = mode === 'antigravity';
362
- const lowered = String(name || '').trim().toLowerCase();
363
- if (lowered === 'exec_command') {
364
- // Keep Gemini tool schema aligned with both historical Codex and our runtime tool signature:
365
- // - Codex CLI: { cmd, workdir }
366
- // - Some history: { command, workdir }
367
- // Strict Gemini validation (and/or tool selection) is sensitive to schema/arg drift.
368
- // NOTE: Some upstream tool schemas encode cmd/command as `oneOf` (string|array),
369
- // which Antigravity/Gemini can reject with MALFORMED_FUNCTION_CALL even when tool calling
370
- // is disabled (toolConfig.mode=NONE). Force these fields to simple STRING.
371
- // For Gemini wire, prefer `command` as the canonical key (gcli2api-style).
372
- // The internal tool governor normalizes `command` → `cmd` before execution.
373
- if (isAntigravity) {
374
- try {
375
- if (Object.prototype.hasOwnProperty.call(props, 'cmd')) {
376
- delete props.cmd;
377
- }
378
- }
379
- catch {
380
- // ignore
381
- }
382
- props.command = {
383
- type: 'string',
384
- description: 'Shell command to execute.'
385
- };
386
- // Keep workdir simple (avoid anyOf string|null patterns).
387
- props.workdir = { type: 'string', description: 'Working directory.' };
388
- }
389
- else {
390
- if (!Object.prototype.hasOwnProperty.call(props, 'cmd') && Object.prototype.hasOwnProperty.call(props, 'command')) {
391
- props.cmd = props.command;
392
- }
393
- if (!Object.prototype.hasOwnProperty.call(props, 'command') && Object.prototype.hasOwnProperty.call(props, 'cmd')) {
394
- props.command = props.cmd;
395
- }
396
- if (!Object.prototype.hasOwnProperty.call(props, 'cmd')) {
397
- props.cmd = { type: 'string' };
398
- }
399
- if (!Object.prototype.hasOwnProperty.call(props, 'command')) {
400
- props.command = { type: 'string' };
401
- }
402
- if (!Object.prototype.hasOwnProperty.call(props, 'workdir')) {
403
- props.workdir = { type: 'string' };
404
- }
405
- }
406
- params.properties = props;
407
- // Avoid hard required keys for Gemini: the model may emit either alias (cmd/command),
408
- // and "required" mismatch surfaces as MALFORMED_FUNCTION_CALL (empty reply) upstream.
409
- try {
410
- delete params.required;
411
- }
412
- catch {
413
- params.required = undefined;
414
- }
415
- return params;
416
- }
417
- if (lowered === 'write_stdin') {
418
- // Keep both aliases to avoid strict validation failures when the model echoes history.
419
- if (!Object.prototype.hasOwnProperty.call(props, 'chars') && Object.prototype.hasOwnProperty.call(props, 'text')) {
420
- props.chars = props.text;
421
- }
422
- if (!Object.prototype.hasOwnProperty.call(props, 'text') && Object.prototype.hasOwnProperty.call(props, 'chars')) {
423
- props.text = props.chars;
424
- }
425
- if (!Object.prototype.hasOwnProperty.call(props, 'session_id')) {
426
- props.session_id = { type: 'number' };
427
- }
428
- if (!Object.prototype.hasOwnProperty.call(props, 'chars')) {
429
- props.chars = { type: 'string' };
430
- }
431
- params.properties = props;
432
- try {
433
- delete params.required;
434
- }
435
- catch {
436
- params.required = undefined;
437
- }
438
- return params;
439
- }
440
- if (lowered === 'apply_patch') {
441
- // Gemini function calling needs JSON args, but Codex tool docs often describe apply_patch as "freeform".
442
- // To prevent MALFORMED_FUNCTION_CALL, accept common aliases used by various bridge layers:
443
- // - patch: canonical patch text
444
- // - input/instructions/text: historical aliases containing patch text
445
- if (!Object.prototype.hasOwnProperty.call(props, 'patch')) {
446
- props.patch = {
447
- type: 'string',
448
- description: 'Patch text (*** Begin Patch / *** End Patch or GNU unified diff).'
449
- };
450
- }
451
- if (!Object.prototype.hasOwnProperty.call(props, 'input')) {
452
- props.input = {
453
- type: 'string',
454
- description: 'Alias of patch (patch text). Prefer patch.'
455
- };
456
- }
457
- if (!Object.prototype.hasOwnProperty.call(props, 'instructions')) {
458
- props.instructions = {
459
- type: 'string',
460
- description: 'Alias of patch (patch text). Prefer patch.'
461
- };
462
- }
463
- if (!Object.prototype.hasOwnProperty.call(props, 'text')) {
464
- props.text = {
465
- type: 'string',
466
- description: 'Alias of patch (patch text). Prefer patch.'
467
- };
468
- }
469
- params.properties = props;
470
- try {
471
- delete params.required;
472
- }
473
- catch {
474
- params.required = undefined;
475
- }
476
- return params;
477
- }
478
- return params;
479
- };
480
- const rewriteDescription = (name, description) => {
481
- if (mode !== 'antigravity') {
482
- return description;
483
- }
484
- const lowered = String(name || '').trim().toLowerCase();
485
- if (lowered === 'apply_patch') {
486
- return ('Edit files by providing patch text in `patch` (string). ' +
487
- 'Supports "*** Begin Patch" / "*** End Patch" or GNU unified diff. ' +
488
- '`input`/`instructions`/`text` are accepted as aliases.');
489
- }
490
- if (lowered === 'exec_command') {
491
- return ('Run a shell command. Provide `cmd` (string) (alias: `command`) and optional `workdir` (string).');
492
- }
493
- if (lowered === 'write_stdin') {
494
- return 'Write to an existing exec session. Provide `session_id` (number) and optional `chars` (string).';
495
- }
496
- return description;
497
- };
498
- defs.forEach((def) => {
499
- if (!def || typeof def !== 'object') {
500
- return;
501
- }
502
- const fnNode = def.function && typeof def.function === 'object' ? def.function : undefined;
503
- const name = typeof fnNode?.name === 'string'
504
- ? fnNode.name
505
- : typeof def.name === 'string'
506
- ? def.name
507
- : undefined;
508
- if (!name) {
509
- return;
510
- }
511
- const finalName = normalizeToolName(name);
512
- const description = typeof fnNode?.description === 'string'
513
- ? fnNode.description
514
- : typeof def.description === 'string'
515
- ? def.description
516
- : undefined;
517
- const parameters = applyFixups(finalName, cloneParameters(fnNode?.parameters ?? def.parameters ?? { type: 'object', properties: {} }));
518
- const normalizedParameters = mode === 'antigravity'
519
- ? normalizeSchemaTypes(parameters)
520
- : parameters;
521
- functionDeclarations.push({
522
- name: finalName,
523
- description: rewriteDescription(finalName, description),
524
- parameters: normalizedParameters
525
- });
526
- });
527
- if (!functionDeclarations.length) {
528
- return undefined;
529
- }
530
- return [
531
- {
532
- functionDeclarations
533
- }
534
- ];
18
+ const out = buildGeminiToolsFromBridgeWithNative(defs, mode);
19
+ return out && out.length ? out : undefined;
535
20
  }
@@ -1,6 +1,7 @@
1
1
  // OpenAI Chat finalizer: enforce canonical shapes without the legacy hook system.
2
2
  // - Ensures tool_calls use stringified JSON arguments and sets finish_reason='tool_calls' when applicable
3
3
  // - Normalizes potential tool messages (role:'tool') content to strict strings (JSON-stringify for objects)
4
+ import { sanitizeReasoningTaggedTextWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
4
5
  function asObject(v) {
5
6
  return v && typeof v === 'object' && !Array.isArray(v) ? v : null;
6
7
  }
@@ -135,7 +136,7 @@ function applyChatReasoningPolicy(target, mode) {
135
136
  function normalizeReasoningField(container, mode) {
136
137
  const bag = container;
137
138
  const rawValue = typeof bag.reasoning_content === 'string' ? bag.reasoning_content : '';
138
- const trimmed = rawValue.trim();
139
+ const trimmed = sanitizeReasoningTaggedTextWithNative(rawValue).trim();
139
140
  if (!trimmed && Object.prototype.hasOwnProperty.call(bag, 'reasoning_content')) {
140
141
  delete bag.reasoning_content;
141
142
  return;
@@ -150,6 +151,7 @@ function normalizeReasoningField(container, mode) {
150
151
  if (mode === 'append_to_content') {
151
152
  appendReasoningToContent(bag, trimmed);
152
153
  delete bag.reasoning_content;
154
+ return;
153
155
  }
154
156
  }
155
157
  function appendReasoningToContent(container, reasoning) {