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