@google/adk 0.5.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 +53 -26
- 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_processor_utils.js +180 -0
- package/dist/cjs/a2a/executor_context.js +1 -1
- package/dist/cjs/a2a/metadata_converter_utils.js +1 -0
- package/dist/cjs/a2a/part_converter_utils.js +24 -13
- package/dist/cjs/agents/llm_agent.js +17 -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 +24 -3
- package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/cjs/artifacts/file_artifact_service.js +35 -4
- package/dist/cjs/common.js +37 -0
- 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 +38 -14
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/memory/in_memory_memory_service.js +1 -1
- package/dist/cjs/runner/runner.js +19 -10
- package/dist/cjs/sessions/db/operations.js +4 -14
- package/dist/cjs/sessions/state.js +2 -2
- package/dist/cjs/tools/agent_tool.js +6 -5
- package/dist/cjs/tools/load_artifacts_tool.js +188 -0
- package/dist/cjs/tools/load_memory_tool.js +107 -0
- package/dist/cjs/tools/preload_memory_tool.js +109 -0
- package/dist/cjs/utils/logger.js +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_event.js +52 -26
- 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_processor_utils.js +159 -0
- package/dist/esm/a2a/executor_context.js +1 -1
- package/dist/esm/a2a/metadata_converter_utils.js +1 -0
- package/dist/esm/a2a/part_converter_utils.js +24 -13
- package/dist/esm/agents/llm_agent.js +17 -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 +25 -4
- package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/esm/artifacts/file_artifact_service.js +30 -3
- package/dist/esm/common.js +33 -1
- 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 +38 -14
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/memory/in_memory_memory_service.js +1 -1
- package/dist/esm/runner/runner.js +17 -9
- package/dist/esm/sessions/db/operations.js +4 -14
- package/dist/esm/sessions/state.js +2 -2
- package/dist/esm/tools/agent_tool.js +6 -5
- package/dist/esm/tools/load_artifacts_tool.js +159 -0
- package/dist/esm/tools/load_memory_tool.js +78 -0
- package/dist/esm/tools/preload_memory_tool.js +80 -0
- package/dist/esm/utils/logger.js +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/types/a2a/a2a_event.d.ts +23 -6
- 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_processor_utils.d.ts +24 -0
- package/dist/types/a2a/executor_context.d.ts +1 -1
- package/dist/types/a2a/metadata_converter_utils.d.ts +2 -1
- package/dist/types/agents/llm_agent.d.ts +6 -0
- package/dist/types/agents/loop_agent.d.ts +1 -1
- package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
- package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
- package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
- package/dist/types/common.d.ts +16 -1
- 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/runner/runner.d.ts +13 -0
- package/dist/types/sessions/db/operations.d.ts +2 -3
- 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/preload_memory_tool.d.ts +23 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/web/a2a/a2a_event.js +52 -26
- 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_processor_utils.js +168 -0
- package/dist/web/a2a/executor_context.js +1 -1
- package/dist/web/a2a/metadata_converter_utils.js +1 -0
- package/dist/web/a2a/part_converter_utils.js +24 -13
- package/dist/web/agents/llm_agent.js +17 -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 +25 -4
- package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
- package/dist/web/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/web/artifacts/file_artifact_service.js +30 -3
- package/dist/web/common.js +33 -1
- 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 +1 -1
- package/dist/web/index.js.map +4 -4
- package/dist/web/memory/in_memory_memory_service.js +1 -1
- package/dist/web/runner/runner.js +17 -9
- package/dist/web/sessions/db/operations.js +4 -14
- package/dist/web/sessions/state.js +2 -2
- package/dist/web/tools/agent_tool.js +6 -5
- package/dist/web/tools/load_artifacts_tool.js +150 -0
- package/dist/web/tools/load_memory_tool.js +77 -0
- package/dist/web/tools/preload_memory_tool.js +75 -0
- package/dist/web/utils/logger.js +1 -0
- package/dist/web/version.js +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
25
25
|
var a2a_event_exports = {};
|
|
26
26
|
__export(a2a_event_exports, {
|
|
27
27
|
MessageRole: () => MessageRole,
|
|
28
|
+
TaskState: () => TaskState,
|
|
28
29
|
createInputMissingErrorEvent: () => createInputMissingErrorEvent,
|
|
29
30
|
createTask: () => createTask,
|
|
30
31
|
createTaskArtifactUpdateEvent: () => createTaskArtifactUpdateEvent,
|
|
@@ -55,6 +56,16 @@ var MessageRole = /* @__PURE__ */ ((MessageRole2) => {
|
|
|
55
56
|
MessageRole2["AGENT"] = "agent";
|
|
56
57
|
return MessageRole2;
|
|
57
58
|
})(MessageRole || {});
|
|
59
|
+
var TaskState = /* @__PURE__ */ ((TaskState2) => {
|
|
60
|
+
TaskState2["SUBMITTED"] = "submitted";
|
|
61
|
+
TaskState2["WORKING"] = "working";
|
|
62
|
+
TaskState2["COMPLETED"] = "completed";
|
|
63
|
+
TaskState2["FAILED"] = "failed";
|
|
64
|
+
TaskState2["CANCELED"] = "canceled";
|
|
65
|
+
TaskState2["REJECTED"] = "rejected";
|
|
66
|
+
TaskState2["INPUT_REQUIRED"] = "input-required";
|
|
67
|
+
return TaskState2;
|
|
68
|
+
})(TaskState || {});
|
|
58
69
|
function isTaskStatusUpdateEvent(event) {
|
|
59
70
|
return (event == null ? void 0 : event.kind) === "status-update";
|
|
60
71
|
}
|
|
@@ -77,13 +88,18 @@ function getEventMetadata(event) {
|
|
|
77
88
|
return {};
|
|
78
89
|
}
|
|
79
90
|
function isFailedTaskStatusUpdateEvent(event) {
|
|
80
|
-
return (isTaskStatusUpdateEvent(event) || isTask(event)) && event.status.state === "failed"
|
|
91
|
+
return (isTaskStatusUpdateEvent(event) || isTask(event)) && event.status.state === "failed" /* FAILED */;
|
|
81
92
|
}
|
|
82
93
|
function isTerminalTaskStatusUpdateEvent(event) {
|
|
83
|
-
return (isTaskStatusUpdateEvent(event) || isTask(event)) && [
|
|
94
|
+
return (isTaskStatusUpdateEvent(event) || isTask(event)) && [
|
|
95
|
+
"completed" /* COMPLETED */,
|
|
96
|
+
"failed" /* FAILED */,
|
|
97
|
+
"canceled" /* CANCELED */,
|
|
98
|
+
"rejected" /* REJECTED */
|
|
99
|
+
].includes(event.status.state);
|
|
84
100
|
}
|
|
85
101
|
function isInputRequiredTaskStatusUpdateEvent(event) {
|
|
86
|
-
return (isTaskStatusUpdateEvent(event) || isTask(event)) && event.status.state === "input-required"
|
|
102
|
+
return (isTaskStatusUpdateEvent(event) || isTask(event)) && event.status.state === "input-required" /* INPUT_REQUIRED */;
|
|
87
103
|
}
|
|
88
104
|
function getFailedTaskStatusUpdateEventError(event) {
|
|
89
105
|
var _a;
|
|
@@ -102,7 +118,8 @@ function getFailedTaskStatusUpdateEventError(event) {
|
|
|
102
118
|
function createTaskSubmittedEvent({
|
|
103
119
|
taskId,
|
|
104
120
|
contextId,
|
|
105
|
-
message
|
|
121
|
+
message,
|
|
122
|
+
metadata
|
|
106
123
|
}) {
|
|
107
124
|
return {
|
|
108
125
|
kind: "status-update",
|
|
@@ -110,16 +127,18 @@ function createTaskSubmittedEvent({
|
|
|
110
127
|
contextId,
|
|
111
128
|
final: false,
|
|
112
129
|
status: {
|
|
113
|
-
state: "submitted"
|
|
130
|
+
state: "submitted" /* SUBMITTED */,
|
|
114
131
|
message,
|
|
115
132
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
116
|
-
}
|
|
133
|
+
},
|
|
134
|
+
metadata
|
|
117
135
|
};
|
|
118
136
|
}
|
|
119
137
|
function createTask({
|
|
120
138
|
contextId,
|
|
121
139
|
message,
|
|
122
|
-
taskId
|
|
140
|
+
taskId,
|
|
141
|
+
metadata
|
|
123
142
|
}) {
|
|
124
143
|
return {
|
|
125
144
|
kind: "task",
|
|
@@ -127,15 +146,17 @@ function createTask({
|
|
|
127
146
|
contextId,
|
|
128
147
|
history: [message],
|
|
129
148
|
status: {
|
|
130
|
-
state: "submitted"
|
|
149
|
+
state: "submitted" /* SUBMITTED */,
|
|
131
150
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
132
|
-
}
|
|
151
|
+
},
|
|
152
|
+
metadata
|
|
133
153
|
};
|
|
134
154
|
}
|
|
135
155
|
function createTaskWorkingEvent({
|
|
136
156
|
taskId,
|
|
137
157
|
contextId,
|
|
138
|
-
message
|
|
158
|
+
message,
|
|
159
|
+
metadata
|
|
139
160
|
}) {
|
|
140
161
|
return {
|
|
141
162
|
kind: "status-update",
|
|
@@ -143,16 +164,17 @@ function createTaskWorkingEvent({
|
|
|
143
164
|
contextId,
|
|
144
165
|
final: false,
|
|
145
166
|
status: {
|
|
146
|
-
state: "working"
|
|
167
|
+
state: "working" /* WORKING */,
|
|
147
168
|
message,
|
|
148
169
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
149
|
-
}
|
|
170
|
+
},
|
|
171
|
+
metadata
|
|
150
172
|
};
|
|
151
173
|
}
|
|
152
174
|
function createTaskCompletedEvent({
|
|
153
175
|
taskId,
|
|
154
176
|
contextId,
|
|
155
|
-
metadata
|
|
177
|
+
metadata
|
|
156
178
|
}) {
|
|
157
179
|
return {
|
|
158
180
|
kind: "status-update",
|
|
@@ -160,7 +182,7 @@ function createTaskCompletedEvent({
|
|
|
160
182
|
contextId,
|
|
161
183
|
final: true,
|
|
162
184
|
status: {
|
|
163
|
-
state: "completed"
|
|
185
|
+
state: "completed" /* COMPLETED */,
|
|
164
186
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
165
187
|
},
|
|
166
188
|
metadata
|
|
@@ -183,9 +205,9 @@ function createTaskArtifactUpdateEvent({
|
|
|
183
205
|
lastChunk,
|
|
184
206
|
artifact: {
|
|
185
207
|
artifactId: artifactId || (0, import_env_aware_utils.randomUUID)(),
|
|
186
|
-
parts
|
|
187
|
-
|
|
188
|
-
|
|
208
|
+
parts
|
|
209
|
+
},
|
|
210
|
+
metadata
|
|
189
211
|
};
|
|
190
212
|
}
|
|
191
213
|
function createTaskFailedEvent({
|
|
@@ -198,8 +220,9 @@ function createTaskFailedEvent({
|
|
|
198
220
|
kind: "status-update",
|
|
199
221
|
taskId,
|
|
200
222
|
contextId,
|
|
223
|
+
final: true,
|
|
201
224
|
status: {
|
|
202
|
-
state: "failed"
|
|
225
|
+
state: "failed" /* FAILED */,
|
|
203
226
|
message: {
|
|
204
227
|
kind: "message",
|
|
205
228
|
messageId: (0, import_env_aware_utils.randomUUID)(),
|
|
@@ -215,14 +238,14 @@ function createTaskFailedEvent({
|
|
|
215
238
|
},
|
|
216
239
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
217
240
|
},
|
|
218
|
-
metadata
|
|
219
|
-
final: true
|
|
241
|
+
metadata
|
|
220
242
|
};
|
|
221
243
|
}
|
|
222
244
|
function createTaskInputRequiredEvent({
|
|
223
245
|
taskId,
|
|
224
246
|
contextId,
|
|
225
|
-
parts
|
|
247
|
+
parts,
|
|
248
|
+
metadata
|
|
226
249
|
}) {
|
|
227
250
|
return {
|
|
228
251
|
kind: "status-update",
|
|
@@ -230,7 +253,7 @@ function createTaskInputRequiredEvent({
|
|
|
230
253
|
contextId,
|
|
231
254
|
final: true,
|
|
232
255
|
status: {
|
|
233
|
-
state: "input-required"
|
|
256
|
+
state: "input-required" /* INPUT_REQUIRED */,
|
|
234
257
|
message: {
|
|
235
258
|
kind: "message",
|
|
236
259
|
messageId: (0, import_env_aware_utils.randomUUID)(),
|
|
@@ -240,13 +263,15 @@ function createTaskInputRequiredEvent({
|
|
|
240
263
|
parts
|
|
241
264
|
},
|
|
242
265
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
243
|
-
}
|
|
266
|
+
},
|
|
267
|
+
metadata
|
|
244
268
|
};
|
|
245
269
|
}
|
|
246
270
|
function createInputMissingErrorEvent({
|
|
247
271
|
taskId,
|
|
248
272
|
contextId,
|
|
249
|
-
parts
|
|
273
|
+
parts,
|
|
274
|
+
metadata
|
|
250
275
|
}) {
|
|
251
276
|
return {
|
|
252
277
|
kind: "status-update",
|
|
@@ -254,7 +279,7 @@ function createInputMissingErrorEvent({
|
|
|
254
279
|
contextId,
|
|
255
280
|
final: true,
|
|
256
281
|
status: {
|
|
257
|
-
state: "input-required"
|
|
282
|
+
state: "input-required" /* INPUT_REQUIRED */,
|
|
258
283
|
message: {
|
|
259
284
|
kind: "message",
|
|
260
285
|
messageId: (0, import_env_aware_utils.randomUUID)(),
|
|
@@ -264,12 +289,14 @@ function createInputMissingErrorEvent({
|
|
|
264
289
|
parts
|
|
265
290
|
},
|
|
266
291
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
267
|
-
}
|
|
292
|
+
},
|
|
293
|
+
metadata
|
|
268
294
|
};
|
|
269
295
|
}
|
|
270
296
|
// Annotate the CommonJS export names for ESM import in node:
|
|
271
297
|
0 && (module.exports = {
|
|
272
298
|
MessageRole,
|
|
299
|
+
TaskState,
|
|
273
300
|
createInputMissingErrorEvent,
|
|
274
301
|
createTask,
|
|
275
302
|
createTaskArtifactUpdateEvent,
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
+
var __export = (target, all) => {
|
|
13
|
+
for (var name in all)
|
|
14
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15
|
+
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
+
for (let key of __getOwnPropNames(from))
|
|
19
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
20
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var a2a_remote_agent_exports = {};
|
|
26
|
+
__export(a2a_remote_agent_exports, {
|
|
27
|
+
AGENT_CARD_PATH: () => import_sdk.AGENT_CARD_PATH,
|
|
28
|
+
RemoteA2AAgent: () => RemoteA2AAgent
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(a2a_remote_agent_exports);
|
|
31
|
+
var import_sdk = require("@a2a-js/sdk");
|
|
32
|
+
var import_client = require("@a2a-js/sdk/client");
|
|
33
|
+
var import_base_agent = require("../agents/base_agent.js");
|
|
34
|
+
var import_event = require("../events/event.js");
|
|
35
|
+
var import_env_aware_utils = require("../utils/env_aware_utils.js");
|
|
36
|
+
var import_logger = require("../utils/logger.js");
|
|
37
|
+
var import_a2a_event = require("./a2a_event.js");
|
|
38
|
+
var import_a2a_remote_agent_run_processor = require("./a2a_remote_agent_run_processor.js");
|
|
39
|
+
var import_a2a_remote_agent_utils = require("./a2a_remote_agent_utils.js");
|
|
40
|
+
var import_agent_card = require("./agent_card.js");
|
|
41
|
+
var import_event_converter_utils = require("./event_converter_utils.js");
|
|
42
|
+
var import_metadata_converter_utils = require("./metadata_converter_utils.js");
|
|
43
|
+
var import_part_converter_utils = require("./part_converter_utils.js");
|
|
44
|
+
/**
|
|
45
|
+
* @license
|
|
46
|
+
* Copyright 2026 Google LLC
|
|
47
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
48
|
+
*/
|
|
49
|
+
class RemoteA2AAgent extends import_base_agent.BaseAgent {
|
|
50
|
+
constructor(a2aConfig) {
|
|
51
|
+
super(a2aConfig);
|
|
52
|
+
this.a2aConfig = a2aConfig;
|
|
53
|
+
this.isInitialized = false;
|
|
54
|
+
if (!a2aConfig.agentCard) {
|
|
55
|
+
throw new Error("AgentCard must be provided");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async init() {
|
|
59
|
+
if (this.isInitialized) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this.card = await (0, import_agent_card.resolveAgentCard)(this.a2aConfig.agentCard);
|
|
63
|
+
const factory = this.a2aConfig.clientFactory || new import_client.ClientFactory();
|
|
64
|
+
this.client = await factory.createFromAgentCard(this.card);
|
|
65
|
+
this.isInitialized = true;
|
|
66
|
+
}
|
|
67
|
+
async *runAsyncImpl(context) {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
await this.init();
|
|
70
|
+
try {
|
|
71
|
+
const events = context.session.events;
|
|
72
|
+
if (events.length === 0) {
|
|
73
|
+
throw new Error("No events in session to send");
|
|
74
|
+
}
|
|
75
|
+
const userFnCall = (0, import_a2a_remote_agent_utils.getUserFunctionCallAt)(
|
|
76
|
+
context.session,
|
|
77
|
+
events.length - 1
|
|
78
|
+
);
|
|
79
|
+
let parts;
|
|
80
|
+
let taskId = void 0;
|
|
81
|
+
let contextId = void 0;
|
|
82
|
+
if (userFnCall) {
|
|
83
|
+
const event = userFnCall.response;
|
|
84
|
+
parts = (0, import_part_converter_utils.toA2AParts)(
|
|
85
|
+
((_a = event.content) == null ? void 0 : _a.parts) || [],
|
|
86
|
+
event.longRunningToolIds
|
|
87
|
+
);
|
|
88
|
+
taskId = userFnCall.taskId;
|
|
89
|
+
contextId = userFnCall.contextId;
|
|
90
|
+
} else {
|
|
91
|
+
const missing = (0, import_a2a_remote_agent_utils.toMissingRemoteSessionParts)(context, context.session);
|
|
92
|
+
parts = missing.parts;
|
|
93
|
+
contextId = missing.contextId;
|
|
94
|
+
}
|
|
95
|
+
const message = {
|
|
96
|
+
kind: "message",
|
|
97
|
+
messageId: (0, import_env_aware_utils.randomUUID)(),
|
|
98
|
+
role: import_a2a_event.MessageRole.USER,
|
|
99
|
+
parts,
|
|
100
|
+
metadata: {
|
|
101
|
+
...(0, import_metadata_converter_utils.getA2ASessionMetadata)({
|
|
102
|
+
appName: context.session.appName,
|
|
103
|
+
userId: context.session.userId,
|
|
104
|
+
sessionId: context.session.id
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
if (taskId) message.taskId = taskId;
|
|
109
|
+
if (contextId) message.contextId = contextId;
|
|
110
|
+
const params = {
|
|
111
|
+
message,
|
|
112
|
+
configuration: this.a2aConfig.messageSendConfig
|
|
113
|
+
};
|
|
114
|
+
const processor = new import_a2a_remote_agent_run_processor.A2ARemoteAgentRunProcessor(params);
|
|
115
|
+
if (this.a2aConfig.beforeRequestCallbacks) {
|
|
116
|
+
for (const callback of this.a2aConfig.beforeRequestCallbacks) {
|
|
117
|
+
await callback(context, params);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const useStreaming = ((_b = this.card.capabilities) == null ? void 0 : _b.streaming) !== false;
|
|
121
|
+
if (useStreaming) {
|
|
122
|
+
for await (const chunk of this.client.sendMessageStream(params)) {
|
|
123
|
+
if (this.a2aConfig.afterRequestCallbacks) {
|
|
124
|
+
for (const callback of this.a2aConfig.afterRequestCallbacks) {
|
|
125
|
+
await callback(context, chunk);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const adkEvent = (0, import_event_converter_utils.toAdkEvent)(chunk, context.invocationId, this.name);
|
|
129
|
+
if (!adkEvent) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
processor.updateCustomMetadata(adkEvent, chunk);
|
|
133
|
+
const eventsToEmit = processor.aggregatePartial(
|
|
134
|
+
context,
|
|
135
|
+
chunk,
|
|
136
|
+
adkEvent
|
|
137
|
+
);
|
|
138
|
+
for (const ev of eventsToEmit) {
|
|
139
|
+
yield ev;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
const result = await this.client.sendMessage(params);
|
|
144
|
+
if (this.a2aConfig.afterRequestCallbacks) {
|
|
145
|
+
for (const callback of this.a2aConfig.afterRequestCallbacks) {
|
|
146
|
+
await callback(context, result);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const adkEvent = (0, import_event_converter_utils.toAdkEvent)(result, context.invocationId, this.name);
|
|
150
|
+
if (adkEvent) {
|
|
151
|
+
processor.updateCustomMetadata(adkEvent, result);
|
|
152
|
+
yield adkEvent;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
} catch (e) {
|
|
156
|
+
const error = e;
|
|
157
|
+
import_logger.logger.error(`A2ARemoteAgent ${this.name} failed:`, error);
|
|
158
|
+
yield (0, import_event.createEvent)({
|
|
159
|
+
author: this.name,
|
|
160
|
+
invocationId: context.invocationId,
|
|
161
|
+
errorMessage: error.message,
|
|
162
|
+
turnComplete: true
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
runLiveImpl(_context) {
|
|
167
|
+
throw new Error("Live mode is not supported in A2ARemoteAgent yet.");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
171
|
+
0 && (module.exports = {
|
|
172
|
+
AGENT_CARD_PATH,
|
|
173
|
+
RemoteA2AAgent
|
|
174
|
+
});
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
+
var __export = (target, all) => {
|
|
13
|
+
for (var name in all)
|
|
14
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15
|
+
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
+
for (let key of __getOwnPropNames(from))
|
|
19
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
20
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var a2a_remote_agent_run_processor_exports = {};
|
|
26
|
+
__export(a2a_remote_agent_run_processor_exports, {
|
|
27
|
+
A2ARemoteAgentRunProcessor: () => A2ARemoteAgentRunProcessor
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(a2a_remote_agent_run_processor_exports);
|
|
30
|
+
var import_genai = require("@google/genai");
|
|
31
|
+
var import_event = require("../events/event.js");
|
|
32
|
+
var import_a2a_event = require("./a2a_event.js");
|
|
33
|
+
var import_metadata_converter_utils = require("./metadata_converter_utils.js");
|
|
34
|
+
/**
|
|
35
|
+
* @license
|
|
36
|
+
* Copyright 2026 Google LLC
|
|
37
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
38
|
+
*/
|
|
39
|
+
class A2ARemoteAgentRunProcessor {
|
|
40
|
+
constructor(request) {
|
|
41
|
+
this.request = request;
|
|
42
|
+
this.aggregations = /* @__PURE__ */ new Map();
|
|
43
|
+
this.aggregationOrder = [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* aggregatePartial stores contents of partial events to emit them with the terminal event.
|
|
47
|
+
* It can return multiple events to emit instead of just the provided one.
|
|
48
|
+
*/
|
|
49
|
+
aggregatePartial(context, a2aEvent, adkEvent) {
|
|
50
|
+
const metadata = (0, import_a2a_event.getEventMetadata)(a2aEvent);
|
|
51
|
+
if (metadata[import_metadata_converter_utils.A2AMetadataKeys.PARTIAL]) {
|
|
52
|
+
return [adkEvent];
|
|
53
|
+
}
|
|
54
|
+
if ((0, import_a2a_event.isTaskStatusUpdateEvent)(a2aEvent) && a2aEvent.final) {
|
|
55
|
+
const events = [];
|
|
56
|
+
for (const aid of this.aggregationOrder) {
|
|
57
|
+
const agg = this.aggregations.get(aid);
|
|
58
|
+
if (agg) {
|
|
59
|
+
events.push(this.buildNonPartialAggregation(context, agg));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
this.aggregations.clear();
|
|
63
|
+
this.aggregationOrder = [];
|
|
64
|
+
return [...events, adkEvent];
|
|
65
|
+
}
|
|
66
|
+
if ((0, import_a2a_event.isTask)(a2aEvent)) {
|
|
67
|
+
this.aggregations.clear();
|
|
68
|
+
this.aggregationOrder = [];
|
|
69
|
+
return [adkEvent];
|
|
70
|
+
}
|
|
71
|
+
if (!(0, import_a2a_event.isTaskArtifactUpdateEvent)(a2aEvent)) {
|
|
72
|
+
return [adkEvent];
|
|
73
|
+
}
|
|
74
|
+
const artifactId = a2aEvent.artifact.artifactId;
|
|
75
|
+
if (!a2aEvent.append) {
|
|
76
|
+
this.removeAggregation(artifactId);
|
|
77
|
+
if (a2aEvent.lastChunk) {
|
|
78
|
+
adkEvent.partial = false;
|
|
79
|
+
return [adkEvent];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let aggregation = this.aggregations.get(artifactId);
|
|
83
|
+
if (!aggregation) {
|
|
84
|
+
aggregation = {
|
|
85
|
+
aggregatedText: "",
|
|
86
|
+
aggregatedThoughts: "",
|
|
87
|
+
parts: []
|
|
88
|
+
};
|
|
89
|
+
this.aggregations.set(artifactId, aggregation);
|
|
90
|
+
this.aggregationOrder.push(artifactId);
|
|
91
|
+
} else {
|
|
92
|
+
this.aggregationOrder = this.aggregationOrder.filter(
|
|
93
|
+
(id) => id !== artifactId
|
|
94
|
+
);
|
|
95
|
+
this.aggregationOrder.push(artifactId);
|
|
96
|
+
}
|
|
97
|
+
this.updateAggregation(aggregation, adkEvent);
|
|
98
|
+
if (!a2aEvent.lastChunk) {
|
|
99
|
+
return [adkEvent];
|
|
100
|
+
}
|
|
101
|
+
this.removeAggregation(artifactId);
|
|
102
|
+
return [adkEvent, this.buildNonPartialAggregation(context, aggregation)];
|
|
103
|
+
}
|
|
104
|
+
removeAggregation(artifactId) {
|
|
105
|
+
this.aggregations.delete(artifactId);
|
|
106
|
+
this.aggregationOrder = this.aggregationOrder.filter(
|
|
107
|
+
(id) => id !== artifactId
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
updateAggregation(agg, event) {
|
|
111
|
+
var _a;
|
|
112
|
+
const parts = ((_a = event.content) == null ? void 0 : _a.parts) || [];
|
|
113
|
+
for (const part of parts) {
|
|
114
|
+
if (part.text && part.text !== "") {
|
|
115
|
+
if (part.thought) {
|
|
116
|
+
agg.aggregatedThoughts += part.text;
|
|
117
|
+
} else {
|
|
118
|
+
agg.aggregatedText += part.text;
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
this.promoteTextBlocksToParts(agg);
|
|
122
|
+
agg.parts.push(part);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (event.citationMetadata) {
|
|
126
|
+
if (!agg.citations) {
|
|
127
|
+
agg.citations = { citations: [] };
|
|
128
|
+
}
|
|
129
|
+
if (!agg.citations.citations) {
|
|
130
|
+
agg.citations.citations = [];
|
|
131
|
+
}
|
|
132
|
+
agg.citations.citations.push(...event.citationMetadata.citations || []);
|
|
133
|
+
}
|
|
134
|
+
if (event.customMetadata) {
|
|
135
|
+
if (!agg.customMeta) {
|
|
136
|
+
agg.customMeta = {};
|
|
137
|
+
}
|
|
138
|
+
Object.assign(agg.customMeta, event.customMetadata);
|
|
139
|
+
}
|
|
140
|
+
if (event.groundingMetadata) {
|
|
141
|
+
agg.grounding = event.groundingMetadata;
|
|
142
|
+
}
|
|
143
|
+
if (event.usageMetadata) {
|
|
144
|
+
agg.usage = event.usageMetadata;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
buildNonPartialAggregation(context, agg) {
|
|
148
|
+
this.promoteTextBlocksToParts(agg);
|
|
149
|
+
const result = (0, import_event.createEvent)({
|
|
150
|
+
author: context.agent.name,
|
|
151
|
+
invocationId: context.invocationId,
|
|
152
|
+
content: agg.parts.length > 0 ? (0, import_genai.createModelContent)([...agg.parts]) : void 0,
|
|
153
|
+
customMetadata: agg.customMeta,
|
|
154
|
+
groundingMetadata: agg.grounding,
|
|
155
|
+
citationMetadata: agg.citations,
|
|
156
|
+
usageMetadata: agg.usage,
|
|
157
|
+
turnComplete: false,
|
|
158
|
+
partial: false
|
|
159
|
+
});
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
promoteTextBlocksToParts(agg) {
|
|
163
|
+
if (agg.aggregatedThoughts !== "") {
|
|
164
|
+
agg.parts.push({ thought: true, text: agg.aggregatedThoughts });
|
|
165
|
+
agg.aggregatedThoughts = "";
|
|
166
|
+
}
|
|
167
|
+
if (agg.aggregatedText !== "") {
|
|
168
|
+
agg.parts.push({ text: agg.aggregatedText });
|
|
169
|
+
agg.aggregatedText = "";
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Adds request and response metadata to the event.
|
|
174
|
+
*/
|
|
175
|
+
updateCustomMetadata(event, response) {
|
|
176
|
+
const toAdd = {};
|
|
177
|
+
if (this.request && event.turnComplete) {
|
|
178
|
+
toAdd["request"] = this.request;
|
|
179
|
+
}
|
|
180
|
+
if (response) {
|
|
181
|
+
toAdd["response"] = response;
|
|
182
|
+
}
|
|
183
|
+
if (Object.keys(toAdd).length === 0) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (!event.customMetadata) {
|
|
187
|
+
event.customMetadata = {};
|
|
188
|
+
}
|
|
189
|
+
for (const [k, v] of Object.entries(toAdd)) {
|
|
190
|
+
if (v === void 0 || v === null) continue;
|
|
191
|
+
event.customMetadata[`a2a:${k}`] = v;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
196
|
+
0 && (module.exports = {
|
|
197
|
+
A2ARemoteAgentRunProcessor
|
|
198
|
+
});
|