@google/adk 1.1.0 → 1.2.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 (150) hide show
  1. package/dist/cjs/agents/functions.js +4 -0
  2. package/dist/cjs/auth/oauth2/oauth2_discovery.js +26 -2
  3. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +305 -0
  4. package/dist/cjs/code_executors/code_execution_utils.js +1 -1
  5. package/dist/cjs/common.js +11 -0
  6. package/dist/cjs/events/event.js +3 -1
  7. package/dist/cjs/index.js +14 -0
  8. package/dist/cjs/integrations/agent_registry/agent_registry.js +362 -0
  9. package/dist/cjs/integrations/agent_registry/agent_registry_mcp_toolset.js +103 -0
  10. package/dist/cjs/integrations/agent_registry/helpers.js +57 -0
  11. package/dist/cjs/integrations/agent_registry/types.js +50 -0
  12. package/dist/cjs/memory/vertex_ai_memory_bank_service.js +496 -0
  13. package/dist/cjs/runner/in_memory_runner.js +10 -5
  14. package/dist/cjs/runner/runner.js +32 -2
  15. package/dist/cjs/sessions/database_session_service.js +49 -3
  16. package/dist/cjs/sessions/in_memory_session_service.js +70 -14
  17. package/dist/cjs/sessions/registry.js +4 -0
  18. package/dist/cjs/sessions/vertex_ai_session_service.js +428 -0
  19. package/dist/cjs/tools/agent_tool.js +10 -5
  20. package/dist/cjs/tools/exit_loop_tool.js +9 -0
  21. package/dist/cjs/tools/function_tool.js +7 -2
  22. package/dist/cjs/tools/google_maps_grounding_tool.js +80 -0
  23. package/dist/cjs/tools/long_running_tool.js +2 -1
  24. package/dist/cjs/tools/mcp/mcp_session_manager.js +11 -0
  25. package/dist/cjs/tools/mcp/mcp_tool.js +10 -6
  26. package/dist/cjs/tools/mcp/mcp_toolset.js +26 -3
  27. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +78 -0
  28. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +84 -0
  29. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +133 -0
  30. package/dist/cjs/tools/skill/load_skill_resource_tool.js +2 -25
  31. package/dist/cjs/tools/vertex_rag_retrieval_tool.js +64 -0
  32. package/dist/cjs/utils/file_utils.js +28 -0
  33. package/dist/cjs/utils/gemini_schema_util.js +18 -0
  34. package/dist/cjs/utils/partial_copy.js +51 -0
  35. package/dist/cjs/utils/streaming_utils.js +167 -121
  36. package/dist/cjs/utils/vertex_ai_utils.js +50 -0
  37. package/dist/cjs/version.js +1 -1
  38. package/dist/esm/agents/functions.js +4 -0
  39. package/dist/esm/auth/oauth2/oauth2_discovery.js +26 -2
  40. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +281 -0
  41. package/dist/esm/code_executors/code_execution_utils.js +1 -1
  42. package/dist/esm/common.js +10 -0
  43. package/dist/esm/events/event.js +3 -1
  44. package/dist/esm/index.js +11 -0
  45. package/dist/esm/integrations/agent_registry/agent_registry.js +333 -0
  46. package/dist/esm/integrations/agent_registry/agent_registry_mcp_toolset.js +77 -0
  47. package/dist/esm/integrations/agent_registry/helpers.js +28 -0
  48. package/dist/esm/integrations/agent_registry/types.js +20 -0
  49. package/dist/esm/memory/vertex_ai_memory_bank_service.js +468 -0
  50. package/dist/esm/runner/in_memory_runner.js +10 -5
  51. package/dist/esm/runner/runner.js +32 -2
  52. package/dist/esm/sessions/database_session_service.js +49 -3
  53. package/dist/esm/sessions/in_memory_session_service.js +70 -14
  54. package/dist/esm/sessions/registry.js +7 -0
  55. package/dist/esm/sessions/vertex_ai_session_service.js +403 -0
  56. package/dist/esm/tools/agent_tool.js +10 -5
  57. package/dist/esm/tools/exit_loop_tool.js +9 -0
  58. package/dist/esm/tools/function_tool.js +7 -2
  59. package/dist/esm/tools/google_maps_grounding_tool.js +54 -0
  60. package/dist/esm/tools/long_running_tool.js +2 -1
  61. package/dist/esm/tools/mcp/mcp_session_manager.js +11 -0
  62. package/dist/esm/tools/mcp/mcp_tool.js +10 -6
  63. package/dist/esm/tools/mcp/mcp_toolset.js +26 -3
  64. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +48 -0
  65. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +60 -0
  66. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +111 -0
  67. package/dist/esm/tools/skill/load_skill_resource_tool.js +1 -24
  68. package/dist/esm/tools/vertex_rag_retrieval_tool.js +36 -0
  69. package/dist/esm/utils/file_utils.js +26 -0
  70. package/dist/esm/utils/gemini_schema_util.js +18 -0
  71. package/dist/esm/utils/partial_copy.js +23 -0
  72. package/dist/esm/utils/streaming_utils.js +165 -120
  73. package/dist/esm/utils/vertex_ai_utils.js +22 -0
  74. package/dist/esm/version.js +1 -1
  75. package/dist/types/a2a/a2a_remote_agent.d.ts +14 -0
  76. package/dist/types/agents/processors/base_llm_processor.d.ts +12 -4
  77. package/dist/types/agents/processors/basic_llm_request_processor.d.ts +5 -0
  78. package/dist/types/agents/processors/identity_llm_request_processor.d.ts +4 -0
  79. package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +5 -0
  80. package/dist/types/agents/run_config.d.ts +15 -0
  81. package/dist/types/code_executors/agent_engine_sandbox_code_executor.d.ts +51 -0
  82. package/dist/types/common.d.ts +4 -0
  83. package/dist/types/events/event_actions.d.ts +24 -6
  84. package/dist/types/events/structured_events.d.ts +13 -0
  85. package/dist/types/examples/example_util.d.ts +25 -0
  86. package/dist/types/index.d.ts +6 -0
  87. package/dist/types/integrations/agent_registry/agent_registry.d.ts +94 -0
  88. package/dist/types/integrations/agent_registry/agent_registry_mcp_toolset.d.ts +43 -0
  89. package/dist/types/integrations/agent_registry/helpers.d.ts +7 -0
  90. package/dist/types/integrations/agent_registry/types.d.ts +101 -0
  91. package/dist/types/memory/vertex_ai_memory_bank_service.d.ts +52 -0
  92. package/dist/types/runner/in_memory_runner.d.ts +28 -1
  93. package/dist/types/runner/runner.d.ts +47 -0
  94. package/dist/types/sessions/base_session_service.d.ts +18 -0
  95. package/dist/types/sessions/database_session_service.d.ts +1 -1
  96. package/dist/types/sessions/in_memory_session_service.d.ts +1 -1
  97. package/dist/types/sessions/vertex_ai_session_service.d.ts +37 -0
  98. package/dist/types/tools/exit_loop_tool.d.ts +9 -0
  99. package/dist/types/tools/function_tool.d.ts +22 -2
  100. package/dist/types/tools/google_maps_grounding_tool.d.ts +22 -0
  101. package/dist/types/tools/long_running_tool.d.ts +11 -1
  102. package/dist/types/tools/mcp/mcp_session_manager.d.ts +3 -0
  103. package/dist/types/tools/mcp/mcp_toolset.d.ts +2 -1
  104. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +25 -0
  105. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +20 -0
  106. package/dist/types/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.d.ts +20 -0
  107. package/dist/types/tools/vertex_rag_retrieval_tool.d.ts +42 -0
  108. package/dist/types/utils/file_utils.d.ts +2 -0
  109. package/dist/types/utils/partial_copy.d.ts +13 -0
  110. package/dist/types/utils/streaming_utils.d.ts +8 -17
  111. package/dist/types/utils/vertex_ai_utils.d.ts +14 -0
  112. package/dist/types/version.d.ts +1 -1
  113. package/dist/web/agents/functions.js +4 -0
  114. package/dist/web/auth/oauth2/oauth2_discovery.js +26 -2
  115. package/dist/web/code_executors/agent_engine_sandbox_code_executor.js +281 -0
  116. package/dist/web/code_executors/code_execution_utils.js +1 -1
  117. package/dist/web/common.js +10 -0
  118. package/dist/web/events/event.js +3 -1
  119. package/dist/web/index.js +11 -0
  120. package/dist/web/integrations/agent_registry/agent_registry.js +333 -0
  121. package/dist/web/integrations/agent_registry/agent_registry_mcp_toolset.js +90 -0
  122. package/dist/web/integrations/agent_registry/helpers.js +28 -0
  123. package/dist/web/integrations/agent_registry/types.js +20 -0
  124. package/dist/web/memory/vertex_ai_memory_bank_service.js +475 -0
  125. package/dist/web/runner/in_memory_runner.js +10 -5
  126. package/dist/web/runner/runner.js +32 -2
  127. package/dist/web/sessions/database_session_service.js +49 -3
  128. package/dist/web/sessions/in_memory_session_service.js +70 -14
  129. package/dist/web/sessions/registry.js +7 -0
  130. package/dist/web/sessions/vertex_ai_session_service.js +414 -0
  131. package/dist/web/tools/agent_tool.js +10 -5
  132. package/dist/web/tools/exit_loop_tool.js +9 -0
  133. package/dist/web/tools/function_tool.js +7 -2
  134. package/dist/web/tools/google_maps_grounding_tool.js +54 -0
  135. package/dist/web/tools/long_running_tool.js +2 -1
  136. package/dist/web/tools/mcp/mcp_session_manager.js +11 -0
  137. package/dist/web/tools/mcp/mcp_tool.js +10 -6
  138. package/dist/web/tools/mcp/mcp_toolset.js +26 -3
  139. package/dist/web/tools/openapi_tool/auth/auth_helpers.js +48 -0
  140. package/dist/web/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +60 -0
  141. package/dist/web/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +111 -0
  142. package/dist/web/tools/skill/load_skill_resource_tool.js +1 -24
  143. package/dist/web/tools/vertex_rag_retrieval_tool.js +36 -0
  144. package/dist/web/utils/file_utils.js +26 -0
  145. package/dist/web/utils/gemini_schema_util.js +18 -0
  146. package/dist/web/utils/partial_copy.js +23 -0
  147. package/dist/web/utils/streaming_utils.js +219 -121
  148. package/dist/web/utils/vertex_ai_utils.js +22 -0
  149. package/dist/web/version.js +1 -1
  150. package/package.json +2 -1
@@ -193,6 +193,8 @@ function buildResponseEvent(tool, functionResult, toolContext, invocationContext
193
193
  let responseResult;
194
194
  if (typeof functionResult !== "object" || functionResult == null) {
195
195
  responseResult = { result: functionResult };
196
+ } else if (Array.isArray(functionResult)) {
197
+ responseResult = { results: functionResult };
196
198
  } else {
197
199
  responseResult = functionResult;
198
200
  }
@@ -331,6 +333,8 @@ async function handleFunctionCallList({
331
333
  functionResponse = { error: functionResponseError };
332
334
  } else if (typeof functionResponse !== "object" || functionResponse == null) {
333
335
  functionResponse = { result: functionResponse };
336
+ } else if (Array.isArray(functionResponse)) {
337
+ functionResponse = { results: functionResponse };
334
338
  }
335
339
  const functionResponseEvent = (0, import_event.createEvent)({
336
340
  invocationId: invocationContext.invocationId,
@@ -152,6 +152,18 @@ class OAuth2DiscoveryManager {
152
152
  return void 0;
153
153
  }
154
154
  }
155
+ function normaliseHostname(raw) {
156
+ const stripped = raw.replace(/^\[|\]$/g, "");
157
+ const m = stripped.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);
158
+ if (m) {
159
+ const hi = parseInt(m[1], 16);
160
+ const lo = parseInt(m[2], 16);
161
+ return [hi >> 8 & 255, hi & 255, lo >> 8 & 255, lo & 255].join(".");
162
+ }
163
+ const mDot = stripped.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);
164
+ if (mDot) return mDot[1];
165
+ return raw;
166
+ }
155
167
  function validateDiscoveryUrl(urlStr) {
156
168
  try {
157
169
  const url = new URL(urlStr);
@@ -159,8 +171,8 @@ function validateDiscoveryUrl(urlStr) {
159
171
  import_logger.logger.warn(`Unsafe protocol for discovery URL: ${url.protocol}`);
160
172
  return false;
161
173
  }
162
- const host = url.hostname.toLowerCase();
163
- if (host === "localhost" || host === "127.0.0.1" || host === "[::1]" || host.startsWith("10.") || host.startsWith("192.168.") || host.startsWith("169.254.")) {
174
+ const host = normaliseHostname(url.hostname.toLowerCase());
175
+ if (host === "localhost" || host === "127.0.0.1" || host === "[::1]" || host === "0.0.0.0" || host.startsWith("10.") || host.startsWith("192.168.") || host.startsWith("169.254.")) {
164
176
  import_logger.logger.warn(`Unsafe host for discovery URL: ${host}`);
165
177
  return false;
166
178
  }
@@ -172,6 +184,18 @@ function validateDiscoveryUrl(urlStr) {
172
184
  return false;
173
185
  }
174
186
  }
187
+ const cgnatMatch = host.match(/^100\.(\d+)\./);
188
+ if (cgnatMatch) {
189
+ const secondOctet = parseInt(cgnatMatch[1], 10);
190
+ if (secondOctet >= 64 && secondOctet <= 127) {
191
+ import_logger.logger.warn(`Unsafe host for discovery URL: ${host}`);
192
+ return false;
193
+ }
194
+ }
195
+ if (/^\[(f[cd][0-9a-f]{2}|fe[89ab][0-9a-f]):/i.test(url.hostname)) {
196
+ import_logger.logger.warn(`Unsafe host for discovery URL: ${url.hostname}`);
197
+ return false;
198
+ }
175
199
  return true;
176
200
  } catch (e) {
177
201
  import_logger.logger.warn(`Failed to parse URL for validation ${urlStr}: ${e}`);
@@ -0,0 +1,305 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var __decorateClass = (decorators, target, key, kind) => {
26
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
27
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
28
+ if (decorator = decorators[i])
29
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
30
+ if (kind && result) __defProp(target, key, result);
31
+ return result;
32
+ };
33
+ var agent_engine_sandbox_code_executor_exports = {};
34
+ __export(agent_engine_sandbox_code_executor_exports, {
35
+ AgentEngineSandboxCodeExecutor: () => AgentEngineSandboxCodeExecutor
36
+ });
37
+ module.exports = __toCommonJS(agent_engine_sandbox_code_executor_exports);
38
+ var import_vertexai = require("@google-cloud/vertexai");
39
+ var import_types = require("@google-cloud/vertexai/build/src/genai/types.js");
40
+ var import_experimental = require("../utils/experimental.js");
41
+ var import_file_utils = require("../utils/file_utils.js");
42
+ var import_logger = require("../utils/logger.js");
43
+ var import_base_code_executor = require("./base_code_executor.js");
44
+ var import_code_execution_utils = require("./code_execution_utils.js");
45
+ /**
46
+ * @license
47
+ * Copyright 2026 Google LLC
48
+ * SPDX-License-Identifier: Apache-2.0
49
+ */
50
+ const SANDBOX_PATTERN = /^projects\/([a-zA-Z0-9-_]+)\/locations\/([a-zA-Z0-9-_]+)\/reasoningEngines\/(\d+)\/sandboxEnvironments\/(\d+)$/;
51
+ const ENGINE_PATTERN = /^projects\/([a-zA-Z0-9-_]+)\/locations\/([a-zA-Z0-9-_]+)\/reasoningEngines\/(\d+)$/;
52
+ const DEFAULT_MAX_ATTEMPTS = 180;
53
+ const DEFAULT_SANDBOX_TTL = "31536000s";
54
+ const DEFAULT_SANDBOX_DISPLAY_NAME = "default_sandbox";
55
+ const DEFAULT_ENGINE_DISPLAY_NAME = "default_engine";
56
+ function mapLanguage(lang) {
57
+ switch (lang) {
58
+ case import_code_execution_utils.CodeExecutionLanguage.PYTHON:
59
+ return import_types.Language.LANGUAGE_PYTHON;
60
+ case import_code_execution_utils.CodeExecutionLanguage.JAVASCRIPT:
61
+ return import_types.Language.LANGUAGE_JAVASCRIPT;
62
+ default:
63
+ throw new Error(`Unsupported language for Agent Engine Sandbox: ${lang}`);
64
+ }
65
+ }
66
+ let AgentEngineSandboxCodeExecutor = class extends import_base_code_executor.BaseCodeExecutor {
67
+ constructor(options = {}) {
68
+ super();
69
+ this.sandboxResourceName = options.sandboxResourceName;
70
+ this.agentEngineResourceName = options.agentEngineResourceName;
71
+ this.projectId = options.projectId || process.env.GOOGLE_CLOUD_PROJECT;
72
+ this.location = options.location || process.env.GOOGLE_CLOUD_LOCATION || "us-central1";
73
+ if (this.sandboxResourceName) {
74
+ const match = this.sandboxResourceName.match(SANDBOX_PATTERN);
75
+ if (match) {
76
+ this.projectId = match[1];
77
+ this.location = match[2];
78
+ } else {
79
+ throw new Error(
80
+ `Invalid sandbox resource name: ${this.sandboxResourceName}`
81
+ );
82
+ }
83
+ } else if (this.agentEngineResourceName) {
84
+ const match = this.agentEngineResourceName.match(ENGINE_PATTERN);
85
+ if (match) {
86
+ this.projectId = match[1];
87
+ this.location = match[2];
88
+ } else {
89
+ throw new Error(
90
+ `Invalid agent engine resource name: ${this.agentEngineResourceName}`
91
+ );
92
+ }
93
+ }
94
+ if (options.client) {
95
+ this.client = options.client;
96
+ } else {
97
+ if (!this.projectId) {
98
+ throw new Error("Project ID is required.");
99
+ }
100
+ this.client = new import_vertexai.Client({
101
+ project: this.projectId,
102
+ location: this.location
103
+ });
104
+ }
105
+ }
106
+ async executeCode(params) {
107
+ var _a;
108
+ const { invocationContext, codeExecutionInput } = params;
109
+ const language = mapLanguage(codeExecutionInput.language);
110
+ const agentEngineName = await this.getOrCreateAgentEngine();
111
+ const sandboxName = await this.getOrCreateSandbox(
112
+ invocationContext,
113
+ agentEngineName,
114
+ language
115
+ );
116
+ const inputs = [
117
+ {
118
+ mimeType: "application/json",
119
+ data: Buffer.from(
120
+ JSON.stringify({ code: codeExecutionInput.code })
121
+ ).toString("base64")
122
+ }
123
+ ];
124
+ if (codeExecutionInput.inputFiles) {
125
+ for (const file of codeExecutionInput.inputFiles) {
126
+ inputs.push({
127
+ mimeType: file.mimeType,
128
+ data: file.content,
129
+ // Assumed to be already base64 encoded based on CodeExecutionInput definition
130
+ metadata: {
131
+ attributes: {
132
+ file_name: Buffer.from(file.name).toString("base64")
133
+ }
134
+ }
135
+ });
136
+ }
137
+ }
138
+ import_logger.logger.debug(`Executing code in sandbox ${sandboxName}...`);
139
+ const response = await this.client.agentEnginesInternal.sandboxes.executeCodeInternal({
140
+ name: sandboxName,
141
+ inputs
142
+ });
143
+ let stdout = "";
144
+ let stderr = "";
145
+ const outputFiles = [];
146
+ if (response.outputs) {
147
+ for (const output of response.outputs) {
148
+ const attributes = ((_a = output.metadata) == null ? void 0 : _a.attributes) || {};
149
+ const encodedFileName = attributes["file_name"];
150
+ const fileName = encodedFileName ? Buffer.from(encodedFileName, "base64").toString("utf-8") : void 0;
151
+ if (output.mimeType === "application/json" && !fileName) {
152
+ if (output.data) {
153
+ const jsonStr = Buffer.from(output.data, "base64").toString(
154
+ "utf-8"
155
+ );
156
+ try {
157
+ const jsonData = JSON.parse(jsonStr);
158
+ if (jsonData.msg_out !== void 0) {
159
+ stdout = jsonData.msg_out;
160
+ } else {
161
+ stdout = "";
162
+ }
163
+ if (jsonData.msg_err !== void 0) {
164
+ stderr = jsonData.msg_err;
165
+ } else {
166
+ stderr = "";
167
+ }
168
+ } catch (e) {
169
+ import_logger.logger.warn("Failed to parse JSON output from sandbox", e);
170
+ stdout = jsonStr;
171
+ }
172
+ }
173
+ } else {
174
+ let mimeType = output.mimeType;
175
+ const name = fileName || "output_file";
176
+ if (!mimeType) {
177
+ mimeType = (0, import_file_utils.guessMimeType)(name);
178
+ }
179
+ outputFiles.push({
180
+ name,
181
+ content: output.data || "",
182
+ mimeType
183
+ });
184
+ }
185
+ }
186
+ }
187
+ return {
188
+ stdout,
189
+ stderr,
190
+ outputFiles
191
+ };
192
+ }
193
+ async getOrCreateAgentEngine() {
194
+ if (this.agentEngineResourceName) {
195
+ return this.agentEngineResourceName;
196
+ }
197
+ if (!this.agentEngineCreationPromise) {
198
+ this.agentEngineCreationPromise = (async () => {
199
+ import_logger.logger.debug(
200
+ "No Agent Engine resource name provided. Creating a new one..."
201
+ );
202
+ const operation = await this.client.agentEnginesInternal.createInternal(
203
+ {
204
+ config: {
205
+ displayName: DEFAULT_ENGINE_DISPLAY_NAME
206
+ }
207
+ }
208
+ );
209
+ let apiResponse = operation;
210
+ let attempts = 0;
211
+ while (!apiResponse.done && attempts < DEFAULT_MAX_ATTEMPTS) {
212
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
213
+ apiResponse = await this.client.agentEnginesInternal.getAgentOperationInternal({
214
+ operationName: operation.name
215
+ });
216
+ attempts++;
217
+ }
218
+ if (!apiResponse.done) {
219
+ throw new Error(
220
+ `Agent Engine creation operation ${operation.name} did not complete in time.`
221
+ );
222
+ }
223
+ const response = apiResponse.response;
224
+ this.agentEngineResourceName = response.name;
225
+ import_logger.logger.debug(`Created Agent Engine: ${this.agentEngineResourceName}`);
226
+ return this.agentEngineResourceName;
227
+ })();
228
+ }
229
+ return this.agentEngineCreationPromise;
230
+ }
231
+ async getOrCreateSandbox(invocationContext, agentEngineName, language) {
232
+ var _a, _b;
233
+ if (this.sandboxResourceName) {
234
+ return this.sandboxResourceName;
235
+ }
236
+ const stateKey = `sandbox_name_${language.toLowerCase()}`;
237
+ let sandboxName = (_b = (_a = invocationContext.session) == null ? void 0 : _a.state) == null ? void 0 : _b[stateKey];
238
+ let createNewSandbox = false;
239
+ if (!sandboxName) {
240
+ createNewSandbox = true;
241
+ } else {
242
+ try {
243
+ const sandbox = await this.client.agentEnginesInternal.sandboxes.getInternal({
244
+ name: sandboxName
245
+ });
246
+ if (!sandbox || sandbox.state !== "STATE_RUNNING") {
247
+ createNewSandbox = true;
248
+ }
249
+ } catch (error) {
250
+ import_logger.logger.debug(
251
+ `Failed to get sandbox ${sandboxName}, will create a new one`,
252
+ error
253
+ );
254
+ createNewSandbox = true;
255
+ }
256
+ }
257
+ if (createNewSandbox) {
258
+ import_logger.logger.debug(`Creating a new ${language} code execution sandbox...`);
259
+ const operation = await this.client.agentEnginesInternal.sandboxes.createInternal({
260
+ name: agentEngineName,
261
+ spec: {
262
+ codeExecutionEnvironment: {
263
+ codeLanguage: language
264
+ }
265
+ },
266
+ config: {
267
+ displayName: DEFAULT_SANDBOX_DISPLAY_NAME,
268
+ ttl: DEFAULT_SANDBOX_TTL
269
+ }
270
+ });
271
+ let apiResponse = operation;
272
+ let attempts = 0;
273
+ while (!apiResponse.done && attempts < DEFAULT_MAX_ATTEMPTS) {
274
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
275
+ apiResponse = await this.client.agentEnginesInternal.sandboxes.getSandboxOperationInternal(
276
+ {
277
+ operationName: operation.name
278
+ }
279
+ );
280
+ attempts++;
281
+ }
282
+ if (!apiResponse.done) {
283
+ throw new Error(
284
+ `Sandbox creation operation ${operation.name} did not complete in time.`
285
+ );
286
+ }
287
+ const response = apiResponse.response;
288
+ sandboxName = response.name;
289
+ if (invocationContext.session) {
290
+ if (!invocationContext.session.state) {
291
+ invocationContext.session.state = {};
292
+ }
293
+ invocationContext.session.state[stateKey] = sandboxName;
294
+ }
295
+ }
296
+ return sandboxName;
297
+ }
298
+ };
299
+ AgentEngineSandboxCodeExecutor = __decorateClass([
300
+ import_experimental.experimental
301
+ ], AgentEngineSandboxCodeExecutor);
302
+ // Annotate the CommonJS export names for ESM import in node:
303
+ 0 && (module.exports = {
304
+ AgentEngineSandboxCodeExecutor
305
+ });
@@ -80,7 +80,7 @@ function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
80
80
  const leadingDelimiterPattern = codeBlockDelimiters.map((d) => d[0]).join("|");
81
81
  const trailingDelimiterPattern = codeBlockDelimiters.map((d) => d[1]).join("|");
82
82
  const match = new RegExp(
83
- `?<prefix>.*?)(${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
83
+ `(?<prefix>.*?)(${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
84
84
  "s"
85
85
  ).exec(responseText);
86
86
  const { prefix, codeStr } = (match == null ? void 0 : match.groups) || {};
@@ -57,9 +57,11 @@ __export(common_exports, {
57
57
  ExitLoopTool: () => import_exit_loop_tool.ExitLoopTool,
58
58
  FileContentEncoding: () => import_code_execution_utils.FileContentEncoding,
59
59
  FunctionTool: () => import_function_tool.FunctionTool,
60
+ GOOGLE_MAPS_GROUNDING: () => import_google_maps_grounding_tool.GOOGLE_MAPS_GROUNDING,
60
61
  GOOGLE_SEARCH: () => import_google_search_tool.GOOGLE_SEARCH,
61
62
  Gemini: () => import_google_llm.Gemini,
62
63
  GoogleLLMVariant: () => import_variant_utils.GoogleLLMVariant,
64
+ GoogleMapsGroundingTool: () => import_google_maps_grounding_tool.GoogleMapsGroundingTool,
63
65
  GoogleSearchTool: () => import_google_search_tool.GoogleSearchTool,
64
66
  InMemoryArtifactService: () => import_in_memory_artifact_service.InMemoryArtifactService,
65
67
  InMemoryCredentialService: () => import_in_memory_credential_service.InMemoryCredentialService,
@@ -107,7 +109,9 @@ __export(common_exports, {
107
109
  TruncatingContextCompactor: () => import_truncating_context_compactor.TruncatingContextCompactor,
108
110
  URL_CONTEXT: () => import_url_context_tool.URL_CONTEXT,
109
111
  UrlContextTool: () => import_url_context_tool.UrlContextTool,
112
+ VertexAiMemoryBankService: () => import_vertex_ai_memory_bank_service.VertexAiMemoryBankService,
110
113
  VertexAiSearchTool: () => import_vertex_ai_search_tool.VertexAiSearchTool,
114
+ VertexRagRetrievalTool: () => import_vertex_rag_retrieval_tool.VertexRagRetrievalTool,
111
115
  createEvent: () => import_event.createEvent,
112
116
  createEventActions: () => import_event_actions.createEventActions,
113
117
  createSession: () => import_session.createSession,
@@ -182,6 +186,7 @@ var import_event_actions = require("./events/event_actions.js");
182
186
  var import_structured_events = require("./events/structured_events.js");
183
187
  var import_base_example_provider = require("./examples/base_example_provider.js");
184
188
  var import_in_memory_memory_service = require("./memory/in_memory_memory_service.js");
189
+ var import_vertex_ai_memory_bank_service = require("./memory/vertex_ai_memory_bank_service.js");
185
190
  var import_apigee_llm = require("./models/apigee_llm.js");
186
191
  var import_base_llm = require("./models/base_llm.js");
187
192
  var import_google_llm = require("./models/google_llm.js");
@@ -202,6 +207,7 @@ var import_base_tool = require("./tools/base_tool.js");
202
207
  var import_base_toolset = require("./tools/base_toolset.js");
203
208
  var import_exit_loop_tool = require("./tools/exit_loop_tool.js");
204
209
  var import_function_tool = require("./tools/function_tool.js");
210
+ var import_google_maps_grounding_tool = require("./tools/google_maps_grounding_tool.js");
205
211
  var import_google_search_tool = require("./tools/google_search_tool.js");
206
212
  var import_load_artifacts_tool = require("./tools/load_artifacts_tool.js");
207
213
  var import_load_memory_tool = require("./tools/load_memory_tool.js");
@@ -210,6 +216,7 @@ var import_preload_memory_tool = require("./tools/preload_memory_tool.js");
210
216
  var import_tool_confirmation = require("./tools/tool_confirmation.js");
211
217
  var import_url_context_tool = require("./tools/url_context_tool.js");
212
218
  var import_vertex_ai_search_tool = require("./tools/vertex_ai_search_tool.js");
219
+ var import_vertex_rag_retrieval_tool = require("./tools/vertex_rag_retrieval_tool.js");
213
220
  var import_logger = require("./utils/logger.js");
214
221
  var import_model_name = require("./utils/model_name.js");
215
222
  var import_simple_zod_to_json = require("./utils/simple_zod_to_json.js");
@@ -263,9 +270,11 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
263
270
  ExitLoopTool,
264
271
  FileContentEncoding,
265
272
  FunctionTool,
273
+ GOOGLE_MAPS_GROUNDING,
266
274
  GOOGLE_SEARCH,
267
275
  Gemini,
268
276
  GoogleLLMVariant,
277
+ GoogleMapsGroundingTool,
269
278
  GoogleSearchTool,
270
279
  InMemoryArtifactService,
271
280
  InMemoryCredentialService,
@@ -313,7 +322,9 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
313
322
  TruncatingContextCompactor,
314
323
  URL_CONTEXT,
315
324
  UrlContextTool,
325
+ VertexAiMemoryBankService,
316
326
  VertexAiSearchTool,
327
+ VertexRagRetrievalTool,
317
328
  createEvent,
318
329
  createEventActions,
319
330
  createSession,
@@ -95,7 +95,7 @@ function stringifyContent(event) {
95
95
  if (!((_a = event.content) == null ? void 0 : _a.parts)) {
96
96
  return "";
97
97
  }
98
- return event.content.parts.map((part) => {
98
+ return event.content.parts.filter((part) => !part.thought).map((part) => {
99
99
  var _a2;
100
100
  return (_a2 = part.text) != null ? _a2 : "";
101
101
  }).join("");
@@ -114,6 +114,7 @@ const PRESERVE_KEYS_CAMEL_CASE = [
114
114
  "actions.requestedAuthConfigs",
115
115
  "actions.requestedToolConfirmations",
116
116
  "actions.customMetadata",
117
+ "customMetadata",
117
118
  "content.parts.functionCall.args",
118
119
  "content.parts.functionResponse.response"
119
120
  ];
@@ -123,6 +124,7 @@ const PRESERVE_KEYS_SNAKE_CASE = [
123
124
  "actions.requested_auth_configs",
124
125
  "actions.requested_tool_confirmations",
125
126
  "actions.custom_metadata",
127
+ "custom_metadata",
126
128
  "content.parts.function_call.args",
127
129
  "content.parts.function_response.response"
128
130
  ];
package/dist/cjs/index.js CHANGED
@@ -27,13 +27,17 @@ var index_exports = {};
27
27
  __export(index_exports, {
28
28
  A2AAgentExecutor: () => import_agent_executor.A2AAgentExecutor,
29
29
  AGENT_CARD_PATH: () => import_a2a_remote_agent.AGENT_CARD_PATH,
30
+ AgentEngineSandboxCodeExecutor: () => import_agent_engine_sandbox_code_executor.AgentEngineSandboxCodeExecutor,
31
+ CodeExecutionLanguage: () => import_code_execution_utils.CodeExecutionLanguage,
30
32
  DatabaseSessionService: () => import_database_session_service.DatabaseSessionService,
31
33
  FileArtifactService: () => import_file_artifact_service.FileArtifactService,
32
34
  GcsArtifactService: () => import_gcs_artifact_service.GcsArtifactService,
35
+ InvocationContext: () => import_invocation_context.InvocationContext,
33
36
  RemoteA2AAgent: () => import_a2a_remote_agent.RemoteA2AAgent,
34
37
  RunSkillInlineScriptTool: () => import_run_skill_inline_script_tool.RunSkillInlineScriptTool,
35
38
  RunSkillScriptTool: () => import_run_skill_script_tool.RunSkillScriptTool,
36
39
  UnsafeLocalCodeExecutor: () => import_unsafe_local_code_executor.UnsafeLocalCodeExecutor,
40
+ VertexAiSessionService: () => import_vertex_ai_session_service.VertexAiSessionService,
37
41
  getA2AAgentCard: () => import_agent_card.getA2AAgentCard,
38
42
  getArtifactServiceFromUri: () => import_registry.getArtifactServiceFromUri,
39
43
  getSessionServiceFromUri: () => import_registry2.getSessionServiceFromUri,
@@ -47,16 +51,21 @@ var import_a2a_remote_agent = require("./a2a/a2a_remote_agent.js");
47
51
  var import_agent_card = require("./a2a/agent_card.js");
48
52
  var import_agent_executor = require("./a2a/agent_executor.js");
49
53
  var import_agent_to_a2a = require("./a2a/agent_to_a2a.js");
54
+ var import_invocation_context = require("./agents/invocation_context.js");
50
55
  var import_file_artifact_service = require("./artifacts/file_artifact_service.js");
51
56
  var import_gcs_artifact_service = require("./artifacts/gcs_artifact_service.js");
52
57
  var import_registry = require("./artifacts/registry.js");
58
+ var import_agent_engine_sandbox_code_executor = require("./code_executors/agent_engine_sandbox_code_executor.js");
59
+ var import_code_execution_utils = require("./code_executors/code_execution_utils.js");
53
60
  var import_unsafe_local_code_executor = require("./code_executors/unsafe_local_code_executor.js");
54
61
  __reExport(index_exports, require("./common.js"), module.exports);
55
62
  var import_database_session_service = require("./sessions/database_session_service.js");
56
63
  var import_registry2 = require("./sessions/registry.js");
64
+ var import_vertex_ai_session_service = require("./sessions/vertex_ai_session_service.js");
57
65
  var import_loader = require("./skills/loader.js");
58
66
  var import_run_skill_inline_script_tool = require("./tools/skill/run_skill_inline_script_tool.js");
59
67
  var import_run_skill_script_tool = require("./tools/skill/run_skill_script_tool.js");
68
+ __reExport(index_exports, require("./integrations/agent_registry/agent_registry.js"), module.exports);
60
69
  __reExport(index_exports, require("./telemetry/google_cloud.js"), module.exports);
61
70
  __reExport(index_exports, require("./telemetry/setup.js"), module.exports);
62
71
  __reExport(index_exports, require("./tools/mcp/mcp_session_manager.js"), module.exports);
@@ -71,13 +80,17 @@ __reExport(index_exports, require("./tools/mcp/mcp_toolset.js"), module.exports)
71
80
  0 && (module.exports = {
72
81
  A2AAgentExecutor,
73
82
  AGENT_CARD_PATH,
83
+ AgentEngineSandboxCodeExecutor,
84
+ CodeExecutionLanguage,
74
85
  DatabaseSessionService,
75
86
  FileArtifactService,
76
87
  GcsArtifactService,
88
+ InvocationContext,
77
89
  RemoteA2AAgent,
78
90
  RunSkillInlineScriptTool,
79
91
  RunSkillScriptTool,
80
92
  UnsafeLocalCodeExecutor,
93
+ VertexAiSessionService,
81
94
  getA2AAgentCard,
82
95
  getArtifactServiceFromUri,
83
96
  getSessionServiceFromUri,
@@ -86,6 +99,7 @@ __reExport(index_exports, require("./tools/mcp/mcp_toolset.js"), module.exports)
86
99
  toA2a,
87
100
  validateSkillDir,
88
101
  ...require("./common.js"),
102
+ ...require("./integrations/agent_registry/agent_registry.js"),
89
103
  ...require("./telemetry/google_cloud.js"),
90
104
  ...require("./telemetry/setup.js"),
91
105
  ...require("./tools/mcp/mcp_session_manager.js"),