dsh-claude-style 0.16.0-dev.27 → 0.16.1-dev.31

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +3 -2
  3. package/README.en.md +1 -0
  4. package/README.md +6 -0
  5. package/THIRD_PARTY_NOTICES.md +2 -0
  6. package/docs/FEATURES.en.md +4 -3
  7. package/docs/FEATURES.md +4 -3
  8. package/docs/SETTINGS.en.md +12 -6
  9. package/docs/SETTINGS.md +12 -6
  10. package/docs/STYLE.md +40 -1
  11. package/lib/assets/0443f196403b.js.br +0 -0
  12. package/lib/assets/39f1a2e69bb7.js.br +0 -0
  13. package/lib/assets/4d55814bc60a.js.br +0 -0
  14. package/lib/assets/6c257991027d.js.br +0 -0
  15. package/lib/assets/9abad5da303e.js.br +0 -0
  16. package/lib/assets/b55a1acf34e0.js.br +0 -0
  17. package/lib/assets/d2064c247435.js.br +0 -0
  18. package/lib/assets/manifest.json +28 -28
  19. package/lib/client.js +37 -11
  20. package/lib/host/brand.js +70 -1
  21. package/lib/host/cache-file.js +63 -25
  22. package/lib/host/harness-home.js +7 -3
  23. package/lib/host/index.js +4 -1
  24. package/lib/host/package-root.js +15 -13
  25. package/lib/host/peakrate.js +7 -4
  26. package/lib/host/routes.js +164 -72
  27. package/lib/host/search.js +44 -2
  28. package/lib/host/settings.js +137 -43
  29. package/lib/host/usage-record.js +5 -2
  30. package/lib/host/usage.js +57 -5
  31. package/lib/model-descriptions.json +0 -1322
  32. package/package.json +1 -1
  33. package/lib/assets/1cefeb3d67c7.js.br +0 -0
  34. package/lib/assets/1da1959a3cb1.js.br +0 -0
  35. package/lib/assets/2c3bd0b6c22c.js.br +0 -0
  36. package/lib/assets/34d559377558.js.br +0 -0
  37. package/lib/assets/acf9cf79c43e.js.br +0 -0
  38. package/lib/assets/b7ec75cf39a7.js.br +0 -0
  39. package/lib/assets/dab5fb383802.js.br +0 -0
  40. package/lib/host/http.js +0 -74
  41. package/lib/host/session-events.js +0 -40
@@ -1,1328 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
3
  "fallback": "en",
4
- "ui": {
5
- "fallbackLabel": {
6
- "zh": "选择模型",
7
- "en": "Select model"
8
- },
9
- "triggerLabel": {
10
- "zh": "选择模型,当前 {model}",
11
- "en": "Select model, currently {model}"
12
- },
13
- "loading": {
14
- "zh": "正在加载模型…",
15
- "en": "Loading models…"
16
- },
17
- "empty": {
18
- "zh": "没有可用的模型。",
19
- "en": "No models available."
20
- },
21
- "effortLabel": {
22
- "zh": "推理等级",
23
- "en": "Reasoning effort"
24
- },
25
- "effortFaster": {
26
- "zh": "更快",
27
- "en": "Faster"
28
- },
29
- "effortSmarter": {
30
- "zh": "更强",
31
- "en": "Smarter"
32
- },
33
- "moreLabel": {
34
- "zh": "更多模型",
35
- "en": "More models"
36
- },
37
- "ratePeak": {
38
- "zh": "峰价",
39
- "en": "Peak rate"
40
- },
41
- "rateOffPeak": {
42
- "zh": "谷价",
43
- "en": "Off-peak rate"
44
- },
45
- "rateCampaign": {
46
- "zh": "活动价",
47
- "en": "Promotion"
48
- },
49
- "rateNow": {
50
- "zh": "此刻 {rate}",
51
- "en": "Now {rate}"
52
- },
53
- "rateNext": {
54
- "zh": "{countdown} 后转为 {next}",
55
- "en": "in {countdown} → {next}"
56
- },
57
- "archiveActive": {
58
- "zh": "进行中",
59
- "en": "Active"
60
- },
61
- "archiveArchived": {
62
- "zh": "已归档",
63
- "en": "Archived"
64
- },
65
- "archiveDelete": {
66
- "zh": "删除会话",
67
- "en": "Delete conversation"
68
- },
69
- "archiveRestore": {
70
- "zh": "取消归档",
71
- "en": "Unarchive conversation"
72
- },
73
- "archiveEmpty": {
74
- "zh": "没有已归档的会话",
75
- "en": "No archived conversations"
76
- },
77
- "archiveLoading": {
78
- "zh": "正在加载…",
79
- "en": "Loading…"
80
- },
81
- "archiveJustNow": {
82
- "zh": "刚刚",
83
- "en": "Just now"
84
- },
85
- "archiveMinutes": {
86
- "zh": "{count} 分钟",
87
- "en": "{count} min"
88
- },
89
- "archiveHours": {
90
- "zh": "{count} 小时",
91
- "en": "{count} h"
92
- },
93
- "archiveDays": {
94
- "zh": "{count} 天",
95
- "en": "{count} d"
96
- },
97
- "archiveDeleteFailed": {
98
- "zh": "删除失败:{detail}",
99
- "en": "Delete failed: {detail}"
100
- },
101
- "archiveDeleteOpen": {
102
- "zh": "会话仍被本应用占用,重启后再删除",
103
- "en": "The conversation is still held open by this app; restart it, then delete again"
104
- },
105
- "searchPlaceholder": {
106
- "zh": "搜索",
107
- "en": "Search"
108
- },
109
- "surfaceSwitch": {
110
- "zh": "界面",
111
- "en": "Interface"
112
- },
113
- "surfaceChat": {
114
- "zh": "聊天",
115
- "en": "Chat"
116
- },
117
- "surfaceCode": {
118
- "zh": "代码",
119
- "en": "Code"
120
- },
121
- "searchClose": {
122
- "zh": "关闭",
123
- "en": "Close"
124
- },
125
- "searchFilterHint": {
126
- "zh": "切换分类",
127
- "en": "Filters"
128
- },
129
- "searchOpenHint": {
130
- "zh": "打开",
131
- "en": "Open"
132
- },
133
- "searchFilterAll": {
134
- "zh": "全部",
135
- "en": "All"
136
- },
137
- "searchFilterSessions": {
138
- "zh": "会话",
139
- "en": "Sessions"
140
- },
141
- "searchFilterProjects": {
142
- "zh": "项目",
143
- "en": "Projects"
144
- },
145
- "searchFilterPlugins": {
146
- "zh": "插件",
147
- "en": "Plugins"
148
- },
149
- "searchFilterSkills": {
150
- "zh": "Skill",
151
- "en": "Skills"
152
- },
153
- "searchFilterShortcuts": {
154
- "zh": "快捷键",
155
- "en": "Shortcuts"
156
- },
157
- "searchRecents": {
158
- "zh": "最近",
159
- "en": "Recents"
160
- },
161
- "searchActions": {
162
- "zh": "操作",
163
- "en": "Actions"
164
- },
165
- "searchSessions": {
166
- "zh": "会话",
167
- "en": "Sessions"
168
- },
169
- "searchProjects": {
170
- "zh": "项目",
171
- "en": "Projects"
172
- },
173
- "searchPlugins": {
174
- "zh": "插件",
175
- "en": "Plugins"
176
- },
177
- "searchSkills": {
178
- "zh": "Skill",
179
- "en": "Skills"
180
- },
181
- "searchShortcuts": {
182
- "zh": "快捷键",
183
- "en": "Shortcuts"
184
- },
185
- "searchActionNewSession": {
186
- "zh": "新会话",
187
- "en": "New session"
188
- },
189
- "searchActionPlugins": {
190
- "zh": "插件",
191
- "en": "Plugins"
192
- },
193
- "searchActionSettings": {
194
- "zh": "设置",
195
- "en": "Settings"
196
- },
197
- "searchActionShortcuts": {
198
- "zh": "键盘快捷键",
199
- "en": "Keyboard shortcuts"
200
- },
201
- "searchLoading": {
202
- "zh": "正在搜索…",
203
- "en": "Searching…"
204
- },
205
- "searchEmpty": {
206
- "zh": "没有匹配的结果",
207
- "en": "No results"
208
- },
209
- "chatWaitThinking": {
210
- "zh": "正在思考",
211
- "en": "Thinking…"
212
- },
213
- "chatWaitWriting": {
214
- "zh": "正在写回答",
215
- "en": "Writing…"
216
- },
217
- "chatWaitToolCall": {
218
- "zh": "正在准备工具调用",
219
- "en": "Preparing a tool call…"
220
- },
221
- "chatWaitTools": {
222
- "zh": "正在调用工具",
223
- "en": "Running tools…"
224
- },
225
- "chatWaitReading": {
226
- "zh": "正在读取 {file}",
227
- "en": "Reading {file}"
228
- },
229
- "chatWaitEditing": {
230
- "zh": "正在编辑 {file}",
231
- "en": "Editing {file}"
232
- },
233
- "chatWaitWritingFile": {
234
- "zh": "正在写入 {file}",
235
- "en": "Writing {file}"
236
- },
237
- "homeTabOverview": {
238
- "zh": "概览",
239
- "en": "Overview"
240
- },
241
- "homeTabModels": {
242
- "zh": "模型",
243
- "en": "Models"
244
- },
245
- "homeRangeAll": {
246
- "zh": "全部",
247
- "en": "All"
248
- },
249
- "homeRange30d": {
250
- "zh": "30 天",
251
- "en": "30d"
252
- },
253
- "homeRange7d": {
254
- "zh": "7 天",
255
- "en": "7d"
256
- },
257
- "homePeakHour": {
258
- "zh": "高峰时段",
259
- "en": "Peak hour"
260
- },
261
- "homeHourAm": {
262
- "zh": "上午 {hour} 点",
263
- "en": "{hour} AM"
264
- },
265
- "homeHourPm": {
266
- "zh": "下午 {hour} 点",
267
- "en": "{hour} PM"
268
- },
269
- "homeFunBook": {
270
- "zh": "你的Token用量相当于{count}本{book}。",
271
- "en": "You've used ~{count}× the tokens in {book}."
272
- },
273
- "homeBookAnimalFarm": {
274
- "zh": "《动物农场》",
275
- "en": "Animal Farm"
276
- },
277
- "homeBookGatsby": {
278
- "zh": "《了不起的盖茨比》",
279
- "en": "The Great Gatsby"
280
- },
281
- "homeBookPhilosophersStone": {
282
- "zh": "《哈利·波特与魔法石》",
283
- "en": "Harry Potter and the Philosopher's Stone"
284
- },
285
- "homeBook1984": {
286
- "zh": "《一九八四》",
287
- "en": "Nineteen Eighty-Four"
288
- },
289
- "homeBookHobbit": {
290
- "zh": "《霍比特人》",
291
- "en": "The Hobbit"
292
- },
293
- "homeBookPride": {
294
- "zh": "《傲慢与偏见》",
295
- "en": "Pride and Prejudice"
296
- },
297
- "homeBookMobyDick": {
298
- "zh": "《白鲸》",
299
- "en": "Moby-Dick"
300
- },
301
- "homeBookLordOfTheRings": {
302
- "zh": "《魔戒》",
303
- "en": "The Lord of the Rings"
304
- },
305
- "homeBookWarAndPeace": {
306
- "zh": "《战争与和平》",
307
- "en": "War and Peace"
308
- },
309
- "homeBookHarryPotter": {
310
- "zh": "《哈利·波特》全集",
311
- "en": "the whole Harry Potter series"
312
- },
313
- "homeBookLostTime": {
314
- "zh": "《追忆似水年华》",
315
- "en": "In Search of Lost Time"
316
- },
317
- "homeBookTaoTeChing": {
318
- "zh": "《道德经》",
319
- "en": "Tao Te Ching"
320
- },
321
- "homeBookAlice": {
322
- "zh": "《爱丽丝漫游奇境》",
323
- "en": "Alice's Adventures in Wonderland"
324
- },
325
- "homeBookChristmasCarol": {
326
- "zh": "《圣诞颂歌》",
327
- "en": "A Christmas Carol"
328
- },
329
- "homeBookFrankenstein": {
330
- "zh": "《弗兰肯斯坦》",
331
- "en": "Frankenstein"
332
- },
333
- "homeBookDorianGray": {
334
- "zh": "《道林·格雷的画像》",
335
- "en": "The Picture of Dorian Gray"
336
- },
337
- "homeBookToLive": {
338
- "zh": "《活着》",
339
- "en": "To Live"
340
- },
341
- "homeBookSherlockHolmes": {
342
- "zh": "《福尔摩斯冒险史》",
343
- "en": "The Adventures of Sherlock Holmes"
344
- },
345
- "homeBookHuckleberryFinn": {
346
- "zh": "《哈克贝利·费恩历险记》",
347
- "en": "Adventures of Huckleberry Finn"
348
- },
349
- "homeBookThreeBody": {
350
- "zh": "《三体》",
351
- "en": "The Three-Body Problem"
352
- },
353
- "homeBookDracula": {
354
- "zh": "《德古拉》",
355
- "en": "Dracula"
356
- },
357
- "homeBookJaneEyre": {
358
- "zh": "《简·爱》",
359
- "en": "Jane Eyre"
360
- },
361
- "homeBookDarkForest": {
362
- "zh": "《三体Ⅱ·黑暗森林》",
363
- "en": "The Dark Forest"
364
- },
365
- "homeBookDeathsEnd": {
366
- "zh": "《三体Ⅲ·死神永生》",
367
- "en": "Death's End"
368
- },
369
- "homeBookThreeKingdoms": {
370
- "zh": "《三国演义》",
371
- "en": "Romance of the Three Kingdoms"
372
- },
373
- "homeBookJourneyWest": {
374
- "zh": "《西游记》",
375
- "en": "Journey to the West"
376
- },
377
- "homeBookRedChamber": {
378
- "zh": "《红楼梦》",
379
- "en": "Dream of the Red Chamber"
380
- },
381
- "homeBookWaterMargin": {
382
- "zh": "《水浒传》",
383
- "en": "Water Margin"
384
- },
385
- "homeBookOrdinaryWorld": {
386
- "zh": "《平凡的世界》",
387
- "en": "Ordinary World"
388
- },
389
- "homeBookYellowWallpaper": {
390
- "zh": "《黄色壁纸》",
391
- "en": "The Yellow Wallpaper"
392
- },
393
- "homeBookMetamorphosis": {
394
- "zh": "《变形记》",
395
- "en": "Metamorphosis"
396
- },
397
- "homeBookJekyllAndHyde": {
398
- "zh": "《化身博士》",
399
- "en": "The Strange Case of Dr Jekyll and Mr Hyde"
400
- },
401
- "homeBookCallOfTheWild": {
402
- "zh": "《野性的呼唤》",
403
- "en": "The Call of the Wild"
404
- },
405
- "homeBookTimeMachine": {
406
- "zh": "《时间机器》",
407
- "en": "The Time Machine"
408
- },
409
- "homeBookWizardOfOz": {
410
- "zh": "《绿野仙踪》",
411
- "en": "The Wonderful Wizard of Oz"
412
- },
413
- "homeBookHeartOfDarkness": {
414
- "zh": "《黑暗之心》",
415
- "en": "Heart of Darkness"
416
- },
417
- "homeBookFaust": {
418
- "zh": "《浮士德》",
419
- "en": "Faust"
420
- },
421
- "homeBookTurnOfTheScrew": {
422
- "zh": "《螺丝在拧紧》",
423
- "en": "The Turn of the Screw"
424
- },
425
- "homeBookAesopsFables": {
426
- "zh": "《伊索寓言》",
427
- "en": "Aesop's Fables"
428
- },
429
- "homeBookPeterPan": {
430
- "zh": "《彼得·潘》",
431
- "en": "Peter Pan"
432
- },
433
- "homeBookPrince": {
434
- "zh": "《君主论》",
435
- "en": "The Prince"
436
- },
437
- "homeBookInvisibleMan": {
438
- "zh": "《隐形人》",
439
- "en": "The Invisible Man"
440
- },
441
- "homeBookAndersensFairyTales": {
442
- "zh": "《安徒生童话》",
443
- "en": "Andersen's Fairy Tales"
444
- },
445
- "homeBookWarOfTheWorlds": {
446
- "zh": "《世界大战》",
447
- "en": "The War of the Worlds"
448
- },
449
- "homeBookBeyondGoodAndEvil": {
450
- "zh": "《善恶的彼岸》",
451
- "en": "Beyond Good and Evil"
452
- },
453
- "homeBookWhiteFang": {
454
- "zh": "《白牙》",
455
- "en": "White Fang"
456
- },
457
- "homeBookMeditations": {
458
- "zh": "《沉思录》",
459
- "en": "Meditations"
460
- },
461
- "homeBookGrimmsFairyTales": {
462
- "zh": "《格林童话》",
463
- "en": "Grimms' Fairy Tales"
464
- },
465
- "homeBookGulliversTravels": {
466
- "zh": "《格列佛游记》",
467
- "en": "Gulliver's Travels"
468
- },
469
- "homeBookWalden": {
470
- "zh": "《瓦尔登湖》",
471
- "en": "Walden"
472
- },
473
- "homeBookRobinsonCrusoe": {
474
- "zh": "《鲁滨逊漂流记》",
475
- "en": "Robinson Crusoe"
476
- },
477
- "homeBookDivineComedy": {
478
- "zh": "《神曲》",
479
- "en": "The Divine Comedy"
480
- },
481
- "homeBookMadameBovary": {
482
- "zh": "《包法利夫人》",
483
- "en": "Madame Bovary"
484
- },
485
- "homeBookZarathustra": {
486
- "zh": "《查拉图斯特拉如是说》",
487
- "en": "Thus Spoke Zarathustra"
488
- },
489
- "homeBookOdyssey": {
490
- "zh": "《奥德赛》",
491
- "en": "The Odyssey"
492
- },
493
- "homeBookTaleOfTwoCities": {
494
- "zh": "《双城记》",
495
- "en": "A Tale of Two Cities"
496
- },
497
- "homeBookGreatExpectations": {
498
- "zh": "《远大前程》",
499
- "en": "Great Expectations"
500
- },
501
- "homeBookRepublic": {
502
- "zh": "《理想国》",
503
- "en": "The Republic"
504
- },
505
- "homeBookCrimeAndPunishment": {
506
- "zh": "《罪与罚》",
507
- "en": "Crime and Punishment"
508
- },
509
- "homeBookLeviathan": {
510
- "zh": "《利维坦》",
511
- "en": "Leviathan"
512
- },
513
- "homeBookAnnaKarenina": {
514
- "zh": "《安娜·卡列尼娜》",
515
- "en": "Anna Karenina"
516
- },
517
- "homeBookBrothersKaramazov": {
518
- "zh": "《卡拉马佐夫兄弟》",
519
- "en": "The Brothers Karamazov"
520
- },
521
- "homeBookDonQuixote": {
522
- "zh": "《堂吉诃德》",
523
- "en": "Don Quixote"
524
- },
525
- "homeBookCountOfMonteCristo": {
526
- "zh": "《基督山伯爵》",
527
- "en": "The Count of Monte Cristo"
528
- },
529
- "homeBookLesMiserables": {
530
- "zh": "《悲惨世界》",
531
- "en": "Les Misérables"
532
- },
533
- "homeModelSessions": {
534
- "zh": "{count} 个会话",
535
- "en": "{count} sessions"
536
- },
537
- "homeModelsEmpty": {
538
- "zh": "暂无模型数据",
539
- "en": "No model data yet"
540
- },
541
- "homeModelsMore": {
542
- "zh": "再显示 {count} 个",
543
- "en": "Show {count} more"
544
- },
545
- "homeModelsLess": {
546
- "zh": "收起",
547
- "en": "Show less"
548
- },
549
- "homeTokens": {
550
- "zh": "Token 总量",
551
- "en": "Total tokens"
552
- },
553
- "homeCalls": {
554
- "zh": "消息数",
555
- "en": "Messages"
556
- },
557
- "homeSessions": {
558
- "zh": "会话数",
559
- "en": "Sessions"
560
- },
561
- "homeActiveDays": {
562
- "zh": "活跃天数",
563
- "en": "Active days"
564
- },
565
- "homeTopModel": {
566
- "zh": "最常用模型",
567
- "en": "Favorite model"
568
- },
569
- "homeHeatTipTokens": {
570
- "zh": "{date} — {tokens} Token",
571
- "en": "{date} — {tokens} tokens"
572
- },
573
- "contextTotalTime": {
574
- "zh": "总用时",
575
- "en": "Total time"
576
- },
577
- "processSummaryThinking": {
578
- "zh": "思考×{count}",
579
- "en": "Thinking×{count}"
580
- },
581
- "processSummaryOutput": {
582
- "zh": "输出×{count}",
583
- "en": "Output×{count}"
584
- },
585
- "processSummaryTool": {
586
- "zh": "工具×{count}",
587
- "en": "Tools×{count}"
588
- },
589
- "processSummaryRecord": {
590
- "zh": "记录×{count}",
591
- "en": "Records×{count}"
592
- },
593
- "processSummaryFullThoughtOne": {
594
- "zh": "执行 {count} 次思考",
595
- "en": "{count} thought"
596
- },
597
- "processSummaryFullThoughtOther": {
598
- "zh": "执行 {count} 次思考",
599
- "en": "{count} thoughts"
600
- },
601
- "processSummaryFullOutputOne": {
602
- "zh": "输出 {count} 段文字",
603
- "en": "{count} output"
604
- },
605
- "processSummaryFullOutputOther": {
606
- "zh": "输出 {count} 段文字",
607
- "en": "{count} outputs"
608
- },
609
- "processSummaryFullToolOne": {
610
- "zh": "调用 {count} 次工具",
611
- "en": "{count} tool call"
612
- },
613
- "processSummaryFullToolOther": {
614
- "zh": "调用 {count} 次工具",
615
- "en": "{count} tool calls"
616
- },
617
- "processSummaryFullRecordOne": {
618
- "zh": "记录 {count} 条",
619
- "en": "{count} record"
620
- },
621
- "processSummaryFullRecordOther": {
622
- "zh": "记录 {count} 条",
623
- "en": "{count} records"
624
- },
625
- "processSummaryFullSeparator": {
626
- "zh": ",",
627
- "en": ", "
628
- },
629
- "chatWaitOvertime": {
630
- "zh": "暂未响应",
631
- "en": "No response yet"
632
- },
633
- "fileRowMergedOperations": {
634
- "zh": "同一文件的 {count} 次操作合并为这一行",
635
- "en": "{count} calls on the same file are merged into this row"
636
- },
637
- "accountNameFallback": {
638
- "zh": "用户",
639
- "en": "User"
640
- },
641
- "accountSettingsRow": {
642
- "zh": "设置",
643
- "en": "Settings"
644
- },
645
- "footerPluginRow": {
646
- "zh": "插件",
647
- "en": "Plugin"
648
- },
649
- "permissionGroupLabel": {
650
- "zh": "权限",
651
- "en": "Permission"
652
- }
653
- },
654
- "settings": {
655
- "title": {
656
- "zh": "Claude Style",
657
- "en": "Claude Style"
658
- },
659
- "repository": {
660
- "zh": "在 GitHub 上打开本插件",
661
- "en": "Open the plugin on GitHub"
662
- },
663
- "brandTitle": {
664
- "zh": "主题风格",
665
- "en": "Theme style"
666
- },
667
- "brandDesc": {
668
- "zh": "插件提供的品牌标识和配色色系风格。",
669
- "en": "The brand mark and its colour family: warm for Claude, blue for DeepSeek. While Colours follows the host, only the mark changes."
670
- },
671
- "collapseTitle": {
672
- "zh": "折叠侧栏设置区",
673
- "en": "Collapse the sidebar settings area"
674
- },
675
- "collapseDesc": {
676
- "zh": "将侧栏底部的设置入口收进账户弹层。",
677
- "en": "Fold the sidebar footer's settings entry into the account popover. Off restores the host's footer."
678
- },
679
- "autoPopoverTitle": {
680
- "zh": "悬停展开弹层",
681
- "en": "Open popovers on hover"
682
- },
683
- "autoPopoverDesc": {
684
- "zh": "本插件提供的哪些弹层悬停时便展开。",
685
- "en": "Which popovers open on hover: the account popover alone, or also the permission, model, session-stats and home-page pickers."
686
- },
687
- "autoPopoverOff": {
688
- "zh": "关闭",
689
- "en": "Off"
690
- },
691
- "autoPopoverAccount": {
692
- "zh": "仅账号区",
693
- "en": "Account only"
694
- },
695
- "autoPopoverAll": {
696
- "zh": "全部",
697
- "en": "All"
698
- },
699
- "composerTitle": {
700
- "zh": "重绘对话框",
701
- "en": "Composer restyle"
702
- },
703
- "composerDesc": {
704
- "zh": "重绘对话框样式",
705
- "en": "Which input area the skin restyles: the new-conversation page, the conversation, or both. Off restores the host's composer."
706
- },
707
- "homeTitle": {
708
- "zh": "首页版面",
709
- "en": "Home layout"
710
- },
711
- "homeDesc": {
712
- "zh": "新会话页的排版",
713
- "en": "The new-conversation page layout. Classic centers the hero and input card; Studio pins the composer to the bottom and shows usage."
714
- },
715
- "homeClassic": {
716
- "zh": "经典",
717
- "en": "Classic"
718
- },
719
- "homeStudio": {
720
- "zh": "工作台",
721
- "en": "Studio"
722
- },
723
- "pickerTitle": {
724
- "zh": "重绘模型选择器",
725
- "en": "Redraw the model picker"
726
- },
727
- "pickerDesc": {
728
- "zh": "重绘对话框区域的模型菜单。",
729
- "en": "Replace the composer's model menu with the two-level Claude-style menu. Off restores the host's model menu."
730
- },
731
- "modelDescriptionsTitle": {
732
- "zh": "模型描述",
733
- "en": "Model descriptions"
734
- },
735
- "modelDescriptionsDesc": {
736
- "zh": "一级列表的每个模型下面写一行说明,讲这个模型是什么。关闭后每一行只剩模型名。",
737
- "en": "A line under each model in the picker's first level saying what it is. Off leaves every row with the model's name alone."
738
- },
739
- "peakrateTitle": {
740
- "zh": "峰谷电表",
741
- "en": "Peak rate meter"
742
- },
743
- "peakrateDesc": {
744
- "zh": "给模型菜单的每一行标出此刻的峰价、谷价或限时活动,以及距离切换还有多久。关闭后各行只显示模型名。",
745
- "en": "Marks every row of the model menu with the peak, off-peak or promotional rate in force right now, and how long it lasts. Off leaves the rows bare."
746
- },
747
- "quickTitle": {
748
- "zh": "快捷供应商",
749
- "en": "Quick providers"
750
- },
751
- "quickDesc": {
752
- "zh": "在一级列表展示勾选的供应商。",
753
- "en": "Picked providers follow the official service in the picker's first level; one removed from the catalog stays marked \"Removed\" until unchecked."
754
- },
755
- "quickNone": {
756
- "zh": "未选择",
757
- "en": "None"
758
- },
759
- "quickCount": {
760
- "zh": "{count} 个供应商",
761
- "en": "{count} providers"
762
- },
763
- "quickLoading": {
764
- "zh": "正在加载模型目录…",
765
- "en": "Loading providers…"
766
- },
767
- "quickRemoved": {
768
- "zh": "已移除",
769
- "en": "Removed"
770
- },
771
- "usernameTitle": {
772
- "zh": "用户名",
773
- "en": "Username"
774
- },
775
- "usernameDesc": {
776
- "zh": "用户名会显示在欢迎语和账号行里。",
777
- "en": "The name shown in the greeting and the account row; empty falls back to the signed-in account, then the launcher, then the system user."
778
- },
779
- "usernamePlaceholder": {
780
- "zh": "自动获取",
781
- "en": "Auto-detect account or host user"
782
- },
783
- "brandDeepseek": {
784
- "zh": "DeepSeek",
785
- "en": "DeepSeek"
786
- },
787
- "brandClaude": {
788
- "zh": "Claude",
789
- "en": "Claude"
790
- },
791
- "brandNameTitle": {
792
- "zh": "品牌名称",
793
- "en": "Brand name"
794
- },
795
- "brandNameDesc": {
796
- "zh": "替换侧栏顶部的品牌文字;留空时显示所选品牌自己的文字标志。",
797
- "en": "Replaces the brand text at the top of the sidebar. Leave empty to keep the chosen brand's own wordmark."
798
- },
799
- "brandNamePlaceholder": {
800
- "zh": "所选品牌",
801
- "en": "The chosen brand"
802
- },
803
- "brandMarkTitle": {
804
- "zh": "标志图片",
805
- "en": "Brand mark"
806
- },
807
- "brandMarkDesc": {
808
- "zh": "替换侧栏顶部、折叠栏、新会话页与账号行兜底头像上的品牌标志。PNG、SVG 或 WebP,不超过 2 MB。",
809
- "en": "Replaces the brand mark in the sidebar, the collapsed rail, the home page and the account row's fallback picture. PNG, SVG or WebP, up to 2 MB."
810
- },
811
- "brandWordmarkTitle": {
812
- "zh": "文字标志",
813
- "en": "Wordmark"
814
- },
815
- "brandWordmarkDesc": {
816
- "zh": "替换标志旁的品牌名称,宽度按图片比例随高度换算,优先于品牌名称。PNG、SVG 或 WebP,不超过 2 MB。",
817
- "en": "Replaces the brand name beside the mark, sized from the image's proportions, and wins over the brand name. PNG, SVG or WebP, up to 2 MB."
818
- },
819
- "brandImageUpload": {
820
- "zh": "上传",
821
- "en": "Upload"
822
- },
823
- "brandImageReplace": {
824
- "zh": "更换",
825
- "en": "Replace"
826
- },
827
- "brandImageRemove": {
828
- "zh": "移除",
829
- "en": "Remove"
830
- },
831
- "brandImageType": {
832
- "zh": "只接受 PNG、SVG 或 WebP 图片。",
833
- "en": "Only PNG, SVG or WebP images are accepted."
834
- },
835
- "brandImageSize": {
836
- "zh": "图片超过 2 MB。",
837
- "en": "The image is larger than 2 MB."
838
- },
839
- "brandImageFailed": {
840
- "zh": "保存失败:{detail}",
841
- "en": "Saving failed: {detail}"
842
- },
843
- "brandInkTitle": {
844
- "zh": "图片颜色",
845
- "en": "Image colours"
846
- },
847
- "brandInkDesc": {
848
- "zh": "「原色」保留图片自己的颜色;「文字色」把图片当作形状,按所在位置的文字颜色上色,亮色暗色下都看得清。",
849
- "en": "Original keeps the images' own colours; Text colour fills each image with the text colour where it stands, legible in light and dark."
850
- },
851
- "brandInkOriginal": {
852
- "zh": "原色",
853
- "en": "Original"
854
- },
855
- "brandInkText": {
856
- "zh": "文字色",
857
- "en": "Text colour"
858
- },
859
- "brandAccentTitle": {
860
- "zh": "强调色",
861
- "en": "Accent colour"
862
- },
863
- "brandAccentDesc": {
864
- "zh": "按钮、选中标记、链接与焦点环使用的颜色;未指定时沿用所选品牌的强调色。配色选「跟随宿主」时不生效。",
865
- "en": "The colour of buttons, selected marks, links and focus rings; unset keeps the brand's own. No effect while Colours follows the host."
866
- },
867
- "brandAccentUnset": {
868
- "zh": "跟随品牌",
869
- "en": "Brand's own"
870
- },
871
- "brandAccentReset": {
872
- "zh": "恢复品牌强调色",
873
- "en": "Use the brand's accent"
874
- },
875
- "motionTitle": {
876
- "zh": "动画效果",
877
- "en": "Animation"
878
- },
879
- "motionDesc": {
880
- "zh": "请按需调整动画效果。动画会给设备带来渲染压力。",
881
- "en": "Adjust the animation as you need: animations put rendering pressure on the device."
882
- },
883
- "motionSystem": {
884
- "zh": "随系统",
885
- "en": "Follow the system"
886
- },
887
- "motionReduced": {
888
- "zh": "减弱",
889
- "en": "Reduced"
890
- },
891
- "motionFull": {
892
- "zh": "总是",
893
- "en": "Always"
894
- },
895
- "scopeOff": {
896
- "zh": "关闭",
897
- "en": "Off"
898
- },
899
- "scopeHero": {
900
- "zh": "仅首页",
901
- "en": "Home only"
902
- },
903
- "scopeConversation": {
904
- "zh": "仅对话",
905
- "en": "Conversation only"
906
- },
907
- "scopeAll": {
908
- "zh": "全部",
909
- "en": "All"
910
- },
911
- "banLocaleTitle": {
912
- "zh": "封号彩蛋",
913
- "en": "Account-hold easter egg"
914
- },
915
- "banLocaleDesc": {
916
- "zh": "点账户弹层顶部的用户名行打开的彩蛋页,按这里选的语言显示;关闭后用户名行只显示名字。",
917
- "en": "The account row in the account popover opens a replica of Claude's account-hold page, in the language chosen here; Off leaves a plain name."
918
- },
919
- "banLocaleOff": {
920
- "zh": "关闭",
921
- "en": "Off"
922
- },
923
- "banLocaleZh": {
924
- "zh": "中文",
925
- "en": "中文"
926
- },
927
- "banLocaleEn": {
928
- "zh": "English",
929
- "en": "English"
930
- },
931
- "tabGeneral": {
932
- "zh": "通用",
933
- "en": "General"
934
- },
935
- "tabAppearance": {
936
- "zh": "外观",
937
- "en": "Appearance"
938
- },
939
- "tabComposer": {
940
- "zh": "输入区",
941
- "en": "Composer"
942
- },
943
- "tabSidebar": {
944
- "zh": "侧栏",
945
- "en": "Sidebar"
946
- },
947
- "tabConversation": {
948
- "zh": "对话",
949
- "en": "Conversation"
950
- },
951
- "tabMotion": {
952
- "zh": "动效",
953
- "en": "Motion"
954
- },
955
- "statusMotionTitle": {
956
- "zh": "状态行动画",
957
- "en": "Waiting-line animation"
958
- },
959
- "statusMotionSweep": {
960
- "zh": "扫光",
961
- "en": "Highlight sweep"
962
- },
963
- "statusMotionWash": {
964
- "zh": "渐变流动",
965
- "en": "Colour wash"
966
- },
967
- "composerRequired": {
968
- "zh": "「重绘对话框」为「关闭」时不生效。",
969
- "en": "No effect while Composer restyle is Off."
970
- },
971
- "statsComposerRequired": {
972
- "zh": "只在「重绘对话框」覆盖对话页时生效。",
973
- "en": "Takes effect only while Composer restyle covers the conversation."
974
- },
975
- "paletteTitle": {
976
- "zh": "配色",
977
- "en": "Colours"
978
- },
979
- "paletteDesc": {
980
- "zh": "允许插件修改主题配色,关闭后只保留布局和控件。",
981
- "en": "Claude uses the skin's own colours; Follow the host leaves colours to DSH or other theme plugins and keeps only layout and controls."
982
- },
983
- "paletteClaude": {
984
- "zh": "开启",
985
- "en": "Claude"
986
- },
987
- "paletteHost": {
988
- "zh": "关闭",
989
- "en": "Follow the host"
990
- },
991
- "typefaceTitle": {
992
- "zh": "字体",
993
- "en": "Typefaces"
994
- },
995
- "typefaceDesc": {
996
- "zh": "使用插件提供的字体。",
997
- "en": "Claude uses the Anthropic faces (or the Inter and Noto Serif stand-ins) with JetBrains Mono for code; Follow the host keeps the fonts DSH sets."
998
- },
999
- "typefaceClaude": {
1000
- "zh": "开启",
1001
- "en": "Claude"
1002
- },
1003
- "typefaceHost": {
1004
- "zh": "关闭",
1005
- "en": "Follow the host"
1006
- },
1007
- "mascotTitle": {
1008
- "zh": "吉祥物",
1009
- "en": "Mascot"
1010
- },
1011
- "mascotDesc": {
1012
- "zh": "站在输入框上沿的像素小伙伴。",
1013
- "en": "The pixel companion on the input area's top edge, animated by the agent's state. Follow the brand picks the crab under Claude, Deepy under DeepSeek."
1014
- },
1015
- "mascotBrand": {
1016
- "zh": "自动",
1017
- "en": "Follow the brand"
1018
- },
1019
- "mascotCrab": {
1020
- "zh": "Clawd",
1021
- "en": "Crab"
1022
- },
1023
- "mascotDeepy": {
1024
- "zh": "Deepy",
1025
- "en": "Deepy"
1026
- },
1027
- "mascotOff": {
1028
- "zh": "关闭",
1029
- "en": "Off"
1030
- },
1031
- "mascotScopeTitle": {
1032
- "zh": "出现位置",
1033
- "en": "Where it appears"
1034
- },
1035
- "mascotScopeDesc": {
1036
- "zh": "吉祥物出现位置。",
1037
- "en": "The new-conversation page alone, or the new-conversation page and the conversation."
1038
- },
1039
- "mascotScopeHome": {
1040
- "zh": "首页",
1041
- "en": "Home"
1042
- },
1043
- "mascotScopeAll": {
1044
- "zh": "首页与对话",
1045
- "en": "Home and conversation"
1046
- },
1047
- "permissionsTitle": {
1048
- "zh": "重绘权限控件",
1049
- "en": "Redraw the permission control"
1050
- },
1051
- "permissionsDesc": {
1052
- "zh": "使用插件自己的权限控件;关闭后交还宿主的权限菜单。",
1053
- "en": "Use the skin's own permission control; Off restores the host's permission menu."
1054
- },
1055
- "searchTitle": {
1056
- "zh": "侧栏搜索",
1057
- "en": "Sidebar search"
1058
- },
1059
- "searchDesc": {
1060
- "zh": "使用插件提供的搜索框功能和逻辑。",
1061
- "en": "A search box in the sidebar that finds sessions, projects, plugins, Skills and shortcuts. Off restores the host's brand row."
1062
- },
1063
- "searchStyleTitle": {
1064
- "zh": "搜索框样式",
1065
- "en": "Search box style"
1066
- },
1067
- "searchStyleDesc": {
1068
- "zh": "搜索框放在哪里:盖过品牌、品牌行下单独一行,或只保留宿主的搜索图标。",
1069
- "en": "Where the search box stands: over the brand, on a row of its own, or as the host's own search icon."
1070
- },
1071
- "searchStyleIcon": {
1072
- "zh": "图标",
1073
- "en": "Icon"
1074
- },
1075
- "searchStyleOverlay": {
1076
- "zh": "覆盖品牌",
1077
- "en": "Cover the brand"
1078
- },
1079
- "searchStyleStandalone": {
1080
- "zh": "独立",
1081
- "en": "Standalone"
1082
- },
1083
- "workspaceTitle": {
1084
- "zh": "工作区分栏视图",
1085
- "en": "In progress / Archived view"
1086
- },
1087
- "workspaceDesc": {
1088
- "zh": "把侧栏工作区分成「进行中」和「已归档」。",
1089
- "en": "Split the sidebar's workspace section into In progress and Archived; archived conversations can be restored or deleted. Off restores the host's workspace list."
1090
- },
1091
- "dockCardsTitle": {
1092
- "zh": "面板悬浮卡片",
1093
- "en": "Float docked panels"
1094
- },
1095
- "dockCardsDesc": {
1096
- "zh": "把右侧栏停靠的面板画成悬浮卡片;关闭后铺满整列、贴住四边。",
1097
- "en": "Draws the right sidebar's docked panels as floating cards; Off fills the column edge to edge."
1098
- },
1099
- "sidebarLayoutTitle": {
1100
- "zh": "左侧栏布局",
1101
- "en": "Sidebar layout"
1102
- },
1103
- "sidebarLayoutDesc": {
1104
- "zh": "调整左侧栏的紧凑程度:「紧凑」收紧行高、间距与账号区内边距。",
1105
- "en": "How tight the sidebar is: Relaxed is the default look; Compact trims row heights, gaps and padding."
1106
- },
1107
- "sidebarLayoutRelaxed": {
1108
- "zh": "宽松",
1109
- "en": "Relaxed"
1110
- },
1111
- "sidebarLayoutCompact": {
1112
- "zh": "紧凑",
1113
- "en": "Compact"
1114
- },
1115
- "turnNavTitle": {
1116
- "zh": "对话导航",
1117
- "en": "Conversation navigator"
1118
- },
1119
- "turnNavDesc": {
1120
- "zh": "重绘对话导航区域。",
1121
- "en": "Hover the turn marks at the conversation's right edge to open a list of every turn; the wheel scrolls it, a click jumps over. Alt+↑ / Alt+↓ jump between turns. Off restores the host's turn marks."
1122
- },
1123
- "chatAnimationsTitle": {
1124
- "zh": "聊天区滚动动画",
1125
- "en": "Chat-area scrolling animation"
1126
- },
1127
- "chatAnimationsDesc": {
1128
- "zh": "滚动展示助手消息并进行可读性优化",
1129
- "en": "Scrolls the assistant's messages into view and makes them easier to read"
1130
- },
1131
- "statsPositionTitle": {
1132
- "zh": "对话统计信息位置",
1133
- "en": "Conversation statistics position"
1134
- },
1135
- "statsLineLabel": {
1136
- "zh": "对话统计信息",
1137
- "en": "Conversation statistics"
1138
- },
1139
- "statsPositionDesc": {
1140
- "zh": "「收进上下文」把会话数字放进上下文圆环的弹层;「独立成行」写在输入卡片下面一行,末尾是圆环。",
1141
- "en": "Inside the context popover puts the session's figures in the ring's panel; On its own line writes them under the input card, ending in the ring."
1142
- },
1143
- "statsPositionContext": {
1144
- "zh": "收进上下文",
1145
- "en": "Inside the context popover"
1146
- },
1147
- "statsPositionInline": {
1148
- "zh": "独立成行",
1149
- "en": "On its own line"
1150
- },
1151
- "caretTitle": {
1152
- "zh": "光标动画",
1153
- "en": "Composer caret motion"
1154
- },
1155
- "caretOn": {
1156
- "zh": "开",
1157
- "en": "On"
1158
- },
1159
- "caretOff": {
1160
- "zh": "关",
1161
- "en": "Off"
1162
- },
1163
- "caretSample": {
1164
- "zh": "Hello World!",
1165
- "en": "Hello World!"
1166
- },
1167
- "chatRevealTitle": {
1168
- "zh": "新文字淡入",
1169
- "en": "New-text fade"
1170
- },
1171
- "chatRevealOn": {
1172
- "zh": "淡入",
1173
- "en": "Fade in"
1174
- },
1175
- "chatRevealOff": {
1176
- "zh": "直接出现",
1177
- "en": "Appears at once"
1178
- },
1179
- "chatRevealSample": {
1180
- "zh": "新到的字先淡后实",
1181
- "en": "New characters fade in"
1182
- },
1183
- "messageEnterTitle": {
1184
- "zh": "消息气泡动画",
1185
- "en": "Message bubble animation"
1186
- },
1187
- "messageEnterGrow": {
1188
- "zh": "在原地长出来",
1189
- "en": "Grows into its place"
1190
- },
1191
- "messageEnterFlight": {
1192
- "zh": "从输入框飞上来",
1193
- "en": "Flies up from the composer"
1194
- },
1195
- "messageEnterSampleStar": {
1196
- "zh": "帮我给dsh-claude-style点个star",
1197
- "en": "Star dsh-claude-style for me"
1198
- },
1199
- "messageEnterSampleIssue": {
1200
- "zh": "帮我给dsh-claude-style提个issue",
1201
- "en": "File an issue for dsh-claude-style"
1202
- },
1203
- "messageEnterSamplePr": {
1204
- "zh": "帮我给dsh-claude-style提个pr",
1205
- "en": "Open a PR on dsh-claude-style"
1206
- },
1207
- "statusDetailTitle": {
1208
- "zh": "精确状态行",
1209
- "en": "Precise status line"
1210
- },
1211
- "statusDetailDesc": {
1212
- "zh": "开着时状态行写具体在做什么:正在操作的文件、命令声明的描述或推理里的原句;关掉只写状态本身。",
1213
- "en": "Simple names the running turn's state alone; Precise adds the file a call works on, a command's declared description or a clause from the reasoning."
1214
- },
1215
- "statusDetailSimple": {
1216
- "zh": "简洁",
1217
- "en": "Simple"
1218
- },
1219
- "statusDetailPrecise": {
1220
- "zh": "精确",
1221
- "en": "Precise"
1222
- },
1223
- "chatUxManaged": {
1224
- "zh": "该选项由插件 dsh-chat-ux 管理",
1225
- "en": "Managed by dsh-chat-ux"
1226
- },
1227
- "viewTabsTitle": {
1228
- "zh": "重绘标签条",
1229
- "en": "Chat / Trajectory tabs"
1230
- },
1231
- "viewTabsDesc": {
1232
- "zh": "重绘对话区界面的标签条。",
1233
- "en": "Redraw the Chat / Trajectory tab strip at the top of the conversation, lifted onto the title's line when it fits. Off restores the host's tab strip."
1234
- },
1235
- "headerBandTitle": {
1236
- "zh": "标题进入顶栏",
1237
- "en": "Header in the title bar"
1238
- },
1239
- "headerBandDesc": {
1240
- "zh": "Windows 桌面端把会话标题与顶栏那一行的控件抬进窗口的标题栏,放不下的一侧留在原来的行里。",
1241
- "en": "On the Windows desktop the session title and the header's controls rise into the window's caption row, and a side without room stays in the header's own row."
1242
- },
1243
- "windowsOnlyNote": {
1244
- "zh": "只在 Windows 桌面端的窗口里生效。",
1245
- "en": "Takes effect in the Windows desktop window only."
1246
- },
1247
- "unavailable": {
1248
- "zh": "ERROR : 设置存储服务异常,改动不会被保存。",
1249
- "en": "The settings store is unavailable, so changes will not be saved."
1250
- },
1251
- "remoteReadOnly": {
1252
- "zh": "此页面经远程地址连接 DSH,DSH 只保存从 localhost 等本机地址打开的页面所做的改动。这里显示的是 DSH 当前的设置,请在运行 DSH 的电脑上修改。",
1253
- "en": "This page reaches DSH through a remote address, and DSH saves settings only from a page opened at a local address such as localhost. The values shown are the ones DSH holds; change them on the computer running DSH."
1254
- }
1255
- },
1256
- "ban": {
1257
- "signOut": {
1258
- "zh": "退出登录",
1259
- "en": "Sign out"
1260
- },
1261
- "title": {
1262
- "zh": "你的账户已被暂停",
1263
- "en": "Your account is on hold"
1264
- },
1265
- "lead": {
1266
- "zh": "由于活动异常,我们已于 <strong>{time}</strong> 暂停你的账户。你的对话与数据都还在。",
1267
- "en": "We put your account on hold on <strong>{time}</strong> because of unusual activity. Your chats and data are safe."
1268
- },
1269
- "leadError": {
1270
- "zh": "如果你认为这次暂停是误判,可以申请账户复核。",
1271
- "en": "If you think this hold is an error, you can request an account review."
1272
- },
1273
- "nextLabel": {
1274
- "zh": "接下来会发生什么:",
1275
- "en": "What happens next:"
1276
- },
1277
- "step1Title": {
1278
- "zh": "提交复核申请",
1279
- "en": "Request a review"
1280
- },
1281
- "step1Desc": {
1282
- "zh": "告诉我们当时发生了什么。",
1283
- "en": "Tell us more about what happened."
1284
- },
1285
- "step2Title": {
1286
- "zh": "我们会复核你的账户",
1287
- "en": "We’ll review your account"
1288
- },
1289
- "step2Desc": {
1290
- "zh": "团队成员会把你的申请与账户活动放在一起复核。",
1291
- "en": "A team member will review your request and account activity together."
1292
- },
1293
- "step3Title": {
1294
- "zh": "我们会把结果邮件给你",
1295
- "en": "We’ll email you the outcome"
1296
- },
1297
- "step3Desc": {
1298
- "zh": "复核大约需要 10 天。",
1299
- "en": "Reviews take about 10 days."
1300
- },
1301
- "review": {
1302
- "zh": "申请复核",
1303
- "en": "Request a review"
1304
- },
1305
- "whatYouCanDo": {
1306
- "zh": "你可以做的事",
1307
- "en": "What you can do"
1308
- },
1309
- "exportTitle": {
1310
- "zh": "导出你的数据",
1311
- "en": "Export your data"
1312
- },
1313
- "exportDesc": {
1314
- "zh": "我们会把你的对话、项目和设置打包供你下载。这可能需要一些时间。",
1315
- "en": "We’ll package up your conversations, projects, and settings for download. This might take some time to complete."
1316
- },
1317
- "deleteTitle": {
1318
- "zh": "删除你的账户",
1319
- "en": "Delete your account"
1320
- },
1321
- "deleteDesc": {
1322
- "zh": "你可以永久删除账户与数据。此操作不可撤销。",
1323
- "en": "You can permanently delete your account and data. This can’t be undone."
1324
- }
1325
- },
1326
4
  "brands": {
1327
5
  "note": "Which brand mark a row shows. Every id names a vendored lockup in packages/assets/src/icons/combine/; scripts/build.mjs fails the build on an id that is not there. This is presentation data, kept out of the bundle like the rest of this document, and it is separate from the copy rules above: a vendor's mark and a vendor's description line change for different reasons. `providers` is deliberately empty: a model no rule claims draws **no** lockup rather than its provider's, because the reseller's own lockup on a model it did not make reads as a wrong answer rather than a missing one. `models` is an ordered, anchored rule list resolved against the model id, exactly like `families` and with the same discipline: first match wins, so a broad rule must sit below the narrow ones and every rule must name its vendor (`step` cannot match `step-3.7-flash` by accident only if no earlier rule already claimed it). A brand with no lockup renders the label without a mark.",
1328
6
  "providers": {},