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