@inkeep/agents-run-api 0.1.2 → 0.1.6

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 (163) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +1 -1
  3. package/SUPPLEMENTAL_TERMS.md +40 -0
  4. package/dist/chunk-P6IQZWFC.js +239 -0
  5. package/dist/conversations-EUPRCMQZ.js +1 -0
  6. package/dist/index.cjs +8992 -0
  7. package/dist/index.d.cts +15 -0
  8. package/dist/index.d.ts +13 -21
  9. package/dist/index.js +8644 -27
  10. package/package.json +14 -11
  11. package/templates/v1/artifact.xml +7 -0
  12. package/templates/v1/data-component.xml +9 -0
  13. package/templates/v1/system-prompt.xml +52 -0
  14. package/templates/v1/thinking-preparation.xml +34 -0
  15. package/templates/v1/tool.xml +12 -0
  16. package/dist/AgentExecutionServer.d.ts +0 -28
  17. package/dist/AgentExecutionServer.d.ts.map +0 -1
  18. package/dist/AgentExecutionServer.js +0 -41
  19. package/dist/__tests__/setup.d.ts +0 -4
  20. package/dist/__tests__/setup.d.ts.map +0 -1
  21. package/dist/__tests__/setup.js +0 -50
  22. package/dist/__tests__/utils/testProject.d.ts +0 -18
  23. package/dist/__tests__/utils/testProject.d.ts.map +0 -1
  24. package/dist/__tests__/utils/testProject.js +0 -26
  25. package/dist/__tests__/utils/testRequest.d.ts +0 -8
  26. package/dist/__tests__/utils/testRequest.d.ts.map +0 -1
  27. package/dist/__tests__/utils/testRequest.js +0 -32
  28. package/dist/__tests__/utils/testTenant.d.ts +0 -64
  29. package/dist/__tests__/utils/testTenant.d.ts.map +0 -1
  30. package/dist/__tests__/utils/testTenant.js +0 -71
  31. package/dist/a2a/client.d.ts +0 -182
  32. package/dist/a2a/client.d.ts.map +0 -1
  33. package/dist/a2a/client.js +0 -645
  34. package/dist/a2a/handlers.d.ts +0 -4
  35. package/dist/a2a/handlers.d.ts.map +0 -1
  36. package/dist/a2a/handlers.js +0 -657
  37. package/dist/a2a/transfer.d.ts +0 -18
  38. package/dist/a2a/transfer.d.ts.map +0 -1
  39. package/dist/a2a/transfer.js +0 -22
  40. package/dist/a2a/types.d.ts +0 -63
  41. package/dist/a2a/types.d.ts.map +0 -1
  42. package/dist/a2a/types.js +0 -1
  43. package/dist/agents/Agent.d.ts +0 -154
  44. package/dist/agents/Agent.d.ts.map +0 -1
  45. package/dist/agents/Agent.js +0 -1107
  46. package/dist/agents/ModelFactory.d.ts +0 -62
  47. package/dist/agents/ModelFactory.d.ts.map +0 -1
  48. package/dist/agents/ModelFactory.js +0 -208
  49. package/dist/agents/SystemPromptBuilder.d.ts +0 -14
  50. package/dist/agents/SystemPromptBuilder.d.ts.map +0 -1
  51. package/dist/agents/SystemPromptBuilder.js +0 -62
  52. package/dist/agents/ToolSessionManager.d.ts +0 -61
  53. package/dist/agents/ToolSessionManager.d.ts.map +0 -1
  54. package/dist/agents/ToolSessionManager.js +0 -143
  55. package/dist/agents/artifactTools.d.ts +0 -30
  56. package/dist/agents/artifactTools.d.ts.map +0 -1
  57. package/dist/agents/artifactTools.js +0 -463
  58. package/dist/agents/generateTaskHandler.d.ts +0 -41
  59. package/dist/agents/generateTaskHandler.d.ts.map +0 -1
  60. package/dist/agents/generateTaskHandler.js +0 -350
  61. package/dist/agents/relationTools.d.ts +0 -35
  62. package/dist/agents/relationTools.d.ts.map +0 -1
  63. package/dist/agents/relationTools.js +0 -244
  64. package/dist/agents/types.d.ts +0 -23
  65. package/dist/agents/types.d.ts.map +0 -1
  66. package/dist/agents/types.js +0 -1
  67. package/dist/agents/versions/V1Config.d.ts +0 -21
  68. package/dist/agents/versions/V1Config.d.ts.map +0 -1
  69. package/dist/agents/versions/V1Config.js +0 -285
  70. package/dist/app.d.ts +0 -12
  71. package/dist/app.d.ts.map +0 -1
  72. package/dist/app.js +0 -202
  73. package/dist/data/agentGraph.d.ts +0 -4
  74. package/dist/data/agentGraph.d.ts.map +0 -1
  75. package/dist/data/agentGraph.js +0 -73
  76. package/dist/data/agents.d.ts +0 -4
  77. package/dist/data/agents.d.ts.map +0 -1
  78. package/dist/data/agents.js +0 -73
  79. package/dist/data/conversations.d.ts +0 -59
  80. package/dist/data/conversations.d.ts.map +0 -1
  81. package/dist/data/conversations.js +0 -216
  82. package/dist/data/db/clean.d.ts +0 -6
  83. package/dist/data/db/clean.d.ts.map +0 -1
  84. package/dist/data/db/clean.js +0 -77
  85. package/dist/data/db/dbClient.d.ts +0 -3
  86. package/dist/data/db/dbClient.d.ts.map +0 -1
  87. package/dist/data/db/dbClient.js +0 -13
  88. package/dist/env.d.ts +0 -45
  89. package/dist/env.d.ts.map +0 -1
  90. package/dist/env.js +0 -64
  91. package/dist/handlers/executionHandler.d.ts +0 -36
  92. package/dist/handlers/executionHandler.d.ts.map +0 -1
  93. package/dist/handlers/executionHandler.js +0 -399
  94. package/dist/index.d.ts.map +0 -1
  95. package/dist/instrumentation.d.ts +0 -13
  96. package/dist/instrumentation.d.ts.map +0 -1
  97. package/dist/instrumentation.js +0 -66
  98. package/dist/logger.d.ts +0 -4
  99. package/dist/logger.d.ts.map +0 -1
  100. package/dist/logger.js +0 -32
  101. package/dist/middleware/api-key-auth.d.ts +0 -22
  102. package/dist/middleware/api-key-auth.d.ts.map +0 -1
  103. package/dist/middleware/api-key-auth.js +0 -139
  104. package/dist/middleware/index.d.ts +0 -2
  105. package/dist/middleware/index.d.ts.map +0 -1
  106. package/dist/middleware/index.js +0 -1
  107. package/dist/openapi.d.ts +0 -2
  108. package/dist/openapi.d.ts.map +0 -1
  109. package/dist/openapi.js +0 -36
  110. package/dist/routes/agents.d.ts +0 -10
  111. package/dist/routes/agents.d.ts.map +0 -1
  112. package/dist/routes/agents.js +0 -158
  113. package/dist/routes/chat.d.ts +0 -4
  114. package/dist/routes/chat.d.ts.map +0 -1
  115. package/dist/routes/chat.js +0 -308
  116. package/dist/routes/chatDataStream.d.ts +0 -4
  117. package/dist/routes/chatDataStream.d.ts.map +0 -1
  118. package/dist/routes/chatDataStream.js +0 -179
  119. package/dist/routes/mcp.d.ts +0 -4
  120. package/dist/routes/mcp.d.ts.map +0 -1
  121. package/dist/routes/mcp.js +0 -500
  122. package/dist/server.d.ts +0 -5
  123. package/dist/server.d.ts.map +0 -1
  124. package/dist/server.js +0 -61
  125. package/dist/tracer.d.ts +0 -24
  126. package/dist/tracer.d.ts.map +0 -1
  127. package/dist/tracer.js +0 -106
  128. package/dist/types/chat.d.ts +0 -25
  129. package/dist/types/chat.d.ts.map +0 -1
  130. package/dist/types/chat.js +0 -1
  131. package/dist/types/execution-context.d.ts +0 -14
  132. package/dist/types/execution-context.d.ts.map +0 -1
  133. package/dist/types/execution-context.js +0 -14
  134. package/dist/utils/agent-operations.d.ts +0 -92
  135. package/dist/utils/agent-operations.d.ts.map +0 -1
  136. package/dist/utils/agent-operations.js +0 -78
  137. package/dist/utils/artifact-component-schema.d.ts +0 -29
  138. package/dist/utils/artifact-component-schema.d.ts.map +0 -1
  139. package/dist/utils/artifact-component-schema.js +0 -119
  140. package/dist/utils/artifact-parser.d.ts +0 -71
  141. package/dist/utils/artifact-parser.d.ts.map +0 -1
  142. package/dist/utils/artifact-parser.js +0 -251
  143. package/dist/utils/cleanup.d.ts +0 -19
  144. package/dist/utils/cleanup.d.ts.map +0 -1
  145. package/dist/utils/cleanup.js +0 -66
  146. package/dist/utils/data-component-schema.d.ts +0 -6
  147. package/dist/utils/data-component-schema.d.ts.map +0 -1
  148. package/dist/utils/data-component-schema.js +0 -43
  149. package/dist/utils/graph-session.d.ts +0 -200
  150. package/dist/utils/graph-session.d.ts.map +0 -1
  151. package/dist/utils/graph-session.js +0 -1012
  152. package/dist/utils/incremental-stream-parser.d.ts +0 -57
  153. package/dist/utils/incremental-stream-parser.d.ts.map +0 -1
  154. package/dist/utils/incremental-stream-parser.js +0 -287
  155. package/dist/utils/response-formatter.d.ts +0 -27
  156. package/dist/utils/response-formatter.d.ts.map +0 -1
  157. package/dist/utils/response-formatter.js +0 -160
  158. package/dist/utils/stream-helpers.d.ts +0 -174
  159. package/dist/utils/stream-helpers.d.ts.map +0 -1
  160. package/dist/utils/stream-helpers.js +0 -466
  161. package/dist/utils/stream-registry.d.ts +0 -18
  162. package/dist/utils/stream-registry.d.ts.map +0 -1
  163. package/dist/utils/stream-registry.js +0 -33
@@ -1,657 +0,0 @@
1
- import { streamSSE } from 'hono/streaming';
2
- import { nanoid } from 'nanoid';
3
- import { createMessage, createTask, updateTask, getRequestExecutionContext, } from '@inkeep/agents-core';
4
- import dbClient from '../data/db/dbClient.js';
5
- import { getLogger } from '../logger.js';
6
- import { TaskState } from '@inkeep/agents-core';
7
- const logger = getLogger('a2aHandler');
8
- export async function a2aHandler(c, agent) {
9
- try {
10
- const rpcRequest = await c.req.json();
11
- // Validate JSON-RPC format
12
- if (rpcRequest.jsonrpc !== '2.0') {
13
- return c.json({
14
- jsonrpc: '2.0',
15
- error: {
16
- code: -32600,
17
- message: 'Invalid Request - must be JSON-RPC 2.0',
18
- },
19
- id: rpcRequest.id,
20
- });
21
- }
22
- // Handle different A2A methods (including Google's protocol methods)
23
- switch (rpcRequest.method) {
24
- // Google A2A Protocol Methods
25
- case 'message/send':
26
- return await handleMessageSend(c, agent, rpcRequest);
27
- case 'message/stream':
28
- return await handleMessageStream(c, agent, rpcRequest);
29
- case 'tasks/get':
30
- return await handleTasksGet(c, agent, rpcRequest);
31
- case 'tasks/cancel':
32
- return await handleTasksCancel(c, agent, rpcRequest);
33
- case 'tasks/resubscribe':
34
- return await handleTasksResubscribe(c, agent, rpcRequest);
35
- // Legacy/simplified methods
36
- case 'agent.invoke':
37
- return await handleAgentInvoke(c, agent, rpcRequest);
38
- case 'agent.getCapabilities':
39
- return await handleGetCapabilities(c, agent, rpcRequest);
40
- case 'agent.getStatus':
41
- return await handleGetStatus(c, agent, rpcRequest);
42
- default:
43
- return c.json({
44
- jsonrpc: '2.0',
45
- error: {
46
- code: -32601,
47
- message: `Method not found: ${rpcRequest.method}`,
48
- },
49
- id: rpcRequest.id,
50
- });
51
- }
52
- }
53
- catch (error) {
54
- console.error('A2A Handler Error:', error);
55
- return c.json({
56
- jsonrpc: '2.0',
57
- error: {
58
- code: -32700,
59
- message: 'Parse error',
60
- },
61
- id: null,
62
- });
63
- }
64
- }
65
- async function handleMessageSend(c, agent, request) {
66
- try {
67
- const params = request.params;
68
- const executionContext = getRequestExecutionContext(c);
69
- const { graphId } = executionContext;
70
- // Convert to our internal task format
71
- const task = {
72
- id: nanoid(),
73
- input: {
74
- parts: params.message.parts.map((part) => ({
75
- kind: part.kind,
76
- text: part.kind === 'text' ? part.text : undefined,
77
- data: part.kind === 'data' ? part.data : undefined,
78
- })),
79
- },
80
- context: {
81
- conversationId: params.message.contextId,
82
- metadata: {
83
- blocking: params.configuration?.blocking ?? false,
84
- custom: { graph_id: graphId || '' },
85
- // Pass through streaming metadata from the original message
86
- ...params.message.metadata,
87
- },
88
- },
89
- };
90
- // Enhanced contextId resolution for delegation
91
- let effectiveContextId = params.message?.contextId;
92
- // If contextId is missing or 'default', try to get it from task.context
93
- if (!effectiveContextId || effectiveContextId === 'default') {
94
- effectiveContextId = task.context?.conversationId;
95
- }
96
- // If still missing, try to extract from metadata
97
- if (!effectiveContextId || effectiveContextId === 'default') {
98
- if (params.message?.metadata?.conversationId &&
99
- params.message.metadata.conversationId !== 'default') {
100
- effectiveContextId = params.message.metadata.conversationId;
101
- }
102
- }
103
- // Final fallback
104
- if (!effectiveContextId || effectiveContextId === 'default') {
105
- effectiveContextId = 'default';
106
- }
107
- // Enhanced message content handling
108
- let messageContent = '';
109
- try {
110
- if (params.message && Object.keys(params.message).length > 0) {
111
- messageContent = JSON.stringify(params.message);
112
- }
113
- else {
114
- // Fallback: create a minimal message structure
115
- messageContent = JSON.stringify({
116
- role: 'agent',
117
- parts: [{ text: 'Delegation task', kind: 'text' }],
118
- contextId: effectiveContextId,
119
- messageId: task.id,
120
- kind: 'message',
121
- });
122
- logger.warn({
123
- taskId: task.id,
124
- agentId: agent.agentId,
125
- originalMessage: params.message,
126
- }, 'Created fallback message content for empty delegation message');
127
- }
128
- }
129
- catch (error) {
130
- logger.error({ error, taskId: task.id }, 'Failed to serialize message');
131
- messageContent = JSON.stringify({
132
- error: 'Failed to serialize message',
133
- taskId: task.id,
134
- contextId: effectiveContextId,
135
- parts: [{ text: 'Error in delegation', kind: 'text' }],
136
- });
137
- }
138
- logger.info({
139
- originalContextId: params.message.contextId,
140
- taskContextId: task.context?.conversationId,
141
- metadataContextId: params.message.metadata?.conversationId,
142
- finalContextId: effectiveContextId,
143
- agentId: agent.agentId,
144
- }, 'A2A contextId resolution for delegation');
145
- // --- Persist the task in the DB ---
146
- await createTask(dbClient)({
147
- id: task.id,
148
- tenantId: agent.tenantId,
149
- projectId: agent.projectId,
150
- contextId: effectiveContextId,
151
- status: 'working',
152
- metadata: {
153
- conversation_id: effectiveContextId,
154
- message_id: params.message.messageId || '',
155
- created_at: new Date().toISOString(),
156
- updated_at: new Date().toISOString(),
157
- agent_id: agent.agentId,
158
- graph_id: graphId || '',
159
- stream_request_id: params.message.metadata?.stream_request_id,
160
- },
161
- agentId: agent.agentId,
162
- createdAt: new Date().toISOString(),
163
- updatedAt: new Date().toISOString(),
164
- });
165
- logger.info({ metadata: params.message.metadata }, 'message metadata');
166
- // --- Store A2A message in database if this is agent-to-agent communication ---
167
- // TODO: we need to identify external agent requests through propoer auth headers
168
- if (params.message.metadata?.fromAgentId || params.message.metadata?.fromExternalAgentId) {
169
- const messageText = params.message.parts
170
- .filter((part) => part.kind === 'text' && 'text' in part && part.text)
171
- .map((part) => part.text)
172
- .join(' ');
173
- try {
174
- const messageData = {
175
- id: nanoid(),
176
- tenantId: agent.tenantId,
177
- projectId: agent.projectId,
178
- conversationId: effectiveContextId,
179
- role: 'agent',
180
- content: {
181
- text: messageText,
182
- },
183
- visibility: params.message.metadata?.fromExternalAgentId ? 'external' : 'internal',
184
- messageType: 'a2a-request',
185
- taskId: task.id,
186
- };
187
- // Set appropriate agent tracking fields
188
- if (params.message.metadata?.fromAgentId) {
189
- // Internal agent communication
190
- messageData.fromAgentId = params.message.metadata.fromAgentId;
191
- messageData.toAgentId = agent.agentId;
192
- }
193
- else if (params.message.metadata?.fromExternalAgentId) {
194
- // External agent communication
195
- messageData.fromExternalAgentId = params.message.metadata.fromExternalAgentId;
196
- messageData.toAgentId = agent.agentId;
197
- }
198
- await createMessage(dbClient)(messageData);
199
- logger.info({
200
- fromAgentId: params.message.metadata.fromAgentId,
201
- fromExternalAgentId: params.message.metadata.fromExternalAgentId,
202
- toAgentId: agent.agentId,
203
- conversationId: effectiveContextId,
204
- messageType: 'a2a-request',
205
- taskId: task.id,
206
- }, 'A2A message stored in database');
207
- }
208
- catch (error) {
209
- logger.error({
210
- error,
211
- fromAgentId: params.message.metadata.fromAgentId,
212
- fromExternalAgentId: params.message.metadata.fromExternalAgentId,
213
- toAgentId: agent.agentId,
214
- conversationId: effectiveContextId,
215
- }, 'Failed to store A2A message in database');
216
- }
217
- }
218
- // Execute the task
219
- const result = await agent.taskHandler(task);
220
- // --- Update the task in the DB with result ---
221
- await updateTask(dbClient)({
222
- taskId: task.id,
223
- data: {
224
- status: result.status.state.toLowerCase(),
225
- metadata: {
226
- conversation_id: params.message.contextId || '',
227
- message_id: params.message.messageId || '',
228
- created_at: new Date().toISOString(),
229
- updated_at: new Date().toISOString(),
230
- agent_id: agent.agentId,
231
- graph_id: graphId || '',
232
- },
233
- },
234
- });
235
- // Check if the result contains a transfer indication
236
- const transferArtifact = result.artifacts?.find((artifact) => artifact.parts?.some((part) => part.kind === 'data' &&
237
- part.data &&
238
- typeof part.data === 'object' &&
239
- part.data.type === 'transfer'));
240
- if (transferArtifact) {
241
- const transferPart = transferArtifact.parts?.find((part) => part.kind === 'data' &&
242
- part.data &&
243
- typeof part.data === 'object' &&
244
- part.data.type === 'transfer');
245
- if (transferPart && transferPart.kind === 'data' && transferPart.data) {
246
- logger.info({ transferPart }, 'transferPart');
247
- // Return a transfer response instead of normal task/message response
248
- return c.json({
249
- jsonrpc: '2.0',
250
- result: {
251
- kind: 'task',
252
- contextId: params.message.contextId,
253
- id: task.id,
254
- status: {
255
- state: TaskState.Completed,
256
- timestamp: new Date().toISOString(),
257
- },
258
- artifacts: [
259
- {
260
- artifactId: nanoid(),
261
- parts: [
262
- {
263
- kind: 'data',
264
- data: {
265
- type: 'transfer',
266
- targetAgentId: transferPart.data.target,
267
- },
268
- },
269
- {
270
- kind: 'text',
271
- text: transferPart.data.reason || 'Agent requested transfer',
272
- },
273
- ],
274
- },
275
- ],
276
- },
277
- id: request.id,
278
- });
279
- }
280
- }
281
- // Convert A2ATaskResult status to schema TaskStatus
282
- const taskStatus = {
283
- state: result.status.state,
284
- timestamp: new Date().toISOString(),
285
- // Don't include message field since it expects Message object, not string
286
- };
287
- // Convert back to Google A2A format
288
- if (params.configuration?.blocking === false) {
289
- // Return a Task for non-blocking requests
290
- const taskResponse = {
291
- id: task.id,
292
- contextId: params.message.contextId || nanoid(),
293
- status: taskStatus,
294
- artifacts: result.artifacts,
295
- kind: 'task',
296
- };
297
- return c.json({
298
- jsonrpc: '2.0',
299
- result: taskResponse,
300
- id: request.id,
301
- });
302
- }
303
- // Return a Message for blocking requests
304
- const messageResponse = {
305
- messageId: nanoid(),
306
- parts: result.artifacts?.[0]?.parts || [
307
- {
308
- kind: 'text',
309
- text: 'Task completed successfully',
310
- },
311
- ],
312
- role: 'agent',
313
- taskId: task.id,
314
- contextId: params.message.contextId,
315
- kind: 'message',
316
- };
317
- return c.json({
318
- jsonrpc: '2.0',
319
- result: messageResponse,
320
- id: request.id,
321
- });
322
- }
323
- catch (error) {
324
- return c.json({
325
- jsonrpc: '2.0',
326
- error: {
327
- code: -32603,
328
- message: 'Internal error during message send',
329
- data: error instanceof Error ? error.message : 'Unknown error',
330
- },
331
- id: request.id,
332
- });
333
- }
334
- }
335
- async function handleMessageStream(c, agent, request) {
336
- try {
337
- const params = request.params;
338
- const executionContext = getRequestExecutionContext(c);
339
- const { graphId } = executionContext;
340
- // Check if agent supports streaming
341
- if (!agent.agentCard.capabilities.streaming) {
342
- return c.json({
343
- jsonrpc: '2.0',
344
- error: {
345
- code: -32604,
346
- message: 'Agent does not support streaming',
347
- },
348
- id: request.id,
349
- });
350
- }
351
- // Convert to our internal task format
352
- const task = {
353
- id: nanoid(),
354
- input: {
355
- parts: params.message.parts.map((part) => ({
356
- kind: part.kind,
357
- text: part.kind === 'text' ? part.text : undefined,
358
- data: part.kind === 'data' ? part.data : undefined,
359
- })),
360
- },
361
- context: {
362
- conversationId: params.message.contextId,
363
- metadata: {
364
- blocking: false, // Streaming is always non-blocking
365
- custom: { graph_id: graphId || '' },
366
- },
367
- },
368
- };
369
- // Return SSE stream
370
- return streamSSE(c, async (stream) => {
371
- try {
372
- // Initial task acknowledgment
373
- const initialTask = {
374
- id: task.id,
375
- contextId: params.message.contextId || nanoid(),
376
- status: {
377
- state: TaskState.Working,
378
- timestamp: new Date().toISOString(),
379
- },
380
- artifacts: [],
381
- kind: 'task',
382
- };
383
- // Send initial task status
384
- await stream.writeSSE({
385
- data: JSON.stringify({
386
- jsonrpc: '2.0',
387
- result: initialTask,
388
- id: request.id,
389
- }),
390
- });
391
- // Execute the task with streaming
392
- const result = await agent.taskHandler(task);
393
- // Check for transfer first
394
- const transferArtifact = result.artifacts?.find((artifact) => artifact.parts?.some((part) => part.kind === 'data' &&
395
- part.data &&
396
- typeof part.data === 'object' &&
397
- part.data.type === 'transfer'));
398
- if (transferArtifact) {
399
- const transferPart = transferArtifact.parts?.find((part) => part.kind === 'data' &&
400
- part.data &&
401
- typeof part.data === 'object' &&
402
- part.data.type === 'transfer');
403
- if (transferPart && transferPart.kind === 'data' && transferPart.data) {
404
- // Stream transfer response
405
- await stream.writeSSE({
406
- data: JSON.stringify({
407
- jsonrpc: '2.0',
408
- result: {
409
- type: 'transfer',
410
- target: transferPart.data.target,
411
- task_id: task.id,
412
- reason: transferPart.data.reason || 'Agent requested transfer',
413
- original_message: transferPart.data.original_message,
414
- context: {
415
- conversationId: params.message.contextId,
416
- tenantId: agent.tenantId,
417
- transfer_context: result.artifacts,
418
- },
419
- },
420
- id: request.id,
421
- }),
422
- });
423
- return;
424
- }
425
- }
426
- // Stream regular message response
427
- const messageResponse = {
428
- messageId: nanoid(),
429
- parts: result.artifacts?.[0]?.parts || [
430
- {
431
- kind: 'text',
432
- text: 'Task completed successfully',
433
- },
434
- ],
435
- role: 'agent',
436
- taskId: task.id,
437
- contextId: params.message.contextId,
438
- kind: 'message',
439
- };
440
- await stream.writeSSE({
441
- data: JSON.stringify({
442
- jsonrpc: '2.0',
443
- result: messageResponse,
444
- id: request.id,
445
- }),
446
- });
447
- // Send final task completion status
448
- const completedTask = {
449
- ...initialTask,
450
- status: {
451
- state: TaskState.Completed,
452
- timestamp: new Date().toISOString(),
453
- },
454
- artifacts: result.artifacts,
455
- };
456
- await stream.writeSSE({
457
- data: JSON.stringify({
458
- jsonrpc: '2.0',
459
- result: completedTask,
460
- id: request.id,
461
- }),
462
- });
463
- }
464
- catch (error) {
465
- console.error('Error in stream execution:', error);
466
- // Send error as SSE event
467
- await stream.writeSSE({
468
- data: JSON.stringify({
469
- jsonrpc: '2.0',
470
- error: {
471
- code: -32603,
472
- message: 'Internal error during streaming execution',
473
- data: error instanceof Error ? error.message : 'Unknown error',
474
- },
475
- id: request.id,
476
- }),
477
- });
478
- }
479
- });
480
- }
481
- catch (error) {
482
- return c.json({
483
- jsonrpc: '2.0',
484
- error: {
485
- code: -32603,
486
- message: 'Internal error during message stream setup',
487
- data: error instanceof Error ? error.message : 'Unknown error',
488
- },
489
- id: request.id,
490
- });
491
- }
492
- }
493
- async function handleTasksGet(c, agent, request) {
494
- try {
495
- const params = request.params;
496
- // For now, return a mock task since we don't have persistent storage
497
- const task = {
498
- id: params.id,
499
- contextId: nanoid(),
500
- status: {
501
- state: TaskState.Completed,
502
- timestamp: new Date().toISOString(),
503
- },
504
- artifacts: [
505
- {
506
- artifactId: nanoid(),
507
- parts: [
508
- {
509
- kind: 'text',
510
- text: `Task ${params.id} completed successfully`,
511
- },
512
- ],
513
- },
514
- ],
515
- kind: 'task',
516
- };
517
- return c.json({
518
- jsonrpc: '2.0',
519
- result: task,
520
- id: request.id,
521
- });
522
- }
523
- catch (error) {
524
- return c.json({
525
- jsonrpc: '2.0',
526
- error: {
527
- code: -32603,
528
- message: 'Internal error getting task',
529
- data: error instanceof Error ? error.message : 'Unknown error',
530
- },
531
- id: request.id,
532
- });
533
- }
534
- }
535
- async function handleTasksCancel(c, agent, request) {
536
- try {
537
- const params = request.params;
538
- // For now, just return success
539
- return c.json({
540
- jsonrpc: '2.0',
541
- result: { success: true },
542
- id: request.id,
543
- });
544
- }
545
- catch (error) {
546
- return c.json({
547
- jsonrpc: '2.0',
548
- error: {
549
- code: -32603,
550
- message: 'Internal error canceling task',
551
- data: error instanceof Error ? error.message : 'Unknown error',
552
- },
553
- id: request.id,
554
- });
555
- }
556
- }
557
- async function handleAgentInvoke(c, agent, request) {
558
- try {
559
- const task = request.params;
560
- const result = await agent.taskHandler(task);
561
- return c.json({
562
- jsonrpc: '2.0',
563
- result,
564
- id: request.id,
565
- });
566
- }
567
- catch (error) {
568
- return c.json({
569
- jsonrpc: '2.0',
570
- error: {
571
- code: -32603,
572
- message: 'Internal error during agent invocation',
573
- data: error instanceof Error ? error.message : 'Unknown error',
574
- },
575
- id: request.id,
576
- });
577
- }
578
- }
579
- async function handleGetCapabilities(c, agent, request) {
580
- return c.json({
581
- jsonrpc: '2.0',
582
- result: agent.agentCard.capabilities,
583
- id: request.id,
584
- });
585
- }
586
- async function handleGetStatus(c, agent, request) {
587
- return c.json({
588
- jsonrpc: '2.0',
589
- result: { status: 'ready', agentId: agent.agentId },
590
- id: request.id,
591
- });
592
- }
593
- async function handleTasksResubscribe(c, agent, request) {
594
- try {
595
- const params = request.params;
596
- // Check if agent supports streaming
597
- if (!agent.agentCard.capabilities.streaming) {
598
- return c.json({
599
- jsonrpc: '2.0',
600
- error: {
601
- code: -32604,
602
- message: 'Agent does not support streaming for resubscription',
603
- },
604
- id: request.id,
605
- });
606
- }
607
- // For now, return SSE stream that immediately provides task status
608
- // In a full implementation, this would reconnect to an existing task's stream
609
- return streamSSE(c, async (stream) => {
610
- try {
611
- // Mock task status for resubscription
612
- const task = {
613
- id: params.taskId,
614
- contextId: nanoid(),
615
- status: {
616
- state: TaskState.Completed,
617
- timestamp: new Date().toISOString(),
618
- },
619
- artifacts: [],
620
- kind: 'task',
621
- };
622
- await stream.writeSSE({
623
- data: JSON.stringify({
624
- jsonrpc: '2.0',
625
- result: task,
626
- id: request.id,
627
- }),
628
- });
629
- }
630
- catch (error) {
631
- console.error('Error in task resubscription:', error);
632
- await stream.writeSSE({
633
- data: JSON.stringify({
634
- jsonrpc: '2.0',
635
- error: {
636
- code: -32603,
637
- message: 'Internal error during task resubscription',
638
- data: error instanceof Error ? error.message : 'Unknown error',
639
- },
640
- id: request.id,
641
- }),
642
- });
643
- }
644
- });
645
- }
646
- catch (error) {
647
- return c.json({
648
- jsonrpc: '2.0',
649
- error: {
650
- code: -32603,
651
- message: 'Internal error during task resubscription setup',
652
- data: error instanceof Error ? error.message : 'Unknown error',
653
- },
654
- id: request.id,
655
- });
656
- }
657
- }
@@ -1,18 +0,0 @@
1
- import type { TransferResponse } from './types.js';
2
- /**
3
- * Executes a transfer by sending the original message to the target agent
4
- */
5
- export declare function executeTransfer({ tenantId, threadId, projectId, targetAgentId, }: {
6
- tenantId: string;
7
- threadId: string;
8
- projectId: string;
9
- targetAgentId: string;
10
- }): Promise<{
11
- success: boolean;
12
- targetAgentId: string;
13
- }>;
14
- /**
15
- * Checks if a response is a transfer response
16
- */
17
- export declare function isTransferResponse(result: any): result is TransferResponse;
18
- //# sourceMappingURL=transfer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/a2a/transfer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD;;GAEG;AACH,wBAAsB,eAAe,CAAC,EACpC,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAQD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,gBAAgB,CAI1E"}