@google/adk 0.4.0 → 0.6.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 (221) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/a2a/a2a_event.js +317 -0
  3. package/dist/cjs/a2a/a2a_remote_agent.js +174 -0
  4. package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +198 -0
  5. package/dist/cjs/a2a/a2a_remote_agent_utils.js +165 -0
  6. package/dist/cjs/a2a/agent_card.js +380 -0
  7. package/dist/cjs/a2a/agent_executor.js +221 -0
  8. package/dist/cjs/a2a/agent_to_a2a.js +115 -0
  9. package/dist/cjs/a2a/event_converter_utils.js +201 -0
  10. package/dist/cjs/a2a/event_processor_utils.js +180 -0
  11. package/dist/cjs/a2a/executor_context.js +53 -0
  12. package/dist/cjs/a2a/metadata_converter_utils.js +126 -0
  13. package/dist/cjs/a2a/part_converter_utils.js +47 -34
  14. package/dist/cjs/agents/base_agent.js +3 -3
  15. package/dist/cjs/{tools/tool_context.js → agents/context.js} +70 -15
  16. package/dist/cjs/agents/functions.js +2 -2
  17. package/dist/cjs/agents/llm_agent.js +38 -674
  18. package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +132 -0
  19. package/dist/cjs/agents/processors/basic_llm_request_processor.js +68 -0
  20. package/dist/cjs/agents/processors/code_execution_request_processor.js +389 -0
  21. package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
  22. package/dist/cjs/agents/processors/content_request_processor.js +87 -0
  23. package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
  24. package/dist/cjs/agents/processors/identity_llm_request_processor.js +54 -0
  25. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +85 -0
  26. package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +165 -0
  27. package/dist/cjs/artifacts/file_artifact_service.js +35 -4
  28. package/dist/cjs/common.js +48 -7
  29. package/dist/cjs/context/base_context_compactor.js +27 -0
  30. package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
  31. package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
  32. package/dist/cjs/context/token_based_context_compactor.js +135 -0
  33. package/dist/cjs/context/truncating_context_compactor.js +58 -0
  34. package/dist/cjs/events/compacted_event.js +53 -0
  35. package/dist/cjs/index.js +113 -53
  36. package/dist/cjs/index.js.map +7 -0
  37. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  38. package/dist/cjs/models/llm_response.js +2 -0
  39. package/dist/cjs/plugins/base_plugin.js +1 -1
  40. package/dist/cjs/runner/runner.js +20 -11
  41. package/dist/cjs/sessions/database_session_service.js +4 -1
  42. package/dist/cjs/sessions/db/operations.js +25 -23
  43. package/dist/cjs/sessions/state.js +2 -2
  44. package/dist/cjs/tools/agent_tool.js +6 -5
  45. package/dist/cjs/tools/base_tool.js +3 -0
  46. package/dist/cjs/tools/base_toolset.js +13 -3
  47. package/dist/cjs/tools/exit_loop_tool.js +63 -0
  48. package/dist/cjs/tools/load_artifacts_tool.js +188 -0
  49. package/dist/cjs/tools/load_memory_tool.js +107 -0
  50. package/dist/cjs/tools/mcp/mcp_toolset.js +9 -5
  51. package/dist/cjs/tools/preload_memory_tool.js +109 -0
  52. package/dist/cjs/utils/logger.js +62 -54
  53. package/dist/cjs/version.js +1 -1
  54. package/dist/esm/a2a/a2a_event.js +269 -0
  55. package/dist/esm/a2a/a2a_remote_agent.js +148 -0
  56. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +175 -0
  57. package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
  58. package/dist/esm/a2a/agent_card.js +340 -0
  59. package/dist/esm/a2a/agent_executor.js +202 -0
  60. package/dist/esm/a2a/agent_to_a2a.js +80 -0
  61. package/dist/esm/a2a/event_converter_utils.js +187 -0
  62. package/dist/esm/a2a/event_processor_utils.js +159 -0
  63. package/dist/esm/a2a/executor_context.js +23 -0
  64. package/dist/esm/a2a/metadata_converter_utils.js +91 -0
  65. package/dist/esm/a2a/part_converter_utils.js +49 -34
  66. package/dist/esm/agents/base_agent.js +3 -3
  67. package/dist/{web/tools/tool_context.js → esm/agents/context.js} +66 -11
  68. package/dist/esm/agents/functions.js +2 -2
  69. package/dist/esm/agents/llm_agent.js +31 -683
  70. package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +101 -0
  71. package/dist/esm/agents/processors/basic_llm_request_processor.js +37 -0
  72. package/dist/esm/agents/processors/code_execution_request_processor.js +363 -0
  73. package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
  74. package/dist/esm/agents/processors/content_request_processor.js +59 -0
  75. package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
  76. package/dist/esm/agents/processors/identity_llm_request_processor.js +23 -0
  77. package/dist/esm/agents/processors/instructions_llm_request_processor.js +54 -0
  78. package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +140 -0
  79. package/dist/esm/artifacts/file_artifact_service.js +30 -3
  80. package/dist/esm/common.js +44 -10
  81. package/dist/esm/context/base_context_compactor.js +5 -0
  82. package/dist/esm/context/summarizers/base_summarizer.js +5 -0
  83. package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
  84. package/dist/esm/context/token_based_context_compactor.js +105 -0
  85. package/dist/esm/context/truncating_context_compactor.js +28 -0
  86. package/dist/esm/events/compacted_event.js +22 -0
  87. package/dist/esm/index.js +119 -18
  88. package/dist/esm/index.js.map +7 -0
  89. package/dist/esm/memory/in_memory_memory_service.js +1 -1
  90. package/dist/esm/models/llm_response.js +2 -0
  91. package/dist/esm/plugins/base_plugin.js +1 -1
  92. package/dist/esm/runner/runner.js +18 -10
  93. package/dist/esm/sessions/database_session_service.js +4 -1
  94. package/dist/esm/sessions/db/operations.js +32 -18
  95. package/dist/esm/sessions/state.js +2 -2
  96. package/dist/esm/tools/agent_tool.js +6 -5
  97. package/dist/esm/tools/base_tool.js +3 -0
  98. package/dist/esm/tools/base_toolset.js +11 -2
  99. package/dist/esm/tools/exit_loop_tool.js +32 -0
  100. package/dist/esm/tools/load_artifacts_tool.js +159 -0
  101. package/dist/esm/tools/load_memory_tool.js +78 -0
  102. package/dist/esm/tools/mcp/mcp_toolset.js +9 -5
  103. package/dist/esm/tools/preload_memory_tool.js +80 -0
  104. package/dist/esm/utils/logger.js +52 -54
  105. package/dist/esm/version.js +1 -1
  106. package/dist/types/a2a/a2a_event.d.ts +139 -0
  107. package/dist/types/a2a/a2a_remote_agent.d.ts +63 -0
  108. package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
  109. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
  110. package/dist/types/a2a/agent_card.d.ts +23 -0
  111. package/dist/types/a2a/agent_executor.d.ts +52 -0
  112. package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
  113. package/dist/types/a2a/event_converter_utils.d.ts +20 -0
  114. package/dist/types/a2a/event_processor_utils.d.ts +24 -0
  115. package/dist/types/a2a/executor_context.d.ts +33 -0
  116. package/dist/types/a2a/metadata_converter_utils.d.ts +63 -0
  117. package/dist/types/a2a/part_converter_utils.d.ts +4 -3
  118. package/dist/types/agents/base_agent.d.ts +2 -2
  119. package/dist/types/{tools/tool_context.d.ts → agents/context.d.ts} +43 -8
  120. package/dist/types/agents/llm_agent.d.ts +14 -31
  121. package/dist/types/agents/loop_agent.d.ts +1 -1
  122. package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +18 -0
  123. package/dist/types/agents/{base_llm_processor.d.ts → processors/base_llm_processor.d.ts} +4 -4
  124. package/dist/types/agents/processors/basic_llm_request_processor.d.ts +13 -0
  125. package/dist/types/agents/processors/code_execution_request_processor.d.ts +34 -0
  126. package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
  127. package/dist/types/agents/processors/content_request_processor.d.ts +13 -0
  128. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
  129. package/dist/types/agents/processors/identity_llm_request_processor.d.ts +13 -0
  130. package/dist/types/agents/processors/instructions_llm_request_processor.d.ts +16 -0
  131. package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +13 -0
  132. package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
  133. package/dist/types/auth/credential_service/base_credential_service.d.ts +3 -3
  134. package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +3 -3
  135. package/dist/types/common.d.ts +20 -5
  136. package/dist/types/context/base_context_compactor.d.ts +24 -0
  137. package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
  138. package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
  139. package/dist/types/context/token_based_context_compactor.d.ts +33 -0
  140. package/dist/types/context/truncating_context_compactor.d.ts +24 -0
  141. package/dist/types/events/compacted_event.d.ts +33 -0
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/models/llm_response.d.ts +5 -1
  144. package/dist/types/plugins/base_plugin.d.ts +12 -13
  145. package/dist/types/plugins/logging_plugin.d.ts +9 -10
  146. package/dist/types/plugins/plugin_manager.d.ts +9 -10
  147. package/dist/types/plugins/security_plugin.d.ts +2 -2
  148. package/dist/types/runner/runner.d.ts +13 -0
  149. package/dist/types/sessions/database_session_service.d.ts +2 -1
  150. package/dist/types/sessions/db/operations.d.ts +3 -4
  151. package/dist/types/tools/base_tool.d.ts +3 -3
  152. package/dist/types/tools/base_toolset.d.ts +12 -3
  153. package/dist/types/tools/exit_loop_tool.d.ts +24 -0
  154. package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
  155. package/dist/types/tools/function_tool.d.ts +2 -2
  156. package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
  157. package/dist/types/tools/load_memory_tool.d.ts +22 -0
  158. package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -1
  159. package/dist/types/tools/preload_memory_tool.d.ts +23 -0
  160. package/dist/types/utils/logger.d.ts +5 -9
  161. package/dist/types/version.d.ts +1 -1
  162. package/dist/web/a2a/a2a_event.js +269 -0
  163. package/dist/web/a2a/a2a_remote_agent.js +193 -0
  164. package/dist/web/a2a/a2a_remote_agent_run_processor.js +175 -0
  165. package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
  166. package/dist/web/a2a/agent_card.js +340 -0
  167. package/dist/web/a2a/agent_executor.js +216 -0
  168. package/dist/web/a2a/agent_to_a2a.js +80 -0
  169. package/dist/web/a2a/event_converter_utils.js +201 -0
  170. package/dist/web/a2a/event_processor_utils.js +168 -0
  171. package/dist/web/a2a/executor_context.js +23 -0
  172. package/dist/web/a2a/metadata_converter_utils.js +108 -0
  173. package/dist/web/a2a/part_converter_utils.js +49 -34
  174. package/dist/web/agents/base_agent.js +3 -3
  175. package/dist/{esm/tools/tool_context.js → web/agents/context.js} +66 -11
  176. package/dist/web/agents/functions.js +2 -2
  177. package/dist/web/agents/llm_agent.js +31 -661
  178. package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +100 -0
  179. package/dist/web/agents/processors/basic_llm_request_processor.js +71 -0
  180. package/dist/web/agents/processors/code_execution_request_processor.js +365 -0
  181. package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
  182. package/dist/web/agents/processors/content_request_processor.js +77 -0
  183. package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
  184. package/dist/web/agents/processors/identity_llm_request_processor.js +41 -0
  185. package/dist/web/agents/processors/instructions_llm_request_processor.js +72 -0
  186. package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +158 -0
  187. package/dist/web/artifacts/file_artifact_service.js +30 -3
  188. package/dist/web/common.js +44 -10
  189. package/dist/web/context/base_context_compactor.js +5 -0
  190. package/dist/web/context/summarizers/base_summarizer.js +5 -0
  191. package/dist/web/context/summarizers/llm_summarizer.js +74 -0
  192. package/dist/web/context/token_based_context_compactor.js +105 -0
  193. package/dist/web/context/truncating_context_compactor.js +28 -0
  194. package/dist/web/events/compacted_event.js +40 -0
  195. package/dist/web/index.js +13 -18
  196. package/dist/web/index.js.map +7 -0
  197. package/dist/web/memory/in_memory_memory_service.js +1 -1
  198. package/dist/web/models/llm_response.js +2 -0
  199. package/dist/web/plugins/base_plugin.js +1 -1
  200. package/dist/web/runner/runner.js +18 -10
  201. package/dist/web/sessions/database_session_service.js +4 -1
  202. package/dist/web/sessions/db/operations.js +32 -18
  203. package/dist/web/sessions/state.js +2 -2
  204. package/dist/web/tools/agent_tool.js +6 -5
  205. package/dist/web/tools/base_tool.js +3 -0
  206. package/dist/web/tools/base_toolset.js +11 -2
  207. package/dist/web/tools/exit_loop_tool.js +32 -0
  208. package/dist/web/tools/load_artifacts_tool.js +150 -0
  209. package/dist/web/tools/load_memory_tool.js +77 -0
  210. package/dist/web/tools/mcp/mcp_toolset.js +27 -5
  211. package/dist/web/tools/preload_memory_tool.js +75 -0
  212. package/dist/web/utils/logger.js +52 -54
  213. package/dist/web/version.js +1 -1
  214. package/package.json +7 -4
  215. package/dist/cjs/agents/callback_context.js +0 -101
  216. package/dist/esm/agents/callback_context.js +0 -71
  217. package/dist/types/agents/callback_context.d.ts +0 -42
  218. package/dist/web/agents/callback_context.js +0 -71
  219. /package/dist/cjs/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
  220. /package/dist/esm/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
  221. /package/dist/web/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
@@ -87,7 +87,7 @@ function getUserKey(appName, userId) {
87
87
  }
88
88
  function extractWordsLower(text) {
89
89
  return new Set(
90
- [...text.matchAll(/[A-Za-z]+/)].map((match) => match[0].toLowerCase())
90
+ [...text.matchAll(/[A-Za-z]+/g)].map((match) => match[0].toLowerCase())
91
91
  );
92
92
  }
93
93
  function formatTimestamp(timestamp) {
@@ -41,6 +41,7 @@ function createLlmResponse(response) {
41
41
  return {
42
42
  content: candidate.content,
43
43
  groundingMetadata: candidate.groundingMetadata,
44
+ citationMetadata: candidate.citationMetadata,
44
45
  usageMetadata,
45
46
  finishReason: candidate.finishReason
46
47
  };
@@ -49,6 +50,7 @@ function createLlmResponse(response) {
49
50
  errorCode: candidate.finishReason,
50
51
  errorMessage: candidate.finishMessage,
51
52
  usageMetadata,
53
+ citationMetadata: candidate.citationMetadata,
52
54
  finishReason: candidate.finishReason
53
55
  };
54
56
  }
@@ -227,7 +227,7 @@ class BasePlugin {
227
227
  * Callback executed when a tool call encounters an error.
228
228
  tool: BaseTool;
229
229
  toolArgs: Record<string, unknown>;
230
- toolContext: ToolContext;
230
+ toolContext: Context;
231
231
  result: Record<string, unknown>;
232
232
  }): Promise<Record<string, unknown> | undefined> {
233
233
  return;
@@ -24,7 +24,8 @@ var __copyProps = (to, from, except, desc) => {
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
25
  var runner_exports = {};
26
26
  __export(runner_exports, {
27
- Runner: () => Runner
27
+ Runner: () => Runner,
28
+ isRunner: () => isRunner
28
29
  });
29
30
  module.exports = __toCommonJS(runner_exports);
30
31
  var import_genai = require("@google/genai");
@@ -44,12 +45,19 @@ var import_model_name = require("../utils/model_name.js");
44
45
  * Copyright 2025 Google LLC
45
46
  * SPDX-License-Identifier: Apache-2.0
46
47
  */
48
+ var _a;
49
+ const RUNNER_SIGNATURE_SYMBOL = Symbol.for("google.adk.runner");
50
+ function isRunner(obj) {
51
+ return typeof obj === "object" && obj !== null && RUNNER_SIGNATURE_SYMBOL in obj && obj[RUNNER_SIGNATURE_SYMBOL] === true;
52
+ }
53
+ _a = RUNNER_SIGNATURE_SYMBOL;
47
54
  class Runner {
48
55
  constructor(input) {
49
- var _a;
56
+ this[_a] = true;
57
+ var _a2;
50
58
  this.appName = input.appName;
51
59
  this.agent = input.agent;
52
- this.pluginManager = new import_plugin_manager.PluginManager((_a = input.plugins) != null ? _a : []);
60
+ this.pluginManager = new import_plugin_manager.PluginManager((_a2 = input.plugins) != null ? _a2 : []);
53
61
  this.artifactService = input.artifactService;
54
62
  this.sessionService = input.sessionService;
55
63
  this.memoryService = input.memoryService;
@@ -109,7 +117,7 @@ class Runner {
109
117
  ctx,
110
118
  this,
111
119
  async function* () {
112
- var _a;
120
+ var _a2;
113
121
  const session = await this.sessionService.getSession({
114
122
  appName: this.appName,
115
123
  userId,
@@ -154,7 +162,7 @@ class Runner {
154
162
  newMessage = pluginUserMessage;
155
163
  }
156
164
  if (newMessage) {
157
- if (!((_a = newMessage.parts) == null ? void 0 : _a.length)) {
165
+ if (!((_a2 = newMessage.parts) == null ? void 0 : _a2.length)) {
158
166
  throw new Error("No parts in the newMessage.");
159
167
  }
160
168
  if (runConfig.saveInputBlobsAsArtifacts) {
@@ -230,8 +238,8 @@ class Runner {
230
238
  * @param message The message containing parts to process.
231
239
  */
232
240
  async saveArtifacts(invocationId, userId, sessionId, message) {
233
- var _a;
234
- if (!this.artifactService || !((_a = message.parts) == null ? void 0 : _a.length)) {
241
+ var _a2;
242
+ if (!this.artifactService || !((_a2 = message.parts) == null ? void 0 : _a2.length)) {
235
243
  return;
236
244
  }
237
245
  for (let i = 0; i < message.parts.length; i++) {
@@ -264,7 +272,7 @@ class Runner {
264
272
  return rootAgent.findAgent(event.author) || rootAgent;
265
273
  }
266
274
  for (let i = session.events.length - 1; i >= 0; i--) {
267
- import_logger.logger.info("event: ", JSON.stringify(session.events[i]));
275
+ import_logger.logger.info("event:", JSON.stringify(session.events[i]));
268
276
  const event2 = session.events[i];
269
277
  if (event2.author === "user" || !event2.author) {
270
278
  continue;
@@ -312,12 +320,12 @@ class Runner {
312
320
  // TODO - b/425992518: Implement runLive and related methods.
313
321
  }
314
322
  function findEventByLastFunctionResponseId(events) {
315
- var _a, _b, _c, _d;
323
+ var _a2, _b, _c, _d;
316
324
  if (!events.length) {
317
325
  return null;
318
326
  }
319
327
  const lastEvent = events[events.length - 1];
320
- const functionCallId = (_d = (_c = (_b = (_a = lastEvent.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.find(
328
+ const functionCallId = (_d = (_c = (_b = (_a2 = lastEvent.content) == null ? void 0 : _a2.parts) == null ? void 0 : _b.find(
321
329
  (part) => part.functionResponse
322
330
  )) == null ? void 0 : _c.functionResponse) == null ? void 0 : _d.id;
323
331
  if (!functionCallId) {
@@ -339,5 +347,6 @@ function findEventByLastFunctionResponseId(events) {
339
347
  }
340
348
  // Annotate the CommonJS export names for ESM import in node:
341
349
  0 && (module.exports = {
342
- Runner
350
+ Runner,
351
+ isRunner
343
352
  });
@@ -51,7 +51,7 @@ class DatabaseSessionService extends import_base_session_service.BaseSessionServ
51
51
  super();
52
52
  this.initialized = false;
53
53
  if (typeof connectionStringOrOptions === "string") {
54
- this.options = (0, import_operations.getConnectionOptionsFromUri)(connectionStringOrOptions);
54
+ this.connectionString = connectionStringOrOptions;
55
55
  } else {
56
56
  if (!connectionStringOrOptions.driver) {
57
57
  throw new Error("Driver is required when passing options object.");
@@ -66,6 +66,9 @@ class DatabaseSessionService extends import_base_session_service.BaseSessionServ
66
66
  if (this.initialized) {
67
67
  return;
68
68
  }
69
+ if (this.connectionString && (!this.options || !this.options.driver)) {
70
+ this.options = await (0, import_operations.getConnectionOptionsFromUri)(this.connectionString);
71
+ }
69
72
  this.orm = await import_core.MikroORM.init(this.options);
70
73
  await (0, import_operations.ensureDatabaseCreated)(this.orm);
71
74
  await (0, import_operations.validateDatabaseSchemaVersion)(this.orm);
@@ -5,9 +5,11 @@
5
5
  */
6
6
 
7
7
  "use strict";
8
+ var __create = Object.create;
8
9
  var __defProp = Object.defineProperty;
9
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
11
  var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __getProtoOf = Object.getPrototypeOf;
11
13
  var __hasOwnProp = Object.prototype.hasOwnProperty;
12
14
  var __export = (target, all) => {
13
15
  for (var name in all)
@@ -21,6 +23,14 @@ var __copyProps = (to, from, except, desc) => {
21
23
  }
22
24
  return to;
23
25
  };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
+ // If the importer is in node compatibility mode or this is not an ESM
28
+ // file that has been converted to a CommonJS file using a Babel-
29
+ // compatible transform (i.e. "__esModule" has not been set), then set
30
+ // "default" to the CommonJS "module.exports" for node compatibility.
31
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
32
+ mod
33
+ ));
24
34
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
35
  var operations_exports = {};
26
36
  __export(operations_exports, {
@@ -29,30 +39,29 @@ __export(operations_exports, {
29
39
  validateDatabaseSchemaVersion: () => validateDatabaseSchemaVersion
30
40
  });
31
41
  module.exports = __toCommonJS(operations_exports);
32
- var import_core = require("@mikro-orm/core");
33
- var import_mariadb = require("@mikro-orm/mariadb");
34
- var import_mssql = require("@mikro-orm/mssql");
35
- var import_mysql = require("@mikro-orm/mysql");
36
- var import_postgresql = require("@mikro-orm/postgresql");
37
- var import_sqlite = require("@mikro-orm/sqlite");
38
42
  var import_schema = require("./schema.js");
39
43
  /**
40
44
  * @license
41
45
  * Copyright 2026 Google LLC
42
46
  * SPDX-License-Identifier: Apache-2.0
43
47
  */
44
- function getConnectionOptionsFromUri(uri) {
48
+ async function getConnectionOptionsFromUri(uri) {
45
49
  let driver;
46
50
  if (uri.startsWith("postgres://") || uri.startsWith("postgresql://")) {
47
- driver = import_postgresql.PostgreSqlDriver;
51
+ const { PostgreSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/postgresql"), 1));
52
+ driver = PostgreSqlDriver;
48
53
  } else if (uri.startsWith("mysql://")) {
49
- driver = import_mysql.MySqlDriver;
54
+ const { MySqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mysql"), 1));
55
+ driver = MySqlDriver;
50
56
  } else if (uri.startsWith("mariadb://")) {
51
- driver = import_mariadb.MariaDbDriver;
57
+ const { MariaDbDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mariadb"), 1));
58
+ driver = MariaDbDriver;
52
59
  } else if (uri.startsWith("sqlite://")) {
53
- driver = import_sqlite.SqliteDriver;
60
+ const { SqliteDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/sqlite"), 1));
61
+ driver = SqliteDriver;
54
62
  } else if (uri.startsWith("mssql://")) {
55
- driver = import_mssql.MsSqlDriver;
63
+ const { MsSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mssql"), 1));
64
+ driver = MsSqlDriver;
56
65
  } else {
57
66
  throw new Error(`Unsupported database URI: ${uri}`);
58
67
  }
@@ -65,9 +74,10 @@ function getConnectionOptionsFromUri(uri) {
65
74
  }
66
75
  const { host, port, username, password, pathname } = new URL(uri);
67
76
  const hostName = host.split(":")[0];
77
+ const dbName = uri.startsWith("sqlite://") ? uri.substring("sqlite://".length) : pathname.slice(1);
68
78
  return {
69
79
  entities: import_schema.ENTITIES,
70
- dbName: pathname.slice(1),
80
+ dbName,
71
81
  host: hostName,
72
82
  port: port ? parseInt(port) : void 0,
73
83
  user: username,
@@ -75,17 +85,9 @@ function getConnectionOptionsFromUri(uri) {
75
85
  driver
76
86
  };
77
87
  }
78
- async function ensureDatabaseCreated(ormOrUrlOrOptions) {
79
- let orm;
80
- if (ormOrUrlOrOptions instanceof import_core.MikroORM) {
81
- orm = ormOrUrlOrOptions;
82
- } else if (typeof ormOrUrlOrOptions === "string") {
83
- orm = await import_core.MikroORM.init(getConnectionOptionsFromUri(ormOrUrlOrOptions));
84
- } else {
85
- orm = await import_core.MikroORM.init(ormOrUrlOrOptions);
86
- }
88
+ async function ensureDatabaseCreated(orm) {
87
89
  await orm.schema.ensureDatabase();
88
- await orm.schema.updateSchema();
90
+ await orm.schema.updateSchema({ safe: true });
89
91
  }
90
92
  async function validateDatabaseSchemaVersion(orm) {
91
93
  const em = orm.em.fork();
@@ -82,8 +82,8 @@ class State {
82
82
  * @param delta The delta to update the state with.
83
83
  */
84
84
  update(delta) {
85
- this.delta = { ...this.delta, ...delta };
86
- this.value = { ...this.value, ...delta };
85
+ Object.assign(this.delta, delta);
86
+ Object.assign(this.value, delta);
87
87
  }
88
88
  /**
89
89
  * Returns the state as a plain JSON object.
@@ -93,7 +93,7 @@ class AgentTool extends (_b = import_base_tool.BaseTool, _a = AGENT_TOOL_SIGNATU
93
93
  args,
94
94
  toolContext
95
95
  }) {
96
- var _a2, _b2;
96
+ var _a2, _b2, _c, _d;
97
97
  if (this.skipSummarization) {
98
98
  toolContext.actions.skipSummarization = true;
99
99
  }
@@ -112,13 +112,14 @@ class AgentTool extends (_b = import_base_tool.BaseTool, _a = AGENT_TOOL_SIGNATU
112
112
  appName: this.agent.name,
113
113
  agent: this.agent,
114
114
  artifactService: new import_forwarding_artifact_service.ForwardingArtifactService(toolContext),
115
- sessionService: new import_in_memory_session_service.InMemorySessionService(),
116
- memoryService: new import_in_memory_memory_service.InMemoryMemoryService(),
115
+ sessionService: (_a2 = toolContext.invocationContext.sessionService) != null ? _a2 : new import_in_memory_session_service.InMemorySessionService(),
116
+ memoryService: (_b2 = toolContext.invocationContext.memoryService) != null ? _b2 : new import_in_memory_memory_service.InMemoryMemoryService(),
117
117
  credentialService: toolContext.invocationContext.credentialService
118
118
  });
119
119
  const session = await runner.sessionService.createSession({
120
120
  appName: this.agent.name,
121
- userId: "tmp_user",
121
+ userId: toolContext.invocationContext.userId,
122
+ sessionId: toolContext.invocationContext.session.id,
122
123
  state: toolContext.state.toRecord()
123
124
  });
124
125
  let lastEvent;
@@ -132,7 +133,7 @@ class AgentTool extends (_b = import_base_tool.BaseTool, _a = AGENT_TOOL_SIGNATU
132
133
  }
133
134
  lastEvent = event;
134
135
  }
135
- if (!((_b2 = (_a2 = lastEvent == null ? void 0 : lastEvent.content) == null ? void 0 : _a2.parts) == null ? void 0 : _b2.length)) {
136
+ if (!((_d = (_c = lastEvent == null ? void 0 : lastEvent.content) == null ? void 0 : _c.parts) == null ? void 0 : _d.length)) {
136
137
  return "";
137
138
  }
138
139
  const hasOutputSchema = (0, import_llm_agent.isLlmAgent)(this.agent) && this.agent.outputSchema;
@@ -84,6 +84,9 @@ class BaseTool {
84
84
  if (!functionDeclaration) {
85
85
  return;
86
86
  }
87
+ if (this.name in llmRequest.toolsDict) {
88
+ throw new Error(`Duplicate tool name: ${this.name}`);
89
+ }
87
90
  llmRequest.toolsDict[this.name] = this;
88
91
  const tool = findToolWithFunctionDeclarations(llmRequest);
89
92
  if (tool) {
@@ -24,7 +24,8 @@ var __copyProps = (to, from, except, desc) => {
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
25
  var base_toolset_exports = {};
26
26
  __export(base_toolset_exports, {
27
- BaseToolset: () => BaseToolset
27
+ BaseToolset: () => BaseToolset,
28
+ isBaseToolset: () => isBaseToolset
28
29
  });
29
30
  module.exports = __toCommonJS(base_toolset_exports);
30
31
  /**
@@ -32,9 +33,17 @@ module.exports = __toCommonJS(base_toolset_exports);
32
33
  * Copyright 2025 Google LLC
33
34
  * SPDX-License-Identifier: Apache-2.0
34
35
  */
36
+ var _a;
37
+ const BASE_TOOLSET_SIGNATURE_SYMBOL = Symbol.for("google.adk.baseToolset");
38
+ function isBaseToolset(obj) {
39
+ return typeof obj === "object" && obj !== null && BASE_TOOLSET_SIGNATURE_SYMBOL in obj && obj[BASE_TOOLSET_SIGNATURE_SYMBOL] === true;
40
+ }
41
+ _a = BASE_TOOLSET_SIGNATURE_SYMBOL;
35
42
  class BaseToolset {
36
- constructor(toolFilter) {
43
+ constructor(toolFilter, prefix) {
37
44
  this.toolFilter = toolFilter;
45
+ this.prefix = prefix;
46
+ this[_a] = true;
38
47
  }
39
48
  /**
40
49
  * Returns whether the tool should be exposed to LLM.
@@ -72,5 +81,6 @@ class BaseToolset {
72
81
  }
73
82
  // Annotate the CommonJS export names for ESM import in node:
74
83
  0 && (module.exports = {
75
- BaseToolset
84
+ BaseToolset,
85
+ isBaseToolset
76
86
  });
@@ -0,0 +1,63 @@
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 exit_loop_tool_exports = {};
26
+ __export(exit_loop_tool_exports, {
27
+ EXIT_LOOP: () => EXIT_LOOP,
28
+ ExitLoopTool: () => ExitLoopTool
29
+ });
30
+ module.exports = __toCommonJS(exit_loop_tool_exports);
31
+ var import_base_tool = require("./base_tool.js");
32
+ /**
33
+ * @license
34
+ * Copyright 2026 Google LLC
35
+ * SPDX-License-Identifier: Apache-2.0
36
+ */
37
+ class ExitLoopTool extends import_base_tool.BaseTool {
38
+ constructor() {
39
+ super({
40
+ name: "exit_loop",
41
+ description: "Exits the loop.\n\nCall this function only when you are instructed to do so."
42
+ });
43
+ }
44
+ _getDeclaration() {
45
+ return {
46
+ name: this.name,
47
+ description: this.description
48
+ };
49
+ }
50
+ async runAsync({
51
+ toolContext
52
+ }) {
53
+ toolContext.actions.escalate = true;
54
+ toolContext.actions.skipSummarization = true;
55
+ return "";
56
+ }
57
+ }
58
+ const EXIT_LOOP = new ExitLoopTool();
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ EXIT_LOOP,
62
+ ExitLoopTool
63
+ });
@@ -0,0 +1,188 @@
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 load_artifacts_tool_exports = {};
26
+ __export(load_artifacts_tool_exports, {
27
+ LOAD_ARTIFACTS: () => LOAD_ARTIFACTS,
28
+ LoadArtifactsTool: () => LoadArtifactsTool
29
+ });
30
+ module.exports = __toCommonJS(load_artifacts_tool_exports);
31
+ var import_genai = require("@google/genai");
32
+ var import_llm_request = require("../models/llm_request.js");
33
+ var import_logger = require("../utils/logger.js");
34
+ var import_base_tool = require("./base_tool.js");
35
+ /**
36
+ * @license
37
+ * Copyright 2026 Google LLC
38
+ * SPDX-License-Identifier: Apache-2.0
39
+ */
40
+ const logger = (0, import_logger.getLogger)();
41
+ const GEMINI_SUPPORTED_INLINE_MIME_PREFIXES = ["image/", "audio/", "video/"];
42
+ const GEMINI_SUPPORTED_INLINE_MIME_TYPES = /* @__PURE__ */ new Set(["application/pdf"]);
43
+ const TEXT_LIKE_MIME_TYPES = /* @__PURE__ */ new Set([
44
+ "application/csv",
45
+ "application/json",
46
+ "application/xml"
47
+ ]);
48
+ function normalizeMimeType(mimeType) {
49
+ if (!mimeType) {
50
+ return void 0;
51
+ }
52
+ return mimeType.split(";")[0].trim();
53
+ }
54
+ function isInlineMimeTypeSupported(mimeType) {
55
+ const normalized = normalizeMimeType(mimeType);
56
+ if (!normalized) {
57
+ return false;
58
+ }
59
+ return GEMINI_SUPPORTED_INLINE_MIME_PREFIXES.some(
60
+ (prefix) => normalized.startsWith(prefix)
61
+ ) || GEMINI_SUPPORTED_INLINE_MIME_TYPES.has(normalized);
62
+ }
63
+ function asSafePartForLlm(artifact, artifactName) {
64
+ const inlineData = artifact.inlineData;
65
+ if (!inlineData) {
66
+ return artifact;
67
+ }
68
+ if (isInlineMimeTypeSupported(inlineData.mimeType)) {
69
+ return artifact;
70
+ }
71
+ const mimeType = normalizeMimeType(inlineData.mimeType) || "application/octet-stream";
72
+ const data = inlineData.data;
73
+ if (!data) {
74
+ return {
75
+ text: `[Artifact: ${artifactName}, type: ${mimeType}. No inline data was provided.]`
76
+ };
77
+ }
78
+ const isTextLike = mimeType.startsWith("text/") || TEXT_LIKE_MIME_TYPES.has(mimeType);
79
+ const decodedBuffer = Buffer.from(data, "base64");
80
+ if (isTextLike) {
81
+ try {
82
+ const decoded = decodedBuffer.toString("utf8");
83
+ return { text: decoded };
84
+ } catch {
85
+ }
86
+ }
87
+ const sizeKb = decodedBuffer.length / 1024;
88
+ return {
89
+ text: `[Binary artifact: ${artifactName}, type: ${mimeType}, size: ${sizeKb.toFixed(1)} KB. Content cannot be displayed inline.]`
90
+ };
91
+ }
92
+ class LoadArtifactsTool extends import_base_tool.BaseTool {
93
+ constructor() {
94
+ super({
95
+ name: "load_artifacts",
96
+ description: `Loads artifacts into the session for this request.
97
+
98
+ NOTE: Call when you need access to artifacts (for example, uploads saved by the web UI).`
99
+ });
100
+ }
101
+ _getDeclaration() {
102
+ return {
103
+ name: this.name,
104
+ description: this.description,
105
+ parameters: {
106
+ type: import_genai.Type.OBJECT,
107
+ properties: {
108
+ artifact_names: {
109
+ type: import_genai.Type.ARRAY,
110
+ items: {
111
+ type: import_genai.Type.STRING
112
+ },
113
+ description: "The names of the artifacts to load."
114
+ }
115
+ }
116
+ }
117
+ };
118
+ }
119
+ async runAsync({ args }) {
120
+ const artifactNames = args["artifact_names"] || [];
121
+ return {
122
+ artifact_names: artifactNames,
123
+ status: "artifact contents temporarily inserted and removed. to access these artifacts, call load_artifacts tool again."
124
+ };
125
+ }
126
+ async processLlmRequest(request) {
127
+ await super.processLlmRequest(request);
128
+ await this.appendArtifactsToLlmRequest(
129
+ request.toolContext,
130
+ request.llmRequest
131
+ );
132
+ }
133
+ async appendArtifactsToLlmRequest(toolContext, llmRequest) {
134
+ if (!toolContext.invocationContext.artifactService) {
135
+ return;
136
+ }
137
+ const artifactNames = await toolContext.listArtifacts();
138
+ if (!artifactNames || artifactNames.length === 0) {
139
+ return;
140
+ }
141
+ (0, import_llm_request.appendInstructions)(llmRequest, [
142
+ `You have a list of artifacts:
143
+ ${JSON.stringify(
144
+ artifactNames
145
+ )}
146
+
147
+ When the user asks questions about any of the artifacts, you should call the
148
+ \`load_artifacts\` function to load the artifact. Always call load_artifacts
149
+ before answering questions related to the artifacts, regardless of whether the
150
+ artifacts have been loaded before. Do not depend on prior answers about the
151
+ artifacts.`
152
+ ]);
153
+ const contents = llmRequest.contents;
154
+ if (contents && contents.length > 0) {
155
+ const lastContent = contents[contents.length - 1];
156
+ if (lastContent.role === "user" && lastContent.parts && lastContent.parts.length > 0) {
157
+ const functionResponsePart = lastContent.parts[0];
158
+ const functionResponse = functionResponsePart.functionResponse;
159
+ if (functionResponse && functionResponse.name === "load_artifacts") {
160
+ const response = functionResponse.response || {};
161
+ const namesToLoad = response["artifact_names"] || [];
162
+ for (const artifactName of namesToLoad) {
163
+ let artifact = await toolContext.loadArtifact(artifactName);
164
+ if (!artifact && !artifactName.startsWith("user:")) {
165
+ const prefixedName = `user:${artifactName}`;
166
+ artifact = await toolContext.loadArtifact(prefixedName);
167
+ }
168
+ if (!artifact) {
169
+ logger.warn(`Artifact "${artifactName}" not found, skipping`);
170
+ continue;
171
+ }
172
+ const artifactPart = asSafePartForLlm(artifact, artifactName);
173
+ llmRequest.contents.push({
174
+ role: "user",
175
+ parts: [{ text: `Artifact ${artifactName} is:` }, artifactPart]
176
+ });
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ const LOAD_ARTIFACTS = new LoadArtifactsTool();
184
+ // Annotate the CommonJS export names for ESM import in node:
185
+ 0 && (module.exports = {
186
+ LOAD_ARTIFACTS,
187
+ LoadArtifactsTool
188
+ });