dsh-composer-plus 1.14.0 → 1.16.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.de.md +69 -16
- package/README.es.md +69 -16
- package/README.fr.md +69 -16
- package/README.hi.md +69 -16
- package/README.id.md +69 -16
- package/README.ja.md +69 -16
- package/README.ko.md +69 -16
- package/README.md +69 -16
- package/README.pt-BR.md +69 -16
- package/README.ru.md +69 -16
- package/README.tr.md +69 -16
- package/README.vi.md +69 -16
- package/README.zh.md +69 -16
- package/assets/features/autoBackup.webp +0 -0
- package/assets/features/backup.webp +0 -0
- package/assets/features/branchTree.webp +0 -0
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/idleSwitch.webp +0 -0
- package/assets/features/projectMemory.webp +0 -0
- package/assets/features/questionFit.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/assets/features/rescueConsole.webp +0 -0
- package/assets/features/sessionDoctor.webp +0 -0
- package/assets/features/stopSendFirst.webp +0 -0
- package/backup.mjs +1069 -0
- package/client.js +1278 -182
- package/index.js +1602 -37
- package/package.json +3 -2
- package/tether/gateway/server.mjs +1 -1
package/README.id.md
CHANGED
|
@@ -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.
|
|
32
|
+
> pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.16.0`.
|
|
33
33
|
|
|
34
34
|
## Fitur
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
37
37
|
|
|
38
38
|
| Fitur | Cara menggunakannya | Tangkapan layar |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Panel perubahan** | <a id="feature-changespanel"></a>Bilah samping kanan → `+` → **Perubahan**.
|
|
40
|
+
| **Panel perubahan** | <a id="feature-changespanel"></a>Bilah samping kanan → `+` → **Perubahan**. Halaman terbuka di **Pohon**: peta branch dari repositori obrolan. Tiga kartu menghitung branch: semuanya, yang sudah di-merge, dan yang menunggu di-merge. Klik sebuah kartu untuk menampilkan hanya branch tersebut; klik lagi untuk menampilkan semuanya. Setiap branch adalah sebuah kotak dengan commit terakhirnya: hijau jika branch utama sudah memiliki pekerjaannya, oranye jika belum, biru untuk branch utama. Sebuah panah mengarah dari setiap branch ke branch yang mengambilnya (✅ **Di-merge**) atau ke branch tempat ia bermula (⏳ **Menunggu**, garis putus-putus). Klik sebuah kotak untuk melihat commit branch itu, lalu klik sebuah commit untuk melihat file dan diff-nya. Klik **Di-merge** untuk melihat file dari commit merge, atau **Menunggu** untuk melihat file yang dibawa branch itu ke targetnya. Branch remote hanya ditampilkan jika tidak ada branch lokal dengan nama yang sama. Di menu mode, pilih **Belum Di-commit**, **Belum Di-stage**, **Di-stage**, atau **Branch** untuk melihat file yang berubah beserta jumlah `+/-`; klik sebuah file untuk melihat diff-nya. **Giliran Terakhir** membuka tinjauan bawaan dsh untuk giliran terakhir. **Obrolan ini** hanya menampilkan file yang ditulis oleh alat file (write, edit) obrolan yang terbuka, di semua gilirannya, beserta total diff-nya sejak pesan pertama. Tombol **␣** menyembunyikan perubahan spasi (`git diff -w`): baris yang hanya berubah pada indentasi atau akhir baris tidak ditampilkan. Menu **…** sebuah file → **Obrolan yang mengubah file ini** menampilkan obrolan dari repositori yang sama yang alat tulis atau editnya mengubah file itu, yang terbaru lebih dulu, beserta permintaan yang melakukannya; satu klik membuka obrolan itu di permintaan tersebut. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Tangkapan layar: Panel perubahan"></a> |
|
|
41
41
|
| **Ide fitur** | <a id="feature-featureideas"></a>Bilah samping kanan → `+` → **Ide fitur** → **Sarankan fitur**. Model obrolan itu sendiri membaca ringkasan singkat proyek obrolan (file tingkat atas, bagian awal README dan manifes, kerangka sisa README, judul commit terbaru) dan menyarankan hingga 8 fitur. Fitur ditampilkan sebagai tumpukan kartu dalam bahasa UI dsh. Geser kartu ke kanan (atau klik **✓**, atau tekan `→`; dengan cara mana pun, kartu terbang ke sisinya) untuk memulai obrolan baru di proyek yang sama. Obrolan itu dimulai dalam mode rencana dengan ide tersebut sebagai permintaan, jadi tidak ada yang berubah sebelum Anda menyetujui rencananya. Untuk melewati rencana, klik **▶ Buat sekarang** (atau tekan `↑`; kartu terbang ke atas): obrolan baru langsung dimulai dengan ide itu sebagai permintaan biasa, lalu model membuat perubahan dan menjalankan pemeriksaannya (persetujuan berlaku seperti biasa). Geser ke kiri (atau **✕**, atau `←`) untuk melewatinya; **Urungkan** (atau `Z`) mengembalikan kartu yang dilewati. Klik **↓** (atau tekan `↓`) untuk menyimpan ide bagus untuk nanti. Ide itu masuk ke daftar **Nanti** milik proyek, yang ditampilkan oleh setiap obrolan di folder proyek yang sama (juga setelah mulai ulang). **Nanti (N)** membuka daftar itu. **Rencanakan** memulai obrolan mode rencana yang sama untuk ide itu dan **Buat sekarang** memulai obrolan tanpa rencana; keduanya mengeluarkan ide itu dari daftar. **Rencanakan semua (N)** memulai satu obrolan mode rencana untuk semua ide di daftar, jadi bagian bersama cukup direncanakan sekali. **Hapus dari daftar** menghapusnya. **Salin sebagai daftar periksa** menyalin seluruh daftar ke papan klip sebagai daftar periksa Markdown (`- [ ] Title — Summary`, satu baris per ide) untuk pelacak isu atau file TODO; fitur ini tidak membuat panggilan jaringan. **Buka isu GitHub** pada sebuah ide membuka isu dengan judul dan ringkasannya (serta alasan ide itu penting) di repositori GitHub proyek, dengan login GitHub CLI (`gh`) Anda sendiri; lalu tautan **Isu #N** tampil di samping ide dan membuka isu itu. **Ide lainnya** menambahkan kartu. Untuk mendapatkan ide tentang satu area saja, ketik **Topik fokus** yang singkat di kolom di samping **Sarankan fitur** (paling banyak 80 karakter; `Enter` juga menyarankan), atau klik salah satu topik tetap di bawahnya: **Kinerja**, **Aksesibilitas**, **Pengujian**, **Keamanan**, **Kegunaan**, atau **Dokumentasi** (klik lagi untuk mengosongkannya). Model lalu hanya menyarankan fitur tentang topik itu; kolom kosong berarti fitur apa pun. Ide tidak disarankan dua kali dalam satu proyek: setiap ide yang disarankan (dilewati, disimpan, atau dimulai) masuk ke **Riwayat** proyek, model diminta untuk tidak menyarankannya lagi, dan judul yang berulang dibuang. **Riwayat** mencantumkannya dengan **Dimulai** atau **Disarankan**; **Lupakan** (atau **Lupakan semua**) membuat ide itu bisa muncul lagi; ide yang masih ada di daftar **Nanti** tidak masuk saran sampai Anda menghapusnya dari sana. Model hanya berjalan saat Anda mengklik. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Tangkapan layar: Ide fitur"></a> |
|
|
42
42
|
| **Pencarian isi** | <a id="feature-contentsearch"></a>Pencarian bawaan di bilah samping dsh (kaca pembesar di samping **Ruang kerja**; `Cmd+K` di aplikasi desktop, `Cmd+Alt+K` di browser) juga menemukan obrolan dari kata-kata dalam pesan Anda dan dalam balasannya, bukan hanya dari judul. Teks yang cocok ditampilkan di bawah obrolan. dsh sudah memiliki pencarian ini, tetapi mengirimkannya dalam keadaan nonaktif. Fitur ini mengaktifkannya dengan file indeks pencarian di komputer Anda. Indeks dibuat pada pencarian pertama setelah dsh dimulai (sekitar 15 detik untuk 250 obrolan, lihat Batasan) dan disimpan untuk saat dsh dimulai berikutnya. Aktif secara default; perubahan berlaku setelah Anda memulai ulang dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Tangkapan layar: Pencarian isi"></a> |
|
|
43
43
|
| **Putar balik giliran** | <a id="feature-turnrollback"></a>Arahkan penunjuk ke salah satu pesan Anda dan klik **↶** (di samping Salin). **Obrolan saja** mengeluarkan pesan itu dan semua yang ada sesudahnya (balasan, panggilan alat) dari obrolan dan dari konteks model, lalu menaruh pesan itu kembali di kotak pesan: ubah, lalu kirim lagi. **Obrolan dan file** lebih dulu menampilkan daftar file proyek yang berubah sejak pesan itu, lalu juga mengembalikan file tersebut seperti semula. Ini termasuk perubahan yang dibuat oleh perintah (`bash`), bukan hanya oleh alat edit dsh. Giliran yang sedang berjalan dihentikan lebih dulu. Log obrolan tidak pernah ditulis ulang: satu penanda tersembunyi menyembunyikan bagian yang ditarik, sama seperti `/compact` bawaan dsh menyembunyikan pesan lama. Jika [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) terpasang, plugin itulah yang melakukan tugas ini, dan Composer Plus tidak menampilkan tombol kedua. Setelah putar balik, bilah **Ulangi** muncul di atas kotak pesan. Bilah ini memulai obrolan baru dari tepat sebelum putar balik (pesan dan konteks yang sama) dan, dengan **Obrolan dan file**, juga mengembalikan file. File yang Anda ubah setelah putar balik ditampilkan dalam daftar dan dipertahankan, kecuali Anda mencentang kotak yang menimpanya. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Tangkapan layar: Putar balik giliran"></a> |
|
|
@@ -46,10 +46,12 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
46
46
|
| **Riwayat input** | <a id="feature-inputhistory"></a>Di kotak pesan yang kosong, tekan `↑` / `↓` untuk menelusuri pesan yang telah Anda kirim, seperti di terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Tangkapan layar: Riwayat input"></a> |
|
|
47
47
|
| **Mode rencana Shift+Tab** | <a id="feature-plantoggle"></a>`Shift+Tab` menambahkan `/plan ` di awal draf (tekan lagi untuk menghapusnya). Jika obrolan sudah dalam mode rencana, `Shift+Tab` keluar dari mode itu. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Tangkapan layar: Mode rencana Shift+Tab"></a> |
|
|
48
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
|
+
| **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> |
|
|
49
50
|
| **Lanjutkan Sekali Klik** | <a id="feature-continuebutton"></a>Setelah giliran dihentikan, gagal, atau terpotong, kotak pesan yang kosong menampilkan **▶**. Satu klik melanjutkan percakapan yang ada tanpa menulis di input atau menambahkan pesan obrolan yang terlihat. (Model menerima catatan tersembunyi singkat “lanjutkan dari tempat berhenti”, karena beberapa penyedia, seperti Claude, menolak permintaan yang berakhir dengan balasan asisten.) Pesan di antrean tetap di sana: ▶ hanya melanjutkan tugas yang dihentikan, lalu antrean berjalan. Giliran yang selesai tetap memakai tombol Kirim biasa. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Tangkapan layar: Lanjutkan Sekali Klik"></a> |
|
|
50
51
|
| **Lanjutkan setelah mulai ulang** | <a id="feature-resumeafterrestart"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Jika Anda keluar dari dsh (atau dsh tertutup) saat sebuah obrolan sedang bekerja, obrolan itu berlanjut sendiri saat Anda membuka dsh lagi, dengan catatan tersembunyi yang sama seperti Lanjutkan Sekali Klik. Jika putaran tujuan (`/goal`) sedang berjalan, tujuan itu berlanjut ke putaran berikutnya (dsh menjeda tujuan setiap kali dimulai sampai Anda melanjutkannya). Obrolan yang Anda hentikan, yang selesai, atau yang gagal tidak berlanjut. dsh sendiri tidak memiliki pengaturan untuk ini: dsh hanya menandai giliran seperti itu sebagai terinterupsi. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Tangkapan layar: Lanjutkan setelah mulai ulang"></a> |
|
|
51
52
|
| **Seret dan lepas antrean** | <a id="feature-queuereorder"></a>Pesan dalam antrean mendapat pegangan (⠿). Seret untuk mengubah urutan, atau fokuskan pegangan lalu tekan `↑` / `↓`. `Esc` membatalkan. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Tangkapan layar: Seret dan lepas antrean"></a> |
|
|
52
|
-
| **Edit pesan antrean di tempat** | <a id="feature-queueedit"></a>Klik dua kali pesan dalam antrean
|
|
53
|
+
| **Edit pesan antrean di tempat** | <a id="feature-queueedit"></a>Klik dua kali pesan dalam antrean, atau klik tombol Edit-nya (**Edit pesan dalam antrean**). Editor terbuka di baris itu: ubah teksnya, hapus gambar atau file dengan ✕-nya, atau tambahkan yang baru dengan klip (**Tambahkan gambar atau file**) atau dengan menempelkan gambar. `Enter` menyimpan, `Esc` membatalkan, `Shift+Enter` menambah baris. Pesan tetap di tempatnya dalam antrean, dan gambar serta file yang Anda pertahankan tidak berubah. Selama editor terbuka, urutan antrean tidak dapat diubah. Di Tether: menu pesan antrean → Edit. | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Tangkapan layar: Edit pesan antrean di tempat"></a> |
|
|
54
|
+
| **Dahulukan pesan setelah Hentikan** | <a id="feature-stopsendfirst"></a>Aktif secara bawaan. Hentikan obrolan saat ada pesan yang menunggu di antreannya, lalu kirim pesan baru: pesan itu langsung berjalan sendiri. Pesan dalam antrean tetap berurutan dan berjalan setelahnya, satu per giliran. Tanpa fitur ini, dsh menaruh pesan baru di akhir antrean dan menjalankan pesan pertama dalam antrean sebagai gantinya, sehingga pesan baru berjalan paling akhir. Pesan yang Anda kirim saat obrolan bekerja tetap menunggu di akhir antrean. | <a href="assets/features/stopSendFirst.webp"><img src="assets/features/stopSendFirst.webp" width="160" alt="Tangkapan layar: Dahulukan pesan setelah Hentikan"></a> |
|
|
53
55
|
| **Salin tautan sesi** | <a id="feature-copydeeplink"></a>Klik kanan obrolan di bilah samping → **Salin tautan sesi**. Tempelkan tautan `dsh-session:…` ke obrolan lain untuk melampirkan obrolan itu sebagai konteks hanya-baca. dsh 0.2.1 memiliki **Salin ID sesi** sendiri, yang hanya menyalin ID polos; item ini muncul tepat sesudahnya. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Tangkapan layar: Salin tautan sesi"></a> |
|
|
54
56
|
| **Salin tautan pesan** | <a id="feature-copymessagelink"></a>Arahkan penunjuk ke sebuah pesan dan klik **🔗** (di baris tindakan pesan itu; untuk jawaban, di samping waktunya). Tautan ini adalah tautan sesi ditambah nomor pesan: `dsh-session:…#42`. Tempelkan tautan itu ke sebuah pesan dan kirim. Di dsh 0.2.1 dan yang lebih baru, tautan tampil sebagai chip. Satu klik membuka obrolan tersebut, menggulir ke pesan itu, dan menyorotnya selama 2 detik. Seperti tautan sesi, tautan ini juga melampirkan obrolan itu sebagai konteks hanya-baca. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Tangkapan layar: Salin tautan pesan"></a> |
|
|
55
57
|
| **Ekspor obrolan sebagai Markdown** | <a id="feature-exportmarkdown"></a>Klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Ekspor sebagai Markdown…**. Dialog menampilkan jumlah pesan dalam obrolan. **Salin ke papan klip** menyalin obrolan sebagai Markdown, dan **Simpan file .md** menyimpannya sebagai `<chat title>.md` melalui unduhan browser (dsh desktop: ke folder Unduhan atau lewat dialog simpan, sesuai pengaturan sistem Anda). File berisi judul obrolan, nama proyek, dan tanggal, lalu satu bagian `## Anda` atau `## Asisten` untuk setiap pesan. Blok kode tetap seperti aslinya; blok kode yang dibiarkan terbuka oleh suatu pesan akan ditutup. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Tangkapan layar: Ekspor obrolan sebagai Markdown"></a> |
|
|
@@ -57,23 +59,30 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
57
59
|
| **Pencarian proyek di obrolan baru** | <a id="feature-projectpicker"></a>Obrolan baru → tombol proyek di atas kotak pesan. Proyek ditampilkan dalam urutan A–Z, dengan kotak **Cari proyek** di bagian atas. Ketik sebagian nama (tanpa membedakan huruf besar-kecil dan aksen), lalu tekan `Enter` untuk memilih hasil pertama. Jika tidak ada yang cocok, muncul **Tidak ada proyek yang cocok**. Urutan proyek tersimpan milik dsh di bilah samping tidak berubah. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Tangkapan layar: Pencarian proyek di obrolan baru"></a> |
|
|
58
60
|
| **Ruang kerja default untuk Sesi Baru** | <a id="feature-defaultworkspace"></a>Pengaturan → Composer Plus → **Ruang kerja default untuk Sesi Baru** → **Buka Sesi Baru di**: pilih sebuah proyek, atau **Folder umum (default-workspace)** (pilihan default: folder milik dsh sendiri, `Documents/deepseek-harness/default-workspace`, yang dibuat saat pertama kali dipakai). Setelah itu, **Sesi Baru** di bagian atas bilah samping (dan pintasannya) selalu membuka obrolan baru di sana, juga saat obrolan dari proyek lain sedang terbuka. Tombol `+` di samping proyek tetap membuka proyek itu, dan tombol proyek di atas kotak pesan obrolan baru tetap bisa mengganti proyeknya. | <a href="assets/features/defaultWorkspace.webp"><img src="assets/features/defaultWorkspace.webp" width="160" alt="Tangkapan layar: Ruang kerja default untuk Sesi Baru"></a> |
|
|
59
61
|
| **Cari di obrolan** | <a id="feature-findinchat"></a>Tekan `Cmd+F` di Mac (`Ctrl+F` di Windows dan Linux) di obrolan: kotak pencarian terbuka di atasnya. Ketik sebuah kata: setiap kecocokan dalam pesan dan balasan di layar disorot, kecocokan saat ini dengan warna yang lebih kuat, dan kotak itu menampilkan n / total. `Enter` atau `↓` menuju kecocokan berikutnya dan `Shift+Enter` atau `↑` ke kecocokan sebelumnya (juga tombol panah); obrolan menggulir kecocokan ke tengah. Huruf besar/kecil, aksen, dan huruf ı tanpa titik dalam bahasa Turki tidak berpengaruh. `Esc` menutup kotak dan mengembalikan kursor ke tempat semula. Pencarian tetap mengikuti obrolan saat balasan sedang masuk. | <a href="assets/features/findInChat.webp"><img src="assets/features/findInChat.webp" width="160" alt="Tangkapan layar: Cari di obrolan"></a> |
|
|
60
|
-
| **Branch per obrolan** | <a id="feature-worktreechats"></a>
|
|
62
|
+
| **Branch per obrolan** | <a id="feature-worktreechats"></a>Di layar obrolan baru, tombol branch (ikon branch) di antara tombol proyek dan tombol mode menampilkan **Branch baru** secara default. Ketik pesan pertama dan kirim. Untuk tetap di branch saat ini, pilih “Branch saat ini (main)” di tombol yang sama. Pesan pertama dapat membawa gambar dan file. Dalam mode rencana, obrolan baru juga dimulai dalam mode rencana: kirim pesan sebagai `/plan <pesan>` (Shift+Tab), atau ubah Obrolan baru ke mode rencana terlebih dahulu. AI memberi nama branch (`feat/…`, `fix/…`) dari pesan itu, Composer Plus membuat git worktree untuknya di `<project>/.worktrees/`, menyalin file yang diabaikan yang dicantumkan `.worktreeinclude` (misalnya `.env` dan `node_modules/`), lalu membuka obrolan baru di sana dengan pesan Anda. Header obrolan yang terbuka menampilkan ⑂ branch · N perubahan · ↑ ↓ (atau **belum di-push**); klik untuk membuka **Perubahan**. Menu yang sama mencantumkan worktree yang terbuka: pilih salah satu untuk memulai obrolan di sana. Untuk melihat folder branch di dalam proyeknya di bilah samping, pilih **Opsi tampilan** → **Pohon Ruang Kerja** milik dsh. | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="Tangkapan layar: Branch per obrolan"></a> |
|
|
63
|
+
| **Branch di pohon ruang kerja** | <a id="feature-branchtree"></a>Pengaturan → Composer Plus → **Branch di pohon ruang kerja** (mati secara default). Setiap branch yang punya folder worktree di `<project>/.worktrees/` lalu tampil sebagai proyek di dalam proyeknya; pilih **Opsi tampilan** → **Pohon Ruang Kerja** di dsh untuk melihatnya bertingkat. Branch yang foldernya dihapus keluar dari daftar, dan dsh menampilkan obrolannya di **Tanpa grup**. Saat agen obrolan di folder proyek membuat branch dan berpindah ke branch itu (`git switch -c`, `git checkout -b`) sementara folder tidak punya perubahan yang belum di-commit, folder proyek kembali ke branch sebelumnya, branch mendapat folder sendiri, dan obrolan pindah ke sana: salinannya terbuka di proyek branch dan melanjutkan tugas, dan obrolan lama diarsipkan. Daftar diperiksa saat mulai, setiap 30 detik, setelah setiap giliran, dan saat Anda kembali ke jendela. | <a href="assets/features/branchTree.webp"><img src="assets/features/branchTree.webp" width="160" alt="Tangkapan layar: Branch di pohon ruang kerja"></a> |
|
|
61
64
|
| **Prediksi pesan berikutnya** | <a id="feature-nextprediction"></a>Aktif secara default: Anda dapat menonaktifkannya di **Pengaturan → Composer Plus**. Setelah agen menyelesaikan satu giliran (bukan giliran yang dihentikan atau gagal), kotak pesan yang kosong menampilkan tebakan pesan Anda berikutnya dengan teks abu-abu, beserta petunjuk **Tab untuk menerima**. `Tab` memasukkan teks ke kotak pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya untuk giliran itu. Mulai mengetik juga menyembunyikannya, dan giliran baru menggantinya. Menu **Model** di bawah sakelar menampilkan model milik dsh sendiri (daftar yang sama dengan menu model dsh). **Default dsh** dipilih secara default dan mengikuti model default dsh. Setiap giliran yang selesai memakai satu panggilan model singkat. Di Tether, tebakan tampil di atas kotak pesan yang kosong: ketuk untuk memasukkannya ke kolom. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Tangkapan layar: Prediksi pesan berikutnya"></a> |
|
|
62
65
|
| **Lengkapi saat mengetik** | <a id="feature-typingcompletion"></a>Nonaktif secara default: Anda dapat mengaktifkannya di **Pengaturan → Composer Plus**. Saat Anda mengetik, teks abu-abu tepat setelah kursor menunjukkan kelanjutan pesan Anda. `Tab` menambahkannya ke pesan, tetapi tidak mengirimnya. `Esc` menyembunyikannya. Fitur ini hanya menyarankan kata-kata Anda sendiri berikutnya: tidak pernah berupa jawaban untuk Anda, dan tanpa teks error atau nama karangan. Jika pesan tampak sudah lengkap atau model tidak yakin, tidak ada yang tampil. Jika Anda mengetik huruf berikutnya dari teks abu-abu itu, teks tetap ada, tanpa panggilan model baru. Fitur ini memiliki menu **Model** sendiri di bawah sakelarnya. Entri pertamanya, **Sama dengan prediksi pesan berikutnya**, memakai model **Prediksi pesan berikutnya** (default); pilih model lain untuk memakai model yang berbeda bagi setiap fitur, misalnya model yang lebih cepat untuk pelengkapan. Fitur ini melakukan satu panggilan model di setiap jeda saat Anda mengetik, jadi memakai jauh lebih banyak token daripada prediksi: pilih model yang cepat dan murah. Fitur ini tidak berjalan untuk perintah garis miring, pesan dengan chip file, atau saat kursor tidak berada di akhir. Di Tether, sisa teks tampil di atas kolom saat Anda mengetik: ketuk untuk menambahkannya. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Tangkapan layar: Lengkapi saat mengetik"></a> |
|
|
63
66
|
| **Sempurnakan prompt** | <a id="feature-promptimprove"></a>Ketik permintaan kasar, lalu klik tongkat ajaib (**Sempurnakan prompt**) di samping menu model. Satu panggilan model menulis ulang permintaan itu menjadi prompt yang lebih jelas: tujuan lebih dulu, langkah bernomor yang singkat jika ada beberapa bagian, dan pemeriksaan yang perlu dijalankan. Fitur ini membaca obrolan ini (tanpa pesan yang ditarik oleh putar balik), README, AGENTS.md, dan manifes proyek, file yang diubah, serta file yang namanya cocok dengan kata-kata Anda, dan mempertahankan bahasa Anda. Fitur ini tidak pernah mengarang nama file. Teks baru menggantikan draf Anda, tetapi tidak dikirim: baca, edit, lalu tekan `Enter`. `Cmd/Ctrl+Z` mengembalikan teks Anda dalam satu langkah, begitu juga tombolnya (**Urungkan penyempurnaan**). Jika Anda mengetik saat fitur ini bekerja, teks baru Anda tetap ada. `Esc` atau klik kedua membatalkannya. Fitur ini memiliki menu **Model** sendiri di Pengaturan (default: **Sama dengan model obrolan**). Tidak untuk perintah garis miring atau pesan dengan chip file. Di Tether, tongkat ajaib ada di samping kolom. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Tangkapan layar: Sempurnakan prompt"></a> |
|
|
64
67
|
| **Pemeriksaan tujuan** | <a id="feature-goalcheck"></a>Mulai tujuan dengan `/goal`. Saat agen menandai tujuan sebagai selesai dalam putaran otomatis, tujuan baru ditutup setelah dua pemeriksaan. Pertama, perintah pengujian proyek berjalan di folder obrolan, dengan mode sandbox obrolan itu. Perintah itu adalah perintah Anda sendiri atau perintah yang ditemukan di `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, atau pytest. Jika langkah terbaru agen sendiri adalah menjalankan pengujian itu dengan hasil lulus, pengujian tidak dijalankan lagi. Lalu satu panggilan model independen, tanpa alat, membaca tujuan, obrolan ini, `git status`, dan hasil pengujian. Jika satu pemeriksaan gagal, tujuan tetap aktif dan agen membaca alasannya, lalu putaran berikutnya berlanjut. Satu baris di bawah bilah tujuan (**Pemeriksaan tujuan**) menampilkan pengujian dan hasil terakhir. **Edit** mengatur perintah pengujian Anda sendiri dan batas waktu atau token; jika batas terlampaui, tujuan menjadi terhambat. **Jalankan sekarang** menjalankan pemeriksaan tanpa menutup tujuan. Fitur ini memiliki menu **Model** sendiri di Pengaturan (default: **Sama dengan model obrolan**). Jika Anda menyelesaikan tujuan sendiri, tidak ada yang diperiksa. | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="Tangkapan layar: Pemeriksaan tujuan"></a> |
|
|
68
|
+
| **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. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Tangkapan layar: Memori proyek"></a> |
|
|
65
69
|
| **Izinkan untuk obrolan ini** | <a id="feature-allowforchat"></a>Saat Tinjauan otomatis bertanya kepada Anda, kartu persetujuan mendapat tombol **Izinkan untuk obrolan ini**: mulai saat itu, alat yang sama di obrolan yang sama diizinkan, dengan argumen apa pun, sampai batas waktu berakhir (1 jam secara default; pilih di **Pengaturan → Composer Plus → Izinkan untuk obrolan ini**). Setelah itu agen bertanya lagi. Sebuah chip di header menampilkan daftar izin beserta waktu berakhirnya dan dapat mencabutnya. Izin tetap ada setelah mulai ulang. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Tangkapan layar: Izinkan untuk obrolan ini"></a> |
|
|
66
|
-
| **Status proyek** | <a id="feature-projectstatus"></a>Baris proyek di bilah samping menampilkan penanda spinner / menunggu / selesai yang sama seperti obrolannya. Jadi, proyek yang diciutkan tetap memberi tahu Anda bahwa ada obrolan di dalamnya yang sedang bekerja atau memerlukan Anda. Obrolan yang menunggu Anda ditampilkan lebih dulu, lalu obrolan selesai yang belum Anda buka (titik hijau, juga saat obrolan lain masih berjalan), lalu spinner. Arahkan penunjuk ke penanda itu untuk melihat detailnya. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
|
|
67
|
-
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>Setiap baris obrolan di bilah samping menampilkan label abu-abu kecil berisi branch git tempat folder proyek obrolan berada pada giliran terakhir obrolan itu (misalnya `main` atau `feature/login`; HEAD yang terlepas menampilkan ID commit pendeknya dalam tanda kurung). Dua obrolan dari satu proyek di branch yang berbeda tidak lagi terlihat sama, dan Anda langsung melihat saat akan melanjutkan obrolan di branch yang salah. Arahkan penunjuk ke label untuk melihat nama lengkapnya. Bagian Host membaca branch (`git branch --show-current`, hanya baca) saat giliran dimulai dan saat berakhir; obrolan tanpa giliran sejak Anda memasang fitur ini, atau folder yang bukan repositori git, tidak menampilkan label. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Tangkapan layar: Branch Git di baris obrolan"></a> |
|
|
70
|
+
| **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> |
|
|
71
|
+
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>Setiap baris obrolan di bilah samping menampilkan label abu-abu kecil berisi branch git tempat folder proyek obrolan berada pada giliran terakhir obrolan itu (misalnya `main` atau `feature/login`; HEAD yang terlepas menampilkan ID commit pendeknya dalam tanda kurung). Dua obrolan dari satu proyek di branch yang berbeda tidak lagi terlihat sama, dan Anda langsung melihat saat akan melanjutkan obrolan di branch yang salah. Arahkan penunjuk ke label untuk melihat nama lengkapnya. Bagian Host membaca branch (`git branch --show-current`, hanya baca) saat giliran dimulai dan saat berakhir; obrolan tanpa giliran sejak Anda memasang fitur ini, atau folder yang bukan repositori git, tidak menampilkan label. Jika baris proyek di atas obrolan bernama sama dengan branch-nya (misalnya folder “Branch per obrolan”), baris obrolan tidak menampilkan label, tetapi “Dalam satu daftar” tetap menampilkannya. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Tangkapan layar: Branch Git di baris obrolan"></a> |
|
|
68
72
|
| **Tandai semua sudah dibaca** | <a id="feature-markprojectread"></a>Di bilah samping, klik tombol **…** pada sebuah proyek → **Tandai semua sudah dibaca**. Semua obrolan di proyek itu langsung kehilangan titik hijau belum dibaca; proyek lain tetap memiliki titiknya. Item ini tampil abu-abu (**Tidak ada obrolan yang belum dibaca**) jika proyek itu tidak punya obrolan yang belum dibaca. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Tangkapan layar: Tandai semua sudah dibaca"></a> |
|
|
69
73
|
| **Proyek aktif di atas** | <a id="feature-activeprojectsfirst"></a>Saat sebuah obrolan mulai berjalan atau memerlukan Anda, proyeknya pindah ke bagian atas bilah samping dengan animasi baris bawaan dsh (gerakan yang sama seperti saat Anda menyeretnya ke sana). Proyek yang selesai tetap di tempatnya; seret ke mana saja seperti biasa. Perpindahan disimpan ke urutan proyek dsh, jadi menonaktifkan fitur ini mempertahankan urutan saat ini. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Proyek aktif di atas"></a> |
|
|
70
|
-
| **Filter proyek terbaru** | <a id="feature-recentprojects"></a>Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
|
|
74
|
+
| **Filter proyek terbaru** | <a id="feature-recentprojects"></a>Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Di **Pohon Ruang Kerja**, folder induk tetap terlihat selama ada proyek aktif di dalamnya, dan obrolan yang tidak aktif dalam 2 jam terakhir juga disembunyikan, sehingga hanya obrolan terbaru yang ditampilkan. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
|
|
71
75
|
| **Ciutkan semua proyek** | <a id="feature-collapseprojects"></a>Saat ada proyek yang terbuka di bilah samping, sebuah tombol muncul di samping opsi tampilan (ikon slider). Klik tombol itu untuk menutup semua proyek yang terbuka sekaligus, misalnya 3 proyek terbuka dari 5. Tombol itu tersembunyi lagi saat tidak ada proyek yang terbuka. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Tangkapan layar: Ciutkan semua proyek"></a> |
|
|
72
76
|
| **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> |
|
|
73
77
|
| **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> |
|
|
78
|
+
| **Buka obrolan yang menunggu saat tidak aktif** | <a id="feature-idleswitch"></a>Saat obrolan mengajukan pertanyaan atau menunggu persetujuan atau tinjauan rencana (titik oranye) dan Anda tidak menggunakan dsh selama 30 detik, dsh membuka obrolan itu. Jika ada beberapa obrolan yang menunggu, 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. 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> |
|
|
74
79
|
| **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> |
|
|
75
80
|
| **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> |
|
|
76
81
|
| **Pembaruan otomatis** | <a id="feature-autoupdate"></a>Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. Mulai ulang dsh untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. Saat dsh pertama kali dimulai dengan versi baru, jendela **Yang baru di Composer Plus N** menampilkan catatan rilis versi itu satu kali (dari pemeriksaan pembaruan yang sama, tanpa panggilan jaringan lain); **Tutup** atau `Esc` menutupnya. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
|
|
82
|
+
| **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> |
|
|
83
|
+
| **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> |
|
|
84
|
+
| **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> |
|
|
85
|
+
| **Konsol penyelamat** | <a id="feature-rescueconsole"></a>Setiap pencadangan juga menaruh konsol penyelamat di folder cadangan. Saat dsh ditutup atau tidak dapat dimulai, buka `Composer Plus Rescue` di folder itu (macOS: `Composer Plus Rescue.command`): menu di jendela terminal menampilkan, memeriksa, dan memulihkan cadangan, serta memeriksa dan memperbaiki log sesi. Konsol ini tidak membuka port jaringan. Pemulihan meminta Anda mengetik `RESTORE`, menyimpan dsh home Anda saat ini sebagai `.dsh.pre-restore-<waktu>`, mengembalikan rahasia yang disamarkan dari vault, dan memindahkan `cache/`, `dsh-runtimes/`, dan `node_modules` dari folder lama. Konsol ini bekerja tanpa dsh: konsol memakai Node.js, atau aplikasi DeepSeek Harness itu sendiri. Di komputer baru, salin folder dari **Untuk komputer lain** dan buka `Composer Plus Rescue` di sana. | <a href="assets/features/rescueConsole.webp"><img src="assets/features/rescueConsole.webp" width="160" alt="Tangkapan layar: Konsol penyelamat"></a> |
|
|
77
86
|
|
|
78
87
|
<!-- END GENERATED FEATURES -->
|
|
79
88
|
|
|
@@ -117,7 +126,7 @@ Setiap paket berisi 3.280 teks: setiap teks UI dsh `0.2.0-rc.2` dan `0.2.1-rc.2`
|
|
|
117
126
|
| `Esc` | kotak pesan kosong dengan prediksi | sembunyikan prediksi |
|
|
118
127
|
| `Cmd/Ctrl+Z` | kotak pesan, setelah **Sempurnakan prompt** | kembalikan teks yang Anda ketik |
|
|
119
128
|
| `Esc` | kotak pesan, saat **Sempurnakan prompt** berjalan | batalkan penyempurnaan |
|
|
120
|
-
| `Enter` / `Esc` | pesan antrean
|
|
129
|
+
| `Enter` / `Esc` | editor pesan antrean | simpan / batalkan edit |
|
|
121
130
|
| `Cmd+F` di Mac, `Ctrl+F` di Windows dan Linux | obrolan yang terbuka | buka **Cari di obrolan** |
|
|
122
131
|
| `Enter` / `Shift+Enter`, `↓` / `↑` | kotak **Cari di obrolan** | kecocokan berikutnya / sebelumnya |
|
|
123
132
|
| `Esc` | kotak **Cari di obrolan** | tutup kotak |
|
|
@@ -151,6 +160,9 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
151
160
|
- **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).
|
|
152
161
|
- **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).
|
|
153
162
|
- **Pemeriksaan tujuan:** hanya berjalan saat agen menandai `/goal` sebagai selesai dalam putaran otomatis (atau saat Anda mengklik **Jalankan sekarang**). Bagian Host menjalankan perintah pengujian di folder obrolan dengan mode sandbox obrolan itu (seperti alat `bash` milik dsh sendiri: kebijakan akses file yang sama; jika sandbox itu tidak dapat dimulai, pengujian tidak berjalan dan pemeriksaan gagal). Untuk menemukan perintahnya, bagian ini hanya membaca `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml`, dan `pytest.ini`, sebagai file biasa di dalam folder (tanpa symlink ke luar folder, tanpa FIFO). Lalu bagian ini mengirim tujuan, obrolan sejak tujuan dimulai (pesan Anda, balasan agen, panggilan alat yang dipotong menjadi 1.000 karakter, dan 2.000 karakter terakhir dari setiap hasil alat; tanpa penalaran, tanpa langkah yang ditarik oleh putar balik; paling banyak sekitar 60.000 karakter, bagian terbaru), `git status --short`, dan bagian akhir keluaran pengujian ke model yang dipilih di **Pemeriksaan tujuan** (secara default model obrolan itu sendiri), sebagai satu permintaan tanpa alat. Keluaran alat dapat berisi apa yang dibaca agen, jadi permintaan ini dapat memuat bagian dari file Anda, sama seperti obrolan itu sendiri. Tidak ada yang ditulis ke obrolan atau proyek. Perintah pengujian Anda, batas, hasil terakhir (dengan bagian akhir keluarannya), dan pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (file hanya untuk pemilik, 500 obrolan terbaru).
|
|
163
|
+
- **Memori proyek:** nonaktif sampai Anda mengaktifkannya. Saat aktif, setelah setiap giliran selesai di obrolan tingkat atas, bagian Host mengirim pesan baru obrolan itu sejak tinjauan terakhir (pesan Anda dan balasan teks agen; tanpa keluaran alat, penalaran, konteks tersembunyi, atau pesan yang ditarik oleh putar balik; salinan obrolan induk pada obrolan cabang tidak ikut; paling banyak sekitar 16.000 karakter) dan catatan yang tersimpan ke model obrolan itu sendiri, sebagai satu permintaan tanpa alat. Catatan berupa file Markdown di `$DSH_HOME/storages/dsh-composer-plus/memory/` (file khusus pemilik): `projects/<id>/` untuk setiap folder proyek (`<id>` adalah hash dari path asli folder; `project.json` mencatat foldernya), `global/`, `journal.jsonl` (setiap perubahan dengan baris sebelum dan sesudahnya), dan `reviewed.json` (sampai mana setiap obrolan dibaca). Tidak ada yang ditulis ke folder proyek. Catatan yang tampak seperti kunci, token, kata sandi, atau nomor identitas ditolak. Catatan sebuah proyek masuk ke prompt sistem setiap obrolan baru di folder itu, sehingga ikut ke model pada setiap permintaan obrolan itu. Sakelarnya ada di `memory.json` di tempat yang sama.
|
|
164
|
+
- **Pencadangan:** tidak ada yang keluar dari komputer Anda. Arsip disimpan di `~/Desktop/dsh-backups` (file hanya untuk pemilik). Rahasia tidak ada di dalam arsip: file kredensial (`.credentials.yaml`, `.env`), file kunci (`.pem`, `.key`, `.p12`, `.pfx`), serta nilai pengaturan token, secret, password, dan kunci API di file yml disamarkan; salinan aslinya tetap ada di `composer-plus-vault/<archive>/` di folder yang sama (hanya untuk pemilik), hanya di komputer ini. **Untuk komputer lain** tidak menyalin vault: masukkan lagi rahasia itu di sana. Log obrolan, pengaturan, dan isi dsh home lainnya masuk ke arsip apa adanya: jaga folder itu tetap privat, sama seperti `$DSH_HOME` itu sendiri. Pencadangan membaca file dengan `O_NOFOLLOW | O_NONBLOCK`; symlink disimpan sebagai tautan (tidak pernah diikuti), dan FIFO atau perangkat dilewati. Sakelar dan pengaturan pencadangan otomatis ada di `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json`, sakelar konsol penyelamat di `rescue-console.json`, dan selama dsh berjalan, `running/host-<pid>.json` menyebut setiap proses dsh (konsol penyelamat membaca file-file itu untuk menolak pemulihan).
|
|
165
|
+
- **Konsol penyelamat:** menu terminal; konsol ini tidak membuka port jaringan. Pemulihan hanya menulis ke folder baru di sebelah dsh home (file dengan `O_EXCL | O_NOFOLLOW`, symlink paling akhir dan tidak pernah diikuti) dan menolak arsip dengan nama yang tidak aman (`..`, jalur absolut), perangkat atau FIFO, lebih dari satu folder teratas, atau entri di bawah tautan.
|
|
154
166
|
|
|
155
167
|
## Pemecahan masalah
|
|
156
168
|
|
|
@@ -165,11 +177,15 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
165
177
|
- **Hapus menyatakan dsh lain sedang membuka obrolan ini:** dsh kedua pada dsh home yang sama memegang kunci obrolan. Tutup jendela atau dsh itu, lalu hapus lagi. Sementara itu, obrolan tetap diarsipkan.
|
|
166
178
|
- **iPhone saya tidak dapat terhubung setelah saya mengaktifkan "Tailscale only":** Tailscale harus aktif di Mac dan di iPhone. Panel Koneksi seluler memberi peringatan saat Tailscale nonaktif di Mac. Log akses menampilkan setiap percobaan yang ditolak beserta alasannya.
|
|
167
179
|
- **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).
|
|
180
|
+
- **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.
|
|
168
181
|
- **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.
|
|
169
182
|
- **Tidak ada label branch di baris obrolan:** 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).
|
|
170
183
|
- **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.
|
|
171
184
|
- **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).
|
|
172
|
-
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.
|
|
185
|
+
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.16.0`), lihat catatan pemasangan di atas.
|
|
186
|
+
- **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.
|
|
187
|
+
- **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.
|
|
188
|
+
- **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.
|
|
173
189
|
|
|
174
190
|
## Batasan
|
|
175
191
|
|
|
@@ -177,6 +193,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
177
193
|
- **Ide fitur** menyimpan kartu di memori untuk setiap obrolan sampai dsh atau halaman dimuat ulang; setelah itu **Sarankan fitur** bertanya lagi ke model. Kartu muncul dalam bahasa UI yang dipakai dsh saat Anda mengklik. Setelah Anda mengganti bahasa, kartu yang sudah ada di tumpukan tetap memakai bahasanya, dan **Ide lainnya** memakai bahasa yang baru. Model hanya melihat ringkasan proyek yang singkat, bukan kodenya, jadi sebuah ide bisa saja mengulang sesuatu yang sudah ada di proyek: lewati saja. Obrolan baru berjalan dalam mode rencana hanya jika profil memiliki perintah `/plan` dsh; jika tidak, ide dikirim sebagai pesan pertama biasa. Daftar **Nanti** terikat pada jalur folder obrolan: folder yang sama yang dibuka melalui symlink memiliki daftar sendiri. Daftar ini menyimpan paling banyak 50 ide per proyek (hapus satu untuk menambah lagi) dan menyimpan judul yang sama hanya sekali. Menyeret kartu hanya memutuskan kiri atau kanan; gunakan **↓** untuk menyimpannya dan **▶** untuk langsung membuatnya. Pengulangan hanya dikenali dari judulnya: model masih bisa menyarankan ide lama dengan nama baru; lewati saja. Jika model hanya menjawab dengan ide lama, tidak ada yang baru yang muncul: klik lagi. Topik fokus yang sempit membuat hal ini lebih mungkin terjadi; gunakan topik yang lebih luas atau kosongkan topiknya. Topik fokus tetap ada di kolom untuk setiap obrolan sampai dsh atau halaman dimuat ulang.
|
|
178
194
|
- **Ekspor obrolan sebagai Markdown** hanya berisi pesan Anda sendiri dan balasan teks asisten: panggilan alat beserta outputnya, proses berpikir, gambar (ditandai dengan baris `[image]`), konteks tersembunyi, dan pesan yang dikeluarkan oleh Putar balik giliran atau dsh-rewind-plugin tidak disertakan. Balasan dalam satu giliran digabung menjadi satu bagian. Satu ekspor berisi paling banyak sekitar 4 juta karakter; obrolan yang lebih panjang hanya diekspor bagian pertamanya, dengan sebuah catatan.
|
|
179
195
|
- **Lanjutkan setelah mulai ulang** melanjutkan giliran; fitur ini tidak memutar ulang giliran itu. Panggilan alat yang sedang berjalan saat dsh ditutup berakhir dengan hasil “outcome unknown” (hasil tidak diketahui) dari dsh. Model diberi tahu agar tidak mengulang pekerjaan yang sudah selesai, tetapi perintah yang tidak aman dijalankan dua kali tetap bisa berjalan lagi. Subagen, persetujuan, dan pertanyaan yang masih terbuka tidak dipulihkan: obrolan induknya berlanjut dan bertanya lagi. Paling banyak 20 obrolan berlanjut setiap kali dsh dimulai.
|
|
196
|
+
- **Lanjutkan setelah mulai ulang** dan antrean: dsh mengosongkan antrean obrolan saat ditutup. Plugin mengembalikan pesan antrean Anda dari log obrolan, dengan urutan, suntingan, gambar, dan file-nya; pesan itu berjalan setelah giliran yang dilanjutkan. Hanya obrolan yang dilanjutkan yang mendapatkan antreannya kembali (sakelar aktif, ditutup saat giliran berjalan). dsh mencatat penghapusan pesan antrean terakhir oleh Anda dengan cara yang sama: jika Anda menghapusnya dan dsh ditutup sebelum langkah berikutnya dimulai, pesan itu kembali.
|
|
180
197
|
|
|
181
198
|
- **Pencarian isi** adalah pencarian bawaan dsh, jadi batasannya sama dengan batasan dsh. Pencarian ini hanya mencakup pesan pengguna dan asisten: bukan output alat (perintah, isi file, hasil), bukan penalaran, dan tidak ada filter untuk pesan pengguna, asisten, atau alat. Pencarian mencocokkan kata utuh, bukan bagian kata (`deploy` tidak menemukan `deployment`); huruf beraksen cocok dengan huruf tanpa aksen (`seker` menemukan `şeker`). Satu baris per obrolan, dengan cuplikan 240 karakter dari dsh, paling banyak 20 baris.
|
|
182
199
|
- Biaya **Pencarian isi**, diukur pada salinan 247 log obrolan nyata (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB): pencarian pertama setelah dsh dimulai membangun indeks dalam sekitar 15 detik. Selama waktu itu, Host dsh tidak menjawab apa pun selama sekitar 7 detik, jadi obrolan lain berhenti melakukan streaming sesaat (halamannya sendiri tidak membeku). Memori Host bertambah sekitar 1,1 GB pada puncaknya; satu menit kemudian, memori masih sekitar 0,5–0,6 GB di atas awal, sampai dsh ditutup. File indeks berukuran sekitar 165 MB. Pencarian berikutnya memakan waktu sekitar 0,5 detik. Setelah mulai ulang, pencarian pertama memakan waktu sekitar 1 detik (hanya obrolan baru atau yang berubah yang ditambahkan) dan menambah sekitar 70 MB. Nonaktifkan fitur ini jika memori komputer Anda kecil.
|
|
@@ -187,19 +204,25 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
187
204
|
- 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.
|
|
188
205
|
- **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.
|
|
189
206
|
- **Pertahankan fokus composer** mengembalikan fokus hanya setelah perintah `/` atau skill. Saat dsh memproses perintah, kotak pesan tetap hanya-baca selama beberapa milidetik, jadi tombol yang ditekan dalam waktu itu hilang. Jika menu `/` dsh masih terbuka, `Enter` memilih baris yang disorot dan tidak mengirim.
|
|
190
|
-
- **
|
|
207
|
+
- **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.
|
|
208
|
+
- **Koneksi seluler** hanya berfungsi di macOS (memakai `en0`, `openssl`, `swift`, dan `dns-sd`). Fitur ini memakai port tetap 19390 dan 19391, jadi hanya satu dsh di setiap Mac yang dapat menjalankannya pada satu waktu (setiap Mac adalah satu entri dalam daftar Mac di ponsel). Ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang (tidak ada layanan push). Tether hanya mengirimnya setelah Anda mengaktifkan "Settings → Notifications → Send notifications" di Tether. Opsi ini nonaktif secara default, 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 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.
|
|
191
209
|
- 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.
|
|
192
210
|
- **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.
|
|
193
|
-
- **Edit pesan antrean di tempat**
|
|
211
|
+
- **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).
|
|
194
212
|
- **Ulangi** tidak pernah mengubah obrolan yang diputar balik: fitur ini memulai obrolan baru dari tepat sebelum putar balik (pencabangan bawaan dsh, konteks model yang sama), jadi obrolan baru memiliki id dan judul baru. Hanya putar balik terbaru dari sebuah obrolan yang dapat diulangi, satu kali, dan hanya selama belum ada apa pun sesudahnya (pesan baru mengakhiri tawaran ini). File yang Anda ubah sesudah putar balik dipertahankan, kecuali Anda mencentang kotak yang menimpanya. Ulangi memerlukan snapshot yang disimpan oleh putar balik (jendela 50 entri yang sama); putar balik yang dibuat sebelum versi ini, atau dengan **Obrolan saja**, hanya mengembalikan pesan.
|
|
213
|
+
- 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.
|
|
195
214
|
- **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.
|
|
196
215
|
- **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`).
|
|
197
216
|
- **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.
|
|
198
|
-
- **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.
|
|
217
|
+
- **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. Jika baris proyek di atas obrolan bernama sama dengan branch-nya (misalnya folder “Branch per obrolan”), baris obrolan tidak menampilkan label, tetapi “Dalam satu daftar” tetap menampilkannya.
|
|
218
|
+
- **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.
|
|
219
|
+
- **Branch per obrolan**: saat folder branch sebuah obrolan (`<project>/.worktrees/<name>`) dihapus, misalnya saat agen obrolan itu sendiri menghapus worktree dan branch-nya, langkah berikutnya dari obrolan memindahkan obrolan keluar dari folder itu. Proyek folder branch hilang dari bilah samping, dan obrolan tampil di bawah Tanpa grup dan tetap terbuka. Di dsh 0.2.1 dan yang lebih baru, obrolan berlanjut di folder utama proyek, dan model mendapat catatan tentang folder baru. Di dsh 0.2.0, obrolan tetap memakai folder yang dihapus: perintah di sana gagal sampai Anda memulai obrolan baru. Pemindahan hanya terjadi pada langkah berikutnya dari obrolan, jadi proyek dari branch yang dihapus dan tidak dipakai obrolan mana pun tetap ada di bilah samping: hapus dengan menu proyek dsh sendiri. Selama obrolan dipindahkan, **Branch baru** di repositori yang sama menjawab "coba lagi". Saat sakelar mati, galat dsh sendiri muncul lagi ("working-directory: directory does not exist").
|
|
220
|
+
- **Branch di pohon ruang kerja** menulis ke git tanpa klik: saat memindahkan obrolan, fitur ini mengembalikan folder proyek ke branch sebelumnya (`git switch`) dan menambahkan worktree (`git worktree add`). Fitur ini tidak pernah menghapus branch, worktree, atau file. dsh tidak bisa mengganti folder sebuah obrolan, jadi obrolan yang dipindahkan adalah salinan (fork milik dsh sendiri, dengan id baru) dan obrolan lama diarsipkan. Salinan melanjutkan tugas yang berhenti; panggilan alat yang sedang berjalan saat branch muncul berakhir dengan penolakan, dan agen menjalankannya lagi di folder baru. Tujuan (goal) obrolan lama tidak ikut pindah. Hanya obrolan yang foldernya adalah folder utama repositori yang dipindahkan, dan hanya untuk branch yang dibuatnya dan dipindahinya pada giliran itu (`git switch -c`, `git checkout -b`): branch yang dibuat hanya dengan `git branch`, folder dengan perubahan yang belum di-commit, worktree tertaut, atau subfolder tidak memindahkan apa pun. Di pohon hanya tampil worktree yang langsung berada di `<project>/.worktrees/` dan punya branch; worktree terlepas (detached) atau di tempat lain tidak tampil. Salinan terbuka sendiri hanya jika obrolannya adalah obrolan yang sedang terbuka (plugin membacanya dari baris bilah samping dsh); jika tidak, salinan ada di proyek branch.
|
|
199
221
|
- **Cari di obrolan** hanya mencari apa yang ditampilkan halaman: pesan dan balasan yang sudah dimuat (gulir ke atas atau klik **Muat yang lebih lama** untuk yang lebih lama), bukan langkah alat yang tertutup dan bukan teks yang terlipat di dalam output alat. Fitur ini menghitung paling banyak 2.000 kecocokan (lalu "2000+"). Fitur ini memakai API sorotan browser (Chromium 105 dan yang lebih baru; aplikasi desktop memilikinya): di browser yang lebih lama, jumlah dan perpindahan tetap berfungsi tanpa warna. `Cmd+F` di Mac (`Ctrl+F` di Windows dan Linux) hanya membukanya saat ada obrolan di layar; di tempat lain, pencarian bawaan browser berfungsi seperti biasa. Di Mac, `Ctrl+F` tetap menjalankan fungsi macOS-nya di kolom teks (kursor maju satu karakter).
|
|
222
|
+
- **Buka obrolan yang menunggu saat tidak aktif** hanya mengetahui apa yang dilihat jendela dsh: pekerjaan di aplikasi lain tidak dihitung, jadi saat dsh berada di latar belakang, fitur ini dapat membuka obrolan yang menunggu setelah 30 detik. dsh tidak dibawa ke depan. Membaca tanpa menekan tombol, mengklik, atau menggerakkan mouse dihitung sebagai tidak aktif. Fitur ini hanya melihat obrolan dengan titik oranye dsh (pertanyaan, persetujuan, atau tinjauan rencana); permintaan subagen tampil di obrolan induknya. Selama obrolan yang menunggu ada di layar, obrolan lain tidak dibuka; obrolan yang Anda tinggalkan tanpa jawaban dapat terbuka lagi setelah 30 detik berikutnya tanpa penggunaan. Waktu 30 detik tidak dapat diubah.
|
|
200
223
|
- Notifikasi yang dikirim sebelum mulai ulang hanya membawa dsh ke depan saat diklik.
|
|
201
224
|
- Proyek aktif dipindahkan dengan urutan proyek tersimpan milik dsh, jadi urutan baru tetap ada setelah mulai ulang. Obrolan di luar proyek mana pun ("Tanpa grup") tidak dapat dipindahkan; dsh selalu menampilkannya paling akhir.
|
|
202
|
-
- dsh tidak memiliki titik ekstensi di menu opsi tampilan bilah samping, jadi opsi proyek terbaru ditambahkan ke menu bawaan dsh. Jika pembaruan dsh mengubah menu itu, opsi ini tidak ditampilkan dan semua proyek tetap terlihat. Filter bekerja pada baris proyek, jadi **Dalam satu daftar** tidak difilter.
|
|
225
|
+
- dsh tidak memiliki titik ekstensi di menu opsi tampilan bilah samping, jadi opsi proyek terbaru ditambahkan ke menu bawaan dsh. Jika pembaruan dsh mengubah menu itu, opsi ini tidak ditampilkan dan semua proyek tetap terlihat. Filter bekerja pada baris proyek, jadi **Dalam satu daftar** tidak difilter. Dalam **Pohon Ruang Kerja**, folder induk tetap terlihat selama ada proyek aktif di dalamnya, dan baris obrolan yang tidak aktif dalam 2 jam terakhir juga disembunyikan; dalam **Ruang Kerja**, hanya baris proyek yang difilter. Filter membaca tampilan yang dipakai dsh dari pengaturan tampilan yang disimpan dsh (bukan API publik); jika pembaruan dsh mengganti namanya, **Pohon Ruang Kerja** difilter seperti **Ruang Kerja**. Status proyek membaca pengaturan yang sama: dalam **Pohon Ruang Kerja**, baris folder induk juga menghitung obrolan dari proyek di dalamnya; jika dsh mengganti nama pengaturan itu, setiap baris hanya menampilkan obrolannya sendiri. **Menurut status** memiliki batasan serupa: dsh tidak memiliki slot urutan, jadi item dan urutan baris menempel ke markup menu dan daftar dsh.
|
|
203
226
|
- dsh juga tidak memiliki menu baris proyek atau slot header Ruang kerja. **Salin jalur** menemukan baris proyek melalui markup baris dsh, dan **Ciutkan semua proyek** masuk ke header dsh lalu menutup setiap proyek yang terbuka dengan klik yang sama seperti pada baris proyek. Jika pembaruan dsh mengubah markup itu, klik kanan menampilkan menu browser dan tombolnya tidak ditampilkan.
|
|
204
227
|
- dsh juga tidak memiliki titik ekstensi di menu proyek obrolan baru, jadi kotak **Cari proyek** dan urutan A–Z menempel ke markup menu dsh. Jika pembaruan dsh mengubah markup itu, menu tampil seperti yang digambar dsh: dalam urutan tersimpan, tanpa kotak pencarian. Urutan A–Z hanya tampilan: urutan ini tidak mengubah urutan proyek tersimpan milik dsh.
|
|
205
228
|
- dsh juga tidak punya titik ekstensi yang memilih tempat **Sesi Baru** terbuka. **Ruang kerja default untuk Sesi Baru** membungkus metode dsh yang bukan API publik (`startSession` dari layanan ruang kerja dsh). Jika pembaruan dsh mengganti namanya, **Sesi Baru** terbuka di tempat yang dipilih dsh (proyek yang terbuka atau yang terbaru). Setiap panggilan yang tidak menyebut proyek memakai default: tombol sidebar, pintasannya, logo, dan juga **Baru** di halaman **Tugas otomatisasi**. dsh tetap membuka obrolan terakhir saat mulai. Folder umum dibuat dan ditambahkan ke proyek Anda pada penggunaan pertama; di Windows atau Linux dengan folder Documents yang dipindahkan, folder ini bisa berbeda dari folder milik dsh.
|
|
@@ -207,6 +230,12 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
207
230
|
- **Lengkapi saat mengetik** menampilkan teksnya melalui petunjuk kotak pesan milik dsh sendiri (gaya `--dsh-composer-hint` yang dipakai dsh untuk petunjuk argumen perintah garis miring). Fitur ini tidak berjalan untuk perintah garis miring, pesan dengan chip file atau simbol, atau saat kursor tidak berada di akhir pesan. Jika pembaruan dsh mengubah gaya itu, pelengkapan tidak ditampilkan. Setiap jeda saat Anda mengetik memakai satu panggilan model.
|
|
208
231
|
- **Sempurnakan prompt** hanya melihat ringkasan proyek yang singkat, jalur yang berubah, dan jalur yang namanya cocok dengan kata-kata Anda: bukan kodenya sendiri. Jadi fitur ini bisa melewatkan file yang tepat, dan hanya menyebut jalur yang diberikan kepadanya. Baca teks baru sebelum Anda mengirimnya. Fitur ini tidak berjalan untuk perintah garis miring atau pesan dengan chip file atau simbol (teks baru adalah teks biasa, jadi chip itu akan hilang), dan sebuah pesan paling banyak 8.000 karakter. Gambar tetap terlampir: hanya teksnya yang berubah. Setiap klik memakai satu panggilan model; model yang kuat bisa memerlukan satu menit (`Esc` membatalkannya).
|
|
209
232
|
- **Pemeriksaan tujuan** hanya memeriksa penyelesaian yang dibuat agen dalam putaran tujuan otomatis: penyelesaian yang Anda minta di obrolan, `/goal`, dan bilah tujuan tidak diperiksa. Agen dapat mengubah sendiri pengujian atau file perintah pengujian; pemeriksa membaca obrolan dan dapat melihatnya, tetapi bisa salah ke dua arah ("belum selesai" yang salah memakai satu putaran lagi; "selesai" yang salah menutup tujuan). Pemeriksa melihat obrolan dan `git status`, bukan kodenya sendiri. Satu kali menjalankan pengujian hanya dipakai ulang jika langkah terbaru agen yang dapat mengubah file adalah eksekusi `bash` milik agen sendiri yang lulus, dengan perintah yang persis sama di folder yang sama; perintah dengan pipe (`| tail`) atau `&&` tidak dipakai ulang. Anggaran diukur saat sebuah giliran berakhir, jadi satu giliran bisa melampauinya. Hanya panggilan model milik obrolan itu sendiri yang dihitung (bukan milik subagennya). `update_goal` menunggu selama pemeriksaan berjalan (pengujian paling lama 15 menit, pemeriksa paling lama 3 menit). Obrolan hasil pencabangan mendapat id obrolan baru, jadi dimulai tanpa perintah pengujian dan batas milik obrolan induknya. Setiap penyelesaian yang mencapai pemeriksa memakai satu panggilan model.
|
|
233
|
+
- **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.
|
|
234
|
+
- **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; buka file-nya untuk memeriksa, lalu edit atau hapus secara manual saat dsh tertutup. 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.
|
|
235
|
+
- **Pencadangan** memakai satu folder tetap, `~/Desktop/dsh-backups` (default dsh-backup, sehingga arsipnya tetap dapat dipakai); tidak ada pengaturan untuk folder lain. Ukuran arsip kurang lebih sama dengan dsh home tanpa `cache/` dan `dsh-runtimes/` (diukur: file sebesar 1,6 GB menghasilkan arsip 830 MB dalam sekitar 30 detik di Apple Silicon; dsh tetap responsif). File yang berubah saat dibaca disimpan seperti saat pencadangan membukanya, sehingga log obrolan yang terbuka dapat berakhir dengan catatan yang terpotong, yang diperbaiki dsh pada penulisan berikutnya. Penyamaran menemukan rahasia di file yml dari nama kuncinya dalam satu baris (`token:`, `apiKey:`, …); rahasia dalam flow map (`{token: x}`), dalam daftar di bawah kunci seperti itu, dalam file JSON (misalnya `apiKey` milik server MCP di file `.json`), atau dengan nama lain tetap ada di arsip. Arsip per jenis milik dsh-backup (`dsh-t-…`) tidak dicantumkan. **Untuk komputer lain** menyalin arsip (klon di APFS: tanpa ruang tambahan); vault tidak ikut. **Cadangkan sekarang** tidak menghapus cadangan apa pun. Pencadangan otomatis menyimpan cadangan terbaru yang dibuat Composer Plus (pengaturan **Simpan** di **Pencadangan otomatis**) dan menghapus cadangannya yang lebih lama; snapshot sebelum peningkatan dihitung terpisah (2 yang terbaru tetap ada). Arsip dsh-backup tidak pernah dihapus: hapus arsip itu dengan **Hapus**. Selama dsh-backup masih terpasang, dsh-backup menghitung arsip Composer Plus dalam jumlah simpanannya sendiri dan dapat menghapusnya.
|
|
236
|
+
- **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.
|
|
237
|
+
- **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.
|
|
238
|
+
- **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.
|
|
210
239
|
- 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).
|
|
211
240
|
|
|
212
241
|
## Pertanyaan umum
|
|
@@ -235,9 +264,19 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
235
264
|
|
|
236
265
|
**Bisakah agen berhenti menandai pekerjaannya sendiri sebagai selesai, seperti loop pemeriksa dalam loop engineering?** Bisa, dengan **Pemeriksaan tujuan** (aktif secara default): mulai tujuan dengan `/goal`. Saat agen mengatakan tujuan sudah selesai, pengujian proyek dijalankan dan satu panggilan model independen memeriksa tujuan terhadap obrolan; jika salah satunya gagal, tujuan tetap terbuka dan agen membaca alasannya. Atur perintah pengujian Anda sendiri, batas waktu, atau batas token dengan **Edit** di baris **Pemeriksaan tujuan** di bawah tujuan.
|
|
237
266
|
|
|
267
|
+
**Bisakah agen mengingat preferensi saya antar-obrolan, seperti memori DS Bot?** Bisa, dengan **Memori proyek** (nonaktif secara default): aktifkan di **Pengaturan → Composer Plus**. Setelah setiap giliran, preferensi dan keputusan Anda yang bertahan lama disimpan sebagai catatan singkat untuk proyek obrolan itu, dan setiap obrolan baru di proyek itu membacanya. Minta agen mengingat sesuatu, dan agen langsung menyimpannya.
|
|
268
|
+
|
|
269
|
+
**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.
|
|
270
|
+
|
|
271
|
+
**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.
|
|
272
|
+
|
|
273
|
+
**Bagaimana cara memindahkan dsh ke komputer baru?** Di komputer lama: **Pencadangan** → **Untuk komputer lain** di sebelah sebuah cadangan. Salin folder itu ke komputer baru, pasang dsh di sana, keluar dari dsh, buka `Composer Plus Rescue` di folder salinan, lalu pulihkan. Masukkan lagi kunci API Anda (kunci itu tetap ada di komputer lama).
|
|
274
|
+
|
|
275
|
+
**Sebuah obrolan tidak bisa dibuka setelah crash. Bisakah saya memperbaikinya?** **Pengaturan → Composer Plus → Pemeriksaan log sesi → Periksa log sesi**. Obrolan yang rusak kembali dari cadangan terbaru dengan **Perbaiki dari cadangan** (pesan setelah cadangan itu hilang).
|
|
276
|
+
|
|
238
277
|
**Bagaimana cara mengubah urutan pesan dalam antrean di dsh?** Seret pegangan ⠿ pada pesan dalam antrean, atau fokuskan pegangan itu lalu tekan `↑` / `↓`.
|
|
239
278
|
|
|
240
|
-
**Bagaimana cara memperbaiki salah ketik di pesan dalam antrean?** Klik dua kali pesan di antrean, ubah teksnya, lalu tekan `Enter` (`Esc` membatalkan). Pesan tetap di tempatnya dalam antrean.
|
|
279
|
+
**Bagaimana cara memperbaiki salah ketik di pesan dalam antrean?** Klik dua kali pesan di antrean, ubah teksnya, lalu tekan `Enter` (`Esc` membatalkan). Pesan tetap di tempatnya dalam antrean. Di sana Anda juga dapat menghapus gambar dan file-nya, atau menambahkan yang baru.
|
|
241
280
|
|
|
242
281
|
**Bagaimana cara menghapus semua titik belum dibaca di satu proyek sekaligus?** Bilah samping → tombol **…** proyek → **Tandai semua sudah dibaca**.
|
|
243
282
|
|
|
@@ -265,13 +304,17 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
265
304
|
|
|
266
305
|
**Bagaimana cara mendapatkan notifikasi macOS / Windows saat tugas dsh selesai atau memerlukan persetujuan?** Biarkan **Notifikasi latar belakang** aktif (default) dan izinkan notifikasi untuk DeepSeek Harness di pengaturan OS.
|
|
267
306
|
|
|
307
|
+
**Bisakah dsh membuka sendiri obrolan yang mengajukan pertanyaan kepada saya?** Ya, dengan **Buka obrolan yang menunggu saat tidak aktif** (aktif secara default): saat obrolan menunggu jawaban, persetujuan, atau tinjauan rencana dan Anda tidak menggunakan dsh selama 30 detik, dsh membukanya. Selama Anda mengetik, menggulir, atau menggerakkan mouse, fitur ini menunggu.
|
|
308
|
+
|
|
268
309
|
**Bagaimana cara mengganti antarmuka DeepSeek Harness ke bahasa Turki, Spanyol, Jepang…?** Pengaturan → Composer Plus → **Bahasa aplikasi**.
|
|
269
310
|
|
|
270
311
|
**Bagaimana cara memakai dsh dari iPhone saya?** Bangun aplikasi Tether dari `tether/ios` (Xcode), aktifkan **Pengaturan → Composer Plus → Koneksi seluler (iPhone)**, klik **Koneksi seluler** di kiri bawah, pindai kode QR (Kamera iPhone atau **Scan code** di Tether), ketuk **Connect**, lalu klik **Approve**. Saat jauh dari rumah, gunakan Tailscale di kedua perangkat.
|
|
271
312
|
|
|
272
313
|
**Bagaimana agar Sesi Baru selalu terbuka di proyek yang sama?** Pengaturan → Composer Plus → **Ruang kerja default untuk Sesi Baru** → **Buka Sesi Baru di** → pilih proyeknya. `+` di samping proyek lain tetap membuka proyek itu.
|
|
273
314
|
|
|
274
|
-
**Bagaimana cara mengerjakan beberapa fitur dari satu proyek sekaligus, masing-masing di branch-nya sendiri?** Dengan **Branch per obrolan**: obrolan baru
|
|
315
|
+
**Bagaimana cara mengerjakan beberapa fitur dari satu proyek sekaligus, masing-masing di branch-nya sendiri?** Dengan **Branch per obrolan**: di layar obrolan baru, tombol branch menampilkan **Branch baru** secara default: kirim pesan pertama. Setiap obrolan mendapat branch dan folder worktree sendiri, beserta `.env` dan `node_modules` Anda jika `.worktreeinclude` mencantumkannya. Header obrolan menampilkan branch tempat Anda berada.
|
|
316
|
+
|
|
317
|
+
**Bisakah bilah samping menampilkan setiap branch sebuah proyek dan memindahkan obrolan saya saat agen membuat branch?** Bisa, dengan **Branch di pohon ruang kerja** (mati secara default): nyalakan di Pengaturan → Composer Plus, lalu pilih **Opsi tampilan** → **Pohon Ruang Kerja** di dsh. Setiap branch yang punya worktree di `<project>/.worktrees/` tampil di dalam proyeknya. Saat Anda meminta agen di folder proyek membuat branch dan bekerja di sana, dan folder tidak punya perubahan yang belum di-commit, obrolan pindah sendiri ke branch itu. Hapus folder branch dan branch keluar dari daftar; obrolannya pindah ke **Tanpa grup**.
|
|
275
318
|
|
|
276
319
|
**Bisakah saya mengirim foto dari iPhone?** Bisa. Di obrolan Tether, ketuk **+** di samping kolom pesan → Camera, Photos (hingga 4) atau Paste image. Foto dikirim ke obrolan di Mac sebagai lampiran pesan Anda, jadi model dapat melihatnya.
|
|
277
320
|
|
|
@@ -287,6 +330,7 @@ PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh
|
|
|
287
330
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
288
331
|
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
289
332
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
333
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
|
|
290
334
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
291
335
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
292
336
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
@@ -297,10 +341,14 @@ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/
|
|
|
297
341
|
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
298
342
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
299
343
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
344
|
+
# Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
|
|
345
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
|
|
300
346
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
301
347
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
302
348
|
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
303
349
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
350
|
+
# Resume after restart with a queue (fake model, real quit and start): text, image, file, a drag and an edit come back in order
|
|
351
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-resume-queue.mjs /path/to/dsh/lib/bin.js
|
|
304
352
|
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
|
|
305
353
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
306
354
|
# Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
|
|
@@ -315,8 +363,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path
|
|
|
315
363
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
|
|
316
364
|
# Mark all as read, Copy message link, Edit queued message in place, Redo, Changes → This chat and Hide whitespace (fake model, made-up git projects) + their thumbnails
|
|
317
365
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-six-features.mjs /path/to/dsh/lib/bin.js
|
|
318
|
-
# Changes Tree (fake model, made-up git history): branch
|
|
366
|
+
# Changes Tree (fake model, made-up git history): the branch map (counts, colors, arrows), a branch's commits, commit files and diffs, Merged and Waiting files, back marks the box + its thumbnail
|
|
319
367
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
|
|
368
|
+
# Branches in the workspace tree (fake model, made-up git project): a worktree becomes a project, the agent's new branch moves the chat, a deleted folder leaves the tree + its thumbnail
|
|
369
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-branch-tree.mjs /path/to/dsh/lib/bin.js
|
|
320
370
|
# Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
|
|
321
371
|
PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
|
|
322
372
|
# Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
|
|
@@ -327,6 +377,9 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path
|
|
|
327
377
|
# Queue drag-and-drop and Continue with a queued message (slow fake model)
|
|
328
378
|
PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
|
|
329
379
|
PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
|
|
380
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
381
|
+
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
382
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
330
383
|
```
|
|
331
384
|
|
|
332
385
|
```sh
|