@inkeep/agents-run-api 0.0.0-dev-20251222193909 → 0.0.0-dev-20251222214618

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 (173) hide show
  1. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase1/system-prompt.js +5 -0
  2. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase1/thinking-preparation.js +5 -0
  3. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase1/tool.js +5 -0
  4. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase2/data-component.js +5 -0
  5. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase2/data-components.js +5 -0
  6. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/phase2/system-prompt.js +5 -0
  7. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/shared/artifact-retrieval-guidance.js +5 -0
  8. package/dist/_virtual/_raw_/home/runner/work/agents/agents/agents-run-api/templates/v1/shared/artifact.js +5 -0
  9. package/dist/a2a/client.d.ts +184 -0
  10. package/dist/a2a/client.js +510 -0
  11. package/dist/a2a/handlers.d.ts +7 -0
  12. package/dist/a2a/handlers.js +559 -0
  13. package/dist/a2a/transfer.d.ts +22 -0
  14. package/dist/a2a/transfer.js +46 -0
  15. package/dist/a2a/types.d.ts +79 -0
  16. package/dist/a2a/types.js +22 -0
  17. package/dist/agents/Agent.d.ts +220 -0
  18. package/dist/agents/Agent.js +1938 -0
  19. package/dist/agents/ModelFactory.d.ts +63 -0
  20. package/dist/agents/ModelFactory.js +194 -0
  21. package/dist/agents/SystemPromptBuilder.d.ts +21 -0
  22. package/dist/agents/SystemPromptBuilder.js +48 -0
  23. package/dist/agents/ToolSessionManager.d.ts +63 -0
  24. package/dist/agents/ToolSessionManager.js +146 -0
  25. package/dist/agents/generateTaskHandler.d.ts +49 -0
  26. package/dist/agents/generateTaskHandler.js +512 -0
  27. package/dist/agents/relationTools.d.ts +57 -0
  28. package/dist/agents/relationTools.js +262 -0
  29. package/dist/agents/types.d.ts +28 -0
  30. package/dist/agents/types.js +1 -0
  31. package/dist/agents/versions/v1/Phase1Config.d.ts +26 -0
  32. package/dist/agents/versions/v1/Phase1Config.js +413 -0
  33. package/dist/agents/versions/v1/Phase2Config.d.ts +31 -0
  34. package/dist/agents/versions/v1/Phase2Config.js +330 -0
  35. package/dist/constants/execution-limits/defaults.d.ts +47 -0
  36. package/dist/constants/execution-limits/defaults.js +48 -0
  37. package/dist/constants/execution-limits/index.d.ts +6 -0
  38. package/dist/constants/execution-limits/index.js +16 -0
  39. package/dist/create-app.d.ts +9 -0
  40. package/dist/create-app.js +195 -0
  41. package/dist/data/agent.d.ts +7 -0
  42. package/dist/data/agent.js +72 -0
  43. package/dist/data/agents.d.ts +34 -0
  44. package/dist/data/agents.js +139 -0
  45. package/dist/data/conversations.d.ts +88 -0
  46. package/dist/{conversations2.js → data/conversations.js} +42 -7
  47. package/dist/data/db/dbClient.d.ts +6 -0
  48. package/dist/data/db/dbClient.js +17 -0
  49. package/dist/env.d.ts +57 -0
  50. package/dist/env.js +1 -2
  51. package/dist/handlers/executionHandler.d.ts +39 -0
  52. package/dist/handlers/executionHandler.js +456 -0
  53. package/dist/index.d.ts +8 -29
  54. package/dist/index.js +5 -11487
  55. package/dist/instrumentation.d.ts +1 -2
  56. package/dist/instrumentation.js +66 -3
  57. package/dist/{logger2.js → logger.d.ts} +1 -2
  58. package/dist/logger.js +1 -1
  59. package/dist/middleware/api-key-auth.d.ts +26 -0
  60. package/dist/middleware/api-key-auth.js +240 -0
  61. package/dist/middleware/index.d.ts +2 -0
  62. package/dist/middleware/index.js +3 -0
  63. package/dist/openapi.d.ts +4 -0
  64. package/dist/openapi.js +54 -0
  65. package/dist/routes/agents.d.ts +12 -0
  66. package/dist/routes/agents.js +147 -0
  67. package/dist/routes/chat.d.ts +13 -0
  68. package/dist/routes/chat.js +293 -0
  69. package/dist/routes/chatDataStream.d.ts +13 -0
  70. package/dist/routes/chatDataStream.js +352 -0
  71. package/dist/routes/mcp.d.ts +13 -0
  72. package/dist/routes/mcp.js +495 -0
  73. package/dist/services/AgentSession.d.ts +356 -0
  74. package/dist/services/AgentSession.js +1208 -0
  75. package/dist/services/ArtifactParser.d.ts +105 -0
  76. package/dist/services/ArtifactParser.js +338 -0
  77. package/dist/services/ArtifactService.d.ts +123 -0
  78. package/dist/services/ArtifactService.js +611 -0
  79. package/dist/services/IncrementalStreamParser.d.ts +98 -0
  80. package/dist/services/IncrementalStreamParser.js +327 -0
  81. package/dist/services/MidGenerationCompressor.d.ts +91 -0
  82. package/dist/services/MidGenerationCompressor.js +375 -0
  83. package/dist/services/PendingToolApprovalManager.d.ts +62 -0
  84. package/dist/services/PendingToolApprovalManager.js +133 -0
  85. package/dist/services/ResponseFormatter.d.ts +39 -0
  86. package/dist/services/ResponseFormatter.js +152 -0
  87. package/dist/tools/NativeSandboxExecutor.d.ts +38 -0
  88. package/dist/tools/NativeSandboxExecutor.js +432 -0
  89. package/dist/tools/SandboxExecutorFactory.d.ts +36 -0
  90. package/dist/tools/SandboxExecutorFactory.js +80 -0
  91. package/dist/tools/VercelSandboxExecutor.d.ts +71 -0
  92. package/dist/tools/VercelSandboxExecutor.js +340 -0
  93. package/dist/tools/distill-conversation-tool.d.ts +41 -0
  94. package/dist/tools/distill-conversation-tool.js +156 -0
  95. package/dist/tools/sandbox-utils.d.ts +18 -0
  96. package/dist/tools/sandbox-utils.js +53 -0
  97. package/dist/types/chat.d.ts +27 -0
  98. package/dist/types/chat.js +1 -0
  99. package/dist/types/execution-context.d.ts +46 -0
  100. package/dist/types/execution-context.js +27 -0
  101. package/dist/types/xml.d.ts +5 -0
  102. package/dist/utils/SchemaProcessor.d.ts +52 -0
  103. package/dist/utils/SchemaProcessor.js +182 -0
  104. package/dist/utils/agent-operations.d.ts +62 -0
  105. package/dist/utils/agent-operations.js +53 -0
  106. package/dist/utils/artifact-component-schema.d.ts +42 -0
  107. package/dist/utils/artifact-component-schema.js +186 -0
  108. package/dist/utils/cleanup.d.ts +21 -0
  109. package/dist/utils/cleanup.js +59 -0
  110. package/dist/utils/data-component-schema.d.ts +2 -0
  111. package/dist/utils/data-component-schema.js +3 -0
  112. package/dist/utils/default-status-schemas.d.ts +20 -0
  113. package/dist/utils/default-status-schemas.js +24 -0
  114. package/dist/utils/json-postprocessor.d.ts +13 -0
  115. package/dist/{json-postprocessor.cjs → utils/json-postprocessor.js} +1 -2
  116. package/dist/utils/model-context-utils.d.ts +31 -0
  117. package/dist/utils/model-context-utils.js +149 -0
  118. package/dist/utils/model-resolver.d.ts +6 -0
  119. package/dist/utils/model-resolver.js +34 -0
  120. package/dist/utils/schema-validation.d.ts +44 -0
  121. package/dist/utils/schema-validation.js +97 -0
  122. package/dist/utils/stream-helpers.d.ts +197 -0
  123. package/dist/utils/stream-helpers.js +518 -0
  124. package/dist/utils/stream-registry.d.ts +22 -0
  125. package/dist/utils/stream-registry.js +34 -0
  126. package/dist/utils/token-estimator.d.ts +69 -0
  127. package/dist/utils/token-estimator.js +53 -0
  128. package/dist/utils/tracer.d.ts +7 -0
  129. package/dist/utils/tracer.js +7 -0
  130. package/package.json +4 -20
  131. package/dist/SandboxExecutorFactory.cjs +0 -895
  132. package/dist/SandboxExecutorFactory.js +0 -893
  133. package/dist/SandboxExecutorFactory.js.map +0 -1
  134. package/dist/chunk-VBDAOXYI.cjs +0 -927
  135. package/dist/chunk-VBDAOXYI.js +0 -832
  136. package/dist/chunk-VBDAOXYI.js.map +0 -1
  137. package/dist/chunk.cjs +0 -34
  138. package/dist/conversations.cjs +0 -7
  139. package/dist/conversations.js +0 -7
  140. package/dist/conversations2.cjs +0 -209
  141. package/dist/conversations2.js.map +0 -1
  142. package/dist/dbClient.cjs +0 -9676
  143. package/dist/dbClient.js +0 -9670
  144. package/dist/dbClient.js.map +0 -1
  145. package/dist/dbClient2.cjs +0 -5
  146. package/dist/dbClient2.js +0 -5
  147. package/dist/env.cjs +0 -59
  148. package/dist/env.js.map +0 -1
  149. package/dist/execution-limits.cjs +0 -260
  150. package/dist/execution-limits.js +0 -63
  151. package/dist/execution-limits.js.map +0 -1
  152. package/dist/index.cjs +0 -11512
  153. package/dist/index.d.cts +0 -36
  154. package/dist/index.d.cts.map +0 -1
  155. package/dist/index.d.ts.map +0 -1
  156. package/dist/index.js.map +0 -1
  157. package/dist/instrumentation.cjs +0 -12
  158. package/dist/instrumentation.d.cts +0 -18
  159. package/dist/instrumentation.d.cts.map +0 -1
  160. package/dist/instrumentation.d.ts.map +0 -1
  161. package/dist/instrumentation2.cjs +0 -116
  162. package/dist/instrumentation2.js +0 -69
  163. package/dist/instrumentation2.js.map +0 -1
  164. package/dist/json-postprocessor.js +0 -20
  165. package/dist/json-postprocessor.js.map +0 -1
  166. package/dist/logger.cjs +0 -5
  167. package/dist/logger2.cjs +0 -1
  168. package/dist/nodefs.cjs +0 -29
  169. package/dist/nodefs.js +0 -27
  170. package/dist/nodefs.js.map +0 -1
  171. package/dist/opfs-ahp.cjs +0 -367
  172. package/dist/opfs-ahp.js +0 -368
  173. package/dist/opfs-ahp.js.map +0 -1
@@ -0,0 +1,512 @@
1
+ import { getLogger } from "../logger.js";
2
+ import dbClient_default from "../data/db/dbClient.js";
3
+ import { toolSessionManager } from "./ToolSessionManager.js";
4
+ import { agentSessionManager } from "../services/AgentSession.js";
5
+ import { resolveModelConfig } from "../utils/model-resolver.js";
6
+ import { Agent } from "./Agent.js";
7
+ import { generateDescriptionWithRelationData } from "../data/agents.js";
8
+ import { TaskState, dbResultToMcpTool, generateId, getAgentById, getAgentWithDefaultSubAgent, getArtifactComponentsForAgent, getDataComponentsForAgent, getExternalAgentsForSubAgent, getRelatedAgentsForAgent, getSubAgentById, getTeamAgentsForSubAgent, getToolsForAgent } from "@inkeep/agents-core";
9
+
10
+ //#region src/agents/generateTaskHandler.ts
11
+ const logger = getLogger("generateTaskHandler");
12
+ const createTaskHandler = (config, credentialStoreRegistry) => {
13
+ return async (task) => {
14
+ try {
15
+ const userMessage = task.input.parts.filter((part) => part.text).map((part) => part.text).join(" ");
16
+ if (!userMessage.trim()) return {
17
+ status: {
18
+ state: TaskState.Failed,
19
+ message: "No text content found in task input"
20
+ },
21
+ artifacts: []
22
+ };
23
+ const [internalRelations, externalRelations, teamRelations, toolsForAgent, dataComponents, artifactComponents] = await Promise.all([
24
+ getRelatedAgentsForAgent(dbClient_default)({
25
+ scopes: {
26
+ tenantId: config.tenantId,
27
+ projectId: config.projectId,
28
+ agentId: config.agentId
29
+ },
30
+ subAgentId: config.subAgentId
31
+ }),
32
+ getExternalAgentsForSubAgent(dbClient_default)({ scopes: {
33
+ tenantId: config.tenantId,
34
+ projectId: config.projectId,
35
+ agentId: config.agentId,
36
+ subAgentId: config.subAgentId
37
+ } }),
38
+ getTeamAgentsForSubAgent(dbClient_default)({ scopes: {
39
+ tenantId: config.tenantId,
40
+ projectId: config.projectId,
41
+ agentId: config.agentId,
42
+ subAgentId: config.subAgentId
43
+ } }),
44
+ getToolsForAgent(dbClient_default)({ scopes: {
45
+ tenantId: config.tenantId,
46
+ projectId: config.projectId,
47
+ agentId: config.agentId,
48
+ subAgentId: config.subAgentId
49
+ } }),
50
+ getDataComponentsForAgent(dbClient_default)({ scopes: {
51
+ tenantId: config.tenantId,
52
+ projectId: config.projectId,
53
+ agentId: config.agentId,
54
+ subAgentId: config.subAgentId
55
+ } }),
56
+ getArtifactComponentsForAgent(dbClient_default)({ scopes: {
57
+ tenantId: config.tenantId,
58
+ projectId: config.projectId,
59
+ agentId: config.agentId,
60
+ subAgentId: config.subAgentId
61
+ } })
62
+ ]);
63
+ const enhancedInternalRelations = await Promise.all(internalRelations.data.map(async (relation) => {
64
+ try {
65
+ if (await getSubAgentById(dbClient_default)({
66
+ scopes: {
67
+ tenantId: config.tenantId,
68
+ projectId: config.projectId,
69
+ agentId: config.agentId
70
+ },
71
+ subAgentId: relation.id
72
+ })) {
73
+ const relatedAgentRelations = await getRelatedAgentsForAgent(dbClient_default)({
74
+ scopes: {
75
+ tenantId: config.tenantId,
76
+ projectId: config.projectId,
77
+ agentId: config.agentId
78
+ },
79
+ subAgentId: relation.id
80
+ });
81
+ const relatedAgentExternalAgentRelations = await getExternalAgentsForSubAgent(dbClient_default)({ scopes: {
82
+ tenantId: config.tenantId,
83
+ projectId: config.projectId,
84
+ agentId: config.agentId,
85
+ subAgentId: relation.id
86
+ } });
87
+ const relatedAgentTeamAgentRelations = await getTeamAgentsForSubAgent(dbClient_default)({ scopes: {
88
+ tenantId: config.tenantId,
89
+ projectId: config.projectId,
90
+ agentId: config.agentId,
91
+ subAgentId: relation.id
92
+ } });
93
+ const enhancedDescription = generateDescriptionWithRelationData(relation.description || "", relatedAgentRelations.data, relatedAgentExternalAgentRelations.data, relatedAgentTeamAgentRelations.data);
94
+ return {
95
+ ...relation,
96
+ description: enhancedDescription
97
+ };
98
+ }
99
+ } catch (error) {
100
+ logger.warn({
101
+ subAgentId: relation.id,
102
+ error
103
+ }, "Failed to enhance agent description");
104
+ }
105
+ return relation;
106
+ }));
107
+ const enhancedTeamRelations = await Promise.all(teamRelations.data.map(async (relation) => {
108
+ try {
109
+ const teamAgentWithDefault = await getAgentWithDefaultSubAgent(dbClient_default)({ scopes: {
110
+ tenantId: config.tenantId,
111
+ projectId: config.projectId,
112
+ agentId: relation.targetAgentId
113
+ } });
114
+ if (teamAgentWithDefault?.defaultSubAgent) {
115
+ const defaultSubAgent = teamAgentWithDefault.defaultSubAgent;
116
+ const relatedAgentRelations = await getRelatedAgentsForAgent(dbClient_default)({
117
+ scopes: {
118
+ tenantId: config.tenantId,
119
+ projectId: config.projectId,
120
+ agentId: relation.targetAgentId
121
+ },
122
+ subAgentId: defaultSubAgent.id
123
+ });
124
+ const relatedAgentExternalAgentRelations = await getExternalAgentsForSubAgent(dbClient_default)({ scopes: {
125
+ tenantId: config.tenantId,
126
+ projectId: config.projectId,
127
+ agentId: relation.targetAgentId,
128
+ subAgentId: defaultSubAgent.id
129
+ } });
130
+ const relatedAgentTeamAgentRelations = await getTeamAgentsForSubAgent(dbClient_default)({ scopes: {
131
+ tenantId: config.tenantId,
132
+ projectId: config.projectId,
133
+ agentId: relation.targetAgentId,
134
+ subAgentId: defaultSubAgent.id
135
+ } });
136
+ const enhancedDescription = generateDescriptionWithRelationData(teamAgentWithDefault.description || "", relatedAgentRelations.data, relatedAgentExternalAgentRelations.data, relatedAgentTeamAgentRelations.data);
137
+ return {
138
+ ...relation,
139
+ targetAgent: {
140
+ ...relation.targetAgent,
141
+ description: enhancedDescription
142
+ }
143
+ };
144
+ }
145
+ } catch (error) {
146
+ logger.warn({
147
+ targetAgentId: relation.targetAgentId,
148
+ error
149
+ }, "Failed to enhance team agent description");
150
+ }
151
+ return relation;
152
+ }));
153
+ const prompt = "prompt" in config.agentSchema ? config.agentSchema.prompt || void 0 : "";
154
+ const models = "models" in config.agentSchema ? config.agentSchema.models : void 0;
155
+ const stopWhen = "stopWhen" in config.agentSchema ? config.agentSchema.stopWhen : void 0;
156
+ const toolsForAgentResult = await Promise.all(toolsForAgent.data.map(async (item) => {
157
+ const mcpTool = await dbResultToMcpTool(item.tool, dbClient_default, credentialStoreRegistry, item.id, config.userId);
158
+ if (item.selectedTools && item.selectedTools.length > 0) {
159
+ const selectedToolsSet = new Set(item.selectedTools);
160
+ mcpTool.availableTools = mcpTool.availableTools?.filter((tool) => selectedToolsSet.has(tool.name)) || [];
161
+ }
162
+ return mcpTool;
163
+ })) ?? [];
164
+ const agent = new Agent({
165
+ id: config.subAgentId,
166
+ tenantId: config.tenantId,
167
+ projectId: config.projectId,
168
+ agentId: config.agentId,
169
+ baseUrl: config.baseUrl,
170
+ apiKey: config.apiKey,
171
+ userId: config.userId,
172
+ name: config.name,
173
+ description: config.description || "",
174
+ prompt,
175
+ models: models || void 0,
176
+ stopWhen: stopWhen || void 0,
177
+ subAgentRelations: enhancedInternalRelations.map((relation) => ({
178
+ id: relation.id,
179
+ tenantId: config.tenantId,
180
+ projectId: config.projectId,
181
+ agentId: config.agentId,
182
+ baseUrl: config.baseUrl,
183
+ apiKey: config.apiKey,
184
+ name: relation.name,
185
+ description: relation.description || void 0,
186
+ prompt: "",
187
+ delegateRelations: [],
188
+ subAgentRelations: [],
189
+ transferRelations: []
190
+ })),
191
+ transferRelations: await Promise.all(enhancedInternalRelations.filter((relation) => relation.relationType === "transfer").map(async (relation) => {
192
+ const targetToolsForAgent = await getToolsForAgent(dbClient_default)({ scopes: {
193
+ tenantId: config.tenantId,
194
+ projectId: config.projectId,
195
+ agentId: config.agentId,
196
+ subAgentId: relation.id
197
+ } });
198
+ let targetTransferRelations = { data: [] };
199
+ let targetDelegateRelations = { data: [] };
200
+ try {
201
+ const [transferRel, delegateRel] = await Promise.all([getRelatedAgentsForAgent(dbClient_default)({
202
+ scopes: {
203
+ tenantId: config.tenantId,
204
+ projectId: config.projectId,
205
+ agentId: config.agentId
206
+ },
207
+ subAgentId: relation.id
208
+ }), getExternalAgentsForSubAgent(dbClient_default)({ scopes: {
209
+ tenantId: config.tenantId,
210
+ projectId: config.projectId,
211
+ agentId: config.agentId,
212
+ subAgentId: relation.id
213
+ } })]);
214
+ targetTransferRelations = transferRel;
215
+ targetDelegateRelations = delegateRel;
216
+ } catch (err) {
217
+ logger.info({
218
+ agentId: relation.id,
219
+ error: err?.message || "Unknown error"
220
+ }, "Could not fetch relations for target agent (likely external/team agent), using basic info only");
221
+ }
222
+ const targetAgentTools = await Promise.all(targetToolsForAgent.data.map(async (item) => {
223
+ const mcpTool = await dbResultToMcpTool(item.tool, dbClient_default, credentialStoreRegistry, item.id, config.userId);
224
+ if (item.selectedTools && item.selectedTools.length > 0) {
225
+ const selectedToolsSet = new Set(item.selectedTools);
226
+ mcpTool.availableTools = mcpTool.availableTools?.filter((tool) => selectedToolsSet.has(tool.name)) || [];
227
+ }
228
+ return mcpTool;
229
+ })) ?? [];
230
+ const targetTransferRelationsConfig = targetTransferRelations.data.filter((rel) => rel.relationType === "transfer").map((rel) => ({
231
+ baseUrl: config.baseUrl,
232
+ apiKey: config.apiKey,
233
+ id: rel.id,
234
+ tenantId: config.tenantId,
235
+ projectId: config.projectId,
236
+ agentId: config.agentId,
237
+ name: rel.name,
238
+ description: rel.description,
239
+ prompt: "",
240
+ delegateRelations: [],
241
+ subAgentRelations: [],
242
+ transferRelations: []
243
+ }));
244
+ const targetDelegateRelationsConfig = targetDelegateRelations.data.map((rel) => ({
245
+ type: "external",
246
+ config: {
247
+ id: rel.externalAgent.id,
248
+ name: rel.externalAgent.name,
249
+ description: rel.externalAgent.description || "",
250
+ baseUrl: rel.externalAgent.baseUrl,
251
+ headers: rel.headers,
252
+ credentialReferenceId: rel.externalAgent.credentialReferenceId,
253
+ relationId: rel.id,
254
+ relationType: "delegate"
255
+ }
256
+ }));
257
+ return {
258
+ baseUrl: config.baseUrl,
259
+ apiKey: config.apiKey,
260
+ id: relation.id,
261
+ tenantId: config.tenantId,
262
+ projectId: config.projectId,
263
+ agentId: config.agentId,
264
+ name: relation.name,
265
+ description: relation.description || void 0,
266
+ prompt: "",
267
+ delegateRelations: targetDelegateRelationsConfig,
268
+ subAgentRelations: [],
269
+ transferRelations: targetTransferRelationsConfig,
270
+ tools: targetAgentTools
271
+ };
272
+ })),
273
+ delegateRelations: [
274
+ ...enhancedInternalRelations.filter((relation) => relation.relationType === "delegate").map((relation) => ({
275
+ type: "internal",
276
+ config: {
277
+ id: relation.id,
278
+ relationId: relation.relationId,
279
+ tenantId: config.tenantId,
280
+ projectId: config.projectId,
281
+ agentId: config.agentId,
282
+ baseUrl: config.baseUrl,
283
+ apiKey: config.apiKey,
284
+ name: relation.name,
285
+ description: relation.description || void 0,
286
+ prompt: "",
287
+ delegateRelations: [],
288
+ subAgentRelations: [],
289
+ transferRelations: [],
290
+ tools: []
291
+ }
292
+ })),
293
+ ...externalRelations.data.map((relation) => ({
294
+ type: "external",
295
+ config: {
296
+ id: relation.externalAgent.id,
297
+ name: relation.externalAgent.name,
298
+ description: relation.externalAgent.description || "",
299
+ baseUrl: relation.externalAgent.baseUrl,
300
+ headers: relation.headers,
301
+ credentialReferenceId: relation.externalAgent.credentialReferenceId,
302
+ relationId: relation.id,
303
+ relationType: "delegate"
304
+ }
305
+ })),
306
+ ...enhancedTeamRelations.map((relation) => ({
307
+ type: "team",
308
+ config: {
309
+ id: relation.targetAgent.id,
310
+ name: relation.targetAgent.name,
311
+ description: relation.targetAgent.description || "",
312
+ baseUrl: config.baseUrl,
313
+ headers: relation.headers,
314
+ relationId: relation.id
315
+ }
316
+ }))
317
+ ],
318
+ tools: toolsForAgentResult,
319
+ functionTools: [],
320
+ dataComponents,
321
+ artifactComponents,
322
+ contextConfigId: config.contextConfigId || void 0,
323
+ conversationHistoryConfig: config.conversationHistoryConfig,
324
+ sandboxConfig: config.sandboxConfig
325
+ }, credentialStoreRegistry);
326
+ const artifactStreamRequestId = task.context?.metadata?.streamRequestId;
327
+ if (artifactStreamRequestId && artifactComponents.length > 0) agentSessionManager.updateArtifactComponents(artifactStreamRequestId, artifactComponents);
328
+ let contextId = task.context?.conversationId;
329
+ if (!contextId || contextId === "default" || contextId === "") {
330
+ const taskIdMatch = task.id.match(/^task_([^-]+-[^-]+-\d+)-/);
331
+ if (taskIdMatch) {
332
+ contextId = taskIdMatch[1];
333
+ logger.info({
334
+ taskId: task.id,
335
+ extractedContextId: contextId,
336
+ subAgentId: config.subAgentId
337
+ }, "Extracted contextId from task ID for delegation");
338
+ } else contextId = "default";
339
+ }
340
+ const streamRequestId = task.context?.metadata?.stream_request_id || task.context?.metadata?.streamRequestId;
341
+ const isDelegation = task.context?.metadata?.isDelegation === true;
342
+ const delegationId = task.context?.metadata?.delegationId;
343
+ agent.setDelegationStatus(isDelegation);
344
+ agent.setDelegationId(delegationId);
345
+ if (isDelegation) {
346
+ logger.info({
347
+ subAgentId: config.subAgentId,
348
+ taskId: task.id,
349
+ delegationId
350
+ }, "Delegated agent - streaming disabled");
351
+ if (streamRequestId && config.tenantId && config.projectId) toolSessionManager.ensureAgentSession(streamRequestId, config.tenantId, config.projectId, contextId, task.id);
352
+ }
353
+ const response = await agent.generate(userMessage, {
354
+ contextId,
355
+ metadata: {
356
+ conversationId: contextId,
357
+ taskId: task.id,
358
+ threadId: contextId,
359
+ streamRequestId,
360
+ ...config.apiKey ? { apiKey: config.apiKey } : {}
361
+ }
362
+ });
363
+ const stepContents = response.steps && Array.isArray(response.steps) ? response.steps.flatMap((step) => {
364
+ return step.content && Array.isArray(step.content) ? step.content : [];
365
+ }) : [];
366
+ const allToolCalls = stepContents.filter((content) => content.type === "tool-call");
367
+ const allToolResults = stepContents.filter((content) => content.type === "tool-result");
368
+ const allThoughts = stepContents.filter((content) => content.type === "text");
369
+ if (allToolCalls.length > 0) {
370
+ for (const toolCall of allToolCalls) if (toolCall.toolName.includes("transfer") || toolCall.toolName.includes("transferToRefundAgent")) {
371
+ const toolResult = allToolResults.find((result) => result.toolCallId === toolCall.toolCallId);
372
+ logger.info({
373
+ toolCallName: toolCall.toolName,
374
+ toolCallId: toolCall.toolCallId,
375
+ hasToolResult: !!toolResult,
376
+ toolResultOutput: toolResult?.output,
377
+ toolResultKeys: toolResult?.output ? Object.keys(toolResult.output) : []
378
+ }, "[DEBUG] Transfer tool result found");
379
+ const isValidTransferResult = (output) => {
380
+ return typeof output === "object" && output !== null && "type" in output && "targetSubAgentId" in output && output.type === "transfer" && typeof output.targetSubAgentId === "string";
381
+ };
382
+ const transferReason = response.text || (response.object ? JSON.stringify(response.object) : "") || allThoughts[allThoughts.length - 1]?.text || "Agent requested transfer. No reason provided.";
383
+ if (toolResult?.output && isValidTransferResult(toolResult.output)) {
384
+ const transferResult = toolResult.output;
385
+ logger.info({
386
+ validationPassed: true,
387
+ transferResult,
388
+ targetSubAgentId: transferResult.targetSubAgentId,
389
+ fromSubAgentId: transferResult.fromSubAgentId
390
+ }, "[DEBUG] Transfer validation passed, extracted data");
391
+ const artifactData = {
392
+ type: "transfer",
393
+ targetSubAgentId: transferResult.targetSubAgentId,
394
+ fromSubAgentId: transferResult.fromSubAgentId,
395
+ task_id: task.id,
396
+ reason: transferReason,
397
+ original_message: userMessage
398
+ };
399
+ logger.info({
400
+ artifactData,
401
+ artifactDataKeys: Object.keys(artifactData)
402
+ }, "[DEBUG] Artifact data being returned");
403
+ return {
404
+ status: {
405
+ state: TaskState.Completed,
406
+ message: `Transfer requested to ${transferResult.targetSubAgentId}`
407
+ },
408
+ artifacts: [{
409
+ artifactId: generateId(),
410
+ parts: [{
411
+ kind: "data",
412
+ data: artifactData
413
+ }]
414
+ }]
415
+ };
416
+ }
417
+ logger.warn({
418
+ hasToolResult: !!toolResult,
419
+ hasOutput: !!toolResult?.output,
420
+ validationPassed: false,
421
+ output: toolResult?.output
422
+ }, "[DEBUG] Transfer validation FAILED");
423
+ }
424
+ }
425
+ const parts = (response.formattedContent?.parts || []).map((part) => ({
426
+ kind: part.kind,
427
+ ...part.kind === "text" && { text: part.text },
428
+ ...part.kind === "data" && { data: part.data }
429
+ }));
430
+ return {
431
+ status: { state: TaskState.Completed },
432
+ artifacts: [{
433
+ artifactId: generateId(),
434
+ parts
435
+ }]
436
+ };
437
+ } catch (error) {
438
+ console.error("Task handler error:", error);
439
+ const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
440
+ const isConnectionRefused = errorMessage.includes("Connection refused. Please check if the MCP server is running.");
441
+ return {
442
+ status: {
443
+ state: TaskState.Failed,
444
+ message: errorMessage,
445
+ type: isConnectionRefused ? "connection_refused" : "unknown"
446
+ },
447
+ artifacts: []
448
+ };
449
+ }
450
+ };
451
+ };
452
+ /**
453
+ * Serializes a TaskHandlerConfig to JSON
454
+ */
455
+ const serializeTaskHandlerConfig = (config) => {
456
+ return JSON.stringify(config, null, 2);
457
+ };
458
+ /**
459
+ * Deserializes a TaskHandlerConfig from JSON
460
+ */
461
+ const deserializeTaskHandlerConfig = (configJson) => {
462
+ return JSON.parse(configJson);
463
+ };
464
+ /**
465
+ * Creates a task handler configuration from agent data
466
+ */
467
+ const createTaskHandlerConfig = async (params) => {
468
+ const subAgent = await getSubAgentById(dbClient_default)({
469
+ scopes: {
470
+ tenantId: params.tenantId,
471
+ projectId: params.projectId,
472
+ agentId: params.agentId
473
+ },
474
+ subAgentId: params.subAgentId
475
+ });
476
+ const agent = await getAgentById(dbClient_default)({ scopes: {
477
+ tenantId: params.tenantId,
478
+ projectId: params.projectId,
479
+ agentId: params.agentId
480
+ } });
481
+ if (!subAgent) throw new Error(`Agent not found: ${params.subAgentId}`);
482
+ const effectiveModels = await resolveModelConfig(params.agentId, subAgent);
483
+ const effectiveConversationHistoryConfig = subAgent.conversationHistoryConfig;
484
+ return {
485
+ tenantId: params.tenantId,
486
+ projectId: params.projectId,
487
+ agentId: params.agentId,
488
+ subAgentId: params.subAgentId,
489
+ agentSchema: {
490
+ id: subAgent.id,
491
+ name: subAgent.name,
492
+ description: subAgent.description,
493
+ prompt: subAgent.prompt,
494
+ models: effectiveModels,
495
+ conversationHistoryConfig: effectiveConversationHistoryConfig || null,
496
+ stopWhen: subAgent.stopWhen || null,
497
+ createdAt: subAgent.createdAt,
498
+ updatedAt: subAgent.updatedAt
499
+ },
500
+ baseUrl: params.baseUrl,
501
+ apiKey: params.apiKey,
502
+ name: subAgent.name,
503
+ description: subAgent.description || void 0,
504
+ conversationHistoryConfig: effectiveConversationHistoryConfig,
505
+ contextConfigId: agent?.contextConfigId || void 0,
506
+ sandboxConfig: params.sandboxConfig,
507
+ userId: params.userId
508
+ };
509
+ };
510
+
511
+ //#endregion
512
+ export { createTaskHandler, createTaskHandlerConfig, deserializeTaskHandlerConfig, serializeTaskHandlerConfig };
@@ -0,0 +1,57 @@
1
+ import { AgentConfig, DelegateRelation } from "./Agent.js";
2
+ import * as _inkeep_agents_core0 from "@inkeep/agents-core";
3
+ import { CredentialStoreRegistry } from "@inkeep/agents-core";
4
+ import * as ai0 from "ai";
5
+
6
+ //#region src/agents/relationTools.d.ts
7
+ declare const createTransferToAgentTool: ({
8
+ transferConfig,
9
+ callingAgentId,
10
+ subAgent,
11
+ streamRequestId
12
+ }: {
13
+ transferConfig: AgentConfig;
14
+ callingAgentId: string;
15
+ subAgent: any;
16
+ streamRequestId?: string;
17
+ }) => ai0.Tool<Record<string, never>, {
18
+ type: string;
19
+ targetSubAgentId: string;
20
+ fromSubAgentId: string;
21
+ }>;
22
+ declare function createDelegateToAgentTool({
23
+ delegateConfig,
24
+ callingAgentId,
25
+ tenantId,
26
+ projectId,
27
+ agentId,
28
+ contextId,
29
+ metadata,
30
+ sessionId,
31
+ subAgent,
32
+ credentialStoreRegistry
33
+ }: {
34
+ delegateConfig: DelegateRelation;
35
+ callingAgentId: string;
36
+ tenantId: string;
37
+ projectId: string;
38
+ agentId: string;
39
+ contextId: string;
40
+ metadata: {
41
+ conversationId: string;
42
+ threadId: string;
43
+ streamRequestId?: string;
44
+ streamBaseUrl?: string;
45
+ apiKey?: string;
46
+ };
47
+ sessionId?: string;
48
+ subAgent: any;
49
+ credentialStoreRegistry?: CredentialStoreRegistry;
50
+ }): ai0.Tool<{
51
+ message: string;
52
+ }, {
53
+ toolCallId: any;
54
+ result: _inkeep_agents_core0.Message | _inkeep_agents_core0.Task;
55
+ }>;
56
+ //#endregion
57
+ export { createDelegateToAgentTool, createTransferToAgentTool };