@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,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BaseAgent } from "./base_agent.js";
7
+ class LoopAgent extends BaseAgent {
8
+ constructor(config) {
9
+ var _a;
10
+ super(config);
11
+ this.maxIterations = (_a = config.maxIterations) != null ? _a : Number.MAX_SAFE_INTEGER;
12
+ }
13
+ async *runAsyncImpl(context) {
14
+ let iteration = 0;
15
+ while (iteration < this.maxIterations) {
16
+ for (const subAgent of this.subAgents) {
17
+ let shouldExit = false;
18
+ for await (const event of subAgent.runAsync(context)) {
19
+ yield event;
20
+ if (event.actions.escalate) {
21
+ shouldExit = true;
22
+ }
23
+ }
24
+ if (shouldExit) {
25
+ return;
26
+ }
27
+ }
28
+ iteration++;
29
+ }
30
+ return;
31
+ }
32
+ async *runLiveImpl(context) {
33
+ throw new Error("This is not supported yet for LoopAgent.");
34
+ }
35
+ }
36
+ export {
37
+ LoopAgent
38
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BaseAgent } from "./base_agent.js";
7
+ import { InvocationContext } from "./invocation_context.js";
8
+ class ParallelAgent extends BaseAgent {
9
+ async *runAsyncImpl(context) {
10
+ const agentRuns = this.subAgents.map(
11
+ (subAgent) => subAgent.runAsync(
12
+ createBranchCtxForSubAgent(this, subAgent, context)
13
+ )
14
+ );
15
+ for await (const event of mergeAgentRuns(agentRuns)) {
16
+ yield event;
17
+ }
18
+ }
19
+ async *runLiveImpl(context) {
20
+ throw new Error("This is not supported yet for ParallelAgent.");
21
+ }
22
+ }
23
+ function createBranchCtxForSubAgent(agent, subAgent, originalContext) {
24
+ const invocationContext = new InvocationContext(originalContext);
25
+ const branchSuffix = `${agent.name}.${subAgent.name}`;
26
+ invocationContext.branch = invocationContext.branch ? `${invocationContext.branch}.${branchSuffix}` : branchSuffix;
27
+ return invocationContext;
28
+ }
29
+ async function* mergeAgentRuns(agentRuns) {
30
+ const pendingPromises = /* @__PURE__ */ new Map();
31
+ for (const [index, generator] of agentRuns.entries()) {
32
+ const promise = generator.next().then((result) => ({ result, index }));
33
+ pendingPromises.set(index, promise);
34
+ }
35
+ while (pendingPromises.size > 0) {
36
+ const { result, index } = await Promise.race(pendingPromises.values());
37
+ if (result.done) {
38
+ pendingPromises.delete(index);
39
+ continue;
40
+ }
41
+ yield result.value;
42
+ const nextPromise = agentRuns[index].next().then((result2) => ({ result: result2, index }));
43
+ pendingPromises.set(index, nextPromise);
44
+ }
45
+ }
46
+ export {
47
+ ParallelAgent
48
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { State } from "../sessions/state.js";
7
+ class ReadonlyContext {
8
+ constructor(invocationContext) {
9
+ this.invocationContext = invocationContext;
10
+ }
11
+ /**
12
+ * The user content that started this invocation.
13
+ */
14
+ get userContent() {
15
+ return this.invocationContext.userContent;
16
+ }
17
+ /**
18
+ * The current invocation id.
19
+ */
20
+ get invocationId() {
21
+ return this.invocationContext.invocationId;
22
+ }
23
+ /**
24
+ * The current agent name.
25
+ */
26
+ get agentName() {
27
+ return this.invocationContext.agent.name;
28
+ }
29
+ /**
30
+ * The state of the current session.
31
+ */
32
+ get state() {
33
+ return new State(this.invocationContext.session.state, {});
34
+ }
35
+ }
36
+ export {
37
+ ReadonlyContext
38
+ };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { logger } from "../utils/logger.js";
7
+ var StreamingMode = /* @__PURE__ */ ((StreamingMode2) => {
8
+ StreamingMode2["NONE"] = "none";
9
+ StreamingMode2["SSE"] = "sse";
10
+ StreamingMode2["BIDI"] = "bidi";
11
+ return StreamingMode2;
12
+ })(StreamingMode || {});
13
+ class RunConfig {
14
+ constructor(params = {}) {
15
+ this.speechConfig = params.speechConfig;
16
+ this.responseModalities = params.responseModalities;
17
+ this.saveInputBlobsAsArtifacts = params.saveInputBlobsAsArtifacts || false;
18
+ this.supportCfc = params.supportCfc || false;
19
+ this.streamingMode = params.streamingMode || "none" /* NONE */;
20
+ this.outputAudioTranscription = params.outputAudioTranscription;
21
+ this.inputAudioTranscription = params.inputAudioTranscription;
22
+ this.enableAffectiveDialog = params.enableAffectiveDialog || false;
23
+ this.realtimeInputConfig = params.realtimeInputConfig;
24
+ this.maxLlmCalls = validateMaxLlmCalls(params.maxLlmCalls || 500);
25
+ }
26
+ }
27
+ function validateMaxLlmCalls(value) {
28
+ if (value > Number.MAX_SAFE_INTEGER) {
29
+ throw new Error(
30
+ `maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`
31
+ );
32
+ }
33
+ if (value <= 0) {
34
+ logger.warn(
35
+ "maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."
36
+ );
37
+ }
38
+ return value;
39
+ }
40
+ export {
41
+ RunConfig,
42
+ StreamingMode
43
+ };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FunctionTool } from "../tools/function_tool.js";
7
+ import { BaseAgent } from "./base_agent.js";
8
+ import { LlmAgent } from "./llm_agent.js";
9
+ import { ReadonlyContext } from "./readonly_context.js";
10
+ const TASK_COMPLETED_TOOL_NAME = "task_completed";
11
+ class SequentialAgent extends BaseAgent {
12
+ async *runAsyncImpl(context) {
13
+ for (const subAgent of this.subAgents) {
14
+ for await (const event of subAgent.runAsync(context)) {
15
+ yield event;
16
+ }
17
+ }
18
+ }
19
+ /**
20
+ * Implementation for live SequentialAgent.
21
+ *
22
+ * Compared to the non-live case, live agents process a continuous stream of
23
+ * audio or video, so there is no way to tell if it's finished and should pass
24
+ * to the next agent or not. So we introduce a task_completed() function so
25
+ * the model can call this function to signal that it's finished the task and
26
+ * we can move on to the next agent.
27
+ *
28
+ * @param context: The invocation context of the agent.
29
+ */
30
+ async *runLiveImpl(context) {
31
+ for (const subAgent of this.subAgents) {
32
+ if (subAgent instanceof LlmAgent) {
33
+ const agentTools = await subAgent.canonicalTools(new ReadonlyContext(context));
34
+ const taskCompletedToolAlreadyAdded = agentTools.some((tool) => tool.name === TASK_COMPLETED_TOOL_NAME);
35
+ if (!taskCompletedToolAlreadyAdded) {
36
+ subAgent.tools.push(new FunctionTool({
37
+ name: TASK_COMPLETED_TOOL_NAME,
38
+ description: `Signals that the model has successfully completed the user's question or task.`,
39
+ execute: () => "Task completion signaled."
40
+ }));
41
+ subAgent.instruction += `If you finished the user's request according to its description, call the ${TASK_COMPLETED_TOOL_NAME} function to exit so the next agents can take over. When calling this function, do not generate any text other than the function call.`;
42
+ }
43
+ }
44
+ }
45
+ for (const subAgent of this.subAgents) {
46
+ for await (const event of subAgent.runLive(context)) {
47
+ yield event;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ export {
53
+ SequentialAgent
54
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ class InMemoryArtifactService {
7
+ constructor() {
8
+ this.artifacts = {};
9
+ }
10
+ saveArtifact({
11
+ appName,
12
+ userId,
13
+ sessionId,
14
+ filename,
15
+ artifact
16
+ }) {
17
+ const path = artifactPath(appName, userId, sessionId, filename);
18
+ if (!this.artifacts[path]) {
19
+ this.artifacts[path] = [];
20
+ }
21
+ const version = this.artifacts[path].length;
22
+ this.artifacts[path].push(artifact);
23
+ return Promise.resolve(version);
24
+ }
25
+ loadArtifact({
26
+ appName,
27
+ userId,
28
+ sessionId,
29
+ filename,
30
+ version
31
+ }) {
32
+ const path = artifactPath(appName, userId, sessionId, filename);
33
+ const versions = this.artifacts[path];
34
+ if (!versions) {
35
+ return Promise.resolve(void 0);
36
+ }
37
+ if (version === void 0) {
38
+ version = versions.length - 1;
39
+ }
40
+ return Promise.resolve(versions[version]);
41
+ }
42
+ listArtifactKeys({ appName, userId, sessionId }) {
43
+ const sessionPrefix = `${appName}/${userId}/${sessionId}/`;
44
+ const usernamespacePrefix = `${appName}/${userId}/user/`;
45
+ const filenames = [];
46
+ for (const path in this.artifacts) {
47
+ if (path.startsWith(sessionPrefix)) {
48
+ const filename = path.replace(sessionPrefix, "");
49
+ filenames.push(filename);
50
+ } else if (path.startsWith(usernamespacePrefix)) {
51
+ const filename = path.replace(usernamespacePrefix, "");
52
+ filenames.push(filename);
53
+ }
54
+ }
55
+ return Promise.resolve(filenames.sort());
56
+ }
57
+ deleteArtifact({ appName, userId, sessionId, filename }) {
58
+ const path = artifactPath(appName, userId, sessionId, filename);
59
+ if (!this.artifacts[path]) {
60
+ return Promise.resolve();
61
+ }
62
+ delete this.artifacts[path];
63
+ return Promise.resolve();
64
+ }
65
+ listVersions({ appName, userId, sessionId, filename }) {
66
+ const path = artifactPath(appName, userId, sessionId, filename);
67
+ const artifacts = this.artifacts[path];
68
+ if (!artifacts) {
69
+ return Promise.resolve([]);
70
+ }
71
+ let versions = [];
72
+ for (let i = 0; i < artifacts.length; i++) {
73
+ versions.push(i);
74
+ }
75
+ return Promise.resolve(versions);
76
+ }
77
+ }
78
+ function artifactPath(appName, userId, sessionId, filename) {
79
+ if (fileHasUserNamespace(filename)) {
80
+ return `${appName}/${userId}/user/${filename}`;
81
+ }
82
+ return `${appName}/${userId}/${sessionId}/${filename}`;
83
+ }
84
+ function fileHasUserNamespace(filename) {
85
+ return filename.startsWith("user:");
86
+ }
87
+ export {
88
+ InMemoryArtifactService
89
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ var AuthCredentialTypes = /* @__PURE__ */ ((AuthCredentialTypes2) => {
7
+ AuthCredentialTypes2["API_KEY"] = "apiKey";
8
+ AuthCredentialTypes2["HTTP"] = "http";
9
+ AuthCredentialTypes2["OAUTH2"] = "oauth2";
10
+ AuthCredentialTypes2["OPEN_ID_CONNECT"] = "openIdConnect";
11
+ AuthCredentialTypes2["SERVICE_ACCOUNT"] = "serviceAccount";
12
+ return AuthCredentialTypes2;
13
+ })(AuthCredentialTypes || {});
14
+ export {
15
+ AuthCredentialTypes
16
+ };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ class AuthHandler {
7
+ constructor(authConfig) {
8
+ this.authConfig = authConfig;
9
+ }
10
+ getAuthResponse(state) {
11
+ const credentialKey = "temp:" + this.authConfig.credentialKey;
12
+ return state.get(credentialKey);
13
+ }
14
+ generateAuthRequest() {
15
+ var _a, _b;
16
+ const authSchemeType = this.authConfig.authScheme.type;
17
+ if (!["oauth2", "openIdConnect"].includes(authSchemeType)) {
18
+ return this.authConfig;
19
+ }
20
+ if ((_b = (_a = this.authConfig.exchangedAuthCredential) == null ? void 0 : _a.oauth2) == null ? void 0 : _b.authUri) {
21
+ return this.authConfig;
22
+ }
23
+ if (!this.authConfig.rawAuthCredential) {
24
+ throw new Error(`Auth Scheme ${authSchemeType} requires authCredential.`);
25
+ }
26
+ if (!this.authConfig.rawAuthCredential.oauth2) {
27
+ throw new Error(
28
+ `Auth Scheme ${authSchemeType} requires oauth2 in authCredential.`
29
+ );
30
+ }
31
+ if (this.authConfig.rawAuthCredential.oauth2.authUri) {
32
+ return {
33
+ credentialKey: this.authConfig.credentialKey,
34
+ authScheme: this.authConfig.authScheme,
35
+ rawAuthCredential: this.authConfig.rawAuthCredential,
36
+ exchangedAuthCredential: this.authConfig.rawAuthCredential
37
+ };
38
+ }
39
+ if (!this.authConfig.rawAuthCredential.oauth2.clientId || !this.authConfig.rawAuthCredential.oauth2.clientSecret) {
40
+ throw new Error(`Auth Scheme ${authSchemeType} requires both clientId and clientSecret in authCredential.oauth2.`);
41
+ }
42
+ return {
43
+ credentialKey: this.authConfig.credentialKey,
44
+ authScheme: this.authConfig.authScheme,
45
+ rawAuthCredential: this.authConfig.rawAuthCredential,
46
+ exchangedAuthCredential: this.generateAuthUri()
47
+ };
48
+ }
49
+ /**
50
+ * Generates an response containing the auth uri for user to sign in.
51
+ *
52
+ * @return An AuthCredential object containing the auth URI and state.
53
+ * @throws Error: If the authorization endpoint is not configured in the
54
+ * auth scheme.
55
+ */
56
+ generateAuthUri() {
57
+ return this.authConfig.rawAuthCredential;
58
+ }
59
+ }
60
+ export {
61
+ AuthHandler
62
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ var OAuthGrantType = /* @__PURE__ */ ((OAuthGrantType2) => {
7
+ OAuthGrantType2["CLIENT_CREDENTIALS"] = "client_credentials";
8
+ OAuthGrantType2["AUTHORIZATION_CODE"] = "authorization_code";
9
+ OAuthGrantType2["IMPLICIT"] = "implicit";
10
+ OAuthGrantType2["PASSWORD"] = "password";
11
+ return OAuthGrantType2;
12
+ })(OAuthGrantType || {});
13
+ function getOAuthGrantTypeFromFlow(flow) {
14
+ if (flow.clientCredentials) {
15
+ return "client_credentials" /* CLIENT_CREDENTIALS */;
16
+ }
17
+ if (flow.authorizationCode) {
18
+ return "authorization_code" /* AUTHORIZATION_CODE */;
19
+ }
20
+ if (flow.implicit) {
21
+ return "implicit" /* IMPLICIT */;
22
+ }
23
+ if (flow.password) {
24
+ return "password" /* PASSWORD */;
25
+ }
26
+ return void 0;
27
+ }
28
+ export {
29
+ OAuthGrantType,
30
+ getOAuthGrantTypeFromFlow
31
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ class InMemoryCredentialService {
7
+ constructor() {
8
+ this.credentials = {};
9
+ }
10
+ loadCredential(authConfig, toolContext) {
11
+ const credentialBucket = this.getBucketForCurrentContext(toolContext);
12
+ return Promise.resolve(credentialBucket[authConfig.credentialKey]);
13
+ }
14
+ async saveCredential(authConfig, toolContext) {
15
+ const credentialBucket = this.getBucketForCurrentContext(toolContext);
16
+ if (authConfig.exchangedAuthCredential) {
17
+ credentialBucket[authConfig.credentialKey] = authConfig.exchangedAuthCredential;
18
+ }
19
+ }
20
+ getBucketForCurrentContext(toolContext) {
21
+ const { appName, userId } = toolContext.invocationContext.session;
22
+ if (!this.credentials[appName]) {
23
+ this.credentials[appName] = {};
24
+ }
25
+ if (!this.credentials[appName][userId]) {
26
+ this.credentials[appName][userId] = {};
27
+ }
28
+ return this.credentials[appName][userId];
29
+ }
30
+ }
31
+ export {
32
+ InMemoryCredentialService
33
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ class BaseCodeExecutor {
7
+ constructor() {
8
+ /**
9
+ * If true, extract and process data files from the model request
10
+ * and attach them to the code executor.
11
+ *
12
+ * Supported data file MimeTypes are [text/csv].
13
+ * Default to false.
14
+ */
15
+ this.optimizeDataFile = false;
16
+ /**
17
+ * Whether the code executor is stateful. Default to false.
18
+ */
19
+ this.stateful = false;
20
+ /**
21
+ * The number of attempts to retry on consecutive code execution errors.
22
+ * Default to 2.
23
+ */
24
+ this.errorRetryAttempts = 2;
25
+ /**
26
+ * The list of the enclosing delimiters to identify the code blocks.
27
+ * For example, the delimiter('```python\\n', '\\n```') can be used to
28
+ * identify code blocks with the following format::
29
+ *
30
+ * ```python
31
+ * print("hello")
32
+ * ```
33
+ */
34
+ this.codeBlockDelimiters = [
35
+ ["```tool_code\n", "\n```"],
36
+ ["```python\n", "\n```"]
37
+ ];
38
+ /**
39
+ * The delimiters to format the code execution result.
40
+ */
41
+ this.executionResultDelimiters = ["```tool_output\n", "\n```"];
42
+ }
43
+ }
44
+ export {
45
+ BaseCodeExecutor
46
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { isGemini2Model } from "../utils/model_name.js";
7
+ import { BaseCodeExecutor } from "./base_code_executor.js";
8
+ class BuiltInCodeExecutor extends BaseCodeExecutor {
9
+ executeCode(params) {
10
+ return Promise.resolve({
11
+ stdout: "",
12
+ stderr: "",
13
+ outputFiles: []
14
+ });
15
+ }
16
+ processLlmRequest(llmRequest) {
17
+ if (llmRequest.model && isGemini2Model(llmRequest.model)) {
18
+ llmRequest.config = llmRequest.config || {};
19
+ llmRequest.config.tools = llmRequest.config.tools || [];
20
+ llmRequest.config.tools.push({ codeExecution: {} });
21
+ return;
22
+ }
23
+ throw new Error(`Gemini code execution tool is not supported for model ${llmRequest.model}`);
24
+ }
25
+ }
26
+ export {
27
+ BuiltInCodeExecutor
28
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Language, Outcome } from "@google/genai";
7
+ import { deepClone } from "../utils/deep_clone.js";
8
+ import { base64Encode, isBase64Encoded } from "../utils/env_aware_utils.js";
9
+ function getEncodedFileContent(data) {
10
+ return isBase64Encoded(data) ? data : base64Encode(data);
11
+ }
12
+ function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
13
+ var _a;
14
+ if (!((_a = content.parts) == null ? void 0 : _a.length)) {
15
+ return "";
16
+ }
17
+ for (let i = 0; i < content.parts.length; i++) {
18
+ const part = content.parts[i];
19
+ if (part.executableCode && (i === content.parts.length - 1 || !content.parts[i + 1].codeExecutionResult)) {
20
+ content.parts = content.parts.slice(0, i + 1);
21
+ return part.executableCode.code;
22
+ }
23
+ }
24
+ const textParts = content.parts.filter((part) => part.text);
25
+ if (!textParts.length) {
26
+ return "";
27
+ }
28
+ const firstTextPart = deepClone(textParts[0]);
29
+ const responseText = textParts.map((part) => part.text).join("\n");
30
+ const leadingDelimiterPattern = codeBlockDelimiters.map((d) => d[0]).join("|");
31
+ const trailingDelimiterPattern = codeBlockDelimiters.map((d) => d[1]).join("|");
32
+ const match = new RegExp(
33
+ `?<prefix>.*?)(${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
34
+ "s"
35
+ ).exec(responseText);
36
+ const { prefix, codeStr } = (match == null ? void 0 : match.groups) || {};
37
+ if (!codeStr) {
38
+ return "";
39
+ }
40
+ content.parts = [];
41
+ if (prefix) {
42
+ firstTextPart.text = prefix;
43
+ content.parts.push(firstTextPart);
44
+ }
45
+ content.parts.push(buildExecutableCodePart(codeStr));
46
+ return codeStr;
47
+ }
48
+ function buildExecutableCodePart(code) {
49
+ return {
50
+ text: code,
51
+ executableCode: {
52
+ code,
53
+ language: Language.PYTHON
54
+ }
55
+ };
56
+ }
57
+ function buildCodeExecutionResultPart(codeExecutionResult) {
58
+ if (codeExecutionResult.stderr) {
59
+ return {
60
+ text: codeExecutionResult.stderr,
61
+ codeExecutionResult: {
62
+ outcome: Outcome.OUTCOME_FAILED
63
+ }
64
+ };
65
+ }
66
+ const finalResult = [];
67
+ if (codeExecutionResult.stdout || !codeExecutionResult.outputFiles) {
68
+ finalResult.push(`Code execution result:
69
+ ${codeExecutionResult.stdout}
70
+ `);
71
+ }
72
+ if (codeExecutionResult.outputFiles) {
73
+ finalResult.push(
74
+ `Saved artifacts:
75
+ ` + codeExecutionResult.outputFiles.map((f) => f.name).join(", ")
76
+ );
77
+ }
78
+ return {
79
+ text: finalResult.join("\n\n"),
80
+ codeExecutionResult: {
81
+ outcome: Outcome.OUTCOME_OK
82
+ }
83
+ };
84
+ }
85
+ function convertCodeExecutionParts(content, codeBlockDelimiter, executionResultDelimiters) {
86
+ var _a;
87
+ if (!((_a = content.parts) == null ? void 0 : _a.length)) {
88
+ return;
89
+ }
90
+ const lastPart = content.parts[content.parts.length - 1];
91
+ if (lastPart.executableCode) {
92
+ content.parts[content.parts.length - 1] = {
93
+ text: codeBlockDelimiter[0] + lastPart.executableCode.code + codeBlockDelimiter[1]
94
+ };
95
+ } else if (content.parts.length == 1 && lastPart.codeExecutionResult) {
96
+ content.parts[content.parts.length - 1] = {
97
+ text: executionResultDelimiters[0] + lastPart.codeExecutionResult.output + executionResultDelimiters[1]
98
+ };
99
+ content.role = "user";
100
+ }
101
+ }
102
+ export {
103
+ buildCodeExecutionResultPart,
104
+ buildExecutableCodePart,
105
+ convertCodeExecutionParts,
106
+ extractCodeAndTruncateContent,
107
+ getEncodedFileContent
108
+ };