dsh-composer-plus 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +13 -12
- package/README.es.md +13 -12
- package/README.fr.md +13 -12
- package/README.hi.md +13 -12
- package/README.id.md +13 -12
- package/README.ja.md +13 -12
- package/README.ko.md +13 -12
- package/README.md +13 -12
- package/README.pt-BR.md +13 -12
- package/README.ru.md +13 -12
- package/README.tr.md +13 -12
- package/README.vi.md +13 -12
- package/README.zh.md +13 -12
- package/assets/features/sessionBranch.webp +0 -0
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +424 -620
- package/index.js +167 -506
- package/package.json +3 -2
- package/release-notes.json +18 -0
- package/tether/gateway/server.mjs +1 -1
package/README.hi.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="Composer Plus के साथ DeepSeek Harness: चल रहे प्रोजेक्ट के लिए साइडबार में स्पिनर दिखता है और बदलाव पैनल git डिफ़ दिखाता है"></p>
|
|
16
16
|
|
|
17
|
-
यह एक अनौपचारिक कम्युनिटी प्लगइन है। यह सिर्फ़ अपडेट जांचने के लिए नेटवर्क कॉल करता है (GitHub रिलीज़ और npm रजिस्ट्री)। शुरू होते समय ये कॉल रोकने के लिए **अपने-आप अपडेट** बंद करें। **सुविधाओं के आइडिया** आपकी चैट के अपने मॉडल को सिर्फ़ तब कॉल करता है, जब आप **सुविधाएं सुझाएं** पर क्लिक करते हैं। **अगले संदेश का अनुमान** (डिफ़ॉल्ट रूप से चालू) हर पूरे हुए टर्न के बाद सेटिंग में चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को बिना क्लिक के एक बार कॉल करता है। ये कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। **टाइप करते समय पूरा करें** (डिफ़ॉल्ट रूप से बंद) आपके इसे चालू करने के बाद, टाइप करते समय हर ठहराव पर इसके लिए चुने गए मॉडल (डिफ़ॉल्ट रूप से अनुमान वाला मॉडल) को कॉल करता है। **प्रॉम्प्ट बेहतर करें** किसी मॉडल को सिर्फ़ तब कॉल करता है, जब आप उसकी जादुई छड़ी पर क्लिक करते हैं। **लक्ष्य जांच** (डिफ़ॉल्ट रूप से चालू) जब भी एजेंट किसी अपने-आप चलने वाले राउंड में `/goal` को पूरा मार्क करता है, तब एक मॉडल को एक बार कॉल करती है। **मोबाइल कनेक्ट** (डिफ़ॉल्ट रूप से बंद) आपके लोकल नेटवर्क या tailnet से iPhone के कनेक्शन सिर्फ़ तब स्वीकार करता है, जब आप इसे चालू करते हैं।
|
|
17
|
+
यह एक अनौपचारिक कम्युनिटी प्लगइन है। यह सिर्फ़ अपडेट जांचने के लिए नेटवर्क कॉल करता है (GitHub रिलीज़ और npm रजिस्ट्री)। शुरू होते समय ये कॉल रोकने के लिए **अपने-आप अपडेट** बंद करें। **सुविधाओं के आइडिया** आपकी चैट के अपने मॉडल को सिर्फ़ तब कॉल करता है, जब आप **सुविधाएं सुझाएं** पर क्लिक करते हैं। **अगले संदेश का अनुमान** (डिफ़ॉल्ट रूप से चालू) हर पूरे हुए टर्न के बाद सेटिंग में चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को बिना क्लिक के एक बार कॉल करता है। ये कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। **टाइप करते समय पूरा करें** (डिफ़ॉल्ट रूप से बंद) आपके इसे चालू करने के बाद, टाइप करते समय हर ठहराव पर इसके लिए चुने गए मॉडल (डिफ़ॉल्ट रूप से अनुमान वाला मॉडल) को कॉल करता है। **प्रॉम्प्ट बेहतर करें** किसी मॉडल को सिर्फ़ तब कॉल करता है, जब आप उसकी जादुई छड़ी पर क्लिक करते हैं। **टास्क बोर्ड** बोर्ड पर शुरू किए गए हर टास्क के टैग के लिए नई चैट के मॉडल को एक बार कॉल करता है। **लक्ष्य जांच** (डिफ़ॉल्ट रूप से चालू) जब भी एजेंट किसी अपने-आप चलने वाले राउंड में `/goal` को पूरा मार्क करता है, तब एक मॉडल को एक बार कॉल करती है। **मोबाइल कनेक्ट** (डिफ़ॉल्ट रूप से बंद) आपके लोकल नेटवर्क या tailnet से iPhone के कनेक्शन सिर्फ़ तब स्वीकार करता है, जब आप इसे चालू करते हैं।
|
|
18
18
|
|
|
19
19
|
## इंस्टॉल करें
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
फिर dsh रीस्टार्ट करें। (CLI डेस्कटॉप प्रोफ़ाइल में इंस्टॉल नहीं कर सकता; उस प्रोफ़ाइल को ऐप खुद संभालता है।)
|
|
31
31
|
|
|
32
|
-
> dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.
|
|
32
|
+
> dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.19.0`।
|
|
33
33
|
|
|
34
34
|
## सुविधाएं
|
|
35
35
|
|
|
@@ -71,11 +71,11 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
71
71
|
| **नियोजित चरण** | <a id="feature-plannedsteps"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। एजेंट को `plan_next_steps` टूल मिलता है: किसी कमांड वाले संदेश में ही वह अगली कमांड को सटीक आर्ग्युमेंट और एक शर्त के साथ योजना बना सकता है, जैसे “बिल्ड पास होने पर `npm test` चलाओ”। नतीजा शर्त पूरी करे तो Composer Plus नई मॉडल कॉल के बिना अगला चरण ख़ुद चलाता है, इसलिए लंबी चैट कम टोकन खर्च करती है। चरण चैट में एक छोटी लाइन “Composer Plus · Planned steps: ran `test` … without a model call” के रूप में दिखता है, उसके बाद उसकी टूल कॉल और नतीजा आते हैं। सिर्फ़ `bash`, `read`, `grep` और `glob` चरण; मंज़ूरी, सैंडबॉक्स और सुरक्षित फ़ाइलें हर चरण पर हमेशा की तरह लागू रहती हैं। शर्त पूरी न हो, एक साथ दो चरण तैयार हों, आख़िरी चरण के बाद और जब आप संदेश भेजें, तब मॉडल फिर से जवाब देता है। यह विचार HarnessMM (arXiv 2610.32813) से आया है। | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="स्क्रीनशॉट: नियोजित चरण"></a> |
|
|
72
72
|
| **सुरक्षित फ़ाइलें** | <a id="feature-protectedfiles"></a>डिफ़ॉल्ट रूप से चालू। एजेंट के अपने फ़ाइल टूल आपके पैटर्न से मेल खाने वाली फ़ाइलें न पढ़ सकते हैं, न बदल सकते हैं: **पढ़ना और लिखना** पैटर्न के लिए किसी फ़ाइल पर `read`, `read_image` और `grep` मना किए जाते हैं, और दोनों तरह के पैटर्न के लिए `write`, `edit` और `str_replace_editor`। एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है। डिफ़ॉल्ट पैटर्न `.env*`, `*.pem` और `*.key` हैं। सेटिंग → Composer Plus → **सुरक्षित फ़ाइलें**: एक पैटर्न जोड़ें (जैसे `published/**` या `config/*.yml`), **पढ़ना और लिखना** और **सिर्फ़ लिखना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से उसे हटाएं, या **डिफ़ॉल्ट इस्तेमाल करें** पर क्लिक करें। `/` के बिना पैटर्न किसी भी फ़ोल्डर में फ़ाइल के नाम से मेल खाता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: शेल कमांड (`cat .env`), स्क्रिप्ट या MCP टूल फिर भी फ़ाइल तक पहुंच सकते हैं (सीमाएं देखें)। | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="स्क्रीनशॉट: सुरक्षित फ़ाइलें"></a> |
|
|
73
73
|
| **ब्लॉक की गई कमांड** | <a id="feature-blockedcommands"></a>डिफ़ॉल्ट रूप से चालू, खाली सूची के साथ। एजेंट की शेल कमांड (`bash`, `pwsh`) आपके नियमों से मेल खाने वाली कमांड नहीं चला सकतीं: **ब्लॉक** नियम कॉल को मना करता है (एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है), **पहले पूछना** नियम dsh का मंज़ूरी कार्ड दिखाता है, और कमांड सिर्फ़ तब चलती है जब आप उसकी अनुमति देते हैं। सेटिंग → Composer Plus → **ब्लॉक की गई कमांड**: एक नियम टाइप करें (जैसे `npm publish`, `git push --force` या `ssh *192.168.2.19`), **ब्लॉक** और **पहले पूछना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, फिर **जोड़ें** पर क्लिक करें; किसी नियम की तरह बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से नियम हटाएं। नियम एक कमांड का नाम और वे शब्द होते हैं, जो इसी क्रम में उसके बाद आने चाहिए; `*` किसी भी टेक्स्ट से मेल खाता है। यह `&&`, `;`, `\|` के बाद, `$(…)`, `bash -c "…"` या `eval` के अंदर, और `sudo` या `env` के बाद भी कमांड ढूंढता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: कोई वैरिएबल (`$CMD`), स्क्रिप्ट फ़ाइल या दूसरा प्रोग्राम फिर भी कमांड चला सकता है (सीमाएं देखें)। | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="स्क्रीनशॉट: ब्लॉक की गई कमांड"></a> |
|
|
74
|
-
| **टास्क बोर्ड** | <a id="feature-taskboard"></a>बायां साइडबार → **टास्क बोर्ड**।
|
|
74
|
+
| **टास्क बोर्ड** | <a id="feature-taskboard"></a>बायां साइडबार → **टास्क बोर्ड**। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई चैट **पूरा हुआ** में है (जब तक आप उसे न खोलें, तब तक हरी)। बाईं ओर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। **नया टास्क** (या `n`) सिर्फ़ एक प्रॉम्प्ट लेता है: `Enter` प्रोजेक्ट में नई चैट शुरू करता है, कार्ड **करना है** में दिखता है, dsh चैट को नाम देता है और चैट का मॉडल ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। नारंगी कार्ड पर, बोर्ड पर ही जवाब देने के लिए **जवाब दें** पर क्लिक करें: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। **खत्म हुई चैट छिपाएं** इस डिवाइस पर **पूरा हुआ** को छिपाता है। | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="स्क्रीनशॉट: टास्क बोर्ड"></a> |
|
|
75
75
|
| **प्रोजेक्ट मेमोरी** | <a id="feature-projectmemory"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। हर प्रोजेक्ट फ़ोल्डर की अपनी मेमोरी होती है, जिसे उस प्रोजेक्ट की आगे की चैट पढ़ती हैं, जैसे DS Bot हर Bot के लिए एक मेमोरी रखता है। हर पूरे हुए टर्न के बाद चैट के मॉडल को एक कॉल नए संदेश पढ़ती है (रोलबैक किए गए नहीं), आपकी लंबे समय तक रहने वाली पसंद, फ़ैसले और तथ्य छोटे नोट के रूप में रखती है, और पुराने नोट बदलती या हटाती है। एजेंट खुद भी नोट सेव कर, हटा और खोज सकता है (`memory_remember`, `memory_forget`, `memory_recall`)। कोई नोट ग्लोबल भी हो सकता है: उसे हर प्रोजेक्ट पढ़ता है। नई चैट को नोट उसके सिस्टम प्रॉम्प्ट में मिलते हैं; बाद में सेव हुआ नोट अगली चैट से दिखता है। फ़ाइलें dsh के होम फ़ोल्डर में Markdown हैं (`storages/dsh-composer-plus/memory/`), कभी प्रोजेक्ट फ़ोल्डर में नहीं। उसी पंक्ति में **मेमोरी खोलें** हर सेव किया गया नोट प्रोजेक्ट के हिसाब से (और ग्लोबल मेमोरी) दिखाता है, फ़िल्टर के साथ। अपने शब्दों में लिखें कि क्या बदलना है (जैसे "मैंने yarn छोड़कर pnpm अपनाया"), फिर **बदलावों का प्रीव्यू**: dsh का डिफ़ॉल्ट मॉडल बदलाव सुझाता है, और सिर्फ़ **लागू करें** उन्हें सेव करता है। Tether में: चैट शीर्षक मेनू → Project memory। | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट मेमोरी"></a> |
|
|
76
76
|
| **इस चैट के लिए अनुमति दें** | <a id="feature-allowforchat"></a>जब ऑटो रिव्यू आपसे पूछता है, तो मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** दिखता है। इसके बाद उसी चैट में वही टूल किसी भी आर्ग्युमेंट के साथ बिना पूछे चलता है, जब तक समय सीमा खत्म नहीं होती (डिफ़ॉल्ट रूप से 1 घंटा; इसे **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में चुनें)। फिर एजेंट दोबारा पूछता है। हेडर की एक चिप अनुमतियों की सूची उनके खत्म होने के समय के साथ दिखाती है और उन्हें रद्द करती है। रीस्टार्ट के बाद भी अनुमतियां बनी रहती हैं। | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="स्क्रीनशॉट: इस चैट के लिए अनुमति दें"></a> |
|
|
77
77
|
| **प्रोजेक्ट की स्थिति** | <a id="feature-projectstatus"></a>साइडबार में प्रोजेक्ट की पंक्ति वही स्पिनर / इंतज़ार / पूरा होने का संकेत दिखाती है, जो उसकी चैट दिखाती हैं। इसलिए बंद (collapsed) प्रोजेक्ट भी बताता है कि अंदर कोई चैट काम कर रही है या उसे आपकी ज़रूरत है। सबसे पहले आपका इंतज़ार कर रही चैट दिखती है, फिर पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (हरा बिंदु, तब भी जब कोई दूसरी चैट अभी चल रही हो), फिर स्पिनर। विवरण देखने के लिए उस पर पॉइंटर ले जाएं। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के हर प्रोजेक्ट (जैसे `.worktrees/` में हर ब्रांच फ़ोल्डर) की चैट भी दिखाती है, तब भी जब फ़ोल्डर बंद (collapsed) हो। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट की स्थिति"></a> |
|
|
78
|
-
| **चैट पंक्तियों पर Git ब्रांच** | <a id="feature-sessionbranch"></a>साइडबार
|
|
78
|
+
| **चैट पंक्तियों पर Git ब्रांच** | <a id="feature-sessionbranch"></a>साइडबार के “एक ही सूची में” व्यू में हर चैट पंक्ति एक छोटे स्लेटी लेबल में वह git ब्रांच दिखाती है, जिस पर चैट के आख़िरी टर्न के समय चैट का प्रोजेक्ट फ़ोल्डर था (जैसे `main` या `feature/login`; detached HEAD होने पर कोई ब्रांच नहीं होती, इसलिए लेबल नहीं दिखता)। एक प्रोजेक्ट की अलग-अलग ब्रांच वाली दो चैट अब एक जैसी नहीं दिखतीं, और जब आप किसी चैट को गलत ब्रांच पर जारी रखने वाले हों, तो यह तुरंत दिख जाता है। पूरा नाम देखने के लिए लेबल पर पॉइंटर ले जाएं। Host वाला हिस्सा टर्न शुरू और ख़त्म होने पर ब्रांच पढ़ता है (`git branch --show-current`, सिर्फ़ पढ़ने के लिए); जिस चैट में यह इंस्टॉल करने के बाद से कोई टर्न नहीं हुआ, या जो फ़ोल्डर git रिपॉज़िटरी नहीं है, उसमें लेबल नहीं दिखता। “वर्कस्पेस” और “वर्कस्पेस ट्री” में चैट पहले से अपनी प्रोजेक्ट पंक्ति के नीचे होती है, इसलिए किसी भी चैट पंक्ति पर लेबल नहीं दिखता। | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="स्क्रीनशॉट: चैट पंक्तियों पर Git ब्रांच"></a> |
|
|
79
79
|
| **सभी को पढ़ा हुआ मार्क करें** | <a id="feature-markprojectread"></a>साइडबार में किसी प्रोजेक्ट के **…** बटन पर क्लिक करें → **सभी को पढ़ा हुआ मार्क करें**। उस प्रोजेक्ट की हर चैट से हरा अपठित बिंदु एक साथ हट जाता है; दूसरे प्रोजेक्ट के बिंदु बने रहते हैं। जब प्रोजेक्ट में कोई अपठित चैट नहीं होती, तो यह आइटम ग्रे दिखता है (**कोई अपठित चैट नहीं**)। | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="स्क्रीनशॉट: सभी को पढ़ा हुआ मार्क करें"></a> |
|
|
80
80
|
| **सक्रिय प्रोजेक्ट पहले** | <a id="feature-activeprojectsfirst"></a>जब कोई चैट चलने लगती है या उसे आपकी ज़रूरत होती है, तो उसका प्रोजेक्ट dsh के अपने पंक्ति एनिमेशन के साथ साइडबार में सबसे ऊपर चला जाता है (वैसे ही जैसे आप उसे खींचकर वहां ले जाते)। पूरे हो चुके प्रोजेक्ट अपनी जगह पर रहते हैं; उन्हें हमेशा की तरह कहीं भी खींचें। बदला गया क्रम dsh के प्रोजेक्ट क्रम में सेव होता है, इसलिए इसे बंद करने पर मौजूदा क्रम बना रहता है। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: सक्रिय प्रोजेक्ट पहले"></a> |
|
|
81
81
|
| **हाल के प्रोजेक्ट का फ़िल्टर** | <a id="feature-recentprojects"></a>साइडबार → व्यू के विकल्प (स्लाइडर आइकन) → **पिछले 2 घंटों में सक्रिय**। इसके चुने रहने पर साइडबार सिर्फ़ वे प्रोजेक्ट दिखाता है, जिनमें पिछले 2 घंटों में कोई चैट सक्रिय रही हो। इसमें शामिल हैं: इस समय में अपडेट हुई चैट, चल रही या इंतज़ार कर रही चैट, खुली हुई चैट, या पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (dsh का हरा “पूरा हुआ” बिंदु), 2 घंटे बाद भी। जिन प्रोजेक्ट में ऐसी कोई चैट नहीं है, वे छिप जाते हैं, नए और खाली प्रोजेक्ट भी। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर तब तक दिखता रहता है, जब तक उसके अंदर का कोई प्रोजेक्ट सक्रिय है, और जो चैट पिछले 2 घंटों में सक्रिय नहीं रहीं, वे भी छिप जाती हैं, इसलिए सिर्फ़ हाल की चैट दिखती हैं। सभी प्रोजेक्ट दिखाने के लिए इसे फिर से चुनें। यह चुनाव इसी डिवाइस पर याद रहता है। | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="स्क्रीनशॉट: हाल के प्रोजेक्ट का फ़िल्टर"></a> |
|
|
@@ -85,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
85
85
|
| **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** | <a id="feature-idleswitch"></a>जब कोई चैट सवाल पूछती है, मंज़ूरी या प्लान रिव्यू का इंतज़ार करती है (नारंगी बिंदु), या ऐसा टर्न पूरा करती है जिसे आपने अभी तक नहीं पढ़ा (हरा बिंदु), और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh वह चैट खोल देता है। नारंगी चैट हरी चैट से पहले खुलती हैं। हर समूह में सबसे लंबे समय से इंतज़ार कर रही चैट पहले खुलती है; अगली चैट फिर से 30 सेकंड तक उपयोग न होने पर खुलती है। कोई कुंजी, क्लिक, माउस हिलाना, स्क्रॉल व्हील या टच 30 सेकंड को फिर से शुरू कर देता है। फ़ोकस वाले फ़ील्ड में टेक्स्ट, चुना हुआ टेक्स्ट, या खुला मेनू या डायलॉग भी स्विच को रोकता है। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कुछ नहीं बदलता। अगर आप जवाब दिए बिना इंतज़ार कर रही चैट से हट जाते हैं, तो अगले 30 सेकंड तक उपयोग न होने पर वह फिर से खुल सकती है। हरी चैट खुलने पर उसका बिंदु हट जाता है; अगली हरी चैट तभी खुलती है जब आप dsh का फिर से उपयोग करें और उसके बाद 30 सेकंड तक उपयोग न करें। यह dsh के बैकग्राउंड में होने पर भी काम करता है, लेकिन dsh सामने नहीं आता। | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="स्क्रीनशॉट: निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें"></a> |
|
|
86
86
|
| **ऐप्लिकेशन की भाषा** | <a id="feature-language"></a>सेटिंग → Composer Plus → **ऐप्लिकेशन की भाषा** पूरे dsh इंटरफ़ेस को Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt या हिन्दी में बदल देता है (नीचे देखें)। | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="स्क्रीनशॉट: ऐप्लिकेशन की भाषा"></a> |
|
|
87
87
|
| **मोबाइल कनेक्ट (iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) ऐप से अपने iPhone पर dsh का उपयोग करें, उसी Wi-Fi पर या [Tailscale](https://tailscale.com) के ज़रिए। इसे **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह इस Mac पर एक नेटवर्क पोर्ट खोलता है)। फिर साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें: iPhone के कैमरा से (**Open in Tether** पर टैप करें) या Tether में **Scan code** से QR कोड स्कैन करें, **Connect** पर टैप करें और **Approve** पर क्लिक करें। पहले Tether इंस्टॉल करें: इसके बिना कैमरा यह कोड नहीं खोल सकता। फ़ोन आपकी चैट दिखाता है, संदेश भेजता है (फ़ोटो के साथ भी: कंपोज़र का **+** → Camera, Photos या Paste image), मंज़ूरियों और सवालों के जवाब देता है, और मॉडल व एजेंट बदलता है। आप जितने चाहें उतने Mac पेयर कर सकते हैं: ऐप में ऊपर बाईं ओर Mac का नाम उनके बीच बदलता है। **मोबाइल कनेक्ट** पैनल पेयर किए गए iPhone उनके पिछले कनेक्शन के समय के साथ दिखाता है: **Remove** किसी एक को तुरंत हटा देता है। “Tailscale only” लोकल नेटवर्क से कनेक्शन मना कर देता है (साझा Wi-Fi के लिए), और एक्सेस लॉग दिखाता है कि किसने कनेक्ट करने की कोशिश की। Tether में “Settings → Privacy” ऐप को Face ID से लॉक करता है। | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="स्क्रीनशॉट: मोबाइल कनेक्ट (iPhone)"></a> |
|
|
88
|
-
| **अपने-आप अपडेट** | <a id="feature-autoupdate"></a>dsh शुरू होने पर प्लगइन [GitHub की नवीनतम रिलीज़](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) जांचता है। अगर वह नई है और npm पर पहले से है, तो प्लगइन वही वर्शन dsh के अपने प्लगइन मैनेजर से इंस्टॉल करता है (सेटिंग → प्लगइन वाला ही रास्ता) और आपको सूचित करता है। इसे लोड करने के लिए dsh रीस्टार्ट करें। **सेटिंग → Composer Plus → Composer Plus अपडेट** वर्शन दिखाता है और उसमें **अपडेट जांचें** / **अभी अपडेट करें** बटन हैं। नए वर्शन के साथ dsh पहली बार शुरू होने पर **Composer Plus N में नया क्या है** विंडो उस वर्शन के रिलीज़ नोट्स एक बार दिखाती है (
|
|
88
|
+
| **अपने-आप अपडेट** | <a id="feature-autoupdate"></a>dsh शुरू होने पर प्लगइन [GitHub की नवीनतम रिलीज़](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) जांचता है। अगर वह नई है और npm पर पहले से है, तो प्लगइन वही वर्शन dsh के अपने प्लगइन मैनेजर से इंस्टॉल करता है (सेटिंग → प्लगइन वाला ही रास्ता) और आपको सूचित करता है। इसे लोड करने के लिए dsh रीस्टार्ट करें। **सेटिंग → Composer Plus → Composer Plus अपडेट** वर्शन दिखाता है और उसमें **अपडेट जांचें** / **अभी अपडेट करें** बटन हैं। नए वर्शन के साथ dsh पहली बार शुरू होने पर **Composer Plus N में नया क्या है** विंडो उस वर्शन के रिलीज़ नोट्स **ऐप्लिकेशन की भाषा** में चुनी गई भाषा में एक बार दिखाती है (नोट्स नए वर्शन के साथ आते हैं, कोई अतिरिक्त नेटवर्क कॉल नहीं; जिस भाषा के नोट्स नहीं हैं, उसमें अंग्रेज़ी नोट्स दिखते हैं); **बंद करें** या `Esc` से यह बंद होती है। | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="स्क्रीनशॉट: अपने-आप अपडेट"></a> |
|
|
89
89
|
| **बैकअप** | <a id="feature-backup"></a>सेटिंग → Composer Plus → **बैकअप** → **अभी बैकअप लें** आपके पूरे dsh होम (चैट, सेटिंग, प्लगइन, MCP, Skills) को चेकसम के साथ `~/Desktop/dsh-backups` में एक आर्काइव में लिखता है। आर्काइव में सीक्रेट मास्क किए जाते हैं: क्रेडेंशियल फ़ाइलें, की फ़ाइलें (`.pem`, `.key`) और yml सेटिंग के token, secret और password मान सिर्फ़ इसी कंप्यूटर पर, फ़ोल्डर के `vault` में रहते हैं। `cache/`, `dsh-runtimes/` और `node_modules` आर्काइव में नहीं जाते (dsh उन्हें फिर से बनाता है)। सूची के हर बैकअप में **जांचें** (उसे पूरा पढ़ता है), **दूसरे कंप्यूटर के लिए** (नए कंप्यूटर पर कॉपी करने के लिए एक फ़ोल्डर, रेस्क्यू कंसोल के साथ) और **हटाएं** हैं। उसी फ़ोल्डर में dsh-backup के आर्काइव भी दिखते हैं और काम करते हैं। बहाल करने के लिए dsh बंद करें और रेस्क्यू कंसोल का उपयोग करें। | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="स्क्रीनशॉट: बैकअप"></a> |
|
|
90
90
|
| **अपने-आप बैकअप** | <a id="feature-autobackup"></a>**अपने-आप बैकअप** चालू करें (डिफ़ॉल्ट रूप से बंद: हर कॉपी लगभग उतनी बड़ी होती है जितना कैश के बिना आपका dsh होम)। चुनें कि बैकअप कितनी बार हो (**हर**: 6 घंटे से 7 दिन, डिफ़ॉल्ट 24 घंटे) और कितने बैकअप रखे जाएं (**रखें**: 3 से 14, डिफ़ॉल्ट 7)। अगला समय स्विच के नीचे दिखता है; विफल बैकअप भी वहीं दिखता है और 30 मिनट बाद फिर से आज़माया जाता है। जब dsh या Composer Plus नए वर्शन के साथ शुरू होता है, तो शुरू होने के कुछ ही देर बाद, नए वर्शन के आपके डेटा का लंबे समय तक उपयोग करने से पहले, एक स्नैपशॉट लिया जाता है (सबसे नए दो रखे जाते हैं, **अपग्रेड से पहले** के निशान के साथ)। | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="स्क्रीनशॉट: अपने-आप बैकअप"></a> |
|
|
91
91
|
| **सेशन लॉग जांच** | <a id="feature-sessiondoctor"></a>**सेशन लॉग जांचें** हर चैट का लॉग पढ़ता है और उन लॉग की सूची दिखाता है जिन्हें dsh नहीं खोल सकता (टूटा फ़्रेम, कटा हुआ रिकॉर्ड, गलत क्रम संख्या)। अधूरा आखिरी हिस्सा सूची में नहीं आता: dsh उसे खुद ठीक करता है। **बैकअप से ठीक करें** उस सबसे नए बैकअप से कॉपी वापस रखता है जिसमें सही कॉपी है, और खराब फ़ाइल को उसके बगल में रखता है (`.corrupt-<समय>`)। उस बैकअप के बाद लिखे गए संदेश कॉपी में नहीं होते। इस dsh में खुली चैट यहां ठीक नहीं की जाती: dsh बंद करें और उसे रेस्क्यू कंसोल में ठीक करें। | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="स्क्रीनशॉट: सेशन लॉग जांच"></a> |
|
|
@@ -169,7 +169,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
169
169
|
- **लक्ष्य जांच:** यह सिर्फ़ तब चलती है, जब एजेंट किसी अपने-आप चलने वाले राउंड में `/goal` को पूरा मार्क करता है (या जब आप **अभी चलाएं** पर क्लिक करते हैं)। Host वाला हिस्सा टेस्ट कमांड को चैट के फ़ोल्डर में, चैट के सैंडबॉक्स मोड में चलाता है (dsh के अपने `bash` टूल की तरह: फ़ाइल एक्सेस की वही नीति; अगर वह सैंडबॉक्स शुरू नहीं हो पाता, तो टेस्ट नहीं चलता और जांच विफल होती है)। कमांड ढूंढने के लिए यह सिर्फ़ `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` और `pytest.ini` पढ़ता है, फ़ोल्डर के अंदर की सामान्य फ़ाइलों के रूप में (फ़ोल्डर से बाहर जाने वाला symlink नहीं, FIFO नहीं)। फिर यह लक्ष्य, लक्ष्य शुरू होने के बाद की चैट (आपके संदेश, एजेंट के जवाब, 1,000 अक्षरों तक काटी गई टूल कॉल और हर टूल नतीजे के आखिरी 2,000 अक्षर; रीज़निंग और रोलबैक किए गए कदम नहीं; ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा), `git status --short` और टेस्ट आउटपुट का आखिरी हिस्सा **लक्ष्य जांच** में चुने गए मॉडल (डिफ़ॉल्ट रूप से चैट का अपना मॉडल) को बिना टूल वाले एक अनुरोध के रूप में भेजता है। टूल आउटपुट में वह हो सकता है जो एजेंट ने पढ़ा, इसलिए इस अनुरोध में, चैट की तरह ही, आपकी फ़ाइलों के हिस्से हो सकते हैं। चैट या प्रोजेक्ट में कुछ नहीं लिखा जाता। आपकी टेस्ट कमांड, सीमाएं, पिछला नतीजा (उसके आउटपुट के आखिरी हिस्से के साथ) और चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल, सबसे नई 500 चैट)।
|
|
170
170
|
- **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
|
|
171
171
|
- **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
|
|
172
|
-
- **टास्क बोर्ड:** बोर्ड
|
|
172
|
+
- **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। जब आप कोई टास्क शुरू करते हैं, तो Host वाला हिस्सा आपके चुने गए प्रोजेक्ट में नई चैट बनाता है और आपका प्रॉम्प्ट उसके पहले संदेश के रूप में भेजता है, जैसे आपने उसे वहीं लिखा हो, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। फिर वह प्रॉम्प्ट (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती।
|
|
173
173
|
- **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
|
|
174
174
|
- **ब्लॉक की गई कमांड:** नियम और स्विच `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर `bash` और `pwsh` कॉल का सिर्फ़ कमांड टेक्स्ट पढ़ती है; यह न कुछ चलाती है, न कुछ भेजती है।
|
|
175
175
|
- **प्रोजेक्ट मेमोरी:** जब तक आप इसे चालू नहीं करते, यह बंद रहती है। चालू रहने पर, सबसे ऊपर के स्तर की चैट का हर टर्न पूरा होने के बाद Host हिस्सा पिछली समीक्षा के बाद आए उस चैट के अपने नए संदेश (आपके संदेश और एजेंट के टेक्स्ट जवाब; टूल आउटपुट, रीज़निंग, छिपा संदर्भ और रोलबैक किए गए संदेश नहीं; फ़ोर्क की गई चैट में पैरेंट चैट की कॉपी शामिल नहीं; ज़्यादा से ज़्यादा लगभग 16,000 अक्षर) और सेव किए गए नोट, बिना टूल वाले एक अनुरोध के रूप में चैट के अपने मॉडल को भेजता है। नोट `$DSH_HOME/storages/dsh-composer-plus/memory/` में Markdown फ़ाइलें हैं (सिर्फ़ मालिक के लिए): हर प्रोजेक्ट फ़ोल्डर के लिए `projects/<id>/` (`<id>` फ़ोल्डर के असली पाथ का हैश है; `project.json` में फ़ोल्डर लिखा रहता है), `global/`, `journal.jsonl` (हर बदलाव, पहले और बाद वाली लाइन के साथ) और `reviewed.json` (हर चैट कहां तक पढ़ी गई)। प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। जो नोट कुंजी, टोकन, पासवर्ड या पहचान संख्या जैसे दिखते हैं, वे अस्वीकार होते हैं। किसी प्रोजेक्ट के नोट उस फ़ोल्डर की हर नई चैट के सिस्टम प्रॉम्प्ट में जाते हैं, इसलिए वे उस चैट के हर अनुरोध के साथ मॉडल तक पहुंचते हैं। स्विच उसी जगह `memory.json` में है। जब तक आप **बदलावों का प्रीव्यू** नहीं दबाते, **मेमोरी खोलें** कुछ नहीं भेजता; दबाने पर यह दिखाए गए नोट और आपका टेक्स्ट बिना टूल वाले एक अनुरोध में dsh के डिफ़ॉल्ट मॉडल को भेजता है। बदलाव सिर्फ़ **लागू करें** पर लिखे जाते हैं, जर्नल में `editor` के साथ। Tether उसी रूट से नोट पढ़ता और बदलता है।
|
|
@@ -191,10 +191,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
191
191
|
- **रीस्टार्ट के बाद कोई चैट जारी नहीं रही:** dsh बंद होते समय रीस्टार्ट के बाद जारी रखें बंद था, आपने वह टर्न खुद रोका था, टर्न खत्म हो चुका था (पूरा या विफल), चैट आर्काइव थी, या 20 से ज़्यादा चैट चल रही थीं (सबसे नई 20 जारी रहती हैं)।
|
|
192
192
|
- **रीस्टार्ट के बाद कतार खाली है:** dsh खुद बंद होते समय कतार खाली कर देता है। रीस्टार्ट के बाद जारी रखें उसे सिर्फ़ उसी चैट में वापस रखता है जिसे वह जारी रखता है; दूसरी चैट में संदेश फिर से भेजें। बंद होने से ठीक पहले हटाया गया संदेश वापस आ सकता है: उसे फिर से हटाएं।
|
|
193
193
|
- **GitHub इश्यू खोलें "gh could not open the issue" कहता है:** यह संदेश `gh` की अपनी पहली पंक्ति है। टर्मिनल में `gh auth status` चलाएं और `gh auth login` से लॉग इन करें; चैट के फ़ोल्डर में GitHub रिमोट होना चाहिए (`git remote -v`)। "not installed or not on the PATH of dsh" का मतलब है कि dsh को `gh` नहीं मिला: इसे इंस्टॉल करें, या dsh को ऐसे टर्मिनल से शुरू करें, जिसमें `gh` काम करता हो।
|
|
194
|
-
- **चैट पंक्ति पर ब्रांच लेबल नहीं है:** यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
|
|
194
|
+
- **चैट पंक्ति पर ब्रांच लेबल नहीं है:** साइडबार “एक ही सूची में” व्यू में नहीं है (“वर्कस्पेस” और “वर्कस्पेस ट्री” में किसी भी चैट पंक्ति पर लेबल नहीं दिखता), यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
|
|
195
195
|
- **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
|
|
196
196
|
- **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
|
|
197
|
-
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.
|
|
197
|
+
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.19.0`), ऊपर इंस्टॉल वाला नोट देखें।
|
|
198
198
|
- **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
|
|
199
199
|
- **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
|
|
200
200
|
- **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
|
|
@@ -214,6 +214,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
214
214
|
- **चैट हटाएं** के लिए dsh का आर्काइव चाहिए (dsh 0.2.0 और बाद के वर्शन)। जो चैट (या उसकी कोई सबएजेंट चैट) 15 सेकंड में नहीं रुकती, या जिसे कोई दूसरा dsh रखता है, वह आर्काइव में रहती है और कुछ नहीं खिसकता। macOS के अलावा दूसरे सिस्टम पर ट्रैश फ़ोल्डर उसी डिस्क पर होना चाहिए, जिस पर चैट इतिहास है। अगर आप कोई खुली चैट हटाते हैं, तो वह dsh रीस्टार्ट होने तक dsh की मेमोरी में आर्काइव और छिपी हुई रहती है। ट्रैश खुद खाली करें; dsh यह नहीं करता।
|
|
215
215
|
- dsh की कतार में `move` कार्रवाई नहीं है, इसलिए प्लगइन का Host वाला हिस्सा कतार वाले संदेश को ही dsh की कतार में खिसकाता है (एक बदलाव, वही संदेश)। इमेज या फ़ाइलों वाले संदेश भी खिसकते हैं। सिर्फ़ आपके अपने संदेश खिसकते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब अपनी जगह पर रहता है। अगर आपके खींचते समय कोई संदेश भेजा जाना शुरू हो जाता है, तो कुछ नहीं खिसकता और एक सूचना यह बताती है।
|
|
216
216
|
- अगर नया वर्शन dsh की कोई सेटिंग नहीं बदलता, तो dsh 0.2.1 अपडेट तुरंत लोड करता है; बाकी मामलों में, और dsh 0.2.0 पर, इसे लोड करने के लिए dsh रीस्टार्ट करें। प्लगइन आपके लिए dsh कभी रीस्टार्ट नहीं करता। जिन वेब/CLI प्रोफ़ाइल में dsh का प्लगइन मैनेजर नहीं है, वे सिर्फ़ नए वर्शन की जानकारी देती हैं।
|
|
217
|
+
- **Composer Plus N में नया क्या है** नोट्स को **ऐप्लिकेशन की भाषा** की भाषा में दिखाता है। किसी दूसरे क्षेत्र वाली UI भाषा को उसकी मूल भाषा के नोट्स मिलते हैं (`en-GB` को अंग्रेज़ी नोट्स, `zh-TW` को `zh` के चीनी नोट्स)। जिस भाषा के नोट्स नहीं हैं (जिसे कोई दूसरा भाषा पैक जोड़ता है, या `pt-PT`, जो `pt-BR` नहीं है), उसमें अंग्रेज़ी नोट्स दिखते हैं। नोट्स नए वर्शन के साथ आते हैं। अगर चल रही कॉपी में पढ़ने लायक नोट्स फ़ाइल (`release-notes.json`) नहीं है, तो विंडो GitHub के अंग्रेज़ी नोट्स दिखाती है।
|
|
217
218
|
- **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
|
|
218
219
|
- **कंपोज़र में फ़ोकस बनाए रखें** सिर्फ़ `/` कमांड या स्किल के बाद फ़ोकस वापस देता है। जब तक dsh कमांड प्रोसेस करता है, कंपोज़र कुछ मिलीसेकंड तक सिर्फ़ पढ़ने लायक रहता है, इसलिए उस समय दबाई गई कुंजियां खो जाती हैं। अगर dsh का `/` मेन्यू अभी भी खुला है, तो `Enter` हाइलाइट की गई पंक्ति चुनता है और कुछ नहीं भेजता।
|
|
219
220
|
- **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
|
|
@@ -227,7 +228,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
227
228
|
- **यह चैट** सिर्फ़ वे फ़ाइलें गिनता है, जो dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) ने लिखीं। जो फ़ाइलें किसी कमांड (`bash`) ने बदलीं, वे इस व्यू में नहीं हैं; वे **कमिट नहीं किए गए** में दिखती हैं। अगर चैट का टर्न रोलबैक स्नैपशॉट नहीं है (टर्न रोलबैक बंद है, dsh-rewind-plugin इंस्टॉल है, या चैट प्लगइन से पुरानी है), तो व्यू आखिरी कमिट से तुलना करता है और यह बताता है। टर्न रोलबैक किसी चैट के 50 नवीनतम स्नैपशॉट रखता है: लंबी चैट में व्यू सबसे पुराने रखे गए स्नैपशॉट से तुलना करता है, बताता है कि किस संदेश से, और पहले के बदलाव नहीं गिनता। **व्हाइटस्पेस बदलाव छिपाएं** का मतलब `git diff -w` है: जिस पंक्ति में सिर्फ़ अंदर की स्पेस बदली, वह भी छिप जाती है।
|
|
228
229
|
- **GitHub इश्यू खोलें** के लिए dsh के PATH में GitHub CLI (`gh`) और चैट के फ़ोल्डर में GitHub रिमोट ज़रूरी है। यह ज़्यादा से ज़्यादा 60 सेकंड चलता है; अगर `gh` इससे ज़्यादा समय लेता है, तो इश्यू GitHub पर बन चुका हो सकता है, पर सूची में उसका लिंक नहीं होगा (दोबारा क्लिक करने से पहले GitHub पर देखें: सूची लिंक सिर्फ़ पूरे हुए रन से पढ़ती है, इसलिए नया क्लिक दूसरा इश्यू खोल सकता है)। एक से ज़्यादा GitHub रिमोट वाला फ़ोल्डर `gh` का अपना डिफ़ॉल्ट (`gh repo set-default`) इस्तेमाल करता है।
|
|
229
230
|
- **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
|
|
230
|
-
- **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता।
|
|
231
|
+
- **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। लेबल सिर्फ़ “एक ही सूची में” व्यू में दिखता है।
|
|
231
232
|
- **हर चैट की अपनी ब्रांच** प्लान मोड में: dsh `/plan <संदेश>` को संदेश की तरह नहीं, कमांड की तरह भेजता है, इसलिए Composer Plus dsh के कंपोज़र में कमांड का सबमिट खुद संभालता है (यह सार्वजनिक API नहीं है)। अगर किसी dsh अपडेट से यह बदलता है, तो **नई ब्रांच** चुनी होने पर `/plan <संदेश>` खुली नई चैट में dsh के अपने कमांड की तरह चलता है। जब Host नई चैट में प्लान मोड चालू नहीं कर पाता, तो ब्रांच फ़ोल्डर बना रहता है और संदेश नहीं भेजा जाता, ताकि नई चैट डिफ़ॉल्ट मोड में फ़ाइलें न बदले।
|
|
232
233
|
- **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, वह भी साइडबार से हट जाता है: Composer Plus शुरू होने पर और हर 30 सेकंड में ब्रांच फ़ोल्डर जाँचता है, साइडबार के किसी फ़िल्टर के बिना भी। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
|
|
233
234
|
- **वर्कस्पेस ट्री में ब्रांच** बिना क्लिक के git में लिखता है: चैट ले जाते समय यह प्रोजेक्ट फ़ोल्डर को उसकी पिछली ब्रांच पर लौटाता है (`git switch`) और एक worktree जोड़ता है (`git worktree add`)। यह कभी कोई ब्रांच, worktree या फ़ाइल नहीं हटाता। dsh किसी चैट का फ़ोल्डर नहीं बदल सकता, इसलिए ले जाई गई चैट एक कॉपी होती है (dsh का अपना फ़ोर्क, नई id के साथ) और पुरानी चैट आर्काइव हो जाती है। कॉपी रुका हुआ काम जारी रखती है; ब्रांच आने के समय चल रही टूल कॉल अस्वीकार होकर ख़त्म होती है, और एजेंट उसे नए फ़ोल्डर में फिर चलाता है। पुरानी चैट का लक्ष्य साथ नहीं जाता। सिर्फ़ वही चैट जाती है जिसका फ़ोल्डर रिपॉज़िटरी का मुख्य फ़ोल्डर है, और सिर्फ़ उस ब्रांच के लिए जिसे उसने उसी टर्न में बनाया और जिस पर स्विच किया (`git switch -c`, `git checkout -b`): सिर्फ़ `git branch` से बनी ब्रांच, अनकमिटेड बदलाव वाला फ़ोल्डर, लिंक्ड worktree या सब-फ़ोल्डर कुछ नहीं ले जाते। ट्री में सिर्फ़ वे worktree दिखते हैं जो सीधे `<project>/.worktrees/` में हैं और जिनकी ब्रांच है; अलग (detached) worktree या कहीं और का worktree नहीं दिखता। कॉपी अपने-आप तभी खुलती है जब उसकी चैट खुली हुई चैट थी (प्लगइन यह dsh की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
|
|
@@ -248,7 +249,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
248
249
|
- **नई चैट में जारी रखें** चैट (संदेश, टूल कॉल और हर टूल नतीजे का आखिरी हिस्सा, ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा) चैट के अपने मॉडल को भेजता है। हैंडऑफ़ नोट से कोई फ़ैसला या फ़ाइल छूट सकती है: शुरू करने से पहले उसे पढ़ें। नई चैट सिर्फ़ नोट और लिंक की गई चैट को जानती है (dsh पुरानी चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ता है); उसका मॉडल कॉन्टेक्स्ट छोटा शुरू होता है, पुरानी चैट जैसी है वैसी रहती है। हर चैट के लिए एक समय में एक ही नोट या शुरुआत चलती है।
|
|
249
250
|
- **कॉन्टेक्स्ट का ब्योरा** dsh के अपने नियम (हर टोकन पर लगभग 4 अक्षर) से अनुमान दिखाता है, वही नियम जो dsh की कॉन्टेक्स्ट रिंग में है; मॉडल की अपनी गिनती अलग हो सकती है। टूल की परिभाषाएं सबसे नए अनुरोध की होती हैं। यह कॉन्टेक्स्ट वैसा दिखाता है जैसा चैट लॉग में है; अभी चल रहा टर्न अपने अगले कदम के बाद दिखता है।
|
|
250
251
|
- **नियोजित चरण** से टोकन तभी बचते हैं जब मॉडल सच में योजना बनाए: चालू रहने पर हर अनुरोध में `plan_next_steps` टूल और एक छोटा निर्देश (लगभग 500 टोकन) जाता है, उन चैट में भी जहाँ मॉडल कभी योजना नहीं बनाता। शर्त सिर्फ़ वही साबित करती है जो उसमें लिखा है (जैसे: बिल्ड का एग्ज़िट कोड 0 था), यह नहीं कि काम सही है। `ok` dsh के अपने नतीजे वाले निशान पढ़ता है (`[exit code: N]`, टाइमआउट, सैंडबॉक्स से इनकार); जो कमांड शून्य से अलग एग्ज़िट कोड दिए बिना विफल हो, वह पास मानी जाती है। चरण एक-एक करके चलते हैं; एक साथ तैयार दो चरण मॉडल को लौटते हैं। चरण का संदेश चैट के मॉडल के असिस्टेंट संदेश के रूप में सेव होता है (dsh में प्लगइन के लिखे संदेश के लिए कोई निशान नहीं है), इसलिए उसके टेक्स्ट में लिखा होता है कि इसे Composer Plus ने चलाया। Tether में नहीं है।
|
|
251
|
-
- **टास्क बोर्ड**
|
|
252
|
+
- **टास्क बोर्ड** वे चैट दिखाता है जिन्हें dsh इस विंडो में अपनी सूची में दिखाता है: किसी प्रोजेक्ट के बाहर की चैट सिर्फ़ **सभी प्रोजेक्ट** में दिखती है, और हर चैट की अपनी ब्रांच का फ़ोल्डर (`<project>/.worktrees/<name>`) अपने प्रोजेक्ट में गिना जाता है। कार्ड का कॉलम चैट की लाइव स्थिति है, इसलिए कार्ड खींचे नहीं जा सकते: टर्न खत्म होने पर चैट **पूरा हुआ** में जाती है, एरर या रोकने के बाद भी, और फिर से चलने पर **प्रगति में** लौट आती है। हरा बिंदु dsh का अपना पूरा होने वाला बिंदु है, जिसे dsh सिर्फ़ इसी विंडो में रखता है: पेज फिर से लोड होने के बाद खत्म हुई चैट इसके बिना दिखती हैं। **पूरा हुआ** सबसे नई 50 चैट दिखाता है (**N पुराने टास्क दिखाएं** बाकी चैट दिखाता है)। टैग हर शुरू किए गए टास्क के लिए एक मॉडल कॉल से आते हैं: वे गलत हो सकते हैं, और जो चैट आपने बोर्ड पर शुरू नहीं की, उसके कोई टैग नहीं होते। शीर्षक dsh का अपना चैट शीर्षक है (dsh की शीर्षक सर्विस, चैट के मॉडल के साथ); जब तक वह नहीं आता, कार्ड प्रॉम्प्ट की पहली लाइन दिखाता है। जो प्रॉम्प्ट dsh की जानी-पहचानी `/` कमांड (`/plan`, `/goal`) से शुरू होता है, वह उसी कमांड के रूप में चलता है। **जवाब दें** चैट के सिर्फ़ सबसे नए अनुरोध का जवाब देता है: अगर उस अनुरोध का जवाब कहीं और (दूसरी विंडो, Tether, ऑटो रिव्यू) दिया जा चुका है या चैट कुछ नया पूछती है, तो पैनल यह बताता है और कुछ नहीं भेजता। पुराने वर्शन में टिप्पणियों और एजेंट टूल वाली टास्क सूची थी; वह अब नहीं है, और पुरानी `board.json` नहीं दिखाई जाती। विचार और रूप emanuele-em के [Kanzo](https://github.com/emanuele-em/kanzo) (AGPL-3.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता।
|
|
252
253
|
- **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
|
|
253
254
|
- **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (dsh के प्रोजेक्ट फ़ोल्डर) की होती है: जो चैट `cd` से फ़ोल्डर बदलती है, वह अपने पहले प्रोजेक्ट की मेमोरी ही रखती है, और वही फ़ोल्डर उन्हीं फ़ाइलों तक जाने वाले दूसरे पाथ से खोला जाए तो वह भी यही मेमोरी साझा करता है। चैट शुरू होते समय अपना मेमोरी हिस्सा स्थिर कर देती है, इसलिए बाद में सेव हुआ नोट अगली चैट से दिखता है (`memory_recall` उसे तुरंत ढूंढ लेता है)। समीक्षा सिर्फ़ वही रखती है, जो मॉडल रखना तय करता है: वह कोई तथ्य छोड़ सकती है या कोई गलत बात रख सकती है; उन्हें **मेमोरी खोलें** में जांचें और वहीं बदलें, या dsh बंद होने पर फ़ाइलें हाथ से बदलें। **मेमोरी खोलें** चुने गए प्रोजेक्ट के नोट और ग्लोबल नोट (सभी नोट चुनने पर सभी प्रोजेक्ट; ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, बाकी सिर्फ़ गिने जाते हैं और उस अनुरोध में नहीं बदल सकते) और आपका लिखा हुआ टेक्स्ट चैट के मॉडल को नहीं, dsh के डिफ़ॉल्ट मॉडल को भेजता है। प्रीव्यू Mac पर 30 मिनट तक और dsh के दोबारा शुरू होने तक रहता है; अगर इस बीच समीक्षा या एजेंट नोट बदल दे, तो **लागू करें** मना कर देता है और आपको फिर से प्रीव्यू लेना होता है। **लागू करें** किसी प्रीव्यू के सभी बदलाव सेव करता है या एक भी नहीं: अगर कोई बदलाव सेव नहीं हो पाता (जैसे MEMORY.md भर गई हो), तो नोट पहले जैसे रहते हैं और कारण दिखता है। आपके संदेश वाले हर पूरे टर्न पर एक मॉडल कॉल लगती है; विफल कॉल अगले टर्न के बाद वही संदेश फिर पढ़ती है। सब-एजेंट चैट की समीक्षा नहीं होती। यह विचार और फ़ाइल फ़ॉर्मैट [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता और DS Bot की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
|
|
254
255
|
- **बैकअप** एक ही तय फ़ोल्डर इस्तेमाल करता है, `~/Desktop/dsh-backups` (dsh-backup का डिफ़ॉल्ट, ताकि उसके आर्काइव काम के बने रहें); किसी दूसरे फ़ोल्डर के लिए कोई सेटिंग नहीं है। एक आर्काइव लगभग उतना ही बड़ा होता है जितना `cache/` और `dsh-runtimes/` के बिना dsh होम (मापा गया: Apple Silicon पर 1.6 GB फ़ाइलों से लगभग 30 सेकंड में 830 MB का आर्काइव बना; इस दौरान dsh जवाब देता रहा)। पढ़ते समय बदलने वाली फ़ाइल उसी रूप में सेव होती है, जैसी वह तब थी जब बैकअप ने उसे खोला था। इसलिए किसी खुली चैट का लॉग एक कटे हुए रिकॉर्ड पर खत्म हो सकता है, जिसे dsh अगली बार लिखते समय ठीक कर देता है। मास्किंग yml फ़ाइल में किसी सीक्रेट को एक लाइन पर उसकी key के नाम (`token:`, `apiKey:`, …) से ढूंढती है; flow map (`{token: x}`) में, ऐसी key के नीचे की सूची में, JSON फ़ाइल में (जैसे किसी `.json` फ़ाइल में किसी MCP सर्वर की `apiKey`) या किसी दूसरे नाम से रखा सीक्रेट आर्काइव में रहता है। dsh-backup के प्रकार के हिसाब से बने आर्काइव (`dsh-t-…`) सूची में नहीं दिखते। **दूसरे कंप्यूटर के लिए** आर्काइव कॉपी करता है (APFS पर एक क्लोन: कोई अतिरिक्त जगह नहीं); vault उसके साथ नहीं जाता। **अभी बैकअप लें** कोई बैकअप नहीं हटाता। अपने-आप होने वाला बैकअप Composer Plus के बनाए सबसे नए बैकअप रखता है (**अपने-आप बैकअप** की **रखें** सेटिंग) और अपने बनाए पुराने बैकअप हटा देता है; अपग्रेड से पहले के स्नैपशॉट अलग गिने जाते हैं (सबसे नए 2 रहते हैं)। dsh-backup के आर्काइव कभी नहीं हटाए जाते: उन्हें **हटाएं** से हटाएं। जब तक dsh-backup इंस्टॉल है, वह Composer Plus के आर्काइव को रखे जाने वाले बैकअप की अपनी गिनती में गिनता है और उन्हें हटा सकता है।
|
|
@@ -285,7 +286,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
285
286
|
|
|
286
287
|
**क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है। नोट देखने या बदलने के लिए उसी पंक्ति में **मेमोरी खोलें** दबाएँ और लिखें कि क्या बदलना है।
|
|
287
288
|
|
|
288
|
-
**क्या मैं
|
|
289
|
+
**क्या मैं अपनी सभी चैट को कानबान बोर्ड की तरह देख सकता हूं और वहीं से नई चैट शुरू कर सकता हूं?** हां, **टास्क बोर्ड** से (डिफ़ॉल्ट रूप से चालू): इसे बाएं साइडबार में खोलें। हर चैट **प्रगति में**, **समीक्षा** (वह आपका इंतज़ार कर रही है) या **पूरा हुआ** में एक कार्ड है। **नया टास्क** सिर्फ़ एक प्रॉम्प्ट लेता है और उससे नई चैट शुरू करता है; चैट खोले बिना जवाब देने के लिए नारंगी कार्ड पर **जवाब दें** पर क्लिक करें।
|
|
289
290
|
|
|
290
291
|
**क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
|
|
291
292
|
|
|
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
407
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
408
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
409
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
410
|
-
# Task board:
|
|
411
|
+
# Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
411
412
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
412
413
|
```
|
|
413
414
|
|
package/README.id.md
CHANGED
|
@@ -14,7 +14,7 @@ Fitur kenyamanan bergaya Codex untuk UI desktop dan web [DeepSeek Harness](https
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness dengan Composer Plus: proyek yang sedang berjalan menampilkan spinner di bilah samping, dan panel Perubahan menampilkan diff git"></p>
|
|
16
16
|
|
|
17
|
-
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
17
|
+
Plugin komunitas tidak resmi. Satu-satunya panggilan jaringan adalah pemeriksaan pembaruan (rilis GitHub dan registri npm). Nonaktifkan **Pembaruan otomatis** untuk menghentikannya saat dsh dimulai. **Ide fitur** memanggil model obrolan Anda sendiri hanya saat Anda mengklik **Sarankan fitur**. **Prediksi pesan berikutnya** (aktif secara default) memanggil model yang dipilih di Pengaturan (model default dsh, kecuali Anda memilih yang lain) satu kali setelah setiap giliran selesai, tanpa klik. Nonaktifkan di **Pengaturan → Composer Plus** untuk menghentikan panggilan ini. **Lengkapi saat mengetik** (nonaktif secara default) memanggil model yang dipilih untuknya (secara default model prediksi) di setiap jeda saat Anda mengetik, setelah Anda mengaktifkannya. **Sempurnakan prompt** memanggil model hanya saat Anda mengklik tongkat ajaibnya. **Papan tugas** memanggil model obrolan baru satu kali untuk label setiap tugas yang Anda mulai di papan. **Pemeriksaan tujuan** (aktif secara default) memanggil model satu kali setiap kali agen menandai `/goal` sebagai selesai dalam putaran otomatis. **Koneksi seluler** (nonaktif secara default) menerima koneksi iPhone dari jaringan lokal atau tailnet Anda hanya setelah Anda mengaktifkannya.
|
|
18
18
|
|
|
19
19
|
## Instalasi
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil itu dikelola oleh aplikasi.)
|
|
31
31
|
|
|
32
|
-
> pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.19.0`.
|
|
33
33
|
|
|
34
34
|
## Fitur
|
|
35
35
|
|
|
@@ -71,11 +71,11 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
71
71
|
| **Langkah terencana** | <a id="feature-plannedsteps"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Agen mendapat alat `plan_next_steps`: dalam pesan yang sama dengan sebuah perintah, agen dapat merencanakan perintah berikutnya beserta argumen persisnya dan sebuah syarat, misalnya “jalankan `npm test` jika build berhasil”. Jika hasilnya memenuhi syarat, Composer Plus menjalankan langkah berikutnya sendiri tanpa panggilan model baru, sehingga obrolan panjang memakai lebih sedikit token. Langkah itu muncul di obrolan sebagai satu baris pendek, “Composer Plus · Planned steps: ran `test` … without a model call”, diikuti panggilan alat dan hasilnya. Hanya langkah `bash`, `read`, `grep`, dan `glob`; persetujuan, sandbox, dan File yang dilindungi berlaku untuk setiap langkah seperti biasa. Model menjawab lagi saat syarat tidak terpenuhi, saat dua langkah siap bersamaan, setelah langkah terakhir, dan saat Anda mengirim pesan. Idenya berasal dari HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Tangkapan layar: Langkah terencana"></a> |
|
|
72
72
|
| **File yang dilindungi** | <a id="feature-protectedfiles"></a>Aktif secara bawaan. Alat file milik agen sendiri tidak dapat membaca atau mengubah file yang cocok dengan pola Anda: `read`, `read_image`, dan `grep` pada file ditolak untuk pola **baca dan tulis**, sedangkan `write`, `edit`, dan `str_replace_editor` ditolak untuk kedua jenis. Agen membaca alasannya dan diminta untuk bertanya kepada Anda. Pola bawaannya `.env*`, `*.pem`, dan `*.key`. Pengaturan → Composer Plus → **File yang dilindungi**: tambahkan pola (misalnya `published/**` atau `config/*.yml`), klik jenisnya untuk beralih antara **baca dan tulis** dan **hanya tulis**, hapus dengan ✕, atau klik **Gunakan bawaan**. Pola tanpa `/` cocok dengan nama file di folder mana pun. Ini pagar pengaman, bukan sandbox: perintah shell (`cat .env`), skrip, atau alat MCP tetap dapat menjangkau file itu (lihat Batasan). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Tangkapan layar: File yang dilindungi"></a> |
|
|
73
73
|
| **Perintah yang diblokir** | <a id="feature-blockedcommands"></a>Aktif secara bawaan, dengan daftar kosong. Perintah shell agen (`bash`, `pwsh`) tidak dapat menjalankan perintah yang cocok dengan aturan Anda: aturan **blokir** menolak panggilan itu (agen membaca alasannya dan diminta untuk bertanya kepada Anda), aturan **tanya dulu** menampilkan kartu persetujuan dsh, dan perintah hanya berjalan jika Anda mengizinkannya. Pengaturan → Composer Plus → **Perintah yang diblokir**: ketik aturan (misalnya `npm publish`, `git push --force`, atau `ssh *192.168.2.19`), klik jenisnya untuk beralih antara **blokir** dan **tanya dulu**, lalu klik **Tambah**; klik jenis sebuah aturan untuk mengubahnya, hapus aturan dengan ✕. Aturan adalah nama perintah dan kata-kata yang harus muncul sesudahnya dalam urutan ini; `*` cocok dengan teks apa pun. Fitur ini juga menemukan perintah sesudah `&&`, `;`, `\|`, di dalam `$(…)`, `bash -c "…"`, atau `eval`, dan sesudah `sudo` atau `env`. Ini pagar pengaman, bukan sandbox: variabel (`$CMD`), file skrip, atau program lain tetap dapat menjalankan perintah itu (lihat Batasan). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Tangkapan layar: Perintah yang diblokir"></a> |
|
|
74
|
-
| **Papan tugas** | <a id="feature-taskboard"></a>Bilah samping kiri → **Papan tugas**. Papan kanban
|
|
74
|
+
| **Papan tugas** | <a id="feature-taskboard"></a>Bilah samping kiri → **Papan tugas**. Papan kanban obrolan dsh Anda dengan status langsung yang sama seperti di bilah samping: obrolan yang menunggu persetujuan, jawaban, atau tinjauan rencana Anda ada di **Ditinjau** dengan titik oranye, obrolan yang berjalan ada di **Sedang dikerjakan**, dan obrolan yang sudah selesai ada di **Selesai** (hijau sampai Anda membukanya). Pilih proyek atau **Semua proyek** di kiri; folder branch per obrolan dihitung sebagai proyeknya. **Tugas baru** (atau `n`) hanya memerlukan prompt: `Enter` memulai obrolan baru di proyek, kartunya tampil di **Akan dikerjakan**, dsh memberi nama obrolan, dan model obrolan menulis hingga 3 label. Klik kartu untuk membuka obrolannya. Di kartu oranye, klik **Jawab** untuk menjawabnya di papan: **Tolak** atau **Izinkan sekali**, **Setujui** atau **Minta perubahan** untuk rencana, atau pilihan dan teks Anda sendiri untuk pertanyaan. **Sembunyikan yang selesai** menyembunyikan **Selesai** di perangkat ini. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Tangkapan layar: Papan tugas"></a> |
|
|
75
75
|
| **Memori proyek** | <a id="feature-projectmemory"></a>Nonaktif secara default: aktifkan di **Pengaturan → Composer Plus**. Setiap folder proyek mendapat memorinya sendiri, yang dibaca oleh obrolan berikutnya di proyek itu, seperti DS Bot menyimpan satu memori untuk setiap Bot. Setelah setiap giliran selesai, satu panggilan ke model obrolan membaca pesan baru (bukan yang ditarik oleh putar balik), menyimpan preferensi, keputusan, dan fakta Anda yang bertahan lama sebagai catatan singkat, serta mengubah atau menghapus catatan lama. Agen juga dapat menyimpan, menghapus, dan mencari catatan sendiri (`memory_remember`, `memory_forget`, `memory_recall`). Catatan juga bisa global: setiap proyek membacanya. Obrolan baru mendapat catatan di prompt sistemnya; catatan yang disimpan kemudian muncul mulai obrolan berikutnya. File berupa Markdown di folder home dsh (`storages/dsh-composer-plus/memory/`), tidak pernah di folder proyek. **Buka memori** di baris yang sama menampilkan semua catatan tersimpan, dikelompokkan per proyek (dan memori global), dengan saringan. Tulis dengan kata-kata Anda apa yang diubah (misalnya "saya beralih dari yarn ke pnpm"), lalu **Pratinjau perubahan**: model default dsh mengusulkan perubahan, dan hanya **Terapkan** yang menyimpannya. Di Tether: menu judul obrolan → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Tangkapan layar: Memori proyek"></a> |
|
|
76
76
|
| **Izinkan untuk obrolan ini** | <a id="feature-allowforchat"></a>Saat Tinjauan otomatis bertanya kepada Anda, kartu persetujuan mendapat tombol **Izinkan untuk obrolan ini**: mulai saat itu, alat yang sama di obrolan yang sama diizinkan, dengan argumen apa pun, sampai batas waktu berakhir (1 jam secara default; pilih di **Pengaturan → Composer Plus → Izinkan untuk obrolan ini**). Setelah itu agen bertanya lagi. Sebuah chip di header menampilkan daftar izin beserta waktu berakhirnya dan dapat mencabutnya. Izin tetap ada setelah mulai ulang. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Tangkapan layar: Izinkan untuk obrolan ini"></a> |
|
|
77
77
|
| **Status proyek** | <a id="feature-projectstatus"></a>Baris proyek di bilah samping menampilkan penanda spinner / menunggu / selesai yang sama seperti obrolannya. Jadi, proyek yang diciutkan tetap memberi tahu Anda bahwa ada obrolan di dalamnya yang sedang bekerja atau memerlukan Anda. Obrolan yang menunggu Anda ditampilkan lebih dulu, lalu obrolan selesai yang belum Anda buka (titik hijau, juga saat obrolan lain masih berjalan), lalu spinner. Arahkan penunjuk ke penanda itu untuk melihat detailnya. Di **Pohon Ruang Kerja**, baris folder induk juga menampilkan obrolan dari setiap proyek di dalamnya (misalnya setiap folder branch di `.worktrees/`), juga saat folder itu diciutkan. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Status proyek"></a> |
|
|
78
|
-
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>
|
|
78
|
+
| **Branch Git di baris obrolan** | <a id="feature-sessionbranch"></a>Dalam tampilan “Dalam satu daftar” di bilah samping, setiap baris obrolan menampilkan label abu-abu kecil berisi branch git tempat folder proyek obrolan berada pada giliran terakhir obrolan itu (misalnya `main` atau `feature/login`; HEAD yang terlepas tidak punya branch sehingga tidak menampilkan label). Dua obrolan dari satu proyek di branch yang berbeda tidak lagi terlihat sama, dan Anda langsung melihat saat akan melanjutkan obrolan di branch yang salah. Arahkan penunjuk ke label untuk melihat nama lengkapnya. Bagian Host membaca branch (`git branch --show-current`, hanya baca) saat giliran dimulai dan saat berakhir; obrolan tanpa giliran sejak Anda memasang fitur ini, atau folder yang bukan repositori git, tidak menampilkan label. Dalam “Ruang Kerja” dan “Pohon Ruang Kerja”, tidak ada baris obrolan yang menampilkan label, karena obrolan sudah berada di bawah baris proyeknya. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Tangkapan layar: Branch Git di baris obrolan"></a> |
|
|
79
79
|
| **Tandai semua sudah dibaca** | <a id="feature-markprojectread"></a>Di bilah samping, klik tombol **…** pada sebuah proyek → **Tandai semua sudah dibaca**. Semua obrolan di proyek itu langsung kehilangan titik hijau belum dibaca; proyek lain tetap memiliki titiknya. Item ini tampil abu-abu (**Tidak ada obrolan yang belum dibaca**) jika proyek itu tidak punya obrolan yang belum dibaca. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Tangkapan layar: Tandai semua sudah dibaca"></a> |
|
|
80
80
|
| **Proyek aktif di atas** | <a id="feature-activeprojectsfirst"></a>Saat sebuah obrolan mulai berjalan atau memerlukan Anda, proyeknya pindah ke bagian atas bilah samping dengan animasi baris bawaan dsh (gerakan yang sama seperti saat Anda menyeretnya ke sana). Proyek yang selesai tetap di tempatnya; seret ke mana saja seperti biasa. Perpindahan disimpan ke urutan proyek dsh, jadi menonaktifkan fitur ini mempertahankan urutan saat ini. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Tangkapan layar: Proyek aktif di atas"></a> |
|
|
81
81
|
| **Filter proyek terbaru** | <a id="feature-recentprojects"></a>Bilah samping → opsi tampilan (ikon slider) → **Aktif dalam 2 jam terakhir**. Selama opsi ini dipilih, bilah samping hanya menampilkan proyek yang memiliki obrolan aktif dalam 2 jam terakhir. Itu adalah obrolan yang diperbarui dalam waktu itu, obrolan yang sedang berjalan atau menunggu, obrolan yang terbuka, atau obrolan selesai yang belum Anda buka (titik hijau “selesai” dari dsh), juga setelah 2 jam. Proyek tanpa obrolan seperti itu disembunyikan, termasuk proyek baru dan kosong. Di **Pohon Ruang Kerja**, folder induk tetap terlihat selama ada proyek aktif di dalamnya, dan obrolan yang tidak aktif dalam 2 jam terakhir juga disembunyikan, sehingga hanya obrolan terbaru yang ditampilkan. Pilih opsi ini lagi untuk menampilkan semua proyek. Pilihan ini disimpan di perangkat ini. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Tangkapan layar: Filter proyek terbaru"></a> |
|
|
@@ -85,7 +85,7 @@ Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil
|
|
|
85
85
|
| **Buka obrolan yang menunggu saat tidak aktif** | <a id="feature-idleswitch"></a>Saat obrolan mengajukan pertanyaan, menunggu persetujuan atau tinjauan rencana (titik oranye), atau menyelesaikan giliran yang belum Anda baca (titik hijau), dan Anda tidak menggunakan dsh selama 30 detik, dsh membuka obrolan itu. Obrolan oranye dibuka sebelum obrolan hijau. Di setiap kelompok, obrolan yang paling lama menunggu dibuka lebih dulu; obrolan berikutnya dibuka setelah 30 detik lagi tanpa penggunaan. Tombol, klik, gerakan mouse, roda gulir, atau sentuhan memulai ulang hitungan 30 detik. Teks di kolom yang sedang fokus, teks yang dipilih, atau menu atau dialog yang terbuka juga menghentikan perpindahan. Selama obrolan yang menunggu ada di layar, tidak ada yang berubah. Jika Anda meninggalkan obrolan yang menunggu tanpa menjawab, obrolan itu dapat terbuka lagi setelah 30 detik berikutnya tanpa penggunaan. Saat obrolan hijau terbuka, titiknya hilang; obrolan hijau berikutnya baru terbuka setelah Anda menggunakan dsh lagi, lalu tidak menggunakannya selama 30 detik. Ini juga berlaku saat dsh berada di latar belakang, tetapi dsh tidak muncul ke depan. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Tangkapan layar: Buka obrolan yang menunggu saat tidak aktif"></a> |
|
|
86
86
|
| **Bahasa aplikasi** | <a id="feature-language"></a>Pengaturan → Composer Plus → **Bahasa aplikasi** mengganti seluruh antarmuka dsh ke Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt, atau हिन्दी (lihat di bawah). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Tangkapan layar: Bahasa aplikasi"></a> |
|
|
87
87
|
| **Koneksi seluler (iPhone)** | <a id="feature-mobileconnect"></a>Gunakan dsh dari iPhone Anda dengan aplikasi [Tether](tether/), di Wi-Fi yang sama atau melalui [Tailscale](https://tailscale.com). Aktifkan di **Pengaturan → Composer Plus** (nonaktif secara default karena membuka port jaringan di Mac ini). Lalu klik **Koneksi seluler** di kiri bawah bilah samping: pindai kode QR dengan Kamera iPhone (ketuk **Open in Tether**) atau dengan **Scan code** di Tether, ketuk **Connect**, lalu klik **Approve**. Instal Tether terlebih dahulu: tanpa aplikasi itu, Kamera tidak dapat membuka kode tersebut. Ponsel menampilkan obrolan Anda, mengirim pesan (dengan foto: **+** di kotak pesan → Camera, Photos, atau Paste image), menjawab persetujuan dan pertanyaan, serta mengganti model dan agen. Pasangkan Mac sebanyak yang Anda mau: nama Mac di kiri atas aplikasi berpindah di antara Mac tersebut. Panel **Koneksi seluler** menampilkan iPhone yang dipasangkan beserta koneksi terakhirnya: **Remove** langsung memutus salah satunya. “Tailscale only” menolak jaringan lokal (untuk Wi-Fi bersama), dan log akses menampilkan siapa yang mencoba terhubung. Di Tether, “Settings → Privacy” mengunci aplikasi dengan Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Tangkapan layar: Koneksi seluler (iPhone)"></a> |
|
|
88
|
-
| **Pembaruan otomatis** | <a id="feature-autoupdate"></a>Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. Mulai ulang dsh untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. Saat dsh pertama kali dimulai dengan versi baru, jendela **Yang baru di Composer Plus N** menampilkan catatan rilis versi itu satu kali (
|
|
88
|
+
| **Pembaruan otomatis** | <a id="feature-autoupdate"></a>Saat dsh dimulai, plugin memeriksa [rilis GitHub terbaru](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Jika rilis itu lebih baru dan sudah ada di npm, plugin memasang versi persis itu melalui pengelola plugin bawaan dsh (jalur yang sama dengan Pengaturan → Plugin) dan memberi tahu Anda. Mulai ulang dsh untuk memuatnya. **Pengaturan → Composer Plus → Pembaruan Composer Plus** menampilkan versi dan memiliki **Periksa pembaruan** / **Perbarui sekarang**. Saat dsh pertama kali dimulai dengan versi baru, jendela **Yang baru di Composer Plus N** menampilkan catatan rilis versi itu satu kali dalam bahasa **Bahasa aplikasi** (catatan ikut bersama versi baru, tanpa panggilan jaringan lain; bahasa tanpa catatan menampilkan catatan berbahasa Inggris); **Tutup** atau `Esc` menutupnya. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Tangkapan layar: Pembaruan otomatis"></a> |
|
|
89
89
|
| **Pencadangan** | <a id="feature-backup"></a>Pengaturan → Composer Plus → **Pencadangan** → **Cadangkan sekarang** menulis seluruh dsh home Anda (obrolan, pengaturan, plugin, MCP, skill) ke dalam satu arsip di `~/Desktop/dsh-backups`, beserta checksum. Rahasia disamarkan di dalam arsip: file kredensial, file kunci (`.pem`, `.key`), serta nilai token, secret, dan password di pengaturan yml hanya tetap ada di komputer ini, di `vault` folder tersebut. `cache/`, `dsh-runtimes/`, dan `node_modules` tidak masuk ke arsip (dsh membuatnya lagi). Setiap cadangan dalam daftar memiliki **Periksa** (membacanya sampai habis), **Untuk komputer lain** (folder untuk disalin ke komputer baru, beserta konsol penyelamat), dan **Hapus**. Arsip dsh-backup di folder yang sama juga tampil dan dapat dipakai. Untuk memulihkan, keluar dari dsh dan gunakan konsol penyelamat. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Tangkapan layar: Pencadangan"></a> |
|
|
90
90
|
| **Pencadangan otomatis** | <a id="feature-autobackup"></a>Aktifkan **Pencadangan otomatis** (nonaktif secara default: setiap salinan kira-kira sebesar dsh home Anda tanpa cache-nya). Pilih seberapa sering (**Setiap**: 6 jam sampai 7 hari, default 24 jam) dan berapa banyak cadangan yang disimpan (**Simpan**: 3 sampai 14, default 7). Waktu berikutnya tampil di bawah sakelar; pencadangan yang gagal juga tampil di sana dan dicoba lagi 30 menit kemudian. Saat dsh atau Composer Plus dimulai dengan versi baru, snapshot dibuat segera setelah dimulai, sebelum versi baru lama memakai data Anda (dua yang terbaru disimpan, ditandai **Sebelum peningkatan**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Tangkapan layar: Pencadangan otomatis"></a> |
|
|
91
91
|
| **Pemeriksaan log sesi** | <a id="feature-sessiondoctor"></a>**Periksa log sesi** membaca log setiap obrolan dan menampilkan log yang tidak dapat dibuka dsh (frame rusak, catatan terpotong, nomor urut salah). Bagian akhir yang tidak lengkap tidak ditampilkan: dsh memperbaikinya sendiri. **Perbaiki dari cadangan** mengembalikan salinan dari cadangan terbaru yang memiliki salinan sehat, dan menyimpan file yang rusak di sebelahnya (`.corrupt-<waktu>`). Pesan yang ditulis setelah cadangan itu tidak ada di salinan. Obrolan yang terbuka di dsh ini tidak diperbaiki di sini: keluar dari dsh dan perbaiki obrolan itu di konsol penyelamat. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Tangkapan layar: Pemeriksaan log sesi"></a> |
|
|
@@ -169,7 +169,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
169
169
|
- **Pemeriksaan tujuan:** hanya berjalan saat agen menandai `/goal` sebagai selesai dalam putaran otomatis (atau saat Anda mengklik **Jalankan sekarang**). Bagian Host menjalankan perintah pengujian di folder obrolan dengan mode sandbox obrolan itu (seperti alat `bash` milik dsh sendiri: kebijakan akses file yang sama; jika sandbox itu tidak dapat dimulai, pengujian tidak berjalan dan pemeriksaan gagal). Untuk menemukan perintahnya, bagian ini hanya membaca `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml`, dan `pytest.ini`, sebagai file biasa di dalam folder (tanpa symlink ke luar folder, tanpa FIFO). Lalu bagian ini mengirim tujuan, obrolan sejak tujuan dimulai (pesan Anda, balasan agen, panggilan alat yang dipotong menjadi 1.000 karakter, dan 2.000 karakter terakhir dari setiap hasil alat; tanpa penalaran, tanpa langkah yang ditarik oleh putar balik; paling banyak sekitar 60.000 karakter, bagian terbaru), `git status --short`, dan bagian akhir keluaran pengujian ke model yang dipilih di **Pemeriksaan tujuan** (secara default model obrolan itu sendiri), sebagai satu permintaan tanpa alat. Keluaran alat dapat berisi apa yang dibaca agen, jadi permintaan ini dapat memuat bagian dari file Anda, sama seperti obrolan itu sendiri. Tidak ada yang ditulis ke obrolan atau proyek. Perintah pengujian Anda, batas, hasil terakhir (dengan bagian akhir keluarannya), dan pilihan model disimpan di `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (file hanya untuk pemilik, 500 obrolan terbaru).
|
|
170
170
|
- **Lanjutkan di obrolan baru:** tidak ada yang berjalan sampai Anda mengkliknya. Lalu bagian Host mengirim obrolan (seperti yang dibaca Pemeriksaan tujuan: tanpa penalaran, tanpa langkah yang ditarik oleh putar balik) ke model obrolan itu sendiri dan menampilkan catatan serah terima; hanya **Mulai obrolan baru** yang membuat obrolan baru. Tidak ada yang ditulis ke proyek.
|
|
171
171
|
- **Rincian konteks:** bagian Host hanya membaca log obrolan; tanpa panggilan model, tanpa file proyek.
|
|
172
|
-
- **Papan tugas:** papan
|
|
172
|
+
- **Papan tugas:** papan menampilkan obrolan dsh sendiri dari daftar dsh sendiri di jendela ini; papan tidak menambahkan data obrolan miliknya sendiri. Saat Anda memulai tugas, bagian Host membuat obrolan baru di proyek yang Anda pilih dan mengirim prompt Anda ke obrolan itu sebagai pesan pertamanya, seolah-olah Anda mengetiknya di sana, jadi persetujuan, sandbox, dan model obrolan berlaku seperti biasa. Lalu bagian Host mengirim prompt itu (4.000 karakter pertamanya, tidak ada yang lain) ke model obrolan tersebut dalam satu permintaan lagi, tanpa alat, untuk mendapatkan hingga 3 label. Prompt, label, dan waktu mulai setiap tugas disimpan di `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (file hanya untuk pemilik, 2.000 yang terbaru); sakelarnya ada di `board-switch.json` di sebelahnya. Tidak ada yang ditulis ke folder proyek. **Jawab** mengirim jawaban Anda ke permintaan dsh sendiri yang tertunda, sama seperti kartu milik obrolan itu sendiri. Daftar tugas lama dari versi sebelumnya (`board.json`) tetap ada di disk seperti semula dan tidak dibaca.
|
|
173
173
|
- **File yang dilindungi:** daftar dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca path dari setiap panggilan alat file (dan path aslinya), tidak pernah membaca file itu.
|
|
174
174
|
- **Perintah yang diblokir:** aturan dan sakelarnya ada di `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (file hanya untuk pemilik). Pemeriksaan hanya membaca teks perintah dari setiap panggilan `bash` dan `pwsh`; pemeriksaan tidak menjalankan apa pun dan tidak mengirim apa pun.
|
|
175
175
|
- **Memori proyek:** nonaktif sampai Anda mengaktifkannya. Saat aktif, setelah setiap giliran selesai di obrolan tingkat atas, bagian Host mengirim pesan baru obrolan itu sejak tinjauan terakhir (pesan Anda dan balasan teks agen; tanpa keluaran alat, penalaran, konteks tersembunyi, atau pesan yang ditarik oleh putar balik; salinan obrolan induk pada obrolan cabang tidak ikut; paling banyak sekitar 16.000 karakter) dan catatan yang tersimpan ke model obrolan itu sendiri, sebagai satu permintaan tanpa alat. Catatan berupa file Markdown di `$DSH_HOME/storages/dsh-composer-plus/memory/` (file khusus pemilik): `projects/<id>/` untuk setiap folder proyek (`<id>` adalah hash dari path asli folder; `project.json` mencatat foldernya), `global/`, `journal.jsonl` (setiap perubahan dengan baris sebelum dan sesudahnya), dan `reviewed.json` (sampai mana setiap obrolan dibaca). Tidak ada yang ditulis ke folder proyek. Catatan yang tampak seperti kunci, token, kata sandi, atau nomor identitas ditolak. Catatan sebuah proyek masuk ke prompt sistem setiap obrolan baru di folder itu, sehingga ikut ke model pada setiap permintaan obrolan itu. Sakelarnya ada di `memory.json` di tempat yang sama. **Buka memori** tidak mengirim apa pun sampai Anda menekan **Pratinjau perubahan**; lalu ia mengirim catatan yang ditampilkan dan teks Anda ke model default dsh, sebagai satu permintaan tanpa alat. Perubahan hanya ditulis saat **Terapkan**, dengan `editor` di jurnal. Tether membaca dan mengubah catatan melalui rute yang sama.
|
|
@@ -191,10 +191,10 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
191
191
|
- **Obrolan tidak berlanjut setelah mulai ulang:** Lanjutkan setelah mulai ulang nonaktif saat dsh ditutup, Anda sendiri yang menghentikan giliran itu, giliran sudah berakhir (selesai atau gagal), obrolan diarsipkan, atau lebih dari 20 obrolan sedang berjalan (20 yang terbaru berlanjut).
|
|
192
192
|
- **Antrean kosong setelah mulai ulang:** dsh sendiri mengosongkan antrean saat ditutup. Lanjutkan setelah mulai ulang hanya mengembalikannya di obrolan yang dilanjutkan; di obrolan lain, kirim lagi pesannya. Pesan yang Anda hapus tepat sebelum dsh ditutup bisa kembali: hapus lagi.
|
|
193
193
|
- **Buka isu GitHub menampilkan "gh could not open the issue":** pesan itu adalah baris pertama dari `gh` sendiri. Jalankan `gh auth status` di terminal dan login dengan `gh auth login`; folder obrolan harus memiliki remote GitHub (`git remote -v`). "not installed or not on the PATH of dsh" berarti dsh tidak menemukan `gh`: pasang alat itu, atau mulai dsh dari terminal tempat `gh` berfungsi.
|
|
194
|
-
- **Tidak ada label branch di baris obrolan:** obrolan itu belum memiliki giliran sejak Anda memasang versi ini, foldernya bukan repositori git, atau **Branch Git di baris obrolan** nonaktif. Setelah pembaruan, mulai ulang dsh (bagian Host mencatat branch).
|
|
194
|
+
- **Tidak ada label branch di baris obrolan:** bilah samping tidak dalam tampilan “Dalam satu daftar” (dalam “Ruang Kerja” dan “Pohon Ruang Kerja”, tidak ada baris obrolan yang menampilkan label), obrolan itu belum memiliki giliran sejak Anda memasang versi ini, foldernya bukan repositori git, atau **Branch Git di baris obrolan** nonaktif. Setelah pembaruan, mulai ulang dsh (bagian Host mencatat branch).
|
|
195
195
|
- **Pemeriksaan tujuan menyebut pengujian keluar dengan kode 127 atau "not found":** dsh yang dimulai dari Finder atau Dock dapat memiliki PATH yang lebih pendek daripada terminal Anda, sehingga tidak menemukan `npm`, `pnpm`, atau `cargo`. Mulai dsh dari terminal, atau atur perintah pengujian Anda sendiri dengan jalur lengkap di **Pemeriksaan tujuan** → **Edit**. **Jalankan sekarang** langsung menampilkan hasilnya.
|
|
196
196
|
- **Tujuan tidak ditutup dan agen terus bekerja:** **Pemeriksaan tujuan** menemukan pengujian yang gagal atau pekerjaan yang belum selesai; baris di bawah tujuan menampilkan alasannya (arahkan penunjuk ke hasil untuk melihat detailnya). Perbaiki penyebabnya atau perintah pengujiannya, atau selesaikan tujuan sendiri dengan `/goal` atau bilah tujuan (penyelesaian itu tidak diperiksa).
|
|
197
|
-
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.
|
|
197
|
+
- **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.19.0`), lihat catatan pemasangan di atas.
|
|
198
198
|
- **Cadangkan sekarang menyatakan "Tindakan pencadangan lain sedang berjalan":** ada tindakan yang berjalan di jendela dsh lain atau di konsol penyelamat (keduanya berbagi file kunci, `.composer-plus.lock`, di folder cadangan). Tunggu sampai tindakan itu selesai. Jika tidak ada tindakan yang berjalan, kunci milik proses yang sudah ditutup diambil alih pada klik berikutnya.
|
|
199
199
|
- **Konsol penyelamat menyatakan "dsh is running":** keluar dari dsh terlebih dahulu. Jika dsh memang sudah tertutup, file yang disebut dalam pesan itu tersisa dari crash: hapus file itu dan coba lagi.
|
|
200
200
|
- **Setelah pemulihan, dsh tidak mau dimulai atau ada plugin yang hilang:** paket plugin sebuah profil harus dipasang lagi. Konsol penyelamat menawarkannya setelah pemulihan; atau jalankan `pnpm install` di setiap folder di bawah `$DSH_HOME/profiles/` yang dicantumkannya. Rahasia yang tidak ada di vault (komputer lain) harus dimasukkan lagi: konsol mencantumkannya.
|
|
@@ -214,6 +214,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
214
214
|
- **Hapus obrolan** memerlukan fitur arsip dsh (dsh 0.2.0 dan yang lebih baru). Obrolan (atau salah satu obrolan subagennya) yang tidak berhenti dalam 15 detik, atau yang dipegang oleh dsh lain, tetap diarsipkan dan tidak ada yang dipindahkan. Di sistem selain macOS, folder sampah harus berada di disk yang sama dengan riwayat obrolan. Obrolan terbuka yang Anda hapus tetap ada di memori dsh, dalam keadaan diarsipkan dan tersembunyi, sampai dsh dimulai ulang. Kosongkan Tong Sampah sendiri; dsh tidak melakukannya.
|
|
215
215
|
- Antrean dsh tidak memiliki tindakan `move`, jadi bagian Host plugin memindahkan pesan antrean itu sendiri di dalam antrean dsh (satu perubahan, pesan yang sama). Pesan dengan gambar atau file juga dapat dipindahkan. Hanya pesan Anda sendiri yang dapat dipindahkan: putaran tujuan atau balasan pertanyaan di antrean tetap di tempatnya. Jika sebuah pesan mulai dikirim saat Anda menyeret, tidak ada yang dipindahkan dan muncul pemberitahuan tentang hal itu.
|
|
216
216
|
- dsh 0.2.1 langsung memuat pembaruan jika versi baru tidak mengubah pengaturan dsh apa pun; dalam kasus lain, dan pada dsh 0.2.0, mulai ulang dsh untuk memuatnya. Plugin tidak pernah memulai ulang dsh untuk Anda. Profil web/CLI tanpa pengelola plugin dsh hanya melaporkan adanya versi baru.
|
|
217
|
+
- **Yang baru di Composer Plus N** menampilkan catatan dalam bahasa **Bahasa aplikasi**. Bahasa antarmuka dengan wilayah lain mendapat catatan bahasa dasarnya (`en-GB` mendapat catatan bahasa Inggris, `zh-TW` catatan bahasa Tionghoa dari `zh`). Bahasa tanpa catatan (bahasa yang ditambahkan paket bahasa lain, atau `pt-PT`, yang bukan `pt-BR`) menampilkan catatan bahasa Inggris. Catatan ikut bersama versi baru. Jika salinan yang berjalan tidak memiliki berkas catatan yang dapat dibaca (`release-notes.json`), jendela menampilkan catatan bahasa Inggris dari GitHub.
|
|
217
218
|
- **Izinkan untuk obrolan ini** menghitung batas waktu sejak izin diberikan. Batas waktu baru langsung berlaku untuk izin yang sedang berjalan, jadi batas yang lebih pendek dapat langsung mengakhirinya. Izin dari versi 1.12 dan sebelumnya tidak memiliki waktu: setelah pembaruan, agen bertanya sekali lagi untuk alat-alat itu.
|
|
218
219
|
- **Pertahankan fokus composer** mengembalikan fokus hanya setelah perintah `/` atau skill. Saat dsh memproses perintah, kotak pesan tetap hanya-baca selama beberapa milidetik, jadi tombol yang ditekan dalam waktu itu hilang. Jika menu `/` dsh masih terbuka, `Enter` memilih baris yang disorot dan tidak mengirim.
|
|
219
220
|
- **Sesuaikan kartu pertanyaan dengan jendela** hanya mengubah kartu pertanyaan dsh, bukan kartu tinjauan rencana. Fitur ini menemukan kartu melalui markup dsh (`data-question-key`, `data-question-scroll`); jika pembaruan dsh mengubah markup itu, kartu tampil seperti yang digambar dsh. Tinggi kartu mengikuti jendela, bukan chat: di chat dalam panel samping yang sempit, kartu yang tinggi masih dapat melewati bagian atas chat.
|
|
@@ -227,7 +228,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
227
228
|
- **Obrolan ini** hanya menghitung file yang ditulis oleh alat file dsh (`write`, `edit`, `str_replace_editor`). File yang diubah oleh perintah (`bash`) tidak ada di tampilan ini; file itu tampil di **Belum Di-commit**. Tanpa snapshot Putar balik giliran untuk obrolan (Putar balik giliran nonaktif, dsh-rewind-plugin terpasang, atau obrolan lebih lama dari plugin), tampilan ini membandingkan dengan commit terakhir dan memberi tahu hal itu. Putar balik giliran menyimpan 50 snapshot terbaru dari sebuah obrolan: pada obrolan yang lebih panjang, tampilan membandingkan dengan snapshot tertua yang disimpan, menyebutkan dari pesan mana, dan tidak menghitung perubahan yang lebih awal. **Sembunyikan perubahan spasi** sama dengan `git diff -w`: baris yang hanya berubah pada spasi di dalamnya juga disembunyikan.
|
|
228
229
|
- **Buka isu GitHub** memerlukan GitHub CLI (`gh`) di PATH dsh dan remote GitHub di folder obrolan. Fitur ini berjalan paling lama 60 detik; jika `gh` butuh waktu lebih lama, isu bisa sudah ada di GitHub tanpa tautannya di daftar (sebelum mengklik lagi, periksa GitHub: daftar hanya membaca tautan dari proses yang selesai, jadi klik baru bisa membuka isu kedua). Folder dengan lebih dari satu remote GitHub memakai default milik `gh` sendiri (`gh repo set-default`).
|
|
229
230
|
- **Obrolan yang mengubah file ini** hanya mengenal alat file dsh (`write`, `edit`, `str_replace_editor`), sama seperti **Obrolan ini**: perubahan yang dibuat oleh perintah (`bash`) tidak tercantum. Fitur ini membaca 300 obrolan terbaru dari repositori (menurut waktu pembuatannya) dan memberi tahu jika ada lebih banyak; fitur ini menampilkan paling banyak 100 baris. File yang diganti namanya tercantum dengan nama yang ditulis alat. Obrolan yang foldernya berada di luar repositori (juga melalui jalur lain ke file yang sama) tidak dihitung. Pembukaan pertama setelah dsh dimulai membaca semua log obrolan di repositori (sekitar 4 detik untuk 275 obrolan); pembukaan berikutnya hanya membaca obrolan yang berubah sejak itu.
|
|
230
|
-
- **Branch Git di baris obrolan** menampilkan branch folder obrolan saat giliran terakhirnya dimulai atau berakhir, bukan branch saat ini: pergantian branch di luar giliran baru tampil setelah giliran berikutnya. Obrolan dari sebelum versi ini tidak menampilkan label sampai giliran berikutnya. Label ini berada di markup baris obrolan dsh (dsh tidak punya slot di sana); jika pembaruan dsh mengubah markup itu, label tidak tampil.
|
|
231
|
+
- **Branch Git di baris obrolan** menampilkan branch folder obrolan saat giliran terakhirnya dimulai atau berakhir, bukan branch saat ini: pergantian branch di luar giliran baru tampil setelah giliran berikutnya. Obrolan dari sebelum versi ini tidak menampilkan label sampai giliran berikutnya. Label ini berada di markup baris obrolan dsh (dsh tidak punya slot di sana); jika pembaruan dsh mengubah markup itu, label tidak tampil. Label hanya tampil dalam “Dalam satu daftar”.
|
|
231
232
|
- **Branch per obrolan** dalam mode rencana: dsh mengirim `/plan <pesan>` sebagai perintah, bukan sebagai pesan, jadi Composer Plus mengambil alih pengiriman perintah itu di kotak pesan dsh (bukan API publik). Jika pembaruan dsh mengubahnya, `/plan <pesan>` dengan **Branch baru** dipilih berjalan di Obrolan baru yang terbuka sebagai perintah dsh sendiri. Jika Host tidak dapat menyalakan mode rencana di obrolan baru, folder branch tetap ada dan pesan tidak dikirim, jadi obrolan baru tidak mengubah file dalam mode default.
|
|
232
233
|
- **Branch per obrolan**: saat folder branch sebuah obrolan (`<project>/.worktrees/<name>`) dihapus, misalnya saat agen obrolan itu sendiri menghapus worktree dan branch-nya, langkah berikutnya dari obrolan memindahkan obrolan keluar dari folder itu. Proyek folder branch hilang dari bilah samping, dan obrolan tampil di bawah Tanpa grup dan tetap terbuka. Di dsh 0.2.1 dan yang lebih baru, obrolan berlanjut di folder utama proyek, dan model mendapat catatan tentang folder baru. Di dsh 0.2.0, obrolan tetap memakai folder yang dihapus: perintah di sana gagal sampai Anda memulai obrolan baru. Proyek dari branch yang dihapus dan tidak dipakai obrolan mana pun juga hilang dari bilah samping: Composer Plus memeriksa folder branch saat mulai dan setiap 30 detik, juga tanpa filter bilah samping. Selama obrolan dipindahkan, **Branch baru** di repositori yang sama menjawab "coba lagi". Saat sakelar mati, galat dsh sendiri muncul lagi ("working-directory: directory does not exist").
|
|
233
234
|
- **Branch di pohon ruang kerja** menulis ke git tanpa klik: saat memindahkan obrolan, fitur ini mengembalikan folder proyek ke branch sebelumnya (`git switch`) dan menambahkan worktree (`git worktree add`). Fitur ini tidak pernah menghapus branch, worktree, atau file. dsh tidak bisa mengganti folder sebuah obrolan, jadi obrolan yang dipindahkan adalah salinan (fork milik dsh sendiri, dengan id baru) dan obrolan lama diarsipkan. Salinan melanjutkan tugas yang berhenti; panggilan alat yang sedang berjalan saat branch muncul berakhir dengan penolakan, dan agen menjalankannya lagi di folder baru. Tujuan (goal) obrolan lama tidak ikut pindah. Hanya obrolan yang foldernya adalah folder utama repositori yang dipindahkan, dan hanya untuk branch yang dibuatnya dan dipindahinya pada giliran itu (`git switch -c`, `git checkout -b`): branch yang dibuat hanya dengan `git branch`, folder dengan perubahan yang belum di-commit, worktree tertaut, atau subfolder tidak memindahkan apa pun. Di pohon hanya tampil worktree yang langsung berada di `<project>/.worktrees/` dan punya branch; worktree terlepas (detached) atau di tempat lain tidak tampil. Salinan terbuka sendiri hanya jika obrolannya adalah obrolan yang sedang terbuka (plugin membacanya dari baris bilah samping dsh); jika tidak, salinan ada di proyek branch.
|
|
@@ -248,7 +249,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
248
249
|
- **Lanjutkan di obrolan baru** mengirim obrolan (pesan, panggilan alat, dan bagian akhir setiap hasil alat, paling banyak sekitar 60.000 karakter, bagian terbaru) ke model obrolan itu sendiri. Catatan serah terima bisa melewatkan sebuah keputusan atau file: baca catatan itu sebelum Anda memulai. Obrolan baru hanya mengetahui catatan dan obrolan yang ditautkan (dsh melampirkan obrolan lama sebagai konteks hanya-baca); konteks modelnya dimulai kecil, dan obrolan lama tetap seperti apa adanya. Hanya satu catatan atau satu mulai per obrolan pada satu waktu.
|
|
249
250
|
- **Rincian konteks** menampilkan perkiraan dengan aturan milik dsh sendiri (sekitar 4 karakter per token), aturan yang sama dengan cincin konteks dsh; hitungan model itu sendiri bisa berbeda. Definisi alat adalah definisi dari permintaan terbaru. Fitur ini menampilkan konteks seperti yang ada di log obrolan; giliran yang sedang berjalan muncul setelah langkah berikutnya.
|
|
250
251
|
- **Langkah terencana** menghemat token hanya ketika model benar-benar merencanakan: selama aktif, setiap permintaan membawa alat `plan_next_steps` dan instruksi singkat (sekitar 500 token), juga di obrolan tempat model tidak pernah merencanakan. Sebuah syarat hanya membuktikan apa yang tertulis (misalnya: kode keluar build adalah 0), bukan bahwa pekerjaannya benar. `ok` membaca tanda hasil milik dsh sendiri (`[exit code: N]`, batas waktu, penolakan sandbox); perintah yang gagal tanpa kode keluar bukan nol dianggap lolos. Langkah berjalan satu per satu; dua langkah yang siap bersamaan kembali ke model. Pesan langkah disimpan sebagai pesan asisten dari model obrolan (dsh tidak punya tanda untuk pesan yang ditulis plugin), jadi teksnya menyebutkan bahwa Composer Plus yang menjalankannya. Tidak ada di Tether.
|
|
251
|
-
- **Papan tugas**
|
|
252
|
+
- **Papan tugas** menampilkan obrolan yang didaftar dsh di jendela ini: obrolan di luar proyek hanya tampil di **Semua proyek**, dan folder branch per obrolan (`<project>/.worktrees/<name>`) dihitung sebagai proyeknya. Kolom kartu adalah status langsung obrolannya, jadi kartu tidak bisa diseret: obrolan pindah ke **Selesai** saat gilirannya berakhir, juga setelah error atau dihentikan, dan kembali ke **Sedang dikerjakan** saat berjalan lagi. Titik hijau adalah titik selesai milik dsh sendiri, yang hanya disimpan dsh di jendela ini: setelah halaman dimuat ulang, obrolan yang selesai tampil tanpa titik itu. **Selesai** menampilkan 50 obrolan terbaru (**Tampilkan N yang lebih lama** menampilkan sisanya). Label berasal dari satu panggilan model per tugas yang dimulai: label bisa salah, dan obrolan yang tidak Anda mulai di papan tidak punya label. Judulnya adalah judul obrolan milik dsh sendiri (layanan judul dsh, dengan model obrolan); sampai judul itu ada, kartu menampilkan baris pertama prompt. Prompt yang diawali perintah `/` yang dikenal dsh (`/plan`, `/goal`) dijalankan sebagai perintah itu. **Jawab** hanya menjawab permintaan terbaru obrolan: jika permintaan itu sudah dijawab di tempat lain (jendela lain, Tether, Tinjauan otomatis) atau obrolan menanyakan hal baru, panel memberi tahu hal itu dan tidak mengirim apa pun. Versi sebelumnya punya daftar tugas dengan komentar dan alat agen; semuanya sudah tidak ada, dan `board.json` lama tidak ditampilkan. Ide dan tampilannya berasal dari [Kanzo](https://github.com/emanuele-em/kanzo) karya emanuele-em (AGPL-3.0); Composer Plus tidak memakai kodenya.
|
|
252
253
|
- **Dahulukan pesan setelah Hentikan** hanya bekerja setelah Anda menghentikan obrolan (atau setelah giliran yang gagal, atau saat Anda membuka obrolan yang masih punya antrean): pesan yang Anda kirim saat sebuah giliran berjalan tetap menunggu di akhir antrean. Pesan itu hanya mendahului pesan antrean milik Anda sendiri: jika ada putaran tujuan atau balasan pertanyaan yang menunggu di antrean, urutan dsh tetap. Fitur ini membaca bagian dsh yang bukan API publik (apakah giliran yang dihentikan masih sedang berakhir); jika pembaruan dsh mengganti namanya, pesan baru dipindah ke depan setelah giliran itu selesai. Obrolan subagen tetap memakai urutan dsh.
|
|
253
254
|
- **Memori proyek** milik folder pertama obrolan (folder proyek dsh): obrolan yang mengganti foldernya dengan `cd` tetap memakai memori proyek pertamanya, dan folder yang sama yang dibuka lewat path lain ke file yang sama memakai memori yang sama. Obrolan membekukan bagian memorinya saat dimulai, jadi catatan yang disimpan kemudian muncul mulai obrolan berikutnya (`memory_recall` langsung menemukannya). Tinjauan hanya menyimpan apa yang diputuskan model: tinjauan bisa melewatkan fakta atau menyimpan yang salah; periksa di **Buka memori** dan ubah di sana, atau edit file-nya secara manual saat dsh tertutup. **Buka memori** mengirim catatan proyek yang dipilih dan catatan global (semua proyek saat Anda memilih Semua catatan; paling banyak sekitar 60.000 karakter, sisanya hanya dihitung dan tidak dapat diubah dalam permintaan itu) serta teks Anda ke model default dsh, bukan ke model obrolan. Pratinjau disimpan di Mac selama 30 menit dan sampai dsh dimulai ulang; jika tinjauan atau agen mengubah catatan di antaranya, **Terapkan** menolak dan Anda meminta pratinjau lagi. **Terapkan** menyimpan semua perubahan dari satu pratinjau atau tidak sama sekali: jika satu perubahan tidak bisa disimpan (misalnya MEMORY.md sudah penuh), catatan tetap seperti semula dan alasannya ditampilkan. Setiap giliran selesai yang berisi pesan dari Anda memakan satu panggilan model; panggilan yang gagal membaca pesan yang sama lagi setelah giliran berikutnya. Obrolan subagen tidak ditinjau. Ide dan format file berasal dari [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus tidak memakai kodenya dan tidak pernah membaca atau menulis memori milik DS Bot sendiri.
|
|
254
255
|
- **Pencadangan** memakai satu folder tetap, `~/Desktop/dsh-backups` (default dsh-backup, sehingga arsipnya tetap dapat dipakai); tidak ada pengaturan untuk folder lain. Ukuran arsip kurang lebih sama dengan dsh home tanpa `cache/` dan `dsh-runtimes/` (diukur: file sebesar 1,6 GB menghasilkan arsip 830 MB dalam sekitar 30 detik di Apple Silicon; dsh tetap responsif). File yang berubah saat dibaca disimpan seperti saat pencadangan membukanya, sehingga log obrolan yang terbuka dapat berakhir dengan catatan yang terpotong, yang diperbaiki dsh pada penulisan berikutnya. Penyamaran menemukan rahasia di file yml dari nama kuncinya dalam satu baris (`token:`, `apiKey:`, …); rahasia dalam flow map (`{token: x}`), dalam daftar di bawah kunci seperti itu, dalam file JSON (misalnya `apiKey` milik server MCP di file `.json`), atau dengan nama lain tetap ada di arsip. Arsip per jenis milik dsh-backup (`dsh-t-…`) tidak dicantumkan. **Untuk komputer lain** menyalin arsip (klon di APFS: tanpa ruang tambahan); vault tidak ikut. **Cadangkan sekarang** tidak menghapus cadangan apa pun. Pencadangan otomatis menyimpan cadangan terbaru yang dibuat Composer Plus (pengaturan **Simpan** di **Pencadangan otomatis**) dan menghapus cadangannya yang lebih lama; snapshot sebelum peningkatan dihitung terpisah (2 yang terbaru tetap ada). Arsip dsh-backup tidak pernah dihapus: hapus arsip itu dengan **Hapus**. Selama dsh-backup masih terpasang, dsh-backup menghitung arsip Composer Plus dalam jumlah simpanannya sendiri dan dapat menghapusnya.
|
|
@@ -285,7 +286,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
|
|
|
285
286
|
|
|
286
287
|
**Bisakah agen mengingat preferensi saya antar-obrolan, seperti memori DS Bot?** Bisa, dengan **Memori proyek** (nonaktif secara default): aktifkan di **Pengaturan → Composer Plus**. Setelah setiap giliran, preferensi dan keputusan Anda yang bertahan lama disimpan sebagai catatan singkat untuk proyek obrolan itu, dan setiap obrolan baru di proyek itu membacanya. Minta agen mengingat sesuatu, dan agen langsung menyimpannya. Untuk melihat atau mengubah catatan, klik **Buka memori** di baris yang sama dan tulis apa yang diubah.
|
|
287
288
|
|
|
288
|
-
**Bisakah saya
|
|
289
|
+
**Bisakah saya melihat semua obrolan saya sebagai papan kanban dan memulai obrolan baru dari sana?** Bisa, dengan **Papan tugas** (aktif secara default): buka di bilah samping kiri. Setiap obrolan adalah kartu di **Sedang dikerjakan**, **Ditinjau** (obrolan menunggu Anda), atau **Selesai**. **Tugas baru** hanya memerlukan prompt dan memulai obrolan baru dengan prompt itu; klik **Jawab** di kartu oranye untuk menjawabnya tanpa membuka obrolan.
|
|
289
290
|
|
|
290
291
|
**Bisakah dsh mencadangkan obrolan dan pengaturan saya, seperti dsh-backup?** Bisa: **Pengaturan → Composer Plus → Pencadangan → Cadangkan sekarang**. Fitur ini menulis format arsip yang sama ke folder yang sama (`~/Desktop/dsh-backups`), jadi arsip dsh-backup juga tampil dan dapat dipulihkan, dan Anda dapat menghapus dsh-backup. Aktifkan **Pencadangan otomatis** untuk pencadangan terjadwal.
|
|
291
292
|
|
|
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
407
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
408
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
409
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
410
|
-
# Task board:
|
|
411
|
+
# Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
411
412
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
412
413
|
```
|
|
413
414
|
|