The fork was pinned at upstream v0.18.0. That is the entire reason the window
ran TWO sidebars and TWO near-identical panel toggles: DSH 2.0.10 ships its own
right sidebar (@deepseek-ai/dsh-client-ui-sidebar-right), and upstream only
adopted it in v0.19.0-alpha.1 — which arrived after our fork point. v0.19.1 is
also the one upstream line whose support range actually matches our host
(engines.dsh >=0.1.5-rc.1, 14 DSH peers ^0.1.5-rc.1, host = 0.1.5-rc.2), so it
is the only tag the host's startup precheck accepts.
What upstream v0.18.0 → v0.19.1 brings
- src/client/native/{index,surface,tab-adapter}.tsx: every tab the plugin can
draw becomes an OFFICIAL native tab type + body, and an external plugin's
descriptor registered later gets its native type too. This is what retires
the fork's own right panel — and with it the duplicate toggle cluster
(`toggleCluster` is gone from v0.19.1).
- native tab-chip icons via the `sidebar.right.pane.tab.title` seat, coloured
built-in tab icons, file/folder glyphs from DSH's own `FileTypeIcon`.
- guide descriptions (DSH renders them while the guide lists <= 4 entries),
tab bodies that fill the panel, and the 0.1.5-rc.2 adaptation work we were
carrying by hand (peer/devDep pinning, primitives' transitive devDeps).
How the sync was done
Rebuilt the tree from the v0.19.1 tag rather than resolving 53 conflicted
files: our v0.18.0 delta was measured first and is only (a) one mechanical
rename `dsh-better-sidebar` -> `dsh-apes-sidebar` and (b) ten real edits. So:
tag tree + rename (scoped: code/config/scripts/tests/README, while the 46
historical docs/plans records and switch.sh's upstream package name stay
untouched) + re-applied deltas + our apes module.
Fork deltas re-applied on the new base
- src/client/apes/ (icons / locales / tabs): the three apes:* information-layer
tabs (agents / apps / profile), registered through the same BetterSidebarService
as the builtins — which is exactly why they now ride upstream's native adapter
into the official sidebar for free.
- identity: package.json (name/version 1.2.0/description/forkedFrom), dsh.plugin.json
(id/version), SIDEBAR_SERVICE_VERSION 1.2.0, README fork notice,
docs/external-plugin-guide.md.
- scripts/switch.sh + the pnpm switch* scripts (apes <-> upstream two-line switch).
- tests/apes-tabs.spec.ts (unescaped: it starts from the v0.19.1 base).
Dropped
- the Phase A native-registration spike (`apes/native-tabs.tsx` + its spec): it
re-derived by hand exactly what upstream's native layer already does — the
hand-written bridge is dead weight now, and v0.19.1's own e2e/jsdom lanes
cover the same seat contract far better.
- the unused apesProfileGuideDesc key and the two package.json.bak.* backups.
Verified on the new base: typecheck clean; build clean; 1351 passed / 9 skipped
(128 files), up from 1255 on the old base.
456 lines
30 KiB
TypeScript
456 lines
30 KiB
TypeScript
/**
|
||
* The id (Indonesian) dictionary for the betterSidebar namespace.
|
||
*
|
||
* Mirrors the key set of `zh` in `locales.ts`. The sidebar's `t()`
|
||
* consults this dict when `attachBetterLocale(store)` has been called
|
||
* with an active better-locale store whose `active` is `'id'`; absent
|
||
* that, the existing zh/en chain runs unchanged.
|
||
*
|
||
* Translation conventions:
|
||
* - Git vocabulary stays close to the English form (stage, commit, branch, fork).
|
||
* - Settings labels mirror the zh cadence (… perilaku / … cara).
|
||
* - Placeholders keep {name} verbatim (interpolation runs after lookup).
|
||
* - English brand names (VS Code, Cursor, Zed, SSH) stay as-is.
|
||
*/
|
||
|
||
export const id: Record<string, string> = {
|
||
files: 'Berkas',
|
||
guideDescFiles: 'Telusuri pohon berkas workspace; klik untuk pratinjau atau edit',
|
||
guideDescGit: 'Perubahan Git dan perubahan berkas sesi ini dalam satu tab',
|
||
guideDescSubagent: 'Topologi subagent dan tugas latar belakang, langsung',
|
||
guideDescSidechat: 'Utas lanjutan independen yang mewarisi konteks sesi ini',
|
||
guideDescTerminal: 'Shell sungguhan (xterm + pty), bisa menyambung ulang',
|
||
guideDescBrowser: 'Peramban tertanam, bisa mengambil alih tautan chat',
|
||
changesSessionEmpty: 'Belum ada operasi file di sesi ini',
|
||
changesRead: 'Baca',
|
||
changesMdReading: 'Baca',
|
||
changesHtmlRender: "Render",
|
||
changesHtmlRaw: "Sumber",
|
||
changesPdfRender: "Render",
|
||
changesPdfRaw: "Sumber",
|
||
changesMdRaw: 'Mentah',
|
||
changesWrite: 'Tulis',
|
||
changesEdit: 'Edit',
|
||
changesRunning: 'berjalan',
|
||
changesError: 'error',
|
||
changesFold: '{count} baris… klik untuk meluaskan',
|
||
changesFoldLoading: 'Meluaskan…',
|
||
changesFoldUnavailable: 'Konteks tidak tersedia',
|
||
changesContext: 'konteks',
|
||
changesPriorUnknown: 'Konten sebelum perubahan berada di luar jendela; ditampilkan sebagai sepenuhnya baru',
|
||
explorer: 'Explorer',
|
||
terminal: 'Terminal',
|
||
editor: 'Editor',
|
||
editorExplorer: 'Perilaku buka berkas',
|
||
editorExplorerDesc: 'Mengontrol cara berkas dibuka',
|
||
editorExplorerMerged: 'Gabung',
|
||
editorExplorerMergedDesc: 'Berkas beralih di tempat di jendela yang sama; jendela baru memulai dengan pohon terbuka',
|
||
editorExplorerSplit: 'Terpisah',
|
||
editorExplorerSplitDesc: 'Jendela tanpa path adalah explorer mandiri (pohon saja); setiap berkas membuka jendelanya sendiri (pohon terpasang, tertutup secara default)',
|
||
editorTreeToggle: 'Panel pohon berkas',
|
||
editorPathPlaceholder: 'Path berkas (relatif terhadap direktori sesi atau absolut), Enter untuk membuka',
|
||
editorSearchPlaceholder: 'Cari berkas berdasarkan nama…',
|
||
editorSearchNoResults: 'Tidak ada berkas yang cocok',
|
||
editorSearchTruncated: 'Terlalu banyak hasil — menampilkan daftar parsial',
|
||
editorEmptyHint: 'Pilih berkas dari panel pohon atau input path di atas untuk mulai pratinjau',
|
||
openFileNewTab: 'Buka di Tab Baru',
|
||
openFileSide: 'Buka di Samping',
|
||
openWithMenu: 'Buka dengan',
|
||
openWithSshSuffix: ' (SSH)',
|
||
pinOpenWith: 'Sematkan ke menu',
|
||
unpinOpenWith: 'Lepas sematan',
|
||
openWithExplorer: 'File Manager',
|
||
openWithVscode: 'VS Code',
|
||
openWithCursor: 'Cursor',
|
||
openWithZed: 'Zed',
|
||
openWithSettingsSshTitle: 'Host remote SSH',
|
||
openWithSettingsSshDesc: 'Kosong = ruang kerja lokal; dengan user@host atau alias SSH, opener VSCode-family beralih ke protokol vscode-remote/ssh-remote dan File Manager / Zed / editor kustom non-VSCode-family disembunyikan dari menu',
|
||
openWithSettingsSshPlaceholder: 'user@host atau alias SSH',
|
||
openWithSettingsCustomTitle: 'Editor kustom',
|
||
openWithSettingsCustomDesc: 'Nama + template URL (placeholder {path}) + flag VSCode-family; dalam mode remote hanya editor VSCode-family yang dapat membuka path remote',
|
||
openWithSettingsAdd: 'Tambah',
|
||
openWithSettingsName: 'Nama',
|
||
openWithSettingsTemplate: 'mis. cursor://file/{path}',
|
||
openWithSettingsFamily: 'VSCode-family',
|
||
openWithSettingsFamilyDesc: 'Editor ini menggunakan dialek URL VSCode (mendukung pembukaan remote SSH)',
|
||
openWithSettingsRemove: 'Hapus',
|
||
openWithSettingsInvalidHint: 'Editor dengan nama hilang atau template tanpa {path} / scheme:// tidak ditampilkan di menu',
|
||
newTab: 'Tab baru',
|
||
openExplorer: 'Explorer',
|
||
brokenSymlink: 'Symlink rusak',
|
||
openGit: 'Panel Git',
|
||
newTerminal: 'Terminal baru',
|
||
terminalLimit: 'Batas terminal tercapai (3)',
|
||
close: 'Tutup',
|
||
closeOtherTabs: 'Tutup Tab Lain',
|
||
closeLeftTabs: 'Tutup Tab di Kiri',
|
||
closeRightTabs: 'Tutup Tab di Kanan',
|
||
floatDropHint: 'Lepaskan untuk membuka di jendela bebas',
|
||
dockToSidebar: 'Kembali ke bilah samping',
|
||
pinTerminal: 'Sematkan Terminal',
|
||
pinAgentTerminal: 'Sematkan Terminal Agent',
|
||
pinToWorkspace: 'Sematkan ke Workspace',
|
||
pinToGlobal: 'Sematkan Global',
|
||
unpinTerminal: 'Lepas Sematan',
|
||
pinnedTerminalTooltip: '{kind} · {scope} · {cwd}',
|
||
pinnedTerminalKindUi: 'Terminal UI',
|
||
pinnedTerminalKindAgent: 'Terminal Agent',
|
||
pinnedTerminalScopeWorkspace: 'Disematkan ke workspace',
|
||
pinnedTerminalScopeGlobal: 'Disematkan global',
|
||
pinnedRailLabel: 'Terminal Tersemat',
|
||
closePinnedTerminal: 'Tutup Terminal',
|
||
collapseBottomPanel: 'Lipat panel bawah',
|
||
expandBottomPanel: 'Bentangkan panel bawah',
|
||
terminalError: 'Koneksi terminal gagal',
|
||
terminalConnectFailed: 'Terminal gagal terhubung berulang kali',
|
||
terminalRetry: 'Coba lagi',
|
||
terminalWaitBanner: 'Agen menunggu {needle}',
|
||
terminalSkipWait: 'Lewati penungguan',
|
||
terminalDepsFailed: 'Dependensi terminal node-pty gagal dimuat',
|
||
terminalDepsHint: 'Jalankan perintah di bawah ini di terminal atau cmd pada mesin DSH untuk memperbaikinya, lalu coba lagi (node-pty tetap sinkron dengan versi inti DSH):',
|
||
terminalDepsProfile: ' (profil terdeteksi: {profile})',
|
||
terminalShellNotFound: 'Shell yang dikonfigurasi tidak ditemukan: {name} — periksa path shell di Pengaturan → Side card → Terminal',
|
||
preview: 'Pratinjau',
|
||
toc: 'Daftar Isi',
|
||
edit: 'Edit',
|
||
mermaidError: 'Render Mermaid gagal',
|
||
mermaidZoomIn: 'Perbesar',
|
||
mermaidZoomOut: 'Perkecil',
|
||
mermaidZoomReset: 'Reset',
|
||
mermaidZoomHint: 'Gulir untuk zoom · seret untuk geser · Esc untuk tutup',
|
||
refresh: 'Segarkan',
|
||
showInFolder: 'Tampilkan di folder',
|
||
refreshUnsavedConfirm: 'File berubah di disk. Menyegarkan akan membuang edit yang belum disimpan. Lanjutkan?',
|
||
save: 'Simpan',
|
||
saved: 'Tersimpan',
|
||
unsaved: 'Belum disimpan',
|
||
saveFailed: 'Gagal menyimpan',
|
||
truncation: 'Berkas terlalu besar — menampilkan 512KB pertama',
|
||
binary: 'Berkas biner, pratinjau tidak tersedia',
|
||
loading: 'Memuat…',
|
||
error: 'Gagal memuat',
|
||
retry: 'Coba lagi',
|
||
splitLeft: 'Bagi ke kiri',
|
||
splitRight: 'Bagi ke kanan',
|
||
splitUp: 'Bagi ke atas',
|
||
splitDown: 'Bagi ke bawah',
|
||
notRepo: 'Direktori ini bukan repositori git',
|
||
noChanges: 'Tidak ada perubahan',
|
||
statusTruncated: 'Terlalu banyak perubahan; hanya 2000 entri pertama yang ditampilkan',
|
||
stage: 'Stage',
|
||
unstage: 'Unstage',
|
||
stageAll: 'Stage semua',
|
||
unstageAll: 'Unstage semua',
|
||
commitPlaceholder: 'Pesan commit (Ctrl+Enter)',
|
||
commit: 'Commit',
|
||
commitError: 'Commit gagal',
|
||
branch: 'Branch',
|
||
worktree: 'Worktree',
|
||
checkoutError: 'Beralih branch gagal',
|
||
history: 'Riwayat',
|
||
changes: 'Perubahan berkas',
|
||
changesGitLens: 'Git',
|
||
changesSessionLens: 'Sesi',
|
||
changesFilterAll: 'Semua',
|
||
changesFilterEmpty: 'Tidak ada operasi jenis ini',
|
||
changesOpenDiffTab: 'Buka di tab diff terpisah',
|
||
changesClosePreview: 'Tutup pratinjau',
|
||
changesResizePreview: 'Ubah ukuran pratinjau',
|
||
changesLoadError: 'Catatan berkas sesi sedang tidak tersedia',
|
||
staged: 'Staged',
|
||
unstaged: 'Unstaged',
|
||
cancel: 'Batal',
|
||
diffEmpty: 'Tidak ada perubahan teks',
|
||
diffLoadError: 'Gagal memuat diff',
|
||
diffBinary: 'Biner',
|
||
diffAdded: 'Ditambahkan',
|
||
diffDeleted: 'Dihapus',
|
||
diffRenamed: 'Diubah nama',
|
||
diffExpand: 'Bentangkan {count} baris lagi',
|
||
diffCollapse: 'Lipat',
|
||
discard: 'Buang perubahan',
|
||
discardTitle: 'Buang perubahan',
|
||
discardDesc: 'Ini membuang perubahan worktree "{path}" (tidak dapat dipulihkan).',
|
||
viewCommitDiff: 'Lihat diff commit',
|
||
copyShortHash: 'Salin hash pendek',
|
||
copyFullHash: 'Salin hash lengkap',
|
||
copySubject: 'Salin subjek',
|
||
revertCommit: 'Revert commit',
|
||
revertTitle: 'Revert commit',
|
||
revertDesc: 'Membuat commit baru pada branch saat ini yang membalikkan "{subject}".',
|
||
cherryPickCommit: 'Cherry-pick commit',
|
||
cherryPickTitle: 'Cherry-pick commit',
|
||
cherryPickDesc: 'Menerapkan perubahan dari "{subject}" ke branch saat ini.',
|
||
timeJustNow: 'baru saja',
|
||
timeMinutesAgo: '{n} mnt lalu',
|
||
timeHoursAgo: '{n} j lalu',
|
||
timeYesterday: 'kemarin',
|
||
loadMore: 'Muat lebih banyak',
|
||
historyLoadError: 'Gagal memuat lebih banyak riwayat',
|
||
produced: 'Dihasilkan',
|
||
producedOpen: 'Buka di sidebar',
|
||
disconnected: 'Terminal terputus, menyambung ulang…',
|
||
exited: 'Proses terminal keluar',
|
||
noSession: 'Pilih obrolan untuk menggunakan sidebar',
|
||
pluginNotLoaded: 'Plugin tidak dimuat; tab tidak tersedia untuk sementara:',
|
||
hiddenFiles: 'Berkas tersembunyi',
|
||
parent: 'Direktori induk',
|
||
copied: 'Tersalin',
|
||
copy: 'Salin',
|
||
newFile: 'Berkas baru',
|
||
openEditor: 'Buka editor',
|
||
gitDetail: 'Lihat detail perubahan',
|
||
referenceFile: '@berkas',
|
||
addToConversation: 'Tambahkan ke obrolan',
|
||
copyRelative: 'Salin path relatif',
|
||
copyAbsolute: 'Salin path absolut',
|
||
rename: 'Ganti nama',
|
||
renameInvalid: 'Nama tidak boleh kosong atau mengandung pemisah jalur.',
|
||
delete: 'Hapus',
|
||
deleteTitle: 'Hapus "{name}"?',
|
||
deleteDescFile: 'Ini menghapus file secara permanen. Tidak dapat dibatalkan.',
|
||
deleteDescDir: 'Ini menghapus direktori dan seluruh isinya secara permanen. Tidak dapat dibatalkan.',
|
||
dismiss: 'Tutup',
|
||
download: 'Unduh',
|
||
uploadFiles: 'Unggah berkas',
|
||
uploadFolder: 'Unggah folder',
|
||
uploadHere: 'Unggah di sini',
|
||
uploadDropHint: 'Jatuhkan berkas/folder di sini untuk mengunggah',
|
||
uploadDropChat: 'Jatuhkan ke area obrolan: tambahkan gambar ke obrolan',
|
||
uploadTo: 'Unggah ke {dir}',
|
||
uploadingTo: 'Mengunggah ke {dir}…',
|
||
uploadProgress: 'Mengunggah {done}/{total}: {name}',
|
||
uploadDone: 'Diunggah {count} berkas',
|
||
uploadFailed: 'Unggahan gagal: {error}',
|
||
uploadFailedUnknown: 'Galat tak dikenal',
|
||
uploadTooLarge: 'Berkas terlalu besar (melebihi batas unggah)',
|
||
uploadCancelled: 'Unggahan dibatalkan',
|
||
settingsNav: 'Kartu samping',
|
||
settingsIntro: 'Kelola apa yang ditampilkan kartu samping dan perilakunya',
|
||
settingsPopupDesc: 'Konfigurasikan opsi terkait untuk {feature}',
|
||
settingsDone: 'Selesai',
|
||
settingsOpenToolsTitle: 'Suntik alat buka sidebar untuk model',
|
||
settingsOpenToolsDesc: 'Saat diaktifkan, model dapat membuka file, folder, dan halaman HTTP(S) di sidebar melalui alat sidebar_open (nonaktif secara default)',
|
||
settingsTitleBarTitle: 'Mode kompatibilitas posisi',
|
||
settingsTitleBarDesc: 'Pilih skema kompatibilitas title-bar: auto-detect (default, konservatif) / Web resmi DSH / shell desktop yang dikenal / kustom (jarak geser + CSS kustom)',
|
||
settingsTitleBarStripTitle: 'Jarak geser',
|
||
settingsTitleBarStripDesc: 'Tinggi strip title-bar: seberapa jauh tombol sidebar dan konten bergeser ke bawah dalam px (0–120, default 40; berlaku di bawah skema kustom)',
|
||
settingsSchemeAutoTitle: 'Auto-detect',
|
||
settingsSchemeAutoDesc: 'Konservatif: hanya API Window Controls Overlay standar yang berkontribusi (tinggi caption-overlay nyata); lingkungan web polos tidak dimodifikasi',
|
||
settingsSchemeWebTitle: 'Web resmi DSH',
|
||
settingsSchemeWebDesc: 'Deklarasikan secara eksplisit UI web resmi: tanpa adaptasi sama sekali (bahkan geometri WCO standar tidak berlaku)',
|
||
settingsSchemeCustomTitle: 'Kustom',
|
||
settingsSchemeCustomDesc: 'Kendali penuh: injeksikan CSS kustom (dapat menimpa style bawaan) dan atur jarak geser title-bar',
|
||
settingsSchemeDetectedSuffix: 'terdeteksi',
|
||
settingsCustomCssTitle: 'CSS kustom',
|
||
settingsCustomCssDesc: 'Style yang ditambahkan di akhir halaman (yang ditulis kemudian menang pada seri; gunakan !important untuk menimpa variabel inline yang ditulis JS)',
|
||
settingsCustomCssPlaceholder: '/* mis. sediakan 36px untuk shell dengan title-bar yang digambar sendiri */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
||
settingsSaveFailed: 'Gagal menyimpan',
|
||
settingsConflict: 'Pengaturan diubah di jendela lain — silakan coba lagi',
|
||
binaryNoPreview: 'Tipe berkas ini tidak dapat dipratinjau',
|
||
downloadToView: 'Unduh untuk melihat',
|
||
settingsSubagentTitle: 'Aktifkan otomatis halaman Tasks saat subagen muncul',
|
||
settingsSubagentDesc: 'Aktifkan halaman Tasks saat obrolan saat ini membuat subagen baru; pada layar lebar, kartu samping juga dibentangkan; pada layar sempit, laci layar penuh tidak dipaksa terbuka; matikan untuk membukanya secara manual',
|
||
settingsJobsTitle: 'Aktifkan otomatis halaman Tasks saat ada tugas latar baru',
|
||
settingsJobsDesc: 'Aktifkan halaman Tasks setiap kali tugas latar baru muncul untuk obrolan saat ini (setiap tugas baru memicu aktivasi); pada layar lebar, kartu samping juga dibentangkan; pada layar sempit, laci layar penuh tidak dipaksa terbuka; matikan untuk membukanya secara manual',
|
||
settingsToolsTitle: 'Suntik alat terminal untuk model',
|
||
settingsToolsDesc: 'Saat diaktifkan, model dapat membuat dan mengendalikan terminal sidebar melalui 8 alat terminal_* (nonaktif secara default)',
|
||
settingsFenceTitle: 'Pemeriksaan path workspace',
|
||
settingsFenceDesc: 'Saat aktif, fitur berkas sidebar hanya menjangkau path di dalam workspace sesi (default); saat nonaktif, berkas di mana pun di host dapat diakses — skrip halaman memperoleh jangkauan yang sama selama itu',
|
||
fenceErrorReason: 'Path ini berada di luar workspace sesi dan diblokir oleh pemeriksaan',
|
||
fenceDisableAction: 'Matikan pemeriksaan workspace',
|
||
settingsBottomTerminalTitle: 'Buka terminal otomatis saat panel bawah pertama kali dibentangkan',
|
||
settingsBottomTerminalDesc: 'Saat panel bawah pertama kali dibentangkan dalam sesi, coba buka tab terminal baru di panel bawah (kuota terminal tetap berlaku; aktif secara default)',
|
||
settingsFontFamilyTitle: 'Keluarga font terminal',
|
||
settingsFontFamilyDesc: 'Keluarga font terminal kustom (stack CSS font-family seperti "JetBrains Mono", monospace; biarkan kosong untuk mengikuti font monospace tema)',
|
||
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
||
settingsFontSizeTitle: 'Ukuran font terminal',
|
||
settingsFontSizeDesc: 'Ukuran font terminal dalam px (9–32, default 13)',
|
||
settingsFontSizeSuffix: 'px',
|
||
settingsShellTitle: 'Path shell',
|
||
settingsShellDesc: 'Shell yang dibangkitkan untuk terminal UI dan model (path absolut atau executable polos). Kosong mempertahankan urutan lama: config.shell yaml → $SHELL / login shell / powershell.exe Windows. Berlaku untuk terminal yang dibuka setelahnya',
|
||
settingsShellPlaceholder: 'mis. /bin/zsh (kosong = auto)',
|
||
settingsShellArgsTitle: 'Argumen shell',
|
||
settingsShellArgsDesc: 'Argumen shell eksplisit, dipisah spasi; jika tidak kosong, sepenuhnya menggantikan default (kontrak yang sama dengan shellArgs yaml)',
|
||
settingsShellArgsPlaceholder: 'mis. -l (kosong = default)',
|
||
settingsTabsTitle: 'Konten sidebar',
|
||
settingsViewersTitle: 'Pratinjau berkas',
|
||
settingsGeneralTitle: 'Umum',
|
||
settingsPopup: 'Pengaturan fitur',
|
||
settingsViewerCatchAll: 'Catch-all: berkas apa pun',
|
||
viewerImage: 'Gambar',
|
||
viewerPdf: 'PDF',
|
||
viewerMarkdown: 'Markdown',
|
||
viewerCode: 'Kode',
|
||
viewerBinary: 'Unduhan biner',
|
||
viewerHtml: 'HTML',
|
||
browser: 'Browser',
|
||
browserPlaceholder: 'Masukkan URL, mis. example.com',
|
||
browserGo: 'Buka',
|
||
browserBack: 'Mundur',
|
||
browserForward: 'Maju',
|
||
browserStart: 'Masukkan URL untuk mulai menjelajah (mode sandbox)',
|
||
browserBlockedScheme: 'Diblokir: hanya URL http/https yang diizinkan',
|
||
browserBlockedLoopback: 'Diblokir: alamat lokal dan internal tidak dapat dijelajahi di sini',
|
||
browserInvalid: 'URL tidak valid',
|
||
browserNoSandboxWarning: 'Sandbox mati: halaman saat ini berjalan dengan hak penuh GUI (aktifkan kembali di pengaturan)',
|
||
htmlNoSandboxWarning: 'Sandbox mati: HTML ini berjalan dengan hak penuh GUI (aktifkan kembali di pengaturan)',
|
||
sandboxStatusOn: 'Mode sandbox: aktif · halaman tidak dapat mengakses data GUI atau berkas lokal; login dan cookie pihak ketiga mungkin tidak berfungsi',
|
||
sandboxUnlock: 'Nonaktifkan sementara (tidak aman)',
|
||
sandboxRestore: 'Pulihkan sandbox',
|
||
settingsHtmlDefaultUnsafeTitle: 'Buka pratinjau HTML tanpa sandbox secara default (tidak aman)',
|
||
settingsHtmlDefaultUnsafeDesc: 'Saat aktif, setiap pratinjau HTML yang baru dibuka dimulai dalam keadaan tanpa sandbox (asal yang sama dengan GUI — dapat membaca berkas sesi dan API internal); baris status masih menawarkan pemulihan sekali ketuk',
|
||
settingsHtmlSandboxTitle: 'Nonaktifkan sandbox pratinjau HTML (tidak aman)',
|
||
settingsHtmlSandboxDesc: 'Dengan sandbox mati, HTML yang dipratinjau berjalan dengan asal yang sama dengan GUI: dapat membaca berkas sesi, penyimpanan lokal, dan memanggil API internal. Hanya aktifkan untuk berkas yang sepenuhnya tepercaya',
|
||
settingsBrowserSandboxTitle: 'Nonaktifkan sandbox browser (tidak aman)',
|
||
settingsBrowserSandboxDesc: 'Dengan sandbox mati, situs yang dikunjungi berjalan dengan asal yang sama dengan GUI: dapat membaca data sesi dan menyamar sebagai sesi login Anda. Hanya aktifkan untuk situs yang sepenuhnya tepercaya',
|
||
settingsBrowserLinksTitle: 'Buka tautan eksternal obrolan di sidebar',
|
||
settingsBrowserLinksDesc: 'Saat aktif, mengeklik tautan eksternal di obrolan atau GUI membuka sidebar alih-alih jendela baru; HTTP dan HTTPS dikendalikan terpisah oleh sakelar di bawah; Ctrl/Cmd+klik selalu menembus',
|
||
settingsBrowserHttpTitle: 'Buka halaman HTTP di sidebar',
|
||
settingsBrowserHttpDesc: 'Saat aktif, mengeklik tautan eksternal HTTP di obrolan atau GUI membuka sidebar (halaman plugin yang mendeklarasikan urlTarget menang); Ctrl/Cmd+klik selalu menembus',
|
||
settingsBrowserHttpsTitle: 'Buka halaman HTTPS di sidebar',
|
||
settingsBrowserHttpsDesc: 'Saat aktif, mengeklik tautan eksternal HTTPS di obrolan atau GUI membuka sidebar. Nonaktif secara default: kebanyakan situs HTTPS menolak untuk disematkan, jadi browser sistem adalah default yang lebih mulus',
|
||
settingsBrowserLoopbackTitle: 'Alamat lokal yang diizinkan',
|
||
settingsBrowserLoopbackDesc: 'Daftar putih alamat loopback yang dipisahkan koma (mis. localhost:5174 atau 127.0.0.1:8080) yang dapat dikunjungi browser sidebar; kosong memblokir semua alamat lokal secara default. Sandbox tetap berlaku — halaman tidak dapat membaca data GUI',
|
||
settingsBrowserLoopbackPlaceholder: 'mis. localhost:5174, 127.0.0.1:8080',
|
||
browserOpenExternal: 'Buka di browser',
|
||
browserEmbedBlocked: '{host} menolak untuk disematkan',
|
||
browserEmbedBlockedDesc: 'Situs melarang ditampilkan di dalam halaman lain (X-Frame-Options / frame-ancestors), sehingga tidak dapat dimuat di sidebar. Buka langsung di browser Anda.',
|
||
browserEmbedAnyway: 'Tetap muat',
|
||
subagent: 'Tasks',
|
||
openSubagent: 'Tasks',
|
||
subagentMainAgent: 'Agen utama',
|
||
subagentEmpty: 'Tidak ada subagen',
|
||
subagentEmptyDesc: 'Subagen yang dibangkitkan di bawah agen utama akan muncul di sini',
|
||
subagentRunning: 'Berjalan',
|
||
subagentInactive: 'Menganggur',
|
||
subagentModeOneShot: 'Sekali pakai',
|
||
subagentModeContinuable: 'Dapat dilanjutkan',
|
||
subagentCount: '{count} subagen',
|
||
subagentCountRunning: '{count} subagen · {running} berjalan',
|
||
subagentDiagCorrupt: 'Rusak',
|
||
subagentDiagUnsupported: 'Tidak didukung',
|
||
subagentDiagUnavailable: 'Tidak tersedia',
|
||
subagentThinking: 'Berpikir…',
|
||
sideChat: 'Side Chat (beta)',
|
||
sideChatNew: 'Thread baru',
|
||
sideChatUntitled: 'Thread baru',
|
||
sideChatEmpty: 'Tidak ada obrolan samping',
|
||
sideChatEmptyDesc: 'Setiap obrolan samping adalah tab sendiri di strip tab — mewarisi konteks sesi saat ini dan tidak pernah masuk ke obrolan utama',
|
||
sideChatCreating: 'Membuat obrolan samping…',
|
||
sideChatRetry: 'Coba lagi',
|
||
sideChatThreads: 'Beralih thread / baru',
|
||
sideChatSave: 'Simpan sebagai sesi baru',
|
||
sideChatSaveTitle: 'Promosikan thread ini ke sesi tingkat atas dalam daftar sesi utama',
|
||
sideChatSaved: 'Tersimpan sebagai sesi baru',
|
||
sideChatNoTurn: 'Simpan tersedia setelah giliran pertama selesai',
|
||
sideChatPendingDrop: 'Tindak lanjut yang belum terjawab terakhir tidak akan disertakan dalam sesi yang disimpan',
|
||
sideChatFirstPlaceholder: 'Ajukan pertanyaan pertama — konteks diwarisi…',
|
||
sideChatComposerPlaceholder: 'Ajukan tindak lanjut…',
|
||
sideChatThinking: 'Mendalami…',
|
||
sideChatThink: 'Berpikir',
|
||
sideChatInjection: 'Konteks disuntik',
|
||
sideChatSend: 'Kirim',
|
||
sideChatCancel: 'Hentikan',
|
||
sideChatCancelTitle: 'Batalkan giliran yang berjalan (pekerjaan antrean dipertahankan)',
|
||
sideChatClose: 'Tutup thread',
|
||
sideChatCloseTitle: 'Lepaskan agen thread (riwayat dipertahankan)',
|
||
sideChatError: 'Kesalahan Side Chat: {message}',
|
||
sideChatTurnUsage: 'Input {input} tok · Output {output} tok',
|
||
sideChatBlockCollapse: 'Lipat',
|
||
sideChatBlockCollapseAria: 'Lipat',
|
||
sideChatBlockExpand: 'Perlihatkan {hidden} baris',
|
||
sideChatBlockExpandAria: 'Perlihatkan {hidden} baris lagi',
|
||
sideChatBlockSignal: 'Diakhiri sinyal: {signal}',
|
||
sideChatBlockExitCode: 'Kode keluar {code}',
|
||
sideChatBlockRunning: 'Berjalan',
|
||
sideChatBlockFailed: 'Gagal',
|
||
sideChatBlockDone: 'Selesai',
|
||
sideChatBlockNoOutput: '(tanpa output)',
|
||
sideChatBlockFiles: '{count} file',
|
||
sideChatBlockWindow: '{shown} dari {total} baris',
|
||
sideChatConnDisconnected: 'Koneksi terputus',
|
||
sideChatConnReconnect: 'Sambungkan ulang',
|
||
sideChatConnConnecting: 'Menyambung ulang…',
|
||
sideChatConnRecovered: 'Koneksi dipulihkan',
|
||
sideChatConnReconnectAction: 'Sambungkan ulang sekarang',
|
||
sideChatConnRestartAction: 'Mulai ulang koneksi',
|
||
jobs: 'Tugas latar',
|
||
jobsCount: '{count} tugas latar',
|
||
jobsCountRunning: '{count} tugas latar · {running} berjalan',
|
||
jobStatusRunning: 'Berjalan',
|
||
jobStatusStopping: 'Menghentikan',
|
||
jobStatusCompleted: 'Selesai',
|
||
jobStatusKilled: 'Dihentikan',
|
||
jobStatusFailed: 'Gagal',
|
||
jobDurationSeconds: '{seconds}d',
|
||
jobDurationMinutes: '{minutes}m {seconds}d',
|
||
jobDurationHours: '{hours}j {minutes}m',
|
||
jobViewOutput: 'Lihat keluaran',
|
||
jobHideOutput: 'Sembunyikan keluaran',
|
||
jobNoOutput: 'Belum ada keluaran',
|
||
jobNotReadYet: 'Menunggu model membaca tugas ini; keluarannya muncul di sini setelah model menjalankan job_output',
|
||
jobOutputTruncated: 'Keluaran dipotong',
|
||
jobOutputError: 'Gagal membaca keluaran',
|
||
jobKill: 'Hentikan',
|
||
jobKillConfirm: 'Klik lagi untuk mengonfirmasi penghentian',
|
||
jobKillError: 'Penghentian gagal',
|
||
addPluginsTabCard: 'Tambah plugin tab',
|
||
addPluginsTabCardDesc: 'Daftarkan halaman sidebar baru',
|
||
addPluginsViewerCard: 'Tambah plugin pratinjau',
|
||
addPluginsViewerCardDesc: 'Daftarkan pratinjau tipe berkas',
|
||
addPluginsTabDesc: 'Halaman sidebar (tab) dapat diperluas oleh plugin. Plugin mendaftar melalui layanan ctx.betterSidebar; klik Install menyalin perintah instalasi — tempel ke terminal tempat profil DSH Anda berada dan jalankan.',
|
||
addPluginsViewerDesc: 'Pratinjau berkas dapat diperluas oleh plugin. Plugin mendaftar melalui layanan ctx.betterSidebar; klik Install menyalin perintah instalasi — tempel ke terminal tempat profil DSH Anda berada dan jalankan.',
|
||
addPluginsBrowseMore: 'Jelajahi lebih banyak plugin di GitHub (topic: dsh-apes-sidebar)',
|
||
addPluginsSearch: 'Cari berdasarkan nama / deskripsi plugin…',
|
||
addPluginsNoMatch: 'Tidak ada plugin yang cocok',
|
||
addPluginsRecommended: 'Plugin yang direkomendasikan',
|
||
addPluginsEmpty: 'Belum ada plugin yang dikurasi — publikasikan plugin Anda di bawah topik GitHub',
|
||
openPlugin: 'Buka',
|
||
copyInstall: 'Salin perintah instalasi',
|
||
pluginOfficeDesc: 'Pratinjau Office-suite (.docx / .xlsx / .pptx) untuk editor better-sidebar, menjaga pustaka render Office yang berat tetap di luar bundle inti',
|
||
pluginFlowglassDesc: 'Flowgraph sesi langsung dengan tiga lajur untuk pengguna, asisten, dan panggilan alat, plus grup paralel, cabang sub-agen, drill-down, dan status langsung; mendaftarkan tab Flowglass native saat better-sidebar terpasang dan mempertahankan laci mandirinya sebagai fallback',
|
||
pluginGitForgeDesc: 'Tab Git Forge: pustaka akun GitHub/Gitea (dan forge lain) + pemberian izin per proyek + kebijakan push yang ditegakkan keras; token tetap di rahasia lokal (tidak pernah dalam konteks model); alat GitForge hanya-baca dan helper kredensial HTTPS agen',
|
||
pluginGithubWorkbenchDesc: 'Tab GitHub Workbench: pohon repo remote + Issues / Pull requests / Actions dengan dukungan tulis penuh — buat Issue/PR, komentar, edit, tutup/buka ulang, merge squash·merge·rebase (konfirmasi kuat), jalankan ulang/batalkan CI; pengalih repo otomatis mencantumkan repo yang dapat diakses dan mencari repo publik; tanpa better-sidebar otomatis beralih ke panel kanan mandiri',
|
||
pluginMdExportDesc: 'Menambahkan tombol "Ekspor" ke bilah alat Markdown di better-sidebar: merender .md saat ini menjadi HTML mandiri dalam satu klik (tabel/blok kode/diagram Mermaid inline, tata letak mengikuti tema pratinjau) dan menyimpannya di folder yang sama, atau mengekspor ke PDF lewat dialog cetak',
|
||
pluginCodeNavDesc: 'Navigasi pratinjau kode: mengenali bahasa dari jenis berkas dan menyorot sintaks, kerangka simbol (filter kelas/metode/variabel + lompat sekali klik), serta pencarian dalam berkas (sorot semua kecocokan, sebelum/berikutnya, peka huruf besar-kecil) — mengambil alih pratinjau berkas kode di editor better-sidebar',
|
||
pluginSuhuangScrollDesc: 'Menghubungkan Suhuang Scroll Runtime lokal ke pengaturan DSH dan better-sidebar untuk konfigurasi model, uji koneksi, dan kontrol penilaian berkelanjutan; memerlukan Suhuang Scroll Runtime dan dsh-apes-sidebar',
|
||
pluginBetterOverleafDesc: 'Tab Overleaf untuk better-sidebar: login langsung lewat peramban CDP (mendukung Chromium pihak ketiga), daftar/pergantian proyek, mirror git lokal di <workspace>/overleaf/, sinkronisasi git dua arah dengan fallback API baca-saja, dan pratinjau berkas melalui workbench sidebar',
|
||
pluginGitRemotesDesc: 'Tab Git Remotes: branch/upstream/ahead-behind, fetch (prune opsional), ff-only pull, dan push hanya setelah konfirmasi dalam tab. Tidak menggantikan tab stage/commit Git bawaan, dan tidak menawarkan force-push atau alat auto-push model',
|
||
pluginSentinelDesc: 'Sistem bangun agen berbasis kondisi: sensor berkas/proses/port/http/perintah/webhook membangunkan sesi yang tidur saat kondisi terpicu; mendaftarkan tab "Sentinel" dengan tabel pengawasan server-wide',
|
||
pluginServerDeckDesc: 'Dasbor kartu server: satu kartu per host menampilkan status online, OS, uptime, penggunaan CPU/memori/disk dan latensi; klik kartu untuk membuka terminal xterm.js interaktif; impor ~/.ssh/config sekali klik (alias hosting Git dilewati otomatis). Mendaftarkan tab 「Server」 native saat better-sidebar terpasang, jika tidak panel laci mandiri tetap digunakan',
|
||
pluginSidebarQaDesc: 'Select-and-ask: Pilih teks obrolan → ajukan di panel kanan → sesi tindak lanjut khusus (❓追问) di ruang kerja yang sama; model no-thinking yang cepat mengompresi konteks utama dan menyuntiknya bersama kutipan, tanpa mengganggu obrolan utama. Tindak lanjut dapat bersarang, dilanjutkan, dan diarsipkan',
|
||
pluginSidenoteDesc: 'Side chat ala Codex + anotasi seleksi: fork sesi saat ini menjadi panel samping persisten (diarsipkan hingga hilang dari daftar sesi, multi-instance, perintah /side, bertahan setelah reload, model mengikuti sesi utama); pilih teks assistant → badge bernomor + editor catatan → chip "N anotasi" yang ikut terkirim dengan pesan berikutnya, atau langsung bertanya di side chat',
|
||
pluginSshTunnelDesc: 'Tab SSH Tunnel: inventaris multi-host + pemberian izin per proyek + rahasia lokal; alat SSHManager (exec/SFTP/strategi sesi); terminal interaktif pusat dan SFTP dua panel',
|
||
pluginTurnReviewDesc: 'Gerbang manusia pada giliran yang baru selesai: Approve / Request changes per path dengan komentar opsional; path dikelompokkan berdasarkan sesi utama / subagen / tidak teratribusi; diff snapshot-vs-now inline sebelum Anda memutuskan. Tanpa fork, tanpa /rewind',
|
||
pluginVideoPreviewDesc: 'Pratinjau video inline (.mp4/.webm/.mov/.mkv/.avi dll.) untuk editor better-sidebar, didukung oleh rute host /video khusus dengan dukungan HTTP Range (206) — scrubbing berfungsi dan berkas tidak dibatasi oleh mediaLimit 20MB',
|
||
pluginDocsPanelDesc: 'Dokumen global di sidebar DSH: baca catatan Markdown Anda sendiri dari ruang kerja apa pun — daftar berkas, kerangka, buka di Chrome / VS Code, dan tombol salin; direktori docs dapat dikonfigurasi (default ~/.dsh/docs)',
|
||
pluginEgoBrowserDesc: 'Browser agen untuk DeepSeek Harness: 32 alat ego_* menggerakkan Chromium sungguhan; tab «ego browser» native di bilah samping menampilkan langsung setiap halaman yang dikunjungi agen — Anda bisa mengklik, menyeret, dan mengetik untuk mengambil alih. Tab terdaftar otomatis jika better-sidebar terpasang; jika tidak, jatuh ke gelembung mengambang',
|
||
pluginBilingualReaderDesc: 'Baca PDF di sidebar DSH: tampilan PDF asli, pilih teks untuk diterjemahkan dengan LLM, dengan konteks dan sepenuhnya terisolasi dari percakapan utama',
|
||
changesRedactOn: "Redaksi aktif: rahasia tampil sebagai [REDACTED]; klik untuk mematikan (risiko Anda sendiri)",
|
||
changesRedactOff: "Redaksi mati: konten tampil apa adanya; klik untuk mengaktifkan",
|
||
changesRedactOnLabel: "Redaksi",
|
||
changesRedactOffLabel: "Tanpa redaksi",
|
||
changesRedactBanner: "Teredaksi",
|
||
pluginSentinelName: 'dsh-sentinel Sistem bangun',
|
||
pluginEgoBrowserName: 'ego-browser Peramban agen',
|
||
pluginBetterOverleafName: 'dsh-better-overleaf Tab Overleaf',
|
||
pluginDocsPanelName: 'dsh-docs-panel Dokumen global',
|
||
pluginFlowglassName: 'dsh-flowglass Flowglass',
|
||
pluginGitForgeName: 'dsh-git-forge Kredensial Git',
|
||
pluginGitRemotesName: 'dsh-git-remotes Remote Git',
|
||
pluginGithubWorkbenchName: 'dsh-github-workbench Meja kerja GitHub',
|
||
pluginSidebarQaName: 'dsh-sidebar-qa Pilih & tanya',
|
||
pluginSidenoteName: 'dsh-sidenote Obrolan samping',
|
||
pluginServerDeckName: 'dsh-server-deck Dek server',
|
||
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
|
||
pluginSshTunnelName: 'dsh-ssh-tunnel Terowongan SSH',
|
||
pluginTurnReviewName: 'dsh-turn-review Tinjauan giliran',
|
||
pluginBilingualReaderName: 'dsh-bilingual-reader Pembaca dwibahasa',
|
||
pluginOfficeName: 'Pratinjau Office',
|
||
pluginMdExportName: 'Ekspor Markdown',
|
||
pluginCodeNavName: 'Navigator pratinjau kode',
|
||
pluginVideoPreviewName: 'Pratinjau video',
|
||
presetDshDesktopDesc: 'Mode Electron lanjutan (tanpa bingkai): macOS mencadangkan 20px di atas; Windows mencadangkan 32px untuk bilah judul saat WCO tidak tersedia',
|
||
}
|