@google/adk 2.4.0 → 2.5.0

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 (326) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +17 -2
  2. package/dist/cjs/a2a/a2a_remote_agent_utils.js +8 -4
  3. package/dist/cjs/a2a/agent_card.js +5 -81
  4. package/dist/cjs/a2a/agent_to_a2a.js +7 -0
  5. package/dist/cjs/a2a/event_converter_utils.js +10 -3
  6. package/dist/cjs/agents/agent_engine_client.js +282 -55
  7. package/dist/cjs/agents/base_agent.js +111 -68
  8. package/dist/cjs/agents/functions.js +62 -85
  9. package/dist/cjs/agents/instructions.js +7 -6
  10. package/dist/cjs/agents/invocation_context.js +2 -2
  11. package/dist/cjs/agents/llm_agent.js +105 -95
  12. package/dist/cjs/agents/processors/content_processor_utils.js +42 -15
  13. package/dist/cjs/agents/processors/content_request_processor.js +28 -11
  14. package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
  15. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  16. package/dist/cjs/agents/processors/nl_planning_processor.js +2 -1
  17. package/dist/cjs/artifacts/file_artifact_service.js +1 -1
  18. package/dist/cjs/cli/cli_eval.js +884 -17
  19. package/dist/cjs/cli/utils/cleanup.js +84 -0
  20. package/dist/cjs/cli/utils/envs.js +33 -2
  21. package/dist/cjs/cli/utils/evals.js +75 -8
  22. package/dist/cjs/cli/utils/logs.js +128 -9
  23. package/dist/cjs/cli/utils/path_validation.js +83 -0
  24. package/dist/cjs/code_executors/container_code_executor.js +158 -36
  25. package/dist/cjs/common.js +50 -12
  26. package/dist/cjs/context/compaction_utils.js +19 -0
  27. package/dist/cjs/events/event.js +7 -3
  28. package/dist/cjs/features/feature_registry.js +5 -0
  29. package/dist/cjs/index.js +29 -14
  30. package/dist/cjs/models/google_llm.js +33 -2
  31. package/dist/cjs/models/interactions_utils.js +3 -0
  32. package/dist/cjs/plugins/base_plugin.js +45 -21
  33. package/dist/cjs/plugins/plugin_manager.js +27 -0
  34. package/dist/cjs/runner/runner.js +306 -189
  35. package/dist/cjs/sessions/base_session_service.js +1 -4
  36. package/dist/cjs/sessions/database_session_service.js +191 -19
  37. package/dist/cjs/sessions/db/operations.js +70 -1
  38. package/dist/cjs/sessions/db/schema.js +4 -0
  39. package/dist/cjs/sessions/in_memory_session_service.js +2 -2
  40. package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
  41. package/dist/cjs/skills/loader.js +29 -28
  42. package/dist/cjs/telemetry/api/instrumentation.js +632 -0
  43. package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
  44. package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
  45. package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
  46. package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
  47. package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
  48. package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
  49. package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
  50. package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
  51. package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
  52. package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
  53. package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
  54. package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
  55. package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
  56. package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
  57. package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
  58. package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
  59. package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
  60. package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
  61. package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
  62. package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
  63. package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
  64. package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
  65. package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
  66. package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
  67. package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
  68. package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
  69. package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
  70. package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
  71. package/dist/cjs/telemetry/export/agent_engine.js +90 -0
  72. package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
  73. package/dist/cjs/telemetry/export/google_cloud.js +763 -0
  74. package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
  75. package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -5
  76. package/dist/cjs/tools/agent_tool.js +9 -1
  77. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +22 -34
  78. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +60 -20
  79. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +26 -10
  80. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +14 -23
  81. package/dist/cjs/tools/base_toolset.js +1 -1
  82. package/dist/cjs/tools/computer_use/base_computer.js +125 -0
  83. package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
  84. package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
  85. package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
  86. package/dist/cjs/tools/function_tool.js +15 -5
  87. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +3 -2
  88. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
  89. package/dist/cjs/tools/load_artifacts_tool.js +15 -5
  90. package/dist/cjs/tools/load_memory_tool.js +2 -5
  91. package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
  92. package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
  93. package/dist/cjs/tools/mcp/mcp_toolset.js +18 -6
  94. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
  95. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  96. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +45 -14
  97. package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
  98. package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
  99. package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
  100. package/dist/cjs/tools/toolbox_toolset.js +47 -28
  101. package/dist/cjs/utils/async_queue.js +37 -3
  102. package/dist/cjs/utils/client_labels.js +9 -11
  103. package/dist/cjs/utils/env_aware_utils.js +13 -7
  104. package/dist/cjs/utils/error_utils.js +40 -2
  105. package/dist/cjs/utils/failover_utils.js +10 -9
  106. package/dist/cjs/utils/gemini_schema_util.js +125 -12
  107. package/dist/cjs/utils/id_provider.js +63 -0
  108. package/dist/cjs/utils/model_name.js +15 -0
  109. package/dist/cjs/utils/simple_zod_to_json.js +13 -31
  110. package/dist/cjs/utils/ssrf_guard.js +46 -16
  111. package/dist/cjs/version.js +1 -1
  112. package/dist/cjs/workflow/index.js +2 -0
  113. package/dist/cjs/workflow/node_runner.js +24 -80
  114. package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
  115. package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
  116. package/dist/cjs/workflow/utils/retry_utils.js +2 -2
  117. package/dist/cjs/workflow/workflow.js +12 -12
  118. package/dist/esm/a2a/a2a_remote_agent.js +23 -3
  119. package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
  120. package/dist/esm/a2a/agent_card.js +5 -83
  121. package/dist/esm/a2a/agent_to_a2a.js +7 -0
  122. package/dist/esm/a2a/event_converter_utils.js +10 -3
  123. package/dist/esm/agents/agent_engine_client.js +293 -55
  124. package/dist/esm/agents/base_agent.js +111 -72
  125. package/dist/esm/agents/functions.js +67 -89
  126. package/dist/esm/agents/instructions.js +7 -6
  127. package/dist/esm/agents/invocation_context.js +2 -2
  128. package/dist/esm/agents/llm_agent.js +111 -100
  129. package/dist/esm/agents/processors/content_processor_utils.js +42 -15
  130. package/dist/esm/agents/processors/content_request_processor.js +28 -11
  131. package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
  132. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  133. package/dist/esm/agents/processors/nl_planning_processor.js +2 -1
  134. package/dist/esm/artifacts/file_artifact_service.js +1 -1
  135. package/dist/esm/cli/cli_eval.js +880 -17
  136. package/dist/esm/cli/utils/cleanup.js +56 -0
  137. package/dist/esm/cli/utils/envs.js +33 -2
  138. package/dist/esm/cli/utils/evals.js +74 -8
  139. package/dist/esm/cli/utils/logs.js +128 -9
  140. package/dist/esm/cli/utils/path_validation.js +45 -0
  141. package/dist/esm/code_executors/container_code_executor.js +158 -36
  142. package/dist/esm/common.js +49 -6
  143. package/dist/esm/context/compaction_utils.js +19 -0
  144. package/dist/esm/events/event.js +7 -3
  145. package/dist/esm/features/feature_registry.js +5 -0
  146. package/dist/esm/index.js +27 -15
  147. package/dist/esm/models/google_llm.js +33 -2
  148. package/dist/esm/models/interactions_utils.js +3 -0
  149. package/dist/esm/plugins/base_plugin.js +45 -21
  150. package/dist/esm/plugins/plugin_manager.js +27 -0
  151. package/dist/esm/runner/runner.js +310 -192
  152. package/dist/esm/sessions/base_session_service.js +1 -4
  153. package/dist/esm/sessions/database_session_service.js +191 -19
  154. package/dist/esm/sessions/db/operations.js +70 -1
  155. package/dist/esm/sessions/db/schema.js +4 -0
  156. package/dist/esm/sessions/in_memory_session_service.js +2 -2
  157. package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
  158. package/dist/esm/skills/loader.js +29 -28
  159. package/dist/esm/telemetry/api/instrumentation.js +655 -0
  160. package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
  161. package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
  162. package/dist/esm/telemetry/api/internal/common/config.js +128 -0
  163. package/dist/esm/telemetry/api/internal/common/error.js +69 -0
  164. package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
  165. package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
  166. package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
  167. package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
  168. package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
  169. package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
  170. package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
  171. package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
  172. package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
  173. package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
  174. package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
  175. package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
  176. package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
  177. package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
  178. package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
  179. package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
  180. package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
  181. package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
  182. package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
  183. package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
  184. package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
  185. package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
  186. package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
  187. package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
  188. package/dist/esm/telemetry/export/agent_engine.js +67 -0
  189. package/dist/esm/telemetry/export/agent_runtime.js +46 -0
  190. package/dist/esm/telemetry/export/google_cloud.js +733 -0
  191. package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
  192. package/dist/esm/telemetry/export/setup.js +160 -0
  193. package/dist/esm/tools/agent_tool.js +9 -1
  194. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +23 -35
  195. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +64 -21
  196. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +26 -10
  197. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +14 -23
  198. package/dist/esm/tools/base_toolset.js +1 -1
  199. package/dist/esm/tools/computer_use/base_computer.js +99 -0
  200. package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
  201. package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
  202. package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
  203. package/dist/esm/tools/function_tool.js +15 -5
  204. package/dist/esm/tools/google_api_tool/google_api_toolset.js +3 -2
  205. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
  206. package/dist/esm/tools/load_artifacts_tool.js +15 -5
  207. package/dist/esm/tools/load_memory_tool.js +2 -5
  208. package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
  209. package/dist/esm/tools/mcp/mcp_tool.js +7 -3
  210. package/dist/esm/tools/mcp/mcp_toolset.js +18 -6
  211. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
  212. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  213. package/dist/esm/tools/openapi_tool/rest_api_tool.js +45 -14
  214. package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
  215. package/dist/esm/tools/skill/load_skill_tool.js +3 -0
  216. package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
  217. package/dist/esm/tools/toolbox_toolset.js +47 -28
  218. package/dist/esm/utils/async_queue.js +37 -3
  219. package/dist/esm/utils/client_labels.js +9 -11
  220. package/dist/esm/utils/env_aware_utils.js +12 -7
  221. package/dist/esm/utils/error_utils.js +37 -1
  222. package/dist/esm/utils/failover_utils.js +10 -9
  223. package/dist/esm/utils/gemini_schema_util.js +124 -11
  224. package/dist/esm/utils/id_provider.js +33 -0
  225. package/dist/esm/utils/model_name.js +14 -0
  226. package/dist/esm/utils/simple_zod_to_json.js +13 -31
  227. package/dist/esm/utils/ssrf_guard.js +55 -15
  228. package/dist/esm/version.js +1 -1
  229. package/dist/esm/workflow/index.js +2 -1
  230. package/dist/esm/workflow/node_runner.js +26 -80
  231. package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
  232. package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
  233. package/dist/esm/workflow/utils/retry_utils.js +2 -2
  234. package/dist/esm/workflow/workflow.js +12 -12
  235. package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
  236. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
  237. package/dist/types/agents/agent_engine_client.d.ts +121 -3
  238. package/dist/types/agents/base_agent.d.ts +2 -0
  239. package/dist/types/agents/processors/content_processor_utils.d.ts +9 -9
  240. package/dist/types/agents/run_config.d.ts +14 -0
  241. package/dist/types/cli/cli_eval.d.ts +172 -9
  242. package/dist/types/cli/utils/cleanup.d.ts +18 -0
  243. package/dist/types/cli/utils/envs.d.ts +13 -3
  244. package/dist/types/cli/utils/evals.d.ts +64 -1
  245. package/dist/types/cli/utils/logs.d.ts +19 -2
  246. package/dist/types/cli/utils/path_validation.d.ts +30 -0
  247. package/dist/types/code_executors/container_code_executor.d.ts +49 -8
  248. package/dist/types/common.d.ts +16 -9
  249. package/dist/types/context/compaction_utils.d.ts +13 -1
  250. package/dist/types/events/event.d.ts +3 -0
  251. package/dist/types/features/feature_registry.d.ts +1 -0
  252. package/dist/types/index.d.ts +9 -6
  253. package/dist/types/plugins/base_plugin.d.ts +50 -21
  254. package/dist/types/plugins/plugin_manager.d.ts +13 -0
  255. package/dist/types/runner/runner.d.ts +11 -0
  256. package/dist/types/sessions/base_session_service.d.ts +0 -2
  257. package/dist/types/sessions/db/operations.d.ts +2 -1
  258. package/dist/types/sessions/db/schema.d.ts +5 -3
  259. package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
  260. package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
  261. package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
  262. package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
  263. package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
  264. package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
  265. package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
  266. package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
  267. package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
  268. package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
  269. package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
  270. package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
  271. package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
  272. package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
  273. package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
  274. package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
  275. package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
  276. package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
  277. package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
  278. package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
  279. package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
  280. package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
  281. package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
  282. package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
  283. package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
  284. package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
  285. package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
  286. package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
  287. package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
  288. package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
  289. package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
  290. package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
  291. package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
  292. package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
  293. package/dist/types/tools/agent_tool.d.ts +1 -1
  294. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +13 -4
  295. package/dist/types/tools/base_toolset.d.ts +1 -1
  296. package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
  297. package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
  298. package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
  299. package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
  300. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +2 -0
  301. package/dist/types/tools/load_artifacts_tool.d.ts +5 -1
  302. package/dist/types/tools/load_memory_tool.d.ts +13 -7
  303. package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
  304. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
  305. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +7 -3
  306. package/dist/types/tools/toolbox_toolset.d.ts +15 -20
  307. package/dist/types/utils/async_queue.d.ts +14 -0
  308. package/dist/types/utils/env_aware_utils.d.ts +11 -0
  309. package/dist/types/utils/error_utils.d.ts +4 -0
  310. package/dist/types/utils/gemini_schema_util.d.ts +27 -6
  311. package/dist/types/utils/id_provider.d.ts +43 -0
  312. package/dist/types/utils/model_name.d.ts +8 -0
  313. package/dist/types/utils/ssrf_guard.d.ts +2 -0
  314. package/dist/types/version.d.ts +1 -1
  315. package/dist/types/workflow/index.d.ts +1 -1
  316. package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
  317. package/dist/web/index_web.js +86 -88
  318. package/dist/web/index_web.js.map +4 -4
  319. package/package.json +13 -15
  320. package/dist/cjs/telemetry/google_cloud.js +0 -116
  321. package/dist/cjs/telemetry/tracing.js +0 -393
  322. package/dist/esm/telemetry/google_cloud.js +0 -99
  323. package/dist/esm/telemetry/setup.js +0 -88
  324. package/dist/esm/telemetry/tracing.js +0 -361
  325. package/dist/types/telemetry/google_cloud.d.ts +0 -9
  326. package/dist/types/telemetry/tracing.d.ts +0 -143
@@ -63,26 +63,43 @@ function isToolOptionsObject(value) {
63
63
  return typeof value === "object" && value !== null && "execute" in value && typeof value.execute === "function";
64
64
  }
65
65
  __name(isToolOptionsObject, "isToolOptionsObject");
66
+ function wrapPrefixedBaseTool(rawTool, name) {
67
+ return new Proxy(rawTool, {
68
+ get(target, prop, receiver) {
69
+ if (prop === "name") {
70
+ return name;
71
+ }
72
+ if (prop === "_getDeclaration") {
73
+ return () => {
74
+ const declaration = target._getDeclaration();
75
+ return declaration ? { ...declaration, name } : void 0;
76
+ };
77
+ }
78
+ const value = Reflect.get(target, prop, receiver);
79
+ return typeof value === "function" ? value.bind(target) : value;
80
+ }
81
+ });
82
+ }
83
+ __name(wrapPrefixedBaseTool, "wrapPrefixedBaseTool");
66
84
  function wrapLoadedTool(rawTool, prefix) {
67
85
  var _a2;
68
86
  if ((0, import_base_tool.isBaseTool)(rawTool)) {
69
- if (!prefix) {
87
+ const name = prefix ? `${prefix}_${rawTool.name}` : rawTool.name;
88
+ if (name === rawTool.name) {
70
89
  return rawTool;
71
90
  }
72
- return Object.assign(
73
- Object.create(Object.getPrototypeOf(rawTool)),
74
- rawTool,
75
- { name: `${prefix}_${rawTool.name}` }
76
- );
91
+ return wrapPrefixedBaseTool(rawTool, name);
77
92
  }
78
93
  if (typeof rawTool === "function") {
79
94
  const fn = rawTool;
80
- const baseName = fn.name || "toolbox_tool";
95
+ const baseName = typeof fn.getName === "function" ? fn.getName() : fn.toolName || (fn.name && fn.name !== "callable" ? fn.name : void 0) || "toolbox_tool";
81
96
  const name = prefix ? `${prefix}_${baseName}` : baseName;
82
- const description = (_a2 = fn.description) != null ? _a2 : "";
97
+ const description = typeof fn.getDescription === "function" ? fn.getDescription() : (_a2 = fn.description) != null ? _a2 : "";
98
+ const parameters = typeof fn.getParamSchema === "function" ? fn.getParamSchema() : fn.parameters;
83
99
  return new import_function_tool.FunctionTool({
84
100
  name,
85
101
  description,
102
+ parameters,
86
103
  execute: fn
87
104
  });
88
105
  }
@@ -103,53 +120,55 @@ function wrapLoadedTool(rawTool, prefix) {
103
120
  __name(wrapLoadedTool, "wrapLoadedTool");
104
121
  const _ToolboxToolset = class _ToolboxToolset extends (_b = import_base_toolset.BaseToolset, _a = TOOLBOX_TOOLSET_SIGNATURE_SYMBOL, _b) {
105
122
  constructor(serverUrlOrOptions, extraOptions) {
106
- var _a2, _b2, _c, _d;
123
+ var _a2, _b2, _c, _d, _e;
107
124
  const options = typeof serverUrlOrOptions === "string" ? { serverUrl: serverUrlOrOptions, ...extraOptions } : serverUrlOrOptions;
125
+ const normalizedServerUrl = (_a2 = options.serverUrl) == null ? void 0 : _a2.trim();
126
+ if (!options.client && !normalizedServerUrl) {
127
+ throw new Error("Either client or a non-empty serverUrl is required.");
128
+ }
108
129
  if ((!options.toolNames || options.toolNames.length === 0) && !options.toolsetName) {
109
130
  throw new Error("toolNames and toolsetName cannot both be undefined.");
110
131
  }
111
- super((_a2 = options.toolFilter) != null ? _a2 : [], options.prefix);
132
+ super((_b2 = options.toolFilter) != null ? _b2 : [], options.prefix);
112
133
  /** A unique symbol to identify ADK ToolboxToolset class. */
113
134
  this[_a] = true;
114
135
  this.serverUrl = options.serverUrl;
115
136
  this.toolsetName = options.toolsetName;
116
137
  this.toolNames = options.toolNames;
117
- this.authTokenGetters = (_b2 = options.authTokenGetters) != null ? _b2 : {};
118
- this.boundParams = (_c = options.boundParams) != null ? _c : {};
119
- this.toolboxClient = (_d = options.client) != null ? _d : createUnconfiguredToolboxToolsetClient(this.serverUrl);
138
+ this.authTokenGetters = (_c = options.authTokenGetters) != null ? _c : {};
139
+ this.boundParams = (_d = options.boundParams) != null ? _d : {};
140
+ this.toolboxClient = (_e = options.client) != null ? _e : createUnconfiguredToolboxToolsetClient(normalizedServerUrl != null ? normalizedServerUrl : "");
120
141
  }
121
142
  /**
122
143
  * Loads the configured toolset and/or individual tools from the Toolbox
123
144
  * client and returns the selected {@link BaseTool} instances.
124
145
  */
125
146
  async getTools(context) {
126
- var _a2, _b2, _c, _d, _e, _f;
127
- const loadOptions = {
128
- authTokenGetters: this.authTokenGetters,
129
- boundParams: this.boundParams
130
- };
147
+ var _a2, _b2;
131
148
  const tools = [];
132
149
  if (this.toolsetName) {
133
- const loader = (_c = (_a2 = this.toolboxClient.loadToolset) == null ? void 0 : _a2.bind(this.toolboxClient)) != null ? _c : (_b2 = this.toolboxClient.load_toolset) == null ? void 0 : _b2.bind(this.toolboxClient);
150
+ const loader = (_a2 = this.toolboxClient.loadToolset) == null ? void 0 : _a2.bind(this.toolboxClient);
134
151
  if (!loader) {
135
- throw new Error(
136
- "ToolboxClient does not implement loadToolset or load_toolset."
137
- );
152
+ throw new Error("ToolboxClient does not implement loadToolset.");
138
153
  }
139
- const loadedToolset = await loader(this.toolsetName, loadOptions);
154
+ const loadedToolset = await loader(
155
+ this.toolsetName,
156
+ this.authTokenGetters,
157
+ this.boundParams
158
+ );
140
159
  for (const rawTool of loadedToolset) {
141
160
  tools.push(wrapLoadedTool(rawTool, this.prefix));
142
161
  }
143
162
  }
144
163
  if (this.toolNames && this.toolNames.length > 0) {
145
- const loader = (_f = (_d = this.toolboxClient.loadTool) == null ? void 0 : _d.bind(this.toolboxClient)) != null ? _f : (_e = this.toolboxClient.load_tool) == null ? void 0 : _e.bind(this.toolboxClient);
164
+ const loader = (_b2 = this.toolboxClient.loadTool) == null ? void 0 : _b2.bind(this.toolboxClient);
146
165
  if (!loader) {
147
- throw new Error(
148
- "ToolboxClient does not implement loadTool or load_tool."
149
- );
166
+ throw new Error("ToolboxClient does not implement loadTool.");
150
167
  }
151
168
  const loadedSingleTools = await Promise.all(
152
- this.toolNames.map((toolName) => loader(toolName, loadOptions))
169
+ this.toolNames.map(
170
+ (toolName) => loader(toolName, this.authTokenGetters, this.boundParams)
171
+ )
153
172
  );
154
173
  for (const rawTool of loadedSingleTools) {
155
174
  tools.push(wrapLoadedTool(rawTool, this.prefix));
@@ -52,14 +52,43 @@ const _AsyncQueue = class _AsyncQueue {
52
52
  * immediately; otherwise the value is buffered. No-op once closed/failed.
53
53
  */
54
54
  push(value) {
55
- if (this.closed) return;
55
+ this.enqueue(value);
56
+ }
57
+ /**
58
+ * Enqueues a value like {@link push}, and resolves once the consumer has
59
+ * finished with it: when it asks for the next item, or when the queue closes
60
+ * or fails. Resolves at once if the queue is already closed.
61
+ */
62
+ pushAndWait(value) {
63
+ return new Promise((resolve) => this.enqueue(value, resolve));
64
+ }
65
+ enqueue(value, ack) {
66
+ if (this.closed) {
67
+ ack == null ? void 0 : ack();
68
+ return;
69
+ }
56
70
  const resolver = this.resolvers.shift();
57
71
  if (resolver) {
72
+ this.deliveredAck = ack;
58
73
  resolver.resolve({ value, done: false });
59
74
  } else {
60
- this.queue.push(value);
75
+ this.queue.push({ value, ack });
76
+ }
77
+ }
78
+ /** Releases every producer still waiting in {@link pushAndWait}. */
79
+ releaseAll() {
80
+ var _a;
81
+ this.releaseDelivered();
82
+ for (const item of this.queue) {
83
+ (_a = item.ack) == null ? void 0 : _a.call(item);
84
+ item.ack = void 0;
61
85
  }
62
86
  }
87
+ releaseDelivered() {
88
+ const ack = this.deliveredAck;
89
+ this.deliveredAck = void 0;
90
+ ack == null ? void 0 : ack();
91
+ }
63
92
  /**
64
93
  * Signals that production failed. Buffered items are still delivered first;
65
94
  * once the buffer drains, the consumer's next `next()` rejects with `error`.
@@ -69,6 +98,7 @@ const _AsyncQueue = class _AsyncQueue {
69
98
  if (this.failure) return;
70
99
  this.failure = { error };
71
100
  this.closed = true;
101
+ this.releaseAll();
72
102
  while (this.resolvers.length > 0) {
73
103
  this.resolvers.shift().reject(error);
74
104
  }
@@ -84,6 +114,7 @@ const _AsyncQueue = class _AsyncQueue {
84
114
  close() {
85
115
  if (this.closed) return;
86
116
  this.closed = true;
117
+ this.releaseAll();
87
118
  while (this.resolvers.length > 0) {
88
119
  this.resolvers.shift().resolve({ value: void 0, done: true });
89
120
  }
@@ -91,8 +122,11 @@ const _AsyncQueue = class _AsyncQueue {
91
122
  [Symbol.asyncIterator]() {
92
123
  return {
93
124
  next: /* @__PURE__ */ __name(() => {
125
+ this.releaseDelivered();
94
126
  if (this.queue.length > 0) {
95
- return Promise.resolve({ value: this.queue.shift(), done: false });
127
+ const item = this.queue.shift();
128
+ this.deliveredAck = item.ack;
129
+ return Promise.resolve({ value: item.value, done: false });
96
130
  }
97
131
  if (this.failure) {
98
132
  return Promise.reject(this.failure.error);
@@ -146,19 +146,17 @@ function mergeTrackingHeaders(headers) {
146
146
  otherHeaders.append(name, value);
147
147
  }
148
148
  }
149
- const normalizedEntries = [];
149
+ const mergedEntries = /* @__PURE__ */ new Map();
150
150
  otherHeaders.forEach((value, name) => {
151
- normalizedEntries.push([name, value]);
151
+ var _a2;
152
+ const key = (_a2 = originalNames.get(name)) != null ? _a2 : name;
153
+ const existing = mergedEntries.get(key);
154
+ mergedEntries.set(
155
+ key,
156
+ existing !== void 0 ? `${existing}, ${value}` : value
157
+ );
152
158
  });
153
- const merged = Object.fromEntries(
154
- normalizedEntries.map(([name, value]) => {
155
- var _a2;
156
- return [
157
- (_a2 = originalNames.get(name)) != null ? _a2 : name,
158
- value
159
- ];
160
- })
161
- );
159
+ const merged = Object.fromEntries(mergedEntries);
162
160
  for (const [name, trackingValue] of Object.entries(getTrackingHeaders())) {
163
161
  const tokens = trackingValue.split(" ");
164
162
  for (const value of (_b = callerValues.get(name)) != null ? _b : []) {
@@ -28,6 +28,7 @@ __export(env_aware_utils_exports, {
28
28
  base64Decode: () => base64Decode,
29
29
  base64Encode: () => base64Encode,
30
30
  getBooleanEnvVar: () => getBooleanEnvVar,
31
+ getEnvVar: () => getEnvVar,
31
32
  isBase64Encoded: () => isBase64Encoded,
32
33
  isBrowser: () => isBrowser,
33
34
  isEnterpriseModeEnabled: () => isEnterpriseModeEnabled,
@@ -97,11 +98,16 @@ function isBase64Encoded(data) {
97
98
  }
98
99
  }
99
100
  __name(isBase64Encoded, "isBase64Encoded");
100
- function getBooleanEnvVar(envVar) {
101
- if (!process.env) {
102
- return false;
101
+ function getEnvVar(envVar) {
102
+ var _a;
103
+ if (typeof process === "undefined") {
104
+ return void 0;
103
105
  }
104
- const envVarValue = (process.env[envVar] || "").toLowerCase();
106
+ return (_a = process.env) == null ? void 0 : _a[envVar];
107
+ }
108
+ __name(getEnvVar, "getEnvVar");
109
+ function getBooleanEnvVar(envVar) {
110
+ const envVarValue = (getEnvVar(envVar) || "").toLowerCase();
105
111
  return ["true", "1"].includes(envVarValue);
106
112
  }
107
113
  __name(getBooleanEnvVar, "getBooleanEnvVar");
@@ -115,9 +121,8 @@ function warnDeprecatedEnterpriseModeEnvVar(message) {
115
121
  }
116
122
  __name(warnDeprecatedEnterpriseModeEnvVar, "warnDeprecatedEnterpriseModeEnvVar");
117
123
  function isEnterpriseModeEnabled() {
118
- var _a, _b;
119
- const deprecatedIsSet = ((_a = process.env) == null ? void 0 : _a[DEPRECATED_ENTERPRISE_MODE_ENV_VAR]) !== void 0;
120
- if (((_b = process.env) == null ? void 0 : _b[ENTERPRISE_MODE_ENV_VAR]) !== void 0) {
124
+ const deprecatedIsSet = getEnvVar(DEPRECATED_ENTERPRISE_MODE_ENV_VAR) !== void 0;
125
+ if (getEnvVar(ENTERPRISE_MODE_ENV_VAR) !== void 0) {
121
126
  if (deprecatedIsSet) {
122
127
  warnDeprecatedEnterpriseModeEnvVar(
123
128
  `${DEPRECATED_ENTERPRISE_MODE_ENV_VAR} is set but ignored because ${ENTERPRISE_MODE_ENV_VAR} takes precedence. ${DEPRECATED_ENTERPRISE_MODE_ENV_VAR} is deprecated, please use ${ENTERPRISE_MODE_ENV_VAR} instead.`
@@ -139,6 +144,7 @@ __name(isEnterpriseModeEnabled, "isEnterpriseModeEnabled");
139
144
  base64Decode,
140
145
  base64Encode,
141
146
  getBooleanEnvVar,
147
+ getEnvVar,
142
148
  isBase64Encoded,
143
149
  isBrowser,
144
150
  isEnterpriseModeEnabled,
@@ -26,7 +26,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
26
26
  var error_utils_exports = {};
27
27
  __export(error_utils_exports, {
28
28
  formatError: () => formatError,
29
- getErrorMessage: () => getErrorMessage
29
+ getErrorMessage: () => getErrorMessage,
30
+ isInvocationCancellation: () => isInvocationCancellation,
31
+ toError: () => toError
30
32
  });
31
33
  module.exports = __toCommonJS(error_utils_exports);
32
34
  /**
@@ -43,6 +45,40 @@ function asRecord(value) {
43
45
  return value !== null && typeof value === "object" ? value : void 0;
44
46
  }
45
47
  __name(asRecord, "asRecord");
48
+ function toError(error) {
49
+ return error instanceof Error ? error : new Error("Execution threw a non-Error value.", { cause: error });
50
+ }
51
+ __name(toError, "toError");
52
+ function isInvocationCancellation(error, signal) {
53
+ if (!(signal == null ? void 0 : signal.aborted)) {
54
+ return false;
55
+ }
56
+ const seen = /* @__PURE__ */ new Set();
57
+ for (let depth = 0; depth < 32 && !seen.has(error); depth++) {
58
+ if (Object.is(error, signal.reason)) {
59
+ return true;
60
+ }
61
+ seen.add(error);
62
+ const record = asRecord(error);
63
+ if (!record) {
64
+ return false;
65
+ }
66
+ try {
67
+ const name = record["name"];
68
+ if (name === "AbortError" || name === "InvocationAbortedError") {
69
+ return true;
70
+ }
71
+ if (!("cause" in record)) {
72
+ return false;
73
+ }
74
+ error = record["cause"];
75
+ } catch {
76
+ return false;
77
+ }
78
+ }
79
+ return false;
80
+ }
81
+ __name(isInvocationCancellation, "isInvocationCancellation");
46
82
  function firstString(...values) {
47
83
  for (const value of values) {
48
84
  if (typeof value === "string") {
@@ -124,5 +160,7 @@ __name(formatError, "formatError");
124
160
  // Annotate the CommonJS export names for ESM import in node:
125
161
  0 && (module.exports = {
126
162
  formatError,
127
- getErrorMessage
163
+ getErrorMessage,
164
+ isInvocationCancellation,
165
+ toError
128
166
  });
@@ -41,10 +41,7 @@ async function* runWithRouting(items, context, router, runFn) {
41
41
  }
42
42
  let selectedKey = initialKey;
43
43
  import_logger.logger.debug(`Router selected initial key: ${selectedKey}`);
44
- let selectedItem = items[selectedKey];
45
- if (!selectedItem) {
46
- throw new Error(`Item not found for key: ${selectedKey}`);
47
- }
44
+ let selectedItem = getSelectedItem(items, selectedKey);
48
45
  const triedKeys = /* @__PURE__ */ new Set([selectedKey]);
49
46
  while (true) {
50
47
  let firstYielded = false;
@@ -74,10 +71,7 @@ async function* runWithRouting(items, context, router, runFn) {
74
71
  throw error;
75
72
  }
76
73
  selectedKey = nextKey;
77
- selectedItem = items[selectedKey];
78
- if (!selectedItem) {
79
- throw new Error(`Item not found for key: ${selectedKey}`);
80
- }
74
+ selectedItem = getSelectedItem(items, selectedKey);
81
75
  triedKeys.add(selectedKey);
82
76
  } else {
83
77
  throw error;
@@ -86,8 +80,15 @@ async function* runWithRouting(items, context, router, runFn) {
86
80
  }
87
81
  }
88
82
  __name(runWithRouting, "runWithRouting");
83
+ function getSelectedItem(items, key) {
84
+ if (!Object.hasOwn(items, key) || items[key] === void 0) {
85
+ throw new Error(`Item not found for key: ${key}`);
86
+ }
87
+ return items[key];
88
+ }
89
+ __name(getSelectedItem, "getSelectedItem");
89
90
  function isAsyncGenerator(obj) {
90
- return typeof obj === "object" && typeof obj[Symbol.asyncIterator] === "function";
91
+ return typeof obj === "object" && obj !== null && typeof obj[Symbol.asyncIterator] === "function";
91
92
  }
92
93
  __name(isAsyncGenerator, "isAsyncGenerator");
93
94
  // Annotate the CommonJS export names for ESM import in node:
@@ -25,7 +25,7 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var gemini_schema_util_exports = {};
27
27
  __export(gemini_schema_util_exports, {
28
- normalizeJsonSchemaType: () => normalizeJsonSchemaType,
28
+ copySchemaConstraints: () => copySchemaConstraints,
29
29
  openApiSchemaToGeminiSchema: () => openApiSchemaToGeminiSchema,
30
30
  toGeminiSchema: () => toGeminiSchema
31
31
  });
@@ -67,6 +67,66 @@ const getTypeFromArrayItem = /* @__PURE__ */ __name((mcpType) => {
67
67
  }
68
68
  return (_b = (_a = mcpType == null ? void 0 : mcpType.type) == null ? void 0 : _a.toLowerCase) == null ? void 0 : _b.call(_a);
69
69
  }, "getTypeFromArrayItem");
70
+ const STRINGIFIED_CONSTRAINT_FIELDS = [
71
+ "maxItems",
72
+ "maxLength",
73
+ "maxProperties",
74
+ "minItems",
75
+ "minLength",
76
+ "minProperties"
77
+ ];
78
+ const NUMERIC_CONSTRAINT_FIELDS = ["maximum", "minimum"];
79
+ const PATTERN_REDUNDANT_FORMATS = /* @__PURE__ */ new Set([
80
+ "email",
81
+ "uuid"
82
+ ]);
83
+ const GEMINI_INTEGER_NUMBER_FORMATS = /* @__PURE__ */ new Set([
84
+ "int32",
85
+ "int64"
86
+ ]);
87
+ const GEMINI_STRING_FORMATS = /* @__PURE__ */ new Set([
88
+ "date-time",
89
+ "enum"
90
+ ]);
91
+ function keepsGeminiFormat(type, format) {
92
+ if (typeof type !== "string" || typeof format !== "string") {
93
+ return false;
94
+ }
95
+ if (type === "integer" || type === "number") {
96
+ return GEMINI_INTEGER_NUMBER_FORMATS.has(format);
97
+ }
98
+ if (type === "string") {
99
+ return GEMINI_STRING_FORMATS.has(format);
100
+ }
101
+ return false;
102
+ }
103
+ __name(keepsGeminiFormat, "keepsGeminiFormat");
104
+ function copySchemaConstraints(source, target) {
105
+ for (const field of STRINGIFIED_CONSTRAINT_FIELDS) {
106
+ const value = source[field];
107
+ if (typeof value === "number" || typeof value === "string") {
108
+ target[field] = String(value);
109
+ }
110
+ }
111
+ for (const field of NUMERIC_CONSTRAINT_FIELDS) {
112
+ const value = source[field];
113
+ if (typeof value === "number") {
114
+ target[field] = value;
115
+ } else if (typeof value === "string" && value.trim() !== "" && !Number.isNaN(Number(value))) {
116
+ target[field] = Number(value);
117
+ }
118
+ }
119
+ const pattern = source["pattern"];
120
+ const format = source["format"];
121
+ if (typeof pattern === "string") {
122
+ if (typeof format === "string" && PATTERN_REDUNDANT_FORMATS.has(format)) {
123
+ delete target["pattern"];
124
+ } else {
125
+ target["pattern"] = pattern;
126
+ }
127
+ }
128
+ }
129
+ __name(copySchemaConstraints, "copySchemaConstraints");
70
130
  function toGeminiSchema(mcpSchema) {
71
131
  if (!mcpSchema) {
72
132
  return void 0;
@@ -111,6 +171,7 @@ function toGeminiSchema(mcpSchema) {
111
171
  mcp = { ...rest, anyOf: anyOfItems };
112
172
  }
113
173
  }
174
+ const declaredType = mcp.type;
114
175
  if (!mcp.type) {
115
176
  if (mcp.properties || mcp.$ref) {
116
177
  mcp.type = "object";
@@ -147,6 +208,9 @@ function toGeminiSchema(mcpSchema) {
147
208
  if (mcp.description) {
148
209
  geminiSchema.description = mcp.description;
149
210
  }
211
+ if (keepsGeminiFormat(declaredType, mcp.format)) {
212
+ geminiSchema.format = mcp.format;
213
+ }
150
214
  if (mcp.enum) {
151
215
  geminiSchema.enum = mcp.enum.filter((v) => v != null).map(String);
152
216
  }
@@ -170,6 +234,10 @@ function toGeminiSchema(mcpSchema) {
170
234
  geminiSchema.items = recursiveConvert(mcp.items);
171
235
  }
172
236
  }
237
+ copySchemaConstraints(
238
+ mcp,
239
+ geminiSchema
240
+ );
173
241
  return geminiSchema;
174
242
  }
175
243
  __name(recursiveConvert, "recursiveConvert");
@@ -202,8 +270,7 @@ const GEMINI_SCHEMA_FIELDS = /* @__PURE__ */ new Set([
202
270
  ]);
203
271
  const GEMINI_REJECTED_SCHEMA_FIELDS = /* @__PURE__ */ new Set([
204
272
  "title",
205
- "default",
206
- "format"
273
+ "default"
207
274
  ]);
208
275
  function toGeminiSchemaField(key) {
209
276
  return (0, import_case_utils.toSnakeCaseName)(key).replace(
@@ -248,42 +315,88 @@ function convertSchemaField(field, value) {
248
315
  if (field === "items" && isPlainObject(value)) {
249
316
  return openApiSchemaToGeminiSchema(value);
250
317
  }
251
- if (field === "anyOf" && Array.isArray(value)) {
252
- return value.map((item) => openApiSchemaToGeminiSchema(item));
253
- }
254
318
  return value;
255
319
  }
256
320
  __name(convertSchemaField, "convertSchemaField");
321
+ function isNullSchema(value) {
322
+ return isPlainObject(value) && value["type"] === "null";
323
+ }
324
+ __name(isNullSchema, "isNullSchema");
325
+ function takeUnionBranches(schema) {
326
+ let branches;
327
+ for (const [key, value] of Object.entries(schema)) {
328
+ const field = toGeminiSchemaField(key);
329
+ if (field !== "anyOf" && field !== "oneOf") {
330
+ continue;
331
+ }
332
+ delete schema[key];
333
+ if (Array.isArray(value)) {
334
+ branches = [...branches != null ? branches : [], ...value];
335
+ }
336
+ }
337
+ return branches;
338
+ }
339
+ __name(takeUnionBranches, "takeUnionBranches");
257
340
  function openApiSchemaToGeminiSchema(openApiSchema) {
258
341
  if (openApiSchema === void 0 || openApiSchema === null) {
259
342
  return void 0;
260
343
  }
261
344
  if (!isPlainObject(openApiSchema)) {
262
- throw new TypeError("openapi_schema must be a dictionary");
345
+ throw new TypeError("openApiSchema must be a plain object");
263
346
  }
264
347
  const source = { ...openApiSchema };
265
- const [schemaType, nullable] = normalizeJsonSchemaType(source["type"]);
348
+ let unionNullable = false;
349
+ let anyOf;
350
+ const branches = takeUnionBranches(source);
351
+ if (branches) {
352
+ const nonNullBranches = branches.filter((branch) => !isNullSchema(branch));
353
+ unionNullable = nonNullBranches.length !== branches.length;
354
+ if (nonNullBranches.length === 1 && isPlainObject(nonNullBranches[0])) {
355
+ const merged = openApiSchemaToGeminiSchema({
356
+ ...nonNullBranches[0],
357
+ ...source
358
+ });
359
+ if (unionNullable) {
360
+ merged.nullable = true;
361
+ }
362
+ return merged;
363
+ } else if (nonNullBranches.length > 0) {
364
+ anyOf = nonNullBranches.map(
365
+ (branch) => openApiSchemaToGeminiSchema(branch)
366
+ );
367
+ }
368
+ }
369
+ const [schemaType, typeNullable] = normalizeJsonSchemaType(source["type"]);
266
370
  source["type"] = schemaType;
267
- if (nullable) {
371
+ if (typeNullable || unionNullable) {
268
372
  source["nullable"] = true;
269
373
  }
270
- if (!source["type"]) {
374
+ if (!source["type"] && !anyOf) {
271
375
  source["type"] = "object";
272
376
  }
273
377
  const converted = {};
274
378
  for (const [key, value] of Object.entries(source)) {
275
379
  const field = toGeminiSchemaField(key);
276
- if (!GEMINI_SCHEMA_FIELDS.has(field) || GEMINI_REJECTED_SCHEMA_FIELDS.has(field)) {
380
+ if (value === void 0 || !GEMINI_SCHEMA_FIELDS.has(field) || GEMINI_REJECTED_SCHEMA_FIELDS.has(field)) {
381
+ continue;
382
+ }
383
+ if (field === "format") {
384
+ if (keepsGeminiFormat(schemaType, value)) {
385
+ converted[field] = value;
386
+ }
277
387
  continue;
278
388
  }
279
389
  converted[field] = convertSchemaField(field, value);
280
390
  }
391
+ if (anyOf) {
392
+ converted["anyOf"] = anyOf;
393
+ }
281
394
  return converted;
282
395
  }
283
396
  __name(openApiSchemaToGeminiSchema, "openApiSchemaToGeminiSchema");
284
397
  // Annotate the CommonJS export names for ESM import in node:
285
398
  0 && (module.exports = {
286
- normalizeJsonSchemaType,
399
+ copySchemaConstraints,
287
400
  openApiSchemaToGeminiSchema,
288
401
  toGeminiSchema
289
402
  });
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var id_provider_exports = {};
27
+ __export(id_provider_exports, {
28
+ newId: () => newId,
29
+ newIdOr: () => newIdOr,
30
+ resetIdProvider: () => resetIdProvider,
31
+ setIdProvider: () => setIdProvider
32
+ });
33
+ module.exports = __toCommonJS(id_provider_exports);
34
+ var import_env_aware_utils = require("./env_aware_utils.js");
35
+ /**
36
+ * @license
37
+ * Copyright 2026 Google LLC
38
+ * SPDX-License-Identifier: Apache-2.0
39
+ */
40
+ let idProvider;
41
+ function setIdProvider(provider) {
42
+ idProvider = provider;
43
+ }
44
+ __name(setIdProvider, "setIdProvider");
45
+ function resetIdProvider() {
46
+ idProvider = void 0;
47
+ }
48
+ __name(resetIdProvider, "resetIdProvider");
49
+ function newId() {
50
+ return newIdOr(import_env_aware_utils.randomUUID);
51
+ }
52
+ __name(newId, "newId");
53
+ function newIdOr(fallback) {
54
+ return idProvider ? idProvider() : fallback();
55
+ }
56
+ __name(newIdOr, "newIdOr");
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ newId,
60
+ newIdOr,
61
+ resetIdProvider,
62
+ setIdProvider
63
+ });