@inkeep/agents-core 0.47.5 → 0.48.1
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/README.md +1 -1
- package/dist/auth/auth-schema.d.ts +83 -83
- package/dist/auth/auth-validation-schemas.d.ts +148 -148
- package/dist/auth/auth.d.ts +5 -5
- package/dist/client-exports.d.ts +13 -2
- package/dist/client-exports.js +5 -4
- package/dist/data-access/index.d.ts +6 -1
- package/dist/data-access/index.js +6 -1
- package/dist/data-access/manage/agentFull.js +154 -1
- package/dist/data-access/manage/agents.d.ts +4 -4
- package/dist/data-access/manage/agents.js +56 -4
- package/dist/data-access/manage/artifactComponents.d.ts +41 -5
- package/dist/data-access/manage/functionTools.d.ts +3 -3
- package/dist/data-access/manage/projectFull.js +97 -0
- package/dist/data-access/manage/scheduledTriggers.d.ts +80 -0
- package/dist/data-access/manage/scheduledTriggers.js +76 -0
- package/dist/data-access/manage/scheduledWorkflows.d.ts +29 -0
- package/dist/data-access/manage/scheduledWorkflows.js +32 -0
- package/dist/data-access/manage/skills.d.ts +109 -0
- package/dist/data-access/manage/skills.js +122 -0
- package/dist/data-access/manage/tools.d.ts +4 -4
- package/dist/data-access/manage/triggers.d.ts +2 -2
- package/dist/data-access/runtime/scheduledTriggerInvocations.d.ts +233 -0
- package/dist/data-access/runtime/scheduledTriggerInvocations.js +226 -0
- package/dist/data-access/runtime/workAppSlack.d.ts +55 -0
- package/dist/data-access/runtime/workAppSlack.js +146 -0
- package/dist/db/manage/manage-schema.d.ts +1519 -589
- package/dist/db/manage/manage-schema.js +240 -15
- package/dist/db/runtime/runtime-schema.d.ts +1236 -234
- package/dist/db/runtime/runtime-schema.js +108 -3
- package/dist/index.d.ts +15 -6
- package/dist/index.js +13 -5
- package/dist/types/entities.d.ts +15 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/index.d.ts +5 -2
- package/dist/utils/index.js +5 -2
- package/dist/utils/slack-link-token.d.ts +57 -0
- package/dist/utils/slack-link-token.js +112 -0
- package/dist/utils/slack-user-token.d.ts +65 -0
- package/dist/utils/slack-user-token.js +129 -0
- package/dist/utils/sse-parser.d.ts +35 -0
- package/dist/utils/sse-parser.js +71 -0
- package/dist/utils/tracer-factory.d.ts +11 -2
- package/dist/utils/tracer-factory.js +24 -5
- package/dist/utils/tracer.d.ts +2 -2
- package/dist/utils/tracer.js +2 -2
- package/dist/utils/trigger-auth.d.ts +1 -1
- package/dist/validation/drizzle-schema-helpers.d.ts +3 -3
- package/dist/validation/extend-schemas.d.ts +34 -0
- package/dist/validation/extend-schemas.js +33 -0
- package/dist/validation/index.d.ts +2 -2
- package/dist/validation/index.js +2 -2
- package/dist/validation/json-schemas.d.ts +28 -0
- package/dist/validation/json-schemas.js +56 -0
- package/dist/validation/schemas.d.ts +4930 -1640
- package/dist/validation/schemas.js +159 -38
- package/dist/validation/stream-event-schemas.d.ts +0 -2
- package/dist/validation/stream-event-schemas.js +1 -2
- package/drizzle/manage/0007_nice_lilandra.sql +3 -0
- package/drizzle/manage/0008_friendly_mentallo.sql +32 -0
- package/drizzle/manage/0009_chilly_old_lace.sql +39 -0
- package/drizzle/manage/meta/0007_snapshot.json +3148 -0
- package/drizzle/manage/meta/0008_snapshot.json +3391 -0
- package/drizzle/manage/meta/0009_snapshot.json +3670 -0
- package/drizzle/manage/meta/_journal.json +21 -0
- package/drizzle/runtime/0012_greedy_hulk.sql +84 -0
- package/drizzle/runtime/0013_huge_white_queen.sql +19 -0
- package/drizzle/runtime/meta/0007_snapshot.json +1 -1
- package/drizzle/runtime/meta/0012_snapshot.json +3622 -0
- package/drizzle/runtime/meta/0013_snapshot.json +3746 -0
- package/drizzle/runtime/meta/_journal.json +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { scheduledTriggers } from "../../db/manage/manage-schema.js";
|
|
2
|
+
import { and, count, desc, eq } from "drizzle-orm";
|
|
3
|
+
|
|
4
|
+
//#region src/data-access/manage/scheduledTriggers.ts
|
|
5
|
+
/**
|
|
6
|
+
* Get a scheduled trigger by ID (agent-scoped)
|
|
7
|
+
*/
|
|
8
|
+
const getScheduledTriggerById = (db) => async (params) => {
|
|
9
|
+
const { scopes, scheduledTriggerId } = params;
|
|
10
|
+
return await db.query.scheduledTriggers.findFirst({ where: and(eq(scheduledTriggers.tenantId, scopes.tenantId), eq(scheduledTriggers.projectId, scopes.projectId), eq(scheduledTriggers.agentId, scopes.agentId), eq(scheduledTriggers.id, scheduledTriggerId)) });
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* List scheduled triggers for an agent with pagination
|
|
14
|
+
*/
|
|
15
|
+
const listScheduledTriggersPaginated = (db) => async (params) => {
|
|
16
|
+
const page = params.pagination?.page || 1;
|
|
17
|
+
const limit = Math.min(params.pagination?.limit || 10, 100);
|
|
18
|
+
const offset = (page - 1) * limit;
|
|
19
|
+
const whereClause = and(eq(scheduledTriggers.tenantId, params.scopes.tenantId), eq(scheduledTriggers.projectId, params.scopes.projectId), eq(scheduledTriggers.agentId, params.scopes.agentId));
|
|
20
|
+
const [data, totalResult] = await Promise.all([db.select().from(scheduledTriggers).where(whereClause).limit(limit).offset(offset).orderBy(desc(scheduledTriggers.createdAt)), db.select({ count: count() }).from(scheduledTriggers).where(whereClause)]);
|
|
21
|
+
const total = totalResult[0]?.count || 0;
|
|
22
|
+
return {
|
|
23
|
+
data,
|
|
24
|
+
pagination: {
|
|
25
|
+
page,
|
|
26
|
+
limit,
|
|
27
|
+
total,
|
|
28
|
+
pages: Math.ceil(total / limit)
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Create a new scheduled trigger (agent-scoped)
|
|
34
|
+
*/
|
|
35
|
+
const createScheduledTrigger = (db) => async (params) => {
|
|
36
|
+
return (await db.insert(scheduledTriggers).values(params).returning())[0];
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Update a scheduled trigger (agent-scoped)
|
|
40
|
+
*/
|
|
41
|
+
const updateScheduledTrigger = (db) => async (params) => {
|
|
42
|
+
const updateData = {
|
|
43
|
+
...params.data,
|
|
44
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
45
|
+
};
|
|
46
|
+
return (await db.update(scheduledTriggers).set(updateData).where(and(eq(scheduledTriggers.tenantId, params.scopes.tenantId), eq(scheduledTriggers.projectId, params.scopes.projectId), eq(scheduledTriggers.agentId, params.scopes.agentId), eq(scheduledTriggers.id, params.scheduledTriggerId))).returning())[0];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Delete a scheduled trigger (agent-scoped)
|
|
50
|
+
*/
|
|
51
|
+
const deleteScheduledTrigger = (db) => async (params) => {
|
|
52
|
+
await db.delete(scheduledTriggers).where(and(eq(scheduledTriggers.tenantId, params.scopes.tenantId), eq(scheduledTriggers.projectId, params.scopes.projectId), eq(scheduledTriggers.agentId, params.scopes.agentId), eq(scheduledTriggers.id, params.scheduledTriggerId)));
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Upsert a scheduled trigger (create if it doesn't exist, update if it does)
|
|
56
|
+
*/
|
|
57
|
+
const upsertScheduledTrigger = (db) => async (params) => {
|
|
58
|
+
if (await getScheduledTriggerById(db)({
|
|
59
|
+
scopes: params.scopes,
|
|
60
|
+
scheduledTriggerId: params.data.id
|
|
61
|
+
})) return await updateScheduledTrigger(db)({
|
|
62
|
+
scopes: params.scopes,
|
|
63
|
+
scheduledTriggerId: params.data.id,
|
|
64
|
+
data: params.data
|
|
65
|
+
});
|
|
66
|
+
return await createScheduledTrigger(db)(params.data);
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* List all scheduled triggers for an agent (non-paginated, used by agentFull)
|
|
70
|
+
*/
|
|
71
|
+
const listScheduledTriggers = (db) => async (params) => {
|
|
72
|
+
return await db.select().from(scheduledTriggers).where(and(eq(scheduledTriggers.tenantId, params.scopes.tenantId), eq(scheduledTriggers.projectId, params.scopes.projectId), eq(scheduledTriggers.agentId, params.scopes.agentId)));
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { createScheduledTrigger, deleteScheduledTrigger, getScheduledTriggerById, listScheduledTriggers, listScheduledTriggersPaginated, updateScheduledTrigger, upsertScheduledTrigger };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AgentScopeConfig } from "../../types/utility.js";
|
|
2
|
+
import { AgentsManageDatabaseClient } from "../../db/manage/manage-client.js";
|
|
3
|
+
import { ScheduledWorkflow, ScheduledWorkflowInsert } from "../../validation/schemas.js";
|
|
4
|
+
|
|
5
|
+
//#region src/data-access/manage/scheduledWorkflows.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get a scheduled workflow by trigger ID (agent-scoped)
|
|
9
|
+
*/
|
|
10
|
+
declare const getScheduledWorkflowByTriggerId: (db: AgentsManageDatabaseClient) => (params: {
|
|
11
|
+
scopes: AgentScopeConfig;
|
|
12
|
+
scheduledTriggerId: string;
|
|
13
|
+
}) => Promise<ScheduledWorkflow | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Create a new scheduled workflow (agent-scoped)
|
|
16
|
+
*/
|
|
17
|
+
declare const createScheduledWorkflow: (db: AgentsManageDatabaseClient) => (params: ScheduledWorkflowInsert) => Promise<ScheduledWorkflow>;
|
|
18
|
+
/**
|
|
19
|
+
* Update workflow run ID and/or status for a scheduled workflow
|
|
20
|
+
* Used when a workflow is started/restarted/cancelled
|
|
21
|
+
*/
|
|
22
|
+
declare const updateScheduledWorkflowRunId: (db: AgentsManageDatabaseClient) => (params: {
|
|
23
|
+
scopes: AgentScopeConfig;
|
|
24
|
+
scheduledWorkflowId: string;
|
|
25
|
+
workflowRunId: string | null;
|
|
26
|
+
status?: "running" | "completed" | "cancelled" | "failed";
|
|
27
|
+
}) => Promise<ScheduledWorkflow>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { createScheduledWorkflow, getScheduledWorkflowByTriggerId, updateScheduledWorkflowRunId };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { scheduledWorkflows } from "../../db/manage/manage-schema.js";
|
|
2
|
+
import { and, eq } from "drizzle-orm";
|
|
3
|
+
|
|
4
|
+
//#region src/data-access/manage/scheduledWorkflows.ts
|
|
5
|
+
/**
|
|
6
|
+
* Get a scheduled workflow by trigger ID (agent-scoped)
|
|
7
|
+
*/
|
|
8
|
+
const getScheduledWorkflowByTriggerId = (db) => async (params) => {
|
|
9
|
+
const { scopes, scheduledTriggerId } = params;
|
|
10
|
+
return await db.query.scheduledWorkflows.findFirst({ where: and(eq(scheduledWorkflows.tenantId, scopes.tenantId), eq(scheduledWorkflows.projectId, scopes.projectId), eq(scheduledWorkflows.agentId, scopes.agentId), eq(scheduledWorkflows.scheduledTriggerId, scheduledTriggerId)) });
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Create a new scheduled workflow (agent-scoped)
|
|
14
|
+
*/
|
|
15
|
+
const createScheduledWorkflow = (db) => async (params) => {
|
|
16
|
+
return (await db.insert(scheduledWorkflows).values(params).returning())[0];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Update workflow run ID and/or status for a scheduled workflow
|
|
20
|
+
* Used when a workflow is started/restarted/cancelled
|
|
21
|
+
*/
|
|
22
|
+
const updateScheduledWorkflowRunId = (db) => async (params) => {
|
|
23
|
+
const updateData = {
|
|
24
|
+
workflowRunId: params.workflowRunId,
|
|
25
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
26
|
+
};
|
|
27
|
+
if (params.status) updateData.status = params.status;
|
|
28
|
+
return (await db.update(scheduledWorkflows).set(updateData).where(and(eq(scheduledWorkflows.tenantId, params.scopes.tenantId), eq(scheduledWorkflows.projectId, params.scopes.projectId), eq(scheduledWorkflows.agentId, params.scopes.agentId), eq(scheduledWorkflows.id, params.scheduledWorkflowId))).returning())[0];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { createScheduledWorkflow, getScheduledWorkflowByTriggerId, updateScheduledWorkflowRunId };
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { AgentScopeConfig, PaginationConfig, ProjectScopeConfig, SubAgentScopeConfig } from "../../types/utility.js";
|
|
2
|
+
import { AgentsManageDatabaseClient } from "../../db/manage/manage-client.js";
|
|
3
|
+
import { SkillInsert, SkillUpdate, SubAgentSkillWithIndex } from "../../types/entities.js";
|
|
4
|
+
|
|
5
|
+
//#region src/data-access/manage/skills.d.ts
|
|
6
|
+
declare const getSkillById: (db: AgentsManageDatabaseClient) => (params: {
|
|
7
|
+
scopes: ProjectScopeConfig;
|
|
8
|
+
skillId: string;
|
|
9
|
+
}) => Promise<{
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
tenantId: string;
|
|
14
|
+
projectId: string;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
updatedAt: string;
|
|
17
|
+
metadata: Record<string, string> | null;
|
|
18
|
+
content: string;
|
|
19
|
+
} | null>;
|
|
20
|
+
declare const listSkills: (db: AgentsManageDatabaseClient) => (params: {
|
|
21
|
+
scopes: ProjectScopeConfig;
|
|
22
|
+
pagination?: PaginationConfig;
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
data: {
|
|
25
|
+
createdAt: string;
|
|
26
|
+
updatedAt: string;
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
content: string;
|
|
31
|
+
metadata: Record<string, string> | null;
|
|
32
|
+
projectId: string;
|
|
33
|
+
tenantId: string;
|
|
34
|
+
}[];
|
|
35
|
+
pagination: {
|
|
36
|
+
page: number;
|
|
37
|
+
limit: number;
|
|
38
|
+
total: number;
|
|
39
|
+
pages: number;
|
|
40
|
+
};
|
|
41
|
+
}>;
|
|
42
|
+
declare const createSkill: (db: AgentsManageDatabaseClient) => (data: SkillInsert) => Promise<{
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
tenantId: string;
|
|
47
|
+
projectId: string;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
updatedAt: string;
|
|
50
|
+
metadata: Record<string, string> | null;
|
|
51
|
+
content: string;
|
|
52
|
+
}>;
|
|
53
|
+
declare const upsertSkill: (db: AgentsManageDatabaseClient) => (data: SkillInsert) => Promise<{
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
description: string;
|
|
57
|
+
tenantId: string;
|
|
58
|
+
projectId: string;
|
|
59
|
+
createdAt: string;
|
|
60
|
+
updatedAt: string;
|
|
61
|
+
metadata: Record<string, string> | null;
|
|
62
|
+
content: string;
|
|
63
|
+
}>;
|
|
64
|
+
declare const updateSkill: (db: AgentsManageDatabaseClient) => (params: {
|
|
65
|
+
scopes: ProjectScopeConfig;
|
|
66
|
+
skillId: string;
|
|
67
|
+
data: SkillUpdate;
|
|
68
|
+
}) => Promise<{
|
|
69
|
+
createdAt: string;
|
|
70
|
+
updatedAt: string;
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
content: string;
|
|
75
|
+
metadata: Record<string, string> | null;
|
|
76
|
+
projectId: string;
|
|
77
|
+
tenantId: string;
|
|
78
|
+
}>;
|
|
79
|
+
declare const deleteSkill: (db: AgentsManageDatabaseClient) => (params: {
|
|
80
|
+
scopes: ProjectScopeConfig;
|
|
81
|
+
skillId: string;
|
|
82
|
+
}) => Promise<boolean>;
|
|
83
|
+
declare const getSkillsForSubAgents: (db: AgentsManageDatabaseClient) => (params: {
|
|
84
|
+
scopes: AgentScopeConfig;
|
|
85
|
+
subAgentIds: string[];
|
|
86
|
+
}) => Promise<SubAgentSkillWithIndex[]>;
|
|
87
|
+
declare const upsertSubAgentSkill: (db: AgentsManageDatabaseClient) => (params: {
|
|
88
|
+
scopes: SubAgentScopeConfig;
|
|
89
|
+
skillId: string;
|
|
90
|
+
index: number;
|
|
91
|
+
alwaysLoaded?: boolean;
|
|
92
|
+
}) => Promise<{
|
|
93
|
+
id: string;
|
|
94
|
+
tenantId: string;
|
|
95
|
+
projectId: string;
|
|
96
|
+
agentId: string;
|
|
97
|
+
createdAt: string;
|
|
98
|
+
updatedAt: string;
|
|
99
|
+
index: number;
|
|
100
|
+
alwaysLoaded: boolean;
|
|
101
|
+
subAgentId: string;
|
|
102
|
+
skillId: string;
|
|
103
|
+
}>;
|
|
104
|
+
declare const deleteSubAgentSkill: (db: AgentsManageDatabaseClient) => (params: {
|
|
105
|
+
scopes: AgentScopeConfig;
|
|
106
|
+
subAgentSkillId: string;
|
|
107
|
+
}) => Promise<boolean>;
|
|
108
|
+
//#endregion
|
|
109
|
+
export { createSkill, deleteSkill, deleteSubAgentSkill, getSkillById, getSkillsForSubAgents, listSkills, updateSkill, upsertSkill, upsertSubAgentSkill };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { skills, subAgentSkills } from "../../db/manage/manage-schema.js";
|
|
2
|
+
import { getLogger } from "../../utils/logger.js";
|
|
3
|
+
import { generateId } from "../../utils/conversations.js";
|
|
4
|
+
import "../../index.js";
|
|
5
|
+
import { and, asc, count, desc, eq, inArray } from "drizzle-orm";
|
|
6
|
+
|
|
7
|
+
//#region src/data-access/manage/skills.ts
|
|
8
|
+
const logger = getLogger("skills-dal");
|
|
9
|
+
const getSkillById = (db) => async (params) => {
|
|
10
|
+
return await db.query.skills.findFirst({ where: and(eq(skills.tenantId, params.scopes.tenantId), eq(skills.projectId, params.scopes.projectId), eq(skills.id, params.skillId)) }) ?? null;
|
|
11
|
+
};
|
|
12
|
+
const listSkills = (db) => async (params) => {
|
|
13
|
+
const page = params.pagination?.page || 1;
|
|
14
|
+
const limit = Math.min(params.pagination?.limit || 10, 100);
|
|
15
|
+
const offset = (page - 1) * limit;
|
|
16
|
+
const whereClause = and(eq(skills.tenantId, params.scopes.tenantId), eq(skills.projectId, params.scopes.projectId));
|
|
17
|
+
const [data, totalResult] = await Promise.all([db.select().from(skills).where(whereClause).limit(limit).offset(offset).orderBy(desc(skills.createdAt)), db.select({ count: count() }).from(skills).where(whereClause)]);
|
|
18
|
+
const total = totalResult[0]?.count || 0;
|
|
19
|
+
return {
|
|
20
|
+
data,
|
|
21
|
+
pagination: {
|
|
22
|
+
page,
|
|
23
|
+
limit,
|
|
24
|
+
total,
|
|
25
|
+
pages: Math.ceil(total / limit)
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
const createSkill = (db) => async (data) => {
|
|
30
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
31
|
+
const insertData = {
|
|
32
|
+
...data,
|
|
33
|
+
id: data.name,
|
|
34
|
+
createdAt: now,
|
|
35
|
+
updatedAt: now
|
|
36
|
+
};
|
|
37
|
+
const [result] = await db.insert(skills).values(insertData).returning();
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
const upsertSkill = (db) => async (data) => {
|
|
41
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
42
|
+
const baseData = {
|
|
43
|
+
...data,
|
|
44
|
+
id: data.name
|
|
45
|
+
};
|
|
46
|
+
if (await db.query.skills.findFirst({ where: and(eq(skills.tenantId, baseData.tenantId), eq(skills.projectId, baseData.projectId), eq(skills.id, baseData.id)) })) {
|
|
47
|
+
const [result$1] = await db.update(skills).set({
|
|
48
|
+
name: baseData.name,
|
|
49
|
+
description: baseData.description,
|
|
50
|
+
content: baseData.content,
|
|
51
|
+
metadata: baseData.metadata,
|
|
52
|
+
updatedAt: now
|
|
53
|
+
}).where(and(eq(skills.tenantId, baseData.tenantId), eq(skills.projectId, baseData.projectId), eq(skills.id, baseData.id))).returning();
|
|
54
|
+
logger.info({ skillId: baseData.id }, "Updated skill");
|
|
55
|
+
return result$1;
|
|
56
|
+
}
|
|
57
|
+
const insertData = {
|
|
58
|
+
...baseData,
|
|
59
|
+
createdAt: now,
|
|
60
|
+
updatedAt: now
|
|
61
|
+
};
|
|
62
|
+
const [result] = await db.insert(skills).values(insertData).returning();
|
|
63
|
+
logger.info({ skillId: baseData.id }, "Created skill");
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
const updateSkill = (db) => async (params) => {
|
|
67
|
+
const { tenantId: _, projectId: _2, ...data } = params.data;
|
|
68
|
+
const updateData = {
|
|
69
|
+
...data,
|
|
70
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
71
|
+
};
|
|
72
|
+
const [result] = await db.update(skills).set(updateData).where(and(eq(skills.tenantId, params.scopes.tenantId), eq(skills.projectId, params.scopes.projectId), eq(skills.id, params.skillId))).returning();
|
|
73
|
+
return result ?? null;
|
|
74
|
+
};
|
|
75
|
+
const deleteSkill = (db) => async (params) => {
|
|
76
|
+
return (await db.delete(skills).where(and(eq(skills.tenantId, params.scopes.tenantId), eq(skills.projectId, params.scopes.projectId), eq(skills.id, params.skillId))).returning()).length > 0;
|
|
77
|
+
};
|
|
78
|
+
const getSkillsForSubAgents = (db) => async (params) => {
|
|
79
|
+
if (!params.subAgentIds.length) return [];
|
|
80
|
+
return await db.select({
|
|
81
|
+
subAgentSkillId: subAgentSkills.id,
|
|
82
|
+
subAgentId: subAgentSkills.subAgentId,
|
|
83
|
+
index: subAgentSkills.index,
|
|
84
|
+
alwaysLoaded: subAgentSkills.alwaysLoaded,
|
|
85
|
+
id: skills.id,
|
|
86
|
+
name: skills.name,
|
|
87
|
+
description: skills.description,
|
|
88
|
+
content: skills.content,
|
|
89
|
+
metadata: skills.metadata,
|
|
90
|
+
createdAt: skills.createdAt,
|
|
91
|
+
updatedAt: skills.updatedAt
|
|
92
|
+
}).from(subAgentSkills).innerJoin(skills, and(eq(subAgentSkills.skillId, skills.id), eq(subAgentSkills.tenantId, skills.tenantId), eq(subAgentSkills.projectId, skills.projectId))).where(and(eq(subAgentSkills.tenantId, params.scopes.tenantId), eq(subAgentSkills.projectId, params.scopes.projectId), eq(subAgentSkills.agentId, params.scopes.agentId), inArray(subAgentSkills.subAgentId, params.subAgentIds))).orderBy(asc(subAgentSkills.index), asc(subAgentSkills.createdAt));
|
|
93
|
+
};
|
|
94
|
+
const upsertSubAgentSkill = (db) => async (params) => {
|
|
95
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
96
|
+
const existing = await db.query.subAgentSkills.findFirst({ where: and(eq(subAgentSkills.tenantId, params.scopes.tenantId), eq(subAgentSkills.projectId, params.scopes.projectId), eq(subAgentSkills.agentId, params.scopes.agentId), eq(subAgentSkills.subAgentId, params.scopes.subAgentId), eq(subAgentSkills.skillId, params.skillId)) });
|
|
97
|
+
if (existing) {
|
|
98
|
+
const [result$1] = await db.update(subAgentSkills).set({
|
|
99
|
+
index: params.index,
|
|
100
|
+
alwaysLoaded: params.alwaysLoaded ?? existing.alwaysLoaded,
|
|
101
|
+
updatedAt: now
|
|
102
|
+
}).where(eq(subAgentSkills.id, existing.id)).returning();
|
|
103
|
+
return result$1;
|
|
104
|
+
}
|
|
105
|
+
const insertData = {
|
|
106
|
+
...params.scopes,
|
|
107
|
+
id: generateId(),
|
|
108
|
+
skillId: params.skillId,
|
|
109
|
+
index: params.index,
|
|
110
|
+
alwaysLoaded: params.alwaysLoaded ?? false,
|
|
111
|
+
createdAt: now,
|
|
112
|
+
updatedAt: now
|
|
113
|
+
};
|
|
114
|
+
const [result] = await db.insert(subAgentSkills).values(insertData).returning();
|
|
115
|
+
return result;
|
|
116
|
+
};
|
|
117
|
+
const deleteSubAgentSkill = (db) => async (params) => {
|
|
118
|
+
return (await db.delete(subAgentSkills).where(and(eq(subAgentSkills.tenantId, params.scopes.tenantId), eq(subAgentSkills.projectId, params.scopes.projectId), eq(subAgentSkills.agentId, params.scopes.agentId), eq(subAgentSkills.id, params.subAgentSkillId))).returning()).length > 0;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
//#endregion
|
|
122
|
+
export { createSkill, deleteSkill, deleteSubAgentSkill, getSkillById, getSkillsForSubAgents, listSkills, updateSkill, upsertSkill, upsertSubAgentSkill };
|
|
@@ -51,8 +51,6 @@ declare const listTools: (db: AgentsManageDatabaseClient) => (params: {
|
|
|
51
51
|
data: {
|
|
52
52
|
createdAt: string;
|
|
53
53
|
updatedAt: string;
|
|
54
|
-
name: string;
|
|
55
|
-
description: string | null;
|
|
56
54
|
config: {
|
|
57
55
|
type: "mcp";
|
|
58
56
|
mcp: ToolMcpConfig;
|
|
@@ -64,6 +62,8 @@ declare const listTools: (db: AgentsManageDatabaseClient) => (params: {
|
|
|
64
62
|
capabilities: ToolServerCapabilities | null;
|
|
65
63
|
lastError: string | null;
|
|
66
64
|
isWorkApp: boolean;
|
|
65
|
+
name: string;
|
|
66
|
+
description: string | null;
|
|
67
67
|
projectId: string;
|
|
68
68
|
tenantId: string;
|
|
69
69
|
id: string;
|
|
@@ -102,8 +102,6 @@ declare const updateTool: (db: AgentsManageDatabaseClient) => (params: {
|
|
|
102
102
|
}) => Promise<{
|
|
103
103
|
createdAt: string;
|
|
104
104
|
updatedAt: string;
|
|
105
|
-
name: string;
|
|
106
|
-
description: string | null;
|
|
107
105
|
config: {
|
|
108
106
|
type: "mcp";
|
|
109
107
|
mcp: ToolMcpConfig;
|
|
@@ -115,6 +113,8 @@ declare const updateTool: (db: AgentsManageDatabaseClient) => (params: {
|
|
|
115
113
|
capabilities: ToolServerCapabilities | null;
|
|
116
114
|
lastError: string | null;
|
|
117
115
|
isWorkApp: boolean;
|
|
116
|
+
name: string;
|
|
117
|
+
description: string | null;
|
|
118
118
|
projectId: string;
|
|
119
119
|
tenantId: string;
|
|
120
120
|
id: string;
|
|
@@ -40,13 +40,13 @@ declare const listTriggersPaginated: (db: AgentsManageDatabaseClient) => (params
|
|
|
40
40
|
algorithm: "sha256" | "sha512" | "sha384" | "sha1" | "md5";
|
|
41
41
|
encoding: "hex" | "base64";
|
|
42
42
|
signature: {
|
|
43
|
-
source: "query" | "
|
|
43
|
+
source: "query" | "body" | "header";
|
|
44
44
|
key: string;
|
|
45
45
|
prefix?: string | undefined;
|
|
46
46
|
regex?: string | undefined;
|
|
47
47
|
};
|
|
48
48
|
signedComponents: {
|
|
49
|
-
source: "literal" | "
|
|
49
|
+
source: "literal" | "body" | "header";
|
|
50
50
|
required: boolean;
|
|
51
51
|
key?: string | undefined;
|
|
52
52
|
value?: string | undefined;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { AgentScopeConfig, PaginationConfig } from "../../types/utility.js";
|
|
2
|
+
import { AgentsRunDatabaseClient } from "../../db/runtime/runtime-client.js";
|
|
3
|
+
import { ScheduledTriggerInvocation, ScheduledTriggerInvocationInsert, ScheduledTriggerInvocationStatus, ScheduledTriggerInvocationUpdate } from "../../validation/schemas.js";
|
|
4
|
+
|
|
5
|
+
//#region src/data-access/runtime/scheduledTriggerInvocations.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get a scheduled trigger invocation by ID (agent-scoped)
|
|
9
|
+
*/
|
|
10
|
+
declare const getScheduledTriggerInvocationById: (db: AgentsRunDatabaseClient) => (params: {
|
|
11
|
+
scopes: AgentScopeConfig;
|
|
12
|
+
scheduledTriggerId: string;
|
|
13
|
+
invocationId: string;
|
|
14
|
+
}) => Promise<ScheduledTriggerInvocation | undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* Get a scheduled trigger invocation by idempotency key
|
|
17
|
+
* Used to check if an invocation already exists for a given schedule
|
|
18
|
+
*/
|
|
19
|
+
declare const getScheduledTriggerInvocationByIdempotencyKey: (db: AgentsRunDatabaseClient) => (params: {
|
|
20
|
+
idempotencyKey: string;
|
|
21
|
+
}) => Promise<ScheduledTriggerInvocation | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* List scheduled trigger invocations with optional filtering (agent-scoped)
|
|
24
|
+
*/
|
|
25
|
+
declare const listScheduledTriggerInvocationsPaginated: (db: AgentsRunDatabaseClient) => (params: {
|
|
26
|
+
scopes: AgentScopeConfig;
|
|
27
|
+
scheduledTriggerId: string;
|
|
28
|
+
pagination?: PaginationConfig;
|
|
29
|
+
filters?: {
|
|
30
|
+
status?: ScheduledTriggerInvocationStatus;
|
|
31
|
+
from?: string;
|
|
32
|
+
to?: string;
|
|
33
|
+
};
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
data: {
|
|
36
|
+
scheduledTriggerId: string;
|
|
37
|
+
status: "pending" | "failed" | "running" | "completed" | "cancelled";
|
|
38
|
+
scheduledFor: string;
|
|
39
|
+
startedAt: string | null;
|
|
40
|
+
completedAt: string | null;
|
|
41
|
+
resolvedPayload: Record<string, unknown> | null;
|
|
42
|
+
conversationIds: string[] | null;
|
|
43
|
+
attemptNumber: number;
|
|
44
|
+
idempotencyKey: string;
|
|
45
|
+
createdAt: string;
|
|
46
|
+
agentId: string;
|
|
47
|
+
projectId: string;
|
|
48
|
+
tenantId: string;
|
|
49
|
+
id: string;
|
|
50
|
+
}[];
|
|
51
|
+
pagination: {
|
|
52
|
+
page: number;
|
|
53
|
+
limit: number;
|
|
54
|
+
total: number;
|
|
55
|
+
pages: number;
|
|
56
|
+
};
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* List pending invocations for a trigger, ordered by scheduledFor (earliest first)
|
|
60
|
+
* Used by workflow to get the next invocation to execute
|
|
61
|
+
*/
|
|
62
|
+
declare const listPendingScheduledTriggerInvocations: (db: AgentsRunDatabaseClient) => (params: {
|
|
63
|
+
scopes: AgentScopeConfig;
|
|
64
|
+
scheduledTriggerId: string;
|
|
65
|
+
limit?: number;
|
|
66
|
+
}) => Promise<ScheduledTriggerInvocation[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete all pending invocations for a trigger
|
|
69
|
+
* Used when cron expression changes or trigger is disabled
|
|
70
|
+
*/
|
|
71
|
+
declare const deletePendingInvocationsForTrigger: (db: AgentsRunDatabaseClient) => (params: {
|
|
72
|
+
scopes: AgentScopeConfig;
|
|
73
|
+
scheduledTriggerId: string;
|
|
74
|
+
}) => Promise<number>;
|
|
75
|
+
/**
|
|
76
|
+
* Create a new scheduled trigger invocation (agent-scoped)
|
|
77
|
+
*/
|
|
78
|
+
declare const createScheduledTriggerInvocation: (db: AgentsRunDatabaseClient) => (params: ScheduledTriggerInvocationInsert) => Promise<ScheduledTriggerInvocation>;
|
|
79
|
+
/**
|
|
80
|
+
* Update scheduled trigger invocation status (agent-scoped)
|
|
81
|
+
*/
|
|
82
|
+
declare const updateScheduledTriggerInvocationStatus: (db: AgentsRunDatabaseClient) => (params: {
|
|
83
|
+
scopes: AgentScopeConfig;
|
|
84
|
+
scheduledTriggerId: string;
|
|
85
|
+
invocationId: string;
|
|
86
|
+
data: ScheduledTriggerInvocationUpdate;
|
|
87
|
+
}) => Promise<ScheduledTriggerInvocation>;
|
|
88
|
+
/**
|
|
89
|
+
* Mark invocation as running
|
|
90
|
+
*/
|
|
91
|
+
declare const markScheduledTriggerInvocationRunning: (db: AgentsRunDatabaseClient) => (params: {
|
|
92
|
+
scopes: AgentScopeConfig;
|
|
93
|
+
scheduledTriggerId: string;
|
|
94
|
+
invocationId: string;
|
|
95
|
+
}) => Promise<ScheduledTriggerInvocation>;
|
|
96
|
+
/**
|
|
97
|
+
* Mark invocation as completed
|
|
98
|
+
* Note: Will not update if status is already 'cancelled' to respect user cancellation
|
|
99
|
+
*/
|
|
100
|
+
declare const markScheduledTriggerInvocationCompleted: (db: AgentsRunDatabaseClient) => (params: {
|
|
101
|
+
scopes: AgentScopeConfig;
|
|
102
|
+
scheduledTriggerId: string;
|
|
103
|
+
invocationId: string;
|
|
104
|
+
}) => Promise<ScheduledTriggerInvocation | undefined>;
|
|
105
|
+
/**
|
|
106
|
+
* Mark invocation as failed
|
|
107
|
+
* Note: Will not update if status is already 'cancelled' to respect user cancellation
|
|
108
|
+
*/
|
|
109
|
+
declare const markScheduledTriggerInvocationFailed: (db: AgentsRunDatabaseClient) => (params: {
|
|
110
|
+
scopes: AgentScopeConfig;
|
|
111
|
+
scheduledTriggerId: string;
|
|
112
|
+
invocationId: string;
|
|
113
|
+
}) => Promise<ScheduledTriggerInvocation | undefined>;
|
|
114
|
+
/**
|
|
115
|
+
* Add a conversation ID to the invocation's conversationIds array
|
|
116
|
+
* Used to track all conversations created during retries
|
|
117
|
+
*/
|
|
118
|
+
declare const addConversationIdToInvocation: (db: AgentsRunDatabaseClient) => (params: {
|
|
119
|
+
scopes: AgentScopeConfig;
|
|
120
|
+
scheduledTriggerId: string;
|
|
121
|
+
invocationId: string;
|
|
122
|
+
conversationId: string;
|
|
123
|
+
}) => Promise<ScheduledTriggerInvocation | undefined>;
|
|
124
|
+
/**
|
|
125
|
+
* Mark invocation as cancelled
|
|
126
|
+
*/
|
|
127
|
+
declare const markScheduledTriggerInvocationCancelled: (db: AgentsRunDatabaseClient) => (params: {
|
|
128
|
+
scopes: AgentScopeConfig;
|
|
129
|
+
scheduledTriggerId: string;
|
|
130
|
+
invocationId: string;
|
|
131
|
+
}) => Promise<ScheduledTriggerInvocation>;
|
|
132
|
+
/**
|
|
133
|
+
* Cancel all pending invocations for a trigger
|
|
134
|
+
* Used when a trigger is deleted
|
|
135
|
+
*/
|
|
136
|
+
declare const cancelPendingInvocationsForTrigger: (db: AgentsRunDatabaseClient) => (params: {
|
|
137
|
+
scopes: AgentScopeConfig;
|
|
138
|
+
scheduledTriggerId: string;
|
|
139
|
+
}) => Promise<number>;
|
|
140
|
+
/**
|
|
141
|
+
* Cancel only PAST pending invocations for a trigger (scheduledFor <= now)
|
|
142
|
+
* Used when a trigger is disabled - keeps future invocations pending
|
|
143
|
+
*/
|
|
144
|
+
declare const cancelPastPendingInvocationsForTrigger: (db: AgentsRunDatabaseClient) => (params: {
|
|
145
|
+
scopes: AgentScopeConfig;
|
|
146
|
+
scheduledTriggerId: string;
|
|
147
|
+
}) => Promise<number>;
|
|
148
|
+
/**
|
|
149
|
+
* Get run info for multiple scheduled triggers in a single query
|
|
150
|
+
* Returns last run (completed/failed) and next pending run for each trigger
|
|
151
|
+
*/
|
|
152
|
+
declare const getScheduledTriggerRunInfoBatch: (db: AgentsRunDatabaseClient) => (params: {
|
|
153
|
+
scopes: Omit<AgentScopeConfig, "agentId">;
|
|
154
|
+
triggerIds: Array<{
|
|
155
|
+
agentId: string;
|
|
156
|
+
triggerId: string;
|
|
157
|
+
}>;
|
|
158
|
+
}) => Promise<Map<string, {
|
|
159
|
+
lastRunAt: string | null;
|
|
160
|
+
lastRunStatus: "completed" | "failed" | null;
|
|
161
|
+
lastRunConversationIds: string[];
|
|
162
|
+
nextRunAt: string | null;
|
|
163
|
+
}>>;
|
|
164
|
+
/**
|
|
165
|
+
* List upcoming invocations across ALL triggers for an agent with pagination
|
|
166
|
+
* Used for the upcoming runs dashboard with full pagination support
|
|
167
|
+
*/
|
|
168
|
+
declare const listUpcomingInvocationsForAgentPaginated: (db: AgentsRunDatabaseClient) => (params: {
|
|
169
|
+
scopes: Omit<AgentScopeConfig, "agentId"> & {
|
|
170
|
+
agentId: string;
|
|
171
|
+
};
|
|
172
|
+
pagination?: PaginationConfig;
|
|
173
|
+
includeRunning?: boolean;
|
|
174
|
+
}) => Promise<{
|
|
175
|
+
data: {
|
|
176
|
+
scheduledTriggerId: string;
|
|
177
|
+
status: "pending" | "failed" | "running" | "completed" | "cancelled";
|
|
178
|
+
scheduledFor: string;
|
|
179
|
+
startedAt: string | null;
|
|
180
|
+
completedAt: string | null;
|
|
181
|
+
resolvedPayload: Record<string, unknown> | null;
|
|
182
|
+
conversationIds: string[] | null;
|
|
183
|
+
attemptNumber: number;
|
|
184
|
+
idempotencyKey: string;
|
|
185
|
+
createdAt: string;
|
|
186
|
+
agentId: string;
|
|
187
|
+
projectId: string;
|
|
188
|
+
tenantId: string;
|
|
189
|
+
id: string;
|
|
190
|
+
}[];
|
|
191
|
+
pagination: {
|
|
192
|
+
page: number;
|
|
193
|
+
limit: number;
|
|
194
|
+
total: number;
|
|
195
|
+
pages: number;
|
|
196
|
+
};
|
|
197
|
+
}>;
|
|
198
|
+
/**
|
|
199
|
+
* List all invocations across ALL triggers for a PROJECT with pagination
|
|
200
|
+
* Used for the project-level invocations dashboard
|
|
201
|
+
*/
|
|
202
|
+
declare const listProjectScheduledTriggerInvocationsPaginated: (db: AgentsRunDatabaseClient) => (params: {
|
|
203
|
+
scopes: Omit<AgentScopeConfig, "agentId">;
|
|
204
|
+
pagination?: PaginationConfig;
|
|
205
|
+
filters?: {
|
|
206
|
+
status?: ScheduledTriggerInvocationStatus;
|
|
207
|
+
};
|
|
208
|
+
}) => Promise<{
|
|
209
|
+
data: {
|
|
210
|
+
scheduledTriggerId: string;
|
|
211
|
+
status: "pending" | "failed" | "running" | "completed" | "cancelled";
|
|
212
|
+
scheduledFor: string;
|
|
213
|
+
startedAt: string | null;
|
|
214
|
+
completedAt: string | null;
|
|
215
|
+
resolvedPayload: Record<string, unknown> | null;
|
|
216
|
+
conversationIds: string[] | null;
|
|
217
|
+
attemptNumber: number;
|
|
218
|
+
idempotencyKey: string;
|
|
219
|
+
createdAt: string;
|
|
220
|
+
agentId: string;
|
|
221
|
+
projectId: string;
|
|
222
|
+
tenantId: string;
|
|
223
|
+
id: string;
|
|
224
|
+
}[];
|
|
225
|
+
pagination: {
|
|
226
|
+
page: number;
|
|
227
|
+
limit: number;
|
|
228
|
+
total: number;
|
|
229
|
+
pages: number;
|
|
230
|
+
};
|
|
231
|
+
}>;
|
|
232
|
+
//#endregion
|
|
233
|
+
export { addConversationIdToInvocation, cancelPastPendingInvocationsForTrigger, cancelPendingInvocationsForTrigger, createScheduledTriggerInvocation, deletePendingInvocationsForTrigger, getScheduledTriggerInvocationById, getScheduledTriggerInvocationByIdempotencyKey, getScheduledTriggerRunInfoBatch, listPendingScheduledTriggerInvocations, listProjectScheduledTriggerInvocationsPaginated, listScheduledTriggerInvocationsPaginated, listUpcomingInvocationsForAgentPaginated, markScheduledTriggerInvocationCancelled, markScheduledTriggerInvocationCompleted, markScheduledTriggerInvocationFailed, markScheduledTriggerInvocationRunning, updateScheduledTriggerInvocationStatus };
|