@google/adk 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/a2a/a2a_event.js +53 -26
  3. package/dist/cjs/a2a/a2a_remote_agent.js +179 -0
  4. package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +205 -0
  5. package/dist/cjs/a2a/a2a_remote_agent_utils.js +165 -0
  6. package/dist/cjs/a2a/agent_card.js +380 -0
  7. package/dist/cjs/a2a/agent_executor.js +221 -0
  8. package/dist/cjs/a2a/agent_to_a2a.js +115 -0
  9. package/dist/cjs/a2a/event_processor_utils.js +180 -0
  10. package/dist/cjs/a2a/executor_context.js +1 -1
  11. package/dist/cjs/a2a/metadata_converter_utils.js +1 -0
  12. package/dist/cjs/a2a/part_converter_utils.js +24 -13
  13. package/dist/cjs/agents/llm_agent.js +17 -0
  14. package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
  15. package/dist/cjs/agents/processors/content_request_processor.js +24 -3
  16. package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
  17. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  18. package/dist/cjs/artifacts/file_artifact_service.js +35 -4
  19. package/dist/cjs/common.js +37 -0
  20. package/dist/cjs/context/base_context_compactor.js +27 -0
  21. package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
  22. package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
  23. package/dist/cjs/context/token_based_context_compactor.js +135 -0
  24. package/dist/cjs/context/truncating_context_compactor.js +58 -0
  25. package/dist/cjs/events/compacted_event.js +53 -0
  26. package/dist/cjs/index.js +38 -14
  27. package/dist/cjs/index.js.map +4 -4
  28. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  29. package/dist/cjs/runner/runner.js +19 -10
  30. package/dist/cjs/sessions/db/operations.js +4 -14
  31. package/dist/cjs/sessions/state.js +2 -2
  32. package/dist/cjs/tools/agent_tool.js +6 -5
  33. package/dist/cjs/tools/load_artifacts_tool.js +188 -0
  34. package/dist/cjs/tools/load_memory_tool.js +107 -0
  35. package/dist/cjs/tools/preload_memory_tool.js +109 -0
  36. package/dist/cjs/utils/gemini_schema_util.js +54 -12
  37. package/dist/cjs/utils/logger.js +1 -0
  38. package/dist/cjs/version.js +1 -1
  39. package/dist/esm/a2a/a2a_event.js +52 -26
  40. package/dist/esm/a2a/a2a_remote_agent.js +153 -0
  41. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +182 -0
  42. package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
  43. package/dist/esm/a2a/agent_card.js +340 -0
  44. package/dist/esm/a2a/agent_executor.js +202 -0
  45. package/dist/esm/a2a/agent_to_a2a.js +80 -0
  46. package/dist/esm/a2a/event_processor_utils.js +159 -0
  47. package/dist/esm/a2a/executor_context.js +1 -1
  48. package/dist/esm/a2a/metadata_converter_utils.js +1 -0
  49. package/dist/esm/a2a/part_converter_utils.js +24 -13
  50. package/dist/esm/agents/llm_agent.js +17 -0
  51. package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
  52. package/dist/esm/agents/processors/content_request_processor.js +25 -4
  53. package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
  54. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  55. package/dist/esm/artifacts/file_artifact_service.js +30 -3
  56. package/dist/esm/common.js +33 -1
  57. package/dist/esm/context/base_context_compactor.js +5 -0
  58. package/dist/esm/context/summarizers/base_summarizer.js +5 -0
  59. package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
  60. package/dist/esm/context/token_based_context_compactor.js +105 -0
  61. package/dist/esm/context/truncating_context_compactor.js +28 -0
  62. package/dist/esm/events/compacted_event.js +22 -0
  63. package/dist/esm/index.js +38 -14
  64. package/dist/esm/index.js.map +4 -4
  65. package/dist/esm/memory/in_memory_memory_service.js +1 -1
  66. package/dist/esm/runner/runner.js +17 -9
  67. package/dist/esm/sessions/db/operations.js +4 -14
  68. package/dist/esm/sessions/state.js +2 -2
  69. package/dist/esm/tools/agent_tool.js +6 -5
  70. package/dist/esm/tools/load_artifacts_tool.js +159 -0
  71. package/dist/esm/tools/load_memory_tool.js +78 -0
  72. package/dist/esm/tools/preload_memory_tool.js +80 -0
  73. package/dist/esm/utils/gemini_schema_util.js +54 -12
  74. package/dist/esm/utils/logger.js +1 -0
  75. package/dist/esm/version.js +1 -1
  76. package/dist/types/a2a/a2a_event.d.ts +23 -6
  77. package/dist/types/a2a/a2a_remote_agent.d.ts +67 -0
  78. package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
  79. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
  80. package/dist/types/a2a/agent_card.d.ts +23 -0
  81. package/dist/types/a2a/agent_executor.d.ts +52 -0
  82. package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
  83. package/dist/types/a2a/event_processor_utils.d.ts +24 -0
  84. package/dist/types/a2a/executor_context.d.ts +1 -1
  85. package/dist/types/a2a/metadata_converter_utils.d.ts +2 -1
  86. package/dist/types/agents/llm_agent.d.ts +6 -0
  87. package/dist/types/agents/loop_agent.d.ts +1 -1
  88. package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
  89. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
  90. package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
  91. package/dist/types/common.d.ts +16 -1
  92. package/dist/types/context/base_context_compactor.d.ts +24 -0
  93. package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
  94. package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
  95. package/dist/types/context/token_based_context_compactor.d.ts +33 -0
  96. package/dist/types/context/truncating_context_compactor.d.ts +24 -0
  97. package/dist/types/events/compacted_event.d.ts +33 -0
  98. package/dist/types/index.d.ts +8 -0
  99. package/dist/types/runner/runner.d.ts +13 -0
  100. package/dist/types/sessions/db/operations.d.ts +2 -3
  101. package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
  102. package/dist/types/tools/load_memory_tool.d.ts +22 -0
  103. package/dist/types/tools/preload_memory_tool.d.ts +23 -0
  104. package/dist/types/version.d.ts +1 -1
  105. package/dist/web/a2a/a2a_event.js +52 -26
  106. package/dist/web/a2a/a2a_remote_agent.js +184 -0
  107. package/dist/web/a2a/a2a_remote_agent_run_processor.js +182 -0
  108. package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
  109. package/dist/web/a2a/agent_card.js +340 -0
  110. package/dist/web/a2a/agent_executor.js +216 -0
  111. package/dist/web/a2a/agent_to_a2a.js +80 -0
  112. package/dist/web/a2a/event_processor_utils.js +168 -0
  113. package/dist/web/a2a/executor_context.js +1 -1
  114. package/dist/web/a2a/metadata_converter_utils.js +1 -0
  115. package/dist/web/a2a/part_converter_utils.js +24 -13
  116. package/dist/web/agents/llm_agent.js +17 -0
  117. package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
  118. package/dist/web/agents/processors/content_request_processor.js +25 -4
  119. package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
  120. package/dist/web/agents/processors/instructions_llm_request_processor.js +1 -1
  121. package/dist/web/artifacts/file_artifact_service.js +30 -3
  122. package/dist/web/common.js +33 -1
  123. package/dist/web/context/base_context_compactor.js +5 -0
  124. package/dist/web/context/summarizers/base_summarizer.js +5 -0
  125. package/dist/web/context/summarizers/llm_summarizer.js +74 -0
  126. package/dist/web/context/token_based_context_compactor.js +105 -0
  127. package/dist/web/context/truncating_context_compactor.js +28 -0
  128. package/dist/web/events/compacted_event.js +40 -0
  129. package/dist/web/index.js +1 -1
  130. package/dist/web/index.js.map +4 -4
  131. package/dist/web/memory/in_memory_memory_service.js +1 -1
  132. package/dist/web/runner/runner.js +17 -9
  133. package/dist/web/sessions/db/operations.js +4 -14
  134. package/dist/web/sessions/state.js +2 -2
  135. package/dist/web/tools/agent_tool.js +6 -5
  136. package/dist/web/tools/load_artifacts_tool.js +150 -0
  137. package/dist/web/tools/load_memory_tool.js +77 -0
  138. package/dist/web/tools/preload_memory_tool.js +75 -0
  139. package/dist/web/utils/gemini_schema_util.js +85 -12
  140. package/dist/web/utils/logger.js +1 -0
  141. package/dist/web/version.js +1 -1
  142. package/package.json +7 -5
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # @google/adk
2
2
 
3
- Please see README for adk-js at https://github.com/google/adk-js
3
+ Please see README for adk-js at https://github.com/google/adk-js
@@ -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)) && ["completed", "failed", "canceled", "rejected"].includes(event.status.state);
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
- metadata
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,179 @@
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 && !a2aConfig.client) {
55
+ throw new Error("Either AgentCard or Client must be provided");
56
+ }
57
+ }
58
+ async init() {
59
+ if (this.isInitialized) {
60
+ return;
61
+ }
62
+ if (this.a2aConfig.client) {
63
+ this.client = this.a2aConfig.client;
64
+ }
65
+ if (this.a2aConfig.agentCard) {
66
+ this.card = await (0, import_agent_card.resolveAgentCard)(this.a2aConfig.agentCard);
67
+ if (!this.client) {
68
+ const factory = this.a2aConfig.clientFactory || new import_client.ClientFactory();
69
+ this.client = await factory.createFromAgentCard(this.card);
70
+ }
71
+ }
72
+ this.isInitialized = true;
73
+ }
74
+ async *runAsyncImpl(context) {
75
+ var _a, _b;
76
+ await this.init();
77
+ try {
78
+ const events = context.session.events;
79
+ if (events.length === 0) {
80
+ throw new Error("No events in session to send");
81
+ }
82
+ const userFnCall = (0, import_a2a_remote_agent_utils.getUserFunctionCallAt)(
83
+ context.session,
84
+ events.length - 1
85
+ );
86
+ let parts;
87
+ let taskId = void 0;
88
+ let contextId = void 0;
89
+ if (userFnCall) {
90
+ const event = userFnCall.response;
91
+ parts = (0, import_part_converter_utils.toA2AParts)(
92
+ ((_a = event.content) == null ? void 0 : _a.parts) || [],
93
+ event.longRunningToolIds
94
+ );
95
+ taskId = userFnCall.taskId;
96
+ contextId = userFnCall.contextId;
97
+ } else {
98
+ const missing = (0, import_a2a_remote_agent_utils.toMissingRemoteSessionParts)(context, context.session);
99
+ parts = missing.parts;
100
+ contextId = missing.contextId;
101
+ }
102
+ const message = {
103
+ kind: "message",
104
+ messageId: (0, import_env_aware_utils.randomUUID)(),
105
+ role: import_a2a_event.MessageRole.USER,
106
+ parts,
107
+ metadata: (0, import_metadata_converter_utils.getA2ASessionMetadata)({
108
+ appName: context.session.appName,
109
+ userId: context.session.userId,
110
+ sessionId: context.session.id
111
+ })
112
+ };
113
+ if (taskId) message.taskId = taskId;
114
+ if (contextId) message.contextId = contextId;
115
+ const params = {
116
+ message,
117
+ configuration: this.a2aConfig.messageSendConfig
118
+ };
119
+ const processor = new import_a2a_remote_agent_run_processor.A2ARemoteAgentRunProcessor(params);
120
+ if (this.a2aConfig.beforeRequestCallbacks) {
121
+ for (const callback of this.a2aConfig.beforeRequestCallbacks) {
122
+ await callback(context, params);
123
+ }
124
+ }
125
+ const useStreaming = this.card ? ((_b = this.card.capabilities) == null ? void 0 : _b.streaming) !== false : true;
126
+ if (useStreaming) {
127
+ for await (const chunk of this.client.sendMessageStream(params)) {
128
+ if (this.a2aConfig.afterRequestCallbacks) {
129
+ for (const callback of this.a2aConfig.afterRequestCallbacks) {
130
+ await callback(context, chunk);
131
+ }
132
+ }
133
+ const adkEvent = (0, import_event_converter_utils.toAdkEvent)(chunk, context.invocationId, this.name);
134
+ if (!adkEvent) {
135
+ continue;
136
+ }
137
+ processor.updateCustomMetadata(adkEvent, chunk);
138
+ const eventsToEmit = processor.aggregatePartial(
139
+ context,
140
+ chunk,
141
+ adkEvent
142
+ );
143
+ for (const ev of eventsToEmit) {
144
+ yield ev;
145
+ }
146
+ }
147
+ } else {
148
+ const result = await this.client.sendMessage(params);
149
+ if (this.a2aConfig.afterRequestCallbacks) {
150
+ for (const callback of this.a2aConfig.afterRequestCallbacks) {
151
+ await callback(context, result);
152
+ }
153
+ }
154
+ const adkEvent = (0, import_event_converter_utils.toAdkEvent)(result, context.invocationId, this.name);
155
+ if (adkEvent) {
156
+ processor.updateCustomMetadata(adkEvent, result);
157
+ yield adkEvent;
158
+ }
159
+ }
160
+ } catch (e) {
161
+ const error = e;
162
+ import_logger.logger.error(`A2ARemoteAgent ${this.name} failed:`, error);
163
+ yield (0, import_event.createEvent)({
164
+ author: this.name,
165
+ invocationId: context.invocationId,
166
+ errorMessage: error.message,
167
+ turnComplete: true
168
+ });
169
+ }
170
+ }
171
+ runLiveImpl(_context) {
172
+ throw new Error("Live mode is not supported in A2ARemoteAgent yet.");
173
+ }
174
+ }
175
+ // Annotate the CommonJS export names for ESM import in node:
176
+ 0 && (module.exports = {
177
+ AGENT_CARD_PATH,
178
+ RemoteA2AAgent
179
+ });
@@ -0,0 +1,205 @@
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
+ if ((0, import_a2a_event.isTask)(response)) {
183
+ if (response.id) toAdd["task_id"] = response.id;
184
+ if (response.contextId) toAdd["context_id"] = response.contextId;
185
+ } else if (response.taskId) {
186
+ toAdd["task_id"] = response.taskId;
187
+ if (response.contextId) toAdd["context_id"] = response.contextId;
188
+ }
189
+ }
190
+ if (Object.keys(toAdd).length === 0) {
191
+ return;
192
+ }
193
+ if (!event.customMetadata) {
194
+ event.customMetadata = {};
195
+ }
196
+ for (const [k, v] of Object.entries(toAdd)) {
197
+ if (v === void 0 || v === null) continue;
198
+ event.customMetadata[`a2a:${k}`] = v;
199
+ }
200
+ }
201
+ }
202
+ // Annotate the CommonJS export names for ESM import in node:
203
+ 0 && (module.exports = {
204
+ A2ARemoteAgentRunProcessor
205
+ });