dsh-composer-plus 1.15.0 → 1.16.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.15.0`।
32
+ > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.16.0`।
33
33
 
34
34
  ## सुविधाएं
35
35
 
@@ -37,7 +37,7 @@ dsh plugin --profile web add dsh-composer-plus
37
37
 
38
38
  | सुविधा | उपयोग कैसे करें | स्क्रीनशॉट |
39
39
  |---|---|---|
40
- | **बदलाव पैनल** | <a id="feature-changespanel"></a>दायां साइडबार → `+` → **बदलाव**। बदली हुई फ़ाइलें `+/-` गिनती के साथ देखने के लिए **कमिट नहीं किए गए**, **स्टेज नहीं किए गए**, **स्टेज किए गए** या **ब्रांच** चुनें। किसी फ़ाइल का डिफ़ देखने के लिए उस पर क्लिक करें। **पिछला टर्न** सबसे नए टर्न का dsh का अपना रिव्यू खोलता है। ब्रांच ट्री देखने के लिए ब्रांच के नाम पर क्लिक करें (या **ट्री** चुनें)। ऊपर किसी ब्रांच पर क्लिक करने से ट्री उस ब्रांच पर जाता है, और किसी कमिट पर क्लिक करने से उसकी फ़ाइलें और डिफ़ दिखते हैं। **यह चैट** चुनने पर सिर्फ़ वे फ़ाइलें दिखती हैं, जिन्हें खुली चैट के फ़ाइल टूल (write, edit) ने उसके सभी टर्न में लिखा। साथ में पहले संदेश से अब तक का उनका कुल डिफ़ भी दिखता है। **␣** बटन व्हाइटस्पेस बदलाव छिपाता है (`git diff -w`): जिन पंक्तियों में सिर्फ़ इंडेंटेशन या लाइन के अंत बदले हैं, वे नहीं दिखतीं। किसी फ़ाइल का **…** मेन्यू → **इस फ़ाइल को बदलने वाली चैट** उसी रिपॉज़िटरी की वे चैट दिखाता है, जिनके लिखने या एडिट करने वाले टूल ने वह फ़ाइल बदली, सबसे नई पहले, और साथ में वह अनुरोध भी, जिसने बदलाव किया; क्लिक करने पर वह चैट उसी अनुरोध पर खुलती है। | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="स्क्रीनशॉट: बदलाव पैनल"></a> |
40
+ | **बदलाव पैनल** | <a id="feature-changespanel"></a>दायां साइडबार → `+` → **बदलाव**। पेज **ट्री** पर खुलता है: यह चैट की रिपॉज़िटरी का ब्रांच मैप है। तीन कार्ड ब्रांच गिनते हैं: सभी ब्रांच, मर्ज की गई ब्रांच और मर्ज होने का इंतज़ार कर रही ब्रांच। सिर्फ़ उन ब्रांच को देखने के लिए किसी कार्ड पर क्लिक करें; सभी ब्रांच फिर से देखने के लिए उस पर दोबारा क्लिक करें। हर ब्रांच अपने आख़िरी कमिट के साथ एक बॉक्स है: अगर मुख्य ब्रांच में उसका काम है तो हरा, नहीं है तो नारंगी, और मुख्य ब्रांच के लिए नीला। हर ब्रांच से एक तीर उस ब्रांच तक जाता है, जिसने उसे लिया (✅ **मर्ज की गई**), या उस ब्रांच तक, जिससे वह शुरू हुई (⏳ **इंतज़ार में**, डैश वाली लाइन)। ब्रांच के कमिट देखने के लिए किसी बॉक्स पर क्लिक करें, फिर किसी कमिट की फ़ाइलें और उनके डिफ़ देखने के लिए उस कमिट पर क्लिक करें। मर्ज कमिट की फ़ाइलें देखने के लिए **मर्ज की गई** पर क्लिक करें, या वे फ़ाइलें देखने के लिए **इंतज़ार में** पर क्लिक करें, जो ब्रांच अपने टारगेट में लाती है। रिमोट ब्रांच सिर्फ़ तब दिखती है, जब उसी नाम की कोई लोकल ब्रांच न हो। मोड मेन्यू में, बदली हुई फ़ाइलें `+/-` गिनती के साथ देखने के लिए **कमिट नहीं किए गए**, **स्टेज नहीं किए गए**, **स्टेज किए गए** या **ब्रांच** चुनें। किसी फ़ाइल का डिफ़ देखने के लिए उस पर क्लिक करें। **पिछला टर्न** सबसे नए टर्न का dsh का अपना रिव्यू खोलता है। **यह चैट** चुनने पर सिर्फ़ वे फ़ाइलें दिखती हैं, जिन्हें खुली चैट के फ़ाइल टूल (write, edit) ने उसके सभी टर्न में लिखा। साथ में पहले संदेश से अब तक का उनका कुल डिफ़ भी दिखता है। **␣** बटन व्हाइटस्पेस बदलाव छिपाता है (`git diff -w`): जिन पंक्तियों में सिर्फ़ इंडेंटेशन या लाइन के अंत बदले हैं, वे नहीं दिखतीं। किसी फ़ाइल का **…** मेन्यू → **इस फ़ाइल को बदलने वाली चैट** उसी रिपॉज़िटरी की वे चैट दिखाता है, जिनके लिखने या एडिट करने वाले टूल ने वह फ़ाइल बदली, सबसे नई पहले, और साथ में वह अनुरोध भी, जिसने बदलाव किया; क्लिक करने पर वह चैट उसी अनुरोध पर खुलती है। | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="स्क्रीनशॉट: बदलाव पैनल"></a> |
41
41
  | **सुविधाओं के आइडिया** | <a id="feature-featureideas"></a>दायां साइडबार → `+` → **सुविधाओं के आइडिया** → **सुविधाएं सुझाएं**। चैट का अपना मॉडल चैट के प्रोजेक्ट का छोटा सारांश पढ़ता है (टॉप-लेवल फ़ाइलें, README और मैनिफ़ेस्ट की शुरुआत, README के बाकी हिस्से की रूपरेखा, हाल के कमिट के शीर्षक)। फिर वह ज़्यादा से ज़्यादा 8 सुविधाएं सुझाता है। सुझाव कार्ड के ढेर के रूप में dsh की UI भाषा में दिखते हैं। उसी प्रोजेक्ट में नई चैट शुरू करने के लिए कार्ड को दाएं स्वाइप करें (या **✓** पर क्लिक करें, या `→` दबाएं; हर बार कार्ड अपनी तरफ़ उड़ जाता है)। नई चैट प्लान मोड में शुरू होती है और आइडिया उसका अनुरोध होता है। इसलिए जब तक आप प्लान मंज़ूर नहीं करते, कुछ नहीं बदलता। प्लान छोड़ने के लिए **▶ अभी बनाएं** पर क्लिक करें (या `↑` दबाएं; कार्ड ऊपर उड़ जाता है): नई चैट तुरंत शुरू होती है और आइडिया उसका सामान्य अनुरोध होता है। मॉडल बदलाव करता है और अपनी जांचें चलाता है (मंज़ूरियां हमेशा की तरह लागू होती हैं)। छोड़ने के लिए बाएं स्वाइप करें (या **✕**, या `←`)। **पहले जैसा करें** (या `Z`) छोड़ा गया कार्ड वापस लाता है। किसी अच्छे आइडिया को बाद के लिए रखने के लिए **↓** पर क्लिक करें (या `↓` दबाएं)। वह प्रोजेक्ट की **बाद में** सूची में चला जाता है। उसी प्रोजेक्ट फ़ोल्डर की हर चैट यह सूची दिखाती है (रीस्टार्ट के बाद भी)। **बाद में (N)** सूची खोलता है। **योजना बनाएं** उस आइडिया के लिए वैसी ही प्लान मोड वाली चैट शुरू करता है और **अभी बनाएं** बिना प्लान वाली चैट; दोनों आइडिया को सूची से हटा देते हैं। **सबकी एक योजना बनाएं (N)** सूची के सभी आइडिया के लिए एक ही प्लान मोड वाली चैट शुरू करता है, इसलिए साझा हिस्सों की योजना एक ही बार बनती है। **सूची से हटाएं** आइडिया को मिटा देता है। **चेकलिस्ट के रूप में कॉपी करें** पूरी सूची को Markdown चेकलिस्ट (`- [ ] Title — Summary`, हर आइडिया की एक लाइन) के रूप में क्लिपबोर्ड पर कॉपी करता है, ताकि आप उसे किसी इश्यू ट्रैकर या TODO फ़ाइल में इस्तेमाल कर सकें; यह कोई नेटवर्क कॉल नहीं करता। किसी आइडिया पर **GitHub इश्यू खोलें** आपके अपने GitHub CLI (`gh`) लॉगिन से प्रोजेक्ट की GitHub रिपॉज़िटरी में उस आइडिया के शीर्षक और सारांश (और वह क्यों ज़रूरी है) के साथ एक इश्यू खोलता है; इसके बाद आइडिया के पास **इश्यू #N** लिंक दिखता है, जो इश्यू खोलता है। **और आइडिया** नए कार्ड जोड़ता है। सिर्फ़ एक क्षेत्र के आइडिया पाने के लिए **सुविधाएं सुझाएं** के पास वाले फ़ील्ड में छोटा-सा **फ़ोकस विषय** लिखें (ज़्यादा से ज़्यादा 80 अक्षर; `Enter` से भी सुझाव मिलते हैं), या उसके नीचे के तय विषयों में से किसी एक पर क्लिक करें: **प्रदर्शन**, **सुलभता**, **टेस्ट**, **सुरक्षा**, **उपयोगिता** या **दस्तावेज़ीकरण** (उसे हटाने के लिए फिर से क्लिक करें)। तब मॉडल सिर्फ़ उसी विषय से जुड़ी सुविधाएं सुझाता है; खाली फ़ील्ड का मतलब है कोई भी सुविधा। एक प्रोजेक्ट में कोई आइडिया दो बार नहीं सुझाया जाता: हर सुझाया गया आइडिया (छोड़ा गया, रखा गया या शुरू किया गया) प्रोजेक्ट के **इतिहास** में जाता है, मॉडल से कहा जाता है कि वह इन्हें फिर न सुझाए, और दोहराए गए शीर्षक वाला आइडिया हटा दिया जाता है। **इतिहास** इन्हें **शुरू किया गया** या **सुझाया गया** के साथ दिखाता है; **भूल जाएं** (या **सब भूल जाएं**) से कोई आइडिया फिर आ सकता है; जो आइडिया अभी भी **बाद में** सूची में है, वह तब तक सुझावों में नहीं आता जब तक आप उसे वहां से हटा नहीं देते। मॉडल सिर्फ़ आपके क्लिक करने पर चलता है। | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="स्क्रीनशॉट: सुविधाओं के आइडिया"></a> |
42
42
  | **कंटेंट में खोज** | <a id="feature-contentsearch"></a>dsh के साइडबार की अपनी खोज (**वर्कस्पेस** के पास का आवर्धक लेंस; डेस्कटॉप ऐप में `Cmd+K`, ब्राउज़र में `Cmd+Alt+K`) अब चैट को सिर्फ़ शीर्षक से नहीं, बल्कि आपके संदेशों और जवाबों के शब्दों से भी ढूंढती है। मिलता-जुलता टेक्स्ट चैट के नीचे दिखता है। dsh में यह खोज पहले से है, लेकिन यह बंद रहती है। यह सुविधा इसे चालू करती है और आपके कंप्यूटर पर एक खोज इंडेक्स फ़ाइल इस्तेमाल करती है। dsh शुरू होने के बाद पहली खोज पर इंडेक्स बनता है (250 चैट के लिए लगभग 15 सेकंड, सीमाएं देखें)। अगली बार शुरू करने पर यही इंडेक्स फिर से काम आता है। यह डिफ़ॉल्ट रूप से चालू है। बदलाव dsh रीस्टार्ट करने के बाद लागू होता है। | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="स्क्रीनशॉट: कंटेंट में खोज"></a> |
43
43
  | **टर्न रोलबैक** | <a id="feature-turnrollback"></a>अपने किसी संदेश पर पॉइंटर ले जाएं और **↶** पर क्लिक करें (कॉपी करें के पास)। **सिर्फ़ चैट** उस संदेश और उसके बाद की हर चीज़ (जवाब, टूल कॉल) को चैट और मॉडल के कॉन्टेक्स्ट से हटा देता है। संदेश कंपोज़र में वापस आ जाता है: उसे बदलें और फिर से भेजें। **चैट और फ़ाइलें** पहले उन प्रोजेक्ट फ़ाइलों की सूची दिखाता है, जो उस संदेश के बाद बदलीं। फिर वह उन्हें भी पहले जैसी स्थिति में वापस लाता है। इसमें कमांड (`bash`) से हुए बदलाव भी शामिल हैं, सिर्फ़ dsh के एडिट टूल से हुए बदलाव नहीं। चल रहा टर्न पहले रुकता है। चैट लॉग कभी दोबारा नहीं लिखा जाता: एक छिपा हुआ मार्कर हटाए गए हिस्से को छिपा देता है, ठीक वैसे ही जैसे dsh का अपना `/compact` पुराने संदेश छिपाता है। अगर [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) इंस्टॉल है, तो यह काम वही करता है और Composer Plus दूसरा बटन नहीं दिखाता। रोलबैक के बाद कंपोज़र के ऊपर **फिर से करें** बार दिखता है। यह रोलबैक से ठीक पहले के पल से एक नई चैट शुरू करता है (वही संदेश और कॉन्टेक्स्ट)। **चैट और फ़ाइलें** के साथ यह फ़ाइलें भी वापस लाता है। रोलबैक के बाद आपने जो फ़ाइल बदली, वह सूची में दिखती है और रखी जाती है, जब तक आप उसे ओवरराइट करने वाले बॉक्स पर टिक न करें। | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="स्क्रीनशॉट: टर्न रोलबैक"></a> |
@@ -46,10 +46,12 @@ dsh plugin --profile web add dsh-composer-plus
46
46
  | **इनपुट इतिहास** | <a id="feature-inputhistory"></a>खाली कंपोज़र में `↑` / `↓` दबाकर भेजे गए संदेशों में आगे-पीछे जाएं, जैसे टर्मिनल में। | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="स्क्रीनशॉट: इनपुट इतिहास"></a> |
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
+ | **प्रश्न कार्ड को विंडो में फ़िट करें** | <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> |
49
50
  | **एक क्लिक में जारी रखें** | <a id="feature-continuebutton"></a>रुके हुए, विफल या बीच में कटे टर्न के बाद खाली कंपोज़र में **▶** दिखता है। एक क्लिक मौजूदा बातचीत से काम फिर से शुरू करता है। इनपुट में कुछ नहीं लिखा जाता और चैट में कोई दिखने वाला संदेश नहीं जुड़ता (मॉडल को “जहां रुका था, वहीं से जारी रखें” वाला एक छोटा छिपा नोट मिलता है, क्योंकि Claude जैसे कुछ प्रोवाइडर ऐसा अनुरोध अस्वीकार करते हैं, जो असिस्टेंट के जवाब पर खत्म होता है)। कतार में रखे संदेश वहीं रहते हैं: ▶ सिर्फ़ रुके हुए काम को जारी रखता है, उसके बाद कतार चलती है। पूरे हुए टर्न के बाद सामान्य भेजें बटन ही रहता है। | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="स्क्रीनशॉट: एक क्लिक में जारी रखें"></a> |
50
51
  | **रीस्टार्ट के बाद जारी रखें** | <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> |
51
52
  | **कतार में खींचकर छोड़ें** | <a id="feature-queuereorder"></a>कतार वाले संदेशों पर एक हैंडल (⠿) दिखता है। क्रम बदलने के लिए उसे खींचें, या हैंडल पर फ़ोकस करके `↑` / `↓` दबाएं। `Esc` रद्द करता है। | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="स्क्रीनशॉट: कतार में खींचकर छोड़ें"></a> |
52
- | **कतार वाले संदेश को उसी जगह एडिट करें** | <a id="feature-queueedit"></a>कतार वाले किसी संदेश पर डबल-क्लिक करें। वह dsh के अपने एडिट बॉक्स में बदल जाता है: टेक्स्ट बदलें, फिर सेव करने के लिए `Enter` या रद्द करने के लिए `Esc` दबाएं। संदेश कतार में अपनी जगह पर रहता है। इमेज या फ़ाइल वाले संदेश इस तरह एडिट नहीं होते (dsh की कतार सिर्फ़ टेक्स्ट एडिट करती है)। | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="स्क्रीनशॉट: कतार वाले संदेश को उसी जगह एडिट करें"></a> |
53
+ | **कतार वाले संदेश को उसी जगह एडिट करें** | <a id="feature-queueedit"></a>कतार वाले किसी संदेश पर डबल-क्लिक करें, या उसके एडिट बटन (**कतार वाला संदेश संपादित करें**) पर क्लिक करें। उसी पंक्ति में एक एडिटर खुलता है: टेक्स्ट बदलें, किसी इमेज या फ़ाइल को उसके ✕ से हटाएं, या पेपरक्लिप (**इमेज या फ़ाइलें जोड़ें**) से या इमेज पेस्ट करके नई जोड़ें। `Enter` सेव करता है, `Esc` रद्द करता है, `Shift+Enter` नई लाइन जोड़ता है। संदेश कतार में अपनी जगह पर रहता है, और जो इमेज और फ़ाइलें आप रखते हैं, वे नहीं बदलतीं। एडिटर खुला रहने तक कतार का क्रम नहीं बदला जा सकता। Tether में: कतार वाले संदेश का मेन्यू → Edit। | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="स्क्रीनशॉट: कतार वाले संदेश को उसी जगह एडिट करें"></a> |
54
+ | **रोकने के बाद भेजा संदेश पहले चलाएँ** | <a id="feature-stopsendfirst"></a>डिफ़ॉल्ट रूप से चालू। जब चैट की कतार में संदेश प्रतीक्षा कर रहे हों, तब चैट रोकें और फिर नया संदेश भेजें: वह तुरंत और अकेले चलता है। कतार वाले संदेश अपना क्रम बनाए रखते हैं और उसके बाद, हर टर्न में एक, चलते हैं। इसके बिना dsh नया संदेश कतार के अंत में जोड़ता है और उसकी जगह कतार का पहला संदेश चलाता है, इसलिए नया संदेश सबसे आख़िर में चलता है। चैट के काम करते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। | <a href="assets/features/stopSendFirst.webp"><img src="assets/features/stopSendFirst.webp" width="160" alt="स्क्रीनशॉट: रोकने के बाद भेजा संदेश पहले चलाएँ"></a> |
53
55
  | **सेशन लिंक कॉपी करें** | <a id="feature-copydeeplink"></a>साइडबार में किसी चैट पर राइट-क्लिक करें → **सेशन लिंक कॉपी करें**। उस चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ने के लिए `dsh-session:…` लिंक किसी दूसरी चैट में पेस्ट करें। dsh 0.2.1 में अपना **सेशन ID कॉपी करें** है, जो सिर्फ़ सादा ID कॉपी करता है; यह आइटम ठीक उसके बाद आता है। | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="स्क्रीनशॉट: सेशन लिंक कॉपी करें"></a> |
54
56
  | **संदेश लिंक कॉपी करें** | <a id="feature-copymessagelink"></a>किसी संदेश पर पॉइंटर ले जाएं और **🔗** पर क्लिक करें (संदेश की एक्शन पंक्ति में; जवाब में समय के पास)। लिंक, सेशन लिंक के साथ संदेश का नंबर है: `dsh-session:…#42`। इसे किसी संदेश में पेस्ट करें और भेजें। dsh 0.2.1 और उसके बाद के वर्शन में लिंक एक चिप के रूप में दिखता है। उस पर क्लिक करने से वह चैट खुलती है, संदेश तक स्क्रॉल होती है और संदेश 2 सेकंड तक हाइलाइट रहता है। सेशन लिंक की तरह, यह उस चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में भी जोड़ता है। | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="स्क्रीनशॉट: संदेश लिंक कॉपी करें"></a> |
55
57
  | **चैट को Markdown के रूप में एक्सपोर्ट करें** | <a id="feature-exportmarkdown"></a>साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **Markdown के रूप में एक्सपोर्ट करें…**। एक डायलॉग दिखाता है कि चैट में कितने संदेश हैं। **क्लिपबोर्ड पर कॉपी करें** चैट को Markdown के रूप में कॉपी करता है, और **.md फ़ाइल सेव करें** उसे ब्राउज़र के डाउनलोड से `<chat title>.md` के रूप में सेव करता है (dsh डेस्कटॉप: आपके सिस्टम की सेटिंग के हिसाब से डाउनलोड फ़ोल्डर में या सेव डायलॉग से)। फ़ाइल में चैट का शीर्षक, प्रोजेक्ट का नाम और तारीख होती है, फिर हर संदेश के लिए एक `## आप` या `## असिस्टेंट` सेक्शन होता है। कोड ब्लॉक जैसे हैं वैसे ही रहते हैं; जो कोड ब्लॉक किसी संदेश में खुला रह गया हो, उसे बंद कर दिया जाता है। | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="स्क्रीनशॉट: चैट को Markdown के रूप में एक्सपोर्ट करें"></a> |
@@ -57,23 +59,30 @@ dsh plugin --profile web add dsh-composer-plus
57
59
  | **नई चैट में प्रोजेक्ट खोज** | <a id="feature-projectpicker"></a>नई चैट → कंपोज़र के ऊपर वाला प्रोजेक्ट बटन। प्रोजेक्ट A–Z क्रम में दिखते हैं, और सबसे ऊपर **प्रोजेक्ट खोजें** बॉक्स होता है। नाम का कोई हिस्सा लिखें (बड़े-छोटे अक्षरों और एक्सेंट से फ़र्क नहीं पड़ता) और पहला मिलान चुनने के लिए `Enter` दबाएं। कुछ भी न मिले, तो **कोई मिलता-जुलता प्रोजेक्ट नहीं** दिखता है। साइडबार में dsh का सेव किया गया प्रोजेक्ट क्रम नहीं बदलता। | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="स्क्रीनशॉट: नई चैट में प्रोजेक्ट खोज"></a> |
58
60
  | **नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस** | <a id="feature-defaultworkspace"></a>सेटिंग → Composer Plus → **नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस** → **नया सेशन यहाँ खोलें**: कोई प्रोजेक्ट चुनें, या **सामान्य फ़ोल्डर (default-workspace)** चुनें (डिफ़ॉल्ट: dsh का अपना फ़ोल्डर `Documents/deepseek-harness/default-workspace`, जो पहली बार इस्तेमाल करने पर बनता है)। इसके बाद साइडबार में सबसे ऊपर वाला **नया सेशन** (और उसका शॉर्टकट) नई चैट हमेशा वहीं खोलता है, तब भी जब किसी दूसरे प्रोजेक्ट की चैट खुली हो। किसी प्रोजेक्ट के पास वाला `+` अब भी वही प्रोजेक्ट खोलता है, और नई चैट में कंपोज़र के ऊपर वाला प्रोजेक्ट बटन अब भी प्रोजेक्ट बदलता है। | <a href="assets/features/defaultWorkspace.webp"><img src="assets/features/defaultWorkspace.webp" width="160" alt="स्क्रीनशॉट: नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस"></a> |
59
61
  | **चैट में खोजें** | <a id="feature-findinchat"></a>किसी चैट में Mac पर `Cmd+F` (Windows और Linux पर `Ctrl+F`) दबाएं: उसके ऊपर एक खोज बॉक्स खुलता है। कोई शब्द लिखें: स्क्रीन पर दिख रहे संदेशों और जवाबों में हर मिलान हाइलाइट होता है, मौजूदा मिलान ज़्यादा गहरे रंग में, और बॉक्स n / कुल दिखाता है। `Enter` या `↓` अगले मिलान पर और `Shift+Enter` या `↑` पिछले मिलान पर ले जाता है (तीर वाले बटन भी); चैट मिलान को बीच तक स्क्रॉल करती है। बड़े-छोटे अक्षर, एक्सेंट और तुर्की का बिना बिंदु वाला ı मायने नहीं रखते। `Esc` बॉक्स बंद करता है और कर्सर को उसकी पिछली जगह पर वापस रखता है। जवाब आते समय भी खोज चैट के साथ चलती रहती है। | <a href="assets/features/findInChat.webp"><img src="assets/features/findInChat.webp" width="160" alt="स्क्रीनशॉट: चैट में खोजें"></a> |
60
- | **हर चैट की अपनी ब्रांच** | <a id="feature-worktreechats"></a>नई चैट → प्रोजेक्ट बटन और मोड बटन के बीच वाला main बटन (ब्रांच आइकन) → **नई ब्रांच**, फिर पहला संदेश लिखें और भेजें। पहले संदेश के साथ इमेज और फ़ाइलें भेजी जा सकती हैं। AI उसी संदेश से ब्रांच का नाम रखता है (`feat/…`, `fix/…`), Composer Plus उसके लिए `<project>/.worktrees/` में एक git worktree बनाता है, `.worktreeinclude` में दी गई अनदेखी फ़ाइलें (जैसे `.env` और `node_modules/`) कॉपी करता है और वहां आपके संदेश के साथ नई चैट खोलता है। खुली चैट का हेडर ⑂ ब्रांच · N बदलाव · ↑ ↓ (या **push नहीं हुई**) दिखाता है; **बदलाव** खोलने के लिए उस पर क्लिक करें। उसी मेन्यू में खुले worktree की सूची होती है: उनमें से किसी एक में चैट शुरू करने के लिए उसे चुनें। साइडबार में ब्रांच फ़ोल्डर उनके प्रोजेक्ट के अंदर देखने के लिए dsh के **व्यू के विकल्प** → **वर्कस्पेस ट्री** चुनें। | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="स्क्रीनशॉट: हर चैट की अपनी ब्रांच"></a> |
62
+ | **हर चैट की अपनी ब्रांच** | <a id="feature-worktreechats"></a>नई चैट की स्क्रीन पर प्रोजेक्ट बटन और मोड बटन के बीच वाला ब्रांच बटन (ब्रांच आइकन) डिफ़ॉल्ट रूप से **नई ब्रांच** दिखाता है। पहला संदेश लिखें और भेजें। मौजूदा ब्रांच पर ही रहने के लिए उसी बटन में “मौजूदा ब्रांच (main)” चुनें। पहले संदेश के साथ इमेज और फ़ाइलें भेजी जा सकती हैं। प्लान मोड में नई चैट भी प्लान मोड में शुरू होती है: संदेश को `/plan <संदेश>` के रूप में भेजें (Shift+Tab), या पहले नई चैट को प्लान मोड में डालें। AI उसी संदेश से ब्रांच का नाम रखता है (`feat/…`, `fix/…`), Composer Plus उसके लिए `<project>/.worktrees/` में एक git worktree बनाता है, `.worktreeinclude` में दी गई अनदेखी फ़ाइलें (जैसे `.env` और `node_modules/`) कॉपी करता है और वहां आपके संदेश के साथ नई चैट खोलता है। खुली चैट का हेडर ⑂ ब्रांच · N बदलाव · ↑ ↓ (या **push नहीं हुई**) दिखाता है; **बदलाव** खोलने के लिए उस पर क्लिक करें। उसी मेन्यू में खुले worktree की सूची होती है: उनमें से किसी एक में चैट शुरू करने के लिए उसे चुनें। साइडबार में ब्रांच फ़ोल्डर उनके प्रोजेक्ट के अंदर देखने के लिए dsh के **व्यू के विकल्प** → **वर्कस्पेस ट्री** चुनें। | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="स्क्रीनशॉट: हर चैट की अपनी ब्रांच"></a> |
63
+ | **वर्कस्पेस ट्री में ब्रांच** | <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> |
61
64
  | **अगले संदेश का अनुमान** | <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> |
62
65
  | **टाइप करते समय पूरा करें** | <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> |
63
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> |
64
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> |
65
69
  | **इस चैट के लिए अनुमति दें** | <a id="feature-allowforchat"></a>जब ऑटो रिव्यू आपसे पूछता है, तो मंज़ूरी कार्ड पर **इस चैट के लिए अनुमति दें** दिखता है। इसके बाद उसी चैट में वही टूल किसी भी आर्ग्युमेंट के साथ बिना पूछे चलता है, जब तक समय सीमा खत्म नहीं होती (डिफ़ॉल्ट रूप से 1 घंटा; इसे **सेटिंग → Composer Plus → इस चैट के लिए अनुमति दें** में चुनें)। फिर एजेंट दोबारा पूछता है। हेडर की एक चिप अनुमतियों की सूची उनके खत्म होने के समय के साथ दिखाती है और उन्हें रद्द करती है। रीस्टार्ट के बाद भी अनुमतियां बनी रहती हैं। | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="स्क्रीनशॉट: इस चैट के लिए अनुमति दें"></a> |
66
- | **प्रोजेक्ट की स्थिति** | <a id="feature-projectstatus"></a>साइडबार में प्रोजेक्ट की पंक्ति वही स्पिनर / इंतज़ार / पूरा होने का संकेत दिखाती है, जो उसकी चैट दिखाती हैं। इसलिए बंद (collapsed) प्रोजेक्ट भी बताता है कि अंदर कोई चैट काम कर रही है या उसे आपकी ज़रूरत है। सबसे पहले आपका इंतज़ार कर रही चैट दिखती है, फिर पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (हरा बिंदु, तब भी जब कोई दूसरी चैट अभी चल रही हो), फिर स्पिनर। विवरण देखने के लिए उस पर पॉइंटर ले जाएं। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट की स्थिति"></a> |
70
+ | **प्रोजेक्ट की स्थिति** | <a id="feature-projectstatus"></a>साइडबार में प्रोजेक्ट की पंक्ति वही स्पिनर / इंतज़ार / पूरा होने का संकेत दिखाती है, जो उसकी चैट दिखाती हैं। इसलिए बंद (collapsed) प्रोजेक्ट भी बताता है कि अंदर कोई चैट काम कर रही है या उसे आपकी ज़रूरत है। सबसे पहले आपका इंतज़ार कर रही चैट दिखती है, फिर पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (हरा बिंदु, तब भी जब कोई दूसरी चैट अभी चल रही हो), फिर स्पिनर। विवरण देखने के लिए उस पर पॉइंटर ले जाएं। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के हर प्रोजेक्ट (जैसे `.worktrees/` में हर ब्रांच फ़ोल्डर) की चैट भी दिखाती है, तब भी जब फ़ोल्डर बंद (collapsed) हो। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट की स्थिति"></a> |
67
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> |
68
72
  | **सभी को पढ़ा हुआ मार्क करें** | <a id="feature-markprojectread"></a>साइडबार में किसी प्रोजेक्ट के **…** बटन पर क्लिक करें → **सभी को पढ़ा हुआ मार्क करें**। उस प्रोजेक्ट की हर चैट से हरा अपठित बिंदु एक साथ हट जाता है; दूसरे प्रोजेक्ट के बिंदु बने रहते हैं। जब प्रोजेक्ट में कोई अपठित चैट नहीं होती, तो यह आइटम ग्रे दिखता है (**कोई अपठित चैट नहीं**)। | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="स्क्रीनशॉट: सभी को पढ़ा हुआ मार्क करें"></a> |
69
73
  | **सक्रिय प्रोजेक्ट पहले** | <a id="feature-activeprojectsfirst"></a>जब कोई चैट चलने लगती है या उसे आपकी ज़रूरत होती है, तो उसका प्रोजेक्ट dsh के अपने पंक्ति एनिमेशन के साथ साइडबार में सबसे ऊपर चला जाता है (वैसे ही जैसे आप उसे खींचकर वहां ले जाते)। पूरे हो चुके प्रोजेक्ट अपनी जगह पर रहते हैं; उन्हें हमेशा की तरह कहीं भी खींचें। बदला गया क्रम dsh के प्रोजेक्ट क्रम में सेव होता है, इसलिए इसे बंद करने पर मौजूदा क्रम बना रहता है। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: सक्रिय प्रोजेक्ट पहले"></a> |
70
- | **हाल के प्रोजेक्ट का फ़िल्टर** | <a id="feature-recentprojects"></a>साइडबार → व्यू के विकल्प (स्लाइडर आइकन) → **पिछले 2 घंटों में सक्रिय**। इसके चुने रहने पर साइडबार सिर्फ़ वे प्रोजेक्ट दिखाता है, जिनमें पिछले 2 घंटों में कोई चैट सक्रिय रही हो। इसमें शामिल हैं: इस समय में अपडेट हुई चैट, चल रही या इंतज़ार कर रही चैट, खुली हुई चैट, या पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (dsh का हरा “पूरा हुआ” बिंदु), 2 घंटे बाद भी। जिन प्रोजेक्ट में ऐसी कोई चैट नहीं है, वे छिप जाते हैं, नए और खाली प्रोजेक्ट भी। सभी प्रोजेक्ट दिखाने के लिए इसे फिर से चुनें। यह चुनाव इसी डिवाइस पर याद रहता है। | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="स्क्रीनशॉट: हाल के प्रोजेक्ट का फ़िल्टर"></a> |
74
+ | **हाल के प्रोजेक्ट का फ़िल्टर** | <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> |
71
75
  | **सभी प्रोजेक्ट छोटे करें** | <a id="feature-collapseprojects"></a>जब साइडबार में कोई प्रोजेक्ट खुला होता है, तो व्यू के विकल्पों (स्लाइडर आइकन) के पास एक बटन दिखता है। सभी खुले प्रोजेक्ट एक साथ बंद करने के लिए उस पर क्लिक करें, जैसे 5 में से 3 खुले प्रोजेक्ट। जब कोई प्रोजेक्ट खुला नहीं होता, तो बटन फिर से छिप जाता है। | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="स्क्रीनशॉट: सभी प्रोजेक्ट छोटे करें"></a> |
72
76
  | **स्थिति के अनुसार क्रम** | <a id="feature-statusorder"></a>साइडबार → व्यू के विकल्प → **इसके अनुसार क्रम दें** → **स्थिति के अनुसार** (**एक ही सूची में** के साथ)। सबसे पहले पूरी हुई चैट आती हैं (dsh का “पूरा हुआ” बिंदु, जो गड़बड़ी के साथ खत्म हुए टर्न को भी मिलता है)। फिर चल रही या इंतज़ार कर रही चैट, फिर सक्रिय ऑटोमेशन (शेड्यूल) वाली चैट, और आखिर में बाकी चैट dsh के क्रम में आती हैं। पूरी हुई चैट खोलने पर वह नीचे चली जाती है। सिर्फ़ व्यू बदलता है: वापस जाने के लिए **मैन्युअल** या **पिछला अपडेट** चुनें। | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="स्क्रीनशॉट: स्थिति के अनुसार क्रम"></a> |
73
77
  | **बैकग्राउंड सूचनाएं** | <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> |
74
79
  | **ऐप्लिकेशन की भाषा** | <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> |
75
80
  | **मोबाइल कनेक्ट (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> |
76
81
  | **अपने-आप अपडेट** | <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> |
82
+ | **बैकअप** | <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> |
83
+ | **अपने-आप बैकअप** | <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> |
84
+ | **सेशन लॉग जांच** | <a id="feature-sessiondoctor"></a>**सेशन लॉग जांचें** हर चैट का लॉग पढ़ता है और उन लॉग की सूची दिखाता है जिन्हें dsh नहीं खोल सकता (टूटा फ़्रेम, कटा हुआ रिकॉर्ड, गलत क्रम संख्या)। अधूरा आखिरी हिस्सा सूची में नहीं आता: dsh उसे खुद ठीक करता है। **बैकअप से ठीक करें** उस सबसे नए बैकअप से कॉपी वापस रखता है जिसमें सही कॉपी है, और खराब फ़ाइल को उसके बगल में रखता है (`.corrupt-<समय>`)। उस बैकअप के बाद लिखे गए संदेश कॉपी में नहीं होते। इस dsh में खुली चैट यहां ठीक नहीं की जाती: dsh बंद करें और उसे रेस्क्यू कंसोल में ठीक करें। | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="स्क्रीनशॉट: सेशन लॉग जांच"></a> |
85
+ | **रेस्क्यू कंसोल** | <a id="feature-rescueconsole"></a>हर बैकअप, बैकअप फ़ोल्डर में एक रेस्क्यू कंसोल भी रखता है। जब dsh बंद हो या शुरू न हो, तो उस फ़ोल्डर में `Composer Plus Rescue` खोलें (macOS: `Composer Plus Rescue.command`): टर्मिनल विंडो में एक मेन्यू बैकअप की सूची दिखाता है, उन्हें जांचता और बहाल करता है, और सेशन लॉग जांचता और ठीक करता है। यह कोई नेटवर्क पोर्ट नहीं खोलता। बहाली के समय आपको `RESTORE` टाइप करना होता है; यह आपके मौजूदा dsh होम को `.dsh.pre-restore-<समय>` के रूप में रखता है, मास्क किए गए सीक्रेट vault से वापस रखता है और `cache/`, `dsh-runtimes/` और `node_modules` को पुराने फ़ोल्डर से ले आता है। यह dsh के बिना काम करता है: यह Node.js या खुद DeepSeek Harness ऐप का उपयोग करता है। नए कंप्यूटर पर **दूसरे कंप्यूटर के लिए** वाला फ़ोल्डर कॉपी करें और वहां `Composer Plus Rescue` खोलें। | <a href="assets/features/rescueConsole.webp"><img src="assets/features/rescueConsole.webp" width="160" alt="स्क्रीनशॉट: रेस्क्यू कंसोल"></a> |
77
86
 
78
87
  <!-- END GENERATED FEATURES -->
79
88
 
@@ -117,7 +126,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
117
126
  | `Esc` | अनुमान वाला खाली कंपोज़र | अनुमान छिपाएं |
118
127
  | `Cmd/Ctrl+Z` | कंपोज़र, **प्रॉम्प्ट बेहतर करें** के बाद | अपना टाइप किया टेक्स्ट वापस लाएं |
119
128
  | `Esc` | कंपोज़र, जब **प्रॉम्प्ट बेहतर करें** चल रहा हो | सुधार रद्द करें |
120
- | `Enter` / `Esc` | कतार वाला संदेश, जिस पर आपने डबल-क्लिक किया | एडिट सेव / रद्द करें |
129
+ | `Enter` / `Esc` | कतार वाले संदेश का एडिटर | एडिट सेव / रद्द करें |
121
130
  | Mac पर `Cmd+F`, Windows और Linux पर `Ctrl+F` | खुली चैट | **चैट में खोजें** खोलें |
122
131
  | `Enter` / `Shift+Enter`, `↓` / `↑` | **चैट में खोजें** बॉक्स | अगला / पिछला मिलान |
123
132
  | `Esc` | **चैट में खोजें** बॉक्स | बॉक्स बंद करें |
@@ -151,6 +160,9 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
151
160
  - **टाइप करते समय पूरा करें:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर, टाइप करते समय हर ठहराव पर Host वाला हिस्सा अब तक टाइप किया गया टेक्स्ट, साथ ही चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), चैट के ज़्यादा से ज़्यादा लगभग 3,000 अक्षर, **टाइप करते समय पूरा करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश का अनुमान** वाला मॉडल) को भेजता है। नया ठहराव पुराने अनुरोध को रोक देता है। चैट में कुछ सेव नहीं होता। स्विच `$DSH_HOME/storages/dsh-composer-plus/complete.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
152
161
  - **प्रॉम्प्ट बेहतर करें:** जब तक आप जादुई छड़ी पर क्लिक नहीं करते, कुछ नहीं चलता। फिर Host वाला हिस्सा आपका ड्राफ़्ट, चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ, रीज़निंग और रोलबैक किए गए संदेश नहीं; ज़्यादा से ज़्यादा लगभग 6,000 अक्षर, सबसे नया हिस्सा), **सुविधाओं के आइडिया** वाला ही प्रोजेक्ट सारांश (फ़ाइलों के वही नियम: `.env*` या कुंजी फ़ाइलें नहीं, फ़ोल्डर से बाहर जाने वाला symlink नहीं, FIFO नहीं), वे पाथ जिन्हें `git status` बदले हुए के रूप में दिखाता है, और ज़्यादा से ज़्यादा 30 ट्रैक किए गए या ट्रैक न किए गए (ignore न किए गए) पाथ जिनके नामों में आपके ड्राफ़्ट वाले शब्द हैं, **प्रॉम्प्ट बेहतर करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से चैट का अपना मॉडल) को एक अनुरोध के रूप में भेजता है। उस सारांश के अलावा फ़ाइलों का कोई कंटेंट नहीं भेजा जाता। चैट या प्रोजेक्ट में कुछ नहीं लिखा जाता: जवाब सिर्फ़ कंपोज़र में आपके ड्राफ़्ट की जगह लेता है, और उसे भेजना है या नहीं, यह आप तय करते हैं। चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/improve.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
153
162
  - **लक्ष्य जांच:** यह सिर्फ़ तब चलती है, जब एजेंट किसी अपने-आप चलने वाले राउंड में `/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` में है।
164
+ - **बैकअप:** कुछ भी आपके कंप्यूटर से बाहर नहीं जाता। आर्काइव `~/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
+ - **रेस्क्यू कंसोल:** टर्मिनल का एक मेन्यू; यह कोई नेटवर्क पोर्ट नहीं खोलता। बहाली सिर्फ़ dsh होम के बगल में एक नए फ़ोल्डर में लिखती है (फ़ाइलें `O_EXCL | O_NOFOLLOW` के साथ, symlink सबसे आखिर में और उनके टारगेट तक कभी नहीं जाया जाता), और ऐसा आर्काइव मना कर देती है जिसमें असुरक्षित नाम (`..`, absolute पाथ), डिवाइस या FIFO, एक से ज़्यादा टॉप फ़ोल्डर, या किसी लिंक के नीचे की एंट्री हो।
154
166
 
155
167
  ## समस्या निवारण
156
168
 
@@ -165,11 +177,15 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
165
177
  - **हटाएं कहता है कि किसी दूसरे dsh में यह चैट खुली है:** उसी dsh होम पर चल रहा दूसरा dsh चैट का लॉक रखता है। वह विंडो या dsh बंद करें, फिर से हटाएं। तब तक चैट आर्काइव में रहती है।
166
178
  - **"Tailscale only" चालू करने के बाद मेरा iPhone कनेक्ट नहीं हो पाता:** Mac और iPhone दोनों पर Tailscale चालू होना चाहिए। Mac पर यह बंद हो, तो मोबाइल कनेक्ट पैनल चेतावनी दिखाता है। एक्सेस लॉग मना की गई हर कोशिश उसके कारण के साथ दिखाता है।
167
179
  - **रीस्टार्ट के बाद कोई चैट जारी नहीं रही:** dsh बंद होते समय रीस्टार्ट के बाद जारी रखें बंद था, आपने वह टर्न खुद रोका था, टर्न खत्म हो चुका था (पूरा या विफल), चैट आर्काइव थी, या 20 से ज़्यादा चैट चल रही थीं (सबसे नई 20 जारी रहती हैं)।
180
+ - **रीस्टार्ट के बाद कतार खाली है:** dsh खुद बंद होते समय कतार खाली कर देता है। रीस्टार्ट के बाद जारी रखें उसे सिर्फ़ उसी चैट में वापस रखता है जिसे वह जारी रखता है; दूसरी चैट में संदेश फिर से भेजें। बंद होने से ठीक पहले हटाया गया संदेश वापस आ सकता है: उसे फिर से हटाएं।
168
181
  - **GitHub इश्यू खोलें "gh could not open the issue" कहता है:** यह संदेश `gh` की अपनी पहली पंक्ति है। टर्मिनल में `gh auth status` चलाएं और `gh auth login` से लॉग इन करें; चैट के फ़ोल्डर में GitHub रिमोट होना चाहिए (`git remote -v`)। "not installed or not on the PATH of dsh" का मतलब है कि dsh को `gh` नहीं मिला: इसे इंस्टॉल करें, या dsh को ऐसे टर्मिनल से शुरू करें, जिसमें `gh` काम करता हो।
169
182
  - **चैट पंक्ति पर ब्रांच लेबल नहीं है:** यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
170
183
  - **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
171
184
  - **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
172
- - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.15.0`), ऊपर इंस्टॉल वाला नोट देखें।
185
+ - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.16.0`), ऊपर इंस्टॉल वाला नोट देखें।
186
+ - **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
187
+ - **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
188
+ - **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
173
189
 
174
190
  ## सीमाएं
175
191
 
@@ -177,6 +193,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
177
193
  - **सुविधाओं के आइडिया** हर चैट के कार्ड तब तक मेमोरी में रखता है, जब तक dsh या पेज फिर से लोड नहीं होता; उसके बाद **सुविधाएं सुझाएं** मॉडल से फिर पूछता है। क्लिक करते समय dsh की जो UI भाषा होती है, कार्ड उसी में आते हैं। भाषा बदलने के बाद ढेर में पहले से मौजूद कार्ड अपनी भाषा रखते हैं, और **और आइडिया** नई भाषा इस्तेमाल करता है। मॉडल सिर्फ़ प्रोजेक्ट का छोटा सारांश देखता है, कोड नहीं, इसलिए कोई आइडिया ऐसी चीज़ दोहरा सकता है जो प्रोजेक्ट में पहले से है: उसे छोड़ दें। नई चैट सिर्फ़ तब प्लान मोड में चलती है, जब प्रोफ़ाइल में dsh का `/plan` कमांड हो; नहीं तो आइडिया एक सामान्य पहले संदेश के रूप में जाता है। **बाद में** सूची चैट के फ़ोल्डर पाथ से जुड़ी है: symlink से खोले गए उसी फ़ोल्डर की अपनी अलग सूची होती है। यह हर प्रोजेक्ट में ज़्यादा से ज़्यादा 50 आइडिया रखती है (और जोड़ने के लिए एक हटाएं), और एक शीर्षक सिर्फ़ एक बार। कार्ड खींचने से सिर्फ़ बाएं या दाएं का फ़ैसला होता है; उसे रखने के लिए **↓** और अभी बनाने के लिए **▶** इस्तेमाल करें। दोहराव सिर्फ़ शीर्षक से पहचाना जाता है: मॉडल किसी पुराने आइडिया को नए नाम से फिर भी सुझा सकता है; उसे छोड़ दें। जब मॉडल सिर्फ़ पुराने आइडिया लौटाता है, तो कुछ नया नहीं दिखता: फिर से क्लिक करें। संकरा फ़ोकस विषय इसकी संभावना बढ़ाता है; ज़्यादा चौड़ा विषय चुनें या उसे हटा दें। फ़ोकस विषय हर चैट के लिए फ़ील्ड में तब तक रहता है जब तक dsh या पेज फिर से लोड नहीं होता।
178
194
  - **चैट को Markdown के रूप में एक्सपोर्ट करें** में सिर्फ़ आपके अपने संदेश और असिस्टेंट के टेक्स्ट जवाब होते हैं: टूल कॉल और उनका आउटपुट, सोच, इमेज (उन्हें एक `[image]` लाइन दिखाती है), छिपा हुआ संदर्भ और वे संदेश जिन्हें टर्न रोलबैक या dsh-rewind-plugin ने हटा दिया, शामिल नहीं होते। एक टर्न के जवाब मिलकर एक सेक्शन बनते हैं। एक एक्सपोर्ट में ज़्यादा से ज़्यादा लगभग 40 लाख अक्षर जाते हैं; इससे लंबी चैट का पहला हिस्सा और एक नोट एक्सपोर्ट होता है।
179
195
  - **रीस्टार्ट के बाद जारी रखें** टर्न को जारी रखता है; उसे दोबारा नहीं चलाता। बंद होते समय चल रहा टूल कॉल dsh के “नतीजा अज्ञात” परिणाम के साथ खत्म होता है, और मॉडल को बताया जाता है कि पूरा हो चुका काम न दोहराए। फिर भी, जो कमांड दो बार चलाना सुरक्षित नहीं है, वह फिर से चल सकता है। खुले सबएजेंट, मंज़ूरियां और सवाल वापस नहीं आते: उनकी पैरेंट चैट जारी रहती है और फिर से पूछती है। एक बार शुरू होने पर ज़्यादा से ज़्यादा 20 चैट जारी रहती हैं।
196
+ - **रीस्टार्ट के बाद जारी रखें** और कतार: dsh बंद होते समय चैट की कतार खाली कर देता है। प्लगइन आपके कतार वाले संदेश चैट के लॉग से वापस रखता है, उनके क्रम, बदलाव, इमेज और फ़ाइलों के साथ; वे जारी रखे गए टर्न के बाद चलते हैं। सिर्फ़ जारी रहने वाली चैट को उनकी कतार वापस मिलती है (स्विच चालू, टर्न चलते समय बंद होना)। dsh आपके खुद कतार के आखिरी संदेश हटाने को भी इसी तरह लॉग करता है: अगर आप उन्हें हटाते हैं और अगला चरण शुरू होने से पहले dsh बंद हो जाता है, तो वे वापस आ जाते हैं।
180
197
 
181
198
  - **कंटेंट में खोज** dsh की अपनी खोज है, इसलिए इसमें dsh की सीमाएं हैं। यह सिर्फ़ यूज़र और असिस्टेंट संदेश खोजती है: टूल आउटपुट (कमांड, फ़ाइल कंटेंट, नतीजे) नहीं, रीज़निंग नहीं, और इसमें यूज़र, असिस्टेंट या टूल संदेशों के लिए कोई फ़िल्टर नहीं है। यह पूरे शब्द मिलाती है, शब्द के हिस्से नहीं (`deploy` से `deployment` नहीं मिलता); एक्सेंट वाले अक्षर बिना एक्सेंट के भी मिलते हैं (`seker` से `şeker` मिलता है)। हर चैट की एक पंक्ति, dsh के 240 अक्षरों वाले अंश के साथ, ज़्यादा से ज़्यादा 20 पंक्तियां।
182
199
  - **कंटेंट में खोज** की लागत, 247 असली चैट लॉग की कॉपी पर मापी गई (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB): शुरू होने के बाद पहली खोज लगभग 15 सेकंड में इंडेक्स बनाती है। इस दौरान dsh का Host लगभग 7 सेकंड तक कोई जवाब नहीं देता, इसलिए उस समय दूसरी चैट की स्ट्रीमिंग रुक जाती है (पेज खुद नहीं अटकता)। सबसे ज़्यादा उपयोग के समय Host की मेमोरी लगभग 1.1 GB बढ़ती है। एक मिनट बाद भी यह शुरुआत से लगभग 0.5–0.6 GB ज़्यादा रहती है, जब तक dsh बंद नहीं होता। इंडेक्स फ़ाइल लगभग 165 MB की होती है। बाद की खोजों में लगभग 0.5 सेकंड लगते हैं। रीस्टार्ट के बाद पहली खोज में लगभग 1 सेकंड लगता है (सिर्फ़ नई या बदली हुई चैट जोड़ी जाती हैं) और मेमोरी लगभग 70 MB बढ़ती है। अगर आपके कंप्यूटर में मेमोरी कम है, तो इसे बंद करें।
@@ -187,19 +204,25 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
187
204
  - अगर नया वर्शन dsh की कोई सेटिंग नहीं बदलता, तो dsh 0.2.1 अपडेट तुरंत लोड करता है; बाकी मामलों में, और dsh 0.2.0 पर, इसे लोड करने के लिए dsh रीस्टार्ट करें। प्लगइन आपके लिए dsh कभी रीस्टार्ट नहीं करता। जिन वेब/CLI प्रोफ़ाइल में dsh का प्लगइन मैनेजर नहीं है, वे सिर्फ़ नए वर्शन की जानकारी देती हैं।
188
205
  - **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
189
206
  - **कंपोज़र में फ़ोकस बनाए रखें** सिर्फ़ `/` कमांड या स्किल के बाद फ़ोकस वापस देता है। जब तक dsh कमांड प्रोसेस करता है, कंपोज़र कुछ मिलीसेकंड तक सिर्फ़ पढ़ने लायक रहता है, इसलिए उस समय दबाई गई कुंजियां खो जाती हैं। अगर dsh का `/` मेन्यू अभी भी खुला है, तो `Enter` हाइलाइट की गई पंक्ति चुनता है और कुछ नहीं भेजता।
190
- - **मोबाइल कनेक्ट** सिर्फ़ macOS पर काम करता है (यह `en0`, `openssl`, `swift` और `dns-sd` इस्तेमाल करता है)। यह तय पोर्ट 19390 और 19391 इस्तेमाल करता है, इसलिए हर Mac पर एक समय में सिर्फ़ एक dsh इसे चला सकता है (फ़ोन की Mac सूची में हर Mac एक एंट्री है)। फ़ोन को सूचनाएं सिर्फ़ तब मिलती हैं, जब Tether खुला हो या अभी-अभी बैकग्राउंड में गया हो (कोई पुश सेवा नहीं)। iOS ऐप अभी App Store पर नहीं है: इसे Xcode से `tether/ios` से बनाएं। "Tailscale only" के लिए भी Mac पर Wi-Fi या Ethernet पता ज़रूरी है (गेटवे सिर्फ़ ऐसे पते के साथ शुरू होता है)। एक्सेस लॉग हर Mac का अलग होता है और सिर्फ़ सबसे नई 200 कोशिशें रखता है; एक मिनट के अंदर दोहराई गई कोशिश उसी पंक्ति की गिनती एक बढ़ाती है। Tether का ऐप लॉक iPhone की लॉक स्क्रीन पर सूचनाओं के प्रीव्यू नहीं छिपाता: उन्हें iOS सेटिंग में बंद करें। Tether के हरे बिंदु Mac के हिसाब से चलते हैं: जिस चैट को आप dsh में खोलते हैं, उसका बिंदु फ़ोन पर भी हट जाता है। जिस चैट को आप Tether में खोलते हैं, उसका बिंदु सिर्फ़ फ़ोन पर हटता है। Mac पर dsh का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
207
+ - **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
208
+ - **मोबाइल कनेक्ट** सिर्फ़ 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 का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
191
209
  - सेशन लिंक चैट के अंदर काम करता है; उस पर क्लिक करने से चैट नहीं खुलती। **संदेश लिंक कॉपी करें** से बना लिंक अपना संदेश सिर्फ़ dsh 0.2.1 और बाद के वर्शन में खोलता है, और सिर्फ़ किसी चैट के संदेश से (dsh 0.2.0 में यूज़र टेक्स्ट के नियम नहीं हैं, इसलिए वहां लिंक कॉपी तो होता है, पर सादे टेक्स्ट की तरह दिखता है)। जो संदेश किसी रोलबैक ने हटाया, या जिसे कॉम्पैक्ट करने से dsh के लोड किए गए इतिहास से हटा दिया गया, वह नहीं दिख सकता: तब लिंक यही बताता है। 🔗 बटन dsh की संदेश पंक्तियों से जुड़ते हैं; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो वे नहीं दिखते।
192
210
  - **सभी को पढ़ा हुआ मार्क करें** dsh के अपने अपठित बिंदुओं को dsh के ऐसे हिस्से से बदलता है, जो सार्वजनिक API नहीं है (dsh के सेशन स्टेटस की `completionUnread` सूची)। अगर dsh का कोई अपडेट इसका नाम बदलता है, तो आइटम नहीं दिखता। आइटम dsh के प्रोजेक्ट वाले "…" मेन्यू में जाता है, जिसमें प्लगइन के लिए कोई slot नहीं है; अगर dsh वह मेन्यू बदलता है, तो भी आइटम नहीं दिखता।
193
- - **कतार वाले संदेश को उसी जगह एडिट करें** dsh का अपना कतार एडिटर खोलता है, इसलिए उसकी सीमाएं भी लागू होती हैं: इमेज या फ़ाइल वाला संदेश एडिट नहीं हो सकता, और जो संदेश इस बीच भेजा जाने लगा, वह नहीं बदलता (dsh अपनी त्रुटि दिखाता है)।
211
+ - **कतार वाले संदेश को उसी जगह एडिट करें** उस संदेश को नहीं बदलता जो इस बीच भेजा जाने लगा, और उस संदेश को ओवरराइट नहीं करता जो इस बीच बदल गया (जैसे iPhone पर Tether में): एक सूचना यह बताती है। नई इमेज के लिए ऐसा मॉडल चाहिए जो इमेज लेता हो (dsh की अपनी इमेज सीमाएं लागू होती हैं), और नई फ़ाइल का अपलोड पूरा होने के बाद ही संदेश सेव हो सकता है। सिर्फ़ आपके अपने कतार वाले संदेश एडिट होते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब एडिट नहीं होता। प्लगइन अपडेट के बाद सिर्फ़ टेक्स्ट वाले एडिट तुरंत काम करते हैं: इमेज या फ़ाइल वाला संदेश सेव करने से पहले dsh रीस्टार्ट करें (Host वाला हिस्सा शुरू होने पर लोड होता है)।
194
212
  - **फिर से करें** रोलबैक की गई चैट को कभी नहीं बदलता: यह रोलबैक से ठीक पहले के पल से एक नई चैट शुरू करता है (dsh का अपना फ़ोर्क, मॉडल का वही कॉन्टेक्स्ट), इसलिए नई चैट का id और शीर्षक नया होता है। किसी चैट का सिर्फ़ सबसे नया रोलबैक, सिर्फ़ एक बार, और सिर्फ़ तब तक फिर से किया जा सकता है, जब तक उसके बाद कुछ नहीं आया (नया संदेश यह विकल्प खत्म कर देता है)। रोलबैक के बाद आपकी बदली हुई फ़ाइल रखी जाती है, जब तक आप उसे ओवरराइट करने वाला बॉक्स नहीं चुनते। फिर से करने के लिए वह स्नैपशॉट चाहिए, जो रोलबैक ने रखा (वही 50 एंट्री की सीमा); इस वर्शन से पहले का रोलबैक, या **सिर्फ़ चैट** वाला रोलबैक, सिर्फ़ संदेश वापस लाता है।
213
+ - **ट्री** ब्रांच मैप अनुमान लगाता है कि हर तीर कहाँ जाता है, क्योंकि git यह सेव नहीं करता कि कोई ब्रांच किस ब्रांच में मर्ज हुई। मर्ज की गई ब्रांच उस ब्रांच की ओर इशारा करती है, जिसके मर्ज कमिट ने उसे सबसे पहले लिया। इंतज़ार कर रही ब्रांच उस सबसे नज़दीकी ब्रांच की ओर इशारा करती है, जिससे वह शुरू हुई (पहले मुख्य ब्रांच); जब दो ब्रांच एक ही कमिट से शुरू हुई हों, तो मैप ग़लत ब्रांच चुन सकता है। जो ब्रांच fast-forward से आगे बढ़ी, उसका कोई मर्ज कमिट नहीं होता, इसलिए उसका **मर्ज की गई** लेबल कुछ नहीं खोलता। मुख्य ब्रांच `origin` की डिफ़ॉल्ट ब्रांच है; वह न हो तो `main` या `master`; वे भी न हों तो खुली हुई ब्रांच। मैप नवीनतम 20,000 कमिट पढ़ता है और ज़्यादा से ज़्यादा 60 ब्रांच दिखाता है; लंबे इतिहास में वह बताता है कि कुछ तीर ग़लत हो सकते हैं। squash या rebase से मर्ज की गई ब्रांच (जैसे GitHub पर) **इंतज़ार में** दिखती है: git उसके कमिट से कोई जुड़ाव नहीं रखता।
195
214
  - **यह चैट** सिर्फ़ वे फ़ाइलें गिनता है, जो dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) ने लिखीं। जो फ़ाइलें किसी कमांड (`bash`) ने बदलीं, वे इस व्यू में नहीं हैं; वे **कमिट नहीं किए गए** में दिखती हैं। अगर चैट का टर्न रोलबैक स्नैपशॉट नहीं है (टर्न रोलबैक बंद है, dsh-rewind-plugin इंस्टॉल है, या चैट प्लगइन से पुरानी है), तो व्यू आखिरी कमिट से तुलना करता है और यह बताता है। टर्न रोलबैक किसी चैट के 50 नवीनतम स्नैपशॉट रखता है: लंबी चैट में व्यू सबसे पुराने रखे गए स्नैपशॉट से तुलना करता है, बताता है कि किस संदेश से, और पहले के बदलाव नहीं गिनता। **व्हाइटस्पेस बदलाव छिपाएं** का मतलब `git diff -w` है: जिस पंक्ति में सिर्फ़ अंदर की स्पेस बदली, वह भी छिप जाती है।
196
215
  - **GitHub इश्यू खोलें** के लिए dsh के PATH में GitHub CLI (`gh`) और चैट के फ़ोल्डर में GitHub रिमोट ज़रूरी है। यह ज़्यादा से ज़्यादा 60 सेकंड चलता है; अगर `gh` इससे ज़्यादा समय लेता है, तो इश्यू GitHub पर बन चुका हो सकता है, पर सूची में उसका लिंक नहीं होगा (दोबारा क्लिक करने से पहले GitHub पर देखें: सूची लिंक सिर्फ़ पूरे हुए रन से पढ़ती है, इसलिए नया क्लिक दूसरा इश्यू खोल सकता है)। एक से ज़्यादा GitHub रिमोट वाला फ़ोल्डर `gh` का अपना डिफ़ॉल्ट (`gh repo set-default`) इस्तेमाल करता है।
197
216
  - **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
198
217
  - **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। अगर चैट के ऊपर वाली प्रोजेक्ट पंक्ति का नाम ब्रांच के नाम जैसा ही है (जैसे “हर चैट की अपनी ब्रांच” वाला फ़ोल्डर), तो चैट पंक्ति पर लेबल नहीं दिखता, लेकिन “एक ही सूची में” व्यू में लेबल अब भी दिखता है।
218
+ - **हर चैट की अपनी ब्रांच** प्लान मोड में: 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")।
220
+ - **वर्कस्पेस ट्री में ब्रांच** बिना क्लिक के 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 की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
199
221
  - **चैट में खोजें** सिर्फ़ वही खोजता है, जो पेज दिखाता है: लोड हो चुके संदेश और जवाब (पुराने संदेशों के लिए ऊपर स्क्रॉल करें या **पहले के लोड करें** पर क्लिक करें), बंद टूल स्टेप नहीं और किसी टूल के आउटपुट में फ़ोल्ड किया गया टेक्स्ट भी नहीं। यह ज़्यादा से ज़्यादा 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 सेकंड को बदला नहीं जा सकता।
200
223
  - रीस्टार्ट से पहले भेजी गई सूचना पर क्लिक करने से सिर्फ़ dsh सामने आता है।
201
224
  - सक्रिय प्रोजेक्ट dsh के सेव किए गए प्रोजेक्ट क्रम के ज़रिए खिसकाए जाते हैं, इसलिए नया क्रम रीस्टार्ट के बाद भी बना रहता है। किसी प्रोजेक्ट से बाहर की चैट ("बिना समूह") नहीं खिसकाई जा सकतीं; dsh उन्हें हमेशा आखिर में दिखाता है।
202
- - dsh के साइडबार के व्यू के विकल्प वाले मेन्यू में कोई एक्सटेंशन पॉइंट नहीं है, इसलिए हाल के प्रोजेक्ट का विकल्प dsh के अपने मेन्यू में जोड़ा जाता है। अगर dsh का कोई अपडेट वह मेन्यू बदलता है, तो विकल्प नहीं दिखता और सभी प्रोजेक्ट दिखते रहते हैं। फ़िल्टर प्रोजेक्ट की पंक्तियों पर काम करता है, इसलिए **एक ही सूची में** फ़िल्टर नहीं होता। इसे **वर्कस्पेस** के साथ इस्तेमाल करें: **वर्कस्पेस ट्री** में छिपा हुआ पैरेंट फ़ोल्डर अपने अंदर के सक्रिय प्रोजेक्ट भी छिपा देता है। **स्थिति के अनुसार** की भी ऐसी ही सीमा है: dsh में क्रम के लिए कोई slot नहीं है, इसलिए आइटम और पंक्तियों का क्रम dsh के मेन्यू और सूची के मार्कअप से जुड़ते हैं।
225
+ - dsh के साइडबार के व्यू के विकल्प वाले मेन्यू में कोई एक्सटेंशन पॉइंट नहीं है, इसलिए हाल के प्रोजेक्ट का विकल्प dsh के अपने मेन्यू में जोड़ा जाता है। अगर dsh का कोई अपडेट वह मेन्यू बदलता है, तो विकल्प नहीं दिखता और सभी प्रोजेक्ट दिखते रहते हैं। फ़िल्टर प्रोजेक्ट की पंक्तियों पर काम करता है, इसलिए **एक ही सूची में** फ़िल्टर नहीं होता। **वर्कस्पेस ट्री** में, जब तक पैरेंट फ़ोल्डर के अंदर कोई प्रोजेक्ट सक्रिय है, तब तक पैरेंट फ़ोल्डर दिखता रहता है, और जो चैट पंक्तियाँ पिछले 2 घंटों में सक्रिय नहीं रहीं, वे भी छिप जाती हैं; **वर्कस्पेस** में सिर्फ़ प्रोजेक्ट की पंक्तियाँ फ़िल्टर होती हैं। फ़िल्टर यह पढ़ता है कि dsh कौन-सा व्यू दिखा रहा है, dsh की सेव की गई व्यू सेटिंग से (यह सार्वजनिक API नहीं है); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो **वर्कस्पेस ट्री** को **वर्कस्पेस** की तरह फ़िल्टर किया जाता है। प्रोजेक्ट की स्थिति भी यही सेटिंग पढ़ती है: **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के प्रोजेक्ट की चैट भी गिनती है; अगर dsh सेटिंग का नाम बदलता है, तो हर पंक्ति सिर्फ़ अपनी चैट दिखाती है। **स्थिति के अनुसार** की भी ऐसी ही सीमा है: dsh में क्रम के लिए कोई slot नहीं है, इसलिए आइटम और पंक्तियों का क्रम dsh के मेन्यू और सूची के मार्कअप से जुड़ते हैं।
203
226
  - dsh में प्रोजेक्ट की पंक्ति का मेन्यू या वर्कस्पेस हेडर का slot भी नहीं है। **पाथ कॉपी करें** dsh की पंक्ति के मार्कअप से प्रोजेक्ट की पंक्ति ढूंढता है। **सभी प्रोजेक्ट छोटे करें** dsh के हेडर में जाता है और हर खुले प्रोजेक्ट को उसी क्लिक से बंद करता है, जो प्रोजेक्ट की पंक्ति पर होता है। अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो राइट-क्लिक पर ब्राउज़र का मेन्यू दिखता है और बटन नहीं दिखता।
204
227
  - dsh में नई चैट के प्रोजेक्ट मेन्यू में भी कोई एक्सटेंशन पॉइंट नहीं है, इसलिए **प्रोजेक्ट खोजें** बॉक्स और A–Z क्रम dsh के मेन्यू मार्कअप से जुड़ते हैं। अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो मेन्यू वैसा ही दिखता है जैसा dsh उसे बनाता है: सेव किए गए क्रम में और बिना खोज बॉक्स के। A–Z क्रम सिर्फ़ एक व्यू है: यह dsh का सेव किया गया प्रोजेक्ट क्रम नहीं बदलता।
205
228
  - dsh में यह चुनने का कोई एक्सटेंशन पॉइंट भी नहीं है कि **नया सेशन** कहाँ खुले। **नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस** dsh के एक ऐसे मेथड को रैप करता है जो सार्वजनिक API नहीं है (dsh की वर्कस्पेस सेवा का `startSession`)। अगर किसी dsh अपडेट में इसका नाम बदलता है, तो **नया सेशन** वहीं खुलेगा जहाँ dsh चुने (खुला या सबसे हाल का प्रोजेक्ट)। प्रोजेक्ट न बताने वाली हर कॉल डिफ़ॉल्ट का उपयोग करती है: साइडबार बटन, उसका शॉर्टकट, लोगो और **ऑटोमेशन टास्क** पेज पर **नया** भी। dsh शुरू होने पर अब भी पिछली चैट खोलता है। सामान्य फ़ोल्डर पहली बार उपयोग पर बनता है और आपके प्रोजेक्ट में जुड़ता है; Windows या Linux पर Documents फ़ोल्डर हटाया गया हो तो यह dsh के अपने फ़ोल्डर से अलग हो सकता है।
@@ -207,6 +230,12 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
207
230
  - **टाइप करते समय पूरा करें** अपना टेक्स्ट dsh के अपने कंपोज़र संकेत से दिखाता है (`--dsh-composer-hint` स्टाइल, जिसे dsh स्लैश कमांड के आर्ग्युमेंट संकेत के लिए इस्तेमाल करता है)। यह स्लैश कमांड पर, फ़ाइल या सिंबल चिप वाले संदेश पर, या कर्सर के संदेश के आख़िर में न होने पर नहीं चलता। अगर dsh का कोई अपडेट वह स्टाइल बदलता है, तो पूरा करने का कोई सुझाव नहीं दिखता। टाइप करते समय हर ठहराव पर एक मॉडल कॉल होती है।
208
231
  - **प्रॉम्प्ट बेहतर करें** सिर्फ़ प्रोजेक्ट का छोटा सारांश, बदले गए पाथ और वे पाथ देखता है जिनके नाम आपके शब्दों से मिलते हैं: खुद कोड नहीं। इसलिए यह सही फ़ाइल चूक सकता है, और सिर्फ़ वही पाथ बताता है जो उसे दिए गए थे। भेजने से पहले नया टेक्स्ट पढ़ें। यह स्लैश कमांड पर या फ़ाइल या सिंबल चिप वाले संदेश पर नहीं चलता (नया टेक्स्ट सादा टेक्स्ट होता है, इसलिए चिप खो जाती), और एक संदेश में ज़्यादा से ज़्यादा 8,000 अक्षर हो सकते हैं। इमेज जुड़ी रहती हैं: सिर्फ़ टेक्स्ट बदलता है। हर क्लिक पर एक मॉडल कॉल होती है; किसी शक्तिशाली मॉडल को एक मिनट लग सकता है (`Esc` रद्द करता है)।
209
232
  - **लक्ष्य जांच** सिर्फ़ वह पूरा होना जांचती है, जो एजेंट किसी अपने-आप चलने वाले लक्ष्य राउंड में करता है: चैट में आपके कहने पर किया गया पूरा होना, `/goal` और लक्ष्य बार नहीं जांचे जाते। एजेंट खुद टेस्ट या टेस्ट कमांड की फ़ाइलें बदल सकता है; सत्यापक चैट पढ़ता है और यह देख सकता है, पर वह दोनों तरफ़ गलत हो सकता है (गलत "पूरा नहीं हुआ" एक और राउंड लेता है; गलत "पूरा हुआ" लक्ष्य बंद कर देता है)। सत्यापक चैट और `git status` देखता है, खुद कोड नहीं। टेस्ट रन तभी दोबारा इस्तेमाल होता है, जब फ़ाइलें बदल सकने वाला एजेंट का सबसे नया कदम उसी फ़ोल्डर में बिल्कुल उसी कमांड का एजेंट का अपना सफल `bash` रन था; पाइप (`| tail`) या `&&` वाली कमांड दोबारा इस्तेमाल नहीं होती। बजट टर्न खत्म होने पर मापा जाता है, इसलिए एक टर्न उससे आगे जा सकता है। सिर्फ़ चैट की अपनी मॉडल कॉल गिनी जाती हैं (उसके सबएजेंट की नहीं)। जांच चलते समय `update_goal` इंतज़ार करता है (टेस्ट ज़्यादा से ज़्यादा 15 मिनट, सत्यापक ज़्यादा से ज़्यादा 3 मिनट)। फ़ोर्क को नया चैट id मिलता है, इसलिए वह पैरेंट चैट की अपनी टेस्ट कमांड और सीमाओं के बिना शुरू होता है। सत्यापक तक पहुंचने वाले हर पूरा होने पर एक मॉडल कॉल लगती है।
233
+ - **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो 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 की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
235
+ - **बैकअप** एक ही तय फ़ोल्डर इस्तेमाल करता है, `~/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
+ - **बहाली:** सिर्फ़ रेस्क्यू कंसोल में चलती है, जब dsh बंद हो, और पूरे dsh होम को बदल देती है। पुराना होम उसके बगल में `.dsh.pre-restore-<time>` के रूप में तब तक रहता है, जब तक आप उसे हटा नहीं देते, इसलिए डिस्क पर दोनों के लिए जगह चाहिए। चैट अपने प्रोजेक्ट पाथ बनाए रखती हैं: दूसरे कंप्यूटर पर, किसी दूसरे पाथ पर रखा प्रोजेक्ट तब तक गायब दिखता है, जब तक आप उसे फिर से नहीं जोड़ते। dsh होम से बाहर इशारा करने वाले symlink (जैसे किसी दूसरे फ़ोल्डर से लिंक की गई skills) लिंक के रूप में वापस आते हैं; उनके टारगेट उस कंप्यूटर पर होने चाहिए।
237
+ - **सेशन लॉग जांच** हर चैट का सबसे नया लॉग dsh के उन्हीं नियमों से पढ़ती है, जिनसे dsh तय करता है कि क्या खुलेगा: जो लाइन JSON नहीं है या क्रम से बाहर है, उसे तभी खराबी गिना जाता है जब उसके बाद कोई टर्न खत्म होता है (वरना dsh उस लाइन से आगे की लाइनों के बिना चैट खोल देता है, इसलिए वह सूची में नहीं दिखती)। यह लॉग के इवेंट को dsh के अपने इवेंट नियमों से नहीं जांचती, इसलिए जिस लॉग को यह सही बताती है, वह भी dsh अपग्रेड के बाद शायद न खुले। ठीक करने पर कॉपी किसी बैकअप से ली जाती है: उस बैकअप के बाद के संदेश उस चैट से चले जाते हैं (खराब फ़ाइल बगल में रहती है)। इस dsh में खुली चैट सेटिंग में ठीक नहीं की जाती: dsh उसे पकड़े रहता है।
238
+ - **अपने-आप बैकअप** सिर्फ़ तब चलता है, जब dsh चल रहा हो: dsh बंद रहते समय जिस बैकअप का समय हो गया था, वह अगली बार शुरू होने के लगभग 45 सेकंड बाद चलता है। नए वर्शन का स्नैपशॉट अपडेट से पहले नहीं, बल्कि उस शुरुआत के बाद लिया जाता है।
210
239
  - बिल्ट-इन सपोर्ट का अनुरोध upstream में किया गया है: कतार के `move` के लिए [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), जारी रखें वाली स्थिति के लिए [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269)।
211
240
 
212
241
  ## अक्सर पूछे जाने वाले सवाल
@@ -235,9 +264,19 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
235
264
 
236
265
  **क्या एजेंट को अपना काम खुद पूरा मार्क करने से रोका जा सकता है, जैसे loop engineering के सत्यापक लूप में?** हां, **लक्ष्य जांच** के साथ (डिफ़ॉल्ट रूप से चालू): `/goal` से एक लक्ष्य शुरू करें। जब एजेंट कहता है कि लक्ष्य पूरा हो गया, तो प्रोजेक्ट के टेस्ट चलते हैं और एक स्वतंत्र मॉडल कॉल चैट के आधार पर लक्ष्य जांचती है; अगर इनमें से कोई विफल होता है, तो लक्ष्य खुला रहता है और एजेंट वजह पढ़ता है। लक्ष्य के नीचे की **लक्ष्य जांच** पंक्ति में **संपादित करें** से अपनी टेस्ट कमांड, समय सीमा या टोकन सीमा सेट करें।
237
266
 
267
+ **क्या एजेंट DS Bot की मेमोरी की तरह अलग-अलग चैट में मेरी पसंद याद रख सकता है?** हां, **प्रोजेक्ट मेमोरी** से (डिफ़ॉल्ट रूप से बंद): इसे **सेटिंग → Composer Plus** में चालू करें। हर टर्न के बाद आपकी लंबे समय तक रहने वाली पसंद और फ़ैसले चैट के प्रोजेक्ट के लिए छोटे नोट के रूप में सेव होते हैं, और उस प्रोजेक्ट की हर नई चैट उन्हें पढ़ती है। एजेंट से कुछ याद रखने को कहें, वह उसे तुरंत सेव कर देता है।
268
+
269
+ **क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
270
+
271
+ **dsh अब शुरू नहीं होता। बैकअप कैसे बहाल करें?** बैकअप फ़ोल्डर (`~/Desktop/dsh-backups`) खोलें और `Composer Plus Rescue.command` पर डबल-क्लिक करें (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`)। `3) Restore a backup` चुनें, कोई एक बैकअप चुनें और `RESTORE` टाइप करें। यह dsh के बिना काम करता है।
272
+
273
+ **dsh को नए कंप्यूटर पर कैसे ले जाएं?** पुराने कंप्यूटर पर: किसी बैकअप के बगल में **बैकअप** → **दूसरे कंप्यूटर के लिए**। वह फ़ोल्डर नए कंप्यूटर पर कॉपी करें, वहां dsh इंस्टॉल करें, उसे बंद करें, कॉपी किए गए फ़ोल्डर में `Composer Plus Rescue` खोलें और बहाल करें। अपनी API कुंजियां फिर से डालें (वे पुराने कंप्यूटर पर रहती हैं)।
274
+
275
+ **क्रैश के बाद कोई चैट नहीं खुलती। क्या मैं उसे ठीक कर सकता हूं?** **सेटिंग → Composer Plus → सेशन लॉग जांच → सेशन लॉग जांचें**। खराब चैट **बैकअप से ठीक करें** से सबसे नए बैकअप से वापस आती है (उस बैकअप के बाद के संदेश चले जाते हैं)।
276
+
238
277
  **dsh में कतार वाले संदेशों का क्रम कैसे बदलें?** कतार वाले संदेश पर ⠿ हैंडल खींचें, या उस पर फ़ोकस करके `↑` / `↓` दबाएं।
239
278
 
240
- **कतार वाले संदेश में टाइपो कैसे ठीक करें?** कतार में संदेश पर डबल-क्लिक करें, टेक्स्ट बदलें और `Enter` दबाएं (`Esc` रद्द करता है)। संदेश कतार में अपनी जगह पर रहता है।
279
+ **कतार वाले संदेश में टाइपो कैसे ठीक करें?** कतार में संदेश पर डबल-क्लिक करें, टेक्स्ट बदलें और `Enter` दबाएं (`Esc` रद्द करता है)। संदेश कतार में अपनी जगह पर रहता है। वहीं आप उसकी इमेज और फ़ाइलें हटा भी सकते हैं या नई जोड़ भी सकते हैं।
241
280
 
242
281
  **किसी प्रोजेक्ट के सभी अपठित बिंदु एक साथ कैसे हटाएं?** साइडबार → प्रोजेक्ट का **…** बटन → **सभी को पढ़ा हुआ मार्क करें**।
243
282
 
@@ -265,13 +304,17 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
265
304
 
266
305
  **dsh का कोई टास्क पूरा होने या मंज़ूरी मांगने पर macOS / Windows सूचनाएं कैसे पाएं?** **बैकग्राउंड सूचनाएं** चालू रखें (डिफ़ॉल्ट) और OS की सेटिंग में DeepSeek Harness के लिए सूचनाओं की अनुमति दें।
267
306
 
307
+ **क्या dsh मुझसे सवाल पूछ रही चैट को खुद खोल सकता है?** हां, **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** से (डिफ़ॉल्ट रूप से चालू): जब कोई चैट जवाब, मंज़ूरी या प्लान रिव्यू का इंतज़ार कर रही हो और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh उसे खोल देता है। जब आप टाइप, स्क्रॉल या माउस हिला रहे हों, तब यह इंतज़ार करता है।
308
+
268
309
  **DeepSeek Harness का इंटरफ़ेस तुर्की, स्पेनिश, जापानी… में कैसे बदलें?** सेटिंग → Composer Plus → **ऐप्लिकेशन की भाषा**।
269
310
 
270
311
  **अपने iPhone से dsh कैसे इस्तेमाल करें?** `tether/ios` से Tether ऐप बनाएं (Xcode), **सेटिंग → Composer Plus → मोबाइल कनेक्ट (iPhone)** चालू करें, नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें, QR कोड स्कैन करें (iPhone के कैमरा से या Tether में **Scan code** से), **Connect** पर टैप करें और **Approve** पर क्लिक करें। घर से दूर होने पर दोनों डिवाइस पर Tailscale इस्तेमाल करें।
271
312
 
272
313
  **नया सेशन हमेशा एक ही प्रोजेक्ट में कैसे खोलें?** सेटिंग → Composer Plus → **नया सेशन के लिए डिफ़ॉल्ट वर्कस्पेस** → **नया सेशन यहाँ खोलें** → प्रोजेक्ट चुनें। किसी दूसरे प्रोजेक्ट के पास का `+` अब भी उसी प्रोजेक्ट को खोलता है।
273
314
 
274
- **एक ही प्रोजेक्ट की कई सुविधाओं पर एक साथ, हर एक को उसकी अपनी ब्रांच पर, कैसे काम करें?** **हर चैट की अपनी ब्रांच** से: नई चैट → ब्रांच आइकन वाला main बटन → **नई ब्रांच**, फिर पहला संदेश भेजें। हर चैट को अपनी ब्रांच और worktree फ़ोल्डर मिलता है, और अगर `.worktreeinclude` में आपकी `.env` और `node_modules` दी गई हैं, तो वे भी साथ आती हैं। चैट का हेडर बताता है कि आप किस ब्रांच पर हैं।
315
+ **एक ही प्रोजेक्ट की कई सुविधाओं पर एक साथ, हर एक को उसकी अपनी ब्रांच पर, कैसे काम करें?** **हर चैट की अपनी ब्रांच** से: नई चैट की स्क्रीन पर ब्रांच बटन डिफ़ॉल्ट रूप से **नई ब्रांच** दिखाता है: पहला संदेश भेजें। हर चैट को अपनी ब्रांच और worktree फ़ोल्डर मिलता है, और अगर `.worktreeinclude` में आपकी `.env` और `node_modules` दी गई हैं, तो वे भी साथ आती हैं। चैट का हेडर बताता है कि आप किस ब्रांच पर हैं।
316
+
317
+ **क्या साइडबार किसी प्रोजेक्ट की हर ब्रांच दिखा सकता है और एजेंट के ब्रांच बनाने पर मेरी चैट ले जा सकता है?** हाँ, **वर्कस्पेस ट्री में ब्रांच** से (डिफ़ॉल्ट रूप से बंद): इसे सेटिंग → Composer Plus में चालू करें, फिर dsh में **व्यू के विकल्प** → **वर्कस्पेस ट्री** चुनें। `<project>/.worktrees/` में worktree वाली हर ब्रांच अपने प्रोजेक्ट के अंदर दिखती है। जब आप प्रोजेक्ट फ़ोल्डर के एजेंट से ब्रांच बनाकर उसमें काम करने को कहते हैं, और फ़ोल्डर में कोई अनकमिटेड बदलाव नहीं होता, तो चैट अपने-आप उस ब्रांच में चली जाती है। ब्रांच का फ़ोल्डर हटाने पर वह सूची से हट जाती है; उसकी चैट **बिना समूह** में चली जाती हैं।
275
318
 
276
319
  **क्या मैं अपने iPhone से फ़ोटो भेज सकता हूं?** हां। Tether की किसी चैट में संदेश फ़ील्ड के पास **+** पर टैप करें → Camera, Photos (ज़्यादा से ज़्यादा 4) या Paste image। फ़ोटो आपके संदेश के अटैचमेंट के रूप में Mac की चैट में जाती हैं, इसलिए मॉडल उन्हें देखता है।
277
320
 
@@ -287,6 +330,7 @@ PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh
287
330
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
288
331
  # recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
289
332
  PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
333
+ PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
290
334
  # Order by status (fake model + Schedule): real-app test + its thumbnail
291
335
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
292
336
  # every Settings feature row shows a loading screenshot and a ? link to its README row
@@ -297,10 +341,14 @@ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/
297
341
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
298
342
  # Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
299
343
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
344
+ # 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
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
300
346
  # Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
301
347
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
302
348
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
303
349
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
350
+ # Resume after restart with a queue (fake model, real quit and start): text, image, file, a drag and an edit come back in order
351
+ PLAYWRIGHT=/path/to/playwright node test/browser-resume-queue.mjs /path/to/dsh/lib/bin.js
304
352
  # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
305
353
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
306
354
  # Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
@@ -315,8 +363,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path
315
363
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
316
364
  # Mark all as read, Copy message link, Edit queued message in place, Redo, Changes → This chat and Hide whitespace (fake model, made-up git projects) + their thumbnails
317
365
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-six-features.mjs /path/to/dsh/lib/bin.js
318
- # Changes Tree (fake model, made-up git history): branch list, a branch's commits, commit files and diffs, back marks the row + its thumbnail
366
+ # Changes Tree (fake model, made-up git history): the branch map (counts, colors, arrows), a branch's commits, commit files and diffs, Merged and Waiting files, back marks the box + its thumbnail
319
367
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
368
+ # Branches in the workspace tree (fake model, made-up git project): a worktree becomes a project, the agent's new branch moves the chat, a deleted folder leaves the tree + its thumbnail
369
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-branch-tree.mjs /path/to/dsh/lib/bin.js
320
370
  # Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
321
371
  PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
322
372
  # Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
@@ -327,6 +377,9 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path
327
377
  # Queue drag-and-drop and Continue with a queued message (slow fake model)
328
378
  PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
329
379
  PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
380
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
381
+ # Edit queued message in place with images and files (slow fake model) + its thumbnail
382
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
330
383
  ```
331
384
 
332
385
  ```sh