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