@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.
@@ -1,6 +1,6 @@
1
1
  //#region package.json
2
2
  var name = "@inkeep/agents-cli";
3
- var version = "0.53.8";
3
+ var version = "0.53.10";
4
4
 
5
5
  //#endregion
6
6
  export { name, version };
@@ -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().nonempty(),
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.8",
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.8",
41
- "@inkeep/agents-sdk": "^0.53.8"
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",