@vm0/cli 9.219.0 → 9.220.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/{agent-4SQZDYYN.js → agent-7NASKRN2.js} +4 -4
  2. package/{automation-WPG4IYVE.js → automation-DL2TSVCY.js} +21 -11
  3. package/automation-DL2TSVCY.js.map +1 -0
  4. package/{banking-S7GOP6WI.js → banking-7766P2VA.js} +2 -2
  5. package/{chat-6E34QZHI.js → chat-7Y3GRRQU.js} +2 -2
  6. package/{chunk-NUCGXUQW.js → chunk-2WLLGU5G.js} +2 -2
  7. package/{chunk-UQBJX5J5.js → chunk-BDVHHGRQ.js} +7 -7
  8. package/{chunk-O5WIIYWN.js → chunk-CYWNKBCJ.js} +2 -2
  9. package/{chunk-B33JIZI2.js → chunk-EIORAGIM.js} +3 -3
  10. package/chunk-H63W4KQL.js +160 -0
  11. package/chunk-H63W4KQL.js.map +1 -0
  12. package/{chunk-7DWLR3AY.js → chunk-IP5MKNYO.js} +9 -7
  13. package/{chunk-7DWLR3AY.js.map → chunk-IP5MKNYO.js.map} +1 -1
  14. package/{chunk-RYGMBENC.js → chunk-JJNOLW3F.js} +2 -2
  15. package/{chunk-Q47FRJVT.js → chunk-MES7TURQ.js} +51 -182
  16. package/chunk-MES7TURQ.js.map +1 -0
  17. package/{chunk-C3NCF7AC.js → chunk-PHLVIRTN.js} +56 -29
  18. package/chunk-PHLVIRTN.js.map +1 -0
  19. package/{chunk-PTXI3X6L.js → chunk-QCBHUHCP.js} +2 -2
  20. package/clerk.generated-ERU55NQP.js +402 -0
  21. package/clerk.generated-ERU55NQP.js.map +1 -0
  22. package/{computer-use-P5NZISFJ.js → computer-use-DFWKRS5C.js} +2 -2
  23. package/{connector-BF7GN5KJ.js → connector-XXMPNPPI.js} +3 -3
  24. package/{credit-MUMH2AFQ.js → credit-EXQA2ZKH.js} +2 -2
  25. package/{developer-support-YRODRFDP.js → developer-support-HV2KNBFK.js} +2 -2
  26. package/{doctor-SYQVWI4X.js → doctor-B3XKCTAQ.js} +5 -5
  27. package/dropbox.generated-ZZKEVL5X.js +140 -0
  28. package/dropbox.generated-ZZKEVL5X.js.map +1 -0
  29. package/{generate-SOTMY5L2.js → generate-76KZOWWD.js} +3 -3
  30. package/{github-M5QMAGUR.js → github-R33X2DZP.js} +2 -2
  31. package/{goal-UCWUNBDX.js → goal-6EHEH3W6.js} +2 -2
  32. package/{host-FBIUSQM5.js → host-QJVQWPTD.js} +2 -2
  33. package/index.js +20 -18
  34. package/index.js.map +1 -1
  35. package/{logs-2WS7C3NG.js → logs-TP25S725.js} +13 -11
  36. package/{logs-2WS7C3NG.js.map → logs-TP25S725.js.map} +1 -1
  37. package/{maps-F6HS3TX3.js → maps-GGAFUIRJ.js} +2 -2
  38. package/{model-WVSFDOUB.js → model-B3IPEBEY.js} +3 -3
  39. package/{model-provider-RW5KSE2A.js → model-provider-3AKAPHTA.js} +3 -3
  40. package/{org-HG7QC6H2.js → org-LCUQ4U3K.js} +2 -2
  41. package/package.json +1 -1
  42. package/{phone-Y53A3YR6.js → phone-3PZOGXP5.js} +2 -2
  43. package/{preference-PDDNKSID.js → preference-7BNRZYGT.js} +2 -2
  44. package/{resource-4RXH7SID.js → resource-FYGZW3VK.js} +2 -2
  45. package/{schedule-XUGLVIVF.js → schedule-MTI5OP23.js} +2 -2
  46. package/schedule-MTI5OP23.js.map +1 -0
  47. package/{search-NRX5C4BZ.js → search-G5335REW.js} +10 -8
  48. package/{search-NRX5C4BZ.js.map → search-G5335REW.js.map} +1 -1
  49. package/{secret-G6ZROM3S.js → secret-DPVN2UF2.js} +3 -3
  50. package/sentry.generated-Y3V3MFG5.js +112 -0
  51. package/sentry.generated-Y3V3MFG5.js.map +1 -0
  52. package/{slack-UE7PHE5Q.js → slack-T7G7IOD7.js} +2 -2
  53. package/strava.generated-FDURULCZ.js +76 -0
  54. package/strava.generated-FDURULCZ.js.map +1 -0
  55. package/{telegram-FMO5JNQL.js → telegram-AIUOTF4A.js} +2 -2
  56. package/{variable-3QU5KSPD.js → variable-UNXSGRUU.js} +2 -2
  57. package/{web-NUS7HONQ.js → web-NX3LRDTP.js} +2 -2
  58. package/{whoami-BVBVPCEX.js → whoami-W6ZRUGTN.js} +4 -4
  59. package/{workflow-KFXYP54E.js → workflow-F2YOTCAJ.js} +135 -95
  60. package/workflow-F2YOTCAJ.js.map +1 -0
  61. package/xero.generated-NPSQE6GC.js +164 -0
  62. package/xero.generated-NPSQE6GC.js.map +1 -0
  63. package/zero.js +32 -32
  64. package/automation-WPG4IYVE.js.map +0 -1
  65. package/chunk-C3NCF7AC.js.map +0 -1
  66. package/chunk-Q47FRJVT.js.map +0 -1
  67. package/clerk.generated-CUIJPEBA.js +0 -335
  68. package/clerk.generated-CUIJPEBA.js.map +0 -1
  69. package/dropbox.generated-SM45XNZI.js +0 -111
  70. package/dropbox.generated-SM45XNZI.js.map +0 -1
  71. package/schedule-XUGLVIVF.js.map +0 -1
  72. package/sentry.generated-TQZTJGQ4.js +0 -90
  73. package/sentry.generated-TQZTJGQ4.js.map +0 -1
  74. package/strava.generated-FK4SMYR7.js +0 -63
  75. package/strava.generated-FK4SMYR7.js.map +0 -1
  76. package/workflow-KFXYP54E.js.map +0 -1
  77. package/xero.generated-UVAXXS6Q.js +0 -129
  78. package/xero.generated-UVAXXS6Q.js.map +0 -1
  79. /package/{agent-4SQZDYYN.js.map → agent-7NASKRN2.js.map} +0 -0
  80. /package/{banking-S7GOP6WI.js.map → banking-7766P2VA.js.map} +0 -0
  81. /package/{chat-6E34QZHI.js.map → chat-7Y3GRRQU.js.map} +0 -0
  82. /package/{chunk-NUCGXUQW.js.map → chunk-2WLLGU5G.js.map} +0 -0
  83. /package/{chunk-UQBJX5J5.js.map → chunk-BDVHHGRQ.js.map} +0 -0
  84. /package/{chunk-O5WIIYWN.js.map → chunk-CYWNKBCJ.js.map} +0 -0
  85. /package/{chunk-B33JIZI2.js.map → chunk-EIORAGIM.js.map} +0 -0
  86. /package/{chunk-RYGMBENC.js.map → chunk-JJNOLW3F.js.map} +0 -0
  87. /package/{chunk-PTXI3X6L.js.map → chunk-QCBHUHCP.js.map} +0 -0
  88. /package/{computer-use-P5NZISFJ.js.map → computer-use-DFWKRS5C.js.map} +0 -0
  89. /package/{connector-BF7GN5KJ.js.map → connector-XXMPNPPI.js.map} +0 -0
  90. /package/{credit-MUMH2AFQ.js.map → credit-EXQA2ZKH.js.map} +0 -0
  91. /package/{developer-support-YRODRFDP.js.map → developer-support-HV2KNBFK.js.map} +0 -0
  92. /package/{doctor-SYQVWI4X.js.map → doctor-B3XKCTAQ.js.map} +0 -0
  93. /package/{generate-SOTMY5L2.js.map → generate-76KZOWWD.js.map} +0 -0
  94. /package/{github-M5QMAGUR.js.map → github-R33X2DZP.js.map} +0 -0
  95. /package/{goal-UCWUNBDX.js.map → goal-6EHEH3W6.js.map} +0 -0
  96. /package/{host-FBIUSQM5.js.map → host-QJVQWPTD.js.map} +0 -0
  97. /package/{maps-F6HS3TX3.js.map → maps-GGAFUIRJ.js.map} +0 -0
  98. /package/{model-WVSFDOUB.js.map → model-B3IPEBEY.js.map} +0 -0
  99. /package/{model-provider-RW5KSE2A.js.map → model-provider-3AKAPHTA.js.map} +0 -0
  100. /package/{org-HG7QC6H2.js.map → org-LCUQ4U3K.js.map} +0 -0
  101. /package/{phone-Y53A3YR6.js.map → phone-3PZOGXP5.js.map} +0 -0
  102. /package/{preference-PDDNKSID.js.map → preference-7BNRZYGT.js.map} +0 -0
  103. /package/{resource-4RXH7SID.js.map → resource-FYGZW3VK.js.map} +0 -0
  104. /package/{secret-G6ZROM3S.js.map → secret-DPVN2UF2.js.map} +0 -0
  105. /package/{slack-UE7PHE5Q.js.map → slack-T7G7IOD7.js.map} +0 -0
  106. /package/{telegram-FMO5JNQL.js.map → telegram-AIUOTF4A.js.map} +0 -0
  107. /package/{variable-3QU5KSPD.js.map → variable-UNXSGRUU.js.map} +0 -0
  108. /package/{web-NUS7HONQ.js.map → web-NX3LRDTP.js.map} +0 -0
  109. /package/{whoami-BVBVPCEX.js.map → whoami-W6ZRUGTN.js.map} +0 -0
@@ -10,7 +10,7 @@ import {
10
10
  deleteZeroVariable,
11
11
  listZeroVariables,
12
12
  setZeroVariable
13
- } from "./chunk-C3NCF7AC.js";
13
+ } from "./chunk-PHLVIRTN.js";
14
14
  import {
15
15
  withErrorHandler
16
16
  } from "./chunk-3F4RFLPX.js";
@@ -117,4 +117,4 @@ var zeroVariableCommand = new Command().name("variable").description("Read or wr
117
117
  export {
118
118
  zeroVariableCommand
119
119
  };
120
- //# sourceMappingURL=variable-3QU5KSPD.js.map
120
+ //# sourceMappingURL=variable-UNXSGRUU.js.map
@@ -2,7 +2,7 @@
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import "./chunk-LTDQISD7.js";
5
- import "./chunk-C3NCF7AC.js";
5
+ import "./chunk-PHLVIRTN.js";
6
6
  import {
7
7
  downloadWebFile,
8
8
  uploadWebFile,
@@ -106,4 +106,4 @@ Examples:
106
106
  export {
107
107
  zeroWebCommand
108
108
  };
109
- //# sourceMappingURL=web-NUS7HONQ.js.map
109
+ //# sourceMappingURL=web-NX3LRDTP.js.map
@@ -4,16 +4,16 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  loadConnectorPermissionInfos,
6
6
  policyIcon
7
- } from "./chunk-NUCGXUQW.js";
7
+ } from "./chunk-2WLLGU5G.js";
8
8
  import {
9
9
  permissionGrantsToFirewallPolicies
10
- } from "./chunk-UQBJX5J5.js";
10
+ } from "./chunk-BDVHHGRQ.js";
11
11
  import "./chunk-LTDQISD7.js";
12
12
  import {
13
13
  getZeroAgentUserConnectors,
14
14
  listZeroConnectors,
15
15
  listZeroUserPermissionGrants
16
- } from "./chunk-C3NCF7AC.js";
16
+ } from "./chunk-PHLVIRTN.js";
17
17
  import {
18
18
  getActiveOrg,
19
19
  getApiUrl,
@@ -192,4 +192,4 @@ Notes:
192
192
  export {
193
193
  zeroWhoamiCommand
194
194
  };
195
- //# sourceMappingURL=whoami-BVBVPCEX.js.map
195
+ //# sourceMappingURL=whoami-W6ZRUGTN.js.map
@@ -27,7 +27,7 @@ import {
27
27
  listWorkflows,
28
28
  updateWorkflow,
29
29
  updateWorkflowTrigger
30
- } from "./chunk-C3NCF7AC.js";
30
+ } from "./chunk-PHLVIRTN.js";
31
31
  import {
32
32
  withErrorHandler
33
33
  } from "./chunk-3F4RFLPX.js";
@@ -169,7 +169,56 @@ Notes:
169
169
  // src/commands/zero/workflow/edit.ts
170
170
  init_esm_shims();
171
171
  import { readFileSync as readFileSync3 } from "fs";
172
- var editCommand = new Command().name("edit").description("Update a workflow's instruction, files, or metadata").argument("<workflowId>", "Workflow ID").option("--instruction <text>", "New instruction text").option(
172
+
173
+ // src/commands/zero/workflow/resolve-workflow-ref.ts
174
+ init_esm_shims();
175
+ var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
176
+ var WORKFLOW_NAME_RE = /^[a-z0-9][a-z0-9-]*[a-z0-9]$/;
177
+ function isWorkflowName(ref) {
178
+ return ref.length >= 2 && ref.length <= 64 && WORKFLOW_NAME_RE.test(ref);
179
+ }
180
+ async function resolveWorkflowRef(ref, options) {
181
+ if (UUID_RE.test(ref)) {
182
+ return ref;
183
+ }
184
+ if (!isWorkflowName(ref)) {
185
+ throw new Error(
186
+ `Invalid workflow ref: "${ref}". Use a workflow ID or a slug name like "tell-a-joke"`
187
+ );
188
+ }
189
+ const agentId = options.agent ?? process.env.ZERO_AGENT_ID;
190
+ if (!agentId) {
191
+ throw new Error(
192
+ "Workflow name refs require an agent scope. Pass --agent <agent-id>, set ZERO_AGENT_ID, or use a workflow ID"
193
+ );
194
+ }
195
+ if (!UUID_RE.test(agentId)) {
196
+ throw new Error(
197
+ `Invalid agent ID: "${agentId}". Pass an agent UUID for --agent or use a workflow ID`
198
+ );
199
+ }
200
+ const workflows = await listWorkflows({ agentId });
201
+ const matches = workflows.filter((workflow) => {
202
+ return workflow.name === ref;
203
+ });
204
+ if (matches.length === 0) {
205
+ throw new Error(
206
+ `Workflow not found: "${ref}" under agent "${agentId}". Check the name and agent, or use the workflow ID`
207
+ );
208
+ }
209
+ const winners = matches.filter((workflow) => {
210
+ return workflow.shadowedBy == null;
211
+ });
212
+ if (winners.length !== 1) {
213
+ throw new Error(
214
+ `Workflow name "${ref}" did not resolve to exactly one runtime winner under agent "${agentId}". Use the workflow ID`
215
+ );
216
+ }
217
+ return winners[0].id;
218
+ }
219
+
220
+ // src/commands/zero/workflow/edit.ts
221
+ var editCommand = new Command().name("edit").description("Update a workflow's instruction, files, or metadata").argument("<workflow>", "Workflow ID or name").option("--agent <id>", "Agent ID for resolving workflow names").option("--instruction <text>", "New instruction text").option(
173
222
  "--instruction-file <path>",
174
223
  "Path to a file containing the instruction"
175
224
  ).option(
@@ -179,6 +228,7 @@ var editCommand = new Command().name("edit").description("Update a workflow's in
179
228
  "after",
180
229
  `
181
230
  Examples:
231
+ zero workflow edit tell-a-joke --agent <agent-id> --instruction "New steps"
182
232
  zero workflow edit <workflow-id> --instruction "New steps"
183
233
  zero workflow edit <workflow-id> --instruction-file ./instruction.md
184
234
  zero workflow edit <workflow-id> --dir ./workflows/my-workflow/files/
@@ -189,7 +239,7 @@ Notes:
189
239
  - At least one of --instruction, --instruction-file, --dir, --display-name, or --description is required`
190
240
  ).action(
191
241
  withErrorHandler(
192
- async (workflowId, options) => {
242
+ async (workflowRef, options) => {
193
243
  if (options.instruction && options.instructionFile) {
194
244
  console.error(
195
245
  source_default.red("\u2717 Use either --instruction or --instruction-file")
@@ -208,6 +258,7 @@ Notes:
208
258
  );
209
259
  process.exit(1);
210
260
  }
261
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
211
262
  const workflow = await updateWorkflow(workflowId, {
212
263
  instruction,
213
264
  files,
@@ -233,41 +284,45 @@ Notes:
233
284
 
234
285
  // src/commands/zero/workflow/view.ts
235
286
  init_esm_shims();
236
- var viewCommand = new Command().name("view").description("View a workflow").argument("<workflowId>", "Workflow ID").addHelpText(
287
+ var viewCommand = new Command().name("view").description("View a workflow").argument("<workflow>", "Workflow ID or name").option("--agent <id>", "Agent ID for resolving workflow names").addHelpText(
237
288
  "after",
238
289
  `
239
290
  Examples:
291
+ zero workflow view tell-a-joke --agent <agent-id>
240
292
  zero workflow view <workflow-id>`
241
293
  ).action(
242
- withErrorHandler(async (workflowId) => {
243
- const workflow = await getWorkflow(workflowId);
244
- console.log(source_default.bold(workflow.name));
245
- if (workflow.displayName) console.log(source_default.dim(workflow.displayName));
246
- console.log();
247
- console.log(`ID: ${workflow.id}`);
248
- console.log(`Name: ${workflow.name}`);
249
- console.log(`Visibility: ${workflow.visibility}`);
250
- console.log(`Agent Name: ${formatWorkflowAgentName(workflow)}`);
251
- console.log(`Agent ID: ${workflow.agentId}`);
252
- if (workflow.displayName)
253
- console.log(`Display Name: ${workflow.displayName}`);
254
- if (workflow.description)
255
- console.log(`Description: ${workflow.description}`);
256
- if (workflow.files && workflow.files.length > 0) {
294
+ withErrorHandler(
295
+ async (workflowRef, options) => {
296
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
297
+ const workflow = await getWorkflow(workflowId);
298
+ console.log(source_default.bold(workflow.name));
299
+ if (workflow.displayName) console.log(source_default.dim(workflow.displayName));
257
300
  console.log();
258
- console.log(source_default.dim("\u2500\u2500 Files \u2500\u2500"));
259
- for (const f of workflow.files) {
260
- console.log(` ${f.path} (${f.size} bytes)`);
301
+ console.log(`ID: ${workflow.id}`);
302
+ console.log(`Name: ${workflow.name}`);
303
+ console.log(`Visibility: ${workflow.visibility}`);
304
+ console.log(`Agent Name: ${formatWorkflowAgentName(workflow)}`);
305
+ console.log(`Agent ID: ${workflow.agentId}`);
306
+ if (workflow.displayName)
307
+ console.log(`Display Name: ${workflow.displayName}`);
308
+ if (workflow.description)
309
+ console.log(`Description: ${workflow.description}`);
310
+ if (workflow.files && workflow.files.length > 0) {
311
+ console.log();
312
+ console.log(source_default.dim("\u2500\u2500 Files \u2500\u2500"));
313
+ for (const f of workflow.files) {
314
+ console.log(` ${f.path} (${f.size} bytes)`);
315
+ }
316
+ }
317
+ console.log();
318
+ if (workflow.instruction) {
319
+ console.log(source_default.dim("\u2500\u2500 Instruction \u2500\u2500"));
320
+ console.log(workflow.instruction);
321
+ } else {
322
+ console.log(source_default.dim("No instruction"));
261
323
  }
262
324
  }
263
- console.log();
264
- if (workflow.instruction) {
265
- console.log(source_default.dim("\u2500\u2500 Instruction \u2500\u2500"));
266
- console.log(workflow.instruction);
267
- } else {
268
- console.log(source_default.dim("No instruction"));
269
- }
270
- })
325
+ )
271
326
  );
272
327
 
273
328
  // src/commands/zero/workflow/list.ts
@@ -339,46 +394,52 @@ Examples:
339
394
 
340
395
  // src/commands/zero/workflow/delete.ts
341
396
  init_esm_shims();
342
- var deleteCommand = new Command().name("delete").alias("rm").description("Delete a workflow").argument("<workflowId>", "Workflow ID").option("-y, --yes", "Skip confirmation prompt").addHelpText(
397
+ var deleteCommand = new Command().name("delete").alias("rm").description("Delete a workflow").argument("<workflow>", "Workflow ID or name").option("--agent <id>", "Agent ID for resolving workflow names").option("-y, --yes", "Skip confirmation prompt").addHelpText(
343
398
  "after",
344
399
  `
345
400
  Examples:
401
+ zero workflow delete tell-a-joke --agent <agent-id> -y
346
402
  zero workflow delete <workflow-id>
347
403
  zero workflow delete <workflow-id> -y
348
404
 
349
405
  Notes:
350
406
  - Use -y to skip confirmation in non-interactive mode`
351
407
  ).action(
352
- withErrorHandler(async (workflowId, options) => {
353
- const workflow = await getWorkflow(workflowId);
354
- if (!options.yes) {
355
- if (!isInteractive()) {
356
- throw new Error("--yes flag is required in non-interactive mode");
357
- }
358
- const confirmed = await promptConfirm(
359
- `Delete workflow '${workflow.name}'?`,
360
- false
361
- );
362
- if (!confirmed) {
363
- console.log(source_default.dim("Cancelled"));
364
- return;
408
+ withErrorHandler(
409
+ async (workflowRef, options) => {
410
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
411
+ const workflow = await getWorkflow(workflowId);
412
+ if (!options.yes) {
413
+ if (!isInteractive()) {
414
+ throw new Error("--yes flag is required in non-interactive mode");
415
+ }
416
+ const confirmed = await promptConfirm(
417
+ `Delete workflow '${workflow.name}'?`,
418
+ false
419
+ );
420
+ if (!confirmed) {
421
+ console.log(source_default.dim("Cancelled"));
422
+ return;
423
+ }
365
424
  }
425
+ await deleteWorkflow(workflowId);
426
+ console.log(source_default.green(`\u2713 Workflow "${workflow.name}" deleted`));
366
427
  }
367
- await deleteWorkflow(workflowId);
368
- console.log(source_default.green(`\u2713 Workflow "${workflow.name}" deleted`));
369
- })
428
+ )
370
429
  );
371
430
 
372
431
  // src/commands/zero/workflow/copy.ts
373
432
  init_esm_shims();
374
- var copyCommand = new Command().name("copy").description("Copy (fork) a workflow onto another agent").argument("<workflowId>", "Workflow ID to copy").requiredOption("--to-agent <agent-id>", "Target agent ID").addHelpText(
433
+ var copyCommand = new Command().name("copy").description("Copy (fork) a workflow onto another agent").argument("<workflow>", "Workflow ID or name to copy").option("--agent <id>", "Agent ID for resolving workflow names").requiredOption("--to-agent <agent-id>", "Target agent ID").addHelpText(
375
434
  "after",
376
435
  `
377
436
  Examples:
378
- zero workflow copy <workflow-id> --to-agent <agent-id>`
437
+ zero workflow copy tell-a-joke --agent <source-agent-id> --to-agent <target-agent-id>
438
+ zero workflow copy <workflow-id> --to-agent <target-agent-id>`
379
439
  ).action(
380
440
  withErrorHandler(
381
- async (workflowId, options) => {
441
+ async (workflowRef, options) => {
442
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
382
443
  const workflow = await copyWorkflow(workflowId, options.toAgent);
383
444
  console.log(source_default.green(`\u2713 Workflow "${workflow.name}" copied`));
384
445
  console.log(` ID: ${workflow.id}`);
@@ -826,7 +887,6 @@ function buildGmailLabelAppliedEventConfig(options) {
826
887
  }
827
888
 
828
889
  // src/commands/zero/workflow/trigger/index.ts
829
- var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
830
890
  var SCHEDULE_KINDS = ["cron", "once", "loop"];
831
891
  var EVENT_KINDS = [
832
892
  "gmail-new-message",
@@ -1297,26 +1357,6 @@ function buildUpdate(options, existing) {
1297
1357
  }
1298
1358
  return buildScheduleUpdate(options);
1299
1359
  }
1300
- async function resolveWorkflowId(ref, options) {
1301
- if (UUID_RE.test(ref)) {
1302
- return ref;
1303
- }
1304
- const agentId = options.agent ?? process.env.ZERO_AGENT_ID;
1305
- const workflows = await listWorkflows(agentId ? { agentId } : {});
1306
- const matches = workflows.filter((workflow) => {
1307
- return workflow.name === ref;
1308
- });
1309
- if (matches.length === 0) {
1310
- const hint = agentId ? ` under agent "${agentId}"` : ". Provide --agent <agent-id> or use the workflow ID";
1311
- throw new Error(`Workflow not found: "${ref}"${hint}`);
1312
- }
1313
- if (matches.length > 1) {
1314
- throw new Error(
1315
- `Ambiguous workflow name: "${ref}". Provide --agent <agent-id> or use the workflow ID`
1316
- );
1317
- }
1318
- return matches[0].id;
1319
- }
1320
1360
  var addCommand = addGithubTriggerOptions(
1321
1361
  addGmailTriggerOptions(
1322
1362
  new Command().name("add").description("Add a trigger to a workflow").argument("<workflow>", "Workflow ID or name").argument("<kind>", `Trigger type: ${TRIGGER_KINDS.join(" | ")}`).option("--expr <expression>", 'Cron expression for kind "cron"').option("--at <iso-time>", 'Fire time for kind "once"').option(
@@ -1334,20 +1374,20 @@ var addCommand = addGithubTriggerOptions(
1334
1374
  "after",
1335
1375
  `
1336
1376
  Examples:
1337
- zero workflow trigger add tell-a-joke cron --expr "0 9 * * *" -z Asia/Shanghai
1338
- zero workflow trigger add tell-a-joke once --at "2026-06-10T09:00" -z Asia/Shanghai
1339
- zero workflow trigger add tell-a-joke loop --every 15m
1340
- zero workflow trigger add triage gmail-new-message --from-contains "@example.com"
1341
- zero workflow trigger add triage gmail-new-message --config ./gmail-trigger.json
1342
- zero workflow trigger add triage gmail-label-applied --label "Support"
1343
- zero workflow trigger add triage github-label-applied --label "triage" --subject both --actor me
1344
- zero workflow trigger add triage google-calendar-event-created
1345
- zero workflow trigger add triage google-calendar-event-updated
1346
- zero workflow trigger add triage google-calendar-event-cancelled
1347
- zero workflow trigger add triage webhook
1377
+ zero workflow trigger add tell-a-joke --agent <agent-id> cron --expr "0 9 * * *" -z Asia/Shanghai
1378
+ zero workflow trigger add tell-a-joke --agent <agent-id> once --at "2026-06-10T09:00" -z Asia/Shanghai
1379
+ zero workflow trigger add tell-a-joke --agent <agent-id> loop --every 15m
1380
+ zero workflow trigger add triage --agent <agent-id> gmail-new-message --from-contains "@example.com"
1381
+ zero workflow trigger add triage --agent <agent-id> gmail-new-message --config ./gmail-trigger.json
1382
+ zero workflow trigger add triage --agent <agent-id> gmail-label-applied --label "Support"
1383
+ zero workflow trigger add triage --agent <agent-id> github-label-applied --label "triage" --subject both --actor me
1384
+ zero workflow trigger add triage --agent <agent-id> google-calendar-event-created
1385
+ zero workflow trigger add triage --agent <agent-id> google-calendar-event-updated
1386
+ zero workflow trigger add triage --agent <agent-id> google-calendar-event-cancelled
1387
+ zero workflow trigger add triage --agent <agent-id> webhook
1348
1388
 
1349
1389
  Notes:
1350
- - Workflow names resolve under --agent, then ZERO_AGENT_ID, then all visible workflows
1390
+ - Workflow names resolve under --agent, then ZERO_AGENT_ID
1351
1391
  - Gmail triggers match all inbound messages when no text match rules are provided
1352
1392
  - GitHub label triggers require the GitHub App installation in the workspace
1353
1393
  - Webhook triggers print the signing secret only once after creation
@@ -1358,7 +1398,7 @@ Notes:
1358
1398
  if (options.timezone && kind !== "cron" && kind !== "once" && kind !== "gmail-new-message") {
1359
1399
  throw new Error("--timezone only applies to cron and once triggers");
1360
1400
  }
1361
- const workflowId = await resolveWorkflowId(workflowRef, options);
1401
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
1362
1402
  const body = buildCreateRequest(kind, options);
1363
1403
  const trigger = await createWorkflowTrigger(workflowId, body);
1364
1404
  console.log(
@@ -1400,12 +1440,12 @@ var listCommand2 = new Command().name("list").alias("ls").description("List a wo
1400
1440
  "after",
1401
1441
  `
1402
1442
  Examples:
1403
- zero workflow trigger list tell-a-joke
1404
- zero workflow trigger list tell-a-joke --agent <agent-id>`
1443
+ zero workflow trigger list tell-a-joke --agent <agent-id>
1444
+ zero workflow trigger list <workflow-id>`
1405
1445
  ).action(
1406
1446
  withErrorHandler(
1407
1447
  async (workflowRef, options) => {
1408
- const workflowId = await resolveWorkflowId(workflowRef, options);
1448
+ const workflowId = await resolveWorkflowRef(workflowRef, options);
1409
1449
  const triggers = await listWorkflowTriggers(workflowId);
1410
1450
  if (triggers.length === 0) {
1411
1451
  console.log(source_default.dim("No triggers"));
@@ -1448,10 +1488,10 @@ var triggerCommand = new Command().name("trigger").description("Manage a workflo
1448
1488
  "after",
1449
1489
  `
1450
1490
  Examples:
1451
- Add a trigger: zero workflow trigger add <workflow> cron --expr "0 9 * * *"
1452
- Add a webhook: zero workflow trigger add <workflow> webhook
1491
+ Add a trigger: zero workflow trigger add <workflow-id> cron --expr "0 9 * * *"
1492
+ Add a webhook: zero workflow trigger add <workflow-id> webhook
1453
1493
  Update a schedule: zero workflow trigger update <trigger-id> --every 10m
1454
- List triggers: zero workflow trigger list <workflow>
1494
+ List triggers: zero workflow trigger list <workflow-id>
1455
1495
  Inspect a trigger: zero workflow trigger show <trigger-id>
1456
1496
  Pause one trigger: zero workflow trigger disable <trigger-id>`
1457
1497
  );
@@ -1463,13 +1503,13 @@ var zeroWorkflowCommand = new Command("workflow").description("Manage workflows"
1463
1503
  Examples:
1464
1504
  Create under an agent: zero workflow create my-workflow --agent <agent-id> --instruction "Do things"
1465
1505
  List workflows: zero workflow list
1466
- View workflow content: zero workflow view <workflow-id>
1467
- Update workflow content: zero workflow edit <workflow-id> --instruction "New steps"
1468
- Copy onto another agent: zero workflow copy <workflow-id> --to-agent <agent-id>
1506
+ View workflow content: zero workflow view <workflow> --agent <agent-id>
1507
+ Update workflow content: zero workflow edit <workflow> --agent <agent-id> --instruction "New steps"
1508
+ Copy onto another agent: zero workflow copy <workflow> --agent <source-agent-id> --to-agent <target-agent-id>
1469
1509
  Manage triggers: zero workflow trigger --help
1470
- Delete a workflow: zero workflow delete <workflow-id> -y`
1510
+ Delete a workflow: zero workflow delete <workflow> --agent <agent-id> -y`
1471
1511
  );
1472
1512
  export {
1473
1513
  zeroWorkflowCommand
1474
1514
  };
1475
- //# sourceMappingURL=workflow-KFXYP54E.js.map
1515
+ //# sourceMappingURL=workflow-F2YOTCAJ.js.map