@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.
- package/index.js +583 -32
- 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.
|
|
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.
|
|
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.
|
|
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
|
|
9055
|
-
var cliAgentNameSchema =
|
|
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:
|
|
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 =
|
|
9080
|
-
version:
|
|
9081
|
-
agents:
|
|
9082
|
-
volumes:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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((
|
|
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((
|
|
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((
|
|
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((
|
|
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((
|
|
17878
|
-
title:
|
|
17879
|
-
value:
|
|
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((
|
|
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.
|
|
18241
|
-
console.log(chalk86.green(`\u2713 Already up to date (${"9.70.
|
|
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.
|
|
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.
|
|
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.
|
|
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);
|