@inkeep/agents-api 0.42.0 → 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 (130) hide show
  1. package/dist/.well-known/workflow/v1/manifest.debug.json +15 -15
  2. package/dist/.well-known/workflow/v1/step.cjs +45672 -44470
  3. package/dist/_virtual/rolldown_runtime.js +7 -0
  4. package/dist/createApp.js +40 -12
  5. package/dist/domains/evals/api/.well-known/workflow/v1/flow.d.ts +4 -0
  6. package/dist/domains/evals/api/.well-known/workflow/v1/flow.js +12 -0
  7. package/dist/domains/evals/api/.well-known/workflow/v1/step.d.ts +4 -0
  8. package/dist/domains/evals/api/.well-known/workflow/v1/step.js +12 -0
  9. package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
  10. package/dist/domains/evals/routes/index.d.ts +2 -2
  11. package/dist/domains/evals/scripts/build-workflow.js +2 -2
  12. package/dist/domains/evals/workflow/routes.d.ts +2 -2
  13. package/dist/domains/evals/workflow/world.js +3 -2
  14. package/dist/domains/github/config.d.ts +14 -0
  15. package/dist/domains/github/config.js +47 -0
  16. package/dist/domains/github/index.d.ts +12 -0
  17. package/dist/domains/github/index.js +18 -0
  18. package/dist/domains/github/installation.d.ts +34 -0
  19. package/dist/domains/github/installation.js +172 -0
  20. package/dist/domains/github/jwks.d.ts +20 -0
  21. package/dist/domains/github/jwks.js +85 -0
  22. package/dist/domains/github/oidcToken.d.ts +22 -0
  23. package/dist/domains/github/oidcToken.js +140 -0
  24. package/dist/domains/github/routes/tokenExchange.d.ts +7 -0
  25. package/dist/domains/github/routes/tokenExchange.js +130 -0
  26. package/dist/domains/manage/index.js +0 -2
  27. package/dist/domains/manage/routes/agent.js +7 -4
  28. package/dist/domains/manage/routes/agentFull.js +9 -6
  29. package/dist/domains/manage/routes/apiKeys.js +1 -2
  30. package/dist/domains/manage/routes/artifactComponents.js +5 -5
  31. package/dist/domains/manage/routes/cliAuth.js +3 -3
  32. package/dist/domains/manage/routes/contextConfigs.js +5 -5
  33. package/dist/domains/manage/routes/conversations.d.ts +2 -2
  34. package/dist/domains/manage/routes/credentialStores.js +2 -2
  35. package/dist/domains/manage/routes/credentials.js +6 -7
  36. package/dist/domains/manage/routes/dataComponents.js +6 -7
  37. package/dist/domains/manage/routes/externalAgents.js +1 -2
  38. package/dist/domains/manage/routes/index.d.ts +2 -2
  39. package/dist/domains/manage/routes/index.js +4 -0
  40. package/dist/domains/manage/routes/invitations.js +1 -1
  41. package/dist/domains/manage/routes/mcp.d.ts +2 -2
  42. package/dist/domains/manage/routes/playgroundToken.js +1 -2
  43. package/dist/domains/manage/routes/projectFull.js +33 -11
  44. package/dist/domains/manage/routes/projectMembers.js +16 -35
  45. package/dist/domains/manage/routes/projectPermissions.js +17 -10
  46. package/dist/domains/manage/routes/projects.js +4 -5
  47. package/dist/domains/manage/routes/signoz.d.ts +2 -2
  48. package/dist/domains/manage/routes/signoz.js +6 -3
  49. package/dist/domains/manage/routes/subAgentArtifactComponents.js +5 -5
  50. package/dist/domains/manage/routes/subAgentDataComponents.js +5 -5
  51. package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +5 -5
  52. package/dist/domains/manage/routes/subAgentFunctionTools.js +5 -5
  53. package/dist/domains/manage/routes/subAgentRelations.js +6 -6
  54. package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +6 -6
  55. package/dist/domains/manage/routes/subAgentToolRelations.js +6 -6
  56. package/dist/domains/manage/routes/subAgents.js +5 -5
  57. package/dist/domains/manage/routes/tools.js +24 -3
  58. package/dist/domains/manage/routes/triggers.js +49 -24
  59. package/dist/domains/manage/routes/userOrganizations.js +4 -4
  60. package/dist/domains/manage/routes/{agentToolRelations.d.ts → userProjectMemberships.d.ts} +1 -1
  61. package/dist/domains/manage/routes/userProjectMemberships.js +45 -0
  62. package/dist/domains/mcp/routes/mcp.d.ts +7 -0
  63. package/dist/domains/mcp/routes/mcp.js +45 -0
  64. package/dist/domains/run/agents/Agent.d.ts +1 -0
  65. package/dist/domains/run/agents/Agent.js +207 -44
  66. package/dist/domains/run/agents/relationTools.d.ts +2 -2
  67. package/dist/domains/run/context/ContextFetcher.js +8 -7
  68. package/dist/domains/run/context/ContextResolver.js +1 -1
  69. package/dist/domains/run/handlers/executionHandler.js +143 -79
  70. package/dist/domains/run/routes/agents.js +1 -1
  71. package/dist/domains/run/routes/chat.js +47 -1
  72. package/dist/domains/run/routes/chatDataStream.js +107 -14
  73. package/dist/domains/run/routes/webhooks.js +40 -348
  74. package/dist/domains/run/services/AgentSession.d.ts +3 -0
  75. package/dist/domains/run/services/AgentSession.js +9 -0
  76. package/dist/domains/run/services/BaseCompressor.js +1 -1
  77. package/dist/domains/run/services/ToolApprovalUiBus.d.ts +28 -0
  78. package/dist/domains/run/services/ToolApprovalUiBus.js +44 -0
  79. package/dist/domains/run/services/TriggerService.d.ts +31 -0
  80. package/dist/domains/run/services/TriggerService.js +543 -0
  81. package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +3 -2
  82. package/dist/domains/run/tools/NativeSandboxExecutor.js +76 -48
  83. package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +11 -1
  84. package/dist/domains/run/tools/SandboxExecutorFactory.js +27 -3
  85. package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +3 -11
  86. package/dist/domains/run/tools/VercelSandboxExecutor.js +137 -127
  87. package/dist/domains/run/utils/stream-helpers.d.ts +134 -0
  88. package/dist/domains/run/utils/stream-helpers.js +182 -0
  89. package/dist/domains/run/utils/token-estimator.d.ts +2 -2
  90. package/dist/factory.d.ts +24 -24
  91. package/dist/index.d.ts +24 -24
  92. package/dist/initialization.js +9 -2
  93. package/dist/middleware/cors.js +1 -1
  94. package/dist/middleware/manageAuth.d.ts +2 -2
  95. package/dist/middleware/projectAccess.d.ts +4 -11
  96. package/dist/middleware/projectAccess.js +1 -17
  97. package/dist/middleware/projectConfig.d.ts +3 -3
  98. package/dist/middleware/requirePermission.d.ts +2 -2
  99. package/dist/middleware/runAuth.d.ts +4 -4
  100. package/dist/middleware/sessionAuth.d.ts +3 -3
  101. package/dist/middleware/tenantAccess.d.ts +2 -2
  102. package/dist/middleware/tenantAccess.js +4 -4
  103. package/dist/middleware/tracing.d.ts +3 -3
  104. package/dist/openapi.d.ts +35 -1
  105. package/dist/openapi.js +39 -95
  106. package/dist/routes/healthChecks.d.ts +10 -0
  107. package/dist/routes/healthChecks.js +75 -0
  108. package/dist/types/app.d.ts +2 -0
  109. package/dist/utils/healthChecks.d.ts +8 -0
  110. package/dist/utils/healthChecks.js +38 -0
  111. package/dist/utils/signozHelpers.d.ts +2 -2
  112. package/dist/utils/signozHelpers.js +15 -3
  113. package/package.json +7 -9
  114. package/dist/domains/evals/services/startEvaluation.d.ts +0 -19
  115. package/dist/domains/evals/services/startEvaluation.js +0 -18
  116. package/dist/domains/index.d.ts +0 -4
  117. package/dist/domains/index.js +0 -5
  118. package/dist/domains/manage/routes/agentToolRelations.js +0 -289
  119. package/dist/domains/run/agents/ModelFactory.d.ts +0 -63
  120. package/dist/domains/run/agents/ModelFactory.js +0 -194
  121. package/dist/domains/run/data/agent.d.ts +0 -7
  122. package/dist/domains/run/data/agent.js +0 -67
  123. package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +0 -4
  124. package/dist/domains/run/services/evaluationRunConfigMatcher.js +0 -7
  125. package/dist/domains/run/utils/cleanup.d.ts +0 -21
  126. package/dist/domains/run/utils/cleanup.js +0 -59
  127. package/dist/utils/tempApiKeys.d.ts +0 -17
  128. package/dist/utils/tempApiKeys.js +0 -26
  129. package/dist/utils/workflowApiHelpers.d.ts +0 -1
  130. package/dist/utils/workflowApiHelpers.js +0 -1
@@ -19,7 +19,7 @@ app.openapi(createRoute({
19
19
  path: "/",
20
20
  summary: "List Sub Agent Team Agent Relations",
21
21
  operationId: "list-sub-agent-team-agent-relations",
22
- tags: ["Sub Agent Team Agent Relations"],
22
+ tags: ["SubAgents"],
23
23
  request: {
24
24
  params: TenantProjectAgentSubAgentParamsSchema,
25
25
  query: PaginationQueryParamsSchema
@@ -52,7 +52,7 @@ app.openapi(createRoute({
52
52
  }
53
53
  });
54
54
  return c.json(result);
55
- } catch (_error) {
55
+ } catch {
56
56
  throw createApiError({
57
57
  code: "internal_server_error",
58
58
  message: "Failed to retrieve sub agent team agent relations"
@@ -64,7 +64,7 @@ app.openapi(createRoute({
64
64
  path: "/{id}",
65
65
  summary: "Get Sub Agent Team Agent Relation",
66
66
  operationId: "get-sub-agent-team-agent-relation-by-id",
67
- tags: ["Sub Agent Team Agent Relations"],
67
+ tags: ["SubAgents"],
68
68
  request: { params: TenantProjectAgentSubAgentIdParamsSchema },
69
69
  responses: {
70
70
  200: {
@@ -96,7 +96,7 @@ app.openapi(createRoute({
96
96
  path: "/",
97
97
  summary: "Create Sub Agent Team Agent Relation",
98
98
  operationId: "create-sub-agent-team-agent-relation",
99
- tags: ["Sub Agent Team Agent Relations"],
99
+ tags: ["SubAgents"],
100
100
  request: {
101
101
  params: TenantProjectAgentSubAgentParamsSchema,
102
102
  body: { content: { "application/json": { schema: SubAgentTeamAgentRelationApiInsertSchema } } }
@@ -147,7 +147,7 @@ app.openapi(createRoute({
147
147
  path: "/{id}",
148
148
  summary: "Update Sub Agent Team Agent Relation",
149
149
  operationId: "update-sub-agent-team-agent-relation",
150
- tags: ["Sub Agent Team Agent Relations"],
150
+ tags: ["SubAgents"],
151
151
  request: {
152
152
  params: TenantProjectAgentSubAgentIdParamsSchema,
153
153
  body: { content: { "application/json": { schema: SubAgentTeamAgentRelationApiUpdateSchema } } }
@@ -184,7 +184,7 @@ app.openapi(createRoute({
184
184
  path: "/{id}",
185
185
  summary: "Delete Sub Agent Team Agent Relation",
186
186
  operationId: "delete-sub-agent-team-agent-relation",
187
- tags: ["Sub Agent Team Agent Relations"],
187
+ tags: ["SubAgents"],
188
188
  request: { params: TenantProjectAgentSubAgentIdParamsSchema },
189
189
  responses: {
190
190
  204: { description: "Sub Agent Team Agent Relation deleted successfully" },
@@ -19,7 +19,7 @@ app.openapi(createRoute({
19
19
  path: "/",
20
20
  summary: "List SubAgent Tool Relations",
21
21
  operationId: "list-subagent-tool-relations",
22
- tags: ["SubAgent Tool Relations"],
22
+ tags: ["SubAgents", "Tools"],
23
23
  request: {
24
24
  params: TenantProjectAgentParamsSchema,
25
25
  query: PaginationQueryParamsSchema.extend({
@@ -98,7 +98,7 @@ app.openapi(createRoute({
98
98
  path: "/{id}",
99
99
  summary: "Get SubAgent Tool Relation",
100
100
  operationId: "get-subagent-tool-relation",
101
- tags: ["SubAgent Tool Relations"],
101
+ tags: ["SubAgents", "Tools"],
102
102
  request: { params: TenantProjectAgentIdParamsSchema },
103
103
  responses: {
104
104
  200: {
@@ -130,7 +130,7 @@ app.openapi(createRoute({
130
130
  path: "/tool/{toolId}/sub-agents",
131
131
  summary: "Get SubAgents for Tool",
132
132
  operationId: "get-subagents-for-tool",
133
- tags: ["SubAgent Tool Relations"],
133
+ tags: ["SubAgents", "Tools"],
134
134
  request: {
135
135
  params: TenantProjectAgentParamsSchema.extend({ toolId: z.string() }),
136
136
  query: PaginationQueryParamsSchema
@@ -165,7 +165,7 @@ app.openapi(createRoute({
165
165
  path: "/",
166
166
  summary: "Create SubAgent Tool Relation",
167
167
  operationId: "create-subagent-tool-relation",
168
- tags: ["SubAgent Tool Relations"],
168
+ tags: ["SubAgents", "Tools"],
169
169
  request: {
170
170
  params: TenantProjectAgentParamsSchema,
171
171
  body: { content: { "application/json": { schema: SubAgentToolRelationApiInsertSchema } } }
@@ -218,7 +218,7 @@ app.openapi(createRoute({
218
218
  path: "/{id}",
219
219
  summary: "Update SubAgent Tool Relation",
220
220
  operationId: "update-subagent-tool-relation",
221
- tags: ["SubAgent Tool Relations"],
221
+ tags: ["SubAgents", "Tools"],
222
222
  request: {
223
223
  params: TenantProjectAgentIdParamsSchema,
224
224
  body: { content: { "application/json": { schema: SubAgentToolRelationApiUpdateSchema } } }
@@ -258,7 +258,7 @@ app.openapi(createRoute({
258
258
  path: "/{id}",
259
259
  summary: "Delete SubAgent Tool Relation",
260
260
  operationId: "delete-subagent-tool-relation",
261
- tags: ["SubAgent Tool Relations"],
261
+ tags: ["SubAgents", "Tools"],
262
262
  request: { params: TenantProjectAgentIdParamsSchema },
263
263
  responses: {
264
264
  204: { description: "SubAgent tool relation deleted successfully" },
@@ -20,7 +20,7 @@ app.openapi(createRoute({
20
20
  path: "/",
21
21
  summary: "List SubAgents",
22
22
  operationId: "list-subagents",
23
- tags: ["SubAgent"],
23
+ tags: ["SubAgents"],
24
24
  request: {
25
25
  params: TenantProjectAgentParamsSchema,
26
26
  query: PaginationQueryParamsSchema
@@ -62,7 +62,7 @@ app.openapi(createRoute({
62
62
  path: "/{id}",
63
63
  summary: "Get SubAgent",
64
64
  operationId: "get-subagent-by-id",
65
- tags: ["SubAgent"],
65
+ tags: ["SubAgents"],
66
66
  request: { params: TenantProjectAgentIdParamsSchema },
67
67
  responses: {
68
68
  200: {
@@ -96,7 +96,7 @@ app.openapi(createRoute({
96
96
  path: "/",
97
97
  summary: "Create SubAgent",
98
98
  operationId: "create-subagent",
99
- tags: ["SubAgent"],
99
+ tags: ["SubAgents"],
100
100
  request: {
101
101
  params: TenantProjectAgentParamsSchema,
102
102
  body: { content: { "application/json": { schema: SubAgentApiInsertSchema } } }
@@ -129,7 +129,7 @@ app.openapi(createRoute({
129
129
  path: "/{id}",
130
130
  summary: "Update SubAgent",
131
131
  operationId: "update-subagent",
132
- tags: ["SubAgent"],
132
+ tags: ["SubAgents"],
133
133
  request: {
134
134
  params: TenantProjectAgentIdParamsSchema,
135
135
  body: { content: { "application/json": { schema: SubAgentApiUpdateSchema } } }
@@ -168,7 +168,7 @@ app.openapi(createRoute({
168
168
  path: "/{id}",
169
169
  summary: "Delete SubAgent",
170
170
  operationId: "delete-subagent",
171
- tags: ["SubAgent"],
171
+ tags: ["SubAgents"],
172
172
  request: { params: TenantProjectAgentIdParamsSchema },
173
173
  responses: {
174
174
  204: { description: "SubAgent deleted successfully" },
@@ -2,7 +2,8 @@ import { getLogger as getLogger$1 } from "../../../logger.js";
2
2
  import { requireProjectPermission } from "../../../middleware/projectAccess.js";
3
3
  import { speakeasyOffsetLimitPagination } from "../../../utils/speakeasy.js";
4
4
  import { OpenAPIHono, createRoute } from "@hono/zod-openapi";
5
- import { CredentialReferenceApiSelectSchema, CredentialReferenceResponse, McpToolListResponse, McpToolResponse, PaginationQueryParamsSchema, TenantProjectIdParamsSchema, TenantProjectParamsSchema, ToolApiInsertSchema, ToolApiUpdateSchema, ToolStatusSchema, commonGetErrorResponses, createApiError, createTool, dbResultToMcpTool, deleteTool, generateId, getToolById, getUserScopedCredentialReference, listTools, updateTool } from "@inkeep/agents-core";
5
+ import { CredentialReferenceApiSelectSchema, CredentialReferenceResponse, McpToolListResponse, McpToolResponse, PaginationQueryParamsSchema, TenantProjectIdParamsSchema, TenantProjectParamsSchema, ToolApiInsertSchema, ToolApiUpdateSchema, ToolStatusSchema, commonGetErrorResponses, createApiError, createTool, dbResultToMcpTool, dbResultToMcpToolSkeleton, deleteTool, generateId, getToolById, getUserScopedCredentialReference, listTools, updateTool } from "@inkeep/agents-core";
6
+ import { z as z$1 } from "zod";
6
7
 
7
8
  //#region src/domains/manage/routes/tools.ts
8
9
  const logger = getLogger$1("tools");
@@ -24,7 +25,10 @@ app.openapi(createRoute({
24
25
  tags: ["Tools"],
25
26
  request: {
26
27
  params: TenantProjectParamsSchema,
27
- query: PaginationQueryParamsSchema.extend({ status: ToolStatusSchema.optional() })
28
+ query: PaginationQueryParamsSchema.extend({
29
+ status: ToolStatusSchema.optional(),
30
+ skipDiscovery: z$1.enum(["true", "false"]).optional().transform((val) => val === "true").describe("Skip MCP server discovery for faster response. Status will be \"unknown\".")
31
+ })
28
32
  },
29
33
  responses: {
30
34
  200: {
@@ -37,10 +41,27 @@ app.openapi(createRoute({
37
41
  }), async (c) => {
38
42
  const db = c.get("db");
39
43
  const { tenantId, projectId } = c.req.valid("param");
40
- const { page, limit, status } = c.req.valid("query");
44
+ const { page, limit, status, skipDiscovery } = c.req.valid("query");
41
45
  let result;
42
46
  const credentialStores = c.get("credentialStores");
43
47
  const userId = c.get("userId");
48
+ if (skipDiscovery) {
49
+ const dbResult = await listTools(db)({
50
+ scopes: {
51
+ tenantId,
52
+ projectId
53
+ },
54
+ pagination: {
55
+ page,
56
+ limit
57
+ }
58
+ });
59
+ result = {
60
+ data: dbResult.data.map((tool) => dbResultToMcpToolSkeleton(tool)),
61
+ pagination: dbResult.pagination
62
+ };
63
+ return c.json(result);
64
+ }
44
65
  if (status) {
45
66
  const dbResult = await listTools(db)({
46
67
  scopes: {
@@ -4,21 +4,11 @@ import runDbClient_default from "../../../data/db/runDbClient.js";
4
4
  import { requireProjectPermission } from "../../../middleware/projectAccess.js";
5
5
  import { speakeasyOffsetLimitPagination } from "../../../utils/speakeasy.js";
6
6
  import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
7
- import { PaginationQueryParamsSchema, TenantProjectAgentIdParamsSchema, TenantProjectAgentParamsSchema, TriggerApiInsertSchema, TriggerApiSelectSchema, TriggerApiUpdateSchema, TriggerInvocationListResponse, TriggerInvocationResponse, TriggerInvocationStatusEnum, commonGetErrorResponses, createApiError, createTrigger, deleteTrigger, generateId, getTriggerById, getTriggerInvocationById, hashAuthenticationHeaders, listTriggerInvocationsPaginated, listTriggersPaginated, updateTrigger } from "@inkeep/agents-core";
7
+ import { PaginationQueryParamsSchema, TenantProjectAgentIdParamsSchema, TenantProjectAgentParamsSchema, TriggerApiInsertSchema, TriggerApiUpdateSchema, TriggerInvocationListResponse, TriggerInvocationResponse, TriggerInvocationStatusEnum, TriggerWithWebhookUrlListResponse, TriggerWithWebhookUrlResponse, commonGetErrorResponses, createApiError, createTrigger, deleteTrigger, generateId, getCredentialReference, getTriggerById, getTriggerInvocationById, hashAuthenticationHeaders, listTriggerInvocationsPaginated, listTriggersPaginated, updateTrigger } from "@inkeep/agents-core";
8
8
 
9
9
  //#region src/domains/manage/routes/triggers.ts
10
10
  const logger = getLogger$1("triggers");
11
11
  const app = new OpenAPIHono();
12
- const TriggerResponse = z.object({ data: TriggerApiSelectSchema.extend({ webhookUrl: z.string().describe("Fully qualified webhook URL for this trigger") }) });
13
- const TriggerListResponse = z.object({
14
- data: z.array(TriggerApiSelectSchema.extend({ webhookUrl: z.string().describe("Fully qualified webhook URL for this trigger") })),
15
- pagination: z.object({
16
- page: z.number(),
17
- limit: z.number(),
18
- total: z.number(),
19
- pages: z.number()
20
- })
21
- });
22
12
  app.use("/", async (c, next) => {
23
13
  if (c.req.method === "POST") return requireProjectPermission("edit")(c, next);
24
14
  return next();
@@ -51,7 +41,7 @@ app.openapi(createRoute({
51
41
  responses: {
52
42
  200: {
53
43
  description: "List of triggers retrieved successfully",
54
- content: { "application/json": { schema: TriggerListResponse } }
44
+ content: { "application/json": { schema: TriggerWithWebhookUrlListResponse } }
55
45
  },
56
46
  ...commonGetErrorResponses
57
47
  },
@@ -103,7 +93,7 @@ app.openapi(createRoute({
103
93
  responses: {
104
94
  200: {
105
95
  description: "Trigger found",
106
- content: { "application/json": { schema: TriggerResponse } }
96
+ content: { "application/json": { schema: TriggerWithWebhookUrlResponse } }
107
97
  },
108
98
  ...commonGetErrorResponses
109
99
  }
@@ -151,7 +141,7 @@ app.openapi(createRoute({
151
141
  responses: {
152
142
  201: {
153
143
  description: "Trigger created successfully",
154
- content: { "application/json": { schema: TriggerResponse } }
144
+ content: { "application/json": { schema: TriggerWithWebhookUrlResponse } }
155
145
  },
156
146
  ...commonGetErrorResponses
157
147
  }
@@ -161,12 +151,29 @@ app.openapi(createRoute({
161
151
  const body = c.req.valid("json");
162
152
  const apiBaseUrl = env.INKEEP_AGENTS_API_URL;
163
153
  const id = body.id || generateId();
164
- logger.info({
154
+ logger.debug({
165
155
  tenantId,
166
156
  projectId,
167
157
  agentId,
168
158
  triggerId: id
169
159
  }, "Creating trigger");
160
+ if (body.signingSecretCredentialReferenceId) {
161
+ const credentialRef = await getCredentialReference(db)({
162
+ scopes: {
163
+ tenantId,
164
+ projectId
165
+ },
166
+ id: body.signingSecretCredentialReferenceId
167
+ });
168
+ if (!credentialRef) throw createApiError({
169
+ code: "bad_request",
170
+ message: `Credential reference not found: ${body.signingSecretCredentialReferenceId}`
171
+ });
172
+ if (credentialRef.userId) throw createApiError({
173
+ code: "bad_request",
174
+ message: "Only project-scoped credentials can be attached to triggers. User-scoped credentials are not allowed."
175
+ });
176
+ }
170
177
  let hashedAuthentication;
171
178
  const authInput = body.authentication;
172
179
  if (authInput?.headers && authInput.headers.length > 0) hashedAuthentication = { headers: await hashAuthenticationHeaders(authInput.headers) };
@@ -182,7 +189,8 @@ app.openapi(createRoute({
182
189
  outputTransform: body.outputTransform,
183
190
  messageTemplate: body.messageTemplate,
184
191
  authentication: hashedAuthentication,
185
- signingSecret: body.signingSecret
192
+ signingSecretCredentialReferenceId: body.signingSecretCredentialReferenceId,
193
+ signatureVerification: body.signatureVerification
186
194
  });
187
195
  const { tenantId: _tid, projectId: _pid, agentId: _aid, ...triggerWithoutScopes } = trigger;
188
196
  return c.json({ data: {
@@ -212,7 +220,7 @@ app.openapi(createRoute({
212
220
  responses: {
213
221
  200: {
214
222
  description: "Trigger updated successfully",
215
- content: { "application/json": { schema: TriggerResponse } }
223
+ content: { "application/json": { schema: TriggerWithWebhookUrlResponse } }
216
224
  },
217
225
  ...commonGetErrorResponses
218
226
  }
@@ -221,16 +229,33 @@ app.openapi(createRoute({
221
229
  const { tenantId, projectId, agentId, id } = c.req.valid("param");
222
230
  const body = c.req.valid("json");
223
231
  const apiBaseUrl = env.INKEEP_AGENTS_API_URL;
224
- if (!(body.name !== void 0 || body.description !== void 0 || body.enabled !== void 0 || body.inputSchema !== void 0 || body.outputTransform !== void 0 || body.messageTemplate !== void 0 || body.authentication !== void 0 || body.signingSecret !== void 0 || body.keepExistingSigningSecret !== void 0)) throw createApiError({
232
+ if (!(body.name !== void 0 || body.description !== void 0 || body.enabled !== void 0 || body.inputSchema !== void 0 || body.outputTransform !== void 0 || body.messageTemplate !== void 0 || body.authentication !== void 0 || body.signingSecretCredentialReferenceId !== void 0 || body.signatureVerification !== void 0)) throw createApiError({
225
233
  code: "bad_request",
226
234
  message: "No fields to update"
227
235
  });
228
- logger.info({
236
+ logger.debug({
229
237
  tenantId,
230
238
  projectId,
231
239
  agentId,
232
240
  triggerId: id
233
241
  }, "Updating trigger");
242
+ if (body.signingSecretCredentialReferenceId) {
243
+ const credentialRef = await getCredentialReference(db)({
244
+ scopes: {
245
+ tenantId,
246
+ projectId
247
+ },
248
+ id: body.signingSecretCredentialReferenceId
249
+ });
250
+ if (!credentialRef) throw createApiError({
251
+ code: "bad_request",
252
+ message: `Credential reference not found: ${body.signingSecretCredentialReferenceId}`
253
+ });
254
+ if (credentialRef.userId) throw createApiError({
255
+ code: "bad_request",
256
+ message: "Only project-scoped credentials can be attached to triggers. User-scoped credentials are not allowed."
257
+ });
258
+ }
234
259
  let hashedAuthentication;
235
260
  const authInput = body.authentication;
236
261
  if (authInput?.headers && authInput.headers.length > 0) {
@@ -259,7 +284,6 @@ app.openapi(createRoute({
259
284
  }
260
285
  hashedAuthentication = hashedHeaders.length > 0 ? { headers: hashedHeaders } : void 0;
261
286
  } else if (body.authentication !== void 0) hashedAuthentication = body.authentication;
262
- const signingSecretUpdate = body.keepExistingSigningSecret ? void 0 : body.signingSecret;
263
287
  const updatedTrigger = await updateTrigger(db)({
264
288
  scopes: {
265
289
  tenantId,
@@ -275,7 +299,8 @@ app.openapi(createRoute({
275
299
  outputTransform: body.outputTransform,
276
300
  messageTemplate: body.messageTemplate,
277
301
  authentication: hashedAuthentication,
278
- signingSecret: signingSecretUpdate
302
+ signingSecretCredentialReferenceId: body.signingSecretCredentialReferenceId,
303
+ signatureVerification: body.signatureVerification
279
304
  }
280
305
  });
281
306
  if (!updatedTrigger) throw createApiError({
@@ -311,7 +336,7 @@ app.openapi(createRoute({
311
336
  }), async (c) => {
312
337
  const db = c.get("db");
313
338
  const { tenantId, projectId, agentId, id } = c.req.valid("param");
314
- logger.info({
339
+ logger.debug({
315
340
  tenantId,
316
341
  projectId,
317
342
  agentId,
@@ -372,7 +397,7 @@ app.openapi(createRoute({
372
397
  }), async (c) => {
373
398
  const { tenantId, projectId, agentId, id: triggerId } = c.req.valid("param");
374
399
  const { page, limit, status, from, to } = c.req.valid("query");
375
- logger.info({
400
+ logger.debug({
376
401
  tenantId,
377
402
  projectId,
378
403
  agentId,
@@ -426,7 +451,7 @@ app.openapi(createRoute({
426
451
  }
427
452
  }), async (c) => {
428
453
  const { tenantId, projectId, agentId, id: triggerId, invocationId } = c.req.valid("param");
429
- logger.info({
454
+ logger.debug({
430
455
  tenantId,
431
456
  projectId,
432
457
  agentId,
@@ -1,6 +1,6 @@
1
1
  import runDbClient_default from "../../../data/db/runDbClient.js";
2
2
  import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
3
- import { addUserToOrganization, getUserOrganizations } from "@inkeep/agents-core";
3
+ import { addUserToOrganization, getUserOrganizationsFromDb } from "@inkeep/agents-core";
4
4
  import { AddUserToOrganizationRequestSchema, AddUserToOrganizationResponseSchema, UserOrganizationsResponseSchema } from "@inkeep/agents-core/auth/validation";
5
5
 
6
6
  //#region src/domains/manage/routes/userOrganizations.ts
@@ -8,7 +8,7 @@ const userOrganizationsRoutes = new OpenAPIHono();
8
8
  userOrganizationsRoutes.openapi(createRoute({
9
9
  method: "get",
10
10
  path: "/",
11
- tags: ["user-organizations"],
11
+ tags: ["User Organizations"],
12
12
  summary: "List user organizations",
13
13
  description: "Get all organizations associated with a user",
14
14
  request: { params: z.object({ userId: z.string().describe("User ID") }) },
@@ -18,7 +18,7 @@ userOrganizationsRoutes.openapi(createRoute({
18
18
  } }
19
19
  }), async (c) => {
20
20
  const { userId } = c.req.valid("param");
21
- const userOrganizations = (await getUserOrganizations(runDbClient_default)(userId)).map((org) => ({
21
+ const userOrganizations = (await getUserOrganizationsFromDb(runDbClient_default)(userId)).map((org) => ({
22
22
  ...org,
23
23
  createdAt: org.createdAt.toISOString()
24
24
  }));
@@ -27,7 +27,7 @@ userOrganizationsRoutes.openapi(createRoute({
27
27
  userOrganizationsRoutes.openapi(createRoute({
28
28
  method: "post",
29
29
  path: "/",
30
- tags: ["user-organizations"],
30
+ tags: ["User Organizations"],
31
31
  summary: "Add user to organization",
32
32
  description: "Associate a user with an organization",
33
33
  request: {
@@ -1,7 +1,7 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { OpenAPIHono } from "@hono/zod-openapi";
3
3
 
4
- //#region src/domains/manage/routes/agentToolRelations.d.ts
4
+ //#region src/domains/manage/routes/userProjectMemberships.d.ts
5
5
  declare const app: OpenAPIHono<{
6
6
  Variables: ManageAppVariables;
7
7
  }, {}, "/">;
@@ -0,0 +1,45 @@
1
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
2
+ import { ProjectRoles, commonGetErrorResponses, isAuthzEnabled, listUserProjectMembershipsInSpiceDb } from "@inkeep/agents-core";
3
+
4
+ //#region src/domains/manage/routes/userProjectMemberships.ts
5
+ const app = new OpenAPIHono();
6
+ const projectRoleEnum = z.enum([
7
+ ProjectRoles.ADMIN,
8
+ ProjectRoles.MEMBER,
9
+ ProjectRoles.VIEWER
10
+ ]);
11
+ const UserProjectMembershipParamsSchema = z.object({
12
+ tenantId: z.string(),
13
+ userId: z.string()
14
+ });
15
+ app.openapi(createRoute({
16
+ method: "get",
17
+ path: "/",
18
+ summary: "List User Project Memberships",
19
+ description: "List all projects a user has explicit access to and their role in each. Requires authz to be enabled.",
20
+ operationId: "list-user-project-memberships",
21
+ tags: ["User Project Memberships"],
22
+ request: { params: UserProjectMembershipParamsSchema },
23
+ responses: {
24
+ 200: {
25
+ description: "List of project memberships for the user",
26
+ content: { "application/json": { schema: z.object({ data: z.array(z.object({
27
+ projectId: z.string(),
28
+ role: projectRoleEnum
29
+ })) }) } }
30
+ },
31
+ ...commonGetErrorResponses
32
+ }
33
+ }), async (c) => {
34
+ const { tenantId, userId } = c.req.valid("param");
35
+ if (!isAuthzEnabled()) return c.json({ data: [] });
36
+ const memberships = await listUserProjectMembershipsInSpiceDb({
37
+ tenantId,
38
+ userId
39
+ });
40
+ return c.json({ data: memberships });
41
+ });
42
+ var userProjectMemberships_default = app;
43
+
44
+ //#endregion
45
+ export { userProjectMemberships_default as default };
@@ -0,0 +1,7 @@
1
+ import { Hono } from "hono";
2
+ import * as hono_types11 from "hono/types";
3
+
4
+ //#region src/domains/mcp/routes/mcp.d.ts
5
+ declare const app: Hono<hono_types11.BlankEnv, hono_types11.BlankSchema, "/">;
6
+ //#endregion
7
+ export { app as default };
@@ -0,0 +1,45 @@
1
+ import { env } from "../../../env.js";
2
+ import { Hono } from "hono";
3
+ import { StreamableHTTPTransport } from "@hono/mcp";
4
+ import { HeaderForwardingHook, InkeepAgentsCore, SDKHooks, createConsoleLogger, createMCPServer } from "@inkeep/agents-mcp";
5
+
6
+ //#region src/domains/mcp/routes/mcp.ts
7
+ const app = new Hono();
8
+ /**
9
+ * Headers to forward from incoming requests to downstream API calls.
10
+ * x-forwarded-cookie is mapped to cookie for browser compatibility
11
+ * (browsers don't allow setting Cookie header directly).
12
+ */
13
+ const FORWARDED_HEADERS = [
14
+ "x-forwarded-cookie",
15
+ "authorization",
16
+ "cookie"
17
+ ];
18
+ app.all("/", async (c) => {
19
+ const transport = new StreamableHTTPTransport();
20
+ const noOpLogger = createConsoleLogger("error");
21
+ const headersToForward = {};
22
+ for (const headerName of FORWARDED_HEADERS) {
23
+ const value = c.req.header(headerName);
24
+ if (value) headersToForward[headerName] = value;
25
+ }
26
+ if (headersToForward["x-forwarded-cookie"] && !headersToForward.cookie) headersToForward.cookie = headersToForward["x-forwarded-cookie"];
27
+ const createSDKWithHeaders = () => {
28
+ const hooks = new SDKHooks();
29
+ hooks.registerBeforeRequestHook(new HeaderForwardingHook(headersToForward));
30
+ return new InkeepAgentsCore({
31
+ serverURL: env.INKEEP_AGENTS_API_URL,
32
+ hooks
33
+ });
34
+ };
35
+ await createMCPServer({
36
+ logger: noOpLogger,
37
+ serverURL: env.INKEEP_AGENTS_API_URL,
38
+ getSDK: createSDKWithHeaders
39
+ }).server.connect(transport);
40
+ return transport.handleRequest(c);
41
+ });
42
+ var mcp_default = app;
43
+
44
+ //#endregion
45
+ export { mcp_default as default };
@@ -99,6 +99,7 @@ declare class Agent {
99
99
  private mcpConnectionLocks;
100
100
  private currentCompressor;
101
101
  private executionContext;
102
+ private functionToolRelationshipIdByName;
102
103
  constructor(config: AgentConfig, executionContext: FullExecutionContext, credentialStoreRegistry?: CredentialStoreRegistry);
103
104
  /**
104
105
  * Get the maximum number of generation steps for this agent