dsh-composer-plus 1.20.0 → 1.21.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.hi.md CHANGED
@@ -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.20.0`।
32
+ > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.21.0`।
33
33
 
34
34
  ## सुविधाएं
35
35
 
@@ -71,9 +71,21 @@ 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>बायां साइडबार → **टास्क बोर्ड**। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई चैट **पूरा हुआ** में है (जब तक आप उसे न खोलें, तब तक हरी)। बाईं ओर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। किसी प्रोजेक्ट को उसके नाम से ढूंढने के लिए सूची के ऊपर **प्रोजेक्ट खोजें** में टाइप करें (छोटे-बड़े अक्षर और एक्सेंट मायने नहीं रखते; `Esc` बॉक्स खाली करता है), और सिर्फ़ वे प्रोजेक्ट दिखाने के लिए जिनमें कोई चैट इंतज़ार कर रही है, चल रही है, बिना देखे खत्म हुई है या पिछले 2 घंटों में बदली है, **पिछले 2 घंटों में सक्रिय** पर क्लिक करें (यह सेटिंग इस डिवाइस पर रहती है)। **नया टास्क** (या `n`) बोर्ड पर दिख रहे प्रोजेक्ट में dsh की अपनी नई चैट खोलता है (**सभी प्रोजेक्ट** चुने होने पर उस प्रोजेक्ट में, जिसे dsh का नया सेशन चुनता है), ताकि आप किसी भी चैट की तरह फ़ाइलें जोड़ सकें, कमांड इस्तेमाल कर सकें और मॉडल चुन सकें। आपका पहला संदेश जाते ही बोर्ड अपने-आप लौट आता है। तब तक चैट **करना है** में **नया टास्क** के रूप में इंतज़ार करती है: पहला संदेश लिखने के लिए उस पर क्लिक करें। **करना है** कॉलम सिर्फ़ तभी दिखता है। जिस प्रोजेक्ट में कोई चैट आपका इंतज़ार कर रही है, प्रोजेक्ट सूची में उसके आगे नारंगी बिंदु दिखता है। dsh चैट को नाम देता है और चैट का मॉडल उसी संदेश से ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। नारंगी कार्ड पर, बोर्ड पर ही जवाब देने के लिए **जवाब दें** पर क्लिक करें: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। **खत्म हुई चैट छिपाएं** इस डिवाइस पर **पूरा हुआ** को छिपाता है। **प्रगति में** के किसी कार्ड पर पॉइंटर रखें (या कीबोर्ड फ़ोकस उस पर ले जाएं), तो उसकी प्रगति दिखती है: चैट कितनी देर से चल रही है, उसकी करने वाले कामों की सूची का चरण, अभी चल रहा टूल और एजेंट की आखिरी लाइन। सेटिंग → Composer Plus → टास्क बोर्ड में **होवर पर प्रगति** से **तेज़ (AI के बिना)** (डिफ़ॉल्ट: सिर्फ़ चैट पढ़ता है) या **AI सारांश** (चैट के मॉडल को एक छोटी कॉल एक या दो वाक्य भी लिखती है) चुनें। | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="स्क्रीनशॉट: टास्क बोर्ड"></a> |
74
+ | **टास्क बोर्ड** | <a id="feature-taskboard"></a>बायां साइडबार → **टास्क बोर्ड**, या dsh में कहीं भी `Cmd+Shift+K` (Windows और Linux पर `Ctrl+Shift+K`) दबाएं। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई जो चैट आपने अभी नहीं खोली, वह **पूरा हुआ** में है (हरी)। चैट खोलने पर उसका कार्ड अपने आप **पूरा हुआ** से हट जाता है; पढ़ी गई खत्म हुई चैट देखने के लिए हरे कार्डों के नीचे **हाल में पूरे हुए (N)** पर क्लिक करें (सबसे नई 10, फिर **N पुराने टास्क दिखाएं**; खुला या बंद होना इस डिवाइस पर रहता है)। जो चैट बोर्ड के पीछे खुली रहते हुए खत्म होती है (**नया टास्क**), वह आपके खोलने तक हरी रहती है। प्रोजेक्ट सूची खोलने के लिए बोर्ड के ऊपर प्रोजेक्ट के नाम पर क्लिक करें, फिर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। चुनने के बाद, `Esc` दबाने पर या सूची के बाहर क्लिक करने पर सूची बंद हो जाती है। किसी प्रोजेक्ट को उसके नाम से ढूंढने के लिए सूची में सबसे ऊपर **प्रोजेक्ट खोजें** में टाइप करें (छोटे-बड़े अक्षर और एक्सेंट मायने नहीं रखते; `Esc` बॉक्स खाली करता है), पहला मिलान चुनने के लिए `Enter` दबाएं, और सिर्फ़ वे प्रोजेक्ट दिखाने के लिए जिनमें कोई चैट इंतज़ार कर रही है, चल रही है, बिना देखे खत्म हुई है या पिछले 2 घंटों में बदली है, **पिछले 2 घंटों में सक्रिय** पर क्लिक करें (यह सेटिंग इस डिवाइस पर रहती है)। **नया टास्क** (या `n`) बोर्ड पर दिख रहे प्रोजेक्ट में dsh की अपनी नई चैट खोलता है (**सभी प्रोजेक्ट** चुने होने पर उस प्रोजेक्ट में, जिसे dsh का नया सेशन चुनता है), ताकि आप किसी भी चैट की तरह फ़ाइलें जोड़ सकें, कमांड इस्तेमाल कर सकें और मॉडल चुन सकें। आपका पहला संदेश जाते ही बोर्ड अपने-आप लौट आता है। तब तक चैट **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में इंतज़ार करती है: पहला संदेश लिखने के लिए उस पर क्लिक करें। जिस प्रोजेक्ट में कोई चैट आपका इंतज़ार कर रही है, प्रोजेक्ट सूची में उसके आगे नारंगी बिंदु दिखता है (जब कोई भी चैट इंतज़ार कर रही हो, तब ऊपर प्रोजेक्ट के नाम के पास भी यह दिखता है)। dsh चैट को नाम देता है और चैट का मॉडल उसी संदेश से ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। बोर्ड पर ही जवाब देने के लिए नारंगी कार्ड (या उसके **जवाब दें**) पर क्लिक करें; पूरी चैट के लिए पैनल में **चैट खोलें** है: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। किसी खत्म हुए कार्ड को बोर्ड से हटाने के लिए उसके **×** पर क्लिक करें, या **हाल में पूरे हुए** खोलकर उन कार्डों को बोर्ड से हटाने के लिए **पूरा हुआ** के ऊपर **सब हटाएं** पर क्लिक करें: यह पहले दिखाता है कि किस प्रोजेक्ट के कितने कार्ड हटेंगे, और बिना पढ़े (हरे) कार्ड बने रहते हैं। उसके बाद 8 सेकंड तक **पहले जैसा करें** कार्ड वापस लाता है; **पूरा हुआ** के नीचे **हटाए गए (N)** बोर्ड से हटे कार्डों की सूची दिखाता है, और **बोर्ड पर वापस रखें** किसी एक कार्ड को फिर से **पूरा हुआ** में दिखाता है। कोई चैट डिलीट नहीं होती: चैट dsh के साइडबार में बनी रहती हैं, बोर्ड रीस्टार्ट के बाद भी यह याद रखता है (Tether वही बोर्ड दिखाता है), और जो चैट फिर से चलती है, वह बोर्ड पर लौट आती है। **प्रगति में** के किसी कार्ड पर पॉइंटर रखें (या कीबोर्ड फ़ोकस उस पर ले जाएं), तो उसकी प्रगति दिखती है: चैट कितनी देर से चल रही है, उसकी करने वाले कामों की सूची का चरण, अभी चल रहा टूल और एजेंट की आखिरी लाइन। सेटिंग → Composer Plus → टास्क बोर्ड में **होवर पर प्रगति** से **तेज़ (AI के बिना)** (डिफ़ॉल्ट: सिर्फ़ चैट पढ़ता है) या **AI सारांश** (चैट के मॉडल को एक छोटी कॉल एक या दो वाक्य भी लिखती है) चुनें। | <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
+ | **मेमोरी वर्शन इतिहास** | <a id="feature-memoryhistory"></a>**प्रोजेक्ट मेमोरी** चालू रहने पर डिफ़ॉल्ट रूप से चालू। मेमोरी की हर सेव से पहले (एजेंट, टर्न के बाद की समीक्षा, **मेमोरी खोलें**) नोट्स की पहले जैसी एक कॉपी रखी जाती है। **मेमोरी खोलें** में कोई प्रोजेक्ट या **ग्लोबल मेमोरी** चुनें, फिर **इतिहास**: तारीख के अनुसार वर्शन और हर वर्शन के बाद मेमोरी किसने बदली। कोई वर्शन चुनें तो रीस्टोर से क्या बदलेगा उसका diff दिखता है, फिर **रीस्टोर करें**। रीस्टोर से पहले के नोट्स भी रखे जाते हैं, इसलिए आप उसे पूर्ववत कर सकते हैं। हर मेमोरी के नवीनतम 50 वर्शन रहते हैं। Tether में: चैट शीर्षक मेनू → Project memory → History। | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="स्क्रीनशॉट: मेमोरी वर्शन इतिहास"></a> |
77
+ | **मेमोरी को AGENTS.md में एक्सपोर्ट करें** | <a id="feature-memoryexport"></a>**मेमोरी खोलें** में कोई प्रोजेक्ट चुनें, फिर **AGENTS.md में एक्सपोर्ट करें**: उस प्रोजेक्ट के नोट्स उसके फ़ोल्डर की `AGENTS.md` के एक चिह्नित भाग में लिखे जाते हैं, ताकि आप उन्हें commit करके अपनी टीम और दूसरे एजेंट टूल के साथ साझा कर सकें। पहले बदलाव diff के रूप में दिखता है; केवल **AGENTS.md लिखें** से सेव होता है। अगला एक्सपोर्ट केवल यह भाग बदलता है। ग्लोबल मेमोरी, स्रोत और तारीखें नहीं लिखी जातीं। Tether में: चैट शीर्षक मेनू → Project memory → Export to AGENTS.md। | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="स्क्रीनशॉट: मेमोरी को AGENTS.md में एक्सपोर्ट करें"></a> |
78
+ | **मेमोरी नोट का स्रोत लिंक** | <a id="feature-memorysource"></a>**मेमोरी खोलें** में, चैट से आए नोट (एजेंट ने सेव किया, टर्न के बाद की समीक्षा ने रखा, या आपने कोई सुझाव स्वीकार किया) के पास **स्रोत** होता है: क्लिक करने पर वह चैट उसी संदेश पर खुलती है, ताकि नोट बदलने या हटाने से पहले आप देख सकें कि वह क्यों है। पुराने वर्शन का नोट केवल अपनी चैट खोलता है। Tether में: चैट शीर्षक मेनू → Project memory → Source। | <a href="assets/features/memorySource.webp"><img src="assets/features/memorySource.webp" width="160" alt="स्क्रीनशॉट: मेमोरी नोट का स्रोत लिंक"></a> |
79
+ | **मेमोरी को दूसरे प्रोजेक्ट में कॉपी करें** | <a id="feature-memorycopy"></a>**मेमोरी खोलें** में कोई प्रोजेक्ट या **ग्लोबल मेमोरी** चुनें, फिर **प्रोजेक्ट में कॉपी करें**: नोट्स चुनें, dsh के प्रोजेक्ट खोजें और किसी एक पर क्लिक करें। चुने गए सभी नोट्स उस प्रोजेक्ट की मेमोरी में (अपने विषय और स्रोत के साथ) जाते हैं, या एक भी नहीं: अगर एक नहीं समाता, तो कुछ भी कॉपी नहीं होता और कारण दिखता है। जो नोट प्रोजेक्ट में पहले से है, वह छोड़ दिया जाता है। Tether में: चैट शीर्षक मेनू → Project memory → Copy to project। | <a href="assets/features/memoryCopy.webp"><img src="assets/features/memoryCopy.webp" width="160" alt="स्क्रीनशॉट: मेमोरी को दूसरे प्रोजेक्ट में कॉपी करें"></a> |
80
+ | **पुराने मेमोरी नोट्स खोजें** | <a id="feature-memorystale"></a>**मेमोरी खोलें** में कोई प्रोजेक्ट चुनने पर, उसके नोट्स में लिखे फ़ाइल पाथ (`कोड` में), npm स्क्रिप्ट और ब्रांच नाम प्रोजेक्ट की अभी की स्थिति से मिलाए जाते हैं। जो नोट ऐसी चीज़ बताता है जो अब प्रोजेक्ट में नहीं है, उस पर ⚠ और गायब चीज़ दिखती है, ताकि मॉडल उससे काम करे उससे पहले आप उसे ठीक कर सकें या हटा सकें। यह केवल प्रोजेक्ट फ़ोल्डर के अंदर की सामान्य फ़ाइलें और git की एक ब्रांच सूची पढ़ता है; कुछ नहीं बदलता और कोई मॉडल नहीं बुलाता। Tether में: चैट शीर्षक मेनू → Project memory। | <a href="assets/features/memoryStale.webp"><img src="assets/features/memoryStale.webp" width="160" alt="स्क्रीनशॉट: पुराने मेमोरी नोट्स खोजें"></a> |
81
+ | **इस चैट में मेमोरी का उपयोग न करें** | <a id="feature-memoryperchat"></a>जब **प्रोजेक्ट मेमोरी** चालू हो, चैट हेडर में **मेमोरी चालू** दिखता है: केवल उसी चैट के लिए मेमोरी बंद करने हेतु उस पर क्लिक करें (**मेमोरी बंद**)। फिर उस चैट के मॉडल को मेमोरी भाग और मेमोरी टूल नहीं मिलते, और हर टर्न के बाद की समीक्षा उसे नहीं पढ़ती। dsh 0.2.1 और बाद में वही बटन नई चैट स्क्रीन पर भी है, इसलिए परीक्षण चैट बिना मेमोरी के शुरू होती है। दूसरी चैट नहीं बदलतीं। Tether में: चैट शीर्षक मेनू → Use project memory। | <a href="assets/features/memoryPerChat.webp"><img src="assets/features/memoryPerChat.webp" width="160" alt="स्क्रीनशॉट: इस चैट में मेमोरी का उपयोग न करें"></a> |
82
+ | **चैट से मेमोरी नोट्स सुझाएँ** | <a id="feature-memorysuggest"></a>जब **प्रोजेक्ट मेमोरी** चालू हो, चैट हेडर में **मेमोरी के लिए सुझाएँ** होता है: क्लिक करने पर चैट के मॉडल से पूछा जाता है कि इस चैट के कौन से नियम और निर्णय आगे की चैट के लिए रखने लायक हैं। हर सुझाव कारण दिखाता है; **स्वीकार करें** उसे उस चैट और संदेश के लिंक के साथ सेव करता है जिससे वह आया, **अस्वीकार करें** उसे छोड़ देता है। स्वीकार करने से पहले कुछ भी सेव नहीं होता, और मॉडल केवल आपके क्लिक करने पर बुलाया जाता है। रोलबैक से वापस लिए गए संदेश नहीं भेजे जाते। Tether में: चैट शीर्षक मेनू → Suggest for memory। | <a href="assets/features/memorySuggest.webp"><img src="assets/features/memorySuggest.webp" width="160" alt="स्क्रीनशॉट: चैट से मेमोरी नोट्स सुझाएँ"></a> |
76
83
  | **इस चैट के लिए अनुमति दें** | <a id="feature-allowforchat"></a>जब ऑटो रिव्यू आपसे पूछता है, तो मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** दिखता है। इसके बाद उसी चैट में वही टूल किसी भी आर्ग्युमेंट के साथ बिना पूछे चलता है, जब तक समय सीमा खत्म नहीं होती (डिफ़ॉल्ट रूप से 1 घंटा; इसे **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में चुनें)। फिर एजेंट दोबारा पूछता है। हेडर की एक चिप अनुमतियों की सूची उनके खत्म होने के समय के साथ दिखाती है और उन्हें रद्द करती है। रीस्टार्ट के बाद भी अनुमतियां बनी रहती हैं। | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="स्क्रीनशॉट: इस चैट के लिए अनुमति दें"></a> |
84
+ | **नोट के साथ अस्वीकार करें** | <a id="feature-rejectnote"></a>अनुमोदन कार्ड पर **अस्वीकार करें** के पास **नोट के साथ अस्वीकार करें…** दिखता है। उस पर क्लिक करें, कारण या उसकी जगह क्या करना है, लिखें और **अस्वीकार करें** पर क्लिक करें (या `Enter` दबाएं; `Shift+Enter` नई पंक्ति जोड़ता है, `Esc` फ़ील्ड बंद करता है)। नोट पहले प्रतीक्षा कर रहे टर्न में एक संदेश के रूप में एजेंट को जाता है, फिर अनुरोध अस्वीकार होता है: मॉडल उसी टर्न में अस्वीकृति और आपका नोट पढ़ता है, आपको अलग संदेश भेजने की ज़रूरत नहीं। अगर नोट नहीं भेजा जा सका, तो कुछ भी अस्वीकार नहीं होता और फ़ील्ड खुली रहती है। Tether में: अनुमोदन शीट → Reject with note। | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="स्क्रीनशॉट: नोट के साथ अस्वीकार करें"></a> |
85
+ | **सीक्रेट इनपुट** | <a id="feature-secretinput"></a>एजेंट को `request_secret` टूल मिलता है। जब उसे पासवर्ड, टोकन या API कुंजी चाहिए, तो वह चैट में पूछने के बजाय इसी टूल से मांगता है: टूल की पंक्ति पर एक कार्ड दिखता है, जिसमें नाम, मान की ज़रूरत का कारण, एक पासवर्ड फ़ील्ड, **सेव करें** और **अस्वीकार करें** होते हैं। **सेव करें** मान को इस Mac पर ऐसी फ़ाइल में लिखता है जिसे केवल आप पढ़ सकते हैं, और एजेंट को केवल फ़ाइल का पाथ मिलता है, जिसे वह किसी कमांड के इनपुट के रूप में उपयोग करता है (जैसे `"$(cat <path>)"`)। अगर बाद का कोई टूल परिणाम मान दिखाता है, तो मॉडल के देखने से पहले उसकी जगह `[secret]` आ जाता है। टर्न खत्म होने पर फ़ाइल हटा दी जाती है। **अस्वीकार करें** एजेंट को बताता है कि आपने मान नहीं दिया। टूल हटाने के लिए **सेटिंग → Composer Plus** में इसे बंद करें। Tether में: इनपुट फ़ील्ड के ऊपर "Secret: …" पट्टी → Enter। | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="स्क्रीनशॉट: सीक्रेट इनपुट"></a> |
86
+ | **जवाब में उद्धरण** | <a id="feature-quotereply"></a>किसी जवाब का एक हिस्सा चुनें: चुने हुए हिस्से के ऊपर **उद्धरण दें** बटन दिखता है। उस पर क्लिक करें: वह हिस्सा Markdown उद्धरण (`> …`) के रूप में इनपुट फ़ील्ड में कर्सर की जगह जाता है, उसके बाद एक खाली पंक्ति आती है, और इनपुट फ़ील्ड पर फ़ोकस आ जाता है, ताकि आप उसके नीचे अपना जवाब लिखें। केवल जवाब का टेक्स्ट गिना जाता है; सोच, टूल पंक्तियां और आपके अपने संदेश नहीं। एक उद्धरण में अधिकतम 2,000 अक्षर होते हैं। `Cmd+Z` (`Ctrl+Z`) उसे हटा देता है। Tether में: किसी जवाब को दबाकर रखें → Quote (पूरा जवाब)। | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="स्क्रीनशॉट: जवाब में उद्धरण"></a> |
87
+ | **साइड चैट** | <a id="feature-sidechat"></a>इनपुट फ़ील्ड में एक साइड सवाल लिखें और बातचीत-बुलबुलों वाले बटन (**साइड चैट में पूछें**) पर क्लिक करें: चैट की एक कॉपी खुलती है और dsh के सिर्फ़-पढ़ने वाले मोड में जवाब देती है, जबकि चैट काम करती रहती है। कॉपी अब तक की चैट जानती है, सिवाय उन संदेशों के जो अभी कतार में इंतज़ार कर रहे हैं, और उसी का मॉडल इस्तेमाल करती है। उसके इनपुट फ़ील्ड के ऊपर की पट्टी में **वापस लाएं** है: चैट खुलती है और उसके इनपुट फ़ील्ड में आपके सवाल (`> ` उद्धरण के रूप में) और जवाब आ जाते हैं। **चैट पर लौटें** सिर्फ़ चैट खोलता है। साइड चैट साइडबार में "↳ <सवाल>" नाम से रहती है; उसे वहीं आर्काइव करें। Tether में: चैट शीर्षक मेन्यू → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="स्क्रीनशॉट: साइड चैट"></a> |
88
+ | **डिफ़ नोट** | <a id="feature-diffcomments"></a>**बदलाव पैनल** में किसी फ़ाइल का डिफ़ खोलें और किसी पंक्ति पर **+** पर क्लिक करें (रेंज के लिए उसी ब्लॉक की दूसरी पंक्ति पर Shift+क्लिक करें), एक नोट लिखें और **नोट सेव करें** पर क्लिक करें। चैट के नोट पैनल के ऊपर एक पट्टी में इंतज़ार करते हैं; **इनपुट फ़ील्ड में भेजें** उन्हें कर्सर की जगह Markdown के रूप में डालता है: `path:12-14`, `diff` ब्लॉक के रूप में पंक्तियां और आपका नोट। **साफ़ करें** उन्हें हटा देता है। नोट तब तक इस ब्राउज़र में रहते हैं जब तक आप उन्हें भेज या साफ़ न कर दें। **बदलाव पैनल** ज़रूरी है। Tether में: फ़ाइल का डिफ़ → किसी पंक्ति को दबाकर रखें → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="स्क्रीनशॉट: डिफ़ नोट"></a> |
77
89
  | **प्रोजेक्ट की स्थिति** | <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
90
  | **चैट पंक्तियों पर 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
91
  | **सभी को पढ़ा हुआ मार्क करें** | <a id="feature-markprojectread"></a>साइडबार में किसी प्रोजेक्ट के **…** बटन पर क्लिक करें → **सभी को पढ़ा हुआ मार्क करें**। उस प्रोजेक्ट की हर चैट से हरा अपठित बिंदु एक साथ हट जाता है; दूसरे प्रोजेक्ट के बिंदु बने रहते हैं। जब प्रोजेक्ट में कोई अपठित चैट नहीं होती, तो यह आइटम ग्रे दिखता है (**कोई अपठित चैट नहीं**)। | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="स्क्रीनशॉट: सभी को पढ़ा हुआ मार्क करें"></a> |
@@ -83,8 +95,11 @@ dsh plugin --profile web add dsh-composer-plus
83
95
  | **स्थिति के अनुसार क्रम** | <a id="feature-statusorder"></a>साइडबार → व्यू के विकल्प → **इसके अनुसार क्रम दें** → **स्थिति के अनुसार** (**एक ही सूची में** के साथ)। सबसे पहले पूरी हुई चैट आती हैं (dsh का “पूरा हुआ” बिंदु, जो गड़बड़ी के साथ खत्म हुए टर्न को भी मिलता है)। फिर चल रही या इंतज़ार कर रही चैट, फिर सक्रिय ऑटोमेशन (शेड्यूल) वाली चैट, और आखिर में बाकी चैट dsh के क्रम में आती हैं। पूरी हुई चैट खोलने पर वह नीचे चली जाती है। सिर्फ़ व्यू बदलता है: वापस जाने के लिए **मैन्युअल** या **पिछला अपडेट** चुनें। | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="स्क्रीनशॉट: स्थिति के अनुसार क्रम"></a> |
84
96
  | **बैकग्राउंड सूचनाएं** | <a id="feature-notifications"></a>जब dsh बैकग्राउंड में होता है, तो टर्न पूरा होने पर आपको सूचना मिलती है (जवाब की पहली पंक्ति)। जब कोई चैट सच में आपका इंतज़ार करती है, तब भी सूचना मिलती है: मंज़ूरी (टूल का नाम), जवाब (सवाल) या प्लान रिव्यू। अनुरोध 1.5 सेकंड बाद भी खुला होना चाहिए। इसलिए अपने-आप मंज़ूर हुए अनुरोधों (ऑटो रिव्यू अनुमतियां, दूसरे प्लगइन) पर कोई सूचना नहीं आती। अनुरोध का जवाब मिलते ही उसकी सूचना हटा ली जाती है। Dock/टास्कबार का बैज इंतज़ार कर रही चैट की गिनती दिखाता है। सूचना पर क्लिक करने से वह चैट खुलती है। | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="स्क्रीनशॉट: बैकग्राउंड सूचनाएं"></a> |
85
97
  | **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** | <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> |
98
+ | **अगली इंतज़ार कर रही चैट** | <a id="feature-nextwaiting"></a>साइडबार के हेडर में एक बटन दिखाता है कि कितनी दूसरी चैट आपका इंतज़ार कर रही हैं, और अगली चैट के रंग का एक बिंदु: सवाल पूछे या मंज़ूरी या प्लान रिव्यू का इंतज़ार करे तो नारंगी, ऐसा टर्न पूरा करे जिसे आपने अभी तक नहीं पढ़ा तो हरा। वह चैट खोलने के लिए बटन पर क्लिक करें, या Cmd+Shift+E (Windows और Linux पर Ctrl+Shift+E) दबाएं। नारंगी चैट हरी चैट से पहले आती हैं; हर समूह में सबसे लंबे समय से इंतज़ार कर रही चैट पहले आती है। स्क्रीन पर खुली चैट नहीं गिनी जाती। जब कोई और चैट इंतज़ार नहीं कर रही, तो बटन नहीं दिखता और कुंजी कुछ नहीं करती। कुंजी को dsh के कीबोर्ड शॉर्टकट पेज (अगली इंतज़ार कर रही चैट) में बदला जा सकता है। | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="स्क्रीनशॉट: अगली इंतज़ार कर रही चैट"></a> |
99
+ | **विकल्प बटन** | <a id="feature-optionpicks"></a>जब कोई जवाब विकल्पों की सूची पर खत्म होता है ("विकल्प" शीर्षक या बोल्ड "विकल्प" पंक्ति के नीचे 1 से 9 आइटम की क्रमांकित सूची; "अगले कदम" और ऐप की भाषाओं में यही शब्द भी), तो जवाब के नीचे हर विकल्प के लिए एक बटन दिखता है। क्लिक करने पर पूरे विकल्प के साथ "Option N: …" आपके संदेश के रूप में भेजा जाता है, जैसे आपने उसे टाइप किया हो। "(अनुशंसित)" वाला विकल्प चिह्नित होता है। बटन केवल सबसे नए जवाब के नीचे दिखते हैं, जब चैट खाली हो और संदेश बॉक्स खाली हो; पहले से चुने गए जवाब और रोलबैक से वापस लिए गए जवाब में बटन नहीं होते। बटन दिखते समय अगले संदेश का अनुमान कोई सुझाव नहीं देता। एजेंट के प्रश्न कार्ड पर 1–9 कुंजियां क्लिक की तरह वह विकल्प चुनती हैं (जवाब वाले फ़ील्ड में नहीं, और प्रश्न दिखने के बाद पहले 0.8 सेकंड में नहीं)। | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="स्क्रीनशॉट: विकल्प बटन"></a> |
86
100
  | **ऐप्लिकेशन की भाषा** | <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
101
  | **मोबाइल कनेक्ट (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> |
102
+ | **रिमोट कंप्यूटर** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) के ज़रिए अपने दूसरे Mac का dsh खोलें और उनकी चैट यहीं जारी रखें। इसे हर Mac पर **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह नेटवर्क पोर्ट खोलता है)। जिस Mac को आप खोलना चाहते हैं, उस पर **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें। इस Mac पर चैट के शीर्षक के बाईं ओर कंप्यूटर पिकर में **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद पिकर में **यह Mac** और आपके कंप्यूटर दिखते हैं: किसी एक को चुनें, तो उसका dsh दाएं साइडबार के ब्राउज़र टैब में (या ब्राउज़र विंडो में) खुलता है, उसकी अपनी चैट, टूल और फ़ाइलों के साथ। सेटिंग पैनल में आप कंप्यूटर का नाम बदल सकते हैं और उन्हें हटा सकते हैं। यह पैनल उन कंप्यूटर की सूची भी दिखाता है जो यह Mac खोल सकते हैं (**हटाएं** किसी एक को तुरंत डिस्कनेक्ट कर देता है)। | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="स्क्रीनशॉट: रिमोट कंप्यूटर"></a> |
88
103
  | **अपने-आप अपडेट** | <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
104
  | **बैकअप** | <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
105
  | **अपने-आप बैकअप** | <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> |
@@ -137,6 +152,9 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
137
152
  | Mac पर `Cmd+F`, Windows और Linux पर `Ctrl+F` | खुली चैट | **चैट में खोजें** खोलें |
138
153
  | `Enter` / `Shift+Enter`, `↓` / `↑` | **चैट में खोजें** बॉक्स | अगला / पिछला मिलान |
139
154
  | `Esc` | **चैट में खोजें** बॉक्स | बॉक्स बंद करें |
155
+ | Mac पर `Cmd+Shift+E`, Windows और Linux पर `Ctrl+Shift+E` | dsh में कहीं भी | **अगली इंतज़ार कर रही चैट** खोलें (dsh के कीबोर्ड शॉर्टकट पेज में बदलें) |
156
+ | Mac पर `Cmd+Shift+K`, Windows और Linux पर `Ctrl+Shift+K` | dsh में कहीं भी | **टास्क बोर्ड** खोलें (dsh के कीबोर्ड शॉर्टकट पेज में बदलें) |
157
+ | `1`–`9` | dsh का प्रश्न कार्ड, उसके जवाब वाले फ़ील्ड में नहीं | वह विकल्प चुनें (**विकल्प बटन**) |
140
158
 
141
159
  खुला `/` या `@` मेन्यू इन कुंजियों को खुद इस्तेमाल करता है।
142
160
 
@@ -162,17 +180,20 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
162
180
  - **इस चैट के लिए अनुमति दें:** अनुमतियां, उन्हें देने के समय के साथ, `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` में रखी जाती हैं (सिर्फ़ मालिक की अनुमति)। एक अनुमति एक चैट में एक तय टूल पर, समय सीमा खत्म होने तक (डिफ़ॉल्ट रूप से 1 घंटा), लागू होती है। अगर वह टूल लिख सकता है, तो अनुमति हर तरह के लिखने पर भी लागू होती है। इसे हेडर की चिप से रद्द करें।
163
181
  - ऑटो रिव्यू फिर भी हर कॉल पर चलता है; रिव्यू विफल होने पर कभी अपने-आप अनुमति नहीं मिलती।
164
182
  - **मोबाइल कनेक्ट:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर Host वाला हिस्सा Tether गेटवे चलाता है: पोर्ट 19390 पर HTTPS, जो सिर्फ़ आपके Wi-Fi सबनेट और आपके tailnet (100.64.0.0/10) से कनेक्शन स्वीकार करता है, और `127.0.0.1:19391` पर एक पेयरिंग पेज (सिर्फ़ यह Mac)। फ़ोन को QR कोड से मिला एक बार का कोड (5 मिनट) और Mac पर आपका **Approve** चाहिए। फ़ोन गेटवे का सर्टिफ़िकेट पिन करता है। Mac हर फ़ोन के टोकन का सिर्फ़ हैश रखता है (30 दिन, उपयोग होते रहने पर नवीनीकृत)। **Remove** उस फ़ोन के कनेक्शन तुरंत बंद कर देता है। फ़ोन dsh के सिर्फ़ मंज़ूर सूची वाले मेथड कॉल कर सकते हैं (चैट, प्रॉम्प्ट, अटैचमेंट, स्लैश कमांड, मंज़ूरियां, सवाल, मॉडल, एजेंट, लक्ष्य); सेटिंग, क्रेडेंशियल, फ़ाइल ब्राउज़र या टर्मिनल नहीं। "Tailscale only" लोकल नेटवर्क से आने वाला हर कनेक्शन मना कर देता है, पहले से खुले कनेक्शन भी। एक्सेस लॉग सबसे नई 200 कनेक्शन कोशिशें (समय, IP पता, डिवाइस का नाम, अनुमति मिली या मना हुई, और क्यों) `access.json` में रखता है; इसमें कभी कोई टोकन या पेयरिंग कोड नहीं होता। डेटा: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (सिर्फ़ मालिक की फ़ाइलें)। विवरण: [tether/README.md](tether/README.md)।
183
+ - **रिमोट कंप्यूटर:** जब तक आप इसे हर Mac पर चालू नहीं करते, यह बंद रहता है। **दूसरे कंप्यूटर को यह Mac खोलने दें** एक दूसरा HTTPS पोर्ट (19392) खोलता है, सिर्फ़ इस Mac के Tailscale पते पर (Wi-Fi पर नहीं, और Bonjour से इसकी घोषणा नहीं होती)। किसी दूसरे Mac को एक बार का पेयरिंग लिंक (5 मिनट), मेल खाने वाला सर्टिफ़िकेट (पिन किया हुआ) और आपका **मंज़ूर करें** चाहिए। यह Mac उसके टोकन का सिर्फ़ हैश रखता है। पेयर किए गए कंप्यूटर को इस Mac पर dsh का पूरा नियंत्रण मिलता है, जैसे आप इसे यहीं इस्तेमाल कर रहे हों: चैट, मॉडल, टूल, फ़ाइलें और टर्मिनल। सेटिंग पैनल में उसे हटाएं, तो उसके कनेक्शन तुरंत बंद हो जाते हैं। जो Mac किसी दूसरे Mac को खोलता है, वह उस कंप्यूटर का टोकन `$DSH_HOME/storages/dsh-composer-plus/computers.json` में रखता है (सिर्फ़ मालिक की फ़ाइल)। आप जो भी कंप्यूटर चुनते हैं, उसके लिए वह `127.0.0.1` पर एक रिले खोलता है। पेज को एक बार का लिंक (60 सेकंड) मिलता है, और रिले सिर्फ़ अपना पेज स्वीकार करता है (अपना पता, कोई दूसरी साइट नहीं)। जो पेज किसी दूसरे Mac ने खोला है, उसमें कंप्यूटर पिकर नहीं दिखता और वह इस Mac के कंप्यूटर नहीं बदल सकता।
165
184
  - **अपडेट:** Host वाला हिस्सा `api.github.com` से नवीनतम रिलीज़ और `registry.npmjs.org` से वही वर्शन पूछता है; आपके या आपकी चैट के बारे में कुछ नहीं भेजा जाता। इंस्टॉलेशन dsh के प्लगइन मैनेजर (`pnpm add dsh-composer-plus@<version>`; जब dsh 0.2.1 पहले से इंस्टॉल प्लगइन के लिए इसे मना करता है, तो `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, और फिर प्रोफ़ाइल उस URL को प्लगइन के स्रोत के रूप में सूचीबद्ध करती है) से होता है, इसलिए dsh की अपनी रजिस्ट्री, स्क्रिप्ट और वर्शन-संगतता जांच लागू होती हैं। प्री-रिलीज़ टैग और पुराने वर्शन कभी इंस्टॉल नहीं होते।
185
+ - **उपयोग गिनती:** दिन में एक बार Host वाला हिस्सा GitHub से इंस्टॉल किए गए वर्शन की रिलीज़ की छोटी फ़ाइल `active.txt` माँगता है (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`)। GitHub इन अनुरोधों को हर फ़ाइल के लिए गिनता है, इसलिए लेखक को सिर्फ़ यह दिखता है कि उस दिन हर वर्शन की कितनी कॉपियों ने अनुरोध किया। अनुरोध में कोई id, कुकी या आपके या आपकी चैट के बारे में कोई डेटा नहीं होता; हर अपडेट जाँच की तरह GitHub आपका IP पता देखता है। आख़िरी अनुरोध का दिन `$DSH_HOME/storages/dsh-composer-plus/active.json` में रखा जाता है। इस रिपॉज़िटरी का git checkout और नाम बदली गई कॉपी कुछ नहीं भेजते। इसके लिए कोई स्विच नहीं है।
166
186
  - **अगले संदेश का अनुमान:** डिफ़ॉल्ट रूप से चालू है। ये मॉडल कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। हर पूरे हुए टर्न के बाद Host वाला हिस्सा चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), ज़्यादा से ज़्यादा लगभग 6,000 अक्षर (सबसे नया हिस्सा), चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को भेजता है। यह dsh की अपनी प्रोवाइडर सेटिंग के ज़रिए एक अनुरोध के रूप में जाता है। चैट में कुछ सेव नहीं होता: अनुमान चैट के इतिहास में नहीं जुड़ता। स्विच और चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/predict.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)।
167
187
  - **टाइप करते समय पूरा करें:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर, टाइप करते समय हर ठहराव पर Host वाला हिस्सा अब तक टाइप किया गया टेक्स्ट, साथ ही चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), चैट के ज़्यादा से ज़्यादा लगभग 3,000 अक्षर, **टाइप करते समय पूरा करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश का अनुमान** वाला मॉडल) को भेजता है। नया ठहराव पुराने अनुरोध को रोक देता है। चैट में कुछ सेव नहीं होता। स्विच `$DSH_HOME/storages/dsh-composer-plus/complete.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
168
188
  - **प्रॉम्प्ट बेहतर करें:** जब तक आप जादुई छड़ी पर क्लिक नहीं करते, कुछ नहीं चलता। फिर Host वाला हिस्सा आपका ड्राफ़्ट, चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ, रीज़निंग और रोलबैक किए गए संदेश नहीं; ज़्यादा से ज़्यादा लगभग 6,000 अक्षर, सबसे नया हिस्सा), **सुविधाओं के आइडिया** वाला ही प्रोजेक्ट सारांश (फ़ाइलों के वही नियम: `.env*` या कुंजी फ़ाइलें नहीं, फ़ोल्डर से बाहर जाने वाला symlink नहीं, FIFO नहीं), वे पाथ जिन्हें `git status` बदले हुए के रूप में दिखाता है, और ज़्यादा से ज़्यादा 30 ट्रैक किए गए या ट्रैक न किए गए (ignore न किए गए) पाथ जिनके नामों में आपके ड्राफ़्ट वाले शब्द हैं, **प्रॉम्प्ट बेहतर करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से चैट का अपना मॉडल) को एक अनुरोध के रूप में भेजता है। उस सारांश के अलावा फ़ाइलों का कोई कंटेंट नहीं भेजा जाता। चैट या प्रोजेक्ट में कुछ नहीं लिखा जाता: जवाब सिर्फ़ कंपोज़र में आपके ड्राफ़्ट की जगह लेता है, और उसे भेजना है या नहीं, यह आप तय करते हैं। चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/improve.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
169
189
  - **लक्ष्य जांच:** यह सिर्फ़ तब चलती है, जब एजेंट किसी अपने-आप चलने वाले राउंड में `/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
190
  - **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
171
191
  - **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
172
- - **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। **नया टास्क** dsh की अपनी नई चैट खोलता है, और पहला संदेश आप dsh के कंपोज़र में लिखते हैं, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। Host वाला हिस्सा उस चैट के पहले संदेश को कार्ड के प्रॉम्प्ट के रूप में रखता है और उसे (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती। **होवर पर प्रगति** इस Mac पर चैट का लॉग पढ़ती है। **तेज़ (AI के बिना)** (डिफ़ॉल्ट) में कुछ नहीं भेजा जाता। **AI सारांश** में, जब तक किसी चल रहे कार्ड का प्रगति बॉक्स दिखता है (या जब तक Tether का बोर्ड खुला है, ज़्यादा से ज़्यादा 8 चल रहे कार्ड के लिए), Host हिस्सा उस चैट का सबसे नया हिस्सा (ज़्यादा से ज़्यादा लगभग 6,000 अक्षर: आपके संदेश, एजेंट के टेक्स्ट जवाब, उसके टूल कॉल और उनके नतीजों का आख़िरी हिस्सा; रीज़निंग और रोलबैक किए गए संदेश नहीं) बिना टूल के एक अनुरोध में चैट के मॉडल को भेजता है। यह दोबारा तभी भेजता है जब चैट आगे बढ़ी हो, और हर चैट के लिए ज़्यादा से ज़्यादा 20 सेकंड में एक बार। नोट सिर्फ़ मेमोरी में रहता है; सेटिंग `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` में रहती है (सिर्फ़ मालिक की फ़ाइल)।
192
+ - **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। **नया टास्क** dsh की अपनी नई चैट खोलता है, और पहला संदेश आप dsh के कंपोज़र में लिखते हैं, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। Host वाला हिस्सा उस चैट के पहले संदेश को कार्ड के प्रॉम्प्ट के रूप में रखता है और उसे (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000), साथ ही उन चैट की ID भी, जिन्हें आपने **×** या **सब हटाएं** से बोर्ड से हटाया है (सबसे नई 5,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती। **होवर पर प्रगति** इस Mac पर चैट का लॉग पढ़ती है। **तेज़ (AI के बिना)** (डिफ़ॉल्ट) में कुछ नहीं भेजा जाता। **AI सारांश** में, जब तक किसी चल रहे कार्ड का प्रगति बॉक्स दिखता है (या जब तक Tether का बोर्ड खुला है, ज़्यादा से ज़्यादा 8 चल रहे कार्ड के लिए), Host हिस्सा उस चैट का सबसे नया हिस्सा (ज़्यादा से ज़्यादा लगभग 6,000 अक्षर: आपके संदेश, एजेंट के टेक्स्ट जवाब, उसके टूल कॉल और उनके नतीजों का आख़िरी हिस्सा; रीज़निंग और रोलबैक किए गए संदेश नहीं) बिना टूल के एक अनुरोध में चैट के मॉडल को भेजता है। यह दोबारा तभी भेजता है जब चैट आगे बढ़ी हो, और हर चैट के लिए ज़्यादा से ज़्यादा 20 सेकंड में एक बार। नोट सिर्फ़ मेमोरी में रहता है; सेटिंग `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` में रहती है (सिर्फ़ मालिक की फ़ाइल)।
173
193
  - **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
174
194
  - **ब्लॉक की गई कमांड:** नियम और स्विच `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर `bash` और `pwsh` कॉल का सिर्फ़ कमांड टेक्स्ट पढ़ती है; यह न कुछ चलाती है, न कुछ भेजती है।
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 उसी रूट से नोट पढ़ता और बदलता है।
195
+ - **सीक्रेट इनपुट:** मान केवल जवाब के अनुरोध में कार्ड से (या Tether से, उस गेटवे के ज़रिए जो अनुरोध की सामग्री लॉग नहीं करता) Host तक जाता है। Host उसे `$DSH_HOME/storages/dsh-composer-plus/secrets/<यादृच्छिक नाम>` में लिखता है (फ़ोल्डर 0700, फ़ाइल 0600); प्रोजेक्ट, चैट लॉग या टूल परिणाम में कुछ नहीं जाता। Host उस चैट के बाद के टूल परिणामों में मान को `[secret]` से बदलने के लिए उसे मेमोरी में रखता है। फ़ाइल और यह प्रति चैट का टर्न खत्म होने पर और dsh शुरू होने पर हटा दी जाती हैं। स्विच पास की `secrets.json` फ़ाइल में है। एजेंट इस फ़ाइल के साथ जो कमांड चलाता है, वह मान को वहाँ भेज सकती है जहाँ वह कमांड भेजती है: यही इसका उद्देश्य है।
196
+ - **प्रोजेक्ट मेमोरी:** जब तक आप इसे चालू नहीं करते, यह बंद रहती है। चालू रहने पर, सबसे ऊपर के स्तर की चैट का हर टर्न पूरा होने के बाद 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 उसी रूट से नोट पढ़ता और बदलता है। **मेमोरी वर्शन इतिहास** (डिफ़ॉल्ट रूप से चालू) हर सेव से पहले मेमोरी फ़ाइलों की एक कॉपी उनके पास `memory/history/` में रखता है (केवल मालिक की फ़ाइलें, हर मेमोरी के लिए नवीनतम 50); यह किसी मॉडल को कुछ नहीं भेजता। **मेमोरी को AGENTS.md में एक्सपोर्ट करें** किसी मॉडल को कुछ नहीं भेजता और केवल **AGENTS.md लिखें** पर क्लिक करने पर लिखता है: यह उस मेमोरी के प्रोजेक्ट फ़ोल्डर की `AGENTS.md` ही पढ़ता और लिखता है (केवल फ़ोल्डर के अंदर की सामान्य फ़ाइल, बाहर जाने वाले सिमलिंक से कभी नहीं), और केवल उसका चिह्नित भाग बदलता है। **पुराने मेमोरी नोट्स खोजें** किसी मॉडल को कुछ नहीं भेजता और कुछ नहीं लिखता: यह प्रोजेक्ट फ़ोल्डर के अंदर के पाथ realpath से जाँचता है (कोई फ़ाइल पढ़ी नहीं जाती), `package.json` को केवल फ़ोल्डर के अंदर की सामान्य फ़ाइल के रूप में पढ़ता है, और वहाँ एक बार `git for-each-ref` चलाता है। **इस चैट में मेमोरी का उपयोग न करें** हर उस चैट को जिसके लिए आप इसे बंद करते हैं, पास की `memory-chats.json` में रखता है (केवल मालिक की फ़ाइल, नवीनतम 500); ऐसी चैट अपने मॉडल को कोई मेमोरी नहीं भेजती। **चैट से मेमोरी नोट्स सुझाएँ** तब तक कुछ नहीं भेजता जब तक आप **मेमोरी के लिए सुझाएँ** पर क्लिक नहीं करते; तब यह चैट के प्रोजेक्ट के सेव किए गए नोट्स और ग्लोबल नोट्स, और चैट के अपने संदेश और टेक्स्ट जवाब (टूल आउटपुट और रोलबैक किए गए संदेश नहीं; फ़ॉर्क में पैरेंट की कॉपी नहीं; अधिकतम लगभग 24,000 अक्षर) चैट के अपने मॉडल को बिना टूल के एक अनुरोध में भेजता है। सुझाव केवल **स्वीकार करें** पर सेव होता है।
176
197
  - **बैकअप:** कुछ भी आपके कंप्यूटर से बाहर नहीं जाता। आर्काइव `~/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 प्रोसेस दर्ज रहता है (रेस्क्यू कंसोल इन्हें पढ़कर बहाली से मना करता है)।
177
198
  - **रेस्क्यू कंसोल:** टर्मिनल का एक मेन्यू; यह कोई नेटवर्क पोर्ट नहीं खोलता। बहाली सिर्फ़ dsh होम के बगल में एक नए फ़ोल्डर में लिखती है (फ़ाइलें `O_EXCL | O_NOFOLLOW` के साथ, symlink सबसे आखिर में और उनके टारगेट तक कभी नहीं जाया जाता), और ऐसा आर्काइव मना कर देती है जिसमें असुरक्षित नाम (`..`, absolute पाथ), डिवाइस या FIFO, एक से ज़्यादा टॉप फ़ोल्डर, या किसी लिंक के नीचे की एंट्री हो।
178
199
 
@@ -194,7 +215,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
194
215
  - **चैट पंक्ति पर ब्रांच लेबल नहीं है:** साइडबार “एक ही सूची में” व्यू में नहीं है (“वर्कस्पेस” और “वर्कस्पेस ट्री” में किसी भी चैट पंक्ति पर लेबल नहीं दिखता), यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
195
216
  - **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
196
217
  - **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
197
- - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.20.0`), ऊपर इंस्टॉल वाला नोट देखें।
218
+ - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.21.0`), ऊपर इंस्टॉल वाला नोट देखें।
198
219
  - **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
199
220
  - **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
200
221
  - **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
@@ -215,11 +236,17 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
215
236
  - dsh की कतार में `move` कार्रवाई नहीं है, इसलिए प्लगइन का Host वाला हिस्सा कतार वाले संदेश को ही dsh की कतार में खिसकाता है (एक बदलाव, वही संदेश)। इमेज या फ़ाइलों वाले संदेश भी खिसकते हैं। सिर्फ़ आपके अपने संदेश खिसकते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब अपनी जगह पर रहता है। अगर आपके खींचते समय कोई संदेश भेजा जाना शुरू हो जाता है, तो कुछ नहीं खिसकता और एक सूचना यह बताती है।
216
237
  - अगर नया वर्शन dsh की कोई सेटिंग नहीं बदलता, तो dsh 0.2.1 अपडेट तुरंत लोड करता है; बाकी मामलों में, और dsh 0.2.0 पर, इसे लोड करने के लिए dsh रीस्टार्ट करें। प्लगइन आपके लिए dsh कभी रीस्टार्ट नहीं करता। जिन वेब/CLI प्रोफ़ाइल में dsh का प्लगइन मैनेजर नहीं है, वे सिर्फ़ नए वर्शन की जानकारी देती हैं।
217
238
  - **Composer Plus N में नया क्या है** नोट्स को **ऐप्लिकेशन की भाषा** की भाषा में दिखाता है। किसी दूसरे क्षेत्र वाली UI भाषा को उसकी मूल भाषा के नोट्स मिलते हैं (`en-GB` को अंग्रेज़ी नोट्स, `zh-TW` को `zh` के चीनी नोट्स)। जिस भाषा के नोट्स नहीं हैं (जिसे कोई दूसरा भाषा पैक जोड़ता है, या `pt-PT`, जो `pt-BR` नहीं है), उसमें अंग्रेज़ी नोट्स दिखते हैं। नोट्स नए वर्शन के साथ आते हैं। अगर चल रही कॉपी में पढ़ने लायक नोट्स फ़ाइल (`release-notes.json`) नहीं है, तो विंडो GitHub के अंग्रेज़ी नोट्स दिखाती है।
239
+ - **नोट के साथ अस्वीकार करें** नोट को इंतज़ार कर रहे टर्न में एक संदेश के रूप में भेजता है, फिर अनुरोध अस्वीकार करता है; dsh नोट को चैट में आपके संदेश के रूप में दिखाता है। जब नोट फ़ील्ड खुली रहती है, तब कार्ड पर सिर्फ़ **रद्द करें** और **अस्वीकार करें** दिखते हैं, इसलिए कोई क्लिक गलती से अनुरोध को अनुमति नहीं दे सकता; `Esc` या **रद्द करें** से dsh के बटन वापस आ जाते हैं। खाली नोट कुछ नहीं भेजता (dsh का अपना **अस्वीकार करें** इस्तेमाल करें)। अगर नोट जाने के बाद अस्वीकार करना विफल होता है (उदाहरण के लिए, इस बीच अनुरोध का जवाब कहीं और दे दिया गया), तो नोट चैट में रहता है और मॉडल उसे अपने अगले कदम पर पढ़ता है। बटन dsh के मंज़ूरी कार्ड के मार्कअप (`data-approval-key`) में जाता है, क्योंकि dsh में कार्ड की कार्रवाइयों के लिए कोई जगह (slot) नहीं है; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो बटन नहीं दिखता और dsh का अपना **अस्वीकार करें** पहले की तरह काम करता है। एक नोट में ज़्यादा से ज़्यादा 4,000 अक्षर हो सकते हैं।
240
+ - **सीक्रेट इनपुट** मान के केवल सटीक टेक्स्ट को छिपाता है: उसी चैट के बाद के टूल परिणामों में उसकी जगह `[secret]` आता है। फिर भी एजेंट शेल कमांड से फ़ाइल पढ़कर मान को किसी दूसरे रूप में (base64, उसका एक हिस्सा, बीच में स्पेस के साथ) प्रिंट कर सकता है, और वह रूप मॉडल तक पहुँचता है। एजेंट के अपने फ़ाइल टूल (read, grep, write, edit) सीक्रेट फ़ोल्डर नहीं खोल सकते। अगर मान कोई आम शब्द भी है, तो उस चैट के दूसरे परिणामों में भी `[secret]` दिखता है। फ़ाइल टर्न खत्म होने तक रहती है; अगर टर्न के बीच dsh बंद हो जाए, तो अगली शुरुआत उसे हटा देती है। एक चैट में एक समय में केवल एक खुला अनुरोध हो सकता है। यह टूल हर मॉडल अनुरोध में लगभग 870 अक्षर (अनुमानित लगभग 220 टोकन) जोड़ता है: उपयोग न करें तो इसे बंद करें।
241
+ - **जवाब में उद्धरण** टेक्स्ट को वैसे ही उद्धृत करता है जैसा पेज दिखाता है: कोड ब्लॉक, तालिका या सूची बिना Markdown चिह्नों के सादी पंक्तियों के रूप में आती है। अगर चुनाव एक जवाब में शुरू होकर दूसरे में खत्म होता है, या सोच, किसी टूल पंक्ति या आपके अपने संदेश को छूता है, तो बटन नहीं दिखता: एक ही जवाब के अंदर चुनें। dsh में टेक्स्ट चुनाव के लिए कोई स्लॉट नहीं है, इसलिए बटन dsh की चैट संरचना से जवाब ढूंढता है; अगर dsh अपडेट यह संरचना बदल दे, तो बटन नहीं दिखेगा। जब उद्धरण फ़ील्ड के अंत में आता है, तो उसके बाद एक और खाली पंक्ति जुड़ती है, ताकि आपकी अगली पंक्ति उसके नीचे शुरू हो; भेजते समय dsh अंत की खाली पंक्तियां हटा देता है।
242
+ - **साइड चैट** dsh के अपने सिर्फ़-पढ़ने वाले मोड से सिर्फ़ पढ़ने के लिए है: फ़ाइल टूल लिख नहीं सकते, और शेल कमांड dsh के बिना-लिखने वाले सैंडबॉक्स में चलती हैं (या सैंडबॉक्स शुरू न हो पाए तो नहीं चलतीं)। एजेंट फिर भी dsh के मंज़ूरी कार्ड से ज़्यादा पहुंच मांग सकता है, और नेटवर्क कॉल (जैसे API अनुरोध) फिर भी कंप्यूटर के बाहर कुछ बदल सकती है। कॉपी उस सबसे नए पल पर बनती है जब कतार में कोई संदेश इंतज़ार नहीं कर रहा था, इसलिए कतार में संदेश रहते पूछा गया सवाल उनके बाद हुई बातें नहीं देखता। चैट का चल रहा चरण कॉपी में बंद कर दिया जाता है, इसलिए साइड चैट उस चरण की शुरुआत जानती है, उसका नतीजा नहीं। साइड चैट एक सामान्य चैट है: वह साइडबार में रहती है और आपके मॉडल इस्तेमाल में गिनी जाती है; उसे वहीं आर्काइव करें। वापस लाएं सिर्फ़ साइड चैट के अपने संदेश लेता है (ज़्यादा से ज़्यादा 12,000 अक्षर) और हर सवाल का सिर्फ़ आख़िरी जवाब; टूल कॉल के बीच एजेंट के नोट नहीं आते। dsh प्लगइन को दाएं साइडबार में चैट दिखाने का स्लॉट नहीं देता, इसलिए साइड चैट मुख्य व्यू में खुलती है।
243
+ - **डिफ़ नोट** सिर्फ़ बदलाव पैनल में काम करता है, dsh के अपने पिछला टर्न व्यू में नहीं। रेंज डिफ़ के एक ही ब्लॉक (एक `@@` हिस्से) में रहनी चाहिए। नोट इस ब्राउज़र के स्टोरेज में रहते हैं, इसलिए दूसरा ब्राउज़र या दूसरे कंप्यूटर पर dsh उन्हें नहीं देखता; Tether अपने नोट मेमोरी में रखता है। नोट क्लिक के समय की पंक्तियां रखता है: एजेंट बाद में फ़ाइल बदले तो भी नोट पुरानी पंक्तियां और संख्याएं दिखाता है। हर चैट में ज़्यादा से ज़्यादा 50 नोट, हर नोट में 2,000 अक्षर और 40 पंक्तियां (उसके बाद `…` पंक्ति)।
218
244
  - **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
219
245
  - **कंपोज़र में फ़ोकस बनाए रखें** सिर्फ़ `/` कमांड या स्किल के बाद फ़ोकस वापस देता है। जब तक dsh कमांड प्रोसेस करता है, कंपोज़र कुछ मिलीसेकंड तक सिर्फ़ पढ़ने लायक रहता है, इसलिए उस समय दबाई गई कुंजियां खो जाती हैं। अगर dsh का `/` मेन्यू अभी भी खुला है, तो `Enter` हाइलाइट की गई पंक्ति चुनता है और कुछ नहीं भेजता।
220
246
  - **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
221
247
  - **चैट हेडर को विंडो में फ़िट करें** dsh के चैट हेडर को dsh के बनाए क्लास नामों (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) से ढूंढता है, क्योंकि dsh इसके लेआउट के लिए कोई हुक नहीं देता। अगर dsh का अपडेट ये नाम बदल दे, तो हेडर वैसा ही दिखता है जैसा dsh बनाता है। बहुत संकरे चैट कॉलम में हेडर दो या तीन पंक्तियां ले सकता है, इसलिए संदेशों के ऊपर की जगह कम हो जाती है।
222
- - **मोबाइल कनेक्ट** सिर्फ़ macOS पर काम करता है (यह `en0`, `openssl`, `swift` और `dns-sd` इस्तेमाल करता है)। यह तय पोर्ट 19390 और 19391 इस्तेमाल करता है, इसलिए हर Mac पर एक समय में सिर्फ़ एक dsh इसे चला सकता है (फ़ोन की Mac सूची में हर Mac एक एंट्री है)। फ़ोन को सूचनाएं सिर्फ़ तब मिलती हैं, जब Tether खुला हो या अभी-अभी बैकग्राउंड में गया हो (कोई पुश सेवा नहीं)। जब तक आप Tether में "Settings → Notifications → Send notifications" चालू नहीं करते, Tether सूचनाएं नहीं भेजता। यह स्विच डिफ़ॉल्ट रूप से बंद रहता है, और इसे चालू करने पर iOS अनुमति मांगता है। iOS ऐप अभी App Store पर नहीं है: इसे Xcode से `tether/ios` से बनाएं। "Tailscale only" के लिए भी Mac पर Wi-Fi या Ethernet पता ज़रूरी है (गेटवे सिर्फ़ ऐसे पते के साथ शुरू होता है)। एक्सेस लॉग हर Mac का अलग होता है और सिर्फ़ सबसे नई 200 कोशिशें रखता है; एक मिनट के अंदर दोहराई गई कोशिश उसी पंक्ति की गिनती एक बढ़ाती है। Tether का ऐप लॉक iPhone की लॉक स्क्रीन पर सूचनाओं के प्रीव्यू नहीं छिपाता: उन्हें iOS सेटिंग में बंद करें। Tether के हरे बिंदु Mac के हिसाब से चलते हैं: जिस चैट को आप dsh में खोलते हैं, उसका बिंदु फ़ोन पर भी हट जाता है। जिस चैट को आप Tether में खोलते हैं, उसका बिंदु सिर्फ़ फ़ोन पर हटता है। Mac पर dsh का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
248
+ - **मोबाइल कनेक्ट** सिर्फ़ macOS पर काम करता है (यह `en0`, `openssl`, `swift` और `dns-sd` इस्तेमाल करता है)। यह तय पोर्ट 19390 और 19391 इस्तेमाल करता है, इसलिए हर Mac पर एक समय में सिर्फ़ एक dsh इसे चला सकता है (फ़ोन की Mac सूची में हर Mac एक एंट्री है)। फ़ोन को सूचनाएं सिर्फ़ तब मिलती हैं, जब Tether खुला हो या अभी-अभी बैकग्राउंड में गया हो (कोई पुश सेवा नहीं)। जब तक आप Tether में "Settings → Notifications → Send notifications" चालू नहीं करते, Tether सूचनाएं नहीं भेजता। Tether यह स्विच और इसके घंटे हर पेयर किए गए Mac के लिए अलग रखता है। यह स्विच हर Mac पर डिफ़ॉल्ट रूप से बंद रहता है, और इसे चालू करने पर iOS अनुमति मांगता है। iOS ऐप अभी App Store पर नहीं है: इसे Xcode से `tether/ios` से बनाएं। "Tailscale only" के लिए भी Mac पर Wi-Fi या Ethernet पता ज़रूरी है (गेटवे सिर्फ़ ऐसे पते के साथ शुरू होता है)। एक्सेस लॉग हर Mac का अलग होता है और सिर्फ़ सबसे नई 200 कोशिशें रखता है; एक मिनट के अंदर दोहराई गई कोशिश उसी पंक्ति की गिनती एक बढ़ाती है। Tether का ऐप लॉक iPhone की लॉक स्क्रीन पर सूचनाओं के प्रीव्यू नहीं छिपाता: उन्हें iOS सेटिंग में बंद करें। Tether के हरे बिंदु Mac के हिसाब से चलते हैं: जिस चैट को आप dsh में खोलते हैं, उसका बिंदु फ़ोन पर भी हट जाता है। जिस चैट को आप Tether में खोलते हैं, उसका बिंदु सिर्फ़ फ़ोन पर हटता है। Mac पर dsh का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
249
+ - **रिमोट कंप्यूटर** के लिए दोनों Mac पर Tailscale चाहिए, और जिस Mac को आप खोलते हैं, उस पर Composer Plus और यह फ़ीचर चालू होना चाहिए। वह Mac स्लीप में नहीं होना चाहिए और उस पर dsh चलना चाहिए। दूसरा कंप्यूटर स्क्रीन पर दिख रही चैट के दाएं साइडबार के ब्राउज़र टैब में खुलता है। यह टैब उसी चैट का होता है, इसलिए दूसरी चैट अपना साइडबार दिखाती है। चैट न हो (या ब्राउज़र टैब के बिना dsh web हो), तो कंप्यूटर ब्राउज़र विंडो में खुलता है। पिकर सिर्फ़ तब दिखता है, जब मुख्य हिस्से में कोई चैट या नई चैट की स्क्रीन हो; टास्क बोर्ड पर यह नहीं दिखता। यह पोर्ट 19392 इस्तेमाल करता है (हर Mac पर सिर्फ़ एक dsh दूसरे कंप्यूटर को अंदर आने दे सकता है)। जिस कंप्यूटर को आपने किसी दूसरे कंप्यूटर के पेज के अंदर खोला है, उसमें पिकर नहीं होता, इसलिए वहां से आप तीसरा Mac नहीं खोल सकते।
223
250
  - सेशन लिंक चैट के अंदर काम करता है; उस पर क्लिक करने से चैट नहीं खुलती। **संदेश लिंक कॉपी करें** से बना लिंक अपना संदेश सिर्फ़ dsh 0.2.1 और बाद के वर्शन में खोलता है, और सिर्फ़ किसी चैट के संदेश से (dsh 0.2.0 में यूज़र टेक्स्ट के नियम नहीं हैं, इसलिए वहां लिंक कॉपी तो होता है, पर सादे टेक्स्ट की तरह दिखता है)। जो संदेश किसी रोलबैक ने हटाया, या जिसे कॉम्पैक्ट करने से dsh के लोड किए गए इतिहास से हटा दिया गया, वह नहीं दिख सकता: तब लिंक यही बताता है। 🔗 बटन dsh की संदेश पंक्तियों से जुड़ते हैं; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो वे नहीं दिखते।
224
251
  - **सभी को पढ़ा हुआ मार्क करें** dsh के अपने अपठित बिंदुओं को dsh के ऐसे हिस्से से बदलता है, जो सार्वजनिक API नहीं है (dsh के सेशन स्टेटस की `completionUnread` सूची)। अगर dsh का कोई अपडेट इसका नाम बदलता है, तो आइटम नहीं दिखता। आइटम dsh के प्रोजेक्ट वाले "…" मेन्यू में जाता है, जिसमें प्लगइन के लिए कोई slot नहीं है; अगर dsh वह मेन्यू बदलता है, तो भी आइटम नहीं दिखता।
225
252
  - **कतार वाले संदेश को उसी जगह एडिट करें** उस संदेश को नहीं बदलता जो इस बीच भेजा जाने लगा, और उस संदेश को ओवरराइट नहीं करता जो इस बीच बदल गया (जैसे iPhone पर Tether में): एक सूचना यह बताती है। नई इमेज के लिए ऐसा मॉडल चाहिए जो इमेज लेता हो (dsh की अपनी इमेज सीमाएं लागू होती हैं), और नई फ़ाइल का अपलोड पूरा होने के बाद ही संदेश सेव हो सकता है। सिर्फ़ आपके अपने कतार वाले संदेश एडिट होते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब एडिट नहीं होता। प्लगइन अपडेट के बाद सिर्फ़ टेक्स्ट वाले एडिट तुरंत काम करते हैं: इमेज या फ़ाइल वाला संदेश सेव करने से पहले dsh रीस्टार्ट करें (Host वाला हिस्सा शुरू होने पर लोड होता है)।
@@ -234,6 +261,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
234
261
  - **वर्कस्पेस ट्री में ब्रांच** बिना क्लिक के 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 की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
235
262
  - **चैट में खोजें** सिर्फ़ वही खोजता है, जो पेज दिखाता है: लोड हो चुके संदेश और जवाब (पुराने संदेशों के लिए ऊपर स्क्रॉल करें या **पहले के लोड करें** पर क्लिक करें), बंद टूल स्टेप नहीं और किसी टूल के आउटपुट में फ़ोल्ड किया गया टेक्स्ट भी नहीं। यह ज़्यादा से ज़्यादा 2,000 मिलान गिनता है (उसके बाद "2000+")। यह ब्राउज़र का हाइलाइट API इस्तेमाल करता है (Chromium 105 और बाद के वर्शन; डेस्कटॉप ऐप में यह है): पुराने ब्राउज़र में गिनती और एक मिलान से दूसरे पर जाना काम करता है, पर रंग नहीं दिखता। Mac पर `Cmd+F` (Windows और Linux पर `Ctrl+F`) इसे सिर्फ़ तब खोलता है, जब स्क्रीन पर कोई चैट हो; बाकी जगहों पर ब्राउज़र की अपनी खोज पहले की तरह काम करती है। Mac पर `Ctrl+F` टेक्स्ट फ़ील्ड में अपना macOS काम करता रहता है (कर्सर एक अक्षर आगे जाता है)।
236
263
  - **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** सिर्फ़ वही जानता है जो dsh की विंडो देखती है: दूसरे ऐप में काम गिना नहीं जाता, इसलिए dsh के बैकग्राउंड में होने पर यह 30 सेकंड बाद इंतज़ार कर रही चैट खोल सकता है। यह dsh को सामने नहीं लाता। कोई कुंजी दबाए, क्लिक किए या माउस हिलाए बिना पढ़ना निष्क्रिय माना जाता है। यह सिर्फ़ dsh के नारंगी बिंदु (सवाल, मंज़ूरी या प्लान रिव्यू) या हरे बिंदु (पूरा हुआ ऐसा टर्न जिसे आपने अभी तक नहीं खोला) वाली चैट देखता है; सबएजेंट का अनुरोध उसकी पैरेंट चैट में दिखता है। नारंगी चैट पहले खुलती हैं। हरी चैट खोलने से उसका बिंदु हट जाता है, इसलिए अगली हरी चैट के 30 सेकंड आपकी अगली कुंजी, क्लिक, माउस हिलाने, स्क्रॉल व्हील या टच के बाद ही शुरू होते हैं: लौटने पर बाकी हरे बिंदु वहीं रहते हैं। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कोई दूसरी चैट नहीं खुलती; जिस चैट से आप जवाब दिए बिना हटे, वह अगले 30 सेकंड तक उपयोग न होने पर फिर से खुल सकती है। 30 सेकंड को बदला नहीं जा सकता।
264
+ - **अगली इंतज़ार कर रही चैट** वही चैट गिनती है जो **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** गिनती है: dsh का नारंगी बिंदु (ऐसा सवाल, मंज़ूरी या प्लान रिव्यू जिसका जवाब आप यहां दे सकते हैं) और हरा बिंदु (पूरा हुआ ऐसा टर्न जिसे आपने अभी तक नहीं खोला); सबएजेंट का अनुरोध उसकी पैरेंट चैट में दिखता है। dsh यह दर्ज नहीं करता कि कोई चैट कब से इंतज़ार कर रही है, इसलिए क्रम उस पल से गिना जाता है जब इस विंडो ने उसे देखा: रीलोड के बाद, पहले से इंतज़ार कर रही चैट dsh के क्रम में रहती हैं। यह कुंजी dsh का शॉर्टकट है: Linux के ब्राउज़र में इसकी कोई कुंजी नहीं होती, जब तक आप dsh के कीबोर्ड शॉर्टकट पेज में कोई कुंजी सेट न करें, और कोई ब्राउज़र एक्सटेंशन या दूसरा ऐप `Cmd+Shift+E` पहले ले सकता है। dsh के साइडबार हेडर में एक्सटेंशन की कोई जगह नहीं है, इसलिए बटन हेडर की संरचना में जोड़ा जाता है। अगर dsh अपडेट इसे बदल दे, तो बटन नहीं दिखता, लेकिन कुंजी काम करती रहती है। पतले साइडबार में यह बटन नहीं होता।
265
+ - **विकल्प बटन** सिर्फ़ उन जवाबों को पढ़ता है जो विकल्पों की सूची पर खत्म होते हैं: 1 से शुरू होने वाली, 1 से 9 आइटम की क्रमांकित सूची, जो जवाब का आखिरी हिस्सा हो और किसी शीर्षक या बोल्ड पंक्ति "विकल्प" या "अगले कदम" के ठीक नीचे हो (या अंग्रेज़ी शब्द "Options", "Choices" और "Next steps", और ऐप की दूसरी भाषाओं में यही शब्द)। जवाब के बीच की सूची, कोड ब्लॉक की सूची या किसी दूसरे शीर्षक के नीचे की सूची को बटन नहीं मिलते। Composer Plus एजेंट से ऐसी सूची लिखने को नहीं कहता। बटन केवल सबसे नए जवाब के नीचे दिखते हैं, जब चैट निष्क्रिय हो और संदेश बॉक्स खाली हो, और केवल तब जब Composer Plus जान ले कि रोलबैक ने कौन-से जवाब वापस लिए। dsh के प्रश्न कार्ड पर, प्रश्न दिखने के बाद पहले 0.8 सेकंड में 1–9 कुंजियां कुछ नहीं करतीं, ताकि किसी और काम के लिए दबाई गई कुंजी ऐसा विकल्प न चुन ले जिसे आपने नहीं पढ़ा। dsh के प्रश्न कार्ड के लिए कोई कुंजी API नहीं है, इसलिए कुंजियां dsh के मार्कअप में कार्ड के बटन ढूंढती हैं। अगर कोई dsh अपडेट यह मार्कअप बदल दे, तो कुंजियां कुछ नहीं करतीं।
237
266
  - रीस्टार्ट से पहले भेजी गई सूचना पर क्लिक करने से सिर्फ़ dsh सामने आता है।
238
267
  - सक्रिय प्रोजेक्ट dsh के सेव किए गए प्रोजेक्ट क्रम के ज़रिए खिसकाए जाते हैं, इसलिए नया क्रम रीस्टार्ट के बाद भी बना रहता है। किसी प्रोजेक्ट से बाहर की चैट ("बिना समूह") नहीं खिसकाई जा सकतीं; dsh उन्हें हमेशा आखिर में दिखाता है।
239
268
  - dsh के साइडबार के व्यू के विकल्प वाले मेन्यू में कोई एक्सटेंशन पॉइंट नहीं है, इसलिए हाल के प्रोजेक्ट का विकल्प dsh के अपने मेन्यू में जोड़ा जाता है। अगर dsh का कोई अपडेट वह मेन्यू बदलता है, तो विकल्प नहीं दिखता और सभी प्रोजेक्ट दिखते रहते हैं। फ़िल्टर प्रोजेक्ट की पंक्तियों पर काम करता है, इसलिए **एक ही सूची में** फ़िल्टर नहीं होता। **वर्कस्पेस ट्री** में, जब तक पैरेंट फ़ोल्डर के अंदर कोई प्रोजेक्ट सक्रिय है, तब तक पैरेंट फ़ोल्डर दिखता रहता है, और जो चैट पंक्तियाँ पिछले 2 घंटों में सक्रिय नहीं रहीं, वे भी छिप जाती हैं; **वर्कस्पेस** में सिर्फ़ प्रोजेक्ट की पंक्तियाँ फ़िल्टर होती हैं। फ़िल्टर यह पढ़ता है कि dsh कौन-सा व्यू दिखा रहा है, dsh की सेव की गई व्यू सेटिंग से (यह सार्वजनिक API नहीं है); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो **वर्कस्पेस ट्री** को **वर्कस्पेस** की तरह फ़िल्टर किया जाता है। प्रोजेक्ट की स्थिति भी यही सेटिंग पढ़ती है: **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के प्रोजेक्ट की चैट भी गिनती है; अगर dsh सेटिंग का नाम बदलता है, तो हर पंक्ति सिर्फ़ अपनी चैट दिखाती है। **स्थिति के अनुसार** की भी ऐसी ही सीमा है: dsh में क्रम के लिए कोई slot नहीं है, इसलिए आइटम और पंक्तियों का क्रम dsh के मेन्यू और सूची के मार्कअप से जुड़ते हैं।
@@ -249,9 +278,16 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
249
278
  - **नई चैट में जारी रखें** चैट (संदेश, टूल कॉल और हर टूल नतीजे का आखिरी हिस्सा, ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा) चैट के अपने मॉडल को भेजता है। हैंडऑफ़ नोट से कोई फ़ैसला या फ़ाइल छूट सकती है: शुरू करने से पहले उसे पढ़ें। नई चैट सिर्फ़ नोट और लिंक की गई चैट को जानती है (dsh पुरानी चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ता है); उसका मॉडल कॉन्टेक्स्ट छोटा शुरू होता है, पुरानी चैट जैसी है वैसी रहती है। हर चैट के लिए एक समय में एक ही नोट या शुरुआत चलती है।
250
279
  - **कॉन्टेक्स्ट का ब्योरा** dsh के अपने नियम (हर टोकन पर लगभग 4 अक्षर) से अनुमान दिखाता है, वही नियम जो dsh की कॉन्टेक्स्ट रिंग में है; मॉडल की अपनी गिनती अलग हो सकती है। टूल की परिभाषाएं सबसे नए अनुरोध की होती हैं। यह कॉन्टेक्स्ट वैसा दिखाता है जैसा चैट लॉग में है; अभी चल रहा टर्न अपने अगले कदम के बाद दिखता है।
251
280
  - **नियोजित चरण** से टोकन तभी बचते हैं जब मॉडल सच में योजना बनाए: चालू रहने पर हर अनुरोध में `plan_next_steps` टूल और एक छोटा निर्देश (लगभग 500 टोकन) जाता है, उन चैट में भी जहाँ मॉडल कभी योजना नहीं बनाता। शर्त सिर्फ़ वही साबित करती है जो उसमें लिखा है (जैसे: बिल्ड का एग्ज़िट कोड 0 था), यह नहीं कि काम सही है। `ok` dsh के अपने नतीजे वाले निशान पढ़ता है (`[exit code: N]`, टाइमआउट, सैंडबॉक्स से इनकार); जो कमांड शून्य से अलग एग्ज़िट कोड दिए बिना विफल हो, वह पास मानी जाती है। चरण एक-एक करके चलते हैं; एक साथ तैयार दो चरण मॉडल को लौटते हैं। चरण का संदेश चैट के मॉडल के असिस्टेंट संदेश के रूप में सेव होता है (dsh में प्लगइन के लिखे संदेश के लिए कोई निशान नहीं है), इसलिए उसके टेक्स्ट में लिखा होता है कि इसे Composer Plus ने चलाया। Tether में नहीं है।
252
- - **टास्क बोर्ड** वे चैट दिखाता है जिन्हें dsh इस विंडो में अपनी सूची में दिखाता है: किसी प्रोजेक्ट के बाहर की चैट सिर्फ़ **सभी प्रोजेक्ट** में दिखती है, और हर चैट की अपनी ब्रांच का फ़ोल्डर (`<project>/.worktrees/<name>`) अपने प्रोजेक्ट में गिना जाता है। कार्ड का कॉलम चैट की लाइव स्थिति है, इसलिए कार्ड खींचे नहीं जा सकते: टर्न खत्म होने पर चैट **पूरा हुआ** में जाती है, एरर या रोकने के बाद भी, और फिर से चलने पर **प्रगति में** लौट आती है। हरा बिंदु dsh का अपना पूरा होने वाला बिंदु है, जिसे dsh सिर्फ़ इसी विंडो में रखता है: पेज फिर से लोड होने के बाद खत्म हुई चैट इसके बिना दिखती हैं। **पूरा हुआ** सबसे नई 50 चैट दिखाता है (**N पुराने टास्क दिखाएं** बाकी चैट दिखाता है)। **प्रोजेक्ट खोजें** किसी प्रोजेक्ट को सिर्फ़ उसके नाम से ढूंढता है, उसके फ़ोल्डर पाथ से नहीं। **पिछले 2 घंटों में सक्रिय** किसी प्रोजेक्ट को तब छिपाता है जब उसकी हर चैट 2 घंटे से पुरानी, निष्क्रिय और पढ़ी हुई हो; बोर्ड फिर भी वह प्रोजेक्ट दिखाता है जो आपने चुना है। **नया टास्क** इस विंडो की नई चैट में से सिर्फ़ सबसे नई चैट याद रखता है: अगर आप पहला संदेश जाने से पहले कोई दूसरी चैट खोलते हैं, तो वह चैट तब तक **करना है** में **नया टास्क** के रूप में रहती है जब तक आप उसमें नहीं लिखते, लेकिन बोर्ड अपने-आप सिर्फ़ सबसे नई चैट के लिए लौटता है। पेज फिर से लोड होने के बाद बिना संदेश वाली नई चैट बोर्ड पर नहीं होती (dsh उसे अपने खाली नए सेशन के रूप में रखता है)। टैग हर टास्क के लिए उसके पहले संदेश से एक मॉडल कॉल से आते हैं: वे गलत हो सकते हैं, और जो चैट आपने बोर्ड पर शुरू नहीं की, उसके कोई टैग नहीं होते। शीर्षक dsh का अपना चैट शीर्षक है (dsh की शीर्षक सर्विस, चैट के मॉडल के साथ); जब तक वह नहीं आता, कार्ड पहले संदेश की पहली लाइन दिखाता है। **जवाब दें** चैट के सिर्फ़ सबसे नए अनुरोध का जवाब देता है: अगर उस अनुरोध का जवाब कहीं और (दूसरी विंडो, Tether, ऑटो रिव्यू) दिया जा चुका है या चैट कुछ नया पूछती है, तो पैनल यह बताता है और कुछ नहीं भेजता। पुराने वर्शन में टिप्पणियों और एजेंट टूल वाली टास्क सूची थी; वह अब नहीं है, और पुरानी `board.json` नहीं दिखाई जाती। विचार और रूप emanuele-em के [Kanzo](https://github.com/emanuele-em/kanzo) (AGPL-3.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता।
281
+ - **टास्क बोर्ड** वे चैट दिखाता है जिन्हें dsh इस विंडो में अपनी सूची में दिखाता है: किसी प्रोजेक्ट के बाहर की चैट सिर्फ़ **सभी प्रोजेक्ट** में दिखती है, और हर चैट की अपनी ब्रांच का फ़ोल्डर (`<project>/.worktrees/<name>`) अपने प्रोजेक्ट में गिना जाता है। कार्ड का कॉलम चैट की लाइव स्थिति है, इसलिए कार्ड खींचे नहीं जा सकते: टर्न खत्म होने पर चैट **पूरा हुआ** में जाती है, एरर या रोकने के बाद भी, और फिर से चलने पर **प्रगति में** लौट आती है। हरा बिंदु dsh का अपना पूरा होने वाला बिंदु है, जिसे dsh सिर्फ़ इसी विंडो में रखता है: पेज फिर से लोड होने के बाद खत्म हुई चैट इसके बिना दिखती हैं। **पूरा हुआ** सबसे नई 50 चैट दिखाता है (**N पुराने टास्क दिखाएं** बाकी चैट दिखाता है)। **प्रोजेक्ट खोजें** किसी प्रोजेक्ट को सिर्फ़ उसके नाम से ढूंढता है, उसके फ़ोल्डर पाथ से नहीं। **पिछले 2 घंटों में सक्रिय** किसी प्रोजेक्ट को तब छिपाता है जब उसकी हर चैट 2 घंटे से पुरानी, निष्क्रिय और पढ़ी हुई हो; बोर्ड फिर भी वह प्रोजेक्ट दिखाता है जो आपने चुना है। **नया टास्क** इस विंडो की नई चैट में से सिर्फ़ सबसे नई चैट याद रखता है: अगर आप पहला संदेश जाने से पहले कोई दूसरी चैट खोलते हैं, तो वह चैट तब तक **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में रहती है जब तक आप उसमें नहीं लिखते, लेकिन बोर्ड अपने-आप सिर्फ़ सबसे नई चैट के लिए लौटता है। पेज फिर से लोड होने के बाद बिना संदेश वाली नई चैट बोर्ड पर नहीं होती (dsh उसे अपने खाली नए सेशन के रूप में रखता है)। टैग हर टास्क के लिए उसके पहले संदेश से एक मॉडल कॉल से आते हैं: वे गलत हो सकते हैं, और जो चैट आपने बोर्ड पर शुरू नहीं की, उसके कोई टैग नहीं होते। शीर्षक dsh का अपना चैट शीर्षक है (dsh की शीर्षक सर्विस, चैट के मॉडल के साथ); जब तक वह नहीं आता, कार्ड पहले संदेश की पहली लाइन दिखाता है। **×** और **सब हटाएं** कार्ड को सिर्फ़ बोर्ड से हटाते हैं: कोई चैट डिलीट नहीं होती। **पहले जैसा करें** सिर्फ़ 8 सेकंड तक और सिर्फ़ इसी विंडो में दिखता है; बाद में **हटाए गए (N)** → **बोर्ड पर वापस रखें** किसी कार्ड को वापस लाता है, और जो चैट फिर से चलती है, वह अपने-आप लौट आती है। **सब हटाएं** पहले पूछता है और दिख रहे प्रोजेक्ट के पढ़े हुए खत्म हुए कार्ड हटाता है (**सभी प्रोजेक्ट** चुने होने पर सभी प्रोजेक्ट के), **N पुराने टास्क दिखाएं** के पीछे वाले कार्ड भी; बिना पढ़ा (हरा) कार्ड बना रहता है। dsh अपना हरा बिंदु सिर्फ़ इसी विंडो में रखता है, इसलिए पेज फिर से लोड होने के बाद सब हटाएं ऐसा कार्ड भी हटा सकता है जिसका जवाब आपने नहीं पढ़ा। यह सूची इस Mac पर हर विंडो और Tether के लिए रखी जाती है; जब इसमें 5,000 चैट हो जाती हैं, तो सबसे पुरानी चैट लौट आती हैं। **जवाब दें** चैट के सिर्फ़ सबसे नए अनुरोध का जवाब देता है: अगर उस अनुरोध का जवाब कहीं और (दूसरी विंडो, Tether, ऑटो रिव्यू) दिया जा चुका है या चैट कुछ नया पूछती है, तो पैनल यह बताता है और कुछ नहीं भेजता। पुराने वर्शन में टिप्पणियों और एजेंट टूल वाली टास्क सूची थी; वह अब नहीं है, और पुरानी `board.json` नहीं दिखाई जाती। विचार और रूप emanuele-em के [Kanzo](https://github.com/emanuele-em/kanzo) (AGPL-3.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता। `Cmd+Shift+K` एक dsh शॉर्टकट है: Linux पर ब्राउज़र में इसकी कोई डिफ़ॉल्ट कुंजी नहीं होती (dsh के कीबोर्ड शॉर्टकट पेज में सेट करें), और कोई ब्राउज़र एक्सटेंशन या दूसरा ऐप इसे पहले ले सकता है। कार्ड **पूरा हुआ** से तब हटता है जब dsh का अपना हरा बिंदु चला जाता है (आपने चैट खोली), या, जो चैट बोर्ड के पीछे खुली चैट रहते हुए खत्म हुई, उसके लिए तब जब वह चैट ऊपर किसी पैनल के बिना दिखती है। पढ़ा गया यह हाल dsh के अपने बिंदुओं की तरह सिर्फ़ इसी dsh विंडो में रहता है: रीलोड के बाद या दूसरी विंडो में हर खत्म हुई चैट पढ़ी गई मानी जाती है, इसलिए वह **हाल में पूरे हुए** में होती है।
253
282
  - **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
254
283
  - **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (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 की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
284
+ - **मेमोरी वर्शन इतिहास** हर मेमोरी (हर प्रोजेक्ट और ग्लोबल मेमोरी) के नवीनतम 50 वर्शन रखता है; पुराने हटा दिए जाते हैं। एक वर्शन में एक नोट नहीं, उस प्रोजेक्ट की पूरी मेमोरी होती है। **रीस्टोर करें** उस वर्शन की सभी फ़ाइलें (विषय सहित) वापस रखता है, और वर्शन खोलने के बाद मेमोरी बदल गई हो तो मना कर देता है; रीस्टोर से पहले की मेमोरी एक नया वर्शन बन जाती है, इसलिए आप उसे पूर्ववत कर सकते हैं। स्विच बंद रहने पर कोई नया वर्शन नहीं रखा जाता और **रीस्टोर करें** मना कर देता है; रखे गए वर्शन बने रहते हैं। इस सुविधा से पहले का कोई वर्शन नहीं है: इतिहास इंस्टॉल करने के बाद की पहली सेव से शुरू होता है।
285
+ - **मेमोरी को AGENTS.md में एक्सपोर्ट करें** केवल एक प्रोजेक्ट मेमोरी के नोट्स लिखता है; ग्लोबल नोट्स, स्रोत और तारीखें नहीं लिखी जातीं। अगला एक्सपोर्ट पूरे चिह्नित भाग को बदल देता है, इसलिए उसके अंदर हाथ से किया बदलाव खो जाता है (diff पहले दिखा देता है); चिह्नों के बाहर का पाठ बना रहता है। चिह्न टूटे हों (एक न हो या दो बार हो), तो आपके ठीक करने तक एक्सपोर्ट मना कर देता है। 512 kB से बड़ी AGENTS.md, प्रोजेक्ट फ़ोल्डर से बाहर जाने वाला सिमलिंक और सामान्य फ़ाइल के अलावा कुछ भी मना कर दिया जाता है। प्रीव्यू के बाद AGENTS.md या नोट्स बदलें, तो **AGENTS.md लिखें** मना कर देता है और आप फिर से एक्सपोर्ट करते हैं।
286
+ - **मेमोरी नोट का स्रोत लिंक** इस वर्शन को इंस्टॉल करने के बाद सेव हुए नोट्स के लिए काम करता है: पुराना नोट केवल अपनी चैट बताता है (या कुछ नहीं), इसलिए **स्रोत** केवल चैट खोलता है या दिखता नहीं। संदेश न रहा हो (रोलबैक ने उसे वापस लिया, या चैट हटा दी गई), तो चैट खुलती है और एक सूचना बताती है कि संदेश वहाँ नहीं है।
287
+ - **मेमोरी को दूसरे प्रोजेक्ट में कॉपी करें** एक बार में अधिकतम 100 नोट्स कॉपी करता है, और केवल उस प्रोजेक्ट में जो dsh की सूची में है (यह dsh की अपनी प्रोजेक्ट सूची पढ़ता है; विंडो से कोई पाथ नहीं आता)। हर कॉपी अलग होती है: बाद में एक प्रोजेक्ट में नोट बदलने से कॉपी नहीं बदलती। चुना गया एक भी नोट न समाए (लक्ष्य की MEMORY.md या विषय भरा हो, या 40 विषय पहले से हों), तो कुछ भी कॉपी नहीं होता। जिस नोट का पाठ और विषय लक्ष्य में पहले से है, वह छोड़ दिया जाता है और संख्या बताई जाती है।
288
+ - **पुराने मेमोरी नोट्स खोजें** केवल वही ढूँढता है जो नोट किसी जाने-पहचाने रूप में लिखता है: कोड अंश में पाथ (`src/cart.ts`), `npm run` के बाद npm स्क्रिप्ट (या `npm test`, `pnpm lint`), "ब्रांच" शब्द के पास कोड अंश में ब्रांच नाम। प्रोजेक्ट फ़ोल्डर से बाहर जाने वाला पाथ नहीं बताया जाता; स्क्रिप्ट तभी जाँची जाती है जब प्रोजेक्ट में `package.json` हो, और ब्रांच केवल git रिपॉज़िटरी में। एक बार में अधिकतम 200 चीज़ें जाँची जाती हैं। चेतावनी का अर्थ "गलत" नहीं, "अभी नहीं मिला" है: बाद में बिल्ड से बनने वाली फ़ाइल भी बताई जाती है।
289
+ - **इस चैट में मेमोरी का उपयोग न करें** उस चैट के अगले मॉडल अनुरोध से लागू होता है: जो अनुरोध पहले से चल रहा है, वह वैसा ही रहता है। चल रही चैट में बदलने से उसका सिस्टम प्रॉम्प्ट एक बार बदलता है, इसलिए उस एक अनुरोध में मॉडल प्रदाता का कैश उपयोग नहीं हो सकता। सबएजेंट अपनी रूट चैट का अनुसरण करता है। मेमोरी बंद रहने के दौरान चैट को मिले संदेश समीक्षा नहीं पढ़ती, बाद में फिर से चालू करने पर भी नहीं। dsh 0.2.0 में नई चैट स्क्रीन पर बटन के लिए जगह नहीं है: बटन पहले संदेश के बाद चैट हेडर में दिखता है।
290
+ - **चैट से मेमोरी नोट्स सुझाएँ** अधिकतम 10 सुझाव दिखाता है और उन्हें 30 मिनट तक और dsh के रीस्टार्ट होने तक रखता है; उसके बाद स्वीकार करने पर आपसे फिर से सुझाव माँगने को कहा जाता है। लंबी चैट अपने नए संदेश भेजती है: सबसे पुराने एजेंट जवाब पहले छोड़े जाते हैं। सुझाव गलत हो सकता है: स्वीकार करने से पहले पढ़ें, और बाद में नोट बदलने के लिए **मेमोरी खोलें** का उपयोग करें। अस्वीकार किया गया सुझाव अगले क्लिक पर फिर आ सकता है।
255
291
  - **बैकअप** एक ही तय फ़ोल्डर इस्तेमाल करता है, `~/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 के आर्काइव को रखे जाने वाले बैकअप की अपनी गिनती में गिनता है और उन्हें हटा सकता है।
256
292
  - **बहाली:** सिर्फ़ रेस्क्यू कंसोल में चलती है, जब dsh बंद हो, और पूरे dsh होम को बदल देती है। पुराना होम उसके बगल में `.dsh.pre-restore-<time>` के रूप में तब तक रहता है, जब तक आप उसे हटा नहीं देते, इसलिए डिस्क पर दोनों के लिए जगह चाहिए। चैट अपने प्रोजेक्ट पाथ बनाए रखती हैं: दूसरे कंप्यूटर पर, किसी दूसरे पाथ पर रखा प्रोजेक्ट तब तक गायब दिखता है, जब तक आप उसे फिर से नहीं जोड़ते। dsh होम से बाहर इशारा करने वाले symlink (जैसे किसी दूसरे फ़ोल्डर से लिंक की गई skills) लिंक के रूप में वापस आते हैं; उनके टारगेट उस कंप्यूटर पर होने चाहिए।
257
293
  - **सेशन लॉग जांच** हर चैट का सबसे नया लॉग dsh के उन्हीं नियमों से पढ़ती है, जिनसे dsh तय करता है कि क्या खुलेगा: जो लाइन JSON नहीं है या क्रम से बाहर है, उसे तभी खराबी गिना जाता है जब उसके बाद कोई टर्न खत्म होता है (वरना dsh उस लाइन से आगे की लाइनों के बिना चैट खोल देता है, इसलिए वह सूची में नहीं दिखती)। यह लॉग के इवेंट को dsh के अपने इवेंट नियमों से नहीं जांचती, इसलिए जिस लॉग को यह सही बताती है, वह भी dsh अपग्रेड के बाद शायद न खुले। ठीक करने पर कॉपी किसी बैकअप से ली जाती है: उस बैकअप के बाद के संदेश उस चैट से चले जाते हैं (खराब फ़ाइल बगल में रहती है)। इस dsh में खुली चैट सेटिंग में ठीक नहीं की जाती: dsh उसे पकड़े रहता है।
@@ -286,7 +322,13 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
286
322
 
287
323
  **क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है। नोट देखने या बदलने के लिए उसी पंक्ति में **मेमोरी खोलें** दबाएँ और लिखें कि क्या बदलना है।
288
324
 
289
- **क्या मैं अपनी सभी चैट को कानबान बोर्ड की तरह देख सकता हूं और वहीं से नई चैट शुरू कर सकता हूं?** हां, **टास्क बोर्ड** से (डिफ़ॉल्ट रूप से चालू): इसे बाएं साइडबार में खोलें। हर चैट **प्रगति में**, **समीक्षा** (वह आपका इंतज़ार कर रही है) या **पूरा हुआ** में एक कार्ड है। **नया टास्क** प्रोजेक्ट में dsh की नई चैट खोलता है, और आपका पहला संदेश जाने पर बोर्ड लौट आता है; चैट खोले बिना जवाब देने के लिए नारंगी कार्ड पर **जवाब दें** पर क्लिक करें।
325
+ **मैंने या AI ने मेमोरी में गलत बदलाव किया। क्या पुराने नोट्स वापस मिल सकते हैं?** हाँ, **मेमोरी वर्शन इतिहास** से (डिफ़ॉल्ट रूप से चालू): **मेमोरी खोलें** में प्रोजेक्ट चुनें, फिर **इतिहास**। बदलाव से पहले का वर्शन चुनें ताकि दिखे कि क्या वापस आएगा, फिर **रीस्टोर करें**।
326
+
327
+ **क्या मैं प्रोजेक्ट मेमोरी अपनी टीम या दूसरे एजेंट टूल के साथ साझा कर सकता हूँ?** हाँ, **मेमोरी को AGENTS.md में एक्सपोर्ट करें** से (डिफ़ॉल्ट रूप से चालू): **मेमोरी खोलें** में प्रोजेक्ट चुनें, फिर **AGENTS.md में एक्सपोर्ट करें**। diff जाँचें, फिर **AGENTS.md लिखें**, और फ़ाइल commit करें।
328
+
329
+ **क्या AI किसी लंबी चैट से बताने लायक बातें सुझा सकता है?** हाँ, **चैट से मेमोरी नोट्स सुझाएँ** से (जब **प्रोजेक्ट मेमोरी** चालू हो, डिफ़ॉल्ट रूप से चालू): चैट हेडर में **मेमोरी के लिए सुझाएँ** पर क्लिक करें, फिर रखने लायक नोट्स पर **स्वीकार करें**।
330
+
331
+ **क्या मैं अपनी सभी चैट को कानबान बोर्ड की तरह देख सकता हूं और वहीं से नई चैट शुरू कर सकता हूं?** हां, **टास्क बोर्ड** से (डिफ़ॉल्ट रूप से चालू): इसे बाएं साइडबार में खोलें। हर चैट **प्रगति में**, **समीक्षा** (वह आपका इंतज़ार कर रही है) या **पूरा हुआ** में एक कार्ड है। **नया टास्क** प्रोजेक्ट में dsh की नई चैट खोलता है, और आपका पहला संदेश जाने पर बोर्ड लौट आता है; चैट खोले बिना जवाब देने के लिए नारंगी कार्ड पर **जवाब दें** पर क्लिक करें। **पूरा हुआ** में **सब हटाएं** पहले पूछता है और आपके पढ़े हुए खत्म हुए कार्ड बोर्ड से हटाता है; **पहले जैसा करें** और **हटाए गए (N)** उन्हें वापस लाते हैं, और चैट dsh में बनी रहती हैं।
290
332
 
291
333
  **क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
292
334
 
@@ -314,10 +356,22 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
314
356
 
315
357
  **एजेंट को `npm publish` या `git push --force` चलाने से कैसे रोकें?** **सेटिंग → Composer Plus → ब्लॉक की गई कमांड**: `npm publish` टाइप करें, **ब्लॉक** या **पहले पूछना** चुनें, फिर **जोड़ें** पर क्लिक करें। **ब्लॉक** कमांड को मना करता है और एजेंट आपसे पूछता है; **पहले पूछना** हर बार मंज़ूरी कार्ड दिखाता है। सुरक्षित फ़ाइलें एजेंट के फ़ाइल टूल को कवर करती है; ब्लॉक की गई कमांड उसकी शेल कमांड को कवर करती है।
316
358
 
359
+ **क्या मैं एजेंट को बता सकता हूं कि मैंने कोई टूल कॉल क्यों अस्वीकार किया?** हां, **नोट के साथ अस्वीकार करें** के साथ (डिफ़ॉल्ट रूप से चालू): मंज़ूरी कार्ड पर **नोट के साथ अस्वीकार करें…** पर क्लिक करें, कारण या उसकी जगह क्या करना है, लिखें और **अस्वीकार करें** पर क्लिक करें। एजेंट उसी टर्न में अस्वीकृति और आपका नोट पढ़ता है।
360
+
361
+ **चैट में लिखे बिना एजेंट को पासवर्ड या टोकन कैसे दूँ?** **सीक्रेट इनपुट** से (डिफ़ॉल्ट रूप से चालू): एजेंट से `request_secret` उपयोग करने को कहें, या उसके पूछने तक रुकें। टूल की पंक्ति के कार्ड में मान टाइप करें और **सेव करें** पर क्लिक करें। एजेंट को केवल उस फ़ाइल का पाथ मिलता है जिसमें मान है, और टर्न खत्म होने पर फ़ाइल हटा दी जाती है।
362
+
363
+ **लंबे जवाब के केवल एक हिस्से का जवाब कैसे दूं?** वह हिस्सा चुनें और चुने हुए हिस्से के ऊपर **उद्धरण दें** पर क्लिक करें (**जवाब में उद्धरण**, डिफ़ॉल्ट रूप से चालू)। वह हिस्सा `> …` उद्धरण के रूप में इनपुट फ़ील्ड में जाता है, और आप उसके नीचे अपना जवाब लिखते हैं।
364
+
365
+ **क्या मैं एजेंट के काम करते समय, उसे रोके बिना, कुछ पूछ सकता हूं?** सवाल लिखें और इनपुट फ़ील्ड में **साइड चैट में पूछें** पर क्लिक करें (**साइड चैट**, डिफ़ॉल्ट रूप से चालू)। चैट की सिर्फ़-पढ़ने वाली कॉपी जवाब देती है, जबकि चैट काम करती रहती है। साइड चैट में **वापस लाएं** जवाब को चैट के इनपुट फ़ील्ड में डालता है।
366
+
367
+ **एजेंट को उसके डिफ़ में क्या बदलना है, यह कैसे बताऊं?** **बदलाव पैनल** में फ़ाइल का डिफ़ खोलें, किसी पंक्ति पर **+** पर क्लिक करें और नोट लिखें (**डिफ़ नोट**, डिफ़ॉल्ट रूप से चालू)। फिर **इनपुट फ़ील्ड में भेजें** पर क्लिक करें: नोट फ़ाइल, पंक्ति संख्याओं और पंक्तियों के साथ इनपुट फ़ील्ड में आ जाते हैं।
368
+
317
369
  **एक चैट में ऑटो रिव्यू को एक ही टूल के बारे में बार-बार पूछने से कैसे रोकें?** मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** पर क्लिक करें। यह सिर्फ़ उसी चैट में उसी तय टूल पर लागू होता है, डिफ़ॉल्ट रूप से 1 घंटे के लिए; इसे हेडर की चिप से रद्द करें। समय **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में बदलें।
318
370
 
319
371
  **मेरा iPhone खो गया। उसे मेरे Mac तक पहुंचने से कैसे रोकूं?** साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें और उस iPhone के पास **Remove** पर क्लिक करें। उसकी कुंजी तुरंत काम करना बंद कर देती है; वह सिर्फ़ नई पेयरिंग से वापस आ सकता है, जिसे आप Mac पर मंज़ूर करें।
320
372
 
373
+ **अपने दूसरे Mac की चैट इस Mac से कैसे जारी रखूं?** दूसरे Mac पर **सेटिंग → Composer Plus → रिमोट कंप्यूटर** और **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें (इसे खुद को भेजें, जैसे AirDrop या नोट्स से)। इस Mac पर भी **रिमोट कंप्यूटर** चालू करें, चैट के शीर्षक के बाईं ओर **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद उस कंप्यूटर को उसी मेनू में चुनें।
374
+
321
375
  **क्या मैं Tether को Face ID से लॉक कर सकता हूं?** हां: Tether में "Settings → Privacy → Lock with Face ID" चालू करें। इसके बाद Tether खुलते समय और जब आप उस पर वापस आते हैं, तब Face ID (या पासकोड) मांगता है।
322
376
 
323
377
  **dsh साइडबार में सिर्फ़ आज इस्तेमाल किए गए प्रोजेक्ट कैसे दिखाएं?** साइडबार → व्यू के विकल्प (स्लाइडर आइकन) → **पिछले 2 घंटों में सक्रिय**। सभी प्रोजेक्ट दिखाने के लिए इसे फिर से चुनें।
@@ -330,6 +384,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
330
384
 
331
385
  **क्या dsh मुझसे सवाल पूछ रही चैट को खुद खोल सकता है?** हां, **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** से (डिफ़ॉल्ट रूप से चालू): जब कोई चैट जवाब, मंज़ूरी या प्लान रिव्यू का इंतज़ार कर रही हो और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh उसे खोल देता है। ऐसा टर्न पूरा करने वाली चैट जिसे आपने अभी तक नहीं पढ़ा (हरा बिंदु) भी इसी तरह, नारंगी चैट के बाद खुलती है। जब आप टाइप, स्क्रॉल या माउस हिला रहे हों, तब यह इंतज़ार करता है।
332
386
 
387
+ **क्या मैं सीधे अगली चैट पर जा सकता हूं जो मेरा इंतज़ार कर रही है?** हां, **अगली इंतज़ार कर रही चैट** से (डिफ़ॉल्ट रूप से चालू): `Cmd+Shift+E` (Windows और Linux पर `Ctrl+Shift+E`) दबाएं या साइडबार हेडर में संख्या वाले बटन पर क्लिक करें। सवाल पूछने वाली या मंज़ूरी का इंतज़ार करने वाली चैट पहले आती हैं, फिर वे चैट जिन्होंने ऐसा टर्न पूरा किया जिसे आपने अभी तक नहीं पढ़ा।
388
+
389
+ **क्या मैं एजेंट के विकल्पों का जवाब एक क्लिक से दे सकता हूं?** हां, **विकल्प बटन** से (डिफ़ॉल्ट रूप से चालू): जब कोई जवाब "विकल्प" सूची पर खत्म हो, तो उसके नीचे किसी बटन पर क्लिक करें। यह "Option N: …" आपके संदेश के रूप में भेजता है। एजेंट के प्रश्न कार्ड पर 1–9 दबाएं।
390
+
333
391
  **DeepSeek Harness का इंटरफ़ेस तुर्की, स्पेनिश, जापानी… में कैसे बदलें?** सेटिंग → Composer Plus → **ऐप्लिकेशन की भाषा**।
334
392
 
335
393
  **अपने iPhone से dsh कैसे इस्तेमाल करें?** `tether/ios` से Tether ऐप बनाएं (Xcode), **सेटिंग → Composer Plus → मोबाइल कनेक्ट (iPhone)** चालू करें, नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें, QR कोड स्कैन करें (iPhone के कैमरा से या Tether में **Scan code** से), **Connect** पर टैप करें और **Approve** पर क्लिक करें। घर से दूर होने पर दोनों डिवाइस पर Tailscale इस्तेमाल करें।
@@ -359,6 +417,10 @@ PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/ds
359
417
  PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
360
418
  # Order by status (fake model + Schedule): real-app test + its thumbnail
361
419
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
420
+ # Next waiting chat and Option buttons (fake model): the sidebar button and Cmd+Shift+E open the waiting chats in order, the Keyboard shortcuts row, the option buttons and the question card keys, switch off + their thumbnails
421
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
422
+ # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
423
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
362
424
  # every Settings feature row shows a loading screenshot and a ? link to its README row
363
425
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
364
426
  # What's new after an update: the release notes show once, Esc and Close close them
@@ -408,7 +470,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
408
470
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
409
471
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
410
472
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
411
- # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, Hide finished, the switch
473
+ # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
412
474
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
413
475
  ```
414
476