@paean-ai/adk 0.2.16 → 0.2.17

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 (253) hide show
  1. package/dist/cjs/agents/active_streaming_tool.js +44 -0
  2. package/dist/cjs/agents/base_agent.js +245 -0
  3. package/dist/cjs/agents/base_llm_processor.js +44 -0
  4. package/dist/cjs/agents/callback_context.js +98 -0
  5. package/dist/cjs/agents/content_processor_utils.js +346 -0
  6. package/dist/cjs/agents/functions.js +424 -0
  7. package/dist/cjs/agents/instructions.js +110 -0
  8. package/dist/cjs/agents/invocation_context.js +107 -0
  9. package/dist/cjs/agents/live_request_queue.js +136 -0
  10. package/dist/cjs/agents/llm_agent.js +1247 -0
  11. package/dist/cjs/agents/loop_agent.js +68 -0
  12. package/dist/cjs/agents/parallel_agent.js +78 -0
  13. package/dist/cjs/agents/readonly_context.js +68 -0
  14. package/dist/cjs/agents/run_config.js +70 -0
  15. package/dist/cjs/agents/sequential_agent.js +84 -0
  16. package/dist/cjs/agents/transcription_entry.js +27 -0
  17. package/dist/cjs/artifacts/base_artifact_service.js +27 -0
  18. package/dist/cjs/artifacts/gcs_artifact_service.js +140 -0
  19. package/dist/cjs/artifacts/in_memory_artifact_service.js +119 -0
  20. package/dist/cjs/auth/auth_credential.js +46 -0
  21. package/dist/cjs/auth/auth_handler.js +92 -0
  22. package/dist/cjs/auth/auth_schemes.js +62 -0
  23. package/dist/cjs/auth/auth_tool.js +27 -0
  24. package/dist/cjs/auth/credential_service/base_credential_service.js +27 -0
  25. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +63 -0
  26. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +40 -0
  27. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +59 -0
  28. package/dist/cjs/code_executors/base_code_executor.js +76 -0
  29. package/dist/cjs/code_executors/built_in_code_executor.js +58 -0
  30. package/dist/cjs/code_executors/code_execution_utils.js +142 -0
  31. package/dist/cjs/code_executors/code_executor_context.js +198 -0
  32. package/dist/cjs/common.js +181 -0
  33. package/dist/cjs/events/event.js +119 -0
  34. package/dist/cjs/events/event_actions.js +83 -0
  35. package/dist/cjs/examples/base_example_provider.js +40 -0
  36. package/dist/cjs/examples/example.js +27 -0
  37. package/dist/cjs/examples/example_util.js +107 -0
  38. package/dist/cjs/index.js +10 -10
  39. package/dist/cjs/index.js.map +3 -3
  40. package/dist/cjs/index_web.js +33 -0
  41. package/dist/cjs/memory/base_memory_service.js +27 -0
  42. package/dist/cjs/memory/in_memory_memory_service.js +97 -0
  43. package/dist/cjs/memory/memory_entry.js +27 -0
  44. package/dist/cjs/models/base_llm.js +95 -0
  45. package/dist/cjs/models/base_llm_connection.js +27 -0
  46. package/dist/cjs/models/gemini_llm_connection.js +132 -0
  47. package/dist/cjs/models/google_llm.js +559 -0
  48. package/dist/cjs/models/llm_request.js +82 -0
  49. package/dist/cjs/models/llm_response.js +71 -0
  50. package/dist/cjs/models/registry.js +121 -0
  51. package/dist/cjs/plugins/base_plugin.js +236 -0
  52. package/dist/cjs/plugins/logging_plugin.js +222 -0
  53. package/dist/cjs/plugins/plugin_manager.js +239 -0
  54. package/dist/cjs/plugins/security_plugin.js +153 -0
  55. package/dist/cjs/runner/in_memory_runner.js +58 -0
  56. package/dist/cjs/runner/runner.js +277 -0
  57. package/dist/cjs/sessions/base_session_service.js +71 -0
  58. package/dist/cjs/sessions/in_memory_session_service.js +184 -0
  59. package/dist/cjs/sessions/session.js +48 -0
  60. package/dist/cjs/sessions/state.js +101 -0
  61. package/dist/cjs/telemetry/google_cloud.js +85 -0
  62. package/dist/cjs/telemetry/setup.js +97 -0
  63. package/dist/cjs/telemetry/tracing.js +231 -0
  64. package/dist/cjs/tools/agent_tool.js +134 -0
  65. package/dist/cjs/tools/base_tool.js +107 -0
  66. package/dist/cjs/tools/base_toolset.js +76 -0
  67. package/dist/cjs/tools/forwarding_artifact_service.js +71 -0
  68. package/dist/cjs/tools/function_tool.js +101 -0
  69. package/dist/cjs/tools/google_search_tool.js +77 -0
  70. package/dist/cjs/tools/long_running_tool.js +63 -0
  71. package/dist/cjs/tools/mcp/mcp_session_manager.js +65 -0
  72. package/dist/cjs/tools/mcp/mcp_tool.js +65 -0
  73. package/dist/cjs/tools/mcp/mcp_toolset.js +61 -0
  74. package/dist/cjs/tools/tool_confirmation.js +49 -0
  75. package/dist/cjs/tools/tool_context.js +129 -0
  76. package/dist/cjs/utils/client_labels.js +56 -0
  77. package/dist/cjs/utils/deep_clone.js +44 -0
  78. package/dist/cjs/utils/env_aware_utils.js +83 -0
  79. package/dist/cjs/utils/gemini_schema_util.js +88 -0
  80. package/dist/cjs/utils/logger.js +121 -0
  81. package/dist/cjs/utils/model_name.js +76 -0
  82. package/dist/cjs/utils/simple_zod_to_json.js +191 -0
  83. package/dist/cjs/utils/variant_utils.js +55 -0
  84. package/dist/cjs/version.js +39 -0
  85. package/dist/esm/agents/active_streaming_tool.js +14 -0
  86. package/dist/esm/agents/base_agent.js +214 -0
  87. package/dist/esm/agents/base_llm_processor.js +13 -0
  88. package/dist/esm/agents/callback_context.js +68 -0
  89. package/dist/esm/agents/content_processor_utils.js +315 -0
  90. package/dist/esm/agents/functions.js +383 -0
  91. package/dist/esm/agents/instructions.js +80 -0
  92. package/dist/esm/agents/invocation_context.js +76 -0
  93. package/dist/esm/agents/live_request_queue.js +106 -0
  94. package/dist/esm/agents/llm_agent.js +1215 -0
  95. package/dist/esm/agents/loop_agent.js +38 -0
  96. package/dist/esm/agents/parallel_agent.js +48 -0
  97. package/dist/esm/agents/readonly_context.js +38 -0
  98. package/dist/esm/agents/run_config.js +39 -0
  99. package/dist/esm/agents/sequential_agent.js +54 -0
  100. package/dist/esm/agents/transcription_entry.js +5 -0
  101. package/dist/esm/artifacts/base_artifact_service.js +5 -0
  102. package/dist/esm/artifacts/gcs_artifact_service.js +110 -0
  103. package/dist/esm/artifacts/in_memory_artifact_service.js +89 -0
  104. package/dist/esm/auth/auth_credential.js +16 -0
  105. package/dist/esm/auth/auth_handler.js +62 -0
  106. package/dist/esm/auth/auth_schemes.js +31 -0
  107. package/dist/esm/auth/auth_tool.js +5 -0
  108. package/dist/esm/auth/credential_service/base_credential_service.js +5 -0
  109. package/dist/esm/auth/credential_service/in_memory_credential_service.js +33 -0
  110. package/dist/esm/auth/exchanger/base_credential_exchanger.js +10 -0
  111. package/dist/esm/auth/exchanger/credential_exchanger_registry.js +29 -0
  112. package/dist/esm/code_executors/base_code_executor.js +46 -0
  113. package/dist/esm/code_executors/built_in_code_executor.js +28 -0
  114. package/dist/esm/code_executors/code_execution_utils.js +108 -0
  115. package/dist/esm/code_executors/code_executor_context.js +168 -0
  116. package/dist/esm/common.js +98 -0
  117. package/dist/esm/events/event.js +83 -0
  118. package/dist/esm/events/event_actions.js +52 -0
  119. package/dist/esm/examples/base_example_provider.js +10 -0
  120. package/dist/esm/examples/example.js +5 -0
  121. package/dist/esm/examples/example_util.js +76 -0
  122. package/dist/esm/index.js +10 -10
  123. package/dist/esm/index.js.map +3 -3
  124. package/dist/esm/index_web.js +6 -0
  125. package/dist/esm/memory/base_memory_service.js +5 -0
  126. package/dist/esm/memory/in_memory_memory_service.js +67 -0
  127. package/dist/esm/memory/memory_entry.js +5 -0
  128. package/dist/esm/models/base_llm.js +64 -0
  129. package/dist/esm/models/base_llm_connection.js +5 -0
  130. package/dist/esm/models/gemini_llm_connection.js +102 -0
  131. package/dist/esm/models/google_llm.js +533 -0
  132. package/dist/esm/models/llm_request.js +50 -0
  133. package/dist/esm/models/llm_response.js +41 -0
  134. package/dist/esm/models/registry.js +91 -0
  135. package/dist/esm/plugins/base_plugin.js +206 -0
  136. package/dist/esm/plugins/logging_plugin.js +192 -0
  137. package/dist/esm/plugins/plugin_manager.js +209 -0
  138. package/dist/esm/plugins/security_plugin.js +119 -0
  139. package/dist/esm/runner/in_memory_runner.js +28 -0
  140. package/dist/esm/runner/runner.js +247 -0
  141. package/dist/esm/sessions/base_session_service.js +41 -0
  142. package/dist/esm/sessions/in_memory_session_service.js +154 -0
  143. package/dist/esm/sessions/session.js +18 -0
  144. package/dist/esm/sessions/state.js +71 -0
  145. package/dist/esm/telemetry/google_cloud.js +54 -0
  146. package/dist/esm/telemetry/setup.js +67 -0
  147. package/dist/esm/telemetry/tracing.js +195 -0
  148. package/dist/esm/tools/agent_tool.js +104 -0
  149. package/dist/esm/tools/base_tool.js +77 -0
  150. package/dist/esm/tools/base_toolset.js +46 -0
  151. package/dist/esm/tools/forwarding_artifact_service.js +41 -0
  152. package/dist/esm/tools/function_tool.js +71 -0
  153. package/dist/esm/tools/google_search_tool.js +47 -0
  154. package/dist/esm/tools/long_running_tool.js +33 -0
  155. package/dist/esm/tools/mcp/mcp_session_manager.js +35 -0
  156. package/dist/esm/tools/mcp/mcp_tool.js +35 -0
  157. package/dist/esm/tools/mcp/mcp_toolset.js +31 -0
  158. package/dist/esm/tools/tool_confirmation.js +19 -0
  159. package/dist/esm/tools/tool_context.js +99 -0
  160. package/dist/esm/utils/client_labels.js +26 -0
  161. package/dist/esm/utils/deep_clone.js +14 -0
  162. package/dist/esm/utils/env_aware_utils.js +49 -0
  163. package/dist/esm/utils/gemini_schema_util.js +58 -0
  164. package/dist/esm/utils/logger.js +89 -0
  165. package/dist/esm/utils/model_name.js +41 -0
  166. package/dist/esm/utils/simple_zod_to_json.js +160 -0
  167. package/dist/esm/utils/variant_utils.js +24 -0
  168. package/dist/esm/version.js +9 -0
  169. package/dist/web/agents/active_streaming_tool.js +14 -0
  170. package/dist/web/agents/base_agent.js +265 -0
  171. package/dist/web/agents/base_llm_processor.js +13 -0
  172. package/dist/web/agents/callback_context.js +68 -0
  173. package/dist/web/agents/content_processor_utils.js +315 -0
  174. package/dist/web/agents/functions.js +383 -0
  175. package/dist/web/agents/instructions.js +80 -0
  176. package/dist/web/agents/invocation_context.js +76 -0
  177. package/dist/web/agents/live_request_queue.js +124 -0
  178. package/dist/web/agents/llm_agent.js +1345 -0
  179. package/dist/web/agents/loop_agent.js +71 -0
  180. package/dist/web/agents/parallel_agent.js +83 -0
  181. package/dist/web/agents/readonly_context.js +38 -0
  182. package/dist/web/agents/run_config.js +54 -0
  183. package/dist/web/agents/sequential_agent.js +99 -0
  184. package/dist/web/agents/transcription_entry.js +5 -0
  185. package/dist/web/artifacts/base_artifact_service.js +5 -0
  186. package/dist/web/artifacts/gcs_artifact_service.js +126 -0
  187. package/dist/web/artifacts/in_memory_artifact_service.js +89 -0
  188. package/dist/web/auth/auth_credential.js +16 -0
  189. package/dist/web/auth/auth_handler.js +62 -0
  190. package/dist/web/auth/auth_schemes.js +31 -0
  191. package/dist/web/auth/auth_tool.js +5 -0
  192. package/dist/web/auth/credential_service/base_credential_service.js +5 -0
  193. package/dist/web/auth/credential_service/in_memory_credential_service.js +33 -0
  194. package/dist/web/auth/exchanger/base_credential_exchanger.js +10 -0
  195. package/dist/web/auth/exchanger/credential_exchanger_registry.js +29 -0
  196. package/dist/web/code_executors/base_code_executor.js +46 -0
  197. package/dist/web/code_executors/built_in_code_executor.js +28 -0
  198. package/dist/web/code_executors/code_execution_utils.js +105 -0
  199. package/dist/web/code_executors/code_executor_context.js +168 -0
  200. package/dist/web/common.js +98 -0
  201. package/dist/web/events/event.js +101 -0
  202. package/dist/web/events/event_actions.js +67 -0
  203. package/dist/web/examples/base_example_provider.js +10 -0
  204. package/dist/web/examples/example.js +5 -0
  205. package/dist/web/examples/example_util.js +75 -0
  206. package/dist/web/index.js +1 -1
  207. package/dist/web/index.js.map +3 -3
  208. package/dist/web/index_web.js +6 -0
  209. package/dist/web/memory/base_memory_service.js +5 -0
  210. package/dist/web/memory/in_memory_memory_service.js +67 -0
  211. package/dist/web/memory/memory_entry.js +5 -0
  212. package/dist/web/models/base_llm.js +64 -0
  213. package/dist/web/models/base_llm_connection.js +5 -0
  214. package/dist/web/models/gemini_llm_connection.js +120 -0
  215. package/dist/web/models/google_llm.js +574 -0
  216. package/dist/web/models/llm_request.js +50 -0
  217. package/dist/web/models/llm_response.js +41 -0
  218. package/dist/web/models/registry.js +91 -0
  219. package/dist/web/plugins/base_plugin.js +206 -0
  220. package/dist/web/plugins/logging_plugin.js +192 -0
  221. package/dist/web/plugins/plugin_manager.js +209 -0
  222. package/dist/web/plugins/security_plugin.js +119 -0
  223. package/dist/web/runner/in_memory_runner.js +28 -0
  224. package/dist/web/runner/runner.js +278 -0
  225. package/dist/web/sessions/base_session_service.js +41 -0
  226. package/dist/web/sessions/in_memory_session_service.js +154 -0
  227. package/dist/web/sessions/session.js +18 -0
  228. package/dist/web/sessions/state.js +87 -0
  229. package/dist/web/telemetry/google_cloud.js +54 -0
  230. package/dist/web/telemetry/setup.js +67 -0
  231. package/dist/web/telemetry/tracing.js +210 -0
  232. package/dist/web/tools/agent_tool.js +118 -0
  233. package/dist/web/tools/base_tool.js +77 -0
  234. package/dist/web/tools/base_toolset.js +46 -0
  235. package/dist/web/tools/forwarding_artifact_service.js +41 -0
  236. package/dist/web/tools/function_tool.js +71 -0
  237. package/dist/web/tools/google_search_tool.js +47 -0
  238. package/dist/web/tools/long_running_tool.js +50 -0
  239. package/dist/web/tools/mcp/mcp_session_manager.js +35 -0
  240. package/dist/web/tools/mcp/mcp_tool.js +35 -0
  241. package/dist/web/tools/mcp/mcp_toolset.js +31 -0
  242. package/dist/web/tools/tool_confirmation.js +19 -0
  243. package/dist/web/tools/tool_context.js +99 -0
  244. package/dist/web/utils/client_labels.js +26 -0
  245. package/dist/web/utils/deep_clone.js +14 -0
  246. package/dist/web/utils/env_aware_utils.js +49 -0
  247. package/dist/web/utils/gemini_schema_util.js +58 -0
  248. package/dist/web/utils/logger.js +89 -0
  249. package/dist/web/utils/model_name.js +41 -0
  250. package/dist/web/utils/simple_zod_to_json.js +174 -0
  251. package/dist/web/utils/variant_utils.js +24 -0
  252. package/dist/web/version.js +9 -0
  253. package/package.json +1 -1
@@ -0,0 +1,424 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 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 functions_exports = {};
26
+ __export(functions_exports, {
27
+ REQUEST_CONFIRMATION_FUNCTION_CALL_NAME: () => REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
28
+ REQUEST_EUC_FUNCTION_CALL_NAME: () => REQUEST_EUC_FUNCTION_CALL_NAME,
29
+ functionsExportedForTestingOnly: () => functionsExportedForTestingOnly,
30
+ generateAuthEvent: () => generateAuthEvent,
31
+ generateClientFunctionCallId: () => generateClientFunctionCallId,
32
+ generateRequestConfirmationEvent: () => generateRequestConfirmationEvent,
33
+ getLongRunningFunctionCalls: () => getLongRunningFunctionCalls,
34
+ handleFunctionCallList: () => handleFunctionCallList,
35
+ handleFunctionCallsAsync: () => handleFunctionCallsAsync,
36
+ mergeParallelFunctionResponseEvents: () => mergeParallelFunctionResponseEvents,
37
+ populateClientFunctionCallId: () => populateClientFunctionCallId,
38
+ removeClientFunctionCallId: () => removeClientFunctionCallId
39
+ });
40
+ module.exports = __toCommonJS(functions_exports);
41
+ var import_genai = require("@google/genai");
42
+ var import_event = require("../events/event.js");
43
+ var import_event_actions = require("../events/event_actions.js");
44
+ var import_tool_context = require("../tools/tool_context.js");
45
+ var import_env_aware_utils = require("../utils/env_aware_utils.js");
46
+ var import_logger = require("../utils/logger.js");
47
+ /**
48
+ * @license
49
+ * Copyright 2025 Google LLC
50
+ * SPDX-License-Identifier: Apache-2.0
51
+ */
52
+ const AF_FUNCTION_CALL_ID_PREFIX = "adk-";
53
+ const REQUEST_EUC_FUNCTION_CALL_NAME = "adk_request_credential";
54
+ const REQUEST_CONFIRMATION_FUNCTION_CALL_NAME = "adk_request_confirmation";
55
+ const functionsExportedForTestingOnly = {
56
+ handleFunctionCallList
57
+ };
58
+ function generateClientFunctionCallId() {
59
+ return `${AF_FUNCTION_CALL_ID_PREFIX}${(0, import_env_aware_utils.randomUUID)()}`;
60
+ }
61
+ function populateClientFunctionCallId(modelResponseEvent) {
62
+ const functionCalls = (0, import_event.getFunctionCalls)(modelResponseEvent);
63
+ if (!functionCalls) {
64
+ return;
65
+ }
66
+ for (const functionCall of functionCalls) {
67
+ if (!functionCall.id) {
68
+ functionCall.id = generateClientFunctionCallId();
69
+ }
70
+ }
71
+ }
72
+ function removeClientFunctionCallId(content) {
73
+ if (content && content.parts) {
74
+ for (const part of content.parts) {
75
+ if (part.functionCall && part.functionCall.id && part.functionCall.id.startsWith(AF_FUNCTION_CALL_ID_PREFIX)) {
76
+ part.functionCall.id = void 0;
77
+ }
78
+ if (part.functionResponse && part.functionResponse.id && part.functionResponse.id.startsWith(AF_FUNCTION_CALL_ID_PREFIX)) {
79
+ part.functionResponse.id = void 0;
80
+ }
81
+ }
82
+ }
83
+ }
84
+ function resolveToolName(name, toolsDict) {
85
+ if (name in toolsDict) {
86
+ return name;
87
+ }
88
+ const colonIndex = name.indexOf(":");
89
+ if (colonIndex > 0) {
90
+ const baseName = name.substring(0, colonIndex);
91
+ if (baseName in toolsDict) {
92
+ import_logger.logger.info(
93
+ `Resolved Gemini 3 function name "${name}" to tool "${baseName}"`
94
+ );
95
+ return baseName;
96
+ }
97
+ }
98
+ return void 0;
99
+ }
100
+ function getLongRunningFunctionCalls(functionCalls, toolsDict) {
101
+ const longRunningToolIds = /* @__PURE__ */ new Set();
102
+ for (const functionCall of functionCalls) {
103
+ if (!functionCall.name || !functionCall.id) continue;
104
+ const resolvedName = resolveToolName(functionCall.name, toolsDict);
105
+ if (resolvedName && toolsDict[resolvedName].isLongRunning) {
106
+ longRunningToolIds.add(functionCall.id);
107
+ }
108
+ }
109
+ return longRunningToolIds;
110
+ }
111
+ function generateAuthEvent(invocationContext, functionResponseEvent) {
112
+ var _a;
113
+ if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedAuthConfigs)) {
114
+ return void 0;
115
+ }
116
+ const parts = [];
117
+ const longRunningToolIds = /* @__PURE__ */ new Set();
118
+ for (const [functionCallId, authConfig] of Object.entries(
119
+ functionResponseEvent.actions.requestedAuthConfigs
120
+ )) {
121
+ const requestEucFunctionCall = {
122
+ name: REQUEST_EUC_FUNCTION_CALL_NAME,
123
+ args: {
124
+ "function_call_id": functionCallId,
125
+ "auth_config": authConfig
126
+ },
127
+ id: generateClientFunctionCallId()
128
+ };
129
+ longRunningToolIds.add(requestEucFunctionCall.id);
130
+ parts.push({ functionCall: requestEucFunctionCall });
131
+ }
132
+ return (0, import_event.createEvent)({
133
+ invocationId: invocationContext.invocationId,
134
+ author: invocationContext.agent.name,
135
+ branch: invocationContext.branch,
136
+ content: {
137
+ parts,
138
+ role: functionResponseEvent.content.role
139
+ },
140
+ longRunningToolIds: Array.from(longRunningToolIds)
141
+ });
142
+ }
143
+ function generateRequestConfirmationEvent({
144
+ invocationContext,
145
+ functionCallEvent,
146
+ functionResponseEvent
147
+ }) {
148
+ var _a, _b;
149
+ if (!((_a = functionResponseEvent.actions) == null ? void 0 : _a.requestedToolConfirmations)) {
150
+ return;
151
+ }
152
+ const parts = [];
153
+ const longRunningToolIds = /* @__PURE__ */ new Set();
154
+ const functionCalls = (0, import_event.getFunctionCalls)(functionCallEvent);
155
+ for (const [functionCallId, toolConfirmation] of Object.entries(
156
+ functionResponseEvent.actions.requestedToolConfirmations
157
+ )) {
158
+ const originalFunctionCall = (_b = functionCalls.find((call) => call.id === functionCallId)) != null ? _b : void 0;
159
+ if (!originalFunctionCall) {
160
+ continue;
161
+ }
162
+ const requestConfirmationFunctionCall = {
163
+ name: REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
164
+ args: {
165
+ "originalFunctionCall": originalFunctionCall,
166
+ "toolConfirmation": toolConfirmation
167
+ },
168
+ id: generateClientFunctionCallId()
169
+ };
170
+ longRunningToolIds.add(requestConfirmationFunctionCall.id);
171
+ parts.push({ functionCall: requestConfirmationFunctionCall });
172
+ }
173
+ return (0, import_event.createEvent)({
174
+ invocationId: invocationContext.invocationId,
175
+ author: invocationContext.agent.name,
176
+ branch: invocationContext.branch,
177
+ content: {
178
+ parts,
179
+ role: functionResponseEvent.content.role
180
+ },
181
+ longRunningToolIds: Array.from(longRunningToolIds)
182
+ });
183
+ }
184
+ async function callToolAsync(tool, args, toolContext) {
185
+ import_logger.logger.debug(`callToolAsync ${tool.name}`);
186
+ return await tool.runAsync({ args, toolContext });
187
+ }
188
+ async function handleFunctionCallsAsync({
189
+ invocationContext,
190
+ functionCallEvent,
191
+ toolsDict,
192
+ beforeToolCallbacks,
193
+ afterToolCallbacks,
194
+ filters,
195
+ toolConfirmationDict
196
+ }) {
197
+ const functionCalls = (0, import_event.getFunctionCalls)(functionCallEvent);
198
+ return await handleFunctionCallList({
199
+ invocationContext,
200
+ functionCalls,
201
+ toolsDict,
202
+ beforeToolCallbacks,
203
+ afterToolCallbacks,
204
+ filters,
205
+ toolConfirmationDict
206
+ });
207
+ }
208
+ async function handleFunctionCallList({
209
+ invocationContext,
210
+ functionCalls,
211
+ toolsDict,
212
+ beforeToolCallbacks,
213
+ afterToolCallbacks,
214
+ filters,
215
+ toolConfirmationDict
216
+ }) {
217
+ var _a, _b, _c;
218
+ const functionResponseEvents = [];
219
+ const filteredFunctionCalls = functionCalls.filter((functionCall) => {
220
+ return !filters || functionCall.id && filters.has(functionCall.id);
221
+ });
222
+ for (const functionCall of filteredFunctionCalls) {
223
+ let toolConfirmation = void 0;
224
+ if (toolConfirmationDict && functionCall.id) {
225
+ toolConfirmation = toolConfirmationDict[functionCall.id];
226
+ }
227
+ const toolAndContext = getToolAndContext(
228
+ {
229
+ invocationContext,
230
+ functionCall,
231
+ toolsDict,
232
+ toolConfirmation
233
+ }
234
+ );
235
+ if (!toolAndContext) {
236
+ import_logger.logger.warn(
237
+ `Function ${functionCall.name} is not found in the toolsDict. Returning error response to LLM.`
238
+ );
239
+ const errorResponseEvent = (0, import_event.createEvent)({
240
+ invocationId: invocationContext.invocationId,
241
+ author: invocationContext.agent.name,
242
+ content: (0, import_genai.createUserContent)({
243
+ functionResponse: {
244
+ id: functionCall.id || void 0,
245
+ name: (_a = functionCall.name) != null ? _a : "unknown",
246
+ response: {
247
+ error: `Function ${functionCall.name} is not available. If this tool belongs to a lazy-loaded group, call loadToolGroup first in a SEPARATE step, then retry.`
248
+ }
249
+ }
250
+ }),
251
+ branch: invocationContext.branch
252
+ });
253
+ functionResponseEvents.push(errorResponseEvent);
254
+ continue;
255
+ }
256
+ const { tool, toolContext } = toolAndContext;
257
+ import_logger.logger.debug(`execute_tool ${tool.name}`);
258
+ const functionArgs = (_b = functionCall.args) != null ? _b : {};
259
+ let functionResponse = null;
260
+ let functionResponseError;
261
+ functionResponse = await invocationContext.pluginManager.runBeforeToolCallback({
262
+ tool,
263
+ toolArgs: functionArgs,
264
+ toolContext
265
+ });
266
+ if (functionResponse == null) {
267
+ for (const callback of beforeToolCallbacks) {
268
+ functionResponse = await callback({
269
+ tool,
270
+ args: functionArgs,
271
+ context: toolContext
272
+ });
273
+ if (functionResponse) {
274
+ break;
275
+ }
276
+ }
277
+ }
278
+ if (functionResponse == null) {
279
+ try {
280
+ functionResponse = await callToolAsync(
281
+ tool,
282
+ functionArgs,
283
+ toolContext
284
+ );
285
+ } catch (e) {
286
+ if (e instanceof Error) {
287
+ const onToolErrorResponse = await invocationContext.pluginManager.runOnToolErrorCallback(
288
+ {
289
+ tool,
290
+ toolArgs: functionArgs,
291
+ toolContext,
292
+ error: e
293
+ }
294
+ );
295
+ if (onToolErrorResponse) {
296
+ functionResponse = onToolErrorResponse;
297
+ } else {
298
+ functionResponseError = e.message;
299
+ }
300
+ } else {
301
+ functionResponseError = e;
302
+ }
303
+ }
304
+ }
305
+ let alteredFunctionResponse = await invocationContext.pluginManager.runAfterToolCallback({
306
+ tool,
307
+ toolArgs: functionArgs,
308
+ toolContext,
309
+ result: functionResponse
310
+ });
311
+ if (alteredFunctionResponse == null) {
312
+ for (const callback of afterToolCallbacks) {
313
+ alteredFunctionResponse = await callback({
314
+ tool,
315
+ args: functionArgs,
316
+ context: toolContext,
317
+ response: functionResponse
318
+ });
319
+ if (alteredFunctionResponse) {
320
+ break;
321
+ }
322
+ }
323
+ }
324
+ if (alteredFunctionResponse != null) {
325
+ functionResponse = alteredFunctionResponse;
326
+ }
327
+ if (tool.isLongRunning && !functionResponse) {
328
+ continue;
329
+ }
330
+ if (functionResponseError) {
331
+ functionResponse = { error: functionResponseError };
332
+ } else if (typeof functionResponse !== "object" || functionResponse == null) {
333
+ functionResponse = { result: functionResponse };
334
+ }
335
+ const functionResponseEvent = (0, import_event.createEvent)({
336
+ invocationId: invocationContext.invocationId,
337
+ author: invocationContext.agent.name,
338
+ content: (0, import_genai.createUserContent)({
339
+ functionResponse: {
340
+ id: toolContext.functionCallId,
341
+ name: (_c = functionCall.name) != null ? _c : tool.name,
342
+ response: functionResponse
343
+ }
344
+ }),
345
+ actions: toolContext.actions,
346
+ branch: invocationContext.branch
347
+ });
348
+ import_logger.logger.debug("traceToolCall", {
349
+ tool: tool.name,
350
+ args: functionArgs,
351
+ functionResponseEvent: functionResponseEvent.id
352
+ });
353
+ functionResponseEvents.push(functionResponseEvent);
354
+ }
355
+ if (!functionResponseEvents.length) {
356
+ return null;
357
+ }
358
+ const mergedEvent = mergeParallelFunctionResponseEvents(functionResponseEvents);
359
+ if (functionResponseEvents.length > 1) {
360
+ import_logger.logger.debug("execute_tool (merged)");
361
+ import_logger.logger.debug("traceMergedToolCalls", {
362
+ responseEventId: mergedEvent.id,
363
+ functionResponseEvent: mergedEvent.id
364
+ });
365
+ }
366
+ return mergedEvent;
367
+ }
368
+ function getToolAndContext({
369
+ invocationContext,
370
+ functionCall,
371
+ toolsDict,
372
+ toolConfirmation
373
+ }) {
374
+ const resolvedName = functionCall.name ? resolveToolName(functionCall.name, toolsDict) : void 0;
375
+ if (!resolvedName) {
376
+ return null;
377
+ }
378
+ const toolContext = new import_tool_context.ToolContext({
379
+ invocationContext,
380
+ functionCallId: functionCall.id || void 0,
381
+ toolConfirmation
382
+ });
383
+ const tool = toolsDict[resolvedName];
384
+ return { tool, toolContext };
385
+ }
386
+ function mergeParallelFunctionResponseEvents(functionResponseEvents) {
387
+ if (!functionResponseEvents.length) {
388
+ throw new Error("No function response events provided.");
389
+ }
390
+ if (functionResponseEvents.length === 1) {
391
+ return functionResponseEvents[0];
392
+ }
393
+ const mergedParts = [];
394
+ for (const event of functionResponseEvents) {
395
+ if (event.content && event.content.parts) {
396
+ mergedParts.push(...event.content.parts);
397
+ }
398
+ }
399
+ const baseEvent = functionResponseEvents[0];
400
+ const actionsList = functionResponseEvents.map((event) => event.actions || {});
401
+ const mergedActions = (0, import_event_actions.mergeEventActions)(actionsList);
402
+ return (0, import_event.createEvent)({
403
+ author: baseEvent.author,
404
+ branch: baseEvent.branch,
405
+ content: { role: "user", parts: mergedParts },
406
+ actions: mergedActions,
407
+ timestamp: baseEvent.timestamp
408
+ });
409
+ }
410
+ // Annotate the CommonJS export names for ESM import in node:
411
+ 0 && (module.exports = {
412
+ REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
413
+ REQUEST_EUC_FUNCTION_CALL_NAME,
414
+ functionsExportedForTestingOnly,
415
+ generateAuthEvent,
416
+ generateClientFunctionCallId,
417
+ generateRequestConfirmationEvent,
418
+ getLongRunningFunctionCalls,
419
+ handleFunctionCallList,
420
+ handleFunctionCallsAsync,
421
+ mergeParallelFunctionResponseEvents,
422
+ populateClientFunctionCallId,
423
+ removeClientFunctionCallId
424
+ });
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 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 instructions_exports = {};
26
+ __export(instructions_exports, {
27
+ injectSessionState: () => injectSessionState
28
+ });
29
+ module.exports = __toCommonJS(instructions_exports);
30
+ var import_state = require("../sessions/state.js");
31
+ /**
32
+ * @license
33
+ * Copyright 2025 Google LLC
34
+ * SPDX-License-Identifier: Apache-2.0
35
+ */
36
+ async function injectSessionState(template, readonlyContext) {
37
+ const invocationContext = readonlyContext.invocationContext;
38
+ async function replaceMatchedKeyWithItsValue(match) {
39
+ let key = match[0].replace(/^\{+/, "").replace(/\}+$/, "").trim();
40
+ const isOptional = key.endsWith("?");
41
+ if (isOptional) {
42
+ key = key.slice(0, -1);
43
+ }
44
+ if (key.startsWith("artifact.")) {
45
+ const fileName = key.substring("artifact.".length);
46
+ if (invocationContext.artifactService === void 0) {
47
+ throw new Error("Artifact service is not initialized.");
48
+ }
49
+ const artifact = await invocationContext.artifactService.loadArtifact({
50
+ appName: invocationContext.session.appName,
51
+ userId: invocationContext.session.userId,
52
+ sessionId: invocationContext.session.id,
53
+ filename: fileName
54
+ });
55
+ if (!artifact) {
56
+ throw new Error(`Artifact ${fileName} not found.`);
57
+ }
58
+ return String(artifact);
59
+ }
60
+ if (!isValidStateName(key)) {
61
+ return match[0];
62
+ }
63
+ if (key in invocationContext.session.state) {
64
+ return String(invocationContext.session.state[key]);
65
+ }
66
+ if (isOptional) {
67
+ return "";
68
+ }
69
+ throw new Error(`Context variable not found: \`${key}\`.`);
70
+ }
71
+ const pattern = /\{+[^{}]*}+/g;
72
+ const result = [];
73
+ let lastEnd = 0;
74
+ const matches = template.matchAll(pattern);
75
+ for (const match of matches) {
76
+ result.push(template.slice(lastEnd, match.index));
77
+ const replacement = await replaceMatchedKeyWithItsValue(match);
78
+ result.push(replacement);
79
+ lastEnd = match.index + match[0].length;
80
+ }
81
+ result.push(template.slice(lastEnd));
82
+ return result.join("");
83
+ }
84
+ const isIdentifierPattern = /* @__PURE__ */ (() => {
85
+ return /^[a-zA-Z_][a-zA-Z0-9_]*$/;
86
+ })();
87
+ function isIdentifier(s) {
88
+ if (s === "" || s === void 0) {
89
+ return false;
90
+ }
91
+ return isIdentifierPattern.test(s);
92
+ }
93
+ const VALID_PREFIXES = [import_state.State.APP_PREFIX, import_state.State.USER_PREFIX, import_state.State.TEMP_PREFIX];
94
+ function isValidStateName(variableName) {
95
+ const parts = variableName.split(":");
96
+ if (parts.length === 0 || parts.length > 2) {
97
+ return false;
98
+ }
99
+ if (parts.length === 1) {
100
+ return isIdentifier(variableName);
101
+ }
102
+ if (VALID_PREFIXES.includes(parts[0] + ":")) {
103
+ return isIdentifier(parts[1]);
104
+ }
105
+ return false;
106
+ }
107
+ // Annotate the CommonJS export names for ESM import in node:
108
+ 0 && (module.exports = {
109
+ injectSessionState
110
+ });
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 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 invocation_context_exports = {};
26
+ __export(invocation_context_exports, {
27
+ InvocationContext: () => InvocationContext,
28
+ newInvocationContextId: () => newInvocationContextId
29
+ });
30
+ module.exports = __toCommonJS(invocation_context_exports);
31
+ var import_env_aware_utils = require("../utils/env_aware_utils.js");
32
+ /**
33
+ * @license
34
+ * Copyright 2025 Google LLC
35
+ * SPDX-License-Identifier: Apache-2.0
36
+ */
37
+ class InvocationCostManager {
38
+ constructor() {
39
+ this.numberOfLlmCalls = 0;
40
+ }
41
+ /**
42
+ * Increments the number of llm calls and enforces the limit.
43
+ *
44
+ * @param runConfig the run config of the invocation.
45
+ * @throws If number of llm calls made exceed the set threshold.
46
+ */
47
+ incrementAndEnforceLlmCallsLimit(runConfig) {
48
+ this.numberOfLlmCalls++;
49
+ if (runConfig && runConfig.maxLlmCalls > 0 && this.numberOfLlmCalls > runConfig.maxLlmCalls) {
50
+ throw new Error(`Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`);
51
+ }
52
+ }
53
+ }
54
+ class InvocationContext {
55
+ /**
56
+ * @param params The parameters for creating an invocation context.
57
+ */
58
+ constructor(params) {
59
+ /**
60
+ * A container to keep track of different kinds of costs incurred as a part of
61
+ * this invocation.
62
+ */
63
+ this.invocationCostManager = new InvocationCostManager();
64
+ this.artifactService = params.artifactService;
65
+ this.sessionService = params.sessionService;
66
+ this.memoryService = params.memoryService;
67
+ this.invocationId = params.invocationId;
68
+ this.branch = params.branch;
69
+ this.agent = params.agent;
70
+ this.userContent = params.userContent;
71
+ this.session = params.session;
72
+ this.endInvocation = params.endInvocation || false;
73
+ this.transcriptionCache = params.transcriptionCache;
74
+ this.runConfig = params.runConfig;
75
+ this.liveRequestQueue = params.liveRequestQueue;
76
+ this.activeStreamingTools = params.activeStreamingTools;
77
+ this.pluginManager = params.pluginManager;
78
+ }
79
+ /**
80
+ * The app name of the current session.
81
+ */
82
+ get appName() {
83
+ return this.session.appName;
84
+ }
85
+ /**
86
+ * The user ID of the current session.
87
+ */
88
+ get userId() {
89
+ return this.session.userId;
90
+ }
91
+ /**
92
+ * Tracks number of llm calls made.
93
+ *
94
+ * @throws If number of llm calls made exceed the set threshold.
95
+ */
96
+ incrementLlmCallCount() {
97
+ this.invocationCostManager.incrementAndEnforceLlmCallsLimit(this.runConfig);
98
+ }
99
+ }
100
+ function newInvocationContextId() {
101
+ return `e-${(0, import_env_aware_utils.randomUUID)()}`;
102
+ }
103
+ // Annotate the CommonJS export names for ESM import in node:
104
+ 0 && (module.exports = {
105
+ InvocationContext,
106
+ newInvocationContextId
107
+ });