@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.
- package/dist/.well-known/workflow/v1/flow.cjs +43 -106
- package/dist/.well-known/workflow/v1/flow.cjs.debug.json +2 -4
- package/dist/.well-known/workflow/v1/manifest.debug.json +17 -55
- package/dist/.well-known/workflow/v1/step.cjs +45938 -45976
- package/dist/.well-known/workflow/v1/step.cjs.debug.json +2 -4
- package/dist/_virtual/rolldown_runtime.js +7 -0
- package/dist/createApp.js +40 -12
- package/dist/domains/evals/api/.well-known/workflow/v1/flow.d.ts +4 -0
- package/dist/domains/evals/api/.well-known/workflow/v1/flow.js +12 -0
- package/dist/domains/evals/api/.well-known/workflow/v1/step.d.ts +4 -0
- package/dist/domains/evals/api/.well-known/workflow/v1/step.js +12 -0
- package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
- package/dist/domains/evals/routes/index.d.ts +2 -2
- package/dist/domains/evals/scripts/build-workflow.js +2 -2
- package/dist/domains/evals/workflow/functions/evaluateConversation.d.ts +4 -1
- package/dist/domains/evals/workflow/functions/evaluateConversation.js +2 -1
- package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +4 -1
- package/dist/domains/evals/workflow/functions/runDatasetItem.js +2 -1
- package/dist/domains/evals/workflow/routes.d.ts +2 -2
- package/dist/domains/evals/workflow/world.js +3 -2
- package/dist/domains/github/config.d.ts +14 -0
- package/dist/domains/github/config.js +47 -0
- package/dist/domains/github/index.d.ts +12 -0
- package/dist/domains/github/index.js +18 -0
- package/dist/domains/github/installation.d.ts +34 -0
- package/dist/domains/github/installation.js +172 -0
- package/dist/domains/github/jwks.d.ts +20 -0
- package/dist/domains/github/jwks.js +85 -0
- package/dist/domains/github/oidcToken.d.ts +22 -0
- package/dist/domains/github/oidcToken.js +140 -0
- package/dist/domains/github/routes/tokenExchange.d.ts +7 -0
- package/dist/domains/github/routes/tokenExchange.js +130 -0
- package/dist/domains/manage/index.js +0 -2
- package/dist/domains/manage/routes/agent.js +9 -4
- package/dist/domains/manage/routes/agentFull.js +9 -6
- package/dist/domains/manage/routes/apiKeys.js +1 -2
- package/dist/domains/manage/routes/artifactComponents.js +5 -5
- package/dist/domains/manage/routes/cliAuth.js +3 -3
- package/dist/domains/manage/routes/contextConfigs.js +5 -5
- package/dist/domains/manage/routes/conversations.d.ts +2 -2
- package/dist/domains/manage/routes/credentialStores.js +2 -2
- package/dist/domains/manage/routes/credentials.js +6 -7
- package/dist/domains/manage/routes/dataComponents.js +6 -7
- package/dist/domains/manage/routes/externalAgents.js +1 -2
- package/dist/domains/manage/routes/index.d.ts +2 -2
- package/dist/domains/manage/routes/index.js +4 -0
- package/dist/domains/manage/routes/invitations.js +1 -1
- package/dist/domains/manage/routes/mcp.d.ts +2 -2
- package/dist/domains/manage/routes/playgroundToken.js +1 -2
- package/dist/domains/manage/routes/projectFull.js +33 -11
- package/dist/domains/manage/routes/projectMembers.js +16 -35
- package/dist/domains/manage/routes/projectPermissions.js +17 -10
- package/dist/domains/manage/routes/projects.js +4 -5
- package/dist/domains/manage/routes/signoz.d.ts +2 -2
- package/dist/domains/manage/routes/signoz.js +6 -3
- package/dist/domains/manage/routes/subAgentArtifactComponents.js +5 -5
- package/dist/domains/manage/routes/subAgentDataComponents.js +5 -5
- package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +5 -5
- package/dist/domains/manage/routes/subAgentFunctionTools.js +5 -5
- package/dist/domains/manage/routes/subAgentRelations.js +6 -6
- package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +6 -6
- package/dist/domains/manage/routes/subAgentToolRelations.js +6 -6
- package/dist/domains/manage/routes/subAgents.js +5 -5
- package/dist/domains/manage/routes/tools.js +24 -3
- package/dist/domains/manage/routes/triggers.js +82 -25
- package/dist/domains/manage/routes/userOrganizations.js +4 -4
- package/dist/domains/manage/routes/{agentToolRelations.d.ts → userProjectMemberships.d.ts} +1 -1
- package/dist/domains/manage/routes/userProjectMemberships.js +45 -0
- package/dist/domains/mcp/routes/mcp.d.ts +7 -0
- package/dist/domains/mcp/routes/mcp.js +45 -0
- package/dist/domains/run/a2a/handlers.js +2 -10
- package/dist/domains/run/a2a/types.d.ts +2 -6
- package/dist/domains/run/agents/Agent.d.ts +1 -0
- package/dist/domains/run/agents/Agent.js +207 -44
- package/dist/domains/run/agents/generateTaskHandler.js +14 -2
- package/dist/domains/run/context/ContextFetcher.js +8 -7
- package/dist/domains/run/context/ContextResolver.js +1 -1
- package/dist/domains/run/handlers/executionHandler.d.ts +3 -1
- package/dist/domains/run/handlers/executionHandler.js +149 -84
- package/dist/domains/run/routes/agents.js +1 -1
- package/dist/domains/run/routes/chat.js +47 -1
- package/dist/domains/run/routes/chatDataStream.js +107 -14
- package/dist/domains/run/routes/webhooks.js +40 -329
- package/dist/domains/run/services/AgentSession.d.ts +3 -0
- package/dist/domains/run/services/AgentSession.js +9 -0
- package/dist/domains/run/services/BaseCompressor.js +1 -1
- package/dist/domains/run/services/ToolApprovalUiBus.d.ts +28 -0
- package/dist/domains/run/services/ToolApprovalUiBus.js +44 -0
- package/dist/domains/run/services/TriggerService.d.ts +31 -0
- package/dist/domains/run/services/TriggerService.js +543 -0
- package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +3 -2
- package/dist/domains/run/tools/NativeSandboxExecutor.js +76 -48
- package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +11 -1
- package/dist/domains/run/tools/SandboxExecutorFactory.js +27 -3
- package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +3 -11
- package/dist/domains/run/tools/VercelSandboxExecutor.js +137 -127
- package/dist/domains/run/types/xml.d.ts +1 -5
- package/dist/domains/run/utils/stream-helpers.d.ts +134 -0
- package/dist/domains/run/utils/stream-helpers.js +182 -0
- package/dist/factory.d.ts +278 -272
- package/dist/index.d.ts +275 -269
- package/dist/index.js +16 -1
- package/dist/initialization.js +9 -2
- package/dist/middleware/cors.js +1 -1
- package/dist/middleware/evalsAuth.d.ts +2 -2
- package/dist/middleware/manageAuth.d.ts +2 -2
- package/dist/middleware/projectAccess.d.ts +4 -11
- package/dist/middleware/projectAccess.js +1 -17
- package/dist/middleware/projectConfig.d.ts +3 -3
- package/dist/middleware/requirePermission.d.ts +2 -2
- package/dist/middleware/runAuth.d.ts +4 -4
- package/dist/middleware/sessionAuth.d.ts +3 -3
- package/dist/middleware/tenantAccess.d.ts +2 -2
- package/dist/middleware/tenantAccess.js +4 -4
- package/dist/middleware/tracing.d.ts +3 -3
- package/dist/openapi.d.ts +35 -1
- package/dist/openapi.js +39 -95
- package/dist/routes/healthChecks.d.ts +10 -0
- package/dist/routes/healthChecks.js +75 -0
- package/dist/templates/v1/phase1/system-prompt.js +1 -1
- package/dist/templates/v1/phase1/thinking-preparation.js +1 -1
- package/dist/templates/v1/phase1/tool.js +1 -1
- package/dist/templates/v1/phase2/data-component.js +1 -1
- package/dist/templates/v1/phase2/data-components.js +1 -1
- package/dist/templates/v1/phase2/system-prompt.js +1 -1
- package/dist/templates/v1/shared/artifact-retrieval-guidance.js +1 -1
- package/dist/templates/v1/shared/artifact.js +1 -1
- package/dist/types/app.d.ts +2 -0
- package/dist/utils/healthChecks.d.ts +8 -0
- package/dist/utils/healthChecks.js +38 -0
- package/dist/utils/signozHelpers.d.ts +2 -2
- package/dist/utils/signozHelpers.js +15 -3
- package/package.json +25 -28
- package/dist/domains/evals/services/startEvaluation.d.ts +0 -19
- package/dist/domains/evals/services/startEvaluation.js +0 -18
- package/dist/domains/index.d.ts +0 -4
- package/dist/domains/index.js +0 -5
- package/dist/domains/manage/routes/agentToolRelations.js +0 -289
- package/dist/domains/run/agents/ModelFactory.d.ts +0 -63
- package/dist/domains/run/agents/ModelFactory.js +0 -194
- package/dist/domains/run/data/agent.d.ts +0 -7
- package/dist/domains/run/data/agent.js +0 -67
- package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +0 -4
- package/dist/domains/run/services/evaluationRunConfigMatcher.js +0 -7
- package/dist/domains/run/utils/cleanup.d.ts +0 -21
- package/dist/domains/run/utils/cleanup.js +0 -59
- package/dist/utils/tempApiKeys.d.ts +0 -17
- package/dist/utils/tempApiKeys.js +0 -26
- package/dist/utils/workflowApiHelpers.d.ts +0 -1
- package/dist/utils/workflowApiHelpers.js +0 -1
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
import { getLogger
|
|
2
|
-
import {
|
|
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
|
|
15
|
-
const ajv = new Ajv({ allErrors: true });
|
|
7
|
+
const logger = getLogger("webhooks");
|
|
16
8
|
/**
|
|
17
9
|
* Webhook endpoint for trigger invocation
|
|
18
|
-
* POST /tenants
|
|
10
|
+
* POST /tenants/{tenantId}/projects/{projectId}/agents/{agentId}/triggers/{triggerId}
|
|
19
11
|
*/
|
|
20
12
|
const triggerWebhookRoute = createRoute({
|
|
21
13
|
method: "post",
|
|
22
|
-
path: "/tenants
|
|
23
|
-
tags: ["
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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 };
|