dsh-composer-plus 1.13.0 → 1.15.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 +65 -11
- package/README.es.md +65 -11
- package/README.fr.md +65 -11
- package/README.hi.md +65 -11
- package/README.id.md +65 -11
- package/README.ja.md +65 -11
- package/README.ko.md +65 -11
- package/README.md +65 -11
- package/README.pt-BR.md +65 -11
- package/README.ru.md +65 -11
- package/README.tr.md +65 -11
- package/README.vi.md +65 -11
- package/README.zh.md +65 -11
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/defaultWorkspace.webp +0 -0
- package/assets/features/findInChat.webp +0 -0
- package/assets/features/goalCheck.webp +0 -0
- package/assets/features/sessionBranch.webp +0 -0
- package/assets/features/worktreeChats.webp +0 -0
- package/client.js +1275 -222
- package/index.js +1442 -52
- package/package.json +2 -2
- package/tether/gateway/server.mjs +3 -2
package/README.id.md
CHANGED
|
@@ -14,7 +14,7 @@ Fitur kenyamanan bergaya Codex untuk UI desktop dan web [DeepSeek Harness](https
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness dengan Composer Plus: proyek yang sedang berjalan menampilkan spinner di bilah samping, dan panel Perubahan menampilkan diff git"></p>
|
|
16
16
|
|
|
17
|
-
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **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. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
18
18
|
|
|
19
19
|
## Instalasi
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil itu dikelola oleh aplikasi.)
|
|
31
31
|
|
|
32
|
-
> pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.15.0`.
|
|
33
33
|
|
|
34
34
|
## Fitur
|
|
35
35
|
|
|
@@ -37,8 +37,8 @@ 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**. 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,
|
|
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. 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
|
+
| **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> |
|
|
44
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> |
|
|
@@ -55,11 +55,16 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
55
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
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
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
|
+
| **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
|
+
| **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>Obrolan baru → tombol main (ikon branch) di antara tombol proyek dan tombol mode → **Branch baru**, lalu ketik pesan pertama dan kirim. Pesan pertama dapat membawa gambar dan file. 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> |
|
|
58
61
|
| **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
62
|
| **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
63
|
| **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
|
+
| **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> |
|
|
61
65
|
| **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
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. 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> |
|
|
63
68
|
| **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
69
|
| **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
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> |
|
|
@@ -67,7 +72,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
67
72
|
| **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
73
|
| **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
74
|
| **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> |
|
|
75
|
+
| **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> |
|
|
71
76
|
| **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
77
|
|
|
73
78
|
<!-- END GENERATED FEATURES -->
|
|
@@ -76,7 +81,7 @@ Tombol, tooltip, pemberitahuan, dan notifikasi mengikuti bahasa dsh yang dipilih
|
|
|
76
81
|
|
|
77
82
|
## Pengaturan
|
|
78
83
|
|
|
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**,
|
|
84
|
+
Setiap fitur dapat diaktifkan atau dinonaktifkan secara terpisah: dsh **Pengaturan → Composer Plus**. Setiap baris memiliki tangkapan layar kecil: arahkan penunjuk ke gambar itu untuk pratinjau yang lebih besar, atau klik untuk membukanya dalam ukuran penuh (`Esc` menutupnya). Kotak **Cari fitur** di bagian atas memfilter halaman menurut nama atau deskripsi (bahasa apa pun, tanpa membedakan huruf besar-kecil dan aksen); `Esc` mengosongkannya. Setiap baris memiliki sakelar dan deskripsi singkat. **?** kecil setelah nama baris membuka bagian README ini yang menjelaskan fitur itu, di README bahasa antarmuka dsh. Perubahan langsung berlaku tanpa mulai ulang dan diingat di perangkat itu. Semua fitur aktif secara default, kecuali **Koneksi seluler**, **Lanjutkan setelah mulai ulang**, dan **Lengkapi saat mengetik**. Host dsh menyimpan sakelar ketiga fitur ini serta sakelar **Pencarian isi**, **Putar balik giliran**, **Prediksi pesan berikutnya**, dan **Pemeriksaan tujuan**, jadi sakelar itu berlaku untuk setiap jendela dan tetap ada setelah mulai ulang. Host juga menyimpan pilihan **Model** untuk **Prediksi pesan berikutnya**, untuk **Lengkapi saat mengetik** (bawaannya **Sama dengan prediksi pesan berikutnya**), untuk **Sempurnakan prompt**, untuk **Pemeriksaan tujuan** (keduanya bawaannya **Sama dengan model obrolan**), serta **Batas waktu** untuk **Izinkan untuk obrolan ini** (bawaannya 1 jam). **Pencarian isi** baru berubah setelah dsh dimulai ulang (dsh membacanya saat dimulai). Sampai saat itu, barisnya menampilkan **Mulai ulang dsh agar perubahan ini berlaku.**
|
|
80
85
|
|
|
81
86
|
<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>
|
|
82
87
|
|
|
@@ -90,7 +95,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
90
95
|
|
|
91
96
|
Seluruh aplikasi langsung berganti bahasa. Pilihan ini adalah `locale.preference` tersimpan milik dsh sendiri (sama dengan Umum → Bahasa), jadi pilihan tetap ada setelah mulai ulang. **Bahasa sistem** menghapus pilihan itu: aplikasi desktop mengikuti bahasa OS, UI web mengikuti bahasa browser, dan bahasa yang tidak didukung kembali ke bahasa Inggris. Memasang plugin tidak pernah menimpa bahasa yang sudah Anda pilih.
|
|
92
97
|
|
|
93
|
-
Setiap paket berisi 3.
|
|
98
|
+
Setiap paket berisi 3.280 teks: setiap teks UI dsh `0.2.0-rc.2` dan `0.2.1-rc.2` (obrolan, bilah samping, pengaturan, persetujuan, jadwal, pratinjau file, pengelola plugin, pasar plugin), kontrol milik plugin ini, dan plugin populer [dsh-rewind](https://github.com/SiriLee/dsh-rewind). Yang tidak diterjemahkan: pesan Anda, output model, kode, nama perintah garis miring (`/plan`, `/compact`), label milik penyedia seperti tingkat penalaran `High`, teks plugin lain, serta menu bawaan dan dialog pembaruan aplikasi desktop (dsh hanya menyediakannya dalam bahasa Inggris/Mandarin). Teks yang ditambahkan oleh dsh versi lebih baru tampil dalam bahasa Inggris sampai paket diperbarui. Jika plugin lain sudah menyediakan suatu bahasa, plugin itu tetap memegang bahasa tersebut.
|
|
94
99
|
|
|
95
100
|
## Pintasan keyboard
|
|
96
101
|
|
|
@@ -110,6 +115,12 @@ Setiap paket berisi 3.143 teks: setiap teks UI dsh `0.2.0-rc.2` dan `0.2.1-rc.2`
|
|
|
110
115
|
| `Tab` | kotak pesan kosong dengan prediksi | masukkan prediksi ke kotak pesan |
|
|
111
116
|
| `Tab` | pelengkapan abu-abu setelah kursor | tambahkan pelengkapan ke pesan |
|
|
112
117
|
| `Esc` | kotak pesan kosong dengan prediksi | sembunyikan prediksi |
|
|
118
|
+
| `Cmd/Ctrl+Z` | kotak pesan, setelah **Sempurnakan prompt** | kembalikan teks yang Anda ketik |
|
|
119
|
+
| `Esc` | kotak pesan, saat **Sempurnakan prompt** berjalan | batalkan penyempurnaan |
|
|
120
|
+
| `Enter` / `Esc` | pesan antrean yang Anda klik dua kali | simpan / batalkan edit |
|
|
121
|
+
| `Cmd+F` di Mac, `Ctrl+F` di Windows dan Linux | obrolan yang terbuka | buka **Cari di obrolan** |
|
|
122
|
+
| `Enter` / `Shift+Enter`, `↓` / `↑` | kotak **Cari di obrolan** | kecocokan berikutnya / sebelumnya |
|
|
123
|
+
| `Esc` | kotak **Cari di obrolan** | tutup kotak |
|
|
113
124
|
|
|
114
125
|
Menu `/` atau `@` yang terbuka memakai tombol-tombol ini untuk dirinya sendiri.
|
|
115
126
|
|
|
@@ -122,10 +133,14 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
122
133
|
- **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.
|
|
123
134
|
- **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.
|
|
124
135
|
|
|
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
|
|
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 --
|
|
136
|
+
- **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 mencantumkan hingga 1000 branch lokal dan remote serta menampilkan 300 commit terbaru dari satu branch: hanya garis induk pertamanya, jadi commit merge mewakili commit yang dibawanya. Pohon tidak pernah berpindah branch (checkout). **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.
|
|
137
|
+
- **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`, …), kerangka sisa README (judul bagian, baris tabel, butir daftar; paling banyak 6 kB), serta judul commit terbaru (`git log --format=%s`, paling banyak 6 kB), total paling banyak 28 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.
|
|
127
138
|
- **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`.
|
|
128
139
|
- **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).
|
|
140
|
+
- **Buka isu GitHub** (Ide fitur → daftar **Nanti**): hanya berjalan saat Anda mengkliknya. Bagian Host menjalankan GitHub CLI milik Anda sendiri (`gh issue create`) di folder obrolan, dengan judul dan ringkasan ide yang tersimpan (serta alasan ide itu penting); `gh` memakai login-nya sendiri dan remote GitHub folder itu, jadi isu dibuat di repositori tersebut dengan akun Anda, dan GitHub menampilkannya kepada semua orang yang dapat melihat repositori itu. dsh menghapus variabel yang namanya mirip token dari perintah yang dijalankannya; jika Anda memberi `gh` token melalui `GH_TOKEN` atau `GITHUB_TOKEN`, plugin hanya meneruskan variabel itu ke `gh`. Tautan isu disimpan bersama ide di `later.json`.
|
|
141
|
+
- **Obrolan yang mengubah file ini** (Perubahan, menu "…" sebuah file): bagian Host membaca log obrolan yang foldernya ada di repositori yang sama, sebagaimana dsh menyimpannya, lalu mengembalikan judul setiap obrolan, waktunya, dan baris pertama permintaannya; bagian Host tidak pernah membuka file itu sendiri.
|
|
142
|
+
- **Branch Git di baris obrolan:** bagian Host menjalankan `git branch --show-current` (hanya baca) di folder obrolan saat giliran dimulai dan saat berakhir, dan hanya menyimpan ID obrolan, nama branch, dan waktunya di `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` (file hanya untuk pemilik, 2000 obrolan terbaru). Sakelarnya ada di `branches.json` di sebelahnya.
|
|
143
|
+
- **Cari di obrolan** hanya berjalan di halaman: fitur ini membaca teks yang ditampilkan halaman dan tidak mengirim apa pun.
|
|
129
144
|
- **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.
|
|
130
145
|
- **Hapus obrolan:** memindahkan folder log milik obrolan (`$DSH_HOME/sessions/<project>/<chat>`) ke Tong Sampah. Folder proyek tidak disentuh.
|
|
131
146
|
- **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.
|
|
@@ -135,6 +150,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
135
150
|
- **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).
|
|
136
151
|
- **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
152
|
- **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
|
+
- **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).
|
|
138
154
|
|
|
139
155
|
## Pemecahan masalah
|
|
140
156
|
|
|
@@ -149,7 +165,11 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
149
165
|
- **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
166
|
- **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.
|
|
151
167
|
- **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).
|
|
152
|
-
- **
|
|
168
|
+
- **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
|
+
- **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
|
+
- **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
|
+
- **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.15.0`), lihat catatan pemasangan di atas.
|
|
153
173
|
|
|
154
174
|
## Batasan
|
|
155
175
|
|
|
@@ -173,14 +193,20 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
173
193
|
- **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
194
|
- **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
195
|
- **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
|
+
- **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
|
+
- **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. 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.
|
|
199
|
+
- **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).
|
|
176
200
|
- Notifikasi yang dikirim sebelum mulai ulang hanya membawa dsh ke depan saat diklik.
|
|
177
201
|
- 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.
|
|
178
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. 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.
|
|
179
203
|
- 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.
|
|
180
204
|
- 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
|
+
- 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.
|
|
181
206
|
- 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.
|
|
182
207
|
- **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
208
|
- **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
|
+
- **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.
|
|
184
210
|
- 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).
|
|
185
211
|
|
|
186
212
|
## Pertanyaan umum
|
|
@@ -207,6 +233,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
207
233
|
|
|
208
234
|
**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
235
|
|
|
236
|
+
**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
|
+
|
|
210
238
|
**Bagaimana cara mengubah urutan pesan dalam antrean di dsh?** Seret pegangan ⠿ pada pesan dalam antrean, atau fokuskan pegangan itu lalu tekan `↑` / `↓`.
|
|
211
239
|
|
|
212
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.
|
|
@@ -217,6 +245,10 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
217
245
|
|
|
218
246
|
**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
247
|
|
|
248
|
+
**Obrolan mana yang mengubah file ini?** Bilah samping kanan → **Perubahan** → **…** milik file → **Obrolan yang mengubah file ini**. Klik sebuah baris untuk membuka obrolan itu di permintaan yang membuat perubahan.
|
|
249
|
+
|
|
250
|
+
**Bisakah saya mencari di dalam satu obrolan yang panjang?** Bisa: tekan `Cmd+F` di Mac (`Ctrl+F` di Windows dan Linux) di obrolan. **Cari di obrolan** menyorot setiap kecocokan dan berpindah di antaranya dengan `Enter` dan `Shift+Enter`.
|
|
251
|
+
|
|
220
252
|
**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
253
|
|
|
222
254
|
**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**.
|
|
@@ -237,6 +269,12 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
237
269
|
|
|
238
270
|
**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.
|
|
239
271
|
|
|
272
|
+
**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
|
+
|
|
274
|
+
**Bagaimana cara mengerjakan beberapa fitur dari satu proyek sekaligus, masing-masing di branch-nya sendiri?** Dengan **Branch per obrolan**: obrolan baru → tombol main dengan ikon branch → **Branch baru**, lalu 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.
|
|
275
|
+
|
|
276
|
+
**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
|
+
|
|
240
278
|
**Apakah plugin ini berfungsi di aplikasi desktop?** Ya: Pengaturan → Plugin → **Tambahkan plugin** → `dsh-composer-plus`. Diuji pada dsh 0.2.0-rc.2 (desktop dan web) dan 0.2.1-rc.2 (web).
|
|
241
279
|
|
|
242
280
|
## Pengembangan
|
|
@@ -273,6 +311,22 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path
|
|
|
273
311
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
274
312
|
# 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
313
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
|
|
314
|
+
# Goal check (fake model, made-up project): a failing test and a verifier "not done" keep the goal open, the agent's own test run is reused, a pass closes it, a token budget blocks it + its thumbnail
|
|
315
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
|
|
316
|
+
# 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
|
+
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 list, a branch's commits, commit files and diffs, back marks the row + its thumbnail
|
|
319
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
|
|
320
|
+
# Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
|
|
321
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
|
|
322
|
+
# Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
|
|
323
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-predict.mjs /path/to/dsh/lib/bin.js
|
|
324
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-complete.mjs /path/to/dsh/lib/bin.js
|
|
325
|
+
# Project search in a new chat: A–Z order, filter, Enter + its thumbnail
|
|
326
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path/to/dsh/lib/bin.js
|
|
327
|
+
# Queue drag-and-drop and Continue with a queued message (slow fake model)
|
|
328
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
|
|
329
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
|
|
276
330
|
```
|
|
277
331
|
|
|
278
332
|
```sh
|
|
@@ -283,7 +337,7 @@ npm test
|
|
|
283
337
|
|
|
284
338
|
**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).
|
|
285
339
|
|
|
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.
|
|
340
|
+
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)). Setiap rute Host, permintaannya, dan apakah Tether dapat memanggilnya tercantum di [docs/ROUTES.md](docs/ROUTES.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.
|
|
287
341
|
|
|
288
342
|
Paket bahasa adalah JSON yang hanya berisi data di `locales/<id>.json`, yang disematkan ke dalam satu entri klien oleh `npm run build:locales` (tanpa layanan terjemahan atau unduhan saat runtime). `npm test` memeriksa setiap paket untuk cakupan kunci yang lengkap, placeholder dan jeda baris yang identik, serta perilaku sistem/override. Untuk pemeriksaan terisolasi di aplikasi sungguhan dengan Playwright yang terpasang secara lokal:
|
|
289
343
|
|