@google/adk 1.1.0 → 1.3.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 (300) hide show
  1. package/dist/cjs/agents/base_agent.js +19 -1
  2. package/dist/cjs/agents/functions.js +4 -0
  3. package/dist/cjs/agents/instructions.js +81 -33
  4. package/dist/cjs/agents/invocation_context.js +0 -1
  5. package/dist/cjs/agents/llm_agent.js +52 -5
  6. package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +7 -0
  7. package/dist/cjs/agents/processors/basic_llm_request_processor.js +8 -1
  8. package/dist/cjs/agents/processors/content_processor_utils.js +37 -24
  9. package/dist/cjs/agents/processors/content_request_processor.js +7 -0
  10. package/dist/cjs/agents/processors/context_compactor_request_processor.js +12 -0
  11. package/dist/cjs/agents/processors/identity_llm_request_processor.js +7 -0
  12. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +5 -0
  13. package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +9 -1
  14. package/dist/cjs/agents/processors/tool_filter_request_processor.js +7 -1
  15. package/dist/cjs/auth/auth_preprocessor.js +12 -10
  16. package/dist/cjs/auth/oauth2/oauth2_discovery.js +26 -2
  17. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +305 -0
  18. package/dist/cjs/code_executors/code_execution_utils.js +1 -1
  19. package/dist/cjs/code_executors/code_executor_context.js +7 -7
  20. package/dist/cjs/common.js +50 -0
  21. package/dist/cjs/context/summarizers/llm_summarizer.js +11 -0
  22. package/dist/cjs/context/token_based_context_compactor.js +1 -1
  23. package/dist/cjs/events/event.js +4 -2
  24. package/dist/cjs/index.js +14 -0
  25. package/dist/cjs/integrations/agent_registry/agent_registry.js +362 -0
  26. package/dist/cjs/integrations/agent_registry/agent_registry_mcp_toolset.js +122 -0
  27. package/dist/cjs/integrations/agent_registry/helpers.js +57 -0
  28. package/dist/cjs/integrations/agent_registry/types.js +50 -0
  29. package/dist/cjs/memory/vertex_ai_memory_bank_service.js +496 -0
  30. package/dist/cjs/models/gemini_llm_connection.js +62 -19
  31. package/dist/cjs/models/google_llm.js +26 -8
  32. package/dist/cjs/plugins/security_plugin.js +16 -0
  33. package/dist/cjs/runner/in_memory_runner.js +10 -5
  34. package/dist/cjs/runner/runner.js +32 -2
  35. package/dist/cjs/sessions/base_session_service.js +13 -2
  36. package/dist/cjs/sessions/database_session_service.js +51 -5
  37. package/dist/cjs/sessions/db/schema.js +45 -10
  38. package/dist/cjs/sessions/in_memory_session_service.js +72 -15
  39. package/dist/cjs/sessions/registry.js +4 -0
  40. package/dist/cjs/sessions/vertex_ai_session_service.js +429 -0
  41. package/dist/cjs/skills/gcp_skill_registry.js +104 -0
  42. package/dist/cjs/skills/loader.js +65 -0
  43. package/dist/cjs/skills/skill_registry.js +27 -0
  44. package/dist/cjs/tools/agent_tool.js +10 -5
  45. package/dist/cjs/tools/exit_loop_tool.js +9 -0
  46. package/dist/cjs/tools/function_tool.js +7 -2
  47. package/dist/cjs/tools/google_maps_grounding_tool.js +80 -0
  48. package/dist/cjs/tools/long_running_tool.js +2 -1
  49. package/dist/cjs/tools/mcp/mcp_session_manager.js +11 -0
  50. package/dist/cjs/tools/mcp/mcp_tool.js +10 -6
  51. package/dist/cjs/tools/mcp/mcp_toolset.js +26 -3
  52. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +78 -0
  53. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +84 -0
  54. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +133 -0
  55. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +232 -0
  56. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +224 -0
  57. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +127 -0
  58. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +133 -0
  59. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +256 -0
  60. package/dist/cjs/tools/skill/load_skill_resource_tool.js +27 -28
  61. package/dist/cjs/tools/skill/load_skill_tool.js +12 -1
  62. package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -1
  63. package/dist/cjs/tools/skill/search_skills_tool.js +108 -0
  64. package/dist/cjs/tools/skill/skill_toolset.js +40 -5
  65. package/dist/cjs/tools/vertex_rag_retrieval_tool.js +64 -0
  66. package/dist/cjs/utils/async_queue.js +88 -0
  67. package/dist/cjs/utils/case_utils.js +53 -0
  68. package/dist/cjs/utils/env_aware_utils.js +4 -0
  69. package/dist/cjs/utils/file_utils.js +28 -0
  70. package/dist/cjs/utils/gemini_schema_util.js +18 -0
  71. package/dist/cjs/utils/live_connection_utils.js +284 -0
  72. package/dist/cjs/utils/model_name.js +9 -0
  73. package/dist/cjs/utils/partial_copy.js +51 -0
  74. package/dist/cjs/utils/streaming_utils.js +169 -122
  75. package/dist/cjs/utils/vertex_ai_utils.js +50 -0
  76. package/dist/cjs/version.js +1 -1
  77. package/dist/esm/agents/base_agent.js +19 -1
  78. package/dist/esm/agents/functions.js +4 -0
  79. package/dist/esm/agents/instructions.js +81 -33
  80. package/dist/esm/agents/invocation_context.js +0 -1
  81. package/dist/esm/agents/llm_agent.js +53 -5
  82. package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +7 -0
  83. package/dist/esm/agents/processors/basic_llm_request_processor.js +8 -1
  84. package/dist/esm/agents/processors/content_processor_utils.js +35 -23
  85. package/dist/esm/agents/processors/content_request_processor.js +7 -0
  86. package/dist/esm/agents/processors/context_compactor_request_processor.js +12 -0
  87. package/dist/esm/agents/processors/identity_llm_request_processor.js +7 -0
  88. package/dist/esm/agents/processors/instructions_llm_request_processor.js +5 -0
  89. package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +9 -1
  90. package/dist/esm/agents/processors/tool_filter_request_processor.js +7 -1
  91. package/dist/esm/auth/auth_preprocessor.js +12 -10
  92. package/dist/esm/auth/oauth2/oauth2_discovery.js +26 -2
  93. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +281 -0
  94. package/dist/esm/code_executors/code_execution_utils.js +1 -1
  95. package/dist/esm/code_executors/code_executor_context.js +7 -7
  96. package/dist/esm/common.js +43 -1
  97. package/dist/esm/context/summarizers/llm_summarizer.js +11 -0
  98. package/dist/esm/context/token_based_context_compactor.js +1 -1
  99. package/dist/esm/events/event.js +4 -2
  100. package/dist/esm/index.js +11 -0
  101. package/dist/esm/integrations/agent_registry/agent_registry.js +333 -0
  102. package/dist/esm/integrations/agent_registry/agent_registry_mcp_toolset.js +96 -0
  103. package/dist/esm/integrations/agent_registry/helpers.js +28 -0
  104. package/dist/esm/integrations/agent_registry/types.js +20 -0
  105. package/dist/esm/memory/vertex_ai_memory_bank_service.js +468 -0
  106. package/dist/esm/models/gemini_llm_connection.js +62 -19
  107. package/dist/esm/models/google_llm.js +26 -8
  108. package/dist/esm/plugins/security_plugin.js +16 -0
  109. package/dist/esm/runner/in_memory_runner.js +10 -5
  110. package/dist/esm/runner/runner.js +32 -2
  111. package/dist/esm/sessions/base_session_service.js +11 -1
  112. package/dist/esm/sessions/database_session_service.js +51 -5
  113. package/dist/esm/sessions/db/schema.js +44 -10
  114. package/dist/esm/sessions/in_memory_session_service.js +74 -16
  115. package/dist/esm/sessions/registry.js +7 -0
  116. package/dist/esm/sessions/vertex_ai_session_service.js +405 -0
  117. package/dist/esm/skills/gcp_skill_registry.js +78 -0
  118. package/dist/esm/skills/loader.js +64 -0
  119. package/dist/esm/skills/skill_registry.js +7 -0
  120. package/dist/esm/tools/agent_tool.js +10 -5
  121. package/dist/esm/tools/exit_loop_tool.js +9 -0
  122. package/dist/esm/tools/function_tool.js +7 -2
  123. package/dist/esm/tools/google_maps_grounding_tool.js +54 -0
  124. package/dist/esm/tools/long_running_tool.js +2 -1
  125. package/dist/esm/tools/mcp/mcp_session_manager.js +11 -0
  126. package/dist/esm/tools/mcp/mcp_tool.js +10 -6
  127. package/dist/esm/tools/mcp/mcp_toolset.js +26 -3
  128. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +48 -0
  129. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +60 -0
  130. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +111 -0
  131. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +206 -0
  132. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +198 -0
  133. package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +101 -0
  134. package/dist/esm/tools/openapi_tool/openapi_toolset.js +97 -0
  135. package/dist/esm/tools/openapi_tool/rest_api_tool.js +229 -0
  136. package/dist/esm/tools/skill/load_skill_resource_tool.js +26 -27
  137. package/dist/esm/tools/skill/load_skill_tool.js +12 -1
  138. package/dist/esm/tools/skill/run_skill_script_tool.js +12 -1
  139. package/dist/esm/tools/skill/search_skills_tool.js +82 -0
  140. package/dist/esm/tools/skill/skill_toolset.js +40 -5
  141. package/dist/esm/tools/vertex_rag_retrieval_tool.js +36 -0
  142. package/dist/esm/utils/async_queue.js +60 -0
  143. package/dist/esm/utils/case_utils.js +25 -0
  144. package/dist/esm/utils/env_aware_utils.js +4 -0
  145. package/dist/esm/utils/file_utils.js +26 -0
  146. package/dist/esm/utils/gemini_schema_util.js +18 -0
  147. package/dist/esm/utils/live_connection_utils.js +256 -0
  148. package/dist/esm/utils/model_name.js +8 -0
  149. package/dist/esm/utils/partial_copy.js +23 -0
  150. package/dist/esm/utils/streaming_utils.js +167 -121
  151. package/dist/esm/utils/vertex_ai_utils.js +22 -0
  152. package/dist/esm/version.js +1 -1
  153. package/dist/types/a2a/a2a_remote_agent.d.ts +14 -0
  154. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +29 -4
  155. package/dist/types/a2a/event_converter_utils.d.ts +14 -1
  156. package/dist/types/a2a/metadata_converter_utils.d.ts +18 -0
  157. package/dist/types/a2a/part_converter_utils.d.ts +51 -6
  158. package/dist/types/agents/invocation_context.d.ts +0 -9
  159. package/dist/types/agents/llm_agent.d.ts +14 -0
  160. package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +14 -0
  161. package/dist/types/agents/processors/base_llm_processor.d.ts +12 -4
  162. package/dist/types/agents/processors/basic_llm_request_processor.d.ts +12 -0
  163. package/dist/types/agents/processors/content_processor_utils.d.ts +26 -0
  164. package/dist/types/agents/processors/content_request_processor.d.ts +16 -0
  165. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +12 -0
  166. package/dist/types/agents/processors/identity_llm_request_processor.d.ts +11 -0
  167. package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +14 -1
  168. package/dist/types/agents/processors/tool_filter_request_processor.d.ts +12 -1
  169. package/dist/types/agents/run_config.d.ts +15 -0
  170. package/dist/types/code_executors/agent_engine_sandbox_code_executor.d.ts +51 -0
  171. package/dist/types/common.d.ts +19 -1
  172. package/dist/types/context/summarizers/llm_summarizer.d.ts +17 -0
  173. package/dist/types/events/event_actions.d.ts +25 -8
  174. package/dist/types/events/structured_events.d.ts +13 -0
  175. package/dist/types/examples/example_util.d.ts +25 -0
  176. package/dist/types/index.d.ts +6 -0
  177. package/dist/types/integrations/agent_registry/agent_registry.d.ts +94 -0
  178. package/dist/types/integrations/agent_registry/agent_registry_mcp_toolset.d.ts +62 -0
  179. package/dist/types/integrations/agent_registry/helpers.d.ts +7 -0
  180. package/dist/types/integrations/agent_registry/types.d.ts +101 -0
  181. package/dist/types/memory/vertex_ai_memory_bank_service.d.ts +52 -0
  182. package/dist/types/models/base_llm_connection.d.ts +10 -0
  183. package/dist/types/models/gemini_llm_connection.d.ts +15 -4
  184. package/dist/types/models/llm_response.d.ts +10 -1
  185. package/dist/types/plugins/security_plugin.d.ts +30 -0
  186. package/dist/types/runner/in_memory_runner.d.ts +28 -1
  187. package/dist/types/runner/runner.d.ts +47 -0
  188. package/dist/types/sessions/base_session_service.d.ts +22 -0
  189. package/dist/types/sessions/database_session_service.d.ts +1 -1
  190. package/dist/types/sessions/db/schema.d.ts +1 -0
  191. package/dist/types/sessions/in_memory_session_service.d.ts +1 -1
  192. package/dist/types/sessions/vertex_ai_session_service.d.ts +37 -0
  193. package/dist/types/skills/gcp_skill_registry.d.ts +24 -0
  194. package/dist/types/skills/loader.d.ts +7 -0
  195. package/dist/types/skills/skill.d.ts +1 -1
  196. package/dist/types/skills/skill_registry.d.ts +29 -0
  197. package/dist/types/tools/exit_loop_tool.d.ts +9 -0
  198. package/dist/types/tools/function_tool.d.ts +22 -2
  199. package/dist/types/tools/google_maps_grounding_tool.d.ts +22 -0
  200. package/dist/types/tools/long_running_tool.d.ts +11 -1
  201. package/dist/types/tools/mcp/mcp_session_manager.d.ts +3 -0
  202. package/dist/types/tools/mcp/mcp_toolset.d.ts +2 -1
  203. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +25 -0
  204. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +20 -0
  205. package/dist/types/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.d.ts +20 -0
  206. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +34 -0
  207. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +59 -0
  208. package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +23 -0
  209. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +27 -0
  210. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +50 -0
  211. package/dist/types/tools/skill/load_skill_resource_tool.d.ts +1 -1
  212. package/dist/types/tools/skill/search_skills_tool.d.ts +14 -0
  213. package/dist/types/tools/skill/skill_toolset.d.ts +5 -0
  214. package/dist/types/tools/vertex_rag_retrieval_tool.d.ts +42 -0
  215. package/dist/types/utils/async_queue.d.ts +18 -0
  216. package/dist/types/utils/case_utils.d.ts +12 -0
  217. package/dist/types/utils/file_utils.d.ts +2 -0
  218. package/dist/types/utils/live_connection_utils.d.ts +30 -0
  219. package/dist/types/utils/model_name.d.ts +7 -0
  220. package/dist/types/utils/partial_copy.d.ts +13 -0
  221. package/dist/types/utils/streaming_utils.d.ts +7 -17
  222. package/dist/types/utils/vertex_ai_utils.d.ts +14 -0
  223. package/dist/types/version.d.ts +1 -1
  224. package/dist/web/agents/base_agent.js +31 -1
  225. package/dist/web/agents/functions.js +4 -0
  226. package/dist/web/agents/instructions.js +81 -33
  227. package/dist/web/agents/invocation_context.js +0 -1
  228. package/dist/web/agents/llm_agent.js +53 -5
  229. package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +7 -0
  230. package/dist/web/agents/processors/basic_llm_request_processor.js +8 -1
  231. package/dist/web/agents/processors/content_processor_utils.js +53 -23
  232. package/dist/web/agents/processors/content_request_processor.js +7 -0
  233. package/dist/web/agents/processors/context_compactor_request_processor.js +12 -0
  234. package/dist/web/agents/processors/identity_llm_request_processor.js +7 -0
  235. package/dist/web/agents/processors/instructions_llm_request_processor.js +5 -0
  236. package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +9 -1
  237. package/dist/web/agents/processors/tool_filter_request_processor.js +7 -1
  238. package/dist/web/auth/auth_preprocessor.js +12 -10
  239. package/dist/web/auth/oauth2/oauth2_discovery.js +26 -2
  240. package/dist/web/code_executors/agent_engine_sandbox_code_executor.js +281 -0
  241. package/dist/web/code_executors/code_execution_utils.js +1 -1
  242. package/dist/web/code_executors/code_executor_context.js +7 -7
  243. package/dist/web/common.js +43 -1
  244. package/dist/web/context/summarizers/llm_summarizer.js +11 -0
  245. package/dist/web/context/token_based_context_compactor.js +1 -1
  246. package/dist/web/events/event.js +4 -2
  247. package/dist/web/index.js +11 -0
  248. package/dist/web/integrations/agent_registry/agent_registry.js +333 -0
  249. package/dist/web/integrations/agent_registry/agent_registry_mcp_toolset.js +109 -0
  250. package/dist/web/integrations/agent_registry/helpers.js +28 -0
  251. package/dist/web/integrations/agent_registry/types.js +20 -0
  252. package/dist/web/memory/vertex_ai_memory_bank_service.js +475 -0
  253. package/dist/web/models/gemini_llm_connection.js +75 -19
  254. package/dist/web/models/google_llm.js +26 -8
  255. package/dist/web/plugins/security_plugin.js +16 -0
  256. package/dist/web/runner/in_memory_runner.js +10 -5
  257. package/dist/web/runner/runner.js +32 -2
  258. package/dist/web/sessions/base_session_service.js +11 -1
  259. package/dist/web/sessions/database_session_service.js +51 -5
  260. package/dist/web/sessions/db/schema.js +44 -10
  261. package/dist/web/sessions/in_memory_session_service.js +74 -16
  262. package/dist/web/sessions/registry.js +7 -0
  263. package/dist/web/sessions/vertex_ai_session_service.js +416 -0
  264. package/dist/web/skills/gcp_skill_registry.js +78 -0
  265. package/dist/web/skills/loader.js +64 -0
  266. package/dist/web/skills/skill_registry.js +7 -0
  267. package/dist/web/tools/agent_tool.js +10 -5
  268. package/dist/web/tools/exit_loop_tool.js +9 -0
  269. package/dist/web/tools/function_tool.js +7 -2
  270. package/dist/web/tools/google_maps_grounding_tool.js +54 -0
  271. package/dist/web/tools/long_running_tool.js +2 -1
  272. package/dist/web/tools/mcp/mcp_session_manager.js +11 -0
  273. package/dist/web/tools/mcp/mcp_tool.js +10 -6
  274. package/dist/web/tools/mcp/mcp_toolset.js +26 -3
  275. package/dist/web/tools/openapi_tool/auth/auth_helpers.js +48 -0
  276. package/dist/web/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +60 -0
  277. package/dist/web/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +111 -0
  278. package/dist/web/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +221 -0
  279. package/dist/web/tools/openapi_tool/openapi_spec_parser/operation_parser.js +198 -0
  280. package/dist/web/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +101 -0
  281. package/dist/web/tools/openapi_tool/openapi_toolset.js +97 -0
  282. package/dist/web/tools/openapi_tool/rest_api_tool.js +229 -0
  283. package/dist/web/tools/skill/load_skill_resource_tool.js +26 -27
  284. package/dist/web/tools/skill/load_skill_tool.js +12 -1
  285. package/dist/web/tools/skill/run_skill_script_tool.js +12 -1
  286. package/dist/web/tools/skill/search_skills_tool.js +82 -0
  287. package/dist/web/tools/skill/skill_toolset.js +40 -5
  288. package/dist/web/tools/vertex_rag_retrieval_tool.js +36 -0
  289. package/dist/web/utils/async_queue.js +60 -0
  290. package/dist/web/utils/case_utils.js +25 -0
  291. package/dist/web/utils/env_aware_utils.js +4 -0
  292. package/dist/web/utils/file_utils.js +26 -0
  293. package/dist/web/utils/gemini_schema_util.js +18 -0
  294. package/dist/web/utils/live_connection_utils.js +254 -0
  295. package/dist/web/utils/model_name.js +8 -0
  296. package/dist/web/utils/partial_copy.js +23 -0
  297. package/dist/web/utils/streaming_utils.js +221 -122
  298. package/dist/web/utils/vertex_ai_utils.js +22 -0
  299. package/dist/web/version.js +1 -1
  300. package/package.json +4 -1
@@ -13,6 +13,10 @@ import {
13
13
  InMemorySessionService,
14
14
  isInMemoryConnectionString
15
15
  } from "./in_memory_session_service.js";
16
+ import {
17
+ VertexAiSessionService,
18
+ isVertexAiConnectionString
19
+ } from "./vertex_ai_session_service.js";
16
20
  function getSessionServiceFromUri(uri) {
17
21
  if (isInMemoryConnectionString(uri)) {
18
22
  return new InMemorySessionService();
@@ -20,6 +24,9 @@ function getSessionServiceFromUri(uri) {
20
24
  if (isDatabaseConnectionString(uri)) {
21
25
  return new DatabaseSessionService(uri);
22
26
  }
27
+ if (isVertexAiConnectionString(uri)) {
28
+ return new VertexAiSessionService({});
29
+ }
23
30
  throw new Error("Unsupported session service URI: ".concat(uri));
24
31
  }
25
32
  export {
@@ -0,0 +1,416 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __decorateClass = (decorators, target, key, kind) => {
24
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
25
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
26
+ if (decorator = decorators[i])
27
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
28
+ if (kind && result) __defProp(target, key, result);
29
+ return result;
30
+ };
31
+ /**
32
+ * @license
33
+ * Copyright 2026 Google LLC
34
+ * SPDX-License-Identifier: Apache-2.0
35
+ */
36
+ import { Client } from "@google-cloud/vertexai/build/src/genai/client.js";
37
+ import { isCompactedEvent } from "../events/compacted_event.js";
38
+ import { experimental } from "../utils/experimental.js";
39
+ import { logger } from "../utils/logger.js";
40
+ import { getExpressModeApiKey } from "../utils/vertex_ai_utils.js";
41
+ import { partialCopy } from "../utils/partial_copy.js";
42
+ import {
43
+ BaseSessionService,
44
+ trimTempState
45
+ } from "./base_session_service.js";
46
+ import { createSession } from "./session.js";
47
+ const DEFAULT_MAX_ATTEMPTS = 30;
48
+ const GRPC_NOT_FOUND = 5;
49
+ const HTTP_NOT_FOUND = 404;
50
+ function isVertexAiConnectionString(uri) {
51
+ return (uri == null ? void 0 : uri.startsWith("vertexai://")) || false;
52
+ }
53
+ let VertexAiSessionService = class extends BaseSessionService {
54
+ constructor(options) {
55
+ super();
56
+ this.agentEngineId = options.agentEngineId;
57
+ this.projectId = options.projectId;
58
+ this.location = options.location;
59
+ this.expressModeApiKey = getExpressModeApiKey(
60
+ this.projectId,
61
+ this.location,
62
+ options.expressModeApiKey
63
+ );
64
+ if (!options.sessions) {
65
+ if (!this.expressModeApiKey && (!this.projectId || !this.location)) {
66
+ throw new Error(
67
+ "Either (Project ID and Location) or an expressModeApiKey is required."
68
+ );
69
+ }
70
+ }
71
+ if (options.sessions) {
72
+ this.sessions = options.sessions;
73
+ } else {
74
+ const client = new Client({
75
+ project: this.projectId,
76
+ location: this.location
77
+ });
78
+ this.sessions = client.agentEnginesInternal.sessions;
79
+ }
80
+ }
81
+ getReasoningEngineId(appName) {
82
+ if (this.agentEngineId) {
83
+ return this.agentEngineId;
84
+ }
85
+ if (/^\d+$/.test(appName)) {
86
+ return appName;
87
+ }
88
+ const pattern = /^projects\/([a-zA-Z0-9-_]+)\/locations\/([a-zA-Z0-9-_]+)\/reasoningEngines\/(\d+)$/;
89
+ const match = appName.match(pattern);
90
+ if (!match) {
91
+ throw new Error(
92
+ "App name ".concat(appName, " is not valid. It should either be the full ReasoningEngine resource name, or the reasoning engine id.")
93
+ );
94
+ }
95
+ return match[3];
96
+ }
97
+ async createSession({
98
+ appName,
99
+ userId,
100
+ state,
101
+ sessionId
102
+ }) {
103
+ var _a;
104
+ const reasoningEngineId = this.getReasoningEngineId(appName);
105
+ const filteredState = state ? trimTempState(state) : void 0;
106
+ let apiResponse = await this.sessions.createInternal({
107
+ name: "reasoningEngines/".concat(reasoningEngineId),
108
+ userId,
109
+ config: __spreadValues(__spreadValues({}, filteredState ? { sessionState: filteredState } : {}), sessionId ? { sessionId } : {})
110
+ });
111
+ const operationName = apiResponse.name;
112
+ let attempts = 0;
113
+ while (!apiResponse.done && attempts < DEFAULT_MAX_ATTEMPTS) {
114
+ const [nextResponse] = await Promise.all([
115
+ this.sessions.getSessionOperationInternal({
116
+ operationName
117
+ }),
118
+ new Promise((resolve) => setTimeout(resolve, 1e3))
119
+ ]);
120
+ apiResponse = nextResponse;
121
+ attempts++;
122
+ }
123
+ if (!apiResponse.done) {
124
+ throw new Error(
125
+ "Session creation operation ".concat(operationName, " did not complete in time.")
126
+ );
127
+ }
128
+ const getSessionResponse = apiResponse.response;
129
+ const id = ((_a = getSessionResponse.name) == null ? void 0 : _a.split("/").pop()) || "";
130
+ return createSession({
131
+ id,
132
+ appName,
133
+ userId,
134
+ state: getSessionResponse.sessionState,
135
+ events: [],
136
+ lastUpdateTime: getSessionResponse.updateTime ? Date.parse(getSessionResponse.updateTime) : Date.now()
137
+ });
138
+ }
139
+ async getSession({
140
+ appName,
141
+ userId,
142
+ sessionId,
143
+ config
144
+ }) {
145
+ const reasoningEngineId = this.getReasoningEngineId(appName);
146
+ const sessionResourceName = "reasoningEngines/".concat(reasoningEngineId, "/sessions/").concat(sessionId);
147
+ try {
148
+ let getSessionResponse;
149
+ let eventsIterator = [];
150
+ if (config && config.numRecentEvents === 0) {
151
+ getSessionResponse = await this.sessions.get({
152
+ name: sessionResourceName
153
+ });
154
+ } else {
155
+ const listConfig = {};
156
+ if (config && config.afterTimestamp) {
157
+ listConfig.filter = 'timestamp>="'.concat(new Date(
158
+ config.afterTimestamp
159
+ ).toISOString(), '"');
160
+ }
161
+ const [sessionRes, eventsRes] = await Promise.all([
162
+ this.sessions.get({ name: sessionResourceName }),
163
+ this.sessions.events.listInternal({
164
+ name: sessionResourceName,
165
+ config: listConfig
166
+ })
167
+ ]);
168
+ getSessionResponse = sessionRes;
169
+ eventsIterator = eventsRes.sessionEvents || [];
170
+ }
171
+ const sessionObj = getSessionResponse;
172
+ if (sessionObj.userId !== userId) {
173
+ throw new Error(
174
+ "Session ".concat(sessionId, " does not belong to user ").concat(userId, ".")
175
+ );
176
+ }
177
+ const session = createSession({
178
+ id: sessionId,
179
+ appName,
180
+ userId,
181
+ state: sessionObj.sessionState,
182
+ events: [],
183
+ lastUpdateTime: sessionObj.updateTime ? Date.parse(sessionObj.updateTime) : Date.now()
184
+ });
185
+ for (const event of eventsIterator) {
186
+ session.events.push(_fromApiEvent(event));
187
+ }
188
+ if (config && config.numRecentEvents) {
189
+ session.events = session.events.slice(-config.numRecentEvents);
190
+ }
191
+ return session;
192
+ } catch (error) {
193
+ const err = error;
194
+ if (err.code === GRPC_NOT_FOUND || err.code === HTTP_NOT_FOUND) {
195
+ return void 0;
196
+ }
197
+ logger.error("Error getting session from Vertex AI: ".concat(err.message));
198
+ throw error;
199
+ }
200
+ }
201
+ async listSessions({
202
+ appName,
203
+ userId,
204
+ limit,
205
+ offset,
206
+ page,
207
+ order
208
+ }) {
209
+ var _a;
210
+ const reasoningEngineId = this.getReasoningEngineId(appName);
211
+ const adkSessions = [];
212
+ let pageToken = void 0;
213
+ do {
214
+ const response = await this.sessions.listInternal({
215
+ name: "reasoningEngines/".concat(reasoningEngineId),
216
+ config: __spreadValues(__spreadValues({}, userId ? { filter: 'user_id="'.concat(userId, '"') } : {}), pageToken ? { pageToken } : {})
217
+ });
218
+ const sessions = response.sessions || [];
219
+ for (const sessionObj of sessions) {
220
+ const id = ((_a = sessionObj.name) == null ? void 0 : _a.split("/").pop()) || "";
221
+ adkSessions.push(
222
+ createSession({
223
+ id,
224
+ appName,
225
+ userId: sessionObj.userId,
226
+ state: sessionObj.sessionState,
227
+ events: [],
228
+ lastUpdateTime: sessionObj.updateTime ? new Date(sessionObj.updateTime).getTime() : Date.now()
229
+ })
230
+ );
231
+ }
232
+ pageToken = response.nextPageToken;
233
+ } while (pageToken);
234
+ if (order === "asc") {
235
+ adkSessions.sort(
236
+ (a, b) => a.lastUpdateTime - b.lastUpdateTime || a.id.localeCompare(b.id)
237
+ );
238
+ } else if (order === "desc") {
239
+ adkSessions.sort(
240
+ (a, b) => b.lastUpdateTime - a.lastUpdateTime || a.id.localeCompare(b.id)
241
+ );
242
+ }
243
+ if (limit === void 0) {
244
+ const totalItems2 = adkSessions.length;
245
+ const sliced = offset ? adkSessions.slice(offset) : adkSessions;
246
+ return {
247
+ sessions: sliced,
248
+ page: 1,
249
+ limit: totalItems2,
250
+ totalItems: totalItems2,
251
+ totalPages: totalItems2 === 0 ? 0 : 1
252
+ };
253
+ }
254
+ const totalItems = adkSessions.length;
255
+ const totalPages = limit === 0 ? 0 : Math.ceil(totalItems / limit);
256
+ let effectiveOffset;
257
+ let effectivePage;
258
+ if (page !== void 0) {
259
+ effectiveOffset = (page - 1) * limit;
260
+ effectivePage = page;
261
+ } else {
262
+ effectiveOffset = offset != null ? offset : 0;
263
+ effectivePage = limit === 0 ? 1 : Math.floor(effectiveOffset / limit) + 1;
264
+ }
265
+ return {
266
+ sessions: adkSessions.slice(effectiveOffset, effectiveOffset + limit),
267
+ page: effectivePage,
268
+ limit,
269
+ totalItems,
270
+ totalPages
271
+ };
272
+ }
273
+ async deleteSession({
274
+ appName,
275
+ userId: _userId,
276
+ sessionId
277
+ }) {
278
+ const reasoningEngineId = this.getReasoningEngineId(appName);
279
+ await this.sessions.delete({
280
+ name: "reasoningEngines/".concat(reasoningEngineId, "/sessions/").concat(sessionId)
281
+ });
282
+ }
283
+ async appendEvent({
284
+ session,
285
+ event
286
+ }) {
287
+ await super.appendEvent({ session, event });
288
+ session.lastUpdateTime = event.timestamp;
289
+ const reasoningEngineId = this.getReasoningEngineId(session.appName);
290
+ const customMetadata = __spreadValues({}, event.customMetadata);
291
+ if (isCompactedEvent(event)) {
292
+ customMetadata._compaction = {
293
+ startTime: event.startTime,
294
+ endTime: event.endTime,
295
+ compactedContent: event.compactedContent
296
+ };
297
+ }
298
+ if (event.usageMetadata) {
299
+ customMetadata._usage_metadata = event.usageMetadata;
300
+ }
301
+ const config = partialCopy(event, [
302
+ "content",
303
+ "actions",
304
+ "errorCode",
305
+ "errorMessage"
306
+ ]);
307
+ config.eventMetadata = __spreadProps(__spreadValues({}, partialCopy(event, [
308
+ "partial",
309
+ "turnComplete",
310
+ "interrupted",
311
+ "branch",
312
+ "longRunningToolIds",
313
+ "groundingMetadata"
314
+ ])), {
315
+ customMetadata: Object.keys(customMetadata).length > 0 ? customMetadata : void 0
316
+ });
317
+ config.rawEvent = JSON.parse(JSON.stringify(event));
318
+ const params = {
319
+ name: "reasoningEngines/".concat(reasoningEngineId, "/sessions/").concat(session.id),
320
+ author: event.author || "user",
321
+ invocationId: event.invocationId || "inv-".concat(Date.now()),
322
+ timestamp: new Date(event.timestamp).toISOString(),
323
+ config
324
+ };
325
+ try {
326
+ await this.sessions.events.append(params);
327
+ } catch (error) {
328
+ logger.warn(
329
+ "Failed to append event with rawEvent, falling back...",
330
+ error
331
+ );
332
+ delete config.rawEvent;
333
+ await this.sessions.events.append({
334
+ name: "reasoningEngines/".concat(reasoningEngineId, "/sessions/").concat(session.id),
335
+ author: event.author || "user",
336
+ invocationId: event.invocationId || "inv-".concat(Date.now()),
337
+ timestamp: new Date(event.timestamp).toISOString(),
338
+ config
339
+ });
340
+ }
341
+ return event;
342
+ }
343
+ };
344
+ VertexAiSessionService = __decorateClass([
345
+ experimental
346
+ ], VertexAiSessionService);
347
+ function _fromApiEvent(apiEventObj) {
348
+ var _a, _b, _c;
349
+ const rawEvent = apiEventObj.rawEvent;
350
+ if (rawEvent) {
351
+ const event2 = JSON.parse(JSON.stringify(rawEvent));
352
+ event2.id = ((_a = apiEventObj.name) == null ? void 0 : _a.split("/").pop()) || "";
353
+ event2.invocationId = apiEventObj.invocationId || "";
354
+ event2.author = apiEventObj.author;
355
+ if (apiEventObj.timestamp) {
356
+ event2.timestamp = new Date(apiEventObj.timestamp).getTime();
357
+ }
358
+ return event2;
359
+ }
360
+ const actions = apiEventObj.actions || {};
361
+ const eventMetadata = apiEventObj.eventMetadata || {};
362
+ let customMetadata = eventMetadata.customMetadata;
363
+ let compactionData = null;
364
+ let usageMetadataData = null;
365
+ if (customMetadata) {
366
+ if (customMetadata._compaction) {
367
+ compactionData = customMetadata._compaction;
368
+ delete customMetadata._compaction;
369
+ }
370
+ if (customMetadata._usage_metadata) {
371
+ usageMetadataData = customMetadata._usage_metadata;
372
+ delete customMetadata._usage_metadata;
373
+ }
374
+ if (Object.keys(customMetadata).length === 0) {
375
+ customMetadata = void 0;
376
+ }
377
+ }
378
+ const eventActions = {
379
+ stateDelta: actions["stateDelta"] || {},
380
+ artifactDelta: actions["artifactDelta"] || {},
381
+ requestedAuthConfigs: actions.requestedAuthConfigs || {},
382
+ requestedToolConfirmations: actions["requestedToolConfirmations"] || {},
383
+ skipSummarization: actions["skipSummarization"],
384
+ transferToAgent: actions["transferAgent"],
385
+ escalate: actions["escalate"],
386
+ compaction: compactionData || void 0
387
+ };
388
+ const event = {
389
+ id: ((_b = apiEventObj.name) == null ? void 0 : _b.split("/").pop()) || "",
390
+ invocationId: apiEventObj.invocationId || "",
391
+ author: apiEventObj.author,
392
+ actions: eventActions,
393
+ content: apiEventObj.content,
394
+ timestamp: apiEventObj.timestamp ? new Date(apiEventObj.timestamp).getTime() : Date.now(),
395
+ errorCode: (_c = apiEventObj.errorCode) == null ? void 0 : _c.toString(),
396
+ errorMessage: apiEventObj.errorMessage,
397
+ partial: eventMetadata["partial"],
398
+ turnComplete: eventMetadata["turnComplete"],
399
+ interrupted: eventMetadata["interrupted"],
400
+ branch: eventMetadata["branch"],
401
+ customMetadata,
402
+ longRunningToolIds: eventMetadata["longRunningToolIds"],
403
+ usageMetadata: usageMetadataData
404
+ };
405
+ if (compactionData) {
406
+ event.isCompacted = true;
407
+ event.startTime = compactionData.startTime;
408
+ event.endTime = compactionData.endTime;
409
+ event.compactedContent = compactionData.compactedContent;
410
+ }
411
+ return event;
412
+ }
413
+ export {
414
+ VertexAiSessionService,
415
+ isVertexAiConnectionString
416
+ };
@@ -0,0 +1,78 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __decorateClass = (decorators, target, key, kind) => {
6
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
7
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
8
+ if (decorator = decorators[i])
9
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
10
+ if (kind && result) __defProp(target, key, result);
11
+ return result;
12
+ };
13
+ /**
14
+ * @license
15
+ * Copyright 2026 Google LLC
16
+ * SPDX-License-Identifier: Apache-2.0
17
+ */
18
+ import { Client } from "@google-cloud/vertexai";
19
+ import { experimental } from "../utils/experimental.js";
20
+ import { loadSkillFromZipBuffer } from "./loader.js";
21
+ let GCPSkillRegistry = class {
22
+ constructor(options = {}) {
23
+ this.projectId = options.projectId || process.env.GOOGLE_CLOUD_PROJECT;
24
+ this.location = options.location || process.env.GOOGLE_CLOUD_LOCATION;
25
+ this.client = options.client || new Client({
26
+ project: this.projectId,
27
+ location: this.location
28
+ });
29
+ }
30
+ async getSkill(name) {
31
+ const apiClient = this.client.apiClient;
32
+ const httpResponse = await apiClient.request({
33
+ path: "skills/".concat(name),
34
+ httpMethod: "GET",
35
+ httpOptions: { apiVersion: "v1beta1" }
36
+ });
37
+ const response = await httpResponse.json();
38
+ const zippedFilesystem = response.zippedFilesystem || response.zipped_filesystem;
39
+ if (!zippedFilesystem) {
40
+ throw new Error("Skill '".concat(name, "' does not contain zipped filesystem."));
41
+ }
42
+ const zipBuffer = Buffer.from(zippedFilesystem, "base64");
43
+ return loadSkillFromZipBuffer(zipBuffer);
44
+ }
45
+ async searchSkills(query) {
46
+ const apiClient = this.client.apiClient;
47
+ const trimmedQuery = query.trim();
48
+ const isSearch = trimmedQuery.length > 0;
49
+ const path = isSearch ? "skills:retrieve?query=".concat(encodeURIComponent(trimmedQuery)) : "skills";
50
+ const httpResponse = await apiClient.request({
51
+ path,
52
+ httpMethod: "GET",
53
+ httpOptions: { apiVersion: "v1beta1" }
54
+ });
55
+ const response = await httpResponse.json();
56
+ const skillsList = isSearch ? response.retrievedSkills || response.retrieved_skills : response.skills;
57
+ const results = [];
58
+ if (skillsList && Array.isArray(skillsList)) {
59
+ for (const s of skillsList) {
60
+ const skillNameStr = s.skillName || s.skill_name || s.name || "";
61
+ const descriptionStr = s.description || "";
62
+ const parts = skillNameStr.split("/");
63
+ const name = skillNameStr ? parts[parts.length - 1] : "";
64
+ results.push({
65
+ name,
66
+ description: descriptionStr
67
+ });
68
+ }
69
+ }
70
+ return results;
71
+ }
72
+ };
73
+ GCPSkillRegistry = __decorateClass([
74
+ experimental
75
+ ], GCPSkillRegistry);
76
+ export {
77
+ GCPSkillRegistry
78
+ };
@@ -24,6 +24,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
24
  * Copyright 2026 Google LLC
25
25
  * SPDX-License-Identifier: Apache-2.0
26
26
  */
27
+ import AdmZip from "adm-zip";
27
28
  import yaml from "js-yaml";
28
29
  import * as fs from "node:fs/promises";
29
30
  import * as path from "node:path";
@@ -254,9 +255,72 @@ async function loadAllSkillsInDir(skillsBasePath) {
254
255
  }
255
256
  return skills;
256
257
  }
258
+ function loadSkillFromZipBuffer(zipBuffer) {
259
+ const zip = new AdmZip(zipBuffer);
260
+ const entries = zip.getEntries();
261
+ let skillMdContent = "";
262
+ for (const entry of entries) {
263
+ if (entry.isDirectory) continue;
264
+ if (entry.entryName.toLowerCase() === "skill.md") {
265
+ skillMdContent = entry.getData().toString("utf-8");
266
+ break;
267
+ }
268
+ }
269
+ if (!skillMdContent) {
270
+ throw new Error("SKILL.md not found in zipped filesystem.");
271
+ }
272
+ const { frontmatter: parsed, body } = parseSkillMdContent(skillMdContent);
273
+ const frontmatter = FrontmatterSchema.parse(parsed);
274
+ const references = {};
275
+ const assets = {};
276
+ const scripts = {};
277
+ function loadZipDir(prefix) {
278
+ const res = {};
279
+ const normPrefix = prefix.endsWith("/") ? prefix : "".concat(prefix, "/");
280
+ for (const entry of entries) {
281
+ if (entry.isDirectory) continue;
282
+ if (entry.entryName.startsWith(normPrefix)) {
283
+ if (entry.entryName.includes("__pycache__")) continue;
284
+ const relativePath = entry.entryName.substring(normPrefix.length);
285
+ if (!relativePath) continue;
286
+ const data = entry.getData();
287
+ try {
288
+ res[relativePath] = data.toString("utf-8");
289
+ } catch (_e) {
290
+ res[relativePath] = data;
291
+ }
292
+ }
293
+ }
294
+ return res;
295
+ }
296
+ const refFiles = loadZipDir("references");
297
+ for (const [key, val] of Object.entries(refFiles)) {
298
+ references[key] = val;
299
+ }
300
+ const assetFiles = loadZipDir("assets");
301
+ for (const [key, val] of Object.entries(assetFiles)) {
302
+ assets[key] = val;
303
+ }
304
+ const rawScripts = loadZipDir("scripts");
305
+ for (const [key, val] of Object.entries(rawScripts)) {
306
+ if (typeof val === "string") {
307
+ scripts[key] = { src: val };
308
+ }
309
+ }
310
+ return {
311
+ frontmatter,
312
+ instructions: body,
313
+ resources: {
314
+ references,
315
+ assets,
316
+ scripts
317
+ }
318
+ };
319
+ }
257
320
  export {
258
321
  loadAllSkillsInDir,
259
322
  loadSkillFromDir,
323
+ loadSkillFromZipBuffer,
260
324
  parseSkillMdContent,
261
325
  validateSkillDir
262
326
  };
@@ -0,0 +1,7 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
@@ -14,6 +14,7 @@ import { InMemoryMemoryService } from "../memory/in_memory_memory_service.js";
14
14
  import { Runner } from "../runner/runner.js";
15
15
  import { InMemorySessionService } from "../sessions/in_memory_session_service.js";
16
16
  import { GoogleLLMVariant } from "../utils/variant_utils.js";
17
+ import { State } from "../sessions/state.js";
17
18
  import { BaseTool } from "./base_tool.js";
18
19
  import { ForwardingArtifactService } from "./forwarding_artifact_service.js";
19
20
  const AGENT_TOOL_SIGNATURE_SYMBOL = Symbol.for("google.adk.agentTool");
@@ -68,9 +69,6 @@ class AgentTool extends (_b = BaseTool, _a = AGENT_TOOL_SIGNATURE_SYMBOL, _b) {
68
69
  toolContext
69
70
  }) {
70
71
  var _a2, _b2, _c, _d, _e, _f;
71
- if (this.skipSummarization) {
72
- toolContext.actions.skipSummarization = true;
73
- }
74
72
  const hasInputSchema = isLlmAgent(this.agent) && this.agent.inputSchema;
75
73
  const content = {
76
74
  role: "user",
@@ -112,7 +110,14 @@ class AgentTool extends (_b = BaseTool, _a = AGENT_TOOL_SIGNATURE_SYMBOL, _b) {
112
110
  return;
113
111
  }
114
112
  if (event.actions.stateDelta) {
115
- toolContext.state.update(event.actions.stateDelta);
113
+ const filteredDelta = Object.fromEntries(
114
+ Object.entries(event.actions.stateDelta).filter(
115
+ ([key]) => !key.startsWith(State.TEMP_PREFIX)
116
+ )
117
+ );
118
+ if (Object.keys(filteredDelta).length > 0) {
119
+ toolContext.state.update(filteredDelta);
120
+ }
116
121
  }
117
122
  lastEvent = event;
118
123
  }
@@ -130,7 +135,7 @@ class AgentTool extends (_b = BaseTool, _a = AGENT_TOOL_SIGNATURE_SYMBOL, _b) {
130
135
  return "";
131
136
  }
132
137
  const hasOutputSchema = isLlmAgent(this.agent) && this.agent.outputSchema;
133
- const mergedText = lastEvent.content.parts.map((part) => part.text).filter((text) => text).join("\n");
138
+ const mergedText = lastEvent.content.parts.filter((part) => !part.thought).map((part) => part.text).filter((text) => text).join("\n");
134
139
  return hasOutputSchema ? JSON.parse(mergedText) : mergedText;
135
140
  }
136
141
  }
@@ -7,18 +7,27 @@ const require = topLevelCreateRequire(import.meta.url);
7
7
  */
8
8
  import { BaseTool } from "./base_tool.js";
9
9
  class ExitLoopTool extends BaseTool {
10
+ /** Creates an ExitLoopTool with its fixed name and description. */
10
11
  constructor() {
11
12
  super({
12
13
  name: "exit_loop",
13
14
  description: "Exits the loop.\n\nCall this function only when you are instructed to do so."
14
15
  });
15
16
  }
17
+ /** Returns the function declaration for this tool. */
16
18
  _getDeclaration() {
17
19
  return {
18
20
  name: this.name,
19
21
  description: this.description
20
22
  };
21
23
  }
24
+ /**
25
+ * Sets `escalate` and `skipSummarization` on the event actions, signalling
26
+ * the {@link LoopAgent} to stop iterating.
27
+ *
28
+ * @param request The tool request containing the current tool context.
29
+ * @returns An empty string response.
30
+ */
22
31
  async runAsync({
23
32
  toolContext
24
33
  }) {
@@ -46,7 +46,8 @@ class FunctionTool extends (_b = BaseTool, _a = FUNCTION_TOOL_SIGNATURE_SYMBOL,
46
46
  this.parameters = options.parameters;
47
47
  }
48
48
  /**
49
- * Provide a schema for the function.
49
+ * Returns the function declaration derived from the tool's name, description,
50
+ * and parameter schema.
50
51
  */
51
52
  _getDeclaration() {
52
53
  return {
@@ -56,7 +57,11 @@ class FunctionTool extends (_b = BaseTool, _a = FUNCTION_TOOL_SIGNATURE_SYMBOL,
56
57
  };
57
58
  }
58
59
  /**
59
- * Logic for running the tool.
60
+ * Validates the model-provided arguments against the parameter schema and
61
+ * invokes the user-defined `execute` function.
62
+ *
63
+ * @param req The tool request containing arguments and tool context.
64
+ * @returns A promise resolving to the function's return value.
60
65
  */
61
66
  async runAsync(req) {
62
67
  try {