OXYGENHUB
# c530a43af73b oxygen-vscode / package.json
35.9 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 #9) 8 days ago source blame history raw
1
{
2
  "name": "oxygen-vscode",
3
  "displayName": "Oxygen",
4
  "description": "Oxygen version control: source control view, diffs, decorations, bookmarks and history for oxy repositories",
5
  "version": "0.15.0",
6
  "publisher": "oxygen",
7
  "license": "MIT OR Apache-2.0",
8
  "icon": "assets/images/oxygen.png",
9
  "engines": {
10
    "vscode": "^1.137.0"
11
  },
12
  "categories": [
13
    "SCM Providers"
14
  ],
15
  "keywords": [
16
    "oxygen",
17
    "oxy",
18
    "scm",
19
    "version control"
20
  ],
21
  "activationEvents": [
22
    "workspaceContains:.oxy/format",
23
    "workspaceContains:.oxy",
24
    "onStartupFinished",
25
    "onUri"
26
  ],
27
  "main": "./dist/extension.js",
28
  "contributes": {
29
    "commands": [
30
      {
31
        "command": "oxygen.refresh",
32
        "title": "Refresh",
33
        "category": "Oxygen",
34
        "icon": "$(refresh)"
35
      },
36
      {
37
        "command": "oxygen.commit",
38
        "title": "Commit",
39
        "category": "Oxygen",
40
        "icon": "$(check)"
41
      },
42
      {
43
        "command": "oxygen.openFile",
44
        "title": "Open File",
45
        "category": "Oxygen",
46
        "icon": "$(go-to-file)"
47
      },
48
      {
49
        "command": "oxygen.openChanges",
50
        "title": "Open Changes",
51
        "category": "Oxygen"
52
      },
53
      {
54
        "command": "oxygen.openBaseVersion",
55
        "title": "Open Base Version",
56
        "category": "Oxygen"
57
      },
58
      {
59
        "command": "oxygen.showOutput",
60
        "title": "Show Output",
61
        "category": "Oxygen"
62
      },
63
      {
64
        "command": "oxygen.showLog",
65
        "title": "Show Log",
66
        "category": "Oxygen"
67
      },
68
      {
69
        "command": "oxygen.init",
70
        "title": "Initialize Repository",
71
        "category": "Oxygen"
72
      },
73
      {
74
        "command": "oxygen.discard",
75
        "title": "Discard Changes",
76
        "category": "Oxygen",
77
        "icon": "$(discard)"
78
      },
79
      {
80
        "command": "oxygen.commitSelected",
81
        "title": "Commit Selected Paths",
82
        "category": "Oxygen"
83
      },
84
      {
85
        "command": "oxygen.commitHunks",
86
        "title": "Commit Hunks\u2026",
87
        "category": "Oxygen"
88
      },
89
      {
90
        "command": "oxygen.amend",
91
        "title": "Amend",
92
        "category": "Oxygen"
93
      },
94
      {
95
        "command": "oxygen.undo",
96
        "title": "Undo Last Operation",
97
        "category": "Oxygen",
98
        "icon": "$(discard)"
99
      },
100
      {
101
        "command": "oxygen.undoTo",
102
        "title": "Undo to Here",
103
        "category": "Oxygen",
104
        "icon": "$(discard)"
105
      },
106
      {
107
        "command": "oxygen.refreshOperations",
108
        "title": "Refresh Operations",
109
        "category": "Oxygen",
110
        "icon": "$(refresh)"
111
      },
112
      {
113
        "command": "oxygen.switchBookmark",
114
        "title": "Switch Bookmark\u2026",
115
        "category": "Oxygen",
116
        "icon": "$(bookmark)"
117
      },
118
      {
119
        "command": "oxygen.createBookmark",
120
        "title": "Create Bookmark\u2026",
121
        "category": "Oxygen"
122
      },
123
      {
124
        "command": "oxygen.mergeBookmark",
125
        "title": "Merge Bookmark\u2026",
126
        "category": "Oxygen"
127
      },
128
      {
129
        "command": "oxygen.deleteBookmark",
130
        "title": "Delete Bookmark\u2026",
131
        "category": "Oxygen"
132
      },
133
      {
134
        "command": "oxygen.fetch",
135
        "title": "Fetch",
136
        "category": "Oxygen"
137
      },
138
      {
139
        "command": "oxygen.pull",
140
        "title": "Pull",
141
        "category": "Oxygen"
142
      },
143
      {
144
        "command": "oxygen.push",
145
        "title": "Push",
146
        "category": "Oxygen"
147
      },
148
      {
149
        "command": "oxygen.pushBookmark",
150
        "title": "Push Bookmark\u2026",
151
        "category": "Oxygen"
152
      },
153
      {
154
        "command": "oxygen.sync",
155
        "title": "Sync",
156
        "category": "Oxygen",
157
        "icon": "$(sync)"
158
      },
159
      {
160
        "command": "oxygen.showHistory",
161
        "title": "Show History",
162
        "category": "Oxygen",
163
        "icon": "$(git-commit)"
164
      },
165
      {
166
        "command": "oxygen.fileHistory",
167
        "title": "File History\u2026",
168
        "category": "Oxygen",
169
        "icon": "$(history)"
170
      },
171
      {
172
        "command": "oxygen.toggleBlame",
173
        "title": "Toggle Inline Blame",
174
        "category": "Oxygen"
175
      },
176
      {
177
        "command": "oxygen.showChange",
178
        "title": "Show Change",
179
        "category": "Oxygen"
180
      },
181
      {
182
        "command": "oxygen.acceptSides",
183
        "title": "Accept Conflict Sides",
184
        "category": "Oxygen"
185
      },
186
      {
187
        "command": "oxygen.keepCandidate",
188
        "title": "Keep This Candidate",
189
        "category": "Oxygen",
190
        "icon": "$(check)"
191
      },
192
      {
193
        "command": "oxygen.markResolved",
194
        "title": "Mark Resolved",
195
        "category": "Oxygen",
196
        "icon": "$(check-all)"
197
      },
198
      {
199
        "command": "oxygen.openConflict",
200
        "title": "Open Conflict",
201
        "category": "Oxygen"
202
      },
203
      {
204
        "command": "oxygen.openSubrepo",
205
        "title": "Open Subrepo",
206
        "category": "Oxygen"
207
      },
208
      {
209
        "command": "oxygen.updateSubrepo",
210
        "title": "Update to Pin",
211
        "category": "Oxygen",
212
        "icon": "$(cloud-download)"
213
      },
214
      {
215
        "command": "oxygen.updateSubrepos",
216
        "title": "Update Subrepos",
217
        "category": "Oxygen"
218
      },
219
      {
220
        "command": "oxygen.bisectStart",
221
        "title": "Bisect: Start",
222
        "category": "Oxygen"
223
      },
224
      {
225
        "command": "oxygen.bisectGood",
226
        "title": "Bisect: Good",
227
        "category": "Oxygen"
228
      },
229
      {
230
        "command": "oxygen.bisectBad",
231
        "title": "Bisect: Bad",
232
        "category": "Oxygen"
233
      },
234
      {
235
        "command": "oxygen.bisectSkip",
236
        "title": "Bisect: Skip",
237
        "category": "Oxygen"
238
      },
239
      {
240
        "command": "oxygen.bisectRun",
241
        "title": "Bisect: Run\u2026",
242
        "category": "Oxygen"
243
      },
244
      {
245
        "command": "oxygen.bisectReset",
246
        "title": "Bisect: Reset",
247
        "category": "Oxygen"
248
      },
249
      {
250
        "command": "oxygen.refreshBisect",
251
        "title": "Refresh",
252
        "category": "Oxygen",
253
        "icon": "$(refresh)"
254
      },
255
      {
256
        "command": "oxygen.refreshTrust",
257
        "title": "Refresh",
258
        "category": "Oxygen",
259
        "icon": "$(refresh)"
260
      },
261
      {
262
        "command": "oxygen.verify",
263
        "title": "Verify Signatures",
264
        "category": "Oxygen"
265
      },
266
      {
267
        "command": "oxygen.tags",
268
        "title": "Tags\u2026",
269
        "category": "Oxygen"
270
      },
271
      {
272
        "command": "oxygen.createTag",
273
        "title": "Create Tag\u2026",
274
        "category": "Oxygen"
275
      },
276
      {
277
        "command": "oxygen.addWorkspace",
278
        "title": "Add Workspace\u2026",
279
        "category": "Oxygen"
280
      },
281
      {
282
        "command": "oxygen.clone",
283
        "title": "Clone Repository\u2026",
284
        "category": "Oxygen"
285
      },
286
      {
287
        "command": "oxygen.openOnRemote",
288
        "title": "Open on Remote",
289
        "category": "Oxygen",
290
        "icon": "$(link-external)"
291
      },
292
      {
293
        "command": "oxygen.openChangeOnRemote",
294
        "title": "Open Change on Remote",
295
        "category": "Oxygen"
296
      },
297
      {
298
        "command": "oxygen.history.split",
299
        "title": "Split\u2026",
300
        "category": "Oxygen",
301
        "icon": "$(split-horizontal)"
302
      },
303
      {
304
        "command": "oxygen.history.squash",
305
        "title": "Squash into a Dependency\u2026",
306
        "category": "Oxygen",
307
        "icon": "$(fold)"
308
      },
309
      {
310
        "command": "oxygen.history.rebase",
311
        "title": "Rebase onto\u2026",
312
        "category": "Oxygen",
313
        "icon": "$(git-pull-request-go-to-changes)"
314
      },
315
      {
316
        "command": "oxygen.amendMode",
317
        "title": "Amend Mode",
318
        "category": "Oxygen",
319
        "icon": "$(edit)"
320
      },
321
      {
322
        "command": "oxygen.leaveAmendMode",
323
        "title": "Leave Amend Mode",
324
        "category": "Oxygen",
325
        "icon": "$(close)"
326
      },
327
      {
328
        "command": "oxygen.messageHistory",
329
        "title": "Previous Commit Messages\u2026",
330
        "category": "Oxygen",
331
        "icon": "$(history)"
332
      },
333
      {
334
        "command": "oxygen.copyRemoteLink",
335
        "title": "Copy Remote Link",
336
        "category": "Oxygen",
337
        "icon": "$(link)"
338
      },
339
      {
340
        "command": "oxygen.copyPermalink",
341
        "title": "Copy Permalink",
342
        "category": "Oxygen",
343
        "icon": "$(pinned)"
344
      },
345
      {
346
        "command": "oxygen.createIdentity",
347
        "title": "Create Identity\u2026",
348
        "category": "Oxygen"
349
      }
350
    ],
351
    "views": {
352
      "scm": [
353
        {
354
          "id": "oxygen.operations",
355
          "name": "Oxygen Operations",
356
          "when": "oxygen.hasRepository",
357
          "icon": "assets/images/oxygen.svg",
358
          "visibility": "collapsed"
359
        },
360
        {
361
          "id": "oxygen.bisect",
362
          "name": "Oxygen Bisect",
363
          "when": "oxygen.hasRepository",
364
          "icon": "assets/images/oxygen.svg",
365
          "visibility": "collapsed"
366
        },
367
        {
368
          "id": "oxygen.trust",
369
          "name": "Oxygen Trust",
370
          "when": "oxygen.hasRepository",
371
          "icon": "assets/images/oxygen.svg",
372
          "visibility": "collapsed"
373
        }
374
      ]
375
    },
376
    "viewsWelcome": [
377
      {
378
        "view": "scm",
379
        "contents": "Oxygen is installed but found no oxy repository in the open folders.\n[Initialize Oxygen Repository](command:oxygen.init)\n[Show Oxygen Output](command:oxygen.showOutput)",
380
        "when": "workbenchState != empty && !oxygen.hasRepository"
381
      }
382
    ],
383
    "menus": {
384
      "scm/title": [
385
        {
386
          "command": "oxygen.commit",
387
          "group": "navigation@1",
388
          "when": "scmProvider == oxygen"
389
        },
390
        {
391
          "command": "oxygen.sync",
392
          "group": "navigation@2",
393
          "when": "scmProvider == oxygen"
394
        },
395
        {
396
          "command": "oxygen.refresh",
397
          "group": "navigation@3",
398
          "when": "scmProvider == oxygen"
399
        },
400
        {
401
          "command": "oxygen.pull",
402
          "group": "4_sync@1",
403
          "when": "scmProvider == oxygen"
404
        },
405
        {
406
          "command": "oxygen.push",
407
          "group": "4_sync@2",
408
          "when": "scmProvider == oxygen"
409
        },
410
        {
411
          "command": "oxygen.pushBookmark",
412
          "group": "4_sync@3",
413
          "when": "scmProvider == oxygen"
414
        },
415
        {
416
          "command": "oxygen.fetch",
417
          "group": "4_sync@4",
418
          "when": "scmProvider == oxygen"
419
        },
420
        {
421
          "command": "oxygen.switchBookmark",
422
          "group": "5_bookmarks@1",
423
          "when": "scmProvider == oxygen"
424
        },
425
        {
426
          "command": "oxygen.createBookmark",
427
          "group": "5_bookmarks@2",
428
          "when": "scmProvider == oxygen"
429
        },
430
        {
431
          "command": "oxygen.mergeBookmark",
432
          "group": "5_bookmarks@3",
433
          "when": "scmProvider == oxygen"
434
        },
435
        {
436
          "command": "oxygen.deleteBookmark",
437
          "group": "5_bookmarks@4",
438
          "when": "scmProvider == oxygen"
439
        },
440
        {
441
          "command": "oxygen.tags",
442
          "group": "6_more@1",
443
          "when": "scmProvider == oxygen"
444
        },
445
        {
446
          "command": "oxygen.createTag",
447
          "group": "6_more@2",
448
          "when": "scmProvider == oxygen"
449
        },
450
        {
451
          "command": "oxygen.addWorkspace",
452
          "group": "6_more@3",
453
          "when": "scmProvider == oxygen"
454
        },
455
        {
456
          "command": "oxygen.updateSubrepos",
457
          "group": "6_more@4",
458
          "when": "scmProvider == oxygen"
459
        },
460
        {
461
          "command": "oxygen.verify",
462
          "group": "6_more@5",
463
          "when": "scmProvider == oxygen"
464
        },
465
        {
466
          "command": "oxygen.commitHunks",
467
          "group": "2_commit@1",
468
          "when": "scmProvider == oxygen"
469
        },
470
        {
471
          "command": "oxygen.amend",
472
          "group": "2_commit@2",
473
          "when": "scmProvider == oxygen"
474
        },
475
        {
476
          "command": "oxygen.undo",
477
          "group": "3_undo",
478
          "when": "scmProvider == oxygen"
479
        },
480
        {
481
          "command": "oxygen.markResolved",
482
          "group": "2_commit@3",
483
          "when": "scmProvider == oxygen"
484
        },
485
        {
486
          "command": "oxygen.showHistory",
487
          "group": "1_view@1",
488
          "when": "scmProvider == oxygen"
489
        },
490
        {
491
          "command": "oxygen.showLog",
492
          "group": "1_view@2",
493
          "when": "scmProvider == oxygen"
494
        },
495
        {
496
          "command": "oxygen.showOutput",
497
          "group": "1_view@3",
498
          "when": "scmProvider == oxygen"
499
        },
500
        {
501
          "command": "oxygen.openOnRemote",
502
          "when": "scmProvider == oxygen",
503
          "group": "navigation@9"
504
        },
505
        {
506
          "command": "oxygen.amendMode",
507
          "group": "navigation@4",
508
          "when": "scmProvider == oxygen && !oxygen.amending"
509
        },
510
        {
511
          "command": "oxygen.leaveAmendMode",
512
          "group": "navigation@4",
513
          "when": "scmProvider == oxygen && oxygen.amending"
514
        },
515
        {
516
          "command": "oxygen.messageHistory",
517
          "group": "2_commit@4",
518
          "when": "scmProvider == oxygen"
519
        }
520
      ],
521
      "editor/title": [
522
        {
523
          "command": "oxygen.fileHistory",
524
          "group": "navigation@9",
525
          "when": "oxygen.hasRepository && resourceScheme == file"
526
        }
527
      ],
528
      "editor/context": [
529
        {
530
          "command": "oxygen.toggleBlame",
531
          "group": "oxygen@1",
532
          "when": "oxygen.hasRepository && resourceScheme == file"
533
        },
534
        {
535
          "command": "oxygen.fileHistory",
536
          "group": "oxygen@2",
537
          "when": "oxygen.hasRepository && resourceScheme == file"
538
        },
539
        {
540
          "command": "oxygen.openOnRemote",
541
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
542
          "group": "9_oxygen@1"
543
        },
544
        {
545
          "command": "oxygen.copyRemoteLink",
546
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
547
          "group": "9_oxygen@2"
548
        },
549
        {
550
          "command": "oxygen.copyPermalink",
551
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
552
          "group": "9_oxygen@3"
553
        }
554
      ],
555
      "explorer/context": [
556
        {
557
          "command": "oxygen.fileHistory",
558
          "group": "7_modification@9",
559
          "when": "oxygen.hasRepository && !explorerResourceIsFolder"
560
        }
561
      ],
562
      "scm/resourceState/context": [
563
        {
564
          "command": "oxygen.openFile",
565
          "group": "inline@1",
566
          "when": "scmProvider == oxygen"
567
        },
568
        {
569
          "command": "oxygen.discard",
570
          "group": "inline@2",
571
          "when": "scmProvider == oxygen"
572
        },
573
        {
574
          "command": "oxygen.openChanges",
575
          "group": "navigation",
576
          "when": "scmProvider == oxygen"
577
        },
578
        {
579
          "command": "oxygen.openBaseVersion",
580
          "group": "navigation",
581
          "when": "scmProvider == oxygen"
582
        },
583
        {
584
          "command": "oxygen.commitSelected",
585
          "group": "1_modification@1",
586
          "when": "scmProvider == oxygen"
587
        },
588
        {
589
          "command": "oxygen.discard",
590
          "group": "1_modification@2",
591
          "when": "scmProvider == oxygen"
592
        },
593
        {
594
          "command": "oxygen.keepCandidate",
595
          "group": "inline@0",
596
          "when": "scmProvider == oxygen && scmResourceState == candidate"
597
        },
598
        {
599
          "command": "oxygen.updateSubrepo",
600
          "group": "inline@0",
601
          "when": "scmProvider == oxygen && scmResourceState == subrepo"
602
        },
603
        {
604
          "command": "oxygen.keepCandidate",
605
          "group": "0_conflict",
606
          "when": "scmProvider == oxygen && scmResourceState == candidate"
607
        }
608
      ],
609
      "scm/resourceGroup/context": [
610
        {
611
          "command": "oxygen.markResolved",
612
          "group": "inline",
613
          "when": "scmProvider == oxygen && scmResourceGroup == conflicts"
614
        }
615
      ],
616
      "view/title": [
617
        {
618
          "command": "oxygen.refreshOperations",
619
          "group": "navigation",
620
          "when": "view == oxygen.operations"
621
        },
622
        {
623
          "command": "oxygen.refreshBisect",
624
          "group": "navigation",
625
          "when": "view == oxygen.bisect"
626
        },
627
        {
628
          "command": "oxygen.refreshTrust",
629
          "group": "navigation",
630
          "when": "view == oxygen.trust"
631
        }
632
      ],
633
      "view/item/context": [
634
        {
635
          "command": "oxygen.undoTo",
636
          "group": "inline",
637
          "when": "view == oxygen.operations && viewItem == operation"
638
        }
639
      ],
640
      "commandPalette": [
641
        {
642
          "command": "oxygen.openFile",
643
          "when": "false"
644
        },
645
        {
646
          "command": "oxygen.openChanges",
647
          "when": "false"
648
        },
649
        {
650
          "command": "oxygen.openBaseVersion",
651
          "when": "false"
652
        },
653
        {
654
          "command": "oxygen.discard",
655
          "when": "false"
656
        },
657
        {
658
          "command": "oxygen.commitSelected",
659
          "when": "false"
660
        },
661
        {
662
          "command": "oxygen.undoTo",
663
          "when": "false"
664
        },
665
        {
666
          "command": "oxygen.refreshOperations",
667
          "when": "false"
668
        },
669
        {
670
          "command": "oxygen.showChange",
671
          "when": "false"
672
        },
673
        {
674
          "command": "oxygen.acceptSides",
675
          "when": "false"
676
        },
677
        {
678
          "command": "oxygen.keepCandidate",
679
          "when": "false"
680
        },
681
        {
682
          "command": "oxygen.openConflict",
683
          "when": "false"
684
        },
685
        {
686
          "command": "oxygen.openSubrepo",
687
          "when": "false"
688
        },
689
        {
690
          "command": "oxygen.updateSubrepo",
691
          "when": "false"
692
        },
693
        {
694
          "command": "oxygen.refreshBisect",
695
          "when": "false"
696
        },
697
        {
698
          "command": "oxygen.refreshTrust",
699
          "when": "false"
700
        },
701
        {
702
          "command": "oxygen.history.split",
703
          "when": "false"
704
        },
705
        {
706
          "command": "oxygen.history.squash",
707
          "when": "false"
708
        },
709
        {
710
          "command": "oxygen.history.rebase",
711
          "when": "false"
712
        }
713
      ],
714
      "editor/title/context": [
715
        {
716
          "command": "oxygen.openOnRemote",
717
          "when": "oxygen.hasRemoteProvider",
718
          "group": "oxygen@1"
719
        },
720
        {
721
          "command": "oxygen.copyPermalink",
722
          "when": "oxygen.hasRemoteProvider",
723
          "group": "oxygen@2"
724
        }
725
      ],
726
      "webview/context": [
727
        {
728
          "command": "oxygen.history.split",
729
          "when": "webviewId == 'oxygen.history' && webviewSection == 'change' && oxygenHead",
730
          "group": "oxygen@1"
731
        },
732
        {
733
          "command": "oxygen.history.squash",
734
          "when": "webviewId == 'oxygen.history' && webviewSection == 'change' && oxygenHasDeps",
735
          "group": "oxygen@2"
736
        },
737
        {
738
          "command": "oxygen.history.rebase",
739
          "when": "webviewId == 'oxygen.history' && webviewSection == 'change'",
740
          "group": "oxygen@3"
741
        }
742
      ],
743
      "editor/lineNumber/context": [
744
        {
745
          "command": "oxygen.openOnRemote",
746
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
747
          "group": "oxygen@1"
748
        },
749
        {
750
          "command": "oxygen.copyRemoteLink",
751
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
752
          "group": "oxygen@2"
753
        },
754
        {
755
          "command": "oxygen.copyPermalink",
756
          "when": "oxygen.hasRemoteProvider && resourceScheme == file",
757
          "group": "oxygen@3"
758
        }
759
      ]
760
    },
761
    "configuration": {
762
      "title": "Oxygen",
763
      "properties": {
764
        "oxygen.path": {
765
          "type": "string",
766
          "default": "",
767
          "description": "Path to the oxy binary. Empty means oxy on PATH, then ~/.local/bin/oxy."
768
        },
769
        "oxygen.autoRefresh": {
770
          "type": "boolean",
771
          "default": true,
772
          "description": "Refresh the source control view when files in the workspace change."
773
        },
774
        "oxygen.decorations.enabled": {
775
          "type": "boolean",
776
          "default": true,
777
          "description": "Show status decorations in the explorer and on editor tabs."
778
        },
779
        "oxygen.inlineBlame": {
780
          "type": "boolean",
781
          "default": false,
782
          "description": "Show each line's introducing change, author and age at the end of the line."
783
        },
784
        "oxygen.confirmSync": {
785
          "type": "boolean",
786
          "default": true,
787
          "description": "Ask before pushing."
788
        },
789
        "oxygen.showSnapshotOperations": {
790
          "type": "boolean",
791
          "default": false,
792
          "description": "List snapshot operations in the Oxygen Operations view."
793
        },
794
        "oxygen.statusBar.enabled": {
795
          "type": "boolean",
796
          "default": true,
797
          "description": "Show the bookmark, working copy and state in the status bar."
798
        }
799
      }
800
    },
801
    "colors": [
802
      {
803
        "id": "oxygen.accent",
804
        "description": "The Oxygen accent: the current operation, repositories, the status bar.",
805
        "defaults": {
806
          "dark": "#35C7FF",
807
          "light": "#0A74B8",
808
          "highContrast": "#35C7FF",
809
          "highContrastLight": "#0A74B8"
810
        }
811
      },
812
      {
813
        "id": "oxygen.commit",
814
        "description": "Commits, amends and splits in the Operations view.",
815
        "defaults": {
816
          "dark": "#5FE3A1",
817
          "light": "#1A7850",
818
          "highContrast": "#5FE3A1",
819
          "highContrastLight": "#1A7850"
820
        }
821
      },
822
      {
823
        "id": "oxygen.push",
824
        "description": "Pushes.",
825
        "defaults": {
826
          "dark": "#3D7BFF",
827
          "light": "#2553C9",
828
          "highContrast": "#3D7BFF",
829
          "highContrastLight": "#2553C9"
830
        }
831
      },
832
      {
833
        "id": "oxygen.pull",
834
        "description": "Pulls, fetches and clones.",
835
        "defaults": {
836
          "dark": "#2BD9B3",
837
          "light": "#0E8A70",
838
          "highContrast": "#2BD9B3",
839
          "highContrastLight": "#0E8A70"
840
        }
841
      },
842
      {
843
        "id": "oxygen.merge",
844
        "description": "Merges, rebases and resolutions.",
845
        "defaults": {
846
          "dark": "#8E7CFF",
847
          "light": "#5B45D6",
848
          "highContrast": "#8E7CFF",
849
          "highContrastLight": "#5B45D6"
850
        }
851
      },
852
      {
853
        "id": "oxygen.bookmark",
854
        "description": "Bookmarks and tags.",
855
        "defaults": {
856
          "dark": "#FFD166",
857
          "light": "#A36A00",
858
          "highContrast": "#FFD166",
859
          "highContrastLight": "#A36A00"
860
        }
861
      },
862
      {
863
        "id": "oxygen.switch",
864
        "description": "Checkouts and bookmark switches.",
865
        "defaults": {
866
          "dark": "#56A8FF",
867
          "light": "#1F6FC2",
868
          "highContrast": "#56A8FF",
869
          "highContrastLight": "#1F6FC2"
870
        }
871
      },
872
      {
873
        "id": "oxygen.undo",
874
        "description": "Undo, discard and abandon.",
875
        "defaults": {
876
          "dark": "#FFB454",
877
          "light": "#B35900",
878
          "highContrast": "#FFB454",
879
          "highContrastLight": "#B35900"
880
        }
881
      },
882
      {
883
        "id": "oxygen.good",
884
        "description": "Good: passing, verified, signed.",
885
        "defaults": {
886
          "dark": "#5FE3A1",
887
          "light": "#1A7850",
888
          "highContrast": "#5FE3A1",
889
          "highContrastLight": "#1A7850"
890
        }
891
      },
892
      {
893
        "id": "oxygen.bad",
894
        "description": "Bad: failing, invalid, expired.",
895
        "defaults": {
896
          "dark": "#FF5E7A",
897
          "light": "#C62D47",
898
          "highContrast": "#FF5E7A",
899
          "highContrastLight": "#C62D47"
900
        }
901
      },
902
      {
903
        "id": "oxygen.warning",
904
        "description": "Warnings and dirty working copies.",
905
        "defaults": {
906
          "dark": "#FFB454",
907
          "light": "#B35900",
908
          "highContrast": "#FFB454",
909
          "highContrastLight": "#B35900"
910
        }
911
      },
912
      {
913
        "id": "oxygen.key",
914
        "description": "Keys and roots in the Trust view.",
915
        "defaults": {
916
          "dark": "#FFD166",
917
          "light": "#A36A00",
918
          "highContrast": "#FFD166",
919
          "highContrastLight": "#A36A00"
920
        }
921
      },
922
      {
923
        "id": "oxygen.subrepo",
924
        "description": "Subrepos.",
925
        "defaults": {
926
          "dark": "#1FB6D6",
927
          "light": "#0B7C93",
928
          "highContrast": "#1FB6D6",
929
          "highContrastLight": "#0B7C93"
930
        }
931
      },
932
      {
933
        "id": "oxygen.lane1",
934
        "description": "History graph: lane 1 (the Oxygen mark's palette).",
935
        "defaults": {
936
          "dark": "#35C7FF",
937
          "light": "#0A74B8",
938
          "highContrast": "#35C7FF",
939
          "highContrastLight": "#0A74B8"
940
        }
941
      },
942
      {
943
        "id": "oxygen.lane2",
944
        "description": "History graph: lane 2 (the Oxygen mark's palette).",
945
        "defaults": {
946
          "dark": "#3D7BFF",
947
          "light": "#2553C9",
948
          "highContrast": "#3D7BFF",
949
          "highContrastLight": "#2553C9"
950
        }
951
      },
952
      {
953
        "id": "oxygen.lane3",
954
        "description": "History graph: lane 3 (the Oxygen mark's palette).",
955
        "defaults": {
956
          "dark": "#2BD9B3",
957
          "light": "#0E8A70",
958
          "highContrast": "#2BD9B3",
959
          "highContrastLight": "#0E8A70"
960
        }
961
      },
962
      {
963
        "id": "oxygen.lane4",
964
        "description": "History graph: lane 4 (the Oxygen mark's palette).",
965
        "defaults": {
966
          "dark": "#8E7CFF",
967
          "light": "#5B45D6",
968
          "highContrast": "#8E7CFF",
969
          "highContrastLight": "#5B45D6"
970
        }
971
      },
972
      {
973
        "id": "oxygen.lane5",
974
        "description": "History graph: lane 5 (the Oxygen mark's palette).",
975
        "defaults": {
976
          "dark": "#56A8FF",
977
          "light": "#1F6FC2",
978
          "highContrast": "#56A8FF",
979
          "highContrastLight": "#1F6FC2"
980
        }
981
      },
982
      {
983
        "id": "oxygen.lane6",
984
        "description": "History graph: lane 6 (the Oxygen mark's palette).",
985
        "defaults": {
986
          "dark": "#5FE3A1",
987
          "light": "#1A7850",
988
          "highContrast": "#5FE3A1",
989
          "highContrastLight": "#1A7850"
990
        }
991
      },
992
      {
993
        "id": "oxygen.lane7",
994
        "description": "History graph: lane 7 (the Oxygen mark's palette).",
995
        "defaults": {
996
          "dark": "#5B6CFF",
997
          "light": "#3440B8",
998
          "highContrast": "#5B6CFF",
999
          "highContrastLight": "#3440B8"
1000
        }
1001
      },
1002
      {
1003
        "id": "oxygen.lane8",
1004
        "description": "History graph: lane 8 (the Oxygen mark's palette).",
1005
        "defaults": {
1006
          "dark": "#1FB6D6",
1007
          "light": "#0B7C93",
1008
          "highContrast": "#1FB6D6",
1009
          "highContrastLight": "#0B7C93"
1010
        }
1011
      },
1012
      {
1013
        "id": "oxygen.head",
1014
        "description": "A bookmark head in the history graph.",
1015
        "defaults": {
1016
          "dark": "#5FE3A1",
1017
          "light": "#1A7850",
1018
          "highContrast": "#5FE3A1",
1019
          "highContrastLight": "#1A7850"
1020
        }
1021
      },
1022
      {
1023
        "id": "oxygen.workingCopy",
1024
        "description": "The working copy in the history graph.",
1025
        "defaults": {
1026
          "dark": "#35C7FF",
1027
          "light": "#0A74B8",
1028
          "highContrast": "#35C7FF",
1029
          "highContrastLight": "#0A74B8"
1030
        }
1031
      },
1032
      {
1033
        "id": "oxygen.signed",
1034
        "description": "A change signed by its author.",
1035
        "defaults": {
1036
          "dark": "#5FE3A1",
1037
          "light": "#1A7850",
1038
          "highContrast": "#5FE3A1",
1039
          "highContrastLight": "#1A7850"
1040
        }
1041
      },
1042
      {
1043
        "id": "oxygen.sealed",
1044
        "description": "A change authenticated by a seal (one signature over a push).",
1045
        "defaults": {
1046
          "dark": "#8E7CFF",
1047
          "light": "#6B3FD1",
1048
          "highContrast": "#8E7CFF",
1049
          "highContrastLight": "#6B3FD1"
1050
        }
1051
      },
1052
      {
1053
        "id": "oxygen.invalid",
1054
        "description": "A signature that does not verify.",
1055
        "defaults": {
1056
          "dark": "#FF5E7A",
1057
          "light": "#C62D47",
1058
          "highContrast": "#FF5E7A",
1059
          "highContrastLight": "#C62D47"
1060
        }
1061
      },
1062
      {
1063
        "id": "oxygen.added",
1064
        "description": "A file the working copy adds. Defaults to Git's colour; themes can set Oxygen's apart.",
1065
        "defaults": {
1066
          "dark": "gitDecoration.addedResourceForeground",
1067
          "light": "gitDecoration.addedResourceForeground",
1068
          "highContrast": "gitDecoration.addedResourceForeground",
1069
          "highContrastLight": "gitDecoration.addedResourceForeground"
1070
        }
1071
      },
1072
      {
1073
        "id": "oxygen.modified",
1074
        "description": "A file the working copy changes. Defaults to Git's colour; themes can set Oxygen's apart.",
1075
        "defaults": {
1076
          "dark": "gitDecoration.modifiedResourceForeground",
1077
          "light": "gitDecoration.modifiedResourceForeground",
1078
          "highContrast": "gitDecoration.modifiedResourceForeground",
1079
          "highContrastLight": "gitDecoration.modifiedResourceForeground"
1080
        }
1081
      },
1082
      {
1083
        "id": "oxygen.removed",
1084
        "description": "A file the working copy removes. Defaults to Git's colour; themes can set Oxygen's apart.",
1085
        "defaults": {
1086
          "dark": "gitDecoration.deletedResourceForeground",
1087
          "light": "gitDecoration.deletedResourceForeground",
1088
          "highContrast": "gitDecoration.deletedResourceForeground",
1089
          "highContrastLight": "gitDecoration.deletedResourceForeground"
1090
        }
1091
      },
1092
      {
1093
        "id": "oxygen.renamed",
1094
        "description": "A file the working copy moves. Defaults to Git's colour; themes can set Oxygen's apart.",
1095
        "defaults": {
1096
          "dark": "gitDecoration.renamedResourceForeground",
1097
          "light": "gitDecoration.renamedResourceForeground",
1098
          "highContrast": "gitDecoration.renamedResourceForeground",
1099
          "highContrastLight": "gitDecoration.renamedResourceForeground"
1100
        }
1101
      },
1102
      {
1103
        "id": "oxygen.conflict",
1104
        "description": "A file with a conflict, or conflict markers left in it. Defaults to Git's colour; themes can set Oxygen's apart.",
1105
        "defaults": {
1106
          "dark": "gitDecoration.conflictingResourceForeground",
1107
          "light": "gitDecoration.conflictingResourceForeground",
1108
          "highContrast": "gitDecoration.conflictingResourceForeground",
1109
          "highContrastLight": "gitDecoration.conflictingResourceForeground"
1110
        }
1111
      },
1112
      {
1113
        "id": "oxygen.resolved",
1114
        "description": "A conflict marked resolved. Defaults to Git's colour; themes can set Oxygen's apart.",
1115
        "defaults": {
1116
          "dark": "gitDecoration.stageModifiedResourceForeground",
1117
          "light": "gitDecoration.stageModifiedResourceForeground",
1118
          "highContrast": "gitDecoration.stageModifiedResourceForeground",
1119
          "highContrastLight": "gitDecoration.stageModifiedResourceForeground"
1120
        }
1121
      }
1122
    ],
1123
    "walkthroughs": [
1124
      {
1125
        "id": "oxygen.gettingStarted",
1126
        "title": "Get started with Oxygen",
1127
        "description": "Sign, commit, branch without merges, push and see the history of an Oxygen repository.",
1128
        "steps": [
1129
          {
1130
            "id": "oxygen.identity",
1131
            "title": "Create your identity",
1132
            "description": "Every change you make is signed with a composite key (Ed25519 and ML-DSA-65) that names you. Make it once; every repository uses it.\n[Create Identity](command:oxygen.createIdentity)",
1133
            "media": {
1134
              "markdown": "walkthrough/identity.md"
1135
            },
1136
            "completionEvents": [
1137
              "onCommand:oxygen.createIdentity"
1138
            ]
1139
          },
1140
          {
1141
            "id": "oxygen.repository",
1142
            "title": "Open or clone a repository",
1143
            "description": "Clone one from your hub, start a new one here, or open a folder that already is one.\n[Clone Repository](command:oxygen.clone)\n[Initialize Repository](command:oxygen.init)",
1144
            "media": {
1145
              "markdown": "walkthrough/repository.md"
1146
            },
1147
            "completionEvents": [
1148
              "onContext:oxygen.hasRepository"
1149
            ]
1150
          },
1151
          {
1152
            "id": "oxygen.commit",
1153
            "title": "Commit a change",
1154
            "description": "Edit a file, write a message in the Source Control box and press Ctrl+Enter. There is no staging area: the change is what you see.\n[Open Source Control](command:workbench.view.scm)",
1155
            "media": {
1156
              "markdown": "walkthrough/commit.md"
1157
            },
1158
            "completionEvents": [
1159
              "onCommand:oxygen.commit"
1160
            ]
1161
          },
1162
          {
1163
            "id": "oxygen.bookmarks",
1164
            "title": "Bookmarks: branches without merges",
1165
            "description": "A bookmark names a state. Switch to a new one for a piece of work (take your edits along with *carry*), and merge it back: a merge is just the union of both, with no merge change.\n[Create Bookmark](command:oxygen.createBookmark)",
1166
            "media": {
1167
              "markdown": "walkthrough/bookmarks.md"
1168
            },
1169
            "completionEvents": [
1170
              "onCommand:oxygen.createBookmark"
1171
            ]
1172
          },
1173
          {
1174
            "id": "oxygen.push",
1175
            "title": "Push to your hub",
1176
            "description": "Publish your bookmark. The push seals your new changes with one signature and moves the bookmark on the hub, which runs its OxygenFlow pipeline.\n[Push](command:oxygen.push)",
1177
            "media": {
1178
              "markdown": "walkthrough/push.md"
1179
            },
1180
            "completionEvents": [
1181
              "onCommand:oxygen.push"
1182
            ]
1183
          },
1184
          {
1185
            "id": "oxygen.history",
1186
            "title": "See the history",
1187
            "description": "Changes form a graph, not a line: independent work runs in its own lane, in the Oxygen colours.\n[Show History](command:oxygen.showHistory)",
1188
            "media": {
1189
              "markdown": "walkthrough/history.md"
1190
            },
1191
            "completionEvents": [
1192
              "onCommand:oxygen.showHistory"
1193
            ]
1194
          }
1195
        ]
1196
      }
1197
    ]
1198
  },
1199
  "scripts": {
1200
    "build": "esbuild src/extension.ts --bundle --platform=node --format=cjs --external:vscode --outfile=dist/extension.js --sourcemap",
1201
    "watch": "npm run build -- --watch",
1202
    "typecheck": "tsc --noEmit -p .",
1203
    "pretest": "esbuild src/oxy.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/oxy.mjs && esbuild src/diffutil.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/diffutil.mjs && esbuild src/markers.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/markers.mjs && esbuild src/api.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/api.mjs && esbuild src/commitbox.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/commitbox.mjs && esbuild src/handoff.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/handoff.mjs && esbuild src/paths.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/paths.mjs && esbuild src/looks.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/looks.mjs",
1204
    "test": "node --enable-source-maps --test \"test/**/*.test.mjs\"",
1205
    "pretest:ci": "npm run pretest",
1206
    "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\"",
1207
    "check": "npm run typecheck && npm run build && npm test",
1208
    "package": "vsce package --no-dependencies"
1209
  },
1210
  "devDependencies": {
1211
    "@types/node": "^24.0.0",
1212
    "@types/vscode": "^1.137.0",
1213
    "@vscode/vsce": "^4.0.0",
1214
    "esbuild": "^0.28.0",
1215
    "typescript": "^5.9.0"
1216
  }
1217
}