OXYGENHUB
# f162b1532f9f oxygenhub-vscode / package.json
18.5 KiB · JSON · last changed test:ci builds the test bundles first (pretest:ci): a fresh checkout has no out/, so the reports had nowhere to go (refs #6) 8 days ago source blame history raw
1
{
2
  "name": "oxygenhub",
3
  "displayName": "OxygenHub VCS",
4
  "description": "Proposals, reviews, issues and checks from an OxygenHub, in the editor. Builds on the Oxygen extension.",
5
  "version": "0.12.0",
6
  "publisher": "oxygenhub",
7
  "author": {
8
    "name": "OxygenHub.io",
9
    "url": "https://oxygenhub.io"
10
  },
11
  "homepage": "https://oxygenhub.io/andymccall/oxygenhub-vscode",
12
  "repository": {
13
    "type": "oxygen",
14
    "url": "https://oxygenhub.io/andymccall/oxygenhub-vscode"
15
  },
16
  "bugs": {
17
    "url": "https://oxygenhub.io/andymccall/oxygenhub-vscode/issues"
18
  },
19
  "license": "MIT OR Apache-2.0",
20
  "icon": "assets/images/oxygenhub.png",
21
  "engines": {
22
    "vscode": "^1.137.0"
23
  },
24
  "categories": [
25
    "SCM Providers",
26
    "Other"
27
  ],
28
  "keywords": [
29
    "oxygen",
30
    "oxygenhub",
31
    "review",
32
    "proposals",
33
    "issues"
34
  ],
35
  "extensionDependencies": [
36
    "oxygenhub.oxygen-vscode"
37
  ],
38
  "activationEvents": [
39
    "workspaceContains:.oxy/format",
40
    "onAuthenticationRequest:oxygenhub",
41
    "onStartupFinished"
42
  ],
43
  "main": "./dist/extension.js",
44
  "contributes": {
45
    "authentication": [
46
      {
47
        "id": "oxygenhub",
48
        "label": "OxygenHub"
49
      }
50
    ],
51
    "configuration": {
52
      "title": "OxygenHub",
53
      "properties": {
54
        "oxygenhub.hubs": {
55
          "type": "array",
56
          "items": {
57
            "type": "string"
58
          },
59
          "default": [],
60
          "description": "Base URLs of hubs you use (learnt from sign in too)."
61
        },
62
        "oxygenhub.caFiles": {
63
          "type": "object",
64
          "additionalProperties": {
65
            "type": "string"
66
          },
67
          "default": {},
68
          "description": "CA certificate files for hubs with self-signed certificates, by base URL, e.g. {\"https://earth.example:7343\": \"~/.config/oxy/earth-ca.pem\"}. Checkouts whose remote names a CA (remote.NAME.ca) need no entry."
69
        },
70
        "oxygenhub.proposalBookmarkPrefix": {
71
          "type": "string",
72
          "default": "proposal/",
73
          "description": "Prefix of the local bookmark created when checking out a proposal."
74
        },
75
        "oxygenhub.autoRefresh": {
76
          "type": "number",
77
          "default": 60,
78
          "description": "Seconds between view refreshes; 0 disables."
79
        },
80
        "oxygenhub.announceNotifications": {
81
          "type": "boolean",
82
          "default": true,
83
          "description": "Show a message when new notifications arrive (checked on the autoRefresh interval)."
84
        },
85
        "oxygenhub.flowPollSeconds": {
86
          "type": "number",
87
          "default": 5,
88
          "minimum": 2,
89
          "description": "How often the Flow view and status bar look again while a run is queued or running (seconds); once a minute otherwise."
90
        },
91
        "oxygenhub.flowNotifications": {
92
          "type": "boolean",
93
          "default": true,
94
          "description": "Say when an OxygenFlow run you can see finishes, with a way to its failed job's log."
95
        }
96
      }
97
    },
98
    "viewsContainers": {
99
      "activitybar": [
100
        {
101
          "id": "oxygenhub",
102
          "title": "OxygenHub",
103
          "icon": "assets/images/oxygenhub-activity.svg"
104
        }
105
      ]
106
    },
107
    "views": {
108
      "oxygenhub": [
109
        {
110
          "id": "oxygenhub.proposals",
111
          "name": "Proposals"
112
        },
113
        {
114
          "id": "oxygenhub.issues",
115
          "name": "Issues"
116
        },
117
        {
118
          "id": "oxygenhub.releases",
119
          "name": "Releases"
120
        },
121
        {
122
          "id": "oxygenhub.flow",
123
          "name": "Flow"
124
        },
125
        {
126
          "id": "oxygenhub.diffusion",
127
          "name": "Diffusion"
128
        }
129
      ]
130
    },
131
    "viewsWelcome": [
132
      {
133
        "view": "oxygenhub.proposals",
134
        "contents": "Sign in to an OxygenHub to see proposals.\n[Sign in](command:oxygenhub.signIn)"
135
      },
136
      {
137
        "view": "oxygenhub.flow",
138
        "contents": "OxygenFlow runs of your hub repositories appear here: a push that moves a bookmark starts one.\n[Run Pipeline](command:oxygenhub.runPipeline)"
139
      }
140
    ],
141
    "commands": [
142
      {
143
        "command": "oxygenhub.signIn",
144
        "title": "Sign in",
145
        "category": "OxygenHub"
146
      },
147
      {
148
        "command": "oxygenhub.signOut",
149
        "title": "Sign out",
150
        "category": "OxygenHub"
151
      },
152
      {
153
        "command": "oxygenhub.refresh",
154
        "title": "Refresh",
155
        "category": "OxygenHub",
156
        "icon": "$(refresh)"
157
      },
158
      {
159
        "command": "oxygenhub.inbox",
160
        "title": "Open Inbox",
161
        "category": "OxygenHub",
162
        "icon": "$(bell)"
163
      },
164
      {
165
        "command": "oxygenhub.openProposal",
166
        "title": "Open Proposal",
167
        "category": "OxygenHub"
168
      },
169
      {
170
        "command": "oxygenhub.openOnHub",
171
        "title": "Open on Hub",
172
        "category": "OxygenHub",
173
        "icon": "$(link-external)"
174
      },
175
      {
176
        "command": "oxygenhub.openProposalFile",
177
        "title": "Open Proposal File Diff",
178
        "category": "OxygenHub"
179
      },
180
      {
181
        "command": "oxygenhub.openProposalChanges",
182
        "title": "View Changes",
183
        "category": "OxygenHub",
184
        "icon": "$(diff-multiple)"
185
      },
186
      {
187
        "command": "oxygenhub.checkoutProposal",
188
        "title": "Check Out Proposal",
189
        "category": "OxygenHub",
190
        "icon": "$(git-branch)"
191
      },
192
      {
193
        "command": "oxygenhub.review",
194
        "title": "Review\u2026",
195
        "category": "OxygenHub",
196
        "icon": "$(comment-discussion)"
197
      },
198
      {
199
        "command": "oxygenhub.sealApproval",
200
        "title": "Seal My Approval (oxy seal --proposal)",
201
        "category": "OxygenHub"
202
      },
203
      {
204
        "command": "oxygenhub.land",
205
        "title": "Land Proposal",
206
        "category": "OxygenHub"
207
      },
208
      {
209
        "command": "oxygenhub.closeProposal",
210
        "title": "Close Proposal",
211
        "category": "OxygenHub"
212
      },
213
      {
214
        "command": "oxygenhub.createProposal",
215
        "title": "Propose Current Bookmark\u2026",
216
        "category": "OxygenHub"
217
      },
218
      {
219
        "command": "oxygenhub.newIssue",
220
        "title": "New Issue\u2026",
221
        "category": "OxygenHub",
222
        "icon": "$(add)"
223
      },
224
      {
225
        "command": "oxygenhub.draftRelease",
226
        "title": "Draft Release\u2026",
227
        "category": "OxygenHub",
228
        "icon": "$(tag)"
229
      },
230
      {
231
        "command": "oxygenhub.issueFromSelection",
232
        "title": "New Issue from Selection\u2026",
233
        "category": "OxygenHub"
234
      },
235
      {
236
        "command": "oxygenhub.openIssue",
237
        "title": "Open Issue",
238
        "category": "OxygenHub"
239
      },
240
      {
241
        "command": "oxygenhub.commentIssue",
242
        "title": "Comment on Issue\u2026",
243
        "category": "OxygenHub"
244
      },
245
      {
246
        "command": "oxygenhub.closeIssue",
247
        "title": "Close Issue",
248
        "category": "OxygenHub"
249
      },
250
      {
251
        "command": "oxygenhub.reopenIssue",
252
        "title": "Reopen Issue",
253
        "category": "OxygenHub"
254
      },
255
      {
256
        "command": "oxygenhub.assignMe",
257
        "title": "Assign to Me",
258
        "category": "OxygenHub"
259
      },
260
      {
261
        "command": "oxygenhub.newThread",
262
        "title": "Start Review Thread",
263
        "category": "OxygenHub"
264
      },
265
      {
266
        "command": "oxygenhub.reply",
267
        "title": "Reply",
268
        "category": "OxygenHub"
269
      },
270
      {
271
        "command": "oxygenhub.resolveThread",
272
        "title": "Resolve",
273
        "category": "OxygenHub"
274
      },
275
      {
276
        "command": "oxygenhub.flowRefresh",
277
        "title": "Refresh Flow",
278
        "category": "OxygenHub",
279
        "icon": "$(refresh)"
280
      },
281
      {
282
        "command": "oxygenhub.runPipeline",
283
        "title": "Run Pipeline\u2026",
284
        "category": "OxygenHub",
285
        "icon": "$(play)"
286
      },
287
      {
288
        "command": "oxygenhub.rerunFlow",
289
        "title": "Re-run",
290
        "category": "OxygenHub",
291
        "icon": "$(debug-rerun)"
292
      },
293
      {
294
        "command": "oxygenhub.flowLog",
295
        "title": "Show Job Log",
296
        "category": "OxygenHub",
297
        "icon": "$(output)"
298
      },
299
      {
300
        "command": "oxygenhub.openFlowRun",
301
        "title": "Open Run on OxygenHub",
302
        "category": "OxygenHub",
303
        "icon": "$(link-external)"
304
      },
305
      {
306
        "command": "oxygenhub.flowRecent",
307
        "title": "Recent Flow Runs\u2026",
308
        "category": "OxygenHub"
309
      },
310
      {
311
        "command": "oxygenhub.openDiffusionPin",
312
        "title": "Open Bump or Repository",
313
        "category": "OxygenHub"
314
      },
315
      {
316
        "command": "oxygenhub.openDiffusionOnHub",
317
        "title": "Open on OxygenHub",
318
        "category": "OxygenHub",
319
        "icon": "$(link-external)"
320
      }
321
    ],
322
    "menus": {
323
      "view/title": [
324
        {
325
          "command": "oxygenhub.refresh",
326
          "when": "view == oxygenhub.proposals || view == oxygenhub.issues || view == oxygenhub.releases || view == oxygenhub.diffusion",
327
          "group": "navigation"
328
        },
329
        {
330
          "command": "oxygenhub.createProposal",
331
          "when": "view == oxygenhub.proposals",
332
          "group": "navigation"
333
        },
334
        {
335
          "command": "oxygenhub.newIssue",
336
          "when": "view == oxygenhub.issues",
337
          "group": "navigation"
338
        },
339
        {
340
          "command": "oxygenhub.draftRelease",
341
          "when": "view == oxygenhub.releases",
342
          "group": "navigation"
343
        },
344
        {
345
          "command": "oxygenhub.runPipeline",
346
          "when": "view == oxygenhub.flow",
347
          "group": "navigation@1"
348
        },
349
        {
350
          "command": "oxygenhub.flowRefresh",
351
          "when": "view == oxygenhub.flow",
352
          "group": "navigation@2"
353
        }
354
      ],
355
      "view/item/context": [
356
        {
357
          "command": "oxygenhub.openProposalChanges",
358
          "when": "view == oxygenhub.proposals && viewItem == proposal",
359
          "group": "inline"
360
        },
361
        {
362
          "command": "oxygenhub.openOnHub",
363
          "when": "view == oxygenhub.proposals && viewItem == proposal",
364
          "group": "inline"
365
        },
366
        {
367
          "command": "oxygenhub.checkoutProposal",
368
          "when": "view == oxygenhub.proposals && viewItem == proposal",
369
          "group": "inline"
370
        },
371
        {
372
          "command": "oxygenhub.review",
373
          "when": "view == oxygenhub.proposals && viewItem == proposal",
374
          "group": "inline"
375
        },
376
        {
377
          "command": "oxygenhub.sealApproval",
378
          "when": "view == oxygenhub.proposals && viewItem == proposal",
379
          "group": "actions@1"
380
        },
381
        {
382
          "command": "oxygenhub.land",
383
          "when": "view == oxygenhub.proposals && viewItem == proposal",
384
          "group": "actions@2"
385
        },
386
        {
387
          "command": "oxygenhub.closeProposal",
388
          "when": "view == oxygenhub.proposals && viewItem == proposal",
389
          "group": "actions@3"
390
        },
391
        {
392
          "command": "oxygenhub.openOnHub",
393
          "when": "view == oxygenhub.issues && viewItem == issue",
394
          "group": "inline"
395
        },
396
        {
397
          "command": "oxygenhub.commentIssue",
398
          "when": "view == oxygenhub.issues && viewItem == issue",
399
          "group": "actions@1"
400
        },
401
        {
402
          "command": "oxygenhub.assignMe",
403
          "when": "view == oxygenhub.issues && viewItem == issue",
404
          "group": "actions@2"
405
        },
406
        {
407
          "command": "oxygenhub.closeIssue",
408
          "when": "view == oxygenhub.issues && viewItem == issue",
409
          "group": "actions@3"
410
        },
411
        {
412
          "command": "oxygenhub.reopenIssue",
413
          "when": "view == oxygenhub.issues && viewItem == issue",
414
          "group": "actions@3"
415
        },
416
        {
417
          "command": "oxygenhub.draftRelease",
418
          "when": "view == oxygenhub.releases && viewItem == releaseRepo",
419
          "group": "inline"
420
        },
421
        {
422
          "command": "oxygenhub.openDiffusionOnHub",
423
          "when": "view == oxygenhub.diffusion && viewItem =~ /^diffusion/",
424
          "group": "inline"
425
        },
426
        {
427
          "command": "oxygenhub.runPipeline",
428
          "when": "view == oxygenhub.flow && viewItem == flowRepo",
429
          "group": "inline"
430
        },
431
        {
432
          "command": "oxygenhub.rerunFlow",
433
          "when": "view == oxygenhub.flow && viewItem == flowRun",
434
          "group": "inline@1"
435
        },
436
        {
437
          "command": "oxygenhub.openFlowRun",
438
          "when": "view == oxygenhub.flow && viewItem =~ /^flowRun/",
439
          "group": "inline@2"
440
        },
441
        {
442
          "command": "oxygenhub.flowLog",
443
          "when": "view == oxygenhub.flow && viewItem == flowJob",
444
          "group": "inline"
445
        }
446
      ],
447
      "comments/commentThread/context": [
448
        {
449
          "command": "oxygenhub.reply",
450
          "when": "commentController == oxygenhub",
451
          "group": "inline"
452
        },
453
        {
454
          "command": "oxygenhub.newThread",
455
          "when": "commentController == oxygenhub && commentThreadIsEmpty",
456
          "group": "inline"
457
        }
458
      ],
459
      "comments/commentThread/title": [
460
        {
461
          "command": "oxygenhub.resolveThread",
462
          "when": "commentController == oxygenhub",
463
          "group": "navigation"
464
        }
465
      ],
466
      "commandPalette": [
467
        {
468
          "command": "oxygenhub.openDiffusionPin",
469
          "when": "false"
470
        },
471
        {
472
          "command": "oxygenhub.openDiffusionOnHub",
473
          "when": "false"
474
        },
475
        {
476
          "command": "oxygenhub.openProposalFile",
477
          "when": "false"
478
        },
479
        {
480
          "command": "oxygenhub.rerunFlow",
481
          "when": "false"
482
        },
483
        {
484
          "command": "oxygenhub.flowLog",
485
          "when": "false"
486
        },
487
        {
488
          "command": "oxygenhub.openFlowRun",
489
          "when": "false"
490
        }
491
      ],
492
      "editor/context": [
493
        {
494
          "command": "oxygenhub.issueFromSelection",
495
          "when": "resourceScheme == file",
496
          "group": "9_oxygenhub@1"
497
        }
498
      ]
499
    },
500
    "colors": [
501
      {
502
        "id": "oxygenhub.flowRunning",
503
        "description": "OxygenFlow: the icon of a run or job that is running.",
504
        "defaults": {
505
          "dark": "#35c7ff",
506
          "light": "#0a74b8",
507
          "highContrast": "#35c7ff",
508
          "highContrastLight": "#0a5a8f"
509
        }
510
      }
511
    ],
512
    "walkthroughs": [
513
      {
514
        "id": "oxygenhub.gettingStarted",
515
        "title": "Get started with OxygenHub",
516
        "description": "Sign in, propose and review, and watch OxygenFlow from the editor.",
517
        "steps": [
518
          {
519
            "id": "oxygenhub.signin",
520
            "title": "Sign in to your hub",
521
            "description": "A hub URL and a personal access token (Settings \u2192 Tokens on the hub). A self-signed hub works too: the extension uses the CA your checkout's remote names.\n[Sign In](command:oxygenhub.signIn)",
522
            "media": {
523
              "markdown": "walkthrough/signin.md"
524
            },
525
            "completionEvents": [
526
              "onCommand:oxygenhub.signIn"
527
            ]
528
          },
529
          {
530
            "id": "oxygenhub.proposals",
531
            "title": "Proposals and issues",
532
            "description": "The OxygenHub sidebar lists your repositories' proposals and issues. Open a proposal to see its changes, review it, seal your approval with your key, and land it.\n[Open OxygenHub](command:workbench.view.extension.oxygenhub)",
533
            "media": {
534
              "markdown": "walkthrough/proposals.md"
535
            },
536
            "completionEvents": [
537
              "onView:oxygenhub.proposals"
538
            ]
539
          },
540
          {
541
            "id": "oxygenhub.propose",
542
            "title": "Propose your bookmark",
543
            "description": "From a bookmark with work on it, propose it for the default bookmark. Issues its changes close are linked, and closed when it lands.\n[Create Proposal](command:oxygenhub.createProposal)",
544
            "media": {
545
              "markdown": "walkthrough/propose.md"
546
            },
547
            "completionEvents": [
548
              "onCommand:oxygenhub.createProposal"
549
            ]
550
          },
551
          {
552
            "id": "oxygenhub.flow",
553
            "title": "Watch Flow",
554
            "description": "Every push runs the repository's OxygenFlow pipeline in microVMs. The Flow view shows runs and jobs as they go; click a job for its log, live. Run Pipeline starts one without a push.\n[Run Pipeline](command:oxygenhub.runPipeline)",
555
            "media": {
556
              "markdown": "walkthrough/flow.md"
557
            },
558
            "completionEvents": [
559
              "onCommand:oxygenhub.runPipeline"
560
            ]
561
          },
562
          {
563
            "id": "oxygenhub.inbox",
564
            "title": "Your inbox",
565
            "description": "Mentions, reviews asked of you and activity on what you watch.\n[Open Inbox](command:oxygenhub.inbox)",
566
            "media": {
567
              "markdown": "walkthrough/inbox.md"
568
            },
569
            "completionEvents": [
570
              "onCommand:oxygenhub.inbox"
571
            ]
572
          }
573
        ]
574
      }
575
    ]
576
  },
577
  "scripts": {
578
    "types": "cp ../oxygenhub/crates/hub-api/ts/index.d.ts src/hubapi.d.ts",
579
    "build": "esbuild src/extension.ts --bundle --platform=node --format=cjs --external:vscode --outfile=dist/extension.js --sourcemap",
580
    "watch": "npm run build -- --watch",
581
    "typecheck": "tsc --noEmit -p .",
582
    "pretest": "esbuild src/hub.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/hub.mjs && esbuild src/provider.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/provider.mjs && esbuild src/refs.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/refs.mjs && esbuild src/flowview.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/flowview.mjs && esbuild src/diffusionview.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/diffusionview.mjs",
583
    "test": "node --enable-source-maps --test \"test/**/*.test.mjs\"",
584
    "pretest:ci": "npm run pretest",
585
    "test:ci": "node --enable-source-maps --test --experimental-test-coverage --test-coverage-exclude=\"test/**\" --test-reporter=spec --test-reporter-destination=stdout --test-reporter=junit --test-reporter-destination=out/junit.xml --test-reporter=lcov --test-reporter-destination=out/lcov.info \"test/**/*.test.mjs\"",
586
    "check": "npm run typecheck && npm run build && npm test",
587
    "package": "vsce package --no-dependencies"
588
  },
589
  "devDependencies": {
590
    "@types/node": "^24.0.0",
591
    "@types/vscode": "^1.137.0",
592
    "@vscode/vsce": "^4.0.0",
593
    "esbuild": "^0.28.0",
594
    "typescript": "^5.9.0"
595
  }
596
}