@vm0/cli 9.74.4 → 9.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +1675 -592
  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.1",
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.1",
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,498 @@ 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
+
7511
+ // ../../packages/core/src/firewalls/figma.generated.ts
7512
+ var figmaFirewall = {
7513
+ name: "figma",
7514
+ description: "Figma API",
7515
+ placeholders: {
7516
+ FIGMA_TOKEN: "figd_Vm0PlaceHolder00000000000000000000000000"
7517
+ },
7518
+ apis: [
7519
+ {
7520
+ base: "https://api.figma.com",
7521
+ auth: {
7522
+ headers: {
7523
+ Authorization: "Bearer ${{ secrets.FIGMA_TOKEN }}"
7524
+ }
7525
+ },
7526
+ permissions: [
7527
+ {
7528
+ name: "unrestricted",
7529
+ description: "Allow all endpoints",
7530
+ rules: ["ANY /{path*}"]
7531
+ },
7532
+ {
7533
+ name: "current_user:read",
7534
+ description: "Read your name, email, and profile image.",
7535
+ rules: ["GET /v1/me"]
7536
+ },
7537
+ {
7538
+ name: "file_comments:read",
7539
+ description: "Read the comments for files.",
7540
+ rules: [
7541
+ "GET /v1/files/{file_key}/comments",
7542
+ "GET /v1/files/{file_key}/comments/{comment_id}/reactions"
7543
+ ]
7544
+ },
7545
+ {
7546
+ name: "file_comments:write",
7547
+ description: "Post and delete comments and comment reactions in files.",
7548
+ rules: [
7549
+ "POST /v1/files/{file_key}/comments",
7550
+ "DELETE /v1/files/{file_key}/comments/{comment_id}",
7551
+ "POST /v1/files/{file_key}/comments/{comment_id}/reactions",
7552
+ "DELETE /v1/files/{file_key}/comments/{comment_id}/reactions"
7553
+ ]
7554
+ },
7555
+ {
7556
+ name: "file_content:read",
7557
+ description: "Read the contents of files, such as nodes and the editor type.",
7558
+ rules: [
7559
+ "GET /v1/files/{file_key}",
7560
+ "GET /v1/files/{file_key}/images",
7561
+ "GET /v1/files/{file_key}/nodes",
7562
+ "GET /v1/images/{file_key}"
7563
+ ]
7564
+ },
7565
+ {
7566
+ name: "file_dev_resources:read",
7567
+ description: "Read dev resources in files.",
7568
+ rules: ["GET /v1/files/{file_key}/dev_resources"]
7569
+ },
7570
+ {
7571
+ name: "file_dev_resources:write",
7572
+ description: "Write to dev resources in files.",
7573
+ rules: [
7574
+ "POST /v1/dev_resources",
7575
+ "PUT /v1/dev_resources",
7576
+ "DELETE /v1/files/{file_key}/dev_resources/{dev_resource_id}"
7577
+ ]
7578
+ },
7579
+ {
7580
+ name: "file_metadata:read",
7581
+ description: "Read metadata of files.",
7582
+ rules: ["GET /v1/files/{file_key}/meta"]
7583
+ },
7584
+ {
7585
+ name: "file_variables:read",
7586
+ description: "Read variables in Figma file. Note: this is only available to members in Enterprise organizations.",
7587
+ rules: [
7588
+ "GET /v1/files/{file_key}/variables/local",
7589
+ "GET /v1/files/{file_key}/variables/published"
7590
+ ]
7591
+ },
7592
+ {
7593
+ name: "file_variables:write",
7594
+ description: "Write to variables in Figma file. Note: this is only available to members in Enterprise organizations.",
7595
+ rules: ["POST /v1/files/{file_key}/variables"]
7596
+ },
7597
+ {
7598
+ name: "file_versions:read",
7599
+ description: "Read the version history for files you can access.",
7600
+ rules: ["GET /v1/files/{file_key}/versions"]
7601
+ },
7602
+ {
7603
+ name: "files:read",
7604
+ description: "Deprecated. Read files, projects, users, versions, comments, components & styles, and webhooks.",
7605
+ rules: [
7606
+ "GET /v1/component_sets/{key}",
7607
+ "GET /v1/components/{key}",
7608
+ "GET /v1/files/{file_key}",
7609
+ "GET /v1/files/{file_key}/comments",
7610
+ "GET /v1/files/{file_key}/comments/{comment_id}/reactions",
7611
+ "GET /v1/files/{file_key}/component_sets",
7612
+ "GET /v1/files/{file_key}/components",
7613
+ "GET /v1/files/{file_key}/images",
7614
+ "GET /v1/files/{file_key}/meta",
7615
+ "GET /v1/files/{file_key}/nodes",
7616
+ "GET /v1/files/{file_key}/styles",
7617
+ "GET /v1/files/{file_key}/versions",
7618
+ "GET /v1/images/{file_key}",
7619
+ "GET /v1/me",
7620
+ "GET /v1/projects/{project_id}/files",
7621
+ "GET /v1/styles/{key}",
7622
+ "GET /v1/teams/{team_id}/component_sets",
7623
+ "GET /v1/teams/{team_id}/components",
7624
+ "GET /v1/teams/{team_id}/projects",
7625
+ "GET /v1/teams/{team_id}/styles",
7626
+ "GET /v2/teams/{team_id}/webhooks",
7627
+ "GET /v2/webhooks/{webhook_id}",
7628
+ "GET /v2/webhooks/{webhook_id}/requests"
7629
+ ]
7630
+ },
7631
+ {
7632
+ name: "library_analytics:read",
7633
+ description: "Read library analytics data.",
7634
+ rules: [
7635
+ "GET /v1/analytics/libraries/{file_key}/component/actions",
7636
+ "GET /v1/analytics/libraries/{file_key}/component/usages",
7637
+ "GET /v1/analytics/libraries/{file_key}/style/actions",
7638
+ "GET /v1/analytics/libraries/{file_key}/style/usages",
7639
+ "GET /v1/analytics/libraries/{file_key}/variable/actions",
7640
+ "GET /v1/analytics/libraries/{file_key}/variable/usages"
7641
+ ]
7642
+ },
7643
+ {
7644
+ name: "library_assets:read",
7645
+ description: "Read data of individual published components and styles.",
7646
+ rules: [
7647
+ "GET /v1/component_sets/{key}",
7648
+ "GET /v1/components/{key}",
7649
+ "GET /v1/styles/{key}"
7650
+ ]
7651
+ },
7652
+ {
7653
+ name: "library_content:read",
7654
+ description: "Read published components and styles of files.",
7655
+ rules: [
7656
+ "GET /v1/files/{file_key}/component_sets",
7657
+ "GET /v1/files/{file_key}/components",
7658
+ "GET /v1/files/{file_key}/styles"
7659
+ ]
7660
+ },
7661
+ {
7662
+ name: "org:activity_log_read",
7663
+ description: "Read activity logs in the organization.",
7664
+ rules: ["GET /v1/activity_logs"]
7665
+ },
7666
+ {
7667
+ name: "projects:read",
7668
+ description: "List projects and files in projects.",
7669
+ rules: [
7670
+ "GET /v1/projects/{project_id}/files",
7671
+ "GET /v1/teams/{team_id}/projects"
7672
+ ]
7673
+ },
7674
+ {
7675
+ name: "team_library_content:read",
7676
+ description: "Read published components and styles of teams.",
7677
+ rules: [
7678
+ "GET /v1/teams/{team_id}/component_sets",
7679
+ "GET /v1/teams/{team_id}/components",
7680
+ "GET /v1/teams/{team_id}/styles"
7681
+ ]
7682
+ },
7683
+ {
7684
+ name: "webhooks:read",
7685
+ description: "Read metadata of webhooks.",
7686
+ rules: [
7687
+ "GET /v2/teams/{team_id}/webhooks",
7688
+ "GET /v2/webhooks",
7689
+ "GET /v2/webhooks/{webhook_id}",
7690
+ "GET /v2/webhooks/{webhook_id}/requests"
7691
+ ]
7692
+ },
7693
+ {
7694
+ name: "webhooks:write",
7695
+ description: "Create and manage webhooks.",
7696
+ rules: [
7697
+ "POST /v2/webhooks",
7698
+ "PUT /v2/webhooks/{webhook_id}",
7699
+ "DELETE /v2/webhooks/{webhook_id}"
7700
+ ]
7701
+ }
7702
+ ]
7703
+ }
7704
+ ]
7705
+ };
7706
+
7212
7707
  // ../../packages/core/src/firewalls/github.generated.ts
7213
7708
  var githubFirewall = {
7214
7709
  name: "github",
@@ -10371,19 +10866,19 @@ var googleSheetsFirewall = {
10371
10866
  ]
10372
10867
  };
10373
10868
 
10374
- // ../../packages/core/src/firewalls/slack.generated.ts
10375
- var slackFirewall = {
10376
- name: "slack",
10377
- description: "Slack API",
10869
+ // ../../packages/core/src/firewalls/jira.generated.ts
10870
+ var jiraFirewall = {
10871
+ name: "jira",
10872
+ description: "Jira Cloud API",
10378
10873
  placeholders: {
10379
- SLACK_TOKEN: "xoxb-000000000000-0000000000000-Vm0PlaceHolder0000000000"
10874
+ JIRA_TOKEN: "ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
10380
10875
  },
10381
10876
  apis: [
10382
10877
  {
10383
- base: "https://slack.com/api",
10878
+ base: "https://api.atlassian.com",
10384
10879
  auth: {
10385
10880
  headers: {
10386
- Authorization: "Bearer ${{ secrets.SLACK_TOKEN }}"
10881
+ Authorization: "Bearer ${{ secrets.JIRA_TOKEN }}"
10387
10882
  }
10388
10883
  },
10389
10884
  permissions: [
@@ -10393,80 +10888,832 @@ var slackFirewall = {
10393
10888
  rules: ["ANY /{path*}"]
10394
10889
  },
10395
10890
  {
10396
- name: "admin",
10397
- rules: [
10398
- "POST /admin.audit.anomaly.allow.getItem",
10399
- "POST /admin.audit.anomaly.allow.updateItem",
10400
- "GET /team.accessLogs",
10401
- "GET /team.billableInfo",
10402
- "GET /team.integrationLogs"
10403
- ]
10404
- },
10405
- {
10406
- name: "admin.analytics:read",
10891
+ name: "manage:jira-configuration",
10892
+ description: "Configure Jira settings that require the Jira administrators permission, for example, create projects and custom fields, view workflows, manage issue link types.",
10407
10893
  rules: [
10408
- "GET /admin.analytics.getFile",
10409
- "GET /admin.analytics.messages.activity",
10410
- "GET /admin.analytics.messages.metadata"
10894
+ "GET /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10895
+ "PUT /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10896
+ "POST /ex/jira/{cloudId}/rest/api/3/app/field/context/configuration/list",
10897
+ "GET /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10898
+ "PUT /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10899
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties",
10900
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties/advanced-settings",
10901
+ "PUT /ex/jira/{cloudId}/rest/api/3/application-properties/{id}",
10902
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole",
10903
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole/{key}",
10904
+ "GET /ex/jira/{cloudId}/rest/api/3/auditing/record",
10905
+ "GET /ex/jira/{cloudId}/rest/api/3/avatar/{type}/system",
10906
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10907
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10908
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10909
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10910
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10911
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10912
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10913
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10914
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10915
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10916
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10917
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/clone",
10918
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields",
10919
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields/{fieldId}/parameters",
10920
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/projects",
10921
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10922
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10923
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/list",
10924
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10925
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10926
+ "GET /ex/jira/{cloudId}/rest/api/3/events",
10927
+ "POST /ex/jira/{cloudId}/rest/api/3/field",
10928
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/association",
10929
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/association",
10930
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}",
10931
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10932
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10933
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10934
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10935
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/issuetypemapping",
10936
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/mapping",
10937
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/projectmapping",
10938
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10939
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10940
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype",
10941
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype/remove",
10942
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10943
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10944
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10945
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/move",
10946
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}",
10947
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}/issue",
10948
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project",
10949
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project/remove",
10950
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10951
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10952
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10953
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10954
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10955
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}/issue",
10956
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{id}",
10957
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/restore",
10958
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/trash",
10959
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10960
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10961
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10962
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10963
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10964
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10965
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10966
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10967
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/mapping",
10968
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10969
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10970
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10971
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10972
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping",
10973
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping/delete",
10974
+ "POST /ex/jira/{cloudId}/rest/api/3/group",
10975
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group",
10976
+ "GET /ex/jira/{cloudId}/rest/api/3/group/member",
10977
+ "POST /ex/jira/{cloudId}/rest/api/3/group/user",
10978
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group/user",
10979
+ "GET /ex/jira/{cloudId}/rest/api/3/instance/license",
10980
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLinkType",
10981
+ "PUT /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10982
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10983
+ "POST /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
10984
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level",
10985
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/default",
10986
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/member",
10987
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10988
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10989
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/search",
10990
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
10991
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{issueSecuritySchemeId}/members",
10992
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}",
10993
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level",
10994
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10995
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10996
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member",
10997
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member/{memberId}",
10998
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype",
10999
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
11000
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
11001
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/avatar2",
11002
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
11003
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
11004
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
11005
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
11006
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/mapping",
11007
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
11008
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
11009
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
11010
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
11011
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype",
11012
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/move",
11013
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/{issueTypeId}",
11014
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
11015
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
11016
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/mapping",
11017
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
11018
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
11019
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
11020
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
11021
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping",
11022
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/default",
11023
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/remove",
11024
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/project",
11025
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/sanitize",
11026
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount",
11027
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount/product/{applicationKey}",
11028
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences",
11029
+ "PUT /ex/jira/{cloudId}/rest/api/3/mypreferences",
11030
+ "DELETE /ex/jira/{cloudId}/rest/api/3/mypreferences",
11031
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences/locale",
11032
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme",
11033
+ "POST /ex/jira/{cloudId}/rest/api/3/notificationscheme",
11034
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/project",
11035
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
11036
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
11037
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}/notification",
11038
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}",
11039
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}/notification/{notificationId}",
11040
+ "GET /ex/jira/{cloudId}/rest/api/3/permissions",
11041
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme",
11042
+ "PUT /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
11043
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
11044
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
11045
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
11046
+ "POST /ex/jira/{cloudId}/rest/api/3/priority",
11047
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/default",
11048
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/move",
11049
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/search",
11050
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/{id}",
11051
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priority/{id}",
11052
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme",
11053
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme",
11054
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme/mappings",
11055
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/priorities/available",
11056
+ "PUT /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
11057
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
11058
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/priorities",
11059
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/projects",
11060
+ "POST /ex/jira/{cloudId}/rest/api/3/project",
11061
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template",
11062
+ "PUT /ex/jira/{cloudId}/rest/api/3/project-template/edit-template",
11063
+ "GET /ex/jira/{cloudId}/rest/api/3/project-template/live-template",
11064
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project-template/remove-template",
11065
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template/save-template",
11066
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
11067
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/delete",
11068
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/restore",
11069
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11070
+ "POST /ex/jira/{cloudId}/rest/api/3/resolution",
11071
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/default",
11072
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/move",
11073
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
11074
+ "DELETE /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
11075
+ "GET /ex/jira/{cloudId}/rest/api/3/role",
11076
+ "POST /ex/jira/{cloudId}/rest/api/3/role",
11077
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}",
11078
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}",
11079
+ "PUT /ex/jira/{cloudId}/rest/api/3/role/{id}",
11080
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}",
11081
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
11082
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
11083
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
11084
+ "POST /ex/jira/{cloudId}/rest/api/3/screenscheme",
11085
+ "PUT /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
11086
+ "GET /ex/jira/{cloudId}/rest/api/3/securitylevel/{id}",
11087
+ "GET /ex/jira/{cloudId}/rest/api/3/settings/columns",
11088
+ "PUT /ex/jira/{cloudId}/rest/api/3/settings/columns",
11089
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses",
11090
+ "POST /ex/jira/{cloudId}/rest/api/3/statuses",
11091
+ "PUT /ex/jira/{cloudId}/rest/api/3/statuses",
11092
+ "DELETE /ex/jira/{cloudId}/rest/api/3/statuses",
11093
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/byNames",
11094
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/search",
11095
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/project/{projectId}/issueTypeUsages",
11096
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/projectUsages",
11097
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/workflowUsages",
11098
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
11099
+ "POST /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
11100
+ "DELETE /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{owningObjectId}/avatar/{id}",
11101
+ "POST /ex/jira/{cloudId}/rest/api/3/user",
11102
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user",
11103
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/columns",
11104
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/columns",
11105
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow",
11106
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow",
11107
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history",
11108
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history/list",
11109
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
11110
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
11111
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
11112
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
11113
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
11114
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
11115
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/{entityId}",
11116
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages",
11117
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/projectUsages",
11118
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/workflowSchemes",
11119
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows",
11120
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/capabilities",
11121
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create",
11122
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create/validation",
11123
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/defaultEditor",
11124
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/preview",
11125
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/search",
11126
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update",
11127
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update/validation",
11128
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme",
11129
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme",
11130
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
11131
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
11132
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/project/switch",
11133
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/read",
11134
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update",
11135
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update/mappings",
11136
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
11137
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
11138
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
11139
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/createdraft",
11140
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
11141
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
11142
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
11143
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
11144
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
11145
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
11146
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
11147
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
11148
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
11149
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
11150
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
11151
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
11152
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/publish",
11153
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
11154
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
11155
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
11156
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
11157
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
11158
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
11159
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
11160
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
11161
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
11162
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{workflowSchemeId}/projectUsages"
10411
11163
  ]
10412
11164
  },
10413
11165
  {
10414
- name: "admin.app_activities:read",
10415
- rules: ["POST /admin.apps.activities.list"]
10416
- },
10417
- {
10418
- name: "admin.apps:read",
11166
+ name: "manage:jira-project",
11167
+ description: "Create and edit project settings and create new project-level objects, for example, versions, components.",
10419
11168
  rules: [
10420
- "GET /admin.apps.approved.list",
10421
- "POST /admin.apps.config.lookup",
10422
- "GET /admin.apps.requests.list",
10423
- "GET /admin.apps.restricted.list"
11169
+ "POST /ex/jira/{cloudId}/rest/api/3/component",
11170
+ "PUT /ex/jira/{cloudId}/rest/api/3/component/{id}",
11171
+ "DELETE /ex/jira/{cloudId}/rest/api/3/component/{id}",
11172
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/contexts",
11173
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/screens",
11174
+ "POST /ex/jira/{cloudId}/rest/api/3/forge/panel/action/bulk/async",
11175
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
11176
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
11177
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
11178
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/archive",
11179
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar",
11180
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar/{id}",
11181
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar2",
11182
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
11183
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
11184
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features/{featureKey}",
11185
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
11186
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
11187
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11188
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11189
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
11190
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
11191
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
11192
+ "POST /ex/jira/{cloudId}/rest/api/3/projectCategory",
11193
+ "PUT /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
11194
+ "DELETE /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
11195
+ "GET /ex/jira/{cloudId}/rest/api/3/screens",
11196
+ "POST /ex/jira/{cloudId}/rest/api/3/screens",
11197
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/addToDefault/{fieldId}",
11198
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/tabs",
11199
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11200
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11201
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/availableFields",
11202
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11203
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11204
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11205
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11206
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11207
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11208
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}",
11209
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}/move",
11210
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/move/{pos}",
11211
+ "GET /ex/jira/{cloudId}/rest/api/3/screenscheme",
11212
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
11213
+ "POST /ex/jira/{cloudId}/rest/api/3/version",
11214
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}",
11215
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{id}",
11216
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/mergeto/{moveIssuesTo}",
11217
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/move",
11218
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/removeAndSwap",
11219
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/search"
10424
11220
  ]
10425
11221
  },
10426
11222
  {
10427
- name: "admin.apps:write",
11223
+ name: "manage:jira-webhook",
11224
+ description: "Manage Jira webhooks. Enables an OAuth app to register and unregister dynamic webhooks in Jira. It also provides for fetching of registered webhooks.",
10428
11225
  rules: [
10429
- "POST /admin.apps.approve",
10430
- "POST /admin.apps.clearResolution",
10431
- "POST /admin.apps.config.set",
10432
- "POST /admin.apps.requests.cancel",
10433
- "POST /admin.apps.restrict",
10434
- "POST /admin.apps.uninstall"
11226
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11227
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11228
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11229
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11230
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh"
10435
11231
  ]
10436
11232
  },
10437
11233
  {
10438
- name: "admin.barriers:read",
10439
- rules: ["GET /admin.barriers.list"]
10440
- },
10441
- {
10442
- name: "admin.barriers:write",
11234
+ name: "read:jira-user",
11235
+ description: "View user information in Jira that you have access to, including usernames, email addresses, and avatars.",
10443
11236
  rules: [
10444
- "POST /admin.barriers.create",
10445
- "POST /admin.barriers.delete",
10446
- "POST /admin.barriers.update"
11237
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration",
11238
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11239
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11240
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11241
+ "GET /ex/jira/{cloudId}/rest/api/3/group",
11242
+ "GET /ex/jira/{cloudId}/rest/api/3/group/bulk",
11243
+ "GET /ex/jira/{cloudId}/rest/api/3/groups/picker",
11244
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/pdcleaner",
11245
+ "GET /ex/jira/{cloudId}/rest/api/3/myself",
11246
+ "GET /ex/jira/{cloudId}/rest/api/3/user",
11247
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/multiProjectSearch",
11248
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/search",
11249
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk",
11250
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk/migration",
11251
+ "GET /ex/jira/{cloudId}/rest/api/3/user/columns",
11252
+ "GET /ex/jira/{cloudId}/rest/api/3/user/groups",
11253
+ "GET /ex/jira/{cloudId}/rest/api/3/user/permission/search",
11254
+ "GET /ex/jira/{cloudId}/rest/api/3/user/picker",
11255
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties",
11256
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11257
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search",
11258
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query",
11259
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query/key",
11260
+ "GET /ex/jira/{cloudId}/rest/api/3/user/viewissue/search",
11261
+ "GET /ex/jira/{cloudId}/rest/api/3/users",
11262
+ "GET /ex/jira/{cloudId}/rest/api/3/users/search"
10447
11263
  ]
10448
11264
  },
10449
11265
  {
10450
- name: "admin.conversations:manage_objects",
11266
+ name: "read:jira-work",
11267
+ description: "Read project and issue data. Search for issues and objects associated with issues (such as attachments and worklogs).",
10451
11268
  rules: [
10452
- "POST /admin.conversations.createForObjects",
10453
- "POST /admin.conversations.linkObjects",
10454
- "POST /admin.conversations.unlinkObjects"
11269
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/content/{id}",
11270
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/meta",
11271
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/thumbnail/{id}",
11272
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11273
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/human",
11274
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/raw",
11275
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11276
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11277
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/queue/{taskId}",
11278
+ "POST /ex/jira/{cloudId}/rest/api/3/changelog/bulkfetch",
11279
+ "GET /ex/jira/{cloudId}/rest/api/3/classification-levels",
11280
+ "POST /ex/jira/{cloudId}/rest/api/3/comment/list",
11281
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties",
11282
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11283
+ "GET /ex/jira/{cloudId}/rest/api/3/component",
11284
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}",
11285
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}/relatedIssueCounts",
11286
+ "GET /ex/jira/{cloudId}/rest/api/3/customFieldOption/{id}",
11287
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard",
11288
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/gadgets",
11289
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/search",
11290
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11291
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11292
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties",
11293
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11294
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11295
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy",
11296
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy/project",
11297
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11298
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11299
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11300
+ "GET /ex/jira/{cloudId}/rest/api/3/field",
11301
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search",
11302
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search/trashed",
11303
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/edit",
11304
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/search",
11305
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11306
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/favourite",
11307
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/my",
11308
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/search",
11309
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11310
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11311
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11312
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11313
+ "GET /ex/jira/{cloudId}/rest/api/3/groupuserpicker",
11314
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulkfetch",
11315
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta",
11316
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes",
11317
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}",
11318
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/limit/report",
11319
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/picker",
11320
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/watching",
11321
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11322
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog",
11323
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog/list",
11324
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11325
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11326
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/editmeta",
11327
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties",
11328
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11329
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11330
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11331
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11332
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11333
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11334
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11335
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11336
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties",
11337
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11338
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11339
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType",
11340
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
11341
+ "PUT /ex/jira/{cloudId}/rest/api/3/issues/archive/export",
11342
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype",
11343
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/project",
11344
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
11345
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/alternatives",
11346
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties",
11347
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
11348
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11349
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11350
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata/suggestions",
11351
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/match",
11352
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/parse",
11353
+ "GET /ex/jira/{cloudId}/rest/api/3/label",
11354
+ "GET /ex/jira/{cloudId}/rest/api/3/mypermissions",
11355
+ "POST /ex/jira/{cloudId}/rest/api/3/permissions/project",
11356
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme",
11357
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
11358
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
11359
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
11360
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan",
11361
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11362
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team",
11363
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11364
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11365
+ "GET /ex/jira/{cloudId}/rest/api/3/priority",
11366
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/{id}",
11367
+ "GET /ex/jira/{cloudId}/rest/api/3/project",
11368
+ "GET /ex/jira/{cloudId}/rest/api/3/project/recent",
11369
+ "GET /ex/jira/{cloudId}/rest/api/3/project/search",
11370
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type",
11371
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/accessible",
11372
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}",
11373
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}/accessible",
11374
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
11375
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatars",
11376
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-config",
11377
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
11378
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/component",
11379
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/components",
11380
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features",
11381
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties",
11382
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
11383
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role",
11384
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11385
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/roledetails",
11386
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/statuses",
11387
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/version",
11388
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/versions",
11389
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/hierarchy",
11390
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/issuesecuritylevelscheme",
11391
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/notificationscheme",
11392
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
11393
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/securitylevel",
11394
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory",
11395
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
11396
+ "GET /ex/jira/{cloudId}/rest/api/3/projects/fields",
11397
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/key",
11398
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectKey",
11399
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectName",
11400
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution",
11401
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/search",
11402
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
11403
+ "GET /ex/jira/{cloudId}/rest/api/3/search",
11404
+ "POST /ex/jira/{cloudId}/rest/api/3/search",
11405
+ "POST /ex/jira/{cloudId}/rest/api/3/search/approximate-count",
11406
+ "GET /ex/jira/{cloudId}/rest/api/3/search/jql",
11407
+ "POST /ex/jira/{cloudId}/rest/api/3/search/jql",
11408
+ "GET /ex/jira/{cloudId}/rest/api/3/status",
11409
+ "GET /ex/jira/{cloudId}/rest/api/3/status/{idOrName}",
11410
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory",
11411
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory/{idOrKey}",
11412
+ "GET /ex/jira/{cloudId}/rest/api/3/task/{taskId}",
11413
+ "GET /ex/jira/{cloudId}/rest/api/3/uiModifications",
11414
+ "POST /ex/jira/{cloudId}/rest/api/3/uiModifications",
11415
+ "PUT /ex/jira/{cloudId}/rest/api/3/uiModifications/{uiModificationId}",
11416
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}",
11417
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/avatar/{id}",
11418
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/owner/{entityId}",
11419
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}",
11420
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedIssueCounts",
11421
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11422
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/unresolvedIssueCount",
11423
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11424
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11425
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11426
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11427
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh",
11428
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/deleted",
11429
+ "POST /ex/jira/{cloudId}/rest/api/3/worklog/list",
11430
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/updated"
10455
11431
  ]
10456
11432
  },
10457
11433
  {
10458
- name: "admin.conversations:read",
11434
+ name: "write:jira-work",
11435
+ description: "Create and edit issues in Jira, post comments, create worklogs, and delete issues.",
10459
11436
  rules: [
10460
- "POST /admin.conversations.ekm.listOriginalConnectedChannelInfo",
10461
- "POST /admin.conversations.getConversationPrefs",
10462
- "POST /admin.conversations.getCustomRetention",
10463
- "POST /admin.conversations.getTeams",
10464
- "POST /admin.conversations.lookup",
10465
- "GET /admin.conversations.restrictAccess.listGroups",
10466
- "POST /admin.conversations.search"
11437
+ "DELETE /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11438
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/delete",
11439
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11440
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/move",
11441
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11442
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/unwatch",
11443
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/watch",
11444
+ "PUT /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11445
+ "DELETE /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11446
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard",
11447
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/bulk/edit",
11448
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11449
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11450
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11451
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11452
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11453
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11454
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11455
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{id}/copy",
11456
+ "POST /ex/jira/{cloudId}/rest/api/3/filter",
11457
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11458
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11459
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11460
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11461
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11462
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11463
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11464
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/owner",
11465
+ "POST /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11466
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11467
+ "POST /ex/jira/{cloudId}/rest/api/3/issue",
11468
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/archive",
11469
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/archive",
11470
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulk",
11471
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties",
11472
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties/multi",
11473
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11474
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11475
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/unarchive",
11476
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11477
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11478
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee",
11479
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/attachments",
11480
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11481
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11482
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11483
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/notify",
11484
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11485
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11486
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11487
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11488
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11489
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11490
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11491
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11492
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11493
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11494
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11495
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11496
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11497
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/move",
11498
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11499
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11500
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11501
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11502
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLink",
11503
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11504
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan",
11505
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11506
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/archive",
11507
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/duplicate",
11508
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian",
11509
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11510
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11511
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly",
11512
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11513
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11514
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/trash",
11515
+ "POST /ex/jira/{cloudId}/rest/api/3/task/{taskId}/cancel",
11516
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11517
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11518
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11519
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11520
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{versionId}/relatedwork/{relatedWorkId}"
10467
11521
  ]
10468
- },
10469
- {
11522
+ }
11523
+ ]
11524
+ }
11525
+ ]
11526
+ };
11527
+
11528
+ // ../../packages/core/src/firewalls/notion.generated.ts
11529
+ var notionFirewall = {
11530
+ name: "notion",
11531
+ description: "Notion API",
11532
+ placeholders: {
11533
+ NOTION_TOKEN: "ntn_00000000000Vm0PlaceHolder000000000000000000Aaa"
11534
+ },
11535
+ apis: [
11536
+ {
11537
+ base: "https://api.notion.com/v1",
11538
+ auth: {
11539
+ headers: {
11540
+ Authorization: "Bearer ${{ secrets.NOTION_TOKEN }}"
11541
+ }
11542
+ },
11543
+ permissions: [
11544
+ {
11545
+ name: "unrestricted",
11546
+ description: "Allow all endpoints",
11547
+ rules: ["ANY /{path*}"]
11548
+ },
11549
+ {
11550
+ name: "insert_comments",
11551
+ description: "Create comments",
11552
+ rules: ["POST /comments"]
11553
+ },
11554
+ {
11555
+ name: "insert_content",
11556
+ description: "Create pages, databases, blocks, data sources, and upload files",
11557
+ rules: [
11558
+ "PATCH /blocks/{block_id}/children",
11559
+ "POST /data_sources",
11560
+ "POST /databases",
11561
+ "POST /file_uploads",
11562
+ "POST /file_uploads/{file_upload_id}/complete",
11563
+ "POST /file_uploads/{file_upload_id}/send",
11564
+ "POST /pages",
11565
+ "POST /views",
11566
+ "POST /views/{view_id}/queries"
11567
+ ]
11568
+ },
11569
+ {
11570
+ name: "read_comments",
11571
+ description: "Read comments",
11572
+ rules: ["GET /comments", "GET /comments/{comment_id}"]
11573
+ },
11574
+ {
11575
+ name: "read_content",
11576
+ description: "Read pages, databases, blocks, data sources, and files",
11577
+ rules: [
11578
+ "GET /blocks/{block_id}",
11579
+ "GET /blocks/{block_id}/children",
11580
+ "GET /data_sources/{data_source_id}",
11581
+ "POST /data_sources/{data_source_id}/query",
11582
+ "GET /data_sources/{data_source_id}/templates",
11583
+ "GET /databases/{database_id}",
11584
+ "GET /file_uploads",
11585
+ "GET /file_uploads/{file_upload_id}",
11586
+ "GET /pages/{page_id}",
11587
+ "GET /pages/{page_id}/markdown",
11588
+ "GET /pages/{page_id}/properties/{property_id}",
11589
+ "POST /search",
11590
+ "GET /views",
11591
+ "GET /views/{view_id}",
11592
+ "GET /views/{view_id}/queries/{query_id}"
11593
+ ]
11594
+ },
11595
+ {
11596
+ name: "read_users",
11597
+ description: "Read user information",
11598
+ rules: ["GET /users", "GET /users/me", "GET /users/{user_id}"]
11599
+ },
11600
+ {
11601
+ name: "update_content",
11602
+ description: "Update and delete pages, databases, blocks, and data sources",
11603
+ rules: [
11604
+ "PATCH /blocks/{block_id}",
11605
+ "DELETE /blocks/{block_id}",
11606
+ "PATCH /data_sources/{data_source_id}",
11607
+ "PATCH /databases/{database_id}",
11608
+ "PATCH /pages/{page_id}",
11609
+ "PATCH /pages/{page_id}/markdown",
11610
+ "POST /pages/{page_id}/move",
11611
+ "PATCH /views/{view_id}",
11612
+ "DELETE /views/{view_id}",
11613
+ "DELETE /views/{view_id}/queries/{query_id}"
11614
+ ]
11615
+ }
11616
+ ]
11617
+ }
11618
+ ]
11619
+ };
11620
+
11621
+ // ../../packages/core/src/firewalls/slack.generated.ts
11622
+ var slackFirewall = {
11623
+ name: "slack",
11624
+ description: "Slack API",
11625
+ placeholders: {
11626
+ SLACK_TOKEN: "xoxb-000000000000-0000000000000-Vm0PlaceHolder0000000000"
11627
+ },
11628
+ apis: [
11629
+ {
11630
+ base: "https://slack.com/api",
11631
+ auth: {
11632
+ headers: {
11633
+ Authorization: "Bearer ${{ secrets.SLACK_TOKEN }}"
11634
+ }
11635
+ },
11636
+ permissions: [
11637
+ {
11638
+ name: "unrestricted",
11639
+ description: "Allow all endpoints",
11640
+ rules: ["ANY /{path*}"]
11641
+ },
11642
+ {
11643
+ name: "admin",
11644
+ rules: [
11645
+ "POST /admin.audit.anomaly.allow.getItem",
11646
+ "POST /admin.audit.anomaly.allow.updateItem",
11647
+ "GET /team.accessLogs",
11648
+ "GET /team.billableInfo",
11649
+ "GET /team.integrationLogs"
11650
+ ]
11651
+ },
11652
+ {
11653
+ name: "admin.analytics:read",
11654
+ rules: [
11655
+ "GET /admin.analytics.getFile",
11656
+ "GET /admin.analytics.messages.activity",
11657
+ "GET /admin.analytics.messages.metadata"
11658
+ ]
11659
+ },
11660
+ {
11661
+ name: "admin.app_activities:read",
11662
+ rules: ["POST /admin.apps.activities.list"]
11663
+ },
11664
+ {
11665
+ name: "admin.apps:read",
11666
+ rules: [
11667
+ "GET /admin.apps.approved.list",
11668
+ "POST /admin.apps.config.lookup",
11669
+ "GET /admin.apps.requests.list",
11670
+ "GET /admin.apps.restricted.list"
11671
+ ]
11672
+ },
11673
+ {
11674
+ name: "admin.apps:write",
11675
+ rules: [
11676
+ "POST /admin.apps.approve",
11677
+ "POST /admin.apps.clearResolution",
11678
+ "POST /admin.apps.config.set",
11679
+ "POST /admin.apps.requests.cancel",
11680
+ "POST /admin.apps.restrict",
11681
+ "POST /admin.apps.uninstall"
11682
+ ]
11683
+ },
11684
+ {
11685
+ name: "admin.barriers:read",
11686
+ rules: ["GET /admin.barriers.list"]
11687
+ },
11688
+ {
11689
+ name: "admin.barriers:write",
11690
+ rules: [
11691
+ "POST /admin.barriers.create",
11692
+ "POST /admin.barriers.delete",
11693
+ "POST /admin.barriers.update"
11694
+ ]
11695
+ },
11696
+ {
11697
+ name: "admin.conversations:manage_objects",
11698
+ rules: [
11699
+ "POST /admin.conversations.createForObjects",
11700
+ "POST /admin.conversations.linkObjects",
11701
+ "POST /admin.conversations.unlinkObjects"
11702
+ ]
11703
+ },
11704
+ {
11705
+ name: "admin.conversations:read",
11706
+ rules: [
11707
+ "POST /admin.conversations.ekm.listOriginalConnectedChannelInfo",
11708
+ "POST /admin.conversations.getConversationPrefs",
11709
+ "POST /admin.conversations.getCustomRetention",
11710
+ "POST /admin.conversations.getTeams",
11711
+ "POST /admin.conversations.lookup",
11712
+ "GET /admin.conversations.restrictAccess.listGroups",
11713
+ "POST /admin.conversations.search"
11714
+ ]
11715
+ },
11716
+ {
10470
11717
  name: "admin.conversations:write",
10471
11718
  rules: [
10472
11719
  "POST /admin.conversations.archive",
@@ -11201,12 +12448,16 @@ var slackFirewall = {
11201
12448
 
11202
12449
  // ../../packages/core/src/firewalls/index.ts
11203
12450
  var builtinFirewalls = {
12451
+ confluence: confluenceFirewall,
12452
+ figma: figmaFirewall,
11204
12453
  github: githubFirewall,
11205
12454
  gmail: gmailFirewall,
11206
12455
  "google-calendar": googleCalendarFirewall,
11207
12456
  "google-docs": googleDocsFirewall,
11208
12457
  "google-drive": googleDriveFirewall,
11209
12458
  "google-sheets": googleSheetsFirewall,
12459
+ jira: jiraFirewall,
12460
+ notion: notionFirewall,
11210
12461
  slack: slackFirewall
11211
12462
  };
11212
12463
 
@@ -12032,9 +13283,25 @@ var zeroOrgDeleteContract = c29.router({
12032
13283
  }
12033
13284
  });
12034
13285
 
12035
- // ../../packages/core/src/contracts/zero-org-members.ts
13286
+ // ../../packages/core/src/contracts/zero-org-list.ts
12036
13287
  var c30 = initContract();
12037
- var zeroOrgMembersContract = c30.router({
13288
+ var zeroOrgListContract = c30.router({
13289
+ list: {
13290
+ method: "GET",
13291
+ path: "/api/zero/org/list",
13292
+ headers: authHeadersSchema,
13293
+ responses: {
13294
+ 200: orgListResponseSchema,
13295
+ 401: apiErrorSchema,
13296
+ 500: apiErrorSchema
13297
+ },
13298
+ summary: "List all accessible orgs for the authenticated user"
13299
+ }
13300
+ });
13301
+
13302
+ // ../../packages/core/src/contracts/zero-org-members.ts
13303
+ var c31 = initContract();
13304
+ var zeroOrgMembersContract = c31.router({
12038
13305
  members: {
12039
13306
  method: "GET",
12040
13307
  path: "/api/zero/org/members",
@@ -12078,7 +13345,7 @@ var zeroOrgMembersContract = c30.router({
12078
13345
  summary: "Remove a member from the org (zero proxy)"
12079
13346
  }
12080
13347
  });
12081
- var zeroOrgInviteContract = c30.router({
13348
+ var zeroOrgInviteContract = c31.router({
12082
13349
  invite: {
12083
13350
  method: "POST",
12084
13351
  path: "/api/zero/org/invite",
@@ -12097,8 +13364,8 @@ var zeroOrgInviteContract = c30.router({
12097
13364
 
12098
13365
  // ../../packages/core/src/contracts/zero-composes.ts
12099
13366
  import { z as z34 } from "zod";
12100
- var c31 = initContract();
12101
- var zeroComposesMainContract = c31.router({
13367
+ var c32 = initContract();
13368
+ var zeroComposesMainContract = c32.router({
12102
13369
  getByName: {
12103
13370
  method: "GET",
12104
13371
  path: "/api/zero/composes",
@@ -12116,7 +13383,7 @@ var zeroComposesMainContract = c31.router({
12116
13383
  summary: "Get agent compose by name (zero proxy)"
12117
13384
  }
12118
13385
  });
12119
- var zeroComposesByIdContract = c31.router({
13386
+ var zeroComposesByIdContract = c32.router({
12120
13387
  getById: {
12121
13388
  method: "GET",
12122
13389
  path: "/api/zero/composes/:id",
@@ -12139,9 +13406,9 @@ var zeroComposesByIdContract = c31.router({
12139
13406
  pathParams: z34.object({
12140
13407
  id: z34.string().uuid("Compose ID is required")
12141
13408
  }),
12142
- body: c31.noBody(),
13409
+ body: c32.noBody(),
12143
13410
  responses: {
12144
- 204: c31.noBody(),
13411
+ 204: c32.noBody(),
12145
13412
  401: apiErrorSchema,
12146
13413
  403: apiErrorSchema,
12147
13414
  404: apiErrorSchema,
@@ -12150,7 +13417,7 @@ var zeroComposesByIdContract = c31.router({
12150
13417
  summary: "Delete agent compose (zero proxy)"
12151
13418
  }
12152
13419
  });
12153
- var zeroComposesListContract = c31.router({
13420
+ var zeroComposesListContract = c32.router({
12154
13421
  list: {
12155
13422
  method: "GET",
12156
13423
  path: "/api/zero/composes/list",
@@ -12182,8 +13449,8 @@ var zeroRunRequestSchema = unifiedRunRequestSchema.omit({
12182
13449
  vars: true,
12183
13450
  secrets: true
12184
13451
  });
12185
- var c32 = initContract();
12186
- var zeroRunsMainContract = c32.router({
13452
+ var c33 = initContract();
13453
+ var zeroRunsMainContract = c33.router({
12187
13454
  create: {
12188
13455
  method: "POST",
12189
13456
  path: "/api/zero/runs",
@@ -12199,7 +13466,7 @@ var zeroRunsMainContract = c32.router({
12199
13466
  summary: "Create and execute agent run (zero proxy)"
12200
13467
  }
12201
13468
  });
12202
- var zeroRunsByIdContract = c32.router({
13469
+ var zeroRunsByIdContract = c33.router({
12203
13470
  getById: {
12204
13471
  method: "GET",
12205
13472
  path: "/api/zero/runs/:id",
@@ -12216,7 +13483,7 @@ var zeroRunsByIdContract = c32.router({
12216
13483
  summary: "Get agent run by ID (zero proxy)"
12217
13484
  }
12218
13485
  });
12219
- var zeroRunsCancelContract = c32.router({
13486
+ var zeroRunsCancelContract = c33.router({
12220
13487
  cancel: {
12221
13488
  method: "POST",
12222
13489
  path: "/api/zero/runs/:id/cancel",
@@ -12235,7 +13502,7 @@ var zeroRunsCancelContract = c32.router({
12235
13502
  summary: "Cancel a pending or running run (zero proxy)"
12236
13503
  }
12237
13504
  });
12238
- var zeroRunsQueueContract = c32.router({
13505
+ var zeroRunsQueueContract = c33.router({
12239
13506
  getQueue: {
12240
13507
  method: "GET",
12241
13508
  path: "/api/zero/runs/queue",
@@ -12248,7 +13515,7 @@ var zeroRunsQueueContract = c32.router({
12248
13515
  summary: "Get org run queue status (zero proxy)"
12249
13516
  }
12250
13517
  });
12251
- var zeroRunAgentEventsContract = c32.router({
13518
+ var zeroRunAgentEventsContract = c33.router({
12252
13519
  getAgentEvents: {
12253
13520
  method: "GET",
12254
13521
  path: "/api/zero/runs/:id/telemetry/agent",
@@ -12272,8 +13539,8 @@ var zeroRunAgentEventsContract = c32.router({
12272
13539
 
12273
13540
  // ../../packages/core/src/contracts/zero-schedules.ts
12274
13541
  import { z as z36 } from "zod";
12275
- var c33 = initContract();
12276
- var zeroSchedulesMainContract = c33.router({
13542
+ var c34 = initContract();
13543
+ var zeroSchedulesMainContract = c34.router({
12277
13544
  deploy: {
12278
13545
  method: "POST",
12279
13546
  path: "/api/zero/schedules",
@@ -12301,7 +13568,7 @@ var zeroSchedulesMainContract = c33.router({
12301
13568
  summary: "List all schedules (zero proxy)"
12302
13569
  }
12303
13570
  });
12304
- var zeroSchedulesByNameContract = c33.router({
13571
+ var zeroSchedulesByNameContract = c34.router({
12305
13572
  delete: {
12306
13573
  method: "DELETE",
12307
13574
  path: "/api/zero/schedules/:name",
@@ -12313,7 +13580,7 @@ var zeroSchedulesByNameContract = c33.router({
12313
13580
  composeId: z36.string().uuid("Compose ID required")
12314
13581
  }),
12315
13582
  responses: {
12316
- 204: c33.noBody(),
13583
+ 204: c34.noBody(),
12317
13584
  401: apiErrorSchema,
12318
13585
  403: apiErrorSchema,
12319
13586
  404: apiErrorSchema
@@ -12321,7 +13588,7 @@ var zeroSchedulesByNameContract = c33.router({
12321
13588
  summary: "Delete schedule (zero proxy)"
12322
13589
  }
12323
13590
  });
12324
- var zeroSchedulesEnableContract = c33.router({
13591
+ var zeroSchedulesEnableContract = c34.router({
12325
13592
  enable: {
12326
13593
  method: "POST",
12327
13594
  path: "/api/zero/schedules/:name/enable",
@@ -12364,8 +13631,8 @@ var zeroSchedulesEnableContract = c33.router({
12364
13631
 
12365
13632
  // ../../packages/core/src/contracts/zero-model-providers.ts
12366
13633
  import { z as z37 } from "zod";
12367
- var c34 = initContract();
12368
- var zeroModelProvidersMainContract = c34.router({
13634
+ var c35 = initContract();
13635
+ var zeroModelProvidersMainContract = c35.router({
12369
13636
  list: {
12370
13637
  method: "GET",
12371
13638
  path: "/api/zero/model-providers",
@@ -12393,7 +13660,7 @@ var zeroModelProvidersMainContract = c34.router({
12393
13660
  summary: "Create or update an org-level model provider (admin only)"
12394
13661
  }
12395
13662
  });
12396
- var zeroModelProvidersByTypeContract = c34.router({
13663
+ var zeroModelProvidersByTypeContract = c35.router({
12397
13664
  delete: {
12398
13665
  method: "DELETE",
12399
13666
  path: "/api/zero/model-providers/:type",
@@ -12402,7 +13669,7 @@ var zeroModelProvidersByTypeContract = c34.router({
12402
13669
  type: modelProviderTypeSchema
12403
13670
  }),
12404
13671
  responses: {
12405
- 204: c34.noBody(),
13672
+ 204: c35.noBody(),
12406
13673
  401: apiErrorSchema,
12407
13674
  403: apiErrorSchema,
12408
13675
  404: apiErrorSchema,
@@ -12411,7 +13678,7 @@ var zeroModelProvidersByTypeContract = c34.router({
12411
13678
  summary: "Delete an org-level model provider (admin only)"
12412
13679
  }
12413
13680
  });
12414
- var zeroModelProvidersDefaultContract = c34.router({
13681
+ var zeroModelProvidersDefaultContract = c35.router({
12415
13682
  setDefault: {
12416
13683
  method: "POST",
12417
13684
  path: "/api/zero/model-providers/:type/default",
@@ -12430,7 +13697,7 @@ var zeroModelProvidersDefaultContract = c34.router({
12430
13697
  summary: "Set org-level model provider as default (admin only)"
12431
13698
  }
12432
13699
  });
12433
- var zeroModelProvidersUpdateModelContract = c34.router({
13700
+ var zeroModelProvidersUpdateModelContract = c35.router({
12434
13701
  updateModel: {
12435
13702
  method: "PATCH",
12436
13703
  path: "/api/zero/model-providers/:type/model",
@@ -12451,8 +13718,8 @@ var zeroModelProvidersUpdateModelContract = c34.router({
12451
13718
  });
12452
13719
 
12453
13720
  // ../../packages/core/src/contracts/zero-user-preferences.ts
12454
- var c35 = initContract();
12455
- var zeroUserPreferencesContract = c35.router({
13721
+ var c36 = initContract();
13722
+ var zeroUserPreferencesContract = c36.router({
12456
13723
  get: {
12457
13724
  method: "GET",
12458
13725
  path: "/api/zero/user-preferences",
@@ -12480,8 +13747,8 @@ var zeroUserPreferencesContract = c35.router({
12480
13747
  });
12481
13748
 
12482
13749
  // ../../packages/core/src/contracts/zero-secrets.ts
12483
- var c36 = initContract();
12484
- var zeroSecretsContract = c36.router({
13750
+ var c37 = initContract();
13751
+ var zeroSecretsContract = c37.router({
12485
13752
  set: {
12486
13753
  method: "POST",
12487
13754
  path: "/api/zero/secrets",
@@ -12497,7 +13764,7 @@ var zeroSecretsContract = c36.router({
12497
13764
  summary: "Create or update a secret"
12498
13765
  }
12499
13766
  });
12500
- var zeroVariablesContract = c36.router({
13767
+ var zeroVariablesContract = c37.router({
12501
13768
  set: {
12502
13769
  method: "POST",
12503
13770
  path: "/api/zero/variables",
@@ -12516,8 +13783,8 @@ var zeroVariablesContract = c36.router({
12516
13783
 
12517
13784
  // ../../packages/core/src/contracts/zero-sessions.ts
12518
13785
  import { z as z38 } from "zod";
12519
- var c37 = initContract();
12520
- var zeroSessionsByIdContract = c37.router({
13786
+ var c38 = initContract();
13787
+ var zeroSessionsByIdContract = c38.router({
12521
13788
  getById: {
12522
13789
  method: "GET",
12523
13790
  path: "/api/zero/sessions/:id",
@@ -12537,8 +13804,8 @@ var zeroSessionsByIdContract = c37.router({
12537
13804
 
12538
13805
  // ../../packages/core/src/contracts/integrations.ts
12539
13806
  import { z as z39 } from "zod";
12540
- var c38 = initContract();
12541
- var integrationsSlackMessageContract = c38.router({
13807
+ var c39 = initContract();
13808
+ var integrationsSlackMessageContract = c39.router({
12542
13809
  sendMessage: {
12543
13810
  method: "POST",
12544
13811
  path: "/api/agent/integrations/slack/message",
@@ -12564,6 +13831,147 @@ var integrationsSlackMessageContract = c38.router({
12564
13831
  }
12565
13832
  });
12566
13833
 
13834
+ // ../../packages/core/src/contracts/zero-billing.ts
13835
+ import { z as z40 } from "zod";
13836
+ var c40 = initContract();
13837
+ var autoRechargeSchema = z40.object({
13838
+ enabled: z40.boolean(),
13839
+ threshold: z40.number().nullable(),
13840
+ amount: z40.number().nullable()
13841
+ });
13842
+ var billingStatusResponseSchema = z40.object({
13843
+ tier: z40.string(),
13844
+ credits: z40.number(),
13845
+ subscriptionStatus: z40.string().nullable(),
13846
+ currentPeriodEnd: z40.string().nullable(),
13847
+ hasSubscription: z40.boolean(),
13848
+ autoRecharge: autoRechargeSchema
13849
+ });
13850
+ var checkoutResponseSchema = z40.object({
13851
+ url: z40.string()
13852
+ });
13853
+ var portalResponseSchema = z40.object({
13854
+ url: z40.string()
13855
+ });
13856
+ var checkoutRequestSchema = z40.object({
13857
+ tier: z40.enum(["pro", "team"]),
13858
+ successUrl: z40.string().url(),
13859
+ cancelUrl: z40.string().url()
13860
+ });
13861
+ var portalRequestSchema = z40.object({
13862
+ returnUrl: z40.string().min(1)
13863
+ });
13864
+ var autoRechargeUpdateRequestSchema = z40.object({
13865
+ enabled: z40.boolean(),
13866
+ threshold: z40.number().int().positive().optional(),
13867
+ amount: z40.number().int().min(1e3).optional()
13868
+ });
13869
+ var zeroBillingStatusContract = c40.router({
13870
+ get: {
13871
+ method: "GET",
13872
+ path: "/api/zero/billing/status",
13873
+ headers: authHeadersSchema,
13874
+ responses: {
13875
+ 200: billingStatusResponseSchema,
13876
+ 401: apiErrorSchema,
13877
+ 500: apiErrorSchema
13878
+ },
13879
+ summary: "Get billing status for current org"
13880
+ }
13881
+ });
13882
+ var zeroBillingCheckoutContract = c40.router({
13883
+ create: {
13884
+ method: "POST",
13885
+ path: "/api/zero/billing/checkout",
13886
+ headers: authHeadersSchema,
13887
+ body: checkoutRequestSchema,
13888
+ responses: {
13889
+ 200: checkoutResponseSchema,
13890
+ 400: apiErrorSchema,
13891
+ 401: apiErrorSchema,
13892
+ 500: apiErrorSchema,
13893
+ 503: apiErrorSchema
13894
+ },
13895
+ summary: "Create Stripe checkout session"
13896
+ }
13897
+ });
13898
+ var zeroBillingPortalContract = c40.router({
13899
+ create: {
13900
+ method: "POST",
13901
+ path: "/api/zero/billing/portal",
13902
+ headers: authHeadersSchema,
13903
+ body: portalRequestSchema,
13904
+ responses: {
13905
+ 200: portalResponseSchema,
13906
+ 400: apiErrorSchema,
13907
+ 401: apiErrorSchema,
13908
+ 500: apiErrorSchema,
13909
+ 503: apiErrorSchema
13910
+ },
13911
+ summary: "Create Stripe billing portal session"
13912
+ }
13913
+ });
13914
+ var zeroBillingAutoRechargeContract = c40.router({
13915
+ get: {
13916
+ method: "GET",
13917
+ path: "/api/zero/billing/auto-recharge",
13918
+ headers: authHeadersSchema,
13919
+ responses: {
13920
+ 200: autoRechargeSchema,
13921
+ 401: apiErrorSchema,
13922
+ 500: apiErrorSchema
13923
+ },
13924
+ summary: "Get auto-recharge configuration"
13925
+ },
13926
+ update: {
13927
+ method: "PUT",
13928
+ path: "/api/zero/billing/auto-recharge",
13929
+ headers: authHeadersSchema,
13930
+ body: autoRechargeUpdateRequestSchema,
13931
+ responses: {
13932
+ 200: autoRechargeSchema,
13933
+ 400: apiErrorSchema,
13934
+ 401: apiErrorSchema,
13935
+ 403: apiErrorSchema,
13936
+ 500: apiErrorSchema
13937
+ },
13938
+ summary: "Update auto-recharge configuration"
13939
+ }
13940
+ });
13941
+
13942
+ // ../../packages/core/src/contracts/zero-usage.ts
13943
+ import { z as z41 } from "zod";
13944
+ var c41 = initContract();
13945
+ var memberUsageSchema = z41.object({
13946
+ userId: z41.string(),
13947
+ email: z41.string(),
13948
+ inputTokens: z41.number(),
13949
+ outputTokens: z41.number(),
13950
+ cacheReadInputTokens: z41.number(),
13951
+ cacheCreationInputTokens: z41.number(),
13952
+ creditsCharged: z41.number()
13953
+ });
13954
+ var usageMembersResponseSchema = z41.object({
13955
+ period: z41.object({
13956
+ start: z41.string(),
13957
+ end: z41.string()
13958
+ }).nullable(),
13959
+ members: z41.array(memberUsageSchema)
13960
+ });
13961
+ var zeroUsageMembersContract = c41.router({
13962
+ get: {
13963
+ method: "GET",
13964
+ path: "/api/zero/usage/members",
13965
+ headers: authHeadersSchema,
13966
+ responses: {
13967
+ 200: usageMembersResponseSchema,
13968
+ 401: apiErrorSchema,
13969
+ 500: apiErrorSchema
13970
+ },
13971
+ summary: "Get per-member usage for current billing period"
13972
+ }
13973
+ });
13974
+
12567
13975
  // ../../packages/core/src/storage-names.ts
12568
13976
  function getInstructionsStorageName(agentName) {
12569
13977
  return `agent-instructions@${agentName}`;
@@ -13203,7 +14611,7 @@ function getConfigPath() {
13203
14611
  return join2(homedir2(), ".vm0", "config.json");
13204
14612
  }
13205
14613
  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"}`));
14614
+ console.log(chalk4.bold(`VM0 CLI v${"9.75.1"}`));
13207
14615
  console.log();
13208
14616
  const config = await loadConfig();
13209
14617
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -13841,35 +15249,6 @@ async function getConnector(type2) {
13841
15249
  handleError(result, `Failed to get connector "${type2}"`);
13842
15250
  }
13843
15251
 
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
15252
  // src/lib/api/domains/user-preferences.ts
13874
15253
  import { initClient as initClient11 } from "@ts-rest/core";
13875
15254
  async function getUserPreferences() {
@@ -13992,8 +15371,8 @@ async function resolveSkills(skillUrls) {
13992
15371
  }
13993
15372
 
13994
15373
  // src/lib/domain/yaml-validator.ts
13995
- import { z as z40 } from "zod";
13996
- var cliAgentNameSchema = z40.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
15374
+ import { z as z42 } from "zod";
15375
+ var cliAgentNameSchema = z42.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
13997
15376
  /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$/,
13998
15377
  "Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens"
13999
15378
  );
@@ -14007,7 +15386,7 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
14007
15386
  resolveSkillRef(skillRef);
14008
15387
  } catch (error) {
14009
15388
  ctx.addIssue({
14010
- code: z40.ZodIssueCode.custom,
15389
+ code: z42.ZodIssueCode.custom,
14011
15390
  message: error instanceof Error ? error.message : `Invalid skill reference: ${skillRef}`,
14012
15391
  path: ["skills", i]
14013
15392
  });
@@ -14017,15 +15396,15 @@ var cliAgentDefinitionSchema = agentDefinitionSchema.superRefine(
14017
15396
  }
14018
15397
  }
14019
15398
  );
14020
- var cliComposeSchema = z40.object({
14021
- version: z40.string().min(1, "Missing config.version"),
14022
- agents: z40.record(cliAgentNameSchema, cliAgentDefinitionSchema),
14023
- volumes: z40.record(z40.string(), volumeConfigSchema).optional()
15399
+ var cliComposeSchema = z42.object({
15400
+ version: z42.string().min(1, "Missing config.version"),
15401
+ agents: z42.record(cliAgentNameSchema, cliAgentDefinitionSchema),
15402
+ volumes: z42.record(z42.string(), volumeConfigSchema).optional()
14024
15403
  }).superRefine((config, ctx) => {
14025
15404
  const agentKeys = Object.keys(config.agents);
14026
15405
  if (agentKeys.length === 0) {
14027
15406
  ctx.addIssue({
14028
- code: z40.ZodIssueCode.custom,
15407
+ code: z42.ZodIssueCode.custom,
14029
15408
  message: "agents must have at least one agent defined",
14030
15409
  path: ["agents"]
14031
15410
  });
@@ -14033,7 +15412,7 @@ var cliComposeSchema = z40.object({
14033
15412
  }
14034
15413
  if (agentKeys.length > 1) {
14035
15414
  ctx.addIssue({
14036
- code: z40.ZodIssueCode.custom,
15415
+ code: z42.ZodIssueCode.custom,
14037
15416
  message: "Multiple agents not supported yet. Only one agent allowed.",
14038
15417
  path: ["agents"]
14039
15418
  });
@@ -14045,7 +15424,7 @@ var cliComposeSchema = z40.object({
14045
15424
  if (agentVolumes && agentVolumes.length > 0) {
14046
15425
  if (!config.volumes) {
14047
15426
  ctx.addIssue({
14048
- code: z40.ZodIssueCode.custom,
15427
+ code: z42.ZodIssueCode.custom,
14049
15428
  message: "Agent references volumes but no volumes section defined. Each volume must have explicit name and version.",
14050
15429
  path: ["volumes"]
14051
15430
  });
@@ -14055,7 +15434,7 @@ var cliComposeSchema = z40.object({
14055
15434
  const parts = volDeclaration.split(":");
14056
15435
  if (parts.length !== 2) {
14057
15436
  ctx.addIssue({
14058
- code: z40.ZodIssueCode.custom,
15437
+ code: z42.ZodIssueCode.custom,
14059
15438
  message: `Invalid volume declaration: ${volDeclaration}. Expected format: volume-key:/mount/path`,
14060
15439
  path: ["agents", agentName, "volumes"]
14061
15440
  });
@@ -14064,7 +15443,7 @@ var cliComposeSchema = z40.object({
14064
15443
  const volumeKey = parts[0].trim();
14065
15444
  if (!config.volumes[volumeKey]) {
14066
15445
  ctx.addIssue({
14067
- code: z40.ZodIssueCode.custom,
15446
+ code: z42.ZodIssueCode.custom,
14068
15447
  message: `Volume "${volumeKey}" is not defined in volumes section. Each volume must have explicit name and version.`,
14069
15448
  path: ["volumes", volumeKey]
14070
15449
  });
@@ -15263,7 +16642,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
15263
16642
  options.autoUpdate = false;
15264
16643
  }
15265
16644
  if (options.autoUpdate !== false) {
15266
- await startSilentUpgrade("9.74.4");
16645
+ await startSilentUpgrade("9.75.1");
15267
16646
  }
15268
16647
  try {
15269
16648
  let result;
@@ -16098,7 +17477,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
16098
17477
  withErrorHandler(
16099
17478
  async (identifier, prompt, options) => {
16100
17479
  if (options.autoUpdate !== false) {
16101
- await startSilentUpgrade("9.74.4");
17480
+ await startSilentUpgrade("9.75.1");
16102
17481
  }
16103
17482
  const { org, name, version } = parseIdentifier(identifier);
16104
17483
  let composeId;
@@ -17854,7 +19233,7 @@ var cookAction = new Command35().name("cook").description("Quick start: prepare,
17854
19233
  withErrorHandler(
17855
19234
  async (prompt, options) => {
17856
19235
  if (options.autoUpdate !== false) {
17857
- const shouldExit = await checkAndUpgrade("9.74.4", prompt);
19236
+ const shouldExit = await checkAndUpgrade("9.75.1", prompt);
17858
19237
  if (shouldExit) {
17859
19238
  process.exit(0);
17860
19239
  }
@@ -18566,26 +19945,6 @@ var ApiClient = class {
18566
19945
  const message = errorBody.error?.message || `Failed to list runs for schedule "${params.name}"`;
18567
19946
  throw new Error(message);
18568
19947
  }
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
19948
  /**
18590
19949
  * Generic GET request
18591
19950
  */
@@ -20236,7 +21595,7 @@ var listCommand9 = new Command65().name("list").alias("ls").description("List al
20236
21595
  );
20237
21596
  return;
20238
21597
  }
20239
- const nameWidth = Math.max(4, ...data.composes.map((c39) => c39.name.length));
21598
+ const nameWidth = Math.max(4, ...data.composes.map((c42) => c42.name.length));
20240
21599
  const header = ["NAME".padEnd(nameWidth), "VERSION", "UPDATED"].join(
20241
21600
  " "
20242
21601
  );
@@ -20569,9 +21928,6 @@ var initCommand4 = new Command68().name("init").description("Initialize a new VM
20569
21928
  console.log(
20570
21929
  ` 2. Edit ${chalk60.cyan("AGENTS.md")} to customize your agent's workflow`
20571
21930
  );
20572
- console.log(
20573
- ` Or install Claude plugin: ${chalk60.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
20574
- );
20575
21931
  console.log(
20576
21932
  ` 3. Run your agent: ${chalk60.cyan(`vm0 cook "let's start working"`)}`
20577
21933
  );
@@ -20837,7 +22193,7 @@ async function gatherFrequency(optionFrequency, existingFrequency) {
20837
22193
  if (!isInteractive()) {
20838
22194
  throw new Error("--frequency is required (daily|weekly|monthly|once|loop)");
20839
22195
  }
20840
- const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c39) => c39.value === existingFrequency) : 0;
22196
+ const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c42) => c42.value === existingFrequency) : 0;
20841
22197
  frequency = await promptSelect(
20842
22198
  "Schedule frequency",
20843
22199
  FREQUENCY_CHOICES,
@@ -20862,7 +22218,7 @@ async function gatherDay(frequency, optionDay, existingDay) {
20862
22218
  throw new Error("--day is required for weekly/monthly");
20863
22219
  }
20864
22220
  if (frequency === "weekly") {
20865
- const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c39) => c39.value === existingDay) : 0;
22221
+ const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c42) => c42.value === existingDay) : 0;
20866
22222
  const day2 = await promptSelect(
20867
22223
  "Day of week",
20868
22224
  DAY_OF_WEEK_CHOICES,
@@ -21510,217 +22866,68 @@ var disableCommand = new Command74().name("disable").description("Disable a sche
21510
22866
  // src/commands/schedule/index.ts
21511
22867
  var scheduleCommand = new Command75().name("schedule").description("Manage agent schedules").addCommand(setupCommand2).addCommand(listCommand10).addCommand(statusCommand7).addCommand(deleteCommand2).addCommand(enableCommand).addCommand(disableCommand);
21512
22868
 
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
22869
  // src/commands/secret/index.ts
21663
- import { Command as Command80 } from "commander";
22870
+ import { Command as Command79 } from "commander";
21664
22871
 
21665
22872
  // 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(
22873
+ import { Command as Command76 } from "commander";
22874
+ import chalk67 from "chalk";
22875
+ var listCommand11 = new Command76().name("list").alias("ls").description("List all secrets").action(
21669
22876
  withErrorHandler(async () => {
21670
22877
  const result = await listSecrets();
21671
22878
  if (result.secrets.length === 0) {
21672
- console.log(chalk68.dim("No secrets found"));
22879
+ console.log(chalk67.dim("No secrets found"));
21673
22880
  console.log();
21674
22881
  console.log("To add a secret:");
21675
- console.log(chalk68.cyan(" vm0 secret set MY_API_KEY --body <value>"));
22882
+ console.log(chalk67.cyan(" vm0 secret set MY_API_KEY --body <value>"));
21676
22883
  return;
21677
22884
  }
21678
- console.log(chalk68.bold("Secrets:"));
22885
+ console.log(chalk67.bold("Secrets:"));
21679
22886
  console.log();
21680
22887
  for (const secret of result.secrets) {
21681
22888
  let typeIndicator = "";
21682
22889
  let derivedLine = null;
21683
22890
  if (secret.type === "model-provider") {
21684
- typeIndicator = chalk68.dim(" [model-provider]");
22891
+ typeIndicator = chalk67.dim(" [model-provider]");
21685
22892
  } else if (secret.type === "connector") {
21686
22893
  const derived = getConnectorDerivedNames(secret.name);
21687
22894
  if (derived) {
21688
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21689
- derivedLine = chalk68.dim(
22895
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22896
+ derivedLine = chalk67.dim(
21690
22897
  `Available as: ${derived.envVarNames.join(", ")}`
21691
22898
  );
21692
22899
  } else {
21693
- typeIndicator = chalk68.dim(" [connector]");
22900
+ typeIndicator = chalk67.dim(" [connector]");
21694
22901
  }
21695
22902
  } else if (secret.type === "user") {
21696
22903
  const derived = getConnectorDerivedNames(secret.name);
21697
22904
  if (derived) {
21698
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21699
- derivedLine = chalk68.dim(
22905
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22906
+ derivedLine = chalk67.dim(
21700
22907
  `Available as: ${derived.envVarNames.join(", ")}`
21701
22908
  );
21702
22909
  }
21703
22910
  }
21704
- console.log(` ${chalk68.cyan(secret.name)}${typeIndicator}`);
22911
+ console.log(` ${chalk67.cyan(secret.name)}${typeIndicator}`);
21705
22912
  if (derivedLine) {
21706
22913
  console.log(` ${derivedLine}`);
21707
22914
  }
21708
22915
  if (secret.description) {
21709
- console.log(` ${chalk68.dim(secret.description)}`);
22916
+ console.log(` ${chalk67.dim(secret.description)}`);
21710
22917
  }
21711
22918
  console.log(
21712
- ` ${chalk68.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
22919
+ ` ${chalk67.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
21713
22920
  );
21714
22921
  console.log();
21715
22922
  }
21716
- console.log(chalk68.dim(`Total: ${result.secrets.length} secret(s)`));
22923
+ console.log(chalk67.dim(`Total: ${result.secrets.length} secret(s)`));
21717
22924
  })
21718
22925
  );
21719
22926
 
21720
22927
  // 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(
22928
+ import { Command as Command77 } from "commander";
22929
+ import chalk68 from "chalk";
22930
+ var setCommand4 = new Command77().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
21724
22931
  "-b, --body <value>",
21725
22932
  "Secret value (required in non-interactive mode)"
21726
22933
  ).option("-d, --description <description>", "Optional description").action(
@@ -21759,19 +22966,19 @@ var setCommand4 = new Command78().name("set").description("Create or update a se
21759
22966
  }
21760
22967
  throw error;
21761
22968
  }
21762
- console.log(chalk69.green(`\u2713 Secret "${secret.name}" saved`));
22969
+ console.log(chalk68.green(`\u2713 Secret "${secret.name}" saved`));
21763
22970
  console.log();
21764
22971
  console.log("Use in vm0.yaml:");
21765
- console.log(chalk69.cyan(` environment:`));
21766
- console.log(chalk69.cyan(` ${name}: \${{ secrets.${name} }}`));
22972
+ console.log(chalk68.cyan(` environment:`));
22973
+ console.log(chalk68.cyan(` ${name}: \${{ secrets.${name} }}`));
21767
22974
  }
21768
22975
  )
21769
22976
  );
21770
22977
 
21771
22978
  // 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(
22979
+ import { Command as Command78 } from "commander";
22980
+ import chalk69 from "chalk";
22981
+ var deleteCommand3 = new Command78().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21775
22982
  withErrorHandler(async (name, options) => {
21776
22983
  try {
21777
22984
  await getSecret(name);
@@ -21790,61 +22997,61 @@ var deleteCommand3 = new Command79().name("delete").description("Delete a secret
21790
22997
  false
21791
22998
  );
21792
22999
  if (!confirmed) {
21793
- console.log(chalk70.dim("Cancelled"));
23000
+ console.log(chalk69.dim("Cancelled"));
21794
23001
  return;
21795
23002
  }
21796
23003
  }
21797
23004
  await deleteSecret(name);
21798
- console.log(chalk70.green(`\u2713 Secret "${name}" deleted`));
23005
+ console.log(chalk69.green(`\u2713 Secret "${name}" deleted`));
21799
23006
  })
21800
23007
  );
21801
23008
 
21802
23009
  // 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);
23010
+ var secretCommand = new Command79().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand11).addCommand(setCommand4).addCommand(deleteCommand3);
21804
23011
 
21805
23012
  // src/commands/variable/index.ts
21806
- import { Command as Command84 } from "commander";
23013
+ import { Command as Command83 } from "commander";
21807
23014
 
21808
23015
  // src/commands/variable/list.ts
21809
- import { Command as Command81 } from "commander";
21810
- import chalk71 from "chalk";
23016
+ import { Command as Command80 } from "commander";
23017
+ import chalk70 from "chalk";
21811
23018
  function truncateValue2(value, maxLength = 60) {
21812
23019
  if (value.length <= maxLength) {
21813
23020
  return value;
21814
23021
  }
21815
23022
  return value.slice(0, maxLength - 15) + "... [truncated]";
21816
23023
  }
21817
- var listCommand12 = new Command81().name("list").alias("ls").description("List all variables").action(
23024
+ var listCommand12 = new Command80().name("list").alias("ls").description("List all variables").action(
21818
23025
  withErrorHandler(async () => {
21819
23026
  const result = await listVariables();
21820
23027
  if (result.variables.length === 0) {
21821
- console.log(chalk71.dim("No variables found"));
23028
+ console.log(chalk70.dim("No variables found"));
21822
23029
  console.log();
21823
23030
  console.log("To add a variable:");
21824
- console.log(chalk71.cyan(" vm0 variable set MY_VAR <value>"));
23031
+ console.log(chalk70.cyan(" vm0 variable set MY_VAR <value>"));
21825
23032
  return;
21826
23033
  }
21827
- console.log(chalk71.bold("Variables:"));
23034
+ console.log(chalk70.bold("Variables:"));
21828
23035
  console.log();
21829
23036
  for (const variable of result.variables) {
21830
23037
  const displayValue = truncateValue2(variable.value);
21831
- console.log(` ${chalk71.cyan(variable.name)} = ${displayValue}`);
23038
+ console.log(` ${chalk70.cyan(variable.name)} = ${displayValue}`);
21832
23039
  if (variable.description) {
21833
- console.log(` ${chalk71.dim(variable.description)}`);
23040
+ console.log(` ${chalk70.dim(variable.description)}`);
21834
23041
  }
21835
23042
  console.log(
21836
- ` ${chalk71.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
23043
+ ` ${chalk70.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
21837
23044
  );
21838
23045
  console.log();
21839
23046
  }
21840
- console.log(chalk71.dim(`Total: ${result.variables.length} variable(s)`));
23047
+ console.log(chalk70.dim(`Total: ${result.variables.length} variable(s)`));
21841
23048
  })
21842
23049
  );
21843
23050
 
21844
23051
  // 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(
23052
+ import { Command as Command81 } from "commander";
23053
+ import chalk71 from "chalk";
23054
+ 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
23055
  withErrorHandler(
21849
23056
  async (name, value, options) => {
21850
23057
  let variable;
@@ -21864,19 +23071,19 @@ var setCommand5 = new Command82().name("set").description("Create or update a va
21864
23071
  }
21865
23072
  throw error;
21866
23073
  }
21867
- console.log(chalk72.green(`\u2713 Variable "${variable.name}" saved`));
23074
+ console.log(chalk71.green(`\u2713 Variable "${variable.name}" saved`));
21868
23075
  console.log();
21869
23076
  console.log("Use in vm0.yaml:");
21870
- console.log(chalk72.cyan(` environment:`));
21871
- console.log(chalk72.cyan(` ${name}: \${{ vars.${name} }}`));
23077
+ console.log(chalk71.cyan(` environment:`));
23078
+ console.log(chalk71.cyan(` ${name}: \${{ vars.${name} }}`));
21872
23079
  }
21873
23080
  )
21874
23081
  );
21875
23082
 
21876
23083
  // 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(
23084
+ import { Command as Command82 } from "commander";
23085
+ import chalk72 from "chalk";
23086
+ var deleteCommand4 = new Command82().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21880
23087
  withErrorHandler(async (name, options) => {
21881
23088
  try {
21882
23089
  await getVariable(name);
@@ -21895,24 +23102,24 @@ var deleteCommand4 = new Command83().name("delete").description("Delete a variab
21895
23102
  false
21896
23103
  );
21897
23104
  if (!confirmed) {
21898
- console.log(chalk73.dim("Cancelled"));
23105
+ console.log(chalk72.dim("Cancelled"));
21899
23106
  return;
21900
23107
  }
21901
23108
  }
21902
23109
  await deleteVariable(name);
21903
- console.log(chalk73.green(`\u2713 Variable "${name}" deleted`));
23110
+ console.log(chalk72.green(`\u2713 Variable "${name}" deleted`));
21904
23111
  })
21905
23112
  );
21906
23113
 
21907
23114
  // 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);
23115
+ var variableCommand = new Command83().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand12).addCommand(setCommand5).addCommand(deleteCommand4);
21909
23116
 
21910
23117
  // src/commands/connector/index.ts
21911
- import { Command as Command89 } from "commander";
23118
+ import { Command as Command88 } from "commander";
21912
23119
 
21913
23120
  // src/commands/connector/connect.ts
21914
- import { Command as Command85 } from "commander";
21915
- import chalk75 from "chalk";
23121
+ import { Command as Command84 } from "commander";
23122
+ import chalk74 from "chalk";
21916
23123
  import { initClient as initClient15 } from "@ts-rest/core";
21917
23124
 
21918
23125
  // src/commands/connector/lib/computer/start-services.ts
@@ -21921,7 +23128,7 @@ import { access as access2, constants } from "fs/promises";
21921
23128
  import { createServer } from "net";
21922
23129
  import { homedir as homedir4 } from "os";
21923
23130
  import { join as join12 } from "path";
21924
- import chalk74 from "chalk";
23131
+ import chalk73 from "chalk";
21925
23132
 
21926
23133
  // src/commands/connector/lib/computer/ngrok.ts
21927
23134
  import ngrok from "@ngrok/ngrok";
@@ -21995,7 +23202,7 @@ async function checkComputerDependencies() {
21995
23202
  }
21996
23203
  }
21997
23204
  async function startComputerServices(credentials) {
21998
- console.log(chalk74.cyan("Starting computer connector services..."));
23205
+ console.log(chalk73.cyan("Starting computer connector services..."));
21999
23206
  const wsgidavBinary = await findBinary("wsgidav");
22000
23207
  if (!wsgidavBinary) {
22001
23208
  throw new Error(
@@ -22022,7 +23229,7 @@ async function startComputerServices(credentials) {
22022
23229
  );
22023
23230
  wsgidav.stdout?.on("data", (data) => process.stdout.write(data));
22024
23231
  wsgidav.stderr?.on("data", (data) => process.stderr.write(data));
22025
- console.log(chalk74.green("\u2713 WebDAV server started"));
23232
+ console.log(chalk73.green("\u2713 WebDAV server started"));
22026
23233
  const chrome = spawn2(
22027
23234
  chromeBinary,
22028
23235
  [
@@ -22036,7 +23243,7 @@ async function startComputerServices(credentials) {
22036
23243
  );
22037
23244
  chrome.stdout?.on("data", (data) => process.stdout.write(data));
22038
23245
  chrome.stderr?.on("data", (data) => process.stderr.write(data));
22039
- console.log(chalk74.green("\u2713 Chrome started"));
23246
+ console.log(chalk73.green("\u2713 Chrome started"));
22040
23247
  try {
22041
23248
  await startNgrokTunnels(
22042
23249
  credentials.ngrokToken,
@@ -22045,18 +23252,18 @@ async function startComputerServices(credentials) {
22045
23252
  cdpPort
22046
23253
  );
22047
23254
  console.log(
22048
- chalk74.green(
23255
+ chalk73.green(
22049
23256
  `\u2713 ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`
22050
23257
  )
22051
23258
  );
22052
23259
  console.log();
22053
- console.log(chalk74.green("\u2713 Computer connector active"));
23260
+ console.log(chalk73.green("\u2713 Computer connector active"));
22054
23261
  console.log(` WebDAV: ~/Downloads \u2192 webdav.${credentials.domain}`);
22055
23262
  console.log(
22056
23263
  ` Chrome CDP: port ${cdpPort} \u2192 chrome.${credentials.domain}`
22057
23264
  );
22058
23265
  console.log();
22059
- console.log(chalk74.dim("Press ^C twice to disconnect"));
23266
+ console.log(chalk73.dim("Press ^C twice to disconnect"));
22060
23267
  console.log();
22061
23268
  let sigintCount = 0;
22062
23269
  await new Promise((resolve2) => {
@@ -22070,7 +23277,7 @@ async function startComputerServices(credentials) {
22070
23277
  const onSigint = () => {
22071
23278
  sigintCount++;
22072
23279
  if (sigintCount === 1) {
22073
- console.log(chalk74.dim("\nPress ^C again to disconnect and exit..."));
23280
+ console.log(chalk73.dim("\nPress ^C again to disconnect and exit..."));
22074
23281
  } else {
22075
23282
  done();
22076
23283
  }
@@ -22080,11 +23287,11 @@ async function startComputerServices(credentials) {
22080
23287
  });
22081
23288
  } finally {
22082
23289
  console.log();
22083
- console.log(chalk74.cyan("Stopping services..."));
23290
+ console.log(chalk73.cyan("Stopping services..."));
22084
23291
  wsgidav.kill("SIGTERM");
22085
23292
  chrome.kill("SIGTERM");
22086
23293
  await stopNgrokTunnels();
22087
- console.log(chalk74.green("\u2713 Services stopped"));
23294
+ console.log(chalk73.green("\u2713 Services stopped"));
22088
23295
  }
22089
23296
  }
22090
23297
 
@@ -22109,10 +23316,10 @@ async function getHeaders2() {
22109
23316
  function renderHelpText(text) {
22110
23317
  return text.replace(
22111
23318
  /\[([^\]]+)\]\(([^)]+)\)/g,
22112
- (_m, label, url) => `${label} (${chalk75.cyan(url)})`
22113
- ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk75.bold(content)).replace(
23319
+ (_m, label, url) => `${label} (${chalk74.cyan(url)})`
23320
+ ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk74.bold(content)).replace(
22114
23321
  /^> (.+)$/gm,
22115
- (_m, content) => chalk75.yellow(` ${content}`)
23322
+ (_m, content) => chalk74.yellow(` ${content}`)
22116
23323
  );
22117
23324
  }
22118
23325
  async function connectViaApiToken(connectorType, tokenValue) {
@@ -22137,7 +23344,7 @@ async function connectViaApiToken(connectorType, tokenValue) {
22137
23344
  for (const [secretName, secretConfig] of secretEntries) {
22138
23345
  if (!secretConfig.required) continue;
22139
23346
  const value = await promptPassword(
22140
- `${secretConfig.label}${secretConfig.placeholder ? chalk75.dim(` (${secretConfig.placeholder})`) : ""}:`
23347
+ `${secretConfig.label}${secretConfig.placeholder ? chalk74.dim(` (${secretConfig.placeholder})`) : ""}:`
22141
23348
  );
22142
23349
  if (!value) {
22143
23350
  throw new Error("Cancelled");
@@ -22153,13 +23360,13 @@ async function connectViaApiToken(connectorType, tokenValue) {
22153
23360
  });
22154
23361
  }
22155
23362
  console.log(
22156
- chalk75.green(`
23363
+ chalk74.green(`
22157
23364
  \u2713 ${config.label} connected successfully via API token!`)
22158
23365
  );
22159
23366
  }
22160
23367
  async function connectComputer(apiUrl, headers) {
22161
23368
  await checkComputerDependencies();
22162
- console.log(chalk75.cyan("Setting up computer connector..."));
23369
+ console.log(chalk74.cyan("Setting up computer connector..."));
22163
23370
  const computerClient = initClient15(computerConnectorContract, {
22164
23371
  baseUrl: apiUrl,
22165
23372
  baseHeaders: headers,
@@ -22174,9 +23381,9 @@ async function connectComputer(apiUrl, headers) {
22174
23381
  }
22175
23382
  const credentials = createResult.body;
22176
23383
  await startComputerServices(credentials);
22177
- console.log(chalk75.cyan("Disconnecting computer connector..."));
23384
+ console.log(chalk74.cyan("Disconnecting computer connector..."));
22178
23385
  await deleteConnector("computer");
22179
- console.log(chalk75.green("\u2713 Disconnected computer"));
23386
+ console.log(chalk74.green("\u2713 Disconnected computer"));
22180
23387
  process.exit(0);
22181
23388
  }
22182
23389
  async function resolveAuthMethod(connectorType, tokenFlag) {
@@ -22215,7 +23422,7 @@ async function resolveAuthMethod(connectorType, tokenFlag) {
22215
23422
  );
22216
23423
  }
22217
23424
  async function connectViaOAuth(connectorType, apiUrl, headers) {
22218
- console.log(`Connecting ${chalk75.cyan(connectorType)}...`);
23425
+ console.log(`Connecting ${chalk74.cyan(connectorType)}...`);
22219
23426
  const sessionsClient = initClient15(connectorSessionsContract, {
22220
23427
  baseUrl: apiUrl,
22221
23428
  baseHeaders: headers,
@@ -22231,8 +23438,8 @@ async function connectViaOAuth(connectorType, apiUrl, headers) {
22231
23438
  }
22232
23439
  const session = createResult.body;
22233
23440
  const verificationUrl = `${apiUrl}${session.verificationUrl}`;
22234
- console.log(chalk75.green("\nSession created"));
22235
- console.log(chalk75.cyan(`
23441
+ console.log(chalk74.green("\nSession created"));
23442
+ console.log(chalk74.cyan(`
22236
23443
  To connect, visit: ${verificationUrl}`));
22237
23444
  console.log(
22238
23445
  `
@@ -22264,7 +23471,7 @@ The session expires in ${Math.floor(session.expiresIn / 60)} minutes.`
22264
23471
  switch (status.status) {
22265
23472
  case "complete":
22266
23473
  console.log(
22267
- chalk75.green(`
23474
+ chalk74.green(`
22268
23475
 
22269
23476
  ${connectorType} connected successfully!`)
22270
23477
  );
@@ -22276,13 +23483,13 @@ ${connectorType} connected successfully!`)
22276
23483
  `Connection failed: ${status.errorMessage || "Unknown error"}`
22277
23484
  );
22278
23485
  case "pending":
22279
- process.stdout.write(chalk75.dim("."));
23486
+ process.stdout.write(chalk74.dim("."));
22280
23487
  break;
22281
23488
  }
22282
23489
  }
22283
23490
  throw new Error("Session timed out, please try again");
22284
23491
  }
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(
23492
+ 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
23493
  withErrorHandler(async (type2, options) => {
22287
23494
  const parseResult = connectorTypeSchema.safeParse(type2);
22288
23495
  if (!parseResult.success) {
@@ -22307,12 +23514,12 @@ var connectCommand = new Command85().name("connect").description("Connect a thir
22307
23514
  );
22308
23515
 
22309
23516
  // 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(
23517
+ import { Command as Command85 } from "commander";
23518
+ import chalk75 from "chalk";
23519
+ var listCommand13 = new Command85().name("list").alias("ls").description("List all connectors and their status").action(
22313
23520
  withErrorHandler(async () => {
22314
23521
  const result = await listConnectors();
22315
- const connectedMap = new Map(result.connectors.map((c39) => [c39.type, c39]));
23522
+ const connectedMap = new Map(result.connectors.map((c42) => [c42.type, c42]));
22316
23523
  const allTypesRaw = Object.keys(CONNECTOR_TYPES);
22317
23524
  const allTypes = [];
22318
23525
  for (const type2 of allTypesRaw) {
@@ -22331,26 +23538,26 @@ var listCommand13 = new Command86().name("list").alias("ls").description("List a
22331
23538
  statusText.padEnd(statusWidth),
22332
23539
  "ACCOUNT"
22333
23540
  ].join(" ");
22334
- console.log(chalk76.dim(header));
23541
+ console.log(chalk75.dim(header));
22335
23542
  for (const type2 of allTypes) {
22336
23543
  const connector = connectedMap.get(type2);
22337
23544
  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("-");
23545
+ const status = connector ? connector.needsReconnect ? chalk75.yellow("!".padEnd(statusWidth)) : scopeMismatch ? chalk75.yellow("!".padEnd(statusWidth)) : chalk75.green("\u2713".padEnd(statusWidth)) : chalk75.dim("-".padEnd(statusWidth));
23546
+ const account = connector?.needsReconnect ? chalk75.yellow("(reconnect needed)") : scopeMismatch ? chalk75.yellow("(permissions update available)") : connector?.externalUsername ? `@${connector.externalUsername}` : chalk75.dim("-");
22340
23547
  const row = [type2.padEnd(typeWidth), status, account].join(" ");
22341
23548
  console.log(row);
22342
23549
  }
22343
23550
  console.log();
22344
- console.log(chalk76.dim("To connect a service:"));
22345
- console.log(chalk76.dim(" vm0 connector connect <type>"));
23551
+ console.log(chalk75.dim("To connect a service:"));
23552
+ console.log(chalk75.dim(" vm0 connector connect <type>"));
22346
23553
  })
22347
23554
  );
22348
23555
 
22349
23556
  // src/commands/connector/status.ts
22350
- import { Command as Command87 } from "commander";
22351
- import chalk77 from "chalk";
23557
+ import { Command as Command86 } from "commander";
23558
+ import chalk76 from "chalk";
22352
23559
  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(
23560
+ var statusCommand8 = new Command86().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
22354
23561
  withErrorHandler(async (type2) => {
22355
23562
  const parseResult = connectorTypeSchema.safeParse(type2);
22356
23563
  if (!parseResult.success) {
@@ -22360,11 +23567,11 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22360
23567
  });
22361
23568
  }
22362
23569
  const connector = await getConnector(parseResult.data);
22363
- console.log(`Connector: ${chalk77.cyan(type2)}`);
23570
+ console.log(`Connector: ${chalk76.cyan(type2)}`);
22364
23571
  console.log();
22365
23572
  if (connector) {
22366
23573
  console.log(
22367
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.green("connected")}`
23574
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.green("connected")}`
22368
23575
  );
22369
23576
  console.log(
22370
23577
  `${"Account:".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`
@@ -22380,7 +23587,7 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22380
23587
  if (connector.authMethod === "oauth" && !hasRequiredScopes(parseResult.data, connector.oauthScopes)) {
22381
23588
  const diff = getScopeDiff(parseResult.data, connector.oauthScopes);
22382
23589
  console.log(
22383
- `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk77.yellow("update available")}`
23590
+ `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk76.yellow("update available")}`
22384
23591
  );
22385
23592
  if (diff.addedScopes.length > 0) {
22386
23593
  console.log(
@@ -22402,23 +23609,23 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22402
23609
  );
22403
23610
  }
22404
23611
  console.log();
22405
- console.log(chalk77.dim("To disconnect:"));
22406
- console.log(chalk77.dim(` vm0 connector disconnect ${type2}`));
23612
+ console.log(chalk76.dim("To disconnect:"));
23613
+ console.log(chalk76.dim(` vm0 connector disconnect ${type2}`));
22407
23614
  } else {
22408
23615
  console.log(
22409
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.dim("not connected")}`
23616
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.dim("not connected")}`
22410
23617
  );
22411
23618
  console.log();
22412
- console.log(chalk77.dim("To connect:"));
22413
- console.log(chalk77.dim(` vm0 connector connect ${type2}`));
23619
+ console.log(chalk76.dim("To connect:"));
23620
+ console.log(chalk76.dim(` vm0 connector connect ${type2}`));
22414
23621
  }
22415
23622
  })
22416
23623
  );
22417
23624
 
22418
23625
  // 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(
23626
+ import { Command as Command87 } from "commander";
23627
+ import chalk77 from "chalk";
23628
+ var disconnectCommand = new Command87().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
22422
23629
  withErrorHandler(async (type2) => {
22423
23630
  const parseResult = connectorTypeSchema.safeParse(type2);
22424
23631
  if (!parseResult.success) {
@@ -22429,145 +23636,16 @@ var disconnectCommand = new Command88().name("disconnect").description("Disconne
22429
23636
  }
22430
23637
  const connectorType = parseResult.data;
22431
23638
  await deleteConnector(connectorType);
22432
- console.log(chalk78.green(`\u2713 Disconnected ${type2}`));
23639
+ console.log(chalk77.green(`\u2713 Disconnected ${type2}`));
22433
23640
  })
22434
23641
  );
22435
23642
 
22436
23643
  // 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
- );
23644
+ var connectorCommand = new Command88().name("connector").description("Manage third-party service connections").addCommand(listCommand13).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
22567
23645
 
22568
23646
  // src/commands/preference/index.ts
22569
- import { Command as Command91 } from "commander";
22570
- import chalk81 from "chalk";
23647
+ import { Command as Command89 } from "commander";
23648
+ import chalk78 from "chalk";
22571
23649
  function detectTimezone2() {
22572
23650
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
22573
23651
  }
@@ -22588,15 +23666,15 @@ function parseOnOff(flag, value) {
22588
23666
  );
22589
23667
  }
22590
23668
  function displayPreferences(prefs) {
22591
- console.log(chalk81.bold("Current preferences:"));
23669
+ console.log(chalk78.bold("Current preferences:"));
22592
23670
  console.log(
22593
- ` Timezone: ${prefs.timezone ? chalk81.cyan(prefs.timezone) : chalk81.dim("not set")}`
23671
+ ` Timezone: ${prefs.timezone ? chalk78.cyan(prefs.timezone) : chalk78.dim("not set")}`
22594
23672
  );
22595
23673
  console.log(
22596
- ` Email notify: ${prefs.notifyEmail ? chalk81.green("on") : chalk81.dim("off")}`
23674
+ ` Email notify: ${prefs.notifyEmail ? chalk78.green("on") : chalk78.dim("off")}`
22597
23675
  );
22598
23676
  console.log(
22599
- ` Slack notify: ${prefs.notifySlack ? chalk81.green("on") : chalk81.dim("off")}`
23677
+ ` Slack notify: ${prefs.notifySlack ? chalk78.green("on") : chalk78.dim("off")}`
22600
23678
  );
22601
23679
  }
22602
23680
  function buildUpdates(opts) {
@@ -22626,21 +23704,21 @@ function buildUpdates(opts) {
22626
23704
  function printUpdateResult(updates, result) {
22627
23705
  if (updates.timezone !== void 0) {
22628
23706
  console.log(
22629
- chalk81.green(
22630
- `Timezone set to ${chalk81.cyan(result.timezone ?? updates.timezone)}`
23707
+ chalk78.green(
23708
+ `Timezone set to ${chalk78.cyan(result.timezone ?? updates.timezone)}`
22631
23709
  )
22632
23710
  );
22633
23711
  }
22634
23712
  if (updates.notifyEmail !== void 0) {
22635
23713
  console.log(
22636
- chalk81.green(
23714
+ chalk78.green(
22637
23715
  `Email notifications ${result.notifyEmail ? "enabled" : "disabled"}`
22638
23716
  )
22639
23717
  );
22640
23718
  }
22641
23719
  if (updates.notifySlack !== void 0) {
22642
23720
  console.log(
22643
- chalk81.green(
23721
+ chalk78.green(
22644
23722
  `Slack notifications ${result.notifySlack ? "enabled" : "disabled"}`
22645
23723
  )
22646
23724
  );
@@ -22649,7 +23727,7 @@ function printUpdateResult(updates, result) {
22649
23727
  async function interactiveSetup(prefs) {
22650
23728
  if (!prefs.timezone) {
22651
23729
  const detectedTz = detectTimezone2();
22652
- console.log(chalk81.dim(`
23730
+ console.log(chalk78.dim(`
22653
23731
  System timezone detected: ${detectedTz}`));
22654
23732
  const tz = await promptText(
22655
23733
  "Set timezone? (enter timezone or leave empty to skip)",
@@ -22660,7 +23738,7 @@ System timezone detected: ${detectedTz}`));
22660
23738
  throw new Error(`Invalid timezone: ${tz.trim()}`);
22661
23739
  }
22662
23740
  await updateUserPreferences({ timezone: tz.trim() });
22663
- console.log(chalk81.green(`Timezone set to ${chalk81.cyan(tz.trim())}`));
23741
+ console.log(chalk78.green(`Timezone set to ${chalk78.cyan(tz.trim())}`));
22664
23742
  }
22665
23743
  }
22666
23744
  if (!prefs.notifyEmail) {
@@ -22670,11 +23748,11 @@ System timezone detected: ${detectedTz}`));
22670
23748
  );
22671
23749
  if (enable) {
22672
23750
  await updateUserPreferences({ notifyEmail: true });
22673
- console.log(chalk81.green("Email notifications enabled"));
23751
+ console.log(chalk78.green("Email notifications enabled"));
22674
23752
  }
22675
23753
  }
22676
23754
  }
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(
23755
+ 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
23756
  withErrorHandler(async (opts) => {
22679
23757
  const updates = buildUpdates(opts);
22680
23758
  if (updates) {
@@ -22689,32 +23767,32 @@ var preferenceCommand = new Command91().name("preference").description("View or
22689
23767
  } else if (!prefs.timezone) {
22690
23768
  console.log();
22691
23769
  console.log(
22692
- `To set timezone: ${chalk81.cyan("vm0 preference --timezone <timezone>")}`
23770
+ `To set timezone: ${chalk78.cyan("vm0 preference --timezone <timezone>")}`
22693
23771
  );
22694
23772
  console.log(
22695
- chalk81.dim("Example: vm0 preference --timezone America/New_York")
23773
+ chalk78.dim("Example: vm0 preference --timezone America/New_York")
22696
23774
  );
22697
23775
  }
22698
23776
  })
22699
23777
  );
22700
23778
 
22701
23779
  // 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(
23780
+ import { Command as Command90 } from "commander";
23781
+ import chalk79 from "chalk";
23782
+ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
22705
23783
  withErrorHandler(async () => {
22706
23784
  console.log("Checking for updates...");
22707
23785
  const latestVersion = await getLatestVersion();
22708
23786
  if (latestVersion === null) {
22709
23787
  throw new Error("Could not check for updates. Please try again later.");
22710
23788
  }
22711
- if (latestVersion === "9.74.4") {
22712
- console.log(chalk82.green(`\u2713 Already up to date (${"9.74.4"})`));
23789
+ if (latestVersion === "9.75.1") {
23790
+ console.log(chalk79.green(`\u2713 Already up to date (${"9.75.1"})`));
22713
23791
  return;
22714
23792
  }
22715
23793
  console.log(
22716
- chalk82.yellow(
22717
- `Current version: ${"9.74.4"} -> Latest version: ${latestVersion}`
23794
+ chalk79.yellow(
23795
+ `Current version: ${"9.75.1"} -> Latest version: ${latestVersion}`
22718
23796
  )
22719
23797
  );
22720
23798
  console.log();
@@ -22722,26 +23800,26 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22722
23800
  if (!isAutoUpgradeSupported(packageManager)) {
22723
23801
  if (packageManager === "unknown") {
22724
23802
  console.log(
22725
- chalk82.yellow(
23803
+ chalk79.yellow(
22726
23804
  "Could not detect your package manager for auto-upgrade."
22727
23805
  )
22728
23806
  );
22729
23807
  } else {
22730
23808
  console.log(
22731
- chalk82.yellow(
23809
+ chalk79.yellow(
22732
23810
  `Auto-upgrade is not supported for ${packageManager}.`
22733
23811
  )
22734
23812
  );
22735
23813
  }
22736
- console.log(chalk82.yellow("Please upgrade manually:"));
22737
- console.log(chalk82.cyan(` ${getManualUpgradeCommand(packageManager)}`));
23814
+ console.log(chalk79.yellow("Please upgrade manually:"));
23815
+ console.log(chalk79.cyan(` ${getManualUpgradeCommand(packageManager)}`));
22738
23816
  return;
22739
23817
  }
22740
23818
  console.log(`Upgrading via ${packageManager}...`);
22741
23819
  const success = await performUpgrade(packageManager);
22742
23820
  if (success) {
22743
23821
  console.log(
22744
- chalk82.green(`\u2713 Upgraded from ${"9.74.4"} to ${latestVersion}`)
23822
+ chalk79.green(`\u2713 Upgraded from ${"9.75.1"} to ${latestVersion}`)
22745
23823
  );
22746
23824
  return;
22747
23825
  }
@@ -22754,8 +23832,8 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22754
23832
  );
22755
23833
 
22756
23834
  // src/commands/whoami.ts
22757
- import { Command as Command93 } from "commander";
22758
- import chalk83 from "chalk";
23835
+ import { Command as Command91 } from "commander";
23836
+ import chalk80 from "chalk";
22759
23837
  function isInsideSandbox() {
22760
23838
  return !!process.env.VM0_RUN_ID;
22761
23839
  }
@@ -22770,7 +23848,7 @@ async function showSandboxInfo() {
22770
23848
  const apiUrl = process.env.VM0_API_URL;
22771
23849
  const hasAgentInfo = agentName || agentVersion || agentComposeId || agentOrgSlug || cliAgentType;
22772
23850
  if (hasAgentInfo) {
22773
- console.log(chalk83.bold("Agent:"));
23851
+ console.log(chalk80.bold("Agent:"));
22774
23852
  if (agentName) console.log(` Name: ${agentName}`);
22775
23853
  if (agentVersion) console.log(` Version: ${agentVersion}`);
22776
23854
  if (agentComposeId) console.log(` Compose ID: ${agentComposeId}`);
@@ -22778,7 +23856,7 @@ async function showSandboxInfo() {
22778
23856
  if (cliAgentType) console.log(` Framework: ${cliAgentType}`);
22779
23857
  console.log();
22780
23858
  }
22781
- console.log(chalk83.bold("Run:"));
23859
+ console.log(chalk80.bold("Run:"));
22782
23860
  if (runId) console.log(` ID: ${runId}`);
22783
23861
  if (activeOrg) console.log(` Org: ${activeOrg}`);
22784
23862
  if (apiUrl) console.log(` API: ${apiUrl}`);
@@ -22787,23 +23865,23 @@ async function showLocalInfo() {
22787
23865
  const token = await getToken();
22788
23866
  const apiUrl = await getApiUrl();
22789
23867
  const activeOrg = await getActiveOrg();
22790
- console.log(chalk83.bold("Auth:"));
23868
+ console.log(chalk80.bold("Auth:"));
22791
23869
  if (token) {
22792
23870
  const tokenSource = process.env.VM0_TOKEN ? "VM0_TOKEN env var" : "config file";
22793
23871
  console.log(
22794
- ` Status: ${chalk83.green("Authenticated")} (via ${tokenSource})`
23872
+ ` Status: ${chalk80.green("Authenticated")} (via ${tokenSource})`
22795
23873
  );
22796
23874
  } else {
22797
- console.log(` Status: ${chalk83.dim("Not authenticated")}`);
23875
+ console.log(` Status: ${chalk80.dim("Not authenticated")}`);
22798
23876
  }
22799
23877
  console.log(` API: ${apiUrl}`);
22800
23878
  console.log();
22801
23879
  if (activeOrg) {
22802
- console.log(chalk83.bold("Org:"));
23880
+ console.log(chalk80.bold("Org:"));
22803
23881
  console.log(` Active: ${activeOrg}`);
22804
23882
  }
22805
23883
  }
22806
- var whoamiCommand = new Command93().name("whoami").description("Show current identity and environment information").action(
23884
+ var whoamiCommand = new Command91().name("whoami").description("Show current identity and environment information").action(
22807
23885
  withErrorHandler(async () => {
22808
23886
  if (isInsideSandbox()) {
22809
23887
  await showSandboxInfo();
@@ -22813,9 +23891,15 @@ var whoamiCommand = new Command93().name("whoami").description("Show current ide
22813
23891
  })
22814
23892
  );
22815
23893
 
23894
+ // src/commands/zero/index.ts
23895
+ import { Command as Command92 } from "commander";
23896
+ var zeroCommand = new Command92("zero").description(
23897
+ "Zero platform commands"
23898
+ );
23899
+
22816
23900
  // 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");
23901
+ var program = new Command93();
23902
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.75.1");
22819
23903
  program.addCommand(authCommand);
22820
23904
  program.addCommand(infoCommand);
22821
23905
  program.addCommand(composeCommand);
@@ -22829,14 +23913,13 @@ program.addCommand(orgCommand);
22829
23913
  program.addCommand(agentCommand);
22830
23914
  program.addCommand(initCommand4);
22831
23915
  program.addCommand(scheduleCommand);
22832
- program.addCommand(usageCommand);
22833
23916
  program.addCommand(secretCommand);
22834
23917
  program.addCommand(variableCommand);
22835
23918
  program.addCommand(connectorCommand);
22836
- program.addCommand(setupClaudeCommand);
22837
23919
  program.addCommand(preferenceCommand);
22838
23920
  program.addCommand(upgradeCommand);
22839
23921
  program.addCommand(whoamiCommand);
23922
+ program.addCommand(zeroCommand);
22840
23923
  if (process.argv[1]?.endsWith("index.js") || process.argv[1]?.endsWith("index.ts") || process.argv[1]?.endsWith("vm0")) {
22841
23924
  process.stdout.on("error", (err) => {
22842
23925
  if (err.code === "EPIPE") process.exit(0);