@vm0/cli 9.56.10 → 9.57.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +385 -197
- 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.
|
|
48
|
+
release: "9.57.1",
|
|
49
49
|
sendDefaultPii: false,
|
|
50
50
|
tracesSampleRate: 0,
|
|
51
51
|
shutdownTimeout: 500,
|
|
@@ -64,7 +64,7 @@ if (DSN) {
|
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
66
|
Sentry.setContext("cli", {
|
|
67
|
-
version: "9.
|
|
67
|
+
version: "9.57.1",
|
|
68
68
|
command: process.argv.slice(2).join(" ")
|
|
69
69
|
});
|
|
70
70
|
Sentry.setContext("runtime", {
|
|
@@ -372,16 +372,16 @@ async function getClientConfig() {
|
|
|
372
372
|
const baseUrl = await getBaseUrl();
|
|
373
373
|
const baseHeaders = await getHeaders();
|
|
374
374
|
const config = await loadConfig();
|
|
375
|
-
const
|
|
376
|
-
if (
|
|
375
|
+
const activeOrg = config.activeOrg;
|
|
376
|
+
if (activeOrg) {
|
|
377
377
|
return {
|
|
378
378
|
baseUrl,
|
|
379
379
|
baseHeaders,
|
|
380
380
|
jsonQuery: false,
|
|
381
381
|
api: async (args) => {
|
|
382
382
|
const separator = args.path.includes("?") ? "&" : "?";
|
|
383
|
-
if (!args.path.includes("
|
|
384
|
-
args.path = `${args.path}${separator}
|
|
383
|
+
if (!args.path.includes("org=")) {
|
|
384
|
+
args.path = `${args.path}${separator}org=${encodeURIComponent(activeOrg)}`;
|
|
385
385
|
}
|
|
386
386
|
return tsRestFetchApi(args);
|
|
387
387
|
}
|
|
@@ -666,7 +666,7 @@ function getConfigPath() {
|
|
|
666
666
|
return join2(homedir2(), ".vm0", "config.json");
|
|
667
667
|
}
|
|
668
668
|
var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
|
|
669
|
-
console.log(chalk4.bold(`VM0 CLI v${"9.
|
|
669
|
+
console.log(chalk4.bold(`VM0 CLI v${"9.57.1"}`));
|
|
670
670
|
console.log();
|
|
671
671
|
const config = await loadConfig();
|
|
672
672
|
const hasEnvToken = !!process.env.VM0_TOKEN;
|
|
@@ -792,7 +792,7 @@ var experimentalFirewallSchema = z3.object({
|
|
|
792
792
|
});
|
|
793
793
|
var runnerGroupSchema = z3.string().regex(
|
|
794
794
|
/^[a-z0-9-]+\/[a-z0-9-]+$/,
|
|
795
|
-
"Runner group must be in
|
|
795
|
+
"Runner group must be in org/name format (e.g., acme/production)"
|
|
796
796
|
);
|
|
797
797
|
var jobSchema = z3.object({
|
|
798
798
|
runId: z3.string().uuid(),
|
|
@@ -832,9 +832,12 @@ var serviceApiEntrySchema = z3.object({
|
|
|
832
832
|
}),
|
|
833
833
|
permissions: z3.array(servicePermissionSchema).optional()
|
|
834
834
|
});
|
|
835
|
-
var
|
|
835
|
+
var serviceEntrySchema = z3.object({
|
|
836
|
+
name: z3.string(),
|
|
837
|
+
ref: z3.string(),
|
|
836
838
|
apis: z3.array(serviceApiEntrySchema)
|
|
837
839
|
});
|
|
840
|
+
var experimentalServicesSchema = z3.array(serviceEntrySchema);
|
|
838
841
|
var storageEntrySchema = z3.object({
|
|
839
842
|
mountPath: z3.string(),
|
|
840
843
|
archiveUrl: z3.string().nullable()
|
|
@@ -869,9 +872,9 @@ var storedExecutionContextSchema = z3.object({
|
|
|
869
872
|
apiStartTime: z3.number().optional(),
|
|
870
873
|
// User's timezone preference (IANA format, e.g., "Asia/Shanghai")
|
|
871
874
|
userTimezone: z3.string().optional(),
|
|
872
|
-
// Agent metadata for VM0_AGENT_NAME and
|
|
875
|
+
// Agent metadata for VM0_AGENT_NAME and VM0_AGENT_ORG env vars
|
|
873
876
|
agentName: z3.string().optional(),
|
|
874
|
-
|
|
877
|
+
agentOrgSlug: z3.string().optional(),
|
|
875
878
|
// Memory storage name (for first-run when manifest.memory is null)
|
|
876
879
|
memoryName: z3.string().optional(),
|
|
877
880
|
// Experimental services for proxy-side token replacement
|
|
@@ -903,7 +906,7 @@ var executionContextSchema = z3.object({
|
|
|
903
906
|
userTimezone: z3.string().optional(),
|
|
904
907
|
// Agent metadata
|
|
905
908
|
agentName: z3.string().optional(),
|
|
906
|
-
|
|
909
|
+
agentOrgSlug: z3.string().optional(),
|
|
907
910
|
// Memory storage name (for first-run when manifest.memory is null)
|
|
908
911
|
memoryName: z3.string().optional(),
|
|
909
912
|
// Experimental services for proxy-side token replacement
|
|
@@ -975,7 +978,7 @@ var agentDefinitionSchema = z4.object({
|
|
|
975
978
|
experimental_runner: z4.object({
|
|
976
979
|
group: z4.string().regex(
|
|
977
980
|
/^[a-z0-9-]+\/[a-z0-9-]+$/,
|
|
978
|
-
"Runner group must be in
|
|
981
|
+
"Runner group must be in org/name format (e.g., acme/production)"
|
|
979
982
|
)
|
|
980
983
|
}).optional(),
|
|
981
984
|
/**
|
|
@@ -986,9 +989,15 @@ var agentDefinitionSchema = z4.object({
|
|
|
986
989
|
experimental_firewall: experimentalFirewallSchema.optional(),
|
|
987
990
|
/**
|
|
988
991
|
* External services for proxy-side token replacement.
|
|
989
|
-
* CLI input:
|
|
992
|
+
* CLI input: map format { slack: { permissions: [...] | "all" } }
|
|
993
|
+
* — expanded by CLI to full ExpandedServiceConfig[] before API call.
|
|
990
994
|
*/
|
|
991
|
-
experimental_services: z4.
|
|
995
|
+
experimental_services: z4.record(
|
|
996
|
+
z4.string(),
|
|
997
|
+
z4.object({
|
|
998
|
+
permissions: z4.union([z4.literal("all"), z4.array(z4.string()).min(1)])
|
|
999
|
+
})
|
|
1000
|
+
).optional(),
|
|
992
1001
|
/**
|
|
993
1002
|
* Agent metadata for display and personalization.
|
|
994
1003
|
* - displayName: Human-readable name shown in the UI (preserves original casing).
|
|
@@ -996,6 +1005,7 @@ var agentDefinitionSchema = z4.object({
|
|
|
996
1005
|
*/
|
|
997
1006
|
metadata: z4.object({
|
|
998
1007
|
displayName: z4.string().optional(),
|
|
1008
|
+
description: z4.string().optional(),
|
|
999
1009
|
sound: z4.string().optional()
|
|
1000
1010
|
}).optional(),
|
|
1001
1011
|
/**
|
|
@@ -1016,12 +1026,15 @@ var agentComposeContentSchema = z4.object({
|
|
|
1016
1026
|
});
|
|
1017
1027
|
var expandedServiceConfigSchema = z4.object({
|
|
1018
1028
|
name: z4.string(),
|
|
1029
|
+
ref: z4.string(),
|
|
1030
|
+
description: z4.string().optional(),
|
|
1019
1031
|
apis: z4.array(
|
|
1020
1032
|
z4.object({
|
|
1021
1033
|
base: z4.string(),
|
|
1022
1034
|
auth: z4.object({
|
|
1023
1035
|
headers: z4.record(z4.string(), z4.string())
|
|
1024
|
-
})
|
|
1036
|
+
}),
|
|
1037
|
+
permissions: z4.array(servicePermissionSchema).optional()
|
|
1025
1038
|
})
|
|
1026
1039
|
),
|
|
1027
1040
|
placeholders: z4.record(z4.string(), z4.string()).optional()
|
|
@@ -1053,9 +1066,9 @@ var createComposeResponseSchema = z4.object({
|
|
|
1053
1066
|
});
|
|
1054
1067
|
var composesMainContract = c2.router({
|
|
1055
1068
|
/**
|
|
1056
|
-
* GET /api/agent/composes?name={name}&
|
|
1069
|
+
* GET /api/agent/composes?name={name}&org={org}
|
|
1057
1070
|
* Get agent compose by name with HEAD version content
|
|
1058
|
-
* If
|
|
1071
|
+
* If org is not provided, uses the authenticated user's default org
|
|
1059
1072
|
*/
|
|
1060
1073
|
getByName: {
|
|
1061
1074
|
method: "GET",
|
|
@@ -1063,7 +1076,6 @@ var composesMainContract = c2.router({
|
|
|
1063
1076
|
headers: authHeadersSchema,
|
|
1064
1077
|
query: z4.object({
|
|
1065
1078
|
name: z4.string().min(1, "Missing name query parameter"),
|
|
1066
|
-
scope: z4.string().optional(),
|
|
1067
1079
|
org: z4.string().optional()
|
|
1068
1080
|
}),
|
|
1069
1081
|
responses: {
|
|
@@ -1166,22 +1178,22 @@ var composeListItemSchema = z4.object({
|
|
|
1166
1178
|
id: z4.string(),
|
|
1167
1179
|
name: z4.string(),
|
|
1168
1180
|
displayName: z4.string().nullable().optional(),
|
|
1181
|
+
description: z4.string().nullable().optional(),
|
|
1169
1182
|
headVersionId: z4.string().nullable(),
|
|
1170
1183
|
updatedAt: z4.string(),
|
|
1171
1184
|
isOwner: z4.boolean()
|
|
1172
1185
|
});
|
|
1173
1186
|
var composesListContract = c2.router({
|
|
1174
1187
|
/**
|
|
1175
|
-
* GET /api/agent/composes/list?
|
|
1176
|
-
* List all agent composes for
|
|
1177
|
-
* If
|
|
1188
|
+
* GET /api/agent/composes/list?org={org}
|
|
1189
|
+
* List all agent composes for an org
|
|
1190
|
+
* If org is not provided, uses the authenticated user's default org
|
|
1178
1191
|
*/
|
|
1179
1192
|
list: {
|
|
1180
1193
|
method: "GET",
|
|
1181
1194
|
path: "/api/agent/composes/list",
|
|
1182
1195
|
headers: authHeadersSchema,
|
|
1183
1196
|
query: z4.object({
|
|
1184
|
-
scope: z4.string().optional(),
|
|
1185
1197
|
org: z4.string().optional()
|
|
1186
1198
|
}),
|
|
1187
1199
|
responses: {
|
|
@@ -1191,7 +1203,7 @@ var composesListContract = c2.router({
|
|
|
1191
1203
|
400: apiErrorSchema,
|
|
1192
1204
|
401: apiErrorSchema
|
|
1193
1205
|
},
|
|
1194
|
-
summary: "List all agent composes for
|
|
1206
|
+
summary: "List all agent composes for an org"
|
|
1195
1207
|
}
|
|
1196
1208
|
});
|
|
1197
1209
|
|
|
@@ -2269,51 +2281,51 @@ var cronCleanupSandboxesContract = c8.router({
|
|
|
2269
2281
|
}
|
|
2270
2282
|
});
|
|
2271
2283
|
|
|
2272
|
-
// ../../packages/core/src/contracts/
|
|
2284
|
+
// ../../packages/core/src/contracts/orgs.ts
|
|
2273
2285
|
import { z as z11 } from "zod";
|
|
2274
2286
|
var c9 = initContract();
|
|
2275
2287
|
var orgTierSchema = z11.enum(["free", "pro", "max"]);
|
|
2276
|
-
var
|
|
2288
|
+
var orgSlugSchema = z11.string().min(3, "Org slug must be at least 3 characters").max(64, "Org slug must be at most 64 characters").regex(
|
|
2277
2289
|
/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]{1,2}$/,
|
|
2278
|
-
"
|
|
2290
|
+
"Org slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character"
|
|
2279
2291
|
).transform((s) => s.toLowerCase());
|
|
2280
|
-
var
|
|
2292
|
+
var orgResponseSchema = z11.object({
|
|
2281
2293
|
id: z11.string(),
|
|
2282
2294
|
slug: z11.string(),
|
|
2283
2295
|
tier: z11.string().optional()
|
|
2284
2296
|
});
|
|
2285
|
-
var
|
|
2286
|
-
slug:
|
|
2297
|
+
var updateOrgRequestSchema = z11.object({
|
|
2298
|
+
slug: orgSlugSchema,
|
|
2287
2299
|
force: z11.boolean().optional().default(false)
|
|
2288
2300
|
});
|
|
2289
|
-
var
|
|
2301
|
+
var orgContract = c9.router({
|
|
2290
2302
|
/**
|
|
2291
|
-
* GET /api/
|
|
2292
|
-
* Get current user's default
|
|
2303
|
+
* GET /api/org
|
|
2304
|
+
* Get current user's default org
|
|
2293
2305
|
*/
|
|
2294
2306
|
get: {
|
|
2295
2307
|
method: "GET",
|
|
2296
|
-
path: "/api/
|
|
2308
|
+
path: "/api/org",
|
|
2297
2309
|
headers: authHeadersSchema,
|
|
2298
2310
|
responses: {
|
|
2299
|
-
200:
|
|
2311
|
+
200: orgResponseSchema,
|
|
2300
2312
|
401: apiErrorSchema,
|
|
2301
2313
|
404: apiErrorSchema,
|
|
2302
2314
|
500: apiErrorSchema
|
|
2303
2315
|
},
|
|
2304
|
-
summary: "Get current user's default
|
|
2316
|
+
summary: "Get current user's default org"
|
|
2305
2317
|
},
|
|
2306
2318
|
/**
|
|
2307
|
-
* PUT /api/
|
|
2308
|
-
* Update
|
|
2319
|
+
* PUT /api/org
|
|
2320
|
+
* Update org slug
|
|
2309
2321
|
*/
|
|
2310
2322
|
update: {
|
|
2311
2323
|
method: "PUT",
|
|
2312
|
-
path: "/api/
|
|
2324
|
+
path: "/api/org",
|
|
2313
2325
|
headers: authHeadersSchema,
|
|
2314
|
-
body:
|
|
2326
|
+
body: updateOrgRequestSchema,
|
|
2315
2327
|
responses: {
|
|
2316
|
-
200:
|
|
2328
|
+
200: orgResponseSchema,
|
|
2317
2329
|
400: apiErrorSchema,
|
|
2318
2330
|
401: apiErrorSchema,
|
|
2319
2331
|
403: apiErrorSchema,
|
|
@@ -2321,22 +2333,21 @@ var scopeContract = c9.router({
|
|
|
2321
2333
|
409: apiErrorSchema,
|
|
2322
2334
|
500: apiErrorSchema
|
|
2323
2335
|
},
|
|
2324
|
-
summary: "Update
|
|
2336
|
+
summary: "Update org slug"
|
|
2325
2337
|
}
|
|
2326
2338
|
});
|
|
2327
|
-
var
|
|
2339
|
+
var orgDefaultAgentContract = c9.router({
|
|
2328
2340
|
/**
|
|
2329
|
-
* PUT /api/
|
|
2330
|
-
* Set or unset the default agent for
|
|
2331
|
-
* Only
|
|
2332
|
-
* The agent must belong to the same
|
|
2341
|
+
* PUT /api/orgs/default-agent?org={slug}
|
|
2342
|
+
* Set or unset the default agent for an org.
|
|
2343
|
+
* Only org admins can perform this action.
|
|
2344
|
+
* The agent must belong to the same org.
|
|
2333
2345
|
*/
|
|
2334
2346
|
setDefaultAgent: {
|
|
2335
2347
|
method: "PUT",
|
|
2336
|
-
path: "/api/
|
|
2348
|
+
path: "/api/orgs/default-agent",
|
|
2337
2349
|
headers: authHeadersSchema,
|
|
2338
2350
|
query: z11.object({
|
|
2339
|
-
scope: z11.string().optional(),
|
|
2340
2351
|
org: z11.string().optional()
|
|
2341
2352
|
}),
|
|
2342
2353
|
body: z11.object({
|
|
@@ -2351,7 +2362,7 @@ var scopeDefaultAgentContract = c9.router({
|
|
|
2351
2362
|
403: apiErrorSchema,
|
|
2352
2363
|
404: apiErrorSchema
|
|
2353
2364
|
},
|
|
2354
|
-
summary: "Set or unset the default agent for
|
|
2365
|
+
summary: "Set or unset the default agent for an org"
|
|
2355
2366
|
}
|
|
2356
2367
|
});
|
|
2357
2368
|
|
|
@@ -2382,7 +2393,7 @@ var setSecretRequestSchema = z12.object({
|
|
|
2382
2393
|
var secretsMainContract = c10.router({
|
|
2383
2394
|
/**
|
|
2384
2395
|
* GET /api/secrets
|
|
2385
|
-
* List all secrets for the current user's
|
|
2396
|
+
* List all secrets for the current user's org (metadata only)
|
|
2386
2397
|
*/
|
|
2387
2398
|
list: {
|
|
2388
2399
|
method: "GET",
|
|
@@ -2481,7 +2492,7 @@ var setVariableRequestSchema = z13.object({
|
|
|
2481
2492
|
var variablesMainContract = c11.router({
|
|
2482
2493
|
/**
|
|
2483
2494
|
* GET /api/variables
|
|
2484
|
-
* List all variables for the current user's
|
|
2495
|
+
* List all variables for the current user's org (includes values)
|
|
2485
2496
|
*/
|
|
2486
2497
|
list: {
|
|
2487
2498
|
method: "GET",
|
|
@@ -3169,7 +3180,7 @@ var deployScheduleRequestSchema = z16.object({
|
|
|
3169
3180
|
artifactName: z16.string().optional(),
|
|
3170
3181
|
artifactVersion: z16.string().optional(),
|
|
3171
3182
|
volumeVersions: z16.record(z16.string(), z16.string()).optional(),
|
|
3172
|
-
// Resolved agent compose ID (CLI resolves
|
|
3183
|
+
// Resolved agent compose ID (CLI resolves org/name:version → composeId)
|
|
3173
3184
|
composeId: z16.string().uuid("Invalid compose ID"),
|
|
3174
3185
|
// Enable schedule immediately upon creation
|
|
3175
3186
|
enabled: z16.boolean().optional()
|
|
@@ -3190,7 +3201,7 @@ var scheduleResponseSchema = z16.object({
|
|
|
3190
3201
|
id: z16.string().uuid(),
|
|
3191
3202
|
composeId: z16.string().uuid(),
|
|
3192
3203
|
composeName: z16.string(),
|
|
3193
|
-
|
|
3204
|
+
orgSlug: z16.string(),
|
|
3194
3205
|
userId: z16.string(),
|
|
3195
3206
|
name: z16.string(),
|
|
3196
3207
|
triggerType: z16.enum(["cron", "once", "loop"]),
|
|
@@ -3450,7 +3461,7 @@ var platformLogEntrySchema = z18.object({
|
|
|
3450
3461
|
id: z18.string().uuid(),
|
|
3451
3462
|
sessionId: z18.string().nullable(),
|
|
3452
3463
|
agentName: z18.string(),
|
|
3453
|
-
|
|
3464
|
+
orgSlug: z18.string().nullable(),
|
|
3454
3465
|
framework: z18.string().nullable(),
|
|
3455
3466
|
status: platformLogStatusSchema,
|
|
3456
3467
|
createdAt: z18.string(),
|
|
@@ -3486,7 +3497,7 @@ var platformLogsListContract = c16.router({
|
|
|
3486
3497
|
search: z18.string().optional(),
|
|
3487
3498
|
agent: z18.string().optional(),
|
|
3488
3499
|
name: z18.string().optional(),
|
|
3489
|
-
|
|
3500
|
+
org: z18.string().optional(),
|
|
3490
3501
|
status: platformLogStatusSchema.optional()
|
|
3491
3502
|
}),
|
|
3492
3503
|
responses: {
|
|
@@ -3500,6 +3511,7 @@ var platformLogsByIdContract = c16.router({
|
|
|
3500
3511
|
getById: {
|
|
3501
3512
|
method: "GET",
|
|
3502
3513
|
path: "/api/platform/logs/:id",
|
|
3514
|
+
headers: authHeadersSchema,
|
|
3503
3515
|
pathParams: z18.object({
|
|
3504
3516
|
id: z18.string().uuid("Invalid log ID")
|
|
3505
3517
|
}),
|
|
@@ -4650,7 +4662,6 @@ var CONNECTOR_TYPES_DEF = {
|
|
|
4650
4662
|
},
|
|
4651
4663
|
strava: {
|
|
4652
4664
|
label: "Strava",
|
|
4653
|
-
featureFlag: "stravaConnector" /* StravaConnector */,
|
|
4654
4665
|
helpText: "Connect your Strava account to access activities and athlete data",
|
|
4655
4666
|
authMethods: {
|
|
4656
4667
|
oauth: {
|
|
@@ -6447,7 +6458,120 @@ var SERVICE_CONFIGS = {
|
|
|
6447
6458
|
apis: [api("https://api.airtable.com", bearerAuth("AIRTABLE_TOKEN"))]
|
|
6448
6459
|
},
|
|
6449
6460
|
github: {
|
|
6450
|
-
apis: [
|
|
6461
|
+
apis: [
|
|
6462
|
+
{
|
|
6463
|
+
base: "https://api.github.com",
|
|
6464
|
+
auth: bearerAuth("GITHUB_TOKEN"),
|
|
6465
|
+
permissions: [
|
|
6466
|
+
{
|
|
6467
|
+
name: "repo-read",
|
|
6468
|
+
description: "Read repository metadata, branches, and commits",
|
|
6469
|
+
rules: [
|
|
6470
|
+
"GET /repos/{owner}/{repo}",
|
|
6471
|
+
"GET /repos/{owner}/{repo}/branches",
|
|
6472
|
+
"GET /repos/{owner}/{repo}/branches/{branch}",
|
|
6473
|
+
"GET /repos/{owner}/{repo}/commits",
|
|
6474
|
+
"GET /repos/{owner}/{repo}/commits/{ref}",
|
|
6475
|
+
"GET /repos/{owner}/{repo}/contributors",
|
|
6476
|
+
"GET /repos/{owner}/{repo}/tags",
|
|
6477
|
+
"GET /repos/{owner}/{repo}/releases",
|
|
6478
|
+
"GET /repos/{owner}/{repo}/releases/{release_id}"
|
|
6479
|
+
]
|
|
6480
|
+
},
|
|
6481
|
+
{
|
|
6482
|
+
name: "contents-read",
|
|
6483
|
+
description: "Read file contents and directory listings",
|
|
6484
|
+
rules: [
|
|
6485
|
+
"GET /repos/{owner}/{repo}/contents/{path+}",
|
|
6486
|
+
"GET /repos/{owner}/{repo}/readme",
|
|
6487
|
+
"GET /repos/{owner}/{repo}/git/trees/{sha}",
|
|
6488
|
+
"GET /repos/{owner}/{repo}/git/blobs/{sha}",
|
|
6489
|
+
"GET /repos/{owner}/{repo}/git/refs/{ref+}"
|
|
6490
|
+
]
|
|
6491
|
+
},
|
|
6492
|
+
{
|
|
6493
|
+
name: "contents-write",
|
|
6494
|
+
description: "Create, update, and delete file contents",
|
|
6495
|
+
rules: [
|
|
6496
|
+
"PUT /repos/{owner}/{repo}/contents/{path+}",
|
|
6497
|
+
"DELETE /repos/{owner}/{repo}/contents/{path+}",
|
|
6498
|
+
"POST /repos/{owner}/{repo}/git/blobs",
|
|
6499
|
+
"POST /repos/{owner}/{repo}/git/trees",
|
|
6500
|
+
"POST /repos/{owner}/{repo}/git/commits",
|
|
6501
|
+
"POST /repos/{owner}/{repo}/git/refs",
|
|
6502
|
+
"PATCH /repos/{owner}/{repo}/git/refs/{ref+}"
|
|
6503
|
+
]
|
|
6504
|
+
},
|
|
6505
|
+
{
|
|
6506
|
+
name: "issues-read",
|
|
6507
|
+
description: "Read issues and comments",
|
|
6508
|
+
rules: [
|
|
6509
|
+
"GET /repos/{owner}/{repo}/issues",
|
|
6510
|
+
"GET /repos/{owner}/{repo}/issues/{issue_number}",
|
|
6511
|
+
"GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
|
|
6512
|
+
"GET /repos/{owner}/{repo}/issues/{issue_number}/labels",
|
|
6513
|
+
"GET /repos/{owner}/{repo}/labels"
|
|
6514
|
+
]
|
|
6515
|
+
},
|
|
6516
|
+
{
|
|
6517
|
+
name: "issues-write",
|
|
6518
|
+
description: "Create and update issues, comments, and labels",
|
|
6519
|
+
rules: [
|
|
6520
|
+
"POST /repos/{owner}/{repo}/issues",
|
|
6521
|
+
"PATCH /repos/{owner}/{repo}/issues/{issue_number}",
|
|
6522
|
+
"POST /repos/{owner}/{repo}/issues/{issue_number}/comments",
|
|
6523
|
+
"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}",
|
|
6524
|
+
"POST /repos/{owner}/{repo}/issues/{issue_number}/labels",
|
|
6525
|
+
"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"
|
|
6526
|
+
]
|
|
6527
|
+
},
|
|
6528
|
+
{
|
|
6529
|
+
name: "pull-requests-read",
|
|
6530
|
+
description: "Read pull requests, reviews, and diffs",
|
|
6531
|
+
rules: [
|
|
6532
|
+
"GET /repos/{owner}/{repo}/pulls",
|
|
6533
|
+
"GET /repos/{owner}/{repo}/pulls/{pull_number}",
|
|
6534
|
+
"GET /repos/{owner}/{repo}/pulls/{pull_number}/files",
|
|
6535
|
+
"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits",
|
|
6536
|
+
"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews",
|
|
6537
|
+
"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"
|
|
6538
|
+
]
|
|
6539
|
+
},
|
|
6540
|
+
{
|
|
6541
|
+
name: "pull-requests-write",
|
|
6542
|
+
description: "Create, update, and merge pull requests",
|
|
6543
|
+
rules: [
|
|
6544
|
+
"POST /repos/{owner}/{repo}/pulls",
|
|
6545
|
+
"PATCH /repos/{owner}/{repo}/pulls/{pull_number}",
|
|
6546
|
+
"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews",
|
|
6547
|
+
"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments",
|
|
6548
|
+
"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"
|
|
6549
|
+
]
|
|
6550
|
+
},
|
|
6551
|
+
{
|
|
6552
|
+
name: "actions-read",
|
|
6553
|
+
description: "Read workflow runs and logs",
|
|
6554
|
+
rules: [
|
|
6555
|
+
"GET /repos/{owner}/{repo}/actions/runs",
|
|
6556
|
+
"GET /repos/{owner}/{repo}/actions/runs/{run_id}",
|
|
6557
|
+
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs",
|
|
6558
|
+
"GET /repos/{owner}/{repo}/actions/workflows",
|
|
6559
|
+
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
|
|
6560
|
+
]
|
|
6561
|
+
},
|
|
6562
|
+
{
|
|
6563
|
+
name: "search",
|
|
6564
|
+
description: "Search code, issues, and repositories",
|
|
6565
|
+
rules: [
|
|
6566
|
+
"GET /search/code",
|
|
6567
|
+
"GET /search/issues",
|
|
6568
|
+
"GET /search/repositories",
|
|
6569
|
+
"GET /search/commits"
|
|
6570
|
+
]
|
|
6571
|
+
}
|
|
6572
|
+
]
|
|
6573
|
+
}
|
|
6574
|
+
],
|
|
6451
6575
|
placeholders: {
|
|
6452
6576
|
GITHUB_TOKEN: "gho_vm0placeholder0000000000000000000000"
|
|
6453
6577
|
}
|
|
@@ -6880,7 +7004,9 @@ var SERVICE_CONFIGS = {
|
|
|
6880
7004
|
}
|
|
6881
7005
|
};
|
|
6882
7006
|
function getServiceConfig(type2) {
|
|
6883
|
-
|
|
7007
|
+
const config = SERVICE_CONFIGS[type2];
|
|
7008
|
+
if (!config) return void 0;
|
|
7009
|
+
return { ...config, name: type2 };
|
|
6884
7010
|
}
|
|
6885
7011
|
|
|
6886
7012
|
// ../../packages/core/src/contracts/user-preferences.ts
|
|
@@ -6889,14 +7015,16 @@ var c19 = initContract();
|
|
|
6889
7015
|
var userPreferencesResponseSchema = z21.object({
|
|
6890
7016
|
timezone: z21.string().nullable(),
|
|
6891
7017
|
notifyEmail: z21.boolean(),
|
|
6892
|
-
notifySlack: z21.boolean()
|
|
7018
|
+
notifySlack: z21.boolean(),
|
|
7019
|
+
pinnedAgentIds: z21.array(z21.string())
|
|
6893
7020
|
});
|
|
6894
7021
|
var updateUserPreferencesRequestSchema = z21.object({
|
|
6895
7022
|
timezone: z21.string().min(1).optional(),
|
|
6896
7023
|
notifyEmail: z21.boolean().optional(),
|
|
6897
|
-
notifySlack: z21.boolean().optional()
|
|
7024
|
+
notifySlack: z21.boolean().optional(),
|
|
7025
|
+
pinnedAgentIds: z21.array(z21.string()).max(4).optional()
|
|
6898
7026
|
}).refine(
|
|
6899
|
-
(data) => data.timezone !== void 0 || data.notifyEmail !== void 0 || data.notifySlack !== void 0,
|
|
7027
|
+
(data) => data.timezone !== void 0 || data.notifyEmail !== void 0 || data.notifySlack !== void 0 || data.pinnedAgentIds !== void 0,
|
|
6900
7028
|
{
|
|
6901
7029
|
message: "At least one preference must be provided"
|
|
6902
7030
|
}
|
|
@@ -6936,131 +7064,131 @@ var userPreferencesContract = c19.router({
|
|
|
6936
7064
|
}
|
|
6937
7065
|
});
|
|
6938
7066
|
|
|
6939
|
-
// ../../packages/core/src/contracts/
|
|
7067
|
+
// ../../packages/core/src/contracts/org-list.ts
|
|
6940
7068
|
import { z as z22 } from "zod";
|
|
6941
7069
|
var c20 = initContract();
|
|
6942
|
-
var
|
|
7070
|
+
var orgListItemSchema = z22.object({
|
|
6943
7071
|
slug: z22.string(),
|
|
6944
7072
|
role: z22.string()
|
|
6945
7073
|
});
|
|
6946
|
-
var
|
|
6947
|
-
|
|
7074
|
+
var orgListResponseSchema = z22.object({
|
|
7075
|
+
orgs: z22.array(orgListItemSchema),
|
|
6948
7076
|
active: z22.string().optional()
|
|
6949
7077
|
});
|
|
6950
|
-
var
|
|
7078
|
+
var orgListContract = c20.router({
|
|
6951
7079
|
/**
|
|
6952
|
-
* GET /api/
|
|
6953
|
-
* List all
|
|
7080
|
+
* GET /api/org/list
|
|
7081
|
+
* List all orgs accessible to the user
|
|
6954
7082
|
*/
|
|
6955
7083
|
list: {
|
|
6956
7084
|
method: "GET",
|
|
6957
|
-
path: "/api/
|
|
7085
|
+
path: "/api/org/list",
|
|
6958
7086
|
headers: authHeadersSchema,
|
|
6959
7087
|
responses: {
|
|
6960
|
-
200:
|
|
7088
|
+
200: orgListResponseSchema,
|
|
6961
7089
|
401: apiErrorSchema,
|
|
6962
7090
|
500: apiErrorSchema
|
|
6963
7091
|
},
|
|
6964
|
-
summary: "List all accessible
|
|
7092
|
+
summary: "List all accessible orgs"
|
|
6965
7093
|
}
|
|
6966
7094
|
});
|
|
6967
7095
|
|
|
6968
|
-
// ../../packages/core/src/contracts/
|
|
7096
|
+
// ../../packages/core/src/contracts/org-members.ts
|
|
6969
7097
|
import { z as z23 } from "zod";
|
|
6970
7098
|
var c21 = initContract();
|
|
6971
7099
|
var orgRoleSchema = z23.enum(["admin", "member"]);
|
|
6972
|
-
var
|
|
7100
|
+
var orgMemberSchema = z23.object({
|
|
6973
7101
|
userId: z23.string(),
|
|
6974
7102
|
email: z23.string(),
|
|
6975
7103
|
role: orgRoleSchema,
|
|
6976
7104
|
joinedAt: z23.string()
|
|
6977
7105
|
});
|
|
6978
|
-
var
|
|
7106
|
+
var orgMembersResponseSchema = z23.object({
|
|
6979
7107
|
slug: z23.string(),
|
|
6980
7108
|
role: orgRoleSchema,
|
|
6981
|
-
members: z23.array(
|
|
7109
|
+
members: z23.array(orgMemberSchema),
|
|
6982
7110
|
createdAt: z23.string()
|
|
6983
7111
|
});
|
|
6984
|
-
var
|
|
7112
|
+
var inviteOrgMemberRequestSchema = z23.object({
|
|
6985
7113
|
email: z23.string().email()
|
|
6986
7114
|
});
|
|
6987
|
-
var
|
|
7115
|
+
var removeOrgMemberRequestSchema = z23.object({
|
|
6988
7116
|
email: z23.string().email()
|
|
6989
7117
|
});
|
|
6990
|
-
var
|
|
7118
|
+
var orgMessageResponseSchema = z23.object({
|
|
6991
7119
|
message: z23.string()
|
|
6992
7120
|
});
|
|
6993
|
-
var
|
|
7121
|
+
var orgMembersContract = c21.router({
|
|
6994
7122
|
/**
|
|
6995
|
-
* GET /api/
|
|
6996
|
-
* Get
|
|
7123
|
+
* GET /api/org/members
|
|
7124
|
+
* Get org members and status
|
|
6997
7125
|
*/
|
|
6998
7126
|
members: {
|
|
6999
7127
|
method: "GET",
|
|
7000
|
-
path: "/api/
|
|
7128
|
+
path: "/api/org/members",
|
|
7001
7129
|
headers: authHeadersSchema,
|
|
7002
7130
|
responses: {
|
|
7003
|
-
200:
|
|
7131
|
+
200: orgMembersResponseSchema,
|
|
7004
7132
|
400: apiErrorSchema,
|
|
7005
7133
|
401: apiErrorSchema,
|
|
7006
7134
|
403: apiErrorSchema,
|
|
7007
7135
|
404: apiErrorSchema,
|
|
7008
7136
|
500: apiErrorSchema
|
|
7009
7137
|
},
|
|
7010
|
-
summary: "Get
|
|
7138
|
+
summary: "Get org members and status"
|
|
7011
7139
|
},
|
|
7012
7140
|
/**
|
|
7013
|
-
* POST /api/
|
|
7014
|
-
* Invite a member to the
|
|
7141
|
+
* POST /api/org/invite
|
|
7142
|
+
* Invite a member to the org
|
|
7015
7143
|
*/
|
|
7016
7144
|
invite: {
|
|
7017
7145
|
method: "POST",
|
|
7018
|
-
path: "/api/
|
|
7146
|
+
path: "/api/org/invite",
|
|
7019
7147
|
headers: authHeadersSchema,
|
|
7020
|
-
body:
|
|
7148
|
+
body: inviteOrgMemberRequestSchema,
|
|
7021
7149
|
responses: {
|
|
7022
|
-
200:
|
|
7150
|
+
200: orgMessageResponseSchema,
|
|
7023
7151
|
400: apiErrorSchema,
|
|
7024
7152
|
401: apiErrorSchema,
|
|
7025
7153
|
403: apiErrorSchema,
|
|
7026
7154
|
500: apiErrorSchema
|
|
7027
7155
|
},
|
|
7028
|
-
summary: "Invite a member to the
|
|
7156
|
+
summary: "Invite a member to the org"
|
|
7029
7157
|
},
|
|
7030
7158
|
/**
|
|
7031
|
-
* POST /api/
|
|
7032
|
-
* Leave the current
|
|
7159
|
+
* POST /api/org/leave
|
|
7160
|
+
* Leave the current org
|
|
7033
7161
|
*/
|
|
7034
7162
|
leave: {
|
|
7035
7163
|
method: "POST",
|
|
7036
|
-
path: "/api/
|
|
7164
|
+
path: "/api/org/leave",
|
|
7037
7165
|
headers: authHeadersSchema,
|
|
7038
7166
|
body: z23.object({}),
|
|
7039
7167
|
responses: {
|
|
7040
|
-
200:
|
|
7168
|
+
200: orgMessageResponseSchema,
|
|
7041
7169
|
401: apiErrorSchema,
|
|
7042
7170
|
403: apiErrorSchema,
|
|
7043
7171
|
500: apiErrorSchema
|
|
7044
7172
|
},
|
|
7045
|
-
summary: "Leave the current
|
|
7173
|
+
summary: "Leave the current org"
|
|
7046
7174
|
},
|
|
7047
7175
|
/**
|
|
7048
|
-
* DELETE /api/
|
|
7049
|
-
* Remove a member from the
|
|
7176
|
+
* DELETE /api/org/members
|
|
7177
|
+
* Remove a member from the org
|
|
7050
7178
|
*/
|
|
7051
7179
|
removeMember: {
|
|
7052
7180
|
method: "DELETE",
|
|
7053
|
-
path: "/api/
|
|
7181
|
+
path: "/api/org/members",
|
|
7054
7182
|
headers: authHeadersSchema,
|
|
7055
|
-
body:
|
|
7183
|
+
body: removeOrgMemberRequestSchema,
|
|
7056
7184
|
responses: {
|
|
7057
|
-
200:
|
|
7185
|
+
200: orgMessageResponseSchema,
|
|
7058
7186
|
400: apiErrorSchema,
|
|
7059
7187
|
401: apiErrorSchema,
|
|
7060
7188
|
403: apiErrorSchema,
|
|
7061
7189
|
500: apiErrorSchema
|
|
7062
7190
|
},
|
|
7063
|
-
summary: "Remove a member from the
|
|
7191
|
+
summary: "Remove a member from the org"
|
|
7064
7192
|
}
|
|
7065
7193
|
});
|
|
7066
7194
|
|
|
@@ -7069,13 +7197,14 @@ import { z as z24 } from "zod";
|
|
|
7069
7197
|
var c22 = initContract();
|
|
7070
7198
|
var onboardingStatusResponseSchema = z24.object({
|
|
7071
7199
|
needsOnboarding: z24.boolean(),
|
|
7072
|
-
|
|
7200
|
+
hasOrg: z24.boolean(),
|
|
7073
7201
|
hasModelProvider: z24.boolean(),
|
|
7074
7202
|
hasDefaultAgent: z24.boolean(),
|
|
7075
7203
|
defaultAgentName: z24.string().nullable(),
|
|
7076
7204
|
defaultAgentComposeId: z24.string().nullable(),
|
|
7077
7205
|
defaultAgentMetadata: z24.object({
|
|
7078
7206
|
displayName: z24.string().optional(),
|
|
7207
|
+
description: z24.string().optional(),
|
|
7079
7208
|
sound: z24.string().optional()
|
|
7080
7209
|
}).nullable()
|
|
7081
7210
|
});
|
|
@@ -7356,11 +7485,6 @@ var FEATURE_SWITCHES = {
|
|
|
7356
7485
|
enabled: false,
|
|
7357
7486
|
enabledUserHashes: STAFF_USER_HASHES
|
|
7358
7487
|
},
|
|
7359
|
-
["stravaConnector" /* StravaConnector */]: {
|
|
7360
|
-
maintainer: "ethan@vm0.ai",
|
|
7361
|
-
enabled: false,
|
|
7362
|
-
enabledUserHashes: STAFF_USER_HASHES
|
|
7363
|
-
},
|
|
7364
7488
|
["neonConnector" /* NeonConnector */]: {
|
|
7365
7489
|
maintainer: "ethan@vm0.ai",
|
|
7366
7490
|
enabled: false,
|
|
@@ -7485,7 +7609,32 @@ function parseSkillFrontmatter(content) {
|
|
|
7485
7609
|
// ../../packages/core/src/instructions-frontmatter.ts
|
|
7486
7610
|
var PROFILE_START = "<!-- ZERO_PROFILE";
|
|
7487
7611
|
var PROFILE_END = "ZERO_PROFILE -->";
|
|
7488
|
-
|
|
7612
|
+
function stripProfileBlocks(content) {
|
|
7613
|
+
let result = "";
|
|
7614
|
+
let searchFrom = 0;
|
|
7615
|
+
while (searchFrom < content.length) {
|
|
7616
|
+
const startIdx = content.indexOf(PROFILE_START + "\n", searchFrom);
|
|
7617
|
+
if (startIdx === -1) {
|
|
7618
|
+
result += content.slice(searchFrom);
|
|
7619
|
+
break;
|
|
7620
|
+
}
|
|
7621
|
+
result += content.slice(searchFrom, startIdx);
|
|
7622
|
+
const endIdx = content.indexOf(
|
|
7623
|
+
PROFILE_END,
|
|
7624
|
+
startIdx + PROFILE_START.length + 1
|
|
7625
|
+
);
|
|
7626
|
+
if (endIdx === -1) {
|
|
7627
|
+
result += content.slice(startIdx);
|
|
7628
|
+
break;
|
|
7629
|
+
}
|
|
7630
|
+
let afterEnd = endIdx + PROFILE_END.length;
|
|
7631
|
+
if (content[afterEnd] === "\n") {
|
|
7632
|
+
afterEnd++;
|
|
7633
|
+
}
|
|
7634
|
+
searchFrom = afterEnd;
|
|
7635
|
+
}
|
|
7636
|
+
return result;
|
|
7637
|
+
}
|
|
7489
7638
|
var LEGACY_METADATA_KEYS = /* @__PURE__ */ new Set(["name", "tone"]);
|
|
7490
7639
|
function stripLegacyFrontmatter(content) {
|
|
7491
7640
|
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---(\r?\n|$)/);
|
|
@@ -7516,6 +7665,9 @@ function buildProfileParagraph(metadata) {
|
|
|
7516
7665
|
if (metadata.displayName) {
|
|
7517
7666
|
parts.push(`Your name is ${metadata.displayName}.`);
|
|
7518
7667
|
}
|
|
7668
|
+
if (metadata.description) {
|
|
7669
|
+
parts.push(metadata.description);
|
|
7670
|
+
}
|
|
7519
7671
|
if (metadata.sound) {
|
|
7520
7672
|
const desc = TONE_DESCRIPTIONS[metadata.sound] ?? metadata.sound;
|
|
7521
7673
|
parts.push(
|
|
@@ -7538,7 +7690,9 @@ function injectMetadataFrontmatter(content, metadata) {
|
|
|
7538
7690
|
const block = `${PROFILE_START}
|
|
7539
7691
|
${paragraph}
|
|
7540
7692
|
${PROFILE_END}`;
|
|
7541
|
-
const stripped =
|
|
7693
|
+
const stripped = stripProfileBlocks(
|
|
7694
|
+
stripLegacyFrontmatter(content)
|
|
7695
|
+
).trimEnd();
|
|
7542
7696
|
if (!stripped) {
|
|
7543
7697
|
return `${block}
|
|
7544
7698
|
`;
|
|
@@ -7550,21 +7704,21 @@ ${block}
|
|
|
7550
7704
|
}
|
|
7551
7705
|
|
|
7552
7706
|
// src/lib/api/core/http.ts
|
|
7553
|
-
async function
|
|
7707
|
+
async function appendOrgParam(path18) {
|
|
7554
7708
|
const config = await loadConfig();
|
|
7555
|
-
const
|
|
7556
|
-
if (!
|
|
7709
|
+
const activeOrg = config.activeOrg;
|
|
7710
|
+
if (!activeOrg) {
|
|
7557
7711
|
return path18;
|
|
7558
7712
|
}
|
|
7559
7713
|
const queryStart = path18.indexOf("?");
|
|
7560
7714
|
if (queryStart !== -1) {
|
|
7561
7715
|
const params = new URLSearchParams(path18.slice(queryStart));
|
|
7562
|
-
if (params.has("
|
|
7716
|
+
if (params.has("org")) {
|
|
7563
7717
|
return path18;
|
|
7564
7718
|
}
|
|
7565
|
-
return `${path18}&
|
|
7719
|
+
return `${path18}&org=${encodeURIComponent(activeOrg)}`;
|
|
7566
7720
|
}
|
|
7567
|
-
return `${path18}?
|
|
7721
|
+
return `${path18}?org=${encodeURIComponent(activeOrg)}`;
|
|
7568
7722
|
}
|
|
7569
7723
|
async function getRawHeaders() {
|
|
7570
7724
|
const token = await getActiveToken();
|
|
@@ -7583,8 +7737,8 @@ async function getRawHeaders() {
|
|
|
7583
7737
|
async function httpGet(path18) {
|
|
7584
7738
|
const baseUrl = await getBaseUrl();
|
|
7585
7739
|
const headers = await getRawHeaders();
|
|
7586
|
-
const
|
|
7587
|
-
return fetch(`${baseUrl}${
|
|
7740
|
+
const orgPath = await appendOrgParam(path18);
|
|
7741
|
+
return fetch(`${baseUrl}${orgPath}`, {
|
|
7588
7742
|
method: "GET",
|
|
7589
7743
|
headers
|
|
7590
7744
|
});
|
|
@@ -7592,8 +7746,8 @@ async function httpGet(path18) {
|
|
|
7592
7746
|
async function httpPost(path18, body) {
|
|
7593
7747
|
const baseUrl = await getBaseUrl();
|
|
7594
7748
|
const headers = await getRawHeaders();
|
|
7595
|
-
const
|
|
7596
|
-
return fetch(`${baseUrl}${
|
|
7749
|
+
const orgPath = await appendOrgParam(path18);
|
|
7750
|
+
return fetch(`${baseUrl}${orgPath}`, {
|
|
7597
7751
|
method: "POST",
|
|
7598
7752
|
headers: {
|
|
7599
7753
|
...headers,
|
|
@@ -7605,8 +7759,8 @@ async function httpPost(path18, body) {
|
|
|
7605
7759
|
async function httpDelete(path18) {
|
|
7606
7760
|
const baseUrl = await getBaseUrl();
|
|
7607
7761
|
const headers = await getRawHeaders();
|
|
7608
|
-
const
|
|
7609
|
-
return fetch(`${baseUrl}${
|
|
7762
|
+
const orgPath = await appendOrgParam(path18);
|
|
7763
|
+
return fetch(`${baseUrl}${orgPath}`, {
|
|
7610
7764
|
method: "DELETE",
|
|
7611
7765
|
headers
|
|
7612
7766
|
});
|
|
@@ -7614,11 +7768,11 @@ async function httpDelete(path18) {
|
|
|
7614
7768
|
|
|
7615
7769
|
// src/lib/api/domains/composes.ts
|
|
7616
7770
|
import { initClient } from "@ts-rest/core";
|
|
7617
|
-
async function getComposeByName(name,
|
|
7771
|
+
async function getComposeByName(name, org) {
|
|
7618
7772
|
const config = await getClientConfig();
|
|
7619
7773
|
const client = initClient(composesMainContract, config);
|
|
7620
7774
|
const result = await client.getByName({
|
|
7621
|
-
query: { name,
|
|
7775
|
+
query: { name, org }
|
|
7622
7776
|
});
|
|
7623
7777
|
if (result.status === 200) {
|
|
7624
7778
|
return result.body;
|
|
@@ -7774,7 +7928,7 @@ async function getUserTokenClientConfig() {
|
|
|
7774
7928
|
}
|
|
7775
7929
|
async function getOrg() {
|
|
7776
7930
|
const config = await getClientConfig();
|
|
7777
|
-
const client = initClient4(
|
|
7931
|
+
const client = initClient4(orgContract, config);
|
|
7778
7932
|
const result = await client.get({ headers: {} });
|
|
7779
7933
|
if (result.status === 200) {
|
|
7780
7934
|
return result.body;
|
|
@@ -7783,7 +7937,7 @@ async function getOrg() {
|
|
|
7783
7937
|
}
|
|
7784
7938
|
async function updateOrg(body) {
|
|
7785
7939
|
const config = await getClientConfig();
|
|
7786
|
-
const client = initClient4(
|
|
7940
|
+
const client = initClient4(orgContract, config);
|
|
7787
7941
|
const result = await client.update({ body });
|
|
7788
7942
|
if (result.status === 200) {
|
|
7789
7943
|
return result.body;
|
|
@@ -7792,7 +7946,7 @@ async function updateOrg(body) {
|
|
|
7792
7946
|
}
|
|
7793
7947
|
async function getOrgMembers() {
|
|
7794
7948
|
const config = await getClientConfig();
|
|
7795
|
-
const client = initClient4(
|
|
7949
|
+
const client = initClient4(orgMembersContract, config);
|
|
7796
7950
|
const result = await client.members({ headers: {} });
|
|
7797
7951
|
if (result.status === 200) {
|
|
7798
7952
|
return result.body;
|
|
@@ -7801,7 +7955,7 @@ async function getOrgMembers() {
|
|
|
7801
7955
|
}
|
|
7802
7956
|
async function inviteOrgMember(email) {
|
|
7803
7957
|
const config = await getClientConfig();
|
|
7804
|
-
const client = initClient4(
|
|
7958
|
+
const client = initClient4(orgMembersContract, config);
|
|
7805
7959
|
const result = await client.invite({
|
|
7806
7960
|
body: { email }
|
|
7807
7961
|
});
|
|
@@ -7812,7 +7966,7 @@ async function inviteOrgMember(email) {
|
|
|
7812
7966
|
}
|
|
7813
7967
|
async function removeOrgMember(email) {
|
|
7814
7968
|
const config = await getClientConfig();
|
|
7815
|
-
const client = initClient4(
|
|
7969
|
+
const client = initClient4(orgMembersContract, config);
|
|
7816
7970
|
const result = await client.removeMember({
|
|
7817
7971
|
body: { email }
|
|
7818
7972
|
});
|
|
@@ -7823,7 +7977,7 @@ async function removeOrgMember(email) {
|
|
|
7823
7977
|
}
|
|
7824
7978
|
async function leaveOrg() {
|
|
7825
7979
|
const config = await getClientConfig();
|
|
7826
|
-
const client = initClient4(
|
|
7980
|
+
const client = initClient4(orgMembersContract, config);
|
|
7827
7981
|
const result = await client.leave({
|
|
7828
7982
|
body: {}
|
|
7829
7983
|
});
|
|
@@ -7834,7 +7988,7 @@ async function leaveOrg() {
|
|
|
7834
7988
|
}
|
|
7835
7989
|
async function listOrgs() {
|
|
7836
7990
|
const config = await getUserTokenClientConfig();
|
|
7837
|
-
const client = initClient4(
|
|
7991
|
+
const client = initClient4(orgListContract, config);
|
|
7838
7992
|
const result = await client.list({ headers: {} });
|
|
7839
7993
|
if (result.status === 200) {
|
|
7840
7994
|
return result.body;
|
|
@@ -9259,30 +9413,77 @@ function mergeSkillVariables(agent, variables) {
|
|
|
9259
9413
|
agent.environment = environment;
|
|
9260
9414
|
}
|
|
9261
9415
|
}
|
|
9416
|
+
function resolveServiceConfig(ref) {
|
|
9417
|
+
const parsed = connectorTypeSchema.safeParse(ref);
|
|
9418
|
+
if (!parsed.success) {
|
|
9419
|
+
throw new Error(
|
|
9420
|
+
`Cannot resolve service ref "${ref}": no built-in service with this name`
|
|
9421
|
+
);
|
|
9422
|
+
}
|
|
9423
|
+
const serviceConfig = getServiceConfig(parsed.data);
|
|
9424
|
+
if (!serviceConfig) {
|
|
9425
|
+
throw new Error(
|
|
9426
|
+
`Service ref "${ref}" resolved to "${parsed.data}" but it does not support proxy-side token replacement`
|
|
9427
|
+
);
|
|
9428
|
+
}
|
|
9429
|
+
return serviceConfig;
|
|
9430
|
+
}
|
|
9431
|
+
function collectAndValidatePermissions(ref, serviceConfig) {
|
|
9432
|
+
const available = /* @__PURE__ */ new Set();
|
|
9433
|
+
for (const api2 of serviceConfig.apis) {
|
|
9434
|
+
for (const perm of api2.permissions ?? []) {
|
|
9435
|
+
if (perm.name === "all") {
|
|
9436
|
+
throw new Error(
|
|
9437
|
+
`Service "${serviceConfig.name}" (ref "${ref}") has a permission named "all", which is a reserved keyword`
|
|
9438
|
+
);
|
|
9439
|
+
}
|
|
9440
|
+
available.add(perm.name);
|
|
9441
|
+
}
|
|
9442
|
+
}
|
|
9443
|
+
return available;
|
|
9444
|
+
}
|
|
9262
9445
|
function expandServiceConfigs(config) {
|
|
9263
9446
|
const compose = config;
|
|
9264
9447
|
if (!compose?.agents) return;
|
|
9265
9448
|
for (const agent of Object.values(compose.agents)) {
|
|
9266
9449
|
const services = agent.experimental_services;
|
|
9267
|
-
if (!services
|
|
9268
|
-
if (
|
|
9269
|
-
|
|
9270
|
-
|
|
9271
|
-
|
|
9272
|
-
|
|
9273
|
-
|
|
9274
|
-
|
|
9275
|
-
|
|
9276
|
-
|
|
9277
|
-
|
|
9278
|
-
|
|
9450
|
+
if (!services) continue;
|
|
9451
|
+
if (Array.isArray(services)) continue;
|
|
9452
|
+
const expanded = [];
|
|
9453
|
+
for (const [ref, selection] of Object.entries(services)) {
|
|
9454
|
+
const serviceConfig = resolveServiceConfig(ref);
|
|
9455
|
+
const availablePermissions = collectAndValidatePermissions(
|
|
9456
|
+
ref,
|
|
9457
|
+
serviceConfig
|
|
9458
|
+
);
|
|
9459
|
+
if (selection.permissions !== "all") {
|
|
9460
|
+
for (const name of selection.permissions) {
|
|
9461
|
+
if (!availablePermissions.has(name)) {
|
|
9462
|
+
const available = [...availablePermissions].join(", ");
|
|
9463
|
+
throw new Error(
|
|
9464
|
+
`Permission "${name}" does not exist in service "${serviceConfig.name}" (ref "${ref}"). Available: ${available}`
|
|
9465
|
+
);
|
|
9466
|
+
}
|
|
9467
|
+
}
|
|
9279
9468
|
}
|
|
9280
|
-
|
|
9281
|
-
|
|
9282
|
-
|
|
9283
|
-
|
|
9469
|
+
const selectedSet = selection.permissions === "all" ? null : new Set(selection.permissions);
|
|
9470
|
+
const filteredApis = serviceConfig.apis.map((api2) => ({
|
|
9471
|
+
...api2,
|
|
9472
|
+
permissions: selectedSet ? (api2.permissions ?? []).filter((p) => selectedSet.has(p.name)) : api2.permissions
|
|
9473
|
+
})).filter((api2) => (api2.permissions ?? []).length > 0);
|
|
9474
|
+
if (filteredApis.length === 0) continue;
|
|
9475
|
+
const entry = {
|
|
9476
|
+
name: serviceConfig.name,
|
|
9477
|
+
ref,
|
|
9478
|
+
apis: filteredApis
|
|
9284
9479
|
};
|
|
9285
|
-
|
|
9480
|
+
if (serviceConfig.description !== void 0)
|
|
9481
|
+
entry.description = serviceConfig.description;
|
|
9482
|
+
if (serviceConfig.placeholders !== void 0)
|
|
9483
|
+
entry.placeholders = serviceConfig.placeholders;
|
|
9484
|
+
expanded.push(entry);
|
|
9485
|
+
}
|
|
9486
|
+
agent.experimental_services = expanded;
|
|
9286
9487
|
}
|
|
9287
9488
|
}
|
|
9288
9489
|
function getPlatformUrl(apiUrl) {
|
|
@@ -9352,9 +9553,9 @@ async function finalizeCompose(config, agent, variables, options) {
|
|
|
9352
9553
|
console.log("Uploading compose...");
|
|
9353
9554
|
}
|
|
9354
9555
|
const response = await createOrUpdateCompose({ content: config });
|
|
9355
|
-
const
|
|
9556
|
+
const orgResponse = await getOrg();
|
|
9356
9557
|
const shortVersionId = response.versionId.slice(0, 8);
|
|
9357
|
-
const displayName = `${
|
|
9558
|
+
const displayName = `${orgResponse.slug}/${response.name}`;
|
|
9358
9559
|
const result = {
|
|
9359
9560
|
composeId: response.composeId,
|
|
9360
9561
|
composeName: response.name,
|
|
@@ -9485,7 +9686,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
|
|
|
9485
9686
|
options.autoUpdate = false;
|
|
9486
9687
|
}
|
|
9487
9688
|
if (options.autoUpdate !== false) {
|
|
9488
|
-
await startSilentUpgrade("9.
|
|
9689
|
+
await startSilentUpgrade("9.57.1");
|
|
9489
9690
|
}
|
|
9490
9691
|
try {
|
|
9491
9692
|
let result;
|
|
@@ -10517,22 +10718,22 @@ function parseIdentifier(identifier) {
|
|
|
10517
10718
|
if (isUUID(identifier)) {
|
|
10518
10719
|
return { name: identifier };
|
|
10519
10720
|
}
|
|
10520
|
-
let
|
|
10721
|
+
let org;
|
|
10521
10722
|
let rest = identifier;
|
|
10522
10723
|
const slashIndex = identifier.indexOf("/");
|
|
10523
10724
|
if (slashIndex > 0) {
|
|
10524
|
-
|
|
10725
|
+
org = identifier.slice(0, slashIndex);
|
|
10525
10726
|
rest = identifier.slice(slashIndex + 1);
|
|
10526
10727
|
}
|
|
10527
10728
|
const colonIndex = rest.indexOf(":");
|
|
10528
10729
|
if (colonIndex > 0 && colonIndex < rest.length - 1) {
|
|
10529
10730
|
return {
|
|
10530
|
-
|
|
10731
|
+
org,
|
|
10531
10732
|
name: rest.slice(0, colonIndex),
|
|
10532
10733
|
version: rest.slice(colonIndex + 1)
|
|
10533
10734
|
};
|
|
10534
10735
|
}
|
|
10535
|
-
return {
|
|
10736
|
+
return { org, name: rest };
|
|
10536
10737
|
}
|
|
10537
10738
|
function renderRunCreated(response) {
|
|
10538
10739
|
if (response.status === "queued") {
|
|
@@ -10623,7 +10824,7 @@ function showNextSteps(result) {
|
|
|
10623
10824
|
// src/commands/run/run.ts
|
|
10624
10825
|
var mainRunCommand = new Command8().name("run").description("Run an agent").argument(
|
|
10625
10826
|
"<agent-name>",
|
|
10626
|
-
"Agent reference: [
|
|
10827
|
+
"Agent reference: [org/]name[:version] (e.g., 'my-agent', 'lancy/my-agent:abc123', 'my-agent:latest')"
|
|
10627
10828
|
).argument("<prompt>", "Prompt for the agent").option(
|
|
10628
10829
|
"--env-file <path>",
|
|
10629
10830
|
"Load environment variables from file (priority: CLI flags > file > env vars)"
|
|
@@ -10653,18 +10854,18 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
|
|
|
10653
10854
|
"Override model provider (e.g., anthropic-api-key)"
|
|
10654
10855
|
).option("--verbose", "Show full tool inputs and outputs").option(
|
|
10655
10856
|
"--experimental-shared-agent",
|
|
10656
|
-
"Allow running agents shared by other users (required when running
|
|
10857
|
+
"Allow running agents shared by other users (required when running org/agent format)"
|
|
10657
10858
|
).option("--check-env", "Validate secrets and vars before running").addOption(new Option2("--debug-no-mock-claude").hideHelp()).addOption(new Option2("--no-auto-update").hideHelp()).action(
|
|
10658
10859
|
withErrorHandler(
|
|
10659
10860
|
async (identifier, prompt, options) => {
|
|
10660
10861
|
if (options.autoUpdate !== false) {
|
|
10661
|
-
await startSilentUpgrade("9.
|
|
10862
|
+
await startSilentUpgrade("9.57.1");
|
|
10662
10863
|
}
|
|
10663
|
-
const {
|
|
10664
|
-
if (
|
|
10665
|
-
const
|
|
10666
|
-
const
|
|
10667
|
-
if (!
|
|
10864
|
+
const { org, name, version } = parseIdentifier(identifier);
|
|
10865
|
+
if (org && !options.experimentalSharedAgent) {
|
|
10866
|
+
const defaultOrg = await getOrg();
|
|
10867
|
+
const isOwnOrg = defaultOrg.slug === org;
|
|
10868
|
+
if (!isOwnOrg) {
|
|
10668
10869
|
throw new Error(
|
|
10669
10870
|
"Running shared agents requires --experimental-shared-agent flag",
|
|
10670
10871
|
{
|
|
@@ -10682,7 +10883,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
|
|
|
10682
10883
|
composeId = compose.id;
|
|
10683
10884
|
composeContent = compose.content;
|
|
10684
10885
|
} else {
|
|
10685
|
-
const compose = await getComposeByName(name,
|
|
10886
|
+
const compose = await getComposeByName(name, org);
|
|
10686
10887
|
if (!compose) {
|
|
10687
10888
|
throw new Error(`Agent not found: ${identifier}`, {
|
|
10688
10889
|
cause: new Error(
|
|
@@ -12345,7 +12546,7 @@ var cookAction = new Command34().name("cook").description("Quick start: prepare,
|
|
|
12345
12546
|
withErrorHandler(
|
|
12346
12547
|
async (prompt, options) => {
|
|
12347
12548
|
if (options.autoUpdate !== false) {
|
|
12348
|
-
const shouldExit = await checkAndUpgrade("9.
|
|
12549
|
+
const shouldExit = await checkAndUpgrade("9.57.1", prompt);
|
|
12349
12550
|
if (shouldExit) {
|
|
12350
12551
|
process.exit(0);
|
|
12351
12552
|
}
|
|
@@ -12554,7 +12755,7 @@ var ApiClient = class {
|
|
|
12554
12755
|
}
|
|
12555
12756
|
return apiUrl;
|
|
12556
12757
|
}
|
|
12557
|
-
async getComposeByName(name,
|
|
12758
|
+
async getComposeByName(name, org) {
|
|
12558
12759
|
const baseUrl = await this.getBaseUrl();
|
|
12559
12760
|
const headers = await this.getHeaders();
|
|
12560
12761
|
const client = initClient12(composesMainContract, {
|
|
@@ -12565,7 +12766,7 @@ var ApiClient = class {
|
|
|
12565
12766
|
const result = await client.getByName({
|
|
12566
12767
|
query: {
|
|
12567
12768
|
name,
|
|
12568
|
-
|
|
12769
|
+
org
|
|
12569
12770
|
}
|
|
12570
12771
|
});
|
|
12571
12772
|
if (result.status === 200) {
|
|
@@ -12774,10 +12975,10 @@ var ApiClient = class {
|
|
|
12774
12975
|
/**
|
|
12775
12976
|
* Get current user's default org
|
|
12776
12977
|
*/
|
|
12777
|
-
async
|
|
12978
|
+
async getOrg() {
|
|
12778
12979
|
const baseUrl = await this.getBaseUrl();
|
|
12779
12980
|
const headers = await this.getHeaders();
|
|
12780
|
-
const client = initClient12(
|
|
12981
|
+
const client = initClient12(orgContract, {
|
|
12781
12982
|
baseUrl,
|
|
12782
12983
|
baseHeaders: headers,
|
|
12783
12984
|
jsonQuery: false
|
|
@@ -12793,10 +12994,10 @@ var ApiClient = class {
|
|
|
12793
12994
|
/**
|
|
12794
12995
|
* Update user's default org slug
|
|
12795
12996
|
*/
|
|
12796
|
-
async
|
|
12997
|
+
async updateOrg(body) {
|
|
12797
12998
|
const baseUrl = await this.getBaseUrl();
|
|
12798
12999
|
const headers = await this.getHeaders();
|
|
12799
|
-
const client = initClient12(
|
|
13000
|
+
const client = initClient12(orgContract, {
|
|
12800
13001
|
baseUrl,
|
|
12801
13002
|
baseHeaders: headers,
|
|
12802
13003
|
jsonQuery: false
|
|
@@ -13620,9 +13821,6 @@ async function showNetworkLogs(runId, options) {
|
|
|
13620
13821
|
}
|
|
13621
13822
|
}
|
|
13622
13823
|
|
|
13623
|
-
// src/index.ts
|
|
13624
|
-
import chalk84 from "chalk";
|
|
13625
|
-
|
|
13626
13824
|
// src/commands/org/index.ts
|
|
13627
13825
|
import { Command as Command48 } from "commander";
|
|
13628
13826
|
|
|
@@ -13687,10 +13885,10 @@ var listCommand5 = new Command42().name("list").description("List all accessible
|
|
|
13687
13885
|
withErrorHandler(async () => {
|
|
13688
13886
|
const result = await listOrgs();
|
|
13689
13887
|
const config = await loadConfig();
|
|
13690
|
-
const
|
|
13888
|
+
const activeOrg = config.activeOrg;
|
|
13691
13889
|
console.log(chalk38.bold("Available organizations:"));
|
|
13692
|
-
for (const org of result.
|
|
13693
|
-
const isCurrent = org.slug ===
|
|
13890
|
+
for (const org of result.orgs) {
|
|
13891
|
+
const isCurrent = org.slug === activeOrg;
|
|
13694
13892
|
const marker = isCurrent ? chalk38.green("* ") : " ";
|
|
13695
13893
|
const roleLabel = org.role ? ` (${org.role})` : "";
|
|
13696
13894
|
const currentLabel = isCurrent ? chalk38.dim(" \u2190 current") : "";
|
|
@@ -13706,7 +13904,7 @@ var useCommand = new Command43().name("use").description("Switch to a different
|
|
|
13706
13904
|
withErrorHandler(
|
|
13707
13905
|
async (slug, options) => {
|
|
13708
13906
|
if (options.personal) {
|
|
13709
|
-
await saveConfig({
|
|
13907
|
+
await saveConfig({ activeOrg: void 0 });
|
|
13710
13908
|
console.log(chalk39.green("\u2713 Switched to personal org."));
|
|
13711
13909
|
return;
|
|
13712
13910
|
}
|
|
@@ -13716,13 +13914,13 @@ var useCommand = new Command43().name("use").description("Switch to a different
|
|
|
13716
13914
|
);
|
|
13717
13915
|
}
|
|
13718
13916
|
const orgList = await listOrgs();
|
|
13719
|
-
const target = orgList.
|
|
13917
|
+
const target = orgList.orgs.find((s) => s.slug === slug);
|
|
13720
13918
|
if (!target) {
|
|
13721
13919
|
throw new Error(
|
|
13722
13920
|
`Organization '${slug}' not found or not accessible.`
|
|
13723
13921
|
);
|
|
13724
13922
|
}
|
|
13725
|
-
await saveConfig({
|
|
13923
|
+
await saveConfig({ activeOrg: slug });
|
|
13726
13924
|
console.log(chalk39.green(`\u2713 Switched to organization: ${slug}`));
|
|
13727
13925
|
}
|
|
13728
13926
|
)
|
|
@@ -13783,7 +13981,7 @@ import chalk43 from "chalk";
|
|
|
13783
13981
|
var leaveCommand = new Command47().name("leave").description("Leave the current organization").action(
|
|
13784
13982
|
withErrorHandler(async () => {
|
|
13785
13983
|
await leaveOrg();
|
|
13786
|
-
await saveConfig({
|
|
13984
|
+
await saveConfig({ activeOrg: void 0 });
|
|
13787
13985
|
console.log(
|
|
13788
13986
|
chalk43.green("\u2713 Left organization. Switched to personal org.")
|
|
13789
13987
|
);
|
|
@@ -15284,7 +15482,7 @@ function printRunConfiguration(schedule) {
|
|
|
15284
15482
|
const statusText = schedule.enabled ? chalk56.green("enabled") : chalk56.yellow("disabled");
|
|
15285
15483
|
console.log(`${"Status:".padEnd(16)}${statusText}`);
|
|
15286
15484
|
console.log(
|
|
15287
|
-
`${"Agent:".padEnd(16)}${schedule.composeName} ${chalk56.dim(`(${schedule.
|
|
15485
|
+
`${"Agent:".padEnd(16)}${schedule.composeName} ${chalk56.dim(`(${schedule.orgSlug})`)}`
|
|
15288
15486
|
);
|
|
15289
15487
|
const promptPreview = schedule.prompt.length > 60 ? schedule.prompt.slice(0, 57) + "..." : schedule.prompt;
|
|
15290
15488
|
console.log(`${"Prompt:".padEnd(16)}${chalk56.dim(promptPreview)}`);
|
|
@@ -17699,13 +17897,13 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
|
|
|
17699
17897
|
if (latestVersion === null) {
|
|
17700
17898
|
throw new Error("Could not check for updates. Please try again later.");
|
|
17701
17899
|
}
|
|
17702
|
-
if (latestVersion === "9.
|
|
17703
|
-
console.log(chalk83.green(`\u2713 Already up to date (${"9.
|
|
17900
|
+
if (latestVersion === "9.57.1") {
|
|
17901
|
+
console.log(chalk83.green(`\u2713 Already up to date (${"9.57.1"})`));
|
|
17704
17902
|
return;
|
|
17705
17903
|
}
|
|
17706
17904
|
console.log(
|
|
17707
17905
|
chalk83.yellow(
|
|
17708
|
-
`Current version: ${"9.
|
|
17906
|
+
`Current version: ${"9.57.1"} -> Latest version: ${latestVersion}`
|
|
17709
17907
|
)
|
|
17710
17908
|
);
|
|
17711
17909
|
console.log();
|
|
@@ -17732,7 +17930,7 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
|
|
|
17732
17930
|
const success = await performUpgrade(packageManager);
|
|
17733
17931
|
if (success) {
|
|
17734
17932
|
console.log(
|
|
17735
|
-
chalk83.green(`\u2713 Upgraded from ${"9.
|
|
17933
|
+
chalk83.green(`\u2713 Upgraded from ${"9.57.1"} to ${latestVersion}`)
|
|
17736
17934
|
);
|
|
17737
17935
|
return;
|
|
17738
17936
|
}
|
|
@@ -17746,7 +17944,7 @@ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CL
|
|
|
17746
17944
|
|
|
17747
17945
|
// src/index.ts
|
|
17748
17946
|
var program = new Command91();
|
|
17749
|
-
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.
|
|
17947
|
+
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.57.1");
|
|
17750
17948
|
program.addCommand(authCommand);
|
|
17751
17949
|
program.addCommand(infoCommand);
|
|
17752
17950
|
program.addCommand(composeCommand);
|
|
@@ -17757,16 +17955,6 @@ program.addCommand(memoryCommand);
|
|
|
17757
17955
|
program.addCommand(cookCommand);
|
|
17758
17956
|
program.addCommand(logsCommand2);
|
|
17759
17957
|
program.addCommand(orgCommand);
|
|
17760
|
-
var deprecatedScopeCommand = new Command91("scope").allowUnknownOption().allowExcessArguments().action((_options, command) => {
|
|
17761
|
-
const args = command.args.join(" ");
|
|
17762
|
-
console.error(
|
|
17763
|
-
chalk84.yellow(
|
|
17764
|
-
`\u26A0 'vm0 scope' is deprecated. Use 'vm0 org${args ? " " + args : ""}' instead.`
|
|
17765
|
-
)
|
|
17766
|
-
);
|
|
17767
|
-
process.exit(1);
|
|
17768
|
-
});
|
|
17769
|
-
program.addCommand(deprecatedScopeCommand, { hidden: true });
|
|
17770
17958
|
program.addCommand(agentCommand);
|
|
17771
17959
|
program.addCommand(initCommand4);
|
|
17772
17960
|
program.addCommand(scheduleCommand);
|