# Octocode 0.14.0: การค้นหาเชิงโครงสร้างเปลี่ยนวิธีที่ AI เข้าใจโค้ดของคุณ

> การจับคู่รูปแบบที่ขับเคลื่อนด้วย AST ซึ่งเข้าใจไวยากรณ์ของโค้ด ไม่ใช่แค่ตัวอักษร สร้างมาในตัว Octocode — ไม่ต้องมีเครื่องมือเสริม ไม่มีไฟล์คอนฟิก แค่ `octocode grep`

คุณกำลังตามล่าทุกการเรียก `.unwrap()` ในโค้ดเบส Rust เพราะในที่สุดคุณก็ย้ายมาใช้การจัดการ error ที่เหมาะสม คุณ 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 — การแสดงตัวเดียวกับที่คอมไพเลอร์ของคุณใช้ — ดังนั้นรูปแบบจึงจับคู่กับโครงสร้างโค้ดจริง ไม่ใช่ลำดับของตัวอักษร

คุณพบสิ่งที่คุณกำลังมองหา ไม่ใช่ false positive ไม่ใช่เสียงรบกวน แค่โค้ดที่สำคัญ

---

## พบกับ `octocode grep`

```bash
# ค้นหาการเรียก unwrap() ทั้งหมดใน Rust
octocode grep '$VAR.unwrap()' --lang rust

# ค้นหารูปแบบ constructor ใน JavaScript
octocode grep 'new $CLASS($$$ARGS)' --lang javascript

# ค้นหารูปแบบการจัดการ error ใน Go
octocode grep 'if err != nil { $$$ }' --lang go
```

ไวยากรณ์ของรูปแบบนั้นง่าย:

- `$VAR` — โหนด AST เดี่ยวใด ๆ (expression, identifier, อะไรก็ได้)
- `$$$ARGS` — โหนดศูนย์ตัวขึ้นไป (function arguments, statement blocks)
- โค้ดลิเทอรัล — จับคู่โครงสร้างแบบเป๊ะ ๆ

**รองรับ 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` ใช้ metavariable จากรูปแบบการค้นหาของคุณ `$FUNC` ในการเขียนใหม่จะถูกแทนที่ด้วยอะไรก็ตามที่ตรงกับ `$FUNC` ในการค้นหา รีแฟกเตอร์แบบศัลยกรรม — แม่นยำ อัตโนมัติ และปลอดภัย

**ทำไมเรื่องนี้สำคัญสำหรับ AI:** เมื่อ Claude หรือ Cursor แนะนำว่า "เราควรแทนที่การเรียก unwrap ทั้งหมดเหล่านี้ด้วยการจัดการ error ที่เหมาะสม" ตอนนี้มัน _ทำได้จริง ๆ_ — ไม่ใช่แค่อธิบายการเปลี่ยนแปลง แต่สร้างคำสั่งที่แน่นอนเพื่อทำให้มันเกิดขึ้น

---

## สร้างมาสำหรับ AI Agent (ไม่ต้องตั้งค่าเพิ่ม)

การค้นหาเชิงโครงสร้างเปิดเผยเป็นเครื่องมือ MCP ชื่อ `structural_search` ผู้ช่วย AI ของคุณสามารถใช้มันได้โดยตรง:

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

เครื่องมือค้นหา AST อื่น ๆ ต้องการการติดตั้งและการคอนฟิกแยกต่างหาก การค้นหาเชิงโครงสร้างของ Octocode ทำงานได้ทันที ไม่ต้องติดตั้ง CLI `sg` ไม่มีไฟล์กฎ ไม่มี YAML รูปแบบใส่ลงไปในคิวรีโดยตรง

AI Agent ทำงานได้ดีที่สุดด้วยชิ้นส่วนที่เคลื่อนไหวน้อยลง การพึ่งพาภายนอกทุกตัวคือจุดที่อาจล้มเหลว ไฟล์คอนฟิกทุกไฟล์คือความฝืด การค้นหาเชิงโครงสร้างใน Octocode แค่... อยู่ตรงนั้น พร้อมใช้งาน

---

## มีอะไรใหม่อีกใน 0.14.0

### สถาปัตยกรรมการค้นหาแบบรวม

เราเขียนระบบค้นหาใหม่ตั้งแต่ต้น Delta indexing ที่รู้จัก branch หมายความว่าการค้นหาใน feature branch ตอนนี้รวมผลลัพธ์เข้ากับ index หลักได้อย่างถูกต้อง — คุณเห็นสิ่งที่อยู่ใน branch ปัจจุบัน _บวก_ บริบทที่เกี่ยวข้องจาก main สถาปัตยกรรมแบบรวมยังนำการครอบคลุมเทสต์มาในที่ที่ไม่เคยมีมาก่อน

### โมเดล embedding มากขึ้น

เพิ่มการรองรับ embeddings **MPNet** และ **JinaBERT QK** — โมเดลประสิทธิภาพสูงที่ตีได้แรงกว่าคลาสน้ำหนัก สำหรับทีมที่จับตาดูค่าใช้จ่าย API โมเดลเหล่านี้ให้ผลการค้นหาคุณภาพดีด้วยโมเดลที่เล็กกว่าและเร็วกว่า

### การปรับปรุง MCP Server

- **Schema เครื่องมือที่ดีขึ้น** — Output ที่มีโครงสร้างดีขึ้นสำหรับการบริโภคโดย AI
- **การ index repository อัตโนมัติ** — MCP server ตอนนี้สามารถ trigger การ index อัตโนมัติเมื่อตรวจพบ repository ที่ยังไม่ได้ index
- **Transport layer ที่ดีขึ้น** — ย้ายไปยัง SDK `rmcp` อย่างเป็นทางการเพื่อความเสถียรที่ดีขึ้น

### ความน่าเชื่อถือในระดับสเกล

- **Output LLM แบบมีโครงสร้างที่เข้มงวด** — โหมด JSON พร้อมการตรวจสอบทำให้แน่ใจว่าการตอบสนองของ AI ถูก parse อย่างถูกต้อง
- **การลองใหม่อัตโนมัติ** — การดำเนินการแบบ batch ลองใหม่เมื่อเกิดความล้มเหลวชั่วคราว
- **การประมวลผล batch ที่ดีขึ้น** — ประสิทธิภาพหน่วยความจำที่ดีขึ้นสำหรับโค้ดเบสขนาดใหญ่

### คำสั่ง Clear ได้พลังมากขึ้น

คำสั่ง `clear` ตอนนี้รองรับการล้างแบบเจาะจง:

```bash
# ล้างเฉพาะ commit index
octocode clear --mode commits

# ล้างเฉพาะข้อมูล GraphRAG
octocode clear --mode graphrag
```

---

## ลองตอนนี้

อัปเดตเป็น 0.14.0:

```bash
# Homebrew
brew upgrade octocode

# หรือติดตั้งใหม่ด้วย universal installer
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh
```

จากนั้นลองการค้นหาเชิงโครงสร้างบนโค้ดเบสของคุณ:

```bash
# ค้นหารูปแบบที่ควรรีแฟกเตอร์
octocode grep 'console.log($ARG)' --lang javascript

# ตรวจสอบช่องว่างการจัดการ error
octocode grep '$VAR.unwrap()' --lang rust

# ค้นหารูปแบบการ inject แบบ constructor
octocode grep 'new $CLASS($$$)' --lang typescript
```

---

## คำถามที่พบบ่อย

**อะไรทำให้การค้นหาเชิงโครงสร้างต่างจาก regex?**

Regex จับคู่ตัวอักษร การค้นหาเชิงโครงสร้างจับคู่โหนด AST `$VAR.unwrap()` ค้นหาการเรียกเมธอดจริง ไม่ใช่คอมเมนต์ที่มีสตริงนั้น ไม่ใช่ชื่อตัวแปรที่บังเอิญมี "unwrap" ไม่ใช่ตัวอย่างจากเอกสาร มันเข้าใจโครงสร้างโค้ดเพราะมัน parse โค้ดในแบบเดียวกับที่คอมไพเลอร์ของคุณทำ

**ฉันต้องติดตั้งอะไรเพิ่มไหม?**

ไม่ การค้นหาเชิงโครงสร้างสร้างมาในตัว Octocode 0.14.0 ไม่มี CLI tool แยก ไม่มีไฟล์คอนฟิก ไม่มีการกำหนดกฎ YAML คำสั่ง `octocode grep` ทำงานได้ทันทีหลังอัปเกรด

**ฉันใช้สิ่งนี้กับ Claude, Cursor หรือผู้ช่วย AI อื่น ๆ ได้ไหม?**

ได้ การค้นหาเชิงโครงสร้างเปิดเผยเป็นเครื่องมือ MCP ผู้ช่วยที่เข้ากันได้กับ MCP ใด ๆ สามารถเรียกใช้ได้โดยตรง Schema ของเครื่องมือรวมภาษาของรูปแบบ ดังนั้นผู้ช่วย AI จึงเข้าใจวิธีสร้างคิวรีที่ถูกต้อง

**รองรับภาษาอะไรบ้าง?**

Rust, JavaScript, TypeScript, Python, Go, Java, C/C++, PHP, Ruby, Lua, Bash, CSS และ JSON เอนจินเบื้องล่างใช้ไวยากรณ์ Tree-sitter ดังนั้นการเพิ่มภาษาใหม่จึงตรงไปตรงมาหากคุณต้องการภาษาที่ไม่อยู่ในรายการ

**`--rewrite` ทำงานอย่างไร?**

เทมเพลตการเขียนใหม่ใช้ metavariable จากรูปแบบการค้นหาของคุณ หากการค้นหาของคุณคือ `$FUNC.unwrap()` และตรงกับ `result.unwrap()` แล้ว `$FUNC` จะ capture `result` การเขียนใหม่ `$FUNC.expect("reason")` กลายเป็น `result.expect("reason")` รันด้วย `--update-all` เพื่อนำการเปลี่ยนแปลงไปใช้ในที่ หรือไม่มีมันเพื่อพรีวิวก่อน

**ปลอดภัยที่จะรันบนโค้ดโปรดักชันไหม?**

พรีวิวการเปลี่ยนแปลงก่อนนำไปใช้เสมอ การค้นหาเชิงโครงสร้างแม่นยำ แต่ความแม่นยำไม่ได้หมายความว่าการเปลี่ยนแปลงนั้นถูกต้องในเชิงความหมายสำหรับ use case ของคุณ ตรวจสอบ output ของ `--rewrite` รันเทสต์ของคุณ commit ลง git ก่อน เครื่องมือนี้เป็นเหมือนศัลยกรรม — คุณยังคงรับผิดชอบในการรู้ว่าการผ่าตัดควรบรรลุอะไร

**ประสิทธิภาพเป็นอย่างไร?**

เร็ว การ parse AST เกิดขึ้นผ่าน Tree-sitter ซึ่งออกแบบมาเพื่อการตอบสนองของ editor การค้นหาโค้ดเบส 100,000 บรรทัดใช้เวลาเป็นวินาที ไม่ใช่นาที การค้นหาทำงานแบบขนานข้ามไฟล์และการ index แบบ incremental หมายความว่าการค้นหาครั้งต่อ ๆ ไปจะเร็วขึ้น

**สิ่งนี้เข้ากับฟีเจอร์อื่น ๆ ของ 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_
