# Octocode 0.14.0: स्ट्रक्चरल सर्च बदल देता है कि AI आपके कोड को कैसे समझता है

> AST-संचालित पैटर्न मैचिंग जो कोड सिंटैक्स को समझती है, सिर्फ़ कैरेक्टर नहीं। Octocode में बिल्ट-इन — कोई अतिरिक्त टूल नहीं, कोई कॉन्फ़िगरेशन फ़ाइलें नहीं, बस `octocode grep`।

आप Rust कोडबेस में हर `.unwrap()` कॉल खोज रहे हैं क्योंकि आप आख़िरकार उचित एरर हैंडलिंग की ओर माइग्रेट कर रहे हैं। आप grep करते हैं। आपको 47 परिणाम मिलते हैं।

बारह कमेंट्स में हैं (`// don't unwrap here`)। आठ स्ट्रिंग्स में हैं (`"call unwrap() to extract"`)। तीन वेरिएबल नाम हैं (`let unwrap_result = ...`)। असली मेथड कॉल्स जो आप चाहते थे? शोर में दबी हुई।

टेक्स्ट सर्च कैरेक्टर खोजती है, अर्थ नहीं। यह मेथड कॉल को कमेंट से, वेरिएबल को स्ट्रिंग लिटरल से, Rust को Ruby से नहीं पहचान सकती। यह बस बाइट्स मैच करती है।

**Octocode 0.14.0 इसे ठीक करता है।** स्ट्रक्चरल सर्च — AST-संचालित पैटर्न मैचिंग जो वास्तव में आपके कोड को समझती है। ऐसे grep के बारे में सोचें जो जानता है कि वह क्या देख रहा है। इंस्टॉल करने के लिए कोई अतिरिक्त टूल नहीं। लड़ने के लिए कोई कॉन्फ़िग फ़ाइलें नहीं। बस `octocode grep` और आप स्ट्रक्चर मैच कर रहे हैं, स्ट्रिंग्स नहीं।

---

## क्यों टेक्स्ट सर्च अधूरी है

टेक्स्ट सर्च कोड को किसी भी अन्य टेक्स्ट फ़ाइल की तरह मानती है। यह नहीं समझती कि `$VAR.unwrap()` को Result या Option पर एक वास्तविक मेथड कॉल से मेल खाना चाहिए — न कि किसी डॉक्यूमेंटेशन कमेंट में छिपी सबस्ट्रिंग से।

स्ट्रक्चरल सर्च अंतर जानती है। यह Abstract Syntax Tree पर काम करती है — वही प्रतिनिधित्व जो आपका कंपाइलर इस्तेमाल करता है — इसलिए पैटर्न वास्तविक कोड स्ट्रक्चर से मेल खाते हैं, कैरेक्टर अनुक्रमों से नहीं।

आप वही पाते हैं जो आप खोज रहे हैं। फ़ॉल्स पॉज़िटिव नहीं। शोर नहीं। बस वह कोड जो मायने रखता है।

---

## मिलिए `octocode grep` से

```bash
# Rust में सभी unwrap() कॉल्स खोजें
octocode grep '$VAR.unwrap()' --lang rust

# JavaScript में कंस्ट्रक्टर पैटर्न खोजें
octocode grep 'new $CLASS($$$ARGS)' --lang javascript

# Go में एरर हैंडलिंग पैटर्न खोजें
octocode grep 'if err != nil { $$$ }' --lang go
```

पैटर्न सिंटैक्स सरल है:

- `$VAR` — कोई भी एकल AST नोड (एक्सप्रेशन, आइडेंटिफ़ायर, जो भी हो)
- `$$$ARGS` — शून्य या अधिक नोड्स (फ़ंक्शन आर्ग्युमेंट्स, स्टेटमेंट ब्लॉक्स)
- लिटरल कोड — सटीक स्ट्रक्चर मैच

**13 भाषाएँ समर्थित:** Rust, JavaScript, TypeScript, Python, Go, Java, C/C++, PHP, Ruby, Lua, Bash, CSS, JSON।

---

## रीराइट क्षमता

यहाँ यह दिलचस्प हो जाता है। स्ट्रक्चरल सर्च केवल खोजने के लिए नहीं है — यह रीफैक्टरिंग के लिए है।

```bash
# प्रीव्यू: अपने कोडबेस में unwrap() को expect() से बदलें
octocode grep '$FUNC.unwrap()' \
  --lang rust \
  --rewrite '$FUNC.expect("reason")'

# परिवर्तनों को इन-प्लेस लागू करें
octocode grep '$FUNC.unwrap()' \
  --lang rust \
  --rewrite '$FUNC.expect("reason")' \
  --update-all
```

`--rewrite` टेम्पलेट आपके सर्च पैटर्न से मेटावेरिएबल्स का उपयोग करता है। रीराइट में `$FUNC` को जो भी सर्च में `$FUNC` से मेल खाता है उससे बदल दिया जाता है। सर्जिकल रीफैक्टरिंग — सटीक, स्वचालित और सुरक्षित।

**यह AI के लिए क्यों मायने रखता है:** जब Claude या Cursor सुझाव देता है कि "हमें इन सभी unwrap कॉल्स को उचित एरर हैंडलिंग से बदलना चाहिए", तो अब वह _वास्तव में ऐसा कर सकता है_ — सिर्फ़ बदलाव का वर्णन नहीं, बल्कि उसे होने के लिए सटीक कमांड जनरेट कर सकता है।

---

## AI एजेंट्स के लिए बना (कोई अतिरिक्त सेटअप नहीं)

स्ट्रक्चरल सर्च को `structural_search` नामक एक MCP टूल के रूप में उजागर किया गया है। आपका AI असिस्टेंट इसे सीधे इस्तेमाल कर सकता है:

```json
{
	"name": "structural_search",
	"description": "AST-based structural code search using ast-grep patterns"
}
```

अन्य AST सर्च टूल्स को अलग इंस्टॉलेशन और कॉन्फ़िगरेशन की आवश्यकता होती है। Octocode की स्ट्रक्चरल सर्च तुरंत काम करती है। इंस्टॉल करने के लिए कोई `sg` CLI नहीं। कोई रूल फ़ाइलें नहीं। कोई YAML नहीं। पैटर्न सीधे क्वेरी में जाता है।

AI एजेंट्स कम मूविंग पार्ट्स के साथ सबसे अच्छा काम करते हैं। हर बाहरी निर्भरता एक विफलता बिंदु है। हर कॉन्फ़िग फ़ाइल घर्षण है। Octocode में स्ट्रक्चरल सर्च बस... वहाँ है। तैयार।

---

## 0.14.0 में और क्या नया है

### एकीकृत सर्च आर्किटेक्चर

हमने सर्च सिस्टम को शुरू से फिर से लिखा। ब्रांच-अवेयर डेल्टा इंडेक्सिंग का मतलब है कि फ़ीचर ब्रांच पर सर्च करना अब परिणामों को मुख्य इंडेक्स के साथ सही ढंग से मर्ज करता है — आप अपनी वर्तमान ब्रांच में जो है वह देखते हैं _साथ ही_ main से प्रासंगिक संदर्भ। एकीकृत आर्किटेक्चर वहाँ टेस्ट कवरेज भी लाता है जहाँ पहले कुछ नहीं था।

### अधिक एम्बेडिंग मॉडल

**MPNet** और **JinaBERT QK** एम्बेडिंग्स के लिए समर्थन जोड़ा — उच्च-प्रदर्शन वाले मॉडल जो अपने वज़न वर्ग से ऊपर वार करते हैं। API लागत पर नज़र रखने वाली टीमों के लिए, ये आपको छोटे, तेज़ मॉडल्स के साथ गुणवत्तापूर्ण सर्च परिणाम देते हैं।

### MCP सर्वर सुधार

- **उन्नत टूल स्कीमा** — AI उपभोग के लिए बेहतर संरचित आउटपुट
- **स्वचालित रिपॉज़िटरी इंडेक्सिंग** — MCP सर्वर अब बिना-इंडेक्स वाले रिपॉज़िटरीज़ का पता लगाने पर स्वचालित रूप से इंडेक्सिंग को ट्रिगर कर सकता है
- **बेहतर ट्रांसपोर्ट लेयर** — बेहतर स्थिरता के लिए आधिकारिक `rmcp` SDK पर माइग्रेट किया गया

### स्केल पर विश्वसनीयता

- **सख्त संरचित LLM आउटपुट** — मान्यता के साथ JSON मोड सुनिश्चित करता है कि AI प्रतिक्रियाएँ सही ढंग से पार्स हों
- **स्वचालित पुनः प्रयास** — बैच ऑपरेशन क्षणिक विफलताओं पर पुनः प्रयास करते हैं
- **बेहतर बैच प्रोसेसिंग** — बड़े कोडबेस के लिए सुधरी हुई मेमोरी दक्षता

### Clear कमांड्स को अधिक शक्ति

`clear` कमांड अब लक्षित सफाई का समर्थन करता है:

```bash
# केवल कमिट इंडेक्स साफ़ करें
octocode clear --mode commits

# केवल GraphRAG डेटा साफ़ करें
octocode clear --mode graphrag
```

---

## अभी आज़माएँ

0.14.0 में अपडेट करें:

```bash
# Homebrew
brew upgrade octocode

# या यूनिवर्सल इंस्टॉलर के साथ पुनः इंस्टॉल करें
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh
```

फिर अपने कोडबेस पर स्ट्रक्चरल सर्च आज़माएँ:

```bash
# रीफैक्टर करने योग्य पैटर्न खोजें
octocode grep 'console.log($ARG)' --lang javascript

# एरर हैंडलिंग अंतराल की जाँच करें
octocode grep '$VAR.unwrap()' --lang rust

# कंस्ट्रक्टर इंजेक्शन पैटर्न खोजें
octocode grep 'new $CLASS($$$)' --lang typescript
```

---

## अक्सर पूछे जाने वाले प्रश्न

**स्ट्रक्चरल सर्च को regex से अलग क्या बनाता है?**

Regex कैरेक्टर मैच करता है। स्ट्रक्चरल सर्च AST नोड्स मैच करती है। `$VAR.unwrap()` वास्तविक मेथड कॉल्स खोजता है, उस स्ट्रिंग वाले कमेंट्स नहीं, ऐसे वेरिएबल नाम नहीं जिनमें संयोग से "unwrap" शामिल हो, डॉक्यूमेंटेशन उदाहरण नहीं। यह कोड स्ट्रक्चर को समझता है क्योंकि यह कोड को उसी तरह पार्स करता है जैसे आपका कंपाइलर करता है।

**क्या मुझे कुछ और इंस्टॉल करने की ज़रूरत है?**

नहीं। स्ट्रक्चरल सर्च Octocode 0.14.0 में बिल्ट-इन है। कोई अलग CLI टूल्स नहीं, कोई कॉन्फ़िगरेशन फ़ाइलें नहीं, कोई YAML रूल परिभाषाएँ नहीं। `octocode grep` कमांड अपग्रेड के तुरंत बाद काम करता है।

**क्या मैं इसका उपयोग Claude, Cursor, या अन्य AI असिस्टेंट के साथ कर सकता हूँ?**

हाँ। स्ट्रक्चरल सर्च को MCP टूल के रूप में उजागर किया गया है। कोई भी MCP-संगत असिस्टेंट इसे सीधे कॉल कर सकता है। टूल स्कीमा में पैटर्न भाषा शामिल है, इसलिए AI असिस्टेंट समझते हैं कि वैध क्वेरीज़ कैसे बनाई जाएँ।

**कौन सी भाषाएँ समर्थित हैं?**

Rust, JavaScript, TypeScript, Python, Go, Java, C/C++, PHP, Ruby, Lua, Bash, CSS, और JSON। अंतर्निहित इंजन Tree-sitter ग्रामर का उपयोग करता है, इसलिए यदि आपको सूची में नहीं है तो नई भाषाएँ जोड़ना सीधा-सादा है।

**`--rewrite` कैसे काम करता है?**

रीराइट टेम्पलेट आपके सर्च पैटर्न से मेटावेरिएबल्स का उपयोग करता है। यदि आपकी सर्च `$FUNC.unwrap()` है और यह `result.unwrap()` से मेल खाती है, तो `$FUNC` `result` को कैप्चर करता है। रीराइट `$FUNC.expect("reason")` `result.expect("reason")` बन जाता है। इन-प्लेस परिवर्तन लागू करने के लिए `--update-all` के साथ चलाएँ, या पहले प्रीव्यू करने के लिए उसके बिना।

**क्या यह प्रोडक्शन कोड पर चलाना सुरक्षित है?**

हमेशा परिवर्तनों को लागू करने से पहले उनका प्रीव्यू करें। स्ट्रक्चरल सर्च सटीक है, लेकिन सटीकता का मतलब यह नहीं है कि परिवर्तन आपके उपयोग के मामले के लिए सिमेंटिकली सही है। `--rewrite` आउटपुट की समीक्षा करें, अपने टेस्ट चलाएँ, पहले git पर कमिट करें। टूल सर्जिकल है — आप अभी भी यह जानने के लिए ज़िम्मेदार हैं कि सर्जरी को क्या हासिल करना चाहिए।

**प्रदर्शन कैसा है?**

तेज़। AST पार्सिंग Tree-sitter के माध्यम से होती है, जो एडिटर प्रतिक्रियाशीलता के लिए डिज़ाइन किया गया है। 100,000-लाइन कोडबेस सर्च करने में सेकंड लगते हैं, मिनट नहीं। सर्च फ़ाइलों में समानांतर है और इंक्रीमेंटल इंडेक्सिंग का मतलब है कि बाद की सर्चेज़ तेज़ हैं।

**यह Octocode की अन्य सुविधाओं के साथ कैसे फ़िट होता है?**

स्ट्रक्चरल सर्च सिमेंटिक सर्च और GraphRAG की पूरक है। सिमेंटिक सर्च का उपयोग तब करें जब आप जानते हैं कि आप क्या खोज रहे हैं लेकिन कहाँ नहीं (`"how does authentication work?"`)। स्ट्रक्चरल सर्च का उपयोग तब करें जब आप पैटर्न जानते हैं (`$USER.auth($TOKEN)`)। GraphRAG का उपयोग तब करें जब आपको फ़ाइलों के बीच संबंधों को समझने की आवश्यकता हो। एक साथ वे कोड अन्वेषण के पूरे स्पेक्ट्रम को कवर करते हैं।

---

## आगे क्या है

हम एक चीज़ की ओर निर्माण कर रहे हैं: **कोडबेस को AI के लिए पूरी तरह से समझने योग्य बनाना**। स्ट्रक्चरल सर्च नवीनतम टुकड़ा है, लेकिन और भी आ रहा है।

मल्टी-फ़ाइल रीफैक्टरिंग पैटर्न। क्रॉस-लैंग्वेज सिंबल ट्रैकिंग। गहरा MCP एकीकरण ताकि AI असिस्टेंट सिर्फ़ कोड _खोज_ ही न सकें, बल्कि उसे विश्वास के साथ _बदल_ भी सकें।

यदि आप Octocode का उपयोग कर रहे हैं, तो 0.14.0 में अपग्रेड करें और अपने कोडबेस पर `octocode grep` आज़माएँ। यदि आप अभी तक इसका उपयोग नहीं कर रहे हैं — [इसे यहाँ प्राप्त करें](https://github.com/Muvon/octocode)। यह ओपन सोर्स है, स्थानीय रूप से चलता है, और यही हम [Octomind](https://octomind.run) बनाने के लिए हर दिन उपयोग करते हैं।

---

_Octocode ओपन सोर्स (Apache 2.0) है और [github.com/Muvon/octocode](https://github.com/Muvon/octocode) पर उपलब्ध है। Muvon द्वारा निर्मित।_
