@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.
- package/dist/auth/auth-schema.d.ts +107 -107
- package/dist/auth/auth-validation-schemas.d.ts +152 -152
- package/dist/auth/auth.d.ts +9 -9
- package/dist/auth/auth.js +17 -45
- package/dist/auth/permissions.d.ts +9 -9
- package/dist/data-access/index.d.ts +6 -1
- package/dist/data-access/index.js +6 -1
- package/dist/data-access/manage/agentFull.js +28 -12
- package/dist/data-access/manage/agents.d.ts +40 -39
- package/dist/data-access/manage/agents.js +33 -33
- package/dist/data-access/manage/artifactComponents.d.ts +8 -8
- package/dist/data-access/manage/artifactComponents.js +14 -13
- package/dist/data-access/manage/audit-queries.d.ts +29 -0
- package/dist/data-access/manage/audit-queries.js +30 -0
- package/dist/data-access/manage/contextConfigs.d.ts +4 -4
- package/dist/data-access/manage/contextConfigs.js +7 -6
- package/dist/data-access/manage/credentialReferences.js +12 -11
- package/dist/data-access/manage/dataComponents.d.ts +4 -4
- package/dist/data-access/manage/dataComponents.js +13 -11
- package/dist/data-access/manage/evalConfig.js +42 -41
- package/dist/data-access/manage/externalAgents.js +8 -7
- package/dist/data-access/manage/functionTools.d.ts +11 -15
- package/dist/data-access/manage/functionTools.js +27 -65
- package/dist/data-access/manage/functions.js +7 -10
- package/dist/data-access/manage/projects.js +37 -36
- package/dist/data-access/manage/scheduledTriggers.js +10 -6
- package/dist/data-access/manage/scheduledWorkflows.js +3 -2
- package/dist/data-access/manage/scope-helpers.d.ts +2 -1
- package/dist/data-access/manage/scope-helpers.js +2 -1
- package/dist/data-access/manage/skills.d.ts +11 -11
- package/dist/data-access/manage/skills.js +14 -9
- package/dist/data-access/manage/subAgentExternalAgentRelations.d.ts +12 -12
- package/dist/data-access/manage/subAgentRelations.d.ts +18 -18
- package/dist/data-access/manage/subAgentRelations.js +28 -26
- package/dist/data-access/manage/subAgentTeamAgentRelations.d.ts +12 -12
- package/dist/data-access/manage/subAgentTeamAgentRelations.js +16 -16
- package/dist/data-access/manage/subAgents.d.ts +21 -21
- package/dist/data-access/manage/subAgents.js +8 -7
- package/dist/data-access/manage/tools.d.ts +15 -15
- package/dist/data-access/manage/tools.js +8 -6
- package/dist/data-access/manage/triggers.d.ts +2 -2
- package/dist/data-access/manage/triggers.js +12 -8
- package/dist/data-access/runtime/apiKeys.d.ts +16 -16
- package/dist/data-access/runtime/apiKeys.js +16 -12
- package/dist/data-access/runtime/apps.d.ts +6 -6
- package/dist/data-access/runtime/apps.js +8 -7
- package/dist/data-access/runtime/audit-queries.d.ts +41 -0
- package/dist/data-access/runtime/audit-queries.js +37 -0
- package/dist/data-access/runtime/auth.d.ts +18 -0
- package/dist/data-access/runtime/auth.js +35 -0
- package/dist/data-access/runtime/cascade-delete.js +29 -24
- package/dist/data-access/runtime/contextCache.d.ts +1 -0
- package/dist/data-access/runtime/contextCache.js +9 -8
- package/dist/data-access/runtime/conversations.d.ts +16 -16
- package/dist/data-access/runtime/conversations.js +8 -12
- package/dist/data-access/runtime/evalRuns.js +23 -22
- package/dist/data-access/runtime/github-work-app-installations.js +32 -21
- package/dist/data-access/runtime/ledgerArtifacts.js +9 -24
- package/dist/data-access/runtime/messages.d.ts +21 -21
- package/dist/data-access/runtime/messages.js +9 -8
- package/dist/data-access/runtime/projects.js +6 -5
- package/dist/data-access/runtime/scheduledTriggerInvocations.d.ts +3 -3
- package/dist/data-access/runtime/scheduledTriggerInvocations.js +16 -26
- package/dist/data-access/runtime/slack-work-app-mcp.js +6 -5
- package/dist/data-access/runtime/tasks.d.ts +9 -5
- package/dist/data-access/runtime/tasks.js +4 -5
- package/dist/data-access/runtime/triggerInvocations.js +4 -8
- package/dist/data-access/runtime/workAppSlack.js +21 -14
- package/dist/data-reconciliation/audit.d.ts +6 -0
- package/dist/data-reconciliation/audit.js +37 -0
- package/dist/data-reconciliation/index.d.ts +4 -0
- package/dist/data-reconciliation/index.js +5 -0
- package/dist/data-reconciliation/reconcile.d.ts +6 -0
- package/dist/data-reconciliation/reconcile.js +58 -0
- package/dist/data-reconciliation/types.d.ts +116 -0
- package/dist/data-reconciliation/types.js +7 -0
- package/dist/db/manage/manage-schema.d.ts +453 -453
- package/dist/db/runtime/runtime-schema.d.ts +326 -326
- package/dist/index.d.ts +12 -2
- package/dist/index.js +12 -1
- package/dist/retry/index.d.ts +3 -0
- package/dist/retry/index.js +4 -0
- package/dist/retry/retryable-errors.d.ts +10 -0
- package/dist/retry/retryable-errors.js +72 -0
- package/dist/retry/withRetry.d.ts +15 -0
- package/dist/retry/withRetry.js +37 -0
- package/dist/setup/setup.d.ts +1 -0
- package/dist/setup/setup.js +25 -8
- package/dist/utils/error.d.ts +51 -51
- package/dist/validation/drizzle-schema-helpers.d.ts +3 -3
- package/dist/validation/schemas.d.ts +1987 -1990
- package/dist/validation/schemas.js +5 -1
- 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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 = [
|
|
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(
|
|
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(
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 = [
|
|
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 {
|
|
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(
|
|
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(
|
|
46
|
+
}).where(toolScopedWhere(workAppSlackMcpToolAccessConfig, scope));
|
|
46
47
|
};
|
|
47
48
|
const deleteSlackMcpToolAccessConfig = (db) => async (scope) => {
|
|
48
|
-
return (await db.delete(workAppSlackMcpToolAccessConfig).where(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|