इस प्रोजेक्ट के बारे में

Ditto खुद को "Semantic CI" के रूप में प्रस्तुत करता है: कंपाइल, टेस्ट और लिंट के साथ एक अतिरिक्त पाइपलाइन प्रश्न — क्या यह कोडबेस किसी ऐसी चीज़ का पुनराविष्कार कर रहा है जिसे वह पहले से जानता है? यह Type-4 क्लोन को लक्षित करता है, वे फ़ंक्शन जो समान व्यवहार करते हैं लेकिन अलग तरह से लिखे गए हैं, जिन्हें टोकन- और AST-आधारित डुप्लिकेट डिटेक्टर आम तौर पर रिपोर्ट नहीं करते हैं। दस्तावेजीकृत पाइपलाइन कैसे काम करती है: बैकएंड एक रिपॉजिटरी टारबॉल डाउनलोड करता है, गैर-निर्यातित फ़ंक्शंस सहित प्रत्येक फ़ंक्शन को निकालने के लिए ts-morph के साथ उसे वॉक करता है, फिर एक सस्ते मॉडल के साथ नाम-ब्लाइंड तरीके से एक-एक करके प्रत्येक फ़ंक्शन का फिंगरप्रिंट लेता है। उन फिंगरप्रिंट्स को — कभी भी कच्चा कोड या नाम नहीं — मेमोरी में कोसाइन सिमिलरिटी द्वारा एम्बेड और क्लस्टर किया जाता है। केवल परिणामी कैंडिडेट क्लस्टर ही निर्णय के लिए एक बड़े मॉडल तक पहुँचते हैं, जो प्रतिकूल इनपुट (adversarial inputs) का भी प्रस्ताव देता है। कार्यात्मक रूप से प्योर फ़ंक्शंस को फिर टाइमआउट के साथ worker_threads सैंडबॉक्स में साथ-साथ निष्पादित किया जाता है, और वहां पुष्टि किए गए विचलन (divergence) को निष्पादित साक्ष्य के रूप में प्रस्तुत किया जाता है; इम्प्योर फ़ंक्शंस को अभी भी क्लस्टर और निर्णायक बनाया जाता है लेकिन उन्हें निष्पादित नहीं, बल्कि प्रेडिक्टेड के रूप में लेबल किया जाता है। परिणाम MongoDB में लिखे जाते हैं और रीड-ओनली एंडपॉइंट्स और Next.js फ्रंटएंड द्वारा सर्व किए जाते हैं; सर्विंग पाथ किसी मॉडल को कॉल नहीं करता है। README पांच रिपॉजिटरी (2,870, 2,654, 336, 31 और 6 फ़ंक्शंस) में रन की रिपोर्ट करता है, जिसमें डुप्लिकेट क्लस्टर, व्यवहारिक संघर्ष और निष्पादन द्वारा सिद्ध 18 मामले सूचीबद्ध हैं, जिसमें cline में truncateText कार्यान्वयन का एक परिवार शामिल है जहाँ एक आरक्षित-स्थान गणना एक निश्चित सीमा से ऊपर रखे गए टेक्स्ट को एक वर्ण तक सीमित कर देती है। यह बताता है कि jscpd उन फ़ाइलों में शून्य क्लोन रिपोर्ट करता है। दो छोटी, अच्छी तरह से अनुरक्षित लाइब्रेरीज़ को क्लीन स्कोर मिला, जिसे लेखक ओवर-रिपोर्टिंग के खिलाफ सबूत के रूप में प्रस्तुत करते हैं। बताई गई सीमाएँ: केवल JavaScript/TypeScript, क्योंकि AST लेयर ts-morph है; निष्पादन के लिए प्योरिटी की आवश्यकता होती है; बड़े रिपॉजिटरी को ट्रंकेट करने के बजाय स्पष्ट रूप से स्कोप किया जाना चाहिए, क्योंकि चुपचाप हटाया गया एक फ़ंक्शन पूरे क्लस्टर को गायब कर सकता है; और टूल यह अनुशंसा नहीं करता है कि दो परस्पर विरोधी कार्यान्वयनों में से किसे रखा जाए, इसे मानवीय निर्णय के रूप में फ्रेम किया गया है। README में लागत और समय के आंकड़े (उदाहरण के लिए 2,870-फ़ंक्शन विश्लेषण के लिए ₹232, और नियोजित Guard चेक के लिए प्रति पुल रिक्वेस्ट लगभग ₹1) प्रोजेक्ट के अपने माप हैं, स्वतंत्र बेंचमार्क नहीं। होस्टेड डेमो ऑन-डिमांड विश्लेषण को 600 फ़ंक्शंस पर सीमित करता है, जिसे मेंटेनर के API क्रेडिट पर सीमा के रूप में वर्णित किया गया है; अपनी स्वयं की कुंजी के साथ स्थानीय रूप से चलाने से यह सीमा हट जाती है। सेटअप नोट्स में MongoDB या API कुंजी के बिना रेपो को इंडेक्स करना, MongoDB, OpenAI और वैकल्पिक GitHub/मॉडल सेटिंग्स के साथ एक .env, 1200-सेकंड अनुरोध टाइमआउट के साथ Cloud Run परिनियोजन, Atlas नेटवर्क एक्सेस, और फ्रंटएंड के लिए Vercel शामिल है जहाँ NEXT_PUBLIC_* मान बिल्ड समय पर इनलाइन होते हैं। एक रोडमैप Ditto Guard को GitHub Action पुल-रिक्वेस्ट चेक, एक MCP टूल जो कोडिंग एजेंटों को डुप्लिकेट लिखने से पहले इंडेक्स क्वेरी करने देता है, tree-sitter के माध्यम से अतिरिक्त भाषाएं, और इंक्रीमेंटल री-इंडेक्सिंग के रूप में सूचीबद्ध करता है। योगदानकर्ताओं को लेबल किए गए 'good first issues' की ओर निर्देशित किया गया है।