@google/adk 2.2.0 → 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.
- package/dist/cjs/a2a/a2a_remote_agent.js +4 -1
- package/dist/cjs/a2a/agent_card.js +102 -26
- package/dist/cjs/a2a/agent_to_a2a.js +1 -1
- package/dist/cjs/a2a/event_converter_utils.js +5 -1
- package/dist/cjs/a2a/metadata_converter_utils.js +2 -1
- package/dist/cjs/agents/functions.js +199 -25
- package/dist/cjs/agents/instructions.js +4 -1
- package/dist/cjs/agents/invocation_context.js +26 -4
- package/dist/cjs/agents/langgraph_agent.js +152 -0
- package/dist/cjs/agents/llm_agent.js +175 -101
- package/dist/cjs/agents/processors/code_execution_request_processor.js +10 -6
- package/dist/cjs/agents/remote_agent.js +187 -0
- package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
- package/dist/cjs/auth/auth_handler.js +37 -5
- package/dist/cjs/auth/auth_schemes.js +9 -0
- package/dist/cjs/cli/cli_eval.js +532 -0
- package/dist/cjs/cli/utils/envs.js +116 -0
- package/dist/cjs/cli/utils/evals.js +137 -0
- package/dist/cjs/cli/utils/logs.js +150 -0
- package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
- package/dist/cjs/code_executors/code_execution_utils.js +48 -16
- package/dist/cjs/code_executors/code_executor_context.js +6 -2
- package/dist/cjs/common.js +90 -0
- package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
- package/dist/cjs/context/token_based_context_compactor.js +2 -1
- package/dist/cjs/events/abort_events.js +135 -0
- package/dist/cjs/events/event.js +4 -2
- package/dist/cjs/events/internal_metadata.js +131 -0
- package/dist/cjs/examples/example_util.js +23 -2
- package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
- package/dist/cjs/index.js +97 -1
- package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
- package/dist/cjs/models/gemini_llm_connection.js +16 -8
- package/dist/cjs/models/google_llm.js +13 -16
- package/dist/cjs/models/llm_response.js +9 -1
- package/dist/cjs/models/registry.js +1 -1
- package/dist/cjs/models/routed_llm.js +9 -8
- package/dist/cjs/planners/plan_re_act_planner.js +1 -1
- package/dist/cjs/plugins/debug_logging_plugin.js +653 -0
- package/dist/cjs/plugins/plugin_manager.js +1 -1
- package/dist/cjs/plugins/tool_call_integrity_plugin.js +364 -0
- package/dist/cjs/runner/in_memory_runner.js +6 -11
- package/dist/cjs/runner/runner.js +121 -35
- package/dist/cjs/sessions/db/operations.js +1 -1
- package/dist/cjs/sessions/in_memory_session_service.js +3 -1
- package/dist/cjs/sessions/state.js +8 -4
- package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
- package/dist/cjs/telemetry/tracing.js +97 -66
- package/dist/cjs/tools/agent_tool.js +44 -0
- package/dist/cjs/tools/apihub_tool/apihub_toolset.js +142 -0
- package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
- package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
- package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
- package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +185 -0
- package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
- package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +603 -0
- package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +219 -0
- package/dist/cjs/tools/crewai_tool.js +132 -0
- package/dist/cjs/tools/example_tool.js +10 -0
- package/dist/cjs/tools/function_tool.js +319 -0
- package/dist/cjs/tools/google_api_tool/google_api_tool.js +97 -0
- package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +226 -0
- package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +58 -0
- package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +440 -0
- package/dist/cjs/tools/google_api_tool/index.js +64 -0
- package/dist/cjs/tools/langchain_tool.js +172 -0
- package/dist/cjs/tools/mcp/index.js +12 -0
- package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
- package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
- package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +14 -2
- package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
- package/dist/cjs/tools/toolbox_tool.js +108 -0
- package/dist/cjs/utils/env_aware_utils.js +6 -8
- package/dist/cjs/utils/error_utils.js +11 -11
- package/dist/cjs/utils/file_extension_utils.js +11 -0
- package/dist/cjs/utils/file_utils.js +2 -24
- package/dist/cjs/utils/gemini_schema_util.js +4 -1
- package/dist/cjs/utils/json_utils.js +49 -0
- package/dist/cjs/utils/live_connection_utils.js +4 -5
- package/dist/cjs/utils/logger_node.js +7 -1
- package/dist/cjs/utils/object_notation_utils.js +6 -3
- package/dist/cjs/utils/streaming_utils.js +12 -12
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_remote_agent.js +4 -1
- package/dist/esm/a2a/agent_card.js +103 -27
- package/dist/esm/a2a/agent_to_a2a.js +5 -2
- package/dist/esm/a2a/event_converter_utils.js +5 -1
- package/dist/esm/a2a/metadata_converter_utils.js +2 -1
- package/dist/esm/agents/functions.js +198 -25
- package/dist/esm/agents/instructions.js +4 -1
- package/dist/esm/agents/invocation_context.js +24 -4
- package/dist/esm/agents/langgraph_agent.js +123 -0
- package/dist/esm/agents/llm_agent.js +185 -104
- package/dist/esm/agents/processors/code_execution_request_processor.js +13 -8
- package/dist/esm/agents/remote_agent.js +164 -0
- package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
- package/dist/esm/auth/auth_handler.js +37 -5
- package/dist/esm/auth/auth_schemes.js +8 -0
- package/dist/esm/cli/cli_eval.js +510 -0
- package/dist/esm/cli/utils/envs.js +78 -0
- package/dist/esm/cli/utils/evals.js +109 -0
- package/dist/esm/cli/utils/logs.js +111 -0
- package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
- package/dist/esm/code_executors/code_execution_utils.js +46 -16
- package/dist/esm/code_executors/code_executor_context.js +5 -2
- package/dist/esm/common.js +87 -3
- package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
- package/dist/esm/context/token_based_context_compactor.js +2 -1
- package/dist/esm/events/abort_events.js +110 -0
- package/dist/esm/events/event.js +4 -2
- package/dist/esm/events/internal_metadata.js +97 -0
- package/dist/esm/examples/example_util.js +21 -1
- package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
- package/dist/esm/index.js +99 -1
- package/dist/esm/integrations/agent_registry/helpers.js +1 -1
- package/dist/esm/models/gemini_llm_connection.js +16 -8
- package/dist/esm/models/google_llm.js +14 -17
- package/dist/esm/models/llm_response.js +9 -1
- package/dist/esm/models/registry.js +1 -1
- package/dist/esm/models/routed_llm.js +9 -8
- package/dist/esm/planners/plan_re_act_planner.js +1 -1
- package/dist/esm/plugins/debug_logging_plugin.js +615 -0
- package/dist/esm/plugins/plugin_manager.js +1 -1
- package/dist/esm/plugins/tool_call_integrity_plugin.js +339 -0
- package/dist/esm/runner/in_memory_runner.js +6 -11
- package/dist/esm/runner/runner.js +124 -35
- package/dist/esm/sessions/db/operations.js +1 -1
- package/dist/esm/sessions/in_memory_session_service.js +3 -1
- package/dist/esm/sessions/state.js +8 -4
- package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
- package/dist/esm/telemetry/tracing.js +97 -66
- package/dist/esm/tools/agent_tool.js +44 -0
- package/dist/esm/tools/apihub_tool/apihub_toolset.js +106 -0
- package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
- package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
- package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
- package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +163 -0
- package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
- package/dist/esm/tools/application_integration_tool/clients/connections_client.js +561 -0
- package/dist/esm/tools/application_integration_tool/clients/integration_client.js +215 -0
- package/dist/esm/tools/crewai_tool.js +107 -0
- package/dist/esm/tools/example_tool.js +13 -1
- package/dist/esm/tools/function_tool.js +316 -0
- package/dist/esm/tools/google_api_tool/google_api_tool.js +70 -0
- package/dist/esm/tools/google_api_tool/google_api_tool_set.js +188 -0
- package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +24 -0
- package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +393 -0
- package/dist/esm/tools/google_api_tool/index.js +33 -0
- package/dist/esm/tools/langchain_tool.js +148 -0
- package/dist/esm/tools/mcp/index.js +6 -0
- package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
- package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -1
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
- package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +15 -2
- package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
- package/dist/esm/tools/toolbox_tool.js +80 -0
- package/dist/esm/utils/env_aware_utils.js +6 -8
- package/dist/esm/utils/error_utils.js +9 -10
- package/dist/esm/utils/file_extension_utils.js +11 -0
- package/dist/esm/utils/file_utils.js +2 -23
- package/dist/esm/utils/gemini_schema_util.js +4 -1
- package/dist/esm/utils/json_utils.js +21 -0
- package/dist/esm/utils/live_connection_utils.js +4 -5
- package/dist/esm/utils/logger_node.js +7 -1
- package/dist/esm/utils/object_notation_utils.js +4 -2
- package/dist/esm/utils/streaming_utils.js +11 -11
- package/dist/esm/version.js +1 -1
- package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
- package/dist/types/a2a/agent_card.d.ts +44 -1
- package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
- package/dist/types/a2a/index.d.ts +1 -0
- package/dist/types/agents/functions.d.ts +33 -1
- package/dist/types/agents/invocation_context.d.ts +20 -1
- package/dist/types/agents/langgraph_agent.d.ts +153 -0
- package/dist/types/agents/remote_agent.d.ts +68 -0
- package/dist/types/auth/auth_handler.d.ts +28 -1
- package/dist/types/auth/auth_schemes.d.ts +13 -0
- package/dist/types/cli/cli_eval.d.ts +173 -0
- package/dist/types/cli/utils/envs.d.ts +23 -0
- package/dist/types/cli/utils/evals.d.ts +47 -0
- package/dist/types/cli/utils/logs.d.ts +38 -0
- package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
- package/dist/types/code_executors/code_executor_context.d.ts +1 -0
- package/dist/types/common.d.ts +30 -4
- package/dist/types/events/abort_events.d.ts +43 -0
- package/dist/types/events/event.d.ts +4 -0
- package/dist/types/events/internal_metadata.d.ts +78 -0
- package/dist/types/examples/example_util.d.ts +17 -0
- package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
- package/dist/types/index.d.ts +16 -1
- package/dist/types/models/gemini_llm_connection.d.ts +6 -7
- package/dist/types/models/routed_llm.d.ts +1 -1
- package/dist/types/plugins/debug_logging_plugin.d.ts +157 -0
- package/dist/types/plugins/tool_call_integrity_plugin.d.ts +116 -0
- package/dist/types/runner/in_memory_runner.d.ts +2 -1
- package/dist/types/runner/runner.d.ts +34 -0
- package/dist/types/sessions/state.d.ts +5 -1
- package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
- package/dist/types/skills/skill.d.ts +1 -1
- package/dist/types/telemetry/tracing.d.ts +4 -2
- package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +122 -0
- package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
- package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
- package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
- package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +86 -0
- package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
- package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +215 -0
- package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
- package/dist/types/tools/crewai_tool.d.ts +85 -0
- package/dist/types/tools/example_tool.d.ts +10 -0
- package/dist/types/tools/function_tool.d.ts +32 -0
- package/dist/types/tools/google_api_tool/google_api_tool.d.ts +30 -0
- package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +78 -0
- package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +33 -0
- package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +164 -0
- package/dist/types/tools/google_api_tool/index.d.ts +11 -0
- package/dist/types/tools/langchain_tool.d.ts +103 -0
- package/dist/types/tools/mcp/index.d.ts +3 -0
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
- package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
- package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
- package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
- package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
- package/dist/types/tools/retrieval/base_retrieval_tool.d.ts +15 -0
- package/dist/types/tools/toolbox_tool.d.ts +73 -0
- package/dist/types/utils/env_aware_utils.d.ts +18 -2
- package/dist/types/utils/error_utils.d.ts +7 -0
- package/dist/types/utils/file_utils.d.ts +6 -1
- package/dist/types/utils/gemini_schema_util.d.ts +1 -2
- package/dist/types/utils/json_utils.d.ts +11 -0
- package/dist/types/utils/object_notation_utils.d.ts +7 -0
- package/dist/types/utils/streaming_utils.d.ts +11 -4
- package/dist/types/version.d.ts +1 -1
- package/dist/web/index_web.js +105 -106
- package/dist/web/index_web.js.map +4 -4
- package/package.json +8 -3
|
@@ -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
|
-
|
|
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
|
|
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>.*?)(
|
|
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(
|
|
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
|
-
|
|
47
|
-
|
|
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
|
});
|