@vm0/cli 9.70.1 → 9.70.3

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 +583 -32
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -45,7 +45,7 @@ if (DSN) {
45
45
  Sentry.init({
46
46
  dsn: DSN,
47
47
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
48
- release: "9.70.1",
48
+ release: "9.70.3",
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.70.1",
67
+ version: "9.70.3",
68
68
  command: process.argv.slice(2).join(" ")
69
69
  });
70
70
  Sentry.setContext("runtime", {
@@ -675,7 +675,7 @@ function getConfigPath() {
675
675
  return join2(homedir2(), ".vm0", "config.json");
676
676
  }
677
677
  var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
678
- console.log(chalk4.bold(`VM0 CLI v${"9.70.1"}`));
678
+ console.log(chalk4.bold(`VM0 CLI v${"9.70.3"}`));
679
679
  console.log();
680
680
  const config = await loadConfig();
681
681
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -4710,6 +4710,24 @@ var CONNECTOR_TYPES_DEF = {
4710
4710
  },
4711
4711
  defaultAuthMethod: "api-token"
4712
4712
  },
4713
+ loops: {
4714
+ label: "Loops",
4715
+ helpText: "Connect your Loops account to send behavioral and transactional emails for your SaaS product",
4716
+ authMethods: {
4717
+ "api-token": {
4718
+ label: "API Key",
4719
+ helpText: "1. Log in to [Loops](https://app.loops.so)\n2. Go to **Settings** \u2192 **API**\n3. Click **Generate key**\n4. Copy the generated API key",
4720
+ secrets: {
4721
+ LOOPS_TOKEN: {
4722
+ label: "API Key",
4723
+ required: true,
4724
+ placeholder: "d2d561f5ff80136f69b4b5a31b9fb3c9"
4725
+ }
4726
+ }
4727
+ }
4728
+ },
4729
+ defaultAuthMethod: "api-token"
4730
+ },
4713
4731
  make: {
4714
4732
  label: "Make",
4715
4733
  helpText: "Connect your Make account to manage scenarios, organizations, and automation workflows",
@@ -4842,6 +4860,33 @@ var CONNECTOR_TYPES_DEF = {
4842
4860
  },
4843
4861
  defaultAuthMethod: "api-token"
4844
4862
  },
4863
+ cloudinary: {
4864
+ label: "Cloudinary",
4865
+ helpText: "Connect your Cloudinary account to manage images, videos, and media assets with CDN delivery and transformations",
4866
+ authMethods: {
4867
+ "api-token": {
4868
+ label: "API Credentials",
4869
+ helpText: "1. Log in to the [Cloudinary Console](https://console.cloudinary.com/settings/api-keys)\n2. Go to **Settings** \u2192 **API Keys**\n3. Copy your **Cloud Name**, **API Key**, and **API Secret**",
4870
+ secrets: {
4871
+ CLOUDINARY_TOKEN: {
4872
+ label: "API Key",
4873
+ required: true
4874
+ },
4875
+ CLOUDINARY_API_SECRET: {
4876
+ label: "API Secret",
4877
+ required: true
4878
+ },
4879
+ CLOUDINARY_CLOUD_NAME: {
4880
+ label: "Cloud Name",
4881
+ required: true,
4882
+ type: "variable",
4883
+ placeholder: "your-cloud-name"
4884
+ }
4885
+ }
4886
+ }
4887
+ },
4888
+ defaultAuthMethod: "api-token"
4889
+ },
4845
4890
  cronlytic: {
4846
4891
  label: "Cronlytic",
4847
4892
  helpText: "Connect your Cronlytic account to monitor cron jobs and scheduled tasks",
@@ -4863,6 +4908,22 @@ var CONNECTOR_TYPES_DEF = {
4863
4908
  },
4864
4909
  defaultAuthMethod: "api-token"
4865
4910
  },
4911
+ "customer-io": {
4912
+ label: "Customer.io",
4913
+ helpText: "Connect your Customer.io account to send behavioral emails, SMS, and push notifications triggered by user events",
4914
+ authMethods: {
4915
+ "api-token": {
4916
+ label: "API Token",
4917
+ secrets: {
4918
+ CUSTOMERIO_APP_TOKEN: {
4919
+ label: "App API Key",
4920
+ required: true
4921
+ }
4922
+ }
4923
+ }
4924
+ },
4925
+ defaultAuthMethod: "api-token"
4926
+ },
4866
4927
  dify: {
4867
4928
  label: "Dify",
4868
4929
  helpText: "Connect your Dify account to build and manage AI-powered workflows, chatbots, and agentic applications",
@@ -5022,6 +5083,23 @@ var CONNECTOR_TYPES_DEF = {
5022
5083
  },
5023
5084
  defaultAuthMethod: "api-token"
5024
5085
  },
5086
+ salesforce: {
5087
+ label: "Salesforce",
5088
+ helpText: "Connect your Salesforce account to manage CRM data, contacts, leads, and sales workflows",
5089
+ authMethods: {
5090
+ "api-token": {
5091
+ label: "API Token",
5092
+ secrets: {
5093
+ SALESFORCE_TOKEN: {
5094
+ label: "API Token",
5095
+ required: true,
5096
+ placeholder: "00D..."
5097
+ }
5098
+ }
5099
+ }
5100
+ },
5101
+ defaultAuthMethod: "api-token"
5102
+ },
5025
5103
  reddit: {
5026
5104
  label: "Reddit",
5027
5105
  featureFlag: "redditConnector" /* RedditConnector */,
@@ -5413,6 +5491,24 @@ var CONNECTOR_TYPES_DEF = {
5413
5491
  }
5414
5492
  }
5415
5493
  },
5494
+ calendly: {
5495
+ label: "Calendly",
5496
+ helpText: "Connect your Calendly account to access scheduling data, event types, and invitee information",
5497
+ authMethods: {
5498
+ "api-token": {
5499
+ label: "Personal Access Token",
5500
+ helpText: "1. Log in to [Calendly](https://calendly.com)\n2. Go to **Integrations > API & Webhooks**\n3. Generate a Personal Access Token\n4. Copy the token",
5501
+ secrets: {
5502
+ CALENDLY_TOKEN: {
5503
+ label: "Personal Access Token",
5504
+ required: true,
5505
+ placeholder: "your-calendly-token"
5506
+ }
5507
+ }
5508
+ }
5509
+ },
5510
+ defaultAuthMethod: "api-token"
5511
+ },
5416
5512
  canva: {
5417
5513
  label: "Canva",
5418
5514
  featureFlag: "canvaConnector" /* CanvaConnector */,
@@ -5456,6 +5552,24 @@ var CONNECTOR_TYPES_DEF = {
5456
5552
  }
5457
5553
  }
5458
5554
  },
5555
+ "cal-com": {
5556
+ label: "Cal.com",
5557
+ helpText: "Connect your Cal.com account to manage scheduling, bookings, and calendar events",
5558
+ authMethods: {
5559
+ "api-token": {
5560
+ label: "API Token",
5561
+ helpText: "1. Log in to [Cal.com](https://app.cal.com)\n2. Go to **Settings** \u2192 **Developer** \u2192 **API Keys**\n3. Click **Create API Key**\n4. Copy the generated key",
5562
+ secrets: {
5563
+ CALCOM_TOKEN: {
5564
+ label: "API Token",
5565
+ required: true,
5566
+ placeholder: "cal_live_xxxxxxxx"
5567
+ }
5568
+ }
5569
+ }
5570
+ },
5571
+ defaultAuthMethod: "api-token"
5572
+ },
5459
5573
  xero: {
5460
5574
  label: "Xero",
5461
5575
  helpText: "Connect your Xero account to access accounting data, invoices, and contacts",
@@ -6030,6 +6144,24 @@ var CONNECTOR_TYPES_DEF = {
6030
6144
  },
6031
6145
  defaultAuthMethod: "api-token"
6032
6146
  },
6147
+ brevo: {
6148
+ label: "Brevo",
6149
+ helpText: "Connect your Brevo account to manage email campaigns, transactional emails, and CRM contacts",
6150
+ authMethods: {
6151
+ "api-token": {
6152
+ label: "API Key",
6153
+ helpText: "1. Log in to [Brevo](https://app.brevo.com)\n2. Go to **Settings** \u2192 **SMTP & API** \u2192 **API Keys**\n3. Copy your API key",
6154
+ secrets: {
6155
+ BREVO_TOKEN: {
6156
+ label: "API Key",
6157
+ required: true,
6158
+ placeholder: "xkeysib-..."
6159
+ }
6160
+ }
6161
+ }
6162
+ },
6163
+ defaultAuthMethod: "api-token"
6164
+ },
6033
6165
  "brave-search": {
6034
6166
  label: "Brave Search",
6035
6167
  helpText: "Connect your Brave Search account to perform privacy-focused web, image, video, and news searches",
@@ -6791,6 +6923,24 @@ var CONNECTOR_TYPES_DEF = {
6791
6923
  }
6792
6924
  },
6793
6925
  defaultAuthMethod: "api-token"
6926
+ },
6927
+ v0: {
6928
+ label: "v0",
6929
+ helpText: "Connect your v0 account to generate UI components, chat completions, and iterate on React and Next.js code with the v0 Platform API",
6930
+ authMethods: {
6931
+ "api-token": {
6932
+ label: "API Token",
6933
+ helpText: "1. Log in to [v0](https://v0.dev)\n2. Go to **Settings** \u2192 **Keys** ([direct link](https://v0.dev/chat/settings/keys))\n3. Create a new API key\n4. Copy the generated token",
6934
+ secrets: {
6935
+ V0_TOKEN: {
6936
+ label: "API Token",
6937
+ required: true,
6938
+ placeholder: "v0-..."
6939
+ }
6940
+ }
6941
+ }
6942
+ },
6943
+ defaultAuthMethod: "api-token"
6794
6944
  }
6795
6945
  };
6796
6946
  var CONNECTOR_TYPES = CONNECTOR_TYPES_DEF;
@@ -6801,9 +6951,11 @@ var connectorTypeSchema = z22.enum([
6801
6951
  "axiom",
6802
6952
  "airtable",
6803
6953
  "asana",
6954
+ "calendly",
6804
6955
  "canva",
6805
6956
  "clickup",
6806
6957
  "cloudflare",
6958
+ "cloudinary",
6807
6959
  "close",
6808
6960
  "github",
6809
6961
  "gmail",
@@ -6882,6 +7034,7 @@ var connectorTypeSchema = z22.enum([
6882
7034
  "serpapi",
6883
7035
  "zeptomail",
6884
7036
  "runway",
7037
+ "salesforce",
6885
7038
  "shortio",
6886
7039
  "streak",
6887
7040
  "supadata",
@@ -6911,7 +7064,12 @@ var connectorTypeSchema = z22.enum([
6911
7064
  "minio",
6912
7065
  "pdforge",
6913
7066
  "slack-webhook",
6914
- "wix"
7067
+ "wix",
7068
+ "cal-com",
7069
+ "v0",
7070
+ "brevo",
7071
+ "customer-io",
7072
+ "loops"
6915
7073
  ]);
6916
7074
  function getConnectorEnvironmentMapping(type2) {
6917
7075
  const config = CONNECTOR_TYPES[type2];
@@ -8000,6 +8158,399 @@ var zeroOrgContract = c28.router({
8000
8158
  }
8001
8159
  });
8002
8160
 
8161
+ // ../../packages/core/src/contracts/zero-composes.ts
8162
+ import { z as z32 } from "zod";
8163
+ var c29 = initContract();
8164
+ var zeroComposesMainContract = c29.router({
8165
+ getByName: {
8166
+ method: "GET",
8167
+ path: "/api/zero/composes",
8168
+ headers: authHeadersSchema,
8169
+ query: z32.object({
8170
+ name: z32.string().min(1, "Missing name query parameter"),
8171
+ org: z32.string().optional()
8172
+ }),
8173
+ responses: {
8174
+ 200: composeResponseSchema,
8175
+ 400: apiErrorSchema,
8176
+ 401: apiErrorSchema,
8177
+ 403: apiErrorSchema
8178
+ },
8179
+ summary: "Get agent compose by name (zero proxy)"
8180
+ }
8181
+ });
8182
+ var zeroComposesByIdContract = c29.router({
8183
+ getById: {
8184
+ method: "GET",
8185
+ path: "/api/zero/composes/:id",
8186
+ headers: authHeadersSchema,
8187
+ pathParams: z32.object({
8188
+ id: z32.string().min(1, "Compose ID is required")
8189
+ }),
8190
+ responses: {
8191
+ 200: composeResponseSchema,
8192
+ 401: apiErrorSchema,
8193
+ 403: apiErrorSchema,
8194
+ 404: apiErrorSchema
8195
+ },
8196
+ summary: "Get agent compose by ID (zero proxy)"
8197
+ },
8198
+ delete: {
8199
+ method: "DELETE",
8200
+ path: "/api/zero/composes/:id",
8201
+ headers: authHeadersSchema,
8202
+ pathParams: z32.object({
8203
+ id: z32.string().uuid("Compose ID is required")
8204
+ }),
8205
+ body: c29.noBody(),
8206
+ responses: {
8207
+ 204: c29.noBody(),
8208
+ 401: apiErrorSchema,
8209
+ 403: apiErrorSchema,
8210
+ 404: apiErrorSchema,
8211
+ 409: apiErrorSchema
8212
+ },
8213
+ summary: "Delete agent compose (zero proxy)"
8214
+ }
8215
+ });
8216
+ var zeroComposesListContract = c29.router({
8217
+ list: {
8218
+ method: "GET",
8219
+ path: "/api/zero/composes/list",
8220
+ headers: authHeadersSchema,
8221
+ query: z32.object({
8222
+ org: z32.string().optional()
8223
+ }),
8224
+ responses: {
8225
+ 200: z32.object({
8226
+ composes: z32.array(composeListItemSchema)
8227
+ }),
8228
+ 400: apiErrorSchema,
8229
+ 401: apiErrorSchema,
8230
+ 403: apiErrorSchema
8231
+ },
8232
+ summary: "List all agent composes (zero proxy)"
8233
+ }
8234
+ });
8235
+
8236
+ // ../../packages/core/src/contracts/zero-runs.ts
8237
+ import { z as z33 } from "zod";
8238
+ var zeroRunRequestSchema = unifiedRunRequestSchema.omit({
8239
+ triggerSource: true
8240
+ });
8241
+ var c30 = initContract();
8242
+ var zeroRunsMainContract = c30.router({
8243
+ create: {
8244
+ method: "POST",
8245
+ path: "/api/zero/runs",
8246
+ headers: authHeadersSchema,
8247
+ body: zeroRunRequestSchema,
8248
+ responses: {
8249
+ 201: createRunResponseSchema,
8250
+ 400: apiErrorSchema,
8251
+ 401: apiErrorSchema,
8252
+ 403: apiErrorSchema,
8253
+ 404: apiErrorSchema
8254
+ },
8255
+ summary: "Create and execute agent run (zero proxy)"
8256
+ }
8257
+ });
8258
+ var zeroRunsByIdContract = c30.router({
8259
+ getById: {
8260
+ method: "GET",
8261
+ path: "/api/zero/runs/:id",
8262
+ headers: authHeadersSchema,
8263
+ pathParams: z33.object({
8264
+ id: z33.string().min(1, "Run ID is required")
8265
+ }),
8266
+ responses: {
8267
+ 200: getRunResponseSchema,
8268
+ 400: apiErrorSchema,
8269
+ 401: apiErrorSchema,
8270
+ 404: apiErrorSchema
8271
+ },
8272
+ summary: "Get agent run by ID (zero proxy)"
8273
+ }
8274
+ });
8275
+ var zeroRunsCancelContract = c30.router({
8276
+ cancel: {
8277
+ method: "POST",
8278
+ path: "/api/zero/runs/:id/cancel",
8279
+ headers: authHeadersSchema,
8280
+ pathParams: z33.object({
8281
+ id: z33.string().min(1, "Run ID is required")
8282
+ }),
8283
+ body: z33.undefined(),
8284
+ responses: {
8285
+ 200: cancelRunResponseSchema,
8286
+ 400: apiErrorSchema,
8287
+ 401: apiErrorSchema,
8288
+ 403: apiErrorSchema,
8289
+ 404: apiErrorSchema
8290
+ },
8291
+ summary: "Cancel a pending or running run (zero proxy)"
8292
+ }
8293
+ });
8294
+ var zeroRunsQueueContract = c30.router({
8295
+ getQueue: {
8296
+ method: "GET",
8297
+ path: "/api/zero/runs/queue",
8298
+ headers: authHeadersSchema,
8299
+ responses: {
8300
+ 200: queueResponseSchema,
8301
+ 401: apiErrorSchema,
8302
+ 403: apiErrorSchema
8303
+ },
8304
+ summary: "Get org run queue status (zero proxy)"
8305
+ }
8306
+ });
8307
+ var zeroRunAgentEventsContract = c30.router({
8308
+ getAgentEvents: {
8309
+ method: "GET",
8310
+ path: "/api/zero/runs/:id/telemetry/agent",
8311
+ headers: authHeadersSchema,
8312
+ pathParams: z33.object({
8313
+ id: z33.string().min(1, "Run ID is required")
8314
+ }),
8315
+ query: z33.object({
8316
+ since: z33.coerce.number().optional(),
8317
+ limit: z33.coerce.number().min(1).max(100).default(5),
8318
+ order: z33.enum(["asc", "desc"]).default("desc")
8319
+ }),
8320
+ responses: {
8321
+ 200: agentEventsResponseSchema,
8322
+ 401: apiErrorSchema,
8323
+ 404: apiErrorSchema
8324
+ },
8325
+ summary: "Get agent events with pagination (zero proxy)"
8326
+ }
8327
+ });
8328
+
8329
+ // ../../packages/core/src/contracts/zero-schedules.ts
8330
+ import { z as z34 } from "zod";
8331
+ var c31 = initContract();
8332
+ var zeroSchedulesMainContract = c31.router({
8333
+ deploy: {
8334
+ method: "POST",
8335
+ path: "/api/zero/schedules",
8336
+ headers: authHeadersSchema,
8337
+ body: deployScheduleRequestSchema,
8338
+ responses: {
8339
+ 200: deployScheduleResponseSchema,
8340
+ 201: deployScheduleResponseSchema,
8341
+ 400: apiErrorSchema,
8342
+ 401: apiErrorSchema,
8343
+ 403: apiErrorSchema,
8344
+ 404: apiErrorSchema
8345
+ },
8346
+ summary: "Deploy schedule (zero proxy)"
8347
+ },
8348
+ list: {
8349
+ method: "GET",
8350
+ path: "/api/zero/schedules",
8351
+ headers: authHeadersSchema,
8352
+ responses: {
8353
+ 200: scheduleListResponseSchema,
8354
+ 401: apiErrorSchema,
8355
+ 403: apiErrorSchema
8356
+ },
8357
+ summary: "List all schedules (zero proxy)"
8358
+ }
8359
+ });
8360
+ var zeroSchedulesByNameContract = c31.router({
8361
+ delete: {
8362
+ method: "DELETE",
8363
+ path: "/api/zero/schedules/:name",
8364
+ headers: authHeadersSchema,
8365
+ pathParams: z34.object({
8366
+ name: z34.string().min(1, "Schedule name required")
8367
+ }),
8368
+ query: z34.object({
8369
+ composeId: z34.string().uuid("Compose ID required")
8370
+ }),
8371
+ responses: {
8372
+ 204: c31.noBody(),
8373
+ 401: apiErrorSchema,
8374
+ 403: apiErrorSchema,
8375
+ 404: apiErrorSchema
8376
+ },
8377
+ summary: "Delete schedule (zero proxy)"
8378
+ }
8379
+ });
8380
+ var zeroSchedulesEnableContract = c31.router({
8381
+ enable: {
8382
+ method: "POST",
8383
+ path: "/api/zero/schedules/:name/enable",
8384
+ headers: authHeadersSchema,
8385
+ pathParams: z34.object({
8386
+ name: z34.string().min(1, "Schedule name required")
8387
+ }),
8388
+ body: z34.object({
8389
+ composeId: z34.string().uuid("Compose ID required")
8390
+ }),
8391
+ responses: {
8392
+ 200: scheduleResponseSchema,
8393
+ 400: apiErrorSchema,
8394
+ 401: apiErrorSchema,
8395
+ 403: apiErrorSchema,
8396
+ 404: apiErrorSchema
8397
+ },
8398
+ summary: "Enable schedule (zero proxy)"
8399
+ },
8400
+ disable: {
8401
+ method: "POST",
8402
+ path: "/api/zero/schedules/:name/disable",
8403
+ headers: authHeadersSchema,
8404
+ pathParams: z34.object({
8405
+ name: z34.string().min(1, "Schedule name required")
8406
+ }),
8407
+ body: z34.object({
8408
+ composeId: z34.string().uuid("Compose ID required")
8409
+ }),
8410
+ responses: {
8411
+ 200: scheduleResponseSchema,
8412
+ 400: apiErrorSchema,
8413
+ 401: apiErrorSchema,
8414
+ 403: apiErrorSchema,
8415
+ 404: apiErrorSchema
8416
+ },
8417
+ summary: "Disable schedule (zero proxy)"
8418
+ }
8419
+ });
8420
+
8421
+ // ../../packages/core/src/contracts/zero-model-providers.ts
8422
+ import { z as z35 } from "zod";
8423
+ var c32 = initContract();
8424
+ var zeroModelProvidersMainContract = c32.router({
8425
+ list: {
8426
+ method: "GET",
8427
+ path: "/api/zero/model-providers",
8428
+ headers: authHeadersSchema,
8429
+ responses: {
8430
+ 200: modelProviderListResponseSchema,
8431
+ 401: apiErrorSchema,
8432
+ 500: apiErrorSchema
8433
+ },
8434
+ summary: "List org-level model providers"
8435
+ },
8436
+ upsert: {
8437
+ method: "POST",
8438
+ path: "/api/zero/model-providers",
8439
+ headers: authHeadersSchema,
8440
+ body: upsertModelProviderRequestSchema,
8441
+ responses: {
8442
+ 200: upsertModelProviderResponseSchema,
8443
+ 201: upsertModelProviderResponseSchema,
8444
+ 400: apiErrorSchema,
8445
+ 401: apiErrorSchema,
8446
+ 403: apiErrorSchema,
8447
+ 500: apiErrorSchema
8448
+ },
8449
+ summary: "Create or update an org-level model provider (admin only)"
8450
+ }
8451
+ });
8452
+ var zeroModelProvidersByTypeContract = c32.router({
8453
+ delete: {
8454
+ method: "DELETE",
8455
+ path: "/api/zero/model-providers/:type",
8456
+ headers: authHeadersSchema,
8457
+ pathParams: z35.object({
8458
+ type: modelProviderTypeSchema
8459
+ }),
8460
+ responses: {
8461
+ 204: c32.noBody(),
8462
+ 401: apiErrorSchema,
8463
+ 403: apiErrorSchema,
8464
+ 404: apiErrorSchema,
8465
+ 500: apiErrorSchema
8466
+ },
8467
+ summary: "Delete an org-level model provider (admin only)"
8468
+ }
8469
+ });
8470
+ var zeroModelProvidersDefaultContract = c32.router({
8471
+ setDefault: {
8472
+ method: "POST",
8473
+ path: "/api/zero/model-providers/:type/default",
8474
+ headers: authHeadersSchema,
8475
+ pathParams: z35.object({
8476
+ type: modelProviderTypeSchema
8477
+ }),
8478
+ body: z35.undefined(),
8479
+ responses: {
8480
+ 200: modelProviderResponseSchema,
8481
+ 401: apiErrorSchema,
8482
+ 403: apiErrorSchema,
8483
+ 404: apiErrorSchema,
8484
+ 500: apiErrorSchema
8485
+ },
8486
+ summary: "Set org-level model provider as default (admin only)"
8487
+ }
8488
+ });
8489
+
8490
+ // ../../packages/core/src/contracts/zero-user-preferences.ts
8491
+ var c33 = initContract();
8492
+ var zeroUserPreferencesContract = c33.router({
8493
+ get: {
8494
+ method: "GET",
8495
+ path: "/api/zero/user-preferences",
8496
+ headers: authHeadersSchema,
8497
+ responses: {
8498
+ 200: userPreferencesResponseSchema,
8499
+ 401: apiErrorSchema,
8500
+ 500: apiErrorSchema
8501
+ },
8502
+ summary: "Get user preferences"
8503
+ },
8504
+ update: {
8505
+ method: "POST",
8506
+ path: "/api/zero/user-preferences",
8507
+ headers: authHeadersSchema,
8508
+ body: updateUserPreferencesRequestSchema,
8509
+ responses: {
8510
+ 200: userPreferencesResponseSchema,
8511
+ 400: apiErrorSchema,
8512
+ 401: apiErrorSchema,
8513
+ 500: apiErrorSchema
8514
+ },
8515
+ summary: "Update user preferences"
8516
+ }
8517
+ });
8518
+
8519
+ // ../../packages/core/src/contracts/zero-secrets.ts
8520
+ var c34 = initContract();
8521
+ var zeroSecretsContract = c34.router({
8522
+ set: {
8523
+ method: "POST",
8524
+ path: "/api/zero/secrets",
8525
+ headers: authHeadersSchema,
8526
+ body: setSecretRequestSchema,
8527
+ responses: {
8528
+ 200: secretResponseSchema,
8529
+ 201: secretResponseSchema,
8530
+ 400: apiErrorSchema,
8531
+ 401: apiErrorSchema,
8532
+ 500: apiErrorSchema
8533
+ },
8534
+ summary: "Create or update a secret"
8535
+ }
8536
+ });
8537
+ var zeroVariablesContract = c34.router({
8538
+ set: {
8539
+ method: "POST",
8540
+ path: "/api/zero/variables",
8541
+ headers: authHeadersSchema,
8542
+ body: setVariableRequestSchema,
8543
+ responses: {
8544
+ 200: variableResponseSchema,
8545
+ 201: variableResponseSchema,
8546
+ 400: apiErrorSchema,
8547
+ 401: apiErrorSchema,
8548
+ 500: apiErrorSchema
8549
+ },
8550
+ summary: "Create or update a variable"
8551
+ }
8552
+ });
8553
+
8003
8554
  // ../../packages/core/src/storage-names.ts
8004
8555
  function getInstructionsStorageName(agentName) {
8005
8556
  return `agent-instructions@${agentName}`;
@@ -9051,8 +9602,8 @@ async function resolveSkills(skillUrls) {
9051
9602
  }
9052
9603
 
9053
9604
  // src/lib/domain/yaml-validator.ts
9054
- import { z as z32 } from "zod";
9055
- var cliAgentNameSchema = z32.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
9605
+ import { z as z36 } from "zod";
9606
+ var cliAgentNameSchema = z36.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
9056
9607
  /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$/,
9057
9608
  "Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens"
9058
9609
  );
@@ -9066,7 +9617,7 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
9066
9617
  resolveSkillRef(skillRef);
9067
9618
  } catch (error) {
9068
9619
  ctx.addIssue({
9069
- code: z32.ZodIssueCode.custom,
9620
+ code: z36.ZodIssueCode.custom,
9070
9621
  message: error instanceof Error ? error.message : `Invalid skill reference: ${skillRef}`,
9071
9622
  path: ["skills", i]
9072
9623
  });
@@ -9076,15 +9627,15 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
9076
9627
  }
9077
9628
  }
9078
9629
  );
9079
- var cliComposeSchema = z32.object({
9080
- version: z32.string().min(1, "Missing config.version"),
9081
- agents: z32.record(cliAgentNameSchema, cliAgentDefinitionSchema),
9082
- volumes: z32.record(z32.string(), volumeConfigSchema).optional()
9630
+ var cliComposeSchema = z36.object({
9631
+ version: z36.string().min(1, "Missing config.version"),
9632
+ agents: z36.record(cliAgentNameSchema, cliAgentDefinitionSchema),
9633
+ volumes: z36.record(z36.string(), volumeConfigSchema).optional()
9083
9634
  }).superRefine((config, ctx) => {
9084
9635
  const agentKeys = Object.keys(config.agents);
9085
9636
  if (agentKeys.length === 0) {
9086
9637
  ctx.addIssue({
9087
- code: z32.ZodIssueCode.custom,
9638
+ code: z36.ZodIssueCode.custom,
9088
9639
  message: "agents must have at least one agent defined",
9089
9640
  path: ["agents"]
9090
9641
  });
@@ -9092,7 +9643,7 @@ var cliComposeSchema = z32.object({
9092
9643
  }
9093
9644
  if (agentKeys.length > 1) {
9094
9645
  ctx.addIssue({
9095
- code: z32.ZodIssueCode.custom,
9646
+ code: z36.ZodIssueCode.custom,
9096
9647
  message: "Multiple agents not supported yet. Only one agent allowed.",
9097
9648
  path: ["agents"]
9098
9649
  });
@@ -9104,7 +9655,7 @@ var cliComposeSchema = z32.object({
9104
9655
  if (agentVolumes && agentVolumes.length > 0) {
9105
9656
  if (!config.volumes) {
9106
9657
  ctx.addIssue({
9107
- code: z32.ZodIssueCode.custom,
9658
+ code: z36.ZodIssueCode.custom,
9108
9659
  message: "Agent references volumes but no volumes section defined. Each volume must have explicit name and version.",
9109
9660
  path: ["volumes"]
9110
9661
  });
@@ -9114,7 +9665,7 @@ var cliComposeSchema = z32.object({
9114
9665
  const parts = volDeclaration.split(":");
9115
9666
  if (parts.length !== 2) {
9116
9667
  ctx.addIssue({
9117
- code: z32.ZodIssueCode.custom,
9668
+ code: z36.ZodIssueCode.custom,
9118
9669
  message: `Invalid volume declaration: ${volDeclaration}. Expected format: volume-key:/mount/path`,
9119
9670
  path: ["agents", agentName, "volumes"]
9120
9671
  });
@@ -9123,7 +9674,7 @@ var cliComposeSchema = z32.object({
9123
9674
  const volumeKey = parts[0].trim();
9124
9675
  if (!config.volumes[volumeKey]) {
9125
9676
  ctx.addIssue({
9126
- code: z32.ZodIssueCode.custom,
9677
+ code: z36.ZodIssueCode.custom,
9127
9678
  message: `Volume "${volumeKey}" is not defined in volumes section. Each volume must have explicit name and version.`,
9128
9679
  path: ["volumes", volumeKey]
9129
9680
  });
@@ -10322,7 +10873,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
10322
10873
  options.autoUpdate = false;
10323
10874
  }
10324
10875
  if (options.autoUpdate !== false) {
10325
- await startSilentUpgrade("9.70.1");
10876
+ await startSilentUpgrade("9.70.3");
10326
10877
  }
10327
10878
  try {
10328
10879
  let result;
@@ -11147,7 +11698,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
11147
11698
  withErrorHandler(
11148
11699
  async (identifier, prompt, options) => {
11149
11700
  if (options.autoUpdate !== false) {
11150
- await startSilentUpgrade("9.70.1");
11701
+ await startSilentUpgrade("9.70.3");
11151
11702
  }
11152
11703
  const { org, name, version } = parseIdentifier(identifier);
11153
11704
  let composeId;
@@ -12885,7 +13436,7 @@ var cookAction = new Command35().name("cook").description("Quick start: prepare,
12885
13436
  withErrorHandler(
12886
13437
  async (prompt, options) => {
12887
13438
  if (options.autoUpdate !== false) {
12888
- const shouldExit = await checkAndUpgrade("9.70.1", prompt);
13439
+ const shouldExit = await checkAndUpgrade("9.70.3", prompt);
12889
13440
  if (shouldExit) {
12890
13441
  process.exit(0);
12891
13442
  }
@@ -15237,7 +15788,7 @@ var listCommand9 = new Command65().name("list").alias("ls").description("List al
15237
15788
  );
15238
15789
  return;
15239
15790
  }
15240
- const nameWidth = Math.max(4, ...data.composes.map((c29) => c29.name.length));
15791
+ const nameWidth = Math.max(4, ...data.composes.map((c35) => c35.name.length));
15241
15792
  const header = ["NAME".padEnd(nameWidth), "VERSION", "UPDATED"].join(
15242
15793
  " "
15243
15794
  );
@@ -15838,7 +16389,7 @@ async function gatherFrequency(optionFrequency, existingFrequency) {
15838
16389
  if (!isInteractive()) {
15839
16390
  throw new Error("--frequency is required (daily|weekly|monthly|once|loop)");
15840
16391
  }
15841
- const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c29) => c29.value === existingFrequency) : 0;
16392
+ const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c35) => c35.value === existingFrequency) : 0;
15842
16393
  frequency = await promptSelect(
15843
16394
  "Schedule frequency",
15844
16395
  FREQUENCY_CHOICES,
@@ -15863,7 +16414,7 @@ async function gatherDay(frequency, optionDay, existingDay) {
15863
16414
  throw new Error("--day is required for weekly/monthly");
15864
16415
  }
15865
16416
  if (frequency === "weekly") {
15866
- const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c29) => c29.value === existingDay) : 0;
16417
+ const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c35) => c35.value === existingDay) : 0;
15867
16418
  const day2 = await promptSelect(
15868
16419
  "Day of week",
15869
16420
  DAY_OF_WEEK_CHOICES,
@@ -17313,7 +17864,7 @@ import chalk76 from "chalk";
17313
17864
  var listCommand13 = new Command86().name("list").alias("ls").description("List all connectors and their status").action(
17314
17865
  withErrorHandler(async () => {
17315
17866
  const result = await listConnectors();
17316
- const connectedMap = new Map(result.connectors.map((c29) => [c29.type, c29]));
17867
+ const connectedMap = new Map(result.connectors.map((c35) => [c35.type, c35]));
17317
17868
  const allTypesRaw = Object.keys(CONNECTOR_TYPES);
17318
17869
  const allTypes = [];
17319
17870
  for (const type2 of allTypesRaw) {
@@ -17874,16 +18425,16 @@ async function handleModelProvider(ctx) {
17874
18425
  const providerType = await step.prompt(
17875
18426
  () => promptSelect(
17876
18427
  "Select provider type:",
17877
- choices.map((c29) => ({
17878
- title: c29.label,
17879
- value: c29.type
18428
+ choices.map((c35) => ({
18429
+ title: c35.label,
18430
+ value: c35.type
17880
18431
  }))
17881
18432
  )
17882
18433
  );
17883
18434
  if (!providerType) {
17884
18435
  process.exit(0);
17885
18436
  }
17886
- const selectedChoice = choices.find((c29) => c29.type === providerType);
18437
+ const selectedChoice = choices.find((c35) => c35.type === providerType);
17887
18438
  if (selectedChoice?.helpText) {
17888
18439
  for (const line of selectedChoice.helpText.split("\n")) {
17889
18440
  step.detail(chalk82.dim(line));
@@ -18237,13 +18788,13 @@ var upgradeCommand = new Command94().name("upgrade").description("Upgrade vm0 CL
18237
18788
  if (latestVersion === null) {
18238
18789
  throw new Error("Could not check for updates. Please try again later.");
18239
18790
  }
18240
- if (latestVersion === "9.70.1") {
18241
- console.log(chalk86.green(`\u2713 Already up to date (${"9.70.1"})`));
18791
+ if (latestVersion === "9.70.3") {
18792
+ console.log(chalk86.green(`\u2713 Already up to date (${"9.70.3"})`));
18242
18793
  return;
18243
18794
  }
18244
18795
  console.log(
18245
18796
  chalk86.yellow(
18246
- `Current version: ${"9.70.1"} -> Latest version: ${latestVersion}`
18797
+ `Current version: ${"9.70.3"} -> Latest version: ${latestVersion}`
18247
18798
  )
18248
18799
  );
18249
18800
  console.log();
@@ -18270,7 +18821,7 @@ var upgradeCommand = new Command94().name("upgrade").description("Upgrade vm0 CL
18270
18821
  const success = await performUpgrade(packageManager);
18271
18822
  if (success) {
18272
18823
  console.log(
18273
- chalk86.green(`\u2713 Upgraded from ${"9.70.1"} to ${latestVersion}`)
18824
+ chalk86.green(`\u2713 Upgraded from ${"9.70.3"} to ${latestVersion}`)
18274
18825
  );
18275
18826
  return;
18276
18827
  }
@@ -18344,7 +18895,7 @@ var whoamiCommand = new Command95().name("whoami").description("Show current ide
18344
18895
 
18345
18896
  // src/index.ts
18346
18897
  var program = new Command96();
18347
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.70.1");
18898
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.70.3");
18348
18899
  program.addCommand(authCommand);
18349
18900
  program.addCommand(infoCommand);
18350
18901
  program.addCommand(composeCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vm0/cli",
3
- "version": "9.70.1",
3
+ "version": "9.70.3",
4
4
  "description": "CLI application",
5
5
  "repository": {
6
6
  "type": "git",