dsh-composer-plus 1.11.3 → 1.12.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/README.id.md CHANGED
@@ -14,7 +14,7 @@ Fitur kenyamanan bergaya Codex untuk UI desktop dan web [DeepSeek Harness](https
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness dengan Composer Plus: proyek yang sedang berjalan menampilkan spinner di bilah samping, dan panel Perubahan menampilkan diff git"></p>
16
16
 
17
- Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
17
+ Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
18
18
 
19
19
  ## Instalasi
20
20
 
@@ -29,46 +29,51 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil itu dikelola oleh aplikasi.)
31
31
 
32
- > pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.11.3`.
32
+ > pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.12.0`.
33
33
 
34
34
  ## Fitur
35
35
 
36
+ <!-- BEGIN GENERATED FEATURES: edit docs/features.json, then run npm run build:readme -->
37
+
36
38
  | Fitur | Cara menggunakannya | Tangkapan layar |
37
39
  |---|---|---|
38
- | **Panel perubahan** | Bilah samping kanan → `+` → **Perubahan**. Pilih **Belum Di-commit**, **Belum Di-stage**, **Di-stage**, atau **Branch** untuk melihat file yang berubah beserta jumlah `+/-`; klik sebuah file untuk melihat diff-nya. **Giliran Terakhir** membuka tinjauan bawaan dsh untuk giliran terakhir. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Tangkapan layar: Panel perubahan"></a> |
39
- | **Ide fitur** | Bilah samping kanan → `+` → **Ide fitur** → **Sarankan fitur**. Model obrolan itu sendiri membaca ringkasan singkat proyek obrolan (file tingkat atas, bagian awal README dan manifes, 15 commit terakhir) dan menyarankan hingga 8 fitur. Fitur ditampilkan sebagai tumpukan kartu dalam bahasa UI dsh. Geser kartu ke kanan (atau klik **✓**, atau tekan `→`; dengan cara mana pun, kartu terbang ke sisinya) untuk memulai obrolan baru di proyek yang sama. Obrolan itu dimulai dalam mode rencana dengan ide tersebut sebagai permintaan, jadi tidak ada yang berubah sebelum Anda menyetujui rencananya. Untuk melewati rencana, klik **▶ Buat sekarang** (atau tekan `↑`; kartu terbang ke atas): obrolan baru langsung dimulai dengan ide itu sebagai permintaan biasa, lalu model membuat perubahan dan menjalankan pemeriksaannya (persetujuan berlaku seperti biasa). Geser ke kiri (atau **✕**, atau `←`) untuk melewatinya; **Urungkan** (atau `Z`) mengembalikan kartu yang dilewati. Klik **↓** (atau tekan `↓`) untuk menyimpan ide bagus untuk nanti. Ide itu masuk ke daftar **Nanti** milik proyek, yang ditampilkan oleh setiap obrolan di folder proyek yang sama (juga setelah mulai ulang). **Nanti (N)** membuka daftar itu. **Rencanakan** memulai obrolan mode rencana yang sama untuk ide itu dan **Buat sekarang** memulai obrolan tanpa rencana; keduanya mengeluarkan ide itu dari daftar. **Rencanakan semua (N)** memulai satu obrolan mode rencana untuk semua ide di daftar, jadi bagian bersama cukup direncanakan sekali. **Hapus dari daftar** menghapusnya. **Salin sebagai daftar periksa** menyalin seluruh daftar ke papan klip sebagai daftar periksa Markdown (`- [ ] Title — Summary`, satu baris per ide) untuk pelacak isu atau file TODO; fitur ini tidak membuat panggilan jaringan. **Ide lainnya** menambahkan kartu. Untuk mendapatkan ide tentang satu area saja, ketik **Topik fokus** yang singkat di kolom di samping **Sarankan fitur** (paling banyak 80 karakter; `Enter` juga menyarankan), atau klik salah satu topik tetap di bawahnya: **Kinerja**, **Aksesibilitas**, **Pengujian**, **Keamanan**, **Kegunaan**, atau **Dokumentasi** (klik lagi untuk mengosongkannya). Model lalu hanya menyarankan fitur tentang topik itu; kolom kosong berarti fitur apa pun. Ide tidak disarankan dua kali dalam satu proyek: setiap ide yang disarankan (dilewati, disimpan, atau dimulai) masuk ke **Riwayat** proyek, model diminta untuk tidak menyarankannya lagi, dan judul yang berulang dibuang. **Riwayat** mencantumkannya dengan **Dimulai** atau **Disarankan**; **Lupakan** (atau **Lupakan semua**) membuat ide itu bisa muncul lagi; ide yang masih ada di daftar **Nanti** tidak masuk saran sampai Anda menghapusnya dari sana. Model hanya berjalan saat Anda mengklik. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Tangkapan layar: Ide fitur"></a> |
40
- | **Pencarian isi** | Pencarian bawaan di bilah samping dsh (kaca pembesar di samping **Ruang kerja**; `Cmd+K` di aplikasi desktop, `Cmd+Alt+K` di browser) juga menemukan obrolan dari kata-kata dalam pesan Anda dan dalam balasannya, bukan hanya dari judul. Teks yang cocok ditampilkan di bawah obrolan. dsh sudah memiliki pencarian ini, tetapi mengirimkannya dalam keadaan nonaktif. Fitur ini mengaktifkannya dengan file indeks pencarian di komputer Anda. Indeks dibuat pada pencarian pertama setelah dsh dimulai (sekitar 15 detik untuk 250 obrolan, lihat Batasan) dan disimpan untuk saat dsh dimulai berikutnya. Aktif secara default; perubahan berlaku setelah Anda memulai ulang dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Tangkapan layar: Pencarian isi"></a> |
41
- | **Putar balik giliran** | Arahkan penunjuk ke salah satu pesan Anda dan klik **↶** (di samping Salin). **Obrolan saja** mengeluarkan pesan itu dan semua yang ada sesudahnya (balasan, panggilan alat) dari obrolan dan dari konteks model, lalu menaruh pesan itu kembali di kotak pesan: ubah, lalu kirim lagi. **Obrolan dan file** lebih dulu menampilkan daftar file proyek yang berubah sejak pesan itu, lalu juga mengembalikan file tersebut seperti semula. Ini termasuk perubahan yang dibuat oleh perintah (`bash`), bukan hanya oleh alat edit dsh. Giliran yang sedang berjalan dihentikan lebih dulu. Log obrolan tidak pernah ditulis ulang: satu penanda tersembunyi menyembunyikan bagian yang ditarik, sama seperti `/compact` bawaan dsh menyembunyikan pesan lama. Jika [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) terpasang, plugin itulah yang melakukan tugas ini, dan Composer Plus tidak menampilkan tombol kedua. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Tangkapan layar: Putar balik giliran"></a> |
42
- | **Hapus obrolan** | Bilah samping → menu **…** pada obrolan (atau klik kanan) → **Hapus…** → **Hapus**. dsh sendiri hanya dapat mengarsipkan. Obrolan berhenti (gilirannya, job, subagen, dan jadwalnya, seperti saat diarsipkan oleh dsh). Riwayat tersimpannya, beserta obrolan subagennya, dipindahkan ke Tong Sampah macOS (di sistem lain: `$DSH_HOME/trash`). Untuk mengembalikannya, kembalikan folder itu ke tempat semula dan mulai ulang dsh: obrolan muncul di tampilan **Hanya yang diarsipkan** pada bilah samping. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Tangkapan layar: Hapus obrolan"></a> |
43
- | **Nama proyek di kotak pesan** | Baris di bawah kotak pesan (giliran, token, cache hit, konteks) dimulai dengan nama proyek obrolan, jadi Anda selalu tahu di proyek mana sebuah obrolan bekerja. Nama ini adalah judul proyek bawaan dsh, atau nama folder jika proyek tidak memiliki judul. Arahkan penunjuk ke nama itu untuk melihat jalur folder lengkap. Klik nama itu untuk menemukan obrolan di bilah samping, dalam tampilan daftar atau proyek: bilah samping dan proyek terbuka (termasuk proyek yang diciutkan dan **Tampilkan lainnya** di proyek itu), daftar bergulir ke obrolan itu, dan obrolan berkedip selama 5 detik. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Tangkapan layar: Nama proyek di kotak pesan"></a> |
44
- | **Riwayat input** | Di kotak pesan yang kosong, tekan `↑` / `↓` untuk menelusuri pesan yang telah Anda kirim, seperti di terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Tangkapan layar: Riwayat input"></a> |
45
- | **Mode rencana Shift+Tab** | `Shift+Tab` menambahkan `/plan ` di awal draf (tekan lagi untuk menghapusnya). Jika obrolan sudah dalam mode rencana, `Shift+Tab` keluar dari mode itu. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Tangkapan layar: Mode rencana Shift+Tab"></a> |
46
- | **Pertahankan fokus composer** | Setelah Anda mengirim perintah `/` atau skill, kursor tetap berada di kotak pesan, dan Anda dapat langsung mengetik lagi. Ini juga berlaku untuk makro keyboard yang mengetik perintah lalu menekan `Enter`. dsh membuat kotak pesan menjadi hanya-baca saat memproses perintah, lalu browser melepas fokusnya. Fitur ini mengembalikan fokus, kecuali jika menu, dialog, atau kolom lain sedang memegangnya. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Tangkapan layar: Pertahankan fokus composer"></a> |
47
- | **Lanjutkan Sekali Klik** | Setelah giliran dihentikan, gagal, atau terpotong, kotak pesan yang kosong menampilkan **▶**. Satu klik melanjutkan percakapan yang ada tanpa menulis di input atau menambahkan pesan obrolan yang terlihat. (Model menerima catatan tersembunyi singkat “lanjutkan dari tempat berhenti”, karena beberapa penyedia, seperti Claude, menolak permintaan yang berakhir dengan balasan asisten.) Pesan di antrean tetap di sana: ▶ hanya melanjutkan tugas yang dihentikan, lalu antrean berjalan. Giliran yang selesai tetap memakai tombol Kirim biasa. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Tangkapan layar: Lanjutkan Sekali Klik"></a> |
48
- | **Lanjutkan setelah mulai ulang** | Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Jika Anda keluar dari dsh (atau dsh tertutup) saat sebuah obrolan sedang bekerja, obrolan itu berlanjut sendiri saat Anda membuka dsh lagi, dengan catatan tersembunyi yang sama seperti Lanjutkan Sekali Klik. Jika putaran tujuan (`/goal`) sedang berjalan, tujuan itu berlanjut ke putaran berikutnya (dsh menjeda tujuan setiap kali dimulai sampai Anda melanjutkannya). Obrolan yang Anda hentikan, yang selesai, atau yang gagal tidak berlanjut. dsh sendiri tidak memiliki pengaturan untuk ini: dsh hanya menandai giliran seperti itu sebagai terinterupsi. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Tangkapan layar: Lanjutkan setelah mulai ulang"></a> |
49
- | **Seret dan lepas antrean** | Pesan dalam antrean mendapat pegangan (⠿). Seret untuk mengubah urutan, atau fokuskan pegangan lalu tekan `↑` / `↓`. `Esc` membatalkan. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Tangkapan layar: Seret dan lepas antrean"></a> |
50
- | **Salin tautan sesi** | Klik kanan obrolan di bilah samping → **Salin tautan sesi**. Tempelkan tautan `dsh-session:…` ke obrolan lain untuk melampirkan obrolan itu sebagai konteks hanya-baca. dsh 0.2.1 memiliki **Salin ID sesi** sendiri, yang hanya menyalin ID polos; item ini muncul tepat sesudahnya. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Tangkapan layar: Salin tautan sesi"></a> |
51
- | **Ekspor obrolan sebagai Markdown** | Klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Ekspor sebagai Markdown…**. Dialog menampilkan jumlah pesan dalam obrolan. **Salin ke papan klip** menyalin obrolan sebagai Markdown, dan **Simpan file .md** menyimpannya sebagai `<chat title>.md` melalui unduhan browser (dsh desktop: ke folder Unduhan atau lewat dialog simpan, sesuai pengaturan sistem Anda). File berisi judul obrolan, nama proyek, dan tanggal, lalu satu bagian `## Anda` atau `## Asisten` untuk setiap pesan. Blok kode tetap seperti aslinya; blok kode yang dibiarkan terbuka oleh suatu pesan akan ditutup. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Tangkapan layar: Ekspor obrolan sebagai Markdown"></a> |
52
- | **Salin jalur proyek** | Klik kanan proyek di bilah samping → **Salin jalur** menyalin jalur lengkap foldernya. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Tangkapan layar: Salin jalur proyek"></a> |
53
- | **Pencarian proyek di obrolan baru** | Obrolan baru → tombol proyek di atas kotak pesan. Proyek ditampilkan dalam urutan A–Z, dengan kotak **Cari proyek** di bagian atas. Ketik sebagian nama (tanpa membedakan huruf besar-kecil dan aksen), lalu tekan `Enter` untuk memilih hasil pertama. Jika tidak ada yang cocok, muncul **Tidak ada proyek yang cocok**. Urutan proyek tersimpan milik dsh di bilah samping tidak berubah. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Tangkapan layar: Pencarian proyek di obrolan baru"></a> |
54
- | **Prediksi pesan berikutnya** | Aktif secara default: Anda dapat menonaktifkannya di **Pengaturan → Composer Plus**. Setelah agen menyelesaikan satu giliran (bukan giliran yang dihentikan atau gagal), kotak pesan yang kosong menampilkan tebakan pesan Anda berikutnya dengan teks abu-abu, beserta petunjuk **Tab untuk menerima**. `Tab` memasukkan teks ke kotak pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya untuk giliran itu. Mulai mengetik juga menyembunyikannya, dan giliran baru menggantinya. Menu **Model** di bawah sakelar menampilkan model milik dsh sendiri (daftar yang sama dengan menu model dsh). **Default dsh** dipilih secara default dan mengikuti model default dsh. Setiap giliran yang selesai memakai satu panggilan model singkat. Di Tether, tebakan tampil di atas kotak pesan yang kosong: ketuk untuk memasukkannya ke kolom. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Tangkapan layar: Prediksi pesan berikutnya"></a> |
55
- | **Lengkapi saat mengetik** | Nonaktif secara default: Anda dapat mengaktifkannya di **Pengaturan → Composer Plus**. Saat Anda mengetik, teks abu-abu tepat setelah kursor menunjukkan kelanjutan pesan Anda. `Tab` menambahkannya ke pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya. Fitur ini hanya menyarankan kata-kata Anda sendiri berikutnya: tidak pernah berupa jawaban untuk Anda, dan tanpa teks error atau nama karangan. Jika pesan tampak sudah lengkap atau model tidak yakin, tidak ada yang tampil. Jika Anda mengetik huruf berikutnya dari teks abu-abu itu, teks tetap ada, tanpa panggilan model baru. Fitur ini memiliki menu **Model** sendiri di bawah sakelarnya. Entri pertamanya, **Sama dengan prediksi pesan berikutnya**, memakai model **Prediksi pesan berikutnya** (default); pilih model lain untuk memakai model yang berbeda bagi setiap fitur, misalnya model yang lebih cepat untuk pelengkapan. Fitur ini melakukan satu panggilan model di setiap jeda saat Anda mengetik, jadi memakai jauh lebih banyak token daripada prediksi: pilih model yang cepat dan murah. Fitur ini tidak berjalan untuk perintah garis miring, pesan dengan chip file, atau saat kursor tidak berada di akhir. Di Tether, sisa teks tampil di atas kolom saat Anda mengetik: ketuk untuk menambahkannya. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Tangkapan layar: Lengkapi saat mengetik"></a> |
56
- | **Izinkan untuk obrolan ini** | Saat Tinjauan otomatis bertanya kepada Anda, kartu persetujuan mendapat tombol **Izinkan untuk obrolan ini**: mulai saat itu, alat yang sama di obrolan yang sama diizinkan, dengan argumen apa pun. Sebuah chip di header menampilkan daftar izin dan dapat mencabutnya. Izin tetap ada setelah mulai ulang. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Tangkapan layar: Izinkan untuk obrolan ini"></a> |
57
- | **Status proyek** | Baris proyek di bilah samping menampilkan penanda spinner / menunggu / selesai yang sama seperti obrolannya. Jadi, proyek yang diciutkan tetap memberi tahu Anda bahwa ada obrolan di dalamnya yang sedang bekerja atau memerlukan Anda. Obrolan yang menunggu Anda ditampilkan lebih dulu, lalu obrolan selesai yang belum Anda buka (titik hijau, juga saat obrolan lain masih berjalan), lalu spinner. Arahkan penunjuk ke penanda itu untuk melihat detailnya. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
58
- | **Proyek aktif di atas** | Saat sebuah obrolan mulai berjalan atau memerlukan Anda, proyeknya pindah ke bagian atas bilah samping dengan animasi baris bawaan dsh (gerakan yang sama seperti saat Anda menyeretnya ke sana). Proyek yang selesai tetap di tempatnya; seret ke mana saja seperti biasa. Perpindahan disimpan ke urutan proyek dsh, jadi menonaktifkan fitur ini mempertahankan urutan saat ini. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Proyek aktif di atas"></a> |
59
- | **Filter proyek terbaru** | Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
60
- | **Ciutkan semua proyek** | Saat ada proyek yang terbuka di bilah samping, sebuah tombol muncul di samping opsi tampilan (ikon slider). Klik tombol itu untuk menutup semua proyek yang terbuka sekaligus, misalnya 3 proyek terbuka dari 5. Tombol itu tersembunyi lagi saat tidak ada proyek yang terbuka. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Tangkapan layar: Ciutkan semua proyek"></a> |
61
- | **Urutkan menurut status** | Bilah samping → opsi tampilan → **Urutkan menurut** → **Menurut status** (dengan **Dalam satu daftar**). Obrolan yang selesai muncul pertama (titik “selesai” dari dsh, yang juga didapat oleh giliran yang berakhir dengan kesalahan). Lalu muncul obrolan yang berjalan atau menunggu, lalu obrolan dengan otomatisasi aktif (Tugas otomatisasi), lalu sisanya dalam urutan dsh. Membuka obrolan yang selesai memindahkannya ke bawah. Hanya tampilan yang berubah: pilih **Manual** atau **Terakhir diperbarui** untuk kembali. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Tangkapan layar: Urutkan menurut status"></a> |
62
- | **Notifikasi latar belakang** | Saat dsh berada di latar belakang, Anda mendapat notifikasi ketika sebuah giliran selesai (baris pertama balasan). Anda juga mendapat notifikasi ketika obrolan benar-benar menunggu Anda: persetujuan (nama alat), jawaban (pertanyaannya), atau tinjauan rencana. Permintaan harus masih terbuka 1,5 detik kemudian. Jadi, persetujuan yang dijawab otomatis (izin Tinjauan otomatis, plugin lain) tidak memunculkan notifikasi, dan notifikasi ditarik begitu permintaannya dijawab. Lencana di Dock/taskbar menghitung obrolan yang menunggu. Mengklik notifikasi membuka obrolan itu. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Tangkapan layar: Notifikasi latar belakang"></a> |
63
- | **11 bahasa UI tambahan** | Pengaturan → Composer Plus → **Bahasa aplikasi** mengganti seluruh antarmuka dsh ke Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt, atau हिन्दी (lihat di bawah). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Tangkapan layar: 11 bahasa UI tambahan"></a> |
64
- | **Koneksi seluler (iPhone)** | Gunakan dsh dari iPhone Anda dengan aplikasi [Tether](tether/), di Wi-Fi yang sama atau melalui [Tailscale](https://tailscale.com). Aktifkan di **Pengaturan → Composer Plus** (nonaktif secara default karena membuka port jaringan di Mac ini). Lalu klik **Koneksi seluler** di kiri bawah bilah samping: pindai kode QR dengan Kamera iPhone (ketuk **Open in Tether**) atau dengan **Scan code** di Tether, ketuk **Connect**, lalu klik **Approve**. Instal Tether terlebih dahulu: tanpa aplikasi itu, Kamera tidak dapat membuka kode tersebut. Ponsel menampilkan obrolan Anda, mengirim pesan, menjawab persetujuan dan pertanyaan, serta mengganti model dan agen. Pasangkan Mac sebanyak yang Anda mau: nama Mac di kiri atas aplikasi berpindah di antara Mac tersebut. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Tangkapan layar: Koneksi seluler"></a> |
65
- | **Pembaruan otomatis** | Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. **Mulai ulang dsh** untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
40
+ | **Panel perubahan** | <a id="feature-changespanel"></a>Bilah samping kanan → `+` → **Perubahan**. Pilih **Belum Di-commit**, **Belum Di-stage**, **Di-stage**, atau **Branch** untuk melihat file yang berubah beserta jumlah `+/-`; klik sebuah file untuk melihat diff-nya. **Giliran Terakhir** membuka tinjauan bawaan dsh untuk giliran terakhir. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Tangkapan layar: Panel perubahan"></a> |
41
+ | **Ide fitur** | <a id="feature-featureideas"></a>Bilah samping kanan → `+` → **Ide fitur** → **Sarankan fitur**. Model obrolan itu sendiri membaca ringkasan singkat proyek obrolan (file tingkat atas, bagian awal README dan manifes, 15 commit terakhir) dan menyarankan hingga 8 fitur. Fitur ditampilkan sebagai tumpukan kartu dalam bahasa UI dsh. Geser kartu ke kanan (atau klik **✓**, atau tekan `→`; dengan cara mana pun, kartu terbang ke sisinya) untuk memulai obrolan baru di proyek yang sama. Obrolan itu dimulai dalam mode rencana dengan ide tersebut sebagai permintaan, jadi tidak ada yang berubah sebelum Anda menyetujui rencananya. Untuk melewati rencana, klik **▶ Buat sekarang** (atau tekan `↑`; kartu terbang ke atas): obrolan baru langsung dimulai dengan ide itu sebagai permintaan biasa, lalu model membuat perubahan dan menjalankan pemeriksaannya (persetujuan berlaku seperti biasa). Geser ke kiri (atau **✕**, atau `←`) untuk melewatinya; **Urungkan** (atau `Z`) mengembalikan kartu yang dilewati. Klik **↓** (atau tekan `↓`) untuk menyimpan ide bagus untuk nanti. Ide itu masuk ke daftar **Nanti** milik proyek, yang ditampilkan oleh setiap obrolan di folder proyek yang sama (juga setelah mulai ulang). **Nanti (N)** membuka daftar itu. **Rencanakan** memulai obrolan mode rencana yang sama untuk ide itu dan **Buat sekarang** memulai obrolan tanpa rencana; keduanya mengeluarkan ide itu dari daftar. **Rencanakan semua (N)** memulai satu obrolan mode rencana untuk semua ide di daftar, jadi bagian bersama cukup direncanakan sekali. **Hapus dari daftar** menghapusnya. **Salin sebagai daftar periksa** menyalin seluruh daftar ke papan klip sebagai daftar periksa Markdown (`- [ ] Title — Summary`, satu baris per ide) untuk pelacak isu atau file TODO; fitur ini tidak membuat panggilan jaringan. **Ide lainnya** menambahkan kartu. Untuk mendapatkan ide tentang satu area saja, ketik **Topik fokus** yang singkat di kolom di samping **Sarankan fitur** (paling banyak 80 karakter; `Enter` juga menyarankan), atau klik salah satu topik tetap di bawahnya: **Kinerja**, **Aksesibilitas**, **Pengujian**, **Keamanan**, **Kegunaan**, atau **Dokumentasi** (klik lagi untuk mengosongkannya). Model lalu hanya menyarankan fitur tentang topik itu; kolom kosong berarti fitur apa pun. Ide tidak disarankan dua kali dalam satu proyek: setiap ide yang disarankan (dilewati, disimpan, atau dimulai) masuk ke **Riwayat** proyek, model diminta untuk tidak menyarankannya lagi, dan judul yang berulang dibuang. **Riwayat** mencantumkannya dengan **Dimulai** atau **Disarankan**; **Lupakan** (atau **Lupakan semua**) membuat ide itu bisa muncul lagi; ide yang masih ada di daftar **Nanti** tidak masuk saran sampai Anda menghapusnya dari sana. Model hanya berjalan saat Anda mengklik. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Tangkapan layar: Ide fitur"></a> |
42
+ | **Pencarian isi** | <a id="feature-contentsearch"></a>Pencarian bawaan di bilah samping dsh (kaca pembesar di samping **Ruang kerja**; `Cmd+K` di aplikasi desktop, `Cmd+Alt+K` di browser) juga menemukan obrolan dari kata-kata dalam pesan Anda dan dalam balasannya, bukan hanya dari judul. Teks yang cocok ditampilkan di bawah obrolan. dsh sudah memiliki pencarian ini, tetapi mengirimkannya dalam keadaan nonaktif. Fitur ini mengaktifkannya dengan file indeks pencarian di komputer Anda. Indeks dibuat pada pencarian pertama setelah dsh dimulai (sekitar 15 detik untuk 250 obrolan, lihat Batasan) dan disimpan untuk saat dsh dimulai berikutnya. Aktif secara default; perubahan berlaku setelah Anda memulai ulang dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Tangkapan layar: Pencarian isi"></a> |
43
+ | **Putar balik giliran** | <a id="feature-turnrollback"></a>Arahkan penunjuk ke salah satu pesan Anda dan klik **↶** (di samping Salin). **Obrolan saja** mengeluarkan pesan itu dan semua yang ada sesudahnya (balasan, panggilan alat) dari obrolan dan dari konteks model, lalu menaruh pesan itu kembali di kotak pesan: ubah, lalu kirim lagi. **Obrolan dan file** lebih dulu menampilkan daftar file proyek yang berubah sejak pesan itu, lalu juga mengembalikan file tersebut seperti semula. Ini termasuk perubahan yang dibuat oleh perintah (`bash`), bukan hanya oleh alat edit dsh. Giliran yang sedang berjalan dihentikan lebih dulu. Log obrolan tidak pernah ditulis ulang: satu penanda tersembunyi menyembunyikan bagian yang ditarik, sama seperti `/compact` bawaan dsh menyembunyikan pesan lama. Jika [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) terpasang, plugin itulah yang melakukan tugas ini, dan Composer Plus tidak menampilkan tombol kedua. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Tangkapan layar: Putar balik giliran"></a> |
44
+ | **Hapus obrolan** | <a id="feature-deletechat"></a>Bilah samping → menu **…** pada obrolan (atau klik kanan) → **Hapus…** → **Hapus**. dsh sendiri hanya dapat mengarsipkan. Obrolan berhenti (gilirannya, job, subagen, dan jadwalnya, seperti saat diarsipkan oleh dsh). Riwayat tersimpannya, beserta obrolan subagennya, dipindahkan ke Tong Sampah macOS (di sistem lain: `$DSH_HOME/trash`). Untuk mengembalikannya, kembalikan folder itu ke tempat semula dan mulai ulang dsh: obrolan muncul di tampilan **Hanya yang diarsipkan** pada bilah samping. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Tangkapan layar: Hapus obrolan"></a> |
45
+ | **Nama proyek di kotak pesan** | <a id="feature-projectname"></a>Baris di bawah kotak pesan (giliran, token, cache hit, konteks) dimulai dengan nama proyek obrolan, jadi Anda selalu tahu di proyek mana sebuah obrolan bekerja. Nama ini adalah judul proyek bawaan dsh, atau nama folder jika proyek tidak memiliki judul. Arahkan penunjuk ke nama itu untuk melihat jalur folder lengkap. Klik nama itu untuk menemukan obrolan di bilah samping, dalam tampilan daftar atau proyek: bilah samping dan proyek terbuka (termasuk proyek yang diciutkan dan **Tampilkan N sesi lainnya** di proyek itu), daftar bergulir ke obrolan itu, dan obrolan berkedip selama 5 detik. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Tangkapan layar: Nama proyek di kotak pesan"></a> |
46
+ | **Riwayat input** | <a id="feature-inputhistory"></a>Di kotak pesan yang kosong, tekan `↑` / `↓` untuk menelusuri pesan yang telah Anda kirim, seperti di terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Tangkapan layar: Riwayat input"></a> |
47
+ | **Mode rencana Shift+Tab** | <a id="feature-plantoggle"></a>`Shift+Tab` menambahkan `/plan ` di awal draf (tekan lagi untuk menghapusnya). Jika obrolan sudah dalam mode rencana, `Shift+Tab` keluar dari mode itu. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Tangkapan layar: Mode rencana Shift+Tab"></a> |
48
+ | **Pertahankan fokus composer** | <a id="feature-keepfocus"></a>Setelah Anda mengirim perintah `/` atau skill, kursor tetap berada di kotak pesan, dan Anda dapat langsung mengetik lagi. Ini juga berlaku untuk makro keyboard yang mengetik perintah lalu menekan `Enter`. dsh membuat kotak pesan menjadi hanya-baca saat memproses perintah, lalu browser melepas fokusnya. Fitur ini mengembalikan fokus, kecuali jika menu, dialog, atau kolom lain sedang memegangnya. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Tangkapan layar: Pertahankan fokus composer"></a> |
49
+ | **Lanjutkan Sekali Klik** | <a id="feature-continuebutton"></a>Setelah giliran dihentikan, gagal, atau terpotong, kotak pesan yang kosong menampilkan **▶**. Satu klik melanjutkan percakapan yang ada tanpa menulis di input atau menambahkan pesan obrolan yang terlihat. (Model menerima catatan tersembunyi singkat “lanjutkan dari tempat berhenti”, karena beberapa penyedia, seperti Claude, menolak permintaan yang berakhir dengan balasan asisten.) Pesan di antrean tetap di sana: ▶ hanya melanjutkan tugas yang dihentikan, lalu antrean berjalan. Giliran yang selesai tetap memakai tombol Kirim biasa. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Tangkapan layar: Lanjutkan Sekali Klik"></a> |
50
+ | **Lanjutkan setelah mulai ulang** | <a id="feature-resumeafterrestart"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Jika Anda keluar dari dsh (atau dsh tertutup) saat sebuah obrolan sedang bekerja, obrolan itu berlanjut sendiri saat Anda membuka dsh lagi, dengan catatan tersembunyi yang sama seperti Lanjutkan Sekali Klik. Jika putaran tujuan (`/goal`) sedang berjalan, tujuan itu berlanjut ke putaran berikutnya (dsh menjeda tujuan setiap kali dimulai sampai Anda melanjutkannya). Obrolan yang Anda hentikan, yang selesai, atau yang gagal tidak berlanjut. dsh sendiri tidak memiliki pengaturan untuk ini: dsh hanya menandai giliran seperti itu sebagai terinterupsi. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Tangkapan layar: Lanjutkan setelah mulai ulang"></a> |
51
+ | **Seret dan lepas antrean** | <a id="feature-queuereorder"></a>Pesan dalam antrean mendapat pegangan (⠿). Seret untuk mengubah urutan, atau fokuskan pegangan lalu tekan `↑` / `↓`. `Esc` membatalkan. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Tangkapan layar: Seret dan lepas antrean"></a> |
52
+ | **Salin tautan sesi** | <a id="feature-copydeeplink"></a>Klik kanan obrolan di bilah samping → **Salin tautan sesi**. Tempelkan tautan `dsh-session:…` ke obrolan lain untuk melampirkan obrolan itu sebagai konteks hanya-baca. dsh 0.2.1 memiliki **Salin ID sesi** sendiri, yang hanya menyalin ID polos; item ini muncul tepat sesudahnya. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Tangkapan layar: Salin tautan sesi"></a> |
53
+ | **Ekspor obrolan sebagai Markdown** | <a id="feature-exportmarkdown"></a>Klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Ekspor sebagai Markdown…**. Dialog menampilkan jumlah pesan dalam obrolan. **Salin ke papan klip** menyalin obrolan sebagai Markdown, dan **Simpan file .md** menyimpannya sebagai `<chat title>.md` melalui unduhan browser (dsh desktop: ke folder Unduhan atau lewat dialog simpan, sesuai pengaturan sistem Anda). File berisi judul obrolan, nama proyek, dan tanggal, lalu satu bagian `## Anda` atau `## Asisten` untuk setiap pesan. Blok kode tetap seperti aslinya; blok kode yang dibiarkan terbuka oleh suatu pesan akan ditutup. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Tangkapan layar: Ekspor obrolan sebagai Markdown"></a> |
54
+ | **Salin jalur proyek** | <a id="feature-copyprojectpath"></a>Klik kanan proyek di bilah samping → **Salin jalur** menyalin jalur lengkap foldernya. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Tangkapan layar: Salin jalur proyek"></a> |
55
+ | **Pencarian proyek di obrolan baru** | <a id="feature-projectpicker"></a>Obrolan baru → tombol proyek di atas kotak pesan. Proyek ditampilkan dalam urutan A–Z, dengan kotak **Cari proyek** di bagian atas. Ketik sebagian nama (tanpa membedakan huruf besar-kecil dan aksen), lalu tekan `Enter` untuk memilih hasil pertama. Jika tidak ada yang cocok, muncul **Tidak ada proyek yang cocok**. Urutan proyek tersimpan milik dsh di bilah samping tidak berubah. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Tangkapan layar: Pencarian proyek di obrolan baru"></a> |
56
+ | **Prediksi pesan berikutnya** | <a id="feature-nextprediction"></a>Aktif secara default: Anda dapat menonaktifkannya di **Pengaturan → Composer Plus**. Setelah agen menyelesaikan satu giliran (bukan giliran yang dihentikan atau gagal), kotak pesan yang kosong menampilkan tebakan pesan Anda berikutnya dengan teks abu-abu, beserta petunjuk **Tab untuk menerima**. `Tab` memasukkan teks ke kotak pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya untuk giliran itu. Mulai mengetik juga menyembunyikannya, dan giliran baru menggantinya. Menu **Model** di bawah sakelar menampilkan model milik dsh sendiri (daftar yang sama dengan menu model dsh). **Default dsh** dipilih secara default dan mengikuti model default dsh. Setiap giliran yang selesai memakai satu panggilan model singkat. Di Tether, tebakan tampil di atas kotak pesan yang kosong: ketuk untuk memasukkannya ke kolom. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Tangkapan layar: Prediksi pesan berikutnya"></a> |
57
+ | **Lengkapi saat mengetik** | <a id="feature-typingcompletion"></a>Nonaktif secara default: Anda dapat mengaktifkannya di **Pengaturan → Composer Plus**. Saat Anda mengetik, teks abu-abu tepat setelah kursor menunjukkan kelanjutan pesan Anda. `Tab` menambahkannya ke pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya. Fitur ini hanya menyarankan kata-kata Anda sendiri berikutnya: tidak pernah berupa jawaban untuk Anda, dan tanpa teks error atau nama karangan. Jika pesan tampak sudah lengkap atau model tidak yakin, tidak ada yang tampil. Jika Anda mengetik huruf berikutnya dari teks abu-abu itu, teks tetap ada, tanpa panggilan model baru. Fitur ini memiliki menu **Model** sendiri di bawah sakelarnya. Entri pertamanya, **Sama dengan prediksi pesan berikutnya**, memakai model **Prediksi pesan berikutnya** (default); pilih model lain untuk memakai model yang berbeda bagi setiap fitur, misalnya model yang lebih cepat untuk pelengkapan. Fitur ini melakukan satu panggilan model di setiap jeda saat Anda mengetik, jadi memakai jauh lebih banyak token daripada prediksi: pilih model yang cepat dan murah. Fitur ini tidak berjalan untuk perintah garis miring, pesan dengan chip file, atau saat kursor tidak berada di akhir. Di Tether, sisa teks tampil di atas kolom saat Anda mengetik: ketuk untuk menambahkannya. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Tangkapan layar: Lengkapi saat mengetik"></a> |
58
+ | **Sempurnakan prompt** | <a id="feature-promptimprove"></a>Ketik permintaan kasar, lalu klik tongkat ajaib (**Sempurnakan prompt**) di samping menu model. Satu panggilan model menulis ulang permintaan itu menjadi prompt yang lebih jelas: tujuan lebih dulu, langkah bernomor yang singkat jika ada beberapa bagian, dan pemeriksaan yang perlu dijalankan. Fitur ini membaca obrolan ini (tanpa pesan yang ditarik oleh putar balik), README, AGENTS.md, dan manifes proyek, file yang diubah, serta file yang namanya cocok dengan kata-kata Anda, dan mempertahankan bahasa Anda. Fitur ini tidak pernah mengarang nama file. Teks baru menggantikan draf Anda, tetapi tidak dikirim: baca, edit, lalu tekan `Enter`. `Cmd/Ctrl+Z` mengembalikan teks Anda dalam satu langkah, begitu juga tombolnya (**Urungkan penyempurnaan**). Jika Anda mengetik saat fitur ini bekerja, teks baru Anda tetap ada. `Esc` atau klik kedua membatalkannya. Fitur ini memiliki menu **Model** sendiri di Pengaturan (default: **Sama dengan model obrolan**). Tidak untuk perintah garis miring atau pesan dengan chip file. Di Tether, tongkat ajaib ada di samping kolom. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Tangkapan layar: Sempurnakan prompt"></a> |
59
+ | **Izinkan untuk obrolan ini** | <a id="feature-allowforchat"></a>Saat Tinjauan otomatis bertanya kepada Anda, kartu persetujuan mendapat tombol **Izinkan untuk obrolan ini**: mulai saat itu, alat yang sama di obrolan yang sama diizinkan, dengan argumen apa pun. Sebuah chip di header menampilkan daftar izin dan dapat mencabutnya. Izin tetap ada setelah mulai ulang. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Tangkapan layar: Izinkan untuk obrolan ini"></a> |
60
+ | **Status proyek** | <a id="feature-projectstatus"></a>Baris proyek di bilah samping menampilkan penanda spinner / menunggu / selesai yang sama seperti obrolannya. Jadi, proyek yang diciutkan tetap memberi tahu Anda bahwa ada obrolan di dalamnya yang sedang bekerja atau memerlukan Anda. Obrolan yang menunggu Anda ditampilkan lebih dulu, lalu obrolan selesai yang belum Anda buka (titik hijau, juga saat obrolan lain masih berjalan), lalu spinner. Arahkan penunjuk ke penanda itu untuk melihat detailnya. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
61
+ | **Proyek aktif di atas** | <a id="feature-activeprojectsfirst"></a>Saat sebuah obrolan mulai berjalan atau memerlukan Anda, proyeknya pindah ke bagian atas bilah samping dengan animasi baris bawaan dsh (gerakan yang sama seperti saat Anda menyeretnya ke sana). Proyek yang selesai tetap di tempatnya; seret ke mana saja seperti biasa. Perpindahan disimpan ke urutan proyek dsh, jadi menonaktifkan fitur ini mempertahankan urutan saat ini. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Proyek aktif di atas"></a> |
62
+ | **Filter proyek terbaru** | <a id="feature-recentprojects"></a>Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
63
+ | **Ciutkan semua proyek** | <a id="feature-collapseprojects"></a>Saat ada proyek yang terbuka di bilah samping, sebuah tombol muncul di samping opsi tampilan (ikon slider). Klik tombol itu untuk menutup semua proyek yang terbuka sekaligus, misalnya 3 proyek terbuka dari 5. Tombol itu tersembunyi lagi saat tidak ada proyek yang terbuka. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Tangkapan layar: Ciutkan semua proyek"></a> |
64
+ | **Urutkan menurut status** | <a id="feature-statusorder"></a>Bilah samping → opsi tampilan → **Urutkan menurut** → **Menurut status** (dengan **Dalam satu daftar**). Obrolan yang selesai muncul pertama (titik “selesai” dari dsh, yang juga didapat oleh giliran yang berakhir dengan kesalahan). Lalu muncul obrolan yang berjalan atau menunggu, lalu obrolan dengan otomatisasi aktif (Tugas otomatisasi), lalu sisanya dalam urutan dsh. Membuka obrolan yang selesai memindahkannya ke bawah. Hanya tampilan yang berubah: pilih **Manual** atau **Terakhir diperbarui** untuk kembali. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Tangkapan layar: Urutkan menurut status"></a> |
65
+ | **Notifikasi latar belakang** | <a id="feature-notifications"></a>Saat dsh berada di latar belakang, Anda mendapat notifikasi ketika sebuah giliran selesai (baris pertama balasan). Anda juga mendapat notifikasi ketika obrolan benar-benar menunggu Anda: persetujuan (nama alat), jawaban (pertanyaannya), atau tinjauan rencana. Permintaan harus masih terbuka 1,5 detik kemudian. Jadi, persetujuan yang dijawab otomatis (izin Tinjauan otomatis, plugin lain) tidak memunculkan notifikasi, dan notifikasi ditarik begitu permintaannya dijawab. Lencana di Dock/taskbar menghitung obrolan yang menunggu. Mengklik notifikasi membuka obrolan itu. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Tangkapan layar: Notifikasi latar belakang"></a> |
66
+ | **Bahasa aplikasi** | <a id="feature-language"></a>Pengaturan → Composer Plus → **Bahasa aplikasi** mengganti seluruh antarmuka dsh ke Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt, atau हिन्दी (lihat di bawah). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Tangkapan layar: Bahasa aplikasi"></a> |
67
+ | **Koneksi seluler (iPhone)** | <a id="feature-mobileconnect"></a>Gunakan dsh dari iPhone Anda dengan aplikasi [Tether](tether/), di Wi-Fi yang sama atau melalui [Tailscale](https://tailscale.com). Aktifkan di **Pengaturan → Composer Plus** (nonaktif secara default karena membuka port jaringan di Mac ini). Lalu klik **Koneksi seluler** di kiri bawah bilah samping: pindai kode QR dengan Kamera iPhone (ketuk **Open in Tether**) atau dengan **Scan code** di Tether, ketuk **Connect**, lalu klik **Approve**. Instal Tether terlebih dahulu: tanpa aplikasi itu, Kamera tidak dapat membuka kode tersebut. Ponsel menampilkan obrolan Anda, mengirim pesan, menjawab persetujuan dan pertanyaan, serta mengganti model dan agen. Pasangkan Mac sebanyak yang Anda mau: nama Mac di kiri atas aplikasi berpindah di antara Mac tersebut. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Tangkapan layar: Koneksi seluler (iPhone)"></a> |
68
+ | **Pembaruan otomatis** | <a id="feature-autoupdate"></a>Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. Mulai ulang dsh untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. Saat dsh pertama kali dimulai dengan versi baru, jendela **Yang baru di Composer Plus N** menampilkan catatan rilis versi itu satu kali (dari pemeriksaan pembaruan yang sama, tanpa panggilan jaringan lain); **Tutup** atau `Esc` menutupnya. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
69
+
70
+ <!-- END GENERATED FEATURES -->
66
71
 
67
72
  Tombol, tooltip, pemberitahuan, dan notifikasi mengikuti bahasa dsh yang dipilih (lihat Bahasa aplikasi di bawah).
68
73
 
69
74
  ## Pengaturan
70
75
 
71
- Setiap fitur dapat diaktifkan atau dinonaktifkan secara terpisah: dsh **Pengaturan → Composer Plus**. Setiap baris memiliki tangkapan layar kecil: arahkan penunjuk ke gambar itu untuk pratinjau yang lebih besar, atau klik untuk membukanya dalam ukuran penuh (`Esc` menutupnya). Kotak **Cari fitur** di bagian atas memfilter halaman menurut nama atau deskripsi (bahasa apa pun, tanpa membedakan huruf besar-kecil dan aksen); `Esc` mengosongkannya. Setiap baris memiliki sakelar dan deskripsi singkat. Perubahan langsung berlaku tanpa mulai ulang dan diingat di perangkat itu. Semua fitur aktif secara default, kecuali **Koneksi seluler**, **Lanjutkan setelah mulai ulang**, dan **Lengkapi saat mengetik**. Host dsh menyimpan sakelar ketiga fitur ini serta sakelar **Pencarian isi**, **Putar balik giliran**, dan **Prediksi pesan berikutnya**, jadi sakelar itu berlaku untuk setiap jendela dan tetap ada setelah mulai ulang. Host juga menyimpan pilihan **Model** untuk **Prediksi pesan berikutnya** dan untuk **Lengkapi saat mengetik** (bawaannya **Sama dengan prediksi pesan berikutnya**). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
76
+ Setiap fitur dapat diaktifkan atau dinonaktifkan secara terpisah: dsh **Pengaturan → Composer Plus**. Setiap baris memiliki tangkapan layar kecil: arahkan penunjuk ke gambar itu untuk pratinjau yang lebih besar, atau klik untuk membukanya dalam ukuran penuh (`Esc` menutupnya). Kotak **Cari fitur** di bagian atas memfilter halaman menurut nama atau deskripsi (bahasa apa pun, tanpa membedakan huruf besar-kecil dan aksen); `Esc` mengosongkannya. Setiap baris memiliki sakelar dan deskripsi singkat. **?** kecil setelah nama baris membuka bagian README ini yang menjelaskan fitur itu, di README bahasa antarmuka dsh. Perubahan langsung berlaku tanpa mulai ulang dan diingat di perangkat itu. Semua fitur aktif secara default, kecuali **Koneksi seluler**, **Lanjutkan setelah mulai ulang**, dan **Lengkapi saat mengetik**. Host dsh menyimpan sakelar ketiga fitur ini serta sakelar **Pencarian isi**, **Putar balik giliran**, dan **Prediksi pesan berikutnya**, jadi sakelar itu berlaku untuk setiap jendela dan tetap ada setelah mulai ulang. Host juga menyimpan pilihan **Model** untuk **Prediksi pesan berikutnya**, untuk **Lengkapi saat mengetik** (bawaannya **Sama dengan prediksi pesan berikutnya**), dan untuk **Sempurnakan prompt** (bawaannya **Sama dengan model obrolan**). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
72
77
 
73
78
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="Pengaturan → Composer Plus: pencarian fitur, pemilih bahasa, baris pembaruan, dan satu sakelar per fitur, dengan pratinjau tangkapan layar saat penunjuk diarahkan"></p>
74
79
 
@@ -120,16 +125,17 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
120
125
  - **Putar balik giliran:** sebelum setiap pesan Anda, Host mengambil snapshot git dari folder obrolan ke penyimpanannya sendiri, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (folder hanya untuk pemilik). Penyimpanan ini berisi salinan file di folder itu yang terlihat oleh git (bukan file yang diabaikan), jadi sama privatnya dengan proyek. Fitur ini membaca objek repositori Anda (tanpa menyalin apa yang sudah dimiliki git) dan tidak pernah menulis index, `HEAD`, branch, tag, stash, atau config repositori Anda. Satu-satunya perubahan yang dibuat git di sana adalah stempel waktu yang lebih baru pada file objek yang dipakai ulang (ini menunda pembersihannya oleh `git gc`). Putar balik dengan file hanya menulis file biasa di dalam folder obrolan; symlink, pipe, dan apa pun di luar folder dilewati. Tidak ada yang keluar dari mesin Anda. Anda dapat menghapus penyimpanan ini saat dsh ditutup (putar balik lalu hanya berlaku untuk obrolan, sampai ada pesan baru). **Hapus obrolan** juga menghapus penyimpanan milik obrolan itu. Sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
121
126
  - **Ekspor obrolan sebagai Markdown:** bagian Host hanya membaca log milik obrolan itu (pesan yang sama dengan yang ditampilkan dsh) dan memberikannya ke halaman; bagian ini tidak membaca file proyek dan tidak mengirim apa pun lewat jaringan. Markdown hanya masuk ke papan klip Anda atau ke file yang Anda simpan.
122
127
  - **Hapus obrolan:** memindahkan folder log milik obrolan (`$DSH_HOME/sessions/<project>/<chat>`) ke Tong Sampah. Folder proyek tidak disentuh.
123
- - **Izinkan untuk obrolan ini:** izin disimpan di `$DSH_HOME/storages/dsh-composer-plus/grants.json` (izin akses hanya untuk pemilik). Satu izin berlaku untuk **satu alat tertentu di satu obrolan**. Jika alat itu dapat menulis, izin itu juga mencakup penulisan apa pun. Cabut izin dari chip di header.
128
+ - **Izinkan untuk obrolan ini:** izin disimpan di `$DSH_HOME/storages/dsh-composer-plus/grants.json` (izin akses hanya untuk pemilik). Satu izin berlaku untuk satu alat tertentu di satu obrolan. Jika alat itu dapat menulis, izin itu juga mencakup penulisan apa pun. Cabut izin dari chip di header.
124
129
  - Tinjauan otomatis tetap berjalan pada setiap panggilan; tinjauan yang gagal tidak pernah diizinkan secara otomatis.
125
- - **Koneksi seluler:** nonaktif sampai Anda mengaktifkannya. Selama aktif, bagian Host menjalankan gateway Tether: HTTPS di port 19390 yang hanya menerima subnet Wi-Fi dan tailnet Anda (100.64.0.0/10), serta halaman pemasangan di `127.0.0.1:19391` (hanya Mac ini). Ponsel memerlukan kode sekali pakai dari kode QR (berlaku 5 menit) dan klik **Approve** dari Anda di Mac. Ponsel menyematkan (pin) sertifikat gateway. Mac hanya menyimpan hash token setiap ponsel (30 hari, diperpanjang selama dipakai); **Revoke** langsung menutup koneksi ponsel itu. Ponsel hanya dapat memanggil daftar metode dsh yang diizinkan (obrolan, prompt, lampiran, perintah garis miring, persetujuan, pertanyaan, model, agen, tujuan), bukan pengaturan, kredensial, browser file, atau terminal. Data: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Detail: [tether/README.md](tether/README.md).
130
+ - **Koneksi seluler:** nonaktif sampai Anda mengaktifkannya. Selama aktif, bagian Host menjalankan gateway Tether: HTTPS di port 19390 yang hanya menerima subnet Wi-Fi dan tailnet Anda (100.64.0.0/10), serta halaman pemasangan di `127.0.0.1:19391` (hanya Mac ini). Ponsel memerlukan kode sekali pakai dari kode QR (berlaku 5 menit) dan klik **Approve** dari Anda di Mac. Ponsel menyematkan (pin) sertifikat gateway. Mac hanya menyimpan hash token setiap ponsel (30 hari, diperpanjang selama dipakai); **Remove** langsung menutup koneksi ponsel itu. Ponsel hanya dapat memanggil daftar metode dsh yang diizinkan (obrolan, prompt, lampiran, perintah garis miring, persetujuan, pertanyaan, model, agen, tujuan), bukan pengaturan, kredensial, browser file, atau terminal. Data: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Detail: [tether/README.md](tether/README.md).
126
131
  - **Pembaruan:** bagian Host menanyakan rilis terbaru ke `api.github.com` dan versi persis itu ke `registry.npmjs.org`; tidak ada data tentang Anda atau obrolan Anda yang dikirim. Pemasangan memakai pengelola plugin dsh (`pnpm add dsh-composer-plus@<version>`; jika dsh 0.2.1 menolaknya untuk plugin yang sudah terpasang, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, lalu profil mencantumkan URL itu sebagai sumber plugin), jadi pemeriksaan registri, skrip, dan kompatibilitas versi milik dsh tetap berlaku. Tag pra-rilis dan versi lama tidak pernah dipasang.
127
132
  - **Prediksi pesan berikutnya:** aktif secara default. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan model ini. Setelah setiap giliran selesai, bagian Host mengirim pesan Anda sendiri di obrolan itu dan balasan teks agen (tanpa keluaran alat, tanpa konteks tersembunyi, tanpa penalaran), paling banyak sekitar 6.000 karakter (bagian terbaru), ke model yang dipilih (model default dsh, kecuali Anda memilih yang lain). Pengiriman ini memakai pengaturan penyedia bawaan dsh, sebagai satu permintaan. Tidak ada yang disimpan di obrolan: tebakan tidak ditambahkan ke riwayat obrolan. Sakelar dan pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/predict.json` (file hanya untuk pemilik).
128
133
  - **Lengkapi saat mengetik:** nonaktif sampai Anda mengaktifkannya. Selama aktif, di setiap jeda saat Anda mengetik, bagian Host mengirim teks yang sudah Anda ketik, serta pesan Anda sendiri di obrolan itu dan balasan teks agen (tanpa keluaran alat, tanpa konteks tersembunyi, tanpa penalaran), paling banyak sekitar 3.000 karakter dari obrolan, ke model yang dipilih di **Lengkapi saat mengetik** (secara default model **Prediksi pesan berikutnya**). Jeda yang lebih baru menghentikan permintaan yang lebih lama. Tidak ada yang disimpan di obrolan. Sakelar disimpan di `$DSH_HOME/storages/dsh-composer-plus/complete.json` (file hanya untuk pemilik).
134
+ - **Sempurnakan prompt:** tidak ada yang berjalan sampai Anda mengklik tongkat ajaib. Setelah itu, bagian Host mengirim draf Anda, pesan Anda sendiri di obrolan itu dan balasan teks agen (tanpa keluaran alat, tanpa konteks tersembunyi, tanpa penalaran, tanpa pesan yang ditarik oleh putar balik; paling banyak sekitar 6.000 karakter, bagian terbaru), ringkasan proyek yang sama dengan **Ide fitur** (dengan aturan file yang sama: tanpa `.env*` atau file kunci, tanpa symlink ke luar folder, tanpa FIFO), jalur yang dicantumkan `git status` sebagai berubah, dan paling banyak 30 jalur yang dilacak atau tidak dilacak (tidak diabaikan) yang namanya memiliki kata yang sama dengan draf Anda, ke model yang dipilih di **Sempurnakan prompt** (secara default model obrolan itu sendiri), sebagai satu permintaan. Isi file selain ringkasan itu tidak dikirim. Tidak ada yang ditulis ke obrolan atau proyek: jawaban hanya menggantikan draf Anda di kotak pesan, dan Anda yang memutuskan apakah akan mengirimnya. Pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/improve.json` (file hanya untuk pemilik).
129
135
 
130
136
  ## Pemecahan masalah
131
137
 
132
- - **Tidak ada notifikasi di macOS:** Pengaturan Sistem → Pemberitahuan → DeepSeek Harness → izinkan. Pilih **Peringatan** agar notifikasi tetap tampil di layar.
138
+ - **Tidak ada notifikasi di macOS:** Pengaturan Sistem → Pemberitahuan → DeepSeek Harness → izinkan. Pilih Peringatan agar notifikasi tetap tampil di layar.
133
139
  - **▶, pegangan antrean, status proyek, opsi proyek terbaru, Ciutkan semua proyek, Salin jalur, kotak pencarian proyek, prediksi pesan berikutnya, pelengkapan saat mengetik, Izinkan untuk obrolan ini, atau klik kanan hilang setelah dsh diperbarui:** elemen-elemen ini menempel ke HTML dsh saat ini karena dsh belum memiliki slot untuknya. Jika dsh mengubah markup itu, elemen-elemen ini menyembunyikan dirinya sendiri; tidak ada hal lain yang rusak. Silakan buka [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
134
140
  - **"Pembaruan gagal" atau "tidak dipasang dari npm":** salinan yang ditautkan dari folder lokal atau yang diganti namanya tidak dapat memperbarui dirinya sendiri; pasang ulang `dsh-composer-plus` dari Pengaturan → Plugin. Selain itu, pesan menampilkan baris pertama error pnpm; **Periksa pembaruan** mencoba lagi.
135
141
  - **Koneksi seluler menyatakan gateway tidak berjalan:** "no IPv4 address on en0" berarti Mac ini tidak memiliki alamat Wi-Fi/Ethernet; "EADDRINUSE" berarti dsh lain (atau aplikasi lain) memakai port 19390 atau 19391. Hanya satu dsh yang dapat menjalankan Koneksi seluler pada satu waktu.
@@ -139,7 +145,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
139
145
  - **Obrolan dan file berwarna abu-abu:** proyek bukan repositori git, tidak ada snapshot dari sebelum pesan itu (pesan lebih lama dari plugin, atau salah satu dari 50 snapshot terbaru telah menggantikannya), atau tidak ada file yang berubah.
140
146
  - **Hapus menyatakan dsh lain sedang membuka obrolan ini:** dsh kedua pada dsh home yang sama memegang kunci obrolan. Tutup jendela atau dsh itu, lalu hapus lagi. Sementara itu, obrolan tetap diarsipkan.
141
147
  - **Obrolan tidak berlanjut setelah mulai ulang:** Lanjutkan setelah mulai ulang nonaktif saat dsh ditutup, Anda sendiri yang menghentikan giliran itu, giliran sudah berakhir (selesai atau gagal), obrolan diarsipkan, atau lebih dari 20 obrolan sedang berjalan (20 yang terbaru berlanjut).
142
- - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.11.3`), lihat catatan pemasangan di atas.
148
+ - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.12.0`), lihat catatan pemasangan di atas.
143
149
 
144
150
  ## Batasan
145
151
 
@@ -156,7 +162,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
156
162
  - Antrean dsh tidak memiliki tindakan `move`, jadi bagian Host plugin memindahkan pesan antrean itu sendiri di dalam antrean dsh (satu perubahan, pesan yang sama). Pesan dengan gambar atau file juga dapat dipindahkan. Hanya pesan Anda sendiri yang dapat dipindahkan: putaran tujuan atau balasan pertanyaan di antrean tetap di tempatnya. Jika sebuah pesan mulai dikirim saat Anda menyeret, tidak ada yang dipindahkan dan muncul pemberitahuan tentang hal itu.
157
163
  - dsh 0.2.1 langsung memuat pembaruan jika versi baru tidak mengubah pengaturan dsh apa pun; dalam kasus lain, dan pada dsh 0.2.0, mulai ulang dsh untuk memuatnya. Plugin tidak pernah memulai ulang dsh untuk Anda. Profil web/CLI tanpa pengelola plugin dsh hanya melaporkan adanya versi baru.
158
164
  - **Pertahankan fokus composer** mengembalikan fokus hanya setelah perintah `/` atau skill. Saat dsh memproses perintah, kotak pesan tetap hanya-baca selama beberapa milidetik, jadi tombol yang ditekan dalam waktu itu hilang. Jika menu `/` dsh masih terbuka, `Enter` memilih baris yang disorot dan tidak mengirim.
159
- - **Koneksi seluler** hanya berfungsi di macOS (memakai `en0`, `openssl`, `swift`, dan `dns-sd`). Fitur ini memakai port tetap 19390 dan 19391, jadi hanya satu dsh di setiap Mac yang dapat menjalankannya pada satu waktu (setiap Mac adalah satu entri dalam daftar Mac di ponsel). Ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang (tidak ada layanan push). Aplikasi iOS belum ada di App Store: bangun aplikasi itu dari `tether/ios` dengan Xcode.
165
+ - **Koneksi seluler** hanya berfungsi di macOS (memakai `en0`, `openssl`, `swift`, dan `dns-sd`). Fitur ini memakai port tetap 19390 dan 19391, jadi hanya satu dsh di setiap Mac yang dapat menjalankannya pada satu waktu (setiap Mac adalah satu entri dalam daftar Mac di ponsel). Ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang (tidak ada layanan push). Aplikasi iOS belum ada di App Store: bangun aplikasi itu dari `tether/ios` dengan Xcode. Titik hijau di Tether mengikuti Mac: chat yang Anda buka di dsh juga kehilangan titiknya di ponsel. Chat yang Anda buka di Tether hanya kehilangan titiknya di ponsel. Titik milik dsh di Mac tetap ada sampai Anda membuka chat itu di Mac.
160
166
  - Tautan sesi berfungsi di dalam obrolan; mengkliknya tidak membuka obrolan.
161
167
  - Notifikasi yang dikirim sebelum mulai ulang hanya membawa dsh ke depan saat diklik.
162
168
  - Proyek aktif dipindahkan dengan urutan proyek tersimpan milik dsh, jadi urutan baru tetap ada setelah mulai ulang. Obrolan di luar proyek mana pun ("Tanpa grup") tidak dapat dipindahkan; dsh selalu menampilkannya paling akhir.
@@ -165,6 +171,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
165
171
  - dsh juga tidak memiliki titik ekstensi di menu proyek obrolan baru, jadi kotak **Cari proyek** dan urutan A–Z menempel ke markup menu dsh. Jika pembaruan dsh mengubah markup itu, menu tampil seperti yang digambar dsh: dalam urutan tersimpan, tanpa kotak pencarian. Urutan A–Z hanya tampilan: urutan ini tidak mengubah urutan proyek tersimpan milik dsh.
166
172
  - dsh juga tidak memiliki titik ekstensi untuk petunjuk di kotak pesan, jadi teks **Prediksi pesan berikutnya** ditampilkan di atas teks placeholder milik dsh (`[data-composer-placeholder]`). Jika pembaruan dsh mengubah markup itu, prediksi tidak ditampilkan. Selama fitur ini aktif, setiap giliran yang selesai memakai satu panggilan model singkat.
167
173
  - **Lengkapi saat mengetik** menampilkan teksnya melalui petunjuk kotak pesan milik dsh sendiri (gaya `--dsh-composer-hint` yang dipakai dsh untuk petunjuk argumen perintah garis miring). Fitur ini tidak berjalan untuk perintah garis miring, pesan dengan chip file atau simbol, atau saat kursor tidak berada di akhir pesan. Jika pembaruan dsh mengubah gaya itu, pelengkapan tidak ditampilkan. Setiap jeda saat Anda mengetik memakai satu panggilan model.
174
+ - **Sempurnakan prompt** hanya melihat ringkasan proyek yang singkat, jalur yang berubah, dan jalur yang namanya cocok dengan kata-kata Anda: bukan kodenya sendiri. Jadi fitur ini bisa melewatkan file yang tepat, dan hanya menyebut jalur yang diberikan kepadanya. Baca teks baru sebelum Anda mengirimnya. Fitur ini tidak berjalan untuk perintah garis miring atau pesan dengan chip file atau simbol (teks baru adalah teks biasa, jadi chip itu akan hilang), dan sebuah pesan paling banyak 8.000 karakter. Gambar tetap terlampir: hanya teksnya yang berubah. Setiap klik memakai satu panggilan model; model yang kuat bisa memerlukan satu menit (`Esc` membatalkannya).
168
175
  - Dukungan bawaan sudah diminta ke upstream: `move` antrean di [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), status Lanjutkan di [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
169
176
 
170
177
  ## Pertanyaan umum
@@ -189,6 +196,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
189
196
 
190
197
  **Model mana yang menulis prediksi?** Model yang Anda pilih di **Pengaturan → Composer Plus → Prediksi pesan berikutnya → Model**. Daftarnya adalah daftar model milik dsh sendiri. **Default dsh** mengikuti model default dsh. Jika dsh tidak lagi menampilkan model yang dipilih, prediksi memakai model default. **Lengkapi saat mengetik** memiliki menu **Model** sendiri: **Sama dengan prediksi pesan berikutnya** (default) mengikuti model prediksi; pilihan lain hanya dipakai untuk pelengkapan. Jika dsh tidak lagi menampilkan model itu, pelengkapan memakai model prediksi.
191
198
 
199
+ **Bisakah dsh menyempurnakan prompt saya sebelum saya mengirimnya, seperti tombol Enhance prompt di Roo Code atau Augment?** Bisa, dengan **Sempurnakan prompt** (aktif secara default): ketik permintaan kasar, lalu klik tongkat ajaib di samping menu model. Fitur ini menulis ulang teks dengan obrolan ini dan proyek sebagai konteks, dalam bahasa Anda, dan tidak mengirimnya. `Cmd/Ctrl+Z` atau **Urungkan penyempurnaan** mengembalikan teks Anda. Pilih modelnya di **Pengaturan → Composer Plus → Sempurnakan prompt → Model**.
200
+
192
201
  **Bagaimana cara mengubah urutan pesan dalam antrean di dsh?** Seret pegangan ⠿ pada pesan dalam antrean, atau fokuskan pegangan itu lalu tekan `↑` / `↓`.
193
202
 
194
203
  **Bagaimana cara menghentikan Tinjauan otomatis agar tidak terus bertanya tentang alat yang sama dalam satu obrolan?** Klik **Izinkan untuk obrolan ini** pada kartu persetujuan. Izin ini hanya mencakup alat itu di obrolan itu; cabut izin dari chip di header.
@@ -219,8 +228,12 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /pa
219
228
  PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
220
229
  # Order by status (fake model + Schedule): real-app test + its thumbnail
221
230
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
222
- # every Settings feature row shows a loading screenshot
231
+ # every Settings feature row shows a loading screenshot and a ? link to its README row
223
232
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
233
+ # What's new after an update: the release notes show once, Esc and Close close them
234
+ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
235
+ # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
236
+ PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
224
237
  # Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
225
238
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
226
239
  # Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
@@ -235,14 +248,17 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /pat
235
248
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
236
249
  # Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
237
250
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
251
+ # Improve prompt (fake model, made-up git project): the wand sends the draft with the chat and the project, the answer replaces the draft, Cmd+Z and Undo bring it back + its thumbnail
252
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
238
253
  ```
239
254
 
240
255
  ```sh
241
256
  npm run build:locales # after editing locales/<id>.json
257
+ npm run build:readme # after editing docs/features.json
242
258
  npm test
243
259
  ```
244
260
 
245
- **Aturan untuk fitur baru:** setiap baris fitur di Pengaturan → Composer Plus menampilkan tangkapan layar. Tambahkan id fitur ke `SHOT_OF` di `client.js` dan ke `SHOTS` di `index.js`, lalu sertakan `assets/features/<id>.webp` (diambil dari dsh demo sekali pakai, UI bahasa Inggris, sekitar 60 kB atau kurang). Tambahkan fitur itu ke tabel README dengan gambar yang sama, di `README.md` dan di setiap `README.<id>.md` terjemahan. `test/shots.test.mjs` gagal jika sebuah fitur tidak memiliki tangkapan layar, dan `test/browser-settings-shots.mjs` memeriksa halaman Pengaturan yang asli. Daftar periksa lengkap untuk setiap perubahan ada di [AGENTS.md](AGENTS.md).
261
+ **Aturan untuk fitur baru:** setiap baris fitur di Pengaturan → Composer Plus menampilkan tangkapan layar. Tambahkan id fitur ke `SHOT_OF` di `client.js` dan ke `SHOTS` di `index.js`, lalu sertakan `assets/features/<id>.webp` (diambil dari dsh demo sekali pakai, UI bahasa Inggris, sekitar 60 kB atau kurang). Tambahkan fitur itu, dengan gambar yang sama, ke `docs/features.json` lalu jalankan `npm run build:readme`: perintah ini menulis tabel fitur di `README.md` dan di setiap `README.<id>.md` terjemahan, serta daftar di `llms.txt`. `test/shots.test.mjs` gagal jika sebuah fitur tidak memiliki tangkapan layar, dan `test/browser-settings-shots.mjs` memeriksa halaman Pengaturan yang asli. Daftar periksa lengkap untuk setiap perubahan ada di [AGENTS.md](AGENTS.md).
246
262
 
247
263
  Pengujian menjalankan `client.js` yang asli terhadap React/DOM palsu, dan `index.js` (bagian Host) yang asli terhadap repositori git sementara. Pengujian gateway Tether (`test/tether-gateway.test.mjs`) memakai host dsh tiruan dan gateway TLS sungguhan. Aplikasi iPhone ada di `tether/ios` (lihat [tether/README.md](tether/README.md) dan [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` memeriksa riwayat input di browser sungguhan terhadap `dsh web` sekali pakai dengan `DSH_HOME` miliknya sendiri.
248
264