منصوبے کے بارے میں
jarvis، جسے PyPI پر jarvis-mcp کے نام سے شائع کیا گیا ہے، کوڈنگ ایجنٹس کے لیے ایک لوکل-فرسٹ کوڈ انٹیلیجنس لیئر ہے۔ یہ ایک Model Context Protocol (MCP) سرور کے طور پر فراہم کیا جاتا ہے جو stdio کے ذریعے بات چیت کرتا ہے، تاکہ Claude Code، Cursor، Claude Desktop یا کوئی بھی دوسرا MCP کلائنٹ پہلے سے انڈیکس شدہ ریپوزٹری سے معلومات حاصل کر سکے۔ اس میں کوئی ہوسٹڈ سروس، کوئی تصدیق (authentication) اور نیٹ ورک پر کوئی انحصار نہیں ہے: کچھ بھی مشین سے باہر نہیں جاتا۔
دونوں حصے کیسے مل کر کام کرتے ہیں
اس پروجیکٹ کو جان بوجھ کر ایک رائٹر (writer) اور ایک ریڈر (reader) میں تقسیم کیا گیا ہے جو صرف ایک معاہدے، یعنی ایک مقامی ڈیٹا ڈائریکٹری (بائی ڈیفالٹ ~/.jarvis) کو شیئر کرتے ہیں۔
- Indexing CLI: jarvis index ایک ریپوزٹری پاتھ لیتا ہے، ہر سپورٹڈ فائل کے لیے Tree-sitter سنٹیکس بیس لائن بناتا ہے، اختیاری طور پر زبان کے SCIP انڈیکسر کو چلاتا ہے اور آؤٹ پٹ کو SQLite میں تبدیل کرتا ہے، Zoekt shards اور اختیاری ایمبیڈنگز بناتا ہے، اور پھر سب کچھ ایک immutable snapshot کے طور پر شائع کرتا ہے جسے ایک چھوٹے کرنٹ پوائنٹر کے ذریعے منتخب کیا جاتا ہے۔
- Runtime: jarvis-server stdio کے ذریعے ٹولز فراہم کرتا ہے، جس کی پشت lazy singletons ہیں۔ پہلی سرچ پر ایک zoekt-webserver شروع کیا جاتا ہے اور pidfile کے ذریعے پراسیسز کے درمیان شیئر کیا جاتا ہے۔
کوئریز شائع شدہ ڈیٹا بیس کو صرف پڑھنے (read-only) کے لیے کھولتی ہیں، اس لیے سرونگ پاتھ کبھی لکھتا نہیں ہے۔ پبلشنگ ایٹامک ہے؛ پرانی فائل پڑھنے والی کوئری کام کرتی رہتی ہے جب تک کہ reindex پوائنٹر کو تبدیل نہ کر دے، اور کسی بھی اختیاری مرحلے میں ناکامی کی صورت میں پچھلا snapshot فعال رہتا ہے۔ ہر reindex اس ریپوزٹری کے آؤٹ گوئنگ پیکیج ایجز (package edges) کو جمع کرنے کے بجائے دوبارہ بناتا ہے۔
نو MCP ٹولز
goToDefinition کسی سمبل کو اس کی تعریف کرنے والی فائل اور رینج تک پہنچاتا ہے، جو SCIP کے ذریعے فراہم کیا جاتا ہے جہاں فائل میں SCIP تعریف کی کوریج ہو، ورنہ سنٹیکس بیس لائن ڈیک্লারیشن کے ذریعے، اور ہر لوکیشن کو فراہم کنندہ (provider) کے ذریعے ٹیگ کیا جاتا ہے۔ findReferences کسی سمبل کے تمام مواقع کی فہرست بناتا ہے اور یہ صرف SCIP کے لیے ہے۔ callHierarchy آنے والی اور جانے والی کالز واپس کرتا ہے، یہ بھی صرف SCIP کے لیے ہے۔ typeHierarchy سپر ٹائپس اور سب ٹائپس واپس کرتا ہے، صرف SCIP کے لیے۔ documentSymbols ایک فائل میں تعریف شدہ سمبلز کا خاکہ پیش کرتا ہے، جسے فائل کے مطابق SCIP آؤٹ لائن اور Tree-sitter ڈیک্লারیشنز کے درمیان تقسیم کیا جاتا ہے۔ searchCode Zoekt لیکسیکل یا ریگولر ایکسپریشن سرچ کرتا ہے جس میں اختیاری ریپوزٹری فلٹر ہوتا ہے۔ semanticSearch ایک قدرتی زبان کی سرچ ہے جو reciprocal rank fusion کا استعمال کرتے ہوئے ویکٹر ہٹس کو Zoekt ہٹس اور SCIP سمبل-ڈیفینیشن میچز کے ساتھ ملا دیتی ہے۔ blastRadius دکھاتا ہے کہ کون سی دوسری انڈیکس شدہ ریپوزٹریز کسی پیکیج پر منحصر ہیں، دو ہپس تک۔ getIndexStatus شائع شدہ کمٹ، تازگی، ورکنگ ٹری کے مقابلے میں پرانی حالت، اور فی ٹول فراہم کنندہ کی صلاحیتوں کی رپورٹ کرتا ہے۔
SCIP-only ٹولز ڈیٹا موجود نہ ہونے پر خاموشی سے خالی نتائج واپس نہیں کرتے؛ وہ مطلوبہ صلاحیت، وجہ اور ریکوری ہنٹ کی رپورٹ کرتے ہیں۔ ٹول کی ناکامیاں ٹرانسپورٹ ایررز کے بجائے پے لوڈ آبجیکٹس کے طور پر واپس کی جاتی ہیں، تاکہ ایک غلط کوئری stdio سرور کو بند نہ کر دے۔
انڈیکسنگ اور واچنگ
کمانڈز میں jarvis index, list, status, reindex اور forget شامل ہیں، پلس jarvis watch جو اختیاری watchdog ایکسٹرا کا استعمال کرتے ہوئے ڈی باؤنس (بائی ڈیفالٹ پانچ سیکنڈ) کے ساتھ آٹو-ری انڈیکسنگ کرتا ہے۔ زبان کا پتہ git-tracked فائلوں سے ایکسٹینشن کی اکثریت کے ذریعے لگایا جاتا ہے اور اسے --language کے ذریعے تبدیل کیا جا سکتا ہے۔ اسٹیٹس ویلیوز indexing, indexed, partial, degraded اور failed ہیں؛ ایک degraded رن اب بھی سنٹیکس بیس لائن شائع کرتا ہے اور وجہ ریکارڈ کرتے ہوئے زیرو کے ساتھ ایگزٹ کرتا ہے۔
ضروریات اور حدود
پروجیکٹ واضح طور پر محدود ہے:
- صرف macOS اور Linux کے لیے؛ Windows سپورٹڈ نہیں ہے۔
- فی ریپوزٹری ایک زبان؛ پولی گلاٹ مونو ریپوز (polyglot monorepos) کو اس زبان کے طور پر انڈیکس کیا جاتا ہے جس کی ٹریکڈ فائلیں سب سے زیادہ ہوں۔
- بلڈ-فری 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 کے لیے اختیاری semantic ایکسٹرا (lancedb اور sentence-transformers) کی ضرورت ہوتی ہے اور یہ Tree-sitter-chunked کوڈ پر ویکٹر سرچ کو لیکسیکل نتائج کے ساتھ ملا دیتا ہے۔ سیمیٹک انڈیکسنگ .gitignore کا احترام کرتی ہے، 1 MB سے بڑی فائلوں اور جنریٹڈ-فائل ہیورسٹکس کو چھوڑ دیتی ہے، جن سب کو include فلیگ کے ذریعے اوور رائیڈ کیا جا سکتا ہے۔ انوائرمنٹ ویری ایبلز ڈیٹا ڈائریکٹری اور ایمبیڈنگ کوئری/ڈاکیومنٹ انسٹرکشن پری فکسز کو کور کرتے ہیں، جس میں bge-m3, e5 اور nomic-embed ماڈلز کے لیے آٹو-ڈیٹیکشن شامل ہے۔
README اپ اسٹریم SCIP کی معلوم حدود کی بھی دستاویز کرتا ہے (ٹائپ ہائیرارکیز کے لیے اعلان شدہ لیکن غیر تحریری ریلیشن شپ ڈیٹا، بیک فلڈ ڈسپلے نام اور کائنڈز، scip-java کی Android/Gradle ریپوز کو انڈیکس کرنے میں ناکامی، Kotlin کے لیے درست کمپائلر ورژن میچ کی ضرورت، اور Maven-based 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.