dsh-composer-plus 1.16.1 → 1.18.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 +43 -14
- package/README.es.md +43 -14
- package/README.fr.md +43 -14
- package/README.hi.md +43 -14
- package/README.id.md +43 -14
- package/README.ja.md +43 -14
- package/README.ko.md +43 -14
- package/README.md +43 -14
- package/README.pt-BR.md +43 -14
- package/README.ru.md +43 -14
- package/README.tr.md +43 -14
- package/README.vi.md +43 -14
- package/README.zh.md +43 -14
- package/assets/features/blockedCommands.webp +0 -0
- package/assets/features/contextBreakdown.webp +0 -0
- package/assets/features/handoffChat.webp +0 -0
- package/assets/features/headerFit.webp +0 -0
- package/assets/features/plannedSteps.webp +0 -0
- package/assets/features/projectMemory.webp +0 -0
- package/assets/features/protectedFiles.webp +0 -0
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +1569 -50
- package/index.js +1766 -41
- package/package.json +2 -2
- package/tether/gateway/server.mjs +2 -1
package/README.tr.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz; bu profili uygulama yönetir.)
|
|
31
31
|
|
|
32
|
-
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.
|
|
32
|
+
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.18.0`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -47,6 +47,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
47
47
|
| **Shift+Tab ile plan modu** | <a id="feature-plantoggle"></a>`Shift+Tab`, taslağın başına `/plan ` ekler (kaldırmak için yeniden basın). Sohbet zaten plan modundaysa `Shift+Tab` plan modundan çıkar. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Ekran görüntüsü: Shift+Tab ile plan modu"></a> |
|
|
48
48
|
| **Mesaj alanında odağı koru** | <a id="feature-keepfocus"></a>Bir `/` komutu veya beceri gönderdikten sonra imleç mesaj alanında kalır ve hemen yeniden yazabilirsiniz. Bu, bir komut yazıp `Enter` tuşuna basan klavye makrolarında da çalışır. dsh komutu çözümlerken mesaj alanını salt okunur yapar ve tarayıcı bu sırada odağı kaldırır. Bu özellik odağı geri verir. Odak bir menüde, bir iletişim kutusunda veya başka bir alandaysa odağı geri vermez. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Ekran görüntüsü: Mesaj alanında odağı koru"></a> |
|
|
49
49
|
| **Soru kartını pencereye sığdır** | <a id="feature-questionfit"></a>Ajan size bir soru sorduğunda soru ve cevaplar kartta birlikte kayar, **Atla** ve **Gönder** altta görünür kalır. Kart pencerenin yüksekliğini kullanır (sohbet başlığı ve sohbetin bir şeridi için 200 px eksik), bu yüzden pencereyle birlikte büyür ve küçülür. Bu özellik olmadan dsh kartı pencerenin %60'ında (en çok 520 px) tutar ve yalnız cevaplar kayar: uzun bir soru kendi sonunu, cevapları ve düğmeleri kartın dışına itebilir. | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="Ekran görüntüsü: Soru kartını pencereye sığdır"></a> |
|
|
50
|
+
| **Sohbet başlığını pencereye sığdır** | <a id="feature-headerfit"></a>Dar bir pencerede dsh'nin sohbet başlığındaki düğmeler (mod, alt ajanlar, arka plan işleri, Şurada aç, dal etiketi ve izin çipi) artık birbirinin üstüne binmez. Sohbet başlığı en az 120 px kalır; sığmayan düğmeler sağda ikinci satıra geçer ve her biri tıklanabilir kalır. Her şey tek satıra sığdığında (geniş pencere) başlık tam olarak dsh'ninkidir. Bu özellik olmadan dsh yalnız başlığı daraltır: alt ajan ve arka plan işleri varken dar bir sohbet sütununda düğmeleri birbirinin üstüne kayar. Dal etiketi (**Sohbet başına dal**) ve izin çipi (**Sohbet boyunca izin**) bu anahtar kapalıyken de başlığa sığar. | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="Ekran görüntüsü: Sohbet başlığını pencereye sığdır"></a> |
|
|
50
51
|
| **Tek tıkla devam** | <a id="feature-continuebutton"></a>Durdurulan, hata veren veya yarıda kesilen bir turdan sonra boş mesaj alanında **▶** görünür. Tek tıklama, giriş alanına bir şey yazmadan ve sohbete görünür bir mesaj eklemeden mevcut konuşmayı sürdürür. (Model kısa ve gizli bir “kaldığın yerden devam et” notu alır. Bunun nedeni, Claude gibi bazı sağlayıcıların asistan yanıtıyla biten bir isteği reddetmesidir.) Kuyrukta bekleyen mesajlar yerinde kalır: ▶ yalnız durdurulan işi sürdürür, sonra kuyruk çalışır. Tamamlanan bir turdan sonra normal gönderme düğmesi kalır. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Ekran görüntüsü: Tek tıkla devam"></a> |
|
|
51
52
|
| **Yeniden açılışta sürdür** | <a id="feature-resumeafterrestart"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Bir sohbet çalışırken dsh’den çıkarsanız (ya da dsh kapanırsa), dsh’yi yeniden açtığınızda o sohbet kendiliğinden devam eder. Bunun için Tek tıkla devam ile aynı gizli notu kullanır. Bir hedef turu (`/goal`) çalışıyorsa hedef bir sonraki turla devam eder (dsh her açılışta hedefleri, siz sürdürene kadar duraklatır). Sizin durdurduğunuz, tamamlanan veya hata veren sohbetler devam etmez. dsh’nin kendisinde bunun için bir ayar yoktur: dsh böyle bir turu yalnızca kesintiye uğradı olarak işaretler. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Ekran görüntüsü: Yeniden açılışta sürdür"></a> |
|
|
52
53
|
| **Kuyrukta sürükle bırak** | <a id="feature-queuereorder"></a>Sıradaki mesajlarda bir tutamaç (⠿) görünür. Yerini değiştirmek için sürükleyin ya da tutamaca odaklanıp `↑` / `↓` tuşlarına basın. `Esc` taşımayı iptal eder. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Ekran görüntüsü: Kuyrukta sürükle bırak"></a> |
|
|
@@ -63,19 +64,25 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
63
64
|
| **Çalışma alanı ağacında dallar** | <a id="feature-branchtree"></a>Ayarlar → Composer Plus → **Çalışma alanı ağacında dallar** (varsayılan olarak kapalı). Açınca `<project>/.worktrees/` içinde worktree klasörü olan her dal, kendi projesinin içinde bir proje olarak görünür. İç içe görmek için dsh’nin **Görünüm seçenekleri** → **Çalışma alanı ağacı** seçeneğini seçin. Klasörü silinen dal listeden kalkar ve dsh, sohbetlerini **Gruplanmamış** altında gösterir. Proje klasöründeki bir sohbetin ajanı bir dal oluşturup ona geçerse (`git switch -c`, `git checkout -b`) ve klasörde commit edilmemiş değişiklik yoksa, proje klasörü önceki dalına döner, dal kendi klasörünü alır ve sohbet oraya taşınır: sohbetin bir kopyası dal projesinde açılır ve işe devam eder, eski sohbet arşivlenir. Liste açılışta, 30 saniyede bir, her turdan sonra ve pencereye döndüğünüzde denetlenir. | <a href="assets/features/branchTree.webp"><img src="assets/features/branchTree.webp" width="160" alt="Ekran görüntüsü: Çalışma alanı ağacında dallar"></a> |
|
|
64
65
|
| **Sonraki mesaj tahmini** | <a id="feature-nextprediction"></a>Varsayılan olarak açıktır: **Ayarlar → Composer Plus** içinden kapatabilirsiniz. Ajan bir turu bitirince (durdurulan veya hata veren bir tur değilse) boş mesaj alanı, bir sonraki mesajınız için gri renkte bir tahmin gösterir. Yanında **Kabul için Tab** ipucu vardır. `Tab` metni mesaj alanına koyar ama göndermez. `Esc` tahmini o tur için gizler. Yazmaya başlamak da tahmini gizler. Yeni bir tur tahmini yenisiyle değiştirir. Anahtarın altındaki **Model** menüsü dsh’nin kendi modellerini listeler (dsh’nin model menüsündeki listenin aynısı). Varsayılan olarak **dsh varsayılanı** seçilidir ve dsh’nin varsayılan modelini izler. Biten her tur için kısa bir model çağrısı yapılır. Tether’de tahmin, boş mesaj alanının üstünde görünür: alana koymak için tahmine dokunun. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Ekran görüntüsü: Sonraki mesaj tahmini"></a> |
|
|
65
66
|
| **Yazarken tamamla** | <a id="feature-typingcompletion"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açabilirsiniz. Siz yazarken imlecin hemen sonrasında gri bir metin, mesajınızın nasıl devam edebileceğini gösterir. `Tab` bu metni mesaja ekler ama göndermez. `Esc` metni gizler. Yalnız sizin yazacağınız sonraki kelimeleri önerir: size cevap vermez, uydurma hata metni ya da isim eklemez. Mesaj bitmiş görünüyorsa ya da model emin değilse hiçbir şey görünmez. Gri metnin sonraki harflerini yazarsanız metin kalır ve yeni bir model çağrısı yapılmaz. Anahtarının altında kendi **Model** menüsü vardır. Bu menünün ilk seçeneği olan **Sonraki mesaj tahminiyle aynı** (varsayılan), **Sonraki mesaj tahmini** modelini kullanır. Her özellikte farklı bir model kullanmak için başka bir model seçin (örneğin tamamlamalar için daha hızlı bir model). Yazarken her duraklamada bir model çağrısı yapar. Bu yüzden tahminden çok daha fazla token harcar: hızlı ve düşük maliyetli bir model seçin. Eğik çizgi komutunda, dosya etiketi olan bir mesajda veya imleç sonda değilken çalışmaz. Tether’de, siz yazarken metnin kalanı alanın üstünde görünür: eklemek için ona dokunun. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Ekran görüntüsü: Yazarken tamamla"></a> |
|
|
66
|
-
| **İstemi iyileştir** | <a id="feature-promptimprove"></a>Kaba bir istek yazın, sonra model menüsünün yanındaki sihirli değneğe (**İstemi iyileştir**) tıklayın. Tek bir model çağrısı isteği daha net bir isteme dönüştürür: önce hedef, birden çok parça varsa kısa numaralı adımlar ve çalıştırılacak kontrol. Bu sohbeti (geri alınan mesajlar hariç), projenin README, AGENTS.md ve manifest dosyalarını, değişen dosyaları ve adı sözcüklerinizle eşleşen dosyaları okur; dilinizi korur. Dosya adı uydurmaz. Yeni metin taslağınızın yerine geçer ama gönderilmez: okuyun, düzenleyin, sonra `Enter` tuşuna basın. `Cmd/Ctrl+Z` metninizi tek adımda geri getirir; düğme (**İyileştirmeyi geri al**) de aynısını yapar. O çalışırken yazarsanız yeni metniniz kalır. `Esc` ya da ikinci tıklama iptal eder. Ayarlar'da kendi **Model** menüsü vardır (varsayılan: **Sohbetin modeliyle aynı**).
|
|
67
|
-
| **Hedef kontrolü** | <a id="feature-goalcheck"></a>`/goal` ile bir hedef başlatın. Ajan otomatik bir turda hedefi tamamlandı olarak işaretlediğinde hedef yalnızca iki kontrolden sonra kapanır. Önce projenin test komutu sohbetin klasöründe, sohbetin korumalı alan moduyla çalışır. Komut sizin kendi komutunuzdur ya da `package.json`, `Makefile`, `Cargo.toml`, `go.mod` veya pytest içinde bulunan komuttur. Ajanın kendi en yeni adımı bu testin başarılı bir çalıştırmasıysa test yeniden çalışmaz. Sonra araç kullanmayan bağımsız bir model çağrısı hedefi, bu sohbeti, `git status` çıktısını ve test sonucunu okur. Bir kontrol başarısız olursa hedef etkin kalır, ajan
|
|
68
|
-
| **
|
|
67
|
+
| **İstemi iyileştir** | <a id="feature-promptimprove"></a>Kaba bir istek yazın, sonra model menüsünün yanındaki sihirli değneğe (**İstemi iyileştir**) tıklayın. Tek bir model çağrısı isteği daha net bir isteme dönüştürür: önce hedef, birden çok parça varsa kısa numaralı adımlar ve çalıştırılacak kontrol. Bu sohbeti (geri alınan mesajlar hariç), projenin README, AGENTS.md ve manifest dosyalarını, değişen dosyaları ve adı sözcüklerinizle eşleşen dosyaları okur; dilinizi korur. Dosya adı uydurmaz. Yeni metin taslağınızın yerine geçer ama gönderilmez: okuyun, düzenleyin, sonra `Enter` tuşuna basın. `Cmd/Ctrl+Z` metninizi tek adımda geri getirir; düğme (**İyileştirmeyi geri al**) de aynısını yapar. O çalışırken yazarsanız yeni metniniz kalır. `Esc` ya da ikinci tıklama iptal eder. Ayarlar'da kendi **Model** menüsü vardır (varsayılan: **Sohbetin modeliyle aynı**). `/goal <hedef>` mesajında yalnız hedef metnini, **Hedef kontrolü**'nün doğrulayabileceği bir bitiş koşuluna çevirir: çıkacak dosyalar ya da sonuçlar, geçmesi gereken kontroller, sohbette gösterilecek kanıt, yapılamayan bir parçanın çözülmedi diye işaretlenmesi ve aynı engel sürerse durma. `/goal` komutu kalır. Diğer eğik çizgi komutları, bir `/goal` kontrol sözcüğü (`clear`, `pause`, `resume`) ve dosya chip'i olan mesajlar için çalışmaz. Tether'de değnek, yazı alanının yanındadır. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Ekran görüntüsü: İstemi iyileştir"></a> |
|
|
68
|
+
| **Hedef kontrolü** | <a id="feature-goalcheck"></a>`/goal` ile bir hedef başlatın. Ajan otomatik bir turda hedefi tamamlandı olarak işaretlediğinde hedef yalnızca iki kontrolden sonra kapanır. Önce projenin test komutu sohbetin klasöründe, sohbetin korumalı alan moduyla çalışır. Komut sizin kendi komutunuzdur ya da `package.json`, `Makefile`, `Cargo.toml`, `go.mod` veya pytest içinde bulunan komuttur. Ajanın kendi en yeni adımı bu testin başarılı bir çalıştırmasıysa test yeniden çalışmaz. Sonra araç kullanmayan bağımsız bir model çağrısı hedefi, bu sohbeti, `git status` çıktısını ve test sonucunu okur. Model bir kanıt tablosuyla yanıt verir: hedefin her parçası kanıtı ve düzeltmesiyle birlikte doğrulandı, yanlış ya da çözülmedi olarak işaretlenir. Hedef yalnız her parça doğrulandığında kapanır. Bir kontrol başarısız olursa hedef etkin kalır, ajan açık her parçayı kanıtı ve düzeltmesiyle okur ve sonraki tur devam eder. Hedef çubuğunun altındaki bir satır (**Hedef kontrolü**) testi, son sonucu ve kaç parçanın doğrulandığını gösterir (tablo için üzerine gelin). **Düzenle** kendi test komutunuzu ve bir süre ya da token sınırını belirler; sınır aşılınca hedef engellenir. Token sınırı sohbetin alt ajanlarını da sayar. **Şimdi çalıştır** kontrolü hedefi kapatmadan çalıştırır. Ayarlar'da kendi **Model** menüsü vardır (varsayılan: **Sohbetin modeliyle aynı**). Hedefi kendiniz tamamladığınızda hiçbir şey kontrol edilmez. | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="Ekran görüntüsü: Hedef kontrolü"></a> |
|
|
69
|
+
| **Yeni sohbette devam et** | <a id="feature-handoffchat"></a>Kenar çubuğunda bir sohbete sağ tıklayın (ya da sohbetin **…** menüsünü açın) → **Yeni sohbette devam et…**. Sohbetin kendi modeline yapılan tek çağrı, sohbetten bir devir notu yazar: Görev, Çıktılar, Tamamlananlar, Kararlar, Açık sorunlar ve Sonraki adım. Not, sohbetin gösterdiklerinden yazılır (araç çağrıları ve sonuçları kanıttır; geri aldığınız adımlar dışarıda kalır). Not bir pencerede açılır: okuyun ve düzenleyin. **Yeniden yaz** yeni bir not yazar. **Yeni sohbet başlat** (ya da `Cmd/Ctrl+Enter`), aynı projede ilk mesajı not ve eski sohbetin bağlantısı olan yeni bir sohbet açar; eski sohbet olduğu gibi kalır. Uzun bir sohbet dolduğunda ya da yavaşladığında veya ertesi gün devam etmek için kullanın. Projeye hiçbir şey yazılmaz. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Ekran görüntüsü: Yeni sohbette devam et"></a> |
|
|
70
|
+
| **Bağlam dökümü** | <a id="feature-contextbreakdown"></a>Sağ kenar çubuğu → `+` → **Bağlam**. Sayfa, açık sohbetin model bağlamını şu anda neyin doldurduğunu ve bağlam penceresinin ne kadarını kullandığını gösterir: sistem istemi, proje talimatları (AGENTS.md), beceriler, mesajlarınız, ajan yanıtları ve araç çağrıları, araç sonuçları (araca göre), MCP sonuçları (sunucuya göre), araç tanımları, sıkıştırma özeti ve diğer bağlam notları; her biri token sayısı ve payıyla. Bir parçaya tıklayın, araçlarını ya da sunucularını görün. Yalnız sohbet günlüğünü okur (`/compact` ve geri almalardan sonraki hâlini), model çağırmaz; her turdan sonra ve **Yenile** ile yeniden okur. Bir sohbetin neden yavaş ya da dolu olduğunu görmek için kullanın, örneğin büyük bir MCP araç sonucu ya da çok sayıda araç tanımı. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Ekran görüntüsü: Bağlam dökümü"></a> |
|
|
71
|
+
| **Planlı adımlar** | <a id="feature-plannedsteps"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Ajan `plan_next_steps` aracını alır: bir komutla aynı mesajda, sonraki komutları kesin argümanları ve bir koşulla planlayabilir; örneğin "derleme geçince `npm test` çalıştır". Sonuç koşulu karşılarsa Composer Plus sonraki adımı yeni bir model çağrısı yapmadan kendisi çalıştırır; böylece uzun bir sohbet daha az token harcar. Adım sohbette kısa bir satırla görünür: "Composer Plus · Planned steps: ran `test` … without a model call"; ardından araç çağrısı ve sonucu gelir. Yalnız `bash`, `read`, `grep` ve `glob` adımları; onaylar, sandbox ve Korunan dosyalar her adımda her zamanki gibi geçerlidir. Koşul tutmazsa, aynı anda iki adım hazırsa, son adımdan sonra ve siz mesaj yazınca model yeniden yanıt verir. Fikir HarnessMM'den (arXiv 2610.32813) gelir. | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Ekran görüntüsü: Planlı adımlar"></a> |
|
|
72
|
+
| **Korunan dosyalar** | <a id="feature-protectedfiles"></a>Varsayılan olarak açık. Ajanın kendi dosya araçları, desenlerinizle eşleşen dosyaları okuyamaz ve değiştiremez: **okuma ve yazma** desenlerinde bir dosya üzerindeki `read`, `read_image` ve `grep` reddedilir; her iki türde de `write`, `edit` ve `str_replace_editor` reddedilir. Ajan nedenini okur ve size sorması söylenir. Varsayılan desenler `.env*`, `*.pem` ve `*.key`. Ayarlar → Composer Plus → **Korunan dosyalar**: bir desen ekleyin (örneğin `published/**` ya da `config/*.yml`), türüne tıklayarak **okuma ve yazma** ile **yalnızca yazma** arasında geçin, ✕ ile kaldırın ya da **Varsayılanları kullan**. `/` içermeyen bir desen, her klasördeki dosya adıyla eşleşir. Bu bir korkuluktur, korumalı alan değildir: bir kabuk komutu (`cat .env`), bir betik ya da bir MCP aracı dosyaya yine erişebilir (bkz. Sınırlar). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ekran görüntüsü: Korunan dosyalar"></a> |
|
|
73
|
+
| **Engellenen komutlar** | <a id="feature-blockedcommands"></a>Varsayılan olarak açık, liste başta boştur. Ajanın kabuk komutları (`bash`, `pwsh`) kurallarınızla eşleşen bir komutu çalıştıramaz: bir **engelle** kuralı çağrıyı reddeder (ajan nedenini okur ve size sorması söylenir), bir **önce sor** kuralı dsh’nin onay kartını gösterir ve komut yalnızca siz izin verince çalışır. Ayarlar → Composer Plus → **Engellenen komutlar**: bir kural yazın (örneğin `npm publish`, `git push --force` ya da `ssh *192.168.2.19`), türüne tıklayarak **engelle** ile **önce sor** arasında geçin, sonra **Ekle** düğmesine tıklayın; bir kuralın türünü değiştirmek için türüne tıklayın, kuralı ✕ ile kaldırın. Bir kural, bir komut adı ve ondan sonra bu sırayla gelmesi gereken sözcüklerdir; `*` herhangi bir metinle eşleşir. Kontrol, komutu `&&`, `;`, `\|` sonrasında, `$(…)`, `bash -c "…"` ya da `eval` içinde ve `sudo` ya da `env` sonrasında da bulur. Bu bir korkuluktur, korumalı alan değildir: bir değişken (`$CMD`), bir betik dosyası ya da başka bir program komutu yine çalıştırabilir (bkz. Sınırlar). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ekran görüntüsü: Engellenen komutlar"></a> |
|
|
74
|
+
| **Görev panosu** | <a id="feature-taskboard"></a>Sol kenar çubuğu → **Görev panosu**. Sizin ve ajanların birlikte kullandığı, dsh projelerinizin kanban panosu: **Yapılacak**, **Yapılıyor**, **İncelemede** ve **Bitti** (ve **Bekleyenler**, aşağıya bakın). Soldan bir proje ya da **Tüm projeler** seçin. **Yeni görev** (ya da `n`) yeni bir kart açar: başlığını yazın ve `Enter` tuşuna basın. Bir kartı başka bir sütuna ya da iki kartın arasına sürükleyin. Bir karta tıklayınca kartın **Durum**, **Etiketler**, **İnsan** (ajanlar bunu atlar), açıklama (Markdown) ve yorum alanlarını görür ve değiştirirsiniz. `/` her projede arar, `h` yalnız insan görevlerini gösterir, dışa aktarma düğmesi panoyu Markdown ya da JSON olarak kaydeder. Ajanlar pano araçlarını alır: bir sohbetten "panodaki sonraki görevi al" isteyin; ajan en üstteki **Yapılacak** kartını **Yapılıyor** sütununa taşır, yaptığı işi yorum olarak yazar ve kartı **İncelemede** sütununa taşır; kartı **Bitti** sütununa siz taşırsınız. Açık görevi olan bir projede her sohbet bu kuralı kendiliğinden alır. Ayarlar → Composer Plus → **Görev panosu** satırında **Bekleyenler** sütununun anahtarı vardır: ajanlar bu sütundaki kartları size bırakır. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ekran görüntüsü: Görev panosu"></a> |
|
|
75
|
+
| **Proje hafızası** | <a id="feature-projectmemory"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Her proje klasörünün kendi hafızası olur ve o projenin sonraki sohbetleri bu hafızayı okur. DS Bot da her Bot için böyle bir hafıza tutar. Her tur bittikten sonra sohbetin modeline bir çağrı yapılır: yeni mesajları okur (geri alınanları okumaz), kalıcı tercihlerinizi, kararlarınızı ve olguları kısa notlar olarak saklar, eski notları değiştirir ya da siler. Ajan da notları kendisi kaydedebilir, silebilir ve arayabilir (`memory_remember`, `memory_forget`, `memory_recall`). Bir not genel de olabilir: o notu her proje okur. Yeni bir sohbet notları sistem isteminde alır; sonra kaydedilen bir not bir sonraki sohbette görünür. Dosyalar dsh ana klasöründe Markdown dosyalarıdır (`storages/dsh-composer-plus/memory/`), hiçbir zaman proje klasöründe değildir. Aynı satırdaki **Hafızayı aç**, kaydedilen tüm notları proje proje (ve genel hafızayı) gösterir; notları filtreleyebilirsiniz. Neyin değişeceğini kendi sözlerinizle yazın (örneğin "yarn yerine artık pnpm kullanıyorum"), sonra **Değişiklikleri önizle**: değişiklikleri dsh’nin varsayılan modeli önerir, yalnız **Uygula** onları kaydeder. Tether’de: sohbet başlığı menüsü → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ekran görüntüsü: Proje hafızası"></a> |
|
|
69
76
|
| **Sohbet boyunca izin** | <a id="feature-allowforchat"></a>Otomatik inceleme size sorduğunda onay kartında **Bu sohbet boyunca izin ver** düğmesi görünür. Bundan sonra aynı sohbette aynı araca, parametreleri ne olursa olsun, süre sınırı dolana kadar izin verilir (varsayılan olarak 1 saat; süreyi **Ayarlar → Composer Plus → Sohbet boyunca izin** içinden seçin). Sonra ajan yeniden sorar. Başlıktaki küçük bir etiket izinleri bitiş saatleriyle listeler ve kaldırır. İzinler yeniden başlatmadan sonra da korunur. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Ekran görüntüsü: Sohbet boyunca izin"></a> |
|
|
70
77
|
| **Proje durumu** | <a id="feature-projectstatus"></a>Kenar çubuğundaki proje satırı, sohbetlerindeki dönen simge / bekliyor / tamamlandı işaretinin aynısını gösterir. Böylece daraltılmış bir proje de içindeki bir sohbetin çalıştığını ya da sizi beklediğini gösterir. Önce sizi bekleyen bir sohbet gösterilir, sonra henüz açmadığınız tamamlanmış bir sohbet (yeşil nokta, başka bir sohbet hâlâ çalışırken de), sonra dönen simge. Ayrıntılar için üzerine gelin. **Çalışma alanı ağacı** görünümünde üst klasörün satırı, içindeki her projenin (örneğin `.worktrees/` içindeki her dal klasörünün) sohbetlerini de gösterir. Bu, klasör daraltılmışken de geçerlidir. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ekran görüntüsü: Proje durumu"></a> |
|
|
71
|
-
| **Sohbet satırlarında Git dalı** | <a id="feature-sessionbranch"></a>Kenar çubuğundaki her sohbet satırı, küçük gri bir etiketle sohbetin proje klasörünün sohbetin son turunda bulunduğu git dalını gösterir (örneğin `main` ya da `feature/login`; ayrık HEAD durumunda
|
|
78
|
+
| **Sohbet satırlarında Git dalı** | <a id="feature-sessionbranch"></a>Kenar çubuğundaki her sohbet satırı, küçük gri bir etiketle sohbetin proje klasörünün sohbetin son turunda bulunduğu git dalını gösterir (örneğin `main` ya da `feature/login`; ayrık HEAD durumunda dal olmadığından etiket görünmez). Böylece bir projenin farklı dallardaki iki sohbeti artık aynı görünmez ve bir sohbeti yanlış dalda sürdürmek üzereyken bunu hemen görürsünüz. Dalın tam adını görmek için etiketin üzerine gelin. Host tarafı dalı bir tur başlarken ve biterken okur (`git branch --show-current`, salt okunur). Bu özelliği yükledikten sonra hiç turu olmayan bir sohbette ya da Git deposu olmayan bir klasörde etiket görünmez. Sohbetin üstündeki proje satırının adı dalın adıyla aynıysa (örneğin bir “Sohbet başına dal” klasöründe), sohbet satırında dal etiketi görünmez; “Tek listede” görünümünde etiket yine görünür. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Ekran görüntüsü: Sohbet satırlarında Git dalı"></a> |
|
|
72
79
|
| **Tümünü okundu işaretle** | <a id="feature-markprojectread"></a>Kenar çubuğunda bir projenin **…** düğmesine tıklayın → **Tümünü okundu işaretle**. O projedeki her sohbetin yeşil okunmamış noktası hemen kalkar. Diğer projelerin noktaları kalır. Projede okunmamış sohbet yoksa öğe soluk görünür (**Okunmamış sohbet yok**). | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Ekran görüntüsü: Tümünü okundu işaretle"></a> |
|
|
73
80
|
| **Etkin projeler üstte** | <a id="feature-activeprojectsfirst"></a>Bir sohbet çalışmaya başladığında ya da sizi beklediğinde, projesi dsh’nin kendi satır animasyonuyla kenar çubuğunun en üstüne taşınır (projeyi oraya sürüklediğinizdeki hareketin aynısı). Tamamlanan projeler yerinde kalır. Onları her zamanki gibi istediğiniz yere sürükleyebilirsiniz. Taşımalar dsh’nin proje sırasına kaydedilir. Bu yüzden özelliği kapatmak mevcut sırayı korur. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ekran görüntüsü: Etkin projeler üstte"></a> |
|
|
74
81
|
| **Yakın zamanda aktif proje filtresi** | <a id="feature-recentprojects"></a>Kenar çubuğu → görünüm seçenekleri (kaydırıcı simgesi) → **Son 2 saatte aktif olanlar**. Bu seçenek seçiliyken kenar çubuğu yalnızca son 2 saatte etkin bir sohbeti olan projeleri gösterir. Etkin sohbet şunlardan biridir: bu sürede güncellenen bir sohbet, çalışan ya da bekleyen bir sohbet, açık olan sohbet veya henüz açmadığınız tamamlanmış bir sohbet (dsh’nin yeşil “tamamlandı” noktası). Sonuncusu 2 saat geçtikten sonra da geçerlidir. Böyle bir sohbeti olmayan projeler gizlenir; yeni ve boş projeler de gizlenir. **Çalışma alanı ağacı** görünümünde, içindeki bir proje etkin olduğu sürece üst klasör görünür kalır ve son 2 saatte etkin olmayan sohbetler de gizlenir; böylece yalnızca yakın zamandaki sohbetler görünür. Tüm projeleri göstermek için seçeneği yeniden seçin. Seçim bu cihazda saklanır. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Ekran görüntüsü: Yakın zamanda aktif proje filtresi"></a> |
|
|
75
82
|
| **Tüm projeleri daralt** | <a id="feature-collapseprojects"></a>Kenar çubuğunda bir proje açıkken görünüm seçeneklerinin (kaydırıcı simgesi) yanında bir düğme görünür. Açık olan tüm projeleri bir kerede kapatmak için bu düğmeye tıklayın (örneğin 5 projeden açık olan 3’ünü). Hiçbir proje açık değilse düğme yeniden gizlenir. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Ekran görüntüsü: Tüm projeleri daralt"></a> |
|
|
76
83
|
| **Duruma göre sıralama** | <a id="feature-statusorder"></a>Kenar çubuğu → görünüm seçenekleri → **Sıralama ölçütü** → **Duruma göre** (**Tek listede** ile). Önce tamamlanan sohbetler gelir (dsh’nin “tamamlandı” noktası; hatayla biten bir tur da bu noktayı alır). Sonra çalışan ya da bekleyen sohbetler, sonra etkin bir otomasyonu (zamanlanmış görev) olan sohbetler, en sonda da diğerleri dsh’nin sırasıyla gelir. Tamamlanan bir sohbeti açmak onu aşağı taşır. Yalnızca görünüm değişir: geri dönmek için **Elle** ya da **Son güncelleme** seçin. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Ekran görüntüsü: Duruma göre sıralama"></a> |
|
|
77
84
|
| **Arka plan bildirimleri** | <a id="feature-notifications"></a>dsh arka plandayken bir tur bittiğinde (yanıtın ilk satırıyla) ya da bir sohbet gerçekten sizi beklediğinde bildirim alırsınız. Bekleme nedeni bir onay (araç adı), bir yanıt (soru) veya bir plan incelemesi olabilir. Bir isteğin 1,5 sn sonra hâlâ açık olması gerekir. Bu yüzden otomatik yanıtlanan onaylar (Otomatik inceleme izinleri, diğer eklentiler) bildirim göstermez. Bir istek yanıtlanınca bildirimi de hemen geri çekilir. Dock/görev çubuğu rozeti bekleyen sohbetleri sayar. Bildirime tıklamak o sohbeti açar. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Ekran görüntüsü: Arka plan bildirimleri"></a> |
|
|
78
|
-
| **Boştayken bekleyen sohbeti aç** | <a id="feature-idleswitch"></a>Bir sohbet soru sorduğunda
|
|
85
|
+
| **Boştayken bekleyen sohbeti aç** | <a id="feature-idleswitch"></a>Bir sohbet soru sorduğunda, bir onay veya plan incelemesi beklediğinde (turuncu nokta) ya da henüz okumadığınız bir turu bitirdiğinde (yeşil nokta) ve siz dsh'yi 30 saniye kullanmadığınızda, dsh o sohbeti açar. Turuncu sohbetler yeşillerden önce açılır. Her grupta en uzun süredir bekleyen önce açılır. Sonraki, yine 30 saniye kullanılmadığında açılır. Bir tuş, tıklama, fare hareketi, kaydırma tekerleği veya dokunma 30 saniyeyi yeniden başlatır. Odaktaki alanda metin olması, seçili metin ya da açık bir menü veya iletişim kutusu da geçişi durdurur. Bekleyen bir sohbet ekrandayken hiçbir şey değişmez. Bekleyen bir sohbetten yanıt vermeden ayrılırsanız, sohbet bir sonraki 30 saniyelik boşlukta yeniden açılabilir. Yeşil bir sohbet açılınca noktası kalkar. Sonraki yeşil sohbet, siz dsh'yi yeniden kullandıktan sonra 30 saniye boşta kalınca açılır. Bu, dsh arka plandayken de çalışır ama dsh öne gelmez. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Ekran görüntüsü: Boştayken bekleyen sohbeti aç"></a> |
|
|
79
86
|
| **Uygulama dili** | <a id="feature-language"></a>Ayarlar → Composer Plus → **Uygulama dili**, dsh arayüzünün tamamını Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt veya हिन्दी diline geçirir (aşağıya bakın). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Ekran görüntüsü: Uygulama dili"></a> |
|
|
80
87
|
| **Mobil bağlantı (iPhone)** | <a id="feature-mobileconnect"></a>dsh’yi iPhone’unuzdan [Tether](tether/) uygulamasıyla, aynı Wi-Fi ağında ya da [Tailscale](https://tailscale.com) üzerinden kullanın. Özelliği **Ayarlar → Composer Plus** içinden açın (varsayılan olarak kapalıdır, çünkü bu Mac’te bir ağ portu açar). Sonra kenar çubuğunun sol altındaki **Mobil bağlantı** düğmesine tıklayın. QR kodunu iPhone’un Kamera uygulamasıyla (**Open in Tether** düğmesine dokunun) ya da Tether’deki **Scan code** ile tarayın. **Connect** düğmesine dokunun ve **Approve** düğmesine tıklayın. Önce Tether’i yükleyin: Tether yüklü değilse Kamera bu kodu açamaz. Telefon sohbetlerinizi gösterir, mesaj gönderir (fotoğraflarla birlikte: mesaj alanındaki **+** → Camera, Photos ya da Paste image), onayları ve soruları yanıtlar, modelleri ve ajanları değiştirir. İstediğiniz kadar Mac eşleştirebilirsiniz: uygulamanın sol üstündeki Mac adıyla Mac’ler arasında geçiş yaparsınız. **Mobil bağlantı** paneli eşleştirilmiş iPhone’ları son bağlantı zamanlarıyla listeler: **Remove** ile birinin bağlantısını hemen kesersiniz. “Tailscale only” yerel ağı reddeder (paylaşılan bir Wi-Fi için) ve erişim günlüğü kimin bağlanmayı denediğini gösterir. Tether’de “Settings → Privacy” uygulamayı Face ID ile kilitler. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ekran görüntüsü: Mobil bağlantı (iPhone)"></a> |
|
|
81
88
|
| **Otomatik güncellemeler** | <a id="feature-autoupdate"></a>dsh açıldığında eklenti [en son GitHub sürümünü](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) denetler. Bu sürüm daha yeniyse ve npm’de de varsa, tam olarak o sürümü dsh’nin kendi eklenti yöneticisiyle yükler (Ayarlar → Eklentiler ile aynı yol) ve size bildirir. Yeni sürümü yüklemek için dsh’yi yeniden başlatın. **Ayarlar → Composer Plus → Composer Plus güncellemeleri** sürümü gösterir. **Güncellemeleri denetle** / **Şimdi güncelle** düğmeleri de buradadır. dsh yeni sürümle ilk kez açıldığında **Composer Plus N sürümündeki yenilikler** penceresi o sürümün sürüm notlarını bir kez gösterir (notlar aynı güncelleme denetiminden gelir, ek ağ çağrısı yapılmaz). **Kapat** düğmesi ya da `Esc` pencereyi kapatır. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ekran görüntüsü: Otomatik güncellemeler"></a> |
|
|
@@ -160,7 +167,12 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
160
167
|
- **Yazarken tamamla:** siz açana kadar kapalıdır. Açıkken, yazarken her duraklamada Host tarafı o ana kadar yazdığınız metni, sohbetteki kendi mesajlarınızı ve ajanın metin yanıtlarını **Yazarken tamamla** için seçilen modele (varsayılan olarak **Sonraki mesaj tahmini** modeline) gönderir. Araç çıktısı, gizli bağlam ve akıl yürütme metni gönderilmez. Sohbetten en çok yaklaşık 3.000 karakter gider. Daha yeni bir duraklama eski isteği durdurur. Sohbete hiçbir şey kaydedilmez. Anahtar `$DSH_HOME/storages/dsh-composer-plus/complete.json` dosyasındadır (yalnızca sahibin erişebildiği dosya).
|
|
161
168
|
- **İstemi iyileştir:** siz sihirli değneğe tıklayana kadar hiçbir şey çalışmaz. Sonra Host tarafı, **İstemi iyileştir** için seçilen modele (varsayılan olarak sohbetin kendi modeline) tek bir istek gönderir. İstekte şunlar vardır: taslağınız; sohbetteki kendi mesajlarınız ve ajanın metin yanıtları (en çok yaklaşık 6.000 karakter, en yeni kısım); **Özellik fikirleri** ile aynı proje özeti (aynı dosya kurallarıyla: `.env*` dosyaları ve anahtar dosyaları okunmaz, klasörün dışını gösteren sembolik bağlantılar ve FIFO’lar atlanır); `git status` komutunun değişmiş olarak listelediği yollar ve adı taslağınızla ortak sözcük içeren en çok 30 izlenen veya izlenmeyen (yok sayılmayan) yol. Araç çıktısı, gizli bağlam, akıl yürütme metni ve geri alınan mesajlar gönderilmez. Bu özet dışında hiçbir dosya içeriği gönderilmez. Sohbete ve projeye hiçbir şey yazılmaz: yanıt yalnızca mesaj alanındaki taslağınızın yerine geçer ve göndermeye siz karar verirsiniz. Model seçimi `$DSH_HOME/storages/dsh-composer-plus/improve.json` dosyasındadır (yalnızca sahibin erişebildiği dosya).
|
|
162
169
|
- **Hedef kontrolü:** yalnızca ajan otomatik bir turda bir `/goal` hedefini tamamlandı olarak işaretlediğinde (ya da siz **Şimdi çalıştır** düğmesine tıkladığınızda) çalışır. Host tarafı test komutunu sohbetin klasöründe, sohbetin korumalı alan moduyla çalıştırır (dsh’nin kendi `bash` aracı gibi: aynı dosya erişimi politikası; bu korumalı alan başlayamazsa test çalışmaz ve kontrol başarısız olur). Komutu bulmak için yalnızca `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` ve `pytest.ini` dosyalarını, klasörün içindeki normal dosyalar olarak okur (klasörün dışını gösteren sembolik bağlantılar ve FIFO’lar okunmaz). Sonra **Hedef kontrolü** için seçilen modele (varsayılan olarak sohbetin kendi modeline), araç içermeyen tek bir istek gönderir. İstekte şunlar vardır: hedef; hedef başladığından beri sohbet (mesajlarınız, ajanın yanıtları, 1.000 karaktere kısaltılmış araç çağrıları ve her araç sonucunun son 2.000 karakteri; akıl yürütme metni ve geri alınan adımlar yoktur; en çok yaklaşık 60.000 karakter, en yeni kısım); `git status --short` çıktısı ve test çıktısının sonu. Araç çıktısı ajanın okuduklarını içerebilir. Bu yüzden bu istek, sohbetin kendisi gibi, dosyalarınızın parçalarını içerebilir. Sohbete ve projeye hiçbir şey yazılmaz. Test komutunuz, sınırlar, son sonuç (çıktısının sonuyla) ve model seçimi `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` dosyasındadır (yalnızca sahibin erişebildiği dosya, en yeni 500 sohbet).
|
|
163
|
-
- **
|
|
170
|
+
- **Yeni sohbette devam et:** siz tıklayana kadar hiçbir şey çalışmaz. Sonra Host tarafı sohbeti (Hedef kontrolü'nün okuduğu gibi: akıl yürütme yok, geri alınan adımlar yok) sohbetin kendi modeline gönderir ve notu gösterir; yalnız **Yeni sohbet başlat** yeni bir sohbet açar. Projeye hiçbir şey yazılmaz.
|
|
171
|
+
- **Bağlam dökümü:** Host'ta yalnız sohbet günlüğünü okur; model çağrısı yapmaz, proje dosyası okumaz.
|
|
172
|
+
- **Görev panosu:** pano (görevlerinizin başlıkları, açıklamaları, etiketleri ve yorumları, proje klasörlerinin yolları ve kısa kimlikleri) `$DSH_HOME/storages/dsh-composer-plus/board.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya); anahtar, yanındaki `board-switch.json` dosyasındadır. Hiçbir şey bilgisayarınızdan çıkmaz ve hiçbir proje klasörüne bir şey yazılmaz. Pano araçları, panoya yazdıklarınızı ajanlara verir. Bu yüzden bir ajan bir görevi okuduğunda görevin metni sohbetin modeline ulaşır. Bozuk bir pano dosyası `board.json.broken-<time>` olarak saklanır ve pano boş başlar.
|
|
173
|
+
- **Korunan dosyalar:** liste ve anahtar `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her dosya aracı çağrısının yalnız yolunu (ve gerçek yolunu) okur, dosyanın kendisini okumaz.
|
|
174
|
+
- **Engellenen komutlar:** kurallar ve anahtar `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her `bash` ve `pwsh` çağrısının yalnız komut metnini okur; hiçbir şey çalıştırmaz ve hiçbir şey göndermez.
|
|
175
|
+
- **Proje hafızası:** siz açana kadar kapalıdır. Açıkken, üst düzey bir sohbetin her turu bittikten sonra Host tarafı, sohbetin son incelemeden bu yana gelen kendi yeni mesajlarını (sizin mesajlarınız ve ajanın metin yanıtları; araç çıktısı, akıl yürütme, gizli bağlam ve geri alınan mesajlar yok; çatallanmış bir sohbette üst sohbetten gelen kopya dışarıda kalır; en çok yaklaşık 16.000 karakter) ve kayıtlı notları, araç içermeyen tek bir istek olarak sohbetin kendi modeline gönderir. Notlar `$DSH_HOME/storages/dsh-composer-plus/memory/` altındaki Markdown dosyalarıdır (yalnız sahibinin erişebildiği dosyalar): her proje klasörü için `projects/<id>/` (`<id>`, klasörün gerçek yolunun bir özetidir; `project.json` klasörün yolunu yazar), `global/`, `journal.jsonl` (her değişiklik, öncesi ve sonrasındaki satırla) ve `reviewed.json` (her sohbetin nereye kadar okunduğu). Proje klasörüne hiçbir şey yazılmaz. Anahtar, token, parola ya da kimlik numarasına benzeyen notlar reddedilir. Bir projenin notları o klasördeki her yeni sohbetin sistem istemine girer, bu yüzden o sohbetin her isteğiyle modele gider. Anahtar, aynı yerdeki `memory.json` dosyasındadır. **Hafızayı aç**, siz **Değişiklikleri önizle** düğmesine basana kadar hiçbir şey göndermez; basınca gösterdiği notları ve metninizi araçsız tek bir istek olarak dsh’nin varsayılan modeline gönderir. Değişiklikler yalnız **Uygula** ile yazılır, günlükte `editor` olarak görünür. Tether notları aynı yoldan okur ve değiştirir.
|
|
164
176
|
- **Yedekleme:** hiçbir şey bilgisayarınızdan çıkmaz. Arşivler `~/Desktop/dsh-backups` klasörüne gider (yalnızca sahibin erişebildiği dosyalar). Gizli bilgiler arşivde yoktur: kimlik bilgisi dosyaları (`.credentials.yaml`, `.env`), anahtar dosyaları (`.pem`, `.key`, `.p12`, `.pfx`) ve yml dosyalarındaki token, secret, password ve API anahtarı ayarlarının değerleri maskelenir. Bunların gerçek kopyaları aynı klasördeki `composer-plus-vault/<archive>/` içinde (yalnızca sahibin erişebildiği), yalnızca bu bilgisayarda kalır. **Başka bir bilgisayar için** vault’u kopyalamaz: bu gizli bilgileri orada yeniden girin. Sohbet günlükleriniz, ayarlarınız ve dsh ana klasörünün geri kalanı arşivde olduğu gibi durur: klasörü, `$DSH_HOME` klasörünün kendisi gibi gizli tutun. Yedekleme, dosyaları `O_NOFOLLOW | O_NONBLOCK` ile okur. Sembolik bağlantı, bağlantı olarak saklanır (hiçbir zaman izlenmez); FIFO ve aygıt dosyaları atlanır. Otomatik yedekleme anahtarı ve ayarları `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json` dosyasında, kurtarma konsolu anahtarı `rescue-console.json` dosyasındadır. dsh çalışırken `running/host-<pid>.json` her dsh sürecini belirtir (kurtarma konsolu, bir geri yüklemeyi reddetmek için bu dosyaları okur).
|
|
165
177
|
- **Kurtarma konsolu:** bir terminal menüsüdür ve ağ portu açmaz. Geri yükleme yalnızca dsh ana klasörünün yanındaki yeni bir klasöre yazar (dosyalar `O_EXCL | O_NOFOLLOW` ile; sembolik bağlantılar en son ve hiçbir zaman izlenmeden yazılır). Güvenli olmayan bir ad (`..`, mutlak bir yol), aygıt dosyası ya da FIFO, birden çok üst klasör veya bir bağlantının altındaki bir öğe içeren arşivi reddeder.
|
|
166
178
|
|
|
@@ -182,7 +194,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
182
194
|
- **Bir sohbet satırında dal etiketi yok:** bu sürümü yüklediğinizden beri sohbette hiç tur olmadı, sohbetin klasörü bir git deposu değil ya da **Sohbet satırlarında Git dalı** kapalı. Bir güncellemeden sonra dsh’yi yeniden başlatın (dalı Host tarafı kaydeder).
|
|
183
195
|
- **Hedef kontrolü, testin 127 koduyla ya da "not found" ile çıktığını söylüyor:** Finder’dan veya Dock’tan başlatılan dsh’nin PATH’i terminalinizdekinden daha kısa olabilir. Bu yüzden dsh `npm`, `pnpm` veya `cargo` aracını bulamaz. dsh’yi bir terminalden başlatın ya da **Hedef kontrolü** → **Düzenle** içinde tam yolu olan kendi test komutunuzu belirleyin. **Şimdi çalıştır** sonucu hemen gösterir.
|
|
184
196
|
- **Hedef kapanmıyor ve ajan çalışmaya devam ediyor:** **Hedef kontrolü** başarısız bir test ya da eksik bir iş buldu. Hedefin altındaki satır nedenini gösterir (ayrıntılar için imleci sonucun üzerine getirin). Nedeni ya da test komutunu düzeltin veya hedefi `/goal` ya da hedef çubuğuyla kendiniz tamamlayın (bu tamamlama kontrol edilmez).
|
|
185
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.
|
|
197
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.18.0`) ve yukarıdaki kurulum notuna bakın.
|
|
186
198
|
- **Şimdi yedekle, "Başka bir yedekleme işlemi sürüyor" diyor:** başka bir dsh penceresinde ya da kurtarma konsolunda bir işlem çalışıyor (ikisi, yedek klasöründeki `.composer-plus.lock` kilit dosyasını paylaşır). İşlemin bitmesini bekleyin. Çalışan bir işlem yoksa, kapanmış bir sürecin kilidi bir sonraki tıklamada devralınır.
|
|
187
199
|
- **Kurtarma konsolu "dsh is running" diyor:** önce dsh’den çıkın. dsh gerçekten kapalıysa mesajda adı geçen dosya bir çökmeden kalmıştır: dosyayı silin ve yeniden deneyin.
|
|
188
200
|
- **Geri yüklemeden sonra dsh açılmıyor ya da bir eklenti eksik:** bir profilin eklenti paketlerinin yeniden yüklenmesi gerekir. Kurtarma konsolu bunu geri yüklemeden sonra önerir. Ya da konsolun listelediği, `$DSH_HOME/profiles/` altındaki her klasörde `pnpm install` komutunu çalıştırın. Vault’ta olmayan gizli bilgiler (başka bir bilgisayar) yeniden girilmelidir: konsol bunları listeler.
|
|
@@ -205,6 +217,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
205
217
|
- **Sohbet boyunca izin**, süre sınırını iznin verildiği andan başlayarak sayar. Yeni bir süre sınırı, geçerli izinlere hemen uygulanır. Bu yüzden daha kısa bir süre sınırı bu izinleri hemen bitirebilir. 1.12 ve önceki sürümlerden kalan izinlerin bir süresi yoktur: güncellemeden sonra ajan bu araçlar için bir kez daha sorar.
|
|
206
218
|
- **Mesaj alanında odağı koru**, odağı yalnızca bir `/` komutundan veya beceriden sonra geri verir. dsh komutu çözümlerken mesaj alanı birkaç milisaniye salt okunur kalır. Bu sürede basılan tuşlar kaybolur. dsh’nin `/` menüsü hâlâ açıksa `Enter` vurgulanan satırı seçer ve mesajı göndermez.
|
|
207
219
|
- **Soru kartını pencereye sığdır** yalnız dsh'nin soru kartını değiştirir, plan inceleme kartını değiştirmez. Kartı dsh'nin işaretlemesiyle bulur (`data-question-key`, `data-question-scroll`). Bir dsh güncellemesi bu işaretlemeyi değiştirirse kart dsh'nin çizdiği gibi görünür. Kartın yüksekliği sohbeti değil pencereyi izler: dar bir yan paneldeki sohbette uzun bir kart sohbetin üstüne taşabilir.
|
|
220
|
+
- **Sohbet başlığını pencereye sığdır**, dsh'nin sohbet başlığını dsh'nin ürettiği sınıf adlarıyla (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) bulur, çünkü dsh bunun için bir yerleşim kancası vermez. Bir dsh güncellemesi bu adları değiştirirse başlık dsh'nin çizdiği gibi görünür. Çok dar bir sohbet sütununda başlık iki ya da üç satır kaplayabilir, bu yüzden mesajların üstündeki alan azalır.
|
|
208
221
|
- **Mobil bağlantı** yalnızca macOS’ta çalışır (`en0`, `openssl`, `swift` ve `dns-sd` kullanır). Sabit 19390 ve 19391 portlarını kullanır. Bu yüzden her Mac’te aynı anda yalnızca bir dsh bu özelliği çalıştırabilir (her Mac, telefonun Mac listesinde bir girdidir). Telefon yalnızca Tether açıkken ya da arka plana yeni geçmişken bildirim alır (push hizmeti yoktur). Tether bu bildirimleri yalnızca Tether’de "Settings → Notifications → Send notifications" seçeneğini açtıktan sonra gönderir. Bu seçenek varsayılan olarak kapalıdır. iOS bildirim iznini, seçeneği açtığınızda ister. iOS uygulaması henüz App Store’da değildir: uygulamayı Xcode ile `tether/ios` klasöründen derleyin. "Tailscale only" açıkken de Mac’in bir Wi-Fi ya da Ethernet adresi olmalıdır (ağ geçidi yalnızca böyle bir adres varken başlar). Erişim günlüğü her Mac için ayrıdır ve yalnızca en yeni 200 denemeyi tutar. Bir dakika içinde tekrarlanan bir deneme yeni bir satır eklemez, aynı satırın sayısını bir artırır. Tether’in uygulama kilidi, iPhone kilit ekranındaki bildirim önizlemelerini gizlemez: bu önizlemeleri iOS Ayarları’ndan kapatın. Tether’daki yeşil noktalar Mac’i izler: dsh’de açtığınız sohbetin noktası telefonda da gider. Tether’da açtığınız sohbetin noktası yalnızca telefonlarda gider. dsh’nin Mac’teki kendi noktası, sohbeti orada açana kadar kalır.
|
|
209
222
|
- Oturum bağlantısı sohbetlerin içinde çalışır; bağlantıya tıklamak sohbeti açmaz. **Mesaj bağlantısını kopyala** ile alınan bağlantı, mesajını yalnızca dsh 0.2.1 ve sonrasında ve yalnızca bir sohbetteki mesajdan açar (dsh 0.2.0’da kullanıcı metni kuralları yoktur; orada bağlantı kopyalanır ama düz metin olarak görünür). Geri almanın çıkardığı ya da sıkıştırmanın dsh’nin yüklediği geçmişten sildiği bir mesaj gösterilemez: bağlantı bunu söyler. 🔗 düğmeleri dsh’nin mesaj satırlarına bağlanır. Bir dsh güncellemesi bu yapıyı değiştirirse düğmeler görünmez.
|
|
210
223
|
- **Tümünü okundu işaretle**, dsh’nin kendi okunmamış noktalarını dsh’nin herkese açık API olmayan bir parçasıyla değiştirir (dsh oturum durumundaki `completionUnread` listesi). Bir dsh güncellemesi bunun adını değiştirirse öğe görünmez. Öğe, dsh’nin proje "…" menüsüne eklenir. Bu menüde eklentiler için bir yuva yoktur. dsh bu menüyü değiştirirse öğe yine görünmez.
|
|
@@ -219,7 +232,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
219
232
|
- **Sohbet başına dal**: bir sohbetin dal klasörü (`<project>/.worktrees/<name>`) silinince (örneğin sohbetin kendi ajanı worktree'yi kaldırıp dalı silince) sohbetin bir sonraki adımı sohbeti bu klasörden çıkarır. Dal klasörünün projesi kenar çubuğundan kalkar; sohbet Gruplanmamış altında görünür ve açık kalır. dsh 0.2.1 ve sonrasında sohbet ana proje klasöründe devam eder ve model yeni klasörü bildiren bir not alır. dsh 0.2.0'da sohbet silinen klasörde kalır: orada çalışan bir komut, yeni bir sohbet başlatana kadar hata verir. Hiçbir sohbetin kullanmadığı, silinmiş bir dalın projesi de kenar çubuğundan kalkar: Composer Plus dal klasörlerini açılışta ve 30 saniyede bir denetler. Bunun için kenar çubuğu filtresi gerekmez. Bir sohbet taşınırken aynı depodaki **Yeni dal** "yeniden deneyin" yanıtını verir. Anahtar kapalıyken dsh'nin kendi hatası yine görünür ("working-directory: directory does not exist").
|
|
220
233
|
- **Çalışma alanı ağacında dallar** tıklama olmadan git’e yazar: bir sohbeti taşırken proje klasörünü önceki dalına geri alır (`git switch`) ve bir worktree ekler (`git worktree add`). Hiçbir dalı, worktree’yi veya dosyayı silmez. dsh bir sohbetin klasörünü değiştiremez. Bu yüzden taşınan sohbet bir kopyadır (dsh’nin kendi çatallaması, yeni bir kimlikle) ve eski sohbet arşivlenir. Kopya, durdurulan işe devam eder. Dal ortaya çıktığında çalışan araç çağrısı reddedilerek biter ve ajan onu yeni klasörde yeniden çalıştırır. Eski sohbetin hedefi kopyaya geçmez. Yalnızca klasörü deponun ana klasörü olan sohbet taşınır. Bu da yalnızca o turda oluşturup geçtiği dal için olur (`git switch -c`, `git checkout -b`). Yalnızca `git branch` ile yapılan dal, commit edilmemiş değişikliği olan klasör, bağlı bir worktree veya alt klasör hiçbir şeyi taşımaz. Ağaçta yalnızca doğrudan `<project>/.worktrees/` içinde olan ve dalı olan worktree’ler görünür. Ayrık (detached) bir worktree veya başka yerdeki bir worktree görünmez. Kopya, yalnızca eski sohbet açık olan sohbetse kendiliğinden açılır (eklenti bunu dsh’nin kenar çubuğu satırından okur). Aksi halde kopya dal projesindedir.
|
|
221
234
|
- **Sohbette bul** yalnızca sayfanın gösterdiği içerikte arar: yüklenmiş mesajlarda ve yanıtlarda arar (eskiler için yukarı kaydırın ya da **Öncekileri yükle** düğmesine tıklayın). Kapalı araç adımlarında ve bir aracın daraltılmış çıktısındaki metinde aramaz. En çok 2.000 eşleşme sayar (sonra "2000+" gösterir). Tarayıcının vurgulama API’sini kullanır (Chromium 105 ve sonrası; masaüstü uygulamasında vardır): daha eski bir tarayıcıda sayı ve eşleşmeler arası geçiş çalışır, ama renk görünmez. Mac’te `Cmd+F`, Windows ve Linux’ta `Ctrl+F` kutuyu yalnızca ekranda bir sohbet varken açar. Mac’te `Ctrl+F`, metin alanlarındaki macOS görevini korur (imleci bir karakter ileri alır). Başka yerlerde tarayıcının kendi arama özelliği eskisi gibi çalışır.
|
|
222
|
-
- **Boştayken bekleyen sohbeti aç** yalnızca dsh penceresinin gördüğü etkinliği bilir: başka bir uygulamadaki çalışma sayılmaz. Bu yüzden dsh arka plandayken bekleyen bir sohbeti 30 saniye sonra açabilir. dsh'yi öne getirmez. Tuşa basmadan, tıklamadan veya fareyi oynatmadan okumak boşta sayılır. Yalnızca dsh'nin turuncu noktasını
|
|
235
|
+
- **Boştayken bekleyen sohbeti aç** yalnızca dsh penceresinin gördüğü etkinliği bilir: başka bir uygulamadaki çalışma sayılmaz. Bu yüzden dsh arka plandayken bekleyen bir sohbeti 30 saniye sonra açabilir. dsh'yi öne getirmez. Tuşa basmadan, tıklamadan veya fareyi oynatmadan okumak boşta sayılır. Yalnızca dsh'nin turuncu noktasını (soru, onay veya plan incelemesi) ya da yeşil noktasını (henüz açmadığınız, biten bir tur) taşıyan sohbetlere bakar; bir alt ajanın isteği üst sohbetinde görünür. Önce turuncu sohbetler açılır. Yeşil bir sohbeti açmak noktasını kaldırır. Bu yüzden sonraki yeşil sohbetin 30 saniyesi, ancak bir sonraki tuş, tıklama, fare hareketi, kaydırma tekerleği veya dokunmadan sonra başlar: geri döndüğünüzde diğer yeşil noktalar yerinde durur. Bekleyen bir sohbet ekrandayken başka sohbet açılmaz; yanıt vermeden ayrıldığınız sohbet bir sonraki 30 saniyelik boşlukta yeniden açılabilir. 30 saniye değiştirilemez.
|
|
223
236
|
- Yeniden başlatmadan önce gönderilen bir bildirime tıklamak yalnızca dsh’yi öne getirir.
|
|
224
237
|
- Etkin projeler dsh’nin kayıtlı proje sırasıyla taşınır. Bu yüzden yeni sıra yeniden başlatmadan sonra korunur. Hiçbir projeye ait olmayan sohbetler ("Gruplanmamış") taşınamaz; dsh bunları her zaman en sonda listeler.
|
|
225
238
|
- dsh’nin kenar çubuğundaki görünüm seçenekleri menüsünde bir uzantı noktası yoktur. Bu yüzden yakın zamanda aktif proje seçeneği dsh’nin kendi menüsüne eklenir. Bir dsh güncellemesi bu menüyü değiştirirse seçenek görünmez ve tüm projeler görünür kalır. Filtre proje satırlarında çalışır, bu yüzden **Tek listede** görünümü süzülmez. **Çalışma alanı ağacı** görünümünde, içindeki bir proje etkin olduğu sürece üst klasör görünür kalır ve son 2 saatte etkin olmayan sohbet satırları da gizlenir; **Çalışma alanı** görünümünde yalnızca proje satırları süzülür. Filtre, dsh’nin hangi görünümü gösterdiğini dsh’nin kaydettiği görünüm ayarından okur (herkese açık API değildir); bir dsh güncellemesi bunun adını değiştirirse **Çalışma alanı ağacı**, **Çalışma alanı** gibi süzülür. Proje durumu özelliği de aynı ayarı okur: **Çalışma alanı ağacı** görünümünde üst klasörün satırı, içindeki projelerin sohbetlerini de sayar; bir dsh güncellemesi ayarın adını değiştirirse her satır yalnızca kendi sohbetlerini gösterir. **Duruma göre** seçeneğinin de aynı türde bir sınırı vardır: dsh’de sıralama için bir yuva yoktur. Bu yüzden seçenek ve satır sırası dsh’nin menü ve liste yapısına bağlanır.
|
|
@@ -228,10 +241,16 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
228
241
|
- dsh’de **Yeni oturum** düğmesinin nerede açılacağını seçen bir uzantı noktası da yoktur. **Yeni oturum için varsayılan çalışma alanı**, dsh’nin herkese açık API’si olmayan bir yöntemini (dsh çalışma alanı hizmetinin `startSession` yöntemi) sarar. Bir dsh güncellemesi bu adı değiştirirse **Yeni oturum**, dsh’nin seçtiği yerde (açık ya da son proje) açılır. Proje belirtmeyen her çağrı varsayılanı kullanır: kenar çubuğu düğmesi, kısayolu, logo ve **Otomasyon görevleri** sayfasındaki **Yeni** düğmesi. dsh açılırken son sohbeti yine açar. Genel klasör ilk kullanımda oluşturulur ve projelerinize eklenir. Windows ya da Linux’ta Documents klasörü taşındıysa bu klasör, dsh’nin kendi klasöründen farklı olabilir.
|
|
229
242
|
- dsh’de mesaj alanı ipucu için de bir uzantı noktası yoktur. Bu yüzden **Sonraki mesaj tahmini** metni, dsh’nin kendi yer tutucu metninin (`[data-composer-placeholder]`) üstüne yerleşir. Bir dsh güncellemesi bu yapıyı değiştirirse tahmin görünmez. Özellik açıkken biten her tur, kısa bir model çağrısı yapar.
|
|
230
243
|
- **Yazarken tamamla**, metnini dsh’nin kendi mesaj alanı ipucuyla gösterir (dsh’nin eğik çizgi komutlarının parametre ipucu için kullandığı `--dsh-composer-hint` stili). Eğik çizgi komutunda, dosya veya sembol etiketi olan bir mesajda ya da imleç mesajın sonunda değilken çalışmaz. Bir dsh güncellemesi bu stili değiştirirse tamamlama görünmez. Yazarken her duraklamada bir model çağrısı yapılır.
|
|
231
|
-
- **İstemi iyileştir** yalnızca kısa bir proje özetini, değişen yolları ve adı sözcüklerinizle eşleşen yolları görür: kodun kendisini görmez. Bu yüzden doğru dosyayı kaçırabilir ve yalnızca kendisine verilen yolların adını yazar. Yeni metni göndermeden önce okuyun.
|
|
232
|
-
- **Hedef kontrolü** yalnızca ajanın otomatik bir hedef turunda yaptığı tamamlamayı kontrol eder: sohbette sizin istediğiniz bir tamamlama, `/goal` ve hedef çubuğu kontrol edilmez. Ajan testleri ya da test komutunun dosyalarını kendisi değiştirebilir. Doğrulayıcı sohbeti okur ve bunu görebilir, ama iki yönde de yanılabilir (yanlış bir "tamamlanmadı" bir tur daha harcar; yanlış bir "tamamlandı" hedefi kapatır). Doğrulayıcı sohbeti ve `git status` çıktısını görür, kodun kendisini görmez. Bir test çalıştırması yalnızca ajanın dosya değiştirebilen en yeni adımı, aynı klasörde tam olarak aynı komutun ajanın kendi başarılı `bash` çalıştırmasıysa yeniden kullanılır. Kanal (`| tail`) ya da `&&` içeren bir komut yeniden kullanılmaz. Bütçe bir tur bittiğinde ölçülür. Bu yüzden tek bir tur bütçeyi aşabilir.
|
|
244
|
+
- **İstemi iyileştir** yalnızca kısa bir proje özetini, değişen yolları ve adı sözcüklerinizle eşleşen yolları görür: kodun kendisini görmez. Bu yüzden doğru dosyayı kaçırabilir ve yalnızca kendisine verilen yolların adını yazar. Yeni metni göndermeden önce okuyun. `/goal <hedef>` dışındaki bir eğik çizgi komutunda, bir `/goal` kontrol sözcüğünde (`clear`, `pause`, `resume`) veya dosya ya da sembol etiketi olan bir mesajda çalışmaz (yeni metin düz metindir, bu yüzden etiket kaybolurdu). Bir `/goal` hedefinde koşulları yalnız taslaktan ve bağlamdan yazar. Fazla katı bir koşul hedef turlarını harcayabilir, bu yüzden göndermeden önce okuyun. Bir mesaj en çok 8.000 karakter olabilir. Görseller ekli kalır: yalnızca metin değişir. Her tıklama bir model çağrısı yapar. Güçlü bir model bir dakika sürebilir (`Esc` iptal eder).
|
|
245
|
+
- **Hedef kontrolü** yalnızca ajanın otomatik bir hedef turunda yaptığı tamamlamayı kontrol eder: sohbette sizin istediğiniz bir tamamlama, `/goal` ve hedef çubuğu kontrol edilmez. Ajan testleri ya da test komutunun dosyalarını kendisi değiştirebilir. Doğrulayıcı sohbeti okur ve bunu görebilir, ama iki yönde de yanılabilir (yanlış bir "tamamlanmadı" bir tur daha harcar; yanlış bir "tamamlandı" hedefi kapatır). Doğrulayıcı sohbeti ve `git status` çıktısını görür, kodun kendisini görmez. Bir test çalıştırması yalnızca ajanın dosya değiştirebilen en yeni adımı, aynı klasörde tam olarak aynı komutun ajanın kendi başarılı `bash` çalıştırmasıysa yeniden kullanılır. Kanal (`| tail`) ya da `&&` içeren bir komut yeniden kullanılmaz. Bütçe bir tur bittiğinde ölçülür. Bu yüzden tek bir tur bütçeyi aşabilir. Token bütçesi sohbetin alt ajan sohbetlerinin çağrılarını da sayar (her tur sonunda kayıtlı günlüklerinden okunur, bu yüzden çok alt ajanı olan bir sohbetin kontrolü biraz daha uzun sürer). Kanıt tablosu doğrulayıcının sohbeti kendi okumasından gelir: doğrulandı dediği bir parçaya, önemliyse siz de bakın. Kontrol çalışırken `update_goal` bekler (test en çok 15 dakika, doğrulayıcı en çok 3 dakika). Dallandırılmış bir sohbet yeni bir sohbet kimliği alır. Bu yüzden üst sohbetin kendi test komutu ve sınırları olmadan başlar. Doğrulayıcıya ulaşan her tamamlama bir model çağrısı yapar.
|
|
246
|
+
- **Korunan dosyalar** bir korkuluktur, korumalı alan değildir. dsh'nin kendi dosya araçlarını kapsar (`read`, `read_image`, bir dosyada `grep`, `write`, `edit`, `str_replace_editor`). Bir kabuk komutu (`cat .env`), ajanın yazdığı bir betik, bir alt ajanın kabuğu, bir MCP aracı, bir `glob` listesi ve bütün bir klasörde `grep` korumalı bir dosyaya yine erişebilir. Gerçek bir sınır için dsh'nin korumalı alan modlarını kullanın ya da gizli bilgileri proje klasörünün dışında tutun. Desenler `*`, `**` ve `?` bilir, `{a,b}` ya da `[ab]` bilmez ve büyük-küçük harf farkını yok sayar.
|
|
247
|
+
- **Engellenen komutlar** bir korkuluktur, korumalı alan değildir. Yalnız dsh’nin `bash` ve `pwsh` araçlarının komut metnini okur. Komutu adlandıran bir değişken ya da takma ad (`CMD=npm; $CMD publish`), bir kabuk fonksiyonu, ajanın yazdığı bir betik dosyası, başka bir program (`python -c`, `node -e`, `make`), bir MCP aracı ve kendi terminaliniz komutu yine çalıştırabilir. Bir kural, istediğinizden fazlasıyla eşleşebilir: bir komutun her sözcüğü komut adı olabilir (`echo npm publish`, `npm publish` ile eşleşir) ve kuralın sözcükleri arasında başka sözcükler olabilir (`git push --force`, `git push origin main --force` ile de eşleşir). Bir kural fazla eşleşiyorsa onu uzatın. **önce sor** için sorabilen bir sohbet gerekir: onay politikası never olan bir sohbette (örneğin görev verilmiş bir alt ajan) dsh kartı gösteremez, bu yüzden çağrı nedeniyle birlikte reddedilir. Onay kartı nedeni İngilizce gösterir. **Sohbet boyunca izin** bir **önce sor** kartını yanıtlamaz.
|
|
248
|
+
- **Yeni sohbette devam et** sohbeti (mesajlar, araç çağrıları ve her araç sonucunun sonu; en çok yaklaşık 60.000 karakter, en yeni kısım) sohbetin kendi modeline gönderir. Not bir kararı ya da dosyayı atlayabilir: başlatmadan önce okuyun. Yeni sohbet yalnız notu ve bağlantılı sohbeti bilir (dsh eski sohbeti salt okunur bağlam olarak ekler); model bağlamı küçük başlar, eski sohbet olduğu gibi kalır. Her sohbet için aynı anda tek not ya da başlatma çalışır.
|
|
249
|
+
- **Bağlam dökümü** dsh'nin kendi kuralıyla tahmin gösterir (token başına yaklaşık 4 karakter), dsh'nin bağlam halkasıyla aynı kural; modelin kendi sayımı farklı olabilir. Araç tanımları en yeni isteğinkilerdir. Bağlamı sohbet günlüğündeki hâliyle gösterir; şu anda çalışan bir tur bir sonraki adımından sonra görünür.
|
|
250
|
+
- **Planlı adımlar** yalnız model plan yaptığında token kazandırır: açıkken her istek `plan_next_steps` aracını ve kısa bir talimatı (yaklaşık 500 token) taşır; modelin hiç plan yapmadığı sohbetlerde de. Koşul yalnız yazdığını kanıtlar (örneğin: derlemenin çıkış kodu 0 oldu); işin doğru olduğunu kanıtlamaz. `ok`, dsh'nin kendi sonuç işaretlerini okur (`[exit code: N]`, zaman aşımı, sandbox reddi); sıfırdan farklı çıkış kodu vermeden başarısız olan bir komut geçmiş sayılır. Adımlar tek tek çalışır; aynı anda hazır olan iki adım modele geri döner. Adımın mesajı, sohbetin modelinin bir asistan mesajı olarak kaydedilir (dsh'de bir eklentinin yazdığı mesaj için işaret yok); bu yüzden metni, adımı Composer Plus'ın çalıştırdığını söyler. Tether'de yok.
|
|
251
|
+
- **Görev panosu** yalnız dsh'nin projelerini bilir: proje dışındaki bir sohbette **Tüm projeler** görünür ve sohbet başına dal klasörü (`<project>/.worktrees/<name>`) kendi projesinden sayılır. Proje kimlikleri (`acme#12`) klasör adından gelir ve projeyi dsh'de yeniden adlandırdığınızda değişmez. "Panoyu güncel tut" kuralı bir sohbete yalnız projesinin açık görevleri varsa eklenir; kuralı almış bir sohbet onu korur. Ajanlara **Bitti**, **Bekleyenler** ve insan görevlerini size bırakmaları söylenir, ama araçlar bunu reddetmez: bir ajan böyle bir kartı yine de taşıyabilir. Özellik açıkken pano araçları her sohbetin araç listesindedir (istek başına yaklaşık 1.000 token); panoyu kullanmıyorsanız özelliği kapatın. Sayfa görünürken panoyu 2 saniyede bir okur; bir ajanın değişikliği bu süre içinde görünür. Bir ajan aynı alanı değiştirirken düzenlediğiniz metin kaydedilmez: panel yeni metni ve nedenini gösterir. Görsel, bilgisayarlar arasında git eşitlemesi ve ağ üzerinden paylaşım yoktur (Kanzo'da bunlar vardır). Fikir ve görünüm emanuele-em'in [Kanzo](https://github.com/emanuele-em/kanzo) projesinden gelir (AGPL-3.0); Composer Plus onun kodunu kullanmaz.
|
|
233
252
|
- **Durdurduktan sonra gönderilen önce gider** yalnız sohbeti durdurduktan sonra çalışır (ya da bir tur hata verdikten sonra veya hâlâ kuyruğu olan bir sohbeti açtığınızda): bir tur çalışırken gönderdiğiniz mesaj yine kuyruğun sonunda bekler. Mesaj yalnız sizin kuyruktaki mesajlarınızın önüne geçer: kuyrukta bir hedef turu ya da bir soru yanıtı bekliyorsa dsh’nin kendi sırası kalır. dsh’nin herkese açık API olmayan bir bölümünü okur (durdurulan turun hâlâ bitip bitmediğini); bir dsh güncellemesi bunun adını değiştirirse mesaj, o tur bittikten sonra öne alınır. Alt ajan sohbetleri dsh’nin kendi sırasını korur.
|
|
234
|
-
- **Proje hafızası** sohbetin ilk klasörüne (dsh'nin proje klasörüne) aittir: klasörünü `cd` ile değiştiren bir sohbet ilk projesinin hafızasını kullanmaya devam eder; aynı klasör aynı dosyalara giden başka bir yoldan açılırsa hafızayı paylaşır. Bir sohbet, başladığında hafıza bölümünü dondurur; bu yüzden sonra kaydedilen bir not bir sonraki sohbette görünür (`memory_recall` onu hemen bulur). İnceleme yalnız modelin saklamaya karar verdiği şeyi saklar: bir olguyu kaçırabilir ya da yanlış bir şeyi saklayabilir.
|
|
253
|
+
- **Proje hafızası** sohbetin ilk klasörüne (dsh'nin proje klasörüne) aittir: klasörünü `cd` ile değiştiren bir sohbet ilk projesinin hafızasını kullanmaya devam eder; aynı klasör aynı dosyalara giden başka bir yoldan açılırsa hafızayı paylaşır. Bir sohbet, başladığında hafıza bölümünü dondurur; bu yüzden sonra kaydedilen bir not bir sonraki sohbette görünür (`memory_recall` onu hemen bulur). İnceleme yalnız modelin saklamaya karar verdiği şeyi saklar: bir olguyu kaçırabilir ya da yanlış bir şeyi saklayabilir. Notları **Hafızayı aç** içinde kontrol edip orada değiştirin ya da dsh kapalıyken dosyaları elle düzenleyin. **Hafızayı aç**, seçili projenin notlarını ve genel notları (Tüm notlar seçiliyse bütün projeleri; en çok yaklaşık 60.000 karakter, kalanı yalnız sayılır ve o istekte değişemez) ve yazdığınız metni sohbetin modeline değil, dsh’nin varsayılan modeline gönderir. Önizleme Mac’te 30 dakika ve dsh yeniden başlayana kadar tutulur; bu arada bir inceleme ya da ajan notları değiştirirse **Uygula** reddeder ve yeniden önizlersiniz. **Uygula** bir önizlemenin ya bütün değişikliklerini ya hiçbirini kaydeder: bir değişiklik kaydedilemezse (örneğin MEMORY.md doluysa) notlar olduğu gibi kalır ve nedeni görünür. Sizden bir mesaj içeren her bitmiş tur bir model çağrısına mal olur; başarısız bir çağrı, sonraki turdan sonra aynı mesajları yeniden okur. Alt ajan sohbetleri incelenmez. Fikir ve dosya biçimi [DS Bot](https://github.com/Fei2411/DS-Bot) projesinden gelir (Apache-2.0); Composer Plus onun kodunu kullanmaz ve DS Bot'un kendi hafızasını hiçbir zaman okumaz ya da yazmaz.
|
|
235
254
|
- **Yedekleme** tek ve sabit bir klasör kullanır: `~/Desktop/dsh-backups` (dsh-backup’ın varsayılan klasörü; böylece onun arşivleri kullanılabilir kalır). Başka bir klasör için ayar yoktur. Bir arşiv, `cache/` ve `dsh-runtimes/` olmadan dsh ana klasörü kadar büyüktür (ölçüm: Apple Silicon’da 1,6 GB dosya, yaklaşık 30 sn’de 830 MB’lık bir arşiv oldu; dsh bu sırada yanıt vermeye devam etti). Okunurken değişen bir dosya, yedeklemenin onu açtığı andaki hâliyle saklanır. Bu yüzden açık bir sohbetin günlüğü kesik bir kayıtla bitebilir; dsh bunu bir sonraki yazmada onarır. Maskeleme, yml dosyasındaki bir gizli bilgiyi tek satırdaki anahtar adından bulur (`token:`, `apiKey:`, …). Akış eşlemindeki (`{token: x}`), böyle bir anahtarın altındaki bir listedeki, bir JSON dosyasındaki (örneğin bir `.json` dosyasındaki bir MCP sunucusunun `apiKey` değeri) ya da başka bir ad altındaki gizli bilgi arşivde kalır. dsh-backup’ın türe göre aldığı arşivler (`dsh-t-…`) listelenmez. **Başka bir bilgisayar için** arşivi kopyalar (APFS’te bir klon: ek yer kaplamaz); vault onunla gitmez. **Şimdi yedekle** hiçbir yedeği silmez. Otomatik yedekleme, Composer Plus’ın aldığı en yeni yedekleri tutar (**Otomatik yedekleme** içindeki **Sakla** ayarı) ve kendi aldığı daha eski yedekleri siler. Yükseltme öncesi anlık görüntüler ayrı sayılır (en yeni 2 tanesi kalır). dsh-backup’ın arşivleri hiçbir zaman silinmez: onları **Sil** ile kaldırın. dsh-backup hâlâ yüklüyse Composer Plus arşivlerini kendi saklama sayısına katar ve onları silebilir.
|
|
236
255
|
- **Geri yükleme:** yalnızca kurtarma konsolunda, dsh kapalıyken çalışır ve dsh ana klasörünün tamamını değiştirir. Eski klasör, siz silene kadar yanında `.dsh.pre-restore-<time>` olarak kalır. Bu yüzden diskte ikisine de yer olmalıdır. Sohbetler proje yollarını korur: başka bir bilgisayarda, başka bir yoldaki proje, siz onu yeniden ekleyene kadar eksik görünür. dsh ana klasörünün dışını gösteren sembolik bağlantılar (örneğin başka bir klasörden bağlanan beceriler) bağlantı olarak geri gelir; hedefleri o bilgisayarda bulunmalıdır.
|
|
237
256
|
- **Oturum günlüğü kontrolü** her sohbetin en yeni günlüğünü, dsh’nin neyin açılacağına dair kendi kurallarıyla okur: JSON olmayan ya da sırası bozuk bir satır, yalnızca ondan sonra bir tur sonu geliyorsa hasar sayılır (gelmiyorsa dsh sohbeti o satır ve sonrası olmadan açar, bu yüzden sohbet listelenmez). Günlüğün olaylarını dsh’nin kendi olay kurallarına göre kontrol etmez. Bu yüzden sağlam dediği bir günlük, bir dsh yükseltmesinden sonra yine de açılmayabilir. Onarım, kopyayı bir yedekten alır: o yedekten sonraki mesajlar o sohbetten kaybolur (hasarlı dosya yanında kalır). Bu dsh’de açık olan bir sohbet Ayarlar’da onarılmaz: dsh onu tutar.
|
|
@@ -264,7 +283,9 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
264
283
|
|
|
265
284
|
**Ajanın kendi işini kendi başına bitti diye işaretlemesi, loop engineering’deki doğrulayıcı döngüleri gibi engellenebilir mi?** Evet, **Hedef kontrolü** ile (varsayılan olarak açık): `/goal` ile bir hedef başlatın. Ajan hedefin tamamlandığını söylediğinde projenin testleri çalışır ve bağımsız bir model çağrısı hedefi sohbete göre kontrol eder. Biri başarısız olursa hedef açık kalır ve ajan nedenini okur. Kendi test komutunuzu, bir süre sınırını ya da bir token sınırını hedefin altındaki **Hedef kontrolü** satırında **Düzenle** ile belirleyin.
|
|
266
285
|
|
|
267
|
-
**Ajan, DS Bot'un hafızası gibi tercihlerimi sohbetler arasında hatırlayabilir mi?** Evet, **Proje hafızası** ile (varsayılan olarak kapalı): **Ayarlar → Composer Plus** içinden açın. Her turdan sonra kalıcı tercihleriniz ve kararlarınız, sohbetin projesi için kısa notlar olarak saklanır; o projedeki her yeni sohbet bunları okur. Ajandan bir şeyi hatırlamasını isterseniz onu hemen kaydeder.
|
|
286
|
+
**Ajan, DS Bot'un hafızası gibi tercihlerimi sohbetler arasında hatırlayabilir mi?** Evet, **Proje hafızası** ile (varsayılan olarak kapalı): **Ayarlar → Composer Plus** içinden açın. Her turdan sonra kalıcı tercihleriniz ve kararlarınız, sohbetin projesi için kısa notlar olarak saklanır; o projedeki her yeni sohbet bunları okur. Ajandan bir şeyi hatırlamasını isterseniz onu hemen kaydeder. Notları görmek ya da değiştirmek için aynı satırdaki **Hafızayı aç** düğmesine basın ve neyin değişeceğini yazın.
|
|
287
|
+
|
|
288
|
+
**Ajanlarım ve ben, Kanzo'daki gibi tek bir görev panosunu paylaşabilir miyiz?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın ve **Yeni görev** ile görev ekleyin. Bir sohbette ajandan "panodaki sonraki görevi al" isteyin: ajan kartı **Yapılıyor** sütununa taşır, yaptığı işi yorum olarak yazar ve kartı **İncelemede** sütununa taşır. Bir görevi kendinize ayırmak için onu **İnsan** olarak işaretleyin.
|
|
268
289
|
|
|
269
290
|
**dsh, dsh-backup gibi sohbetlerimi ve ayarlarımı yedekleyebilir mi?** Evet: **Ayarlar → Composer Plus → Yedekleme → Şimdi yedekle**. Aynı arşiv biçimini aynı klasöre (`~/Desktop/dsh-backups`) yazar. Bu yüzden dsh-backup’ın arşivleri de görünür ve geri yüklenebilir; dsh-backup’ı kaldırabilirsiniz. Zamanlanmış yedekleme için **Otomatik yedekleme** ayarını açın.
|
|
270
291
|
|
|
@@ -290,6 +311,8 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
290
311
|
|
|
291
312
|
**Yalnızca bir sohbetin değiştirdiği dosyaları nasıl görürüm?** Sağ kenar çubuğu → **Değişiklikler** → **Bu sohbet**. Yalnızca boşluk olan değişiklikleri gizlemek için **␣** düğmesine tıklayın.
|
|
292
313
|
|
|
314
|
+
**Ajanın `npm publish` ya da `git push --force` çalıştırmasını nasıl engellerim?** **Ayarlar → Composer Plus → Engellenen komutlar**: `npm publish` yazın, **engelle** ya da **önce sor** seçin, sonra **Ekle** düğmesine tıklayın. **engelle** komutu reddeder ve ajan size sorar; **önce sor** her seferinde onay kartını gösterir. Korunan dosyalar ajanın dosya araçlarını kapsar; Engellenen komutlar ise kabuk komutlarını kapsar.
|
|
315
|
+
|
|
293
316
|
**Otomatik inceleme’nin tek bir sohbette aynı araç için tekrar sormasını nasıl durdururum?** Onay kartında **Bu sohbet boyunca izin ver** düğmesine tıklayın. Bu izin yalnızca o sohbetteki o aracı kapsar ve varsayılan olarak 1 saat sürer. İzni başlıktaki etiketten kaldırın. Süreyi **Ayarlar → Composer Plus → Sohbet boyunca izin** içinden değiştirin.
|
|
294
317
|
|
|
295
318
|
**iPhone’umu kaybettim. Mac’ime erişmesini nasıl engellerim?** Kenar çubuğunun sol altındaki **Mobil bağlantı** düğmesine tıklayın, sonra o iPhone’un yanındaki **Remove** düğmesine tıklayın. iPhone’un anahtarı hemen geçersiz olur. iPhone, ancak sizin Mac’te onayladığınız yeni bir eşleştirmeyle yeniden bağlanabilir.
|
|
@@ -304,7 +327,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
304
327
|
|
|
305
328
|
**Bir dsh görevi bittiğinde veya onay beklediğinde macOS / Windows bildirimlerini nasıl alırım?** **Arka plan bildirimleri** özelliğini açık tutun (varsayılan) ve işletim sistemi ayarlarında DeepSeek Harness için bildirimlere izin verin.
|
|
306
329
|
|
|
307
|
-
**dsh bana soru soran sohbeti kendiliğinden açabilir mi?** Evet, **Boştayken bekleyen sohbeti aç** ile (varsayılan olarak açık): bir sohbet yanıt, onay veya plan incelemesi beklerken dsh'yi 30 saniye kullanmazsanız dsh o sohbeti açar. Yazarken, kaydırırken veya fareyi oynatırken bekler.
|
|
330
|
+
**dsh bana soru soran sohbeti kendiliğinden açabilir mi?** Evet, **Boştayken bekleyen sohbeti aç** ile (varsayılan olarak açık): bir sohbet yanıt, onay veya plan incelemesi beklerken dsh'yi 30 saniye kullanmazsanız dsh o sohbeti açar. Henüz okumadığınız bir turu biten sohbet (yeşil nokta) de aynı biçimde, turuncu sohbetlerden sonra açılır. Yazarken, kaydırırken veya fareyi oynatırken bekler.
|
|
308
331
|
|
|
309
332
|
**DeepSeek Harness arayüzünü Türkçe, İspanyolca, Japonca… diline nasıl geçiririm?** Ayarlar → Composer Plus → **Uygulama dili**.
|
|
310
333
|
|
|
@@ -318,6 +341,8 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
318
341
|
|
|
319
342
|
**iPhone’umdan fotoğraf gönderebilir miyim?** Evet. Tether’deki bir sohbette mesaj alanının yanındaki **+** düğmesine dokunun → Camera, Photos (en çok 4) ya da Paste image. Fotoğraflar, mesajınızın ekleri olarak Mac’teki sohbete gider. Bu yüzden model onları görür.
|
|
320
343
|
|
|
344
|
+
**dsh, modele yeniden sormadan sonraki komutu çalıştırabilir mi?** Evet, **Planlı adımlar** ile (varsayılan olarak kapalı): Ayarlar → Composer Plus içinden açın. Model sonraki komutlarını bir koşulla planlayabilir, örneğin "derleme geçince testleri çalıştır"; sonuç koşulu karşılarsa Composer Plus adımı yeni bir model çağrısı yapmadan çalıştırır. Onaylar ve sandbox olduğu gibi kalır.
|
|
345
|
+
|
|
321
346
|
**Masaüstü uygulamasıyla çalışır mı?** Evet: Ayarlar → Eklentiler → **Eklenti ekle** → `dsh-composer-plus`. dsh 0.2.0-rc.2 (masaüstü ve web) ve 0.2.1-rc.2 (web) üzerinde test edildi.
|
|
322
347
|
|
|
323
348
|
## Geliştirme
|
|
@@ -343,6 +368,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
|
343
368
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
344
369
|
# Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
|
|
345
370
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
|
|
371
|
+
# Fit chat header to window (fake model, subagent + background jobs, branch pill, grants chip): no overlap from 1280 to 320 px, wide header unchanged + its thumbnail
|
|
372
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-header-fit.mjs /path/to/dsh/lib/bin.js
|
|
346
373
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
347
374
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
348
375
|
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
@@ -380,6 +407,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
380
407
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
381
408
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
382
409
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
410
|
+
# Task board: the page, the agent tools (fake model), drag and drop, search, the switch
|
|
411
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
383
412
|
```
|
|
384
413
|
|
|
385
414
|
```sh
|