@google/adk 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +4 -1
  2. package/dist/cjs/a2a/agent_card.js +102 -26
  3. package/dist/cjs/a2a/agent_to_a2a.js +1 -1
  4. package/dist/cjs/agents/functions.js +199 -25
  5. package/dist/cjs/agents/instructions.js +4 -1
  6. package/dist/cjs/agents/invocation_context.js +26 -4
  7. package/dist/cjs/agents/langgraph_agent.js +152 -0
  8. package/dist/cjs/agents/llm_agent.js +175 -101
  9. package/dist/cjs/agents/processors/code_execution_request_processor.js +10 -6
  10. package/dist/cjs/agents/remote_agent.js +187 -0
  11. package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
  12. package/dist/cjs/auth/auth_handler.js +37 -5
  13. package/dist/cjs/auth/auth_schemes.js +9 -0
  14. package/dist/cjs/cli/cli_eval.js +532 -0
  15. package/dist/cjs/cli/utils/envs.js +116 -0
  16. package/dist/cjs/cli/utils/evals.js +137 -0
  17. package/dist/cjs/cli/utils/logs.js +150 -0
  18. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  19. package/dist/cjs/code_executors/code_execution_utils.js +48 -16
  20. package/dist/cjs/code_executors/code_executor_context.js +6 -2
  21. package/dist/cjs/common.js +72 -0
  22. package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
  23. package/dist/cjs/context/token_based_context_compactor.js +2 -1
  24. package/dist/cjs/events/event.js +4 -2
  25. package/dist/cjs/examples/example_util.js +23 -2
  26. package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
  27. package/dist/cjs/index.js +97 -1
  28. package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
  29. package/dist/cjs/models/gemini_llm_connection.js +16 -8
  30. package/dist/cjs/models/google_llm.js +13 -16
  31. package/dist/cjs/models/llm_response.js +9 -1
  32. package/dist/cjs/models/registry.js +1 -1
  33. package/dist/cjs/models/routed_llm.js +9 -8
  34. package/dist/cjs/planners/plan_re_act_planner.js +1 -1
  35. package/dist/cjs/runner/in_memory_runner.js +6 -11
  36. package/dist/cjs/runner/runner.js +105 -33
  37. package/dist/cjs/sessions/db/operations.js +1 -1
  38. package/dist/cjs/sessions/in_memory_session_service.js +3 -1
  39. package/dist/cjs/sessions/state.js +8 -4
  40. package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
  41. package/dist/cjs/telemetry/tracing.js +97 -66
  42. package/dist/cjs/tools/agent_tool.js +44 -0
  43. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +142 -0
  44. package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
  45. package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
  46. package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
  47. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +185 -0
  48. package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
  49. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +603 -0
  50. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +219 -0
  51. package/dist/cjs/tools/crewai_tool.js +132 -0
  52. package/dist/cjs/tools/example_tool.js +10 -0
  53. package/dist/cjs/tools/function_tool.js +319 -0
  54. package/dist/cjs/tools/google_api_tool/google_api_tool.js +97 -0
  55. package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +226 -0
  56. package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +58 -0
  57. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +440 -0
  58. package/dist/cjs/tools/google_api_tool/index.js +64 -0
  59. package/dist/cjs/tools/langchain_tool.js +172 -0
  60. package/dist/cjs/tools/mcp/index.js +12 -0
  61. package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
  62. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
  63. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
  64. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
  65. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  66. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +14 -2
  67. package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
  68. package/dist/cjs/tools/toolbox_tool.js +108 -0
  69. package/dist/cjs/utils/env_aware_utils.js +6 -8
  70. package/dist/cjs/utils/error_utils.js +11 -11
  71. package/dist/cjs/utils/file_extension_utils.js +11 -0
  72. package/dist/cjs/utils/file_utils.js +2 -24
  73. package/dist/cjs/utils/gemini_schema_util.js +4 -1
  74. package/dist/cjs/utils/json_utils.js +49 -0
  75. package/dist/cjs/utils/live_connection_utils.js +4 -5
  76. package/dist/cjs/utils/logger_node.js +7 -1
  77. package/dist/cjs/utils/object_notation_utils.js +6 -3
  78. package/dist/cjs/utils/streaming_utils.js +12 -12
  79. package/dist/cjs/version.js +1 -1
  80. package/dist/esm/a2a/a2a_remote_agent.js +4 -1
  81. package/dist/esm/a2a/agent_card.js +103 -27
  82. package/dist/esm/a2a/agent_to_a2a.js +5 -2
  83. package/dist/esm/agents/functions.js +198 -25
  84. package/dist/esm/agents/instructions.js +4 -1
  85. package/dist/esm/agents/invocation_context.js +24 -4
  86. package/dist/esm/agents/langgraph_agent.js +123 -0
  87. package/dist/esm/agents/llm_agent.js +185 -104
  88. package/dist/esm/agents/processors/code_execution_request_processor.js +13 -8
  89. package/dist/esm/agents/remote_agent.js +164 -0
  90. package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
  91. package/dist/esm/auth/auth_handler.js +37 -5
  92. package/dist/esm/auth/auth_schemes.js +8 -0
  93. package/dist/esm/cli/cli_eval.js +510 -0
  94. package/dist/esm/cli/utils/envs.js +78 -0
  95. package/dist/esm/cli/utils/evals.js +109 -0
  96. package/dist/esm/cli/utils/logs.js +111 -0
  97. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  98. package/dist/esm/code_executors/code_execution_utils.js +46 -16
  99. package/dist/esm/code_executors/code_executor_context.js +5 -2
  100. package/dist/esm/common.js +67 -3
  101. package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
  102. package/dist/esm/context/token_based_context_compactor.js +2 -1
  103. package/dist/esm/events/event.js +4 -2
  104. package/dist/esm/examples/example_util.js +21 -1
  105. package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
  106. package/dist/esm/index.js +99 -1
  107. package/dist/esm/integrations/agent_registry/helpers.js +1 -1
  108. package/dist/esm/models/gemini_llm_connection.js +16 -8
  109. package/dist/esm/models/google_llm.js +14 -17
  110. package/dist/esm/models/llm_response.js +9 -1
  111. package/dist/esm/models/registry.js +1 -1
  112. package/dist/esm/models/routed_llm.js +9 -8
  113. package/dist/esm/planners/plan_re_act_planner.js +1 -1
  114. package/dist/esm/runner/in_memory_runner.js +6 -11
  115. package/dist/esm/runner/runner.js +105 -33
  116. package/dist/esm/sessions/db/operations.js +1 -1
  117. package/dist/esm/sessions/in_memory_session_service.js +3 -1
  118. package/dist/esm/sessions/state.js +8 -4
  119. package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
  120. package/dist/esm/telemetry/tracing.js +97 -66
  121. package/dist/esm/tools/agent_tool.js +44 -0
  122. package/dist/esm/tools/apihub_tool/apihub_toolset.js +106 -0
  123. package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
  124. package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
  125. package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
  126. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +163 -0
  127. package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
  128. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +561 -0
  129. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +215 -0
  130. package/dist/esm/tools/crewai_tool.js +107 -0
  131. package/dist/esm/tools/example_tool.js +13 -1
  132. package/dist/esm/tools/function_tool.js +316 -0
  133. package/dist/esm/tools/google_api_tool/google_api_tool.js +70 -0
  134. package/dist/esm/tools/google_api_tool/google_api_tool_set.js +188 -0
  135. package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +24 -0
  136. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +393 -0
  137. package/dist/esm/tools/google_api_tool/index.js +33 -0
  138. package/dist/esm/tools/langchain_tool.js +148 -0
  139. package/dist/esm/tools/mcp/index.js +6 -0
  140. package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
  141. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
  142. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
  143. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
  144. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  145. package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +15 -2
  146. package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
  147. package/dist/esm/tools/toolbox_tool.js +80 -0
  148. package/dist/esm/utils/env_aware_utils.js +6 -8
  149. package/dist/esm/utils/error_utils.js +9 -10
  150. package/dist/esm/utils/file_extension_utils.js +11 -0
  151. package/dist/esm/utils/file_utils.js +2 -23
  152. package/dist/esm/utils/gemini_schema_util.js +4 -1
  153. package/dist/esm/utils/json_utils.js +21 -0
  154. package/dist/esm/utils/live_connection_utils.js +4 -5
  155. package/dist/esm/utils/logger_node.js +7 -1
  156. package/dist/esm/utils/object_notation_utils.js +4 -2
  157. package/dist/esm/utils/streaming_utils.js +11 -11
  158. package/dist/esm/version.js +1 -1
  159. package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
  160. package/dist/types/a2a/agent_card.d.ts +44 -1
  161. package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
  162. package/dist/types/a2a/index.d.ts +1 -0
  163. package/dist/types/agents/functions.d.ts +33 -1
  164. package/dist/types/agents/invocation_context.d.ts +20 -1
  165. package/dist/types/agents/langgraph_agent.d.ts +153 -0
  166. package/dist/types/agents/remote_agent.d.ts +68 -0
  167. package/dist/types/auth/auth_handler.d.ts +28 -1
  168. package/dist/types/auth/auth_schemes.d.ts +13 -0
  169. package/dist/types/cli/cli_eval.d.ts +173 -0
  170. package/dist/types/cli/utils/envs.d.ts +23 -0
  171. package/dist/types/cli/utils/evals.d.ts +47 -0
  172. package/dist/types/cli/utils/logs.d.ts +38 -0
  173. package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
  174. package/dist/types/code_executors/code_executor_context.d.ts +1 -0
  175. package/dist/types/common.d.ts +27 -4
  176. package/dist/types/events/event.d.ts +4 -0
  177. package/dist/types/examples/example_util.d.ts +17 -0
  178. package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
  179. package/dist/types/index.d.ts +16 -1
  180. package/dist/types/models/gemini_llm_connection.d.ts +6 -7
  181. package/dist/types/models/routed_llm.d.ts +1 -1
  182. package/dist/types/runner/in_memory_runner.d.ts +2 -1
  183. package/dist/types/runner/runner.d.ts +34 -0
  184. package/dist/types/sessions/state.d.ts +5 -1
  185. package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
  186. package/dist/types/skills/skill.d.ts +1 -1
  187. package/dist/types/telemetry/tracing.d.ts +4 -2
  188. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +122 -0
  189. package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
  190. package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
  191. package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
  192. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +86 -0
  193. package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
  194. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +215 -0
  195. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
  196. package/dist/types/tools/crewai_tool.d.ts +85 -0
  197. package/dist/types/tools/example_tool.d.ts +10 -0
  198. package/dist/types/tools/function_tool.d.ts +32 -0
  199. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +30 -0
  200. package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +78 -0
  201. package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +33 -0
  202. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +164 -0
  203. package/dist/types/tools/google_api_tool/index.d.ts +11 -0
  204. package/dist/types/tools/langchain_tool.d.ts +103 -0
  205. package/dist/types/tools/mcp/index.d.ts +3 -0
  206. package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
  207. package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
  208. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
  209. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
  210. package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
  211. package/dist/types/tools/retrieval/base_retrieval_tool.d.ts +15 -0
  212. package/dist/types/tools/toolbox_tool.d.ts +73 -0
  213. package/dist/types/utils/env_aware_utils.d.ts +18 -2
  214. package/dist/types/utils/error_utils.d.ts +7 -0
  215. package/dist/types/utils/file_utils.d.ts +6 -1
  216. package/dist/types/utils/gemini_schema_util.d.ts +1 -2
  217. package/dist/types/utils/json_utils.d.ts +11 -0
  218. package/dist/types/utils/object_notation_utils.d.ts +7 -0
  219. package/dist/types/utils/streaming_utils.d.ts +11 -4
  220. package/dist/types/version.d.ts +1 -1
  221. package/dist/web/index_web.js +102 -103
  222. package/dist/web/index_web.js.map +4 -4
  223. package/package.json +8 -3
  224. package/dist/cjs/models/gemini_continuation.js +0 -232
  225. package/dist/esm/models/gemini_continuation.js +0 -205
  226. package/dist/types/models/gemini_continuation.d.ts +0 -59
@@ -0,0 +1,137 @@
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var evals_exports = {};
27
+ __export(evals_exports, {
28
+ convertSessionToEvalFormat: () => convertSessionToEvalFormat,
29
+ createEmptyState: () => createEmptyState
30
+ });
31
+ module.exports = __toCommonJS(evals_exports);
32
+ var import_llm_agent = require("../../agents/llm_agent.js");
33
+ /**
34
+ * @license
35
+ * Copyright 2026 Google LLC
36
+ * SPDX-License-Identifier: Apache-2.0
37
+ */
38
+ function convertSessionToEvalFormat(session) {
39
+ var _a, _b, _c;
40
+ const events = session && session.events ? session.events : [];
41
+ const evalCases = [];
42
+ let i = 0;
43
+ while (i < events.length) {
44
+ const event = events[i];
45
+ if (event.author === "user") {
46
+ let userQuery = "";
47
+ if (event.content && event.content.parts) {
48
+ for (const part of event.content.parts) {
49
+ if (part.text) {
50
+ userQuery = part.text;
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ const expectedToolUse = [];
56
+ const expectedIntermediateAgentResponses = [];
57
+ let finalResponse = "";
58
+ let j = i + 1;
59
+ while (j < events.length) {
60
+ const subsequentEvent = events[j];
61
+ if (subsequentEvent.author === "user") {
62
+ break;
63
+ }
64
+ if (subsequentEvent.content && subsequentEvent.content.parts) {
65
+ let hasToolAction = false;
66
+ for (const part of subsequentEvent.content.parts) {
67
+ if (part.functionCall) {
68
+ expectedToolUse.push({
69
+ tool_name: (_a = part.functionCall.name) != null ? _a : "",
70
+ tool_input: (_b = part.functionCall.args) != null ? _b : {}
71
+ });
72
+ hasToolAction = true;
73
+ } else if (part.functionResponse) {
74
+ hasToolAction = true;
75
+ }
76
+ }
77
+ if (!hasToolAction) {
78
+ expectedIntermediateAgentResponses.push([
79
+ (_c = subsequentEvent.author) != null ? _c : "",
80
+ subsequentEvent.content.parts
81
+ ]);
82
+ }
83
+ }
84
+ j += 1;
85
+ }
86
+ if (expectedIntermediateAgentResponses.length > 0) {
87
+ const lastResponse = expectedIntermediateAgentResponses.pop();
88
+ if (lastResponse) {
89
+ const [, lastParts] = lastResponse;
90
+ finalResponse = lastParts.filter((part) => Boolean(part.text)).map((part) => {
91
+ var _a2;
92
+ return (_a2 = part.text) != null ? _a2 : "";
93
+ }).join("");
94
+ }
95
+ }
96
+ evalCases.push({
97
+ query: userQuery,
98
+ expected_tool_use: expectedToolUse,
99
+ expected_intermediate_agent_responses: expectedIntermediateAgentResponses,
100
+ reference: finalResponse
101
+ });
102
+ i = j;
103
+ } else {
104
+ i += 1;
105
+ }
106
+ }
107
+ return evalCases;
108
+ }
109
+ __name(convertSessionToEvalFormat, "convertSessionToEvalFormat");
110
+ function populateEmptyState(agent, allState) {
111
+ for (const subAgent of agent.subAgents) {
112
+ populateEmptyState(subAgent, allState);
113
+ }
114
+ if ((0, import_llm_agent.isLlmAgent)(agent) && agent.instruction && typeof agent.instruction === "string") {
115
+ const matches = agent.instruction.matchAll(/\{([\w]+)\}/g);
116
+ for (const match of matches) {
117
+ allState[match[1]] = "";
118
+ }
119
+ }
120
+ }
121
+ __name(populateEmptyState, "populateEmptyState");
122
+ function createEmptyState(agent, initializedStates) {
123
+ const subAgentsState = {};
124
+ populateEmptyState(agent, subAgentsState);
125
+ if (initializedStates) {
126
+ for (const [k, v] of Object.entries(initializedStates)) {
127
+ subAgentsState[k] = v;
128
+ }
129
+ }
130
+ return subAgentsState;
131
+ }
132
+ __name(createEmptyState, "createEmptyState");
133
+ // Annotate the CommonJS export names for ESM import in node:
134
+ 0 && (module.exports = {
135
+ convertSessionToEvalFormat,
136
+ createEmptyState
137
+ });
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __create = Object.create;
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __getProtoOf = Object.getPrototypeOf;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
+ var __export = (target, all) => {
16
+ for (var name in all)
17
+ __defProp(target, name, { get: all[name], enumerable: true });
18
+ };
19
+ var __copyProps = (to, from, except, desc) => {
20
+ if (from && typeof from === "object" || typeof from === "function") {
21
+ for (let key of __getOwnPropNames(from))
22
+ if (!__hasOwnProp.call(to, key) && key !== except)
23
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
24
+ }
25
+ return to;
26
+ };
27
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
28
+ // If the importer is in node compatibility mode or this is not an ESM
29
+ // file that has been converted to a CommonJS file using a Babel-
30
+ // compatible transform (i.e. "__esModule" has not been set), then set
31
+ // "default" to the CommonJS "module.exports" for node compatibility.
32
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
33
+ mod
34
+ ));
35
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
+ var logs_exports = {};
37
+ __export(logs_exports, {
38
+ LOGGING_FORMAT: () => LOGGING_FORMAT,
39
+ logToStderr: () => logToStderr,
40
+ logToTmpFolder: () => logToTmpFolder
41
+ });
42
+ module.exports = __toCommonJS(logs_exports);
43
+ var fs = __toESM(require("node:fs"), 1);
44
+ var os = __toESM(require("node:os"), 1);
45
+ var path = __toESM(require("node:path"), 1);
46
+ var util = __toESM(require("node:util"), 1);
47
+ var import_logger = require("../../utils/logger.js");
48
+ /**
49
+ * @license
50
+ * Copyright 2026 Google LLC
51
+ * SPDX-License-Identifier: Apache-2.0
52
+ */
53
+ const LOGGING_FORMAT = "%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s";
54
+ const LOG_LEVEL_NAMES = {
55
+ [import_logger.LogLevel.DEBUG]: "DEBUG",
56
+ [import_logger.LogLevel.INFO]: "INFO",
57
+ [import_logger.LogLevel.WARN]: "WARNING",
58
+ [import_logger.LogLevel.ERROR]: "ERROR"
59
+ };
60
+ function formatDateTimestamp(date) {
61
+ const pad = /* @__PURE__ */ __name((n) => String(n).padStart(2, "0"), "pad");
62
+ return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}_${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`;
63
+ }
64
+ __name(formatDateTimestamp, "formatDateTimestamp");
65
+ function formatLogLine(level, messages) {
66
+ var _a;
67
+ const iso = (/* @__PURE__ */ new Date()).toISOString();
68
+ const levelName = (_a = LOG_LEVEL_NAMES[level]) != null ? _a : "INFO";
69
+ const formattedMessage = messages.map((m) => typeof m === "string" ? m : util.inspect(m, { depth: null })).join(" ");
70
+ return `${iso} - ${levelName} - ${formattedMessage}`;
71
+ }
72
+ __name(formatLogLine, "formatLogLine");
73
+ function createWriterLogger(initialLevel, writeLine) {
74
+ let currentLevel = initialLevel;
75
+ const logAt = /* @__PURE__ */ __name((targetLevel, messages) => {
76
+ if (currentLevel <= targetLevel) {
77
+ writeLine(formatLogLine(targetLevel, messages));
78
+ }
79
+ }, "logAt");
80
+ return {
81
+ setLogLevel(level) {
82
+ currentLevel = level;
83
+ },
84
+ log(level, ...messages) {
85
+ logAt(level, messages);
86
+ },
87
+ debug(...messages) {
88
+ logAt(import_logger.LogLevel.DEBUG, messages);
89
+ },
90
+ info(...messages) {
91
+ logAt(import_logger.LogLevel.INFO, messages);
92
+ },
93
+ warn(...messages) {
94
+ logAt(import_logger.LogLevel.WARN, messages);
95
+ },
96
+ error(...messages) {
97
+ logAt(import_logger.LogLevel.ERROR, messages);
98
+ }
99
+ };
100
+ }
101
+ __name(createWriterLogger, "createWriterLogger");
102
+ function logToStderr(level = import_logger.LogLevel.INFO) {
103
+ (0, import_logger.setLogLevel)(level);
104
+ (0, import_logger.setLogger)(
105
+ createWriterLogger(level, (line) => {
106
+ process.stderr.write(`${line}
107
+ `);
108
+ })
109
+ );
110
+ }
111
+ __name(logToStderr, "logToStderr");
112
+ function logToTmpFolder(options = {}) {
113
+ const {
114
+ level = import_logger.LogLevel.INFO,
115
+ subFolder = "agents_log",
116
+ logFilePrefix = "agent",
117
+ logFileTimestamp = formatDateTimestamp(/* @__PURE__ */ new Date())
118
+ } = options;
119
+ const logDir = path.join(os.tmpdir(), subFolder);
120
+ fs.mkdirSync(logDir, { recursive: true });
121
+ const logFilename = `${logFilePrefix}.${logFileTimestamp}.log`;
122
+ const logFilepath = path.join(logDir, logFilename);
123
+ fs.writeFileSync(logFilepath, "", "utf-8");
124
+ (0, import_logger.setLogLevel)(level);
125
+ const fileLogger = createWriterLogger(level, (line) => {
126
+ fs.appendFileSync(logFilepath, `${line}
127
+ `, "utf-8");
128
+ });
129
+ (0, import_logger.setLogger)(fileLogger);
130
+ const latestLogLink = path.join(logDir, `${logFilePrefix}.latest.log`);
131
+ try {
132
+ try {
133
+ fs.lstatSync(latestLogLink);
134
+ fs.unlinkSync(latestLogLink);
135
+ } catch {
136
+ }
137
+ fs.symlinkSync(logFilepath, latestLogLink);
138
+ } catch (e) {
139
+ fileLogger.warn(`Failed to create symlink to latest log: ${String(e)}`);
140
+ }
141
+ fileLogger.info(`Log setup complete: ${logFilepath}`);
142
+ return logFilepath;
143
+ }
144
+ __name(logToTmpFolder, "logToTmpFolder");
145
+ // Annotate the CommonJS export names for ESM import in node:
146
+ 0 && (module.exports = {
147
+ LOGGING_FORMAT,
148
+ logToStderr,
149
+ logToTmpFolder
150
+ });
@@ -43,6 +43,7 @@ var import_file_utils = require("../utils/file_utils.js");
43
43
  var import_logger = require("../utils/logger.js");
44
44
  var import_base_code_executor = require("./base_code_executor.js");
45
45
  var import_code_execution_utils = require("./code_execution_utils.js");
46
+ var import_code_executor_context = require("./code_executor_context.js");
46
47
  /**
47
48
  * @license
48
49
  * Copyright 2026 Google LLC
@@ -231,12 +232,14 @@ let AgentEngineSandboxCodeExecutor = class extends import_base_code_executor.Bas
231
232
  return this.agentEngineCreationPromise;
232
233
  }
233
234
  async getOrCreateSandbox(invocationContext, agentEngineName, language) {
234
- var _a, _b;
235
+ var _a, _b, _c, _d, _e;
235
236
  if (this.sandboxResourceName) {
236
237
  return this.sandboxResourceName;
237
238
  }
238
239
  const stateKey = `sandbox_name_${language.toLowerCase()}`;
239
- let sandboxName = (_b = (_a = invocationContext.session) == null ? void 0 : _a.state) == null ? void 0 : _b[stateKey];
240
+ const state = (_a = invocationContext.session) == null ? void 0 : _a.state;
241
+ const codeExecutionContext = state == null ? void 0 : state[import_code_executor_context.CONTEXT_KEY];
242
+ let sandboxName = (_b = state == null ? void 0 : state[stateKey]) != null ? _b : codeExecutionContext == null ? void 0 : codeExecutionContext[stateKey];
240
243
  let createNewSandbox = false;
241
244
  if (!sandboxName) {
242
245
  createNewSandbox = true;
@@ -293,6 +296,8 @@ let AgentEngineSandboxCodeExecutor = class extends import_base_code_executor.Bas
293
296
  invocationContext.session.state = {};
294
297
  }
295
298
  invocationContext.session.state[stateKey] = sandboxName;
299
+ const context = (_e = (_c = invocationContext.session.state)[_d = import_code_executor_context.CONTEXT_KEY]) != null ? _e : _c[_d] = {};
300
+ context[stateKey] = sandboxName;
296
301
  }
297
302
  }
298
303
  return sandboxName;
@@ -31,6 +31,8 @@ __export(code_execution_utils_exports, {
31
31
  buildExecutableCodePart: () => buildExecutableCodePart,
32
32
  convertCodeExecutionParts: () => convertCodeExecutionParts,
33
33
  extractCodeAndTruncateContent: () => extractCodeAndTruncateContent,
34
+ extractCodeBlockAndTruncateContent: () => extractCodeBlockAndTruncateContent,
35
+ getCodeBlockLanguage: () => getCodeBlockLanguage,
34
36
  getEncodedFileContent: () => getEncodedFileContent
35
37
  });
36
38
  module.exports = __toCommonJS(code_execution_utils_exports);
@@ -61,33 +63,62 @@ function getEncodedFileContent(data) {
61
63
  return (0, import_env_aware_utils.isBase64Encoded)(data) ? data : (0, import_env_aware_utils.base64Encode)(data);
62
64
  }
63
65
  __name(getEncodedFileContent, "getEncodedFileContent");
66
+ const FENCE_TAG_LANGUAGE_MAP = {
67
+ tool_code: "python" /* PYTHON */,
68
+ python: "python" /* PYTHON */,
69
+ py: "python" /* PYTHON */,
70
+ javascript: "javascript" /* JAVASCRIPT */,
71
+ js: "javascript" /* JAVASCRIPT */,
72
+ typescript: "typescript" /* TYPESCRIPT */,
73
+ ts: "typescript" /* TYPESCRIPT */,
74
+ bash: "shell" /* SHELL */,
75
+ sh: "shell" /* SHELL */,
76
+ shell: "shell" /* SHELL */
77
+ };
78
+ const NO_CODE_BLOCK = Object.freeze({
79
+ code: "",
80
+ language: "unspecified" /* UNSPECIFIED */
81
+ });
82
+ function getCodeBlockLanguage(leadingDelimiter) {
83
+ var _a;
84
+ const tag = leadingDelimiter.trim().replace(/^`+/, "").toLowerCase();
85
+ return (_a = FENCE_TAG_LANGUAGE_MAP[tag]) != null ? _a : "unspecified" /* UNSPECIFIED */;
86
+ }
87
+ __name(getCodeBlockLanguage, "getCodeBlockLanguage");
64
88
  function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
89
+ return extractCodeBlockAndTruncateContent(content, codeBlockDelimiters).code;
90
+ }
91
+ __name(extractCodeAndTruncateContent, "extractCodeAndTruncateContent");
92
+ function extractCodeBlockAndTruncateContent(content, codeBlockDelimiters) {
65
93
  var _a;
66
94
  if (!((_a = content.parts) == null ? void 0 : _a.length)) {
67
- return "";
95
+ return { ...NO_CODE_BLOCK };
68
96
  }
69
97
  for (let i = 0; i < content.parts.length; i++) {
70
98
  const part = content.parts[i];
71
99
  if (part.executableCode && (i === content.parts.length - 1 || !content.parts[i + 1].codeExecutionResult)) {
72
100
  content.parts = content.parts.slice(0, i + 1);
73
- return part.executableCode.code || "";
101
+ return {
102
+ code: part.executableCode.code || "",
103
+ language: "python" /* PYTHON */
104
+ };
74
105
  }
75
106
  }
76
107
  const textParts = content.parts.filter((part) => part.text);
77
108
  if (!textParts.length) {
78
- return "";
109
+ return { ...NO_CODE_BLOCK };
79
110
  }
80
111
  const firstTextPart = (0, import_lodash_es.cloneDeep)(textParts[0]);
81
112
  const responseText = textParts.map((part) => part.text).join("\n");
82
113
  const leadingDelimiterPattern = codeBlockDelimiters.map((d) => d[0]).join("|");
83
114
  const trailingDelimiterPattern = codeBlockDelimiters.map((d) => d[1]).join("|");
84
115
  const match = new RegExp(
85
- `(?<prefix>.*?)(${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
116
+ `(?<prefix>.*?)(?<leading>${leadingDelimiterPattern})(?<codeStr>.*?)(${trailingDelimiterPattern})(?<suffix>.*?)$`,
86
117
  "s"
87
118
  ).exec(responseText);
88
- const { prefix, codeStr } = (match == null ? void 0 : match.groups) || {};
119
+ const { prefix, leading, codeStr } = (match == null ? void 0 : match.groups) || {};
89
120
  if (!codeStr) {
90
- return "";
121
+ return { ...NO_CODE_BLOCK };
91
122
  }
92
123
  content.parts = [];
93
124
  if (prefix) {
@@ -95,12 +126,11 @@ function extractCodeAndTruncateContent(content, codeBlockDelimiters) {
95
126
  content.parts.push(firstTextPart);
96
127
  }
97
128
  content.parts.push(buildExecutableCodePart(codeStr));
98
- return codeStr;
129
+ return { code: codeStr, language: getCodeBlockLanguage(leading != null ? leading : "") };
99
130
  }
100
- __name(extractCodeAndTruncateContent, "extractCodeAndTruncateContent");
131
+ __name(extractCodeBlockAndTruncateContent, "extractCodeBlockAndTruncateContent");
101
132
  function buildExecutableCodePart(code) {
102
133
  return {
103
- text: code,
104
134
  executableCode: {
105
135
  code,
106
136
  language: import_genai.Language.PYTHON
@@ -111,28 +141,28 @@ __name(buildExecutableCodePart, "buildExecutableCodePart");
111
141
  function buildCodeExecutionResultPart(codeExecutionResult) {
112
142
  if (codeExecutionResult.stderr) {
113
143
  return {
114
- text: codeExecutionResult.stderr,
115
144
  codeExecutionResult: {
116
- outcome: import_genai.Outcome.OUTCOME_FAILED
145
+ outcome: import_genai.Outcome.OUTCOME_FAILED,
146
+ output: codeExecutionResult.stderr
117
147
  }
118
148
  };
119
149
  }
120
150
  const finalResult = [];
121
- if (codeExecutionResult.stdout || !codeExecutionResult.outputFiles) {
151
+ if (codeExecutionResult.stdout || !codeExecutionResult.outputFiles.length) {
122
152
  finalResult.push(`Code execution result:
123
153
  ${codeExecutionResult.stdout}
124
154
  `);
125
155
  }
126
- if (codeExecutionResult.outputFiles) {
156
+ if (codeExecutionResult.outputFiles.length) {
127
157
  finalResult.push(
128
158
  `Saved artifacts:
129
- ` + codeExecutionResult.outputFiles.map((f) => f.name).join(", ")
159
+ ` + codeExecutionResult.outputFiles.map((f) => `\`${f.name}\``).join(",")
130
160
  );
131
161
  }
132
162
  return {
133
- text: finalResult.join("\n\n"),
134
163
  codeExecutionResult: {
135
- outcome: import_genai.Outcome.OUTCOME_OK
164
+ outcome: import_genai.Outcome.OUTCOME_OK,
165
+ output: finalResult.join("\n\n")
136
166
  }
137
167
  };
138
168
  }
@@ -163,5 +193,7 @@ __name(convertCodeExecutionParts, "convertCodeExecutionParts");
163
193
  buildExecutableCodePart,
164
194
  convertCodeExecutionParts,
165
195
  extractCodeAndTruncateContent,
196
+ extractCodeBlockAndTruncateContent,
197
+ getCodeBlockLanguage,
166
198
  getEncodedFileContent
167
199
  });
@@ -25,6 +25,7 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var code_executor_context_exports = {};
27
27
  __export(code_executor_context_exports, {
28
+ CONTEXT_KEY: () => CONTEXT_KEY,
28
29
  CodeExecutorContext: () => CodeExecutorContext
29
30
  });
30
31
  module.exports = __toCommonJS(code_executor_context_exports);
@@ -43,8 +44,10 @@ const CODE_EXECUTION_RESULTS_KEY = "_code_execution_results";
43
44
  const _CodeExecutorContext = class _CodeExecutorContext {
44
45
  constructor(sessionState) {
45
46
  this.sessionState = sessionState;
46
- var _a;
47
- this.context = (_a = sessionState.get(CONTEXT_KEY)) != null ? _a : {};
47
+ if (!sessionState.has(CONTEXT_KEY)) {
48
+ sessionState.set(CONTEXT_KEY, {});
49
+ }
50
+ this.context = sessionState.get(CONTEXT_KEY);
48
51
  this.sessionState = sessionState;
49
52
  }
50
53
  /**
@@ -197,5 +200,6 @@ __name(_CodeExecutorContext, "CodeExecutorContext");
197
200
  let CodeExecutorContext = _CodeExecutorContext;
198
201
  // Annotate the CommonJS export names for ESM import in node:
199
202
  0 && (module.exports = {
203
+ CONTEXT_KEY,
200
204
  CodeExecutorContext
201
205
  });