इस प्रोजेक्ट के बारे में
jarvis, जिसे PyPI पर jarvis-mcp के रूप में प्रकाशित किया गया है, कोडिंग एजेंटों के लिए एक लोकल-फर्स्ट कोड इंटेलिजेंस लेयर है। यह एक Model Context Protocol (MCP) सर्वर के रूप में आता है जो stdio का उपयोग करता है, जिससे Claude Code, Cursor, Claude Desktop या कोई भी अन्य MCP क्लाइंट पहले से इंडेक्स किए गए रिपॉजिटरी से क्वेरी कर सकता है। इसमें कोई होस्टेड सर्विस, कोई ऑथेंटिकेशन और कोई नेटवर्क डिपेंडेंसी नहीं है: मशीन से बाहर कुछ भी नहीं जाता है।
दोनों हिस्से कैसे फिट होते हैं
प्रोजेक्ट को जानबूझकर एक राइटर और एक रीडर में विभाजित किया गया है जो ठीक एक कॉन्ट्रैक्ट साझा करते हैं, एक लोकल डेटा डायरेक्टरी (डिफ़ॉल्ट रूप से ~/.jarvis)।
- Indexing CLI: jarvis index एक रिपॉजिटरी पाथ लेता है, प्रत्येक समर्थित फ़ाइल के लिए Tree-sitter सिंटैक्स बेसलाइन बनाता है, वैकल्पिक रूप से भाषा के SCIP इंडेक्सर को चलाता है और आउटपुट को SQLite में बदलता है, Zoekt shards और वैकल्पिक एम्बेडिंग्स बनाता है, और फिर सब कुछ एक इम्यूटेबल स्नैपशॉट के रूप में प्रकाशित करता है जिसे एक छोटे करंट पॉइंटर द्वारा चुना जाता है।
- Runtime: jarvis-server लेजी सिंगलटन द्वारा समर्थित टूल्स को stdio पर एक्सपोज़ करता है। पहली खोज पर एक zoekt-webserver स्पॉन किया जाता है और pidfile के माध्यम से प्रोसेस के बीच साझा किया जाता है।
क्वेरीज़ प्रकाशित डेटाबेस को रीड-ओनली खोलती हैं, इसलिए सर्विंग पाथ कभी नहीं लिखता। पब्लिशिंग एटॉमिक है; पुराने फ़ाइल को पढ़ने वाली क्वेरी काम करना जारी रखती है जबकि रीइंडेक्स पॉइंटर को बदल देता है, और किसी भी वैकल्पिक चरण में विफलता पिछले स्नैपशॉट को लाइव रखती है। प्रत्येक रीइंडेक्स उस रिपॉजिटरी के आउटगोइंग पैकेज एडजेस को संचित करने के बजाय उन्हें फिर से बनाता है।
नौ MCP टूल्स
goToDefinition एक सिंबल को उसकी परिभाषित फ़ाइल और रेंज तक हल करता है, जहाँ फ़ाइल में SCIP डेफिनिशन कवरेज होता है वहां SCIP द्वारा और अन्यथा सिंटैक्स बेसलाइन डिक्लेरेशन द्वारा प्रदान किया जाता है, जिसमें प्रत्येक लोकेशन प्रदाता द्वारा टैग किया जाता है। findReferences एक सिंबल के ऑकरेंस की सूची देता है और यह केवल SCIP-ओनली है। callHierarchy इनकमिंग और आउटगोइंग कॉल्स लौटाता है, यह भी SCIP-ओनली है। typeHierarchy सुपरटाइप्स और सबटाइप्स लौटाता है, SCIP-ओनली। documentSymbols एक फ़ाइल में परिभाषित सिंबल्स की रूपरेखा तैयार करता है, जिसे SCIP आउटलाइन और Tree-sitter डिक्लेरेशन के बीच रूट किया जाता है। searchCode वैकल्पिक रिपॉजिटरी फ़िल्टर के साथ Zoekt लेक्सिकल या रेगुलर-एक्सप्रेशन सर्च करता है। semanticSearch एक नेचुरल-लैंग्वेज सर्च है जो रेसिप्रोकल रैंक फ्यूजन का उपयोग करके Zoekt हिट्स और SCIP सिंबल-डेफिनिशन मैच के साथ वेक्टर हिट्स को मिलाता है। blastRadius दिखाता है कि कौन से अन्य इंडेक्स किए गए रिपॉजिटरी किसी पैकेज पर निर्भर हैं, दो हॉप्स तक। getIndexStatus प्रकाशित कमिट, फ्रेशनेस, वर्किंग ट्री के मुकाबले स्टेल्नेस, और प्रति-टूल प्रदाता क्षमताओं की रिपोर्ट करता है।
SCIP-ओनली टूल्स डेटा गायब होने पर चुपचाप खाली परिणाम नहीं लौटाते हैं; वे आवश्यक क्षमता, कारण और रिकवरी हिंट की रिपोर्ट करते हैं। टूल विफलताएं ट्रांसपोर्ट एरर्स के बजाय पेलोड ऑब्जेक्ट्स के रूप में लौटाई जाती हैं, ताकि एक खराब क्वेरी stdio सर्वर को बंद न कर दे।
इंडेक्सिंग और वॉचिंग
कमांड्स में jarvis index, list, status, reindex और forget शामिल हैं, साथ ही वैकल्पिक watchdog एक्स्ट्रा का उपयोग करके डिबाउंस (डिफ़ॉल्ट रूप से पांच सेकंड) के साथ ऑटो-रीइंडेक्सिंग के लिए jarvis watch शामिल है। भाषा का पता एक्सटेंशन प्लुरैलिटी द्वारा git-ट्रैक्ड फ़ाइलों से लगाया जाता है और इसे --language के साथ ओवरराइड किया जा सकता है। स्टेटस वैल्यूज़ indexing, indexed, partial, degraded और failed हैं; एक डिग्रेडेड रन अभी भी सिंटैक्स बेसलाइन प्रकाशित करता है और कारण रिकॉर्ड होने के साथ जीरो के साथ बाहर निकलता है।
आवश्यकताएं और सीमाएं
प्रोजेक्ट स्पष्ट रूप से संकीर्ण होने के बारे में है।
- केवल macOS और Linux; Windows समर्थित नहीं है।
- प्रति रिपॉजिटरी एक भाषा; पॉलीग्लॉट मोनोरिपोस को उस भाषा के रूप में इंडेक्स किया जाता है जिसमें सबसे अधिक ट्रैक की गई फ़ाइलें होती हैं।
- बिल्ड-फ्री Tree-sitter बेसलाइन 17 भाषाओं (Python, JavaScript, TypeScript/TSX, Java, Kotlin, Swift, Go, Ruby, Rust, C, C++, C#, PHP, Scala, Bash, SQL) को कवर करती है और इसे पैकेज की pip डिपेंडेंसी के रूप में इंस्टॉल किया जाता है।
- सटीक SCIP नेविगेशन चार भाषा परिवारों को कवर करता है: TypeScript/TSX, Python, Java/Kotlin और Swift।
- वैकल्पिक SCIP और Zoekt संवर्धन के लिए सेटअप स्क्रिप्ट द्वारा इंस्टॉल किए गए बाहरी बाइनरी की आवश्यकता होती है: scip (न्यूनतम v0.9.0), zoekt-git-index और zoekt-webserver, universal-ctags, scip-typescript, scip-python, scip-swift (केवल macOS arm64) और scip-java (केवल डिटेक्ट, Docker इमेज खींचने से पहले पूछता है)।
- इंडेक्सिंग एक स्पष्ट चरण है; कुछ भी लाइव विश्लेषण नहीं किया जाता है।
- jarvis रीड-ओनली है और कभी कोड एडिट नहीं करता है। README इसे Serena के पूरक के रूप में रखता है, जो सिमेंटिक रीनेम्स और रिफैक्टर्स को संभालता है।
सर्च और कॉन्फ़िगरेशन
semanticSearch के लिए वैकल्पिक सिमेंटिक एक्स्ट्रा (lancedb और sentence-transformers) की आवश्यकता होती है और यह लेक्सिकल परिणामों के साथ Tree-sitter-चंक किए गए कोड पर वेक्टर सर्च को मिलाता है। सिमेंटिक इंडेक्सिंग .gitignore का सम्मान करती है, 1 MB से अधिक की फ़ाइलों और जनरेटेड-फ़ाइल ह्यूरिस्टिक्स को छोड़ देती है, जिन्हें एक include फ़्लैग ओवरराइड कर सकता है। एनवायरनमेंट वेरिएबल्स डेटा डायरेक्टरी और एम्बेडिंग क्वेरी/डॉक्यूमेंट इंस्ट्रक्शन प्रीफिक्स को कवर करते हैं, जिसमें bge-m3, e5 और nomic-embed मॉडल के लिए ऑटो-डिटेक्शन होता है।
README ज्ञात अपस्ट्रीम SCIP सीमाओं (टाइप पदानुक्रमों के लिए घोषित लेकिन बिना लिखे संबंध डेटा, बैकफिल्ड डिस्प्ले नाम और प्रकार, scip-java की Android/Gradle रिपोस को इंडेक्स करने में असमर्थता, Kotlin के लिए सटीक कंपाइलर वर्जन मैच की आवश्यकता, और Maven-आधारित Java बिल्ड्स के लिए एक bash वर्जन आवश्यकता) का दस्तावेजीकरण भी करता है और उन्हें jarvis बग्स के बजाय अंतर्निहित टूलिंग के व्यवहार के रूप में मानता है। प्लगइन के साथ तीन Claude Code एजेंट स्किल्स आते हैं: jarvis-setup, jarvis-use और jarvis-issues। प्रोजेक्ट MIT लाइसेंस प्राप्त है, और इसका टेस्ट सूट pytest के साथ चलाया जाता है, जिसमें वास्तविक इंडेक्सर बाइनरीज़ को शेल आउट करने वाले इंटीग्रेशन टेस्ट अलग से चिह्नित हैं।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.