@jsonstudio/llms 0.6.2172 → 0.6.2979

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 (362) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/compat/antigravity-session-signature.js +35 -1
  3. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  4. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  5. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  6. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  7. package/dist/conversion/hub/core/index.d.ts +1 -0
  8. package/dist/conversion/hub/core/stage-driver.js +2 -0
  9. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  10. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  11. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  12. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  13. package/dist/conversion/hub/hub-feature.js +3 -2
  14. package/dist/conversion/hub/node-support.js +9 -4
  15. package/dist/conversion/hub/operation-table/operation-table-runner.js +10 -6
  16. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +2 -2
  17. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +10 -10
  18. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +4 -8
  19. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +19 -65
  20. package/dist/conversion/hub/ops/operations.js +2 -121
  21. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  22. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  23. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  24. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  25. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  26. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  27. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  28. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  29. package/dist/conversion/hub/pipeline/hub-pipeline.js +115 -262
  30. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  31. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  32. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  33. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +12 -86
  34. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  35. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  36. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  37. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  38. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  39. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  40. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  41. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  42. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  43. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  44. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  45. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  46. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  47. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  48. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  49. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  50. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  51. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  52. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  53. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  54. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  55. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  56. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  57. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +18 -3
  58. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +10 -198
  59. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  60. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  61. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  62. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  63. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  64. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  65. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  66. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  67. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  68. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  69. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  70. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  71. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +12 -10
  72. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +6 -5
  73. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  74. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  75. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  76. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  77. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  78. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  79. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  80. package/dist/conversion/hub/policy/protocol-spec.js +20 -148
  81. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  82. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  83. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  84. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  85. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  86. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  87. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  88. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  89. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  90. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  91. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  92. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  93. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  94. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  95. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  96. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  97. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  98. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  99. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  100. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  101. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  102. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  103. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  104. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  105. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  106. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  107. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  108. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  109. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  110. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  111. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  112. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  113. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  114. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  115. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  116. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  117. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  118. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  119. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  120. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  121. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  122. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  123. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  124. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  125. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  126. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  127. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  128. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  129. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  130. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  131. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  132. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  133. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  134. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  135. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  136. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  137. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  138. package/dist/conversion/hub/process/chat-process.js +12 -1701
  139. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  140. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  141. package/dist/conversion/hub/registry.js +5 -2
  142. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  143. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  144. package/dist/conversion/hub/response/provider-response.js +6 -21
  145. package/dist/conversion/hub/response/response-mappers.js +2 -26
  146. package/dist/conversion/hub/response/response-runtime.js +2 -93
  147. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  148. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  149. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  150. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  151. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  152. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  153. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  154. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  155. package/dist/conversion/hub/snapshot-recorder.js +10 -3
  156. package/dist/conversion/hub/standardized-bridge.js +11 -288
  157. package/dist/conversion/hub/tool-governance/engine.js +5 -0
  158. package/dist/conversion/hub/tool-governance/rules.js +10 -10
  159. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  160. package/dist/conversion/hub/tool-session-compat.js +17 -231
  161. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +5 -3
  162. package/dist/conversion/responses/responses-host-policy.js +2 -12
  163. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +6 -82
  164. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +1 -0
  165. package/dist/conversion/responses/responses-openai-bridge.js +21 -54
  166. package/dist/conversion/shared/anthropic-message-utils.js +151 -13
  167. package/dist/conversion/shared/args-mapping.js +2 -146
  168. package/dist/conversion/shared/bridge-actions.js +203 -718
  169. package/dist/conversion/shared/bridge-id-utils.js +5 -71
  170. package/dist/conversion/shared/bridge-instructions.js +2 -1
  171. package/dist/conversion/shared/bridge-message-types.d.ts +2 -0
  172. package/dist/conversion/shared/bridge-message-utils.js +1 -2
  173. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  174. package/dist/conversion/shared/bridge-metadata.js +4 -0
  175. package/dist/conversion/shared/bridge-policies.js +5 -189
  176. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  177. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  178. package/dist/conversion/shared/compaction-detect.js +2 -57
  179. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  180. package/dist/conversion/shared/jsonish.js +3 -160
  181. package/dist/conversion/shared/mcp-injection.js +3 -169
  182. package/dist/conversion/shared/media.js +2 -7
  183. package/dist/conversion/shared/metadata-passthrough.js +9 -46
  184. package/dist/conversion/shared/openai-finalizer.js +2 -1
  185. package/dist/conversion/shared/openai-message-normalize.js +11 -283
  186. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  187. package/dist/conversion/shared/payload-budget.js +2 -85
  188. package/dist/conversion/shared/protocol-state.js +11 -7
  189. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  190. package/dist/conversion/shared/reasoning-normalizer.js +4 -1
  191. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  192. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  193. package/dist/conversion/shared/reasoning-utils.js +2 -6
  194. package/dist/conversion/shared/responses-conversation-store.js +4 -82
  195. package/dist/conversion/shared/responses-output-builder.js +11 -47
  196. package/dist/conversion/shared/responses-reasoning-registry.js +7 -1
  197. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  198. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  199. package/dist/conversion/shared/responses-response-utils.js +6 -7
  200. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  201. package/dist/conversion/shared/responses-tool-utils.js +90 -14
  202. package/dist/conversion/shared/runtime-metadata.js +13 -5
  203. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  204. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +1 -1
  205. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  206. package/dist/conversion/shared/text-markup-normalizer.d.ts +1 -0
  207. package/dist/conversion/shared/text-markup-normalizer.js +1 -0
  208. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  209. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  210. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  211. package/dist/conversion/shared/tool-call-utils.js +3 -45
  212. package/dist/conversion/shared/tool-canonicalizer.js +25 -29
  213. package/dist/conversion/shared/tool-filter-pipeline.js +4 -99
  214. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  215. package/dist/conversion/shared/tool-governor.js +43 -125
  216. package/dist/conversion/shared/tool-harvester.js +2 -8
  217. package/dist/conversion/shared/tool-mapping.js +2 -5
  218. package/dist/conversion/shared/tooling.d.ts +0 -4
  219. package/dist/conversion/shared/tooling.js +18 -0
  220. package/dist/native/router_hotpath_napi.node +0 -0
  221. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  222. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  223. package/dist/router/virtual-router/engine/routing-state/store.js +48 -12
  224. package/dist/router/virtual-router/engine-logging.js +4 -3
  225. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  226. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -23
  227. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  228. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  229. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  230. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  231. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  232. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  233. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  234. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  235. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  236. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  237. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  238. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  239. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  240. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  241. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  242. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  243. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  244. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  245. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  246. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  247. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  248. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  249. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  250. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  251. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  252. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  253. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  254. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  255. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +62 -0
  256. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +338 -0
  257. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  258. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  259. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  260. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  261. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  262. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  263. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  264. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  265. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  266. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  267. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  268. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  269. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  270. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  271. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  273. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  274. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  275. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  276. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  277. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  278. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +284 -0
  279. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  280. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  281. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  282. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  283. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  284. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  285. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +76 -0
  286. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1166 -0
  287. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  288. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  289. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  290. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  291. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  292. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  293. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  294. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  295. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  296. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  297. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  298. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  299. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  300. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  301. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +116 -0
  302. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  303. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +29 -129
  304. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  305. package/dist/router/virtual-router/engine.js +258 -249
  306. package/dist/router/virtual-router/features.js +2 -2
  307. package/dist/router/virtual-router/routing-instructions.d.ts +5 -7
  308. package/dist/router/virtual-router/routing-instructions.js +93 -66
  309. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  310. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  311. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  312. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  313. package/dist/router/virtual-router/sticky-session-store.js +4 -2
  314. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  315. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  316. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  317. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  318. package/dist/router/virtual-router/token-counter.js +0 -9
  319. package/dist/router/virtual-router/types.d.ts +9 -7
  320. package/dist/servertool/clock/config.js +23 -51
  321. package/dist/servertool/clock/io.js +1 -0
  322. package/dist/servertool/clock/session-scope.d.ts +2 -2
  323. package/dist/servertool/clock/session-scope.js +5 -47
  324. package/dist/servertool/engine.d.ts +9 -0
  325. package/dist/servertool/engine.js +196 -79
  326. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +2 -2
  327. package/dist/servertool/handlers/clock.js +1 -1
  328. package/dist/servertool/handlers/continue-execution.js +8 -4
  329. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  330. package/dist/servertool/handlers/gemini-empty-reply-continue.js +7 -1
  331. package/dist/servertool/handlers/review.js +180 -0
  332. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  333. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  334. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +397 -89
  335. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  336. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  337. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  338. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +35 -61
  339. package/dist/servertool/handlers/stop-message-auto.js +392 -76
  340. package/dist/servertool/server-side-tools.d.ts +1 -0
  341. package/dist/servertool/server-side-tools.js +90 -52
  342. package/dist/servertool/types.d.ts +17 -0
  343. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  344. package/dist/tools/exec-command/validator.d.ts +4 -1
  345. package/dist/tools/exec-command/validator.js +87 -3
  346. package/dist/tools/tool-registry.d.ts +7 -1
  347. package/dist/tools/tool-registry.js +3 -2
  348. package/package.json +115 -7
  349. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  350. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  351. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  352. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  353. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  354. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  355. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  356. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  357. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  358. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  359. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  360. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  361. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  362. /package/dist/servertool/handlers/{stop-message-stage-policy/types.js → review.d.ts} +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
  }