@google/adk 2.2.1 → 2.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 (226) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +4 -1
  2. package/dist/cjs/a2a/agent_card.js +102 -26
  3. package/dist/cjs/a2a/agent_to_a2a.js +1 -1
  4. package/dist/cjs/agents/functions.js +199 -25
  5. package/dist/cjs/agents/instructions.js +4 -1
  6. package/dist/cjs/agents/invocation_context.js +26 -4
  7. package/dist/cjs/agents/langgraph_agent.js +152 -0
  8. package/dist/cjs/agents/llm_agent.js +175 -101
  9. package/dist/cjs/agents/processors/code_execution_request_processor.js +10 -6
  10. package/dist/cjs/agents/remote_agent.js +187 -0
  11. package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
  12. package/dist/cjs/auth/auth_handler.js +37 -5
  13. package/dist/cjs/auth/auth_schemes.js +9 -0
  14. package/dist/cjs/cli/cli_eval.js +532 -0
  15. package/dist/cjs/cli/utils/envs.js +116 -0
  16. package/dist/cjs/cli/utils/evals.js +137 -0
  17. package/dist/cjs/cli/utils/logs.js +150 -0
  18. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  19. package/dist/cjs/code_executors/code_execution_utils.js +48 -16
  20. package/dist/cjs/code_executors/code_executor_context.js +6 -2
  21. package/dist/cjs/common.js +72 -0
  22. package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
  23. package/dist/cjs/context/token_based_context_compactor.js +2 -1
  24. package/dist/cjs/events/event.js +4 -2
  25. package/dist/cjs/examples/example_util.js +23 -2
  26. package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
  27. package/dist/cjs/index.js +97 -1
  28. package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
  29. package/dist/cjs/models/gemini_llm_connection.js +16 -8
  30. package/dist/cjs/models/google_llm.js +13 -16
  31. package/dist/cjs/models/llm_response.js +9 -1
  32. package/dist/cjs/models/registry.js +1 -1
  33. package/dist/cjs/models/routed_llm.js +9 -8
  34. package/dist/cjs/planners/plan_re_act_planner.js +1 -1
  35. package/dist/cjs/runner/in_memory_runner.js +6 -11
  36. package/dist/cjs/runner/runner.js +105 -33
  37. package/dist/cjs/sessions/db/operations.js +1 -1
  38. package/dist/cjs/sessions/in_memory_session_service.js +3 -1
  39. package/dist/cjs/sessions/state.js +8 -4
  40. package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
  41. package/dist/cjs/telemetry/tracing.js +97 -66
  42. package/dist/cjs/tools/agent_tool.js +44 -0
  43. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +142 -0
  44. package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
  45. package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
  46. package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
  47. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +185 -0
  48. package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
  49. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +603 -0
  50. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +219 -0
  51. package/dist/cjs/tools/crewai_tool.js +132 -0
  52. package/dist/cjs/tools/example_tool.js +10 -0
  53. package/dist/cjs/tools/function_tool.js +319 -0
  54. package/dist/cjs/tools/google_api_tool/google_api_tool.js +97 -0
  55. package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +226 -0
  56. package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +58 -0
  57. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +440 -0
  58. package/dist/cjs/tools/google_api_tool/index.js +64 -0
  59. package/dist/cjs/tools/langchain_tool.js +172 -0
  60. package/dist/cjs/tools/mcp/index.js +12 -0
  61. package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
  62. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
  63. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
  64. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
  65. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  66. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +14 -2
  67. package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
  68. package/dist/cjs/tools/toolbox_tool.js +108 -0
  69. package/dist/cjs/utils/env_aware_utils.js +6 -8
  70. package/dist/cjs/utils/error_utils.js +11 -11
  71. package/dist/cjs/utils/file_extension_utils.js +11 -0
  72. package/dist/cjs/utils/file_utils.js +2 -24
  73. package/dist/cjs/utils/gemini_schema_util.js +4 -1
  74. package/dist/cjs/utils/json_utils.js +49 -0
  75. package/dist/cjs/utils/live_connection_utils.js +4 -5
  76. package/dist/cjs/utils/logger_node.js +7 -1
  77. package/dist/cjs/utils/object_notation_utils.js +6 -3
  78. package/dist/cjs/utils/streaming_utils.js +12 -12
  79. package/dist/cjs/version.js +1 -1
  80. package/dist/esm/a2a/a2a_remote_agent.js +4 -1
  81. package/dist/esm/a2a/agent_card.js +103 -27
  82. package/dist/esm/a2a/agent_to_a2a.js +5 -2
  83. package/dist/esm/agents/functions.js +198 -25
  84. package/dist/esm/agents/instructions.js +4 -1
  85. package/dist/esm/agents/invocation_context.js +24 -4
  86. package/dist/esm/agents/langgraph_agent.js +123 -0
  87. package/dist/esm/agents/llm_agent.js +185 -104
  88. package/dist/esm/agents/processors/code_execution_request_processor.js +13 -8
  89. package/dist/esm/agents/remote_agent.js +164 -0
  90. package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
  91. package/dist/esm/auth/auth_handler.js +37 -5
  92. package/dist/esm/auth/auth_schemes.js +8 -0
  93. package/dist/esm/cli/cli_eval.js +510 -0
  94. package/dist/esm/cli/utils/envs.js +78 -0
  95. package/dist/esm/cli/utils/evals.js +109 -0
  96. package/dist/esm/cli/utils/logs.js +111 -0
  97. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  98. package/dist/esm/code_executors/code_execution_utils.js +46 -16
  99. package/dist/esm/code_executors/code_executor_context.js +5 -2
  100. package/dist/esm/common.js +67 -3
  101. package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
  102. package/dist/esm/context/token_based_context_compactor.js +2 -1
  103. package/dist/esm/events/event.js +4 -2
  104. package/dist/esm/examples/example_util.js +21 -1
  105. package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
  106. package/dist/esm/index.js +99 -1
  107. package/dist/esm/integrations/agent_registry/helpers.js +1 -1
  108. package/dist/esm/models/gemini_llm_connection.js +16 -8
  109. package/dist/esm/models/google_llm.js +14 -17
  110. package/dist/esm/models/llm_response.js +9 -1
  111. package/dist/esm/models/registry.js +1 -1
  112. package/dist/esm/models/routed_llm.js +9 -8
  113. package/dist/esm/planners/plan_re_act_planner.js +1 -1
  114. package/dist/esm/runner/in_memory_runner.js +6 -11
  115. package/dist/esm/runner/runner.js +105 -33
  116. package/dist/esm/sessions/db/operations.js +1 -1
  117. package/dist/esm/sessions/in_memory_session_service.js +3 -1
  118. package/dist/esm/sessions/state.js +8 -4
  119. package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
  120. package/dist/esm/telemetry/tracing.js +97 -66
  121. package/dist/esm/tools/agent_tool.js +44 -0
  122. package/dist/esm/tools/apihub_tool/apihub_toolset.js +106 -0
  123. package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
  124. package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
  125. package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
  126. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +163 -0
  127. package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
  128. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +561 -0
  129. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +215 -0
  130. package/dist/esm/tools/crewai_tool.js +107 -0
  131. package/dist/esm/tools/example_tool.js +13 -1
  132. package/dist/esm/tools/function_tool.js +316 -0
  133. package/dist/esm/tools/google_api_tool/google_api_tool.js +70 -0
  134. package/dist/esm/tools/google_api_tool/google_api_tool_set.js +188 -0
  135. package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +24 -0
  136. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +393 -0
  137. package/dist/esm/tools/google_api_tool/index.js +33 -0
  138. package/dist/esm/tools/langchain_tool.js +148 -0
  139. package/dist/esm/tools/mcp/index.js +6 -0
  140. package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
  141. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
  142. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
  143. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
  144. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  145. package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +15 -2
  146. package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
  147. package/dist/esm/tools/toolbox_tool.js +80 -0
  148. package/dist/esm/utils/env_aware_utils.js +6 -8
  149. package/dist/esm/utils/error_utils.js +9 -10
  150. package/dist/esm/utils/file_extension_utils.js +11 -0
  151. package/dist/esm/utils/file_utils.js +2 -23
  152. package/dist/esm/utils/gemini_schema_util.js +4 -1
  153. package/dist/esm/utils/json_utils.js +21 -0
  154. package/dist/esm/utils/live_connection_utils.js +4 -5
  155. package/dist/esm/utils/logger_node.js +7 -1
  156. package/dist/esm/utils/object_notation_utils.js +4 -2
  157. package/dist/esm/utils/streaming_utils.js +11 -11
  158. package/dist/esm/version.js +1 -1
  159. package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
  160. package/dist/types/a2a/agent_card.d.ts +44 -1
  161. package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
  162. package/dist/types/a2a/index.d.ts +1 -0
  163. package/dist/types/agents/functions.d.ts +33 -1
  164. package/dist/types/agents/invocation_context.d.ts +20 -1
  165. package/dist/types/agents/langgraph_agent.d.ts +153 -0
  166. package/dist/types/agents/remote_agent.d.ts +68 -0
  167. package/dist/types/auth/auth_handler.d.ts +28 -1
  168. package/dist/types/auth/auth_schemes.d.ts +13 -0
  169. package/dist/types/cli/cli_eval.d.ts +173 -0
  170. package/dist/types/cli/utils/envs.d.ts +23 -0
  171. package/dist/types/cli/utils/evals.d.ts +47 -0
  172. package/dist/types/cli/utils/logs.d.ts +38 -0
  173. package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
  174. package/dist/types/code_executors/code_executor_context.d.ts +1 -0
  175. package/dist/types/common.d.ts +27 -4
  176. package/dist/types/events/event.d.ts +4 -0
  177. package/dist/types/examples/example_util.d.ts +17 -0
  178. package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
  179. package/dist/types/index.d.ts +16 -1
  180. package/dist/types/models/gemini_llm_connection.d.ts +6 -7
  181. package/dist/types/models/routed_llm.d.ts +1 -1
  182. package/dist/types/runner/in_memory_runner.d.ts +2 -1
  183. package/dist/types/runner/runner.d.ts +34 -0
  184. package/dist/types/sessions/state.d.ts +5 -1
  185. package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
  186. package/dist/types/skills/skill.d.ts +1 -1
  187. package/dist/types/telemetry/tracing.d.ts +4 -2
  188. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +122 -0
  189. package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
  190. package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
  191. package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
  192. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +86 -0
  193. package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
  194. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +215 -0
  195. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
  196. package/dist/types/tools/crewai_tool.d.ts +85 -0
  197. package/dist/types/tools/example_tool.d.ts +10 -0
  198. package/dist/types/tools/function_tool.d.ts +32 -0
  199. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +30 -0
  200. package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +78 -0
  201. package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +33 -0
  202. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +164 -0
  203. package/dist/types/tools/google_api_tool/index.d.ts +11 -0
  204. package/dist/types/tools/langchain_tool.d.ts +103 -0
  205. package/dist/types/tools/mcp/index.d.ts +3 -0
  206. package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
  207. package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
  208. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
  209. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
  210. package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
  211. package/dist/types/tools/retrieval/base_retrieval_tool.d.ts +15 -0
  212. package/dist/types/tools/toolbox_tool.d.ts +73 -0
  213. package/dist/types/utils/env_aware_utils.d.ts +18 -2
  214. package/dist/types/utils/error_utils.d.ts +7 -0
  215. package/dist/types/utils/file_utils.d.ts +6 -1
  216. package/dist/types/utils/gemini_schema_util.d.ts +1 -2
  217. package/dist/types/utils/json_utils.d.ts +11 -0
  218. package/dist/types/utils/object_notation_utils.d.ts +7 -0
  219. package/dist/types/utils/streaming_utils.d.ts +11 -4
  220. package/dist/types/version.d.ts +1 -1
  221. package/dist/web/index_web.js +102 -103
  222. package/dist/web/index_web.js.map +4 -4
  223. package/package.json +8 -3
  224. package/dist/cjs/models/gemini_continuation.js +0 -232
  225. package/dist/esm/models/gemini_continuation.js +0 -205
  226. package/dist/types/models/gemini_continuation.d.ts +0 -59
@@ -0,0 +1,111 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ /**
6
+ * @license
7
+ * Copyright 2026 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ import * as fs from "node:fs";
11
+ import * as os from "node:os";
12
+ import * as path from "node:path";
13
+ import * as util from "node:util";
14
+ import { LogLevel, setLogger, setLogLevel } from "../../utils/logger.js";
15
+ const LOGGING_FORMAT = "%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s";
16
+ const LOG_LEVEL_NAMES = {
17
+ [LogLevel.DEBUG]: "DEBUG",
18
+ [LogLevel.INFO]: "INFO",
19
+ [LogLevel.WARN]: "WARNING",
20
+ [LogLevel.ERROR]: "ERROR"
21
+ };
22
+ function formatDateTimestamp(date) {
23
+ const pad = /* @__PURE__ */ __name((n) => String(n).padStart(2, "0"), "pad");
24
+ return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}_${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`;
25
+ }
26
+ __name(formatDateTimestamp, "formatDateTimestamp");
27
+ function formatLogLine(level, messages) {
28
+ var _a;
29
+ const iso = (/* @__PURE__ */ new Date()).toISOString();
30
+ const levelName = (_a = LOG_LEVEL_NAMES[level]) != null ? _a : "INFO";
31
+ const formattedMessage = messages.map((m) => typeof m === "string" ? m : util.inspect(m, { depth: null })).join(" ");
32
+ return `${iso} - ${levelName} - ${formattedMessage}`;
33
+ }
34
+ __name(formatLogLine, "formatLogLine");
35
+ function createWriterLogger(initialLevel, writeLine) {
36
+ let currentLevel = initialLevel;
37
+ const logAt = /* @__PURE__ */ __name((targetLevel, messages) => {
38
+ if (currentLevel <= targetLevel) {
39
+ writeLine(formatLogLine(targetLevel, messages));
40
+ }
41
+ }, "logAt");
42
+ return {
43
+ setLogLevel(level) {
44
+ currentLevel = level;
45
+ },
46
+ log(level, ...messages) {
47
+ logAt(level, messages);
48
+ },
49
+ debug(...messages) {
50
+ logAt(LogLevel.DEBUG, messages);
51
+ },
52
+ info(...messages) {
53
+ logAt(LogLevel.INFO, messages);
54
+ },
55
+ warn(...messages) {
56
+ logAt(LogLevel.WARN, messages);
57
+ },
58
+ error(...messages) {
59
+ logAt(LogLevel.ERROR, messages);
60
+ }
61
+ };
62
+ }
63
+ __name(createWriterLogger, "createWriterLogger");
64
+ function logToStderr(level = LogLevel.INFO) {
65
+ setLogLevel(level);
66
+ setLogger(
67
+ createWriterLogger(level, (line) => {
68
+ process.stderr.write(`${line}
69
+ `);
70
+ })
71
+ );
72
+ }
73
+ __name(logToStderr, "logToStderr");
74
+ function logToTmpFolder(options = {}) {
75
+ const {
76
+ level = LogLevel.INFO,
77
+ subFolder = "agents_log",
78
+ logFilePrefix = "agent",
79
+ logFileTimestamp = formatDateTimestamp(/* @__PURE__ */ new Date())
80
+ } = options;
81
+ const logDir = path.join(os.tmpdir(), subFolder);
82
+ fs.mkdirSync(logDir, { recursive: true });
83
+ const logFilename = `${logFilePrefix}.${logFileTimestamp}.log`;
84
+ const logFilepath = path.join(logDir, logFilename);
85
+ fs.writeFileSync(logFilepath, "", "utf-8");
86
+ setLogLevel(level);
87
+ const fileLogger = createWriterLogger(level, (line) => {
88
+ fs.appendFileSync(logFilepath, `${line}
89
+ `, "utf-8");
90
+ });
91
+ setLogger(fileLogger);
92
+ const latestLogLink = path.join(logDir, `${logFilePrefix}.latest.log`);
93
+ try {
94
+ try {
95
+ fs.lstatSync(latestLogLink);
96
+ fs.unlinkSync(latestLogLink);
97
+ } catch {
98
+ }
99
+ fs.symlinkSync(logFilepath, latestLogLink);
100
+ } catch (e) {
101
+ fileLogger.warn(`Failed to create symlink to latest log: ${String(e)}`);
102
+ }
103
+ fileLogger.info(`Log setup complete: ${logFilepath}`);
104
+ return logFilepath;
105
+ }
106
+ __name(logToTmpFolder, "logToTmpFolder");
107
+ export {
108
+ LOGGING_FORMAT,
109
+ logToStderr,
110
+ logToTmpFolder
111
+ };
@@ -27,6 +27,7 @@ import { BaseCodeExecutor } from "./base_code_executor.js";
27
27
  import {
28
28
  CodeExecutionLanguage
29
29
  } from "./code_execution_utils.js";
30
+ import { CONTEXT_KEY } from "./code_executor_context.js";
30
31
  const DEFAULT_MAX_ATTEMPTS = 180;
31
32
  const DEFAULT_SANDBOX_TTL = "31536000s";
32
33
  const DEFAULT_SANDBOX_DISPLAY_NAME = "default_sandbox";
@@ -208,12 +209,14 @@ let AgentEngineSandboxCodeExecutor = class extends BaseCodeExecutor {
208
209
  return this.agentEngineCreationPromise;
209
210
  }
210
211
  async getOrCreateSandbox(invocationContext, agentEngineName, language) {
211
- var _a, _b;
212
+ var _a, _b, _c, _d, _e;
212
213
  if (this.sandboxResourceName) {
213
214
  return this.sandboxResourceName;
214
215
  }
215
216
  const stateKey = `sandbox_name_${language.toLowerCase()}`;
216
- let sandboxName = (_b = (_a = invocationContext.session) == null ? void 0 : _a.state) == null ? void 0 : _b[stateKey];
217
+ const state = (_a = invocationContext.session) == null ? void 0 : _a.state;
218
+ const codeExecutionContext = state == null ? void 0 : state[CONTEXT_KEY];
219
+ let sandboxName = (_b = state == null ? void 0 : state[stateKey]) != null ? _b : codeExecutionContext == null ? void 0 : codeExecutionContext[stateKey];
217
220
  let createNewSandbox = false;
218
221
  if (!sandboxName) {
219
222
  createNewSandbox = true;
@@ -270,6 +273,8 @@ let AgentEngineSandboxCodeExecutor = class extends BaseCodeExecutor {
270
273
  invocationContext.session.state = {};
271
274
  }
272
275
  invocationContext.session.state[stateKey] = sandboxName;
276
+ const context = (_e = (_c = invocationContext.session.state)[_d = CONTEXT_KEY]) != null ? _e : _c[_d] = {};
277
+ context[stateKey] = sandboxName;
273
278
  }
274
279
  }
275
280
  return sandboxName;
@@ -29,33 +29,62 @@ function getEncodedFileContent(data) {
29
29
  return isBase64Encoded(data) ? data : base64Encode(data);
30
30
  }
31
31
  __name(getEncodedFileContent, "getEncodedFileContent");
32
+ const FENCE_TAG_LANGUAGE_MAP = {
33
+ tool_code: "python" /* PYTHON */,
34
+ python: "python" /* PYTHON */,
35
+ py: "python" /* PYTHON */,
36
+ javascript: "javascript" /* JAVASCRIPT */,
37
+ js: "javascript" /* JAVASCRIPT */,
38
+ typescript: "typescript" /* TYPESCRIPT */,
39
+ ts: "typescript" /* TYPESCRIPT */,
40
+ bash: "shell" /* SHELL */,
41
+ sh: "shell" /* SHELL */,
42
+ shell: "shell" /* SHELL */
43
+ };
44
+ const NO_CODE_BLOCK = Object.freeze({
45
+ code: "",
46
+ language: "unspecified" /* UNSPECIFIED */
47
+ });
48
+ function getCodeBlockLanguage(leadingDelimiter) {
49
+ var _a;
50
+ const tag = leadingDelimiter.trim().replace(/^`+/, "").toLowerCase();
51
+ return (_a = FENCE_TAG_LANGUAGE_MAP[tag]) != null ? _a : "unspecified" /* UNSPECIFIED */;
52
+ }
53
+ __name(getCodeBlockLanguage, "getCodeBlockLanguage");
32
54
  function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
55
+ return extractCodeBlockAndTruncateContent(content, codeBlockDelimiters).code;
56
+ }
57
+ __name(extractCodeAndTruncateContent, "extractCodeAndTruncateContent");
58
+ function extractCodeBlockAndTruncateContent(content, codeBlockDelimiters) {
33
59
  var _a;
34
60
  if (!((_a = content.parts) == null ? void 0 : _a.length)) {
35
- return "";
61
+ return { ...NO_CODE_BLOCK };
36
62
  }
37
63
  for (let i = 0; i < content.parts.length; i++) {
38
64
  const part = content.parts[i];
39
65
  if (part.executableCode && (i === content.parts.length - 1 || !content.parts[i + 1].codeExecutionResult)) {
40
66
  content.parts = content.parts.slice(0, i + 1);
41
- return part.executableCode.code || "";
67
+ return {
68
+ code: part.executableCode.code || "",
69
+ language: "python" /* PYTHON */
70
+ };
42
71
  }
43
72
  }
44
73
  const textParts = content.parts.filter((part) => part.text);
45
74
  if (!textParts.length) {
46
- return "";
75
+ return { ...NO_CODE_BLOCK };
47
76
  }
48
77
  const firstTextPart = cloneDeep(textParts[0]);
49
78
  const responseText = textParts.map((part) => part.text).join("\n");
50
79
  const leadingDelimiterPattern = codeBlockDelimiters.map((d) => d[0]).join("|");
51
80
  const trailingDelimiterPattern = codeBlockDelimiters.map((d) => d[1]).join("|");
52
81
  const match = new RegExp(
53
- `(?<prefix>.*?)(${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
82
+ `(?<prefix>.*?)(?<leading>${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
54
83
  "s"
55
84
  ).exec(responseText);
56
- const { prefix, codeStr } = (match == null ? void 0 : match.groups) || {};
85
+ const { prefix, leading, codeStr } = (match == null ? void 0 : match.groups) || {};
57
86
  if (!codeStr) {
58
- return "";
87
+ return { ...NO_CODE_BLOCK };
59
88
  }
60
89
  content.parts = [];
61
90
  if (prefix) {
@@ -63,12 +92,11 @@ function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
63
92
  content.parts.push(firstTextPart);
64
93
  }
65
94
  content.parts.push(buildExecutableCodePart(codeStr));
66
- return codeStr;
95
+ return { code: codeStr, language: getCodeBlockLanguage(leading != null ? leading : "") };
67
96
  }
68
- __name(extractCodeAndTruncateContent, "extractCodeAndTruncateContent");
97
+ __name(extractCodeBlockAndTruncateContent, "extractCodeBlockAndTruncateContent");
69
98
  function buildExecutableCodePart(code) {
70
99
  return {
71
- text: code,
72
100
  executableCode: {
73
101
  code,
74
102
  language: Language.PYTHON
@@ -79,28 +107,28 @@ __name(buildExecutableCodePart, "buildExecutableCodePart");
79
107
  function buildCodeExecutionResultPart(codeExecutionResult) {
80
108
  if (codeExecutionResult.stderr) {
81
109
  return {
82
- text: codeExecutionResult.stderr,
83
110
  codeExecutionResult: {
84
- outcome: Outcome.OUTCOME_FAILED
111
+ outcome: Outcome.OUTCOME_FAILED,
112
+ output: codeExecutionResult.stderr
85
113
  }
86
114
  };
87
115
  }
88
116
  const finalResult = [];
89
- if (codeExecutionResult.stdout || !codeExecutionResult.outputFiles) {
117
+ if (codeExecutionResult.stdout || !codeExecutionResult.outputFiles.length) {
90
118
  finalResult.push(`Code execution result:
91
119
  ${codeExecutionResult.stdout}
92
120
  `);
93
121
  }
94
- if (codeExecutionResult.outputFiles) {
122
+ if (codeExecutionResult.outputFiles.length) {
95
123
  finalResult.push(
96
124
  `Saved artifacts:
97
- ` + codeExecutionResult.outputFiles.map((f) => f.name).join(", ")
125
+ ` + codeExecutionResult.outputFiles.map((f) => `\`${f.name}\``).join(",")
98
126
  );
99
127
  }
100
128
  return {
101
- text: finalResult.join("\n\n"),
102
129
  codeExecutionResult: {
103
- outcome: Outcome.OUTCOME_OK
130
+ outcome: Outcome.OUTCOME_OK,
131
+ output: finalResult.join("\n\n")
104
132
  }
105
133
  };
106
134
  }
@@ -130,5 +158,7 @@ export {
130
158
  buildExecutableCodePart,
131
159
  convertCodeExecutionParts,
132
160
  extractCodeAndTruncateContent,
161
+ extractCodeBlockAndTruncateContent,
162
+ getCodeBlockLanguage,
133
163
  getEncodedFileContent
134
164
  };
@@ -17,8 +17,10 @@ const CODE_EXECUTION_RESULTS_KEY = "_code_execution_results";
17
17
  const _CodeExecutorContext = class _CodeExecutorContext {
18
18
  constructor(sessionState) {
19
19
  this.sessionState = sessionState;
20
- var _a;
21
- this.context = (_a = sessionState.get(CONTEXT_KEY)) != null ? _a : {};
20
+ if (!sessionState.has(CONTEXT_KEY)) {
21
+ sessionState.set(CONTEXT_KEY, {});
22
+ }
23
+ this.context = sessionState.get(CONTEXT_KEY);
22
24
  this.sessionState = sessionState;
23
25
  }
24
26
  /**
@@ -170,5 +172,6 @@ const _CodeExecutorContext = class _CodeExecutorContext {
170
172
  __name(_CodeExecutorContext, "CodeExecutorContext");
171
173
  let CodeExecutorContext = _CodeExecutorContext;
172
174
  export {
175
+ CONTEXT_KEY,
173
176
  CodeExecutorContext
174
177
  };
@@ -15,9 +15,20 @@ import {
15
15
  findEventByFunctionCallId,
16
16
  findMatchingFunctionCall,
17
17
  functionsExportedForTestingOnly,
18
+ handleFunctionCallsLive,
18
19
  isToolNotFound
19
20
  } from "./agents/functions.js";
20
- import { InvocationContext, requireAgent } from "./agents/invocation_context.js";
21
+ import {
22
+ InvocationContext,
23
+ LlmCallsLimitExceededError,
24
+ isLlmCallsLimitExceededError,
25
+ requireAgent
26
+ } from "./agents/invocation_context.js";
27
+ import {
28
+ LangGraphAgent,
29
+ getLastHumanMessages,
30
+ isLangGraphAgent
31
+ } from "./agents/langgraph_agent.js";
21
32
  import { LiveRequestQueue } from "./agents/live_request_queue.js";
22
33
  import { LlmAgent, LlmAgent as LlmAgent2, isLlmAgent } from "./agents/llm_agent.js";
23
34
  import { LoopAgent, isLoopAgent } from "./agents/loop_agent.js";
@@ -27,6 +38,7 @@ import {
27
38
  BaseLlmRequestProcessor,
28
39
  BaseLlmResponseProcessor
29
40
  } from "./agents/processors/base_llm_processor.js";
41
+ import { CodeExecutionResponseProcessor } from "./agents/processors/code_execution_request_processor.js";
30
42
  import {
31
43
  CONTENT_REQUEST_PROCESSOR,
32
44
  ContentRequestProcessor
@@ -37,8 +49,9 @@ import {
37
49
  InteractionsRequestProcessor
38
50
  } from "./agents/processors/interactions_request_processor.js";
39
51
  import { ReadonlyContext } from "./agents/readonly_context.js";
52
+ import { RemoteAgent, isRemoteAgent } from "./agents/remote_agent.js";
40
53
  import { RoutedAgent, isRoutedAgent } from "./agents/routed_agent.js";
41
- import { StreamingMode } from "./agents/run_config.js";
54
+ import { StreamingMode, createRunConfig } from "./agents/run_config.js";
42
55
  import { SequentialAgent, isSequentialAgent } from "./agents/sequential_agent.js";
43
56
  import {
44
57
  getPendingUserInputRequests,
@@ -53,7 +66,11 @@ import { AuthCredentialTypes, isAuthCredential } from "./auth/auth_credential.js
53
66
  import { AuthHandler } from "./auth/auth_handler.js";
54
67
  import { AUTH_PREPROCESSOR, AuthPreprocessor } from "./auth/auth_preprocessor.js";
55
68
  import { AuthProviderRegistry } from "./auth/auth_provider_registry.js";
56
- import { OAuthGrantType } from "./auth/auth_schemes.js";
69
+ import {
70
+ AuthSchemeType,
71
+ OAuthGrantType,
72
+ getOAuthGrantTypeFromFlow
73
+ } from "./auth/auth_schemes.js";
57
74
  import { InMemoryCredentialService } from "./auth/credential_service/in_memory_credential_service.js";
58
75
  import { SessionStateCredentialService } from "./auth/credential_service/session_state_credential_service.js";
59
76
  import { CredentialExchangeError } from "./auth/exchanger/base_credential_exchanger.js";
@@ -118,6 +135,8 @@ import {
118
135
  stripAdkIdentityPreamble
119
136
  } from "./models/chrome_prompt_llm.js";
120
137
  import { Gemini, geminiInitParams } from "./models/google_llm.js";
138
+ import { appendInstructions } from "./models/llm_request.js";
139
+ import { createLlmResponse } from "./models/llm_response.js";
121
140
  import { LLMRegistry } from "./models/registry.js";
122
141
  import { RoutedLlm } from "./models/routed_llm.js";
123
142
  import { BasePlanner, isBasePlanner } from "./planners/base_planner.js";
@@ -219,6 +238,8 @@ import {
219
238
  import { AsyncQueue } from "./utils/async_queue.js";
220
239
  import { renameReservedKeywords, toSnakeCaseName } from "./utils/case_utils.js";
221
240
  import { getClientLabels, runWithClientLabel } from "./utils/client_labels.js";
241
+ import { toGeminiSchema } from "./utils/gemini_schema_util.js";
242
+ import { genaiSchemaToJsonSchema } from "./utils/genai_schema_to_json.js";
222
243
  import {
223
244
  LogLevel,
224
245
  getLogger,
@@ -233,6 +254,7 @@ import {
233
254
  isGemini3xFlashLive,
234
255
  isGemini3xLive
235
256
  } from "./utils/model_name.js";
257
+ import { toJsonSchema } from "./utils/schema.js";
236
258
  import { zodObjectToSchema } from "./utils/simple_zod_to_json.js";
237
259
  import { Task } from "./utils/task.js";
238
260
  import { GoogleLLMVariant } from "./utils/variant_utils.js";
@@ -288,6 +310,19 @@ export * from "./features/feature_registry.js";
288
310
  export * from "./memory/base_memory_service.js";
289
311
  export * from "./sessions/base_session_service.js";
290
312
  export * from "./tools/base_tool.js";
313
+ import {
314
+ convertSessionToEvalFormat,
315
+ createEmptyState
316
+ } from "./cli/utils/evals.js";
317
+ import { CrewaiTool, isCrewaiTool } from "./tools/crewai_tool.js";
318
+ import {
319
+ buildFunctionDeclarationForLangchain,
320
+ buildFunctionDeclarationForParamsForCrewai,
321
+ buildFunctionDeclarationUtil
322
+ } from "./tools/function_tool.js";
323
+ import { LangchainTool, isLangchainTool } from "./tools/langchain_tool.js";
324
+ import { isBaseRetrievalTool } from "./tools/retrieval/base_retrieval_tool.js";
325
+ import { ToolboxTool, isToolboxTool } from "./tools/toolbox_tool.js";
291
326
  export {
292
327
  ADK_HANDLE_MODEL_ERROR_TOOL_NAME,
293
328
  AUTH_PREPROCESSOR,
@@ -305,6 +340,7 @@ export {
305
340
  AuthHandler,
306
341
  AuthPreprocessor,
307
342
  AuthProviderRegistry,
343
+ AuthSchemeType,
308
344
  BaseAgent,
309
345
  BaseCodeExecutor,
310
346
  BaseEnvironment,
@@ -328,6 +364,7 @@ export {
328
364
  ChromeBuiltInLlm,
329
365
  ChromeModelUnavailableError,
330
366
  CodeExecutionLanguage,
367
+ CodeExecutionResponseProcessor,
331
368
  ConsolidateContextTool,
332
369
  ContentRequestProcessor,
333
370
  Context,
@@ -335,6 +372,7 @@ export {
335
372
  ContextCompactorRequestProcessor,
336
373
  CredentialExchangeError,
337
374
  CredentialRefresherRegistry,
375
+ CrewaiTool,
338
376
  DEFAULT_ROUTE,
339
377
  ENTERPRISE_WEB_SEARCH,
340
378
  EXIT_LOOP,
@@ -375,10 +413,13 @@ export {
375
413
  LLMRegistry,
376
414
  LOAD_ARTIFACTS,
377
415
  LOAD_MEMORY,
416
+ LangGraphAgent,
417
+ LangchainTool,
378
418
  ListSkillsTool,
379
419
  LiveRequestQueue,
380
420
  LlamaIndexRetrieval,
381
421
  LlmAgent2 as LlmAgent,
422
+ LlmCallsLimitExceededError,
382
423
  LlmSummarizer,
383
424
  LoadArtifactsTool,
384
425
  LoadMemoryTool,
@@ -413,6 +454,7 @@ export {
413
454
  ReadonlyContext,
414
455
  ReflectAndRetryModelPlugin,
415
456
  ReflectAndRetryToolPlugin,
457
+ RemoteAgent,
416
458
  RequestInput,
417
459
  RoutedAgent,
418
460
  RoutedLlm,
@@ -437,6 +479,7 @@ export {
437
479
  ToolErrorType,
438
480
  ToolExecutionError,
439
481
  ToolNode,
482
+ ToolboxTool,
440
483
  TrackingScope,
441
484
  TrajectoryThoughtPruningCompactor,
442
485
  TruncatingContextCompactor,
@@ -449,13 +492,21 @@ export {
449
492
  WebMCPToolset,
450
493
  Workflow,
451
494
  WorkflowNode,
495
+ appendInstructions,
452
496
  asRunnableRoot,
497
+ buildFunctionDeclarationForLangchain,
498
+ buildFunctionDeclarationForParamsForCrewai,
499
+ buildFunctionDeclarationUtil,
453
500
  commonPrefixOf,
501
+ convertSessionToEvalFormat,
502
+ createEmptyState,
454
503
  createEvent,
455
504
  createEventActions,
505
+ createLlmResponse,
456
506
  createNodeErrorEvent,
457
507
  createNodeState,
458
508
  createResumabilityConfig,
509
+ createRunConfig,
459
510
  createSession,
460
511
  createSubBranch,
461
512
  determineAgentForResumption,
@@ -464,16 +515,20 @@ export {
464
515
  findMatchingFunctionCall,
465
516
  functionsExportedForTestingOnly,
466
517
  geminiInitParams,
518
+ genaiSchemaToJsonSchema,
467
519
  generateClientFunctionCallId,
468
520
  getAskUserConfirmationFunctionCalls,
469
521
  getClientLabels,
470
522
  getFunctionCalls,
471
523
  getFunctionResponses,
524
+ getLastHumanMessages,
472
525
  getLogger,
473
526
  getModelContext,
527
+ getOAuthGrantTypeFromFlow,
474
528
  getPendingUserInputRequests,
475
529
  getUserChoiceTool,
476
530
  getUserInputRequests,
531
+ handleFunctionCallsLive,
477
532
  hasThoughts,
478
533
  hasTrailingCodeExecutionResult,
479
534
  isAgentTool,
@@ -483,10 +538,12 @@ export {
483
538
  isBaseExampleProvider,
484
539
  isBaseLlm,
485
540
  isBasePlanner,
541
+ isBaseRetrievalTool,
486
542
  isBaseTool,
487
543
  isBaseToolset,
488
544
  isBuiltInPlanner,
489
545
  isCompactedEvent,
546
+ isCrewaiTool,
490
547
  isFinalResponse,
491
548
  isFunctionTool,
492
549
  isGemini2OrAbove,
@@ -494,7 +551,10 @@ export {
494
551
  isGemini3xFlashLive,
495
552
  isGemini3xLive,
496
553
  isIntentMismatchError,
554
+ isLangGraphAgent,
555
+ isLangchainTool,
497
556
  isLlmAgent,
557
+ isLlmCallsLimitExceededError,
498
558
  isLoopAgent,
499
559
  isNodeErrorEvent,
500
560
  isNodeReportedError,
@@ -502,6 +562,7 @@ export {
502
562
  isNodeState,
503
563
  isNodeTimeoutError,
504
564
  isParallelAgent,
565
+ isRemoteAgent,
505
566
  isRequestInput,
506
567
  isRoutableLlmAgent,
507
568
  isRoutedAgent,
@@ -512,6 +573,7 @@ export {
512
573
  isSessionArtifactService,
513
574
  isStateSchemaError,
514
575
  isToolNotFound,
576
+ isToolboxTool,
515
577
  isWebMCPSupported,
516
578
  isWorkflow,
517
579
  logger,
@@ -535,6 +597,8 @@ export {
535
597
  setLogger,
536
598
  stringifyContent,
537
599
  stripAdkIdentityPreamble,
600
+ toGeminiSchema,
601
+ toJsonSchema,
538
602
  toSnakeCaseName,
539
603
  toStructuredEvents,
540
604
  validateAppName,
@@ -29,7 +29,7 @@ const _LlmSummarizer = class _LlmSummarizer {
29
29
  * @throws {Error} If `events` is empty or the LLM returns no content.
30
30
  */
31
31
  async summarize(events) {
32
- var _a, _b, _c, _d, _e, _f;
32
+ var _a, _b;
33
33
  if (events.length === 0) {
34
34
  throw new Error("Cannot summarize an empty list of events.");
35
35
  }
@@ -51,18 +51,20 @@ ${formattedEvents}`;
51
51
  toolsDict: {},
52
52
  liveConnectConfig: {}
53
53
  };
54
- const responseGen = this.llm.generateContentAsync(request, false);
55
54
  let compactedContent = "";
56
- const firstResponse = await responseGen.next();
57
- if (firstResponse.done || !((_c = (_b = (_a = firstResponse.value.content) == null ? void 0 : _a.parts) == null ? void 0 : _b[0]) == null ? void 0 : _c.text)) {
58
- throw new Error("LLM failed to return a valid summary.");
59
- }
60
- compactedContent += firstResponse.value.content.parts[0].text;
61
- for await (const chunk of responseGen) {
62
- if ((_f = (_e = (_d = chunk.content) == null ? void 0 : _d.parts) == null ? void 0 : _e[0]) == null ? void 0 : _f.text) {
63
- compactedContent += chunk.content.parts[0].text;
55
+ for await (const response of this.llm.generateContentAsync(
56
+ request,
57
+ false
58
+ )) {
59
+ for (const part of (_b = (_a = response.content) == null ? void 0 : _a.parts) != null ? _b : []) {
60
+ if (part.text && !part.thought) {
61
+ compactedContent += part.text;
62
+ }
64
63
  }
65
64
  }
65
+ if (!compactedContent) {
66
+ throw new Error("LLM failed to return a valid summary.");
67
+ }
66
68
  return createCompactedEvent({
67
69
  author: "system",
68
70
  content: {
@@ -86,7 +86,8 @@ let TokenBasedContextCompactor = _TokenBasedContextCompactor;
86
86
  function latestPromptTokenCount(activeEvents, invocationContext) {
87
87
  var _a;
88
88
  for (let i = activeEvents.length - 1; i >= 0; i--) {
89
- const count = (_a = activeEvents[i].usageMetadata) == null ? void 0 : _a.promptTokenCount;
89
+ const usage = activeEvents[i].usageMetadata;
90
+ const count = (_a = usage == null ? void 0 : usage.initialPromptTokenCount) != null ? _a : usage == null ? void 0 : usage.promptTokenCount;
90
91
  if (count !== void 0) {
91
92
  return count;
92
93
  }
@@ -91,8 +91,10 @@ function stringifyContent(event) {
91
91
  __name(stringifyContent, "stringifyContent");
92
92
  function getEventTokens(event) {
93
93
  var _a;
94
- if (((_a = event.usageMetadata) == null ? void 0 : _a.promptTokenCount) !== void 0) {
95
- return event.usageMetadata.promptTokenCount;
94
+ const usage = event.usageMetadata;
95
+ const promptTokenCount = (_a = usage == null ? void 0 : usage.initialPromptTokenCount) != null ? _a : usage == null ? void 0 : usage.promptTokenCount;
96
+ if (promptTokenCount !== void 0) {
97
+ return promptTokenCount;
96
98
  }
97
99
  const contentStr = stringifyContent(event);
98
100
  return Math.ceil(contentStr.length / 4);
@@ -7,11 +7,30 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
7
7
  * Copyright 2025 Google LLC
8
8
  * SPDX-License-Identifier: Apache-2.0
9
9
  */
10
+ import { z } from "zod";
11
+ import { InputValidationError } from "../errors/input_validation_error.js";
10
12
  import { getFunctionResponses } from "../events/event.js";
11
13
  import { logger } from "../utils/logger.js";
12
14
  import {
13
15
  isBaseExampleProvider
14
16
  } from "./base_example_provider.js";
17
+ const contentSchema = z.object({
18
+ role: z.string().optional(),
19
+ parts: z.array(z.object({}).loose()).optional()
20
+ }).loose();
21
+ const examplesSchema = z.array(
22
+ z.object({ input: contentSchema, output: z.array(contentSchema) })
23
+ );
24
+ function validateExamples(examples) {
25
+ const result = examplesSchema.safeParse(examples);
26
+ if (!result.success) {
27
+ throw new InputValidationError(
28
+ `Invalid few-shot examples:
29
+ ${z.prettifyError(result.error)}`
30
+ );
31
+ }
32
+ }
33
+ __name(validateExamples, "validateExamples");
15
34
  const EXAMPLES_INTRO = "<EXAMPLES>\nBegin few-shot\nThe following are examples of user queries and model responses using the available tools.\n\n";
16
35
  const EXAMPLES_END = "End few-shot\n<EXAMPLES>";
17
36
  const EXAMPLE_START = "EXAMPLE {}:\nBegin example\n";
@@ -102,5 +121,6 @@ export {
102
121
  _getLatestMessageFromUser,
103
122
  buildExampleSi,
104
123
  convertExamplesToText,
105
- getLatestMessageFromUser
124
+ getLatestMessageFromUser,
125
+ validateExamples
106
126
  };