dsh-composer-plus 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +36 -13
- package/README.es.md +36 -13
- package/README.fr.md +36 -13
- package/README.hi.md +36 -13
- package/README.id.md +36 -13
- package/README.ja.md +36 -13
- package/README.ko.md +36 -13
- package/README.md +36 -13
- package/README.pt-BR.md +36 -13
- package/README.ru.md +36 -13
- package/README.tr.md +36 -13
- package/README.vi.md +36 -13
- package/README.zh.md +36 -13
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/copyMessageLink.webp +0 -0
- package/assets/features/markProjectRead.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/client.js +917 -133
- package/index.js +439 -83
- package/package.json +7 -3
- package/tether/gateway/admin.html +47 -3
- package/tether/gateway/server.mjs +98 -28
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.13.0`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -37,10 +37,10 @@ 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**. Değişen dosyaları `+/-` sayılarıyla görmek için **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. | <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> |
|
|
40
|
+
| **Değişiklikler paneli** | <a id="feature-changespanel"></a>Sağ kenar çubuğu → `+` → **Değişiklikler**. Değişen dosyaları `+/-` sayılarıyla görmek için **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. Dal ağacını görmek için dal adına tıklayın (veya **Ağaç** seçin). Üstteki bir dala tıklayınca ağaç o dala gider. Bir commit’e tıklayınca dosyalarını ve farklarını görürsünüz. **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. | <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şı, son 15 commit). 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. **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
|
-
| **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. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Ekran görüntüsü: Tur geri alma"></a> |
|
|
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> |
|
|
44
44
|
| **Sohbeti sil** | <a id="feature-deletechat"></a>Kenar çubuğu → bir sohbetin **…** menüsü (ya da sağ tıklama) → **Sil…** → **Sil**. dsh kendisi yalnızca arşivleyebilir. Sohbet durur (dsh’nin kendi arşivlemesinde olduğu gibi turu, arka plan işleri, alt ajanları ve zamanlanmış hatırlatıcıları da durur). Kayıtlı geçmişi, alt ajan sohbetleriyle birlikte macOS Çöp Sepeti’ne taşınır (diğer sistemlerde: `$DSH_HOME/trash`). Sohbeti geri almak için klasörü yerine koyun ve dsh’yi yeniden başlatın: sohbet, kenar çubuğundaki **Yalnızca arşivlenmişler** görünümünde görünür. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Ekran görüntüsü: Sohbeti sil"></a> |
|
|
45
45
|
| **Yazma kutusunda proje adı** | <a id="feature-projectname"></a>Mesaj alanının altındaki satır (turlar, token’lar, önbellek isabeti, bağlam) sohbetin proje adıyla başlar. Böylece bir sohbetin hangi projede çalıştığını her zaman görürsünüz. Bu ad, dsh’nin kendi proje başlığıdır. Projenin başlığı yoksa klasör adıdır. Klasörün tam yolunu görmek için adın üzerine gelin. Sohbeti kenar çubuğunda, liste ya da proje görünümünde bulmak için ada tıklayın: kenar çubuğu ve proje açılır (daraltılmış bir proje ve projenin **N oturum daha göster** kısmı da açılır), liste sohbete kayar ve sohbet 5 saniye boyunca yanıp söner. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Ekran görüntüsü: Yazma kutusunda proje adı"></a> |
|
|
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> |
|
|
@@ -49,22 +49,25 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
49
49
|
| **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
50
|
| **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
51
|
| **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. Mesaj, dsh’nin kendi düzenleme alanına dönüşür: metni değiştirin, kaydetmek için `Enter`, iptal etmek için `Esc` tuşuna basın. Mesaj kuyruktaki yerini korur. Görsel ya da dosya içeren mesajlar bu yolla düzenlenemez (dsh’nin kuyruğu yalnızca metni düzenler). | <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> |
|
|
52
53
|
| **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
|
+
| **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> |
|
|
53
55
|
| **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> |
|
|
54
56
|
| **Proje yolunu kopyala** | <a id="feature-copyprojectpath"></a>Kenar çubuğunda bir projeye sağ tıklayın → **Yolu kopyala**. Proje klasörünün tam yolu kopyalanır. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Ekran görüntüsü: Proje yolunu kopyala"></a> |
|
|
55
57
|
| **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> |
|
|
56
58
|
| **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> |
|
|
57
59
|
| **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> |
|
|
58
60
|
| **İ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> |
|
|
59
|
-
| **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 izin verilir. Başlıktaki küçük bir etiket izinleri 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> |
|
|
61
|
+
| **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> |
|
|
60
62
|
| **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> |
|
|
63
|
+
| **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> |
|
|
61
64
|
| **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> |
|
|
62
65
|
| **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> |
|
|
63
66
|
| **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> |
|
|
64
67
|
| **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> |
|
|
65
68
|
| **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> |
|
|
66
69
|
| **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> |
|
|
67
|
-
| **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, 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. | <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> |
|
|
70
|
+
| **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, 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> |
|
|
68
71
|
| **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> |
|
|
69
72
|
|
|
70
73
|
<!-- END GENERATED FEATURES -->
|
|
@@ -119,15 +122,15 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
119
122
|
- **Devam et:** kimlik doğrulamalı yerel uç nokta, yalnızca kesintiye uğrayan son turu sürdürür. Eski veya yinelenen istekleri reddeder ve mevcut onay kancalarını korur. Yeni bir kullanıcı mesajı göndermez.
|
|
120
123
|
- **Yeniden açılışta sürdür:** siz açana kadar kapalıdır. Host tarafı yalnızca sohbet kimliklerini ve başlangıç zamanlarını `$DSH_HOME/storages/dsh-composer-plus/resume.json` dosyasında saklar (yalnızca sahibin erişebildiği izinlerle). Hiçbir veri bilgisayarınızdan çıkmaz. Bir sohbeti yalnızca dsh’nin kendi günlüğü, son turu sizin değil dsh’nin durdurduğunu gösteriyorsa sürdürür. Onaylar ve Otomatik inceleme, sürdürülen tura her zamanki gibi uygulanır.
|
|
121
124
|
|
|
122
|
-
- **Değişiklikler paneli:** git, bilgisayarınızda salt okunur olarak, sohbetin kendi klasöründe ve dsh’nin kimlik doğrulamalı `/api` kanalı üzerinden çalışır. Hiçbir zaman commit, stage veya fetch yapmaz. Yalnızca git’in kendisinin listelediği yolları gösterir.
|
|
125
|
+
- **Değişiklikler paneli:** git, bilgisayarınızda salt okunur olarak, sohbetin kendi klasöründe ve dsh’nin kimlik doğrulamalı `/api` kanalı üzerinden çalışır. Hiçbir zaman commit, stage veya fetch yapmaz. Yalnızca git’in kendisinin listelediği yolları gösterir. Ağaç, yerel ve uzak dalların en yeni 300 commit’ini gösterir. Hiçbir zaman dal değiştirmez (checkout yapmaz). commit-graph dosyası olmayan çok büyük bir depoda ağacın açılması birkaç saniye sürebilir. **Bu sohbet**, dosya araçlarının yazdığı dosyaları sohbetin kendi günlüğünden okur. Bu dosyaları, hemen silinen geçici bir klasörde sohbetin Tur geri alma anlık görüntüsüyle karşılaştırır. Deponuza ya da anlık görüntülerin ayrı deposuna hiçbir şey yazmaz.
|
|
123
126
|
- **Özellik fikirleri:** siz **Özellik öner** düğmesine tıklayana kadar hiçbir şey çalışmaz. Sonra Host tarafı yalnızca sohbetin kendi klasörünü okur (tarayıcı hiçbir zaman yol göndermez). Okunanlar şunlardır: üst düzey öğelerin adları; README, AGENTS.md ve manifest dosyasının (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) ilk 6 kB’ı ve `git log --oneline -15`. Toplam en çok 16 kB’tır. `.env*` dosyalarını, anahtar dosyalarını ve `node_modules` gibi klasörleri atlar. Yalnızca klasörün içinde kalan normal dosyaları okur: klasörün dışını gösteren bir sembolik bağlantı, bir FIFO veya bir aygıt atlanır. Bu özet, dsh’nin kendi sağlayıcı ayarları üzerinden sohbetin kullandığı modele tek bir istek olarak gider. Hiçbir sohbete eklenmez. Projeye hiçbir şey yazılmaz. Sağa kaydırılan bir fikir, plan modunda yeni bir sohbet başlatır. Bu yüzden onaylar ve plan incelemesi her zamanki gibi uygulanır. **Hemen uygula**, sohbeti plan modu olmadan başlatır: model dosyaları hemen değiştirebilir. Sohbetin her zamanki onayları ve Otomatik inceleme uygulanır. Sonraya saklanan fikirler (başlık, özet, gerekçe, efor), projenin klasör yoluyla birlikte dsh ana klasöründeki `storages/dsh-composer-plus/later.json` dosyasında saklanır (yalnızca sahibin erişebildiği dosya). Projeye hiçbir şey gitmez. Önerilen fikirlerin geçmişi (başlık, özet, gerekçe, efor, tarih, başlatılıp başlatılmadığı) aynı biçimde `storages/dsh-composer-plus/idea-history.json` dosyasında saklanır. Proje başına en çok 200 fikir tutulur (önce en eskiler silinir). Bu fikirlerin başlıkları, o projedeki bir sonraki **Özellik öner** isteğiyle modele gider.
|
|
124
127
|
- **İçerik araması:** sohbetlerinizde yeni bir kod arama yapmaz. Eklenti yalnızca dsh’nin kendi mesaj dizinini (SQLite FTS5, `dsh-session-query-sqlite`) açar ve ona bir dosya verir: `$DSH_HOME/cache/composer-plus/session-search.db` (dosyaya ve klasöre yalnızca sahibi erişebilir). Dosya, kullanıcı ve asistan mesajlarınızın metnini içerir. Bu yüzden `$DSH_HOME/sessions` içindeki sohbet günlükleri kadar özeldir. Hiçbir veri bilgisayarınızdan çıkmaz. Dosya, dsh’nin yeniden oluşturabileceği bir kopyadır: dsh kapalıyken onu silebilirsiniz. Anahtar `$DSH_HOME/storages/dsh-composer-plus/content-search.json` dosyasındadır.
|
|
125
|
-
- **Tur geri alma:** Host, her mesajınızdan önce sohbetin klasörünün bir git anlık görüntüsünü alır ve bunu kendi ayrı deposunda saklar: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (yalnızca sahibin erişebildiği klasör). Bu depo, o klasörde git’in gördüğü dosyaların kopyalarını tutar (yok sayılan dosyaları tutmaz). Bu yüzden proje kadar özeldir. Deponuzun nesnelerini okur (git’te zaten olanların kopyasını almaz). Deponuzun index’ine, `HEAD`’ine, dallarına, etiketlerine, stash’ine veya yapılandırmasına hiçbir zaman yazmaz. git’in orada yaptığı tek değişiklik, yeniden kullandığı nesne dosyalarının zaman damgasını yenilemektir (bu, `git gc` ile temizlenmelerini geciktirir). Dosyalarla geri alma, yalnızca sohbetin klasöründeki normal dosyalara yazar. Sembolik bağlantıları, kanalları (pipe) ve klasörün dışındaki her şeyi atlar. Hiçbir veri bilgisayarınızdan çıkmaz. Bu ayrı depoyu dsh kapalıyken silebilirsiniz (bu durumda yeni mesajlar gelene kadar geri alma yalnızca sohbet için çalışır). **Sohbeti sil**, sohbetin ayrı deposunu da siler. Anahtar `$DSH_HOME/storages/dsh-composer-plus/rollback.json` dosyasındadır.
|
|
128
|
+
- **Tur geri alma:** Host, her mesajınızdan önce sohbetin klasörünün bir git anlık görüntüsünü alır ve bunu kendi ayrı deposunda saklar: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (yalnızca sahibin erişebildiği klasör). Bu depo, o klasörde git’in gördüğü dosyaların kopyalarını tutar (yok sayılan dosyaları tutmaz). Bu yüzden proje kadar özeldir. Deponuzun nesnelerini okur (git’te zaten olanların kopyasını almaz). Deponuzun index’ine, `HEAD`’ine, dallarına, etiketlerine, stash’ine veya yapılandırmasına hiçbir zaman yazmaz. git’in orada yaptığı tek değişiklik, yeniden kullandığı nesne dosyalarının zaman damgasını yenilemektir (bu, `git gc` ile temizlenmelerini geciktirir). Dosyalarla geri alma, yalnızca sohbetin klasöründeki normal dosyalara yazar. Sembolik bağlantıları, kanalları (pipe) ve klasörün dışındaki her şeyi atlar. Hiçbir veri bilgisayarınızdan çıkmaz. Bu ayrı depoyu dsh kapalıyken silebilirsiniz (bu durumda yeni mesajlar gelene kadar geri alma yalnızca sohbet için çalışır). **Sohbeti sil**, sohbetin ayrı deposunu da siler. Anahtar `$DSH_HOME/storages/dsh-composer-plus/rollback.json` dosyasındadır. Dosyalarla geri alma, dosyaların geri almadan hemen önceki hâlini de **Yeniden uygula** için saklar (aynı ayrı depoda, `refs/r/…`). Yeniden uygulanan geri almalar `$DSH_HOME/storages/dsh-composer-plus/redone.json` dosyasında listelenir (yalnızca sahibin erişebildiği dosya).
|
|
126
129
|
- **Sohbeti Markdown olarak dışa aktar:** Host tarafı yalnızca sohbetin kendi günlüğünü okur (dsh’nin gösterdiği mesajların aynısı) ve bunları sayfaya verir. Hiçbir proje dosyasını okumaz ve ağ üzerinden hiçbir şey göndermez. Markdown metni yalnızca panonuza ya da kaydettiğiniz dosyaya gider.
|
|
127
130
|
- **Sohbeti sil:** sohbetin kendi günlük klasörlerini (`$DSH_HOME/sessions/<project>/<chat>`) Çöp Sepeti’ne taşır. Proje klasörüne dokunmaz.
|
|
128
|
-
- **Sohbet boyunca izin:** izinler `$DSH_HOME/storages/dsh-composer-plus/grants.json` dosyasında saklanır (yalnızca sahibin erişebildiği izinlerle). Bir izin, tek bir sohbetteki tek bir aracı kapsar. O araç yazabiliyorsa izin her türlü yazmayı da kapsar. İzni başlıktaki etiketten kaldırın.
|
|
131
|
+
- **Sohbet boyunca izin:** izinler, verildikleri zamanla birlikte `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` dosyasında saklanır (yalnızca sahibin erişebildiği izinlerle). Bir izin, tek bir sohbetteki tek bir aracı süre sınırı dolana kadar kapsar (varsayılan olarak 1 saat). O araç yazabiliyorsa izin her türlü yazmayı da kapsar. İzni başlıktaki etiketten kaldırın.
|
|
129
132
|
- Otomatik inceleme yine her çağrıda çalışır. İnceleme hataları hiçbir zaman otomatik olarak onaylanmaz.
|
|
130
|
-
- **Mobil bağlantı:** siz açana kadar kapalıdır. Açıkken Host tarafı Tether ağ geçidini çalıştırır. Ağ geçidinde iki bölüm vardır: 19390 numaralı portta yalnızca Wi-Fi alt ağınızı ve tailnet’inizi (100.64.0.0/10) kabul eden HTTPS ve `127.0.0.1:19391` adresinde bir eşleştirme sayfası (yalnızca bu Mac). Bir telefonun eşleşmesi için QR kodundan tek kullanımlık bir kod (5 dakika geçerli) ve sizin Mac’te **Approve** ile onay vermeniz gerekir. Telefon, ağ geçidinin sertifikasını sabitler (pinning). Mac, her telefonun token’ının yalnızca bir özetini (hash) tutar (30 gün; kullanıldıkça yenilenir). **Remove** o telefonun bağlantılarını hemen kapatır. Telefonlar yalnızca izin listesindeki dsh yöntemlerini çağırabilir (sohbetler, istemler, ekler, eğik çizgi komutları, onaylar, sorular, modeller, ajanlar, hedefler). Ayarları, kimlik bilgilerini, dosya tarayıcısını veya terminali çağıramaz. Veriler: `$DSH_HOME/storages/dsh-composer-plus/mobile
|
|
133
|
+
- **Mobil bağlantı:** siz açana kadar kapalıdır. Açıkken Host tarafı Tether ağ geçidini çalıştırır. Ağ geçidinde iki bölüm vardır: 19390 numaralı portta yalnızca Wi-Fi alt ağınızı ve tailnet’inizi (100.64.0.0/10) kabul eden HTTPS ve `127.0.0.1:19391` adresinde bir eşleştirme sayfası (yalnızca bu Mac). Bir telefonun eşleşmesi için QR kodundan tek kullanımlık bir kod (5 dakika geçerli) ve sizin Mac’te **Approve** ile onay vermeniz gerekir. Telefon, ağ geçidinin sertifikasını sabitler (pinning). Mac, her telefonun token’ının yalnızca bir özetini (hash) tutar (30 gün; kullanıldıkça yenilenir). **Remove** o telefonun bağlantılarını hemen kapatır. Telefonlar yalnızca izin listesindeki dsh yöntemlerini çağırabilir (sohbetler, istemler, ekler, eğik çizgi komutları, onaylar, sorular, modeller, ajanlar, hedefler). Ayarları, kimlik bilgilerini, dosya tarayıcısını veya terminali çağıramaz. "Tailscale only" yerel ağdan gelen her bağlantıyı reddeder ve zaten açık olan bağlantıları da kapatır. Erişim günlüğü en yeni 200 bağlantı denemesini (zaman, IP adresi, cihaz adı, izin verildi ya da reddedildi ve nedeni) `access.json` dosyasında tutar. Günlükte hiçbir zaman bir token ya da eşleştirme kodu bulunmaz. Veriler: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (yalnızca sahibin erişebildiği dosyalar). Ayrıntılar: [tether/README.md](tether/README.md).
|
|
131
134
|
- **Güncellemeler:** Host tarafı en son sürümü `api.github.com` adresine, o sürümün kendisini de `registry.npmjs.org` adresine sorar. Size veya sohbetlerinize ait hiçbir bilgi gönderilmez. Yükleme, dsh’nin eklenti yöneticisiyle yapılır (`pnpm add dsh-composer-plus@<version>`; dsh 0.2.1 yüklü bir eklenti için bunu reddederse `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz` kullanılır ve profil bundan sonra bu URL’yi eklentinin kaynağı olarak listeler). Bu yüzden dsh’nin kendi kayıt defteri, betik ve sürüm uyumluluğu denetimleri uygulanır. Ön sürüm etiketleri ve daha eski sürümler hiçbir zaman yüklenmez.
|
|
132
135
|
- **Sonraki mesaj tahmini:** varsayılan olarak açıktır. Bu model çağrılarını durdurmak için özelliği **Ayarlar → Composer Plus** içinden kapatın. Biten her turdan sonra Host tarafı, sohbetteki kendi mesajlarınızı ve ajanın metin yanıtlarını seçilen modele gönderir (siz başka bir model seçmediyseniz dsh’nin varsayılan modeli). Araç çıktısı, gizli bağlam ve akıl yürütme metni gönderilmez. En çok yaklaşık 6.000 karakter (en yeni kısım) gider. İstek, dsh’nin kendi sağlayıcı ayarları üzerinden tek bir istek olarak gider. Sohbete hiçbir şey kaydedilmez: tahmin sohbet geçmişine eklenmez. Anahtar ve model seçimi `$DSH_HOME/storages/dsh-composer-plus/predict.json` dosyasındadır (yalnızca sahibin erişebildiği dosya).
|
|
133
136
|
- **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).
|
|
@@ -144,8 +147,9 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
144
147
|
- **Mesajlarımda ↶ düğmesi yok:** Tur geri alma kapalı, sohbet bir alt ajan sohbeti ya da dsh-rewind-plugin yüklü (onun ↶ düğmesini kullanın). Bir güncellemeden sonra dsh’yi yeniden başlatın.
|
|
145
148
|
- **Sohbet ve dosyalar soluk görünüyor:** proje bir git deposu değil, o mesajdan önce alınmış bir anlık görüntü yok (mesaj eklentiden daha eski ya da en yeni 50 anlık görüntü onun yerini aldı) veya hiçbir dosya değişmedi.
|
|
146
149
|
- **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.
|
|
150
|
+
- **"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.
|
|
147
151
|
- **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).
|
|
148
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.
|
|
152
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.13.0`) ve yukarıdaki kurulum notuna bakın.
|
|
149
153
|
|
|
150
154
|
## Sınırlar
|
|
151
155
|
|
|
@@ -161,9 +165,14 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
161
165
|
- **Sohbeti sil** için dsh’nin arşivleme özelliği gerekir (dsh 0.2.0 ve sonrası). 15 sn içinde durmayan ya da başka bir dsh’nin tuttuğu bir sohbet (veya alt ajan sohbetlerinden biri) arşivlenmiş olarak kalır ve hiçbir şey taşınmaz. macOS dışındaki sistemlerde çöp klasörü, sohbet geçmişiyle aynı diskte olmalıdır. Sildiğiniz açık bir sohbet, dsh yeniden başlayana kadar dsh’nin belleğinde arşivlenmiş ve gizli olarak kalır. Çöp Sepeti’ni kendiniz boşaltın; dsh bunu yapmaz.
|
|
162
166
|
- dsh’nin kuyruğunda `move` işlemi yoktur. Bu yüzden eklentinin Host tarafı, sıradaki mesajın kendisini dsh’nin kuyruğunda taşır (tek bir değişiklik, aynı mesaj). Görsel veya dosya içeren mesajlar da taşınır. Yalnızca kendi mesajlarınız taşınır: kuyruktaki bir hedef turu veya bir soruya verilen yanıt yerinde kalır. Siz sürüklerken bir mesajın gönderimi başlarsa hiçbir şey taşınmaz ve bunu bildiren bir uyarı görünür.
|
|
163
167
|
- 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.
|
|
168
|
+
- **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.
|
|
164
169
|
- **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.
|
|
165
|
-
- **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). iOS uygulaması henüz App Store’da değildir: uygulamayı Xcode ile `tether/ios` klasöründen derleyin. 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.
|
|
166
|
-
- Oturum bağlantısı sohbetlerin içinde çalışır; bağlantıya tıklamak sohbeti açmaz.
|
|
170
|
+
- **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). 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.
|
|
171
|
+
- 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.
|
|
172
|
+
- **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.
|
|
173
|
+
- **Kuyruktaki mesajı yerinde düzenle**, dsh’nin kendi kuyruk düzenleyicisini açar. Bu yüzden onun sınırları da geçerlidir: görsel ya da dosya içeren bir mesaj düzenlenemez. Bu arada gönderilmeye başlayan bir mesaj değişmez (dsh kendi hatasını gösterir).
|
|
174
|
+
- **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.
|
|
175
|
+
- **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.
|
|
167
176
|
- Yeniden başlatmadan önce gönderilen bir bildirime tıklamak yalnızca dsh’yi öne getirir.
|
|
168
177
|
- 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.
|
|
169
178
|
- 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. Filtreyi **Çalışma alanı** ile kullanın: **Çalışma alanı ağacı** görünümünde gizlenen bir üst klasör, içindeki etkin projeleri de gizler. **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.
|
|
@@ -200,7 +209,21 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
200
209
|
|
|
201
210
|
**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.
|
|
202
211
|
|
|
203
|
-
**
|
|
212
|
+
**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.
|
|
213
|
+
|
|
214
|
+
**Bir projenin tüm okunmamış noktalarını bir kerede nasıl temizlerim?** Kenar çubuğu → projenin **…** düğmesi → **Tümünü okundu işaretle**.
|
|
215
|
+
|
|
216
|
+
**Uzun bir sohbetteki tek bir mesaja bağlantı verebilir miyim?** Evet: mesajın üzerine gelin ve **🔗** düğmesine tıklayın. Bağlantıyı bir sohbette gönderin: dsh 0.2.1 ve sonrasında bağlantıya tıklayınca sohbet o mesajda açılır.
|
|
217
|
+
|
|
218
|
+
**Bir turu yanlışlıkla geri aldım. Geri getirebilir miyim?** Evet, geri almadan hemen sonra mesaj alanının üstündeki **Yeniden uygula** ile. Geri almadan hemen önceki andan aynı mesajlarla yeni bir sohbet başlatır. **Sohbet ve dosyalar** ile geri aldıysanız dosyaları da geri koyar.
|
|
219
|
+
|
|
220
|
+
**Yalnızca bir sohbetin değiştirdiği dosyaları nasıl görürüm?** Sağ kenar çubuğu → **Değişiklikler** → **Bu sohbet**. Yalnızca boşluk olan değişiklikleri gizlemek için **␣** düğmesine tıklayın.
|
|
221
|
+
|
|
222
|
+
**Otomatik inceleme’nin tek bir sohbette aynı araç için tekrar sormasını nasıl durdururum?** Onay kartında **Bu sohbet boyunca izin ver** düğmesine tıklayın. Bu izin yalnızca o sohbetteki o aracı kapsar ve varsayılan olarak 1 saat sürer. İzni başlıktaki etiketten kaldırın. Süreyi **Ayarlar → Composer Plus → Sohbet boyunca izin** içinden değiştirin.
|
|
223
|
+
|
|
224
|
+
**iPhone’umu kaybettim. Mac’ime erişmesini nasıl engellerim?** Kenar çubuğunun sol altındaki **Mobil bağlantı** düğmesine tıklayın, sonra o iPhone’un yanındaki **Remove** düğmesine tıklayın. iPhone’un anahtarı hemen geçersiz olur. iPhone, ancak sizin Mac’te onayladığınız yeni bir eşleştirmeyle yeniden bağlanabilir.
|
|
225
|
+
|
|
226
|
+
**Tether’i Face ID ile kilitleyebilir miyim?** Evet: Tether’de "Settings → Privacy → Lock with Face ID" seçeneğini açın. Bundan sonra Tether, açıldığında ve ona geri döndüğünüzde Face ID (ya da parola) ister.
|
|
204
227
|
|
|
205
228
|
**dsh kenar çubuğunda yalnızca bugün kullandığım projeleri nasıl gösteririm?** Kenar çubuğu → görünüm seçenekleri (kaydırıcı simgesi) → **Son 2 saatte aktif olanlar**. Tüm projeleri göstermek için seçeneği yeniden seçin.
|
|
206
229
|
|
package/README.vi.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sau đó khởi động lại dsh. (CLI không cài được vào profile desktop; ứng dụng tự quản lý profile này.)
|
|
31
31
|
|
|
32
|
-
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.13.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -37,10 +37,10 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
37
37
|
|
|
38
38
|
| Tính năng | Cách dùng | Ảnh chụp màn hình |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Bảng thay đổi** | <a id="feature-changespanel"></a>Thanh bên phải → `+` → **Thay đổi**. Chọn **Chưa commit**, **Chưa stage**, **Đã stage** hoặc **Branch** để xem các tệp đã thay đổi kèm số dòng `+/-`. Nhấp vào một tệp để xem diff của tệp đó. **Lượt gần nhất** mở trang xem lại của chính dsh cho lượt mới nhất. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Ảnh chụp màn hình: Bảng thay đổi"></a> |
|
|
40
|
+
| **Bảng thay đổi** | <a id="feature-changespanel"></a>Thanh bên phải → `+` → **Thay đổi**. Chọn **Chưa commit**, **Chưa stage**, **Đã stage** hoặc **Branch** để xem các tệp đã thay đổi kèm số dòng `+/-`. Nhấp vào một tệp để xem diff của tệp đó. **Lượt gần nhất** mở trang xem lại của chính dsh cho lượt mới nhất. Nhấp vào tên branch (hoặc chọn **Cây**) để xem cây branch: nhấp vào một branch phía trên để đi tới branch đó, nhấp vào một commit để xem các tệp và diff của commit đó. **Cuộc trò chuyện này** chỉ liệt kê các tệp mà công cụ tệp (write, edit) của cuộc trò chuyện đang mở đã ghi, trong mọi lượt của nó, cùng tổng diff kể từ tin nhắn đầu tiên. Nút **␣** ẩn các thay đổi khoảng trắng (`git diff -w`): các dòng chỉ thay đổi về thụt lề hoặc ký tự xuống dòng sẽ không hiện. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Ảnh chụp màn hình: Bảng thay đổi"></a> |
|
|
41
41
|
| **Ý tưởng tính năng** | <a id="feature-featureideas"></a>Thanh bên phải → `+` → **Ý tưởng tính năng** → **Đề xuất tính năng**. Mô hình của chính cuộc trò chuyện đọc bản tóm tắt ngắn về dự án của cuộc trò chuyện (các tệp ở cấp cao nhất, phần đầu của README và tệp manifest, 15 commit gần nhất). Sau đó mô hình đề xuất tối đa 8 tính năng, hiện thành một chồng thẻ bằng ngôn ngữ giao diện của dsh. Vuốt thẻ sang phải (hoặc nhấp **✓**, hoặc nhấn `→`; trong mọi trường hợp, thẻ bay về phía tương ứng) để bắt đầu một cuộc trò chuyện mới trong cùng dự án. Cuộc trò chuyện này bắt đầu ở chế độ kế hoạch, với ý tưởng làm yêu cầu, nên không có gì thay đổi trước khi bạn phê duyệt kế hoạch. Để bỏ qua kế hoạch, nhấp **▶ Xây dựng ngay** (hoặc nhấn `↑`; thẻ bay lên trên): cuộc trò chuyện mới bắt đầu ngay với ý tưởng làm yêu cầu bình thường, và mô hình thực hiện thay đổi rồi chạy các bước kiểm tra (phê duyệt vẫn áp dụng như thường lệ). Vuốt sang trái (hoặc **✕**, hoặc `←`) để bỏ qua. **Hoàn tác** (hoặc `Z`) đưa thẻ đã bỏ qua trở lại. Nhấp **↓** (hoặc nhấn `↓`) để lưu một ý tưởng hay để làm sau. Ý tưởng đi vào danh sách **Để sau** của dự án. Mọi cuộc trò chuyện trong cùng thư mục dự án đều hiện danh sách này (kể cả sau khi khởi động lại). **Để sau (N)** mở danh sách. **Lập kế hoạch** bắt đầu cùng kiểu cuộc trò chuyện ở chế độ kế hoạch cho ý tưởng đó, còn **Xây dựng ngay** bắt đầu cuộc trò chuyện không có kế hoạch; cả hai đều gỡ ý tưởng khỏi danh sách. **Lập kế hoạch tất cả (N)** bắt đầu một cuộc trò chuyện duy nhất ở chế độ kế hoạch cho mọi ý tưởng trong danh sách, nên các phần chung chỉ cần lập kế hoạch một lần. **Xóa khỏi danh sách** xóa ý tưởng. **Sao chép dạng danh sách kiểm tra** sao chép toàn bộ danh sách vào bộ nhớ tạm dưới dạng danh sách kiểm tra Markdown (`- [ ] Title — Summary`, mỗi ý tưởng một dòng) để dùng trong trình theo dõi vấn đề hoặc tệp TODO; tính năng này không gửi gì qua mạng. **Thêm ý tưởng** thêm thẻ mới. Để chỉ nhận ý tưởng về một lĩnh vực, hãy nhập một **Chủ đề trọng tâm** ngắn vào ô bên cạnh **Đề xuất tính năng** (tối đa 80 ký tự; `Enter` cũng đề xuất), hoặc nhấp một trong các chủ đề cố định bên dưới ô: **Hiệu năng**, **Trợ năng**, **Kiểm thử**, **Bảo mật**, **Dễ dùng** hoặc **Tài liệu** (nhấp lại để xóa chủ đề). Khi đó, mô hình chỉ đề xuất các tính năng về chủ đề đó; ô trống nghĩa là tính năng bất kỳ. Trong một dự án, ý tưởng không được đề xuất hai lần: mọi ý tưởng đã đề xuất (đã bỏ qua, đã lưu hoặc đã bắt đầu) đều vào **Lịch sử** của dự án, mô hình được dặn không đề xuất lại những ý tưởng đó, và tiêu đề lặp lại sẽ bị loại bỏ. **Lịch sử** liệt kê chúng với nhãn **Đã bắt đầu** hoặc **Đã đề xuất**; **Quên** (hoặc **Quên tất cả**) cho phép một ý tưởng xuất hiện lại; ý tưởng vẫn còn trong danh sách **Để sau** sẽ không được đề xuất cho đến khi bạn xóa nó khỏi đó. Mô hình chỉ chạy khi bạn nhấp. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Ảnh chụp màn hình: Ý tưởng tính năng"></a> |
|
|
42
42
|
| **Tìm trong nội dung** | <a id="feature-contentsearch"></a>Ô tìm kiếm có sẵn trên thanh bên của dsh (kính lúp cạnh **Không gian làm việc**; `Cmd+K` trong ứng dụng desktop, `Cmd+Alt+K` trong trình duyệt) cũng tìm cuộc trò chuyện theo các từ trong tin nhắn của bạn và trong câu trả lời, không chỉ theo tiêu đề. Đoạn văn khớp hiện bên dưới cuộc trò chuyện. dsh đã có sẵn tìm kiếm này nhưng để tắt. Tính năng này bật nó lên, với một tệp chỉ mục tìm kiếm trên máy tính của bạn. Chỉ mục được tạo ở lần tìm đầu tiên sau khi khởi động (khoảng 15 giây cho 250 cuộc trò chuyện, xem Giới hạn) và được giữ lại cho các lần khởi động sau. Mặc định bật. Thay đổi có hiệu lực sau khi bạn khởi động lại dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Ảnh chụp màn hình: Tìm trong nội dung"></a> |
|
|
43
|
-
| **Hoàn tác lượt** | <a id="feature-turnrollback"></a>Di chuột lên một tin nhắn của bạn và nhấp **↶** (cạnh nút Sao chép). **Chỉ cuộc trò chuyện** đưa tin nhắn đó và mọi thứ sau nó (câu trả lời, lệnh gọi công cụ) ra khỏi cuộc trò chuyện và ra khỏi ngữ cảnh của mô hình. Tin nhắn trở lại khung soạn thảo: bạn sửa rồi gửi lại. **Cuộc trò chuyện và tệp** trước tiên liệt kê các tệp của dự án đã thay đổi kể từ tin nhắn đó, rồi đưa cả các tệp này về trạng thái cũ. Việc này gồm cả thay đổi do lệnh (`bash`) tạo ra, không chỉ thay đổi từ công cụ sửa tệp của dsh. Nếu một lượt đang chạy, lượt đó dừng trước. Nhật ký cuộc trò chuyện không bao giờ bị ghi lại: một dấu ẩn duy nhất che phần đã rút lại, giống cách lệnh `/compact` của dsh ẩn các tin nhắn cũ. Khi [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) đã được cài, plugin đó làm việc này và Composer Plus không hiện nút thứ hai. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Ảnh chụp màn hình: Hoàn tác lượt"></a> |
|
|
43
|
+
| **Hoàn tác lượt** | <a id="feature-turnrollback"></a>Di chuột lên một tin nhắn của bạn và nhấp **↶** (cạnh nút Sao chép). **Chỉ cuộc trò chuyện** đưa tin nhắn đó và mọi thứ sau nó (câu trả lời, lệnh gọi công cụ) ra khỏi cuộc trò chuyện và ra khỏi ngữ cảnh của mô hình. Tin nhắn trở lại khung soạn thảo: bạn sửa rồi gửi lại. **Cuộc trò chuyện và tệp** trước tiên liệt kê các tệp của dự án đã thay đổi kể từ tin nhắn đó, rồi đưa cả các tệp này về trạng thái cũ. Việc này gồm cả thay đổi do lệnh (`bash`) tạo ra, không chỉ thay đổi từ công cụ sửa tệp của dsh. Nếu một lượt đang chạy, lượt đó dừng trước. Nhật ký cuộc trò chuyện không bao giờ bị ghi lại: một dấu ẩn duy nhất che phần đã rút lại, giống cách lệnh `/compact` của dsh ẩn các tin nhắn cũ. Khi [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) đã được cài, plugin đó làm việc này và Composer Plus không hiện nút thứ hai. Sau khi hoàn tác, một thanh **Làm lại** hiện phía trên khung soạn thảo. Thanh này bắt đầu một cuộc trò chuyện mới từ ngay trước lúc hoàn tác (cùng các tin nhắn và ngữ cảnh), và với **Cuộc trò chuyện và tệp**, đưa cả các tệp trở lại. Tệp mà bạn đã thay đổi sau khi hoàn tác được liệt kê và giữ lại, trừ khi bạn đánh dấu ô ghi đè tệp đó. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Ảnh chụp màn hình: Hoàn tác lượt"></a> |
|
|
44
44
|
| **Xóa cuộc trò chuyện** | <a id="feature-deletechat"></a>Thanh bên → menu **…** của một cuộc trò chuyện (hoặc nhấp chuột phải) → **Xóa…** → **Xóa**. Bản thân dsh chỉ có thể lưu trữ. Cuộc trò chuyện dừng lại (lượt đang chạy, tác vụ nền, subagent và tác vụ tự động của nó cũng dừng, giống như khi dsh lưu trữ). Lịch sử đã lưu, cùng các cuộc trò chuyện subagent, được chuyển vào Thùng rác của macOS (trên hệ thống khác: `$DSH_HOME/trash`). Để lấy lại, hãy đưa thư mục về chỗ cũ và khởi động lại dsh: cuộc trò chuyện hiện trong chế độ xem **Chỉ mục đã lưu trữ** của thanh bên. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Ảnh chụp màn hình: Xóa cuộc trò chuyện"></a> |
|
|
45
45
|
| **Tên dự án trong khung soạn** | <a id="feature-projectname"></a>Dòng bên dưới khung soạn thảo (số lượt, token, tỷ lệ trúng cache, ngữ cảnh) bắt đầu bằng tên dự án của cuộc trò chuyện. Nhờ đó bạn luôn biết cuộc trò chuyện đang làm việc trong dự án nào. Đây là tiêu đề dự án của chính dsh, hoặc tên thư mục khi dự án không có tiêu đề. Di chuột lên tên để xem đường dẫn đầy đủ của thư mục. Nhấp vào tên để tìm cuộc trò chuyện trên thanh bên, trong chế độ xem danh sách hoặc theo dự án: thanh bên và dự án mở ra (kể cả dự án đã thu gọn và mục **Hiện thêm N phiên** của nó), danh sách cuộn đến cuộc trò chuyện và cuộc trò chuyện nhấp nháy trong 5 giây. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Ảnh chụp màn hình: Tên dự án trong khung soạn"></a> |
|
|
46
46
|
| **Lịch sử nhập** | <a id="feature-inputhistory"></a>Trong khung soạn thảo trống, nhấn `↑` / `↓` để duyệt qua các tin nhắn bạn đã gửi, giống như trong terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Ảnh chụp màn hình: Lịch sử nhập"></a> |
|
|
@@ -49,22 +49,25 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
49
49
|
| **Tiếp tục bằng một cú nhấp** | <a id="feature-continuebutton"></a>Sau một lượt đã dừng, thất bại hoặc bị cắt ngang, khung soạn thảo trống hiện **▶**. Một cú nhấp sẽ tiếp tục từ cuộc hội thoại hiện có, không cần gõ gì vào ô nhập và không thêm tin nhắn hiển thị vào cuộc trò chuyện. (Mô hình nhận một ghi chú ẩn ngắn “tiếp tục từ chỗ đã dừng”, vì một số nhà cung cấp như Claude từ chối yêu cầu kết thúc bằng câu trả lời của trợ lý.) Tin nhắn trong hàng đợi vẫn ở đó: ▶ chỉ tiếp tục tác vụ đã dừng, sau đó hàng đợi mới chạy. Lượt đã hoàn tất vẫn giữ nút Gửi thông thường. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Ảnh chụp màn hình: Tiếp tục bằng một cú nhấp"></a> |
|
|
50
50
|
| **Tiếp tục sau khi khởi động lại** | <a id="feature-resumeafterrestart"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Nếu bạn thoát dsh (hoặc dsh bị đóng) khi một cuộc trò chuyện đang làm việc, cuộc trò chuyện đó tự tiếp tục khi bạn mở lại dsh, với cùng ghi chú ẩn như Tiếp tục bằng một cú nhấp. Nếu một vòng mục tiêu (`/goal`) đang chạy, mục tiêu tiếp tục với vòng kế tiếp (mỗi lần khởi động, dsh tạm dừng các mục tiêu cho đến khi bạn tiếp tục chúng). Các cuộc trò chuyện bạn đã dừng, đã xong hoặc đã thất bại không tiếp tục. Bản thân dsh không có cài đặt cho việc này: dsh chỉ đánh dấu lượt như vậy là bị ngắt. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Ảnh chụp màn hình: Tiếp tục sau khi khởi động lại"></a> |
|
|
51
51
|
| **Kéo thả hàng đợi** | <a id="feature-queuereorder"></a>Tin nhắn trong hàng đợi có một tay nắm (⠿). Kéo để sắp xếp lại, hoặc đặt tiêu điểm vào tay nắm rồi nhấn `↑` / `↓`. `Esc` hủy thao tác. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Ảnh chụp màn hình: Kéo thả hàng đợi"></a> |
|
|
52
|
+
| **Sửa tin nhắn trong hàng đợi tại chỗ** | <a id="feature-queueedit"></a>Nhấp đúp vào một tin nhắn trong hàng đợi. Tin nhắn biến thành ô chỉnh sửa của chính dsh: sửa văn bản, rồi nhấn `Enter` để lưu hoặc `Esc` để hủy. Tin nhắn giữ nguyên vị trí trong hàng đợi. Không thể sửa theo cách này các tin nhắn có hình ảnh hoặc tệp (hàng đợi của dsh chỉ sửa văn bản). | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Ảnh chụp màn hình: Sửa tin nhắn trong hàng đợi tại chỗ"></a> |
|
|
52
53
|
| **Sao chép liên kết phiên** | <a id="feature-copydeeplink"></a>Nhấp chuột phải vào một cuộc trò chuyện trên thanh bên → **Sao chép liên kết phiên**. Dán liên kết `dsh-session:…` vào một cuộc trò chuyện khác để đính kèm cuộc trò chuyện đó làm ngữ cảnh chỉ đọc. dsh 0.2.1 có mục **Sao chép ID phiên** riêng, mục này chỉ sao chép ID thuần; mục của plugin nằm ngay sau nó. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Ảnh chụp màn hình: Sao chép liên kết phiên"></a> |
|
|
54
|
+
| **Sao chép liên kết tin nhắn** | <a id="feature-copymessagelink"></a>Di chuột lên một tin nhắn và nhấp **🔗** (trong hàng thao tác của tin nhắn; với câu trả lời, nút nằm cạnh thời gian). Liên kết là liên kết phiên cộng với số thứ tự của tin nhắn: `dsh-session:…#42`. Dán liên kết vào một tin nhắn rồi gửi. Trên dsh 0.2.1 trở lên, liên kết hiện dưới dạng một nhãn nhỏ. Nhấp vào nhãn sẽ mở cuộc trò chuyện đó, cuộn tới tin nhắn và tô sáng tin nhắn trong 2 giây. Giống liên kết phiên, liên kết này cũng đính kèm cuộc trò chuyện đó làm ngữ cảnh chỉ đọc. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Ảnh chụp màn hình: Sao chép liên kết tin nhắn"></a> |
|
|
53
55
|
| **Xuất cuộc trò chuyện dạng Markdown** | <a id="feature-exportmarkdown"></a>Nhấp chuột phải vào một cuộc trò chuyện trên thanh bên (hoặc mở menu **…** của nó) → **Xuất dạng Markdown…**. Hộp thoại cho biết cuộc trò chuyện có bao nhiêu tin nhắn. **Sao chép vào bộ nhớ tạm** sao chép cuộc trò chuyện dưới dạng Markdown, còn **Lưu tệp .md** lưu nó thành `<chat title>.md` qua tính năng tải xuống của trình duyệt (dsh desktop: vào thư mục Tải về hoặc qua hộp thoại lưu, tùy theo cài đặt hệ thống của bạn). Tệp có tiêu đề cuộc trò chuyện, tên dự án và ngày, sau đó là một phần `## Bạn` hoặc `## Trợ lý` cho mỗi tin nhắn. Các khối mã được giữ nguyên; khối mã mà một tin nhắn để mở sẽ được đóng lại. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Ảnh chụp màn hình: Xuất cuộc trò chuyện dạng Markdown"></a> |
|
|
54
56
|
| **Sao chép đường dẫn dự án** | <a id="feature-copyprojectpath"></a>Nhấp chuột phải vào một dự án trên thanh bên → **Sao chép đường dẫn** để sao chép đường dẫn đầy đủ của thư mục dự án. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Ảnh chụp màn hình: Sao chép đường dẫn dự án"></a> |
|
|
55
57
|
| **Tìm dự án trong cuộc trò chuyện mới** | <a id="feature-projectpicker"></a>Cuộc trò chuyện mới → nút dự án phía trên khung soạn thảo. Các dự án hiện theo thứ tự A–Z, với ô **Tìm dự án** ở trên cùng. Nhập một phần tên (không phân biệt chữ hoa/thường và dấu) rồi nhấn `Enter` để chọn kết quả đầu tiên. Khi không có gì khớp, dòng **Không có dự án phù hợp** hiện ra. Thứ tự dự án đã lưu của dsh trên thanh bên không thay đổi. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Ảnh chụp màn hình: Tìm dự án trong cuộc trò chuyện mới"></a> |
|
|
56
58
|
| **Dự đoán tin nhắn tiếp theo** | <a id="feature-nextprediction"></a>Mặc định bật: bạn có thể tắt trong **Cài đặt → Composer Plus**. Khi tác tử hoàn tất một lượt (không phải lượt đã dừng hoặc thất bại), khung soạn thảo trống hiện dự đoán tin nhắn tiếp theo của bạn bằng chữ màu xám, kèm gợi ý **Tab để chấp nhận**. `Tab` đưa văn bản vào khung soạn thảo nhưng không gửi. `Esc` ẩn dự đoán trong lượt đó. Khi bạn bắt đầu gõ, dự đoán cũng ẩn đi, và một lượt mới sẽ thay thế nó. Menu **Mô hình** bên dưới công tắc liệt kê các mô hình của chính dsh (cùng danh sách với menu mô hình của dsh). **Mặc định của dsh** được chọn theo mặc định và đi theo mô hình mặc định của dsh. Mỗi lượt đã xong tốn một lần gọi mô hình ngắn. Trong Tether, dự đoán hiện phía trên khung soạn thảo trống: chạm vào để đưa nó vào ô nhập. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Ảnh chụp màn hình: Dự đoán tin nhắn tiếp theo"></a> |
|
|
57
59
|
| **Hoàn thành khi gõ** | <a id="feature-typingcompletion"></a>Mặc định tắt: bạn có thể bật trong **Cài đặt → Composer Plus**. Khi bạn gõ, chữ màu xám ngay sau con trỏ cho thấy tin nhắn của bạn có thể tiếp tục thế nào. `Tab` thêm phần này vào tin nhắn nhưng không gửi. `Esc` ẩn phần này. Tính năng chỉ gợi ý những từ tiếp theo của chính bạn: không bao giờ là câu trả lời cho bạn, và không bịa ra nội dung lỗi hay tên. Khi tin nhắn có vẻ đã đủ hoặc mô hình không chắc chắn, sẽ không có gì hiện ra. Nếu bạn gõ đúng các chữ tiếp theo của phần chữ xám, phần này vẫn giữ nguyên, không có lần gọi mô hình mới. Tính năng có menu **Mô hình** riêng bên dưới công tắc của nó. Mục đầu tiên, **Giống dự đoán tin nhắn tiếp theo**, dùng mô hình của **Dự đoán tin nhắn tiếp theo** (mặc định); hãy chọn mô hình khác để mỗi tính năng dùng một mô hình riêng, ví dụ một mô hình nhanh hơn cho phần hoàn thành. Tính năng gọi mô hình một lần mỗi khi bạn dừng gõ, nên tốn nhiều token hơn nhiều so với dự đoán: hãy chọn một mô hình nhanh, chi phí thấp. Tính năng không chạy với lệnh gạch chéo, tin nhắn có nhãn tệp, hoặc khi con trỏ không ở cuối. Trong Tether, phần còn lại hiện phía trên ô nhập khi bạn gõ: chạm vào để thêm. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Ảnh chụp màn hình: Hoàn thành khi gõ"></a> |
|
|
58
60
|
| **Cải thiện prompt** | <a id="feature-promptimprove"></a>Gõ một yêu cầu sơ bộ, rồi nhấp vào đũa thần (**Cải thiện prompt**) cạnh menu mô hình. Một lần gọi mô hình viết lại yêu cầu thành một prompt rõ ràng hơn: mục tiêu trước, các bước đánh số ngắn khi có nhiều phần, và bước kiểm tra cần chạy. Tính năng đọc cuộc trò chuyện này (bỏ qua các tin nhắn đã bị hoàn tác), README, AGENTS.md và tệp manifest của dự án, các tệp đã thay đổi và các tệp có tên khớp với từ ngữ của bạn, và giữ nguyên ngôn ngữ của bạn. Tính năng không bao giờ bịa ra tên tệp. Văn bản mới thay thế bản nháp của bạn nhưng không được gửi: hãy đọc, sửa, rồi nhấn `Enter`. `Cmd/Ctrl+Z` đưa văn bản của bạn trở lại trong một bước, nút (**Hoàn tác cải thiện**) cũng vậy. Nếu bạn gõ trong lúc tính năng đang chạy, văn bản mới của bạn được giữ lại. `Esc` hoặc nhấp lần nữa để hủy. Tính năng có menu **Mô hình** riêng trong Cài đặt (mặc định: **Giống mô hình của cuộc trò chuyện**). Không dùng cho lệnh gạch chéo hoặc tin nhắn có nhãn tệp. Trong Tether, đũa thần nằm cạnh ô nhập. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Ảnh chụp màn hình: Cải thiện prompt"></a> |
|
|
59
|
-
| **Cho phép trong cuộc trò chuyện này** | <a id="feature-allowforchat"></a>Khi Đánh giá tự động hỏi bạn, thẻ phê duyệt có thêm nút **Cho phép trong cuộc trò chuyện này**: từ đó trở đi, cùng công cụ đó trong cùng cuộc trò chuyện được cho phép, với mọi đối s
|
|
61
|
+
| **Cho phép trong cuộc trò chuyện này** | <a id="feature-allowforchat"></a>Khi Đánh giá tự động hỏi bạn, thẻ phê duyệt có thêm nút **Cho phép trong cuộc trò chuyện này**: từ đó trở đi, cùng công cụ đó trong cùng cuộc trò chuyện được cho phép, với mọi đối số, cho đến khi hết giới hạn thời gian (mặc định 1 giờ; chọn trong **Cài đặt → Composer Plus → Cho phép trong cuộc trò chuyện này**). Sau đó, agent sẽ hỏi lại. Một nhãn nhỏ ở phần đầu liệt kê các quyền đã cấp kèm thời điểm kết thúc và cho phép thu hồi. Quyền vẫn còn sau khi khởi động lại. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Ảnh chụp màn hình: Cho phép trong cuộc trò chuyện này"></a> |
|
|
60
62
|
| **Trạng thái dự án** | <a id="feature-projectstatus"></a>Dòng dự án trên thanh bên hiện cùng dấu đang chạy / đang chờ / xong như các cuộc trò chuyện của nó. Vì vậy, dự án đã thu gọn vẫn cho bạn biết có cuộc trò chuyện bên trong đang làm việc hoặc cần bạn. Cuộc trò chuyện đang chờ bạn được hiện trước, sau đó là cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh, kể cả khi một cuộc trò chuyện khác vẫn đang chạy), rồi đến dấu đang chạy. Di chuột lên để xem chi tiết. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Trạng thái dự án"></a> |
|
|
63
|
+
| **Đánh dấu tất cả là đã đọc** | <a id="feature-markprojectread"></a>Trên thanh bên, nhấp nút **…** của một dự án → **Đánh dấu tất cả là đã đọc**. Mọi cuộc trò chuyện trong dự án đó mất chấm xanh chưa đọc cùng lúc; các dự án khác vẫn giữ chấm của mình. Mục này hiện màu xám (**Không có cuộc trò chuyện chưa đọc**) khi dự án không có cuộc trò chuyện chưa đọc nào. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Ảnh chụp màn hình: Đánh dấu tất cả là đã đọc"></a> |
|
|
61
64
|
| **Ưu tiên dự án đang hoạt động** | <a id="feature-activeprojectsfirst"></a>Khi một cuộc trò chuyện bắt đầu chạy hoặc cần bạn, dự án của nó di chuyển lên đầu thanh bên với hiệu ứng dòng của chính dsh (giống như khi bạn kéo dự án lên đó). Dự án đã xong giữ nguyên vị trí; bạn vẫn kéo chúng đến bất kỳ đâu như thường. Các lần di chuyển được lưu vào thứ tự dự án của dsh, nên khi tắt tính năng này, thứ tự hiện tại được giữ nguyên. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Ưu tiên dự án đang hoạt động"></a> |
|
|
62
65
|
| **Bộ lọc dự án gần đây** | <a id="feature-recentprojects"></a>Thanh bên → tùy chọn hiển thị (biểu tượng thanh trượt) → **Hoạt động trong 2 giờ qua**. Khi tùy chọn này được chọn, thanh bên chỉ hiện các dự án có cuộc trò chuyện hoạt động trong 2 giờ qua: cuộc trò chuyện được cập nhật trong khoảng thời gian này, cuộc trò chuyện đang chạy hoặc đang chờ, cuộc trò chuyện đang mở, hoặc cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh “xong” của dsh), kể cả sau 2 giờ. Các dự án không có cuộc trò chuyện như vậy bị ẩn, kể cả dự án mới và trống. Chọn lại tùy chọn để hiện tất cả dự án. Lựa chọn được lưu trên thiết bị này. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Ảnh chụp màn hình: Bộ lọc dự án gần đây"></a> |
|
|
63
66
|
| **Thu gọn tất cả dự án** | <a id="feature-collapseprojects"></a>Khi có dự án đang mở trên thanh bên, một nút xuất hiện cạnh tùy chọn hiển thị (biểu tượng thanh trượt). Nhấp vào nút để đóng mọi dự án đang mở cùng lúc, ví dụ 3 dự án đang mở trong số 5. Nút lại ẩn đi khi không còn dự án nào mở. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Ảnh chụp màn hình: Thu gọn tất cả dự án"></a> |
|
|
64
67
|
| **Sắp xếp theo trạng thái** | <a id="feature-statusorder"></a>Thanh bên → tùy chọn hiển thị → **Sắp xếp theo** → **Theo trạng thái** (cùng với **Trong một danh sách**). Các cuộc trò chuyện đã xong đứng đầu (chấm “xong” của dsh; lượt kết thúc do lỗi cũng có chấm này), sau đó là cuộc trò chuyện đang chạy hoặc đang chờ, rồi đến cuộc trò chuyện có tự động hóa đang hoạt động (Tác vụ tự động), cuối cùng là phần còn lại theo thứ tự của dsh. Khi bạn mở một cuộc trò chuyện đã xong, nó chuyển xuống dưới. Chỉ chế độ xem thay đổi: chọn **Thủ công** hoặc **Cập nhật gần nhất** để quay lại. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Ảnh chụp màn hình: Sắp xếp theo trạng thái"></a> |
|
|
65
68
|
| **Thông báo nền** | <a id="feature-notifications"></a>Khi dsh chạy nền, bạn nhận thông báo khi một lượt kết thúc (dòng đầu tiên của câu trả lời), hoặc khi một cuộc trò chuyện thật sự chờ bạn: một phê duyệt (tên công cụ), một câu trả lời (câu hỏi) hoặc một lần xem xét kế hoạch. Yêu cầu phải vẫn còn mở sau 1,5 giây, nên các phê duyệt được trả lời tự động (quyền của Đánh giá tự động, plugin khác) không gây thông báo. Thông báo bị thu hồi ngay khi yêu cầu của nó được trả lời. Huy hiệu trên Dock/thanh tác vụ đếm số cuộc trò chuyện đang chờ. Nhấp vào thông báo sẽ mở cuộc trò chuyện đó. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Ảnh chụp màn hình: Thông báo nền"></a> |
|
|
66
69
|
| **Ngôn ngữ ứng dụng** | <a id="feature-language"></a>Cài đặt → Composer Plus → **Ngôn ngữ ứng dụng** chuyển toàn bộ giao diện dsh sang Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt hoặc हिन्दी (xem bên dưới). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Ảnh chụp màn hình: Ngôn ngữ ứng dụng"></a> |
|
|
67
|
-
| **Kết nối di động (iPhone)** | <a id="feature-mobileconnect"></a>Dùng dsh từ iPhone với ứng dụng [Tether](tether/), trong cùng mạng Wi-Fi hoặc qua [Tailscale](https://tailscale.com). Bật tính năng trong **Cài đặt → Composer Plus** (mặc định tắt, vì tính năng này mở một cổng mạng trên máy Mac này). Sau đó nhấp **Kết nối di động** ở góc dưới bên trái thanh bên: quét mã QR bằng Camera của iPhone (chạm vào **Open in Tether**) hoặc bằng **Scan code** trong Tether, chạm vào **Connect** và nhấp **Approve**. Hãy cài đặt Tether trước: nếu không có Tether, Camera không thể mở mã này. Điện thoại hiện các cuộc trò chuyện của bạn, gửi tin nhắn, trả lời phê duyệt và câu hỏi, và chuyển đổi mô hình và agent. Bạn có thể ghép nối bao nhiêu máy Mac tùy ý: tên máy Mac ở góc trên bên trái ứng dụng dùng để chuyển giữa các máy. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ảnh chụp màn hình: Kết nối di động (iPhone)"></a> |
|
|
70
|
+
| **Kết nối di động (iPhone)** | <a id="feature-mobileconnect"></a>Dùng dsh từ iPhone với ứng dụng [Tether](tether/), trong cùng mạng Wi-Fi hoặc qua [Tailscale](https://tailscale.com). Bật tính năng trong **Cài đặt → Composer Plus** (mặc định tắt, vì tính năng này mở một cổng mạng trên máy Mac này). Sau đó nhấp **Kết nối di động** ở góc dưới bên trái thanh bên: quét mã QR bằng Camera của iPhone (chạm vào **Open in Tether**) hoặc bằng **Scan code** trong Tether, chạm vào **Connect** và nhấp **Approve**. Hãy cài đặt Tether trước: nếu không có Tether, Camera không thể mở mã này. Điện thoại hiện các cuộc trò chuyện của bạn, gửi tin nhắn, trả lời phê duyệt và câu hỏi, và chuyển đổi mô hình và agent. Bạn có thể ghép nối bao nhiêu máy Mac tùy ý: tên máy Mac ở góc trên bên trái ứng dụng dùng để chuyển giữa các máy. Bảng **Kết nối di động** liệt kê các iPhone đã ghép nối kèm lần kết nối gần nhất: **Remove** ngắt ngay một máy. “Tailscale only” từ chối mạng cục bộ (dành cho Wi-Fi dùng chung), và nhật ký truy cập cho biết ai đã thử kết nối. Trong Tether, “Settings → Privacy” khóa ứng dụng bằng Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ảnh chụp màn hình: Kết nối di động (iPhone)"></a> |
|
|
68
71
|
| **Tự động cập nhật** | <a id="feature-autoupdate"></a>Khi dsh khởi động, plugin kiểm tra [bản phát hành GitHub mới nhất](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Nếu bản đó mới hơn và đã có trên npm, plugin cài đúng phiên bản đó qua trình quản lý plugin của chính dsh (cùng cách với Cài đặt → Plugin) và thông báo cho bạn. Khởi động lại dsh để tải bản mới. **Cài đặt → Composer Plus → Cập nhật Composer Plus** hiện phiên bản và có nút **Kiểm tra cập nhật** / **Cập nhật ngay**. Lần đầu dsh khởi động với phiên bản mới, cửa sổ **Có gì mới trong Composer Plus N** hiện ghi chú phát hành của phiên bản đó một lần (lấy từ chính lần kiểm tra cập nhật, không gọi mạng thêm); **Đóng** hoặc `Esc` đóng nó. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ảnh chụp màn hình: Tự động cập nhật"></a> |
|
|
69
72
|
|
|
70
73
|
<!-- END GENERATED FEATURES -->
|
|
@@ -119,15 +122,15 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
119
122
|
- **Tiếp tục:** endpoint cục bộ có xác thực chỉ tiếp tục lượt bị ngắt gần nhất, từ chối yêu cầu cũ hoặc trùng lặp, và giữ nguyên các hook phê duyệt hiện có. Endpoint này không gửi tin nhắn mới của người dùng.
|
|
120
123
|
- **Tiếp tục sau khi khởi động lại:** tắt cho đến khi bạn bật. Phần Host chỉ lưu ID cuộc trò chuyện và thời điểm bắt đầu trong `$DSH_HOME/storages/dsh-composer-plus/resume.json` (chỉ chủ sở hữu có quyền truy cập), và không có gì rời khỏi máy của bạn. Phần này chỉ tiếp tục một cuộc trò chuyện khi nhật ký của chính dsh cho biết dsh (không phải bạn) đã dừng lượt cuối. Phê duyệt và Đánh giá tự động áp dụng cho lượt được tiếp tục như thường lệ.
|
|
121
124
|
|
|
122
|
-
- **Bảng thay đổi:** git chạy ở chế độ chỉ đọc trên máy của bạn, trong thư mục của chính cuộc trò chuyện, qua kênh `/api` có xác thực của dsh. Tính năng không bao giờ commit, stage hay fetch, và chỉ hiện các đường dẫn mà chính git liệt kê.
|
|
125
|
+
- **Bảng thay đổi:** git chạy ở chế độ chỉ đọc trên máy của bạn, trong thư mục của chính cuộc trò chuyện, qua kênh `/api` có xác thực của dsh. Tính năng không bao giờ commit, stage hay fetch, và chỉ hiện các đường dẫn mà chính git liệt kê. Cây hiển thị 300 commit mới nhất của các branch cục bộ và từ xa, và không bao giờ chuyển branch (checkout). Với kho rất lớn không có tệp commit-graph, cây có thể mất vài giây để mở. **Cuộc trò chuyện này** đọc nhật ký riêng của cuộc trò chuyện để tìm các tệp mà công cụ tệp của nó đã ghi, rồi so sánh chúng với snapshot Hoàn tác lượt của cuộc trò chuyện trong một thư mục tạm bị xóa ngay; chế độ này không ghi gì vào repository của bạn hay vào kho snapshot.
|
|
123
126
|
- **Ý tưởng tính năng:** không có gì chạy cho đến khi bạn nhấp **Đề xuất tính năng**. Khi đó, phần Host chỉ đọc thư mục của chính cuộc trò chuyện (trình duyệt không bao giờ gửi đường dẫn): tên các mục ở cấp cao nhất, 6 kB đầu của README, AGENTS.md và tệp manifest (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) và `git log --oneline -15`, tổng cộng tối đa 16 kB. Phần Host bỏ qua `.env*`, các tệp khóa và các thư mục như `node_modules`, và chỉ đọc tệp thông thường nằm trong thư mục: symlink trỏ ra ngoài thư mục, FIFO hoặc tệp thiết bị đều bị bỏ qua. Bản tóm tắt này được gửi đến mô hình mà cuộc trò chuyện đang dùng, qua cài đặt nhà cung cấp của chính dsh, dưới dạng một yêu cầu duy nhất; bản tóm tắt không được thêm vào cuộc trò chuyện nào. Không có gì được ghi vào dự án. Ý tưởng được vuốt sang phải bắt đầu một cuộc trò chuyện mới ở chế độ kế hoạch, nên phê duyệt và xem xét kế hoạch vẫn áp dụng như thường lệ. **Xây dựng ngay** bắt đầu cuộc trò chuyện không có chế độ kế hoạch: mô hình có thể thay đổi tệp ngay, với các phê duyệt thường lệ của cuộc trò chuyện và Đánh giá tự động. Các ý tưởng lưu để làm sau (tiêu đề, tóm tắt, lý do, công sức) được lưu cùng đường dẫn thư mục của dự án trong `storages/dsh-composer-plus/later.json` dưới thư mục home của dsh (tệp chỉ chủ sở hữu truy cập được); không có gì đi vào dự án. Lịch sử các ý tưởng đã đề xuất (tiêu đề, tóm tắt, lý do, công sức, ngày, đã bắt đầu hay chưa) được lưu theo cùng cách trong `storages/dsh-composer-plus/idea-history.json`, tối đa 200 cho mỗi dự án (ý tưởng cũ nhất bị xóa trước); các tiêu đề trong đó được gửi tới mô hình cùng lần **Đề xuất tính năng** tiếp theo của dự án đó.
|
|
124
127
|
- **Tìm trong nội dung:** không có mã mới nào tìm trong cuộc trò chuyện của bạn: plugin chỉ bật chỉ mục tin nhắn của chính dsh (SQLite FTS5, `dsh-session-query-sqlite`) và cấp cho chỉ mục một tệp, `$DSH_HOME/cache/composer-plus/session-search.db` (tệp và thư mục chỉ chủ sở hữu truy cập được). Tệp này chứa văn bản tin nhắn của bạn và của trợ lý, nên cần được bảo vệ như nhật ký trò chuyện trong `$DSH_HOME/sessions`. Không có gì rời khỏi máy của bạn. Đây là bản sao mà dsh có thể tạo lại: bạn có thể xóa tệp khi dsh đang đóng. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
125
|
-
- **Hoàn tác lượt:** trước mỗi tin nhắn của bạn, Host chụp một snapshot git của thư mục cuộc trò chuyện vào kho riêng của nó, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (thư mục chỉ chủ sở hữu truy cập được). Kho này chứa bản sao các tệp trong thư mục mà git nhìn thấy (không gồm tệp bị bỏ qua), nên cần được bảo vệ như chính dự án. Host đọc các object trong repository của bạn (không sao chép những gì git đã có) và không bao giờ ghi vào index, `HEAD`, branch, tag, stash hay config của repository. Thay đổi duy nhất git tạo ra ở đó là dấu thời gian mới hơn trên các tệp object được dùng lại (việc này làm `git gc` dọn chúng muộn hơn). Hoàn tác kèm tệp chỉ ghi tệp thông thường bên trong thư mục cuộc trò chuyện; nó bỏ qua symlink, pipe và mọi thứ nằm ngoài thư mục. Không có gì rời khỏi máy của bạn. Bạn có thể xóa kho này khi dsh đang đóng (khi đó hoàn tác chỉ áp dụng cho cuộc trò chuyện, cho đến khi có tin nhắn mới). **Xóa cuộc trò chuyện** cũng xóa kho của cuộc trò chuyện đó. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
128
|
+
- **Hoàn tác lượt:** trước mỗi tin nhắn của bạn, Host chụp một snapshot git của thư mục cuộc trò chuyện vào kho riêng của nó, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (thư mục chỉ chủ sở hữu truy cập được). Kho này chứa bản sao các tệp trong thư mục mà git nhìn thấy (không gồm tệp bị bỏ qua), nên cần được bảo vệ như chính dự án. Host đọc các object trong repository của bạn (không sao chép những gì git đã có) và không bao giờ ghi vào index, `HEAD`, branch, tag, stash hay config của repository. Thay đổi duy nhất git tạo ra ở đó là dấu thời gian mới hơn trên các tệp object được dùng lại (việc này làm `git gc` dọn chúng muộn hơn). Hoàn tác kèm tệp chỉ ghi tệp thông thường bên trong thư mục cuộc trò chuyện; nó bỏ qua symlink, pipe và mọi thứ nằm ngoài thư mục. Không có gì rời khỏi máy của bạn. Bạn có thể xóa kho này khi dsh đang đóng (khi đó hoàn tác chỉ áp dụng cho cuộc trò chuyện, cho đến khi có tin nhắn mới). **Xóa cuộc trò chuyện** cũng xóa kho của cuộc trò chuyện đó. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Hoàn tác kèm tệp cũng giữ các tệp như trạng thái ngay trước lần hoàn tác (`refs/r/…` trong cùng kho), để dùng cho **Làm lại**; các lần hoàn tác đã được làm lại được liệt kê trong `$DSH_HOME/storages/dsh-composer-plus/redone.json` (chỉ chủ sở hữu truy cập được).
|
|
126
129
|
- **Xuất cuộc trò chuyện dạng Markdown:** phần Host chỉ đọc nhật ký riêng của cuộc trò chuyện (chính các tin nhắn mà dsh hiển thị) và đưa chúng cho trang; phần này không đọc tệp nào của dự án và không gửi gì qua mạng. Markdown chỉ đi vào bộ nhớ tạm của bạn hoặc vào tệp mà bạn lưu.
|
|
127
130
|
- **Xóa cuộc trò chuyện:** chuyển các thư mục nhật ký riêng của cuộc trò chuyện (`$DSH_HOME/sessions/<project>/<chat>`) vào Thùng rác. Tính năng không động đến thư mục dự án.
|
|
128
|
-
- **Cho phép trong cuộc trò chuyện này:** các quyền được lưu trong `$DSH_HOME/storages/dsh-composer-plus/grants.json` (chỉ chủ sở hữu có quyền truy cập). Mỗi quyền áp dụng cho đúng một công cụ trong một cuộc trò chuyện. Nếu công cụ đó có thể ghi, quyền cũng bao gồm mọi thao tác ghi. Thu hồi quyền từ nhãn ở phần đầu.
|
|
131
|
+
- **Cho phép trong cuộc trò chuyện này:** các quyền được lưu cùng thời điểm cấp trong `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (chỉ chủ sở hữu có quyền truy cập). Mỗi quyền áp dụng cho đúng một công cụ trong một cuộc trò chuyện, cho đến khi hết giới hạn thời gian (mặc định 1 giờ). Nếu công cụ đó có thể ghi, quyền cũng bao gồm mọi thao tác ghi. Thu hồi quyền từ nhãn ở phần đầu.
|
|
129
132
|
- Đánh giá tự động vẫn chạy ở mọi lệnh gọi; lỗi đánh giá không bao giờ được tự động cho phép.
|
|
130
|
-
- **Kết nối di động:** tắt cho đến khi bạn bật. Khi bật, phần Host chạy gateway Tether: HTTPS trên cổng 19390, chỉ nhận kết nối từ mạng con Wi-Fi và tailnet của bạn (100.64.0.0/10), và một trang ghép nối tại `127.0.0.1:19391` (chỉ máy Mac này). Điện thoại cần một mã dùng một lần từ mã QR (hiệu lực 5 phút) và bạn phải nhấp **Approve** trên máy Mac. Điện thoại ghim (pin) chứng chỉ của gateway. Máy Mac chỉ giữ hash của token của từng điện thoại (30 ngày, được gia hạn khi còn dùng); **Remove** đóng ngay các kết nối của điện thoại đó. Điện thoại chỉ gọi được một danh sách cho phép gồm các phương thức dsh (cuộc trò chuyện, prompt, tệp đính kèm, lệnh gạch chéo, phê duyệt, câu hỏi, mô hình, agent, mục tiêu), không gọi được cài đặt, thông tin xác thực, trình duyệt tệp hay terminal. Dữ liệu: `$DSH_HOME/storages/dsh-composer-plus/mobile
|
|
133
|
+
- **Kết nối di động:** tắt cho đến khi bạn bật. Khi bật, phần Host chạy gateway Tether: HTTPS trên cổng 19390, chỉ nhận kết nối từ mạng con Wi-Fi và tailnet của bạn (100.64.0.0/10), và một trang ghép nối tại `127.0.0.1:19391` (chỉ máy Mac này). Điện thoại cần một mã dùng một lần từ mã QR (hiệu lực 5 phút) và bạn phải nhấp **Approve** trên máy Mac. Điện thoại ghim (pin) chứng chỉ của gateway. Máy Mac chỉ giữ hash của token của từng điện thoại (30 ngày, được gia hạn khi còn dùng); **Remove** đóng ngay các kết nối của điện thoại đó. Điện thoại chỉ gọi được một danh sách cho phép gồm các phương thức dsh (cuộc trò chuyện, prompt, tệp đính kèm, lệnh gạch chéo, phê duyệt, câu hỏi, mô hình, agent, mục tiêu), không gọi được cài đặt, thông tin xác thực, trình duyệt tệp hay terminal. "Tailscale only" từ chối mọi kết nối từ mạng cục bộ, kể cả các kết nối đang mở. Nhật ký truy cập giữ 200 lần thử kết nối mới nhất (thời gian, địa chỉ IP, tên thiết bị, được cho phép hay bị từ chối, và lý do) trong `access.json`; nhật ký không bao giờ chứa token hay mã ghép nối. Dữ liệu: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (tệp chỉ chủ sở hữu truy cập được). Chi tiết: [tether/README.md](tether/README.md).
|
|
131
134
|
- **Cập nhật:** phần Host hỏi `api.github.com` về bản phát hành mới nhất và hỏi `registry.npmjs.org` về đúng phiên bản đó; không có thông tin nào về bạn hay cuộc trò chuyện của bạn được gửi đi. Việc cài đặt dùng trình quản lý plugin của dsh (`pnpm add dsh-composer-plus@<version>`; khi dsh 0.2.1 từ chối lệnh đó cho một plugin đã cài, dùng `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, và sau đó profile ghi URL đó làm nguồn của plugin), nên các bước kiểm tra registry, script và khả năng tương thích phiên bản của chính dsh đều được áp dụng. Thẻ tiền phát hành (pre-release) và phiên bản cũ hơn không bao giờ được cài.
|
|
132
135
|
- **Dự đoán tin nhắn tiếp theo:** mặc định bật. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi mô hình này. Sau mỗi lượt đã xong, phần Host gửi các tin nhắn của chính bạn trong cuộc trò chuyện và các câu trả lời dạng văn bản của tác tử (không có đầu ra công cụ, ngữ cảnh ẩn hay phần suy luận), tối đa khoảng 6.000 ký tự (phần mới nhất), đến mô hình đã chọn (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác). Nội dung này đi qua cài đặt nhà cung cấp của chính dsh, dưới dạng một yêu cầu duy nhất. Không có gì được lưu vào cuộc trò chuyện: dự đoán không được thêm vào lịch sử trò chuyện. Công tắc và mô hình đã chọn nằm trong `$DSH_HOME/storages/dsh-composer-plus/predict.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
133
136
|
- **Hoàn thành khi gõ:** tắt cho đến khi bạn bật. Khi bật, mỗi lần bạn dừng gõ, phần Host gửi văn bản bạn đã gõ đến lúc đó cùng các tin nhắn của chính bạn trong cuộc trò chuyện và các câu trả lời dạng văn bản của tác tử (không có đầu ra công cụ, ngữ cảnh ẩn hay phần suy luận), tối đa khoảng 3.000 ký tự của cuộc trò chuyện, đến mô hình đã chọn trong **Hoàn thành khi gõ** (mặc định là mô hình của **Dự đoán tin nhắn tiếp theo**). Lần dừng gõ mới sẽ hủy yêu cầu trước đó. Không có gì được lưu vào cuộc trò chuyện. Công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/complete.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
@@ -144,8 +147,9 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
144
147
|
- **Tin nhắn của tôi không có nút ↶:** Hoàn tác lượt đang tắt, cuộc trò chuyện là cuộc trò chuyện subagent, hoặc dsh-rewind-plugin đã được cài (hãy dùng nút ↶ của plugin đó). Sau khi cập nhật, hãy khởi động lại dsh.
|
|
145
148
|
- **Cuộc trò chuyện và tệp bị mờ:** dự án không phải repository git, không có snapshot từ trước tin nhắn đó (tin nhắn cũ hơn plugin, hoặc một trong 50 snapshot mới nhất đã thay thế snapshot đó), hoặc không có tệp nào thay đổi.
|
|
146
149
|
- **Thao tác xóa báo rằng một dsh khác đang mở cuộc trò chuyện này:** một dsh thứ hai dùng cùng thư mục home của dsh đang giữ khóa của cuộc trò chuyện. Hãy đóng cửa sổ đó hoặc dsh đó, rồi xóa lại. Trong lúc đó, cuộc trò chuyện vẫn ở trạng thái đã lưu trữ.
|
|
150
|
+
- **iPhone không kết nối được sau khi tôi bật "Tailscale only":** Tailscale phải được bật trên cả máy Mac và iPhone. Bảng Kết nối di động sẽ cảnh báo khi Tailscale đang tắt trên máy Mac. Nhật ký truy cập hiện từng lần thử bị từ chối kèm lý do.
|
|
147
151
|
- **Một cuộc trò chuyện không tiếp tục sau khi khởi động lại:** Tiếp tục sau khi khởi động lại đang tắt khi dsh thoát, bạn đã tự dừng lượt đó, lượt đã kết thúc (xong hoặc thất bại), cuộc trò chuyện đã được lưu trữ, hoặc có hơn 20 cuộc trò chuyện đang chạy (20 cuộc trò chuyện mới nhất sẽ tiếp tục).
|
|
148
|
-
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.
|
|
152
|
+
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.13.0`), xem ghi chú cài đặt ở trên.
|
|
149
153
|
|
|
150
154
|
## Giới hạn
|
|
151
155
|
|
|
@@ -161,9 +165,14 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
161
165
|
- **Xóa cuộc trò chuyện** cần tính năng lưu trữ của dsh (dsh 0.2.0 trở lên). Một cuộc trò chuyện (hoặc một cuộc trò chuyện subagent của nó) không dừng trong vòng 15 giây, hoặc đang bị một dsh khác giữ, sẽ ở trạng thái đã lưu trữ và không có gì bị di chuyển. Trên hệ thống khác macOS, thư mục thùng rác phải nằm cùng ổ đĩa với lịch sử trò chuyện. Một cuộc trò chuyện đang mở mà bạn xóa vẫn ở trong bộ nhớ của dsh, ở trạng thái đã lưu trữ và bị ẩn, cho đến khi dsh khởi động lại. Hãy tự dọn Thùng rác; dsh không làm việc này.
|
|
162
166
|
- Hàng đợi của dsh không có thao tác `move`, nên phần Host của plugin di chuyển chính tin nhắn đang chờ trong hàng đợi của dsh (một thay đổi, vẫn là tin nhắn đó). Tin nhắn có hình ảnh hoặc tệp cũng di chuyển được. Chỉ tin nhắn của chính bạn mới di chuyển được: một vòng mục tiêu hoặc một câu trả lời cho câu hỏi trong hàng đợi vẫn ở nguyên chỗ. Nếu một tin nhắn bắt đầu được gửi trong lúc bạn kéo, không có gì được di chuyển và một thông báo cho biết điều đó.
|
|
163
167
|
- dsh 0.2.1 tải bản cập nhật ngay lập tức khi phiên bản mới không thay đổi cài đặt nào của dsh; trong các trường hợp khác và trên dsh 0.2.0, hãy khởi động lại dsh để tải bản cập nhật. Plugin không bao giờ tự khởi động lại dsh thay bạn. Profile web/CLI không có trình quản lý plugin của dsh chỉ báo có phiên bản mới.
|
|
168
|
+
- **Cho phép trong cuộc trò chuyện này** tính giới hạn thời gian từ lúc cấp quyền. Giới hạn thời gian mới áp dụng ngay cho các quyền đang có hiệu lực, nên một giới hạn ngắn hơn có thể kết thúc chúng ngay. Quyền từ phiên bản 1.12 trở về trước không có thời gian: sau khi cập nhật, agent sẽ hỏi lại một lần cho các công cụ đó.
|
|
164
169
|
- **Giữ con trỏ trong khung soạn thảo** chỉ trả lại tiêu điểm sau một lệnh `/` hoặc một skill. Trong lúc dsh xử lý lệnh, khung soạn thảo ở chế độ chỉ đọc trong vài mili giây, nên các phím nhấn trong khoảng đó bị mất. Nếu menu `/` của dsh vẫn đang mở, `Enter` chọn dòng đang được tô sáng và không gửi.
|
|
165
|
-
- **Kết nối di động** chỉ hoạt động trên macOS (dùng `en0`, `openssl`, `swift` và `dns-sd`). Tính năng dùng cố định cổng 19390 và 19391, nên trên mỗi máy Mac, mỗi lúc chỉ một dsh có thể chạy tính năng này (mỗi máy Mac là một mục trong danh sách Mac của điện thoại). Điện thoại chỉ nhận thông báo khi Tether đang mở hoặc vừa chuyển sang chạy nền (không có dịch vụ push). Ứng dụng iOS chưa có trên App Store: hãy build ứng dụng từ `tether/ios` bằng Xcode. Chấm xanh trong Tether theo Mac: cuộc trò chuyện bạn mở trong dsh cũng mất chấm trên điện thoại. Cuộc trò chuyện bạn mở trong Tether chỉ mất chấm trên điện thoại. Chấm riêng của dsh trên Mac vẫn còn cho đến khi bạn mở cuộc trò chuyện đó trên Mac.
|
|
166
|
-
- Liên kết phiên hoạt động bên trong cuộc trò chuyện; nhấp vào liên kết không mở cuộc trò chuyện.
|
|
170
|
+
- **Kết nối di động** chỉ hoạt động trên macOS (dùng `en0`, `openssl`, `swift` và `dns-sd`). Tính năng dùng cố định cổng 19390 và 19391, nên trên mỗi máy Mac, mỗi lúc chỉ một dsh có thể chạy tính năng này (mỗi máy Mac là một mục trong danh sách Mac của điện thoại). Điện thoại chỉ nhận thông báo khi Tether đang mở hoặc vừa chuyển sang chạy nền (không có dịch vụ push). Ứng dụng iOS chưa có trên App Store: hãy build ứng dụng từ `tether/ios` bằng Xcode. "Tailscale only" vẫn cần máy Mac có địa chỉ Wi-Fi hoặc Ethernet (gateway chỉ khởi động khi có địa chỉ đó). Nhật ký truy cập là riêng cho từng máy Mac và chỉ giữ 200 lần thử mới nhất; một lần thử lặp lại trong vòng một phút sẽ tăng số đếm của cùng một dòng thêm một. Khóa ứng dụng của Tether không ẩn bản xem trước thông báo trên Màn hình khóa của iPhone: hãy tắt chúng trong Cài đặt của iOS. Chấm xanh trong Tether theo Mac: cuộc trò chuyện bạn mở trong dsh cũng mất chấm trên điện thoại. Cuộc trò chuyện bạn mở trong Tether chỉ mất chấm trên điện thoại. Chấm riêng của dsh trên Mac vẫn còn cho đến khi bạn mở cuộc trò chuyện đó trên Mac.
|
|
171
|
+
- Liên kết phiên hoạt động bên trong cuộc trò chuyện; nhấp vào liên kết không mở cuộc trò chuyện. Liên kết tạo bằng **Sao chép liên kết tin nhắn** chỉ mở tin nhắn của nó trên dsh 0.2.1 trở lên, và chỉ từ một tin nhắn trong cuộc trò chuyện (dsh 0.2.0 không có quy tắc văn bản người dùng, nên ở đó liên kết vẫn được sao chép nhưng hiện dưới dạng văn bản thường). Tin nhắn mà một lần hoàn tác đã đưa ra, hoặc mà việc nén đã xóa khỏi lịch sử dsh tải, không thể hiển thị: khi đó liên kết sẽ báo như vậy. Các nút 🔗 gắn vào các dòng tin nhắn của dsh; nếu một bản cập nhật dsh thay đổi markup đó, các nút không hiện.
|
|
172
|
+
- **Đánh dấu tất cả là đã đọc** thay đổi các chấm chưa đọc của chính dsh qua một phần của dsh không phải API công khai (danh sách `completionUnread` trong trạng thái phiên của dsh). Nếu một bản cập nhật dsh đổi tên phần này, mục không hiện. Mục được đặt trong menu "…" của dự án trong dsh, và menu này không có vị trí dành cho plugin; nếu dsh thay đổi menu đó, mục cũng không hiện.
|
|
173
|
+
- **Sửa tin nhắn trong hàng đợi tại chỗ** mở trình sửa hàng đợi của chính dsh, nên có các giới hạn của nó: không sửa được tin nhắn có hình ảnh hoặc tệp, và tin nhắn đã bắt đầu được gửi trong lúc đó sẽ không bị thay đổi (dsh hiện lỗi của chính nó).
|
|
174
|
+
- **Làm lại** không bao giờ thay đổi cuộc trò chuyện đã hoàn tác: tính năng bắt đầu một cuộc trò chuyện mới từ ngay trước lúc hoàn tác (tính năng tách nhánh của chính dsh, cùng ngữ cảnh mô hình), nên cuộc trò chuyện mới có id và tiêu đề mới. Chỉ lần hoàn tác mới nhất của một cuộc trò chuyện mới làm lại được, một lần, và chỉ khi chưa có gì sau nó (một tin nhắn mới sẽ bỏ lựa chọn này). Tệp bạn đã thay đổi sau lần hoàn tác được giữ lại, trừ khi bạn đánh dấu ô ghi đè. Làm lại cần snapshot mà lần hoàn tác đã giữ (cùng giới hạn 50 mục); lần hoàn tác thực hiện trước phiên bản này, hoặc bằng **Chỉ cuộc trò chuyện**, chỉ đưa tin nhắn trở lại.
|
|
175
|
+
- **Cuộc trò chuyện này** chỉ tính các tệp mà công cụ tệp của dsh (`write`, `edit`, `str_replace_editor`) đã ghi. Tệp do một lệnh (`bash`) thay đổi không có trong chế độ xem này; chúng hiện trong **Chưa commit**. Khi không có snapshot Hoàn tác lượt của cuộc trò chuyện (Hoàn tác lượt đang tắt, đã cài dsh-rewind-plugin, hoặc cuộc trò chuyện cũ hơn plugin), chế độ xem so sánh với commit gần nhất và báo như vậy. Hoàn tác lượt giữ 50 snapshot mới nhất của một cuộc trò chuyện: trong cuộc trò chuyện dài hơn, chế độ xem so sánh với snapshot cũ nhất còn giữ, cho biết từ tin nhắn nào và không tính các thay đổi trước đó. **Ẩn thay đổi khoảng trắng** là `git diff -w`: một dòng chỉ thay đổi khoảng trắng bên trong cũng bị ẩn.
|
|
167
176
|
- Nhấp vào thông báo đã gửi trước khi khởi động lại chỉ đưa dsh ra phía trước.
|
|
168
177
|
- Dự án đang hoạt động được di chuyển bằng thứ tự dự án đã lưu của dsh, nên thứ tự mới vẫn được giữ sau khi khởi động lại. Không thể di chuyển cuộc trò chuyện nằm ngoài mọi dự án ("Chưa nhóm"); dsh luôn liệt kê chúng ở cuối.
|
|
169
178
|
- dsh không có điểm mở rộng trong menu tùy chọn hiển thị của thanh bên, nên tùy chọn dự án gần đây được thêm vào chính menu của dsh. Nếu một bản cập nhật dsh thay đổi menu đó, tùy chọn không hiện và mọi dự án vẫn hiển thị. Bộ lọc hoạt động trên các dòng dự án, nên **Trong một danh sách** không bị lọc. Hãy dùng bộ lọc với **Không gian làm việc**: trong **Cây không gian làm việc**, một thư mục cha bị ẩn cũng ẩn các dự án đang hoạt động bên trong. **Theo trạng thái** có giới hạn tương tự: dsh không có vị trí dành cho kiểu sắp xếp, nên mục này và thứ tự dòng gắn vào markup menu và danh sách của dsh.
|
|
@@ -200,7 +209,21 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
200
209
|
|
|
201
210
|
**Làm sao để sắp xếp lại tin nhắn trong hàng đợi của dsh?** Kéo tay nắm ⠿ trên tin nhắn trong hàng đợi, hoặc đặt tiêu điểm vào tay nắm rồi nhấn `↑` / `↓`.
|
|
202
211
|
|
|
203
|
-
**Làm sao để
|
|
212
|
+
**Làm sao để sửa lỗi gõ trong một tin nhắn trong hàng đợi?** Nhấp đúp vào tin nhắn trong hàng đợi, sửa văn bản rồi nhấn `Enter` (`Esc` để hủy). Tin nhắn giữ nguyên vị trí trong hàng đợi.
|
|
213
|
+
|
|
214
|
+
**Làm sao để xóa cùng lúc mọi chấm chưa đọc của một dự án?** Thanh bên → nút **…** của dự án → **Đánh dấu tất cả là đã đọc**.
|
|
215
|
+
|
|
216
|
+
**Tôi có thể liên kết tới một tin nhắn trong cuộc trò chuyện dài không?** Có: di chuột lên tin nhắn và nhấp **🔗**. Gửi liên kết trong một cuộc trò chuyện: trên dsh 0.2.1 trở lên, nhấp vào liên kết sẽ mở cuộc trò chuyện tại tin nhắn đó.
|
|
217
|
+
|
|
218
|
+
**Tôi lỡ hoàn tác một lượt. Có lấy lại được không?** Có, bằng **Làm lại** phía trên khung soạn thảo, ngay sau khi hoàn tác: tính năng bắt đầu một cuộc trò chuyện mới từ ngay trước lúc hoàn tác với cùng các tin nhắn, và nếu đã hoàn tác bằng **Cuộc trò chuyện và tệp** thì tệp cũng được đưa trở lại.
|
|
219
|
+
|
|
220
|
+
**Làm sao để chỉ xem các tệp mà một cuộc trò chuyện đã thay đổi?** Thanh bên phải → **Thay đổi** → **Cuộc trò chuyện này**. Nhấp **␣** để ẩn các thay đổi chỉ có khoảng trắng.
|
|
221
|
+
|
|
222
|
+
**Làm sao để Đánh giá tự động thôi hỏi về cùng một công cụ trong một cuộc trò chuyện?** Nhấp **Cho phép trong cuộc trò chuyện này** trên thẻ phê duyệt. Quyền này chỉ áp dụng cho đúng công cụ đó trong cuộc trò chuyện đó, mặc định trong 1 giờ; thu hồi quyền từ nhãn ở phần đầu. Đổi thời gian trong **Cài đặt → Composer Plus → Cho phép trong cuộc trò chuyện này**.
|
|
223
|
+
|
|
224
|
+
**Tôi bị mất iPhone. Làm sao để chặn nó truy cập máy Mac của tôi?** Nhấp **Kết nối di động** ở góc dưới bên trái thanh bên, rồi nhấp **Remove** bên cạnh iPhone đó. Khóa của iPhone đó ngừng hoạt động ngay; nó chỉ có thể kết nối lại bằng một lần ghép nối mới mà bạn phê duyệt trên máy Mac.
|
|
225
|
+
|
|
226
|
+
**Có thể khóa Tether bằng Face ID không?** Có: trong Tether, bật "Settings → Privacy → Lock with Face ID". Sau đó, Tether yêu cầu Face ID (hoặc mật mã) khi mở và khi bạn quay lại ứng dụng.
|
|
204
227
|
|
|
205
228
|
**Làm sao để thanh bên của dsh chỉ hiện các dự án tôi dùng hôm nay?** Thanh bên → tùy chọn hiển thị (biểu tượng thanh trượt) → **Hoạt động trong 2 giờ qua**. Chọn lại tùy chọn này để hiện tất cả dự án.
|
|
206
229
|
|