@vm0/cli 9.74.3 → 9.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +1126 -484
  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.3",
50
+ release: "9.75.0",
51
51
  sendDefaultPii: false,
52
52
  tracesSampleRate: 0,
53
53
  shutdownTimeout: 500,
@@ -66,7 +66,7 @@ if (DSN) {
66
66
  }
67
67
  });
68
68
  Sentry.setContext("cli", {
69
- version: "9.74.3",
69
+ version: "9.75.0",
70
70
  command: process.argv.slice(2).join(" ")
71
71
  });
72
72
  Sentry.setContext("runtime", {
@@ -85,7 +85,7 @@ process.stdout.on("error", handleEpipe);
85
85
  process.stderr.on("error", handleEpipe);
86
86
 
87
87
  // src/index.ts
88
- import { Command as Command94 } from "commander";
88
+ import { Command as Command93 } from "commander";
89
89
 
90
90
  // src/lib/network/proxy.ts
91
91
  import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
@@ -847,9 +847,15 @@ var logEntrySchema = z5.object({
847
847
  startedAt: z5.string().nullable(),
848
848
  completedAt: z5.string().nullable()
849
849
  });
850
+ var logsFiltersSchema = z5.object({
851
+ statuses: z5.array(logStatusSchema),
852
+ sources: z5.array(triggerSourceSchema),
853
+ agents: z5.array(z5.string())
854
+ });
850
855
  var logsListResponseSchema = z5.object({
851
856
  data: z5.array(logEntrySchema),
852
- pagination: paginationSchema
857
+ pagination: paginationSchema,
858
+ filters: logsFiltersSchema
853
859
  });
854
860
  var artifactSchema = z5.object({
855
861
  name: z5.string().nullable(),
@@ -881,7 +887,8 @@ var logsListContract = c2.router({
881
887
  agent: z5.string().optional(),
882
888
  name: z5.string().optional(),
883
889
  org: z5.string().optional(),
884
- status: logStatusSchema.optional()
890
+ status: logStatusSchema.optional(),
891
+ triggerSource: triggerSourceSchema.optional()
885
892
  }),
886
893
  responses: {
887
894
  200: logsListResponseSchema,
@@ -2762,7 +2769,7 @@ function mpFirewall(type2, authHeaders, placeholders) {
2762
2769
  {
2763
2770
  base: getFirewallBaseUrl(type2),
2764
2771
  auth: { headers: authHeaders },
2765
- permissions: [{ name: "all", rules: ["ANY /{path*}"] }]
2772
+ permissions: [{ name: "unrestricted", rules: ["ANY /{path*}"] }]
2766
2773
  }
2767
2774
  ],
2768
2775
  placeholders
@@ -3080,6 +3087,7 @@ var chatThreadListItemSchema = z18.object({
3080
3087
  id: z18.string(),
3081
3088
  title: z18.string().nullable(),
3082
3089
  preview: z18.string().nullable(),
3090
+ agentComposeId: z18.string(),
3083
3091
  createdAt: z18.string(),
3084
3092
  updatedAt: z18.string()
3085
3093
  });
@@ -3372,6 +3380,7 @@ var deployScheduleRequestSchema = z20.object({
3372
3380
  intervalSeconds: z20.number().int().min(0).optional(),
3373
3381
  timezone: z20.string().default("UTC"),
3374
3382
  prompt: z20.string().min(1, "Prompt required"),
3383
+ description: z20.string().optional(),
3375
3384
  appendSystemPrompt: z20.string().optional(),
3376
3385
  // vars and secrets removed - now managed via server-side tables
3377
3386
  artifactName: z20.string().optional(),
@@ -3410,6 +3419,7 @@ var scheduleResponseSchema = z20.object({
3410
3419
  intervalSeconds: z20.number().nullable(),
3411
3420
  timezone: z20.string(),
3412
3421
  prompt: z20.string(),
3422
+ description: z20.string().nullable(),
3413
3423
  appendSystemPrompt: z20.string().nullable(),
3414
3424
  vars: z20.record(z20.string(), z20.string()).nullable(),
3415
3425
  // Secret names only (values are never returned)
@@ -7202,6 +7212,302 @@ function resolveFirewallRef(input) {
7202
7212
  return trimmed;
7203
7213
  }
7204
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
+
7205
7511
  // ../../packages/core/src/firewalls/github.generated.ts
7206
7512
  var githubFirewall = {
7207
7513
  name: "github",
@@ -10364,6 +10670,665 @@ var googleSheetsFirewall = {
10364
10670
  ]
10365
10671
  };
10366
10672
 
10673
+ // ../../packages/core/src/firewalls/jira.generated.ts
10674
+ var jiraFirewall = {
10675
+ name: "jira",
10676
+ description: "Jira Cloud API",
10677
+ placeholders: {
10678
+ JIRA_TOKEN: "ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
10679
+ },
10680
+ apis: [
10681
+ {
10682
+ base: "https://api.atlassian.com",
10683
+ auth: {
10684
+ headers: {
10685
+ Authorization: "Bearer ${{ secrets.JIRA_TOKEN }}"
10686
+ }
10687
+ },
10688
+ permissions: [
10689
+ {
10690
+ name: "unrestricted",
10691
+ description: "Allow all endpoints",
10692
+ rules: ["ANY /{path*}"]
10693
+ },
10694
+ {
10695
+ name: "manage:jira-configuration",
10696
+ description: "Configure Jira settings that require the Jira administrators permission, for example, create projects and custom fields, view workflows, manage issue link types.",
10697
+ rules: [
10698
+ "GET /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10699
+ "PUT /ex/jira/{cloudId}/rest/api/3/announcementBanner",
10700
+ "POST /ex/jira/{cloudId}/rest/api/3/app/field/context/configuration/list",
10701
+ "GET /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10702
+ "PUT /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration",
10703
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties",
10704
+ "GET /ex/jira/{cloudId}/rest/api/3/application-properties/advanced-settings",
10705
+ "PUT /ex/jira/{cloudId}/rest/api/3/application-properties/{id}",
10706
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole",
10707
+ "GET /ex/jira/{cloudId}/rest/api/3/applicationrole/{key}",
10708
+ "GET /ex/jira/{cloudId}/rest/api/3/auditing/record",
10709
+ "GET /ex/jira/{cloudId}/rest/api/3/avatar/{type}/system",
10710
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10711
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes",
10712
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10713
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields",
10714
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10715
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters",
10716
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10717
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects",
10718
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10719
+ "PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10720
+ "DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}",
10721
+ "POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/clone",
10722
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields",
10723
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields/{fieldId}/parameters",
10724
+ "GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/projects",
10725
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10726
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking",
10727
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/list",
10728
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10729
+ "PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options",
10730
+ "GET /ex/jira/{cloudId}/rest/api/3/events",
10731
+ "POST /ex/jira/{cloudId}/rest/api/3/field",
10732
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/association",
10733
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/association",
10734
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}",
10735
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10736
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context",
10737
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10738
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue",
10739
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/issuetypemapping",
10740
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/mapping",
10741
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/projectmapping",
10742
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10743
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}",
10744
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype",
10745
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype/remove",
10746
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10747
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10748
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option",
10749
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/move",
10750
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}",
10751
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}/issue",
10752
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project",
10753
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project/remove",
10754
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10755
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option",
10756
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10757
+ "PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10758
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}",
10759
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}/issue",
10760
+ "DELETE /ex/jira/{cloudId}/rest/api/3/field/{id}",
10761
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/restore",
10762
+ "POST /ex/jira/{cloudId}/rest/api/3/field/{id}/trash",
10763
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10764
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfiguration",
10765
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10766
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}",
10767
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10768
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields",
10769
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10770
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme",
10771
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/mapping",
10772
+ "GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10773
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project",
10774
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10775
+ "DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}",
10776
+ "PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping",
10777
+ "POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping/delete",
10778
+ "POST /ex/jira/{cloudId}/rest/api/3/group",
10779
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group",
10780
+ "GET /ex/jira/{cloudId}/rest/api/3/group/member",
10781
+ "POST /ex/jira/{cloudId}/rest/api/3/group/user",
10782
+ "DELETE /ex/jira/{cloudId}/rest/api/3/group/user",
10783
+ "GET /ex/jira/{cloudId}/rest/api/3/instance/license",
10784
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLinkType",
10785
+ "PUT /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10786
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
10787
+ "POST /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
10788
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level",
10789
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/default",
10790
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/member",
10791
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10792
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project",
10793
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/search",
10794
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
10795
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{issueSecuritySchemeId}/members",
10796
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}",
10797
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level",
10798
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10799
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}",
10800
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member",
10801
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member/{memberId}",
10802
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype",
10803
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
10804
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
10805
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/avatar2",
10806
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
10807
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
10808
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
10809
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescheme",
10810
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/mapping",
10811
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
10812
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project",
10813
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
10814
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}",
10815
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype",
10816
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/move",
10817
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/{issueTypeId}",
10818
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
10819
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme",
10820
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/mapping",
10821
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
10822
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project",
10823
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
10824
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}",
10825
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping",
10826
+ "PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/default",
10827
+ "POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/remove",
10828
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/project",
10829
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/sanitize",
10830
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount",
10831
+ "GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount/product/{applicationKey}",
10832
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences",
10833
+ "PUT /ex/jira/{cloudId}/rest/api/3/mypreferences",
10834
+ "DELETE /ex/jira/{cloudId}/rest/api/3/mypreferences",
10835
+ "GET /ex/jira/{cloudId}/rest/api/3/mypreferences/locale",
10836
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme",
10837
+ "POST /ex/jira/{cloudId}/rest/api/3/notificationscheme",
10838
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/project",
10839
+ "GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
10840
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}",
10841
+ "PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}/notification",
10842
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}",
10843
+ "DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}/notification/{notificationId}",
10844
+ "GET /ex/jira/{cloudId}/rest/api/3/permissions",
10845
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme",
10846
+ "PUT /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
10847
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
10848
+ "POST /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
10849
+ "DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
10850
+ "POST /ex/jira/{cloudId}/rest/api/3/priority",
10851
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/default",
10852
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/move",
10853
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/search",
10854
+ "PUT /ex/jira/{cloudId}/rest/api/3/priority/{id}",
10855
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priority/{id}",
10856
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme",
10857
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme",
10858
+ "POST /ex/jira/{cloudId}/rest/api/3/priorityscheme/mappings",
10859
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/priorities/available",
10860
+ "PUT /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
10861
+ "DELETE /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}",
10862
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/priorities",
10863
+ "GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/projects",
10864
+ "POST /ex/jira/{cloudId}/rest/api/3/project",
10865
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template",
10866
+ "PUT /ex/jira/{cloudId}/rest/api/3/project-template/edit-template",
10867
+ "GET /ex/jira/{cloudId}/rest/api/3/project-template/live-template",
10868
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project-template/remove-template",
10869
+ "POST /ex/jira/{cloudId}/rest/api/3/project-template/save-template",
10870
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
10871
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/delete",
10872
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/restore",
10873
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10874
+ "POST /ex/jira/{cloudId}/rest/api/3/resolution",
10875
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/default",
10876
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/move",
10877
+ "PUT /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
10878
+ "DELETE /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
10879
+ "GET /ex/jira/{cloudId}/rest/api/3/role",
10880
+ "POST /ex/jira/{cloudId}/rest/api/3/role",
10881
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}",
10882
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}",
10883
+ "PUT /ex/jira/{cloudId}/rest/api/3/role/{id}",
10884
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}",
10885
+ "GET /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10886
+ "POST /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10887
+ "DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}/actors",
10888
+ "POST /ex/jira/{cloudId}/rest/api/3/screenscheme",
10889
+ "PUT /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
10890
+ "GET /ex/jira/{cloudId}/rest/api/3/securitylevel/{id}",
10891
+ "GET /ex/jira/{cloudId}/rest/api/3/settings/columns",
10892
+ "PUT /ex/jira/{cloudId}/rest/api/3/settings/columns",
10893
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses",
10894
+ "POST /ex/jira/{cloudId}/rest/api/3/statuses",
10895
+ "PUT /ex/jira/{cloudId}/rest/api/3/statuses",
10896
+ "DELETE /ex/jira/{cloudId}/rest/api/3/statuses",
10897
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/byNames",
10898
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/search",
10899
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/project/{projectId}/issueTypeUsages",
10900
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/projectUsages",
10901
+ "GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/workflowUsages",
10902
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
10903
+ "POST /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}",
10904
+ "DELETE /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{owningObjectId}/avatar/{id}",
10905
+ "POST /ex/jira/{cloudId}/rest/api/3/user",
10906
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user",
10907
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/columns",
10908
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/columns",
10909
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow",
10910
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow",
10911
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history",
10912
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/history/list",
10913
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
10914
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/rule/config",
10915
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10916
+ "POST /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10917
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10918
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties",
10919
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflow/{entityId}",
10920
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages",
10921
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/projectUsages",
10922
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/workflowSchemes",
10923
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows",
10924
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/capabilities",
10925
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create",
10926
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/create/validation",
10927
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/defaultEditor",
10928
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/preview",
10929
+ "GET /ex/jira/{cloudId}/rest/api/3/workflows/search",
10930
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update",
10931
+ "POST /ex/jira/{cloudId}/rest/api/3/workflows/update/validation",
10932
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme",
10933
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme",
10934
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
10935
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/project",
10936
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/project/switch",
10937
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/read",
10938
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update",
10939
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update/mappings",
10940
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10941
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10942
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}",
10943
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/createdraft",
10944
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10945
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10946
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default",
10947
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10948
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10949
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft",
10950
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10951
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10952
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default",
10953
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10954
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10955
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}",
10956
+ "POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/publish",
10957
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10958
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10959
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow",
10960
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10961
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10962
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}",
10963
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10964
+ "PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10965
+ "DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow",
10966
+ "GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{workflowSchemeId}/projectUsages"
10967
+ ]
10968
+ },
10969
+ {
10970
+ name: "manage:jira-project",
10971
+ description: "Create and edit project settings and create new project-level objects, for example, versions, components.",
10972
+ rules: [
10973
+ "POST /ex/jira/{cloudId}/rest/api/3/component",
10974
+ "PUT /ex/jira/{cloudId}/rest/api/3/component/{id}",
10975
+ "DELETE /ex/jira/{cloudId}/rest/api/3/component/{id}",
10976
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/contexts",
10977
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/screens",
10978
+ "POST /ex/jira/{cloudId}/rest/api/3/forge/panel/action/bulk/async",
10979
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes",
10980
+ "GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}",
10981
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
10982
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/archive",
10983
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar",
10984
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar/{id}",
10985
+ "POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar2",
10986
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
10987
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
10988
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features/{featureKey}",
10989
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
10990
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
10991
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10992
+ "DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
10993
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
10994
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email",
10995
+ "PUT /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
10996
+ "POST /ex/jira/{cloudId}/rest/api/3/projectCategory",
10997
+ "PUT /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
10998
+ "DELETE /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
10999
+ "GET /ex/jira/{cloudId}/rest/api/3/screens",
11000
+ "POST /ex/jira/{cloudId}/rest/api/3/screens",
11001
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/addToDefault/{fieldId}",
11002
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/tabs",
11003
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11004
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}",
11005
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/availableFields",
11006
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11007
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs",
11008
+ "PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11009
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}",
11010
+ "GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11011
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields",
11012
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}",
11013
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}/move",
11014
+ "POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/move/{pos}",
11015
+ "GET /ex/jira/{cloudId}/rest/api/3/screenscheme",
11016
+ "DELETE /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}",
11017
+ "POST /ex/jira/{cloudId}/rest/api/3/version",
11018
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}",
11019
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{id}",
11020
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/mergeto/{moveIssuesTo}",
11021
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/move",
11022
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/removeAndSwap",
11023
+ "GET /ex/jira/{cloudId}/rest/api/3/workflow/search"
11024
+ ]
11025
+ },
11026
+ {
11027
+ name: "manage:jira-webhook",
11028
+ description: "Manage Jira webhooks. Enables an OAuth app to register and unregister dynamic webhooks in Jira. It also provides for fetching of registered webhooks.",
11029
+ rules: [
11030
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11031
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11032
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11033
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11034
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh"
11035
+ ]
11036
+ },
11037
+ {
11038
+ name: "read:jira-user",
11039
+ description: "View user information in Jira that you have access to, including usernames, email addresses, and avatars.",
11040
+ rules: [
11041
+ "GET /ex/jira/{cloudId}/rest/api/3/configuration",
11042
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11043
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11044
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11045
+ "GET /ex/jira/{cloudId}/rest/api/3/group",
11046
+ "GET /ex/jira/{cloudId}/rest/api/3/group/bulk",
11047
+ "GET /ex/jira/{cloudId}/rest/api/3/groups/picker",
11048
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/pdcleaner",
11049
+ "GET /ex/jira/{cloudId}/rest/api/3/myself",
11050
+ "GET /ex/jira/{cloudId}/rest/api/3/user",
11051
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/multiProjectSearch",
11052
+ "GET /ex/jira/{cloudId}/rest/api/3/user/assignable/search",
11053
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk",
11054
+ "GET /ex/jira/{cloudId}/rest/api/3/user/bulk/migration",
11055
+ "GET /ex/jira/{cloudId}/rest/api/3/user/columns",
11056
+ "GET /ex/jira/{cloudId}/rest/api/3/user/groups",
11057
+ "GET /ex/jira/{cloudId}/rest/api/3/user/permission/search",
11058
+ "GET /ex/jira/{cloudId}/rest/api/3/user/picker",
11059
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties",
11060
+ "GET /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11061
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search",
11062
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query",
11063
+ "GET /ex/jira/{cloudId}/rest/api/3/user/search/query/key",
11064
+ "GET /ex/jira/{cloudId}/rest/api/3/user/viewissue/search",
11065
+ "GET /ex/jira/{cloudId}/rest/api/3/users",
11066
+ "GET /ex/jira/{cloudId}/rest/api/3/users/search"
11067
+ ]
11068
+ },
11069
+ {
11070
+ name: "read:jira-work",
11071
+ description: "Read project and issue data. Search for issues and objects associated with issues (such as attachments and worklogs).",
11072
+ rules: [
11073
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/content/{id}",
11074
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/meta",
11075
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/thumbnail/{id}",
11076
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11077
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/human",
11078
+ "GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/raw",
11079
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11080
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11081
+ "GET /ex/jira/{cloudId}/rest/api/3/bulk/queue/{taskId}",
11082
+ "POST /ex/jira/{cloudId}/rest/api/3/changelog/bulkfetch",
11083
+ "GET /ex/jira/{cloudId}/rest/api/3/classification-levels",
11084
+ "POST /ex/jira/{cloudId}/rest/api/3/comment/list",
11085
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties",
11086
+ "GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11087
+ "GET /ex/jira/{cloudId}/rest/api/3/component",
11088
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}",
11089
+ "GET /ex/jira/{cloudId}/rest/api/3/component/{id}/relatedIssueCounts",
11090
+ "GET /ex/jira/{cloudId}/rest/api/3/customFieldOption/{id}",
11091
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard",
11092
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/gadgets",
11093
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/search",
11094
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11095
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11096
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties",
11097
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11098
+ "GET /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11099
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy",
11100
+ "GET /ex/jira/{cloudId}/rest/api/3/data-policy/project",
11101
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/analyse",
11102
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/eval",
11103
+ "POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate",
11104
+ "GET /ex/jira/{cloudId}/rest/api/3/field",
11105
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search",
11106
+ "GET /ex/jira/{cloudId}/rest/api/3/field/search/trashed",
11107
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/edit",
11108
+ "GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/search",
11109
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11110
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/favourite",
11111
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/my",
11112
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/search",
11113
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11114
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11115
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11116
+ "GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11117
+ "GET /ex/jira/{cloudId}/rest/api/3/groupuserpicker",
11118
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulkfetch",
11119
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta",
11120
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes",
11121
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}",
11122
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/limit/report",
11123
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/picker",
11124
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/watching",
11125
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11126
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog",
11127
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog/list",
11128
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11129
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11130
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/editmeta",
11131
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties",
11132
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11133
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11134
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11135
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11136
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11137
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11138
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11139
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11140
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties",
11141
+ "GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11142
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11143
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType",
11144
+ "GET /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}",
11145
+ "PUT /ex/jira/{cloudId}/rest/api/3/issues/archive/export",
11146
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype",
11147
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/project",
11148
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}",
11149
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/alternatives",
11150
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties",
11151
+ "GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}",
11152
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11153
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata",
11154
+ "GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata/suggestions",
11155
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/match",
11156
+ "POST /ex/jira/{cloudId}/rest/api/3/jql/parse",
11157
+ "GET /ex/jira/{cloudId}/rest/api/3/label",
11158
+ "GET /ex/jira/{cloudId}/rest/api/3/mypermissions",
11159
+ "POST /ex/jira/{cloudId}/rest/api/3/permissions/project",
11160
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme",
11161
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}",
11162
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission",
11163
+ "GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}",
11164
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan",
11165
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11166
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team",
11167
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11168
+ "GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11169
+ "GET /ex/jira/{cloudId}/rest/api/3/priority",
11170
+ "GET /ex/jira/{cloudId}/rest/api/3/priority/{id}",
11171
+ "GET /ex/jira/{cloudId}/rest/api/3/project",
11172
+ "GET /ex/jira/{cloudId}/rest/api/3/project/recent",
11173
+ "GET /ex/jira/{cloudId}/rest/api/3/project/search",
11174
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type",
11175
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/accessible",
11176
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}",
11177
+ "GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}/accessible",
11178
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}",
11179
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatars",
11180
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-config",
11181
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default",
11182
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/component",
11183
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/components",
11184
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features",
11185
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties",
11186
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}",
11187
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role",
11188
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}",
11189
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/roledetails",
11190
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/statuses",
11191
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/version",
11192
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/versions",
11193
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/hierarchy",
11194
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/issuesecuritylevelscheme",
11195
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/notificationscheme",
11196
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme",
11197
+ "GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/securitylevel",
11198
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory",
11199
+ "GET /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}",
11200
+ "GET /ex/jira/{cloudId}/rest/api/3/projects/fields",
11201
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/key",
11202
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectKey",
11203
+ "GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectName",
11204
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution",
11205
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/search",
11206
+ "GET /ex/jira/{cloudId}/rest/api/3/resolution/{id}",
11207
+ "GET /ex/jira/{cloudId}/rest/api/3/search",
11208
+ "POST /ex/jira/{cloudId}/rest/api/3/search",
11209
+ "POST /ex/jira/{cloudId}/rest/api/3/search/approximate-count",
11210
+ "GET /ex/jira/{cloudId}/rest/api/3/search/jql",
11211
+ "POST /ex/jira/{cloudId}/rest/api/3/search/jql",
11212
+ "GET /ex/jira/{cloudId}/rest/api/3/status",
11213
+ "GET /ex/jira/{cloudId}/rest/api/3/status/{idOrName}",
11214
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory",
11215
+ "GET /ex/jira/{cloudId}/rest/api/3/statuscategory/{idOrKey}",
11216
+ "GET /ex/jira/{cloudId}/rest/api/3/task/{taskId}",
11217
+ "GET /ex/jira/{cloudId}/rest/api/3/uiModifications",
11218
+ "POST /ex/jira/{cloudId}/rest/api/3/uiModifications",
11219
+ "PUT /ex/jira/{cloudId}/rest/api/3/uiModifications/{uiModificationId}",
11220
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}",
11221
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/avatar/{id}",
11222
+ "GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/owner/{entityId}",
11223
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}",
11224
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedIssueCounts",
11225
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11226
+ "GET /ex/jira/{cloudId}/rest/api/3/version/{id}/unresolvedIssueCount",
11227
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook",
11228
+ "POST /ex/jira/{cloudId}/rest/api/3/webhook",
11229
+ "DELETE /ex/jira/{cloudId}/rest/api/3/webhook",
11230
+ "GET /ex/jira/{cloudId}/rest/api/3/webhook/failed",
11231
+ "PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh",
11232
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/deleted",
11233
+ "POST /ex/jira/{cloudId}/rest/api/3/worklog/list",
11234
+ "GET /ex/jira/{cloudId}/rest/api/3/worklog/updated"
11235
+ ]
11236
+ },
11237
+ {
11238
+ name: "write:jira-work",
11239
+ description: "Create and edit issues in Jira, post comments, create worklogs, and delete issues.",
11240
+ rules: [
11241
+ "DELETE /ex/jira/{cloudId}/rest/api/3/attachment/{id}",
11242
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/delete",
11243
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields",
11244
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/move",
11245
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition",
11246
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/unwatch",
11247
+ "POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/watch",
11248
+ "PUT /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11249
+ "DELETE /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}",
11250
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard",
11251
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/bulk/edit",
11252
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget",
11253
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11254
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}",
11255
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11256
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}",
11257
+ "PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11258
+ "DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{id}",
11259
+ "POST /ex/jira/{cloudId}/rest/api/3/dashboard/{id}/copy",
11260
+ "POST /ex/jira/{cloudId}/rest/api/3/filter",
11261
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope",
11262
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11263
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}",
11264
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11265
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns",
11266
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11267
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite",
11268
+ "PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/owner",
11269
+ "POST /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission",
11270
+ "DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}",
11271
+ "POST /ex/jira/{cloudId}/rest/api/3/issue",
11272
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/archive",
11273
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/archive",
11274
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/bulk",
11275
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties",
11276
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/properties/multi",
11277
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11278
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}",
11279
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/unarchive",
11280
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11281
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}",
11282
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee",
11283
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/attachments",
11284
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment",
11285
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11286
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}",
11287
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/notify",
11288
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11289
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}",
11290
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11291
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink",
11292
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11293
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}",
11294
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions",
11295
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11296
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes",
11297
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11298
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers",
11299
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11300
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog",
11301
+ "POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/move",
11302
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11303
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}",
11304
+ "PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11305
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}",
11306
+ "POST /ex/jira/{cloudId}/rest/api/3/issueLink",
11307
+ "DELETE /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}",
11308
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan",
11309
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}",
11310
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/archive",
11311
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/duplicate",
11312
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian",
11313
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11314
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}",
11315
+ "POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly",
11316
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11317
+ "DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}",
11318
+ "PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/trash",
11319
+ "POST /ex/jira/{cloudId}/rest/api/3/task/{taskId}/cancel",
11320
+ "PUT /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11321
+ "DELETE /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}",
11322
+ "POST /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11323
+ "PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork",
11324
+ "DELETE /ex/jira/{cloudId}/rest/api/3/version/{versionId}/relatedwork/{relatedWorkId}"
11325
+ ]
11326
+ }
11327
+ ]
11328
+ }
11329
+ ]
11330
+ };
11331
+
10367
11332
  // ../../packages/core/src/firewalls/slack.generated.ts
10368
11333
  var slackFirewall = {
10369
11334
  name: "slack",
@@ -11194,12 +12159,14 @@ var slackFirewall = {
11194
12159
 
11195
12160
  // ../../packages/core/src/firewalls/index.ts
11196
12161
  var builtinFirewalls = {
12162
+ confluence: confluenceFirewall,
11197
12163
  github: githubFirewall,
11198
12164
  gmail: gmailFirewall,
11199
12165
  "google-calendar": googleCalendarFirewall,
11200
12166
  "google-docs": googleDocsFirewall,
11201
12167
  "google-drive": googleDriveFirewall,
11202
12168
  "google-sheets": googleSheetsFirewall,
12169
+ jira: jiraFirewall,
11203
12170
  slack: slackFirewall
11204
12171
  };
11205
12172
 
@@ -13196,7 +14163,7 @@ function getConfigPath() {
13196
14163
  return join2(homedir2(), ".vm0", "config.json");
13197
14164
  }
13198
14165
  var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
13199
- console.log(chalk4.bold(`VM0 CLI v${"9.74.3"}`));
14166
+ console.log(chalk4.bold(`VM0 CLI v${"9.75.0"}`));
13200
14167
  console.log();
13201
14168
  const config = await loadConfig();
13202
14169
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -13834,35 +14801,6 @@ async function getConnector(type2) {
13834
14801
  handleError(result, `Failed to get connector "${type2}"`);
13835
14802
  }
13836
14803
 
13837
- // src/lib/api/domains/usage.ts
13838
- async function getUsage(options) {
13839
- const baseUrl = await getBaseUrl();
13840
- const headers = await getHeaders();
13841
- const activeOrg = await getActiveOrg();
13842
- if (!activeOrg) {
13843
- throw new Error(
13844
- "No active organization configured. Run: vm0 org use <slug>"
13845
- );
13846
- }
13847
- const params = new URLSearchParams({
13848
- start_date: options.startDate,
13849
- end_date: options.endDate,
13850
- org: activeOrg
13851
- });
13852
- const response = await fetch(`${baseUrl}/api/usage?${params}`, {
13853
- method: "GET",
13854
- headers
13855
- });
13856
- if (!response.ok) {
13857
- const body = await response.json();
13858
- handleError(
13859
- { status: response.status, body },
13860
- "Failed to fetch usage data"
13861
- );
13862
- }
13863
- return response.json();
13864
- }
13865
-
13866
14804
  // src/lib/api/domains/user-preferences.ts
13867
14805
  import { initClient as initClient11 } from "@ts-rest/core";
13868
14806
  async function getUserPreferences() {
@@ -15256,7 +16194,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
15256
16194
  options.autoUpdate = false;
15257
16195
  }
15258
16196
  if (options.autoUpdate !== false) {
15259
- await startSilentUpgrade("9.74.3");
16197
+ await startSilentUpgrade("9.75.0");
15260
16198
  }
15261
16199
  try {
15262
16200
  let result;
@@ -16091,7 +17029,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
16091
17029
  withErrorHandler(
16092
17030
  async (identifier, prompt, options) => {
16093
17031
  if (options.autoUpdate !== false) {
16094
- await startSilentUpgrade("9.74.3");
17032
+ await startSilentUpgrade("9.75.0");
16095
17033
  }
16096
17034
  const { org, name, version } = parseIdentifier(identifier);
16097
17035
  let composeId;
@@ -17847,7 +18785,7 @@ var cookAction = new Command35().name("cook").description("Quick start: prepare,
17847
18785
  withErrorHandler(
17848
18786
  async (prompt, options) => {
17849
18787
  if (options.autoUpdate !== false) {
17850
- const shouldExit = await checkAndUpgrade("9.74.3", prompt);
18788
+ const shouldExit = await checkAndUpgrade("9.75.0", prompt);
17851
18789
  if (shouldExit) {
17852
18790
  process.exit(0);
17853
18791
  }
@@ -18559,26 +19497,6 @@ var ApiClient = class {
18559
19497
  const message = errorBody.error?.message || `Failed to list runs for schedule "${params.name}"`;
18560
19498
  throw new Error(message);
18561
19499
  }
18562
- /**
18563
- * Get usage statistics
18564
- */
18565
- async getUsage(options) {
18566
- const baseUrl = await this.getBaseUrl();
18567
- const headers = await this.getHeaders();
18568
- const params = new URLSearchParams({
18569
- start_date: options.startDate,
18570
- end_date: options.endDate
18571
- });
18572
- const response = await fetch(`${baseUrl}/api/usage?${params}`, {
18573
- method: "GET",
18574
- headers
18575
- });
18576
- if (!response.ok) {
18577
- const error = await response.json();
18578
- throw new Error(error.error?.message || "Failed to fetch usage data");
18579
- }
18580
- return response.json();
18581
- }
18582
19500
  /**
18583
19501
  * Generic GET request
18584
19502
  */
@@ -20562,9 +21480,6 @@ var initCommand4 = new Command68().name("init").description("Initialize a new VM
20562
21480
  console.log(
20563
21481
  ` 2. Edit ${chalk60.cyan("AGENTS.md")} to customize your agent's workflow`
20564
21482
  );
20565
- console.log(
20566
- ` Or install Claude plugin: ${chalk60.cyan(`vm0 setup-claude && claude "/vm0-agent let's build an agent"`)}`
20567
- );
20568
21483
  console.log(
20569
21484
  ` 3. Run your agent: ${chalk60.cyan(`vm0 cook "let's start working"`)}`
20570
21485
  );
@@ -21503,217 +22418,68 @@ var disableCommand = new Command74().name("disable").description("Disable a sche
21503
22418
  // src/commands/schedule/index.ts
21504
22419
  var scheduleCommand = new Command75().name("schedule").description("Manage agent schedules").addCommand(setupCommand2).addCommand(listCommand10).addCommand(statusCommand7).addCommand(deleteCommand2).addCommand(enableCommand).addCommand(disableCommand);
21505
22420
 
21506
- // src/commands/usage/index.ts
21507
- import { Command as Command76 } from "commander";
21508
- import chalk67 from "chalk";
21509
-
21510
- // src/lib/utils/duration-formatter.ts
21511
- function formatDuration(ms) {
21512
- if (ms === null || ms === void 0 || ms === 0) {
21513
- return "-";
21514
- }
21515
- if (ms < 0) {
21516
- return "-";
21517
- }
21518
- const totalSeconds = Math.floor(ms / 1e3);
21519
- if (totalSeconds === 0) {
21520
- return "< 1s";
21521
- }
21522
- const hours = Math.floor(totalSeconds / 3600);
21523
- const minutes = Math.floor(totalSeconds % 3600 / 60);
21524
- const seconds = totalSeconds % 60;
21525
- const parts = [];
21526
- if (hours > 0) {
21527
- parts.push(`${hours}h`);
21528
- }
21529
- if (minutes > 0) {
21530
- parts.push(`${minutes}m`);
21531
- }
21532
- if (seconds > 0) {
21533
- parts.push(`${seconds}s`);
21534
- }
21535
- return parts.join(" ");
21536
- }
21537
-
21538
- // src/commands/usage/index.ts
21539
- var MAX_RANGE_MS = 30 * 24 * 60 * 60 * 1e3;
21540
- var DEFAULT_RANGE_MS = 7 * 24 * 60 * 60 * 1e3;
21541
- function formatDateDisplay(dateStr) {
21542
- const date = new Date(dateStr);
21543
- return date.toLocaleDateString("en-US", { month: "short", day: "numeric" });
21544
- }
21545
- function formatDateRange(start, end) {
21546
- const startDate = new Date(start);
21547
- const endDate = new Date(end);
21548
- endDate.setDate(endDate.getDate() - 1);
21549
- const startStr = startDate.toLocaleDateString("en-US", {
21550
- month: "short",
21551
- day: "numeric"
21552
- });
21553
- const endStr = endDate.toLocaleDateString("en-US", {
21554
- month: "short",
21555
- day: "numeric",
21556
- year: "numeric"
21557
- });
21558
- return `${startStr} - ${endStr}`;
21559
- }
21560
- function fillMissingDates(daily, startDate, endDate) {
21561
- const dateMap = /* @__PURE__ */ new Map();
21562
- for (const day of daily) {
21563
- dateMap.set(day.date, day);
21564
- }
21565
- const result = [];
21566
- const current = new Date(startDate);
21567
- current.setUTCHours(0, 0, 0, 0);
21568
- while (current < endDate) {
21569
- const dateStr = current.toISOString().split("T")[0];
21570
- const existing = dateMap.get(dateStr);
21571
- if (existing) {
21572
- result.push(existing);
21573
- } else {
21574
- result.push({ date: dateStr, run_count: 0, run_time_ms: 0 });
21575
- }
21576
- current.setDate(current.getDate() + 1);
21577
- }
21578
- result.sort((a, b) => b.date.localeCompare(a.date));
21579
- return result;
21580
- }
21581
- var usageCommand = new Command76().name("usage").description("View usage statistics").option("--since <date>", "Start date (ISO format or relative: 7d, 30d)").option(
21582
- "--until <date>",
21583
- "End date (ISO format or relative, defaults to now)"
21584
- ).action(
21585
- withErrorHandler(async (options) => {
21586
- const now = /* @__PURE__ */ new Date();
21587
- let endDate;
21588
- let startDate;
21589
- if (options.until) {
21590
- try {
21591
- const untilMs = parseTime(options.until);
21592
- endDate = new Date(untilMs);
21593
- } catch {
21594
- throw new Error(
21595
- "Invalid --until format. Use ISO (2026-01-01) or relative (7d, 30d)"
21596
- );
21597
- }
21598
- } else {
21599
- endDate = now;
21600
- }
21601
- if (options.since) {
21602
- try {
21603
- const sinceMs = parseTime(options.since);
21604
- startDate = new Date(sinceMs);
21605
- } catch {
21606
- throw new Error(
21607
- "Invalid --since format. Use ISO (2026-01-01) or relative (7d, 30d)"
21608
- );
21609
- }
21610
- } else {
21611
- startDate = new Date(endDate.getTime() - DEFAULT_RANGE_MS);
21612
- }
21613
- if (startDate >= endDate) {
21614
- throw new Error("--since must be before --until");
21615
- }
21616
- const rangeMs = endDate.getTime() - startDate.getTime();
21617
- if (rangeMs > MAX_RANGE_MS) {
21618
- throw new Error(
21619
- "Time range exceeds maximum of 30 days. Use --until to specify an end date"
21620
- );
21621
- }
21622
- const usage = await getUsage({
21623
- startDate: startDate.toISOString(),
21624
- endDate: endDate.toISOString()
21625
- });
21626
- const filledDaily = fillMissingDates(
21627
- usage.daily,
21628
- new Date(usage.period.start),
21629
- new Date(usage.period.end)
21630
- );
21631
- console.log();
21632
- console.log(
21633
- chalk67.bold(
21634
- `Usage Summary (${formatDateRange(usage.period.start, usage.period.end)})`
21635
- )
21636
- );
21637
- console.log();
21638
- console.log(chalk67.dim("DATE RUNS RUN TIME"));
21639
- for (const day of filledDaily) {
21640
- const dateDisplay = formatDateDisplay(day.date).padEnd(10);
21641
- const runsDisplay = String(day.run_count).padStart(6);
21642
- const timeDisplay = formatDuration(day.run_time_ms);
21643
- console.log(`${dateDisplay}${runsDisplay} ${timeDisplay}`);
21644
- }
21645
- console.log(chalk67.dim("\u2500".repeat(29)));
21646
- const totalRunsDisplay = String(usage.summary.total_runs).padStart(6);
21647
- const totalTimeDisplay = formatDuration(usage.summary.total_run_time_ms);
21648
- console.log(
21649
- `${"TOTAL".padEnd(10)}${totalRunsDisplay} ${totalTimeDisplay}`
21650
- );
21651
- console.log();
21652
- })
21653
- );
21654
-
21655
22421
  // src/commands/secret/index.ts
21656
- import { Command as Command80 } from "commander";
22422
+ import { Command as Command79 } from "commander";
21657
22423
 
21658
22424
  // src/commands/secret/list.ts
21659
- import { Command as Command77 } from "commander";
21660
- import chalk68 from "chalk";
21661
- var listCommand11 = new Command77().name("list").alias("ls").description("List all secrets").action(
22425
+ import { Command as Command76 } from "commander";
22426
+ import chalk67 from "chalk";
22427
+ var listCommand11 = new Command76().name("list").alias("ls").description("List all secrets").action(
21662
22428
  withErrorHandler(async () => {
21663
22429
  const result = await listSecrets();
21664
22430
  if (result.secrets.length === 0) {
21665
- console.log(chalk68.dim("No secrets found"));
22431
+ console.log(chalk67.dim("No secrets found"));
21666
22432
  console.log();
21667
22433
  console.log("To add a secret:");
21668
- console.log(chalk68.cyan(" vm0 secret set MY_API_KEY --body <value>"));
22434
+ console.log(chalk67.cyan(" vm0 secret set MY_API_KEY --body <value>"));
21669
22435
  return;
21670
22436
  }
21671
- console.log(chalk68.bold("Secrets:"));
22437
+ console.log(chalk67.bold("Secrets:"));
21672
22438
  console.log();
21673
22439
  for (const secret of result.secrets) {
21674
22440
  let typeIndicator = "";
21675
22441
  let derivedLine = null;
21676
22442
  if (secret.type === "model-provider") {
21677
- typeIndicator = chalk68.dim(" [model-provider]");
22443
+ typeIndicator = chalk67.dim(" [model-provider]");
21678
22444
  } else if (secret.type === "connector") {
21679
22445
  const derived = getConnectorDerivedNames(secret.name);
21680
22446
  if (derived) {
21681
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21682
- derivedLine = chalk68.dim(
22447
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22448
+ derivedLine = chalk67.dim(
21683
22449
  `Available as: ${derived.envVarNames.join(", ")}`
21684
22450
  );
21685
22451
  } else {
21686
- typeIndicator = chalk68.dim(" [connector]");
22452
+ typeIndicator = chalk67.dim(" [connector]");
21687
22453
  }
21688
22454
  } else if (secret.type === "user") {
21689
22455
  const derived = getConnectorDerivedNames(secret.name);
21690
22456
  if (derived) {
21691
- typeIndicator = chalk68.dim(` [${derived.connectorLabel} connector]`);
21692
- derivedLine = chalk68.dim(
22457
+ typeIndicator = chalk67.dim(` [${derived.connectorLabel} connector]`);
22458
+ derivedLine = chalk67.dim(
21693
22459
  `Available as: ${derived.envVarNames.join(", ")}`
21694
22460
  );
21695
22461
  }
21696
22462
  }
21697
- console.log(` ${chalk68.cyan(secret.name)}${typeIndicator}`);
22463
+ console.log(` ${chalk67.cyan(secret.name)}${typeIndicator}`);
21698
22464
  if (derivedLine) {
21699
22465
  console.log(` ${derivedLine}`);
21700
22466
  }
21701
22467
  if (secret.description) {
21702
- console.log(` ${chalk68.dim(secret.description)}`);
22468
+ console.log(` ${chalk67.dim(secret.description)}`);
21703
22469
  }
21704
22470
  console.log(
21705
- ` ${chalk68.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
22471
+ ` ${chalk67.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
21706
22472
  );
21707
22473
  console.log();
21708
22474
  }
21709
- console.log(chalk68.dim(`Total: ${result.secrets.length} secret(s)`));
22475
+ console.log(chalk67.dim(`Total: ${result.secrets.length} secret(s)`));
21710
22476
  })
21711
22477
  );
21712
22478
 
21713
22479
  // src/commands/secret/set.ts
21714
- import { Command as Command78 } from "commander";
21715
- import chalk69 from "chalk";
21716
- var setCommand4 = new Command78().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
22480
+ import { Command as Command77 } from "commander";
22481
+ import chalk68 from "chalk";
22482
+ var setCommand4 = new Command77().name("set").description("Create or update a secret").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
21717
22483
  "-b, --body <value>",
21718
22484
  "Secret value (required in non-interactive mode)"
21719
22485
  ).option("-d, --description <description>", "Optional description").action(
@@ -21752,19 +22518,19 @@ var setCommand4 = new Command78().name("set").description("Create or update a se
21752
22518
  }
21753
22519
  throw error;
21754
22520
  }
21755
- console.log(chalk69.green(`\u2713 Secret "${secret.name}" saved`));
22521
+ console.log(chalk68.green(`\u2713 Secret "${secret.name}" saved`));
21756
22522
  console.log();
21757
22523
  console.log("Use in vm0.yaml:");
21758
- console.log(chalk69.cyan(` environment:`));
21759
- console.log(chalk69.cyan(` ${name}: \${{ secrets.${name} }}`));
22524
+ console.log(chalk68.cyan(` environment:`));
22525
+ console.log(chalk68.cyan(` ${name}: \${{ secrets.${name} }}`));
21760
22526
  }
21761
22527
  )
21762
22528
  );
21763
22529
 
21764
22530
  // src/commands/secret/delete.ts
21765
- import { Command as Command79 } from "commander";
21766
- import chalk70 from "chalk";
21767
- var deleteCommand3 = new Command79().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
22531
+ import { Command as Command78 } from "commander";
22532
+ import chalk69 from "chalk";
22533
+ var deleteCommand3 = new Command78().name("delete").description("Delete a secret").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21768
22534
  withErrorHandler(async (name, options) => {
21769
22535
  try {
21770
22536
  await getSecret(name);
@@ -21783,61 +22549,61 @@ var deleteCommand3 = new Command79().name("delete").description("Delete a secret
21783
22549
  false
21784
22550
  );
21785
22551
  if (!confirmed) {
21786
- console.log(chalk70.dim("Cancelled"));
22552
+ console.log(chalk69.dim("Cancelled"));
21787
22553
  return;
21788
22554
  }
21789
22555
  }
21790
22556
  await deleteSecret(name);
21791
- console.log(chalk70.green(`\u2713 Secret "${name}" deleted`));
22557
+ console.log(chalk69.green(`\u2713 Secret "${name}" deleted`));
21792
22558
  })
21793
22559
  );
21794
22560
 
21795
22561
  // src/commands/secret/index.ts
21796
- var secretCommand = new Command80().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand11).addCommand(setCommand4).addCommand(deleteCommand3);
22562
+ var secretCommand = new Command79().name("secret").description("Manage stored secrets for agent runs").addCommand(listCommand11).addCommand(setCommand4).addCommand(deleteCommand3);
21797
22563
 
21798
22564
  // src/commands/variable/index.ts
21799
- import { Command as Command84 } from "commander";
22565
+ import { Command as Command83 } from "commander";
21800
22566
 
21801
22567
  // src/commands/variable/list.ts
21802
- import { Command as Command81 } from "commander";
21803
- import chalk71 from "chalk";
22568
+ import { Command as Command80 } from "commander";
22569
+ import chalk70 from "chalk";
21804
22570
  function truncateValue2(value, maxLength = 60) {
21805
22571
  if (value.length <= maxLength) {
21806
22572
  return value;
21807
22573
  }
21808
22574
  return value.slice(0, maxLength - 15) + "... [truncated]";
21809
22575
  }
21810
- var listCommand12 = new Command81().name("list").alias("ls").description("List all variables").action(
22576
+ var listCommand12 = new Command80().name("list").alias("ls").description("List all variables").action(
21811
22577
  withErrorHandler(async () => {
21812
22578
  const result = await listVariables();
21813
22579
  if (result.variables.length === 0) {
21814
- console.log(chalk71.dim("No variables found"));
22580
+ console.log(chalk70.dim("No variables found"));
21815
22581
  console.log();
21816
22582
  console.log("To add a variable:");
21817
- console.log(chalk71.cyan(" vm0 variable set MY_VAR <value>"));
22583
+ console.log(chalk70.cyan(" vm0 variable set MY_VAR <value>"));
21818
22584
  return;
21819
22585
  }
21820
- console.log(chalk71.bold("Variables:"));
22586
+ console.log(chalk70.bold("Variables:"));
21821
22587
  console.log();
21822
22588
  for (const variable of result.variables) {
21823
22589
  const displayValue = truncateValue2(variable.value);
21824
- console.log(` ${chalk71.cyan(variable.name)} = ${displayValue}`);
22590
+ console.log(` ${chalk70.cyan(variable.name)} = ${displayValue}`);
21825
22591
  if (variable.description) {
21826
- console.log(` ${chalk71.dim(variable.description)}`);
22592
+ console.log(` ${chalk70.dim(variable.description)}`);
21827
22593
  }
21828
22594
  console.log(
21829
- ` ${chalk71.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
22595
+ ` ${chalk70.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
21830
22596
  );
21831
22597
  console.log();
21832
22598
  }
21833
- console.log(chalk71.dim(`Total: ${result.variables.length} variable(s)`));
22599
+ console.log(chalk70.dim(`Total: ${result.variables.length} variable(s)`));
21834
22600
  })
21835
22601
  );
21836
22602
 
21837
22603
  // src/commands/variable/set.ts
21838
- import { Command as Command82 } from "commander";
21839
- import chalk72 from "chalk";
21840
- var setCommand5 = new Command82().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
22604
+ import { Command as Command81 } from "commander";
22605
+ import chalk71 from "chalk";
22606
+ var setCommand5 = new Command81().name("set").description("Create or update a variable").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
21841
22607
  withErrorHandler(
21842
22608
  async (name, value, options) => {
21843
22609
  let variable;
@@ -21857,19 +22623,19 @@ var setCommand5 = new Command82().name("set").description("Create or update a va
21857
22623
  }
21858
22624
  throw error;
21859
22625
  }
21860
- console.log(chalk72.green(`\u2713 Variable "${variable.name}" saved`));
22626
+ console.log(chalk71.green(`\u2713 Variable "${variable.name}" saved`));
21861
22627
  console.log();
21862
22628
  console.log("Use in vm0.yaml:");
21863
- console.log(chalk72.cyan(` environment:`));
21864
- console.log(chalk72.cyan(` ${name}: \${{ vars.${name} }}`));
22629
+ console.log(chalk71.cyan(` environment:`));
22630
+ console.log(chalk71.cyan(` ${name}: \${{ vars.${name} }}`));
21865
22631
  }
21866
22632
  )
21867
22633
  );
21868
22634
 
21869
22635
  // src/commands/variable/delete.ts
21870
- import { Command as Command83 } from "commander";
21871
- import chalk73 from "chalk";
21872
- var deleteCommand4 = new Command83().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
22636
+ import { Command as Command82 } from "commander";
22637
+ import chalk72 from "chalk";
22638
+ var deleteCommand4 = new Command82().name("delete").description("Delete a variable").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
21873
22639
  withErrorHandler(async (name, options) => {
21874
22640
  try {
21875
22641
  await getVariable(name);
@@ -21888,24 +22654,24 @@ var deleteCommand4 = new Command83().name("delete").description("Delete a variab
21888
22654
  false
21889
22655
  );
21890
22656
  if (!confirmed) {
21891
- console.log(chalk73.dim("Cancelled"));
22657
+ console.log(chalk72.dim("Cancelled"));
21892
22658
  return;
21893
22659
  }
21894
22660
  }
21895
22661
  await deleteVariable(name);
21896
- console.log(chalk73.green(`\u2713 Variable "${name}" deleted`));
22662
+ console.log(chalk72.green(`\u2713 Variable "${name}" deleted`));
21897
22663
  })
21898
22664
  );
21899
22665
 
21900
22666
  // src/commands/variable/index.ts
21901
- var variableCommand = new Command84().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand12).addCommand(setCommand5).addCommand(deleteCommand4);
22667
+ var variableCommand = new Command83().name("variable").description("Manage stored variables for agent runs").addCommand(listCommand12).addCommand(setCommand5).addCommand(deleteCommand4);
21902
22668
 
21903
22669
  // src/commands/connector/index.ts
21904
- import { Command as Command89 } from "commander";
22670
+ import { Command as Command88 } from "commander";
21905
22671
 
21906
22672
  // src/commands/connector/connect.ts
21907
- import { Command as Command85 } from "commander";
21908
- import chalk75 from "chalk";
22673
+ import { Command as Command84 } from "commander";
22674
+ import chalk74 from "chalk";
21909
22675
  import { initClient as initClient15 } from "@ts-rest/core";
21910
22676
 
21911
22677
  // src/commands/connector/lib/computer/start-services.ts
@@ -21914,7 +22680,7 @@ import { access as access2, constants } from "fs/promises";
21914
22680
  import { createServer } from "net";
21915
22681
  import { homedir as homedir4 } from "os";
21916
22682
  import { join as join12 } from "path";
21917
- import chalk74 from "chalk";
22683
+ import chalk73 from "chalk";
21918
22684
 
21919
22685
  // src/commands/connector/lib/computer/ngrok.ts
21920
22686
  import ngrok from "@ngrok/ngrok";
@@ -21988,7 +22754,7 @@ async function checkComputerDependencies() {
21988
22754
  }
21989
22755
  }
21990
22756
  async function startComputerServices(credentials) {
21991
- console.log(chalk74.cyan("Starting computer connector services..."));
22757
+ console.log(chalk73.cyan("Starting computer connector services..."));
21992
22758
  const wsgidavBinary = await findBinary("wsgidav");
21993
22759
  if (!wsgidavBinary) {
21994
22760
  throw new Error(
@@ -22015,7 +22781,7 @@ async function startComputerServices(credentials) {
22015
22781
  );
22016
22782
  wsgidav.stdout?.on("data", (data) => process.stdout.write(data));
22017
22783
  wsgidav.stderr?.on("data", (data) => process.stderr.write(data));
22018
- console.log(chalk74.green("\u2713 WebDAV server started"));
22784
+ console.log(chalk73.green("\u2713 WebDAV server started"));
22019
22785
  const chrome = spawn2(
22020
22786
  chromeBinary,
22021
22787
  [
@@ -22029,7 +22795,7 @@ async function startComputerServices(credentials) {
22029
22795
  );
22030
22796
  chrome.stdout?.on("data", (data) => process.stdout.write(data));
22031
22797
  chrome.stderr?.on("data", (data) => process.stderr.write(data));
22032
- console.log(chalk74.green("\u2713 Chrome started"));
22798
+ console.log(chalk73.green("\u2713 Chrome started"));
22033
22799
  try {
22034
22800
  await startNgrokTunnels(
22035
22801
  credentials.ngrokToken,
@@ -22038,18 +22804,18 @@ async function startComputerServices(credentials) {
22038
22804
  cdpPort
22039
22805
  );
22040
22806
  console.log(
22041
- chalk74.green(
22807
+ chalk73.green(
22042
22808
  `\u2713 ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`
22043
22809
  )
22044
22810
  );
22045
22811
  console.log();
22046
- console.log(chalk74.green("\u2713 Computer connector active"));
22812
+ console.log(chalk73.green("\u2713 Computer connector active"));
22047
22813
  console.log(` WebDAV: ~/Downloads \u2192 webdav.${credentials.domain}`);
22048
22814
  console.log(
22049
22815
  ` Chrome CDP: port ${cdpPort} \u2192 chrome.${credentials.domain}`
22050
22816
  );
22051
22817
  console.log();
22052
- console.log(chalk74.dim("Press ^C twice to disconnect"));
22818
+ console.log(chalk73.dim("Press ^C twice to disconnect"));
22053
22819
  console.log();
22054
22820
  let sigintCount = 0;
22055
22821
  await new Promise((resolve2) => {
@@ -22063,7 +22829,7 @@ async function startComputerServices(credentials) {
22063
22829
  const onSigint = () => {
22064
22830
  sigintCount++;
22065
22831
  if (sigintCount === 1) {
22066
- console.log(chalk74.dim("\nPress ^C again to disconnect and exit..."));
22832
+ console.log(chalk73.dim("\nPress ^C again to disconnect and exit..."));
22067
22833
  } else {
22068
22834
  done();
22069
22835
  }
@@ -22073,11 +22839,11 @@ async function startComputerServices(credentials) {
22073
22839
  });
22074
22840
  } finally {
22075
22841
  console.log();
22076
- console.log(chalk74.cyan("Stopping services..."));
22842
+ console.log(chalk73.cyan("Stopping services..."));
22077
22843
  wsgidav.kill("SIGTERM");
22078
22844
  chrome.kill("SIGTERM");
22079
22845
  await stopNgrokTunnels();
22080
- console.log(chalk74.green("\u2713 Services stopped"));
22846
+ console.log(chalk73.green("\u2713 Services stopped"));
22081
22847
  }
22082
22848
  }
22083
22849
 
@@ -22102,10 +22868,10 @@ async function getHeaders2() {
22102
22868
  function renderHelpText(text) {
22103
22869
  return text.replace(
22104
22870
  /\[([^\]]+)\]\(([^)]+)\)/g,
22105
- (_m, label, url) => `${label} (${chalk75.cyan(url)})`
22106
- ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk75.bold(content)).replace(
22871
+ (_m, label, url) => `${label} (${chalk74.cyan(url)})`
22872
+ ).replace(/\*\*([^*]+)\*\*/g, (_m, content) => chalk74.bold(content)).replace(
22107
22873
  /^> (.+)$/gm,
22108
- (_m, content) => chalk75.yellow(` ${content}`)
22874
+ (_m, content) => chalk74.yellow(` ${content}`)
22109
22875
  );
22110
22876
  }
22111
22877
  async function connectViaApiToken(connectorType, tokenValue) {
@@ -22130,7 +22896,7 @@ async function connectViaApiToken(connectorType, tokenValue) {
22130
22896
  for (const [secretName, secretConfig] of secretEntries) {
22131
22897
  if (!secretConfig.required) continue;
22132
22898
  const value = await promptPassword(
22133
- `${secretConfig.label}${secretConfig.placeholder ? chalk75.dim(` (${secretConfig.placeholder})`) : ""}:`
22899
+ `${secretConfig.label}${secretConfig.placeholder ? chalk74.dim(` (${secretConfig.placeholder})`) : ""}:`
22134
22900
  );
22135
22901
  if (!value) {
22136
22902
  throw new Error("Cancelled");
@@ -22146,13 +22912,13 @@ async function connectViaApiToken(connectorType, tokenValue) {
22146
22912
  });
22147
22913
  }
22148
22914
  console.log(
22149
- chalk75.green(`
22915
+ chalk74.green(`
22150
22916
  \u2713 ${config.label} connected successfully via API token!`)
22151
22917
  );
22152
22918
  }
22153
22919
  async function connectComputer(apiUrl, headers) {
22154
22920
  await checkComputerDependencies();
22155
- console.log(chalk75.cyan("Setting up computer connector..."));
22921
+ console.log(chalk74.cyan("Setting up computer connector..."));
22156
22922
  const computerClient = initClient15(computerConnectorContract, {
22157
22923
  baseUrl: apiUrl,
22158
22924
  baseHeaders: headers,
@@ -22167,9 +22933,9 @@ async function connectComputer(apiUrl, headers) {
22167
22933
  }
22168
22934
  const credentials = createResult.body;
22169
22935
  await startComputerServices(credentials);
22170
- console.log(chalk75.cyan("Disconnecting computer connector..."));
22936
+ console.log(chalk74.cyan("Disconnecting computer connector..."));
22171
22937
  await deleteConnector("computer");
22172
- console.log(chalk75.green("\u2713 Disconnected computer"));
22938
+ console.log(chalk74.green("\u2713 Disconnected computer"));
22173
22939
  process.exit(0);
22174
22940
  }
22175
22941
  async function resolveAuthMethod(connectorType, tokenFlag) {
@@ -22208,7 +22974,7 @@ async function resolveAuthMethod(connectorType, tokenFlag) {
22208
22974
  );
22209
22975
  }
22210
22976
  async function connectViaOAuth(connectorType, apiUrl, headers) {
22211
- console.log(`Connecting ${chalk75.cyan(connectorType)}...`);
22977
+ console.log(`Connecting ${chalk74.cyan(connectorType)}...`);
22212
22978
  const sessionsClient = initClient15(connectorSessionsContract, {
22213
22979
  baseUrl: apiUrl,
22214
22980
  baseHeaders: headers,
@@ -22224,8 +22990,8 @@ async function connectViaOAuth(connectorType, apiUrl, headers) {
22224
22990
  }
22225
22991
  const session = createResult.body;
22226
22992
  const verificationUrl = `${apiUrl}${session.verificationUrl}`;
22227
- console.log(chalk75.green("\nSession created"));
22228
- console.log(chalk75.cyan(`
22993
+ console.log(chalk74.green("\nSession created"));
22994
+ console.log(chalk74.cyan(`
22229
22995
  To connect, visit: ${verificationUrl}`));
22230
22996
  console.log(
22231
22997
  `
@@ -22257,7 +23023,7 @@ The session expires in ${Math.floor(session.expiresIn / 60)} minutes.`
22257
23023
  switch (status.status) {
22258
23024
  case "complete":
22259
23025
  console.log(
22260
- chalk75.green(`
23026
+ chalk74.green(`
22261
23027
 
22262
23028
  ${connectorType} connected successfully!`)
22263
23029
  );
@@ -22269,13 +23035,13 @@ ${connectorType} connected successfully!`)
22269
23035
  `Connection failed: ${status.errorMessage || "Unknown error"}`
22270
23036
  );
22271
23037
  case "pending":
22272
- process.stdout.write(chalk75.dim("."));
23038
+ process.stdout.write(chalk74.dim("."));
22273
23039
  break;
22274
23040
  }
22275
23041
  }
22276
23042
  throw new Error("Session timed out, please try again");
22277
23043
  }
22278
- var connectCommand = new Command85().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
23044
+ var connectCommand = new Command84().name("connect").description("Connect a third-party service (e.g., GitHub)").argument("<type>", "Connector type (e.g., github)").option("--token <value>", "API token value (skip interactive prompt)").action(
22279
23045
  withErrorHandler(async (type2, options) => {
22280
23046
  const parseResult = connectorTypeSchema.safeParse(type2);
22281
23047
  if (!parseResult.success) {
@@ -22300,9 +23066,9 @@ var connectCommand = new Command85().name("connect").description("Connect a thir
22300
23066
  );
22301
23067
 
22302
23068
  // src/commands/connector/list.ts
22303
- import { Command as Command86 } from "commander";
22304
- import chalk76 from "chalk";
22305
- var listCommand13 = new Command86().name("list").alias("ls").description("List all connectors and their status").action(
23069
+ import { Command as Command85 } from "commander";
23070
+ import chalk75 from "chalk";
23071
+ var listCommand13 = new Command85().name("list").alias("ls").description("List all connectors and their status").action(
22306
23072
  withErrorHandler(async () => {
22307
23073
  const result = await listConnectors();
22308
23074
  const connectedMap = new Map(result.connectors.map((c39) => [c39.type, c39]));
@@ -22324,26 +23090,26 @@ var listCommand13 = new Command86().name("list").alias("ls").description("List a
22324
23090
  statusText.padEnd(statusWidth),
22325
23091
  "ACCOUNT"
22326
23092
  ].join(" ");
22327
- console.log(chalk76.dim(header));
23093
+ console.log(chalk75.dim(header));
22328
23094
  for (const type2 of allTypes) {
22329
23095
  const connector = connectedMap.get(type2);
22330
23096
  const scopeMismatch = connector !== void 0 && connector.authMethod === "oauth" && !hasRequiredScopes(type2, connector.oauthScopes);
22331
- const status = connector ? connector.needsReconnect ? chalk76.yellow("!".padEnd(statusWidth)) : scopeMismatch ? chalk76.yellow("!".padEnd(statusWidth)) : chalk76.green("\u2713".padEnd(statusWidth)) : chalk76.dim("-".padEnd(statusWidth));
22332
- const account = connector?.needsReconnect ? chalk76.yellow("(reconnect needed)") : scopeMismatch ? chalk76.yellow("(permissions update available)") : connector?.externalUsername ? `@${connector.externalUsername}` : chalk76.dim("-");
23097
+ const status = connector ? connector.needsReconnect ? chalk75.yellow("!".padEnd(statusWidth)) : scopeMismatch ? chalk75.yellow("!".padEnd(statusWidth)) : chalk75.green("\u2713".padEnd(statusWidth)) : chalk75.dim("-".padEnd(statusWidth));
23098
+ const account = connector?.needsReconnect ? chalk75.yellow("(reconnect needed)") : scopeMismatch ? chalk75.yellow("(permissions update available)") : connector?.externalUsername ? `@${connector.externalUsername}` : chalk75.dim("-");
22333
23099
  const row = [type2.padEnd(typeWidth), status, account].join(" ");
22334
23100
  console.log(row);
22335
23101
  }
22336
23102
  console.log();
22337
- console.log(chalk76.dim("To connect a service:"));
22338
- console.log(chalk76.dim(" vm0 connector connect <type>"));
23103
+ console.log(chalk75.dim("To connect a service:"));
23104
+ console.log(chalk75.dim(" vm0 connector connect <type>"));
22339
23105
  })
22340
23106
  );
22341
23107
 
22342
23108
  // src/commands/connector/status.ts
22343
- import { Command as Command87 } from "commander";
22344
- import chalk77 from "chalk";
23109
+ import { Command as Command86 } from "commander";
23110
+ import chalk76 from "chalk";
22345
23111
  var LABEL_WIDTH = 16;
22346
- var statusCommand8 = new Command87().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
23112
+ var statusCommand8 = new Command86().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").action(
22347
23113
  withErrorHandler(async (type2) => {
22348
23114
  const parseResult = connectorTypeSchema.safeParse(type2);
22349
23115
  if (!parseResult.success) {
@@ -22353,11 +23119,11 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22353
23119
  });
22354
23120
  }
22355
23121
  const connector = await getConnector(parseResult.data);
22356
- console.log(`Connector: ${chalk77.cyan(type2)}`);
23122
+ console.log(`Connector: ${chalk76.cyan(type2)}`);
22357
23123
  console.log();
22358
23124
  if (connector) {
22359
23125
  console.log(
22360
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.green("connected")}`
23126
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.green("connected")}`
22361
23127
  );
22362
23128
  console.log(
22363
23129
  `${"Account:".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`
@@ -22373,7 +23139,7 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22373
23139
  if (connector.authMethod === "oauth" && !hasRequiredScopes(parseResult.data, connector.oauthScopes)) {
22374
23140
  const diff = getScopeDiff(parseResult.data, connector.oauthScopes);
22375
23141
  console.log(
22376
- `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk77.yellow("update available")}`
23142
+ `${"Permissions:".padEnd(LABEL_WIDTH)}${chalk76.yellow("update available")}`
22377
23143
  );
22378
23144
  if (diff.addedScopes.length > 0) {
22379
23145
  console.log(
@@ -22395,23 +23161,23 @@ var statusCommand8 = new Command87().name("status").description("Show detailed s
22395
23161
  );
22396
23162
  }
22397
23163
  console.log();
22398
- console.log(chalk77.dim("To disconnect:"));
22399
- console.log(chalk77.dim(` vm0 connector disconnect ${type2}`));
23164
+ console.log(chalk76.dim("To disconnect:"));
23165
+ console.log(chalk76.dim(` vm0 connector disconnect ${type2}`));
22400
23166
  } else {
22401
23167
  console.log(
22402
- `${"Status:".padEnd(LABEL_WIDTH)}${chalk77.dim("not connected")}`
23168
+ `${"Status:".padEnd(LABEL_WIDTH)}${chalk76.dim("not connected")}`
22403
23169
  );
22404
23170
  console.log();
22405
- console.log(chalk77.dim("To connect:"));
22406
- console.log(chalk77.dim(` vm0 connector connect ${type2}`));
23171
+ console.log(chalk76.dim("To connect:"));
23172
+ console.log(chalk76.dim(` vm0 connector connect ${type2}`));
22407
23173
  }
22408
23174
  })
22409
23175
  );
22410
23176
 
22411
23177
  // src/commands/connector/disconnect.ts
22412
- import { Command as Command88 } from "commander";
22413
- import chalk78 from "chalk";
22414
- var disconnectCommand = new Command88().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
23178
+ import { Command as Command87 } from "commander";
23179
+ import chalk77 from "chalk";
23180
+ var disconnectCommand = new Command87().name("disconnect").description("Disconnect a third-party service").argument("<type>", "Connector type to disconnect (e.g., github)").action(
22415
23181
  withErrorHandler(async (type2) => {
22416
23182
  const parseResult = connectorTypeSchema.safeParse(type2);
22417
23183
  if (!parseResult.success) {
@@ -22422,145 +23188,16 @@ var disconnectCommand = new Command88().name("disconnect").description("Disconne
22422
23188
  }
22423
23189
  const connectorType = parseResult.data;
22424
23190
  await deleteConnector(connectorType);
22425
- console.log(chalk78.green(`\u2713 Disconnected ${type2}`));
23191
+ console.log(chalk77.green(`\u2713 Disconnected ${type2}`));
22426
23192
  })
22427
23193
  );
22428
23194
 
22429
23195
  // src/commands/connector/index.ts
22430
- var connectorCommand = new Command89().name("connector").description("Manage third-party service connections").addCommand(listCommand13).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
22431
-
22432
- // src/commands/setup-claude/index.ts
22433
- import { Command as Command90 } from "commander";
22434
- import chalk80 from "chalk";
22435
-
22436
- // src/lib/domain/onboard/claude-setup.ts
22437
- import { spawn as spawn3 } from "child_process";
22438
- import chalk79 from "chalk";
22439
- var MARKETPLACE_NAME = "vm0-skills";
22440
- var MARKETPLACE_REPO = "vm0-ai/vm0-skills";
22441
- var PLUGIN_ID = "vm0@vm0-skills";
22442
- var PRIMARY_SKILL_NAME = "vm0-agent";
22443
- async function runClaudeCommand(args, cwd) {
22444
- return new Promise((resolve2) => {
22445
- const child = spawn3("claude", args, {
22446
- stdio: ["inherit", "pipe", "pipe"],
22447
- cwd
22448
- });
22449
- let stdout = "";
22450
- let stderr = "";
22451
- child.stdout?.on("data", (data) => {
22452
- stdout += data.toString();
22453
- });
22454
- child.stderr?.on("data", (data) => {
22455
- stderr += data.toString();
22456
- });
22457
- child.on("error", (err) => {
22458
- resolve2({
22459
- success: false,
22460
- output: stdout,
22461
- error: err.message
22462
- });
22463
- });
22464
- child.on("close", (code) => {
22465
- resolve2({
22466
- success: code === 0,
22467
- output: stdout,
22468
- error: stderr || void 0
22469
- });
22470
- });
22471
- });
22472
- }
22473
- async function isMarketplaceInstalled() {
22474
- const result = await runClaudeCommand([
22475
- "plugin",
22476
- "marketplace",
22477
- "list",
22478
- "--json"
22479
- ]);
22480
- if (!result.success) {
22481
- return false;
22482
- }
22483
- try {
22484
- const marketplaces = JSON.parse(result.output);
22485
- return marketplaces.some((m) => m.name === MARKETPLACE_NAME);
22486
- } catch {
22487
- return false;
22488
- }
22489
- }
22490
- async function addMarketplace() {
22491
- const result = await runClaudeCommand([
22492
- "plugin",
22493
- "marketplace",
22494
- "add",
22495
- MARKETPLACE_REPO
22496
- ]);
22497
- if (!result.success) {
22498
- throw new Error(
22499
- `Failed to add marketplace ${MARKETPLACE_REPO}: ${result.error ?? "unknown error"}`
22500
- );
22501
- }
22502
- }
22503
- async function updateMarketplace() {
22504
- const result = await runClaudeCommand([
22505
- "plugin",
22506
- "marketplace",
22507
- "update",
22508
- MARKETPLACE_NAME
22509
- ]);
22510
- if (!result.success) {
22511
- console.warn(
22512
- chalk79.yellow(
22513
- `Warning: Could not update marketplace: ${result.error ?? "unknown error"}`
22514
- )
22515
- );
22516
- }
22517
- }
22518
- async function ensureMarketplace() {
22519
- const installed = await isMarketplaceInstalled();
22520
- if (!installed) {
22521
- await addMarketplace();
22522
- } else {
22523
- await updateMarketplace();
22524
- }
22525
- }
22526
- async function installVm0Plugin(scope = "user", cwd) {
22527
- await ensureMarketplace();
22528
- const args = ["plugin", "install", PLUGIN_ID, "--scope", scope];
22529
- const result = await runClaudeCommand(args, cwd);
22530
- if (!result.success) {
22531
- throw new Error(
22532
- `Failed to install plugin ${PLUGIN_ID}: ${result.error ?? "unknown error"}`
22533
- );
22534
- }
22535
- return {
22536
- pluginId: PLUGIN_ID,
22537
- scope
22538
- };
22539
- }
22540
-
22541
- // src/commands/setup-claude/index.ts
22542
- 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(
22543
- withErrorHandler(async (options) => {
22544
- console.log(chalk80.dim("Installing VM0 Claude Plugin..."));
22545
- const scope = options.scope === "user" ? "user" : "project";
22546
- const result = await installVm0Plugin(scope, options.agentDir);
22547
- console.log(
22548
- chalk80.green(`\u2713 Installed ${result.pluginId} (scope: ${result.scope})`)
22549
- );
22550
- console.log();
22551
- console.log("Next step:");
22552
- const cdPrefix = options.agentDir ? `cd ${options.agentDir} && ` : "";
22553
- console.log(
22554
- chalk80.cyan(
22555
- ` ${cdPrefix}claude "/${PRIMARY_SKILL_NAME} let's build a workflow"`
22556
- )
22557
- );
22558
- })
22559
- );
23196
+ var connectorCommand = new Command88().name("connector").description("Manage third-party service connections").addCommand(listCommand13).addCommand(statusCommand8).addCommand(connectCommand).addCommand(disconnectCommand);
22560
23197
 
22561
23198
  // src/commands/preference/index.ts
22562
- import { Command as Command91 } from "commander";
22563
- import chalk81 from "chalk";
23199
+ import { Command as Command89 } from "commander";
23200
+ import chalk78 from "chalk";
22564
23201
  function detectTimezone2() {
22565
23202
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
22566
23203
  }
@@ -22581,15 +23218,15 @@ function parseOnOff(flag, value) {
22581
23218
  );
22582
23219
  }
22583
23220
  function displayPreferences(prefs) {
22584
- console.log(chalk81.bold("Current preferences:"));
23221
+ console.log(chalk78.bold("Current preferences:"));
22585
23222
  console.log(
22586
- ` Timezone: ${prefs.timezone ? chalk81.cyan(prefs.timezone) : chalk81.dim("not set")}`
23223
+ ` Timezone: ${prefs.timezone ? chalk78.cyan(prefs.timezone) : chalk78.dim("not set")}`
22587
23224
  );
22588
23225
  console.log(
22589
- ` Email notify: ${prefs.notifyEmail ? chalk81.green("on") : chalk81.dim("off")}`
23226
+ ` Email notify: ${prefs.notifyEmail ? chalk78.green("on") : chalk78.dim("off")}`
22590
23227
  );
22591
23228
  console.log(
22592
- ` Slack notify: ${prefs.notifySlack ? chalk81.green("on") : chalk81.dim("off")}`
23229
+ ` Slack notify: ${prefs.notifySlack ? chalk78.green("on") : chalk78.dim("off")}`
22593
23230
  );
22594
23231
  }
22595
23232
  function buildUpdates(opts) {
@@ -22619,21 +23256,21 @@ function buildUpdates(opts) {
22619
23256
  function printUpdateResult(updates, result) {
22620
23257
  if (updates.timezone !== void 0) {
22621
23258
  console.log(
22622
- chalk81.green(
22623
- `Timezone set to ${chalk81.cyan(result.timezone ?? updates.timezone)}`
23259
+ chalk78.green(
23260
+ `Timezone set to ${chalk78.cyan(result.timezone ?? updates.timezone)}`
22624
23261
  )
22625
23262
  );
22626
23263
  }
22627
23264
  if (updates.notifyEmail !== void 0) {
22628
23265
  console.log(
22629
- chalk81.green(
23266
+ chalk78.green(
22630
23267
  `Email notifications ${result.notifyEmail ? "enabled" : "disabled"}`
22631
23268
  )
22632
23269
  );
22633
23270
  }
22634
23271
  if (updates.notifySlack !== void 0) {
22635
23272
  console.log(
22636
- chalk81.green(
23273
+ chalk78.green(
22637
23274
  `Slack notifications ${result.notifySlack ? "enabled" : "disabled"}`
22638
23275
  )
22639
23276
  );
@@ -22642,7 +23279,7 @@ function printUpdateResult(updates, result) {
22642
23279
  async function interactiveSetup(prefs) {
22643
23280
  if (!prefs.timezone) {
22644
23281
  const detectedTz = detectTimezone2();
22645
- console.log(chalk81.dim(`
23282
+ console.log(chalk78.dim(`
22646
23283
  System timezone detected: ${detectedTz}`));
22647
23284
  const tz = await promptText(
22648
23285
  "Set timezone? (enter timezone or leave empty to skip)",
@@ -22653,7 +23290,7 @@ System timezone detected: ${detectedTz}`));
22653
23290
  throw new Error(`Invalid timezone: ${tz.trim()}`);
22654
23291
  }
22655
23292
  await updateUserPreferences({ timezone: tz.trim() });
22656
- console.log(chalk81.green(`Timezone set to ${chalk81.cyan(tz.trim())}`));
23293
+ console.log(chalk78.green(`Timezone set to ${chalk78.cyan(tz.trim())}`));
22657
23294
  }
22658
23295
  }
22659
23296
  if (!prefs.notifyEmail) {
@@ -22663,11 +23300,11 @@ System timezone detected: ${detectedTz}`));
22663
23300
  );
22664
23301
  if (enable) {
22665
23302
  await updateUserPreferences({ notifyEmail: true });
22666
- console.log(chalk81.green("Email notifications enabled"));
23303
+ console.log(chalk78.green("Email notifications enabled"));
22667
23304
  }
22668
23305
  }
22669
23306
  }
22670
- var preferenceCommand = new Command91().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
23307
+ var preferenceCommand = new Command89().name("preference").description("View or update your preferences").option("--timezone <timezone>", "IANA timezone (e.g., America/New_York)").option("--notify-email <on|off>", "Enable or disable email notifications").option("--notify-slack <on|off>", "Enable or disable Slack notifications").action(
22671
23308
  withErrorHandler(async (opts) => {
22672
23309
  const updates = buildUpdates(opts);
22673
23310
  if (updates) {
@@ -22682,32 +23319,32 @@ var preferenceCommand = new Command91().name("preference").description("View or
22682
23319
  } else if (!prefs.timezone) {
22683
23320
  console.log();
22684
23321
  console.log(
22685
- `To set timezone: ${chalk81.cyan("vm0 preference --timezone <timezone>")}`
23322
+ `To set timezone: ${chalk78.cyan("vm0 preference --timezone <timezone>")}`
22686
23323
  );
22687
23324
  console.log(
22688
- chalk81.dim("Example: vm0 preference --timezone America/New_York")
23325
+ chalk78.dim("Example: vm0 preference --timezone America/New_York")
22689
23326
  );
22690
23327
  }
22691
23328
  })
22692
23329
  );
22693
23330
 
22694
23331
  // src/commands/upgrade/index.ts
22695
- import { Command as Command92 } from "commander";
22696
- import chalk82 from "chalk";
22697
- var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
23332
+ import { Command as Command90 } from "commander";
23333
+ import chalk79 from "chalk";
23334
+ var upgradeCommand = new Command90().name("upgrade").description("Upgrade vm0 CLI to the latest version").action(
22698
23335
  withErrorHandler(async () => {
22699
23336
  console.log("Checking for updates...");
22700
23337
  const latestVersion = await getLatestVersion();
22701
23338
  if (latestVersion === null) {
22702
23339
  throw new Error("Could not check for updates. Please try again later.");
22703
23340
  }
22704
- if (latestVersion === "9.74.3") {
22705
- console.log(chalk82.green(`\u2713 Already up to date (${"9.74.3"})`));
23341
+ if (latestVersion === "9.75.0") {
23342
+ console.log(chalk79.green(`\u2713 Already up to date (${"9.75.0"})`));
22706
23343
  return;
22707
23344
  }
22708
23345
  console.log(
22709
- chalk82.yellow(
22710
- `Current version: ${"9.74.3"} -> Latest version: ${latestVersion}`
23346
+ chalk79.yellow(
23347
+ `Current version: ${"9.75.0"} -> Latest version: ${latestVersion}`
22711
23348
  )
22712
23349
  );
22713
23350
  console.log();
@@ -22715,26 +23352,26 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22715
23352
  if (!isAutoUpgradeSupported(packageManager)) {
22716
23353
  if (packageManager === "unknown") {
22717
23354
  console.log(
22718
- chalk82.yellow(
23355
+ chalk79.yellow(
22719
23356
  "Could not detect your package manager for auto-upgrade."
22720
23357
  )
22721
23358
  );
22722
23359
  } else {
22723
23360
  console.log(
22724
- chalk82.yellow(
23361
+ chalk79.yellow(
22725
23362
  `Auto-upgrade is not supported for ${packageManager}.`
22726
23363
  )
22727
23364
  );
22728
23365
  }
22729
- console.log(chalk82.yellow("Please upgrade manually:"));
22730
- console.log(chalk82.cyan(` ${getManualUpgradeCommand(packageManager)}`));
23366
+ console.log(chalk79.yellow("Please upgrade manually:"));
23367
+ console.log(chalk79.cyan(` ${getManualUpgradeCommand(packageManager)}`));
22731
23368
  return;
22732
23369
  }
22733
23370
  console.log(`Upgrading via ${packageManager}...`);
22734
23371
  const success = await performUpgrade(packageManager);
22735
23372
  if (success) {
22736
23373
  console.log(
22737
- chalk82.green(`\u2713 Upgraded from ${"9.74.3"} to ${latestVersion}`)
23374
+ chalk79.green(`\u2713 Upgraded from ${"9.75.0"} to ${latestVersion}`)
22738
23375
  );
22739
23376
  return;
22740
23377
  }
@@ -22747,8 +23384,8 @@ var upgradeCommand = new Command92().name("upgrade").description("Upgrade vm0 CL
22747
23384
  );
22748
23385
 
22749
23386
  // src/commands/whoami.ts
22750
- import { Command as Command93 } from "commander";
22751
- import chalk83 from "chalk";
23387
+ import { Command as Command91 } from "commander";
23388
+ import chalk80 from "chalk";
22752
23389
  function isInsideSandbox() {
22753
23390
  return !!process.env.VM0_RUN_ID;
22754
23391
  }
@@ -22763,7 +23400,7 @@ async function showSandboxInfo() {
22763
23400
  const apiUrl = process.env.VM0_API_URL;
22764
23401
  const hasAgentInfo = agentName || agentVersion || agentComposeId || agentOrgSlug || cliAgentType;
22765
23402
  if (hasAgentInfo) {
22766
- console.log(chalk83.bold("Agent:"));
23403
+ console.log(chalk80.bold("Agent:"));
22767
23404
  if (agentName) console.log(` Name: ${agentName}`);
22768
23405
  if (agentVersion) console.log(` Version: ${agentVersion}`);
22769
23406
  if (agentComposeId) console.log(` Compose ID: ${agentComposeId}`);
@@ -22771,7 +23408,7 @@ async function showSandboxInfo() {
22771
23408
  if (cliAgentType) console.log(` Framework: ${cliAgentType}`);
22772
23409
  console.log();
22773
23410
  }
22774
- console.log(chalk83.bold("Run:"));
23411
+ console.log(chalk80.bold("Run:"));
22775
23412
  if (runId) console.log(` ID: ${runId}`);
22776
23413
  if (activeOrg) console.log(` Org: ${activeOrg}`);
22777
23414
  if (apiUrl) console.log(` API: ${apiUrl}`);
@@ -22780,23 +23417,23 @@ async function showLocalInfo() {
22780
23417
  const token = await getToken();
22781
23418
  const apiUrl = await getApiUrl();
22782
23419
  const activeOrg = await getActiveOrg();
22783
- console.log(chalk83.bold("Auth:"));
23420
+ console.log(chalk80.bold("Auth:"));
22784
23421
  if (token) {
22785
23422
  const tokenSource = process.env.VM0_TOKEN ? "VM0_TOKEN env var" : "config file";
22786
23423
  console.log(
22787
- ` Status: ${chalk83.green("Authenticated")} (via ${tokenSource})`
23424
+ ` Status: ${chalk80.green("Authenticated")} (via ${tokenSource})`
22788
23425
  );
22789
23426
  } else {
22790
- console.log(` Status: ${chalk83.dim("Not authenticated")}`);
23427
+ console.log(` Status: ${chalk80.dim("Not authenticated")}`);
22791
23428
  }
22792
23429
  console.log(` API: ${apiUrl}`);
22793
23430
  console.log();
22794
23431
  if (activeOrg) {
22795
- console.log(chalk83.bold("Org:"));
23432
+ console.log(chalk80.bold("Org:"));
22796
23433
  console.log(` Active: ${activeOrg}`);
22797
23434
  }
22798
23435
  }
22799
- var whoamiCommand = new Command93().name("whoami").description("Show current identity and environment information").action(
23436
+ var whoamiCommand = new Command91().name("whoami").description("Show current identity and environment information").action(
22800
23437
  withErrorHandler(async () => {
22801
23438
  if (isInsideSandbox()) {
22802
23439
  await showSandboxInfo();
@@ -22806,9 +23443,15 @@ var whoamiCommand = new Command93().name("whoami").description("Show current ide
22806
23443
  })
22807
23444
  );
22808
23445
 
23446
+ // src/commands/zero/index.ts
23447
+ import { Command as Command92 } from "commander";
23448
+ var zeroCommand = new Command92("zero").description(
23449
+ "Zero platform commands"
23450
+ );
23451
+
22809
23452
  // src/index.ts
22810
- var program = new Command94();
22811
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.74.3");
23453
+ var program = new Command93();
23454
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.75.0");
22812
23455
  program.addCommand(authCommand);
22813
23456
  program.addCommand(infoCommand);
22814
23457
  program.addCommand(composeCommand);
@@ -22822,14 +23465,13 @@ program.addCommand(orgCommand);
22822
23465
  program.addCommand(agentCommand);
22823
23466
  program.addCommand(initCommand4);
22824
23467
  program.addCommand(scheduleCommand);
22825
- program.addCommand(usageCommand);
22826
23468
  program.addCommand(secretCommand);
22827
23469
  program.addCommand(variableCommand);
22828
23470
  program.addCommand(connectorCommand);
22829
- program.addCommand(setupClaudeCommand);
22830
23471
  program.addCommand(preferenceCommand);
22831
23472
  program.addCommand(upgradeCommand);
22832
23473
  program.addCommand(whoamiCommand);
23474
+ program.addCommand(zeroCommand);
22833
23475
  if (process.argv[1]?.endsWith("index.js") || process.argv[1]?.endsWith("index.ts") || process.argv[1]?.endsWith("vm0")) {
22834
23476
  process.stdout.on("error", (err) => {
22835
23477
  if (err.code === "EPIPE") process.exit(0);