@google/adk 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/a2a/a2a_event.js +317 -0
- package/dist/cjs/a2a/a2a_remote_agent.js +174 -0
- package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +198 -0
- package/dist/cjs/a2a/a2a_remote_agent_utils.js +165 -0
- package/dist/cjs/a2a/agent_card.js +380 -0
- package/dist/cjs/a2a/agent_executor.js +221 -0
- package/dist/cjs/a2a/agent_to_a2a.js +115 -0
- package/dist/cjs/a2a/event_converter_utils.js +201 -0
- package/dist/cjs/a2a/event_processor_utils.js +180 -0
- package/dist/cjs/a2a/executor_context.js +53 -0
- package/dist/cjs/a2a/metadata_converter_utils.js +126 -0
- package/dist/cjs/a2a/part_converter_utils.js +47 -34
- package/dist/cjs/agents/base_agent.js +3 -3
- package/dist/cjs/{tools/tool_context.js → agents/context.js} +70 -15
- package/dist/cjs/agents/functions.js +2 -2
- package/dist/cjs/agents/llm_agent.js +38 -674
- package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +132 -0
- package/dist/cjs/agents/processors/basic_llm_request_processor.js +68 -0
- package/dist/cjs/agents/processors/code_execution_request_processor.js +389 -0
- package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
- package/dist/cjs/agents/processors/content_request_processor.js +87 -0
- package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
- package/dist/cjs/agents/processors/identity_llm_request_processor.js +54 -0
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +85 -0
- package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +165 -0
- package/dist/cjs/artifacts/file_artifact_service.js +35 -4
- package/dist/cjs/common.js +48 -7
- package/dist/cjs/context/base_context_compactor.js +27 -0
- package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
- package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
- package/dist/cjs/context/token_based_context_compactor.js +135 -0
- package/dist/cjs/context/truncating_context_compactor.js +58 -0
- package/dist/cjs/events/compacted_event.js +53 -0
- package/dist/cjs/index.js +113 -53
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/memory/in_memory_memory_service.js +1 -1
- package/dist/cjs/models/llm_response.js +2 -0
- package/dist/cjs/plugins/base_plugin.js +1 -1
- package/dist/cjs/runner/runner.js +20 -11
- package/dist/cjs/sessions/database_session_service.js +4 -1
- package/dist/cjs/sessions/db/operations.js +25 -23
- package/dist/cjs/sessions/state.js +2 -2
- package/dist/cjs/tools/agent_tool.js +6 -5
- package/dist/cjs/tools/base_tool.js +3 -0
- package/dist/cjs/tools/base_toolset.js +13 -3
- package/dist/cjs/tools/exit_loop_tool.js +63 -0
- package/dist/cjs/tools/load_artifacts_tool.js +188 -0
- package/dist/cjs/tools/load_memory_tool.js +107 -0
- package/dist/cjs/tools/mcp/mcp_toolset.js +9 -5
- package/dist/cjs/tools/preload_memory_tool.js +109 -0
- package/dist/cjs/utils/logger.js +62 -54
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_event.js +269 -0
- package/dist/esm/a2a/a2a_remote_agent.js +148 -0
- package/dist/esm/a2a/a2a_remote_agent_run_processor.js +175 -0
- package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
- package/dist/esm/a2a/agent_card.js +340 -0
- package/dist/esm/a2a/agent_executor.js +202 -0
- package/dist/esm/a2a/agent_to_a2a.js +80 -0
- package/dist/esm/a2a/event_converter_utils.js +187 -0
- package/dist/esm/a2a/event_processor_utils.js +159 -0
- package/dist/esm/a2a/executor_context.js +23 -0
- package/dist/esm/a2a/metadata_converter_utils.js +91 -0
- package/dist/esm/a2a/part_converter_utils.js +49 -34
- package/dist/esm/agents/base_agent.js +3 -3
- package/dist/{web/tools/tool_context.js → esm/agents/context.js} +66 -11
- package/dist/esm/agents/functions.js +2 -2
- package/dist/esm/agents/llm_agent.js +31 -683
- package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +101 -0
- package/dist/esm/agents/processors/basic_llm_request_processor.js +37 -0
- package/dist/esm/agents/processors/code_execution_request_processor.js +363 -0
- package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
- package/dist/esm/agents/processors/content_request_processor.js +59 -0
- package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
- package/dist/esm/agents/processors/identity_llm_request_processor.js +23 -0
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +54 -0
- package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +140 -0
- package/dist/esm/artifacts/file_artifact_service.js +30 -3
- package/dist/esm/common.js +44 -10
- package/dist/esm/context/base_context_compactor.js +5 -0
- package/dist/esm/context/summarizers/base_summarizer.js +5 -0
- package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
- package/dist/esm/context/token_based_context_compactor.js +105 -0
- package/dist/esm/context/truncating_context_compactor.js +28 -0
- package/dist/esm/events/compacted_event.js +22 -0
- package/dist/esm/index.js +119 -18
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/memory/in_memory_memory_service.js +1 -1
- package/dist/esm/models/llm_response.js +2 -0
- package/dist/esm/plugins/base_plugin.js +1 -1
- package/dist/esm/runner/runner.js +18 -10
- package/dist/esm/sessions/database_session_service.js +4 -1
- package/dist/esm/sessions/db/operations.js +32 -18
- package/dist/esm/sessions/state.js +2 -2
- package/dist/esm/tools/agent_tool.js +6 -5
- package/dist/esm/tools/base_tool.js +3 -0
- package/dist/esm/tools/base_toolset.js +11 -2
- package/dist/esm/tools/exit_loop_tool.js +32 -0
- package/dist/esm/tools/load_artifacts_tool.js +159 -0
- package/dist/esm/tools/load_memory_tool.js +78 -0
- package/dist/esm/tools/mcp/mcp_toolset.js +9 -5
- package/dist/esm/tools/preload_memory_tool.js +80 -0
- package/dist/esm/utils/logger.js +52 -54
- package/dist/esm/version.js +1 -1
- package/dist/types/a2a/a2a_event.d.ts +139 -0
- package/dist/types/a2a/a2a_remote_agent.d.ts +63 -0
- package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
- package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
- package/dist/types/a2a/agent_card.d.ts +23 -0
- package/dist/types/a2a/agent_executor.d.ts +52 -0
- package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
- package/dist/types/a2a/event_converter_utils.d.ts +20 -0
- package/dist/types/a2a/event_processor_utils.d.ts +24 -0
- package/dist/types/a2a/executor_context.d.ts +33 -0
- package/dist/types/a2a/metadata_converter_utils.d.ts +63 -0
- package/dist/types/a2a/part_converter_utils.d.ts +4 -3
- package/dist/types/agents/base_agent.d.ts +2 -2
- package/dist/types/{tools/tool_context.d.ts → agents/context.d.ts} +43 -8
- package/dist/types/agents/llm_agent.d.ts +14 -31
- package/dist/types/agents/loop_agent.d.ts +1 -1
- package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +18 -0
- package/dist/types/agents/{base_llm_processor.d.ts → processors/base_llm_processor.d.ts} +4 -4
- package/dist/types/agents/processors/basic_llm_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/code_execution_request_processor.d.ts +34 -0
- package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
- package/dist/types/agents/processors/content_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
- package/dist/types/agents/processors/identity_llm_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/instructions_llm_request_processor.d.ts +16 -0
- package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +13 -0
- package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
- package/dist/types/auth/credential_service/base_credential_service.d.ts +3 -3
- package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +3 -3
- package/dist/types/common.d.ts +20 -5
- package/dist/types/context/base_context_compactor.d.ts +24 -0
- package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
- package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
- package/dist/types/context/token_based_context_compactor.d.ts +33 -0
- package/dist/types/context/truncating_context_compactor.d.ts +24 -0
- package/dist/types/events/compacted_event.d.ts +33 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/models/llm_response.d.ts +5 -1
- package/dist/types/plugins/base_plugin.d.ts +12 -13
- package/dist/types/plugins/logging_plugin.d.ts +9 -10
- package/dist/types/plugins/plugin_manager.d.ts +9 -10
- package/dist/types/plugins/security_plugin.d.ts +2 -2
- package/dist/types/runner/runner.d.ts +13 -0
- package/dist/types/sessions/database_session_service.d.ts +2 -1
- package/dist/types/sessions/db/operations.d.ts +3 -4
- package/dist/types/tools/base_tool.d.ts +3 -3
- package/dist/types/tools/base_toolset.d.ts +12 -3
- package/dist/types/tools/exit_loop_tool.d.ts +24 -0
- package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
- package/dist/types/tools/function_tool.d.ts +2 -2
- package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
- package/dist/types/tools/load_memory_tool.d.ts +22 -0
- package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -1
- package/dist/types/tools/preload_memory_tool.d.ts +23 -0
- package/dist/types/utils/logger.d.ts +5 -9
- package/dist/types/version.d.ts +1 -1
- package/dist/web/a2a/a2a_event.js +269 -0
- package/dist/web/a2a/a2a_remote_agent.js +193 -0
- package/dist/web/a2a/a2a_remote_agent_run_processor.js +175 -0
- package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
- package/dist/web/a2a/agent_card.js +340 -0
- package/dist/web/a2a/agent_executor.js +216 -0
- package/dist/web/a2a/agent_to_a2a.js +80 -0
- package/dist/web/a2a/event_converter_utils.js +201 -0
- package/dist/web/a2a/event_processor_utils.js +168 -0
- package/dist/web/a2a/executor_context.js +23 -0
- package/dist/web/a2a/metadata_converter_utils.js +108 -0
- package/dist/web/a2a/part_converter_utils.js +49 -34
- package/dist/web/agents/base_agent.js +3 -3
- package/dist/{esm/tools/tool_context.js → web/agents/context.js} +66 -11
- package/dist/web/agents/functions.js +2 -2
- package/dist/web/agents/llm_agent.js +31 -661
- package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +100 -0
- package/dist/web/agents/processors/basic_llm_request_processor.js +71 -0
- package/dist/web/agents/processors/code_execution_request_processor.js +365 -0
- package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
- package/dist/web/agents/processors/content_request_processor.js +77 -0
- package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
- package/dist/web/agents/processors/identity_llm_request_processor.js +41 -0
- package/dist/web/agents/processors/instructions_llm_request_processor.js +72 -0
- package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +158 -0
- package/dist/web/artifacts/file_artifact_service.js +30 -3
- package/dist/web/common.js +44 -10
- package/dist/web/context/base_context_compactor.js +5 -0
- package/dist/web/context/summarizers/base_summarizer.js +5 -0
- package/dist/web/context/summarizers/llm_summarizer.js +74 -0
- package/dist/web/context/token_based_context_compactor.js +105 -0
- package/dist/web/context/truncating_context_compactor.js +28 -0
- package/dist/web/events/compacted_event.js +40 -0
- package/dist/web/index.js +13 -18
- package/dist/web/index.js.map +7 -0
- package/dist/web/memory/in_memory_memory_service.js +1 -1
- package/dist/web/models/llm_response.js +2 -0
- package/dist/web/plugins/base_plugin.js +1 -1
- package/dist/web/runner/runner.js +18 -10
- package/dist/web/sessions/database_session_service.js +4 -1
- package/dist/web/sessions/db/operations.js +32 -18
- package/dist/web/sessions/state.js +2 -2
- package/dist/web/tools/agent_tool.js +6 -5
- package/dist/web/tools/base_tool.js +3 -0
- package/dist/web/tools/base_toolset.js +11 -2
- package/dist/web/tools/exit_loop_tool.js +32 -0
- package/dist/web/tools/load_artifacts_tool.js +150 -0
- package/dist/web/tools/load_memory_tool.js +77 -0
- package/dist/web/tools/mcp/mcp_toolset.js +27 -5
- package/dist/web/tools/preload_memory_tool.js +75 -0
- package/dist/web/utils/logger.js +52 -54
- package/dist/web/version.js +1 -1
- package/package.json +7 -4
- package/dist/cjs/agents/callback_context.js +0 -101
- package/dist/esm/agents/callback_context.js +0 -71
- package/dist/types/agents/callback_context.d.ts +0 -42
- package/dist/web/agents/callback_context.js +0 -71
- /package/dist/cjs/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
- /package/dist/esm/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
- /package/dist/web/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
2
|
+
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright 2026 Google LLC
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
import { isRunner, Runner } from "../runner/runner.js";
|
|
9
|
+
import { randomUUID } from "../utils/env_aware_utils.js";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
import {
|
|
12
|
+
createTask,
|
|
13
|
+
createTaskArtifactUpdateEvent,
|
|
14
|
+
createTaskFailedEvent,
|
|
15
|
+
createTaskWorkingEvent
|
|
16
|
+
} from "./a2a_event.js";
|
|
17
|
+
import {
|
|
18
|
+
getFinalTaskStatusUpdate,
|
|
19
|
+
getTaskInputRequiredEvent
|
|
20
|
+
} from "./event_processor_utils.js";
|
|
21
|
+
import { createExecutorContext } from "./executor_context.js";
|
|
22
|
+
import {
|
|
23
|
+
getA2AEventMetadata,
|
|
24
|
+
getA2ASessionMetadata
|
|
25
|
+
} from "./metadata_converter_utils.js";
|
|
26
|
+
import { toA2AParts, toGenAIContent } from "./part_converter_utils.js";
|
|
27
|
+
class A2AAgentExecutor {
|
|
28
|
+
constructor(config) {
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.agentPartialArtifactIdsMap = {};
|
|
31
|
+
}
|
|
32
|
+
async execute(ctx, eventBus) {
|
|
33
|
+
var _a, _b;
|
|
34
|
+
const a2aUserMessage = ctx.userMessage;
|
|
35
|
+
if (!a2aUserMessage) {
|
|
36
|
+
throw new Error("message not provided");
|
|
37
|
+
}
|
|
38
|
+
const userId = "A2A_USER_".concat(ctx.contextId);
|
|
39
|
+
const sessionId = ctx.contextId;
|
|
40
|
+
const genAIUserMessage = toGenAIContent(a2aUserMessage);
|
|
41
|
+
const adkRunner = await getAdkRunner(this.config.runner);
|
|
42
|
+
const session = await getAdkSession(
|
|
43
|
+
userId,
|
|
44
|
+
sessionId,
|
|
45
|
+
adkRunner.sessionService,
|
|
46
|
+
adkRunner.appName
|
|
47
|
+
);
|
|
48
|
+
const executorContext = createExecutorContext({
|
|
49
|
+
session,
|
|
50
|
+
userContent: genAIUserMessage,
|
|
51
|
+
requestContext: ctx
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
if (this.config.beforeExecuteCallback) {
|
|
55
|
+
await this.config.beforeExecuteCallback(ctx);
|
|
56
|
+
}
|
|
57
|
+
if (ctx.task) {
|
|
58
|
+
const inputRequiredEvent = getTaskInputRequiredEvent(
|
|
59
|
+
ctx.task,
|
|
60
|
+
genAIUserMessage
|
|
61
|
+
);
|
|
62
|
+
if (inputRequiredEvent) {
|
|
63
|
+
await this.publishFinalTaskStatus({
|
|
64
|
+
executorContext,
|
|
65
|
+
eventBus,
|
|
66
|
+
event: inputRequiredEvent
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!ctx.task) {
|
|
72
|
+
eventBus.publish(
|
|
73
|
+
createTask({
|
|
74
|
+
taskId: ctx.taskId,
|
|
75
|
+
contextId: ctx.contextId,
|
|
76
|
+
message: a2aUserMessage
|
|
77
|
+
})
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
eventBus.publish(
|
|
81
|
+
createTaskWorkingEvent({
|
|
82
|
+
taskId: ctx.taskId,
|
|
83
|
+
contextId: ctx.contextId
|
|
84
|
+
})
|
|
85
|
+
);
|
|
86
|
+
const adkEvents = [];
|
|
87
|
+
try {
|
|
88
|
+
for (var iter = __forAwait(adkRunner.runAsync({
|
|
89
|
+
userId,
|
|
90
|
+
sessionId,
|
|
91
|
+
newMessage: genAIUserMessage,
|
|
92
|
+
runConfig: this.config.runConfig
|
|
93
|
+
})), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
|
|
94
|
+
const adkEvent = temp.value;
|
|
95
|
+
adkEvents.push(adkEvent);
|
|
96
|
+
const a2aEvent = this.convertAdkEventToA2AEvent(
|
|
97
|
+
adkEvent,
|
|
98
|
+
executorContext
|
|
99
|
+
);
|
|
100
|
+
if (!a2aEvent) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
await ((_b = (_a = this.config).afterEventCallback) == null ? void 0 : _b.call(
|
|
104
|
+
_a,
|
|
105
|
+
executorContext,
|
|
106
|
+
adkEvent,
|
|
107
|
+
a2aEvent
|
|
108
|
+
));
|
|
109
|
+
eventBus.publish(a2aEvent);
|
|
110
|
+
}
|
|
111
|
+
} catch (temp) {
|
|
112
|
+
error = [temp];
|
|
113
|
+
} finally {
|
|
114
|
+
try {
|
|
115
|
+
more && (temp = iter.return) && await temp.call(iter);
|
|
116
|
+
} finally {
|
|
117
|
+
if (error)
|
|
118
|
+
throw error[0];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
await this.publishFinalTaskStatus({
|
|
122
|
+
executorContext,
|
|
123
|
+
eventBus,
|
|
124
|
+
event: getFinalTaskStatusUpdate(adkEvents, executorContext)
|
|
125
|
+
});
|
|
126
|
+
} catch (e) {
|
|
127
|
+
const error2 = e;
|
|
128
|
+
await this.publishFinalTaskStatus({
|
|
129
|
+
executorContext,
|
|
130
|
+
eventBus,
|
|
131
|
+
error: error2,
|
|
132
|
+
event: createTaskFailedEvent({
|
|
133
|
+
taskId: ctx.taskId,
|
|
134
|
+
contextId: ctx.contextId,
|
|
135
|
+
error: new Error("Agent run failed: ".concat(error2.message)),
|
|
136
|
+
metadata: getA2ASessionMetadata(executorContext)
|
|
137
|
+
})
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Task cancellation is not supported in this implementation yet.
|
|
142
|
+
async cancelTask(_taskId) {
|
|
143
|
+
throw new Error("Task cancellation is not supported yet.");
|
|
144
|
+
}
|
|
145
|
+
convertAdkEventToA2AEvent(adkEvent, executorContext) {
|
|
146
|
+
var _a;
|
|
147
|
+
const a2aParts = toA2AParts(
|
|
148
|
+
(_a = adkEvent.content) == null ? void 0 : _a.parts,
|
|
149
|
+
adkEvent.longRunningToolIds
|
|
150
|
+
);
|
|
151
|
+
if (a2aParts.length === 0) {
|
|
152
|
+
return void 0;
|
|
153
|
+
}
|
|
154
|
+
const artifactId = this.agentPartialArtifactIdsMap[adkEvent.author] || randomUUID();
|
|
155
|
+
const a2aEvent = createTaskArtifactUpdateEvent({
|
|
156
|
+
taskId: executorContext.requestContext.taskId,
|
|
157
|
+
contextId: executorContext.requestContext.contextId,
|
|
158
|
+
artifactId,
|
|
159
|
+
parts: a2aParts,
|
|
160
|
+
metadata: getA2AEventMetadata(adkEvent, executorContext),
|
|
161
|
+
append: adkEvent.partial,
|
|
162
|
+
lastChunk: !adkEvent.partial
|
|
163
|
+
});
|
|
164
|
+
if (adkEvent.partial) {
|
|
165
|
+
this.agentPartialArtifactIdsMap[adkEvent.author] = artifactId;
|
|
166
|
+
} else {
|
|
167
|
+
delete this.agentPartialArtifactIdsMap[adkEvent.author];
|
|
168
|
+
}
|
|
169
|
+
return a2aEvent;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Writes the final status event to the queue.
|
|
173
|
+
*/
|
|
174
|
+
async publishFinalTaskStatus({
|
|
175
|
+
executorContext,
|
|
176
|
+
eventBus,
|
|
177
|
+
event,
|
|
178
|
+
error
|
|
179
|
+
}) {
|
|
180
|
+
var _a, _b;
|
|
181
|
+
try {
|
|
182
|
+
await ((_b = (_a = this.config).afterExecuteCallback) == null ? void 0 : _b.call(_a, executorContext, event, error));
|
|
183
|
+
} catch (e) {
|
|
184
|
+
logger.error("Error in afterExecuteCallback:", e);
|
|
185
|
+
}
|
|
186
|
+
eventBus.publish(event);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async function getAdkSession(userId, sessionId, sessionService, appName) {
|
|
190
|
+
const session = await sessionService.getSession({
|
|
191
|
+
appName,
|
|
192
|
+
userId,
|
|
193
|
+
sessionId
|
|
194
|
+
});
|
|
195
|
+
if (session) {
|
|
196
|
+
return session;
|
|
197
|
+
}
|
|
198
|
+
return sessionService.createSession({
|
|
199
|
+
appName,
|
|
200
|
+
userId,
|
|
201
|
+
sessionId
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async function getAdkRunner(runnerOrConfig) {
|
|
205
|
+
if (typeof runnerOrConfig === "function") {
|
|
206
|
+
const result = await runnerOrConfig();
|
|
207
|
+
return getAdkRunner(result);
|
|
208
|
+
}
|
|
209
|
+
if (isRunner(runnerOrConfig)) {
|
|
210
|
+
return runnerOrConfig;
|
|
211
|
+
}
|
|
212
|
+
return new Runner(runnerOrConfig);
|
|
213
|
+
}
|
|
214
|
+
export {
|
|
215
|
+
A2AAgentExecutor
|
|
216
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AGENT_CARD_PATH } from "@a2a-js/sdk";
|
|
7
|
+
import { DefaultRequestHandler, InMemoryTaskStore } from "@a2a-js/sdk/server";
|
|
8
|
+
import {
|
|
9
|
+
agentCardHandler,
|
|
10
|
+
jsonRpcHandler,
|
|
11
|
+
restHandler,
|
|
12
|
+
UserBuilder
|
|
13
|
+
} from "@a2a-js/sdk/server/express";
|
|
14
|
+
import express from "express";
|
|
15
|
+
import { StreamingMode } from "../agents/run_config.js";
|
|
16
|
+
import { InMemorySessionService } from "../sessions/in_memory_session_service.js";
|
|
17
|
+
import { getA2AAgentCard, resolveAgentCard } from "./agent_card.js";
|
|
18
|
+
import { A2AAgentExecutor } from "./agent_executor.js";
|
|
19
|
+
async function toA2a(agent, options = {}) {
|
|
20
|
+
var _a, _b, _c, _d;
|
|
21
|
+
const host = (_a = options.host) != null ? _a : "localhost";
|
|
22
|
+
const port = (_b = options.port) != null ? _b : 8e3;
|
|
23
|
+
const protocol = (_c = options.protocol) != null ? _c : "http";
|
|
24
|
+
const basePath = options.basePath || "";
|
|
25
|
+
const rpcUrl = "".concat(protocol, "://").concat(host, ":").concat(port).concat(basePath);
|
|
26
|
+
const agentCard = options.agentCard ? await resolveAgentCard(options.agentCard) : await getA2AAgentCard(agent, [
|
|
27
|
+
{
|
|
28
|
+
url: "".concat(rpcUrl, "/jsonrpc"),
|
|
29
|
+
transport: "JSONRPC"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
url: "".concat(rpcUrl, "/rest"),
|
|
33
|
+
transport: "HTTP+JSON"
|
|
34
|
+
}
|
|
35
|
+
]);
|
|
36
|
+
const agentExecutor = new A2AAgentExecutor({
|
|
37
|
+
runner: options.runner || {
|
|
38
|
+
agent,
|
|
39
|
+
appName: agent.name,
|
|
40
|
+
sessionService: options.sessionService || new InMemorySessionService(),
|
|
41
|
+
memoryService: options.memoryService,
|
|
42
|
+
artifactService: options.artifactService
|
|
43
|
+
},
|
|
44
|
+
runConfig: {
|
|
45
|
+
streamingMode: StreamingMode.SSE
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const requestHandler = new DefaultRequestHandler(
|
|
49
|
+
agentCard,
|
|
50
|
+
new InMemoryTaskStore(),
|
|
51
|
+
agentExecutor
|
|
52
|
+
);
|
|
53
|
+
const app = (_d = options.app) != null ? _d : express();
|
|
54
|
+
if (!options.app) {
|
|
55
|
+
app.use(express.urlencoded({ limit: "50mb", extended: true }));
|
|
56
|
+
app.use(express.json({ limit: "50mb" }));
|
|
57
|
+
}
|
|
58
|
+
app.use(
|
|
59
|
+
"".concat(basePath, "/").concat(AGENT_CARD_PATH),
|
|
60
|
+
agentCardHandler({ agentCardProvider: requestHandler })
|
|
61
|
+
);
|
|
62
|
+
app.use(
|
|
63
|
+
"".concat(basePath, "/rest"),
|
|
64
|
+
restHandler({
|
|
65
|
+
requestHandler,
|
|
66
|
+
userBuilder: UserBuilder.noAuthentication
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
app.use(
|
|
70
|
+
"".concat(basePath, "/jsonrpc"),
|
|
71
|
+
jsonRpcHandler({
|
|
72
|
+
requestHandler,
|
|
73
|
+
userBuilder: UserBuilder.noAuthentication
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
return app;
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
toA2a
|
|
80
|
+
};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
/**
|
|
21
|
+
* @license
|
|
22
|
+
* Copyright 2026 Google LLC
|
|
23
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
24
|
+
*/
|
|
25
|
+
import {
|
|
26
|
+
createModelContent,
|
|
27
|
+
createUserContent
|
|
28
|
+
} from "@google/genai";
|
|
29
|
+
import { createEvent } from "../events/event.js";
|
|
30
|
+
import { createEventActions } from "../events/event_actions.js";
|
|
31
|
+
import { randomUUID } from "../utils/env_aware_utils.js";
|
|
32
|
+
import {
|
|
33
|
+
getEventMetadata,
|
|
34
|
+
getFailedTaskStatusUpdateEventError,
|
|
35
|
+
isFailedTaskStatusUpdateEvent,
|
|
36
|
+
isInputRequiredTaskStatusUpdateEvent,
|
|
37
|
+
isMessage,
|
|
38
|
+
isTask,
|
|
39
|
+
isTaskArtifactUpdateEvent,
|
|
40
|
+
isTaskStatusUpdateEvent,
|
|
41
|
+
isTerminalTaskStatusUpdateEvent,
|
|
42
|
+
MessageRole
|
|
43
|
+
} from "./a2a_event.js";
|
|
44
|
+
import {
|
|
45
|
+
A2AMetadataKeys,
|
|
46
|
+
getA2AEventMetadata
|
|
47
|
+
} from "./metadata_converter_utils.js";
|
|
48
|
+
import { toA2AParts, toGenAIPart, toGenAIParts } from "./part_converter_utils.js";
|
|
49
|
+
function toA2AMessage(event, {
|
|
50
|
+
appName,
|
|
51
|
+
userId,
|
|
52
|
+
sessionId
|
|
53
|
+
}) {
|
|
54
|
+
var _a;
|
|
55
|
+
return {
|
|
56
|
+
kind: "message",
|
|
57
|
+
messageId: randomUUID(),
|
|
58
|
+
role: event.author === MessageRole.USER ? MessageRole.USER : MessageRole.AGENT,
|
|
59
|
+
parts: toA2AParts(((_a = event.content) == null ? void 0 : _a.parts) || [], event.longRunningToolIds),
|
|
60
|
+
metadata: getA2AEventMetadata(event, { appName, userId, sessionId })
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function toAdkEvent(event, invocationId, agentName) {
|
|
64
|
+
if (isMessage(event)) {
|
|
65
|
+
return messageToAdkEvent(event, invocationId, agentName);
|
|
66
|
+
}
|
|
67
|
+
if (isTask(event)) {
|
|
68
|
+
return taskToAdkEvent(event, invocationId, agentName);
|
|
69
|
+
}
|
|
70
|
+
if (isTaskArtifactUpdateEvent(event)) {
|
|
71
|
+
return artifactUpdateToAdkEvent(event, invocationId, agentName);
|
|
72
|
+
}
|
|
73
|
+
if (isTaskStatusUpdateEvent(event)) {
|
|
74
|
+
return event.final ? finalTaskStatusUpdateToAdkEvent(event, invocationId, agentName) : taskStatusUpdateToAdkEvent(event, invocationId, agentName);
|
|
75
|
+
}
|
|
76
|
+
return void 0;
|
|
77
|
+
}
|
|
78
|
+
function messageToAdkEvent(msg, invocationId, agentName, parentEvent) {
|
|
79
|
+
const parts = toGenAIParts(msg.parts);
|
|
80
|
+
return __spreadProps(__spreadValues({}, createAdkEventFromMetadata(parentEvent || msg)), {
|
|
81
|
+
invocationId,
|
|
82
|
+
author: msg.role === MessageRole.USER ? MessageRole.USER : agentName,
|
|
83
|
+
content: msg.role === MessageRole.USER ? createUserContent(parts) : createModelContent(parts),
|
|
84
|
+
turnComplete: true,
|
|
85
|
+
partial: false
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function artifactUpdateToAdkEvent(a2aEvent, invocationId, agentName) {
|
|
89
|
+
var _a;
|
|
90
|
+
const partsToConvert = ((_a = a2aEvent.artifact) == null ? void 0 : _a.parts) || [];
|
|
91
|
+
if (partsToConvert.length === 0) {
|
|
92
|
+
return void 0;
|
|
93
|
+
}
|
|
94
|
+
const partial = !!getEventMetadata(a2aEvent)[A2AMetadataKeys.PARTIAL] || a2aEvent.append || !a2aEvent.lastChunk;
|
|
95
|
+
return __spreadProps(__spreadValues({}, createAdkEventFromMetadata(a2aEvent)), {
|
|
96
|
+
invocationId,
|
|
97
|
+
author: agentName,
|
|
98
|
+
content: createModelContent(toGenAIParts(partsToConvert)),
|
|
99
|
+
longRunningToolIds: getLongRunningToolIDs(partsToConvert),
|
|
100
|
+
partial
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function finalTaskStatusUpdateToAdkEvent(a2aEvent, invocationId, agentName) {
|
|
104
|
+
var _a;
|
|
105
|
+
const partsToConvert = ((_a = a2aEvent.status.message) == null ? void 0 : _a.parts) || [];
|
|
106
|
+
if (partsToConvert.length === 0) {
|
|
107
|
+
return void 0;
|
|
108
|
+
}
|
|
109
|
+
const parts = toGenAIParts(partsToConvert);
|
|
110
|
+
const isFailedTask = isFailedTaskStatusUpdateEvent(a2aEvent);
|
|
111
|
+
const hasContent = !isFailedTask && parts.length > 0;
|
|
112
|
+
return __spreadProps(__spreadValues({}, createAdkEventFromMetadata(a2aEvent)), {
|
|
113
|
+
invocationId,
|
|
114
|
+
author: agentName,
|
|
115
|
+
errorMessage: isFailedTask ? getFailedTaskStatusUpdateEventError(a2aEvent) : void 0,
|
|
116
|
+
content: hasContent ? createModelContent(parts) : void 0,
|
|
117
|
+
longRunningToolIds: getLongRunningToolIDs(partsToConvert),
|
|
118
|
+
turnComplete: true
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function taskStatusUpdateToAdkEvent(a2aEvent, invocationId, agentName) {
|
|
122
|
+
const msg = a2aEvent.status.message;
|
|
123
|
+
if (!msg) {
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
const parts = toGenAIParts(msg.parts);
|
|
127
|
+
return __spreadProps(__spreadValues({}, createAdkEventFromMetadata(a2aEvent)), {
|
|
128
|
+
invocationId,
|
|
129
|
+
author: agentName,
|
|
130
|
+
content: createModelContent(parts),
|
|
131
|
+
turnComplete: false,
|
|
132
|
+
partial: true
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function taskToAdkEvent(a2aTask, invocationId, agentName) {
|
|
136
|
+
var _a, _b;
|
|
137
|
+
const parts = [];
|
|
138
|
+
const longRunningToolIds = [];
|
|
139
|
+
if (a2aTask.artifacts) {
|
|
140
|
+
for (const artifact of a2aTask.artifacts) {
|
|
141
|
+
if (((_a = artifact.parts) == null ? void 0 : _a.length) > 0) {
|
|
142
|
+
const artifactParts = toGenAIParts(artifact.parts);
|
|
143
|
+
parts.push(...artifactParts);
|
|
144
|
+
longRunningToolIds.push(...getLongRunningToolIDs(artifact.parts));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if ((_b = a2aTask.status) == null ? void 0 : _b.message) {
|
|
149
|
+
const a2aParts = a2aTask.status.message.parts;
|
|
150
|
+
const genAIParts = toGenAIParts(a2aParts);
|
|
151
|
+
parts.push(...genAIParts);
|
|
152
|
+
longRunningToolIds.push(...getLongRunningToolIDs(a2aParts));
|
|
153
|
+
}
|
|
154
|
+
const isTerminal = isTerminalTaskStatusUpdateEvent(a2aTask) || isInputRequiredTaskStatusUpdateEvent(a2aTask);
|
|
155
|
+
const isFailed = isFailedTaskStatusUpdateEvent(a2aTask);
|
|
156
|
+
if (parts.length === 0 && !isTerminal) {
|
|
157
|
+
return void 0;
|
|
158
|
+
}
|
|
159
|
+
return __spreadProps(__spreadValues({}, createAdkEventFromMetadata(a2aTask)), {
|
|
160
|
+
invocationId,
|
|
161
|
+
author: agentName,
|
|
162
|
+
content: isFailed ? void 0 : createModelContent(parts),
|
|
163
|
+
errorMessage: isFailed ? getFailedTaskStatusUpdateEventError(a2aTask) : void 0,
|
|
164
|
+
longRunningToolIds,
|
|
165
|
+
turnComplete: isTerminal
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function createAdkEventFromMetadata(a2aEvent) {
|
|
169
|
+
const metadata = a2aEvent.metadata || {};
|
|
170
|
+
return createEvent({
|
|
171
|
+
branch: metadata[A2AMetadataKeys.BRANCH],
|
|
172
|
+
author: metadata[A2AMetadataKeys.AUTHOR],
|
|
173
|
+
partial: metadata[A2AMetadataKeys.PARTIAL],
|
|
174
|
+
errorCode: metadata[A2AMetadataKeys.ERROR_CODE],
|
|
175
|
+
errorMessage: metadata[A2AMetadataKeys.ERROR_MESSAGE],
|
|
176
|
+
citationMetadata: metadata[A2AMetadataKeys.CITATION_METADATA],
|
|
177
|
+
groundingMetadata: metadata[A2AMetadataKeys.GROUNDING_METADATA],
|
|
178
|
+
usageMetadata: metadata[A2AMetadataKeys.USAGE_METADATA],
|
|
179
|
+
customMetadata: metadata[A2AMetadataKeys.CUSTOM_METADATA],
|
|
180
|
+
actions: createEventActions({
|
|
181
|
+
escalate: !!metadata[A2AMetadataKeys.ESCALATE],
|
|
182
|
+
transferToAgent: metadata[A2AMetadataKeys.TRANSFER_TO_AGENT]
|
|
183
|
+
})
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function getLongRunningToolIDs(parts) {
|
|
187
|
+
const ids = [];
|
|
188
|
+
for (const a2aPart of parts) {
|
|
189
|
+
if (a2aPart.metadata && a2aPart.metadata[A2AMetadataKeys.IS_LONG_RUNNING]) {
|
|
190
|
+
const genAIPart = toGenAIPart(a2aPart);
|
|
191
|
+
if (genAIPart.functionCall && genAIPart.functionCall.id) {
|
|
192
|
+
ids.push(genAIPart.functionCall.id);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return ids;
|
|
197
|
+
}
|
|
198
|
+
export {
|
|
199
|
+
toA2AMessage,
|
|
200
|
+
toAdkEvent
|
|
201
|
+
};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
/**
|
|
21
|
+
* @license
|
|
22
|
+
* Copyright 2026 Google LLC
|
|
23
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
24
|
+
*/
|
|
25
|
+
import { createEventActions } from "../events/event_actions.js";
|
|
26
|
+
import {
|
|
27
|
+
createInputMissingErrorEvent,
|
|
28
|
+
createTaskCompletedEvent,
|
|
29
|
+
createTaskFailedEvent,
|
|
30
|
+
createTaskInputRequiredEvent,
|
|
31
|
+
isInputRequiredTaskStatusUpdateEvent
|
|
32
|
+
} from "./a2a_event.js";
|
|
33
|
+
import {
|
|
34
|
+
getA2AEventMetadata,
|
|
35
|
+
getA2AEventMetadataFromActions,
|
|
36
|
+
getA2ASessionMetadata
|
|
37
|
+
} from "./metadata_converter_utils.js";
|
|
38
|
+
import { toA2AParts, toGenAIParts } from "./part_converter_utils.js";
|
|
39
|
+
function getFinalTaskStatusUpdate(adkEvents, context) {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const finalEventActions = createEventActions();
|
|
42
|
+
for (const adkEvent of adkEvents) {
|
|
43
|
+
if (adkEvent.errorCode || adkEvent.errorMessage) {
|
|
44
|
+
return createTaskFailedEvent({
|
|
45
|
+
taskId: context.requestContext.taskId,
|
|
46
|
+
contextId: context.requestContext.contextId,
|
|
47
|
+
error: new Error(adkEvent.errorMessage || adkEvent.errorCode),
|
|
48
|
+
metadata: __spreadValues(__spreadValues({}, getA2AEventMetadata(adkEvent, context)), getA2AEventMetadataFromActions(finalEventActions))
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
finalEventActions.escalate = finalEventActions.escalate || ((_a = adkEvent.actions) == null ? void 0 : _a.escalate);
|
|
52
|
+
if ((_b = adkEvent.actions) == null ? void 0 : _b.transferToAgent) {
|
|
53
|
+
finalEventActions.transferToAgent = adkEvent.actions.transferToAgent;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const inputRequiredEvent = scanForInputRequiredEvents(adkEvents, context);
|
|
57
|
+
if (inputRequiredEvent) {
|
|
58
|
+
return __spreadProps(__spreadValues({}, inputRequiredEvent), {
|
|
59
|
+
metadata: __spreadValues(__spreadValues({}, inputRequiredEvent.metadata), getA2AEventMetadataFromActions(finalEventActions))
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return createTaskCompletedEvent({
|
|
63
|
+
taskId: context.requestContext.taskId,
|
|
64
|
+
contextId: context.requestContext.contextId,
|
|
65
|
+
metadata: __spreadValues(__spreadValues({}, getA2ASessionMetadata(context)), getA2AEventMetadataFromActions(finalEventActions))
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function scanForInputRequiredEvents(adkEvents, context) {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
const inputRequiredParts = [];
|
|
71
|
+
const inputRequiredFunctionCallIds = /* @__PURE__ */ new Set();
|
|
72
|
+
for (const adkEvent of adkEvents) {
|
|
73
|
+
if (!((_b = (_a = adkEvent.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.length)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
for (const genAIPart of adkEvent.content.parts) {
|
|
77
|
+
const longRunningFunctionCallId = getLongRunnningFunctionCallId(
|
|
78
|
+
genAIPart,
|
|
79
|
+
adkEvent.longRunningToolIds,
|
|
80
|
+
inputRequiredParts
|
|
81
|
+
);
|
|
82
|
+
if (!longRunningFunctionCallId) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const isAlreadyAdded = inputRequiredFunctionCallIds.has(
|
|
86
|
+
longRunningFunctionCallId
|
|
87
|
+
);
|
|
88
|
+
if (isAlreadyAdded) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
inputRequiredParts.push(genAIPart);
|
|
92
|
+
inputRequiredFunctionCallIds.add(longRunningFunctionCallId);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (inputRequiredParts.length > 0) {
|
|
96
|
+
return createTaskInputRequiredEvent({
|
|
97
|
+
taskId: context.requestContext.taskId,
|
|
98
|
+
contextId: context.requestContext.contextId,
|
|
99
|
+
parts: toA2AParts(inputRequiredParts, [...inputRequiredFunctionCallIds]),
|
|
100
|
+
metadata: getA2ASessionMetadata(context)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return void 0;
|
|
104
|
+
}
|
|
105
|
+
function getLongRunnningFunctionCallId(genAIPart, longRunningToolIds = [], inputRequiredParts = []) {
|
|
106
|
+
var _a, _b, _c;
|
|
107
|
+
const functionCallId = (_a = genAIPart.functionCall) == null ? void 0 : _a.id;
|
|
108
|
+
const functionResponseId = (_b = genAIPart.functionResponse) == null ? void 0 : _b.id;
|
|
109
|
+
if (!functionCallId && !functionResponseId) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (functionCallId && longRunningToolIds.includes(functionCallId)) {
|
|
113
|
+
return functionCallId;
|
|
114
|
+
}
|
|
115
|
+
if (functionResponseId && longRunningToolIds.includes(functionResponseId)) {
|
|
116
|
+
return functionResponseId;
|
|
117
|
+
}
|
|
118
|
+
for (const part of inputRequiredParts) {
|
|
119
|
+
if (((_c = part.functionCall) == null ? void 0 : _c.id) === functionResponseId) {
|
|
120
|
+
return functionResponseId;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
function getTaskInputRequiredEvent(task, genAIContent) {
|
|
126
|
+
var _a;
|
|
127
|
+
if (!task || !isInputRequiredTaskStatusUpdateEvent(task) || !task.status.message) {
|
|
128
|
+
return void 0;
|
|
129
|
+
}
|
|
130
|
+
const statusMsg = task.status.message;
|
|
131
|
+
const taskParts = toGenAIParts(statusMsg.parts);
|
|
132
|
+
for (const taskPart of taskParts) {
|
|
133
|
+
const functionCallId = (_a = taskPart.functionCall) == null ? void 0 : _a.id;
|
|
134
|
+
if (!functionCallId) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const hasMatchingResponse = ((genAIContent == null ? void 0 : genAIContent.parts) || []).some(
|
|
138
|
+
(p) => {
|
|
139
|
+
var _a2;
|
|
140
|
+
return ((_a2 = p.functionResponse) == null ? void 0 : _a2.id) === functionCallId;
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
if (!hasMatchingResponse) {
|
|
144
|
+
return createInputMissingErrorEvent({
|
|
145
|
+
taskId: task.id,
|
|
146
|
+
contextId: task.contextId,
|
|
147
|
+
parts: [
|
|
148
|
+
...statusMsg.parts.filter((p) => {
|
|
149
|
+
var _a2;
|
|
150
|
+
return !((_a2 = p.metadata) == null ? void 0 : _a2.validation_error);
|
|
151
|
+
}),
|
|
152
|
+
{
|
|
153
|
+
kind: "text",
|
|
154
|
+
text: "No input provided for function call id ".concat(functionCallId),
|
|
155
|
+
metadata: {
|
|
156
|
+
validation_error: true
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
getFinalTaskStatusUpdate,
|
|
167
|
+
getTaskInputRequiredEvent
|
|
168
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
function createExecutorContext({
|
|
7
|
+
session,
|
|
8
|
+
userContent,
|
|
9
|
+
requestContext
|
|
10
|
+
}) {
|
|
11
|
+
return {
|
|
12
|
+
userId: session.userId,
|
|
13
|
+
sessionId: session.id,
|
|
14
|
+
appName: session.appName,
|
|
15
|
+
readonlyState: session.state,
|
|
16
|
+
events: session.events,
|
|
17
|
+
userContent,
|
|
18
|
+
requestContext
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
createExecutorContext
|
|
23
|
+
};
|