dsh-composer-plus 1.17.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 +24 -7
- package/README.es.md +24 -7
- package/README.fr.md +24 -7
- package/README.hi.md +24 -7
- package/README.id.md +24 -7
- package/README.ja.md +24 -7
- package/README.ko.md +24 -7
- package/README.md +24 -7
- package/README.pt-BR.md +24 -7
- package/README.ru.md +24 -7
- package/README.tr.md +24 -7
- package/README.vi.md +24 -7
- package/README.zh.md +24 -7
- package/assets/features/blockedCommands.webp +0 -0
- package/assets/features/plannedSteps.webp +0 -0
- package/assets/features/sessionBranch.webp +0 -0
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +715 -73
- package/index.js +699 -3
- package/package.json +3 -2
- package/release-notes.json +18 -0
- package/tether/gateway/server.mjs +1 -0
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
|
|
|
@@ -68,11 +68,14 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
68
68
|
| **लक्ष्य जांच** | <a id="feature-goalcheck"></a>`/goal` से एक लक्ष्य शुरू करें। जब एजेंट किसी अपने-आप चलने वाले राउंड में लक्ष्य को पूरा मार्क करता है, तो लक्ष्य दो जांचों के बाद ही बंद होता है। पहले, प्रोजेक्ट की टेस्ट कमांड चैट के फ़ोल्डर में, चैट के सैंडबॉक्स मोड में चलती है। कमांड आपकी अपनी होती है या वह जो `package.json`, `Makefile`, `Cargo.toml`, `go.mod` या pytest में मिली। अगर एजेंट का अपना सबसे नया कदम इसी टेस्ट का सफल रन था, तो यह दोबारा नहीं चलती। फिर एक स्वतंत्र मॉडल कॉल, बिना टूल के, लक्ष्य, यह चैट, `git status` और टेस्ट का नतीजा पढ़ती है। मॉडल सबूतों की तालिका के साथ जवाब देता है: लक्ष्य का हर हिस्सा सत्यापित, गलत या अनसुलझा होता है, उसके सबूत और सुधार के साथ; लक्ष्य तभी बंद होता है जब हर हिस्सा सत्यापित हो। अगर कोई जांच विफल होती है, तो लक्ष्य सक्रिय रहता है, एजेंट हर खुला हिस्सा उसके सबूत और सुधार के साथ पढ़ता है, फिर अगला राउंड चलता है। लक्ष्य बार के नीचे एक पंक्ति (**लक्ष्य जांच**) टेस्ट, पिछला नतीजा और कितने हिस्से सत्यापित हुए, यह दिखाती है (तालिका देखने के लिए उस पर पॉइंटर ले जाएं)। **संपादित करें** से आप अपनी टेस्ट कमांड और समय या टोकन की सीमा तय करते हैं; सीमा पार होने पर लक्ष्य अवरुद्ध हो जाता है। टोकन सीमा में चैट के सबएजेंट भी गिने जाते हैं। **अभी चलाएं** लक्ष्य को बंद किए बिना जांच चलाता है। सेटिंग में इसका अपना **मॉडल** मेन्यू है (डिफ़ॉल्ट: **चैट के मॉडल जैसा**)। जब आप खुद लक्ष्य पूरा करते हैं, तो कुछ भी नहीं जांचा जाता। | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="स्क्रीनशॉट: लक्ष्य जांच"></a> |
|
|
69
69
|
| **नई चैट में जारी रखें** | <a id="feature-handoffchat"></a>साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **नई चैट में जारी रखें…**। चैट के अपने मॉडल को एक कॉल, चैट में जो दिखता है उससे एक हैंडऑफ़ नोट लिखती है: काम, आउटपुट, पूरा हुआ, फ़ैसले, खुले मुद्दे और अगला कदम (टूल कॉल और उनके नतीजे सबूत हैं; जिन कदमों को आपने रोलबैक किया, वे शामिल नहीं होते)। नोट एक डायलॉग में खुलता है: उसे पढ़ें और संपादित करें। **फिर से लिखें** एक नया नोट लिखता है। **नई चैट शुरू करें** (या `Cmd/Ctrl+Enter`) उसी प्रोजेक्ट में एक नई चैट खोलता है, जिसका पहला संदेश नोट और पुरानी चैट का लिंक होता है; पुरानी चैट जैसी है वैसी ही रहती है। जब कोई लंबी चैट भर जाए या धीमी हो जाए, या कल जारी रखना हो, तब इसका इस्तेमाल करें। प्रोजेक्ट में कुछ नहीं लिखा जाता। | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="स्क्रीनशॉट: नई चैट में जारी रखें"></a> |
|
|
70
70
|
| **कॉन्टेक्स्ट का ब्योरा** | <a id="feature-contextbreakdown"></a>दायां साइडबार → `+` → **कॉन्टेक्स्ट**। पेज दिखाता है कि खुली चैट के मॉडल कॉन्टेक्स्ट को अभी क्या भर रहा है और कॉन्टेक्स्ट विंडो का कितना हिस्सा इस्तेमाल हो रहा है: सिस्टम प्रॉम्प्ट, प्रोजेक्ट निर्देश (AGENTS.md), Skills, आपके संदेश, एजेंट के जवाब और टूल कॉल, टूल नतीजे (टूल के हिसाब से), MCP नतीजे (सर्वर के हिसाब से), टूल की परिभाषाएं, कॉम्पैक्शन का सारांश और दूसरे कॉन्टेक्स्ट नोट, हर एक अपने टोकन और हिस्से के साथ। किसी हिस्से के टूल या सर्वर देखने के लिए उस पर क्लिक करें। यह सिर्फ़ चैट लॉग पढ़ता है, `/compact` और रोलबैक के बाद, और किसी मॉडल को कॉल नहीं करता; हर टर्न के बाद और **रीफ़्रेश करें** से यह फिर से पढ़ता है। इससे देखें कि कोई चैट धीमी या भरी हुई क्यों है, जैसे कोई बड़ा MCP टूल नतीजा या बहुत सारी टूल परिभाषाएं। | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="स्क्रीनशॉट: कॉन्टेक्स्ट का ब्योरा"></a> |
|
|
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> |
|
|
71
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
|
+
| **ब्लॉक की गई कमांड** | <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>बायां साइडबार → **टास्क बोर्ड**। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई चैट **पूरा हुआ** में है (जब तक आप उसे न खोलें, तब तक हरी)। बाईं ओर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। **नया टास्क** (या `n`) सिर्फ़ एक प्रॉम्प्ट लेता है: `Enter` प्रोजेक्ट में नई चैट शुरू करता है, कार्ड **करना है** में दिखता है, dsh चैट को नाम देता है और चैट का मॉडल ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। नारंगी कार्ड पर, बोर्ड पर ही जवाब देने के लिए **जवाब दें** पर क्लिक करें: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। **खत्म हुई चैट छिपाएं** इस डिवाइस पर **पूरा हुआ** को छिपाता है। | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="स्क्रीनशॉट: टास्क बोर्ड"></a> |
|
|
72
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> |
|
|
73
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> |
|
|
74
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> |
|
|
75
|
-
| **चैट पंक्तियों पर 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> |
|
|
76
79
|
| **सभी को पढ़ा हुआ मार्क करें** | <a id="feature-markprojectread"></a>साइडबार में किसी प्रोजेक्ट के **…** बटन पर क्लिक करें → **सभी को पढ़ा हुआ मार्क करें**। उस प्रोजेक्ट की हर चैट से हरा अपठित बिंदु एक साथ हट जाता है; दूसरे प्रोजेक्ट के बिंदु बने रहते हैं। जब प्रोजेक्ट में कोई अपठित चैट नहीं होती, तो यह आइटम ग्रे दिखता है (**कोई अपठित चैट नहीं**)। | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="स्क्रीनशॉट: सभी को पढ़ा हुआ मार्क करें"></a> |
|
|
77
80
|
| **सक्रिय प्रोजेक्ट पहले** | <a id="feature-activeprojectsfirst"></a>जब कोई चैट चलने लगती है या उसे आपकी ज़रूरत होती है, तो उसका प्रोजेक्ट dsh के अपने पंक्ति एनिमेशन के साथ साइडबार में सबसे ऊपर चला जाता है (वैसे ही जैसे आप उसे खींचकर वहां ले जाते)। पूरे हो चुके प्रोजेक्ट अपनी जगह पर रहते हैं; उन्हें हमेशा की तरह कहीं भी खींचें। बदला गया क्रम dsh के प्रोजेक्ट क्रम में सेव होता है, इसलिए इसे बंद करने पर मौजूदा क्रम बना रहता है। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: सक्रिय प्रोजेक्ट पहले"></a> |
|
|
78
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> |
|
|
@@ -82,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
82
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> |
|
|
83
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> |
|
|
84
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> |
|
|
85
|
-
| **अपने-आप अपडेट** | <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> |
|
|
86
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> |
|
|
87
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> |
|
|
88
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> |
|
|
@@ -166,7 +169,9 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
166
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 चैट)।
|
|
167
170
|
- **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
|
|
168
171
|
- **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
|
|
172
|
+
- **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। जब आप कोई टास्क शुरू करते हैं, तो Host वाला हिस्सा आपके चुने गए प्रोजेक्ट में नई चैट बनाता है और आपका प्रॉम्प्ट उसके पहले संदेश के रूप में भेजता है, जैसे आपने उसे वहीं लिखा हो, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। फिर वह प्रॉम्प्ट (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती।
|
|
169
173
|
- **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
|
|
174
|
+
- **ब्लॉक की गई कमांड:** नियम और स्विच `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर `bash` और `pwsh` कॉल का सिर्फ़ कमांड टेक्स्ट पढ़ती है; यह न कुछ चलाती है, न कुछ भेजती है।
|
|
170
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 उसी रूट से नोट पढ़ता और बदलता है।
|
|
171
176
|
- **बैकअप:** कुछ भी आपके कंप्यूटर से बाहर नहीं जाता। आर्काइव `~/Desktop/dsh-backups` में जाते हैं (सिर्फ़ मालिक की फ़ाइलें)। सीक्रेट आर्काइव में नहीं होते: क्रेडेंशियल फ़ाइलें (`.credentials.yaml`, `.env`), की फ़ाइलें (`.pem`, `.key`, `.p12`, `.pfx`) और yml फ़ाइलों में token, secret, password और API key सेटिंग के मान मास्क किए जाते हैं; उनकी असली कॉपी उसी फ़ोल्डर के `composer-plus-vault/<archive>/` में (सिर्फ़ मालिक के लिए), सिर्फ़ इसी कंप्यूटर पर रहती हैं। **दूसरे कंप्यूटर के लिए** कोई vault कॉपी नहीं करता: वे सीक्रेट वहां फिर से डालें। आपके चैट लॉग, सेटिंग और dsh होम का बाकी हिस्सा आर्काइव में जैसे हैं वैसे ही रहते हैं: फ़ोल्डर को `$DSH_HOME` की तरह ही निजी रखें। बैकअप फ़ाइलों को `O_NOFOLLOW | O_NONBLOCK` से पढ़ता है; symlink को लिंक के रूप में सेव किया जाता है (उसके टारगेट तक कभी नहीं जाया जाता), और FIFO या डिवाइस छोड़ दिया जाता है। अपने-आप बैकअप का स्विच और सेटिंग `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json` में हैं, रेस्क्यू कंसोल का स्विच `rescue-console.json` में है, और dsh चलते समय `running/host-<pid>.json` में हर dsh प्रोसेस दर्ज रहता है (रेस्क्यू कंसोल इन्हें पढ़कर बहाली से मना करता है)।
|
|
172
177
|
- **रेस्क्यू कंसोल:** टर्मिनल का एक मेन्यू; यह कोई नेटवर्क पोर्ट नहीं खोलता। बहाली सिर्फ़ dsh होम के बगल में एक नए फ़ोल्डर में लिखती है (फ़ाइलें `O_EXCL | O_NOFOLLOW` के साथ, symlink सबसे आखिर में और उनके टारगेट तक कभी नहीं जाया जाता), और ऐसा आर्काइव मना कर देती है जिसमें असुरक्षित नाम (`..`, absolute पाथ), डिवाइस या FIFO, एक से ज़्यादा टॉप फ़ोल्डर, या किसी लिंक के नीचे की एंट्री हो।
|
|
@@ -186,10 +191,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
186
191
|
- **रीस्टार्ट के बाद कोई चैट जारी नहीं रही:** dsh बंद होते समय रीस्टार्ट के बाद जारी रखें बंद था, आपने वह टर्न खुद रोका था, टर्न खत्म हो चुका था (पूरा या विफल), चैट आर्काइव थी, या 20 से ज़्यादा चैट चल रही थीं (सबसे नई 20 जारी रहती हैं)।
|
|
187
192
|
- **रीस्टार्ट के बाद कतार खाली है:** dsh खुद बंद होते समय कतार खाली कर देता है। रीस्टार्ट के बाद जारी रखें उसे सिर्फ़ उसी चैट में वापस रखता है जिसे वह जारी रखता है; दूसरी चैट में संदेश फिर से भेजें। बंद होने से ठीक पहले हटाया गया संदेश वापस आ सकता है: उसे फिर से हटाएं।
|
|
188
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` काम करता हो।
|
|
189
|
-
- **चैट पंक्ति पर ब्रांच लेबल नहीं है:** यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
|
|
194
|
+
- **चैट पंक्ति पर ब्रांच लेबल नहीं है:** साइडबार “एक ही सूची में” व्यू में नहीं है (“वर्कस्पेस” और “वर्कस्पेस ट्री” में किसी भी चैट पंक्ति पर लेबल नहीं दिखता), यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
|
|
190
195
|
- **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
|
|
191
196
|
- **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
|
|
192
|
-
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.
|
|
197
|
+
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.19.0`), ऊपर इंस्टॉल वाला नोट देखें।
|
|
193
198
|
- **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
|
|
194
199
|
- **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
|
|
195
200
|
- **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
|
|
@@ -209,6 +214,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
209
214
|
- **चैट हटाएं** के लिए dsh का आर्काइव चाहिए (dsh 0.2.0 और बाद के वर्शन)। जो चैट (या उसकी कोई सबएजेंट चैट) 15 सेकंड में नहीं रुकती, या जिसे कोई दूसरा dsh रखता है, वह आर्काइव में रहती है और कुछ नहीं खिसकता। macOS के अलावा दूसरे सिस्टम पर ट्रैश फ़ोल्डर उसी डिस्क पर होना चाहिए, जिस पर चैट इतिहास है। अगर आप कोई खुली चैट हटाते हैं, तो वह dsh रीस्टार्ट होने तक dsh की मेमोरी में आर्काइव और छिपी हुई रहती है। ट्रैश खुद खाली करें; dsh यह नहीं करता।
|
|
210
215
|
- dsh की कतार में `move` कार्रवाई नहीं है, इसलिए प्लगइन का Host वाला हिस्सा कतार वाले संदेश को ही dsh की कतार में खिसकाता है (एक बदलाव, वही संदेश)। इमेज या फ़ाइलों वाले संदेश भी खिसकते हैं। सिर्फ़ आपके अपने संदेश खिसकते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब अपनी जगह पर रहता है। अगर आपके खींचते समय कोई संदेश भेजा जाना शुरू हो जाता है, तो कुछ नहीं खिसकता और एक सूचना यह बताती है।
|
|
211
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 के अंग्रेज़ी नोट्स दिखाती है।
|
|
212
218
|
- **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
|
|
213
219
|
- **कंपोज़र में फ़ोकस बनाए रखें** सिर्फ़ `/` कमांड या स्किल के बाद फ़ोकस वापस देता है। जब तक dsh कमांड प्रोसेस करता है, कंपोज़र कुछ मिलीसेकंड तक सिर्फ़ पढ़ने लायक रहता है, इसलिए उस समय दबाई गई कुंजियां खो जाती हैं। अगर dsh का `/` मेन्यू अभी भी खुला है, तो `Enter` हाइलाइट की गई पंक्ति चुनता है और कुछ नहीं भेजता।
|
|
214
220
|
- **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
|
|
@@ -222,7 +228,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
222
228
|
- **यह चैट** सिर्फ़ वे फ़ाइलें गिनता है, जो dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) ने लिखीं। जो फ़ाइलें किसी कमांड (`bash`) ने बदलीं, वे इस व्यू में नहीं हैं; वे **कमिट नहीं किए गए** में दिखती हैं। अगर चैट का टर्न रोलबैक स्नैपशॉट नहीं है (टर्न रोलबैक बंद है, dsh-rewind-plugin इंस्टॉल है, या चैट प्लगइन से पुरानी है), तो व्यू आखिरी कमिट से तुलना करता है और यह बताता है। टर्न रोलबैक किसी चैट के 50 नवीनतम स्नैपशॉट रखता है: लंबी चैट में व्यू सबसे पुराने रखे गए स्नैपशॉट से तुलना करता है, बताता है कि किस संदेश से, और पहले के बदलाव नहीं गिनता। **व्हाइटस्पेस बदलाव छिपाएं** का मतलब `git diff -w` है: जिस पंक्ति में सिर्फ़ अंदर की स्पेस बदली, वह भी छिप जाती है।
|
|
223
229
|
- **GitHub इश्यू खोलें** के लिए dsh के PATH में GitHub CLI (`gh`) और चैट के फ़ोल्डर में GitHub रिमोट ज़रूरी है। यह ज़्यादा से ज़्यादा 60 सेकंड चलता है; अगर `gh` इससे ज़्यादा समय लेता है, तो इश्यू GitHub पर बन चुका हो सकता है, पर सूची में उसका लिंक नहीं होगा (दोबारा क्लिक करने से पहले GitHub पर देखें: सूची लिंक सिर्फ़ पूरे हुए रन से पढ़ती है, इसलिए नया क्लिक दूसरा इश्यू खोल सकता है)। एक से ज़्यादा GitHub रिमोट वाला फ़ोल्डर `gh` का अपना डिफ़ॉल्ट (`gh repo set-default`) इस्तेमाल करता है।
|
|
224
230
|
- **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
|
|
225
|
-
- **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता।
|
|
231
|
+
- **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। लेबल सिर्फ़ “एक ही सूची में” व्यू में दिखता है।
|
|
226
232
|
- **हर चैट की अपनी ब्रांच** प्लान मोड में: dsh `/plan <संदेश>` को संदेश की तरह नहीं, कमांड की तरह भेजता है, इसलिए Composer Plus dsh के कंपोज़र में कमांड का सबमिट खुद संभालता है (यह सार्वजनिक API नहीं है)। अगर किसी dsh अपडेट से यह बदलता है, तो **नई ब्रांच** चुनी होने पर `/plan <संदेश>` खुली नई चैट में dsh के अपने कमांड की तरह चलता है। जब Host नई चैट में प्लान मोड चालू नहीं कर पाता, तो ब्रांच फ़ोल्डर बना रहता है और संदेश नहीं भेजा जाता, ताकि नई चैट डिफ़ॉल्ट मोड में फ़ाइलें न बदले।
|
|
227
233
|
- **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, वह भी साइडबार से हट जाता है: Composer Plus शुरू होने पर और हर 30 सेकंड में ब्रांच फ़ोल्डर जाँचता है, साइडबार के किसी फ़िल्टर के बिना भी। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
|
|
228
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 की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
|
|
@@ -239,8 +245,11 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
239
245
|
- **प्रॉम्प्ट बेहतर करें** सिर्फ़ प्रोजेक्ट का छोटा सारांश, बदले गए पाथ और वे पाथ देखता है जिनके नाम आपके शब्दों से मिलते हैं: खुद कोड नहीं। इसलिए यह सही फ़ाइल चूक सकता है, और सिर्फ़ वही पाथ बताता है जो उसे दिए गए थे। भेजने से पहले नया टेक्स्ट पढ़ें। यह `/goal <लक्ष्य>` के अलावा किसी स्लैश कमांड पर, `/goal` के किसी कंट्रोल शब्द (`clear`, `pause`, `resume`) पर या फ़ाइल या सिंबल चिप वाले संदेश पर नहीं चलता (नया टेक्स्ट सादा टेक्स्ट होता है, इसलिए चिप खो जाती), और एक संदेश में ज़्यादा से ज़्यादा 8,000 अक्षर हो सकते हैं। `/goal` के किसी लक्ष्य के लिए यह शर्तें सिर्फ़ ड्राफ़्ट और कॉन्टेक्स्ट से लिखता है; बहुत सख़्त शर्त से लक्ष्य के राउंड ज़्यादा लग सकते हैं, इसलिए भेजने से पहले उसे पढ़ें। इमेज जुड़ी रहती हैं: सिर्फ़ टेक्स्ट बदलता है। हर क्लिक पर एक मॉडल कॉल होती है; किसी शक्तिशाली मॉडल को एक मिनट लग सकता है (`Esc` रद्द करता है)।
|
|
240
246
|
- **लक्ष्य जांच** सिर्फ़ वह पूरा होना जांचती है, जो एजेंट किसी अपने-आप चलने वाले लक्ष्य राउंड में करता है: चैट में आपके कहने पर किया गया पूरा होना, `/goal` और लक्ष्य बार नहीं जांचे जाते। एजेंट खुद टेस्ट या टेस्ट कमांड की फ़ाइलें बदल सकता है; सत्यापक चैट पढ़ता है और यह देख सकता है, पर वह दोनों तरफ़ गलत हो सकता है (गलत "पूरा नहीं हुआ" एक और राउंड लेता है; गलत "पूरा हुआ" लक्ष्य बंद कर देता है)। सत्यापक चैट और `git status` देखता है, खुद कोड नहीं। टेस्ट रन तभी दोबारा इस्तेमाल होता है, जब फ़ाइलें बदल सकने वाला एजेंट का सबसे नया कदम उसी फ़ोल्डर में बिल्कुल उसी कमांड का एजेंट का अपना सफल `bash` रन था; पाइप (`| tail`) या `&&` वाली कमांड दोबारा इस्तेमाल नहीं होती। बजट टर्न खत्म होने पर मापा जाता है, इसलिए एक टर्न उससे आगे जा सकता है। टोकन बजट में चैट की सबएजेंट चैट की कॉल भी गिनी जाती हैं (हर टर्न के अंत में उनके सेव किए गए लॉग से पढ़ी जाती हैं, इसलिए बहुत सबएजेंट वाली चैट की जांच में थोड़ा ज़्यादा समय लगता है)। सबूत की तालिका सत्यापक के खुद चैट पढ़ने से बनती है: जिस हिस्से को वह सत्यापित कहता है, अगर वह अहम है, तो उसे आप भी खुद देखें। जांच चलते समय `update_goal` इंतज़ार करता है (टेस्ट ज़्यादा से ज़्यादा 15 मिनट, सत्यापक ज़्यादा से ज़्यादा 3 मिनट)। फ़ोर्क को नया चैट id मिलता है, इसलिए वह पैरेंट चैट की अपनी टेस्ट कमांड और सीमाओं के बिना शुरू होता है। सत्यापक तक पहुंचने वाले हर पूरा होने पर एक मॉडल कॉल लगती है।
|
|
241
247
|
- **सुरक्षित फ़ाइलें** एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं। यह dsh के अपने फ़ाइल टूल (`read`, `read_image`, किसी फ़ाइल पर `grep`, `write`, `edit`, `str_replace_editor`) को कवर करती है। कोई शेल कमांड (`cat .env`), एजेंट की लिखी स्क्रिप्ट, किसी सबएजेंट का शेल, कोई MCP टूल, `glob` सूची और पूरे फ़ोल्डर पर `grep` फिर भी किसी सुरक्षित फ़ाइल तक पहुंच सकते हैं। असली सीमा के लिए dsh के सैंडबॉक्स मोड इस्तेमाल करें या सीक्रेट को प्रोजेक्ट फ़ोल्डर से बाहर रखें। पैटर्न `*`, `**` और `?` समझते हैं, `{a,b}` या `[ab]` नहीं, और बड़े-छोटे अक्षरों में फ़र्क नहीं करते।
|
|
248
|
+
- **ब्लॉक की गई कमांड** एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं। यह सिर्फ़ dsh के `bash` और `pwsh` टूल का कमांड टेक्स्ट पढ़ती है। कमांड का नाम रखने वाला कोई वैरिएबल या एलियास (`CMD=npm; $CMD publish`), कोई शेल फ़ंक्शन, एजेंट की लिखी स्क्रिप्ट फ़ाइल, कोई दूसरा प्रोग्राम (`python -c`, `node -e`, `make`), कोई MCP टूल और आपका अपना टर्मिनल फिर भी उसे चला सकते हैं। कोई नियम आपकी चाह से ज़्यादा कमांड से मेल खा सकता है: कमांड का कोई भी शब्द कमांड का नाम हो सकता है (`echo npm publish`, `npm publish` से मेल खाता है), और नियम के शब्दों के बीच दूसरे शब्द आ सकते हैं (`git push --force`, `git push origin main --force` से भी मेल खाता है)। जब कोई नियम बहुत ज़्यादा कमांड से मेल खाए, तो उसे लंबा करें। **पहले पूछना** के लिए ऐसी चैट चाहिए जो पूछ सके: जिस चैट की मंज़ूरी नीति never है (जैसे सौंपा गया सबएजेंट), उसमें dsh कार्ड नहीं दिखा सकता, इसलिए कॉल वजह के साथ मना कर दी जाती है। मंज़ूरी कार्ड वजह अंग्रेज़ी में दिखाता है। **इस चैट के लिए अनुमति दें** किसी **पहले पूछना** कार्ड का जवाब नहीं देता।
|
|
242
249
|
- **नई चैट में जारी रखें** चैट (संदेश, टूल कॉल और हर टूल नतीजे का आखिरी हिस्सा, ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा) चैट के अपने मॉडल को भेजता है। हैंडऑफ़ नोट से कोई फ़ैसला या फ़ाइल छूट सकती है: शुरू करने से पहले उसे पढ़ें। नई चैट सिर्फ़ नोट और लिंक की गई चैट को जानती है (dsh पुरानी चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ता है); उसका मॉडल कॉन्टेक्स्ट छोटा शुरू होता है, पुरानी चैट जैसी है वैसी रहती है। हर चैट के लिए एक समय में एक ही नोट या शुरुआत चलती है।
|
|
243
250
|
- **कॉन्टेक्स्ट का ब्योरा** dsh के अपने नियम (हर टोकन पर लगभग 4 अक्षर) से अनुमान दिखाता है, वही नियम जो dsh की कॉन्टेक्स्ट रिंग में है; मॉडल की अपनी गिनती अलग हो सकती है। टूल की परिभाषाएं सबसे नए अनुरोध की होती हैं। यह कॉन्टेक्स्ट वैसा दिखाता है जैसा चैट लॉग में है; अभी चल रहा टर्न अपने अगले कदम के बाद दिखता है।
|
|
251
|
+
- **नियोजित चरण** से टोकन तभी बचते हैं जब मॉडल सच में योजना बनाए: चालू रहने पर हर अनुरोध में `plan_next_steps` टूल और एक छोटा निर्देश (लगभग 500 टोकन) जाता है, उन चैट में भी जहाँ मॉडल कभी योजना नहीं बनाता। शर्त सिर्फ़ वही साबित करती है जो उसमें लिखा है (जैसे: बिल्ड का एग्ज़िट कोड 0 था), यह नहीं कि काम सही है। `ok` dsh के अपने नतीजे वाले निशान पढ़ता है (`[exit code: N]`, टाइमआउट, सैंडबॉक्स से इनकार); जो कमांड शून्य से अलग एग्ज़िट कोड दिए बिना विफल हो, वह पास मानी जाती है। चरण एक-एक करके चलते हैं; एक साथ तैयार दो चरण मॉडल को लौटते हैं। चरण का संदेश चैट के मॉडल के असिस्टेंट संदेश के रूप में सेव होता है (dsh में प्लगइन के लिखे संदेश के लिए कोई निशान नहीं है), इसलिए उसके टेक्स्ट में लिखा होता है कि इसे Composer Plus ने चलाया। Tether में नहीं है।
|
|
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 उसका कोई कोड इस्तेमाल नहीं करता।
|
|
244
253
|
- **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
|
|
245
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 की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
|
|
246
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 के आर्काइव को रखे जाने वाले बैकअप की अपनी गिनती में गिनता है और उन्हें हटा सकता है।
|
|
@@ -277,6 +286,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
277
286
|
|
|
278
287
|
**क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है। नोट देखने या बदलने के लिए उसी पंक्ति में **मेमोरी खोलें** दबाएँ और लिखें कि क्या बदलना है।
|
|
279
288
|
|
|
289
|
+
**क्या मैं अपनी सभी चैट को कानबान बोर्ड की तरह देख सकता हूं और वहीं से नई चैट शुरू कर सकता हूं?** हां, **टास्क बोर्ड** से (डिफ़ॉल्ट रूप से चालू): इसे बाएं साइडबार में खोलें। हर चैट **प्रगति में**, **समीक्षा** (वह आपका इंतज़ार कर रही है) या **पूरा हुआ** में एक कार्ड है। **नया टास्क** सिर्फ़ एक प्रॉम्प्ट लेता है और उससे नई चैट शुरू करता है; चैट खोले बिना जवाब देने के लिए नारंगी कार्ड पर **जवाब दें** पर क्लिक करें।
|
|
290
|
+
|
|
280
291
|
**क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
|
|
281
292
|
|
|
282
293
|
**dsh अब शुरू नहीं होता। बैकअप कैसे बहाल करें?** बैकअप फ़ोल्डर (`~/Desktop/dsh-backups`) खोलें और `Composer Plus Rescue.command` पर डबल-क्लिक करें (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`)। `3) Restore a backup` चुनें, कोई एक बैकअप चुनें और `RESTORE` टाइप करें। यह dsh के बिना काम करता है।
|
|
@@ -301,6 +312,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
301
312
|
|
|
302
313
|
**सिर्फ़ वे फ़ाइलें कैसे देखें, जो एक चैट ने बदलीं?** दायां साइडबार → **बदलाव** → **यह चैट**। सिर्फ़ व्हाइटस्पेस वाले बदलाव छिपाने के लिए **␣** पर क्लिक करें।
|
|
303
314
|
|
|
315
|
+
**एजेंट को `npm publish` या `git push --force` चलाने से कैसे रोकें?** **सेटिंग → Composer Plus → ब्लॉक की गई कमांड**: `npm publish` टाइप करें, **ब्लॉक** या **पहले पूछना** चुनें, फिर **जोड़ें** पर क्लिक करें। **ब्लॉक** कमांड को मना करता है और एजेंट आपसे पूछता है; **पहले पूछना** हर बार मंज़ूरी कार्ड दिखाता है। सुरक्षित फ़ाइलें एजेंट के फ़ाइल टूल को कवर करती है; ब्लॉक की गई कमांड उसकी शेल कमांड को कवर करती है।
|
|
316
|
+
|
|
304
317
|
**एक चैट में ऑटो रिव्यू को एक ही टूल के बारे में बार-बार पूछने से कैसे रोकें?** मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** पर क्लिक करें। यह सिर्फ़ उसी चैट में उसी तय टूल पर लागू होता है, डिफ़ॉल्ट रूप से 1 घंटे के लिए; इसे हेडर की चिप से रद्द करें। समय **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में बदलें।
|
|
305
318
|
|
|
306
319
|
**मेरा iPhone खो गया। उसे मेरे Mac तक पहुंचने से कैसे रोकूं?** साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें और उस iPhone के पास **Remove** पर क्लिक करें। उसकी कुंजी तुरंत काम करना बंद कर देती है; वह सिर्फ़ नई पेयरिंग से वापस आ सकता है, जिसे आप Mac पर मंज़ूर करें।
|
|
@@ -329,6 +342,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
329
342
|
|
|
330
343
|
**क्या मैं अपने iPhone से फ़ोटो भेज सकता हूं?** हां। Tether की किसी चैट में संदेश फ़ील्ड के पास **+** पर टैप करें → Camera, Photos (ज़्यादा से ज़्यादा 4) या Paste image। फ़ोटो आपके संदेश के अटैचमेंट के रूप में Mac की चैट में जाती हैं, इसलिए मॉडल उन्हें देखता है।
|
|
331
344
|
|
|
345
|
+
**क्या dsh मॉडल से दोबारा पूछे बिना अगली कमांड चला सकता है?** हाँ, **नियोजित चरण** से (डिफ़ॉल्ट रूप से बंद): इसे सेटिंग → Composer Plus में चालू करें। तब मॉडल अगली कमांड को शर्त के साथ योजना बना सकता है, जैसे “बिल्ड पास होने पर टेस्ट चलाओ”, और नतीजा शर्त पूरी करे तो Composer Plus नई मॉडल कॉल के बिना वह चरण चलाता है। मंज़ूरी और सैंडबॉक्स जैसे थे वैसे ही रहते हैं।
|
|
346
|
+
|
|
332
347
|
**क्या यह डेस्कटॉप ऐप के साथ काम करता है?** हां: सेटिंग → प्लगइन → **प्लगइन जोड़ें** → `dsh-composer-plus`। dsh 0.2.0-rc.2 (डेस्कटॉप और वेब) और 0.2.1-rc.2 (वेब) पर टेस्ट किया गया।
|
|
333
348
|
|
|
334
349
|
## डेवलपमेंट
|
|
@@ -393,6 +408,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
393
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
394
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
395
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
+
# Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
396
413
|
```
|
|
397
414
|
|
|
398
415
|
```sh
|