dsh-composer-plus 1.17.0 → 1.19.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 +24 -7
- package/README.es.md +24 -7
- package/README.fr.md +24 -7
- package/README.hi.md +24 -7
- package/README.id.md +24 -7
- package/README.ja.md +24 -7
- package/README.ko.md +24 -7
- package/README.md +24 -7
- package/README.pt-BR.md +24 -7
- package/README.ru.md +24 -7
- package/README.tr.md +24 -7
- package/README.vi.md +24 -7
- package/README.zh.md +24 -7
- package/assets/features/blockedCommands.webp +0 -0
- package/assets/features/plannedSteps.webp +0 -0
- package/assets/features/sessionBranch.webp +0 -0
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +715 -73
- package/index.js +699 -3
- package/package.json +3 -2
- package/release-notes.json +18 -0
- package/tether/gateway/server.mjs +1 -0
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. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
17
|
+
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Papan tugas** memanggil model obrolan baru satu kali untuk label setiap tugas yang Anda mulai di papan. **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.19.0`.
|
|
33
33
|
|
|
34
34
|
## Fitur
|
|
35
35
|
|
|
@@ -68,11 +68,14 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
68
68
|
| **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. Model menjawab dengan tabel bukti: setiap bagian tujuan ditandai terverifikasi, salah, atau belum terselesaikan, beserta bukti dan perbaikannya; tujuan baru ditutup jika setiap bagian terverifikasi. Jika satu pemeriksaan gagal, tujuan tetap aktif dan agen membaca setiap bagian yang masih terbuka beserta bukti dan perbaikannya, lalu putaran berikutnya berlanjut. Satu baris di bawah bilah tujuan (**Pemeriksaan tujuan**) menampilkan pengujian, hasil terakhir, dan jumlah bagian yang terverifikasi (arahkan penunjuk ke baris itu untuk melihat tabelnya). **Edit** mengatur perintah pengujian Anda sendiri dan batas waktu atau token; jika batas terlampaui, tujuan menjadi terhambat. Batas token juga menghitung subagen obrolan. **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> |
|
|
69
69
|
| **Lanjutkan di obrolan baru** | <a id="feature-handoffchat"></a>Klik kanan obrolan di bilah samping (atau buka menu **…** obrolan itu) → **Lanjutkan di obrolan baru…**. Satu panggilan ke model obrolan itu sendiri menulis catatan serah terima dari apa yang ditampilkan obrolan: Tugas, Hasil, Selesai, Keputusan, Masalah terbuka, dan Tindakan berikutnya (panggilan alat dan hasilnya menjadi bukti; langkah yang Anda putar balik tidak disertakan). Catatan terbuka di sebuah dialog: baca dan edit catatan itu. **Tulis ulang** menulis catatan baru. **Mulai obrolan baru** (atau `Cmd/Ctrl+Enter`) membuka obrolan baru di proyek yang sama dengan catatan itu dan tautan ke obrolan lama sebagai pesan pertamanya; obrolan lama tetap seperti semula. Gunakan saat obrolan panjang sudah penuh atau lambat, atau untuk melanjutkan besok. Tidak ada yang ditulis ke proyek. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Tangkapan layar: Lanjutkan di obrolan baru"></a> |
|
|
70
70
|
| **Rincian konteks** | <a id="feature-contextbreakdown"></a>Bilah samping kanan → `+` → **Konteks**. Halaman ini menampilkan apa yang sekarang mengisi konteks model obrolan yang terbuka dan berapa banyak jendela konteks yang dipakainya: prompt sistem, instruksi proyek (AGENTS.md), skill, pesan Anda, balasan agen dan panggilan alat, hasil alat (per alat), hasil MCP (per server), definisi alat, ringkasan pemadatan, dan catatan konteks lainnya, masing-masing dengan token dan porsinya. Klik sebuah bagian untuk melihat alat atau servernya. Halaman ini hanya membaca log obrolan, setelah `/compact` dan putar balik, dan tidak memanggil model; halaman ini membaca ulang setelah setiap giliran dan dengan **Segarkan**. Gunakan untuk melihat mengapa obrolan lambat atau penuh, misalnya karena hasil alat MCP yang besar atau banyak definisi alat. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Tangkapan layar: Rincian konteks"></a> |
|
|
71
|
+
| **Langkah terencana** | <a id="feature-plannedsteps"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Agen mendapat alat `plan_next_steps`: dalam pesan yang sama dengan sebuah perintah, agen dapat merencanakan perintah berikutnya beserta argumen persisnya dan sebuah syarat, misalnya “jalankan `npm test` jika build berhasil”. Jika hasilnya memenuhi syarat, Composer Plus menjalankan langkah berikutnya sendiri tanpa panggilan model baru, sehingga obrolan panjang memakai lebih sedikit token. Langkah itu muncul di obrolan sebagai satu baris pendek, “Composer Plus · Planned steps: ran `test` … without a model call”, diikuti panggilan alat dan hasilnya. Hanya langkah `bash`, `read`, `grep`, dan `glob`; persetujuan, sandbox, dan File yang dilindungi berlaku untuk setiap langkah seperti biasa. Model menjawab lagi saat syarat tidak terpenuhi, saat dua langkah siap bersamaan, setelah langkah terakhir, dan saat Anda mengirim pesan. Idenya berasal dari HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Tangkapan layar: Langkah terencana"></a> |
|
|
71
72
|
| **File yang dilindungi** | <a id="feature-protectedfiles"></a>Aktif secara bawaan. Alat file milik agen sendiri tidak dapat membaca atau mengubah file yang cocok dengan pola Anda: `read`, `read_image`, dan `grep` pada file ditolak untuk pola **baca dan tulis**, sedangkan `write`, `edit`, dan `str_replace_editor` ditolak untuk kedua jenis. Agen membaca alasannya dan diminta untuk bertanya kepada Anda. Pola bawaannya `.env*`, `*.pem`, dan `*.key`. Pengaturan → Composer Plus → **File yang dilindungi**: tambahkan pola (misalnya `published/**` atau `config/*.yml`), klik jenisnya untuk beralih antara **baca dan tulis** dan **hanya tulis**, hapus dengan ✕, atau klik **Gunakan bawaan**. Pola tanpa `/` cocok dengan nama file di folder mana pun. Ini pagar pengaman, bukan sandbox: perintah shell (`cat .env`), skrip, atau alat MCP tetap dapat menjangkau file itu (lihat Batasan). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Tangkapan layar: File yang dilindungi"></a> |
|
|
73
|
+
| **Perintah yang diblokir** | <a id="feature-blockedcommands"></a>Aktif secara bawaan, dengan daftar kosong. Perintah shell agen (`bash`, `pwsh`) tidak dapat menjalankan perintah yang cocok dengan aturan Anda: aturan **blokir** menolak panggilan itu (agen membaca alasannya dan diminta untuk bertanya kepada Anda), aturan **tanya dulu** menampilkan kartu persetujuan dsh, dan perintah hanya berjalan jika Anda mengizinkannya. Pengaturan → Composer Plus → **Perintah yang diblokir**: ketik aturan (misalnya `npm publish`, `git push --force`, atau `ssh *192.168.2.19`), klik jenisnya untuk beralih antara **blokir** dan **tanya dulu**, lalu klik **Tambah**; klik jenis sebuah aturan untuk mengubahnya, hapus aturan dengan ✕. Aturan adalah nama perintah dan kata-kata yang harus muncul sesudahnya dalam urutan ini; `*` cocok dengan teks apa pun. Fitur ini juga menemukan perintah sesudah `&&`, `;`, `\|`, di dalam `$(…)`, `bash -c "…"`, atau `eval`, dan sesudah `sudo` atau `env`. Ini pagar pengaman, bukan sandbox: variabel (`$CMD`), file skrip, atau program lain tetap dapat menjalankan perintah itu (lihat Batasan). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Tangkapan layar: Perintah yang diblokir"></a> |
|
|
74
|
+
| **Papan tugas** | <a id="feature-taskboard"></a>Bilah samping kiri → **Papan tugas**. Papan kanban obrolan dsh Anda dengan status langsung yang sama seperti di bilah samping: obrolan yang menunggu persetujuan, jawaban, atau tinjauan rencana Anda ada di **Ditinjau** dengan titik oranye, obrolan yang berjalan ada di **Sedang dikerjakan**, dan obrolan yang sudah selesai ada di **Selesai** (hijau sampai Anda membukanya). Pilih proyek atau **Semua proyek** di kiri; folder branch per obrolan dihitung sebagai proyeknya. **Tugas baru** (atau `n`) hanya memerlukan prompt: `Enter` memulai obrolan baru di proyek, kartunya tampil di **Akan dikerjakan**, dsh memberi nama obrolan, dan model obrolan menulis hingga 3 label. Klik kartu untuk membuka obrolannya. Di kartu oranye, klik **Jawab** untuk menjawabnya di papan: **Tolak** atau **Izinkan sekali**, **Setujui** atau **Minta perubahan** untuk rencana, atau pilihan dan teks Anda sendiri untuk pertanyaan. **Sembunyikan yang selesai** menyembunyikan **Selesai** di perangkat ini. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Tangkapan layar: Papan tugas"></a> |
|
|
72
75
|
| **Memori proyek** | <a id="feature-projectmemory"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Setiap folder proyek mendapat memorinya sendiri, yang dibaca oleh obrolan berikutnya di proyek itu, seperti DS Bot menyimpan satu memori untuk setiap Bot. Setelah setiap giliran selesai, satu panggilan ke model obrolan membaca pesan baru (bukan yang ditarik oleh putar balik), menyimpan preferensi, keputusan, dan fakta Anda yang bertahan lama sebagai catatan singkat, serta mengubah atau menghapus catatan lama. Agen juga dapat menyimpan, menghapus, dan mencari catatan sendiri (`memory_remember`, `memory_forget`, `memory_recall`). Catatan juga bisa global: setiap proyek membacanya. Obrolan baru mendapat catatan di prompt sistemnya; catatan yang disimpan kemudian muncul mulai obrolan berikutnya. File berupa Markdown di folder home dsh (`storages/dsh-composer-plus/memory/`), tidak pernah di folder proyek. **Buka memori** di baris yang sama menampilkan semua catatan tersimpan, dikelompokkan per proyek (dan memori global), dengan saringan. Tulis dengan kata-kata Anda apa yang diubah (misalnya "saya beralih dari yarn ke pnpm"), lalu **Pratinjau perubahan**: model default dsh mengusulkan perubahan, dan hanya **Terapkan** yang menyimpannya. Di Tether: menu judul obrolan → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Tangkapan layar: Memori proyek"></a> |
|
|
73
76
|
| **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> |
|
|
74
77
|
| **Status proyek** | <a id="feature-projectstatus"></a>Baris proyek di bilah samping menampilkan penanda spinner / menunggu / selesai yang sama seperti obrolannya. Jadi, proyek yang diciutkan tetap memberi tahu Anda bahwa ada obrolan di dalamnya yang sedang bekerja atau memerlukan Anda. Obrolan yang menunggu Anda ditampilkan lebih dulu, lalu obrolan selesai yang belum Anda buka (titik hijau, juga saat obrolan lain masih berjalan), lalu spinner. Arahkan penunjuk ke penanda itu untuk melihat detailnya. Di **Pohon Ruang Kerja**, baris folder induk juga menampilkan obrolan dari setiap proyek di dalamnya (misalnya setiap folder branch di `.worktrees/`), juga saat folder itu diciutkan. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
|
|
75
|
-
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>
|
|
78
|
+
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>Dalam tampilan “Dalam satu daftar” di bilah samping, setiap baris obrolan 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 tidak punya branch sehingga tidak menampilkan label). 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. Dalam “Ruang Kerja” dan “Pohon Ruang Kerja”, tidak ada baris obrolan yang menampilkan label, karena obrolan sudah berada di bawah baris proyeknya. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Tangkapan layar: Branch Git di baris obrolan"></a> |
|
|
76
79
|
| **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> |
|
|
77
80
|
| **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> |
|
|
78
81
|
| **Filter proyek terbaru** | <a id="feature-recentprojects"></a>Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Di **Pohon Ruang Kerja**, folder induk tetap terlihat selama ada proyek aktif di dalamnya, dan obrolan yang tidak aktif dalam 2 jam terakhir juga disembunyikan, sehingga hanya obrolan terbaru yang ditampilkan. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
|
|
@@ -82,7 +85,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
82
85
|
| **Buka obrolan yang menunggu saat tidak aktif** | <a id="feature-idleswitch"></a>Saat obrolan mengajukan pertanyaan, menunggu persetujuan atau tinjauan rencana (titik oranye), atau menyelesaikan giliran yang belum Anda baca (titik hijau), dan Anda tidak menggunakan dsh selama 30 detik, dsh membuka obrolan itu. Obrolan oranye dibuka sebelum obrolan hijau. Di setiap kelompok, obrolan yang paling lama menunggu dibuka lebih dulu; obrolan berikutnya dibuka setelah 30 detik lagi tanpa penggunaan. Tombol, klik, gerakan mouse, roda gulir, atau sentuhan memulai ulang hitungan 30 detik. Teks di kolom yang sedang fokus, teks yang dipilih, atau menu atau dialog yang terbuka juga menghentikan perpindahan. Selama obrolan yang menunggu ada di layar, tidak ada yang berubah. Jika Anda meninggalkan obrolan yang menunggu tanpa menjawab, obrolan itu dapat terbuka lagi setelah 30 detik berikutnya tanpa penggunaan. Saat obrolan hijau terbuka, titiknya hilang; obrolan hijau berikutnya baru terbuka setelah Anda menggunakan dsh lagi, lalu tidak menggunakannya selama 30 detik. Ini juga berlaku saat dsh berada di latar belakang, tetapi dsh tidak muncul ke depan. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Tangkapan layar: Buka obrolan yang menunggu saat tidak aktif"></a> |
|
|
83
86
|
| **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> |
|
|
84
87
|
| **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> |
|
|
85
|
-
| **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 (
|
|
88
|
+
| **Pembaruan otomatis** | <a id="feature-autoupdate"></a>Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. Mulai ulang dsh untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. Saat dsh pertama kali dimulai dengan versi baru, jendela **Yang baru di Composer Plus N** menampilkan catatan rilis versi itu satu kali dalam bahasa **Bahasa aplikasi** (catatan ikut bersama versi baru, tanpa panggilan jaringan lain; bahasa tanpa catatan menampilkan catatan berbahasa Inggris); **Tutup** atau `Esc` menutupnya. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
|
|
86
89
|
| **Pencadangan** | <a id="feature-backup"></a>Pengaturan → Composer Plus → **Pencadangan** → **Cadangkan sekarang** menulis seluruh dsh home Anda (obrolan, pengaturan, plugin, MCP, skill) ke dalam satu arsip di `~/Desktop/dsh-backups`, beserta checksum. Rahasia disamarkan di dalam arsip: file kredensial, file kunci (`.pem`, `.key`), serta nilai token, secret, dan password di pengaturan yml hanya tetap ada di komputer ini, di `vault` folder tersebut. `cache/`, `dsh-runtimes/`, dan `node_modules` tidak masuk ke arsip (dsh membuatnya lagi). Setiap cadangan dalam daftar memiliki **Periksa** (membacanya sampai habis), **Untuk komputer lain** (folder untuk disalin ke komputer baru, beserta konsol penyelamat), dan **Hapus**. Arsip dsh-backup di folder yang sama juga tampil dan dapat dipakai. Untuk memulihkan, keluar dari dsh dan gunakan konsol penyelamat. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Tangkapan layar: Pencadangan"></a> |
|
|
87
90
|
| **Pencadangan otomatis** | <a id="feature-autobackup"></a>Aktifkan **Pencadangan otomatis** (nonaktif secara default: setiap salinan kira-kira sebesar dsh home Anda tanpa cache-nya). Pilih seberapa sering (**Setiap**: 6 jam sampai 7 hari, default 24 jam) dan berapa banyak cadangan yang disimpan (**Simpan**: 3 sampai 14, default 7). Waktu berikutnya tampil di bawah sakelar; pencadangan yang gagal juga tampil di sana dan dicoba lagi 30 menit kemudian. Saat dsh atau Composer Plus dimulai dengan versi baru, snapshot dibuat segera setelah dimulai, sebelum versi baru lama memakai data Anda (dua yang terbaru disimpan, ditandai **Sebelum peningkatan**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Tangkapan layar: Pencadangan otomatis"></a> |
|
|
88
91
|
| **Pemeriksaan log sesi** | <a id="feature-sessiondoctor"></a>**Periksa log sesi** membaca log setiap obrolan dan menampilkan log yang tidak dapat dibuka dsh (frame rusak, catatan terpotong, nomor urut salah). Bagian akhir yang tidak lengkap tidak ditampilkan: dsh memperbaikinya sendiri. **Perbaiki dari cadangan** mengembalikan salinan dari cadangan terbaru yang memiliki salinan sehat, dan menyimpan file yang rusak di sebelahnya (`.corrupt-<waktu>`). Pesan yang ditulis setelah cadangan itu tidak ada di salinan. Obrolan yang terbuka di dsh ini tidak diperbaiki di sini: keluar dari dsh dan perbaiki obrolan itu di konsol penyelamat. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Tangkapan layar: Pemeriksaan log sesi"></a> |
|
|
@@ -166,7 +169,9 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
166
169
|
- **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).
|
|
167
170
|
- **Lanjutkan di obrolan baru:** tidak ada yang berjalan sampai Anda mengkliknya. Lalu bagian Host mengirim obrolan (seperti yang dibaca Pemeriksaan tujuan: tanpa penalaran, tanpa langkah yang ditarik oleh putar balik) ke model obrolan itu sendiri dan menampilkan catatan serah terima; hanya **Mulai obrolan baru** yang membuat obrolan baru. Tidak ada yang ditulis ke proyek.
|
|
168
171
|
- **Rincian konteks:** bagian Host hanya membaca log obrolan; tanpa panggilan model, tanpa file proyek.
|
|
172
|
+
- **Papan tugas:** papan menampilkan obrolan dsh sendiri dari daftar dsh sendiri di jendela ini; papan tidak menambahkan data obrolan miliknya sendiri. Saat Anda memulai tugas, bagian Host membuat obrolan baru di proyek yang Anda pilih dan mengirim prompt Anda ke obrolan itu sebagai pesan pertamanya, seolah-olah Anda mengetiknya di sana, jadi persetujuan, sandbox, dan model obrolan berlaku seperti biasa. Lalu bagian Host mengirim prompt itu (4.000 karakter pertamanya, tidak ada yang lain) ke model obrolan tersebut dalam satu permintaan lagi, tanpa alat, untuk mendapatkan hingga 3 label. Prompt, label, dan waktu mulai setiap tugas disimpan di `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (file hanya untuk pemilik, 2.000 yang terbaru); sakelarnya ada di `board-switch.json` di sebelahnya. Tidak ada yang ditulis ke folder proyek. **Jawab** mengirim jawaban Anda ke permintaan dsh sendiri yang tertunda, sama seperti kartu milik obrolan itu sendiri. Daftar tugas lama dari versi sebelumnya (`board.json`) tetap ada di disk seperti semula dan tidak dibaca.
|
|
169
173
|
- **File yang dilindungi:** daftar dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca path dari setiap panggilan alat file (dan path aslinya), tidak pernah membaca file itu.
|
|
174
|
+
- **Perintah yang diblokir:** aturan dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca teks perintah dari setiap panggilan `bash` dan `pwsh`; pemeriksaan tidak menjalankan apa pun dan tidak mengirim apa pun.
|
|
170
175
|
- **Memori proyek:** nonaktif sampai Anda mengaktifkannya. Saat aktif, setelah setiap giliran selesai di obrolan tingkat atas, bagian Host mengirim pesan baru obrolan itu sejak tinjauan terakhir (pesan Anda dan balasan teks agen; tanpa keluaran alat, penalaran, konteks tersembunyi, atau pesan yang ditarik oleh putar balik; salinan obrolan induk pada obrolan cabang tidak ikut; paling banyak sekitar 16.000 karakter) dan catatan yang tersimpan ke model obrolan itu sendiri, sebagai satu permintaan tanpa alat. Catatan berupa file Markdown di `$DSH_HOME/storages/dsh-composer-plus/memory/` (file khusus pemilik): `projects/<id>/` untuk setiap folder proyek (`<id>` adalah hash dari path asli folder; `project.json` mencatat foldernya), `global/`, `journal.jsonl` (setiap perubahan dengan baris sebelum dan sesudahnya), dan `reviewed.json` (sampai mana setiap obrolan dibaca). Tidak ada yang ditulis ke folder proyek. Catatan yang tampak seperti kunci, token, kata sandi, atau nomor identitas ditolak. Catatan sebuah proyek masuk ke prompt sistem setiap obrolan baru di folder itu, sehingga ikut ke model pada setiap permintaan obrolan itu. Sakelarnya ada di `memory.json` di tempat yang sama. **Buka memori** tidak mengirim apa pun sampai Anda menekan **Pratinjau perubahan**; lalu ia mengirim catatan yang ditampilkan dan teks Anda ke model default dsh, sebagai satu permintaan tanpa alat. Perubahan hanya ditulis saat **Terapkan**, dengan `editor` di jurnal. Tether membaca dan mengubah catatan melalui rute yang sama.
|
|
171
176
|
- **Pencadangan:** tidak ada yang keluar dari komputer Anda. Arsip disimpan di `~/Desktop/dsh-backups` (file hanya untuk pemilik). Rahasia tidak ada di dalam arsip: file kredensial (`.credentials.yaml`, `.env`), file kunci (`.pem`, `.key`, `.p12`, `.pfx`), serta nilai pengaturan token, secret, password, dan kunci API di file yml disamarkan; salinan aslinya tetap ada di `composer-plus-vault/<archive>/` di folder yang sama (hanya untuk pemilik), hanya di komputer ini. **Untuk komputer lain** tidak menyalin vault: masukkan lagi rahasia itu di sana. Log obrolan, pengaturan, dan isi dsh home lainnya masuk ke arsip apa adanya: jaga folder itu tetap privat, sama seperti `$DSH_HOME` itu sendiri. Pencadangan membaca file dengan `O_NOFOLLOW | O_NONBLOCK`; symlink disimpan sebagai tautan (tidak pernah diikuti), dan FIFO atau perangkat dilewati. Sakelar dan pengaturan pencadangan otomatis ada di `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json`, sakelar konsol penyelamat di `rescue-console.json`, dan selama dsh berjalan, `running/host-<pid>.json` menyebut setiap proses dsh (konsol penyelamat membaca file-file itu untuk menolak pemulihan).
|
|
172
177
|
- **Konsol penyelamat:** menu terminal; konsol ini tidak membuka port jaringan. Pemulihan hanya menulis ke folder baru di sebelah dsh home (file dengan `O_EXCL | O_NOFOLLOW`, symlink paling akhir dan tidak pernah diikuti) dan menolak arsip dengan nama yang tidak aman (`..`, jalur absolut), perangkat atau FIFO, lebih dari satu folder teratas, atau entri di bawah tautan.
|
|
@@ -186,10 +191,10 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
186
191
|
- **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).
|
|
187
192
|
- **Antrean kosong setelah mulai ulang:** dsh sendiri mengosongkan antrean saat ditutup. Lanjutkan setelah mulai ulang hanya mengembalikannya di obrolan yang dilanjutkan; di obrolan lain, kirim lagi pesannya. Pesan yang Anda hapus tepat sebelum dsh ditutup bisa kembali: hapus lagi.
|
|
188
193
|
- **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.
|
|
189
|
-
- **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).
|
|
194
|
+
- **Tidak ada label branch di baris obrolan:** bilah samping tidak dalam tampilan “Dalam satu daftar” (dalam “Ruang Kerja” dan “Pohon Ruang Kerja”, tidak ada baris obrolan yang menampilkan label), obrolan itu belum memiliki giliran sejak Anda memasang versi ini, foldernya bukan repositori git, atau **Branch Git di baris obrolan** nonaktif. Setelah pembaruan, mulai ulang dsh (bagian Host mencatat branch).
|
|
190
195
|
- **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.
|
|
191
196
|
- **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).
|
|
192
|
-
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.
|
|
197
|
+
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.19.0`), lihat catatan pemasangan di atas.
|
|
193
198
|
- **Cadangkan sekarang menyatakan "Tindakan pencadangan lain sedang berjalan":** ada tindakan yang berjalan di jendela dsh lain atau di konsol penyelamat (keduanya berbagi file kunci, `.composer-plus.lock`, di folder cadangan). Tunggu sampai tindakan itu selesai. Jika tidak ada tindakan yang berjalan, kunci milik proses yang sudah ditutup diambil alih pada klik berikutnya.
|
|
194
199
|
- **Konsol penyelamat menyatakan "dsh is running":** keluar dari dsh terlebih dahulu. Jika dsh memang sudah tertutup, file yang disebut dalam pesan itu tersisa dari crash: hapus file itu dan coba lagi.
|
|
195
200
|
- **Setelah pemulihan, dsh tidak mau dimulai atau ada plugin yang hilang:** paket plugin sebuah profil harus dipasang lagi. Konsol penyelamat menawarkannya setelah pemulihan; atau jalankan `pnpm install` di setiap folder di bawah `$DSH_HOME/profiles/` yang dicantumkannya. Rahasia yang tidak ada di vault (komputer lain) harus dimasukkan lagi: konsol mencantumkannya.
|
|
@@ -209,6 +214,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
209
214
|
- **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.
|
|
210
215
|
- 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.
|
|
211
216
|
- 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.
|
|
217
|
+
- **Yang baru di Composer Plus N** menampilkan catatan dalam bahasa **Bahasa aplikasi**. Bahasa antarmuka dengan wilayah lain mendapat catatan bahasa dasarnya (`en-GB` mendapat catatan bahasa Inggris, `zh-TW` catatan bahasa Tionghoa dari `zh`). Bahasa tanpa catatan (bahasa yang ditambahkan paket bahasa lain, atau `pt-PT`, yang bukan `pt-BR`) menampilkan catatan bahasa Inggris. Catatan ikut bersama versi baru. Jika salinan yang berjalan tidak memiliki berkas catatan yang dapat dibaca (`release-notes.json`), jendela menampilkan catatan bahasa Inggris dari GitHub.
|
|
212
218
|
- **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.
|
|
213
219
|
- **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.
|
|
214
220
|
- **Sesuaikan kartu pertanyaan dengan jendela** hanya mengubah kartu pertanyaan dsh, bukan kartu tinjauan rencana. Fitur ini menemukan kartu melalui markup dsh (`data-question-key`, `data-question-scroll`); jika pembaruan dsh mengubah markup itu, kartu tampil seperti yang digambar dsh. Tinggi kartu mengikuti jendela, bukan chat: di chat dalam panel samping yang sempit, kartu yang tinggi masih dapat melewati bagian atas chat.
|
|
@@ -222,7 +228,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
222
228
|
- **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.
|
|
223
229
|
- **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`).
|
|
224
230
|
- **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.
|
|
225
|
-
- **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.
|
|
231
|
+
- **Branch Git di baris obrolan** menampilkan branch folder obrolan saat giliran terakhirnya dimulai atau berakhir, bukan branch saat ini: pergantian branch di luar giliran baru tampil setelah giliran berikutnya. Obrolan dari sebelum versi ini tidak menampilkan label sampai giliran berikutnya. Label ini berada di markup baris obrolan dsh (dsh tidak punya slot di sana); jika pembaruan dsh mengubah markup itu, label tidak tampil. Label hanya tampil dalam “Dalam satu daftar”.
|
|
226
232
|
- **Branch per obrolan** dalam mode rencana: dsh mengirim `/plan <pesan>` sebagai perintah, bukan sebagai pesan, jadi Composer Plus mengambil alih pengiriman perintah itu di kotak pesan dsh (bukan API publik). Jika pembaruan dsh mengubahnya, `/plan <pesan>` dengan **Branch baru** dipilih berjalan di Obrolan baru yang terbuka sebagai perintah dsh sendiri. Jika Host tidak dapat menyalakan mode rencana di obrolan baru, folder branch tetap ada dan pesan tidak dikirim, jadi obrolan baru tidak mengubah file dalam mode default.
|
|
227
233
|
- **Branch per obrolan**: saat folder branch sebuah obrolan (`<project>/.worktrees/<name>`) dihapus, misalnya saat agen obrolan itu sendiri menghapus worktree dan branch-nya, langkah berikutnya dari obrolan memindahkan obrolan keluar dari folder itu. Proyek folder branch hilang dari bilah samping, dan obrolan tampil di bawah Tanpa grup dan tetap terbuka. Di dsh 0.2.1 dan yang lebih baru, obrolan berlanjut di folder utama proyek, dan model mendapat catatan tentang folder baru. Di dsh 0.2.0, obrolan tetap memakai folder yang dihapus: perintah di sana gagal sampai Anda memulai obrolan baru. Proyek dari branch yang dihapus dan tidak dipakai obrolan mana pun juga hilang dari bilah samping: Composer Plus memeriksa folder branch saat mulai dan setiap 30 detik, juga tanpa filter bilah samping. Selama obrolan dipindahkan, **Branch baru** di repositori yang sama menjawab "coba lagi". Saat sakelar mati, galat dsh sendiri muncul lagi ("working-directory: directory does not exist").
|
|
228
234
|
- **Branch di pohon ruang kerja** menulis ke git tanpa klik: saat memindahkan obrolan, fitur ini mengembalikan folder proyek ke branch sebelumnya (`git switch`) dan menambahkan worktree (`git worktree add`). Fitur ini tidak pernah menghapus branch, worktree, atau file. dsh tidak bisa mengganti folder sebuah obrolan, jadi obrolan yang dipindahkan adalah salinan (fork milik dsh sendiri, dengan id baru) dan obrolan lama diarsipkan. Salinan melanjutkan tugas yang berhenti; panggilan alat yang sedang berjalan saat branch muncul berakhir dengan penolakan, dan agen menjalankannya lagi di folder baru. Tujuan (goal) obrolan lama tidak ikut pindah. Hanya obrolan yang foldernya adalah folder utama repositori yang dipindahkan, dan hanya untuk branch yang dibuatnya dan dipindahinya pada giliran itu (`git switch -c`, `git checkout -b`): branch yang dibuat hanya dengan `git branch`, folder dengan perubahan yang belum di-commit, worktree tertaut, atau subfolder tidak memindahkan apa pun. Di pohon hanya tampil worktree yang langsung berada di `<project>/.worktrees/` dan punya branch; worktree terlepas (detached) atau di tempat lain tidak tampil. Salinan terbuka sendiri hanya jika obrolannya adalah obrolan yang sedang terbuka (plugin membacanya dari baris bilah samping dsh); jika tidak, salinan ada di proyek branch.
|
|
@@ -239,8 +245,11 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
239
245
|
- **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 selain `/goal <tujuan>`, untuk kata kontrol `/goal` (`clear`, `pause`, `resume`), atau untuk pesan dengan chip file atau simbol (teks baru adalah teks biasa, jadi chip itu akan hilang), dan sebuah pesan paling banyak 8.000 karakter. Untuk tujuan `/goal`, fitur ini menulis syarat hanya dari draf dan konteks; syarat yang terlalu ketat bisa memakai putaran tujuan, jadi baca syarat itu sebelum Anda mengirimnya. Gambar tetap terlampir: hanya teksnya yang berubah. Setiap klik memakai satu panggilan model; model yang kuat bisa memerlukan satu menit (`Esc` membatalkannya).
|
|
240
246
|
- **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. Anggaran token juga menghitung panggilan obrolan subagen milik obrolan itu (dibaca dari log tersimpan mereka di setiap akhir giliran, jadi obrolan dengan banyak subagen perlu waktu sedikit lebih lama untuk diperiksa). Tabel bukti berasal dari bacaan pemeriksa sendiri atas obrolan: bagian yang disebutnya terverifikasi tetap perlu Anda lihat sendiri jika bagian itu penting. `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.
|
|
241
247
|
- **File yang dilindungi** adalah pagar pengaman, bukan sandbox. Fitur ini mencakup alat file milik dsh sendiri (`read`, `read_image`, `grep` pada file, `write`, `edit`, `str_replace_editor`). Perintah shell (`cat .env`), skrip yang ditulis agen, shell milik subagen, alat MCP, daftar `glob`, dan `grep` pada seluruh folder tetap dapat menjangkau file yang dilindungi. Untuk batas yang sebenarnya, gunakan mode sandbox dsh atau simpan rahasia di luar folder proyek. Pola mengenal `*`, `**`, dan `?`, tidak mengenal `{a,b}` atau `[ab]`, dan tidak membedakan huruf besar-kecil.
|
|
248
|
+
- **Perintah yang diblokir** adalah pagar pengaman, bukan sandbox. Fitur ini hanya membaca teks perintah dari alat `bash` dan `pwsh` milik dsh. Variabel atau alias yang menyebut nama perintah itu (`CMD=npm; $CMD publish`), fungsi shell, file skrip yang ditulis agen, program lain (`python -c`, `node -e`, `make`), alat MCP, dan terminal Anda sendiri tetap dapat menjalankannya. Aturan bisa cocok dengan lebih banyak perintah daripada yang Anda inginkan: kata mana pun dalam perintah dapat menjadi nama perintah (`echo npm publish` cocok dengan `npm publish`), dan kata lain dapat muncul di antara kata-kata aturan (`git push --force` juga cocok dengan `git push origin main --force`). Buat aturan lebih panjang jika aturan itu cocok dengan terlalu banyak perintah. **tanya dulu** memerlukan obrolan yang dapat bertanya: di obrolan yang kebijakan persetujuannya never (misalnya subagen yang didelegasikan), dsh tidak dapat menampilkan kartu itu, sehingga panggilan ditolak beserta alasannya. Kartu persetujuan menampilkan alasannya dalam bahasa Inggris. **Izinkan untuk obrolan ini** tidak menjawab kartu **tanya dulu**.
|
|
242
249
|
- **Lanjutkan di obrolan baru** mengirim obrolan (pesan, panggilan alat, dan bagian akhir setiap hasil alat, paling banyak sekitar 60.000 karakter, bagian terbaru) ke model obrolan itu sendiri. Catatan serah terima bisa melewatkan sebuah keputusan atau file: baca catatan itu sebelum Anda memulai. Obrolan baru hanya mengetahui catatan dan obrolan yang ditautkan (dsh melampirkan obrolan lama sebagai konteks hanya-baca); konteks modelnya dimulai kecil, dan obrolan lama tetap seperti apa adanya. Hanya satu catatan atau satu mulai per obrolan pada satu waktu.
|
|
243
250
|
- **Rincian konteks** menampilkan perkiraan dengan aturan milik dsh sendiri (sekitar 4 karakter per token), aturan yang sama dengan cincin konteks dsh; hitungan model itu sendiri bisa berbeda. Definisi alat adalah definisi dari permintaan terbaru. Fitur ini menampilkan konteks seperti yang ada di log obrolan; giliran yang sedang berjalan muncul setelah langkah berikutnya.
|
|
251
|
+
- **Langkah terencana** menghemat token hanya ketika model benar-benar merencanakan: selama aktif, setiap permintaan membawa alat `plan_next_steps` dan instruksi singkat (sekitar 500 token), juga di obrolan tempat model tidak pernah merencanakan. Sebuah syarat hanya membuktikan apa yang tertulis (misalnya: kode keluar build adalah 0), bukan bahwa pekerjaannya benar. `ok` membaca tanda hasil milik dsh sendiri (`[exit code: N]`, batas waktu, penolakan sandbox); perintah yang gagal tanpa kode keluar bukan nol dianggap lolos. Langkah berjalan satu per satu; dua langkah yang siap bersamaan kembali ke model. Pesan langkah disimpan sebagai pesan asisten dari model obrolan (dsh tidak punya tanda untuk pesan yang ditulis plugin), jadi teksnya menyebutkan bahwa Composer Plus yang menjalankannya. Tidak ada di Tether.
|
|
252
|
+
- **Papan tugas** menampilkan obrolan yang didaftar dsh di jendela ini: obrolan di luar proyek hanya tampil di **Semua proyek**, dan folder branch per obrolan (`<project>/.worktrees/<name>`) dihitung sebagai proyeknya. Kolom kartu adalah status langsung obrolannya, jadi kartu tidak bisa diseret: obrolan pindah ke **Selesai** saat gilirannya berakhir, juga setelah error atau dihentikan, dan kembali ke **Sedang dikerjakan** saat berjalan lagi. Titik hijau adalah titik selesai milik dsh sendiri, yang hanya disimpan dsh di jendela ini: setelah halaman dimuat ulang, obrolan yang selesai tampil tanpa titik itu. **Selesai** menampilkan 50 obrolan terbaru (**Tampilkan N yang lebih lama** menampilkan sisanya). Label berasal dari satu panggilan model per tugas yang dimulai: label bisa salah, dan obrolan yang tidak Anda mulai di papan tidak punya label. Judulnya adalah judul obrolan milik dsh sendiri (layanan judul dsh, dengan model obrolan); sampai judul itu ada, kartu menampilkan baris pertama prompt. Prompt yang diawali perintah `/` yang dikenal dsh (`/plan`, `/goal`) dijalankan sebagai perintah itu. **Jawab** hanya menjawab permintaan terbaru obrolan: jika permintaan itu sudah dijawab di tempat lain (jendela lain, Tether, Tinjauan otomatis) atau obrolan menanyakan hal baru, panel memberi tahu hal itu dan tidak mengirim apa pun. Versi sebelumnya punya daftar tugas dengan komentar dan alat agen; semuanya sudah tidak ada, dan `board.json` lama tidak ditampilkan. Ide dan tampilannya berasal dari [Kanzo](https://github.com/emanuele-em/kanzo) karya emanuele-em (AGPL-3.0); Composer Plus tidak memakai kodenya.
|
|
244
253
|
- **Dahulukan pesan setelah Hentikan** hanya bekerja setelah Anda menghentikan obrolan (atau setelah giliran yang gagal, atau saat Anda membuka obrolan yang masih punya antrean): pesan yang Anda kirim saat sebuah giliran berjalan tetap menunggu di akhir antrean. Pesan itu hanya mendahului pesan antrean milik Anda sendiri: jika ada putaran tujuan atau balasan pertanyaan yang menunggu di antrean, urutan dsh tetap. Fitur ini membaca bagian dsh yang bukan API publik (apakah giliran yang dihentikan masih sedang berakhir); jika pembaruan dsh mengganti namanya, pesan baru dipindah ke depan setelah giliran itu selesai. Obrolan subagen tetap memakai urutan dsh.
|
|
245
254
|
- **Memori proyek** milik folder pertama obrolan (folder proyek dsh): obrolan yang mengganti foldernya dengan `cd` tetap memakai memori proyek pertamanya, dan folder yang sama yang dibuka lewat path lain ke file yang sama memakai memori yang sama. Obrolan membekukan bagian memorinya saat dimulai, jadi catatan yang disimpan kemudian muncul mulai obrolan berikutnya (`memory_recall` langsung menemukannya). Tinjauan hanya menyimpan apa yang diputuskan model: tinjauan bisa melewatkan fakta atau menyimpan yang salah; periksa di **Buka memori** dan ubah di sana, atau edit file-nya secara manual saat dsh tertutup. **Buka memori** mengirim catatan proyek yang dipilih dan catatan global (semua proyek saat Anda memilih Semua catatan; paling banyak sekitar 60.000 karakter, sisanya hanya dihitung dan tidak dapat diubah dalam permintaan itu) serta teks Anda ke model default dsh, bukan ke model obrolan. Pratinjau disimpan di Mac selama 30 menit dan sampai dsh dimulai ulang; jika tinjauan atau agen mengubah catatan di antaranya, **Terapkan** menolak dan Anda meminta pratinjau lagi. **Terapkan** menyimpan semua perubahan dari satu pratinjau atau tidak sama sekali: jika satu perubahan tidak bisa disimpan (misalnya MEMORY.md sudah penuh), catatan tetap seperti semula dan alasannya ditampilkan. Setiap giliran selesai yang berisi pesan dari Anda memakan satu panggilan model; panggilan yang gagal membaca pesan yang sama lagi setelah giliran berikutnya. Obrolan subagen tidak ditinjau. Ide dan format file berasal dari [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus tidak memakai kodenya dan tidak pernah membaca atau menulis memori milik DS Bot sendiri.
|
|
246
255
|
- **Pencadangan** memakai satu folder tetap, `~/Desktop/dsh-backups` (default dsh-backup, sehingga arsipnya tetap dapat dipakai); tidak ada pengaturan untuk folder lain. Ukuran arsip kurang lebih sama dengan dsh home tanpa `cache/` dan `dsh-runtimes/` (diukur: file sebesar 1,6 GB menghasilkan arsip 830 MB dalam sekitar 30 detik di Apple Silicon; dsh tetap responsif). File yang berubah saat dibaca disimpan seperti saat pencadangan membukanya, sehingga log obrolan yang terbuka dapat berakhir dengan catatan yang terpotong, yang diperbaiki dsh pada penulisan berikutnya. Penyamaran menemukan rahasia di file yml dari nama kuncinya dalam satu baris (`token:`, `apiKey:`, …); rahasia dalam flow map (`{token: x}`), dalam daftar di bawah kunci seperti itu, dalam file JSON (misalnya `apiKey` milik server MCP di file `.json`), atau dengan nama lain tetap ada di arsip. Arsip per jenis milik dsh-backup (`dsh-t-…`) tidak dicantumkan. **Untuk komputer lain** menyalin arsip (klon di APFS: tanpa ruang tambahan); vault tidak ikut. **Cadangkan sekarang** tidak menghapus cadangan apa pun. Pencadangan otomatis menyimpan cadangan terbaru yang dibuat Composer Plus (pengaturan **Simpan** di **Pencadangan otomatis**) dan menghapus cadangannya yang lebih lama; snapshot sebelum peningkatan dihitung terpisah (2 yang terbaru tetap ada). Arsip dsh-backup tidak pernah dihapus: hapus arsip itu dengan **Hapus**. Selama dsh-backup masih terpasang, dsh-backup menghitung arsip Composer Plus dalam jumlah simpanannya sendiri dan dapat menghapusnya.
|
|
@@ -277,6 +286,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
277
286
|
|
|
278
287
|
**Bisakah agen mengingat preferensi saya antar-obrolan, seperti memori DS Bot?** Bisa, dengan **Memori proyek** (nonaktif secara default): aktifkan di **Pengaturan → Composer Plus**. Setelah setiap giliran, preferensi dan keputusan Anda yang bertahan lama disimpan sebagai catatan singkat untuk proyek obrolan itu, dan setiap obrolan baru di proyek itu membacanya. Minta agen mengingat sesuatu, dan agen langsung menyimpannya. Untuk melihat atau mengubah catatan, klik **Buka memori** di baris yang sama dan tulis apa yang diubah.
|
|
279
288
|
|
|
289
|
+
**Bisakah saya melihat semua obrolan saya sebagai papan kanban dan memulai obrolan baru dari sana?** Bisa, dengan **Papan tugas** (aktif secara default): buka di bilah samping kiri. Setiap obrolan adalah kartu di **Sedang dikerjakan**, **Ditinjau** (obrolan menunggu Anda), atau **Selesai**. **Tugas baru** hanya memerlukan prompt dan memulai obrolan baru dengan prompt itu; klik **Jawab** di kartu oranye untuk menjawabnya tanpa membuka obrolan.
|
|
290
|
+
|
|
280
291
|
**Bisakah dsh mencadangkan obrolan dan pengaturan saya, seperti dsh-backup?** Bisa: **Pengaturan → Composer Plus → Pencadangan → Cadangkan sekarang**. Fitur ini menulis format arsip yang sama ke folder yang sama (`~/Desktop/dsh-backups`), jadi arsip dsh-backup juga tampil dan dapat dipulihkan, dan Anda dapat menghapus dsh-backup. Aktifkan **Pencadangan otomatis** untuk pencadangan terjadwal.
|
|
281
292
|
|
|
282
293
|
**dsh tidak mau dimulai lagi. Bagaimana cara memulihkan cadangan?** Buka folder cadangan (`~/Desktop/dsh-backups`) dan klik dua kali `Composer Plus Rescue.command` (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`). Pilih `3) Restore a backup`, pilih satu cadangan, lalu ketik `RESTORE`. Cara ini berjalan tanpa dsh.
|
|
@@ -301,6 +312,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
301
312
|
|
|
302
313
|
**Bagaimana cara melihat hanya file yang diubah oleh satu obrolan?** Bilah samping kanan → **Perubahan** → **Obrolan ini**. Klik **␣** untuk menyembunyikan perubahan yang hanya berupa spasi.
|
|
303
314
|
|
|
315
|
+
**Bagaimana cara menghentikan agen agar tidak menjalankan `npm publish` atau `git push --force`?** **Pengaturan → Composer Plus → Perintah yang diblokir**: ketik `npm publish`, pilih **blokir** atau **tanya dulu**, lalu klik **Tambah**. **blokir** menolak perintah itu dan agen bertanya kepada Anda; **tanya dulu** menampilkan kartu persetujuan setiap kali. File yang dilindungi mencakup alat file agen; Perintah yang diblokir mencakup perintah shell-nya.
|
|
316
|
+
|
|
304
317
|
**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**.
|
|
305
318
|
|
|
306
319
|
**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.
|
|
@@ -329,6 +342,8 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
329
342
|
|
|
330
343
|
**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.
|
|
331
344
|
|
|
345
|
+
**Bisakah dsh menjalankan perintah berikutnya tanpa bertanya lagi ke model?** Bisa, dengan **Langkah terencana** (nonaktif secara default): aktifkan di Pengaturan → Composer Plus. Model lalu dapat merencanakan perintah berikutnya dengan sebuah syarat, misalnya “jalankan tes jika build berhasil”, dan Composer Plus menjalankan langkah tanpa panggilan model baru ketika hasilnya memenuhi syarat. Persetujuan dan sandbox tetap seperti biasa.
|
|
346
|
+
|
|
332
347
|
**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).
|
|
333
348
|
|
|
334
349
|
## Pengembangan
|
|
@@ -393,6 +408,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
393
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
394
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
395
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
+
# Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
396
413
|
```
|
|
397
414
|
|
|
398
415
|
```sh
|
package/README.ja.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="Composer Plus を入れた DeepSeek Harness:実行中のプロジェクトはサイドバーにスピナーを表示し、変更パネルは git の差分を表示しています"></p>
|
|
16
16
|
|
|
17
|
-
非公式のコミュニティプラグインです。ネットワーク通信は、アップデートの確認(GitHub のリリースと npm レジストリ)だけです。起動時のこの通信を止めるには、**自動アップデート** をオフにしてください。**機能のアイデア** は、**機能を提案** をクリックしたときだけ、チャットで使っているモデルを呼び出します。**次のメッセージの予測**(既定ではオン)は、ターンが終わるたびに、設定で選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)を、クリックなしで 1 回呼び出します。この呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善**
|
|
17
|
+
非公式のコミュニティプラグインです。ネットワーク通信は、アップデートの確認(GitHub のリリースと npm レジストリ)だけです。起動時のこの通信を止めるには、**自動アップデート** をオフにしてください。**機能のアイデア** は、**機能を提案** をクリックしたときだけ、チャットで使っているモデルを呼び出します。**次のメッセージの予測**(既定ではオン)は、ターンが終わるたびに、設定で選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)を、クリックなしで 1 回呼び出します。この呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善** は、魔法の杖をクリックしたときだけモデルを呼び出します。**タスクボード** は、ボードで開始したタスクごとに、タグを付けるために新しいチャットのモデルを 1 回呼び出します。**目標チェック**(既定ではオン)は、自動ラウンドでエージェントが `/goal` を完了にするたびに、モデルを 1 回呼び出します。**モバイル接続**(既定ではオフ)は、オンにした後だけ、ローカルネットワークまたは tailnet からの iPhone の接続を受け付けます。
|
|
18
18
|
|
|
19
19
|
## インストール
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
その後、dsh を再起動してください。(CLI はデスクトップのプロファイルにはインストールできません。デスクトップのプロファイルはアプリが管理します。)
|
|
31
31
|
|
|
32
|
-
> dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.
|
|
32
|
+
> dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.19.0`。
|
|
33
33
|
|
|
34
34
|
## 機能
|
|
35
35
|
|
|
@@ -68,11 +68,14 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
68
68
|
| **目標チェック** | <a id="feature-goalcheck"></a>`/goal` で目標を開始します。自動ラウンドでエージェントが目標を完了にすると、目標は 2 つのチェックを通ったときだけ閉じます。まず、プロジェクトのテストコマンドが、チャットのフォルダーで、チャットのサンドボックスモードのもとで実行されます。コマンドは、あなた自身のコマンドか、`package.json`、`Makefile`、`Cargo.toml`、`go.mod` または pytest から見つけたコマンドです。エージェント自身の最新のステップがそのテストの成功した実行だった場合は、もう一度は実行しません。次に、ツールを持たない独立したモデル呼び出しが、目標、このチャット、`git status`、テスト結果を読みます。モデルは証拠の表で答えます。目標の各部分を、証拠と修正方法とともに、検証済み、不正確、未解決のいずれかにします。すべての部分が検証済みのときだけ、目標は閉じます。チェックが失敗すると、目標は進行中のままになり、エージェントが未完了の各部分を証拠と修正方法とともに読んで、次のラウンドが続きます。目標バーの下の行(**目標チェック**)に、テスト、最後の結果、検証済みの部分の数が表示されます(ポインターを合わせると表が表示されます)。**編集** で、独自のテストコマンドと、時間またはトークンの制限を設定します。制限を超えると、目標はブロック中になります。トークンの制限には、チャットのサブエージェントの分も含まれます。**今すぐ実行** は、目標を閉じずにチェックを実行します。設定に専用の **モデル** メニューがあります(既定は **チャットのモデルと同じ**)。目標を自分で完了したときは、何もチェックしません。 | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="スクリーンショット: 目標チェック"></a> |
|
|
69
69
|
| **新しいチャットで続ける** | <a id="feature-handoffchat"></a>サイドバーのチャットを右クリック(またはチャットの **…** メニューを開く)→ **新しいチャットで続ける…**。チャット自身のモデルを 1 回呼び出し、チャットに表示されている内容から引き継ぎメモを書きます。項目は、タスク、成果物、完了したこと、決定事項、未解決の問題、次のアクションです(ツール呼び出しとその結果が証拠になります。ロールバックしたステップは含まれません)。メモはダイアログで開きます。読んで編集してください。**もう一度書く** で新しいメモを書きます。**新しいチャットを開始**(または `Cmd/Ctrl+Enter`)は、同じプロジェクトで新しいチャットを開き、メモと元のチャットへのリンクを最初のメッセージにします。元のチャットはそのまま残ります。長いチャットがいっぱいになったときや遅くなったとき、または翌日に続けるときに使います。プロジェクトには何も書き込みません。 | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="スクリーンショット: 新しいチャットで続ける"></a> |
|
|
70
70
|
| **コンテキストの内訳** | <a id="feature-contextbreakdown"></a>右サイドバー → `+` → **コンテキスト**。開いているチャットのモデルのコンテキストを、いま何が占めているか、コンテキストウィンドウのどれだけを使っているかを表示します。システムプロンプト、プロジェクトの指示(AGENTS.md)、スキル、自分のメッセージ、エージェントの返信とツール呼び出し、ツールの結果(ツールごと)、MCP の結果(サーバーごと)、ツールの定義、圧縮の概要、その他のコンテキストのメモを、それぞれのトークン数と割合とともに示します。項目をクリックすると、そのツールやサーバーを表示します。`/compact` とロールバックの後のチャットのログだけを読み、モデルは呼び出しません。各ターンの後と **更新** で読み直します。チャットが遅い理由やいっぱいになった理由を調べるときに使います。たとえば、大きな MCP ツールの結果や多数のツール定義が原因のことがあります。 | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="スクリーンショット: コンテキストの内訳"></a> |
|
|
71
|
+
| **計画済みステップ** | <a id="feature-plannedsteps"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。エージェントはツール `plan_next_steps` を使えるようになります。コマンドと同じメッセージで、次に実行するコマンドを正確な引数と条件付きで計画できます(例:「ビルドが通ったら `npm test` を実行」)。結果が条件を満たすと、Composer Plus がモデルを呼び出さずに次のステップを自分で実行するため、長いチャットのトークン消費が減ります。ステップはチャットに「Composer Plus · Planned steps: ran `test` … without a model call」という短い行として表示され、その後にツール呼び出しと結果が続きます。対象は `bash`、`read`、`grep`、`glob` のステップのみで、承認、サンドボックス、保護されたファイルは各ステップにいつもどおり適用されます。条件を満たさないとき、2 つのステップが同時に実行可能なとき、最後のステップの後、そしてあなたがメッセージを送ったときは、モデルが再び応答します。この考え方は HarnessMM(arXiv 2610.32813)に基づきます。 | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="スクリーンショット: 計画済みステップ"></a> |
|
|
71
72
|
| **保護されたファイル** | <a id="feature-protectedfiles"></a>既定でオンです。エージェント自身のファイルツールは、指定したパターンに一致するファイルを読むことも変更することもできません。**読み取りと書き込み** のパターンでは、ファイルに対する `read`、`read_image`、`grep` が拒否され、どちらの種類でも `write`、`edit`、`str_replace_editor` が拒否されます。エージェントは理由を読み、あなたに確認するよう指示されます。既定のパターンは `.env*`、`*.pem`、`*.key` です。設定 → Composer Plus → **保護されたファイル**:パターンを追加し(例:`published/**` または `config/*.yml`)、種類をクリックして **読み取りと書き込み** と **書き込みのみ** を切り替え、✕ で削除するか、**既定値を使う** をクリックします。`/` を含まないパターンは、どのフォルダーのファイル名にも一致します。これはガードレールであり、サンドボックスではありません。シェルコマンド(`cat .env`)、スクリプト、MCP ツールからはファイルに届くことがあります(「制限事項」を参照)。 | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="スクリーンショット: 保護されたファイル"></a> |
|
|
73
|
+
| **ブロックされたコマンド** | <a id="feature-blockedcommands"></a>既定でオンで、リストは空です。エージェントのシェルコマンド(`bash`、`pwsh`)は、指定したルールに一致するコマンドを実行できません。**ブロック** のルールは呼び出しを拒否し(エージェントは理由を読み、あなたに確認するよう指示されます)、**先に確認** のルールは dsh の承認カードを表示します。コマンドは、あなたが許可したときだけ実行されます。設定 → Composer Plus → **ブロックされたコマンド**:ルールを入力し(例:`npm publish`、`git push --force` または `ssh *192.168.2.19`)、種類をクリックして **ブロック** と **先に確認** を切り替えてから、**追加** をクリックします。ルールの種類をクリックすると変更でき、✕ で削除できます。ルールは、コマンド名と、その後にこの順で続く必要がある単語です。`*` は任意のテキストに一致します。`&&`、`;`、`\|` の後、`$(…)`、`bash -c "…"`、`eval` の中、`sudo` や `env` の後にあるコマンドも見つけます。これはガードレールであり、サンドボックスではありません。変数(`$CMD`)、スクリプトファイル、ほかのプログラムからはコマンドを実行できることがあります(「制限事項」を参照)。 | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="スクリーンショット: ブロックされたコマンド"></a> |
|
|
74
|
+
| **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。サイドバーと同じライブの状態を表示する、dsh のチャットのカンバンボードです。承認、回答、計画のレビューを待っているチャットはオレンジの点付きで **レビュー** に、実行中のチャットは **作業中** に、終わったチャットは **完了**(開くまで緑)に入ります。左でプロジェクトか **すべてのプロジェクト** を選びます。チャットごとのブランチのフォルダーは、そのプロジェクトとして扱われます。**新しいタスク**(または `n`)に必要なのはプロンプトだけです。`Enter` でプロジェクトに新しいチャットを開始すると、カードが **未着手** に表示され、dsh がチャットに名前を付け、チャットのモデルが最大 3 個のタグを付けます。カードをクリックすると、そのチャットが開きます。オレンジのカードで **回答** をクリックすると、ボード上で回答できます。承認のリクエストには **拒否** か **1回だけ許可**、計画には **承認** か **変更をリクエスト**、質問には選択肢か自分のテキストで答えます。**完了を非表示** は、このデバイスで **完了** を隠します。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
|
|
72
75
|
| **プロジェクトメモリー** | <a id="feature-projectmemory"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。プロジェクトのフォルダーごとに専用のメモリーがあり、そのプロジェクトの後のチャットが読みます。DS Bot が Bot ごとにメモリーを持つのと同じです。ターンが終わるたびに、チャットのモデルを 1 回呼び出して新しいメッセージ(ロールバックしたものは除きます)を読み、長く続く好み、決定、事実を短いメモとして保存し、古いメモを変更または削除します。エージェントも自分でメモを保存、削除、検索できます(`memory_remember`、`memory_forget`、`memory_recall`)。メモはグローバルにもでき、その場合はすべてのプロジェクトが読みます。新しいチャットはシステムプロンプトでメモを受け取ります。後で保存したメモは次のチャットから表示されます。ファイルは dsh のホームフォルダーにある Markdown(`storages/dsh-composer-plus/memory/`)で、プロジェクトのフォルダーには保存されません。 同じ行の **メモリーを開く** は、保存されたすべてのメモをプロジェクトごと(とグローバルメモリー)にまとめて表示し、絞り込みもできます。変更する内容を自分の言葉で書き(例:「yarn から pnpm に変えた」)、**変更をプレビュー** を押します。dsh の既定のモデルが変更を提案し、**適用** を押したときだけ保存されます。Tether では: チャットのタイトルメニュー → Project memory。 | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="スクリーンショット: プロジェクトメモリー"></a> |
|
|
73
76
|
| **このチャットで許可** | <a id="feature-allowforchat"></a>自動レビューで確認を求められると、承認カードに **このチャットで許可** が表示されます。これを選ぶと、同じチャットの同じツールが、引数にかかわらず、時間制限が終わるまで許可されます(既定は 1 時間。**設定 → Composer Plus → このチャットで許可** で選べます)。その後、エージェントが再び確認します。ヘッダーのチップに許可の一覧が終了時刻とともに表示され、そこから取り消せます。許可は再起動後も有効です。 | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="スクリーンショット: このチャットで許可"></a> |
|
|
74
77
|
| **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。**ワークスペースのツリー** では、親フォルダーの行にも、中にある各プロジェクト(たとえば `.worktrees/` 内の各ブランチのフォルダー)のチャットの状態が表示されます。フォルダーを折りたたんでいるときも同じです。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
|
|
75
|
-
| **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a
|
|
78
|
+
| **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの「1つのリスト」表示では、各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合はブランチがないため、ラベルは表示されません)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。「ワークスペース」と「ワークスペースのツリー」では、チャットがすでにプロジェクト行の下にあるため、どのチャット行にもラベルは表示されません。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
|
|
76
79
|
| **すべて既読にする** | <a id="feature-markprojectread"></a>サイドバーで、プロジェクトの **…** ボタン → **すべて既読にする** をクリックします。そのプロジェクトのすべてのチャットから、緑色の未読の点が一度に消えます。ほかのプロジェクトの点はそのまま残ります。プロジェクトに未読のチャットがない場合、この項目はグレー表示になります(**未読のチャットはありません**)。 | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="スクリーンショット: すべて既読にする"></a> |
|
|
77
80
|
| **アクティブなプロジェクトを先頭に表示** | <a id="feature-activeprojectsfirst"></a>チャットが実行を始めたり、あなたの操作が必要になったりすると、そのプロジェクトがサイドバーの先頭に移動します。移動には dsh 標準の行のアニメーション(ドラッグして移動したときと同じ動き)を使います。完了したプロジェクトはその場所に残ります。いつもどおり、ドラッグして好きな場所に移動できます。移動は dsh のプロジェクトの順序に保存されるため、この機能をオフにしても現在の順序は維持されます。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: アクティブなプロジェクトを先頭に表示"></a> |
|
|
78
81
|
| **最近のプロジェクトのフィルター** | <a id="feature-recentprojects"></a>サイドバー → 表示オプション(スライダーのアイコン)→ **過去 2 時間以内にアクティブ**。選択中は、過去 2 時間以内にアクティブなチャットがあるプロジェクトだけがサイドバーに表示されます。対象となるチャットは、その間に更新されたチャット、実行中または待機中のチャット、開いているチャット、まだ開いていない完了済みのチャット(dsh の緑色の「完了」の点)です。完了済みのチャットは、2 時間を過ぎても対象のままです。このようなチャットがないプロジェクトは、新しい空のプロジェクトも含めて非表示になります。**ワークスペースのツリー** では、中のプロジェクトがアクティブな間は親フォルダーも表示されたままになり、過去 2 時間以内にアクティブでなかったチャットも非表示になるため、最近のチャットだけが表示されます。もう一度選択すると、すべてのプロジェクトを表示します。選択はこのデバイスに保存されます。 | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="スクリーンショット: 最近のプロジェクトのフィルター"></a> |
|
|
@@ -82,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
82
85
|
| **操作がないときに待機中のチャットを開く** | <a id="feature-idleswitch"></a>チャットが質問をしたり、承認や計画のレビューを待っていたり(オレンジ色の点)、まだ読んでいないターンを完了したり(緑色の点)するときに、dsh を 30 秒間操作しないと、dsh はそのチャットを開きます。オレンジ色のチャットは緑色のチャットより先に開きます。それぞれの中では、最も長く待っているチャットから開き、次のチャットはさらに 30 秒操作がないと開きます。キー入力、クリック、マウスの移動、スクロールホイール、タッチがあると 30 秒を数え直します。フォーカスのある入力欄にテキストがあるとき、テキストを選択しているとき、メニューやダイアログが開いているときも切り替えません。待機中のチャットが画面に表示されている間は何も変わりません。回答せずに待機中のチャットから離れると、次に 30 秒間操作がないときに、そのチャットが再び開くことがあります。緑色のチャットが開くと、その点は消えます。次の緑色のチャットは、もう一度 dsh を操作し、その後 30 秒間操作がないときに開きます。dsh がバックグラウンドにあるときも動作しますが、dsh は前面に出ません。 | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="スクリーンショット: 操作がないときに待機中のチャットを開く"></a> |
|
|
83
86
|
| **アプリケーションの言語** | <a id="feature-language"></a>設定 → Composer Plus → **アプリケーションの言語** で、dsh のインターフェース全体を Türkçe、Español、Português (Brasil)、Français、Deutsch、Русский、日本語、한국어、Bahasa Indonesia、Tiếng Việt、हिन्दी のいずれかに切り替えます(下記を参照)。 | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="スクリーンショット: アプリケーションの言語"></a> |
|
|
84
87
|
| **モバイル接続(iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) アプリを使うと、同じ Wi-Fi で、または [Tailscale](https://tailscale.com) 経由で、iPhone から dsh を使えます。**設定 → Composer Plus** でオンにしてください(この Mac でネットワークポートを開くため、既定ではオフです)。次に、サイドバーの左下にある **モバイル接続** をクリックします。iPhone のカメラ(**Open in Tether** をタップ)または Tether の **Scan code** で QR コードを読み取り、**Connect** をタップして、**Approve** をクリックします。先に Tether をインストールしてください。Tether がないと、カメラはこのコードを開けません。スマートフォンでは、チャットの表示、メッセージの送信(写真付き:入力欄の **+** → Camera、Photos、Paste image)、承認と質問への回答、モデルとエージェントの切り替えができます。ペアリングできる Mac の数に制限はありません。アプリの左上にある Mac の名前で、Mac を切り替えます。**モバイル接続** パネルには、ペアリング済みの iPhone が最後の接続日時とともに表示され、**Remove** でその iPhone をすぐに切断できます。「Tailscale only」はローカルネットワークからの接続を拒否し(共有の Wi-Fi 向け)、アクセスログには接続を試みた相手が表示されます。Tether では、「Settings → Privacy」で Face ID によるアプリのロックを設定できます。 | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="スクリーンショット: モバイル接続(iPhone)"></a> |
|
|
85
|
-
| **自動アップデート** | <a id="feature-autoupdate"></a>dsh の起動時に、プラグインは [GitHub の最新リリース](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) を確認します。そのリリースのほうが新しく、すでに npm にある場合は、dsh 標準のプラグインマネージャー(設定 → プラグインと同じ経路)でそのバージョンをインストールし、通知します。読み込むには、dsh を再起動してください。**設定 → Composer Plus → Composer Plus のアップデート** にはバージョンが表示され、**アップデートを確認** / **今すぐアップデート** のボタンがあります。新しいバージョンで dsh を初めて起動すると、**Composer Plus N の新機能** ウィンドウにそのバージョンのリリースノートが 1
|
|
88
|
+
| **自動アップデート** | <a id="feature-autoupdate"></a>dsh の起動時に、プラグインは [GitHub の最新リリース](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) を確認します。そのリリースのほうが新しく、すでに npm にある場合は、dsh 標準のプラグインマネージャー(設定 → プラグインと同じ経路)でそのバージョンをインストールし、通知します。読み込むには、dsh を再起動してください。**設定 → Composer Plus → Composer Plus のアップデート** にはバージョンが表示され、**アップデートを確認** / **今すぐアップデート** のボタンがあります。新しいバージョンで dsh を初めて起動すると、**Composer Plus N の新機能** ウィンドウにそのバージョンのリリースノートが **アプリケーションの言語** で選んだ言語で 1 回だけ表示されます(ノートは新しいバージョンに含まれていて、追加の通信はありません。その言語のノートがない場合は英語のノートが表示されます)。**閉じる** または `Esc` で閉じます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="スクリーンショット: 自動アップデート"></a> |
|
|
86
89
|
| **バックアップ** | <a id="feature-backup"></a>設定 → Composer Plus → **バックアップ** → **今すぐバックアップ** で、dsh のホーム全体(チャット、設定、プラグイン、MCP、スキル)を、チェックサム付きで `~/Desktop/dsh-backups` 内の 1 つのアーカイブに書き込みます。アーカイブ内のシークレットはマスクされます。認証情報ファイル、鍵ファイル(`.pem`、`.key`)、yml 設定の token、secret、password の値は、このコンピュータ上のフォルダーの `vault` にだけ残ります。`cache/`、`dsh-runtimes/`、`node_modules` はアーカイブに入りません(dsh が作り直します)。一覧の各バックアップには、**チェック**(全体を読み取ります)、**別のコンピュータ用**(新しいコンピュータにコピーするフォルダーで、レスキューコンソールを含みます)、**削除** があります。同じフォルダーにある dsh-backup のアーカイブも表示され、使えます。復元するには、dsh を終了してレスキューコンソールを使います。 | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="スクリーンショット: バックアップ"></a> |
|
|
87
90
|
| **自動バックアップ** | <a id="feature-autobackup"></a>**自動バックアップ** をオンにします(既定ではオフです。各コピーは、キャッシュを除いた dsh のホームとほぼ同じ大きさになります)。頻度(**間隔**:6 時間から 7 日、既定は 24 時間)と、残すバックアップの数(**保持**:3 から 14、既定は 7)を選びます。次回の時刻はスイッチの下に表示されます。失敗したバックアップもそこに表示され、30 分後に再試行されます。dsh または Composer Plus が新しいバージョンで起動すると、起動後まもなく、新しいバージョンがデータを長く使う前にスナップショットを作成します(最新の 2 つが残り、**アップグレード前** と表示されます)。 | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="スクリーンショット: 自動バックアップ"></a> |
|
|
88
91
|
| **セッションログのチェック** | <a id="feature-sessiondoctor"></a>**セッションログをチェック** は、すべてのチャットのログを読み取り、dsh が開けないログ(壊れたフレーム、途切れたレコード、誤ったシーケンス番号)を一覧表示します。末尾だけが欠けたログは一覧に出ません。dsh が自分で修復します。**バックアップから修復** は、正常なコピーがある最新のバックアップからコピーを戻し、損傷したファイルをその隣に残します(`.corrupt-<時刻>`)。そのバックアップ以降に書かれたメッセージはコピーに含まれません。この dsh で開いているチャットはここでは修復されません。dsh を終了して、レスキューコンソールで修復してください。 | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="スクリーンショット: セッションログのチェック"></a> |
|
|
@@ -166,7 +169,9 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
166
169
|
- **目標チェック:** 自動ラウンドでエージェントが `/goal` を完了にしたとき(または **今すぐ実行** をクリックしたとき)だけ実行されます。ホスト側は、テストコマンドをチャットのフォルダーで、チャットのサンドボックスモードのもとで実行します(dsh 自身の `bash` ツールと同じで、ファイルアクセスのポリシーも同じです。そのサンドボックスを開始できないときは、テストを実行せず、チェックは失敗します)。コマンドを見つけるために読むのは `package.json`、`Makefile`、`Cargo.toml`、`go.mod`、`pyproject.toml`、`pytest.ini` だけで、フォルダー内の通常のファイルとしてだけ読みます(フォルダーの外を指すシンボリックリンクや FIFO は読みません)。次に、ツールなしの 1 回のリクエストとして、**目標チェック** で選んだモデル(既定ではチャット自身のモデル)に次の内容を送ります。目標、目標の開始以降のチャット(あなたのメッセージ、エージェントの返信、1,000 文字に切り詰めたツール呼び出し、各ツール結果の最後の 2,000 文字。推論とロールバックで取り消したステップは含みません。最大で約 60,000 文字、最新の部分)、`git status --short`、テスト出力の末尾です。ツールの出力にはエージェントが読んだ内容が含まれることがあるため、このリクエストには、チャットそのものと同じように、あなたのファイルの一部が含まれることがあります。チャットにもプロジェクトにも何も書き込みません。テストコマンド、制限、最後の結果(出力の末尾を含む)、モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/goal-check.json`(所有者のみのファイル、最新の 500 チャット)に保存されます。
|
|
167
170
|
- **新しいチャットで続ける:** クリックするまで、何も実行されません。クリックすると、ホスト側はチャット(目標チェックと同じ読み方です。推論とロールバックで取り消したステップは含みません)をチャット自身のモデルに送り、引き継ぎメモを表示します。新しいチャットを作るのは **新しいチャットを開始** だけです。プロジェクトには何も書き込みません。
|
|
168
171
|
- **コンテキストの内訳:** ホスト側でチャットのログだけを読みます。モデル呼び出しはせず、プロジェクトのファイルも読みません。
|
|
172
|
+
- **タスクボード:** ボードは、このウィンドウにある dsh 自身の一覧から、dsh 自身のチャットを表示します。独自のチャットデータは追加しません。タスクを開始すると、ホスト側は選んだプロジェクトに新しいチャットを作り、あなたがそこで入力したのと同じように、プロンプトを最初のメッセージとして送ります。そのため、承認、サンドボックス、チャットのモデルはいつもどおり適用されます。次に、最大 3 個のタグを得るために、プロンプト(最初の 4,000 文字だけで、ほかには何も送りません)を、ツールなしのもう 1 回のリクエストでそのチャットのモデルに送ります。各タスクのプロンプト、タグ、開始時刻は `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(所有者のみのファイル、最新の 2,000 件)に保存されます。スイッチはその隣の `board-switch.json` にあります。プロジェクトのフォルダーには何も書き込みません。**回答** は、チャット自身のカードと同じ方法で、dsh 自身の保留中のリクエストに回答を送ります。以前のバージョンの古いタスク一覧(`board.json`)はディスク上にそのまま残り、読み込まれません。
|
|
169
173
|
- **保護されたファイル:** リストとスイッチは `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(所有者のみのファイル)にあります。チェックが読むのは、各ファイルツール呼び出しのパス(とその実際のパス)だけで、ファイルそのものは読みません。
|
|
174
|
+
- **ブロックされたコマンド:** ルールとスイッチは `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json`(所有者のみのファイル)にあります。チェックが読むのは、各 `bash` と `pwsh` 呼び出しのコマンドテキストだけです。何も実行せず、何も送信しません。
|
|
170
175
|
- **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、Host 側が、前回の確認以降のそのチャット自身の新しいメッセージ(あなたのメッセージとエージェントのテキスト返信。ツールの出力、推論、隠しコンテキスト、ロールバックしたメッセージは含みません。分岐したチャットでは、親チャットからのコピーは除きます。最大約 16,000 文字)と保存済みのメモを、ツールなしの 1 回のリクエストとしてチャット自身のモデルに送ります。メモは `$DSH_HOME/storages/dsh-composer-plus/memory/` にある Markdown ファイル(所有者だけが読み書きできます)です。プロジェクトのフォルダーごとの `projects/<id>/`(`<id>` はフォルダーの実際のパスのハッシュで、`project.json` にフォルダーを記録します)、`global/`、`journal.jsonl`(各変更と、変更前後の行)、`reviewed.json`(各チャットをどこまで読んだか)があります。プロジェクトのフォルダーには何も書き込みません。キー、トークン、パスワード、ID 番号のように見えるメモは拒否します。プロジェクトのメモはそのフォルダーの新しいチャットのシステムプロンプトに入るので、そのチャットのリクエストごとにモデルに送られます。スイッチは同じ場所の `memory.json` にあります。**メモリーを開く** は、**変更をプレビュー** を押すまで何も送りません。押すと、表示しているメモとあなたの文章を、ツールなしの 1 回のリクエストとして dsh の既定のモデルに送ります。変更は **適用** を押したときだけ書き込まれ、ジャーナルには `editor` と記録されます。Tether も同じルートでメモを読み、変更します。
|
|
171
176
|
- **バックアップ:** データがマシンの外に出ることはありません。アーカイブは `~/Desktop/dsh-backups` に保存されます(所有者のみのファイル)。シークレットはアーカイブに含まれません。認証情報ファイル(`.credentials.yaml`、`.env`)、鍵ファイル(`.pem`、`.key`、`.p12`、`.pfx`)、yml ファイル内の token、secret、password、API キーの設定の値はマスクされます。それらの実際のコピーは、同じフォルダーの `composer-plus-vault/<archive>/`(所有者のみ)に、このコンピュータ上にだけ残ります。**別のコンピュータ用** は vault をコピーしません。それらのシークレットは、移行先でもう一度入力してください。チャットのログ、設定、dsh のホームのその他の内容は、そのままアーカイブに入ります。`$DSH_HOME` そのものと同じように、フォルダーを非公開にしておいてください。バックアップは `O_NOFOLLOW | O_NONBLOCK` でファイルを読み取ります。シンボリックリンクはリンクとして保存し(リンク先はたどりません)、FIFO やデバイスはスキップします。自動バックアップのスイッチと設定は `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json` に、レスキューコンソールのスイッチは `rescue-console.json` に保存されます。dsh の実行中は、`running/host-<pid>.json` が各 dsh プロセスを示します(レスキューコンソールはこれらを読み取り、復元を拒否します)。
|
|
172
177
|
- **レスキューコンソール:** ターミナルのメニューです。ネットワークポートは開きません。復元は、dsh のホームの隣にある新しいフォルダーにだけ書き込みます(ファイルは `O_EXCL | O_NOFOLLOW` で書き込み、シンボリックリンクは最後に作成し、たどりません)。安全でない名前(`..`、絶対パス)、デバイスや FIFO、複数の最上位フォルダー、リンクの下のエントリーを含むアーカイブは拒否します。
|
|
@@ -186,10 +191,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
186
191
|
- **再起動後にチャットが続行しなかった:** 原因は次のいずれかです。dsh の終了時に、再起動後に再開がオフだった。そのターンを自分で停止した。ターンがすでに終わっていた(完了または失敗)。チャットがアーカイブされていた。20 件を超えるチャットが実行中だった(最新の 20 件が続行します)。
|
|
187
192
|
- **再起動後にキューが空になっている:** キューを空にするのは dsh 自身の終了処理です。再起動後に再開は、続行するチャットでだけキューを元に戻します。ほかのチャットでは、メッセージをもう一度送信してください。終了の直前に削除したメッセージが戻ることがあります。その場合はもう一度削除してください。
|
|
188
193
|
- **GitHub issue を作成 で「gh could not open the issue」と表示される:** このメッセージは、`gh` 自身の出力の最初の行です。ターミナルで `gh auth status` を実行し、`gh auth login` でログインしてください。チャットのフォルダーには GitHub リモートが必要です(`git remote -v`)。「not installed or not on the PATH of dsh」は、dsh が `gh` を見つけられなかったという意味です。インストールするか、`gh` が動作するターミナルから dsh を起動してください。
|
|
189
|
-
- **チャット行にブランチのラベルがない:**
|
|
194
|
+
- **チャット行にブランチのラベルがない:** 原因は次のいずれかです。サイドバーが「1つのリスト」表示ではない(「ワークスペース」と「ワークスペースのツリー」では、どのチャット行にもラベルは表示されません)。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
|
|
190
195
|
- **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
|
|
191
196
|
- **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
|
|
192
|
-
- **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.
|
|
197
|
+
- **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.19.0`)。上のインストールの注記を参照してください。
|
|
193
198
|
- **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
|
|
194
199
|
- **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
|
|
195
200
|
- **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
|
|
@@ -209,6 +214,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
209
214
|
- **チャットを削除** には、dsh のアーカイブ機能が必要です(dsh 0.2.0 以降)。15 秒以内に停止しないチャット(またはそのサブエージェントのチャット)や、別の dsh が保持しているチャットは、アーカイブされたままになり、何も移動しません。macOS 以外のシステムでは、ゴミ箱のフォルダーがチャットの履歴と同じディスク上にある必要があります。開いているチャットを削除すると、dsh を再起動するまで、そのチャットはアーカイブされた非表示の状態で dsh のメモリに残ります。ゴミ箱は自分で空にしてください。dsh は空にしません。
|
|
210
215
|
- dsh のキューには `move` 操作がないため、プラグインのホスト側が、dsh のキューの中でメッセージそのものを移動します(1 回の変更で、同じメッセージのままです)。画像やファイルを含むメッセージも移動できます。移動できるのは自分のメッセージだけです。キュー内の目標のラウンドや質問への回答は、その位置から動きません。ドラッグ中にメッセージの送信が始まった場合は、何も移動せず、そのことを知らせる通知が表示されます。
|
|
211
216
|
- 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
|
|
217
|
+
- **Composer Plus N の新機能** は、**アプリケーションの言語** の言語でノートを表示します。別の地域を指定した UI 言語には、その基本言語のノートが表示されます(`en-GB` には英語のノート、`zh-TW` には `zh` の中国語のノート)。ノートがない言語(別の言語パックが追加した言語や、`pt-BR` ではない `pt-PT`)では、英語のノートが表示されます。ノートは新しいバージョンに含まれています。実行中のコピーに読み取れるノートファイル(`release-notes.json`)がない場合は、GitHub の英語のノートが表示されます。
|
|
212
218
|
- **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
|
|
213
219
|
- **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
|
|
214
220
|
- **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
|
|
@@ -222,7 +228,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
222
228
|
- **このチャット** が数えるのは、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)が書き込んだファイルだけです。コマンド(`bash`)が変更したファイルは、この表示には含まれず、**未コミット** に表示されます。チャットのターンのロールバックのスナップショットがない場合(ターンのロールバックがオフ、dsh-rewind-plugin がインストール済み、またはチャットがプラグインより古い場合)、表示は最後のコミットと比較し、そのことを示します。ターンのロールバックはチャットごとに最新の 50 個のスナップショットを保持します。長いチャットでは、表示は保持されている最も古いものと比較し、どのメッセージからかを示し、それより前の変更は数えません。**空白の変更を非表示** は `git diff -w` です。行の中のスペースだけが変わった行も非表示になります。
|
|
223
229
|
- **GitHub issue を作成** には、dsh の PATH にある GitHub CLI(`gh`)と、チャットのフォルダーの GitHub リモートが必要です。実行時間は最大 60 秒です。`gh` がそれより長くかかると、issue は GitHub に作成されていても、そのリンクがリストに表示されないことがあります(もう一度クリックする前に、GitHub を確認してください。リストは完了した実行からしかリンクを読み取らないため、もう一度クリックすると 2 つ目の issue が作成されることがあります)。GitHub リモートが複数あるフォルダーでは、`gh` 自身のデフォルト(`gh repo set-default`)を使います。
|
|
224
230
|
- **このファイルを変更したチャット** は、**このチャット** と同じく、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)だけを認識します。コマンド(`bash`)による変更は表示されません。リポジトリの最新 300 件のチャット(作成日時の順)を読み取り、それより多い場合はそのことを表示します。表示するのは最大 100 行です。名前を変更したファイルは、ツールが書き込んだ名前で表示されます。フォルダーがリポジトリの外にあるチャット(同じファイルへの別のパスを通る場合も含みます)は数えません。dsh の起動後に最初に開くときは、リポジトリのすべてのチャットのログを読み取ります(275 件のチャットで約 4 秒)。2 回目以降は、それ以降に変更されたチャットだけを読み取ります。
|
|
225
|
-
- **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh
|
|
231
|
+
- **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。ラベルは「1つのリスト」でのみ表示されます。
|
|
226
232
|
- **チャットごとのブランチ** を計画モードで使う場合:dsh は `/plan <メッセージ>` をメッセージではなくコマンドとして送信します。そのため Composer Plus は、dsh の入力欄でコマンドの送信を横取りします(公開 API ではありません)。dsh のアップデートでこれが変わった場合、**新しいブランチ** を選んだ状態の `/plan <メッセージ>` は、開いている新しいチャットで dsh 自体のコマンドとして実行されます。ホストが新しいチャットで計画モードをオンにできない場合、ブランチのフォルダーは残り、メッセージは送信されません。そのため、新しいチャットが既定のモードでファイルを変更することはありません。
|
|
227
233
|
- **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。どのチャットも使っていない削除済みブランチのプロジェクトもサイドバーから消えます。Composer Plus は起動時と 30 秒ごとにブランチフォルダーを確認します。サイドバーのフィルターは必要ありません。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
|
|
228
234
|
- **ワークスペースのツリー内のブランチ** はクリックなしで git に書き込みます。チャットを移すとき、プロジェクトフォルダーを元のブランチに戻し(`git switch`)、worktree を追加します(`git worktree add`)。ブランチ、worktree、ファイルを削除することはありません。dsh はチャットのフォルダーを変更できないため、移されたチャットはコピー(新しい id を持つ dsh 自身のフォーク)で、元のチャットはアーカイブされます。コピーは止まった作業を続けます。ブランチが現れたときに実行中だったツール呼び出しは拒否で終わり、エージェントは新しいフォルダーで再実行します。元のチャットの目標は移りません。移るのは、フォルダーがリポジトリのメインフォルダーであるチャットだけで、そのターンで作成して切り替えたブランチ(`git switch -c`、`git checkout -b`)の場合だけです。`git branch` だけで作ったブランチ、未コミットの変更があるフォルダー、リンクされた worktree、サブフォルダーでは何も移りません。ツリーに表示されるのは、`<project>/.worktrees/` の直下にありブランチを持つ worktree だけです。デタッチされた worktree や別の場所の worktree は表示されません。コピーが自動で開くのは、元のチャットが開いていたチャットだった場合だけです(プラグインは dsh のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
|
|
@@ -239,8 +245,11 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
239
245
|
- **プロンプトを改善** が見るのは、短いプロジェクトの概要、変更されたパス、名前があなたの言葉と一致するパスだけで、コードそのものは見ません。そのため、正しいファイルを見落とすことがあり、渡されたパスしか挙げません。送信する前に新しいテキストを読んでください。`/goal <目標>` 以外のスラッシュコマンド、`/goal` の制御語(`clear`、`pause`、`resume`)、ファイルやシンボルのチップを含むメッセージには使えません(新しいテキストはプレーンテキストなので、チップが失われるためです)。`/goal` の目標では、下書きとコンテキストだけから条件を書きます。厳しすぎる条件は目標のラウンドを余分に使うことがあるため、送信する前に読んでください。メッセージは最大 8,000 文字です。画像は添付されたままで、変わるのはテキストだけです。クリックするたびに、モデル呼び出しが 1 回行われます。性能の高いモデルでは 1 分ほどかかることがあります(`Esc` でキャンセルします)。
|
|
240
246
|
- **目標チェック** がチェックするのは、自動の目標ラウンドでエージェントが行った完了だけです。チャットであなたが頼んだ完了、`/goal`、目標バーはチェックされません。エージェントは、テストやテストコマンドのファイルを自分で変更できます。検証用のモデルはチャットを読むのでそれに気づけますが、どちらの方向にも誤ることがあります(誤った「未完了」はラウンドを 1 回余分に使い、誤った「完了」は目標を閉じます)。検証用のモデルが見るのはチャットと `git status` で、コードそのものは見ません。テストの実行結果を再利用するのは、ファイルを変更できるエージェントの最新のステップが、同じフォルダーで完全に同じコマンドを実行して成功した、エージェント自身の `bash` 実行だった場合だけです。パイプ(`| tail`)や `&&` を含むコマンドは再利用しません。予算はターンの終わりに計測されるため、1 回のターンで予算を超えることがあります。トークンの予算には、そのチャットのサブエージェントのチャットの呼び出しも数えます(各ターンの終わりに、保存されたログから読み取ります。そのため、サブエージェントが多いチャットはチェックに少し長くかかります)。証拠の表は、検証用のモデル自身がチャットを読んだ結果です。検証済みとされた部分でも、重要なときは自分で確認してください。チェックの実行中、`update_goal` は待機します(テストは最大 15 分、検証は最大 3 分)。フォークしたチャットには新しいチャット ID が付くため、親チャット独自のテストコマンドと制限なしで始まります。検証まで進んだ完了 1 回ごとに、モデル呼び出しが 1 回行われます。
|
|
241
247
|
- **保護されたファイル** はガードレールであり、サンドボックスではありません。対象は dsh 自身のファイルツール(`read`、`read_image`、ファイルへの `grep`、`write`、`edit`、`str_replace_editor`)です。シェルコマンド(`cat .env`)、エージェントが書いたスクリプト、サブエージェントのシェル、MCP ツール、`glob` の一覧、フォルダー全体への `grep` からは、保護されたファイルに届くことがあります。本当の制限が必要なときは、dsh のサンドボックスモードを使うか、シークレットをプロジェクトのフォルダーの外に置いてください。パターンは `*`、`**`、`?` を理解しますが、`{a,b}` や `[ab]` は理解しません。また、大文字と小文字は区別しません。
|
|
248
|
+
- **ブロックされたコマンド** はガードレールであり、サンドボックスではありません。読むのは、dsh の `bash` と `pwsh` ツールのコマンドテキストだけです。コマンドを指す変数やエイリアス(`CMD=npm; $CMD publish`)、シェル関数、エージェントが書いたスクリプトファイル、ほかのプログラム(`python -c`、`node -e`、`make`)、MCP ツール、あなた自身のターミナルからは、そのコマンドを実行できます。ルールは、意図より多くのコマンドに一致することがあります。コマンドのどの単語もコマンド名になり得ます(`echo npm publish` は `npm publish` に一致します)。また、ルールの単語の間にほかの単語があっても一致します(`git push --force` は `git push origin main --force` にも一致します)。一致する範囲が広すぎるときは、ルールを長くしてください。**先に確認** のルールには、確認できるチャットが必要です。承認ポリシーが never のチャット(例:委任されたサブエージェント)では dsh はカードを表示できないため、呼び出しは理由とともに拒否されます。承認カードには理由が英語で表示されます。**このチャットで許可** では **先に確認** のカードに応答できません。
|
|
242
249
|
- **新しいチャットで続ける** は、チャット(メッセージ、ツール呼び出し、各ツール結果の末尾。最大で約 60,000 文字、最新の部分)をチャット自身のモデルに送ります。引き継ぎメモには、決定やファイルが抜けることがあります。開始する前に読んでください。新しいチャットが知っているのは、メモとリンクしたチャットだけです(dsh は元のチャットを読み取り専用のコンテキストとして添付します)。モデルのコンテキストは小さい状態から始まり、元のチャットはそのまま残ります。1 つのチャットで同時に実行できるメモの作成または開始は 1 つだけです。
|
|
243
250
|
- **コンテキストの内訳** は、dsh 自身のルール(1 トークンあたり約 4 文字)で推定値を表示します。これは dsh のコンテキストリングと同じルールで、モデル自身の数え方とは異なることがあります。ツールの定義は、最新のリクエストのものです。コンテキストはチャットのログにあるとおりに表示します。実行中のターンは、次のステップの後に表示されます。
|
|
251
|
+
- **計画済みステップ** でトークンが減るのは、モデルが実際に計画したときだけです。オンの間は、モデルが計画しないチャットでも、各リクエストに `plan_next_steps` ツールと短い指示(約 500 トークン)が含まれます。条件が証明するのは書かれた内容だけです(例:ビルドの終了コードが 0 だった)。作業が正しいことは証明しません。`ok` は dsh 自身の結果マーク(`[exit code: N]`、タイムアウト、サンドボックスの拒否)を読みます。0 以外の終了コードを返さずに失敗したコマンドは成功とみなされます。ステップは 1 つずつ実行され、同時に実行可能な 2 つのステップはモデルに戻されます。ステップのメッセージはチャットのモデルのアシスタントメッセージとして保存されます(dsh にはプラグインが書いたメッセージを示す印がありません)。そのため、その文面に Composer Plus が実行したことが書かれています。Tether にはありません。
|
|
252
|
+
- **タスクボード** は、このウィンドウで dsh が一覧に表示するチャットを表示します。プロジェクトの外にあるチャットは **すべてのプロジェクト** にだけ表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。カードの列はチャットのライブの状態なので、カードはドラッグできません。チャットはターンが終わると **完了** に移り(エラーや停止の後も同じです)、再び実行されると **作業中** に戻ります。緑の点は dsh 自身の完了の点で、dsh はこのウィンドウでだけこれを保持します。再読み込みの後、終わったチャットは緑の点なしで表示されます。**完了** には最新の 50 件のチャットが表示されます(**古いタスクを N 件表示** で残りを表示します)。タグは、開始したタスクごとに 1 回のモデル呼び出しで作られます。タグが正しくないこともあり、ボードで開始しなかったチャットにはタグがありません。タイトルは dsh 自身のチャットのタイトルです(dsh のタイトルサービスが、チャットのモデルで作ります)。タイトルができるまで、カードにはプロンプトの最初の行が表示されます。dsh が知っている `/` コマンド(`/plan`、`/goal`)で始まるプロンプトは、そのコマンドとして実行されます。**回答** が答えるのは、チャットの最新のリクエストだけです。そのリクエストに別の場所(別のウィンドウ、Tether、自動レビュー)で回答済みのとき、またはチャットが新しいことを尋ねているときは、パネルにそのことが表示され、何も送信しません。以前のバージョンには、コメントとエージェントのツールがあるタスク一覧がありました。これらはなくなり、古い `board.json` は表示されません。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。
|
|
244
253
|
- **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、dsh 自身の順序のままです。公開 API ではない dsh の一部(停止したターンがまだ終了処理中かどうか)を読み取ります。dsh の更新でその名前が変わった場合、メッセージはそのターンが終わった後にだけ先頭に移ります。サブエージェントのチャットは dsh 自身の順序のままです。
|
|
245
254
|
- **プロジェクトメモリー** はチャットの最初のフォルダー(dsh のプロジェクトのフォルダー)に属します。`cd` でフォルダーを変えたチャットは最初のプロジェクトのメモリーを使い続けます。同じファイルへの別のパスで開いた同じフォルダーは、同じメモリーを共有します。チャットは開始時にメモリーのセクションを固定するため、後で保存したメモは次のチャットから表示されます(`memory_recall` ならすぐに見つかります)。確認では、モデルが残すと決めたものだけを残します。事実を見落としたり、誤った内容を残したりすることがあります。**メモリーを開く** で確認してそこで変更するか、dsh を閉じている間にファイルを手で編集してください。**メモリーを開く** は、選んだプロジェクトのメモとグローバルなメモ(「すべてのメモ」を選んだときはすべてのプロジェクト。最大で約 60,000 文字で、残りは数だけ示され、そのリクエストでは変更できません)とあなたの文章を、チャットのモデルではなく dsh の既定のモデルに送ります。プレビューは Mac に 30 分間、dsh を再起動するまで保持されます。その間に確認やエージェントがメモを変更すると **適用** は拒否されるので、もう一度プレビューしてください。**適用** はプレビューの変更をすべて保存するか、1 つも保存しないかのどちらかです。保存できない変更が 1 つでもあると(たとえば MEMORY.md がいっぱいのとき)、メモは元のままで、理由が表示されます。あなたのメッセージを含むターンが終わるたびに、モデルを 1 回呼び出します。呼び出しが失敗すると、次のターンの後に同じメッセージをもう一度読みます。サブエージェントのチャットは確認しません。考え方とファイル形式は [DS Bot](https://github.com/Fei2411/DS-Bot)(Apache-2.0)から来ています。Composer Plus はそのコードを使っておらず、DS Bot 自身のメモリーを読み書きすることもありません。
|
|
246
255
|
- **バックアップ** が使うのは、固定の 1 つのフォルダー `~/Desktop/dsh-backups` だけです(dsh-backup の既定のフォルダーなので、dsh-backup のアーカイブも引き続き使えます)。別のフォルダーを選ぶ設定はありません。アーカイブの大きさは、`cache/` と `dsh-runtimes/` を除いた dsh のホームとほぼ同じです(測定:Apple Silicon で、1.6 GB のファイルから約 30 秒で 830 MB のアーカイブができました。その間も dsh は応答し続けました)。読み取り中に変わったファイルは、バックアップがそのファイルを開いた時点の状態で保存されます。そのため、開いているチャットのログが、途切れたレコードで終わることがあります。これは、dsh が次の書き込みで修復します。マスクでは、yml ファイル内のシークレットを、1 行にあるキーの名前(`token:`、`apiKey:`、…)で見つけます。フローマップ内(`{token: x}`)、そのようなキーの下のリスト内、JSON ファイル内(たとえば、`.json` ファイル内にある MCP サーバーの `apiKey`)、または別の名前のシークレットは、アーカイブに残ります。dsh-backup の種類別アーカイブ(`dsh-t-…`)は一覧に表示されません。**別のコンピュータ用** はアーカイブをコピーします(APFS ではクローンなので、追加の容量は使いません)。vault は一緒にコピーされません。**今すぐバックアップ** はバックアップを削除しません。自動バックアップは、Composer Plus が作成したバックアップのうち最新のものを保持し(**自動バックアップ** の **保持** の設定)、それより古い自身のバックアップを削除します。アップグレード前のスナップショットは別に数えます(最新の 2 件が残ります)。dsh-backup のアーカイブが削除されることはありません。**削除** で取り除いてください。dsh-backup がまだインストールされている間は、dsh-backup が自身の保持件数に Composer Plus のアーカイブを数え、それらを削除することがあります。
|
|
@@ -277,6 +286,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
277
286
|
|
|
278
287
|
**DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。メモを見たり変えたりするには、同じ行の **メモリーを開く** を押して、変更する内容を書いてください。
|
|
279
288
|
|
|
289
|
+
**すべてのチャットをカンバンボードで見て、そこから新しいチャットを開始できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開きます。各チャットは、**作業中**、**レビュー**(あなたを待っています)、**完了** のいずれかの列のカードになります。**新しいタスク** に必要なのはプロンプトだけで、そのプロンプトで新しいチャットを開始します。オレンジのカードで **回答** をクリックすると、チャットを開かずに回答できます。
|
|
290
|
+
|
|
280
291
|
**dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
|
|
281
292
|
|
|
282
293
|
**dsh が起動しなくなりました。バックアップを復元するには?** バックアップフォルダー(`~/Desktop/dsh-backups`)を開き、`Composer Plus Rescue.command` をダブルクリックします(Linux:`composer-plus-rescue.sh`、Windows:`Composer Plus Rescue.cmd`)。`3) Restore a backup` を選び、バックアップを 1 つ選んで `RESTORE` と入力します。dsh がなくても動作します。
|
|
@@ -301,6 +312,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
301
312
|
|
|
302
313
|
**1 つのチャットが変更したファイルだけを見るには?** 右サイドバー → **変更** → **このチャット** を開きます。空白だけの変更を隠すには、**␣** をクリックします。
|
|
303
314
|
|
|
315
|
+
**エージェントが `npm publish` や `git push --force` を実行しないようにするには?** **設定 → Composer Plus → ブロックされたコマンド** で `npm publish` を入力し、**ブロック** または **先に確認** を選んでから、**追加** をクリックします。**ブロック** はコマンドを拒否し、エージェントはあなたに確認します。**先に確認** は毎回承認カードを表示します。「保護されたファイル」はエージェントのファイルツールを、「ブロックされたコマンド」はシェルコマンドを対象にします。
|
|
316
|
+
|
|
304
317
|
**1 つのチャットで、自動レビューが同じツールについて何度も確認しないようにするには?** 承認カードの **このチャットで許可** をクリックします。対象は、そのチャットのその特定のツールだけで、既定では 1 時間有効です。許可は、ヘッダーのチップから取り消せます。時間は **設定 → Composer Plus → このチャットで許可** で変更できます。
|
|
305
318
|
|
|
306
319
|
**iPhone をなくしました。その iPhone が Mac に接続できないようにするには?** サイドバーの左下にある **モバイル接続** をクリックし、その iPhone の横にある **Remove** をクリックします。その iPhone の鍵はすぐに使えなくなります。再び接続するには、Mac で承認する新しいペアリングが必要です。
|
|
@@ -329,6 +342,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
|
|
|
329
342
|
|
|
330
343
|
**iPhone から写真を送れますか?** はい。Tether のチャットで、メッセージ欄の横の **+** → Camera、Photos(最大 4 枚)、または Paste image をタップします。写真はメッセージの添付ファイルとして Mac のチャットに届くため、モデルはそれを見ることができます。
|
|
331
344
|
|
|
345
|
+
**モデルに再度問い合わせずに、dsh が次のコマンドを実行できますか?** はい、**計画済みステップ**(既定ではオフ)を使います。設定 → Composer Plus でオンにしてください。モデルは次のコマンドを条件付きで計画できるようになり(例:「ビルドが通ったらテストを実行」)、結果が条件を満たすと、Composer Plus がモデルを呼び出さずにそのステップを実行します。承認とサンドボックスはそのままです。
|
|
346
|
+
|
|
332
347
|
**デスクトップアプリで使えますか?** はい。設定 → プラグイン → **プラグインを追加** → `dsh-composer-plus` でインストールします。dsh 0.2.0-rc.2(デスクトップと Web)と 0.2.1-rc.2(Web)でテストしています。
|
|
333
348
|
|
|
334
349
|
## 開発
|
|
@@ -393,6 +408,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
393
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
394
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
395
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
+
# Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
396
413
|
```
|
|
397
414
|
|
|
398
415
|
```sh
|