@google/adk 2.3.0 → 2.4.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 (162) hide show
  1. package/dist/cjs/agents/agent_engine_client.js +172 -0
  2. package/dist/cjs/agents/base_agent.js +20 -4
  3. package/dist/cjs/agents/functions.js +28 -0
  4. package/dist/cjs/agents/instructions.js +2 -1
  5. package/dist/cjs/agents/llm_agent.js +19 -6
  6. package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
  7. package/dist/cjs/agents/processors/code_execution_request_processor.js +8 -0
  8. package/dist/cjs/agents/processors/content_processor_utils.js +38 -10
  9. package/dist/cjs/agents/processors/content_request_processor.js +34 -2
  10. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  11. package/dist/cjs/agents/processors/nl_planning_processor.js +12 -3
  12. package/dist/cjs/cli/utils/logs.js +6 -6
  13. package/dist/cjs/code_executors/container_code_executor.js +27 -16
  14. package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
  15. package/dist/cjs/common.js +9 -20
  16. package/dist/cjs/errors/input_validation_error.js +3 -2
  17. package/dist/cjs/index.js +9 -2
  18. package/dist/cjs/plugins/base_plugin.js +13 -23
  19. package/dist/cjs/sessions/base_session_service.js +14 -8
  20. package/dist/cjs/sessions/database_session_service.js +50 -28
  21. package/dist/cjs/sessions/stale_session_error.js +59 -0
  22. package/dist/cjs/skills/loader.js +52 -18
  23. package/dist/cjs/telemetry/setup.js +0 -1
  24. package/dist/cjs/telemetry/tracing.js +53 -10
  25. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +18 -23
  26. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +120 -42
  27. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +163 -95
  28. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +13 -9
  29. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +184 -0
  30. package/dist/cjs/tools/google_api_tool/google_api_tool.js +4 -1
  31. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +173 -0
  32. package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
  33. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +2 -2
  34. package/dist/cjs/tools/google_api_tool/index.js +20 -23
  35. package/dist/cjs/tools/load_artifacts_tool.js +12 -6
  36. package/dist/cjs/tools/load_memory_tool.js +12 -10
  37. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -14
  38. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  39. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  40. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  41. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
  42. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +17 -1
  43. package/dist/cjs/tools/toolbox_toolset.js +174 -0
  44. package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
  45. package/dist/cjs/utils/client_labels.js +19 -2
  46. package/dist/cjs/utils/failover_utils.js +1 -1
  47. package/dist/cjs/utils/gemini_schema_util.js +24 -6
  48. package/dist/cjs/utils/logger_node.js +4 -0
  49. package/dist/cjs/utils/output_schema_utils.js +5 -2
  50. package/dist/cjs/utils/task.js +1 -1
  51. package/dist/cjs/version.js +1 -1
  52. package/dist/esm/agents/agent_engine_client.js +144 -0
  53. package/dist/esm/agents/base_agent.js +20 -4
  54. package/dist/esm/agents/functions.js +28 -0
  55. package/dist/esm/agents/instructions.js +2 -1
  56. package/dist/esm/agents/llm_agent.js +19 -6
  57. package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
  58. package/dist/esm/agents/processors/code_execution_request_processor.js +8 -0
  59. package/dist/esm/agents/processors/content_processor_utils.js +38 -10
  60. package/dist/esm/agents/processors/content_request_processor.js +34 -2
  61. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  62. package/dist/esm/agents/processors/nl_planning_processor.js +12 -3
  63. package/dist/esm/cli/utils/logs.js +4 -4
  64. package/dist/esm/code_executors/container_code_executor.js +27 -16
  65. package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
  66. package/dist/esm/common.js +10 -13
  67. package/dist/esm/errors/input_validation_error.js +3 -2
  68. package/dist/esm/index.js +17 -3
  69. package/dist/esm/plugins/base_plugin.js +13 -23
  70. package/dist/esm/sessions/base_session_service.js +12 -7
  71. package/dist/esm/sessions/database_session_service.js +49 -28
  72. package/dist/esm/sessions/stale_session_error.js +31 -0
  73. package/dist/esm/skills/loader.js +51 -17
  74. package/dist/esm/telemetry/setup.js +1 -2
  75. package/dist/esm/telemetry/tracing.js +57 -11
  76. package/dist/esm/tools/apihub_tool/apihub_toolset.js +17 -22
  77. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +124 -42
  78. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +163 -95
  79. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +13 -9
  80. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +158 -0
  81. package/dist/esm/tools/google_api_tool/google_api_tool.js +4 -1
  82. package/dist/esm/tools/google_api_tool/google_api_toolset.js +146 -0
  83. package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
  84. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +2 -2
  85. package/dist/esm/tools/google_api_tool/index.js +18 -20
  86. package/dist/esm/tools/load_artifacts_tool.js +10 -5
  87. package/dist/esm/tools/load_memory_tool.js +12 -10
  88. package/dist/esm/tools/mcp/mcp_toolset.js +1 -14
  89. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  90. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  91. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  92. package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
  93. package/dist/esm/tools/openapi_tool/rest_api_tool.js +17 -1
  94. package/dist/esm/tools/toolbox_toolset.js +148 -0
  95. package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
  96. package/dist/esm/utils/client_labels.js +19 -2
  97. package/dist/esm/utils/failover_utils.js +1 -1
  98. package/dist/esm/utils/gemini_schema_util.js +23 -6
  99. package/dist/esm/utils/logger_node.js +4 -0
  100. package/dist/esm/utils/output_schema_utils.js +5 -2
  101. package/dist/esm/utils/task.js +1 -1
  102. package/dist/esm/version.js +1 -1
  103. package/dist/types/agents/agent_engine_client.d.ts +37 -0
  104. package/dist/types/agents/base_agent.d.ts +12 -0
  105. package/dist/types/agents/llm_agent.d.ts +5 -1
  106. package/dist/types/agents/processors/content_processor_utils.d.ts +4 -2
  107. package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
  108. package/dist/types/cli/utils/logs.d.ts +1 -1
  109. package/dist/types/code_executors/container_code_executor.d.ts +17 -5
  110. package/dist/types/common.d.ts +5 -9
  111. package/dist/types/errors/input_validation_error.d.ts +2 -1
  112. package/dist/types/index.d.ts +4 -2
  113. package/dist/types/plugins/base_plugin.d.ts +0 -10
  114. package/dist/types/sessions/base_session_service.d.ts +5 -0
  115. package/dist/types/sessions/database_session_service.d.ts +17 -1
  116. package/dist/types/sessions/stale_session_error.d.ts +21 -0
  117. package/dist/types/skills/loader.d.ts +3 -2
  118. package/dist/types/telemetry/tracing.d.ts +17 -3
  119. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +14 -21
  120. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +32 -9
  121. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +22 -8
  122. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +3 -3
  123. package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
  124. package/dist/types/tools/base_toolset.d.ts +6 -5
  125. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +10 -3
  126. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +55 -0
  127. package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
  128. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +5 -4
  129. package/dist/types/tools/google_api_tool/index.d.ts +4 -5
  130. package/dist/types/tools/load_artifacts_tool.d.ts +14 -1
  131. package/dist/types/tools/load_memory_tool.d.ts +23 -1
  132. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
  133. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +8 -0
  134. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
  135. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
  136. package/dist/types/tools/toolbox_toolset.d.ts +159 -0
  137. package/dist/types/utils/client_labels.d.ts +2 -1
  138. package/dist/types/utils/gemini_schema_util.d.ts +8 -0
  139. package/dist/types/utils/output_schema_utils.d.ts +3 -2
  140. package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
  141. package/dist/types/version.d.ts +1 -1
  142. package/dist/web/index_web.js +74 -66
  143. package/dist/web/index_web.js.map +4 -4
  144. package/package.json +34 -27
  145. package/dist/cjs/agents/remote_agent.js +0 -187
  146. package/dist/cjs/tools/crewai_tool.js +0 -132
  147. package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +0 -226
  148. package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +0 -58
  149. package/dist/cjs/tools/langchain_tool.js +0 -172
  150. package/dist/cjs/tools/toolbox_tool.js +0 -108
  151. package/dist/esm/agents/remote_agent.js +0 -164
  152. package/dist/esm/tools/crewai_tool.js +0 -107
  153. package/dist/esm/tools/google_api_tool/google_api_tool_set.js +0 -188
  154. package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +0 -24
  155. package/dist/esm/tools/langchain_tool.js +0 -148
  156. package/dist/esm/tools/toolbox_tool.js +0 -80
  157. package/dist/types/agents/remote_agent.d.ts +0 -68
  158. package/dist/types/tools/crewai_tool.d.ts +0 -85
  159. package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +0 -78
  160. package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +0 -33
  161. package/dist/types/tools/langchain_tool.d.ts +0 -103
  162. package/dist/types/tools/toolbox_tool.d.ts +0 -73
@@ -50,7 +50,7 @@ let IntegrationClient = class {
50
50
  this.project = options.project;
51
51
  this.location = options.location;
52
52
  this.integration = options.integration;
53
- this.trigger = options.trigger;
53
+ this.triggers = options.triggers;
54
54
  this.connection = options.connection;
55
55
  this.entityOperations = (_a = options.entityOperations) != null ? _a : {};
56
56
  this.actions = (_b = options.actions) != null ? _b : [];
@@ -65,7 +65,10 @@ let IntegrationClient = class {
65
65
  * that carries no parseable spec.
66
66
  */
67
67
  async getOpenApiSpecForIntegration() {
68
+ var _a;
68
69
  const url = `https://${this.location}-integrations.googleapis.com/v1/projects/${this.project}/locations/${this.location}:generateOpenApiSpec`;
70
+ const triggerId = (_a = this.triggers) != null ? _a : null;
71
+ const invalidRequestMessage = `Invalid request. Please check the provided values of project(${this.project}), location(${this.location}), integration(${this.integration}).`;
69
72
  const body = await sendCloudRequest({
70
73
  url,
71
74
  method: "POST",
@@ -73,13 +76,13 @@ let IntegrationClient = class {
73
76
  apiTriggerResources: [
74
77
  {
75
78
  integrationResource: this.integration,
76
- triggerId: [this.trigger]
79
+ triggerId
77
80
  }
78
81
  ],
79
82
  fileFormat: "JSON"
80
83
  },
81
84
  tokenSource: this.tokenSource,
82
- invalidRequestMessage: `Invalid request. Please check the provided values of project(${this.project}), location(${this.location}), integration(${this.integration}) and trigger(${this.trigger}).`
85
+ invalidRequestMessage
83
86
  });
84
87
  try {
85
88
  const spec = isJsonObject(body) ? body["openApiSpec"] : void 0;
@@ -185,20 +188,21 @@ let IntegrationClient = class {
185
188
  }
186
189
  for (const action of this.actions) {
187
190
  const { inputSchema, outputSchema, displayName } = await connectionsClient.getActionSchema(action);
191
+ const actionDisplayName = displayName.replace(/ /g, "");
188
192
  let operation = "EXECUTE_ACTION";
189
193
  if (action === EXECUTE_CUSTOM_QUERY_ACTION) {
190
- schemas[`${action}_Request`] = executeCustomQueryRequest();
194
+ schemas[`${actionDisplayName}_Request`] = executeCustomQueryRequest();
191
195
  operation = "EXECUTE_QUERY";
192
196
  } else {
193
- schemas[`${displayName}_Request`] = actionRequest(displayName);
194
- schemas[`connectorInputPayload_${displayName}`] = connectorPayload(inputSchema);
197
+ schemas[`${actionDisplayName}_Request`] = actionRequest(actionDisplayName);
198
+ schemas[`connectorInputPayload_${actionDisplayName}`] = connectorPayload(inputSchema);
195
199
  }
196
- schemas[`connectorOutputPayload_${displayName}`] = connectorPayload(outputSchema);
197
- schemas[`${displayName}_Response`] = actionResponse(displayName);
200
+ schemas[`connectorOutputPayload_${actionDisplayName}`] = connectorPayload(outputSchema);
201
+ schemas[`${actionDisplayName}_Response`] = actionResponse(actionDisplayName);
198
202
  connectorSpec.paths[`${pathPrefix}#${action}`] = getActionOperation({
199
203
  action,
200
204
  operation,
201
- actionDisplayName: displayName,
205
+ actionDisplayName,
202
206
  toolName,
203
207
  toolInstructions
204
208
  });
@@ -0,0 +1,158 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __decorateClass = (decorators, target, key, kind) => {
7
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
8
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
9
+ if (decorator = decorators[i])
10
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
11
+ if (kind && result) __defProp(target, key, result);
12
+ return result;
13
+ };
14
+ /**
15
+ * @license
16
+ * Copyright 2026 Google LLC
17
+ * SPDX-License-Identifier: Apache-2.0
18
+ */
19
+ import { experimental } from "../../utils/experimental.js";
20
+ import { logger } from "../../utils/logger.js";
21
+ import { BaseTool } from "../base_tool.js";
22
+ import { ToolAuthHandler } from "../openapi_tool/openapi_spec_parser/tool_auth_handler.js";
23
+ const DYNAMIC_AUTH_EXCLUDE_FIELDS = Object.freeze([
24
+ "dynamic_auth_config",
25
+ "dynamicAuthConfig"
26
+ ]);
27
+ let IntegrationConnectorTool = class extends BaseTool {
28
+ constructor(options) {
29
+ var _a, _b, _c;
30
+ super(options);
31
+ this.connectionName = options.connectionName;
32
+ this.connectionHost = options.connectionHost;
33
+ this.connectionServiceName = options.connectionServiceName;
34
+ this.entity = (_a = options.entity) != null ? _a : "";
35
+ this.operation = (_b = options.operation) != null ? _b : "";
36
+ this.action = (_c = options.action) != null ? _c : "";
37
+ this.restApiTool = options.restApiTool;
38
+ this.authScheme = options.authScheme;
39
+ this.authCredential = options.authCredential;
40
+ }
41
+ _getDeclaration() {
42
+ const declaration = this.restApiTool._getDeclaration();
43
+ const rawParameters = declaration == null ? void 0 : declaration.parameters;
44
+ let parameters;
45
+ if (rawParameters) {
46
+ parameters = { ...rawParameters };
47
+ if (rawParameters.properties) {
48
+ const properties = { ...rawParameters.properties };
49
+ for (const field of [
50
+ ...IntegrationConnectorTool.EXCLUDE_FIELDS,
51
+ ...DYNAMIC_AUTH_EXCLUDE_FIELDS
52
+ ]) {
53
+ delete properties[field];
54
+ }
55
+ parameters.properties = properties;
56
+ }
57
+ if (rawParameters.required) {
58
+ parameters.required = rawParameters.required.filter(
59
+ (field) => !IntegrationConnectorTool.EXCLUDE_FIELDS.includes(field) && !DYNAMIC_AUTH_EXCLUDE_FIELDS.includes(field) && !IntegrationConnectorTool.OPTIONAL_FIELDS.includes(field)
60
+ );
61
+ }
62
+ }
63
+ return {
64
+ name: this.name,
65
+ description: this.description,
66
+ parameters
67
+ };
68
+ }
69
+ async runAsync(request) {
70
+ const toolAuthHandler = ToolAuthHandler.fromToolContext(
71
+ request.toolContext,
72
+ this.authScheme,
73
+ this.authCredential
74
+ );
75
+ const authResult = await toolAuthHandler.prepareAuthCredentials();
76
+ if (authResult.state === "pending") {
77
+ return {
78
+ pending: true,
79
+ message: "Needs your authorization to access your data."
80
+ };
81
+ }
82
+ const updatedArgs = {
83
+ ...request.args,
84
+ connection_name: this.connectionName,
85
+ connectionName: this.connectionName,
86
+ service_name: this.connectionServiceName,
87
+ serviceName: this.connectionServiceName,
88
+ host: this.connectionHost
89
+ };
90
+ if (this.entity) {
91
+ updatedArgs["entity"] = this.entity;
92
+ }
93
+ if (this.operation) {
94
+ updatedArgs["operation"] = this.operation;
95
+ }
96
+ if (this.action) {
97
+ updatedArgs["action"] = this.action;
98
+ }
99
+ if (authResult.authCredential) {
100
+ const token = prepareDynamicEuc(authResult.authCredential);
101
+ const dynamicAuthPayload = {
102
+ "oauth2_auth_code_flow.access_token": token != null ? token : {}
103
+ };
104
+ updatedArgs["dynamic_auth_config"] = dynamicAuthPayload;
105
+ updatedArgs["dynamicAuthConfig"] = dynamicAuthPayload;
106
+ }
107
+ logger.debug(`Running tool: ${this.name}`);
108
+ return this.restApiTool.runAsync({
109
+ args: updatedArgs,
110
+ toolContext: request.toolContext
111
+ });
112
+ }
113
+ };
114
+ __name(IntegrationConnectorTool, "IntegrationConnectorTool");
115
+ /**
116
+ * Request fields that {@link IntegrationConnectorTool} injects at runtime and
117
+ * excludes from the function declaration shown to the model.
118
+ */
119
+ IntegrationConnectorTool.EXCLUDE_FIELDS = Object.freeze([
120
+ "connection_name",
121
+ "connectionName",
122
+ "service_name",
123
+ "serviceName",
124
+ "host",
125
+ "entity",
126
+ "operation",
127
+ "action"
128
+ ]);
129
+ /**
130
+ * Request fields that {@link IntegrationConnectorTool} removes from the
131
+ * `required` list in the function declaration shown to the model.
132
+ */
133
+ IntegrationConnectorTool.OPTIONAL_FIELDS = Object.freeze([
134
+ "page_size",
135
+ "pageSize",
136
+ "page_token",
137
+ "pageToken",
138
+ "filter",
139
+ "filter_clause",
140
+ "filterClause"
141
+ ]);
142
+ __decorateClass([
143
+ experimental
144
+ ], IntegrationConnectorTool.prototype, "_getDeclaration", 1);
145
+ __decorateClass([
146
+ experimental
147
+ ], IntegrationConnectorTool.prototype, "runAsync", 1);
148
+ IntegrationConnectorTool = __decorateClass([
149
+ experimental
150
+ ], IntegrationConnectorTool);
151
+ function prepareDynamicEuc(authCredential) {
152
+ var _a, _b;
153
+ return ((_b = (_a = authCredential.http) == null ? void 0 : _a.credentials) == null ? void 0 : _b.token) || void 0;
154
+ }
155
+ __name(prepareDynamicEuc, "prepareDynamicEuc");
156
+ export {
157
+ IntegrationConnectorTool
158
+ };
@@ -26,7 +26,7 @@ function isGoogleApiTool(obj) {
26
26
  }
27
27
  __name(isGoogleApiTool, "isGoogleApiTool");
28
28
  let GoogleApiTool = class extends (_b = BaseTool, _a = GOOGLE_API_TOOL_SIGNATURE_SYMBOL, _b) {
29
- constructor(restApiTool) {
29
+ constructor(restApiTool, options = {}) {
30
30
  super({
31
31
  name: restApiTool.name,
32
32
  description: restApiTool.description,
@@ -34,6 +34,9 @@ let GoogleApiTool = class extends (_b = BaseTool, _a = GOOGLE_API_TOOL_SIGNATURE
34
34
  });
35
35
  this[_a] = true;
36
36
  this.restApiTool = restApiTool;
37
+ if (options.clientId !== void 0 || options.clientSecret !== void 0) {
38
+ this.configureAuth(options.clientId, options.clientSecret);
39
+ }
37
40
  }
38
41
  _getDeclaration() {
39
42
  return this.restApiTool._getDeclaration();
@@ -0,0 +1,146 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __decorateClass = (decorators, target, key, kind) => {
7
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
8
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
9
+ if (decorator = decorators[i])
10
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
11
+ if (kind && result) __defProp(target, key, result);
12
+ return result;
13
+ };
14
+ /**
15
+ * @license
16
+ * Copyright 2026 Google LLC
17
+ * SPDX-License-Identifier: Apache-2.0
18
+ */
19
+ var _a, _b;
20
+ import { experimental } from "../../utils/experimental.js";
21
+ import { BaseToolset } from "../base_toolset.js";
22
+ import { OpenAPIToolset } from "../openapi_tool/openapi_toolset.js";
23
+ import { GoogleApiTool } from "./google_api_tool.js";
24
+ import { GoogleApiToOpenApiConverter } from "./googleapi_to_openapi_converter.js";
25
+ const GOOGLE_API_TOOLSET_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
26
+ "google.adk.googleApiToolset"
27
+ );
28
+ const GOOGLE_OIDC_AUTH_ENDPOINT = "https://accounts.google.com/o/oauth2/v2/auth";
29
+ const GOOGLE_OIDC_TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token";
30
+ const GOOGLE_OIDC_USERINFO_ENDPOINT = "https://openidconnect.googleapis.com/v1/userinfo";
31
+ const GOOGLE_OIDC_REVOCATION_ENDPOINT = "https://oauth2.googleapis.com/revoke";
32
+ function isGoogleApiToolset(obj) {
33
+ return typeof obj === "object" && obj !== null && GOOGLE_API_TOOLSET_SIGNATURE_SYMBOL in obj && obj[GOOGLE_API_TOOLSET_SIGNATURE_SYMBOL] === true;
34
+ }
35
+ __name(isGoogleApiToolset, "isGoogleApiToolset");
36
+ let GoogleApiToolset = class extends (_b = BaseToolset, _a = GOOGLE_API_TOOLSET_SIGNATURE_SYMBOL, _b) {
37
+ constructor(options = {}) {
38
+ var _a2;
39
+ const toolFilter = (_a2 = options.toolFilter) != null ? _a2 : [];
40
+ super(toolFilter);
41
+ this[_a] = true;
42
+ this.tools = [];
43
+ this.toolFilter = toolFilter;
44
+ this.apiName = options.apiName;
45
+ this.apiVersion = options.apiVersion;
46
+ this.clientId = options.clientId;
47
+ this.clientSecret = options.clientSecret;
48
+ }
49
+ async loadToolsetWithOidcAuth() {
50
+ var _a2, _b2, _c, _d, _e;
51
+ if (!this.apiName || !this.apiVersion) {
52
+ throw new Error(
53
+ "Both apiName and apiVersion are required to load a GoogleApiToolset."
54
+ );
55
+ }
56
+ const specDict = await new GoogleApiToOpenApiConverter(
57
+ this.apiName,
58
+ this.apiVersion
59
+ ).convert();
60
+ const oauth2Scheme = (_b2 = (_a2 = specDict.components) == null ? void 0 : _a2.securitySchemes) == null ? void 0 : _b2["oauth2"];
61
+ const scopesMap = (_e = (_d = (_c = oauth2Scheme == null ? void 0 : oauth2Scheme.flows) == null ? void 0 : _c.authorizationCode) == null ? void 0 : _d.scopes) != null ? _e : {};
62
+ const firstScope = Object.keys(scopesMap)[0];
63
+ const scopes = firstScope ? [firstScope] : void 0;
64
+ const authScheme = {
65
+ type: "openIdConnect",
66
+ openIdConnectUrl: "",
67
+ authorizationEndpoint: GOOGLE_OIDC_AUTH_ENDPOINT,
68
+ tokenEndpoint: GOOGLE_OIDC_TOKEN_ENDPOINT,
69
+ userinfoEndpoint: GOOGLE_OIDC_USERINFO_ENDPOINT,
70
+ revocationEndpoint: GOOGLE_OIDC_REVOCATION_ENDPOINT,
71
+ tokenEndpointAuthMethodsSupported: [
72
+ "client_secret_post",
73
+ "client_secret_basic"
74
+ ],
75
+ grantTypesSupported: ["authorization_code"],
76
+ scopes
77
+ };
78
+ return new OpenAPIToolset({
79
+ specDict,
80
+ specType: "yaml",
81
+ authScheme
82
+ });
83
+ }
84
+ async ensureToolsLoaded() {
85
+ var _a2;
86
+ if (this.openapiToolset || !this.apiName || !this.apiVersion) {
87
+ return;
88
+ }
89
+ (_a2 = this.loadingPromise) != null ? _a2 : this.loadingPromise = (async () => {
90
+ try {
91
+ const openapiToolset = await this.loadToolsetWithOidcAuth();
92
+ const restTools = await openapiToolset.getTools();
93
+ this.tools = restTools.map(
94
+ (tool) => new GoogleApiTool(tool, {
95
+ clientId: this.clientId,
96
+ clientSecret: this.clientSecret
97
+ })
98
+ );
99
+ this.openapiToolset = openapiToolset;
100
+ } catch (error) {
101
+ this.loadingPromise = void 0;
102
+ throw error;
103
+ }
104
+ })();
105
+ await this.loadingPromise;
106
+ }
107
+ async getTools(context) {
108
+ await this.ensureToolsLoaded();
109
+ return this.tools.filter((tool) => this.isToolSelected(tool, context));
110
+ }
111
+ setToolFilter(toolFilter) {
112
+ this.toolFilter = toolFilter;
113
+ }
114
+ configureAuth(clientId, clientSecret) {
115
+ this.clientId = clientId;
116
+ this.clientSecret = clientSecret;
117
+ for (const tool of this.tools) {
118
+ tool.configureAuth(clientId, clientSecret);
119
+ }
120
+ }
121
+ async close() {
122
+ if (this.openapiToolset) {
123
+ await this.openapiToolset.close();
124
+ }
125
+ }
126
+ };
127
+ __name(GoogleApiToolset, "GoogleApiToolset");
128
+ __decorateClass([
129
+ experimental
130
+ ], GoogleApiToolset.prototype, "getTools", 1);
131
+ __decorateClass([
132
+ experimental
133
+ ], GoogleApiToolset.prototype, "setToolFilter", 1);
134
+ __decorateClass([
135
+ experimental
136
+ ], GoogleApiToolset.prototype, "configureAuth", 1);
137
+ __decorateClass([
138
+ experimental
139
+ ], GoogleApiToolset.prototype, "close", 1);
140
+ GoogleApiToolset = __decorateClass([
141
+ experimental
142
+ ], GoogleApiToolset);
143
+ export {
144
+ GoogleApiToolset,
145
+ isGoogleApiToolset
146
+ };
@@ -0,0 +1,94 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __decorateClass = (decorators, target, key, kind) => {
7
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
8
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
9
+ if (decorator = decorators[i])
10
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
11
+ if (kind && result) __defProp(target, key, result);
12
+ return result;
13
+ };
14
+ /**
15
+ * @license
16
+ * Copyright 2026 Google LLC
17
+ * SPDX-License-Identifier: Apache-2.0
18
+ */
19
+ import { experimental } from "../../utils/experimental.js";
20
+ import {
21
+ GoogleApiToolset
22
+ } from "./google_api_toolset.js";
23
+ let BigQueryToolset = class extends GoogleApiToolset {
24
+ constructor(options = {}) {
25
+ super({ ...options, apiName: "bigquery", apiVersion: "v2" });
26
+ }
27
+ };
28
+ __name(BigQueryToolset, "BigQueryToolset");
29
+ BigQueryToolset = __decorateClass([
30
+ experimental
31
+ ], BigQueryToolset);
32
+ let CalendarToolset = class extends GoogleApiToolset {
33
+ constructor(options = {}) {
34
+ super({ ...options, apiName: "calendar", apiVersion: "v3" });
35
+ }
36
+ };
37
+ __name(CalendarToolset, "CalendarToolset");
38
+ CalendarToolset = __decorateClass([
39
+ experimental
40
+ ], CalendarToolset);
41
+ let GmailToolset = class extends GoogleApiToolset {
42
+ constructor(options = {}) {
43
+ super({ ...options, apiName: "gmail", apiVersion: "v1" });
44
+ }
45
+ };
46
+ __name(GmailToolset, "GmailToolset");
47
+ GmailToolset = __decorateClass([
48
+ experimental
49
+ ], GmailToolset);
50
+ let YoutubeToolset = class extends GoogleApiToolset {
51
+ constructor(options = {}) {
52
+ super({ ...options, apiName: "youtube", apiVersion: "v3" });
53
+ }
54
+ };
55
+ __name(YoutubeToolset, "YoutubeToolset");
56
+ YoutubeToolset = __decorateClass([
57
+ experimental
58
+ ], YoutubeToolset);
59
+ let SlidesToolset = class extends GoogleApiToolset {
60
+ constructor(options = {}) {
61
+ super({ ...options, apiName: "slides", apiVersion: "v1" });
62
+ }
63
+ };
64
+ __name(SlidesToolset, "SlidesToolset");
65
+ SlidesToolset = __decorateClass([
66
+ experimental
67
+ ], SlidesToolset);
68
+ let SheetsToolset = class extends GoogleApiToolset {
69
+ constructor(options = {}) {
70
+ super({ ...options, apiName: "sheets", apiVersion: "v4" });
71
+ }
72
+ };
73
+ __name(SheetsToolset, "SheetsToolset");
74
+ SheetsToolset = __decorateClass([
75
+ experimental
76
+ ], SheetsToolset);
77
+ let DocsToolset = class extends GoogleApiToolset {
78
+ constructor(options = {}) {
79
+ super({ ...options, apiName: "docs", apiVersion: "v1" });
80
+ }
81
+ };
82
+ __name(DocsToolset, "DocsToolset");
83
+ DocsToolset = __decorateClass([
84
+ experimental
85
+ ], DocsToolset);
86
+ export {
87
+ BigQueryToolset,
88
+ CalendarToolset,
89
+ DocsToolset,
90
+ GmailToolset,
91
+ SheetsToolset,
92
+ SlidesToolset,
93
+ YoutubeToolset
94
+ };
@@ -273,10 +273,10 @@ function convertOperation(methodData, pathParams) {
273
273
  }
274
274
  __name(convertOperation, "convertOperation");
275
275
  function convertMethods(methods, _resourcePath, openapiSpec) {
276
- var _a, _b;
276
+ var _a, _b, _c;
277
277
  for (const methodData of Object.values(methods)) {
278
278
  const httpMethod = ((_a = methodData.httpMethod) != null ? _a : "GET").toLowerCase();
279
- let restPath = ((_b = methodData.path) != null ? _b : "/").replace(
279
+ let restPath = ((_c = (_b = methodData.flatPath) != null ? _b : methodData.path) != null ? _c : "/").replace(
280
280
  /\{\+([^{}]+)\}/g,
281
281
  (_match, paramName) => `{${paramName}}`
282
282
  );
@@ -6,28 +6,26 @@ const require = topLevelCreateRequire(import.meta.url);
6
6
  * SPDX-License-Identifier: Apache-2.0
7
7
  */
8
8
  import { GoogleApiTool, isGoogleApiTool } from "./google_api_tool.js";
9
- import { GoogleApiToolSet, isGoogleApiToolSet } from "./google_api_tool_set.js";
9
+ import { GoogleApiToolset, isGoogleApiToolset } from "./google_api_toolset.js";
10
10
  import {
11
- bigqueryToolSet,
12
- calendarToolSet,
13
- docsToolSet,
14
- gmailToolSet,
15
- sheetsToolSet,
16
- slidesToolSet,
17
- youtubeToolSet
18
- } from "./google_api_tool_sets.js";
19
- import { GoogleApiToOpenApiConverter } from "./googleapi_to_openapi_converter.js";
11
+ BigQueryToolset,
12
+ CalendarToolset,
13
+ DocsToolset,
14
+ GmailToolset,
15
+ SheetsToolset,
16
+ SlidesToolset,
17
+ YoutubeToolset
18
+ } from "./google_api_toolsets.js";
20
19
  export {
21
- GoogleApiToOpenApiConverter,
20
+ BigQueryToolset,
21
+ CalendarToolset,
22
+ DocsToolset,
23
+ GmailToolset,
22
24
  GoogleApiTool,
23
- GoogleApiToolSet,
24
- bigqueryToolSet,
25
- calendarToolSet,
26
- docsToolSet,
27
- gmailToolSet,
25
+ GoogleApiToolset,
26
+ SheetsToolset,
27
+ SlidesToolset,
28
+ YoutubeToolset,
28
29
  isGoogleApiTool,
29
- isGoogleApiToolSet,
30
- sheetsToolSet,
31
- slidesToolSet,
32
- youtubeToolSet
30
+ isGoogleApiToolset
33
31
  };
@@ -9,6 +9,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
9
9
  */
10
10
  import { Type } from "@google/genai";
11
11
  import { appendInstructions } from "../models/llm_request.js";
12
+ import { base64Decode } from "../utils/env_aware_utils.js";
12
13
  import { logger } from "../utils/logger.js";
13
14
  import {
14
15
  BaseTool
@@ -37,6 +38,11 @@ function isInlineMimeTypeSupported(mimeType) {
37
38
  ) || GEMINI_SUPPORTED_INLINE_MIME_TYPES.has(normalized);
38
39
  }
39
40
  __name(isInlineMimeTypeSupported, "isInlineMimeTypeSupported");
41
+ function base64ByteLength(data) {
42
+ const digits = data.replace(/[=\s]/g, "").length;
43
+ return Math.floor(digits * 3 / 4);
44
+ }
45
+ __name(base64ByteLength, "base64ByteLength");
40
46
  function asSafePartForLlm(artifact, artifactName) {
41
47
  const inlineData = artifact.inlineData;
42
48
  if (!inlineData) {
@@ -53,15 +59,13 @@ function asSafePartForLlm(artifact, artifactName) {
53
59
  };
54
60
  }
55
61
  const isTextLike = mimeType.startsWith("text/") || TEXT_LIKE_MIME_TYPES.has(mimeType);
56
- const decodedBuffer = Buffer.from(data, "base64");
57
62
  if (isTextLike) {
58
63
  try {
59
- const decoded = decodedBuffer.toString("utf8");
60
- return { text: decoded };
64
+ return { text: base64Decode(data.replace(/-/g, "+").replace(/_/g, "/")) };
61
65
  } catch {
62
66
  }
63
67
  }
64
- const sizeKb = decodedBuffer.length / 1024;
68
+ const sizeKb = base64ByteLength(data) / 1024;
65
69
  return {
66
70
  text: `[Binary artifact: ${artifactName}, type: ${mimeType}, size: ${sizeKb.toFixed(1)} KB. Content cannot be displayed inline.]`
67
71
  };
@@ -188,5 +192,6 @@ let LoadArtifactsTool = _LoadArtifactsTool;
188
192
  const LOAD_ARTIFACTS = new LoadArtifactsTool();
189
193
  export {
190
194
  LOAD_ARTIFACTS,
191
- LoadArtifactsTool
195
+ LoadArtifactsTool,
196
+ asSafePartForLlm
192
197
  };
@@ -13,11 +13,13 @@ import {
13
13
  BaseTool
14
14
  } from "./base_tool.js";
15
15
  const _LoadMemoryTool = class _LoadMemoryTool extends BaseTool {
16
- constructor() {
16
+ constructor(options = {}) {
17
+ var _a;
17
18
  super({
18
19
  name: "load_memory",
19
20
  description: "Loads the memory for the current user.\n\nNOTE: Currently this tool only uses text part from the memory."
20
21
  });
22
+ this.textOnlyContent = (_a = options.textOnlyContent) != null ? _a : false;
21
23
  }
22
24
  _getDeclaration() {
23
25
  return {
@@ -39,12 +41,12 @@ const _LoadMemoryTool = class _LoadMemoryTool extends BaseTool {
39
41
  args,
40
42
  toolContext
41
43
  }) {
42
- try {
43
- const query = args["query"];
44
- if (!toolContext.invocationContext.memoryService) {
45
- throw new Error("Memory service is not initialized.");
46
- }
47
- const searchMemoryResponse = await toolContext.searchMemory(query);
44
+ const query = args["query"];
45
+ if (!toolContext.invocationContext.memoryService) {
46
+ throw new Error("Memory service is not initialized.");
47
+ }
48
+ const searchMemoryResponse = await toolContext.searchMemory(query);
49
+ if (this.textOnlyContent) {
48
50
  return {
49
51
  memories: searchMemoryResponse.memories.map((m) => {
50
52
  var _a, _b;
@@ -59,10 +61,10 @@ const _LoadMemoryTool = class _LoadMemoryTool extends BaseTool {
59
61
  };
60
62
  })
61
63
  };
62
- } catch (e) {
63
- console.error("ERROR in LoadMemoryTool runAsync:", e);
64
- throw e;
65
64
  }
65
+ return {
66
+ memories: searchMemoryResponse.memories
67
+ };
66
68
  }
67
69
  async processLlmRequest(request) {
68
70
  await super.processLlmRequest(request);
@@ -35,20 +35,7 @@ const _MCPToolset = class _MCPToolset extends BaseToolset {
35
35
  };
36
36
  return new MCPTool(toolWithPrefix, this.mcpSessionManager, tool.name);
37
37
  });
38
- const filter = this.toolFilter;
39
- if (!filter || Array.isArray(filter) && filter.length === 0) {
40
- return tools;
41
- }
42
- if (Array.isArray(filter)) {
43
- return tools.filter((tool) => filter.includes(tool.name));
44
- }
45
- if (context) {
46
- return tools.filter((tool) => filter(tool, context));
47
- }
48
- logger.warn(
49
- "MCPToolset: a ToolPredicate toolFilter was provided but getTools() was called without a ReadonlyContext. The filter will not be applied."
50
- );
51
- return tools;
38
+ return tools.filter((tool) => this.isToolSelected(tool, context));
52
39
  }
53
40
  /**
54
41
  * Lists the names of the resources advertised by the MCP server.
@@ -55,12 +55,12 @@ function generateAuthToken(authCredential) {
55
55
  }
56
56
  __name(generateAuthToken, "generateAuthToken");
57
57
  function exchangeCredential(authScheme, authCredential) {
58
- var _a, _b;
58
+ var _a;
59
59
  checkSchemeCredentialType(authScheme, authCredential);
60
60
  if (authCredential.http) {
61
61
  return authCredential;
62
62
  }
63
- if (((_a = authCredential.oauth2) == null ? void 0 : _a.accessToken) || ((_b = authCredential.oauth2) == null ? void 0 : _b.refreshToken)) {
63
+ if ((_a = authCredential.oauth2) == null ? void 0 : _a.accessToken) {
64
64
  return generateAuthToken(authCredential);
65
65
  }
66
66
  return null;