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

Vole হলো AI কোডিং এজেন্টদের জন্য একটি local-first ব্যবহার, খরচ এবং অ্যানোমালি মনিটর। এটি এমন পরিস্থিতির জন্য তৈরি যেখানে একাধিক এজেন্ট পাশাপাশি চলে, যার প্রত্যেকে স্বাধীনভাবে টোকেন খরচ করে এবং কোনোটিই সমস্যা হলে (যেমন টুল লুপে আটকে যাওয়া, ত্রুটিপূর্ণ API-তে বারবার চেষ্টা করা, বা একই বড় কনটেক্সট বারবার পড়া) সংকেত দেয় না। অন্যান্য টুল যেখানে "আমি কত খরচ করেছি?" এই প্রশ্নের উত্তর দেয়, Vole সেখানে প্রশ্ন করে "বর্তমানে কি কিছু ভুল হচ্ছে?" এবং খরচের হিসাবটি একটি পার্শ্বপ্রতিক্রিয়া হিসেবে রিপোর্ট করে। ডেটা হ্যান্ডলিং Vole সেই লগ ফাইলগুলো পড়ে যা টুলগুলো ইতিমধ্যে ডিস্কে লিখে রাখে — যেমন Claude Code-এর জন্য ~/.claude/projects/**/*.jsonl, OpenCode-এর জন্য ~/.local/share/opencode/opencode.db, Codex CLI-এর জন্য ~/.codex/sessions/**/rollout-*.jsonl, Grok CLI-এর জন্য ~/.grok/logs/unified.jsonl, এবং Cursor, Devin ও Antigravity-এর লোকাল স্টোর — এবং সেগুলোকে একটি একক স্কিমাতে নরমালাইজ করে। সবকিছু লোকালি চলে: কোনো স্ক্র্যাপিং, ক্লাউড API, লগইন নেই এবং কোনো প্রম্পট বা টুল কন্টেন্ট সংরক্ষণ করা হয় না। শুধুমাত্র নোটিফিকেশনের জন্য ঐচ্ছিক অনুমতি চাওয়া হয় যাতে গুরুতর ঘটনার সময় অ্যালার্ট দেওয়া যায়। সমর্থিত টুল এবং ফিডেলিটি পলিসি টুলভেদে কভারেজ ভিন্ন হয়: Claude Code এবং OpenCode সঠিক টোকেন এবং খরচ প্রদান করে; Codex CLI এবং Grok CLI সঠিক টোকেন দেয় তবে তাদের প্রকাশিত রেট নেই; Cursor, Devin এবং Antigravity লোকালি কোনো টোকেন রেকর্ড করে না, তাই তারা শুধুমাত্র অ্যাক্টিভিটি হিসেবে কভার করা হয়। প্রজেক্টের পলিসি অনুযায়ী কোনো "অনুমান করা" (estimated) টিয়ার নেই — টোকেন কাউন্ট হয় সরাসরি টুলের লগ থেকে পড়া হয় অথবা অনুপস্থিত থাকে। কোড লাইন থেকে Cursor টোকেন অনুমানের বিষয়টি বিবেচনা করা হয়েছিল এবং স্পষ্টভাবে প্রত্যাখান করা হয়েছে। অ্যাপটি একটি মেনু-বার আইটেম লাইভ টোকেন, খরচ অথবা শুধু আইকন দেখায়, যা কোনো ইনসিডেন্ট খোলা থাকলে রঙিন হয়ে থাকে। এতে ক্লিক করলে একটি প্যানেল খোলে যেখানে প্রধান পরিসংখ্যান, একটি স্পার্কলাইন এবং টুল-ভিত্তিক বার থাকে; একটি ড্যাশবোর্ড পূর্ণাঙ্গ ভিউ প্রদান করে। এর বিশেষ বৈশিষ্ট্য হলো একটি ইনসিডেন্ট-অ্যানোটেটেড টাইমলাইন যা টুল প্রতি টোকেন স্ট্যাক করে এবং হোভার করলে সেই বাকেটের নাম, টোকেন এবং ঘটে যাওয়া ইনসিডেন্টগুলো দেখায়। অ্যাপটি নিজস্ব কালেক্টর এমবেড করে, নিজেই তা চালু করে এবং ইন-প্লেস আপডেট হয়। একটি চেকসামযুক্ত আর্কাইভ রিলিজ এক-ক্লিক ইনস্টল অফার করে যা বান্ডেল পরিবর্তনের আগে প্রকাশিত SHA-256 যাচাই করে। কমান্ড লাইন এবং MCP অ্যাপের পাশাপাশি Vole একই ডেটার ওপর টার্মিনাল কমান্ড প্রদান করে: pnpm top (লাইভ সেশন, কনটেক্সট বনাম উইন্ডো, প্রতি মিনিটে টোকেন, ক্যাশ কাউন্টডাউন), pnpm digest (রেঞ্জ এবং JSON অপশনসহ একটি মার্কডাউন এজেন্ট-ব্যবহারের সারাংশ), pnpm pr (PR ডেসক্রিপশনের জন্য বর্তমান ব্রাঞ্চের ব্যবহার), pnpm statusline, এবং pnpm mcp, যা একটি stdio MCP সার্ভার। এই MCP সার্ভার vole_summary, vole_live_sessions, vole_session, vole_incidents, vole_breakdown, vole_whatif এবং vole_digest এক্সপোজ করে, যাতে একজন এজেন্ট জানতে পারে তার নিজস্ব সেশনের খরচ কত হয়েছে বা Vole তাকে ফ্ল্যাগ করেছে কি না। অ্যানোমালি রুলস পাঁচটি রুল দেওয়া হয়েছে: billable_burn_spike (১০ মিনিটের উইন্ডোতে সেশনের সাধারণ উইন্ডোর চেয়ে ৩ গুণের বেশি খরচ), repeat_call_loop (আউটপুট স্থির থাকা অবস্থায় ৫ মিনিটে ৪৫+ কল), error_storm (১৫ মিনিটে অন্তত ৫টি এররসহ ২০% এর বেশি এরর রেশিও), rate_limit_pressure (Codex-এর কোটার ৮০% এর বেশি ব্যবহৃত হওয়া) এবং context_pressure (একটি কলে মডেলের কনটেক্সট উইন্ডোর অন্তত ৮০% ব্যবহৃত হওয়া)। কস্ট মডেল খরচ হলো লিস্ট প্রাইসে সমতুল্য API ভ্যালু — অর্থাৎ API-এর মাধ্যমে ব্যবহার করলে কত খরচ হতো। UI-তে উল্লেখ করা থাকে যে সাবস্ক্রিপশন প্ল্যানগুলো প্রতি টোকেন হিসেবে বিল করা হয় না। রেটগুলো packages/core/src/data/pricing.json-এ থাকে এবং একটি লোকাল ~/.vole/pricing.json এর ওপর মার্জ করা যায় যাতে রিলিজ ছাড়াই নতুন মডেল যোগ করা যায়। অজানা মডেলের ক্ষেত্রে NULL রিটার্ন করে, কখনো 0 নয়। ভেরিফিকেশন এবং টেস্টিং প্রজেক্টটি রুলস, কুয়েরি এবং কনফিডেন্স ইনভ্যারিয়েন্টের ইউনিট টেস্টের জন্য pnpm test এবং pnpm verify প্রদান করে, যা প্রতিটি সংরক্ষিত রো-কে তার নিজস্ব সোর্স রেকর্ডের সাথে একটি স্বাধীনভাবে পুনরায় বাস্তবায়িত কস্ট ফর্মুলা ব্যবহার করে মিলিয়ে দেখে। pnpm seed কমান্ডটি 'seed' ট্যাগযুক্ত ৩০ দিনের সিন্থেটিক হিস্ট্রি লেখে, যা লাইভ ডেটা থেকে আলাদাভাবে চার্ট করা হয়। বিল্ডিং এবং সীমাবদ্ধতা সোর্স থেকে বিল্ড করতে Node 22+, pnpm এবং Xcode 26 প্রয়োজন, যা macOS 26 arm64-এ টেস্ট করা হয়েছে। সীমাবদ্ধতাগুলোর মধ্যে রয়েছে লোকাল টোকেন রেকর্ড না করা টুলগুলোর জন্য অগভীর কভারেজ, is_error শুধুমাত্র API এরর কভার করায় error_storm কম গণনা করতে পারে, এবং Antigravity-এর জন্য ফাইল mtimes-এর ওপর ভিত্তি করে আনুমানিক টাইমিং। প্রজেক্টটি MIT লাইসেন্সপ্রাপ্ত এবং কন্ট্রিবিউশন স্বাগত জানায়, যার দুটি রিভিউ রুল হলো: কখনো কোনো সংখ্যা উদ্ভাবন করা যাবে না এবং প্রতিটি কালেক্টর অবশ্যই আইডেমপোটেন্ট হতে হবে।