@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.
Files changed (2) hide show
  1. package/index.js +385 -197
  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.56.10",
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.56.10",
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 activeScope = config.activeScope;
376
- if (activeScope) {
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("scope=")) {
384
- args.path = `${args.path}${separator}scope=${encodeURIComponent(activeScope)}`;
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.56.10"}`));
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 scope/name format (e.g., acme/production)"
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 experimentalServicesSchema = z3.object({
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 VM0_AGENT_SCOPE env vars
875
+ // Agent metadata for VM0_AGENT_NAME and VM0_AGENT_ORG env vars
873
876
  agentName: z3.string().optional(),
874
- agentScopeSlug: z3.string().optional(),
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
- agentScopeSlug: z3.string().optional(),
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 scope/name format (e.g., acme/production)"
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: string[] (e.g., ["github", "slack"]) expanded by CLI to full objects before API call.
992
+ * CLI input: map format { slack: { permissions: [...] | "all" } }
993
+ * — expanded by CLI to full ExpandedServiceConfig[] before API call.
990
994
  */
991
- experimental_services: z4.array(z4.string()).optional(),
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}&scope={scope}
1069
+ * GET /api/agent/composes?name={name}&org={org}
1057
1070
  * Get agent compose by name with HEAD version content
1058
- * If scope is not provided, uses the authenticated user's default scope
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?scope={scope}
1176
- * List all agent composes for a scope
1177
- * If scope is not provided, uses the authenticated user's default scope
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 a scope"
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/scopes.ts
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 scopeSlugSchema = z11.string().min(3, "Scope slug must be at least 3 characters").max(64, "Scope slug must be at most 64 characters").regex(
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
- "Scope slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character"
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 scopeResponseSchema = z11.object({
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 updateScopeRequestSchema = z11.object({
2286
- slug: scopeSlugSchema,
2297
+ var updateOrgRequestSchema = z11.object({
2298
+ slug: orgSlugSchema,
2287
2299
  force: z11.boolean().optional().default(false)
2288
2300
  });
2289
- var scopeContract = c9.router({
2301
+ var orgContract = c9.router({
2290
2302
  /**
2291
- * GET /api/scope
2292
- * Get current user's default scope
2303
+ * GET /api/org
2304
+ * Get current user's default org
2293
2305
  */
2294
2306
  get: {
2295
2307
  method: "GET",
2296
- path: "/api/scope",
2308
+ path: "/api/org",
2297
2309
  headers: authHeadersSchema,
2298
2310
  responses: {
2299
- 200: scopeResponseSchema,
2311
+ 200: orgResponseSchema,
2300
2312
  401: apiErrorSchema,
2301
2313
  404: apiErrorSchema,
2302
2314
  500: apiErrorSchema
2303
2315
  },
2304
- summary: "Get current user's default scope"
2316
+ summary: "Get current user's default org"
2305
2317
  },
2306
2318
  /**
2307
- * PUT /api/scope
2308
- * Update scope slug
2319
+ * PUT /api/org
2320
+ * Update org slug
2309
2321
  */
2310
2322
  update: {
2311
2323
  method: "PUT",
2312
- path: "/api/scope",
2324
+ path: "/api/org",
2313
2325
  headers: authHeadersSchema,
2314
- body: updateScopeRequestSchema,
2326
+ body: updateOrgRequestSchema,
2315
2327
  responses: {
2316
- 200: scopeResponseSchema,
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 scope slug"
2336
+ summary: "Update org slug"
2325
2337
  }
2326
2338
  });
2327
- var scopeDefaultAgentContract = c9.router({
2339
+ var orgDefaultAgentContract = c9.router({
2328
2340
  /**
2329
- * PUT /api/scopes/default-agent?scope={slug}
2330
- * Set or unset the default agent for a scope.
2331
- * Only scope admins can perform this action.
2332
- * The agent must belong to the same scope.
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/scopes/default-agent",
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 a scope"
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 scope (metadata only)
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 scope (includes values)
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 scope/name:version → composeId)
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
- scopeSlug: z16.string(),
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
- scopeSlug: z18.string().nullable(),
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
- scope: z18.string().optional(),
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: [api("https://api.github.com", bearerAuth("GITHUB_TOKEN"))],
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
- return SERVICE_CONFIGS[type2];
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/scope-list.ts
7067
+ // ../../packages/core/src/contracts/org-list.ts
6940
7068
  import { z as z22 } from "zod";
6941
7069
  var c20 = initContract();
6942
- var scopeListItemSchema = z22.object({
7070
+ var orgListItemSchema = z22.object({
6943
7071
  slug: z22.string(),
6944
7072
  role: z22.string()
6945
7073
  });
6946
- var scopeListResponseSchema = z22.object({
6947
- scopes: z22.array(scopeListItemSchema),
7074
+ var orgListResponseSchema = z22.object({
7075
+ orgs: z22.array(orgListItemSchema),
6948
7076
  active: z22.string().optional()
6949
7077
  });
6950
- var scopeListContract = c20.router({
7078
+ var orgListContract = c20.router({
6951
7079
  /**
6952
- * GET /api/scope/list
6953
- * List all scopes accessible to the user
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/scope/list",
7085
+ path: "/api/org/list",
6958
7086
  headers: authHeadersSchema,
6959
7087
  responses: {
6960
- 200: scopeListResponseSchema,
7088
+ 200: orgListResponseSchema,
6961
7089
  401: apiErrorSchema,
6962
7090
  500: apiErrorSchema
6963
7091
  },
6964
- summary: "List all accessible scopes"
7092
+ summary: "List all accessible orgs"
6965
7093
  }
6966
7094
  });
6967
7095
 
6968
- // ../../packages/core/src/contracts/scope-members.ts
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 scopeMemberSchema = z23.object({
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 scopeMembersResponseSchema = z23.object({
7106
+ var orgMembersResponseSchema = z23.object({
6979
7107
  slug: z23.string(),
6980
7108
  role: orgRoleSchema,
6981
- members: z23.array(scopeMemberSchema),
7109
+ members: z23.array(orgMemberSchema),
6982
7110
  createdAt: z23.string()
6983
7111
  });
6984
- var inviteScopeMemberRequestSchema = z23.object({
7112
+ var inviteOrgMemberRequestSchema = z23.object({
6985
7113
  email: z23.string().email()
6986
7114
  });
6987
- var removeScopeMemberRequestSchema = z23.object({
7115
+ var removeOrgMemberRequestSchema = z23.object({
6988
7116
  email: z23.string().email()
6989
7117
  });
6990
- var scopeMessageResponseSchema = z23.object({
7118
+ var orgMessageResponseSchema = z23.object({
6991
7119
  message: z23.string()
6992
7120
  });
6993
- var scopeMembersContract = c21.router({
7121
+ var orgMembersContract = c21.router({
6994
7122
  /**
6995
- * GET /api/scope/members
6996
- * Get scope members and status
7123
+ * GET /api/org/members
7124
+ * Get org members and status
6997
7125
  */
6998
7126
  members: {
6999
7127
  method: "GET",
7000
- path: "/api/scope/members",
7128
+ path: "/api/org/members",
7001
7129
  headers: authHeadersSchema,
7002
7130
  responses: {
7003
- 200: scopeMembersResponseSchema,
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 scope members and status"
7138
+ summary: "Get org members and status"
7011
7139
  },
7012
7140
  /**
7013
- * POST /api/scope/invite
7014
- * Invite a member to the scope
7141
+ * POST /api/org/invite
7142
+ * Invite a member to the org
7015
7143
  */
7016
7144
  invite: {
7017
7145
  method: "POST",
7018
- path: "/api/scope/invite",
7146
+ path: "/api/org/invite",
7019
7147
  headers: authHeadersSchema,
7020
- body: inviteScopeMemberRequestSchema,
7148
+ body: inviteOrgMemberRequestSchema,
7021
7149
  responses: {
7022
- 200: scopeMessageResponseSchema,
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 scope"
7156
+ summary: "Invite a member to the org"
7029
7157
  },
7030
7158
  /**
7031
- * POST /api/scope/leave
7032
- * Leave the current scope
7159
+ * POST /api/org/leave
7160
+ * Leave the current org
7033
7161
  */
7034
7162
  leave: {
7035
7163
  method: "POST",
7036
- path: "/api/scope/leave",
7164
+ path: "/api/org/leave",
7037
7165
  headers: authHeadersSchema,
7038
7166
  body: z23.object({}),
7039
7167
  responses: {
7040
- 200: scopeMessageResponseSchema,
7168
+ 200: orgMessageResponseSchema,
7041
7169
  401: apiErrorSchema,
7042
7170
  403: apiErrorSchema,
7043
7171
  500: apiErrorSchema
7044
7172
  },
7045
- summary: "Leave the current scope"
7173
+ summary: "Leave the current org"
7046
7174
  },
7047
7175
  /**
7048
- * DELETE /api/scope/members
7049
- * Remove a member from the scope
7176
+ * DELETE /api/org/members
7177
+ * Remove a member from the org
7050
7178
  */
7051
7179
  removeMember: {
7052
7180
  method: "DELETE",
7053
- path: "/api/scope/members",
7181
+ path: "/api/org/members",
7054
7182
  headers: authHeadersSchema,
7055
- body: removeScopeMemberRequestSchema,
7183
+ body: removeOrgMemberRequestSchema,
7056
7184
  responses: {
7057
- 200: scopeMessageResponseSchema,
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 scope"
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
- hasScope: z24.boolean(),
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
- var PROFILE_REGEX = /<!-- ZERO_PROFILE\n(?:[^\n]*\n)*?ZERO_PROFILE -->\n?/g;
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 = stripLegacyFrontmatter(content).replace(PROFILE_REGEX, "").trimEnd();
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 appendScopeParam(path18) {
7707
+ async function appendOrgParam(path18) {
7554
7708
  const config = await loadConfig();
7555
- const activeScope = config.activeScope;
7556
- if (!activeScope) {
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("scope")) {
7716
+ if (params.has("org")) {
7563
7717
  return path18;
7564
7718
  }
7565
- return `${path18}&scope=${encodeURIComponent(activeScope)}`;
7719
+ return `${path18}&org=${encodeURIComponent(activeOrg)}`;
7566
7720
  }
7567
- return `${path18}?scope=${encodeURIComponent(activeScope)}`;
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 scopedPath = await appendScopeParam(path18);
7587
- return fetch(`${baseUrl}${scopedPath}`, {
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 scopedPath = await appendScopeParam(path18);
7596
- return fetch(`${baseUrl}${scopedPath}`, {
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 scopedPath = await appendScopeParam(path18);
7609
- return fetch(`${baseUrl}${scopedPath}`, {
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, scope) {
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, scope }
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(scopeContract, config);
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(scopeContract, config);
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(scopeMembersContract, config);
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(scopeMembersContract, config);
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(scopeMembersContract, config);
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(scopeMembersContract, config);
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(scopeListContract, config);
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 || services.length === 0) continue;
9268
- if (typeof services[0] !== "string") continue;
9269
- agent.experimental_services = services.map((name) => {
9270
- const parsed = connectorTypeSchema.safeParse(name);
9271
- if (!parsed.success) {
9272
- throw new Error(`Unknown service: "${name}"`);
9273
- }
9274
- const serviceConfig = getServiceConfig(parsed.data);
9275
- if (!serviceConfig) {
9276
- throw new Error(
9277
- `Service "${name}" does not support proxy-side token replacement`
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
- return {
9281
- name,
9282
- apis: serviceConfig.apis,
9283
- placeholders: serviceConfig.placeholders
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 scopeResponse = await getOrg();
9556
+ const orgResponse = await getOrg();
9356
9557
  const shortVersionId = response.versionId.slice(0, 8);
9357
- const displayName = `${scopeResponse.slug}/${response.name}`;
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.56.10");
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 scope;
10721
+ let org;
10521
10722
  let rest = identifier;
10522
10723
  const slashIndex = identifier.indexOf("/");
10523
10724
  if (slashIndex > 0) {
10524
- scope = identifier.slice(0, slashIndex);
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
- scope,
10731
+ org,
10531
10732
  name: rest.slice(0, colonIndex),
10532
10733
  version: rest.slice(colonIndex + 1)
10533
10734
  };
10534
10735
  }
10535
- return { scope, name: rest };
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: [scope/]name[:version] (e.g., 'my-agent', 'lancy/my-agent:abc123', 'my-agent:latest')"
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 scope/agent format)"
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.56.10");
10862
+ await startSilentUpgrade("9.57.1");
10662
10863
  }
10663
- const { scope, name, version } = parseIdentifier(identifier);
10664
- if (scope && !options.experimentalSharedAgent) {
10665
- const defaultScope = await getOrg();
10666
- const isOwnScope = defaultScope.slug === scope;
10667
- if (!isOwnScope) {
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, scope);
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.56.10", prompt);
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, scope) {
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
- scope
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 getScope() {
12978
+ async getOrg() {
12778
12979
  const baseUrl = await this.getBaseUrl();
12779
12980
  const headers = await this.getHeaders();
12780
- const client = initClient12(scopeContract, {
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 updateScope(body) {
12997
+ async updateOrg(body) {
12797
12998
  const baseUrl = await this.getBaseUrl();
12798
12999
  const headers = await this.getHeaders();
12799
- const client = initClient12(scopeContract, {
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 activeScope = config.activeScope;
13888
+ const activeOrg = config.activeOrg;
13691
13889
  console.log(chalk38.bold("Available organizations:"));
13692
- for (const org of result.scopes) {
13693
- const isCurrent = org.slug === activeScope;
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({ activeScope: void 0 });
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.scopes.find((s) => s.slug === slug);
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({ activeScope: slug });
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({ activeScope: void 0 });
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.scopeSlug})`)}`
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.56.10") {
17703
- console.log(chalk83.green(`\u2713 Already up to date (${"9.56.10"})`));
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.56.10"} -> Latest version: ${latestVersion}`
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.56.10"} to ${latestVersion}`)
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.56.10");
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vm0/cli",
3
- "version": "9.56.10",
3
+ "version": "9.57.1",
4
4
  "description": "CLI application",
5
5
  "repository": {
6
6
  "type": "git",