dsh-composer-plus 1.14.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +69 -16
- package/README.es.md +69 -16
- package/README.fr.md +69 -16
- package/README.hi.md +69 -16
- package/README.id.md +69 -16
- package/README.ja.md +69 -16
- package/README.ko.md +69 -16
- package/README.md +69 -16
- package/README.pt-BR.md +69 -16
- package/README.ru.md +69 -16
- package/README.tr.md +69 -16
- package/README.vi.md +69 -16
- package/README.zh.md +69 -16
- package/assets/features/autoBackup.webp +0 -0
- package/assets/features/backup.webp +0 -0
- package/assets/features/branchTree.webp +0 -0
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/idleSwitch.webp +0 -0
- package/assets/features/projectMemory.webp +0 -0
- package/assets/features/questionFit.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/assets/features/rescueConsole.webp +0 -0
- package/assets/features/sessionDoctor.webp +0 -0
- package/assets/features/stopSendFirst.webp +0 -0
- package/backup.mjs +1069 -0
- package/client.js +1278 -182
- package/index.js +1602 -37
- package/package.json +3 -2
- package/tether/gateway/server.mjs +1 -1
package/README.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.16.0`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
37
37
|
|
|
38
38
|
| Özellik | Nasıl kullanılır | Ekran görüntüsü |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Değişiklikler paneli** | <a id="feature-changespanel"></a>Sağ kenar çubuğu → `+` → **Değişiklikler**.
|
|
40
|
+
| **Değişiklikler paneli** | <a id="feature-changespanel"></a>Sağ kenar çubuğu → `+` → **Değişiklikler**. Sayfa **Ağaç** görünümünde açılır: sohbetin deposunun dal haritası. Üç kart dalları sayar: tüm dallar, birleştirilen dallar ve birleştirilmeyi bekleyen dallar. Yalnızca o dalları göstermek için bir karta tıklayın. Tüm dalları yeniden göstermek için karta yeniden tıklayın. Her dal, son commit’ini gösteren bir kutudur: ana dal bu dalın işini içeriyorsa yeşil, içermiyorsa turuncu, ana dalın kendisi ise mavidir. Her daldan bir ok, o dalı alan dala (✅ **Birleştirildi**) ya da dalın başladığı dala (⏳ **Bekliyor**, kesikli) gider. Dalın commit’lerini görmek için bir kutuya tıklayın. Sonra dosyalarını ve farklarını görmek için bir commit’e tıklayın. Birleştirme commit’inin dosyalarını görmek için **Birleştirildi** etiketine, dalın hedefine getirdiği dosyaları görmek için **Bekliyor** etiketine tıklayın. Uzak bir dal, yalnızca aynı adlı bir yerel dal yoksa görünür. Değişen dosyaları `+/-` sayılarıyla görmek için mod menüsünden **Commit edilmemiş**, **Hazırlanmamış**, **Hazırlanmış** veya **Dal** seçin. Farkını görmek için bir dosyaya tıklayın. **Son tur**, dsh’nin son tur için kendi incelemesini açar. **Bu sohbet**, yalnızca açık sohbetin dosya araçlarının (write, edit) tüm turlarda yazdığı dosyaları ve ilk mesajdan bu yana toplam farkını listeler. **␣** düğmesi boşluk değişikliklerini gizler (`git diff -w`): yalnızca girintisi ya da satır sonu değişen satırlar görünmez. Bir dosyanın **…** menüsü → **Bu dosyayı değiştiren sohbetler**, aynı depoda yazma veya düzenleme araçlarıyla o dosyayı değiştiren sohbetleri, en yenisi üstte olacak biçimde ve değişikliği yapan istekle birlikte listeler. Bir sohbete tıklayınca sohbet o istekte açılır. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Ekran görüntüsü: Değişiklikler paneli"></a> |
|
|
41
41
|
| **Özellik fikirleri** | <a id="feature-featureideas"></a>Sağ kenar çubuğu → `+` → **Özellik fikirleri** → **Özellik öner**. Sohbetin kendi modeli, sohbetin projesinin kısa bir özetini okur (üst düzey dosyalar, README ve manifest dosyasının başı, README’nin geri kalanının ana hatları, son commit’lerin başlıkları). Sonra en çok 8 özellik önerir. Öneriler, dsh’nin arayüz dilinde bir kart destesi olarak görünür. Aynı projede yeni bir sohbet başlatmak için kartı sağa kaydırın (ya da **✓** düğmesine tıklayın veya `→` tuşuna basın; her durumda kart kendi tarafına uçar). Yeni sohbet plan modunda başlar ve fikri istek olarak alır. Bu yüzden siz planı onaylamadan hiçbir şey değişmez. Planı atlamak için **▶ Hemen uygula** düğmesine tıklayın (ya da `↑` tuşuna basın; kart yukarı uçar). Yeni sohbet, fikri sıradan bir istek olarak alıp hemen başlar. Model değişikliği yapar ve kontrollerini çalıştırır (onaylar her zamanki gibi uygulanır). Atlamak için sola kaydırın (ya da **✕** veya `←`). **Geri al** (ya da `Z`) atlanan kartı geri getirir. İyi bir fikri sonraya saklamak için **↓** düğmesine tıklayın (ya da `↓` tuşuna basın). Fikir projenin **Sonra** listesine gider. Aynı proje klasöründeki her sohbet bu listeyi gösterir (yeniden başlatmadan sonra da). **Sonra (N)** listeyi açar. **Planla**, fikir için aynı plan modu sohbetini başlatır. **Hemen uygula** ise sohbeti plan olmadan başlatır. İkisi de fikri listeden çıkarır. **Tümünü tek planda başlat (N)**, listedeki bütün fikirler için tek bir plan modu sohbeti başlatır. Böylece ortak kısımlar yalnızca bir kez planlanır. **Listeden kaldır** fikri siler. **Yapılacaklar listesi olarak kopyala**, bütün listeyi bir sorun takip aracı ya da TODO dosyası için Markdown yapılacaklar listesi olarak panoya kopyalar (`- [ ] Title — Summary`, her fikir için bir satır). Bu işlem ağ isteği yapmaz. Bir fikirdeki **GitHub’da issue aç**, projenin GitHub deposunda fikrin başlığı ve özetiyle (ve neden önemli olduğuyla) bir issue açar; bunun için sizin GitHub CLI (`gh`) oturumunuz kullanılır. Sonra fikrin yanında **Issue #N** bağlantısı görünür ve issue’yu açar. **Daha fazla fikir** yeni kartlar ekler. Yalnızca tek bir alanla ilgili fikir almak için **Özellik öner** düğmesinin yanındaki alana kısa bir **Odak konusu** yazın (en çok 80 karakter; `Enter` da öneri ister). Ya da alanın altındaki sabit konulardan birine tıklayın: **Performans**, **Erişilebilirlik**, **Testler**, **Güvenlik**, **Kullanılabilirlik** veya **Dokümantasyon** (temizlemek için yeniden tıklayın). Model bundan sonra yalnızca o konuyla ilgili özellikler önerir. Alan boşsa model her türlü özelliği önerebilir. Bir projede aynı fikir iki kez önerilmez: önerilen her fikir (atlanan, saklanan ya da başlatılan) projenin **Geçmiş** listesine gider. Modele bu fikirleri yeniden önermemesi söylenir ve aynı başlıkla gelen bir fikir atılır. **Geçmiş**, fikirleri **Başlatıldı** ya da **Önerildi** etiketiyle listeler. **Unut** (ya da **Tümünü unut**) bir fikrin yeniden gelmesine izin verir; **Sonra** listesinde hâlâ duran bir fikir, siz onu oradan kaldırana kadar önerilerde yer almaz. Model yalnızca siz tıkladığınızda çalışır. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Ekran görüntüsü: Özellik fikirleri"></a> |
|
|
42
42
|
| **İçerik araması** | <a id="feature-contentsearch"></a>dsh’nin kendi kenar çubuğu araması (**Çalışma alanları** yanındaki büyüteç; masaüstü uygulamasında `Cmd+K`, tarayıcıda `Cmd+Alt+K`) sohbetleri yalnızca başlığa göre değil, mesajlarınızdaki ve yanıtlardaki sözcüklere göre de bulur. Eşleşen metni sohbetin altında gösterir. Bu arama dsh’de zaten vardır, ama kapalı gelir. Bu özellik aramayı açar ve bilgisayarınızda bir arama dizini dosyası kullanır. Dizin, dsh açıldıktan sonraki ilk aramada oluşturulur (250 sohbet için yaklaşık 15 sn, bkz. Sınırlar) ve sonraki açılışlarda yeniden kullanılır. Varsayılan olarak açıktır. Bir değişiklik, dsh’yi yeniden başlattıktan sonra geçerli olur. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Ekran görüntüsü: İçerik araması"></a> |
|
|
43
43
|
| **Tur geri alma** | <a id="feature-turnrollback"></a>Mesajlarınızdan birinin üzerine gelin ve **↶** düğmesine tıklayın (Kopyala düğmesinin yanında). **Yalnızca sohbet**, o mesajı ve sonrasındaki her şeyi (yanıtlar, araç çağrıları) sohbetten ve modelin bağlamından çıkarır. Mesajı da mesaj alanına geri koyar: mesajı değiştirip yeniden gönderin. **Sohbet ve dosyalar** önce o mesajdan sonra değişen proje dosyalarını listeler. Sonra bu dosyaları da eski hâline döndürür. Yalnızca dsh’nin düzenleme araçlarının değil, komutların (`bash`) yaptığı değişiklikler de buna dahildir. Çalışan bir tur önce durur. Sohbet günlüğü hiçbir zaman yeniden yazılmaz: geri çekilen kısmı tek bir gizli işaretçi gizler. dsh’nin kendi `/compact` komutu da eski mesajları aynı yolla gizler. [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) yüklüyse bu işi o yapar ve Composer Plus ikinci bir düğme göstermez. Geri almadan sonra mesaj alanının üstünde bir **Yeniden uygula** çubuğu görünür: geri almadan hemen önceki hâlden yeni bir sohbet başlatır (aynı mesajlar ve bağlam). **Sohbet ve dosyalar** seçilirse dosyaları da geri getirir. Geri almadan sonra değiştirdiğiniz bir dosya listelenir ve korunur; üzerine yazma kutusunu işaretlerseniz o dosya da geri gelir. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Ekran görüntüsü: Tur geri alma"></a> |
|
|
@@ -46,10 +46,12 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
46
46
|
| **Mesaj geçmişi** | <a id="feature-inputhistory"></a>Boş mesaj alanında `↑` / `↓` tuşlarına basın. Terminaldeki gibi, gönderdiğiniz mesajlar arasında gezinirsiniz. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Ekran görüntüsü: Mesaj geçmişi"></a> |
|
|
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
|
+
| **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> |
|
|
49
50
|
| **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> |
|
|
50
51
|
| **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> |
|
|
51
52
|
| **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> |
|
|
52
|
-
| **Kuyruktaki mesajı yerinde düzenle** | <a id="feature-queueedit"></a>Kuyruktaki bir mesaja çift tıklayın
|
|
53
|
+
| **Kuyruktaki mesajı yerinde düzenle** | <a id="feature-queueedit"></a>Kuyruktaki bir mesaja çift tıklayın ya da Düzenle düğmesine (**Sıradaki mesajı düzenle**) tıklayın. Satırda bir düzenleyici açılır: metni değiştirin, bir görseli ya da dosyayı üzerindeki ✕ ile kaldırın, ataş düğmesiyle (**Görsel veya dosya ekle**) ya da bir görsel yapıştırarak yenilerini ekleyin. `Enter` kaydeder, `Esc` iptal eder, `Shift+Enter` yeni satır ekler. Mesaj kuyruktaki yerini korur. Kaldırmadığınız görseller ve dosyalar değişmez. Düzenleyici açıkken kuyruğun sırası değiştirilemez. Tether’de: kuyruktaki mesajın menüsü → Edit. | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Ekran görüntüsü: Kuyruktaki mesajı yerinde düzenle"></a> |
|
|
54
|
+
| **Durdurduktan sonra gönderilen önce gider** | <a id="feature-stopsendfirst"></a>Varsayılan olarak açıktır. Kuyrukta mesajlar beklerken sohbeti durdurun, sonra yeni bir mesaj gönderin: mesaj hemen ve tek başına çalışır. Kuyruktaki mesajlar sıralarını korur ve ondan sonra, her turda bir tane olmak üzere çalışır. Bu özellik olmadan dsh yeni mesajı kuyruğun sonuna ekler ve onun yerine kuyruktaki ilk mesajı çalıştırır; yeni mesaj en son çalışır. Sohbet çalışırken gönderdiğiniz mesaj yine kuyruğun sonunda bekler. | <a href="assets/features/stopSendFirst.webp"><img src="assets/features/stopSendFirst.webp" width="160" alt="Ekran görüntüsü: Durdurduktan sonra gönderilen önce gider"></a> |
|
|
53
55
|
| **Oturum bağlantısını kopyala** | <a id="feature-copydeeplink"></a>Kenar çubuğunda bir sohbete sağ tıklayın → **Oturum bağlantısını kopyala**. `dsh-session:…` bağlantısını başka bir sohbete yapıştırın. O sohbet, salt okunur bağlam olarak eklenir. dsh 0.2.1’in kendi **Oturum kimliğini kopyala** seçeneği vardır ve bu seçenek yalnızca düz kimliği kopyalar. Bu öğe hemen onun ardından gelir. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Ekran görüntüsü: Oturum bağlantısını kopyala"></a> |
|
|
54
56
|
| **Mesaj bağlantısını kopyala** | <a id="feature-copymessagelink"></a>Bir mesajın üzerine gelin ve **🔗** düğmesine tıklayın (mesajın işlem satırında; bir yanıtta saatin yanında). Bağlantı, oturum bağlantısı ve mesaj numarasıdır: `dsh-session:…#42`. Bağlantıyı bir mesaja yapıştırıp gönderin: dsh 0.2.1 ve sonrasında bağlantı bir etiket olarak görünür. Etikete tıklayınca o sohbet açılır, mesaja kayar ve mesajı 2 saniye vurgular. Oturum bağlantısı gibi, o sohbeti salt okunur bağlam olarak da ekler. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Ekran görüntüsü: Mesaj bağlantısını kopyala"></a> |
|
|
55
57
|
| **Sohbeti Markdown olarak dışa aktar** | <a id="feature-exportmarkdown"></a>Kenar çubuğunda bir sohbete sağ tıklayın (ya da sohbetin **…** menüsünü açın) → **Markdown olarak dışa aktar…**. Bir iletişim kutusu, sohbette kaç mesaj olduğunu gösterir. **Panoya kopyala**, sohbeti Markdown olarak kopyalar. **.md dosyası olarak kaydet**, sohbeti tarayıcının indirme özelliğiyle `<chat title>.md` adıyla kaydeder (dsh masaüstü uygulamasında, sisteminizin ayarına göre İndirilenler klasörüne kaydeder ya da bir kaydetme penceresi açar). Dosyada sohbet başlığı, proje adı ve tarih vardır. Sonra her mesaj için bir `## Siz` ya da `## Asistan` bölümü gelir. Kod blokları olduğu gibi kalır. Bir mesajın açık bıraktığı kod bloğu kapatılır. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Ekran görüntüsü: Sohbeti Markdown olarak dışa aktar"></a> |
|
|
@@ -57,23 +59,30 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
57
59
|
| **Yeni sohbette proje arama** | <a id="feature-projectpicker"></a>Yeni sohbet → mesaj alanının üstündeki proje düğmesi. Projeler A–Z sırasıyla görünür ve üstte bir **Projelerde ara** kutusu vardır. Adın bir kısmını yazın (büyük/küçük harf ve aksan fark etmez). İlk eşleşmeyi seçmek için `Enter` tuşuna basın. Hiçbir proje eşleşmezse **Eşleşen proje yok** yazar. dsh’nin kenar çubuğundaki kayıtlı proje sırası değişmez. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Ekran görüntüsü: Yeni sohbette proje arama"></a> |
|
|
58
60
|
| **Yeni oturum için varsayılan çalışma alanı** | <a id="feature-defaultworkspace"></a>Ayarlar → Composer Plus → **Yeni oturum için varsayılan çalışma alanı** → **Yeni oturumu şurada aç**: bir proje ya da **Genel klasör (default-workspace)** seçin (varsayılan budur: dsh’nin kendi klasörü `Documents/deepseek-harness/default-workspace`, ilk kullanımda oluşturulur). Bundan sonra kenar çubuğunun üstündeki **Yeni oturum** (ve kısayolu), başka bir projenin sohbeti açıkken de yeni sohbeti her zaman orada açar. Bir projenin yanındaki `+` yine o projeyi açar. Yeni sohbette mesaj alanının üstündeki proje düğmesi de projeyi yine değiştirir. | <a href="assets/features/defaultWorkspace.webp"><img src="assets/features/defaultWorkspace.webp" width="160" alt="Ekran görüntüsü: Yeni oturum için varsayılan çalışma alanı"></a> |
|
|
59
61
|
| **Sohbette bul** | <a id="feature-findinchat"></a>Bir sohbette Mac’te `Cmd+F`, Windows ve Linux’ta `Ctrl+F` tuşlarına basın: sohbetin üzerinde bir arama kutusu açılır. Bir sözcük yazın: ekrandaki mesajlarda ve yanıtlarda her eşleşme vurgulanır, geçerli eşleşme daha koyu bir renkle gösterilir ve kutu n / toplam sayısını gösterir. `Enter` ya da `↓` sonraki eşleşmeye, `Shift+Enter` ya da `↑` önceki eşleşmeye gider (ok düğmeleri de aynı işi yapar). Sohbet, eşleşmeyi ekranın ortasına kaydırır. Büyük/küçük harf, aksanlar ve Türkçedeki noktasız ı fark etmez. `Esc` kutuyu kapatır ve imleci önceki yerine geri koyar. Bir yanıt gelirken arama sohbeti izlemeye devam eder. | <a href="assets/features/findInChat.webp"><img src="assets/features/findInChat.webp" width="160" alt="Ekran görüntüsü: Sohbette bul"></a> |
|
|
60
|
-
| **Sohbet başına dal** | <a id="feature-worktreechats"></a>Yeni sohbet
|
|
62
|
+
| **Sohbet başına dal** | <a id="feature-worktreechats"></a>Yeni sohbet ekranında proje düğmesi ile mod düğmesi arasındaki dal düğmesi (dal simgesi) varsayılan olarak **Yeni dal** gösterir. İlk mesajı yazıp gönderin. Mevcut dalda kalmak için aynı düğmede “Mevcut dal (main)” seçeneğini seçin. İlk mesaja görsel ve dosya ekleyebilirsiniz. Plan modunda yeni sohbet de plan modunda başlar: mesajı `/plan <mesaj>` olarak gönderin (Shift+Tab) ya da önce Yeni sohbet ekranını plan moduna alın. Yapay zekâ dala bu mesaja göre ad verir (`feat/…`, `fix/…`). Composer Plus bu dal için `<project>/.worktrees/` içinde bir git worktree oluşturur, `.worktreeinclude` dosyasının listelediği yok sayılan dosyaları (örneğin `.env` ve `node_modules/`) kopyalar ve orada mesajınızla yeni bir sohbet açar. Açık sohbetin başlığında ⑂ dal · N değişiklik · ↑ ↓ (ya da **gönderilmedi**) görünür; **Değişiklikler** sayfasını açmak için buna tıklayın. Aynı menü açık worktree’leri de listeler: orada bir sohbet başlatmak için birini seçin. Dal klasörlerini kenar çubuğunda kendi projelerinin içinde görmek için dsh’nin **Görünüm seçenekleri** → **Çalışma alanı ağacı** seçeneğini seçin. | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="Ekran görüntüsü: Sohbet başına dal"></a> |
|
|
63
|
+
| **Ç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> |
|
|
61
64
|
| **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> |
|
|
62
65
|
| **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> |
|
|
63
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ı**). Eğik çizgi komutları 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> |
|
|
64
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 nedenini okur ve sonraki tur devam eder. Hedef çubuğunun altındaki bir satır (**Hedef kontrolü**) testi ve son sonucu gösterir. **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. **Ş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> |
|
|
68
|
+
| **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. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ekran görüntüsü: Proje hafızası"></a> |
|
|
65
69
|
| **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> |
|
|
66
|
-
| **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. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ekran görüntüsü: Proje durumu"></a> |
|
|
67
|
-
| **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 kısa commit kimliği parantez içinde görünür). 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. | <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> |
|
|
70
|
+
| **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 kısa commit kimliği parantez içinde görünür). 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> |
|
|
68
72
|
| **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> |
|
|
69
73
|
| **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> |
|
|
70
|
-
| **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. 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> |
|
|
74
|
+
| **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> |
|
|
71
75
|
| **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> |
|
|
72
76
|
| **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> |
|
|
73
77
|
| **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 ya da bir onay veya plan incelemesi beklediğinde (turuncu nokta) ve siz dsh'yi 30 saniye kullanmadığınızda, dsh o sohbeti açar. Birden fazla sohbet bekliyorsa 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. 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> |
|
|
74
79
|
| **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> |
|
|
75
80
|
| **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> |
|
|
76
81
|
| **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> |
|
|
82
|
+
| **Yedekleme** | <a id="feature-backup"></a>Ayarlar → Composer Plus → **Yedekleme** → **Şimdi yedekle**, dsh ana klasörünüzün tamamını (sohbetler, ayarlar, eklentiler, MCP, beceriler) sağlama toplamıyla birlikte `~/Desktop/dsh-backups` içindeki tek bir arşive yazar. Gizli bilgiler arşivde maskelenir: kimlik bilgisi dosyaları, anahtar dosyaları (`.pem`, `.key`) ve yml ayarlarındaki token, secret ve password değerleri yalnızca bu bilgisayarda, klasördeki `vault` içinde kalır. `cache/`, `dsh-runtimes/` ve `node_modules` arşive girmez (dsh bunları yeniden oluşturur). Listedeki her yedekte **Kontrol et** (yedeği baştan sona okur), **Başka bir bilgisayar için** (yeni bilgisayara kopyalanacak, kurtarma konsolunu da içeren bir klasör) ve **Sil** vardır. Aynı klasördeki dsh-backup arşivleri de listede görünür ve kullanılabilir. Geri yüklemek için dsh’den çıkın ve kurtarma konsolunu kullanın. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Ekran görüntüsü: Yedekleme"></a> |
|
|
83
|
+
| **Otomatik yedekleme** | <a id="feature-autobackup"></a>**Otomatik yedekleme** özelliğini açın (varsayılan olarak kapalıdır: her kopya, önbelleği hariç dsh ana klasörünüz kadar yer kaplar). Ne sıklıkla yedekleneceğini (**Sıklık**: 6 saatten 7 güne kadar, varsayılan 24 saat) ve kaç yedeğin saklanacağını (**Sakla**: 3 ile 14 arası, varsayılan 7) seçin. Sonraki yedekleme zamanı anahtarın altında görünür. Başarısız bir yedekleme de orada görünür ve 30 dakika sonra yeniden denenir. dsh ya da Composer Plus yeni bir sürümle açıldığında, açılıştan kısa süre sonra, yeni sürüm verilerinizi uzun süre kullanmadan önce bir anlık görüntü alınır (en yeni ikisi saklanır ve **Yükseltmeden önce** olarak işaretlenir). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Ekran görüntüsü: Otomatik yedekleme"></a> |
|
|
84
|
+
| **Oturum günlüğü kontrolü** | <a id="feature-sessiondoctor"></a>**Oturum günlüklerini kontrol et**, her sohbetin günlüğünü okur ve dsh’nin açamadığı günlükleri listeler (bozuk bir çerçeve, kesik bir kayıt, yanlış bir sıra numarası). Sonu yarım kalmış bir günlük listelenmez: dsh onu kendisi onarır. **Yedeklerden onar**, sağlam kopyası olan en yeni yedekteki kopyayı geri koyar ve hasarlı dosyayı yanında saklar (`.corrupt-<zaman>`). O yedekten sonra yazılan mesajlar kopyada yoktur. Bu dsh’de açık olan bir sohbet burada onarılmaz: dsh’den çıkın ve sohbeti kurtarma konsolunda onarın. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Ekran görüntüsü: Oturum günlüğü kontrolü"></a> |
|
|
85
|
+
| **Kurtarma konsolu** | <a id="feature-rescueconsole"></a>Her yedekleme, yedek klasörüne bir kurtarma konsolu da koyar. dsh kapalıyken ya da açılmadığında bu klasörde `Composer Plus Rescue` dosyasını açın (macOS: `Composer Plus Rescue.command`): bir terminal penceresindeki menü yedekleri listeler, kontrol eder ve geri yükler, oturum günlüklerini de kontrol edip onarır. Ağ portu açmaz. Geri yükleme sizden `RESTORE` yazmanızı ister, mevcut dsh ana klasörünüzü `.dsh.pre-restore-<zaman>` olarak saklar, maskelenmiş gizli bilgileri vault’tan geri koyar ve `cache/`, `dsh-runtimes/` ile `node_modules` klasörlerini eski klasörden taşır. dsh olmadan çalışır: Node.js’i ya da DeepSeek Harness uygulamasının kendisini kullanır. Yeni bir bilgisayarda **Başka bir bilgisayar için** ile hazırlanan klasörü kopyalayın ve `Composer Plus Rescue` dosyasını orada açın. | <a href="assets/features/rescueConsole.webp"><img src="assets/features/rescueConsole.webp" width="160" alt="Ekran görüntüsü: Kurtarma konsolu"></a> |
|
|
77
86
|
|
|
78
87
|
<!-- END GENERATED FEATURES -->
|
|
79
88
|
|
|
@@ -117,7 +126,7 @@ Her dil paketinde 3.280 metin vardır: dsh `0.2.0-rc.2` ve `0.2.1-rc.2` sürüml
|
|
|
117
126
|
| `Esc` | tahmin gösteren boş mesaj alanı | tahmini gizle |
|
|
118
127
|
| `Cmd/Ctrl+Z` | mesaj alanı, **İstemi iyileştir** kullanıldıktan sonra | yazdığınız metni geri getir |
|
|
119
128
|
| `Esc` | mesaj alanı, **İstemi iyileştir** çalışırken | iyileştirmeyi iptal et |
|
|
120
|
-
| `Enter` / `Esc` |
|
|
129
|
+
| `Enter` / `Esc` | kuyruktaki mesaj düzenleyicisi | düzenlemeyi kaydet / iptal et |
|
|
121
130
|
| Mac’te `Cmd+F`, Windows ve Linux’ta `Ctrl+F` | açık sohbet | **Sohbette bul** kutusunu aç |
|
|
122
131
|
| `Enter` / `Shift+Enter`, `↓` / `↑` | **Sohbette bul** kutusu | sonraki / önceki eşleşme |
|
|
123
132
|
| `Esc` | **Sohbette bul** kutusu | kutuyu kapat |
|
|
@@ -151,6 +160,9 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
151
160
|
- **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).
|
|
152
161
|
- **İ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).
|
|
153
162
|
- **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
|
+
- **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.
|
|
164
|
+
- **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
|
+
- **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.
|
|
154
166
|
|
|
155
167
|
## Sorun giderme
|
|
156
168
|
|
|
@@ -165,11 +177,15 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
165
177
|
- **Silme, bu sohbetin başka bir dsh’de açık olduğunu söylüyor:** aynı dsh ana klasörünü kullanan ikinci bir dsh, sohbetin kilidini tutuyor. O pencereyi ya da dsh’yi kapatın, sonra yeniden silin. Bu sırada sohbet arşivlenmiş olarak kalır.
|
|
166
178
|
- **"Tailscale only" seçeneğini açtıktan sonra iPhone’um bağlanamıyor:** Tailscale hem Mac’te hem de iPhone’da açık olmalıdır. Tailscale Mac’te kapalıysa Mobil bağlantı paneli bir uyarı gösterir. Erişim günlüğü, reddedilen her denemeyi nedeniyle birlikte gösterir.
|
|
167
179
|
- **Bir sohbet yeniden başlatmadan sonra devam etmedi:** dsh kapandığında Yeniden açılışta sürdür kapalıydı, o turu kendiniz durdurdunuz, tur bitmişti (tamamlandı ya da hata verdi), sohbet arşivlenmişti veya 20’den fazla sohbet çalışıyordu (en yeni 20 sohbet devam eder).
|
|
180
|
+
- **Yeniden başlatmadan sonra kuyruk boş:** Kuyruğu dsh kapanırken kendisi boşaltır. Yeniden açılışta sürdür kuyruğu yalnız sürdürdüğü sohbette geri koyar; diğer sohbetlerde mesajları yeniden gönderin. Kapanıştan hemen önce kaldırdığınız bir mesaj geri gelebilir: Onu yeniden kaldırın.
|
|
168
181
|
- **GitHub’da issue aç "gh could not open the issue" diyor:** bu mesaj, `gh` aracının kendi ilk satırıdır. Bir terminalde `gh auth status` komutunu çalıştırın ve `gh auth login` ile oturum açın. Sohbetin klasöründe bir GitHub uzak deposu (remote) olmalıdır (`git remote -v`). "not installed or not on the PATH of dsh", dsh’nin `gh` aracını bulamadığı anlamına gelir: aracı yükleyin ya da dsh’yi `gh` aracının çalıştığı bir terminalden başlatın.
|
|
169
182
|
- **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).
|
|
170
183
|
- **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.
|
|
171
184
|
- **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).
|
|
172
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.
|
|
185
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.16.0`) ve yukarıdaki kurulum notuna bakın.
|
|
186
|
+
- **Ş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
|
+
- **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
|
+
- **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.
|
|
173
189
|
|
|
174
190
|
## Sınırlar
|
|
175
191
|
|
|
@@ -177,6 +193,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
177
193
|
- **Özellik fikirleri**, kartları her sohbet için dsh ya da sayfa yeniden yüklenene kadar bellekte tutar. Sonra **Özellik öner** modele yeniden sorar. Kartlar, tıkladığınız anda dsh’de seçili olan arayüz dilinde gelir. Dili değiştirdikten sonra destede zaten olan kartlar kendi dillerini korur, **Daha fazla fikir** ise yeni dili kullanır. Model kodu değil, yalnızca kısa proje özetini görür. Bu yüzden bir fikir, projede zaten olan bir şeyi tekrarlayabilir: o kartı atlayın. Yeni sohbet yalnızca profilde dsh’nin `/plan` komutu varsa plan modunda çalışır. Yoksa fikir sıradan bir ilk mesaj olarak gider. **Sonra** listesi sohbetin klasör yoluna aittir: aynı klasörü sembolik bağlantı üzerinden açarsanız o yolun ayrı bir listesi olur. Liste, proje başına en çok 50 fikir tutar (daha fazla eklemek için birini kaldırın) ve aynı başlığı yalnızca bir kez tutar. Kartı sürüklemek yalnızca sol ya da sağ seçimini yapar. Kartı saklamak için **↓**, hemen uygulamak için **▶** kullanın. Tekrar eden bir fikir yalnızca başlığından tanınır: model önceki bir fikri yeni bir adla yine önerebilir. O kartı atlayın. Model yalnızca önceki fikirleri döndürürse yeni bir kart görünmez: yeniden tıklayın. Dar bir odak konusu bunu daha olası yapar: daha geniş bir konu yazın ya da konuyu temizleyin. Odak konusu, her sohbet için dsh ya da sayfa yeniden yüklenene kadar alanda kalır.
|
|
178
194
|
- **Sohbeti Markdown olarak dışa aktar** yalnızca sizin mesajlarınızı ve asistanın metin yanıtlarını içerir. Araç çağrıları ve çıktıları, akıl yürütme metni, görseller (onların yerinde bir `[image]` satırı olur), gizli bağlam ve Tur geri alma ya da dsh-rewind-plugin ile çıkarılan mesajlar dışarıda kalır. Bir turun yanıtları tek bir bölümde birleşir. Tek bir dışa aktarmaya en çok yaklaşık 4 milyon karakter girer. Daha uzun bir sohbette dışa aktarılan metin, sohbetin ilk kısmını ve bir notu içerir.
|
|
179
195
|
- **Yeniden açılışta sürdür** turu sürdürür; turu baştan oynatmaz. Çıkış anında çalışan bir araç çağrısı, dsh’nin “sonuç bilinmiyor” sonucuyla biter. Modele bitmiş işi tekrarlamaması söylenir. Yine de iki kez çalıştırılması güvenli olmayan bir komut yeniden çalışabilir. Açık olan alt ajanlar, onaylar ve sorular geri yüklenmez: bunların üst sohbeti devam eder ve yeniden sorar. Bir açılışta en çok 20 sohbet devam eder.
|
|
196
|
+
- **Yeniden açılışta sürdür** ve kuyruk: dsh kapanırken sohbetin kuyruğunu boşaltır. Eklenti, kuyruktaki mesajlarınızı sohbetin günlüğünden sırası, düzenlemesi, resmi ve dosyasıyla geri koyar; bu mesajlar sürdürülen turdan sonra çalışır. Kuyruğu yalnız sürdürülen sohbetler geri alır (anahtar açık, tur çalışırken kapanış). dsh, kuyruğun son mesajlarını sizin kaldırmanızı da aynı biçimde kaydeder: Onları kaldırdıktan sonra sonraki adım başlamadan dsh kapanırsa mesajlar geri gelir.
|
|
180
197
|
|
|
181
198
|
- **İçerik araması** dsh’nin kendi aramasıdır, bu yüzden dsh’nin sınırlarına sahiptir. Yalnızca kullanıcı ve asistan mesajlarında arar: araç çıktısında (komutlar, dosya içerikleri, sonuçlar) ve akıl yürütme metninde aramaz. Kullanıcı, asistan veya araç mesajları için bir filtresi yoktur. Sözcüklerin parçalarını değil, tamamını eşleştirir (`deploy`, `deployment` sözcüğünü bulmaz). Aksanlı harfler aksansız hâlleriyle de eşleşir (`seker`, `şeker` sözcüğünü bulur). Her sohbet için bir satır gösterir; satırda dsh’nin 240 karakterlik alıntısı vardır. En çok 20 satır gösterir.
|
|
182
199
|
- **İçerik araması** maliyeti, 247 gerçek sohbet günlüğünün bir kopyasında ölçüldü (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB): dsh açıldıktan sonraki ilk arama, dizini yaklaşık 15 sn’de oluşturur. Bu sürede dsh’nin Host’u yaklaşık 7 sn boyunca hiçbir isteğe yanıt vermez. Bu yüzden diğer sohbetlerin akışı o an durur (sayfanın kendisi donmaz). Host’un belleği en yüksek noktada yaklaşık 1,1 GB artar. Bir dakika sonra da dsh kapanana kadar başlangıçtakinden yaklaşık 0,5–0,6 GB fazla kalır. Dizin dosyası yaklaşık 165 MB’tır. Sonraki aramalar yaklaşık 0,5 sn sürer. Yeniden başlatmadan sonra ilk arama yaklaşık 1 sn sürer (yalnızca yeni veya değişen sohbetler eklenir) ve belleği yaklaşık 70 MB artırır. Bilgisayarınızın belleği azsa bu özelliği kapatın.
|
|
@@ -187,19 +204,25 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
187
204
|
- dsh 0.2.1, yeni sürüm hiçbir dsh ayarını değiştirmiyorsa güncellemeyi hemen yükler. Aksi durumda ve dsh 0.2.0’da güncellemeyi yüklemek için dsh’yi yeniden başlatın. Eklenti dsh’yi sizin yerinize hiçbir zaman yeniden başlatmaz. dsh’nin eklenti yöneticisi olmayan web/CLI profilleri yalnızca yeni sürümü bildirir.
|
|
188
205
|
- **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.
|
|
189
206
|
- **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.
|
|
190
|
-
- **
|
|
207
|
+
- **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.
|
|
208
|
+
- **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.
|
|
191
209
|
- 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.
|
|
192
210
|
- **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.
|
|
193
|
-
- **Kuyruktaki mesajı yerinde düzenle**,
|
|
211
|
+
- **Kuyruktaki mesajı yerinde düzenle**, bu arada gönderilmeye başlayan ya da başka bir yerde (örneğin iPhone’daki Tether’de) değişen bir mesajı değiştirmez ve bunu bir uyarıyla bildirir. Yeni görsel için görselleri kabul eden bir model gerekir (dsh’nin kendi görsel sınırları da geçerlidir), yeni dosyanın da yüklemesi bitmeden mesaj kaydedilemez. Yalnızca kendi mesajlarınızı düzenleyebilirsiniz: kuyruktaki bir hedef turu ya da bir soruya verilen yanıt düzenlenemez. Eklenti güncellendikten sonra yalnızca metin değişikliği hemen çalışır: görsel ya da dosya içeren bir mesajı kaydetmeden önce dsh’yi yeniden başlatın (Host tarafı açılışta yüklenir).
|
|
194
212
|
- **Yeniden uygula**, geri alınan sohbeti hiçbir zaman değiştirmez: geri almadan hemen önceki andan yeni bir sohbet başlatır (dsh’nin kendi dallandırması, aynı model bağlamı). Bu yüzden yeni sohbetin kimliği ve başlığı yenidir. Bir sohbette yalnızca en yeni geri alma yeniden uygulanabilir: yalnızca bir kez ve ondan sonra hiçbir şey gelmediyse (yeni bir mesaj bu seçeneği kaldırır). Geri almadan sonra değiştirdiğiniz bir dosya korunur. Üzerine yazan kutuyu işaretlerseniz korunmaz. Yeniden uygulama, geri almanın sakladığı anlık görüntüyü gerektirir (aynı 50 girdilik pencere). Bu sürümden önce ya da **Yalnızca sohbet** ile yapılan bir geri alma yalnızca mesajları geri getirir.
|
|
213
|
+
- **Ağaç** dal haritası her okun nereye gittiğini tahmin eder, çünkü git bir dalın hangi dala birleştirildiğini kaydetmez. Birleştirilmiş bir dal, onu ilk olarak bir birleştirme commit’iyle alan dalı gösterir. Bekleyen bir dal, başladığı en yakın dalı gösterir (önce ana dal). İki dal aynı commit’ten başladıysa harita yanlış olanı seçebilir. İleri sarma (fast-forward) ile ilerleyen bir dalın birleştirme commit’i yoktur, bu yüzden **Birleştirildi** etiketi hiçbir şey açmaz. Ana dal, `origin` uzak deposunun varsayılan dalıdır. Bu yoksa `main` ya da `master`, o da yoksa açık daldır. Harita en yeni 20.000 commit’i okur ve en çok 60 dal gösterir. Geçmiş daha uzunsa bazı okların yanlış olabileceğini söyler. Squash ya da rebase ile birleştirilen bir dal (örneğin GitHub’da) **Bekliyor** olarak görünür: git, onun commit’leriyle bir bağ tutmaz.
|
|
195
214
|
- **Bu sohbet** yalnızca dsh’nin dosya araçlarının (`write`, `edit`, `str_replace_editor`) yazdığı dosyaları sayar. Bir komutun (`bash`) değiştirdiği dosyalar bu görünümde yoktur. Bu dosyalar **Commit edilmemiş** altında görünür. Sohbetin Tur geri alma anlık görüntüsü yoksa (Tur geri alma kapalı, dsh-rewind-plugin yüklü ya da sohbet eklentiden daha eski), görünüm son commit ile karşılaştırır ve bunu belirtir. Tur geri alma bir sohbetin en yeni 50 anlık görüntüsünü saklar. Daha uzun bir sohbette görünüm, saklanan en eski anlık görüntüyle karşılaştırır, hangi mesajdan başladığını söyler ve daha önceki değişiklikleri saymaz. **Boşluk değişikliklerini gizle**, `git diff -w` ile aynıdır: yalnızca satır içindeki boşlukları değişen bir satır da gizlenir.
|
|
196
215
|
- **GitHub’da issue aç** için dsh’nin PATH’inde GitHub CLI (`gh`) ve sohbetin klasöründe bir GitHub uzak deposu (remote) gerekir. En çok 60 sn çalışır. `gh` daha uzun sürerse issue GitHub’da açılmış olabilir, ama bağlantısı listede görünmez. Yeniden tıklamadan önce GitHub’a bakın: liste bağlantıyı yalnızca tamamlanan bir çalıştırmadan okur, bu yüzden yeni bir tıklama ikinci bir issue açabilir. Birden çok GitHub uzak deposu olan bir klasör, `gh` aracının kendi varsayılanını kullanır (`gh repo set-default`).
|
|
197
216
|
- **Bu dosyayı değiştiren sohbetler**, **Bu sohbet** gibi yalnızca dsh’nin dosya araçlarını (`write`, `edit`, `str_replace_editor`) tanır: bir komutun (`bash`) yaptığı değişiklik listelenmez. Deponun en yeni 300 sohbetini okur (oluşturulma zamanına göre) ve daha fazlası varsa bunu belirtir. En çok 100 satır gösterir. Yeniden adlandırılan bir dosya, aracın yazdığı adla listelenir. Klasörü deponun dışında olan bir sohbet (aynı dosyalara başka bir yoldan ulaşsa bile) sayılmaz. dsh açıldıktan sonraki ilk açılış, deponun tüm sohbet günlüklerini okur (275 sohbet için yaklaşık 4 sn). Sonraki açılışlar yalnızca o zamandan beri değişen sohbetleri okur.
|
|
198
|
-
- **Sohbet satırlarında Git dalı**, şu anki dalı değil, sohbetin son turu başladığında ya da bittiğinde sohbetin klasörünün bulunduğu dalı gösterir: bir tur dışında yapılan dal değişikliği bir sonraki turdan sonra görünür. Bu sürümden önceki sohbetlerde bir sonraki turlarına kadar etiket görünmez. Etiket, dsh’nin sohbet satırı yapısına yerleşir (dsh’de orada bir yuva yoktur). Bir dsh güncellemesi bu yapıyı değiştirirse etiket görünmez.
|
|
217
|
+
- **Sohbet satırlarında Git dalı**, şu anki dalı değil, sohbetin son turu başladığında ya da bittiğinde sohbetin klasörünün bulunduğu dalı gösterir: bir tur dışında yapılan dal değişikliği bir sonraki turdan sonra görünür. Bu sürümden önceki sohbetlerde bir sonraki turlarına kadar etiket görünmez. Etiket, dsh’nin sohbet satırı yapısına yerleşir (dsh’de orada bir yuva yoktur). Bir dsh güncellemesi bu yapıyı değiştirirse 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.
|
|
218
|
+
- **Sohbet başına dal** plan modunda: dsh, `/plan <mesaj>` metnini mesaj olarak değil, komut olarak gönderir. Bu yüzden Composer Plus, komutun gönderilmesini dsh’nin mesaj alanında yakalar (herkese açık API değildir). Bir dsh güncellemesi bunu değiştirirse **Yeni dal** seçiliyken `/plan <mesaj>`, açık Yeni sohbet ekranında dsh’nin kendi komutu olarak çalışır. Host yeni sohbette plan modunu açamazsa dal klasörü kalır ve mesaj gönderilmez. Böylece yeni sohbet, varsayılan modda dosyaları değiştirmez.
|
|
219
|
+
- **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. Taşıma yalnız sohbetin bir sonraki adımında olur. Bu yüzden hiçbir sohbetin kullanmadığı, silinmiş bir dalın projesi kenar çubuğunda kalır: onu dsh'nin kendi proje menüsüyle kaldırın. 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
|
+
- **Ç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.
|
|
199
221
|
- **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ı taşıyan sohbetlere bakar (soru, onay veya plan incelemesi); bir alt ajanın isteği üst sohbetinde görünür. 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.
|
|
200
223
|
- Yeniden başlatmadan önce gönderilen bir bildirime tıklamak yalnızca dsh’yi öne getirir.
|
|
201
224
|
- 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.
|
|
202
|
-
- 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.
|
|
225
|
+
- 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.
|
|
203
226
|
- dsh’de proje satırı menüsü veya Çalışma alanları başlığı için de bir yuva yoktur. **Yolu kopyala**, proje satırını dsh’nin satır yapısından bulur. **Tüm projeleri daralt** dsh’nin başlığına yerleşir ve açık her projeyi, proje satırına tıklamakla aynı yolla kapatır. Bir dsh güncellemesi bu yapıyı değiştirirse sağ tıklama tarayıcının menüsünü gösterir ve düğme görünmez.
|
|
204
227
|
- dsh’de yeni sohbetin proje menüsünde de bir uzantı noktası yoktur. Bu yüzden **Projelerde ara** kutusu ve A–Z sırası dsh’nin menü yapısına bağlanır. Bir dsh güncellemesi bu yapıyı değiştirirse menü, dsh’nin çizdiği gibi görünür: kayıtlı sırayla ve arama kutusu olmadan. A–Z sırası yalnızca bir görünümdür. dsh’nin kayıtlı proje sırasını değiştirmez.
|
|
205
228
|
- 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.
|
|
@@ -207,6 +230,12 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
207
230
|
- **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.
|
|
208
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. Eğik çizgi komutunda veya dosya ya da sembol etiketi olan bir mesajda çalışmaz (yeni metin düz metindir, bu yüzden etiket kaybolurdu). 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).
|
|
209
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. Yalnızca sohbetin kendi model çağrıları sayılır (alt ajanlarınınki sayılmaz). 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.
|
|
233
|
+
- **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. Kontrol etmek için dosyaları açın; dsh kapalıyken elle düzenleyin ya da silin. 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
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
238
|
+
- **Otomatik yedekleme** yalnızca dsh çalışırken çalışır: dsh kapalıyken zamanı gelen bir yedekleme, bir sonraki açılıştan yaklaşık 45 sn sonra çalışır. Yeni bir sürümün anlık görüntüsü güncellemeden önce değil, o açılıştan sonra alınır.
|
|
210
239
|
- Yerleşik destek dsh geliştiricilerinden istendi: kuyruk `move` işlemi için [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), Devam et durumu için [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
211
240
|
|
|
212
241
|
## SSS
|
|
@@ -235,9 +264,19 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
235
264
|
|
|
236
265
|
**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.
|
|
237
266
|
|
|
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.
|
|
268
|
+
|
|
269
|
+
**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
|
+
|
|
271
|
+
**dsh artık açılmıyor. Bir yedeği nasıl geri yüklerim?** Yedek klasörünü (`~/Desktop/dsh-backups`) açın ve `Composer Plus Rescue.command` dosyasına çift tıklayın (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`). `3) Restore a backup` seçeneğini seçin, bir yedek seçin ve `RESTORE` yazın. Bu, dsh olmadan çalışır.
|
|
272
|
+
|
|
273
|
+
**dsh’yi yeni bir bilgisayara nasıl taşırım?** Eski bilgisayarda: **Yedekleme** → bir yedeğin yanındaki **Başka bir bilgisayar için**. O klasörü yeni bilgisayara kopyalayın, orada dsh’yi kurun ve dsh’den çıkın. Sonra kopyalanan klasörde `Composer Plus Rescue` dosyasını açın ve geri yükleyin. API anahtarlarınızı yeniden girin (eski bilgisayarda kalırlar).
|
|
274
|
+
|
|
275
|
+
**Bir çökmeden sonra bir sohbet açılmıyor. Onarabilir miyim?** **Ayarlar → Composer Plus → Oturum günlüğü kontrolü → Oturum günlüklerini kontrol et**. Hasarlı bir sohbet, **Yedeklerden onar** ile en yeni yedekten geri gelir (o yedekten sonraki mesajlar kaybolur).
|
|
276
|
+
|
|
238
277
|
**dsh’de sıradaki mesajların sırasını nasıl değiştiririm?** Sıradaki bir mesajın ⠿ tutamacını sürükleyin ya da tutamaca odaklanıp `↑` / `↓` tuşlarına basın.
|
|
239
278
|
|
|
240
|
-
**Sıradaki bir mesajdaki yazım hatasını nasıl düzeltirim?** Kuyruktaki mesaja çift tıklayın, metni değiştirin ve `Enter` tuşuna basın (`Esc` iptal eder). Mesaj kuyruktaki yerini korur.
|
|
279
|
+
**Sıradaki bir mesajdaki yazım hatasını nasıl düzeltirim?** Kuyruktaki mesaja çift tıklayın, metni değiştirin ve `Enter` tuşuna basın (`Esc` iptal eder). Mesaj kuyruktaki yerini korur. Orada mesajın görsellerini ve dosyalarını da kaldırabilir ya da yenilerini ekleyebilirsiniz.
|
|
241
280
|
|
|
242
281
|
**Bir projenin tüm okunmamış noktalarını bir kerede nasıl temizlerim?** Kenar çubuğu → projenin **…** düğmesi → **Tümünü okundu işaretle**.
|
|
243
282
|
|
|
@@ -265,13 +304,17 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
265
304
|
|
|
266
305
|
**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.
|
|
267
306
|
|
|
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.
|
|
308
|
+
|
|
268
309
|
**DeepSeek Harness arayüzünü Türkçe, İspanyolca, Japonca… diline nasıl geçiririm?** Ayarlar → Composer Plus → **Uygulama dili**.
|
|
269
310
|
|
|
270
311
|
**dsh’yi iPhone’umdan nasıl kullanırım?** Tether uygulamasını `tether/ios` klasöründen derleyin (Xcode). **Ayarlar → Composer Plus → Mobil bağlantı (iPhone)** özelliğini açın. Sol alttaki **Mobil bağlantı** düğmesine tıklayın, QR kodunu tarayın (iPhone’un Kamera uygulaması ya da Tether’deki **Scan code**), **Connect** düğmesine dokunun ve **Approve** düğmesine tıklayın. Evden uzaktayken iki cihazda da Tailscale kullanın.
|
|
271
312
|
|
|
272
313
|
**Yeni oturum her zaman aynı projede nasıl açılır?** Ayarlar → Composer Plus → **Yeni oturum için varsayılan çalışma alanı** → **Yeni oturumu şurada aç** → projeyi seçin. Başka bir projenin yanındaki `+` yine o projeyi açar.
|
|
273
314
|
|
|
274
|
-
**Bir projenin birkaç özelliği üzerinde, her biri kendi dalında olmak üzere aynı anda nasıl çalışırım?** **Sohbet başına dal** ile:
|
|
315
|
+
**Bir projenin birkaç özelliği üzerinde, her biri kendi dalında olmak üzere aynı anda nasıl çalışırım?** **Sohbet başına dal** ile: Yeni sohbet ekranında dal düğmesi varsayılan olarak **Yeni dal** gösterir: ilk mesajı gönderin. Her sohbet kendi dalını ve worktree klasörünü alır; `.worktreeinclude` listeliyorsa `.env` ve `node_modules` da kopyalanır. Sohbetin başlığı hangi dalda olduğunuzu gösterir.
|
|
316
|
+
|
|
317
|
+
**Kenar çubuğu bir projenin her dalını gösterip ajan bir dal oluşturduğunda sohbetimi taşıyabilir mi?** Evet, **Çalışma alanı ağacında dallar** ile (varsayılan olarak kapalı): Ayarlar → Composer Plus içinden açın, sonra dsh’de **Görünüm seçenekleri** → **Çalışma alanı ağacı** seçeneğini seçin. `<project>/.worktrees/` içinde worktree’si olan her dal, projesinin içinde görünür. Proje klasöründeki ajana bir dal oluşturup orada çalışmasını söylediğinizde, klasörde commit edilmemiş değişiklik yoksa sohbet kendiliğinden dala taşınır. Dalın klasörünü silerseniz dal listeden kalkar. Sohbetleri **Gruplanmamış** altına geçer.
|
|
275
318
|
|
|
276
319
|
**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.
|
|
277
320
|
|
|
@@ -287,6 +330,7 @@ PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh
|
|
|
287
330
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
288
331
|
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
289
332
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
333
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
|
|
290
334
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
291
335
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
292
336
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
@@ -297,10 +341,14 @@ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/
|
|
|
297
341
|
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
298
342
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
299
343
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
344
|
+
# Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
|
|
345
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
|
|
300
346
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
301
347
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
302
348
|
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
303
349
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
350
|
+
# Resume after restart with a queue (fake model, real quit and start): text, image, file, a drag and an edit come back in order
|
|
351
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-resume-queue.mjs /path/to/dsh/lib/bin.js
|
|
304
352
|
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
|
|
305
353
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
306
354
|
# Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
|
|
@@ -315,8 +363,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path
|
|
|
315
363
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
|
|
316
364
|
# Mark all as read, Copy message link, Edit queued message in place, Redo, Changes → This chat and Hide whitespace (fake model, made-up git projects) + their thumbnails
|
|
317
365
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-six-features.mjs /path/to/dsh/lib/bin.js
|
|
318
|
-
# Changes Tree (fake model, made-up git history): branch
|
|
366
|
+
# Changes Tree (fake model, made-up git history): the branch map (counts, colors, arrows), a branch's commits, commit files and diffs, Merged and Waiting files, back marks the box + its thumbnail
|
|
319
367
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
|
|
368
|
+
# Branches in the workspace tree (fake model, made-up git project): a worktree becomes a project, the agent's new branch moves the chat, a deleted folder leaves the tree + its thumbnail
|
|
369
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-branch-tree.mjs /path/to/dsh/lib/bin.js
|
|
320
370
|
# Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
|
|
321
371
|
PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
|
|
322
372
|
# Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
|
|
@@ -327,6 +377,9 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path
|
|
|
327
377
|
# Queue drag-and-drop and Continue with a queued message (slow fake model)
|
|
328
378
|
PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
|
|
329
379
|
PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
|
|
380
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
381
|
+
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
382
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
330
383
|
```
|
|
331
384
|
|
|
332
385
|
```sh
|