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

99 एक Neovim प्लगइन है जो एजेंटिक AI वर्कफ़्लो को सीधे एडिटर में एकीकृत करता है। इसे Neovim के लिए एक AI क्लाइंट के रूप में वर्णित किया गया है जिसका उद्देश्य प्रोग्रामर को बदलने के बजाय उसे बढ़ाना है, और इसे स्पष्ट रूप से एक बीटा उत्पाद लेबल किया गया है जिसके APIs अभी भी बदल सकते हैं। मुख्य विचार केवल कोड के विशिष्ट टुकड़ों को बदलने पर ध्यान केंद्रित करने के बजाय, परियोजना की कथित दिशा एजेंटिक प्रोग्रामिंग और सूचना सतहीकरण की ओर है, जिसमें `search` और `work` को अधिक उपयोगी प्रवेश बिंदु के रूप में प्रस्तुत किया गया है। लेखक रिपॉजिटरी को AI को पारंपरिक हाथ से कोडिंग के साथ मिलाने के लिए एक अन्वेषण क्षेत्र के रूप में तैयार करता है। सेटअप कॉन्फ़िगरेशन एक प्लगइन मैनेजर स्पेक में Lua `setup` कॉल के माध्यम से किया जाता है। विकल्पों में एक लॉगर (स्तर, पथ, print_on_error), एक `tmp_dir`, पूर्णता सेटिंग्स, और `md_files` जैसे `AGENT.md` शामिल हैं जो मूल अनुरोध के सापेक्ष स्वचालित रूप से खोजे जाते हैं और संदर्भ के रूप में इंजेक्ट किए जाते हैं। Keymaps उपयोगकर्ता-परिभाषित हैं; README विज़ुअल चयन, अनुरोध रोकने और खोज के लिए उदाहरण दिखाता है। मुख्य API - `setup(opts)` — आवश्यक आरंभीकरण; स्पिनर, डिफ़ॉल्ट और पूर्णता कॉन्फ़िगर करता है। - `search(opts)` — एक प्रॉम्प्ट के साथ प्रोजेक्ट-व्यापी खोज चलाता है और स्थानों को नोट्स के साथ quickfix सूची में लौटाता है। - `visual(opts)` — वर्तमान विज़ुअल चयन और एक प्रॉम्प्ट भेजता है और चयन को परिणाम से बदल देता है। - `vibe(opts)` — बिना विवरण के सूचीबद्ध। - `open()` — अंतिम इंटरैक्शन के लिए एक चयन विंडो खोलता है, परिणामों को प्रकार-उपयुक्त दृश्य में दिखाता है (खोज/vibe के लिए quickfix, ट्यूटोरियल के लिए ट्यूटोरियल विंडो)। - `view_logs()` — हाल के लॉग देखता है और पुराने और नए लॉग के नेविगेशन की तैयारी करता है। - `stop_all_requests()` — चल रहे अनुरोधों को समाप्त करता है और परिणामों को त्याग देता है। - `clear_previous_requests()` — पिछले खोज और विज़ुअल संचालन को साफ़ करता है। - `Extensions` — Worker अमूर्तता को उजागर करता है। विकल्प और प्रकार 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` बिना इंटरैक्टिव इनपुट के चलने वाले रीमैप परिभाषित करने की अनुमति देता है, उदाहरण के लिए एक खोज जो `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()` के माध्यम से प्राप्त किया जा सकता है, और चेतावनी देता है कि लॉग में मुद्रित क्वेरी में रहस्य हो सकते हैं। सार्वजनिक चर्चाओं के पक्ष में फीचर अनुरोधों को स्पष्ट रूप से हतोत्साहित किया जाता है।