@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
@@ -0,0 +1,56 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ /**
6
+ * @license
7
+ * Copyright 2026 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ import { getErrorMessage } from "../../utils/error_utils.js";
11
+ import { logger } from "../../utils/logger.js";
12
+ const RUNNER_CLEANUP_TIMEOUT_MS = 3e4;
13
+ const RUNNER_CLEANUP_TIMEOUT_SYMBOL = /* @__PURE__ */ Symbol(
14
+ "google.adk.cli.runnerCleanupTimeout"
15
+ );
16
+ async function closeRunners(runners) {
17
+ if (runners.length === 0) {
18
+ return;
19
+ }
20
+ let pendingCount = runners.length;
21
+ const tasks = runners.map(async (runner) => {
22
+ try {
23
+ await runner.close();
24
+ } catch (e) {
25
+ logger.error(
26
+ `Error closing runner ${runner.appName}: ${getErrorMessage(e)}`
27
+ );
28
+ } finally {
29
+ pendingCount -= 1;
30
+ }
31
+ });
32
+ let timeoutId;
33
+ try {
34
+ const result = await Promise.race([
35
+ Promise.allSettled(tasks).then(() => void 0),
36
+ new Promise((resolve) => {
37
+ timeoutId = setTimeout(
38
+ () => resolve(RUNNER_CLEANUP_TIMEOUT_SYMBOL),
39
+ RUNNER_CLEANUP_TIMEOUT_MS
40
+ );
41
+ })
42
+ ]);
43
+ if (result === RUNNER_CLEANUP_TIMEOUT_SYMBOL && pendingCount > 0) {
44
+ logger.warn(`${pendingCount} runner close tasks didn't complete in time`);
45
+ }
46
+ } finally {
47
+ if (timeoutId !== void 0) {
48
+ clearTimeout(timeoutId);
49
+ }
50
+ }
51
+ }
52
+ __name(closeRunners, "closeRunners");
53
+ export {
54
+ RUNNER_CLEANUP_TIMEOUT_MS,
55
+ closeRunners
56
+ };
@@ -9,7 +9,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
9
9
  */
10
10
  import * as fs from "node:fs";
11
11
  import * as path from "node:path";
12
+ import { InputValidationError } from "../../errors/input_validation_error.js";
12
13
  import { logger } from "../../utils/logger.js";
14
+ import { isStrictlyInside, validatePathSegment } from "./path_validation.js";
13
15
  function walkToRootUntilFound(folder, filename = ".env") {
14
16
  const checkpath = path.join(folder, filename);
15
17
  if (fs.existsSync(checkpath) && fs.statSync(checkpath).isFile()) {
@@ -55,8 +57,37 @@ function parseAndLoadDotenv(content) {
55
57
  }
56
58
  }
57
59
  __name(parseAndLoadDotenv, "parseAndLoadDotenv");
58
- function loadDotenvForAgent(agentName, agentParentFolder = ".", filename = ".env") {
59
- let startingFolder = path.resolve(agentParentFolder, agentName);
60
+ function loadDotenvForAgent(agentName, agentParentFolder, filename = ".env") {
61
+ validatePathSegment(filename, "filename");
62
+ if (typeof agentName !== "string" || !agentName) {
63
+ throw new InputValidationError("agentName must not be empty.");
64
+ }
65
+ if (agentName.includes("\0")) {
66
+ throw new InputValidationError("agentName must not contain null bytes.");
67
+ }
68
+ let startingFolder;
69
+ if (agentParentFolder !== void 0) {
70
+ if (typeof agentParentFolder !== "string" || !agentParentFolder || agentParentFolder.includes("\0")) {
71
+ throw new InputValidationError(
72
+ "agentParentFolder must be a valid non-empty path."
73
+ );
74
+ }
75
+ validatePathSegment(agentName, "agentName");
76
+ const baseDir = path.resolve(agentParentFolder);
77
+ startingFolder = path.resolve(baseDir, agentName);
78
+ if (!isStrictlyInside(baseDir, startingFolder)) {
79
+ throw new InputValidationError(
80
+ `agentName '${agentName}' resolves outside agentParentFolder.`
81
+ );
82
+ }
83
+ } else {
84
+ if (agentName === "." || agentName.split(/[\\/]+/).includes("..")) {
85
+ throw new InputValidationError(
86
+ `agentName '${agentName}' must not contain traversal segments.`
87
+ );
88
+ }
89
+ startingFolder = path.resolve(".", agentName);
90
+ }
60
91
  if (fs.existsSync(startingFolder) && fs.statSync(startingFolder).isFile()) {
61
92
  startingFolder = path.dirname(startingFolder);
62
93
  }
@@ -9,20 +9,22 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
9
9
  */
10
10
  import { isLlmAgent } from "../../agents/llm_agent.js";
11
11
  function convertSessionToEvalFormat(session) {
12
- var _a, _b, _c;
12
+ var _a, _b, _c, _d;
13
13
  const events = session && session.events ? session.events : [];
14
14
  const evalCases = [];
15
15
  let i = 0;
16
16
  while (i < events.length) {
17
17
  const event = events[i];
18
18
  if (event.author === "user") {
19
+ if (!event.content || !event.content.parts || event.content.parts.length === 0) {
20
+ i += 1;
21
+ continue;
22
+ }
19
23
  let userQuery = "";
20
- if (event.content && event.content.parts) {
21
- for (const part of event.content.parts) {
22
- if (part.text) {
23
- userQuery = part.text;
24
- break;
25
- }
24
+ for (const part of event.content.parts) {
25
+ if (part.text) {
26
+ userQuery = part.text;
27
+ break;
26
28
  }
27
29
  }
28
30
  const expectedToolUse = [];
@@ -36,6 +38,7 @@ function convertSessionToEvalFormat(session) {
36
38
  }
37
39
  if (subsequentEvent.content && subsequentEvent.content.parts) {
38
40
  let hasToolAction = false;
41
+ const textParts = [];
39
42
  for (const part of subsequentEvent.content.parts) {
40
43
  if (part.functionCall) {
41
44
  expectedToolUse.push({
@@ -45,13 +48,20 @@ function convertSessionToEvalFormat(session) {
45
48
  hasToolAction = true;
46
49
  } else if (part.functionResponse) {
47
50
  hasToolAction = true;
51
+ } else if (part.text) {
52
+ textParts.push(part);
48
53
  }
49
54
  }
50
- if (!hasToolAction) {
55
+ if (!hasToolAction && textParts.length > 0) {
51
56
  expectedIntermediateAgentResponses.push([
52
57
  (_c = subsequentEvent.author) != null ? _c : "",
53
58
  subsequentEvent.content.parts
54
59
  ]);
60
+ } else if (hasToolAction && textParts.length > 0) {
61
+ expectedIntermediateAgentResponses.push([
62
+ (_d = subsequentEvent.author) != null ? _d : "",
63
+ textParts
64
+ ]);
55
65
  }
56
66
  }
57
67
  j += 1;
@@ -80,6 +90,61 @@ function convertSessionToEvalFormat(session) {
80
90
  return evalCases;
81
91
  }
82
92
  __name(convertSessionToEvalFormat, "convertSessionToEvalFormat");
93
+ function convertSessionToEvalInvocations(session) {
94
+ const invocations = [];
95
+ const events = session && session.events ? session.events : [];
96
+ for (let i = 0; i < events.length; i++) {
97
+ const event = events[i];
98
+ if (event.author !== "user") {
99
+ continue;
100
+ }
101
+ if (!event.content || !event.content.parts || event.content.parts.length === 0) {
102
+ continue;
103
+ }
104
+ const userContent = event.content;
105
+ const invocationId = event.invocationId || void 0;
106
+ const creationTimestamp = event.timestamp !== void 0 ? event.timestamp / 1e3 : void 0;
107
+ const toolUses = [];
108
+ const intermediateResponses = [];
109
+ for (let j = i + 1; j < events.length; j++) {
110
+ const subsequentEvent = events[j];
111
+ const eventAuthor = subsequentEvent.author || "agent";
112
+ if (eventAuthor === "user") {
113
+ break;
114
+ }
115
+ if (!subsequentEvent.content || !subsequentEvent.content.parts || subsequentEvent.content.parts.length === 0) {
116
+ continue;
117
+ }
118
+ const intermediateResponseParts = [];
119
+ for (const subsequentPart of subsequentEvent.content.parts) {
120
+ if (subsequentPart.functionCall) {
121
+ toolUses.push(subsequentPart.functionCall);
122
+ } else if (subsequentPart.text) {
123
+ intermediateResponseParts.push(subsequentPart);
124
+ }
125
+ }
126
+ if (intermediateResponseParts.length > 0) {
127
+ intermediateResponses.push([eventAuthor, intermediateResponseParts]);
128
+ }
129
+ }
130
+ const finalResponse = intermediateResponses.length > 0 ? {
131
+ parts: intermediateResponses[intermediateResponses.length - 1][1],
132
+ role: "model"
133
+ } : void 0;
134
+ invocations.push({
135
+ ...invocationId !== void 0 ? { invocationId } : {},
136
+ userContent,
137
+ ...finalResponse !== void 0 ? { finalResponse } : {},
138
+ intermediateData: {
139
+ toolUses,
140
+ intermediateResponses: intermediateResponses.length > 0 ? intermediateResponses.slice(0, -1) : []
141
+ },
142
+ ...creationTimestamp !== void 0 ? { creationTimestamp } : {}
143
+ });
144
+ }
145
+ return invocations;
146
+ }
147
+ __name(convertSessionToEvalInvocations, "convertSessionToEvalInvocations");
83
148
  function populateEmptyState(agent, allState) {
84
149
  for (const subAgent of agent.subAgents) {
85
150
  populateEmptyState(subAgent, allState);
@@ -105,5 +170,6 @@ function createEmptyState(agent, initializedStates) {
105
170
  __name(createEmptyState, "createEmptyState");
106
171
  export {
107
172
  convertSessionToEvalFormat,
173
+ convertSessionToEvalInvocations,
108
174
  createEmptyState
109
175
  };
@@ -13,6 +13,7 @@ import * as path from "node:path";
13
13
  import * as util from "node:util";
14
14
  import { LogLevel, setLogger, setLogLevel } from "../../utils/logger.js";
15
15
  const LOGGING_FORMAT = "%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s";
16
+ const MAX_LOG_FILE_SUFFIX = 1e3;
16
17
  const LOG_LEVEL_NAMES = {
17
18
  [LogLevel.DEBUG]: "DEBUG",
18
19
  [LogLevel.INFO]: "INFO",
@@ -24,6 +25,109 @@ function formatDateTimestamp(date) {
24
25
  return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}_${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`;
25
26
  }
26
27
  __name(formatDateTimestamp, "formatDateTimestamp");
28
+ function hasErrorCode(e, code) {
29
+ return typeof e === "object" && e !== null && "code" in e && e.code === code;
30
+ }
31
+ __name(hasErrorCode, "hasErrorCode");
32
+ let activeLogFile;
33
+ let exitListenerRegistered = false;
34
+ function closeActiveLogFile() {
35
+ if (!activeLogFile) {
36
+ return;
37
+ }
38
+ const { fd } = activeLogFile;
39
+ activeLogFile = void 0;
40
+ try {
41
+ fs.closeSync(fd);
42
+ } catch {
43
+ }
44
+ }
45
+ __name(closeActiveLogFile, "closeActiveLogFile");
46
+ function getUid() {
47
+ return typeof process.getuid === "function" ? process.getuid() : void 0;
48
+ }
49
+ __name(getUid, "getUid");
50
+ function isSymlinkOrNonDirectory(dir) {
51
+ try {
52
+ const stat = fs.lstatSync(dir);
53
+ return stat.isSymbolicLink() || !stat.isDirectory();
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+ __name(isSymlinkOrNonDirectory, "isSymlinkOrNonDirectory");
59
+ function preparePrivateDirectory(dir) {
60
+ try {
61
+ fs.mkdirSync(dir, { recursive: true, mode: 448 });
62
+ } catch (e) {
63
+ if (!isSymlinkOrNonDirectory(dir)) {
64
+ throw e;
65
+ }
66
+ return false;
67
+ }
68
+ const stat = fs.lstatSync(dir);
69
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
70
+ return false;
71
+ }
72
+ const uid = getUid();
73
+ if (uid === void 0) {
74
+ return true;
75
+ }
76
+ if (stat.uid !== uid) {
77
+ return false;
78
+ }
79
+ fs.chmodSync(dir, 448);
80
+ if ((fs.lstatSync(dir).mode & 63) !== 0) {
81
+ throw new Error(
82
+ `Log directory ${dir} is accessible by other users after chmod 0o700.`
83
+ );
84
+ }
85
+ return true;
86
+ }
87
+ __name(preparePrivateDirectory, "preparePrivateDirectory");
88
+ function resolveLogDir(subFolder) {
89
+ const logDir = path.join(os.tmpdir(), subFolder);
90
+ if (preparePrivateDirectory(logDir)) {
91
+ return logDir;
92
+ }
93
+ const uid = getUid();
94
+ if (uid === void 0) {
95
+ throw new Error(`Log directory ${logDir} is not a directory.`);
96
+ }
97
+ const userLogDir = path.join(os.tmpdir(), `${subFolder}_${uid}`);
98
+ if (preparePrivateDirectory(userLogDir)) {
99
+ return userLogDir;
100
+ }
101
+ throw new Error(
102
+ `Log directories ${logDir} and ${userLogDir} are not directories owned by the current user.`
103
+ );
104
+ }
105
+ __name(resolveLogDir, "resolveLogDir");
106
+ function createExclusiveLogFile({
107
+ logDir,
108
+ logFilePrefix,
109
+ logFileTimestamp
110
+ }) {
111
+ for (let counter = 0; counter <= MAX_LOG_FILE_SUFFIX; counter++) {
112
+ const suffix = counter === 0 ? "" : `_${counter}`;
113
+ const candidate = path.join(
114
+ logDir,
115
+ `${logFilePrefix}.${logFileTimestamp}${suffix}.log`
116
+ );
117
+ try {
118
+ const fd = fs.openSync(candidate, "ax", 384);
119
+ return { logFilepath: candidate, fd };
120
+ } catch (e) {
121
+ if (!hasErrorCode(e, "EEXIST")) {
122
+ throw e;
123
+ }
124
+ }
125
+ }
126
+ throw new Error(
127
+ `Failed to create a unique log file in ${logDir} for ${logFilePrefix}.${logFileTimestamp}`
128
+ );
129
+ }
130
+ __name(createExclusiveLogFile, "createExclusiveLogFile");
27
131
  function formatLogLine(level, messages) {
28
132
  var _a;
29
133
  const iso = (/* @__PURE__ */ new Date()).toISOString();
@@ -62,6 +166,7 @@ function createWriterLogger(initialLevel, writeLine) {
62
166
  }
63
167
  __name(createWriterLogger, "createWriterLogger");
64
168
  function setupAdkLogger(level = LogLevel.INFO) {
169
+ closeActiveLogFile();
65
170
  setLogLevel(level);
66
171
  setLogger(
67
172
  createWriterLogger(level, (line) => {
@@ -72,21 +177,33 @@ function setupAdkLogger(level = LogLevel.INFO) {
72
177
  }
73
178
  __name(setupAdkLogger, "setupAdkLogger");
74
179
  function logToTmpFolder(options = {}) {
180
+ var _a;
75
181
  const {
76
182
  level = LogLevel.INFO,
77
183
  subFolder = "agents_log",
78
- logFilePrefix = "agent",
79
- logFileTimestamp = formatDateTimestamp(/* @__PURE__ */ new Date())
184
+ logFilePrefix = "agent"
80
185
  } = options;
81
- const logDir = path.join(os.tmpdir(), subFolder);
82
- fs.mkdirSync(logDir, { recursive: true });
83
- const logFilename = `${logFilePrefix}.${logFileTimestamp}.log`;
84
- const logFilepath = path.join(logDir, logFilename);
85
- fs.writeFileSync(logFilepath, "", "utf-8");
186
+ const logFileTimestamp = (_a = options.logFileTimestamp) != null ? _a : `${formatDateTimestamp(/* @__PURE__ */ new Date())}_${process.pid}`;
187
+ const logDir = resolveLogDir(subFolder);
188
+ const logFile = createExclusiveLogFile({
189
+ logDir,
190
+ logFilePrefix,
191
+ logFileTimestamp
192
+ });
193
+ const { logFilepath } = logFile;
194
+ closeActiveLogFile();
195
+ activeLogFile = logFile;
196
+ if (!exitListenerRegistered) {
197
+ process.on("exit", closeActiveLogFile);
198
+ exitListenerRegistered = true;
199
+ }
86
200
  setLogLevel(level);
87
201
  const fileLogger = createWriterLogger(level, (line) => {
88
- fs.appendFileSync(logFilepath, `${line}
89
- `, "utf-8");
202
+ if (activeLogFile !== logFile) {
203
+ return;
204
+ }
205
+ fs.writeSync(logFile.fd, `${line}
206
+ `, null, "utf-8");
90
207
  });
91
208
  setLogger(fileLogger);
92
209
  const latestLogLink = path.join(logDir, `${logFilePrefix}.latest.log`);
@@ -101,6 +218,8 @@ function logToTmpFolder(options = {}) {
101
218
  fileLogger.warn(`Failed to create symlink to latest log: ${String(e)}`);
102
219
  }
103
220
  fileLogger.info(`Log setup complete: ${logFilepath}`);
221
+ process.stderr.write(`Log setup complete: ${logFilepath}
222
+ `);
104
223
  return logFilepath;
105
224
  }
106
225
  __name(logToTmpFolder, "logToTmpFolder");
@@ -0,0 +1,45 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ /**
6
+ * @license
7
+ * Copyright 2026 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ import * as path from "node:path";
11
+ import { InputValidationError } from "../../errors/input_validation_error.js";
12
+ const WINDOWS_DRIVE_RE = /^[A-Za-z]:/;
13
+ function validatePathSegment(value, fieldName) {
14
+ if (typeof value !== "string" || !value) {
15
+ throw new InputValidationError(`${fieldName} must not be empty.`);
16
+ }
17
+ if (value.includes("\0")) {
18
+ throw new InputValidationError(`${fieldName} must not contain null bytes.`);
19
+ }
20
+ if (value.includes("/") || value.includes("\\")) {
21
+ throw new InputValidationError(
22
+ `${fieldName} '${value}' must not contain path separators.`
23
+ );
24
+ }
25
+ if (WINDOWS_DRIVE_RE.test(value)) {
26
+ throw new InputValidationError(
27
+ `${fieldName} '${value}' must not be drive-qualified.`
28
+ );
29
+ }
30
+ if (value === "." || value === "..") {
31
+ throw new InputValidationError(
32
+ `${fieldName} '${value}' must not contain traversal segments.`
33
+ );
34
+ }
35
+ }
36
+ __name(validatePathSegment, "validatePathSegment");
37
+ function isStrictlyInside(baseDir, target) {
38
+ const rel = path.relative(baseDir, target);
39
+ return rel !== "" && rel !== ".." && !rel.startsWith(`..${path.sep}`) && !path.isAbsolute(rel);
40
+ }
41
+ __name(isStrictlyInside, "isStrictlyInside");
42
+ export {
43
+ isStrictlyInside,
44
+ validatePathSegment
45
+ };