@google/adk 2.2.1 → 2.4.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 (298) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +4 -1
  2. package/dist/cjs/a2a/agent_card.js +102 -26
  3. package/dist/cjs/a2a/agent_to_a2a.js +1 -1
  4. package/dist/cjs/agents/agent_engine_client.js +172 -0
  5. package/dist/cjs/agents/base_agent.js +20 -4
  6. package/dist/cjs/agents/functions.js +227 -25
  7. package/dist/cjs/agents/instructions.js +6 -2
  8. package/dist/cjs/agents/invocation_context.js +26 -4
  9. package/dist/cjs/agents/langgraph_agent.js +152 -0
  10. package/dist/cjs/agents/llm_agent.js +194 -107
  11. package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
  12. package/dist/cjs/agents/processors/code_execution_request_processor.js +18 -6
  13. package/dist/cjs/agents/processors/content_processor_utils.js +38 -10
  14. package/dist/cjs/agents/processors/content_request_processor.js +34 -2
  15. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  16. package/dist/cjs/agents/processors/nl_planning_processor.js +12 -3
  17. package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
  18. package/dist/cjs/auth/auth_handler.js +37 -5
  19. package/dist/cjs/auth/auth_schemes.js +9 -0
  20. package/dist/cjs/cli/cli_eval.js +532 -0
  21. package/dist/cjs/cli/utils/envs.js +116 -0
  22. package/dist/cjs/cli/utils/evals.js +137 -0
  23. package/dist/cjs/cli/utils/logs.js +150 -0
  24. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  25. package/dist/cjs/code_executors/code_execution_utils.js +48 -16
  26. package/dist/cjs/code_executors/code_executor_context.js +6 -2
  27. package/dist/cjs/code_executors/container_code_executor.js +27 -16
  28. package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
  29. package/dist/cjs/common.js +61 -0
  30. package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
  31. package/dist/cjs/context/token_based_context_compactor.js +2 -1
  32. package/dist/cjs/errors/input_validation_error.js +3 -2
  33. package/dist/cjs/events/event.js +4 -2
  34. package/dist/cjs/examples/example_util.js +23 -2
  35. package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
  36. package/dist/cjs/index.js +104 -1
  37. package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
  38. package/dist/cjs/models/gemini_llm_connection.js +16 -8
  39. package/dist/cjs/models/google_llm.js +13 -16
  40. package/dist/cjs/models/llm_response.js +9 -1
  41. package/dist/cjs/models/registry.js +1 -1
  42. package/dist/cjs/models/routed_llm.js +9 -8
  43. package/dist/cjs/planners/plan_re_act_planner.js +1 -1
  44. package/dist/cjs/plugins/base_plugin.js +13 -23
  45. package/dist/cjs/runner/in_memory_runner.js +6 -11
  46. package/dist/cjs/runner/runner.js +105 -33
  47. package/dist/cjs/sessions/base_session_service.js +14 -8
  48. package/dist/cjs/sessions/database_session_service.js +50 -28
  49. package/dist/cjs/sessions/db/operations.js +1 -1
  50. package/dist/cjs/sessions/in_memory_session_service.js +3 -1
  51. package/dist/cjs/sessions/stale_session_error.js +59 -0
  52. package/dist/cjs/sessions/state.js +8 -4
  53. package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
  54. package/dist/cjs/skills/loader.js +52 -18
  55. package/dist/cjs/telemetry/setup.js +0 -1
  56. package/dist/cjs/telemetry/tracing.js +147 -73
  57. package/dist/cjs/tools/agent_tool.js +44 -0
  58. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +137 -0
  59. package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
  60. package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
  61. package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
  62. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +263 -0
  63. package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
  64. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +671 -0
  65. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +223 -0
  66. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +184 -0
  67. package/dist/cjs/tools/example_tool.js +10 -0
  68. package/dist/cjs/tools/function_tool.js +319 -0
  69. package/dist/cjs/tools/google_api_tool/google_api_tool.js +100 -0
  70. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +173 -0
  71. package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
  72. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +440 -0
  73. package/dist/cjs/tools/google_api_tool/index.js +61 -0
  74. package/dist/cjs/tools/load_artifacts_tool.js +12 -6
  75. package/dist/cjs/tools/load_memory_tool.js +12 -10
  76. package/dist/cjs/tools/mcp/index.js +12 -0
  77. package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
  78. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -14
  79. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
  80. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
  81. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
  82. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  83. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  84. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  85. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +14 -2
  86. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
  87. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +17 -1
  88. package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
  89. package/dist/cjs/tools/toolbox_toolset.js +174 -0
  90. package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
  91. package/dist/cjs/utils/client_labels.js +19 -2
  92. package/dist/cjs/utils/env_aware_utils.js +6 -8
  93. package/dist/cjs/utils/error_utils.js +11 -11
  94. package/dist/cjs/utils/failover_utils.js +1 -1
  95. package/dist/cjs/utils/file_extension_utils.js +11 -0
  96. package/dist/cjs/utils/file_utils.js +2 -24
  97. package/dist/cjs/utils/gemini_schema_util.js +28 -7
  98. package/dist/cjs/utils/json_utils.js +49 -0
  99. package/dist/cjs/utils/live_connection_utils.js +4 -5
  100. package/dist/cjs/utils/logger_node.js +11 -1
  101. package/dist/cjs/utils/object_notation_utils.js +6 -3
  102. package/dist/cjs/utils/output_schema_utils.js +5 -2
  103. package/dist/cjs/utils/streaming_utils.js +12 -12
  104. package/dist/cjs/utils/task.js +1 -1
  105. package/dist/cjs/version.js +1 -1
  106. package/dist/esm/a2a/a2a_remote_agent.js +4 -1
  107. package/dist/esm/a2a/agent_card.js +103 -27
  108. package/dist/esm/a2a/agent_to_a2a.js +5 -2
  109. package/dist/esm/agents/agent_engine_client.js +144 -0
  110. package/dist/esm/agents/base_agent.js +20 -4
  111. package/dist/esm/agents/functions.js +226 -25
  112. package/dist/esm/agents/instructions.js +6 -2
  113. package/dist/esm/agents/invocation_context.js +24 -4
  114. package/dist/esm/agents/langgraph_agent.js +123 -0
  115. package/dist/esm/agents/llm_agent.js +204 -110
  116. package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
  117. package/dist/esm/agents/processors/code_execution_request_processor.js +21 -8
  118. package/dist/esm/agents/processors/content_processor_utils.js +38 -10
  119. package/dist/esm/agents/processors/content_request_processor.js +34 -2
  120. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  121. package/dist/esm/agents/processors/nl_planning_processor.js +12 -3
  122. package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
  123. package/dist/esm/auth/auth_handler.js +37 -5
  124. package/dist/esm/auth/auth_schemes.js +8 -0
  125. package/dist/esm/cli/cli_eval.js +510 -0
  126. package/dist/esm/cli/utils/envs.js +78 -0
  127. package/dist/esm/cli/utils/evals.js +109 -0
  128. package/dist/esm/cli/utils/logs.js +111 -0
  129. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  130. package/dist/esm/code_executors/code_execution_utils.js +46 -16
  131. package/dist/esm/code_executors/code_executor_context.js +5 -2
  132. package/dist/esm/code_executors/container_code_executor.js +27 -16
  133. package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
  134. package/dist/esm/common.js +65 -4
  135. package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
  136. package/dist/esm/context/token_based_context_compactor.js +2 -1
  137. package/dist/esm/errors/input_validation_error.js +3 -2
  138. package/dist/esm/events/event.js +4 -2
  139. package/dist/esm/examples/example_util.js +21 -1
  140. package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
  141. package/dist/esm/index.js +114 -2
  142. package/dist/esm/integrations/agent_registry/helpers.js +1 -1
  143. package/dist/esm/models/gemini_llm_connection.js +16 -8
  144. package/dist/esm/models/google_llm.js +14 -17
  145. package/dist/esm/models/llm_response.js +9 -1
  146. package/dist/esm/models/registry.js +1 -1
  147. package/dist/esm/models/routed_llm.js +9 -8
  148. package/dist/esm/planners/plan_re_act_planner.js +1 -1
  149. package/dist/esm/plugins/base_plugin.js +13 -23
  150. package/dist/esm/runner/in_memory_runner.js +6 -11
  151. package/dist/esm/runner/runner.js +105 -33
  152. package/dist/esm/sessions/base_session_service.js +12 -7
  153. package/dist/esm/sessions/database_session_service.js +49 -28
  154. package/dist/esm/sessions/db/operations.js +1 -1
  155. package/dist/esm/sessions/in_memory_session_service.js +3 -1
  156. package/dist/esm/sessions/stale_session_error.js +31 -0
  157. package/dist/esm/sessions/state.js +8 -4
  158. package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
  159. package/dist/esm/skills/loader.js +51 -17
  160. package/dist/esm/telemetry/setup.js +1 -2
  161. package/dist/esm/telemetry/tracing.js +151 -74
  162. package/dist/esm/tools/agent_tool.js +44 -0
  163. package/dist/esm/tools/apihub_tool/apihub_toolset.js +101 -0
  164. package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
  165. package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
  166. package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
  167. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +245 -0
  168. package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
  169. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +629 -0
  170. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +219 -0
  171. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +158 -0
  172. package/dist/esm/tools/example_tool.js +13 -1
  173. package/dist/esm/tools/function_tool.js +316 -0
  174. package/dist/esm/tools/google_api_tool/google_api_tool.js +73 -0
  175. package/dist/esm/tools/google_api_tool/google_api_toolset.js +146 -0
  176. package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
  177. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +393 -0
  178. package/dist/esm/tools/google_api_tool/index.js +31 -0
  179. package/dist/esm/tools/load_artifacts_tool.js +10 -5
  180. package/dist/esm/tools/load_memory_tool.js +12 -10
  181. package/dist/esm/tools/mcp/index.js +6 -0
  182. package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
  183. package/dist/esm/tools/mcp/mcp_toolset.js +1 -14
  184. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
  185. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
  186. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
  187. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  188. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  189. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  190. package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +15 -2
  191. package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
  192. package/dist/esm/tools/openapi_tool/rest_api_tool.js +17 -1
  193. package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
  194. package/dist/esm/tools/toolbox_toolset.js +148 -0
  195. package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
  196. package/dist/esm/utils/client_labels.js +19 -2
  197. package/dist/esm/utils/env_aware_utils.js +6 -8
  198. package/dist/esm/utils/error_utils.js +9 -10
  199. package/dist/esm/utils/failover_utils.js +1 -1
  200. package/dist/esm/utils/file_extension_utils.js +11 -0
  201. package/dist/esm/utils/file_utils.js +2 -23
  202. package/dist/esm/utils/gemini_schema_util.js +27 -7
  203. package/dist/esm/utils/json_utils.js +21 -0
  204. package/dist/esm/utils/live_connection_utils.js +4 -5
  205. package/dist/esm/utils/logger_node.js +11 -1
  206. package/dist/esm/utils/object_notation_utils.js +4 -2
  207. package/dist/esm/utils/output_schema_utils.js +5 -2
  208. package/dist/esm/utils/streaming_utils.js +11 -11
  209. package/dist/esm/utils/task.js +1 -1
  210. package/dist/esm/version.js +1 -1
  211. package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
  212. package/dist/types/a2a/agent_card.d.ts +44 -1
  213. package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
  214. package/dist/types/a2a/index.d.ts +1 -0
  215. package/dist/types/agents/agent_engine_client.d.ts +37 -0
  216. package/dist/types/agents/base_agent.d.ts +12 -0
  217. package/dist/types/agents/functions.d.ts +33 -1
  218. package/dist/types/agents/invocation_context.d.ts +20 -1
  219. package/dist/types/agents/langgraph_agent.d.ts +153 -0
  220. package/dist/types/agents/llm_agent.d.ts +5 -1
  221. package/dist/types/agents/processors/content_processor_utils.d.ts +4 -2
  222. package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
  223. package/dist/types/auth/auth_handler.d.ts +28 -1
  224. package/dist/types/auth/auth_schemes.d.ts +13 -0
  225. package/dist/types/cli/cli_eval.d.ts +173 -0
  226. package/dist/types/cli/utils/envs.d.ts +23 -0
  227. package/dist/types/cli/utils/evals.d.ts +47 -0
  228. package/dist/types/cli/utils/logs.d.ts +38 -0
  229. package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
  230. package/dist/types/code_executors/code_executor_context.d.ts +1 -0
  231. package/dist/types/code_executors/container_code_executor.d.ts +17 -5
  232. package/dist/types/common.d.ts +24 -5
  233. package/dist/types/errors/input_validation_error.d.ts +2 -1
  234. package/dist/types/events/event.d.ts +4 -0
  235. package/dist/types/examples/example_util.d.ts +17 -0
  236. package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
  237. package/dist/types/index.d.ts +19 -2
  238. package/dist/types/models/gemini_llm_connection.d.ts +6 -7
  239. package/dist/types/models/routed_llm.d.ts +1 -1
  240. package/dist/types/plugins/base_plugin.d.ts +0 -10
  241. package/dist/types/runner/in_memory_runner.d.ts +2 -1
  242. package/dist/types/runner/runner.d.ts +34 -0
  243. package/dist/types/sessions/base_session_service.d.ts +5 -0
  244. package/dist/types/sessions/database_session_service.d.ts +17 -1
  245. package/dist/types/sessions/stale_session_error.d.ts +21 -0
  246. package/dist/types/sessions/state.d.ts +5 -1
  247. package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
  248. package/dist/types/skills/loader.d.ts +3 -2
  249. package/dist/types/skills/skill.d.ts +1 -1
  250. package/dist/types/telemetry/tracing.d.ts +20 -4
  251. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +115 -0
  252. package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
  253. package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
  254. package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
  255. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +109 -0
  256. package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
  257. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +229 -0
  258. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
  259. package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
  260. package/dist/types/tools/base_toolset.d.ts +6 -5
  261. package/dist/types/tools/example_tool.d.ts +10 -0
  262. package/dist/types/tools/function_tool.d.ts +32 -0
  263. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +37 -0
  264. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +55 -0
  265. package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
  266. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +165 -0
  267. package/dist/types/tools/google_api_tool/index.d.ts +10 -0
  268. package/dist/types/tools/load_artifacts_tool.d.ts +14 -1
  269. package/dist/types/tools/load_memory_tool.d.ts +23 -1
  270. package/dist/types/tools/mcp/index.d.ts +3 -0
  271. package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
  272. package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
  273. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
  274. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
  275. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
  276. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +8 -0
  277. package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
  278. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
  279. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
  280. package/dist/types/tools/retrieval/base_retrieval_tool.d.ts +15 -0
  281. package/dist/types/tools/toolbox_toolset.d.ts +159 -0
  282. package/dist/types/utils/client_labels.d.ts +2 -1
  283. package/dist/types/utils/env_aware_utils.d.ts +18 -2
  284. package/dist/types/utils/error_utils.d.ts +7 -0
  285. package/dist/types/utils/file_utils.d.ts +6 -1
  286. package/dist/types/utils/gemini_schema_util.d.ts +9 -2
  287. package/dist/types/utils/json_utils.d.ts +11 -0
  288. package/dist/types/utils/object_notation_utils.d.ts +7 -0
  289. package/dist/types/utils/output_schema_utils.d.ts +3 -2
  290. package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
  291. package/dist/types/utils/streaming_utils.d.ts +11 -4
  292. package/dist/types/version.d.ts +1 -1
  293. package/dist/web/index_web.js +117 -110
  294. package/dist/web/index_web.js.map +4 -4
  295. package/package.json +38 -26
  296. package/dist/cjs/models/gemini_continuation.js +0 -232
  297. package/dist/esm/models/gemini_continuation.js +0 -205
  298. package/dist/types/models/gemini_continuation.d.ts +0 -59
@@ -63,7 +63,10 @@ const _RemoteA2AAgent = class _RemoteA2AAgent extends import_base_agent.BaseAgen
63
63
  this.client = this.a2aConfig.client;
64
64
  }
65
65
  if (this.a2aConfig.agentCard) {
66
- this.card = await (0, import_agent_card.resolveAgentCard)(this.a2aConfig.agentCard);
66
+ this.card = await (0, import_agent_card.resolveAgentCard)(
67
+ this.a2aConfig.agentCard,
68
+ this.a2aConfig.resolveAgentCardOptions
69
+ );
67
70
  if (!this.client) {
68
71
  const factory = this.a2aConfig.clientFactory || new import_client.ClientFactory();
69
72
  this.client = await factory.createFromAgentCard(this.card);
@@ -59,19 +59,21 @@ var import_workflow = require("../workflow/workflow.js");
59
59
  * Copyright 2026 Google LLC
60
60
  * SPDX-License-Identifier: Apache-2.0
61
61
  */
62
- const WINDOWS_DRIVE_PROTOCOL = /^[a-z]:$/i;
63
- async function resolveAgentCard(agentCard) {
62
+ async function resolveAgentCard(agentCard, options = {}) {
64
63
  if (typeof agentCard === "object") {
65
64
  return agentCard;
66
65
  }
67
- const url = parseCardUrl(agentCard);
68
- if (url && (0, import_ssrf_guard.isHttpUrl)(url)) {
69
- await assertHostAllowed(url);
66
+ const source = agentCard;
67
+ if (source.startsWith("http://") || source.startsWith("https://")) {
68
+ await refuseLinkLocalHost(source);
70
69
  const resolver = new import_client.DefaultAgentCardResolver({
71
- fetchImpl: noRedirectFetch(agentCard)
70
+ fetchImpl: refuseRedirectFetch
72
71
  });
73
- return resolver.resolve(agentCard);
72
+ const card = await resolver.resolve(source);
73
+ validateCardRpcTargets(card, source, options);
74
+ return card;
74
75
  }
76
+ const url = parseCardUrl(source);
75
77
  if (url && url.protocol !== "file:") {
76
78
  throw new Error(
77
79
  `Unsupported agent card URL scheme "${url.protocol}": ${agentCard}. Use http://, https:// or file://, or pass a filesystem path with no scheme.`
@@ -80,6 +82,31 @@ async function resolveAgentCard(agentCard) {
80
82
  return readAgentCardFile(agentCard, url);
81
83
  }
82
84
  __name(resolveAgentCard, "resolveAgentCard");
85
+ const WINDOWS_DRIVE_PROTOCOL = /^[a-z]:$/i;
86
+ async function refuseLinkLocalHost(source) {
87
+ const hostname = (0, import_ssrf_guard.normalizeHost)(new URL(source).hostname);
88
+ if ((0, import_ssrf_guard.isLocalhostHostname)(hostname)) {
89
+ return;
90
+ }
91
+ const addresses = await (0, import_ssrf_guard.resolveHostAddresses)(hostname);
92
+ if (addresses.some((address) => (0, import_ssrf_guard.isLinkLocalAddress)(address))) {
93
+ throw new Error(
94
+ `Refusing to fetch agent card from a link-local address: ${hostname}`
95
+ );
96
+ }
97
+ }
98
+ __name(refuseLinkLocalHost, "refuseLinkLocalHost");
99
+ async function refuseRedirectFetch(url, init) {
100
+ const response = await fetch(url, { ...init, redirect: "manual" });
101
+ if (response.status === 0 || response.status >= 300 && response.status < 400) {
102
+ const location = response.headers.get("location");
103
+ throw new Error(
104
+ `Refusing to follow a redirect from the agent card endpoint (status ${response.status}, location ${location}): ${url}`
105
+ );
106
+ }
107
+ return response;
108
+ }
109
+ __name(refuseRedirectFetch, "refuseRedirectFetch");
83
110
  function parseCardUrl(source) {
84
111
  let url;
85
112
  try {
@@ -102,32 +129,81 @@ async function readAgentCardFile(source, url) {
102
129
  }
103
130
  }
104
131
  __name(readAgentCardFile, "readAgentCardFile");
105
- function noRedirectFetch(source) {
106
- return async (input, init) => {
107
- const response = await fetch(input, { ...init, redirect: "manual" });
108
- if (isRedirect(response.status)) {
132
+ function validateCardRpcTargets(card, source, options) {
133
+ var _a;
134
+ let parsedSource;
135
+ try {
136
+ parsedSource = new URL(source);
137
+ } catch (err) {
138
+ throw new Error(
139
+ `Invalid agent card source URL: ${source}: ${err.message}`
140
+ );
141
+ }
142
+ const rpcUrls = [
143
+ card.url,
144
+ ...((_a = card.additionalInterfaces) != null ? _a : []).map((i) => i.url)
145
+ ];
146
+ for (const rpcUrl of rpcUrls) {
147
+ let parsed;
148
+ try {
149
+ parsed = new URL(rpcUrl);
150
+ } catch (err) {
109
151
  throw new Error(
110
- `Refusing to follow a redirect while fetching the agent card from ${source} (status ${response.status}, location ${response.headers.get("location")}). Configure the final URL instead.`
152
+ `Invalid RPC URL in agent card: ${rpcUrl}: ${err.message}`
111
153
  );
112
154
  }
113
- return response;
114
- };
155
+ if (parsed.protocol !== "https:" && !isLoopbackHost(parsed.hostname)) {
156
+ if (options.allowInsecureRpc === true) {
157
+ import_logger.logger.warn(
158
+ `SECURITY WARNING: accepting a plaintext http RPC URL on a non-loopback host because \`allowInsecureRpc: true\` was set: ${rpcUrl}. This connection can be intercepted or altered by anything on the network path.`
159
+ );
160
+ } else {
161
+ throw new Error(
162
+ `Agent card RPC URL must use https, or http on a loopback host: ${rpcUrl}`
163
+ );
164
+ }
165
+ }
166
+ if (!sameOriginForRpc(parsedSource, parsed)) {
167
+ if (options.allowCrossOriginRpc === true) {
168
+ import_logger.logger.warn(
169
+ `SECURITY WARNING: accepting an agent card RPC URL whose origin differs from the location the card was fetched from because \`allowCrossOriginRpc: true\` was set (fetched from ${source}): ${rpcUrl}.`
170
+ );
171
+ } else {
172
+ throw new Error(
173
+ `Agent card RPC URL must have the same origin as the location the card was fetched from (${source}): ${rpcUrl}`
174
+ );
175
+ }
176
+ }
177
+ }
115
178
  }
116
- __name(noRedirectFetch, "noRedirectFetch");
117
- function isRedirect(status) {
118
- return status === 0 || status >= 300 && status < 400;
179
+ __name(validateCardRpcTargets, "validateCardRpcTargets");
180
+ function sameOriginForRpc(source, rpc) {
181
+ const sourceIsLoopback = isLoopbackHost(source.hostname);
182
+ const rpcIsLoopback = isLoopbackHost(rpc.hostname);
183
+ if (sourceIsLoopback && rpcIsLoopback) {
184
+ return source.protocol === rpc.protocol && effectivePort(source) === effectivePort(rpc);
185
+ }
186
+ return source.origin === rpc.origin;
119
187
  }
120
- __name(isRedirect, "isRedirect");
121
- async function assertHostAllowed(url) {
122
- const host = (0, import_ssrf_guard.normalizeHost)(url.hostname);
123
- const addresses = await (0, import_ssrf_guard.resolveHostAddresses)(host);
124
- if (addresses.some(import_ssrf_guard.isLinkLocalAddress)) {
125
- throw new Error(
126
- `Refusing to fetch agent card from a link-local address: ${host}`
127
- );
188
+ __name(sameOriginForRpc, "sameOriginForRpc");
189
+ function effectivePort(url) {
190
+ if (url.port) {
191
+ return url.port;
192
+ }
193
+ if (url.protocol === "https:") {
194
+ return "443";
128
195
  }
196
+ if (url.protocol === "http:") {
197
+ return "80";
198
+ }
199
+ return url.port;
200
+ }
201
+ __name(effectivePort, "effectivePort");
202
+ function isLoopbackHost(hostname) {
203
+ const bare = hostname.replace(/^\[|\]$/g, "").toLowerCase();
204
+ return bare === "localhost" || bare === "127.0.0.1" || bare === "::1" || bare === "0.0.0.0" || bare === "::" || /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(bare);
129
205
  }
130
- __name(assertHostAllowed, "assertHostAllowed");
206
+ __name(isLoopbackHost, "isLoopbackHost");
131
207
  async function getA2AAgentCard(agent, transports) {
132
208
  return {
133
209
  name: agent.name,
@@ -87,7 +87,7 @@ async function toA2a(agent, options = {}) {
87
87
  const protocol = (_c = options.protocol) != null ? _c : "http";
88
88
  const basePath = options.basePath || "";
89
89
  const rpcUrl = `${protocol}://${host}:${port}${basePath}`;
90
- const agentCard = options.agentCard ? await (0, import_agent_card.resolveAgentCard)(options.agentCard) : await (0, import_agent_card.getA2AAgentCard)(agent, [
90
+ const agentCard = options.agentCard ? await (0, import_agent_card.resolveAgentCard)(options.agentCard, options.resolveAgentCardOptions) : await (0, import_agent_card.getA2AAgentCard)(agent, [
91
91
  {
92
92
  url: `${rpcUrl}/jsonrpc`,
93
93
  transport: "JSONRPC"
@@ -0,0 +1,172 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var agent_engine_client_exports = {};
27
+ __export(agent_engine_client_exports, {
28
+ AgentEngineClient: () => AgentEngineClient,
29
+ AgentExecutionError: () => AgentExecutionError
30
+ });
31
+ module.exports = __toCommonJS(agent_engine_client_exports);
32
+ var import_aiplatform = require("@google-cloud/aiplatform");
33
+ /**
34
+ * @license
35
+ * Copyright 2026 Google LLC
36
+ * SPDX-License-Identifier: Apache-2.0
37
+ */
38
+ const _AgentExecutionError = class _AgentExecutionError extends Error {
39
+ constructor(message, cause) {
40
+ super(message);
41
+ this.cause = cause;
42
+ this.name = "AgentExecutionError";
43
+ }
44
+ };
45
+ __name(_AgentExecutionError, "AgentExecutionError");
46
+ let AgentExecutionError = _AgentExecutionError;
47
+ function buildInputStruct(config) {
48
+ var _a;
49
+ const value = import_aiplatform.helpers.toValue(config);
50
+ return (_a = value == null ? void 0 : value.structValue) != null ? _a : void 0;
51
+ }
52
+ __name(buildInputStruct, "buildInputStruct");
53
+ function parseOutput(output) {
54
+ return import_aiplatform.helpers.fromValue(output);
55
+ }
56
+ __name(parseOutput, "parseOutput");
57
+ function parseFragment(line) {
58
+ const trimmed = line.trim();
59
+ if (!trimmed) return void 0;
60
+ const payload = trimmed.startsWith("data:") ? trimmed.slice(5).trim() : trimmed;
61
+ if (payload === "[DONE]") return void 0;
62
+ try {
63
+ return JSON.parse(payload);
64
+ } catch (e) {
65
+ throw new AgentExecutionError(
66
+ `Failed to parse stream fragment: ${payload}`,
67
+ e
68
+ );
69
+ }
70
+ }
71
+ __name(parseFragment, "parseFragment");
72
+ async function* parseStream(stream) {
73
+ let buffer = "";
74
+ for await (const chunk of stream) {
75
+ const chunkData = chunk == null ? void 0 : chunk.data;
76
+ if (chunkData === void 0) {
77
+ if (typeof chunk === "object" && chunk !== null) {
78
+ yield chunk;
79
+ }
80
+ continue;
81
+ }
82
+ const dataStr = chunkData instanceof Uint8Array ? new TextDecoder().decode(chunkData) : String(chunkData);
83
+ buffer += dataStr;
84
+ const lines = buffer.split("\n");
85
+ buffer = lines.pop() || "";
86
+ for (const line of lines) {
87
+ const fragment = parseFragment(line);
88
+ if (fragment !== void 0) {
89
+ yield fragment;
90
+ }
91
+ }
92
+ }
93
+ const last = parseFragment(buffer);
94
+ if (last !== void 0) {
95
+ yield last;
96
+ }
97
+ }
98
+ __name(parseStream, "parseStream");
99
+ const _AgentEngineClient = class _AgentEngineClient {
100
+ constructor(config) {
101
+ this.client = new import_aiplatform.v1.ReasoningEngineExecutionServiceClient({
102
+ apiEndpoint: `${config.location}-aiplatform.googleapis.com`
103
+ });
104
+ this.reasoningEnginePath = this.client.reasoningEnginePath(
105
+ config.project,
106
+ config.location,
107
+ config.reasoningEngineId
108
+ );
109
+ }
110
+ /**
111
+ * Creates a remote session.
112
+ *
113
+ * @returns The `create_session` payload returned by the Agent Engine. When
114
+ * `config.sessionId` is omitted the engine generates one, and this is the
115
+ * only place the caller can read it back from.
116
+ */
117
+ async createSession(config) {
118
+ try {
119
+ const [response] = await this.client.queryReasoningEngine({
120
+ name: this.reasoningEnginePath,
121
+ classMethod: "create_session",
122
+ input: buildInputStruct(config)
123
+ });
124
+ return response.output ? parseOutput(response.output) : void 0;
125
+ } catch (err) {
126
+ const message = err instanceof Error ? err.message : String(err);
127
+ throw new AgentExecutionError(
128
+ `Failed to create session: ${message}`,
129
+ err
130
+ );
131
+ }
132
+ }
133
+ async query(config) {
134
+ try {
135
+ const [response] = await this.client.queryReasoningEngine({
136
+ name: this.reasoningEnginePath,
137
+ classMethod: "query",
138
+ input: buildInputStruct(config)
139
+ });
140
+ return response.output ? parseOutput(response.output) : void 0;
141
+ } catch (err) {
142
+ const message = err instanceof Error ? err.message : String(err);
143
+ throw new AgentExecutionError(`Failed to execute query: ${message}`, err);
144
+ }
145
+ }
146
+ async *streamQuery(config) {
147
+ try {
148
+ const stream = this.client.streamQueryReasoningEngine({
149
+ name: this.reasoningEnginePath,
150
+ classMethod: "query",
151
+ input: buildInputStruct(config)
152
+ });
153
+ yield* parseStream(stream);
154
+ } catch (err) {
155
+ if (err instanceof AgentExecutionError) {
156
+ throw err;
157
+ }
158
+ const message = err instanceof Error ? err.message : String(err);
159
+ throw new AgentExecutionError(
160
+ `Failed to execute stream query: ${message}`,
161
+ err
162
+ );
163
+ }
164
+ }
165
+ };
166
+ __name(_AgentEngineClient, "AgentEngineClient");
167
+ let AgentEngineClient = _AgentEngineClient;
168
+ // Annotate the CommonJS export names for ESM import in node:
169
+ 0 && (module.exports = {
170
+ AgentEngineClient,
171
+ AgentExecutionError
172
+ });
@@ -259,6 +259,22 @@ const _BaseAgent = class _BaseAgent extends (_b = import_base_node.BaseNode, _a
259
259
  agent: this
260
260
  });
261
261
  }
262
+ /**
263
+ * The resolved beforeAgentCallback field as a list of SingleAgentCallback.
264
+ *
265
+ * This method is only for use by Agent Development Kit.
266
+ */
267
+ get canonicalBeforeAgentCallbacks() {
268
+ return this.beforeAgentCallback;
269
+ }
270
+ /**
271
+ * The resolved afterAgentCallback field as a list of SingleAgentCallback.
272
+ *
273
+ * This method is only for use by Agent Development Kit.
274
+ */
275
+ get canonicalAfterAgentCallbacks() {
276
+ return this.afterAgentCallback;
277
+ }
262
278
  /**
263
279
  * Runs the before agent callback if it exists.
264
280
  *
@@ -268,11 +284,11 @@ const _BaseAgent = class _BaseAgent extends (_b = import_base_node.BaseNode, _a
268
284
  */
269
285
  async handleBeforeAgentCallback(invocationContext) {
270
286
  var _a2;
271
- if (this.beforeAgentCallback.length === 0) {
287
+ if (this.canonicalBeforeAgentCallbacks.length === 0) {
272
288
  return void 0;
273
289
  }
274
290
  const callbackContext = new import_context.Context({ invocationContext });
275
- for (const callback of this.beforeAgentCallback) {
291
+ for (const callback of this.canonicalBeforeAgentCallbacks) {
276
292
  const content = await callback(callbackContext);
277
293
  if ((_a2 = invocationContext.abortSignal) == null ? void 0 : _a2.aborted) {
278
294
  return;
@@ -307,11 +323,11 @@ const _BaseAgent = class _BaseAgent extends (_b = import_base_node.BaseNode, _a
307
323
  */
308
324
  async handleAfterAgentCallback(invocationContext) {
309
325
  var _a2;
310
- if (this.afterAgentCallback.length === 0) {
326
+ if (this.canonicalAfterAgentCallbacks.length === 0) {
311
327
  return void 0;
312
328
  }
313
329
  const callbackContext = new import_context.Context({ invocationContext });
314
- for (const callback of this.afterAgentCallback) {
330
+ for (const callback of this.canonicalAfterAgentCallbacks) {
315
331
  const content = await callback(callbackContext);
316
332
  if ((_a2 = invocationContext.abortSignal) == null ? void 0 : _a2.aborted) {
317
333
  return;