প্রকল্প সম্পর্কে

Ditto নিজেকে "Semantic CI" হিসেবে উপস্থাপন করে: এটি কম্পাইল, টেস্ট এবং লিন্টের পাশাপাশি একটি অতিরিক্ত পাইপলাইন প্রশ্ন হিসেবে কাজ করে—এই কোডবেস কি এমন কিছু পুনরায় তৈরি করছে যা এটি ইতিমধ্যে জানে? এটি Type-4 ক্লোনগুলোকে লক্ষ্য করে, অর্থাৎ সেই ফাংশনগুলো যা একই আচরণ করে কিন্তু ভিন্নভাবে লেখা হয়েছে, যা সাধারণত টোকেন- এবং AST-ভিত্তিক ডুপ্লিকেট ডিটেক্টরগুলো রিপোর্ট করে না। ডকুমেন্ট করা পাইপলাইনটি যেভাবে কাজ করে: ব্যাকএন্ড একটি রিপোজিটরি টারবল ডাউনলোড করে, ts-morph দিয়ে প্রতিটি ফাংশন (নন-এক্সপোর্ট করা ফাংশনসহ) এক্সট্রাক্ট করে, এবং তারপর একটি সাশ্রয়ী মডেলের মাধ্যমে নাম-অজ্ঞাত উপায়ে প্রতিটি ফাংশনের ফিঙ্গারপ্রিন্ট তৈরি করে। এই ফিঙ্গারপ্রিন্টগুলোকে—কখনোই র কোড বা নাম নয়—মেমোরিতে এমবেড করা হয় এবং কোসাইন সিমিলারিটির মাধ্যমে ক্লাস্টার করা হয়। শুধুমাত্র resulting ক্যান্ডিডেট ক্লাস্টারগুলো বিচার করার জন্য একটি বড় মডেলের কাছে পাঠানো হয়, যা অ্যাডভারসারিয়াল ইনপুটও প্রস্তাব করে। ফাংশনালি পিওর ফাংশনগুলো একটি টাইমআউটসহ worker_threads স্যান্ডবক্সে পাশাপাশি এক্সিকিউট করা হয় এবং সেখানে প্রমাণিত বৈসাদৃশ্যগুলো প্রমাণ হিসেবে উপস্থাপন করা হয়; ইমপিওর ফাংশনগুলো ক্লাস্টার এবং বিচার করা হলেও সেগুলোকে এক্সিকিউটেড নয়, বরং প্রেডিক্টেড হিসেবে লেবেল করা হয়। ফলাফলগুলো MongoDB-তে লেখা হয় এবং রিড-অনলি এন্ডপয়েন্ট ও একটি Next.js ফ্রন্টএন্ডের মাধ্যমে পরিবেশন করা হয়; এই পরিবেশন পথে কোনো মডেল কল করা হয় না। README-তে পাঁচটি রিপোজিটরির (২,৮৭০, ২,৬৫৪, ৩৩৬, ৩১ এবং ৬টি ফাংশন) রান রিপোর্ট করা হয়েছে, যেখানে ডুপ্লিকেট ক্লাস্টার, আচরণগত সংঘাত এবং এক্সিকিউশনের মাধ্যমে প্রমাণিত ১৮টি কেস তালিকাভুক্ত করা হয়েছে। এর মধ্যে cline-এ truncateText ইমপ্লিমেন্টেশনের একটি পরিবার রয়েছে যেখানে একটি রিজার্ভড-স্পেস ক্যালকুলেশন নির্দিষ্ট সীমার উপরে টেক্সটকে একটি ক্যারেক্টারে কমিয়ে দেয়। এতে উল্লেখ করা হয়েছে যে jscpd ওই ফাইলগুলোতে শূন্য ক্লোন রিপোর্ট করে। দুটি ছোট, সু-রক্ষণাবেক্ষণ করা লাইব্রেরি ক্লিন স্কোর পেয়েছে, যা লেখকরা ওভার-রিপোর্টিংয়ের বিরুদ্ধে প্রমাণ হিসেবে উপস্থাপন করেছেন। ঘোষিত সীমাবদ্ধতা: শুধুমাত্র JavaScript/TypeScript, কারণ AST লেয়ারটি ts-morph; এক্সিকিউশনের জন্য পিউরিটি প্রয়োজন; বড় রিপোজিটরিগুলোকে ট্রাঙ্কেট করার পরিবর্তে স্পষ্টভাবে স্কোপ করতে হবে, কারণ একটি নিঃশব্দে বাদ পড়া ফাংশন পুরো ক্লাস্টারকে অদৃশ্য করে দিতে পারে; এবং টুলটি দুটি সংঘাতপূর্ণ ইমপ্লিমেন্টেশনের মধ্যে কোনটি রাখতে হবে তা সুপারিশ করে না, এটিকে মানুষের সিদ্ধান্ত হিসেবে গণ্য করা হয়। README-তে খরচ এবং সময়ের হিসাব (উদাহরণস্বরূপ, ২,৮৭০টি ফাংশন বিশ্লেষণের জন্য ₹২৩২, এবং পরিকল্পিত Guard চেক-এর জন্য প্রতি পুল রিকোয়েস্টে প্রায় ₹১) প্রকল্পের নিজস্ব পরিমাপ, কোনো স্বাধীন বেঞ্চমার্ক নয়। হোস্ট করা ডেমো অন-ডিমান্ড অ্যানালাইসিস ৬০০টি ফাংশনে সীমাবদ্ধ, যা মেইনটেইনারদের API ক্রেডিটের সীমাবদ্ধতা হিসেবে বর্ণনা করা হয়েছে; নিজস্ব কি (key) দিয়ে লোকালি চালালে এই সীমাবদ্ধতা থাকে না। সেটআপ নোটে MongoDB বা API কি ছাড়াই একটি রিপো ইনডেক্স করা, MongoDB, OpenAI এবং ঐচ্ছিক GitHub/মডেল সেটিংসসহ একটি .env ফাইল, ১২০০-সেকেন্ড রিকোয়েস্ট টাইমআউটসহ Cloud Run ডেপ্লয়মেন্ট, Atlas নেটওয়ার্ক অ্যাক্সেস এবং ফ্রন্টএন্ডের জন্য Vercel-এর কথা বলা হয়েছে যেখানে NEXT_PUBLIC_* ভ্যালুগুলো বিল্ড টাইমে ইনলাইন করা হয়। একটি রোডম্যাপে Ditto Guard-কে একটি GitHub Action পুল-রিকোয়েস্ট চেক, একটি MCP টুল যা কোডিং এজেন্টদের ডুপ্লিকেট লেখার আগে ইনডেক্স কুয়েরি করতে দেয়, tree-sitter-এর মাধ্যমে অতিরিক্ত ভাষা এবং ইনক্রিমেন্টাল রি-ইনডেক্সিংয়ের কথা উল্লেখ করা হয়েছে। কন্ট্রিবিউটরদের লেবেলযুক্ত 'good first issues'-এর দিকে নির্দেশ করা হয়েছে।