@inkeep/agents-api 0.0.1 → 0.43.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 (150) hide show
  1. package/dist/.well-known/workflow/v1/flow.cjs +43 -106
  2. package/dist/.well-known/workflow/v1/flow.cjs.debug.json +2 -4
  3. package/dist/.well-known/workflow/v1/manifest.debug.json +17 -55
  4. package/dist/.well-known/workflow/v1/step.cjs +45938 -45976
  5. package/dist/.well-known/workflow/v1/step.cjs.debug.json +2 -4
  6. package/dist/_virtual/rolldown_runtime.js +7 -0
  7. package/dist/createApp.js +40 -12
  8. package/dist/domains/evals/api/.well-known/workflow/v1/flow.d.ts +4 -0
  9. package/dist/domains/evals/api/.well-known/workflow/v1/flow.js +12 -0
  10. package/dist/domains/evals/api/.well-known/workflow/v1/step.d.ts +4 -0
  11. package/dist/domains/evals/api/.well-known/workflow/v1/step.js +12 -0
  12. package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
  13. package/dist/domains/evals/routes/index.d.ts +2 -2
  14. package/dist/domains/evals/scripts/build-workflow.js +2 -2
  15. package/dist/domains/evals/workflow/functions/evaluateConversation.d.ts +4 -1
  16. package/dist/domains/evals/workflow/functions/evaluateConversation.js +2 -1
  17. package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +4 -1
  18. package/dist/domains/evals/workflow/functions/runDatasetItem.js +2 -1
  19. package/dist/domains/evals/workflow/routes.d.ts +2 -2
  20. package/dist/domains/evals/workflow/world.js +3 -2
  21. package/dist/domains/github/config.d.ts +14 -0
  22. package/dist/domains/github/config.js +47 -0
  23. package/dist/domains/github/index.d.ts +12 -0
  24. package/dist/domains/github/index.js +18 -0
  25. package/dist/domains/github/installation.d.ts +34 -0
  26. package/dist/domains/github/installation.js +172 -0
  27. package/dist/domains/github/jwks.d.ts +20 -0
  28. package/dist/domains/github/jwks.js +85 -0
  29. package/dist/domains/github/oidcToken.d.ts +22 -0
  30. package/dist/domains/github/oidcToken.js +140 -0
  31. package/dist/domains/github/routes/tokenExchange.d.ts +7 -0
  32. package/dist/domains/github/routes/tokenExchange.js +130 -0
  33. package/dist/domains/manage/index.js +0 -2
  34. package/dist/domains/manage/routes/agent.js +9 -4
  35. package/dist/domains/manage/routes/agentFull.js +9 -6
  36. package/dist/domains/manage/routes/apiKeys.js +1 -2
  37. package/dist/domains/manage/routes/artifactComponents.js +5 -5
  38. package/dist/domains/manage/routes/cliAuth.js +3 -3
  39. package/dist/domains/manage/routes/contextConfigs.js +5 -5
  40. package/dist/domains/manage/routes/conversations.d.ts +2 -2
  41. package/dist/domains/manage/routes/credentialStores.js +2 -2
  42. package/dist/domains/manage/routes/credentials.js +6 -7
  43. package/dist/domains/manage/routes/dataComponents.js +6 -7
  44. package/dist/domains/manage/routes/externalAgents.js +1 -2
  45. package/dist/domains/manage/routes/index.d.ts +2 -2
  46. package/dist/domains/manage/routes/index.js +4 -0
  47. package/dist/domains/manage/routes/invitations.js +1 -1
  48. package/dist/domains/manage/routes/mcp.d.ts +2 -2
  49. package/dist/domains/manage/routes/playgroundToken.js +1 -2
  50. package/dist/domains/manage/routes/projectFull.js +33 -11
  51. package/dist/domains/manage/routes/projectMembers.js +16 -35
  52. package/dist/domains/manage/routes/projectPermissions.js +17 -10
  53. package/dist/domains/manage/routes/projects.js +4 -5
  54. package/dist/domains/manage/routes/signoz.d.ts +2 -2
  55. package/dist/domains/manage/routes/signoz.js +6 -3
  56. package/dist/domains/manage/routes/subAgentArtifactComponents.js +5 -5
  57. package/dist/domains/manage/routes/subAgentDataComponents.js +5 -5
  58. package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +5 -5
  59. package/dist/domains/manage/routes/subAgentFunctionTools.js +5 -5
  60. package/dist/domains/manage/routes/subAgentRelations.js +6 -6
  61. package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +6 -6
  62. package/dist/domains/manage/routes/subAgentToolRelations.js +6 -6
  63. package/dist/domains/manage/routes/subAgents.js +5 -5
  64. package/dist/domains/manage/routes/tools.js +24 -3
  65. package/dist/domains/manage/routes/triggers.js +82 -25
  66. package/dist/domains/manage/routes/userOrganizations.js +4 -4
  67. package/dist/domains/manage/routes/{agentToolRelations.d.ts → userProjectMemberships.d.ts} +1 -1
  68. package/dist/domains/manage/routes/userProjectMemberships.js +45 -0
  69. package/dist/domains/mcp/routes/mcp.d.ts +7 -0
  70. package/dist/domains/mcp/routes/mcp.js +45 -0
  71. package/dist/domains/run/a2a/handlers.js +2 -10
  72. package/dist/domains/run/a2a/types.d.ts +2 -6
  73. package/dist/domains/run/agents/Agent.d.ts +1 -0
  74. package/dist/domains/run/agents/Agent.js +207 -44
  75. package/dist/domains/run/agents/generateTaskHandler.js +14 -2
  76. package/dist/domains/run/context/ContextFetcher.js +8 -7
  77. package/dist/domains/run/context/ContextResolver.js +1 -1
  78. package/dist/domains/run/handlers/executionHandler.d.ts +3 -1
  79. package/dist/domains/run/handlers/executionHandler.js +149 -84
  80. package/dist/domains/run/routes/agents.js +1 -1
  81. package/dist/domains/run/routes/chat.js +47 -1
  82. package/dist/domains/run/routes/chatDataStream.js +107 -14
  83. package/dist/domains/run/routes/webhooks.js +40 -329
  84. package/dist/domains/run/services/AgentSession.d.ts +3 -0
  85. package/dist/domains/run/services/AgentSession.js +9 -0
  86. package/dist/domains/run/services/BaseCompressor.js +1 -1
  87. package/dist/domains/run/services/ToolApprovalUiBus.d.ts +28 -0
  88. package/dist/domains/run/services/ToolApprovalUiBus.js +44 -0
  89. package/dist/domains/run/services/TriggerService.d.ts +31 -0
  90. package/dist/domains/run/services/TriggerService.js +543 -0
  91. package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +3 -2
  92. package/dist/domains/run/tools/NativeSandboxExecutor.js +76 -48
  93. package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +11 -1
  94. package/dist/domains/run/tools/SandboxExecutorFactory.js +27 -3
  95. package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +3 -11
  96. package/dist/domains/run/tools/VercelSandboxExecutor.js +137 -127
  97. package/dist/domains/run/types/xml.d.ts +1 -5
  98. package/dist/domains/run/utils/stream-helpers.d.ts +134 -0
  99. package/dist/domains/run/utils/stream-helpers.js +182 -0
  100. package/dist/factory.d.ts +278 -272
  101. package/dist/index.d.ts +275 -269
  102. package/dist/index.js +16 -1
  103. package/dist/initialization.js +9 -2
  104. package/dist/middleware/cors.js +1 -1
  105. package/dist/middleware/evalsAuth.d.ts +2 -2
  106. package/dist/middleware/manageAuth.d.ts +2 -2
  107. package/dist/middleware/projectAccess.d.ts +4 -11
  108. package/dist/middleware/projectAccess.js +1 -17
  109. package/dist/middleware/projectConfig.d.ts +3 -3
  110. package/dist/middleware/requirePermission.d.ts +2 -2
  111. package/dist/middleware/runAuth.d.ts +4 -4
  112. package/dist/middleware/sessionAuth.d.ts +3 -3
  113. package/dist/middleware/tenantAccess.d.ts +2 -2
  114. package/dist/middleware/tenantAccess.js +4 -4
  115. package/dist/middleware/tracing.d.ts +3 -3
  116. package/dist/openapi.d.ts +35 -1
  117. package/dist/openapi.js +39 -95
  118. package/dist/routes/healthChecks.d.ts +10 -0
  119. package/dist/routes/healthChecks.js +75 -0
  120. package/dist/templates/v1/phase1/system-prompt.js +1 -1
  121. package/dist/templates/v1/phase1/thinking-preparation.js +1 -1
  122. package/dist/templates/v1/phase1/tool.js +1 -1
  123. package/dist/templates/v1/phase2/data-component.js +1 -1
  124. package/dist/templates/v1/phase2/data-components.js +1 -1
  125. package/dist/templates/v1/phase2/system-prompt.js +1 -1
  126. package/dist/templates/v1/shared/artifact-retrieval-guidance.js +1 -1
  127. package/dist/templates/v1/shared/artifact.js +1 -1
  128. package/dist/types/app.d.ts +2 -0
  129. package/dist/utils/healthChecks.d.ts +8 -0
  130. package/dist/utils/healthChecks.js +38 -0
  131. package/dist/utils/signozHelpers.d.ts +2 -2
  132. package/dist/utils/signozHelpers.js +15 -3
  133. package/package.json +25 -28
  134. package/dist/domains/evals/services/startEvaluation.d.ts +0 -19
  135. package/dist/domains/evals/services/startEvaluation.js +0 -18
  136. package/dist/domains/index.d.ts +0 -4
  137. package/dist/domains/index.js +0 -5
  138. package/dist/domains/manage/routes/agentToolRelations.js +0 -289
  139. package/dist/domains/run/agents/ModelFactory.d.ts +0 -63
  140. package/dist/domains/run/agents/ModelFactory.js +0 -194
  141. package/dist/domains/run/data/agent.d.ts +0 -7
  142. package/dist/domains/run/data/agent.js +0 -67
  143. package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +0 -4
  144. package/dist/domains/run/services/evaluationRunConfigMatcher.js +0 -7
  145. package/dist/domains/run/utils/cleanup.d.ts +0 -21
  146. package/dist/domains/run/utils/cleanup.js +0 -59
  147. package/dist/utils/tempApiKeys.d.ts +0 -17
  148. package/dist/utils/tempApiKeys.js +0 -26
  149. package/dist/utils/workflowApiHelpers.d.ts +0 -1
  150. package/dist/utils/workflowApiHelpers.js +0 -1
@@ -1,26 +1,18 @@
1
- import { getLogger as getLogger$1 } from "../../../logger.js";
2
- import { env } from "../../../env.js";
3
- import manageDbPool_default from "../../../data/db/manageDbPool.js";
4
- import runDbClient_default from "../../../data/db/runDbClient.js";
5
- import { createSSEStreamHelper } from "../utils/stream-helpers.js";
6
- import { ExecutionHandler } from "../handlers/executionHandler.js";
1
+ import { getLogger } from "../../../logger.js";
2
+ import { processWebhook } from "../services/TriggerService.js";
7
3
  import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
8
- import { JsonTransformer, createApiError, createMessage, createOrGetConversation, createTriggerInvocation, generateId, getConversationId, getFullProjectWithRelationIds, getTriggerById, interpolateTemplate, setActiveAgentForConversation, updateTriggerInvocationStatus, verifySigningSecret, verifyTriggerAuth, withRef } from "@inkeep/agents-core";
9
- import { context, propagation, trace } from "@opentelemetry/api";
10
- import Ajv from "ajv";
11
4
 
12
5
  //#region src/domains/run/routes/webhooks.ts
13
6
  const app = new OpenAPIHono();
14
- const logger = getLogger$1("webhooks");
15
- const ajv = new Ajv({ allErrors: true });
7
+ const logger = getLogger("webhooks");
16
8
  /**
17
9
  * Webhook endpoint for trigger invocation
18
- * POST /tenants/:tenantId/projects/:projectId/agents/:agentId/triggers/:triggerId
10
+ * POST /tenants/{tenantId}/projects/{projectId}/agents/{agentId}/triggers/{triggerId}
19
11
  */
20
12
  const triggerWebhookRoute = createRoute({
21
13
  method: "post",
22
- path: "/tenants/:tenantId/projects/:projectId/agents/:agentId/triggers/:triggerId",
23
- tags: ["webhooks"],
14
+ path: "/tenants/{tenantId}/projects/{projectId}/agents/{agentId}/triggers/{triggerId}",
15
+ tags: ["Webhooks"],
24
16
  summary: "Invoke agent via trigger webhook",
25
17
  description: "Webhook endpoint for third-party services to invoke an agent via a configured trigger",
26
18
  request: {
@@ -37,7 +29,8 @@ const triggerWebhookRoute = createRoute({
37
29
  description: "Webhook accepted and trigger invoked",
38
30
  content: { "application/json": { schema: z.object({
39
31
  success: z.boolean(),
40
- invocationId: z.string()
32
+ invocationId: z.string(),
33
+ conversationId: z.string()
41
34
  }) } }
42
35
  },
43
36
  400: {
@@ -62,6 +55,10 @@ const triggerWebhookRoute = createRoute({
62
55
  422: {
63
56
  description: "Payload transformation failed",
64
57
  content: { "application/json": { schema: z.object({ error: z.string() }) } }
58
+ },
59
+ 500: {
60
+ description: "Internal server error",
61
+ content: { "application/json": { schema: z.object({ error: z.string() }) } }
65
62
  }
66
63
  }
67
64
  });
@@ -74,322 +71,36 @@ app.openapi(triggerWebhookRoute, async (c) => {
74
71
  agentId,
75
72
  triggerId
76
73
  }, "Processing trigger webhook");
77
- try {
78
- const trigger = await withRef(manageDbPool_default, resolvedRef, (db) => getTriggerById(db)({
79
- scopes: {
80
- tenantId,
81
- projectId,
82
- agentId
83
- },
84
- triggerId
85
- }));
86
- if (!trigger) throw createApiError({
87
- code: "not_found",
88
- message: `Trigger ${triggerId} not found`
89
- });
90
- if (!trigger.enabled) throw createApiError({
91
- code: "not_found",
92
- message: "Trigger is disabled"
93
- });
94
- const bodyText = await c.req.text();
95
- const payload = bodyText ? JSON.parse(bodyText) : {};
96
- if (trigger.authentication) {
97
- const authResult = verifyTriggerAuth(c, trigger.authentication);
98
- if (!authResult.success) {
99
- if (authResult.status === 401) return c.json({ error: authResult.message || "Unauthorized" }, 401);
100
- return c.json({ error: authResult.message || "Forbidden" }, 403);
101
- }
102
- }
103
- if (trigger.signingSecret) {
104
- const signatureResult = verifySigningSecret(c, trigger.signingSecret, bodyText);
105
- if (!signatureResult.success) return c.json({ error: signatureResult.message || "Invalid signature" }, 403);
106
- }
107
- if (trigger.inputSchema) {
108
- const validate = ajv.compile(trigger.inputSchema);
109
- if (!validate(payload)) {
110
- const errors = validate.errors?.map((err) => `${err.instancePath} ${err.message}`);
111
- return c.json({
112
- error: "Payload validation failed",
113
- validationErrors: errors
114
- }, 400);
115
- }
116
- }
117
- let transformedPayload = payload;
118
- if (trigger.outputTransform) try {
119
- transformedPayload = await JsonTransformer.transformWithConfig(payload, trigger.outputTransform);
120
- logger.debug({
121
- triggerId,
122
- tenantId,
123
- projectId
124
- }, "Payload transformation successful");
125
- } catch (error) {
126
- const errorMessage = error instanceof Error ? error.message : String(error);
127
- logger.error({
128
- triggerId,
129
- tenantId,
130
- projectId,
131
- error: errorMessage
132
- }, "Payload transformation failed");
133
- return c.json({ error: `Payload transformation failed: ${errorMessage}` }, 422);
134
- }
135
- const interpolatedMessage = trigger.messageTemplate ? interpolateTemplate(trigger.messageTemplate, transformedPayload) : JSON.stringify(transformedPayload);
136
- const conversationId = getConversationId();
137
- const invocationId = generateId();
138
- await createTriggerInvocation(runDbClient_default)({
139
- id: invocationId,
140
- triggerId,
141
- tenantId,
142
- projectId,
143
- agentId,
144
- conversationId,
145
- status: "pending",
146
- requestPayload: payload,
147
- transformedPayload
148
- });
149
- logger.info({
150
- tenantId,
151
- projectId,
152
- agentId,
153
- triggerId,
154
- invocationId,
155
- conversationId
156
- }, "Trigger invocation created");
157
- invokeAgentAsync({
158
- tenantId,
159
- projectId,
160
- agentId,
161
- triggerId,
162
- invocationId,
163
- conversationId,
164
- userMessage: interpolatedMessage,
165
- resolvedRef
166
- }).catch((error) => {
167
- logger.error({
168
- error,
169
- tenantId,
170
- projectId,
171
- agentId,
172
- triggerId,
173
- invocationId
174
- }, "Async agent invocation failed");
175
- });
176
- logger.info({
177
- tenantId,
178
- projectId,
179
- agentId,
180
- triggerId,
181
- invocationId,
182
- conversationId
183
- }, "Trigger webhook accepted, agent invocation initiated");
184
- return c.json({
185
- success: true,
186
- invocationId
187
- }, 202);
188
- } catch (error) {
189
- logger.error({
190
- error,
191
- tenantId,
192
- projectId,
193
- agentId,
194
- triggerId
195
- }, "Webhook processing failed");
196
- throw error;
74
+ const result = await processWebhook({
75
+ tenantId,
76
+ projectId,
77
+ agentId,
78
+ triggerId,
79
+ resolvedRef,
80
+ rawBody: await c.req.text(),
81
+ honoContext: c
82
+ });
83
+ if (!result.success) {
84
+ if (result.validationErrors) return c.json({
85
+ error: result.error,
86
+ validationErrors: result.validationErrors
87
+ }, result.status);
88
+ return c.json({ error: result.error }, result.status);
197
89
  }
90
+ logger.info({
91
+ tenantId,
92
+ projectId,
93
+ agentId,
94
+ triggerId,
95
+ invocationId: result.invocationId,
96
+ conversationId: result.conversationId
97
+ }, "Trigger webhook accepted, workflow dispatched");
98
+ return c.json({
99
+ success: true,
100
+ invocationId: result.invocationId,
101
+ conversationId: result.conversationId
102
+ }, 202);
198
103
  });
199
- /**
200
- * Invokes an agent asynchronously for a trigger invocation.
201
- * This function creates a conversation, stores the user message,
202
- * and executes the agent using ExecutionHandler.
203
- * It updates the trigger invocation status based on success/failure.
204
- */
205
- async function invokeAgentAsync(params) {
206
- const { tenantId, projectId, agentId, triggerId, invocationId, conversationId, userMessage, resolvedRef } = params;
207
- return await trace.getTracer("trigger-invocation").startActiveSpan("trigger.invocation", { attributes: {
208
- "conversation.id": conversationId,
209
- "tenant.id": tenantId,
210
- "project.id": projectId,
211
- "agent.id": agentId,
212
- "invocation.type": "trigger",
213
- "trigger.id": triggerId,
214
- "trigger.invocation.id": invocationId,
215
- "message.content": userMessage,
216
- "message.timestamp": (/* @__PURE__ */ new Date()).toISOString()
217
- } }, async (span) => {
218
- let currentBag = propagation.getBaggage(context.active());
219
- if (!currentBag) currentBag = propagation.createBaggage();
220
- currentBag = currentBag.setEntry("conversation.id", { value: conversationId });
221
- currentBag = currentBag.setEntry("tenant.id", { value: tenantId });
222
- currentBag = currentBag.setEntry("project.id", { value: projectId });
223
- currentBag = currentBag.setEntry("agent.id", { value: agentId });
224
- currentBag = currentBag.setEntry("invocation.type", { value: "trigger" });
225
- currentBag = currentBag.setEntry("trigger.id", { value: triggerId });
226
- currentBag = currentBag.setEntry("trigger.invocation.id", { value: invocationId });
227
- const ctxWithBaggage = propagation.setBaggage(context.active(), currentBag);
228
- return await context.with(ctxWithBaggage, async () => {
229
- try {
230
- logger.info({
231
- tenantId,
232
- projectId,
233
- agentId,
234
- triggerId,
235
- invocationId,
236
- conversationId
237
- }, "Starting async agent invocation");
238
- const project = await withRef(manageDbPool_default, resolvedRef, async (db) => {
239
- return await getFullProjectWithRelationIds(db)({ scopes: {
240
- tenantId,
241
- projectId
242
- } });
243
- });
244
- if (!project) throw createApiError({
245
- code: "not_found",
246
- message: `Project ${projectId} not found`
247
- });
248
- const fullAgent = project.agents[agentId];
249
- if (!fullAgent) throw createApiError({
250
- code: "not_found",
251
- message: `Agent ${agentId} not found`
252
- });
253
- logger.debug({
254
- tenantId,
255
- projectId,
256
- agentId,
257
- defaultSubAgentId: fullAgent.defaultSubAgentId,
258
- subAgentKeys: Object.keys(fullAgent.subAgents || {}),
259
- subAgentsCount: Object.keys(fullAgent.subAgents || {}).length
260
- }, "Debug: Agent and sub-agent info");
261
- const agentKeys = Object.keys(fullAgent.subAgents || {});
262
- const firstAgentId = agentKeys.length > 0 ? agentKeys[0] : "";
263
- const defaultSubAgentId = fullAgent.defaultSubAgentId || firstAgentId;
264
- if (!defaultSubAgentId) throw createApiError({
265
- code: "not_found",
266
- message: "No default sub-agent found"
267
- });
268
- const executionContext = {
269
- tenantId,
270
- projectId,
271
- agentId,
272
- baseUrl: env.INKEEP_AGENTS_API_URL || "http://localhost:3002",
273
- apiKey: "",
274
- apiKeyId: "trigger-invocation",
275
- resolvedRef,
276
- project,
277
- metadata: { initiatedBy: {
278
- type: "api_key",
279
- id: triggerId
280
- } }
281
- };
282
- await createOrGetConversation(runDbClient_default)({
283
- tenantId,
284
- projectId,
285
- id: conversationId,
286
- agentId,
287
- activeSubAgentId: defaultSubAgentId,
288
- ref: executionContext.resolvedRef
289
- });
290
- await setActiveAgentForConversation(runDbClient_default)({
291
- scopes: {
292
- tenantId,
293
- projectId
294
- },
295
- conversationId,
296
- agentId,
297
- subAgentId: defaultSubAgentId,
298
- ref: executionContext.resolvedRef
299
- });
300
- logger.info({
301
- conversationId,
302
- agentId,
303
- defaultSubAgentId
304
- }, "Conversation created and agent set");
305
- await createMessage(runDbClient_default)({
306
- id: generateId(),
307
- tenantId,
308
- projectId,
309
- conversationId,
310
- role: "user",
311
- content: { text: userMessage },
312
- visibility: "user-facing",
313
- messageType: "chat"
314
- });
315
- logger.info({
316
- conversationId,
317
- invocationId
318
- }, "User message created");
319
- const requestId = `trigger-${invocationId}`;
320
- const noOpStreamHelper = createSSEStreamHelper({
321
- writeSSE: async () => {},
322
- sleep: async () => {}
323
- }, requestId, Math.floor(Date.now() / 1e3));
324
- await new ExecutionHandler().execute({
325
- executionContext,
326
- conversationId,
327
- userMessage,
328
- initialAgentId: agentId,
329
- requestId,
330
- sseHelper: noOpStreamHelper,
331
- emitOperations: false
332
- });
333
- await updateTriggerInvocationStatus(runDbClient_default)({
334
- scopes: {
335
- tenantId,
336
- projectId,
337
- agentId
338
- },
339
- triggerId,
340
- invocationId,
341
- data: { status: "success" }
342
- });
343
- logger.info({
344
- tenantId,
345
- projectId,
346
- agentId,
347
- triggerId,
348
- invocationId,
349
- conversationId
350
- }, "Agent invocation completed successfully");
351
- span.end();
352
- } catch (error) {
353
- const errorMessage = error instanceof Error ? error.message : String(error);
354
- logger.error({
355
- error,
356
- tenantId,
357
- projectId,
358
- agentId,
359
- triggerId,
360
- invocationId
361
- }, "Agent invocation failed");
362
- span.recordException(error instanceof Error ? error : new Error(errorMessage));
363
- span.setStatus({
364
- code: 2,
365
- message: errorMessage
366
- });
367
- try {
368
- await updateTriggerInvocationStatus(runDbClient_default)({
369
- scopes: {
370
- tenantId,
371
- projectId,
372
- agentId
373
- },
374
- triggerId,
375
- invocationId,
376
- data: {
377
- status: "failed",
378
- errorMessage
379
- }
380
- });
381
- } catch (updateError) {
382
- logger.error({
383
- updateError,
384
- invocationId
385
- }, "Failed to update trigger invocation status to failed");
386
- }
387
- span.end();
388
- throw error;
389
- }
390
- });
391
- });
392
- }
393
104
  var webhooks_default = app;
394
105
 
395
106
  //#endregion
@@ -112,6 +112,7 @@ interface ToolCallData {
112
112
  relationshipId?: string;
113
113
  needsApproval?: boolean;
114
114
  conversationId?: string;
115
+ inDelegatedAgent?: boolean;
115
116
  }
116
117
  interface ToolResultData {
117
118
  toolName: string;
@@ -121,6 +122,7 @@ interface ToolResultData {
121
122
  error?: string;
122
123
  relationshipId?: string;
123
124
  needsApproval?: boolean;
125
+ inDelegatedAgent?: boolean;
124
126
  }
125
127
  interface CompressionEventData {
126
128
  reason: 'manual' | 'automatic';
@@ -135,6 +137,7 @@ interface ErrorEventData {
135
137
  code?: string;
136
138
  severity?: 'error' | 'warning' | 'info';
137
139
  context?: any;
140
+ relationshipId?: string;
138
141
  }
139
142
  /**
140
143
  * Tracks all agent operations and interactions for a single message
@@ -345,6 +345,15 @@ var AgentSession = class {
345
345
  this.artifactProcessingErrors.clear();
346
346
  this.artifactCache.clear();
347
347
  if (this.sessionId) toolSessionManager.endSession(this.sessionId);
348
+ if (this.sessionId) try {
349
+ const { SandboxExecutorFactory } = await import("../tools/SandboxExecutorFactory.js");
350
+ await SandboxExecutorFactory.cleanupSession(this.sessionId);
351
+ } catch (error) {
352
+ logger.warn({
353
+ sessionId: this.sessionId,
354
+ error
355
+ }, "Failed to cleanup session-scoped sandbox executors");
356
+ }
348
357
  if (this.scheduledTimeouts) {
349
358
  for (const timeoutId of this.scheduledTimeouts) clearTimeout(timeoutId);
350
359
  this.scheduledTimeouts.clear();
@@ -5,8 +5,8 @@ import { getCompressionConfigForModel } from "../utils/model-context-utils.js";
5
5
  import { tracer } from "../utils/tracer.js";
6
6
  import { agentSessionManager } from "./AgentSession.js";
7
7
  import { getLedgerArtifacts } from "@inkeep/agents-core";
8
- import { SpanStatusCode } from "@opentelemetry/api";
9
8
  import { randomUUID } from "node:crypto";
9
+ import { SpanStatusCode } from "@opentelemetry/api";
10
10
 
11
11
  //#region src/domains/run/services/BaseCompressor.ts
12
12
  const logger = getLogger$1("BaseCompressor");
@@ -0,0 +1,28 @@
1
+ //#region src/domains/run/services/ToolApprovalUiBus.d.ts
2
+ type ToolApprovalUiEvent = {
3
+ type: 'approval-needed';
4
+ toolCallId: string;
5
+ toolName: string;
6
+ input: any;
7
+ providerMetadata?: any;
8
+ approvalId: string;
9
+ } | {
10
+ type: 'approval-resolved';
11
+ toolCallId: string;
12
+ approved: boolean;
13
+ };
14
+ type Listener = (event: ToolApprovalUiEvent) => void | Promise<void>;
15
+ /**
16
+ * In-process event bus keyed by streamRequestId.
17
+ *
18
+ * Used to propagate approval UI events from delegated agents (who must not write to stream)
19
+ * up to the user-facing request handler, which can stream tool UI parts to the client.
20
+ */
21
+ declare class ToolApprovalUiBus {
22
+ private listeners;
23
+ subscribe(streamRequestId: string, listener: Listener): () => void;
24
+ publish(streamRequestId: string, event: ToolApprovalUiEvent): Promise<void>;
25
+ }
26
+ declare const toolApprovalUiBus: ToolApprovalUiBus;
27
+ //#endregion
28
+ export { ToolApprovalUiBus, ToolApprovalUiEvent, toolApprovalUiBus };
@@ -0,0 +1,44 @@
1
+ import { getLogger } from "../../../logger.js";
2
+
3
+ //#region src/domains/run/services/ToolApprovalUiBus.ts
4
+ const logger = getLogger("ToolApprovalUiBus");
5
+ /**
6
+ * In-process event bus keyed by streamRequestId.
7
+ *
8
+ * Used to propagate approval UI events from delegated agents (who must not write to stream)
9
+ * up to the user-facing request handler, which can stream tool UI parts to the client.
10
+ */
11
+ var ToolApprovalUiBus = class {
12
+ listeners = /* @__PURE__ */ new Map();
13
+ subscribe(streamRequestId, listener) {
14
+ if (!streamRequestId) return () => {};
15
+ const set = this.listeners.get(streamRequestId) ?? /* @__PURE__ */ new Set();
16
+ set.add(listener);
17
+ this.listeners.set(streamRequestId, set);
18
+ return () => {
19
+ const existing = this.listeners.get(streamRequestId);
20
+ if (!existing) return;
21
+ existing.delete(listener);
22
+ if (existing.size === 0) this.listeners.delete(streamRequestId);
23
+ };
24
+ }
25
+ async publish(streamRequestId, event) {
26
+ if (!streamRequestId) return;
27
+ const set = this.listeners.get(streamRequestId);
28
+ if (!set || set.size === 0) return;
29
+ for (const listener of set) try {
30
+ await listener(event);
31
+ } catch (error) {
32
+ logger.warn({
33
+ streamRequestId,
34
+ eventType: event.type,
35
+ toolCallId: event.toolCallId,
36
+ error: error instanceof Error ? error.message : String(error)
37
+ }, "ToolApprovalUiBus listener failed");
38
+ }
39
+ }
40
+ };
41
+ const toolApprovalUiBus = new ToolApprovalUiBus();
42
+
43
+ //#endregion
44
+ export { ToolApprovalUiBus, toolApprovalUiBus };
@@ -0,0 +1,31 @@
1
+ import { Context } from "hono";
2
+ import { ResolvedRef } from "@inkeep/agents-core";
3
+
4
+ //#region src/domains/run/services/TriggerService.d.ts
5
+
6
+ type TriggerWebhookParams = {
7
+ tenantId: string;
8
+ projectId: string;
9
+ agentId: string;
10
+ triggerId: string;
11
+ resolvedRef: ResolvedRef;
12
+ rawBody: string;
13
+ honoContext: Context;
14
+ };
15
+ type TriggerWebhookResult = {
16
+ success: true;
17
+ invocationId: string;
18
+ conversationId: string;
19
+ } | {
20
+ success: false;
21
+ error: string;
22
+ status: 400 | 401 | 403 | 404 | 422 | 500;
23
+ validationErrors?: string[];
24
+ };
25
+ /**
26
+ * Process a trigger webhook request.
27
+ * Handles validation, transformation, and dispatches async execution.
28
+ */
29
+ declare function processWebhook(params: TriggerWebhookParams): Promise<TriggerWebhookResult>;
30
+ //#endregion
31
+ export { TriggerWebhookParams, TriggerWebhookResult, processWebhook };