@inkeep/agents-cli 0.53.8 → 0.53.10
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/agents-cli/package.js +1 -1
- package/dist/commands/pull-v4/generators/agent-generator.js +18 -0
- package/dist/commands/pull-v4/generators/trigger-generator.js +8 -8
- package/dist/commands/pull-v4/introspect-generator.js +23 -0
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +39 -0
- package/package.json +3 -3
|
@@ -29,6 +29,7 @@ const AgentSchema = z.looseObject({
|
|
|
29
29
|
}).optional(),
|
|
30
30
|
credentials: z.array(z.union([z.string(), z.strictObject({ id: z.string() })])).optional(),
|
|
31
31
|
triggers: z.union([z.array(z.string()), z.record(z.string(), z.unknown())]).optional(),
|
|
32
|
+
scheduledTriggers: z.union([z.array(z.string()), z.record(z.string(), z.unknown())]).optional(),
|
|
32
33
|
agentVariableName: z.string().nonempty().optional(),
|
|
33
34
|
subAgentReferences: z.record(z.string(), SubAgentReferenceSchema).optional(),
|
|
34
35
|
contextConfigReference: SubAgentReferenceSchema.optional(),
|
|
@@ -73,6 +74,8 @@ function generateAgentDefinition(data) {
|
|
|
73
74
|
}
|
|
74
75
|
const triggerReferenceNames = createReferenceNameMap(parsed.triggers ? extractIds(parsed.triggers) : [], reservedReferenceNames, "Trigger");
|
|
75
76
|
addTriggerImports(sourceFile, triggerReferenceNames);
|
|
77
|
+
const scheduledTriggerReferenceNames = createReferenceNameMap(parsed.scheduledTriggers ? extractIds(parsed.scheduledTriggers) : [], reservedReferenceNames, "ScheduledTrigger");
|
|
78
|
+
addScheduledTriggerImports(sourceFile, scheduledTriggerReferenceNames);
|
|
76
79
|
const statusComponentReferenceNames = createReferenceNameMap(extractStatusComponentIds(parsed.statusUpdates), reservedReferenceNames, "StatusComponent");
|
|
77
80
|
addStatusComponentImports(sourceFile, statusComponentReferenceNames);
|
|
78
81
|
writeAgentConfig(configObject, parsed, {
|
|
@@ -80,6 +83,7 @@ function generateAgentDefinition(data) {
|
|
|
80
83
|
contextConfig: contextConfigReferenceName,
|
|
81
84
|
contextHeaders: contextHeadersReferenceName,
|
|
82
85
|
triggers: triggerReferenceNames,
|
|
86
|
+
scheduledTriggers: scheduledTriggerReferenceNames,
|
|
83
87
|
statusComponents: statusComponentReferenceNames
|
|
84
88
|
});
|
|
85
89
|
return sourceFile;
|
|
@@ -120,6 +124,8 @@ function writeAgentConfig(configObject, data, referenceNames) {
|
|
|
120
124
|
}
|
|
121
125
|
const triggerIds = data.triggers ? extractIds(data.triggers) : [];
|
|
122
126
|
if (triggerIds.length > 0) addReferenceGetterProperty(configObject, "triggers", triggerIds.map((id) => referenceNames.triggers.get(id) ?? toCamelCase(id)));
|
|
127
|
+
const scheduledTriggerIds = data.scheduledTriggers ? extractIds(data.scheduledTriggers) : [];
|
|
128
|
+
if (scheduledTriggerIds.length > 0) addReferenceGetterProperty(configObject, "scheduledTriggers", scheduledTriggerIds.map((id) => referenceNames.scheduledTriggers.get(id) ?? toCamelCase(id)));
|
|
123
129
|
if (data.stopWhen?.transferCountIs !== void 0) configObject.addPropertyAssignment({
|
|
124
130
|
name: "stopWhen",
|
|
125
131
|
initializer: "{}"
|
|
@@ -205,6 +211,18 @@ function addTriggerImports(sourceFile, referenceNames) {
|
|
|
205
211
|
});
|
|
206
212
|
}
|
|
207
213
|
}
|
|
214
|
+
function addScheduledTriggerImports(sourceFile, referenceNames) {
|
|
215
|
+
for (const [scheduledTriggerId, referenceName] of referenceNames) {
|
|
216
|
+
const importName = toCamelCase(scheduledTriggerId);
|
|
217
|
+
sourceFile.addImportDeclaration({
|
|
218
|
+
namedImports: [importName === referenceName ? importName : {
|
|
219
|
+
name: importName,
|
|
220
|
+
alias: referenceName
|
|
221
|
+
}],
|
|
222
|
+
moduleSpecifier: `./scheduled-triggers/${scheduledTriggerId}`
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
208
226
|
function extractStatusComponentIds(statusUpdates) {
|
|
209
227
|
if (!statusUpdates?.statusComponents?.length) return [];
|
|
210
228
|
const statusComponentIds = statusUpdates.statusComponents.map(resolveStatusComponentId);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
|
|
1
|
+
import { addValueToObject, convertNullToUndefined, createFactoryDefinition, toCamelCase } from "../utils.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { SyntaxKind } from "ts-morph";
|
|
4
4
|
|
|
@@ -6,15 +6,15 @@ import { SyntaxKind } from "ts-morph";
|
|
|
6
6
|
const TriggerSchema = z.looseObject({
|
|
7
7
|
triggerId: z.string().nonempty(),
|
|
8
8
|
name: z.string().nonempty(),
|
|
9
|
-
description: z.string().optional(),
|
|
9
|
+
description: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
10
10
|
enabled: z.boolean().optional(),
|
|
11
|
-
messageTemplate: z.string().
|
|
11
|
+
messageTemplate: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
12
12
|
inputSchema: z.unknown().optional(),
|
|
13
13
|
outputTransform: z.looseObject({
|
|
14
14
|
jmespath: z.string().optional(),
|
|
15
15
|
objectTransformation: z.unknown().optional()
|
|
16
|
-
}).optional(),
|
|
17
|
-
authentication: z.looseObject({ headers: z.array(z.looseObject({})).optional() }).optional(),
|
|
16
|
+
}).nullable().optional().transform(convertNullToUndefined),
|
|
17
|
+
authentication: z.looseObject({ headers: z.array(z.looseObject({})).optional() }).nullable().optional().transform(convertNullToUndefined),
|
|
18
18
|
signatureVerification: z.looseObject({
|
|
19
19
|
algorithm: z.string().optional(),
|
|
20
20
|
encoding: z.string().optional(),
|
|
@@ -22,9 +22,9 @@ const TriggerSchema = z.looseObject({
|
|
|
22
22
|
signedComponents: z.array(z.looseObject({})).optional(),
|
|
23
23
|
componentJoin: z.looseObject({}).optional(),
|
|
24
24
|
validation: z.looseObject({}).optional()
|
|
25
|
-
}).optional(),
|
|
26
|
-
signingSecretCredentialReferenceId: z.string().optional(),
|
|
27
|
-
signingSecretCredentialReference: z.union([z.string(), z.looseObject({ id: z.string().optional() })]).optional()
|
|
25
|
+
}).nullable().optional().transform(convertNullToUndefined),
|
|
26
|
+
signingSecretCredentialReferenceId: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
27
|
+
signingSecretCredentialReference: z.union([z.string(), z.looseObject({ id: z.string().optional() })]).nullable().optional().transform(convertNullToUndefined)
|
|
28
28
|
});
|
|
29
29
|
function generateTriggerDefinition(data) {
|
|
30
30
|
const result = TriggerSchema.safeParse(data);
|
|
@@ -11,6 +11,7 @@ import { generateStatusComponentDefinition } from "./generators/status-component
|
|
|
11
11
|
import { generateSubAgentDefinition } from "./generators/sub-agent-generator.js";
|
|
12
12
|
import { generateTriggerDefinition } from "./generators/trigger-generator.js";
|
|
13
13
|
import { mergeGeneratedModule } from "./module-merge.js";
|
|
14
|
+
import { generateScheduledTriggerDefinition } from "./scheduled-trigger-generator.js";
|
|
14
15
|
import { dirname, join } from "node:path";
|
|
15
16
|
import { Node, SyntaxKind } from "ts-morph";
|
|
16
17
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -77,6 +78,11 @@ function createGenerationTasks() {
|
|
|
77
78
|
collect: collectTriggerRecords,
|
|
78
79
|
generate: generateTriggerDefinition
|
|
79
80
|
},
|
|
81
|
+
{
|
|
82
|
+
type: "scheduled-trigger",
|
|
83
|
+
collect: collectScheduledTriggerRecords,
|
|
84
|
+
generate: generateScheduledTriggerDefinition
|
|
85
|
+
},
|
|
80
86
|
{
|
|
81
87
|
type: "sub-agent",
|
|
82
88
|
collect: collectSubAgentRecords,
|
|
@@ -231,6 +237,23 @@ function collectTriggerRecords(context) {
|
|
|
231
237
|
}
|
|
232
238
|
return records;
|
|
233
239
|
}
|
|
240
|
+
function collectScheduledTriggerRecords(context) {
|
|
241
|
+
if (!context.project.agents) return [];
|
|
242
|
+
const records = [];
|
|
243
|
+
for (const agentId of context.completeAgentIds) {
|
|
244
|
+
const agentData = context.project.agents[agentId];
|
|
245
|
+
if (!agentData?.scheduledTriggers) continue;
|
|
246
|
+
for (const [scheduledTriggerId, scheduledTriggerData] of Object.entries(agentData.scheduledTriggers)) records.push({
|
|
247
|
+
id: scheduledTriggerId,
|
|
248
|
+
filePath: resolveRecordFilePath(context, "scheduledTriggers", scheduledTriggerId, join(context.paths.agentsDir, "scheduled-triggers", `${scheduledTriggerId}.ts`)),
|
|
249
|
+
payload: {
|
|
250
|
+
scheduledTriggerId,
|
|
251
|
+
...scheduledTriggerData
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return records;
|
|
256
|
+
}
|
|
234
257
|
function collectAgentRecords(context) {
|
|
235
258
|
if (!context.project.agents) return [];
|
|
236
259
|
const records = [];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { addValueToObject, convertNullToUndefined, createFactoryDefinition, toCamelCase } from "./utils.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { SyntaxKind } from "ts-morph";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/pull-v4/scheduled-trigger-generator.ts
|
|
6
|
+
const ScheduledTriggerSchema = z.looseObject({
|
|
7
|
+
scheduledTriggerId: z.string().nonempty(),
|
|
8
|
+
name: z.string().nonempty(),
|
|
9
|
+
description: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
10
|
+
enabled: z.boolean().optional(),
|
|
11
|
+
cronExpression: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
12
|
+
cronTimezone: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
13
|
+
runAt: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
14
|
+
payload: z.record(z.string(), z.unknown()).nullable().optional().transform((v) => v ?? void 0),
|
|
15
|
+
messageTemplate: z.string().nullable().optional().transform(convertNullToUndefined),
|
|
16
|
+
maxRetries: z.number().optional(),
|
|
17
|
+
retryDelaySeconds: z.number().optional(),
|
|
18
|
+
timeoutSeconds: z.number().optional(),
|
|
19
|
+
runAsUserId: z.string().nullable().optional().transform(convertNullToUndefined)
|
|
20
|
+
});
|
|
21
|
+
function generateScheduledTriggerDefinition(data) {
|
|
22
|
+
const result = ScheduledTriggerSchema.safeParse(data);
|
|
23
|
+
if (!result.success) throw new Error(`Validation failed for scheduled trigger:\n${z.prettifyError(result.error)}`);
|
|
24
|
+
const parsed = result.data;
|
|
25
|
+
const { sourceFile, configObject } = createFactoryDefinition({
|
|
26
|
+
importName: "ScheduledTrigger",
|
|
27
|
+
variableName: toCamelCase(parsed.scheduledTriggerId),
|
|
28
|
+
syntaxKind: SyntaxKind.NewExpression
|
|
29
|
+
});
|
|
30
|
+
const { scheduledTriggerId, ...rest } = parsed;
|
|
31
|
+
for (const [key, value] of Object.entries({
|
|
32
|
+
id: scheduledTriggerId,
|
|
33
|
+
...rest
|
|
34
|
+
})) addValueToObject(configObject, key, value);
|
|
35
|
+
return sourceFile;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { generateScheduledTriggerDefinition };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-cli",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.10",
|
|
4
4
|
"description": "Inkeep CLI tool",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"tsx": "^4.20.5",
|
|
38
38
|
"yaml": "^2.7.0",
|
|
39
39
|
"zod": "^4.3.6",
|
|
40
|
-
"@inkeep/agents-core": "^0.53.
|
|
41
|
-
"@inkeep/agents-sdk": "^0.53.
|
|
40
|
+
"@inkeep/agents-core": "^0.53.10",
|
|
41
|
+
"@inkeep/agents-sdk": "^0.53.10"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"diff": "^8.0.3",
|