@vm0/cli 9.74.4 → 9.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +1117 -482
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -47,7 +47,7 @@ if (DSN) {
47
47
  Sentry.init({
48
48
  dsn: DSN,
49
49
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
50
- release: "9.74.4",
50
+ release: "9.75.0",
51
51
  sendDefaultPii: false,
52
52
  tracesSampleRate: 0,
53
53
  shutdownTimeout: 500,
@@ -66,7 +66,7 @@ if (DSN) {
66
66
  }
67
67
  });
68
68
  Sentry.setContext("cli", {
69
- version: "9.74.4",
69
+ version: "9.75.0",
70
70
  command: process.argv.slice(2).join(" ")
71
71
  });
72
72
  Sentry.setContext("runtime", {
@@ -85,7 +85,7 @@ process.stdout.on("error", handleEpipe);
85
85
  process.stderr.on("error", handleEpipe);
86
86
 
87
87
  // src/index.ts
88
- import { Command as Command94 } from "commander";
88
+ import { Command as Command93 } from "commander";
89
89
 
90
90
  // src/lib/network/proxy.ts
91
91
  import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
@@ -2769,7 +2769,7 @@ function mpFirewall(type2, authHeaders, placeholders) {
2769
2769
  {
2770
2770
  base: getFirewallBaseUrl(type2),
2771
2771
  auth: { headers: authHeaders },
2772
- permissions: [{ name: "all", rules: ["ANY /{path*}"] }]
2772
+ permissions: [{ name: "unrestricted", rules: ["ANY /{path*}"] }]
2773
2773
  }
2774
2774
  ],
2775
2775
  placeholders
@@ -3087,6 +3087,7 @@ var chatThreadListItemSchema = z18.object({
3087
3087
  id: z18.string(),
3088
3088
  title: z18.string().nullable(),
3089
3089
  preview: z18.string().nullable(),
3090
+ agentComposeId: z18.string(),
3090
3091
  createdAt: z18.string(),
3091
3092
  updatedAt: z18.string()
3092
3093
  });
@@ -3379,6 +3380,7 @@ var deployScheduleRequestSchema = z20.object({
3379
3380
  intervalSeconds: z20.number().int().min(0).optional(),
3380
3381
  timezone: z20.string().default("UTC"),
3381
3382
  prompt: z20.string().min(1, "Prompt required"),
3383
+ description: z20.string().optional(),
3382
3384
  appendSystemPrompt: z20.string().optional(),
3383
3385
  // vars and secrets removed - now managed via server-side tables
3384
3386
  artifactName: z20.string().optional(),
@@ -3417,6 +3419,7 @@ var scheduleResponseSchema = z20.object({
3417
3419
  intervalSeconds: z20.number().nullable(),
3418
3420
  timezone: z20.string(),
3419
3421
  prompt: z20.string(),
3422
+ description: z20.string().nullable(),
3420
3423
  appendSystemPrompt: z20.string().nullable(),
3421
3424
  vars: z20.record(z20.string(), z20.string()).nullable(),
3422
3425
  // Secret names only (values are never returned)
@@ -7209,6 +7212,302 @@ function resolveFirewallRef(input) {
7209
7212
  return trimmed;
7210
7213
  }
7211
7214
 
7215
+ // ../../packages/core/src/firewalls/confluence.generated.ts
7216
+ var confluenceFirewall = {
7217
+ name: "confluence",
7218
+ description: "Confluence Cloud API",
7219
+ placeholders: {
7220
+ CONFLUENCE_TOKEN: "ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
7221
+ },
7222
+ apis: [
7223
+ {
7224
+ base: "https://api.atlassian.com",
7225
+ auth: {
7226
+ headers: {
7227
+ Authorization: "Bearer ${{ secrets.CONFLUENCE_TOKEN }}"
7228
+ }
7229
+ },
7230
+ permissions: [
7231
+ {
7232
+ name: "unrestricted",
7233
+ description: "Allow all endpoints",
7234
+ rules: ["ANY /{path*}"]
7235
+ },
7236
+ {
7237
+ name: "manage:confluence-configuration",
7238
+ description: "Manage global settings.",
7239
+ rules: [
7240
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel",
7241
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel",
7242
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom",
7243
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom",
7244
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/settings/systemInfo",
7245
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme",
7246
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/selected",
7247
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/{themeKey}"
7248
+ ]
7249
+ },
7250
+ {
7251
+ name: "read:audit-log:confluence",
7252
+ description: "View audit records.",
7253
+ rules: [
7254
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/audit",
7255
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/audit",
7256
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/audit/export",
7257
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/audit/retention",
7258
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/audit/since"
7259
+ ]
7260
+ },
7261
+ {
7262
+ name: "read:confluence-content.all",
7263
+ description: "Read all content, including content body (expansions permitted). Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.",
7264
+ rules: [
7265
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}",
7266
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/async/{to}",
7267
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/{to}",
7268
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction",
7269
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation",
7270
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}",
7271
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}",
7272
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user",
7273
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks",
7274
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks",
7275
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{id}",
7276
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{to}",
7277
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/content"
7278
+ ]
7279
+ },
7280
+ {
7281
+ name: "read:confluence-content.permission",
7282
+ description: "Read content permissions.",
7283
+ rules: [
7284
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/permission/check"
7285
+ ]
7286
+ },
7287
+ {
7288
+ name: "read:confluence-content.summary",
7289
+ description: "Read a summary of the content, which is the content without expansions. Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.",
7290
+ rules: [
7291
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/viewers",
7292
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/views",
7293
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant",
7294
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant/{type}",
7295
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/child-created",
7296
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/created",
7297
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state",
7298
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/label",
7299
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}",
7300
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}",
7301
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/to/{targetType}/{targetKey}/from/{sourceType}",
7302
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/template/blueprint",
7303
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/template/page",
7304
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}",
7305
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}",
7306
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}",
7307
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}"
7308
+ ]
7309
+ },
7310
+ {
7311
+ name: "read:confluence-groups",
7312
+ description: "Read user groups.",
7313
+ rules: [
7314
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/group",
7315
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/group/by-id",
7316
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/group/picker",
7317
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/group/{groupId}/membersByGroupId"
7318
+ ]
7319
+ },
7320
+ {
7321
+ name: "read:confluence-space.summary",
7322
+ description: "Read a summary of space information without expansions.",
7323
+ rules: [
7324
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/longtask/{id}",
7325
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label",
7326
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings",
7327
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state",
7328
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/settings",
7329
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme"
7330
+ ]
7331
+ },
7332
+ {
7333
+ name: "read:confluence-user",
7334
+ description: "Read users.",
7335
+ rules: [
7336
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user",
7337
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/anonymous",
7338
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/bulk",
7339
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/current",
7340
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/memberof"
7341
+ ]
7342
+ },
7343
+ {
7344
+ name: "read:content-details:confluence",
7345
+ description: "View content details.",
7346
+ rules: ["GET /ex/confluence/{cloudId}/wiki/rest/api/search/user"]
7347
+ },
7348
+ {
7349
+ name: "read:content.metadata:confluence",
7350
+ description: "View content summaries.",
7351
+ rules: ["GET /ex/confluence/{cloudId}/wiki/rest/api/longtask"]
7352
+ },
7353
+ {
7354
+ name: "read:space.permission:confluence",
7355
+ description: "View space permissions.",
7356
+ rules: [
7357
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission",
7358
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content"
7359
+ ]
7360
+ },
7361
+ {
7362
+ name: "read:user:confluence",
7363
+ description: "View user details.",
7364
+ rules: [
7365
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch"
7366
+ ]
7367
+ },
7368
+ {
7369
+ name: "read:user.property:confluence",
7370
+ description: "View user properties.",
7371
+ rules: [
7372
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content-states",
7373
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property",
7374
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}"
7375
+ ]
7376
+ },
7377
+ {
7378
+ name: "read:watcher:confluence",
7379
+ description: "View content watchers.",
7380
+ rules: [
7381
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch"
7382
+ ]
7383
+ },
7384
+ {
7385
+ name: "readonly:content.attachment:confluence",
7386
+ description: "Download attachments of a Confluence page or blogpost that you have access to.",
7387
+ rules: [
7388
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/download"
7389
+ ]
7390
+ },
7391
+ {
7392
+ name: "search:confluence",
7393
+ description: "Search Confluence. Note, APIs using this scope may also return data allowed by read:confluence-space.summary and read:confluence-content.summary. However, this scope is not a substitute for read:confluence-space.summary or read:confluence-content.summary.",
7394
+ rules: [
7395
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/search",
7396
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/search"
7397
+ ]
7398
+ },
7399
+ {
7400
+ name: "write:audit-log:confluence",
7401
+ description: "Create audit records.",
7402
+ rules: [
7403
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/audit",
7404
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/audit/retention"
7405
+ ]
7406
+ },
7407
+ {
7408
+ name: "write:confluence-content",
7409
+ description: "Permits the creation of pages, blogs, comments and questions.",
7410
+ rules: [
7411
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/archive",
7412
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}",
7413
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}",
7414
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/copy",
7415
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label",
7416
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label",
7417
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label/{label}",
7418
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pageTree",
7419
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pagehierarchy/copy",
7420
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction",
7421
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction",
7422
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction",
7423
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}",
7424
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}",
7425
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user",
7426
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user",
7427
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state",
7428
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state",
7429
+ "GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state/available",
7430
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version",
7431
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version/{versionNumber}",
7432
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{pageId}/move/{position}/{targetId}",
7433
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}",
7434
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}",
7435
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/template",
7436
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/template",
7437
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}",
7438
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}",
7439
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}",
7440
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}",
7441
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}",
7442
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}",
7443
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}"
7444
+ ]
7445
+ },
7446
+ {
7447
+ name: "write:confluence-file",
7448
+ description: "Upload attachments.",
7449
+ rules: [
7450
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment",
7451
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment",
7452
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}",
7453
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/data"
7454
+ ]
7455
+ },
7456
+ {
7457
+ name: "write:confluence-groups",
7458
+ description: "Create, remove and update user groups.",
7459
+ rules: [
7460
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/group",
7461
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/by-id",
7462
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId",
7463
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId"
7464
+ ]
7465
+ },
7466
+ {
7467
+ name: "write:confluence-props",
7468
+ description: "Write content properties.",
7469
+ rules: [
7470
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}"
7471
+ ]
7472
+ },
7473
+ {
7474
+ name: "write:confluence-space",
7475
+ description: "Create, update and delete space information.",
7476
+ rules: [
7477
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space",
7478
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/_private",
7479
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}",
7480
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}",
7481
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label",
7482
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label",
7483
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings",
7484
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme",
7485
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme"
7486
+ ]
7487
+ },
7488
+ {
7489
+ name: "write:space.permission:confluence",
7490
+ description: "Update space permissions.",
7491
+ rules: [
7492
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission",
7493
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content",
7494
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/{id}"
7495
+ ]
7496
+ },
7497
+ {
7498
+ name: "write:user.property:confluence",
7499
+ description: "Create, update and delete user properties.",
7500
+ rules: [
7501
+ "POST /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}",
7502
+ "PUT /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}",
7503
+ "DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}"
7504
+ ]
7505
+ }
7506
+ ]
7507
+ }
7508
+ ]
7509
+ };
7510
+
7212
7511
  // ../../packages/core/src/firewalls/github.generated.ts
7213
7512
  var githubFirewall = {
7214
7513
  name: "github",
@@ -10371,6 +10670,665 @@ var googleSheetsFirewall = {
10371
10670
  ]
10372
10671
  };
10373
10672
 
10673
+ // ../../packages/core/src/firewalls/jira.generated.ts
10674
+ var jiraFirewall = {
10675
+ name: "jira",
10676
+ description: "Jira Cloud API",
10677
+ placeholders: {
10678
+ JIRA_TOKEN: "ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
10679
+ },
10680
+ apis: [
10681
+ {
10682
+ base: "https://api.atlassian.com",
10683
+ auth: {
10684
+ headers: {
10685
+ Authorization: "Bearer ${{ secrets.JIRA_TOKEN }}"
10686
+ }
10687
+ },
10688
+ permissions: [
10689
+ {
10690
+ name: "unrestricted",
10691
+ description: "Allow all endpoints",
10692
+ rules: ["ANY /{path*}"]
10693
+ },
10694
+ {
10695
+ name: "manage:jira-configuration",
10696
+ description: "Configure Jira settings that require the Jira administrators permission, for example, create projects and custom fields, view workflows, manage issue link types.",
10697
+ rules: [
10698
+ "GET /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10699
+ "PUT /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10700
+ "POST /ex/jira/{cloudId}/rest/api/3/app/field/context/configuration/list",
10701
+ "GET /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10702
+ "PUT /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10703
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties",
10704
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties/advanced-settings",
10705
+ "PUT /ex/jira/{cloudId}/rest/api/3/application-properties/{id}",
10706
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole",
10707
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole/{key}",
10708
+ "GET /ex/jira/{cloudId}/rest/api/3/auditing/record",
10709
+ "GET /ex/jira/{cloudId}/rest/api/3/avatar/{type}/system",
10710
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10711
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10712
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10713
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10714
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10715
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10716
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10717
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10718
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10719
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10720
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10721
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/clone",
10722
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields",
10723
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields/{fieldId}/parameters",
10724
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/projects",
10725
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10726
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10727
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/list",
10728
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10729
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10730
+ "GET /ex/jira/{cloudId}/rest/api/3/events",
10731
+ "POST /ex/jira/{cloudId}/rest/api/3/field",
10732
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/association",
10733
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/association",
10734
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}",
10735
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10736
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10737
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10738
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10739
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/issuetypemapping",
10740
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/mapping",
10741
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/projectmapping",
10742
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10743
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10744
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype",
10745
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype/remove",
10746
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10747
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10748
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10749
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/move",
10750
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}",
10751
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}/issue",
10752
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project",
10753
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project/remove",
10754
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10755
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10756
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10757
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10758
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10759
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}/issue",
10760
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{id}",
10761
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/restore",
10762
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/trash",
10763
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10764
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10765
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10766
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10767
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10768
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10769
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10770
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10771
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/mapping",
10772
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10773
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10774
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10775
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10776
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping",
10777
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping/delete",
10778
+ "POST /ex/jira/{cloudId}/rest/api/3/group",
10779
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group",
10780
+ "GET /ex/jira/{cloudId}/rest/api/3/group/member",
10781
+ "POST /ex/jira/{cloudId}/rest/api/3/group/user",
10782
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group/user",
10783
+ "GET /ex/jira/{cloudId}/rest/api/3/instance/license",
10784
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLinkType",
10785
+ "PUT /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10786
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10787
+ "POST /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
10788
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level",
10789
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/default",
10790
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/member",
10791
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10792
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10793
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/search",
10794
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
10795
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{issueSecuritySchemeId}/members",
10796
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}",
10797
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level",
10798
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10799
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10800
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member",
10801
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member/{memberId}",
10802
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype",
10803
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
10804
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
10805
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/avatar2",
10806
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
10807
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
10808
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
10809
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
10810
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/mapping",
10811
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
10812
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
10813
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
10814
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
10815
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype",
10816
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/move",
10817
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/{issueTypeId}",
10818
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
10819
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
10820
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/mapping",
10821
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
10822
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
10823
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
10824
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
10825
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping",
10826
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/default",
10827
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/remove",
10828
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/project",
10829
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/sanitize",
10830
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount",
10831
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount/product/{applicationKey}",
10832
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences",
10833
+ "PUT /ex/jira/{cloudId}/rest/api/3/mypreferences",
10834
+ "DELETE /ex/jira/{cloudId}/rest/api/3/mypreferences",
10835
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences/locale",
10836
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme",
10837
+ "POST /ex/jira/{cloudId}/rest/api/3/notificationscheme",
10838
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/project",
10839
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
10840
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
10841
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}/notification",
10842
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}",
10843
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}/notification/{notificationId}",
10844
+ "GET /ex/jira/{cloudId}/rest/api/3/permissions",
10845
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme",
10846
+ "PUT /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
10847
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
10848
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
10849
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
10850
+ "POST /ex/jira/{cloudId}/rest/api/3/priority",
10851
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/default",
10852
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/move",
10853
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/search",
10854
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/{id}",
10855
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priority/{id}",
10856
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme",
10857
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme",
10858
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme/mappings",
10859
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/priorities/available",
10860
+ "PUT /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
10861
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
10862
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/priorities",
10863
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/projects",
10864
+ "POST /ex/jira/{cloudId}/rest/api/3/project",
10865
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template",
10866
+ "PUT /ex/jira/{cloudId}/rest/api/3/project-template/edit-template",
10867
+ "GET /ex/jira/{cloudId}/rest/api/3/project-template/live-template",
10868
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project-template/remove-template",
10869
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template/save-template",
10870
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
10871
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/delete",
10872
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/restore",
10873
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10874
+ "POST /ex/jira/{cloudId}/rest/api/3/resolution",
10875
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/default",
10876
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/move",
10877
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
10878
+ "DELETE /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
10879
+ "GET /ex/jira/{cloudId}/rest/api/3/role",
10880
+ "POST /ex/jira/{cloudId}/rest/api/3/role",
10881
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}",
10882
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}",
10883
+ "PUT /ex/jira/{cloudId}/rest/api/3/role/{id}",
10884
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}",
10885
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10886
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10887
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10888
+ "POST /ex/jira/{cloudId}/rest/api/3/screenscheme",
10889
+ "PUT /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
10890
+ "GET /ex/jira/{cloudId}/rest/api/3/securitylevel/{id}",
10891
+ "GET /ex/jira/{cloudId}/rest/api/3/settings/columns",
10892
+ "PUT /ex/jira/{cloudId}/rest/api/3/settings/columns",
10893
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses",
10894
+ "POST /ex/jira/{cloudId}/rest/api/3/statuses",
10895
+ "PUT /ex/jira/{cloudId}/rest/api/3/statuses",
10896
+ "DELETE /ex/jira/{cloudId}/rest/api/3/statuses",
10897
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/byNames",
10898
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/search",
10899
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/project/{projectId}/issueTypeUsages",
10900
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/projectUsages",
10901
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/workflowUsages",
10902
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
10903
+ "POST /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
10904
+ "DELETE /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{owningObjectId}/avatar/{id}",
10905
+ "POST /ex/jira/{cloudId}/rest/api/3/user",
10906
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user",
10907
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/columns",
10908
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/columns",
10909
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow",
10910
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow",
10911
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history",
10912
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history/list",
10913
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
10914
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
10915
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10916
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10917
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10918
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10919
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/{entityId}",
10920
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages",
10921
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/projectUsages",
10922
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/workflowSchemes",
10923
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows",
10924
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/capabilities",
10925
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create",
10926
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create/validation",
10927
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/defaultEditor",
10928
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/preview",
10929
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/search",
10930
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update",
10931
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update/validation",
10932
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme",
10933
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme",
10934
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
10935
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
10936
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/project/switch",
10937
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/read",
10938
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update",
10939
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update/mappings",
10940
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10941
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10942
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10943
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/createdraft",
10944
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10945
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10946
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10947
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10948
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10949
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10950
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10951
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10952
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10953
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10954
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10955
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10956
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/publish",
10957
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10958
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10959
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10960
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10961
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10962
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10963
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10964
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10965
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10966
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{workflowSchemeId}/projectUsages"
10967
+ ]
10968
+ },
10969
+ {
10970
+ name: "manage:jira-project",
10971
+ description: "Create and edit project settings and create new project-level objects, for example, versions, components.",
10972
+ rules: [
10973
+ "POST /ex/jira/{cloudId}/rest/api/3/component",
10974
+ "PUT /ex/jira/{cloudId}/rest/api/3/component/{id}",
10975
+ "DELETE /ex/jira/{cloudId}/rest/api/3/component/{id}",
10976
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/contexts",
10977
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/screens",
10978
+ "POST /ex/jira/{cloudId}/rest/api/3/forge/panel/action/bulk/async",
10979
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
10980
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
10981
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
10982
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/archive",
10983
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar",
10984
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar/{id}",
10985
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar2",
10986
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
10987
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
10988
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features/{featureKey}",
10989
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
10990
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
10991
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10992
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10993
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
10994
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
10995
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
10996
+ "POST /ex/jira/{cloudId}/rest/api/3/projectCategory",
10997
+ "PUT /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
10998
+ "DELETE /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
10999
+ "GET /ex/jira/{cloudId}/rest/api/3/screens",
11000
+ "POST /ex/jira/{cloudId}/rest/api/3/screens",
11001
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/addToDefault/{fieldId}",
11002
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/tabs",
11003
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11004
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11005
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/availableFields",
11006
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11007
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11008
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11009
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11010
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11011
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11012
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}",
11013
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}/move",
11014
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/move/{pos}",
11015
+ "GET /ex/jira/{cloudId}/rest/api/3/screenscheme",
11016
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
11017
+ "POST /ex/jira/{cloudId}/rest/api/3/version",
11018
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}",
11019
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{id}",
11020
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/mergeto/{moveIssuesTo}",
11021
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/move",
11022
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/removeAndSwap",
11023
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/search"
11024
+ ]
11025
+ },
11026
+ {
11027
+ name: "manage:jira-webhook",
11028
+ description: "Manage Jira webhooks. Enables an OAuth app to register and unregister dynamic webhooks in Jira. It also provides for fetching of registered webhooks.",
11029
+ rules: [
11030
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11031
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11032
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11033
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11034
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh"
11035
+ ]
11036
+ },
11037
+ {
11038
+ name: "read:jira-user",
11039
+ description: "View user information in Jira that you have access to, including usernames, email addresses, and avatars.",
11040
+ rules: [
11041
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration",
11042
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11043
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11044
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11045
+ "GET /ex/jira/{cloudId}/rest/api/3/group",
11046
+ "GET /ex/jira/{cloudId}/rest/api/3/group/bulk",
11047
+ "GET /ex/jira/{cloudId}/rest/api/3/groups/picker",
11048
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/pdcleaner",
11049
+ "GET /ex/jira/{cloudId}/rest/api/3/myself",
11050
+ "GET /ex/jira/{cloudId}/rest/api/3/user",
11051
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/multiProjectSearch",
11052
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/search",
11053
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk",
11054
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk/migration",
11055
+ "GET /ex/jira/{cloudId}/rest/api/3/user/columns",
11056
+ "GET /ex/jira/{cloudId}/rest/api/3/user/groups",
11057
+ "GET /ex/jira/{cloudId}/rest/api/3/user/permission/search",
11058
+ "GET /ex/jira/{cloudId}/rest/api/3/user/picker",
11059
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties",
11060
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11061
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search",
11062
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query",
11063
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query/key",
11064
+ "GET /ex/jira/{cloudId}/rest/api/3/user/viewissue/search",
11065
+ "GET /ex/jira/{cloudId}/rest/api/3/users",
11066
+ "GET /ex/jira/{cloudId}/rest/api/3/users/search"
11067
+ ]
11068
+ },
11069
+ {
11070
+ name: "read:jira-work",
11071
+ description: "Read project and issue data. Search for issues and objects associated with issues (such as attachments and worklogs).",
11072
+ rules: [
11073
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/content/{id}",
11074
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/meta",
11075
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/thumbnail/{id}",
11076
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11077
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/human",
11078
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/raw",
11079
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11080
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11081
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/queue/{taskId}",
11082
+ "POST /ex/jira/{cloudId}/rest/api/3/changelog/bulkfetch",
11083
+ "GET /ex/jira/{cloudId}/rest/api/3/classification-levels",
11084
+ "POST /ex/jira/{cloudId}/rest/api/3/comment/list",
11085
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties",
11086
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11087
+ "GET /ex/jira/{cloudId}/rest/api/3/component",
11088
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}",
11089
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}/relatedIssueCounts",
11090
+ "GET /ex/jira/{cloudId}/rest/api/3/customFieldOption/{id}",
11091
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard",
11092
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/gadgets",
11093
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/search",
11094
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11095
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11096
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties",
11097
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11098
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11099
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy",
11100
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy/project",
11101
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11102
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11103
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11104
+ "GET /ex/jira/{cloudId}/rest/api/3/field",
11105
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search",
11106
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search/trashed",
11107
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/edit",
11108
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/search",
11109
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11110
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/favourite",
11111
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/my",
11112
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/search",
11113
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11114
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11115
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11116
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11117
+ "GET /ex/jira/{cloudId}/rest/api/3/groupuserpicker",
11118
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulkfetch",
11119
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta",
11120
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes",
11121
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}",
11122
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/limit/report",
11123
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/picker",
11124
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/watching",
11125
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11126
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog",
11127
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog/list",
11128
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11129
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11130
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/editmeta",
11131
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties",
11132
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11133
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11134
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11135
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11136
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11137
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11138
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11139
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11140
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties",
11141
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11142
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11143
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType",
11144
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
11145
+ "PUT /ex/jira/{cloudId}/rest/api/3/issues/archive/export",
11146
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype",
11147
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/project",
11148
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
11149
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/alternatives",
11150
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties",
11151
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
11152
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11153
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11154
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata/suggestions",
11155
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/match",
11156
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/parse",
11157
+ "GET /ex/jira/{cloudId}/rest/api/3/label",
11158
+ "GET /ex/jira/{cloudId}/rest/api/3/mypermissions",
11159
+ "POST /ex/jira/{cloudId}/rest/api/3/permissions/project",
11160
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme",
11161
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
11162
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
11163
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
11164
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan",
11165
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11166
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team",
11167
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11168
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11169
+ "GET /ex/jira/{cloudId}/rest/api/3/priority",
11170
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/{id}",
11171
+ "GET /ex/jira/{cloudId}/rest/api/3/project",
11172
+ "GET /ex/jira/{cloudId}/rest/api/3/project/recent",
11173
+ "GET /ex/jira/{cloudId}/rest/api/3/project/search",
11174
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type",
11175
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/accessible",
11176
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}",
11177
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}/accessible",
11178
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
11179
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatars",
11180
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-config",
11181
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
11182
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/component",
11183
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/components",
11184
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features",
11185
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties",
11186
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
11187
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role",
11188
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11189
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/roledetails",
11190
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/statuses",
11191
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/version",
11192
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/versions",
11193
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/hierarchy",
11194
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/issuesecuritylevelscheme",
11195
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/notificationscheme",
11196
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
11197
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/securitylevel",
11198
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory",
11199
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
11200
+ "GET /ex/jira/{cloudId}/rest/api/3/projects/fields",
11201
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/key",
11202
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectKey",
11203
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectName",
11204
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution",
11205
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/search",
11206
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
11207
+ "GET /ex/jira/{cloudId}/rest/api/3/search",
11208
+ "POST /ex/jira/{cloudId}/rest/api/3/search",
11209
+ "POST /ex/jira/{cloudId}/rest/api/3/search/approximate-count",
11210
+ "GET /ex/jira/{cloudId}/rest/api/3/search/jql",
11211
+ "POST /ex/jira/{cloudId}/rest/api/3/search/jql",
11212
+ "GET /ex/jira/{cloudId}/rest/api/3/status",
11213
+ "GET /ex/jira/{cloudId}/rest/api/3/status/{idOrName}",
11214
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory",
11215
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory/{idOrKey}",
11216
+ "GET /ex/jira/{cloudId}/rest/api/3/task/{taskId}",
11217
+ "GET /ex/jira/{cloudId}/rest/api/3/uiModifications",
11218
+ "POST /ex/jira/{cloudId}/rest/api/3/uiModifications",
11219
+ "PUT /ex/jira/{cloudId}/rest/api/3/uiModifications/{uiModificationId}",
11220
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}",
11221
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/avatar/{id}",
11222
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/owner/{entityId}",
11223
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}",
11224
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedIssueCounts",
11225
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11226
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/unresolvedIssueCount",
11227
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11228
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11229
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11230
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11231
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh",
11232
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/deleted",
11233
+ "POST /ex/jira/{cloudId}/rest/api/3/worklog/list",
11234
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/updated"
11235
+ ]
11236
+ },
11237
+ {
11238
+ name: "write:jira-work",
11239
+ description: "Create and edit issues in Jira, post comments, create worklogs, and delete issues.",
11240
+ rules: [
11241
+ "DELETE /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11242
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/delete",
11243
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11244
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/move",
11245
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11246
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/unwatch",
11247
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/watch",
11248
+ "PUT /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11249
+ "DELETE /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11250
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard",
11251
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/bulk/edit",
11252
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11253
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11254
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11255
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11256
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11257
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11258
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11259
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{id}/copy",
11260
+ "POST /ex/jira/{cloudId}/rest/api/3/filter",
11261
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11262
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11263
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11264
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11265
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11266
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11267
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11268
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/owner",
11269
+ "POST /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11270
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11271
+ "POST /ex/jira/{cloudId}/rest/api/3/issue",
11272
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/archive",
11273
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/archive",
11274
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulk",
11275
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties",
11276
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties/multi",
11277
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11278
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11279
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/unarchive",
11280
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11281
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11282
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee",
11283
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/attachments",
11284
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11285
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11286
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11287
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/notify",
11288
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11289
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11290
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11291
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11292
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11293
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11294
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11295
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11296
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11297
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11298
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11299
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11300
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11301
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/move",
11302
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11303
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11304
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11305
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11306
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLink",
11307
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11308
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan",
11309
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11310
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/archive",
11311
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/duplicate",
11312
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian",
11313
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11314
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11315
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly",
11316
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11317
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11318
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/trash",
11319
+ "POST /ex/jira/{cloudId}/rest/api/3/task/{taskId}/cancel",
11320
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11321
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11322
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11323
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11324
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{versionId}/relatedwork/{relatedWorkId}"
11325
+ ]
11326
+ }
11327
+ ]
11328
+ }
11329
+ ]
11330
+ };
11331
+
10374
11332
  // ../../packages/core/src/firewalls/slack.generated.ts
10375
11333
  var slackFirewall = {
10376
11334
  name: "slack",
@@ -11201,12 +12159,14 @@ var slackFirewall = {
11201
12159
 
11202
12160
  // ../../packages/core/src/firewalls/index.ts
11203
12161
  var builtinFirewalls = {
12162
+ confluence: confluenceFirewall,
11204
12163
  github: githubFirewall,
11205
12164
  gmail: gmailFirewall,
11206
12165
  "google-calendar": googleCalendarFirewall,
11207
12166
  "google-docs": googleDocsFirewall,
11208
12167
  "google-drive": googleDriveFirewall,
11209
12168
  "google-sheets": googleSheetsFirewall,
12169
+ jira: jiraFirewall,
11210
12170
  slack: slackFirewall
11211
12171
  };
11212
12172
 
@@ -13203,7 +14163,7 @@ function getConfigPath() {
13203
14163
  return join2(homedir2(), ".vm0", "config.json");
13204
14164
  }
13205
14165
  var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
13206
- console.log(chalk4.bold(`VM0 CLI v${"9.74.4"}`));
14166
+ console.log(chalk4.bold(`VM0 CLI v${"9.75.0"}`));
13207
14167
  console.log();
13208
14168
  const config = await loadConfig();
13209
14169
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -13841,35 +14801,6 @@ async function getConnector(type2) {
13841
14801
  handleError(result, `Failed to get connector "${type2}"`);
13842
14802
  }
13843
14803
 
13844
- // src/lib/api/domains/usage.ts
13845
- async function getUsage(options) {
13846
- const baseUrl = await getBaseUrl();
13847
- const headers = await getHeaders();
13848
- const activeOrg = await getActiveOrg();
13849
- if (!activeOrg) {
13850
- throw new Error(
13851
- "No active organization configured. Run: vm0 org use <slug>"
13852
- );
13853
- }
13854
- const params = new URLSearchParams({
13855
- start_date: options.startDate,
13856
- end_date: options.endDate,
13857
- org: activeOrg
13858
- });
13859
- const response = await fetch(`${baseUrl}/api/usage?${params}`, {
13860
- method: "GET",
13861
- headers
13862
- });
13863
- if (!response.ok) {
13864
- const body = await response.json();
13865
- handleError(
13866
- { status: response.status, body },
13867
- "Failed to fetch usage data"
13868
- );
13869
- }
13870
- return response.json();
13871
- }
13872
-
13873
14804
  // src/lib/api/domains/user-preferences.ts
13874
14805
  import { initClient as initClient11 } from "@ts-rest/core";
13875
14806
  async function getUserPreferences() {
@@ -15263,7 +16194,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
15263
16194
  options.autoUpdate = false;
15264
16195
  }
15265
16196
  if (options.autoUpdate !== false) {
15266
- await startSilentUpgrade("9.74.4");
16197
+ await startSilentUpgrade("9.75.0");
15267
16198
  }
15268
16199
  try {
15269
16200
  let result;
@@ -16098,7 +17029,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
16098
17029
  withErrorHandler(
16099
17030
  async (identifier, prompt, options) => {
16100
17031
  if (options.autoUpdate !== false) {
16101
- await startSilentUpgrade("9.74.4");
17032
+ await startSilentUpgrade("9.75.0");
16102
17033
  }
16103
17034
  const { org, name, version } = parseIdentifier(identifier);
16104
17035
  let composeId;
@@ -17854,7 +18785,7 @@ var cookAction = new Command35().name("cook").description("Quick start: prepare,
17854
18785
  withErrorHandler(
17855
18786
  async (prompt, options) => {
17856
18787
  if (options.autoUpdate !== false) {
17857
- const shouldExit = await checkAndUpgrade("9.74.4", prompt);
18788
+ const shouldExit = await checkAndUpgrade("9.75.0", prompt);
17858
18789
  if (shouldExit) {
17859
18790
  process.exit(0);
17860
18791
  }
@@ -18566,26 +19497,6 @@ var ApiClient = class {
18566
19497
  const message = errorBody.error?.message || `Failed to list runs for schedule "${params.name}"`;
18567
19498
  throw new Error(message);
18568
19499
  }
18569
- /**
18570
- * Get usage statistics
18571
- */
18572
- async getUsage(options) {
18573
- const baseUrl = await this.getBaseUrl();
18574
- const headers = await this.getHeaders();
18575
- const params = new URLSearchParams({
18576
- start_date: options.startDate,
18577
- end_date: options.endDate
18578
- });
18579
- const response = await fetch(`${baseUrl}/api/usage?${params}`, {
18580
- method: "GET",
18581
- headers
18582
- });
18583
- if (!response.ok) {
18584
- const error = await response.json();
18585
- throw new Error(error.error?.message || "Failed to fetch usage data");
18586
- }
18587
- return response.json();
18588
- }
18589
19500
  /**
18590
19501
  * Generic GET request
18591
19502
  */
@@ -20569,9 +21480,6 @@ var initCommand4 = new Command68().name("init").description("Initialize a new VM
20569
21480
  console.log(
20570
21481
  ` 2. Edit ${chalk60.cyan("AGENTS.md")} to customize your agent's workflow`
20571
21482
  );
20572
- console.log(
20573
- ` Or install Claude plugin: ${chalk60.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
20574
- );
20575
21483
  console.log(
20576
21484
  ` 3. Run your agent: ${chalk60.cyan(`vm0 cook "let's start working"`)}`
20577
21485
  );
@@ -21510,217 +22418,68 @@ var disableCommand = new Command74().name("disable").description("Disable a sche
21510
22418
  // src/commands/schedule/index.ts
21511
22419
  var scheduleCommand = new Command75().name("schedule").description("Manage agent schedules").addCommand(setupCommand2).addCommand(listCommand10).addCommand(statusCommand7).addCommand(deleteCommand2).addCommand(enableCommand).addCommand(disableCommand);
21512
22420
 
21513
- // src/commands/usage/index.ts
21514
- import { Command as Command76 } from "commander";
21515
- import chalk67 from "chalk";
21516
-
21517
- // src/lib/utils/duration-formatter.ts
21518
- function formatDuration(ms) {
21519
- if (ms === null || ms === void 0 || ms === 0) {
21520
- return "-";
21521
- }
21522
- if (ms < 0) {
21523
- return "-";
21524
- }
21525
- const totalSeconds = Math.floor(ms / 1e3);
21526
- if (totalSeconds === 0) {
21527
- return "< 1s";
21528
- }
21529
- const hours = Math.floor(totalSeconds / 3600);
21530
- const minutes = Math.floor(totalSeconds % 3600 / 60);
21531
- const seconds = totalSeconds % 60;
21532
- const parts = [];
21533
- if (hours > 0) {
21534
- parts.push(`${hours}h`);
21535
- }
21536
- if (minutes > 0) {
21537
- parts.push(`${minutes}m`);
21538
- }
21539
- if (seconds > 0) {
21540
- parts.push(`${seconds}s`);
21541
- }
21542
- return parts.join(" ");
21543
- }
21544
-
21545
- // src/commands/usage/index.ts
21546
- var MAX_RANGE_MS = 30 * 24 * 60 * 60 * 1e3;
21547
- var DEFAULT_RANGE_MS = 7 * 24 * 60 * 60 * 1e3;
21548
- function formatDateDisplay(dateStr) {
21549
- const date = new Date(dateStr);
21550
- return date.toLocaleDateString("en-US", { month: "short", day: "numeric" });
21551
- }
21552
- function formatDateRange(start, end) {
21553
- const startDate = new Date(start);
21554
- const endDate = new Date(end);
21555
- endDate.setDate(endDate.getDate() - 1);
21556
- const startStr = startDate.toLocaleDateString("en-US", {
21557
- month: "short",
21558
- day: "numeric"
21559
- });
21560
- const endStr = endDate.toLocaleDateString("en-US", {
21561
- month: "short",
21562
- day: "numeric",
21563
- year: "numeric"
21564
- });
21565
- return `${startStr} - ${endStr}`;
21566
- }
21567
- function fillMissingDates(daily, startDate, endDate) {
21568
- const dateMap = /* @__PURE__ */ new Map();
21569
- for (const day of daily) {
21570
- dateMap.set(day.date, day);
21571
- }
21572
- const result = [];
21573
- const current = new Date(startDate);
21574
- current.setUTCHours(0, 0, 0, 0);
21575
- while (current < endDate) {
21576
- const dateStr = current.toISOString().split("T")[0];
21577
- const existing = dateMap.get(dateStr);
21578
- if (existing) {
21579
- result.push(existing);
21580
- } else {
21581
- result.push({ date: dateStr, run_count: 0, run_time_ms: 0 });
21582
- }
21583
- current.setDate(current.getDate() + 1);
21584
- }
21585
- result.sort((a, b) => b.date.localeCompare(a.date));
21586
- return result;
21587
- }
21588
- var usageCommand = new Command76().name("usage").description("View usage statistics").option("--since <date>", "Start date (ISO format or relative: 7d, 30d)").option(
21589
- "--until <date>",
21590
- "End date (ISO format or relative, defaults to now)"
21591
- ).action(
21592
- withErrorHandler(async (options) => {
21593
- const now = /* @__PURE__ */ new Date();
21594
- let endDate;
21595
- let startDate;
21596
- if (options.until) {
21597
- try {
21598
- const untilMs = parseTime(options.until);
21599
- endDate = new Date(untilMs);
21600
- } catch {
21601
- throw new Error(
21602
- "Invalid --until format. Use ISO (2026-01-01) or relative (7d, 30d)"
21603
- );
21604
- }
21605
- } else {
21606
- endDate = now;
21607
- }
21608
- if (options.since) {
21609
- try {
21610
- const sinceMs = parseTime(options.since);
21611
- startDate = new Date(sinceMs);
21612
- } catch {
21613
- throw new Error(
21614
- "Invalid --since format. Use ISO (2026-01-01) or relative (7d, 30d)"
21615
- );
21616
- }
21617
- } else {
21618
- startDate = new Date(endDate.getTime() - DEFAULT_RANGE_MS);
21619
- }
21620
- if (startDate >= endDate) {
21621
- throw new Error("--since must be before --until");
21622
- }
21623
- const rangeMs = endDate.getTime() - startDate.getTime();
21624
- if (rangeMs > MAX_RANGE_MS) {
21625
- throw new Error(
21626
- "Time range exceeds maximum of 30 days. Use --until to specify an end date"
21627
- );
21628
- }
21629
- const usage = await getUsage({
21630
- startDate: startDate.toISOString(),
21631
- endDate: endDate.toISOString()
21632
- });
21633
- const filledDaily = fillMissingDates(
21634
- usage.daily,
21635
- new Date(usage.period.start),
21636
- new Date(usage.period.end)
21637
- );
21638
- console.log();
21639
- console.log(
21640
- chalk67.bold(
21641
- `Usage Summary (${formatDateRange(usage.period.start, usage.period.end)})`
21642
- )
21643
- );
21644
- console.log();
21645
- console.log(chalk67.dim("DATE RUNS RUN TIME"));
21646
- for (const day of filledDaily) {
21647
- const dateDisplay = formatDateDisplay(day.date).padEnd(10);
21648
- const runsDisplay = String(day.run_count).padStart(6);
21649
- const timeDisplay = formatDuration(day.run_time_ms);
21650
- console.log(`${dateDisplay}${runsDisplay} ${timeDisplay}`);
21651
- }
21652
- console.log(chalk67.dim("\u2500".repeat(29)));
21653
- const totalRunsDisplay = String(usage.summary.total_runs).padStart(6);
21654
- const totalTimeDisplay = formatDuration(usage.summary.total_run_time_ms);
21655
- console.log(
21656
- `${"TOTAL".padEnd(10)}${totalRunsDisplay} ${totalTimeDisplay}`
21657
- );
21658
- console.log();
21659
- })
21660
- );
21661
-
21662
22421
  // src/commands/secret/index.ts
21663
- import { Command as Command80 } from "commander";
22422
+ import { Command as Command79 } from "commander";
21664
22423
 
21665
22424
  // src/commands/secret/list.ts
21666
- import { Command as Command77 } from "commander";
21667
- import chalk68 from "chalk";
21668
- var listCommand11 = new Command77().name("list").alias("ls").description("List all secrets").action(
22425
+ import { Command as Command76 } from "commander";
22426
+ import chalk67 from "chalk";
22427
+ var listCommand11 = new Command76().name("list").alias("ls").description("List all secrets").action(
21669
22428
  withErrorHandler(async () => {
21670
22429
  const result = await listSecrets();
21671
22430
  if (result.secrets.length === 0) {
21672
- console.log(chalk68.dim("No secrets found"));
22431
+ console.log(chalk67.dim("No secrets found"));
21673
22432
  console.log();
21674
22433
  console.log("To add a secret:");
21675
- console.log(chalk68.cyan(" vm0 secret set MY_API_KEY --body <value>"));
22434
+ console.log(chalk67.cyan(" vm0 secret set MY_API_KEY --body <value>"));
21676
22435
  return;
21677
22436
  }
21678
- console.log(chalk68.bold("Secrets:"));
22437
+ console.log(chalk67.bold("Secrets:"));
21679
22438
  console.log();
21680
22439
  for (const secret of result.secrets) {
21681
22440
  let typeIndicator = "";
21682
22441
  let derivedLine = null;
21683
22442
  if (secret.type === "model-provider") {
21684
- typeIndicator = chalk68.dim(" [model-provider]");
22443
+ typeIndicator = chalk67.dim(" [model-provider]");
21685
22444
  } else if (secret.type === "connector") {
21686
22445
  const derived = getConnectorDerivedNames(secret.name);
21687
22446
  if (derived) {
21688
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21689
- derivedLine = chalk68.dim(
22447
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22448
+ derivedLine = chalk67.dim(
21690
22449
  `Available as: ${derived.envVarNames.join(", ")}`
21691
22450
  );
21692
22451
  } else {
21693
- typeIndicator = chalk68.dim(" [connector]");
22452
+ typeIndicator = chalk67.dim(" [connector]");
21694
22453
  }
21695
22454
  } else if (secret.type === "user") {
21696
22455
  const derived = getConnectorDerivedNames(secret.name);
21697
22456
  if (derived) {
21698
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21699
- derivedLine = chalk68.dim(
22457
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22458
+ derivedLine = chalk67.dim(
21700
22459
  `Available as: ${derived.envVarNames.join(", ")}`
21701
22460
  );
21702
22461
  }
21703
22462
  }
21704
- console.log(` ${chalk68.cyan(secret.name)}${typeIndicator}`);
22463
+ console.log(` ${chalk67.cyan(secret.name)}${typeIndicator}`);
21705
22464
  if (derivedLine) {
21706
22465
  console.log(` ${derivedLine}`);
21707
22466
  }
21708
22467
  if (secret.description) {
21709
- console.log(` ${chalk68.dim(secret.description)}`);
22468
+ console.log(` ${chalk67.dim(secret.description)}`);
21710
22469
  }
21711
22470
  console.log(
21712
- ` ${chalk68.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
22471
+ ` ${chalk67.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
21713
22472
  );
21714
22473
  console.log();
21715
22474
  }
21716
- console.log(chalk68.dim(`Total: ${result.secrets.length} secret(s)`));
22475
+ console.log(chalk67.dim(`Total: ${result.secrets.length} secret(s)`));
21717
22476
  })
21718
22477
  );
21719
22478
 
21720
22479
  // src/commands/secret/set.ts
21721
- import { Command as Command78 } from "commander";
21722
- import chalk69 from "chalk";
21723
- var setCommand4 = new Command78().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
22480
+ import { Command as Command77 } from "commander";
22481
+ import chalk68 from "chalk";
22482
+ var setCommand4 = new Command77().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
21724
22483
  "-b, --body <value>",
21725
22484
  "Secret value (required in non-interactive mode)"
21726
22485
  ).option("-d, --description <description>", "Optional description").action(
@@ -21759,19 +22518,19 @@ var setCommand4 = new Command78().name("set").description("Create or update a se
21759
22518
  }
21760
22519
  throw error;
21761
22520
  }
21762
- console.log(chalk69.green(`\u2713 Secret "${secret.name}" saved`));
22521
+ console.log(chalk68.green(`\u2713 Secret "${secret.name}" saved`));
21763
22522
  console.log();
21764
22523
  console.log("Use in vm0.yaml:");
21765
- console.log(chalk69.cyan(` environment:`));
21766
- console.log(chalk69.cyan(` ${name}: \${{ secrets.${name} }}`));
22524
+ console.log(chalk68.cyan(` environment:`));
22525
+ console.log(chalk68.cyan(` ${name}: \${{ secrets.${name} }}`));
21767
22526
  }
21768
22527
  )
21769
22528
  );
21770
22529
 
21771
22530
  // src/commands/secret/delete.ts
21772
- import { Command as Command79 } from "commander";
21773
- import chalk70 from "chalk";
21774
- var deleteCommand3 = new Command79().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
22531
+ import { Command as Command78 } from "commander";
22532
+ import chalk69 from "chalk";
22533
+ var deleteCommand3 = new Command78().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21775
22534
  withErrorHandler(async (name, options) => {
21776
22535
  try {
21777
22536
  await getSecret(name);
@@ -21790,61 +22549,61 @@ var deleteCommand3 = new Command79().name("delete").description("Delete a secret
21790
22549
  false
21791
22550
  );
21792
22551
  if (!confirmed) {
21793
- console.log(chalk70.dim("Cancelled"));
22552
+ console.log(chalk69.dim("Cancelled"));
21794
22553
  return;
21795
22554
  }
21796
22555
  }
21797
22556
  await deleteSecret(name);
21798
- console.log(chalk70.green(`\u2713 Secret "${name}" deleted`));
22557
+ console.log(chalk69.green(`\u2713 Secret "${name}" deleted`));
21799
22558
  })
21800
22559
  );
21801
22560
 
21802
22561
  // src/commands/secret/index.ts
21803
- var secretCommand = new Command80().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand11).addCommand(setCommand4).addCommand(deleteCommand3);
22562
+ var secretCommand = new Command79().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand11).addCommand(setCommand4).addCommand(deleteCommand3);
21804
22563
 
21805
22564
  // src/commands/variable/index.ts
21806
- import { Command as Command84 } from "commander";
22565
+ import { Command as Command83 } from "commander";
21807
22566
 
21808
22567
  // src/commands/variable/list.ts
21809
- import { Command as Command81 } from "commander";
21810
- import chalk71 from "chalk";
22568
+ import { Command as Command80 } from "commander";
22569
+ import chalk70 from "chalk";
21811
22570
  function truncateValue2(value, maxLength = 60) {
21812
22571
  if (value.length <= maxLength) {
21813
22572
  return value;
21814
22573
  }
21815
22574
  return value.slice(0, maxLength - 15) + "... [truncated]";
21816
22575
  }
21817
- var listCommand12 = new Command81().name("list").alias("ls").description("List all variables").action(
22576
+ var listCommand12 = new Command80().name("list").alias("ls").description("List all variables").action(
21818
22577
  withErrorHandler(async () => {
21819
22578
  const result = await listVariables();
21820
22579
  if (result.variables.length === 0) {
21821
- console.log(chalk71.dim("No variables found"));
22580
+ console.log(chalk70.dim("No variables found"));
21822
22581
  console.log();
21823
22582
  console.log("To add a variable:");
21824
- console.log(chalk71.cyan(" vm0 variable set MY_VAR <value>"));
22583
+ console.log(chalk70.cyan(" vm0 variable set MY_VAR <value>"));
21825
22584
  return;
21826
22585
  }
21827
- console.log(chalk71.bold("Variables:"));
22586
+ console.log(chalk70.bold("Variables:"));
21828
22587
  console.log();
21829
22588
  for (const variable of result.variables) {
21830
22589
  const displayValue = truncateValue2(variable.value);
21831
- console.log(` ${chalk71.cyan(variable.name)} = ${displayValue}`);
22590
+ console.log(` ${chalk70.cyan(variable.name)} = ${displayValue}`);
21832
22591
  if (variable.description) {
21833
- console.log(` ${chalk71.dim(variable.description)}`);
22592
+ console.log(` ${chalk70.dim(variable.description)}`);
21834
22593
  }
21835
22594
  console.log(
21836
- ` ${chalk71.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
22595
+ ` ${chalk70.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
21837
22596
  );
21838
22597
  console.log();
21839
22598
  }
21840
- console.log(chalk71.dim(`Total: ${result.variables.length} variable(s)`));
22599
+ console.log(chalk70.dim(`Total: ${result.variables.length} variable(s)`));
21841
22600
  })
21842
22601
  );
21843
22602
 
21844
22603
  // src/commands/variable/set.ts
21845
- import { Command as Command82 } from "commander";
21846
- import chalk72 from "chalk";
21847
- var setCommand5 = new Command82().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
22604
+ import { Command as Command81 } from "commander";
22605
+ import chalk71 from "chalk";
22606
+ var setCommand5 = new Command81().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
21848
22607
  withErrorHandler(
21849
22608
  async (name, value, options) => {
21850
22609
  let variable;
@@ -21864,19 +22623,19 @@ var setCommand5 = new Command82().name("set").description("Create or update a va
21864
22623
  }
21865
22624
  throw error;
21866
22625
  }
21867
- console.log(chalk72.green(`\u2713 Variable "${variable.name}" saved`));
22626
+ console.log(chalk71.green(`\u2713 Variable "${variable.name}" saved`));
21868
22627
  console.log();
21869
22628
  console.log("Use in vm0.yaml:");
21870
- console.log(chalk72.cyan(` environment:`));
21871
- console.log(chalk72.cyan(` ${name}: \${{ vars.${name} }}`));
22629
+ console.log(chalk71.cyan(` environment:`));
22630
+ console.log(chalk71.cyan(` ${name}: \${{ vars.${name} }}`));
21872
22631
  }
21873
22632
  )
21874
22633
  );
21875
22634
 
21876
22635
  // src/commands/variable/delete.ts
21877
- import { Command as Command83 } from "commander";
21878
- import chalk73 from "chalk";
21879
- var deleteCommand4 = new Command83().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
22636
+ import { Command as Command82 } from "commander";
22637
+ import chalk72 from "chalk";
22638
+ var deleteCommand4 = new Command82().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21880
22639
  withErrorHandler(async (name, options) => {
21881
22640
  try {
21882
22641
  await getVariable(name);
@@ -21895,24 +22654,24 @@ var deleteCommand4 = new Command83().name("delete").description("Delete a variab
21895
22654
  false
21896
22655
  );
21897
22656
  if (!confirmed) {
21898
- console.log(chalk73.dim("Cancelled"));
22657
+ console.log(chalk72.dim("Cancelled"));
21899
22658
  return;
21900
22659
  }
21901
22660
  }
21902
22661
  await deleteVariable(name);
21903
- console.log(chalk73.green(`\u2713 Variable "${name}" deleted`));
22662
+ console.log(chalk72.green(`\u2713 Variable "${name}" deleted`));
21904
22663
  })
21905
22664
  );
21906
22665
 
21907
22666
  // src/commands/variable/index.ts
21908
- var variableCommand = new Command84().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand12).addCommand(setCommand5).addCommand(deleteCommand4);
22667
+ var variableCommand = new Command83().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand12).addCommand(setCommand5).addCommand(deleteCommand4);
21909
22668
 
21910
22669
  // src/commands/connector/index.ts
21911
- import { Command as Command89 } from "commander";
22670
+ import { Command as Command88 } from "commander";
21912
22671
 
21913
22672
  // src/commands/connector/connect.ts
21914
- import { Command as Command85 } from "commander";
21915
- import chalk75 from "chalk";
22673
+ import { Command as Command84 } from "commander";
22674
+ import chalk74 from "chalk";
21916
22675
  import { initClient as initClient15 } from "@ts-rest/core";
21917
22676
 
21918
22677
  // src/commands/connector/lib/computer/start-services.ts
@@ -21921,7 +22680,7 @@ import { access as access2, constants } from "fs/promises";
21921
22680
  import { createServer } from "net";
21922
22681
  import { homedir as homedir4 } from "os";
21923
22682
  import { join as join12 } from "path";
21924
- import chalk74 from "chalk";
22683
+ import chalk73 from "chalk";
21925
22684
 
21926
22685
  // src/commands/connector/lib/computer/ngrok.ts
21927
22686
  import ngrok from "@ngrok/ngrok";
@@ -21995,7 +22754,7 @@ async function checkComputerDependencies() {
21995
22754
  }
21996
22755
  }
21997
22756
  async function startComputerServices(credentials) {
21998
- console.log(chalk74.cyan("Starting computer connector services..."));
22757
+ console.log(chalk73.cyan("Starting computer connector services..."));
21999
22758
  const wsgidavBinary = await findBinary("wsgidav");
22000
22759
  if (!wsgidavBinary) {
22001
22760
  throw new Error(
@@ -22022,7 +22781,7 @@ async function startComputerServices(credentials) {
22022
22781
  );
22023
22782
  wsgidav.stdout?.on("data", (data) => process.stdout.write(data));
22024
22783
  wsgidav.stderr?.on("data", (data) => process.stderr.write(data));
22025
- console.log(chalk74.green("\u2713 WebDAV server started"));
22784
+ console.log(chalk73.green("\u2713 WebDAV server started"));
22026
22785
  const chrome = spawn2(
22027
22786
  chromeBinary,
22028
22787
  [
@@ -22036,7 +22795,7 @@ async function startComputerServices(credentials) {
22036
22795
  );
22037
22796
  chrome.stdout?.on("data", (data) => process.stdout.write(data));
22038
22797
  chrome.stderr?.on("data", (data) => process.stderr.write(data));
22039
- console.log(chalk74.green("\u2713 Chrome started"));
22798
+ console.log(chalk73.green("\u2713 Chrome started"));
22040
22799
  try {
22041
22800
  await startNgrokTunnels(
22042
22801
  credentials.ngrokToken,
@@ -22045,18 +22804,18 @@ async function startComputerServices(credentials) {
22045
22804
  cdpPort
22046
22805
  );
22047
22806
  console.log(
22048
- chalk74.green(
22807
+ chalk73.green(
22049
22808
  `\u2713 ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`
22050
22809
  )
22051
22810
  );
22052
22811
  console.log();
22053
- console.log(chalk74.green("\u2713 Computer connector active"));
22812
+ console.log(chalk73.green("\u2713 Computer connector active"));
22054
22813
  console.log(` WebDAV: ~/Downloads \u2192 webdav.${credentials.domain}`);
22055
22814
  console.log(
22056
22815
  ` Chrome CDP: port ${cdpPort} \u2192 chrome.${credentials.domain}`
22057
22816
  );
22058
22817
  console.log();
22059
- console.log(chalk74.dim("Press ^C twice to disconnect"));
22818
+ console.log(chalk73.dim("Press ^C twice to disconnect"));
22060
22819
  console.log();
22061
22820
  let sigintCount = 0;
22062
22821
  await new Promise((resolve2) => {
@@ -22070,7 +22829,7 @@ async function startComputerServices(credentials) {
22070
22829
  const onSigint = () => {
22071
22830
  sigintCount++;
22072
22831
  if (sigintCount === 1) {
22073
- console.log(chalk74.dim("\nPress ^C again to disconnect and exit..."));
22832
+ console.log(chalk73.dim("\nPress ^C again to disconnect and exit..."));
22074
22833
  } else {
22075
22834
  done();
22076
22835
  }
@@ -22080,11 +22839,11 @@ async function startComputerServices(credentials) {
22080
22839
  });
22081
22840
  } finally {
22082
22841
  console.log();
22083
- console.log(chalk74.cyan("Stopping services..."));
22842
+ console.log(chalk73.cyan("Stopping services..."));
22084
22843
  wsgidav.kill("SIGTERM");
22085
22844
  chrome.kill("SIGTERM");
22086
22845
  await stopNgrokTunnels();
22087
- console.log(chalk74.green("\u2713 Services stopped"));
22846
+ console.log(chalk73.green("\u2713 Services stopped"));
22088
22847
  }
22089
22848
  }
22090
22849
 
@@ -22109,10 +22868,10 @@ async function getHeaders2() {
22109
22868
  function renderHelpText(text) {
22110
22869
  return text.replace(
22111
22870
  /\[([^\]]+)\]\(([^)]+)\)/g,
22112
- (_m, label, url) => `${label} (${chalk75.cyan(url)})`
22113
- ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk75.bold(content)).replace(
22871
+ (_m, label, url) => `${label} (${chalk74.cyan(url)})`
22872
+ ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk74.bold(content)).replace(
22114
22873
  /^> (.+)$/gm,
22115
- (_m, content) => chalk75.yellow(` ${content}`)
22874
+ (_m, content) => chalk74.yellow(` ${content}`)
22116
22875
  );
22117
22876
  }
22118
22877
  async function connectViaApiToken(connectorType, tokenValue) {
@@ -22137,7 +22896,7 @@ async function connectViaApiToken(connectorType, tokenValue) {
22137
22896
  for (const [secretName, secretConfig] of secretEntries) {
22138
22897
  if (!secretConfig.required) continue;
22139
22898
  const value = await promptPassword(
22140
- `${secretConfig.label}${secretConfig.placeholder ? chalk75.dim(` (${secretConfig.placeholder})`) : ""}:`
22899
+ `${secretConfig.label}${secretConfig.placeholder ? chalk74.dim(` (${secretConfig.placeholder})`) : ""}:`
22141
22900
  );
22142
22901
  if (!value) {
22143
22902
  throw new Error("Cancelled");
@@ -22153,13 +22912,13 @@ async function connectViaApiToken(connectorType, tokenValue) {
22153
22912
  });
22154
22913
  }
22155
22914
  console.log(
22156
- chalk75.green(`
22915
+ chalk74.green(`
22157
22916
  \u2713 ${config.label} connected successfully via API token!`)
22158
22917
  );
22159
22918
  }
22160
22919
  async function connectComputer(apiUrl, headers) {
22161
22920
  await checkComputerDependencies();
22162
- console.log(chalk75.cyan("Setting up computer connector..."));
22921
+ console.log(chalk74.cyan("Setting up computer connector..."));
22163
22922
  const computerClient = initClient15(computerConnectorContract, {
22164
22923
  baseUrl: apiUrl,
22165
22924
  baseHeaders: headers,
@@ -22174,9 +22933,9 @@ async function connectComputer(apiUrl, headers) {
22174
22933
  }
22175
22934
  const credentials = createResult.body;
22176
22935
  await startComputerServices(credentials);
22177
- console.log(chalk75.cyan("Disconnecting computer connector..."));
22936
+ console.log(chalk74.cyan("Disconnecting computer connector..."));
22178
22937
  await deleteConnector("computer");
22179
- console.log(chalk75.green("\u2713 Disconnected computer"));
22938
+ console.log(chalk74.green("\u2713 Disconnected computer"));
22180
22939
  process.exit(0);
22181
22940
  }
22182
22941
  async function resolveAuthMethod(connectorType, tokenFlag) {
@@ -22215,7 +22974,7 @@ async function resolveAuthMethod(connectorType, tokenFlag) {
22215
22974
  );
22216
22975
  }
22217
22976
  async function connectViaOAuth(connectorType, apiUrl, headers) {
22218
- console.log(`Connecting ${chalk75.cyan(connectorType)}...`);
22977
+ console.log(`Connecting ${chalk74.cyan(connectorType)}...`);
22219
22978
  const sessionsClient = initClient15(connectorSessionsContract, {
22220
22979
  baseUrl: apiUrl,
22221
22980
  baseHeaders: headers,
@@ -22231,8 +22990,8 @@ async function connectViaOAuth(connectorType, apiUrl, headers) {
22231
22990
  }
22232
22991
  const session = createResult.body;
22233
22992
  const verificationUrl = `${apiUrl}${session.verificationUrl}`;
22234
- console.log(chalk75.green("\nSession created"));
22235
- console.log(chalk75.cyan(`
22993
+ console.log(chalk74.green("\nSession created"));
22994
+ console.log(chalk74.cyan(`
22236
22995
  To connect, visit: ${verificationUrl}`));
22237
22996
  console.log(
22238
22997
  `
@@ -22264,7 +23023,7 @@ The session expires in ${Math.floor(session.expiresIn / 60)} minutes.`
22264
23023
  switch (status.status) {
22265
23024
  case "complete":
22266
23025
  console.log(
22267
- chalk75.green(`
23026
+ chalk74.green(`
22268
23027
 
22269
23028
  ${connectorType} connected successfully!`)
22270
23029
  );
@@ -22276,13 +23035,13 @@ ${connectorType} connected successfully!`)
22276
23035
  `Connection failed: ${status.errorMessage || "Unknown error"}`
22277
23036
  );
22278
23037
  case "pending":
22279
- process.stdout.write(chalk75.dim("."));
23038
+ process.stdout.write(chalk74.dim("."));
22280
23039
  break;
22281
23040
  }
22282
23041
  }
22283
23042
  throw new Error("Session timed out, please try again");
22284
23043
  }
22285
- var connectCommand = new Command85().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
23044
+ var connectCommand = new Command84().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
22286
23045
  withErrorHandler(async (type2, options) => {
22287
23046
  const parseResult = connectorTypeSchema.safeParse(type2);
22288
23047
  if (!parseResult.success) {
@@ -22307,9 +23066,9 @@ var connectCommand = new Command85().name("connect").description("Connect a thir
22307
23066
  );
22308
23067
 
22309
23068
  // src/commands/connector/list.ts
22310
- import { Command as Command86 } from "commander";
22311
- import chalk76 from "chalk";
22312
- var listCommand13 = new Command86().name("list").alias("ls").description("List all connectors and their status").action(
23069
+ import { Command as Command85 } from "commander";
23070
+ import chalk75 from "chalk";
23071
+ var listCommand13 = new Command85().name("list").alias("ls").description("List all connectors and their status").action(
22313
23072
  withErrorHandler(async () => {
22314
23073
  const result = await listConnectors();
22315
23074
  const connectedMap = new Map(result.connectors.map((c39) => [c39.type, c39]));
@@ -22331,26 +23090,26 @@ var listCommand13 = new Command86().name("list").alias("ls").description("List a
22331
23090
  statusText.padEnd(statusWidth),
22332
23091
  "ACCOUNT"
22333
23092
  ].join(" ");
22334
- console.log(chalk76.dim(header));
23093
+ console.log(chalk75.dim(header));
22335
23094
  for (const type2 of allTypes) {
22336
23095
  const connector = connectedMap.get(type2);
22337
23096
  const scopeMismatch = connector !== void 0 && connector.authMethod === "oauth" && !hasRequiredScopes(type2, connector.oauthScopes);
22338
- const status = connector ? connector.needsReconnect ? chalk76.yellow("!".padEnd(statusWidth)) : scopeMismatch ? chalk76.yellow("!".padEnd(statusWidth)) : chalk76.green("\u2713".padEnd(statusWidth)) : chalk76.dim("-".padEnd(statusWidth));
22339
- const account = connector?.needsReconnect ? chalk76.yellow("(reconnect needed)") : scopeMismatch ? chalk76.yellow("(permissions update available)") : connector?.externalUsername ? `@${connector.externalUsername}` : chalk76.dim("-");
23097
+ const status = connector ? connector.needsReconnect ? chalk75.yellow("!".padEnd(statusWidth)) : scopeMismatch ? chalk75.yellow("!".padEnd(statusWidth)) : chalk75.green("\u2713".padEnd(statusWidth)) : chalk75.dim("-".padEnd(statusWidth));
23098
+ const account = connector?.needsReconnect ? chalk75.yellow("(reconnect needed)") : scopeMismatch ? chalk75.yellow("(permissions update available)") : connector?.externalUsername ? `@${connector.externalUsername}` : chalk75.dim("-");
22340
23099
  const row = [type2.padEnd(typeWidth), status, account].join(" ");
22341
23100
  console.log(row);
22342
23101
  }
22343
23102
  console.log();
22344
- console.log(chalk76.dim("To connect a service:"));
22345
- console.log(chalk76.dim(" vm0 connector connect <type>"));
23103
+ console.log(chalk75.dim("To connect a service:"));
23104
+ console.log(chalk75.dim(" vm0 connector connect <type>"));
22346
23105
  })
22347
23106
  );
22348
23107
 
22349
23108
  // src/commands/connector/status.ts
22350
- import { Command as Command87 } from "commander";
22351
- import chalk77 from "chalk";
23109
+ import { Command as Command86 } from "commander";
23110
+ import chalk76 from "chalk";
22352
23111
  var LABEL_WIDTH = 16;
22353
- var statusCommand8 = new Command87().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
23112
+ var statusCommand8 = new Command86().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
22354
23113
  withErrorHandler(async (type2) => {
22355
23114
  const parseResult = connectorTypeSchema.safeParse(type2);
22356
23115
  if (!parseResult.success) {
@@ -22360,11 +23119,11 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22360
23119
  });
22361
23120
  }
22362
23121
  const connector = await getConnector(parseResult.data);
22363
- console.log(`Connector: ${chalk77.cyan(type2)}`);
23122
+ console.log(`Connector: ${chalk76.cyan(type2)}`);
22364
23123
  console.log();
22365
23124
  if (connector) {
22366
23125
  console.log(
22367
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.green("connected")}`
23126
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.green("connected")}`
22368
23127
  );
22369
23128
  console.log(
22370
23129
  `${"Account:".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`
@@ -22380,7 +23139,7 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22380
23139
  if (connector.authMethod === "oauth" && !hasRequiredScopes(parseResult.data, connector.oauthScopes)) {
22381
23140
  const diff = getScopeDiff(parseResult.data, connector.oauthScopes);
22382
23141
  console.log(
22383
- `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk77.yellow("update available")}`
23142
+ `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk76.yellow("update available")}`
22384
23143
  );
22385
23144
  if (diff.addedScopes.length > 0) {
22386
23145
  console.log(
@@ -22402,23 +23161,23 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22402
23161
  );
22403
23162
  }
22404
23163
  console.log();
22405
- console.log(chalk77.dim("To disconnect:"));
22406
- console.log(chalk77.dim(` vm0 connector disconnect ${type2}`));
23164
+ console.log(chalk76.dim("To disconnect:"));
23165
+ console.log(chalk76.dim(` vm0 connector disconnect ${type2}`));
22407
23166
  } else {
22408
23167
  console.log(
22409
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.dim("not connected")}`
23168
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.dim("not connected")}`
22410
23169
  );
22411
23170
  console.log();
22412
- console.log(chalk77.dim("To connect:"));
22413
- console.log(chalk77.dim(` vm0 connector connect ${type2}`));
23171
+ console.log(chalk76.dim("To connect:"));
23172
+ console.log(chalk76.dim(` vm0 connector connect ${type2}`));
22414
23173
  }
22415
23174
  })
22416
23175
  );
22417
23176
 
22418
23177
  // src/commands/connector/disconnect.ts
22419
- import { Command as Command88 } from "commander";
22420
- import chalk78 from "chalk";
22421
- var disconnectCommand = new Command88().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
23178
+ import { Command as Command87 } from "commander";
23179
+ import chalk77 from "chalk";
23180
+ var disconnectCommand = new Command87().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
22422
23181
  withErrorHandler(async (type2) => {
22423
23182
  const parseResult = connectorTypeSchema.safeParse(type2);
22424
23183
  if (!parseResult.success) {
@@ -22429,145 +23188,16 @@ var disconnectCommand = new Command88().name("disconnect").description("Disconne
22429
23188
  }
22430
23189
  const connectorType = parseResult.data;
22431
23190
  await deleteConnector(connectorType);
22432
- console.log(chalk78.green(`\u2713 Disconnected ${type2}`));
23191
+ console.log(chalk77.green(`\u2713 Disconnected ${type2}`));
22433
23192
  })
22434
23193
  );
22435
23194
 
22436
23195
  // src/commands/connector/index.ts
22437
- var connectorCommand = new Command89().name("connector").description("Manage third-party service connections").addCommand(listCommand13).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
22438
-
22439
- // src/commands/setup-claude/index.ts
22440
- import { Command as Command90 } from "commander";
22441
- import chalk80 from "chalk";
22442
-
22443
- // src/lib/domain/onboard/claude-setup.ts
22444
- import { spawn as spawn3 } from "child_process";
22445
- import chalk79 from "chalk";
22446
- var MARKETPLACE_NAME = "vm0-skills";
22447
- var MARKETPLACE_REPO = "vm0-ai/vm0-skills";
22448
- var PLUGIN_ID = "vm0@vm0-skills";
22449
- var PRIMARY_SKILL_NAME = "vm0-agent";
22450
- async function runClaudeCommand(args, cwd) {
22451
- return new Promise((resolve2) => {
22452
- const child = spawn3("claude", args, {
22453
- stdio: ["inherit", "pipe", "pipe"],
22454
- cwd
22455
- });
22456
- let stdout = "";
22457
- let stderr = "";
22458
- child.stdout?.on("data", (data) => {
22459
- stdout += data.toString();
22460
- });
22461
- child.stderr?.on("data", (data) => {
22462
- stderr += data.toString();
22463
- });
22464
- child.on("error", (err) => {
22465
- resolve2({
22466
- success: false,
22467
- output: stdout,
22468
- error: err.message
22469
- });
22470
- });
22471
- child.on("close", (code) => {
22472
- resolve2({
22473
- success: code === 0,
22474
- output: stdout,
22475
- error: stderr || void 0
22476
- });
22477
- });
22478
- });
22479
- }
22480
- async function isMarketplaceInstalled() {
22481
- const result = await runClaudeCommand([
22482
- "plugin",
22483
- "marketplace",
22484
- "list",
22485
- "--json"
22486
- ]);
22487
- if (!result.success) {
22488
- return false;
22489
- }
22490
- try {
22491
- const marketplaces = JSON.parse(result.output);
22492
- return marketplaces.some((m) => m.name === MARKETPLACE_NAME);
22493
- } catch {
22494
- return false;
22495
- }
22496
- }
22497
- async function addMarketplace() {
22498
- const result = await runClaudeCommand([
22499
- "plugin",
22500
- "marketplace",
22501
- "add",
22502
- MARKETPLACE_REPO
22503
- ]);
22504
- if (!result.success) {
22505
- throw new Error(
22506
- `Failed to add marketplace ${MARKETPLACE_REPO}: ${result.error ?? "unknown error"}`
22507
- );
22508
- }
22509
- }
22510
- async function updateMarketplace() {
22511
- const result = await runClaudeCommand([
22512
- "plugin",
22513
- "marketplace",
22514
- "update",
22515
- MARKETPLACE_NAME
22516
- ]);
22517
- if (!result.success) {
22518
- console.warn(
22519
- chalk79.yellow(
22520
- `Warning: Could not update marketplace: ${result.error ?? "unknown error"}`
22521
- )
22522
- );
22523
- }
22524
- }
22525
- async function ensureMarketplace() {
22526
- const installed = await isMarketplaceInstalled();
22527
- if (!installed) {
22528
- await addMarketplace();
22529
- } else {
22530
- await updateMarketplace();
22531
- }
22532
- }
22533
- async function installVm0Plugin(scope = "user", cwd) {
22534
- await ensureMarketplace();
22535
- const args = ["plugin", "install", PLUGIN_ID, "--scope", scope];
22536
- const result = await runClaudeCommand(args, cwd);
22537
- if (!result.success) {
22538
- throw new Error(
22539
- `Failed to install plugin ${PLUGIN_ID}: ${result.error ?? "unknown error"}`
22540
- );
22541
- }
22542
- return {
22543
- pluginId: PLUGIN_ID,
22544
- scope
22545
- };
22546
- }
22547
-
22548
- // src/commands/setup-claude/index.ts
22549
- var setupClaudeCommand = new Command90().name("setup-claude").description("Install VM0 Claude Plugin").option("--agent-dir <dir>", "Agent directory to run install in").option("--scope <scope>", "Installation scope (user or project)", "project").action(
22550
- withErrorHandler(async (options) => {
22551
- console.log(chalk80.dim("Installing VM0 Claude Plugin..."));
22552
- const scope = options.scope === "user" ? "user" : "project";
22553
- const result = await installVm0Plugin(scope, options.agentDir);
22554
- console.log(
22555
- chalk80.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
22556
- );
22557
- console.log();
22558
- console.log("Next step:");
22559
- const cdPrefix = options.agentDir ? `cd ${options.agentDir} && ` : "";
22560
- console.log(
22561
- chalk80.cyan(
22562
- ` ${cdPrefix}claude "/${PRIMARY_SKILL_NAME} let's build a workflow"`
22563
- )
22564
- );
22565
- })
22566
- );
23196
+ var connectorCommand = new Command88().name("connector").description("Manage third-party service connections").addCommand(listCommand13).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
22567
23197
 
22568
23198
  // src/commands/preference/index.ts
22569
- import { Command as Command91 } from "commander";
22570
- import chalk81 from "chalk";
23199
+ import { Command as Command89 } from "commander";
23200
+ import chalk78 from "chalk";
22571
23201
  function detectTimezone2() {
22572
23202
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
22573
23203
  }
@@ -22588,15 +23218,15 @@ function parseOnOff(flag, value) {
22588
23218
  );
22589
23219
  }
22590
23220
  function displayPreferences(prefs) {
22591
- console.log(chalk81.bold("Current preferences:"));
23221
+ console.log(chalk78.bold("Current preferences:"));
22592
23222
  console.log(
22593
- ` Timezone: ${prefs.timezone ? chalk81.cyan(prefs.timezone) : chalk81.dim("not set")}`
23223
+ ` Timezone: ${prefs.timezone ? chalk78.cyan(prefs.timezone) : chalk78.dim("not set")}`
22594
23224
  );
22595
23225
  console.log(
22596
- ` Email notify: ${prefs.notifyEmail ? chalk81.green("on") : chalk81.dim("off")}`
23226
+ ` Email notify: ${prefs.notifyEmail ? chalk78.green("on") : chalk78.dim("off")}`
22597
23227
  );
22598
23228
  console.log(
22599
- ` Slack notify: ${prefs.notifySlack ? chalk81.green("on") : chalk81.dim("off")}`
23229
+ ` Slack notify: ${prefs.notifySlack ? chalk78.green("on") : chalk78.dim("off")}`
22600
23230
  );
22601
23231
  }
22602
23232
  function buildUpdates(opts) {
@@ -22626,21 +23256,21 @@ function buildUpdates(opts) {
22626
23256
  function printUpdateResult(updates, result) {
22627
23257
  if (updates.timezone !== void 0) {
22628
23258
  console.log(
22629
- chalk81.green(
22630
- `Timezone set to ${chalk81.cyan(result.timezone ?? updates.timezone)}`
23259
+ chalk78.green(
23260
+ `Timezone set to ${chalk78.cyan(result.timezone ?? updates.timezone)}`
22631
23261
  )
22632
23262
  );
22633
23263
  }
22634
23264
  if (updates.notifyEmail !== void 0) {
22635
23265
  console.log(
22636
- chalk81.green(
23266
+ chalk78.green(
22637
23267
  `Email notifications ${result.notifyEmail ? "enabled" : "disabled"}`
22638
23268
  )
22639
23269
  );
22640
23270
  }
22641
23271
  if (updates.notifySlack !== void 0) {
22642
23272
  console.log(
22643
- chalk81.green(
23273
+ chalk78.green(
22644
23274
  `Slack notifications ${result.notifySlack ? "enabled" : "disabled"}`
22645
23275
  )
22646
23276
  );
@@ -22649,7 +23279,7 @@ function printUpdateResult(updates, result) {
22649
23279
  async function interactiveSetup(prefs) {
22650
23280
  if (!prefs.timezone) {
22651
23281
  const detectedTz = detectTimezone2();
22652
- console.log(chalk81.dim(`
23282
+ console.log(chalk78.dim(`
22653
23283
  System timezone detected: ${detectedTz}`));
22654
23284
  const tz = await promptText(
22655
23285
  "Set timezone? (enter timezone or leave empty to skip)",
@@ -22660,7 +23290,7 @@ System timezone detected: ${detectedTz}`));
22660
23290
  throw new Error(`Invalid timezone: ${tz.trim()}`);
22661
23291
  }
22662
23292
  await updateUserPreferences({ timezone: tz.trim() });
22663
- console.log(chalk81.green(`Timezone set to ${chalk81.cyan(tz.trim())}`));
23293
+ console.log(chalk78.green(`Timezone set to ${chalk78.cyan(tz.trim())}`));
22664
23294
  }
22665
23295
  }
22666
23296
  if (!prefs.notifyEmail) {
@@ -22670,11 +23300,11 @@ System timezone detected: ${detectedTz}`));
22670
23300
  );
22671
23301
  if (enable) {
22672
23302
  await updateUserPreferences({ notifyEmail: true });
22673
- console.log(chalk81.green("Email notifications enabled"));
23303
+ console.log(chalk78.green("Email notifications enabled"));
22674
23304
  }
22675
23305
  }
22676
23306
  }
22677
- var preferenceCommand = new Command91().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
23307
+ var preferenceCommand = new Command89().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
22678
23308
  withErrorHandler(async (opts) => {
22679
23309
  const updates = buildUpdates(opts);
22680
23310
  if (updates) {
@@ -22689,32 +23319,32 @@ var preferenceCommand = new Command91().name("preference").description("View or
22689
23319
  } else if (!prefs.timezone) {
22690
23320
  console.log();
22691
23321
  console.log(
22692
- `To set timezone: ${chalk81.cyan("vm0 preference --timezone <timezone>")}`
23322
+ `To set timezone: ${chalk78.cyan("vm0 preference --timezone <timezone>")}`
22693
23323
  );
22694
23324
  console.log(
22695
- chalk81.dim("Example: vm0 preference --timezone America/New_York")
23325
+ chalk78.dim("Example: vm0 preference --timezone America/New_York")
22696
23326
  );
22697
23327
  }
22698
23328
  })
22699
23329
  );
22700
23330
 
22701
23331
  // src/commands/upgrade/index.ts
22702
- import { Command as Command92 } from "commander";
22703
- import chalk82 from "chalk";
22704
- var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
23332
+ import { Command as Command90 } from "commander";
23333
+ import chalk79 from "chalk";
23334
+ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
22705
23335
  withErrorHandler(async () => {
22706
23336
  console.log("Checking for updates...");
22707
23337
  const latestVersion = await getLatestVersion();
22708
23338
  if (latestVersion === null) {
22709
23339
  throw new Error("Could not check for updates. Please try again later.");
22710
23340
  }
22711
- if (latestVersion === "9.74.4") {
22712
- console.log(chalk82.green(`\u2713 Already up to date (${"9.74.4"})`));
23341
+ if (latestVersion === "9.75.0") {
23342
+ console.log(chalk79.green(`\u2713 Already up to date (${"9.75.0"})`));
22713
23343
  return;
22714
23344
  }
22715
23345
  console.log(
22716
- chalk82.yellow(
22717
- `Current version: ${"9.74.4"} -> Latest version: ${latestVersion}`
23346
+ chalk79.yellow(
23347
+ `Current version: ${"9.75.0"} -> Latest version: ${latestVersion}`
22718
23348
  )
22719
23349
  );
22720
23350
  console.log();
@@ -22722,26 +23352,26 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22722
23352
  if (!isAutoUpgradeSupported(packageManager)) {
22723
23353
  if (packageManager === "unknown") {
22724
23354
  console.log(
22725
- chalk82.yellow(
23355
+ chalk79.yellow(
22726
23356
  "Could not detect your package manager for auto-upgrade."
22727
23357
  )
22728
23358
  );
22729
23359
  } else {
22730
23360
  console.log(
22731
- chalk82.yellow(
23361
+ chalk79.yellow(
22732
23362
  `Auto-upgrade is not supported for ${packageManager}.`
22733
23363
  )
22734
23364
  );
22735
23365
  }
22736
- console.log(chalk82.yellow("Please upgrade manually:"));
22737
- console.log(chalk82.cyan(` ${getManualUpgradeCommand(packageManager)}`));
23366
+ console.log(chalk79.yellow("Please upgrade manually:"));
23367
+ console.log(chalk79.cyan(` ${getManualUpgradeCommand(packageManager)}`));
22738
23368
  return;
22739
23369
  }
22740
23370
  console.log(`Upgrading via ${packageManager}...`);
22741
23371
  const success = await performUpgrade(packageManager);
22742
23372
  if (success) {
22743
23373
  console.log(
22744
- chalk82.green(`\u2713 Upgraded from ${"9.74.4"} to ${latestVersion}`)
23374
+ chalk79.green(`\u2713 Upgraded from ${"9.75.0"} to ${latestVersion}`)
22745
23375
  );
22746
23376
  return;
22747
23377
  }
@@ -22754,8 +23384,8 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22754
23384
  );
22755
23385
 
22756
23386
  // src/commands/whoami.ts
22757
- import { Command as Command93 } from "commander";
22758
- import chalk83 from "chalk";
23387
+ import { Command as Command91 } from "commander";
23388
+ import chalk80 from "chalk";
22759
23389
  function isInsideSandbox() {
22760
23390
  return !!process.env.VM0_RUN_ID;
22761
23391
  }
@@ -22770,7 +23400,7 @@ async function showSandboxInfo() {
22770
23400
  const apiUrl = process.env.VM0_API_URL;
22771
23401
  const hasAgentInfo = agentName || agentVersion || agentComposeId || agentOrgSlug || cliAgentType;
22772
23402
  if (hasAgentInfo) {
22773
- console.log(chalk83.bold("Agent:"));
23403
+ console.log(chalk80.bold("Agent:"));
22774
23404
  if (agentName) console.log(` Name: ${agentName}`);
22775
23405
  if (agentVersion) console.log(` Version: ${agentVersion}`);
22776
23406
  if (agentComposeId) console.log(` Compose ID: ${agentComposeId}`);
@@ -22778,7 +23408,7 @@ async function showSandboxInfo() {
22778
23408
  if (cliAgentType) console.log(` Framework: ${cliAgentType}`);
22779
23409
  console.log();
22780
23410
  }
22781
- console.log(chalk83.bold("Run:"));
23411
+ console.log(chalk80.bold("Run:"));
22782
23412
  if (runId) console.log(` ID: ${runId}`);
22783
23413
  if (activeOrg) console.log(` Org: ${activeOrg}`);
22784
23414
  if (apiUrl) console.log(` API: ${apiUrl}`);
@@ -22787,23 +23417,23 @@ async function showLocalInfo() {
22787
23417
  const token = await getToken();
22788
23418
  const apiUrl = await getApiUrl();
22789
23419
  const activeOrg = await getActiveOrg();
22790
- console.log(chalk83.bold("Auth:"));
23420
+ console.log(chalk80.bold("Auth:"));
22791
23421
  if (token) {
22792
23422
  const tokenSource = process.env.VM0_TOKEN ? "VM0_TOKEN env var" : "config file";
22793
23423
  console.log(
22794
- ` Status: ${chalk83.green("Authenticated")} (via ${tokenSource})`
23424
+ ` Status: ${chalk80.green("Authenticated")} (via ${tokenSource})`
22795
23425
  );
22796
23426
  } else {
22797
- console.log(` Status: ${chalk83.dim("Not authenticated")}`);
23427
+ console.log(` Status: ${chalk80.dim("Not authenticated")}`);
22798
23428
  }
22799
23429
  console.log(` API: ${apiUrl}`);
22800
23430
  console.log();
22801
23431
  if (activeOrg) {
22802
- console.log(chalk83.bold("Org:"));
23432
+ console.log(chalk80.bold("Org:"));
22803
23433
  console.log(` Active: ${activeOrg}`);
22804
23434
  }
22805
23435
  }
22806
- var whoamiCommand = new Command93().name("whoami").description("Show current identity and environment information").action(
23436
+ var whoamiCommand = new Command91().name("whoami").description("Show current identity and environment information").action(
22807
23437
  withErrorHandler(async () => {
22808
23438
  if (isInsideSandbox()) {
22809
23439
  await showSandboxInfo();
@@ -22813,9 +23443,15 @@ var whoamiCommand = new Command93().name("whoami").description("Show current ide
22813
23443
  })
22814
23444
  );
22815
23445
 
23446
+ // src/commands/zero/index.ts
23447
+ import { Command as Command92 } from "commander";
23448
+ var zeroCommand = new Command92("zero").description(
23449
+ "Zero platform commands"
23450
+ );
23451
+
22816
23452
  // src/index.ts
22817
- var program = new Command94();
22818
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.74.4");
23453
+ var program = new Command93();
23454
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.75.0");
22819
23455
  program.addCommand(authCommand);
22820
23456
  program.addCommand(infoCommand);
22821
23457
  program.addCommand(composeCommand);
@@ -22829,14 +23465,13 @@ program.addCommand(orgCommand);
22829
23465
  program.addCommand(agentCommand);
22830
23466
  program.addCommand(initCommand4);
22831
23467
  program.addCommand(scheduleCommand);
22832
- program.addCommand(usageCommand);
22833
23468
  program.addCommand(secretCommand);
22834
23469
  program.addCommand(variableCommand);
22835
23470
  program.addCommand(connectorCommand);
22836
- program.addCommand(setupClaudeCommand);
22837
23471
  program.addCommand(preferenceCommand);
22838
23472
  program.addCommand(upgradeCommand);
22839
23473
  program.addCommand(whoamiCommand);
23474
+ program.addCommand(zeroCommand);
22840
23475
  if (process.argv[1]?.endsWith("index.js") || process.argv[1]?.endsWith("index.ts") || process.argv[1]?.endsWith("vm0")) {
22841
23476
  process.stdout.on("error", (err) => {
22842
23477
  if (err.code === "EPIPE") process.exit(0);