dsh-composer-plus 1.16.0 → 1.17.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.16.0`।
32
+ > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.17.0`।
33
33
 
34
34
  ## सुविधाएं
35
35
 
@@ -47,6 +47,7 @@ dsh plugin --profile web add dsh-composer-plus
47
47
  | **Shift+Tab प्लान मोड** | <a id="feature-plantoggle"></a>`Shift+Tab` ड्राफ़्ट की शुरुआत में `/plan ` जोड़ता है (हटाने के लिए फिर से दबाएं)। अगर चैट पहले से प्लान मोड में है, तो `Shift+Tab` उससे बाहर निकालता है। | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="स्क्रीनशॉट: Shift+Tab प्लान मोड"></a> |
48
48
  | **कंपोज़र में फ़ोकस बनाए रखें** | <a id="feature-keepfocus"></a>`/` कमांड या स्किल भेजने के बाद कर्सर कंपोज़र में ही रहता है, और आप तुरंत फिर से टाइप कर सकते हैं। यह उन कीबोर्ड मैक्रो के साथ भी काम करता है, जो कमांड टाइप करके `Enter` दबाते हैं। कमांड प्रोसेस करते समय dsh कंपोज़र को सिर्फ़ पढ़ने लायक (read-only) बना देता है, और तब ब्राउज़र फ़ोकस हटा देता है। यह सुविधा फ़ोकस वापस लाती है, बशर्ते फ़ोकस किसी मेन्यू, डायलॉग या दूसरे फ़ील्ड में न हो। | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="स्क्रीनशॉट: कंपोज़र में फ़ोकस बनाए रखें"></a> |
49
49
  | **प्रश्न कार्ड को विंडो में फ़िट करें** | <a id="feature-questionfit"></a>जब एजेंट आपसे कोई प्रश्न पूछता है, तो प्रश्न और उसके उत्तर कार्ड में एक साथ स्क्रॉल होते हैं, और **छोड़ें** और **सबमिट करें** नीचे दिखते रहते हैं। कार्ड विंडो की ऊंचाई का उपयोग करता है (चैट हेडर और चैट की एक पट्टी के लिए 200 px कम), इसलिए वह विंडो के साथ बड़ा और छोटा होता है। इस फ़ीचर के बिना dsh कार्ड को विंडो के 60% (अधिकतम 520 px) तक सीमित रखता है और केवल उत्तर स्क्रॉल होते हैं: लंबा प्रश्न अपना अंत, उत्तर और बटन कार्ड से बाहर धकेल सकता है। | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="स्क्रीनशॉट: प्रश्न कार्ड को विंडो में फ़िट करें"></a> |
50
+ | **चैट हेडर को विंडो में फ़िट करें** | <a id="feature-headerfit"></a>संकरी विंडो में dsh के चैट हेडर के बटन (मोड, सबएजेंट, बैकग्राउंड जॉब, इसमें खोलें, ब्रांच लेबल और अनुमति लेबल) अब एक-दूसरे को नहीं ढकते। चैट का शीर्षक कम से कम 120 px रहता है; जो बटन नहीं समाते, वे दाईं ओर दूसरी पंक्ति में चले जाते हैं, और हर बटन क्लिक करने लायक रहता है। जब सब कुछ एक पंक्ति में समा जाता है (चौड़ी विंडो), तो हेडर ठीक dsh जैसा रहता है। इस सुविधा के बिना dsh सिर्फ़ शीर्षक को छोटा करता है: सबएजेंट और बैकग्राउंड जॉब होने पर संकरे चैट कॉलम में उसके बटन एक-दूसरे पर चढ़ जाते हैं। ब्रांच लेबल (**हर चैट की अपनी ब्रांच**) और अनुमति लेबल (**इस चैट के लिए अनुमति दें**) इस स्विच के बंद होने पर भी हेडर में समा जाते हैं। | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="स्क्रीनशॉट: चैट हेडर को विंडो में फ़िट करें"></a> |
50
51
  | **एक क्लिक में जारी रखें** | <a id="feature-continuebutton"></a>रुके हुए, विफल या बीच में कटे टर्न के बाद खाली कंपोज़र में **▶** दिखता है। एक क्लिक मौजूदा बातचीत से काम फिर से शुरू करता है। इनपुट में कुछ नहीं लिखा जाता और चैट में कोई दिखने वाला संदेश नहीं जुड़ता (मॉडल को “जहां रुका था, वहीं से जारी रखें” वाला एक छोटा छिपा नोट मिलता है, क्योंकि Claude जैसे कुछ प्रोवाइडर ऐसा अनुरोध अस्वीकार करते हैं, जो असिस्टेंट के जवाब पर खत्म होता है)। कतार में रखे संदेश वहीं रहते हैं: ▶ सिर्फ़ रुके हुए काम को जारी रखता है, उसके बाद कतार चलती है। पूरे हुए टर्न के बाद सामान्य भेजें बटन ही रहता है। | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="स्क्रीनशॉट: एक क्लिक में जारी रखें"></a> |
51
52
  | **रीस्टार्ट के बाद जारी रखें** | <a id="feature-resumeafterrestart"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। अगर चैट के काम करते समय आप dsh बंद करते हैं (या वह बंद हो जाता है), तो dsh दोबारा खोलने पर वह चैट अपने आप जारी रहती है। उसे वही छिपा नोट मिलता है, जो एक क्लिक में जारी रखें में मिलता है। अगर कोई लक्ष्य राउंड (`/goal`) चल रहा था, तो लक्ष्य अपने अगले राउंड से जारी रहता है (dsh हर बार शुरू होने पर लक्ष्यों को तब तक रोक देता है, जब तक आप उन्हें फिर से शुरू नहीं करते)। जिन चैट को आपने रोका, जो पूरी हो गईं या विफल हुईं, वे जारी नहीं रहतीं। dsh में इसकी अपनी कोई सेटिंग नहीं है: वह ऐसे टर्न को सिर्फ़ बीच में रुका हुआ मार्क करता है। | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="स्क्रीनशॉट: रीस्टार्ट के बाद जारी रखें"></a> |
52
53
  | **कतार में खींचकर छोड़ें** | <a id="feature-queuereorder"></a>कतार वाले संदेशों पर एक हैंडल (⠿) दिखता है। क्रम बदलने के लिए उसे खींचें, या हैंडल पर फ़ोकस करके `↑` / `↓` दबाएं। `Esc` रद्द करता है। | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="स्क्रीनशॉट: कतार में खींचकर छोड़ें"></a> |
@@ -63,19 +64,22 @@ dsh plugin --profile web add dsh-composer-plus
63
64
  | **वर्कस्पेस ट्री में ब्रांच** | <a id="feature-branchtree"></a>सेटिंग → Composer Plus → **वर्कस्पेस ट्री में ब्रांच** (डिफ़ॉल्ट रूप से बंद)। चालू करने पर `<project>/.worktrees/` में worktree फ़ोल्डर वाली हर ब्रांच अपने प्रोजेक्ट के अंदर एक प्रोजेक्ट के रूप में दिखती है; इसे नेस्टेड देखने के लिए dsh में **व्यू के विकल्प** → **वर्कस्पेस ट्री** चुनें। जिस ब्रांच का फ़ोल्डर हटा दिया जाता है, वह सूची से हट जाती है, और dsh उसकी चैट **बिना समूह** में दिखाता है। जब प्रोजेक्ट फ़ोल्डर की किसी चैट का एजेंट एक ब्रांच बनाकर उस पर स्विच करता है (`git switch -c`, `git checkout -b`) और फ़ोल्डर में कोई अनकमिटेड बदलाव नहीं होता, तो प्रोजेक्ट फ़ोल्डर अपनी पिछली ब्रांच पर लौट आता है, ब्रांच को अपना फ़ोल्डर मिलता है, और चैट वहाँ चली जाती है: उसकी एक कॉपी ब्रांच प्रोजेक्ट में खुलकर काम जारी रखती है, और पुरानी चैट आर्काइव हो जाती है। सूची शुरू होने पर, हर 30 सेकंड में, हर टर्न के बाद और विंडो पर लौटने पर जाँची जाती है। | <a href="assets/features/branchTree.webp"><img src="assets/features/branchTree.webp" width="160" alt="स्क्रीनशॉट: वर्कस्पेस ट्री में ब्रांच"></a> |
64
65
  | **अगले संदेश का अनुमान** | <a id="feature-nextprediction"></a>डिफ़ॉल्ट रूप से चालू: आप इसे **सेटिंग → Composer Plus** में बंद कर सकते हैं। जब एजेंट कोई टर्न पूरा करता है (रुका हुआ या विफल टर्न नहीं), तो खाली कंपोज़र ग्रे टेक्स्ट में आपके अगले संदेश का अनुमान दिखाता है, साथ में **स्वीकार करने के लिए Tab** संकेत होता है। `Tab` टेक्स्ट को कंपोज़र में डालता है, पर भेजता नहीं। `Esc` उस टर्न के लिए अनुमान छिपा देता है। टाइप करना शुरू करने पर भी यह छिप जाता है, और नया टर्न इसे बदल देता है। स्विच के नीचे का **मॉडल** मेन्यू dsh के अपने मॉडल दिखाता है (वही सूची, जो dsh के मॉडल मेन्यू में है)। डिफ़ॉल्ट रूप से **dsh डिफ़ॉल्ट** चुना होता है, जो dsh के डिफ़ॉल्ट मॉडल के अनुसार चलता है। हर पूरे हुए टर्न पर एक छोटी मॉडल कॉल होती है। Tether में अनुमान खाली कंपोज़र के ऊपर दिखता है: उसे फ़ील्ड में डालने के लिए उस पर टैप करें। | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="स्क्रीनशॉट: अगले संदेश का अनुमान"></a> |
65
66
  | **टाइप करते समय पूरा करें** | <a id="feature-typingcompletion"></a>डिफ़ॉल्ट रूप से बंद: आप इसे **सेटिंग → Composer Plus** में चालू कर सकते हैं। जब आप टाइप करते हैं, कर्सर के ठीक बाद ग्रे टेक्स्ट दिखाता है कि आपका संदेश आगे कैसे बढ़ सकता है। `Tab` इसे संदेश में जोड़ता है, पर भेजता नहीं। `Esc` इसे छिपा देता है। यह केवल आपके अपने अगले शब्द सुझाता है: आपको कभी जवाब नहीं देता, और कोई गढ़ा हुआ त्रुटि संदेश या नाम नहीं जोड़ता। अगर संदेश पूरा लगता है या मॉडल को भरोसा नहीं है, तो कुछ नहीं दिखता। ग्रे टेक्स्ट के अगले अक्षर टाइप करने पर यह बना रहता है, और नई मॉडल कॉल नहीं होती। इसके स्विच के नीचे इसका अपना **मॉडल** मेन्यू है। इसकी पहली एंट्री, **अगले संदेश के अनुमान जैसा**, **अगले संदेश का अनुमान** वाला मॉडल इस्तेमाल करती है (डिफ़ॉल्ट); हर सुविधा के लिए अलग मॉडल इस्तेमाल करने के लिए कोई दूसरा मॉडल चुनें, जैसे पूरा करने के लिए कोई तेज़ मॉडल। टाइप करते समय हर ठहराव पर यह एक मॉडल कॉल करता है, इसलिए यह अनुमान से कहीं ज़्यादा टोकन खर्च करता है: कोई तेज़ और कम लागत वाला मॉडल चुनें। यह स्लैश कमांड पर, फ़ाइल चिप वाले संदेश पर, या कर्सर के आख़िर में न होने पर नहीं चलता। Tether में टाइप करते समय बाकी टेक्स्ट फ़ील्ड के ऊपर दिखता है: उसे जोड़ने के लिए उस पर टैप करें। | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="स्क्रीनशॉट: टाइप करते समय पूरा करें"></a> |
66
- | **प्रॉम्प्ट बेहतर करें** | <a id="feature-promptimprove"></a>कोई मोटा-मोटा अनुरोध टाइप करें, फिर मॉडल मेन्यू के पास जादुई छड़ी (**प्रॉम्प्ट बेहतर करें**) पर क्लिक करें। एक मॉडल कॉल उसे ज़्यादा साफ़ प्रॉम्प्ट के रूप में दोबारा लिखती है: पहले लक्ष्य, कई हिस्से हों तो छोटे क्रमांकित चरण, और चलाने वाली जांच। यह इस चैट (रोलबैक किए गए संदेशों को छोड़कर), प्रोजेक्ट की README, AGENTS.md और मैनिफ़ेस्ट, बदली गई फ़ाइलों और उन फ़ाइलों को पढ़ता है जिनके नाम आपके शब्दों से मिलते हैं, और आपकी भाषा बनाए रखता है। यह कभी फ़ाइलों के नाम नहीं गढ़ता। नया टेक्स्ट आपके ड्राफ़्ट की जगह ले लेता है, पर भेजा नहीं जाता: उसे पढ़ें, बदलें, फिर `Enter` दबाएं। `Cmd/Ctrl+Z` आपका टेक्स्ट एक चरण में वापस लाता है, और बटन (**सुधार वापस लें**) भी। अगर इसके काम करते समय आप टाइप करते हैं, तो आपका नया टेक्स्ट बना रहता है। `Esc` या दूसरा क्लिक इसे रद्द करता है। सेटिंग में इसका अपना **मॉडल** मेन्यू है (डिफ़ॉल्ट: **चैट के मॉडल जैसा**)। स्लैश कमांड या फ़ाइल चिप वाले संदेश के लिए नहीं। Tether में छड़ी फ़ील्ड के पास है। | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="स्क्रीनशॉट: प्रॉम्प्ट बेहतर करें"></a> |
67
- | **लक्ष्य जांच** | <a id="feature-goalcheck"></a>`/goal` से एक लक्ष्य शुरू करें। जब एजेंट किसी अपने-आप चलने वाले राउंड में लक्ष्य को पूरा मार्क करता है, तो लक्ष्य दो जांचों के बाद ही बंद होता है। पहले, प्रोजेक्ट की टेस्ट कमांड चैट के फ़ोल्डर में, चैट के सैंडबॉक्स मोड में चलती है। कमांड आपकी अपनी होती है या वह जो `package.json`, `Makefile`, `Cargo.toml`, `go.mod` या pytest में मिली। अगर एजेंट का अपना सबसे नया कदम इसी टेस्ट का सफल रन था, तो यह दोबारा नहीं चलती। फिर एक स्वतंत्र मॉडल कॉल, बिना टूल के, लक्ष्य, यह चैट, `git status` और टेस्ट का नतीजा पढ़ती है। अगर कोई जांच विफल होती है, तो लक्ष्य सक्रिय रहता है, एजेंट वजह पढ़ता है, फिर अगला राउंड चलता है। लक्ष्य बार के नीचे एक पंक्ति (**लक्ष्य जांच**) टेस्ट और पिछला नतीजा दिखाती है। **संपादित करें** से आप अपनी टेस्ट कमांड और समय या टोकन की सीमा तय करते हैं; सीमा पार होने पर लक्ष्य अवरुद्ध हो जाता है। **अभी चलाएं** लक्ष्य को बंद किए बिना जांच चलाता है। सेटिंग में इसका अपना **मॉडल** मेन्यू है (डिफ़ॉल्ट: **चैट के मॉडल जैसा**)। जब आप खुद लक्ष्य पूरा करते हैं, तो कुछ भी नहीं जांचा जाता। | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="स्क्रीनशॉट: लक्ष्य जांच"></a> |
68
- | **प्रोजेक्ट मेमोरी** | <a id="feature-projectmemory"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। हर प्रोजेक्ट फ़ोल्डर की अपनी मेमोरी होती है, जिसे उस प्रोजेक्ट की आगे की चैट पढ़ती हैं, जैसे DS Bot हर Bot के लिए एक मेमोरी रखता है। हर पूरे हुए टर्न के बाद चैट के मॉडल को एक कॉल नए संदेश पढ़ती है (रोलबैक किए गए नहीं), आपकी लंबे समय तक रहने वाली पसंद, फ़ैसले और तथ्य छोटे नोट के रूप में रखती है, और पुराने नोट बदलती या हटाती है। एजेंट खुद भी नोट सेव कर, हटा और खोज सकता है (`memory_remember`, `memory_forget`, `memory_recall`)। कोई नोट ग्लोबल भी हो सकता है: उसे हर प्रोजेक्ट पढ़ता है। नई चैट को नोट उसके सिस्टम प्रॉम्प्ट में मिलते हैं; बाद में सेव हुआ नोट अगली चैट से दिखता है। फ़ाइलें dsh के होम फ़ोल्डर में Markdown हैं (`storages/dsh-composer-plus/memory/`), कभी प्रोजेक्ट फ़ोल्डर में नहीं। | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट मेमोरी"></a> |
67
+ | **प्रॉम्प्ट बेहतर करें** | <a id="feature-promptimprove"></a>कोई मोटा-मोटा अनुरोध टाइप करें, फिर मॉडल मेन्यू के पास जादुई छड़ी (**प्रॉम्प्ट बेहतर करें**) पर क्लिक करें। एक मॉडल कॉल उसे ज़्यादा साफ़ प्रॉम्प्ट के रूप में दोबारा लिखती है: पहले लक्ष्य, कई हिस्से हों तो छोटे क्रमांकित चरण, और चलाने वाली जांच। यह इस चैट (रोलबैक किए गए संदेशों को छोड़कर), प्रोजेक्ट की README, AGENTS.md और मैनिफ़ेस्ट, बदली गई फ़ाइलों और उन फ़ाइलों को पढ़ता है जिनके नाम आपके शब्दों से मिलते हैं, और आपकी भाषा बनाए रखता है। यह कभी फ़ाइलों के नाम नहीं गढ़ता। नया टेक्स्ट आपके ड्राफ़्ट की जगह ले लेता है, पर भेजा नहीं जाता: उसे पढ़ें, बदलें, फिर `Enter` दबाएं। `Cmd/Ctrl+Z` आपका टेक्स्ट एक चरण में वापस लाता है, और बटन (**सुधार वापस लें**) भी। अगर इसके काम करते समय आप टाइप करते हैं, तो आपका नया टेक्स्ट बना रहता है। `Esc` या दूसरा क्लिक इसे रद्द करता है। सेटिंग में इसका अपना **मॉडल** मेन्यू है (डिफ़ॉल्ट: **चैट के मॉडल जैसा**)। `/goal <objective>` संदेश पर यह सिर्फ़ लक्ष्य को दोबारा लिखता है, पूरा होने की ऐसी शर्त के रूप में जिसे **लक्ष्य जांच** सत्यापित कर सके: आउटपुट, जिन जांचों का पास होना ज़रूरी है, चैट में दिखाने वाला सबूत, जो हिस्सा नहीं हो सकता उसे अनसुलझा मार्क करना, और वही रुकावट बने रहने पर रुकना। `/goal` कमांड बनी रहती है। दूसरे स्लैश कमांड, `/goal` के किसी कंट्रोल शब्द (`clear`, `pause`, `resume`) या फ़ाइल चिप वाले संदेश के लिए नहीं। Tether में छड़ी फ़ील्ड के पास है। | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="स्क्रीनशॉट: प्रॉम्प्ट बेहतर करें"></a> |
68
+ | **लक्ष्य जांच** | <a id="feature-goalcheck"></a>`/goal` से एक लक्ष्य शुरू करें। जब एजेंट किसी अपने-आप चलने वाले राउंड में लक्ष्य को पूरा मार्क करता है, तो लक्ष्य दो जांचों के बाद ही बंद होता है। पहले, प्रोजेक्ट की टेस्ट कमांड चैट के फ़ोल्डर में, चैट के सैंडबॉक्स मोड में चलती है। कमांड आपकी अपनी होती है या वह जो `package.json`, `Makefile`, `Cargo.toml`, `go.mod` या pytest में मिली। अगर एजेंट का अपना सबसे नया कदम इसी टेस्ट का सफल रन था, तो यह दोबारा नहीं चलती। फिर एक स्वतंत्र मॉडल कॉल, बिना टूल के, लक्ष्य, यह चैट, `git status` और टेस्ट का नतीजा पढ़ती है। मॉडल सबूतों की तालिका के साथ जवाब देता है: लक्ष्य का हर हिस्सा सत्यापित, गलत या अनसुलझा होता है, उसके सबूत और सुधार के साथ; लक्ष्य तभी बंद होता है जब हर हिस्सा सत्यापित हो। अगर कोई जांच विफल होती है, तो लक्ष्य सक्रिय रहता है, एजेंट हर खुला हिस्सा उसके सबूत और सुधार के साथ पढ़ता है, फिर अगला राउंड चलता है। लक्ष्य बार के नीचे एक पंक्ति (**लक्ष्य जांच**) टेस्ट, पिछला नतीजा और कितने हिस्से सत्यापित हुए, यह दिखाती है (तालिका देखने के लिए उस पर पॉइंटर ले जाएं)। **संपादित करें** से आप अपनी टेस्ट कमांड और समय या टोकन की सीमा तय करते हैं; सीमा पार होने पर लक्ष्य अवरुद्ध हो जाता है। टोकन सीमा में चैट के सबएजेंट भी गिने जाते हैं। **अभी चलाएं** लक्ष्य को बंद किए बिना जांच चलाता है। सेटिंग में इसका अपना **मॉडल** मेन्यू है (डिफ़ॉल्ट: **चैट के मॉडल जैसा**)। जब आप खुद लक्ष्य पूरा करते हैं, तो कुछ भी नहीं जांचा जाता। | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="स्क्रीनशॉट: लक्ष्य जांच"></a> |
69
+ | **नई चैट में जारी रखें** | <a id="feature-handoffchat"></a>साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **नई चैट में जारी रखें…**। चैट के अपने मॉडल को एक कॉल, चैट में जो दिखता है उससे एक हैंडऑफ़ नोट लिखती है: काम, आउटपुट, पूरा हुआ, फ़ैसले, खुले मुद्दे और अगला कदम (टूल कॉल और उनके नतीजे सबूत हैं; जिन कदमों को आपने रोलबैक किया, वे शामिल नहीं होते)। नोट एक डायलॉग में खुलता है: उसे पढ़ें और संपादित करें। **फिर से लिखें** एक नया नोट लिखता है। **नई चैट शुरू करें** (या `Cmd/Ctrl+Enter`) उसी प्रोजेक्ट में एक नई चैट खोलता है, जिसका पहला संदेश नोट और पुरानी चैट का लिंक होता है; पुरानी चैट जैसी है वैसी ही रहती है। जब कोई लंबी चैट भर जाए या धीमी हो जाए, या कल जारी रखना हो, तब इसका इस्तेमाल करें। प्रोजेक्ट में कुछ नहीं लिखा जाता। | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="स्क्रीनशॉट: नई चैट में जारी रखें"></a> |
70
+ | **कॉन्टेक्स्ट का ब्योरा** | <a id="feature-contextbreakdown"></a>दायां साइडबार → `+` → **कॉन्टेक्स्ट**। पेज दिखाता है कि खुली चैट के मॉडल कॉन्टेक्स्ट को अभी क्या भर रहा है और कॉन्टेक्स्ट विंडो का कितना हिस्सा इस्तेमाल हो रहा है: सिस्टम प्रॉम्प्ट, प्रोजेक्ट निर्देश (AGENTS.md), Skills, आपके संदेश, एजेंट के जवाब और टूल कॉल, टूल नतीजे (टूल के हिसाब से), MCP नतीजे (सर्वर के हिसाब से), टूल की परिभाषाएं, कॉम्पैक्शन का सारांश और दूसरे कॉन्टेक्स्ट नोट, हर एक अपने टोकन और हिस्से के साथ। किसी हिस्से के टूल या सर्वर देखने के लिए उस पर क्लिक करें। यह सिर्फ़ चैट लॉग पढ़ता है, `/compact` और रोलबैक के बाद, और किसी मॉडल को कॉल नहीं करता; हर टर्न के बाद और **रीफ़्रेश करें** से यह फिर से पढ़ता है। इससे देखें कि कोई चैट धीमी या भरी हुई क्यों है, जैसे कोई बड़ा MCP टूल नतीजा या बहुत सारी टूल परिभाषाएं। | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="स्क्रीनशॉट: कॉन्टेक्स्ट का ब्योरा"></a> |
71
+ | **सुरक्षित फ़ाइलें** | <a id="feature-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> |
72
+ | **प्रोजेक्ट मेमोरी** | <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> |
69
73
  | **इस चैट के लिए अनुमति दें** | <a id="feature-allowforchat"></a>जब ऑटो रिव्यू आपसे पूछता है, तो मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** दिखता है। इसके बाद उसी चैट में वही टूल किसी भी आर्ग्युमेंट के साथ बिना पूछे चलता है, जब तक समय सीमा खत्म नहीं होती (डिफ़ॉल्ट रूप से 1 घंटा; इसे **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में चुनें)। फिर एजेंट दोबारा पूछता है। हेडर की एक चिप अनुमतियों की सूची उनके खत्म होने के समय के साथ दिखाती है और उन्हें रद्द करती है। रीस्टार्ट के बाद भी अनुमतियां बनी रहती हैं। | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="स्क्रीनशॉट: इस चैट के लिए अनुमति दें"></a> |
70
74
  | **प्रोजेक्ट की स्थिति** | <a id="feature-projectstatus"></a>साइडबार में प्रोजेक्ट की पंक्ति वही स्पिनर / इंतज़ार / पूरा होने का संकेत दिखाती है, जो उसकी चैट दिखाती हैं। इसलिए बंद (collapsed) प्रोजेक्ट भी बताता है कि अंदर कोई चैट काम कर रही है या उसे आपकी ज़रूरत है। सबसे पहले आपका इंतज़ार कर रही चैट दिखती है, फिर पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (हरा बिंदु, तब भी जब कोई दूसरी चैट अभी चल रही हो), फिर स्पिनर। विवरण देखने के लिए उस पर पॉइंटर ले जाएं। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के हर प्रोजेक्ट (जैसे `.worktrees/` में हर ब्रांच फ़ोल्डर) की चैट भी दिखाती है, तब भी जब फ़ोल्डर बंद (collapsed) हो। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट की स्थिति"></a> |
71
- | **चैट पंक्तियों पर Git ब्रांच** | <a id="feature-sessionbranch"></a>साइडबार की हर चैट पंक्ति एक छोटे स्लेटी लेबल में वह git ब्रांच दिखाती है, जिस पर चैट के आख़िरी टर्न के समय चैट का प्रोजेक्ट फ़ोल्डर था (जैसे `main` या `feature/login`; detached HEAD होने पर कोष्ठक में छोटा कमिट ID दिखता है)। एक प्रोजेक्ट की अलग-अलग ब्रांच वाली दो चैट अब एक जैसी नहीं दिखतीं, और जब आप किसी चैट को गलत ब्रांच पर जारी रखने वाले हों, तो यह तुरंत दिख जाता है। पूरा नाम देखने के लिए लेबल पर पॉइंटर ले जाएं। Host वाला हिस्सा टर्न शुरू और ख़त्म होने पर ब्रांच पढ़ता है (`git branch --show-current`, सिर्फ़ पढ़ने के लिए); जिस चैट में यह इंस्टॉल करने के बाद से कोई टर्न नहीं हुआ, या जो फ़ोल्डर git रिपॉज़िटरी नहीं है, उसमें लेबल नहीं दिखता। अगर चैट के ऊपर वाली प्रोजेक्ट पंक्ति का नाम ब्रांच के नाम जैसा ही है (जैसे “हर चैट की अपनी ब्रांच” वाला फ़ोल्डर), तो चैट पंक्ति पर लेबल नहीं दिखता, लेकिन “एक ही सूची में” व्यू में लेबल अब भी दिखता है। | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="स्क्रीनशॉट: चैट पंक्तियों पर Git ब्रांच"></a> |
75
+ | **चैट पंक्तियों पर 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> |
72
76
  | **सभी को पढ़ा हुआ मार्क करें** | <a id="feature-markprojectread"></a>साइडबार में किसी प्रोजेक्ट के **…** बटन पर क्लिक करें → **सभी को पढ़ा हुआ मार्क करें**। उस प्रोजेक्ट की हर चैट से हरा अपठित बिंदु एक साथ हट जाता है; दूसरे प्रोजेक्ट के बिंदु बने रहते हैं। जब प्रोजेक्ट में कोई अपठित चैट नहीं होती, तो यह आइटम ग्रे दिखता है (**कोई अपठित चैट नहीं**)। | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="स्क्रीनशॉट: सभी को पढ़ा हुआ मार्क करें"></a> |
73
77
  | **सक्रिय प्रोजेक्ट पहले** | <a id="feature-activeprojectsfirst"></a>जब कोई चैट चलने लगती है या उसे आपकी ज़रूरत होती है, तो उसका प्रोजेक्ट dsh के अपने पंक्ति एनिमेशन के साथ साइडबार में सबसे ऊपर चला जाता है (वैसे ही जैसे आप उसे खींचकर वहां ले जाते)। पूरे हो चुके प्रोजेक्ट अपनी जगह पर रहते हैं; उन्हें हमेशा की तरह कहीं भी खींचें। बदला गया क्रम dsh के प्रोजेक्ट क्रम में सेव होता है, इसलिए इसे बंद करने पर मौजूदा क्रम बना रहता है। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: सक्रिय प्रोजेक्ट पहले"></a> |
74
78
  | **हाल के प्रोजेक्ट का फ़िल्टर** | <a id="feature-recentprojects"></a>साइडबार → व्यू के विकल्प (स्लाइडर आइकन) → **पिछले 2 घंटों में सक्रिय**। इसके चुने रहने पर साइडबार सिर्फ़ वे प्रोजेक्ट दिखाता है, जिनमें पिछले 2 घंटों में कोई चैट सक्रिय रही हो। इसमें शामिल हैं: इस समय में अपडेट हुई चैट, चल रही या इंतज़ार कर रही चैट, खुली हुई चैट, या पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (dsh का हरा “पूरा हुआ” बिंदु), 2 घंटे बाद भी। जिन प्रोजेक्ट में ऐसी कोई चैट नहीं है, वे छिप जाते हैं, नए और खाली प्रोजेक्ट भी। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर तब तक दिखता रहता है, जब तक उसके अंदर का कोई प्रोजेक्ट सक्रिय है, और जो चैट पिछले 2 घंटों में सक्रिय नहीं रहीं, वे भी छिप जाती हैं, इसलिए सिर्फ़ हाल की चैट दिखती हैं। सभी प्रोजेक्ट दिखाने के लिए इसे फिर से चुनें। यह चुनाव इसी डिवाइस पर याद रहता है। | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="स्क्रीनशॉट: हाल के प्रोजेक्ट का फ़िल्टर"></a> |
75
79
  | **सभी प्रोजेक्ट छोटे करें** | <a id="feature-collapseprojects"></a>जब साइडबार में कोई प्रोजेक्ट खुला होता है, तो व्यू के विकल्पों (स्लाइडर आइकन) के पास एक बटन दिखता है। सभी खुले प्रोजेक्ट एक साथ बंद करने के लिए उस पर क्लिक करें, जैसे 5 में से 3 खुले प्रोजेक्ट। जब कोई प्रोजेक्ट खुला नहीं होता, तो बटन फिर से छिप जाता है। | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="स्क्रीनशॉट: सभी प्रोजेक्ट छोटे करें"></a> |
76
80
  | **स्थिति के अनुसार क्रम** | <a id="feature-statusorder"></a>साइडबार → व्यू के विकल्प → **इसके अनुसार क्रम दें** → **स्थिति के अनुसार** (**एक ही सूची में** के साथ)। सबसे पहले पूरी हुई चैट आती हैं (dsh का “पूरा हुआ” बिंदु, जो गड़बड़ी के साथ खत्म हुए टर्न को भी मिलता है)। फिर चल रही या इंतज़ार कर रही चैट, फिर सक्रिय ऑटोमेशन (शेड्यूल) वाली चैट, और आखिर में बाकी चैट dsh के क्रम में आती हैं। पूरी हुई चैट खोलने पर वह नीचे चली जाती है। सिर्फ़ व्यू बदलता है: वापस जाने के लिए **मैन्युअल** या **पिछला अपडेट** चुनें। | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="स्क्रीनशॉट: स्थिति के अनुसार क्रम"></a> |
77
81
  | **बैकग्राउंड सूचनाएं** | <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> |
78
- | **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** | <a id="feature-idleswitch"></a>जब कोई चैट सवाल पूछती है या मंज़ूरी या प्लान रिव्यू का इंतज़ार करती है (नारंगी बिंदु) और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh वह चैट खोल देता है। जब कई चैट इंतज़ार कर रही हों, तो सबसे लंबे समय से इंतज़ार कर रही चैट पहले खुलती है; अगली चैट फिर से 30 सेकंड तक उपयोग न होने पर खुलती है। कोई कुंजी, क्लिक, माउस हिलाना, स्क्रॉल व्हील या टच 30 सेकंड को फिर से शुरू कर देता है। फ़ोकस वाले फ़ील्ड में टेक्स्ट, चुना हुआ टेक्स्ट, या खुला मेनू या डायलॉग भी स्विच को रोकता है। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कुछ नहीं बदलता। अगर आप जवाब दिए बिना इंतज़ार कर रही चैट से हट जाते हैं, तो अगले 30 सेकंड तक उपयोग न होने पर वह फिर से खुल सकती है। यह dsh के बैकग्राउंड में होने पर भी काम करता है, लेकिन dsh सामने नहीं आता। | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="स्क्रीनशॉट: निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें"></a> |
82
+ | **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** | <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> |
79
83
  | **ऐप्लिकेशन की भाषा** | <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> |
80
84
  | **मोबाइल कनेक्ट (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> |
81
85
  | **अपने-आप अपडेट** | <a id="feature-autoupdate"></a>dsh शुरू होने पर प्लगइन [GitHub की नवीनतम रिलीज़](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) जांचता है। अगर वह नई है और npm पर पहले से है, तो प्लगइन वही वर्शन dsh के अपने प्लगइन मैनेजर से इंस्टॉल करता है (सेटिंग → प्लगइन वाला ही रास्ता) और आपको सूचित करता है। इसे लोड करने के लिए dsh रीस्टार्ट करें। **सेटिंग → Composer Plus → Composer Plus अपडेट** वर्शन दिखाता है और उसमें **अपडेट जांचें** / **अभी अपडेट करें** बटन हैं। नए वर्शन के साथ dsh पहली बार शुरू होने पर **Composer Plus N में नया क्या है** विंडो उस वर्शन के रिलीज़ नोट्स एक बार दिखाती है (उसी अपडेट जांच से, कोई अतिरिक्त नेटवर्क कॉल नहीं); **बंद करें** या `Esc` से यह बंद होती है। | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="स्क्रीनशॉट: अपने-आप अपडेट"></a> |
@@ -160,7 +164,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
160
164
  - **टाइप करते समय पूरा करें:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर, टाइप करते समय हर ठहराव पर Host वाला हिस्सा अब तक टाइप किया गया टेक्स्ट, साथ ही चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), चैट के ज़्यादा से ज़्यादा लगभग 3,000 अक्षर, **टाइप करते समय पूरा करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश का अनुमान** वाला मॉडल) को भेजता है। नया ठहराव पुराने अनुरोध को रोक देता है। चैट में कुछ सेव नहीं होता। स्विच `$DSH_HOME/storages/dsh-composer-plus/complete.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
161
165
  - **प्रॉम्प्ट बेहतर करें:** जब तक आप जादुई छड़ी पर क्लिक नहीं करते, कुछ नहीं चलता। फिर Host वाला हिस्सा आपका ड्राफ़्ट, चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ, रीज़निंग और रोलबैक किए गए संदेश नहीं; ज़्यादा से ज़्यादा लगभग 6,000 अक्षर, सबसे नया हिस्सा), **सुविधाओं के आइडिया** वाला ही प्रोजेक्ट सारांश (फ़ाइलों के वही नियम: `.env*` या कुंजी फ़ाइलें नहीं, फ़ोल्डर से बाहर जाने वाला symlink नहीं, FIFO नहीं), वे पाथ जिन्हें `git status` बदले हुए के रूप में दिखाता है, और ज़्यादा से ज़्यादा 30 ट्रैक किए गए या ट्रैक न किए गए (ignore न किए गए) पाथ जिनके नामों में आपके ड्राफ़्ट वाले शब्द हैं, **प्रॉम्प्ट बेहतर करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से चैट का अपना मॉडल) को एक अनुरोध के रूप में भेजता है। उस सारांश के अलावा फ़ाइलों का कोई कंटेंट नहीं भेजा जाता। चैट या प्रोजेक्ट में कुछ नहीं लिखा जाता: जवाब सिर्फ़ कंपोज़र में आपके ड्राफ़्ट की जगह लेता है, और उसे भेजना है या नहीं, यह आप तय करते हैं। चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/improve.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
162
166
  - **लक्ष्य जांच:** यह सिर्फ़ तब चलती है, जब एजेंट किसी अपने-आप चलने वाले राउंड में `/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 चैट)।
163
- - **प्रोजेक्ट मेमोरी:** जब तक आप इसे चालू नहीं करते, यह बंद रहती है। चालू रहने पर, सबसे ऊपर के स्तर की चैट का हर टर्न पूरा होने के बाद Host हिस्सा पिछली समीक्षा के बाद आए उस चैट के अपने नए संदेश (आपके संदेश और एजेंट के टेक्स्ट जवाब; टूल आउटपुट, रीज़निंग, छिपा संदर्भ और रोलबैक किए गए संदेश नहीं; फ़ोर्क की गई चैट में पैरेंट चैट की कॉपी शामिल नहीं; ज़्यादा से ज़्यादा लगभग 16,000 अक्षर) और सेव किए गए नोट, बिना टूल वाले एक अनुरोध के रूप में चैट के अपने मॉडल को भेजता है। नोट `$DSH_HOME/storages/dsh-composer-plus/memory/` में Markdown फ़ाइलें हैं (सिर्फ़ मालिक के लिए): हर प्रोजेक्ट फ़ोल्डर के लिए `projects/<id>/` (`<id>` फ़ोल्डर के असली पाथ का हैश है; `project.json` में फ़ोल्डर लिखा रहता है), `global/`, `journal.jsonl` (हर बदलाव, पहले और बाद वाली लाइन के साथ) और `reviewed.json` (हर चैट कहां तक पढ़ी गई)। प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। जो नोट कुंजी, टोकन, पासवर्ड या पहचान संख्या जैसे दिखते हैं, वे अस्वीकार होते हैं। किसी प्रोजेक्ट के नोट उस फ़ोल्डर की हर नई चैट के सिस्टम प्रॉम्प्ट में जाते हैं, इसलिए वे उस चैट के हर अनुरोध के साथ मॉडल तक पहुंचते हैं। स्विच उसी जगह `memory.json` में है।
167
+ - **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
168
+ - **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
169
+ - **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
170
+ - **प्रोजेक्ट मेमोरी:** जब तक आप इसे चालू नहीं करते, यह बंद रहती है। चालू रहने पर, सबसे ऊपर के स्तर की चैट का हर टर्न पूरा होने के बाद 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 उसी रूट से नोट पढ़ता और बदलता है।
164
171
  - **बैकअप:** कुछ भी आपके कंप्यूटर से बाहर नहीं जाता। आर्काइव `~/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 प्रोसेस दर्ज रहता है (रेस्क्यू कंसोल इन्हें पढ़कर बहाली से मना करता है)।
165
172
  - **रेस्क्यू कंसोल:** टर्मिनल का एक मेन्यू; यह कोई नेटवर्क पोर्ट नहीं खोलता। बहाली सिर्फ़ dsh होम के बगल में एक नए फ़ोल्डर में लिखती है (फ़ाइलें `O_EXCL | O_NOFOLLOW` के साथ, symlink सबसे आखिर में और उनके टारगेट तक कभी नहीं जाया जाता), और ऐसा आर्काइव मना कर देती है जिसमें असुरक्षित नाम (`..`, absolute पाथ), डिवाइस या FIFO, एक से ज़्यादा टॉप फ़ोल्डर, या किसी लिंक के नीचे की एंट्री हो।
166
173
 
@@ -182,7 +189,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
182
189
  - **चैट पंक्ति पर ब्रांच लेबल नहीं है:** यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
183
190
  - **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
184
191
  - **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
185
- - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.16.0`), ऊपर इंस्टॉल वाला नोट देखें।
192
+ - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.17.0`), ऊपर इंस्टॉल वाला नोट देखें।
186
193
  - **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
187
194
  - **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
188
195
  - **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
@@ -205,6 +212,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
205
212
  - **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
206
213
  - **कंपोज़र में फ़ोकस बनाए रखें** सिर्फ़ `/` कमांड या स्किल के बाद फ़ोकस वापस देता है। जब तक dsh कमांड प्रोसेस करता है, कंपोज़र कुछ मिलीसेकंड तक सिर्फ़ पढ़ने लायक रहता है, इसलिए उस समय दबाई गई कुंजियां खो जाती हैं। अगर dsh का `/` मेन्यू अभी भी खुला है, तो `Enter` हाइलाइट की गई पंक्ति चुनता है और कुछ नहीं भेजता।
207
214
  - **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
215
+ - **चैट हेडर को विंडो में फ़िट करें** dsh के चैट हेडर को dsh के बनाए क्लास नामों (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) से ढूंढता है, क्योंकि dsh इसके लेआउट के लिए कोई हुक नहीं देता। अगर dsh का अपडेट ये नाम बदल दे, तो हेडर वैसा ही दिखता है जैसा dsh बनाता है। बहुत संकरे चैट कॉलम में हेडर दो या तीन पंक्तियां ले सकता है, इसलिए संदेशों के ऊपर की जगह कम हो जाती है।
208
216
  - **मोबाइल कनेक्ट** सिर्फ़ 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 का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
209
217
  - सेशन लिंक चैट के अंदर काम करता है; उस पर क्लिक करने से चैट नहीं खुलती। **संदेश लिंक कॉपी करें** से बना लिंक अपना संदेश सिर्फ़ dsh 0.2.1 और बाद के वर्शन में खोलता है, और सिर्फ़ किसी चैट के संदेश से (dsh 0.2.0 में यूज़र टेक्स्ट के नियम नहीं हैं, इसलिए वहां लिंक कॉपी तो होता है, पर सादे टेक्स्ट की तरह दिखता है)। जो संदेश किसी रोलबैक ने हटाया, या जिसे कॉम्पैक्ट करने से dsh के लोड किए गए इतिहास से हटा दिया गया, वह नहीं दिख सकता: तब लिंक यही बताता है। 🔗 बटन dsh की संदेश पंक्तियों से जुड़ते हैं; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो वे नहीं दिखते।
210
218
  - **सभी को पढ़ा हुआ मार्क करें** dsh के अपने अपठित बिंदुओं को dsh के ऐसे हिस्से से बदलता है, जो सार्वजनिक API नहीं है (dsh के सेशन स्टेटस की `completionUnread` सूची)। अगर dsh का कोई अपडेट इसका नाम बदलता है, तो आइटम नहीं दिखता। आइटम dsh के प्रोजेक्ट वाले "…" मेन्यू में जाता है, जिसमें प्लगइन के लिए कोई slot नहीं है; अगर dsh वह मेन्यू बदलता है, तो भी आइटम नहीं दिखता।
@@ -216,10 +224,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
216
224
  - **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
217
225
  - **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। अगर चैट के ऊपर वाली प्रोजेक्ट पंक्ति का नाम ब्रांच के नाम जैसा ही है (जैसे “हर चैट की अपनी ब्रांच” वाला फ़ोल्डर), तो चैट पंक्ति पर लेबल नहीं दिखता, लेकिन “एक ही सूची में” व्यू में लेबल अब भी दिखता है।
218
226
  - **हर चैट की अपनी ब्रांच** प्लान मोड में: dsh `/plan <संदेश>` को संदेश की तरह नहीं, कमांड की तरह भेजता है, इसलिए Composer Plus dsh के कंपोज़र में कमांड का सबमिट खुद संभालता है (यह सार्वजनिक API नहीं है)। अगर किसी dsh अपडेट से यह बदलता है, तो **नई ब्रांच** चुनी होने पर `/plan <संदेश>` खुली नई चैट में dsh के अपने कमांड की तरह चलता है। जब Host नई चैट में प्लान मोड चालू नहीं कर पाता, तो ब्रांच फ़ोल्डर बना रहता है और संदेश नहीं भेजा जाता, ताकि नई चैट डिफ़ॉल्ट मोड में फ़ाइलें न बदले।
219
- - **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। यह बदलाव केवल चैट के अगले चरण में होता है, इसलिए डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, साइडबार में रहता है: उसे dsh के अपने प्रोजेक्ट मेनू से हटाएँ। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
227
+ - **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, वह भी साइडबार से हट जाता है: Composer Plus शुरू होने पर और हर 30 सेकंड में ब्रांच फ़ोल्डर जाँचता है, साइडबार के किसी फ़िल्टर के बिना भी। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
220
228
  - **वर्कस्पेस ट्री में ब्रांच** बिना क्लिक के 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 की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
221
229
  - **चैट में खोजें** सिर्फ़ वही खोजता है, जो पेज दिखाता है: लोड हो चुके संदेश और जवाब (पुराने संदेशों के लिए ऊपर स्क्रॉल करें या **पहले के लोड करें** पर क्लिक करें), बंद टूल स्टेप नहीं और किसी टूल के आउटपुट में फ़ोल्ड किया गया टेक्स्ट भी नहीं। यह ज़्यादा से ज़्यादा 2,000 मिलान गिनता है (उसके बाद "2000+")। यह ब्राउज़र का हाइलाइट API इस्तेमाल करता है (Chromium 105 और बाद के वर्शन; डेस्कटॉप ऐप में यह है): पुराने ब्राउज़र में गिनती और एक मिलान से दूसरे पर जाना काम करता है, पर रंग नहीं दिखता। Mac पर `Cmd+F` (Windows और Linux पर `Ctrl+F`) इसे सिर्फ़ तब खोलता है, जब स्क्रीन पर कोई चैट हो; बाकी जगहों पर ब्राउज़र की अपनी खोज पहले की तरह काम करती है। Mac पर `Ctrl+F` टेक्स्ट फ़ील्ड में अपना macOS काम करता रहता है (कर्सर एक अक्षर आगे जाता है)।
222
- - **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** सिर्फ़ वही जानता है जो dsh की विंडो देखती है: दूसरे ऐप में काम गिना नहीं जाता, इसलिए dsh के बैकग्राउंड में होने पर यह 30 सेकंड बाद इंतज़ार कर रही चैट खोल सकता है। यह dsh को सामने नहीं लाता। कोई कुंजी दबाए, क्लिक किए या माउस हिलाए बिना पढ़ना निष्क्रिय माना जाता है। यह सिर्फ़ dsh के नारंगी बिंदु वाली चैट देखता है (सवाल, मंज़ूरी या प्लान रिव्यू); सबएजेंट का अनुरोध उसकी पैरेंट चैट में दिखता है। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कोई दूसरी चैट नहीं खुलती; जिस चैट से आप जवाब दिए बिना हटे, वह अगले 30 सेकंड तक उपयोग न होने पर फिर से खुल सकती है। 30 सेकंड को बदला नहीं जा सकता।
230
+ - **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** सिर्फ़ वही जानता है जो dsh की विंडो देखती है: दूसरे ऐप में काम गिना नहीं जाता, इसलिए dsh के बैकग्राउंड में होने पर यह 30 सेकंड बाद इंतज़ार कर रही चैट खोल सकता है। यह dsh को सामने नहीं लाता। कोई कुंजी दबाए, क्लिक किए या माउस हिलाए बिना पढ़ना निष्क्रिय माना जाता है। यह सिर्फ़ dsh के नारंगी बिंदु (सवाल, मंज़ूरी या प्लान रिव्यू) या हरे बिंदु (पूरा हुआ ऐसा टर्न जिसे आपने अभी तक नहीं खोला) वाली चैट देखता है; सबएजेंट का अनुरोध उसकी पैरेंट चैट में दिखता है। नारंगी चैट पहले खुलती हैं। हरी चैट खोलने से उसका बिंदु हट जाता है, इसलिए अगली हरी चैट के 30 सेकंड आपकी अगली कुंजी, क्लिक, माउस हिलाने, स्क्रॉल व्हील या टच के बाद ही शुरू होते हैं: लौटने पर बाकी हरे बिंदु वहीं रहते हैं। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कोई दूसरी चैट नहीं खुलती; जिस चैट से आप जवाब दिए बिना हटे, वह अगले 30 सेकंड तक उपयोग न होने पर फिर से खुल सकती है। 30 सेकंड को बदला नहीं जा सकता।
223
231
  - रीस्टार्ट से पहले भेजी गई सूचना पर क्लिक करने से सिर्फ़ dsh सामने आता है।
224
232
  - सक्रिय प्रोजेक्ट dsh के सेव किए गए प्रोजेक्ट क्रम के ज़रिए खिसकाए जाते हैं, इसलिए नया क्रम रीस्टार्ट के बाद भी बना रहता है। किसी प्रोजेक्ट से बाहर की चैट ("बिना समूह") नहीं खिसकाई जा सकतीं; dsh उन्हें हमेशा आखिर में दिखाता है।
225
233
  - dsh के साइडबार के व्यू के विकल्प वाले मेन्यू में कोई एक्सटेंशन पॉइंट नहीं है, इसलिए हाल के प्रोजेक्ट का विकल्प dsh के अपने मेन्यू में जोड़ा जाता है। अगर dsh का कोई अपडेट वह मेन्यू बदलता है, तो विकल्प नहीं दिखता और सभी प्रोजेक्ट दिखते रहते हैं। फ़िल्टर प्रोजेक्ट की पंक्तियों पर काम करता है, इसलिए **एक ही सूची में** फ़िल्टर नहीं होता। **वर्कस्पेस ट्री** में, जब तक पैरेंट फ़ोल्डर के अंदर कोई प्रोजेक्ट सक्रिय है, तब तक पैरेंट फ़ोल्डर दिखता रहता है, और जो चैट पंक्तियाँ पिछले 2 घंटों में सक्रिय नहीं रहीं, वे भी छिप जाती हैं; **वर्कस्पेस** में सिर्फ़ प्रोजेक्ट की पंक्तियाँ फ़िल्टर होती हैं। फ़िल्टर यह पढ़ता है कि dsh कौन-सा व्यू दिखा रहा है, dsh की सेव की गई व्यू सेटिंग से (यह सार्वजनिक API नहीं है); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो **वर्कस्पेस ट्री** को **वर्कस्पेस** की तरह फ़िल्टर किया जाता है। प्रोजेक्ट की स्थिति भी यही सेटिंग पढ़ती है: **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के प्रोजेक्ट की चैट भी गिनती है; अगर dsh सेटिंग का नाम बदलता है, तो हर पंक्ति सिर्फ़ अपनी चैट दिखाती है। **स्थिति के अनुसार** की भी ऐसी ही सीमा है: dsh में क्रम के लिए कोई slot नहीं है, इसलिए आइटम और पंक्तियों का क्रम dsh के मेन्यू और सूची के मार्कअप से जुड़ते हैं।
@@ -228,10 +236,13 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
228
236
  - dsh में यह चुनने का कोई एक्सटेंशन पॉइंट भी नहीं है कि **नया सेशन** कहाँ खुले। **नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस** dsh के एक ऐसे मेथड को रैप करता है जो सार्वजनिक API नहीं है (dsh की वर्कस्पेस सेवा का `startSession`)। अगर किसी dsh अपडेट में इसका नाम बदलता है, तो **नया सेशन** वहीं खुलेगा जहाँ dsh चुने (खुला या सबसे हाल का प्रोजेक्ट)। प्रोजेक्ट न बताने वाली हर कॉल डिफ़ॉल्ट का उपयोग करती है: साइडबार बटन, उसका शॉर्टकट, लोगो और **ऑटोमेशन टास्क** पेज पर **नया** भी। dsh शुरू होने पर अब भी पिछली चैट खोलता है। सामान्य फ़ोल्डर पहली बार उपयोग पर बनता है और आपके प्रोजेक्ट में जुड़ता है; Windows या Linux पर Documents फ़ोल्डर हटाया गया हो तो यह dsh के अपने फ़ोल्डर से अलग हो सकता है।
229
237
  - dsh में कंपोज़र के संकेत के लिए भी कोई एक्सटेंशन पॉइंट नहीं है, इसलिए **अगले संदेश का अनुमान** का टेक्स्ट dsh के अपने प्लेसहोल्डर (`[data-composer-placeholder]`) के ऊपर दिखता है। अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो कोई अनुमान नहीं दिखता। इसके चालू रहते, हर पूरे हुए टर्न पर एक छोटी मॉडल कॉल होती है।
230
238
  - **टाइप करते समय पूरा करें** अपना टेक्स्ट dsh के अपने कंपोज़र संकेत से दिखाता है (`--dsh-composer-hint` स्टाइल, जिसे dsh स्लैश कमांड के आर्ग्युमेंट संकेत के लिए इस्तेमाल करता है)। यह स्लैश कमांड पर, फ़ाइल या सिंबल चिप वाले संदेश पर, या कर्सर के संदेश के आख़िर में न होने पर नहीं चलता। अगर dsh का कोई अपडेट वह स्टाइल बदलता है, तो पूरा करने का कोई सुझाव नहीं दिखता। टाइप करते समय हर ठहराव पर एक मॉडल कॉल होती है।
231
- - **प्रॉम्प्ट बेहतर करें** सिर्फ़ प्रोजेक्ट का छोटा सारांश, बदले गए पाथ और वे पाथ देखता है जिनके नाम आपके शब्दों से मिलते हैं: खुद कोड नहीं। इसलिए यह सही फ़ाइल चूक सकता है, और सिर्फ़ वही पाथ बताता है जो उसे दिए गए थे। भेजने से पहले नया टेक्स्ट पढ़ें। यह स्लैश कमांड पर या फ़ाइल या सिंबल चिप वाले संदेश पर नहीं चलता (नया टेक्स्ट सादा टेक्स्ट होता है, इसलिए चिप खो जाती), और एक संदेश में ज़्यादा से ज़्यादा 8,000 अक्षर हो सकते हैं। इमेज जुड़ी रहती हैं: सिर्फ़ टेक्स्ट बदलता है। हर क्लिक पर एक मॉडल कॉल होती है; किसी शक्तिशाली मॉडल को एक मिनट लग सकता है (`Esc` रद्द करता है)।
232
- - **लक्ष्य जांच** सिर्फ़ वह पूरा होना जांचती है, जो एजेंट किसी अपने-आप चलने वाले लक्ष्य राउंड में करता है: चैट में आपके कहने पर किया गया पूरा होना, `/goal` और लक्ष्य बार नहीं जांचे जाते। एजेंट खुद टेस्ट या टेस्ट कमांड की फ़ाइलें बदल सकता है; सत्यापक चैट पढ़ता है और यह देख सकता है, पर वह दोनों तरफ़ गलत हो सकता है (गलत "पूरा नहीं हुआ" एक और राउंड लेता है; गलत "पूरा हुआ" लक्ष्य बंद कर देता है)। सत्यापक चैट और `git status` देखता है, खुद कोड नहीं। टेस्ट रन तभी दोबारा इस्तेमाल होता है, जब फ़ाइलें बदल सकने वाला एजेंट का सबसे नया कदम उसी फ़ोल्डर में बिल्कुल उसी कमांड का एजेंट का अपना सफल `bash` रन था; पाइप (`| tail`) या `&&` वाली कमांड दोबारा इस्तेमाल नहीं होती। बजट टर्न खत्म होने पर मापा जाता है, इसलिए एक टर्न उससे आगे जा सकता है। सिर्फ़ चैट की अपनी मॉडल कॉल गिनी जाती हैं (उसके सबएजेंट की नहीं)। जांच चलते समय `update_goal` इंतज़ार करता है (टेस्ट ज़्यादा से ज़्यादा 15 मिनट, सत्यापक ज़्यादा से ज़्यादा 3 मिनट)। फ़ोर्क को नया चैट id मिलता है, इसलिए वह पैरेंट चैट की अपनी टेस्ट कमांड और सीमाओं के बिना शुरू होता है। सत्यापक तक पहुंचने वाले हर पूरा होने पर एक मॉडल कॉल लगती है।
239
+ - **प्रॉम्प्ट बेहतर करें** सिर्फ़ प्रोजेक्ट का छोटा सारांश, बदले गए पाथ और वे पाथ देखता है जिनके नाम आपके शब्दों से मिलते हैं: खुद कोड नहीं। इसलिए यह सही फ़ाइल चूक सकता है, और सिर्फ़ वही पाथ बताता है जो उसे दिए गए थे। भेजने से पहले नया टेक्स्ट पढ़ें। यह `/goal <लक्ष्य>` के अलावा किसी स्लैश कमांड पर, `/goal` के किसी कंट्रोल शब्द (`clear`, `pause`, `resume`) पर या फ़ाइल या सिंबल चिप वाले संदेश पर नहीं चलता (नया टेक्स्ट सादा टेक्स्ट होता है, इसलिए चिप खो जाती), और एक संदेश में ज़्यादा से ज़्यादा 8,000 अक्षर हो सकते हैं। `/goal` के किसी लक्ष्य के लिए यह शर्तें सिर्फ़ ड्राफ़्ट और कॉन्टेक्स्ट से लिखता है; बहुत सख़्त शर्त से लक्ष्य के राउंड ज़्यादा लग सकते हैं, इसलिए भेजने से पहले उसे पढ़ें। इमेज जुड़ी रहती हैं: सिर्फ़ टेक्स्ट बदलता है। हर क्लिक पर एक मॉडल कॉल होती है; किसी शक्तिशाली मॉडल को एक मिनट लग सकता है (`Esc` रद्द करता है)।
240
+ - **लक्ष्य जांच** सिर्फ़ वह पूरा होना जांचती है, जो एजेंट किसी अपने-आप चलने वाले लक्ष्य राउंड में करता है: चैट में आपके कहने पर किया गया पूरा होना, `/goal` और लक्ष्य बार नहीं जांचे जाते। एजेंट खुद टेस्ट या टेस्ट कमांड की फ़ाइलें बदल सकता है; सत्यापक चैट पढ़ता है और यह देख सकता है, पर वह दोनों तरफ़ गलत हो सकता है (गलत "पूरा नहीं हुआ" एक और राउंड लेता है; गलत "पूरा हुआ" लक्ष्य बंद कर देता है)। सत्यापक चैट और `git status` देखता है, खुद कोड नहीं। टेस्ट रन तभी दोबारा इस्तेमाल होता है, जब फ़ाइलें बदल सकने वाला एजेंट का सबसे नया कदम उसी फ़ोल्डर में बिल्कुल उसी कमांड का एजेंट का अपना सफल `bash` रन था; पाइप (`| tail`) या `&&` वाली कमांड दोबारा इस्तेमाल नहीं होती। बजट टर्न खत्म होने पर मापा जाता है, इसलिए एक टर्न उससे आगे जा सकता है। टोकन बजट में चैट की सबएजेंट चैट की कॉल भी गिनी जाती हैं (हर टर्न के अंत में उनके सेव किए गए लॉग से पढ़ी जाती हैं, इसलिए बहुत सबएजेंट वाली चैट की जांच में थोड़ा ज़्यादा समय लगता है)। सबूत की तालिका सत्यापक के खुद चैट पढ़ने से बनती है: जिस हिस्से को वह सत्यापित कहता है, अगर वह अहम है, तो उसे आप भी खुद देखें। जांच चलते समय `update_goal` इंतज़ार करता है (टेस्ट ज़्यादा से ज़्यादा 15 मिनट, सत्यापक ज़्यादा से ज़्यादा 3 मिनट)। फ़ोर्क को नया चैट id मिलता है, इसलिए वह पैरेंट चैट की अपनी टेस्ट कमांड और सीमाओं के बिना शुरू होता है। सत्यापक तक पहुंचने वाले हर पूरा होने पर एक मॉडल कॉल लगती है।
241
+ - **सुरक्षित फ़ाइलें** एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं। यह dsh के अपने फ़ाइल टूल (`read`, `read_image`, किसी फ़ाइल पर `grep`, `write`, `edit`, `str_replace_editor`) को कवर करती है। कोई शेल कमांड (`cat .env`), एजेंट की लिखी स्क्रिप्ट, किसी सबएजेंट का शेल, कोई MCP टूल, `glob` सूची और पूरे फ़ोल्डर पर `grep` फिर भी किसी सुरक्षित फ़ाइल तक पहुंच सकते हैं। असली सीमा के लिए dsh के सैंडबॉक्स मोड इस्तेमाल करें या सीक्रेट को प्रोजेक्ट फ़ोल्डर से बाहर रखें। पैटर्न `*`, `**` और `?` समझते हैं, `{a,b}` या `[ab]` नहीं, और बड़े-छोटे अक्षरों में फ़र्क नहीं करते।
242
+ - **नई चैट में जारी रखें** चैट (संदेश, टूल कॉल और हर टूल नतीजे का आखिरी हिस्सा, ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा) चैट के अपने मॉडल को भेजता है। हैंडऑफ़ नोट से कोई फ़ैसला या फ़ाइल छूट सकती है: शुरू करने से पहले उसे पढ़ें। नई चैट सिर्फ़ नोट और लिंक की गई चैट को जानती है (dsh पुरानी चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ता है); उसका मॉडल कॉन्टेक्स्ट छोटा शुरू होता है, पुरानी चैट जैसी है वैसी रहती है। हर चैट के लिए एक समय में एक ही नोट या शुरुआत चलती है।
243
+ - **कॉन्टेक्स्ट का ब्योरा** dsh के अपने नियम (हर टोकन पर लगभग 4 अक्षर) से अनुमान दिखाता है, वही नियम जो dsh की कॉन्टेक्स्ट रिंग में है; मॉडल की अपनी गिनती अलग हो सकती है। टूल की परिभाषाएं सबसे नए अनुरोध की होती हैं। यह कॉन्टेक्स्ट वैसा दिखाता है जैसा चैट लॉग में है; अभी चल रहा टर्न अपने अगले कदम के बाद दिखता है।
233
244
  - **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
234
- - **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (dsh के प्रोजेक्ट फ़ोल्डर) की होती है: जो चैट `cd` से फ़ोल्डर बदलती है, वह अपने पहले प्रोजेक्ट की मेमोरी ही रखती है, और वही फ़ोल्डर उन्हीं फ़ाइलों तक जाने वाले दूसरे पाथ से खोला जाए तो वह भी यही मेमोरी साझा करता है। चैट शुरू होते समय अपना मेमोरी हिस्सा स्थिर कर देती है, इसलिए बाद में सेव हुआ नोट अगली चैट से दिखता है (`memory_recall` उसे तुरंत ढूंढ लेता है)। समीक्षा सिर्फ़ वही रखती है, जो मॉडल रखना तय करता है: वह कोई तथ्य छोड़ सकती है या कोई गलत बात रख सकती है; जांचने के लिए फ़ाइलें खोलें, और dsh बंद होने पर उन्हें हाथ से बदलें या हटाएं। आपके संदेश वाले हर पूरे टर्न पर एक मॉडल कॉल लगती है; विफल कॉल अगले टर्न के बाद वही संदेश फिर पढ़ती है। सब-एजेंट चैट की समीक्षा नहीं होती। यह विचार और फ़ाइल फ़ॉर्मैट [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता और DS Bot की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
245
+ - **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (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 की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
235
246
  - **बैकअप** एक ही तय फ़ोल्डर इस्तेमाल करता है, `~/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 के आर्काइव को रखे जाने वाले बैकअप की अपनी गिनती में गिनता है और उन्हें हटा सकता है।
236
247
  - **बहाली:** सिर्फ़ रेस्क्यू कंसोल में चलती है, जब dsh बंद हो, और पूरे dsh होम को बदल देती है। पुराना होम उसके बगल में `.dsh.pre-restore-<time>` के रूप में तब तक रहता है, जब तक आप उसे हटा नहीं देते, इसलिए डिस्क पर दोनों के लिए जगह चाहिए। चैट अपने प्रोजेक्ट पाथ बनाए रखती हैं: दूसरे कंप्यूटर पर, किसी दूसरे पाथ पर रखा प्रोजेक्ट तब तक गायब दिखता है, जब तक आप उसे फिर से नहीं जोड़ते। dsh होम से बाहर इशारा करने वाले symlink (जैसे किसी दूसरे फ़ोल्डर से लिंक की गई skills) लिंक के रूप में वापस आते हैं; उनके टारगेट उस कंप्यूटर पर होने चाहिए।
237
248
  - **सेशन लॉग जांच** हर चैट का सबसे नया लॉग dsh के उन्हीं नियमों से पढ़ती है, जिनसे dsh तय करता है कि क्या खुलेगा: जो लाइन JSON नहीं है या क्रम से बाहर है, उसे तभी खराबी गिना जाता है जब उसके बाद कोई टर्न खत्म होता है (वरना dsh उस लाइन से आगे की लाइनों के बिना चैट खोल देता है, इसलिए वह सूची में नहीं दिखती)। यह लॉग के इवेंट को dsh के अपने इवेंट नियमों से नहीं जांचती, इसलिए जिस लॉग को यह सही बताती है, वह भी dsh अपग्रेड के बाद शायद न खुले। ठीक करने पर कॉपी किसी बैकअप से ली जाती है: उस बैकअप के बाद के संदेश उस चैट से चले जाते हैं (खराब फ़ाइल बगल में रहती है)। इस dsh में खुली चैट सेटिंग में ठीक नहीं की जाती: dsh उसे पकड़े रहता है।
@@ -264,7 +275,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
264
275
 
265
276
  **क्या एजेंट को अपना काम खुद पूरा मार्क करने से रोका जा सकता है, जैसे loop engineering के सत्यापक लूप में?** हां, **लक्ष्य जांच** के साथ (डिफ़ॉल्ट रूप से चालू): `/goal` से एक लक्ष्य शुरू करें। जब एजेंट कहता है कि लक्ष्य पूरा हो गया, तो प्रोजेक्ट के टेस्ट चलते हैं और एक स्वतंत्र मॉडल कॉल चैट के आधार पर लक्ष्य जांचती है; अगर इनमें से कोई विफल होता है, तो लक्ष्य खुला रहता है और एजेंट वजह पढ़ता है। लक्ष्य के नीचे की **लक्ष्य जांच** पंक्ति में **संपादित करें** से अपनी टेस्ट कमांड, समय सीमा या टोकन सीमा सेट करें।
266
277
 
267
- **क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है।
278
+ **क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है। नोट देखने या बदलने के लिए उसी पंक्ति में **मेमोरी खोलें** दबाएँ और लिखें कि क्या बदलना है।
268
279
 
269
280
  **क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
270
281
 
@@ -304,7 +315,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
304
315
 
305
316
  **dsh का कोई टास्क पूरा होने या मंज़ूरी मांगने पर macOS / Windows सूचनाएं कैसे पाएं?** **बैकग्राउंड सूचनाएं** चालू रखें (डिफ़ॉल्ट) और OS की सेटिंग में DeepSeek Harness के लिए सूचनाओं की अनुमति दें।
306
317
 
307
- **क्या dsh मुझसे सवाल पूछ रही चैट को खुद खोल सकता है?** हां, **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** से (डिफ़ॉल्ट रूप से चालू): जब कोई चैट जवाब, मंज़ूरी या प्लान रिव्यू का इंतज़ार कर रही हो और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh उसे खोल देता है। जब आप टाइप, स्क्रॉल या माउस हिला रहे हों, तब यह इंतज़ार करता है।
318
+ **क्या dsh मुझसे सवाल पूछ रही चैट को खुद खोल सकता है?** हां, **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** से (डिफ़ॉल्ट रूप से चालू): जब कोई चैट जवाब, मंज़ूरी या प्लान रिव्यू का इंतज़ार कर रही हो और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh उसे खोल देता है। ऐसा टर्न पूरा करने वाली चैट जिसे आपने अभी तक नहीं पढ़ा (हरा बिंदु) भी इसी तरह, नारंगी चैट के बाद खुलती है। जब आप टाइप, स्क्रॉल या माउस हिला रहे हों, तब यह इंतज़ार करता है।
308
319
 
309
320
  **DeepSeek Harness का इंटरफ़ेस तुर्की, स्पेनिश, जापानी… में कैसे बदलें?** सेटिंग → Composer Plus → **ऐप्लिकेशन की भाषा**।
310
321
 
@@ -343,6 +354,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
343
354
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
344
355
  # Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
345
356
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
357
+ # Fit chat header to window (fake model, subagent + background jobs, branch pill, grants chip): no overlap from 1280 to 320 px, wide header unchanged + its thumbnail
358
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-header-fit.mjs /path/to/dsh/lib/bin.js
346
359
  # Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
347
360
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
348
361
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not