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

99 হলো একটি Neovim প্লাগইন যা এজেন্টিক AI ওয়ার্কফ্লো সরাসরি এডিটরে একীভূত করে। এটি Neovim-এর জন্য একটি AI ক্লায়েন্ট হিসেবে বর্ণিত, যার লক্ষ্য প্রোগ্রামারকে প্রতিস্থাপন না করে বর্ধিত করা, এবং এটি স্পষ্টভাবে একটি বিটা পণ্য হিসেবে চিহ্নিত যার API এখনও পরিবর্তিত হতে পারে। মূল ধারণা শুধুমাত্র নির্দিষ্ট কোডের অংশ প্রতিস্থাপনের উপর ফোকাস না করে, প্রকল্পের বিবৃত দিক হলো এজেন্টিক প্রোগ্রামিং এবং তথ্য প্রকাশের দিকে, যেখানে `search` এবং `work` আরও কার্যকর এন্ট্রি পয়েন্ট হিসেবে উপস্থাপিত। লেখক রিপোজিটরিটিকে AI এবং ঐতিহ্যবাহী হ্যান্ড কোডিং মিশ্রিত করার জন্য একটি অনুসন্ধান ক্ষেত্র হিসেবে ফ্রেম করেছেন। সেটআপ কনফিগারেশন একটি প্লাগইন ম্যানেজার স্পেকে Lua `setup` কলের মাধ্যমে করা হয়। বিকল্পগুলির মধ্যে রয়েছে একটি লগার (লেভেল, পাথ, print_on_error), একটি `tmp_dir`, কমপ্লিশন সেটিংস, এবং `md_files` যেমন `AGENT.md` যা স্বয়ংক্রিয়ভাবে উৎস অনুরোধের সাপেক্ষে আবিষ্কৃত হয় এবং প্রসঙ্গ হিসেবে ইনজেক্ট করা হয়। কীম্যাপ ব্যবহারকারী-সংজ্ঞায়িত; README ভিজ্যুয়াল নির্বাচন, অনুরোধ বন্ধ এবং অনুসন্ধানের জন্য উদাহরণ দেখায়। প্রধান API - `setup(opts)` — প্রয়োজনীয় initialization; স্পিনার, ডিফল্ট এবং কমপ্লিশন কনফিগার করে। - `search(opts)` — একটি প্রম্পট সহ প্রজেক্ট-ব্যাপী অনুসন্ধান চালায় এবং নোট সহ অবস্থানগুলো quickfix তালিকায় ফেরত দেয়। - `visual(opts)` — বর্তমান ভিজ্যুয়াল নির্বাচন এবং একটি প্রম্পট পাঠায় এবং ফলাফল দিয়ে নির্বাচন প্রতিস্থাপন করে। - `vibe(opts)` — বর্ণনা ছাড়া তালিকাভুক্ত। - `open()` — শেষ ইন্টারঅ্যাকশনের জন্য একটি নির্বাচন উইন্ডো খোলে, ফলাফল একটি টাইপ-উপযুক্ত ভিউতে দেখায় (search/vibe-এর জন্য quickfix, tutorial-এর জন্য টিউটোরিয়াল উইন্ডো)। - `view_logs()` — সাম্প্রতিক লগ দেখে এবং পুরানো এবং নতুন লগের নেভিগেশন প্রস্তুত করে। - `stop_all_requests()` — চলমান অনুরোধ বন্ধ করে এবং ফলাফল বাতিল করে। - `clear_previous_requests()` — পূর্ববর্তী search এবং visual অপারেশন সাফ করে। - `Extensions` — Worker abstraction প্রকাশ করে। বিকল্প এবং প্রকার README বেশ কয়েকটি বিকল্প টেবিল নথিভুক্ত করে: `_99.Options` (logger, model, in_flight_options, md_files, provider, display_errors, auto_add_skills, completion, tmp_dir), `_99.ops.Opts` (additional_prompt, additional_rules), `_99.ops.SearchOpts`, `_99.WorkOpts` (description), `_99.Completion` (source, custom_rules, files), `_99.InFlight.Opts` (throbber_opts, in_flight_interval, enable), `_99.Logger.Options`, এবং `_99.Agents.Rule` (name, path, absolute_path)। `additional_prompt` ইন্টারঅ্যাক্টিভ ইনপুট ছাড়া চলমান রিম্যাপ সংজ্ঞায়িত করার অনুমতি দেয়, উদাহরণস্বরূপ একটি search যা `make test` চালায় এবং ব্যর্থতা quickfix তালিকায় নির্ণয় করে। `additional_rules` অতিরিক্ত দক্ষতা প্রসঙ্গ ইনজেক্ট করে, যেমন একটি "cloudflare" নিয়ম। কমপ্লিশন প্রম্পট বাফারে, `#` কনফিগার করা নিয়ম ডিরেক্টরি থেকে নিয়ম ফাইল অটোকমপ্লিট করে, এবং `@` gitignored এন্ট্রি বাদ দিয়ে প্রজেক্ট ফাইল ফাজি-সার্চ করে। উল্লেখিত বিষয়বস্তু সমাধান করা হয় এবং AI প্রসঙ্গে ইনজেক্ট করা হয়। নেটিভ কমপ্লিশন ডিফল্ট; nvim-cmp এবং blink.cmp `source = "cmp"` বা `"blink"` এর মাধ্যমে সমর্থিত। প্রোভাইডার একাধিক AI CLI ব্যাকএন্ড সমর্থিত এবং `provider` এর মাধ্যমে নির্বাচিত: OpenCodeProvider (ডিফল্ট, `opencode`, ডিফল্ট মডেল `opencode/claude-sonnet-4-5`), ClaudeCodeProvider (`claude`, `claude-sonnet-4-5`), CursorAgentProvider (`cursor-agent`, `sonnet-4.5`), এবং GeminiCLIProvider (`gemini`, `auto`)। একটি `model` বিকল্প প্রোভাইডার ডিফল্ট ওভাররাইড করতে পারে। README নোট করে যে `tmp_dir` ওয়ার্কিং ডিরেক্টরির বাইরে নির্দেশ করা Claude Code বা OpenCode-এর মতো টুলগুলির সাথে অনুমতি সমস্যা সৃষ্টি করতে পারে। এক্সটেনশন একটি Worker এক্সটেনশন কাজ ট্র্যাক করার একটি স্থায়ী উপায় প্রদান করে: `set_work` একটি কাজের বিবরণ রেকর্ড করে এবং `search` কী বাকি আছে তা খুঁজে পেতে `_99.search` ব্যবহার করে। লেখক নির্দেশ করেন যে এই এলাকাটি সম্ভবত সবচেয়ে বেশি পরিবর্তন দেখবে, সম্ভাব্য ভবিষ্যতের worktree সমর্থন সহ। Telescope এবং fzf-lua এক্সটেনশন রানটাইমে মডেল বা প্রোভাইডার পরিবর্তন করার জন্য পিকার প্রদান করে; প্রোভাইডার পরিবর্তন করলে মডেলটি সেই প্রোভাইডারের ডিফল্টে রিসেট হয়। বাগ রিপোর্টিং README বাগ রিপোর্ট করার সময় সম্পূর্ণ ডিবাগ লগ চায়, যা `:lua require("99").view_logs()` এর মাধ্যমে পাওয়া যায়, এবং সতর্ক করে যে লগে মুদ্রিত ক্যোয়ারিতে গোপনীয়তা থাকতে পারে। ফিচার অনুরোধ স্পষ্টভাবে নিরুৎসাহিত করা হয় পাবলিক আলোচনার পক্ষে।