@vm0/cli 9.58.0 → 9.59.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 +745 -720
  2. package/package.json +2 -2
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.58.0",
48
+ release: "9.59.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.58.0",
67
+ version: "9.59.0",
68
68
  command: process.argv.slice(2).join(" ")
69
69
  });
70
70
  Sentry.setContext("runtime", {
@@ -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.58.0"}`));
676
+ console.log(chalk4.bold(`VM0 CLI v${"9.59.0"}`));
677
677
  console.log();
678
678
  const config = await loadConfig();
679
679
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -704,7 +704,7 @@ var infoCommand = new Command6().name("info").description("Display environment a
704
704
 
705
705
  // src/commands/compose/index.ts
706
706
  import { Command as Command7, Option } from "commander";
707
- import chalk5 from "chalk";
707
+ import chalk6 from "chalk";
708
708
  import { readFile as readFile4, rm as rm3 } from "fs/promises";
709
709
  import { existsSync as existsSync5 } from "fs";
710
710
  import { dirname as dirname2, join as join8 } from "path";
@@ -871,6 +871,8 @@ var storedExecutionContextSchema = z3.object({
871
871
  resumeSession: resumeSessionSchema.nullable(),
872
872
  encryptedSecrets: z3.string().nullable(),
873
873
  // AES-256-GCM encrypted Record<string, string> (secret name → value)
874
+ // Maps secret names to OAuth connector types for runtime token refresh (e.g. { "GMAIL_ACCESS_TOKEN": "gmail" })
875
+ secretConnectorMap: z3.record(z3.string(), z3.string()).nullable().optional(),
874
876
  cliAgentType: z3.string(),
875
877
  experimentalFirewall: experimentalFirewallSchema.optional(),
876
878
  // Debug flag to force real Claude in mock environments (internal use only)
@@ -902,6 +904,8 @@ var executionContextSchema = z3.object({
902
904
  secretValues: z3.array(z3.string()).nullable(),
903
905
  // AES-256-GCM encrypted Record<string, string> — passed through to mitm-addon for auth resolution
904
906
  encryptedSecrets: z3.string().nullable(),
907
+ // Maps secret names to OAuth connector types for runtime token refresh
908
+ secretConnectorMap: z3.record(z3.string(), z3.string()).nullable().optional(),
905
909
  cliAgentType: z3.string(),
906
910
  // Experimental firewall configuration
907
911
  experimentalFirewall: experimentalFirewallSchema.optional(),
@@ -6448,11 +6452,12 @@ var computerConnectorContract = c18.router({
6448
6452
  function bearerAuth(secretName) {
6449
6453
  return { headers: { Authorization: `Bearer \${secrets.${secretName}}` } };
6450
6454
  }
6451
- function fullAccess(name = "full-access") {
6452
- return { name, rules: ["ANY /{path+}"] };
6453
- }
6454
- function api(base, auth, permissionName = "full-access") {
6455
- return { base, auth, permissions: [fullAccess(permissionName)] };
6455
+ var FULL_ACCESS_PERMISSION = {
6456
+ name: "full-access",
6457
+ rules: ["ANY /{path+}"]
6458
+ };
6459
+ function api(base, auth) {
6460
+ return { base, auth, permissions: [FULL_ACCESS_PERMISSION] };
6456
6461
  }
6457
6462
  var SERVICE_CONFIGS = {
6458
6463
  ahrefs: {
@@ -6655,16 +6660,8 @@ var SERVICE_CONFIGS = {
6655
6660
  },
6656
6661
  slack: {
6657
6662
  apis: [
6658
- api(
6659
- "https://slack.com/api",
6660
- bearerAuth("SLACK_TOKEN"),
6661
- "api-full-access"
6662
- ),
6663
- api(
6664
- "https://files.slack.com",
6665
- bearerAuth("SLACK_TOKEN"),
6666
- "files-full-access"
6667
- )
6663
+ api("https://slack.com/api", bearerAuth("SLACK_TOKEN")),
6664
+ api("https://files.slack.com", bearerAuth("SLACK_TOKEN"))
6668
6665
  ],
6669
6666
  placeholders: {
6670
6667
  SLACK_TOKEN: "xoxb-0000-0000-vm0placeholder"
@@ -6672,30 +6669,14 @@ var SERVICE_CONFIGS = {
6672
6669
  },
6673
6670
  docusign: {
6674
6671
  apis: [
6675
- api(
6676
- "https://demo.docusign.net/restapi",
6677
- bearerAuth("DOCUSIGN_TOKEN"),
6678
- "demo-full-access"
6679
- ),
6680
- api(
6681
- "https://na1.docusign.net/restapi",
6682
- bearerAuth("DOCUSIGN_TOKEN"),
6683
- "na1-full-access"
6684
- )
6672
+ api("https://demo.docusign.net/restapi", bearerAuth("DOCUSIGN_TOKEN")),
6673
+ api("https://na1.docusign.net/restapi", bearerAuth("DOCUSIGN_TOKEN"))
6685
6674
  ]
6686
6675
  },
6687
6676
  dropbox: {
6688
6677
  apis: [
6689
- api(
6690
- "https://api.dropboxapi.com/2",
6691
- bearerAuth("DROPBOX_TOKEN"),
6692
- "api-full-access"
6693
- ),
6694
- api(
6695
- "https://content.dropboxapi.com/2",
6696
- bearerAuth("DROPBOX_TOKEN"),
6697
- "content-full-access"
6698
- )
6678
+ api("https://api.dropboxapi.com/2", bearerAuth("DROPBOX_TOKEN")),
6679
+ api("https://content.dropboxapi.com/2", bearerAuth("DROPBOX_TOKEN"))
6699
6680
  ]
6700
6681
  },
6701
6682
  linear: {
@@ -6703,21 +6684,9 @@ var SERVICE_CONFIGS = {
6703
6684
  },
6704
6685
  intercom: {
6705
6686
  apis: [
6706
- api(
6707
- "https://api.intercom.io",
6708
- bearerAuth("INTERCOM_TOKEN"),
6709
- "us-full-access"
6710
- ),
6711
- api(
6712
- "https://api.eu.intercom.io",
6713
- bearerAuth("INTERCOM_TOKEN"),
6714
- "eu-full-access"
6715
- ),
6716
- api(
6717
- "https://api.au.intercom.io",
6718
- bearerAuth("INTERCOM_TOKEN"),
6719
- "au-full-access"
6720
- )
6687
+ api("https://api.intercom.io", bearerAuth("INTERCOM_TOKEN")),
6688
+ api("https://api.eu.intercom.io", bearerAuth("INTERCOM_TOKEN")),
6689
+ api("https://api.au.intercom.io", bearerAuth("INTERCOM_TOKEN"))
6721
6690
  ]
6722
6691
  },
6723
6692
  jam: {
@@ -6725,24 +6694,16 @@ var SERVICE_CONFIGS = {
6725
6694
  },
6726
6695
  jotform: {
6727
6696
  apis: [
6728
- api(
6729
- "https://api.jotform.com",
6730
- {
6731
- headers: {
6732
- APIKEY: "${secrets.JOTFORM_TOKEN}"
6733
- }
6734
- },
6735
- "us-full-access"
6736
- ),
6737
- api(
6738
- "https://eu-api.jotform.com",
6739
- {
6740
- headers: {
6741
- APIKEY: "${secrets.JOTFORM_TOKEN}"
6742
- }
6743
- },
6744
- "eu-full-access"
6745
- )
6697
+ api("https://api.jotform.com", {
6698
+ headers: {
6699
+ APIKEY: "${secrets.JOTFORM_TOKEN}"
6700
+ }
6701
+ }),
6702
+ api("https://eu-api.jotform.com", {
6703
+ headers: {
6704
+ APIKEY: "${secrets.JOTFORM_TOKEN}"
6705
+ }
6706
+ })
6746
6707
  ]
6747
6708
  },
6748
6709
  line: {
@@ -6750,42 +6711,26 @@ var SERVICE_CONFIGS = {
6750
6711
  },
6751
6712
  make: {
6752
6713
  apis: [
6753
- api(
6754
- "https://eu1.make.com/api/v2",
6755
- {
6756
- headers: {
6757
- Authorization: "Token ${secrets.MAKE_TOKEN}"
6758
- }
6759
- },
6760
- "eu1-full-access"
6761
- ),
6762
- api(
6763
- "https://eu2.make.com/api/v2",
6764
- {
6765
- headers: {
6766
- Authorization: "Token ${secrets.MAKE_TOKEN}"
6767
- }
6768
- },
6769
- "eu2-full-access"
6770
- ),
6771
- api(
6772
- "https://us1.make.com/api/v2",
6773
- {
6774
- headers: {
6775
- Authorization: "Token ${secrets.MAKE_TOKEN}"
6776
- }
6777
- },
6778
- "us1-full-access"
6779
- ),
6780
- api(
6781
- "https://us2.make.com/api/v2",
6782
- {
6783
- headers: {
6784
- Authorization: "Token ${secrets.MAKE_TOKEN}"
6785
- }
6786
- },
6787
- "us2-full-access"
6788
- )
6714
+ api("https://eu1.make.com/api/v2", {
6715
+ headers: {
6716
+ Authorization: "Token ${secrets.MAKE_TOKEN}"
6717
+ }
6718
+ }),
6719
+ api("https://eu2.make.com/api/v2", {
6720
+ headers: {
6721
+ Authorization: "Token ${secrets.MAKE_TOKEN}"
6722
+ }
6723
+ }),
6724
+ api("https://us1.make.com/api/v2", {
6725
+ headers: {
6726
+ Authorization: "Token ${secrets.MAKE_TOKEN}"
6727
+ }
6728
+ }),
6729
+ api("https://us2.make.com/api/v2", {
6730
+ headers: {
6731
+ Authorization: "Token ${secrets.MAKE_TOKEN}"
6732
+ }
6733
+ })
6789
6734
  ]
6790
6735
  },
6791
6736
  metabase: {
@@ -6870,16 +6815,8 @@ var SERVICE_CONFIGS = {
6870
6815
  },
6871
6816
  posthog: {
6872
6817
  apis: [
6873
- api(
6874
- "https://us.posthog.com/api",
6875
- bearerAuth("POSTHOG_ACCESS_TOKEN"),
6876
- "us-full-access"
6877
- ),
6878
- api(
6879
- "https://app.posthog.com/api",
6880
- bearerAuth("POSTHOG_ACCESS_TOKEN"),
6881
- "cloud-full-access"
6882
- )
6818
+ api("https://us.posthog.com/api", bearerAuth("POSTHOG_ACCESS_TOKEN")),
6819
+ api("https://app.posthog.com/api", bearerAuth("POSTHOG_ACCESS_TOKEN"))
6883
6820
  ]
6884
6821
  },
6885
6822
  stripe: {
@@ -6911,8 +6848,7 @@ var SERVICE_CONFIGS = {
6911
6848
  { length: 21 },
6912
6849
  (_, i) => api(
6913
6850
  `https://us${i + 1}.api.mailchimp.com/3.0`,
6914
- bearerAuth("MAILCHIMP_TOKEN"),
6915
- `us${i + 1}-full-access`
6851
+ bearerAuth("MAILCHIMP_TOKEN")
6916
6852
  )
6917
6853
  )
6918
6854
  },
@@ -7281,6 +7217,40 @@ var onboardingStatusContract = c22.router({
7281
7217
  }
7282
7218
  });
7283
7219
 
7220
+ // ../../packages/core/src/contracts/skills.ts
7221
+ import { z as z25 } from "zod";
7222
+ var c23 = initContract();
7223
+ var skillFrontmatterSchema = z25.object({
7224
+ name: z25.string().optional(),
7225
+ description: z25.string().optional(),
7226
+ vm0_secrets: z25.array(z25.string()).optional(),
7227
+ vm0_vars: z25.array(z25.string()).optional()
7228
+ });
7229
+ var resolvedSkillSchema = z25.object({
7230
+ storageName: z25.string(),
7231
+ versionHash: z25.string(),
7232
+ frontmatter: skillFrontmatterSchema
7233
+ });
7234
+ var skillsResolveContract = c23.router({
7235
+ resolve: {
7236
+ method: "POST",
7237
+ path: "/api/skills/resolve",
7238
+ headers: authHeadersSchema,
7239
+ body: z25.object({
7240
+ skills: z25.array(z25.string().url()).min(1).max(100)
7241
+ }),
7242
+ responses: {
7243
+ 200: z25.object({
7244
+ resolved: z25.record(z25.string(), resolvedSkillSchema),
7245
+ unresolved: z25.array(z25.string())
7246
+ }),
7247
+ 400: apiErrorSchema,
7248
+ 401: apiErrorSchema
7249
+ },
7250
+ summary: "Batch resolve skill URLs to cached version info"
7251
+ }
7252
+ });
7253
+
7284
7254
  // ../../packages/core/src/org-reference.ts
7285
7255
  function isLegacySystemTemplate(reference) {
7286
7256
  return reference.startsWith("vm0-");
@@ -8416,9 +8386,45 @@ async function updateUserPreferences(body) {
8416
8386
  handleError(result, "Failed to update user preferences");
8417
8387
  }
8418
8388
 
8389
+ // src/lib/api/domains/skills.ts
8390
+ import chalk5 from "chalk";
8391
+ function isResolveSkillsResponse(value) {
8392
+ if (typeof value !== "object" || value === null) return false;
8393
+ const obj = value;
8394
+ return typeof obj.resolved === "object" && obj.resolved !== null && Array.isArray(obj.unresolved);
8395
+ }
8396
+ async function resolveSkills(skillUrls) {
8397
+ try {
8398
+ const response = await httpPost("/api/skills/resolve", {
8399
+ skills: skillUrls
8400
+ });
8401
+ if (!response.ok) {
8402
+ console.error(
8403
+ chalk5.dim(" Skill resolve unavailable, downloading all skills")
8404
+ );
8405
+ return { resolved: {}, unresolved: skillUrls };
8406
+ }
8407
+ const body = await response.json();
8408
+ if (!isResolveSkillsResponse(body)) {
8409
+ console.error(
8410
+ chalk5.dim(
8411
+ " Skill resolve returned unexpected format, downloading all skills"
8412
+ )
8413
+ );
8414
+ return { resolved: {}, unresolved: skillUrls };
8415
+ }
8416
+ return body;
8417
+ } catch {
8418
+ console.error(
8419
+ chalk5.dim(" Skill resolve unavailable, downloading all skills")
8420
+ );
8421
+ return { resolved: {}, unresolved: skillUrls };
8422
+ }
8423
+ }
8424
+
8419
8425
  // src/lib/domain/yaml-validator.ts
8420
- import { z as z25 } from "zod";
8421
- var cliAgentNameSchema = z25.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
8426
+ import { z as z26 } from "zod";
8427
+ var cliAgentNameSchema = z26.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
8422
8428
  /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$/,
8423
8429
  "Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens"
8424
8430
  );
@@ -8432,7 +8438,7 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
8432
8438
  resolveSkillRef(skillRef);
8433
8439
  } catch (error) {
8434
8440
  ctx.addIssue({
8435
- code: z25.ZodIssueCode.custom,
8441
+ code: z26.ZodIssueCode.custom,
8436
8442
  message: error instanceof Error ? error.message : `Invalid skill reference: ${skillRef}`,
8437
8443
  path: ["skills", i]
8438
8444
  });
@@ -8442,15 +8448,15 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
8442
8448
  }
8443
8449
  }
8444
8450
  );
8445
- var cliComposeSchema = z25.object({
8446
- version: z25.string().min(1, "Missing config.version"),
8447
- agents: z25.record(cliAgentNameSchema, cliAgentDefinitionSchema),
8448
- volumes: z25.record(z25.string(), volumeConfigSchema).optional()
8451
+ var cliComposeSchema = z26.object({
8452
+ version: z26.string().min(1, "Missing config.version"),
8453
+ agents: z26.record(cliAgentNameSchema, cliAgentDefinitionSchema),
8454
+ volumes: z26.record(z26.string(), volumeConfigSchema).optional()
8449
8455
  }).superRefine((config, ctx) => {
8450
8456
  const agentKeys = Object.keys(config.agents);
8451
8457
  if (agentKeys.length === 0) {
8452
8458
  ctx.addIssue({
8453
- code: z25.ZodIssueCode.custom,
8459
+ code: z26.ZodIssueCode.custom,
8454
8460
  message: "agents must have at least one agent defined",
8455
8461
  path: ["agents"]
8456
8462
  });
@@ -8458,7 +8464,7 @@ var cliComposeSchema = z25.object({
8458
8464
  }
8459
8465
  if (agentKeys.length > 1) {
8460
8466
  ctx.addIssue({
8461
- code: z25.ZodIssueCode.custom,
8467
+ code: z26.ZodIssueCode.custom,
8462
8468
  message: "Multiple agents not supported yet. Only one agent allowed.",
8463
8469
  path: ["agents"]
8464
8470
  });
@@ -8470,7 +8476,7 @@ var cliComposeSchema = z25.object({
8470
8476
  if (agentVolumes && agentVolumes.length > 0) {
8471
8477
  if (!config.volumes) {
8472
8478
  ctx.addIssue({
8473
- code: z25.ZodIssueCode.custom,
8479
+ code: z26.ZodIssueCode.custom,
8474
8480
  message: "Agent references volumes but no volumes section defined. Each volume must have explicit name and version.",
8475
8481
  path: ["volumes"]
8476
8482
  });
@@ -8480,7 +8486,7 @@ var cliComposeSchema = z25.object({
8480
8486
  const parts = volDeclaration.split(":");
8481
8487
  if (parts.length !== 2) {
8482
8488
  ctx.addIssue({
8483
- code: z25.ZodIssueCode.custom,
8489
+ code: z26.ZodIssueCode.custom,
8484
8490
  message: `Invalid volume declaration: ${volDeclaration}. Expected format: volume-key:/mount/path`,
8485
8491
  path: ["agents", agentName, "volumes"]
8486
8492
  });
@@ -8489,7 +8495,7 @@ var cliComposeSchema = z25.object({
8489
8495
  const volumeKey = parts[0].trim();
8490
8496
  if (!config.volumes[volumeKey]) {
8491
8497
  ctx.addIssue({
8492
- code: z25.ZodIssueCode.custom,
8498
+ code: z26.ZodIssueCode.custom,
8493
8499
  message: `Volume "${volumeKey}" is not defined in volumes section. Each volume must have explicit name and version.`,
8494
8500
  path: ["volumes", volumeKey]
8495
8501
  });
@@ -9316,13 +9322,13 @@ function checkLegacyImageFormat(config) {
9316
9322
  const image = agentConfig.image;
9317
9323
  if (image) {
9318
9324
  console.log(
9319
- chalk5.yellow(
9325
+ chalk6.yellow(
9320
9326
  `\u26A0 Agent "${name}": 'image' field is deprecated and will be ignored. The server resolves the image based on the framework.`
9321
9327
  )
9322
9328
  );
9323
9329
  const warning = getLegacySystemTemplateWarning(image);
9324
9330
  if (warning) {
9325
- console.log(chalk5.yellow(` ${warning}`));
9331
+ console.log(chalk6.yellow(` ${warning}`));
9326
9332
  }
9327
9333
  }
9328
9334
  }
@@ -9341,7 +9347,7 @@ async function uploadAssets(agentName, agent, basePath, jsonMode) {
9341
9347
  );
9342
9348
  if (!jsonMode) {
9343
9349
  console.log(
9344
- chalk5.green(
9350
+ chalk6.green(
9345
9351
  `\u2713 Instructions ${result.action === "deduplicated" ? "(unchanged)" : "uploaded"}: ${result.versionId.slice(0, 8)}`
9346
9352
  )
9347
9353
  );
@@ -9353,15 +9359,32 @@ async function uploadAssets(agentName, agent, basePath, jsonMode) {
9353
9359
  if (!jsonMode) {
9354
9360
  console.log(`Uploading ${agent.skills.length} skill(s)...`);
9355
9361
  }
9362
+ const { resolved, unresolved } = await resolveSkills(agent.skills);
9356
9363
  for (const skillUrl of agent.skills) {
9364
+ const skill = resolved[skillUrl];
9365
+ if (skill) {
9366
+ const parsed = parseGitHubTreeUrl2(skillUrl);
9367
+ skillResults.push({
9368
+ name: skill.storageName,
9369
+ versionId: skill.versionHash,
9370
+ action: "resolved",
9371
+ skillName: parsed.skillName,
9372
+ frontmatter: skill.frontmatter
9373
+ });
9374
+ if (!jsonMode) {
9375
+ console.log(chalk6.green(` \u2713 ${parsed.skillName} (cached)`));
9376
+ }
9377
+ }
9378
+ }
9379
+ for (const skillUrl of unresolved) {
9357
9380
  if (!jsonMode) {
9358
- console.log(chalk5.dim(` Downloading: ${skillUrl}`));
9381
+ console.log(chalk6.dim(` Downloading: ${skillUrl}`));
9359
9382
  }
9360
9383
  const result = await uploadSkill(skillUrl);
9361
9384
  skillResults.push(result);
9362
9385
  if (!jsonMode) {
9363
9386
  console.log(
9364
- chalk5.green(
9387
+ chalk6.green(
9365
9388
  ` \u2713 Skill ${result.action === "deduplicated" ? "(unchanged)" : "uploaded"}: ${result.skillName} (${result.versionId.slice(0, 8)})`
9366
9389
  )
9367
9390
  );
@@ -9414,21 +9437,21 @@ async function displayAndConfirmVariables(variables, options) {
9414
9437
  if (!options.json) {
9415
9438
  console.log();
9416
9439
  console.log(
9417
- chalk5.bold("Skills require the following environment variables:")
9440
+ chalk6.bold("Skills require the following environment variables:")
9418
9441
  );
9419
9442
  console.log();
9420
9443
  if (newSecrets.length > 0) {
9421
- console.log(chalk5.cyan(" Secrets:"));
9444
+ console.log(chalk6.cyan(" Secrets:"));
9422
9445
  for (const [name, skills] of newSecrets) {
9423
9446
  const isNew = trulyNewSecrets.includes(name);
9424
- const newMarker = isNew ? chalk5.yellow(" (new)") : "";
9447
+ const newMarker = isNew ? chalk6.yellow(" (new)") : "";
9425
9448
  console.log(
9426
9449
  ` ${name.padEnd(24)}${newMarker} <- ${skills.join(", ")}`
9427
9450
  );
9428
9451
  }
9429
9452
  }
9430
9453
  if (newVars.length > 0) {
9431
- console.log(chalk5.cyan(" Vars:"));
9454
+ console.log(chalk6.cyan(" Vars:"));
9432
9455
  for (const [name, skills] of newVars) {
9433
9456
  console.log(` ${name.padEnd(24)} <- ${skills.join(", ")}`);
9434
9457
  }
@@ -9449,7 +9472,7 @@ async function displayAndConfirmVariables(variables, options) {
9449
9472
  );
9450
9473
  if (!confirmed) {
9451
9474
  if (!options.json) {
9452
- console.log(chalk5.yellow("Compose cancelled"));
9475
+ console.log(chalk6.yellow("Compose cancelled"));
9453
9476
  }
9454
9477
  return false;
9455
9478
  }
@@ -9580,6 +9603,7 @@ function collectAndValidatePermissions(ref, serviceConfig) {
9580
9603
  `API entry "${api2.base}" in service "${serviceConfig.name}" (ref "${ref}") has no permissions`
9581
9604
  );
9582
9605
  }
9606
+ const seen = /* @__PURE__ */ new Set();
9583
9607
  for (const perm of api2.permissions) {
9584
9608
  if (!perm.name) {
9585
9609
  throw new Error(
@@ -9591,9 +9615,9 @@ function collectAndValidatePermissions(ref, serviceConfig) {
9591
9615
  `Service "${serviceConfig.name}" (ref "${ref}") has a permission named "all", which is a reserved keyword`
9592
9616
  );
9593
9617
  }
9594
- if (available.has(perm.name)) {
9618
+ if (seen.has(perm.name)) {
9595
9619
  throw new Error(
9596
- `Duplicate permission name "${perm.name}" in service "${serviceConfig.name}" (ref "${ref}")`
9620
+ `Duplicate permission name "${perm.name}" in API entry "${api2.base}" of service "${serviceConfig.name}" (ref "${ref}")`
9597
9621
  );
9598
9622
  }
9599
9623
  if (perm.rules.length === 0) {
@@ -9604,6 +9628,7 @@ function collectAndValidatePermissions(ref, serviceConfig) {
9604
9628
  for (const rule of perm.rules) {
9605
9629
  validateRule(rule, perm.name, serviceConfig.name);
9606
9630
  }
9631
+ seen.add(perm.name);
9607
9632
  available.add(perm.name);
9608
9633
  }
9609
9634
  }
@@ -9700,11 +9725,11 @@ async function checkAndPromptMissingItems(config, options) {
9700
9725
  if (!options.json) {
9701
9726
  console.log();
9702
9727
  console.log(
9703
- chalk5.yellow(
9728
+ chalk6.yellow(
9704
9729
  "\u26A0 Missing secrets/variables detected. Set them up before running your agent:"
9705
9730
  )
9706
9731
  );
9707
- console.log(chalk5.cyan(` ${setupUrl}`));
9732
+ console.log(chalk6.cyan(` ${setupUrl}`));
9708
9733
  console.log();
9709
9734
  }
9710
9735
  return { missingSecrets, missingVars, setupUrl };
@@ -9738,15 +9763,15 @@ async function finalizeCompose(config, agent, variables, options) {
9738
9763
  }
9739
9764
  if (!options.json) {
9740
9765
  if (response.action === "created") {
9741
- console.log(chalk5.green(`\u2713 Compose created: ${displayName}`));
9766
+ console.log(chalk6.green(`\u2713 Compose created: ${displayName}`));
9742
9767
  } else {
9743
- console.log(chalk5.green(`\u2713 Compose version exists: ${displayName}`));
9768
+ console.log(chalk6.green(`\u2713 Compose version exists: ${displayName}`));
9744
9769
  }
9745
- console.log(chalk5.dim(` Version: ${shortVersionId}`));
9770
+ console.log(chalk6.dim(` Version: ${shortVersionId}`));
9746
9771
  console.log();
9747
9772
  console.log(" Run your agent:");
9748
9773
  console.log(
9749
- chalk5.cyan(
9774
+ chalk6.cyan(
9750
9775
  ` vm0 run ${displayName}:${shortVersionId} --artifact-name <artifact> "your prompt"`
9751
9776
  )
9752
9777
  );
@@ -9774,7 +9799,7 @@ async function handleGitHubCompose(url, options) {
9774
9799
  if (!options.json) {
9775
9800
  console.log();
9776
9801
  console.log(
9777
- chalk5.yellow(`\u26A0 An agent named "${agentName}" already exists.`)
9802
+ chalk6.yellow(`\u26A0 An agent named "${agentName}" already exists.`)
9778
9803
  );
9779
9804
  }
9780
9805
  if (!isInteractive()) {
@@ -9795,7 +9820,7 @@ async function handleGitHubCompose(url, options) {
9795
9820
  );
9796
9821
  if (!confirmed) {
9797
9822
  if (!options.json) {
9798
- console.log(chalk5.yellow("Compose cancelled."));
9823
+ console.log(chalk6.yellow("Compose cancelled."));
9799
9824
  }
9800
9825
  process.exit(0);
9801
9826
  }
@@ -9844,7 +9869,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9844
9869
  const resolvedConfigFile = configFile ?? DEFAULT_CONFIG_FILE;
9845
9870
  if (options.porcelain && !options.json) {
9846
9871
  console.error(
9847
- chalk5.yellow("\u26A0 --porcelain is deprecated, use --json instead")
9872
+ chalk6.yellow("\u26A0 --porcelain is deprecated, use --json instead")
9848
9873
  );
9849
9874
  options.json = true;
9850
9875
  }
@@ -9853,7 +9878,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9853
9878
  options.autoUpdate = false;
9854
9879
  }
9855
9880
  if (options.autoUpdate !== false) {
9856
- await startSilentUpgrade("9.58.0");
9881
+ await startSilentUpgrade("9.59.0");
9857
9882
  }
9858
9883
  try {
9859
9884
  let result;
@@ -9897,7 +9922,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9897
9922
  import { Command as Command8, Option as Option2 } from "commander";
9898
9923
 
9899
9924
  // src/commands/run/shared.ts
9900
- import chalk9 from "chalk";
9925
+ import chalk10 from "chalk";
9901
9926
  import * as fs6 from "fs";
9902
9927
  import { config as dotenvConfig } from "dotenv";
9903
9928
 
@@ -10185,9 +10210,9 @@ var CodexEventParser = class {
10185
10210
  if (!item.changes || item.changes.length === 0) {
10186
10211
  return null;
10187
10212
  }
10188
- const changes = item.changes.map((c23) => {
10189
- const action = c23.kind === "add" ? "Created" : c23.kind === "modify" ? "Modified" : "Deleted";
10190
- return `${action}: ${c23.path}`;
10213
+ const changes = item.changes.map((c24) => {
10214
+ const action = c24.kind === "add" ? "Created" : c24.kind === "modify" ? "Modified" : "Deleted";
10215
+ return `${action}: ${c24.path}`;
10191
10216
  }).join("\n");
10192
10217
  return {
10193
10218
  type: "text",
@@ -10239,10 +10264,10 @@ function parseEvent(rawEvent, framework) {
10239
10264
  }
10240
10265
 
10241
10266
  // src/lib/events/event-renderer.ts
10242
- import chalk7 from "chalk";
10267
+ import chalk8 from "chalk";
10243
10268
 
10244
10269
  // src/lib/events/tool-formatters.ts
10245
- import chalk6 from "chalk";
10270
+ import chalk7 from "chalk";
10246
10271
  function pluralize(count, singular, plural) {
10247
10272
  return count === 1 ? singular : plural;
10248
10273
  }
@@ -10256,15 +10281,15 @@ function formatToolHeader(data) {
10256
10281
  return [headline];
10257
10282
  }
10258
10283
  var toolHeadlineFormatters = {
10259
- Read: (input) => `Read${chalk6.dim(`(${String(input.file_path || "")})`)}`,
10260
- Edit: (input) => `Edit${chalk6.dim(`(${String(input.file_path || "")})`)}`,
10261
- Write: (input) => `Write${chalk6.dim(`(${String(input.file_path || "")})`)}`,
10262
- Bash: (input) => `Bash${chalk6.dim(`(${truncate(String(input.command || ""), 60)})`)}`,
10263
- Glob: (input) => `Glob${chalk6.dim(`(${String(input.pattern || "")})`)}`,
10264
- Grep: (input) => `Grep${chalk6.dim(`(${String(input.pattern || "")})`)}`,
10265
- Task: (input) => `Task${chalk6.dim(`(${truncate(String(input.description || ""), 60)})`)}`,
10266
- WebFetch: (input) => `WebFetch${chalk6.dim(`(${truncate(String(input.url || ""), 60)})`)}`,
10267
- WebSearch: (input) => `WebSearch${chalk6.dim(`(${truncate(String(input.query || ""), 60)})`)}`,
10284
+ Read: (input) => `Read${chalk7.dim(`(${String(input.file_path || "")})`)}`,
10285
+ Edit: (input) => `Edit${chalk7.dim(`(${String(input.file_path || "")})`)}`,
10286
+ Write: (input) => `Write${chalk7.dim(`(${String(input.file_path || "")})`)}`,
10287
+ Bash: (input) => `Bash${chalk7.dim(`(${truncate(String(input.command || ""), 60)})`)}`,
10288
+ Glob: (input) => `Glob${chalk7.dim(`(${String(input.pattern || "")})`)}`,
10289
+ Grep: (input) => `Grep${chalk7.dim(`(${String(input.pattern || "")})`)}`,
10290
+ Task: (input) => `Task${chalk7.dim(`(${truncate(String(input.description || ""), 60)})`)}`,
10291
+ WebFetch: (input) => `WebFetch${chalk7.dim(`(${truncate(String(input.url || ""), 60)})`)}`,
10292
+ WebSearch: (input) => `WebSearch${chalk7.dim(`(${truncate(String(input.query || ""), 60)})`)}`,
10268
10293
  TodoWrite: () => "TodoWrite"
10269
10294
  };
10270
10295
  function getToolHeadline(tool, input) {
@@ -10297,7 +10322,7 @@ function formatToolResult(toolUse, result, verbose) {
10297
10322
  }
10298
10323
  if (isError) {
10299
10324
  const errorMsg = resultText ? truncate(resultText, 80) : "Error";
10300
- lines.push(`\u2514 \u2717 ${chalk6.dim(errorMsg)}`);
10325
+ lines.push(`\u2514 \u2717 ${chalk7.dim(errorMsg)}`);
10301
10326
  return lines;
10302
10327
  }
10303
10328
  if (resultText) {
@@ -10305,23 +10330,23 @@ function formatToolResult(toolUse, result, verbose) {
10305
10330
  if (verbose) {
10306
10331
  for (let i = 0; i < resultLines.length; i++) {
10307
10332
  const prefix = i === 0 ? "\u2514 " : " ";
10308
- lines.push(`${prefix}${chalk6.dim(resultLines[i])}`);
10333
+ lines.push(`${prefix}${chalk7.dim(resultLines[i])}`);
10309
10334
  }
10310
10335
  } else if (resultLines.length > 0) {
10311
10336
  const previewCount = Math.min(3, resultLines.length);
10312
10337
  for (let i = 0; i < previewCount; i++) {
10313
10338
  const prefix = i === 0 ? "\u2514 " : " ";
10314
- lines.push(`${prefix}${chalk6.dim(resultLines[i])}`);
10339
+ lines.push(`${prefix}${chalk7.dim(resultLines[i])}`);
10315
10340
  }
10316
10341
  const remaining = resultLines.length - previewCount;
10317
10342
  if (remaining > 0) {
10318
10343
  lines.push(
10319
- ` ${chalk6.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10344
+ ` ${chalk7.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10320
10345
  );
10321
10346
  }
10322
10347
  }
10323
10348
  } else {
10324
- lines.push(`\u2514 \u2713 ${chalk6.dim("Done")}`);
10349
+ lines.push(`\u2514 \u2713 ${chalk7.dim("Done")}`);
10325
10350
  }
10326
10351
  return lines;
10327
10352
  }
@@ -10339,24 +10364,24 @@ function formatReadContent(resultText, verbose) {
10339
10364
  const displayLines = contentLines.length > 0 ? contentLines : rawLines.filter((line) => line.trim().length > 0);
10340
10365
  const totalLines = displayLines.length;
10341
10366
  if (totalLines === 0) {
10342
- lines.push(`\u2514 \u2713 ${chalk6.dim("(empty)")}`);
10367
+ lines.push(`\u2514 \u2713 ${chalk7.dim("(empty)")}`);
10343
10368
  return lines;
10344
10369
  }
10345
10370
  if (verbose) {
10346
10371
  for (let i = 0; i < displayLines.length; i++) {
10347
10372
  const prefix = i === 0 ? "\u2514 " : " ";
10348
- lines.push(`${prefix}${chalk6.dim(displayLines[i] ?? "")}`);
10373
+ lines.push(`${prefix}${chalk7.dim(displayLines[i] ?? "")}`);
10349
10374
  }
10350
10375
  } else {
10351
10376
  const previewCount = Math.min(3, totalLines);
10352
10377
  for (let i = 0; i < previewCount; i++) {
10353
10378
  const prefix = i === 0 ? "\u2514 " : " ";
10354
- lines.push(`${prefix}${chalk6.dim(displayLines[i] ?? "")}`);
10379
+ lines.push(`${prefix}${chalk7.dim(displayLines[i] ?? "")}`);
10355
10380
  }
10356
10381
  const remaining = totalLines - previewCount;
10357
10382
  if (remaining > 0) {
10358
10383
  lines.push(
10359
- ` ${chalk6.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10384
+ ` ${chalk7.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10360
10385
  );
10361
10386
  }
10362
10387
  }
@@ -10370,18 +10395,18 @@ function formatWritePreview(input, verbose) {
10370
10395
  if (verbose) {
10371
10396
  for (let i = 0; i < contentLines.length; i++) {
10372
10397
  const prefix = i === 0 ? "\u23BF " : " ";
10373
- lines.push(`${prefix}${chalk6.dim(contentLines[i] ?? "")}`);
10398
+ lines.push(`${prefix}${chalk7.dim(contentLines[i] ?? "")}`);
10374
10399
  }
10375
10400
  } else {
10376
10401
  const previewCount = Math.min(3, totalLines);
10377
10402
  for (let i = 0; i < previewCount; i++) {
10378
10403
  const prefix = i === 0 ? "\u23BF " : " ";
10379
- lines.push(`${prefix}${chalk6.dim(contentLines[i] ?? "")}`);
10404
+ lines.push(`${prefix}${chalk7.dim(contentLines[i] ?? "")}`);
10380
10405
  }
10381
10406
  const remaining = totalLines - previewCount;
10382
10407
  if (remaining > 0) {
10383
10408
  lines.push(
10384
- ` ${chalk6.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10409
+ ` ${chalk7.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10385
10410
  );
10386
10411
  }
10387
10412
  }
@@ -10396,34 +10421,34 @@ function formatEditDiff(input, verbose) {
10396
10421
  const removed = oldLines.length;
10397
10422
  const added = newLines.length;
10398
10423
  const summary = `Added ${added} ${pluralize(added, "line", "lines")}, removed ${removed} ${pluralize(removed, "line", "lines")}`;
10399
- lines.push(`\u23BF ${chalk6.dim(summary)}`);
10424
+ lines.push(`\u23BF ${chalk7.dim(summary)}`);
10400
10425
  if (verbose) {
10401
10426
  for (const line of oldLines) {
10402
- lines.push(` - ${chalk6.dim(line)}`);
10427
+ lines.push(` - ${chalk7.dim(line)}`);
10403
10428
  }
10404
10429
  for (const line of newLines) {
10405
- lines.push(` + ${chalk6.dim(line)}`);
10430
+ lines.push(` + ${chalk7.dim(line)}`);
10406
10431
  }
10407
10432
  } else {
10408
10433
  const previewLimit = 3;
10409
10434
  const showOld = Math.min(previewLimit, oldLines.length);
10410
10435
  const showNew = Math.min(previewLimit, newLines.length);
10411
10436
  for (let i = 0; i < showOld; i++) {
10412
- lines.push(` - ${chalk6.dim(truncate(oldLines[i] ?? "", 60))}`);
10437
+ lines.push(` - ${chalk7.dim(truncate(oldLines[i] ?? "", 60))}`);
10413
10438
  }
10414
10439
  const remainingOld = oldLines.length - previewLimit;
10415
10440
  if (remainingOld > 0) {
10416
10441
  lines.push(
10417
- ` ${chalk6.dim(`\u2026 +${remainingOld} ${pluralize(remainingOld, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10442
+ ` ${chalk7.dim(`\u2026 +${remainingOld} ${pluralize(remainingOld, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10418
10443
  );
10419
10444
  }
10420
10445
  for (let i = 0; i < showNew; i++) {
10421
- lines.push(` + ${chalk6.dim(truncate(newLines[i] ?? "", 60))}`);
10446
+ lines.push(` + ${chalk7.dim(truncate(newLines[i] ?? "", 60))}`);
10422
10447
  }
10423
10448
  const remainingNew = newLines.length - previewLimit;
10424
10449
  if (remainingNew > 0) {
10425
10450
  lines.push(
10426
- ` ${chalk6.dim(`\u2026 +${remainingNew} ${pluralize(remainingNew, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10451
+ ` ${chalk7.dim(`\u2026 +${remainingNew} ${pluralize(remainingNew, "line", "lines")} (vm0 logs <runId> to see all)`)}`
10427
10452
  );
10428
10453
  }
10429
10454
  }
@@ -10461,12 +10486,12 @@ function getTodoStatusIcon(status) {
10461
10486
  function formatTodoContent(content, status) {
10462
10487
  switch (status) {
10463
10488
  case "completed":
10464
- return chalk6.dim.strikethrough(content);
10489
+ return chalk7.dim.strikethrough(content);
10465
10490
  case "in_progress":
10466
10491
  return content;
10467
10492
  case "pending":
10468
10493
  default:
10469
- return chalk6.dim(content);
10494
+ return chalk7.dim(content);
10470
10495
  }
10471
10496
  }
10472
10497
 
@@ -10484,12 +10509,12 @@ var EventRenderer = class _EventRenderer {
10484
10509
  * Called immediately after run is created, before polling events
10485
10510
  */
10486
10511
  static renderRunStarted(info) {
10487
- console.log(chalk7.bold("\u25B6 Run started"));
10488
- console.log(` Run ID: ${chalk7.dim(info.runId)}`);
10512
+ console.log(chalk8.bold("\u25B6 Run started"));
10513
+ console.log(` Run ID: ${chalk8.dim(info.runId)}`);
10489
10514
  if (info.sandboxId) {
10490
- console.log(` Sandbox: ${chalk7.dim(info.sandboxId)}`);
10515
+ console.log(` Sandbox: ${chalk8.dim(info.sandboxId)}`);
10491
10516
  }
10492
- console.log(chalk7.dim(` (use "vm0 logs ${info.runId}" to view logs)`));
10517
+ console.log(chalk8.dim(` (use "vm0 logs ${info.runId}" to view logs)`));
10493
10518
  console.log();
10494
10519
  }
10495
10520
  /**
@@ -10527,16 +10552,16 @@ var EventRenderer = class _EventRenderer {
10527
10552
  */
10528
10553
  static renderRunCompleted(result) {
10529
10554
  console.log("");
10530
- console.log(chalk7.green("\u2713 Run completed successfully"));
10555
+ console.log(chalk8.green("\u2713 Run completed successfully"));
10531
10556
  if (result) {
10532
- console.log(` Checkpoint: ${chalk7.dim(result.checkpointId)}`);
10533
- console.log(` Session: ${chalk7.dim(result.agentSessionId)}`);
10534
- console.log(` Conversation: ${chalk7.dim(result.conversationId)}`);
10557
+ console.log(` Checkpoint: ${chalk8.dim(result.checkpointId)}`);
10558
+ console.log(` Session: ${chalk8.dim(result.agentSessionId)}`);
10559
+ console.log(` Conversation: ${chalk8.dim(result.conversationId)}`);
10535
10560
  if (result.artifact && Object.keys(result.artifact).length > 0) {
10536
10561
  console.log(` Artifact:`);
10537
10562
  for (const [name, version] of Object.entries(result.artifact)) {
10538
10563
  console.log(
10539
- ` ${name}: ${chalk7.dim(_EventRenderer.formatVersion(version))}`
10564
+ ` ${name}: ${chalk8.dim(_EventRenderer.formatVersion(version))}`
10540
10565
  );
10541
10566
  }
10542
10567
  }
@@ -10544,7 +10569,7 @@ var EventRenderer = class _EventRenderer {
10544
10569
  console.log(` Volumes:`);
10545
10570
  for (const [name, version] of Object.entries(result.volumes)) {
10546
10571
  console.log(
10547
- ` ${name}: ${chalk7.dim(_EventRenderer.formatVersion(version))}`
10572
+ ` ${name}: ${chalk8.dim(_EventRenderer.formatVersion(version))}`
10548
10573
  );
10549
10574
  }
10550
10575
  }
@@ -10556,10 +10581,10 @@ var EventRenderer = class _EventRenderer {
10556
10581
  */
10557
10582
  static renderRunFailed(error, runId) {
10558
10583
  console.error("");
10559
- console.error(chalk7.red("\u2717 Run failed"));
10560
- console.error(` Error: ${chalk7.red(error || "Unknown error")}`);
10584
+ console.error(chalk8.red("\u2717 Run failed"));
10585
+ console.error(` Error: ${chalk8.red(error || "Unknown error")}`);
10561
10586
  console.error(
10562
- chalk7.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
10587
+ chalk8.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
10563
10588
  );
10564
10589
  }
10565
10590
  /**
@@ -10643,13 +10668,13 @@ var EventRenderer = class _EventRenderer {
10643
10668
  const frameworkStr = String(event.data.framework || "claude-code");
10644
10669
  const displayName = isSupportedFramework(frameworkStr) ? getFrameworkDisplayName(frameworkStr) : frameworkStr;
10645
10670
  this.frameworkDisplayName = displayName;
10646
- console.log(prefix + chalk7.bold(`\u25B7 ${displayName} Started`));
10647
- console.log(` Session: ${chalk7.dim(String(event.data.sessionId || ""))}`);
10671
+ console.log(prefix + chalk8.bold(`\u25B7 ${displayName} Started`));
10672
+ console.log(` Session: ${chalk8.dim(String(event.data.sessionId || ""))}`);
10648
10673
  if (event.data.model) {
10649
- console.log(` Model: ${chalk7.dim(String(event.data.model))}`);
10674
+ console.log(` Model: ${chalk8.dim(String(event.data.model))}`);
10650
10675
  }
10651
10676
  console.log(
10652
- ` Tools: ${chalk7.dim(
10677
+ ` Tools: ${chalk8.dim(
10653
10678
  Array.isArray(event.data.tools) ? event.data.tools.join(", ") : String(event.data.tools || "")
10654
10679
  )}`
10655
10680
  );
@@ -10666,16 +10691,16 @@ var EventRenderer = class _EventRenderer {
10666
10691
  const success = Boolean(event.data.success);
10667
10692
  if (success) {
10668
10693
  console.log(
10669
- prefix + chalk7.bold(`\u25C6 ${this.frameworkDisplayName} Completed`)
10694
+ prefix + chalk8.bold(`\u25C6 ${this.frameworkDisplayName} Completed`)
10670
10695
  );
10671
10696
  } else {
10672
- console.log(prefix + chalk7.bold(`\u25C6 ${this.frameworkDisplayName} Failed`));
10697
+ console.log(prefix + chalk8.bold(`\u25C6 ${this.frameworkDisplayName} Failed`));
10673
10698
  }
10674
10699
  const durationMs = Number(event.data.durationMs || 0);
10675
10700
  const durationSec = (durationMs / 1e3).toFixed(1);
10676
- console.log(` Duration: ${chalk7.dim(durationSec + "s")}`);
10701
+ console.log(` Duration: ${chalk8.dim(durationSec + "s")}`);
10677
10702
  const numTurns = Number(event.data.numTurns || 0);
10678
- console.log(` Turns: ${chalk7.dim(String(numTurns))}`);
10703
+ console.log(` Turns: ${chalk8.dim(String(numTurns))}`);
10679
10704
  const usage = event.data.usage;
10680
10705
  if (usage && typeof usage === "object") {
10681
10706
  const inputTokens = Number(usage.input_tokens || 0);
@@ -10687,7 +10712,7 @@ var EventRenderer = class _EventRenderer {
10687
10712
  return String(count);
10688
10713
  };
10689
10714
  console.log(
10690
- ` Tokens: ${chalk7.dim(
10715
+ ` Tokens: ${chalk8.dim(
10691
10716
  `input=${formatTokens(inputTokens)} output=${formatTokens(outputTokens)}`
10692
10717
  )}`
10693
10718
  );
@@ -10706,7 +10731,7 @@ var EventRenderer = class _EventRenderer {
10706
10731
  };
10707
10732
 
10708
10733
  // src/lib/events/codex-event-renderer.ts
10709
- import chalk8 from "chalk";
10734
+ import chalk9 from "chalk";
10710
10735
  var CodexEventRenderer = class {
10711
10736
  /**
10712
10737
  * Check if an event is a Codex event
@@ -10753,13 +10778,13 @@ var CodexEventRenderer = class {
10753
10778
  const cached = event.usage.cached_input_tokens || 0;
10754
10779
  const cachedStr = cached ? ` (${cached} cached)` : "";
10755
10780
  console.log(
10756
- "[turn.completed]" + chalk8.dim(` ${input} in / ${output} out${cachedStr}`)
10781
+ "[turn.completed]" + chalk9.dim(` ${input} in / ${output} out${cachedStr}`)
10757
10782
  );
10758
10783
  }
10759
10784
  }
10760
10785
  static renderTurnFailed(event) {
10761
10786
  console.log(
10762
- chalk8.red("[turn.failed]") + (event.error ? ` ${event.error}` : "")
10787
+ chalk9.red("[turn.failed]") + (event.error ? ` ${event.error}` : "")
10763
10788
  );
10764
10789
  }
10765
10790
  static renderItem(event) {
@@ -10788,25 +10813,25 @@ var CodexEventRenderer = class {
10788
10813
  if (output) {
10789
10814
  const lines = output.split("\n").filter((l) => l.trim());
10790
10815
  const preview = lines.slice(0, 3).join("\n ");
10791
- const more = lines.length > 3 ? chalk8.dim(` ... (${lines.length - 3} more lines)`) : "";
10816
+ const more = lines.length > 3 ? chalk9.dim(` ... (${lines.length - 3} more lines)`) : "";
10792
10817
  console.log(
10793
- "[output]" + (exitCode !== 0 ? chalk8.red(` exit=${exitCode}`) : "")
10818
+ "[output]" + (exitCode !== 0 ? chalk9.red(` exit=${exitCode}`) : "")
10794
10819
  );
10795
10820
  if (preview) {
10796
10821
  console.log(" " + preview + more);
10797
10822
  }
10798
10823
  } else if (exitCode !== 0) {
10799
- console.log(chalk8.red("[output]") + chalk8.red(` exit=${exitCode}`));
10824
+ console.log(chalk9.red("[output]") + chalk9.red(` exit=${exitCode}`));
10800
10825
  }
10801
10826
  }
10802
10827
  }
10803
10828
  static renderFileChange(item) {
10804
10829
  if (item.changes && item.changes.length > 0) {
10805
- const summary = item.changes.map((c23) => {
10806
- const icon = c23.kind === "add" ? "+" : c23.kind === "delete" ? "-" : "~";
10807
- return `${icon}${c23.path}`;
10830
+ const summary = item.changes.map((c24) => {
10831
+ const icon = c24.kind === "add" ? "+" : c24.kind === "delete" ? "-" : "~";
10832
+ return `${icon}${c24.path}`;
10808
10833
  }).join(", ");
10809
- console.log(chalk8.green("[files]") + ` ${summary}`);
10834
+ console.log(chalk9.green("[files]") + ` ${summary}`);
10810
10835
  }
10811
10836
  }
10812
10837
  static renderFileOperation(item, eventType) {
@@ -10817,7 +10842,7 @@ var CodexEventRenderer = class {
10817
10842
  }
10818
10843
  static renderError(event) {
10819
10844
  console.log(
10820
- chalk8.red("[error]") + ` ${event.message || event.error || "Unknown error"}`
10845
+ chalk9.red("[error]") + ` ${event.message || event.error || "Unknown error"}`
10821
10846
  );
10822
10847
  }
10823
10848
  };
@@ -10904,10 +10929,10 @@ function parseIdentifier(identifier) {
10904
10929
  }
10905
10930
  function renderRunCreated(response) {
10906
10931
  if (response.status === "queued") {
10907
- console.log(chalk9.yellow("\u26A0 Run queued \u2014 concurrency limit reached"));
10908
- console.log(` Run ID: ${chalk9.dim(response.runId)}`);
10932
+ console.log(chalk10.yellow("\u26A0 Run queued \u2014 concurrency limit reached"));
10933
+ console.log(` Run ID: ${chalk10.dim(response.runId)}`);
10909
10934
  console.log(
10910
- chalk9.dim(" Will start automatically when a slot is available")
10935
+ chalk10.dim(" Will start automatically when a slot is available")
10911
10936
  );
10912
10937
  console.log();
10913
10938
  } else {
@@ -10955,9 +10980,9 @@ async function pollEvents(runId, options) {
10955
10980
  result = { succeeded: false, runId };
10956
10981
  } else if (runStatus === "timeout") {
10957
10982
  complete = true;
10958
- console.error(chalk9.red("\n\u2717 Run timed out"));
10983
+ console.error(chalk10.red("\n\u2717 Run timed out"));
10959
10984
  console.error(
10960
- chalk9.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
10985
+ chalk10.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
10961
10986
  );
10962
10987
  result = { succeeded: false, runId };
10963
10988
  }
@@ -10971,11 +10996,11 @@ function showNextSteps(result) {
10971
10996
  const { runId, sessionId, checkpointId } = result;
10972
10997
  console.log();
10973
10998
  console.log(" View agent logs:");
10974
- console.log(chalk9.cyan(` vm0 logs ${runId}`));
10999
+ console.log(chalk10.cyan(` vm0 logs ${runId}`));
10975
11000
  if (sessionId) {
10976
11001
  console.log(" Continue with session (latest conversation and artifact):");
10977
11002
  console.log(
10978
- chalk9.cyan(` vm0 run continue ${sessionId} "your next prompt"`)
11003
+ chalk10.cyan(` vm0 run continue ${sessionId} "your next prompt"`)
10979
11004
  );
10980
11005
  }
10981
11006
  if (checkpointId) {
@@ -10983,7 +11008,7 @@ function showNextSteps(result) {
10983
11008
  " Resume from checkpoint (snapshotted conversation and artifact):"
10984
11009
  );
10985
11010
  console.log(
10986
- chalk9.cyan(` vm0 run resume ${checkpointId} "your next prompt"`)
11011
+ chalk10.cyan(` vm0 run resume ${checkpointId} "your next prompt"`)
10987
11012
  );
10988
11013
  }
10989
11014
  }
@@ -11026,7 +11051,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
11026
11051
  withErrorHandler(
11027
11052
  async (identifier, prompt, options) => {
11028
11053
  if (options.autoUpdate !== false) {
11029
- await startSilentUpgrade("9.58.0");
11054
+ await startSilentUpgrade("9.59.0");
11030
11055
  }
11031
11056
  const { org, name, version } = parseIdentifier(identifier);
11032
11057
  if (org && !options.experimentalSharedAgent) {
@@ -11245,7 +11270,7 @@ var continueCommand = new Command10().name("continue").description(
11245
11270
 
11246
11271
  // src/commands/run/list.ts
11247
11272
  import { Command as Command11 } from "commander";
11248
- import chalk10 from "chalk";
11273
+ import chalk11 from "chalk";
11249
11274
 
11250
11275
  // src/lib/utils/time-parser.ts
11251
11276
  function parseTime(timeStr) {
@@ -11298,16 +11323,16 @@ function formatRunStatus(status, width) {
11298
11323
  const paddedStatus = width ? status.padEnd(width) : status;
11299
11324
  switch (status) {
11300
11325
  case "queued":
11301
- return chalk10.blue(paddedStatus);
11326
+ return chalk11.blue(paddedStatus);
11302
11327
  case "running":
11303
- return chalk10.green(paddedStatus);
11328
+ return chalk11.green(paddedStatus);
11304
11329
  case "pending":
11305
- return chalk10.yellow(paddedStatus);
11330
+ return chalk11.yellow(paddedStatus);
11306
11331
  case "completed":
11307
- return chalk10.dim(paddedStatus);
11332
+ return chalk11.dim(paddedStatus);
11308
11333
  case "failed":
11309
11334
  case "timeout":
11310
- return chalk10.red(paddedStatus);
11335
+ return chalk11.red(paddedStatus);
11311
11336
  default:
11312
11337
  return paddedStatus;
11313
11338
  }
@@ -11358,7 +11383,7 @@ function displayRuns(runs) {
11358
11383
  "STATUS".padEnd(statusWidth),
11359
11384
  "CREATED"
11360
11385
  ].join(" ");
11361
- console.log(chalk10.dim(header));
11386
+ console.log(chalk11.dim(header));
11362
11387
  for (const run of runs) {
11363
11388
  const row = [
11364
11389
  run.id.padEnd(UUID_LENGTH),
@@ -11371,10 +11396,10 @@ function displayRuns(runs) {
11371
11396
  }
11372
11397
  function displayEmptyState(hasFilters) {
11373
11398
  if (hasFilters) {
11374
- console.log(chalk10.dim("No runs found matching filters"));
11399
+ console.log(chalk11.dim("No runs found matching filters"));
11375
11400
  } else {
11376
- console.log(chalk10.dim("No active runs"));
11377
- console.log(chalk10.dim(' Run: vm0 run <agent> "<prompt>"'));
11401
+ console.log(chalk11.dim("No active runs"));
11402
+ console.log(chalk11.dim(' Run: vm0 run <agent> "<prompt>"'));
11378
11403
  }
11379
11404
  }
11380
11405
  var listCommand = new Command11().name("list").alias("ls").description("List runs").option(
@@ -11411,11 +11436,11 @@ var listCommand = new Command11().name("list").alias("ls").description("List run
11411
11436
 
11412
11437
  // src/commands/run/kill.ts
11413
11438
  import { Command as Command12 } from "commander";
11414
- import chalk11 from "chalk";
11439
+ import chalk12 from "chalk";
11415
11440
  var killCommand = new Command12().name("kill").description("Kill (cancel) a pending or running run").argument("<run-id>", "Run ID to kill").action(
11416
11441
  withErrorHandler(async (runId) => {
11417
11442
  await cancelRun(runId);
11418
- console.log(chalk11.green(`\u2713 Run ${runId} cancelled`));
11443
+ console.log(chalk12.green(`\u2713 Run ${runId} cancelled`));
11419
11444
  })
11420
11445
  );
11421
11446
 
@@ -11431,7 +11456,7 @@ import { Command as Command19 } from "commander";
11431
11456
 
11432
11457
  // src/commands/volume/init.ts
11433
11458
  import { Command as Command13 } from "commander";
11434
- import chalk12 from "chalk";
11459
+ import chalk13 from "chalk";
11435
11460
  import path7 from "path";
11436
11461
 
11437
11462
  // src/lib/storage/storage-utils.ts
@@ -11489,10 +11514,10 @@ var initCommand = new Command13().name("init").description("Initialize a volume
11489
11514
  const existingConfig = await readStorageConfig(cwd);
11490
11515
  if (existingConfig) {
11491
11516
  console.log(
11492
- chalk12.yellow(`Volume already initialized: ${existingConfig.name}`)
11517
+ chalk13.yellow(`Volume already initialized: ${existingConfig.name}`)
11493
11518
  );
11494
11519
  console.log(
11495
- chalk12.dim(`Config file: ${path7.join(cwd, ".vm0", "storage.yaml")}`)
11520
+ chalk13.dim(`Config file: ${path7.join(cwd, ".vm0", "storage.yaml")}`)
11496
11521
  );
11497
11522
  return;
11498
11523
  }
@@ -11516,7 +11541,7 @@ var initCommand = new Command13().name("init").description("Initialize a volume
11516
11541
  }
11517
11542
  );
11518
11543
  if (name === void 0) {
11519
- console.log(chalk12.dim("Cancelled"));
11544
+ console.log(chalk13.dim("Cancelled"));
11520
11545
  return;
11521
11546
  }
11522
11547
  volumeName = name;
@@ -11529,9 +11554,9 @@ var initCommand = new Command13().name("init").description("Initialize a volume
11529
11554
  });
11530
11555
  }
11531
11556
  await writeStorageConfig(volumeName, cwd);
11532
- console.log(chalk12.green(`\u2713 Initialized volume: ${volumeName}`));
11557
+ console.log(chalk13.green(`\u2713 Initialized volume: ${volumeName}`));
11533
11558
  console.log(
11534
- chalk12.dim(
11559
+ chalk13.dim(
11535
11560
  ` Config saved to ${path7.join(cwd, ".vm0", "storage.yaml")}`
11536
11561
  )
11537
11562
  );
@@ -11540,7 +11565,7 @@ var initCommand = new Command13().name("init").description("Initialize a volume
11540
11565
 
11541
11566
  // src/commands/volume/push.ts
11542
11567
  import { Command as Command14 } from "commander";
11543
- import chalk13 from "chalk";
11568
+ import chalk14 from "chalk";
11544
11569
  var pushCommand = new Command14().name("push").description("Push local files to cloud volume").option(
11545
11570
  "-f, --force",
11546
11571
  "Force upload even if content unchanged (recreate archive)"
@@ -11556,41 +11581,41 @@ var pushCommand = new Command14().name("push").description("Push local files to
11556
11581
  console.log(`Pushing volume: ${config.name}`);
11557
11582
  const result = await directUpload(config.name, "volume", cwd, {
11558
11583
  onProgress: (message) => {
11559
- console.log(chalk13.dim(message));
11584
+ console.log(chalk14.dim(message));
11560
11585
  },
11561
11586
  force: options.force
11562
11587
  });
11563
11588
  const shortVersion = result.versionId.slice(0, 8);
11564
11589
  if (result.empty) {
11565
- console.log(chalk13.dim("No files found (empty volume)"));
11590
+ console.log(chalk14.dim("No files found (empty volume)"));
11566
11591
  } else if (result.deduplicated) {
11567
- console.log(chalk13.green("\u2713 Content unchanged (deduplicated)"));
11592
+ console.log(chalk14.green("\u2713 Content unchanged (deduplicated)"));
11568
11593
  } else {
11569
- console.log(chalk13.green("\u2713 Upload complete"));
11594
+ console.log(chalk14.green("\u2713 Upload complete"));
11570
11595
  }
11571
- console.log(chalk13.dim(` Version: ${shortVersion}`));
11572
- console.log(chalk13.dim(` Files: ${result.fileCount.toLocaleString()}`));
11573
- console.log(chalk13.dim(` Size: ${formatBytes(result.size)}`));
11596
+ console.log(chalk14.dim(` Version: ${shortVersion}`));
11597
+ console.log(chalk14.dim(` Files: ${result.fileCount.toLocaleString()}`));
11598
+ console.log(chalk14.dim(` Size: ${formatBytes(result.size)}`));
11574
11599
  })
11575
11600
  );
11576
11601
 
11577
11602
  // src/commands/volume/pull.ts
11578
11603
  import { Command as Command15 } from "commander";
11579
- import chalk15 from "chalk";
11604
+ import chalk16 from "chalk";
11580
11605
  import path8 from "path";
11581
11606
  import * as fs7 from "fs";
11582
11607
  import * as os5 from "os";
11583
11608
  import * as tar3 from "tar";
11584
11609
 
11585
11610
  // src/lib/storage/pull-utils.ts
11586
- import chalk14 from "chalk";
11611
+ import chalk15 from "chalk";
11587
11612
  async function handleEmptyStorageResponse(cwd) {
11588
- console.log(chalk14.dim("Syncing local files..."));
11613
+ console.log(chalk15.dim("Syncing local files..."));
11589
11614
  const removedCount = await removeExtraFiles(cwd, /* @__PURE__ */ new Set());
11590
11615
  if (removedCount > 0) {
11591
- console.log(chalk14.green(`\u2713 Removed ${removedCount} files not in remote`));
11616
+ console.log(chalk15.green(`\u2713 Removed ${removedCount} files not in remote`));
11592
11617
  }
11593
- console.log(chalk14.green("\u2713 Synced (0 files)"));
11618
+ console.log(chalk15.green("\u2713 Synced (0 files)"));
11594
11619
  return { removedCount };
11595
11620
  }
11596
11621
 
@@ -11609,7 +11634,7 @@ var pullCommand = new Command15().name("pull").description("Pull cloud files to
11609
11634
  } else {
11610
11635
  console.log(`Pulling volume: ${config.name}`);
11611
11636
  }
11612
- console.log(chalk15.dim("Getting download URL..."));
11637
+ console.log(chalk16.dim("Getting download URL..."));
11613
11638
  const downloadInfo = await getStorageDownload({
11614
11639
  name: config.name,
11615
11640
  type: "volume",
@@ -11623,18 +11648,18 @@ var pullCommand = new Command15().name("pull").description("Pull cloud files to
11623
11648
  if (!downloadUrl) {
11624
11649
  throw new Error("No download URL returned");
11625
11650
  }
11626
- console.log(chalk15.dim("Downloading from S3..."));
11651
+ console.log(chalk16.dim("Downloading from S3..."));
11627
11652
  const s3Response = await fetch(downloadUrl);
11628
11653
  if (!s3Response.ok) {
11629
11654
  throw new Error(`S3 download failed: ${s3Response.status}`);
11630
11655
  }
11631
11656
  const arrayBuffer = await s3Response.arrayBuffer();
11632
11657
  const tarBuffer = Buffer.from(arrayBuffer);
11633
- console.log(chalk15.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
11658
+ console.log(chalk16.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
11634
11659
  const tmpDir = fs7.mkdtempSync(path8.join(os5.tmpdir(), "vm0-"));
11635
11660
  const tarPath = path8.join(tmpDir, "volume.tar.gz");
11636
11661
  await fs7.promises.writeFile(tarPath, tarBuffer);
11637
- console.log(chalk15.dim("Syncing local files..."));
11662
+ console.log(chalk16.dim("Syncing local files..."));
11638
11663
  const remoteFiles = await listTarFiles(tarPath);
11639
11664
  const remoteFilesSet = new Set(
11640
11665
  remoteFiles.map((f) => f.replace(/\\/g, "/"))
@@ -11642,10 +11667,10 @@ var pullCommand = new Command15().name("pull").description("Pull cloud files to
11642
11667
  const removedCount = await removeExtraFiles(cwd, remoteFilesSet);
11643
11668
  if (removedCount > 0) {
11644
11669
  console.log(
11645
- chalk15.green(`\u2713 Removed ${removedCount} files not in remote`)
11670
+ chalk16.green(`\u2713 Removed ${removedCount} files not in remote`)
11646
11671
  );
11647
11672
  }
11648
- console.log(chalk15.dim("Extracting files..."));
11673
+ console.log(chalk16.dim("Extracting files..."));
11649
11674
  await tar3.extract({
11650
11675
  file: tarPath,
11651
11676
  cwd,
@@ -11653,13 +11678,13 @@ var pullCommand = new Command15().name("pull").description("Pull cloud files to
11653
11678
  });
11654
11679
  await fs7.promises.unlink(tarPath);
11655
11680
  await fs7.promises.rmdir(tmpDir);
11656
- console.log(chalk15.green(`\u2713 Extracted ${remoteFiles.length} files`));
11681
+ console.log(chalk16.green(`\u2713 Extracted ${remoteFiles.length} files`));
11657
11682
  })
11658
11683
  );
11659
11684
 
11660
11685
  // src/commands/volume/status.ts
11661
11686
  import { Command as Command16 } from "commander";
11662
- import chalk16 from "chalk";
11687
+ import chalk17 from "chalk";
11663
11688
  var statusCommand2 = new Command16().name("status").description("Show status of cloud volume").action(
11664
11689
  withErrorHandler(async () => {
11665
11690
  const cwd = process.cwd();
@@ -11683,13 +11708,13 @@ var statusCommand2 = new Command16().name("status").description("Show status of
11683
11708
  });
11684
11709
  const shortVersion = info.versionId.slice(0, 8);
11685
11710
  if ("empty" in info) {
11686
- console.log(chalk16.green("\u2713 Found (empty)"));
11687
- console.log(chalk16.dim(` Version: ${shortVersion}`));
11711
+ console.log(chalk17.green("\u2713 Found (empty)"));
11712
+ console.log(chalk17.dim(` Version: ${shortVersion}`));
11688
11713
  } else {
11689
- console.log(chalk16.green("\u2713 Found"));
11690
- console.log(chalk16.dim(` Version: ${shortVersion}`));
11691
- console.log(chalk16.dim(` Files: ${info.fileCount.toLocaleString()}`));
11692
- console.log(chalk16.dim(` Size: ${formatBytes(info.size)}`));
11714
+ console.log(chalk17.green("\u2713 Found"));
11715
+ console.log(chalk17.dim(` Version: ${shortVersion}`));
11716
+ console.log(chalk17.dim(` Files: ${info.fileCount.toLocaleString()}`));
11717
+ console.log(chalk17.dim(` Size: ${formatBytes(info.size)}`));
11693
11718
  }
11694
11719
  } catch (error) {
11695
11720
  if (error instanceof ApiRequestError && error.status === 404) {
@@ -11704,14 +11729,14 @@ var statusCommand2 = new Command16().name("status").description("Show status of
11704
11729
 
11705
11730
  // src/commands/volume/list.ts
11706
11731
  import { Command as Command17 } from "commander";
11707
- import chalk17 from "chalk";
11732
+ import chalk18 from "chalk";
11708
11733
  var listCommand2 = new Command17().name("list").alias("ls").description("List all remote volumes").action(
11709
11734
  withErrorHandler(async () => {
11710
11735
  const items = await listStorages({ type: "volume" });
11711
11736
  if (items.length === 0) {
11712
- console.log(chalk17.dim("No volumes found"));
11737
+ console.log(chalk18.dim("No volumes found"));
11713
11738
  console.log(
11714
- chalk17.dim(" Create one with: vm0 volume init && vm0 volume push")
11739
+ chalk18.dim(" Create one with: vm0 volume init && vm0 volume push")
11715
11740
  );
11716
11741
  return;
11717
11742
  }
@@ -11730,7 +11755,7 @@ var listCommand2 = new Command17().name("list").alias("ls").description("List al
11730
11755
  "FILES".padStart(filesWidth),
11731
11756
  "UPDATED"
11732
11757
  ].join(" ");
11733
- console.log(chalk17.dim(header));
11758
+ console.log(chalk18.dim(header));
11734
11759
  for (const item of items) {
11735
11760
  const row = [
11736
11761
  item.name.padEnd(nameWidth),
@@ -11745,10 +11770,10 @@ var listCommand2 = new Command17().name("list").alias("ls").description("List al
11745
11770
 
11746
11771
  // src/commands/volume/clone.ts
11747
11772
  import { Command as Command18 } from "commander";
11748
- import chalk19 from "chalk";
11773
+ import chalk20 from "chalk";
11749
11774
 
11750
11775
  // src/lib/storage/clone-utils.ts
11751
- import chalk18 from "chalk";
11776
+ import chalk19 from "chalk";
11752
11777
  import path9 from "path";
11753
11778
  import * as fs8 from "fs";
11754
11779
  import * as os6 from "os";
@@ -11759,18 +11784,18 @@ async function cloneStorage(name, type2, destination, options = {}) {
11759
11784
  if (dirStatus.exists && !dirStatus.empty) {
11760
11785
  throw new Error(`Directory "${destination}" is not empty`);
11761
11786
  }
11762
- console.log(chalk18.dim(`Checking remote ${typeLabel}...`));
11787
+ console.log(chalk19.dim(`Checking remote ${typeLabel}...`));
11763
11788
  const downloadInfo = await getStorageDownload({
11764
11789
  name,
11765
11790
  type: type2,
11766
11791
  version: options.version
11767
11792
  });
11768
- console.log(chalk18.dim(`Creating directory: ${destination}/`));
11793
+ console.log(chalk19.dim(`Creating directory: ${destination}/`));
11769
11794
  await fs8.promises.mkdir(destination, { recursive: true });
11770
11795
  if ("empty" in downloadInfo) {
11771
11796
  await writeStorageConfig(name, destination, type2);
11772
- console.log(chalk18.green(`\u2713 Cloned empty ${typeLabel}: ${name}`));
11773
- console.log(chalk18.dim(`\u2713 Initialized .vm0/storage.yaml`));
11797
+ console.log(chalk19.green(`\u2713 Cloned empty ${typeLabel}: ${name}`));
11798
+ console.log(chalk19.dim(`\u2713 Initialized .vm0/storage.yaml`));
11774
11799
  return {
11775
11800
  success: true,
11776
11801
  fileCount: 0,
@@ -11782,7 +11807,7 @@ async function cloneStorage(name, type2, destination, options = {}) {
11782
11807
  if (!downloadUrl) {
11783
11808
  throw new Error("No download URL returned");
11784
11809
  }
11785
- console.log(chalk18.dim("Downloading from S3..."));
11810
+ console.log(chalk19.dim("Downloading from S3..."));
11786
11811
  const s3Response = await fetch(downloadUrl);
11787
11812
  if (!s3Response.ok) {
11788
11813
  await fs8.promises.rm(destination, { recursive: true, force: true });
@@ -11790,12 +11815,12 @@ async function cloneStorage(name, type2, destination, options = {}) {
11790
11815
  }
11791
11816
  const arrayBuffer = await s3Response.arrayBuffer();
11792
11817
  const tarBuffer = Buffer.from(arrayBuffer);
11793
- console.log(chalk18.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
11818
+ console.log(chalk19.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
11794
11819
  const tmpDir = fs8.mkdtempSync(path9.join(os6.tmpdir(), "vm0-clone-"));
11795
11820
  const tarPath = path9.join(tmpDir, "archive.tar.gz");
11796
11821
  await fs8.promises.writeFile(tarPath, tarBuffer);
11797
11822
  const files = await listTarFiles(tarPath);
11798
- console.log(chalk18.dim("Extracting files..."));
11823
+ console.log(chalk19.dim("Extracting files..."));
11799
11824
  await tar4.extract({
11800
11825
  file: tarPath,
11801
11826
  cwd: destination,
@@ -11803,9 +11828,9 @@ async function cloneStorage(name, type2, destination, options = {}) {
11803
11828
  });
11804
11829
  await fs8.promises.unlink(tarPath);
11805
11830
  await fs8.promises.rmdir(tmpDir);
11806
- console.log(chalk18.green(`\u2713 Extracted ${files.length} files`));
11831
+ console.log(chalk19.green(`\u2713 Extracted ${files.length} files`));
11807
11832
  await writeStorageConfig(name, destination, type2);
11808
- console.log(chalk18.green(`\u2713 Initialized .vm0/storage.yaml`));
11833
+ console.log(chalk19.green(`\u2713 Initialized .vm0/storage.yaml`));
11809
11834
  return {
11810
11835
  success: true,
11811
11836
  fileCount: downloadInfo.fileCount,
@@ -11820,10 +11845,10 @@ var cloneCommand = new Command18().name("clone").description("Clone a remote vol
11820
11845
  const targetDir = destination || name;
11821
11846
  console.log(`Cloning volume: ${name}`);
11822
11847
  const result = await cloneStorage(name, "volume", targetDir);
11823
- console.log(chalk19.green(`
11848
+ console.log(chalk20.green(`
11824
11849
  \u2713 Successfully cloned volume: ${name}`));
11825
- console.log(chalk19.dim(` Location: ${targetDir}/`));
11826
- console.log(chalk19.dim(` Version: ${result.versionId.slice(0, 8)}`));
11850
+ console.log(chalk20.dim(` Location: ${targetDir}/`));
11851
+ console.log(chalk20.dim(` Version: ${result.versionId.slice(0, 8)}`));
11827
11852
  })
11828
11853
  );
11829
11854
 
@@ -11835,7 +11860,7 @@ import { Command as Command26 } from "commander";
11835
11860
 
11836
11861
  // src/commands/artifact/init.ts
11837
11862
  import { Command as Command20 } from "commander";
11838
- import chalk20 from "chalk";
11863
+ import chalk21 from "chalk";
11839
11864
  import path10 from "path";
11840
11865
  var initCommand2 = new Command20().name("init").description("Initialize an artifact in the current directory").option(
11841
11866
  "-n, --name <name>",
@@ -11848,24 +11873,24 @@ var initCommand2 = new Command20().name("init").description("Initialize an artif
11848
11873
  if (existingConfig) {
11849
11874
  if (existingConfig.type === "artifact") {
11850
11875
  console.log(
11851
- chalk20.yellow(
11876
+ chalk21.yellow(
11852
11877
  `Artifact already initialized: ${existingConfig.name}`
11853
11878
  )
11854
11879
  );
11855
11880
  } else {
11856
11881
  console.log(
11857
- chalk20.yellow(
11882
+ chalk21.yellow(
11858
11883
  `Directory already initialized as volume: ${existingConfig.name}`
11859
11884
  )
11860
11885
  );
11861
11886
  console.log(
11862
- chalk20.dim(
11887
+ chalk21.dim(
11863
11888
  " To change type, delete .vm0/storage.yaml and reinitialize"
11864
11889
  )
11865
11890
  );
11866
11891
  }
11867
11892
  console.log(
11868
- chalk20.dim(`Config file: ${path10.join(cwd, ".vm0", "storage.yaml")}`)
11893
+ chalk21.dim(`Config file: ${path10.join(cwd, ".vm0", "storage.yaml")}`)
11869
11894
  );
11870
11895
  return;
11871
11896
  }
@@ -11889,7 +11914,7 @@ var initCommand2 = new Command20().name("init").description("Initialize an artif
11889
11914
  }
11890
11915
  );
11891
11916
  if (name === void 0) {
11892
- console.log(chalk20.dim("Cancelled"));
11917
+ console.log(chalk21.dim("Cancelled"));
11893
11918
  return;
11894
11919
  }
11895
11920
  artifactName = name;
@@ -11902,9 +11927,9 @@ var initCommand2 = new Command20().name("init").description("Initialize an artif
11902
11927
  });
11903
11928
  }
11904
11929
  await writeStorageConfig(artifactName, cwd, "artifact");
11905
- console.log(chalk20.green(`\u2713 Initialized artifact: ${artifactName}`));
11930
+ console.log(chalk21.green(`\u2713 Initialized artifact: ${artifactName}`));
11906
11931
  console.log(
11907
- chalk20.dim(
11932
+ chalk21.dim(
11908
11933
  ` Config saved to ${path10.join(cwd, ".vm0", "storage.yaml")}`
11909
11934
  )
11910
11935
  );
@@ -11913,7 +11938,7 @@ var initCommand2 = new Command20().name("init").description("Initialize an artif
11913
11938
 
11914
11939
  // src/commands/artifact/push.ts
11915
11940
  import { Command as Command21 } from "commander";
11916
- import chalk21 from "chalk";
11941
+ import chalk22 from "chalk";
11917
11942
  var pushCommand2 = new Command21().name("push").description("Push local files to cloud artifact").option(
11918
11943
  "-f, --force",
11919
11944
  "Force upload even if content unchanged (recreate archive)"
@@ -11935,27 +11960,27 @@ var pushCommand2 = new Command21().name("push").description("Push local files to
11935
11960
  console.log(`Pushing artifact: ${config.name}`);
11936
11961
  const result = await directUpload(config.name, "artifact", cwd, {
11937
11962
  onProgress: (message) => {
11938
- console.log(chalk21.dim(message));
11963
+ console.log(chalk22.dim(message));
11939
11964
  },
11940
11965
  force: options.force
11941
11966
  });
11942
11967
  const shortVersion = result.versionId.slice(0, 8);
11943
11968
  if (result.empty) {
11944
- console.log(chalk21.dim("No files found (empty artifact)"));
11969
+ console.log(chalk22.dim("No files found (empty artifact)"));
11945
11970
  } else if (result.deduplicated) {
11946
- console.log(chalk21.green("\u2713 Content unchanged (deduplicated)"));
11971
+ console.log(chalk22.green("\u2713 Content unchanged (deduplicated)"));
11947
11972
  } else {
11948
- console.log(chalk21.green("\u2713 Upload complete"));
11973
+ console.log(chalk22.green("\u2713 Upload complete"));
11949
11974
  }
11950
- console.log(chalk21.dim(` Version: ${shortVersion}`));
11951
- console.log(chalk21.dim(` Files: ${result.fileCount.toLocaleString()}`));
11952
- console.log(chalk21.dim(` Size: ${formatBytes(result.size)}`));
11975
+ console.log(chalk22.dim(` Version: ${shortVersion}`));
11976
+ console.log(chalk22.dim(` Files: ${result.fileCount.toLocaleString()}`));
11977
+ console.log(chalk22.dim(` Size: ${formatBytes(result.size)}`));
11953
11978
  })
11954
11979
  );
11955
11980
 
11956
11981
  // src/commands/artifact/pull.ts
11957
11982
  import { Command as Command22 } from "commander";
11958
- import chalk22 from "chalk";
11983
+ import chalk23 from "chalk";
11959
11984
  import path11 from "path";
11960
11985
  import * as fs9 from "fs";
11961
11986
  import * as os7 from "os";
@@ -11980,7 +12005,7 @@ var pullCommand2 = new Command22().name("pull").description("Pull cloud artifact
11980
12005
  } else {
11981
12006
  console.log(`Pulling artifact: ${config.name}`);
11982
12007
  }
11983
- console.log(chalk22.dim("Getting download URL..."));
12008
+ console.log(chalk23.dim("Getting download URL..."));
11984
12009
  const downloadInfo = await getStorageDownload({
11985
12010
  name: config.name,
11986
12011
  type: "artifact",
@@ -11994,18 +12019,18 @@ var pullCommand2 = new Command22().name("pull").description("Pull cloud artifact
11994
12019
  if (!downloadUrl) {
11995
12020
  throw new Error("No download URL returned");
11996
12021
  }
11997
- console.log(chalk22.dim("Downloading from S3..."));
12022
+ console.log(chalk23.dim("Downloading from S3..."));
11998
12023
  const s3Response = await fetch(downloadUrl);
11999
12024
  if (!s3Response.ok) {
12000
12025
  throw new Error(`S3 download failed: ${s3Response.status}`);
12001
12026
  }
12002
12027
  const arrayBuffer = await s3Response.arrayBuffer();
12003
12028
  const tarBuffer = Buffer.from(arrayBuffer);
12004
- console.log(chalk22.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
12029
+ console.log(chalk23.green(`\u2713 Downloaded ${formatBytes(tarBuffer.length)}`));
12005
12030
  const tmpDir = fs9.mkdtempSync(path11.join(os7.tmpdir(), "vm0-"));
12006
12031
  const tarPath = path11.join(tmpDir, "artifact.tar.gz");
12007
12032
  await fs9.promises.writeFile(tarPath, tarBuffer);
12008
- console.log(chalk22.dim("Syncing local files..."));
12033
+ console.log(chalk23.dim("Syncing local files..."));
12009
12034
  const remoteFiles = await listTarFiles(tarPath);
12010
12035
  const remoteFilesSet = new Set(
12011
12036
  remoteFiles.map((f) => f.replace(/\\/g, "/"))
@@ -12013,10 +12038,10 @@ var pullCommand2 = new Command22().name("pull").description("Pull cloud artifact
12013
12038
  const removedCount = await removeExtraFiles(cwd, remoteFilesSet);
12014
12039
  if (removedCount > 0) {
12015
12040
  console.log(
12016
- chalk22.green(`\u2713 Removed ${removedCount} files not in remote`)
12041
+ chalk23.green(`\u2713 Removed ${removedCount} files not in remote`)
12017
12042
  );
12018
12043
  }
12019
- console.log(chalk22.dim("Extracting files..."));
12044
+ console.log(chalk23.dim("Extracting files..."));
12020
12045
  await tar5.extract({
12021
12046
  file: tarPath,
12022
12047
  cwd,
@@ -12024,13 +12049,13 @@ var pullCommand2 = new Command22().name("pull").description("Pull cloud artifact
12024
12049
  });
12025
12050
  await fs9.promises.unlink(tarPath);
12026
12051
  await fs9.promises.rmdir(tmpDir);
12027
- console.log(chalk22.green(`\u2713 Extracted ${remoteFiles.length} files`));
12052
+ console.log(chalk23.green(`\u2713 Extracted ${remoteFiles.length} files`));
12028
12053
  })
12029
12054
  );
12030
12055
 
12031
12056
  // src/commands/artifact/status.ts
12032
12057
  import { Command as Command23 } from "commander";
12033
- import chalk23 from "chalk";
12058
+ import chalk24 from "chalk";
12034
12059
  var statusCommand3 = new Command23().name("status").description("Show status of cloud artifact").action(
12035
12060
  withErrorHandler(async () => {
12036
12061
  const cwd = process.cwd();
@@ -12054,13 +12079,13 @@ var statusCommand3 = new Command23().name("status").description("Show status of
12054
12079
  });
12055
12080
  const shortVersion = info.versionId.slice(0, 8);
12056
12081
  if ("empty" in info) {
12057
- console.log(chalk23.green("\u2713 Found (empty)"));
12058
- console.log(chalk23.dim(` Version: ${shortVersion}`));
12082
+ console.log(chalk24.green("\u2713 Found (empty)"));
12083
+ console.log(chalk24.dim(` Version: ${shortVersion}`));
12059
12084
  } else {
12060
- console.log(chalk23.green("\u2713 Found"));
12061
- console.log(chalk23.dim(` Version: ${shortVersion}`));
12062
- console.log(chalk23.dim(` Files: ${info.fileCount.toLocaleString()}`));
12063
- console.log(chalk23.dim(` Size: ${formatBytes(info.size)}`));
12085
+ console.log(chalk24.green("\u2713 Found"));
12086
+ console.log(chalk24.dim(` Version: ${shortVersion}`));
12087
+ console.log(chalk24.dim(` Files: ${info.fileCount.toLocaleString()}`));
12088
+ console.log(chalk24.dim(` Size: ${formatBytes(info.size)}`));
12064
12089
  }
12065
12090
  } catch (error) {
12066
12091
  if (error instanceof ApiRequestError && error.status === 404) {
@@ -12075,14 +12100,14 @@ var statusCommand3 = new Command23().name("status").description("Show status of
12075
12100
 
12076
12101
  // src/commands/artifact/list.ts
12077
12102
  import { Command as Command24 } from "commander";
12078
- import chalk24 from "chalk";
12103
+ import chalk25 from "chalk";
12079
12104
  var listCommand3 = new Command24().name("list").alias("ls").description("List all remote artifacts").action(
12080
12105
  withErrorHandler(async () => {
12081
12106
  const items = await listStorages({ type: "artifact" });
12082
12107
  if (items.length === 0) {
12083
- console.log(chalk24.dim("No artifacts found"));
12108
+ console.log(chalk25.dim("No artifacts found"));
12084
12109
  console.log(
12085
- chalk24.dim(
12110
+ chalk25.dim(
12086
12111
  " Create one with: vm0 artifact init && vm0 artifact push"
12087
12112
  )
12088
12113
  );
@@ -12103,7 +12128,7 @@ var listCommand3 = new Command24().name("list").alias("ls").description("List al
12103
12128
  "FILES".padStart(filesWidth),
12104
12129
  "UPDATED"
12105
12130
  ].join(" ");
12106
- console.log(chalk24.dim(header));
12131
+ console.log(chalk25.dim(header));
12107
12132
  for (const item of items) {
12108
12133
  const row = [
12109
12134
  item.name.padEnd(nameWidth),
@@ -12118,16 +12143,16 @@ var listCommand3 = new Command24().name("list").alias("ls").description("List al
12118
12143
 
12119
12144
  // src/commands/artifact/clone.ts
12120
12145
  import { Command as Command25 } from "commander";
12121
- import chalk25 from "chalk";
12146
+ import chalk26 from "chalk";
12122
12147
  var cloneCommand2 = new Command25().name("clone").description("Clone a remote artifact to local directory (latest version)").argument("<name>", "Artifact name to clone").argument("[destination]", "Destination directory (default: artifact name)").action(
12123
12148
  withErrorHandler(async (name, destination) => {
12124
12149
  const targetDir = destination || name;
12125
12150
  console.log(`Cloning artifact: ${name}`);
12126
12151
  const result = await cloneStorage(name, "artifact", targetDir);
12127
- console.log(chalk25.green(`
12152
+ console.log(chalk26.green(`
12128
12153
  \u2713 Successfully cloned artifact: ${name}`));
12129
- console.log(chalk25.dim(` Location: ${targetDir}/`));
12130
- console.log(chalk25.dim(` Version: ${result.versionId.slice(0, 8)}`));
12154
+ console.log(chalk26.dim(` Location: ${targetDir}/`));
12155
+ console.log(chalk26.dim(` Version: ${result.versionId.slice(0, 8)}`));
12131
12156
  })
12132
12157
  );
12133
12158
 
@@ -12139,7 +12164,7 @@ import { Command as Command33 } from "commander";
12139
12164
 
12140
12165
  // src/commands/memory/init.ts
12141
12166
  import { Command as Command27 } from "commander";
12142
- import chalk26 from "chalk";
12167
+ import chalk27 from "chalk";
12143
12168
  import path12 from "path";
12144
12169
  var initCommand3 = new Command27().name("init").description("Initialize a memory in the current directory").option("-n, --name <name>", "Memory name (required in non-interactive mode)").action(
12145
12170
  withErrorHandler(async (options) => {
@@ -12149,22 +12174,22 @@ var initCommand3 = new Command27().name("init").description("Initialize a memory
12149
12174
  if (existingConfig) {
12150
12175
  if (existingConfig.type === "memory") {
12151
12176
  console.log(
12152
- chalk26.yellow(`Memory already initialized: ${existingConfig.name}`)
12177
+ chalk27.yellow(`Memory already initialized: ${existingConfig.name}`)
12153
12178
  );
12154
12179
  } else {
12155
12180
  console.log(
12156
- chalk26.yellow(
12181
+ chalk27.yellow(
12157
12182
  `Directory already initialized as ${existingConfig.type}: ${existingConfig.name}`
12158
12183
  )
12159
12184
  );
12160
12185
  console.log(
12161
- chalk26.dim(
12186
+ chalk27.dim(
12162
12187
  " To change type, delete .vm0/storage.yaml and reinitialize"
12163
12188
  )
12164
12189
  );
12165
12190
  }
12166
12191
  console.log(
12167
- chalk26.dim(`Config file: ${path12.join(cwd, ".vm0", "storage.yaml")}`)
12192
+ chalk27.dim(`Config file: ${path12.join(cwd, ".vm0", "storage.yaml")}`)
12168
12193
  );
12169
12194
  return;
12170
12195
  }
@@ -12188,7 +12213,7 @@ var initCommand3 = new Command27().name("init").description("Initialize a memory
12188
12213
  }
12189
12214
  );
12190
12215
  if (name === void 0) {
12191
- console.log(chalk26.dim("Cancelled"));
12216
+ console.log(chalk27.dim("Cancelled"));
12192
12217
  return;
12193
12218
  }
12194
12219
  memoryName = name;
@@ -12201,9 +12226,9 @@ var initCommand3 = new Command27().name("init").description("Initialize a memory
12201
12226
  });
12202
12227
  }
12203
12228
  await writeStorageConfig(memoryName, cwd, "memory");
12204
- console.log(chalk26.green(`\u2713 Initialized memory: ${memoryName}`));
12229
+ console.log(chalk27.green(`\u2713 Initialized memory: ${memoryName}`));
12205
12230
  console.log(
12206
- chalk26.dim(
12231
+ chalk27.dim(
12207
12232
  ` Config saved to ${path12.join(cwd, ".vm0", "storage.yaml")}`
12208
12233
  )
12209
12234
  );
@@ -12212,7 +12237,7 @@ var initCommand3 = new Command27().name("init").description("Initialize a memory
12212
12237
 
12213
12238
  // src/commands/memory/push.ts
12214
12239
  import { Command as Command28 } from "commander";
12215
- import chalk27 from "chalk";
12240
+ import chalk28 from "chalk";
12216
12241
  var pushCommand3 = new Command28().name("push").description("Push local files to cloud memory").option(
12217
12242
  "-f, --force",
12218
12243
  "Force upload even if content unchanged (recreate archive)"
@@ -12234,42 +12259,42 @@ var pushCommand3 = new Command28().name("push").description("Push local files to
12234
12259
  console.log(`Pushing memory: ${config.name}`);
12235
12260
  const result = await directUpload(config.name, "memory", cwd, {
12236
12261
  onProgress: (message) => {
12237
- console.log(chalk27.dim(message));
12262
+ console.log(chalk28.dim(message));
12238
12263
  },
12239
12264
  force: options.force
12240
12265
  });
12241
12266
  const shortVersion = result.versionId.slice(0, 8);
12242
12267
  if (result.empty) {
12243
- console.log(chalk27.dim("No files found (empty memory)"));
12268
+ console.log(chalk28.dim("No files found (empty memory)"));
12244
12269
  } else if (result.deduplicated) {
12245
- console.log(chalk27.green("\u2713 Content unchanged (deduplicated)"));
12270
+ console.log(chalk28.green("\u2713 Content unchanged (deduplicated)"));
12246
12271
  } else {
12247
- console.log(chalk27.green("\u2713 Upload complete"));
12272
+ console.log(chalk28.green("\u2713 Upload complete"));
12248
12273
  }
12249
- console.log(chalk27.dim(` Version: ${shortVersion}`));
12250
- console.log(chalk27.dim(` Files: ${result.fileCount.toLocaleString()}`));
12251
- console.log(chalk27.dim(` Size: ${formatBytes(result.size)}`));
12274
+ console.log(chalk28.dim(` Version: ${shortVersion}`));
12275
+ console.log(chalk28.dim(` Files: ${result.fileCount.toLocaleString()}`));
12276
+ console.log(chalk28.dim(` Size: ${formatBytes(result.size)}`));
12252
12277
  })
12253
12278
  );
12254
12279
 
12255
12280
  // src/commands/memory/pull.ts
12256
12281
  import { Command as Command29 } from "commander";
12257
- import chalk28 from "chalk";
12282
+ import chalk29 from "chalk";
12258
12283
  var pullCommand3 = new Command29().name("pull").description("Pull remote memory to local directory (latest version)").argument("[name]", "Memory name to pull", "memory").argument("[destination]", "Destination directory (default: memory name)").action(
12259
12284
  withErrorHandler(async (name, destination) => {
12260
12285
  const targetDir = destination || name;
12261
12286
  console.log(`Pulling memory: ${name}`);
12262
12287
  const result = await cloneStorage(name, "memory", targetDir);
12263
- console.log(chalk28.green(`
12288
+ console.log(chalk29.green(`
12264
12289
  \u2713 Successfully pulled memory: ${name}`));
12265
- console.log(chalk28.dim(` Location: ${targetDir}/`));
12266
- console.log(chalk28.dim(` Version: ${result.versionId.slice(0, 8)}`));
12290
+ console.log(chalk29.dim(` Location: ${targetDir}/`));
12291
+ console.log(chalk29.dim(` Version: ${result.versionId.slice(0, 8)}`));
12267
12292
  })
12268
12293
  );
12269
12294
 
12270
12295
  // src/commands/memory/status.ts
12271
12296
  import { Command as Command30 } from "commander";
12272
- import chalk29 from "chalk";
12297
+ import chalk30 from "chalk";
12273
12298
  var statusCommand4 = new Command30().name("status").description("Show status of cloud memory").action(
12274
12299
  withErrorHandler(async () => {
12275
12300
  const cwd = process.cwd();
@@ -12293,13 +12318,13 @@ var statusCommand4 = new Command30().name("status").description("Show status of
12293
12318
  });
12294
12319
  const shortVersion = info.versionId.slice(0, 8);
12295
12320
  if ("empty" in info) {
12296
- console.log(chalk29.green("\u2713 Found (empty)"));
12297
- console.log(chalk29.dim(` Version: ${shortVersion}`));
12321
+ console.log(chalk30.green("\u2713 Found (empty)"));
12322
+ console.log(chalk30.dim(` Version: ${shortVersion}`));
12298
12323
  } else {
12299
- console.log(chalk29.green("\u2713 Found"));
12300
- console.log(chalk29.dim(` Version: ${shortVersion}`));
12301
- console.log(chalk29.dim(` Files: ${info.fileCount.toLocaleString()}`));
12302
- console.log(chalk29.dim(` Size: ${formatBytes(info.size)}`));
12324
+ console.log(chalk30.green("\u2713 Found"));
12325
+ console.log(chalk30.dim(` Version: ${shortVersion}`));
12326
+ console.log(chalk30.dim(` Files: ${info.fileCount.toLocaleString()}`));
12327
+ console.log(chalk30.dim(` Size: ${formatBytes(info.size)}`));
12303
12328
  }
12304
12329
  } catch (error) {
12305
12330
  if (error instanceof ApiRequestError && error.status === 404) {
@@ -12314,14 +12339,14 @@ var statusCommand4 = new Command30().name("status").description("Show status of
12314
12339
 
12315
12340
  // src/commands/memory/list.ts
12316
12341
  import { Command as Command31 } from "commander";
12317
- import chalk30 from "chalk";
12342
+ import chalk31 from "chalk";
12318
12343
  var listCommand4 = new Command31().name("list").alias("ls").description("List all remote memory storages").action(
12319
12344
  withErrorHandler(async () => {
12320
12345
  const items = await listStorages({ type: "memory" });
12321
12346
  if (items.length === 0) {
12322
- console.log(chalk30.dim("No memory storages found"));
12347
+ console.log(chalk31.dim("No memory storages found"));
12323
12348
  console.log(
12324
- chalk30.dim(" Memory is created automatically on first agent run")
12349
+ chalk31.dim(" Memory is created automatically on first agent run")
12325
12350
  );
12326
12351
  return;
12327
12352
  }
@@ -12340,7 +12365,7 @@ var listCommand4 = new Command31().name("list").alias("ls").description("List al
12340
12365
  "FILES".padStart(filesWidth),
12341
12366
  "UPDATED"
12342
12367
  ].join(" ");
12343
- console.log(chalk30.dim(header));
12368
+ console.log(chalk31.dim(header));
12344
12369
  for (const item of items) {
12345
12370
  const row = [
12346
12371
  item.name.padEnd(nameWidth),
@@ -12355,16 +12380,16 @@ var listCommand4 = new Command31().name("list").alias("ls").description("List al
12355
12380
 
12356
12381
  // src/commands/memory/clone.ts
12357
12382
  import { Command as Command32 } from "commander";
12358
- import chalk31 from "chalk";
12383
+ import chalk32 from "chalk";
12359
12384
  var cloneCommand3 = new Command32().name("clone").description("Clone a remote memory to local directory (latest version)").argument("<name>", "Memory name to clone").argument("[destination]", "Destination directory (default: memory name)").action(
12360
12385
  withErrorHandler(async (name, destination) => {
12361
12386
  const targetDir = destination || name;
12362
12387
  console.log(`Cloning memory: ${name}`);
12363
12388
  const result = await cloneStorage(name, "memory", targetDir);
12364
- console.log(chalk31.green(`
12389
+ console.log(chalk32.green(`
12365
12390
  \u2713 Successfully cloned memory: ${name}`));
12366
- console.log(chalk31.dim(` Location: ${targetDir}/`));
12367
- console.log(chalk31.dim(` Version: ${result.versionId.slice(0, 8)}`));
12391
+ console.log(chalk32.dim(` Location: ${targetDir}/`));
12392
+ console.log(chalk32.dim(` Version: ${result.versionId.slice(0, 8)}`));
12368
12393
  })
12369
12394
  );
12370
12395
 
@@ -12373,7 +12398,7 @@ var memoryCommand = new Command33().name("memory").description("Manage agent lon
12373
12398
 
12374
12399
  // src/commands/cook/cook.ts
12375
12400
  import { Command as Command34, Option as Option5 } from "commander";
12376
- import chalk33 from "chalk";
12401
+ import chalk34 from "chalk";
12377
12402
  import { readFile as readFile7, mkdir as mkdir6 } from "fs/promises";
12378
12403
  import { existsSync as existsSync10 } from "fs";
12379
12404
  import path13 from "path";
@@ -12445,12 +12470,12 @@ async function saveCookState(state) {
12445
12470
  }
12446
12471
 
12447
12472
  // src/commands/cook/utils.ts
12448
- import chalk32 from "chalk";
12473
+ import chalk33 from "chalk";
12449
12474
  import { existsSync as existsSync9 } from "fs";
12450
12475
  var CONFIG_FILE2 = "vm0.yaml";
12451
12476
  var ARTIFACT_DIR = "artifact";
12452
12477
  function printCommand(cmd) {
12453
- console.log(chalk32.dim(`> ${cmd}`));
12478
+ console.log(chalk33.dim(`> ${cmd}`));
12454
12479
  }
12455
12480
  function execVm0Command(args, options = {}) {
12456
12481
  return new Promise((resolve2, reject) => {
@@ -12549,7 +12574,7 @@ async function autoPullArtifact(runOutput, artifactDir) {
12549
12574
  );
12550
12575
  if (serverVersion && existsSync9(artifactDir)) {
12551
12576
  console.log();
12552
- console.log(chalk32.bold("Pulling updated artifact:"));
12577
+ console.log(chalk33.bold("Pulling updated artifact:"));
12553
12578
  printCommand(`cd ${ARTIFACT_DIR}`);
12554
12579
  printCommand(`vm0 artifact pull ${serverVersion}`);
12555
12580
  try {
@@ -12559,9 +12584,9 @@ async function autoPullArtifact(runOutput, artifactDir) {
12559
12584
  });
12560
12585
  printCommand("cd ..");
12561
12586
  } catch (error) {
12562
- console.error(chalk32.red(`\u2717 Artifact pull failed`));
12587
+ console.error(chalk33.red(`\u2717 Artifact pull failed`));
12563
12588
  if (error instanceof Error) {
12564
- console.error(chalk32.dim(` ${error.message}`));
12589
+ console.error(chalk33.dim(` ${error.message}`));
12565
12590
  }
12566
12591
  }
12567
12592
  }
@@ -12569,7 +12594,7 @@ async function autoPullArtifact(runOutput, artifactDir) {
12569
12594
 
12570
12595
  // src/commands/cook/cook.ts
12571
12596
  async function loadAndValidateConfig2() {
12572
- console.log(chalk33.bold(`Reading config: ${CONFIG_FILE2}`));
12597
+ console.log(chalk34.bold(`Reading config: ${CONFIG_FILE2}`));
12573
12598
  if (!existsSync10(CONFIG_FILE2)) {
12574
12599
  throw new Error(`Config file not found: ${CONFIG_FILE2}`);
12575
12600
  }
@@ -12591,7 +12616,7 @@ async function loadAndValidateConfig2() {
12591
12616
  const agentName = agentNames[0];
12592
12617
  const volumeCount = config.volumes ? Object.keys(config.volumes).length : 0;
12593
12618
  console.log(
12594
- chalk33.green(`\u2713 Config validated: 1 agent, ${volumeCount} volume(s)`)
12619
+ chalk34.green(`\u2713 Config validated: 1 agent, ${volumeCount} volume(s)`)
12595
12620
  );
12596
12621
  return { config, agentName, volumeCount };
12597
12622
  }
@@ -12600,7 +12625,7 @@ async function processVolumes(config, cwd) {
12600
12625
  return;
12601
12626
  }
12602
12627
  console.log();
12603
- console.log(chalk33.bold("Processing volumes:"));
12628
+ console.log(chalk34.bold("Processing volumes:"));
12604
12629
  for (const volumeConfig of Object.values(config.volumes)) {
12605
12630
  const volumeDir = path13.join(cwd, volumeConfig.name);
12606
12631
  if (!existsSync10(volumeDir)) {
@@ -12634,7 +12659,7 @@ async function processVolumes(config, cwd) {
12634
12659
  }
12635
12660
  async function processArtifact(cwd) {
12636
12661
  console.log();
12637
- console.log(chalk33.bold("Processing artifact:"));
12662
+ console.log(chalk34.bold("Processing artifact:"));
12638
12663
  const artifactDir = path13.join(cwd, ARTIFACT_DIR);
12639
12664
  try {
12640
12665
  if (!existsSync10(artifactDir)) {
@@ -12666,7 +12691,7 @@ async function processArtifact(cwd) {
12666
12691
  }
12667
12692
  async function composeAgent(cwd, skipConfirm) {
12668
12693
  console.log();
12669
- console.log(chalk33.bold("Composing agent:"));
12694
+ console.log(chalk34.bold("Composing agent:"));
12670
12695
  const composeArgs = skipConfirm ? ["compose", "--yes", CONFIG_FILE2] : ["compose", CONFIG_FILE2];
12671
12696
  printCommand(`vm0 ${composeArgs.join(" ")}`);
12672
12697
  try {
@@ -12680,7 +12705,7 @@ async function composeAgent(cwd, skipConfirm) {
12680
12705
  }
12681
12706
  async function runAgent(agentName, artifactDir, prompt, cwd, options) {
12682
12707
  console.log();
12683
- console.log(chalk33.bold("Running agent:"));
12708
+ console.log(chalk34.bold("Running agent:"));
12684
12709
  printCommand(
12685
12710
  `vm0 run ${agentName} --artifact-name ${ARTIFACT_DIR} "${prompt}"`
12686
12711
  );
@@ -12713,7 +12738,7 @@ var cookAction = new Command34().name("cook").description("Quick start: prepare,
12713
12738
  withErrorHandler(
12714
12739
  async (prompt, options) => {
12715
12740
  if (options.autoUpdate !== false) {
12716
- const shouldExit = await checkAndUpgrade("9.58.0", prompt);
12741
+ const shouldExit = await checkAndUpgrade("9.59.0", prompt);
12717
12742
  if (shouldExit) {
12718
12743
  process.exit(0);
12719
12744
  }
@@ -12896,7 +12921,7 @@ var cookCommand = cookAction;
12896
12921
 
12897
12922
  // src/commands/logs/index.ts
12898
12923
  import { Command as Command39 } from "commander";
12899
- import chalk35 from "chalk";
12924
+ import chalk36 from "chalk";
12900
12925
 
12901
12926
  // src/lib/api/api-client.ts
12902
12927
  import { initClient as initClient12 } from "@ts-rest/core";
@@ -13594,7 +13619,7 @@ async function paginate(options) {
13594
13619
 
13595
13620
  // src/commands/logs/search.ts
13596
13621
  import { Command as Command38 } from "commander";
13597
- import chalk34 from "chalk";
13622
+ import chalk35 from "chalk";
13598
13623
  var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
13599
13624
  function renderEvent(event, renderer) {
13600
13625
  const eventData = event.eventData;
@@ -13650,7 +13675,7 @@ function renderResults(response) {
13650
13675
  isFirstGroup = false;
13651
13676
  const firstTimestamp = group.results[0].matchedEvent.createdAt;
13652
13677
  console.log(
13653
- chalk34.bold(formatRunHeader(runId, group.agentName, firstTimestamp))
13678
+ chalk35.bold(formatRunHeader(runId, group.agentName, firstTimestamp))
13654
13679
  );
13655
13680
  for (const result of group.results) {
13656
13681
  const renderer = new EventRenderer({
@@ -13670,7 +13695,7 @@ function renderResults(response) {
13670
13695
  if (response.hasMore) {
13671
13696
  console.log();
13672
13697
  console.log(
13673
- chalk34.dim(
13698
+ chalk35.dim(
13674
13699
  ` Showing first ${response.results.length} matches. Use --limit to see more.`
13675
13700
  )
13676
13701
  );
@@ -13691,9 +13716,9 @@ var searchCommand = new Command38().name("search").description("Search agent eve
13691
13716
  after
13692
13717
  });
13693
13718
  if (response.results.length === 0) {
13694
- console.log(chalk34.dim("No matches found"));
13719
+ console.log(chalk35.dim("No matches found"));
13695
13720
  console.log(
13696
- chalk34.dim(
13721
+ chalk35.dim(
13697
13722
  " Try a broader search with --since 30d or a different keyword"
13698
13723
  )
13699
13724
  );
@@ -13730,28 +13755,28 @@ function formatNetworkLog(entry) {
13730
13755
  let statusColor;
13731
13756
  const status = entry.status || 0;
13732
13757
  if (status >= 200 && status < 300) {
13733
- statusColor = chalk35.green;
13758
+ statusColor = chalk36.green;
13734
13759
  } else if (status >= 300 && status < 400) {
13735
- statusColor = chalk35.yellow;
13760
+ statusColor = chalk36.yellow;
13736
13761
  } else if (status >= 400) {
13737
- statusColor = chalk35.red;
13762
+ statusColor = chalk36.red;
13738
13763
  } else {
13739
- statusColor = chalk35.gray;
13764
+ statusColor = chalk36.gray;
13740
13765
  }
13741
13766
  let latencyColor;
13742
13767
  const latencyMs = entry.latency_ms || 0;
13743
13768
  if (latencyMs < 500) {
13744
- latencyColor = chalk35.green;
13769
+ latencyColor = chalk36.green;
13745
13770
  } else if (latencyMs < 2e3) {
13746
- latencyColor = chalk35.yellow;
13771
+ latencyColor = chalk36.yellow;
13747
13772
  } else {
13748
- latencyColor = chalk35.red;
13773
+ latencyColor = chalk36.red;
13749
13774
  }
13750
13775
  const method = entry.method || "???";
13751
13776
  const requestSize = entry.request_size || 0;
13752
13777
  const responseSize = entry.response_size || 0;
13753
13778
  const url = entry.url || entry.host || "unknown";
13754
- return `[${entry.timestamp}] ${method.padEnd(6)} ${statusColor(status)} ${latencyColor(latencyMs + "ms")} ${formatBytes(requestSize)}/${formatBytes(responseSize)} ${chalk35.dim(url)}`;
13779
+ return `[${entry.timestamp}] ${method.padEnd(6)} ${statusColor(status)} ${latencyColor(latencyMs + "ms")} ${formatBytes(requestSize)}/${formatBytes(responseSize)} ${chalk36.dim(url)}`;
13755
13780
  }
13756
13781
  function createLogRenderer(verbose) {
13757
13782
  return new EventRenderer({
@@ -13857,7 +13882,7 @@ async function showAgentEvents(runId, options, platformUrl) {
13857
13882
  order: options.order
13858
13883
  });
13859
13884
  if (firstResponse.events.length === 0) {
13860
- console.log(chalk35.yellow("No agent events found for this run"));
13885
+ console.log(chalk36.yellow("No agent events found for this run"));
13861
13886
  return;
13862
13887
  }
13863
13888
  const framework = firstResponse.framework;
@@ -13890,7 +13915,7 @@ async function showAgentEvents(runId, options, platformUrl) {
13890
13915
  for (const event of events) {
13891
13916
  renderAgentEvent(event, framework, renderer);
13892
13917
  }
13893
- console.log(chalk35.dim(`View on platform: ${platformUrl}`));
13918
+ console.log(chalk36.dim(`View on platform: ${platformUrl}`));
13894
13919
  }
13895
13920
  async function showSystemLog(runId, options) {
13896
13921
  const limit = options.targetCount === "all" ? PAGE_LIMIT : Math.min(options.targetCount, PAGE_LIMIT);
@@ -13900,7 +13925,7 @@ async function showSystemLog(runId, options) {
13900
13925
  order: options.order
13901
13926
  });
13902
13927
  if (!response.systemLog) {
13903
- console.log(chalk35.yellow("No system log found for this run"));
13928
+ console.log(chalk36.yellow("No system log found for this run"));
13904
13929
  return;
13905
13930
  }
13906
13931
  console.log(response.systemLog);
@@ -13912,7 +13937,7 @@ async function showMetrics(runId, options) {
13912
13937
  order: options.order
13913
13938
  });
13914
13939
  if (firstResponse.metrics.length === 0) {
13915
- console.log(chalk35.yellow("No metrics found for this run"));
13940
+ console.log(chalk36.yellow("No metrics found for this run"));
13916
13941
  return;
13917
13942
  }
13918
13943
  let allMetrics;
@@ -13952,7 +13977,7 @@ async function showNetworkLogs(runId, options) {
13952
13977
  });
13953
13978
  if (firstResponse.networkLogs.length === 0) {
13954
13979
  console.log(
13955
- chalk35.yellow(
13980
+ chalk36.yellow(
13956
13981
  "No network logs found for this run. Network logs are only captured when using a runner with proxy enabled"
13957
13982
  )
13958
13983
  );
@@ -13993,13 +14018,13 @@ import { Command as Command48 } from "commander";
13993
14018
 
13994
14019
  // src/commands/org/status.ts
13995
14020
  import { Command as Command40 } from "commander";
13996
- import chalk36 from "chalk";
14021
+ import chalk37 from "chalk";
13997
14022
  var statusCommand5 = new Command40().name("status").description("View current organization status").action(
13998
14023
  withErrorHandler(async () => {
13999
14024
  try {
14000
14025
  const org = await getOrg();
14001
- console.log(chalk36.bold("Organization Information:"));
14002
- console.log(` Slug: ${chalk36.green(org.slug)}`);
14026
+ console.log(chalk37.bold("Organization Information:"));
14027
+ console.log(` Slug: ${chalk37.green(org.slug)}`);
14003
14028
  } catch (error) {
14004
14029
  if (error instanceof Error && error.message.includes("No org configured")) {
14005
14030
  throw new Error("No organization configured", {
@@ -14013,7 +14038,7 @@ var statusCommand5 = new Command40().name("status").description("View current or
14013
14038
 
14014
14039
  // src/commands/org/set.ts
14015
14040
  import { Command as Command41 } from "commander";
14016
- import chalk37 from "chalk";
14041
+ import chalk38 from "chalk";
14017
14042
  var setCommand = new Command41().name("set").description("Rename your organization slug").argument("<slug>", "The new organization slug").option(
14018
14043
  "--force",
14019
14044
  "Force change existing organization (may break references)"
@@ -14031,10 +14056,10 @@ var setCommand = new Command41().name("set").description("Rename your organizati
14031
14056
  }
14032
14057
  const org = await updateOrg({ slug, force: true });
14033
14058
  await saveConfig({ activeOrg: org.slug });
14034
- console.log(chalk37.green(`\u2713 Organization updated to ${org.slug}`));
14059
+ console.log(chalk38.green(`\u2713 Organization updated to ${org.slug}`));
14035
14060
  console.log();
14036
14061
  console.log("Your agents will now be namespaced as:");
14037
- console.log(chalk37.cyan(` ${org.slug}/<agent-name>`));
14062
+ console.log(chalk38.cyan(` ${org.slug}/<agent-name>`));
14038
14063
  } catch (error) {
14039
14064
  if (error instanceof Error && error.message.includes("already exists")) {
14040
14065
  throw new Error(
@@ -14048,17 +14073,17 @@ var setCommand = new Command41().name("set").description("Rename your organizati
14048
14073
 
14049
14074
  // src/commands/org/list.ts
14050
14075
  import { Command as Command42 } from "commander";
14051
- import chalk38 from "chalk";
14076
+ import chalk39 from "chalk";
14052
14077
  var listCommand5 = new Command42().name("list").description("List all accessible organizations").action(
14053
14078
  withErrorHandler(async () => {
14054
14079
  const result = await listOrgs();
14055
14080
  const activeOrg = await getActiveOrg();
14056
- console.log(chalk38.bold("Available organizations:"));
14081
+ console.log(chalk39.bold("Available organizations:"));
14057
14082
  for (const org of result.orgs) {
14058
14083
  const isCurrent = org.slug === activeOrg;
14059
- const marker = isCurrent ? chalk38.green("* ") : " ";
14084
+ const marker = isCurrent ? chalk39.green("* ") : " ";
14060
14085
  const roleLabel = org.role ? ` (${org.role})` : "";
14061
- const currentLabel = isCurrent ? chalk38.dim(" \u2190 current") : "";
14086
+ const currentLabel = isCurrent ? chalk39.dim(" \u2190 current") : "";
14062
14087
  console.log(`${marker}${org.slug}${roleLabel}${currentLabel}`);
14063
14088
  }
14064
14089
  })
@@ -14066,13 +14091,13 @@ var listCommand5 = new Command42().name("list").description("List all accessible
14066
14091
 
14067
14092
  // src/commands/org/use.ts
14068
14093
  import { Command as Command43 } from "commander";
14069
- import chalk39 from "chalk";
14094
+ import chalk40 from "chalk";
14070
14095
  var useCommand = new Command43().name("use").description("Switch to a different organization").argument("[slug]", "Organization slug to switch to").option("--personal", "Switch to personal org").action(
14071
14096
  withErrorHandler(
14072
14097
  async (slug, options) => {
14073
14098
  if (options.personal) {
14074
14099
  await saveConfig({ activeOrg: void 0 });
14075
- console.log(chalk39.green("\u2713 Switched to personal org."));
14100
+ console.log(chalk40.green("\u2713 Switched to personal org."));
14076
14101
  return;
14077
14102
  }
14078
14103
  if (!slug) {
@@ -14088,27 +14113,27 @@ var useCommand = new Command43().name("use").description("Switch to a different
14088
14113
  );
14089
14114
  }
14090
14115
  await saveConfig({ activeOrg: slug });
14091
- console.log(chalk39.green(`\u2713 Switched to organization: ${slug}`));
14116
+ console.log(chalk40.green(`\u2713 Switched to organization: ${slug}`));
14092
14117
  }
14093
14118
  )
14094
14119
  );
14095
14120
 
14096
14121
  // src/commands/org/members.ts
14097
14122
  import { Command as Command44 } from "commander";
14098
- import chalk40 from "chalk";
14123
+ import chalk41 from "chalk";
14099
14124
  var membersCommand = new Command44().name("members").description("View organization members").action(
14100
14125
  withErrorHandler(async () => {
14101
14126
  try {
14102
14127
  const status = await getOrgMembers();
14103
- console.log(chalk40.bold(`Organization: ${status.slug}`));
14128
+ console.log(chalk41.bold(`Organization: ${status.slug}`));
14104
14129
  console.log(` Role: ${status.role}`);
14105
14130
  console.log(
14106
14131
  ` Created: ${new Date(status.createdAt).toLocaleDateString()}`
14107
14132
  );
14108
14133
  console.log();
14109
- console.log(chalk40.bold("Members:"));
14134
+ console.log(chalk41.bold("Members:"));
14110
14135
  for (const member of status.members) {
14111
- const roleTag = member.role === "admin" ? chalk40.yellow(` (${member.role})`) : chalk40.dim(` (${member.role})`);
14136
+ const roleTag = member.role === "admin" ? chalk41.yellow(` (${member.role})`) : chalk41.dim(` (${member.role})`);
14112
14137
  console.log(` ${member.email}${roleTag}`);
14113
14138
  }
14114
14139
  } catch (error) {
@@ -14124,33 +14149,33 @@ var membersCommand = new Command44().name("members").description("View organizat
14124
14149
 
14125
14150
  // src/commands/org/invite.ts
14126
14151
  import { Command as Command45 } from "commander";
14127
- import chalk41 from "chalk";
14152
+ import chalk42 from "chalk";
14128
14153
  var inviteCommand = new Command45().name("invite").description("Invite a member to the current organization").requiredOption("--email <email>", "Email address of the member to invite").action(
14129
14154
  withErrorHandler(async (options) => {
14130
14155
  await inviteOrgMember(options.email);
14131
- console.log(chalk41.green(`\u2713 Invitation sent to ${options.email}`));
14156
+ console.log(chalk42.green(`\u2713 Invitation sent to ${options.email}`));
14132
14157
  })
14133
14158
  );
14134
14159
 
14135
14160
  // src/commands/org/remove.ts
14136
14161
  import { Command as Command46 } from "commander";
14137
- import chalk42 from "chalk";
14162
+ import chalk43 from "chalk";
14138
14163
  var removeCommand = new Command46().name("remove").description("Remove a member from the current organization").argument("<email>", "Email address of the member to remove").action(
14139
14164
  withErrorHandler(async (email) => {
14140
14165
  await removeOrgMember(email);
14141
- console.log(chalk42.green(`\u2713 Removed ${email} from organization`));
14166
+ console.log(chalk43.green(`\u2713 Removed ${email} from organization`));
14142
14167
  })
14143
14168
  );
14144
14169
 
14145
14170
  // src/commands/org/leave.ts
14146
14171
  import { Command as Command47 } from "commander";
14147
- import chalk43 from "chalk";
14172
+ import chalk44 from "chalk";
14148
14173
  var leaveCommand = new Command47().name("leave").description("Leave the current organization").action(
14149
14174
  withErrorHandler(async () => {
14150
14175
  await leaveOrg();
14151
14176
  await saveConfig({ activeOrg: void 0 });
14152
14177
  console.log(
14153
- chalk43.green("\u2713 Left organization. Switched to personal org.")
14178
+ chalk44.green("\u2713 Left organization. Switched to personal org.")
14154
14179
  );
14155
14180
  })
14156
14181
  );
@@ -14163,7 +14188,7 @@ import { Command as Command58 } from "commander";
14163
14188
 
14164
14189
  // src/commands/agent/clone.ts
14165
14190
  import { Command as Command49 } from "commander";
14166
- import chalk44 from "chalk";
14191
+ import chalk45 from "chalk";
14167
14192
  import { mkdtempSync as mkdtempSync5 } from "fs";
14168
14193
  import { mkdir as mkdir7, writeFile as writeFile6, readdir as readdir2, copyFile, rm as rm4 } from "fs/promises";
14169
14194
  import { join as join10, dirname as dirname3, resolve, sep } from "path";
@@ -14194,13 +14219,13 @@ async function downloadInstructions(agentName, instructionsPath, destination) {
14194
14219
  throw new Error("Invalid instructions path: path traversal detected");
14195
14220
  }
14196
14221
  const volumeName = getInstructionsStorageName(agentName);
14197
- console.log(chalk44.dim("Downloading instructions..."));
14222
+ console.log(chalk45.dim("Downloading instructions..."));
14198
14223
  const downloadInfo = await getStorageDownload({
14199
14224
  name: volumeName,
14200
14225
  type: "volume"
14201
14226
  });
14202
14227
  if ("empty" in downloadInfo) {
14203
- console.log(chalk44.yellow("\u26A0 Instructions volume is empty"));
14228
+ console.log(chalk45.yellow("\u26A0 Instructions volume is empty"));
14204
14229
  return false;
14205
14230
  }
14206
14231
  const response = await fetch(downloadInfo.url);
@@ -14215,7 +14240,7 @@ async function downloadInstructions(agentName, instructionsPath, destination) {
14215
14240
  const files = await readdir2(tmpDir);
14216
14241
  const mdFile = files.find((f) => f === "CLAUDE.md" || f === "AGENTS.md");
14217
14242
  if (!mdFile) {
14218
- console.log(chalk44.yellow("\u26A0 No instructions file found in volume"));
14243
+ console.log(chalk45.yellow("\u26A0 No instructions file found in volume"));
14219
14244
  await rm4(tmpDir, { recursive: true, force: true });
14220
14245
  return false;
14221
14246
  }
@@ -14245,7 +14270,7 @@ var cloneCommand4 = new Command49().name("clone").description("Clone agent compo
14245
14270
  await mkdir7(targetDir, { recursive: true });
14246
14271
  const yamlPath = join10(targetDir, "vm0.yaml");
14247
14272
  await writeFile6(yamlPath, yamlContent, "utf8");
14248
- console.log(chalk44.green("\u2713 Created vm0.yaml"));
14273
+ console.log(chalk45.green("\u2713 Created vm0.yaml"));
14249
14274
  const agentKey = Object.keys(content.agents)[0];
14250
14275
  const agent = agentKey ? content.agents[agentKey] : void 0;
14251
14276
  if (agent?.instructions) {
@@ -14256,26 +14281,26 @@ var cloneCommand4 = new Command49().name("clone").description("Clone agent compo
14256
14281
  targetDir
14257
14282
  );
14258
14283
  if (instructionsDownloaded) {
14259
- console.log(chalk44.green(`\u2713 Downloaded ${agent.instructions}`));
14284
+ console.log(chalk45.green(`\u2713 Downloaded ${agent.instructions}`));
14260
14285
  }
14261
14286
  } catch (error) {
14262
14287
  console.log(
14263
- chalk44.yellow(
14288
+ chalk45.yellow(
14264
14289
  `\u26A0 Could not download instructions: ${error instanceof Error ? error.message : "Unknown error"}`
14265
14290
  )
14266
14291
  );
14267
14292
  }
14268
14293
  }
14269
14294
  console.log();
14270
- console.log(chalk44.green(`\u2713 Successfully cloned agent: ${name}`));
14271
- console.log(chalk44.dim(` Location: ${targetDir}/`));
14272
- console.log(chalk44.dim(` Version: ${compose.headVersionId.slice(0, 8)}`));
14295
+ console.log(chalk45.green(`\u2713 Successfully cloned agent: ${name}`));
14296
+ console.log(chalk45.dim(` Location: ${targetDir}/`));
14297
+ console.log(chalk45.dim(` Version: ${compose.headVersionId.slice(0, 8)}`));
14273
14298
  })
14274
14299
  );
14275
14300
 
14276
14301
  // src/commands/agent/delete.ts
14277
14302
  import { Command as Command50 } from "commander";
14278
- import chalk45 from "chalk";
14303
+ import chalk46 from "chalk";
14279
14304
  var deleteCommand = new Command50().name("delete").alias("rm").description("Delete an agent").argument("<name>", "Agent name to delete").option("-y, --yes", "Skip confirmation prompt").action(
14280
14305
  withErrorHandler(async (name, options) => {
14281
14306
  const compose = await getComposeByName(name);
@@ -14290,7 +14315,7 @@ var deleteCommand = new Command50().name("delete").alias("rm").description("Dele
14290
14315
  }
14291
14316
  const confirmed = await promptConfirm(`Delete agent '${name}'?`, false);
14292
14317
  if (!confirmed) {
14293
- console.log(chalk45.dim("Cancelled"));
14318
+ console.log(chalk46.dim("Cancelled"));
14294
14319
  return;
14295
14320
  }
14296
14321
  }
@@ -14304,13 +14329,13 @@ var deleteCommand = new Command50().name("delete").alias("rm").description("Dele
14304
14329
  }
14305
14330
  throw error;
14306
14331
  }
14307
- console.log(chalk45.green(`\u2713 Agent '${name}' deleted`));
14332
+ console.log(chalk46.green(`\u2713 Agent '${name}' deleted`));
14308
14333
  })
14309
14334
  );
14310
14335
 
14311
14336
  // src/commands/agent/list.ts
14312
14337
  import { Command as Command51 } from "commander";
14313
- import chalk46 from "chalk";
14338
+ import chalk47 from "chalk";
14314
14339
  var listCommand6 = new Command51().name("list").alias("ls").description("List all agent composes").action(
14315
14340
  withErrorHandler(async () => {
14316
14341
  const response = await httpGet("/api/agent/composes/list");
@@ -14320,19 +14345,19 @@ var listCommand6 = new Command51().name("list").alias("ls").description("List al
14320
14345
  }
14321
14346
  const data = await response.json();
14322
14347
  if (data.composes.length === 0) {
14323
- console.log(chalk46.dim("No agent composes found"));
14348
+ console.log(chalk47.dim("No agent composes found"));
14324
14349
  console.log(
14325
- chalk46.dim(" Create one with: vm0 compose <agent-compose.yaml>")
14350
+ chalk47.dim(" Create one with: vm0 compose <agent-compose.yaml>")
14326
14351
  );
14327
14352
  return;
14328
14353
  }
14329
- const nameWidth = Math.max(4, ...data.composes.map((c23) => c23.name.length));
14354
+ const nameWidth = Math.max(4, ...data.composes.map((c24) => c24.name.length));
14330
14355
  const header = ["NAME".padEnd(nameWidth), "VERSION", "UPDATED"].join(
14331
14356
  " "
14332
14357
  );
14333
- console.log(chalk46.dim(header));
14358
+ console.log(chalk47.dim(header));
14334
14359
  for (const compose of data.composes) {
14335
- const versionShort = compose.headVersionId ? compose.headVersionId.slice(0, 8) : chalk46.dim("-");
14360
+ const versionShort = compose.headVersionId ? compose.headVersionId.slice(0, 8) : chalk47.dim("-");
14336
14361
  const row = [
14337
14362
  compose.name.padEnd(nameWidth),
14338
14363
  versionShort,
@@ -14345,7 +14370,7 @@ var listCommand6 = new Command51().name("list").alias("ls").description("List al
14345
14370
 
14346
14371
  // src/commands/agent/status.ts
14347
14372
  import { Command as Command52 } from "commander";
14348
- import chalk47 from "chalk";
14373
+ import chalk48 from "chalk";
14349
14374
 
14350
14375
  // src/lib/domain/source-derivation.ts
14351
14376
  import * as fs10 from "fs/promises";
@@ -14459,20 +14484,20 @@ function formatVariableSources(sources) {
14459
14484
  if (sources.secrets.length > 0) {
14460
14485
  console.log(` Secrets:`);
14461
14486
  for (const secret of sources.secrets) {
14462
- const sourceInfo = chalk47.dim(`(${secret.source})`);
14487
+ const sourceInfo = chalk48.dim(`(${secret.source})`);
14463
14488
  console.log(` - ${secret.name.padEnd(20)} ${sourceInfo}`);
14464
14489
  }
14465
14490
  }
14466
14491
  if (sources.vars.length > 0) {
14467
14492
  console.log(` Vars:`);
14468
14493
  for (const v of sources.vars) {
14469
- const sourceInfo = chalk47.dim(`(${v.source})`);
14494
+ const sourceInfo = chalk48.dim(`(${v.source})`);
14470
14495
  console.log(` - ${v.name.padEnd(20)} ${sourceInfo}`);
14471
14496
  }
14472
14497
  }
14473
14498
  }
14474
14499
  function formatAgentDetails(agentName, agent, agentSources, volumeConfigs) {
14475
- console.log(` ${chalk47.cyan(agentName)}:`);
14500
+ console.log(` ${chalk48.cyan(agentName)}:`);
14476
14501
  console.log(` Framework: ${agent.framework}`);
14477
14502
  if (agent.image) {
14478
14503
  console.log(` Image: ${agent.image}`);
@@ -14490,10 +14515,10 @@ function formatAgentDetails(agentName, agent, agentSources, volumeConfigs) {
14490
14515
  }
14491
14516
  }
14492
14517
  function formatComposeOutput(name, versionId, content, variableSources) {
14493
- console.log(chalk47.bold("Name:") + ` ${name}`);
14494
- console.log(chalk47.bold("Version:") + ` ${versionId}`);
14518
+ console.log(chalk48.bold("Name:") + ` ${name}`);
14519
+ console.log(chalk48.bold("Version:") + ` ${versionId}`);
14495
14520
  console.log();
14496
- console.log(chalk47.bold("Agents:"));
14521
+ console.log(chalk48.bold("Agents:"));
14497
14522
  for (const [agentName, agent] of Object.entries(content.agents)) {
14498
14523
  const agentSources = variableSources?.get(agentName);
14499
14524
  formatAgentDetails(agentName, agent, agentSources, content.volumes);
@@ -14552,7 +14577,7 @@ var statusCommand6 = new Command52().name("status").description("Show status of
14552
14577
  });
14553
14578
  } catch {
14554
14579
  console.error(
14555
- chalk47.yellow(
14580
+ chalk48.yellow(
14556
14581
  "\u26A0 Warning: Failed to fetch skill sources, showing basic info"
14557
14582
  )
14558
14583
  );
@@ -14569,7 +14594,7 @@ var statusCommand6 = new Command52().name("status").description("Show status of
14569
14594
 
14570
14595
  // src/commands/agent/public.ts
14571
14596
  import { Command as Command53 } from "commander";
14572
- import chalk48 from "chalk";
14597
+ import chalk49 from "chalk";
14573
14598
  var publicCommand = new Command53().name("public").description("Make an agent public (accessible to all authenticated users)").argument("<name>", "Agent name").option(
14574
14599
  "--experimental-shared-agent",
14575
14600
  "Enable experimental agent sharing feature"
@@ -14598,7 +14623,7 @@ var publicCommand = new Command53().name("public").description("Make an agent pu
14598
14623
  if (!response.ok) {
14599
14624
  const error = await response.json();
14600
14625
  if (response.status === 409) {
14601
- console.log(chalk48.yellow(`Agent "${name}" is already public`));
14626
+ console.log(chalk49.yellow(`Agent "${name}" is already public`));
14602
14627
  return;
14603
14628
  }
14604
14629
  throw new Error(
@@ -14606,11 +14631,11 @@ var publicCommand = new Command53().name("public").description("Make an agent pu
14606
14631
  );
14607
14632
  }
14608
14633
  const fullName = `${org.slug}/${name}`;
14609
- console.log(chalk48.green(`\u2713 Agent "${name}" is now public`));
14634
+ console.log(chalk49.green(`\u2713 Agent "${name}" is now public`));
14610
14635
  console.log();
14611
14636
  console.log("Others can now run your agent with:");
14612
14637
  console.log(
14613
- chalk48.cyan(
14638
+ chalk49.cyan(
14614
14639
  ` vm0 run ${fullName} --experimental-shared-agent "your prompt"`
14615
14640
  )
14616
14641
  );
@@ -14620,7 +14645,7 @@ var publicCommand = new Command53().name("public").description("Make an agent pu
14620
14645
 
14621
14646
  // src/commands/agent/private.ts
14622
14647
  import { Command as Command54 } from "commander";
14623
- import chalk49 from "chalk";
14648
+ import chalk50 from "chalk";
14624
14649
  var privateCommand = new Command54().name("private").description("Make an agent private (remove public access)").argument("<name>", "Agent name").option(
14625
14650
  "--experimental-shared-agent",
14626
14651
  "Enable experimental agent sharing feature"
@@ -14647,21 +14672,21 @@ var privateCommand = new Command54().name("private").description("Make an agent
14647
14672
  if (!response.ok) {
14648
14673
  const error = await response.json();
14649
14674
  if (response.status === 404) {
14650
- console.log(chalk49.yellow(`Agent "${name}" is already private`));
14675
+ console.log(chalk50.yellow(`Agent "${name}" is already private`));
14651
14676
  return;
14652
14677
  }
14653
14678
  throw new Error(
14654
14679
  error.error?.message || "Failed to make agent private"
14655
14680
  );
14656
14681
  }
14657
- console.log(chalk49.green(`\u2713 Agent "${name}" is now private`));
14682
+ console.log(chalk50.green(`\u2713 Agent "${name}" is now private`));
14658
14683
  }
14659
14684
  )
14660
14685
  );
14661
14686
 
14662
14687
  // src/commands/agent/share.ts
14663
14688
  import { Command as Command55 } from "commander";
14664
- import chalk50 from "chalk";
14689
+ import chalk51 from "chalk";
14665
14690
  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(
14666
14691
  "--experimental-shared-agent",
14667
14692
  "Enable experimental agent sharing feature"
@@ -14691,7 +14716,7 @@ var shareCommand = new Command55().name("share").description("Share an agent wit
14691
14716
  const error = await response.json();
14692
14717
  if (response.status === 409) {
14693
14718
  console.log(
14694
- chalk50.yellow(
14719
+ chalk51.yellow(
14695
14720
  `Agent "${name}" is already shared with ${options.email}`
14696
14721
  )
14697
14722
  );
@@ -14701,12 +14726,12 @@ var shareCommand = new Command55().name("share").description("Share an agent wit
14701
14726
  }
14702
14727
  const fullName = `${org.slug}/${name}`;
14703
14728
  console.log(
14704
- chalk50.green(`\u2713 Agent "${name}" shared with ${options.email}`)
14729
+ chalk51.green(`\u2713 Agent "${name}" shared with ${options.email}`)
14705
14730
  );
14706
14731
  console.log();
14707
14732
  console.log("They can now run your agent with:");
14708
14733
  console.log(
14709
- chalk50.cyan(
14734
+ chalk51.cyan(
14710
14735
  ` vm0 run ${fullName} --experimental-shared-agent "your prompt"`
14711
14736
  )
14712
14737
  );
@@ -14716,7 +14741,7 @@ var shareCommand = new Command55().name("share").description("Share an agent wit
14716
14741
 
14717
14742
  // src/commands/agent/unshare.ts
14718
14743
  import { Command as Command56 } from "commander";
14719
- import chalk51 from "chalk";
14744
+ import chalk52 from "chalk";
14720
14745
  var unshareCommand = new Command56().name("unshare").description("Remove sharing from a user").argument("<name>", "Agent name").requiredOption("--email <email>", "Email address to unshare").option(
14721
14746
  "--experimental-shared-agent",
14722
14747
  "Enable experimental agent sharing feature"
@@ -14744,7 +14769,7 @@ var unshareCommand = new Command56().name("unshare").description("Remove sharing
14744
14769
  const error = await response.json();
14745
14770
  if (response.status === 404) {
14746
14771
  console.log(
14747
- chalk51.yellow(
14772
+ chalk52.yellow(
14748
14773
  `Agent "${name}" is not shared with ${options.email}`
14749
14774
  )
14750
14775
  );
@@ -14753,7 +14778,7 @@ var unshareCommand = new Command56().name("unshare").description("Remove sharing
14753
14778
  throw new Error(error.error?.message || "Failed to unshare agent");
14754
14779
  }
14755
14780
  console.log(
14756
- chalk51.green(`\u2713 Removed sharing of "${name}" from ${options.email}`)
14781
+ chalk52.green(`\u2713 Removed sharing of "${name}" from ${options.email}`)
14757
14782
  );
14758
14783
  }
14759
14784
  )
@@ -14761,7 +14786,7 @@ var unshareCommand = new Command56().name("unshare").description("Remove sharing
14761
14786
 
14762
14787
  // src/commands/agent/permission.ts
14763
14788
  import { Command as Command57 } from "commander";
14764
- import chalk52 from "chalk";
14789
+ import chalk53 from "chalk";
14765
14790
  var permissionCommand = new Command57().name("permission").description("List all permissions for an agent").argument("<name>", "Agent name").option(
14766
14791
  "--experimental-shared-agent",
14767
14792
  "Enable experimental agent sharing feature"
@@ -14791,16 +14816,16 @@ var permissionCommand = new Command57().name("permission").description("List all
14791
14816
  }
14792
14817
  const data = await response.json();
14793
14818
  if (data.permissions.length === 0) {
14794
- console.log(chalk52.dim("No permissions set (private agent)"));
14819
+ console.log(chalk53.dim("No permissions set (private agent)"));
14795
14820
  return;
14796
14821
  }
14797
14822
  console.log(
14798
- chalk52.dim(
14823
+ chalk53.dim(
14799
14824
  "TYPE EMAIL PERMISSION GRANTED"
14800
14825
  )
14801
14826
  );
14802
14827
  console.log(
14803
- chalk52.dim(
14828
+ chalk53.dim(
14804
14829
  "------- ----------------------------- ---------- ----------"
14805
14830
  )
14806
14831
  );
@@ -14820,7 +14845,7 @@ var agentCommand = new Command58().name("agent").description("Manage agent compo
14820
14845
 
14821
14846
  // src/commands/init/index.ts
14822
14847
  import { Command as Command59 } from "commander";
14823
- import chalk53 from "chalk";
14848
+ import chalk54 from "chalk";
14824
14849
  import path17 from "path";
14825
14850
  import { existsSync as existsSync11 } from "fs";
14826
14851
  import { writeFile as writeFile7 } from "fs/promises";
@@ -14887,7 +14912,7 @@ var initCommand4 = new Command59().name("init").description("Initialize a new VM
14887
14912
  }
14888
14913
  );
14889
14914
  if (name === void 0) {
14890
- console.log(chalk53.dim("Cancelled"));
14915
+ console.log(chalk54.dim("Cancelled"));
14891
14916
  return;
14892
14917
  }
14893
14918
  agentName = name;
@@ -14901,23 +14926,23 @@ var initCommand4 = new Command59().name("init").description("Initialize a new VM
14901
14926
  }
14902
14927
  await writeFile7(VM0_YAML_FILE, generateVm0Yaml(agentName));
14903
14928
  const vm0Status = existingFiles.includes(VM0_YAML_FILE) ? " (overwritten)" : "";
14904
- console.log(chalk53.green(`\u2713 Created ${VM0_YAML_FILE}${vm0Status}`));
14929
+ console.log(chalk54.green(`\u2713 Created ${VM0_YAML_FILE}${vm0Status}`));
14905
14930
  await writeFile7(AGENTS_MD_FILE, generateAgentsMd());
14906
14931
  const agentsStatus = existingFiles.includes(AGENTS_MD_FILE) ? " (overwritten)" : "";
14907
- console.log(chalk53.green(`\u2713 Created ${AGENTS_MD_FILE}${agentsStatus}`));
14932
+ console.log(chalk54.green(`\u2713 Created ${AGENTS_MD_FILE}${agentsStatus}`));
14908
14933
  console.log();
14909
14934
  console.log("Next steps:");
14910
14935
  console.log(
14911
- ` 1. Set up model provider (one-time): ${chalk53.cyan("vm0 model-provider setup")}`
14936
+ ` 1. Set up model provider (one-time): ${chalk54.cyan("vm0 model-provider setup")}`
14912
14937
  );
14913
14938
  console.log(
14914
- ` 2. Edit ${chalk53.cyan("AGENTS.md")} to customize your agent's workflow`
14939
+ ` 2. Edit ${chalk54.cyan("AGENTS.md")} to customize your agent's workflow`
14915
14940
  );
14916
14941
  console.log(
14917
- ` Or install Claude plugin: ${chalk53.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
14942
+ ` Or install Claude plugin: ${chalk54.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
14918
14943
  );
14919
14944
  console.log(
14920
- ` 3. Run your agent: ${chalk53.cyan(`vm0 cook "let's start working"`)}`
14945
+ ` 3. Run your agent: ${chalk54.cyan(`vm0 cook "let's start working"`)}`
14921
14946
  );
14922
14947
  })
14923
14948
  );
@@ -14927,7 +14952,7 @@ import { Command as Command66 } from "commander";
14927
14952
 
14928
14953
  // src/commands/schedule/setup.ts
14929
14954
  import { Command as Command60 } from "commander";
14930
- import chalk54 from "chalk";
14955
+ import chalk55 from "chalk";
14931
14956
 
14932
14957
  // src/lib/domain/schedule-utils.ts
14933
14958
  import { parse as parseYaml5 } from "yaml";
@@ -15178,7 +15203,7 @@ async function gatherFrequency(optionFrequency, existingFrequency) {
15178
15203
  if (!isInteractive()) {
15179
15204
  throw new Error("--frequency is required (daily|weekly|monthly|once|loop)");
15180
15205
  }
15181
- const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c23) => c23.value === existingFrequency) : 0;
15206
+ const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c24) => c24.value === existingFrequency) : 0;
15182
15207
  frequency = await promptSelect(
15183
15208
  "Schedule frequency",
15184
15209
  FREQUENCY_CHOICES,
@@ -15203,7 +15228,7 @@ async function gatherDay(frequency, optionDay, existingDay) {
15203
15228
  throw new Error("--day is required for weekly/monthly");
15204
15229
  }
15205
15230
  if (frequency === "weekly") {
15206
- const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c23) => c23.value === existingDay) : 0;
15231
+ const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c24) => c24.value === existingDay) : 0;
15207
15232
  const day2 = await promptSelect(
15208
15233
  "Day of week",
15209
15234
  DAY_OF_WEEK_CHOICES,
@@ -15394,7 +15419,7 @@ async function buildAndDeploy(params) {
15394
15419
  }
15395
15420
  console.log(
15396
15421
  `
15397
- Deploying schedule for agent ${chalk54.cyan(params.agentName)}...`
15422
+ Deploying schedule for agent ${chalk55.cyan(params.agentName)}...`
15398
15423
  );
15399
15424
  const deployResult = await deploySchedule({
15400
15425
  name: params.scheduleName,
@@ -15411,62 +15436,62 @@ Deploying schedule for agent ${chalk54.cyan(params.agentName)}...`
15411
15436
  function displayDeployResult(agentName, deployResult) {
15412
15437
  if (deployResult.created) {
15413
15438
  console.log(
15414
- chalk54.green(`\u2713 Created schedule for agent ${chalk54.cyan(agentName)}`)
15439
+ chalk55.green(`\u2713 Created schedule for agent ${chalk55.cyan(agentName)}`)
15415
15440
  );
15416
15441
  } else {
15417
15442
  console.log(
15418
- chalk54.green(`\u2713 Updated schedule for agent ${chalk54.cyan(agentName)}`)
15443
+ chalk55.green(`\u2713 Updated schedule for agent ${chalk55.cyan(agentName)}`)
15419
15444
  );
15420
15445
  }
15421
- console.log(chalk54.dim(` Timezone: ${deployResult.schedule.timezone}`));
15446
+ console.log(chalk55.dim(` Timezone: ${deployResult.schedule.timezone}`));
15422
15447
  if (deployResult.schedule.triggerType === "loop" && deployResult.schedule.intervalSeconds != null) {
15423
15448
  console.log(
15424
- chalk54.dim(
15449
+ chalk55.dim(
15425
15450
  ` Mode: Loop (interval ${deployResult.schedule.intervalSeconds}s)`
15426
15451
  )
15427
15452
  );
15428
15453
  } else if (deployResult.schedule.cronExpression) {
15429
- console.log(chalk54.dim(` Cron: ${deployResult.schedule.cronExpression}`));
15454
+ console.log(chalk55.dim(` Cron: ${deployResult.schedule.cronExpression}`));
15430
15455
  if (deployResult.schedule.nextRunAt) {
15431
15456
  const nextRun = formatInTimezone(
15432
15457
  deployResult.schedule.nextRunAt,
15433
15458
  deployResult.schedule.timezone
15434
15459
  );
15435
- console.log(chalk54.dim(` Next run: ${nextRun}`));
15460
+ console.log(chalk55.dim(` Next run: ${nextRun}`));
15436
15461
  }
15437
15462
  } else if (deployResult.schedule.atTime) {
15438
15463
  const atTimeFormatted = formatInTimezone(
15439
15464
  deployResult.schedule.atTime,
15440
15465
  deployResult.schedule.timezone
15441
15466
  );
15442
- console.log(chalk54.dim(` At: ${atTimeFormatted}`));
15467
+ console.log(chalk55.dim(` At: ${atTimeFormatted}`));
15443
15468
  }
15444
15469
  }
15445
15470
  async function tryEnableSchedule(scheduleName, composeId, agentName) {
15446
15471
  try {
15447
15472
  await enableSchedule({ name: scheduleName, composeId });
15448
15473
  console.log(
15449
- chalk54.green(`\u2713 Enabled schedule for agent ${chalk54.cyan(agentName)}`)
15474
+ chalk55.green(`\u2713 Enabled schedule for agent ${chalk55.cyan(agentName)}`)
15450
15475
  );
15451
15476
  } catch (error) {
15452
- console.error(chalk54.yellow("\u26A0 Failed to enable schedule"));
15477
+ console.error(chalk55.yellow("\u26A0 Failed to enable schedule"));
15453
15478
  if (error instanceof ApiRequestError) {
15454
15479
  if (error.code === "SCHEDULE_PAST") {
15455
- console.error(chalk54.dim(" Scheduled time has already passed"));
15480
+ console.error(chalk55.dim(" Scheduled time has already passed"));
15456
15481
  } else {
15457
- console.error(chalk54.dim(` ${error.message}`));
15482
+ console.error(chalk55.dim(` ${error.message}`));
15458
15483
  }
15459
15484
  } else if (error instanceof Error) {
15460
- console.error(chalk54.dim(` ${error.message}`));
15485
+ console.error(chalk55.dim(` ${error.message}`));
15461
15486
  }
15462
15487
  console.log(
15463
- ` To enable manually: ${chalk54.cyan(`vm0 schedule enable ${agentName}`)}`
15488
+ ` To enable manually: ${chalk55.cyan(`vm0 schedule enable ${agentName}`)}`
15464
15489
  );
15465
15490
  }
15466
15491
  }
15467
15492
  function showEnableHint(agentName) {
15468
15493
  console.log();
15469
- console.log(` To enable: ${chalk54.cyan(`vm0 schedule enable ${agentName}`)}`);
15494
+ console.log(` To enable: ${chalk55.cyan(`vm0 schedule enable ${agentName}`)}`);
15470
15495
  }
15471
15496
  async function handleScheduleEnabling(params) {
15472
15497
  const { scheduleName, composeId, agentName, enableFlag, shouldPromptEnable } = params;
@@ -15498,7 +15523,7 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15498
15523
  scheduleName
15499
15524
  );
15500
15525
  console.log(
15501
- chalk54.dim(
15526
+ chalk55.dim(
15502
15527
  existingSchedule ? `Editing existing schedule for agent ${agentName}` : `Creating new schedule for agent ${agentName}`
15503
15528
  )
15504
15529
  );
@@ -15508,12 +15533,12 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15508
15533
  defaults.frequency
15509
15534
  );
15510
15535
  if (!frequency) {
15511
- console.log(chalk54.dim("Cancelled"));
15536
+ console.log(chalk55.dim("Cancelled"));
15512
15537
  return;
15513
15538
  }
15514
15539
  const timing = await gatherTiming(frequency, options, defaults);
15515
15540
  if (!timing) {
15516
- console.log(chalk54.dim("Cancelled"));
15541
+ console.log(chalk55.dim("Cancelled"));
15517
15542
  return;
15518
15543
  }
15519
15544
  const { day, time, atTime, intervalSeconds } = timing;
@@ -15522,7 +15547,7 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15522
15547
  existingSchedule?.timezone
15523
15548
  );
15524
15549
  if (!timezone) {
15525
- console.log(chalk54.dim("Cancelled"));
15550
+ console.log(chalk55.dim("Cancelled"));
15526
15551
  return;
15527
15552
  }
15528
15553
  const promptText_ = await gatherPromptText(
@@ -15530,7 +15555,7 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15530
15555
  existingSchedule?.prompt
15531
15556
  );
15532
15557
  if (!promptText_) {
15533
- console.log(chalk54.dim("Cancelled"));
15558
+ console.log(chalk55.dim("Cancelled"));
15534
15559
  return;
15535
15560
  }
15536
15561
  const deployResult = await buildAndDeploy({
@@ -15560,14 +15585,14 @@ var setupCommand = new Command60().name("setup").description("Create or edit a s
15560
15585
 
15561
15586
  // src/commands/schedule/list.ts
15562
15587
  import { Command as Command61 } from "commander";
15563
- import chalk55 from "chalk";
15588
+ import chalk56 from "chalk";
15564
15589
  var listCommand7 = new Command61().name("list").alias("ls").description("List all schedules").action(
15565
15590
  withErrorHandler(async () => {
15566
15591
  const result = await listSchedules();
15567
15592
  if (result.schedules.length === 0) {
15568
- console.log(chalk55.dim("No schedules found"));
15593
+ console.log(chalk56.dim("No schedules found"));
15569
15594
  console.log(
15570
- chalk55.dim(" Create one with: vm0 schedule setup <agent-name>")
15595
+ chalk56.dim(" Create one with: vm0 schedule setup <agent-name>")
15571
15596
  );
15572
15597
  return;
15573
15598
  }
@@ -15592,10 +15617,10 @@ var listCommand7 = new Command61().name("list").alias("ls").description("List al
15592
15617
  "STATUS".padEnd(8),
15593
15618
  "NEXT RUN"
15594
15619
  ].join(" ");
15595
- console.log(chalk55.dim(header));
15620
+ console.log(chalk56.dim(header));
15596
15621
  for (const schedule of result.schedules) {
15597
15622
  const trigger = schedule.cronExpression ? `${schedule.cronExpression} (${schedule.timezone})` : schedule.atTime || "-";
15598
- const status = schedule.enabled ? chalk55.green("enabled") : chalk55.yellow("disabled");
15623
+ const status = schedule.enabled ? chalk56.green("enabled") : chalk56.yellow("disabled");
15599
15624
  const nextRun = schedule.enabled ? formatRelativeTime2(schedule.nextRunAt) : "-";
15600
15625
  const row = [
15601
15626
  schedule.composeName.padEnd(agentWidth),
@@ -15612,47 +15637,47 @@ var listCommand7 = new Command61().name("list").alias("ls").description("List al
15612
15637
 
15613
15638
  // src/commands/schedule/status.ts
15614
15639
  import { Command as Command62 } from "commander";
15615
- import chalk56 from "chalk";
15640
+ import chalk57 from "chalk";
15616
15641
  function formatDateTimeStyled(dateStr) {
15617
- if (!dateStr) return chalk56.dim("-");
15642
+ if (!dateStr) return chalk57.dim("-");
15618
15643
  const formatted = formatDateTime(dateStr);
15619
- return formatted.replace(/\(([^)]+)\)$/, chalk56.dim("($1)"));
15644
+ return formatted.replace(/\(([^)]+)\)$/, chalk57.dim("($1)"));
15620
15645
  }
15621
15646
  function formatTrigger(schedule) {
15622
15647
  if (schedule.triggerType === "loop" && schedule.intervalSeconds !== null) {
15623
- return `interval ${schedule.intervalSeconds}s ${chalk56.dim("(loop)")}`;
15648
+ return `interval ${schedule.intervalSeconds}s ${chalk57.dim("(loop)")}`;
15624
15649
  }
15625
15650
  if (schedule.cronExpression) {
15626
15651
  return schedule.cronExpression;
15627
15652
  }
15628
15653
  if (schedule.atTime) {
15629
- return `${schedule.atTime} ${chalk56.dim("(one-time)")}`;
15654
+ return `${schedule.atTime} ${chalk57.dim("(one-time)")}`;
15630
15655
  }
15631
- return chalk56.dim("-");
15656
+ return chalk57.dim("-");
15632
15657
  }
15633
15658
  function formatRunStatus2(status) {
15634
15659
  switch (status) {
15635
15660
  case "completed":
15636
- return chalk56.green(status);
15661
+ return chalk57.green(status);
15637
15662
  case "failed":
15638
15663
  case "timeout":
15639
- return chalk56.red(status);
15664
+ return chalk57.red(status);
15640
15665
  case "running":
15641
- return chalk56.cyan(status);
15666
+ return chalk57.cyan(status);
15642
15667
  case "pending":
15643
- return chalk56.yellow(status);
15668
+ return chalk57.yellow(status);
15644
15669
  default:
15645
15670
  return status;
15646
15671
  }
15647
15672
  }
15648
15673
  function printRunConfiguration(schedule) {
15649
- const statusText = schedule.enabled ? chalk56.green("enabled") : chalk56.yellow("disabled");
15674
+ const statusText = schedule.enabled ? chalk57.green("enabled") : chalk57.yellow("disabled");
15650
15675
  console.log(`${"Status:".padEnd(16)}${statusText}`);
15651
15676
  console.log(
15652
- `${"Agent:".padEnd(16)}${schedule.composeName} ${chalk56.dim(`(${schedule.orgSlug})`)}`
15677
+ `${"Agent:".padEnd(16)}${schedule.composeName} ${chalk57.dim(`(${schedule.orgSlug})`)}`
15653
15678
  );
15654
15679
  const promptPreview = schedule.prompt.length > 60 ? schedule.prompt.slice(0, 57) + "..." : schedule.prompt;
15655
- console.log(`${"Prompt:".padEnd(16)}${chalk56.dim(promptPreview)}`);
15680
+ console.log(`${"Prompt:".padEnd(16)}${chalk57.dim(promptPreview)}`);
15656
15681
  if (schedule.vars && Object.keys(schedule.vars).length > 0) {
15657
15682
  console.log(
15658
15683
  `${"Variables:".padEnd(16)}${Object.keys(schedule.vars).join(", ")}`
@@ -15681,7 +15706,7 @@ function printTimeSchedule(schedule) {
15681
15706
  );
15682
15707
  }
15683
15708
  if (schedule.triggerType === "loop") {
15684
- const failureText = schedule.consecutiveFailures > 0 ? chalk56.yellow(`${schedule.consecutiveFailures}/3`) : chalk56.dim("0/3");
15709
+ const failureText = schedule.consecutiveFailures > 0 ? chalk57.yellow(`${schedule.consecutiveFailures}/3`) : chalk57.dim("0/3");
15685
15710
  console.log(`${"Failures:".padEnd(16)}${failureText}`);
15686
15711
  }
15687
15712
  }
@@ -15697,7 +15722,7 @@ async function printRecentRuns(name, composeId, limit) {
15697
15722
  console.log();
15698
15723
  console.log("Recent Runs:");
15699
15724
  console.log(
15700
- chalk56.dim("RUN ID STATUS CREATED")
15725
+ chalk57.dim("RUN ID STATUS CREATED")
15701
15726
  );
15702
15727
  for (const run of runs) {
15703
15728
  const id = run.id;
@@ -15708,7 +15733,7 @@ async function printRecentRuns(name, composeId, limit) {
15708
15733
  }
15709
15734
  } catch {
15710
15735
  console.log();
15711
- console.log(chalk56.dim("Recent Runs: (unable to fetch)"));
15736
+ console.log(chalk57.dim("Recent Runs: (unable to fetch)"));
15712
15737
  }
15713
15738
  }
15714
15739
  var statusCommand7 = new Command62().name("status").description("Show detailed status of a schedule").argument("<agent-name>", "Agent name").option(
@@ -15725,8 +15750,8 @@ var statusCommand7 = new Command62().name("status").description("Show detailed s
15725
15750
  const { name, composeId } = resolved;
15726
15751
  const schedule = await getScheduleByName({ name, composeId });
15727
15752
  console.log();
15728
- console.log(`Schedule for agent: ${chalk56.cyan(agentName)}`);
15729
- console.log(chalk56.dim("\u2501".repeat(50)));
15753
+ console.log(`Schedule for agent: ${chalk57.cyan(agentName)}`);
15754
+ console.log(chalk57.dim("\u2501".repeat(50)));
15730
15755
  printRunConfiguration(schedule);
15731
15756
  printTimeSchedule(schedule);
15732
15757
  const parsed = parseInt(options.limit, 10);
@@ -15742,7 +15767,7 @@ var statusCommand7 = new Command62().name("status").description("Show detailed s
15742
15767
 
15743
15768
  // src/commands/schedule/delete.ts
15744
15769
  import { Command as Command63 } from "commander";
15745
- import chalk57 from "chalk";
15770
+ import chalk58 from "chalk";
15746
15771
  var deleteCommand2 = new Command63().name("delete").alias("rm").description("Delete a schedule").argument("<agent-name>", "Agent name").option(
15747
15772
  "-n, --name <schedule-name>",
15748
15773
  "Schedule name (required when agent has multiple schedules)"
@@ -15755,11 +15780,11 @@ var deleteCommand2 = new Command63().name("delete").alias("rm").description("Del
15755
15780
  throw new Error("--yes flag is required in non-interactive mode");
15756
15781
  }
15757
15782
  const confirmed = await promptConfirm(
15758
- `Delete schedule for agent ${chalk57.cyan(agentName)}?`,
15783
+ `Delete schedule for agent ${chalk58.cyan(agentName)}?`,
15759
15784
  false
15760
15785
  );
15761
15786
  if (!confirmed) {
15762
- console.log(chalk57.dim("Cancelled"));
15787
+ console.log(chalk58.dim("Cancelled"));
15763
15788
  return;
15764
15789
  }
15765
15790
  }
@@ -15768,7 +15793,7 @@ var deleteCommand2 = new Command63().name("delete").alias("rm").description("Del
15768
15793
  composeId: resolved.composeId
15769
15794
  });
15770
15795
  console.log(
15771
- chalk57.green(`\u2713 Deleted schedule for agent ${chalk57.cyan(agentName)}`)
15796
+ chalk58.green(`\u2713 Deleted schedule for agent ${chalk58.cyan(agentName)}`)
15772
15797
  );
15773
15798
  }
15774
15799
  )
@@ -15776,7 +15801,7 @@ var deleteCommand2 = new Command63().name("delete").alias("rm").description("Del
15776
15801
 
15777
15802
  // src/commands/schedule/enable.ts
15778
15803
  import { Command as Command64 } from "commander";
15779
- import chalk58 from "chalk";
15804
+ import chalk59 from "chalk";
15780
15805
  var enableCommand = new Command64().name("enable").description("Enable a schedule").argument("<agent-name>", "Agent name").option(
15781
15806
  "-n, --name <schedule-name>",
15782
15807
  "Schedule name (required when agent has multiple schedules)"
@@ -15788,14 +15813,14 @@ var enableCommand = new Command64().name("enable").description("Enable a schedul
15788
15813
  composeId: resolved.composeId
15789
15814
  });
15790
15815
  console.log(
15791
- chalk58.green(`\u2713 Enabled schedule for agent ${chalk58.cyan(agentName)}`)
15816
+ chalk59.green(`\u2713 Enabled schedule for agent ${chalk59.cyan(agentName)}`)
15792
15817
  );
15793
15818
  })
15794
15819
  );
15795
15820
 
15796
15821
  // src/commands/schedule/disable.ts
15797
15822
  import { Command as Command65 } from "commander";
15798
- import chalk59 from "chalk";
15823
+ import chalk60 from "chalk";
15799
15824
  var disableCommand = new Command65().name("disable").description("Disable a schedule").argument("<agent-name>", "Agent name").option(
15800
15825
  "-n, --name <schedule-name>",
15801
15826
  "Schedule name (required when agent has multiple schedules)"
@@ -15807,7 +15832,7 @@ var disableCommand = new Command65().name("disable").description("Disable a sche
15807
15832
  composeId: resolved.composeId
15808
15833
  });
15809
15834
  console.log(
15810
- chalk59.green(`\u2713 Disabled schedule for agent ${chalk59.cyan(agentName)}`)
15835
+ chalk60.green(`\u2713 Disabled schedule for agent ${chalk60.cyan(agentName)}`)
15811
15836
  );
15812
15837
  })
15813
15838
  );
@@ -15817,7 +15842,7 @@ var scheduleCommand = new Command66().name("schedule").description("Manage agent
15817
15842
 
15818
15843
  // src/commands/usage/index.ts
15819
15844
  import { Command as Command67 } from "commander";
15820
- import chalk60 from "chalk";
15845
+ import chalk61 from "chalk";
15821
15846
 
15822
15847
  // src/lib/utils/duration-formatter.ts
15823
15848
  function formatDuration(ms) {
@@ -15942,19 +15967,19 @@ var usageCommand = new Command67().name("usage").description("View usage statist
15942
15967
  );
15943
15968
  console.log();
15944
15969
  console.log(
15945
- chalk60.bold(
15970
+ chalk61.bold(
15946
15971
  `Usage Summary (${formatDateRange(usage.period.start, usage.period.end)})`
15947
15972
  )
15948
15973
  );
15949
15974
  console.log();
15950
- console.log(chalk60.dim("DATE RUNS RUN TIME"));
15975
+ console.log(chalk61.dim("DATE RUNS RUN TIME"));
15951
15976
  for (const day of filledDaily) {
15952
15977
  const dateDisplay = formatDateDisplay(day.date).padEnd(10);
15953
15978
  const runsDisplay = String(day.run_count).padStart(6);
15954
15979
  const timeDisplay = formatDuration(day.run_time_ms);
15955
15980
  console.log(`${dateDisplay}${runsDisplay} ${timeDisplay}`);
15956
15981
  }
15957
- console.log(chalk60.dim("\u2500".repeat(29)));
15982
+ console.log(chalk61.dim("\u2500".repeat(29)));
15958
15983
  const totalRunsDisplay = String(usage.summary.total_runs).padStart(6);
15959
15984
  const totalTimeDisplay = formatDuration(usage.summary.total_run_time_ms);
15960
15985
  console.log(
@@ -15969,62 +15994,62 @@ import { Command as Command71 } from "commander";
15969
15994
 
15970
15995
  // src/commands/secret/list.ts
15971
15996
  import { Command as Command68 } from "commander";
15972
- import chalk61 from "chalk";
15997
+ import chalk62 from "chalk";
15973
15998
  var listCommand8 = new Command68().name("list").alias("ls").description("List all secrets").action(
15974
15999
  withErrorHandler(async () => {
15975
16000
  const result = await listSecrets();
15976
16001
  if (result.secrets.length === 0) {
15977
- console.log(chalk61.dim("No secrets found"));
16002
+ console.log(chalk62.dim("No secrets found"));
15978
16003
  console.log();
15979
16004
  console.log("To add a secret:");
15980
- console.log(chalk61.cyan(" vm0 secret set MY_API_KEY --body <value>"));
16005
+ console.log(chalk62.cyan(" vm0 secret set MY_API_KEY --body <value>"));
15981
16006
  return;
15982
16007
  }
15983
- console.log(chalk61.bold("Secrets:"));
16008
+ console.log(chalk62.bold("Secrets:"));
15984
16009
  console.log();
15985
16010
  for (const secret of result.secrets) {
15986
16011
  let typeIndicator = "";
15987
16012
  let derivedLine = null;
15988
16013
  if (secret.type === "model-provider") {
15989
- typeIndicator = chalk61.dim(" [model-provider]");
16014
+ typeIndicator = chalk62.dim(" [model-provider]");
15990
16015
  } else if (secret.type === "connector") {
15991
16016
  const derived = getConnectorDerivedNames(secret.name);
15992
16017
  if (derived) {
15993
- typeIndicator = chalk61.dim(` [${derived.connectorLabel} connector]`);
15994
- derivedLine = chalk61.dim(
16018
+ typeIndicator = chalk62.dim(` [${derived.connectorLabel} connector]`);
16019
+ derivedLine = chalk62.dim(
15995
16020
  `Available as: ${derived.envVarNames.join(", ")}`
15996
16021
  );
15997
16022
  } else {
15998
- typeIndicator = chalk61.dim(" [connector]");
16023
+ typeIndicator = chalk62.dim(" [connector]");
15999
16024
  }
16000
16025
  } else if (secret.type === "user") {
16001
16026
  const derived = getConnectorDerivedNames(secret.name);
16002
16027
  if (derived) {
16003
- typeIndicator = chalk61.dim(` [${derived.connectorLabel} connector]`);
16004
- derivedLine = chalk61.dim(
16028
+ typeIndicator = chalk62.dim(` [${derived.connectorLabel} connector]`);
16029
+ derivedLine = chalk62.dim(
16005
16030
  `Available as: ${derived.envVarNames.join(", ")}`
16006
16031
  );
16007
16032
  }
16008
16033
  }
16009
- console.log(` ${chalk61.cyan(secret.name)}${typeIndicator}`);
16034
+ console.log(` ${chalk62.cyan(secret.name)}${typeIndicator}`);
16010
16035
  if (derivedLine) {
16011
16036
  console.log(` ${derivedLine}`);
16012
16037
  }
16013
16038
  if (secret.description) {
16014
- console.log(` ${chalk61.dim(secret.description)}`);
16039
+ console.log(` ${chalk62.dim(secret.description)}`);
16015
16040
  }
16016
16041
  console.log(
16017
- ` ${chalk61.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
16042
+ ` ${chalk62.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
16018
16043
  );
16019
16044
  console.log();
16020
16045
  }
16021
- console.log(chalk61.dim(`Total: ${result.secrets.length} secret(s)`));
16046
+ console.log(chalk62.dim(`Total: ${result.secrets.length} secret(s)`));
16022
16047
  })
16023
16048
  );
16024
16049
 
16025
16050
  // src/commands/secret/set.ts
16026
16051
  import { Command as Command69 } from "commander";
16027
- import chalk62 from "chalk";
16052
+ import chalk63 from "chalk";
16028
16053
  var setCommand2 = new Command69().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
16029
16054
  "-b, --body <value>",
16030
16055
  "Secret value (required in non-interactive mode)"
@@ -16064,18 +16089,18 @@ var setCommand2 = new Command69().name("set").description("Create or update a se
16064
16089
  }
16065
16090
  throw error;
16066
16091
  }
16067
- console.log(chalk62.green(`\u2713 Secret "${secret.name}" saved`));
16092
+ console.log(chalk63.green(`\u2713 Secret "${secret.name}" saved`));
16068
16093
  console.log();
16069
16094
  console.log("Use in vm0.yaml:");
16070
- console.log(chalk62.cyan(` environment:`));
16071
- console.log(chalk62.cyan(` ${name}: \${{ secrets.${name} }}`));
16095
+ console.log(chalk63.cyan(` environment:`));
16096
+ console.log(chalk63.cyan(` ${name}: \${{ secrets.${name} }}`));
16072
16097
  }
16073
16098
  )
16074
16099
  );
16075
16100
 
16076
16101
  // src/commands/secret/delete.ts
16077
16102
  import { Command as Command70 } from "commander";
16078
- import chalk63 from "chalk";
16103
+ import chalk64 from "chalk";
16079
16104
  var deleteCommand3 = new Command70().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
16080
16105
  withErrorHandler(async (name, options) => {
16081
16106
  try {
@@ -16095,12 +16120,12 @@ var deleteCommand3 = new Command70().name("delete").description("Delete a secret
16095
16120
  false
16096
16121
  );
16097
16122
  if (!confirmed) {
16098
- console.log(chalk63.dim("Cancelled"));
16123
+ console.log(chalk64.dim("Cancelled"));
16099
16124
  return;
16100
16125
  }
16101
16126
  }
16102
16127
  await deleteSecret(name);
16103
- console.log(chalk63.green(`\u2713 Secret "${name}" deleted`));
16128
+ console.log(chalk64.green(`\u2713 Secret "${name}" deleted`));
16104
16129
  })
16105
16130
  );
16106
16131
 
@@ -16112,7 +16137,7 @@ import { Command as Command75 } from "commander";
16112
16137
 
16113
16138
  // src/commands/variable/list.ts
16114
16139
  import { Command as Command72 } from "commander";
16115
- import chalk64 from "chalk";
16140
+ import chalk65 from "chalk";
16116
16141
  function truncateValue(value, maxLength = 60) {
16117
16142
  if (value.length <= maxLength) {
16118
16143
  return value;
@@ -16123,32 +16148,32 @@ var listCommand9 = new Command72().name("list").alias("ls").description("List al
16123
16148
  withErrorHandler(async () => {
16124
16149
  const result = await listVariables();
16125
16150
  if (result.variables.length === 0) {
16126
- console.log(chalk64.dim("No variables found"));
16151
+ console.log(chalk65.dim("No variables found"));
16127
16152
  console.log();
16128
16153
  console.log("To add a variable:");
16129
- console.log(chalk64.cyan(" vm0 variable set MY_VAR <value>"));
16154
+ console.log(chalk65.cyan(" vm0 variable set MY_VAR <value>"));
16130
16155
  return;
16131
16156
  }
16132
- console.log(chalk64.bold("Variables:"));
16157
+ console.log(chalk65.bold("Variables:"));
16133
16158
  console.log();
16134
16159
  for (const variable of result.variables) {
16135
16160
  const displayValue = truncateValue(variable.value);
16136
- console.log(` ${chalk64.cyan(variable.name)} = ${displayValue}`);
16161
+ console.log(` ${chalk65.cyan(variable.name)} = ${displayValue}`);
16137
16162
  if (variable.description) {
16138
- console.log(` ${chalk64.dim(variable.description)}`);
16163
+ console.log(` ${chalk65.dim(variable.description)}`);
16139
16164
  }
16140
16165
  console.log(
16141
- ` ${chalk64.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
16166
+ ` ${chalk65.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
16142
16167
  );
16143
16168
  console.log();
16144
16169
  }
16145
- console.log(chalk64.dim(`Total: ${result.variables.length} variable(s)`));
16170
+ console.log(chalk65.dim(`Total: ${result.variables.length} variable(s)`));
16146
16171
  })
16147
16172
  );
16148
16173
 
16149
16174
  // src/commands/variable/set.ts
16150
16175
  import { Command as Command73 } from "commander";
16151
- import chalk65 from "chalk";
16176
+ import chalk66 from "chalk";
16152
16177
  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(
16153
16178
  withErrorHandler(
16154
16179
  async (name, value, options) => {
@@ -16169,18 +16194,18 @@ var setCommand3 = new Command73().name("set").description("Create or update a va
16169
16194
  }
16170
16195
  throw error;
16171
16196
  }
16172
- console.log(chalk65.green(`\u2713 Variable "${variable.name}" saved`));
16197
+ console.log(chalk66.green(`\u2713 Variable "${variable.name}" saved`));
16173
16198
  console.log();
16174
16199
  console.log("Use in vm0.yaml:");
16175
- console.log(chalk65.cyan(` environment:`));
16176
- console.log(chalk65.cyan(` ${name}: \${{ vars.${name} }}`));
16200
+ console.log(chalk66.cyan(` environment:`));
16201
+ console.log(chalk66.cyan(` ${name}: \${{ vars.${name} }}`));
16177
16202
  }
16178
16203
  )
16179
16204
  );
16180
16205
 
16181
16206
  // src/commands/variable/delete.ts
16182
16207
  import { Command as Command74 } from "commander";
16183
- import chalk66 from "chalk";
16208
+ import chalk67 from "chalk";
16184
16209
  var deleteCommand4 = new Command74().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
16185
16210
  withErrorHandler(async (name, options) => {
16186
16211
  try {
@@ -16200,12 +16225,12 @@ var deleteCommand4 = new Command74().name("delete").description("Delete a variab
16200
16225
  false
16201
16226
  );
16202
16227
  if (!confirmed) {
16203
- console.log(chalk66.dim("Cancelled"));
16228
+ console.log(chalk67.dim("Cancelled"));
16204
16229
  return;
16205
16230
  }
16206
16231
  }
16207
16232
  await deleteVariable(name);
16208
- console.log(chalk66.green(`\u2713 Variable "${name}" deleted`));
16233
+ console.log(chalk67.green(`\u2713 Variable "${name}" deleted`));
16209
16234
  })
16210
16235
  );
16211
16236
 
@@ -16217,15 +16242,15 @@ import { Command as Command80 } from "commander";
16217
16242
 
16218
16243
  // src/commands/model-provider/list.ts
16219
16244
  import { Command as Command76 } from "commander";
16220
- import chalk67 from "chalk";
16245
+ import chalk68 from "chalk";
16221
16246
  var listCommand10 = new Command76().name("list").alias("ls").description("List all model providers").action(
16222
16247
  withErrorHandler(async () => {
16223
16248
  const result = await listModelProviders();
16224
16249
  if (result.modelProviders.length === 0) {
16225
- console.log(chalk67.dim("No model providers configured"));
16250
+ console.log(chalk68.dim("No model providers configured"));
16226
16251
  console.log();
16227
16252
  console.log("To add a model provider:");
16228
- console.log(chalk67.cyan(" vm0 model-provider setup"));
16253
+ console.log(chalk68.cyan(" vm0 model-provider setup"));
16229
16254
  return;
16230
16255
  }
16231
16256
  const byFramework = result.modelProviders.reduce(
@@ -16239,16 +16264,16 @@ var listCommand10 = new Command76().name("list").alias("ls").description("List a
16239
16264
  },
16240
16265
  {}
16241
16266
  );
16242
- console.log(chalk67.bold("Model Providers:"));
16267
+ console.log(chalk68.bold("Model Providers:"));
16243
16268
  console.log();
16244
16269
  for (const [framework, providers] of Object.entries(byFramework)) {
16245
- console.log(` ${chalk67.cyan(framework)}:`);
16270
+ console.log(` ${chalk68.cyan(framework)}:`);
16246
16271
  for (const provider of providers) {
16247
- const defaultTag = provider.isDefault ? chalk67.green(" (default)") : "";
16248
- const modelTag = provider.selectedModel ? chalk67.dim(` [${provider.selectedModel}]`) : "";
16272
+ const defaultTag = provider.isDefault ? chalk68.green(" (default)") : "";
16273
+ const modelTag = provider.selectedModel ? chalk68.dim(` [${provider.selectedModel}]`) : "";
16249
16274
  console.log(` ${provider.type}${defaultTag}${modelTag}`);
16250
16275
  console.log(
16251
- chalk67.dim(
16276
+ chalk68.dim(
16252
16277
  ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`
16253
16278
  )
16254
16279
  );
@@ -16256,14 +16281,14 @@ var listCommand10 = new Command76().name("list").alias("ls").description("List a
16256
16281
  console.log();
16257
16282
  }
16258
16283
  console.log(
16259
- chalk67.dim(`Total: ${result.modelProviders.length} provider(s)`)
16284
+ chalk68.dim(`Total: ${result.modelProviders.length} provider(s)`)
16260
16285
  );
16261
16286
  })
16262
16287
  );
16263
16288
 
16264
16289
  // src/commands/model-provider/setup.ts
16265
16290
  import { Command as Command77 } from "commander";
16266
- import chalk68 from "chalk";
16291
+ import chalk69 from "chalk";
16267
16292
  import prompts2 from "prompts";
16268
16293
  function validateProviderType(typeStr) {
16269
16294
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {
@@ -16447,7 +16472,7 @@ async function promptForModelSelection(type2) {
16447
16472
  if (selected === "__custom__") {
16448
16473
  const placeholder = getCustomModelPlaceholder(type2);
16449
16474
  if (placeholder) {
16450
- console.log(chalk68.dim(`Example: ${placeholder}`));
16475
+ console.log(chalk69.dim(`Example: ${placeholder}`));
16451
16476
  }
16452
16477
  const customResponse = await prompts2(
16453
16478
  {
@@ -16497,7 +16522,7 @@ async function promptForSecrets(type2, authMethod) {
16497
16522
  const secrets = {};
16498
16523
  for (const [name, fieldConfig] of Object.entries(secretsConfig)) {
16499
16524
  if (fieldConfig.helpText) {
16500
- console.log(chalk68.dim(fieldConfig.helpText));
16525
+ console.log(chalk69.dim(fieldConfig.helpText));
16501
16526
  }
16502
16527
  const isSensitive = isSensitiveSecret(name);
16503
16528
  const placeholder = "placeholder" in fieldConfig ? fieldConfig.placeholder : "";
@@ -16549,7 +16574,7 @@ async function handleInteractiveMode() {
16549
16574
  title = `${title} \u2713`;
16550
16575
  }
16551
16576
  if (isExperimental) {
16552
- title = `${title} ${chalk68.dim("(experimental)")}`;
16577
+ title = `${title} ${chalk69.dim("(experimental)")}`;
16553
16578
  }
16554
16579
  return {
16555
16580
  title,
@@ -16596,7 +16621,7 @@ async function handleInteractiveMode() {
16596
16621
  }
16597
16622
  const config = MODEL_PROVIDER_TYPES[type2];
16598
16623
  console.log();
16599
- console.log(chalk68.dim(config.helpText));
16624
+ console.log(chalk69.dim(config.helpText));
16600
16625
  console.log();
16601
16626
  if (hasAuthMethods(type2)) {
16602
16627
  const authMethod = await promptForAuthMethod(type2);
@@ -16637,7 +16662,7 @@ async function promptSetAsDefault(type2, framework, isDefault) {
16637
16662
  );
16638
16663
  if (response.setDefault) {
16639
16664
  await setModelProviderDefault(type2);
16640
- console.log(chalk68.green(`\u2713 Default for ${framework} set to "${type2}"`));
16665
+ console.log(chalk69.green(`\u2713 Default for ${framework} set to "${type2}"`));
16641
16666
  }
16642
16667
  }
16643
16668
  function collectSecrets(value, previous) {
@@ -16681,11 +16706,11 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16681
16706
  const modelNote2 = provider2.selectedModel ? ` with model: ${provider2.selectedModel}` : "";
16682
16707
  if (!hasModelSelection(input.type)) {
16683
16708
  console.log(
16684
- chalk68.green(`\u2713 Model provider "${input.type}" unchanged`)
16709
+ chalk69.green(`\u2713 Model provider "${input.type}" unchanged`)
16685
16710
  );
16686
16711
  } else {
16687
16712
  console.log(
16688
- chalk68.green(
16713
+ chalk69.green(
16689
16714
  `\u2713 Model provider "${input.type}" updated${defaultNote2}${modelNote2}`
16690
16715
  )
16691
16716
  );
@@ -16710,7 +16735,7 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16710
16735
  const defaultNote = provider.isDefault ? ` (default for ${provider.framework})` : "";
16711
16736
  const modelNote = provider.selectedModel ? ` with model: ${provider.selectedModel}` : "";
16712
16737
  console.log(
16713
- chalk68.green(
16738
+ chalk69.green(
16714
16739
  `\u2713 Model provider "${input.type}" ${action}${defaultNote}${modelNote}`
16715
16740
  )
16716
16741
  );
@@ -16727,7 +16752,7 @@ var setupCommand2 = new Command77().name("setup").description("Configure a model
16727
16752
 
16728
16753
  // src/commands/model-provider/delete.ts
16729
16754
  import { Command as Command78 } from "commander";
16730
- import chalk69 from "chalk";
16755
+ import chalk70 from "chalk";
16731
16756
  var deleteCommand5 = new Command78().name("delete").description("Delete a model provider").argument("<type>", "Model provider type to delete").action(
16732
16757
  withErrorHandler(async (type2) => {
16733
16758
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type2)) {
@@ -16737,13 +16762,13 @@ var deleteCommand5 = new Command78().name("delete").description("Delete a model
16737
16762
  });
16738
16763
  }
16739
16764
  await deleteModelProvider(type2);
16740
- console.log(chalk69.green(`\u2713 Model provider "${type2}" deleted`));
16765
+ console.log(chalk70.green(`\u2713 Model provider "${type2}" deleted`));
16741
16766
  })
16742
16767
  );
16743
16768
 
16744
16769
  // src/commands/model-provider/set-default.ts
16745
16770
  import { Command as Command79 } from "commander";
16746
- import chalk70 from "chalk";
16771
+ import chalk71 from "chalk";
16747
16772
  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(
16748
16773
  withErrorHandler(async (type2) => {
16749
16774
  if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type2)) {
@@ -16754,7 +16779,7 @@ var setDefaultCommand = new Command79().name("set-default").description("Set a m
16754
16779
  }
16755
16780
  const provider = await setModelProviderDefault(type2);
16756
16781
  console.log(
16757
- chalk70.green(
16782
+ chalk71.green(
16758
16783
  `\u2713 Default for ${provider.framework} set to "${provider.type}"`
16759
16784
  )
16760
16785
  );
@@ -16769,7 +16794,7 @@ import { Command as Command85 } from "commander";
16769
16794
 
16770
16795
  // src/commands/connector/connect.ts
16771
16796
  import { Command as Command81 } from "commander";
16772
- import chalk72 from "chalk";
16797
+ import chalk73 from "chalk";
16773
16798
  import { initClient as initClient13 } from "@ts-rest/core";
16774
16799
 
16775
16800
  // src/commands/connector/lib/computer/start-services.ts
@@ -16778,7 +16803,7 @@ import { access as access2, constants } from "fs/promises";
16778
16803
  import { createServer } from "net";
16779
16804
  import { homedir as homedir4 } from "os";
16780
16805
  import { join as join12 } from "path";
16781
- import chalk71 from "chalk";
16806
+ import chalk72 from "chalk";
16782
16807
 
16783
16808
  // src/commands/connector/lib/computer/ngrok.ts
16784
16809
  import ngrok from "@ngrok/ngrok";
@@ -16852,7 +16877,7 @@ async function checkComputerDependencies() {
16852
16877
  }
16853
16878
  }
16854
16879
  async function startComputerServices(credentials) {
16855
- console.log(chalk71.cyan("Starting computer connector services..."));
16880
+ console.log(chalk72.cyan("Starting computer connector services..."));
16856
16881
  const wsgidavBinary = await findBinary("wsgidav");
16857
16882
  if (!wsgidavBinary) {
16858
16883
  throw new Error(
@@ -16879,7 +16904,7 @@ async function startComputerServices(credentials) {
16879
16904
  );
16880
16905
  wsgidav.stdout?.on("data", (data) => process.stdout.write(data));
16881
16906
  wsgidav.stderr?.on("data", (data) => process.stderr.write(data));
16882
- console.log(chalk71.green("\u2713 WebDAV server started"));
16907
+ console.log(chalk72.green("\u2713 WebDAV server started"));
16883
16908
  const chrome = spawn2(
16884
16909
  chromeBinary,
16885
16910
  [
@@ -16893,7 +16918,7 @@ async function startComputerServices(credentials) {
16893
16918
  );
16894
16919
  chrome.stdout?.on("data", (data) => process.stdout.write(data));
16895
16920
  chrome.stderr?.on("data", (data) => process.stderr.write(data));
16896
- console.log(chalk71.green("\u2713 Chrome started"));
16921
+ console.log(chalk72.green("\u2713 Chrome started"));
16897
16922
  try {
16898
16923
  await startNgrokTunnels(
16899
16924
  credentials.ngrokToken,
@@ -16902,18 +16927,18 @@ async function startComputerServices(credentials) {
16902
16927
  cdpPort
16903
16928
  );
16904
16929
  console.log(
16905
- chalk71.green(
16930
+ chalk72.green(
16906
16931
  `\u2713 ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`
16907
16932
  )
16908
16933
  );
16909
16934
  console.log();
16910
- console.log(chalk71.green("\u2713 Computer connector active"));
16935
+ console.log(chalk72.green("\u2713 Computer connector active"));
16911
16936
  console.log(` WebDAV: ~/Downloads \u2192 webdav.${credentials.domain}`);
16912
16937
  console.log(
16913
16938
  ` Chrome CDP: port ${cdpPort} \u2192 chrome.${credentials.domain}`
16914
16939
  );
16915
16940
  console.log();
16916
- console.log(chalk71.dim("Press ^C twice to disconnect"));
16941
+ console.log(chalk72.dim("Press ^C twice to disconnect"));
16917
16942
  console.log();
16918
16943
  let sigintCount = 0;
16919
16944
  await new Promise((resolve2) => {
@@ -16927,7 +16952,7 @@ async function startComputerServices(credentials) {
16927
16952
  const onSigint = () => {
16928
16953
  sigintCount++;
16929
16954
  if (sigintCount === 1) {
16930
- console.log(chalk71.dim("\nPress ^C again to disconnect and exit..."));
16955
+ console.log(chalk72.dim("\nPress ^C again to disconnect and exit..."));
16931
16956
  } else {
16932
16957
  done();
16933
16958
  }
@@ -16937,11 +16962,11 @@ async function startComputerServices(credentials) {
16937
16962
  });
16938
16963
  } finally {
16939
16964
  console.log();
16940
- console.log(chalk71.cyan("Stopping services..."));
16965
+ console.log(chalk72.cyan("Stopping services..."));
16941
16966
  wsgidav.kill("SIGTERM");
16942
16967
  chrome.kill("SIGTERM");
16943
16968
  await stopNgrokTunnels();
16944
- console.log(chalk71.green("\u2713 Services stopped"));
16969
+ console.log(chalk72.green("\u2713 Services stopped"));
16945
16970
  }
16946
16971
  }
16947
16972
 
@@ -16966,10 +16991,10 @@ async function getHeaders2() {
16966
16991
  function renderHelpText(text) {
16967
16992
  return text.replace(
16968
16993
  /\[([^\]]+)\]\(([^)]+)\)/g,
16969
- (_m, label, url) => `${label} (${chalk72.cyan(url)})`
16970
- ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk72.bold(content)).replace(
16994
+ (_m, label, url) => `${label} (${chalk73.cyan(url)})`
16995
+ ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk73.bold(content)).replace(
16971
16996
  /^> (.+)$/gm,
16972
- (_m, content) => chalk72.yellow(` ${content}`)
16997
+ (_m, content) => chalk73.yellow(` ${content}`)
16973
16998
  );
16974
16999
  }
16975
17000
  async function connectViaApiToken(connectorType, tokenValue) {
@@ -16994,7 +17019,7 @@ async function connectViaApiToken(connectorType, tokenValue) {
16994
17019
  for (const [secretName, secretConfig] of secretEntries) {
16995
17020
  if (!secretConfig.required) continue;
16996
17021
  const value = await promptPassword(
16997
- `${secretConfig.label}${secretConfig.placeholder ? chalk72.dim(` (${secretConfig.placeholder})`) : ""}:`
17022
+ `${secretConfig.label}${secretConfig.placeholder ? chalk73.dim(` (${secretConfig.placeholder})`) : ""}:`
16998
17023
  );
16999
17024
  if (!value) {
17000
17025
  throw new Error("Cancelled");
@@ -17010,13 +17035,13 @@ async function connectViaApiToken(connectorType, tokenValue) {
17010
17035
  });
17011
17036
  }
17012
17037
  console.log(
17013
- chalk72.green(`
17038
+ chalk73.green(`
17014
17039
  \u2713 ${config.label} connected successfully via API token!`)
17015
17040
  );
17016
17041
  }
17017
17042
  async function connectComputer(apiUrl, headers) {
17018
17043
  await checkComputerDependencies();
17019
- console.log(chalk72.cyan("Setting up computer connector..."));
17044
+ console.log(chalk73.cyan("Setting up computer connector..."));
17020
17045
  const computerClient = initClient13(computerConnectorContract, {
17021
17046
  baseUrl: apiUrl,
17022
17047
  baseHeaders: headers,
@@ -17031,9 +17056,9 @@ async function connectComputer(apiUrl, headers) {
17031
17056
  }
17032
17057
  const credentials = createResult.body;
17033
17058
  await startComputerServices(credentials);
17034
- console.log(chalk72.cyan("Disconnecting computer connector..."));
17059
+ console.log(chalk73.cyan("Disconnecting computer connector..."));
17035
17060
  await deleteConnector("computer");
17036
- console.log(chalk72.green("\u2713 Disconnected computer"));
17061
+ console.log(chalk73.green("\u2713 Disconnected computer"));
17037
17062
  process.exit(0);
17038
17063
  }
17039
17064
  async function resolveAuthMethod(connectorType, tokenFlag) {
@@ -17072,7 +17097,7 @@ async function resolveAuthMethod(connectorType, tokenFlag) {
17072
17097
  );
17073
17098
  }
17074
17099
  async function connectViaOAuth(connectorType, apiUrl, headers) {
17075
- console.log(`Connecting ${chalk72.cyan(connectorType)}...`);
17100
+ console.log(`Connecting ${chalk73.cyan(connectorType)}...`);
17076
17101
  const sessionsClient = initClient13(connectorSessionsContract, {
17077
17102
  baseUrl: apiUrl,
17078
17103
  baseHeaders: headers,
@@ -17088,8 +17113,8 @@ async function connectViaOAuth(connectorType, apiUrl, headers) {
17088
17113
  }
17089
17114
  const session = createResult.body;
17090
17115
  const verificationUrl = `${apiUrl}${session.verificationUrl}`;
17091
- console.log(chalk72.green("\nSession created"));
17092
- console.log(chalk72.cyan(`
17116
+ console.log(chalk73.green("\nSession created"));
17117
+ console.log(chalk73.cyan(`
17093
17118
  To connect, visit: ${verificationUrl}`));
17094
17119
  console.log(
17095
17120
  `
@@ -17121,7 +17146,7 @@ The session expires in ${Math.floor(session.expiresIn / 60)} minutes.`
17121
17146
  switch (status.status) {
17122
17147
  case "complete":
17123
17148
  console.log(
17124
- chalk72.green(`
17149
+ chalk73.green(`
17125
17150
 
17126
17151
  ${connectorType} connected successfully!`)
17127
17152
  );
@@ -17133,7 +17158,7 @@ ${connectorType} connected successfully!`)
17133
17158
  `Connection failed: ${status.errorMessage || "Unknown error"}`
17134
17159
  );
17135
17160
  case "pending":
17136
- process.stdout.write(chalk72.dim("."));
17161
+ process.stdout.write(chalk73.dim("."));
17137
17162
  break;
17138
17163
  }
17139
17164
  }
@@ -17165,11 +17190,11 @@ var connectCommand = new Command81().name("connect").description("Connect a thir
17165
17190
 
17166
17191
  // src/commands/connector/list.ts
17167
17192
  import { Command as Command82 } from "commander";
17168
- import chalk73 from "chalk";
17193
+ import chalk74 from "chalk";
17169
17194
  var listCommand11 = new Command82().name("list").alias("ls").description("List all connectors and their status").action(
17170
17195
  withErrorHandler(async () => {
17171
17196
  const result = await listConnectors();
17172
- const connectedMap = new Map(result.connectors.map((c23) => [c23.type, c23]));
17197
+ const connectedMap = new Map(result.connectors.map((c24) => [c24.type, c24]));
17173
17198
  const allTypesRaw = Object.keys(CONNECTOR_TYPES);
17174
17199
  const allTypes = [];
17175
17200
  for (const type2 of allTypesRaw) {
@@ -17188,23 +17213,23 @@ var listCommand11 = new Command82().name("list").alias("ls").description("List a
17188
17213
  statusText.padEnd(statusWidth),
17189
17214
  "ACCOUNT"
17190
17215
  ].join(" ");
17191
- console.log(chalk73.dim(header));
17216
+ console.log(chalk74.dim(header));
17192
17217
  for (const type2 of allTypes) {
17193
17218
  const connector = connectedMap.get(type2);
17194
- const status = connector ? chalk73.green("\u2713".padEnd(statusWidth)) : chalk73.dim("-".padEnd(statusWidth));
17195
- const account = connector?.externalUsername ? `@${connector.externalUsername}` : chalk73.dim("-");
17219
+ const status = connector ? chalk74.green("\u2713".padEnd(statusWidth)) : chalk74.dim("-".padEnd(statusWidth));
17220
+ const account = connector?.externalUsername ? `@${connector.externalUsername}` : chalk74.dim("-");
17196
17221
  const row = [type2.padEnd(typeWidth), status, account].join(" ");
17197
17222
  console.log(row);
17198
17223
  }
17199
17224
  console.log();
17200
- console.log(chalk73.dim("To connect a service:"));
17201
- console.log(chalk73.dim(" vm0 connector connect <type>"));
17225
+ console.log(chalk74.dim("To connect a service:"));
17226
+ console.log(chalk74.dim(" vm0 connector connect <type>"));
17202
17227
  })
17203
17228
  );
17204
17229
 
17205
17230
  // src/commands/connector/status.ts
17206
17231
  import { Command as Command83 } from "commander";
17207
- import chalk74 from "chalk";
17232
+ import chalk75 from "chalk";
17208
17233
  var LABEL_WIDTH = 16;
17209
17234
  var statusCommand8 = new Command83().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
17210
17235
  withErrorHandler(async (type2) => {
@@ -17216,11 +17241,11 @@ var statusCommand8 = new Command83().name("status").description("Show detailed s
17216
17241
  });
17217
17242
  }
17218
17243
  const connector = await getConnector(parseResult.data);
17219
- console.log(`Connector: ${chalk74.cyan(type2)}`);
17244
+ console.log(`Connector: ${chalk75.cyan(type2)}`);
17220
17245
  console.log();
17221
17246
  if (connector) {
17222
17247
  console.log(
17223
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk74.green("connected")}`
17248
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk75.green("connected")}`
17224
17249
  );
17225
17250
  console.log(
17226
17251
  `${"Account:".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`
@@ -17242,22 +17267,22 @@ var statusCommand8 = new Command83().name("status").description("Show detailed s
17242
17267
  );
17243
17268
  }
17244
17269
  console.log();
17245
- console.log(chalk74.dim("To disconnect:"));
17246
- console.log(chalk74.dim(` vm0 connector disconnect ${type2}`));
17270
+ console.log(chalk75.dim("To disconnect:"));
17271
+ console.log(chalk75.dim(` vm0 connector disconnect ${type2}`));
17247
17272
  } else {
17248
17273
  console.log(
17249
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk74.dim("not connected")}`
17274
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk75.dim("not connected")}`
17250
17275
  );
17251
17276
  console.log();
17252
- console.log(chalk74.dim("To connect:"));
17253
- console.log(chalk74.dim(` vm0 connector connect ${type2}`));
17277
+ console.log(chalk75.dim("To connect:"));
17278
+ console.log(chalk75.dim(` vm0 connector connect ${type2}`));
17254
17279
  }
17255
17280
  })
17256
17281
  );
17257
17282
 
17258
17283
  // src/commands/connector/disconnect.ts
17259
17284
  import { Command as Command84 } from "commander";
17260
- import chalk75 from "chalk";
17285
+ import chalk76 from "chalk";
17261
17286
  var disconnectCommand = new Command84().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
17262
17287
  withErrorHandler(async (type2) => {
17263
17288
  const parseResult = connectorTypeSchema.safeParse(type2);
@@ -17269,7 +17294,7 @@ var disconnectCommand = new Command84().name("disconnect").description("Disconne
17269
17294
  }
17270
17295
  const connectorType = parseResult.data;
17271
17296
  await deleteConnector(connectorType);
17272
- console.log(chalk75.green(`\u2713 Disconnected ${type2}`));
17297
+ console.log(chalk76.green(`\u2713 Disconnected ${type2}`));
17273
17298
  })
17274
17299
  );
17275
17300
 
@@ -17278,24 +17303,24 @@ var connectorCommand = new Command85().name("connector").description("Manage thi
17278
17303
 
17279
17304
  // src/commands/onboard/index.ts
17280
17305
  import { Command as Command86 } from "commander";
17281
- import chalk79 from "chalk";
17306
+ import chalk80 from "chalk";
17282
17307
  import { mkdir as mkdir8 } from "fs/promises";
17283
17308
  import { existsSync as existsSync12 } from "fs";
17284
17309
 
17285
17310
  // src/lib/ui/welcome-box.ts
17286
- import chalk76 from "chalk";
17311
+ import chalk77 from "chalk";
17287
17312
  var gradientColors = [
17288
- chalk76.hex("#FFAB5E"),
17313
+ chalk77.hex("#FFAB5E"),
17289
17314
  // Line 1 - lightest
17290
- chalk76.hex("#FF9642"),
17315
+ chalk77.hex("#FF9642"),
17291
17316
  // Line 2
17292
- chalk76.hex("#FF8228"),
17317
+ chalk77.hex("#FF8228"),
17293
17318
  // Line 3
17294
- chalk76.hex("#FF6D0A"),
17319
+ chalk77.hex("#FF6D0A"),
17295
17320
  // Line 4
17296
- chalk76.hex("#E85D00"),
17321
+ chalk77.hex("#E85D00"),
17297
17322
  // Line 5
17298
- chalk76.hex("#CC4E00")
17323
+ chalk77.hex("#CC4E00")
17299
17324
  // Line 6 - darkest
17300
17325
  ];
17301
17326
  var vm0LogoLines = [
@@ -17317,15 +17342,15 @@ function renderVm0Banner() {
17317
17342
  function renderOnboardWelcome() {
17318
17343
  renderVm0Banner();
17319
17344
  console.log(` Build agentic workflows using natural language.`);
17320
- console.log(` ${chalk76.dim("Currently in beta, enjoy it free")}`);
17345
+ console.log(` ${chalk77.dim("Currently in beta, enjoy it free")}`);
17321
17346
  console.log(
17322
- ` ${chalk76.dim("Star us on GitHub: https://github.com/vm0-ai/vm0")}`
17347
+ ` ${chalk77.dim("Star us on GitHub: https://github.com/vm0-ai/vm0")}`
17323
17348
  );
17324
17349
  console.log();
17325
17350
  }
17326
17351
 
17327
17352
  // src/lib/ui/step-runner.ts
17328
- import chalk77 from "chalk";
17353
+ import chalk78 from "chalk";
17329
17354
  function createStepRunner(options = true) {
17330
17355
  const opts = typeof options === "boolean" ? { interactive: options } : options;
17331
17356
  const interactive = opts.interactive ?? true;
@@ -17340,25 +17365,25 @@ function createStepRunner(options = true) {
17340
17365
  }
17341
17366
  for (const [i, step] of completedSteps.entries()) {
17342
17367
  if (step.failed) {
17343
- console.log(chalk77.red(`\u2717 ${step.label}`));
17368
+ console.log(chalk78.red(`\u2717 ${step.label}`));
17344
17369
  } else {
17345
- console.log(chalk77.green(`\u25CF ${step.label}`));
17370
+ console.log(chalk78.green(`\u25CF ${step.label}`));
17346
17371
  }
17347
17372
  const isLastStep = i === completedSteps.length - 1;
17348
17373
  if (!isLastStep || !isFinal) {
17349
- console.log(chalk77.dim("\u2502"));
17374
+ console.log(chalk78.dim("\u2502"));
17350
17375
  }
17351
17376
  }
17352
17377
  }
17353
17378
  async function executeStep(label, fn, isFinal) {
17354
17379
  let stepFailed = false;
17355
- console.log(chalk77.yellow(`\u25CB ${label}`));
17380
+ console.log(chalk78.yellow(`\u25CB ${label}`));
17356
17381
  const ctx = {
17357
17382
  connector() {
17358
- console.log(chalk77.dim("\u2502"));
17383
+ console.log(chalk78.dim("\u2502"));
17359
17384
  },
17360
17385
  detail(message) {
17361
- console.log(`${chalk77.dim("\u2502")} ${message}`);
17386
+ console.log(`${chalk78.dim("\u2502")} ${message}`);
17362
17387
  },
17363
17388
  async prompt(promptFn) {
17364
17389
  return await promptFn();
@@ -17375,12 +17400,12 @@ function createStepRunner(options = true) {
17375
17400
  redrawCompletedSteps(isFinal);
17376
17401
  } else {
17377
17402
  if (stepFailed) {
17378
- console.log(chalk77.red(`\u2717 ${label}`));
17403
+ console.log(chalk78.red(`\u2717 ${label}`));
17379
17404
  } else {
17380
- console.log(chalk77.green(`\u25CF ${label}`));
17405
+ console.log(chalk78.green(`\u25CF ${label}`));
17381
17406
  }
17382
17407
  if (!isFinal) {
17383
- console.log(chalk77.dim("\u2502"));
17408
+ console.log(chalk78.dim("\u2502"));
17384
17409
  }
17385
17410
  }
17386
17411
  }
@@ -17540,7 +17565,7 @@ async function setupModelProvider(type2, secret, options) {
17540
17565
 
17541
17566
  // src/lib/domain/onboard/claude-setup.ts
17542
17567
  import { spawn as spawn3 } from "child_process";
17543
- import chalk78 from "chalk";
17568
+ import chalk79 from "chalk";
17544
17569
  var MARKETPLACE_NAME = "vm0-skills";
17545
17570
  var MARKETPLACE_REPO = "vm0-ai/vm0-skills";
17546
17571
  var PLUGIN_ID = "vm0@vm0-skills";
@@ -17577,12 +17602,12 @@ async function runClaudeCommand(args, cwd) {
17577
17602
  }
17578
17603
  function handlePluginError(error, context) {
17579
17604
  const displayContext = context ?? "Claude plugin";
17580
- console.error(chalk78.red(`\u2717 Failed to install ${displayContext}`));
17605
+ console.error(chalk79.red(`\u2717 Failed to install ${displayContext}`));
17581
17606
  if (error instanceof Error) {
17582
- console.error(chalk78.red(`\u2717 ${error.message}`));
17607
+ console.error(chalk79.red(`\u2717 ${error.message}`));
17583
17608
  }
17584
17609
  console.error(
17585
- chalk78.dim("Please ensure Claude CLI is installed and accessible.")
17610
+ chalk79.dim("Please ensure Claude CLI is installed and accessible.")
17586
17611
  );
17587
17612
  process.exit(1);
17588
17613
  }
@@ -17625,7 +17650,7 @@ async function updateMarketplace() {
17625
17650
  ]);
17626
17651
  if (!result.success) {
17627
17652
  console.warn(
17628
- chalk78.yellow(
17653
+ chalk79.yellow(
17629
17654
  `Warning: Could not update marketplace: ${result.error ?? "unknown error"}`
17630
17655
  )
17631
17656
  );
@@ -17671,9 +17696,9 @@ async function handleAuthentication(ctx) {
17671
17696
  onInitiating: () => {
17672
17697
  },
17673
17698
  onDeviceCodeReady: (url, code, expiresIn) => {
17674
- step.detail(`Copy code: ${chalk79.cyan.bold(code)}`);
17675
- step.detail(`Open: ${chalk79.cyan(url)}`);
17676
- step.detail(chalk79.dim(`Expires in ${expiresIn} minutes`));
17699
+ step.detail(`Copy code: ${chalk80.cyan.bold(code)}`);
17700
+ step.detail(`Open: ${chalk80.cyan(url)}`);
17701
+ step.detail(chalk80.dim(`Expires in ${expiresIn} minutes`));
17677
17702
  },
17678
17703
  onPolling: () => {
17679
17704
  },
@@ -17701,26 +17726,26 @@ async function handleModelProvider(ctx) {
17701
17726
  const providerType = await step.prompt(
17702
17727
  () => promptSelect(
17703
17728
  "Select provider type:",
17704
- choices.map((c23) => ({
17705
- title: c23.label,
17706
- value: c23.type
17729
+ choices.map((c24) => ({
17730
+ title: c24.label,
17731
+ value: c24.type
17707
17732
  }))
17708
17733
  )
17709
17734
  );
17710
17735
  if (!providerType) {
17711
17736
  process.exit(0);
17712
17737
  }
17713
- const selectedChoice = choices.find((c23) => c23.type === providerType);
17738
+ const selectedChoice = choices.find((c24) => c24.type === providerType);
17714
17739
  if (selectedChoice?.helpText) {
17715
17740
  for (const line of selectedChoice.helpText.split("\n")) {
17716
- step.detail(chalk79.dim(line));
17741
+ step.detail(chalk80.dim(line));
17717
17742
  }
17718
17743
  }
17719
17744
  const secret = await step.prompt(
17720
17745
  () => promptPassword(`Enter your ${selectedChoice?.secretLabel ?? "secret"}:`)
17721
17746
  );
17722
17747
  if (!secret) {
17723
- console.log(chalk79.dim("Cancelled"));
17748
+ console.log(chalk80.dim("Cancelled"));
17724
17749
  process.exit(0);
17725
17750
  }
17726
17751
  let selectedModel;
@@ -17739,7 +17764,7 @@ async function handleModelProvider(ctx) {
17739
17764
  () => promptSelect("Select model:", modelChoices)
17740
17765
  );
17741
17766
  if (modelSelection === void 0) {
17742
- console.log(chalk79.dim("Cancelled"));
17767
+ console.log(chalk80.dim("Cancelled"));
17743
17768
  process.exit(0);
17744
17769
  }
17745
17770
  selectedModel = modelSelection === "" ? void 0 : modelSelection;
@@ -17749,7 +17774,7 @@ async function handleModelProvider(ctx) {
17749
17774
  });
17750
17775
  const modelNote = result.provider.selectedModel ? ` with model: ${result.provider.selectedModel}` : "";
17751
17776
  step.detail(
17752
- chalk79.green(
17777
+ chalk80.green(
17753
17778
  `${providerType} ${result.created ? "created" : "updated"}${result.isDefault ? ` (default for ${result.framework})` : ""}${modelNote}`
17754
17779
  )
17755
17780
  );
@@ -17780,7 +17805,7 @@ async function handleAgentCreation(ctx) {
17780
17805
  agentName = inputName;
17781
17806
  if (existsSync12(agentName)) {
17782
17807
  step.detail(
17783
- chalk79.yellow(`${agentName}/ already exists, choose another name`)
17808
+ chalk80.yellow(`${agentName}/ already exists, choose another name`)
17784
17809
  );
17785
17810
  } else {
17786
17811
  folderExists = false;
@@ -17801,7 +17826,7 @@ async function handleAgentCreation(ctx) {
17801
17826
  }
17802
17827
  }
17803
17828
  await mkdir8(agentName, { recursive: true });
17804
- step.detail(chalk79.green(`Created ${agentName}/`));
17829
+ step.detail(chalk80.green(`Created ${agentName}/`));
17805
17830
  });
17806
17831
  return agentName;
17807
17832
  }
@@ -17817,7 +17842,7 @@ async function handlePluginInstallation(ctx, agentName) {
17817
17842
  shouldInstall = confirmed ?? true;
17818
17843
  }
17819
17844
  if (!shouldInstall) {
17820
- step.detail(chalk79.dim("Skipped"));
17845
+ step.detail(chalk80.dim("Skipped"));
17821
17846
  return;
17822
17847
  }
17823
17848
  const scope = "project";
@@ -17825,7 +17850,7 @@ async function handlePluginInstallation(ctx, agentName) {
17825
17850
  const agentDir = `${process.cwd()}/${agentName}`;
17826
17851
  const result = await installVm0Plugin(scope, agentDir);
17827
17852
  step.detail(
17828
- chalk79.green(`Installed ${result.pluginId} (scope: ${result.scope})`)
17853
+ chalk80.green(`Installed ${result.pluginId} (scope: ${result.scope})`)
17829
17854
  );
17830
17855
  pluginInstalled = true;
17831
17856
  } catch (error) {
@@ -17836,14 +17861,14 @@ async function handlePluginInstallation(ctx, agentName) {
17836
17861
  }
17837
17862
  function printNextSteps(agentName, pluginInstalled) {
17838
17863
  console.log();
17839
- console.log(chalk79.bold("Next step:"));
17864
+ console.log(chalk80.bold("Next step:"));
17840
17865
  console.log();
17841
17866
  if (pluginInstalled) {
17842
17867
  console.log(
17843
- ` ${chalk79.cyan(`cd ${agentName} && claude "/${PRIMARY_SKILL_NAME} let's build an agent"`)}`
17868
+ ` ${chalk80.cyan(`cd ${agentName} && claude "/${PRIMARY_SKILL_NAME} let's build an agent"`)}`
17844
17869
  );
17845
17870
  } else {
17846
- console.log(` ${chalk79.cyan(`cd ${agentName} && vm0 init`)}`);
17871
+ console.log(` ${chalk80.cyan(`cd ${agentName} && vm0 init`)}`);
17847
17872
  }
17848
17873
  console.log();
17849
17874
  }
@@ -17873,20 +17898,20 @@ var onboardCommand = new Command86().name("onboard").description("Guided setup f
17873
17898
 
17874
17899
  // src/commands/setup-claude/index.ts
17875
17900
  import { Command as Command87 } from "commander";
17876
- import chalk80 from "chalk";
17901
+ import chalk81 from "chalk";
17877
17902
  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(
17878
17903
  withErrorHandler(async (options) => {
17879
- console.log(chalk80.dim("Installing VM0 Claude Plugin..."));
17904
+ console.log(chalk81.dim("Installing VM0 Claude Plugin..."));
17880
17905
  const scope = options.scope === "user" ? "user" : "project";
17881
17906
  const result = await installVm0Plugin(scope, options.agentDir);
17882
17907
  console.log(
17883
- chalk80.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
17908
+ chalk81.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
17884
17909
  );
17885
17910
  console.log();
17886
17911
  console.log("Next step:");
17887
17912
  const cdPrefix = options.agentDir ? `cd ${options.agentDir} && ` : "";
17888
17913
  console.log(
17889
- chalk80.cyan(
17914
+ chalk81.cyan(
17890
17915
  ` ${cdPrefix}claude "/${PRIMARY_SKILL_NAME} let's build a workflow"`
17891
17916
  )
17892
17917
  );
@@ -17895,35 +17920,35 @@ var setupClaudeCommand = new Command87().name("setup-claude").description("Insta
17895
17920
 
17896
17921
  // src/commands/dashboard/index.ts
17897
17922
  import { Command as Command88 } from "commander";
17898
- import chalk81 from "chalk";
17923
+ import chalk82 from "chalk";
17899
17924
  var dashboardCommand = new Command88().name("dashboard").description("Quick reference for common query commands").action(() => {
17900
17925
  console.log();
17901
- console.log(chalk81.bold("VM0 Dashboard"));
17926
+ console.log(chalk82.bold("VM0 Dashboard"));
17902
17927
  console.log();
17903
- console.log(chalk81.bold("Agents"));
17904
- console.log(chalk81.dim(" List agents: ") + "vm0 agent list");
17928
+ console.log(chalk82.bold("Agents"));
17929
+ console.log(chalk82.dim(" List agents: ") + "vm0 agent list");
17905
17930
  console.log();
17906
- console.log(chalk81.bold("Runs"));
17907
- console.log(chalk81.dim(" Recent runs: ") + "vm0 run list");
17908
- console.log(chalk81.dim(" View run logs: ") + "vm0 logs <run-id>");
17931
+ console.log(chalk82.bold("Runs"));
17932
+ console.log(chalk82.dim(" Recent runs: ") + "vm0 run list");
17933
+ console.log(chalk82.dim(" View run logs: ") + "vm0 logs <run-id>");
17909
17934
  console.log();
17910
- console.log(chalk81.bold("Schedules"));
17911
- console.log(chalk81.dim(" List schedules: ") + "vm0 schedule list");
17935
+ console.log(chalk82.bold("Schedules"));
17936
+ console.log(chalk82.dim(" List schedules: ") + "vm0 schedule list");
17912
17937
  console.log();
17913
- console.log(chalk81.bold("Account"));
17914
- console.log(chalk81.dim(" Usage stats: ") + "vm0 usage");
17915
- console.log(chalk81.dim(" List secrets: ") + "vm0 secret list");
17916
- console.log(chalk81.dim(" List variables: ") + "vm0 variable list");
17938
+ console.log(chalk82.bold("Account"));
17939
+ console.log(chalk82.dim(" Usage stats: ") + "vm0 usage");
17940
+ console.log(chalk82.dim(" List secrets: ") + "vm0 secret list");
17941
+ console.log(chalk82.dim(" List variables: ") + "vm0 variable list");
17917
17942
  console.log();
17918
17943
  console.log(
17919
- chalk81.dim("Not logged in? Run: ") + chalk81.cyan("vm0 auth login")
17944
+ chalk82.dim("Not logged in? Run: ") + chalk82.cyan("vm0 auth login")
17920
17945
  );
17921
17946
  console.log();
17922
17947
  });
17923
17948
 
17924
17949
  // src/commands/preference/index.ts
17925
17950
  import { Command as Command89 } from "commander";
17926
- import chalk82 from "chalk";
17951
+ import chalk83 from "chalk";
17927
17952
  function detectTimezone2() {
17928
17953
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
17929
17954
  }
@@ -17944,15 +17969,15 @@ function parseOnOff(flag, value) {
17944
17969
  );
17945
17970
  }
17946
17971
  function displayPreferences(prefs) {
17947
- console.log(chalk82.bold("Current preferences:"));
17972
+ console.log(chalk83.bold("Current preferences:"));
17948
17973
  console.log(
17949
- ` Timezone: ${prefs.timezone ? chalk82.cyan(prefs.timezone) : chalk82.dim("not set")}`
17974
+ ` Timezone: ${prefs.timezone ? chalk83.cyan(prefs.timezone) : chalk83.dim("not set")}`
17950
17975
  );
17951
17976
  console.log(
17952
- ` Email notify: ${prefs.notifyEmail ? chalk82.green("on") : chalk82.dim("off")}`
17977
+ ` Email notify: ${prefs.notifyEmail ? chalk83.green("on") : chalk83.dim("off")}`
17953
17978
  );
17954
17979
  console.log(
17955
- ` Slack notify: ${prefs.notifySlack ? chalk82.green("on") : chalk82.dim("off")}`
17980
+ ` Slack notify: ${prefs.notifySlack ? chalk83.green("on") : chalk83.dim("off")}`
17956
17981
  );
17957
17982
  }
17958
17983
  function buildUpdates(opts) {
@@ -17982,21 +18007,21 @@ function buildUpdates(opts) {
17982
18007
  function printUpdateResult(updates, result) {
17983
18008
  if (updates.timezone !== void 0) {
17984
18009
  console.log(
17985
- chalk82.green(
17986
- `Timezone set to ${chalk82.cyan(result.timezone ?? updates.timezone)}`
18010
+ chalk83.green(
18011
+ `Timezone set to ${chalk83.cyan(result.timezone ?? updates.timezone)}`
17987
18012
  )
17988
18013
  );
17989
18014
  }
17990
18015
  if (updates.notifyEmail !== void 0) {
17991
18016
  console.log(
17992
- chalk82.green(
18017
+ chalk83.green(
17993
18018
  `Email notifications ${result.notifyEmail ? "enabled" : "disabled"}`
17994
18019
  )
17995
18020
  );
17996
18021
  }
17997
18022
  if (updates.notifySlack !== void 0) {
17998
18023
  console.log(
17999
- chalk82.green(
18024
+ chalk83.green(
18000
18025
  `Slack notifications ${result.notifySlack ? "enabled" : "disabled"}`
18001
18026
  )
18002
18027
  );
@@ -18005,7 +18030,7 @@ function printUpdateResult(updates, result) {
18005
18030
  async function interactiveSetup(prefs) {
18006
18031
  if (!prefs.timezone) {
18007
18032
  const detectedTz = detectTimezone2();
18008
- console.log(chalk82.dim(`
18033
+ console.log(chalk83.dim(`
18009
18034
  System timezone detected: ${detectedTz}`));
18010
18035
  const tz = await promptText(
18011
18036
  "Set timezone? (enter timezone or leave empty to skip)",
@@ -18016,7 +18041,7 @@ System timezone detected: ${detectedTz}`));
18016
18041
  throw new Error(`Invalid timezone: ${tz.trim()}`);
18017
18042
  }
18018
18043
  await updateUserPreferences({ timezone: tz.trim() });
18019
- console.log(chalk82.green(`Timezone set to ${chalk82.cyan(tz.trim())}`));
18044
+ console.log(chalk83.green(`Timezone set to ${chalk83.cyan(tz.trim())}`));
18020
18045
  }
18021
18046
  }
18022
18047
  if (!prefs.notifyEmail) {
@@ -18026,7 +18051,7 @@ System timezone detected: ${detectedTz}`));
18026
18051
  );
18027
18052
  if (enable) {
18028
18053
  await updateUserPreferences({ notifyEmail: true });
18029
- console.log(chalk82.green("Email notifications enabled"));
18054
+ console.log(chalk83.green("Email notifications enabled"));
18030
18055
  }
18031
18056
  }
18032
18057
  }
@@ -18045,10 +18070,10 @@ var preferenceCommand = new Command89().name("preference").description("View or
18045
18070
  } else if (!prefs.timezone) {
18046
18071
  console.log();
18047
18072
  console.log(
18048
- `To set timezone: ${chalk82.cyan("vm0 preference --timezone <timezone>")}`
18073
+ `To set timezone: ${chalk83.cyan("vm0 preference --timezone <timezone>")}`
18049
18074
  );
18050
18075
  console.log(
18051
- chalk82.dim("Example: vm0 preference --timezone America/New_York")
18076
+ chalk83.dim("Example: vm0 preference --timezone America/New_York")
18052
18077
  );
18053
18078
  }
18054
18079
  })
@@ -18056,7 +18081,7 @@ var preferenceCommand = new Command89().name("preference").description("View or
18056
18081
 
18057
18082
  // src/commands/upgrade/index.ts
18058
18083
  import { Command as Command90 } from "commander";
18059
- import chalk83 from "chalk";
18084
+ import chalk84 from "chalk";
18060
18085
  var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
18061
18086
  withErrorHandler(async () => {
18062
18087
  console.log("Checking for updates...");
@@ -18064,13 +18089,13 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
18064
18089
  if (latestVersion === null) {
18065
18090
  throw new Error("Could not check for updates. Please try again later.");
18066
18091
  }
18067
- if (latestVersion === "9.58.0") {
18068
- console.log(chalk83.green(`\u2713 Already up to date (${"9.58.0"})`));
18092
+ if (latestVersion === "9.59.0") {
18093
+ console.log(chalk84.green(`\u2713 Already up to date (${"9.59.0"})`));
18069
18094
  return;
18070
18095
  }
18071
18096
  console.log(
18072
- chalk83.yellow(
18073
- `Current version: ${"9.58.0"} -> Latest version: ${latestVersion}`
18097
+ chalk84.yellow(
18098
+ `Current version: ${"9.59.0"} -> Latest version: ${latestVersion}`
18074
18099
  )
18075
18100
  );
18076
18101
  console.log();
@@ -18078,26 +18103,26 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
18078
18103
  if (!isAutoUpgradeSupported(packageManager)) {
18079
18104
  if (packageManager === "unknown") {
18080
18105
  console.log(
18081
- chalk83.yellow(
18106
+ chalk84.yellow(
18082
18107
  "Could not detect your package manager for auto-upgrade."
18083
18108
  )
18084
18109
  );
18085
18110
  } else {
18086
18111
  console.log(
18087
- chalk83.yellow(
18112
+ chalk84.yellow(
18088
18113
  `Auto-upgrade is not supported for ${packageManager}.`
18089
18114
  )
18090
18115
  );
18091
18116
  }
18092
- console.log(chalk83.yellow("Please upgrade manually:"));
18093
- console.log(chalk83.cyan(` ${getManualUpgradeCommand(packageManager)}`));
18117
+ console.log(chalk84.yellow("Please upgrade manually:"));
18118
+ console.log(chalk84.cyan(` ${getManualUpgradeCommand(packageManager)}`));
18094
18119
  return;
18095
18120
  }
18096
18121
  console.log(`Upgrading via ${packageManager}...`);
18097
18122
  const success = await performUpgrade(packageManager);
18098
18123
  if (success) {
18099
18124
  console.log(
18100
- chalk83.green(`\u2713 Upgraded from ${"9.58.0"} to ${latestVersion}`)
18125
+ chalk84.green(`\u2713 Upgraded from ${"9.59.0"} to ${latestVersion}`)
18101
18126
  );
18102
18127
  return;
18103
18128
  }
@@ -18111,7 +18136,7 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
18111
18136
 
18112
18137
  // src/index.ts
18113
18138
  var program = new Command91();
18114
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.58.0");
18139
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.59.0");
18115
18140
  program.addCommand(authCommand);
18116
18141
  program.addCommand(infoCommand);
18117
18142
  program.addCommand(composeCommand);