dsh-composer-plus 1.11.3 → 1.13.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 +81 -42
- package/README.es.md +81 -42
- package/README.fr.md +81 -42
- package/README.hi.md +81 -42
- package/README.id.md +81 -42
- package/README.ja.md +81 -42
- package/README.ko.md +81 -42
- package/README.md +81 -42
- package/README.pt-BR.md +81 -42
- package/README.ru.md +81 -42
- package/README.tr.md +81 -42
- package/README.vi.md +81 -42
- package/README.zh.md +81 -42
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/copyMessageLink.webp +0 -0
- package/assets/features/markProjectRead.webp +0 -0
- package/assets/features/promptImprove.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/client.js +1215 -144
- package/index.js +696 -116
- package/package.json +8 -3
- package/tether/gateway/admin.html +47 -3
- package/tether/gateway/server.mjs +114 -35
package/README.id.md
CHANGED
|
@@ -14,7 +14,7 @@ Fitur kenyamanan bergaya Codex untuk UI desktop dan web [DeepSeek Harness](https
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness dengan Composer Plus: proyek yang sedang berjalan menampilkan spinner di bilah samping, dan panel Perubahan menampilkan diff git"></p>
|
|
16
16
|
|
|
17
|
-
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
17
|
+
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
18
18
|
|
|
19
19
|
## Instalasi
|
|
20
20
|
|
|
@@ -29,46 +29,54 @@ 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.13.0`.
|
|
33
33
|
|
|
34
34
|
## Fitur
|
|
35
35
|
|
|
36
|
+
<!-- BEGIN GENERATED FEATURES: edit docs/features.json, then run npm run build:readme -->
|
|
37
|
+
|
|
36
38
|
| Fitur | Cara menggunakannya | Tangkapan layar |
|
|
37
39
|
|---|---|---|
|
|
38
|
-
| **Panel perubahan** | Bilah samping kanan → `+` → **Perubahan**. Pilih **Belum Di-commit**, **Belum Di-stage**, **Di-stage**, atau **Branch** untuk melihat file yang berubah beserta jumlah `+/-`; klik sebuah file untuk melihat diff-nya. **Giliran Terakhir** membuka tinjauan bawaan dsh untuk giliran terakhir. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Tangkapan layar: Panel perubahan"></a> |
|
|
39
|
-
| **Ide fitur** | Bilah samping kanan → `+` → **Ide fitur** → **Sarankan fitur**. Model obrolan itu sendiri membaca ringkasan singkat proyek obrolan (file tingkat atas, bagian awal README dan manifes, 15 commit terakhir) dan menyarankan hingga 8 fitur. Fitur ditampilkan sebagai tumpukan kartu dalam bahasa UI dsh. Geser kartu ke kanan (atau klik **✓**, atau tekan `→`; dengan cara mana pun, kartu terbang ke sisinya) untuk memulai obrolan baru di proyek yang sama. Obrolan itu dimulai dalam mode rencana dengan ide tersebut sebagai permintaan, jadi tidak ada yang berubah sebelum Anda menyetujui rencananya. Untuk melewati rencana, klik **▶ Buat sekarang** (atau tekan `↑`; kartu terbang ke atas): obrolan baru langsung dimulai dengan ide itu sebagai permintaan biasa, lalu model membuat perubahan dan menjalankan pemeriksaannya (persetujuan berlaku seperti biasa). Geser ke kiri (atau **✕**, atau `←`) untuk melewatinya; **Urungkan** (atau `Z`) mengembalikan kartu yang dilewati. Klik **↓** (atau tekan `↓`) untuk menyimpan ide bagus untuk nanti. Ide itu masuk ke daftar **Nanti** milik proyek, yang ditampilkan oleh setiap obrolan di folder proyek yang sama (juga setelah mulai ulang). **Nanti (N)** membuka daftar itu. **Rencanakan** memulai obrolan mode rencana yang sama untuk ide itu dan **Buat sekarang** memulai obrolan tanpa rencana; keduanya mengeluarkan ide itu dari daftar. **Rencanakan semua (N)** memulai satu obrolan mode rencana untuk semua ide di daftar, jadi bagian bersama cukup direncanakan sekali. **Hapus dari daftar** menghapusnya. **Salin sebagai daftar periksa** menyalin seluruh daftar ke papan klip sebagai daftar periksa Markdown (`- [ ] Title — Summary`, satu baris per ide) untuk pelacak isu atau file TODO; fitur ini tidak membuat panggilan jaringan. **Ide lainnya** menambahkan kartu. Untuk mendapatkan ide tentang satu area saja, ketik **Topik fokus** yang singkat di kolom di samping **Sarankan fitur** (paling banyak 80 karakter; `Enter` juga menyarankan), atau klik salah satu topik tetap di bawahnya: **Kinerja**, **Aksesibilitas**, **Pengujian**, **Keamanan**, **Kegunaan**, atau **Dokumentasi** (klik lagi untuk mengosongkannya). Model lalu hanya menyarankan fitur tentang topik itu; kolom kosong berarti fitur apa pun. Ide tidak disarankan dua kali dalam satu proyek: setiap ide yang disarankan (dilewati, disimpan, atau dimulai) masuk ke **Riwayat** proyek, model diminta untuk tidak menyarankannya lagi, dan judul yang berulang dibuang. **Riwayat** mencantumkannya dengan **Dimulai** atau **Disarankan**; **Lupakan** (atau **Lupakan semua**) membuat ide itu bisa muncul lagi; ide yang masih ada di daftar **Nanti** tidak masuk saran sampai Anda menghapusnya dari sana. Model hanya berjalan saat Anda mengklik. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Tangkapan layar: Ide fitur"></a> |
|
|
40
|
-
| **Pencarian isi** | Pencarian bawaan di bilah samping dsh (kaca pembesar di samping **Ruang kerja**; `Cmd+K` di aplikasi desktop, `Cmd+Alt+K` di browser) juga menemukan obrolan dari kata-kata dalam pesan Anda dan dalam balasannya, bukan hanya dari judul. Teks yang cocok ditampilkan di bawah obrolan. dsh sudah memiliki pencarian ini, tetapi mengirimkannya dalam keadaan nonaktif. Fitur ini mengaktifkannya dengan file indeks pencarian di komputer Anda. Indeks dibuat pada pencarian pertama setelah dsh dimulai (sekitar 15 detik untuk 250 obrolan, lihat Batasan) dan disimpan untuk saat dsh dimulai berikutnya. Aktif secara default; perubahan berlaku setelah Anda memulai ulang dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Tangkapan layar: Pencarian isi"></a> |
|
|
41
|
-
| **Putar balik giliran** | Arahkan penunjuk ke salah satu pesan Anda dan klik **↶** (di samping Salin). **Obrolan saja** mengeluarkan pesan itu dan semua yang ada sesudahnya (balasan, panggilan alat) dari obrolan dan dari konteks model, lalu menaruh pesan itu kembali di kotak pesan: ubah, lalu kirim lagi. **Obrolan dan file** lebih dulu menampilkan daftar file proyek yang berubah sejak pesan itu, lalu juga mengembalikan file tersebut seperti semula. Ini termasuk perubahan yang dibuat oleh perintah (`bash`), bukan hanya oleh alat edit dsh. Giliran yang sedang berjalan dihentikan lebih dulu. Log obrolan tidak pernah ditulis ulang: satu penanda tersembunyi menyembunyikan bagian yang ditarik, sama seperti `/compact` bawaan dsh menyembunyikan pesan lama. Jika [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) terpasang, plugin itulah yang melakukan tugas ini, dan Composer Plus tidak menampilkan tombol kedua. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Tangkapan layar: Putar balik giliran"></a> |
|
|
42
|
-
| **Hapus obrolan** | Bilah samping → menu **…** pada obrolan (atau klik kanan) → **Hapus…** → **Hapus**. dsh sendiri hanya dapat mengarsipkan. Obrolan berhenti (gilirannya, job, subagen, dan jadwalnya, seperti saat diarsipkan oleh dsh). Riwayat tersimpannya, beserta obrolan subagennya, dipindahkan ke Tong Sampah macOS (di sistem lain: `$DSH_HOME/trash`). Untuk mengembalikannya, kembalikan folder itu ke tempat semula dan mulai ulang dsh: obrolan muncul di tampilan **Hanya yang diarsipkan** pada bilah samping. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Tangkapan layar: Hapus obrolan"></a> |
|
|
43
|
-
| **Nama proyek di kotak pesan** | Baris di bawah kotak pesan (giliran, token, cache hit, konteks) dimulai dengan nama proyek obrolan, jadi Anda selalu tahu di proyek mana sebuah obrolan bekerja. Nama ini adalah judul proyek bawaan dsh, atau nama folder jika proyek tidak memiliki judul. Arahkan penunjuk ke nama itu untuk melihat jalur folder lengkap. Klik nama itu untuk menemukan obrolan di bilah samping, dalam tampilan daftar atau proyek: bilah samping dan proyek terbuka (termasuk proyek yang diciutkan dan **Tampilkan lainnya** di proyek itu), daftar bergulir ke obrolan itu, dan obrolan berkedip selama 5 detik. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Tangkapan layar: Nama proyek di kotak pesan"></a> |
|
|
44
|
-
| **Riwayat input** | Di kotak pesan yang kosong, tekan `↑` / `↓` untuk menelusuri pesan yang telah Anda kirim, seperti di terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Tangkapan layar: Riwayat input"></a> |
|
|
45
|
-
| **Mode rencana Shift+Tab** |
|
|
46
|
-
| **Pertahankan fokus composer** | Setelah Anda mengirim perintah `/` atau skill, kursor tetap berada di kotak pesan, dan Anda dapat langsung mengetik lagi. Ini juga berlaku untuk makro keyboard yang mengetik perintah lalu menekan `Enter`. dsh membuat kotak pesan menjadi hanya-baca saat memproses perintah, lalu browser melepas fokusnya. Fitur ini mengembalikan fokus, kecuali jika menu, dialog, atau kolom lain sedang memegangnya. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Tangkapan layar: Pertahankan fokus composer"></a> |
|
|
47
|
-
| **Lanjutkan Sekali Klik** | Setelah giliran dihentikan, gagal, atau terpotong, kotak pesan yang kosong menampilkan **▶**. Satu klik melanjutkan percakapan yang ada tanpa menulis di input atau menambahkan pesan obrolan yang terlihat. (Model menerima catatan tersembunyi singkat “lanjutkan dari tempat berhenti”, karena beberapa penyedia, seperti Claude, menolak permintaan yang berakhir dengan balasan asisten.) Pesan di antrean tetap di sana: ▶ hanya melanjutkan tugas yang dihentikan, lalu antrean berjalan. Giliran yang selesai tetap memakai tombol Kirim biasa. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Tangkapan layar: Lanjutkan Sekali Klik"></a> |
|
|
48
|
-
| **Lanjutkan setelah mulai ulang** | Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Jika Anda keluar dari dsh (atau dsh tertutup) saat sebuah obrolan sedang bekerja, obrolan itu berlanjut sendiri saat Anda membuka dsh lagi, dengan catatan tersembunyi yang sama seperti Lanjutkan Sekali Klik. Jika putaran tujuan (`/goal`) sedang berjalan, tujuan itu berlanjut ke putaran berikutnya (dsh menjeda tujuan setiap kali dimulai sampai Anda melanjutkannya). Obrolan yang Anda hentikan, yang selesai, atau yang gagal tidak berlanjut. dsh sendiri tidak memiliki pengaturan untuk ini: dsh hanya menandai giliran seperti itu sebagai terinterupsi. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Tangkapan layar: Lanjutkan setelah mulai ulang"></a> |
|
|
49
|
-
| **Seret dan lepas antrean** | Pesan dalam antrean mendapat pegangan (⠿). Seret untuk mengubah urutan, atau fokuskan pegangan lalu tekan `↑` / `↓`. `Esc` membatalkan. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Tangkapan layar: Seret dan lepas antrean"></a> |
|
|
50
|
-
| **
|
|
51
|
-
| **
|
|
52
|
-
| **Salin
|
|
53
|
-
| **
|
|
54
|
-
| **
|
|
55
|
-
| **
|
|
56
|
-
| **
|
|
57
|
-
| **
|
|
58
|
-
| **
|
|
59
|
-
| **
|
|
60
|
-
| **
|
|
61
|
-
| **
|
|
62
|
-
| **
|
|
63
|
-
| **
|
|
64
|
-
| **
|
|
65
|
-
| **
|
|
40
|
+
| **Panel perubahan** | <a id="feature-changespanel"></a>Bilah samping kanan → `+` → **Perubahan**. Pilih **Belum Di-commit**, **Belum Di-stage**, **Di-stage**, atau **Branch** untuk melihat file yang berubah beserta jumlah `+/-`; klik sebuah file untuk melihat diff-nya. **Giliran Terakhir** membuka tinjauan bawaan dsh untuk giliran terakhir. Klik nama branch (atau pilih **Pohon**) untuk melihat pohon branch: klik sebuah branch di atasnya untuk menuju branch itu, dan klik sebuah commit untuk melihat file dan diff-nya. **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. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Tangkapan layar: Panel perubahan"></a> |
|
|
41
|
+
| **Ide fitur** | <a id="feature-featureideas"></a>Bilah samping kanan → `+` → **Ide fitur** → **Sarankan fitur**. Model obrolan itu sendiri membaca ringkasan singkat proyek obrolan (file tingkat atas, bagian awal README dan manifes, 15 commit terakhir) dan menyarankan hingga 8 fitur. Fitur ditampilkan sebagai tumpukan kartu dalam bahasa UI dsh. Geser kartu ke kanan (atau klik **✓**, atau tekan `→`; dengan cara mana pun, kartu terbang ke sisinya) untuk memulai obrolan baru di proyek yang sama. Obrolan itu dimulai dalam mode rencana dengan ide tersebut sebagai permintaan, jadi tidak ada yang berubah sebelum Anda menyetujui rencananya. Untuk melewati rencana, klik **▶ Buat sekarang** (atau tekan `↑`; kartu terbang ke atas): obrolan baru langsung dimulai dengan ide itu sebagai permintaan biasa, lalu model membuat perubahan dan menjalankan pemeriksaannya (persetujuan berlaku seperti biasa). Geser ke kiri (atau **✕**, atau `←`) untuk melewatinya; **Urungkan** (atau `Z`) mengembalikan kartu yang dilewati. Klik **↓** (atau tekan `↓`) untuk menyimpan ide bagus untuk nanti. Ide itu masuk ke daftar **Nanti** milik proyek, yang ditampilkan oleh setiap obrolan di folder proyek yang sama (juga setelah mulai ulang). **Nanti (N)** membuka daftar itu. **Rencanakan** memulai obrolan mode rencana yang sama untuk ide itu dan **Buat sekarang** memulai obrolan tanpa rencana; keduanya mengeluarkan ide itu dari daftar. **Rencanakan semua (N)** memulai satu obrolan mode rencana untuk semua ide di daftar, jadi bagian bersama cukup direncanakan sekali. **Hapus dari daftar** menghapusnya. **Salin sebagai daftar periksa** menyalin seluruh daftar ke papan klip sebagai daftar periksa Markdown (`- [ ] Title — Summary`, satu baris per ide) untuk pelacak isu atau file TODO; fitur ini tidak membuat panggilan jaringan. **Ide lainnya** menambahkan kartu. Untuk mendapatkan ide tentang satu area saja, ketik **Topik fokus** yang singkat di kolom di samping **Sarankan fitur** (paling banyak 80 karakter; `Enter` juga menyarankan), atau klik salah satu topik tetap di bawahnya: **Kinerja**, **Aksesibilitas**, **Pengujian**, **Keamanan**, **Kegunaan**, atau **Dokumentasi** (klik lagi untuk mengosongkannya). Model lalu hanya menyarankan fitur tentang topik itu; kolom kosong berarti fitur apa pun. Ide tidak disarankan dua kali dalam satu proyek: setiap ide yang disarankan (dilewati, disimpan, atau dimulai) masuk ke **Riwayat** proyek, model diminta untuk tidak menyarankannya lagi, dan judul yang berulang dibuang. **Riwayat** mencantumkannya dengan **Dimulai** atau **Disarankan**; **Lupakan** (atau **Lupakan semua**) membuat ide itu bisa muncul lagi; ide yang masih ada di daftar **Nanti** tidak masuk saran sampai Anda menghapusnya dari sana. Model hanya berjalan saat Anda mengklik. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Tangkapan layar: Ide fitur"></a> |
|
|
42
|
+
| **Pencarian isi** | <a id="feature-contentsearch"></a>Pencarian bawaan di bilah samping dsh (kaca pembesar di samping **Ruang kerja**; `Cmd+K` di aplikasi desktop, `Cmd+Alt+K` di browser) juga menemukan obrolan dari kata-kata dalam pesan Anda dan dalam balasannya, bukan hanya dari judul. Teks yang cocok ditampilkan di bawah obrolan. dsh sudah memiliki pencarian ini, tetapi mengirimkannya dalam keadaan nonaktif. Fitur ini mengaktifkannya dengan file indeks pencarian di komputer Anda. Indeks dibuat pada pencarian pertama setelah dsh dimulai (sekitar 15 detik untuk 250 obrolan, lihat Batasan) dan disimpan untuk saat dsh dimulai berikutnya. Aktif secara default; perubahan berlaku setelah Anda memulai ulang dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Tangkapan layar: Pencarian isi"></a> |
|
|
43
|
+
| **Putar balik giliran** | <a id="feature-turnrollback"></a>Arahkan penunjuk ke salah satu pesan Anda dan klik **↶** (di samping Salin). **Obrolan saja** mengeluarkan pesan itu dan semua yang ada sesudahnya (balasan, panggilan alat) dari obrolan dan dari konteks model, lalu menaruh pesan itu kembali di kotak pesan: ubah, lalu kirim lagi. **Obrolan dan file** lebih dulu menampilkan daftar file proyek yang berubah sejak pesan itu, lalu juga mengembalikan file tersebut seperti semula. Ini termasuk perubahan yang dibuat oleh perintah (`bash`), bukan hanya oleh alat edit dsh. Giliran yang sedang berjalan dihentikan lebih dulu. Log obrolan tidak pernah ditulis ulang: satu penanda tersembunyi menyembunyikan bagian yang ditarik, sama seperti `/compact` bawaan dsh menyembunyikan pesan lama. Jika [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) terpasang, plugin itulah yang melakukan tugas ini, dan Composer Plus tidak menampilkan tombol kedua. 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> |
|
|
44
|
+
| **Hapus obrolan** | <a id="feature-deletechat"></a>Bilah samping → menu **…** pada obrolan (atau klik kanan) → **Hapus…** → **Hapus**. dsh sendiri hanya dapat mengarsipkan. Obrolan berhenti (gilirannya, job, subagen, dan jadwalnya, seperti saat diarsipkan oleh dsh). Riwayat tersimpannya, beserta obrolan subagennya, dipindahkan ke Tong Sampah macOS (di sistem lain: `$DSH_HOME/trash`). Untuk mengembalikannya, kembalikan folder itu ke tempat semula dan mulai ulang dsh: obrolan muncul di tampilan **Hanya yang diarsipkan** pada bilah samping. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Tangkapan layar: Hapus obrolan"></a> |
|
|
45
|
+
| **Nama proyek di kotak pesan** | <a id="feature-projectname"></a>Baris di bawah kotak pesan (giliran, token, cache hit, konteks) dimulai dengan nama proyek obrolan, jadi Anda selalu tahu di proyek mana sebuah obrolan bekerja. Nama ini adalah judul proyek bawaan dsh, atau nama folder jika proyek tidak memiliki judul. Arahkan penunjuk ke nama itu untuk melihat jalur folder lengkap. Klik nama itu untuk menemukan obrolan di bilah samping, dalam tampilan daftar atau proyek: bilah samping dan proyek terbuka (termasuk proyek yang diciutkan dan **Tampilkan N sesi lainnya** di proyek itu), daftar bergulir ke obrolan itu, dan obrolan berkedip selama 5 detik. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Tangkapan layar: Nama proyek di kotak pesan"></a> |
|
|
46
|
+
| **Riwayat input** | <a id="feature-inputhistory"></a>Di kotak pesan yang kosong, tekan `↑` / `↓` untuk menelusuri pesan yang telah Anda kirim, seperti di terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Tangkapan layar: Riwayat input"></a> |
|
|
47
|
+
| **Mode rencana Shift+Tab** | <a id="feature-plantoggle"></a>`Shift+Tab` menambahkan `/plan ` di awal draf (tekan lagi untuk menghapusnya). Jika obrolan sudah dalam mode rencana, `Shift+Tab` keluar dari mode itu. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Tangkapan layar: Mode rencana Shift+Tab"></a> |
|
|
48
|
+
| **Pertahankan fokus composer** | <a id="feature-keepfocus"></a>Setelah Anda mengirim perintah `/` atau skill, kursor tetap berada di kotak pesan, dan Anda dapat langsung mengetik lagi. Ini juga berlaku untuk makro keyboard yang mengetik perintah lalu menekan `Enter`. dsh membuat kotak pesan menjadi hanya-baca saat memproses perintah, lalu browser melepas fokusnya. Fitur ini mengembalikan fokus, kecuali jika menu, dialog, atau kolom lain sedang memegangnya. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Tangkapan layar: Pertahankan fokus composer"></a> |
|
|
49
|
+
| **Lanjutkan Sekali Klik** | <a id="feature-continuebutton"></a>Setelah giliran dihentikan, gagal, atau terpotong, kotak pesan yang kosong menampilkan **▶**. Satu klik melanjutkan percakapan yang ada tanpa menulis di input atau menambahkan pesan obrolan yang terlihat. (Model menerima catatan tersembunyi singkat “lanjutkan dari tempat berhenti”, karena beberapa penyedia, seperti Claude, menolak permintaan yang berakhir dengan balasan asisten.) Pesan di antrean tetap di sana: ▶ hanya melanjutkan tugas yang dihentikan, lalu antrean berjalan. Giliran yang selesai tetap memakai tombol Kirim biasa. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Tangkapan layar: Lanjutkan Sekali Klik"></a> |
|
|
50
|
+
| **Lanjutkan setelah mulai ulang** | <a id="feature-resumeafterrestart"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Jika Anda keluar dari dsh (atau dsh tertutup) saat sebuah obrolan sedang bekerja, obrolan itu berlanjut sendiri saat Anda membuka dsh lagi, dengan catatan tersembunyi yang sama seperti Lanjutkan Sekali Klik. Jika putaran tujuan (`/goal`) sedang berjalan, tujuan itu berlanjut ke putaran berikutnya (dsh menjeda tujuan setiap kali dimulai sampai Anda melanjutkannya). Obrolan yang Anda hentikan, yang selesai, atau yang gagal tidak berlanjut. dsh sendiri tidak memiliki pengaturan untuk ini: dsh hanya menandai giliran seperti itu sebagai terinterupsi. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Tangkapan layar: Lanjutkan setelah mulai ulang"></a> |
|
|
51
|
+
| **Seret dan lepas antrean** | <a id="feature-queuereorder"></a>Pesan dalam antrean mendapat pegangan (⠿). Seret untuk mengubah urutan, atau fokuskan pegangan lalu tekan `↑` / `↓`. `Esc` membatalkan. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Tangkapan layar: Seret dan lepas antrean"></a> |
|
|
52
|
+
| **Edit pesan antrean di tempat** | <a id="feature-queueedit"></a>Klik dua kali pesan dalam antrean. Pesan itu berubah menjadi kotak edit bawaan dsh: ubah teksnya, lalu tekan `Enter` untuk menyimpan atau `Esc` untuk membatalkan. Pesan tetap di tempatnya dalam antrean. Pesan yang berisi gambar atau file tidak dapat diedit dengan cara ini (antrean dsh hanya mengedit teks). | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Tangkapan layar: Edit pesan antrean di tempat"></a> |
|
|
53
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
56
|
+
| **Salin jalur proyek** | <a id="feature-copyprojectpath"></a>Klik kanan proyek di bilah samping → **Salin jalur** menyalin jalur lengkap foldernya. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Tangkapan layar: Salin jalur proyek"></a> |
|
|
57
|
+
| **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
|
+
| **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> |
|
|
59
|
+
| **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> |
|
|
60
|
+
| **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> |
|
|
61
|
+
| **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> |
|
|
62
|
+
| **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> |
|
|
63
|
+
| **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> |
|
|
64
|
+
| **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> |
|
|
65
|
+
| **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> |
|
|
66
|
+
| **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> |
|
|
67
|
+
| **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> |
|
|
68
|
+
| **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> |
|
|
69
|
+
| **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> |
|
|
70
|
+
| **Koneksi seluler (iPhone)** | <a id="feature-mobileconnect"></a>Gunakan dsh dari iPhone Anda dengan aplikasi [Tether](tether/), di Wi-Fi yang sama atau melalui [Tailscale](https://tailscale.com). Aktifkan di **Pengaturan → Composer Plus** (nonaktif secara default karena membuka port jaringan di Mac ini). Lalu klik **Koneksi seluler** di kiri bawah bilah samping: pindai kode QR dengan Kamera iPhone (ketuk **Open in Tether**) atau dengan **Scan code** di Tether, ketuk **Connect**, lalu klik **Approve**. Instal Tether terlebih dahulu: tanpa aplikasi itu, Kamera tidak dapat membuka kode tersebut. Ponsel menampilkan obrolan Anda, mengirim pesan, menjawab persetujuan dan pertanyaan, serta mengganti model dan agen. Pasangkan Mac sebanyak yang Anda mau: nama Mac di kiri atas aplikasi berpindah di antara Mac tersebut. 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> |
|
|
71
|
+
| **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> |
|
|
72
|
+
|
|
73
|
+
<!-- END GENERATED FEATURES -->
|
|
66
74
|
|
|
67
75
|
Tombol, tooltip, pemberitahuan, dan notifikasi mengikuti bahasa dsh yang dipilih (lihat Bahasa aplikasi di bawah).
|
|
68
76
|
|
|
69
77
|
## Pengaturan
|
|
70
78
|
|
|
71
|
-
Setiap fitur dapat diaktifkan atau dinonaktifkan secara terpisah: dsh **Pengaturan → Composer Plus**. Setiap baris memiliki tangkapan layar kecil: arahkan penunjuk ke gambar itu untuk pratinjau yang lebih besar, atau klik untuk membukanya dalam ukuran penuh (`Esc` menutupnya). Kotak **Cari fitur** di bagian atas memfilter halaman menurut nama atau deskripsi (bahasa apa pun, tanpa membedakan huruf besar-kecil dan aksen); `Esc` mengosongkannya. Setiap baris memiliki sakelar dan deskripsi singkat. Perubahan langsung berlaku tanpa mulai ulang dan diingat di perangkat itu. Semua fitur aktif secara default, kecuali **Koneksi seluler**, **Lanjutkan setelah mulai ulang**, dan **Lengkapi saat mengetik**. Host dsh menyimpan sakelar ketiga fitur ini serta sakelar **Pencarian isi**, **Putar balik giliran**, dan **Prediksi pesan berikutnya**, jadi sakelar itu berlaku untuk setiap jendela dan tetap ada setelah mulai ulang. Host juga menyimpan pilihan **Model** untuk **Prediksi pesan berikutnya
|
|
79
|
+
Setiap fitur dapat diaktifkan atau dinonaktifkan secara terpisah: dsh **Pengaturan → Composer Plus**. Setiap baris memiliki tangkapan layar kecil: arahkan penunjuk ke gambar itu untuk pratinjau yang lebih besar, atau klik untuk membukanya dalam ukuran penuh (`Esc` menutupnya). Kotak **Cari fitur** di bagian atas memfilter halaman menurut nama atau deskripsi (bahasa apa pun, tanpa membedakan huruf besar-kecil dan aksen); `Esc` mengosongkannya. Setiap baris memiliki sakelar dan deskripsi singkat. **?** kecil setelah nama baris membuka bagian README ini yang menjelaskan fitur itu, di README bahasa antarmuka dsh. Perubahan langsung berlaku tanpa mulai ulang dan diingat di perangkat itu. Semua fitur aktif secara default, kecuali **Koneksi seluler**, **Lanjutkan setelah mulai ulang**, dan **Lengkapi saat mengetik**. Host dsh menyimpan sakelar ketiga fitur ini serta sakelar **Pencarian isi**, **Putar balik giliran**, dan **Prediksi pesan berikutnya**, jadi sakelar itu berlaku untuk setiap jendela dan tetap ada setelah mulai ulang. Host juga menyimpan pilihan **Model** untuk **Prediksi pesan berikutnya**, untuk **Lengkapi saat mengetik** (bawaannya **Sama dengan prediksi pesan berikutnya**), dan untuk **Sempurnakan prompt** (bawaannya **Sama dengan model obrolan**). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
|
|
72
80
|
|
|
73
81
|
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Pengaturan → Composer Plus: pencarian fitur, pemilih bahasa, baris pembaruan, dan satu sakelar per fitur, dengan pratinjau tangkapan layar saat penunjuk diarahkan"></p>
|
|
74
82
|
|
|
@@ -114,22 +122,23 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
114
122
|
- **Lanjutkan:** endpoint lokal yang terautentikasi hanya melanjutkan giliran terakhir yang terinterupsi, menolak permintaan yang usang atau duplikat, dan mempertahankan hook persetujuan yang ada. Endpoint ini tidak mengirim pesan pengguna baru.
|
|
115
123
|
- **Lanjutkan setelah mulai ulang:** nonaktif sampai Anda mengaktifkannya. Bagian Host hanya menyimpan ID obrolan dan waktu mulai di `$DSH_HOME/storages/dsh-composer-plus/resume.json` (izin akses hanya untuk pemilik), dan tidak ada yang keluar dari mesin Anda. Fitur ini melanjutkan obrolan hanya jika log dsh sendiri menyatakan bahwa dsh (bukan Anda) yang menghentikan giliran terakhirnya. Persetujuan dan Tinjauan otomatis berlaku untuk giliran yang dilanjutkan seperti biasa.
|
|
116
124
|
|
|
117
|
-
- **Panel perubahan:** git berjalan dalam mode hanya-baca di mesin Anda, di folder obrolan itu sendiri, melalui kanal `/api` dsh yang terautentikasi. Git tidak pernah melakukan commit, stage, atau fetch, dan hanya menampilkan jalur yang didaftarkan oleh git sendiri.
|
|
125
|
+
- **Panel perubahan:** git berjalan dalam mode hanya-baca di mesin Anda, di folder obrolan itu sendiri, melalui kanal `/api` dsh yang terautentikasi. Git tidak pernah melakukan commit, stage, atau fetch, dan hanya menampilkan jalur yang didaftarkan oleh git sendiri. Pohon menampilkan 300 commit terbaru dari branch lokal dan remote; pohon tidak pernah berpindah branch (checkout). Di repositori yang sangat besar tanpa file commit-graph, pohon bisa memerlukan beberapa detik untuk terbuka. **Obrolan ini** membaca log milik obrolan untuk menemukan file yang ditulis oleh alat file obrolan itu, lalu membandingkannya dengan snapshot Putar balik giliran milik obrolan di folder sementara yang langsung dihapus; fitur ini tidak menulis apa pun ke repositori Anda atau ke penyimpanan snapshot.
|
|
118
126
|
- **Ide fitur:** tidak ada yang berjalan sampai Anda mengklik **Sarankan fitur**. Setelah itu, bagian Host hanya membaca folder obrolan itu sendiri (browser tidak pernah mengirim jalur): nama entri tingkat atas, 6 kB pertama dari README, AGENTS.md, dan manifes (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …), serta `git log --oneline -15`, total paling banyak 16 kB. Bagian Host melewati `.env*`, file kunci, dan folder seperti `node_modules`. Bagian Host juga hanya membaca file biasa yang tetap berada di dalam folder: symlink yang menunjuk ke luar folder, FIFO, atau perangkat akan dilewati. Ringkasan ini dikirim ke model yang dipakai obrolan, melalui pengaturan penyedia bawaan dsh, sebagai satu permintaan; ringkasan ini tidak ditambahkan ke obrolan mana pun. Tidak ada yang ditulis ke proyek. Ide yang digeser ke kanan memulai obrolan baru dalam mode rencana, jadi persetujuan dan tinjauan rencana berlaku seperti biasa. **Buat sekarang** memulai obrolan tanpa mode rencana: model dapat langsung mengubah file, dengan persetujuan obrolan yang biasa dan Tinjauan otomatis. Ide yang disimpan untuk nanti (judul, ringkasan, alasan, upaya) disimpan bersama jalur folder proyek di `storages/dsh-composer-plus/later.json` di dalam dsh home (file hanya untuk pemilik); tidak ada yang masuk ke proyek. Riwayat ide yang disarankan (judul, ringkasan, alasan, upaya, tanggal, sudah dimulai atau belum) disimpan dengan cara yang sama di `storages/dsh-composer-plus/idea-history.json`, paling banyak 200 per proyek (yang terlama keluar lebih dulu); judul-judulnya dikirim ke model bersama **Sarankan fitur** berikutnya di proyek itu.
|
|
119
127
|
- **Pencarian isi:** tidak ada kode baru yang mencari di obrolan Anda. Plugin hanya mengaktifkan indeks pesan bawaan dsh (SQLite FTS5, `dsh-session-query-sqlite`) dan memberinya sebuah file, `$DSH_HOME/cache/composer-plus/session-search.db` (file dan folder hanya untuk pemilik). File ini berisi teks pesan pengguna dan asisten Anda, jadi sama privatnya dengan log obrolan di `$DSH_HOME/sessions`. Tidak ada yang keluar dari mesin Anda. File ini adalah salinan yang dapat dibuat ulang oleh dsh: Anda dapat menghapusnya saat dsh ditutup. Sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
120
|
-
- **Putar balik giliran:** sebelum setiap pesan Anda, Host mengambil snapshot git dari folder obrolan ke penyimpanannya sendiri, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (folder hanya untuk pemilik). Penyimpanan ini berisi salinan file di folder itu yang terlihat oleh git (bukan file yang diabaikan), jadi sama privatnya dengan proyek. Fitur ini membaca objek repositori Anda (tanpa menyalin apa yang sudah dimiliki git) dan tidak pernah menulis index, `HEAD`, branch, tag, stash, atau config repositori Anda. Satu-satunya perubahan yang dibuat git di sana adalah stempel waktu yang lebih baru pada file objek yang dipakai ulang (ini menunda pembersihannya oleh `git gc`). Putar balik dengan file hanya menulis file biasa di dalam folder obrolan; symlink, pipe, dan apa pun di luar folder dilewati. Tidak ada yang keluar dari mesin Anda. Anda dapat menghapus penyimpanan ini saat dsh ditutup (putar balik lalu hanya berlaku untuk obrolan, sampai ada pesan baru). **Hapus obrolan** juga menghapus penyimpanan milik obrolan itu. Sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
128
|
+
- **Putar balik giliran:** sebelum setiap pesan Anda, Host mengambil snapshot git dari folder obrolan ke penyimpanannya sendiri, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (folder hanya untuk pemilik). Penyimpanan ini berisi salinan file di folder itu yang terlihat oleh git (bukan file yang diabaikan), jadi sama privatnya dengan proyek. Fitur ini membaca objek repositori Anda (tanpa menyalin apa yang sudah dimiliki git) dan tidak pernah menulis index, `HEAD`, branch, tag, stash, atau config repositori Anda. Satu-satunya perubahan yang dibuat git di sana adalah stempel waktu yang lebih baru pada file objek yang dipakai ulang (ini menunda pembersihannya oleh `git gc`). Putar balik dengan file hanya menulis file biasa di dalam folder obrolan; symlink, pipe, dan apa pun di luar folder dilewati. Tidak ada yang keluar dari mesin Anda. Anda dapat menghapus penyimpanan ini saat dsh ditutup (putar balik lalu hanya berlaku untuk obrolan, sampai ada pesan baru). **Hapus obrolan** juga menghapus penyimpanan milik obrolan itu. Sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Putar balik dengan file juga menyimpan file seperti keadaannya tepat sebelum putar balik (`refs/r/…` di penyimpanan yang sama), untuk **Ulangi**; putar balik yang sudah diulangi dicatat di `$DSH_HOME/storages/dsh-composer-plus/redone.json` (hanya untuk pemilik).
|
|
121
129
|
- **Ekspor obrolan sebagai Markdown:** bagian Host hanya membaca log milik obrolan itu (pesan yang sama dengan yang ditampilkan dsh) dan memberikannya ke halaman; bagian ini tidak membaca file proyek dan tidak mengirim apa pun lewat jaringan. Markdown hanya masuk ke papan klip Anda atau ke file yang Anda simpan.
|
|
122
130
|
- **Hapus obrolan:** memindahkan folder log milik obrolan (`$DSH_HOME/sessions/<project>/<chat>`) ke Tong Sampah. Folder proyek tidak disentuh.
|
|
123
|
-
- **Izinkan untuk obrolan ini:** izin disimpan di `$DSH_HOME/storages/dsh-composer-plus/grants.json` (izin akses hanya untuk pemilik). Satu izin berlaku untuk
|
|
131
|
+
- **Izinkan untuk obrolan ini:** izin disimpan beserta waktu pemberiannya di `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (izin akses hanya untuk pemilik). Satu izin berlaku untuk satu alat tertentu di satu obrolan, sampai batas waktu berakhir (1 jam secara default). Jika alat itu dapat menulis, izin itu juga mencakup penulisan apa pun. Cabut izin dari chip di header.
|
|
124
132
|
- Tinjauan otomatis tetap berjalan pada setiap panggilan; tinjauan yang gagal tidak pernah diizinkan secara otomatis.
|
|
125
|
-
- **Koneksi seluler:** nonaktif sampai Anda mengaktifkannya. Selama aktif, bagian Host menjalankan gateway Tether: HTTPS di port 19390 yang hanya menerima subnet Wi-Fi dan tailnet Anda (100.64.0.0/10), serta halaman pemasangan di `127.0.0.1:19391` (hanya Mac ini). Ponsel memerlukan kode sekali pakai dari kode QR (berlaku 5 menit) dan klik **Approve** dari Anda di Mac. Ponsel menyematkan (pin) sertifikat gateway. Mac hanya menyimpan hash token setiap ponsel (30 hari, diperpanjang selama dipakai); **
|
|
133
|
+
- **Koneksi seluler:** nonaktif sampai Anda mengaktifkannya. Selama aktif, bagian Host menjalankan gateway Tether: HTTPS di port 19390 yang hanya menerima subnet Wi-Fi dan tailnet Anda (100.64.0.0/10), serta halaman pemasangan di `127.0.0.1:19391` (hanya Mac ini). Ponsel memerlukan kode sekali pakai dari kode QR (berlaku 5 menit) dan klik **Approve** dari Anda di Mac. Ponsel menyematkan (pin) sertifikat gateway. Mac hanya menyimpan hash token setiap ponsel (30 hari, diperpanjang selama dipakai); **Remove** langsung menutup koneksi ponsel itu. Ponsel hanya dapat memanggil daftar metode dsh yang diizinkan (obrolan, prompt, lampiran, perintah garis miring, persetujuan, pertanyaan, model, agen, tujuan), bukan pengaturan, kredensial, browser file, atau terminal. "Tailscale only" menolak setiap koneksi dari jaringan lokal, termasuk koneksi yang sudah terbuka. Log akses menyimpan 200 percobaan koneksi terbaru (waktu, alamat IP, nama perangkat, diizinkan atau ditolak, dan alasannya) di `access.json`; log ini tidak pernah menyimpan token atau kode pemasangan. Data: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (file hanya untuk pemilik). Detail: [tether/README.md](tether/README.md).
|
|
126
134
|
- **Pembaruan:** bagian Host menanyakan rilis terbaru ke `api.github.com` dan versi persis itu ke `registry.npmjs.org`; tidak ada data tentang Anda atau obrolan Anda yang dikirim. Pemasangan memakai pengelola plugin dsh (`pnpm add dsh-composer-plus@<version>`; jika dsh 0.2.1 menolaknya untuk plugin yang sudah terpasang, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, lalu profil mencantumkan URL itu sebagai sumber plugin), jadi pemeriksaan registri, skrip, dan kompatibilitas versi milik dsh tetap berlaku. Tag pra-rilis dan versi lama tidak pernah dipasang.
|
|
127
135
|
- **Prediksi pesan berikutnya:** aktif secara default. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan model ini. Setelah setiap giliran selesai, bagian Host mengirim pesan Anda sendiri di obrolan itu dan balasan teks agen (tanpa keluaran alat, tanpa konteks tersembunyi, tanpa penalaran), paling banyak sekitar 6.000 karakter (bagian terbaru), ke model yang dipilih (model default dsh, kecuali Anda memilih yang lain). Pengiriman ini memakai pengaturan penyedia bawaan dsh, sebagai satu permintaan. Tidak ada yang disimpan di obrolan: tebakan tidak ditambahkan ke riwayat obrolan. Sakelar dan pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/predict.json` (file hanya untuk pemilik).
|
|
128
136
|
- **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).
|
|
137
|
+
- **Sempurnakan prompt:** tidak ada yang berjalan sampai Anda mengklik tongkat ajaib. Setelah itu, bagian Host mengirim draf Anda, pesan Anda sendiri di obrolan itu dan balasan teks agen (tanpa keluaran alat, tanpa konteks tersembunyi, tanpa penalaran, tanpa pesan yang ditarik oleh putar balik; paling banyak sekitar 6.000 karakter, bagian terbaru), ringkasan proyek yang sama dengan **Ide fitur** (dengan aturan file yang sama: tanpa `.env*` atau file kunci, tanpa symlink ke luar folder, tanpa FIFO), jalur yang dicantumkan `git status` sebagai berubah, dan paling banyak 30 jalur yang dilacak atau tidak dilacak (tidak diabaikan) yang namanya memiliki kata yang sama dengan draf Anda, ke model yang dipilih di **Sempurnakan prompt** (secara default model obrolan itu sendiri), sebagai satu permintaan. Isi file selain ringkasan itu tidak dikirim. Tidak ada yang ditulis ke obrolan atau proyek: jawaban hanya menggantikan draf Anda di kotak pesan, dan Anda yang memutuskan apakah akan mengirimnya. Pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/improve.json` (file hanya untuk pemilik).
|
|
129
138
|
|
|
130
139
|
## Pemecahan masalah
|
|
131
140
|
|
|
132
|
-
- **Tidak ada notifikasi di macOS:** Pengaturan Sistem → Pemberitahuan → DeepSeek Harness → izinkan. Pilih
|
|
141
|
+
- **Tidak ada notifikasi di macOS:** Pengaturan Sistem → Pemberitahuan → DeepSeek Harness → izinkan. Pilih Peringatan agar notifikasi tetap tampil di layar.
|
|
133
142
|
- **▶, pegangan antrean, status proyek, opsi proyek terbaru, Ciutkan semua proyek, Salin jalur, kotak pencarian proyek, prediksi pesan berikutnya, pelengkapan saat mengetik, Izinkan untuk obrolan ini, atau klik kanan hilang setelah dsh diperbarui:** elemen-elemen ini menempel ke HTML dsh saat ini karena dsh belum memiliki slot untuknya. Jika dsh mengubah markup itu, elemen-elemen ini menyembunyikan dirinya sendiri; tidak ada hal lain yang rusak. Silakan buka [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
134
143
|
- **"Pembaruan gagal" atau "tidak dipasang dari npm":** salinan yang ditautkan dari folder lokal atau yang diganti namanya tidak dapat memperbarui dirinya sendiri; pasang ulang `dsh-composer-plus` dari Pengaturan → Plugin. Selain itu, pesan menampilkan baris pertama error pnpm; **Periksa pembaruan** mencoba lagi.
|
|
135
144
|
- **Koneksi seluler menyatakan gateway tidak berjalan:** "no IPv4 address on en0" berarti Mac ini tidak memiliki alamat Wi-Fi/Ethernet; "EADDRINUSE" berarti dsh lain (atau aplikasi lain) memakai port 19390 atau 19391. Hanya satu dsh yang dapat menjalankan Koneksi seluler pada satu waktu.
|
|
@@ -138,8 +147,9 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
138
147
|
- **Tidak ada tombol ↶ di pesan saya:** Putar balik giliran nonaktif, obrolan itu adalah obrolan subagen, atau dsh-rewind-plugin terpasang (gunakan tombol ↶ miliknya). Setelah pembaruan, mulai ulang dsh.
|
|
139
148
|
- **Obrolan dan file berwarna abu-abu:** proyek bukan repositori git, tidak ada snapshot dari sebelum pesan itu (pesan lebih lama dari plugin, atau salah satu dari 50 snapshot terbaru telah menggantikannya), atau tidak ada file yang berubah.
|
|
140
149
|
- **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.
|
|
150
|
+
- **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.
|
|
141
151
|
- **Obrolan tidak berlanjut setelah mulai ulang:** Lanjutkan setelah mulai ulang nonaktif saat dsh ditutup, Anda sendiri yang menghentikan giliran itu, giliran sudah berakhir (selesai atau gagal), obrolan diarsipkan, atau lebih dari 20 obrolan sedang berjalan (20 yang terbaru berlanjut).
|
|
142
|
-
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.
|
|
152
|
+
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.13.0`), lihat catatan pemasangan di atas.
|
|
143
153
|
|
|
144
154
|
## Batasan
|
|
145
155
|
|
|
@@ -155,9 +165,14 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
155
165
|
- **Hapus obrolan** memerlukan fitur arsip dsh (dsh 0.2.0 dan yang lebih baru). Obrolan (atau salah satu obrolan subagennya) yang tidak berhenti dalam 15 detik, atau yang dipegang oleh dsh lain, tetap diarsipkan dan tidak ada yang dipindahkan. Di sistem selain macOS, folder sampah harus berada di disk yang sama dengan riwayat obrolan. Obrolan terbuka yang Anda hapus tetap ada di memori dsh, dalam keadaan diarsipkan dan tersembunyi, sampai dsh dimulai ulang. Kosongkan Tong Sampah sendiri; dsh tidak melakukannya.
|
|
156
166
|
- Antrean dsh tidak memiliki tindakan `move`, jadi bagian Host plugin memindahkan pesan antrean itu sendiri di dalam antrean dsh (satu perubahan, pesan yang sama). Pesan dengan gambar atau file juga dapat dipindahkan. Hanya pesan Anda sendiri yang dapat dipindahkan: putaran tujuan atau balasan pertanyaan di antrean tetap di tempatnya. Jika sebuah pesan mulai dikirim saat Anda menyeret, tidak ada yang dipindahkan dan muncul pemberitahuan tentang hal itu.
|
|
157
167
|
- 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.
|
|
168
|
+
- **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.
|
|
158
169
|
- **Pertahankan fokus composer** mengembalikan fokus hanya setelah perintah `/` atau skill. Saat dsh memproses perintah, kotak pesan tetap hanya-baca selama beberapa milidetik, jadi tombol yang ditekan dalam waktu itu hilang. Jika menu `/` dsh masih terbuka, `Enter` memilih baris yang disorot dan tidak mengirim.
|
|
159
|
-
- **Koneksi seluler** hanya berfungsi di macOS (memakai `en0`, `openssl`, `swift`, dan `dns-sd`). Fitur ini memakai port tetap 19390 dan 19391, jadi hanya satu dsh di setiap Mac yang dapat menjalankannya pada satu waktu (setiap Mac adalah satu entri dalam daftar Mac di ponsel). Ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang (tidak ada layanan push). Aplikasi iOS belum ada di App Store: bangun aplikasi itu dari `tether/ios` dengan Xcode.
|
|
160
|
-
- Tautan sesi berfungsi di dalam obrolan; mengkliknya tidak membuka obrolan.
|
|
170
|
+
- **Koneksi seluler** hanya berfungsi di macOS (memakai `en0`, `openssl`, `swift`, dan `dns-sd`). Fitur ini memakai port tetap 19390 dan 19391, jadi hanya satu dsh di setiap Mac yang dapat menjalankannya pada satu waktu (setiap Mac adalah satu entri dalam daftar Mac di ponsel). Ponsel hanya mendapat notifikasi saat Tether terbuka atau baru saja masuk ke latar belakang (tidak ada layanan push). Aplikasi iOS belum ada di App Store: bangun aplikasi itu dari `tether/ios` dengan Xcode. "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.
|
|
171
|
+
- 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.
|
|
172
|
+
- **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.
|
|
173
|
+
- **Edit pesan antrean di tempat** membuka editor antrean bawaan dsh, jadi batasannya juga berlaku: pesan dengan gambar atau file tidak dapat diedit, dan pesan yang sementara itu mulai terkirim tidak diubah (dsh menampilkan pesan error-nya sendiri).
|
|
174
|
+
- **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.
|
|
175
|
+
- **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.
|
|
161
176
|
- Notifikasi yang dikirim sebelum mulai ulang hanya membawa dsh ke depan saat diklik.
|
|
162
177
|
- 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.
|
|
163
178
|
- 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. Gunakan filter ini bersama **Ruang Kerja**: dalam **Pohon Ruang Kerja**, folder induk yang tersembunyi juga menyembunyikan proyek aktif di dalamnya. **Menurut status** memiliki batasan serupa: dsh tidak memiliki slot urutan, jadi item dan urutan baris menempel ke markup menu dan daftar dsh.
|
|
@@ -165,6 +180,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
165
180
|
- dsh juga tidak memiliki titik ekstensi di menu proyek obrolan baru, jadi kotak **Cari proyek** dan urutan A–Z menempel ke markup menu dsh. Jika pembaruan dsh mengubah markup itu, menu tampil seperti yang digambar dsh: dalam urutan tersimpan, tanpa kotak pencarian. Urutan A–Z hanya tampilan: urutan ini tidak mengubah urutan proyek tersimpan milik dsh.
|
|
166
181
|
- dsh juga tidak memiliki titik ekstensi untuk petunjuk di kotak pesan, jadi teks **Prediksi pesan berikutnya** ditampilkan di atas teks placeholder milik dsh (`[data-composer-placeholder]`). Jika pembaruan dsh mengubah markup itu, prediksi tidak ditampilkan. Selama fitur ini aktif, setiap giliran yang selesai memakai satu panggilan model singkat.
|
|
167
182
|
- **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.
|
|
183
|
+
- **Sempurnakan prompt** hanya melihat ringkasan proyek yang singkat, jalur yang berubah, dan jalur yang namanya cocok dengan kata-kata Anda: bukan kodenya sendiri. Jadi fitur ini bisa melewatkan file yang tepat, dan hanya menyebut jalur yang diberikan kepadanya. Baca teks baru sebelum Anda mengirimnya. Fitur ini tidak berjalan untuk perintah garis miring atau pesan dengan chip file atau simbol (teks baru adalah teks biasa, jadi chip itu akan hilang), dan sebuah pesan paling banyak 8.000 karakter. Gambar tetap terlampir: hanya teksnya yang berubah. Setiap klik memakai satu panggilan model; model yang kuat bisa memerlukan satu menit (`Esc` membatalkannya).
|
|
168
184
|
- Dukungan bawaan sudah diminta ke upstream: `move` antrean di [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), status Lanjutkan di [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
169
185
|
|
|
170
186
|
## Pertanyaan umum
|
|
@@ -189,9 +205,25 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
189
205
|
|
|
190
206
|
**Model mana yang menulis prediksi?** Model yang Anda pilih di **Pengaturan → Composer Plus → Prediksi pesan berikutnya → Model**. Daftarnya adalah daftar model milik dsh sendiri. **Default dsh** mengikuti model default dsh. Jika dsh tidak lagi menampilkan model yang dipilih, prediksi memakai model default. **Lengkapi saat mengetik** memiliki menu **Model** sendiri: **Sama dengan prediksi pesan berikutnya** (default) mengikuti model prediksi; pilihan lain hanya dipakai untuk pelengkapan. Jika dsh tidak lagi menampilkan model itu, pelengkapan memakai model prediksi.
|
|
191
207
|
|
|
208
|
+
**Bisakah dsh menyempurnakan prompt saya sebelum saya mengirimnya, seperti tombol Enhance prompt di Roo Code atau Augment?** Bisa, dengan **Sempurnakan prompt** (aktif secara default): ketik permintaan kasar, lalu klik tongkat ajaib di samping menu model. Fitur ini menulis ulang teks dengan obrolan ini dan proyek sebagai konteks, dalam bahasa Anda, dan tidak mengirimnya. `Cmd/Ctrl+Z` atau **Urungkan penyempurnaan** mengembalikan teks Anda. Pilih modelnya di **Pengaturan → Composer Plus → Sempurnakan prompt → Model**.
|
|
209
|
+
|
|
192
210
|
**Bagaimana cara mengubah urutan pesan dalam antrean di dsh?** Seret pegangan ⠿ pada pesan dalam antrean, atau fokuskan pegangan itu lalu tekan `↑` / `↓`.
|
|
193
211
|
|
|
194
|
-
**Bagaimana cara
|
|
212
|
+
**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.
|
|
213
|
+
|
|
214
|
+
**Bagaimana cara menghapus semua titik belum dibaca di satu proyek sekaligus?** Bilah samping → tombol **…** proyek → **Tandai semua sudah dibaca**.
|
|
215
|
+
|
|
216
|
+
**Bisakah saya menautkan ke satu pesan di obrolan yang panjang?** Bisa: arahkan penunjuk ke pesan itu dan klik **🔗**. Kirim tautan itu di obrolan: di dsh 0.2.1 dan yang lebih baru, klik pada tautan membuka obrolan di pesan itu.
|
|
217
|
+
|
|
218
|
+
**Saya tidak sengaja memutar balik giliran. Bisakah saya mendapatkannya kembali?** Bisa, dengan **Ulangi** di atas kotak pesan, tepat setelah putar balik: fitur ini memulai obrolan baru dari tepat sebelum putar balik dengan pesan yang sama, dan jika putar baliknya memakai **Obrolan dan file**, file juga dikembalikan.
|
|
219
|
+
|
|
220
|
+
**Bagaimana cara melihat hanya file yang diubah oleh satu obrolan?** Bilah samping kanan → **Perubahan** → **Obrolan ini**. Klik **␣** untuk menyembunyikan perubahan yang hanya berupa spasi.
|
|
221
|
+
|
|
222
|
+
**Bagaimana cara menghentikan Tinjauan otomatis agar tidak terus bertanya tentang alat yang sama dalam satu obrolan?** Klik **Izinkan untuk obrolan ini** pada kartu persetujuan. Izin ini hanya mencakup alat itu di obrolan itu, selama 1 jam secara default; cabut izin dari chip di header. Ubah waktunya di **Pengaturan → Composer Plus → Izinkan untuk obrolan ini**.
|
|
223
|
+
|
|
224
|
+
**iPhone saya hilang. Bagaimana cara mencegahnya mengakses Mac saya?** Klik **Koneksi seluler** di kiri bawah bilah samping, lalu klik **Remove** di samping iPhone itu. Kuncinya langsung tidak berfungsi; iPhone itu hanya dapat kembali dengan pemasangan baru yang Anda setujui di Mac.
|
|
225
|
+
|
|
226
|
+
**Bisakah saya mengunci Tether dengan Face ID?** Bisa: di Tether, aktifkan "Settings → Privacy → Lock with Face ID". Setelah itu, Tether meminta Face ID (atau kode sandi) saat dibuka dan saat Anda kembali ke aplikasi itu.
|
|
195
227
|
|
|
196
228
|
**Bagaimana cara hanya menampilkan proyek yang saya pakai hari ini di bilah samping dsh?** Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Pilih lagi untuk menampilkan semua proyek.
|
|
197
229
|
|
|
@@ -219,8 +251,12 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /pa
|
|
|
219
251
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
220
252
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
221
253
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
222
|
-
# every Settings feature row shows a loading screenshot
|
|
254
|
+
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
223
255
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
256
|
+
# What's new after an update: the release notes show once, Esc and Close close them
|
|
257
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
|
|
258
|
+
# README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
|
|
259
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
224
260
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
225
261
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
226
262
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
@@ -235,14 +271,17 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /pat
|
|
|
235
271
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
236
272
|
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
237
273
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
274
|
+
# Improve prompt (fake model, made-up git project): the wand sends the draft with the chat and the project, the answer replaces the draft, Cmd+Z and Undo bring it back + its thumbnail
|
|
275
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
|
|
238
276
|
```
|
|
239
277
|
|
|
240
278
|
```sh
|
|
241
279
|
npm run build:locales # after editing locales/<id>.json
|
|
280
|
+
npm run build:readme # after editing docs/features.json
|
|
242
281
|
npm test
|
|
243
282
|
```
|
|
244
283
|
|
|
245
|
-
**Aturan untuk fitur baru:** setiap baris fitur di Pengaturan → Composer Plus menampilkan tangkapan layar. Tambahkan id fitur ke `SHOT_OF` di `client.js` dan ke `SHOTS` di `index.js`, lalu sertakan `assets/features/<id>.webp` (diambil dari dsh demo sekali pakai, UI bahasa Inggris, sekitar 60 kB atau kurang). Tambahkan fitur itu
|
|
284
|
+
**Aturan untuk fitur baru:** setiap baris fitur di Pengaturan → Composer Plus menampilkan tangkapan layar. Tambahkan id fitur ke `SHOT_OF` di `client.js` dan ke `SHOTS` di `index.js`, lalu sertakan `assets/features/<id>.webp` (diambil dari dsh demo sekali pakai, UI bahasa Inggris, sekitar 60 kB atau kurang). Tambahkan fitur itu, dengan gambar yang sama, ke `docs/features.json` lalu jalankan `npm run build:readme`: perintah ini menulis tabel fitur di `README.md` dan di setiap `README.<id>.md` terjemahan, serta daftar di `llms.txt`. `test/shots.test.mjs` gagal jika sebuah fitur tidak memiliki tangkapan layar, dan `test/browser-settings-shots.mjs` memeriksa halaman Pengaturan yang asli. Daftar periksa lengkap untuk setiap perubahan ada di [AGENTS.md](AGENTS.md).
|
|
246
285
|
|
|
247
286
|
Pengujian menjalankan `client.js` yang asli terhadap React/DOM palsu, dan `index.js` (bagian Host) yang asli terhadap repositori git sementara. Pengujian gateway Tether (`test/tether-gateway.test.mjs`) memakai host dsh tiruan dan gateway TLS sungguhan. Aplikasi iPhone ada di `tether/ios` (lihat [tether/README.md](tether/README.md) dan [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` memeriksa riwayat input di browser sungguhan terhadap `dsh web` sekali pakai dengan `DSH_HOME` miliknya sendiri.
|
|
248
287
|
|