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