@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.
Files changed (221) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/a2a/a2a_event.js +317 -0
  3. package/dist/cjs/a2a/a2a_remote_agent.js +174 -0
  4. package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +198 -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_converter_utils.js +201 -0
  10. package/dist/cjs/a2a/event_processor_utils.js +180 -0
  11. package/dist/cjs/a2a/executor_context.js +53 -0
  12. package/dist/cjs/a2a/metadata_converter_utils.js +126 -0
  13. package/dist/cjs/a2a/part_converter_utils.js +47 -34
  14. package/dist/cjs/agents/base_agent.js +3 -3
  15. package/dist/cjs/{tools/tool_context.js → agents/context.js} +70 -15
  16. package/dist/cjs/agents/functions.js +2 -2
  17. package/dist/cjs/agents/llm_agent.js +38 -674
  18. package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +132 -0
  19. package/dist/cjs/agents/processors/basic_llm_request_processor.js +68 -0
  20. package/dist/cjs/agents/processors/code_execution_request_processor.js +389 -0
  21. package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
  22. package/dist/cjs/agents/processors/content_request_processor.js +87 -0
  23. package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
  24. package/dist/cjs/agents/processors/identity_llm_request_processor.js +54 -0
  25. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +85 -0
  26. package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +165 -0
  27. package/dist/cjs/artifacts/file_artifact_service.js +35 -4
  28. package/dist/cjs/common.js +48 -7
  29. package/dist/cjs/context/base_context_compactor.js +27 -0
  30. package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
  31. package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
  32. package/dist/cjs/context/token_based_context_compactor.js +135 -0
  33. package/dist/cjs/context/truncating_context_compactor.js +58 -0
  34. package/dist/cjs/events/compacted_event.js +53 -0
  35. package/dist/cjs/index.js +113 -53
  36. package/dist/cjs/index.js.map +7 -0
  37. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  38. package/dist/cjs/models/llm_response.js +2 -0
  39. package/dist/cjs/plugins/base_plugin.js +1 -1
  40. package/dist/cjs/runner/runner.js +20 -11
  41. package/dist/cjs/sessions/database_session_service.js +4 -1
  42. package/dist/cjs/sessions/db/operations.js +25 -23
  43. package/dist/cjs/sessions/state.js +2 -2
  44. package/dist/cjs/tools/agent_tool.js +6 -5
  45. package/dist/cjs/tools/base_tool.js +3 -0
  46. package/dist/cjs/tools/base_toolset.js +13 -3
  47. package/dist/cjs/tools/exit_loop_tool.js +63 -0
  48. package/dist/cjs/tools/load_artifacts_tool.js +188 -0
  49. package/dist/cjs/tools/load_memory_tool.js +107 -0
  50. package/dist/cjs/tools/mcp/mcp_toolset.js +9 -5
  51. package/dist/cjs/tools/preload_memory_tool.js +109 -0
  52. package/dist/cjs/utils/logger.js +62 -54
  53. package/dist/cjs/version.js +1 -1
  54. package/dist/esm/a2a/a2a_event.js +269 -0
  55. package/dist/esm/a2a/a2a_remote_agent.js +148 -0
  56. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +175 -0
  57. package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
  58. package/dist/esm/a2a/agent_card.js +340 -0
  59. package/dist/esm/a2a/agent_executor.js +202 -0
  60. package/dist/esm/a2a/agent_to_a2a.js +80 -0
  61. package/dist/esm/a2a/event_converter_utils.js +187 -0
  62. package/dist/esm/a2a/event_processor_utils.js +159 -0
  63. package/dist/esm/a2a/executor_context.js +23 -0
  64. package/dist/esm/a2a/metadata_converter_utils.js +91 -0
  65. package/dist/esm/a2a/part_converter_utils.js +49 -34
  66. package/dist/esm/agents/base_agent.js +3 -3
  67. package/dist/{web/tools/tool_context.js → esm/agents/context.js} +66 -11
  68. package/dist/esm/agents/functions.js +2 -2
  69. package/dist/esm/agents/llm_agent.js +31 -683
  70. package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +101 -0
  71. package/dist/esm/agents/processors/basic_llm_request_processor.js +37 -0
  72. package/dist/esm/agents/processors/code_execution_request_processor.js +363 -0
  73. package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
  74. package/dist/esm/agents/processors/content_request_processor.js +59 -0
  75. package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
  76. package/dist/esm/agents/processors/identity_llm_request_processor.js +23 -0
  77. package/dist/esm/agents/processors/instructions_llm_request_processor.js +54 -0
  78. package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +140 -0
  79. package/dist/esm/artifacts/file_artifact_service.js +30 -3
  80. package/dist/esm/common.js +44 -10
  81. package/dist/esm/context/base_context_compactor.js +5 -0
  82. package/dist/esm/context/summarizers/base_summarizer.js +5 -0
  83. package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
  84. package/dist/esm/context/token_based_context_compactor.js +105 -0
  85. package/dist/esm/context/truncating_context_compactor.js +28 -0
  86. package/dist/esm/events/compacted_event.js +22 -0
  87. package/dist/esm/index.js +119 -18
  88. package/dist/esm/index.js.map +7 -0
  89. package/dist/esm/memory/in_memory_memory_service.js +1 -1
  90. package/dist/esm/models/llm_response.js +2 -0
  91. package/dist/esm/plugins/base_plugin.js +1 -1
  92. package/dist/esm/runner/runner.js +18 -10
  93. package/dist/esm/sessions/database_session_service.js +4 -1
  94. package/dist/esm/sessions/db/operations.js +32 -18
  95. package/dist/esm/sessions/state.js +2 -2
  96. package/dist/esm/tools/agent_tool.js +6 -5
  97. package/dist/esm/tools/base_tool.js +3 -0
  98. package/dist/esm/tools/base_toolset.js +11 -2
  99. package/dist/esm/tools/exit_loop_tool.js +32 -0
  100. package/dist/esm/tools/load_artifacts_tool.js +159 -0
  101. package/dist/esm/tools/load_memory_tool.js +78 -0
  102. package/dist/esm/tools/mcp/mcp_toolset.js +9 -5
  103. package/dist/esm/tools/preload_memory_tool.js +80 -0
  104. package/dist/esm/utils/logger.js +52 -54
  105. package/dist/esm/version.js +1 -1
  106. package/dist/types/a2a/a2a_event.d.ts +139 -0
  107. package/dist/types/a2a/a2a_remote_agent.d.ts +63 -0
  108. package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
  109. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
  110. package/dist/types/a2a/agent_card.d.ts +23 -0
  111. package/dist/types/a2a/agent_executor.d.ts +52 -0
  112. package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
  113. package/dist/types/a2a/event_converter_utils.d.ts +20 -0
  114. package/dist/types/a2a/event_processor_utils.d.ts +24 -0
  115. package/dist/types/a2a/executor_context.d.ts +33 -0
  116. package/dist/types/a2a/metadata_converter_utils.d.ts +63 -0
  117. package/dist/types/a2a/part_converter_utils.d.ts +4 -3
  118. package/dist/types/agents/base_agent.d.ts +2 -2
  119. package/dist/types/{tools/tool_context.d.ts → agents/context.d.ts} +43 -8
  120. package/dist/types/agents/llm_agent.d.ts +14 -31
  121. package/dist/types/agents/loop_agent.d.ts +1 -1
  122. package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +18 -0
  123. package/dist/types/agents/{base_llm_processor.d.ts → processors/base_llm_processor.d.ts} +4 -4
  124. package/dist/types/agents/processors/basic_llm_request_processor.d.ts +13 -0
  125. package/dist/types/agents/processors/code_execution_request_processor.d.ts +34 -0
  126. package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
  127. package/dist/types/agents/processors/content_request_processor.d.ts +13 -0
  128. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
  129. package/dist/types/agents/processors/identity_llm_request_processor.d.ts +13 -0
  130. package/dist/types/agents/processors/instructions_llm_request_processor.d.ts +16 -0
  131. package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +13 -0
  132. package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
  133. package/dist/types/auth/credential_service/base_credential_service.d.ts +3 -3
  134. package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +3 -3
  135. package/dist/types/common.d.ts +20 -5
  136. package/dist/types/context/base_context_compactor.d.ts +24 -0
  137. package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
  138. package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
  139. package/dist/types/context/token_based_context_compactor.d.ts +33 -0
  140. package/dist/types/context/truncating_context_compactor.d.ts +24 -0
  141. package/dist/types/events/compacted_event.d.ts +33 -0
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/models/llm_response.d.ts +5 -1
  144. package/dist/types/plugins/base_plugin.d.ts +12 -13
  145. package/dist/types/plugins/logging_plugin.d.ts +9 -10
  146. package/dist/types/plugins/plugin_manager.d.ts +9 -10
  147. package/dist/types/plugins/security_plugin.d.ts +2 -2
  148. package/dist/types/runner/runner.d.ts +13 -0
  149. package/dist/types/sessions/database_session_service.d.ts +2 -1
  150. package/dist/types/sessions/db/operations.d.ts +3 -4
  151. package/dist/types/tools/base_tool.d.ts +3 -3
  152. package/dist/types/tools/base_toolset.d.ts +12 -3
  153. package/dist/types/tools/exit_loop_tool.d.ts +24 -0
  154. package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
  155. package/dist/types/tools/function_tool.d.ts +2 -2
  156. package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
  157. package/dist/types/tools/load_memory_tool.d.ts +22 -0
  158. package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -1
  159. package/dist/types/tools/preload_memory_tool.d.ts +23 -0
  160. package/dist/types/utils/logger.d.ts +5 -9
  161. package/dist/types/version.d.ts +1 -1
  162. package/dist/web/a2a/a2a_event.js +269 -0
  163. package/dist/web/a2a/a2a_remote_agent.js +193 -0
  164. package/dist/web/a2a/a2a_remote_agent_run_processor.js +175 -0
  165. package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
  166. package/dist/web/a2a/agent_card.js +340 -0
  167. package/dist/web/a2a/agent_executor.js +216 -0
  168. package/dist/web/a2a/agent_to_a2a.js +80 -0
  169. package/dist/web/a2a/event_converter_utils.js +201 -0
  170. package/dist/web/a2a/event_processor_utils.js +168 -0
  171. package/dist/web/a2a/executor_context.js +23 -0
  172. package/dist/web/a2a/metadata_converter_utils.js +108 -0
  173. package/dist/web/a2a/part_converter_utils.js +49 -34
  174. package/dist/web/agents/base_agent.js +3 -3
  175. package/dist/{esm/tools/tool_context.js → web/agents/context.js} +66 -11
  176. package/dist/web/agents/functions.js +2 -2
  177. package/dist/web/agents/llm_agent.js +31 -661
  178. package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +100 -0
  179. package/dist/web/agents/processors/basic_llm_request_processor.js +71 -0
  180. package/dist/web/agents/processors/code_execution_request_processor.js +365 -0
  181. package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
  182. package/dist/web/agents/processors/content_request_processor.js +77 -0
  183. package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
  184. package/dist/web/agents/processors/identity_llm_request_processor.js +41 -0
  185. package/dist/web/agents/processors/instructions_llm_request_processor.js +72 -0
  186. package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +158 -0
  187. package/dist/web/artifacts/file_artifact_service.js +30 -3
  188. package/dist/web/common.js +44 -10
  189. package/dist/web/context/base_context_compactor.js +5 -0
  190. package/dist/web/context/summarizers/base_summarizer.js +5 -0
  191. package/dist/web/context/summarizers/llm_summarizer.js +74 -0
  192. package/dist/web/context/token_based_context_compactor.js +105 -0
  193. package/dist/web/context/truncating_context_compactor.js +28 -0
  194. package/dist/web/events/compacted_event.js +40 -0
  195. package/dist/web/index.js +13 -18
  196. package/dist/web/index.js.map +7 -0
  197. package/dist/web/memory/in_memory_memory_service.js +1 -1
  198. package/dist/web/models/llm_response.js +2 -0
  199. package/dist/web/plugins/base_plugin.js +1 -1
  200. package/dist/web/runner/runner.js +18 -10
  201. package/dist/web/sessions/database_session_service.js +4 -1
  202. package/dist/web/sessions/db/operations.js +32 -18
  203. package/dist/web/sessions/state.js +2 -2
  204. package/dist/web/tools/agent_tool.js +6 -5
  205. package/dist/web/tools/base_tool.js +3 -0
  206. package/dist/web/tools/base_toolset.js +11 -2
  207. package/dist/web/tools/exit_loop_tool.js +32 -0
  208. package/dist/web/tools/load_artifacts_tool.js +150 -0
  209. package/dist/web/tools/load_memory_tool.js +77 -0
  210. package/dist/web/tools/mcp/mcp_toolset.js +27 -5
  211. package/dist/web/tools/preload_memory_tool.js +75 -0
  212. package/dist/web/utils/logger.js +52 -54
  213. package/dist/web/version.js +1 -1
  214. package/package.json +7 -4
  215. package/dist/cjs/agents/callback_context.js +0 -101
  216. package/dist/esm/agents/callback_context.js +0 -71
  217. package/dist/types/agents/callback_context.d.ts +0 -42
  218. package/dist/web/agents/callback_context.js +0 -71
  219. /package/dist/cjs/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
  220. /package/dist/esm/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
  221. /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
+ };