@huanlin/dsh-plugin-merge-tool-calls 0.1.1 → 0.2.1

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/lib/client.js CHANGED
@@ -40,6 +40,525 @@ const DEFAULT_MERGE_CONFIG = {
40
40
  maxGroupSize: 8
41
41
  };
42
42
 
43
+ //#endregion
44
+ //#region src/client/dictionaries.ts
45
+ /** All override-language dictionaries for the `NS` namespace. */
46
+ const dicts = {
47
+ ja: {
48
+ running: "実行中",
49
+ failed: "失敗",
50
+ stopped: "中断",
51
+ expand: "展開",
52
+ collapse: "折りたたむ",
53
+ more: "+{n}",
54
+ showLess: "残りを閉じる",
55
+ mergedCount: "{n} 回の呼び出しを統合",
56
+ countFiles: "{n} 個のファイル",
57
+ countQueries: "{n} 回の検索",
58
+ countCommands: "{n} 個のコマンド",
59
+ countPrograms: "{n} 個のプログラム",
60
+ countCalls: "{n} 回の呼び出し",
61
+ "terminal.signal": "シグナル {signal}",
62
+ "terminal.exitCode": "終了コード {code}",
63
+ "terminal.running": "実行中",
64
+ "terminal.failed": "失敗",
65
+ "terminal.done": "完了",
66
+ "terminal.copy": "コピー",
67
+ "terminal.copied": "コピーしました",
68
+ "terminal.noOutput": "出力なし",
69
+ "terminal.collapseAria": "出力を折りたたむ",
70
+ "terminal.collapse": "折りたたむ",
71
+ "terminal.expandAria": "残り {n} 行の出力を展開",
72
+ "terminal.expandRest": "… 残り {n} 行"
73
+ },
74
+ de: {
75
+ running: "Läuft",
76
+ failed: "Fehlgeschlagen",
77
+ stopped: "Unterbrochen",
78
+ expand: "Erweitern",
79
+ collapse: "Einklappen",
80
+ more: "+{n}",
81
+ showLess: "Weniger anzeigen",
82
+ mergedCount: "{n} Aufrufe zusammengeführt",
83
+ countFiles: "{n} Dateien",
84
+ countQueries: "{n} Suchanfragen",
85
+ countCommands: "{n} Befehle",
86
+ countPrograms: "{n} Programme",
87
+ countCalls: "{n} Aufrufe",
88
+ "terminal.signal": "Signal {signal}",
89
+ "terminal.exitCode": "Exit-Code {code}",
90
+ "terminal.running": "Läuft",
91
+ "terminal.failed": "Fehlgeschlagen",
92
+ "terminal.done": "Abgeschlossen",
93
+ "terminal.copy": "Kopieren",
94
+ "terminal.copied": "Kopiert",
95
+ "terminal.noOutput": "Keine Ausgabe",
96
+ "terminal.collapseAria": "Ausgabe einklappen",
97
+ "terminal.collapse": "Einklappen",
98
+ "terminal.expandAria": "Die restlichen {n} Ausgabezeilen ausklappen",
99
+ "terminal.expandRest": "… {n} weitere Zeilen"
100
+ },
101
+ fr: {
102
+ running: "En cours",
103
+ failed: "Échec",
104
+ stopped: "Interrompu",
105
+ expand: "Développer",
106
+ collapse: "Réduire",
107
+ more: "+{n}",
108
+ showLess: "Afficher moins",
109
+ mergedCount: "{n} appels fusionnés",
110
+ countFiles: "{n} fichiers",
111
+ countQueries: "{n} recherches",
112
+ countCommands: "{n} commandes",
113
+ countPrograms: "{n} programmes",
114
+ countCalls: "{n} appels",
115
+ "terminal.signal": "Signal {signal}",
116
+ "terminal.exitCode": "Code de sortie {code}",
117
+ "terminal.running": "En cours",
118
+ "terminal.failed": "Échec",
119
+ "terminal.done": "Terminé",
120
+ "terminal.copy": "Copier",
121
+ "terminal.copied": "Copié",
122
+ "terminal.noOutput": "Aucune sortie",
123
+ "terminal.collapseAria": "Réduire la sortie",
124
+ "terminal.collapse": "Réduire",
125
+ "terminal.expandAria": "Déployer les {n} lignes de sortie restantes",
126
+ "terminal.expandRest": "… {n} lignes restantes"
127
+ },
128
+ pt: {
129
+ running: "Executando",
130
+ failed: "Falhou",
131
+ stopped: "Interrompido",
132
+ expand: "Expandir",
133
+ collapse: "Recolher",
134
+ more: "+{n}",
135
+ showLess: "Mostrar menos",
136
+ mergedCount: "{n} chamadas mescladas",
137
+ countFiles: "{n} arquivos",
138
+ countQueries: "{n} pesquisas",
139
+ countCommands: "{n} comandos",
140
+ countPrograms: "{n} programas",
141
+ countCalls: "{n} chamadas",
142
+ "terminal.signal": "sinal {signal}",
143
+ "terminal.exitCode": "código de saída {code}",
144
+ "terminal.running": "Executando",
145
+ "terminal.failed": "Falhou",
146
+ "terminal.done": "Concluído",
147
+ "terminal.copy": "Copiar",
148
+ "terminal.copied": "Copiado",
149
+ "terminal.noOutput": "Sem saída",
150
+ "terminal.collapseAria": "Recolher saída",
151
+ "terminal.collapse": "Recolher",
152
+ "terminal.expandAria": "Expandir as {n} linhas de saída restantes",
153
+ "terminal.expandRest": "… mais {n} linhas"
154
+ },
155
+ ko: {
156
+ running: "실행 중",
157
+ failed: "실패",
158
+ stopped: "중단됨",
159
+ expand: "펼치기",
160
+ collapse: "접기",
161
+ more: "+{n}",
162
+ showLess: "더 적게 표시",
163
+ mergedCount: "{n}번 호출 병합됨",
164
+ countFiles: "파일 {n}개",
165
+ countQueries: "검색 {n}회",
166
+ countCommands: "명령 {n}개",
167
+ countPrograms: "프로그램 {n}개",
168
+ countCalls: "호출 {n}회",
169
+ "terminal.signal": "신호 {signal}",
170
+ "terminal.exitCode": "종료 코드 {code}",
171
+ "terminal.running": "실행 중",
172
+ "terminal.failed": "실패",
173
+ "terminal.done": "완료",
174
+ "terminal.copy": "복사",
175
+ "terminal.copied": "복사됨",
176
+ "terminal.noOutput": "출력 없음",
177
+ "terminal.collapseAria": "출력 접기",
178
+ "terminal.collapse": "접기",
179
+ "terminal.expandAria": "나머지 {n}줄 출력 펼치기",
180
+ "terminal.expandRest": "… 나머지 {n}줄"
181
+ },
182
+ ar: {
183
+ running: "قيد التشغيل",
184
+ failed: "فشل",
185
+ stopped: "متوقف",
186
+ expand: "توسيع",
187
+ collapse: "طي",
188
+ more: "+{n}",
189
+ showLess: "إظهار أقل",
190
+ mergedCount: "تم دمج {n} استدعاء",
191
+ countFiles: "{n} ملف",
192
+ countQueries: "{n} بحث",
193
+ countCommands: "{n} أمر",
194
+ countPrograms: "{n} برنامج",
195
+ countCalls: "{n} استدعاء",
196
+ "terminal.signal": "إشارة {signal}",
197
+ "terminal.exitCode": "رمز الخروج {code}",
198
+ "terminal.running": "قيد التشغيل",
199
+ "terminal.failed": "فشل",
200
+ "terminal.done": "اكتمل",
201
+ "terminal.copy": "نسخ",
202
+ "terminal.copied": "تم النسخ",
203
+ "terminal.noOutput": "لا يوجد إخراج",
204
+ "terminal.collapseAria": "طي الإخراج",
205
+ "terminal.collapse": "طي",
206
+ "terminal.expandAria": "توسيع {n} أسطر إخراج المتبقية",
207
+ "terminal.expandRest": "… و{n} أسطر أخرى"
208
+ },
209
+ hi: {
210
+ running: "चल रहा",
211
+ failed: "विफल",
212
+ stopped: "रोका गया",
213
+ expand: "विस्तार करें",
214
+ collapse: "संक्षिप्त करें",
215
+ more: "+{n}",
216
+ showLess: "कम दिखाएं",
217
+ mergedCount: "{n} कॉल मर्ज किए गए",
218
+ countFiles: "{n} फ़ाइलें",
219
+ countQueries: "{n} खोज",
220
+ countCommands: "{n} कमांड",
221
+ countPrograms: "{n} प्रोग्राम",
222
+ countCalls: "{n} कॉल",
223
+ "terminal.signal": "सिग्नल {signal}",
224
+ "terminal.exitCode": "एग्ज़िट कोड {code}",
225
+ "terminal.running": "चल रहा",
226
+ "terminal.failed": "विफल",
227
+ "terminal.done": "पूर्ण",
228
+ "terminal.copy": "कॉपी",
229
+ "terminal.copied": "कॉपी हो गया",
230
+ "terminal.noOutput": "कोई आउटपुट नहीं",
231
+ "terminal.collapseAria": "आउटपुट संक्षिप्त करें",
232
+ "terminal.collapse": "संक्षिप्त करें",
233
+ "terminal.expandAria": "शेष {n} आउटपुट पंक्तियाँ विस्तृत करें",
234
+ "terminal.expandRest": "… {n} और पंक्तियाँ"
235
+ },
236
+ id: {
237
+ running: "Berjalan",
238
+ failed: "Gagal",
239
+ stopped: "Dihentikan",
240
+ expand: "Bentangkan",
241
+ collapse: "Lipat",
242
+ more: "+{n}",
243
+ showLess: "Tampilkan lebih sedikit",
244
+ mergedCount: "{n} panggilan digabungkan",
245
+ countFiles: "{n} file",
246
+ countQueries: "{n} pencarian",
247
+ countCommands: "{n} perintah",
248
+ countPrograms: "{n} program",
249
+ countCalls: "{n} panggilan",
250
+ "terminal.signal": "sinyal {signal}",
251
+ "terminal.exitCode": "kode keluar {code}",
252
+ "terminal.running": "Berjalan",
253
+ "terminal.failed": "Gagal",
254
+ "terminal.done": "Selesai",
255
+ "terminal.copy": "Salin",
256
+ "terminal.copied": "Tersalin",
257
+ "terminal.noOutput": "Tidak ada keluaran",
258
+ "terminal.collapseAria": "Lipat keluaran",
259
+ "terminal.collapse": "Lipat",
260
+ "terminal.expandAria": "Bentangkan {n} baris keluaran tersisa",
261
+ "terminal.expandRest": "… {n} baris lagi"
262
+ },
263
+ tr: {
264
+ running: "Çalışıyor",
265
+ failed: "Başarısız",
266
+ stopped: "Durduruldu",
267
+ expand: "Genişlet",
268
+ collapse: "Daralt",
269
+ more: "+{n}",
270
+ showLess: "Daha az göster",
271
+ mergedCount: "{n} çağrı birleştirildi",
272
+ countFiles: "{n} dosya",
273
+ countQueries: "{n} arama",
274
+ countCommands: "{n} komut",
275
+ countPrograms: "{n} program",
276
+ countCalls: "{n} çağrı",
277
+ "terminal.signal": "sinyal {signal}",
278
+ "terminal.exitCode": "çıkış kodu {code}",
279
+ "terminal.running": "Çalışıyor",
280
+ "terminal.failed": "Başarısız",
281
+ "terminal.done": "Tamamlandı",
282
+ "terminal.copy": "Kopyala",
283
+ "terminal.copied": "Kopyalandı",
284
+ "terminal.noOutput": "Çıkış yok",
285
+ "terminal.collapseAria": "Çıkışı daralt",
286
+ "terminal.collapse": "Daralt",
287
+ "terminal.expandAria": "Kalan {n} çıkış satırını genişlet",
288
+ "terminal.expandRest": "… {n} satır daha"
289
+ },
290
+ vi: {
291
+ running: "Đang chạy",
292
+ failed: "Thất bại",
293
+ stopped: "Đã dừng",
294
+ expand: "Mở rộng",
295
+ collapse: "Thu gọn",
296
+ more: "+{n}",
297
+ showLess: "Hiển thị ít hơn",
298
+ mergedCount: "Đã gộp {n} lệnh gọi",
299
+ countFiles: "{n} tệp",
300
+ countQueries: "{n} lượt tìm kiếm",
301
+ countCommands: "{n} lệnh",
302
+ countPrograms: "{n} chương trình",
303
+ countCalls: "{n} lượt gọi",
304
+ "terminal.signal": "tín hiệu {signal}",
305
+ "terminal.exitCode": "mã thoát {code}",
306
+ "terminal.running": "Đang chạy",
307
+ "terminal.failed": "Thất bại",
308
+ "terminal.done": "Đã xong",
309
+ "terminal.copy": "Sao chép",
310
+ "terminal.copied": "Đã sao chép",
311
+ "terminal.noOutput": "Không có đầu ra",
312
+ "terminal.collapseAria": "Thu gọn đầu ra",
313
+ "terminal.collapse": "Thu gọn",
314
+ "terminal.expandAria": "Mở rộng {n} dòng đầu ra còn lại",
315
+ "terminal.expandRest": "… còn {n} dòng"
316
+ },
317
+ th: {
318
+ running: "กำลังทำงาน",
319
+ failed: "ล้มเหลว",
320
+ stopped: "ถูกขัดจังหวะ",
321
+ expand: "ขยาย",
322
+ collapse: "ย่อ",
323
+ more: "+{n}",
324
+ showLess: "แสดงน้อยลง",
325
+ mergedCount: "รวม {n} การเรียก",
326
+ countFiles: "{n} ไฟล์",
327
+ countQueries: "{n} การค้นหา",
328
+ countCommands: "{n} คำสั่ง",
329
+ countPrograms: "{n} โปรแกรม",
330
+ countCalls: "{n} การเรียก",
331
+ "terminal.signal": "สัญญาณ {signal}",
332
+ "terminal.exitCode": "รหัสออก {code}",
333
+ "terminal.running": "กำลังทำงาน",
334
+ "terminal.failed": "ล้มเหลว",
335
+ "terminal.done": "เสร็จสิ้น",
336
+ "terminal.copy": "คัดลอก",
337
+ "terminal.copied": "คัดลอกแล้ว",
338
+ "terminal.noOutput": "ไม่มีเอาต์พุต",
339
+ "terminal.collapseAria": "ย่อเอาต์พุต",
340
+ "terminal.collapse": "ย่อ",
341
+ "terminal.expandAria": "ขยายเอาต์พุตอีก {n} บรรทัด",
342
+ "terminal.expandRest": "… อีก {n} บรรทัด"
343
+ },
344
+ ru: {
345
+ running: "Выполняется",
346
+ failed: "Сбой",
347
+ stopped: "Прервано",
348
+ expand: "Развернуть",
349
+ collapse: "Свернуть",
350
+ more: "+{n}",
351
+ showLess: "Показать меньше",
352
+ mergedCount: "Объединено вызовов: {n}",
353
+ countFiles: "{n} файлов",
354
+ countQueries: "{n} поисков",
355
+ countCommands: "{n} команд",
356
+ countPrograms: "{n} программ",
357
+ countCalls: "{n} вызовов",
358
+ "terminal.signal": "сигнал {signal}",
359
+ "terminal.exitCode": "код выхода {code}",
360
+ "terminal.running": "Выполняется",
361
+ "terminal.failed": "Сбой",
362
+ "terminal.done": "Завершено",
363
+ "terminal.copy": "Копировать",
364
+ "terminal.copied": "Скопировано",
365
+ "terminal.noOutput": "Нет вывода",
366
+ "terminal.collapseAria": "Свернуть вывод",
367
+ "terminal.collapse": "Свернуть",
368
+ "terminal.expandAria": "Показать оставшиеся {n} строк вывода",
369
+ "terminal.expandRest": "… ещё {n} строк"
370
+ },
371
+ it: {
372
+ running: "In esecuzione",
373
+ failed: "Non riuscito",
374
+ stopped: "Interrotto",
375
+ expand: "Espandi",
376
+ collapse: "Comprimi",
377
+ more: "+{n}",
378
+ showLess: "Mostra meno",
379
+ mergedCount: "{n} chiamate unite",
380
+ countFiles: "{n} file",
381
+ countQueries: "{n} ricerche",
382
+ countCommands: "{n} comandi",
383
+ countPrograms: "{n} programmi",
384
+ countCalls: "{n} chiamate",
385
+ "terminal.signal": "segnale {signal}",
386
+ "terminal.exitCode": "codice di uscita {code}",
387
+ "terminal.running": "In esecuzione",
388
+ "terminal.failed": "Non riuscito",
389
+ "terminal.done": "Completato",
390
+ "terminal.copy": "Copia",
391
+ "terminal.copied": "Copiato",
392
+ "terminal.noOutput": "Nessun output",
393
+ "terminal.collapseAria": "Comprimi output",
394
+ "terminal.collapse": "Comprimi",
395
+ "terminal.expandAria": "Espandi le restanti {n} righe di output",
396
+ "terminal.expandRest": "… altre {n} righe"
397
+ },
398
+ nl: {
399
+ running: "Actief",
400
+ failed: "Mislukt",
401
+ stopped: "Onderbroken",
402
+ expand: "Uitklappen",
403
+ collapse: "Inklappen",
404
+ more: "+{n}",
405
+ showLess: "Minder tonen",
406
+ mergedCount: "{n} aanroepen samengevoegd",
407
+ countFiles: "{n} bestanden",
408
+ countQueries: "{n} zoekopdrachten",
409
+ countCommands: "{n} opdrachten",
410
+ countPrograms: "{n} programma's",
411
+ countCalls: "{n} aanroepen",
412
+ "terminal.signal": "signaal {signal}",
413
+ "terminal.exitCode": "exit-code {code}",
414
+ "terminal.running": "Actief",
415
+ "terminal.failed": "Mislukt",
416
+ "terminal.done": "Voltooid",
417
+ "terminal.copy": "Kopiëren",
418
+ "terminal.copied": "Gekopieerd",
419
+ "terminal.noOutput": "Geen uitvoer",
420
+ "terminal.collapseAria": "Uitvoer inklappen",
421
+ "terminal.collapse": "Inklappen",
422
+ "terminal.expandAria": "De overige {n} uitvoerregels uitklappen",
423
+ "terminal.expandRest": "… nog {n} regels"
424
+ },
425
+ sv: {
426
+ running: "Kör",
427
+ failed: "Misslyckades",
428
+ stopped: "Avbruten",
429
+ expand: "Expandera",
430
+ collapse: "Komprimera",
431
+ more: "+{n}",
432
+ showLess: "Visa mindre",
433
+ mergedCount: "{n} anrop sammanslagna",
434
+ countFiles: "{n} filer",
435
+ countQueries: "{n} sökningar",
436
+ countCommands: "{n} kommandon",
437
+ countPrograms: "{n} program",
438
+ countCalls: "{n} anrop",
439
+ "terminal.signal": "signal {signal}",
440
+ "terminal.exitCode": "slutkod {code}",
441
+ "terminal.running": "Kör",
442
+ "terminal.failed": "Misslyckades",
443
+ "terminal.done": "Klar",
444
+ "terminal.copy": "Kopiera",
445
+ "terminal.copied": "Kopierades",
446
+ "terminal.noOutput": "Ingen utdata",
447
+ "terminal.collapseAria": "Komprimera utdata",
448
+ "terminal.collapse": "Komprimera",
449
+ "terminal.expandAria": "Expandera de återstående {n} utdataraderna",
450
+ "terminal.expandRest": "… {n} fler rader"
451
+ },
452
+ pl: {
453
+ running: "Działa",
454
+ failed: "Nie powiodło się",
455
+ stopped: "Przerwano",
456
+ expand: "Rozwiń",
457
+ collapse: "Zwiń",
458
+ more: "+{n}",
459
+ showLess: "Pokaż mniej",
460
+ mergedCount: "Połączono {n} wywołań",
461
+ countFiles: "{n} plików",
462
+ countQueries: "{n} wyszukań",
463
+ countCommands: "{n} poleceń",
464
+ countPrograms: "{n} programów",
465
+ countCalls: "{n} wywołań",
466
+ "terminal.signal": "sygnał {signal}",
467
+ "terminal.exitCode": "kod wyjścia {code}",
468
+ "terminal.running": "Działa",
469
+ "terminal.failed": "Nie powiodło się",
470
+ "terminal.done": "Ukończono",
471
+ "terminal.copy": "Kopiuj",
472
+ "terminal.copied": "Skopiowano",
473
+ "terminal.noOutput": "Brak wyjścia",
474
+ "terminal.collapseAria": "Zwiń wyjście",
475
+ "terminal.collapse": "Zwiń",
476
+ "terminal.expandAria": "Rozwiń pozostałe {n} wierszy wyjścia",
477
+ "terminal.expandRest": "…jeszcze {n} wierszy"
478
+ },
479
+ "zh-HK": {
480
+ running: "執行中",
481
+ failed: "失敗",
482
+ stopped: "已中斷",
483
+ expand: "展開",
484
+ collapse: "收起",
485
+ more: "+{n}",
486
+ showLess: "收起其餘",
487
+ mergedCount: "已合併 {n} 次呼叫",
488
+ countFiles: "{n} 個檔案",
489
+ countQueries: "{n} 次搜尋",
490
+ countCommands: "{n} 條命令",
491
+ countPrograms: "{n} 段程式碼",
492
+ countCalls: "{n} 次呼叫",
493
+ "terminal.signal": "訊號 {signal}",
494
+ "terminal.exitCode": "退出碼 {code}",
495
+ "terminal.running": "執行中",
496
+ "terminal.failed": "失敗",
497
+ "terminal.done": "已完成",
498
+ "terminal.copy": "複製",
499
+ "terminal.copied": "已複製",
500
+ "terminal.noOutput": "無輸出",
501
+ "terminal.collapseAria": "收起輸出",
502
+ "terminal.collapse": "收起",
503
+ "terminal.expandAria": "展開其餘 {n} 行輸出",
504
+ "terminal.expandRest": "… 其餘 {n} 行"
505
+ },
506
+ "zh-TW": {
507
+ running: "執行中",
508
+ failed: "失敗",
509
+ stopped: "已中斷",
510
+ expand: "展開",
511
+ collapse: "收起",
512
+ more: "+{n}",
513
+ showLess: "收起其餘",
514
+ mergedCount: "已合併 {n} 次呼叫",
515
+ countFiles: "{n} 個檔案",
516
+ countQueries: "{n} 次搜尋",
517
+ countCommands: "{n} 條命令",
518
+ countPrograms: "{n} 段程式碼",
519
+ countCalls: "{n} 次呼叫",
520
+ "terminal.signal": "訊號 {signal}",
521
+ "terminal.exitCode": "退出碼 {code}",
522
+ "terminal.running": "執行中",
523
+ "terminal.failed": "失敗",
524
+ "terminal.done": "已完成",
525
+ "terminal.copy": "複製",
526
+ "terminal.copied": "已複製",
527
+ "terminal.noOutput": "無輸出",
528
+ "terminal.collapseAria": "收起輸出",
529
+ "terminal.collapse": "收起",
530
+ "terminal.expandAria": "展開其餘 {n} 行輸出",
531
+ "terminal.expandRest": "… 其餘 {n} 行"
532
+ },
533
+ "zh-MO": {
534
+ running: "執行中",
535
+ failed: "失敗",
536
+ stopped: "已中斷",
537
+ expand: "展開",
538
+ collapse: "收起",
539
+ more: "+{n}",
540
+ showLess: "收起其餘",
541
+ mergedCount: "已合併 {n} 次呼叫",
542
+ countFiles: "{n} 個檔案",
543
+ countQueries: "{n} 次搜尋",
544
+ countCommands: "{n} 條命令",
545
+ countPrograms: "{n} 段程式碼",
546
+ countCalls: "{n} 次呼叫",
547
+ "terminal.signal": "訊號 {signal}",
548
+ "terminal.exitCode": "退出碼 {code}",
549
+ "terminal.running": "執行中",
550
+ "terminal.failed": "失敗",
551
+ "terminal.done": "已完成",
552
+ "terminal.copy": "複製",
553
+ "terminal.copied": "已複製",
554
+ "terminal.noOutput": "無輸出",
555
+ "terminal.collapseAria": "收起輸出",
556
+ "terminal.collapse": "收起",
557
+ "terminal.expandAria": "展開其餘 {n} 行輸出",
558
+ "terminal.expandRest": "… 其餘 {n} 行"
559
+ }
560
+ };
561
+
43
562
  //#endregion
44
563
  //#region src/client/locales.ts
45
564
  /** Product copy for the merged tool-call rows. */
@@ -52,6 +571,11 @@ const zh = {
52
571
  more: "+{n}",
53
572
  showLess: "收起其余",
54
573
  mergedCount: "已合并 {n} 次调用",
574
+ countFiles: "{n} 个文件",
575
+ countQueries: "{n} 次搜索",
576
+ countCommands: "{n} 条命令",
577
+ countPrograms: "{n} 段代码",
578
+ countCalls: "{n} 次调用",
55
579
  "terminal.signal": "信号 {signal}",
56
580
  "terminal.exitCode": "退出码 {code}",
57
581
  "terminal.running": "运行中",
@@ -74,6 +598,11 @@ const en = {
74
598
  more: "+{n}",
75
599
  showLess: "Show fewer",
76
600
  mergedCount: "{n} calls merged",
601
+ countFiles: "{n} Files",
602
+ countQueries: "{n} Queries",
603
+ countCommands: "{n} Commands",
604
+ countPrograms: "{n} Programs",
605
+ countCalls: "{n} Calls",
77
606
  "terminal.signal": "signal {signal}",
78
607
  "terminal.exitCode": "exit code {code}",
79
608
  "terminal.running": "Running",
@@ -559,6 +1088,21 @@ const VARIANT_ICONS = {
559
1088
  code: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__deepseek_ai_dsh_client_ui_primitives.IconCodeOutline16, { size: 14 }),
560
1089
  others: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__deepseek_ai_dsh_client_ui_primitives.IconSparkle16, { size: 14 })
561
1090
  };
1091
+ /**
1092
+ * Per-variant locale key for the merged-count summary (`{n} Files`, `{n}
1093
+ * Commands`, …). Replaces the first call's file path on the main row when the
1094
+ * run merges more than one call, so the main row reads `Read · 5 Files` and
1095
+ * the file paths move to the collapsed child rows.
1096
+ */
1097
+ const VARIANT_COUNT_KEY = {
1098
+ read: "countFiles",
1099
+ write: "countFiles",
1100
+ edit: "countFiles",
1101
+ search: "countQueries",
1102
+ bash: "countCommands",
1103
+ code: "countPrograms",
1104
+ others: "countCalls"
1105
+ };
562
1106
  /** Leading-slot state substitution, mirroring the shipped row. */
563
1107
  function leadingFor(state, icon) {
564
1108
  switch (state) {
@@ -650,16 +1194,24 @@ function CardBody({ model, t }) {
650
1194
  ]
651
1195
  });
652
1196
  }
653
- /** The run's main card: the first call's full row (chrome + expandable card). */
654
- const RowCard = (0, react.memo)(function RowCard$1({ toolName, block, cwd, openFile, inspect, t, mergedCount }) {
1197
+ /**
1198
+ * The run's main card: the first call's chrome (variant title/icon + state)
1199
+ * plus, for a single call, its expandable content card. For a merged run the
1200
+ * main row's collapsed summary is the count (`Read · 5 Files`) and the
1201
+ * expanded body is the child-rows block (passed in as `children`); the first
1202
+ * call is rendered as the first child row so every file path lands on a child
1203
+ * row, never on the main row.
1204
+ */
1205
+ const RowCard = (0, react.memo)(function RowCard$1({ toolName, block, cwd, openFile, inspect, t, mergedCount, children }) {
655
1206
  const model = callRowModel(toolName, block, cwd);
656
1207
  const [expanded, setExpanded] = (0, react.useState)(false);
657
- const open = expanded && model.expandable;
1208
+ const hasChildren = mergedCount > 0;
1209
+ const expandable = model.expandable || hasChildren;
1210
+ const open = expanded && expandable;
658
1211
  const status = stateStatus(model.state, t);
659
1212
  const failureLine = model.state === "error" ? model.errorSummary ?? null : null;
660
- const summaryText = failureLine ?? model.summary;
661
- const suffix = failureLine === null && mergedCount > 0 ? t("more", { n: String(mergedCount) }) : null;
662
- const fileLink = model.filePath !== void 0 && openFile !== void 0 && failureLine === null;
1213
+ const summaryText = hasChildren && failureLine === null ? t(VARIANT_COUNT_KEY[model.variant], { n: String(mergedCount + 1) }) : failureLine ?? model.summary;
1214
+ const fileLink = !hasChildren && model.filePath !== void 0 && openFile !== void 0 && failureLine === null;
663
1215
  const openFileClick = (event) => {
664
1216
  event.stopPropagation();
665
1217
  if (model.filePath !== void 0) openFile(model.filePath);
@@ -668,29 +1220,30 @@ const RowCard = (0, react.memo)(function RowCard$1({ toolName, block, cwd, openF
668
1220
  className: "mtc-row",
669
1221
  "data-state": model.state,
670
1222
  "data-variant": model.variant,
671
- children: [status !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
672
- className: "mtc-visually-hidden",
673
- children: status
674
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
675
- rowClassName: "mtc-title-row",
676
- titleClassName: "mtc-title",
677
- leadingClassName: "mtc-leading",
678
- chevronClassName: "mtc-chevron",
679
- icon: leadingFor(model.state, VARIANT_ICONS[model.variant]),
680
- title: model.title,
681
- open,
682
- expandable: model.expandable,
683
- expandOnRowClick: true,
684
- keepContentWhenOpen: true,
685
- onToggle: () => {
686
- setExpanded((value) => !value);
687
- },
688
- collapsedContent: summaryText !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
689
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1223
+ "data-merged": hasChildren || void 0,
1224
+ children: [
1225
+ status !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1226
+ className: "mtc-visually-hidden",
1227
+ children: status
1228
+ }),
1229
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1230
+ rowClassName: "mtc-title-row",
1231
+ titleClassName: "mtc-title",
1232
+ leadingClassName: "mtc-leading",
1233
+ chevronClassName: "mtc-chevron",
1234
+ icon: leadingFor(model.state, VARIANT_ICONS[model.variant]),
1235
+ title: model.title,
1236
+ open,
1237
+ expandable,
1238
+ expandOnRowClick: true,
1239
+ keepContentWhenOpen: true,
1240
+ onToggle: () => {
1241
+ setExpanded((value) => !value);
1242
+ },
1243
+ collapsedContent: summaryText !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
690
1244
  className: "mtc-sep",
691
1245
  "aria-hidden": true
692
- }),
693
- fileLink ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1246
+ }), fileLink ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
694
1247
  type: "button",
695
1248
  className: "mtc-summary-link",
696
1249
  onClick: openFileClick,
@@ -698,25 +1251,35 @@ const RowCard = (0, react.memo)(function RowCard$1({ toolName, block, cwd, openF
698
1251
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
699
1252
  className: "mtc-summary",
700
1253
  children: summaryText
701
- }),
702
- suffix !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
703
- className: "mtc-summary-suffix",
704
- children: suffix
1254
+ })] }),
1255
+ children: !hasChildren && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1256
+ className: "mtc-card-body",
1257
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardBody, {
1258
+ model,
1259
+ t
1260
+ }), inspect !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1261
+ type: "button",
1262
+ className: "mtc-inspect",
1263
+ onClick: inspect,
1264
+ children: "Inspect"
1265
+ })]
705
1266
  })
706
- ] }),
707
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
708
- className: "mtc-card-body",
709
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardBody, {
710
- model,
711
- t
712
- }), inspect !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
713
- type: "button",
714
- className: "mtc-inspect",
715
- onClick: inspect,
716
- children: "Inspect"
717
- })]
1267
+ }),
1268
+ hasChildren && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1269
+ className: "mtc-children-collapse",
1270
+ "data-open": open || void 0,
1271
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1272
+ className: "mtc-children",
1273
+ children
1274
+ })
1275
+ }),
1276
+ hasChildren && open && inspect !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1277
+ type: "button",
1278
+ className: "mtc-inspect",
1279
+ onClick: inspect,
1280
+ children: "Inspect"
718
1281
  })
719
- })]
1282
+ ]
720
1283
  });
721
1284
  });
722
1285
  /**
@@ -827,29 +1390,27 @@ function MergedToolRow({ callId, toolName, block, cwd, openFile, inspect, t, cfg
827
1390
  });
828
1391
  if (!run.isFirst) return null;
829
1392
  const hasChildren = run.blocks.length > 1;
830
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1393
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
831
1394
  className: "mtc-root",
832
1395
  "data-tool": toolName,
833
1396
  ref: rootRef,
834
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
1397
+ style: sepLeft === null ? void 0 : { ["--mtc-sep-left"]: `${sepLeft}px` },
1398
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowCard, {
835
1399
  toolName,
836
1400
  block: run.blocks[0] ?? block,
837
1401
  cwd,
838
1402
  openFile,
839
1403
  inspect,
840
1404
  t,
841
- mergedCount: run.blocks.length - 1
842
- }), hasChildren && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
843
- className: "mtc-children",
844
- style: sepLeft === null ? void 0 : { ["--mtc-sep-left"]: `${sepLeft}px` },
845
- children: run.blocks.slice(1).map((child) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChildRow, {
1405
+ mergedCount: run.blocks.length - 1,
1406
+ children: hasChildren && run.blocks.map((child) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChildRow, {
846
1407
  toolName,
847
1408
  block: child,
848
1409
  cwd,
849
1410
  openFile,
850
1411
  t
851
1412
  }, child.callId))
852
- })]
1413
+ })
853
1414
  });
854
1415
  }
855
1416
 
@@ -942,14 +1503,47 @@ const CSS = `
942
1503
  .mtc-inspect:hover { background: var(--dsw-alias-interactive-bg-hover-solid); color: var(--dsw-alias-label-primary); }
943
1504
 
944
1505
  /* Compact child rows: each is the main row's tail structure — [sep dot][path].
945
- The dot/path columns are set at runtime by the component (it measures the
1506
+ The dot/path column is set at runtime by the component (it measures the
946
1507
  main row's sep offset and sets the --mtc-sep-left custom property on the
947
- children block), so this is only the pre-measure fallback. */
948
- .mtc-children { display: flex; flex-direction: column; gap: 1px; margin: 2px 0 2px var(--mtc-sep-left, 61px); }
1508
+ root); this is only the pre-measure fallback.
1509
+
1510
+ The .mtc-children-collapse wrapper animates the block's height with a
1511
+ grid-template-rows 0fr↔1fr transition (children stay in the DOM while
1512
+ collapsing, so the slide is smooth instead of popping out). The vertical
1513
+ margin lives on the wrapper (not .mtc-children) so it doesn't leak past the
1514
+ 0fr row when collapsed.
1515
+
1516
+ The sep-left indent lives on .mtc-child-row (not .mtc-children) so the
1517
+ expanded .mtc-child-body can align back to the root's left edge via a plain
1518
+ 4px margin. When the indent was on .mtc-children + a negative-margin
1519
+ pull-back on .mtc-child-body, the body's left portion was clipped by
1520
+ .mtc-children's overflow:hidden (which is required for the grid collapse
1521
+ animation). */
1522
+ .mtc-children-collapse {
1523
+ display: grid;
1524
+ grid-template-rows: 0fr;
1525
+ margin: 0;
1526
+ transition: grid-template-rows 200ms ease-out, margin 200ms ease-out;
1527
+ }
1528
+ .mtc-children-collapse[data-open] {
1529
+ grid-template-rows: 1fr;
1530
+ margin: 2px 0;
1531
+ }
1532
+ .mtc-children {
1533
+ display: flex; flex-direction: column; gap: 1px;
1534
+ margin: 0;
1535
+ min-width: 0; min-height: 0; overflow: hidden;
1536
+ opacity: 0;
1537
+ transition: opacity 150ms ease-out;
1538
+ }
1539
+ .mtc-children-collapse[data-open] .mtc-children {
1540
+ opacity: 1;
1541
+ transition: opacity 150ms ease-out 50ms;
1542
+ }
949
1543
  .mtc-child { display: flex; flex-direction: column; min-width: 0; }
950
1544
  .mtc-child-row {
951
1545
  display: flex; align-items: center; gap: 0; min-width: 0; height: 20px;
952
- margin: 0; padding: 0; border: 0; border-radius: 4px; background: none;
1546
+ margin: 0 0 0 var(--mtc-sep-left, 61px); padding: 0; border: 0; border-radius: 4px; background: none;
953
1547
  font: inherit; text-align: left; color: var(--dsw-alias-label-secondary); cursor: pointer;
954
1548
  }
955
1549
  .mtc-child-row:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }
@@ -972,10 +1566,10 @@ const CSS = `
972
1566
  .mtc-child-path-link:hover { color: var(--dsw-alias-label-primary); text-decoration-color: currentColor; }
973
1567
  .mtc-child-state { flex: none; font-size: 11px; line-height: 16px; color: var(--dsw-alias-label-tertiary); }
974
1568
  .mtc-child-state[data-error] { color: var(--dsw-alias-state-error-primary); }
975
- /* The expanded child card must not inherit the children block's sep indent:
976
- pull its left edge back to the main card body's column (root + 4px) so the
977
- card spans the card width instead of leaving a blank gutter on its left. */
978
- .mtc-child-body { margin: 2px 0 2px calc(4px - var(--mtc-sep-left, 61px)); min-width: 0; }
1569
+ /* The expanded child card aligns to the main card body's column (root + 4px).
1570
+ No negative-margin pull-back is needed because .mtc-children no longer
1571
+ carries the sep-left indent — only .mtc-child-row does. */
1572
+ .mtc-child-body { margin: 2px 0 2px 4px; min-width: 0; }
979
1573
 
980
1574
  .mtc-visually-hidden {
981
1575
  position: absolute; width: 1px; height: 1px; overflow: hidden;
@@ -1012,6 +1606,8 @@ function apply(ctx, config = {}) {
1012
1606
  en
1013
1607
  }), "merge-tool-calls: dictionaries");
1014
1608
  ctx.effect(installStyles, "merge-tool-calls: styles");
1609
+ const betterLocale = ctx.get("betterLocale");
1610
+ if (betterLocale !== void 0) ctx.effect(() => betterLocale.register(NS, dicts), "merge-tool-calls: better-locale override dicts");
1015
1611
  const toolNames = cfg.tools.length === 0 ? ALL_TOOL_NAMES : [...new Set(cfg.tools)];
1016
1612
  for (const tool of toolNames) ctx.slots.inject("tool.call.toolview", () => ctx.slots.register({
1017
1613
  name: "tool.call.toolview",