@techfetch-dev/project-translator 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,944 @@
1
+ {
2
+ "name": "@techfetch-dev/project-translator",
3
+ "displayName": "Project Translator",
4
+ "description": "%description.description%",
5
+ "version": "0.19.0",
6
+ "publisher": "techfetch-dev",
7
+ "icon": "resources/project-translator.png",
8
+ "categories": [
9
+ "Other",
10
+ "Machine Learning"
11
+ ],
12
+ "keywords": [
13
+ "translation",
14
+ "localization",
15
+ "i18n",
16
+ "internationalization",
17
+ "multi-language",
18
+ "ai",
19
+ "openai",
20
+ "gpt",
21
+ "project",
22
+ "folder",
23
+ "file",
24
+ "batch",
25
+ "automation",
26
+ "documentation",
27
+ "markdown",
28
+ "json",
29
+ "xml",
30
+ "language-model-tools"
31
+ ],
32
+ "engines": {
33
+ "vscode": "^1.75.0"
34
+ },
35
+ "activationEvents": [
36
+ "onStartupFinished"
37
+ ],
38
+ "main": "./out/extension.js",
39
+ "bin": {
40
+ "project-translator": "./out/cli.js"
41
+ },
42
+ "l10n": "./l10n",
43
+ "contributes": {
44
+ "commands": [
45
+ {
46
+ "command": "extension.translateProject",
47
+ "title": "%command.translateProject%"
48
+ },
49
+ {
50
+ "command": "extension.translateFolders",
51
+ "title": "%command.translateFolders%"
52
+ },
53
+ {
54
+ "command": "extension.translateFiles",
55
+ "title": "%command.translateFiles%"
56
+ },
57
+ {
58
+ "command": "extension.pauseTranslation",
59
+ "title": "%command.pauseTranslation%"
60
+ },
61
+ {
62
+ "command": "extension.resumeTranslation",
63
+ "title": "%command.resumeTranslation%"
64
+ },
65
+ {
66
+ "command": "extension.cancelTranslation",
67
+ "title": "%command.cancelTranslation%"
68
+ },
69
+ {
70
+ "command": "extension.addFileToTranslationSettings",
71
+ "title": "%command.addFileToTranslationSettings%"
72
+ },
73
+ {
74
+ "command": "extension.addFolderToTranslationSettings",
75
+ "title": "%command.addFolderToTranslationSettings%"
76
+ },
77
+ {
78
+ "command": "extension.exportSettingsToConfig",
79
+ "title": "%command.exportSettingsToConfig%"
80
+ },
81
+ {
82
+ "command": "extension.enableAutoTranslateOnOpen",
83
+ "title": "%command.enableAutoTranslateOnOpen%"
84
+ },
85
+ {
86
+ "command": "extension.disableAutoTranslateOnOpen",
87
+ "title": "%command.disableAutoTranslateOnOpen%"
88
+ }
89
+ ],
90
+ "menus": {
91
+ "explorer/context": [
92
+ {
93
+ "command": "extension.addFileToTranslationSettings",
94
+ "when": "resourceScheme == file && !explorerResourceIsFolder",
95
+ "group": "projectTranslator@1"
96
+ },
97
+ {
98
+ "command": "extension.addFolderToTranslationSettings",
99
+ "when": "resourceScheme == file && explorerResourceIsFolder",
100
+ "group": "projectTranslator@1"
101
+ }
102
+ ]
103
+ },
104
+ "configuration": {
105
+ "title": "%configuration.title%",
106
+ "properties": {
107
+ "projectTranslator.currentVendor": {
108
+ "type": "string",
109
+ "default": "deepseek",
110
+ "description": "%config.currentVendor.description%",
111
+ "order": 1
112
+ },
113
+ "projectTranslator.vendors": {
114
+ "type": "array",
115
+ "items": {
116
+ "type": "object",
117
+ "properties": {
118
+ "name": {
119
+ "type": "string",
120
+ "description": "%config.vendor.name.description%",
121
+ "default": "grok"
122
+ },
123
+ "apiEndpoint": {
124
+ "type": "string",
125
+ "description": "%config.vendor.apiEndpoint.description%",
126
+ "default": "https://api.x.ai/v1"
127
+ },
128
+ "apiKey": {
129
+ "type": "string",
130
+ "description": "%config.vendor.apiKey.description%",
131
+ "default": ""
132
+ },
133
+ "apiKeyEnvVarName": {
134
+ "type": "string",
135
+ "description": "%config.vendor.apiKeyEnvVarName.description%",
136
+ "default": ""
137
+ },
138
+ "model": {
139
+ "type": "string",
140
+ "description": "%config.vendor.model.description%",
141
+ "default": "grok-2"
142
+ },
143
+ "rpm": {
144
+ "type": "number",
145
+ "description": "%config.vendor.rpm.description%",
146
+ "default": 20
147
+ },
148
+ "maxTokensPerSegment": {
149
+ "type": "number",
150
+ "description": "%config.vendor.maxTokensPerSegment.description%",
151
+ "default": 1500
152
+ },
153
+ "timeout": {
154
+ "type": "number",
155
+ "description": "%config.vendor.timeout.description%",
156
+ "default": 180
157
+ },
158
+ "temperature": {
159
+ "type": "number",
160
+ "description": "%config.vendor.temperature.description%",
161
+ "minimum": 0,
162
+ "maximum": 2,
163
+ "default": 0.1
164
+ },
165
+ "top_p": {
166
+ "type": "number",
167
+ "description": "Controls diversity via nucleus sampling: 0.95 is a good default value",
168
+ "minimum": 0,
169
+ "maximum": 1,
170
+ "default": 0.95
171
+ },
172
+ "streamMode": {
173
+ "type": "boolean",
174
+ "description": "%config.vendor.streamMode.description%",
175
+ "default": true
176
+ }
177
+ },
178
+ "required": [
179
+ "name",
180
+ "apiEndpoint",
181
+ "model"
182
+ ]
183
+ },
184
+ "default": [
185
+ {
186
+ "name": "deepseek",
187
+ "apiEndpoint": "https://api.deepseek.com/v1",
188
+ "apiKey": "",
189
+ "apiKeyEnvVarName": "",
190
+ "model": "deepseek-chat",
191
+ "rpm": 20,
192
+ "maxTokensPerSegment": 3000,
193
+ "timeout": 300,
194
+ "temperature": 0.1,
195
+ "top_p": 0.95,
196
+ "streamMode": true
197
+ }
198
+ ],
199
+ "description": "%config.vendors.description%",
200
+ "order": 2
201
+ },
202
+ "projectTranslator.systemPromptLanguage": {
203
+ "type": "string",
204
+ "enum": [
205
+ "en",
206
+ "zh-cn"
207
+ ],
208
+ "default": "en",
209
+ "description": "%config.systemPromptLanguage.description%",
210
+ "order": 3
211
+ },
212
+ "projectTranslator.debug": {
213
+ "type": "boolean",
214
+ "default": false,
215
+ "description": "Enable debug mode to log all OpenAI API requests and responses to output channel",
216
+ "order": 4
217
+ },
218
+ "projectTranslator.logFile": {
219
+ "type": "object",
220
+ "default": {
221
+ "enabled": false,
222
+ "path": "",
223
+ "maxSizeKB": 10240,
224
+ "maxFiles": 5
225
+ },
226
+ "properties": {
227
+ "enabled": {
228
+ "type": "boolean",
229
+ "default": false,
230
+ "description": "Enable writing debug logs to file when debug mode is active"
231
+ },
232
+ "path": {
233
+ "type": "string",
234
+ "default": "",
235
+ "description": "Custom path for log files (leave empty to use default: workspace/.vscode/project-translator-logs)"
236
+ },
237
+ "maxSizeKB": {
238
+ "type": "number",
239
+ "default": 10240,
240
+ "minimum": 1024,
241
+ "maximum": 102400,
242
+ "description": "Maximum size of each log file in KB (1MB - 100MB)"
243
+ },
244
+ "maxFiles": {
245
+ "type": "number",
246
+ "default": 5,
247
+ "minimum": 1,
248
+ "maximum": 20,
249
+ "description": "Maximum number of log files to keep (1-20)"
250
+ }
251
+ },
252
+ "description": "Configuration for debug log files",
253
+ "order": 5
254
+ },
255
+ "projectTranslator.specifiedFiles": {
256
+ "type": "array",
257
+ "items": {
258
+ "type": "object",
259
+ "properties": {
260
+ "sourceFile": {
261
+ "type": "object",
262
+ "properties": {
263
+ "path": {
264
+ "type": "string",
265
+ "description": "%config.sourceFile.description%"
266
+ },
267
+ "lang": {
268
+ "type": "string",
269
+ "enum": [
270
+ "en-us",
271
+ "ar-ae",
272
+ "ar-sa",
273
+ "cs-cz",
274
+ "da-dk",
275
+ "de-de",
276
+ "el-gr",
277
+ "es-es",
278
+ "fi-fi",
279
+ "fr-fr",
280
+ "he-il",
281
+ "hi-in",
282
+ "hu-hu",
283
+ "id-id",
284
+ "it-it",
285
+ "ja-jp",
286
+ "ko-kr",
287
+ "nl-nl",
288
+ "no-no",
289
+ "pl-pl",
290
+ "pt-br",
291
+ "ru-ru",
292
+ "sv-se",
293
+ "th-th",
294
+ "tr-tr",
295
+ "vi-vn",
296
+ "zh-cn",
297
+ "zh-hk",
298
+ "zh-tw"
299
+ ],
300
+ "enumDescriptions": [
301
+ "English (United States)",
302
+ "Arabic (United Arab Emirates)",
303
+ "Arabic (Saudi Arabia)",
304
+ "Czech (Czech Republic)",
305
+ "Danish (Denmark)",
306
+ "German (Germany)",
307
+ "Greek (Greece)",
308
+ "Spanish (Spain)",
309
+ "Finnish (Finland)",
310
+ "French (France)",
311
+ "Hebrew (Israel)",
312
+ "Hindi (India)",
313
+ "Hungarian (Hungary)",
314
+ "Indonesian (Indonesia)",
315
+ "Italian (Italy)",
316
+ "Japanese (Japan)",
317
+ "Korean (Korea)",
318
+ "Dutch (Netherlands)",
319
+ "Norwegian (Norway)",
320
+ "Polish (Poland)",
321
+ "Portuguese (Brazil)",
322
+ "Russian (Russia)",
323
+ "Swedish (Sweden)",
324
+ "Thai (Thailand)",
325
+ "Turkish (Turkey)",
326
+ "Vietnamese (Vietnam)",
327
+ "Chinese (China)",
328
+ "Chinese (Hong Kong)",
329
+ "Chinese (Taiwan)"
330
+ ],
331
+ "default": "en-us",
332
+ "description": "%config.language.description%"
333
+ }
334
+ },
335
+ "required": [
336
+ "path",
337
+ "lang"
338
+ ]
339
+ },
340
+ "targetFiles": {
341
+ "type": "array",
342
+ "items": {
343
+ "type": "object",
344
+ "properties": {
345
+ "path": {
346
+ "type": "string",
347
+ "description": "%config.targetFiles.description%"
348
+ },
349
+ "lang": {
350
+ "type": "string",
351
+ "enum": [
352
+ "en-us",
353
+ "ar-ae",
354
+ "ar-sa",
355
+ "cs-cz",
356
+ "da-dk",
357
+ "de-de",
358
+ "el-gr",
359
+ "es-es",
360
+ "fi-fi",
361
+ "fr-fr",
362
+ "he-il",
363
+ "hi-in",
364
+ "hu-hu",
365
+ "id-id",
366
+ "it-it",
367
+ "ja-jp",
368
+ "ko-kr",
369
+ "nl-nl",
370
+ "no-no",
371
+ "pl-pl",
372
+ "pt-br",
373
+ "ru-ru",
374
+ "sv-se",
375
+ "th-th",
376
+ "tr-tr",
377
+ "vi-vn",
378
+ "zh-cn",
379
+ "zh-hk",
380
+ "zh-tw"
381
+ ],
382
+ "enumDescriptions": [
383
+ "English (United States)",
384
+ "Arabic (United Arab Emirates)",
385
+ "Arabic (Saudi Arabia)",
386
+ "Czech (Czech Republic)",
387
+ "Danish (Denmark)",
388
+ "German (Germany)",
389
+ "Greek (Greece)",
390
+ "Spanish (Spain)",
391
+ "Finnish (Finland)",
392
+ "French (France)",
393
+ "Hebrew (Israel)",
394
+ "Hindi (India)",
395
+ "Hungarian (Hungary)",
396
+ "Indonesian (Indonesia)",
397
+ "Italian (Italy)",
398
+ "Japanese (Japan)",
399
+ "Korean (Korea)",
400
+ "Dutch (Netherlands)",
401
+ "Norwegian (Norway)",
402
+ "Polish (Poland)",
403
+ "Portuguese (Brazil)",
404
+ "Russian (Russia)",
405
+ "Swedish (Sweden)",
406
+ "Thai (Thailand)",
407
+ "Turkish (Turkey)",
408
+ "Vietnamese (Vietnam)",
409
+ "Chinese (China)",
410
+ "Chinese (Hong Kong)",
411
+ "Chinese (Taiwan)"
412
+ ],
413
+ "description": "%config.targetLanguage.description%"
414
+ }
415
+ },
416
+ "required": [
417
+ "path",
418
+ "lang"
419
+ ]
420
+ }
421
+ }
422
+ },
423
+ "required": [
424
+ "sourceFile",
425
+ "targetFiles"
426
+ ]
427
+ },
428
+ "default": [],
429
+ "description": "%config.specifiedFiles.description%",
430
+ "order": 5
431
+ },
432
+ "projectTranslator.specifiedFolders": {
433
+ "type": "array",
434
+ "items": {
435
+ "type": "object",
436
+ "properties": {
437
+ "sourceFolder": {
438
+ "type": "object",
439
+ "properties": {
440
+ "path": {
441
+ "type": "string",
442
+ "description": "%config.sourceFolder.description%"
443
+ },
444
+ "lang": {
445
+ "type": "string",
446
+ "enum": [
447
+ "en-us",
448
+ "ar-ae",
449
+ "ar-sa",
450
+ "cs-cz",
451
+ "da-dk",
452
+ "de-de",
453
+ "el-gr",
454
+ "es-es",
455
+ "fi-fi",
456
+ "fr-fr",
457
+ "he-il",
458
+ "hi-in",
459
+ "hu-hu",
460
+ "id-id",
461
+ "it-it",
462
+ "ja-jp",
463
+ "ko-kr",
464
+ "nl-nl",
465
+ "no-no",
466
+ "pl-pl",
467
+ "pt-br",
468
+ "ru-ru",
469
+ "sv-se",
470
+ "th-th",
471
+ "tr-tr",
472
+ "vi-vn",
473
+ "zh-cn",
474
+ "zh-hk",
475
+ "zh-tw"
476
+ ],
477
+ "enumDescriptions": [
478
+ "English (United States)",
479
+ "Arabic (United Arab Emirates)",
480
+ "Arabic (Saudi Arabia)",
481
+ "Czech (Czech Republic)",
482
+ "Danish (Denmark)",
483
+ "German (Germany)",
484
+ "Greek (Greece)",
485
+ "Spanish (Spain)",
486
+ "Finnish (Finland)",
487
+ "French (France)",
488
+ "Hebrew (Israel)",
489
+ "Hindi (India)",
490
+ "Hungarian (Hungary)",
491
+ "Indonesian (Indonesia)",
492
+ "Italian (Italy)",
493
+ "Japanese (Japan)",
494
+ "Korean (Korea)",
495
+ "Dutch (Netherlands)",
496
+ "Norwegian (Norway)",
497
+ "Polish (Poland)",
498
+ "Portuguese (Brazil)",
499
+ "Russian (Russia)",
500
+ "Swedish (Sweden)",
501
+ "Thai (Thailand)",
502
+ "Turkish (Turkey)",
503
+ "Vietnamese (Vietnam)",
504
+ "Chinese (China)",
505
+ "Chinese (Hong Kong)",
506
+ "Chinese (Taiwan)"
507
+ ],
508
+ "default": "en-us",
509
+ "description": "%config.language.description%"
510
+ }
511
+ },
512
+ "required": [
513
+ "path",
514
+ "lang"
515
+ ]
516
+ },
517
+ "targetFolders": {
518
+ "type": "array",
519
+ "items": {
520
+ "type": "object",
521
+ "properties": {
522
+ "path": {
523
+ "type": "string",
524
+ "description": "%config.targetFolders.description%"
525
+ },
526
+ "lang": {
527
+ "type": "string",
528
+ "enum": [
529
+ "en-us",
530
+ "ar-ae",
531
+ "ar-sa",
532
+ "cs-cz",
533
+ "da-dk",
534
+ "de-de",
535
+ "el-gr",
536
+ "es-es",
537
+ "fi-fi",
538
+ "fr-fr",
539
+ "he-il",
540
+ "hi-in",
541
+ "hu-hu",
542
+ "id-id",
543
+ "it-it",
544
+ "ja-jp",
545
+ "ko-kr",
546
+ "nl-nl",
547
+ "no-no",
548
+ "pl-pl",
549
+ "pt-br",
550
+ "ru-ru",
551
+ "sv-se",
552
+ "th-th",
553
+ "tr-tr",
554
+ "vi-vn",
555
+ "zh-cn",
556
+ "zh-hk",
557
+ "zh-tw"
558
+ ],
559
+ "enumDescriptions": [
560
+ "English (United States)",
561
+ "Arabic (United Arab Emirates)",
562
+ "Arabic (Saudi Arabia)",
563
+ "Czech (Czech Republic)",
564
+ "Danish (Denmark)",
565
+ "German (Germany)",
566
+ "Greek (Greece)",
567
+ "Spanish (Spain)",
568
+ "Finnish (Finland)",
569
+ "French (France)",
570
+ "Hebrew (Israel)",
571
+ "Hindi (India)",
572
+ "Hungarian (Hungary)",
573
+ "Indonesian (Indonesia)",
574
+ "Italian (Italy)",
575
+ "Japanese (Japan)",
576
+ "Korean (Korea)",
577
+ "Dutch (Netherlands)",
578
+ "Norwegian (Norway)",
579
+ "Polish (Poland)",
580
+ "Portuguese (Brazil)",
581
+ "Russian (Russia)",
582
+ "Swedish (Sweden)",
583
+ "Thai (Thailand)",
584
+ "Turkish (Turkey)",
585
+ "Vietnamese (Vietnam)",
586
+ "Chinese (China)",
587
+ "Chinese (Hong Kong)",
588
+ "Chinese (Taiwan)"
589
+ ],
590
+ "description": "%config.targetLanguage.description%"
591
+ }
592
+ },
593
+ "required": [
594
+ "path",
595
+ "lang"
596
+ ]
597
+ }
598
+ }
599
+ },
600
+ "required": [
601
+ "sourceFolder",
602
+ "targetFolders"
603
+ ]
604
+ },
605
+ "default": [],
606
+ "description": "%config.specifiedFolders.description%",
607
+ "order": 6
608
+ },
609
+ "projectTranslator.translationIntervalDays": {
610
+ "type": "number",
611
+ "default": -1,
612
+ "description": "%config.translationIntervalDays.description%",
613
+ "order": 7
614
+ },
615
+ "projectTranslator.copyOnly": {
616
+ "type": "object",
617
+ "properties": {
618
+ "paths": {
619
+ "type": "array",
620
+ "items": {
621
+ "type": "string"
622
+ },
623
+ "default": [],
624
+ "description": "%config.copyOnly.paths.description%"
625
+ },
626
+ "extensions": {
627
+ "type": "array",
628
+ "items": {
629
+ "type": "string"
630
+ },
631
+ "default": [
632
+ ".svg"
633
+ ],
634
+ "description": "%config.copyOnly.extensions.description%"
635
+ }
636
+ },
637
+ "default": {
638
+ "paths": [],
639
+ "extensions": [
640
+ ".svg"
641
+ ]
642
+ },
643
+ "description": "%config.copyOnly.description%",
644
+ "order": 8
645
+ },
646
+ "projectTranslator.ignore": {
647
+ "type": "object",
648
+ "properties": {
649
+ "paths": {
650
+ "type": "array",
651
+ "items": {
652
+ "type": "string"
653
+ },
654
+ "default": [
655
+ "**/node_modules/**",
656
+ "**/.git/**",
657
+ "**/.github/**",
658
+ "**/.vscode/**",
659
+ "**/.translation-cache/**",
660
+ "project.translation.json"
661
+ ],
662
+ "description": "%config.ignore.paths.description%"
663
+ },
664
+ "extensions": {
665
+ "type": "array",
666
+ "items": {
667
+ "type": "string"
668
+ },
669
+ "default": [],
670
+ "description": "%config.ignore.extensions.description%"
671
+ }
672
+ },
673
+ "default": {
674
+ "paths": [
675
+ "**/node_modules/**",
676
+ "**/.git/**",
677
+ "**/.github/**",
678
+ "**/.vscode/**",
679
+ "**/.nuxt/**",
680
+ "**/.next/**"
681
+ ],
682
+ "extensions": []
683
+ },
684
+ "description": "%config.ignore.description%",
685
+ "order": 9
686
+ },
687
+ "projectTranslator.customPrompts": {
688
+ "type": "array",
689
+ "items": {
690
+ "type": "string"
691
+ },
692
+ "default": [],
693
+ "description": "%config.customPrompts.description%",
694
+ "order": 10
695
+ },
696
+ "projectTranslator.segmentationMarkers": {
697
+ "type": "object",
698
+ "additionalProperties": {
699
+ "type": "array",
700
+ "items": {
701
+ "type": "string"
702
+ }
703
+ },
704
+ "default": {
705
+ "markdown": [
706
+ "^#\\s",
707
+ "^##\\s",
708
+ "^###\\s"
709
+ ],
710
+ "html": [
711
+ "^<h1[^>]*>",
712
+ "^<h2[^>]*>",
713
+ "^<h3[^>]*>"
714
+ ],
715
+ "javascript": [
716
+ "^function\\s+\\w+\\(",
717
+ "^class\\s+\\w+"
718
+ ],
719
+ "typescript": [
720
+ "^function\\s+\\w+\\(",
721
+ "^class\\s+\\w+",
722
+ "^interface\\s+\\w+"
723
+ ],
724
+ "python": [
725
+ "^def\\s+\\w+\\(",
726
+ "^class\\s+\\w+"
727
+ ],
728
+ "java": [
729
+ "^public\\s+(class|interface|enum)\\s+\\w+",
730
+ "^\\s*public\\s+\\w+\\s+\\w+\\("
731
+ ],
732
+ "go": [
733
+ "^func\\s+\\w+\\(",
734
+ "^type\\s+\\w+\\s+struct"
735
+ ],
736
+ "c#": [
737
+ "^public\\s+(class|interface|enum)\\s+\\w+",
738
+ "^\\s*public\\s+\\w+\\s+\\w+\\("
739
+ ],
740
+ "php": [
741
+ "^function\\s+\\w+\\(",
742
+ "^class\\s+\\w+"
743
+ ],
744
+ "ruby": [
745
+ "^def\\s+\\w+",
746
+ "^class\\s+\\w+"
747
+ ],
748
+ "rust": [
749
+ "^fn\\s+\\w+",
750
+ "^struct\\s+\\w+",
751
+ "^enum\\s+\\w+"
752
+ ],
753
+ "swift": [
754
+ "^func\\s+\\w+",
755
+ "^class\\s+\\w+",
756
+ "^struct\\s+\\w+"
757
+ ],
758
+ "kotlin": [
759
+ "^fun\\s+\\w+",
760
+ "^class\\s+\\w+"
761
+ ],
762
+ "plaintext": [
763
+ "^\\s*$"
764
+ ]
765
+ },
766
+ "description": "%config.segmentationMarkers.description%",
767
+ "order": 12
768
+ },
769
+ "projectTranslator.diffApply": {
770
+ "type": "object",
771
+ "properties": {
772
+ "enabled": {
773
+ "type": "boolean",
774
+ "default": false,
775
+ "description": "⚠️ EXPERIMENTAL: Enable differential translation mode that applies AI-generated edits to existing files. This is an experimental feature and may have stability and compatibility issues. Use with caution in production environments and always backup important files."
776
+ },
777
+ "validationLevel": {
778
+ "type": "string",
779
+ "enum": [
780
+ "normal",
781
+ "strict"
782
+ ],
783
+ "default": "normal",
784
+ "description": "Validation strictness when applying edits"
785
+ },
786
+ "autoBackup": {
787
+ "type": "boolean",
788
+ "default": true,
789
+ "description": "Automatically back up target file before applying edits"
790
+ },
791
+ "maxOperationsPerFile": {
792
+ "type": "number",
793
+ "default": 100,
794
+ "minimum": 1,
795
+ "maximum": 10000,
796
+ "description": "Safety limit for number of edit operations per file"
797
+ }
798
+ },
799
+ "default": {
800
+ "enabled": false,
801
+ "validationLevel": "normal",
802
+ "autoBackup": true,
803
+ "maxOperationsPerFile": 100
804
+ },
805
+ "description": "⚠️ EXPERIMENTAL: Configuration for differential translation (diff-apply) mode. This feature is experimental and may have stability and compatibility issues. Use with caution in production environments.",
806
+ "order": 13
807
+ },
808
+ "projectTranslator.enableMetrics": {
809
+ "type": "boolean",
810
+ "default": true,
811
+ "description": "%config.enableMetrics.description%",
812
+ "order": 14
813
+ },
814
+ "projectTranslator.skipFrontMatterMarkers": {
815
+ "type": "object",
816
+ "properties": {
817
+ "enabled": {
818
+ "type": "boolean",
819
+ "default": false,
820
+ "description": "Enable checking front matter for translation skip markers"
821
+ },
822
+ "markers": {
823
+ "type": "array",
824
+ "items": {
825
+ "type": "object",
826
+ "properties": {
827
+ "key": {
828
+ "type": "string",
829
+ "description": "The front matter key to check"
830
+ },
831
+ "value": {
832
+ "type": "string",
833
+ "description": "The value that indicates the file should be skipped"
834
+ }
835
+ },
836
+ "required": [
837
+ "key",
838
+ "value"
839
+ ]
840
+ },
841
+ "default": [
842
+ {
843
+ "key": "draft",
844
+ "value": "true"
845
+ }
846
+ ],
847
+ "description": "List of front matter markers that indicate a file should be skipped from translation"
848
+ }
849
+ },
850
+ "default": {
851
+ "enabled": false,
852
+ "markers": [
853
+ {
854
+ "key": "draft",
855
+ "value": "true"
856
+ }
857
+ ]
858
+ },
859
+ "description": "Configuration for skipping files based on front matter markers",
860
+ "order": 15
861
+ }
862
+ }
863
+ }
864
+ },
865
+ "repository": {
866
+ "type": "git",
867
+ "url": "https://github.com/Project-Translation/project_translator"
868
+ },
869
+ "files": [
870
+ "out/cli.js",
871
+ "prompts/**",
872
+ "l10n/**",
873
+ "package.nls*.json",
874
+ "project.translation.schema.json",
875
+ "resources/project-translator.png",
876
+ "README.md",
877
+ "LICENSE"
878
+ ],
879
+ "scripts": {
880
+ "build": "npm run esbuild:extension -- --production && npm run esbuild:cli -- --production",
881
+ "compile": "npm run esbuild:extension && npm run esbuild:cli",
882
+ "compile-tsc": "tsc -p ./",
883
+ "watch-tsc": "tsc -watch -p ./",
884
+ "watch": "npm run watch:extension",
885
+ "watch:extension": "npm run esbuild:extension -- --watch",
886
+ "watch:cli": "npm run esbuild:cli -- --watch",
887
+ "esbuild-base": "node esbuild.extension.config.js",
888
+ "esbuild:extension": "node esbuild.extension.config.js",
889
+ "esbuild:cli": "node esbuild.cli.config.js",
890
+ "lint": "eslint src --ext ts",
891
+ "test": "npm run compile-tsc && node ./out/test/simpleRunner.js",
892
+ "test-compile": "tsc -p ./",
893
+ "pretest": "npm run test-compile",
894
+ "publish:minor": "npm run build && npx @vscode/vsce publish minor --baseContentUrl https://github.com/Project-Translation/project_translator/tree/main --dependencies",
895
+ "publish:patch": "npm run build && npx @vscode/vsce publish patch --baseContentUrl https://github.com/Project-Translation/project_translator/tree/main --dependencies",
896
+ "pack:npm": "npm run build && npm pack",
897
+ "publish:npm": "npm run build && npm publish --access public",
898
+ "publish:ovsx": "node scripts/ovsx-publish.mjs",
899
+ "package": "npm run build && npx @vscode/vsce package --baseContentUrl https://github.com/Project-Translation/project_translator/tree/main --dependencies",
900
+ "deps:install": "npm install --no-fund",
901
+ "update": "npm update --no-fund"
902
+ },
903
+ "devDependencies": {
904
+ "@eslint/js": "^9.23.0",
905
+ "@types/chai": "^5.0.1",
906
+ "@types/mocha": "^10.0.10",
907
+ "@types/node": "^14.18.63",
908
+ "@types/sinon": "^17.0.4",
909
+ "@types/vscode": "^1.74.0",
910
+ "@typescript-eslint/eslint-plugin": "^8.28.0",
911
+ "@typescript-eslint/parser": "^8.28.0",
912
+ "@vscode/vsce": "^3.6.0",
913
+ "chai": "^5.2.0",
914
+ "esbuild": "^0.25.1",
915
+ "eslint": "^9.23.0",
916
+ "mocha": "^11.5.0",
917
+ "ovsx": "^0.10.6",
918
+ "sinon": "^20.0.0",
919
+ "ts-loader": "^9.5.2",
920
+ "ts-node": "^10.9.2",
921
+ "typescript": "^4.0.0"
922
+ },
923
+ "dependencies": {
924
+ "axios": "^1.13.5",
925
+ "bindings": "^1.5.0",
926
+ "commander": "^14.0.1",
927
+ "diff": "^5.2.2",
928
+ "diff-match-patch": "^1.0.5",
929
+ "glob": "^11.0.1",
930
+ "isbinaryfile": "^5.0.0",
931
+ "jsonc-parser": "^3.3.1",
932
+ "minimatch": "^10.0.1",
933
+ "openai": "^4.85.3"
934
+ },
935
+ "overrides": {
936
+ "qs": "6.14.1"
937
+ },
938
+ "capabilities": {
939
+ "virtualWorkspaces": true
940
+ },
941
+ "permissions": [
942
+ "machineId"
943
+ ]
944
+ }