@vm0/cli 9.59.6 → 9.60.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.
Files changed (2) hide show
  1. package/index.js +364 -598
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -45,7 +45,7 @@ if (DSN) {
45
45
  Sentry.init({
46
46
  dsn: DSN,
47
47
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
48
- release: "9.59.6",
48
+ release: "9.60.1",
49
49
  sendDefaultPii: false,
50
50
  tracesSampleRate: 0,
51
51
  shutdownTimeout: 500,
@@ -64,7 +64,7 @@ if (DSN) {
64
64
  }
65
65
  });
66
66
  Sentry.setContext("cli", {
67
- version: "9.59.6",
67
+ version: "9.60.1",
68
68
  command: process.argv.slice(2).join(" ")
69
69
  });
70
70
  Sentry.setContext("runtime", {
@@ -83,7 +83,7 @@ process.stdout.on("error", handleEpipe);
83
83
  process.stderr.on("error", handleEpipe);
84
84
 
85
85
  // src/index.ts
86
- import { Command as Command91 } from "commander";
86
+ import { Command as Command86 } from "commander";
87
87
 
88
88
  // src/lib/network/proxy.ts
89
89
  import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
@@ -673,7 +673,7 @@ function getConfigPath() {
673
673
  return join2(homedir2(), ".vm0", "config.json");
674
674
  }
675
675
  var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
676
- console.log(chalk4.bold(`VM0 CLI v${"9.59.6"}`));
676
+ console.log(chalk4.bold(`VM0 CLI v${"9.60.1"}`));
677
677
  console.log();
678
678
  const config = await loadConfig();
679
679
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -1044,8 +1044,7 @@ var composeListItemSchema = z3.object({
1044
1044
  displayName: z3.string().nullable().optional(),
1045
1045
  description: z3.string().nullable().optional(),
1046
1046
  headVersionId: z3.string().nullable(),
1047
- updatedAt: z3.string(),
1048
- isOwner: z3.boolean()
1047
+ updatedAt: z3.string()
1049
1048
  });
1050
1049
  var composesListContract = c.router({
1051
1050
  /**
@@ -3198,7 +3197,10 @@ var deployScheduleRequestSchema = z16.object({
3198
3197
  // Resolved agent compose ID (CLI resolves org/name:version → composeId)
3199
3198
  composeId: z16.string().uuid("Invalid compose ID"),
3200
3199
  // Enable schedule immediately upon creation
3201
- enabled: z16.boolean().optional()
3200
+ enabled: z16.boolean().optional(),
3201
+ // Per-schedule notification control (AND'd with user global preferences)
3202
+ notifyEmail: z16.boolean().optional(),
3203
+ notifySlack: z16.boolean().optional()
3202
3204
  }).refine(
3203
3205
  (data) => {
3204
3206
  const triggers = [
@@ -3232,6 +3234,8 @@ var scheduleResponseSchema = z16.object({
3232
3234
  artifactVersion: z16.string().nullable(),
3233
3235
  volumeVersions: z16.record(z16.string(), z16.string()).nullable(),
3234
3236
  enabled: z16.boolean(),
3237
+ notifyEmail: z16.boolean(),
3238
+ notifySlack: z16.boolean(),
3235
3239
  nextRunAt: z16.string().nullable(),
3236
3240
  lastRunAt: z16.string().nullable(),
3237
3241
  retryStartedAt: z16.string().nullable(),
@@ -8001,15 +8005,6 @@ async function httpPost(path18, body) {
8001
8005
  body: JSON.stringify(body)
8002
8006
  });
8003
8007
  }
8004
- async function httpDelete(path18) {
8005
- const baseUrl = await getBaseUrl();
8006
- const headers = await getRawHeaders();
8007
- const orgPath = await appendOrgParam(path18);
8008
- return fetch(`${baseUrl}${orgPath}`, {
8009
- method: "DELETE",
8010
- headers
8011
- });
8012
- }
8013
8008
 
8014
8009
  // src/lib/api/domains/composes.ts
8015
8010
  import { initClient } from "@ts-rest/core";
@@ -9948,7 +9943,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9948
9943
  options.autoUpdate = false;
9949
9944
  }
9950
9945
  if (options.autoUpdate !== false) {
9951
- await startSilentUpgrade("9.59.6");
9946
+ await startSilentUpgrade("9.60.1");
9952
9947
  }
9953
9948
  try {
9954
9949
  let result;
@@ -11115,30 +11110,13 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
11115
11110
  ).option(
11116
11111
  "--model-provider <type>",
11117
11112
  "Override model provider (e.g., anthropic-api-key)"
11118
- ).option("--verbose", "Show full tool inputs and outputs").option(
11119
- "--experimental-shared-agent",
11120
- "Allow running agents shared by other users (required when running org/agent format)"
11121
- ).option("--check-env", "Validate secrets and vars before running").addOption(new Option2("--debug-no-mock-claude").hideHelp()).addOption(new Option2("--no-auto-update").hideHelp()).action(
11113
+ ).option("--verbose", "Show full tool inputs and outputs").option("--check-env", "Validate secrets and vars before running").addOption(new Option2("--debug-no-mock-claude").hideHelp()).addOption(new Option2("--no-auto-update").hideHelp()).action(
11122
11114
  withErrorHandler(
11123
11115
  async (identifier, prompt, options) => {
11124
11116
  if (options.autoUpdate !== false) {
11125
- await startSilentUpgrade("9.59.6");
11117
+ await startSilentUpgrade("9.60.1");
11126
11118
  }
11127
11119
  const { org, name, version } = parseIdentifier(identifier);
11128
- if (org && !options.experimentalSharedAgent) {
11129
- const defaultOrg = await getOrg();
11130
- const isOwnOrg = defaultOrg.slug === org;
11131
- if (!isOwnOrg) {
11132
- throw new Error(
11133
- "Running shared agents requires --experimental-shared-agent flag",
11134
- {
11135
- cause: new Error(
11136
- `Use: vm0 run ${identifier} --experimental-shared-agent "your prompt"`
11137
- )
11138
- }
11139
- );
11140
- }
11141
- }
11142
11120
  let composeId;
11143
11121
  let composeContent;
11144
11122
  if (isUUID(name)) {
@@ -12809,7 +12787,7 @@ var cookAction = new Command34().name("cook").description("Quick start: prepare,
12809
12787
  withErrorHandler(
12810
12788
  async (prompt, options) => {
12811
12789
  if (options.autoUpdate !== false) {
12812
- const shouldExit = await checkAndUpgrade("9.59.6", prompt);
12790
+ const shouldExit = await checkAndUpgrade("9.60.1", prompt);
12813
12791
  if (shouldExit) {
12814
12792
  process.exit(0);
12815
12793
  }
@@ -14255,7 +14233,7 @@ var leaveCommand = new Command47().name("leave").description("Leave the current
14255
14233
  var orgCommand = new Command48().name("org").description("Manage your organization (namespace for agents)").addCommand(statusCommand5).addCommand(setCommand).addCommand(listCommand5).addCommand(useCommand).addCommand(membersCommand).addCommand(inviteCommand).addCommand(removeCommand).addCommand(leaveCommand);
14256
14234
 
14257
14235
  // src/commands/agent/index.ts
14258
- import { Command as Command58 } from "commander";
14236
+ import { Command as Command53 } from "commander";
14259
14237
 
14260
14238
  // src/commands/agent/clone.ts
14261
14239
  import { Command as Command49 } from "commander";
@@ -14663,260 +14641,12 @@ var statusCommand6 = new Command52().name("status").description("Show status of
14663
14641
  )
14664
14642
  );
14665
14643
 
14666
- // src/commands/agent/public.ts
14667
- import { Command as Command53 } from "commander";
14668
- import chalk49 from "chalk";
14669
- var publicCommand = new Command53().name("public").description("Make an agent public (accessible to all authenticated users)").argument("<name>", "Agent name").option(
14670
- "--experimental-shared-agent",
14671
- "Enable experimental agent sharing feature"
14672
- ).action(
14673
- withErrorHandler(
14674
- async (name, options) => {
14675
- if (!options.experimentalSharedAgent) {
14676
- throw new Error(
14677
- "This command requires --experimental-shared-agent flag",
14678
- {
14679
- cause: new Error(
14680
- `Use: vm0 agent public ${name} --experimental-shared-agent`
14681
- )
14682
- }
14683
- );
14684
- }
14685
- const compose = await getComposeByName(name);
14686
- if (!compose) {
14687
- throw new Error(`Agent not found: ${name}`);
14688
- }
14689
- const org = await getOrg();
14690
- const response = await httpPost(
14691
- `/api/agent/composes/${compose.id}/permissions`,
14692
- { granteeType: "public" }
14693
- );
14694
- if (!response.ok) {
14695
- const error = await response.json();
14696
- if (response.status === 409) {
14697
- console.log(chalk49.yellow(`Agent "${name}" is already public`));
14698
- return;
14699
- }
14700
- throw new Error(
14701
- error.error?.message || "Failed to make agent public"
14702
- );
14703
- }
14704
- const fullName = `${org.slug}/${name}`;
14705
- console.log(chalk49.green(`\u2713 Agent "${name}" is now public`));
14706
- console.log();
14707
- console.log("Others can now run your agent with:");
14708
- console.log(
14709
- chalk49.cyan(
14710
- ` vm0 run ${fullName} --experimental-shared-agent "your prompt"`
14711
- )
14712
- );
14713
- }
14714
- )
14715
- );
14716
-
14717
- // src/commands/agent/private.ts
14718
- import { Command as Command54 } from "commander";
14719
- import chalk50 from "chalk";
14720
- var privateCommand = new Command54().name("private").description("Make an agent private (remove public access)").argument("<name>", "Agent name").option(
14721
- "--experimental-shared-agent",
14722
- "Enable experimental agent sharing feature"
14723
- ).action(
14724
- withErrorHandler(
14725
- async (name, options) => {
14726
- if (!options.experimentalSharedAgent) {
14727
- throw new Error(
14728
- "This command requires --experimental-shared-agent flag",
14729
- {
14730
- cause: new Error(
14731
- `Use: vm0 agent private ${name} --experimental-shared-agent`
14732
- )
14733
- }
14734
- );
14735
- }
14736
- const compose = await getComposeByName(name);
14737
- if (!compose) {
14738
- throw new Error(`Agent not found: ${name}`);
14739
- }
14740
- const response = await httpDelete(
14741
- `/api/agent/composes/${compose.id}/permissions?type=public`
14742
- );
14743
- if (!response.ok) {
14744
- const error = await response.json();
14745
- if (response.status === 404) {
14746
- console.log(chalk50.yellow(`Agent "${name}" is already private`));
14747
- return;
14748
- }
14749
- throw new Error(
14750
- error.error?.message || "Failed to make agent private"
14751
- );
14752
- }
14753
- console.log(chalk50.green(`\u2713 Agent "${name}" is now private`));
14754
- }
14755
- )
14756
- );
14757
-
14758
- // src/commands/agent/share.ts
14759
- import { Command as Command55 } from "commander";
14760
- import chalk51 from "chalk";
14761
- var shareCommand = new Command55().name("share").description("Share an agent with a user by email").argument("<name>", "Agent name").requiredOption("--email <email>", "Email address to share with").option(
14762
- "--experimental-shared-agent",
14763
- "Enable experimental agent sharing feature"
14764
- ).action(
14765
- withErrorHandler(
14766
- async (name, options) => {
14767
- if (!options.experimentalSharedAgent) {
14768
- throw new Error(
14769
- "This command requires --experimental-shared-agent flag",
14770
- {
14771
- cause: new Error(
14772
- `Use: vm0 agent share ${name} --email ${options.email} --experimental-shared-agent`
14773
- )
14774
- }
14775
- );
14776
- }
14777
- const compose = await getComposeByName(name);
14778
- if (!compose) {
14779
- throw new Error(`Agent not found: ${name}`);
14780
- }
14781
- const org = await getOrg();
14782
- const response = await httpPost(
14783
- `/api/agent/composes/${compose.id}/permissions`,
14784
- { granteeType: "email", granteeEmail: options.email }
14785
- );
14786
- if (!response.ok) {
14787
- const error = await response.json();
14788
- if (response.status === 409) {
14789
- console.log(
14790
- chalk51.yellow(
14791
- `Agent "${name}" is already shared with ${options.email}`
14792
- )
14793
- );
14794
- return;
14795
- }
14796
- throw new Error(error.error?.message || "Failed to share agent");
14797
- }
14798
- const fullName = `${org.slug}/${name}`;
14799
- console.log(
14800
- chalk51.green(`\u2713 Agent "${name}" shared with ${options.email}`)
14801
- );
14802
- console.log();
14803
- console.log("They can now run your agent with:");
14804
- console.log(
14805
- chalk51.cyan(
14806
- ` vm0 run ${fullName} --experimental-shared-agent "your prompt"`
14807
- )
14808
- );
14809
- }
14810
- )
14811
- );
14812
-
14813
- // src/commands/agent/unshare.ts
14814
- import { Command as Command56 } from "commander";
14815
- import chalk52 from "chalk";
14816
- var unshareCommand = new Command56().name("unshare").description("Remove sharing from a user").argument("<name>", "Agent name").requiredOption("--email <email>", "Email address to unshare").option(
14817
- "--experimental-shared-agent",
14818
- "Enable experimental agent sharing feature"
14819
- ).action(
14820
- withErrorHandler(
14821
- async (name, options) => {
14822
- if (!options.experimentalSharedAgent) {
14823
- throw new Error(
14824
- "This command requires --experimental-shared-agent flag",
14825
- {
14826
- cause: new Error(
14827
- `Use: vm0 agent unshare ${name} --email ${options.email} --experimental-shared-agent`
14828
- )
14829
- }
14830
- );
14831
- }
14832
- const compose = await getComposeByName(name);
14833
- if (!compose) {
14834
- throw new Error(`Agent not found: ${name}`);
14835
- }
14836
- const response = await httpDelete(
14837
- `/api/agent/composes/${compose.id}/permissions?type=email&email=${encodeURIComponent(options.email)}`
14838
- );
14839
- if (!response.ok) {
14840
- const error = await response.json();
14841
- if (response.status === 404) {
14842
- console.log(
14843
- chalk52.yellow(
14844
- `Agent "${name}" is not shared with ${options.email}`
14845
- )
14846
- );
14847
- return;
14848
- }
14849
- throw new Error(error.error?.message || "Failed to unshare agent");
14850
- }
14851
- console.log(
14852
- chalk52.green(`\u2713 Removed sharing of "${name}" from ${options.email}`)
14853
- );
14854
- }
14855
- )
14856
- );
14857
-
14858
- // src/commands/agent/permission.ts
14859
- import { Command as Command57 } from "commander";
14860
- import chalk53 from "chalk";
14861
- var permissionCommand = new Command57().name("permission").description("List all permissions for an agent").argument("<name>", "Agent name").option(
14862
- "--experimental-shared-agent",
14863
- "Enable experimental agent sharing feature"
14864
- ).action(
14865
- withErrorHandler(
14866
- async (name, options) => {
14867
- if (!options.experimentalSharedAgent) {
14868
- throw new Error(
14869
- "This command requires --experimental-shared-agent flag",
14870
- {
14871
- cause: new Error(
14872
- `Use: vm0 agent permission ${name} --experimental-shared-agent`
14873
- )
14874
- }
14875
- );
14876
- }
14877
- const compose = await getComposeByName(name);
14878
- if (!compose) {
14879
- throw new Error(`Agent not found: ${name}`);
14880
- }
14881
- const response = await httpGet(
14882
- `/api/agent/composes/${compose.id}/permissions`
14883
- );
14884
- if (!response.ok) {
14885
- const error = await response.json();
14886
- throw new Error(error.error?.message || "Failed to list permissions");
14887
- }
14888
- const data = await response.json();
14889
- if (data.permissions.length === 0) {
14890
- console.log(chalk53.dim("No permissions set (private agent)"));
14891
- return;
14892
- }
14893
- console.log(
14894
- chalk53.dim(
14895
- "TYPE EMAIL PERMISSION GRANTED"
14896
- )
14897
- );
14898
- console.log(
14899
- chalk53.dim(
14900
- "------- ----------------------------- ---------- ----------"
14901
- )
14902
- );
14903
- for (const p of data.permissions) {
14904
- const type2 = p.granteeType.padEnd(7);
14905
- const email = (p.granteeEmail ?? "-").padEnd(29);
14906
- const permission = p.permission.padEnd(10);
14907
- const granted = formatRelativeTime(p.createdAt);
14908
- console.log(`${type2} ${email} ${permission} ${granted}`);
14909
- }
14910
- }
14911
- )
14912
- );
14913
-
14914
14644
  // src/commands/agent/index.ts
14915
- var agentCommand = new Command58().name("agent").description("Manage agent composes").addCommand(cloneCommand4).addCommand(deleteCommand).addCommand(listCommand6).addCommand(statusCommand6).addCommand(publicCommand).addCommand(privateCommand).addCommand(shareCommand).addCommand(unshareCommand).addCommand(permissionCommand);
14645
+ var agentCommand = new Command53().name("agent").description("Manage agent composes").addCommand(cloneCommand4).addCommand(deleteCommand).addCommand(listCommand6).addCommand(statusCommand6);
14916
14646
 
14917
14647
  // src/commands/init/index.ts
14918
- import { Command as Command59 } from "commander";
14919
- import chalk54 from "chalk";
14648
+ import { Command as Command54 } from "commander";
14649
+ import chalk49 from "chalk";
14920
14650
  import path17 from "path";
14921
14651
  import { existsSync as existsSync11 } from "fs";
14922
14652
  import { writeFile as writeFile7 } from "fs/promises";
@@ -14954,7 +14684,7 @@ function checkExistingFiles() {
14954
14684
  if (existsSync11(AGENTS_MD_FILE)) existingFiles.push(AGENTS_MD_FILE);
14955
14685
  return existingFiles;
14956
14686
  }
14957
- var initCommand4 = new Command59().name("init").description("Initialize a new VM0 project in the current directory").option("-f, --force", "Overwrite existing files").option("-n, --name <name>", "Agent name (required in non-interactive mode)").action(
14687
+ var initCommand4 = new Command54().name("init").description("Initialize a new VM0 project in the current directory").option("-f, --force", "Overwrite existing files").option("-n, --name <name>", "Agent name (required in non-interactive mode)").action(
14958
14688
  withErrorHandler(async (options) => {
14959
14689
  const existingFiles = checkExistingFiles();
14960
14690
  if (existingFiles.length > 0 && !options.force) {
@@ -14983,7 +14713,7 @@ var initCommand4 = new Command59().name("init").description("Initialize a new VM
14983
14713
  }
14984
14714
  );
14985
14715
  if (name === void 0) {
14986
- console.log(chalk54.dim("Cancelled"));
14716
+ console.log(chalk49.dim("Cancelled"));
14987
14717
  return;
14988
14718
  }
14989
14719
  agentName = name;
@@ -14997,33 +14727,33 @@ var initCommand4 = new Command59().name("init").description("Initialize a new VM
14997
14727
  }
14998
14728
  await writeFile7(VM0_YAML_FILE, generateVm0Yaml(agentName));
14999
14729
  const vm0Status = existingFiles.includes(VM0_YAML_FILE) ? " (overwritten)" : "";
15000
- console.log(chalk54.green(`\u2713 Created ${VM0_YAML_FILE}${vm0Status}`));
14730
+ console.log(chalk49.green(`\u2713 Created ${VM0_YAML_FILE}${vm0Status}`));
15001
14731
  await writeFile7(AGENTS_MD_FILE, generateAgentsMd());
15002
14732
  const agentsStatus = existingFiles.includes(AGENTS_MD_FILE) ? " (overwritten)" : "";
15003
- console.log(chalk54.green(`\u2713 Created ${AGENTS_MD_FILE}${agentsStatus}`));
14733
+ console.log(chalk49.green(`\u2713 Created ${AGENTS_MD_FILE}${agentsStatus}`));
15004
14734
  console.log();
15005
14735
  console.log("Next steps:");
15006
14736
  console.log(
15007
- ` 1. Set up model provider (one-time): ${chalk54.cyan("vm0 model-provider setup")}`
14737
+ ` 1. Set up model provider (one-time): ${chalk49.cyan("vm0 model-provider setup")}`
15008
14738
  );
15009
14739
  console.log(
15010
- ` 2. Edit ${chalk54.cyan("AGENTS.md")} to customize your agent's workflow`
14740
+ ` 2. Edit ${chalk49.cyan("AGENTS.md")} to customize your agent's workflow`
15011
14741
  );
15012
14742
  console.log(
15013
- ` Or install Claude plugin: ${chalk54.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
14743
+ ` Or install Claude plugin: ${chalk49.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
15014
14744
  );
15015
14745
  console.log(
15016
- ` 3. Run your agent: ${chalk54.cyan(`vm0 cook "let's start working"`)}`
14746
+ ` 3. Run your agent: ${chalk49.cyan(`vm0 cook "let's start working"`)}`
15017
14747
  );
15018
14748
  })
15019
14749
  );
15020
14750
 
15021
14751
  // src/commands/schedule/index.ts
15022
- import { Command as Command66 } from "commander";
14752
+ import { Command as Command61 } from "commander";
15023
14753
 
15024
14754
  // src/commands/schedule/setup.ts
15025
- import { Command as Command60 } from "commander";
15026
- import chalk55 from "chalk";
14755
+ import { Command as Command55 } from "commander";
14756
+ import chalk50 from "chalk";
15027
14757
 
15028
14758
  // src/lib/domain/schedule-utils.ts
15029
14759
  import { parse as parseYaml5 } from "yaml";
@@ -15394,6 +15124,29 @@ async function gatherPromptText(optionPrompt, existingPrompt) {
15394
15124
  existingPrompt || "let's start working."
15395
15125
  );
15396
15126
  }
15127
+ async function gatherNotificationPreferences(optionNotifyEmail, optionNotifySlack, existingSchedule) {
15128
+ if (optionNotifyEmail !== void 0 && optionNotifySlack !== void 0) {
15129
+ return {
15130
+ notifyEmail: optionNotifyEmail,
15131
+ notifySlack: optionNotifySlack
15132
+ };
15133
+ }
15134
+ if (!isInteractive()) {
15135
+ return {
15136
+ notifyEmail: optionNotifyEmail,
15137
+ notifySlack: optionNotifySlack
15138
+ };
15139
+ }
15140
+ const notifyEmail = optionNotifyEmail ?? await promptConfirm(
15141
+ "Enable email notifications?",
15142
+ existingSchedule?.notifyEmail ?? true
15143
+ );
15144
+ const notifySlack = optionNotifySlack ?? await promptConfirm(
15145
+ "Enable Slack notifications?",
15146
+ existingSchedule?.notifySlack ?? true
15147
+ );
15148
+ return { notifyEmail, notifySlack };
15149
+ }
15397
15150
  async function resolveAgent(agentName, scheduleName) {
15398
15151
  const compose = await getComposeByName(agentName);
15399
15152
  if (!compose) {
@@ -15490,7 +15243,7 @@ async function buildAndDeploy(params) {
15490
15243
  }
15491
15244
  console.log(
15492
15245
  `
15493
- Deploying schedule for agent ${chalk55.cyan(params.agentName)}...`
15246
+ Deploying schedule for agent ${chalk50.cyan(params.agentName)}...`
15494
15247
  );
15495
15248
  const deployResult = await deploySchedule({
15496
15249
  name: params.scheduleName,
@@ -15500,69 +15253,75 @@ Deploying schedule for agent ${chalk55.cyan(params.agentName)}...`
15500
15253
  intervalSeconds: params.intervalSeconds,
15501
15254
  timezone: params.timezone,
15502
15255
  prompt: params.prompt,
15503
- artifactName: params.artifactName
15256
+ artifactName: params.artifactName,
15257
+ ...params.notifyEmail !== void 0 && {
15258
+ notifyEmail: params.notifyEmail
15259
+ },
15260
+ ...params.notifySlack !== void 0 && {
15261
+ notifySlack: params.notifySlack
15262
+ }
15504
15263
  });
15505
15264
  return deployResult;
15506
15265
  }
15507
15266
  function displayDeployResult(agentName, deployResult) {
15508
15267
  if (deployResult.created) {
15509
15268
  console.log(
15510
- chalk55.green(`\u2713 Created schedule for agent ${chalk55.cyan(agentName)}`)
15269
+ chalk50.green(`\u2713 Created schedule for agent ${chalk50.cyan(agentName)}`)
15511
15270
  );
15512
15271
  } else {
15513
15272
  console.log(
15514
- chalk55.green(`\u2713 Updated schedule for agent ${chalk55.cyan(agentName)}`)
15273
+ chalk50.green(`\u2713 Updated schedule for agent ${chalk50.cyan(agentName)}`)
15515
15274
  );
15516
15275
  }
15517
- console.log(chalk55.dim(` Timezone: ${deployResult.schedule.timezone}`));
15276
+ console.log(chalk50.dim(` Timezone: ${deployResult.schedule.timezone}`));
15518
15277
  if (deployResult.schedule.triggerType === "loop" && deployResult.schedule.intervalSeconds != null) {
15519
15278
  console.log(
15520
- chalk55.dim(
15279
+ chalk50.dim(
15521
15280
  ` Mode: Loop (interval ${deployResult.schedule.intervalSeconds}s)`
15522
15281
  )
15523
15282
  );
15524
15283
  } else if (deployResult.schedule.cronExpression) {
15525
- console.log(chalk55.dim(` Cron: ${deployResult.schedule.cronExpression}`));
15284
+ console.log(chalk50.dim(` Cron: ${deployResult.schedule.cronExpression}`));
15526
15285
  if (deployResult.schedule.nextRunAt) {
15527
15286
  const nextRun = formatInTimezone(
15528
15287
  deployResult.schedule.nextRunAt,
15529
15288
  deployResult.schedule.timezone
15530
15289
  );
15531
- console.log(chalk55.dim(` Next run: ${nextRun}`));
15290
+ console.log(chalk50.dim(` Next run: ${nextRun}`));
15532
15291
  }
15533
15292
  } else if (deployResult.schedule.atTime) {
15534
15293
  const atTimeFormatted = formatInTimezone(
15535
15294
  deployResult.schedule.atTime,
15536
15295
  deployResult.schedule.timezone
15537
15296
  );
15538
- console.log(chalk55.dim(` At: ${atTimeFormatted}`));
15297
+ console.log(chalk50.dim(` At: ${atTimeFormatted}`));
15539
15298
  }
15540
15299
  }
15541
15300
  async function tryEnableSchedule(scheduleName, composeId, agentName) {
15542
15301
  try {
15543
15302
  await enableSchedule({ name: scheduleName, composeId });
15544
15303
  console.log(
15545
- chalk55.green(`\u2713 Enabled schedule for agent ${chalk55.cyan(agentName)}`)
15304
+ chalk50.green(`\u2713 Enabled schedule for agent ${chalk50.cyan(agentName)}`)
15546
15305
  );
15547
15306
  } catch (error) {
15548
- console.error(chalk55.yellow("\u26A0 Failed to enable schedule"));
15307
+ console.error(chalk50.yellow("\u26A0 Failed to enable schedule"));
15549
15308
  if (error instanceof ApiRequestError) {
15550
15309
  if (error.code === "SCHEDULE_PAST") {
15551
- console.error(chalk55.dim(" Scheduled time has already passed"));
15310
+ console.error(chalk50.dim(" Scheduled time has already passed"));
15552
15311
  } else {
15553
- console.error(chalk55.dim(` ${error.message}`));
15312
+ console.error(chalk50.dim(` ${error.message}`));
15554
15313
  }
15555
15314
  } else if (error instanceof Error) {
15556
- console.error(chalk55.dim(` ${error.message}`));
15315
+ console.error(chalk50.dim(` ${error.message}`));
15557
15316
  }
15558
15317
  console.log(
15559
- ` To enable manually: ${chalk55.cyan(`vm0 schedule enable ${agentName}`)}`
15318
+ ` To enable manually: ${chalk50.cyan(`vm0 schedule enable ${agentName}`)}`
15560
15319
  );
15561
15320
  }
15562
15321
  }
15563
15322
  function showEnableHint(agentName) {
15564
15323
  console.log();
15565
- console.log(` To enable: ${chalk55.cyan(`vm0 schedule enable ${agentName}`)}`);
15324
+ console.log(` To enable: ${chalk50.cyan(`vm0 schedule enable ${agentName}`)}`);
15566
15325
  }
15567
15326
  async function handleScheduleEnabling(params) {
15568
15327
  const { scheduleName, composeId, agentName, enableFlag, shouldPromptEnable } = params;
@@ -15583,7 +15342,7 @@ async function handleScheduleEnabling(params) {
15583
15342
  showEnableHint(agentName);
15584
15343
  }
15585
15344
  }
15586
- var setupCommand = new Command60().name("setup").description("Create or edit a schedule for an agent").argument("<agent-name>", "Agent name to configure schedule for").option("-n, --name <schedule-name>", 'Schedule name (default: "default")').option("-f, --frequency <type>", "Frequency: daily|weekly|monthly|once|loop").option("-t, --time <HH:MM>", "Time to run (24-hour format)").option("-d, --day <day>", "Day of week (mon-sun) or day of month (1-31)").option("-i, --interval <seconds>", "Interval in seconds for loop mode").option("-z, --timezone <tz>", "IANA timezone").option("-p, --prompt <text>", "Prompt to run").option("--artifact-name <name>", "Artifact name", "artifact").option("-e, --enable", "Enable schedule immediately after creation").action(
15345
+ var setupCommand = new Command55().name("setup").description("Create or edit a schedule for an agent").argument("<agent-name>", "Agent name to configure schedule for").option("-n, --name <schedule-name>", 'Schedule name (default: "default")').option("-f, --frequency <type>", "Frequency: daily|weekly|monthly|once|loop").option("-t, --time <HH:MM>", "Time to run (24-hour format)").option("-d, --day <day>", "Day of week (mon-sun) or day of month (1-31)").option("-i, --interval <seconds>", "Interval in seconds for loop mode").option("-z, --timezone <tz>", "IANA timezone").option("-p, --prompt <text>", "Prompt to run").option("--artifact-name <name>", "Artifact name", "artifact").option("-e, --enable", "Enable schedule immediately after creation").option("--notify-email", "Enable email notifications (default: true)").option("--no-notify-email", "Disable email notifications").option("--notify-slack", "Enable Slack notifications (default: true)").option("--no-notify-slack", "Disable Slack notifications").action(
15587
15346
  withErrorHandler(async (agentName, options) => {
15588
15347
  const { composeId, scheduleName } = await resolveAgent(
15589
15348
  agentName,
@@ -15594,7 +15353,7 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15594
15353
  scheduleName
15595
15354
  );
15596
15355
  console.log(
15597
- chalk55.dim(
15356
+ chalk50.dim(
15598
15357
  existingSchedule ? `Editing existing schedule for agent ${agentName}` : `Creating new schedule for agent ${agentName}`
15599
15358
  )
15600
15359
  );
@@ -15604,12 +15363,12 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15604
15363
  defaults.frequency
15605
15364
  );
15606
15365
  if (!frequency) {
15607
- console.log(chalk55.dim("Cancelled"));
15366
+ console.log(chalk50.dim("Cancelled"));
15608
15367
  return;
15609
15368
  }
15610
15369
  const timing = await gatherTiming(frequency, options, defaults);
15611
15370
  if (!timing) {
15612
- console.log(chalk55.dim("Cancelled"));
15371
+ console.log(chalk50.dim("Cancelled"));
15613
15372
  return;
15614
15373
  }
15615
15374
  const { day, time, atTime, intervalSeconds } = timing;
@@ -15618,7 +15377,7 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15618
15377
  existingSchedule?.timezone
15619
15378
  );
15620
15379
  if (!timezone) {
15621
- console.log(chalk55.dim("Cancelled"));
15380
+ console.log(chalk50.dim("Cancelled"));
15622
15381
  return;
15623
15382
  }
15624
15383
  const promptText_ = await gatherPromptText(
@@ -15626,9 +15385,14 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15626
15385
  existingSchedule?.prompt
15627
15386
  );
15628
15387
  if (!promptText_) {
15629
- console.log(chalk55.dim("Cancelled"));
15388
+ console.log(chalk50.dim("Cancelled"));
15630
15389
  return;
15631
15390
  }
15391
+ const { notifyEmail, notifySlack } = await gatherNotificationPreferences(
15392
+ options.notifyEmail,
15393
+ options.notifySlack,
15394
+ existingSchedule
15395
+ );
15632
15396
  const deployResult = await buildAndDeploy({
15633
15397
  scheduleName,
15634
15398
  composeId,
@@ -15640,7 +15404,9 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15640
15404
  intervalSeconds,
15641
15405
  timezone,
15642
15406
  prompt: promptText_,
15643
- artifactName: options.artifactName
15407
+ artifactName: options.artifactName,
15408
+ notifyEmail,
15409
+ notifySlack
15644
15410
  });
15645
15411
  displayDeployResult(agentName, deployResult);
15646
15412
  const shouldPromptEnable = deployResult.created || existingSchedule !== void 0 && !existingSchedule.enabled;
@@ -15655,15 +15421,15 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15655
15421
  );
15656
15422
 
15657
15423
  // src/commands/schedule/list.ts
15658
- import { Command as Command61 } from "commander";
15659
- import chalk56 from "chalk";
15660
- var listCommand7 = new Command61().name("list").alias("ls").description("List all schedules").action(
15424
+ import { Command as Command56 } from "commander";
15425
+ import chalk51 from "chalk";
15426
+ var listCommand7 = new Command56().name("list").alias("ls").description("List all schedules").action(
15661
15427
  withErrorHandler(async () => {
15662
15428
  const result = await listSchedules();
15663
15429
  if (result.schedules.length === 0) {
15664
- console.log(chalk56.dim("No schedules found"));
15430
+ console.log(chalk51.dim("No schedules found"));
15665
15431
  console.log(
15666
- chalk56.dim(" Create one with: vm0 schedule setup <agent-name>")
15432
+ chalk51.dim(" Create one with: vm0 schedule setup <agent-name>")
15667
15433
  );
15668
15434
  return;
15669
15435
  }
@@ -15688,10 +15454,10 @@ var listCommand7 = new Command61().name("list").alias("ls").description("List al
15688
15454
  "STATUS".padEnd(8),
15689
15455
  "NEXT RUN"
15690
15456
  ].join(" ");
15691
- console.log(chalk56.dim(header));
15457
+ console.log(chalk51.dim(header));
15692
15458
  for (const schedule of result.schedules) {
15693
15459
  const trigger = schedule.cronExpression ? `${schedule.cronExpression} (${schedule.timezone})` : schedule.atTime || "-";
15694
- const status = schedule.enabled ? chalk56.green("enabled") : chalk56.yellow("disabled");
15460
+ const status = schedule.enabled ? chalk51.green("enabled") : chalk51.yellow("disabled");
15695
15461
  const nextRun = schedule.enabled ? formatRelativeTime2(schedule.nextRunAt) : "-";
15696
15462
  const row = [
15697
15463
  schedule.composeName.padEnd(agentWidth),
@@ -15707,48 +15473,48 @@ var listCommand7 = new Command61().name("list").alias("ls").description("List al
15707
15473
  );
15708
15474
 
15709
15475
  // src/commands/schedule/status.ts
15710
- import { Command as Command62 } from "commander";
15711
- import chalk57 from "chalk";
15476
+ import { Command as Command57 } from "commander";
15477
+ import chalk52 from "chalk";
15712
15478
  function formatDateTimeStyled(dateStr) {
15713
- if (!dateStr) return chalk57.dim("-");
15479
+ if (!dateStr) return chalk52.dim("-");
15714
15480
  const formatted = formatDateTime(dateStr);
15715
- return formatted.replace(/\(([^)]+)\)$/, chalk57.dim("($1)"));
15481
+ return formatted.replace(/\(([^)]+)\)$/, chalk52.dim("($1)"));
15716
15482
  }
15717
15483
  function formatTrigger(schedule) {
15718
15484
  if (schedule.triggerType === "loop" && schedule.intervalSeconds !== null) {
15719
- return `interval ${schedule.intervalSeconds}s ${chalk57.dim("(loop)")}`;
15485
+ return `interval ${schedule.intervalSeconds}s ${chalk52.dim("(loop)")}`;
15720
15486
  }
15721
15487
  if (schedule.cronExpression) {
15722
15488
  return schedule.cronExpression;
15723
15489
  }
15724
15490
  if (schedule.atTime) {
15725
- return `${schedule.atTime} ${chalk57.dim("(one-time)")}`;
15491
+ return `${schedule.atTime} ${chalk52.dim("(one-time)")}`;
15726
15492
  }
15727
- return chalk57.dim("-");
15493
+ return chalk52.dim("-");
15728
15494
  }
15729
15495
  function formatRunStatus2(status) {
15730
15496
  switch (status) {
15731
15497
  case "completed":
15732
- return chalk57.green(status);
15498
+ return chalk52.green(status);
15733
15499
  case "failed":
15734
15500
  case "timeout":
15735
- return chalk57.red(status);
15501
+ return chalk52.red(status);
15736
15502
  case "running":
15737
- return chalk57.cyan(status);
15503
+ return chalk52.cyan(status);
15738
15504
  case "pending":
15739
- return chalk57.yellow(status);
15505
+ return chalk52.yellow(status);
15740
15506
  default:
15741
15507
  return status;
15742
15508
  }
15743
15509
  }
15744
15510
  function printRunConfiguration(schedule) {
15745
- const statusText = schedule.enabled ? chalk57.green("enabled") : chalk57.yellow("disabled");
15511
+ const statusText = schedule.enabled ? chalk52.green("enabled") : chalk52.yellow("disabled");
15746
15512
  console.log(`${"Status:".padEnd(16)}${statusText}`);
15747
15513
  console.log(
15748
- `${"Agent:".padEnd(16)}${schedule.composeName} ${chalk57.dim(`(${schedule.orgSlug})`)}`
15514
+ `${"Agent:".padEnd(16)}${schedule.composeName} ${chalk52.dim(`(${schedule.orgSlug})`)}`
15749
15515
  );
15750
15516
  const promptPreview = schedule.prompt.length > 60 ? schedule.prompt.slice(0, 57) + "..." : schedule.prompt;
15751
- console.log(`${"Prompt:".padEnd(16)}${chalk57.dim(promptPreview)}`);
15517
+ console.log(`${"Prompt:".padEnd(16)}${chalk52.dim(promptPreview)}`);
15752
15518
  if (schedule.vars && Object.keys(schedule.vars).length > 0) {
15753
15519
  console.log(
15754
15520
  `${"Variables:".padEnd(16)}${Object.keys(schedule.vars).join(", ")}`
@@ -15777,7 +15543,7 @@ function printTimeSchedule(schedule) {
15777
15543
  );
15778
15544
  }
15779
15545
  if (schedule.triggerType === "loop") {
15780
- const failureText = schedule.consecutiveFailures > 0 ? chalk57.yellow(`${schedule.consecutiveFailures}/3`) : chalk57.dim("0/3");
15546
+ const failureText = schedule.consecutiveFailures > 0 ? chalk52.yellow(`${schedule.consecutiveFailures}/3`) : chalk52.dim("0/3");
15781
15547
  console.log(`${"Failures:".padEnd(16)}${failureText}`);
15782
15548
  }
15783
15549
  }
@@ -15793,7 +15559,7 @@ async function printRecentRuns(name, composeId, limit) {
15793
15559
  console.log();
15794
15560
  console.log("Recent Runs:");
15795
15561
  console.log(
15796
- chalk57.dim("RUN ID STATUS CREATED")
15562
+ chalk52.dim("RUN ID STATUS CREATED")
15797
15563
  );
15798
15564
  for (const run of runs) {
15799
15565
  const id = run.id;
@@ -15804,10 +15570,10 @@ async function printRecentRuns(name, composeId, limit) {
15804
15570
  }
15805
15571
  } catch {
15806
15572
  console.log();
15807
- console.log(chalk57.dim("Recent Runs: (unable to fetch)"));
15573
+ console.log(chalk52.dim("Recent Runs: (unable to fetch)"));
15808
15574
  }
15809
15575
  }
15810
- var statusCommand7 = new Command62().name("status").description("Show detailed status of a schedule").argument("<agent-name>", "Agent name").option(
15576
+ var statusCommand7 = new Command57().name("status").description("Show detailed status of a schedule").argument("<agent-name>", "Agent name").option(
15811
15577
  "-n, --name <schedule-name>",
15812
15578
  "Schedule name (required when agent has multiple schedules)"
15813
15579
  ).option(
@@ -15821,8 +15587,8 @@ var statusCommand7 = new Command62().name("status").description("Show detailed s
15821
15587
  const { name, composeId } = resolved;
15822
15588
  const schedule = await getScheduleByName({ name, composeId });
15823
15589
  console.log();
15824
- console.log(`Schedule for agent: ${chalk57.cyan(agentName)}`);
15825
- console.log(chalk57.dim("\u2501".repeat(50)));
15590
+ console.log(`Schedule for agent: ${chalk52.cyan(agentName)}`);
15591
+ console.log(chalk52.dim("\u2501".repeat(50)));
15826
15592
  printRunConfiguration(schedule);
15827
15593
  printTimeSchedule(schedule);
15828
15594
  const parsed = parseInt(options.limit, 10);
@@ -15837,9 +15603,9 @@ var statusCommand7 = new Command62().name("status").description("Show detailed s
15837
15603
  );
15838
15604
 
15839
15605
  // src/commands/schedule/delete.ts
15840
- import { Command as Command63 } from "commander";
15841
- import chalk58 from "chalk";
15842
- var deleteCommand2 = new Command63().name("delete").alias("rm").description("Delete a schedule").argument("<agent-name>", "Agent name").option(
15606
+ import { Command as Command58 } from "commander";
15607
+ import chalk53 from "chalk";
15608
+ var deleteCommand2 = new Command58().name("delete").alias("rm").description("Delete a schedule").argument("<agent-name>", "Agent name").option(
15843
15609
  "-n, --name <schedule-name>",
15844
15610
  "Schedule name (required when agent has multiple schedules)"
15845
15611
  ).option("-y, --yes", "Skip confirmation prompt").action(
@@ -15851,11 +15617,11 @@ var deleteCommand2 = new Command63().name("delete").alias("rm").description("Del
15851
15617
  throw new Error("--yes flag is required in non-interactive mode");
15852
15618
  }
15853
15619
  const confirmed = await promptConfirm(
15854
- `Delete schedule for agent ${chalk58.cyan(agentName)}?`,
15620
+ `Delete schedule for agent ${chalk53.cyan(agentName)}?`,
15855
15621
  false
15856
15622
  );
15857
15623
  if (!confirmed) {
15858
- console.log(chalk58.dim("Cancelled"));
15624
+ console.log(chalk53.dim("Cancelled"));
15859
15625
  return;
15860
15626
  }
15861
15627
  }
@@ -15864,16 +15630,16 @@ var deleteCommand2 = new Command63().name("delete").alias("rm").description("Del
15864
15630
  composeId: resolved.composeId
15865
15631
  });
15866
15632
  console.log(
15867
- chalk58.green(`\u2713 Deleted schedule for agent ${chalk58.cyan(agentName)}`)
15633
+ chalk53.green(`\u2713 Deleted schedule for agent ${chalk53.cyan(agentName)}`)
15868
15634
  );
15869
15635
  }
15870
15636
  )
15871
15637
  );
15872
15638
 
15873
15639
  // src/commands/schedule/enable.ts
15874
- import { Command as Command64 } from "commander";
15875
- import chalk59 from "chalk";
15876
- var enableCommand = new Command64().name("enable").description("Enable a schedule").argument("<agent-name>", "Agent name").option(
15640
+ import { Command as Command59 } from "commander";
15641
+ import chalk54 from "chalk";
15642
+ var enableCommand = new Command59().name("enable").description("Enable a schedule").argument("<agent-name>", "Agent name").option(
15877
15643
  "-n, --name <schedule-name>",
15878
15644
  "Schedule name (required when agent has multiple schedules)"
15879
15645
  ).action(
@@ -15884,15 +15650,15 @@ var enableCommand = new Command64().name("enable").description("Enable a schedul
15884
15650
  composeId: resolved.composeId
15885
15651
  });
15886
15652
  console.log(
15887
- chalk59.green(`\u2713 Enabled schedule for agent ${chalk59.cyan(agentName)}`)
15653
+ chalk54.green(`\u2713 Enabled schedule for agent ${chalk54.cyan(agentName)}`)
15888
15654
  );
15889
15655
  })
15890
15656
  );
15891
15657
 
15892
15658
  // src/commands/schedule/disable.ts
15893
- import { Command as Command65 } from "commander";
15894
- import chalk60 from "chalk";
15895
- var disableCommand = new Command65().name("disable").description("Disable a schedule").argument("<agent-name>", "Agent name").option(
15659
+ import { Command as Command60 } from "commander";
15660
+ import chalk55 from "chalk";
15661
+ var disableCommand = new Command60().name("disable").description("Disable a schedule").argument("<agent-name>", "Agent name").option(
15896
15662
  "-n, --name <schedule-name>",
15897
15663
  "Schedule name (required when agent has multiple schedules)"
15898
15664
  ).action(
@@ -15903,17 +15669,17 @@ var disableCommand = new Command65().name("disable").description("Disable a sche
15903
15669
  composeId: resolved.composeId
15904
15670
  });
15905
15671
  console.log(
15906
- chalk60.green(`\u2713 Disabled schedule for agent ${chalk60.cyan(agentName)}`)
15672
+ chalk55.green(`\u2713 Disabled schedule for agent ${chalk55.cyan(agentName)}`)
15907
15673
  );
15908
15674
  })
15909
15675
  );
15910
15676
 
15911
15677
  // src/commands/schedule/index.ts
15912
- var scheduleCommand = new Command66().name("schedule").description("Manage agent schedules").addCommand(setupCommand).addCommand(listCommand7).addCommand(statusCommand7).addCommand(deleteCommand2).addCommand(enableCommand).addCommand(disableCommand);
15678
+ var scheduleCommand = new Command61().name("schedule").description("Manage agent schedules").addCommand(setupCommand).addCommand(listCommand7).addCommand(statusCommand7).addCommand(deleteCommand2).addCommand(enableCommand).addCommand(disableCommand);
15913
15679
 
15914
15680
  // src/commands/usage/index.ts
15915
- import { Command as Command67 } from "commander";
15916
- import chalk61 from "chalk";
15681
+ import { Command as Command62 } from "commander";
15682
+ import chalk56 from "chalk";
15917
15683
 
15918
15684
  // src/lib/utils/duration-formatter.ts
15919
15685
  function formatDuration(ms) {
@@ -15986,7 +15752,7 @@ function fillMissingDates(daily, startDate, endDate) {
15986
15752
  result.sort((a, b) => b.date.localeCompare(a.date));
15987
15753
  return result;
15988
15754
  }
15989
- var usageCommand = new Command67().name("usage").description("View usage statistics").option("--since <date>", "Start date (ISO format or relative: 7d, 30d)").option(
15755
+ var usageCommand = new Command62().name("usage").description("View usage statistics").option("--since <date>", "Start date (ISO format or relative: 7d, 30d)").option(
15990
15756
  "--until <date>",
15991
15757
  "End date (ISO format or relative, defaults to now)"
15992
15758
  ).action(
@@ -16038,19 +15804,19 @@ var usageCommand = new Command67().name("usage").description("View usage statist
16038
15804
  );
16039
15805
  console.log();
16040
15806
  console.log(
16041
- chalk61.bold(
15807
+ chalk56.bold(
16042
15808
  `Usage Summary (${formatDateRange(usage.period.start, usage.period.end)})`
16043
15809
  )
16044
15810
  );
16045
15811
  console.log();
16046
- console.log(chalk61.dim("DATE RUNS RUN TIME"));
15812
+ console.log(chalk56.dim("DATE RUNS RUN TIME"));
16047
15813
  for (const day of filledDaily) {
16048
15814
  const dateDisplay = formatDateDisplay(day.date).padEnd(10);
16049
15815
  const runsDisplay = String(day.run_count).padStart(6);
16050
15816
  const timeDisplay = formatDuration(day.run_time_ms);
16051
15817
  console.log(`${dateDisplay}${runsDisplay} ${timeDisplay}`);
16052
15818
  }
16053
- console.log(chalk61.dim("\u2500".repeat(29)));
15819
+ console.log(chalk56.dim("\u2500".repeat(29)));
16054
15820
  const totalRunsDisplay = String(usage.summary.total_runs).padStart(6);
16055
15821
  const totalTimeDisplay = formatDuration(usage.summary.total_run_time_ms);
16056
15822
  console.log(
@@ -16061,67 +15827,67 @@ var usageCommand = new Command67().name("usage").description("View usage statist
16061
15827
  );
16062
15828
 
16063
15829
  // src/commands/secret/index.ts
16064
- import { Command as Command71 } from "commander";
15830
+ import { Command as Command66 } from "commander";
16065
15831
 
16066
15832
  // src/commands/secret/list.ts
16067
- import { Command as Command68 } from "commander";
16068
- import chalk62 from "chalk";
16069
- var listCommand8 = new Command68().name("list").alias("ls").description("List all secrets").action(
15833
+ import { Command as Command63 } from "commander";
15834
+ import chalk57 from "chalk";
15835
+ var listCommand8 = new Command63().name("list").alias("ls").description("List all secrets").action(
16070
15836
  withErrorHandler(async () => {
16071
15837
  const result = await listSecrets();
16072
15838
  if (result.secrets.length === 0) {
16073
- console.log(chalk62.dim("No secrets found"));
15839
+ console.log(chalk57.dim("No secrets found"));
16074
15840
  console.log();
16075
15841
  console.log("To add a secret:");
16076
- console.log(chalk62.cyan(" vm0 secret set MY_API_KEY --body <value>"));
15842
+ console.log(chalk57.cyan(" vm0 secret set MY_API_KEY --body <value>"));
16077
15843
  return;
16078
15844
  }
16079
- console.log(chalk62.bold("Secrets:"));
15845
+ console.log(chalk57.bold("Secrets:"));
16080
15846
  console.log();
16081
15847
  for (const secret of result.secrets) {
16082
15848
  let typeIndicator = "";
16083
15849
  let derivedLine = null;
16084
15850
  if (secret.type === "model-provider") {
16085
- typeIndicator = chalk62.dim(" [model-provider]");
15851
+ typeIndicator = chalk57.dim(" [model-provider]");
16086
15852
  } else if (secret.type === "connector") {
16087
15853
  const derived = getConnectorDerivedNames(secret.name);
16088
15854
  if (derived) {
16089
- typeIndicator = chalk62.dim(` [${derived.connectorLabel} connector]`);
16090
- derivedLine = chalk62.dim(
15855
+ typeIndicator = chalk57.dim(` [${derived.connectorLabel} connector]`);
15856
+ derivedLine = chalk57.dim(
16091
15857
  `Available as: ${derived.envVarNames.join(", ")}`
16092
15858
  );
16093
15859
  } else {
16094
- typeIndicator = chalk62.dim(" [connector]");
15860
+ typeIndicator = chalk57.dim(" [connector]");
16095
15861
  }
16096
15862
  } else if (secret.type === "user") {
16097
15863
  const derived = getConnectorDerivedNames(secret.name);
16098
15864
  if (derived) {
16099
- typeIndicator = chalk62.dim(` [${derived.connectorLabel} connector]`);
16100
- derivedLine = chalk62.dim(
15865
+ typeIndicator = chalk57.dim(` [${derived.connectorLabel} connector]`);
15866
+ derivedLine = chalk57.dim(
16101
15867
  `Available as: ${derived.envVarNames.join(", ")}`
16102
15868
  );
16103
15869
  }
16104
15870
  }
16105
- console.log(` ${chalk62.cyan(secret.name)}${typeIndicator}`);
15871
+ console.log(` ${chalk57.cyan(secret.name)}${typeIndicator}`);
16106
15872
  if (derivedLine) {
16107
15873
  console.log(` ${derivedLine}`);
16108
15874
  }
16109
15875
  if (secret.description) {
16110
- console.log(` ${chalk62.dim(secret.description)}`);
15876
+ console.log(` ${chalk57.dim(secret.description)}`);
16111
15877
  }
16112
15878
  console.log(
16113
- ` ${chalk62.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
15879
+ ` ${chalk57.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
16114
15880
  );
16115
15881
  console.log();
16116
15882
  }
16117
- console.log(chalk62.dim(`Total: ${result.secrets.length} secret(s)`));
15883
+ console.log(chalk57.dim(`Total: ${result.secrets.length} secret(s)`));
16118
15884
  })
16119
15885
  );
16120
15886
 
16121
15887
  // src/commands/secret/set.ts
16122
- import { Command as Command69 } from "commander";
16123
- import chalk63 from "chalk";
16124
- var setCommand2 = new Command69().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
15888
+ import { Command as Command64 } from "commander";
15889
+ import chalk58 from "chalk";
15890
+ var setCommand2 = new Command64().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
16125
15891
  "-b, --body <value>",
16126
15892
  "Secret value (required in non-interactive mode)"
16127
15893
  ).option("-d, --description <description>", "Optional description").action(
@@ -16160,19 +15926,19 @@ var setCommand2 = new Command69().name("set").description("Create or update a se
16160
15926
  }
16161
15927
  throw error;
16162
15928
  }
16163
- console.log(chalk63.green(`\u2713 Secret "${secret.name}" saved`));
15929
+ console.log(chalk58.green(`\u2713 Secret "${secret.name}" saved`));
16164
15930
  console.log();
16165
15931
  console.log("Use in vm0.yaml:");
16166
- console.log(chalk63.cyan(` environment:`));
16167
- console.log(chalk63.cyan(` ${name}: \${{ secrets.${name} }}`));
15932
+ console.log(chalk58.cyan(` environment:`));
15933
+ console.log(chalk58.cyan(` ${name}: \${{ secrets.${name} }}`));
16168
15934
  }
16169
15935
  )
16170
15936
  );
16171
15937
 
16172
15938
  // src/commands/secret/delete.ts
16173
- import { Command as Command70 } from "commander";
16174
- import chalk64 from "chalk";
16175
- var deleteCommand3 = new Command70().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
15939
+ import { Command as Command65 } from "commander";
15940
+ import chalk59 from "chalk";
15941
+ var deleteCommand3 = new Command65().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
16176
15942
  withErrorHandler(async (name, options) => {
16177
15943
  try {
16178
15944
  await getSecret(name);
@@ -16191,61 +15957,61 @@ var deleteCommand3 = new Command70().name("delete").description("Delete a secret
16191
15957
  false
16192
15958
  );
16193
15959
  if (!confirmed) {
16194
- console.log(chalk64.dim("Cancelled"));
15960
+ console.log(chalk59.dim("Cancelled"));
16195
15961
  return;
16196
15962
  }
16197
15963
  }
16198
15964
  await deleteSecret(name);
16199
- console.log(chalk64.green(`\u2713 Secret "${name}" deleted`));
15965
+ console.log(chalk59.green(`\u2713 Secret "${name}" deleted`));
16200
15966
  })
16201
15967
  );
16202
15968
 
16203
15969
  // src/commands/secret/index.ts
16204
- var secretCommand = new Command71().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand8).addCommand(setCommand2).addCommand(deleteCommand3);
15970
+ var secretCommand = new Command66().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand8).addCommand(setCommand2).addCommand(deleteCommand3);
16205
15971
 
16206
15972
  // src/commands/variable/index.ts
16207
- import { Command as Command75 } from "commander";
15973
+ import { Command as Command70 } from "commander";
16208
15974
 
16209
15975
  // src/commands/variable/list.ts
16210
- import { Command as Command72 } from "commander";
16211
- import chalk65 from "chalk";
15976
+ import { Command as Command67 } from "commander";
15977
+ import chalk60 from "chalk";
16212
15978
  function truncateValue(value, maxLength = 60) {
16213
15979
  if (value.length <= maxLength) {
16214
15980
  return value;
16215
15981
  }
16216
15982
  return value.slice(0, maxLength - 15) + "... [truncated]";
16217
15983
  }
16218
- var listCommand9 = new Command72().name("list").alias("ls").description("List all variables").action(
15984
+ var listCommand9 = new Command67().name("list").alias("ls").description("List all variables").action(
16219
15985
  withErrorHandler(async () => {
16220
15986
  const result = await listVariables();
16221
15987
  if (result.variables.length === 0) {
16222
- console.log(chalk65.dim("No variables found"));
15988
+ console.log(chalk60.dim("No variables found"));
16223
15989
  console.log();
16224
15990
  console.log("To add a variable:");
16225
- console.log(chalk65.cyan(" vm0 variable set MY_VAR <value>"));
15991
+ console.log(chalk60.cyan(" vm0 variable set MY_VAR <value>"));
16226
15992
  return;
16227
15993
  }
16228
- console.log(chalk65.bold("Variables:"));
15994
+ console.log(chalk60.bold("Variables:"));
16229
15995
  console.log();
16230
15996
  for (const variable of result.variables) {
16231
15997
  const displayValue = truncateValue(variable.value);
16232
- console.log(` ${chalk65.cyan(variable.name)} = ${displayValue}`);
15998
+ console.log(` ${chalk60.cyan(variable.name)} = ${displayValue}`);
16233
15999
  if (variable.description) {
16234
- console.log(` ${chalk65.dim(variable.description)}`);
16000
+ console.log(` ${chalk60.dim(variable.description)}`);
16235
16001
  }
16236
16002
  console.log(
16237
- ` ${chalk65.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
16003
+ ` ${chalk60.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
16238
16004
  );
16239
16005
  console.log();
16240
16006
  }
16241
- console.log(chalk65.dim(`Total: ${result.variables.length} variable(s)`));
16007
+ console.log(chalk60.dim(`Total: ${result.variables.length} variable(s)`));
16242
16008
  })
16243
16009
  );
16244
16010
 
16245
16011
  // src/commands/variable/set.ts
16246
- import { Command as Command73 } from "commander";
16247
- import chalk66 from "chalk";
16248
- var setCommand3 = new Command73().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
16012
+ import { Command as Command68 } from "commander";
16013
+ import chalk61 from "chalk";
16014
+ var setCommand3 = new Command68().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
16249
16015
  withErrorHandler(
16250
16016
  async (name, value, options) => {
16251
16017
  let variable;
@@ -16265,19 +16031,19 @@ var setCommand3 = new Command73().name("set").description("Create or update a va
16265
16031
  }
16266
16032
  throw error;
16267
16033
  }
16268
- console.log(chalk66.green(`\u2713 Variable "${variable.name}" saved`));
16034
+ console.log(chalk61.green(`\u2713 Variable "${variable.name}" saved`));
16269
16035
  console.log();
16270
16036
  console.log("Use in vm0.yaml:");
16271
- console.log(chalk66.cyan(` environment:`));
16272
- console.log(chalk66.cyan(` ${name}: \${{ vars.${name} }}`));
16037
+ console.log(chalk61.cyan(` environment:`));
16038
+ console.log(chalk61.cyan(` ${name}: \${{ vars.${name} }}`));
16273
16039
  }
16274
16040
  )
16275
16041
  );
16276
16042
 
16277
16043
  // src/commands/variable/delete.ts
16278
- import { Command as Command74 } from "commander";
16279
- import chalk67 from "chalk";
16280
- var deleteCommand4 = new Command74().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
16044
+ import { Command as Command69 } from "commander";
16045
+ import chalk62 from "chalk";
16046
+ var deleteCommand4 = new Command69().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
16281
16047
  withErrorHandler(async (name, options) => {
16282
16048
  try {
16283
16049
  await getVariable(name);
@@ -16296,32 +16062,32 @@ var deleteCommand4 = new Command74().name("delete").description("Delete a variab
16296
16062
  false
16297
16063
  );
16298
16064
  if (!confirmed) {
16299
- console.log(chalk67.dim("Cancelled"));
16065
+ console.log(chalk62.dim("Cancelled"));
16300
16066
  return;
16301
16067
  }
16302
16068
  }
16303
16069
  await deleteVariable(name);
16304
- console.log(chalk67.green(`\u2713 Variable "${name}" deleted`));
16070
+ console.log(chalk62.green(`\u2713 Variable "${name}" deleted`));
16305
16071
  })
16306
16072
  );
16307
16073
 
16308
16074
  // src/commands/variable/index.ts
16309
- var variableCommand = new Command75().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand9).addCommand(setCommand3).addCommand(deleteCommand4);
16075
+ var variableCommand = new Command70().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand9).addCommand(setCommand3).addCommand(deleteCommand4);
16310
16076
 
16311
16077
  // src/commands/model-provider/index.ts
16312
- import { Command as Command80 } from "commander";
16078
+ import { Command as Command75 } from "commander";
16313
16079
 
16314
16080
  // src/commands/model-provider/list.ts
16315
- import { Command as Command76 } from "commander";
16316
- import chalk68 from "chalk";
16317
- var listCommand10 = new Command76().name("list").alias("ls").description("List all model providers").action(
16081
+ import { Command as Command71 } from "commander";
16082
+ import chalk63 from "chalk";
16083
+ var listCommand10 = new Command71().name("list").alias("ls").description("List all model providers").action(
16318
16084
  withErrorHandler(async () => {
16319
16085
  const result = await listModelProviders();
16320
16086
  if (result.modelProviders.length === 0) {
16321
- console.log(chalk68.dim("No model providers configured"));
16087
+ console.log(chalk63.dim("No model providers configured"));
16322
16088
  console.log();
16323
16089
  console.log("To add a model provider:");
16324
- console.log(chalk68.cyan(" vm0 model-provider setup"));
16090
+ console.log(chalk63.cyan(" vm0 model-provider setup"));
16325
16091
  return;
16326
16092
  }
16327
16093
  const byFramework = result.modelProviders.reduce(
@@ -16335,16 +16101,16 @@ var listCommand10 = new Command76().name("list").alias("ls").description("List a
16335
16101
  },
16336
16102
  {}
16337
16103
  );
16338
- console.log(chalk68.bold("Model Providers:"));
16104
+ console.log(chalk63.bold("Model Providers:"));
16339
16105
  console.log();
16340
16106
  for (const [framework, providers] of Object.entries(byFramework)) {
16341
- console.log(` ${chalk68.cyan(framework)}:`);
16107
+ console.log(` ${chalk63.cyan(framework)}:`);
16342
16108
  for (const provider of providers) {
16343
- const defaultTag = provider.isDefault ? chalk68.green(" (default)") : "";
16344
- const modelTag = provider.selectedModel ? chalk68.dim(` [${provider.selectedModel}]`) : "";
16109
+ const defaultTag = provider.isDefault ? chalk63.green(" (default)") : "";
16110
+ const modelTag = provider.selectedModel ? chalk63.dim(` [${provider.selectedModel}]`) : "";
16345
16111
  console.log(` ${provider.type}${defaultTag}${modelTag}`);
16346
16112
  console.log(
16347
- chalk68.dim(
16113
+ chalk63.dim(
16348
16114
  ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`
16349
16115
  )
16350
16116
  );
@@ -16352,14 +16118,14 @@ var listCommand10 = new Command76().name("list").alias("ls").description("List a
16352
16118
  console.log();
16353
16119
  }
16354
16120
  console.log(
16355
- chalk68.dim(`Total: ${result.modelProviders.length} provider(s)`)
16121
+ chalk63.dim(`Total: ${result.modelProviders.length} provider(s)`)
16356
16122
  );
16357
16123
  })
16358
16124
  );
16359
16125
 
16360
16126
  // src/commands/model-provider/setup.ts
16361
- import { Command as Command77 } from "commander";
16362
- import chalk69 from "chalk";
16127
+ import { Command as Command72 } from "commander";
16128
+ import chalk64 from "chalk";
16363
16129
  import prompts2 from "prompts";
16364
16130
  function validateProviderType(typeStr) {
16365
16131
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {
@@ -16543,7 +16309,7 @@ async function promptForModelSelection(type2) {
16543
16309
  if (selected === "__custom__") {
16544
16310
  const placeholder = getCustomModelPlaceholder(type2);
16545
16311
  if (placeholder) {
16546
- console.log(chalk69.dim(`Example: ${placeholder}`));
16312
+ console.log(chalk64.dim(`Example: ${placeholder}`));
16547
16313
  }
16548
16314
  const customResponse = await prompts2(
16549
16315
  {
@@ -16593,7 +16359,7 @@ async function promptForSecrets(type2, authMethod) {
16593
16359
  const secrets = {};
16594
16360
  for (const [name, fieldConfig] of Object.entries(secretsConfig)) {
16595
16361
  if (fieldConfig.helpText) {
16596
- console.log(chalk69.dim(fieldConfig.helpText));
16362
+ console.log(chalk64.dim(fieldConfig.helpText));
16597
16363
  }
16598
16364
  const isSensitive = isSensitiveSecret(name);
16599
16365
  const placeholder = "placeholder" in fieldConfig ? fieldConfig.placeholder : "";
@@ -16645,7 +16411,7 @@ async function handleInteractiveMode() {
16645
16411
  title = `${title} \u2713`;
16646
16412
  }
16647
16413
  if (isExperimental) {
16648
- title = `${title} ${chalk69.dim("(experimental)")}`;
16414
+ title = `${title} ${chalk64.dim("(experimental)")}`;
16649
16415
  }
16650
16416
  return {
16651
16417
  title,
@@ -16692,7 +16458,7 @@ async function handleInteractiveMode() {
16692
16458
  }
16693
16459
  const config = MODEL_PROVIDER_TYPES[type2];
16694
16460
  console.log();
16695
- console.log(chalk69.dim(config.helpText));
16461
+ console.log(chalk64.dim(config.helpText));
16696
16462
  console.log();
16697
16463
  if (hasAuthMethods(type2)) {
16698
16464
  const authMethod = await promptForAuthMethod(type2);
@@ -16733,13 +16499,13 @@ async function promptSetAsDefault(type2, framework, isDefault) {
16733
16499
  );
16734
16500
  if (response.setDefault) {
16735
16501
  await setModelProviderDefault(type2);
16736
- console.log(chalk69.green(`\u2713 Default for ${framework} set to "${type2}"`));
16502
+ console.log(chalk64.green(`\u2713 Default for ${framework} set to "${type2}"`));
16737
16503
  }
16738
16504
  }
16739
16505
  function collectSecrets(value, previous) {
16740
16506
  return previous.concat([value]);
16741
16507
  }
16742
- var setupCommand2 = new Command77().name("setup").description("Configure a model provider").option("-t, --type <type>", "Provider type (for non-interactive mode)").option(
16508
+ var setupCommand2 = new Command72().name("setup").description("Configure a model provider").option("-t, --type <type>", "Provider type (for non-interactive mode)").option(
16743
16509
  "-s, --secret <value>",
16744
16510
  "Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)",
16745
16511
  collectSecrets,
@@ -16777,11 +16543,11 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16777
16543
  const modelNote2 = provider2.selectedModel ? ` with model: ${provider2.selectedModel}` : "";
16778
16544
  if (!hasModelSelection(input.type)) {
16779
16545
  console.log(
16780
- chalk69.green(`\u2713 Model provider "${input.type}" unchanged`)
16546
+ chalk64.green(`\u2713 Model provider "${input.type}" unchanged`)
16781
16547
  );
16782
16548
  } else {
16783
16549
  console.log(
16784
- chalk69.green(
16550
+ chalk64.green(
16785
16551
  `\u2713 Model provider "${input.type}" updated${defaultNote2}${modelNote2}`
16786
16552
  )
16787
16553
  );
@@ -16806,7 +16572,7 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16806
16572
  const defaultNote = provider.isDefault ? ` (default for ${provider.framework})` : "";
16807
16573
  const modelNote = provider.selectedModel ? ` with model: ${provider.selectedModel}` : "";
16808
16574
  console.log(
16809
- chalk69.green(
16575
+ chalk64.green(
16810
16576
  `\u2713 Model provider "${input.type}" ${action}${defaultNote}${modelNote}`
16811
16577
  )
16812
16578
  );
@@ -16822,9 +16588,9 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16822
16588
  );
16823
16589
 
16824
16590
  // src/commands/model-provider/delete.ts
16825
- import { Command as Command78 } from "commander";
16826
- import chalk70 from "chalk";
16827
- var deleteCommand5 = new Command78().name("delete").description("Delete a model provider").argument("<type>", "Model provider type to delete").action(
16591
+ import { Command as Command73 } from "commander";
16592
+ import chalk65 from "chalk";
16593
+ var deleteCommand5 = new Command73().name("delete").description("Delete a model provider").argument("<type>", "Model provider type to delete").action(
16828
16594
  withErrorHandler(async (type2) => {
16829
16595
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type2)) {
16830
16596
  const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(", ");
@@ -16833,14 +16599,14 @@ var deleteCommand5 = new Command78().name("delete").description("Delete a model
16833
16599
  });
16834
16600
  }
16835
16601
  await deleteModelProvider(type2);
16836
- console.log(chalk70.green(`\u2713 Model provider "${type2}" deleted`));
16602
+ console.log(chalk65.green(`\u2713 Model provider "${type2}" deleted`));
16837
16603
  })
16838
16604
  );
16839
16605
 
16840
16606
  // src/commands/model-provider/set-default.ts
16841
- import { Command as Command79 } from "commander";
16842
- import chalk71 from "chalk";
16843
- var setDefaultCommand = new Command79().name("set-default").description("Set a model provider as default for its framework").argument("<type>", "Model provider type to set as default").action(
16607
+ import { Command as Command74 } from "commander";
16608
+ import chalk66 from "chalk";
16609
+ var setDefaultCommand = new Command74().name("set-default").description("Set a model provider as default for its framework").argument("<type>", "Model provider type to set as default").action(
16844
16610
  withErrorHandler(async (type2) => {
16845
16611
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type2)) {
16846
16612
  const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(", ");
@@ -16850,7 +16616,7 @@ var setDefaultCommand = new Command79().name("set-default").description("Set a m
16850
16616
  }
16851
16617
  const provider = await setModelProviderDefault(type2);
16852
16618
  console.log(
16853
- chalk71.green(
16619
+ chalk66.green(
16854
16620
  `\u2713 Default for ${provider.framework} set to "${provider.type}"`
16855
16621
  )
16856
16622
  );
@@ -16858,14 +16624,14 @@ var setDefaultCommand = new Command79().name("set-default").description("Set a m
16858
16624
  );
16859
16625
 
16860
16626
  // src/commands/model-provider/index.ts
16861
- var modelProviderCommand = new Command80().name("model-provider").description("Manage model providers for agent runs").addCommand(listCommand10).addCommand(setupCommand2).addCommand(deleteCommand5).addCommand(setDefaultCommand);
16627
+ var modelProviderCommand = new Command75().name("model-provider").description("Manage model providers for agent runs").addCommand(listCommand10).addCommand(setupCommand2).addCommand(deleteCommand5).addCommand(setDefaultCommand);
16862
16628
 
16863
16629
  // src/commands/connector/index.ts
16864
- import { Command as Command85 } from "commander";
16630
+ import { Command as Command80 } from "commander";
16865
16631
 
16866
16632
  // src/commands/connector/connect.ts
16867
- import { Command as Command81 } from "commander";
16868
- import chalk73 from "chalk";
16633
+ import { Command as Command76 } from "commander";
16634
+ import chalk68 from "chalk";
16869
16635
  import { initClient as initClient13 } from "@ts-rest/core";
16870
16636
 
16871
16637
  // src/commands/connector/lib/computer/start-services.ts
@@ -16874,7 +16640,7 @@ import { access as access2, constants } from "fs/promises";
16874
16640
  import { createServer } from "net";
16875
16641
  import { homedir as homedir4 } from "os";
16876
16642
  import { join as join12 } from "path";
16877
- import chalk72 from "chalk";
16643
+ import chalk67 from "chalk";
16878
16644
 
16879
16645
  // src/commands/connector/lib/computer/ngrok.ts
16880
16646
  import ngrok from "@ngrok/ngrok";
@@ -16948,7 +16714,7 @@ async function checkComputerDependencies() {
16948
16714
  }
16949
16715
  }
16950
16716
  async function startComputerServices(credentials) {
16951
- console.log(chalk72.cyan("Starting computer connector services..."));
16717
+ console.log(chalk67.cyan("Starting computer connector services..."));
16952
16718
  const wsgidavBinary = await findBinary("wsgidav");
16953
16719
  if (!wsgidavBinary) {
16954
16720
  throw new Error(
@@ -16975,7 +16741,7 @@ async function startComputerServices(credentials) {
16975
16741
  );
16976
16742
  wsgidav.stdout?.on("data", (data) => process.stdout.write(data));
16977
16743
  wsgidav.stderr?.on("data", (data) => process.stderr.write(data));
16978
- console.log(chalk72.green("\u2713 WebDAV server started"));
16744
+ console.log(chalk67.green("\u2713 WebDAV server started"));
16979
16745
  const chrome = spawn2(
16980
16746
  chromeBinary,
16981
16747
  [
@@ -16989,7 +16755,7 @@ async function startComputerServices(credentials) {
16989
16755
  );
16990
16756
  chrome.stdout?.on("data", (data) => process.stdout.write(data));
16991
16757
  chrome.stderr?.on("data", (data) => process.stderr.write(data));
16992
- console.log(chalk72.green("\u2713 Chrome started"));
16758
+ console.log(chalk67.green("\u2713 Chrome started"));
16993
16759
  try {
16994
16760
  await startNgrokTunnels(
16995
16761
  credentials.ngrokToken,
@@ -16998,18 +16764,18 @@ async function startComputerServices(credentials) {
16998
16764
  cdpPort
16999
16765
  );
17000
16766
  console.log(
17001
- chalk72.green(
16767
+ chalk67.green(
17002
16768
  `\u2713 ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`
17003
16769
  )
17004
16770
  );
17005
16771
  console.log();
17006
- console.log(chalk72.green("\u2713 Computer connector active"));
16772
+ console.log(chalk67.green("\u2713 Computer connector active"));
17007
16773
  console.log(` WebDAV: ~/Downloads \u2192 webdav.${credentials.domain}`);
17008
16774
  console.log(
17009
16775
  ` Chrome CDP: port ${cdpPort} \u2192 chrome.${credentials.domain}`
17010
16776
  );
17011
16777
  console.log();
17012
- console.log(chalk72.dim("Press ^C twice to disconnect"));
16778
+ console.log(chalk67.dim("Press ^C twice to disconnect"));
17013
16779
  console.log();
17014
16780
  let sigintCount = 0;
17015
16781
  await new Promise((resolve2) => {
@@ -17023,7 +16789,7 @@ async function startComputerServices(credentials) {
17023
16789
  const onSigint = () => {
17024
16790
  sigintCount++;
17025
16791
  if (sigintCount === 1) {
17026
- console.log(chalk72.dim("\nPress ^C again to disconnect and exit..."));
16792
+ console.log(chalk67.dim("\nPress ^C again to disconnect and exit..."));
17027
16793
  } else {
17028
16794
  done();
17029
16795
  }
@@ -17033,11 +16799,11 @@ async function startComputerServices(credentials) {
17033
16799
  });
17034
16800
  } finally {
17035
16801
  console.log();
17036
- console.log(chalk72.cyan("Stopping services..."));
16802
+ console.log(chalk67.cyan("Stopping services..."));
17037
16803
  wsgidav.kill("SIGTERM");
17038
16804
  chrome.kill("SIGTERM");
17039
16805
  await stopNgrokTunnels();
17040
- console.log(chalk72.green("\u2713 Services stopped"));
16806
+ console.log(chalk67.green("\u2713 Services stopped"));
17041
16807
  }
17042
16808
  }
17043
16809
 
@@ -17062,10 +16828,10 @@ async function getHeaders2() {
17062
16828
  function renderHelpText(text) {
17063
16829
  return text.replace(
17064
16830
  /\[([^\]]+)\]\(([^)]+)\)/g,
17065
- (_m, label, url) => `${label} (${chalk73.cyan(url)})`
17066
- ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk73.bold(content)).replace(
16831
+ (_m, label, url) => `${label} (${chalk68.cyan(url)})`
16832
+ ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk68.bold(content)).replace(
17067
16833
  /^> (.+)$/gm,
17068
- (_m, content) => chalk73.yellow(` ${content}`)
16834
+ (_m, content) => chalk68.yellow(` ${content}`)
17069
16835
  );
17070
16836
  }
17071
16837
  async function connectViaApiToken(connectorType, tokenValue) {
@@ -17090,7 +16856,7 @@ async function connectViaApiToken(connectorType, tokenValue) {
17090
16856
  for (const [secretName, secretConfig] of secretEntries) {
17091
16857
  if (!secretConfig.required) continue;
17092
16858
  const value = await promptPassword(
17093
- `${secretConfig.label}${secretConfig.placeholder ? chalk73.dim(` (${secretConfig.placeholder})`) : ""}:`
16859
+ `${secretConfig.label}${secretConfig.placeholder ? chalk68.dim(` (${secretConfig.placeholder})`) : ""}:`
17094
16860
  );
17095
16861
  if (!value) {
17096
16862
  throw new Error("Cancelled");
@@ -17106,13 +16872,13 @@ async function connectViaApiToken(connectorType, tokenValue) {
17106
16872
  });
17107
16873
  }
17108
16874
  console.log(
17109
- chalk73.green(`
16875
+ chalk68.green(`
17110
16876
  \u2713 ${config.label} connected successfully via API token!`)
17111
16877
  );
17112
16878
  }
17113
16879
  async function connectComputer(apiUrl, headers) {
17114
16880
  await checkComputerDependencies();
17115
- console.log(chalk73.cyan("Setting up computer connector..."));
16881
+ console.log(chalk68.cyan("Setting up computer connector..."));
17116
16882
  const computerClient = initClient13(computerConnectorContract, {
17117
16883
  baseUrl: apiUrl,
17118
16884
  baseHeaders: headers,
@@ -17127,9 +16893,9 @@ async function connectComputer(apiUrl, headers) {
17127
16893
  }
17128
16894
  const credentials = createResult.body;
17129
16895
  await startComputerServices(credentials);
17130
- console.log(chalk73.cyan("Disconnecting computer connector..."));
16896
+ console.log(chalk68.cyan("Disconnecting computer connector..."));
17131
16897
  await deleteConnector("computer");
17132
- console.log(chalk73.green("\u2713 Disconnected computer"));
16898
+ console.log(chalk68.green("\u2713 Disconnected computer"));
17133
16899
  process.exit(0);
17134
16900
  }
17135
16901
  async function resolveAuthMethod(connectorType, tokenFlag) {
@@ -17168,7 +16934,7 @@ async function resolveAuthMethod(connectorType, tokenFlag) {
17168
16934
  );
17169
16935
  }
17170
16936
  async function connectViaOAuth(connectorType, apiUrl, headers) {
17171
- console.log(`Connecting ${chalk73.cyan(connectorType)}...`);
16937
+ console.log(`Connecting ${chalk68.cyan(connectorType)}...`);
17172
16938
  const sessionsClient = initClient13(connectorSessionsContract, {
17173
16939
  baseUrl: apiUrl,
17174
16940
  baseHeaders: headers,
@@ -17184,8 +16950,8 @@ async function connectViaOAuth(connectorType, apiUrl, headers) {
17184
16950
  }
17185
16951
  const session = createResult.body;
17186
16952
  const verificationUrl = `${apiUrl}${session.verificationUrl}`;
17187
- console.log(chalk73.green("\nSession created"));
17188
- console.log(chalk73.cyan(`
16953
+ console.log(chalk68.green("\nSession created"));
16954
+ console.log(chalk68.cyan(`
17189
16955
  To connect, visit: ${verificationUrl}`));
17190
16956
  console.log(
17191
16957
  `
@@ -17217,7 +16983,7 @@ The session expires in ${Math.floor(session.expiresIn / 60)} minutes.`
17217
16983
  switch (status.status) {
17218
16984
  case "complete":
17219
16985
  console.log(
17220
- chalk73.green(`
16986
+ chalk68.green(`
17221
16987
 
17222
16988
  ${connectorType} connected successfully!`)
17223
16989
  );
@@ -17229,13 +16995,13 @@ ${connectorType} connected successfully!`)
17229
16995
  `Connection failed: ${status.errorMessage || "Unknown error"}`
17230
16996
  );
17231
16997
  case "pending":
17232
- process.stdout.write(chalk73.dim("."));
16998
+ process.stdout.write(chalk68.dim("."));
17233
16999
  break;
17234
17000
  }
17235
17001
  }
17236
17002
  throw new Error("Session timed out, please try again");
17237
17003
  }
17238
- var connectCommand = new Command81().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
17004
+ var connectCommand = new Command76().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
17239
17005
  withErrorHandler(async (type2, options) => {
17240
17006
  const parseResult = connectorTypeSchema.safeParse(type2);
17241
17007
  if (!parseResult.success) {
@@ -17260,9 +17026,9 @@ var connectCommand = new Command81().name("connect").description("Connect a thir
17260
17026
  );
17261
17027
 
17262
17028
  // src/commands/connector/list.ts
17263
- import { Command as Command82 } from "commander";
17264
- import chalk74 from "chalk";
17265
- var listCommand11 = new Command82().name("list").alias("ls").description("List all connectors and their status").action(
17029
+ import { Command as Command77 } from "commander";
17030
+ import chalk69 from "chalk";
17031
+ var listCommand11 = new Command77().name("list").alias("ls").description("List all connectors and their status").action(
17266
17032
  withErrorHandler(async () => {
17267
17033
  const result = await listConnectors();
17268
17034
  const connectedMap = new Map(result.connectors.map((c24) => [c24.type, c24]));
@@ -17284,25 +17050,25 @@ var listCommand11 = new Command82().name("list").alias("ls").description("List a
17284
17050
  statusText.padEnd(statusWidth),
17285
17051
  "ACCOUNT"
17286
17052
  ].join(" ");
17287
- console.log(chalk74.dim(header));
17053
+ console.log(chalk69.dim(header));
17288
17054
  for (const type2 of allTypes) {
17289
17055
  const connector = connectedMap.get(type2);
17290
- const status = connector ? chalk74.green("\u2713".padEnd(statusWidth)) : chalk74.dim("-".padEnd(statusWidth));
17291
- const account = connector?.externalUsername ? `@${connector.externalUsername}` : chalk74.dim("-");
17056
+ const status = connector ? chalk69.green("\u2713".padEnd(statusWidth)) : chalk69.dim("-".padEnd(statusWidth));
17057
+ const account = connector?.externalUsername ? `@${connector.externalUsername}` : chalk69.dim("-");
17292
17058
  const row = [type2.padEnd(typeWidth), status, account].join(" ");
17293
17059
  console.log(row);
17294
17060
  }
17295
17061
  console.log();
17296
- console.log(chalk74.dim("To connect a service:"));
17297
- console.log(chalk74.dim(" vm0 connector connect <type>"));
17062
+ console.log(chalk69.dim("To connect a service:"));
17063
+ console.log(chalk69.dim(" vm0 connector connect <type>"));
17298
17064
  })
17299
17065
  );
17300
17066
 
17301
17067
  // src/commands/connector/status.ts
17302
- import { Command as Command83 } from "commander";
17303
- import chalk75 from "chalk";
17068
+ import { Command as Command78 } from "commander";
17069
+ import chalk70 from "chalk";
17304
17070
  var LABEL_WIDTH = 16;
17305
- var statusCommand8 = new Command83().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
17071
+ var statusCommand8 = new Command78().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
17306
17072
  withErrorHandler(async (type2) => {
17307
17073
  const parseResult = connectorTypeSchema.safeParse(type2);
17308
17074
  if (!parseResult.success) {
@@ -17312,11 +17078,11 @@ var statusCommand8 = new Command83().name("status").description("Show detailed s
17312
17078
  });
17313
17079
  }
17314
17080
  const connector = await getConnector(parseResult.data);
17315
- console.log(`Connector: ${chalk75.cyan(type2)}`);
17081
+ console.log(`Connector: ${chalk70.cyan(type2)}`);
17316
17082
  console.log();
17317
17083
  if (connector) {
17318
17084
  console.log(
17319
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk75.green("connected")}`
17085
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk70.green("connected")}`
17320
17086
  );
17321
17087
  console.log(
17322
17088
  `${"Account:".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`
@@ -17338,23 +17104,23 @@ var statusCommand8 = new Command83().name("status").description("Show detailed s
17338
17104
  );
17339
17105
  }
17340
17106
  console.log();
17341
- console.log(chalk75.dim("To disconnect:"));
17342
- console.log(chalk75.dim(` vm0 connector disconnect ${type2}`));
17107
+ console.log(chalk70.dim("To disconnect:"));
17108
+ console.log(chalk70.dim(` vm0 connector disconnect ${type2}`));
17343
17109
  } else {
17344
17110
  console.log(
17345
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk75.dim("not connected")}`
17111
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk70.dim("not connected")}`
17346
17112
  );
17347
17113
  console.log();
17348
- console.log(chalk75.dim("To connect:"));
17349
- console.log(chalk75.dim(` vm0 connector connect ${type2}`));
17114
+ console.log(chalk70.dim("To connect:"));
17115
+ console.log(chalk70.dim(` vm0 connector connect ${type2}`));
17350
17116
  }
17351
17117
  })
17352
17118
  );
17353
17119
 
17354
17120
  // src/commands/connector/disconnect.ts
17355
- import { Command as Command84 } from "commander";
17356
- import chalk76 from "chalk";
17357
- var disconnectCommand = new Command84().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
17121
+ import { Command as Command79 } from "commander";
17122
+ import chalk71 from "chalk";
17123
+ var disconnectCommand = new Command79().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
17358
17124
  withErrorHandler(async (type2) => {
17359
17125
  const parseResult = connectorTypeSchema.safeParse(type2);
17360
17126
  if (!parseResult.success) {
@@ -17365,33 +17131,33 @@ var disconnectCommand = new Command84().name("disconnect").description("Disconne
17365
17131
  }
17366
17132
  const connectorType = parseResult.data;
17367
17133
  await deleteConnector(connectorType);
17368
- console.log(chalk76.green(`\u2713 Disconnected ${type2}`));
17134
+ console.log(chalk71.green(`\u2713 Disconnected ${type2}`));
17369
17135
  })
17370
17136
  );
17371
17137
 
17372
17138
  // src/commands/connector/index.ts
17373
- var connectorCommand = new Command85().name("connector").description("Manage third-party service connections").addCommand(listCommand11).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
17139
+ var connectorCommand = new Command80().name("connector").description("Manage third-party service connections").addCommand(listCommand11).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
17374
17140
 
17375
17141
  // src/commands/onboard/index.ts
17376
- import { Command as Command86 } from "commander";
17377
- import chalk80 from "chalk";
17142
+ import { Command as Command81 } from "commander";
17143
+ import chalk75 from "chalk";
17378
17144
  import { mkdir as mkdir8 } from "fs/promises";
17379
17145
  import { existsSync as existsSync12 } from "fs";
17380
17146
 
17381
17147
  // src/lib/ui/welcome-box.ts
17382
- import chalk77 from "chalk";
17148
+ import chalk72 from "chalk";
17383
17149
  var gradientColors = [
17384
- chalk77.hex("#FFAB5E"),
17150
+ chalk72.hex("#FFAB5E"),
17385
17151
  // Line 1 - lightest
17386
- chalk77.hex("#FF9642"),
17152
+ chalk72.hex("#FF9642"),
17387
17153
  // Line 2
17388
- chalk77.hex("#FF8228"),
17154
+ chalk72.hex("#FF8228"),
17389
17155
  // Line 3
17390
- chalk77.hex("#FF6D0A"),
17156
+ chalk72.hex("#FF6D0A"),
17391
17157
  // Line 4
17392
- chalk77.hex("#E85D00"),
17158
+ chalk72.hex("#E85D00"),
17393
17159
  // Line 5
17394
- chalk77.hex("#CC4E00")
17160
+ chalk72.hex("#CC4E00")
17395
17161
  // Line 6 - darkest
17396
17162
  ];
17397
17163
  var vm0LogoLines = [
@@ -17413,15 +17179,15 @@ function renderVm0Banner() {
17413
17179
  function renderOnboardWelcome() {
17414
17180
  renderVm0Banner();
17415
17181
  console.log(` Build agentic workflows using natural language.`);
17416
- console.log(` ${chalk77.dim("Currently in beta, enjoy it free")}`);
17182
+ console.log(` ${chalk72.dim("Currently in beta, enjoy it free")}`);
17417
17183
  console.log(
17418
- ` ${chalk77.dim("Star us on GitHub: https://github.com/vm0-ai/vm0")}`
17184
+ ` ${chalk72.dim("Star us on GitHub: https://github.com/vm0-ai/vm0")}`
17419
17185
  );
17420
17186
  console.log();
17421
17187
  }
17422
17188
 
17423
17189
  // src/lib/ui/step-runner.ts
17424
- import chalk78 from "chalk";
17190
+ import chalk73 from "chalk";
17425
17191
  function createStepRunner(options = true) {
17426
17192
  const opts = typeof options === "boolean" ? { interactive: options } : options;
17427
17193
  const interactive = opts.interactive ?? true;
@@ -17436,25 +17202,25 @@ function createStepRunner(options = true) {
17436
17202
  }
17437
17203
  for (const [i, step] of completedSteps.entries()) {
17438
17204
  if (step.failed) {
17439
- console.log(chalk78.red(`\u2717 ${step.label}`));
17205
+ console.log(chalk73.red(`\u2717 ${step.label}`));
17440
17206
  } else {
17441
- console.log(chalk78.green(`\u25CF ${step.label}`));
17207
+ console.log(chalk73.green(`\u25CF ${step.label}`));
17442
17208
  }
17443
17209
  const isLastStep = i === completedSteps.length - 1;
17444
17210
  if (!isLastStep || !isFinal) {
17445
- console.log(chalk78.dim("\u2502"));
17211
+ console.log(chalk73.dim("\u2502"));
17446
17212
  }
17447
17213
  }
17448
17214
  }
17449
17215
  async function executeStep(label, fn, isFinal) {
17450
17216
  let stepFailed = false;
17451
- console.log(chalk78.yellow(`\u25CB ${label}`));
17217
+ console.log(chalk73.yellow(`\u25CB ${label}`));
17452
17218
  const ctx = {
17453
17219
  connector() {
17454
- console.log(chalk78.dim("\u2502"));
17220
+ console.log(chalk73.dim("\u2502"));
17455
17221
  },
17456
17222
  detail(message) {
17457
- console.log(`${chalk78.dim("\u2502")} ${message}`);
17223
+ console.log(`${chalk73.dim("\u2502")} ${message}`);
17458
17224
  },
17459
17225
  async prompt(promptFn) {
17460
17226
  return await promptFn();
@@ -17471,12 +17237,12 @@ function createStepRunner(options = true) {
17471
17237
  redrawCompletedSteps(isFinal);
17472
17238
  } else {
17473
17239
  if (stepFailed) {
17474
- console.log(chalk78.red(`\u2717 ${label}`));
17240
+ console.log(chalk73.red(`\u2717 ${label}`));
17475
17241
  } else {
17476
- console.log(chalk78.green(`\u25CF ${label}`));
17242
+ console.log(chalk73.green(`\u25CF ${label}`));
17477
17243
  }
17478
17244
  if (!isFinal) {
17479
- console.log(chalk78.dim("\u2502"));
17245
+ console.log(chalk73.dim("\u2502"));
17480
17246
  }
17481
17247
  }
17482
17248
  }
@@ -17636,7 +17402,7 @@ async function setupModelProvider(type2, secret, options) {
17636
17402
 
17637
17403
  // src/lib/domain/onboard/claude-setup.ts
17638
17404
  import { spawn as spawn3 } from "child_process";
17639
- import chalk79 from "chalk";
17405
+ import chalk74 from "chalk";
17640
17406
  var MARKETPLACE_NAME = "vm0-skills";
17641
17407
  var MARKETPLACE_REPO = "vm0-ai/vm0-skills";
17642
17408
  var PLUGIN_ID = "vm0@vm0-skills";
@@ -17673,12 +17439,12 @@ async function runClaudeCommand(args, cwd) {
17673
17439
  }
17674
17440
  function handlePluginError(error, context) {
17675
17441
  const displayContext = context ?? "Claude plugin";
17676
- console.error(chalk79.red(`\u2717 Failed to install ${displayContext}`));
17442
+ console.error(chalk74.red(`\u2717 Failed to install ${displayContext}`));
17677
17443
  if (error instanceof Error) {
17678
- console.error(chalk79.red(`\u2717 ${error.message}`));
17444
+ console.error(chalk74.red(`\u2717 ${error.message}`));
17679
17445
  }
17680
17446
  console.error(
17681
- chalk79.dim("Please ensure Claude CLI is installed and accessible.")
17447
+ chalk74.dim("Please ensure Claude CLI is installed and accessible.")
17682
17448
  );
17683
17449
  process.exit(1);
17684
17450
  }
@@ -17721,7 +17487,7 @@ async function updateMarketplace() {
17721
17487
  ]);
17722
17488
  if (!result.success) {
17723
17489
  console.warn(
17724
- chalk79.yellow(
17490
+ chalk74.yellow(
17725
17491
  `Warning: Could not update marketplace: ${result.error ?? "unknown error"}`
17726
17492
  )
17727
17493
  );
@@ -17767,9 +17533,9 @@ async function handleAuthentication(ctx) {
17767
17533
  onInitiating: () => {
17768
17534
  },
17769
17535
  onDeviceCodeReady: (url, code, expiresIn) => {
17770
- step.detail(`Copy code: ${chalk80.cyan.bold(code)}`);
17771
- step.detail(`Open: ${chalk80.cyan(url)}`);
17772
- step.detail(chalk80.dim(`Expires in ${expiresIn} minutes`));
17536
+ step.detail(`Copy code: ${chalk75.cyan.bold(code)}`);
17537
+ step.detail(`Open: ${chalk75.cyan(url)}`);
17538
+ step.detail(chalk75.dim(`Expires in ${expiresIn} minutes`));
17773
17539
  },
17774
17540
  onPolling: () => {
17775
17541
  },
@@ -17809,14 +17575,14 @@ async function handleModelProvider(ctx) {
17809
17575
  const selectedChoice = choices.find((c24) => c24.type === providerType);
17810
17576
  if (selectedChoice?.helpText) {
17811
17577
  for (const line of selectedChoice.helpText.split("\n")) {
17812
- step.detail(chalk80.dim(line));
17578
+ step.detail(chalk75.dim(line));
17813
17579
  }
17814
17580
  }
17815
17581
  const secret = await step.prompt(
17816
17582
  () => promptPassword(`Enter your ${selectedChoice?.secretLabel ?? "secret"}:`)
17817
17583
  );
17818
17584
  if (!secret) {
17819
- console.log(chalk80.dim("Cancelled"));
17585
+ console.log(chalk75.dim("Cancelled"));
17820
17586
  process.exit(0);
17821
17587
  }
17822
17588
  let selectedModel;
@@ -17835,7 +17601,7 @@ async function handleModelProvider(ctx) {
17835
17601
  () => promptSelect("Select model:", modelChoices)
17836
17602
  );
17837
17603
  if (modelSelection === void 0) {
17838
- console.log(chalk80.dim("Cancelled"));
17604
+ console.log(chalk75.dim("Cancelled"));
17839
17605
  process.exit(0);
17840
17606
  }
17841
17607
  selectedModel = modelSelection === "" ? void 0 : modelSelection;
@@ -17845,7 +17611,7 @@ async function handleModelProvider(ctx) {
17845
17611
  });
17846
17612
  const modelNote = result.provider.selectedModel ? ` with model: ${result.provider.selectedModel}` : "";
17847
17613
  step.detail(
17848
- chalk80.green(
17614
+ chalk75.green(
17849
17615
  `${providerType} ${result.created ? "created" : "updated"}${result.isDefault ? ` (default for ${result.framework})` : ""}${modelNote}`
17850
17616
  )
17851
17617
  );
@@ -17876,7 +17642,7 @@ async function handleAgentCreation(ctx) {
17876
17642
  agentName = inputName;
17877
17643
  if (existsSync12(agentName)) {
17878
17644
  step.detail(
17879
- chalk80.yellow(`${agentName}/ already exists, choose another name`)
17645
+ chalk75.yellow(`${agentName}/ already exists, choose another name`)
17880
17646
  );
17881
17647
  } else {
17882
17648
  folderExists = false;
@@ -17897,7 +17663,7 @@ async function handleAgentCreation(ctx) {
17897
17663
  }
17898
17664
  }
17899
17665
  await mkdir8(agentName, { recursive: true });
17900
- step.detail(chalk80.green(`Created ${agentName}/`));
17666
+ step.detail(chalk75.green(`Created ${agentName}/`));
17901
17667
  });
17902
17668
  return agentName;
17903
17669
  }
@@ -17913,7 +17679,7 @@ async function handlePluginInstallation(ctx, agentName) {
17913
17679
  shouldInstall = confirmed ?? true;
17914
17680
  }
17915
17681
  if (!shouldInstall) {
17916
- step.detail(chalk80.dim("Skipped"));
17682
+ step.detail(chalk75.dim("Skipped"));
17917
17683
  return;
17918
17684
  }
17919
17685
  const scope = "project";
@@ -17921,7 +17687,7 @@ async function handlePluginInstallation(ctx, agentName) {
17921
17687
  const agentDir = `${process.cwd()}/${agentName}`;
17922
17688
  const result = await installVm0Plugin(scope, agentDir);
17923
17689
  step.detail(
17924
- chalk80.green(`Installed ${result.pluginId} (scope: ${result.scope})`)
17690
+ chalk75.green(`Installed ${result.pluginId} (scope: ${result.scope})`)
17925
17691
  );
17926
17692
  pluginInstalled = true;
17927
17693
  } catch (error) {
@@ -17932,18 +17698,18 @@ async function handlePluginInstallation(ctx, agentName) {
17932
17698
  }
17933
17699
  function printNextSteps(agentName, pluginInstalled) {
17934
17700
  console.log();
17935
- console.log(chalk80.bold("Next step:"));
17701
+ console.log(chalk75.bold("Next step:"));
17936
17702
  console.log();
17937
17703
  if (pluginInstalled) {
17938
17704
  console.log(
17939
- ` ${chalk80.cyan(`cd ${agentName} && claude "/${PRIMARY_SKILL_NAME} let's build an agent"`)}`
17705
+ ` ${chalk75.cyan(`cd ${agentName} && claude "/${PRIMARY_SKILL_NAME} let's build an agent"`)}`
17940
17706
  );
17941
17707
  } else {
17942
- console.log(` ${chalk80.cyan(`cd ${agentName} && vm0 init`)}`);
17708
+ console.log(` ${chalk75.cyan(`cd ${agentName} && vm0 init`)}`);
17943
17709
  }
17944
17710
  console.log();
17945
17711
  }
17946
- var onboardCommand = new Command86().name("onboard").description("Guided setup for new VM0 users").option("-y, --yes", "Skip confirmation prompts").option("--name <name>", `Agent name (default: ${DEFAULT_AGENT_NAME})`).action(
17712
+ var onboardCommand = new Command81().name("onboard").description("Guided setup for new VM0 users").option("-y, --yes", "Skip confirmation prompts").option("--name <name>", `Agent name (default: ${DEFAULT_AGENT_NAME})`).action(
17947
17713
  withErrorHandler(async (options) => {
17948
17714
  const interactive = isInteractive();
17949
17715
  if (interactive) {
@@ -17968,21 +17734,21 @@ var onboardCommand = new Command86().name("onboard").description("Guided setup f
17968
17734
  );
17969
17735
 
17970
17736
  // src/commands/setup-claude/index.ts
17971
- import { Command as Command87 } from "commander";
17972
- import chalk81 from "chalk";
17973
- var setupClaudeCommand = new Command87().name("setup-claude").description("Install VM0 Claude Plugin").option("--agent-dir <dir>", "Agent directory to run install in").option("--scope <scope>", "Installation scope (user or project)", "project").action(
17737
+ import { Command as Command82 } from "commander";
17738
+ import chalk76 from "chalk";
17739
+ var setupClaudeCommand = new Command82().name("setup-claude").description("Install VM0 Claude Plugin").option("--agent-dir <dir>", "Agent directory to run install in").option("--scope <scope>", "Installation scope (user or project)", "project").action(
17974
17740
  withErrorHandler(async (options) => {
17975
- console.log(chalk81.dim("Installing VM0 Claude Plugin..."));
17741
+ console.log(chalk76.dim("Installing VM0 Claude Plugin..."));
17976
17742
  const scope = options.scope === "user" ? "user" : "project";
17977
17743
  const result = await installVm0Plugin(scope, options.agentDir);
17978
17744
  console.log(
17979
- chalk81.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
17745
+ chalk76.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
17980
17746
  );
17981
17747
  console.log();
17982
17748
  console.log("Next step:");
17983
17749
  const cdPrefix = options.agentDir ? `cd ${options.agentDir} && ` : "";
17984
17750
  console.log(
17985
- chalk81.cyan(
17751
+ chalk76.cyan(
17986
17752
  ` ${cdPrefix}claude "/${PRIMARY_SKILL_NAME} let's build a workflow"`
17987
17753
  )
17988
17754
  );
@@ -17990,36 +17756,36 @@ var setupClaudeCommand = new Command87().name("setup-claude").description("Insta
17990
17756
  );
17991
17757
 
17992
17758
  // src/commands/dashboard/index.ts
17993
- import { Command as Command88 } from "commander";
17994
- import chalk82 from "chalk";
17995
- var dashboardCommand = new Command88().name("dashboard").description("Quick reference for common query commands").action(() => {
17759
+ import { Command as Command83 } from "commander";
17760
+ import chalk77 from "chalk";
17761
+ var dashboardCommand = new Command83().name("dashboard").description("Quick reference for common query commands").action(() => {
17996
17762
  console.log();
17997
- console.log(chalk82.bold("VM0 Dashboard"));
17763
+ console.log(chalk77.bold("VM0 Dashboard"));
17998
17764
  console.log();
17999
- console.log(chalk82.bold("Agents"));
18000
- console.log(chalk82.dim(" List agents: ") + "vm0 agent list");
17765
+ console.log(chalk77.bold("Agents"));
17766
+ console.log(chalk77.dim(" List agents: ") + "vm0 agent list");
18001
17767
  console.log();
18002
- console.log(chalk82.bold("Runs"));
18003
- console.log(chalk82.dim(" Recent runs: ") + "vm0 run list");
18004
- console.log(chalk82.dim(" View run logs: ") + "vm0 logs <run-id>");
17768
+ console.log(chalk77.bold("Runs"));
17769
+ console.log(chalk77.dim(" Recent runs: ") + "vm0 run list");
17770
+ console.log(chalk77.dim(" View run logs: ") + "vm0 logs <run-id>");
18005
17771
  console.log();
18006
- console.log(chalk82.bold("Schedules"));
18007
- console.log(chalk82.dim(" List schedules: ") + "vm0 schedule list");
17772
+ console.log(chalk77.bold("Schedules"));
17773
+ console.log(chalk77.dim(" List schedules: ") + "vm0 schedule list");
18008
17774
  console.log();
18009
- console.log(chalk82.bold("Account"));
18010
- console.log(chalk82.dim(" Usage stats: ") + "vm0 usage");
18011
- console.log(chalk82.dim(" List secrets: ") + "vm0 secret list");
18012
- console.log(chalk82.dim(" List variables: ") + "vm0 variable list");
17775
+ console.log(chalk77.bold("Account"));
17776
+ console.log(chalk77.dim(" Usage stats: ") + "vm0 usage");
17777
+ console.log(chalk77.dim(" List secrets: ") + "vm0 secret list");
17778
+ console.log(chalk77.dim(" List variables: ") + "vm0 variable list");
18013
17779
  console.log();
18014
17780
  console.log(
18015
- chalk82.dim("Not logged in? Run: ") + chalk82.cyan("vm0 auth login")
17781
+ chalk77.dim("Not logged in? Run: ") + chalk77.cyan("vm0 auth login")
18016
17782
  );
18017
17783
  console.log();
18018
17784
  });
18019
17785
 
18020
17786
  // src/commands/preference/index.ts
18021
- import { Command as Command89 } from "commander";
18022
- import chalk83 from "chalk";
17787
+ import { Command as Command84 } from "commander";
17788
+ import chalk78 from "chalk";
18023
17789
  function detectTimezone2() {
18024
17790
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
18025
17791
  }
@@ -18040,15 +17806,15 @@ function parseOnOff(flag, value) {
18040
17806
  );
18041
17807
  }
18042
17808
  function displayPreferences(prefs) {
18043
- console.log(chalk83.bold("Current preferences:"));
17809
+ console.log(chalk78.bold("Current preferences:"));
18044
17810
  console.log(
18045
- ` Timezone: ${prefs.timezone ? chalk83.cyan(prefs.timezone) : chalk83.dim("not set")}`
17811
+ ` Timezone: ${prefs.timezone ? chalk78.cyan(prefs.timezone) : chalk78.dim("not set")}`
18046
17812
  );
18047
17813
  console.log(
18048
- ` Email notify: ${prefs.notifyEmail ? chalk83.green("on") : chalk83.dim("off")}`
17814
+ ` Email notify: ${prefs.notifyEmail ? chalk78.green("on") : chalk78.dim("off")}`
18049
17815
  );
18050
17816
  console.log(
18051
- ` Slack notify: ${prefs.notifySlack ? chalk83.green("on") : chalk83.dim("off")}`
17817
+ ` Slack notify: ${prefs.notifySlack ? chalk78.green("on") : chalk78.dim("off")}`
18052
17818
  );
18053
17819
  }
18054
17820
  function buildUpdates(opts) {
@@ -18078,21 +17844,21 @@ function buildUpdates(opts) {
18078
17844
  function printUpdateResult(updates, result) {
18079
17845
  if (updates.timezone !== void 0) {
18080
17846
  console.log(
18081
- chalk83.green(
18082
- `Timezone set to ${chalk83.cyan(result.timezone ?? updates.timezone)}`
17847
+ chalk78.green(
17848
+ `Timezone set to ${chalk78.cyan(result.timezone ?? updates.timezone)}`
18083
17849
  )
18084
17850
  );
18085
17851
  }
18086
17852
  if (updates.notifyEmail !== void 0) {
18087
17853
  console.log(
18088
- chalk83.green(
17854
+ chalk78.green(
18089
17855
  `Email notifications ${result.notifyEmail ? "enabled" : "disabled"}`
18090
17856
  )
18091
17857
  );
18092
17858
  }
18093
17859
  if (updates.notifySlack !== void 0) {
18094
17860
  console.log(
18095
- chalk83.green(
17861
+ chalk78.green(
18096
17862
  `Slack notifications ${result.notifySlack ? "enabled" : "disabled"}`
18097
17863
  )
18098
17864
  );
@@ -18101,7 +17867,7 @@ function printUpdateResult(updates, result) {
18101
17867
  async function interactiveSetup(prefs) {
18102
17868
  if (!prefs.timezone) {
18103
17869
  const detectedTz = detectTimezone2();
18104
- console.log(chalk83.dim(`
17870
+ console.log(chalk78.dim(`
18105
17871
  System timezone detected: ${detectedTz}`));
18106
17872
  const tz = await promptText(
18107
17873
  "Set timezone? (enter timezone or leave empty to skip)",
@@ -18112,7 +17878,7 @@ System timezone detected: ${detectedTz}`));
18112
17878
  throw new Error(`Invalid timezone: ${tz.trim()}`);
18113
17879
  }
18114
17880
  await updateUserPreferences({ timezone: tz.trim() });
18115
- console.log(chalk83.green(`Timezone set to ${chalk83.cyan(tz.trim())}`));
17881
+ console.log(chalk78.green(`Timezone set to ${chalk78.cyan(tz.trim())}`));
18116
17882
  }
18117
17883
  }
18118
17884
  if (!prefs.notifyEmail) {
@@ -18122,11 +17888,11 @@ System timezone detected: ${detectedTz}`));
18122
17888
  );
18123
17889
  if (enable) {
18124
17890
  await updateUserPreferences({ notifyEmail: true });
18125
- console.log(chalk83.green("Email notifications enabled"));
17891
+ console.log(chalk78.green("Email notifications enabled"));
18126
17892
  }
18127
17893
  }
18128
17894
  }
18129
- var preferenceCommand = new Command89().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
17895
+ var preferenceCommand = new Command84().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
18130
17896
  withErrorHandler(async (opts) => {
18131
17897
  const updates = buildUpdates(opts);
18132
17898
  if (updates) {
@@ -18141,32 +17907,32 @@ var preferenceCommand = new Command89().name("preference").description("View or
18141
17907
  } else if (!prefs.timezone) {
18142
17908
  console.log();
18143
17909
  console.log(
18144
- `To set timezone: ${chalk83.cyan("vm0 preference --timezone <timezone>")}`
17910
+ `To set timezone: ${chalk78.cyan("vm0 preference --timezone <timezone>")}`
18145
17911
  );
18146
17912
  console.log(
18147
- chalk83.dim("Example: vm0 preference --timezone America/New_York")
17913
+ chalk78.dim("Example: vm0 preference --timezone America/New_York")
18148
17914
  );
18149
17915
  }
18150
17916
  })
18151
17917
  );
18152
17918
 
18153
17919
  // src/commands/upgrade/index.ts
18154
- import { Command as Command90 } from "commander";
18155
- import chalk84 from "chalk";
18156
- var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
17920
+ import { Command as Command85 } from "commander";
17921
+ import chalk79 from "chalk";
17922
+ var upgradeCommand = new Command85().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
18157
17923
  withErrorHandler(async () => {
18158
17924
  console.log("Checking for updates...");
18159
17925
  const latestVersion = await getLatestVersion();
18160
17926
  if (latestVersion === null) {
18161
17927
  throw new Error("Could not check for updates. Please try again later.");
18162
17928
  }
18163
- if (latestVersion === "9.59.6") {
18164
- console.log(chalk84.green(`\u2713 Already up to date (${"9.59.6"})`));
17929
+ if (latestVersion === "9.60.1") {
17930
+ console.log(chalk79.green(`\u2713 Already up to date (${"9.60.1"})`));
18165
17931
  return;
18166
17932
  }
18167
17933
  console.log(
18168
- chalk84.yellow(
18169
- `Current version: ${"9.59.6"} -> Latest version: ${latestVersion}`
17934
+ chalk79.yellow(
17935
+ `Current version: ${"9.60.1"} -> Latest version: ${latestVersion}`
18170
17936
  )
18171
17937
  );
18172
17938
  console.log();
@@ -18174,26 +17940,26 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
18174
17940
  if (!isAutoUpgradeSupported(packageManager)) {
18175
17941
  if (packageManager === "unknown") {
18176
17942
  console.log(
18177
- chalk84.yellow(
17943
+ chalk79.yellow(
18178
17944
  "Could not detect your package manager for auto-upgrade."
18179
17945
  )
18180
17946
  );
18181
17947
  } else {
18182
17948
  console.log(
18183
- chalk84.yellow(
17949
+ chalk79.yellow(
18184
17950
  `Auto-upgrade is not supported for ${packageManager}.`
18185
17951
  )
18186
17952
  );
18187
17953
  }
18188
- console.log(chalk84.yellow("Please upgrade manually:"));
18189
- console.log(chalk84.cyan(` ${getManualUpgradeCommand(packageManager)}`));
17954
+ console.log(chalk79.yellow("Please upgrade manually:"));
17955
+ console.log(chalk79.cyan(` ${getManualUpgradeCommand(packageManager)}`));
18190
17956
  return;
18191
17957
  }
18192
17958
  console.log(`Upgrading via ${packageManager}...`);
18193
17959
  const success = await performUpgrade(packageManager);
18194
17960
  if (success) {
18195
17961
  console.log(
18196
- chalk84.green(`\u2713 Upgraded from ${"9.59.6"} to ${latestVersion}`)
17962
+ chalk79.green(`\u2713 Upgraded from ${"9.60.1"} to ${latestVersion}`)
18197
17963
  );
18198
17964
  return;
18199
17965
  }
@@ -18206,8 +17972,8 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
18206
17972
  );
18207
17973
 
18208
17974
  // src/index.ts
18209
- var program = new Command91();
18210
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.59.6");
17975
+ var program = new Command86();
17976
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.60.1");
18211
17977
  program.addCommand(authCommand);
18212
17978
  program.addCommand(infoCommand);
18213
17979
  program.addCommand(composeCommand);