dsh-composer-plus 1.22.0 → 1.24.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
@@ -14,7 +14,7 @@
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="Composer Plus के साथ DeepSeek Harness: चल रहे प्रोजेक्ट के लिए साइडबार में स्पिनर दिखता है और बदलाव पैनल git डिफ़ दिखाता है"></p>
16
16
 
17
- यह एक अनौपचारिक कम्युनिटी प्लगइन है। यह सिर्फ़ अपडेट जांचने के लिए नेटवर्क कॉल करता है (GitHub रिलीज़ और npm रजिस्ट्री)। शुरू होते समय ये कॉल रोकने के लिए **अपने-आप अपडेट** बंद करें। **सुविधाओं के आइडिया** आपकी चैट के अपने मॉडल को सिर्फ़ तब कॉल करता है, जब आप **सुविधाएं सुझाएं** पर क्लिक करते हैं। **अगले संदेश का अनुमान** (डिफ़ॉल्ट रूप से चालू) हर पूरे हुए टर्न के बाद सेटिंग में चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को बिना क्लिक के एक बार कॉल करता है। ये कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। **टाइप करते समय पूरा करें** (डिफ़ॉल्ट रूप से बंद) आपके इसे चालू करने के बाद, टाइप करते समय हर ठहराव पर इसके लिए चुने गए मॉडल (डिफ़ॉल्ट रूप से अनुमान वाला मॉडल) को कॉल करता है। **प्रॉम्प्ट बेहतर करें** किसी मॉडल को सिर्फ़ तब कॉल करता है, जब आप उसकी जादुई छड़ी पर क्लिक करते हैं। **टास्क बोर्ड** बोर्ड पर शुरू किए गए हर टास्क के टैग के लिए नई चैट के मॉडल को एक बार कॉल करता है। **AI सारांश** सेटिंग के साथ (डिफ़ॉल्ट **तेज़ (AI के बिना)** है), जब आप बोर्ड पर या Tether में किसी चल रहे टास्क की प्रगति देखते हैं, तब यह छोटे प्रगति नोट के लिए उस चैट के मॉडल को भी कॉल करता है। **लक्ष्य जांच** (डिफ़ॉल्ट रूप से चालू) जब भी एजेंट किसी अपने-आप चलने वाले राउंड में `/goal` को पूरा मार्क करता है, तब एक मॉडल को एक बार कॉल करती है। **मोबाइल कनेक्ट** (डिफ़ॉल्ट रूप से बंद) आपके लोकल नेटवर्क या tailnet से iPhone के कनेक्शन सिर्फ़ तब स्वीकार करता है, जब आप इसे चालू करते हैं।
17
+ यह एक अनौपचारिक कम्युनिटी प्लगइन है। अपडेट जांचने के लिए यह नेटवर्क कॉल करता है (GitHub रिलीज़ और npm रजिस्ट्री)। शुरू होते समय ये कॉल रोकने के लिए **अपने-आप अपडेट** बंद करें। **तुर्की स्किल पैक** (डिफ़ॉल्ट रूप से चालू) केवल तब, जब **ऐप्लिकेशन की भाषा** Türkçe हो, GitHub से turkish-anti-ai-skill डाउनलोड करता है और दिन में एक बार नया संस्करण जाँचता है; ये कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। **सुविधाओं के आइडिया** आपकी चैट के अपने मॉडल को सिर्फ़ तब कॉल करता है, जब आप **सुविधाएं सुझाएं** पर क्लिक करते हैं। **अगले संदेश का अनुमान** (डिफ़ॉल्ट रूप से चालू) हर पूरे हुए टर्न के बाद सेटिंग में चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को बिना क्लिक के एक बार कॉल करता है। ये कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। **टाइप करते समय पूरा करें** (डिफ़ॉल्ट रूप से बंद) आपके इसे चालू करने के बाद, टाइप करते समय हर ठहराव पर इसके लिए चुने गए मॉडल (डिफ़ॉल्ट रूप से अनुमान वाला मॉडल) को कॉल करता है। **प्रॉम्प्ट बेहतर करें** किसी मॉडल को सिर्फ़ तब कॉल करता है, जब आप उसकी जादुई छड़ी पर क्लिक करते हैं। **टास्क बोर्ड** बोर्ड पर शुरू किए गए हर टास्क के टैग के लिए नई चैट के मॉडल को एक बार कॉल करता है। **AI सारांश** सेटिंग के साथ (डिफ़ॉल्ट **तेज़ (AI के बिना)** है), जब आप बोर्ड पर या Tether में किसी चल रहे टास्क की प्रगति देखते हैं, तब यह छोटे प्रगति नोट के लिए उस चैट के मॉडल को भी कॉल करता है। **लक्ष्य जांच** (डिफ़ॉल्ट रूप से चालू) जब भी एजेंट किसी अपने-आप चलने वाले राउंड में `/goal` को पूरा मार्क करता है, तब एक मॉडल को एक बार कॉल करती है। **मोबाइल कनेक्ट** (डिफ़ॉल्ट रूप से बंद) आपके लोकल नेटवर्क या tailnet से iPhone के कनेक्शन सिर्फ़ तब स्वीकार करता है, जब आप इसे चालू करते हैं।
18
18
 
19
19
  ## इंस्टॉल करें
20
20
 
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  फिर dsh रीस्टार्ट करें। (CLI डेस्कटॉप प्रोफ़ाइल में इंस्टॉल नहीं कर सकता; उस प्रोफ़ाइल को ऐप खुद संभालता है।)
31
31
 
32
- > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.22.0`।
32
+ > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.24.0`।
33
33
 
34
34
  ## सुविधाएं
35
35
 
@@ -48,6 +48,7 @@ dsh plugin --profile web add dsh-composer-plus
48
48
  | **कंपोज़र में फ़ोकस बनाए रखें** | <a id="feature-keepfocus"></a>`/` कमांड या स्किल भेजने के बाद कर्सर कंपोज़र में ही रहता है, और आप तुरंत फिर से टाइप कर सकते हैं। यह उन कीबोर्ड मैक्रो के साथ भी काम करता है, जो कमांड टाइप करके `Enter` दबाते हैं। कमांड प्रोसेस करते समय dsh कंपोज़र को सिर्फ़ पढ़ने लायक (read-only) बना देता है, और तब ब्राउज़र फ़ोकस हटा देता है। यह सुविधा फ़ोकस वापस लाती है, बशर्ते फ़ोकस किसी मेन्यू, डायलॉग या दूसरे फ़ील्ड में न हो। | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="स्क्रीनशॉट: कंपोज़र में फ़ोकस बनाए रखें"></a> |
49
49
  | **प्रश्न कार्ड को विंडो में फ़िट करें** | <a id="feature-questionfit"></a>जब एजेंट आपसे कोई प्रश्न पूछता है, तो प्रश्न और उसके उत्तर कार्ड में एक साथ स्क्रॉल होते हैं, और **छोड़ें** और **सबमिट करें** नीचे दिखते रहते हैं। कार्ड विंडो की ऊंचाई का उपयोग करता है (चैट हेडर और चैट की एक पट्टी के लिए 200 px कम), इसलिए वह विंडो के साथ बड़ा और छोटा होता है। इस फ़ीचर के बिना dsh कार्ड को विंडो के 60% (अधिकतम 520 px) तक सीमित रखता है और केवल उत्तर स्क्रॉल होते हैं: लंबा प्रश्न अपना अंत, उत्तर और बटन कार्ड से बाहर धकेल सकता है। | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="स्क्रीनशॉट: प्रश्न कार्ड को विंडो में फ़िट करें"></a> |
50
50
  | **चैट हेडर को विंडो में फ़िट करें** | <a id="feature-headerfit"></a>संकरी विंडो में dsh के चैट हेडर के बटन (मोड, सबएजेंट, बैकग्राउंड जॉब, इसमें खोलें, ब्रांच लेबल और अनुमति लेबल) अब एक-दूसरे को नहीं ढकते। चैट का शीर्षक कम से कम 120 px रहता है; जो बटन नहीं समाते, वे दाईं ओर दूसरी पंक्ति में चले जाते हैं, और हर बटन क्लिक करने लायक रहता है। जब सब कुछ एक पंक्ति में समा जाता है (चौड़ी विंडो), तो हेडर ठीक dsh जैसा रहता है। इस सुविधा के बिना dsh सिर्फ़ शीर्षक को छोटा करता है: सबएजेंट और बैकग्राउंड जॉब होने पर संकरे चैट कॉलम में उसके बटन एक-दूसरे पर चढ़ जाते हैं। ब्रांच लेबल (**हर चैट की अपनी ब्रांच**) और अनुमति लेबल (**इस चैट के लिए अनुमति दें**) इस स्विच के बंद होने पर भी हेडर में समा जाते हैं। | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="स्क्रीनशॉट: चैट हेडर को विंडो में फ़िट करें"></a> |
51
+ | **विंडो का आकार याद रखें** | <a id="feature-windowsize"></a>dsh का डेस्कटॉप ऐप हर शुरुआत में अपनी विंडो 1280 × 820 पर खोलता है। इस सुविधा से विंडो उसी आकार और जगह पर खुलती है जो पिछली बार थी। जब भी आप विंडो का आकार बदलते हैं या उसे खिसकाते हैं, आकार सेव होता है, और अगली शुरुआत में प्लगइन लोड होने पर वापस आता है। फ़ुलस्क्रीन या छोटी की गई विंडो सेव नहीं होती; जो डिस्प्ले अब जुड़ा नहीं है, उस पर की जगह मुख्य डिस्प्ले पर वापस आती है। सिर्फ़ डेस्कटॉप ऐप में: ब्राउज़र टैब अपनी विंडो का आकार नहीं बदल सकता। | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="स्क्रीनशॉट: विंडो का आकार याद रखें"></a> |
51
52
  | **एक क्लिक में जारी रखें** | <a id="feature-continuebutton"></a>रुके हुए, विफल या बीच में कटे टर्न के बाद खाली कंपोज़र में **▶** दिखता है। एक क्लिक मौजूदा बातचीत से काम फिर से शुरू करता है। इनपुट में कुछ नहीं लिखा जाता और चैट में कोई दिखने वाला संदेश नहीं जुड़ता (मॉडल को “जहां रुका था, वहीं से जारी रखें” वाला एक छोटा छिपा नोट मिलता है, क्योंकि Claude जैसे कुछ प्रोवाइडर ऐसा अनुरोध अस्वीकार करते हैं, जो असिस्टेंट के जवाब पर खत्म होता है)। कतार में रखे संदेश वहीं रहते हैं: ▶ सिर्फ़ रुके हुए काम को जारी रखता है, उसके बाद कतार चलती है। पूरे हुए टर्न के बाद सामान्य भेजें बटन ही रहता है। | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="स्क्रीनशॉट: एक क्लिक में जारी रखें"></a> |
52
53
  | **रीस्टार्ट के बाद जारी रखें** | <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> |
53
54
  | **कतार में खींचकर छोड़ें** | <a id="feature-queuereorder"></a>कतार वाले संदेशों पर एक हैंडल (⠿) दिखता है। क्रम बदलने के लिए उसे खींचें, या हैंडल पर फ़ोकस करके `↑` / `↓` दबाएं। `Esc` रद्द करता है। | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="स्क्रीनशॉट: कतार में खींचकर छोड़ें"></a> |
@@ -69,9 +70,12 @@ dsh plugin --profile web add dsh-composer-plus
69
70
  | **नई चैट में जारी रखें** | <a id="feature-handoffchat"></a>साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **नई चैट में जारी रखें…**। चैट के अपने मॉडल को एक कॉल, चैट में जो दिखता है उससे एक हैंडऑफ़ नोट लिखती है: काम, आउटपुट, पूरा हुआ, फ़ैसले, खुले मुद्दे और अगला कदम (टूल कॉल और उनके नतीजे सबूत हैं; जिन कदमों को आपने रोलबैक किया, वे शामिल नहीं होते)। नोट एक डायलॉग में खुलता है: उसे पढ़ें और संपादित करें। **फिर से लिखें** एक नया नोट लिखता है। **नई चैट शुरू करें** (या `Cmd/Ctrl+Enter`) उसी प्रोजेक्ट में एक नई चैट खोलता है, जिसका पहला संदेश नोट और पुरानी चैट का लिंक होता है; पुरानी चैट जैसी है वैसी ही रहती है। जब कोई लंबी चैट भर जाए या धीमी हो जाए, या कल जारी रखना हो, तब इसका इस्तेमाल करें। प्रोजेक्ट में कुछ नहीं लिखा जाता। | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="स्क्रीनशॉट: नई चैट में जारी रखें"></a> |
70
71
  | **कॉन्टेक्स्ट का ब्योरा** | <a id="feature-contextbreakdown"></a>दायां साइडबार → `+` → **कॉन्टेक्स्ट**। पेज दिखाता है कि खुली चैट के मॉडल कॉन्टेक्स्ट को अभी क्या भर रहा है और कॉन्टेक्स्ट विंडो का कितना हिस्सा इस्तेमाल हो रहा है: सिस्टम प्रॉम्प्ट, प्रोजेक्ट निर्देश (AGENTS.md), Skills, आपके संदेश, एजेंट के जवाब और टूल कॉल, टूल नतीजे (टूल के हिसाब से), MCP नतीजे (सर्वर के हिसाब से), टूल की परिभाषाएं, कॉम्पैक्शन का सारांश और दूसरे कॉन्टेक्स्ट नोट, हर एक अपने टोकन और हिस्से के साथ। किसी हिस्से के टूल या सर्वर देखने के लिए उस पर क्लिक करें। यह सिर्फ़ चैट लॉग पढ़ता है, `/compact` और रोलबैक के बाद, और किसी मॉडल को कॉल नहीं करता; हर टर्न के बाद और **रीफ़्रेश करें** से यह फिर से पढ़ता है। इससे देखें कि कोई चैट धीमी या भरी हुई क्यों है, जैसे कोई बड़ा MCP टूल नतीजा या बहुत सारी टूल परिभाषाएं। | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="स्क्रीनशॉट: कॉन्टेक्स्ट का ब्योरा"></a> |
71
72
  | **नियोजित चरण** | <a id="feature-plannedsteps"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। एजेंट को `plan_next_steps` टूल मिलता है: किसी कमांड वाले संदेश में ही वह अगली कमांड को सटीक आर्ग्युमेंट और एक शर्त के साथ योजना बना सकता है, जैसे “बिल्ड पास होने पर `npm test` चलाओ”। नतीजा शर्त पूरी करे तो Composer Plus नई मॉडल कॉल के बिना अगला चरण ख़ुद चलाता है, इसलिए लंबी चैट कम टोकन खर्च करती है। चरण चैट में एक छोटी लाइन “Composer Plus · Planned steps: ran `test` … without a model call” के रूप में दिखता है, उसके बाद उसकी टूल कॉल और नतीजा आते हैं। सिर्फ़ `bash`, `read`, `grep` और `glob` चरण; मंज़ूरी, सैंडबॉक्स और सुरक्षित फ़ाइलें हर चरण पर हमेशा की तरह लागू रहती हैं। शर्त पूरी न हो, एक साथ दो चरण तैयार हों, आख़िरी चरण के बाद और जब आप संदेश भेजें, तब मॉडल फिर से जवाब देता है। यह विचार HarnessMM (arXiv 2610.32813) से आया है। | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="स्क्रीनशॉट: नियोजित चरण"></a> |
73
+ | **तुर्की स्किल पैक** | <a id="feature-turkishskill"></a>केवल तब जब **ऐप्लिकेशन की भाषा** Türkçe हो (डिफ़ॉल्ट रूप से चालू; **सेटिंग → Composer Plus** में बंद करें)। Composer Plus GitHub से ओपन-सोर्स [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT, Yüce Zerey द्वारा) डाउनलोड करता है और उसे dsh के स्किल में जोड़ता है। एजेंट से किसी तुर्की पाठ को मानवीय बनाने, फिर से लिखने या लिखने को कहें: dsh स्किल लोड करता है, और इसके नियम एजेंट को AI पैटर्न के बिना स्वाभाविक तुर्की लिखने में मदद करते हैं। पैक की केवल Markdown फ़ाइलें रखी जाती हैं; हर फ़ाइल GitHub की फ़ाइल सूची से मेल खानी चाहिए, और पैक की कोई स्क्रिप्ट नहीं चलती। दिन में एक बार प्लगइन GitHub से नए संस्करण के बारे में पूछता है और उसे इंस्टॉल करता है। पंक्ति इंस्टॉल किया गया संस्करण या इंस्टॉल न होने का कारण दिखाती है। दूसरी भाषा में स्किल इंस्टॉल नहीं होता; भाषा को फिर से Türkçe करने पर वह वापस आ जाता है। | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="स्क्रीनशॉट: तुर्की स्किल पैक"></a> |
74
+ | **कोडबेस सुलझाएं** | <a id="feature-untanglecodebase"></a>डिफ़ॉल्ट रूप से चालू: इसे **सेटिंग → Composer Plus** में बंद करें। [caldoai/skills](https://github.com/caldoai/skills) की स्किल `/untangle-codebase` (MIT, © 2026 Maze) को dsh की स्किल सूची में जोड़ता है। किसी चैट में `/untangle-codebase` लिखें (यह `/` मेन्यू में दिखती है), चाहें तो उसके बाद ध्यान देने वाला हिस्सा भी, जैसे `/untangle-codebase src/api`, और भेजें। एजेंट पहले पूछता है कि क्या वह वे टिप्पणियाँ भी हटाए जो सिर्फ़ कोड को दोहराती हैं, और वे टेस्ट भी जो असली बग नहीं पकड़ सकते। फिर वह हर कॉपी किया गया कोड, छिपा जुड़ाव, बेकार जुड़ाव, सिर्फ़ कॉल आगे भेजने वाला रैपर, बेकार पड़ा कोड और एक बार का खास मामला सूची में लिखता है, बुनियादी सिद्धांतों से सुधार की योजना बनाता है, उन्हें लक्ष्य के रूप में करता है, और सब-एजेंट से तब तक दोबारा जाँच करता है जब तक सुधारने लायक कुछ न बचे। इसे सिर्फ़ आप शुरू कर सकते हैं: मॉडल इसे अपनी स्किल सूची में नहीं देखता, इसलिए यह दूसरी चैट में टोकन खर्च नहीं करती। प्रोजेक्ट में या `~/.dsh/skills` में उसी नाम की स्किल हो तो वही पहले आती है। इसे **हर चैट की अपनी ब्रांच** वाली चैट में शुरू करें और नतीजा **बदलाव पैनल** में देखें। Tether में: संदेश फ़ील्ड में `/untangle-codebase` लिखें। | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="स्क्रीनशॉट: कोडबेस सुलझाएं"></a> |
72
75
  | **सुरक्षित फ़ाइलें** | <a id="feature-protectedfiles"></a>डिफ़ॉल्ट रूप से चालू। एजेंट के अपने फ़ाइल टूल आपके पैटर्न से मेल खाने वाली फ़ाइलें न पढ़ सकते हैं, न बदल सकते हैं: **पढ़ना और लिखना** पैटर्न के लिए किसी फ़ाइल पर `read`, `read_image` और `grep` मना किए जाते हैं, और दोनों तरह के पैटर्न के लिए `write`, `edit` और `str_replace_editor`। एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है। डिफ़ॉल्ट पैटर्न `.env*`, `*.pem` और `*.key` हैं। सेटिंग → Composer Plus → **सुरक्षित फ़ाइलें**: एक पैटर्न जोड़ें (जैसे `published/**` या `config/*.yml`), **पढ़ना और लिखना** और **सिर्फ़ लिखना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से उसे हटाएं, या **डिफ़ॉल्ट इस्तेमाल करें** पर क्लिक करें। `/` के बिना पैटर्न किसी भी फ़ोल्डर में फ़ाइल के नाम से मेल खाता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: शेल कमांड (`cat .env`), स्क्रिप्ट या MCP टूल फिर भी फ़ाइल तक पहुंच सकते हैं (सीमाएं देखें)। | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="स्क्रीनशॉट: सुरक्षित फ़ाइलें"></a> |
73
76
  | **ब्लॉक की गई कमांड** | <a id="feature-blockedcommands"></a>डिफ़ॉल्ट रूप से चालू, खाली सूची के साथ। एजेंट की शेल कमांड (`bash`, `pwsh`) आपके नियमों से मेल खाने वाली कमांड नहीं चला सकतीं: **ब्लॉक** नियम कॉल को मना करता है (एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है), **पहले पूछना** नियम dsh का मंज़ूरी कार्ड दिखाता है, और कमांड सिर्फ़ तब चलती है जब आप उसकी अनुमति देते हैं। सेटिंग → Composer Plus → **ब्लॉक की गई कमांड**: एक नियम टाइप करें (जैसे `npm publish`, `git push --force` या `ssh *192.168.2.19`), **ब्लॉक** और **पहले पूछना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, फिर **जोड़ें** पर क्लिक करें; किसी नियम की तरह बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से नियम हटाएं। नियम एक कमांड का नाम और वे शब्द होते हैं, जो इसी क्रम में उसके बाद आने चाहिए; `*` किसी भी टेक्स्ट से मेल खाता है। यह `&&`, `;`, `\|` के बाद, `$(…)`, `bash -c "…"` या `eval` के अंदर, और `sudo` या `env` के बाद भी कमांड ढूंढता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: कोई वैरिएबल (`$CMD`), स्क्रिप्ट फ़ाइल या दूसरा प्रोग्राम फिर भी कमांड चला सकता है (सीमाएं देखें)। | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="स्क्रीनशॉट: ब्लॉक की गई कमांड"></a> |
74
77
  | **टास्क बोर्ड** | <a id="feature-taskboard"></a>बायां साइडबार → **टास्क बोर्ड**, या dsh में कहीं भी `Cmd+Shift+K` (Windows और Linux पर `Ctrl+Shift+K`) दबाएं। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई जो चैट आपने अभी नहीं खोली, वह **पूरा हुआ** में है (हरी)। चैट खोलने पर उसका कार्ड अपने आप **पूरा हुआ** से हट जाता है; पढ़ी गई खत्म हुई चैट देखने के लिए हरे कार्डों के नीचे **हाल में पूरे हुए (N)** पर क्लिक करें (सबसे नई 10, फिर **N पुराने टास्क दिखाएं**; खुला या बंद होना इस डिवाइस पर रहता है)। जो चैट बोर्ड के पीछे खुली रहते हुए खत्म होती है (**नया टास्क**), वह आपके खोलने तक हरी रहती है। प्रोजेक्ट सूची खोलने के लिए बोर्ड के ऊपर प्रोजेक्ट के नाम पर क्लिक करें, फिर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। चुनने के बाद, `Esc` दबाने पर या सूची के बाहर क्लिक करने पर सूची बंद हो जाती है। किसी प्रोजेक्ट को उसके नाम से ढूंढने के लिए सूची में सबसे ऊपर **प्रोजेक्ट खोजें** में टाइप करें (छोटे-बड़े अक्षर और एक्सेंट मायने नहीं रखते; `Esc` बॉक्स खाली करता है), पहला मिलान चुनने के लिए `Enter` दबाएं, और सिर्फ़ वे प्रोजेक्ट दिखाने के लिए जिनमें कोई चैट इंतज़ार कर रही है, चल रही है, बिना देखे खत्म हुई है या पिछले 2 घंटों में बदली है, **पिछले 2 घंटों में सक्रिय** पर क्लिक करें (यह सेटिंग इस डिवाइस पर रहती है)। **नया टास्क** (या `n`) बोर्ड पर दिख रहे प्रोजेक्ट में dsh की अपनी नई चैट खोलता है (**सभी प्रोजेक्ट** चुने होने पर उस प्रोजेक्ट में, जिसे dsh का नया सेशन चुनता है), ताकि आप किसी भी चैट की तरह फ़ाइलें जोड़ सकें, कमांड इस्तेमाल कर सकें और मॉडल चुन सकें। आपका पहला संदेश जाते ही बोर्ड अपने-आप लौट आता है। तब तक चैट **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में इंतज़ार करती है: पहला संदेश लिखने के लिए उस पर क्लिक करें। जिस प्रोजेक्ट में कोई चैट आपका इंतज़ार कर रही है, प्रोजेक्ट सूची में उसके आगे नारंगी बिंदु दिखता है (जब कोई भी चैट इंतज़ार कर रही हो, तब ऊपर प्रोजेक्ट के नाम के पास भी यह दिखता है)। dsh चैट को नाम देता है और चैट का मॉडल उसी संदेश से ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। बोर्ड पर ही जवाब देने के लिए नारंगी कार्ड (या उसके **जवाब दें**) पर क्लिक करें; पूरी चैट के लिए पैनल में **चैट खोलें** है: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। किसी खत्म हुए कार्ड को बोर्ड से हटाने के लिए उसके **×** पर क्लिक करें, या **हाल में पूरे हुए** खोलकर उन कार्डों को बोर्ड से हटाने के लिए **पूरा हुआ** के ऊपर **सब हटाएं** पर क्लिक करें: यह पहले दिखाता है कि किस प्रोजेक्ट के कितने कार्ड हटेंगे, और बिना पढ़े (हरे) कार्ड बने रहते हैं। उसके बाद 8 सेकंड तक **पहले जैसा करें** कार्ड वापस लाता है; **पूरा हुआ** के नीचे **हटाए गए (N)** बोर्ड से हटे कार्डों की सूची दिखाता है, और **बोर्ड पर वापस रखें** किसी एक कार्ड को फिर से **पूरा हुआ** में दिखाता है। कोई चैट डिलीट नहीं होती: चैट dsh के साइडबार में बनी रहती हैं, बोर्ड रीस्टार्ट के बाद भी यह याद रखता है (Tether वही बोर्ड दिखाता है), और जो चैट फिर से चलती है, वह बोर्ड पर लौट आती है। **प्रगति में** के किसी कार्ड पर पॉइंटर रखें (या कीबोर्ड फ़ोकस उस पर ले जाएं), तो उसकी प्रगति दिखती है: चैट कितनी देर से चल रही है, उसकी करने वाले कामों की सूची का चरण, अभी चल रहा टूल और एजेंट की आखिरी लाइन। सेटिंग → Composer Plus → टास्क बोर्ड में **होवर पर प्रगति** से **तेज़ (AI के बिना)** (डिफ़ॉल्ट: सिर्फ़ चैट पढ़ता है) या **AI सारांश** (चैट के मॉडल को एक छोटी कॉल एक या दो वाक्य भी लिखती है) चुनें। | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="स्क्रीनशॉट: टास्क बोर्ड"></a> |
78
+ | **असिस्टेंट** | <a id="feature-assistant"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। फिर बाएं साइडबार में **असिस्टेंट** पर क्लिक करें (**टास्क बोर्ड** के ठीक नीचे): यह एक स्थायी चैट खोलता है, जिसे आप ChatGPT या Grok चैट की तरह अपने निजी असिस्टेंट के रूप में इस्तेमाल करते हैं। पहली क्लिक `~/Assistant` फ़ोल्डर बनाती है, उसे “Assistant” प्रोजेक्ट के रूप में जोड़ती है और चैट को workspace-write अनुमति मोड और dsh के डिफ़ॉल्ट मॉडल के साथ शुरू करती है; उसके बाद हर क्लिक वही चैट खोलती है (आर्काइव की गई चैट वापस आती है, डिलीट की गई चैट फिर से बनती है)। इससे रिमाइंडर के लिए कहें (“2 मिनट में मुझे पानी पीना याद दिलाओ”): यह dsh के शेड्यूल किए गए टास्क इस्तेमाल करता है, इसलिए रिमाइंडर उस समय चैट को चलाता है, और मोबाइल कनेक्ट चालू होने पर Tether अपनी “Turn finished” सूचना भेजता है। इससे वेब पर खोजने के लिए कहें, या अपनी दूसरी चैट के बारे में पूछें: यह सभी प्रोजेक्ट की चैट की सूची दिखा सकता है (चल रही, आपका इंतज़ार कर रही या निष्क्रिय) और किसी एक चैट के सबसे नए संदेश पढ़ सकता है। यह किसी चैट को संदेश भी भेज सकता है, किसी प्रोजेक्ट में नई चैट शुरू कर सकता है, चल रही चैट रोक सकता है या किसी चैट को आर्काइव कर सकता है: इन चार कामों में से हर एक पहले dsh का मंज़ूरी कार्ड दिखाता है (Tether में भी), और जब तक आप **एक बार अनुमति दें** पर क्लिक नहीं करते, कुछ नहीं होता। इसमें डिलीट करने का कोई टूल नहीं है। ये टूल और इसके छोटे निर्देश सिर्फ़ इसी चैट में हैं; किसी वेब पेज या दूसरी चैट में पढ़ा गया टेक्स्ट डेटा माना जाता है, आदेश नहीं। हर बार बताने के बजाय अपनी प्रोफ़ाइल इस प्रोजेक्ट की मेमोरी में रखें (**प्रोजेक्ट मेमोरी**, विषय “profil”)। | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट"></a> |
75
79
  | **प्रोजेक्ट मेमोरी** | <a id="feature-projectmemory"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। हर प्रोजेक्ट फ़ोल्डर की अपनी मेमोरी होती है, जिसे उस प्रोजेक्ट की आगे की चैट पढ़ती हैं, जैसे DS Bot हर Bot के लिए एक मेमोरी रखता है। हर पूरे हुए टर्न के बाद चैट के मॉडल को एक कॉल नए संदेश पढ़ती है (रोलबैक किए गए नहीं), आपकी लंबे समय तक रहने वाली पसंद, फ़ैसले और तथ्य छोटे नोट के रूप में रखती है, और पुराने नोट बदलती या हटाती है। एजेंट खुद भी नोट सेव कर, हटा और खोज सकता है (`memory_remember`, `memory_forget`, `memory_recall`)। कोई नोट ग्लोबल भी हो सकता है: उसे हर प्रोजेक्ट पढ़ता है। नई चैट को नोट उसके सिस्टम प्रॉम्प्ट में मिलते हैं; बाद में सेव हुआ नोट अगली चैट से दिखता है। फ़ाइलें dsh के होम फ़ोल्डर में Markdown हैं (`storages/dsh-composer-plus/memory/`), कभी प्रोजेक्ट फ़ोल्डर में नहीं। उसी पंक्ति में **मेमोरी खोलें** हर सेव किया गया नोट प्रोजेक्ट के हिसाब से (और ग्लोबल मेमोरी) दिखाता है, फ़िल्टर के साथ। अपने शब्दों में लिखें कि क्या बदलना है (जैसे "मैंने yarn छोड़कर pnpm अपनाया"), फिर **बदलावों का प्रीव्यू**: dsh का डिफ़ॉल्ट मॉडल बदलाव सुझाता है, और सिर्फ़ **लागू करें** उन्हें सेव करता है। Tether में: चैट शीर्षक मेनू → Project memory। | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट मेमोरी"></a> |
76
80
  | **मेमोरी वर्शन इतिहास** | <a id="feature-memoryhistory"></a>**प्रोजेक्ट मेमोरी** चालू रहने पर डिफ़ॉल्ट रूप से चालू। मेमोरी की हर सेव से पहले (एजेंट, टर्न के बाद की समीक्षा, **मेमोरी खोलें**) नोट्स की पहले जैसी एक कॉपी रखी जाती है। **मेमोरी खोलें** में कोई प्रोजेक्ट या **ग्लोबल मेमोरी** चुनें, फिर **इतिहास**: तारीख के अनुसार वर्शन और हर वर्शन के बाद मेमोरी किसने बदली। कोई वर्शन चुनें तो रीस्टोर से क्या बदलेगा उसका diff दिखता है, फिर **रीस्टोर करें**। रीस्टोर से पहले के नोट्स भी रखे जाते हैं, इसलिए आप उसे पूर्ववत कर सकते हैं। हर मेमोरी के नवीनतम 50 वर्शन रहते हैं। Tether में: चैट शीर्षक मेनू → Project memory → History। | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="स्क्रीनशॉट: मेमोरी वर्शन इतिहास"></a> |
77
81
  | **मेमोरी को AGENTS.md में एक्सपोर्ट करें** | <a id="feature-memoryexport"></a>**मेमोरी खोलें** में कोई प्रोजेक्ट चुनें, फिर **AGENTS.md में एक्सपोर्ट करें**: उस प्रोजेक्ट के नोट्स उसके फ़ोल्डर की `AGENTS.md` के एक चिह्नित भाग में लिखे जाते हैं, ताकि आप उन्हें commit करके अपनी टीम और दूसरे एजेंट टूल के साथ साझा कर सकें। पहले बदलाव diff के रूप में दिखता है; केवल **AGENTS.md लिखें** से सेव होता है। अगला एक्सपोर्ट केवल यह भाग बदलता है। ग्लोबल मेमोरी, स्रोत और तारीखें नहीं लिखी जातीं। Tether में: चैट शीर्षक मेनू → Project memory → Export to AGENTS.md। | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="स्क्रीनशॉट: मेमोरी को AGENTS.md में एक्सपोर्ट करें"></a> |
@@ -84,6 +88,7 @@ dsh plugin --profile web add dsh-composer-plus
84
88
  | **नोट के साथ अस्वीकार करें** | <a id="feature-rejectnote"></a>अनुमोदन कार्ड पर **अस्वीकार करें** के पास **नोट के साथ अस्वीकार करें…** दिखता है। उस पर क्लिक करें, कारण या उसकी जगह क्या करना है, लिखें और **अस्वीकार करें** पर क्लिक करें (या `Enter` दबाएं; `Shift+Enter` नई पंक्ति जोड़ता है, `Esc` फ़ील्ड बंद करता है)। नोट पहले प्रतीक्षा कर रहे टर्न में एक संदेश के रूप में एजेंट को जाता है, फिर अनुरोध अस्वीकार होता है: मॉडल उसी टर्न में अस्वीकृति और आपका नोट पढ़ता है, आपको अलग संदेश भेजने की ज़रूरत नहीं। अगर नोट नहीं भेजा जा सका, तो कुछ भी अस्वीकार नहीं होता और फ़ील्ड खुली रहती है। Tether में: अनुमोदन शीट → Reject with note। | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="स्क्रीनशॉट: नोट के साथ अस्वीकार करें"></a> |
85
89
  | **सीक्रेट इनपुट** | <a id="feature-secretinput"></a>एजेंट को `request_secret` टूल मिलता है। जब उसे पासवर्ड, टोकन या API कुंजी चाहिए, तो वह चैट में पूछने के बजाय इसी टूल से मांगता है: टूल की पंक्ति पर एक कार्ड दिखता है, जिसमें नाम, मान की ज़रूरत का कारण, एक पासवर्ड फ़ील्ड, **सेव करें** और **अस्वीकार करें** होते हैं। **सेव करें** मान को इस Mac पर ऐसी फ़ाइल में लिखता है जिसे केवल आप पढ़ सकते हैं, और एजेंट को केवल फ़ाइल का पाथ मिलता है, जिसे वह किसी कमांड के इनपुट के रूप में उपयोग करता है (जैसे `"$(cat <path>)"`)। अगर बाद का कोई टूल परिणाम मान दिखाता है, तो मॉडल के देखने से पहले उसकी जगह `[secret]` आ जाता है। टर्न खत्म होने पर फ़ाइल हटा दी जाती है। **अस्वीकार करें** एजेंट को बताता है कि आपने मान नहीं दिया। टूल हटाने के लिए **सेटिंग → Composer Plus** में इसे बंद करें। Tether में: इनपुट फ़ील्ड के ऊपर "Secret: …" पट्टी → Enter। | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="स्क्रीनशॉट: सीक्रेट इनपुट"></a> |
86
90
  | **जवाब में उद्धरण** | <a id="feature-quotereply"></a>किसी जवाब का एक हिस्सा चुनें: चुने हुए हिस्से के ऊपर **उद्धरण दें** बटन दिखता है। उस पर क्लिक करें: वह हिस्सा Markdown उद्धरण (`> …`) के रूप में इनपुट फ़ील्ड में कर्सर की जगह जाता है, उसके बाद एक खाली पंक्ति आती है, और इनपुट फ़ील्ड पर फ़ोकस आ जाता है, ताकि आप उसके नीचे अपना जवाब लिखें। केवल जवाब का टेक्स्ट गिना जाता है; सोच, टूल पंक्तियां और आपके अपने संदेश नहीं। एक उद्धरण में अधिकतम 2,000 अक्षर होते हैं। `Cmd+Z` (`Ctrl+Z`) उसे हटा देता है। Tether में: किसी जवाब को दबाकर रखें → Quote (पूरा जवाब)। | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="स्क्रीनशॉट: जवाब में उद्धरण"></a> |
91
+ | **फ़ाइल प्रीव्यू से उद्धरण** | <a id="feature-previewquote"></a>दाएं साइडबार में कोई फ़ाइल खोलें (**वर्कस्पेस फ़ाइलें**, या चैट की खोली हुई फ़ाइल) और उसमें पंक्तियां चुनें: चुने हुए हिस्से के ऊपर **उद्धरण दें** बटन दिखता है। उस पर क्लिक करें: फ़ाइल पाथ, पंक्ति संख्याएं और पंक्तियां इनपुट फ़ील्ड में कर्सर की जगह जाती हैं, और इनपुट फ़ील्ड पर फ़ोकस आ जाता है, ताकि एजेंट जाने कि आपका मतलब किस हिस्से से है। कोड और टेक्स्ट फ़ाइलें `src/login.js:2-3` और कोड ब्लॉक के रूप में पंक्तियां देती हैं; Markdown और PDF फ़ाइलें पाथ (PDF अपना पेज भी, `docs/spec.pdf#page=3`) और एक `> …` उद्धरण देती हैं। चैट के फ़ोल्डर के अंदर का पाथ रिलेटिव होता है। अधिकतम 2,000 अक्षर। `Cmd+Z` (`Ctrl+Z`) उसे हटा देता है। Tether में नहीं है। | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="स्क्रीनशॉट: फ़ाइल प्रीव्यू से उद्धरण"></a> |
87
92
  | **साइड चैट** | <a id="feature-sidechat"></a>इनपुट फ़ील्ड में एक साइड सवाल लिखें और बातचीत-बुलबुलों वाले बटन (**साइड चैट में पूछें**) पर क्लिक करें: चैट की एक कॉपी खुलती है और dsh के सिर्फ़-पढ़ने वाले मोड में जवाब देती है, जबकि चैट काम करती रहती है। कॉपी अब तक की चैट जानती है, सिवाय उन संदेशों के जो अभी कतार में इंतज़ार कर रहे हैं, और उसी का मॉडल इस्तेमाल करती है। उसके इनपुट फ़ील्ड के ऊपर की पट्टी में **वापस लाएं** है: चैट खुलती है और उसके इनपुट फ़ील्ड में आपके सवाल (`> ` उद्धरण के रूप में) और जवाब आ जाते हैं। **चैट पर लौटें** सिर्फ़ चैट खोलता है। साइड चैट साइडबार में "↳ <सवाल>" नाम से रहती है; उसे वहीं आर्काइव करें। Tether में: चैट शीर्षक मेन्यू → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="स्क्रीनशॉट: साइड चैट"></a> |
88
93
  | **डिफ़ नोट** | <a id="feature-diffcomments"></a>**बदलाव पैनल** में किसी फ़ाइल का डिफ़ खोलें और किसी पंक्ति पर **+** पर क्लिक करें (रेंज के लिए उसी ब्लॉक की दूसरी पंक्ति पर Shift+क्लिक करें), एक नोट लिखें और **नोट सेव करें** पर क्लिक करें। चैट के नोट पैनल के ऊपर एक पट्टी में इंतज़ार करते हैं; **इनपुट फ़ील्ड में भेजें** उन्हें कर्सर की जगह Markdown के रूप में डालता है: `path:12-14`, `diff` ब्लॉक के रूप में पंक्तियां और आपका नोट। **साफ़ करें** उन्हें हटा देता है। नोट तब तक इस ब्राउज़र में रहते हैं जब तक आप उन्हें भेज या साफ़ न कर दें। **बदलाव पैनल** ज़रूरी है। Tether में: फ़ाइल का डिफ़ → किसी पंक्ति को दबाकर रखें → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="स्क्रीनशॉट: डिफ़ नोट"></a> |
89
94
  | **प्रोजेक्ट की स्थिति** | <a id="feature-projectstatus"></a>साइडबार में प्रोजेक्ट की पंक्ति वही स्पिनर / इंतज़ार / पूरा होने का संकेत दिखाती है, जो उसकी चैट दिखाती हैं। इसलिए बंद (collapsed) प्रोजेक्ट भी बताता है कि अंदर कोई चैट काम कर रही है या उसे आपकी ज़रूरत है। सबसे पहले आपका इंतज़ार कर रही चैट दिखती है, फिर पूरी हुई ऐसी चैट जिसे आपने अभी तक नहीं खोला (हरा बिंदु, तब भी जब कोई दूसरी चैट अभी चल रही हो), फिर स्पिनर। विवरण देखने के लिए उस पर पॉइंटर ले जाएं। **वर्कस्पेस ट्री** में पैरेंट फ़ोल्डर की पंक्ति उसके अंदर के हर प्रोजेक्ट (जैसे `.worktrees/` में हर ब्रांच फ़ोल्डर) की चैट भी दिखाती है, तब भी जब फ़ोल्डर बंद (collapsed) हो। | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट की स्थिति"></a> |
@@ -95,12 +100,14 @@ dsh plugin --profile web add dsh-composer-plus
95
100
  | **स्थिति के अनुसार क्रम** | <a id="feature-statusorder"></a>साइडबार → व्यू के विकल्प → **इसके अनुसार क्रम दें** → **स्थिति के अनुसार** (**एक ही सूची में** के साथ)। सबसे पहले पूरी हुई चैट आती हैं (dsh का “पूरा हुआ” बिंदु, जो गड़बड़ी के साथ खत्म हुए टर्न को भी मिलता है)। फिर चल रही या इंतज़ार कर रही चैट, फिर सक्रिय ऑटोमेशन (शेड्यूल) वाली चैट, और आखिर में बाकी चैट dsh के क्रम में आती हैं। पूरी हुई चैट खोलने पर वह नीचे चली जाती है। सिर्फ़ व्यू बदलता है: वापस जाने के लिए **मैन्युअल** या **पिछला अपडेट** चुनें। | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="स्क्रीनशॉट: स्थिति के अनुसार क्रम"></a> |
96
101
  | **बैकग्राउंड सूचनाएं** | <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> |
97
102
  | **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** | <a id="feature-idleswitch"></a>जब कोई चैट सवाल पूछती है, मंज़ूरी या प्लान रिव्यू का इंतज़ार करती है (नारंगी बिंदु), या ऐसा टर्न पूरा करती है जिसे आपने अभी तक नहीं पढ़ा (हरा बिंदु), और आप 30 सेकंड तक dsh का उपयोग नहीं करते, तो dsh वह चैट खोल देता है। नारंगी चैट हरी चैट से पहले खुलती हैं। हर समूह में सबसे लंबे समय से इंतज़ार कर रही चैट पहले खुलती है; अगली चैट फिर से 30 सेकंड तक उपयोग न होने पर खुलती है। कोई कुंजी, क्लिक, माउस हिलाना, स्क्रॉल व्हील या टच 30 सेकंड को फिर से शुरू कर देता है। फ़ोकस वाले फ़ील्ड में टेक्स्ट, चुना हुआ टेक्स्ट, या खुला मेनू या डायलॉग भी स्विच को रोकता है। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कुछ नहीं बदलता। अगर आप जवाब दिए बिना इंतज़ार कर रही चैट से हट जाते हैं, तो अगले 30 सेकंड तक उपयोग न होने पर वह फिर से खुल सकती है। हरी चैट खुलने पर उसका बिंदु हट जाता है; अगली हरी चैट तभी खुलती है जब आप dsh का फिर से उपयोग करें और उसके बाद 30 सेकंड तक उपयोग न करें। यह dsh के बैकग्राउंड में होने पर भी काम करता है, लेकिन dsh सामने नहीं आता। | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="स्क्रीनशॉट: निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें"></a> |
98
- | **अगली इंतज़ार कर रही चैट** | <a id="feature-nextwaiting"></a>साइडबार के हेडर में एक बटन दिखाता है कि कितनी दूसरी चैट आपका इंतज़ार कर रही हैं, और अगली चैट के रंग का एक बिंदु: सवाल पूछे या मंज़ूरी या प्लान रिव्यू का इंतज़ार करे तो नारंगी, ऐसा टर्न पूरा करे जिसे आपने अभी तक नहीं पढ़ा तो हरा। वह चैट खोलने के लिए बटन पर क्लिक करें, या Cmd+Shift+E (Windows और Linux पर Ctrl+Shift+E) दबाएं। नारंगी चैट हरी चैट से पहले आती हैं; हर समूह में सबसे लंबे समय से इंतज़ार कर रही चैट पहले आती है। स्क्रीन पर खुली चैट नहीं गिनी जाती। जब कोई और चैट इंतज़ार नहीं कर रही, तो बटन नहीं दिखता और कुंजी कुछ नहीं करती। कुंजी को dsh के कीबोर्ड शॉर्टकट पेज (अगली इंतज़ार कर रही चैट) में बदला जा सकता है। | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="स्क्रीनशॉट: अगली इंतज़ार कर रही चैट"></a> |
103
+ | **अगली इंतज़ार कर रही चैट** | <a id="feature-nextwaiting"></a>साइडबार के हेडर में एक बटन दिखाता है कि कितनी दूसरी चैट आपका इंतज़ार कर रही हैं, और अगली चैट के रंग का एक बिंदु: सवाल पूछे या मंज़ूरी या प्लान रिव्यू का इंतज़ार करे तो नारंगी, ऐसा टर्न पूरा करे जिसे आपने अभी तक नहीं पढ़ा तो हरा। वह चैट खोलने के लिए बटन पर क्लिक करें, या Cmd+Shift+E (Windows और Linux पर Ctrl+Shift+E) दबाएं। बटन पर क्लिक करने से वह चैट साइडबार में भी मिल जाती है: बंद प्रोजेक्ट खुल जाता है, सूची चैट तक स्क्रॉल होती है और चैट 5 सेकंड तक टिमटिमाती है। नारंगी चैट हरी चैट से पहले आती हैं; हर समूह में सबसे लंबे समय से इंतज़ार कर रही चैट पहले आती है। स्क्रीन पर खुली चैट नहीं गिनी जाती। जब कोई और चैट इंतज़ार नहीं कर रही, तो बटन नहीं दिखता और कुंजी कुछ नहीं करती। कुंजी को dsh के कीबोर्ड शॉर्टकट पेज (अगली इंतज़ार कर रही चैट) में बदला जा सकता है। | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="स्क्रीनशॉट: अगली इंतज़ार कर रही चैट"></a> |
99
104
  | **विकल्प बटन** | <a id="feature-optionpicks"></a>जब कोई जवाब विकल्पों की सूची पर खत्म होता है ("विकल्प" शीर्षक या बोल्ड "विकल्प" पंक्ति के नीचे 1 से 9 आइटम की क्रमांकित सूची; "अगले कदम" और ऐप की भाषाओं में यही शब्द भी), तो जवाब के नीचे हर विकल्प के लिए एक बटन दिखता है। क्लिक करने पर पूरे विकल्प के साथ "Option N: …" आपके संदेश के रूप में भेजा जाता है, जैसे आपने उसे टाइप किया हो। "(अनुशंसित)" वाला विकल्प चिह्नित होता है। बटन केवल सबसे नए जवाब के नीचे दिखते हैं, जब चैट खाली हो और संदेश बॉक्स खाली हो; पहले से चुने गए जवाब और रोलबैक से वापस लिए गए जवाब में बटन नहीं होते। बटन दिखते समय अगले संदेश का अनुमान कोई सुझाव नहीं देता। एजेंट के प्रश्न कार्ड पर 1–9 कुंजियां क्लिक की तरह वह विकल्प चुनती हैं (जवाब वाले फ़ील्ड में नहीं, और प्रश्न दिखने के बाद पहले 0.8 सेकंड में नहीं)। | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="स्क्रीनशॉट: विकल्प बटन"></a> |
100
105
  | **ऐप्लिकेशन की भाषा** | <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> |
101
106
  | **मोबाइल कनेक्ट (iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) ऐप से अपने iPhone पर dsh का उपयोग करें, उसी Wi-Fi पर या [Tailscale](https://tailscale.com) के ज़रिए। इसे **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह इस Mac पर एक नेटवर्क पोर्ट खोलता है)। फिर साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें: iPhone के कैमरा से (**Open in Tether** पर टैप करें) या Tether में **Scan code** से QR कोड स्कैन करें, **Connect** पर टैप करें और **Approve** पर क्लिक करें। पहले Tether इंस्टॉल करें: इसके बिना कैमरा यह कोड नहीं खोल सकता। फ़ोन आपकी चैट दिखाता है, संदेश भेजता है (फ़ोटो के साथ भी: कंपोज़र का **+** → Camera, Photos या Paste image), मंज़ूरियों और सवालों के जवाब देता है, और मॉडल व एजेंट बदलता है। आप जितने चाहें उतने Mac पेयर कर सकते हैं: ऐप में ऊपर बाईं ओर Mac का नाम उनके बीच बदलता है। **मोबाइल कनेक्ट** पैनल पेयर किए गए iPhone उनके पिछले कनेक्शन के समय के साथ दिखाता है: **Remove** किसी एक को तुरंत हटा देता है। “Tailscale only” लोकल नेटवर्क से कनेक्शन मना कर देता है (साझा Wi-Fi के लिए), और एक्सेस लॉग दिखाता है कि किसने कनेक्ट करने की कोशिश की। Tether में “Settings → Privacy” ऐप को Face ID से लॉक करता है। | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="स्क्रीनशॉट: मोबाइल कनेक्ट (iPhone)"></a> |
102
- | **रिमोट कंप्यूटर** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) के ज़रिए अपने दूसरे Mac का dsh खोलें और उनकी चैट यहीं जारी रखें। इसे हर Mac पर **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह नेटवर्क पोर्ट खोलता है)। जिस Mac को आप खोलना चाहते हैं, उस पर **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें। इस Mac पर चैट के शीर्षक के बाईं ओर कंप्यूटर पिकर में **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद पिकर में **यह Mac** और आपके कंप्यूटर दिखते हैं: किसी एक को चुनें, तो उसका dsh दाएं साइडबार के ब्राउज़र टैब में (या ब्राउज़र विंडो में) खुलता है, उसकी अपनी चैट, टूल और फ़ाइलों के साथ। सेटिंग पैनल में आप कंप्यूटर का नाम बदल सकते हैं और उन्हें हटा सकते हैं। यह पैनल उन कंप्यूटर की सूची भी दिखाता है जो यह Mac खोल सकते हैं (**हटाएं** किसी एक को तुरंत डिस्कनेक्ट कर देता है)। | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="स्क्रीनशॉट: रिमोट कंप्यूटर"></a> |
103
- | **अपने-आप अपडेट** | <a id="feature-autoupdate"></a>dsh शुरू होने पर प्लगइन [GitHub की नवीनतम रिलीज़](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) जांचता है। अगर वह नई है और npm पर पहले से है, तो प्लगइन वही वर्शन dsh के अपने प्लगइन मैनेजर से इंस्टॉल करता है (सेटिंग → प्लगइन वाला ही रास्ता) और आपको सूचित करता है। इसे लोड करने के लिए dsh रीस्टार्ट करें। **सेटिंग → Composer Plus → Composer Plus अपडेट** वर्शन दिखाता है और उसमें **अपडेट जांचें** / **अभी अपडेट करें** बटन हैं। नए वर्शन के साथ dsh पहली बार शुरू होने पर **Composer Plus N में नया क्या है** विंडो उस वर्शन के रिलीज़ नोट्स **ऐप्लिकेशन की भाषा** में चुनी गई भाषा में एक बार दिखाती है (नोट्स नए वर्शन के साथ आते हैं, कोई अतिरिक्त नेटवर्क कॉल नहीं; जिस भाषा के नोट्स नहीं हैं, उसमें अंग्रेज़ी नोट्स दिखते हैं); **बंद करें** या `Esc` से यह बंद होती है। सेटिंग → प्लगइन या कॉपी किए गए फ़ोल्डर से अपडेट करने के बाद भी यह विंडो हर नए वर्शन पर एक बार दिखती है; पहली बार इंस्टॉल करने पर नहीं। अपडेट वाली पंक्ति में **इस वर्शन में नया क्या है** इसे फिर से खोलता है। जब डिस्क पर चल रहे वर्शन से नया वर्शन हो, तो पंक्ति dsh को रीस्टार्ट करने को कहती है। | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="स्क्रीनशॉट: अपने-आप अपडेट"></a> |
107
+ | **रिमोट कंप्यूटर** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) के ज़रिए अपने दूसरे Mac का dsh खोलें और उन्हें इसी dsh विंडो में इस्तेमाल करें। इसे हर Mac पर **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह नेटवर्क पोर्ट खोलता है)। जिस Mac को आप खोलना चाहते हैं, उस पर **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें। इस Mac पर बाएं साइडबार के कंप्यूटर पिकर में (ब्रांड नाम के दाईं ओर, **नया सेशन** के ऊपर) **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें, एक **नाम** लिखें (यह Mac या किसी दूसरे कंप्यूटर का नाम नहीं) और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद पिकर में **यह Mac** और आपके कंप्यूटर दिखते हैं: किसी एक को चुनें, तो उसका dsh इस पूरी विंडो में दिखता है, उसकी अपनी चैट, साइडबार, टूल और फ़ाइलों के साथ, जबकि यह Mac पीछे चलता रहता है। पिकर उसी जगह रहता है और उस पर **इस Mac पर वापस जाएं** लिखा होता है: वापस आने के लिए उस पर क्लिक करें। एक से ज़्यादा कंप्यूटर होने पर क्लिक से मेनू खुलता है, जहां आप **यह Mac** या कोई दूसरा कंप्यूटर चुनते हैं। सेटिंग पैनल में आप कंप्यूटर का नाम बदल सकते हैं और उन्हें हटा सकते हैं। यह पैनल उन कंप्यूटर की सूची भी दिखाता है जो यह Mac खोल सकते हैं (**हटाएं** किसी एक को तुरंत डिस्कनेक्ट कर देता है)। | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="स्क्रीनशॉट: रिमोट कंप्यूटर"></a> |
108
+ | **अपने-आप अपडेट** | <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` से यह बंद होती है। नोट्स के नीचे एक पंक्ति GitHub पर स्टार देने को कहती है, 30 दिनों में ज़्यादा से ज़्यादा एक बार (कोई नेटवर्क कॉल नहीं); **GitHub पर स्टार दें** या **फिर से न पूछें** पर क्लिक करने के बाद यह फिर नहीं दिखती। सेटिंग → प्लगइन या कॉपी किए गए फ़ोल्डर से अपडेट करने के बाद भी यह विंडो हर नए वर्शन पर एक बार दिखती है; पहली बार इंस्टॉल करने पर नहीं। अपडेट वाली पंक्ति में **इस वर्शन में नया क्या है** इसे फिर से खोलता है। जब डिस्क पर चल रहे वर्शन से नया वर्शन हो, तो पंक्ति dsh को रीस्टार्ट करने को कहती है। | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="स्क्रीनशॉट: अपने-आप अपडेट"></a> |
109
+ | **चालू/बंद फ़िल्टर** | <a id="feature-featurefilter"></a>**सेटिंग → Composer Plus** में **सुविधाएं खोजें** के पास: **सभी** सभी सुविधाएं दिखाता है, **चालू** केवल वे सुविधाएं जिनका स्विच चालू है, और **बंद** केवल वे जिनका स्विच बंद है। फ़ैसला हर पंक्ति का अपना स्विच करता है, dsh के Host में रखे स्विच भी (जैसे **मोबाइल कनेक्ट**)। यह खोज के साथ काम करता है: कोई शब्द लिखें और **बंद** चुनें, तो वह सुविधा मिलती है जिसे आपने बंद किया था। **चालू** या **बंद** चुने रहने पर जिस पंक्ति का स्विच आप बदलते हैं, वह तब तक दिखती है जब तक आप फिर से कोई फ़िल्टर नहीं चुनते, ताकि फ़ोकस उसके स्विच पर रहे। **चालू** और **बंद** में **ऐप्लिकेशन की भाषा** और **Composer Plus अपडेट** पंक्तियाँ छिप जाती हैं (उनका कोई स्विच नहीं है)। सेटिंग हर बार **सभी** के साथ खुलती है। | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="स्क्रीनशॉट: चालू/बंद फ़िल्टर"></a> |
110
+ | **इश्यू रिपोर्ट करें** | <a id="feature-issuereport"></a>सेटिंग → Composer Plus → **इश्यू रिपोर्ट करें…** (परिचय के नीचे), या साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **Composer Plus इश्यू रिपोर्ट करें…**। एक प्रकार चुनें: **बग**, **सुविधा का अनुरोध**, **सुधार**, **अनुवाद** या **सवाल**। उसे अपने शब्दों और अपनी भाषा में बताएं, फिर **ड्राफ़्ट लिखें** पर क्लिक करें (या `Cmd/Ctrl+Enter`)। dsh के डिफ़ॉल्ट मॉडल को एक कॉल अंग्रेज़ी में इश्यू लिखती है: प्रकार के प्रीफ़िक्स वाला शीर्षक (जैसे `[Bug]`) और उस प्रकार के सेक्शन (बग के लिए: What happened, Steps to reproduce, Expected, Actual), साथ में Composer Plus, dsh और सिस्टम के वर्शन वाली एक पंक्ति। शीर्षक और विवरण पढ़ें और संपादित करें; **फिर से लिखें** नया ड्राफ़्ट लिखता है। **इश्यू खोलें** उसे आपके GitHub CLI (`gh`) लॉगिन से Composer Plus की GitHub रिपॉज़िटरी में खोलता है और उसका लिंक दिखाता है। इश्यू सार्वजनिक होता है: जो टेक्स्ट कुंजी या पासवर्ड जैसा दिखता है, वह अस्वीकार होता है। जब `gh` उसे नहीं खोल पाता, तो **इसके बजाय GitHub पर खोलें** GitHub का अपना पेज ड्राफ़्ट भरे हुए खोलता है। | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="स्क्रीनशॉट: इश्यू रिपोर्ट करें"></a> |
104
111
  | **बैकअप** | <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> |
105
112
  | **अपने-आप बैकअप** | <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> |
106
113
  | **सेशन लॉग जांच** | <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> |
@@ -112,7 +119,7 @@ dsh plugin --profile web add dsh-composer-plus
112
119
 
113
120
  ## सेटिंग
114
121
 
115
- हर सुविधा को अलग से चालू या बंद किया जा सकता है: dsh **सेटिंग → Composer Plus**। हर पंक्ति में एक छोटा स्क्रीनशॉट है: बड़ा पूर्वावलोकन देखने के लिए उस पर पॉइंटर ले जाएं, पूरे आकार में खोलने के लिए उस पर क्लिक करें (`Esc` बंद करता है)। ऊपर का **सुविधाएं खोजें** बॉक्स पेज को नाम या विवरण से फ़िल्टर करता है (कोई भी भाषा; बड़े-छोटे अक्षरों और एक्सेंट से फ़र्क नहीं पड़ता); `Esc` उसे खाली करता है। हर पंक्ति में एक स्विच और छोटा विवरण है। पंक्ति के नाम के बाद का छोटा **?** README का वह हिस्सा खोलता है जो उस सुविधा के बारे में बताता है, dsh की इंटरफ़ेस भाषा वाली README में। बदलाव बिना रीस्टार्ट के तुरंत लागू होते हैं और उस डिवाइस पर याद रहते हैं। **मोबाइल कनेक्ट**, **रीस्टार्ट के बाद जारी रखें** और **टाइप करते समय पूरा करें** को छोड़कर सब कुछ डिफ़ॉल्ट रूप से चालू है। इन तीनों के और **कंटेंट में खोज**, **टर्न रोलबैक**, **अगले संदेश का अनुमान** व **लक्ष्य जांच** के स्विच dsh का Host रखता है, इसलिए वे हर विंडो पर लागू होते हैं और रीस्टार्ट के बाद भी बने रहते हैं। **अगले संदेश का अनुमान** के लिए चुना गया **मॉडल**, **टाइप करते समय पूरा करें** के लिए चुना गया मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश के अनुमान जैसा**), **प्रॉम्प्ट बेहतर करें** के लिए चुना गया मॉडल, **लक्ष्य जांच** के लिए चुना गया मॉडल (दोनों डिफ़ॉल्ट रूप से **चैट के मॉडल जैसा**) और **इस चैट के लिए अनुमति दें** की **समय सीमा** (डिफ़ॉल्ट रूप से 1 घंटा) भी Host रखता है। **कंटेंट में खोज** सिर्फ़ dsh रीस्टार्ट करने के बाद बदलती है (dsh इसे शुरू होते समय पढ़ता है); तब तक उसकी पंक्ति में लिखा रहता है **यह बदलाव लागू करने के लिए dsh रीस्टार्ट करें।**
122
+ हर सुविधा को अलग से चालू या बंद किया जा सकता है: dsh **सेटिंग → Composer Plus**। हर पंक्ति में एक छोटा स्क्रीनशॉट है: बड़ा पूर्वावलोकन देखने के लिए उस पर पॉइंटर ले जाएं, पूरे आकार में खोलने के लिए उस पर क्लिक करें (`Esc` बंद करता है)। ऊपर का **सुविधाएं खोजें** बॉक्स पेज को नाम या विवरण से फ़िल्टर करता है (कोई भी भाषा; बड़े-छोटे अक्षरों और एक्सेंट से फ़र्क नहीं पड़ता); `Esc` उसे खाली करता है। उसके पास **सभी**, **चालू** और **बंद** से सभी सुविधाएं, केवल चालू सुविधाएं या केवल बंद सुविधाएं दिखती हैं (इन्हें छिपाने के लिए **चालू/बंद फ़िल्टर** बंद करें)। हर पंक्ति में एक स्विच और छोटा विवरण है। पंक्ति के नाम के बाद का छोटा **?** README का वह हिस्सा खोलता है जो उस सुविधा के बारे में बताता है, dsh की इंटरफ़ेस भाषा वाली README में। बदलाव बिना रीस्टार्ट के तुरंत लागू होते हैं और उस डिवाइस पर याद रहते हैं। **मोबाइल कनेक्ट**, **रीस्टार्ट के बाद जारी रखें** और **टाइप करते समय पूरा करें** को छोड़कर सब कुछ डिफ़ॉल्ट रूप से चालू है। इन तीनों के और **कंटेंट में खोज**, **टर्न रोलबैक**, **अगले संदेश का अनुमान** व **लक्ष्य जांच** के स्विच dsh का Host रखता है, इसलिए वे हर विंडो पर लागू होते हैं और रीस्टार्ट के बाद भी बने रहते हैं। **अगले संदेश का अनुमान** के लिए चुना गया **मॉडल**, **टाइप करते समय पूरा करें** के लिए चुना गया मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश के अनुमान जैसा**), **प्रॉम्प्ट बेहतर करें** के लिए चुना गया मॉडल, **लक्ष्य जांच** के लिए चुना गया मॉडल (दोनों डिफ़ॉल्ट रूप से **चैट के मॉडल जैसा**) और **इस चैट के लिए अनुमति दें** की **समय सीमा** (डिफ़ॉल्ट रूप से 1 घंटा) भी Host रखता है। **कंटेंट में खोज** सिर्फ़ dsh रीस्टार्ट करने के बाद बदलती है (dsh इसे शुरू होते समय पढ़ता है); तब तक उसकी पंक्ति में लिखा रहता है **यह बदलाव लागू करने के लिए dsh रीस्टार्ट करें।**
116
123
 
117
124
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="सेटिंग → Composer Plus: सुविधाओं की खोज, भाषा चुनने का विकल्प, अपडेट की पंक्ति और हर सुविधा के लिए एक स्विच, होवर करने पर स्क्रीनशॉट का पूर्वावलोकन"></p>
118
125
 
@@ -172,6 +179,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
172
179
  - **कंटेंट में खोज:** कोई नया कोड आपकी चैट नहीं खोजता: प्लगइन सिर्फ़ dsh का अपना संदेश इंडेक्स (SQLite FTS5, `dsh-session-query-sqlite`) चालू करता है और उसे एक फ़ाइल देता है: `$DSH_HOME/cache/composer-plus/session-search.db` (फ़ाइल और फ़ोल्डर सिर्फ़ मालिक के)। इस फ़ाइल में आपके यूज़र और असिस्टेंट संदेशों का टेक्स्ट होता है, इसलिए यह उतनी ही निजी है जितने `$DSH_HOME/sessions` में चैट लॉग। कुछ भी आपकी मशीन से बाहर नहीं जाता। यह एक कॉपी है, जिसे dsh फिर से बना सकता है: dsh बंद होने पर आप इसे हटा सकते हैं। स्विच `$DSH_HOME/storages/dsh-composer-plus/content-search.json` में है।
173
180
  - **टर्न रोलबैक:** आपके हर संदेश से पहले Host चैट के फ़ोल्डर का git स्नैपशॉट अपने अलग स्टोर में लेता है: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (सिर्फ़ मालिक का फ़ोल्डर)। इसमें उस फ़ोल्डर की उन फ़ाइलों की कॉपी होती है, जिन्हें git देखता है (ignore की गई फ़ाइलें नहीं), इसलिए यह उतना ही निजी है जितना प्रोजेक्ट। यह आपकी रिपॉज़िटरी के ऑब्जेक्ट पढ़ता है (जो git के पास पहले से है, उसकी कॉपी नहीं बनाता)। यह आपकी रिपॉज़िटरी का index, `HEAD`, ब्रांच, टैग, stash या config कभी नहीं लिखता। git वहां सिर्फ़ एक बदलाव करता है: दोबारा इस्तेमाल की गई ऑब्जेक्ट फ़ाइलों पर नया टाइम स्टैंप (इससे `git gc` उन्हें थोड़ी देर से साफ़ करता है)। फ़ाइलों के साथ रोलबैक सिर्फ़ चैट के फ़ोल्डर के अंदर की सामान्य फ़ाइलें लिखता है; यह symlink, पाइप और फ़ोल्डर के बाहर की हर चीज़ छोड़ देता है। कुछ भी आपकी मशीन से बाहर नहीं जाता। dsh बंद होने पर आप स्टोर हटा सकते हैं (तब नए संदेश आने तक रोलबैक सिर्फ़ चैट के लिए काम करता है)। **चैट हटाएं** चैट का स्टोर भी हटाता है। स्विच `$DSH_HOME/storages/dsh-composer-plus/rollback.json` में है। फ़ाइलों के साथ रोलबैक उससे ठीक पहले की फ़ाइलें भी **फिर से करें** के लिए रखता है (उसी स्टोर में `refs/r/…`); जिन रोलबैक को फिर से किया गया, उनकी सूची `$DSH_HOME/storages/dsh-composer-plus/redone.json` में है (सिर्फ़ मालिक की फ़ाइल)।
174
181
  - **GitHub इश्यू खोलें** (सुविधाओं के आइडिया → **बाद में** सूची): यह सिर्फ़ तब चलता है, जब आप इस पर क्लिक करते हैं। Host वाला हिस्सा चैट के फ़ोल्डर में आपका अपना GitHub CLI (`gh issue create`) चलाता है, आइडिया के सेव किए गए शीर्षक और सारांश (और वह क्यों ज़रूरी है) के साथ; `gh` अपना लॉगिन और फ़ोल्डर का GitHub रिमोट इस्तेमाल करता है, इसलिए इश्यू आपके खाते से उसी रिपॉज़िटरी में बनता है, और GitHub उसे हर उस व्यक्ति को दिखाता है, जो वह रिपॉज़िटरी देख सकता है। dsh अपने शुरू किए गए कमांड से वे वैरिएबल हटा देता है, जिनका नाम टोकन जैसा हो; अगर आपने `gh` को `GH_TOKEN` या `GITHUB_TOKEN` से टोकन दिया है, तो प्लगइन `gh` को सिर्फ़ ये वैरिएबल देता है। इश्यू का लिंक आइडिया के साथ `later.json` में रखा जाता है।
182
+ - **इश्यू रिपोर्ट करें** (सेटिंग → Composer Plus → **इश्यू रिपोर्ट करें…**, या किसी चैट का **…** मेन्यू → **Composer Plus इश्यू रिपोर्ट करें…**): जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। **ड्राफ़्ट लिखें** सिर्फ़ प्रकार और आपका टाइप किया गया टेक्स्ट (चैट नहीं, प्रोजेक्ट नहीं) एक कॉल में dsh के डिफ़ॉल्ट मॉडल को भेजता है। Host वाला हिस्सा Composer Plus, dsh और ऑपरेटिंग सिस्टम के वर्शन वाली एक पंक्ति जोड़ता है और आपके होम फ़ोल्डर के पाथ को `~` से बदल देता है। **इश्यू खोलें** आपके `gh` लॉगिन के साथ आपका अपना GitHub CLI (`gh issue create --repo furkancak1r/dsh-composer-plus`) चलाता है, इसलिए इश्यू सार्वजनिक होता है और उस पर आपका GitHub खाता दिखता है। जो टेक्स्ट कुंजी, टोकन या पासवर्ड जैसा दिखता है, वह अस्वीकार होता है और आपके Mac से बाहर नहीं जाता।
175
183
  - **इस फ़ाइल को बदलने वाली चैट** (बदलाव, किसी फ़ाइल का "…" मेन्यू): Host वाला हिस्सा उन चैट के लॉग पढ़ता है, जिनका फ़ोल्डर उसी रिपॉज़िटरी में है, जैसे dsh उन्हें रखता है, और हर चैट का शीर्षक, समय और अनुरोध की पहली पंक्ति लौटाता है; यह फ़ाइल को खुद कभी नहीं खोलता।
176
184
  - **चैट पंक्तियों पर Git ब्रांच:** Host वाला हिस्सा टर्न शुरू और ख़त्म होने पर चैट के फ़ोल्डर में `git branch --show-current` (सिर्फ़ पढ़ने के लिए) चलाता है, और सिर्फ़ चैट ID, ब्रांच का नाम और समय `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` में रखता है (सिर्फ़ मालिक की फ़ाइल, सबसे नई 2000 चैट)। स्विच उसके पास `branches.json` में है।
177
185
  - **चैट में खोजें** सिर्फ़ पेज में चलता है: यह पेज पर दिख रहा टेक्स्ट पढ़ता है और कुछ नहीं भेजता।
@@ -180,9 +188,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
180
188
  - **इस चैट के लिए अनुमति दें:** अनुमतियां, उन्हें देने के समय के साथ, `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` में रखी जाती हैं (सिर्फ़ मालिक की अनुमति)। एक अनुमति एक चैट में एक तय टूल पर, समय सीमा खत्म होने तक (डिफ़ॉल्ट रूप से 1 घंटा), लागू होती है। अगर वह टूल लिख सकता है, तो अनुमति हर तरह के लिखने पर भी लागू होती है। इसे हेडर की चिप से रद्द करें।
181
189
  - ऑटो रिव्यू फिर भी हर कॉल पर चलता है; रिव्यू विफल होने पर कभी अपने-आप अनुमति नहीं मिलती।
182
190
  - **मोबाइल कनेक्ट:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर Host वाला हिस्सा Tether गेटवे चलाता है: पोर्ट 19390 पर HTTPS, जो सिर्फ़ आपके Wi-Fi सबनेट और आपके tailnet (100.64.0.0/10) से कनेक्शन स्वीकार करता है, और `127.0.0.1:19391` पर एक पेयरिंग पेज (सिर्फ़ यह Mac)। फ़ोन को QR कोड से मिला एक बार का कोड (5 मिनट) और Mac पर आपका **Approve** चाहिए। फ़ोन गेटवे का सर्टिफ़िकेट पिन करता है। Mac हर फ़ोन के टोकन का सिर्फ़ हैश रखता है (30 दिन, उपयोग होते रहने पर नवीनीकृत)। **Remove** उस फ़ोन के कनेक्शन तुरंत बंद कर देता है। फ़ोन dsh के सिर्फ़ मंज़ूर सूची वाले मेथड कॉल कर सकते हैं (चैट, प्रॉम्प्ट, अटैचमेंट, स्लैश कमांड, मंज़ूरियां, सवाल, मॉडल, एजेंट, लक्ष्य); सेटिंग, क्रेडेंशियल, फ़ाइल ब्राउज़र या टर्मिनल नहीं। "Tailscale only" लोकल नेटवर्क से आने वाला हर कनेक्शन मना कर देता है, पहले से खुले कनेक्शन भी। एक्सेस लॉग सबसे नई 200 कनेक्शन कोशिशें (समय, IP पता, डिवाइस का नाम, अनुमति मिली या मना हुई, और क्यों) `access.json` में रखता है; इसमें कभी कोई टोकन या पेयरिंग कोड नहीं होता। डेटा: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (सिर्फ़ मालिक की फ़ाइलें)। विवरण: [tether/README.md](tether/README.md)।
183
- - **रिमोट कंप्यूटर:** जब तक आप इसे हर Mac पर चालू नहीं करते, यह बंद रहता है। **दूसरे कंप्यूटर को यह Mac खोलने दें** एक दूसरा HTTPS पोर्ट (19392) खोलता है, सिर्फ़ इस Mac के Tailscale पते पर (Wi-Fi पर नहीं, और Bonjour से इसकी घोषणा नहीं होती)। किसी दूसरे Mac को एक बार का पेयरिंग लिंक (5 मिनट), मेल खाने वाला सर्टिफ़िकेट (पिन किया हुआ) और आपका **मंज़ूर करें** चाहिए। यह Mac उसके टोकन का सिर्फ़ हैश रखता है। पेयर किए गए कंप्यूटर को इस Mac पर dsh का पूरा नियंत्रण मिलता है, जैसे आप इसे यहीं इस्तेमाल कर रहे हों: चैट, मॉडल, टूल, फ़ाइलें और टर्मिनल। सेटिंग पैनल में उसे हटाएं, तो उसके कनेक्शन तुरंत बंद हो जाते हैं। जो Mac किसी दूसरे Mac को खोलता है, वह उस कंप्यूटर का टोकन `$DSH_HOME/storages/dsh-composer-plus/computers.json` में रखता है (सिर्फ़ मालिक की फ़ाइल)। आप जो भी कंप्यूटर चुनते हैं, उसके लिए वह `127.0.0.1` पर एक रिले खोलता है। पेज को एक बार का लिंक (60 सेकंड) मिलता है, और रिले सिर्फ़ अपना पेज स्वीकार करता है (अपना पता, कोई दूसरी साइट नहीं)। जो पेज किसी दूसरे Mac ने खोला है, उसमें कंप्यूटर पिकर नहीं दिखता और वह इस Mac के कंप्यूटर नहीं बदल सकता।
191
+ - **रिमोट कंप्यूटर:** जब तक आप इसे हर Mac पर चालू नहीं करते, यह बंद रहता है। **दूसरे कंप्यूटर को यह Mac खोलने दें** एक दूसरा HTTPS पोर्ट (19392) खोलता है, सिर्फ़ इस Mac के Tailscale पते पर (Wi-Fi पर नहीं, और Bonjour से इसकी घोषणा नहीं होती)। किसी दूसरे Mac को एक बार का पेयरिंग लिंक (5 मिनट), मेल खाने वाला सर्टिफ़िकेट (पिन किया हुआ) और आपका **मंज़ूर करें** चाहिए। यह Mac उसके टोकन का सिर्फ़ हैश रखता है। पेयर किए गए कंप्यूटर को इस Mac पर dsh का पूरा नियंत्रण मिलता है, जैसे आप इसे यहीं इस्तेमाल कर रहे हों: चैट, मॉडल, टूल, फ़ाइलें और टर्मिनल। सेटिंग पैनल में उसे हटाएं, तो उसके कनेक्शन तुरंत बंद हो जाते हैं। जो Mac किसी दूसरे Mac को खोलता है, वह उस कंप्यूटर का टोकन `$DSH_HOME/storages/dsh-composer-plus/computers.json` में रखता है (सिर्फ़ मालिक की फ़ाइल)। आप जो भी कंप्यूटर चुनते हैं, उसके लिए वह `127.0.0.1` पर एक रिले खोलता है। पेज को एक बार का लिंक (60 सेकंड) मिलता है, और रिले सिर्फ़ अपना पेज स्वीकार करता है (अपना पता, कोई दूसरी साइट नहीं)। इस विंडो में दूसरे Mac का पेज इस Mac के कंप्यूटरों के नाम और स्थिति पढ़ सकता है (पता और टोकन नहीं) और इस विंडो को उनके बीच बदल सकता है। वह कोई कंप्यूटर जोड़, उसका नाम बदल या उसे हटा नहीं सकता, और इस Mac की सेटिंग नहीं बदल सकता।
184
192
  - **अपडेट:** Host वाला हिस्सा `api.github.com` से नवीनतम रिलीज़ और `registry.npmjs.org` से वही वर्शन पूछता है; आपके या आपकी चैट के बारे में कुछ नहीं भेजा जाता। इंस्टॉलेशन dsh के प्लगइन मैनेजर (`pnpm add dsh-composer-plus@<version>`; जब dsh 0.2.1 पहले से इंस्टॉल प्लगइन के लिए इसे मना करता है, तो `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, और फिर प्रोफ़ाइल उस URL को प्लगइन के स्रोत के रूप में सूचीबद्ध करती है) से होता है, इसलिए dsh की अपनी रजिस्ट्री, स्क्रिप्ट और वर्शन-संगतता जांच लागू होती हैं। प्री-रिलीज़ टैग और पुराने वर्शन कभी इंस्टॉल नहीं होते।
185
- - **उपयोग गिनती:** दिन में एक बार Host वाला हिस्सा GitHub से इंस्टॉल किए गए वर्शन की रिलीज़ की छोटी फ़ाइल `active.txt` माँगता है (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`)। GitHub इन अनुरोधों को हर फ़ाइल के लिए गिनता है, इसलिए लेखक को सिर्फ़ यह दिखता है कि उस दिन हर वर्शन की कितनी कॉपियों ने अनुरोध किया। अनुरोध में कोई id, कुकी या आपके या आपकी चैट के बारे में कोई डेटा नहीं होता; हर अपडेट जाँच की तरह GitHub आपका IP पता देखता है। आख़िरी अनुरोध का दिन `$DSH_HOME/storages/dsh-composer-plus/active.json` में रखा जाता है। इस रिपॉज़िटरी का git checkout और नाम बदली गई कॉपी कुछ नहीं भेजते। इसके लिए कोई स्विच नहीं है।
193
+ - **तुर्की स्किल पैक:** डिफ़ॉल्ट रूप से चालू है, और केवल तब काम करता है जब ऐप की भाषा Türkçe हो: ब्राउज़र Host वाले हिस्से को dsh की UI भाषा बताता है। फिर Host वाला हिस्सा दिन में अधिक से अधिक एक बार `api.github.com` से `yucezerey/turkish-anti-ai-skill` का नवीनतम commit और उसकी फ़ाइल सूची पूछता है, और बदली हुई Markdown फ़ाइलें `raw.githubusercontent.com` से डाउनलोड करता है। हर अपडेट जाँच की तरह GitHub आपका IP पता देखता है; आपके या आपकी चैट के बारे में कुछ नहीं भेजा जाता। केवल `skills/turkish-anti-ai-skill/` फ़ोल्डर की सामान्य `.md` फ़ाइलें रखी जाती हैं (अधिकतम 20 फ़ाइलें और 1 MB), और हर फ़ाइल GitHub की फ़ाइल सूची में अपने id से मेल खानी चाहिए। कॉपी `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>` में रहती है (केवल मालिक के लिए) और dsh की स्किल सूची में जुड़ती है; पैक की कोई स्क्रिप्ट नहीं चलती। स्विच और आख़िरी बताई गई भाषा `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json` में रहती है। बंद करने पर स्किल हट जाता है और कॉपी मिट जाती है।
194
+ - **उपयोग गिनती:** Host वाला हिस्सा GitHub से इंस्टॉल किए गए वर्शन की रिलीज़ की दो छोटी फ़ाइलें माँगता है (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`): `active.txt` दिन में एक बार, और `installed.txt` हर dsh होम के लिए सिर्फ़ एक बार। GitHub इन अनुरोधों को हर फ़ाइल के लिए गिनता है, इसलिए लेखक को सिर्फ़ यह दिखता है कि उस दिन हर वर्शन की कितनी कॉपियों ने `active.txt` माँगी, और कुल कितनी कॉपियों ने `installed.txt` माँगी (कॉपियों की संख्या)। अनुरोध में कोई id, कुकी या आपके या आपकी चैट के बारे में कोई डेटा नहीं होता; हर अपडेट जाँच की तरह GitHub आपका IP पता देखता है। आख़िरी `active.txt` अनुरोध का दिन `$DSH_HOME/storages/dsh-composer-plus/active.json` में रखा जाता है, और यह निशान कि `installed.txt` गिनी जा चुकी है, `$DSH_HOME/storages/dsh-composer-plus/installed.json` में रखा जाता है। इस रिपॉज़िटरी का git checkout और नाम बदली गई कॉपी कुछ नहीं भेजते। इसके लिए कोई स्विच नहीं है।
186
195
  - **अगले संदेश का अनुमान:** डिफ़ॉल्ट रूप से चालू है। ये मॉडल कॉल रोकने के लिए इसे **सेटिंग → Composer Plus** में बंद करें। हर पूरे हुए टर्न के बाद Host वाला हिस्सा चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), ज़्यादा से ज़्यादा लगभग 6,000 अक्षर (सबसे नया हिस्सा), चुने गए मॉडल (जब तक आप कोई दूसरा न चुनें, dsh का डिफ़ॉल्ट मॉडल) को भेजता है। यह dsh की अपनी प्रोवाइडर सेटिंग के ज़रिए एक अनुरोध के रूप में जाता है। चैट में कुछ सेव नहीं होता: अनुमान चैट के इतिहास में नहीं जुड़ता। स्विच और चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/predict.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)।
187
196
  - **टाइप करते समय पूरा करें:** जब तक आप इसे चालू नहीं करते, यह बंद रहता है। चालू रहने पर, टाइप करते समय हर ठहराव पर Host वाला हिस्सा अब तक टाइप किया गया टेक्स्ट, साथ ही चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ और रीज़निंग नहीं), चैट के ज़्यादा से ज़्यादा लगभग 3,000 अक्षर, **टाइप करते समय पूरा करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से **अगले संदेश का अनुमान** वाला मॉडल) को भेजता है। नया ठहराव पुराने अनुरोध को रोक देता है। चैट में कुछ सेव नहीं होता। स्विच `$DSH_HOME/storages/dsh-composer-plus/complete.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
188
197
  - **प्रॉम्प्ट बेहतर करें:** जब तक आप जादुई छड़ी पर क्लिक नहीं करते, कुछ नहीं चलता। फिर Host वाला हिस्सा आपका ड्राफ़्ट, चैट में आपके अपने संदेश और एजेंट के टेक्स्ट जवाब (टूल आउटपुट, छिपा संदर्भ, रीज़निंग और रोलबैक किए गए संदेश नहीं; ज़्यादा से ज़्यादा लगभग 6,000 अक्षर, सबसे नया हिस्सा), **सुविधाओं के आइडिया** वाला ही प्रोजेक्ट सारांश (फ़ाइलों के वही नियम: `.env*` या कुंजी फ़ाइलें नहीं, फ़ोल्डर से बाहर जाने वाला symlink नहीं, FIFO नहीं), वे पाथ जिन्हें `git status` बदले हुए के रूप में दिखाता है, और ज़्यादा से ज़्यादा 30 ट्रैक किए गए या ट्रैक न किए गए (ignore न किए गए) पाथ जिनके नामों में आपके ड्राफ़्ट वाले शब्द हैं, **प्रॉम्प्ट बेहतर करें** में चुने गए मॉडल (डिफ़ॉल्ट रूप से चैट का अपना मॉडल) को एक अनुरोध के रूप में भेजता है। उस सारांश के अलावा फ़ाइलों का कोई कंटेंट नहीं भेजा जाता। चैट या प्रोजेक्ट में कुछ नहीं लिखा जाता: जवाब सिर्फ़ कंपोज़र में आपके ड्राफ़्ट की जगह लेता है, और उसे भेजना है या नहीं, यह आप तय करते हैं। चुना गया मॉडल `$DSH_HOME/storages/dsh-composer-plus/improve.json` में रहता है (सिर्फ़ मालिक की फ़ाइल)।
@@ -190,6 +199,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
190
199
  - **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
191
200
  - **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
192
201
  - **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। **नया टास्क** dsh की अपनी नई चैट खोलता है, और पहला संदेश आप dsh के कंपोज़र में लिखते हैं, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। Host वाला हिस्सा उस चैट के पहले संदेश को कार्ड के प्रॉम्प्ट के रूप में रखता है और उसे (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000), साथ ही उन चैट की ID भी, जिन्हें आपने **×** या **सब हटाएं** से बोर्ड से हटाया है (सबसे नई 5,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती। **होवर पर प्रगति** इस Mac पर चैट का लॉग पढ़ती है। **तेज़ (AI के बिना)** (डिफ़ॉल्ट) में कुछ नहीं भेजा जाता। **AI सारांश** में, जब तक किसी चल रहे कार्ड का प्रगति बॉक्स दिखता है (या जब तक Tether का बोर्ड खुला है, ज़्यादा से ज़्यादा 8 चल रहे कार्ड के लिए), Host हिस्सा उस चैट का सबसे नया हिस्सा (ज़्यादा से ज़्यादा लगभग 6,000 अक्षर: आपके संदेश, एजेंट के टेक्स्ट जवाब, उसके टूल कॉल और उनके नतीजों का आख़िरी हिस्सा; रीज़निंग और रोलबैक किए गए संदेश नहीं) बिना टूल के एक अनुरोध में चैट के मॉडल को भेजता है। यह दोबारा तभी भेजता है जब चैट आगे बढ़ी हो, और हर चैट के लिए ज़्यादा से ज़्यादा 20 सेकंड में एक बार। नोट सिर्फ़ मेमोरी में रहता है; सेटिंग `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` में रहती है (सिर्फ़ मालिक की फ़ाइल)।
202
+ - **असिस्टेंट:** असिस्टेंट चैट `~/Assistant` में एक सामान्य dsh चैट है; किसी भी चैट की तरह इसकी मॉडल कॉल dsh के डिफ़ॉल्ट मॉडल को जाती हैं। इसके टूल इस Mac पर आपकी दूसरी चैट के लॉग पढ़ते हैं (शीर्षक, प्रोजेक्ट, स्थिति, और chat_read से उनके सबसे नए संदेश) और उन्हें उस मॉडल को सिर्फ़ तब देते हैं जब वह कोई टूल कॉल करता है। किसी चैट को संदेश भेजना, चैट शुरू करना, रोकना और आर्काइव करना, हर एक आपकी मंज़ूरी का इंतज़ार करता है। चैट ID `$DSH_HOME/storages/dsh-composer-plus/assistant.json` में और स्विच `assistant-switch.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइलें)। रिमाइंडर और ऑटोमेशन dsh के अपने शेड्यूल किए गए टास्क हैं। चैट जो मॉडल अनुरोध और वेब खोजें करती है, उनके सिवा कुछ भी इस Mac से बाहर नहीं जाता।
193
203
  - **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
194
204
  - **ब्लॉक की गई कमांड:** नियम और स्विच `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर `bash` और `pwsh` कॉल का सिर्फ़ कमांड टेक्स्ट पढ़ती है; यह न कुछ चलाती है, न कुछ भेजती है।
195
205
  - **सीक्रेट इनपुट:** मान केवल जवाब के अनुरोध में कार्ड से (या Tether से, उस गेटवे के ज़रिए जो अनुरोध की सामग्री लॉग नहीं करता) Host तक जाता है। Host उसे `$DSH_HOME/storages/dsh-composer-plus/secrets/<यादृच्छिक नाम>` में लिखता है (फ़ोल्डर 0700, फ़ाइल 0600); प्रोजेक्ट, चैट लॉग या टूल परिणाम में कुछ नहीं जाता। Host उस चैट के बाद के टूल परिणामों में मान को `[secret]` से बदलने के लिए उसे मेमोरी में रखता है। फ़ाइल और यह प्रति चैट का टर्न खत्म होने पर और dsh शुरू होने पर हटा दी जाती हैं। स्विच पास की `secrets.json` फ़ाइल में है। एजेंट इस फ़ाइल के साथ जो कमांड चलाता है, वह मान को वहाँ भेज सकती है जहाँ वह कमांड भेजती है: यही इसका उद्देश्य है।
@@ -212,10 +222,11 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
212
222
  - **रीस्टार्ट के बाद कोई चैट जारी नहीं रही:** dsh बंद होते समय रीस्टार्ट के बाद जारी रखें बंद था, आपने वह टर्न खुद रोका था, टर्न खत्म हो चुका था (पूरा या विफल), चैट आर्काइव थी, या 20 से ज़्यादा चैट चल रही थीं (सबसे नई 20 जारी रहती हैं)।
213
223
  - **रीस्टार्ट के बाद कतार खाली है:** dsh खुद बंद होते समय कतार खाली कर देता है। रीस्टार्ट के बाद जारी रखें उसे सिर्फ़ उसी चैट में वापस रखता है जिसे वह जारी रखता है; दूसरी चैट में संदेश फिर से भेजें। बंद होने से ठीक पहले हटाया गया संदेश वापस आ सकता है: उसे फिर से हटाएं।
214
224
  - **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` काम करता हो।
225
+ - **इश्यू रिपोर्ट करें "gh could not open the issue" कहता है:** यह संदेश `gh` की अपनी पहली पंक्ति है। टर्मिनल में `gh auth status` चलाएं और `gh auth login` से लॉग इन करें। या **इसके बजाय GitHub पर खोलें** पर क्लिक करें: GitHub का अपना नया इश्यू पेज ड्राफ़्ट भरे हुए खुलता है, और आप उसे वहीं सबमिट करते हैं।
215
226
  - **चैट पंक्ति पर ब्रांच लेबल नहीं है:** साइडबार “एक ही सूची में” व्यू में नहीं है (“वर्कस्पेस” और “वर्कस्पेस ट्री” में किसी भी चैट पंक्ति पर लेबल नहीं दिखता), यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
216
227
  - **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
217
228
  - **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
218
- - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.22.0`), ऊपर इंस्टॉल वाला नोट देखें।
229
+ - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.24.0`), ऊपर इंस्टॉल वाला नोट देखें।
219
230
  - **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
220
231
  - **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
221
232
  - **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
@@ -237,9 +248,11 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
237
248
  - अगर नया वर्शन dsh की कोई सेटिंग नहीं बदलता, तो dsh 0.2.1 अपडेट तुरंत लोड करता है; बाकी मामलों में, और dsh 0.2.0 पर, इसे लोड करने के लिए dsh रीस्टार्ट करें। प्लगइन आपके लिए dsh कभी रीस्टार्ट नहीं करता। जिन वेब/CLI प्रोफ़ाइल में dsh का प्लगइन मैनेजर नहीं है, वे सिर्फ़ नए वर्शन की जानकारी देती हैं।
238
249
  - **Composer Plus N में नया क्या है** नोट्स को **ऐप्लिकेशन की भाषा** की भाषा में दिखाता है। किसी दूसरे क्षेत्र वाली UI भाषा को उसकी मूल भाषा के नोट्स मिलते हैं (`en-GB` को अंग्रेज़ी नोट्स, `zh-TW` को `zh` के चीनी नोट्स)। जिस भाषा के नोट्स नहीं हैं (जिसे कोई दूसरा भाषा पैक जोड़ता है, या `pt-PT`, जो `pt-BR` नहीं है), उसमें अंग्रेज़ी नोट्स दिखते हैं। नोट्स नए वर्शन के साथ आते हैं। अगर चल रही कॉपी में पढ़ने लायक नोट्स फ़ाइल (`release-notes.json`) नहीं है, तो विंडो GitHub के अंग्रेज़ी नोट्स दिखाती है।
239
250
  - dsh चलते समय इंस्टॉल हुआ वर्शन (सेटिंग → प्लगइन या कॉपी किए गए फ़ोल्डर से अपडेट) dsh को रीस्टार्ट करने के बाद ही लोड होता है: तब तक **Composer Plus अपडेट** चल रहा वर्शन दिखाता है और रीस्टार्ट करने को कहता है। उस वर्शन की **Composer Plus N में नया क्या है** विंडो उस वर्शन की पहली शुरुआत पर एक बार दिखती है। इस प्लगइन को पहली बार इंस्टॉल करने के बाद की पहली शुरुआत पर विंडो नहीं दिखती; **इस वर्शन में नया क्या है** चल रहे वर्शन के नोट्स खोलता है।
251
+ - नोट्स के नीचे वाली GitHub स्टार पंक्ति यह नहीं जान सकती कि आपने रिपॉज़िटरी को स्टार दिया है या नहीं: प्लगइन इसके लिए कोई नेटवर्क कॉल नहीं करता। हर ब्राउज़र (और डेस्कटॉप ऐप) अपना रिकॉर्ड अलग रखता है, इसलिए किसी दूसरे ब्राउज़र में यह पंक्ति एक बार और दिख सकती है।
240
252
  - **नोट के साथ अस्वीकार करें** नोट को इंतज़ार कर रहे टर्न में एक संदेश के रूप में भेजता है, फिर अनुरोध अस्वीकार करता है; dsh नोट को चैट में आपके संदेश के रूप में दिखाता है। जब नोट फ़ील्ड खुली रहती है, तब कार्ड पर सिर्फ़ **रद्द करें** और **अस्वीकार करें** दिखते हैं, इसलिए कोई क्लिक गलती से अनुरोध को अनुमति नहीं दे सकता; `Esc` या **रद्द करें** से dsh के बटन वापस आ जाते हैं। खाली नोट कुछ नहीं भेजता (dsh का अपना **अस्वीकार करें** इस्तेमाल करें)। अगर नोट जाने के बाद अस्वीकार करना विफल होता है (उदाहरण के लिए, इस बीच अनुरोध का जवाब कहीं और दे दिया गया), तो नोट चैट में रहता है और मॉडल उसे अपने अगले कदम पर पढ़ता है। बटन dsh के मंज़ूरी कार्ड के मार्कअप (`data-approval-key`) में जाता है, क्योंकि dsh में कार्ड की कार्रवाइयों के लिए कोई जगह (slot) नहीं है; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो बटन नहीं दिखता और dsh का अपना **अस्वीकार करें** पहले की तरह काम करता है। एक नोट में ज़्यादा से ज़्यादा 4,000 अक्षर हो सकते हैं।
241
253
  - **सीक्रेट इनपुट** मान के केवल सटीक टेक्स्ट को छिपाता है: उसी चैट के बाद के टूल परिणामों में उसकी जगह `[secret]` आता है। फिर भी एजेंट शेल कमांड से फ़ाइल पढ़कर मान को किसी दूसरे रूप में (base64, उसका एक हिस्सा, बीच में स्पेस के साथ) प्रिंट कर सकता है, और वह रूप मॉडल तक पहुँचता है। एजेंट के अपने फ़ाइल टूल (read, grep, write, edit) सीक्रेट फ़ोल्डर नहीं खोल सकते। अगर मान कोई आम शब्द भी है, तो उस चैट के दूसरे परिणामों में भी `[secret]` दिखता है। फ़ाइल टर्न खत्म होने तक रहती है; अगर टर्न के बीच dsh बंद हो जाए, तो अगली शुरुआत उसे हटा देती है। एक चैट में एक समय में केवल एक खुला अनुरोध हो सकता है। यह टूल हर मॉडल अनुरोध में लगभग 870 अक्षर (अनुमानित लगभग 220 टोकन) जोड़ता है: उपयोग न करें तो इसे बंद करें।
242
254
  - **जवाब में उद्धरण** टेक्स्ट को वैसे ही उद्धृत करता है जैसा पेज दिखाता है: कोड ब्लॉक, तालिका या सूची बिना Markdown चिह्नों के सादी पंक्तियों के रूप में आती है। अगर चुनाव एक जवाब में शुरू होकर दूसरे में खत्म होता है, या सोच, किसी टूल पंक्ति या आपके अपने संदेश को छूता है, तो बटन नहीं दिखता: एक ही जवाब के अंदर चुनें। dsh में टेक्स्ट चुनाव के लिए कोई स्लॉट नहीं है, इसलिए बटन dsh की चैट संरचना से जवाब ढूंढता है; अगर dsh अपडेट यह संरचना बदल दे, तो बटन नहीं दिखेगा। जब उद्धरण फ़ील्ड के अंत में आता है, तो उसके बाद एक और खाली पंक्ति जुड़ती है, ताकि आपकी अगली पंक्ति उसके नीचे शुरू हो; भेजते समय dsh अंत की खाली पंक्तियां हटा देता है।
255
+ - **फ़ाइल प्रीव्यू से उद्धरण** dsh का अपना फ़ाइल प्रीव्यू पढ़ता है: पंक्ति संख्याएं प्रीव्यू की पंक्तियों से आती हैं, इसलिए वे कोड और टेक्स्ट फ़ाइलों के लिए सही होती हैं। Markdown फ़ाइल फ़ॉर्मैट किए गए पेज के रूप में दिखती है, इसलिए उसके उद्धरण में टेक्स्ट होता है, लेकिन Markdown चिह्न और पंक्ति संख्याएं नहीं; PDF के उद्धरण में पेज होता है, पंक्ति नहीं। पाथ वाले हेडर में, किसी दूसरे व्यूअर (स्प्रेडशीट, Office फ़ाइल, इमेज) में या दो खुली फ़ाइलों पर फैले चुनाव पर बटन नहीं दिखता, और फ़ुलस्क्रीन में दाएं साइडबार पर भी नहीं (तब इनपुट फ़ील्ड स्क्रीन पर नहीं होता)। dsh में वहां चुनाव के लिए कोई स्लॉट नहीं है, इसलिए बटन dsh के मार्कअप से प्रीव्यू ढूंढता है; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो बटन नहीं दिखता। इनपुट फ़ील्ड में सिर्फ़ चुना गया टेक्स्ट जाता है: अगर फ़ाइल बाद में बदलती है, तो उद्धरण नहीं बदलता।
243
256
  - **साइड चैट** dsh के अपने सिर्फ़-पढ़ने वाले मोड से सिर्फ़ पढ़ने के लिए है: फ़ाइल टूल लिख नहीं सकते, और शेल कमांड dsh के बिना-लिखने वाले सैंडबॉक्स में चलती हैं (या सैंडबॉक्स शुरू न हो पाए तो नहीं चलतीं)। एजेंट फिर भी dsh के मंज़ूरी कार्ड से ज़्यादा पहुंच मांग सकता है, और नेटवर्क कॉल (जैसे API अनुरोध) फिर भी कंप्यूटर के बाहर कुछ बदल सकती है। कॉपी उस सबसे नए पल पर बनती है जब कतार में कोई संदेश इंतज़ार नहीं कर रहा था, इसलिए कतार में संदेश रहते पूछा गया सवाल उनके बाद हुई बातें नहीं देखता। चैट का चल रहा चरण कॉपी में बंद कर दिया जाता है, इसलिए साइड चैट उस चरण की शुरुआत जानती है, उसका नतीजा नहीं। साइड चैट एक सामान्य चैट है: वह साइडबार में रहती है और आपके मॉडल इस्तेमाल में गिनी जाती है; उसे वहीं आर्काइव करें। वापस लाएं सिर्फ़ साइड चैट के अपने संदेश लेता है (ज़्यादा से ज़्यादा 12,000 अक्षर) और हर सवाल का सिर्फ़ आख़िरी जवाब; टूल कॉल के बीच एजेंट के नोट नहीं आते। dsh प्लगइन को दाएं साइडबार में चैट दिखाने का स्लॉट नहीं देता, इसलिए साइड चैट मुख्य व्यू में खुलती है।
244
257
  - **डिफ़ नोट** सिर्फ़ बदलाव पैनल में काम करता है, dsh के अपने पिछला टर्न व्यू में नहीं। रेंज डिफ़ के एक ही ब्लॉक (एक `@@` हिस्से) में रहनी चाहिए। नोट इस ब्राउज़र के स्टोरेज में रहते हैं, इसलिए दूसरा ब्राउज़र या दूसरे कंप्यूटर पर dsh उन्हें नहीं देखता; Tether अपने नोट मेमोरी में रखता है। नोट क्लिक के समय की पंक्तियां रखता है: एजेंट बाद में फ़ाइल बदले तो भी नोट पुरानी पंक्तियां और संख्याएं दिखाता है। हर चैट में ज़्यादा से ज़्यादा 50 नोट, हर नोट में 2,000 अक्षर और 40 पंक्तियां (उसके बाद `…` पंक्ति)।
245
258
  - **इस चैट के लिए अनुमति दें** समय सीमा को अनुमति देने के पल से गिनता है। नई समय सीमा चल रही अनुमतियों पर तुरंत लागू होती है, इसलिए छोटी समय सीमा उन्हें तुरंत खत्म कर सकती है। वर्शन 1.12 और उससे पहले की अनुमतियों में कोई समय नहीं है: अपडेट के बाद एजेंट उन टूल के लिए एक बार फिर पूछता है।
@@ -247,7 +260,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
247
260
  - **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
248
261
  - **चैट हेडर को विंडो में फ़िट करें** dsh के चैट हेडर को dsh के बनाए क्लास नामों (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) से ढूंढता है, क्योंकि dsh इसके लेआउट के लिए कोई हुक नहीं देता। अगर dsh का अपडेट ये नाम बदल दे, तो हेडर वैसा ही दिखता है जैसा dsh बनाता है। बहुत संकरे चैट कॉलम में हेडर दो या तीन पंक्तियां ले सकता है, इसलिए संदेशों के ऊपर की जगह कम हो जाती है।
249
262
  - **मोबाइल कनेक्ट** सिर्फ़ macOS पर काम करता है (यह `en0`, `openssl`, `swift` और `dns-sd` इस्तेमाल करता है)। यह तय पोर्ट 19390 और 19391 इस्तेमाल करता है, इसलिए हर Mac पर एक समय में सिर्फ़ एक dsh इसे चला सकता है (फ़ोन की Mac सूची में हर Mac एक एंट्री है)। `apns.json` में APNs कुंजी होने पर (देखें `tether/README.md`) Mac सूचनाएं Apple की पुश सेवा से भेजता है, इसलिए Tether बंद होने पर भी वे आती हैं; Mac जागा हुआ हो और dsh खुला हो। कुंजी के बिना फ़ोन को सूचनाएं सिर्फ़ तब मिलती हैं, जब Tether खुला हो या अभी-अभी बैकग्राउंड में गया हो। जब तक आप Tether में "Settings → Notifications → Send notifications" चालू नहीं करते, Tether सूचनाएं नहीं भेजता। Tether यह स्विच और इसके घंटे हर पेयर किए गए Mac के लिए अलग रखता है। यह स्विच हर Mac पर डिफ़ॉल्ट रूप से बंद रहता है, और इसे चालू करने पर iOS अनुमति मांगता है। iOS ऐप अभी App Store पर नहीं है: इसे Xcode से `tether/ios` से बनाएं। "Tailscale only" के लिए भी Mac पर Wi-Fi या Ethernet पता ज़रूरी है (गेटवे सिर्फ़ ऐसे पते के साथ शुरू होता है)। एक्सेस लॉग हर Mac का अलग होता है और सिर्फ़ सबसे नई 200 कोशिशें रखता है; एक मिनट के अंदर दोहराई गई कोशिश उसी पंक्ति की गिनती एक बढ़ाती है। हर सूचना में Mac और चैट का प्रोजेक्ट (`Studio Mac · recipe-box`), चैट का शीर्षक और टेक्स्ट दिखता है: Turn finished में एजेंट का आख़िरी जवाब दिखता है। APNs की के साथ यह टेक्स्ट Apple की पुश सेवा से होकर जाता है। Tether का ऐप लॉक iPhone की लॉक स्क्रीन पर सूचनाओं के प्रीव्यू नहीं छिपाता: उन्हें iOS सेटिंग में बंद करें। Tether के हरे बिंदु Mac के हिसाब से चलते हैं: जिस चैट को आप dsh में खोलते हैं, उसका बिंदु फ़ोन पर भी हट जाता है। जिस चैट को आप Tether में खोलते हैं, उसका बिंदु सिर्फ़ फ़ोन पर हटता है। Mac पर dsh का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
250
- - **रिमोट कंप्यूटर** के लिए दोनों Mac पर Tailscale चाहिए, और जिस Mac को आप खोलते हैं, उस पर Composer Plus और यह फ़ीचर चालू होना चाहिए। वह Mac स्लीप में नहीं होना चाहिए और उस पर dsh चलना चाहिए। दूसरा कंप्यूटर स्क्रीन पर दिख रही चैट के दाएं साइडबार के ब्राउज़र टैब में खुलता है। यह टैब उसी चैट का होता है, इसलिए दूसरी चैट अपना साइडबार दिखाती है। चैट न हो (या ब्राउज़र टैब के बिना dsh web हो), तो कंप्यूटर ब्राउज़र विंडो में खुलता है। पिकर सिर्फ़ तब दिखता है, जब मुख्य हिस्से में कोई चैट या नई चैट की स्क्रीन हो; टास्क बोर्ड पर यह नहीं दिखता। यह पोर्ट 19392 इस्तेमाल करता है (हर Mac पर सिर्फ़ एक dsh दूसरे कंप्यूटर को अंदर आने दे सकता है)। जिस कंप्यूटर को आपने किसी दूसरे कंप्यूटर के पेज के अंदर खोला है, उसमें पिकर नहीं होता, इसलिए वहां से आप तीसरा Mac नहीं खोल सकते।
263
+ - **रिमोट कंप्यूटर** के लिए दोनों Mac पर Tailscale चाहिए, और जिस Mac को आप खोलते हैं, उस पर Composer Plus और यह फ़ीचर चालू होना चाहिए। वह Mac स्लीप में नहीं होना चाहिए और उस पर dsh चलना चाहिए। पिकर सिर्फ़ तब दिखता है, जब बायां साइडबार खुला हो (तब नहीं, जब उसमें सिर्फ़ आइकन दिखते हों)। अगर दूसरे Mac के पेज पर अपना पिकर नहीं है (वहां Composer Plus 1.23.0 से पुराना है), तो इस Mac का पिकर उसी जगह उस पेज के ऊपर दिखता है। अगर वहां 1.23.0 है, तो पिकर में उस Mac का नाम दिखता है: वापस आने के लिए उसके मेनू में **यह Mac** चुनें। आपने जो भी कंप्यूटर खोला है, उसका पेज तब तक मेमोरी में रहता है, जब तक आप यह फ़ीचर बंद न करें या dsh रीस्टार्ट न करें। डेस्कटॉप ऐप में दूसरे Mac का पेज एक एम्बेड किया हुआ पेज है: dsh के अपने कीबोर्ड शॉर्टकट (जैसे नई चैट) उसमें काम नहीं करते, और वहां फ़ाइल डाउनलोड, माइक्रोफ़ोन और सूचनाएं भी काम नहीं करतीं। यह पोर्ट 19392 इस्तेमाल करता है (हर Mac पर सिर्फ़ एक dsh दूसरे कंप्यूटर को अंदर आने दे सकता है)। दूसरे Mac के पेज से पिकर सिर्फ़ इस Mac के कंप्यूटरों के बीच बदलता है: आप दूसरे Mac के ज़रिए तीसरा Mac नहीं खोल सकते।
251
264
  - सेशन लिंक चैट के अंदर काम करता है; उस पर क्लिक करने से चैट नहीं खुलती। **संदेश लिंक कॉपी करें** से बना लिंक अपना संदेश सिर्फ़ dsh 0.2.1 और बाद के वर्शन में खोलता है, और सिर्फ़ किसी चैट के संदेश से (dsh 0.2.0 में यूज़र टेक्स्ट के नियम नहीं हैं, इसलिए वहां लिंक कॉपी तो होता है, पर सादे टेक्स्ट की तरह दिखता है)। जो संदेश किसी रोलबैक ने हटाया, या जिसे कॉम्पैक्ट करने से dsh के लोड किए गए इतिहास से हटा दिया गया, वह नहीं दिख सकता: तब लिंक यही बताता है। 🔗 बटन dsh की संदेश पंक्तियों से जुड़ते हैं; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो वे नहीं दिखते।
252
265
  - **सभी को पढ़ा हुआ मार्क करें** dsh के अपने अपठित बिंदुओं को dsh के ऐसे हिस्से से बदलता है, जो सार्वजनिक API नहीं है (dsh के सेशन स्टेटस की `completionUnread` सूची)। अगर dsh का कोई अपडेट इसका नाम बदलता है, तो आइटम नहीं दिखता। आइटम dsh के प्रोजेक्ट वाले "…" मेन्यू में जाता है, जिसमें प्लगइन के लिए कोई slot नहीं है; अगर dsh वह मेन्यू बदलता है, तो भी आइटम नहीं दिखता।
253
266
  - **कतार वाले संदेश को उसी जगह एडिट करें** उस संदेश को नहीं बदलता जो इस बीच भेजा जाने लगा, और उस संदेश को ओवरराइट नहीं करता जो इस बीच बदल गया (जैसे iPhone पर Tether में): एक सूचना यह बताती है। नई इमेज के लिए ऐसा मॉडल चाहिए जो इमेज लेता हो (dsh की अपनी इमेज सीमाएं लागू होती हैं), और नई फ़ाइल का अपलोड पूरा होने के बाद ही संदेश सेव हो सकता है। सिर्फ़ आपके अपने कतार वाले संदेश एडिट होते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब एडिट नहीं होता। प्लगइन अपडेट के बाद सिर्फ़ टेक्स्ट वाले एडिट तुरंत काम करते हैं: इमेज या फ़ाइल वाला संदेश सेव करने से पहले dsh रीस्टार्ट करें (Host वाला हिस्सा शुरू होने पर लोड होता है)।
@@ -255,6 +268,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
255
268
  - **ट्री** ब्रांच मैप अनुमान लगाता है कि हर तीर कहाँ जाता है, क्योंकि git यह सेव नहीं करता कि कोई ब्रांच किस ब्रांच में मर्ज हुई। मर्ज की गई ब्रांच उस ब्रांच की ओर इशारा करती है, जिसके मर्ज कमिट ने उसे सबसे पहले लिया। इंतज़ार कर रही ब्रांच उस सबसे नज़दीकी ब्रांच की ओर इशारा करती है, जिससे वह शुरू हुई (पहले मुख्य ब्रांच); जब दो ब्रांच एक ही कमिट से शुरू हुई हों, तो मैप ग़लत ब्रांच चुन सकता है। जो ब्रांच fast-forward से आगे बढ़ी, उसका कोई मर्ज कमिट नहीं होता, इसलिए उसका **मर्ज की गई** लेबल कुछ नहीं खोलता। मुख्य ब्रांच `origin` की डिफ़ॉल्ट ब्रांच है; वह न हो तो `main` या `master`; वे भी न हों तो खुली हुई ब्रांच। मैप नवीनतम 20,000 कमिट पढ़ता है और ज़्यादा से ज़्यादा 60 ब्रांच दिखाता है; लंबे इतिहास में वह बताता है कि कुछ तीर ग़लत हो सकते हैं। squash या rebase से मर्ज की गई ब्रांच (जैसे GitHub पर) **इंतज़ार में** दिखती है: git उसके कमिट से कोई जुड़ाव नहीं रखता।
256
269
  - **यह चैट** सिर्फ़ वे फ़ाइलें गिनता है, जो dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) ने लिखीं। जो फ़ाइलें किसी कमांड (`bash`) ने बदलीं, वे इस व्यू में नहीं हैं; वे **कमिट नहीं किए गए** में दिखती हैं। अगर चैट का टर्न रोलबैक स्नैपशॉट नहीं है (टर्न रोलबैक बंद है, dsh-rewind-plugin इंस्टॉल है, या चैट प्लगइन से पुरानी है), तो व्यू आखिरी कमिट से तुलना करता है और यह बताता है। टर्न रोलबैक किसी चैट के 50 नवीनतम स्नैपशॉट रखता है: लंबी चैट में व्यू सबसे पुराने रखे गए स्नैपशॉट से तुलना करता है, बताता है कि किस संदेश से, और पहले के बदलाव नहीं गिनता। **व्हाइटस्पेस बदलाव छिपाएं** का मतलब `git diff -w` है: जिस पंक्ति में सिर्फ़ अंदर की स्पेस बदली, वह भी छिप जाती है।
257
270
  - **GitHub इश्यू खोलें** के लिए dsh के PATH में GitHub CLI (`gh`) और चैट के फ़ोल्डर में GitHub रिमोट ज़रूरी है। यह ज़्यादा से ज़्यादा 60 सेकंड चलता है; अगर `gh` इससे ज़्यादा समय लेता है, तो इश्यू GitHub पर बन चुका हो सकता है, पर सूची में उसका लिंक नहीं होगा (दोबारा क्लिक करने से पहले GitHub पर देखें: सूची लिंक सिर्फ़ पूरे हुए रन से पढ़ती है, इसलिए नया क्लिक दूसरा इश्यू खोल सकता है)। एक से ज़्यादा GitHub रिमोट वाला फ़ोल्डर `gh` का अपना डिफ़ॉल्ट (`gh repo set-default`) इस्तेमाल करता है।
271
+ - **इश्यू रिपोर्ट करें** इश्यू सिर्फ़ Composer Plus की रिपॉज़िटरी (`furkancak1r/dsh-composer-plus`) में खोलता है, आपके प्रोजेक्ट में नहीं (उसके लिए सुविधाओं के आइडिया की **बाद में** सूची में **GitHub इश्यू खोलें** इस्तेमाल करें)। ड्राफ़्ट के लिए इसे dsh में एक डिफ़ॉल्ट मॉडल चाहिए, और इश्यू खोलने के लिए लॉगिन के साथ GitHub CLI (`gh`)। ड्राफ़्ट हमेशा अंग्रेज़ी में होता है। मॉडल कोई विवरण गलत लिख सकता है: **इश्यू खोलें** पर क्लिक करने से पहले ड्राफ़्ट पढ़ें। इश्यू खोलना ज़्यादा से ज़्यादा 60 सेकंड चलता है; एक घंटे के अंदर वही शीर्षक और टेक्स्ट फिर से भेजने पर नई कॉपी के बजाय पहले वाला इश्यू दिखता है। **इसके बजाय GitHub पर खोलें** लिंक को छोटा रखने के लिए बहुत लंबे विवरण को काट देता है।
258
272
  - **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
259
273
  - **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। लेबल सिर्फ़ “एक ही सूची में” व्यू में दिखता है।
260
274
  - **हर चैट की अपनी ब्रांच** प्लान मोड में: dsh `/plan <संदेश>` को संदेश की तरह नहीं, कमांड की तरह भेजता है, इसलिए Composer Plus dsh के कंपोज़र में कमांड का सबमिट खुद संभालता है (यह सार्वजनिक API नहीं है)। अगर किसी dsh अपडेट से यह बदलता है, तो **नई ब्रांच** चुनी होने पर `/plan <संदेश>` खुली नई चैट में dsh के अपने कमांड की तरह चलता है। जब Host नई चैट में प्लान मोड चालू नहीं कर पाता, तो ब्रांच फ़ोल्डर बना रहता है और संदेश नहीं भेजा जाता, ताकि नई चैट डिफ़ॉल्ट मोड में फ़ाइलें न बदले।
@@ -279,7 +293,10 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
279
293
  - **नई चैट में जारी रखें** चैट (संदेश, टूल कॉल और हर टूल नतीजे का आखिरी हिस्सा, ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, सबसे नया हिस्सा) चैट के अपने मॉडल को भेजता है। हैंडऑफ़ नोट से कोई फ़ैसला या फ़ाइल छूट सकती है: शुरू करने से पहले उसे पढ़ें। नई चैट सिर्फ़ नोट और लिंक की गई चैट को जानती है (dsh पुरानी चैट को सिर्फ़ पढ़ने लायक कॉन्टेक्स्ट के रूप में जोड़ता है); उसका मॉडल कॉन्टेक्स्ट छोटा शुरू होता है, पुरानी चैट जैसी है वैसी रहती है। हर चैट के लिए एक समय में एक ही नोट या शुरुआत चलती है।
280
294
  - **कॉन्टेक्स्ट का ब्योरा** dsh के अपने नियम (हर टोकन पर लगभग 4 अक्षर) से अनुमान दिखाता है, वही नियम जो dsh की कॉन्टेक्स्ट रिंग में है; मॉडल की अपनी गिनती अलग हो सकती है। टूल की परिभाषाएं सबसे नए अनुरोध की होती हैं। यह कॉन्टेक्स्ट वैसा दिखाता है जैसा चैट लॉग में है; अभी चल रहा टर्न अपने अगले कदम के बाद दिखता है।
281
295
  - **नियोजित चरण** से टोकन तभी बचते हैं जब मॉडल सच में योजना बनाए: चालू रहने पर हर अनुरोध में `plan_next_steps` टूल और एक छोटा निर्देश (लगभग 500 टोकन) जाता है, उन चैट में भी जहाँ मॉडल कभी योजना नहीं बनाता। शर्त सिर्फ़ वही साबित करती है जो उसमें लिखा है (जैसे: बिल्ड का एग्ज़िट कोड 0 था), यह नहीं कि काम सही है। `ok` dsh के अपने नतीजे वाले निशान पढ़ता है (`[exit code: N]`, टाइमआउट, सैंडबॉक्स से इनकार); जो कमांड शून्य से अलग एग्ज़िट कोड दिए बिना विफल हो, वह पास मानी जाती है। चरण एक-एक करके चलते हैं; एक साथ तैयार दो चरण मॉडल को लौटते हैं। चरण का संदेश चैट के मॉडल के असिस्टेंट संदेश के रूप में सेव होता है (dsh में प्लगइन के लिखे संदेश के लिए कोई निशान नहीं है), इसलिए उसके टेक्स्ट में लिखा होता है कि इसे Composer Plus ने चलाया। Tether में नहीं है।
296
+ - **तुर्की स्किल पैक** एक थर्ड-पार्टी स्किल इंस्टॉल करता है: इसके नियम Composer Plus से नहीं, लेखक के GitHub रिपॉज़िटरी से आते हैं, और नया संस्करण हमारी समीक्षा के बिना अगली दैनिक जाँच से उपयोग होता है। जाँच केवल यह साबित करती है कि फ़ाइलें वही हैं जो GitHub उस commit के लिए दिखाता है, यह नहीं कि नियम अच्छे हैं। स्किल कब लोड हो, यह मॉडल तय करता है (आप इसे नाम से भी बुला सकते हैं); नियम केवल तुर्की पाठ पर लागू होते हैं। Host वाला हिस्सा वही भाषा उपयोग करता है जो किसी ब्राउज़र ने आख़िर में बताई: दो ब्राउज़र अलग भाषाएँ उपयोग करें तो सबसे नई सूचना मान्य होती है। बिना लॉगिन GitHub प्रति घंटे 60 API कॉल की अनुमति देता है; अस्वीकृत जाँच इंस्टॉल की गई कॉपी रखती है और सेटिंग में कारण दिखाती है।
297
+ - **कोडबेस सुलझाएं** में स्किल की एक तय कॉपी है (caldoai/skills, कमिट f3cf477): मूल स्किल का बदलाव सिर्फ़ Composer Plus के नए वर्शन के साथ आता है। यह स्किल एक लंबा लक्ष्य चलाती है जो कई फ़ाइलें बदल सकता है, और इसके सब-एजेंट और जाँच बहुत टोकन खर्च करते हैं। जहाँ प्रोजेक्ट में टेस्ट नहीं हैं, वहाँ यह बिना पता चले व्यवहार बदल सकती है: इसे अलग ब्रांच पर शुरू करें और मर्ज से पहले diff पढ़ें। प्रोजेक्ट में, किसी कस्टम स्किल फ़ोल्डर में या `~/.dsh/skills` में उसी नाम की स्किल हो तो वह इसकी जगह ले लेती है। स्विच बंद रहने पर `/untangle-codebase` मॉडल को सामान्य टेक्स्ट की तरह जाता है।
282
298
  - **टास्क बोर्ड** वे चैट दिखाता है जिन्हें dsh इस विंडो में अपनी सूची में दिखाता है: किसी प्रोजेक्ट के बाहर की चैट सिर्फ़ **सभी प्रोजेक्ट** में दिखती है, और हर चैट की अपनी ब्रांच का फ़ोल्डर (`<project>/.worktrees/<name>`) अपने प्रोजेक्ट में गिना जाता है। कार्ड का कॉलम चैट की लाइव स्थिति है, इसलिए कार्ड खींचे नहीं जा सकते: टर्न खत्म होने पर चैट **पूरा हुआ** में जाती है, एरर या रोकने के बाद भी, और फिर से चलने पर **प्रगति में** लौट आती है। हरा बिंदु dsh का अपना पूरा होने वाला बिंदु है, जिसे dsh सिर्फ़ इसी विंडो में रखता है: पेज फिर से लोड होने के बाद खत्म हुई चैट इसके बिना दिखती हैं। **पूरा हुआ** सबसे नई 50 चैट दिखाता है (**N पुराने टास्क दिखाएं** बाकी चैट दिखाता है)। **प्रोजेक्ट खोजें** किसी प्रोजेक्ट को सिर्फ़ उसके नाम से ढूंढता है, उसके फ़ोल्डर पाथ से नहीं। **पिछले 2 घंटों में सक्रिय** किसी प्रोजेक्ट को तब छिपाता है जब उसकी हर चैट 2 घंटे से पुरानी, निष्क्रिय और पढ़ी हुई हो; बोर्ड फिर भी वह प्रोजेक्ट दिखाता है जो आपने चुना है। **नया टास्क** इस विंडो की नई चैट में से सिर्फ़ सबसे नई चैट याद रखता है: अगर आप पहला संदेश जाने से पहले कोई दूसरी चैट खोलते हैं, तो वह चैट तब तक **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में रहती है जब तक आप उसमें नहीं लिखते, लेकिन बोर्ड अपने-आप सिर्फ़ सबसे नई चैट के लिए लौटता है। पेज फिर से लोड होने के बाद बिना संदेश वाली नई चैट बोर्ड पर नहीं होती (dsh उसे अपने खाली नए सेशन के रूप में रखता है)। टैग हर टास्क के लिए उसके पहले संदेश से एक मॉडल कॉल से आते हैं: वे गलत हो सकते हैं, और जो चैट आपने बोर्ड पर शुरू नहीं की, उसके कोई टैग नहीं होते। शीर्षक dsh का अपना चैट शीर्षक है (dsh की शीर्षक सर्विस, चैट के मॉडल के साथ); जब तक वह नहीं आता, कार्ड पहले संदेश की पहली लाइन दिखाता है। **×** और **सब हटाएं** कार्ड को सिर्फ़ बोर्ड से हटाते हैं: कोई चैट डिलीट नहीं होती। **पहले जैसा करें** सिर्फ़ 8 सेकंड तक और सिर्फ़ इसी विंडो में दिखता है; बाद में **हटाए गए (N)** → **बोर्ड पर वापस रखें** किसी कार्ड को वापस लाता है, और जो चैट फिर से चलती है, वह अपने-आप लौट आती है। **सब हटाएं** पहले पूछता है और दिख रहे प्रोजेक्ट के पढ़े हुए खत्म हुए कार्ड हटाता है (**सभी प्रोजेक्ट** चुने होने पर सभी प्रोजेक्ट के), **N पुराने टास्क दिखाएं** के पीछे वाले कार्ड भी; बिना पढ़ा (हरा) कार्ड बना रहता है। dsh अपना हरा बिंदु सिर्फ़ इसी विंडो में रखता है, इसलिए पेज फिर से लोड होने के बाद सब हटाएं ऐसा कार्ड भी हटा सकता है जिसका जवाब आपने नहीं पढ़ा। यह सूची इस Mac पर हर विंडो और Tether के लिए रखी जाती है; जब इसमें 5,000 चैट हो जाती हैं, तो सबसे पुरानी चैट लौट आती हैं। **जवाब दें** चैट के सिर्फ़ सबसे नए अनुरोध का जवाब देता है: अगर उस अनुरोध का जवाब कहीं और (दूसरी विंडो, Tether, ऑटो रिव्यू) दिया जा चुका है या चैट कुछ नया पूछती है, तो पैनल यह बताता है और कुछ नहीं भेजता। पुराने वर्शन में टिप्पणियों और एजेंट टूल वाली टास्क सूची थी; वह अब नहीं है, और पुरानी `board.json` नहीं दिखाई जाती। विचार और रूप emanuele-em के [Kanzo](https://github.com/emanuele-em/kanzo) (AGPL-3.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता। `Cmd+Shift+K` एक dsh शॉर्टकट है: Linux पर ब्राउज़र में इसकी कोई डिफ़ॉल्ट कुंजी नहीं होती (dsh के कीबोर्ड शॉर्टकट पेज में सेट करें), और कोई ब्राउज़र एक्सटेंशन या दूसरा ऐप इसे पहले ले सकता है। कार्ड **पूरा हुआ** से तब हटता है जब dsh का अपना हरा बिंदु चला जाता है (आपने चैट खोली), या, जो चैट बोर्ड के पीछे खुली चैट रहते हुए खत्म हुई, उसके लिए तब जब वह चैट ऊपर किसी पैनल के बिना दिखती है। पढ़ा गया यह हाल dsh के अपने बिंदुओं की तरह सिर्फ़ इसी dsh विंडो में रहता है: रीलोड के बाद या दूसरी विंडो में हर खत्म हुई चैट पढ़ी गई मानी जाती है, इसलिए वह **हाल में पूरे हुए** में होती है।
299
+ - **असिस्टेंट** में इस Mac की सभी विंडो के लिए एक ही चैट है। यह workspace-write अनुमति मोड में चलता है: यह फ़ाइलें सिर्फ़ `~/Assistant` में लिखता है, और उसके बाहर की कोई कमांड पहले पूछती है। जब आप चैट को बिना मंज़ूरी वाले मोड (पूरी एक्सेस) में बदलते हैं, तो dsh हर मंज़ूरी अस्वीकार कर देता है, इसलिए असिस्टेंट किसी चैट को संदेश नहीं भेज सकता, चैट शुरू नहीं कर सकता, रोक नहीं सकता या आर्काइव नहीं कर सकता। मंज़ूरी कार्ड सिर्फ़ इन छह टूल की रक्षा करता है: उस मोड वाली किसी भी चैट की तरह, असिस्टेंट की शेल कमांड अब भी नेटवर्क तक पहुंच सकती है। dsh 0.2.0 और 0.2.1 पर dsh के शेड्यूल टूल सिर्फ़ असिस्टेंट चैट के अपने रिमाइंडर देखते हैं, दूसरी चैट के ऑटोमेशन नहीं; dsh 0.2.2 से वे हर शेड्यूल किए गए टास्क की सूची दिखाते हैं और उसे बदलते हैं। chats_list आर्काइव की गई, खाली और सबएजेंट चैट को, और खुद असिस्टेंट चैट को छोड़ देता है; “आपका इंतज़ार कर रही” का मतलब है कि चल रही चैट में कोई खुली मंज़ूरी, सवाल या प्लान रिव्यू है। chat_read उपयोगकर्ता के संदेश और एजेंट के जवाब देता है (टूल आउटपुट नहीं), ज़्यादा से ज़्यादा 50 संदेश और लगभग 24,000 अक्षर। chat_archive ऐसी चैट को मना कर देता है जो अभी चल रही है या जिसके सक्रिय रिमाइंडर हैं। मॉडल अब भी पढ़े गए टेक्स्ट से गुमराह हो सकता है: मंज़ूरी कार्ड आख़िरी जांच है, इसलिए **एक बार अनुमति दें** पर क्लिक करने से पहले उसे पढ़ें।
283
300
  - **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
284
301
  - **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (dsh के प्रोजेक्ट फ़ोल्डर) की होती है: जो चैट `cd` से फ़ोल्डर बदलती है, वह अपने पहले प्रोजेक्ट की मेमोरी ही रखती है, और वही फ़ोल्डर उन्हीं फ़ाइलों तक जाने वाले दूसरे पाथ से खोला जाए तो वह भी यही मेमोरी साझा करता है। चैट शुरू होते समय अपना मेमोरी हिस्सा स्थिर कर देती है, इसलिए बाद में सेव हुआ नोट अगली चैट से दिखता है (`memory_recall` उसे तुरंत ढूंढ लेता है)। समीक्षा सिर्फ़ वही रखती है, जो मॉडल रखना तय करता है: वह कोई तथ्य छोड़ सकती है या कोई गलत बात रख सकती है; उन्हें **मेमोरी खोलें** में जांचें और वहीं बदलें, या dsh बंद होने पर फ़ाइलें हाथ से बदलें। **मेमोरी खोलें** चुने गए प्रोजेक्ट के नोट और ग्लोबल नोट (सभी नोट चुनने पर सभी प्रोजेक्ट; ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, बाकी सिर्फ़ गिने जाते हैं और उस अनुरोध में नहीं बदल सकते) और आपका लिखा हुआ टेक्स्ट चैट के मॉडल को नहीं, dsh के डिफ़ॉल्ट मॉडल को भेजता है। प्रीव्यू Mac पर 30 मिनट तक और dsh के दोबारा शुरू होने तक रहता है; अगर इस बीच समीक्षा या एजेंट नोट बदल दे, तो **लागू करें** मना कर देता है और आपको फिर से प्रीव्यू लेना होता है। **लागू करें** किसी प्रीव्यू के सभी बदलाव सेव करता है या एक भी नहीं: अगर कोई बदलाव सेव नहीं हो पाता (जैसे MEMORY.md भर गई हो), तो नोट पहले जैसे रहते हैं और कारण दिखता है। आपके संदेश वाले हर पूरे टर्न पर एक मॉडल कॉल लगती है; विफल कॉल अगले टर्न के बाद वही संदेश फिर पढ़ती है। सब-एजेंट चैट की समीक्षा नहीं होती। यह विचार और फ़ाइल फ़ॉर्मैट [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता और DS Bot की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
285
302
  - **मेमोरी वर्शन इतिहास** हर मेमोरी (हर प्रोजेक्ट और ग्लोबल मेमोरी) के नवीनतम 50 वर्शन रखता है; पुराने हटा दिए जाते हैं। एक वर्शन में एक नोट नहीं, उस प्रोजेक्ट की पूरी मेमोरी होती है। **रीस्टोर करें** उस वर्शन की सभी फ़ाइलें (विषय सहित) वापस रखता है, और वर्शन खोलने के बाद मेमोरी बदल गई हो तो मना कर देता है; रीस्टोर से पहले की मेमोरी एक नया वर्शन बन जाती है, इसलिए आप उसे पूर्ववत कर सकते हैं। स्विच बंद रहने पर कोई नया वर्शन नहीं रखा जाता और **रीस्टोर करें** मना कर देता है; रखे गए वर्शन बने रहते हैं। इस सुविधा से पहले का कोई वर्शन नहीं है: इतिहास इंस्टॉल करने के बाद की पहली सेव से शुरू होता है।
@@ -293,6 +310,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
293
310
  - **बहाली:** सिर्फ़ रेस्क्यू कंसोल में चलती है, जब dsh बंद हो, और पूरे dsh होम को बदल देती है। पुराना होम उसके बगल में `.dsh.pre-restore-<time>` के रूप में तब तक रहता है, जब तक आप उसे हटा नहीं देते, इसलिए डिस्क पर दोनों के लिए जगह चाहिए। चैट अपने प्रोजेक्ट पाथ बनाए रखती हैं: दूसरे कंप्यूटर पर, किसी दूसरे पाथ पर रखा प्रोजेक्ट तब तक गायब दिखता है, जब तक आप उसे फिर से नहीं जोड़ते। dsh होम से बाहर इशारा करने वाले symlink (जैसे किसी दूसरे फ़ोल्डर से लिंक की गई skills) लिंक के रूप में वापस आते हैं; उनके टारगेट उस कंप्यूटर पर होने चाहिए।
294
311
  - **सेशन लॉग जांच** हर चैट का सबसे नया लॉग dsh के उन्हीं नियमों से पढ़ती है, जिनसे dsh तय करता है कि क्या खुलेगा: जो लाइन JSON नहीं है या क्रम से बाहर है, उसे तभी खराबी गिना जाता है जब उसके बाद कोई टर्न खत्म होता है (वरना dsh उस लाइन से आगे की लाइनों के बिना चैट खोल देता है, इसलिए वह सूची में नहीं दिखती)। यह लॉग के इवेंट को dsh के अपने इवेंट नियमों से नहीं जांचती, इसलिए जिस लॉग को यह सही बताती है, वह भी dsh अपग्रेड के बाद शायद न खुले। ठीक करने पर कॉपी किसी बैकअप से ली जाती है: उस बैकअप के बाद के संदेश उस चैट से चले जाते हैं (खराब फ़ाइल बगल में रहती है)। इस dsh में खुली चैट सेटिंग में ठीक नहीं की जाती: dsh उसे पकड़े रहता है।
295
312
  - **अपने-आप बैकअप** सिर्फ़ तब चलता है, जब dsh चल रहा हो: dsh बंद रहते समय जिस बैकअप का समय हो गया था, वह अगली बार शुरू होने के लगभग 45 सेकंड बाद चलता है। नए वर्शन का स्नैपशॉट अपडेट से पहले नहीं, बल्कि उस शुरुआत के बाद लिया जाता है।
313
+ - **विंडो का आकार याद रखें** सिर्फ़ डेस्कटॉप ऐप में काम करता है। हर शुरुआत में dsh पहले अपनी विंडो 1280 × 820 पर दिखाता है; प्लगइन लोड होने पर विंडो सेव किए गए आकार पर आ जाती है। पेज में विंडो खिसकाने का कोई इवेंट नहीं होता, इसलिए प्लगइन हर सेकंड विंडो पढ़ता है: dsh बंद होने से पहले के आखिरी 2 सेकंड का बदलाव सेव नहीं होता। आकार हर कंप्यूटर के लिए ऐप के अपने स्टोरेज में रखा जाता है।
314
+ - **उपयोग गिनती:** यह लोगों को नहीं, कॉपियों को गिनती है: हर dsh होम एक कॉपी है। यूनिक कॉपियों की गिनती (`installed.txt`) में सिर्फ़ वे कॉपियाँ आती हैं जो इस फ़ाइल वाले पहले वर्शन या उससे नए वर्शन पर अपडेट होती हैं; पुराने वर्शन पर रुकी कॉपी नहीं गिनी जाती। जिस कॉपी का `storages` फ़ोल्डर मिटाया जाता है, वह फिर से गिनी जाती है। GitHub एक ही IP पते से (जैसे एक NAT राउटर के पीछे के कई कंप्यूटरों से) लगभग 10 मिनट के अंदर आए अनुरोधों को एक गिन सकता है।
296
315
  - बिल्ट-इन सपोर्ट का अनुरोध upstream में किया गया है: कतार के `move` के लिए [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), जारी रखें वाली स्थिति के लिए [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269)।
297
316
 
298
317
  ## अक्सर पूछे जाने वाले सवाल
@@ -331,6 +350,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
331
350
 
332
351
  **क्या मैं अपनी सभी चैट को कानबान बोर्ड की तरह देख सकता हूं और वहीं से नई चैट शुरू कर सकता हूं?** हां, **टास्क बोर्ड** से (डिफ़ॉल्ट रूप से चालू): इसे बाएं साइडबार में खोलें। हर चैट **प्रगति में**, **समीक्षा** (वह आपका इंतज़ार कर रही है) या **पूरा हुआ** में एक कार्ड है। **नया टास्क** प्रोजेक्ट में dsh की नई चैट खोलता है, और आपका पहला संदेश जाने पर बोर्ड लौट आता है; चैट खोले बिना जवाब देने के लिए नारंगी कार्ड पर **जवाब दें** पर क्लिक करें। **पूरा हुआ** में **सब हटाएं** पहले पूछता है और आपके पढ़े हुए खत्म हुए कार्ड बोर्ड से हटाता है; **पहले जैसा करें** और **हटाए गए (N)** उन्हें वापस लाते हैं, और चैट dsh में बनी रहती हैं।
333
352
 
353
+ **क्या मुझे ऐसी निजी असिस्टेंट चैट मिल सकती है जो मुझे याद दिलाए और मेरी दूसरी चैट संभाले?** हां, **असिस्टेंट** से (डिफ़ॉल्ट रूप से बंद): इसे सेटिंग → Composer Plus में चालू करें, फिर बाएं साइडबार में **असिस्टेंट** पर क्लिक करें। यह dsh के शेड्यूल किए गए टास्क से रिमाइंडर सेट करता है, वेब पर खोजता है, आपकी चैट की सूची दिखाता है और उन्हें पढ़ता है, और किसी चैट को संदेश भेजना या चैट शुरू करना, रोकना या आर्काइव करना सिर्फ़ आपकी मंज़ूरी के बाद करता है। अपनी प्रोफ़ाइल इसकी प्रोजेक्ट मेमोरी में, विषय “profil” में रखें।
354
+
334
355
  **क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
335
356
 
336
357
  **dsh अब शुरू नहीं होता। बैकअप कैसे बहाल करें?** बैकअप फ़ोल्डर (`~/Desktop/dsh-backups`) खोलें और `Composer Plus Rescue.command` पर डबल-क्लिक करें (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`)। `3) Restore a backup` चुनें, कोई एक बैकअप चुनें और `RESTORE` टाइप करें। यह dsh के बिना काम करता है।
@@ -363,6 +384,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
363
384
 
364
385
  **लंबे जवाब के केवल एक हिस्से का जवाब कैसे दूं?** वह हिस्सा चुनें और चुने हुए हिस्से के ऊपर **उद्धरण दें** पर क्लिक करें (**जवाब में उद्धरण**, डिफ़ॉल्ट रूप से चालू)। वह हिस्सा `> …` उद्धरण के रूप में इनपुट फ़ील्ड में जाता है, और आप उसके नीचे अपना जवाब लिखते हैं।
365
386
 
387
+ **एजेंट को किसी फ़ाइल की सटीक पंक्तियां कैसे दिखाऊं?** दाएं साइडबार में फ़ाइल खोलें (**वर्कस्पेस फ़ाइलें**), पंक्तियां चुनें और चुने हुए हिस्से के ऊपर **उद्धरण दें** पर क्लिक करें (**फ़ाइल प्रीव्यू से उद्धरण**, डिफ़ॉल्ट रूप से चालू)। इनपुट फ़ील्ड में पाथ और पंक्ति संख्याएं (जैसे `src/login.js:2-3`) और कोड ब्लॉक के रूप में पंक्तियां आ जाती हैं; अपना सवाल उनके नीचे लिखें।
388
+
366
389
  **क्या मैं एजेंट के काम करते समय, उसे रोके बिना, कुछ पूछ सकता हूं?** सवाल लिखें और इनपुट फ़ील्ड में **साइड चैट में पूछें** पर क्लिक करें (**साइड चैट**, डिफ़ॉल्ट रूप से चालू)। चैट की सिर्फ़-पढ़ने वाली कॉपी जवाब देती है, जबकि चैट काम करती रहती है। साइड चैट में **वापस लाएं** जवाब को चैट के इनपुट फ़ील्ड में डालता है।
367
390
 
368
391
  **एजेंट को उसके डिफ़ में क्या बदलना है, यह कैसे बताऊं?** **बदलाव पैनल** में फ़ाइल का डिफ़ खोलें, किसी पंक्ति पर **+** पर क्लिक करें और नोट लिखें (**डिफ़ नोट**, डिफ़ॉल्ट रूप से चालू)। फिर **इनपुट फ़ील्ड में भेजें** पर क्लिक करें: नोट फ़ाइल, पंक्ति संख्याओं और पंक्तियों के साथ इनपुट फ़ील्ड में आ जाते हैं।
@@ -371,7 +394,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
371
394
 
372
395
  **मेरा iPhone खो गया। उसे मेरे Mac तक पहुंचने से कैसे रोकूं?** साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें और उस iPhone के पास **Remove** पर क्लिक करें। उसकी कुंजी तुरंत काम करना बंद कर देती है; वह सिर्फ़ नई पेयरिंग से वापस आ सकता है, जिसे आप Mac पर मंज़ूर करें।
373
396
 
374
- **अपने दूसरे Mac की चैट इस Mac से कैसे जारी रखूं?** दूसरे Mac पर **सेटिंग → Composer Plus → रिमोट कंप्यूटर** और **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें (इसे खुद को भेजें, जैसे AirDrop या नोट्स से)। इस Mac पर भी **रिमोट कंप्यूटर** चालू करें, चैट के शीर्षक के बाईं ओर **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद उस कंप्यूटर को उसी मेनू में चुनें।
397
+ **अपने दूसरे Mac की चैट इस Mac से कैसे जारी रखूं?** दूसरे Mac पर **सेटिंग → Composer Plus → रिमोट कंप्यूटर** और **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें (इसे खुद को भेजें, जैसे AirDrop या नोट्स से)। इस Mac पर भी **रिमोट कंप्यूटर** चालू करें, बाएं साइडबार के पिकर में (ब्रांड नाम के दाईं ओर, **नया सेशन** के ऊपर) **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें, एक **नाम** लिखें और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद उस कंप्यूटर को उसी मेनू में चुनें: वह इस पूरी विंडो में दिखता है। वापस आने के लिए उसी जगह **इस Mac पर वापस जाएं** पर क्लिक करें। इस बीच इस Mac की चैट चलती रहती हैं।
375
398
 
376
399
  **क्या मैं Tether को Face ID से लॉक कर सकता हूं?** हां: Tether में "Settings → Privacy → Lock with Face ID" चालू करें। इसके बाद Tether खुलते समय और जब आप उस पर वापस आते हैं, तब Face ID (या पासकोड) मांगता है।
377
400
 
@@ -403,6 +426,12 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
403
426
 
404
427
  **क्या dsh मॉडल से दोबारा पूछे बिना अगली कमांड चला सकता है?** हाँ, **नियोजित चरण** से (डिफ़ॉल्ट रूप से बंद): इसे सेटिंग → Composer Plus में चालू करें। तब मॉडल अगली कमांड को शर्त के साथ योजना बना सकता है, जैसे “बिल्ड पास होने पर टेस्ट चलाओ”, और नतीजा शर्त पूरी करे तो Composer Plus नई मॉडल कॉल के बिना वह चरण चलाता है। मंज़ूरी और सैंडबॉक्स जैसे थे वैसे ही रहते हैं।
405
428
 
429
+ **तुर्की स्किल कहाँ से आता है, और क्या मैं इसे हटा सकता हूँ?** GitHub पर [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT) से। Composer Plus इसे केवल तब इंस्टॉल करता है जब **ऐप्लिकेशन की भाषा** Türkçe हो, केवल इसकी Markdown फ़ाइलें रखता है और इसकी कोई स्क्रिप्ट नहीं चलाता। इसे हटाने के लिए सेटिंग → Composer Plus में **तुर्की स्किल पैक** बंद करें: स्किल और डाउनलोड की गई कॉपी तुरंत हट जाती हैं।
430
+
431
+ **Composer Plus में बग की रिपोर्ट कैसे करें या कोई सुविधा कैसे मांगें?** सेटिंग → Composer Plus → **इश्यू रिपोर्ट करें…** (या किसी चैट का **…** मेन्यू → **Composer Plus इश्यू रिपोर्ट करें…**)। एक प्रकार चुनें, उसे अपनी भाषा में बताएं और **ड्राफ़्ट लिखें** पर क्लिक करें। अंग्रेज़ी ड्राफ़्ट जांचें, फिर **इश्यू खोलें** पर क्लिक करें।
432
+
433
+ **एजेंट उलझे हुए कोडबेस को कैसे सुधारे?** किसी चैट में `/untangle-codebase` लिखें (**कोडबेस सुलझाएं**, डिफ़ॉल्ट रूप से चालू), चाहें तो कोई हिस्सा भी, जैसे `/untangle-codebase src/api`। एजेंट पहले कॉपी किया गया कोड, छिपे जुड़ाव, बेकार रैपर, बेकार पड़ा कोड और खास मामलों की सूची बनाता है, फिर उन्हें लक्ष्य के रूप में ठीक करता है और सब-एजेंट से दोबारा जाँचता है। इसे **हर चैट की अपनी ब्रांच** वाली चैट में शुरू करें, ताकि काम अपनी ब्रांच पर रहे।
434
+
406
435
  **क्या यह डेस्कटॉप ऐप के साथ काम करता है?** हां: सेटिंग → प्लगइन → **प्लगइन जोड़ें** → `dsh-composer-plus`। dsh 0.2.0-rc.2 (डेस्कटॉप और वेब) और 0.2.1-rc.2 (वेब) पर टेस्ट किया गया।
407
436
 
408
437
  ## डेवलपमेंट
@@ -422,6 +451,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
422
451
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
423
452
  # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
424
453
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
454
+ # Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
455
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
425
456
  # every Settings feature row shows a loading screenshot and a ? link to its README row
426
457
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
427
458
  # What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
@@ -473,6 +504,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
473
504
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
474
505
  # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
475
506
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
507
+ # Assistant: off by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
508
+ SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
476
509
  ```
477
510
 
478
511
  ```sh
@@ -494,3 +527,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
494
527
  ## License
495
528
 
496
529
  MIT
530
+
531
+ `assets/skills/untangle-codebase/SKILL.md` [caldoai/skills](https://github.com/caldoai/skills) की `untangle-codebase` स्किल है, © 2026 Maze, MIT लाइसेंस के तहत ([इसका लाइसेंस](assets/skills/untangle-codebase/LICENSE))।