इस प्रोजेक्ट के बारे में
dsh-sql DSH (DeepSeek Harness) के लिए एक डेटाबेस प्लगइन है, जो एजेंट को डेटाबेस से कनेक्ट और संचालित करने में सक्षम बनाता है। यह छह टूल प्रदान करता है, जो कनेक्शन प्रबंधन, केवल-पढ़ने वाले क्वेरी, लेखन संचालन, स्कीमा अन्वेषण, सांख्यिकी अवलोकन और स्वास्थ्य स्व-जांच को कवर करते हैं।
टूल सूची:
- sql_list: कॉन्फ़िगर किए गए कनेक्शन सूचीबद्ध करता है और कनेक्टिविटी परीक्षण करता है।
- sql_query: केवल-पढ़ने वाला क्वेरी; SELECT/PRAGMA/EXPLAIN/SHOW/DESCRIBE/WITH समर्थन करता है, कीवर्ड व्हाइटलिस्ट का उपयोग करता है और मल्टी-स्टेटमेंट अस्वीकार करता है।
- sql_exec: लेखन संचालन और DDL; मल्टी-स्टेटमेंट स्क्रिप्ट निष्पादित कर सकता है, readOnly स्विच और अनुमोदन गेट द्वारा प्रतिबंधित।
- sql_schema: तालिकाओं की सूची दिखाता है या निर्दिष्ट तालिका की संरचना देखता है; तालिका नाम पहचानकर्ता व्हाइटलिस्ट द्वारा सत्यापित होते हैं।
- sql_stats: तालिकाओं की संख्या, पंक्ति संख्या और डेटाबेस आकार का अवलोकन देता है; क्वेरी विफलताएँ एक-दूसरे से अलग होती हैं।
- sql_health: प्रत्येक कनेक्शन की जीवंतता जाँचता है और सुरक्षा कॉन्फ़िगरेशन देखता है, पासवर्ड प्रदर्शित नहीं करता।
इंजन और कनेक्शन: SQLite Node 22.13+ में निर्मित node:sqlite का उपयोग करता है, शून्य निर्भरता; MySQL mysql2 कनेक्शन पूल का उपयोग करता है; PostgreSQL pg कनेक्शन पूल का उपयोग करता है। कॉन्फ़िगरेशन में कई नामित कनेक्शन घोषित किए जा सकते हैं, जिनमें प्रत्येक के लिए इंजन और कनेक्शन पैरामीटर निर्दिष्ट होते हैं। यदि कॉन्फ़िगरेशन प्रदान नहीं किया गया है, तो डिफ़ॉल्ट रूप से एक :memory: SQLite कनेक्शन दिया जाता है; लेकिन यदि कॉन्फ़िगरेशन मौजूद है और प्रारूप अमान्य है, तो यह त्रुटि देकर लोड करना रोक देता है, चुपचाप मेमोरी डेटाबेस पर फॉलबैक नहीं करता।
सुरक्षा डिज़ाइन:
- शाब्दिक-स्तरीय केवल-पढ़ने की सुरक्षा: sql_query पहले स्ट्रिंग और टिप्पणियाँ हटाकर सत्यापन करता है; data-modifying CTE (WITH…DELETE/UPDATE), SELECT INTO, FOR UPDATE/FOR SHARE, PRAGMA असाइनमेंट और मल्टी-स्टेटमेंट अस्वीकार करता है।
- लेखन अनुमोदन गेट: sql_exec डिफ़ॉल्ट रूप से अनुमोदन पॉप-अप करता है; हेडलेस वातावरण में अनुमोदन चैनल न होने पर निष्पादन अस्वीकार करता है।
- readOnly मोड: लेखन संचालन को पूरी तरह से अक्षम कर सकता है, प्रोडक्शन डेटाबेस के लिए उपयुक्त।
- स्ट्रीमिंग पंक्ति सीमा: SQLite इटरेटर, MySQL Readable, PostgreSQL Query पंक्ति इवेंट से अधिकतम maxRows+1 पंक्तियाँ एकत्र करते हैं; अधिक होने पर truncated चिह्नित किया जाता है; MySQL और PostgreSQL सीमा तक पहुँचने पर उस क्वेरी के समर्पित कनेक्शन को बंद कर देते हैं, सीमा तक न पहुँचने पर कनेक्शन पूल में लौटा देते हैं, जिससे पूर्ण परिणाम मेमोरी में नहीं रहते।
- रद्द करने योग्य निष्पादन: क्वेरी और लेखन संचालन Harness के exec.signal का पालन करते हैं; रद्द करने पर प्रतीक्षा रोक दी जाती है और कार्यरत MySQL/PostgreSQL समर्पित कनेक्शन नष्ट कर दिए जाते हैं।
- बड़े पूर्णांक बिना हानि: bigint JavaScript सुरक्षित पूर्णांक सीमा के भीतर number के रूप में आउटपुट होता है, सीमा से बाहर दशमलव स्ट्रिंग के रूप में, जिससे सटीकता चुपचाप नहीं खोती।
- पहचानकर्ता सत्यापन: तालिका नामों में केवल अक्षर, अंक और अंडरस्कोर की अनुमति है, जिससे स्कीमा इंजेक्शन रोका जाता है।
- गोपनीय कुंजियाँ कॉन्फ़िगरेशन में नहीं रखी जातीं: पासवर्ड DSH_SQL_PASSWORD_<कनेक्शन नाम> पर्यावरण चर के माध्यम से प्रदान किया जा सकता है।
कॉन्फ़िगरेशन आइटम में maxRows (क्वेरी रिटर्न पंक्तियों की ऊपरी सीमा, 1-10000), queryTimeoutMs (एकल क्वेरी टाइमआउट, डिफ़ॉल्ट 60 सेकंड), execTimeoutMs (एकल लेखन संचालन टाइमआउट, डिफ़ॉल्ट 120 सेकंड), readOnly और writeApproval शामिल हैं।
स्थापना विधि dsh plugin --profile web add dsh-sql है, अनइंस्टॉल के बाद Web सेवा को पुनः आरंभ करना आवश्यक है। परियोजना MIT लाइसेंस का उपयोग करती है; विकास के दौरान pnpm install और pnpm test (बिल्ड और पूर्ण परीक्षण सूट, वास्तविक SQLite एकीकरण सहित) का उपयोग किया जाता है। README में बताया गया है कि आधिकारिक @deepseek-ai/dsh@0.1.5-rc.1 और Node 24.16.0 पर सत्यापन किया गया है, जिसमें cordis.patch.yml और dsh.bundle.patch संयुक्त पैकेज मॉडल अपनाया गया है।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.