@google/adk 2.3.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 (396) 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 +399 -0
  7. package/dist/cjs/agents/base_agent.js +127 -68
  8. package/dist/cjs/agents/functions.js +64 -59
  9. package/dist/cjs/agents/instructions.js +8 -6
  10. package/dist/cjs/agents/invocation_context.js +2 -2
  11. package/dist/cjs/agents/llm_agent.js +124 -101
  12. package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
  13. package/dist/cjs/agents/processors/code_execution_request_processor.js +8 -0
  14. package/dist/cjs/agents/processors/content_processor_utils.js +72 -17
  15. package/dist/cjs/agents/processors/content_request_processor.js +51 -2
  16. package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
  17. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  18. package/dist/cjs/agents/processors/nl_planning_processor.js +13 -3
  19. package/dist/cjs/artifacts/file_artifact_service.js +1 -1
  20. package/dist/cjs/cli/cli_eval.js +884 -17
  21. package/dist/cjs/cli/utils/cleanup.js +84 -0
  22. package/dist/cjs/cli/utils/envs.js +33 -2
  23. package/dist/cjs/cli/utils/evals.js +75 -8
  24. package/dist/cjs/cli/utils/logs.js +134 -15
  25. package/dist/cjs/cli/utils/path_validation.js +83 -0
  26. package/dist/cjs/code_executors/container_code_executor.js +171 -38
  27. package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
  28. package/dist/cjs/common.js +59 -32
  29. package/dist/cjs/context/compaction_utils.js +19 -0
  30. package/dist/cjs/errors/input_validation_error.js +3 -2
  31. package/dist/cjs/events/event.js +7 -3
  32. package/dist/cjs/features/feature_registry.js +5 -0
  33. package/dist/cjs/index.js +34 -12
  34. package/dist/cjs/models/google_llm.js +33 -2
  35. package/dist/cjs/models/interactions_utils.js +3 -0
  36. package/dist/cjs/plugins/base_plugin.js +54 -40
  37. package/dist/cjs/plugins/plugin_manager.js +27 -0
  38. package/dist/cjs/runner/runner.js +306 -189
  39. package/dist/cjs/sessions/base_session_service.js +15 -12
  40. package/dist/cjs/sessions/database_session_service.js +232 -38
  41. package/dist/cjs/sessions/db/operations.js +70 -1
  42. package/dist/cjs/sessions/db/schema.js +4 -0
  43. package/dist/cjs/sessions/in_memory_session_service.js +2 -2
  44. package/dist/cjs/sessions/stale_session_error.js +59 -0
  45. package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
  46. package/dist/cjs/skills/loader.js +76 -41
  47. package/dist/cjs/telemetry/api/instrumentation.js +632 -0
  48. package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
  49. package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
  50. package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
  51. package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
  52. package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
  53. package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
  54. package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
  55. package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
  56. package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
  57. package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
  58. package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
  59. package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
  60. package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
  61. package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
  62. package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
  63. package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
  64. package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
  65. package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
  66. package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
  67. package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
  68. package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
  69. package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
  70. package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
  71. package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
  72. package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
  73. package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
  74. package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
  75. package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
  76. package/dist/cjs/telemetry/export/agent_engine.js +90 -0
  77. package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
  78. package/dist/cjs/telemetry/export/google_cloud.js +763 -0
  79. package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
  80. package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -6
  81. package/dist/cjs/tools/agent_tool.js +9 -1
  82. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +18 -23
  83. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +109 -43
  84. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +222 -114
  85. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +34 -14
  86. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +175 -0
  87. package/dist/cjs/tools/base_toolset.js +1 -1
  88. package/dist/cjs/tools/computer_use/base_computer.js +125 -0
  89. package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
  90. package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
  91. package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
  92. package/dist/cjs/tools/function_tool.js +15 -5
  93. package/dist/cjs/tools/google_api_tool/google_api_tool.js +4 -1
  94. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +174 -0
  95. package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
  96. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
  97. package/dist/cjs/tools/google_api_tool/index.js +20 -23
  98. package/dist/cjs/tools/load_artifacts_tool.js +27 -11
  99. package/dist/cjs/tools/load_memory_tool.js +14 -15
  100. package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
  101. package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
  102. package/dist/cjs/tools/mcp/mcp_toolset.js +19 -20
  103. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
  104. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
  105. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  106. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  107. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
  108. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +57 -10
  109. package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
  110. package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
  111. package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
  112. package/dist/cjs/tools/toolbox_toolset.js +193 -0
  113. package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
  114. package/dist/cjs/utils/async_queue.js +37 -3
  115. package/dist/cjs/utils/client_labels.js +17 -2
  116. package/dist/cjs/utils/env_aware_utils.js +13 -7
  117. package/dist/cjs/utils/error_utils.js +40 -2
  118. package/dist/cjs/utils/failover_utils.js +11 -10
  119. package/dist/cjs/utils/gemini_schema_util.js +145 -14
  120. package/dist/cjs/utils/id_provider.js +63 -0
  121. package/dist/cjs/utils/logger_node.js +4 -0
  122. package/dist/cjs/utils/model_name.js +15 -0
  123. package/dist/cjs/utils/output_schema_utils.js +5 -2
  124. package/dist/cjs/utils/simple_zod_to_json.js +13 -31
  125. package/dist/cjs/utils/ssrf_guard.js +46 -16
  126. package/dist/cjs/utils/task.js +1 -1
  127. package/dist/cjs/version.js +1 -1
  128. package/dist/cjs/workflow/index.js +2 -0
  129. package/dist/cjs/workflow/node_runner.js +24 -80
  130. package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
  131. package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
  132. package/dist/cjs/workflow/utils/retry_utils.js +2 -2
  133. package/dist/cjs/workflow/workflow.js +12 -12
  134. package/dist/esm/a2a/a2a_remote_agent.js +23 -3
  135. package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
  136. package/dist/esm/a2a/agent_card.js +5 -83
  137. package/dist/esm/a2a/agent_to_a2a.js +7 -0
  138. package/dist/esm/a2a/event_converter_utils.js +10 -3
  139. package/dist/esm/agents/agent_engine_client.js +382 -0
  140. package/dist/esm/agents/base_agent.js +127 -72
  141. package/dist/esm/agents/functions.js +69 -63
  142. package/dist/esm/agents/instructions.js +8 -6
  143. package/dist/esm/agents/invocation_context.js +2 -2
  144. package/dist/esm/agents/llm_agent.js +130 -106
  145. package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
  146. package/dist/esm/agents/processors/code_execution_request_processor.js +8 -0
  147. package/dist/esm/agents/processors/content_processor_utils.js +72 -17
  148. package/dist/esm/agents/processors/content_request_processor.js +51 -2
  149. package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
  150. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  151. package/dist/esm/agents/processors/nl_planning_processor.js +13 -3
  152. package/dist/esm/artifacts/file_artifact_service.js +1 -1
  153. package/dist/esm/cli/cli_eval.js +880 -17
  154. package/dist/esm/cli/utils/cleanup.js +56 -0
  155. package/dist/esm/cli/utils/envs.js +33 -2
  156. package/dist/esm/cli/utils/evals.js +74 -8
  157. package/dist/esm/cli/utils/logs.js +132 -13
  158. package/dist/esm/cli/utils/path_validation.js +45 -0
  159. package/dist/esm/code_executors/container_code_executor.js +171 -38
  160. package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
  161. package/dist/esm/common.js +59 -19
  162. package/dist/esm/context/compaction_utils.js +19 -0
  163. package/dist/esm/errors/input_validation_error.js +3 -2
  164. package/dist/esm/events/event.js +7 -3
  165. package/dist/esm/features/feature_registry.js +5 -0
  166. package/dist/esm/index.js +36 -10
  167. package/dist/esm/models/google_llm.js +33 -2
  168. package/dist/esm/models/interactions_utils.js +3 -0
  169. package/dist/esm/plugins/base_plugin.js +54 -40
  170. package/dist/esm/plugins/plugin_manager.js +27 -0
  171. package/dist/esm/runner/runner.js +310 -192
  172. package/dist/esm/sessions/base_session_service.js +13 -11
  173. package/dist/esm/sessions/database_session_service.js +231 -38
  174. package/dist/esm/sessions/db/operations.js +70 -1
  175. package/dist/esm/sessions/db/schema.js +4 -0
  176. package/dist/esm/sessions/in_memory_session_service.js +2 -2
  177. package/dist/esm/sessions/stale_session_error.js +31 -0
  178. package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
  179. package/dist/esm/skills/loader.js +76 -41
  180. package/dist/esm/telemetry/api/instrumentation.js +655 -0
  181. package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
  182. package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
  183. package/dist/esm/telemetry/api/internal/common/config.js +128 -0
  184. package/dist/esm/telemetry/api/internal/common/error.js +69 -0
  185. package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
  186. package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
  187. package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
  188. package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
  189. package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
  190. package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
  191. package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
  192. package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
  193. package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
  194. package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
  195. package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
  196. package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
  197. package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
  198. package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
  199. package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
  200. package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
  201. package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
  202. package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
  203. package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
  204. package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
  205. package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
  206. package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
  207. package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
  208. package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
  209. package/dist/esm/telemetry/export/agent_engine.js +67 -0
  210. package/dist/esm/telemetry/export/agent_runtime.js +46 -0
  211. package/dist/esm/telemetry/export/google_cloud.js +733 -0
  212. package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
  213. package/dist/esm/telemetry/export/setup.js +160 -0
  214. package/dist/esm/tools/agent_tool.js +9 -1
  215. package/dist/esm/tools/apihub_tool/apihub_toolset.js +17 -22
  216. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +114 -44
  217. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +226 -115
  218. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +34 -14
  219. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +149 -0
  220. package/dist/esm/tools/base_toolset.js +1 -1
  221. package/dist/esm/tools/computer_use/base_computer.js +99 -0
  222. package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
  223. package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
  224. package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
  225. package/dist/esm/tools/function_tool.js +15 -5
  226. package/dist/esm/tools/google_api_tool/google_api_tool.js +4 -1
  227. package/dist/esm/tools/google_api_tool/google_api_toolset.js +147 -0
  228. package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
  229. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
  230. package/dist/esm/tools/google_api_tool/index.js +18 -20
  231. package/dist/esm/tools/load_artifacts_tool.js +25 -10
  232. package/dist/esm/tools/load_memory_tool.js +14 -15
  233. package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
  234. package/dist/esm/tools/mcp/mcp_tool.js +7 -3
  235. package/dist/esm/tools/mcp/mcp_toolset.js +19 -20
  236. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
  237. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
  238. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  239. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  240. package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
  241. package/dist/esm/tools/openapi_tool/rest_api_tool.js +57 -10
  242. package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
  243. package/dist/esm/tools/skill/load_skill_tool.js +3 -0
  244. package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
  245. package/dist/esm/tools/toolbox_toolset.js +167 -0
  246. package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
  247. package/dist/esm/utils/async_queue.js +37 -3
  248. package/dist/esm/utils/client_labels.js +17 -2
  249. package/dist/esm/utils/env_aware_utils.js +12 -7
  250. package/dist/esm/utils/error_utils.js +37 -1
  251. package/dist/esm/utils/failover_utils.js +11 -10
  252. package/dist/esm/utils/gemini_schema_util.js +144 -14
  253. package/dist/esm/utils/id_provider.js +33 -0
  254. package/dist/esm/utils/logger_node.js +4 -0
  255. package/dist/esm/utils/model_name.js +14 -0
  256. package/dist/esm/utils/output_schema_utils.js +5 -2
  257. package/dist/esm/utils/simple_zod_to_json.js +13 -31
  258. package/dist/esm/utils/ssrf_guard.js +55 -15
  259. package/dist/esm/utils/task.js +1 -1
  260. package/dist/esm/version.js +1 -1
  261. package/dist/esm/workflow/index.js +2 -1
  262. package/dist/esm/workflow/node_runner.js +26 -80
  263. package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
  264. package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
  265. package/dist/esm/workflow/utils/retry_utils.js +2 -2
  266. package/dist/esm/workflow/workflow.js +12 -12
  267. package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
  268. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
  269. package/dist/types/agents/agent_engine_client.d.ts +155 -0
  270. package/dist/types/agents/base_agent.d.ts +14 -0
  271. package/dist/types/agents/llm_agent.d.ts +5 -1
  272. package/dist/types/agents/processors/content_processor_utils.d.ts +12 -10
  273. package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
  274. package/dist/types/agents/run_config.d.ts +14 -0
  275. package/dist/types/cli/cli_eval.d.ts +172 -9
  276. package/dist/types/cli/utils/cleanup.d.ts +18 -0
  277. package/dist/types/cli/utils/envs.d.ts +13 -3
  278. package/dist/types/cli/utils/evals.d.ts +64 -1
  279. package/dist/types/cli/utils/logs.d.ts +20 -3
  280. package/dist/types/cli/utils/path_validation.d.ts +30 -0
  281. package/dist/types/code_executors/container_code_executor.d.ts +62 -9
  282. package/dist/types/common.d.ts +21 -18
  283. package/dist/types/context/compaction_utils.d.ts +13 -1
  284. package/dist/types/errors/input_validation_error.d.ts +2 -1
  285. package/dist/types/events/event.d.ts +3 -0
  286. package/dist/types/features/feature_registry.d.ts +1 -0
  287. package/dist/types/index.d.ts +11 -6
  288. package/dist/types/plugins/base_plugin.d.ts +50 -31
  289. package/dist/types/plugins/plugin_manager.d.ts +13 -0
  290. package/dist/types/runner/runner.d.ts +11 -0
  291. package/dist/types/sessions/base_session_service.d.ts +5 -2
  292. package/dist/types/sessions/database_session_service.d.ts +17 -1
  293. package/dist/types/sessions/db/operations.d.ts +2 -1
  294. package/dist/types/sessions/db/schema.d.ts +5 -3
  295. package/dist/types/sessions/stale_session_error.d.ts +21 -0
  296. package/dist/types/skills/loader.d.ts +3 -2
  297. package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
  298. package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
  299. package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
  300. package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
  301. package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
  302. package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
  303. package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
  304. package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
  305. package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
  306. package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
  307. package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
  308. package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
  309. package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
  310. package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
  311. package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
  312. package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
  313. package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
  314. package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
  315. package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
  316. package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
  317. package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
  318. package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
  319. package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
  320. package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
  321. package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
  322. package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
  323. package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
  324. package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
  325. package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
  326. package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
  327. package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
  328. package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
  329. package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
  330. package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
  331. package/dist/types/tools/agent_tool.d.ts +1 -1
  332. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +14 -21
  333. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +32 -9
  334. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +35 -12
  335. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +3 -3
  336. package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
  337. package/dist/types/tools/base_toolset.d.ts +7 -6
  338. package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
  339. package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
  340. package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
  341. package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
  342. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +10 -3
  343. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +57 -0
  344. package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
  345. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +5 -4
  346. package/dist/types/tools/google_api_tool/index.d.ts +4 -5
  347. package/dist/types/tools/load_artifacts_tool.d.ts +18 -1
  348. package/dist/types/tools/load_memory_tool.d.ts +32 -4
  349. package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
  350. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
  351. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
  352. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +15 -3
  353. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
  354. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
  355. package/dist/types/tools/toolbox_toolset.d.ts +154 -0
  356. package/dist/types/utils/async_queue.d.ts +14 -0
  357. package/dist/types/utils/client_labels.d.ts +2 -1
  358. package/dist/types/utils/env_aware_utils.d.ts +11 -0
  359. package/dist/types/utils/error_utils.d.ts +4 -0
  360. package/dist/types/utils/gemini_schema_util.d.ts +29 -0
  361. package/dist/types/utils/id_provider.d.ts +43 -0
  362. package/dist/types/utils/model_name.d.ts +8 -0
  363. package/dist/types/utils/output_schema_utils.d.ts +3 -2
  364. package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
  365. package/dist/types/utils/ssrf_guard.d.ts +2 -0
  366. package/dist/types/version.d.ts +1 -1
  367. package/dist/types/workflow/index.d.ts +1 -1
  368. package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
  369. package/dist/web/index_web.js +94 -88
  370. package/dist/web/index_web.js.map +4 -4
  371. package/package.json +43 -38
  372. package/dist/cjs/agents/remote_agent.js +0 -187
  373. package/dist/cjs/telemetry/google_cloud.js +0 -116
  374. package/dist/cjs/telemetry/tracing.js +0 -350
  375. package/dist/cjs/tools/crewai_tool.js +0 -132
  376. package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +0 -226
  377. package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +0 -58
  378. package/dist/cjs/tools/langchain_tool.js +0 -172
  379. package/dist/cjs/tools/toolbox_tool.js +0 -108
  380. package/dist/esm/agents/remote_agent.js +0 -164
  381. package/dist/esm/telemetry/google_cloud.js +0 -99
  382. package/dist/esm/telemetry/setup.js +0 -89
  383. package/dist/esm/telemetry/tracing.js +0 -315
  384. package/dist/esm/tools/crewai_tool.js +0 -107
  385. package/dist/esm/tools/google_api_tool/google_api_tool_set.js +0 -188
  386. package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +0 -24
  387. package/dist/esm/tools/langchain_tool.js +0 -148
  388. package/dist/esm/tools/toolbox_tool.js +0 -80
  389. package/dist/types/agents/remote_agent.d.ts +0 -68
  390. package/dist/types/telemetry/google_cloud.d.ts +0 -9
  391. package/dist/types/telemetry/tracing.d.ts +0 -129
  392. package/dist/types/tools/crewai_tool.d.ts +0 -85
  393. package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +0 -78
  394. package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +0 -33
  395. package/dist/types/tools/langchain_tool.d.ts +0 -103
  396. package/dist/types/tools/toolbox_tool.d.ts +0 -73
@@ -28,11 +28,9 @@ __export(node_runner_exports, {
28
28
  executeChildNode: () => executeChildNode
29
29
  });
30
30
  module.exports = __toCommonJS(node_runner_exports);
31
- var import_api = require("@opentelemetry/api");
32
31
  var import_invocation_context = require("../agents/invocation_context.js");
33
32
  var import_event = require("../events/event.js");
34
- var import_tracing = require("../telemetry/tracing.js");
35
- var import_error_utils = require("../utils/error_utils.js");
33
+ var import_instrumentation = require("../telemetry/api/instrumentation.js");
36
34
  var import_branch_path = require("./branch_path.js");
37
35
  var import_errors = require("./errors.js");
38
36
  var import_node_context = require("./node_context.js");
@@ -50,11 +48,12 @@ function executeChildNode(params) {
50
48
  const { parent, node, options = {} } = params;
51
49
  const nodeName = (_a = options.nodeName) != null ? _a : node.name;
52
50
  const nodePath = (_b = options.overrideNodePath) != null ? _b : parent.nodePath ? `${parent.nodePath}.${nodeName}` : nodeName;
53
- const span = import_tracing.tracer.startSpan(`execute_node ${nodeName}`);
54
- return import_api.context.with(
55
- import_api.trace.setSpan(import_api.context.active(), span),
56
- () => runChildNode({ params, nodeName, nodePath, span })
57
- );
51
+ const scope = (0, import_instrumentation.recordNodeInvocation)({
52
+ node,
53
+ nodeName,
54
+ sessionId: parent.invocationContext.session.id
55
+ });
56
+ return scope.run(() => runChildNode({ params, nodeName, nodePath, scope }));
58
57
  }
59
58
  __name(executeChildNode, "executeChildNode");
60
59
  async function runChildNode({
@@ -69,7 +68,7 @@ async function runChildNode({
69
68
  },
70
69
  nodeName,
71
70
  nodePath,
72
- span
71
+ scope
73
72
  }) {
74
73
  var _a, _b, _c, _d;
75
74
  const runId = (_a = options.runId) != null ? _a : nodeName;
@@ -123,13 +122,6 @@ async function runChildNode({
123
122
  });
124
123
  if (skipOutput !== void 0) {
125
124
  child.output = skipOutput;
126
- (0, import_tracing.traceNodeExecution)({
127
- nodePath,
128
- runId,
129
- attempt: nodeState.attemptCount,
130
- status: "completed",
131
- interruptCount: child.interruptIds.length
132
- });
133
125
  if (options.useAsOutput) {
134
126
  parent.output = child.output;
135
127
  parent.route = child.route;
@@ -143,16 +135,14 @@ async function runChildNode({
143
135
  resetState(child);
144
136
  child.attemptCount = nodeState.attemptCount;
145
137
  try {
146
- inputRecorded = await runAttempt({
138
+ inputRecorded = await runOnce({
147
139
  node,
148
140
  child,
149
141
  input,
150
142
  nodeName,
151
143
  branch,
152
144
  isolationScope,
153
- nodePath,
154
- runId,
155
- attempt: nodeState.attemptCount
145
+ scope
156
146
  });
157
147
  failIfNodeReportedError(child, nodeName);
158
148
  succeeded = true;
@@ -179,13 +169,6 @@ async function runChildNode({
179
169
  if (!inputRecorded && child.interruptIds.length > 0) {
180
170
  recordInputForResume({ child, nodeName, branch, isolationScope, input });
181
171
  }
182
- (0, import_tracing.traceNodeExecution)({
183
- nodePath,
184
- runId,
185
- attempt: nodeState.attemptCount,
186
- status: child.interruptIds.length > 0 ? "waiting" : "completed",
187
- interruptCount: child.interruptIds.length
188
- });
189
172
  if (pluginManager == null ? void 0 : pluginManager.hasPlugins) {
190
173
  const replacedOutput = await pluginManager.runAfterNodeCallback({
191
174
  node,
@@ -203,58 +186,13 @@ async function runChildNode({
203
186
  }
204
187
  return child;
205
188
  } catch (err) {
206
- (0, import_tracing.traceNodeExecution)({
207
- nodePath,
208
- runId,
209
- attempt: nodeState.attemptCount,
210
- status: "failed",
211
- interruptCount: child.interruptIds.length
212
- });
213
- span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: (0, import_error_utils.formatError)(err) });
189
+ scope.end(err);
214
190
  throw err;
215
191
  } finally {
216
- span.end();
192
+ scope.end();
217
193
  }
218
194
  }
219
195
  __name(runChildNode, "runChildNode");
220
- function runAttempt(params) {
221
- const { node, nodePath, runId, attempt } = params;
222
- if (!node.preparedRetryConfig) {
223
- return runOnce(params);
224
- }
225
- return import_tracing.tracer.startActiveSpan(
226
- `execute_node_attempt ${params.nodeName}`,
227
- async (span) => {
228
- try {
229
- const inputRecorded = await runOnce(params);
230
- (0, import_tracing.traceNodeExecution)({
231
- nodePath,
232
- runId,
233
- attempt,
234
- status: params.child.interruptIds.length > 0 ? "waiting" : "completed",
235
- interruptCount: params.child.interruptIds.length
236
- });
237
- return inputRecorded;
238
- } catch (err) {
239
- (0, import_tracing.traceNodeExecution)({
240
- nodePath,
241
- runId,
242
- attempt,
243
- status: "failed",
244
- interruptCount: params.child.interruptIds.length
245
- });
246
- span.setStatus({
247
- code: import_api.SpanStatusCode.ERROR,
248
- message: (0, import_error_utils.formatError)(err)
249
- });
250
- throw err;
251
- } finally {
252
- span.end();
253
- }
254
- }
255
- );
256
- }
257
- __name(runAttempt, "runAttempt");
258
196
  function failIfNodeReportedError(child, nodeName) {
259
197
  const reported = child.reportedError;
260
198
  if (!reported || child.output !== void 0 || child.route !== void 0 || child.interruptIds.length > 0) {
@@ -281,11 +219,12 @@ async function runOnce({
281
219
  input,
282
220
  nodeName,
283
221
  branch,
284
- isolationScope
222
+ isolationScope,
223
+ scope
285
224
  }) {
286
225
  var _a;
287
226
  let inputRecorded = false;
288
- const consume = /* @__PURE__ */ __name((event) => {
227
+ const consume = /* @__PURE__ */ __name(async (event) => {
289
228
  var _a2, _b, _c;
290
229
  enrichEvent({ event, child, nodeName, branch, isolationScope });
291
230
  const emittedDelta = (_a2 = event.actions) == null ? void 0 : _a2.stateDelta;
@@ -324,13 +263,18 @@ async function runOnce({
324
263
  };
325
264
  inputRecorded = true;
326
265
  }
327
- child.channel.push(event);
266
+ scope.recordEvent(event);
267
+ if (event.partial) {
268
+ child.channel.push(event);
269
+ } else {
270
+ await child.channel.pushAndWait(event);
271
+ }
328
272
  }, "consume");
329
273
  const parentSignal = child.invocationContext.abortSignal;
330
274
  const hasTimeout = typeof node.timeout === "number" && node.timeout > 0;
331
275
  if (!hasTimeout && !parentSignal) {
332
276
  for await (const event of node.run(child, input)) {
333
- consume(event);
277
+ await consume(event);
334
278
  }
335
279
  return inputRecorded;
336
280
  }
@@ -338,7 +282,7 @@ async function runOnce({
338
282
  child.abortSignal = parentSignal;
339
283
  try {
340
284
  for await (const event of node.run(child, input)) {
341
- consume(event);
285
+ await consume(event);
342
286
  }
343
287
  } finally {
344
288
  child.abortSignal = void 0;
@@ -378,7 +322,7 @@ async function runOnce({
378
322
  try {
379
323
  let result = await Promise.race([iterator.next(), aborted]);
380
324
  while (!result.done) {
381
- consume(result.value);
325
+ await Promise.race([consume(result.value), aborted]);
382
326
  result = await Promise.race([iterator.next(), aborted]);
383
327
  }
384
328
  } finally {
@@ -25,7 +25,8 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var parallel_worker_exports = {};
27
27
  __export(parallel_worker_exports, {
28
- ParallelWorker: () => ParallelWorker
28
+ ParallelWorker: () => ParallelWorker,
29
+ isParallelWorker: () => isParallelWorker
29
30
  });
30
31
  module.exports = __toCommonJS(parallel_worker_exports);
31
32
  var import_base_node = require("../base_node.js");
@@ -36,11 +37,16 @@ var import_workflow_graph_utils = require("../utils/workflow_graph_utils.js");
36
37
  * Copyright 2026 Google LLC
37
38
  * SPDX-License-Identifier: Apache-2.0
38
39
  */
40
+ var _a, _b;
39
41
  const DEFAULT_MAX_PARALLEL_WORKERS = 8;
40
- const _ParallelWorker = class _ParallelWorker extends import_base_node.BaseNode {
42
+ const PARALLEL_WORKER_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
43
+ "google.adk.workflow.parallelWorker"
44
+ );
45
+ const _ParallelWorker = class _ParallelWorker extends (_b = import_base_node.BaseNode, _a = PARALLEL_WORKER_SIGNATURE_SYMBOL, _b) {
41
46
  constructor(inner, config = {}) {
42
47
  const built = (0, import_workflow_graph_utils.buildNode)(inner);
43
48
  super({ name: built.name, rerunOnResume: true });
49
+ this[_a] = true;
44
50
  if (config.maxParallelWorkers !== void 0 && config.maxParallelWorkers < 1) {
45
51
  throw new Error("maxParallelWorkers must be greater than or equal to 1.");
46
52
  }
@@ -48,7 +54,7 @@ const _ParallelWorker = class _ParallelWorker extends import_base_node.BaseNode
48
54
  this.maxParallelWorkers = config.maxParallelWorkers;
49
55
  }
50
56
  async *runImpl(ctx, input) {
51
- var _a;
57
+ var _a2;
52
58
  const items = Array.isArray(input) ? input : [input];
53
59
  if (items.length === 0) {
54
60
  yield [];
@@ -56,7 +62,7 @@ const _ParallelWorker = class _ParallelWorker extends import_base_node.BaseNode
56
62
  }
57
63
  const results = new Array(items.length);
58
64
  const poolSize = Math.min(
59
- (_a = this.maxParallelWorkers) != null ? _a : DEFAULT_MAX_PARALLEL_WORKERS,
65
+ (_a2 = this.maxParallelWorkers) != null ? _a2 : DEFAULT_MAX_PARALLEL_WORKERS,
60
66
  items.length
61
67
  );
62
68
  let nextIndex = 0;
@@ -65,8 +71,8 @@ const _ParallelWorker = class _ParallelWorker extends import_base_node.BaseNode
65
71
  let interrupted = false;
66
72
  const interruptIds = [];
67
73
  const isAborted = /* @__PURE__ */ __name(() => {
68
- var _a2, _b;
69
- return ((_a2 = ctx.abortSignal) == null ? void 0 : _a2.aborted) === true || ((_b = ctx.invocationContext.abortSignal) == null ? void 0 : _b.aborted) === true;
74
+ var _a3, _b2;
75
+ return ((_a3 = ctx.abortSignal) == null ? void 0 : _a3.aborted) === true || ((_b2 = ctx.invocationContext.abortSignal) == null ? void 0 : _b2.aborted) === true;
70
76
  }, "isAborted");
71
77
  const worker = /* @__PURE__ */ __name(async () => {
72
78
  while (!failed && !interrupted && !isAborted()) {
@@ -123,7 +129,12 @@ const _ParallelWorker = class _ParallelWorker extends import_base_node.BaseNode
123
129
  };
124
130
  __name(_ParallelWorker, "ParallelWorker");
125
131
  let ParallelWorker = _ParallelWorker;
132
+ function isParallelWorker(value) {
133
+ return typeof value === "object" && value !== null && PARALLEL_WORKER_SIGNATURE_SYMBOL in value && value[PARALLEL_WORKER_SIGNATURE_SYMBOL] === true;
134
+ }
135
+ __name(isParallelWorker, "isParallelWorker");
126
136
  // Annotate the CommonJS export names for ESM import in node:
127
137
  0 && (module.exports = {
128
- ParallelWorker
138
+ ParallelWorker,
139
+ isParallelWorker
129
140
  });
@@ -42,9 +42,7 @@ async function* runLlmAgentAsNode(agent, ctx, nodeInput) {
42
42
  if (!isTaskMode && !agent.includeContentsExplicit) {
43
43
  agent.includeContents = "none";
44
44
  }
45
- if (!isTaskMode) {
46
- await appendNodeInputAsUserTurn(ctx, nodeInput);
47
- }
45
+ const inputEvent = isTaskMode ? void 0 : pushNodeInputAsUserTurn(ctx, nodeInput);
48
46
  const agentIc = withWorkflowInstructionScope(ctx.getInvocationContext(), {
49
47
  input: nodeInput,
50
48
  outputsByNode: collectPredecessorOutputs(ctx)
@@ -53,15 +51,19 @@ async function* runLlmAgentAsNode(agent, ctx, nodeInput) {
53
51
  yield* runTaskMode(ctx, agentIc, agent);
54
52
  return;
55
53
  }
56
- for await (const event of agent.runAsync(agentIc)) {
57
- maybeSetOutput(agent, event);
58
- yield event;
54
+ try {
55
+ for await (const event of agent.runAsync(agentIc)) {
56
+ maybeSetOutput(agent, event);
57
+ yield event;
58
+ }
59
+ } finally {
60
+ removeEvent(ctx.session.events, inputEvent);
59
61
  }
60
62
  }
61
63
  __name(runLlmAgentAsNode, "runLlmAgentAsNode");
62
- async function appendNodeInputAsUserTurn(ctx, nodeInput) {
64
+ function pushNodeInputAsUserTurn(ctx, nodeInput) {
63
65
  if (nodeInput === void 0 || nodeInput === null) {
64
- return;
66
+ return void 0;
65
67
  }
66
68
  const userEvent = (0, import_event.createEvent)({
67
69
  author: "user",
@@ -72,14 +74,17 @@ async function appendNodeInputAsUserTurn(ctx, nodeInput) {
72
74
  if (ctx.isolationScope !== void 0) {
73
75
  userEvent.isolationScope = ctx.isolationScope;
74
76
  }
75
- const sessionService = ctx.invocationContext.sessionService;
76
- if (sessionService) {
77
- await sessionService.appendEvent({ session: ctx.session, event: userEvent });
78
- } else {
79
- ctx.session.events.push(userEvent);
77
+ ctx.session.events.push(userEvent);
78
+ return userEvent;
79
+ }
80
+ __name(pushNodeInputAsUserTurn, "pushNodeInputAsUserTurn");
81
+ function removeEvent(events, event) {
82
+ const index = event ? events.indexOf(event) : -1;
83
+ if (index !== -1) {
84
+ events.splice(index, 1);
80
85
  }
81
86
  }
82
- __name(appendNodeInputAsUserTurn, "appendNodeInputAsUserTurn");
87
+ __name(removeEvent, "removeEvent");
83
88
  async function* runTaskMode(ctx, agentIc, agent) {
84
89
  var _a, _b;
85
90
  const finishTool = agent.finishTaskTool;
@@ -42,7 +42,7 @@ const DEFAULT_MAX_DELAY_SECONDS = 60;
42
42
  const DEFAULT_BACKOFF_FACTOR = 2;
43
43
  const DEFAULT_JITTER = 1;
44
44
  function errorNames(error) {
45
- var _a;
45
+ var _a, _b, _c;
46
46
  if (error instanceof Error) {
47
47
  const names = [(_a = error.constructor) == null ? void 0 : _a.name, error.name].filter(
48
48
  (name) => !!name
@@ -50,7 +50,7 @@ function errorNames(error) {
50
50
  return [...new Set(names)];
51
51
  }
52
52
  if (typeof error === "object" && error !== null) {
53
- return [error.constructor.name];
53
+ return [(_c = (_b = error.constructor) == null ? void 0 : _b.name) != null ? _c : "Object"];
54
54
  }
55
55
  return [typeof error];
56
56
  }
@@ -37,8 +37,7 @@ __export(workflow_exports, {
37
37
  isWorkflow: () => isWorkflow
38
38
  });
39
39
  module.exports = __toCommonJS(workflow_exports);
40
- var import_api = require("@opentelemetry/api");
41
- var import_tracing = require("../telemetry/tracing.js");
40
+ var import_instrumentation = require("../telemetry/api/instrumentation.js");
42
41
  var import_experimental = require("../utils/experimental.js");
43
42
  var import_base_node = require("./base_node.js");
44
43
  var import_branch_path = require("./branch_path.js");
@@ -111,19 +110,20 @@ let Workflow = class extends (_b = import_base_node.BaseNode, _a = WORKFLOW_SIGN
111
110
  dynamicState,
112
111
  abort.controller.signal
113
112
  );
114
- const span = import_tracing.tracer.startSpan(`invoke_workflow ${this.name}`);
113
+ const telemetryScope = (0, import_instrumentation.recordWorkflowInvocation)({
114
+ workflow: this,
115
+ sessionId: ctx.invocationContext.session.id
116
+ });
115
117
  try {
116
- await import_api.context.with(import_api.trace.setSpan(import_api.context.active(), span), () => {
117
- (0, import_tracing.traceWorkflowInvocation)({
118
- workflowName: this.name,
119
- nodePath: ctx.nodePath,
120
- sessionId: ctx.invocationContext.session.id
121
- });
122
- return this.orchestrate(ctx, nodeInput, dynamicState, abort.controller);
123
- });
118
+ await telemetryScope.run(
119
+ () => this.orchestrate(ctx, nodeInput, dynamicState, abort.controller)
120
+ );
121
+ } catch (error) {
122
+ telemetryScope.end(error);
123
+ throw error;
124
124
  } finally {
125
125
  abort.dispose();
126
- span.end();
126
+ telemetryScope.end();
127
127
  }
128
128
  }
129
129
  /**
@@ -10,9 +10,15 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
10
10
  import {
11
11
  AGENT_CARD_PATH
12
12
  } from "@a2a-js/sdk";
13
- import { ClientFactory } from "@a2a-js/sdk/client";
13
+ import {
14
+ ClientFactory,
15
+ ClientFactoryOptions,
16
+ JsonRpcTransportFactory,
17
+ RestTransportFactory
18
+ } from "@a2a-js/sdk/client";
14
19
  import { BaseAgent } from "../agents/base_agent.js";
15
20
  import { createEvent } from "../events/event.js";
21
+ import { propagateTraceContext } from "../telemetry/api/instrumentation.js";
16
22
  import { randomUUID } from "../utils/env_aware_utils.js";
17
23
  import { logger } from "../utils/logger.js";
18
24
  import { MessageRole } from "./a2a_event.js";
@@ -26,6 +32,18 @@ import {
26
32
  import { resolveAgentCard } from "./agent_card.js";
27
33
  import { toAdkEvent } from "./event_converter_utils.js";
28
34
  import { getA2ASessionMetadata } from "./metadata_converter_utils.js";
35
+ function createTracePropagatingClientFactory() {
36
+ const fetchImpl = propagateTraceContext();
37
+ return new ClientFactory(
38
+ ClientFactoryOptions.createFrom(ClientFactoryOptions.default, {
39
+ transports: [
40
+ new JsonRpcTransportFactory({ fetchImpl }),
41
+ new RestTransportFactory({ fetchImpl })
42
+ ]
43
+ })
44
+ );
45
+ }
46
+ __name(createTracePropagatingClientFactory, "createTracePropagatingClientFactory");
29
47
  const _RemoteA2AAgent = class _RemoteA2AAgent extends BaseAgent {
30
48
  constructor(a2aConfig) {
31
49
  super(a2aConfig);
@@ -36,6 +54,7 @@ const _RemoteA2AAgent = class _RemoteA2AAgent extends BaseAgent {
36
54
  }
37
55
  }
38
56
  async init() {
57
+ var _a;
39
58
  if (this.isInitialized) {
40
59
  return;
41
60
  }
@@ -48,7 +67,7 @@ const _RemoteA2AAgent = class _RemoteA2AAgent extends BaseAgent {
48
67
  this.a2aConfig.resolveAgentCardOptions
49
68
  );
50
69
  if (!this.client) {
51
- const factory = this.a2aConfig.clientFactory || new ClientFactory();
70
+ const factory = (_a = this.a2aConfig.clientFactory) != null ? _a : createTracePropagatingClientFactory();
52
71
  this.client = await factory.createFromAgentCard(this.card);
53
72
  }
54
73
  }
@@ -64,7 +83,8 @@ const _RemoteA2AAgent = class _RemoteA2AAgent extends BaseAgent {
64
83
  }
65
84
  const userFnCall = getUserFunctionCallAt(
66
85
  context.session,
67
- events.length - 1
86
+ events.length - 1,
87
+ this.name
68
88
  );
69
89
  let parts;
70
90
  let taskId = void 0;
@@ -14,7 +14,8 @@ import { camelCaseKeys } from "../utils/case_utils.js";
14
14
  import { logger } from "../utils/logger.js";
15
15
  import { AdkMetadataKeys } from "./metadata_converter_utils.js";
16
16
  import { toA2AParts } from "./part_converter_utils.js";
17
- function getUserFunctionCallAt(session, index) {
17
+ function getUserFunctionCallAt(session, index, agentName) {
18
+ var _a, _b;
18
19
  const events = session.events;
19
20
  if (index < 0 || index >= events.length) {
20
21
  return void 0;
@@ -23,13 +24,16 @@ function getUserFunctionCallAt(session, index) {
23
24
  if (candidate.author !== "user") {
24
25
  return void 0;
25
26
  }
26
- const fnCallId = getFunctionResponseCallId(candidate);
27
- if (!fnCallId) {
27
+ const fnCallIds = (_b = (_a = candidate.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.map((part) => {
28
+ var _a2;
29
+ return (_a2 = part.functionResponse) == null ? void 0 : _a2.id;
30
+ }).filter((id) => !!id);
31
+ if (!(fnCallIds == null ? void 0 : fnCallIds.length)) {
28
32
  return void 0;
29
33
  }
30
34
  for (let i = index - 1; i >= 0; i--) {
31
35
  const request = events[i];
32
- if (!isFunctionCallEvent(request, fnCallId)) {
36
+ if (request.author !== agentName || !fnCallIds.some((callId) => isFunctionCallEvent(request, callId))) {
33
37
  continue;
34
38
  }
35
39
  const metadata = request.customMetadata || {};
@@ -10,14 +10,11 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
10
10
  import { DefaultAgentCardResolver } from "@a2a-js/sdk/client";
11
11
  import * as fs from "node:fs/promises";
12
12
  import { fileURLToPath } from "node:url";
13
- import {
14
- InvocationContext
15
- } from "../agents/invocation_context.js";
16
13
  import { isLlmAgent } from "../agents/llm_agent.js";
17
14
  import { isLoopAgent } from "../agents/loop_agent.js";
18
15
  import { isParallelAgent } from "../agents/parallel_agent.js";
19
- import { ReadonlyContext } from "../agents/readonly_context.js";
20
16
  import { isSequentialAgent } from "../agents/sequential_agent.js";
17
+ import { propagateTraceContext } from "../telemetry/api/instrumentation.js";
21
18
  import { isBaseTool } from "../tools/base_tool.js";
22
19
  import { isBaseToolset } from "../tools/base_toolset.js";
23
20
  import { logger } from "../utils/logger.js";
@@ -36,7 +33,7 @@ async function resolveAgentCard(agentCard, options = {}) {
36
33
  if (source.startsWith("http://") || source.startsWith("https://")) {
37
34
  await refuseLinkLocalHost(source);
38
35
  const resolver = new DefaultAgentCardResolver({
39
- fetchImpl: refuseRedirectFetch
36
+ fetchImpl: tracePropagatingRefuseRedirectFetch
40
37
  });
41
38
  const card = await resolver.resolve(source);
42
39
  validateCardRpcTargets(card, source, options);
@@ -76,6 +73,7 @@ async function refuseRedirectFetch(url, init) {
76
73
  return response;
77
74
  }
78
75
  __name(refuseRedirectFetch, "refuseRedirectFetch");
76
+ const tracePropagatingRefuseRedirectFetch = propagateTraceContext(refuseRedirectFetch);
79
77
  function parseCardUrl(source) {
80
78
  let url;
81
79
  try {
@@ -242,7 +240,7 @@ async function buildLLMAgentSkills(agent) {
242
240
  {
243
241
  id: agent.name,
244
242
  name: "model",
245
- description: await buildDescriptionFromInstructions(agent),
243
+ description: buildAgentDescription(agent),
246
244
  tags: ["llm"]
247
245
  }
248
246
  ];
@@ -311,7 +309,7 @@ function buildAgentDescription(agent) {
311
309
  if (agent.description) {
312
310
  descriptionParts.push(agent.description);
313
311
  }
314
- if (agent.subAgents.length > 0) {
312
+ if (!isLlmAgent(agent) && agent.subAgents.length > 0) {
315
313
  if (isLoopAgent(agent)) {
316
314
  descriptionParts.push(buildLoopAgentDescription(agent));
317
315
  } else if (isParallelAgent(agent)) {
@@ -389,82 +387,6 @@ function buildLoopAgentDescription(agent) {
389
387
  return `${descriptions.join(" ")} in a loop (max ${maxIterations} iterations).`;
390
388
  }
391
389
  __name(buildLoopAgentDescription, "buildLoopAgentDescription");
392
- async function buildDescriptionFromInstructions(agent) {
393
- const descriptionParts = [];
394
- if (agent.description) {
395
- descriptionParts.push(agent.description);
396
- }
397
- if (agent.instruction) {
398
- let instructionStr;
399
- if (typeof agent.instruction === "function") {
400
- const dummyContext = new ReadonlyContext(
401
- new InvocationContext({
402
- agent
403
- })
404
- );
405
- try {
406
- instructionStr = await agent.instruction(dummyContext);
407
- } catch (e) {
408
- logger.warn("Failed to resolve dynamic instruction for AgentCard", e);
409
- instructionStr = "";
410
- }
411
- } else {
412
- instructionStr = agent.instruction;
413
- }
414
- if (instructionStr) {
415
- descriptionParts.push(replacePronouns(instructionStr));
416
- }
417
- }
418
- const root = agent.rootAgent;
419
- if (isLlmAgent(root) && root.globalInstruction) {
420
- let globalInstructionStr;
421
- if (typeof root.globalInstruction === "function") {
422
- const dummyContext = new ReadonlyContext(
423
- new InvocationContext({
424
- agent
425
- })
426
- );
427
- try {
428
- globalInstructionStr = await root.globalInstruction(dummyContext);
429
- } catch (e) {
430
- logger.warn(
431
- "Failed to resolve dynamic global instruction for AgentCard",
432
- e
433
- );
434
- globalInstructionStr = "";
435
- }
436
- } else {
437
- globalInstructionStr = root.globalInstruction;
438
- }
439
- if (globalInstructionStr) {
440
- descriptionParts.push(replacePronouns(globalInstructionStr));
441
- }
442
- }
443
- if (descriptionParts.length > 0) {
444
- return descriptionParts.join(" ");
445
- } else {
446
- return getDefaultAgentDescription(agent);
447
- }
448
- }
449
- __name(buildDescriptionFromInstructions, "buildDescriptionFromInstructions");
450
- function replacePronouns(instruction) {
451
- const substitutions = [
452
- { original: "you were", target: "I was" },
453
- { original: "you are", target: "I am" },
454
- { original: "you're", target: "I am" },
455
- { original: "you've", target: "I have" },
456
- { original: "yours", target: "mine" },
457
- { original: "your", target: "my" },
458
- { original: "you", target: "I" }
459
- ];
460
- let result = instruction;
461
- for (const sub of substitutions) {
462
- const pattern = new RegExp(`\\b${sub.original}\\b`, "gi");
463
- result = result.replace(pattern, sub.target);
464
- }
465
- return result;
466
- }
467
- __name(replacePronouns, "replacePronouns");
468
390
  function getDefaultAgentDescription(agent) {
469
391
  if (isLoopAgent(agent)) {
470
392
  return "A loop workflow agent";
@@ -32,6 +32,7 @@ import { AGENT_CARD_PATH } from "@a2a-js/sdk";
32
32
  import { InMemoryTaskStore } from "@a2a-js/sdk/server";
33
33
  import { StreamingMode } from "../agents/run_config.js";
34
34
  import { InMemorySessionService } from "../sessions/in_memory_session_service.js";
35
+ import { runWithRemoteTraceContext } from "../telemetry/api/instrumentation.js";
35
36
  import { logger } from "../utils/logger.js";
36
37
  import { loadOptionalPeer } from "../utils/optional_peer.js";
37
38
  import {
@@ -52,6 +53,10 @@ async function loadExpressBindings() {
52
53
  return { express: expressModule.default, a2aExpress };
53
54
  }
54
55
  __name(loadExpressBindings, "loadExpressBindings");
56
+ function continueRemoteTrace(req, _res, next) {
57
+ runWithRemoteTraceContext(req.headers, () => next());
58
+ }
59
+ __name(continueRemoteTrace, "continueRemoteTrace");
55
60
  function resolveA2aUserBuilder(options, a2aExpress) {
56
61
  if (options.authentication) {
57
62
  return options.authentication;
@@ -113,6 +118,7 @@ async function toA2a(agent, options = {}) {
113
118
  );
114
119
  app.use(
115
120
  `${basePath}/rest`,
121
+ continueRemoteTrace,
116
122
  a2aExpress.restHandler({
117
123
  requestHandler,
118
124
  userBuilder
@@ -120,6 +126,7 @@ async function toA2a(agent, options = {}) {
120
126
  );
121
127
  app.use(
122
128
  `${basePath}/jsonrpc`,
129
+ continueRemoteTrace,
123
130
  a2aExpress.jsonRpcHandler({
124
131
  requestHandler,
125
132
  userBuilder
@@ -69,7 +69,12 @@ function messageToAdkEvent(msg, invocationId, agentName, branch) {
69
69
  return {
70
70
  ...createAdkEventFromMetadata(msg),
71
71
  invocationId,
72
- author: msg.role === MessageRole.USER ? MessageRole.USER : agentName,
72
+ // The role on a peer's message is the peer's own claim and must not decide
73
+ // authorship: letting `user` through here lets a remote agent post events
74
+ // that read as the local user's, which is a trust anchor elsewhere (tool
75
+ // confirmations are approved only from user-authored events). Attribute the
76
+ // event to the peer, the same way the task and status converters below do.
77
+ author: agentName,
73
78
  branch,
74
79
  content,
75
80
  turnComplete: true,
@@ -184,8 +189,10 @@ function createAdkEventFromMetadata(a2aEvent) {
184
189
  // (set it to a shared ancestor branch, or omit it) to leak its content
185
190
  // into an unrelated sibling agent's LLM context. Every caller of the
186
191
  // `*ToAdkEvent` functions in this file force-sets `branch` from its own
187
- // local `InvocationContext` instead, the same way `author` is handled.
188
- author: metadata[A2AMetadataKeys.AUTHOR],
192
+ // local `InvocationContext` instead, the same way `author` is handled:
193
+ // `author` is likewise never restored from peer metadata here, since every
194
+ // converter sets it from the local context after the spread, so reading it
195
+ // from metadata would be dead and read as if a peer could set the author.
189
196
  partial: metadata[A2AMetadataKeys.PARTIAL],
190
197
  errorCode: metadata[A2AMetadataKeys.ERROR_CODE],
191
198
  errorMessage: metadata[A2AMetadataKeys.ERROR_MESSAGE],