@google/adk 0.1.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 (311) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +9 -0
  3. package/dist/cjs/agents/active_streaming_tool.js +44 -0
  4. package/dist/cjs/agents/base_agent.js +245 -0
  5. package/dist/cjs/agents/base_llm_processor.js +44 -0
  6. package/dist/cjs/agents/callback_context.js +98 -0
  7. package/dist/cjs/agents/content_processor_utils.js +299 -0
  8. package/dist/cjs/agents/functions.js +394 -0
  9. package/dist/cjs/agents/instructions.js +110 -0
  10. package/dist/cjs/agents/invocation_context.js +109 -0
  11. package/dist/cjs/agents/live_request_queue.js +136 -0
  12. package/dist/cjs/agents/llm_agent.js +859 -0
  13. package/dist/cjs/agents/loop_agent.js +68 -0
  14. package/dist/cjs/agents/parallel_agent.js +78 -0
  15. package/dist/cjs/agents/readonly_context.js +68 -0
  16. package/dist/cjs/agents/run_config.js +74 -0
  17. package/dist/cjs/agents/sequential_agent.js +84 -0
  18. package/dist/cjs/agents/transcription_entry.js +27 -0
  19. package/dist/cjs/artifacts/base_artifact_service.js +27 -0
  20. package/dist/cjs/artifacts/in_memory_artifact_service.js +119 -0
  21. package/dist/cjs/auth/auth_credential.js +46 -0
  22. package/dist/cjs/auth/auth_handler.js +92 -0
  23. package/dist/cjs/auth/auth_schemes.js +62 -0
  24. package/dist/cjs/auth/auth_tool.js +27 -0
  25. package/dist/cjs/auth/credential_service/base_credential_service.js +27 -0
  26. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +63 -0
  27. package/dist/cjs/code_executors/base_code_executor.js +76 -0
  28. package/dist/cjs/code_executors/built_in_code_executor.js +58 -0
  29. package/dist/cjs/code_executors/code_execution_utils.js +142 -0
  30. package/dist/cjs/code_executors/code_executor_context.js +198 -0
  31. package/dist/cjs/common.js +161 -0
  32. package/dist/cjs/events/event.js +107 -0
  33. package/dist/cjs/events/event_actions.js +83 -0
  34. package/dist/cjs/examples/base_example_provider.js +40 -0
  35. package/dist/cjs/examples/example.js +27 -0
  36. package/dist/cjs/examples/example_util.js +107 -0
  37. package/dist/cjs/index.js +40 -0
  38. package/dist/cjs/index.js.map +7 -0
  39. package/dist/cjs/index_web.js +33 -0
  40. package/dist/cjs/memory/base_memory_service.js +27 -0
  41. package/dist/cjs/memory/in_memory_memory_service.js +97 -0
  42. package/dist/cjs/memory/memory_entry.js +27 -0
  43. package/dist/cjs/models/base_llm.js +77 -0
  44. package/dist/cjs/models/base_llm_connection.js +27 -0
  45. package/dist/cjs/models/gemini_llm_connection.js +132 -0
  46. package/dist/cjs/models/google_llm.js +321 -0
  47. package/dist/cjs/models/llm_request.js +82 -0
  48. package/dist/cjs/models/llm_response.js +71 -0
  49. package/dist/cjs/models/registry.js +121 -0
  50. package/dist/cjs/package.json +1 -0
  51. package/dist/cjs/plugins/base_plugin.js +236 -0
  52. package/dist/cjs/plugins/logging_plugin.js +222 -0
  53. package/dist/cjs/plugins/plugin_manager.js +239 -0
  54. package/dist/cjs/plugins/security_plugin.js +153 -0
  55. package/dist/cjs/runner/in_memory_runner.js +58 -0
  56. package/dist/cjs/runner/runner.js +276 -0
  57. package/dist/cjs/sessions/base_session_service.js +71 -0
  58. package/dist/cjs/sessions/in_memory_session_service.js +184 -0
  59. package/dist/cjs/sessions/session.js +48 -0
  60. package/dist/cjs/sessions/state.js +101 -0
  61. package/dist/cjs/tools/agent_tool.js +134 -0
  62. package/dist/cjs/tools/base_tool.js +107 -0
  63. package/dist/cjs/tools/base_toolset.js +76 -0
  64. package/dist/cjs/tools/forwarding_artifact_service.js +71 -0
  65. package/dist/cjs/tools/function_tool.js +101 -0
  66. package/dist/cjs/tools/google_search_tool.js +76 -0
  67. package/dist/cjs/tools/long_running_tool.js +63 -0
  68. package/dist/cjs/tools/mcp/mcp_session_manager.js +65 -0
  69. package/dist/cjs/tools/mcp/mcp_tool.js +65 -0
  70. package/dist/cjs/tools/mcp/mcp_toolset.js +61 -0
  71. package/dist/cjs/tools/tool_confirmation.js +49 -0
  72. package/dist/cjs/tools/tool_context.js +129 -0
  73. package/dist/cjs/utils/deep_clone.js +44 -0
  74. package/dist/cjs/utils/env_aware_utils.js +83 -0
  75. package/dist/cjs/utils/gemini_schema_util.js +88 -0
  76. package/dist/cjs/utils/logger.js +121 -0
  77. package/dist/cjs/utils/model_name.js +64 -0
  78. package/dist/cjs/utils/simple_zod_to_json.js +191 -0
  79. package/dist/cjs/utils/variant_utils.js +55 -0
  80. package/dist/cjs/version.js +39 -0
  81. package/dist/esm/agents/active_streaming_tool.js +14 -0
  82. package/dist/esm/agents/base_agent.js +214 -0
  83. package/dist/esm/agents/base_llm_processor.js +13 -0
  84. package/dist/esm/agents/callback_context.js +68 -0
  85. package/dist/esm/agents/content_processor_utils.js +268 -0
  86. package/dist/esm/agents/functions.js +353 -0
  87. package/dist/esm/agents/instructions.js +80 -0
  88. package/dist/esm/agents/invocation_context.js +78 -0
  89. package/dist/esm/agents/live_request_queue.js +106 -0
  90. package/dist/esm/agents/llm_agent.js +828 -0
  91. package/dist/esm/agents/loop_agent.js +38 -0
  92. package/dist/esm/agents/parallel_agent.js +48 -0
  93. package/dist/esm/agents/readonly_context.js +38 -0
  94. package/dist/esm/agents/run_config.js +43 -0
  95. package/dist/esm/agents/sequential_agent.js +54 -0
  96. package/dist/esm/agents/transcription_entry.js +5 -0
  97. package/dist/esm/artifacts/base_artifact_service.js +5 -0
  98. package/dist/esm/artifacts/in_memory_artifact_service.js +89 -0
  99. package/dist/esm/auth/auth_credential.js +16 -0
  100. package/dist/esm/auth/auth_handler.js +62 -0
  101. package/dist/esm/auth/auth_schemes.js +31 -0
  102. package/dist/esm/auth/auth_tool.js +5 -0
  103. package/dist/esm/auth/credential_service/base_credential_service.js +5 -0
  104. package/dist/esm/auth/credential_service/in_memory_credential_service.js +33 -0
  105. package/dist/esm/code_executors/base_code_executor.js +46 -0
  106. package/dist/esm/code_executors/built_in_code_executor.js +28 -0
  107. package/dist/esm/code_executors/code_execution_utils.js +108 -0
  108. package/dist/esm/code_executors/code_executor_context.js +168 -0
  109. package/dist/esm/common.js +85 -0
  110. package/dist/esm/events/event.js +72 -0
  111. package/dist/esm/events/event_actions.js +52 -0
  112. package/dist/esm/examples/base_example_provider.js +10 -0
  113. package/dist/esm/examples/example.js +5 -0
  114. package/dist/esm/examples/example_util.js +76 -0
  115. package/dist/esm/index.js +40 -0
  116. package/dist/esm/index.js.map +7 -0
  117. package/dist/esm/index_web.js +6 -0
  118. package/dist/esm/memory/base_memory_service.js +5 -0
  119. package/dist/esm/memory/in_memory_memory_service.js +67 -0
  120. package/dist/esm/memory/memory_entry.js +5 -0
  121. package/dist/esm/models/base_llm.js +47 -0
  122. package/dist/esm/models/base_llm_connection.js +5 -0
  123. package/dist/esm/models/gemini_llm_connection.js +102 -0
  124. package/dist/esm/models/google_llm.js +291 -0
  125. package/dist/esm/models/llm_request.js +50 -0
  126. package/dist/esm/models/llm_response.js +41 -0
  127. package/dist/esm/models/registry.js +91 -0
  128. package/dist/esm/plugins/base_plugin.js +206 -0
  129. package/dist/esm/plugins/logging_plugin.js +192 -0
  130. package/dist/esm/plugins/plugin_manager.js +209 -0
  131. package/dist/esm/plugins/security_plugin.js +119 -0
  132. package/dist/esm/runner/in_memory_runner.js +28 -0
  133. package/dist/esm/runner/runner.js +246 -0
  134. package/dist/esm/sessions/base_session_service.js +41 -0
  135. package/dist/esm/sessions/in_memory_session_service.js +154 -0
  136. package/dist/esm/sessions/session.js +18 -0
  137. package/dist/esm/sessions/state.js +71 -0
  138. package/dist/esm/tools/agent_tool.js +104 -0
  139. package/dist/esm/tools/base_tool.js +77 -0
  140. package/dist/esm/tools/base_toolset.js +46 -0
  141. package/dist/esm/tools/forwarding_artifact_service.js +41 -0
  142. package/dist/esm/tools/function_tool.js +71 -0
  143. package/dist/esm/tools/google_search_tool.js +46 -0
  144. package/dist/esm/tools/long_running_tool.js +33 -0
  145. package/dist/esm/tools/mcp/mcp_session_manager.js +35 -0
  146. package/dist/esm/tools/mcp/mcp_tool.js +35 -0
  147. package/dist/esm/tools/mcp/mcp_toolset.js +31 -0
  148. package/dist/esm/tools/tool_confirmation.js +19 -0
  149. package/dist/esm/tools/tool_context.js +99 -0
  150. package/dist/esm/utils/deep_clone.js +14 -0
  151. package/dist/esm/utils/env_aware_utils.js +49 -0
  152. package/dist/esm/utils/gemini_schema_util.js +58 -0
  153. package/dist/esm/utils/logger.js +89 -0
  154. package/dist/esm/utils/model_name.js +31 -0
  155. package/dist/esm/utils/simple_zod_to_json.js +160 -0
  156. package/dist/esm/utils/variant_utils.js +24 -0
  157. package/dist/esm/version.js +9 -0
  158. package/dist/types/agents/active_streaming_tool.d.ts +29 -0
  159. package/dist/types/agents/base_agent.d.ts +167 -0
  160. package/dist/types/agents/base_llm_processor.d.ts +27 -0
  161. package/dist/types/agents/callback_context.d.ts +42 -0
  162. package/dist/types/agents/content_processor_utils.d.ts +36 -0
  163. package/dist/types/agents/functions.d.ts +90 -0
  164. package/dist/types/agents/instructions.d.ts +32 -0
  165. package/dist/types/agents/invocation_context.d.ts +155 -0
  166. package/dist/types/agents/live_request_queue.d.ts +67 -0
  167. package/dist/types/agents/llm_agent.d.ts +333 -0
  168. package/dist/types/agents/loop_agent.d.ts +31 -0
  169. package/dist/types/agents/parallel_agent.d.ts +21 -0
  170. package/dist/types/agents/readonly_context.d.ts +31 -0
  171. package/dist/types/agents/run_config.d.ts +76 -0
  172. package/dist/types/agents/sequential_agent.d.ts +26 -0
  173. package/dist/types/agents/transcription_entry.d.ts +17 -0
  174. package/dist/types/artifacts/base_artifact_service.d.ts +127 -0
  175. package/dist/types/artifacts/in_memory_artifact_service.d.ts +18 -0
  176. package/dist/types/auth/auth_credential.d.ts +227 -0
  177. package/dist/types/auth/auth_handler.d.ts +27 -0
  178. package/dist/types/auth/auth_schemes.d.ts +36 -0
  179. package/dist/types/auth/auth_tool.d.ts +51 -0
  180. package/dist/types/auth/credential_service/base_credential_service.d.ts +27 -0
  181. package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +19 -0
  182. package/dist/types/code_executors/base_code_executor.d.ts +60 -0
  183. package/dist/types/code_executors/built_in_code_executor.d.ts +13 -0
  184. package/dist/types/code_executors/code_execution_utils.d.ts +99 -0
  185. package/dist/types/code_executors/code_executor_context.d.ts +92 -0
  186. package/dist/types/common.d.ts +51 -0
  187. package/dist/types/events/event.d.ts +81 -0
  188. package/dist/types/events/event_actions.d.ts +74 -0
  189. package/dist/types/examples/base_example_provider.d.ts +20 -0
  190. package/dist/types/examples/example.d.ts +19 -0
  191. package/dist/types/examples/example_util.d.ts +13 -0
  192. package/dist/types/index.d.ts +9 -0
  193. package/dist/types/index_web.d.ts +6 -0
  194. package/dist/types/memory/base_memory_service.d.ts +47 -0
  195. package/dist/types/memory/in_memory_memory_service.d.ts +18 -0
  196. package/dist/types/memory/memory_entry.d.ts +24 -0
  197. package/dist/types/models/base_llm.d.ts +46 -0
  198. package/dist/types/models/base_llm_connection.d.ts +51 -0
  199. package/dist/types/models/gemini_llm_connection.d.ts +54 -0
  200. package/dist/types/models/google_llm.d.ts +88 -0
  201. package/dist/types/models/llm_request.d.ts +49 -0
  202. package/dist/types/models/llm_response.d.ts +79 -0
  203. package/dist/types/models/registry.d.ts +45 -0
  204. package/dist/types/plugins/base_plugin.d.ts +310 -0
  205. package/dist/types/plugins/logging_plugin.d.ts +104 -0
  206. package/dist/types/plugins/plugin_manager.d.ts +155 -0
  207. package/dist/types/plugins/security_plugin.d.ts +60 -0
  208. package/dist/types/runner/in_memory_runner.d.ts +15 -0
  209. package/dist/types/runner/runner.d.ts +80 -0
  210. package/dist/types/sessions/base_session_service.d.ts +129 -0
  211. package/dist/types/sessions/in_memory_session_service.d.ts +32 -0
  212. package/dist/types/sessions/session.d.ts +46 -0
  213. package/dist/types/sessions/state.d.ts +57 -0
  214. package/dist/types/tools/agent_tool.d.ts +37 -0
  215. package/dist/types/tools/base_tool.d.ts +84 -0
  216. package/dist/types/tools/base_toolset.d.ts +64 -0
  217. package/dist/types/tools/forwarding_artifact_service.d.ts +21 -0
  218. package/dist/types/tools/function_tool.d.ts +48 -0
  219. package/dist/types/tools/google_search_tool.d.ts +18 -0
  220. package/dist/types/tools/long_running_tool.d.ts +18 -0
  221. package/dist/types/tools/mcp/mcp_session_manager.d.ts +57 -0
  222. package/dist/types/tools/mcp/mcp_tool.d.ts +30 -0
  223. package/dist/types/tools/mcp/mcp_toolset.d.ts +39 -0
  224. package/dist/types/tools/tool_confirmation.d.ts +25 -0
  225. package/dist/types/tools/tool_context.d.ts +63 -0
  226. package/dist/types/utils/deep_clone.d.ts +1 -0
  227. package/dist/types/utils/env_aware_utils.d.ts +31 -0
  228. package/dist/types/utils/gemini_schema_util.d.ts +23 -0
  229. package/dist/types/utils/logger.d.ts +41 -0
  230. package/dist/types/utils/model_name.d.ts +34 -0
  231. package/dist/types/utils/simple_zod_to_json.d.ts +12 -0
  232. package/dist/types/utils/variant_utils.d.ts +24 -0
  233. package/dist/types/version.d.ts +6 -0
  234. package/dist/web/agents/active_streaming_tool.js +14 -0
  235. package/dist/web/agents/base_agent.js +265 -0
  236. package/dist/web/agents/base_llm_processor.js +13 -0
  237. package/dist/web/agents/callback_context.js +68 -0
  238. package/dist/web/agents/content_processor_utils.js +268 -0
  239. package/dist/web/agents/functions.js +353 -0
  240. package/dist/web/agents/instructions.js +80 -0
  241. package/dist/web/agents/invocation_context.js +78 -0
  242. package/dist/web/agents/live_request_queue.js +124 -0
  243. package/dist/web/agents/llm_agent.js +973 -0
  244. package/dist/web/agents/loop_agent.js +71 -0
  245. package/dist/web/agents/parallel_agent.js +83 -0
  246. package/dist/web/agents/readonly_context.js +38 -0
  247. package/dist/web/agents/run_config.js +43 -0
  248. package/dist/web/agents/sequential_agent.js +99 -0
  249. package/dist/web/agents/transcription_entry.js +5 -0
  250. package/dist/web/artifacts/base_artifact_service.js +5 -0
  251. package/dist/web/artifacts/in_memory_artifact_service.js +89 -0
  252. package/dist/web/auth/auth_credential.js +16 -0
  253. package/dist/web/auth/auth_handler.js +62 -0
  254. package/dist/web/auth/auth_schemes.js +31 -0
  255. package/dist/web/auth/auth_tool.js +5 -0
  256. package/dist/web/auth/credential_service/base_credential_service.js +5 -0
  257. package/dist/web/auth/credential_service/in_memory_credential_service.js +33 -0
  258. package/dist/web/code_executors/base_code_executor.js +46 -0
  259. package/dist/web/code_executors/built_in_code_executor.js +28 -0
  260. package/dist/web/code_executors/code_execution_utils.js +105 -0
  261. package/dist/web/code_executors/code_executor_context.js +168 -0
  262. package/dist/web/common.js +85 -0
  263. package/dist/web/events/event.js +90 -0
  264. package/dist/web/events/event_actions.js +67 -0
  265. package/dist/web/examples/base_example_provider.js +10 -0
  266. package/dist/web/examples/example.js +5 -0
  267. package/dist/web/examples/example_util.js +75 -0
  268. package/dist/web/index.js +13 -0
  269. package/dist/web/index.js.map +7 -0
  270. package/dist/web/index_web.js +6 -0
  271. package/dist/web/memory/base_memory_service.js +5 -0
  272. package/dist/web/memory/in_memory_memory_service.js +67 -0
  273. package/dist/web/memory/memory_entry.js +5 -0
  274. package/dist/web/models/base_llm.js +47 -0
  275. package/dist/web/models/base_llm_connection.js +5 -0
  276. package/dist/web/models/gemini_llm_connection.js +120 -0
  277. package/dist/web/models/google_llm.js +332 -0
  278. package/dist/web/models/llm_request.js +50 -0
  279. package/dist/web/models/llm_response.js +41 -0
  280. package/dist/web/models/registry.js +91 -0
  281. package/dist/web/plugins/base_plugin.js +206 -0
  282. package/dist/web/plugins/logging_plugin.js +192 -0
  283. package/dist/web/plugins/plugin_manager.js +209 -0
  284. package/dist/web/plugins/security_plugin.js +119 -0
  285. package/dist/web/runner/in_memory_runner.js +28 -0
  286. package/dist/web/runner/runner.js +277 -0
  287. package/dist/web/sessions/base_session_service.js +41 -0
  288. package/dist/web/sessions/in_memory_session_service.js +154 -0
  289. package/dist/web/sessions/session.js +18 -0
  290. package/dist/web/sessions/state.js +87 -0
  291. package/dist/web/tools/agent_tool.js +118 -0
  292. package/dist/web/tools/base_tool.js +77 -0
  293. package/dist/web/tools/base_toolset.js +46 -0
  294. package/dist/web/tools/forwarding_artifact_service.js +41 -0
  295. package/dist/web/tools/function_tool.js +71 -0
  296. package/dist/web/tools/google_search_tool.js +46 -0
  297. package/dist/web/tools/long_running_tool.js +50 -0
  298. package/dist/web/tools/mcp/mcp_session_manager.js +35 -0
  299. package/dist/web/tools/mcp/mcp_tool.js +35 -0
  300. package/dist/web/tools/mcp/mcp_toolset.js +31 -0
  301. package/dist/web/tools/tool_confirmation.js +19 -0
  302. package/dist/web/tools/tool_context.js +99 -0
  303. package/dist/web/utils/deep_clone.js +14 -0
  304. package/dist/web/utils/env_aware_utils.js +49 -0
  305. package/dist/web/utils/gemini_schema_util.js +58 -0
  306. package/dist/web/utils/logger.js +89 -0
  307. package/dist/web/utils/model_name.js +31 -0
  308. package/dist/web/utils/simple_zod_to_json.js +174 -0
  309. package/dist/web/utils/variant_utils.js +24 -0
  310. package/dist/web/version.js +9 -0
  311. package/package.json +61 -0
@@ -0,0 +1,265 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __await = function(promise, isYieldStar) {
22
+ this[0] = promise;
23
+ this[1] = isYieldStar;
24
+ };
25
+ var __asyncGenerator = (__this, __arguments, generator) => {
26
+ var resume = (k, v, yes, no) => {
27
+ try {
28
+ var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done;
29
+ Promise.resolve(isAwait ? v[0] : v).then((y) => isAwait ? resume(k === "return" ? k : "next", v[1] ? { done: y.done, value: y.value } : y, yes, no) : yes({ value: y, done })).catch((e) => resume("throw", e, yes, no));
30
+ } catch (e) {
31
+ no(e);
32
+ }
33
+ }, method = (k) => it[k] = (x) => new Promise((yes, no) => resume(k, x, yes, no)), it = {};
34
+ return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it;
35
+ };
36
+ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
37
+ /**
38
+ * @license
39
+ * Copyright 2025 Google LLC
40
+ * SPDX-License-Identifier: Apache-2.0
41
+ */
42
+ import { trace } from "@opentelemetry/api";
43
+ import { createEvent } from "../events/event.js";
44
+ import { CallbackContext } from "./callback_context.js";
45
+ import { InvocationContext } from "./invocation_context.js";
46
+ class BaseAgent {
47
+ constructor(config) {
48
+ this.name = validateAgentName(config.name);
49
+ this.description = config.description;
50
+ this.parentAgent = config.parentAgent;
51
+ this.subAgents = config.subAgents || [];
52
+ this.rootAgent = getRootAgent(this);
53
+ this.beforeAgentCallback = getCannonicalCallback(config.beforeAgentCallback);
54
+ this.afterAgentCallback = getCannonicalCallback(config.afterAgentCallback);
55
+ this.setParentAgentForSubAgents();
56
+ }
57
+ /**
58
+ * Entry method to run an agent via text-based conversation.
59
+ *
60
+ * @param parentContext The invocation context of the parent agent.
61
+ * @yields The events generated by the agent.
62
+ * @returns An AsyncGenerator that yields the events generated by the agent.
63
+ */
64
+ runAsync(parentContext) {
65
+ return __asyncGenerator(this, null, function* () {
66
+ const span = trace.getTracer("gcp.vertex.agent").startSpan("agent_run [".concat(this.name, "]"));
67
+ try {
68
+ const context = this.createInvocationContext(parentContext);
69
+ const beforeAgentCallbackEvent = yield new __await(this.handleBeforeAgentCallback(context));
70
+ if (beforeAgentCallbackEvent) {
71
+ yield beforeAgentCallbackEvent;
72
+ }
73
+ if (context.endInvocation) {
74
+ return;
75
+ }
76
+ try {
77
+ for (var iter = __forAwait(this.runAsyncImpl(context)), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
78
+ const event = temp.value;
79
+ yield event;
80
+ }
81
+ } catch (temp) {
82
+ error = [temp];
83
+ } finally {
84
+ try {
85
+ more && (temp = iter.return) && (yield new __await(temp.call(iter)));
86
+ } finally {
87
+ if (error)
88
+ throw error[0];
89
+ }
90
+ }
91
+ if (context.endInvocation) {
92
+ return;
93
+ }
94
+ const afterAgentCallbackEvent = yield new __await(this.handleAfterAgentCallback(context));
95
+ if (afterAgentCallbackEvent) {
96
+ yield afterAgentCallbackEvent;
97
+ }
98
+ } finally {
99
+ span.end();
100
+ }
101
+ });
102
+ }
103
+ /**
104
+ * Entry method to run an agent via video/audio-based conversation.
105
+ *
106
+ * @param parentContext The invocation context of the parent agent.
107
+ * @yields The events generated by the agent.
108
+ * @returns An AsyncGenerator that yields the events generated by the agent.
109
+ */
110
+ runLive(parentContext) {
111
+ return __asyncGenerator(this, null, function* () {
112
+ const span = trace.getTracer("gcp.vertex.agent").startSpan("agent_run [".concat(this.name, "]"));
113
+ try {
114
+ throw new Error("Live mode is not implemented yet.");
115
+ } finally {
116
+ span.end();
117
+ }
118
+ });
119
+ }
120
+ /**
121
+ * Finds the agent with the given name in this agent and its descendants.
122
+ *
123
+ * @param name The name of the agent to find.
124
+ * @return The agent with the given name, or undefined if not found.
125
+ */
126
+ findAgent(name) {
127
+ if (this.name === name) {
128
+ return this;
129
+ }
130
+ return this.findSubAgent(name);
131
+ }
132
+ /**
133
+ * Finds the agent with the given name in this agent's descendants.
134
+ *
135
+ * @param name The name of the agent to find.
136
+ * @return The agent with the given name, or undefined if not found.
137
+ */
138
+ findSubAgent(name) {
139
+ for (const subAgent of this.subAgents) {
140
+ const result = subAgent.findAgent(name);
141
+ if (result) {
142
+ return result;
143
+ }
144
+ }
145
+ return void 0;
146
+ }
147
+ /**
148
+ * Creates an invocation context for this agent.
149
+ *
150
+ * @param parentContext The invocation context of the parent agent.
151
+ * @return The invocation context for this agent.
152
+ */
153
+ createInvocationContext(parentContext) {
154
+ return new InvocationContext(__spreadProps(__spreadValues({}, parentContext), {
155
+ agent: this
156
+ }));
157
+ }
158
+ /**
159
+ * Runs the before agent callback if it exists.
160
+ *
161
+ * @param invocationContext The invocation context of the agent.
162
+ * @return The event to return to the user, or undefined if no event is
163
+ * generated.
164
+ */
165
+ async handleBeforeAgentCallback(invocationContext) {
166
+ if (this.beforeAgentCallback.length === 0) {
167
+ return void 0;
168
+ }
169
+ const callbackContext = new CallbackContext({ invocationContext });
170
+ for (const callback of this.beforeAgentCallback) {
171
+ const content = await callback(callbackContext);
172
+ if (content) {
173
+ invocationContext.endInvocation = true;
174
+ return createEvent({
175
+ invocationId: invocationContext.invocationId,
176
+ author: this.name,
177
+ branch: invocationContext.branch,
178
+ content,
179
+ actions: callbackContext.eventActions
180
+ });
181
+ }
182
+ }
183
+ if (callbackContext.state.hasDelta()) {
184
+ return createEvent({
185
+ invocationId: invocationContext.invocationId,
186
+ author: this.name,
187
+ branch: invocationContext.branch,
188
+ actions: callbackContext.eventActions
189
+ });
190
+ }
191
+ return void 0;
192
+ }
193
+ /**
194
+ * Runs the after agent callback if it exists.
195
+ *
196
+ * @param invocationContext The invocation context of the agent.
197
+ * @return The event to return to the user, or undefined if no event is
198
+ * generated.
199
+ */
200
+ async handleAfterAgentCallback(invocationContext) {
201
+ if (this.afterAgentCallback.length === 0) {
202
+ return void 0;
203
+ }
204
+ const callbackContext = new CallbackContext({ invocationContext });
205
+ for (const callback of this.afterAgentCallback) {
206
+ const content = await callback(callbackContext);
207
+ if (content) {
208
+ return createEvent({
209
+ invocationId: invocationContext.invocationId,
210
+ author: this.name,
211
+ branch: invocationContext.branch,
212
+ content,
213
+ actions: callbackContext.eventActions
214
+ });
215
+ }
216
+ }
217
+ if (callbackContext.state.hasDelta()) {
218
+ return createEvent({
219
+ invocationId: invocationContext.invocationId,
220
+ author: this.name,
221
+ branch: invocationContext.branch,
222
+ actions: callbackContext.eventActions
223
+ });
224
+ }
225
+ return void 0;
226
+ }
227
+ setParentAgentForSubAgents() {
228
+ for (const subAgent of this.subAgents) {
229
+ if (subAgent.parentAgent) {
230
+ throw new Error('Agent "'.concat(subAgent.name, '" already has a parent agent, current parent: "').concat(subAgent.parentAgent.name, '", trying to add: "').concat(this.name, '"'));
231
+ }
232
+ subAgent.parentAgent = this;
233
+ }
234
+ }
235
+ }
236
+ function validateAgentName(name) {
237
+ if (!isIdentifier(name)) {
238
+ throw new Error('Found invalid agent name: "'.concat(name, '". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), and underscores.'));
239
+ }
240
+ if (name === "user") {
241
+ throw new Error(
242
+ "Agent name cannot be 'user'. 'user' is reserved for end-user's input."
243
+ );
244
+ }
245
+ return name;
246
+ }
247
+ function isIdentifier(str) {
248
+ return new RegExp("^[\\p{ID_Start}$_][\\p{ID_Continue}$_]*$", "u").test(str);
249
+ }
250
+ function getRootAgent(rootAgent) {
251
+ while (rootAgent.parentAgent) {
252
+ rootAgent = rootAgent.parentAgent;
253
+ }
254
+ return rootAgent;
255
+ }
256
+ function getCannonicalCallback(callbacks) {
257
+ if (!callbacks) {
258
+ return [];
259
+ }
260
+ return Array.isArray(callbacks) ? callbacks : [callbacks];
261
+ }
262
+ export {
263
+ BaseAgent,
264
+ getCannonicalCallback
265
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ class BaseLlmRequestProcessor {
7
+ }
8
+ class BaseLlmResponseProcessor {
9
+ }
10
+ export {
11
+ BaseLlmRequestProcessor,
12
+ BaseLlmResponseProcessor
13
+ };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { createEventActions } from "../events/event_actions.js";
7
+ import { State } from "../sessions/state.js";
8
+ import { ReadonlyContext } from "./readonly_context.js";
9
+ class CallbackContext extends ReadonlyContext {
10
+ constructor({ invocationContext, eventActions }) {
11
+ super(invocationContext);
12
+ this.eventActions = eventActions || createEventActions();
13
+ this._state = new State(
14
+ invocationContext.session.state,
15
+ this.eventActions.stateDelta
16
+ );
17
+ }
18
+ /**
19
+ * The delta-aware state of the current session.
20
+ */
21
+ get state() {
22
+ return this._state;
23
+ }
24
+ /**
25
+ * Loads an artifact attached to the current session.
26
+ *
27
+ * @param filename The filename of the artifact.
28
+ * @param version The version of the artifact. If not provided, the latest
29
+ * version will be used.
30
+ * @return A promise that resolves to the loaded artifact.
31
+ */
32
+ loadArtifact(filename, version) {
33
+ if (!this.invocationContext.artifactService) {
34
+ throw new Error("Artifact service is not initialized.");
35
+ }
36
+ return this.invocationContext.artifactService.loadArtifact({
37
+ appName: this.invocationContext.appName,
38
+ userId: this.invocationContext.userId,
39
+ sessionId: this.invocationContext.session.id,
40
+ filename,
41
+ version
42
+ });
43
+ }
44
+ /**
45
+ * Saves an artifact attached to the current session.
46
+ *
47
+ * @param filename The filename of the artifact.
48
+ * @param artifact The artifact to save.
49
+ * @return A promise that resolves to the version of the saved artifact.
50
+ */
51
+ async saveArtifact(filename, artifact) {
52
+ if (!this.invocationContext.artifactService) {
53
+ throw new Error("Artifact service is not initialized.");
54
+ }
55
+ const version = await this.invocationContext.artifactService.saveArtifact({
56
+ appName: this.invocationContext.appName,
57
+ userId: this.invocationContext.userId,
58
+ sessionId: this.invocationContext.session.id,
59
+ filename,
60
+ artifact
61
+ });
62
+ this.eventActions.artifactDelta[filename] = version;
63
+ return version;
64
+ }
65
+ }
66
+ export {
67
+ CallbackContext
68
+ };
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { createEvent, getFunctionCalls, getFunctionResponses } from "../events/event.js";
7
+ import { deepClone } from "../utils/deep_clone.js";
8
+ import { removeClientFunctionCallId, REQUEST_CONFIRMATION_FUNCTION_CALL_NAME, REQUEST_EUC_FUNCTION_CALL_NAME } from "./functions.js";
9
+ function getContents(events, agentName, currentBranch) {
10
+ var _a, _b, _c;
11
+ const filteredEvents = [];
12
+ for (const event of events) {
13
+ if (!((_a = event.content) == null ? void 0 : _a.role) || ((_c = (_b = event.content.parts) == null ? void 0 : _b[0]) == null ? void 0 : _c.text) === "") {
14
+ continue;
15
+ }
16
+ if (currentBranch && event.branch && !currentBranch.startsWith(event.branch)) {
17
+ continue;
18
+ }
19
+ if (isAuthEvent(event)) {
20
+ continue;
21
+ }
22
+ if (isToolConfirmationEvent(event)) {
23
+ continue;
24
+ }
25
+ filteredEvents.push(
26
+ isEventFromAnotherAgent(agentName, event) ? convertForeignEvent(event) : event
27
+ );
28
+ }
29
+ let resultEvents = rearrangeEventsForLatestFunctionResponse(filteredEvents);
30
+ resultEvents = rearrangeEventsForAsyncFunctionResponsesInHistory(resultEvents);
31
+ const contents = [];
32
+ for (const event of resultEvents) {
33
+ const content = deepClone(event.content);
34
+ removeClientFunctionCallId(content);
35
+ contents.push(content);
36
+ }
37
+ return contents;
38
+ }
39
+ function getCurrentTurnContents(events, agentName, currentBranch) {
40
+ for (let i = events.length - 1; i >= 0; i--) {
41
+ const event = events[i];
42
+ if (event.author === "user" || isEventFromAnotherAgent(agentName, event)) {
43
+ return getContents(events.slice(i), agentName, currentBranch);
44
+ }
45
+ }
46
+ return [];
47
+ }
48
+ function isAuthEvent(event) {
49
+ var _a, _b, _c;
50
+ if (!((_a = event.content) == null ? void 0 : _a.parts)) {
51
+ return false;
52
+ }
53
+ for (const part of event.content.parts) {
54
+ if (((_b = part.functionCall) == null ? void 0 : _b.name) === REQUEST_EUC_FUNCTION_CALL_NAME || ((_c = part.functionResponse) == null ? void 0 : _c.name) === REQUEST_EUC_FUNCTION_CALL_NAME) {
55
+ return true;
56
+ }
57
+ }
58
+ return false;
59
+ }
60
+ function isToolConfirmationEvent(event) {
61
+ var _a, _b, _c;
62
+ if (!((_a = event.content) == null ? void 0 : _a.parts)) {
63
+ return false;
64
+ }
65
+ for (const part of event.content.parts) {
66
+ if (((_b = part.functionCall) == null ? void 0 : _b.name) === REQUEST_CONFIRMATION_FUNCTION_CALL_NAME || ((_c = part.functionResponse) == null ? void 0 : _c.name) === REQUEST_CONFIRMATION_FUNCTION_CALL_NAME) {
67
+ return true;
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+ function isEventFromAnotherAgent(agentName, event) {
73
+ return !!agentName && event.author !== agentName && event.author !== "user";
74
+ }
75
+ function convertForeignEvent(event) {
76
+ var _a, _b, _c, _d, _e;
77
+ if (!((_a = event.content) == null ? void 0 : _a.parts)) {
78
+ return event;
79
+ }
80
+ const content = {
81
+ role: "user",
82
+ parts: [{
83
+ text: "For context:"
84
+ }]
85
+ };
86
+ for (const part of event.content.parts) {
87
+ if (part.text && !part.thought) {
88
+ (_b = content.parts) == null ? void 0 : _b.push({
89
+ text: "[".concat(event.author, "] said: ").concat(part.text)
90
+ });
91
+ } else if (part.functionCall) {
92
+ (_c = content.parts) == null ? void 0 : _c.push({
93
+ text: "[".concat(event.author, "] called tool `").concat(part.functionCall.name, "` with parameters: ").concat(part.functionCall.args)
94
+ });
95
+ } else if (part.functionResponse) {
96
+ (_d = content.parts) == null ? void 0 : _d.push({
97
+ text: "[".concat(event.author, "] tool `").concat(part.functionResponse.name, "` returned result: ").concat(part.functionResponse.response)
98
+ });
99
+ } else {
100
+ (_e = content.parts) == null ? void 0 : _e.push(part);
101
+ }
102
+ }
103
+ return createEvent({
104
+ invocationId: event.invocationId,
105
+ author: "user",
106
+ content,
107
+ branch: event.branch,
108
+ timestamp: event.timestamp
109
+ });
110
+ }
111
+ function mergeFunctionResponseEvents(events) {
112
+ var _a;
113
+ if (events.length === 0) {
114
+ throw new Error("Cannot merge an empty list of events.");
115
+ }
116
+ const mergedEvent = createEvent(events[0]);
117
+ const partsInMergedEvent = ((_a = mergedEvent.content) == null ? void 0 : _a.parts) || [];
118
+ if (partsInMergedEvent.length === 0) {
119
+ throw new Error("There should be at least one function_response part.");
120
+ }
121
+ const partIndicesInMergedEvent = {};
122
+ for (let i = 0; i < partsInMergedEvent.length; i++) {
123
+ const part = partsInMergedEvent[i];
124
+ if (part.functionResponse && part.functionResponse.id) {
125
+ partIndicesInMergedEvent[part.functionResponse.id] = i;
126
+ }
127
+ }
128
+ for (const event of events.slice(1)) {
129
+ if (!event.content || !event.content.parts) {
130
+ throw new Error("There should be at least one function_response part.");
131
+ }
132
+ for (const part of event.content.parts) {
133
+ if (part.functionResponse && part.functionResponse.id) {
134
+ const functionCallId = part.functionResponse.id;
135
+ if (functionCallId in partIndicesInMergedEvent) {
136
+ partsInMergedEvent[partIndicesInMergedEvent[functionCallId]] = part;
137
+ } else {
138
+ partsInMergedEvent.push(part);
139
+ partIndicesInMergedEvent[functionCallId] = partsInMergedEvent.length - 1;
140
+ }
141
+ } else {
142
+ partsInMergedEvent.push(part);
143
+ }
144
+ }
145
+ }
146
+ return mergedEvent;
147
+ }
148
+ function rearrangeEventsForLatestFunctionResponse(events) {
149
+ if (events.length === 0) {
150
+ return events;
151
+ }
152
+ const latestEvent = events[events.length - 1];
153
+ const functionResponses = getFunctionResponses(latestEvent);
154
+ if (!(functionResponses == null ? void 0 : functionResponses.length)) {
155
+ return events;
156
+ }
157
+ let functionResponsesIds = new Set(
158
+ functionResponses.filter((response) => !!response.id).map((response) => response.id)
159
+ );
160
+ const secondLatestEvent = events.at(-2);
161
+ if (secondLatestEvent) {
162
+ const functionCallsFromSecondLatest = getFunctionCalls(secondLatestEvent);
163
+ if (functionCallsFromSecondLatest) {
164
+ for (const functionCall of functionCallsFromSecondLatest) {
165
+ if (functionCall.id && functionResponsesIds.has(functionCall.id)) {
166
+ return events;
167
+ }
168
+ }
169
+ }
170
+ }
171
+ let functionCallEventIdx = -1;
172
+ for (let idx = events.length - 2; idx >= 0; idx--) {
173
+ const event = events[idx];
174
+ const functionCalls = getFunctionCalls(event);
175
+ if (!(functionCalls == null ? void 0 : functionCalls.length)) {
176
+ continue;
177
+ }
178
+ for (const functionCall of functionCalls) {
179
+ if (functionCall.id && functionResponsesIds.has(functionCall.id)) {
180
+ functionCallEventIdx = idx;
181
+ const functionCallIds = new Set(
182
+ functionCalls.map((fc) => fc.id).filter((id) => !!id)
183
+ );
184
+ const isSubset = Array.from(functionResponsesIds).every((id) => functionCallIds.has(id));
185
+ if (!isSubset) {
186
+ throw new Error(
187
+ "Last response event should only contain the responses for the function calls in the same function call event. Function" + " call ids found : ".concat(Array.from(functionCallIds).join(", "), ", function response") + " ids provided: ".concat(Array.from(functionResponsesIds).join(", "))
188
+ );
189
+ }
190
+ functionResponsesIds = functionCallIds;
191
+ break;
192
+ }
193
+ }
194
+ }
195
+ if (functionCallEventIdx === -1) {
196
+ throw new Error(
197
+ "No function call event found for function responses ids: ".concat(Array.from(
198
+ functionResponsesIds
199
+ ).join(", "))
200
+ );
201
+ }
202
+ const functionResponseEvents = [];
203
+ for (let idx = functionCallEventIdx + 1; idx < events.length - 1; idx++) {
204
+ const event = events[idx];
205
+ const responses = getFunctionResponses(event);
206
+ if (responses && responses.some(
207
+ (response) => response.id && functionResponsesIds.has(response.id)
208
+ )) {
209
+ functionResponseEvents.push(event);
210
+ }
211
+ }
212
+ functionResponseEvents.push(events[events.length - 1]);
213
+ const resultEvents = events.slice(0, functionCallEventIdx + 1);
214
+ resultEvents.push(mergeFunctionResponseEvents(functionResponseEvents));
215
+ return resultEvents;
216
+ }
217
+ function rearrangeEventsForAsyncFunctionResponsesInHistory(events) {
218
+ const functionCallIdToResponseEventIndex = /* @__PURE__ */ new Map();
219
+ for (let i = 0; i < events.length; i++) {
220
+ const event = events[i];
221
+ const functionResponses = getFunctionResponses(event);
222
+ if (functionResponses == null ? void 0 : functionResponses.length) {
223
+ for (const functionResponse of functionResponses) {
224
+ if (!functionResponse.id) {
225
+ continue;
226
+ }
227
+ functionCallIdToResponseEventIndex.set(functionResponse.id, i);
228
+ }
229
+ }
230
+ }
231
+ const resultEvents = [];
232
+ for (const event of events) {
233
+ if (getFunctionResponses(event).length > 0) {
234
+ continue;
235
+ }
236
+ const functionCalls = getFunctionCalls(event);
237
+ if (functionCalls == null ? void 0 : functionCalls.length) {
238
+ const functionResponseEventsIndices = /* @__PURE__ */ new Set();
239
+ for (const functionCall of functionCalls) {
240
+ const functionCallId = functionCall.id;
241
+ if (functionCallId && functionCallIdToResponseEventIndex.has(functionCallId)) {
242
+ functionResponseEventsIndices.add(
243
+ functionCallIdToResponseEventIndex.get(functionCallId)
244
+ );
245
+ }
246
+ }
247
+ resultEvents.push(event);
248
+ if (functionResponseEventsIndices.size === 0) {
249
+ continue;
250
+ }
251
+ if (functionResponseEventsIndices.size === 1) {
252
+ const [responseIndex] = [...functionResponseEventsIndices];
253
+ resultEvents.push(events[responseIndex]);
254
+ } else {
255
+ const indicesArray = Array.from(functionResponseEventsIndices).sort((a, b) => a - b);
256
+ const eventsToMerge = indicesArray.map((index) => events[index]);
257
+ resultEvents.push(mergeFunctionResponseEvents(eventsToMerge));
258
+ }
259
+ } else {
260
+ resultEvents.push(event);
261
+ }
262
+ }
263
+ return resultEvents;
264
+ }
265
+ export {
266
+ getContents,
267
+ getCurrentTurnContents
268
+ };