@inkeep/agents-core 0.58.13 → 0.58.15

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 (93) hide show
  1. package/dist/auth/auth-schema.d.ts +107 -107
  2. package/dist/auth/auth-validation-schemas.d.ts +152 -152
  3. package/dist/auth/auth.d.ts +9 -9
  4. package/dist/auth/auth.js +17 -45
  5. package/dist/auth/permissions.d.ts +9 -9
  6. package/dist/data-access/index.d.ts +6 -1
  7. package/dist/data-access/index.js +6 -1
  8. package/dist/data-access/manage/agentFull.js +28 -12
  9. package/dist/data-access/manage/agents.d.ts +40 -39
  10. package/dist/data-access/manage/agents.js +33 -33
  11. package/dist/data-access/manage/artifactComponents.d.ts +8 -8
  12. package/dist/data-access/manage/artifactComponents.js +14 -13
  13. package/dist/data-access/manage/audit-queries.d.ts +29 -0
  14. package/dist/data-access/manage/audit-queries.js +30 -0
  15. package/dist/data-access/manage/contextConfigs.d.ts +4 -4
  16. package/dist/data-access/manage/contextConfigs.js +7 -6
  17. package/dist/data-access/manage/credentialReferences.js +12 -11
  18. package/dist/data-access/manage/dataComponents.d.ts +4 -4
  19. package/dist/data-access/manage/dataComponents.js +13 -11
  20. package/dist/data-access/manage/evalConfig.js +42 -41
  21. package/dist/data-access/manage/externalAgents.js +8 -7
  22. package/dist/data-access/manage/functionTools.d.ts +11 -15
  23. package/dist/data-access/manage/functionTools.js +27 -65
  24. package/dist/data-access/manage/functions.js +7 -10
  25. package/dist/data-access/manage/projects.js +37 -36
  26. package/dist/data-access/manage/scheduledTriggers.js +10 -6
  27. package/dist/data-access/manage/scheduledWorkflows.js +3 -2
  28. package/dist/data-access/manage/scope-helpers.d.ts +2 -1
  29. package/dist/data-access/manage/scope-helpers.js +2 -1
  30. package/dist/data-access/manage/skills.d.ts +11 -11
  31. package/dist/data-access/manage/skills.js +14 -9
  32. package/dist/data-access/manage/subAgentExternalAgentRelations.d.ts +12 -12
  33. package/dist/data-access/manage/subAgentRelations.d.ts +18 -18
  34. package/dist/data-access/manage/subAgentRelations.js +28 -26
  35. package/dist/data-access/manage/subAgentTeamAgentRelations.d.ts +12 -12
  36. package/dist/data-access/manage/subAgentTeamAgentRelations.js +16 -16
  37. package/dist/data-access/manage/subAgents.d.ts +21 -21
  38. package/dist/data-access/manage/subAgents.js +8 -7
  39. package/dist/data-access/manage/tools.d.ts +15 -15
  40. package/dist/data-access/manage/tools.js +8 -6
  41. package/dist/data-access/manage/triggers.d.ts +2 -2
  42. package/dist/data-access/manage/triggers.js +12 -8
  43. package/dist/data-access/runtime/apiKeys.d.ts +16 -16
  44. package/dist/data-access/runtime/apiKeys.js +16 -12
  45. package/dist/data-access/runtime/apps.d.ts +6 -6
  46. package/dist/data-access/runtime/apps.js +8 -7
  47. package/dist/data-access/runtime/audit-queries.d.ts +41 -0
  48. package/dist/data-access/runtime/audit-queries.js +37 -0
  49. package/dist/data-access/runtime/auth.d.ts +18 -0
  50. package/dist/data-access/runtime/auth.js +35 -0
  51. package/dist/data-access/runtime/cascade-delete.js +29 -24
  52. package/dist/data-access/runtime/contextCache.d.ts +1 -0
  53. package/dist/data-access/runtime/contextCache.js +9 -8
  54. package/dist/data-access/runtime/conversations.d.ts +16 -16
  55. package/dist/data-access/runtime/conversations.js +8 -12
  56. package/dist/data-access/runtime/evalRuns.js +23 -22
  57. package/dist/data-access/runtime/github-work-app-installations.js +32 -21
  58. package/dist/data-access/runtime/ledgerArtifacts.js +9 -24
  59. package/dist/data-access/runtime/messages.d.ts +21 -21
  60. package/dist/data-access/runtime/messages.js +9 -8
  61. package/dist/data-access/runtime/projects.js +6 -5
  62. package/dist/data-access/runtime/scheduledTriggerInvocations.d.ts +3 -3
  63. package/dist/data-access/runtime/scheduledTriggerInvocations.js +16 -26
  64. package/dist/data-access/runtime/slack-work-app-mcp.js +6 -5
  65. package/dist/data-access/runtime/tasks.d.ts +9 -5
  66. package/dist/data-access/runtime/tasks.js +4 -5
  67. package/dist/data-access/runtime/triggerInvocations.js +4 -8
  68. package/dist/data-access/runtime/workAppSlack.js +21 -14
  69. package/dist/data-reconciliation/audit.d.ts +6 -0
  70. package/dist/data-reconciliation/audit.js +37 -0
  71. package/dist/data-reconciliation/index.d.ts +4 -0
  72. package/dist/data-reconciliation/index.js +5 -0
  73. package/dist/data-reconciliation/reconcile.d.ts +6 -0
  74. package/dist/data-reconciliation/reconcile.js +58 -0
  75. package/dist/data-reconciliation/types.d.ts +116 -0
  76. package/dist/data-reconciliation/types.js +7 -0
  77. package/dist/db/manage/manage-schema.d.ts +453 -453
  78. package/dist/db/runtime/runtime-schema.d.ts +326 -326
  79. package/dist/index.d.ts +12 -2
  80. package/dist/index.js +12 -1
  81. package/dist/retry/index.d.ts +3 -0
  82. package/dist/retry/index.js +4 -0
  83. package/dist/retry/retryable-errors.d.ts +10 -0
  84. package/dist/retry/retryable-errors.js +72 -0
  85. package/dist/retry/withRetry.d.ts +15 -0
  86. package/dist/retry/withRetry.js +37 -0
  87. package/dist/setup/setup.d.ts +1 -0
  88. package/dist/setup/setup.js +25 -8
  89. package/dist/utils/error.d.ts +51 -51
  90. package/dist/validation/drizzle-schema-helpers.d.ts +3 -3
  91. package/dist/validation/schemas.d.ts +1987 -1990
  92. package/dist/validation/schemas.js +5 -1
  93. package/package.json +1 -1
@@ -10,26 +10,26 @@ declare const getMessageById: (db: AgentsRunDatabaseClient) => (params: {
10
10
  scopes: ProjectScopeConfig;
11
11
  messageId: string;
12
12
  }) => Promise<{
13
- id: string;
14
13
  tenantId: string;
15
14
  projectId: string;
15
+ id: string;
16
+ taskId: string | null;
17
+ metadata: MessageMetadata | null;
18
+ visibility: string;
16
19
  createdAt: string;
17
20
  updatedAt: string;
18
- metadata: MessageMetadata | null;
19
21
  content: MessageContent;
22
+ role: string;
23
+ conversationId: string;
20
24
  fromSubAgentId: string | null;
21
25
  toSubAgentId: string | null;
22
26
  fromExternalAgentId: string | null;
23
27
  toExternalAgentId: string | null;
24
- taskId: string | null;
25
- a2aTaskId: string | null;
26
- conversationId: string;
27
- role: string;
28
28
  fromTeamAgentId: string | null;
29
29
  toTeamAgentId: string | null;
30
- visibility: string;
31
30
  messageType: string;
32
31
  parentMessageId: string | null;
32
+ a2aTaskId: string | null;
33
33
  a2aSessionId: string | null;
34
34
  } | undefined>;
35
35
  declare const listMessages: (db: AgentsRunDatabaseClient) => (params: {
@@ -141,26 +141,26 @@ declare const getVisibleMessages: (db: AgentsRunDatabaseClient) => (params: {
141
141
  id: string;
142
142
  }[]>;
143
143
  declare const createMessage: (db: AgentsRunDatabaseClient) => (params: MessageInsert) => Promise<{
144
- id: string;
145
144
  tenantId: string;
146
145
  projectId: string;
146
+ id: string;
147
+ taskId: string | null;
148
+ metadata: MessageMetadata | null;
149
+ visibility: string;
147
150
  createdAt: string;
148
151
  updatedAt: string;
149
- metadata: MessageMetadata | null;
150
152
  content: MessageContent;
153
+ role: string;
154
+ conversationId: string;
151
155
  fromSubAgentId: string | null;
152
156
  toSubAgentId: string | null;
153
157
  fromExternalAgentId: string | null;
154
158
  toExternalAgentId: string | null;
155
- taskId: string | null;
156
- a2aTaskId: string | null;
157
- conversationId: string;
158
- role: string;
159
159
  fromTeamAgentId: string | null;
160
160
  toTeamAgentId: string | null;
161
- visibility: string;
162
161
  messageType: string;
163
162
  parentMessageId: string | null;
163
+ a2aTaskId: string | null;
164
164
  a2aSessionId: string | null;
165
165
  }>;
166
166
  declare const updateMessage: (db: AgentsRunDatabaseClient) => (params: {
@@ -194,26 +194,26 @@ declare const deleteMessage: (db: AgentsRunDatabaseClient) => (params: {
194
194
  scopes: ProjectScopeConfig;
195
195
  messageId: string;
196
196
  }) => Promise<{
197
- id: string;
198
197
  tenantId: string;
199
198
  projectId: string;
199
+ id: string;
200
+ taskId: string | null;
201
+ metadata: MessageMetadata | null;
202
+ visibility: string;
200
203
  createdAt: string;
201
204
  updatedAt: string;
202
- metadata: MessageMetadata | null;
203
205
  content: MessageContent;
206
+ role: string;
207
+ conversationId: string;
204
208
  fromSubAgentId: string | null;
205
209
  toSubAgentId: string | null;
206
210
  fromExternalAgentId: string | null;
207
211
  toExternalAgentId: string | null;
208
- taskId: string | null;
209
- a2aTaskId: string | null;
210
- conversationId: string;
211
- role: string;
212
212
  fromTeamAgentId: string | null;
213
213
  toTeamAgentId: string | null;
214
- visibility: string;
215
214
  messageType: string;
216
215
  parentMessageId: string | null;
216
+ a2aTaskId: string | null;
217
217
  a2aSessionId: string | null;
218
218
  }>;
219
219
  declare const countMessagesByConversation: (db: AgentsRunDatabaseClient) => (params: {
@@ -1,34 +1,35 @@
1
1
  import { messages } from "../../db/runtime/runtime-schema.js";
2
+ import { projectScopedWhere } from "../manage/scope-helpers.js";
2
3
  import { and, asc, count, desc, eq, inArray } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/messages.ts
5
6
  const getMessageById = (db) => async (params) => {
6
- return db.query.messages.findFirst({ where: and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.id, params.messageId)) });
7
+ return db.query.messages.findFirst({ where: and(projectScopedWhere(messages, params.scopes), eq(messages.id, params.messageId)) });
7
8
  };
8
9
  const listMessages = (db) => async (params) => {
9
10
  const page = params.pagination?.page || 1;
10
11
  const limit = Math.min(params.pagination?.limit || 10, 100);
11
12
  const offset = (page - 1) * limit;
12
- return await db.select().from(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId))).limit(limit).offset(offset).orderBy(desc(messages.createdAt));
13
+ return await db.select().from(messages).where(projectScopedWhere(messages, params.scopes)).limit(limit).offset(offset).orderBy(desc(messages.createdAt));
13
14
  };
14
15
  const getMessagesByConversation = (db) => async (params) => {
15
16
  const page = params.pagination?.page || 1;
16
17
  const limit = Math.min(params.pagination?.limit || 10, 100);
17
18
  const offset = (page - 1) * limit;
18
- return await db.select().from(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.conversationId, params.conversationId))).limit(limit).offset(offset).orderBy(desc(messages.createdAt));
19
+ return await db.select().from(messages).where(and(projectScopedWhere(messages, params.scopes), eq(messages.conversationId, params.conversationId))).limit(limit).offset(offset).orderBy(desc(messages.createdAt));
19
20
  };
20
21
  const getMessagesByTask = (db) => async (params) => {
21
22
  const page = params.pagination?.page || 1;
22
23
  const limit = Math.min(params.pagination?.limit || 10, 100);
23
24
  const offset = (page - 1) * limit;
24
- return await db.select().from(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.taskId, params.taskId))).limit(limit).offset(offset).orderBy(asc(messages.createdAt));
25
+ return await db.select().from(messages).where(and(projectScopedWhere(messages, params.scopes), eq(messages.taskId, params.taskId))).limit(limit).offset(offset).orderBy(asc(messages.createdAt));
25
26
  };
26
27
  const getVisibleMessages = (db) => async (params) => {
27
28
  const page = params.pagination?.page || 1;
28
29
  const limit = Math.min(params.pagination?.limit || 10, 100);
29
30
  const offset = (page - 1) * limit;
30
31
  const visibilityFilter = params.visibility || ["user-facing"];
31
- return await db.select().from(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.conversationId, params.conversationId), inArray(messages.visibility, visibilityFilter))).limit(limit).offset(offset).orderBy(asc(messages.createdAt));
32
+ return await db.select().from(messages).where(and(projectScopedWhere(messages, params.scopes), eq(messages.conversationId, params.conversationId), inArray(messages.visibility, visibilityFilter))).limit(limit).offset(offset).orderBy(asc(messages.createdAt));
32
33
  };
33
34
  const createMessage = (db) => async (params) => {
34
35
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -44,15 +45,15 @@ const updateMessage = (db) => async (params) => {
44
45
  const [updated] = await db.update(messages).set({
45
46
  ...params.data,
46
47
  updatedAt: now
47
- }).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.id, params.messageId))).returning();
48
+ }).where(and(projectScopedWhere(messages, params.scopes), eq(messages.id, params.messageId))).returning();
48
49
  return updated;
49
50
  };
50
51
  const deleteMessage = (db) => async (params) => {
51
- const [deleted] = await db.delete(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.id, params.messageId))).returning();
52
+ const [deleted] = await db.delete(messages).where(and(projectScopedWhere(messages, params.scopes), eq(messages.id, params.messageId))).returning();
52
53
  return deleted;
53
54
  };
54
55
  const countMessagesByConversation = (db) => async (params) => {
55
- const total = (await db.select({ count: count() }).from(messages).where(and(eq(messages.tenantId, params.scopes.tenantId), eq(messages.projectId, params.scopes.projectId), eq(messages.conversationId, params.conversationId))))[0]?.count || 0;
56
+ const total = (await db.select({ count: count() }).from(messages).where(and(projectScopedWhere(messages, params.scopes), eq(messages.conversationId, params.conversationId))))[0]?.count || 0;
56
57
  return typeof total === "string" ? Number.parseInt(total, 10) : total;
57
58
  };
58
59
 
@@ -1,4 +1,5 @@
1
1
  import { projectMetadata } from "../../db/runtime/runtime-schema.js";
2
+ import { tenantScopedWhere } from "../manage/scope-helpers.js";
2
3
  import { and, count, desc, eq, inArray } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/projects.ts
@@ -6,14 +7,14 @@ import { and, count, desc, eq, inArray } from "drizzle-orm";
6
7
  * Get a project from the runtime DB by ID
7
8
  */
8
9
  const getProjectMetadata = (db) => async (params) => {
9
- return await db.query.projectMetadata.findFirst({ where: and(eq(projectMetadata.tenantId, params.tenantId), eq(projectMetadata.id, params.projectId)) }) ?? null;
10
+ return await db.query.projectMetadata.findFirst({ where: and(tenantScopedWhere(projectMetadata, { tenantId: params.tenantId }), eq(projectMetadata.id, params.projectId)) }) ?? null;
10
11
  };
11
12
  /**
12
13
  * List all runtimeProjects for a tenant from the runtime DB
13
14
  */
14
15
  const listProjectsMetadata = (db) => async (params) => {
15
16
  return await db.query.projectMetadata.findMany({
16
- where: eq(projectMetadata.tenantId, params.tenantId),
17
+ where: tenantScopedWhere(projectMetadata, { tenantId: params.tenantId }),
17
18
  orderBy: [desc(projectMetadata.createdAt)]
18
19
  });
19
20
  };
@@ -25,7 +26,7 @@ const listProjectsMetadataPaginated = (db) => async (params) => {
25
26
  const page = params.pagination?.page || 1;
26
27
  const limit = Math.min(params.pagination?.limit || 10, 100);
27
28
  const offset = (page - 1) * limit;
28
- const conditions = [eq(projectMetadata.tenantId, params.tenantId)];
29
+ const conditions = [tenantScopedWhere(projectMetadata, { tenantId: params.tenantId })];
29
30
  if (params.projectIds !== void 0) {
30
31
  if (params.projectIds.length === 0) return {
31
32
  data: [],
@@ -70,7 +71,7 @@ const createProjectMetadata = (db) => async (params) => {
70
71
  * Delete a project from the runtime DB
71
72
  */
72
73
  const deleteProjectMetadata = (db) => async (params) => {
73
- return (await db.delete(projectMetadata).where(and(eq(projectMetadata.tenantId, params.tenantId), eq(projectMetadata.id, params.projectId))).returning()).length > 0;
74
+ return (await db.delete(projectMetadata).where(and(tenantScopedWhere(projectMetadata, { tenantId: params.tenantId }), eq(projectMetadata.id, params.projectId))).returning()).length > 0;
74
75
  };
75
76
  /**
76
77
  * Check if a project exists in the runtime DB
@@ -82,7 +83,7 @@ const projectsMetadataExists = (db) => async (params) => {
82
83
  * Count runtimeProjects for a tenant
83
84
  */
84
85
  const countProjectsInRuntime = (db) => async (params) => {
85
- const total = (await db.select({ count: count() }).from(projectMetadata).where(eq(projectMetadata.tenantId, params.tenantId)))[0]?.count || 0;
86
+ const total = (await db.select({ count: count() }).from(projectMetadata).where(tenantScopedWhere(projectMetadata, { tenantId: params.tenantId })))[0]?.count || 0;
86
87
  return typeof total === "string" ? Number.parseInt(total, 10) : total;
87
88
  };
88
89
 
@@ -34,7 +34,7 @@ declare const listScheduledTriggerInvocationsPaginated: (db: AgentsRunDatabaseCl
34
34
  }) => Promise<{
35
35
  data: {
36
36
  scheduledTriggerId: string;
37
- status: "pending" | "failed" | "running" | "completed" | "cancelled";
37
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
38
38
  scheduledFor: string;
39
39
  startedAt: string | null;
40
40
  completedAt: string | null;
@@ -174,7 +174,7 @@ declare const listUpcomingInvocationsForAgentPaginated: (db: AgentsRunDatabaseCl
174
174
  }) => Promise<{
175
175
  data: {
176
176
  scheduledTriggerId: string;
177
- status: "pending" | "failed" | "running" | "completed" | "cancelled";
177
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
178
178
  scheduledFor: string;
179
179
  startedAt: string | null;
180
180
  completedAt: string | null;
@@ -208,7 +208,7 @@ declare const listProjectScheduledTriggerInvocationsPaginated: (db: AgentsRunDat
208
208
  }) => Promise<{
209
209
  data: {
210
210
  scheduledTriggerId: string;
211
- status: "pending" | "failed" | "running" | "completed" | "cancelled";
211
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
212
212
  scheduledFor: string;
213
213
  startedAt: string | null;
214
214
  completedAt: string | null;
@@ -1,4 +1,5 @@
1
1
  import { scheduledTriggerInvocations } from "../../db/runtime/runtime-schema.js";
2
+ import { agentScopedWhere, projectScopedWhere } from "../manage/scope-helpers.js";
2
3
  import { and, asc, count, desc, eq, gte, inArray, lte, ne, sql } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/scheduledTriggerInvocations.ts
@@ -6,7 +7,7 @@ import { and, asc, count, desc, eq, gte, inArray, lte, ne, sql } from "drizzle-o
6
7
  * Get a scheduled trigger invocation by ID (agent-scoped)
7
8
  */
8
9
  const getScheduledTriggerInvocationById = (db) => async (params) => {
9
- return await db.query.scheduledTriggerInvocations.findFirst({ where: and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId)) });
10
+ return await db.query.scheduledTriggerInvocations.findFirst({ where: and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId)) });
10
11
  };
11
12
  /**
12
13
  * Get a scheduled trigger invocation by idempotency key
@@ -22,12 +23,7 @@ const listScheduledTriggerInvocationsPaginated = (db) => async (params) => {
22
23
  const page = params.pagination?.page || 1;
23
24
  const limit = Math.min(params.pagination?.limit || 10, 100);
24
25
  const offset = (page - 1) * limit;
25
- const conditions = [
26
- eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId),
27
- eq(scheduledTriggerInvocations.projectId, params.scopes.projectId),
28
- eq(scheduledTriggerInvocations.agentId, params.scopes.agentId),
29
- eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId)
30
- ];
26
+ const conditions = [agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId)];
31
27
  if (params.filters?.status) conditions.push(eq(scheduledTriggerInvocations.status, params.filters.status));
32
28
  if (params.filters?.from) conditions.push(gte(scheduledTriggerInvocations.scheduledFor, params.filters.from));
33
29
  if (params.filters?.to) conditions.push(lte(scheduledTriggerInvocations.scheduledFor, params.filters.to));
@@ -50,14 +46,14 @@ const listScheduledTriggerInvocationsPaginated = (db) => async (params) => {
50
46
  */
51
47
  const listPendingScheduledTriggerInvocations = (db) => async (params) => {
52
48
  const maxLimit = Math.min(params.limit || 10, 100);
53
- return await db.select().from(scheduledTriggerInvocations).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.status, "pending"))).orderBy(asc(scheduledTriggerInvocations.scheduledFor)).limit(maxLimit);
49
+ return await db.select().from(scheduledTriggerInvocations).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.status, "pending"))).orderBy(asc(scheduledTriggerInvocations.scheduledFor)).limit(maxLimit);
54
50
  };
55
51
  /**
56
52
  * Delete all pending invocations for a trigger
57
53
  * Used when cron expression changes or trigger is disabled
58
54
  */
59
55
  const deletePendingInvocationsForTrigger = (db) => async (params) => {
60
- return (await db.delete(scheduledTriggerInvocations).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.status, "pending"))).returning()).length;
56
+ return (await db.delete(scheduledTriggerInvocations).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.status, "pending"))).returning()).length;
61
57
  };
62
58
  /**
63
59
  * Create a new scheduled trigger invocation (agent-scoped)
@@ -69,7 +65,7 @@ const createScheduledTriggerInvocation = (db) => async (params) => {
69
65
  * Update scheduled trigger invocation status (agent-scoped)
70
66
  */
71
67
  const updateScheduledTriggerInvocationStatus = (db) => async (params) => {
72
- return (await db.update(scheduledTriggerInvocations).set(params.data).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
68
+ return (await db.update(scheduledTriggerInvocations).set(params.data).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
73
69
  };
74
70
  /**
75
71
  * Mark invocation as running
@@ -79,7 +75,7 @@ const markScheduledTriggerInvocationRunning = (db) => async (params) => {
79
75
  return (await db.update(scheduledTriggerInvocations).set({
80
76
  status: "running",
81
77
  startedAt: sql`COALESCE(${scheduledTriggerInvocations.startedAt}, ${now})`
82
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
78
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
83
79
  };
84
80
  /**
85
81
  * Mark invocation as completed
@@ -89,7 +85,7 @@ const markScheduledTriggerInvocationCompleted = (db) => async (params) => {
89
85
  return (await db.update(scheduledTriggerInvocations).set({
90
86
  status: "completed",
91
87
  completedAt: (/* @__PURE__ */ new Date()).toISOString()
92
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId), ne(scheduledTriggerInvocations.status, "cancelled"))).returning())[0];
88
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId), ne(scheduledTriggerInvocations.status, "cancelled"))).returning())[0];
93
89
  };
94
90
  /**
95
91
  * Mark invocation as failed
@@ -99,14 +95,14 @@ const markScheduledTriggerInvocationFailed = (db) => async (params) => {
99
95
  return (await db.update(scheduledTriggerInvocations).set({
100
96
  status: "failed",
101
97
  completedAt: (/* @__PURE__ */ new Date()).toISOString()
102
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId), ne(scheduledTriggerInvocations.status, "cancelled"))).returning())[0];
98
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId), ne(scheduledTriggerInvocations.status, "cancelled"))).returning())[0];
103
99
  };
104
100
  /**
105
101
  * Add a conversation ID to the invocation's conversationIds array
106
102
  * Used to track all conversations created during retries
107
103
  */
108
104
  const addConversationIdToInvocation = (db) => async (params) => {
109
- return (await db.update(scheduledTriggerInvocations).set({ conversationIds: sql`${scheduledTriggerInvocations.conversationIds} || ${JSON.stringify([params.conversationId])}::jsonb` }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
105
+ return (await db.update(scheduledTriggerInvocations).set({ conversationIds: sql`${scheduledTriggerInvocations.conversationIds} || ${JSON.stringify([params.conversationId])}::jsonb` }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
110
106
  };
111
107
  /**
112
108
  * Mark invocation as cancelled
@@ -115,7 +111,7 @@ const markScheduledTriggerInvocationCancelled = (db) => async (params) => {
115
111
  return (await db.update(scheduledTriggerInvocations).set({
116
112
  status: "cancelled",
117
113
  completedAt: (/* @__PURE__ */ new Date()).toISOString()
118
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
114
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), eq(scheduledTriggerInvocations.id, params.invocationId))).returning())[0];
119
115
  };
120
116
  /**
121
117
  * Cancel all pending invocations for a trigger
@@ -125,7 +121,7 @@ const cancelPendingInvocationsForTrigger = (db) => async (params) => {
125
121
  return (await db.update(scheduledTriggerInvocations).set({
126
122
  status: "cancelled",
127
123
  completedAt: (/* @__PURE__ */ new Date()).toISOString()
128
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), inArray(scheduledTriggerInvocations.status, ["pending", "running"]))).returning()).length;
124
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), inArray(scheduledTriggerInvocations.status, ["pending", "running"]))).returning()).length;
129
125
  };
130
126
  /**
131
127
  * Cancel only PAST pending invocations for a trigger (scheduledFor <= now)
@@ -136,7 +132,7 @@ const cancelPastPendingInvocationsForTrigger = (db) => async (params) => {
136
132
  return (await db.update(scheduledTriggerInvocations).set({
137
133
  status: "cancelled",
138
134
  completedAt: now
139
- }).where(and(eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId), eq(scheduledTriggerInvocations.agentId, params.scopes.agentId), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), inArray(scheduledTriggerInvocations.status, ["pending", "running"]), lte(scheduledTriggerInvocations.scheduledFor, now))).returning()).length;
135
+ }).where(and(agentScopedWhere(scheduledTriggerInvocations, params.scopes), eq(scheduledTriggerInvocations.scheduledTriggerId, params.scheduledTriggerId), inArray(scheduledTriggerInvocations.status, ["pending", "running"]), lte(scheduledTriggerInvocations.scheduledFor, now))).returning()).length;
140
136
  };
141
137
  /**
142
138
  * Get run info for multiple scheduled triggers in a single query
@@ -144,14 +140,13 @@ const cancelPastPendingInvocationsForTrigger = (db) => async (params) => {
144
140
  */
145
141
  const getScheduledTriggerRunInfoBatch = (db) => async (params) => {
146
142
  if (params.triggerIds.length === 0) return /* @__PURE__ */ new Map();
147
- const { tenantId, projectId } = params.scopes;
148
143
  const allInvocations = await db.select({
149
144
  scheduledTriggerId: scheduledTriggerInvocations.scheduledTriggerId,
150
145
  status: scheduledTriggerInvocations.status,
151
146
  scheduledFor: scheduledTriggerInvocations.scheduledFor,
152
147
  completedAt: scheduledTriggerInvocations.completedAt,
153
148
  conversationIds: scheduledTriggerInvocations.conversationIds
154
- }).from(scheduledTriggerInvocations).where(and(eq(scheduledTriggerInvocations.tenantId, tenantId), eq(scheduledTriggerInvocations.projectId, projectId), inArray(scheduledTriggerInvocations.scheduledTriggerId, params.triggerIds.map((t) => t.triggerId)))).orderBy(desc(scheduledTriggerInvocations.completedAt));
149
+ }).from(scheduledTriggerInvocations).where(and(projectScopedWhere(scheduledTriggerInvocations, params.scopes), inArray(scheduledTriggerInvocations.scheduledTriggerId, params.triggerIds.map((t) => t.triggerId)))).orderBy(desc(scheduledTriggerInvocations.completedAt));
155
150
  const result = /* @__PURE__ */ new Map();
156
151
  for (const trigger of params.triggerIds) result.set(trigger.triggerId, {
157
152
  lastRunAt: null,
@@ -180,12 +175,7 @@ const listUpcomingInvocationsForAgentPaginated = (db) => async (params) => {
180
175
  const limit = Math.min(params.pagination?.limit || 20, 100);
181
176
  const offset = (page - 1) * limit;
182
177
  const statusCondition = params.includeRunning ? inArray(scheduledTriggerInvocations.status, ["pending", "running"]) : eq(scheduledTriggerInvocations.status, "pending");
183
- const whereClause = and(...[
184
- eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId),
185
- eq(scheduledTriggerInvocations.projectId, params.scopes.projectId),
186
- eq(scheduledTriggerInvocations.agentId, params.scopes.agentId),
187
- statusCondition
188
- ]);
178
+ const whereClause = and(...[agentScopedWhere(scheduledTriggerInvocations, params.scopes), statusCondition]);
189
179
  const [data, totalResult] = await Promise.all([db.select().from(scheduledTriggerInvocations).where(whereClause).limit(limit).offset(offset).orderBy(asc(scheduledTriggerInvocations.scheduledFor)), db.select({ count: count() }).from(scheduledTriggerInvocations).where(whereClause)]);
190
180
  const total = totalResult[0]?.count || 0;
191
181
  return {
@@ -206,7 +196,7 @@ const listProjectScheduledTriggerInvocationsPaginated = (db) => async (params) =
206
196
  const page = params.pagination?.page || 1;
207
197
  const limit = Math.min(params.pagination?.limit || 20, 100);
208
198
  const offset = (page - 1) * limit;
209
- const conditions = [eq(scheduledTriggerInvocations.tenantId, params.scopes.tenantId), eq(scheduledTriggerInvocations.projectId, params.scopes.projectId)];
199
+ const conditions = [projectScopedWhere(scheduledTriggerInvocations, params.scopes)];
210
200
  if (params.filters?.status) conditions.push(eq(scheduledTriggerInvocations.status, params.filters.status));
211
201
  const whereClause = and(...conditions);
212
202
  const [data, totalResult] = await Promise.all([db.select().from(scheduledTriggerInvocations).where(whereClause).limit(limit).offset(offset).orderBy(desc(scheduledTriggerInvocations.createdAt)), db.select({ count: count() }).from(scheduledTriggerInvocations).where(whereClause)]);
@@ -1,5 +1,6 @@
1
1
  import { workAppSlackMcpToolAccessConfig, workAppSlackUserMappings } from "../../db/runtime/runtime-schema.js";
2
- import { and, eq } from "drizzle-orm";
2
+ import { tenantScopedWhere, toolScopedWhere } from "../manage/scope-helpers.js";
3
+ import { eq } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/slack-work-app-mcp.ts
5
6
  const getSlackMcpToolAccessConfig = (db) => async (scope) => {
@@ -7,7 +8,7 @@ const getSlackMcpToolAccessConfig = (db) => async (scope) => {
7
8
  channelAccessMode: workAppSlackMcpToolAccessConfig.channelAccessMode,
8
9
  dmEnabled: workAppSlackMcpToolAccessConfig.dmEnabled,
9
10
  channelIds: workAppSlackMcpToolAccessConfig.channelIds
10
- }).from(workAppSlackMcpToolAccessConfig).where(and(eq(workAppSlackMcpToolAccessConfig.tenantId, scope.tenantId), eq(workAppSlackMcpToolAccessConfig.projectId, scope.projectId), eq(workAppSlackMcpToolAccessConfig.toolId, scope.toolId))).limit(1))[0] ?? {
11
+ }).from(workAppSlackMcpToolAccessConfig).where(toolScopedWhere(workAppSlackMcpToolAccessConfig, scope)).limit(1))[0] ?? {
11
12
  channelAccessMode: "selected",
12
13
  dmEnabled: false,
13
14
  channelIds: []
@@ -42,13 +43,13 @@ const updateSlackMcpToolAccessChannelIds = (db) => async (scope, channelIds) =>
42
43
  await db.update(workAppSlackMcpToolAccessConfig).set({
43
44
  channelIds,
44
45
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
45
- }).where(and(eq(workAppSlackMcpToolAccessConfig.tenantId, scope.tenantId), eq(workAppSlackMcpToolAccessConfig.projectId, scope.projectId), eq(workAppSlackMcpToolAccessConfig.toolId, scope.toolId)));
46
+ }).where(toolScopedWhere(workAppSlackMcpToolAccessConfig, scope));
46
47
  };
47
48
  const deleteSlackMcpToolAccessConfig = (db) => async (scope) => {
48
- return (await db.delete(workAppSlackMcpToolAccessConfig).where(and(eq(workAppSlackMcpToolAccessConfig.tenantId, scope.tenantId), eq(workAppSlackMcpToolAccessConfig.projectId, scope.projectId), eq(workAppSlackMcpToolAccessConfig.toolId, scope.toolId))).returning()).length > 0;
49
+ return (await db.delete(workAppSlackMcpToolAccessConfig).where(toolScopedWhere(workAppSlackMcpToolAccessConfig, scope)).returning()).length > 0;
49
50
  };
50
51
  const deleteAllSlackMcpToolAccessConfigsByTenant = (db) => async (tenantId) => {
51
- return (await db.delete(workAppSlackMcpToolAccessConfig).where(eq(workAppSlackMcpToolAccessConfig.tenantId, tenantId)).returning()).length;
52
+ return (await db.delete(workAppSlackMcpToolAccessConfig).where(tenantScopedWhere(workAppSlackMcpToolAccessConfig, { tenantId })).returning()).length;
52
53
  };
53
54
  const isSlackWorkAppTool = (tool) => {
54
55
  return tool.isWorkApp && tool.config.mcp.server.url.includes("/slack/mcp");
@@ -1,3 +1,4 @@
1
+ import { ProjectScopeConfig } from "../../db/manage/scope-definitions.js";
1
2
  import { TaskMetadataConfig } from "../../types/utility.js";
2
3
  import "../../types/index.js";
3
4
  import { AgentsRunDatabaseClient } from "../../db/runtime/runtime-client.js";
@@ -6,27 +7,29 @@ import { TaskInsert, TaskSelect } from "../../types/entities.js";
6
7
 
7
8
  //#region src/data-access/runtime/tasks.d.ts
8
9
  declare const createTask: (db: AgentsRunDatabaseClient) => (params: TaskInsert) => Promise<{
9
- id: string;
10
10
  tenantId: string;
11
11
  projectId: string;
12
12
  agentId: string;
13
- createdAt: string;
14
- updatedAt: string;
15
- metadata: TaskMetadataConfig | null;
16
13
  subAgentId: string;
17
- status: string;
14
+ id: string;
18
15
  contextId: string;
16
+ metadata: TaskMetadataConfig | null;
17
+ createdAt: string;
18
+ updatedAt: string;
19
19
  ref: {
20
20
  type: "commit" | "tag" | "branch";
21
21
  name: string;
22
22
  hash: string;
23
23
  } | null;
24
+ status: string;
24
25
  }>;
25
26
  declare const getTask: (db: AgentsRunDatabaseClient) => (params: {
26
27
  id: string;
28
+ scopes: ProjectScopeConfig;
27
29
  }) => Promise<TaskSelect | null>;
28
30
  declare const updateTask: (db: AgentsRunDatabaseClient) => (params: {
29
31
  taskId: string;
32
+ scopes: ProjectScopeConfig;
30
33
  data: {
31
34
  status?: string;
32
35
  metadata?: any;
@@ -50,6 +53,7 @@ declare const updateTask: (db: AgentsRunDatabaseClient) => (params: {
50
53
  }>;
51
54
  declare const listTaskIdsByContextId: (db: AgentsRunDatabaseClient) => (params: {
52
55
  contextId: string;
56
+ scopes: ProjectScopeConfig;
53
57
  }) => Promise<string[]>;
54
58
  //#endregion
55
59
  export { createTask, getTask, listTaskIdsByContextId, updateTask };
@@ -1,4 +1,5 @@
1
1
  import { tasks } from "../../db/runtime/runtime-schema.js";
2
+ import { projectScopedWhere } from "../manage/scope-helpers.js";
2
3
  import { and, eq } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/tasks.ts
@@ -12,20 +13,18 @@ const createTask = (db) => async (params) => {
12
13
  return created;
13
14
  };
14
15
  const getTask = (db) => async (params) => {
15
- const { id } = params;
16
- return (await db.select().from(tasks).where(eq(tasks.id, id)).limit(1))[0];
16
+ return (await db.select().from(tasks).where(and(projectScopedWhere(tasks, params.scopes), eq(tasks.id, params.id))).limit(1))[0] ?? null;
17
17
  };
18
18
  const updateTask = (db) => async (params) => {
19
19
  const now = (/* @__PURE__ */ new Date()).toISOString();
20
20
  const [updated] = await db.update(tasks).set({
21
21
  ...params.data,
22
22
  updatedAt: now
23
- }).where(and(eq(tasks.id, params.taskId))).returning();
23
+ }).where(and(projectScopedWhere(tasks, params.scopes), eq(tasks.id, params.taskId))).returning();
24
24
  return updated;
25
25
  };
26
26
  const listTaskIdsByContextId = (db) => async (params) => {
27
- const { contextId } = params;
28
- return (await db.select({ id: tasks.id }).from(tasks).where(eq(tasks.contextId, contextId))).map((r) => r.id);
27
+ return (await db.select({ id: tasks.id }).from(tasks).where(and(projectScopedWhere(tasks, params.scopes), eq(tasks.contextId, params.contextId)))).map((r) => r.id);
29
28
  };
30
29
 
31
30
  //#endregion
@@ -1,4 +1,5 @@
1
1
  import { triggerInvocations } from "../../db/runtime/runtime-schema.js";
2
+ import { agentScopedWhere } from "../manage/scope-helpers.js";
2
3
  import { and, count, desc, eq, gte, lte } from "drizzle-orm";
3
4
 
4
5
  //#region src/data-access/runtime/triggerInvocations.ts
@@ -6,7 +7,7 @@ import { and, count, desc, eq, gte, lte } from "drizzle-orm";
6
7
  * Get a trigger invocation by ID (agent-scoped)
7
8
  */
8
9
  const getTriggerInvocationById = (db) => async (params) => {
9
- return await db.query.triggerInvocations.findFirst({ where: and(eq(triggerInvocations.tenantId, params.scopes.tenantId), eq(triggerInvocations.projectId, params.scopes.projectId), eq(triggerInvocations.agentId, params.scopes.agentId), eq(triggerInvocations.triggerId, params.triggerId), eq(triggerInvocations.id, params.invocationId)) });
10
+ return await db.query.triggerInvocations.findFirst({ where: and(agentScopedWhere(triggerInvocations, params.scopes), eq(triggerInvocations.triggerId, params.triggerId), eq(triggerInvocations.id, params.invocationId)) });
10
11
  };
11
12
  /**
12
13
  * List trigger invocations with optional filtering (agent-scoped)
@@ -15,12 +16,7 @@ const listTriggerInvocationsPaginated = (db) => async (params) => {
15
16
  const page = params.pagination?.page || 1;
16
17
  const limit = Math.min(params.pagination?.limit || 10, 100);
17
18
  const offset = (page - 1) * limit;
18
- const conditions = [
19
- eq(triggerInvocations.tenantId, params.scopes.tenantId),
20
- eq(triggerInvocations.projectId, params.scopes.projectId),
21
- eq(triggerInvocations.agentId, params.scopes.agentId),
22
- eq(triggerInvocations.triggerId, params.triggerId)
23
- ];
19
+ const conditions = [agentScopedWhere(triggerInvocations, params.scopes), eq(triggerInvocations.triggerId, params.triggerId)];
24
20
  if (params.filters?.status) conditions.push(eq(triggerInvocations.status, params.filters.status));
25
21
  if (params.filters?.from) conditions.push(gte(triggerInvocations.createdAt, params.filters.from));
26
22
  if (params.filters?.to) conditions.push(lte(triggerInvocations.createdAt, params.filters.to));
@@ -47,7 +43,7 @@ const createTriggerInvocation = (db) => async (params) => {
47
43
  * Update trigger invocation status (agent-scoped)
48
44
  */
49
45
  const updateTriggerInvocationStatus = (db) => async (params) => {
50
- return (await db.update(triggerInvocations).set(params.data).where(and(eq(triggerInvocations.tenantId, params.scopes.tenantId), eq(triggerInvocations.projectId, params.scopes.projectId), eq(triggerInvocations.agentId, params.scopes.agentId), eq(triggerInvocations.triggerId, params.triggerId), eq(triggerInvocations.id, params.invocationId))).returning())[0];
46
+ return (await db.update(triggerInvocations).set(params.data).where(and(agentScopedWhere(triggerInvocations, params.scopes), eq(triggerInvocations.triggerId, params.triggerId), eq(triggerInvocations.id, params.invocationId))).returning())[0];
51
47
  };
52
48
 
53
49
  //#endregion