@vm0/cli 9.59.6 → 9.60.0

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