dsh-composer-plus 1.24.0 → 1.25.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 +18 -9
- package/README.es.md +18 -9
- package/README.fr.md +18 -9
- package/README.hi.md +18 -9
- package/README.id.md +18 -9
- package/README.ja.md +18 -9
- package/README.ko.md +18 -9
- package/README.md +18 -9
- package/README.pt-BR.md +18 -9
- package/README.ru.md +18 -9
- package/README.tr.md +18 -9
- package/README.vi.md +18 -9
- package/README.zh.md +18 -9
- package/assets/features/assistant.webp +0 -0
- package/assets/features/assistantApart.webp +0 -0
- package/assets/features/assistantChatView.webp +0 -0
- package/assets/features/assistantFree.webp +0 -0
- package/assets/features/assistantNotify.webp +0 -0
- package/assets/features/memorySuggest.webp +0 -0
- package/client.js +265 -29
- package/index.js +212 -8
- package/package.json +2 -2
- package/release-notes.json +14 -14
- package/tether/gateway/admin.html +5 -0
- package/tether/gateway/server.mjs +45 -8
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.25.0`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -75,7 +75,11 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
75
75
|
| **Korunan dosyalar** | <a id="feature-protectedfiles"></a>Varsayılan olarak açık. Ajanın kendi dosya araçları, desenlerinizle eşleşen dosyaları okuyamaz ve değiştiremez: **okuma ve yazma** desenlerinde bir dosya üzerindeki `read`, `read_image` ve `grep` reddedilir; her iki türde de `write`, `edit` ve `str_replace_editor` reddedilir. Ajan nedenini okur ve size sorması söylenir. Varsayılan desenler `.env*`, `*.pem` ve `*.key`. Ayarlar → Composer Plus → **Korunan dosyalar**: bir desen ekleyin (örneğin `published/**` ya da `config/*.yml`), türüne tıklayarak **okuma ve yazma** ile **yalnızca yazma** arasında geçin, ✕ ile kaldırın ya da **Varsayılanları kullan**. `/` içermeyen bir desen, her klasördeki dosya adıyla eşleşir. Bu bir korkuluktur, korumalı alan değildir: bir kabuk komutu (`cat .env`), bir betik ya da bir MCP aracı dosyaya yine erişebilir (bkz. Sınırlar). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ekran görüntüsü: Korunan dosyalar"></a> |
|
|
76
76
|
| **Engellenen komutlar** | <a id="feature-blockedcommands"></a>Varsayılan olarak açık, liste başta boştur. Ajanın kabuk komutları (`bash`, `pwsh`) kurallarınızla eşleşen bir komutu çalıştıramaz: bir **engelle** kuralı çağrıyı reddeder (ajan nedenini okur ve size sorması söylenir), bir **önce sor** kuralı dsh’nin onay kartını gösterir ve komut yalnızca siz izin verince çalışır. Ayarlar → Composer Plus → **Engellenen komutlar**: bir kural yazın (örneğin `npm publish`, `git push --force` ya da `ssh *192.168.2.19`), türüne tıklayarak **engelle** ile **önce sor** arasında geçin, sonra **Ekle** düğmesine tıklayın; bir kuralın türünü değiştirmek için türüne tıklayın, kuralı ✕ ile kaldırın. Bir kural, bir komut adı ve ondan sonra bu sırayla gelmesi gereken sözcüklerdir; `*` herhangi bir metinle eşleşir. Kontrol, komutu `&&`, `;`, `\|` sonrasında, `$(…)`, `bash -c "…"` ya da `eval` içinde ve `sudo` ya da `env` sonrasında da bulur. Bu bir korkuluktur, korumalı alan değildir: bir değişken (`$CMD`), bir betik dosyası ya da başka bir program komutu yine çalıştırabilir (bkz. Sınırlar). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ekran görüntüsü: Engellenen komutlar"></a> |
|
|
77
77
|
| **Görev panosu** | <a id="feature-taskboard"></a>Sol kenar çubuğu → **Görev panosu** ya da dsh’nin her yerinde `Cmd+Shift+K` (Windows ve Linux’ta `Ctrl+Shift+K`). Kenar çubuğunun gösterdiği canlı durumla dsh sohbetlerinizin kanban panosu: onayınızı, yanıtınızı ya da plan incelemenizi bekleyen sohbet turuncu bir noktayla **İncelemede** sütunundadır, çalışan sohbet **Yapılıyor** sütunundadır, henüz açmadığınız biten sohbet **Bitti** sütunundadır (yeşil). Bir sohbeti açınca kartı **Bitti** sütunundan kendiliğinden çıkar; okuduğunuz biten sohbetleri görmek için yeşil kartların altındaki **Son bitenler (N)** satırına tıklayın (en yeni 10 tanesi, sonra **Daha eski N görevi göster**; açık ya da kapalı olması bu cihazda kalır). Panonun arkasında açıkken biten sohbet (**Yeni görev**) siz açana kadar yeşil kalır. Proje listesini açmak için panonun üstündeki proje adına tıklayın, sonra bir proje ya da **Tüm projeler** seçin; “Sohbet başına dal” klasörü kendi projesinden sayılır. Liste seçimden sonra, `Esc` ile ya da dışına tıklayınca kapanır. Bir projeyi adıyla bulmak için listenin en üstündeki **Projelerde ara** kutusuna yazın (büyük/küçük harf ve aksanlar fark etmez; `Esc` kutuyu boşaltır), ilk eşleşmeyi seçmek için `Enter` tuşuna basın ve yalnız bekleyen, çalışan, görülmeden biten ya da son 2 saatte değişen bir sohbeti olan projeleri göstermek için **Son 2 saatte aktif olanlar** seçeneğine tıklayın (bu seçim bu cihazda saklanır). **Yeni görev** (ya da `n`), panonun gösterdiği projede dsh’nin kendi yeni sohbetini açar (**Tüm projeler** seçiliyken dsh’nin Yeni oturum düğmesinin seçtiği projede); böylece her sohbette olduğu gibi dosya ekleyebilir, komut kullanabilir ve modeli seçebilirsiniz. İlk mesajınız gidince pano kendiliğinden geri gelir. O zamana kadar sohbet **Yapılıyor** sütununun en üstünde **Yeni görev** olarak bekler: ilk mesajı yazmak için ona tıklayın. Sizi bekleyen bir sohbeti olan projenin yanında, proje listesinde turuncu bir nokta görünür (herhangi bir sohbet beklerken üstteki proje adında da görünür). Sohbete dsh ad verir ve sohbetin modeli o mesajdan en çok 3 etiket yazar. Sohbetini açmak için bir karta tıklayın. Turuncu bir kartı panoda yanıtlamak için karta (ya da **Yanıtla** düğmesine) tıklayın; sohbetin tamamı için paneldeki **Sohbeti aç** düğmesini kullanın: **Reddet** ya da **Bir kez izin ver**, plan için **Onayla** ya da **Değişiklik iste**, soru için seçenekler ve kendi metniniz. Bir kartı panodan kaldırmak için biten karttaki **×** düğmesine tıklayın; **Son bitenler** açıkken bu kartları panodan kaldırmak için **Bitti** sütununun üstündeki **Tümünü temizle** düğmesine tıklayın: önce hangi projeden kaç kartın kalkacağını gösterir, okunmamış (yeşil) kartlar kalır. Sonraki 8 saniye içinde **Geri al** kartları geri getirir; **Bitti** sütununun altındaki **Kaldırılanlar (N)** panodan kalkan kartları listeler, **Panoya geri koy** bir kartı yeniden **Bitti** sütununda gösterir. Hiçbir sohbet silinmez: sohbetler dsh’nin kenar çubuğunda kalır, pano bunu yeniden başlatmadan sonra da hatırlar (Tether aynı panoyu gösterir) ve yeniden çalışan bir sohbet panoya geri gelir. İlerlemesini görmek için **Yapılıyor** sütunundaki bir kartın üzerine gelin (ya da klavye odağını karta taşıyın): sohbetin ne kadar süredir çalıştığı, yapılacaklar listesindeki adımı, şu an çalışan araç ve ajanın son satırı. Ayarlar → Composer Plus → Görev panosu bölümünde **Üzerine gelince ilerleme** ile **Hızlı (AI’sız)** (varsayılan: yalnız sohbeti okur) ya da **AI özeti** (sohbetin modeline yapılan kısa bir çağrı bir iki cümle de yazar) seçilir. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ekran görüntüsü: Görev panosu"></a> |
|
|
78
|
-
| **Asistan** | <a id="feature-assistant"></a>Varsayılan olarak
|
|
78
|
+
| **Asistan** | <a id="feature-assistant"></a>Varsayılan olarak açıktır (**Ayarlar → Composer Plus** içinden kapatabilirsiniz). Sol kenar çubuğunda **Asistan**'a tıklayın (**Görev panosu**'nun hemen altında): ChatGPT ya da Grok sohbeti gibi kişisel asistanınız olarak kullandığınız tek ve kalıcı bir sohbet açılır. İlk tıklama `~/Assistant` klasörünü oluşturur, onu "Assistant" projesi olarak ekler ve sohbeti workspace-write izin modu ve dsh'nin varsayılan modeliyle başlatır. Sonraki her tıklama aynı sohbeti açar (arşivlenmiş sohbet geri gelir, silinmiş sohbet yeniden oluşur). Sohbette henüz mesaj yokken, giriş alanının üstündeki kısa bir kart asistanın ne yaptığını anlatır ve üç örnek istek gösterir. Kart ilk mesajınızla kaybolur. Ondan hatırlatma isteyin ("2 dakika sonra bana su içmemi hatırlat"): dsh'nin zamanlanmış görevlerini kullanır, bu yüzden hatırlatma zamanı gelince sohbet çalışır ve Mobile connect açıksa Tether "Turn finished" bildirimini gönderir. Onunla arka planda çalışan bir arkadaşla konuşur gibi konuşun: uzun süren bir iş (araştırma, birkaç adım) kendi arka plan alt ajanına gider, sohbet ne başlattığını tek satırda söyler ve hemen boşalır. İlki çalışırken ikinci bir konu açın: her konu kendi alt ajanını alır ve her sonuç hazır olunca bu sohbete gelir. Web'de araştırma isteyin ya da öteki sohbetlerinizi sorun: tüm projelerin sohbetlerini (çalışıyor, sizi bekliyor ya da boşta) listeleyebilir ve bir sohbetin son mesajlarını okuyabilir. Bir sohbete mesaj da gönderebilir, bir projede yeni sohbet açabilir, çalışan bir sohbeti durdurabilir ya da bir sohbeti arşivleyebilir: bu dört işlemin her biri önce dsh'nin onay kartını açar (Tether'da da), **Bir kez izin ver**'e tıklamadan hiçbir şey olmaz. Silme aracı yoktur. Bu araçlar ve kısa talimatlar yalnız bu sohbettedir. Bir web sayfasında ya da başka bir sohbette okuduğu metin emir değil, veri sayılır. Profilinizi her seferinde anlatmak yerine bu projenin hafızasında tutun (**Proje hafızası**, "profil" konusu). | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Ekran görüntüsü: Asistan"></a> |
|
|
79
|
+
| **Asistan sohbetlerden ayrı** | <a id="feature-assistantapart"></a>Varsayılan olarak açıktır (**Ayarlar → Composer Plus** içinden kapatabilirsiniz). Asistan sohbeti sol kenar çubuğundaki sohbet listesinden çıkar, proje sohbetlerinizin arasında durmaz: onu **Asistan** ile açarsınız. Başka sohbeti yoksa "Assistant" projesi de gizlenir; kenar çubuğu araması sohbeti yine bulur. **Asistan** satırındaki nokta asistanın durumunu gösterir: çalışıyor (arka planda bir konu sürerken de), sizi bekliyor (turuncu: onay, soru ya da plan incelemesi) ya da yeni yanıt (yeşil). Asistan sohbeti açıkken **Asistan** satırı açık olan satır olarak görünür. Kapatınca sohbet listeye döner ve satırda nokta olmaz. | <a href="assets/features/assistantApart.webp"><img src="assets/features/assistantApart.webp" width="160" alt="Ekran görüntüsü: Asistan sohbetlerden ayrı"></a> |
|
|
80
|
+
| **Asistanda yalnız mesajlar** | <a id="feature-assistantchatview"></a>Varsayılan olarak açıktır (**Ayarlar → Composer Plus** içinden kapatabilirsiniz). Asistan sohbeti bir botla yazışma gibi görünür: araç çağrıları, düşünme satırları, adım grupları ve "Completed in" satırı gizlenir. Siz yalnız kendi mesajlarınızı, asistanın yanıtlarını, hataları ve onay kartlarını görürsünüz. Öteki sohbetler değişmez. Asistanın çalışma adımlarını yeniden görmek için anahtarı kapatın. | <a href="assets/features/assistantChatView.webp"><img src="assets/features/assistantChatView.webp" width="160" alt="Ekran görüntüsü: Asistanda yalnız mesajlar"></a> |
|
|
81
|
+
| **Asistan hep boşta** | <a id="feature-assistantfree"></a>Varsayılan olarak açıktır (**Ayarlar → Composer Plus** içinden kapatabilirsiniz). Asistan sohbeti hemen yanıt verir ve hiçbir zaman uzun bir işle meşgul kalmaz: yalnız kendi kısa araçlarını (sohbetleriniz, hatırlatmalar, hafıza ve alt ajanlar) çağırır. Web araması, web sayfası, dosya ya da komut gibi her başka adım arka plandaki bir alt ajana gider. Sohbet neyi başlattığını tek satırla söyler ve bir sonraki mesajınız için boşta kalır. Sonuç hazır olunca sohbete gelir. Asistanın alt ajanları her zamanki gibi çalışır. Asistan sohbetinin alt ajan aracı yoksa (izin modu ya da profili yüzünden) kural çalışmaz ve **Ayarlar** bunu yazar. | <a href="assets/features/assistantFree.webp"><img src="assets/features/assistantFree.webp" width="160" alt="Ekran görüntüsü: Asistan hep boşta"></a> |
|
|
82
|
+
| **Asistan sohbet haberleri** | <a id="feature-assistantnotify"></a>Varsayılan olarak kapalıdır: her haber satırı asistan sohbetinin bir model turudur, bu yüzden token harcar. **Ayarlar → Composer Plus** içinden açın. Açınca asistan, başka bir sohbet uzun bir turu (1 dakika ya da daha uzun) bitirdiğinde, hata verdiğinde ya da 30 saniye boyunca sizi beklediğinde (onay, soru ya da plan incelemesi) bunu kendi sohbetinde söyler: her sohbet için sohbetin başlığı ve projesiyle kısa bir satır. Haberler 15 saniye toplanır ve en fazla 2 dakikada bir gelir. Asistan çalışırken haberler o turun bitmesini bekler. Sizin durdurduğunuz sohbet, kısa bir tur ve asistanın kendi sohbeti haber olmaz. **Mobil bağlantı (iPhone)** açıksa Tether, asistanın her zamanki "Turn finished" bildirimini alır. | <a href="assets/features/assistantNotify.webp"><img src="assets/features/assistantNotify.webp" width="160" alt="Ekran görüntüsü: Asistan sohbet haberleri"></a> |
|
|
79
83
|
| **Proje hafızası** | <a id="feature-projectmemory"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Her proje klasörünün kendi hafızası olur ve o projenin sonraki sohbetleri bu hafızayı okur. DS Bot da her Bot için böyle bir hafıza tutar. Her tur bittikten sonra sohbetin modeline bir çağrı yapılır: yeni mesajları okur (geri alınanları okumaz), kalıcı tercihlerinizi, kararlarınızı ve olguları kısa notlar olarak saklar, eski notları değiştirir ya da siler. Ajan da notları kendisi kaydedebilir, silebilir ve arayabilir (`memory_remember`, `memory_forget`, `memory_recall`). Bir not genel de olabilir: o notu her proje okur. Yeni bir sohbet notları sistem isteminde alır; sonra kaydedilen bir not bir sonraki sohbette görünür. Dosyalar dsh ana klasöründe Markdown dosyalarıdır (`storages/dsh-composer-plus/memory/`), hiçbir zaman proje klasöründe değildir. Aynı satırdaki **Hafızayı aç**, kaydedilen tüm notları proje proje (ve genel hafızayı) gösterir; notları filtreleyebilirsiniz. Neyin değişeceğini kendi sözlerinizle yazın (örneğin "yarn yerine artık pnpm kullanıyorum"), sonra **Değişiklikleri önizle**: değişiklikleri dsh’nin varsayılan modeli önerir, yalnız **Uygula** onları kaydeder. Tether’de: sohbet başlığı menüsü → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ekran görüntüsü: Proje hafızası"></a> |
|
|
80
84
|
| **Hafıza sürüm geçmişi** | <a id="feature-memoryhistory"></a>**Proje hafızası** açıkken varsayılan olarak açıktır. Hafızaya yapılan her kayıttan önce (ajan, tur sonrası gözden geçirme, **Hafızayı aç**) notların o anki bir kopyası tutulur. **Hafızayı aç** içinde bir proje ya da **Genel hafıza** seçin, sonra **Geçmiş**: sürümler tarihe göre ve her birinden sonra hafızayı kimin değiştirdiğiyle listelenir. Bir sürüm seçince geri yüklemenin neyi değiştireceğini diff olarak görürsünüz, sonra **Geri yükle**. Geri yüklemeden önceki notlar da tutulur, bu yüzden geri yüklemeyi geri alabilirsiniz. Her hafızanın en yeni 50 sürümü kalır. Tether'da: sohbet başlığı menüsü → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Ekran görüntüsü: Hafıza sürüm geçmişi"></a> |
|
|
81
85
|
| **Hafızayı AGENTS.md dosyasına aktar** | <a id="feature-memoryexport"></a>**Hafızayı aç** içinde bir proje seçin, sonra **AGENTS.md dosyasına aktar**: o projenin notları klasöründeki `AGENTS.md` dosyasında işaretli bir bölüme yazılır. Böylece notları commit edip ekibinizle ve başka ajan araçlarıyla paylaşabilirsiniz. Değişikliği önce diff olarak görürsünüz; yalnız **AGENTS.md dosyasını yaz** kaydeder. Sonraki aktarım yalnız bu bölümü değiştirir. Genel hafıza, kaynaklar ve tarihler yazılmaz. Tether'da: sohbet başlığı menüsü → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Ekran görüntüsü: Hafızayı AGENTS.md dosyasına aktar"></a> |
|
|
@@ -104,7 +108,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
104
108
|
| **Seçenek düğmeleri** | <a id="feature-optionpicks"></a>Bir yanıt bir seçenek listesiyle bittiğinde ("Seçenekler" başlığı ya da kalın "Seçenekler" satırı altında 1–9 maddelik numaralı bir liste; "Sonraki adımlar" ve uygulamanın dillerindeki aynı sözcükler de geçerlidir), yanıtın altında her seçenek için bir düğme görünür. Tıklama, seçeneğin tamamıyla birlikte "Option N: …" metnini, siz yazmışsınız gibi mesajınız olarak gönderir. "(önerilen)" ile işaretli seçenek vurgulanır. Düğmeler yalnızca en yeni yanıtın altında, sohbet boştayken ve mesaj kutusu boşken görünür; seçim yapılmış bir yanıtta ve geri alınmış bir yanıtta düğme yoktur. Düğmeler görünürken Sonraki mesaj tahmini tahmin göstermez. Ajanın soru kartında 1–9 tuşları, tıklama gibi o seçeneği seçer (yanıt alanında çalışmaz, soru göründükten sonraki ilk 0,8 saniyede de çalışmaz). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Ekran görüntüsü: Seçenek düğmeleri"></a> |
|
|
105
109
|
| **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> |
|
|
106
110
|
| **Mobil bağlantı (iPhone)** | <a id="feature-mobileconnect"></a>dsh’yi iPhone’unuzdan [Tether](tether/) uygulamasıyla, aynı Wi-Fi ağında ya da [Tailscale](https://tailscale.com) üzerinden kullanın. Özelliği **Ayarlar → Composer Plus** içinden açın (varsayılan olarak kapalıdır, çünkü bu Mac’te bir ağ portu açar). Sonra kenar çubuğunun sol altındaki **Mobil bağlantı** düğmesine tıklayın. QR kodunu iPhone’un Kamera uygulamasıyla (**Open in Tether** düğmesine dokunun) ya da Tether’deki **Scan code** ile tarayın. **Connect** düğmesine dokunun ve **Approve** düğmesine tıklayın. Önce Tether’i yükleyin: Tether yüklü değilse Kamera bu kodu açamaz. Telefon sohbetlerinizi gösterir, mesaj gönderir (fotoğraflarla birlikte: mesaj alanındaki **+** → Camera, Photos ya da Paste image), onayları ve soruları yanıtlar, modelleri ve ajanları değiştirir. İstediğiniz kadar Mac eşleştirebilirsiniz: uygulamanın sol üstündeki Mac adıyla Mac’ler arasında geçiş yaparsınız. **Mobil bağlantı** paneli eşleştirilmiş iPhone’ları son bağlantı zamanlarıyla listeler: **Remove** ile birinin bağlantısını hemen kesersiniz. “Tailscale only” yerel ağı reddeder (paylaşılan bir Wi-Fi için) ve erişim günlüğü kimin bağlanmayı denediğini gösterir. Tether’de “Settings → Privacy” uygulamayı Face ID ile kilitler. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ekran görüntüsü: Mobil bağlantı (iPhone)"></a> |
|
|
107
|
-
| **Uzak bilgisayarlar** | <a id="feature-remotecomputers"></a>Diğer Mac’lerinizdeki dsh’yi [Tailscale](https://tailscale.com) üzerinden açın ve bu dsh penceresinde kullanın. Özelliği her Mac’te **Ayarlar → Composer Plus** içinden açın (varsayılan olarak kapalıdır, çünkü ağ portları açar). Açmak istediğiniz Mac’te **Diğer bilgisayarların bu Mac’i açmasına izin ver** seçeneğini açın, **Eşleştirme bağlantısı oluştur** düğmesine tıklayın ve bağlantıyı kopyalayın. Bu Mac’te sol kenar çubuğundaki bilgisayar seçicide (marka adının sağında, **Yeni oturum** düğmesinin üstünde) **Bilgisayar ekle…** seçeneğini seçin, bağlantıyı yapıştırın, bir **Ad** yazın (bu Mac’in ya da başka bir bilgisayarın adı olmamalı) ve **Bağlan** düğmesine tıklayın. Sonra diğer Mac’te **Onayla** düğmesine tıklayın. Bundan sonra seçici **Bu Mac** ile bilgisayarlarınızı listeler: birini seçin, onun dsh’si bu pencereyi kaplar. Orada o bilgisayarın kendi sohbetleri, kenar çubuğu, araçları ve dosyaları vardır. Bu sırada bu Mac arkada çalışmaya devam eder. Seçici aynı yerde kalır ve üzerinde **Bu Mac’e dön** yazar: geri dönmek için ona tıklayın.
|
|
111
|
+
| **Uzak bilgisayarlar** | <a id="feature-remotecomputers"></a>Diğer Mac’lerinizdeki dsh’yi [Tailscale](https://tailscale.com) üzerinden açın ve bu dsh penceresinde kullanın. Özelliği her Mac’te **Ayarlar → Composer Plus** içinden açın (varsayılan olarak kapalıdır, çünkü ağ portları açar). Açmak istediğiniz Mac’te **Diğer bilgisayarların bu Mac’i açmasına izin ver** seçeneğini açın, **Eşleştirme bağlantısı oluştur** düğmesine tıklayın ve bağlantıyı kopyalayın. Bu Mac’te sol kenar çubuğundaki bilgisayar seçicide (marka adının sağında, **Yeni oturum** düğmesinin üstünde) **Bilgisayar ekle…** seçeneğini seçin, bağlantıyı yapıştırın, bir **Ad** yazın (bu Mac’in ya da başka bir bilgisayarın adı olmamalı) ve **Bağlan** düğmesine tıklayın. Sonra diğer Mac’te **Onayla** düğmesine tıklayın. Bundan sonra seçici **Bu Mac** ile bilgisayarlarınızı listeler: birini seçin, onun dsh’si bu pencereyi kaplar. Orada o bilgisayarın kendi sohbetleri, kenar çubuğu, araçları ve dosyaları vardır. Bu sırada bu Mac arkada çalışmaya devam eder. Seçici aynı yerde kalır ve üzerinde **Bu Mac’e dön** yazar: geri dönmek için ona tıklayın. Tek bir diğer bilgisayarınız varsa seçiciye tıklamak bu Mac ile o bilgisayar arasında hemen geçiş yapar (menü açılmaz). Menünün tamamı (**Bilgisayar ekle…**) için seçiciye sağ tıklayın. Daha fazla bilgisayarınız varsa tıklama menüyü açar. Orada **Bu Mac** seçeneğini ya da başka bir bilgisayarı seçin. Ayarlar panelinde bilgisayarları yeniden adlandırabilir ve kaldırabilirsiniz. Panel, bu Mac’i açabilen bilgisayarları da listeler (**Kaldır** birinin bağlantısını hemen keser). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Ekran görüntüsü: Uzak bilgisayarlar"></a> |
|
|
108
112
|
| **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ı **Uygulama dili** ayarındaki dilde bir kez gösterir (notlar yeni sürümle birlikte gelir, ek ağ çağrısı yapılmaz; notu olmayan bir dilde İngilizce notlar görünür). **Kapat** düğmesi ya da `Esc` pencereyi kapatır. Notların altındaki bir satır GitHub’da yıldız ister; bu satır en çok 30 günde bir görünür (ağ çağrısı yapılmaz). **GitHub’da yıldız ver** ya da **Bir daha sorma** tıklandıktan sonra bir daha görünmez. Pencere, Ayarlar → Eklentiler ya da kopyalanan bir klasörle yapılan güncellemeden sonra da her yeni sürümde bir kez açılır; ilk kurulumda açılmaz. Güncelleme satırındaki **Bu sürümdeki yenilikler** pencereyi yeniden açar. Diskteki sürüm çalışan sürümden yeniyse satır dsh’yi yeniden başlatmanızı söyler. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ekran görüntüsü: Otomatik güncellemeler"></a> |
|
|
109
113
|
| **Açık/kapalı filtresi** | <a id="feature-featurefilter"></a>**Ayarlar → Composer Plus** içinde **Özellik ara** kutusunun yanında: **Tümü** tüm özellikleri, **Açık** yalnız anahtarı açık olanları, **Kapalı** yalnız anahtarı kapalı olanları gösterir. Her satırın kendi anahtarı belirler; dsh’nin Host’unun tuttuğu anahtarlar da dahildir (örneğin **Mobil bağlantı**). Aramayla birlikte çalışır: bir sözcük yazıp **Kapalı**’yı seçerek kapattığınız bir özelliği bulursunuz. **Açık** ya da **Kapalı** seçiliyken anahtarını değiştirdiğiniz satır, yeniden bir filtre seçene kadar kalır; böylece odak anahtarında kalır. **Açık** ve **Kapalı**, **Uygulama dili** ve **Composer Plus güncellemeleri** satırlarını gizler (anahtarları yoktur). Ayarlar her açılışta **Tümü** ile başlar. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Ekran görüntüsü: Açık/kapalı filtresi"></a> |
|
|
110
114
|
| **Issue bildir** | <a id="feature-issuereport"></a>Ayarlar → Composer Plus → **Issue bildir…** (giriş metninin altında) ya da kenar çubuğunda bir sohbete sağ tıklayın (ya da sohbetin **…** menüsünü açın) → **Composer Plus için issue bildir…**. Bir tür seçin: **Hata**, **Özellik isteği**, **İyileştirme**, **Çeviri** ya da **Soru**. Kendi sözlerinizle ve kendi dilinizde anlatın, sonra **Taslak yaz** düğmesine tıklayın (ya da `Cmd/Ctrl+Enter`). dsh’nin varsayılan modeline yapılan tek bir çağrı İngilizce bir issue yazar: türün önekiyle bir başlık (örneğin `[Bug]`) ve o türün bölümleri (hata için: What happened, Steps to reproduce, Expected, Actual), ayrıca Composer Plus, dsh ve sistem sürümlerini içeren bir satır. Başlığı ve açıklamayı okuyun ve düzenleyin; **Yeniden yaz** yeni bir taslak yazar. **Issue aç**, issue’yu GitHub CLI (`gh`) oturumunuzla Composer Plus GitHub deposunda açar ve bağlantısını gösterir. Issue herkese açıktır: anahtara ya da parolaya benzeyen metin reddedilir. `gh` issue’yu açamazsa **Bunun yerine GitHub’da aç**, GitHub’ın kendi sayfasını taslakla doldurulmuş olarak açar. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Ekran görüntüsü: Issue bildir"></a> |
|
|
@@ -199,7 +203,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
199
203
|
- **Yeni sohbette devam et:** siz tıklayana kadar hiçbir şey çalışmaz. Sonra Host tarafı sohbeti (Hedef kontrolü'nün okuduğu gibi: akıl yürütme yok, geri alınan adımlar yok) sohbetin kendi modeline gönderir ve notu gösterir; yalnız **Yeni sohbet başlat** yeni bir sohbet açar. Projeye hiçbir şey yazılmaz.
|
|
200
204
|
- **Bağlam dökümü:** Host'ta yalnız sohbet günlüğünü okur; model çağrısı yapmaz, proje dosyası okumaz.
|
|
201
205
|
- **Görev panosu:** pano, bu penceredeki dsh'nin kendi listelerinden dsh'nin kendi sohbetlerini gösterir; kendi sohbet verisi eklemez. **Yeni görev**, dsh'nin kendi yeni sohbetini açar ve ilk mesajı dsh'nin mesaj alanına siz yazarsınız. Bu yüzden onaylar, sandbox ve sohbetin modeli her zamanki gibi uygulanır. Host tarafı o sohbetin ilk mesajını kartın istemi olarak tutar ve onu (ilk 4.000 karakterini, başka hiçbir şeyi) araç olmadan bir istekle daha o sohbetin modeline gönderir ve en çok 3 etiket ister. Her görevin istemi, etiketleri ve başlama zamanı `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` dosyasında tutulur (yalnız sahibinin okuyabildiği dosya, en yeni 2.000 görev). **×** ya da **Tümünü temizle** ile panodan kaldırdığınız sohbetlerin kimlikleri de bu dosyada tutulur (en yeni 5.000 sohbet); anahtar, yanındaki `board-switch.json` dosyasındadır. Hiçbir proje klasörüne bir şey yazılmaz. **Yanıtla**, yanıtınızı dsh'nin kendi bekleyen isteğine, sohbetin kendi kartının yaptığı gibi gönderir. Önceki sürümlerin eski görev listesi (`board.json`) diskte olduğu gibi kalır ve okunmaz. **Üzerine gelince ilerleme**, sohbetin kaydını bu Mac'te okur. **Hızlı (AI’sız)** ile (varsayılan) hiçbir şey gönderilmez. **AI özeti** ile, çalışan bir kartın ilerleme kutusu açıkken (ya da Tether'ın panosu açıkken, en çok 8 çalışan kart için) Host tarafı o sohbetin en yeni kısmını (en çok yaklaşık 6.000 karakter: sizin mesajlarınız, ajanın metin yanıtları, araç çağrıları ve sonuçlarının son kısmı; akıl yürütme ve geri alınan mesajlar yok) araçsız tek bir istekle sohbetin modeline gönderir. Yalnız sohbette yeni bir adım olunca yeniden gönderir; her sohbet için en sık 20 saniyede bir. Not yalnız bellekte tutulur; ayar, `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya).
|
|
202
|
-
- **Asistan:** asistan sohbeti `~/Assistant` içindeki sıradan bir dsh sohbetidir. Model istekleri her sohbetteki gibi dsh'nin varsayılan modeline gider. Araçları bu Mac'teki öteki sohbetlerinizin kayıtlarını okur (başlık, proje, durum ve chat_read ile son mesajlar) ve bunları o modele yalnız model bir araç çağırınca verir. Bir sohbete mesaj göndermek, sohbet açmak, durdurmak ve arşivlemek onayınızı bekler. Sohbet kimliği `$DSH_HOME/storages/dsh-composer-plus/assistant.json` dosyasında, anahtar yanındaki `assistant-switch.json` dosyasında durur (yalnız sahibi okuyabilir). Hatırlatmalar ve otomasyonlar dsh'nin kendi zamanlanmış görevleridir. Sohbetin yaptığı model istekleri ve web aramaları dışında hiçbir şey bu Mac'ten çıkmaz.
|
|
206
|
+
- **Asistan:** asistan sohbeti `~/Assistant` içindeki sıradan bir dsh sohbetidir. Model istekleri her sohbetteki gibi dsh'nin varsayılan modeline gider. Araçları bu Mac'teki öteki sohbetlerinizin kayıtlarını okur (başlık, proje, durum ve chat_read ile son mesajlar) ve bunları o modele yalnız model bir araç çağırınca verir. Bir sohbete mesaj göndermek, sohbet açmak, durdurmak ve arşivlemek onayınızı bekler. Sohbet kimliği `$DSH_HOME/storages/dsh-composer-plus/assistant.json` dosyasında, anahtar yanındaki `assistant-switch.json` dosyasında durur (yalnız sahibi okuyabilir). Hatırlatmalar ve otomasyonlar dsh'nin kendi zamanlanmış görevleridir. Sohbetin yaptığı model istekleri ve web aramaları dışında hiçbir şey bu Mac'ten çıkmaz. Asistanı bot yapan anahtarlar durumlarını `assistant-free.json` ve `assistant-notify.json` dosyalarında tutar (yalnız sahibin okuyabildiği dosyalar). **Asistan sohbet haberleri**, başka bir sohbet hakkında kısa bir satırı (başlığı, projesi ve son yanıtının ya da hatasının en çok 300 karakteri) asistan sohbetine koyar. Bu yüzden bu metin de asistanın modeline gider. Bekleyen haberler yalnız bellekte durur.
|
|
203
207
|
- **Korunan dosyalar:** liste ve anahtar `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her dosya aracı çağrısının yalnız yolunu (ve gerçek yolunu) okur, dosyanın kendisini okumaz.
|
|
204
208
|
- **Engellenen komutlar:** kurallar ve anahtar `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her `bash` ve `pwsh` çağrısının yalnız komut metnini okur; hiçbir şey çalıştırmaz ve hiçbir şey göndermez.
|
|
205
209
|
- **Gizli değer girişi:** değer karttan (ya da Tether'den, istek gövdelerini loglamayan ağ geçidi üzerinden) Host'a yalnız yanıt isteğinde gider. Host onu `$DSH_HOME/storages/dsh-composer-plus/secrets/<rastgele ad>` dosyasına yazar (klasör 0700, dosya 0600). Değer projeye, sohbet kaydına ya da araç sonucuna yazılmaz. Host, o sohbetin sonraki araç sonuçlarında değerin yerine `[secret]` yazabilmek için değeri bellekte tutar. Dosya ve bu kopya, sohbetin turu bitince ve dsh açılışında silinir. Anahtar yanındaki `secrets.json` dosyasındadır. Ajanın bu dosyayla çalıştırdığı bir komut, değeri o komutun gönderdiği yere gönderebilir; özelliğin amacı da budur.
|
|
@@ -226,7 +230,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
226
230
|
- **Bir sohbet satırında dal etiketi yok:** kenar çubuğu “Tek listede” görünümünde değil (“Çalışma alanı” ve “Çalışma alanı ağacı” görünümlerinde hiçbir sohbet satırında etiket görünmez), bu sürümü yüklediğinizden beri sohbette hiç tur olmadı, sohbetin klasörü bir git deposu değil ya da **Sohbet satırlarında Git dalı** kapalı. Bir güncellemeden sonra dsh’yi yeniden başlatın (dalı Host tarafı kaydeder).
|
|
227
231
|
- **Hedef kontrolü, testin 127 koduyla ya da "not found" ile çıktığını söylüyor:** Finder’dan veya Dock’tan başlatılan dsh’nin PATH’i terminalinizdekinden daha kısa olabilir. Bu yüzden dsh `npm`, `pnpm` veya `cargo` aracını bulamaz. dsh’yi bir terminalden başlatın ya da **Hedef kontrolü** → **Düzenle** içinde tam yolu olan kendi test komutunuzu belirleyin. **Şimdi çalıştır** sonucu hemen gösterir.
|
|
228
232
|
- **Hedef kapanmıyor ve ajan çalışmaya devam ediyor:** **Hedef kontrolü** başarısız bir test ya da eksik bir iş buldu. Hedefin altındaki satır nedenini gösterir (ayrıntılar için imleci sonucun üzerine getirin). Nedeni ya da test komutunu düzeltin veya hedefi `/goal` ya da hedef çubuğuyla kendiniz tamamlayın (bu tamamlama kontrol edilmez).
|
|
229
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.
|
|
233
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.25.0`) ve yukarıdaki kurulum notuna bakın.
|
|
230
234
|
- **Şimdi yedekle, "Başka bir yedekleme işlemi sürüyor" diyor:** başka bir dsh penceresinde ya da kurtarma konsolunda bir işlem çalışıyor (ikisi, yedek klasöründeki `.composer-plus.lock` kilit dosyasını paylaşır). İşlemin bitmesini bekleyin. Çalışan bir işlem yoksa, kapanmış bir sürecin kilidi bir sonraki tıklamada devralınır.
|
|
231
235
|
- **Kurtarma konsolu "dsh is running" diyor:** önce dsh’den çıkın. dsh gerçekten kapalıysa mesajda adı geçen dosya bir çökmeden kalmıştır: dosyayı silin ve yeniden deneyin.
|
|
232
236
|
- **Geri yüklemeden sonra dsh açılmıyor ya da bir eklenti eksik:** bir profilin eklenti paketlerinin yeniden yüklenmesi gerekir. Kurtarma konsolu bunu geri yüklemeden sonra önerir. Ya da konsolun listelediği, `$DSH_HOME/profiles/` altındaki her klasörde `pnpm install` komutunu çalıştırın. Vault’ta olmayan gizli bilgiler (başka bir bilgisayar) yeniden girilmelidir: konsol bunları listeler.
|
|
@@ -260,7 +264,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
260
264
|
- **Soru kartını pencereye sığdır** yalnız dsh'nin soru kartını değiştirir, plan inceleme kartını değiştirmez. Kartı dsh'nin işaretlemesiyle bulur (`data-question-key`, `data-question-scroll`). Bir dsh güncellemesi bu işaretlemeyi değiştirirse kart dsh'nin çizdiği gibi görünür. Kartın yüksekliği sohbeti değil pencereyi izler: dar bir yan paneldeki sohbette uzun bir kart sohbetin üstüne taşabilir.
|
|
261
265
|
- **Sohbet başlığını pencereye sığdır**, dsh'nin sohbet başlığını dsh'nin ürettiği sınıf adlarıyla (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) bulur, çünkü dsh bunun için bir yerleşim kancası vermez. Bir dsh güncellemesi bu adları değiştirirse başlık dsh'nin çizdiği gibi görünür. Çok dar bir sohbet sütununda başlık iki ya da üç satır kaplayabilir, bu yüzden mesajların üstündeki alan azalır.
|
|
262
266
|
- **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). `apns.json` içinde bir APNs anahtarı varsa (bkz. `tether/README.md`), Mac bildirimleri Apple’ın push hizmetiyle gönderir; bildirimler Tether kapalıyken de gelir. Mac uyanık ve dsh açık olmalıdır. Anahtar yoksa telefon yalnızca Tether açıkken ya da arka plana yeni geçmişken bildirim alır. Tether bu bildirimleri yalnızca Tether’de "Settings → Notifications → Send notifications" seçeneğini açtıktan sonra gönderir. Tether bu seçeneği ve saat aralığını eşleşmiş her Mac için ayrı tutar. Seçenek her Mac için varsayılan olarak kapalıdır. iOS bildirim iznini, seçeneği açtığınızda ister. iOS uygulaması henüz App Store’da değildir: uygulamayı Xcode ile `tether/ios` klasöründen derleyin. "Tailscale only" açıkken de Mac’in bir Wi-Fi ya da Ethernet adresi olmalıdır (ağ geçidi yalnızca böyle bir adres varken başlar). Erişim günlüğü her Mac için ayrıdır ve yalnızca en yeni 200 denemeyi tutar. Bir dakika içinde tekrarlanan bir deneme yeni bir satır eklemez, aynı satırın sayısını bir artırır. Her bildirim Mac’i ve sohbetin projesini (`Studio Mac · recipe-box`), sohbet başlığını ve metni gösterir: Turn finished, AI’ın son yanıtını gösterir. APNs anahtarı varsa bu metin Apple’ın push hizmetinden geçer. 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.
|
|
263
|
-
- **Uzak bilgisayarlar** için iki Mac’te de Tailscale gerekir. Açtığınız Mac’te de Composer Plus olmalı ve bu özellik açık olmalıdır. O Mac uyanık olmalı ve dsh orada çalışıyor olmalıdır. Seçici yalnızca sol kenar çubuğu açıkken görünür (simge sütununda görünmez). Diğer Mac’in sayfasında kendi seçicisi yoksa (orada Composer Plus 1.23.0’dan eskiyse), bu Mac’in seçicisi aynı yerde o sayfanın üstünde görünür. Orada 1.23.0 varsa seçicide o Mac’in adı yazar: geri dönmek için menüsünden **Bu Mac** seçeneğini seçin. Açtığınız her bilgisayarın sayfası, özelliği kapatana ya da dsh’yi yeniden başlatana kadar bellekte kalır. Masaüstü uygulamasında diğer Mac’in sayfası gömülü bir sayfadır: dsh’nin kendi klavye kısayolları (örneğin yeni sohbet) orada çalışmaz. Dosya indirme, mikrofon ve bildirimler de orada çalışmaz. Özellik 19392 numaralı portu kullanır (her Mac’te yalnızca bir dsh diğer bilgisayarların girmesine izin verebilir). Diğer Mac’in sayfasındaki seçici yalnızca bu Mac’in bilgisayarları arasında geçiş yapar. Bu yüzden diğer Mac üzerinden üçüncü bir Mac açamazsınız.
|
|
267
|
+
- **Uzak bilgisayarlar** için iki Mac’te de Tailscale gerekir. Açtığınız Mac’te de Composer Plus olmalı ve bu özellik açık olmalıdır. O Mac uyanık olmalı ve dsh orada çalışıyor olmalıdır. Seçici yalnızca sol kenar çubuğu açıkken görünür (simge sütununda görünmez). Diğer Mac’in sayfasında kendi seçicisi yoksa (orada Composer Plus 1.23.0’dan eskiyse), bu Mac’in seçicisi aynı yerde o sayfanın üstünde görünür. Orada 1.23.0 varsa seçicide o Mac’in adı yazar: geri dönmek için menüsünden **Bu Mac** seçeneğini seçin. Açtığınız her bilgisayarın sayfası, özelliği kapatana ya da dsh’yi yeniden başlatana kadar bellekte kalır. Bilgisayar yanıt vermediyse (uykudaydı ya da Tailscale kapalıydı) sayfası tutulmaz: onu yeniden seçin, sayfa yeniden yüklenir. Masaüstü uygulamasında diğer Mac’in sayfası gömülü bir sayfadır: dsh’nin kendi klavye kısayolları (örneğin yeni sohbet) orada çalışmaz. Dosya indirme, mikrofon ve bildirimler de orada çalışmaz. Özellik 19392 numaralı portu kullanır (her Mac’te yalnızca bir dsh diğer bilgisayarların girmesine izin verebilir). Diğer Mac’in sayfasındaki seçici yalnızca bu Mac’in bilgisayarları arasında geçiş yapar. Bu yüzden diğer Mac üzerinden üçüncü bir Mac açamazsınız.
|
|
264
268
|
- 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.
|
|
265
269
|
- **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.
|
|
266
270
|
- **Kuyruktaki mesajı yerinde düzenle**, bu arada gönderilmeye başlayan ya da başka bir yerde (örneğin iPhone’daki Tether’de) değişen bir mesajı değiştirmez ve bunu bir uyarıyla bildirir. Yeni görsel için görselleri kabul eden bir model gerekir (dsh’nin kendi görsel sınırları da geçerlidir), yeni dosyanın da yüklemesi bitmeden mesaj kaydedilemez. Yalnızca kendi mesajlarınızı düzenleyebilirsiniz: kuyruktaki bir hedef turu ya da bir soruya verilen yanıt düzenlenemez. Eklenti güncellendikten sonra yalnızca metin değişikliği hemen çalışır: görsel ya da dosya içeren bir mesajı kaydetmeden önce dsh’yi yeniden başlatın (Host tarafı açılışta yüklenir).
|
|
@@ -296,7 +300,8 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
296
300
|
- **Türkçe skill paketi** üçüncü taraf bir skill kurar: kuralları Composer Plus’tan değil, yazarın GitHub deposundan gelir; yeni bir sürüm, biz incelemeden bir sonraki günlük denetimden sonra kullanılır. Denetim, dosyaların GitHub’ın o commit için listelediği dosyalar olduğunu kanıtlar; kuralların iyi olduğunu kanıtlamaz. Skill’in ne zaman yükleneceğine model karar verir (siz de adıyla çağırabilirsiniz); kurallar yalnız Türkçe metinlere uygulanır. Host, bir tarayıcının en son bildirdiği dili kullanır: iki tarayıcı farklı diller kullanırsa en yeni bildirim geçerli olur. GitHub, giriş yapılmadan saatte 60 API çağrısına izin verir; reddedilen bir denetim kurulu kopyayı korur ve nedenini Ayarlar’da gösterir.
|
|
297
301
|
- **Kod tabanını toparla** becerinin sabit bir kopyasıyla gelir (caldoai/skills, commit f3cf477): kaynaktaki bir değişiklik yalnız yeni bir Composer Plus sürümüyle gelir. Beceri, çok dosya değiştirebilen uzun bir hedef çalıştırır; alt ajanları ve kontrolleri çok token harcar. Projenin testi olmayan yerlerde davranışı fark ettirmeden değiştirebilir: ayrı bir dalda başlatın ve birleştirmeden önce farkı okuyun. Projede, özel bir beceri klasöründe ya da `~/.dsh/skills` içinde aynı adlı bir beceri varsa bunun yerine o kullanılır. Anahtar kapalıyken `/untangle-codebase` modele düz metin olarak gider.
|
|
298
302
|
- **Görev panosu** bu pencerede dsh'nin listelediği sohbetleri gösterir: proje dışındaki bir sohbet yalnız **Tüm projeler** içinde görünür ve “Sohbet başına dal” klasörü (`<project>/.worktrees/<name>`) kendi projesinden sayılır. Bir kartın sütunu sohbetin canlı durumudur, bu yüzden kartlar sürüklenemez: bir sohbet, turu bitince (bir hatadan ya da durdurmadan sonra da) **Bitti** sütununa geçer ve yeniden çalışınca **Yapılıyor** sütununa döner. Yeşil nokta dsh'nin kendi “bitti” noktasıdır ve dsh onu yalnız bu pencerede tutar: sayfa yeniden yüklenince biten sohbetler noktasız görünür. **Bitti** en yeni 50 sohbeti gösterir (**Daha eski N görevi göster** kalanları gösterir). **Projelerde ara** bir projeyi yalnız adıyla bulur, klasör yoluyla bulmaz. **Son 2 saatte aktif olanlar**, bir projenin her sohbeti 2 saatten eski, boşta ve okunmuş olduğunda o projeyi gizler; pano, seçtiğiniz projeyi yine gösterir. **Yeni görev**, bu penceredeki yeni sohbetlerden yalnız en yenisini hatırlar: ilk mesajdan önce başka bir sohbet açarsanız o sohbet, siz içine yazana kadar **Yapılıyor** sütununun en üstünde **Yeni görev** olarak kalır, ama pano yalnız en yenisi için kendiliğinden geri gelir. Sayfa yeniden yüklenince mesajı olmayan yeni sohbet panoda görünmez (dsh onu kendi boş Yeni oturumu olarak tutar). Etiketler, her görev için ilk mesajından yapılan tek bir model çağrısından gelir: yanlış olabilirler ve panoda başlatmadığınız bir sohbetin etiketi yoktur. Başlık, dsh'nin kendi sohbet başlığıdır (dsh'nin başlık hizmeti, sohbetin modeliyle); başlık gelene kadar kart ilk mesajın ilk satırını gösterir. **×** ve **Tümünü temizle** kartları yalnız panodan kaldırır: hiçbir sohbet silinmez. **Geri al** yalnız 8 saniye ve yalnız bu pencerede görünür; daha sonra **Kaldırılanlar (N)** → **Panoya geri koy** bir kartı geri getirir, yeniden çalışan bir sohbet de kendiliğinden geri gelir. **Tümünü temizle** önce sorar, sonra gösterilen projenin okunmuş biten kartlarını (**Tüm projeler** seçiliyken tüm projelerinkini), **Daha eski N görevi göster** arkasında kalanlar da dahil, panodan kaldırır; okunmamış (yeşil) kart kalır. dsh yeşil noktasını yalnız bu pencerede tutar, bu yüzden sayfa yeniden yüklendikten sonra Tümünü temizle, yanıtını okumadığınız bir kartı da kaldırabilir. Liste bu Mac'te tutulur ve her pencerede ve Tether'da geçerlidir; listede 5.000 sohbet olunca en eskileri geri gelir. **Yanıtla** yalnız sohbetin en yeni isteğini yanıtlar: sohbet o isteği başka bir yerde yanıtladıysa (başka bir pencere, Tether, Otomatik inceleme) ya da yeni bir şey soruyorsa panel bunu söyler ve hiçbir şey göndermez. Önceki sürümlerde yorumlu bir görev listesi ve ajan araçları vardı; bunlar kaldırıldı ve eski `board.json` gösterilmez. Fikir ve görünüm emanuele-em'in [Kanzo](https://github.com/emanuele-em/kanzo) projesinden gelir (AGPL-3.0); Composer Plus onun kodunu kullanmaz. `Cmd+Shift+K` bir dsh kısayoludur: Linux’taki tarayıcıda varsayılan tuşu yoktur (dsh’nin Klavye kısayolları sayfasında bir tuş atayın) ve bir tarayıcı uzantısı ya da başka bir uygulama tuşu önce alabilir. Bir kart, dsh’nin kendi yeşil noktası gidince (sohbeti açtığınızda) **Bitti** sütunundan çıkar; panonun arkasında açık sohbetken biten bir sohbet için, o sohbet üstünde panel olmadan görününce çıkar. Bu okundu bilgisi dsh’nin kendi noktaları gibi yalnız bu dsh penceresinde tutulur: sayfayı yenileyince ya da başka bir pencerede biten her sohbet okunmuş sayılır, yani **Son bitenler** içindedir.
|
|
299
|
-
- **Asistan** bu Mac'in tüm pencereleri için tek bir sohbettir. workspace-write izin moduyla çalışır: dosyaları yalnız `~/Assistant` içine yazar, dışarıda çalışacak bir komut önce sorar. Sohbeti onaysız bir moda (Tam erişim) geçirirseniz dsh her onayı reddeder, bu yüzden asistan sohbete mesaj gönderemez, sohbet açamaz, durduramaz ya da arşivleyemez. Onay kartı yalnız altı aracı korur: asistanın çalıştırdığı bir kabuk komutu, o moddaki her sohbette olduğu gibi ağa yine erişebilir. dsh 0.2.0 ve 0.2.1'de dsh'nin zamanlanmış görev araçları yalnız asistan sohbetinin kendi hatırlatmalarını görür, öteki sohbetlerin otomasyonlarını görmez. dsh 0.2.2'den başlayarak tüm zamanlanmış görevleri listeler ve değiştirir. chats_list arşivlenmiş, boş ve alt ajan sohbetlerini ve asistan sohbetinin kendisini göstermez. "Sizi bekliyor", çalışan bir sohbette yanıtlanmamış bir onay, soru ya da plan incelemesi demektir. chat_read kullanıcının mesajlarını ve ajanın yanıtlarını verir (araç çıktısı yok), en çok 50 mesaj ve yaklaşık 24.000 karakter. chat_archive hâlâ çalışan ya da etkin hatırlatması olan bir sohbeti reddeder. Model okuduğu bir metinle yine de yanıltılabilir: son kontrol onay kartıdır, **Bir kez izin ver**'e tıklamadan önce kartı okuyun.
|
|
303
|
+
- **Asistan** bu Mac'in tüm pencereleri için tek bir sohbettir. workspace-write izin moduyla çalışır: dosyaları yalnız `~/Assistant` içine yazar, dışarıda çalışacak bir komut önce sorar. Sohbeti onaysız bir moda (Tam erişim) geçirirseniz dsh her onayı reddeder, bu yüzden asistan sohbete mesaj gönderemez, sohbet açamaz, durduramaz ya da arşivleyemez. Onay kartı yalnız altı aracı korur: asistanın çalıştırdığı bir kabuk komutu, o moddaki her sohbette olduğu gibi ağa yine erişebilir. dsh 0.2.0 ve 0.2.1'de dsh'nin zamanlanmış görev araçları yalnız asistan sohbetinin kendi hatırlatmalarını görür, öteki sohbetlerin otomasyonlarını görmez. dsh 0.2.2'den başlayarak tüm zamanlanmış görevleri listeler ve değiştirir. chats_list arşivlenmiş, boş ve alt ajan sohbetlerini ve asistan sohbetinin kendisini göstermez. "Sizi bekliyor", çalışan bir sohbette yanıtlanmamış bir onay, soru ya da plan incelemesi demektir. chat_read kullanıcının mesajlarını ve ajanın yanıtlarını verir (araç çıktısı yok), en çok 50 mesaj ve yaklaşık 24.000 karakter. chat_archive hâlâ çalışan ya da etkin hatırlatması olan bir sohbeti reddeder. Model okuduğu bir metinle yine de yanıltılabilir: son kontrol onay kartıdır, **Bir kez izin ver**'e tıklamadan önce kartı okuyun. Paralel konular dsh'nin alt ajan aracını kullanır: bu aracı vermeyen bir profil ya da izin modunda eski davranış sürer (aynı anda tek konu, sonraki mesaj kuyrukta bekler ya da çalışan tura eklenir). Neyin uzun iş sayılacağına model karar verir, bu yüzden kısa bir soru da bir tur sürebilir. Her konunun alt ajanı kendi token'larıyla çalışır. dsh yeniden başlarsa çalışan bir konu durur (sonucu gelmez). Sonuç asistan sohbetinin yeni bir turu olarak gelir, bu yüzden bir turun ortasında yazarken bekler.
|
|
304
|
+
- **Asistan sohbetlerden ayrı** ve **Asistanda yalnız mesajlar**, dsh'nin kendi satırlarını bir stil kuralıyla gizler. Satırları dsh'nin kenar çubuğu ve sohbet işaretlemesinden (`data-row-key`, `data-chat-flow-kind`) bulur. Bir dsh güncellemesi bu işaretlemeyi değiştirirse asistan sohbeti listede yeniden görünür ya da çalışma adımları yeniden görünür. Satırlar kaldırılmaz, gizlenir: dsh'nin kenar çubuğundaki klavye gezinmesi gizli bir satıra yine ulaşabilir. **Asistan hep boşta**, asistan sohbetinin kısa araçlarından olmayan her araç çağrısını reddeder. Model bundan sonra adımı bir alt ajana verir, ama önce reddedilen çağrıyı deneyebilir. Bu bir model adımına mal olur. Bir onay kartı sizi beklerken asistan sohbeti yine meşgul sayılır. En yeni isteğinde alt ajan aracı yoksa (bu aracı vermeyen bir izin modu ya da profil) kural çalışmaz. **Asistan sohbet haberleri** her haber grubu için asistan sohbetinde bir model turu başlatır, bu yüzden token harcar. **Mobil bağlantı (iPhone)** açıksa biten tek bir sohbet için telefonunuza iki bildirim gelebilir (sohbetin kendi bildirimi ve asistanınki). dsh yeniden başlayınca bekleyen haberler kaybolur. Yalnız bu Mac'teki sohbetleri görür.
|
|
300
305
|
- **Durdurduktan sonra gönderilen önce gider** yalnız sohbeti durdurduktan sonra çalışır (ya da bir tur hata verdikten sonra veya hâlâ kuyruğu olan bir sohbeti açtığınızda): bir tur çalışırken gönderdiğiniz mesaj yine kuyruğun sonunda bekler. Mesaj yalnız sizin kuyruktaki mesajlarınızın önüne geçer: kuyrukta bir hedef turu ya da bir soru yanıtı bekliyorsa dsh’nin kendi sırası kalır. dsh’nin herkese açık API olmayan bir bölümünü okur (durdurulan turun hâlâ bitip bitmediğini); bir dsh güncellemesi bunun adını değiştirirse mesaj, o tur bittikten sonra öne alınır. Alt ajan sohbetleri dsh’nin kendi sırasını korur.
|
|
301
306
|
- **Proje hafızası** sohbetin ilk klasörüne (dsh'nin proje klasörüne) aittir: klasörünü `cd` ile değiştiren bir sohbet ilk projesinin hafızasını kullanmaya devam eder; aynı klasör aynı dosyalara giden başka bir yoldan açılırsa hafızayı paylaşır. Bir sohbet, başladığında hafıza bölümünü dondurur; bu yüzden sonra kaydedilen bir not bir sonraki sohbette görünür (`memory_recall` onu hemen bulur). İnceleme yalnız modelin saklamaya karar verdiği şeyi saklar: bir olguyu kaçırabilir ya da yanlış bir şeyi saklayabilir. Notları **Hafızayı aç** içinde kontrol edip orada değiştirin ya da dsh kapalıyken dosyaları elle düzenleyin. **Hafızayı aç**, seçili projenin notlarını ve genel notları (Tüm notlar seçiliyse bütün projeleri; en çok yaklaşık 60.000 karakter, kalanı yalnız sayılır ve o istekte değişemez) ve yazdığınız metni sohbetin modeline değil, dsh’nin varsayılan modeline gönderir. Önizleme Mac’te 30 dakika ve dsh yeniden başlayana kadar tutulur; bu arada bir inceleme ya da ajan notları değiştirirse **Uygula** reddeder ve yeniden önizlersiniz. **Uygula** bir önizlemenin ya bütün değişikliklerini ya hiçbirini kaydeder: bir değişiklik kaydedilemezse (örneğin MEMORY.md doluysa) notlar olduğu gibi kalır ve nedeni görünür. Sizden bir mesaj içeren her bitmiş tur bir model çağrısına mal olur; başarısız bir çağrı, sonraki turdan sonra aynı mesajları yeniden okur. Alt ajan sohbetleri incelenmez. Fikir ve dosya biçimi [DS Bot](https://github.com/Fei2411/DS-Bot) projesinden gelir (Apache-2.0); Composer Plus onun kodunu kullanmaz ve DS Bot'un kendi hafızasını hiçbir zaman okumaz ya da yazmaz.
|
|
302
307
|
- **Hafıza sürüm geçmişi** her hafızanın (her proje ve genel hafıza) en yeni 50 sürümünü tutar; daha eskileri silinir. Bir sürüm tek bir notu değil, o projenin hafızasının tamamını tutar. **Geri yükle** o sürümün bütün dosyalarını (konular dahil) geri koyar; sürümü açtıktan sonra hafıza değiştiyse geri yüklemeyi reddeder. Geri yüklemeden önceki hafıza yeni bir sürüm olur, bu yüzden geri yüklemeyi geri alabilirsiniz. Anahtar kapalıyken yeni sürüm tutulmaz ve **Geri yükle** reddedilir; tutulmuş sürümler kalır. Bu özellikten önceki bir sürüm yoktur: geçmiş, kurulumdan sonraki ilk kayıtla başlar.
|
|
@@ -350,7 +355,9 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
350
355
|
|
|
351
356
|
**Tüm sohbetlerimi bir kanban panosu olarak görüp panodan yeni sohbet başlatabilir miyim?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın. Her sohbet **Yapılıyor**, **İncelemede** (sizi bekler) ya da **Bitti** sütununda bir karttır. **Yeni görev** projede dsh'nin yeni sohbetini açar ve ilk mesajınız gidince pano geri gelir; bir sohbeti açmadan yanıtlamak için turuncu karttaki **Yanıtla** düğmesine tıklayın. **Bitti** sütunundaki **Tümünü temizle** önce sorar ve okuduğunuz biten kartları panodan kaldırır; **Geri al** ve **Kaldırılanlar (N)** onları geri getirir, sohbetler dsh'de kalır.
|
|
352
357
|
|
|
353
|
-
**Bana hatırlatma yapan ve öteki sohbetlerimi yöneten kişisel bir asistan sohbetim olabilir mi?** Evet, **Asistan** ile (varsayılan olarak
|
|
358
|
+
**Bana hatırlatma yapan ve öteki sohbetlerimi yöneten kişisel bir asistan sohbetim olabilir mi?** Evet, **Asistan** ile (varsayılan olarak açık): sol kenar çubuğunda **Asistan**'a tıklayın. dsh'nin zamanlanmış görevleriyle hatırlatma kurar, web'de arar, sohbetlerinizi listeler ve okur. Bir sohbete mesaj göndermek ya da sohbet açmak, durdurmak, arşivlemek için önce onayınızı ister. Profilinizi bu projenin hafızasında, "profil" konusunda tutun.
|
|
359
|
+
|
|
360
|
+
**Asistan sohbet listemde durmadan bir bot gibi çalışabilir mi?** Evet. **Asistan sohbetlerden ayrı**, sohbetini kenar çubuğu listesinden çıkarır ve durumunu **Asistan** satırında gösterir (sizi beklerken turuncu). **Asistanda yalnız mesajlar** çalışma adımlarını gizler. **Asistan hep boşta**, daha uzun her adımı arka plandaki bir alt ajana verdirir, bu yüzden asistan hemen yanıt verir. **Asistan sohbet haberleri** (varsayılan olarak kapalı, token harcar) başka bir sohbet bittiğinde, hata verdiğinde ya da sizi beklediğinde asistanın bunu size söylemesini sağlar.
|
|
354
361
|
|
|
355
362
|
**dsh, dsh-backup gibi sohbetlerimi ve ayarlarımı yedekleyebilir mi?** Evet: **Ayarlar → Composer Plus → Yedekleme → Şimdi yedekle**. Aynı arşiv biçimini aynı klasöre (`~/Desktop/dsh-backups`) yazar. Bu yüzden dsh-backup’ın arşivleri de görünür ve geri yüklenebilir; dsh-backup’ı kaldırabilirsiniz. Zamanlanmış yedekleme için **Otomatik yedekleme** ayarını açın.
|
|
356
363
|
|
|
@@ -504,8 +511,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
511
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
512
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
513
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
514
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
515
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
516
|
+
# Assistant welcome card: shows above the input on the first open of the assistant chat, goes with the switch and with the first message, not in other chats
|
|
517
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-assistant-welcome.mjs /path/to/dsh/lib/bin.js
|
|
509
518
|
```
|
|
510
519
|
|
|
511
520
|
```sh
|
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.25.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -75,7 +75,11 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
75
75
|
| **Tệp được bảo vệ** | <a id="feature-protectedfiles"></a>Bật theo mặc định. Các công cụ tệp riêng của tác tử không thể đọc hoặc thay đổi các tệp khớp với mẫu của bạn: `read`, `read_image` và `grep` trên một tệp bị từ chối với mẫu **đọc và ghi**, còn `write`, `edit` và `str_replace_editor` bị từ chối với cả hai loại. Tác tử đọc lý do và được yêu cầu hỏi bạn. Mẫu mặc định là `.env*`, `*.pem` và `*.key`. Cài đặt → Composer Plus → **Tệp được bảo vệ**: thêm một mẫu (ví dụ `published/**` hoặc `config/*.yml`), nhấp vào loại của mẫu để chuyển giữa **đọc và ghi** và **chỉ ghi**, xóa mẫu bằng ✕, hoặc nhấp **Dùng giá trị mặc định**. Mẫu không có `/` khớp với tên tệp trong bất kỳ thư mục nào. Đây là rào chắn bảo vệ, không phải sandbox: lệnh shell (`cat .env`), script hoặc công cụ MCP vẫn có thể truy cập tệp (xem Giới hạn). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ảnh chụp màn hình: Tệp được bảo vệ"></a> |
|
|
76
76
|
| **Lệnh bị chặn** | <a id="feature-blockedcommands"></a>Bật theo mặc định, với danh sách trống. Các lệnh shell của tác tử (`bash`, `pwsh`) không thể chạy lệnh khớp với quy tắc của bạn: quy tắc **chặn** từ chối lệnh gọi (tác tử đọc lý do và được yêu cầu hỏi bạn), quy tắc **hỏi trước** hiện thẻ phê duyệt của dsh, và lệnh chỉ chạy khi bạn cho phép. Cài đặt → Composer Plus → **Lệnh bị chặn**: nhập một quy tắc (ví dụ `npm publish`, `git push --force` hoặc `ssh *192.168.2.19`), nhấp vào loại để chuyển giữa **chặn** và **hỏi trước**, rồi nhấp **Thêm**; nhấp vào loại của một quy tắc để đổi loại, xóa quy tắc bằng ✕. Một quy tắc là tên lệnh và các từ phải đứng sau nó theo đúng thứ tự này; `*` khớp với mọi văn bản. Tính năng cũng tìm thấy lệnh sau `&&`, `;`, `\|`, bên trong `$(…)`, `bash -c "…"` hoặc `eval`, và sau `sudo` hoặc `env`. Đây là rào chắn bảo vệ, không phải sandbox: một biến (`$CMD`), một tệp script hoặc một chương trình khác vẫn có thể chạy lệnh (xem Giới hạn). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ảnh chụp màn hình: Lệnh bị chặn"></a> |
|
|
77
77
|
| **Bảng tác vụ** | <a id="feature-taskboard"></a>Thanh bên trái → **Bảng tác vụ**, hoặc nhấn `Cmd+Shift+K` (`Ctrl+Shift+K` trên Windows và Linux) ở bất kỳ đâu trong dsh. Bảng kanban các cuộc trò chuyện dsh của bạn với trạng thái trực tiếp giống thanh bên: cuộc trò chuyện đang chờ bạn phê duyệt, trả lời hoặc xem xét kế hoạch nằm ở **Đang duyệt** với chấm cam, cuộc trò chuyện đang chạy nằm ở **Đang làm**, cuộc trò chuyện đã xong mà bạn chưa mở nằm ở **Xong** (màu xanh lá). Khi bạn mở một cuộc trò chuyện, thẻ của nó tự rời **Xong**; nhấp **Vừa xong (N)** bên dưới các thẻ xanh lá để xem các cuộc trò chuyện đã xong mà bạn đã đọc (10 mục mới nhất, sau đó **Hiện N tác vụ cũ hơn**; trạng thái mở hoặc đóng được lưu trên thiết bị này). Cuộc trò chuyện xong khi đang mở phía sau bảng (một **Tác vụ mới**) vẫn màu xanh lá cho đến khi bạn mở. Nhấp vào tên dự án ở đầu bảng để mở danh sách dự án, rồi chọn một dự án hoặc **Tất cả dự án**; thư mục branch riêng của từng cuộc trò chuyện được tính là thuộc dự án của nó. Danh sách đóng sau khi bạn chọn, khi nhấn `Esc` hoặc khi nhấp ra ngoài. Gõ vào **Tìm dự án** ở đầu danh sách để tìm dự án theo tên (không phân biệt chữ hoa, chữ thường và dấu; `Esc` xóa trống ô), nhấn `Enter` để chọn kết quả khớp đầu tiên, và nhấp **Hoạt động trong 2 giờ qua** để chỉ hiện các dự án có cuộc trò chuyện đang chờ, đang chạy, đã xong mà chưa xem hoặc đã thay đổi trong 2 giờ qua (được lưu trên thiết bị này). **Tác vụ mới** (hoặc `n`) mở cuộc trò chuyện mới của chính dsh trong dự án mà bảng đang hiện (với **Tất cả dự án**, đó là dự án mà Phiên mới của dsh chọn), nên bạn có thể thêm tệp, dùng lệnh và chọn mô hình như trong mọi cuộc trò chuyện. Khi tin nhắn đầu tiên của bạn được gửi, bảng tự quay lại. Trước đó, cuộc trò chuyện chờ ở trên cùng của **Đang làm** dưới tên **Tác vụ mới**: nhấp vào nó để viết tin nhắn đầu tiên. Dự án có cuộc trò chuyện đang chờ bạn có một chấm cam trong danh sách dự án (tên dự án ở đầu bảng cũng có chấm này khi có cuộc trò chuyện đang chờ). dsh đặt tên cho cuộc trò chuyện và mô hình của cuộc trò chuyện viết tối đa 3 nhãn từ tin nhắn đó. Nhấp vào thẻ để mở cuộc trò chuyện của nó. Nhấp vào thẻ màu cam (hoặc nút **Trả lời** của nó) để trả lời ngay trên bảng; bảng này có **Mở cuộc trò chuyện** để xem cả cuộc trò chuyện: **Từ chối** hoặc **Cho phép một lần**, **Phê duyệt** hoặc **Yêu cầu thay đổi** cho một kế hoạch, hoặc các lựa chọn và văn bản của riêng bạn cho một câu hỏi. Nhấp **×** trên một thẻ đã xong để gỡ thẻ đó khỏi bảng, hoặc mở **Vừa xong** rồi nhấp **Gỡ tất cả** ở đầu cột **Xong** để gỡ các thẻ đó khỏi bảng: trước tiên một hộp thoại cho biết bao nhiêu thẻ của dự án nào sẽ bị gỡ, và các thẻ chưa đọc (màu xanh lá) vẫn ở lại. Trong 8 giây sau đó, **Hoàn tác** đưa các thẻ trở lại; **Đã gỡ (N)** bên dưới **Xong** liệt kê các thẻ đang ở ngoài bảng, và **Đưa lại lên bảng** hiện lại một thẻ trong **Xong**. Không cuộc trò chuyện nào bị xóa: các cuộc trò chuyện vẫn ở thanh bên của dsh, bảng nhớ điều này sau khi khởi động lại (Tether hiện cùng một bảng), và cuộc trò chuyện chạy lại sẽ quay lại bảng. Trỏ vào một thẻ ở **Đang làm** (hoặc chuyển tiêu điểm bàn phím đến thẻ đó) để xem tiến độ: cuộc trò chuyện đã chạy bao lâu, bước trong danh sách việc cần làm, công cụ đang chạy và dòng cuối của tác tử. Trong Cài đặt → Composer Plus → Bảng tác vụ, **Tiến độ khi di chuột** chọn **Nhanh (không dùng AI)** (mặc định: chỉ đọc cuộc trò chuyện) hoặc **Tóm tắt bằng AI** (một lệnh gọi ngắn tới mô hình của cuộc trò chuyện viết thêm một hoặc hai câu). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ảnh chụp màn hình: Bảng tác vụ"></a> |
|
|
78
|
-
| **Trợ lý** | <a id="feature-assistant"></a>Mặc định tắt
|
|
78
|
+
| **Trợ lý** | <a id="feature-assistant"></a>Mặc định bật (tắt trong **Cài đặt → Composer Plus**). Nhấp **Trợ lý** ở thanh bên trái (ngay bên dưới **Bảng tác vụ**): tính năng này mở một cuộc trò chuyện lâu dài mà bạn dùng làm trợ lý cá nhân, giống một cuộc trò chuyện ChatGPT hoặc Grok. Lần nhấp đầu tiên tạo thư mục `~/Assistant`, thêm thư mục này làm dự án “Assistant” và bắt đầu cuộc trò chuyện với chế độ quyền workspace-write và mô hình mặc định của dsh; mỗi lần nhấp sau đó mở cùng cuộc trò chuyện đó (cuộc trò chuyện đã lưu trữ sẽ quay lại, cuộc trò chuyện đã xóa sẽ được tạo lại). Khi cuộc trò chuyện chưa có tin nhắn, một thẻ ngắn phía trên ô nhập cho biết trợ lý làm được gì và đưa ra ba yêu cầu mẫu; thẻ biến mất sau tin nhắn đầu tiên của bạn. Nhờ trợ lý nhắc bạn (“nhắc tôi uống nước sau 2 phút”): trợ lý dùng các tác vụ theo lịch của dsh, nên lời nhắc chạy cuộc trò chuyện vào thời điểm đó, và Tether gửi thông báo “Turn finished” khi Kết nối di động đang bật. Hãy nói chuyện với trợ lý như với một người bạn làm việc ở chế độ nền: một việc mất nhiều thời gian hơn (nghiên cứu, nhiều bước) được giao cho một subagent chạy nền của riêng nó, cuộc trò chuyện cho biết trong một dòng việc gì đã được bắt đầu và rảnh lại ngay. Mở chủ đề thứ hai trong khi chủ đề đầu tiên vẫn đang chạy: mỗi chủ đề có subagent riêng, và mỗi kết quả quay lại cuộc trò chuyện này khi đã sẵn sàng. Nhờ trợ lý tìm kiếm trên web, hoặc hỏi về các cuộc trò chuyện khác của bạn: trợ lý có thể liệt kê các cuộc trò chuyện của mọi dự án (đang chạy, đang chờ bạn hoặc nhàn rỗi) và đọc các tin nhắn mới nhất của một cuộc trò chuyện. Trợ lý cũng có thể gửi tin nhắn đến một cuộc trò chuyện, bắt đầu cuộc trò chuyện mới trong một dự án, dừng một cuộc trò chuyện đang chạy hoặc lưu trữ một cuộc trò chuyện: mỗi thao tác trong bốn thao tác này đều hiện thẻ phê duyệt của dsh trước (cả trong Tether), và không có gì xảy ra cho đến khi bạn nhấp **Cho phép một lần**. Trợ lý không có công cụ xóa. Chỉ cuộc trò chuyện này có các công cụ này và chỉ dẫn ngắn của nó; văn bản mà trợ lý đọc trong một trang web hoặc một cuộc trò chuyện khác được xem là dữ liệu, không phải mệnh lệnh. Hãy lưu hồ sơ của bạn trong bộ nhớ của dự án này (**Bộ nhớ dự án**, chủ đề “profil”) thay vì phải nói lại mỗi lần. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý"></a> |
|
|
79
|
+
| **Trợ lý tách khỏi các cuộc trò chuyện** | <a id="feature-assistantapart"></a>Mặc định bật (tắt trong **Cài đặt → Composer Plus**). Cuộc trò chuyện trợ lý rời khỏi danh sách cuộc trò chuyện ở thanh bên trái, nên không nằm lẫn giữa các cuộc trò chuyện dự án của bạn: mở nó bằng **Trợ lý**. Dự án “Assistant” của nó cũng ẩn đi khi dự án không có cuộc trò chuyện nào khác; tìm kiếm ở thanh bên vẫn thấy cuộc trò chuyện. Một chấm trên dòng **Trợ lý** cho biết trạng thái của trợ lý: đang làm việc (cả khi một chủ đề chạy nền), đang chờ bạn (cam: phê duyệt, câu hỏi hoặc xem xét kế hoạch) hoặc có câu trả lời mới (xanh lá). Khi cuộc trò chuyện trợ lý đang mở, dòng **Trợ lý** hiển thị là dòng đang mở. Khi tắt, cuộc trò chuyện trở lại danh sách và dòng không có chấm. | <a href="assets/features/assistantApart.webp"><img src="assets/features/assistantApart.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý tách khỏi các cuộc trò chuyện"></a> |
|
|
80
|
+
| **Trợ lý chỉ hiện tin nhắn** | <a id="feature-assistantchatview"></a>Mặc định bật (tắt trong **Cài đặt → Composer Plus**). Cuộc trò chuyện trợ lý trông như trò chuyện với bot: lệnh gọi công cụ, suy luận, nhóm bước và dòng “Completed in” được ẩn, và bạn thấy tin nhắn của bạn, câu trả lời của trợ lý, lỗi và thẻ phê duyệt. Các cuộc trò chuyện khác không thay đổi. Tắt tính năng này để xem lại các bước làm việc của trợ lý. | <a href="assets/features/assistantChatView.webp"><img src="assets/features/assistantChatView.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý chỉ hiện tin nhắn"></a> |
|
|
81
|
+
| **Trợ lý luôn rảnh** | <a id="feature-assistantfree"></a>Mặc định bật (tắt trong **Cài đặt → Composer Plus**). Cuộc trò chuyện trợ lý trả lời ngay và không bao giờ bận với một việc dài: trợ lý chỉ gọi các công cụ ngắn của riêng nó (các cuộc trò chuyện của bạn, lời nhắc, bộ nhớ và subagent). Mọi bước khác, như tìm kiếm web, trang web, tệp hoặc lệnh, được giao cho một subagent chạy nền; cuộc trò chuyện cho biết trong một dòng việc gì đã bắt đầu và rảnh cho tin nhắn tiếp theo của bạn, và kết quả quay lại cuộc trò chuyện khi đã sẵn sàng. Các subagent của trợ lý làm việc như thường. Khi cuộc trò chuyện trợ lý không có công cụ subagent (do chế độ quyền hoặc profile), quy tắc này không làm gì và **Cài đặt** sẽ báo điều đó. | <a href="assets/features/assistantFree.webp"><img src="assets/features/assistantFree.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý luôn rảnh"></a> |
|
|
82
|
+
| **Trợ lý báo tin từ các cuộc trò chuyện** | <a id="feature-assistantnotify"></a>Mặc định tắt: mỗi dòng tin là một lượt mô hình của cuộc trò chuyện trợ lý, nên sẽ tốn token. Bật trong **Cài đặt → Composer Plus**. Khi đó, trợ lý báo cho bạn ngay trong cuộc trò chuyện của nó khi một cuộc trò chuyện khác kết thúc một lượt dài (1 phút trở lên), gặp lỗi hoặc chờ bạn (phê duyệt, câu hỏi hoặc xem xét kế hoạch) trong 30 giây: mỗi cuộc trò chuyện một dòng ngắn, kèm tiêu đề và dự án của cuộc trò chuyện đó. Tin được gom trong 15 giây và đến nhiều nhất 2 phút một lần; khi trợ lý đang làm việc, tin chờ đến khi lượt đó kết thúc. Cuộc trò chuyện bạn đã dừng, lượt ngắn và chính cuộc trò chuyện trợ lý không tạo tin. Khi **Kết nối di động (iPhone)** bật, Tether nhận thông báo “Turn finished” thường lệ của trợ lý. | <a href="assets/features/assistantNotify.webp"><img src="assets/features/assistantNotify.webp" width="160" alt="Ảnh chụp màn hình: Trợ lý báo tin từ các cuộc trò chuyện"></a> |
|
|
79
83
|
| **Bộ nhớ dự án** | <a id="feature-projectmemory"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Mỗi thư mục dự án có bộ nhớ riêng, các cuộc trò chuyện sau này của dự án đó sẽ đọc, giống như DS Bot giữ một bộ nhớ cho mỗi Bot. Sau mỗi lượt kết thúc, một lần gọi mô hình của cuộc trò chuyện đọc các tin nhắn mới (không đọc tin nhắn đã hoàn tác), lưu sở thích, quyết định và dữ kiện lâu dài của bạn thành ghi chú ngắn, đồng thời sửa hoặc xóa ghi chú cũ. Tác tử cũng có thể tự lưu, xóa và tìm ghi chú (`memory_remember`, `memory_forget`, `memory_recall`). Ghi chú cũng có thể là ghi chú chung: mọi dự án đều đọc. Cuộc trò chuyện mới nhận các ghi chú trong system prompt; ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo. Các tệp là Markdown trong thư mục home của dsh (`storages/dsh-composer-plus/memory/`), không bao giờ nằm trong thư mục dự án. **Mở bộ nhớ** ở cùng hàng hiển thị mọi ghi chú đã lưu, nhóm theo dự án (và bộ nhớ chung), có bộ lọc. Viết bằng lời của bạn điều cần thay đổi (ví dụ "tôi đã chuyển từ yarn sang pnpm"), rồi bấm **Xem trước thay đổi**: mô hình mặc định của dsh đề xuất các thay đổi, và chỉ **Áp dụng** mới lưu chúng. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ảnh chụp màn hình: Bộ nhớ dự án"></a> |
|
|
80
84
|
| **Lịch sử phiên bản bộ nhớ** | <a id="feature-memoryhistory"></a>Bật theo mặc định khi **Bộ nhớ dự án** đang bật. Trước mỗi lần lưu bộ nhớ (tác tử, bước xem lại sau một lượt, **Mở bộ nhớ**), một bản sao của ghi chú như trước đó được giữ lại. Trong **Mở bộ nhớ**, chọn một dự án hoặc **Bộ nhớ chung**, rồi **Lịch sử**: các phiên bản theo ngày và ai đã thay đổi bộ nhớ sau mỗi phiên bản. Chọn một phiên bản để xem dưới dạng diff những gì khôi phục sẽ thay đổi, rồi **Khôi phục**. Ghi chú trước khi khôi phục cũng được giữ, nên bạn có thể hoàn tác. 50 phiên bản mới nhất của mỗi bộ nhớ được giữ lại. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Ảnh chụp màn hình: Lịch sử phiên bản bộ nhớ"></a> |
|
|
81
85
|
| **Xuất bộ nhớ ra AGENTS.md** | <a id="feature-memoryexport"></a>Trong **Mở bộ nhớ**, chọn một dự án, rồi **Xuất ra AGENTS.md**: ghi chú của dự án đó được ghi vào một phần có đánh dấu của `AGENTS.md` trong thư mục dự án, để bạn có thể commit và chia sẻ với nhóm và các công cụ tác tử khác. Bạn xem thay đổi dưới dạng diff trước; chỉ **Ghi AGENTS.md** mới lưu. Lần xuất sau chỉ thay thế phần đó. Bộ nhớ chung, nguồn và ngày không được ghi. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Ảnh chụp màn hình: Xuất bộ nhớ ra AGENTS.md"></a> |
|
|
@@ -104,7 +108,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
104
108
|
| **Nút lựa chọn** | <a id="feature-optionpicks"></a>Khi một câu trả lời kết thúc bằng một danh sách lựa chọn (danh sách đánh số từ 1 đến 9 mục dưới tiêu đề "Lựa chọn" hoặc một dòng in đậm "Lựa chọn", cũng như "Các bước tiếp theo" và các từ tương tự trong các ngôn ngữ của ứng dụng), mỗi lựa chọn có một nút bên dưới câu trả lời. Nhấp vào nút sẽ gửi "Option N: …" kèm toàn bộ lựa chọn làm tin nhắn của bạn, như thể bạn tự gõ. Lựa chọn có ghi "(đề xuất)" được làm nổi bật. Các nút chỉ hiện dưới câu trả lời mới nhất, khi cuộc trò chuyện đang rảnh và ô nhập tin nhắn trống; câu trả lời đã được chọn và câu trả lời đã bị hoàn tác thì không có nút. Khi các nút đang hiện, Dự đoán tin nhắn tiếp theo không đưa ra gợi ý. Trên thẻ câu hỏi của tác tử, các phím 1–9 chọn lựa chọn đó giống như một cú nhấp (không áp dụng trong ô trả lời và trong 0,8 giây đầu sau khi câu hỏi hiện ra). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Ảnh chụp màn hình: Nút lựa chọn"></a> |
|
|
105
109
|
| **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> |
|
|
106
110
|
| **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 (kèm ảnh: **+** trong khung soạn thảo → Camera, Photos hoặc Paste image), 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> |
|
|
107
|
-
| **Máy tính từ xa** | <a id="feature-remotecomputers"></a>Mở dsh của các máy Mac khác của bạn qua [Tailscale](https://tailscale.com) và dùng chúng trong cửa sổ dsh này. Bật tính năng trong **Cài đặt → Composer Plus** trên từng máy Mac (mặc định tắt, vì tính năng này mở các cổng mạng). Trên máy Mac bạn muốn mở, bật **Cho phép máy tính khác mở máy Mac này**, nhấp **Tạo liên kết ghép nối** và sao chép liên kết. Trên máy Mac này, chọn **Thêm máy tính…** trong bộ chọn máy tính ở thanh bên trái (bên phải tên thương hiệu, phía trên **Phiên mới**), dán liên kết, nhập **Tên** (không trùng tên máy Mac này hoặc tên máy tính khác) và nhấp **Kết nối**. Sau đó nhấp **Phê duyệt** trên máy Mac kia. Từ đó, bộ chọn liệt kê **Máy Mac này** và các máy tính của bạn: chọn một máy, và dsh của máy đó lấp đầy cửa sổ này, với các cuộc trò chuyện, thanh bên, công cụ và tệp của chính máy đó, trong khi máy Mac này vẫn chạy phía sau. Bộ chọn vẫn ở cùng vị trí và hiện **Quay lại máy Mac này**: nhấp vào đó để quay lại. Nếu bạn có nhiều hơn một máy tính, cú nhấp sẽ mở menu, nơi bạn chọn **Máy Mac này** hoặc một máy tính khác. Bảng Cài đặt đổi tên và xóa máy tính, và liệt kê các máy tính có thể mở máy Mac này (**Xóa** ngắt ngay một máy). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Ảnh chụp màn hình: Máy tính từ xa"></a> |
|
|
111
|
+
| **Máy tính từ xa** | <a id="feature-remotecomputers"></a>Mở dsh của các máy Mac khác của bạn qua [Tailscale](https://tailscale.com) và dùng chúng trong cửa sổ dsh này. Bật tính năng trong **Cài đặt → Composer Plus** trên từng máy Mac (mặc định tắt, vì tính năng này mở các cổng mạng). Trên máy Mac bạn muốn mở, bật **Cho phép máy tính khác mở máy Mac này**, nhấp **Tạo liên kết ghép nối** và sao chép liên kết. Trên máy Mac này, chọn **Thêm máy tính…** trong bộ chọn máy tính ở thanh bên trái (bên phải tên thương hiệu, phía trên **Phiên mới**), dán liên kết, nhập **Tên** (không trùng tên máy Mac này hoặc tên máy tính khác) và nhấp **Kết nối**. Sau đó nhấp **Phê duyệt** trên máy Mac kia. Từ đó, bộ chọn liệt kê **Máy Mac này** và các máy tính của bạn: chọn một máy, và dsh của máy đó lấp đầy cửa sổ này, với các cuộc trò chuyện, thanh bên, công cụ và tệp của chính máy đó, trong khi máy Mac này vẫn chạy phía sau. Bộ chọn vẫn ở cùng vị trí và hiện **Quay lại máy Mac này**: nhấp vào đó để quay lại. Nếu bạn chỉ có một máy tính khác, một cú nhấp vào bộ chọn sẽ chuyển ngay giữa máy Mac này và máy đó (không mở menu); nhấp chuột phải vào bộ chọn để mở toàn bộ menu (**Thêm máy tính…**). Nếu bạn có nhiều hơn một máy tính, cú nhấp sẽ mở menu, nơi bạn chọn **Máy Mac này** hoặc một máy tính khác. Bảng Cài đặt đổi tên và xóa máy tính, và liệt kê các máy tính có thể mở máy Mac này (**Xóa** ngắt ngay một máy). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Ảnh chụp màn hình: Máy tính từ xa"></a> |
|
|
108
112
|
| **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 bằng ngôn ngữ trong **Ngôn ngữ ứng dụng** (ghi chú đi kèm phiên bản mới, không gọi mạng thêm; ngôn ngữ không có ghi chú sẽ hiện ghi chú tiếng Anh); **Đóng** hoặc `Esc` đóng nó. Bên dưới ghi chú, một dòng mời bạn gắn sao trên GitHub, tối đa một lần mỗi 30 ngày (không gọi mạng); sau khi bấm **Gắn sao trên GitHub** hoặc **Không hỏi lại**, dòng này không hiện nữa. Cửa sổ cũng hiện sau khi cập nhật qua Cài đặt → Plugin hoặc một thư mục được sao chép, một lần cho mỗi phiên bản mới; không hiện ở lần cài đặt đầu tiên. **Có gì mới trong phiên bản này** ở hàng cập nhật mở lại cửa sổ. Khi trên đĩa có phiên bản mới hơn phiên bản đang chạy, hàng này yêu cầu khởi động lại dsh. | <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> |
|
|
109
113
|
| **Bộ lọc bật/tắt** | <a id="feature-featurefilter"></a>Bên cạnh **Tìm tính năng** trong **Cài đặt → Composer Plus**: **Tất cả** hiện mọi tính năng, **Bật** chỉ hiện các tính năng có công tắc đang bật, **Tắt** chỉ hiện các tính năng có công tắc đang tắt. Công tắc của từng dòng quyết định, kể cả công tắc do Host của dsh lưu (ví dụ **Kết nối di động**). Bộ lọc dùng cùng với tìm kiếm: gõ một từ rồi chọn **Tắt** để tìm tính năng bạn đã tắt. Dòng bạn chuyển khi đang chọn **Bật** hoặc **Tắt** vẫn ở lại cho đến khi bạn chọn lại một bộ lọc, nên tiêu điểm vẫn ở công tắc của nó. **Bật** và **Tắt** ẩn các dòng **Ngôn ngữ ứng dụng** và **Cập nhật Composer Plus** (chúng không có công tắc). Cài đặt luôn mở với **Tất cả**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Ảnh chụp màn hình: Bộ lọc bật/tắt"></a> |
|
|
110
114
|
| **Báo cáo issue** | <a id="feature-issuereport"></a>Cài đặt → Composer Plus → **Báo cáo issue…** (bên dưới phần giới thiệu), hoặc 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ó) → **Báo cáo issue về Composer Plus…**. Chọn một loại: **Lỗi**, **Yêu cầu tính năng**, **Cải tiến**, **Bản dịch** hoặc **Câu hỏi**. Mô tả bằng lời và ngôn ngữ của riêng bạn, rồi nhấp **Viết bản nháp** (hoặc `Cmd/Ctrl+Enter`). Một lần gọi mô hình mặc định của dsh viết một issue bằng tiếng Anh: tiêu đề có tiền tố của loại (ví dụ `[Bug]`) và các phần của loại đó (với lỗi: What happened, Steps to reproduce, Expected, Actual), kèm một dòng với phiên bản của Composer Plus, dsh và hệ thống. Đọc và sửa tiêu đề và mô tả; **Viết lại** viết một bản nháp mới. **Mở issue** mở issue trong repository GitHub của Composer Plus bằng đăng nhập GitHub CLI (`gh`) của bạn và hiện liên kết của issue. Issue được công khai: văn bản trông giống khóa hoặc mật khẩu sẽ bị từ chối. Khi `gh` không mở được issue, **Mở trên GitHub thay vào đó** mở trang riêng của GitHub với bản nháp đã điền sẵn. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Ảnh chụp màn hình: Báo cáo issue"></a> |
|
|
@@ -199,7 +203,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
199
203
|
- **Tiếp tục trong cuộc trò chuyện mới:** không có gì chạy cho đến khi bạn nhấp. Sau đó phần Host gửi cuộc trò chuyện (như Kiểm tra mục tiêu đọc: không có phần suy luận, không có bước đã bị hoàn tác) đến mô hình của chính cuộc trò chuyện và hiện ghi chú bàn giao; chỉ **Bắt đầu cuộc trò chuyện mới** mới tạo cuộc trò chuyện mới. Không có gì được ghi vào dự án.
|
|
200
204
|
- **Phân tích ngữ cảnh:** phần Host chỉ đọc nhật ký cuộc trò chuyện; không gọi mô hình, không đọc tệp dự án.
|
|
201
205
|
- **Bảng tác vụ:** bảng hiện các cuộc trò chuyện của chính dsh từ các danh sách của chính dsh trong cửa sổ này; bảng không thêm dữ liệu trò chuyện riêng nào. **Tác vụ mới** mở cuộc trò chuyện mới của chính dsh, và bạn viết tin nhắn đầu tiên trong khung soạn thảo của dsh, nên phê duyệt, sandbox và mô hình của cuộc trò chuyện áp dụng như bình thường. Phần Host giữ tin nhắn đầu tiên của cuộc trò chuyện đó làm prompt của thẻ và gửi nó (4.000 ký tự đầu tiên, không gì khác) đến mô hình của cuộc trò chuyện đó trong thêm một yêu cầu, không có công cụ, để lấy tối đa 3 nhãn. Prompt, nhãn và thời điểm bắt đầu của mỗi tác vụ được lưu trong `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (tệp chỉ chủ sở hữu truy cập được, 2.000 mục mới nhất), cùng với ID của các cuộc trò chuyện mà bạn đã gỡ khỏi bảng bằng **×** hoặc **Gỡ tất cả** (5.000 mục mới nhất); công tắc nằm trong `board-switch.json` bên cạnh. Không có gì được ghi vào thư mục dự án. **Trả lời** gửi câu trả lời của bạn đến yêu cầu đang chờ của chính dsh, giống như thẻ của chính cuộc trò chuyện. Danh sách tác vụ cũ của các phiên bản trước (`board.json`) vẫn nằm trên đĩa như cũ và không được đọc. **Tiến độ khi di chuột** đọc nhật ký của cuộc trò chuyện trên máy Mac này. Với **Nhanh (không dùng AI)** (mặc định), không có gì được gửi đi. Với **Tóm tắt bằng AI**, trong lúc hộp tiến độ của một thẻ đang chạy hiện ra (hoặc trong lúc bảng của Tether đang mở, cho tối đa 8 thẻ đang chạy), phần Host gửi phần mới nhất của cuộc trò chuyện đó (tối đa khoảng 6.000 ký tự: tin nhắn của bạn, câu trả lời dạng văn bản của tác tử, các lệnh gọi công cụ và phần cuối kết quả của chúng; không có phần suy luận hay tin nhắn đã bị hoàn tác) đến mô hình của cuộc trò chuyện, trong một yêu cầu không dùng công cụ. Phần Host chỉ gửi lại sau khi cuộc trò chuyện có bước mới, tối đa một lần mỗi 20 giây cho mỗi cuộc trò chuyện. Ghi chú chỉ được giữ trong bộ nhớ; thiết lập nằm trong `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
202
|
-
- **Trợ lý:** cuộc trò chuyện trợ lý là một cuộc trò chuyện dsh bình thường trong `~/Assistant`; các lệnh gọi mô hình của nó đi đến mô hình mặc định của dsh như mọi cuộc trò chuyện khác. Các công cụ của nó đọc nhật ký các cuộc trò chuyện khác của bạn trên máy Mac này (tiêu đề, dự án, trạng thái và, với chat_read, các tin nhắn mới nhất) và chỉ đưa chúng cho mô hình đó khi mô hình gọi một công cụ. Gửi tin nhắn đến cuộc trò chuyện, bắt đầu, dừng và lưu trữ cuộc trò chuyện đều chờ bạn phê duyệt. ID cuộc trò chuyện được lưu trong `$DSH_HOME/storages/dsh-composer-plus/assistant.json` và công tắc trong `assistant-switch.json` (tệp chỉ chủ sở hữu truy cập được). Lời nhắc và tự động hóa là các tác vụ theo lịch của chính dsh. Không có gì rời khỏi máy Mac này ngoài các yêu cầu mô hình và các lần tìm kiếm web mà cuộc trò chuyện thực hiện.
|
|
206
|
+
- **Trợ lý:** cuộc trò chuyện trợ lý là một cuộc trò chuyện dsh bình thường trong `~/Assistant`; các lệnh gọi mô hình của nó đi đến mô hình mặc định của dsh như mọi cuộc trò chuyện khác. Các công cụ của nó đọc nhật ký các cuộc trò chuyện khác của bạn trên máy Mac này (tiêu đề, dự án, trạng thái và, với chat_read, các tin nhắn mới nhất) và chỉ đưa chúng cho mô hình đó khi mô hình gọi một công cụ. Gửi tin nhắn đến cuộc trò chuyện, bắt đầu, dừng và lưu trữ cuộc trò chuyện đều chờ bạn phê duyệt. ID cuộc trò chuyện được lưu trong `$DSH_HOME/storages/dsh-composer-plus/assistant.json` và công tắc trong `assistant-switch.json` (tệp chỉ chủ sở hữu truy cập được). Lời nhắc và tự động hóa là các tác vụ theo lịch của chính dsh. Không có gì rời khỏi máy Mac này ngoài các yêu cầu mô hình và các lần tìm kiếm web mà cuộc trò chuyện thực hiện. Các công tắc biến trợ lý thành bot lưu trạng thái trong `assistant-free.json` và `assistant-notify.json` (tệp chỉ chủ sở hữu truy cập được). **Trợ lý báo tin từ các cuộc trò chuyện** đưa một dòng ngắn về một cuộc trò chuyện khác (tiêu đề, dự án và tối đa 300 ký tự của câu trả lời hoặc lỗi cuối cùng) vào cuộc trò chuyện trợ lý, nên văn bản đó cũng được gửi đến mô hình của trợ lý; tin đang chờ chỉ nằm trong RAM.
|
|
203
207
|
- **Tệp được bảo vệ:** danh sách và công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (tệp chỉ chủ sở hữu truy cập được). Bước kiểm tra chỉ đọc đường dẫn của mỗi lệnh gọi công cụ tệp (và đường dẫn thật của nó), không bao giờ đọc tệp.
|
|
204
208
|
- **Lệnh bị chặn:** các quy tắc và công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (tệp chỉ chủ sở hữu truy cập được). Bước kiểm tra chỉ đọc văn bản lệnh của mỗi lệnh gọi `bash` và `pwsh`; nó không chạy gì và không gửi gì.
|
|
205
209
|
- **Nhập giá trị bí mật:** giá trị chỉ đi từ thẻ (hoặc từ Tether, qua gateway không ghi lại nội dung yêu cầu) đến Host trong yêu cầu trả lời. Host ghi nó vào `$DSH_HOME/storages/dsh-composer-plus/secrets/<tên ngẫu nhiên>` (thư mục 0700, tệp 0600); không có gì vào dự án, nhật ký trò chuyện hay kết quả công cụ. Host giữ giá trị trong bộ nhớ để thay nó bằng `[secret]` trong các kết quả công cụ sau đó của cuộc trò chuyện. Tệp và bản sao này bị xóa khi lượt của cuộc trò chuyện kết thúc và khi dsh khởi động. Công tắc nằm trong `secrets.json` bên cạnh. Một lệnh mà agent chạy với tệp có thể gửi giá trị đến nơi lệnh đó gửi: đó là mục đích của nó.
|
|
@@ -226,7 +230,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
226
230
|
- **Dòng cuộc trò chuyện không có nhãn branch:** thanh bên không ở chế độ xem “Trong một danh sách” (trong “Không gian làm việc” và “Cây không gian làm việc”, không dòng cuộc trò chuyện nào hiển thị nhãn), cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài phiên bản này, thư mục của nó không phải repository git, hoặc **Branch Git trên dòng cuộc trò chuyện** đang tắt. Sau khi cập nhật, hãy khởi động lại dsh (phần Host ghi lại branch).
|
|
227
231
|
- **Kiểm tra mục tiêu báo bài kiểm thử thoát với mã 127 hoặc "not found":** dsh khởi động từ Finder hoặc Dock có thể có PATH ngắn hơn terminal của bạn, nên không tìm thấy `npm`, `pnpm` hoặc `cargo`. Hãy khởi động dsh từ terminal, hoặc đặt lệnh kiểm thử của riêng bạn với đường dẫn đầy đủ trong **Kiểm tra mục tiêu** → **Sửa**. **Chạy ngay** hiện kết quả ngay lập tức.
|
|
228
232
|
- **Mục tiêu không đóng và tác tử tiếp tục làm việc:** **Kiểm tra mục tiêu** đã tìm thấy một bài kiểm thử thất bại hoặc phần việc còn thiếu; dòng bên dưới mục tiêu cho biết lý do (di chuột lên kết quả để xem chi tiết). Hãy sửa nguyên nhân hoặc lệnh kiểm thử, hoặc tự hoàn tất mục tiêu bằng `/goal` hoặc thanh mục tiêu (việc này không được kiểm tra).
|
|
229
|
-
- **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.
|
|
233
|
+
- **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.25.0`), xem ghi chú cài đặt ở trên.
|
|
230
234
|
- **Sao lưu ngay báo "Một thao tác sao lưu khác đang chạy":** một thao tác đang chạy trong cửa sổ dsh khác hoặc trong bảng điều khiển cứu hộ (chúng dùng chung tệp khóa `.composer-plus.lock` trong thư mục sao lưu). Hãy chờ thao tác đó xong. Nếu không có thao tác nào đang chạy, khóa của tiến trình đã đóng sẽ được tiếp quản ở lần nhấp tiếp theo.
|
|
231
235
|
- **Bảng điều khiển cứu hộ báo "dsh is running":** trước tiên hãy thoát dsh. Nếu dsh thật sự đã đóng, tệp được nêu trong thông báo là phần còn sót lại sau một sự cố: hãy xóa tệp đó rồi thử lại.
|
|
232
236
|
- **Sau khi khôi phục, dsh không khởi động hoặc thiếu một plugin:** cần cài lại các gói plugin của profile. Bảng điều khiển cứu hộ đề nghị việc này sau khi khôi phục; hoặc chạy `pnpm install` trong từng thư mục dưới `$DSH_HOME/profiles/` mà nó liệt kê. Các thông tin bí mật không có trong vault (máy tính khác) phải được nhập lại: bảng điều khiển liệt kê chúng.
|
|
@@ -260,7 +264,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
260
264
|
- **Vừa thẻ câu hỏi với cửa sổ** chỉ thay đổi thẻ câu hỏi của dsh, không thay đổi thẻ duyệt kế hoạch. Tính năng tìm thẻ qua mã đánh dấu của dsh (`data-question-key`, `data-question-scroll`); nếu một bản cập nhật dsh thay đổi mã đánh dấu đó, thẻ hiển thị như dsh vẽ. Chiều cao của thẻ theo cửa sổ, không theo cuộc trò chuyện: trong một cuộc trò chuyện ở bảng bên hẹp, một thẻ cao vẫn có thể vượt lên trên cuộc trò chuyện.
|
|
261
265
|
- **Vừa tiêu đề cuộc trò chuyện với cửa sổ** tìm tiêu đề cuộc trò chuyện của dsh qua các tên lớp do dsh tạo (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), vì dsh không có điểm móc bố cục cho nó. Nếu bản cập nhật dsh đổi các tên này, tiêu đề hiển thị như dsh vẽ. Trong cột trò chuyện rất hẹp, tiêu đề có thể chiếm hai hoặc ba dòng, nên vùng phía trên tin nhắn thấp hơn.
|
|
262
266
|
- **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). Khi có khóa APNs trong `apns.json` (xem `tether/README.md`), Mac gửi thông báo qua dịch vụ push của Apple, nên thông báo vẫn đến khi Tether đã đóng; Mac phải đang thức và mở dsh. Nếu không có khóa, đ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. Tether chỉ gửi thông báo sau khi bạn bật "Settings → Notifications → Send notifications" trong Tether. Tether lưu tùy chọn này và khung giờ của nó riêng cho từng máy Mac đã ghép nối. Tùy chọn này tắt theo mặc định trên mỗi máy Mac, và iOS hỏi quyền khi bạn bật nó. Ứ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 Mỗi thông báo hiện Mac và dự án của cuộc trò chuyện (`Studio Mac · recipe-box`), tiêu đề cuộc trò chuyện và nội dung: Turn finished hiện câu trả lời cuối cùng của agent. Khi có khóa APNs, nội dung này đi qua dịch vụ push của Apple. 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.
|
|
263
|
-
- **Máy tính từ xa** cần Tailscale trên cả hai máy Mac, và cần Composer Plus có bật tính năng này trên máy Mac mà bạn mở. Máy Mac đó không được ở chế độ ngủ, và dsh phải đang chạy trên máy. Bộ chọn chỉ hiện khi thanh bên trái đang mở (không hiện khi thanh bên chỉ còn các biểu tượng). Nếu trang của máy Mac kia không có bộ chọn riêng (Composer Plus ở đó cũ hơn 1.23.0), bộ chọn của máy Mac này hiện phía trên trang đó ở cùng vị trí. Nếu ở đó là 1.23.0, bộ chọn hiện tên của máy Mac kia: chọn **Máy Mac này** trong menu của nó để quay lại. Mỗi máy tính bạn đã mở giữ trang của nó trong bộ nhớ cho đến khi bạn tắt tính năng hoặc khởi động lại dsh. Trên ứng dụng desktop, trang của máy Mac kia là một trang nhúng: các phím tắt của chính dsh (ví dụ cuộc trò chuyện mới) không hoạt động trong trang đó, và việc tải tệp xuống, micrô và thông báo cũng không hoạt động ở đó. Tính năng dùng cổng 19392 (trên mỗi máy Mac, chỉ một dsh có thể cho máy tính khác vào). Từ trang của một máy Mac khác, bộ chọn chỉ chuyển giữa các máy tính của máy Mac này: bạn không thể mở máy Mac thứ ba thông qua máy Mac kia.
|
|
267
|
+
- **Máy tính từ xa** cần Tailscale trên cả hai máy Mac, và cần Composer Plus có bật tính năng này trên máy Mac mà bạn mở. Máy Mac đó không được ở chế độ ngủ, và dsh phải đang chạy trên máy. Bộ chọn chỉ hiện khi thanh bên trái đang mở (không hiện khi thanh bên chỉ còn các biểu tượng). Nếu trang của máy Mac kia không có bộ chọn riêng (Composer Plus ở đó cũ hơn 1.23.0), bộ chọn của máy Mac này hiện phía trên trang đó ở cùng vị trí. Nếu ở đó là 1.23.0, bộ chọn hiện tên của máy Mac kia: chọn **Máy Mac này** trong menu của nó để quay lại. Mỗi máy tính bạn đã mở giữ trang của nó trong bộ nhớ cho đến khi bạn tắt tính năng hoặc khởi động lại dsh. Nếu máy tính không trả lời (đang ngủ hoặc Tailscale đang tắt), trang của nó không được giữ: hãy chọn lại, trang sẽ tải lại. Trên ứng dụng desktop, trang của máy Mac kia là một trang nhúng: các phím tắt của chính dsh (ví dụ cuộc trò chuyện mới) không hoạt động trong trang đó, và việc tải tệp xuống, micrô và thông báo cũng không hoạt động ở đó. Tính năng dùng cổng 19392 (trên mỗi máy Mac, chỉ một dsh có thể cho máy tính khác vào). Từ trang của một máy Mac khác, bộ chọn chỉ chuyển giữa các máy tính của máy Mac này: bạn không thể mở máy Mac thứ ba thông qua máy Mac kia. Chuyển đổi bằng một cú nhấp chỉ tính các máy tính đã ghép nối và kết nối được (máy tính cần ghép nối lại không được tính); khi chỉ có một máy tính như vậy, **Thêm máy tính…** nằm trong menu nhấp chuột phải (trên màn hình cảm ứng: nhấn giữ) hoặc trong **Cài đặt → Composer Plus → Máy tính từ xa**.
|
|
264
268
|
- 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.
|
|
265
269
|
- **Đá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.
|
|
266
270
|
- **Sửa tin nhắn trong hàng đợi tại chỗ** không thay đổi tin nhắn đã bắt đầu được gửi trong lúc đó, và không ghi đè tin nhắn đã thay đổi trong lúc đó (ví dụ trong Tether trên iPhone): một thông báo cho biết điều này. Hình ảnh mới cần một mô hình nhận hình ảnh (các giới hạn hình ảnh của chính dsh vẫn áp dụng), và tệp mới phải tải lên xong thì mới lưu được. Chỉ sửa được tin nhắn trong hàng đợi của chính bạn: không sửa đượ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. Sau khi cập nhật plugin, chỉ việc sửa văn bản hoạt động ngay: hãy khởi động lại dsh trước khi lưu tin nhắn có hình ảnh hoặc tệp (phần Host được tải khi khởi động).
|
|
@@ -296,7 +300,8 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
296
300
|
- **Gói skill tiếng Thổ Nhĩ Kỳ** cài một skill của bên thứ ba: các quy tắc đến từ kho GitHub của tác giả, không phải từ Composer Plus, và phiên bản mới được dùng từ lần kiểm tra hằng ngày tiếp theo mà chúng tôi không xem xét. Việc kiểm tra chỉ chứng minh các tệp đúng là những tệp GitHub liệt kê cho commit đó, không chứng minh các quy tắc là tốt. Mô hình quyết định khi nào tải skill (bạn cũng có thể gọi nó theo tên); các quy tắc chỉ áp dụng cho văn bản tiếng Thổ Nhĩ Kỳ. Phần Host dùng ngôn ngữ mà một trình duyệt báo gần nhất: khi hai trình duyệt dùng ngôn ngữ khác nhau, báo mới nhất được dùng. Khi chưa đăng nhập, GitHub chỉ cho 60 lệnh gọi API mỗi giờ; một lần kiểm tra bị từ chối vẫn giữ bản sao đã cài và hiện lý do trong Cài đặt.
|
|
297
301
|
- **Gỡ rối codebase** đi kèm một bản sao cố định của skill (caldoai/skills, commit f3cf477): thay đổi ở bản gốc chỉ đến cùng phiên bản Composer Plus mới. Skill chạy một mục tiêu dài có thể thay đổi nhiều tệp, và các tác tử con cùng bước kiểm tra của nó tốn nhiều token. Ở những phần dự án không có kiểm thử, nó có thể thay đổi hành vi mà bạn không biết: hãy khởi động trên một branch riêng và đọc diff trước khi merge. Skill cùng tên trong dự án, trong thư mục skill tùy chỉnh hoặc trong `~/.dsh/skills` sẽ thay thế nó. Khi công tắc tắt, `/untangle-codebase` được gửi tới mô hình như văn bản thường.
|
|
298
302
|
- **Bảng tác vụ** hiện các cuộc trò chuyện mà dsh liệt kê trong cửa sổ này: cuộc trò chuyện nằm ngoài dự án chỉ hiện trong **Tất cả dự án**, và thư mục branch riêng của từng cuộc trò chuyện (`<project>/.worktrees/<name>`) được tính là thuộc dự án của nó. Cột của một thẻ là trạng thái trực tiếp của cuộc trò chuyện, nên không thể kéo thẻ: cuộc trò chuyện chuyển sang **Xong** khi lượt của nó kết thúc, kể cả sau lỗi hoặc khi bị dừng, và quay lại **Đang làm** khi chạy lại. Chấm xanh lá là chấm hoàn tất của chính dsh, mà dsh chỉ giữ trong cửa sổ này: sau khi trang được tải lại, các cuộc trò chuyện đã xong hiện không có chấm này. **Xong** hiện 50 cuộc trò chuyện mới nhất (**Hiện N tác vụ cũ hơn** hiện phần còn lại). **Tìm dự án** chỉ tìm dự án theo tên, không theo đường dẫn thư mục. **Hoạt động trong 2 giờ qua** ẩn một dự án khi mọi cuộc trò chuyện của nó đều cũ hơn 2 giờ, không hoạt động và đã đọc; bảng vẫn hiện dự án mà bạn đã chọn. **Tác vụ mới** chỉ nhớ cuộc trò chuyện mới gần nhất của cửa sổ này: khi bạn mở một cuộc trò chuyện khác trước tin nhắn đầu tiên, cuộc trò chuyện đó vẫn ở trên cùng của **Đang làm** dưới tên **Tác vụ mới** cho đến khi bạn viết vào, nhưng bảng chỉ tự quay lại cho cuộc trò chuyện gần nhất. Sau khi tải lại, cuộc trò chuyện mới chưa có tin nhắn không có trên bảng (dsh giữ nó làm Phiên mới trống của dsh). Nhãn đến từ một lệnh gọi mô hình cho mỗi tác vụ, dựa trên tin nhắn đầu tiên của tác vụ: nhãn có thể sai, và cuộc trò chuyện mà bạn không bắt đầu trên bảng thì không có nhãn. Tiêu đề là tiêu đề cuộc trò chuyện của chính dsh (dịch vụ đặt tiêu đề của dsh, với mô hình của cuộc trò chuyện); cho đến khi có tiêu đề, thẻ hiện dòng đầu tiên của tin nhắn đầu tiên. **×** và **Gỡ tất cả** chỉ gỡ thẻ khỏi bảng: không cuộc trò chuyện nào bị xóa. **Hoàn tác** chỉ hiện trong 8 giây, trong cửa sổ này; sau đó, **Đã gỡ (N)** → **Đưa lại lên bảng** đưa một thẻ trở lại, và cuộc trò chuyện chạy lại sẽ tự quay lại. **Gỡ tất cả** hỏi trước rồi gỡ các thẻ đã xong và đã đọc của dự án đang hiện (của mọi dự án với **Tất cả dự án**), kể cả các thẻ nằm sau **Hiện N tác vụ cũ hơn**; thẻ chưa đọc (màu xanh lá) vẫn ở lại. dsh chỉ giữ chấm xanh lá trong cửa sổ này, nên sau khi tải lại, Gỡ tất cả có thể gỡ một thẻ mà bạn chưa đọc câu trả lời. Danh sách được lưu trên máy Mac này cho mọi cửa sổ và cho Tether; khi danh sách có 5.000 cuộc trò chuyện, các cuộc trò chuyện cũ nhất sẽ quay lại. **Trả lời** chỉ trả lời yêu cầu mới nhất của cuộc trò chuyện: khi yêu cầu đó đã được trả lời ở nơi khác (cửa sổ khác, Tether, Đánh giá tự động) hoặc cuộc trò chuyện hỏi điều mới, khung chi tiết báo điều đó và không gửi gì. Các phiên bản trước có danh sách tác vụ với bình luận và công cụ cho tác tử; chúng đã bị bỏ, và `board.json` cũ không được hiển thị. Ý tưởng và giao diện lấy từ [Kanzo](https://github.com/emanuele-em/kanzo) của emanuele-em (AGPL-3.0); Composer Plus không dùng mã của nó. `Cmd+Shift+K` là phím tắt của dsh: trong trình duyệt trên Linux, nó không có phím mặc định (hãy đặt trong trang phím tắt của dsh), và tiện ích trình duyệt hoặc ứng dụng khác có thể dùng phím này trước. Một thẻ rời **Xong** khi chấm xanh lá của dsh biến mất (bạn đã mở cuộc trò chuyện), hoặc với cuộc trò chuyện xong phía sau bảng khi nó là cuộc trò chuyện đang mở, khi cuộc trò chuyện đó hiện ra mà không có bảng điều khiển nào phía trên. Trạng thái đã đọc này chỉ có trong cửa sổ dsh này, như các chấm của dsh: sau khi tải lại hoặc trong cửa sổ khác, mọi cuộc trò chuyện đã xong đều được tính là đã đọc, nên nằm trong **Vừa xong**.
|
|
299
|
-
- **Trợ lý** có một cuộc trò chuyện cho tất cả cửa sổ trên máy Mac này. Trợ lý chạy với chế độ quyền workspace-write: chỉ ghi tệp trong `~/Assistant`, và một lệnh bên ngoài thư mục đó sẽ hỏi trước. Khi bạn chuyển cuộc trò chuyện sang chế độ không cần phê duyệt (Toàn quyền), dsh từ chối mọi yêu cầu phê duyệt, nên trợ lý không thể gửi tin nhắn đến, bắt đầu, dừng hoặc lưu trữ cuộc trò chuyện. Thẻ phê duyệt chỉ bảo vệ sáu công cụ đó: lệnh shell của trợ lý vẫn có thể truy cập mạng, như trong mọi cuộc trò chuyện ở chế độ đó. Trên dsh 0.2.0 và 0.2.1, các công cụ lịch của dsh chỉ thấy lời nhắc của chính cuộc trò chuyện trợ lý, không thấy tác vụ tự động của các cuộc trò chuyện khác; từ dsh 0.2.2, chúng liệt kê và thay đổi mọi tác vụ theo lịch. chats_list bỏ qua các cuộc trò chuyện đã lưu trữ, trống và subagent, cùng chính cuộc trò chuyện trợ lý; “đang chờ bạn” nghĩa là một cuộc trò chuyện đang chạy có yêu cầu phê duyệt, câu hỏi hoặc xem xét kế hoạch đang mở. chat_read trả về tin nhắn của người dùng và câu trả lời của tác tử (không có đầu ra công cụ), tối đa 50 tin nhắn và khoảng 24.000 ký tự. chat_archive từ chối cuộc trò chuyện vẫn đang chạy hoặc còn lời nhắc đang hoạt động. Mô hình vẫn có thể bị đánh lừa bởi văn bản mà nó đọc: thẻ phê duyệt là bước kiểm tra cuối cùng, nên hãy đọc thẻ trước khi bạn nhấp **Cho phép một lần**.
|
|
303
|
+
- **Trợ lý** có một cuộc trò chuyện cho tất cả cửa sổ trên máy Mac này. Trợ lý chạy với chế độ quyền workspace-write: chỉ ghi tệp trong `~/Assistant`, và một lệnh bên ngoài thư mục đó sẽ hỏi trước. Khi bạn chuyển cuộc trò chuyện sang chế độ không cần phê duyệt (Toàn quyền), dsh từ chối mọi yêu cầu phê duyệt, nên trợ lý không thể gửi tin nhắn đến, bắt đầu, dừng hoặc lưu trữ cuộc trò chuyện. Thẻ phê duyệt chỉ bảo vệ sáu công cụ đó: lệnh shell của trợ lý vẫn có thể truy cập mạng, như trong mọi cuộc trò chuyện ở chế độ đó. Trên dsh 0.2.0 và 0.2.1, các công cụ lịch của dsh chỉ thấy lời nhắc của chính cuộc trò chuyện trợ lý, không thấy tác vụ tự động của các cuộc trò chuyện khác; từ dsh 0.2.2, chúng liệt kê và thay đổi mọi tác vụ theo lịch. chats_list bỏ qua các cuộc trò chuyện đã lưu trữ, trống và subagent, cùng chính cuộc trò chuyện trợ lý; “đang chờ bạn” nghĩa là một cuộc trò chuyện đang chạy có yêu cầu phê duyệt, câu hỏi hoặc xem xét kế hoạch đang mở. chat_read trả về tin nhắn của người dùng và câu trả lời của tác tử (không có đầu ra công cụ), tối đa 50 tin nhắn và khoảng 24.000 ký tự. chat_archive từ chối cuộc trò chuyện vẫn đang chạy hoặc còn lời nhắc đang hoạt động. Mô hình vẫn có thể bị đánh lừa bởi văn bản mà nó đọc: thẻ phê duyệt là bước kiểm tra cuối cùng, nên hãy đọc thẻ trước khi bạn nhấp **Cho phép một lần**. Các chủ đề song song dùng công cụ subagent của dsh: một profile hoặc chế độ quyền không có công cụ này vẫn giữ cách cũ (mỗi lần một chủ đề, tin nhắn tiếp theo chờ trong hàng đợi hoặc điều hướng lượt đang chạy). Mô hình quyết định việc nào được tính là việc dài, nên một câu hỏi ngắn vẫn có thể chiếm một lượt. Subagent của mỗi chủ đề chạy với token riêng; khi dsh khởi động lại, chủ đề đang chạy sẽ dừng (kết quả của nó không quay lại). Kết quả quay lại dưới dạng một lượt mới của cuộc trò chuyện trợ lý, nên kết quả chờ khi bạn đang gõ giữa một lượt.
|
|
304
|
+
- **Trợ lý tách khỏi các cuộc trò chuyện** và **Trợ lý chỉ hiện tin nhắn** ẩn các dòng của chính dsh bằng một quy tắc style, tìm theo markup thanh bên và cuộc trò chuyện của dsh (`data-row-key`, `data-chat-flow-kind`): khi một bản cập nhật dsh thay đổi markup đó, cuộc trò chuyện trợ lý lại hiện trong danh sách, hoặc các bước làm việc của nó lại hiện ra. Các dòng chỉ bị ẩn, không bị xóa: điều hướng bằng bàn phím của dsh trên thanh bên vẫn có thể đến một dòng bị ẩn. **Trợ lý luôn rảnh** từ chối mọi lệnh gọi công cụ của cuộc trò chuyện trợ lý không thuộc các công cụ ngắn của nó; sau đó mô hình giao bước đó cho một subagent, nhưng có thể thử lệnh gọi bị từ chối trước, việc này tốn một bước mô hình. Khi một thẻ phê duyệt đang chờ bạn, cuộc trò chuyện trợ lý vẫn được tính là đang bận. Khi yêu cầu mới nhất của nó không có công cụ subagent (một chế độ quyền hoặc profile không có công cụ này), quy tắc không làm gì. **Trợ lý báo tin từ các cuộc trò chuyện** bắt đầu một lượt mô hình của cuộc trò chuyện trợ lý cho mỗi đợt tin, nên tốn token; khi **Kết nối di động (iPhone)** bật, điện thoại của bạn có thể nhận hai thông báo cho một cuộc trò chuyện đã xong (thông báo của chính cuộc trò chuyện và của trợ lý). Tin đang chờ sẽ mất khi dsh khởi động lại. Tính năng này chỉ thấy các cuộc trò chuyện trên máy Mac này.
|
|
300
305
|
- **Ưu tiên tin nhắn gửi sau khi Dừng** chỉ hoạt động sau khi bạn dừng cuộc trò chuyện (hoặc sau một lượt bị lỗi, hoặc khi bạn mở một cuộc trò chuyện vẫn còn hàng đợi): tin nhắn bạn gửi khi một lượt đang chạy vẫn chờ ở cuối hàng đợi. Nó chỉ vượt lên trước các tin nhắn của chính bạn trong hàng đợi: nếu trong hàng đợi có một vòng mục tiêu hoặc một câu trả lời cho câu hỏi đang chờ, thứ tự của dsh được giữ nguyên. Nó đọc một phần của dsh không phải là API công khai (lượt đã dừng có còn đang kết thúc không); nếu một bản cập nhật dsh đổi tên phần đó, tin nhắn chỉ được đưa lên đầu sau khi lượt đó kết thúc. Cuộc trò chuyện của subagent giữ thứ tự của dsh.
|
|
301
306
|
- **Bộ nhớ dự án** thuộc về thư mục đầu tiên của cuộc trò chuyện (thư mục dự án của dsh): cuộc trò chuyện đổi thư mục bằng `cd` vẫn giữ bộ nhớ của dự án đầu tiên, và cùng thư mục được mở qua một đường dẫn khác tới cùng các tệp sẽ dùng chung bộ nhớ. Cuộc trò chuyện cố định phần bộ nhớ khi bắt đầu, nên ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo (`memory_recall` tìm thấy ngay). Việc xem xét chỉ giữ những gì mô hình quyết định giữ: có thể bỏ sót một dữ kiện hoặc giữ một dữ kiện sai; hãy kiểm tra trong **Mở bộ nhớ** và sửa ở đó, hoặc sửa các tệp bằng tay khi dsh đã đóng. **Mở bộ nhớ** gửi ghi chú của dự án được chọn và ghi chú chung (mọi dự án khi bạn chọn Tất cả ghi chú; tối đa khoảng 60.000 ký tự, phần còn lại chỉ được đếm và không thể thay đổi trong yêu cầu đó) cùng văn bản của bạn tới mô hình mặc định của dsh, không phải mô hình của cuộc trò chuyện. Bản xem trước được giữ trên Mac trong 30 phút và cho đến khi dsh khởi động lại; nếu việc xem xét hoặc tác tử thay đổi ghi chú trong lúc đó, **Áp dụng** sẽ từ chối và bạn xem trước lại. **Áp dụng** lưu tất cả thay đổi của một bản xem trước hoặc không lưu gì: nếu một thay đổi không lưu được (ví dụ MEMORY.md đã đầy), ghi chú giữ nguyên và lý do được hiển thị. Mỗi lượt kết thúc có tin nhắn của bạn tốn một lần gọi mô hình; lần gọi thất bại sẽ đọc lại cùng các tin nhắn sau lượt tiếp theo. Cuộc trò chuyện của tác tử con không được xem xét. Ý tưởng và định dạng tệp lấy từ [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus không dùng mã của nó và không bao giờ đọc hay ghi bộ nhớ riêng của DS Bot.
|
|
302
307
|
- **Lịch sử phiên bản bộ nhớ** giữ 50 phiên bản mới nhất của mỗi bộ nhớ (mỗi dự án và bộ nhớ chung); các bản cũ hơn bị xóa. Một phiên bản chứa toàn bộ bộ nhớ của dự án đó, không phải một ghi chú. **Khôi phục** đặt lại mọi tệp của phiên bản đó (kể cả chủ đề) và từ chối khi bộ nhớ đã thay đổi sau khi bạn mở phiên bản; bộ nhớ trước khi khôi phục trở thành một phiên bản mới, nên bạn có thể hoàn tác. Khi công tắc tắt, không giữ phiên bản mới và **Khôi phục** từ chối; các phiên bản đã giữ vẫn còn. Không có phiên bản từ trước tính năng này: lịch sử bắt đầu từ lần lưu đầu tiên sau khi cài đặt.
|
|
@@ -350,7 +355,9 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
350
355
|
|
|
351
356
|
**Tôi có thể xem tất cả cuộc trò chuyện của mình dưới dạng bảng kanban và bắt đầu cuộc trò chuyện mới từ đó không?** Có, với **Bảng tác vụ** (mặc định bật): mở nó ở thanh bên trái. Mỗi cuộc trò chuyện là một thẻ trong **Đang làm**, **Đang duyệt** (đang chờ bạn) hoặc **Xong**. **Tác vụ mới** mở cuộc trò chuyện mới của dsh trong dự án, và bảng quay lại khi tin nhắn đầu tiên của bạn được gửi; nhấp **Trả lời** trên thẻ màu cam để trả lời mà không cần mở cuộc trò chuyện. **Gỡ tất cả** ở **Xong** hỏi trước rồi gỡ khỏi bảng các thẻ đã xong mà bạn đã đọc; **Hoàn tác** và **Đã gỡ (N)** đưa chúng trở lại, và các cuộc trò chuyện vẫn còn trong dsh.
|
|
352
357
|
|
|
353
|
-
**Tôi có thể có một cuộc trò chuyện trợ lý cá nhân nhắc việc cho tôi và quản lý các cuộc trò chuyện khác của tôi không?** Có, với **Trợ lý** (mặc định
|
|
358
|
+
**Tôi có thể có một cuộc trò chuyện trợ lý cá nhân nhắc việc cho tôi và quản lý các cuộc trò chuyện khác của tôi không?** Có, với **Trợ lý** (mặc định bật): nhấp **Trợ lý** ở thanh bên trái. Trợ lý đặt lời nhắc bằng các tác vụ theo lịch của dsh, tìm kiếm trên web, liệt kê và đọc các cuộc trò chuyện của bạn, và chỉ gửi tin nhắn đến một cuộc trò chuyện hoặc bắt đầu, dừng hay lưu trữ một cuộc trò chuyện sau khi bạn phê duyệt. Hãy lưu hồ sơ của bạn trong bộ nhớ dự án của nó, chủ đề “profil”.
|
|
359
|
+
|
|
360
|
+
**Trợ lý có thể không nằm trong danh sách cuộc trò chuyện của tôi và làm việc như một bot không?** Có. **Trợ lý tách khỏi các cuộc trò chuyện** đưa cuộc trò chuyện của trợ lý ra khỏi danh sách ở thanh bên và hiển thị trạng thái của nó trên dòng **Trợ lý** (màu cam khi đang chờ bạn). **Trợ lý chỉ hiện tin nhắn** ẩn các bước làm việc của nó. **Trợ lý luôn rảnh** khiến trợ lý giao mọi bước dài hơn cho một subagent chạy nền, nên nó trả lời ngay. **Trợ lý báo tin từ các cuộc trò chuyện** (mặc định tắt, tốn token) khiến trợ lý báo cho bạn khi một cuộc trò chuyện khác xong, gặp lỗi hoặc đang chờ bạn.
|
|
354
361
|
|
|
355
362
|
**dsh có thể sao lưu các cuộc trò chuyện và cài đặt của tôi như dsh-backup không?** Có: **Cài đặt → Composer Plus → Sao lưu → Sao lưu ngay**. Nó ghi cùng định dạng tệp lưu trữ vào cùng thư mục (`~/Desktop/dsh-backups`), nên các tệp lưu trữ của dsh-backup cũng hiện ra và khôi phục được, và bạn có thể gỡ dsh-backup. Bật **Tự động sao lưu** để sao lưu theo lịch.
|
|
356
363
|
|
|
@@ -504,8 +511,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
|
|
|
504
511
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
505
512
|
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
506
513
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
|
-
# Assistant:
|
|
514
|
+
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
515
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
516
|
+
# Assistant welcome card: shows above the input on the first open of the assistant chat, goes with the switch and with the first message, not in other chats
|
|
517
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-assistant-welcome.mjs /path/to/dsh/lib/bin.js
|
|
509
518
|
```
|
|
510
519
|
|
|
511
520
|
```sh
|