dsh-oc-tui 0.2.0-pre.13 → 0.2.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/lib/locales/id.js CHANGED
@@ -1,532 +1,609 @@
1
- // Indonesian catalog. Same keys, same order, and the same placeholders and
2
- // padding as `en.js`; Indonesian has a single plural form, so every plural
3
- // family repeats one wording.
4
- export default {
5
- // ---- shared chrome ------------------------------------------------------
6
- 'common.selectBack': 'Enter pilih · Esc kembali',
7
- 'common.selectConfirmBack': '↑/↓ pilih · Enter konfirmasi · Esc kembali',
8
- 'common.selectContinueExit': '↑/↓ pilih · Enter lanjut · Esc keluar',
9
- 'common.escBack': 'Esc kembali',
10
- 'common.escClose': 'Esc tutup',
11
- 'common.escCancel': 'Esc batal',
12
- 'common.working': 'Memproses…',
13
- 'common.pleaseWait': 'harap tunggu',
14
- 'common.on': 'aktif',
15
- 'common.off': 'nonaktif',
16
- 'common.unavailable': 'tidak tersedia',
17
- 'common.selected': 'dipilih',
18
- 'common.default': 'bawaan',
19
- 'common.system': 'sistem',
20
- 'common.installed': '(terpasang)',
21
- 'common.more': '… {count} lagi',
22
- 'common.moreLines': '… {count} baris lagi',
23
- 'common.clickExpand': ' · klik untuk memperluas',
24
- 'common.clickCollapse': ' · klik untuk menciutkan',
25
- 'common.unknown': 'tidak diketahui',
26
- 'common.emptyMessage': '[pesan kosong]',
27
- 'value.queue': 'antrean',
28
- 'value.steer': 'arahkan',
29
- 'value.auto': 'otomatis',
30
- 'value.local': 'lokal',
31
- 'value.textOnly': 'hanya teks',
32
- 'value.textImage': 'teks + gambar',
1
+ // Indonesian catalog. Same keys, same order, and the same placeholders and
2
+ // padding as `en.js`; Indonesian has a single plural form, so every plural
3
+ // family repeats one wording.
4
+ export default {
5
+ // ---- shared chrome ------------------------------------------------------
6
+ 'common.selectBack': 'Enter pilih · Esc kembali',
7
+ 'common.selectConfirmBack': '↑/↓ pilih · Enter konfirmasi · Esc kembali',
8
+ 'common.selectContinueExit': '↑/↓ pilih · Enter lanjut · Esc keluar',
9
+ 'common.escBack': 'Esc kembali',
10
+ 'common.escClose': 'Esc tutup',
11
+ 'common.escCancel': 'Esc batal',
12
+ 'common.working': 'Memproses…',
13
+ 'common.pleaseWait': 'harap tunggu',
14
+ 'common.on': 'aktif',
15
+ 'common.off': 'nonaktif',
16
+ 'common.unavailable': 'tidak tersedia',
17
+ 'common.selected': 'dipilih',
18
+ 'common.default': 'bawaan',
19
+ 'common.system': 'sistem',
20
+ 'common.installed': '(terpasang)',
21
+ 'common.more': '… {count} lagi',
22
+ 'common.moreLines': '… {count} baris lagi',
23
+ 'common.clickExpand': ' · klik untuk memperluas',
24
+ 'common.clickCollapse': ' · klik untuk menciutkan',
25
+ 'common.unknown': 'tidak diketahui',
26
+ 'common.emptyMessage': '[pesan kosong]',
27
+ 'value.queue': 'antrean',
28
+ 'value.steer': 'arahkan',
29
+ 'value.auto': 'otomatis',
30
+ 'value.local': 'lokal',
31
+ 'value.textOnly': 'hanya teks',
32
+ 'value.textImage': 'teks + gambar',
33
+
34
+ // ---- title screen -------------------------------------------------------
35
+ 'splash.hint': 'Tanyakan apa saja... "Perbaiki tes yang gagal"',
36
+ 'splash.shortcutSettings': 'pengaturan',
37
+ 'splash.shortcutThinking': 'penalaran',
38
+ 'splash.shortcutBranches': 'branch',
39
+
40
+ // ---- header / sidebar / status row -------------------------------------
41
+ // ---- command-line help (dsh --profile tui --help) -----------------------
42
+ 'startup.description': 'Menjalankan antarmuka terminal DeepSeek Harness.',
43
+ 'startup.helpOption': 'tampilkan bantuan ini',
44
+ 'startup.resume': 'lanjutkan sesi tersimpan yang ada berdasarkan id',
45
+ 'startup.model': 'id model bawaan untuk sesi baru',
46
+ 'startup.provider': 'rute penyedia bawaan untuk sesi baru',
47
+ 'startup.sidebar': 'tampilkan bilah sisi sesi (bawaan)',
48
+ 'startup.noSidebar': 'mulai tanpa bilah sisi',
49
+ 'startup.examples': 'Contoh:',
50
+ 'startup.exampleFresh': 'mulai sesi baru',
51
+ 'startup.exampleResume': 'lanjutkan sesi tersimpan',
52
+
53
+ 'header.workspace': 'RUANG KERJA',
54
+ 'sidebar.sessions': 'SESI',
55
+ 'sidebar.recent': 'TERBARU',
56
+ 'sidebar.newSession': '+ Sesi baru',
57
+ 'status.model': 'model',
58
+ 'status.draftTokens': '{count} token draf',
59
+ 'status.ctrlP': 'ctrl+p perintah',
60
+ 'status.interrupt': 'hentikan: ctrl+c',
61
+
62
+ // ---- composer command hints --------------------------------------------
63
+ 'hint.help': 'tampilkan bantuan',
64
+ 'hint.settings': 'buka pengaturan',
65
+ 'hint.new': 'sesi baru',
66
+ 'hint.resume': 'lanjutkan sesi',
67
+ 'hint.model': 'pilih model',
68
+ 'hint.provider': 'pilih penyedia',
69
+ 'hint.rewind': 'pemilih putar ulang',
70
+ 'hint.branch': 'pindah branch git',
71
+ 'hint.stats': 'statistik sesi & token',
72
+ 'hint.clear': 'bersihkan tampilan',
73
+ 'hint.cancel': 'batalkan giliran berjalan',
74
+ 'hint.quit': 'keluar',
75
+ 'hint.compact': 'ringkas konteks',
76
+ 'hint.goal': 'kelola tujuan',
77
+
78
+ // ---- transcript blocks --------------------------------------------------
79
+ 'transcript.turns.one': '{count} giliran',
80
+ 'transcript.turns.other': '{count} giliran',
81
+ 'transcript.steps.one': '{count} langkah',
82
+ 'transcript.steps.other': '{count} langkah',
83
+ 'transcript.thinking': ' sedang menalar',
84
+ 'transcript.streaming': ' · mengalir…',
85
+ 'transcript.steeringBadge': ' ⟲ mengarahkan',
86
+ 'transcript.tasks': 'tugas',
87
+ 'transcript.systemPrompt': ' prompt sistem',
88
+ 'transcript.pendingInput': ' input tertunda · ',
89
+ 'transcript.steering': ' mengarahkan',
90
+ 'transcript.queued': ' dalam antrean',
91
+ 'note.systemReminder': 'pengingat sistem',
92
+ 'note.compaction': 'pemadatan',
93
+
94
+ // ---- images and mermaid -------------------------------------------------
95
+ 'image.attachment': '🖼 lampiran gambar',
96
+ 'image.rendering': '⏳ merender gambar…',
97
+ 'image.renderFailed': '⚠ gagal merender gambar · {error}',
98
+ 'image.mermaidRendering': '⏳ merender diagram mermaid…',
99
+ 'image.mermaidTooWide': '↔ diagram mermaid butuh {width} kolom, panel ini punya {budget}',
100
+ 'image.altFallback': 'gambar',
101
+
102
+ // ---- composer / approval prompt ----------------------------------------
103
+ 'composer.imageHint': 'Gambar ditempel: gunakan model/plugin multimodal atau deepseek-v4-flash-vision-exp, jika tidak gambar tidak dapat dibaca',
104
+ 'composer.approval': 'Persetujuan · ',
105
+ 'composer.summary': 'Ringkasan · ',
106
+ 'composer.origin': 'Asal · ',
107
+ 'composer.risk': 'Risiko · ',
108
+ 'composer.approvalHint': 'y izinkan · n tolak · Esc batal',
109
+ 'risk.low': 'rendah',
110
+ 'risk.medium': 'sedang',
111
+ 'risk.high': 'tinggi',
112
+ 'composer.effortHint': 'Tab / ←/→ sesuaikan · Esc tutup',
113
+
114
+ // ---- right status rail --------------------------------------------------
115
+ 'rail.model': 'MODEL',
116
+ 'rail.thinking': 'PENALARAN',
117
+ 'rail.context': 'KONTEKS',
118
+ 'rail.session': 'SESI',
119
+ 'rail.goal': 'TUJUAN',
120
+ 'rail.subagents': 'SUBAGEN',
121
+ 'rail.noData': '—',
122
+ 'rail.percentUsed': '{percent}% terpakai',
123
+ 'rail.tokens': '~{used} / {window} token',
124
+ 'rail.cacheHit': 'cache {percent}% kena',
125
+ 'rail.breakdown': 'sistem {system} · alat {tools} · pesan {messages}',
126
+ 'rail.contextPending': 'tampil setelah penggunaan dilaporkan',
127
+ 'rail.subagentCounts': '{running} berjalan · {total} total',
128
+ 'rail.unreadable': '{label} (tidak terbaca)',
129
+ 'rail.more': '… +{count} lagi',
130
+ 'rail.round': ' · putaran {started}/{max}',
131
+ 'goal.active': 'aktif',
132
+ 'goal.paused': 'dijeda',
133
+ 'goal.blocked': 'terblokir',
134
+ 'goal.complete': 'selesai',
135
+
136
+ // ---- session stats window ----------------------------------------------
137
+ 'stats.title': 'statistik sesi',
138
+ 'stats.hint': 'klik bilah atau /stats',
139
+ 'stats.usage': 'penggunaan',
140
+ 'stats.duration': 'durasi',
141
+ 'stats.speed': 'kecepatan',
142
+ 'stats.tokens': 'token',
143
+ 'stats.cache': 'cache',
144
+ 'stats.context': 'konteks',
145
+ 'stats.noSteps': 'belum ada langkah selesai',
146
+ 'stats.llmTime': 'LLM {value}',
147
+ 'stats.toolTime': 'alat {value}',
148
+ 'stats.ttft': 'TTFT rata-rata {value}',
149
+ 'stats.tokensPerSecond': '{value} tok/s',
150
+ 'stats.cacheRate': 'cache {percent}%',
151
+ 'stats.inOut': 'masuk {input} · keluar {output}',
152
+ 'stats.cacheDetail': '{percent}% kena · baca {read} · tulis {write} · luput {miss}',
153
+ 'stats.contextUsed': '{percent}% terpakai ~{used} / {window}',
154
+ 'stats.systemPrompt': 'prompt sistem',
155
+ 'stats.tools': 'alat',
156
+ 'stats.messages': 'pesan',
157
+ 'stats.compositionUnavailable': 'komposisi tidak tersedia',
158
+ 'stats.contextPending': 'pemakaian konteks muncul setelah permintaan melaporkan penggunaan',
159
+
160
+ // ---- questions modal ----------------------------------------------------
161
+ 'questions.title': 'Pertanyaan',
162
+ 'questions.titleOf': 'Pertanyaan {index} dari {total}',
163
+ 'questions.defer': 'Esc tunda',
164
+ 'questions.range': '{from}-{to} dari {total} PgUp/PgDn',
165
+ 'questions.other': 'Lainnya: ',
166
+ 'questions.answer': 'Jawaban: ',
167
+ 'questions.placeholder': 'ketik jawaban Anda',
168
+ 'questions.hintCustom': 'Enter konfirmasi · Esc kembali',
169
+ 'questions.hintMulti': 'Space pilih · Enter lanjut · Atas/Bawah pindah',
170
+ 'questions.hintSingle': 'Enter pilih · Atas/Bawah pindah',
171
+
172
+ // ---- secret prompt ------------------------------------------------------
173
+ 'secret.hint': 'Enter untuk kirim · Esc untuk batal',
174
+
175
+ // ---- settings dialog chrome --------------------------------------------
176
+ 'settings.title': 'Pengaturan',
177
+ 'settings.menu': 'MENU',
178
+ 'settings.shared': 'Dibagi dengan DeepSeek Harness WebUI',
179
+ 'settings.footerEdit': 'Enter simpan · Esc batal',
180
+ 'settings.footerMenu': '↑/↓ pindah · Tab menu · Enter pilih · Esc kembali',
181
+ 'settings.footerPlain': '↑/↓ pindah · Enter pilih · Esc kembali',
182
+ 'settings.confirmHint': '{text} · Y / N',
183
+ 'settings.confirmDefault': 'Y konfirmasi · N batal',
184
+ 'settings.confirmDeleteSession': 'Ctrl+D lagi untuk menghapus',
185
+ 'settings.confirmChange': 'Konfirmasi perubahan ini?',
186
+ 'settings.deleteTwice': 'Tekan Ctrl+D lagi untuk menghapus ',
187
+ 'settings.deleteMcpTwice': 'Tekan Delete lagi untuk menghapus ',
188
+ 'settings.noSession': 'tidak ada sesi dipilih',
189
+ 'settings.noSessions': 'tidak ada sesi tersedia',
190
+ 'settings.noMcp': 'tidak ada server MCP dipilih',
191
+ 'settings.noOptions': 'tidak ada opsi untuk {label}',
192
+ 'settings.saved': 'disimpan ke pengaturan DSH',
193
+ 'settings.providerRemoved': 'penyedia dihapus',
194
+ 'settings.conflict': 'pengaturan berubah di tempat lain; dimuat ulang',
195
+ 'settings.error': 'pengaturan: {error}',
196
+ 'settings.dshSettings': 'pengaturan DSH',
197
+ 'settings.optionList': 'Enter pilih · Esc kembali',
198
+
199
+ // ---- settings left menu -------------------------------------------------
200
+ 'menu.main': 'Utama',
201
+ 'menu.model': 'Model',
202
+ 'menu.update': 'Pembaruan',
203
+ 'menu.mcp': 'MCP',
204
+
205
+ // ---- settings rows: main tab -------------------------------------------
206
+ 'settings.general': 'Umum',
207
+ 'settings.graphics': 'Grafik',
208
+ 'settings.sessions': 'Sesi',
209
+ 'settings.system': 'Sistem',
210
+ 'settings.busyEnter': 'Enter saat sibuk',
211
+ 'settings.defaultPreset': 'Preset bawaan',
212
+ 'settings.permissionPreset': 'Preset izin',
213
+ 'settings.permissionDangerConfirm': 'Aktifkan akses alat dan berkas tanpa batas?',
214
+ 'settings.graphicsRendering': 'Rendering grafik',
215
+ 'settings.noProtocolFallback': 'Cadangan tanpa protokol',
216
+ 'settings.imageHeightCap': 'Batas tinggi gambar (baris)',
217
+ 'settings.mermaidRendering': 'Rendering mermaid',
218
+ 'settings.newSession': 'Sesi baru',
219
+ 'settings.manageSessions': 'Kelola sesi',
220
+ 'settings.providerConfig': 'Konfigurasi API penyedia',
221
+ 'settings.updateManager': 'Pengelola pembaruan',
222
+ 'settings.settingsFile': 'Berkas pengaturan',
223
+ 'settings.language': 'Bahasa',
224
+ 'settings.languageSystem': 'Sistem ({language})',
225
+ 'settings.languageSaved': 'bahasa: {language}',
226
+
227
+ // ---- model tab ----------------------------------------------------------
228
+ 'model.title': 'Model',
229
+ 'model.subtitle': 'Enter memilih model terdaftar sebagai bawaan',
230
+ 'model.defaultSection': 'Bawaan',
231
+ 'model.defaultProvider': 'Penyedia bawaan',
232
+ 'model.defaultModel': 'Model bawaan',
233
+ 'model.reasoning': 'Penalaran',
234
+ 'model.providerUrl': 'URL penyedia',
235
+ 'model.providerApiKey': 'Kunci API penyedia',
236
+ 'model.displayName': 'Nama tampilan',
237
+ 'model.wireProtocol': 'Protokol transmisi',
238
+ 'model.defaultImageInput': 'Input gambar bawaan',
239
+ 'model.models': 'Model',
240
+ 'model.fetch': 'ambil…',
241
+ 'model.selectedCount': '{count} dipilih',
242
+ 'model.removeProvider': 'Hapus penyedia',
243
+ 'model.removeProviderConfirm': 'Hapus {name} beserta kredensial terkelolanya?',
244
+ 'model.noModels': 'tidak ada model tersedia',
245
+ 'model.noModelsReturned': 'penyedia tidak mengembalikan model',
246
+ 'model.fetchUnavailable': 'ambil otomatis tidak tersedia — model tersimpan · Enter ubah',
247
+ 'model.fetchOk': 'terambil otomatis · Enter ubah · Esc kembali',
248
+ 'model.fetching': 'Mengambil model…',
249
+ 'model.autoFetching': 'mengambil otomatis…',
250
+ 'model.credentialConfigured': 'terkonfigurasi ({source})',
251
+ 'model.credentialMissing': 'belum dikonfigurasi',
252
+ 'model.defaultTag': 'bawaan',
253
+ 'model.providerUnavailable': 'penyedia tidak lagi tersedia',
254
+ 'model.namespaceUnavailable': 'namespace pengaturan penyedia tidak tersedia',
255
+ 'model.apiKeyEmpty': 'kunci API tidak boleh kosong',
256
+ 'model.credentialsUnavailable': 'layanan kredensial tidak tersedia',
257
+ 'model.noProviderModels': 'penyedia terpilih tidak punya model tersedia',
258
+ 'model.addCount.one': '{count} tersedia',
259
+ 'model.addCount.other': '{count} tersedia',
260
+
261
+ // ---- add-provider flow --------------------------------------------------
262
+ 'provider.add': 'Tambah penyedia',
263
+ 'provider.empty': 'belum ada penyedia yang dikonfigurasi',
264
+ 'provider.pickSubtitle': 'Enter pilih · Esc kembali',
265
+ 'provider.catalog': 'Penyedia terpasang',
266
+ 'provider.catalogEmpty': 'semua penyedia terpasang sudah dikonfigurasi',
267
+ 'provider.custom': 'API khusus — deklarasikan endpoint',
268
+ 'provider.form.catalog': 'Pakai penyedia terpasang',
269
+ 'provider.form.custom': 'Deklarasikan penyedia khusus',
270
+ 'provider.formSubtitle': 'Enter edit · Esc kembali',
271
+ 'provider.field.route': 'ID rute',
272
+ 'provider.field.addModel': 'Tambah ID model',
273
+ 'provider.field.save': 'Simpan penyedia',
274
+ 'provider.hint.route': 'huruf kecil, angka, dan tanda hubung · kunci disimpan sebagai {ref}',
275
+ 'provider.error.route': 'ID rute harus diawali huruf dan hanya berisi huruf kecil, angka, dan tanda hubung',
276
+ 'provider.error.routeNeeded': 'pilih penyedia',
277
+ 'provider.error.taken': 'ID rute ini sudah dipakai penyedia lain',
278
+ 'provider.error.baseUrl': 'endpoint harus berupa URL http atau https',
279
+ 'provider.error.baseUrlNeeded': 'penyedia khusus memerlukan endpoint',
280
+ 'provider.error.apiNeeded': 'pilih protokol yang dipakai endpoint ini',
281
+ 'provider.error.modelsNeeded': 'penyedia khusus memerlukan setidaknya satu model',
282
+ 'provider.error.modelId': 'model {index} memerlukan ID',
283
+ 'provider.error.modelDuplicate': 'model "{id}" tercantum dua kali',
284
+ 'provider.added': 'penyedia ditambahkan',
285
+ 'provider.accountManaged': 'masuk dengan akun DeepSeek Anda',
286
+ 'provider.search': 'Cari',
287
+ 'provider.searchPlaceholder': 'ketik untuk menyaring',
288
+ 'provider.searchEmpty': 'tidak ada penyedia yang cocok dengan "{query}"',
289
+
290
+ // ---- satu entri model -------------------------------------------------------
291
+ 'model.edit': 'Edit model',
292
+ 'model.editHint': 'e edit · Del hapus',
293
+ 'model.refresh': 'Muat ulang katalog',
294
+ 'model.selectAll': 'Pilih semua',
295
+ 'model.fetchRefused': 'endpoint tidak mengembalikan daftar model',
296
+ 'model.notSaved': 'model ini belum disimpan',
297
+ 'model.removed': 'model dihapus',
298
+ 'model.form.add': 'Tambah model',
299
+ 'model.form.edit': 'Model · {id}',
300
+ 'model.form.save': 'Simpan model',
301
+ 'model.form.remove': 'Hapus dari penyedia',
302
+ 'model.form.removeConfirm': 'Hapus model ini dari penyedia?',
303
+ 'model.field.id': 'ID model',
304
+ 'model.field.name': 'Nama tampilan',
305
+ 'model.field.contextWindow': 'Jendela konteks',
306
+ 'model.field.maxTokens': 'Token keluaran maks',
307
+ 'model.field.input': 'Masukan',
308
+ 'model.error.idNeeded': 'model harus punya ID',
309
+ 'model.error.idDuplicate': 'model "{id}" sudah terdaftar',
310
+ 'model.error.capacity': 'jendela konteks dan token maksimum harus bilangan bulat (256K, 1M)',
311
+
312
+ // ---- MCP tab ------------------------------------------------------------
313
+ 'mcp.title': 'MCP',
314
+ 'mcp.subtitle': 'Enter ubah · Del hapus · Esc kembali',
315
+ 'mcp.editSubtitle': 'Enter ubah · Esc kembali',
316
+ 'mcp.servers': 'Server MCP',
317
+ 'mcp.empty': 'Belum ada server MCP dikonfigurasi',
318
+ 'mcp.add': 'Tambah server MCP',
319
+ 'mcp.scope': 'cakupan',
320
+ 'mcp.scopeUserPrefix': 'pengguna · {path}',
321
+ 'mcp.scopePathPrefix': 'jalur · {path}',
322
+ 'mcp.configFiles': 'File konfigurasi',
323
+ 'mcp.userScope': 'pengguna (semua sesi)',
324
+ 'mcp.secrets': 'Rahasia',
325
+ 'mcp.secretsPlain': 'teks polos di berkas konfigurasi',
326
+ 'mcp.loaded': 'dimuat',
327
+ 'mcp.notCreated': 'belum dibuat',
328
+ 'mcp.type.stdio': 'Perintah lokal',
329
+ 'mcp.type.http': 'HTTP',
330
+ 'mcp.type.sse': 'SSE',
331
+ 'mcp.state.connected': '● terhubung',
332
+ 'mcp.state.tools.one': '● {count} alat',
333
+ 'mcp.state.tools.other': '● {count} alat',
334
+ 'mcp.state.pending': '… menghubungkan',
335
+ 'mcp.state.disabled': '○ nonaktif',
336
+ 'mcp.state.idle': '○ tidak terhubung',
337
+ 'mcp.form.add': 'Tambah server MCP',
338
+ 'mcp.form.edit': 'Ubah server MCP · {name}',
339
+ 'mcp.titleAdd': 'MCP · tambah',
340
+ 'mcp.titleEdit': 'MCP · edit',
341
+ 'mcp.field.name': 'Nama',
342
+ 'mcp.field.type': 'Jenis',
343
+ 'mcp.field.timeout': 'Batas waktu (ms)',
344
+ 'mcp.field.command': 'Perintah',
345
+ 'mcp.field.args': 'Argumen',
346
+ 'mcp.field.env': 'Lingkungan (JSON)',
347
+ 'mcp.field.url': 'URL',
348
+ 'mcp.field.headers': 'Header (JSON)',
349
+ 'mcp.field.scope': 'Cakupan',
350
+ 'mcp.field.path': 'Jalur',
351
+ 'mcp.field.enabled': 'Aktif',
352
+ 'mcp.field.save': 'Simpan',
353
+ 'mcp.field.remove': 'Hapus',
354
+ 'mcp.choice.stdio': 'Perintah lokal (stdio)',
355
+ 'mcp.choice.http': 'HTTP (streamable)',
356
+ 'mcp.choice.sse': 'SSE (HTTP+SSE lama)',
357
+ 'mcp.choice.scopeUser': 'Pengguna — semua sesi',
358
+ 'mcp.choice.scopePath': 'Jalur — sesi di bawah direktori',
359
+ 'mcp.removeConfirm': 'Hapus server MCP ini dan putuskan koneksinya?',
360
+ 'mcp.saved': 'Server MCP disimpan',
361
+ 'mcp.added': 'Server MCP ditambahkan',
362
+ 'mcp.removed': 'Server MCP dihapus',
363
+ 'mcp.error.name': 'nama harus 1-32 karakter huruf, angka, "-" atau "_"',
364
+ 'mcp.error.duplicate': 'server MCP bernama "{name}" sudah dikonfigurasi',
365
+ 'mcp.error.timeout': 'timeoutMs harus bilangan bulat antara 1 dan {max}',
366
+ 'mcp.error.pathNeeded': 'server bercakupan jalur memerlukan direktori',
367
+ 'mcp.error.pathAbsolute': 'cakupan jalur harus direktori absolut',
368
+ 'mcp.error.commandNeeded': 'server stdio memerlukan perintah',
369
+ 'mcp.error.urlParse': 'URL tidak dapat diurai',
370
+ 'mcp.error.urlScheme': 'URL harus memakai http atau https',
371
+ 'mcp.error.pathNotDir': 'cakupan jalur bukan direktori: {path}',
372
+ 'mcp.error.configIsDir': 'jalur berkas konfigurasi adalah direktori: {path}',
373
+ 'mcp.error.notFound': 'tidak ada server MCP bernama "{name}" dikonfigurasi',
374
+ 'mcp.error.documentGone': 'dokumen yang mendefinisikan "{name}" sudah hilang: {error}',
375
+ 'mcp.error.noClient': 'host tidak menyediakan klien MCP',
376
+ 'mcp.error.connectTimeout': 'waktu menghubungkan ke {name} habis',
377
+ 'mcp.error.json': 'dokumen bukan JSON yang valid: {error}',
378
+ 'mcp.error.jsonObject': 'dokumen harus berupa objek JSON',
379
+ 'mcp.error.serversObject': '"servers" harus berupa objek JSON',
380
+ 'mcp.error.argsArray': 'argumen harus berupa array JSON berisi string',
381
+ 'mcp.error.argsTypes': 'argumen harus berupa string atau angka',
382
+ 'mcp.error.argsUnclosed': 'argumen memiliki tanda kutip yang belum ditutup',
383
+ 'mcp.error.envObject': '{label} harus berupa objek JSON',
384
+ 'mcp.error.envValue': 'nilai "{name}" pada {label} harus string, angka, atau boolean',
385
+ 'mcp.error.header': 'header HTTP tidak valid "{name}"',
386
+ 'mcp.error.envName': 'nama lingkungan tidak valid "{name}"',
387
+
388
+ // ---- rewind -------------------------------------------------------------
389
+ 'rewind.title': 'Putar ulang',
390
+ 'rewind.restoreTo': 'Kembalikan ke titik sebelum: {label}',
391
+ 'rewind.restorePrompt': 'Kembalikan percakapan ke titik sebelum…',
392
+ 'rewind.empty': 'Belum ada yang bisa diputar ulang.',
393
+ 'rewind.option.conversation': 'Kembalikan percakapan',
394
+ 'rewind.option.both': 'Kembalikan percakapan dan berkas',
395
+ 'rewind.option.code': 'Kembalikan berkas',
396
+ 'rewind.option.cancel': 'Batal',
397
+ 'rewind.current': '(saat ini)',
398
+ 'rewind.noPoints': 'tidak ada pesan pengguna untuk diputar ulang',
399
+ 'rewind.unknownPoint': 'titik putar ulang tidak dikenal "{selector}" — gunakan angka atau last',
400
+ 'rewind.noPoint': 'tidak ada titik putar ulang {n} — 1..{count}',
401
+ 'rewind.notGit': 'bukan worktree git',
402
+ 'rewind.noBackup': 'tidak ada lokasi cadangan',
403
+ 'rewind.filesNotRestored': 'berkas tidak dikembalikan',
404
+ 'rewind.filesNotRestoredReason': 'berkas tidak dikembalikan ({reason})',
405
+ 'rewind.restored.one': 'mengembalikan {count} berkas terlacak dari HEAD',
406
+ 'rewind.restored.other': 'mengembalikan {count} berkas terlacak dari HEAD',
407
+ 'rewind.removed.one': 'menghapus {count} berkas baru',
408
+ 'rewind.removed.other': 'menghapus {count} berkas baru',
409
+ 'rewind.skipped': 'melewati {count}',
410
+ 'rewind.previousSaved': 'konten sebelumnya disimpan di {path}',
411
+ 'rewind.noChanges': 'tidak ada perubahan berkas setelah titik ini',
412
+ 'rewind.image': '[gambar]',
413
+ 'rewind.images': '[{count} gambar]',
414
+ 'rewind.emptyMessage': '(kosong)',
415
+ 'git.title': 'Branch Git',
416
+ 'git.subtitle': 'Saat ini: {branch} · {path}',
417
+ 'git.local': 'Branch lokal',
418
+ 'git.remote': 'Branch remote',
419
+ 'git.empty': 'Tidak ada branch di repositori ini.',
420
+ 'git.detached': '(lepas)',
421
+ 'git.switched': 'Berpindah ke branch {branch}',
422
+ 'git.switchFailed': 'Tidak bisa berpindah ke {branch}: {error}',
423
+ 'git.pullDone': 'Pembaruan ditarik',
424
+ 'git.pullFailed': 'Tidak bisa menarik pembaruan: {error}',
425
+ 'git.listFailed': 'Tidak bisa mendaftar branch: {error}',
426
+ 'git.notRepo': 'bukan working tree git',
427
+ 'git.gitMissing': 'git tidak tersedia di PATH',
428
+ 'git.timedOut': 'git kehabisan waktu',
429
+ 'git.onlyTitleScreen': 'Pemindahan branch hanya tersedia di halaman kosong — gunakan /new untuk meninggalkan sesi',
430
+ 'git.footer': '↑/↓ pilih · Enter pindah · P pull · R segarkan · Esc tutup',
431
+
432
+ // ---- update tab ---------------------------------------------------------
433
+ 'update.title': 'Pembaruan',
434
+ 'update.checking': 'Memeriksa versi…',
435
+ 'update.fetching': 'mengambil dari registry npm…',
436
+ 'update.fetchingVersions': 'Mengambil versi…',
437
+ 'update.versionsSubtitle': 'Enter unduh · Esc kembali',
438
+ 'update.installed': 'Terpasang',
439
+ 'update.latest': 'Terbaru (tag npm)',
440
+ 'update.status': 'Status',
441
+ 'update.versions': 'Versi',
442
+ 'update.selectVersion': 'Pilih versi…',
443
+ 'update.restartApply': 'Mulai ulang untuk menerapkan {version}',
444
+ 'update.enterRestart': 'Enter mulai ulang',
445
+ 'update.discard': 'Buang unduhan {version}',
446
+ 'update.actions': 'Tindakan',
447
+ 'update.checkNow': 'Periksa sekarang',
448
+ 'update.checkingShort': 'Memeriksa…',
449
+ 'update.startupCheck': 'Pemeriksaan saat mulai',
450
+ 'update.profile': 'profil',
451
+ 'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
452
+ 'update.statusCorrupt': 'Instalasi rusak — pasang ulang di bawah',
453
+ 'update.statusError': 'Pemeriksaan registry gagal: {error}',
454
+ 'update.statusAvailable': 'Pembaruan tersedia → {version}',
455
+ 'update.statusUpToDate': 'Sudah terbaru',
456
+ 'update.statusNoStable': 'Tidak ada rilis stabil — pilih dari Versi',
457
+ 'update.notOnPath': 'tidak ditemukan di PATH',
458
+ 'update.subtitleStaged': '{package} {version} terunduh — mulai ulang untuk menerapkan',
459
+ 'update.subtitleIdle': 'Enter pilih · unduh, lalu mulai ulang untuk menerapkan',
460
+ 'update.download': 'Unduh',
461
+ 'update.contacting': 'menghubungi registry…',
462
+ 'update.version': 'Versi',
463
+ 'update.savingTo': 'Menyimpan ke',
464
+ 'update.escCancels': 'Esc membatalkan',
465
+ 'update.restartApplyQ': 'Mulai ulang untuk menerapkan {label} {version}? (sudah terunduh)',
466
+ 'update.downloadQ': 'Unduh {label} {version} dan mulai ulang untuk menerapkan?',
467
+ 'update.localSwitch': ' — mengalihkan instalasi lokal ke versi registry',
468
+ 'update.downloaded': 'terunduh · mulai ulang untuk menerapkan',
469
+ 'update.downloadedToast': '{label} {version} terunduh · terapkan dari tab Pembaruan',
470
+ 'update.downloadedConfirm': 'Terunduh mulai ulang untuk menerapkan {label} {version}? (y/n)',
471
+ 'update.alreadyDownloadedConfirm': 'Sudah terunduh · mulai ulang untuk menerapkan {label} {version}? (y/n)',
472
+ 'update.downloadCancelled': 'unduhan dibatalkan',
473
+ 'update.downloadFailed': 'unduhan gagal: {error}',
474
+ 'update.stagedGone': 'unduhan siap tidak lagi ada — pilih versi lagi',
475
+ 'update.locks.one': 'tidak dapat menerapkan selama dsh berjalan di {count} proses lain — tutup dan coba lagi',
476
+ 'update.locks.other': 'tidak dapat menerapkan selama dsh berjalan di {count} proses lain — tutup dan coba lagi',
477
+ 'update.noNpm': 'tidak dapat menerapkan: npm tidak ditemukan',
478
+ 'update.noDshCli': 'tidak dapat menerapkan: dsh CLI tidak ditemukan',
479
+ 'update.installerFailed': 'tidak dapat memulai pemasang — mulai ulang dsh untuk menerapkan {label}',
480
+ 'update.applying': 'menerapkan {label} · keluar, memulai ulang…',
481
+ 'update.stagedDiscarded': 'unduhan siap dibuang',
482
+ 'update.tagCached': 'di-cache',
483
+ 'update.tagStaged': 'siap',
484
+ 'update.installFailed': 'Pemasangan gagal (kode {code}) — coba lagi dari Versi',
485
+ 'update.installFailedRetry': 'buka Pembaruan → dsh-oc-tui → Versi, lalu pilih versi untuk diunduh lagi',
486
+ 'update.installUnreadable': 'pemasangan melaporkan sukses tetapi versi terpasang {installed} (diharapkan {expected}) — perbaiki: {repair}',
487
+ 'update.registryUnreachable': 'registry tidak terjangkau: {error}',
488
+ 'update.notOnRegistry': '{package} tidak ada di registry',
489
+ 'update.registryHttp': 'registry mengembalikan HTTP {status} untuk {package}',
490
+ 'update.noTarballUrl': 'respons registry tidak memuat URL tarball',
491
+ 'update.downloadHttp': 'unduhan gagal: HTTP {status} untuk {url}',
492
+ 'update.downloadEmpty': 'unduhan gagal: isi respons kosong',
493
+ 'update.integrityFailed': 'pemeriksaan integritas gagal untuk {file} — unduhan dibuang',
494
+ 'update.npmMissing': 'npm tidak ditemukan di PATH',
495
+ 'update.npmViewFailed': 'npm view {package} keluar dengan kode {code}',
496
+ 'update.timedOut': '\n(waktu habis setelah {ms}ms)',
497
+ 'update.noOutput': '(tidak ada keluaran)',
498
+
499
+ // ---- commands -----------------------------------------------------------
500
+ 'command.settings': 'Buka halaman pengaturan TUI',
501
+ 'command.help': 'Tampilkan referensi tombol dan perintah TUI',
502
+ 'command.stats': 'Tampilkan statistik token dan cache sesi',
503
+ 'command.new': 'Mulai sesi baru',
504
+ 'command.resume': 'Lanjutkan sesi tersimpan',
505
+ 'command.clear': 'Bersihkan transkrip',
506
+ 'command.cancel': 'Batalkan giliran berjalan',
507
+ 'command.rewind': 'Putar sesi ke titik sebelumnya',
508
+ 'command.branch': 'Pindah branch git di halaman kosong',
509
+ 'command.quit': 'Keluar dari TUI',
510
+
511
+ // ---- help overlay -------------------------------------------------------
512
+ 'help.title': 'DeepSeek Harness TUI — bantuan',
513
+ 'help.enter': 'Enter',
514
+ 'help.enterDesc': 'kirim pesan',
515
+ 'help.ctrlEnter': 'Ctrl+Enter',
516
+ 'help.ctrlEnterDesc': 'sisipkan baris baru',
517
+ 'help.ctrlC': 'Ctrl+C',
518
+ 'help.ctrlCDesc': 'batalkan giliran berjalan; tekan lagi untuk keluar',
519
+ 'help.ctrlP': 'Ctrl+P',
520
+ 'help.ctrlPDesc': 'buka pengaturan',
521
+ 'help.ctrlE': 'Ctrl+E',
522
+ 'help.ctrlEDesc': 'ubah penggeser penalaran',
523
+ 'help.tab': 'Tab',
524
+ 'help.tabDesc': 'ganti intensitas penalaran',
525
+ 'help.ctrlN': 'Ctrl+N',
526
+ 'help.ctrlNDesc': 'sesi baru',
527
+ 'help.ctrlG': 'Ctrl+G',
528
+ 'help.ctrlGDesc': 'pindah branch git (halaman kosong)',
529
+ 'help.ctrlD': 'Ctrl+D',
530
+ 'help.ctrlDDesc': 'hapus sesi di Kelola sesi (tekan dua kali)',
531
+ 'help.pg': 'PgUp / PgDn',
532
+ 'help.pgDesc': 'gulir transkrip',
533
+ 'help.shiftArrows': 'Shift+↑/↓',
534
+ 'help.shiftArrowsDesc': 'gulir rel status (jendela lebar)',
535
+ 'help.upDown': 'Up / Down',
536
+ 'help.upDownDesc': 'kursor atas/bawah; riwayat di tepi',
537
+ 'help.mouse': 'Mouse drag',
538
+ 'help.mouseDesc': 'pilih teks; klik kanan menyalin',
539
+ 'help.wheel': 'Wheel',
540
+ 'help.wheelDesc': 'gulir transkrip / pengaturan',
541
+ 'help.escEsc': 'Esc Esc',
542
+ 'help.escEscDesc': 'pemilih putar ulang',
543
+ 'help.esc': 'Esc',
544
+ 'help.escDesc': 'tutup lapisan · batalkan giliran · bersihkan prompt',
545
+ 'help.commands': 'Perintah:',
546
+
547
+ // ---- session manager / toasts ------------------------------------------
548
+ 'session.newTitle': 'Sesi baru',
549
+ 'session.noSaved': 'Tidak ada sesi tersimpan',
550
+ 'session.manageTitle': 'Kelola sesi',
551
+ 'session.manageSubtitle': 'Enter buka · Ctrl+D dua kali untuk hapus · Esc kembali',
552
+ 'session.loading': 'Memuat sesi...',
553
+ 'session.deleted': 'sesi {label} dihapus',
554
+ 'session.deleteFailed': 'hapus sesi: {error}',
555
+ 'session.deleteNotFound': 'direktori sesi tersimpan tidak ditemukan',
556
+ 'session.deleteCancelled': 'penghapusan dibatalkan',
557
+ 'session.resumed': 'sesi {id} dilanjutkan',
558
+ 'session.started': 'sesi {id} dimulai',
559
+ 'session.openFailed': 'gagal membuka sesi: {error}',
560
+ 'session.forkSummary': '{label} dari {parent} · {files}',
561
+ 'session.forkDropped': ' · membuang {count} input tertunda warisan',
562
+ 'session.conversationOnly': 'hanya percakapan',
563
+ 'session.rewindLabel': 'putar ulang #{n}',
564
+ 'session.files': 'berkas: {summary}',
565
+ 'session.error': 'kesalahan: {error}',
566
+ 'session.interruptFirst': 'hentikan dulu giliran yang berjalan (/cancel)',
567
+ 'session.interruptFirstEsc': 'hentikan dulu giliran yang berjalan (Esc atau /cancel)',
568
+ 'session.startFirst': 'mulai sesi dulu',
569
+ 'session.noReasoningLevels': 'model saat ini tidak punya tingkat penalaran',
570
+ 'session.settingsUnavailable': 'pengaturan tidak tersedia',
571
+ 'session.interruptRequested': 'permintaan henti dikirim',
572
+ 'session.nothingToInterrupt': 'tidak ada yang perlu dihentikan',
573
+ 'session.noSessionRunning': 'tidak ada sesi berjalan',
574
+ 'session.promptCleared': 'prompt dibersihkan',
575
+ 'session.exitAgain': 'tekan Ctrl+C lagi untuk keluar',
576
+ 'session.usageResume': 'penggunaan: /resume <sessionId>',
577
+ 'session.currentModel': 'model saat ini: {model}',
578
+ 'session.modelSet': 'model diatur ke {model} (berlaku untuk permintaan berikutnya)',
579
+ 'session.currentProvider': 'penyedia saat ini: {provider}',
580
+ 'session.providerSet': 'penyedia diatur ke {provider} (berlaku untuk permintaan berikutnya)',
581
+ 'session.unknownCommand': 'perintah tidak dikenal /{name} — coba /help',
582
+ 'session.queryMissing': 'kueri sesi tidak terpasang di profil ini',
583
+ 'session.listHeader': 'sesi:',
584
+ 'session.noPersisted': 'tidak ada sesi tersimpan',
585
+ 'session.listFailed': 'gagal mendaftar sesi: {error}',
586
+ 'session.modelNoImages': 'model "{model}" tidak mendukung input gambar',
587
+ 'session.imageAttachFailed': 'gagal melampirkan gambar: {error}',
588
+ 'session.attachmentsUnavailable': 'layanan lampiran tidak tersedia; gambar tidak dapat dibaca',
589
+ 'session.copied.one': 'menyalin {count} baris ke clipboard',
590
+ 'session.copied.other': 'menyalin {count} baris ke clipboard',
591
+ 'session.valueRequired': 'nilai wajib diisi',
592
+ 'session.minChars': 'minimal {count} karakter',
593
+ 'session.maxChars': 'maksimal {count} karakter',
594
+ 'session.answerRequired': 'pilih opsi atau ketik jawaban',
595
+ 'session.typeAnswer': 'ketik jawaban atau tekan Esc',
596
+ 'session.updatesAvailable': 'Pembaruan: {list} — Ctrl+P → Pembaruan',
597
+ 'session.versionsError': 'versi: {error}',
598
+ 'session.mcpError': 'MCP: {error}',
599
+ 'session.noClipboard': 'tidak ada jalur clipboard tersedia',
600
+ 'session.unsupportedInteraction': 'jenis interaksi tidak didukung: {kind}',
601
+
602
+ // ---- tool activity summaries -------------------------------------------
603
+ 'tool.run': 'jalankan {command}',
604
+ 'tool.askUser': 'tanya pengguna',
605
+ 'tool.askQuestions': 'tanya {count} pertanyaan',
33
606
 
34
- // ---- title screen -------------------------------------------------------
35
- 'splash.hint': 'Tanyakan apa saja... "Perbaiki tes yang gagal"',
36
- 'splash.shortcutSettings': 'pengaturan',
37
- 'splash.shortcutThinking': 'penalaran',
38
-
39
- // ---- header / sidebar / status row -------------------------------------
40
- // ---- command-line help (dsh --profile tui --help) -----------------------
41
- 'startup.description': 'Menjalankan antarmuka terminal DeepSeek Harness.',
42
- 'startup.helpOption': 'tampilkan bantuan ini',
43
- 'startup.resume': 'lanjutkan sesi tersimpan yang ada berdasarkan id',
44
- 'startup.model': 'id model bawaan untuk sesi baru',
45
- 'startup.provider': 'rute penyedia bawaan untuk sesi baru',
46
- 'startup.sidebar': 'tampilkan bilah sisi sesi (bawaan)',
47
- 'startup.noSidebar': 'mulai tanpa bilah sisi',
48
- 'startup.examples': 'Contoh:',
49
- 'startup.exampleFresh': 'mulai sesi baru',
50
- 'startup.exampleResume': 'lanjutkan sesi tersimpan',
51
-
52
- 'header.workspace': 'RUANG KERJA',
53
- 'sidebar.sessions': 'SESI',
54
- 'sidebar.recent': 'TERBARU',
55
- 'sidebar.newSession': '+ Sesi baru',
56
- 'status.model': 'model',
57
- 'status.draftTokens': '{count} token draf',
58
- 'status.ctrlP': 'ctrl+p perintah',
59
- 'status.interrupt': 'hentikan: ctrl+c',
60
-
61
- // ---- composer command hints --------------------------------------------
62
- 'hint.help': 'tampilkan bantuan',
63
- 'hint.settings': 'buka pengaturan',
64
- 'hint.new': 'sesi baru',
65
- 'hint.resume': 'lanjutkan sesi',
66
- 'hint.model': 'pilih model',
67
- 'hint.provider': 'pilih penyedia',
68
- 'hint.rewind': 'pemilih putar ulang',
69
- 'hint.stats': 'statistik sesi & token',
70
- 'hint.clear': 'bersihkan tampilan',
71
- 'hint.cancel': 'batalkan giliran berjalan',
72
- 'hint.quit': 'keluar',
73
- 'hint.compact': 'ringkas konteks',
74
- 'hint.goal': 'kelola tujuan',
75
-
76
- // ---- transcript blocks --------------------------------------------------
77
- 'transcript.turns.one': '{count} giliran',
78
- 'transcript.turns.other': '{count} giliran',
79
- 'transcript.steps.one': '{count} langkah',
80
- 'transcript.steps.other': '{count} langkah',
81
- 'transcript.thinking': ' sedang menalar',
82
- 'transcript.streaming': ' · mengalir…',
83
- 'transcript.steeringBadge': ' ⟲ mengarahkan',
84
- 'transcript.tasks': 'tugas',
85
- 'transcript.systemPrompt': ' prompt sistem',
86
- 'transcript.pendingInput': ' input tertunda · ',
87
- 'transcript.steering': ' mengarahkan',
88
- 'transcript.queued': ' dalam antrean',
89
- 'note.systemReminder': 'pengingat sistem',
90
- 'note.compaction': 'pemadatan',
91
-
92
- // ---- images and mermaid -------------------------------------------------
93
- 'image.attachment': '🖼 lampiran gambar',
94
- 'image.rendering': '⏳ merender gambar…',
95
- 'image.renderFailed': '⚠ gagal merender gambar · {error}',
96
- 'image.mermaidRendering': '⏳ merender diagram mermaid…',
97
- 'image.mermaidTooWide': '↔ diagram mermaid butuh {width} kolom, panel ini punya {budget}',
98
- 'image.altFallback': 'gambar',
99
-
100
- // ---- composer / approval prompt ----------------------------------------
101
- 'composer.imageHint': 'Gambar ditempel: gunakan model/plugin multimodal atau deepseek-v4-flash-vision-exp, jika tidak gambar tidak dapat dibaca',
102
- 'composer.approval': 'Persetujuan · ',
103
- 'composer.summary': 'Ringkasan · ',
104
- 'composer.origin': 'Asal · ',
105
- 'composer.risk': 'Risiko · ',
106
- 'composer.approvalHint': 'y izinkan · n tolak · Esc batal',
107
- 'risk.low': 'rendah',
108
- 'risk.medium': 'sedang',
109
- 'risk.high': 'tinggi',
110
- 'composer.effortHint': 'Tab / ←/→ sesuaikan · Esc tutup',
111
-
112
- // ---- right status rail --------------------------------------------------
113
- 'rail.model': 'MODEL',
114
- 'rail.thinking': 'PENALARAN',
115
- 'rail.context': 'KONTEKS',
116
- 'rail.session': 'SESI',
117
- 'rail.goal': 'TUJUAN',
118
- 'rail.subagents': 'SUBAGEN',
119
- 'rail.noData': '—',
120
- 'rail.percentUsed': '{percent}% terpakai',
121
- 'rail.tokens': '~{used} / {window} token',
122
- 'rail.cacheHit': 'cache {percent}% kena',
123
- 'rail.breakdown': 'sistem {system} · alat {tools} · pesan {messages}',
124
- 'rail.contextPending': 'tampil setelah penggunaan dilaporkan',
125
- 'rail.subagentCounts': '{running} berjalan · {total} total',
126
- 'rail.unreadable': '{label} (tidak terbaca)',
127
- 'rail.more': '… +{count} lagi',
128
- 'rail.round': ' · putaran {started}/{max}',
129
- 'goal.active': 'aktif',
130
- 'goal.paused': 'dijeda',
131
- 'goal.blocked': 'terblokir',
132
- 'goal.complete': 'selesai',
133
-
134
- // ---- session stats window ----------------------------------------------
135
- 'stats.title': 'statistik sesi',
136
- 'stats.hint': 'klik bilah atau /stats',
137
- 'stats.usage': 'penggunaan',
138
- 'stats.duration': 'durasi',
139
- 'stats.speed': 'kecepatan',
140
- 'stats.tokens': 'token',
141
- 'stats.cache': 'cache',
142
- 'stats.context': 'konteks',
143
- 'stats.noSteps': 'belum ada langkah selesai',
144
- 'stats.llmTime': 'LLM {value}',
145
- 'stats.toolTime': 'alat {value}',
146
- 'stats.ttft': 'TTFT rata-rata {value}',
147
- 'stats.tokensPerSecond': '{value} tok/s',
148
- 'stats.cacheRate': 'cache {percent}%',
149
- 'stats.inOut': 'masuk {input} · keluar {output}',
150
- 'stats.cacheDetail': '{percent}% kena · baca {read} · tulis {write} · luput {miss}',
151
- 'stats.contextUsed': '{percent}% terpakai ~{used} / {window}',
152
- 'stats.systemPrompt': 'prompt sistem',
153
- 'stats.tools': 'alat',
154
- 'stats.messages': 'pesan',
155
- 'stats.compositionUnavailable': 'komposisi tidak tersedia',
156
- 'stats.contextPending': 'pemakaian konteks muncul setelah permintaan melaporkan penggunaan',
157
-
158
- // ---- questions modal ----------------------------------------------------
159
- 'questions.title': 'Pertanyaan',
160
- 'questions.titleOf': 'Pertanyaan {index} dari {total}',
161
- 'questions.defer': 'Esc tunda',
162
- 'questions.range': '{from}-{to} dari {total} PgUp/PgDn',
163
- 'questions.other': 'Lainnya: ',
164
- 'questions.answer': 'Jawaban: ',
165
- 'questions.placeholder': 'ketik jawaban Anda',
166
- 'questions.hintCustom': 'Enter konfirmasi · Esc kembali',
167
- 'questions.hintMulti': 'Space pilih · Enter lanjut · Atas/Bawah pindah',
168
- 'questions.hintSingle': 'Enter pilih · Atas/Bawah pindah',
169
-
170
- // ---- secret prompt ------------------------------------------------------
171
- 'secret.hint': 'Enter untuk kirim · Esc untuk batal',
172
-
173
- // ---- settings dialog chrome --------------------------------------------
174
- 'settings.title': 'Pengaturan',
175
- 'settings.menu': 'MENU',
176
- 'settings.shared': 'Dibagi dengan DeepSeek Harness WebUI',
177
- 'settings.footerEdit': 'Enter simpan · Esc batal',
178
- 'settings.footerMenu': '↑/↓ pindah · Tab menu · Enter pilih · Esc kembali',
179
- 'settings.footerPlain': '↑/↓ pindah · Enter pilih · Esc kembali',
180
- 'settings.confirmHint': '{text} · Y / N',
181
- 'settings.confirmDefault': 'Y konfirmasi · N batal',
182
- 'settings.confirmDeleteSession': 'Ctrl+D lagi untuk menghapus',
183
- 'settings.confirmChange': 'Konfirmasi perubahan ini?',
184
- 'settings.deleteTwice': 'Tekan Ctrl+D lagi untuk menghapus ',
185
- 'settings.deleteMcpTwice': 'Tekan Delete lagi untuk menghapus ',
186
- 'settings.noSession': 'tidak ada sesi dipilih',
187
- 'settings.noSessions': 'tidak ada sesi tersedia',
188
- 'settings.noMcp': 'tidak ada server MCP dipilih',
189
- 'settings.noOptions': 'tidak ada opsi untuk {label}',
190
- 'settings.saved': 'disimpan ke pengaturan DSH',
191
- 'settings.providerRemoved': 'penyedia dihapus',
192
- 'settings.conflict': 'pengaturan berubah di tempat lain; dimuat ulang',
193
- 'settings.error': 'pengaturan: {error}',
194
- 'settings.dshSettings': 'pengaturan DSH',
195
- 'settings.optionList': 'Enter pilih · Esc kembali',
196
-
197
- // ---- settings left menu -------------------------------------------------
198
- 'menu.main': 'Utama',
199
- 'menu.model': 'Model',
200
- 'menu.update': 'Pembaruan',
201
- 'menu.mcp': 'MCP',
202
-
203
- // ---- settings rows: main tab -------------------------------------------
204
- 'settings.general': 'Umum',
205
- 'settings.graphics': 'Grafik',
206
- 'settings.sessions': 'Sesi',
207
- 'settings.system': 'Sistem',
208
- 'settings.busyEnter': 'Enter saat sibuk',
209
- 'settings.defaultPreset': 'Preset bawaan',
210
- 'settings.permissionPreset': 'Preset izin',
211
- 'settings.permissionDangerConfirm': 'Aktifkan akses alat dan berkas tanpa batas?',
212
- 'settings.graphicsRendering': 'Rendering grafik',
213
- 'settings.noProtocolFallback': 'Cadangan tanpa protokol',
214
- 'settings.imageHeightCap': 'Batas tinggi gambar (baris)',
215
- 'settings.mermaidRendering': 'Rendering mermaid',
216
- 'settings.newSession': 'Sesi baru',
217
- 'settings.manageSessions': 'Kelola sesi',
218
- 'settings.providerConfig': 'Konfigurasi API penyedia',
219
- 'settings.updateManager': 'Pengelola pembaruan',
220
- 'settings.settingsFile': 'Berkas pengaturan',
221
- 'settings.language': 'Bahasa',
222
- 'settings.languageSystem': 'Sistem ({language})',
223
- 'settings.languageSaved': 'bahasa: {language}',
224
-
225
- // ---- model tab ----------------------------------------------------------
226
- 'model.title': 'Model',
227
- 'model.subtitle': 'Enter memilih model terdaftar sebagai bawaan',
228
- 'model.defaultSection': 'Bawaan',
229
- 'model.defaultProvider': 'Penyedia bawaan',
230
- 'model.defaultModel': 'Model bawaan',
231
- 'model.reasoning': 'Penalaran',
232
- 'model.providerUrl': 'URL penyedia',
233
- 'model.providerApiKey': 'Kunci API penyedia',
234
- 'model.displayName': 'Nama tampilan',
235
- 'model.wireProtocol': 'Protokol transmisi',
236
- 'model.defaultImageInput': 'Input gambar bawaan',
237
- 'model.models': 'Model',
238
- 'model.fetch': 'ambil…',
239
- 'model.selectedCount': '{count} dipilih',
240
- 'model.removeProvider': 'Hapus penyedia',
241
- 'model.removeProviderConfirm': 'Hapus {name} beserta kredensial terkelolanya?',
242
- 'model.noModels': 'tidak ada model tersedia',
243
- 'model.noModelsReturned': 'penyedia tidak mengembalikan model',
244
- 'model.fetchUnavailable': 'ambil otomatis tidak tersedia — model tersimpan · Enter ubah',
245
- 'model.fetchOk': 'terambil otomatis · Enter ubah · Esc kembali',
246
- 'model.fetching': 'Mengambil model…',
247
- 'model.autoFetching': 'mengambil otomatis…',
248
- 'model.credentialConfigured': 'terkonfigurasi ({source})',
249
- 'model.credentialMissing': 'belum dikonfigurasi',
250
- 'model.defaultTag': 'bawaan',
251
- 'model.providerUnavailable': 'penyedia tidak lagi tersedia',
252
- 'model.namespaceUnavailable': 'namespace pengaturan penyedia tidak tersedia',
253
- 'model.apiKeyEmpty': 'kunci API tidak boleh kosong',
254
- 'model.credentialsUnavailable': 'layanan kredensial tidak tersedia',
255
- 'model.noProviderModels': 'penyedia terpilih tidak punya model tersedia',
256
-
257
- // ---- MCP tab ------------------------------------------------------------
258
- 'mcp.title': 'MCP',
259
- 'mcp.subtitle': 'Enter ubah · Del hapus · Esc kembali',
260
- 'mcp.editSubtitle': 'Enter ubah · Esc kembali',
261
- 'mcp.servers': 'Server MCP',
262
- 'mcp.empty': 'Belum ada server MCP dikonfigurasi',
263
- 'mcp.add': 'Tambah server MCP',
264
- 'mcp.scope': 'cakupan',
265
- 'mcp.scopeUserPrefix': 'pengguna · {path}',
266
- 'mcp.scopePathPrefix': 'jalur · {path}',
267
- 'mcp.configFiles': 'File konfigurasi',
268
- 'mcp.userScope': 'pengguna (semua sesi)',
269
- 'mcp.secrets': 'Rahasia',
270
- 'mcp.secretsPlain': 'teks polos di berkas konfigurasi',
271
- 'mcp.loaded': 'dimuat',
272
- 'mcp.notCreated': 'belum dibuat',
273
- 'mcp.type.stdio': 'Perintah lokal',
274
- 'mcp.type.http': 'HTTP',
275
- 'mcp.type.sse': 'SSE',
276
- 'mcp.state.connected': '● terhubung',
277
- 'mcp.state.tools.one': '● {count} alat',
278
- 'mcp.state.tools.other': '● {count} alat',
279
- 'mcp.state.pending': '… menghubungkan',
280
- 'mcp.state.disabled': '○ nonaktif',
281
- 'mcp.state.idle': '○ tidak terhubung',
282
- 'mcp.form.add': 'Tambah server MCP',
283
- 'mcp.form.edit': 'Ubah server MCP · {name}',
284
- 'mcp.titleAdd': 'MCP · tambah',
285
- 'mcp.titleEdit': 'MCP · edit',
286
- 'mcp.field.name': 'Nama',
287
- 'mcp.field.type': 'Jenis',
288
- 'mcp.field.timeout': 'Batas waktu (ms)',
289
- 'mcp.field.command': 'Perintah',
290
- 'mcp.field.args': 'Argumen',
291
- 'mcp.field.env': 'Lingkungan (JSON)',
292
- 'mcp.field.url': 'URL',
293
- 'mcp.field.headers': 'Header (JSON)',
294
- 'mcp.field.scope': 'Cakupan',
295
- 'mcp.field.path': 'Jalur',
296
- 'mcp.field.enabled': 'Aktif',
297
- 'mcp.field.save': 'Simpan',
298
- 'mcp.field.remove': 'Hapus',
299
- 'mcp.choice.stdio': 'Perintah lokal (stdio)',
300
- 'mcp.choice.http': 'HTTP (streamable)',
301
- 'mcp.choice.sse': 'SSE (HTTP+SSE lama)',
302
- 'mcp.choice.scopeUser': 'Pengguna — semua sesi',
303
- 'mcp.choice.scopePath': 'Jalur — sesi di bawah direktori',
304
- 'mcp.removeConfirm': 'Hapus server MCP ini dan putuskan koneksinya?',
305
- 'mcp.saved': 'Server MCP disimpan',
306
- 'mcp.added': 'Server MCP ditambahkan',
307
- 'mcp.removed': 'Server MCP dihapus',
308
- 'mcp.error.name': 'nama harus 1-32 karakter huruf, angka, "-" atau "_"',
309
- 'mcp.error.duplicate': 'server MCP bernama "{name}" sudah dikonfigurasi',
310
- 'mcp.error.timeout': 'timeoutMs harus bilangan bulat antara 1 dan {max}',
311
- 'mcp.error.pathNeeded': 'server bercakupan jalur memerlukan direktori',
312
- 'mcp.error.pathAbsolute': 'cakupan jalur harus direktori absolut',
313
- 'mcp.error.commandNeeded': 'server stdio memerlukan perintah',
314
- 'mcp.error.urlParse': 'URL tidak dapat diurai',
315
- 'mcp.error.urlScheme': 'URL harus memakai http atau https',
316
- 'mcp.error.pathNotDir': 'cakupan jalur bukan direktori: {path}',
317
- 'mcp.error.configIsDir': 'jalur berkas konfigurasi adalah direktori: {path}',
318
- 'mcp.error.notFound': 'tidak ada server MCP bernama "{name}" dikonfigurasi',
319
- 'mcp.error.documentGone': 'dokumen yang mendefinisikan "{name}" sudah hilang: {error}',
320
- 'mcp.error.noClient': 'host tidak menyediakan klien MCP',
321
- 'mcp.error.connectTimeout': 'waktu menghubungkan ke {name} habis',
322
- 'mcp.error.json': 'dokumen bukan JSON yang valid: {error}',
323
- 'mcp.error.jsonObject': 'dokumen harus berupa objek JSON',
324
- 'mcp.error.serversObject': '"servers" harus berupa objek JSON',
325
- 'mcp.error.argsArray': 'argumen harus berupa array JSON berisi string',
326
- 'mcp.error.argsTypes': 'argumen harus berupa string atau angka',
327
- 'mcp.error.argsUnclosed': 'argumen memiliki tanda kutip yang belum ditutup',
328
- 'mcp.error.envObject': '{label} harus berupa objek JSON',
329
- 'mcp.error.envValue': 'nilai "{name}" pada {label} harus string, angka, atau boolean',
330
- 'mcp.error.header': 'header HTTP tidak valid "{name}"',
331
- 'mcp.error.envName': 'nama lingkungan tidak valid "{name}"',
332
-
333
- // ---- rewind -------------------------------------------------------------
334
- 'rewind.title': 'Putar ulang',
335
- 'rewind.restoreTo': 'Kembalikan ke titik sebelum: {label}',
336
- 'rewind.restorePrompt': 'Kembalikan percakapan ke titik sebelum…',
337
- 'rewind.empty': 'Belum ada yang bisa diputar ulang.',
338
- 'rewind.option.conversation': 'Kembalikan percakapan',
339
- 'rewind.option.both': 'Kembalikan percakapan dan berkas',
340
- 'rewind.option.code': 'Kembalikan berkas',
341
- 'rewind.option.cancel': 'Batal',
342
- 'rewind.current': '(saat ini)',
343
- 'rewind.noPoints': 'tidak ada pesan pengguna untuk diputar ulang',
344
- 'rewind.unknownPoint': 'titik putar ulang tidak dikenal "{selector}" — gunakan angka atau last',
345
- 'rewind.noPoint': 'tidak ada titik putar ulang {n} — 1..{count}',
346
- 'rewind.notGit': 'bukan worktree git',
347
- 'rewind.noBackup': 'tidak ada lokasi cadangan',
348
- 'rewind.filesNotRestored': 'berkas tidak dikembalikan',
349
- 'rewind.filesNotRestoredReason': 'berkas tidak dikembalikan ({reason})',
350
- 'rewind.restored.one': 'mengembalikan {count} berkas terlacak dari HEAD',
351
- 'rewind.restored.other': 'mengembalikan {count} berkas terlacak dari HEAD',
352
- 'rewind.removed.one': 'menghapus {count} berkas baru',
353
- 'rewind.removed.other': 'menghapus {count} berkas baru',
354
- 'rewind.skipped': 'melewati {count}',
355
- 'rewind.previousSaved': 'konten sebelumnya disimpan di {path}',
356
- 'rewind.noChanges': 'tidak ada perubahan berkas setelah titik ini',
357
- 'rewind.image': '[gambar]',
358
- 'rewind.images': '[{count} gambar]',
359
- 'rewind.emptyMessage': '(kosong)',
360
-
361
- // ---- update tab ---------------------------------------------------------
362
- 'update.title': 'Pembaruan',
363
- 'update.checking': 'Memeriksa versi…',
364
- 'update.fetching': 'mengambil dari registry npm…',
365
- 'update.fetchingVersions': 'Mengambil versi…',
366
- 'update.versionsSubtitle': 'Enter unduh · Esc kembali',
367
- 'update.installed': 'Terpasang',
368
- 'update.latest': 'Terbaru (tag npm)',
369
- 'update.status': 'Status',
370
- 'update.versions': 'Versi',
371
- 'update.selectVersion': 'Pilih versi…',
372
- 'update.restartApply': 'Mulai ulang untuk menerapkan {version}',
373
- 'update.enterRestart': 'Enter mulai ulang',
374
- 'update.discard': 'Buang unduhan {version}',
375
- 'update.actions': 'Tindakan',
376
- 'update.checkNow': 'Periksa sekarang',
377
- 'update.checkingShort': 'Memeriksa…',
378
- 'update.startupCheck': 'Pemeriksaan saat mulai',
379
- 'update.profile': 'profil',
380
- 'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
381
- 'update.statusCorrupt': 'Instalasi rusak — pasang ulang di bawah',
382
- 'update.statusError': 'Pemeriksaan registry gagal: {error}',
383
- 'update.statusAvailable': 'Pembaruan tersedia → {version}',
384
- 'update.statusUpToDate': 'Sudah terbaru',
385
- 'update.statusNoStable': 'Tidak ada rilis stabil — pilih dari Versi',
386
- 'update.notOnPath': 'tidak ditemukan di PATH',
387
- 'update.subtitleStaged': '{package} {version} terunduh — mulai ulang untuk menerapkan',
388
- 'update.subtitleIdle': 'Enter pilih · unduh, lalu mulai ulang untuk menerapkan',
389
- 'update.download': 'Unduh',
390
- 'update.contacting': 'menghubungi registry…',
391
- 'update.version': 'Versi',
392
- 'update.savingTo': 'Menyimpan ke',
393
- 'update.escCancels': 'Esc membatalkan',
394
- 'update.restartApplyQ': 'Mulai ulang untuk menerapkan {label} {version}? (sudah terunduh)',
395
- 'update.downloadQ': 'Unduh {label} {version} dan mulai ulang untuk menerapkan?',
396
- 'update.localSwitch': ' — mengalihkan instalasi lokal ke versi registry',
397
- 'update.downloaded': 'terunduh · mulai ulang untuk menerapkan',
398
- 'update.downloadedToast': '{label} {version} terunduh · terapkan dari tab Pembaruan',
399
- 'update.downloadedConfirm': 'Terunduh mulai ulang untuk menerapkan {label} {version}? (y/n)',
400
- 'update.alreadyDownloadedConfirm': 'Sudah terunduh · mulai ulang untuk menerapkan {label} {version}? (y/n)',
401
- 'update.downloadCancelled': 'unduhan dibatalkan',
402
- 'update.downloadFailed': 'unduhan gagal: {error}',
403
- 'update.stagedGone': 'unduhan siap tidak lagi ada — pilih versi lagi',
404
- 'update.locks.one': 'tidak dapat menerapkan selama dsh berjalan di {count} proses lain — tutup dan coba lagi',
405
- 'update.locks.other': 'tidak dapat menerapkan selama dsh berjalan di {count} proses lain — tutup dan coba lagi',
406
- 'update.noNpm': 'tidak dapat menerapkan: npm tidak ditemukan',
407
- 'update.noDshCli': 'tidak dapat menerapkan: dsh CLI tidak ditemukan',
408
- 'update.installerFailed': 'tidak dapat memulai pemasang — mulai ulang dsh untuk menerapkan {label}',
409
- 'update.applying': 'menerapkan {label} · keluar, memulai ulang…',
410
- 'update.stagedDiscarded': 'unduhan siap dibuang',
411
- 'update.tagCached': 'di-cache',
412
- 'update.tagStaged': 'siap',
413
- 'update.installFailed': 'Pemasangan gagal (kode {code}) — coba lagi dari Versi',
414
- 'update.installFailedRetry': 'buka Pembaruan → dsh-oc-tui → Versi, lalu pilih versi untuk diunduh lagi',
415
- 'update.installUnreadable': 'pemasangan melaporkan sukses tetapi versi terpasang {installed} (diharapkan {expected}) — perbaiki: {repair}',
416
- 'update.registryUnreachable': 'registry tidak terjangkau: {error}',
417
- 'update.notOnRegistry': '{package} tidak ada di registry',
418
- 'update.registryHttp': 'registry mengembalikan HTTP {status} untuk {package}',
419
- 'update.noTarballUrl': 'respons registry tidak memuat URL tarball',
420
- 'update.downloadHttp': 'unduhan gagal: HTTP {status} untuk {url}',
421
- 'update.downloadEmpty': 'unduhan gagal: isi respons kosong',
422
- 'update.integrityFailed': 'pemeriksaan integritas gagal untuk {file} — unduhan dibuang',
423
- 'update.npmMissing': 'npm tidak ditemukan di PATH',
424
- 'update.npmViewFailed': 'npm view {package} keluar dengan kode {code}',
425
- 'update.timedOut': '\n(waktu habis setelah {ms}ms)',
426
- 'update.noOutput': '(tidak ada keluaran)',
427
-
428
- // ---- commands -----------------------------------------------------------
429
- 'command.settings': 'Buka halaman pengaturan TUI',
430
- 'command.help': 'Tampilkan referensi tombol dan perintah TUI',
431
- 'command.stats': 'Tampilkan statistik token dan cache sesi',
432
- 'command.new': 'Mulai sesi baru',
433
- 'command.resume': 'Lanjutkan sesi tersimpan',
434
- 'command.clear': 'Bersihkan transkrip',
435
- 'command.cancel': 'Batalkan giliran berjalan',
436
- 'command.rewind': 'Putar sesi ke titik sebelumnya',
437
- 'command.quit': 'Keluar dari TUI',
438
-
439
- // ---- help overlay -------------------------------------------------------
440
- 'help.title': 'DeepSeek Harness TUI — bantuan',
441
- 'help.enter': 'Enter',
442
- 'help.enterDesc': 'kirim pesan',
443
- 'help.ctrlEnter': 'Ctrl+Enter',
444
- 'help.ctrlEnterDesc': 'sisipkan baris baru',
445
- 'help.ctrlC': 'Ctrl+C',
446
- 'help.ctrlCDesc': 'batalkan giliran berjalan; tekan lagi untuk keluar',
447
- 'help.ctrlP': 'Ctrl+P',
448
- 'help.ctrlPDesc': 'buka pengaturan',
449
- 'help.ctrlE': 'Ctrl+E',
450
- 'help.ctrlEDesc': 'ubah penggeser penalaran',
451
- 'help.tab': 'Tab',
452
- 'help.tabDesc': 'ganti intensitas penalaran',
453
- 'help.ctrlN': 'Ctrl+N',
454
- 'help.ctrlNDesc': 'sesi baru',
455
- 'help.ctrlD': 'Ctrl+D',
456
- 'help.ctrlDDesc': 'hapus sesi di Kelola sesi (tekan dua kali)',
457
- 'help.pg': 'PgUp / PgDn',
458
- 'help.pgDesc': 'gulir transkrip',
459
- 'help.shiftArrows': 'Shift+↑/↓',
460
- 'help.shiftArrowsDesc': 'gulir rel status (jendela lebar)',
461
- 'help.upDown': 'Up / Down',
462
- 'help.upDownDesc': 'kursor atas/bawah; riwayat di tepi',
463
- 'help.mouse': 'Mouse drag',
464
- 'help.mouseDesc': 'pilih teks; klik kanan menyalin',
465
- 'help.wheel': 'Wheel',
466
- 'help.wheelDesc': 'gulir transkrip / pengaturan',
467
- 'help.escEsc': 'Esc Esc',
468
- 'help.escEscDesc': 'pemilih putar ulang',
469
- 'help.esc': 'Esc',
470
- 'help.escDesc': 'tutup lapisan · batalkan giliran · bersihkan prompt',
471
- 'help.commands': 'Perintah:',
472
-
473
- // ---- session manager / toasts ------------------------------------------
474
- 'session.newTitle': 'Sesi baru',
475
- 'session.noSaved': 'Tidak ada sesi tersimpan',
476
- 'session.manageTitle': 'Kelola sesi',
477
- 'session.manageSubtitle': 'Enter buka · Ctrl+D dua kali untuk hapus · Esc kembali',
478
- 'session.loading': 'Memuat sesi...',
479
- 'session.deleted': 'sesi {label} dihapus',
480
- 'session.deleteFailed': 'hapus sesi: {error}',
481
- 'session.deleteNotFound': 'direktori sesi tersimpan tidak ditemukan',
482
- 'session.deleteCancelled': 'penghapusan dibatalkan',
483
- 'session.resumed': 'sesi {id} dilanjutkan',
484
- 'session.started': 'sesi {id} dimulai',
485
- 'session.openFailed': 'gagal membuka sesi: {error}',
486
- 'session.forkSummary': '{label} dari {parent} · {files}',
487
- 'session.forkDropped': ' · membuang {count} input tertunda warisan',
488
- 'session.conversationOnly': 'hanya percakapan',
489
- 'session.rewindLabel': 'putar ulang #{n}',
490
- 'session.files': 'berkas: {summary}',
491
- 'session.error': 'kesalahan: {error}',
492
- 'session.interruptFirst': 'hentikan dulu giliran yang berjalan (/cancel)',
493
- 'session.interruptFirstEsc': 'hentikan dulu giliran yang berjalan (Esc atau /cancel)',
494
- 'session.startFirst': 'mulai sesi dulu',
495
- 'session.noReasoningLevels': 'model saat ini tidak punya tingkat penalaran',
496
- 'session.settingsUnavailable': 'pengaturan tidak tersedia',
497
- 'session.interruptRequested': 'permintaan henti dikirim',
498
- 'session.nothingToInterrupt': 'tidak ada yang perlu dihentikan',
499
- 'session.noSessionRunning': 'tidak ada sesi berjalan',
500
- 'session.promptCleared': 'prompt dibersihkan',
501
- 'session.exitAgain': 'tekan Ctrl+C lagi untuk keluar',
502
- 'session.usageResume': 'penggunaan: /resume <sessionId>',
503
- 'session.currentModel': 'model saat ini: {model}',
504
- 'session.modelSet': 'model diatur ke {model} (berlaku untuk permintaan berikutnya)',
505
- 'session.currentProvider': 'penyedia saat ini: {provider}',
506
- 'session.providerSet': 'penyedia diatur ke {provider} (berlaku untuk permintaan berikutnya)',
507
- 'session.unknownCommand': 'perintah tidak dikenal /{name} — coba /help',
508
- 'session.queryMissing': 'kueri sesi tidak terpasang di profil ini',
509
- 'session.listHeader': 'sesi:',
510
- 'session.noPersisted': 'tidak ada sesi tersimpan',
511
- 'session.listFailed': 'gagal mendaftar sesi: {error}',
512
- 'session.modelNoImages': 'model "{model}" tidak mendukung input gambar',
513
- 'session.imageAttachFailed': 'gagal melampirkan gambar: {error}',
514
- 'session.attachmentsUnavailable': 'layanan lampiran tidak tersedia; gambar tidak dapat dibaca',
515
- 'session.copied.one': 'menyalin {count} baris ke clipboard',
516
- 'session.copied.other': 'menyalin {count} baris ke clipboard',
517
- 'session.valueRequired': 'nilai wajib diisi',
518
- 'session.minChars': 'minimal {count} karakter',
519
- 'session.maxChars': 'maksimal {count} karakter',
520
- 'session.answerRequired': 'pilih opsi atau ketik jawaban',
521
- 'session.typeAnswer': 'ketik jawaban atau tekan Esc',
522
- 'session.updatesAvailable': 'Pembaruan: {list} — Ctrl+P → Pembaruan',
523
- 'session.versionsError': 'versi: {error}',
524
- 'session.mcpError': 'MCP: {error}',
525
- 'session.noClipboard': 'tidak ada jalur clipboard tersedia',
526
- 'session.unsupportedInteraction': 'jenis interaksi tidak didukung: {kind}',
527
-
528
- // ---- tool activity summaries -------------------------------------------
529
- 'tool.run': 'jalankan {command}',
530
- 'tool.askUser': 'tanya pengguna',
531
- 'tool.askQuestions': 'tanya {count} pertanyaan',
532
- }
607
+ // ---- host diagnostics ----------------------------------------------------
608
+ 'diagnostics.notice': 'Diagnostik host dicatat di {path}',
609
+ }