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