dsh-composer-plus 1.22.0 → 1.24.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. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Papan tugas** memanggil model obrolan baru satu kali untuk label setiap tugas yang Anda mulai di papan. Dengan pengaturan **Ringkasan AI** (default-nya **Cepat (tanpa AI)**), papan juga memanggil model obrolan yang sedang berjalan untuk catatan progres singkat saat Anda melihat progres tugas itu di papan atau di Tether. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
17
+ Plugin komunitas tidak resmi. Pemeriksaan pembaruan melakukan panggilan jaringan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Paket skill bahasa Turki** (aktif secara default) mengunduh turkish-anti-ai-skill dari GitHub dan memeriksa versi baru sekali sehari, hanya saat **Bahasa aplikasi** adalah Türkçe; matikan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **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. **Papan tugas** memanggil model obrolan baru satu kali untuk label setiap tugas yang Anda mulai di papan. Dengan pengaturan **Ringkasan AI** (default-nya **Cepat (tanpa AI)**), papan juga memanggil model obrolan yang sedang berjalan untuk catatan progres singkat saat Anda melihat progres tugas itu di papan atau di Tether. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **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,7 +29,7 @@ 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.22.0`.
32
+ > pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.24.0`.
33
33
 
34
34
  ## Fitur
35
35
 
@@ -48,6 +48,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
48
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
49
  | **Sesuaikan kartu pertanyaan dengan jendela** | <a id="feature-questionfit"></a>Saat agen mengajukan pertanyaan, pertanyaan dan jawabannya bergulir bersama di kartu, dan **Lewati** serta **Kirim** tetap terlihat di bawah. Kartu memakai tinggi jendela (dikurangi 200 px untuk header chat dan sebagian chat), jadi kartu membesar dan mengecil bersama jendela. Tanpa fitur ini, dsh membatasi kartu pada 60% jendela (paling tinggi 520 px) dan hanya jawaban yang bergulir: pertanyaan yang panjang dapat mendorong akhir pertanyaan, jawaban, dan tombol keluar dari kartu. | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="Tangkapan layar: Sesuaikan kartu pertanyaan dengan jendela"></a> |
50
50
  | **Sesuaikan header chat dengan jendela** | <a id="feature-headerfit"></a>Di jendela yang sempit, tombol di header chat dsh (mode, subagen, tugas latar belakang, Buka di, label branch, dan label izin) tidak lagi saling menutupi. Judul chat tetap minimal 120 px; tombol yang tidak muat pindah ke baris kedua di kanan, dan setiap tombol tetap dapat diklik. Saat semuanya muat dalam satu baris (jendela lebar), header sama persis dengan milik dsh. Tanpa fitur ini, dsh hanya mengecilkan judul: dengan subagen dan tugas latar belakang, tombolnya saling menimpa di kolom chat yang sempit. Label branch (**Branch per obrolan**) dan label izin (**Izinkan untuk obrolan ini**) juga menyesuaikan header saat sakelar ini mati. | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="Tangkapan layar: Sesuaikan header chat dengan jendela"></a> |
51
+ | **Ingat ukuran jendela** | <a id="feature-windowsize"></a>Aplikasi desktop dsh membuka jendelanya pada 1280 × 820 setiap kali dimulai. Dengan fitur ini, jendela terbuka dengan ukuran dan posisi saat terakhir Anda gunakan. Ukuran disimpan setiap kali Anda mengubah ukuran atau memindahkan jendela, dan kembali saat plugin dimuat pada awal berikutnya. Jendela layar penuh atau yang diperkecil tidak disimpan; posisi pada layar yang sekarang tidak terhubung kembali di layar utama. Hanya di aplikasi desktop: tab browser tidak dapat mengubah ukuran jendelanya. | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="Tangkapan layar: Ingat ukuran jendela"></a> |
51
52
  | **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> |
52
53
  | **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> |
53
54
  | **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> |
@@ -69,9 +70,12 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
69
70
  | **Lanjutkan di obrolan baru** | <a id="feature-handoffchat"></a>Klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Lanjutkan di obrolan baru…**. Satu panggilan ke model obrolan itu sendiri menulis catatan serah terima dari apa yang ditampilkan obrolan: Tugas, Hasil, Selesai, Keputusan, Masalah terbuka, dan Tindakan berikutnya (panggilan alat dan hasilnya menjadi bukti; langkah yang Anda putar balik tidak disertakan). Catatan terbuka di sebuah dialog: baca dan edit catatan itu. **Tulis ulang** menulis catatan baru. **Mulai obrolan baru** (atau `Cmd/Ctrl+Enter`) membuka obrolan baru di proyek yang sama dengan catatan itu dan tautan ke obrolan lama sebagai pesan pertamanya; obrolan lama tetap seperti semula. Gunakan saat obrolan panjang sudah penuh atau lambat, atau untuk melanjutkan besok. Tidak ada yang ditulis ke proyek. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Tangkapan layar: Lanjutkan di obrolan baru"></a> |
70
71
  | **Rincian konteks** | <a id="feature-contextbreakdown"></a>Bilah samping kanan → `+` → **Konteks**. Halaman ini menampilkan apa yang sekarang mengisi konteks model obrolan yang terbuka dan berapa banyak jendela konteks yang dipakainya: prompt sistem, instruksi proyek (AGENTS.md), skill, pesan Anda, balasan agen dan panggilan alat, hasil alat (per alat), hasil MCP (per server), definisi alat, ringkasan pemadatan, dan catatan konteks lainnya, masing-masing dengan token dan porsinya. Klik sebuah bagian untuk melihat alat atau servernya. Halaman ini hanya membaca log obrolan, setelah `/compact` dan putar balik, dan tidak memanggil model; halaman ini membaca ulang setelah setiap giliran dan dengan **Segarkan**. Gunakan untuk melihat mengapa obrolan lambat atau penuh, misalnya karena hasil alat MCP yang besar atau banyak definisi alat. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Tangkapan layar: Rincian konteks"></a> |
71
72
  | **Langkah terencana** | <a id="feature-plannedsteps"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Agen mendapat alat `plan_next_steps`: dalam pesan yang sama dengan sebuah perintah, agen dapat merencanakan perintah berikutnya beserta argumen persisnya dan sebuah syarat, misalnya “jalankan `npm test` jika build berhasil”. Jika hasilnya memenuhi syarat, Composer Plus menjalankan langkah berikutnya sendiri tanpa panggilan model baru, sehingga obrolan panjang memakai lebih sedikit token. Langkah itu muncul di obrolan sebagai satu baris pendek, “Composer Plus · Planned steps: ran `test` … without a model call”, diikuti panggilan alat dan hasilnya. Hanya langkah `bash`, `read`, `grep`, dan `glob`; persetujuan, sandbox, dan File yang dilindungi berlaku untuk setiap langkah seperti biasa. Model menjawab lagi saat syarat tidak terpenuhi, saat dua langkah siap bersamaan, setelah langkah terakhir, dan saat Anda mengirim pesan. Idenya berasal dari HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Tangkapan layar: Langkah terencana"></a> |
73
+ | **Paket skill bahasa Turki** | <a id="feature-turkishskill"></a>Hanya saat **Bahasa aplikasi** adalah Türkçe (aktif secara default; matikan di **Pengaturan → Composer Plus**). Composer Plus mengunduh skill sumber terbuka [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT, oleh Yüce Zerey) dari GitHub dan menambahkannya ke skill dsh. Minta agen memanusiakan, menulis ulang, atau menulis teks bahasa Turki: dsh memuat skill itu, dan aturannya membantu agen menulis bahasa Turki yang alami tanpa pola AI. Hanya file Markdown paket yang disimpan; setiap file harus cocok dengan daftar file GitHub, dan tidak ada skrip paket yang dijalankan. Sekali sehari plugin menanyakan versi baru ke GitHub dan memasangnya. Baris ini menampilkan versi yang terpasang, atau alasan belum terpasang. Dalam bahasa lain skill tidak dipasang; kembalikan bahasa ke Türkçe dan skill kembali. | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="Tangkapan layar: Paket skill bahasa Turki"></a> |
74
+ | **Rapikan basis kode** | <a id="feature-untanglecodebase"></a>Aktif secara default; nonaktifkan di **Pengaturan → Composer Plus**. Menambahkan skill `/untangle-codebase` dari [caldoai/skills](https://github.com/caldoai/skills) (MIT, © 2026 Maze) ke daftar skill dsh. Di obrolan, ketik `/untangle-codebase` (muncul di menu `/`), bila perlu diikuti bagian yang ingin difokuskan, misalnya `/untangle-codebase src/api`, lalu kirim. Agen pertama-tama bertanya apakah juga harus menghapus komentar yang hanya mengulang kode dan tes yang tidak dapat menangkap bug nyata. Lalu agen mendaftar setiap salinan, keterkaitan tersembunyi, keterkaitan yang tidak perlu, pembungkus yang hanya meneruskan panggilan, kode mati, dan kasus khusus sekali pakai, merencanakan perbaikan dari prinsip dasar, mengerjakannya sebagai tujuan, dan memeriksa lagi dengan subagen sampai tidak ada lagi yang layak diperbaiki. Hanya Anda yang dapat memulainya: model tidak melihatnya di daftar skill, jadi skill ini tidak memakai token di obrolan lain. Skill dengan nama yang sama di proyek atau di `~/.dsh/skills` didahulukan. Mulai skill ini di obrolan **Branch per obrolan** dan periksa hasilnya di **Panel perubahan**. Di Tether: ketik `/untangle-codebase` di kolom pesan. | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="Tangkapan layar: Rapikan basis kode"></a> |
72
75
  | **File yang dilindungi** | <a id="feature-protectedfiles"></a>Aktif secara bawaan. Alat file milik agen sendiri tidak dapat membaca atau mengubah file yang cocok dengan pola Anda: `read`, `read_image`, dan `grep` pada file ditolak untuk pola **baca dan tulis**, sedangkan `write`, `edit`, dan `str_replace_editor` ditolak untuk kedua jenis. Agen membaca alasannya dan diminta untuk bertanya kepada Anda. Pola bawaannya `.env*`, `*.pem`, dan `*.key`. Pengaturan → Composer Plus → **File yang dilindungi**: tambahkan pola (misalnya `published/**` atau `config/*.yml`), klik jenisnya untuk beralih antara **baca dan tulis** dan **hanya tulis**, hapus dengan ✕, atau klik **Gunakan bawaan**. Pola tanpa `/` cocok dengan nama file di folder mana pun. Ini pagar pengaman, bukan sandbox: perintah shell (`cat .env`), skrip, atau alat MCP tetap dapat menjangkau file itu (lihat Batasan). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Tangkapan layar: File yang dilindungi"></a> |
73
76
  | **Perintah yang diblokir** | <a id="feature-blockedcommands"></a>Aktif secara bawaan, dengan daftar kosong. Perintah shell agen (`bash`, `pwsh`) tidak dapat menjalankan perintah yang cocok dengan aturan Anda: aturan **blokir** menolak panggilan itu (agen membaca alasannya dan diminta untuk bertanya kepada Anda), aturan **tanya dulu** menampilkan kartu persetujuan dsh, dan perintah hanya berjalan jika Anda mengizinkannya. Pengaturan → Composer Plus → **Perintah yang diblokir**: ketik aturan (misalnya `npm publish`, `git push --force`, atau `ssh *192.168.2.19`), klik jenisnya untuk beralih antara **blokir** dan **tanya dulu**, lalu klik **Tambah**; klik jenis sebuah aturan untuk mengubahnya, hapus aturan dengan ✕. Aturan adalah nama perintah dan kata-kata yang harus muncul sesudahnya dalam urutan ini; `*` cocok dengan teks apa pun. Fitur ini juga menemukan perintah sesudah `&&`, `;`, `\|`, di dalam `$(…)`, `bash -c "…"`, atau `eval`, dan sesudah `sudo` atau `env`. Ini pagar pengaman, bukan sandbox: variabel (`$CMD`), file skrip, atau program lain tetap dapat menjalankan perintah itu (lihat Batasan). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Tangkapan layar: Perintah yang diblokir"></a> |
74
77
  | **Papan tugas** | <a id="feature-taskboard"></a>Bilah samping kiri → **Papan tugas**, atau tekan `Cmd+Shift+K` (`Ctrl+Shift+K` di Windows dan Linux) di mana saja dalam dsh. Papan kanban obrolan dsh Anda dengan status langsung yang sama seperti di bilah samping: obrolan yang menunggu persetujuan, jawaban, atau tinjauan rencana Anda ada di **Ditinjau** dengan titik oranye, obrolan yang berjalan ada di **Sedang dikerjakan**, dan obrolan yang sudah selesai dan belum Anda buka ada di **Selesai** (hijau). Saat Anda membuka obrolan, kartunya keluar dari **Selesai** dengan sendirinya; klik **Baru selesai (N)** di bawah kartu hijau untuk melihat obrolan selesai yang sudah Anda baca (10 terbaru, lalu **Tampilkan N yang lebih lama**; terbuka atau tertutup disimpan di perangkat ini). Obrolan yang selesai saat terbuka di belakang papan (**Tugas baru**) tetap hijau sampai Anda membukanya. Klik nama proyek di bagian atas papan untuk membuka daftar proyek, lalu pilih proyek atau **Semua proyek**; folder branch per obrolan dihitung sebagai proyeknya. Daftar tertutup setelah Anda memilih, dengan `Esc`, atau dengan klik di luar daftar. Ketik di **Cari proyek** di bagian atas daftar untuk menemukan proyek berdasarkan namanya (huruf besar/kecil dan aksen tidak berpengaruh; `Esc` mengosongkan kotak), tekan `Enter` untuk memilih hasil pertama, dan klik **Aktif dalam 2 jam terakhir** untuk hanya menampilkan proyek dengan obrolan yang menunggu, berjalan, selesai tetapi belum dilihat, atau berubah dalam 2 jam terakhir (disimpan di perangkat ini). **Tugas baru** (atau `n`) membuka obrolan baru milik dsh sendiri di proyek yang ditampilkan papan (dengan **Semua proyek**, proyek yang dipilih Sesi Baru dsh), jadi Anda bisa menambahkan file, memakai perintah, dan memilih model seperti di obrolan mana pun. Saat pesan pertama Anda terkirim, papan kembali dengan sendirinya. Sampai saat itu, obrolan menunggu di bagian paling atas **Sedang dikerjakan** sebagai **Tugas baru**: klik obrolan itu untuk menulis pesan pertama. Proyek yang punya obrolan yang menunggu Anda memiliki titik oranye di daftar proyek (nama proyek di bagian atas juga memilikinya selama ada obrolan yang menunggu). dsh memberi nama obrolan, dan model obrolan menulis hingga 3 label dari pesan itu. Klik kartu untuk membuka obrolannya. Klik kartu oranye (atau **Jawab** di kartu itu) untuk menjawabnya di papan; panelnya punya **Buka obrolan** untuk seluruh obrolan: **Tolak** atau **Izinkan sekali**, **Setujui** atau **Minta perubahan** untuk rencana, atau pilihan dan teks Anda sendiri untuk pertanyaan. Klik **×** di kartu yang selesai untuk mengeluarkannya dari papan, atau buka **Baru selesai** lalu klik **Bersihkan semua** di bagian atas **Selesai** untuk mengeluarkan kartu-kartu itu dari papan: lebih dulu ditampilkan berapa kartu dari proyek mana yang keluar, dan kartu yang belum dibaca (hijau) tetap ada. Selama 8 detik setelahnya, **Urungkan** mengembalikan kartu-kartu itu; **Dikeluarkan (N)** di bawah **Selesai** menampilkan daftar kartu yang ada di luar papan, dan **Kembalikan** menampilkan satu kartu lagi di **Selesai**. Tidak ada obrolan yang dihapus: obrolan tetap ada di bilah samping dsh, papan mengingat hal ini setelah dimulai ulang (Tether menampilkan papan yang sama), dan obrolan yang berjalan lagi kembali ke papan. Arahkan penunjuk ke kartu di **Sedang dikerjakan** (atau pindahkan fokus keyboard ke kartu itu) untuk melihat progresnya: berapa lama obrolan berjalan, langkah dari daftar tugasnya, alat yang sedang berjalan, dan baris terakhir agen. Di Pengaturan → Composer Plus → Papan tugas, **Progres saat kursor di atas** memilih **Cepat (tanpa AI)** (default: hanya membaca obrolan) atau **Ringkasan AI** (satu panggilan singkat ke model obrolan juga menulis satu atau dua kalimat). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Tangkapan layar: Papan tugas"></a> |
78
+ | **Asisten** | <a id="feature-assistant"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Lalu klik **Asisten** di bilah samping kiri (tepat di bawah **Papan tugas**): fitur ini membuka satu obrolan tetap yang Anda pakai sebagai asisten pribadi, seperti obrolan ChatGPT atau Grok. Klik pertama membuat folder `~/Assistant`, menambahkannya sebagai proyek “Assistant”, dan memulai obrolan dengan mode izin workspace-write dan model default dsh; setiap klik berikutnya membuka obrolan yang sama (obrolan yang diarsipkan kembali, obrolan yang dihapus dibuat lagi). Minta asisten mengingatkan Anda (“ingatkan saya minum air dalam 2 menit”): asisten memakai tugas terjadwal dsh, jadi pengingat menjalankan obrolan pada waktu itu, dan Tether mengirim notifikasi “Turn finished” saat Koneksi seluler aktif. Minta asisten mencari di web, atau tanyakan tentang obrolan Anda yang lain: asisten dapat menampilkan daftar obrolan semua proyek (berjalan, menunggu Anda, atau diam) dan membaca pesan terbaru dari satu obrolan. Asisten juga dapat mengirim pesan ke obrolan, memulai obrolan baru di proyek, menghentikan obrolan yang berjalan, atau mengarsipkan obrolan: masing-masing dari empat tindakan ini lebih dulu menampilkan kartu persetujuan dsh (juga di Tether), dan tidak ada yang terjadi sampai Anda mengklik **Izinkan sekali**. Asisten tidak punya alat hapus. Hanya obrolan ini yang memiliki alat-alat ini dan instruksi singkatnya; teks yang dibacanya di halaman web atau obrolan lain dihitung sebagai data, bukan perintah. Simpan profil Anda di memori proyek ini (**Memori proyek**, topik “profil”) daripada menyampaikannya setiap kali. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Tangkapan layar: Asisten"></a> |
75
79
  | **Memori proyek** | <a id="feature-projectmemory"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Setiap folder proyek mendapat memorinya sendiri, yang dibaca oleh obrolan berikutnya di proyek itu, seperti DS Bot menyimpan satu memori untuk setiap Bot. Setelah setiap giliran selesai, satu panggilan ke model obrolan membaca pesan baru (bukan yang ditarik oleh putar balik), menyimpan preferensi, keputusan, dan fakta Anda yang bertahan lama sebagai catatan singkat, serta mengubah atau menghapus catatan lama. Agen juga dapat menyimpan, menghapus, dan mencari catatan sendiri (`memory_remember`, `memory_forget`, `memory_recall`). Catatan juga bisa global: setiap proyek membacanya. Obrolan baru mendapat catatan di prompt sistemnya; catatan yang disimpan kemudian muncul mulai obrolan berikutnya. File berupa Markdown di folder home dsh (`storages/dsh-composer-plus/memory/`), tidak pernah di folder proyek. **Buka memori** di baris yang sama menampilkan semua catatan tersimpan, dikelompokkan per proyek (dan memori global), dengan saringan. Tulis dengan kata-kata Anda apa yang diubah (misalnya "saya beralih dari yarn ke pnpm"), lalu **Pratinjau perubahan**: model default dsh mengusulkan perubahan, dan hanya **Terapkan** yang menyimpannya. Di Tether: menu judul obrolan → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Tangkapan layar: Memori proyek"></a> |
76
80
  | **Riwayat versi memori** | <a id="feature-memoryhistory"></a>Aktif secara default selama **Memori proyek** aktif. Sebelum setiap penyimpanan memori (agen, tinjauan setelah giliran, **Buka memori**), salinan catatan seperti sebelumnya disimpan. Di **Buka memori**, pilih proyek atau **Memori global**, lalu **Riwayat**: versi menurut tanggal dan siapa yang mengubah memori setelah setiap versi. Pilih versi untuk melihat sebagai diff apa yang diubah pemulihan, lalu **Pulihkan**. Catatan sebelum pemulihan juga disimpan, jadi Anda bisa membatalkannya. 50 versi terbaru dari setiap memori tetap ada. Di Tether: menu judul chat → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Tangkapan layar: Riwayat versi memori"></a> |
77
81
  | **Ekspor memori ke AGENTS.md** | <a id="feature-memoryexport"></a>Di **Buka memori**, pilih proyek, lalu **Ekspor ke AGENTS.md**: catatan proyek itu masuk ke bagian bertanda di `AGENTS.md` di foldernya, sehingga Anda bisa meng-commit-nya dan membagikannya dengan tim serta alat agen lain. Anda melihat perubahannya sebagai diff dulu; hanya **Tulis AGENTS.md** yang menyimpannya. Ekspor berikutnya hanya mengganti bagian itu. Memori global, sumber, dan tanggal tidak ikut. Di Tether: menu judul chat → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Tangkapan layar: Ekspor memori ke AGENTS.md"></a> |
@@ -84,6 +88,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
84
88
  | **Tolak dengan catatan** | <a id="feature-rejectnote"></a>Kartu persetujuan menampilkan **Tolak dengan catatan…** di samping **Tolak**. Klik, tulis alasannya atau apa yang harus dilakukan sebagai gantinya, lalu klik **Tolak** (atau tekan `Enter`; `Shift+Enter` menambah baris, `Esc` menutup kolom). Catatan dikirim ke agen lebih dulu, sebagai pesan ke giliran yang menunggu, lalu permintaan ditolak: model membaca penolakan dan catatan Anda di giliran yang sama, tanpa pesan tambahan dari Anda. Jika catatan tidak dapat dikirim, tidak ada yang ditolak dan kolom tetap terbuka. Di Tether: lembar persetujuan → Reject with note. | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="Tangkapan layar: Tolak dengan catatan"></a> |
85
89
  | **Input rahasia** | <a id="feature-secretinput"></a>Agen mendapat alat `request_secret`. Saat memerlukan kata sandi, token, atau kunci API, agen memintanya dengan alat ini, bukan di obrolan: sebuah kartu muncul di baris alat dengan nama, alasan, kolom kata sandi, **Simpan**, dan **Tolak**. **Simpan** menulis nilai ke file di Mac ini yang hanya dapat Anda baca, dan agen hanya menerima path file itu, yang dipakai sebagai input perintah (misalnya `"$(cat <path>)"`). Jika hasil alat berikutnya menampilkan nilai itu, `[secret]` menggantikannya sebelum model melihatnya. File dihapus saat giliran berakhir. **Tolak** memberi tahu agen bahwa Anda tidak memberikannya. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghapus alat itu. Di Tether: bilah "Secret: …" di atas kolom ketik → Enter. | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="Tangkapan layar: Input rahasia"></a> |
86
90
  | **Kutip dalam balasan** | <a id="feature-quotereply"></a>Pilih sebagian jawaban: tombol **Kutip** muncul di atas pilihan. Klik tombol itu: bagian tersebut masuk ke kolom ketik di posisi kursor sebagai kutipan Markdown (`> …`), dengan satu baris kosong setelahnya, dan kolom ketik mendapat fokus sehingga Anda menulis balasan di bawahnya. Hanya teks jawaban yang dihitung, bukan proses berpikir, baris alat, atau pesan Anda sendiri. Satu kutipan paling banyak 2.000 karakter. `Cmd+Z` (`Ctrl+Z`) menghapusnya. Di Tether: tekan lama sebuah jawaban → Quote (seluruh jawaban). | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="Tangkapan layar: Kutip dalam balasan"></a> |
91
+ | **Kutip dari pratinjau file** | <a id="feature-previewquote"></a>Buka file di bilah samping kanan (**File ruang kerja**, atau file yang dibuka obrolan) lalu pilih baris di dalamnya: tombol **Kutip** muncul di atas pilihan. Klik tombol itu: path file, nomor baris, dan baris-baris itu masuk ke kolom ketik di posisi kursor, dan kolom ketik mendapat fokus, sehingga agen tahu bagian mana yang Anda maksud. File kode dan teks memberi `src/login.js:2-3` dan baris-baris itu sebagai blok kode; file Markdown dan PDF memberi path (PDF juga halamannya, `docs/spec.pdf#page=3`) dan kutipan `> …`. Path di dalam folder obrolan ditulis relatif. Paling banyak 2.000 karakter. `Cmd+Z` (`Ctrl+Z`) menghapusnya. Tidak ada di Tether. | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="Tangkapan layar: Kutip dari pratinjau file"></a> |
87
92
  | **Obrolan samping** | <a id="feature-sidechat"></a>Ketik pertanyaan samping di kolom ketik dan klik tombol gelembung percakapan (**Tanya di obrolan samping**): salinan obrolan terbuka dan menjawabnya dalam mode hanya baca dsh, sementara obrolan terus bekerja. Salinan mengetahui obrolan sampai saat ini, kecuali pesan yang masih menunggu di antrean, dan memakai modelnya. Bilah di atas kolom ketiknya memiliki **Bawa kembali**: obrolan terbuka dan kolom ketiknya menerima pertanyaan Anda (sebagai kutipan `> `) dan jawabannya. **Kembali ke obrolan** hanya membuka obrolan. Obrolan samping tetap di bilah samping sebagai "↳ <pertanyaan>"; arsipkan di sana. Di Tether: menu judul obrolan → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="Tangkapan layar: Obrolan samping"></a> |
88
93
  | **Catatan diff** | <a id="feature-diffcomments"></a>Di **Panel perubahan**, buka diff sebuah file dan klik **+** pada sebuah baris (Shift+klik baris kedua di blok yang sama untuk rentang), tulis catatan, lalu klik **Simpan catatan**. Catatan obrolan menunggu di bilah di atas panel; **Kirim ke kolom ketik** menaruhnya di posisi kursor sebagai Markdown: `path:12-14`, baris sebagai blok `diff`, dan catatan Anda. **Hapus** membuangnya. Catatan tetap di browser ini sampai Anda mengirim atau menghapusnya. Memerlukan **Panel perubahan**. Di Tether: diff sebuah file → tekan lama sebuah baris → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="Tangkapan layar: Catatan diff"></a> |
89
94
  | **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. Di **Pohon Ruang Kerja**, baris folder induk juga menampilkan obrolan dari setiap proyek di dalamnya (misalnya setiap folder branch di `.worktrees/`), juga saat folder itu diciutkan. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
@@ -95,12 +100,14 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
95
100
  | **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> |
96
101
  | **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> |
97
102
  | **Buka obrolan yang menunggu saat tidak aktif** | <a id="feature-idleswitch"></a>Saat obrolan mengajukan pertanyaan, menunggu persetujuan atau tinjauan rencana (titik oranye), atau menyelesaikan giliran yang belum Anda baca (titik hijau), dan Anda tidak menggunakan dsh selama 30 detik, dsh membuka obrolan itu. Obrolan oranye dibuka sebelum obrolan hijau. Di setiap kelompok, obrolan yang paling lama menunggu dibuka lebih dulu; obrolan berikutnya dibuka setelah 30 detik lagi tanpa penggunaan. Tombol, klik, gerakan mouse, roda gulir, atau sentuhan memulai ulang hitungan 30 detik. Teks di kolom yang sedang fokus, teks yang dipilih, atau menu atau dialog yang terbuka juga menghentikan perpindahan. Selama obrolan yang menunggu ada di layar, tidak ada yang berubah. Jika Anda meninggalkan obrolan yang menunggu tanpa menjawab, obrolan itu dapat terbuka lagi setelah 30 detik berikutnya tanpa penggunaan. Saat obrolan hijau terbuka, titiknya hilang; obrolan hijau berikutnya baru terbuka setelah Anda menggunakan dsh lagi, lalu tidak menggunakannya selama 30 detik. Ini juga berlaku saat dsh berada di latar belakang, tetapi dsh tidak muncul ke depan. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Tangkapan layar: Buka obrolan yang menunggu saat tidak aktif"></a> |
98
- | **Obrolan menunggu berikutnya** | <a id="feature-nextwaiting"></a>Tombol di kepala bilah samping menunjukkan berapa banyak obrolan lain yang menunggu Anda, dengan titik berwarna sama seperti obrolan berikutnya: oranye saat obrolan itu mengajukan pertanyaan atau menunggu persetujuan atau tinjauan rencana, hijau saat obrolan itu menyelesaikan giliran yang belum Anda baca. Klik tombol itu, atau tekan Cmd+Shift+E (Ctrl+Shift+E di Windows dan Linux), untuk membuka obrolan tersebut. Obrolan oranye didahulukan dari obrolan hijau; di setiap kelompok, obrolan yang paling lama menunggu didahulukan. Obrolan yang sedang tampil tidak dihitung. Jika tidak ada obrolan lain yang menunggu, tombol tidak tampil dan tombol pintas tidak melakukan apa pun. Anda dapat mengubah tombolnya di halaman pintasan keyboard dsh (Obrolan menunggu berikutnya). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Tangkapan layar: Obrolan menunggu berikutnya"></a> |
103
+ | **Obrolan menunggu berikutnya** | <a id="feature-nextwaiting"></a>Tombol di kepala bilah samping menunjukkan berapa banyak obrolan lain yang menunggu Anda, dengan titik berwarna sama seperti obrolan berikutnya: oranye saat obrolan itu mengajukan pertanyaan atau menunggu persetujuan atau tinjauan rencana, hijau saat obrolan itu menyelesaikan giliran yang belum Anda baca. Klik tombol itu, atau tekan Cmd+Shift+E (Ctrl+Shift+E di Windows dan Linux), untuk membuka obrolan tersebut. Klik pada tombol juga menemukan obrolan itu di bilah samping: proyek yang diciutkan terbuka, daftar bergulir ke obrolan itu, dan obrolan berkedip selama 5 detik. Obrolan oranye didahulukan dari obrolan hijau; di setiap kelompok, obrolan yang paling lama menunggu didahulukan. Obrolan yang sedang tampil tidak dihitung. Jika tidak ada obrolan lain yang menunggu, tombol tidak tampil dan tombol pintas tidak melakukan apa pun. Anda dapat mengubah tombolnya di halaman pintasan keyboard dsh (Obrolan menunggu berikutnya). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Tangkapan layar: Obrolan menunggu berikutnya"></a> |
99
104
  | **Tombol opsi** | <a id="feature-optionpicks"></a>Saat jawaban diakhiri daftar opsi (daftar bernomor 1 sampai 9 butir di bawah judul "Opsi" atau baris tebal "Opsi", juga "Langkah selanjutnya" dan kata yang sama dalam bahasa aplikasi), tombol untuk setiap opsi muncul di bawah jawaban. Klik mengirim "Option N: …" beserta seluruh opsi sebagai pesan Anda, seolah-olah Anda mengetiknya. Opsi yang bertanda "(disarankan)" ditandai. Tombol hanya muncul di bawah jawaban terbaru, saat obrolan sedang diam dan kotak pesan kosong; jawaban yang sudah dipilih dan jawaban yang ditarik oleh rollback tidak memiliki tombol. Selama tombol tampil, Prediksi pesan berikutnya tidak memberi tebakan. Pada kartu pertanyaan agen, tombol 1–9 memilih opsi itu seperti klik (tidak di kolom jawaban, dan tidak dalam 0,8 detik pertama setelah pertanyaan muncul). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Tangkapan layar: Tombol opsi"></a> |
100
105
  | **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> |
101
106
  | **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 (dengan foto: **+** di kotak pesan → Camera, Photos, atau Paste image), 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. Panel **Koneksi seluler** menampilkan iPhone yang dipasangkan beserta koneksi terakhirnya: **Remove** langsung memutus salah satunya. “Tailscale only” menolak jaringan lokal (untuk Wi-Fi bersama), dan log akses menampilkan siapa yang mencoba terhubung. Di Tether, “Settings → Privacy” mengunci aplikasi dengan Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Tangkapan layar: Koneksi seluler (iPhone)"></a> |
102
- | **Komputer jarak jauh** | <a id="feature-remotecomputers"></a>Buka dsh di Mac Anda yang lain melalui [Tailscale](https://tailscale.com) dan lanjutkan obrolannya di sini. Aktifkan di **Pengaturan → Composer Plus** pada setiap Mac (nonaktif secara default karena membuka port jaringan). Di Mac yang ingin Anda buka, aktifkan **Izinkan komputer lain membuka Mac ini**, klik **Buat tautan pemasangan**, lalu salin tautannya. Di Mac ini, pilih **Tambahkan komputer…** di pemilih komputer di sebelah kiri judul obrolan, tempel tautannya, lalu klik **Hubungkan**. Setelah itu, klik **Setujui** di Mac yang lain. Pemilih lalu menampilkan **Mac ini** dan komputer Anda: pilih salah satu, dan dsh-nya terbuka di tab Browser pada bilah samping kanan (atau di jendela browser), dengan obrolan, alat, dan file miliknya sendiri. Panel Pengaturan dapat mengganti nama dan menghapus komputer, serta menampilkan komputer yang dapat membuka Mac ini (**Hapus** langsung memutus salah satunya). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Tangkapan layar: Komputer jarak jauh"></a> |
103
- | **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 dalam bahasa **Bahasa aplikasi** (catatan ikut bersama versi baru, tanpa panggilan jaringan lain; bahasa tanpa catatan menampilkan catatan berbahasa Inggris); **Tutup** atau `Esc` menutupnya. Jendela ini juga muncul setelah pembaruan lewat Pengaturan → Plugin atau folder yang disalin, sekali untuk setiap versi baru; tidak pada pemasangan pertama. **Yang baru di versi ini** di baris pembaruan membukanya lagi. Jika di disk ada versi yang lebih baru daripada yang berjalan, baris itu meminta Anda memulai ulang dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
107
+ | **Komputer jarak jauh** | <a id="feature-remotecomputers"></a>Buka dsh di Mac Anda yang lain melalui [Tailscale](https://tailscale.com) dan gunakan di jendela dsh ini. Aktifkan di **Pengaturan → Composer Plus** pada setiap Mac (nonaktif secara default karena membuka port jaringan). Di Mac yang ingin Anda buka, aktifkan **Izinkan komputer lain membuka Mac ini**, klik **Buat tautan pemasangan**, lalu salin tautannya. Di Mac ini, pilih **Tambahkan komputer…** di pemilih komputer pada bilah samping kiri (di sebelah kanan nama merek, di atas **Sesi Baru**), tempel tautannya, ketik **Nama** (bukan nama Mac ini atau nama komputer lain), lalu klik **Hubungkan**. Setelah itu, klik **Setujui** di Mac yang lain. Pemilih lalu menampilkan **Mac ini** dan komputer Anda: pilih salah satu, dan dsh-nya memenuhi jendela ini, dengan obrolan, bilah samping, alat, dan file miliknya sendiri, sementara Mac ini tetap berjalan di belakangnya. Pemilih tetap di tempat yang sama dan menampilkan **Kembali ke Mac ini**: klik untuk kembali. Jika Anda punya lebih dari satu komputer, klik itu membuka menu, tempat Anda memilih **Mac ini** atau komputer lain. Panel Pengaturan dapat mengganti nama dan menghapus komputer, serta menampilkan komputer yang dapat membuka Mac ini (**Hapus** langsung memutus salah satunya). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Tangkapan layar: Komputer jarak jauh"></a> |
108
+ | **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 dalam bahasa **Bahasa aplikasi** (catatan ikut bersama versi baru, tanpa panggilan jaringan lain; bahasa tanpa catatan menampilkan catatan berbahasa Inggris); **Tutup** atau `Esc` menutupnya. Di bawah catatan, satu baris meminta bintang di GitHub, paling sering sekali dalam 30 hari (tanpa panggilan jaringan); setelah **Beri bintang di GitHub** atau **Jangan tanya lagi**, baris itu tidak muncul lagi. Jendela ini juga muncul setelah pembaruan lewat Pengaturan → Plugin atau folder yang disalin, sekali untuk setiap versi baru; tidak pada pemasangan pertama. **Yang baru di versi ini** di baris pembaruan membukanya lagi. Jika di disk ada versi yang lebih baru daripada yang berjalan, baris itu meminta Anda memulai ulang dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
109
+ | **Filter aktif/nonaktif** | <a id="feature-featurefilter"></a>Di samping **Cari fitur** di **Pengaturan → Composer Plus**: **Semua** menampilkan semua fitur, **Aktif** hanya fitur yang sakelarnya aktif, dan **Nonaktif** hanya fitur yang sakelarnya nonaktif. Yang menentukan adalah sakelar setiap baris, termasuk sakelar yang disimpan Host dsh (misalnya **Koneksi seluler**). Filter ini bekerja bersama pencarian: ketik sebuah kata lalu pilih **Nonaktif** untuk menemukan fitur yang Anda matikan. Baris yang Anda alihkan saat **Aktif** atau **Nonaktif** dipilih tetap ada sampai Anda memilih filter lagi, sehingga fokus tetap di sakelarnya. **Aktif** dan **Nonaktif** menyembunyikan baris **Bahasa aplikasi** dan **Pembaruan Composer Plus** (keduanya tidak punya sakelar). Pengaturan selalu terbuka dengan **Semua**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Tangkapan layar: Filter aktif/nonaktif"></a> |
110
+ | **Laporkan isu** | <a id="feature-issuereport"></a>Pengaturan → Composer Plus → **Laporkan isu…** (di bawah pengantar), atau klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Laporkan isu Composer Plus…**. Pilih jenis: **Bug**, **Permintaan fitur**, **Peningkatan**, **Terjemahan**, atau **Pertanyaan**. Jelaskan dengan kata-kata dan bahasa Anda sendiri, lalu klik **Tulis draf** (atau `Cmd/Ctrl+Enter`). Satu panggilan ke model default dsh menulis isu dalam bahasa Inggris: judul dengan awalan jenisnya (misalnya `[Bug]`) dan bagian-bagian dari jenis itu (untuk bug: What happened, Steps to reproduce, Expected, Actual), ditambah satu baris berisi versi Composer Plus, dsh, dan sistem. Baca dan edit judul serta deskripsinya; **Tulis ulang** menulis draf baru. **Buka isu** membukanya di repositori GitHub Composer Plus dengan login GitHub CLI (`gh`) Anda dan menampilkan tautannya. Isu ini publik: teks yang tampak seperti kunci atau kata sandi ditolak. Jika `gh` tidak dapat membukanya, **Buka di GitHub sebagai gantinya** membuka halaman GitHub sendiri dengan draf yang sudah terisi. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Tangkapan layar: Laporkan isu"></a> |
104
111
  | **Pencadangan** | <a id="feature-backup"></a>Pengaturan → Composer Plus → **Pencadangan** → **Cadangkan sekarang** menulis seluruh dsh home Anda (obrolan, pengaturan, plugin, MCP, skill) ke dalam satu arsip di `~/Desktop/dsh-backups`, beserta checksum. Rahasia disamarkan di dalam arsip: file kredensial, file kunci (`.pem`, `.key`), serta nilai token, secret, dan password di pengaturan yml hanya tetap ada di komputer ini, di `vault` folder tersebut. `cache/`, `dsh-runtimes/`, dan `node_modules` tidak masuk ke arsip (dsh membuatnya lagi). Setiap cadangan dalam daftar memiliki **Periksa** (membacanya sampai habis), **Untuk komputer lain** (folder untuk disalin ke komputer baru, beserta konsol penyelamat), dan **Hapus**. Arsip dsh-backup di folder yang sama juga tampil dan dapat dipakai. Untuk memulihkan, keluar dari dsh dan gunakan konsol penyelamat. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Tangkapan layar: Pencadangan"></a> |
105
112
  | **Pencadangan otomatis** | <a id="feature-autobackup"></a>Aktifkan **Pencadangan otomatis** (nonaktif secara default: setiap salinan kira-kira sebesar dsh home Anda tanpa cache-nya). Pilih seberapa sering (**Setiap**: 6 jam sampai 7 hari, default 24 jam) dan berapa banyak cadangan yang disimpan (**Simpan**: 3 sampai 14, default 7). Waktu berikutnya tampil di bawah sakelar; pencadangan yang gagal juga tampil di sana dan dicoba lagi 30 menit kemudian. Saat dsh atau Composer Plus dimulai dengan versi baru, snapshot dibuat segera setelah dimulai, sebelum versi baru lama memakai data Anda (dua yang terbaru disimpan, ditandai **Sebelum peningkatan**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Tangkapan layar: Pencadangan otomatis"></a> |
106
113
  | **Pemeriksaan log sesi** | <a id="feature-sessiondoctor"></a>**Periksa log sesi** membaca log setiap obrolan dan menampilkan log yang tidak dapat dibuka dsh (frame rusak, catatan terpotong, nomor urut salah). Bagian akhir yang tidak lengkap tidak ditampilkan: dsh memperbaikinya sendiri. **Perbaiki dari cadangan** mengembalikan salinan dari cadangan terbaru yang memiliki salinan sehat, dan menyimpan file yang rusak di sebelahnya (`.corrupt-<waktu>`). Pesan yang ditulis setelah cadangan itu tidak ada di salinan. Obrolan yang terbuka di dsh ini tidak diperbaiki di sini: keluar dari dsh dan perbaiki obrolan itu di konsol penyelamat. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Tangkapan layar: Pemeriksaan log sesi"></a> |
@@ -112,7 +119,7 @@ Tombol, tooltip, pemberitahuan, dan notifikasi mengikuti bahasa dsh yang dipilih
112
119
 
113
120
  ## Pengaturan
114
121
 
115
- 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**, **Prediksi pesan berikutnya**, dan **Pemeriksaan tujuan**, 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**), untuk **Sempurnakan prompt**, untuk **Pemeriksaan tujuan** (keduanya bawaannya **Sama dengan model obrolan**), serta **Batas waktu** untuk **Izinkan untuk obrolan ini** (bawaannya 1 jam). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
122
+ 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. Di sampingnya, **Semua**, **Aktif**, dan **Nonaktif** menampilkan semua fitur, hanya yang aktif, atau hanya yang nonaktif (matikan **Filter aktif/nonaktif** untuk menyembunyikannya). 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**, **Prediksi pesan berikutnya**, dan **Pemeriksaan tujuan**, 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**), untuk **Sempurnakan prompt**, untuk **Pemeriksaan tujuan** (keduanya bawaannya **Sama dengan model obrolan**), serta **Batas waktu** untuk **Izinkan untuk obrolan ini** (bawaannya 1 jam). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
116
123
 
117
124
  <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>
118
125
 
@@ -172,6 +179,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
172
179
  - **Pencarian isi:** tidak ada kode baru yang mencari di obrolan Anda. Plugin hanya mengaktifkan indeks pesan bawaan dsh (SQLite FTS5, `dsh-session-query-sqlite`) dan memberinya sebuah file, `$DSH_HOME/cache/composer-plus/session-search.db` (file dan folder hanya untuk pemilik). File ini berisi teks pesan pengguna dan asisten Anda, jadi sama privatnya dengan log obrolan di `$DSH_HOME/sessions`. Tidak ada yang keluar dari mesin Anda. File ini adalah salinan yang dapat dibuat ulang oleh dsh: Anda dapat menghapusnya saat dsh ditutup. Sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
173
180
  - **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`. Putar balik dengan file juga menyimpan file seperti keadaannya tepat sebelum putar balik (`refs/r/…` di penyimpanan yang sama), untuk **Ulangi**; putar balik yang sudah diulangi dicatat di `$DSH_HOME/storages/dsh-composer-plus/redone.json` (hanya untuk pemilik).
174
181
  - **Buka isu GitHub** (Ide fitur → daftar **Nanti**): hanya berjalan saat Anda mengkliknya. Bagian Host menjalankan GitHub CLI milik Anda sendiri (`gh issue create`) di folder obrolan, dengan judul dan ringkasan ide yang tersimpan (serta alasan ide itu penting); `gh` memakai login-nya sendiri dan remote GitHub folder itu, jadi isu dibuat di repositori tersebut dengan akun Anda, dan GitHub menampilkannya kepada semua orang yang dapat melihat repositori itu. dsh menghapus variabel yang namanya mirip token dari perintah yang dijalankannya; jika Anda memberi `gh` token melalui `GH_TOKEN` atau `GITHUB_TOKEN`, plugin hanya meneruskan variabel itu ke `gh`. Tautan isu disimpan bersama ide di `later.json`.
182
+ - **Laporkan isu** (Pengaturan → Composer Plus → **Laporkan isu…**, atau menu **…** obrolan → **Laporkan isu Composer Plus…**): tidak ada yang berjalan sampai Anda mengklik. **Tulis draf** hanya mengirim jenis dan teks yang Anda ketik (bukan obrolan, bukan proyek) ke model default dsh, dalam satu panggilan. Bagian Host menambahkan satu baris berisi versi Composer Plus, dsh, dan sistem operasi, serta mengganti jalur folder home Anda dengan `~`. **Buka isu** menjalankan GitHub CLI milik Anda sendiri (`gh issue create --repo furkancak1r/dsh-composer-plus`) dengan login `gh` Anda, jadi isu ini publik dan menampilkan akun GitHub Anda. Teks yang tampak seperti kunci, token, atau kata sandi ditolak dan tidak keluar dari Mac Anda.
175
183
  - **Obrolan yang mengubah file ini** (Perubahan, menu "…" sebuah file): bagian Host membaca log obrolan yang foldernya ada di repositori yang sama, sebagaimana dsh menyimpannya, lalu mengembalikan judul setiap obrolan, waktunya, dan baris pertama permintaannya; bagian Host tidak pernah membuka file itu sendiri.
176
184
  - **Branch Git di baris obrolan:** bagian Host menjalankan `git branch --show-current` (hanya baca) di folder obrolan saat giliran dimulai dan saat berakhir, dan hanya menyimpan ID obrolan, nama branch, dan waktunya di `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` (file hanya untuk pemilik, 2000 obrolan terbaru). Sakelarnya ada di `branches.json` di sebelahnya.
177
185
  - **Cari di obrolan** hanya berjalan di halaman: fitur ini membaca teks yang ditampilkan halaman dan tidak mengirim apa pun.
@@ -180,9 +188,10 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
180
188
  - **Izinkan untuk obrolan ini:** izin disimpan beserta waktu pemberiannya di `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (izin akses hanya untuk pemilik). Satu izin berlaku untuk satu alat tertentu di satu obrolan, sampai batas waktu berakhir (1 jam secara default). Jika alat itu dapat menulis, izin itu juga mencakup penulisan apa pun. Cabut izin dari chip di header.
181
189
  - Tinjauan otomatis tetap berjalan pada setiap panggilan; tinjauan yang gagal tidak pernah diizinkan secara otomatis.
182
190
  - **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. "Tailscale only" menolak setiap koneksi dari jaringan lokal, termasuk koneksi yang sudah terbuka. Log akses menyimpan 200 percobaan koneksi terbaru (waktu, alamat IP, nama perangkat, diizinkan atau ditolak, dan alasannya) di `access.json`; log ini tidak pernah menyimpan token atau kode pemasangan. Data: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (file hanya untuk pemilik). Detail: [tether/README.md](tether/README.md).
183
- - **Komputer jarak jauh:** nonaktif sampai Anda mengaktifkannya di setiap Mac. **Izinkan komputer lain membuka Mac ini** membuka port HTTPS kedua (19392) hanya di alamat Tailscale Mac ini (tidak di Wi-Fi, dan tidak diumumkan dengan Bonjour). Mac lain memerlukan tautan pemasangan sekali pakai (berlaku 5 menit), sertifikat yang cocok (disematkan), dan klik **Setujui** dari Anda. Mac ini hanya menyimpan hash token Mac itu. Komputer yang dipasangkan mendapat kendali penuh atas dsh di Mac ini, seolah-olah Anda memakainya di sini: obrolan, model, alat, file, dan terminalnya. Hapus komputer itu di panel Pengaturan, dan koneksinya langsung ditutup. Mac yang membuka Mac lain menyimpan token komputer itu di `$DSH_HOME/storages/dsh-composer-plus/computers.json` (hanya untuk pemilik). Mac itu membuka relay di `127.0.0.1` untuk setiap komputer yang Anda pilih. Halaman mendapat tautan sekali pakai (berlaku 60 detik), dan relay hanya menerima halamannya sendiri (alamatnya sendiri, tidak ada situs lain). Halaman yang dibuka oleh Mac lain tidak menampilkan pemilih komputer dan tidak dapat mengubah komputer Mac ini.
191
+ - **Komputer jarak jauh:** nonaktif sampai Anda mengaktifkannya di setiap Mac. **Izinkan komputer lain membuka Mac ini** membuka port HTTPS kedua (19392) hanya di alamat Tailscale Mac ini (tidak di Wi-Fi, dan tidak diumumkan dengan Bonjour). Mac lain memerlukan tautan pemasangan sekali pakai (berlaku 5 menit), sertifikat yang cocok (disematkan), dan klik **Setujui** dari Anda. Mac ini hanya menyimpan hash token Mac itu. Komputer yang dipasangkan mendapat kendali penuh atas dsh di Mac ini, seolah-olah Anda memakainya di sini: obrolan, model, alat, file, dan terminalnya. Hapus komputer itu di panel Pengaturan, dan koneksinya langsung ditutup. Mac yang membuka Mac lain menyimpan token komputer itu di `$DSH_HOME/storages/dsh-composer-plus/computers.json` (hanya untuk pemilik). Mac itu membuka relay di `127.0.0.1` untuk setiap komputer yang Anda pilih. Halaman mendapat tautan sekali pakai (berlaku 60 detik), dan relay hanya menerima halamannya sendiri (alamatnya sendiri, tidak ada situs lain). Halaman Mac lain di jendela ini dapat membaca nama dan status komputer Mac ini (tanpa alamat, tanpa token) dan dapat mengalihkan jendela ini di antara komputer tersebut. Halaman itu tidak dapat menambah, mengganti nama, atau menghapus komputer, dan tidak dapat mengubah pengaturan Mac ini.
184
192
  - **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.
185
- - **Penghitungan penggunaan:** sekali sehari, bagian Host meminta file kecil `active.txt` dari rilis versi yang terpasang ke GitHub (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`). GitHub menghitung permintaan ini per file, sehingga pembuat hanya melihat berapa salinan dari tiap versi yang meminta pada hari itu. Permintaan tidak berisi id, cookie, atau data tentang Anda atau obrolan Anda; GitHub melihat alamat IP Anda, sama seperti pada setiap pemeriksaan pembaruan. Hari permintaan terakhir disimpan di `$DSH_HOME/storages/dsh-composer-plus/active.json`. Salinan git dari repositori ini dan salinan yang namanya diubah tidak mengirim apa pun. Tidak ada sakelar untuk ini.
193
+ - **Paket skill bahasa Turki:** aktif secara default, dan hanya bekerja saat bahasa aplikasi adalah Türkçe: browser memberi tahu bagian Host bahasa antarmuka dsh. Lalu, paling banyak sekali sehari, bagian Host menanyakan commit terbaru `yucezerey/turkish-anti-ai-skill` dan daftar filenya ke `api.github.com`, lalu mengunduh file Markdown yang berubah dari `raw.githubusercontent.com`. GitHub melihat alamat IP Anda, seperti pada setiap pemeriksaan pembaruan; tidak ada data tentang Anda atau chat Anda yang dikirim. Hanya file `.md` biasa di folder `skills/turkish-anti-ai-skill/` yang disimpan (paling banyak 20 file dan 1 MB), dan setiap file harus cocok dengan id-nya di daftar file GitHub. Salinannya ada di `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>` (hanya pemilik) dan masuk ke daftar skill dsh; tidak ada skrip paket yang dijalankan. Sakelar dan bahasa terakhir yang dilaporkan ada di `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json`. Mematikannya menghapus skill dan salinannya.
194
+ - **Penghitungan penggunaan:** bagian Host meminta dua file kecil dari rilis versi yang terpasang ke GitHub (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`): `active.txt` sekali sehari, dan `installed.txt` hanya sekali untuk setiap dsh home. GitHub menghitung permintaan ini per file, sehingga pembuat hanya melihat berapa salinan dari tiap versi yang meminta `active.txt` pada hari itu, dan berapa salinan yang meminta `installed.txt` secara total (jumlah salinan). Permintaan tidak berisi id, cookie, atau data tentang Anda atau obrolan Anda; GitHub melihat alamat IP Anda, sama seperti pada setiap pemeriksaan pembaruan. Hari permintaan `active.txt` terakhir disimpan di `$DSH_HOME/storages/dsh-composer-plus/active.json`, dan tanda bahwa `installed.txt` sudah dihitung disimpan di `$DSH_HOME/storages/dsh-composer-plus/installed.json`. Salinan git dari repositori ini dan salinan yang namanya diubah tidak mengirim apa pun. Tidak ada sakelar untuk ini.
186
195
  - **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).
187
196
  - **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).
188
197
  - **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).
@@ -190,6 +199,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
190
199
  - **Lanjutkan di obrolan baru:** tidak ada yang berjalan sampai Anda mengkliknya. Lalu bagian Host mengirim obrolan (seperti yang dibaca Pemeriksaan tujuan: tanpa penalaran, tanpa langkah yang ditarik oleh putar balik) ke model obrolan itu sendiri dan menampilkan catatan serah terima; hanya **Mulai obrolan baru** yang membuat obrolan baru. Tidak ada yang ditulis ke proyek.
191
200
  - **Rincian konteks:** bagian Host hanya membaca log obrolan; tanpa panggilan model, tanpa file proyek.
192
201
  - **Papan tugas:** papan menampilkan obrolan dsh sendiri dari daftar dsh sendiri di jendela ini; papan tidak menambahkan data obrolan miliknya sendiri. **Tugas baru** membuka obrolan baru milik dsh sendiri, dan Anda menulis pesan pertama di kotak pesan dsh, jadi persetujuan, sandbox, dan model obrolan berlaku seperti biasa. Bagian Host menyimpan pesan pertama obrolan itu sebagai prompt kartu dan mengirimnya (4.000 karakter pertamanya, tidak ada yang lain) ke model obrolan tersebut dalam satu permintaan lagi, tanpa alat, untuk mendapatkan hingga 3 label. Prompt, label, dan waktu mulai setiap tugas disimpan di `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (file hanya untuk pemilik, 2.000 yang terbaru), bersama ID obrolan yang Anda keluarkan dari papan dengan **×** atau **Bersihkan semua** (5.000 yang terbaru); sakelarnya ada di `board-switch.json` di sebelahnya. Tidak ada yang ditulis ke folder proyek. **Jawab** mengirim jawaban Anda ke permintaan dsh sendiri yang tertunda, sama seperti kartu milik obrolan itu sendiri. Daftar tugas lama dari versi sebelumnya (`board.json`) tetap ada di disk seperti semula dan tidak dibaca. **Progres saat kursor di atas** membaca log obrolan di Mac ini. Dengan **Cepat (tanpa AI)** (default), tidak ada yang dikirim. Dengan **Ringkasan AI**, selama kotak progres kartu yang sedang berjalan tampil (atau selama papan Tether terbuka, untuk paling banyak 8 kartu yang berjalan), bagian Host mengirim bagian terbaru obrolan itu (paling banyak sekitar 6.000 karakter: pesan Anda, balasan teks agen, panggilan alatnya dan akhir hasilnya; tanpa penalaran dan tanpa pesan yang ditarik oleh putar balik) ke model obrolan itu, sebagai satu permintaan tanpa alat. Bagian Host mengirim lagi hanya setelah obrolan berlanjut, paling sering sekali setiap 20 detik per obrolan. Catatan itu hanya disimpan di memori; pengaturannya ada di `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (file hanya untuk pemilik).
202
+ - **Asisten:** obrolan asisten adalah obrolan dsh biasa di `~/Assistant`; panggilan modelnya dikirim ke model default dsh seperti di obrolan mana pun. Alat-alatnya membaca log obrolan Anda yang lain di Mac ini (judul, proyek, status, dan dengan chat_read pesan terbarunya) dan memberikannya ke model itu hanya saat model memanggil alat. Mengirim pesan ke obrolan, memulai, menghentikan, dan mengarsipkan obrolan masing-masing menunggu persetujuan Anda. ID obrolan disimpan di `$DSH_HOME/storages/dsh-composer-plus/assistant.json` dan sakelarnya di `assistant-switch.json` (file hanya untuk pemilik). Pengingat dan otomatisasi adalah tugas terjadwal milik dsh sendiri. Tidak ada yang keluar dari Mac ini kecuali permintaan model dan pencarian web yang dibuat obrolan itu.
193
203
  - **File yang dilindungi:** daftar dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca path dari setiap panggilan alat file (dan path aslinya), tidak pernah membaca file itu.
194
204
  - **Perintah yang diblokir:** aturan dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca teks perintah dari setiap panggilan `bash` dan `pwsh`; pemeriksaan tidak menjalankan apa pun dan tidak mengirim apa pun.
195
205
  - **Input rahasia:** nilai dikirim dari kartu (atau dari Tether, lewat gateway yang tidak mencatat isi permintaan) ke Host hanya dalam permintaan jawaban. Host menulisnya ke `$DSH_HOME/storages/dsh-composer-plus/secrets/<nama acak>` (folder 0700, file 0600); tidak ada yang masuk ke proyek, log obrolan, atau hasil alat. Host menyimpan nilai di memori untuk menggantinya dengan `[secret]` di hasil alat berikutnya dalam obrolan itu. File dan salinan itu dihapus saat giliran obrolan berakhir dan saat dsh dimulai. Sakelarnya ada di `secrets.json` di sebelahnya. Perintah yang dijalankan agen dengan file itu dapat mengirim nilai ke tempat yang dituju perintah itu: itulah tujuannya.
@@ -212,10 +222,11 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
212
222
  - **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).
213
223
  - **Antrean kosong setelah mulai ulang:** dsh sendiri mengosongkan antrean saat ditutup. Lanjutkan setelah mulai ulang hanya mengembalikannya di obrolan yang dilanjutkan; di obrolan lain, kirim lagi pesannya. Pesan yang Anda hapus tepat sebelum dsh ditutup bisa kembali: hapus lagi.
214
224
  - **Buka isu GitHub menampilkan "gh could not open the issue":** pesan itu adalah baris pertama dari `gh` sendiri. Jalankan `gh auth status` di terminal dan login dengan `gh auth login`; folder obrolan harus memiliki remote GitHub (`git remote -v`). "not installed or not on the PATH of dsh" berarti dsh tidak menemukan `gh`: pasang alat itu, atau mulai dsh dari terminal tempat `gh` berfungsi.
225
+ - **Laporkan isu menampilkan "gh could not open the issue":** pesan itu adalah baris pertama dari `gh` sendiri. Jalankan `gh auth status` di terminal dan login dengan `gh auth login`. Atau klik **Buka di GitHub sebagai gantinya**: halaman isu baru milik GitHub sendiri terbuka dengan draf yang sudah terisi, dan Anda mengirimkannya di sana.
215
226
  - **Tidak ada label branch di baris obrolan:** bilah samping tidak dalam tampilan “Dalam satu daftar” (dalam “Ruang Kerja” dan “Pohon Ruang Kerja”, tidak ada baris obrolan yang menampilkan label), obrolan itu belum memiliki giliran sejak Anda memasang versi ini, foldernya bukan repositori git, atau **Branch Git di baris obrolan** nonaktif. Setelah pembaruan, mulai ulang dsh (bagian Host mencatat branch).
216
227
  - **Pemeriksaan tujuan menyebut pengujian keluar dengan kode 127 atau "not found":** dsh yang dimulai dari Finder atau Dock dapat memiliki PATH yang lebih pendek daripada terminal Anda, sehingga tidak menemukan `npm`, `pnpm`, atau `cargo`. Mulai dsh dari terminal, atau atur perintah pengujian Anda sendiri dengan jalur lengkap di **Pemeriksaan tujuan** → **Edit**. **Jalankan sekarang** langsung menampilkan hasilnya.
217
228
  - **Tujuan tidak ditutup dan agen terus bekerja:** **Pemeriksaan tujuan** menemukan pengujian yang gagal atau pekerjaan yang belum selesai; baris di bawah tujuan menampilkan alasannya (arahkan penunjuk ke hasil untuk melihat detailnya). Perbaiki penyebabnya atau perintah pengujiannya, atau selesaikan tujuan sendiri dengan `/goal` atau bilah tujuan (penyelesaian itu tidak diperiksa).
218
- - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.22.0`), lihat catatan pemasangan di atas.
229
+ - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.24.0`), lihat catatan pemasangan di atas.
219
230
  - **Cadangkan sekarang menyatakan "Tindakan pencadangan lain sedang berjalan":** ada tindakan yang berjalan di jendela dsh lain atau di konsol penyelamat (keduanya berbagi file kunci, `.composer-plus.lock`, di folder cadangan). Tunggu sampai tindakan itu selesai. Jika tidak ada tindakan yang berjalan, kunci milik proses yang sudah ditutup diambil alih pada klik berikutnya.
220
231
  - **Konsol penyelamat menyatakan "dsh is running":** keluar dari dsh terlebih dahulu. Jika dsh memang sudah tertutup, file yang disebut dalam pesan itu tersisa dari crash: hapus file itu dan coba lagi.
221
232
  - **Setelah pemulihan, dsh tidak mau dimulai atau ada plugin yang hilang:** paket plugin sebuah profil harus dipasang lagi. Konsol penyelamat menawarkannya setelah pemulihan; atau jalankan `pnpm install` di setiap folder di bawah `$DSH_HOME/profiles/` yang dicantumkannya. Rahasia yang tidak ada di vault (komputer lain) harus dimasukkan lagi: konsol mencantumkannya.
@@ -237,9 +248,11 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
237
248
  - 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.
238
249
  - **Yang baru di Composer Plus N** menampilkan catatan dalam bahasa **Bahasa aplikasi**. Bahasa antarmuka dengan wilayah lain mendapat catatan bahasa dasarnya (`en-GB` mendapat catatan bahasa Inggris, `zh-TW` catatan bahasa Tionghoa dari `zh`). Bahasa tanpa catatan (bahasa yang ditambahkan paket bahasa lain, atau `pt-PT`, yang bukan `pt-BR`) menampilkan catatan bahasa Inggris. Catatan ikut bersama versi baru. Jika salinan yang berjalan tidak memiliki berkas catatan yang dapat dibaca (`release-notes.json`), jendela menampilkan catatan bahasa Inggris dari GitHub.
239
250
  - Versi yang terpasang saat dsh berjalan (pembaruan lewat Pengaturan → Plugin atau folder yang disalin) baru dimuat setelah dsh dimulai ulang: sampai saat itu, **Pembaruan Composer Plus** menampilkan versi yang berjalan dan meminta mulai ulang. Jendela **Yang baru di Composer Plus N** versi itu muncul sekali pada awal pertama versi tersebut. Awal pertama setelah plugin ini dipasang tidak menampilkan jendela; **Yang baru di versi ini** membuka catatan versi yang berjalan.
251
+ - Baris bintang GitHub di bawah catatan tidak dapat mengetahui apakah Anda sudah memberi bintang pada repositori: plugin tidak membuat panggilan jaringan untuk itu. Setiap browser (dan aplikasi desktop) menyimpan catatannya sendiri, jadi baris itu bisa muncul sekali lagi di browser lain.
240
252
  - **Tolak dengan catatan** mengirim catatan sebagai pesan ke giliran yang menunggu, lalu menolak permintaan; dsh menampilkan catatan itu di obrolan sebagai pesan Anda. Selama kolom catatan terbuka, kartu hanya menampilkan **Batal** dan **Tolak**, jadi satu klik tidak dapat mengizinkan permintaan secara tidak sengaja; `Esc` atau **Batal** mengembalikan tombol-tombol dsh. Catatan kosong tidak mengirim apa pun (gunakan **Tolak** milik dsh sendiri). Jika penolakan gagal setelah catatan terkirim (misalnya, permintaan itu sementara itu sudah dijawab di tempat lain), catatan tetap ada di obrolan dan model membacanya di langkah berikutnya. Tombol ini masuk ke markup kartu persetujuan dsh (`data-approval-key`), karena dsh tidak punya slot untuk tindakan kartu; jika pembaruan dsh mengubah markup itu, tombol tidak tampil dan **Tolak** milik dsh sendiri tetap berfungsi seperti sebelumnya. Satu catatan paling banyak berisi 4.000 karakter.
241
253
  - **Input rahasia** hanya menyembunyikan teks persis dari sebuah nilai: `[secret]` menggantikannya di hasil alat berikutnya dalam obrolan yang sama. Agen tetap dapat membaca file dengan perintah shell dan mencetak nilai dalam bentuk lain (base64, sebagian, dengan spasi), dan bentuk itu sampai ke model. Alat file milik agen (read, grep, write, edit) tidak dapat membuka folder rahasia. Jika nilai itu juga kata yang umum, hasil lain dalam obrolan itu juga menampilkan `[secret]`. File tetap ada sampai giliran berakhir; jika dsh tertutup selama giliran, start berikutnya menghapusnya. Satu obrolan hanya dapat punya satu permintaan terbuka pada satu waktu. Alat ini menambahkan sekitar 870 karakter (sekitar 220 token, perkiraan) ke setiap permintaan model: nonaktifkan jika tidak dipakai.
242
254
  - **Kutip dalam balasan** mengutip teks seperti yang ditampilkan halaman: blok kode, tabel, atau daftar menjadi baris biasa tanpa tanda Markdown. Pilihan yang mulai di satu jawaban dan berakhir di jawaban lain, atau yang menyentuh proses berpikir, baris alat, atau pesan Anda sendiri, tidak menampilkan tombol: pilih di dalam satu jawaban saja. Tombol menemukan jawaban lewat struktur obrolan dsh, karena dsh tidak punya slot untuk pilihan teks; jika pembaruan dsh mengubah struktur itu, tombol tidak muncul. Jika kutipan berada di akhir kolom, satu baris kosong lagi ditambahkan agar baris berikutnya yang Anda ketik mulai di bawahnya; dsh menghapus baris kosong di akhir saat mengirim.
255
+ - **Kutip dari pratinjau file** membaca pratinjau file milik dsh sendiri: nomor baris berasal dari baris-baris pratinjau itu, jadi nomornya tepat untuk file kode dan teks. File Markdown tampil sebagai halaman berformat, jadi kutipannya berisi teks tanpa tanda Markdown dan tanpa nomor baris; kutipan PDF berisi halaman, bukan baris. Pilihan di header path, di penampil lain (spreadsheet, file Office, gambar), atau yang melintasi dua file terbuka tidak menampilkan tombol, begitu juga bilah samping kanan dalam layar penuh (saat itu kolom ketik tidak ada di layar). Tombol menemukan pratinjau lewat markup dsh, karena dsh tidak punya slot untuk pilihan di sana; jika pembaruan dsh mengubah markup itu, tombol tidak muncul. Hanya teks yang dipilih yang masuk ke kolom ketik: jika file berubah kemudian, kutipan tidak berubah.
243
256
  - **Obrolan samping** hanya baca berkat mode hanya baca milik dsh sendiri: alat file tidak dapat menulis, dan perintah shell berjalan di sandbox dsh tanpa izin tulis (atau tidak berjalan saat sandbox tidak dapat dimulai). Agen tetap dapat meminta akses lebih dengan kartu persetujuan dsh, dan panggilan jaringan (misalnya permintaan API) tetap dapat mengubah sesuatu di luar komputer. Salinan dibuat pada saat terbaru ketika tidak ada pesan yang menunggu di antrean, jadi pertanyaan yang diajukan saat pesan masih menunggu tidak melihat apa yang terjadi setelahnya. Langkah obrolan yang sedang berjalan ditutup di salinan, jadi obrolan samping tahu awal langkah itu, tetapi tidak tahu hasilnya. Obrolan samping adalah obrolan biasa: tetap di bilah samping dan dihitung dalam pemakaian model Anda; arsipkan di sana. Bawa kembali hanya mengambil pesan milik obrolan samping (paling banyak 12.000 karakter) dan hanya balasan terakhir dari setiap pertanyaan; catatan agen di antara panggilan alatnya tidak ikut. dsh tidak menyediakan slot bagi plugin untuk menampilkan obrolan di bilah samping kanan, jadi obrolan samping terbuka di tampilan utama.
244
257
  - **Catatan diff** hanya bekerja di panel perubahan, tidak di tampilan Giliran terakhir milik dsh. Rentang harus tetap dalam satu blok diff (satu bagian `@@`). Catatan disimpan di penyimpanan browser ini, jadi browser lain atau dsh di komputer lain tidak melihatnya; Tether menyimpan catatannya sendiri di memori. Catatan menyimpan baris seperti saat Anda mengklik: jika agen mengubah file kemudian, catatan tetap menampilkan baris dan nomor lama. Paling banyak 50 catatan per obrolan, 2.000 karakter per catatan, dan 40 baris per catatan (lalu baris `…`).
245
258
  - **Izinkan untuk obrolan ini** menghitung batas waktu sejak izin diberikan. Batas waktu baru langsung berlaku untuk izin yang sedang berjalan, jadi batas yang lebih pendek dapat langsung mengakhirinya. Izin dari versi 1.12 dan sebelumnya tidak memiliki waktu: setelah pembaruan, agen bertanya sekali lagi untuk alat-alat itu.
@@ -247,7 +260,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
247
260
  - **Sesuaikan kartu pertanyaan dengan jendela** hanya mengubah kartu pertanyaan dsh, bukan kartu tinjauan rencana. Fitur ini menemukan kartu melalui markup dsh (`data-question-key`, `data-question-scroll`); jika pembaruan dsh mengubah markup itu, kartu tampil seperti yang digambar dsh. Tinggi kartu mengikuti jendela, bukan chat: di chat dalam panel samping yang sempit, kartu yang tinggi masih dapat melewati bagian atas chat.
248
261
  - **Sesuaikan header chat dengan jendela** menemukan header chat dsh dari nama kelas yang dibuat dsh (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), karena dsh tidak menyediakan kait tata letak untuknya. Jika pembaruan dsh mengganti nama itu, header tampil seperti yang digambar dsh. Di kolom chat yang sangat sempit header bisa memakai dua atau tiga baris, sehingga ruang di atas pesan menjadi lebih kecil.
249
262
  - **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). Dengan kunci APNs di `apns.json` (lihat `tether/README.md`), Mac mengirim notifikasi lewat layanan push Apple, jadi notifikasi tetap datang saat Tether tertutup; Mac harus menyala dengan dsh terbuka. Tanpa kunci itu, ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang. Tether hanya mengirimnya setelah Anda mengaktifkan "Settings → Notifications → Send notifications" di Tether. Tether menyimpan opsi ini dan jam-jamnya secara terpisah untuk setiap Mac yang dipasangkan. Opsi ini nonaktif secara default di setiap Mac, dan iOS meminta izin saat Anda mengaktifkannya. Aplikasi iOS belum ada di App Store: bangun aplikasi itu dari `tether/ios` dengan Xcode. "Tailscale only" tetap memerlukan alamat Wi-Fi atau Ethernet di Mac (gateway hanya mulai jika ada alamat itu). Log akses terpisah untuk setiap Mac dan hanya menyimpan 200 percobaan terbaru; percobaan yang berulang dalam satu menit menambah hitungan satu pada baris yang sama. Kunci aplikasi Setiap notifikasi menampilkan Mac dan proyek chat (`Studio Mac · recipe-box`), judul chat, dan teksnya: Turn finished menampilkan balasan terakhir agen. Dengan kunci APNs, teks ini melewati layanan push Apple. Tether tidak menyembunyikan pratinjau notifikasi di Layar Terkunci iPhone: matikan pratinjau itu di Pengaturan iOS. 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.
250
- - **Komputer jarak jauh** memerlukan Tailscale di kedua Mac, dan Composer Plus dengan fitur ini aktif di Mac yang Anda buka. Mac itu tidak boleh dalam mode tidur, dan dsh harus berjalan di sana. Komputer lain terbuka di tab Browser pada bilah samping kanan obrolan yang ada di layar. Tab itu milik obrolan tersebut, jadi obrolan lain menampilkan bilah sampingnya sendiri. Tanpa obrolan (atau di dsh web tanpa tab Browser), komputer terbuka di jendela browser. Pemilih hanya tampil saat obrolan atau layar obrolan baru ada di area utama, tidak di Papan tugas. Fitur ini memakai port 19392 (hanya satu dsh di setiap Mac yang dapat mengizinkan komputer lain masuk). Komputer yang Anda buka di dalam halaman komputer lain tidak memiliki pemilih, jadi Anda tidak dapat membuka Mac ketiga dari sana.
263
+ - **Komputer jarak jauh** memerlukan Tailscale di kedua Mac, dan Composer Plus dengan fitur ini aktif di Mac yang Anda buka. Mac itu tidak boleh dalam mode tidur, dan dsh harus berjalan di sana. Pemilih hanya tampil saat bilah samping kiri terbuka (tidak saat bilah itu hanya menampilkan ikon). Jika halaman Mac lain tidak punya pemilih sendiri (Composer Plus di sana lebih lama dari 1.23.0), pemilih Mac ini muncul di atas halaman itu di tempat yang sama. Jika di sana ada 1.23.0, pemilih menampilkan nama Mac itu: pilih **Mac ini** di menunya untuk kembali. Setiap komputer yang Anda buka menyimpan halamannya di memori sampai Anda menonaktifkan fitur ini atau memulai ulang dsh. Di aplikasi desktop, halaman Mac lain adalah halaman tersemat: pintasan keyboard dsh sendiri (misalnya obrolan baru) tidak berfungsi di dalamnya, dan unduhan file, mikrofon, serta notifikasi juga tidak berfungsi di sana. Fitur ini memakai port 19392 (hanya satu dsh di setiap Mac yang dapat mengizinkan komputer lain masuk). Dari halaman Mac lain, pemilih hanya beralih di antara komputer Mac ini: Anda tidak dapat membuka Mac ketiga melalui Mac lain.
251
264
  - Tautan sesi berfungsi di dalam obrolan; mengkliknya tidak membuka obrolan. Tautan dari **Salin tautan pesan** membuka pesannya hanya di dsh 0.2.1 dan yang lebih baru, dan hanya dari pesan di obrolan (dsh 0.2.0 tidak punya aturan teks pengguna, jadi di sana tautan tetap disalin, tetapi tampil sebagai teks biasa). Pesan yang dikeluarkan oleh putar balik, atau yang dihapus oleh pemadatan dari riwayat yang dimuat dsh, tidak dapat ditampilkan: tautan lalu memberi tahu hal itu. Tombol 🔗 menempel ke baris pesan dsh; jika pembaruan dsh mengubah markup itu, tombol tidak tampil.
252
265
  - **Tandai semua sudah dibaca** mengubah titik belum dibaca milik dsh melalui bagian dsh yang bukan API publik (daftar `completionUnread` di status sesi dsh). Jika pembaruan dsh mengganti namanya, item ini tidak tampil. Item ini masuk ke menu "…" proyek di dsh, yang tidak punya slot untuk plugin; jika dsh mengubah menu itu, item ini juga tidak tampil.
253
266
  - **Edit pesan antrean di tempat** tidak mengubah pesan yang sementara itu mulai terkirim, dan tidak menimpa pesan yang sementara itu berubah (misalnya di Tether pada iPhone): sebuah pemberitahuan menyampaikannya. Gambar baru memerlukan model yang menerima gambar (batas gambar bawaan dsh berlaku), dan file baru harus selesai diunggah sebelum Anda dapat menyimpan. Hanya pesan antrean milik Anda sendiri yang dapat diedit: putaran tujuan atau balasan pertanyaan di antrean tidak. Setelah plugin diperbarui, hanya pengeditan teks yang langsung berfungsi: mulai ulang dsh sebelum menyimpan pesan dengan gambar atau file (bagian Host dimuat saat dsh dimulai).
@@ -255,6 +268,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
255
268
  - Peta branch di **Pohon** menebak ke mana setiap panah mengarah, karena git tidak menyimpan ke branch mana sebuah branch di-merge. Branch yang sudah di-merge menunjuk ke branch yang commit merge-nya pertama kali mengambil branch itu. Branch yang menunggu menunjuk ke branch terdekat tempat ia bermula (branch utama lebih dulu); jika dua branch bermula dari commit yang sama, peta bisa memilih yang salah. Branch yang maju dengan fast-forward tidak memiliki commit merge, jadi label **Di-merge** pada branch itu tidak membuka apa pun. Branch utama adalah branch default dari `origin`; jika tidak ada, `main` atau `master`; jika tidak ada juga, branch yang sedang terbuka. Peta membaca 20.000 commit terbaru dan menampilkan paling banyak 60 branch; pada riwayat yang lebih panjang, peta memberi tahu bahwa beberapa panah bisa salah. Branch yang di-merge dengan squash atau rebase (misalnya di GitHub) tampil sebagai **Menunggu**: git tidak menyimpan kaitan dengan commit-nya.
256
269
  - **Obrolan ini** hanya menghitung file yang ditulis oleh alat file dsh (`write`, `edit`, `str_replace_editor`). File yang diubah oleh perintah (`bash`) tidak ada di tampilan ini; file itu tampil di **Belum Di-commit**. Tanpa snapshot Putar balik giliran untuk obrolan (Putar balik giliran nonaktif, dsh-rewind-plugin terpasang, atau obrolan lebih lama dari plugin), tampilan ini membandingkan dengan commit terakhir dan memberi tahu hal itu. Putar balik giliran menyimpan 50 snapshot terbaru dari sebuah obrolan: pada obrolan yang lebih panjang, tampilan membandingkan dengan snapshot tertua yang disimpan, menyebutkan dari pesan mana, dan tidak menghitung perubahan yang lebih awal. **Sembunyikan perubahan spasi** sama dengan `git diff -w`: baris yang hanya berubah pada spasi di dalamnya juga disembunyikan.
257
270
  - **Buka isu GitHub** memerlukan GitHub CLI (`gh`) di PATH dsh dan remote GitHub di folder obrolan. Fitur ini berjalan paling lama 60 detik; jika `gh` butuh waktu lebih lama, isu bisa sudah ada di GitHub tanpa tautannya di daftar (sebelum mengklik lagi, periksa GitHub: daftar hanya membaca tautan dari proses yang selesai, jadi klik baru bisa membuka isu kedua). Folder dengan lebih dari satu remote GitHub memakai default milik `gh` sendiri (`gh repo set-default`).
271
+ - **Laporkan isu** hanya membuka isu di repositori Composer Plus (`furkancak1r/dsh-composer-plus`), bukan di proyek Anda (untuk itu, gunakan **Buka isu GitHub** di daftar **Nanti** pada Ide fitur). Fitur ini memerlukan model default di dsh untuk draf, dan GitHub CLI (`gh`) dengan login untuk membuka isu. Draf selalu dalam bahasa Inggris. Model bisa salah pada suatu detail: baca draf sebelum Anda mengklik **Buka isu**. Pembukaan berjalan paling lama 60 detik; judul dan teks yang sama lagi dalam satu jam menampilkan isu sebelumnya, bukan salinannya. **Buka di GitHub sebagai gantinya** memotong deskripsi yang sangat panjang agar tautannya tetap pendek.
258
272
  - **Obrolan yang mengubah file ini** hanya mengenal alat file dsh (`write`, `edit`, `str_replace_editor`), sama seperti **Obrolan ini**: perubahan yang dibuat oleh perintah (`bash`) tidak tercantum. Fitur ini membaca 300 obrolan terbaru dari repositori (menurut waktu pembuatannya) dan memberi tahu jika ada lebih banyak; fitur ini menampilkan paling banyak 100 baris. File yang diganti namanya tercantum dengan nama yang ditulis alat. Obrolan yang foldernya berada di luar repositori (juga melalui jalur lain ke file yang sama) tidak dihitung. Pembukaan pertama setelah dsh dimulai membaca semua log obrolan di repositori (sekitar 4 detik untuk 275 obrolan); pembukaan berikutnya hanya membaca obrolan yang berubah sejak itu.
259
273
  - **Branch Git di baris obrolan** menampilkan branch folder obrolan saat giliran terakhirnya dimulai atau berakhir, bukan branch saat ini: pergantian branch di luar giliran baru tampil setelah giliran berikutnya. Obrolan dari sebelum versi ini tidak menampilkan label sampai giliran berikutnya. Label ini berada di markup baris obrolan dsh (dsh tidak punya slot di sana); jika pembaruan dsh mengubah markup itu, label tidak tampil. Label hanya tampil dalam “Dalam satu daftar”.
260
274
  - **Branch per obrolan** dalam mode rencana: dsh mengirim `/plan <pesan>` sebagai perintah, bukan sebagai pesan, jadi Composer Plus mengambil alih pengiriman perintah itu di kotak pesan dsh (bukan API publik). Jika pembaruan dsh mengubahnya, `/plan <pesan>` dengan **Branch baru** dipilih berjalan di Obrolan baru yang terbuka sebagai perintah dsh sendiri. Jika Host tidak dapat menyalakan mode rencana di obrolan baru, folder branch tetap ada dan pesan tidak dikirim, jadi obrolan baru tidak mengubah file dalam mode default.
@@ -279,7 +293,10 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
279
293
  - **Lanjutkan di obrolan baru** mengirim obrolan (pesan, panggilan alat, dan bagian akhir setiap hasil alat, paling banyak sekitar 60.000 karakter, bagian terbaru) ke model obrolan itu sendiri. Catatan serah terima bisa melewatkan sebuah keputusan atau file: baca catatan itu sebelum Anda memulai. Obrolan baru hanya mengetahui catatan dan obrolan yang ditautkan (dsh melampirkan obrolan lama sebagai konteks hanya-baca); konteks modelnya dimulai kecil, dan obrolan lama tetap seperti apa adanya. Hanya satu catatan atau satu mulai per obrolan pada satu waktu.
280
294
  - **Rincian konteks** menampilkan perkiraan dengan aturan milik dsh sendiri (sekitar 4 karakter per token), aturan yang sama dengan cincin konteks dsh; hitungan model itu sendiri bisa berbeda. Definisi alat adalah definisi dari permintaan terbaru. Fitur ini menampilkan konteks seperti yang ada di log obrolan; giliran yang sedang berjalan muncul setelah langkah berikutnya.
281
295
  - **Langkah terencana** menghemat token hanya ketika model benar-benar merencanakan: selama aktif, setiap permintaan membawa alat `plan_next_steps` dan instruksi singkat (sekitar 500 token), juga di obrolan tempat model tidak pernah merencanakan. Sebuah syarat hanya membuktikan apa yang tertulis (misalnya: kode keluar build adalah 0), bukan bahwa pekerjaannya benar. `ok` membaca tanda hasil milik dsh sendiri (`[exit code: N]`, batas waktu, penolakan sandbox); perintah yang gagal tanpa kode keluar bukan nol dianggap lolos. Langkah berjalan satu per satu; dua langkah yang siap bersamaan kembali ke model. Pesan langkah disimpan sebagai pesan asisten dari model obrolan (dsh tidak punya tanda untuk pesan yang ditulis plugin), jadi teksnya menyebutkan bahwa Composer Plus yang menjalankannya. Tidak ada di Tether.
296
+ - **Paket skill bahasa Turki** memasang skill pihak ketiga: aturannya berasal dari repositori GitHub penulisnya, bukan dari Composer Plus, dan versi baru dipakai sejak pemeriksaan harian berikutnya tanpa kami tinjau. Pemeriksaan membuktikan bahwa file-file itu sama dengan yang didaftar GitHub untuk commit tersebut, bukan bahwa aturannya baik. Model yang memutuskan kapan memuat skill (Anda juga bisa memanggilnya dengan nama); aturannya hanya berlaku untuk teks bahasa Turki. Bagian Host memakai bahasa yang terakhir dilaporkan browser: jika dua browser memakai bahasa berbeda, yang terbaru yang berlaku. Tanpa login, GitHub mengizinkan 60 panggilan API per jam; pemeriksaan yang ditolak tetap memakai salinan yang terpasang dan menampilkan alasannya di Pengaturan.
297
+ - **Rapikan basis kode** membawa salinan tetap dari skill ini (caldoai/skills, commit f3cf477): perubahan pada aslinya hanya datang dengan versi Composer Plus yang baru. Skill ini menjalankan tujuan panjang yang dapat mengubah banyak file, dan subagen serta pemeriksaannya memakai banyak token. Di bagian proyek yang tidak punya tes, skill ini dapat mengubah perilaku tanpa terlihat: mulai di branch tersendiri dan baca diff sebelum merge. Skill dengan nama yang sama di proyek, di folder skill kustom, atau di `~/.dsh/skills` menggantikannya. Selama sakelar mati, `/untangle-codebase` dikirim ke model sebagai teks biasa.
282
298
  - **Papan tugas** menampilkan obrolan yang didaftar dsh di jendela ini: obrolan di luar proyek hanya tampil di **Semua proyek**, dan folder branch per obrolan (`<project>/.worktrees/<name>`) dihitung sebagai proyeknya. Kolom kartu adalah status langsung obrolannya, jadi kartu tidak bisa diseret: obrolan pindah ke **Selesai** saat gilirannya berakhir, juga setelah error atau dihentikan, dan kembali ke **Sedang dikerjakan** saat berjalan lagi. Titik hijau adalah titik selesai milik dsh sendiri, yang hanya disimpan dsh di jendela ini: setelah halaman dimuat ulang, obrolan yang selesai tampil tanpa titik itu. **Selesai** menampilkan 50 obrolan terbaru (**Tampilkan N yang lebih lama** menampilkan sisanya). **Cari proyek** menemukan proyek hanya berdasarkan namanya, bukan berdasarkan jalur foldernya. **Aktif dalam 2 jam terakhir** menyembunyikan proyek jika setiap obrolannya lebih lama dari 2 jam, tidak aktif, dan sudah dibaca; papan tetap menampilkan proyek yang Anda pilih. **Tugas baru** hanya mengingat obrolan baru terbaru di jendela ini: jika Anda membuka obrolan lain sebelum pesan pertama, obrolan itu tetap di bagian paling atas **Sedang dikerjakan** sebagai **Tugas baru** sampai Anda menulis di dalamnya, tetapi papan kembali dengan sendirinya hanya untuk yang terbaru. Setelah halaman dimuat ulang, obrolan baru tanpa pesan tidak ada di papan (dsh menyimpannya sebagai Sesi Baru miliknya yang kosong). Label berasal dari satu panggilan model per tugas, dari pesan pertamanya: label bisa salah, dan obrolan yang tidak Anda mulai di papan tidak punya label. Judulnya adalah judul obrolan milik dsh sendiri (layanan judul dsh, dengan model obrolan); sampai judul itu ada, kartu menampilkan baris pertama dari pesan pertama. **×** dan **Bersihkan semua** hanya mengeluarkan kartu dari papan: tidak ada obrolan yang dihapus. **Urungkan** hanya tampil selama 8 detik, di jendela ini; setelah itu, **Dikeluarkan (N)** → **Kembalikan** mengembalikan kartu, dan obrolan yang berjalan lagi kembali dengan sendirinya. **Bersihkan semua** bertanya dulu dan mengeluarkan kartu selesai yang sudah dibaca dari proyek yang ditampilkan (semua proyek dengan **Semua proyek**), termasuk kartu di balik **Tampilkan N yang lebih lama**; kartu yang belum dibaca (hijau) tetap ada. dsh menyimpan titik hijaunya hanya di jendela ini, jadi setelah halaman dimuat ulang, Bersihkan semua bisa mengeluarkan kartu yang jawabannya belum Anda baca. Daftarnya disimpan di Mac ini untuk setiap jendela dan untuk Tether; saat daftar berisi 5.000 obrolan, yang paling lama kembali. **Jawab** hanya menjawab permintaan terbaru obrolan: jika permintaan itu sudah dijawab di tempat lain (jendela lain, Tether, Tinjauan otomatis) atau obrolan menanyakan hal baru, panel memberi tahu hal itu dan tidak mengirim apa pun. Versi sebelumnya punya daftar tugas dengan komentar dan alat agen; semuanya sudah tidak ada, dan `board.json` lama tidak ditampilkan. Ide dan tampilannya berasal dari [Kanzo](https://github.com/emanuele-em/kanzo) karya emanuele-em (AGPL-3.0); Composer Plus tidak memakai kodenya. `Cmd+Shift+K` adalah pintasan dsh: di browser pada Linux, pintasan ini tidak punya tombol bawaan (atur di halaman pintasan keyboard dsh), dan ekstensi browser atau aplikasi lain bisa memakainya lebih dulu. Kartu keluar dari **Selesai** saat titik hijau dsh sendiri hilang (Anda membuka obrolannya) atau, untuk obrolan yang selesai di belakang papan saat menjadi obrolan yang terbuka, saat obrolan itu tampil tanpa panel di atasnya. Status dibaca ini hanya ada di jendela dsh ini, seperti titik dsh: setelah memuat ulang atau di jendela lain, setiap obrolan selesai dianggap sudah dibaca, jadi ada di **Baru selesai**.
299
+ - **Asisten** punya satu obrolan untuk semua jendela di Mac ini. Asisten berjalan dengan mode izin workspace-write: asisten hanya menulis file di `~/Assistant`, dan perintah di luar folder itu bertanya dulu. Jika Anda mengalihkan obrolan ke mode tanpa persetujuan (Akses penuh), dsh menolak setiap persetujuan, sehingga asisten tidak dapat mengirim pesan ke obrolan, memulai, menghentikan, atau mengarsipkan obrolan. Kartu persetujuan hanya menjaga enam alat itu: perintah shell dari asisten tetap dapat menjangkau jaringan, seperti di obrolan mana pun dengan mode itu. Di dsh 0.2.0 dan 0.2.1, alat jadwal dsh hanya melihat pengingat milik obrolan asisten itu sendiri, bukan otomatisasi obrolan lain; mulai dsh 0.2.2, alat itu menampilkan dan mengubah setiap tugas terjadwal. chats_list tidak menyertakan obrolan yang diarsipkan, obrolan kosong, obrolan subagen, dan obrolan asisten itu sendiri; “menunggu Anda” berarti ada persetujuan, pertanyaan, atau tinjauan rencana yang terbuka di obrolan yang berjalan. chat_read memberikan pesan pengguna dan balasan agen (tanpa output alat), paling banyak 50 pesan dan sekitar 24.000 karakter. chat_archive menolak obrolan yang masih berjalan atau masih punya pengingat aktif. Model tetap bisa tertipu oleh teks yang dibacanya: kartu persetujuan adalah pemeriksaan terakhir, jadi bacalah kartu itu sebelum Anda mengklik **Izinkan sekali**.
283
300
  - **Dahulukan pesan setelah Hentikan** hanya bekerja setelah Anda menghentikan obrolan (atau setelah giliran yang gagal, atau saat Anda membuka obrolan yang masih punya antrean): pesan yang Anda kirim saat sebuah giliran berjalan tetap menunggu di akhir antrean. Pesan itu hanya mendahului pesan antrean milik Anda sendiri: jika ada putaran tujuan atau balasan pertanyaan yang menunggu di antrean, urutan dsh tetap. Fitur ini membaca bagian dsh yang bukan API publik (apakah giliran yang dihentikan masih sedang berakhir); jika pembaruan dsh mengganti namanya, pesan baru dipindah ke depan setelah giliran itu selesai. Obrolan subagen tetap memakai urutan dsh.
284
301
  - **Memori proyek** milik folder pertama obrolan (folder proyek dsh): obrolan yang mengganti foldernya dengan `cd` tetap memakai memori proyek pertamanya, dan folder yang sama yang dibuka lewat path lain ke file yang sama memakai memori yang sama. Obrolan membekukan bagian memorinya saat dimulai, jadi catatan yang disimpan kemudian muncul mulai obrolan berikutnya (`memory_recall` langsung menemukannya). Tinjauan hanya menyimpan apa yang diputuskan model: tinjauan bisa melewatkan fakta atau menyimpan yang salah; periksa di **Buka memori** dan ubah di sana, atau edit file-nya secara manual saat dsh tertutup. **Buka memori** mengirim catatan proyek yang dipilih dan catatan global (semua proyek saat Anda memilih Semua catatan; paling banyak sekitar 60.000 karakter, sisanya hanya dihitung dan tidak dapat diubah dalam permintaan itu) serta teks Anda ke model default dsh, bukan ke model obrolan. Pratinjau disimpan di Mac selama 30 menit dan sampai dsh dimulai ulang; jika tinjauan atau agen mengubah catatan di antaranya, **Terapkan** menolak dan Anda meminta pratinjau lagi. **Terapkan** menyimpan semua perubahan dari satu pratinjau atau tidak sama sekali: jika satu perubahan tidak bisa disimpan (misalnya MEMORY.md sudah penuh), catatan tetap seperti semula dan alasannya ditampilkan. Setiap giliran selesai yang berisi pesan dari Anda memakan satu panggilan model; panggilan yang gagal membaca pesan yang sama lagi setelah giliran berikutnya. Obrolan subagen tidak ditinjau. Ide dan format file berasal dari [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus tidak memakai kodenya dan tidak pernah membaca atau menulis memori milik DS Bot sendiri.
285
302
  - **Riwayat versi memori** menyimpan 50 versi terbaru dari setiap memori (setiap proyek dan memori global); yang lebih lama dihapus. Satu versi berisi seluruh memori proyek itu, bukan satu catatan. **Pulihkan** mengembalikan semua file dari versi itu (termasuk topik) dan menolak jika memori berubah setelah Anda membuka versi itu; memori sebelum pemulihan menjadi versi baru, jadi Anda bisa membatalkannya. Selama sakelar nonaktif, tidak ada versi baru yang disimpan dan **Pulihkan** menolak; versi yang sudah disimpan tetap ada. Tidak ada versi dari sebelum fitur ini: riwayat dimulai dari penyimpanan pertama setelah Anda memasangnya.
@@ -293,6 +310,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
293
310
  - **Pemulihan:** hanya berjalan di konsol penyelamat, saat dsh ditutup, dan menggantikan seluruh dsh home. dsh home yang lama tetap ada di sebelahnya sebagai `.dsh.pre-restore-<time>` sampai Anda menghapusnya, jadi disk perlu ruang untuk keduanya. Obrolan tetap memakai jalur proyeknya: di komputer lain, proyek di jalur lain tampil sebagai hilang sampai Anda menambahkannya lagi. Symlink yang menunjuk ke luar dsh home (misalnya skill yang ditautkan dari folder lain) kembali sebagai tautan; targetnya harus ada di komputer itu.
294
311
  - **Pemeriksaan log sesi** membaca log terbaru setiap obrolan dengan aturan dsh sendiri tentang apa yang dapat dibuka: baris yang bukan JSON atau yang tidak berurutan dihitung sebagai kerusakan hanya jika ada akhir giliran sesudahnya (jika tidak, dsh membuka obrolan tanpa baris mulai dari situ, sehingga obrolan itu tidak dicantumkan). Fitur ini tidak memeriksa peristiwa dalam log terhadap aturan peristiwa milik dsh sendiri, jadi log yang dianggapnya sehat masih bisa gagal dibuka setelah dsh ditingkatkan. Perbaikan mengambil salinan dari cadangan: pesan setelah cadangan itu hilang dari obrolan tersebut (file yang rusak tetap ada di sebelahnya). Obrolan yang terbuka di dsh ini tidak diperbaiki di Pengaturan: dsh sedang memegangnya.
295
312
  - **Pencadangan otomatis** hanya berjalan selama dsh berjalan: pencadangan yang jatuh tempo saat dsh ditutup berjalan sekitar 45 detik setelah dsh dimulai berikutnya. Snapshot untuk versi baru diambil setelah dsh dimulai itu, bukan sebelum pembaruan.
313
+ - **Ingat ukuran jendela** hanya berfungsi di aplikasi desktop. Setiap kali dimulai, dsh lebih dulu menampilkan jendelanya pada 1280 × 820; jendela berpindah ke ukuran yang disimpan saat plugin dimuat. Halaman tidak punya event untuk perpindahan jendela, jadi plugin membaca jendela sekali per detik: perubahan dalam 2 detik terakhir sebelum dsh ditutup tidak disimpan. Ukuran disimpan per komputer, di penyimpanan aplikasi itu sendiri.
314
+ - **Penghitungan penggunaan:** menghitung salinan, bukan orang: setiap dsh home adalah satu salinan. Hitungan salinan unik (`installed.txt`) hanya mencakup salinan yang diperbarui ke versi pertama yang punya file ini atau ke versi yang lebih baru; salinan yang tetap di versi lebih lama tidak dihitung. Salinan yang folder `storages`-nya dihapus akan dihitung lagi. GitHub dapat menghitung permintaan dari alamat IP yang sama (misalnya beberapa komputer di belakang satu router NAT) dalam sekitar 10 menit sebagai satu permintaan.
296
315
  - 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).
297
316
 
298
317
  ## Pertanyaan umum
@@ -331,6 +350,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
331
350
 
332
351
  **Bisakah saya melihat semua obrolan saya sebagai papan kanban dan memulai obrolan baru dari sana?** Bisa, dengan **Papan tugas** (aktif secara default): buka di bilah samping kiri. Setiap obrolan adalah kartu di **Sedang dikerjakan**, **Ditinjau** (obrolan menunggu Anda), atau **Selesai**. **Tugas baru** membuka obrolan baru dsh di proyek, dan papan kembali saat pesan pertama Anda terkirim; klik **Jawab** di kartu oranye untuk menjawabnya tanpa membuka obrolan. **Bersihkan semua** di **Selesai** bertanya dulu dan mengeluarkan kartu selesai yang sudah Anda baca dari papan; **Urungkan** dan **Dikeluarkan (N)** mengembalikannya, dan obrolannya tetap ada di dsh.
333
352
 
353
+ **Bisakah saya punya obrolan asisten pribadi yang mengingatkan saya dan mengelola obrolan saya yang lain?** Bisa, dengan **Asisten** (nonaktif secara default): aktifkan di Pengaturan → Composer Plus, lalu klik **Asisten** di bilah samping kiri. Asisten membuat pengingat dengan tugas terjadwal dsh, mencari di web, menampilkan daftar dan membaca obrolan Anda, serta mengirim pesan ke obrolan atau memulai, menghentikan, atau mengarsipkan obrolan hanya setelah Anda menyetujuinya. Simpan profil Anda di memori proyeknya, topik “profil”.
354
+
334
355
  **Bisakah dsh mencadangkan obrolan dan pengaturan saya, seperti dsh-backup?** Bisa: **Pengaturan → Composer Plus → Pencadangan → Cadangkan sekarang**. Fitur ini menulis format arsip yang sama ke folder yang sama (`~/Desktop/dsh-backups`), jadi arsip dsh-backup juga tampil dan dapat dipulihkan, dan Anda dapat menghapus dsh-backup. Aktifkan **Pencadangan otomatis** untuk pencadangan terjadwal.
335
356
 
336
357
  **dsh tidak mau dimulai lagi. Bagaimana cara memulihkan cadangan?** Buka folder cadangan (`~/Desktop/dsh-backups`) dan klik dua kali `Composer Plus Rescue.command` (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`). Pilih `3) Restore a backup`, pilih satu cadangan, lalu ketik `RESTORE`. Cara ini berjalan tanpa dsh.
@@ -363,6 +384,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
363
384
 
364
385
  **Bagaimana membalas hanya satu bagian dari jawaban yang panjang?** Pilih bagian itu dan klik **Kutip** di atas pilihan (**Kutip dalam balasan**, aktif secara default). Bagian itu masuk ke kolom ketik sebagai kutipan `> …`, dan Anda menulis balasan di bawahnya.
365
386
 
387
+ **Bagaimana menunjukkan baris yang tepat dari sebuah file kepada agen?** Buka file di bilah samping kanan (**File ruang kerja**), pilih baris-barisnya, lalu klik **Kutip** di atas pilihan (**Kutip dari pratinjau file**, aktif secara default). Kolom ketik menerima path dan nomor baris (misalnya `src/login.js:2-3`) serta baris-baris itu sebagai blok kode; tulis pertanyaan Anda di bawahnya.
388
+
366
389
  **Bisakah saya bertanya saat agen bekerja, tanpa menghentikannya?** Ketik pertanyaan dan klik **Tanya di obrolan samping** di kolom ketik (**Obrolan samping**, aktif secara bawaan). Salinan obrolan yang hanya baca menjawabnya sementara obrolan terus bekerja. Di obrolan samping, **Bawa kembali** menaruh jawaban di kolom ketik obrolan.
367
390
 
368
391
  **Bagaimana memberi tahu agen apa yang harus diubah di diff-nya?** Di **Panel perubahan**, buka diff file, klik **+** pada sebuah baris, dan tulis catatan (**Catatan diff**, aktif secara bawaan). Lalu klik **Kirim ke kolom ketik**: catatan masuk ke kolom ketik bersama file, nomor baris, dan barisnya.
@@ -371,7 +394,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
371
394
 
372
395
  **iPhone saya hilang. Bagaimana cara mencegahnya mengakses Mac saya?** Klik **Koneksi seluler** di kiri bawah bilah samping, lalu klik **Remove** di samping iPhone itu. Kuncinya langsung tidak berfungsi; iPhone itu hanya dapat kembali dengan pemasangan baru yang Anda setujui di Mac.
373
396
 
374
- **Bagaimana cara melanjutkan obrolan dari Mac saya yang lain di Mac ini?** Di Mac yang lain, aktifkan **Pengaturan → Composer Plus → Komputer jarak jauh** dan **Izinkan komputer lain membuka Mac ini**, klik **Buat tautan pemasangan**, lalu salin tautannya (kirim ke diri Anda sendiri, misalnya dengan AirDrop atau Catatan). Di Mac ini, aktifkan juga **Komputer jarak jauh**, pilih **Tambahkan komputer…** di sebelah kiri judul obrolan, tempel tautannya, lalu klik **Hubungkan**. Setelah itu, klik **Setujui** di Mac yang lain. Sejak saat itu, pilih komputer tersebut di menu yang sama.
397
+ **Bagaimana cara melanjutkan obrolan dari Mac saya yang lain di Mac ini?** Di Mac yang lain, aktifkan **Pengaturan → Composer Plus → Komputer jarak jauh** dan **Izinkan komputer lain membuka Mac ini**, klik **Buat tautan pemasangan**, lalu salin tautannya (kirim ke diri Anda sendiri, misalnya dengan AirDrop atau Catatan). Di Mac ini, aktifkan juga **Komputer jarak jauh**, pilih **Tambahkan komputer…** di pemilih pada bilah samping kiri (di sebelah kanan nama merek, di atas **Sesi Baru**), tempel tautannya, ketik **Nama**, lalu klik **Hubungkan**. Setelah itu, klik **Setujui** di Mac yang lain. Sejak saat itu, pilih komputer tersebut di menu yang sama: komputer itu memenuhi jendela ini. Klik **Kembali ke Mac ini** di tempat yang sama untuk kembali. Sementara itu, obrolan di Mac ini tetap berjalan.
375
398
 
376
399
  **Bisakah saya mengunci Tether dengan Face ID?** Bisa: di Tether, aktifkan "Settings → Privacy → Lock with Face ID". Setelah itu, Tether meminta Face ID (atau kode sandi) saat dibuka dan saat Anda kembali ke aplikasi itu.
377
400
 
@@ -403,6 +426,12 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
403
426
 
404
427
  **Bisakah dsh menjalankan perintah berikutnya tanpa bertanya lagi ke model?** Bisa, dengan **Langkah terencana** (nonaktif secara default): aktifkan di Pengaturan → Composer Plus. Model lalu dapat merencanakan perintah berikutnya dengan sebuah syarat, misalnya “jalankan tes jika build berhasil”, dan Composer Plus menjalankan langkah tanpa panggilan model baru ketika hasilnya memenuhi syarat. Persetujuan dan sandbox tetap seperti biasa.
405
428
 
429
+ **Dari mana skill bahasa Turki berasal, dan bisakah saya menghapusnya?** Dari [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) di GitHub (MIT). Composer Plus memasangnya hanya saat **Bahasa aplikasi** adalah Türkçe, hanya menyimpan file Markdown-nya, dan tidak menjalankan skripnya. Untuk menghapusnya, matikan **Paket skill bahasa Turki** di Pengaturan → Composer Plus: skill dan salinan yang diunduh langsung terhapus.
430
+
431
+ **Bagaimana cara melaporkan bug atau meminta fitur di Composer Plus?** Pengaturan → Composer Plus → **Laporkan isu…** (atau menu **…** obrolan → **Laporkan isu Composer Plus…**). Pilih jenis, jelaskan dalam bahasa Anda sendiri, lalu klik **Tulis draf**. Periksa draf berbahasa Inggris, lalu klik **Buka isu**.
432
+
433
+ **Bagaimana agen merapikan basis kode yang berantakan?** Ketik `/untangle-codebase` di obrolan (**Rapikan basis kode**, aktif secara default), bila perlu dengan suatu bagian, misalnya `/untangle-codebase src/api`. Agen pertama-tama mendaftar salinan, keterkaitan tersembunyi, pembungkus yang tidak perlu, kode mati, dan kasus khusus, lalu memperbaikinya sebagai tujuan dan memeriksa lagi dengan subagen. Mulai skill ini di obrolan **Branch per obrolan** agar pekerjaannya tetap di branch sendiri.
434
+
406
435
  **Apakah plugin ini berfungsi di aplikasi desktop?** Ya: Pengaturan → Plugin → **Tambahkan plugin** → `dsh-composer-plus`. Diuji pada dsh 0.2.0-rc.2 (desktop dan web) dan 0.2.1-rc.2 (web).
407
436
 
408
437
  ## Pengembangan
@@ -422,6 +451,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
422
451
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
423
452
  # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
424
453
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
454
+ # Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
455
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
425
456
  # every Settings feature row shows a loading screenshot and a ? link to its README row
426
457
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
427
458
  # What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
@@ -473,6 +504,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
473
504
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
474
505
  # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
475
506
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
507
+ # Assistant: off by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
508
+ SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
476
509
  ```
477
510
 
478
511
  ```sh
@@ -494,3 +527,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
494
527
  ## License
495
528
 
496
529
  MIT
530
+
531
+ `assets/skills/untangle-codebase/SKILL.md` adalah skill `untangle-codebase` dari [caldoai/skills](https://github.com/caldoai/skills), © 2026 Maze, dengan Lisensi MIT ([lisensinya](assets/skills/untangle-codebase/LICENSE)).