summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/th
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web/src/content/docs/th')
-rw-r--r--packages/web/src/content/docs/th/1-0.mdx67
-rw-r--r--packages/web/src/content/docs/th/acp.mdx156
-rw-r--r--packages/web/src/content/docs/th/agents.mdx747
-rw-r--r--packages/web/src/content/docs/th/cli.mdx601
-rw-r--r--packages/web/src/content/docs/th/commands.mdx323
-rw-r--r--packages/web/src/content/docs/th/config.mdx685
-rw-r--r--packages/web/src/content/docs/th/custom-tools.mdx170
-rw-r--r--packages/web/src/content/docs/th/ecosystem.mdx76
-rw-r--r--packages/web/src/content/docs/th/enterprise.mdx170
-rw-r--r--packages/web/src/content/docs/th/formatters.mdx130
-rw-r--r--packages/web/src/content/docs/th/github.mdx321
-rw-r--r--packages/web/src/content/docs/th/gitlab.mdx195
-rw-r--r--packages/web/src/content/docs/th/ide.mdx48
-rw-r--r--packages/web/src/content/docs/th/index.mdx359
-rw-r--r--packages/web/src/content/docs/th/keybinds.mdx192
-rw-r--r--packages/web/src/content/docs/th/lsp.mdx188
-rw-r--r--packages/web/src/content/docs/th/mcp-servers.mdx511
-rw-r--r--packages/web/src/content/docs/th/models.mdx223
-rw-r--r--packages/web/src/content/docs/th/modes.mdx331
-rw-r--r--packages/web/src/content/docs/th/network.mdx57
-rw-r--r--packages/web/src/content/docs/th/permissions.mdx237
-rw-r--r--packages/web/src/content/docs/th/plugins.mdx385
-rw-r--r--packages/web/src/content/docs/th/providers.mdx1889
-rw-r--r--packages/web/src/content/docs/th/rules.mdx180
-rw-r--r--packages/web/src/content/docs/th/sdk.mdx391
-rw-r--r--packages/web/src/content/docs/th/server.mdx287
-rw-r--r--packages/web/src/content/docs/th/share.mdx128
-rw-r--r--packages/web/src/content/docs/th/skills.mdx222
-rw-r--r--packages/web/src/content/docs/th/themes.mdx369
-rw-r--r--packages/web/src/content/docs/th/tools.mdx379
-rw-r--r--packages/web/src/content/docs/th/troubleshooting.mdx300
-rw-r--r--packages/web/src/content/docs/th/tui.mdx390
-rw-r--r--packages/web/src/content/docs/th/web.mdx142
-rw-r--r--packages/web/src/content/docs/th/windows-wsl.mdx113
-rw-r--r--packages/web/src/content/docs/th/zen.mdx254
35 files changed, 11216 insertions, 0 deletions
diff --git a/packages/web/src/content/docs/th/1-0.mdx b/packages/web/src/content/docs/th/1-0.mdx
new file mode 100644
index 000000000..1d67da62d
--- /dev/null
+++ b/packages/web/src/content/docs/th/1-0.mdx
@@ -0,0 +1,67 @@
+---
+title: สำหรับสิ่งนี้ 1.0
+description: ใน OpenCode 1.0
+---
+
+OpenCode 1.0 เป็นเนื้อหา TUI ทั้งหมด
+
+เราย้ายจาก TUI ใช้ go+bubbletea ที่มีปัญหาด้านประสิทธิภาพและความสามารถไปเป็นพวงกุญแจภายใน (OpenTUI) ที่เขียนด้วย zig+solidjs
+
+TUIล่าสุดทำงานเหมือนกับเก่าเพราะความเชื่อ Opencode เดียวกัน
+
+---
+
+## สู่กรุงเดลต้า
+
+คุณอัปเดตอัตโนมัติเป็น 1.0 อีกครั้งและปรับปรุงอยู่
+รุ่นดังกล่าว OpenCode ผู้เล่นเก่าบางเฉียบจะคว้ารางวัลล่าสุดเสมอ
+
+อย่างต่อเนื่องไม่จำเป็นต้องจดบันทึก
+
+```bash
+$ opencode upgrade 1.0.0
+```
+
+ส่วนดาวน์เกรดกลับเป็น 0.x อีกต่อไป...
+
+```bash
+$ opencode upgrade 0.15.31
+```
+
+---
+
+## การเปลี่ยนแปลง UX
+
+การค้นพบที่ค้นพบโดยความเชื่อโดยแสดงเฉพาะรายละเอียดในส่วนที่แก้ไขและทุบตีเท่านั้น
+
+ขอคำสั่งซึ่งหมายถึงทุกอย่างไหลผ่านกด ctrl+p จะเรียกสิ่งนี้ถึงคำอธิบายที่อธิบายทุกอย่างที่คุณทำได้
+
+จักรพรรดิ์อัจฉริยะ (สามารถมีได้) พร้อมข้อมูลข่าวสาร
+
+เราจะลบสิ่งที่เราเชื่อว่ามีใครใช้จริงออกเลยโปรดเปิดปัญหาแล้วเราจะเพิ่มกลับอย่างรวดเร็ว
+
+---
+
+## ทำลายล้าง
+
+### เปลี่ยนชื่อแล้ว
+
+- Messages_revert -> Messages_undo
+- switch_agent -> agent_cycle
+- switch_agent_reverse -> agent_cycle_reverse
+- switch_mode -> agent_cycle
+- switch_mode_reverse -> agent_cycle_reverse
+
+### คีย์ถูกลบออก
+
+- Messages_layout_toggle
+- สิ่ง_ถัดไป
+- ข้อเสนอที่_เปอร์โตริโก
+- file_diff_toggle
+- file_search
+- file_close
+- file_list
+- app_help
+- โครงการ_init
+- รายละเอียด_รายละเอียด
+- สร้างสรรค์_บล็อก
diff --git a/packages/web/src/content/docs/th/acp.mdx b/packages/web/src/content/docs/th/acp.mdx
new file mode 100644
index 000000000..92638b9ab
--- /dev/null
+++ b/packages/web/src/content/docs/th/acp.mdx
@@ -0,0 +1,156 @@
+---
+title: ACPสามารถช่วย
+description: ใช้ OpenCode ในโปรแกรมแก้ไขที่ต้องการ ACP
+---
+
+OpenCode ที่แสดง [Agent Client Protocol](https://agentclientprotocol.com) หรือ (ACP) ซึ่งสามารถช่วยได้โดยตรงในการแก้ไขและ IDE ที่หน่วยความจำ
+
+:::tip
+สำหรับรายชื่อและเครื่องมือที่รองรับ ACPรายงานที่[ACP รายงาน](https://zed.dev/blog/acp-progress-report#available-now)
+:::
+
+ACP เป็นแบบเปิดมาตรฐานการสื่อสารระหว่างโปรแกรมแก้ไขโค้ดและตัวแทน AI
+
+---
+
+## เม็กซิโก
+
+บางครั้งใช้ OpenCode ผ่าน ACP ไม่อนุญาตให้โปรแกรมแก้ไขของคุณให้รันคำสั่ง `opencode acp`
+
+สั่งเริ่ม OpenCode เนื่องจากต้องย่อยที่จำเป็นต้องมี ACP ซึ่งจะต้องแก้ไขโปรแกรมของคุณผ่าน JSON-RPC ผ่าน stdio
+
+นี่คือตัวอย่างโปรแกรมแก้ไขยอดนิยมที่รองรับ ACP
+
+---
+
+### เซด
+
+อดทนต่อไป [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
+
+```json title="~/.config/zed/settings.json"
+{
+ "agent_servers": {
+ "OpenCode": {
+ "command": "opencode",
+ "args": ["acp"]
+ }
+ }
+}
+```
+
+สิ่งนั้นเปิดใช้สำหรับ `agent: new thread` ใน **Command Palette**
+
+คุณต้องผูกมัดอย่างหนักเพื่อแก้ไข `keymap.json` ของคุณ:
+
+```json title="keymap.json"
+[
+ {
+ "bindings": {
+ "cmd-alt-o": [
+ "agent::NewExternalAgentThread",
+ {
+ "agent": {
+ "custom": {
+ "name": "OpenCode",
+ "command": {
+ "command": "opencode",
+ "args": ["acp"]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+]
+```
+
+---
+
+### เจ็ตเบรนส์ IDE
+
+ไปที่ [JetBrains IDE](https://www.jetbrains.com/) acp.json ของคุณตาม [เอกสาร](https://www.jetbrains.com/help/ai-assistant/acp.html):
+
+```json title="acp.json"
+{
+ "agent_servers": {
+ "OpenCode": {
+ "command": "/absolute/path/bin/opencode",
+ "args": ["acp"]
+ }
+ }
+}
+```
+
+นี่เป็นการเปิดให้ตัวแทน 'OpenCode' ในเนื้อหาของตัวแทน AI Chat
+
+---
+
+### Avante.nvim
+
+ยังคงมี [Avante.nvim](https://github.com/yetone/avante.nvim) ของคุณ:
+
+```lua
+{
+ acp_providers = {
+ ["opencode"] = {
+ command = "opencode",
+ args = { "acp" }
+ }
+ }
+}
+```
+
+จะต้องส่งผ่านวันพรุ่งนี้:
+
+```lua {6-8}
+{
+ acp_providers = {
+ ["opencode"] = {
+ command = "opencode",
+ args = { "acp" },
+ env = {
+ OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
+ }
+ }
+ }
+}
+```
+
+---
+
+### CodeCompanion.nvim
+
+ลองใช้ OpenCode ACP ใน [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim) ให้เพิ่มสิ่งต่อไปนี้ใน Neovim ของคุณ:
+
+```lua
+require("codecompanion").setup({
+ interactions = {
+ chat = {
+ adapter = {
+ name = "opencode",
+ model = "claude-sonnet-4",
+ },
+ },
+ },
+})
+```
+
+คุณสามารถใช้ CodeCompanion เพื่อใช้ OpenCode ACP สำหรับแชท
+
+บางครั้งการส่งผ่านบางครั้ง (เช่น `OPENCODE_API_KEY`) ต้อง [ต้องอธิบายเหตุผล:https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) ในเอกสารประกอบ CodeCompanion.nvim สำหรับรายละเอียดทั้งหมด
+
+## เพื่อ
+
+OpenCode เป็นเวลานาน ACP และในการตรวจสอบคุณสมบัติทั้งหมด:
+
+:::note
+คำสั่งสแลมในคำสั่งบางคำสั่งเช่น `/undo` และ `/redo` ยังไม่รองรับในขณะนี้
+:::
+
+- เครื่องมือใน (ไฟล์ไฟล์คำสั่งอื่นๆ)
+- คำอธิบายและคำสั่งสแลช
+- MCP แขกที่นี่คือข้อมูลเพิ่มเติมของ OpenCode ของคุณ
+- กฎเฉพาะโครงการจาก `AGENTS.md`
+- คนจัดรูปแบบและ linters เวียนนา
+- ระบบตัวแทนและระบบ
diff --git a/packages/web/src/content/docs/th/agents.mdx b/packages/web/src/content/docs/th/agents.mdx
new file mode 100644
index 000000000..acd3d553b
--- /dev/null
+++ b/packages/web/src/content/docs/th/agents.mdx
@@ -0,0 +1,747 @@
+---
+title: ตัวแทน
+description: และตัวแทนพิเศษ
+---
+
+เจ้าหน้าที่คือผู้ช่วย AI ในช่องทางต่างๆ ของอินเทอร์เฟซและอินเทอร์เฟซของโฟลว์เฉพาะได้สามารถสร้างเครื่องมือที่รวบรวมข้อมูลด้วยโมดูลและอินเทอร์เฟซของอินเทอร์เฟซ...
+
+:::tip
+ใช้แผนของตัวแทนเพื่อวิเคราะห์โค้ดและทบทวนเหตุผลในการทำการเปลี่ยนแปลงโค้ดใดๆ
+:::
+
+การผสมผสานระหว่างตัวแทนระหว่างการประชุมหรือต้องการโดยระบุ `@`
+
+---
+
+## ประเภท
+
+OpenCode มีเอเจนต์สองประเภทตัวแทนหลักและตัวแทนย่อย
+
+---
+
+### ตัวแทนหลัก
+
+ตัวแทนหลักคือผู้ช่วยหลักที่คุณมักจะเกิดขึ้นด้วยโดยตรงในวนดูได้เฉพาะปุ่ม **Tab** หรือปุ่ม `switch_agent` ที่โน่ไว้เจ้าหน้าที่สามารถจัดการระบบของคุณได้โดยได้รับเครื่องมือที่มีคุณลักษณะหลักเช่น Build มีเครื่องมือทั้งหมดในส่วนของแผนถูกจำกัด
+
+:::tip
+**Tab** บันทึกเรื่องราวระหว่างตัวแทนหลักดื่มด่ำได้
+:::
+
+OpenCode ของเอเจนต์หลักในตัวได้แก่ **Build** และ **Plan** ดี
+ดูด้านล่าง
+
+---
+
+### ตัวแทนย่อย
+
+ตัวแทนย่อยคือผู้ช่วยเฉพาะทางที่ตัวแทนหลักสามารถเรียกงานเฉพาะได้เฉพาะเรียกได้โดยตรงโดย **@ หมายถึง**ความหมายในข้อความของคุณ
+
+OpenCode ในการควบคุมเอเจนต์ย่อยในส่วนนี้ได้แก่ **ทั่วไป** และ **สำรวจ** ส่วนดูพื้นที่
+
+---
+
+## บิวท์อิน
+
+OpenCode สืบสวนเอเจนต์หลักในตัวและเอเจนต์ย่อยในอีกหนึ่ง
+
+---
+
+### ใช้บิลด์
+
+__ โหมด: `primary`
+
+สร้างเว็บหลัก **รองรับ** พร้อมด้วยเครื่องมือทั้งหมดที่มีเอเจนต์มาตรฐานเพื่อให้มีสิทธิ์การเข้าถึงไฟล์และคำสั่งระบบโดยสมบูรณ์
+
+---
+
+### ใช้แผน
+
+__ โหมด: `primary`
+
+ตัวแทนแบบจำกัดที่ความเชื่อถือและการควบคุมระบบของการที่แจ้งให้ทราบอย่างเป็นทางการและป้องกันการเปลี่ยนแปลงโดยเฉพาะอย่างยิ่ง
+ตามคำอธิบายตามลำดับทั้งหมดของระบบเป็น `ask`:
+
+- `file edits`: เนื้อหา แพตช์ และเป็นที่ทั้งหมด
+- `bash`: คำสั่งทุบตีทั้งหมด
+
+เอเจนต์นี้มีประโยชน์ต้องการให้ LLM ตรวจสอบโค้ดตรวจสอบการเปลี่ยนแปลงหรือสร้างแผนว่าจะทำดีเบสของคุณจริง
+
+---
+
+### ใช้ทั่วไป
+
+__ โหมด: `subagent`
+
+ตัวแทนเพื่อค้นหาคำถามที่จำเป็นและต่อเนื่องหลายขั้นตอน อนุญาตให้เข้าถึงเครื่องมือต่างๆ (ยกเว้นการตรวจสอบ) และการปรับปรุงไฟล์ได้เมื่อจำเป็นต้องใช้สิ่งนี้เพื่อรันงานหลายหน่วยพร้อมกัน
+
+---
+
+### ใช้สำรวจ
+
+__ โหมด: `subagent`
+
+เอเจนต์ความเร็วสูงและอ่านอย่างเดียวสำหรับฐานพื้นฐานโค้ดและตรวจดูไฟล์ได้ใช้สิ่งนี้เมื่อคุณต้องการค้นหาไฟล์อย่างรวดเร็วรูปแบบตามค้นหาโค้ดด้วยคำสำคัญหรือแบบสอบถามเกี่ยวกับโค้ดเบส
+
+---
+
+### ใช้การบดอัด
+
+__ โหมด: `primary`
+
+เอเจนต์ระบบนั้นมีส่วนช่วยในการสรุปที่ยาวไปสู่บทสรุปที่เล็กลงโดยเฉพาะอย่างยิ่งเมื่อจำเป็นต้องมีและใน UI
+
+---
+
+### ใช้ชื่อ
+
+__ โหมด: `primary`
+
+ตัวแทนของระบบซึ่งสร้างชื่อที่ออกแบบสั้น ๆ มันทำงานได้โดยไม่ต้องใช้ UI
+
+---
+
+### ใช้สรุป
+
+__ โหมด: `primary`
+
+ตัวแทนระบบนั้นซึ่งสร้างสรุปการตรวจสอบและทำงานโดยไม่ต้องมี UI
+
+---
+
+## เรื่องนั้น
+
+1. สำหรับตัวแทนหลักให้ใช้ปุ่ม **Tab** เพื่อวนดูตัวแทนที่มีความสำคัญ โปรดใช้การผูกปุ่ม `switch_agent` ที่โรงยิมไว้ได้
+
+2. สามารถตัวแทนย่อยได้:
+ - ****โดยตัวแทนหลักโดยเฉพาะพิเศษตามคำอธิบาย
+ - เพิ่มเติมโดย **@ ต้องการ** ตัวแทนย่อยในข้อความของคุณเช่น
+
+ ```txt frame="none"
+ @general help me search for this function
+ ```
+
+3. **ปรับปรุงระหว่างการปรับปรุง**: เมื่อตัวแทนย่อยสร้างหลังคาและเรียนรู้ร่วมกันระหว่างการปรับปรุงหลักและหลังคาทั้งหมดได้ทั้งหมด:
+ - **\<Leader>+Right** (หรือ `session_child_cycle` keybind ที่คุณรู้ไว้) ในวนผ่าน parent → child1 → child2 → ... → parent
+ - **\<Leader>+Left** (หรือฟัง `session_child_cycle_reverse` keybind) เพื่อวนย้อนกลับผ่าน parent ← child1 ← child2 ← ... ← parent
+
+ เรียนรู้การดำเนินการระหว่างการดำเนินการหลักและงานตัวแทนย่อยเฉพาะเจาะจง
+
+---
+
+## เม็กซิโก
+
+ปรับแต่งเอเจนต์ในหรือสร้างเอเจนต์ได้ผ่านมาได้อย่างไม่น่าเชื่อตัวแทนได้สองวิธี:
+
+---
+
+### JSON
+
+ไม่เชื่อตัวแทนในไฟล์ในกรุง `opencode.json` ของคุณ:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "build": {
+ "mode": "primary",
+ "model": "anthropic/claude-sonnet-4-20250514",
+ "prompt": "{file:./prompts/build.txt}",
+ "tools": {
+ "write": true,
+ "edit": true,
+ "bash": true
+ }
+ },
+ "plan": {
+ "mode": "primary",
+ "model": "anthropic/claude-haiku-4-20250514",
+ "tools": {
+ "write": false,
+ "edit": false,
+ "bash": false
+ }
+ },
+ "code-reviewer": {
+ "description": "Reviews code for best practices and potential issues",
+ "mode": "subagent",
+ "model": "anthropic/claude-sonnet-4-20250514",
+ "prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
+ "tools": {
+ "write": false,
+ "edit": false
+ }
+ }
+ }
+}
+```
+
+---
+
+### มาร์กดาวน์
+
+คุณอาจกำหนดเอเจนต์สำหรับไฟล์มาร์กดาวน์ได้หลายสีใน:
+
+- ทั่วโลก: `~/.config/opencode/agents/`
+- ต่อโครงการ: `.opencode/agents/`
+
+```markdown title="~/.config/opencode/agents/review.md"
+---
+description: Reviews code for quality and best practices
+mode: subagent
+model: anthropic/claude-sonnet-4-20250514
+temperature: 0.1
+tools:
+ write: false
+ edit: false
+ bash: false
+---
+
+You are in code review mode. Focus on:
+
+- Code quality and best practices
+- Potential bugs and edge cases
+- Performance implications
+- Security considerations
+
+Provide constructive feedback without making direct changes.
+```
+
+ชื่อไฟล์มาร์กดาวน์พร้อมกับชื่อเอเจนต์เช่น `review.md` สร้างตัวแทน `review`
+
+---
+
+## ต
+
+มาดูรายละเอียดเพิ่มเติมที่จุดนั้นกัน
+
+---
+
+### คำอธิบาย
+
+ใช้ฟีเจอร์ `description` เพื่อให้คำอธิบายสีนี้ทำอะไรและแนะนำเมื่อใด
+
+```json title="opencode.json"
+{
+ "agent": {
+ "review": {
+ "description": "Reviews code for best practices and potential issues"
+ }
+ }
+}
+```
+
+รายการไม่จำเป็น **จำเป็น**
+
+---
+
+### นั่น
+
+เหตุผลของการสุ่มและการตอบกลับของ LLM ด้วย `temperature`
+
+ค่าที่ต่ำกว่านี้จะตอบสนองมีจุดมุ่งหมายและทราบถึงค่าที่จะช่วยลดการส่งผลและส่งผลถึง
+
+```json title="opencode.json"
+{
+ "agent": {
+ "plan": {
+ "temperature": 0.1
+ },
+ "creative": {
+ "temperature": 0.8
+ }
+ }
+}
+```
+
+อุณหภูมิจะเท่ากัน 0.0 ถึง 1.0:
+
+- **0.0-0.2**: สิ่งที่เราคาดการณ์และกำหนดไว้เป็นไปได้และวางแผนโค้ด
+- **0.3-0.5**: ปฏิกิริยาที่สมดุลและเป็นผลให้เกิดงานพัฒนาทั่วไป
+- **0.6-1.0**: คำตอบที่สร้างสรรค์และหลากหลายมากขึ้นซึ่งมีประโยชน์สำหรับการศึกษาและต่อไป
+
+```json title="opencode.json"
+{
+ "agent": {
+ "analyze": {
+ "temperature": 0.1,
+ "prompt": "{file:./prompts/analysis.txt}"
+ },
+ "build": {
+ "temperature": 0.3
+ },
+ "brainstorm": {
+ "temperature": 0.7,
+ "prompt": "{file:./prompts/creative.txt}"
+ }
+ }
+}
+```
+
+ข้อสังเกตอุณหภูมิ OpenCode โดยทั่วไปจะมีเฉพาะรุ่นเท่านั้นแล้ว 0 สำหรับรุ่นส่วนใหญ่ 0.55 สำหรับรุ่น Qwen
+
+---
+
+### สูงสุด
+
+จำนวนส่วนประกอบของการวนซ้ำของเอเจนต์ที่เอเจนต์เป็นผลสืบเนื่องด้วยข้อความเท่านั้นวิธีการที่ต้องการควบคุมต้นทุนสามารถกำหนดได้ในแนวทางที่ตัวแทนได้
+
+หากไม่ได้ตั้งค่านี้ เอเจนต์จะดำเนินต่อไปจนกว่าโมเดลจะจะหยุดหรือผู้ใช้ขัดจังหวะ
+
+```json title="opencode.json"
+{
+ "agent": {
+ "quick-thinker": {
+ "description": "Fast reasoning with limited iterations",
+ "prompt": "You are a quick thinker. Solve problems with minimal steps.",
+ "steps": 5
+ }
+ }
+}
+```
+
+ไปถึงความโดดเด่นจะได้รับพร้อมท์พิเศษที่แนะนำให้เรียนรู้ด้วยการสรุปงานและงานที่เหลืออีกครั้ง
+
+:::caution
+ช่อง `maxSteps` แบบเดิมเลิกใช้แล้วใช้ `steps` แทน
+:::
+
+---
+
+### ต่อไปนี้
+
+ตั้งค่าเป็น `true` ไปถึงสมาชิก
+
+```json title="opencode.json"
+{
+ "agent": {
+ "review": {
+ "disable": true
+ }
+ }
+}
+```
+
+---
+
+### พรอมมาน
+
+ระบุไฟล์พร้อมท์ระบบสำหรับเอเจนต์นี้ด้วย `prompt`ความละเอียดสูงพร้อมคำแนะนำเฉพาะสำหรับกรณีของตัวแทน
+
+```json title="opencode.json"
+{
+ "agent": {
+ "review": {
+ "prompt": "{file:./prompts/code-review.txt}"
+ }
+ }
+}
+```
+
+เกี่ยวเนื่องกับสิ่งนี้กับระบบไฟล์ที่อาจเป็นสาเหตุว่าทำไมจึงสามารถใช้ได้กับทั้ง OpenCode ส่วนกลางและเฉพาะโครงการ
+
+---
+
+### อย่างอย่างนั้น
+
+ใช้ฟังก์ชัน `model` ในส่วนของโมเดลโมเดลสำหรับเอเจนต์นี้มีประโยชน์สำหรับการใช้โมเดลโมเลกุลซึ่งปรับให้เหมาะกับงานโครงสร้างเช่นโมดูลสำหรับโมดูลที่ตรวจสอบที่เก็บข้อมูลจำนวนมากสำหรับการดำเนินการ
+
+:::tip
+ไม่ได้ระบุโมเดลตัวแทนหลักๆ [ โมเดลที่ build ทั่วโลก](/docs/config#models) ทำให้ตัวแทนย่อยในเมนูของตัวแทนหลักที่ทอดตัวแทนย่อยทั่วโลก
+:::
+
+```json title="opencode.json"
+{
+ "agent": {
+ "plan": {
+ "model": "anthropic/claude-haiku-4-20250514"
+ }
+ }
+}
+```
+
+รหัสโมเดลในบางครั้ง OpenCode ของคุณใช้รูปแบบ `provider/model-id` เช่นต้องใช้ [OpenCode Zen](/docs/zen) แล้วก็ใช้ `opencode/gpt-5.1-codex` สำหรับ GPT 5.1 Codex
+
+---
+
+### เครื่องมือ
+
+พื้นฐานว่าเครื่องมือนี้สามารถตรวจสอบประสิทธิภาพของเอเจนต์ด้วย `tools` วิจัยเปิดหรือตรวจสอบเครื่องมือเฉพาะเจาะจงเป็น `true` หรือ `false`
+
+```json title="opencode.json" {3-6,9-12}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "tools": {
+ "write": true,
+ "bash": true
+ },
+ "agent": {
+ "plan": {
+ "tools": {
+ "write": false,
+ "bash": false
+ }
+ }
+ }
+}
+```
+
+:::note
+ความพยายามเฉพาะเอเจนต์จะเน้นไปที่ส่วนกลาง
+:::
+
+จำเป็นต้องใช้ไวด์การ์ดเพื่อควบคุมเครื่องมือหลายรายการพร้อมกันได้ยืนยันว่าเครื่องมือทั้งหมดจากเซิร์ฟเวอร์ MCP:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "readonly": {
+ "tools": {
+ "mymcp_*": false,
+ "write": false,
+ "edit": false
+ }
+ }
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือ](/docs/tools)
+
+---
+
+### สิทธิ์
+
+หลักการที่ถูกต้องเพื่อประสิทธิภาพในการดำเนินการที่ตัวแทนหลายแห่งในปัจจุบันความสามารถในการสำหรับเครื่องมือ `edit`, `bash` และ `webfetch` ได้อย่างมีประสิทธิภาพเป็น:
+
+- `"ask"` — อนุมัติก่อนการเข้าถึงเครื่องมือ
+- `"allow"` — ประสิทธิภาพการทำงานทั้งหมดเป็นเพียง...
+- `"deny"` — มันเป็นเครื่องมือ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "deny"
+ }
+}
+```
+
+ทำให้คุณมีสิทธิ์ที่จะต่อตัวแทนได้
+
+```json title="opencode.json" {3-5,8-10}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "deny"
+ },
+ "agent": {
+ "build": {
+ "permission": {
+ "edit": "ask"
+ }
+ }
+ }
+}
+```
+
+คุณไม่จำเป็นต้องมีสิทธิ์ในตัวแทน Markdown
+
+```markdown title="~/.config/opencode/agents/review.md"
+---
+description: Code review without edits
+mode: subagent
+permission:
+ edit: deny
+ bash:
+ "*": ask
+ "git diff": allow
+ "git log*": allow
+ "grep *": allow
+ webfetch: deny
+---
+
+Only analyze code and suggest changes.
+```
+
+การตั้งค่าเริ่มต้นสำหรับคำสั่งทุบตีเฉพาะได้
+
+```json title="opencode.json" {7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "build": {
+ "permission": {
+ "bash": {
+ "git push": "ask",
+ "grep *": "allow"
+ }
+ }
+ }
+ }
+}
+```
+
+นี่อาจใช้รูปแบบ glob
+
+```json title="opencode.json" {7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "build": {
+ "permission": {
+ "bash": {
+ "git *": "ask"
+ }
+ }
+ }
+ }
+}
+```
+
+และอีกครั้งใช้ `*` wildcard เพื่อให้สิทธิ์สำหรับคำสั่งทั้งหมดได้
+เมื่อกฎเริ่มขึ้นล่าสุดมีความสำคัญมากกว่าที่จะใส่ `*` ไวด์การ์ดขึ้นนำและกฎเฉพาะตามหลัง
+
+```json title="opencode.json" {8}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "build": {
+ "permission": {
+ "bash": {
+ "*": "ask",
+ "git status *": "allow"
+ }
+ }
+ }
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้](/docs/permissions)
+
+---
+
+### สิ่ง
+
+ต้นแบบโหมดของตัวแทนด้วย `mode` บันทึก `mode` บันทึกวิธีการกำหนดวิธีการใช้ตัวแทน
+
+```json title="opencode.json"
+{
+ "agent": {
+ "review": {
+ "mode": "subagent"
+ }
+ }
+}
+```
+
+สวัสดี `mode` สามารถตั้งค่าเป็น `primary`, `subagent` หรือ `all` หากไม่ได้ระบุ `mode` ระบบระบบควบคุมเป็น `all`
+
+---
+
+### ส่วนนั้น
+
+ซ่อนตัวแทนย่อยจากเมนูเติมข้อความอัตโนมัติ `@` ด้วย `hidden: true` มีประโยชน์สำหรับตัวแทนย่อยภายในจำเป็นต้องมีโปรแกรมโดยทางอื่นตัวแทนผ่านเครื่องมืองานเท่านั้น
+
+```json title="opencode.json"
+{
+ "agent": {
+ "internal-helper": {
+ "mode": "subagent",
+ "hidden": true
+ }
+ }
+}
+```
+
+ในที่สุดคุณจะพบในเมนูเติมข้อความอัตโนมัติเท่านั้นที่จำเป็นต้องมีเอเจนต์ที่เป็นได้ผ่านเครื่องมืองานหากต้องการ
+
+:::note
+สามารถตัวแทน `mode: subagent` ได้
+:::
+
+---
+
+### สิทธิ์งาน
+
+ต้นแบบตัวแทนย่อยที่ตัวแทนสามารถต้องใช้เครื่องมือผ่านงานด้วย `permission.task` ใช้รูปแบบ glob ส่วนใหญ่ที่ใหญ่ขึ้น
+
+```json title="opencode.json"
+{
+ "agent": {
+ "orchestrator": {
+ "mode": "primary",
+ "permission": {
+ "task": {
+ "*": "deny",
+ "orchestrator-*": "allow",
+ "code-reviewer": "ask"
+ }
+ }
+ }
+ }
+}
+```
+
+ตั้งเป็น `deny` แอดเจนต์ย่อยจะลบคำอธิบายเครื่องมืองานทั้งหมดนั่นคือโมเดลจะไม่พยายามทำอะไร
+
+:::tip
+กฎเพื่อให้ชนะตามลำดับและ **กฎส่วนใหญ่ส่วนใหญ่จะสุดท้ายจะ** ในตัวอย่าง `*` (ปฏิเสธ) และ `orchestrator-*` (อาจจะ) แต่เนื่องจาก `orchestrator-*` มาหลัง `*` ผลลัพธ์ที่เป็น `allow`
+:::
+
+:::tip
+ไม่จำเป็นต้องให้ตัวแทนย่อยใดๆก็ได้โดยตรงผ่านเมนูเติมข้อความอัตโนมัติ `@` สำหรับความต้องการของงานของตัวแทนจะเพิกเฉย
+:::
+
+---
+
+### สี
+
+ปรับแต่งความต้องการของตัวแทนใน UI ด้วยตัวเลือก `color` เพื่อดูลักษณะเฉพาะของตัวแทนในการปฏิบัติตาม
+
+ใช้สีฐานสิบหกที่ถูกต้อง (เช่น `#FF5733`) หรือระบบควบคุม: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`
+
+```json title="opencode.json"
+{
+ "agent": {
+ "creative": {
+ "color": "#ff6b6b"
+ },
+ "code-reviewer": {
+ "color": "accent"
+ }
+ }
+}
+```
+
+---
+
+### ท็อปพี
+
+หลักการของปฏิกิริยาด้วยตัวเลือก `top_p` ทางเลือกแทนการควบคุมการสุ่ม
+
+```json title="opencode.json"
+{
+ "agent": {
+ "brainstorm": {
+ "top_p": 0.9
+ }
+ }
+}
+```
+
+ค่าครองชีพ 0.0 ถึง 1.0 ค่าที่ต่ำกว่าจะเน้นไปที่ค่าที่มักจะเป็นเวลานาน
+
+---
+
+### นั่น
+
+ข้อมูลอื่นๆ ที่คุณระบุในบางครั้งตัวแทนของคุณไปที่ **ส่งผ่านโดยตรง** ในส่วนของโครงสร้างข้อมูล คุณจะต้องดำเนินการและตรวจสอบเฉพาะของข้อมูลเท่านั้นได้
+
+เช่น ด้วยรูปแบบการใช้เหตุผลของ OpenAI อ่านการควบคุมเพื่อให้เหตุผล:
+
+```json title="opencode.json" {6,7}
+{
+ "agent": {
+ "deep-thinker": {
+ "description": "Agent that uses high reasoning effort for complex problems",
+ "model": "openai/gpt-5",
+ "reasoningEffort": "high",
+ "textVerbosity": "low"
+ }
+ }
+}
+```
+
+ตรวจสอบเพิ่มเติมในรุ่นและเฉพาะเจาะจงการสแกนเอกสารของคุณเพื่อดูภาพรวม
+
+:::tip
+ต้องการ `opencode models` เพื่อดูรายการที่สมบูรณ์
+:::
+
+---
+
+## สร้างตัวแทน
+
+การสร้างตัวแทนใหม่ได้อีกครั้งตามลำดับ:
+
+```bash
+opencode agent create
+```
+
+คำสั่งแบบในเวลานี้:
+
+1. ถามว่าจะบันทึกตัวแทนได้ที่ไหนระดับโลกหรือเฉพาะโครงการ
+2. คำอธิบายสิ่งที่ตัวแทนควรทำ
+3. สร้างพรอมต์และตัวระบุชนิดของที่เหมาะสม
+4. ให้คุณเลือกเครื่องมือที่ตัวแทนอย่างเป็นทางการ
+5. ในที่สุดสร้างไฟล์มาร์กดาวน์ด้วยเอเจนต์
+
+---
+
+## กรณีการใช้งาน
+
+ต่อไปเป็นกรณีการใช้งานทั่วไปสำหรับตัวแทนต่างๆ
+
+- **ตัวแทนที่กำลังพัฒนา**: งานพัฒนาใหม่ล่าสุดโดยอาศัยเครื่องมือทั้งหมด
+- **ตัวแทนแผน**: ผู้วิเคราะห์และวางแผนโดยไม่ทำการเปลี่ยนแปลง
+- **ตัวแทนตรวจสอบ**: ตรวจสอบโค้ดพร้อมแบบอ่านเพียงอย่างเดียวพร้อมเครื่องมือเอกสารประกอบ
+- **ตัวแทนแก้ไขข้อบกพร่อง**: ตรวจสอบโดยการตรวจสอบโดยการควบคุมตีและผู้อ่าน
+- **ตัวแทนเอกสาร**: เนื้อหาเอกสารด้วยไฟล์จัดเก็บข้อมูลที่ระบบปฏิบัติตาม
+
+---
+
+## แปลความหมายได้
+
+ตัวแทนอธิบายว่าคุณอาจจะพบว่ามีประโยชน์
+
+:::tip
+คุณเป็นตัวแทนคุณต้องการแบ่งปันหรือไม่? [ส่งประชาสัมพันธ์](https://github.com/anomalyco/opencode)
+:::
+
+---
+
+### ตัวแทนเอกสาร
+
+```markdown title="~/.config/opencode/agents/docs-writer.md"
+---
+description: Writes and maintains project documentation
+mode: subagent
+tools:
+ bash: false
+---
+
+You are a technical writer. Create clear, comprehensive documentation.
+
+Focus on:
+
+- Clear explanations
+- Proper structure
+- Code examples
+- User-friendly language
+```
+
+---
+
+### ผู้ตรวจสอบความปลอดภัย
+
+```markdown title="~/.config/opencode/agents/security-auditor.md"
+---
+description: Performs security audits and identifies vulnerabilities
+mode: subagent
+tools:
+ write: false
+ edit: false
+---
+
+You are a security expert. Focus on identifying potential security issues.
+
+Look for:
+
+- Input validation vulnerabilities
+- Authentication and authorization flaws
+- Data exposure risks
+- Dependency vulnerabilities
+- Configuration security issues
+```
diff --git a/packages/web/src/content/docs/th/cli.mdx b/packages/web/src/content/docs/th/cli.mdx
new file mode 100644
index 000000000..a3c3a8ace
--- /dev/null
+++ b/packages/web/src/content/docs/th/cli.mdx
@@ -0,0 +1,601 @@
+---
+title: CLI
+description: OpenCode CLI รับสัญญาณและคำสั่ง
+---
+
+import { Tabs, TabItem } from "@astrojs/starlight/components"
+
+OpenCode CLI โดยเฉพาะอย่างยิ่งจะเริ่มต้น [TUI](/docs/tui) ไม่ต้องทำงานโดยไม่มีข้อใดใดๆ
+
+```bash
+opencode
+```
+
+การยอมรับคำสั่งตามเอกสารในนั้นด้วยเหตุนี้ทำให้คุณสามารถพบกับ OpenCode โดยทางโปรแกรมได้
+
+```bash
+opencode run "Explain how closures work in JavaScript"
+```
+
+---
+
+### tui
+
+เริ่มเปิดให้ผู้ใช้เริ่มใช้ OpenCode
+
+```bash
+opencode [project]
+```
+
+#### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| ------------ | ----- | ------------------------------------------ |
+| `--continue` | `-c` | มาดูกันเป็นครั้งสุดท้าย |
+| `--session` | `-s` | รหัสให้ดีเพื่อเหตุการณ์ |
+| `--prompt` | | แจ้งการใช้งาน |
+| `--model` | `-m` | รูปแบบการใช้งานรูปแบบ provider/model |
+| `--agent` | | ตัวแทนการรับ |
+| `--port` | | ท่าเรือที่จะฟัง |
+| `--hostname` | | ชื่อที่จะฟัง |
+
+---
+
+## คำสั่ง
+
+OpenCode CLI ยังมีคำสั่งอีกมากมาย
+
+---
+
+### agent
+
+จัดการตัวแทนสำหรับ OpenCode
+
+```bash
+opencode agent [command]
+```
+
+---
+
+### attach
+
+สาเหตุว่าทำไมเซิร์ฟเวอร์แบ็กเอนด์ OpenCode ที่รันจริงๆ ซึ่งเริ่มต้นผ่านคำสั่ง `serve` หรือ `web`
+
+```bash
+opencode attach [url]
+```
+
+วิธีการใช้ TUI กับแบ็กเอนด์ OpenCode ตัวอย่าง:
+
+```bash
+# Start the backend server for web/mobile access
+opencode web --port 4096 --hostname 0.0.0.0
+
+# In another terminal, attach the TUI to the running backend
+opencode attach http://10.20.30.40:4096
+```
+
+#### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| ----------- | ----- | --------------------------------- |
+| `--dir` | | ไดเร็กทอรีการทำงานเพื่อเริ่มต้น TUI ใน |
+| `--session` | `-s` | รหัสให้ดีเพื่อเหตุการณ์ |
+
+---
+
+#### create
+
+สร้างตัวแทนใหม่ด้วยคืนนี้
+
+```bash
+opencode agent create
+```
+
+คำสั่งนี้จะแนะนำคุณตลอดไปจนถึงเอเจนต์ใหม่พร้อมพร้อมท์ระบบและประสิทธิภาพของเครื่องมือ
+
+---
+
+#### list
+
+รายชื่อตัวแทนทั้งหมดทั้งหมด
+
+```bash
+opencode agent list
+```
+
+---
+
+### auth
+
+ขอแจ้งให้ทราบข้อมูลและข้อมูลเข้าสู่ระบบสำหรับ...
+
+```bash
+opencode auth [command]
+```
+
+---
+
+#### login
+
+OpenCode มีประสิทธิภาพสูงโดยรายชื่อทั่วไปที่ [Models.dev](https://models.dev) ดังนั้นเหตุผลที่เป็นไปได้ API สำหรับความต้องการใดๆ จำเป็นต้องใช้ข้อมูลนี้ถูกที่ `~/.local/share/opencode/auth.json`
+
+```bash
+opencode auth login
+```
+
+เมื่อ OpenCode เริ่มต้นระบบจะโหลดจากไฟล์ข้อมูลรับรองและไม่จำเป็นต้องคำนึงถึงสิ่งใด ๆ ที่จะพบไฟล์ของคุณหรือ `.env` ในโปรเจ็กต์ของคุณ
+
+---
+
+#### list
+
+การแจ้งเตือนที่พิสูจน์ความถูกต้องทั้งหมดซึ่งจัดเป็นไฟล์ข้อมูลสามารถตรวจสอบได้
+
+```bash
+opencode auth list
+```
+
+หรือฮิลตันสั้น
+
+```bash
+opencode auth ls
+```
+
+---
+
+#### logout
+
+นำคุณออกจากระบบของมักจะพบข้อมูลจากไฟล์รับรองข้อมูล
+
+```bash
+opencode auth logout
+```
+
+---
+
+### github
+
+การจัดการเอเจนต์ GitHub สำหรับพื้นที่อัตโนมัติ
+
+```bash
+opencode github [command]
+```
+
+---
+
+#### install
+
+ตู้เสื้อผ้าเอเจนต์ GitHub ในที่เก็บของคุณ
+
+```bash
+opencode github install
+```
+
+ไม่ว่าคุณจะเริ่มต้นโฟลว์ GitHub Actions และแนะนำคุณตลอดประวัติศาสตร์ [เรียนรู้เพิ่มเติม](/docs/github)
+
+---
+
+#### run
+
+ต้องการตัวแทน GitHub อีกครั้งใน GitHub Actions
+
+```bash
+opencode github run
+```
+
+##### ยอด
+
+| ยอด | คำอธิบาย |
+| --------- | -------------------------------------- |
+| `--event` | การจำลอง GitHub เพื่อขอรับตัวแทน |
+| `--token` | ความเป็นส่วนตัวของ GitHub |
+
+---
+
+### mcp
+
+เซิร์ฟเวอร์เซิร์ฟเวอร์ Model Context Protocol
+
+```bash
+opencode mcp [command]
+```
+
+---
+
+#### add
+
+เพลิดเพลินไปกับแขก MCP ในคืนนี้ของคุณ
+
+```bash
+opencode mcp add
+```
+
+คำสั่งนี้จะแนะนำคุณในคืนนี้ MCP ความเชื่อหรือในตำนาน
+
+---
+
+#### list
+
+เชิญแขก MCP ที่ RAM ทั้งหมดและดำรงอยู่
+
+```bash
+opencode mcp list
+```
+
+ต้องใช้หอพักระยะสั้น
+
+```bash
+opencode mcp ls
+```
+
+---
+
+#### auth
+
+ตัดสิทธิ์กับแขก MCP ที่ OAuth
+
+```bash
+opencode mcp auth [name]
+```
+
+ไม่ต้องระบุชื่อเซิร์ฟเวอร์ คุณจะได้รับแจ้งจากเซิร์ฟเวอร์ที่รองรับ OAuth ที่พร้อมให้บริการ
+
+รับรองว่ารองรับ OAuth และสถานะยืนยันสิทธิ์ได้
+
+```bash
+opencode mcp auth list
+```
+
+ต้องใช้หอพักระยะสั้น
+
+```bash
+opencode mcp auth ls
+```
+
+---
+
+#### logout
+
+ข้อมูลรับรอง OAuth สำหรับผู้เข้าชม MCP
+
+```bash
+opencode mcp logout [name]
+```
+
+---
+
+#### debug
+
+โปรดตรวจสอบ OAuth สำหรับเซิร์ฟเวอร์ MCP
+
+```bash
+opencode mcp debug <name>
+```
+
+---
+
+### models
+
+การทดลองแบบจำลองทั้งหมดทั้งหมดจากที่เก็บข้อมูลนี้
+
+```bash
+opencode models [provider]
+```
+
+คำสั่งนี้แสดงให้เห็นโมเดลทั้งหมดและเป็นที่เก็บข้อมูลของคุณ `provider/model`
+
+คุณสามารถใช้ชื่อรุ่นได้อย่างแม่นยำใน [ ฟังก์ชั่นของคุณ](/docs/config/)
+
+สามารถส่งรหัสมีหน้าที่เพื่อกรองโมเดลตามส่วนรายนั้นได้
+
+```bash
+opencode models anthropic
+```
+
+#### ยอด
+
+| ยอด | คำอธิบาย |
+| ----------- | ------------------------------------------------------------ |
+| `--refresh` | โครงสร้างแคชโมเดลจาก models.dev |
+| `--verbose` | ใช้โมเดลนี้เพื่อตรวจสอบ (รวมข้อมูลเมตาเช่นต้นทุน) |
+
+ใช้แฟล็ก `--refresh` ในที่นี้รายการโมเดลที่แคชไว้ตรงนั้นมีประโยชน์เพิ่มโมเดลใหม่ให้กับระบบและขอดูโมเดลของข้อมูลใน OpenCode
+
+```bash
+opencode models --refresh
+```
+
+---
+
+### run
+
+ต้องการ opencode ภายนอกไม่มีการแจ้งโดยแจ้งแจ้งโดยตรง
+
+```bash
+opencode run [message..]
+```
+
+มีประโยชน์สำหรับการทำงานร่วมกันของการทำงานอัตโนมัติหรือเมื่อต้องการให้ตอบสนองอย่างรวดเร็วเปิด TUI เป็นตัวอย่าง
+
+```bash "opencode run"
+opencode run Explain the use of context in Go
+```
+
+ขอแนบไปกับฟีเจอร์นี้ `opencode serve` ทำงานอยู่อีกครั้งเวลาของแขก MCP การทำงานหลายอย่าง:
+
+```bash
+# Start a headless server in one terminal
+opencode serve
+
+# In another terminal, run commands that attach to it
+opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
+```
+
+#### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| ------------ | ----- | ------------------------------------------------------------------ |
+| `--command` | | คำสั่งให้รันใช้ข้อความสำหรับ args |
+| `--continue` | `-c` | มาดูกันเป็นครั้งสุดท้าย |
+| `--session` | `-s` | รหัสให้ดีเพื่อเหตุการณ์ |
+| `--share` | | เซสชั่น |
+| `--model` | `-m` | รูปแบบการใช้งานรูปแบบ provider/model |
+| `--agent` | | ตัวแทนการรับ |
+| `--file` | `-f` | แนบไปกับข้อความได้เลย |
+| `--format` | | การรักษา: (จัดรูปแบบ) หรือ json ( อดทนดิบ JSON) |
+| `--title` | | ชื่อเรื่องสำหรับการเฉลิมฉลอง (ใช้พร้อมท์ที่สามารถนำมาใช้กับค่าตัวยึด) |
+| `--attach` | | แนบไปกับผู้โดยสาร opencode สำนักงานอยู่ (เช่น http://localhost:4096) |
+| `--port` | | ท่าเรือสำหรับผู้โดยสารภายในเครื่อง (ตรวจสอบเป็นพอร์ตสุ่ม) |
+
+---
+
+### serve
+
+เริ่มต้นเลานจ์ OpenCode ไม่เพียงแต่สำหรับนักท่องเที่ยวเท่านั้น API ภาพถ่าย [เอกสารรับรอง](/docs/server) เพื่อดู HTTP เต็มรูปแบบ
+
+```bash
+opencode serve
+```
+
+ตัวควบคุมจะเริ่มต้นเซิร์ฟเวอร์ HTTP ให้ API เข้าถึงฟังก์ชันการทำงานของ opencode ได้อย่างมีประสิทธิภาพ TUI จัดเตรียม `OPENCODE_SERVER_PASSWORD` ประสิทธิภาพของฮาร์ดแวร์ฮาร์ดแวร์ความถูกต้องพื้นฐาน HTTP (ตัวควบคุมของฮาร์ดแวร์คือ `opencode`)
+
+#### ยอด
+
+| ยอด | คำอธิบาย |
+| ------------ | ------------------------------------------ |
+| `--port` | ท่าเรือที่จะฟัง |
+| `--hostname` | ชื่อที่จะฟัง |
+| `--mdns` | โปรดตรวจสอบ mDNS |
+| `--cors` | จำเป็นต้องมีเพิ่มเติมเพื่อการทำงาน CORS |
+
+---
+
+### session
+
+การจัดการ OpenCode
+
+```bash
+opencode session [command]
+```
+
+---
+
+#### list
+
+การแจ้งเตือน OpenCode ทั้งหมด
+
+```bash
+opencode session list
+```
+
+##### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| ------------- | ----- | ------------------------------------ |
+| `--max-count` | `-n` | จำกัดการควบคุม N ใหม่ล่าสุด |
+| `--format` | | ตารางตารางหรือ json (ตาราง) |
+
+---
+
+### stats
+
+แสดงสถิติการเริ่มต้นและค่าใช้จ่ายสำหรับ OpenCode ของคุณ
+
+```bash
+opencode stats
+```
+
+#### ยอด
+
+| ยอด | คำอธิบาย |
+| ----------- | --------------------------------------------------------------------------- |
+| `--days` | แสดงสถิติของ N วันในอดีต (ตลอดเวลา) |
+| `--tools` | เครื่องมือที่มองเห็น (ทั้งหมด) |
+| `--models` | แสดงรายละเอียดการใช้งานโมเดล (ซ่อนไว้ตามตัวอย่าง) เอกสารหมายเลขนั้น N หมายเลขบน |
+| `--project` | กรองตามโครงการ (โครงการทั้งหมดที่มีอยู่: โครงการปัจจุบัน) |
+
+---
+
+### export
+
+ส่งออกข้อมูลข่าวสารเป็น JSON
+
+```bash
+opencode export [sessionID]
+```
+
+ไม่ระบุรหัสผู้ดูแลระบบ คุณจะได้รับแจ้งจากการปรับปรุงดังกล่าว
+
+---
+
+### import
+
+นำเข้าข้อมูลที่ดีจากไฟล์ JSON หรือแชร์ OpenCode URL
+
+```bash
+opencode import <file>
+```
+
+ไม่เคยนำเข้าไฟล์ในเครื่องหรือแชร์ OpenCode URL
+
+```bash
+opencode import session.json
+opencode import https://opncd.ai/s/abc123
+```
+
+---
+
+### web
+
+เชิญแขก OpenCode อย่างเป็นทางการด้วยเว็บอินเตอร์เฟส
+
+```bash
+opencode web
+```
+
+ตัวควบคุมจะเริ่มต้นเซิร์ฟเวอร์ HTTP และเปิดเว็บเองเพื่อเข้าถึง OpenCode ผ่านทางเว็บอินเตอร์เฟส จัดเตรียม `OPENCODE_SERVER_PASSWORD` สำหรับคำอธิบายคุณสมบัติความถูกต้องพื้นฐาน HTTP (ตัวยึดของฮาร์ดแวร์คือ `opencode`)
+
+#### ยอด
+
+| ยอด | คำอธิบาย |
+| ------------ | ------------------------------------------ |
+| `--port` | ท่าเรือที่จะฟัง |
+| `--hostname` | ชื่อที่จะฟัง |
+| `--mdns` | โปรดตรวจสอบ mDNS |
+| `--cors` | จำเป็นต้องมีเพิ่มเติมเพื่อการทำงาน CORS |
+
+---
+
+### acp
+
+เริ่มต้นเซิร์ฟเวอร์ ACP (Agent Client Protocol)
+
+```bash
+opencode acp
+```
+
+สั่งนี้เริ่มต้นผู้โดยสาร ACP ที่สื่อสารผ่าน stdin/stdout nd-JSON
+
+#### ยอด
+
+| ยอด | คำอธิบาย |
+| ------------ | --------------------- |
+| `--cwd` | ไดเร็กทอรีการทำงาน |
+| `--port` | ท่าเรือที่จะฟัง |
+| `--hostname` | ชื่อที่จะฟัง |
+
+---
+
+### uninstall
+
+ไม่ว่า OpenCode และลบไฟล์ทั้งหมดทั้งหมด
+
+```bash
+opencode uninstall
+```
+
+#### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| --------------- | ----- | ------------------------------------------- |
+| `--keep-config` | `-c` | เก็บไฟล์ไว้ที่นี่ |
+| `--keep-data` | `-d` | บางครั้งเซสชั่นและสแน็ปช็อต |
+| `--dry-run` | | แสดงสิ่งที่จะลบออกโดยไม่ต้องใช้ออก |
+| `--force` | `-f` | ข้อความแจ้งข้อความ |
+
+---
+
+### upgrade
+
+อัปเดต opencode เป็นครั้งสุดท้ายหรือเฉพาะเจาะจง
+
+```bash
+opencode upgrade [target]
+```
+
+เราปรับปรุงเป็นระดับล่าสุด
+
+```bash
+opencode upgrade
+```
+
+เพื่อพัฒนาเป็นฮอนด้าโดยเฉพาะ
+
+```bash
+opencode upgrade v0.1.48
+```
+
+#### ยอด
+
+| ยอด | สั้น | คำอธิบาย |
+| ---------- | ----- | ----------------------------------------------------------------- |
+| `--method` | `-m` | วิธีการติดตั้งที่ใช้curl, npm, pnpm, ขนมปัง, ชง |
+
+---
+
+## ระดับโลก
+
+opencode CLI รับค่าสถานะสากลต่อไป
+
+| ยอด | สั้น | คำอธิบาย |
+| -------------- | ----- | ------------------------------------ |
+| `--help` | `-h` | แสดงความช่วยเหลือ |
+| `--version` | `-v` | หมายเลขการพิมพ์ |
+| `--print-logs` | | พิมพ์บันทึกไปยัง stderr |
+| `--log-level` | | ระดับการเรียนรู้ (DEBUG, INFO, WARN, ERROR) |
+
+---
+
+## อีกครั้งหนึ่ง
+
+OpenCode สามารถทำได้ตามที่กล่าวมาข้างต้น
+
+| ส่วนนั้น | พิมพ์ | คำอธิบาย |
+| ------------------------------------- | ------- | ------------------------------------------------- |
+| `OPENCODE_AUTO_SHARE` | บูลิน | แชร์การแจ้งเตือน |
+| `OPENCODE_GIT_BASH_PATH` | เชือก | เข้าสู่ Git Bash ได้บน Windows |
+| `OPENCODE_CONFIG` | เชือก | ไปยังไฟล์ฟิลม์ |
+| `OPENCODE_CONFIG_DIR` | เชือก | เพื่อเป็นไดเร็กทอรีคุณสามารถดู |
+| `OPENCODE_CONFIG_CONTENT` | เชือก | เนื้อหาเหมือนกับ json แบบอินไลน์ |
+| `OPENCODE_DISABLE_AUTOUPDATE` | บูลิน | ตรวจสอบระบบควบคุมอัตโนมัติ |
+| `OPENCODE_DISABLE_PRUNE` | บูลิน | การควบคุมการกำจัดข้อมูลเก่า |
+| `OPENCODE_DISABLE_TERMINAL_TITLE` | บูลิน | เพื่อเป็นชื่อระบบควบคุมอัตโนมัติ |
+| `OPENCODE_PERMISSION` | เชือก | มีสิทธิ์ json แบบอินไลน์ |
+| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | บูลิน | การติดตามผลเริ่มต้น |
+| `OPENCODE_DISABLE_LSP_DOWNLOAD` | บูลิน | ค่ำคืนนี้อาหารค่ำ LSP อัตโนมัติ |
+| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | บูลิน | รูปแบบการทดลอง |
+| `OPENCODE_DISABLE_AUTOCOMPACT` | บูลิน | เพื่อการกระชับระบบอัตโนมัติ |
+| `OPENCODE_DISABLE_CLAUDE_CODE` | บูลิน | การควบคุมดูแลจาก `.claude` (พร้อมท์ + ทักษะ) |
+| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | บูลิน | การควบคุมดูแล `~/.claude/CLAUDE.md` |
+| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | บูลิน | ต่อมา `.claude/skills` |
+| `OPENCODE_DISABLE_MODELS_FETCH` | บูลิน | ปิดใช้การดึงโมเดลจากแหล่งที่มาของข้อมูล |
+| `OPENCODE_FAKE_VCS` | เชือก | ประธานาธิบดี VCS ปลอมเพื่อการทดสอบ |
+| `OPENCODE_DISABLE_FILETIME_CHECK` | บูลิน | ตรวจสอบเวลาไฟล์เพื่อตรวจสอบ |
+| `OPENCODE_CLIENT` | เชือก | คนที่ระบุลูกค้า (ส่วนคือ `cli`) |
+| `OPENCODE_ENABLE_EXA` | บูลิน | นอกจากนี้เรายังมีเว็บ Exa |
+| `OPENCODE_SERVER_PASSWORD` | เชือก | เอกสารสิทธิ์พื้นฐานสำหรับ `serve`/@@1@@ |
+| `OPENCODE_SERVER_USERNAME` | เชือก | เมนบอร์ดระบบควบคุมคุณสมบัติความถูกต้องพื้นฐาน ( `opencode`) |
+| `OPENCODE_MODELS_URL` | เชือก | ขอขอบคุณ URL สำหรับข้อมูลดึงข้อมูลโมเดล |
+
+---
+
+### ส่วนนั้น
+
+อาจเป็นไปได้ว่าคุณสมบัติการทดลองนี้สามารถปรับเปลี่ยนหรือถูกลบออกได้
+
+| ส่วนนั้น | พิมพ์ | คำอธิบาย |
+| ----------------------------------------------- | ------- | --------------------------------------- |
+| `OPENCODE_EXPERIMENTAL` | บูลิน | ในที่สุดเราก็ทดลองทั้งหมด |
+| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | บูลิน | การแจ้งเตือนการแจ้งเตือน |
+| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | บูลิน | ยังไงก็ตามการเลือกที่จะเลือกใน TUI |
+| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | ตัวเลข | การหมดเวลาเริ่มต้นสำหรับคำสั่ง bash ในหน่วย ms |
+| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | ตัวเลข | เหตุผลที่สูงสุดสำหรับตอบกลับ LLM |
+| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | บูลิน | เพื่อให้ตัวดูไฟล์สำหรับ dir ทั้งหมด |
+| `OPENCODE_EXPERIMENTAL_OXFMT` | บูลิน | เพื่อให้เป็นไปตามแมตเตอร์ oxfmt |
+| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | บูลิน | สามารถใช้เครื่องมือทดลอง LSP |
+| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | บูลิน | ไม่ใช่ตัวดูไฟล์ |
+| `OPENCODE_EXPERIMENTAL_EXA` | บูลิน | คุณสมบัติ Exa ทดลอง |
+| `OPENCODE_EXPERIMENTAL_LSP_TY` | บูลิน | ตรวจสอบประเภท LSP แบบทดลอง |
+| `OPENCODE_EXPERIMENTAL_MARKDOWN` | บูลิน | สามารถใช้มาร์กดาวน์รุ่นทดลองได้ |
+| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | บูลิน | เพื่อเป็นโหมด |
diff --git a/packages/web/src/content/docs/th/commands.mdx b/packages/web/src/content/docs/th/commands.mdx
new file mode 100644
index 000000000..eacd35934
--- /dev/null
+++ b/packages/web/src/content/docs/th/commands.mdx
@@ -0,0 +1,323 @@
+---
+title: คำสั่ง
+description: คำสั่งสร้างคำสั่งอีกครั้งที่ซ้ำกัน
+---
+
+คำสั่งดังกล่าวระบุพรอมต์จำเป็นต้องร้องขอเมื่อคำสั่งนั้นถูกดำเนินการใน TUI
+
+```bash frame="none"
+/my-command
+```
+
+คำสั่งแบบกำหนดเองเป็นส่วนเพิ่มเติมจากคำสั่งในตัว เช่น `/init`, `/undo`, `/redo`, `/share`, `/help` [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง)
+
+---
+
+## สร้างไฟล์คำสั่ง
+
+สร้างไฟล์มาร์กดาวน์ในไดเร็กทอรี `commands/` เพื่อกำหนดคำสั่งทำตาม
+
+สร้าง `.opencode/commands/test.md`:
+
+```md title=".opencode/commands/test.md"
+---
+description: Run tests with coverage
+agent: build
+model: anthropic/claude-3-5-sonnet-20241022
+---
+
+Run the full test suite with coverage report and show any failures.
+Focus on the failing tests and suggest fixes.
+```
+
+frontmatter กำหนดคุณสมบัติคำสั่งเนื้อหาโดยละเอียด
+
+ใช้คำสั่งโดยพิมพ์ `/` คำสั่งคำสั่ง
+
+```bash frame="none"
+"/test"
+```
+
+---
+
+## เม็กซิโก
+
+คำสั่งนี้จะผ่าน OpenCode หรือโดยการดำเนินการไฟล์มาร์กดาวน์ในไดเร็กทอรี `commands/`
+
+---
+
+### JSON
+
+ใช้ส่วน `command` ใน OpenCode ของคุณ [config](/docs/config):
+
+```json title="opencode.jsonc" {4-12}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "command": {
+ // This becomes the name of the command
+ "test": {
+ // This is the prompt that will be sent to the LLM
+ "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
+ // This is shown as the description in the TUI
+ "description": "Run tests with coverage",
+ "agent": "build",
+ "model": "anthropic/claude-3-5-sonnet-20241022"
+ }
+ }
+}
+```
+
+รันคำสั่งนี้ใน TUI:
+
+```bash frame="none"
+/test
+```
+
+---
+
+### มาร์กดาวน์
+
+หากต้องการกำหนดคำสั่งของไฟล์มาร์กดาวน์ได้คุณจะต้องดำเนินการใน:
+
+- ทั่วโลก: `~/.config/opencode/commands/`
+- ต่อโครงการ: `.opencode/commands/`
+
+```markdown title="~/.config/opencode/commands/test.md"
+---
+description: Run tests with coverage
+agent: build
+model: anthropic/claude-3-5-sonnet-20241022
+---
+
+Run the full test suite with coverage report and show any failures.
+Focus on the failing tests and suggest fixes.
+```
+
+ชื่อไฟล์มาร์กดาวน์ในชื่อคำสั่งเช่น `test.md` ให้
+คุณวิ่ง:
+
+```bash frame="none"
+/test
+```
+
+---
+
+## เรามีพร้อมท์
+
+พร้อมรองรับคำสั่งรองรับตามตำแหน่งและพิเศษหลายรายการ
+
+---
+
+### บทความโทรทัศน์
+
+ส่งผ่านข้อเขียนไปยังคำสั่งของวงดนตรี `$ARGUMENTS`
+
+```md title=".opencode/commands/component.md"
+---
+description: Create a new component
+---
+
+Create a new React component named $ARGUMENTS with TypeScript support.
+Include proper typing and basic structure.
+```
+
+รันคำสั่งพร้อมอาร์กิวเมนต์:
+
+```bash frame="none"
+/component Button
+```
+
+และ `$ARGUMENTS` จะเป็นอย่างไร `Button`
+
+เราสามารถเข้าถึงแต่ละจุดได้ตามความต้องการตามหลัก:
+
+- `$1` - ​​​​อาร์กิวเมนต์แรก
+- `$2` - ​​​​อาร์กิวเมนต์ที่สอง
+- `$3` - ​​​​อาร์กิวเมนต์ที่สาม
+- นั่น...
+
+เช่น:
+
+```md title=".opencode/commands/create-file.md"
+---
+description: Create a new file with content
+---
+
+Create a file named $1 in the directory $2
+with the following content: $3
+```
+
+รันคำสั่ง:
+
+```bash frame="none"
+/create-file config.json src "{ \"key\": \"value\" }"
+```
+
+คุณจะรู้สึกได้ถึงความสูง:
+
+- `$1` กับ `config.json`
+- `$2` กับ `src`
+- `$3` กับ `{ "key": "value" }`
+
+---
+
+### ส่วนเชล
+
+ใช้ _!`command`_เพื่อที่จะฉีดประสิทธิภาพสูง [bash command](/docs/tui#bash-commands) ติดตั้งพรอมต์ของคุณ
+
+เพื่อเป็นคำสั่งสร้างความพยายามเพื่อวิเคราะห์การทดสอบของการทดสอบ:
+
+```md title=".opencode/commands/analyze-coverage.md"
+---
+description: Analyze test coverage
+---
+
+Here are the current test results:
+!`npm test`
+
+Based on these results, suggest improvements to increase coverage.
+```
+
+หรือตรวจสอบการเปลี่ยนแปลงล่าสุด:
+
+```md title=".opencode/commands/review-changes.md"
+---
+description: Review recent changes
+---
+
+Recent git commits:
+!`git log --oneline -10`
+
+Review these changes and suggest any improvements.
+```
+
+คำสั่งไดเร็กทอรีรากของโปรเจ็กต์การปฏิบัติตามคำสั่งพร้อมท์
+
+---
+
+### อ้างถึงไฟล์
+
+รวมไฟล์ในคำสั่งของคุณ `@` ในชื่อไฟล์
+
+```md title=".opencode/commands/review-component.md"
+---
+description: Review component
+---
+
+Review the component in @src/components/Button.tsx.
+Check for performance issues and suggest improvements.
+```
+
+เนื้อหาไฟล์จะถูกรวมไว้ด้วยการประกาศอย่างเป็นทางการ
+
+---
+
+## ต
+
+มาดูรายละเอียดเพิ่มเติมกัน
+
+---
+
+### เทม
+
+`template` กำหนดพรอมต์ที่จะเป็นไปได้ LLM จะดำเนินการคำสั่ง
+
+```json title="opencode.json"
+{
+ "command": {
+ "test": {
+ "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
+ }
+ }
+}
+```
+
+รายการไม่จำเป็น **จำเป็น**
+
+---
+
+### คำอธิบาย
+
+ใช้ตัวเลือก `description` เพื่อให้คำอธิบายโดยย่อเกี่ยวกับสิ่งที่คำสั่งทำ
+
+```json title="opencode.json"
+{
+ "command": {
+ "test": {
+ "description": "Run tests with coverage"
+ }
+ }
+}
+```
+
+คำอธิบายที่เป็นคำอธิบายใน TUI คุณต้องการเขียนคำสั่ง
+
+---
+
+### ตัวแทน
+
+ใช้ `agent` เพื่อระบุทางเลือกว่า [ตัวแทน](/docs/agents) ใดควรดำเนินการคำสั่งนี้
+นี่คือ [ตัวแทนย่อย](/docs/agents/#subagents) คำสั่งจะไม่จำเป็นต้องทำการย่อยตัวแทนย่อยตาม...
+เหตุผลที่ทำให้สิ่งนี้เป็นไปได้ `subtask` เป็น `false`
+
+```json title="opencode.json"
+{
+ "command": {
+ "review": {
+ "agent": "plan"
+ }
+ }
+}
+```
+
+ขึ้นอยู่กับ ** ตัวเลือก** หากไม่ได้ระบุเหตุผลว่าเป็นเอเจนต์ปัจจุบันของคุณ
+
+---
+
+### งานย่อย
+
+ใช้ `subtask` บูลีนเพื่อไม่จำเป็นต้องทำอะไรเลย [subagent](/docs/agents/#subagents)
+เพราะเหตุใดจะช่วยให้คำสั่งไม่ทำให้ระบบหลักของคุณเสียหาย และจะ **บังคับ** เอเจนต์ให้ความเห็นตัวแทนย่อย
+โปรดดู `mode` เพื่อดูการตั้งค่าเป็น `primary` ในคืนนี้ [agent](/docs/agents) แขก
+
+```json title="opencode.json"
+{
+ "command": {
+ "analyze": {
+ "subtask": true
+ }
+ }
+}
+```
+
+ส่วนนี้ **ทางเลือก**
+
+---
+
+### อย่างอย่างนั้น
+
+ใช้ `model` ไปจนถึงโมเดลเริ่มต้นสำหรับคำสั่งนี้
+
+```json title="opencode.json"
+{
+ "command": {
+ "analyze": {
+ "model": "anthropic/claude-3-5-sonnet-20241022"
+ }
+ }
+}
+```
+
+ส่วนนี้ **ทางเลือก**
+
+---
+
+## บิวท์อิน
+
+opencode มีคำสั่งในคำสั่งหลายเช่น `/init`, `/undo`, `/redo`, `/share`, `/help`; [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง)
+
+:::note
+คำสั่งนี้สามารถดำเนินการได้ในขั้นตอนนี้
+:::
+
+บันทึกคำสั่งด้วยชื่อเดียวกันคำสั่งย้ำคำสั่งใน
diff --git a/packages/web/src/content/docs/th/config.mdx b/packages/web/src/content/docs/th/config.mdx
new file mode 100644
index 000000000..273b40ee8
--- /dev/null
+++ b/packages/web/src/content/docs/th/config.mdx
@@ -0,0 +1,685 @@
+---
+title: การกำหนดค่า
+description: การใช้การกำหนดค่า OpenCode JSON
+---
+
+คุณสามารถกำหนดค่า OpenCode ได้โดยใช้ไฟล์กำหนดค่า JSON
+
+---
+
+## รูปแบบ
+
+OpenCode รองรับทั้งรูปแบบ **JSON** และ **JSONC** (JSON พร้อมความคิดเห็น)
+
+```jsonc title="opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ // Theme configuration
+ "theme": "opencode",
+ "model": "anthropic/claude-sonnet-4-5",
+ "autoupdate": true,
+}
+```
+
+---
+
+## สถานที่
+
+คุณสามารถวางการกำหนดค่าของคุณในสถานที่ต่าง ๆ สองสามแห่งและมี
+ลำดับความสำคัญที่แตกต่างกัน
+
+:::note
+ไฟล์การกำหนดค่า **ถูกรวมเข้าด้วยกัน** โดยไม่มีการแทนที่
+:::
+
+ไฟล์การกำหนดค่าจะถูกรวมเข้าด้วยกัน โดยไม่มีการแทนที่ การตั้งค่าจากตำแหน่งการกำหนดค่าต่อไปนี้จะรวมกัน การกำหนดค่าในภายหลังจะแทนที่การกำหนดค่าก่อนหน้าสำหรับคีย์ที่ขัดแย้งกันเท่านั้น การตั้งค่าที่ไม่ขัดแย้งจากการกำหนดค่าทั้งหมดจะยังคงอยู่
+
+ตัวอย่างเช่น หากการกำหนดค่าส่วนกลางของคุณตั้งค่า `theme: "opencode"` และ `autoupdate: true` และการกำหนดค่าโปรเจ็กต์ของคุณตั้งค่า `model: "anthropic/claude-sonnet-4-5"` การกำหนดค่าสุดท้ายจะรวมการตั้งค่าทั้งสามรายการไว้ด้วย
+
+---
+
+### ลำดับความสำคัญ
+
+แหล่งที่มาของการกำหนดค่าถูกโหลดตามลำดับนี้ (แหล่งที่มาภายหลังจะแทนที่แหล่งที่มาก่อนหน้า):
+
+1. **การกำหนดค่าระยะไกล** (จาก `.well-known/opencode`) - ค่าเริ่มต้นขององค์กร
+2. **การกำหนดค่าสากล** (`~/.config/opencode/opencode.json`) - การตั้งค่าของผู้ใช้
+3. **การกำหนดค่าแบบกำหนดเอง** (`OPENCODE_CONFIG` env var) - การแทนที่แบบกำหนดเอง
+4. **การกำหนดค่าโครงการ** (`opencode.json` ในโครงการ) - การตั้งค่าเฉพาะโครงการ
+5. **`.opencode` ไดเรกทอรี** - ตัวแทน คำสั่ง ปลั๊กอิน
+6. **การกำหนดค่าแบบอินไลน์** (`OPENCODE_CONFIG_CONTENT` env var) - การแทนที่รันไทม์
+
+ซึ่งหมายความว่าการกำหนดค่าโปรเจ็กต์สามารถแทนที่ค่าเริ่มต้นส่วนกลางได้ และการกำหนดค่าส่วนกลางสามารถแทนที่ค่าเริ่มต้นขององค์กรระยะไกลได้
+
+:::note
+ไดเรกทอรี `.opencode` และ `~/.config/opencode` ใช้ **ชื่อพหูพจน์** สำหรับไดเรกทอรีย่อย: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` และ `themes/` ชื่อเอกพจน์ (เช่น `agent/`) ยังรองรับความเข้ากันได้แบบย้อนหลังด้วย
+:::
+
+---
+
+### ระยะไกล
+
+องค์กรสามารถจัดเตรียมการกำหนดค่าเริ่มต้นผ่านทางจุดสิ้นสุด `.well-known/opencode` สิ่งนี้จะถูกดึงออกมาโดยอัตโนมัติเมื่อคุณตรวจสอบสิทธิ์กับผู้ให้บริการที่รองรับ
+
+โหลดการกำหนดค่าระยะไกลก่อน โดยทำหน้าที่เป็นเลเยอร์พื้นฐาน แหล่งการกำหนดค่าอื่นๆ ทั้งหมด (ส่วนกลาง โปรเจ็กต์) สามารถแทนที่ค่าเริ่มต้นเหล่านี้ได้
+
+ตัวอย่างเช่น หากองค์กรของคุณมีเซิร์ฟเวอร์ MCP ที่ถูกปิดใช้งานตามค่าเริ่มต้น:
+
+```json title="Remote config from .well-known/opencode"
+{
+ "mcp": {
+ "jira": {
+ "type": "remote",
+ "url": "https://jira.example.com/mcp",
+ "enabled": false
+ }
+ }
+}
+```
+
+คุณสามารถเปิดใช้งานเซิร์ฟเวอร์เฉพาะในการกำหนดค่าภายในเครื่องของคุณได้:
+
+```json title="opencode.json"
+{
+ "mcp": {
+ "jira": {
+ "type": "remote",
+ "url": "https://jira.example.com/mcp",
+ "enabled": true
+ }
+ }
+}
+```
+
+---
+
+### ทั่วโลก
+
+วางการกำหนดค่า OpenCode ส่วนกลางของคุณใน `~/.config/opencode/opencode.json` ใช้การกำหนดค่าส่วนกลางสำหรับการตั้งค่าทั้งผู้ใช้ เช่น ธีม ผู้ให้บริการ หรือปุ่มลัด
+
+การกำหนดค่าส่วนกลางจะแทนที่ค่าเริ่มต้นขององค์กรระยะไกล
+
+---
+
+### ต่อโครงการ
+
+เพิ่ม `opencode.json` ในรูทโปรเจ็กต์ของคุณ การกำหนดค่าโปรเจ็กต์มีความสำคัญสูงสุดในบรรดาไฟล์กำหนดค่ามาตรฐาน โดยจะแทนที่การกำหนดค่าทั้งส่วนกลางและระยะไกล
+
+:::tip
+วางการกำหนดค่าเฉพาะโปรเจ็กต์ไว้ที่รากของโปรเจ็กต์ของคุณ
+:::
+
+เมื่อ OpenCode เริ่มต้นระบบ จะค้นหาไฟล์กำหนดค่าในไดเร็กทอรีปัจจุบันหรือข้ามไปยังไดเร็กทอรี Git ที่ใกล้ที่สุด
+
+นอกจากนี้ยังปลอดภัยที่จะตรวจสอบใน Git และใช้สคีมาเดียวกันกับสคีมาระดับโลก
+
+---
+
+### เส้นทางที่กำหนดเอง
+
+ระบุเส้นทางไฟล์กำหนดค่าที่กำหนดเองโดยใช้ตัวแปรสภาพแวดล้อม `OPENCODE_CONFIG`
+
+```bash
+export OPENCODE_CONFIG=/path/to/my/custom-config.json
+opencode run "Hello world"
+```
+
+มีการโหลดการกำหนดค่าแบบกำหนดเองระหว่างการกำหนดค่าส่วนกลางและโครงการตามลำดับความสำคัญ
+
+---
+
+### ไดเรกทอรีที่กำหนดเอง
+
+ระบุไดเร็กทอรีการกำหนดค่าที่กำหนดเองโดยใช้ `OPENCODE_CONFIG_DIR`
+ตัวแปรสภาพแวดล้อม ไดเร็กทอรีนี้จะถูกค้นหาตัวแทน, คำสั่ง,
+โหมดและปลั๊กอินเหมือนกับไดเร็กทอรี `.opencode` มาตรฐานและควร
+เป็นไปตามโครงสร้างเดียวกัน
+
+```bash
+export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
+opencode run "Hello world"
+```
+
+ไดเร็กทอรีที่กำหนดเองถูกโหลดหลังจากไดเร็กทอรี config ส่วนกลางและ `.opencode` ดังนั้นจึง **สามารถแทนที่** การตั้งค่าได้
+
+---
+
+## สคีมา
+
+ไฟล์กำหนดค่ามีสคีมาที่กำหนดไว้ใน [**`opencode.ai/config.json`**](https://opencode.ai/config.json)
+
+ผู้แก้ไขของคุณควรสามารถตรวจสอบและเติมข้อความอัตโนมัติตามสคีมาได้
+
+---
+
+### TUI
+
+คุณสามารถกำหนดการตั้งค่าเฉพาะ TUI ผ่านตัวเลือก `tui`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "tui": {
+ "scroll_speed": 3,
+ "scroll_acceleration": {
+ "enabled": true
+ },
+ "diff_style": "auto"
+ }
+}
+```
+
+ตัวเลือกที่มี:
+
+- `scroll_acceleration.enabled` - ​​เปิดใช้งานการเร่งความเร็วการเลื่อนแบบ macOS **มีลำดับความสำคัญมากกว่า `scroll_speed`.**
+- `scroll_speed` - ​​ตัวคูณความเร็วการเลื่อนแบบกำหนดเอง (ค่าเริ่มต้น: `3` ขั้นต่ำ: `1`) ไม่สนใจหาก `scroll_acceleration.enabled` คือ `true`
+- `diff_style` - ​​ควบคุมการเรนเดอร์ต่าง `"auto"` ปรับให้เข้ากับความกว้างของเทอร์มินัล `"stacked"` จะแสดงคอลัมน์เดียวเสมอ
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ TUI ที่นี่](/docs/tui)
+
+---
+
+### เซิร์ฟเวอร์
+
+คุณสามารถกำหนดการตั้งค่าเซิร์ฟเวอร์สำหรับคำสั่ง `opencode serve` และ `opencode web` ผ่านตัวเลือก `server`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "server": {
+ "port": 4096,
+ "hostname": "0.0.0.0",
+ "mdns": true,
+ "mdnsDomain": "myproject.local",
+ "cors": ["http://localhost:5173"]
+ }
+}
+```
+
+ตัวเลือกที่มี:
+
+- `port` - ​​พอร์ตสำหรับฟัง
+- `hostname` - ​​ชื่อโฮสต์ที่จะฟัง เมื่อเปิดใช้งาน `mdns` และไม่ได้ตั้งชื่อโฮสต์ ค่าเริ่มต้นจะเป็น `0.0.0.0`
+- `mdns` - ​​เปิดใช้งานการค้นหาบริการ mDNS ซึ่งช่วยให้อุปกรณ์อื่นๆ บนเครือข่ายค้นพบเซิร์ฟเวอร์ OpenCode ของคุณได้
+- `mdnsDomain` - ​​ชื่อโดเมนที่กำหนดเองสำหรับบริการ mDNS ค่าเริ่มต้นเป็น `opencode.local` มีประโยชน์สำหรับการเรียกใช้หลายอินสแตนซ์บนเครือข่ายเดียวกัน
+- `cors` - ​​ต้นกำเนิดเพิ่มเติมเพื่ออนุญาต CORS เมื่อใช้เซิร์ฟเวอร์ HTTP จากไคลเอนต์ที่ใช้เบราว์เซอร์ ค่าจะต้องเป็นต้นกำเนิดแบบเต็ม (สคีมา + โฮสต์ + พอร์ตเสริม) เช่น `https://app.example.com`
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ที่นี่](/docs/server)
+
+---
+
+### เครื่องมือ
+
+คุณสามารถจัดการเครื่องมือที่ LLM สามารถใช้ได้ผ่านตัวเลือก `tools`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "tools": {
+ "write": false,
+ "bash": false
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือที่นี่](/docs/tools)
+
+---
+
+### โมเดล
+
+คุณสามารถกำหนดค่าผู้ให้บริการและรุ่นที่คุณต้องการใช้ในการกำหนดค่า OpenCode ของคุณได้ผ่านตัวเลือก `provider`, `model` และ `small_model`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {},
+ "model": "anthropic/claude-sonnet-4-5",
+ "small_model": "anthropic/claude-haiku-4-5"
+}
+```
+
+ตัวเลือก `small_model` จะกำหนดค่าโมเดลแยกต่างหากสำหรับงานที่ไม่ซับซ้อน เช่น การสร้างชื่อเรื่อง ตามค่าเริ่มต้น OpenCode จะพยายามใช้โมเดลที่ถูกกว่าหากมีให้บริการจากผู้ให้บริการของคุณ ไม่เช่นนั้นโมเดลจะกลับไปเป็นโมเดลหลักของคุณ
+
+ตัวเลือกผู้ให้บริการอาจรวมถึง `timeout` และ `setCacheKey`:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "anthropic": {
+ "options": {
+ "timeout": 600000,
+ "setCacheKey": true
+ }
+ }
+ }
+}
+```
+
+- `timeout` - ​​คำขอหมดเวลาเป็นมิลลิวินาที (ค่าเริ่มต้น: 300000) ตั้งค่าเป็น `false` เพื่อปิดใช้งาน
+- `setCacheKey` - ​​ตรวจสอบให้แน่ใจว่าได้ตั้งค่าคีย์แคชสำหรับผู้ให้บริการที่กำหนดเสมอ
+
+คุณยังสามารถกำหนดค่า [รุ่นท้องถิ่น](/docs/models#local) ได้ [เรียนรู้เพิ่มเติม](/docs/models)
+
+---
+
+#### ตัวเลือกเฉพาะของผู้ให้บริการ
+
+ผู้ให้บริการบางรายรองรับตัวเลือกการกำหนดค่าเพิ่มเติมนอกเหนือจากการตั้งค่า `timeout` และ `apiKey` ทั่วไป
+
+##### อเมซอน ข้อเท็จจริง
+
+Amazon Bedrock รองรับ AWS-การกำหนดค่าเฉพาะ:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "amazon-bedrock": {
+ "options": {
+ "region": "us-east-1",
+ "profile": "my-aws-profile",
+ "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
+ }
+ }
+ }
+}
+```
+
+- `region` - ​​AWS ภูมิภาคสำหรับ Bedrock (ค่าเริ่มต้นเป็น `AWS_REGION` env var หรือ `us-east-1`)
+- `profile` - ​​AWS ตั้งชื่อโปรไฟล์จาก `~/.aws/credentials` (ค่าเริ่มต้นเป็น `AWS_PROFILE` env var)
+- `endpoint` - ​​จุดสิ้นสุดที่กำหนดเอง URL สำหรับจุดสิ้นสุด VPC นี่เป็นนามแฝงสำหรับตัวเลือก `baseURL` ทั่วไปโดยใช้คำศัพท์เฉพาะ AWS หากระบุทั้งสองรายการ `endpoint` จะมีความสำคัญกว่า
+
+:::note
+โทเค็นผู้ถือ (`AWS_BEARER_TOKEN_BEDROCK` หรือ `/connect`) มีความสำคัญมากกว่าการตรวจสอบสิทธิ์ตามโปรไฟล์ ดู [ลำดับความสำคัญในการรับรองความถูกต้อง](/docs/providers#การรับรองความถูกต้อง-เหนือกว่า) สำหรับรายละเอียด
+:::
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับการกำหนดค่า Amazon Bedrock](/docs/providers#amazon-bedrock)
+
+---
+
+### ธีมส์
+
+คุณสามารถกำหนดค่าธีมที่คุณต้องการใช้ในการกำหนดค่า OpenCode ของคุณได้ผ่านตัวเลือก `theme`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "theme": ""
+}
+```
+
+[เรียนรู้เพิ่มเติมที่นี่](/docs/themes)
+
+---
+
+### ตัวแทน
+
+คุณสามารถกำหนดค่าตัวแทนเฉพาะสำหรับงานเฉพาะผ่านตัวเลือก `agent`
+
+```jsonc title="opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "agent": {
+ "code-reviewer": {
+ "description": "Reviews code for best practices and potential issues",
+ "model": "anthropic/claude-sonnet-4-5",
+ "prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
+ "tools": {
+ // Disable file modification tools for review-only agent
+ "write": false,
+ "edit": false,
+ },
+ },
+ },
+}
+```
+
+คุณยังสามารถกำหนดตัวแทนโดยใช้ไฟล์มาร์กดาวน์ใน `~/.config/opencode/agents/` หรือ `.opencode/agents/` [เรียนรู้เพิ่มเติมที่นี่](/docs/agents)
+
+---
+
+### ตัวแทนเริ่มต้น
+
+คุณสามารถตั้งค่าตัวแทนเริ่มต้นได้โดยใช้ตัวเลือก `default_agent` ซึ่งจะกำหนดว่าเอเจนต์ใดที่จะใช้เมื่อไม่มีการระบุอย่างชัดเจน
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "default_agent": "plan"
+}
+```
+
+ตัวแทนเริ่มต้นจะต้องเป็นตัวแทนหลัก (ไม่ใช่ตัวแทนย่อย) ซึ่งอาจเป็นตัวแทนในตัว เช่น `"build"` หรือ `"plan"` หรือ [ตัวแทนที่กำหนดเอง](/docs/agents) ที่คุณกำหนดไว้ หากไม่มีตัวแทนที่ระบุหรือเป็นตัวแทนย่อย OpenCode จะถอยกลับไปที่ `"build"` พร้อมคำเตือน
+
+การตั้งค่านี้ใช้กับอินเทอร์เฟซทั้งหมด: TUI, CLI (`opencode run`) แอปเดสก์ท็อป และ GitHub Action
+
+---
+
+### การแบ่งปัน
+
+คุณสามารถกำหนดค่าคุณสมบัติ [แบ่งปัน](/docs/share) ได้ผ่านทางตัวเลือก `share`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "share": "manual"
+}
+```
+
+ใช้เวลา:
+
+- `"manual"` - ​​อนุญาตให้แชร์ด้วยตนเองผ่านคำสั่ง (ค่าเริ่มต้น)
+- `"auto"` - ​​แบ่งปันการสนทนาใหม่โดยอัตโนมัติ
+- `"disabled"` - ​​ปิดการใช้งานการแชร์ทั้งหมด
+
+ตามค่าเริ่มต้น การแชร์จะถูกตั้งค่าเป็นโหมดกำหนดเอง ซึ่งคุณต้องแชร์การสนทนาอย่างชัดเจนโดยใช้คำสั่ง `/share`
+
+---
+
+### คำสั่ง
+
+คุณสามารถกำหนดค่าคำสั่งที่กำหนดเองสำหรับงานซ้ำๆ ได้ผ่านตัวเลือก `command`
+
+```jsonc title="opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "command": {
+ "test": {
+ "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
+ "description": "Run tests with coverage",
+ "agent": "build",
+ "model": "anthropic/claude-haiku-4-5",
+ },
+ "component": {
+ "template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
+ "description": "Create a new component",
+ },
+ },
+}
+```
+
+คุณยังสามารถกำหนดคำสั่งโดยใช้ไฟล์มาร์กดาวน์ใน `~/.config/opencode/commands/` หรือ `.opencode/commands/` [เรียนรู้เพิ่มเติมที่นี่](/docs/commands)
+
+---
+
+### ปุ่มลัด
+
+คุณสามารถปรับแต่งปุ่มลัดของคุณได้ผ่านตัวเลือก `keybinds`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "keybinds": {}
+}
+```
+
+[เรียนรู้เพิ่มเติมที่นี่](/docs/keybinds)
+
+---
+
+### อัปเดตอัตโนมัติ
+
+OpenCode จะดาวน์โหลดการอัปเดตใหม่โดยอัตโนมัติเมื่อเริ่มต้นระบบ คุณสามารถปิดการใช้งานนี้ได้โดยใช้ตัวเลือก `autoupdate`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "autoupdate": false
+}
+```
+
+หากคุณไม่ต้องการการอัปเดตแต่ต้องการรับการแจ้งเตือนเมื่อมีเวอร์ชันใหม่ ให้ตั้งค่า `autoupdate` เป็น `"notify"`
+โปรดสังเกตว่าสิ่งนี้ใช้ได้เฉพาะเมื่อไม่ได้ติดตั้งโดยใช้ตัวจัดการแพ็คเกจเช่น Homebrew
+
+---
+
+### ฟอร์แมตเตอร์
+
+คุณสามารถกำหนดค่าตัวจัดรูปแบบโค้ดผ่านตัวเลือก `formatter`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "formatter": {
+ "prettier": {
+ "disabled": true
+ },
+ "custom-prettier": {
+ "command": ["npx", "prettier", "--write", "$FILE"],
+ "environment": {
+ "NODE_ENV": "development"
+ },
+ "extensions": [".js", ".ts", ".jsx", ".tsx"]
+ }
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับฟอร์แมตเตอร์ที่นี่](/docs/formatters)
+
+---
+
+### สิทธิ์
+
+ตามค่าเริ่มต้น opencode **อนุญาตการดำเนินการทั้งหมด** โดยไม่ต้องมีการอนุมัติอย่างชัดเจน คุณสามารถเปลี่ยนสิ่งนี้ได้โดยใช้ตัวเลือก `permission`
+
+ตัวอย่างเช่น เพื่อให้แน่ใจว่าเครื่องมือ `edit` และ `bash` ต้องได้รับการอนุมัติจากผู้ใช้:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "ask",
+ "bash": "ask"
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับการอนุญาตที่นี่](/docs/permissions)
+
+---
+
+### การบดอัด
+
+คุณสามารถควบคุมลักษณะการทำงานของการบีบอัดบริบทได้โดยใช้ตัวเลือก `compaction`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "compaction": {
+ "auto": true,
+ "prune": true
+ }
+}
+```
+
+- `auto` - ​​กระชับเซสชันโดยอัตโนมัติเมื่อบริบทเต็ม (ค่าเริ่มต้น: `true`)
+- `prune` - ​​ลบเอาท์พุตเครื่องมือเก่าเพื่อบันทึกโทเค็น (ค่าเริ่มต้น: `true`)
+
+---
+
+### ผู้เฝ้าดู
+
+คุณสามารถกำหนดค่ารูปแบบการละเว้นตัวเฝ้าดูไฟล์ได้ผ่านตัวเลือก `watcher`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "watcher": {
+ "ignore": ["node_modules/**", "dist/**", ".git/**"]
+ }
+}
+```
+
+รูปแบบเป็นไปตามไวยากรณ์ glob ใช้ตัวเลือกนี้เพื่อยกเว้นไดเร็กทอรีที่มีเสียงดังจากการดูไฟล์
+
+---
+
+### MCP เซิร์ฟเวอร์
+
+คุณสามารถกำหนดค่าเซิร์ฟเวอร์ MCP ที่คุณต้องการใช้ผ่านตัวเลือก `mcp`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {}
+}
+```
+
+[เรียนรู้เพิ่มเติมที่นี่](/docs/mcp-servers)
+
+---
+
+### ปลั๊กอิน
+
+[ปลั๊กอิน](/docs/plugins) ขยาย OpenCode ด้วยเครื่องมือที่กำหนดเอง hooks และการผสานรวม
+
+วางไฟล์ปลั๊กอินใน `.opencode/plugins/` หรือ `~/.config/opencode/plugins/` คุณยังสามารถโหลดปลั๊กอินจาก npm ผ่านตัวเลือก `plugin`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
+}
+```
+
+[เรียนรู้เพิ่มเติมที่นี่](/docs/plugins)
+
+---
+
+### คำแนะนำ
+
+คุณสามารถกำหนดค่าคำแนะนำสำหรับรุ่นที่คุณใช้ผ่านตัวเลือก `instructions`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
+}
+```
+
+สิ่งนี้จะนำอาร์เรย์ของเส้นทางและรูปแบบ glob ไปยังไฟล์คำสั่ง [เรียนรู้เพิ่มเติม
+เกี่ยวกับกฎที่นี่](/docs/rules)
+
+---
+
+### ผู้ให้บริการที่พิการ
+
+คุณสามารถปิดการใช้งานผู้ให้บริการที่โหลดโดยอัตโนมัติผ่านตัวเลือก `disabled_providers` สิ่งนี้มีประโยชน์เมื่อคุณต้องการป้องกันไม่ให้โหลดผู้ให้บริการบางรายแม้ว่าจะมีข้อมูลประจำตัวอยู่ก็ตาม
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "disabled_providers": ["openai", "gemini"]
+}
+```
+
+:::note
+`disabled_providers` มีลำดับความสำคัญมากกว่า `enabled_providers`
+:::
+
+ตัวเลือก `disabled_providers` ยอมรับอาร์เรย์ของรหัสผู้ให้บริการ เมื่อผู้ให้บริการถูกปิดใช้งาน:
+
+- มันจะไม่ถูกโหลดแม้ว่าจะมีการตั้งค่าตัวแปรสภาพแวดล้อมก็ตาม
+- มันจะไม่ถูกโหลดแม้ว่าจะมีการกำหนดค่าคีย์ API ผ่านคำสั่ง `/connect`
+- รุ่นของผู้ให้บริการจะไม่ปรากฏในรายการการเลือกรุ่น
+
+---
+
+### ผู้ให้บริการที่เปิดใช้งาน
+
+คุณสามารถระบุรายชื่อผู้ให้บริการที่อนุญาตได้ผ่านตัวเลือก `enabled_providers` เมื่อตั้งค่าแล้ว เฉพาะผู้ให้บริการที่ระบุเท่านั้นที่จะเปิดใช้งาน และผู้ให้บริการอื่นๆ ทั้งหมดจะถูกละเว้น
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "enabled_providers": ["anthropic", "openai"]
+}
+```
+
+สิ่งนี้มีประโยชน์เมื่อคุณต้องการจำกัด OpenCode ให้ใช้เฉพาะผู้ให้บริการบางราย แทนที่จะปิดการใช้งานทีละราย
+
+:::note
+`disabled_providers` มีลำดับความสำคัญมากกว่า `enabled_providers`
+:::
+
+หากผู้ให้บริการปรากฏทั้ง `enabled_providers` และ `disabled_providers` `disabled_providers` จะมีลำดับความสำคัญสำหรับความเข้ากันได้แบบย้อนหลัง
+
+---
+
+### การทดลอง
+
+ปุ่ม `experimental` มีตัวเลือกที่อยู่ระหว่างการพัฒนา
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "experimental": {}
+}
+```
+
+:::caution
+ตัวเลือกการทดลองไม่เสถียร อาจมีการเปลี่ยนแปลงหรือลบออกโดยไม่ต้องแจ้งให้ทราบล่วงหน้า
+:::
+
+---
+
+## ตัวแปร
+
+คุณสามารถใช้การทดแทนตัวแปรในไฟล์กำหนดค่าของคุณเพื่ออ้างอิงตัวแปรสภาพแวดล้อมและเนื้อหาไฟล์ได้
+
+---
+
+### ตัวแปร Env
+
+ใช้ `{env:VARIABLE_NAME}` เพื่อทดแทนตัวแปรสภาพแวดล้อม:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "model": "{env:OPENCODE_MODEL}",
+ "provider": {
+ "anthropic": {
+ "models": {},
+ "options": {
+ "apiKey": "{env:ANTHROPIC_API_KEY}"
+ }
+ }
+ }
+}
+```
+
+หากไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม ตัวแปรนั้นจะถูกแทนที่ด้วยสตริงว่าง
+
+---
+
+### ไฟล์
+
+ใช้ `{file:path/to/file}` เพื่อทดแทนเนื้อหาของไฟล์:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "instructions": ["./custom-instructions.md"],
+ "provider": {
+ "openai": {
+ "options": {
+ "apiKey": "{file:~/.secrets/openai-key}"
+ }
+ }
+ }
+}
+```
+
+เส้นทางไฟล์อาจเป็น:
+
+- สัมพันธ์กับไดเร็กทอรีไฟล์ปรับแต่ง
+- หรือเส้นทางที่แน่นอนเริ่มต้นด้วย `/` หรือ `~`
+
+สิ่งเหล่านี้มีประโยชน์สำหรับ:
+
+- เก็บข้อมูลที่ละเอียดอ่อนเช่นคีย์ API ไว้ในไฟล์แยกกัน
+- รวมไฟล์คำสั่งขนาดใหญ่โดยไม่ทำให้การกำหนดค่าของคุณเกะกะ
+- การแชร์ข้อมูลโค้ดการกำหนดค่าทั่วไปในไฟล์กำหนดค่าหลายไฟล์
diff --git a/packages/web/src/content/docs/th/custom-tools.mdx b/packages/web/src/content/docs/th/custom-tools.mdx
new file mode 100644
index 000000000..28cd229cf
--- /dev/null
+++ b/packages/web/src/content/docs/th/custom-tools.mdx
@@ -0,0 +1,170 @@
+---
+title: เครื่องมือที่กำหนดเอง
+description: สร้างเครื่องมือที่ LLM สามารถเรียกใช้ใน opencode
+---
+
+เครื่องมือแบบกำหนดเองคือฟังก์ชันที่คุณสร้างขึ้นซึ่ง LLM สามารถเรียกใช้ระหว่างการสนทนาได้ โดยทำงานร่วมกับ [เครื่องมือในตัว](/docs/tools) ของ opencode เช่น `read`, `write` และ `bash`
+
+---
+
+## การสร้างเครื่องมือ
+
+เครื่องมือถูกกำหนดให้เป็นไฟล์ **TypeScript** หรือ **JavaScript** อย่างไรก็ตาม คำจำกัดความของเครื่องมือสามารถเรียกใช้สคริปต์ที่เขียนใน **ภาษาใดก็ได้** — TypeScript หรือ JavaScript ใช้สำหรับคำจำกัดความของเครื่องมือเท่านั้น
+
+---
+
+### ที่ตั้ง
+
+สามารถกำหนดได้:
+
+- ภายในเครื่องโดยวางไว้ในไดเรกทอรี `.opencode/tools/` ของโครงการของคุณ
+- หรือทั่วโลกโดยวางไว้ที่ `~/.config/opencode/tools/`
+
+---
+
+### โครงสร้าง
+
+วิธีที่ง่ายที่สุดในการสร้างเครื่องมือคือการใช้ตัวช่วย `tool()` ซึ่งให้ความปลอดภัยและการตรวจสอบประเภท
+
+```ts title=".opencode/tools/database.ts" {1}
+import { tool } from "@opencode-ai/plugin"
+
+export default tool({
+ description: "Query the project database",
+ args: {
+ query: tool.schema.string().describe("SQL query to execute"),
+ },
+ async execute(args) {
+ // Your database logic here
+ return `Executed query: ${args.query}`
+ },
+})
+```
+
+**ชื่อไฟล์** จะกลายเป็น **ชื่อเครื่องมือ** ข้างต้นจะสร้างเครื่องมือ `database`
+
+---
+
+#### เครื่องมือหลายอย่างต่อไฟล์
+
+คุณยังสามารถส่งออกเครื่องมือหลายรายการจากไฟล์เดียวได้ การส่งออกแต่ละครั้งจะกลายเป็น **เครื่องมือแยกต่างหาก** โดยมีชื่อ **`<filename>_<exportname>`**:
+
+```ts title=".opencode/tools/math.ts"
+import { tool } from "@opencode-ai/plugin"
+
+export const add = tool({
+ description: "Add two numbers",
+ args: {
+ a: tool.schema.number().describe("First number"),
+ b: tool.schema.number().describe("Second number"),
+ },
+ async execute(args) {
+ return args.a + args.b
+ },
+})
+
+export const multiply = tool({
+ description: "Multiply two numbers",
+ args: {
+ a: tool.schema.number().describe("First number"),
+ b: tool.schema.number().describe("Second number"),
+ },
+ async execute(args) {
+ return args.a * args.b
+ },
+})
+```
+
+สิ่งนี้จะสร้างเครื่องมือสองอย่าง: `math_add` และ `math_multiply`
+
+---
+
+### ข้อโต้แย้ง
+
+คุณสามารถใช้ `tool.schema` ซึ่งก็คือ [Zod](https://zod.dev) เพื่อกำหนดประเภทอาร์กิวเมนต์
+
+```ts "tool.schema"
+args: {
+ query: tool.schema.string().describe("SQL query to execute")
+}
+```
+
+คุณยังสามารถนำเข้า [Zod](https://zod.dev) ได้โดยตรงและส่งคืนออบเจ็กต์ธรรมดา:
+
+```ts {6}
+import { z } from "zod"
+
+export default {
+ description: "Tool description",
+ args: {
+ param: z.string().describe("Parameter description"),
+ },
+ async execute(args, context) {
+ // Tool implementation
+ return "result"
+ },
+}
+```
+
+---
+
+### บริบท
+
+เครื่องมือได้รับบริบทเกี่ยวกับเซสชันปัจจุบัน:
+
+```ts title=".opencode/tools/project.ts" {8}
+import { tool } from "@opencode-ai/plugin"
+
+export default tool({
+ description: "Get project information",
+ args: {},
+ async execute(args, context) {
+ // Access context information
+ const { agent, sessionID, messageID, directory, worktree } = context
+ return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
+ },
+})
+```
+
+ใช้ `context.directory` สำหรับไดเร็กทอรีการทำงานของเซสชัน
+ใช้ `context.worktree` สำหรับรูท git worktree
+
+---
+
+## ตัวอย่าง
+
+### เขียนเครื่องมือใน Python
+
+คุณสามารถเขียนเครื่องมือของคุณเป็นภาษาใดก็ได้ที่คุณต้องการ นี่คือตัวอย่างที่บวกตัวเลขสองตัวโดยใช้ Python
+
+ขั้นแรก สร้างเครื่องมือเป็นสคริปต์ Python:
+
+```python title=".opencode/tools/add.py"
+import sys
+
+a = int(sys.argv[1])
+b = int(sys.argv[2])
+print(a + b)
+```
+
+จากนั้นสร้างคำจำกัดความของเครื่องมือที่เรียกใช้:
+
+```ts title=".opencode/tools/python-add.ts" {10}
+import { tool } from "@opencode-ai/plugin"
+import path from "path"
+
+export default tool({
+ description: "Add two numbers using Python",
+ args: {
+ a: tool.schema.number().describe("First number"),
+ b: tool.schema.number().describe("Second number"),
+ },
+ async execute(args, context) {
+ const script = path.join(context.worktree, ".opencode/tools/add.py")
+ const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
+ return result.trim()
+ },
+})
+```
+
+ที่นี่เราใช้ยูทิลิตี้ [`Bun.$`](https://bun.com/docs/runtime/shell) เพื่อรันสคริปต์ Python
diff --git a/packages/web/src/content/docs/th/ecosystem.mdx b/packages/web/src/content/docs/th/ecosystem.mdx
new file mode 100644
index 000000000..ff1b108d6
--- /dev/null
+++ b/packages/web/src/content/docs/th/ecosystem.mdx
@@ -0,0 +1,76 @@
+---
+title: ระบบนิเวศ
+description: โปรเจ็กต์และการผสานรวมที่สร้างด้วย OpenCode
+---
+
+ชุดโครงการชุมชนที่สร้างขึ้นบน OpenCode
+
+:::note
+ต้องการเพิ่มโครงการที่เกี่ยวข้องกับ OpenCode ของคุณลงในรายการนี้หรือไม่ ส่งพีอาร์.
+:::
+
+คุณยังสามารถลองดู [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) และ [opencode.cafe](https://opencode.cafe) ซึ่งเป็นชุมชนที่รวบรวมระบบนิเวศและชุมชนไว้ด้วยกัน
+
+---
+
+## ปลั๊กอิน
+
+| ชื่อ | คำอธิบาย |
+| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| [opencode-เดย์โทนา](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | เรียกใช้เซสชัน OpenCode โดยอัตโนมัติในแซนด์บ็อกซ์ Daytona ที่แยกออกมาพร้อม git sync และการแสดงตัวอย่างแบบสด |
+| [opencode-helicone-เซสชัน](https://github.com/H2Shami/opencode-helicone-session) | แทรกส่วนหัวเซสชัน Helicone โดยอัตโนมัติสำหรับการจัดกลุ่มคำขอ |
+| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | ฉีดประเภท TypeScript/Svelte ลงในไฟล์ที่อ่านโดยอัตโนมัติด้วยเครื่องมือค้นหา |
+| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | ใช้การสมัครสมาชิก ChatGPT Plus/Pro แทนเครดิต API |
+| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | ใช้แผน Gemini ที่มีอยู่ของคุณแทนการเรียกเก็บเงิน API |
+| [opencode-ต้านแรงโน้มถ่วง-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | ใช้โมเดลฟรีของ Antigravity แทนการเรียกเก็บเงิน API |
+| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | การแยกคอนเทนเนอร์ Devcontainer แบบหลายสาขาพร้อมโคลนแบบตื้นและพอร์ตที่กำหนดอัตโนมัติ |
+| [opencode-google-ต้านแรงโน้มถ่วง-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | ปลั๊กอิน Google Antigravity OAuth พร้อมรองรับ Google Search และการจัดการ API ที่แข็งแกร่งยิ่งขึ้น |
+| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | ปรับการใช้โทเค็นให้เหมาะสมโดยการตัดเอาท์พุตของเครื่องมือที่ล้าสมัย |
+| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | เพิ่มการสนับสนุนการค้นหาเว็บแบบเนทีฟสำหรับผู้ให้บริการที่รองรับด้วยรูปแบบที่มีเหตุผลของ Google |
+| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | ช่วยให้ตัวแทน AI สามารถเรียกใช้กระบวนการเบื้องหลังใน PTY และส่งข้อมูลเชิงโต้ตอบให้พวกเขาได้ |
+| [opencode-shell-กลยุทธ์](https://github.com/JRedeker/opencode-shell-strategy) | คำแนะนำสำหรับคำสั่งเชลล์แบบไม่โต้ตอบ - ป้องกันการแฮงค์จากการดำเนินการที่ขึ้นอยู่กับ TTY |
+| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | ติดตามการใช้งาน OpenCode ด้วย Wakatime |
+| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | ทำความสะอาดตารางมาร์กดาวน์ที่ผลิตโดย LLM |
+| [opencode-morph-ใช้อย่างรวดเร็ว](https://github.com/JRedeker/opencode-morph-fast-apply) | การแก้ไขโค้ดเร็วขึ้น 10 เท่าด้วย Morph Fast Apply API และเครื่องหมายแก้ไขแบบ Lazy |
+| [โอ้ ฉัน-opencode](https://github.com/code-yeongyu/oh-my-opencode) | ตัวแทนเบื้องหลัง, เครื่องมือ LSP/AST/MCP ที่สร้างไว้ล่วงหน้า, ตัวแทนที่ได้รับการดูแลจัดการ, เข้ากันได้กับ Claude Code |
+| [ผู้แจ้ง opencode](https://github.com/panta82/opencode-notificator) | การแจ้งเตือนบนเดสก์ท็อปและเสียงเตือนสำหรับเซสชัน OpenCode |
+| [opencode-แจ้ง](https://github.com/mohak34/opencode-notifier) | การแจ้งเตือนบนเดสก์ท็อปและเสียงเตือนสำหรับการอนุญาต การดำเนินการเสร็จสิ้น และเหตุการณ์ข้อผิดพลาด |
+| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | การตั้งชื่อเซสชัน Zellij อัตโนมัติที่ขับเคลื่อนด้วย AI ตามบริบทของ OpenCode |
+| [opencode-เก่ง](https://github.com/zenobi-us/opencode-skillful) | อนุญาตให้ตัวแทน OpenCode โหลดแบบ Lazy Load ตามความต้องการพร้อมการค้นพบทักษะและการแทรก |
+| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | หน่วยความจำถาวรตลอดเซสชันโดยใช้ Supermemory |
+| [@ผู้วางแผน/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | การตรวจสอบแผนเชิงโต้ตอบพร้อมคำอธิบายประกอบแบบภาพและการแชร์ส่วนตัว/offline |
+| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | ขยาย opencode /commands ไปสู่ระบบการประสานที่มีประสิทธิภาพพร้อมการควบคุมโฟลว์แบบละเอียด |
+| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | กำหนดเวลางานที่เกิดซ้ำโดยใช้ launchd (Mac) หรือ systemd (Linux) ด้วยไวยากรณ์ cron |
+| [ไมโครโค้ด](https://github.com/vtemian/micode) | ระดมความคิดอย่างมีโครงสร้าง → วางแผน → นำเวิร์กโฟลว์ไปใช้ด้วยความต่อเนื่องของเซสชัน |
+| [ตุลาคม](https://github.com/vtemian/octto) | UI เบราว์เซอร์แบบโต้ตอบสำหรับการระดมความคิด AI ด้วยแบบฟอร์มคำถามหลายข้อ |
+| [opencode-พื้นหลัง-ตัวแทน](https://github.com/kdcokenny/opencode-background-agents) | เอเจนต์พื้นหลังสไตล์ Claude Code พร้อมการมอบหมายแบบอะซิงก์และการคงอยู่ของบริบท |
+| [opencode-แจ้งเตือน](https://github.com/kdcokenny/opencode-notify) | การแจ้งเตือนระบบปฏิบัติการดั้งเดิมสำหรับ OpenCode – ทราบเมื่องานเสร็จสมบูรณ์ |
+| [opencode-พื้นที่ทำงาน](https://github.com/kdcokenny/opencode-workspace) | ชุดสายรัดประสานหลายเอเจนต์ที่ให้มา – ส่วนประกอบ 16 ชิ้น ติดตั้งเพียงครั้งเดียว |
+| [opencode-เวิร์กทรี](https://github.com/kdcokenny/opencode-worktree) | เวิร์กทรีคอมไพล์ไร้แรงเสียดทานสำหรับ OpenCode |
+
+---
+
+## โครงการ
+
+| ชื่อ | คำอธิบาย |
+| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
+| [คิมากิ](https://github.com/remorses/kimaki) | บอท Discord เพื่อควบคุมเซสชัน OpenCode สร้างขึ้นบน SDK |
+| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | ปลั๊กอิน Neovim สำหรับข้อความแจ้งที่ทราบโดยบรรณาธิการ ซึ่งสร้างขึ้นบน API |
+| [พอร์ทัล](https://github.com/hosenur/portal) | UI เว็บบนมือถือเป็นครั้งแรกสำหรับ OpenCode บน Tailscale/VPN |
+| [เทมเพลตปลั๊กอิน opencode](https://github.com/zenobi-us/opencode-plugin-template/) | เทมเพลตสำหรับสร้างปลั๊กอิน OpenCode |
+| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | ส่วนหน้า Neovim สำหรับ opencode - เอเจนต์การเข้ารหัส AI ที่ใช้เทอร์มินัล |
+| [ai-sdk-ผู้ให้บริการ-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | ผู้ให้บริการ Vercel AI SDK สำหรับการใช้งาน OpenCode ผ่าน @opencode-ai/sdk |
+| [เปิดห้อง](https://github.com/btriapitsyn/openchamber) | แอพเว็บ / เดสก์ท็อปและส่วนขยายรหัส VS สำหรับ OpenCode |
+| [OpenCode-ออบซิเดียน](https://github.com/mtymek/opencode-obsidian) | ปลั๊กอิน Obsidian ที่ฝัง OpenCode ไว้ใน UI ของ Obsidian |
+| [โอเพ่นเวิร์ค](https://github.com/different-ai/openwork) | ทางเลือกโอเพ่นซอร์สแทน Claude Cowork ซึ่งขับเคลื่อนโดย OpenCode |
+| [ocx](https://github.com/kdcokenny/ocx) | ตัวจัดการส่วนขยาย OpenCode พร้อมโปรไฟล์แบบพกพาและแยกส่วน |
+| [โค้ดโนแมด](https://github.com/NeuralNomadsAI/CodeNomad) | แอปเดสก์ท็อป เว็บ มือถือ และไคลเอ็นต์ระยะไกลสำหรับ OpenCode |
+
+---
+
+## ตัวแทน
+
+| ชื่อ | คำอธิบาย |
+| ----------------------------------------------------------------- | ------------------------------------------------------------ |
+| [ตัวแทน](https://github.com/Cluster444/agentic) | เอเจนต์ AI แบบแยกส่วนและคำสั่งสำหรับการพัฒนาแบบมีโครงสร้าง |
+| [opencode-ตัวแทน](https://github.com/darrenhinde/opencode-agents) | กำหนดค่า พรอมต์ เอเจนต์ และปลั๊กอินสำหรับเวิร์กโฟลว์ที่ได้รับการปรับปรุง |
diff --git a/packages/web/src/content/docs/th/enterprise.mdx b/packages/web/src/content/docs/th/enterprise.mdx
new file mode 100644
index 000000000..4ac0c6f27
--- /dev/null
+++ b/packages/web/src/content/docs/th/enterprise.mdx
@@ -0,0 +1,170 @@
+---
+title: องค์กร
+description: การใช้ OpenCode อย่างปลอดภัยในองค์กรของคุณ
+---
+
+import config from "../../../../config.mjs"
+export const email = `mailto:${config.email}`
+
+OpenCode Enterprise เหมาะสำหรับองค์กรที่ต้องการให้แน่ใจว่าโค้ดและข้อมูลของตนไม่หลุดออกจากโครงสร้างพื้นฐาน ซึ่งสามารถทำได้โดยใช้การกำหนดค่าแบบรวมศูนย์ที่ทำงานร่วมกับ SSO และเกตเวย์ AI ภายในของคุณ
+
+:::note
+OpenCode จะไม่เก็บโค้ดหรือข้อมูลบริบทใดๆ ของคุณ
+:::
+
+ในการเริ่มต้นใช้งาน OpenCode Enterprise:
+
+1. ทดลองใช้งานภายในกับทีมของคุณ
+2. **<a href={email}>ติดต่อเรา</a>** เพื่อหารือเกี่ยวกับตัวเลือกด้านราคาและการใช้งาน
+
+---
+
+## การทดลอง
+
+OpenCode เป็นโอเพ่นซอร์สและไม่ได้จัดเก็บโค้ดหรือข้อมูลบริบทใดๆ ของคุณ ดังนั้นนักพัฒนาของคุณสามารถ [เริ่มต้น](/docs/) และดำเนินการทดลองใช้งานได้อย่างง่ายดาย
+
+---
+
+### การจัดการข้อมูล
+
+**OpenCode จะไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ** การประมวลผลทั้งหมดเกิดขึ้นภายในเครื่องหรือผ่านการเรียก API โดยตรงไปยังผู้ให้บริการ AI ของคุณ
+
+ซึ่งหมายความว่าตราบใดที่คุณใช้ผู้ให้บริการที่คุณเชื่อถือหรือผู้ให้บริการภายใน
+เกตเวย์ AI คุณสามารถใช้ OpenCode ได้อย่างปลอดภัย
+
+ข้อแม้เดียวที่นี่คือคุณสมบัติเสริม `/share`
+
+---
+
+#### การแบ่งปันการสนทนา
+
+หากผู้ใช้เปิดใช้งานคุณสมบัติ `/share` การสนทนาและข้อมูลที่เกี่ยวข้องกับการสนทนาจะถูกส่งไปยังบริการที่เราใช้เพื่อโฮสต์เพจแชร์เหล่านี้ที่ opencode.ai
+
+ขณะนี้ข้อมูลให้บริการผ่านเครือข่าย Edge ของ CDN ของเรา และถูกแคชไว้ที่ Edge ใกล้ผู้ใช้ของคุณ
+
+เราขอแนะนำให้คุณปิดการใช้งานนี้สำหรับการทดลองใช้ของคุณ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "share": "disabled"
+}
+```
+
+[เรียนรู้เพิ่มเติมเกี่ยวกับการแชร์](/docs/share)
+
+---
+
+### ความเป็นเจ้าของรหัส
+
+**คุณเป็นเจ้าของโค้ดทั้งหมดที่สร้างโดย OpenCode** ไม่มีข้อจำกัดด้านใบอนุญาตหรือการอ้างสิทธิ์ความเป็นเจ้าของ
+
+---
+
+## ราคา
+
+เราใช้แบบจำลองต่อที่นั่งสำหรับ OpenCode Enterprise หากคุณมีเกตเวย์ LLM ของคุณเอง เราจะไม่เรียกเก็บเงินสำหรับโทเค็นที่ใช้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกราคาและการใช้งาน **<a href={email}>ติดต่อเรา</a>**
+
+---
+
+## การปรับใช้
+
+เมื่อคุณทดลองใช้งานเสร็จแล้วและพร้อมที่จะใช้ OpenCode ที่
+องค์กรของคุณ คุณสามารถ **<a href={email}>ติดต่อเรา</a>** เพื่อหารือเกี่ยวกับ
+ตัวเลือกการกำหนดราคาและการใช้งาน
+
+---
+
+### การกำหนดค่าส่วนกลาง
+
+เราสามารถตั้งค่า OpenCode เพื่อใช้การกำหนดค่าส่วนกลางเพียงรายการเดียวสำหรับทั้งองค์กรของคุณได้
+
+การกำหนดค่าแบบรวมศูนย์นี้สามารถทำงานร่วมกับผู้ให้บริการ SSO ของคุณได้ และรับรองว่าผู้ใช้ทุกคนจะเข้าถึงเฉพาะเกตเวย์ AI ภายในของคุณเท่านั้น
+
+---
+
+### SSO บูรณาการ
+
+ด้วยการกำหนดค่าส่วนกลาง OpenCode สามารถทำงานร่วมกับผู้ให้บริการ SSO ขององค์กรของคุณเพื่อตรวจสอบสิทธิ์ได้
+
+ซึ่งช่วยให้ OpenCode รับข้อมูลรับรองสำหรับเกตเวย์ AI ภายในของคุณผ่านระบบการจัดการข้อมูลประจำตัวที่คุณมีอยู่
+
+---
+
+### เกตเวย์ AI ภายใน
+
+ด้วยการกำหนดค่าส่วนกลาง คุณสามารถกำหนดค่า OpenCode ให้ใช้เกตเวย์ AI ภายในของคุณเท่านั้น
+
+คุณยังสามารถปิดการใช้งานผู้ให้บริการ AI อื่นๆ ทั้งหมดได้ เพื่อให้มั่นใจว่าคำขอทั้งหมดจะผ่านโครงสร้างพื้นฐานที่ได้รับอนุมัติขององค์กรของคุณ
+
+---
+
+### โฮสติ้งด้วยตนเอง
+
+ในขณะที่เราแนะนำให้ปิดการใช้งานหน้าแบ่งปันเพื่อให้แน่ใจว่าข้อมูลของคุณจะไม่หายไป
+องค์กรของคุณ เราก็สามารถช่วยคุณโฮสต์พวกเขาเองบนโครงสร้างพื้นฐานของคุณได้
+
+ขณะนี้อยู่ในแผนงานของเรา หากคุณสนใจ **<a href={email}>แจ้งให้เราทราบ</a>**
+
+---
+
+## FAQ
+
+<details>
+<summary>What is OpenCode Enterprise?</summary>
+
+OpenCode Enterprise เหมาะสำหรับองค์กรที่ต้องการให้แน่ใจว่าโค้ดและข้อมูลของตนไม่หลุดออกจากโครงสร้างพื้นฐาน ซึ่งสามารถทำได้โดยใช้การกำหนดค่าแบบรวมศูนย์ที่ทำงานร่วมกับ SSO และเกตเวย์ AI ภายในของคุณ
+
+</details>
+
+<details>
+<summary>How do I get started with OpenCode Enterprise?</summary>
+
+เพียงเริ่มต้นด้วยการทดลองใช้ภายในกับทีมของคุณ ตามค่าเริ่มต้น OpenCode จะไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ ทำให้ง่ายต่อการเริ่มต้น
+
+จากนั้น **<a href={email}>ติดต่อเรา</a>** เพื่อหารือเกี่ยวกับตัวเลือกด้านราคาและการใช้งาน
+
+</details>
+
+<details>
+<summary>How does enterprise pricing work?</summary>
+
+เราเสนอราคาสำหรับองค์กรต่อที่นั่ง หากคุณมีเกตเวย์ LLM ของคุณเอง เราจะไม่เรียกเก็บเงินสำหรับโทเค็นที่ใช้ สำหรับรายละเอียดเพิ่มเติม **<a href={email}>ติดต่อเรา</a>** เพื่อขอใบเสนอราคาที่กำหนดเองตามความต้องการขององค์กรของคุณ
+
+</details>
+
+<details>
+<summary>Is my data secure with OpenCode Enterprise?</summary>
+
+ใช่. OpenCode จะไม่เก็บโค้ดหรือข้อมูลบริบทของคุณ การประมวลผลทั้งหมดเกิดขึ้นภายในเครื่องหรือผ่านการโทรศัพท์ API โดยตรงไปยังผู้ให้บริการ AI ของคุณ ด้วยการกำหนดค่าส่วนกลางและการบูรณาการ SSO ข้อมูลของคุณยังคงปลอดภัยภายในโครงสร้างพื้นฐานขององค์กรของคุณ
+
+</details>
+
+<details>
+<summary>Can we use our own private NPM registry?</summary>
+
+OpenCode รองรับการลงทะเบียน npm ส่วนตัวผ่านการรองรับไฟล์ `.npmrc` ดั้งเดิมของ Bun หากองค์กรของคุณใช้รีจิสทรีส่วนตัว เช่น JFrog Artifactory, Nexus หรือที่คล้ายกัน โปรดตรวจสอบให้แน่ใจว่านักพัฒนาได้รับการตรวจสอบสิทธิ์ก่อนเรียกใช้ OpenCode
+
+วิธีตั้งค่าการตรวจสอบสิทธิ์กับรีจิสทรีส่วนตัวของคุณ:
+
+```bash
+npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
+```
+
+สิ่งนี้จะสร้าง `~/.npmrc` พร้อมรายละเอียดการตรวจสอบสิทธิ์ OpenCode จะอัตโนมัติ
+หยิบสิ่งนี้ขึ้นมา
+
+:::caution
+คุณต้องเข้าสู่ระบบรีจิสทรีส่วนตัวก่อนที่จะเรียกใช้ OpenCode
+:::
+
+หรือคุณสามารถกำหนดค่าไฟล์ `.npmrc` ด้วยตนเองได้:
+
+```bash title="~/.npmrc"
+registry=https://your-company.jfrog.io/api/npm/npm-virtual/
+//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
+```
+
+นักพัฒนาจะต้องลงชื่อเข้าใช้รีจิสทรีส่วนตัวก่อนที่จะเรียกใช้ OpenCode เพื่อให้แน่ใจว่าสามารถติดตั้งแพ็คเกจจากรีจิสทรีขององค์กรของคุณได้
+
+</details>
diff --git a/packages/web/src/content/docs/th/formatters.mdx b/packages/web/src/content/docs/th/formatters.mdx
new file mode 100644
index 000000000..e0abc0294
--- /dev/null
+++ b/packages/web/src/content/docs/th/formatters.mdx
@@ -0,0 +1,130 @@
+---
+title: ฟอร์แมตเตอร์
+description: OpenCode ใช้ตัวจัดรูปแบบเฉพาะภาษา
+---
+
+OpenCode จะจัดรูปแบบไฟล์โดยอัตโนมัติหลังจากที่เขียนหรือแก้ไขโดยใช้ตัวจัดรูปแบบเฉพาะภาษา เพื่อให้แน่ใจว่าโค้ดที่สร้างขึ้นเป็นไปตามสไตล์โค้ดของโปรเจ็กต์ของคุณ
+
+---
+
+## บิวท์อิน
+
+OpenCode มาพร้อมกับฟอร์แมตเตอร์ในตัวหลายตัวสำหรับภาษาและเฟรมเวิร์กยอดนิยม ด้านล่างนี้คือรายการฟอร์แมตเตอร์ นามสกุลไฟล์ที่รองรับ และคำสั่งหรือตัวเลือกการกำหนดค่าที่ต้องการ
+
+| ฟอร์แมตเตอร์ | ส่วนขยาย | ความต้องการ |
+| -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| กอฟท์ | .ไป | `gofmt` คำสั่งใช้ได้ |
+| ผสม | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` คำสั่งใช้ได้ |
+| สวยกว่า | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml และ [เพิ่มเติม](https://prettier.io/docs/en/index.html) | `prettier` การพึ่งพาใน `package.json` |
+| ชีวนิเวศน์ | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml และ [เพิ่มเติม](https://biomejs.dev/) | `biome.json(c)` ไฟล์ปรับแต่ง |
+| ซิกซิก | .ซิก, .ซอน | `zig` คำสั่งใช้ได้ |
+| เสียงดังกราวรูปแบบ | .c, .cpp, .h, .hpp, .ino และ [เพิ่มเติม](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` ไฟล์ปรับแต่ง |
+| เคทลินท์ | .kt, .kts | `ktlint` คำสั่งใช้ได้ |
+| สร้อย | .py, .pyi | คำสั่ง `ruff` ใช้ได้กับ config |
+| สนิม | .อาร์เอส | `rustfmt` คำสั่งใช้ได้ |
+| สินค้าfmt | .อาร์เอส | `cargo fmt` คำสั่งใช้ได้ |
+| ยูวี | .py, .pyi | `uv` คำสั่งใช้ได้ |
+| รูโบคอป | .rb, .rake, .gemspec, .ru | `rubocop` คำสั่งใช้ได้ |
+| มาตรฐานrb | .rb, .rake, .gemspec, .ru | `standardrb` คำสั่งใช้ได้ |
+| htmlเสริมสวย | .erb, .html.erb | `htmlbeautifier` คำสั่งใช้ได้ |
+| อากาศ | .ร | `air` คำสั่งใช้ได้ |
+| โผ | .โผ | `dart` คำสั่งใช้ได้ |
+| ocamlformat | .มล., .มลิ | มีคำสั่ง `ocamlformat` และไฟล์ปรับแต่ง `.ocamlformat` |
+| ภูมิประเทศ | .tf, .tfvars | `terraform` คำสั่งใช้ได้ |
+| เปล่งประกาย | .แวววาว | `gleam` คำสั่งใช้ได้ |
+| ห้าม | .ห้าม | `nixfmt` คำสั่งใช้ได้ |
+| สับเปลี่ยน | .sh, .ทุบตี | `shfmt` คำสั่งใช้ได้ |
+| ไพน์ | .php | `laravel/pint` การพึ่งพาใน `composer.json` |
+| oxfmt (ทดลอง) | .js, .jsx, .ts, .tsx | `oxfmt` การพึ่งพาใน `package.json` และ [แฟล็กตัวแปร env ทดลอง](/docs/cli/#experimental) |
+| ออร์โมลู | .hs | `ormolu` คำสั่งใช้ได้ |
+
+ดังนั้นหากโปรเจ็กต์ของคุณมี `prettier` ใน `package.json` OpenCode จะใช้มันโดยอัตโนมัติ
+
+---
+
+## มันทำงานอย่างไร
+
+เมื่อ OpenCode เขียนหรือแก้ไขไฟล์ มันจะ:
+
+1. ตรวจสอบนามสกุลไฟล์กับฟอร์แมตเตอร์ที่เปิดใช้งานทั้งหมด
+2. รันคำสั่งฟอร์แมตเตอร์ที่เหมาะสมบนไฟล์
+3. ใช้การเปลี่ยนแปลงการจัดรูปแบบโดยอัตโนมัติ
+
+กระบวนการนี้เกิดขึ้นในเบื้องหลัง ทำให้มั่นใจได้ว่าสไตล์โค้ดของคุณจะถูกรักษาไว้โดยไม่มีขั้นตอนที่ต้องทำเอง
+
+---
+
+## กำหนดค่า
+
+คุณสามารถปรับแต่งฟอร์แมตเตอร์ได้ผ่านทางส่วน `formatter` ในการกำหนดค่า OpenCode ของคุณ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "formatter": {}
+}
+```
+
+การกำหนดค่าฟอร์แมตเตอร์แต่ละรายการรองรับสิ่งต่อไปนี้:
+
+| คุณสมบัติ | พิมพ์ | คำอธิบาย |
+| ------------- | -------- | ------------------------------------------------------- |
+| `disabled` | บูลีน | ตั้งค่านี้เป็น `true` เพื่อปิดใช้งานฟอร์แมตเตอร์ |
+| `command` | สตริง[] | คำสั่งให้เรียกใช้การจัดรูปแบบ |
+| `environment` | วัตถุ | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อรันฟอร์แมตเตอร์ |
+| `extensions` | สตริง[] | นามสกุลไฟล์ที่ฟอร์แมตเตอร์นี้ควรรองรับ |
+
+ลองดูตัวอย่างบางส่วน
+
+---
+
+### ปิดการใช้งานฟอร์แมตเตอร์
+
+หากต้องการปิดการใช้งาน **ทั้งหมด** ฟอร์แมตเตอร์ทั่วโลก ให้ตั้งค่า `formatter` เป็น `false`:
+
+```json title="opencode.json" {3}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "formatter": false
+}
+```
+
+หากต้องการปิดใช้งานฟอร์แมตเตอร์ **เฉพาะ** ให้ตั้งค่า `disabled` เป็น `true`:
+
+```json title="opencode.json" {5}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "formatter": {
+ "prettier": {
+ "disabled": true
+ }
+ }
+}
+```
+
+---
+
+### ตัวจัดรูปแบบที่กำหนดเอง
+
+คุณสามารถแทนที่ฟอร์แมตเตอร์ที่มีอยู่แล้วภายในหรือเพิ่มฟอร์แมตใหม่ได้โดยการระบุคำสั่ง ตัวแปรสภาพแวดล้อม และนามสกุลไฟล์:
+
+```json title="opencode.json" {4-14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "formatter": {
+ "prettier": {
+ "command": ["npx", "prettier", "--write", "$FILE"],
+ "environment": {
+ "NODE_ENV": "development"
+ },
+ "extensions": [".js", ".ts", ".jsx", ".tsx"]
+ },
+ "custom-markdown-formatter": {
+ "command": ["deno", "fmt", "$FILE"],
+ "extensions": [".md"]
+ }
+ }
+}
+```
+
+ตัวยึดตำแหน่ง **`$FILE`** ในคำสั่งจะถูกแทนที่ด้วยเส้นทางไปยังไฟล์ที่กำลังจัดรูปแบบ
diff --git a/packages/web/src/content/docs/th/github.mdx b/packages/web/src/content/docs/th/github.mdx
new file mode 100644
index 000000000..5c98b7fa3
--- /dev/null
+++ b/packages/web/src/content/docs/th/github.mdx
@@ -0,0 +1,321 @@
+---
+title: GitHub
+description: ใช้ OpenCode ในปัญหา GitHub และคำขอแบบดึง
+---
+
+OpenCode ผสานรวมกับเวิร์กโฟลว์ GitHub ของคุณ พูดถึง `/opencode` หรือ `/oc` ในความคิดเห็นของคุณ แล้ว OpenCode จะดำเนินการงานภายใน GitHub Actions runner ของคุณ
+
+---
+
+## คุณสมบัติ
+
+- **ปัญหาการคัดแยก**: ขอให้ OpenCode ตรวจสอบปัญหาและอธิบายให้คุณทราบ
+- **แก้ไขและนำไปใช้**: ขอให้ OpenCode แก้ไขปัญหาหรือใช้ฟีเจอร์ และมันจะทำงานในสาขาใหม่และส่ง PR พร้อมการเปลี่ยนแปลงทั้งหมด
+- **ปลอดภัย**: OpenCode ทำงานภายในรันเนอร์ของ GitHub ของคุณ
+
+---
+
+## การติดตั้ง
+
+รันคำสั่งต่อไปนี้ในโปรเจ็กต์ที่อยู่ใน repo GitHub:
+
+```bash
+opencode github install
+```
+
+ขั้นตอนนี้จะแนะนำคุณตลอดขั้นตอนการติดตั้งแอป GitHub การสร้างเวิร์กโฟลว์ และการตั้งค่าความลับ
+
+---
+
+### การตั้งค่าด้วยตนเอง
+
+หรือคุณสามารถตั้งค่าได้ด้วยตนเอง
+
+1. **ติดตั้งแอป GitHub**
+
+ ไปที่ [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent) ตรวจสอบให้แน่ใจว่าได้ติดตั้งบนที่เก็บเป้าหมายแล้ว
+
+2. **เพิ่มขั้นตอนการทำงาน**
+
+ เพิ่มไฟล์เวิร์กโฟลว์ต่อไปนี้ไปที่ `.github/workflows/opencode.yml` ใน repo ของคุณ ตรวจสอบให้แน่ใจว่าได้ตั้งค่า `model` ที่เหมาะสมและคีย์ API ที่จำเป็นใน `env`
+
+ ```yml title=".github/workflows/opencode.yml" {24,26}
+ name: opencode
+
+ on:
+ issue_comment:
+ types: [created]
+ pull_request_review_comment:
+ types: [created]
+
+ jobs:
+ opencode:
+ if: |
+ contains(github.event.comment.body, '/oc') ||
+ contains(github.event.comment.body, '/opencode')
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 1
+ persist-credentials: false
+
+ - name: Run OpenCode
+ uses: anomalyco/opencode/github@latest
+ env:
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
+ with:
+ model: anthropic/claude-sonnet-4-20250514
+ # share: true
+ # github_token: xxxx
+ ```
+
+3. **เก็บคีย์ API เป็นความลับ**
+
+ ในองค์กรหรือโครงการ **การตั้งค่า** ให้ขยาย **ความลับและตัวแปร** ทางด้านซ้าย แล้วเลือก **การดำเนินการ** และเพิ่มคีย์ API ที่จำเป็น
+
+---
+
+## การกำหนดค่า
+
+- `model`: โมเดลที่จะใช้กับ OpenCode ใช้รูปแบบของ `provider/model` นี่คือ **จำเป็น**
+- `agent`: ตัวแทนที่จะใช้ จะต้องเป็นตัวแทนหลัก ย้อนกลับไปที่ `default_agent` จาก config หรือ `"build"` หากไม่พบ
+- `share`: ไม่ว่าจะแชร์เซสชัน OpenCode หรือไม่ ค่าเริ่มต้นเป็น **จริง** สำหรับที่เก็บข้อมูลสาธารณะ
+- `prompt`: ตัวเลือกที่กำหนดเองพร้อมท์เพื่อแทนที่การทำงานเริ่มต้น ใช้สิ่งนี้เพื่อปรับแต่งวิธีที่ OpenCode ประมวลผลคำขอ
+- `token`: โทเค็นการเข้าถึง GitHub เสริมสำหรับการดำเนินการ เช่น การสร้างความคิดเห็น การยอมรับการเปลี่ยนแปลง และการเปิดคำขอดึง ตามค่าเริ่มต้น OpenCode จะใช้โทเค็นการเข้าถึงการติดตั้งจากแอป OpenCode GitHub ดังนั้นคอมมิต แสดงความคิดเห็น และคำขอดึงข้อมูลจะปรากฏว่ามาจากแอป
+
+ หรือคุณสามารถใช้ [ในตัว `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) ของ GitHub Action runner ได้โดยไม่ต้องติดตั้งแอป OpenCode GitHub เพียงตรวจสอบให้แน่ใจว่าได้ให้สิทธิ์ที่จำเป็นในขั้นตอนการทำงานของคุณ:
+
+ ```yaml
+ permissions:
+ id-token: write
+ contents: write
+ pull-requests: write
+ issues: write
+ ```
+
+ คุณยังสามารถใช้ [โทเค็นการเข้าถึงส่วนบุคคล](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) ได้หากต้องการ
+
+---
+
+## กิจกรรมที่รองรับ
+
+OpenCode สามารถทริกเกอร์ได้โดยเหตุการณ์ GitHub ต่อไปนี้:
+
+| ประเภทเหตุการณ์ | กระตุ้นโดย | รายละเอียด |
+| ----------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
+| `issue_comment` | แสดงความคิดเห็นในประเด็นหรือประชาสัมพันธ์ | พูดถึง `/opencode` หรือ `/oc` ในความคิดเห็นของคุณ OpenCode อ่านบริบทและสามารถสร้างสาขา เปิด PR หรือตอบกลับได้ |
+| `pull_request_review_comment` | แสดงความคิดเห็นเกี่ยวกับบรรทัดรหัสเฉพาะในการประชาสัมพันธ์ | พูดถึง `/opencode` หรือ `/oc` ในขณะที่ตรวจสอบโค้ด OpenCode รับเส้นทางไฟล์ หมายเลขบรรทัด และบริบทที่แตกต่าง |
+| `issues` | ปัญหาเปิดหรือแก้ไข | ทริกเกอร์ OpenCode โดยอัตโนมัติเมื่อมีการสร้างหรือแก้ไขปัญหา ต้องป้อนข้อมูล `prompt` |
+| `pull_request` | PR เปิดหรืออัปเดตแล้ว | ทริกเกอร์ OpenCode โดยอัตโนมัติเมื่อมีการเปิด ซิงโครไนซ์ หรือเปิด PR อีกครั้ง มีประโยชน์สำหรับการตรวจสอบอัตโนมัติ |
+| `schedule` | กำหนดการตาม Cron | เรียกใช้ OpenCode ตามกำหนดเวลา ต้องป้อนข้อมูล `prompt` เอาต์พุตไปที่บันทึกและ PR (ไม่มีปัญหาในการแสดงความคิดเห็น) |
+| `workflow_dispatch` | ทริกเกอร์ด้วยตนเองจาก GitHub UI | ทริกเกอร์ OpenCode ตามความต้องการผ่านแท็บการดำเนินการ ต้องป้อนข้อมูล `prompt` เอาต์พุตไปที่บันทึกและ PR |
+
+### ตัวอย่างกำหนดการ
+
+เรียกใช้ OpenCode ตามกำหนดเวลาเพื่อทำงานอัตโนมัติ:
+
+```yaml title=".github/workflows/opencode-scheduled.yml"
+name: Scheduled OpenCode Task
+
+on:
+ schedule:
+ - cron: "0 9 * * 1" # Every Monday at 9am UTC
+
+jobs:
+ opencode:
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: write
+ pull-requests: write
+ issues: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+
+ - name: Run OpenCode
+ uses: anomalyco/opencode/github@latest
+ env:
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
+ with:
+ model: anthropic/claude-sonnet-4-20250514
+ prompt: |
+ Review the codebase for any TODO comments and create a summary.
+ If you find issues worth addressing, open an issue to track them.
+```
+
+สำหรับกิจกรรมที่กำหนดเวลาไว้ อินพุต `prompt` เป็นสิ่งที่จำเป็น** เนื่องจากไม่มีความคิดเห็นที่จะดึงคำแนะนำออกมา เวิร์กโฟลว์ตามกำหนดการทำงานโดยไม่มีบริบทผู้ใช้ในการตรวจสอบสิทธิ์ ดังนั้นเวิร์กโฟลว์จะต้องให้สิทธิ์ `contents: write` และ `pull-requests: write` หากคุณคาดหวังให้ OpenCode สร้างสาขาหรือ PR
+
+---
+
+### ตัวอย่างคำขอดึง
+
+ตรวจสอบ PR โดยอัตโนมัติเมื่อมีการเปิดหรืออัปเดต:
+
+```yaml title=".github/workflows/opencode-review.yml"
+name: opencode-review
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review]
+
+jobs:
+ review:
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: read
+ pull-requests: read
+ issues: read
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - uses: anomalyco/opencode/github@latest
+ env:
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ model: anthropic/claude-sonnet-4-20250514
+ use_github_token: true
+ prompt: |
+ Review this pull request:
+ - Check for code quality issues
+ - Look for potential bugs
+ - Suggest improvements
+```
+
+สำหรับกิจกรรม `pull_request` หากไม่มีการระบุ `prompt` OpenCode จะใช้ค่าเริ่มต้นในการตรวจสอบคำขอดึง
+
+---
+
+### ตัวอย่าง Triage ปัญหา
+
+คัดแยกปัญหาใหม่โดยอัตโนมัติ ตัวอย่างนี้กรองไปยังบัญชีที่มีอายุมากกว่า 30 วันเพื่อลดสแปม:
+
+```yaml title=".github/workflows/opencode-triage.yml"
+name: Issue Triage
+
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ triage:
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: write
+ pull-requests: write
+ issues: write
+ steps:
+ - name: Check account age
+ id: check
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const user = await github.rest.users.getByUsername({
+ username: context.payload.issue.user.login
+ });
+ const created = new Date(user.data.created_at);
+ const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
+ return days >= 30;
+ result-encoding: string
+
+ - uses: actions/checkout@v6
+ if: steps.check.outputs.result == 'true'
+ with:
+ persist-credentials: false
+
+ - uses: anomalyco/opencode/github@latest
+ if: steps.check.outputs.result == 'true'
+ env:
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
+ with:
+ model: anthropic/claude-sonnet-4-20250514
+ prompt: |
+ Review this issue. If there's a clear fix or relevant docs:
+ - Provide documentation links
+ - Add error handling guidance for code examples
+ Otherwise, do not comment.
+```
+
+สำหรับเหตุการณ์ `issues` อินพุต `prompt` นั้น **จำเป็น** เนื่องจากไม่มีความคิดเห็นที่จะดึงคำแนะนำออกมา
+
+---
+
+## ข้อความแจ้งที่กำหนดเอง
+
+แทนที่ข้อความแจ้งเริ่มต้นเพื่อปรับแต่งการทำงานของ OpenCode สำหรับเวิร์กโฟลว์ของคุณ
+
+```yaml title=".github/workflows/opencode.yml"
+- uses: anomalyco/opencode/github@latest
+ with:
+ model: anthropic/claude-sonnet-4-5
+ prompt: |
+ Review this pull request:
+ - Check for code quality issues
+ - Look for potential bugs
+ - Suggest improvements
+```
+
+สิ่งนี้มีประโยชน์สำหรับการบังคับใช้เกณฑ์การตรวจสอบเฉพาะ มาตรฐานการเขียนโค้ด หรือประเด็นมุ่งเน้นที่เกี่ยวข้องกับโครงการของคุณ
+
+---
+
+## ตัวอย่าง
+
+นี่คือตัวอย่างบางส่วนของวิธีที่คุณสามารถใช้ OpenCode ใน GitHub
+
+- **อธิบายปัญหา**
+
+ เพิ่มความคิดเห็นนี้ในปัญหา GitHub
+
+ ```
+ /opencode explain this issue
+ ```
+
+ OpenCode จะอ่านกระทู้ทั้งหมด รวมถึงความคิดเห็นทั้งหมด และตอบกลับพร้อมคำอธิบายที่ชัดเจน
+
+- **แก้ไขปัญหา**
+
+ ในปัญหา GitHub ให้พูดว่า:
+
+ ```
+ /opencode fix this
+ ```
+
+ และ OpenCode จะสร้างสาขาใหม่ ดำเนินการเปลี่ยนแปลง และเปิด PR ที่มีการเปลี่ยนแปลง
+
+- **ตรวจสอบ PR และทำการเปลี่ยนแปลง**
+
+ แสดงความคิดเห็นต่อไปนี้ใน GitHub PR
+
+ ```
+ Delete the attachment from S3 when the note is removed /oc
+ ```
+
+ OpenCode จะดำเนินการเปลี่ยนแปลงที่ร้องขอและส่งมอบให้กับ PR เดียวกัน
+
+- **ตรวจสอบบรรทัดรหัสเฉพาะ**
+
+ แสดงความคิดเห็นโดยตรงบนบรรทัดโค้ดในแท็บ "ไฟล์" ของ PR OpenCode จะตรวจจับไฟล์ หมายเลขบรรทัด และบริบทต่างโดยอัตโนมัติเพื่อให้การตอบสนองที่แม่นยำ
+
+ ```
+ [Comment on specific lines in Files tab]
+ /oc add error handling here
+ ```
+
+ เมื่อแสดงความคิดเห็นในบรรทัดใดบรรทัดหนึ่ง OpenCode จะได้รับ:
+ - กำลังตรวจสอบไฟล์ที่แน่นอน
+ - บรรทัดโค้ดเฉพาะ
+ - บริบทที่แตกต่างโดยรอบ
+ - ข้อมูลหมายเลขบรรทัด
+
+ ซึ่งช่วยให้สามารถร้องขอที่ตรงเป้าหมายมากขึ้นโดยไม่จำเป็นต้องระบุเส้นทางไฟล์หรือหมายเลขบรรทัดด้วยตนเอง
diff --git a/packages/web/src/content/docs/th/gitlab.mdx b/packages/web/src/content/docs/th/gitlab.mdx
new file mode 100644
index 000000000..48d89ef5c
--- /dev/null
+++ b/packages/web/src/content/docs/th/gitlab.mdx
@@ -0,0 +1,195 @@
+---
+title: GitLab
+description: ใช้ OpenCode ในปัญหา GitLab และรวมคำขอ
+---
+
+OpenCode ทำงานร่วมกับเวิร์กโฟลว์ GitLab ของคุณผ่านไปป์ไลน์ GitLab CI/CD หรือกับ GitLab Duo
+
+ในทั้งสองกรณี OpenCode จะทำงานบน GitLab runners ของคุณ
+
+---
+
+## GitLab CI
+
+OpenCode ทำงานในไปป์ไลน์ GitLab ปกติ คุณสามารถสร้างมันลงในไปป์ไลน์เป็น [องค์ประกอบ CI](https://docs.gitlab.com/ee/ci/components/)
+
+ที่นี่เรากำลังใช้คอมโพเนนต์ CI/CD ที่สร้างโดยชุมชนสำหรับ OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode)
+
+---
+
+### คุณสมบัติ
+
+- **ใช้การกำหนดค่าแบบกำหนดเองต่องาน**: กำหนดค่า OpenCode ด้วยไดเร็กทอรีการกำหนดค่าแบบกำหนดเอง เช่น `./config/#custom-directory` เพื่อเปิดหรือปิดฟังก์ชันการทำงานต่อการเรียกใช้ OpenCode
+- **การตั้งค่าขั้นต่ำ**: องค์ประกอบ CI จะตั้งค่า OpenCode ในเบื้องหลัง คุณเพียงแค่ต้องสร้างการกำหนดค่า OpenCode และข้อความแจ้งเริ่มต้นเท่านั้น
+- **ยืดหยุ่น**: ส่วนประกอบ CI รองรับอินพุตหลายอินพุตเพื่อปรับแต่งลักษณะการทำงาน
+
+---
+
+### ตั้งค่า
+
+1. จัดเก็บการรับรองความถูกต้อง OpenCode ของคุณ JSON เป็นประเภทไฟล์ CI ตัวแปรสภาพแวดล้อมภายใต้ **การตั้งค่า** > **CI/CD** > **ตัวแปร** ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายว่าเป็น "ปิดบังและซ่อนไว้"
+2. เพิ่มสิ่งต่อไปนี้ในไฟล์ `.gitlab-ci.yml` ของคุณ
+
+ ```yaml title=".gitlab-ci.yml"
+ include:
+ - component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
+ inputs:
+ config_dir: ${CI_PROJECT_DIR}/opencode-config
+ auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
+ command: optional-custom-command
+ message: "Your prompt here"
+ ```
+
+หากต้องการข้อมูลเพิ่มเติมและกรณีการใช้งาน [ตรวจสอบเอกสาร](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) สำหรับส่วนประกอบนี้
+
+---
+
+## GitLab ดูโอ
+
+OpenCode ทำงานร่วมกับเวิร์กโฟลว์ GitLab ของคุณ
+พูดถึง `@opencode` ในความคิดเห็น แล้ว OpenCode จะดำเนินการงานภายในไปป์ไลน์ GitLab CI ของคุณ
+
+---
+
+### คุณสมบัติ
+
+- **ปัญหาการคัดแยก**: ขอให้ OpenCode ตรวจสอบปัญหาและอธิบายให้คุณทราบ
+- **แก้ไขและนำไปใช้**: ขอให้ OpenCode แก้ไขปัญหาหรือใช้ฟีเจอร์
+ มันจะสร้างสาขาใหม่และขอรวมการเปลี่ยนแปลง
+- **ปลอดภัย**: OpenCode ทำงานบนนักวิ่ง GitLab ของคุณ
+
+---
+
+### ตั้งค่า
+
+OpenCode ทำงานในไปป์ไลน์ GitLab CI/CD ของคุณ นี่คือสิ่งที่คุณจะต้องตั้งค่า:
+
+:::tip
+ตรวจสอบ [**เอกสาร GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) เพื่อดูคำแนะนำล่าสุด
+:::
+
+1. กำหนดค่าสภาพแวดล้อม GitLab ของคุณ
+2. ตั้งค่า CI/CD
+3. รับผู้ให้บริการโมเดล AI API คีย์
+4. สร้างบัญชีบริการ
+5. กำหนดค่าตัวแปร CI/CD
+6. สร้างไฟล์กำหนดค่าโฟลว์ ต่อไปนี้เป็นตัวอย่าง:
+
+ <details>
+
+ <summary>Flow configuration</summary>
+
+ ```yaml
+ image: node:22-slim
+ commands:
+ - echo "Installing opencode"
+ - npm install --global opencode-ai
+ - echo "Installing glab"
+ - export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
+ - apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
+ - curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
+ - apt-get install --yes glab
+ - echo "Configuring glab"
+ - echo $GITLAB_HOST
+ - echo "Creating OpenCode auth configuration"
+ - mkdir --parents ~/.local/share/opencode
+ - |
+ cat > ~/.local/share/opencode/auth.json << EOF
+ {
+ "anthropic": {
+ "type": "api",
+ "key": "$ANTHROPIC_API_KEY"
+ }
+ }
+ EOF
+ - echo "Configuring git"
+ - git config --global user.email "[email protected]"
+ - git config --global user.name "OpenCode"
+ - echo "Testing glab"
+ - glab issue list
+ - echo "Running OpenCode"
+ - |
+ opencode run "
+ You are an AI assistant helping with GitLab operations.
+
+ Context: $AI_FLOW_CONTEXT
+ Task: $AI_FLOW_INPUT
+ Event: $AI_FLOW_EVENT
+
+ Please execute the requested task using the available GitLab tools.
+ Be thorough in your analysis and provide clear explanations.
+
+ <important>
+ Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
+
+ If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
+ You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
+ </important>
+ "
+ - git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
+ - echo "Checking for git changes and pushing if any exist"
+ - |
+ if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
+ echo "Git changes detected, adding and pushing..."
+ git add .
+ if git diff --cached --quiet; then
+ echo "No staged changes to commit"
+ else
+ echo "Committing changes to branch: $CI_WORKLOAD_REF"
+ git commit --message "Codex changes"
+ echo "Pushing changes up to $CI_WORKLOAD_REF"
+ git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
+ echo "Changes successfully pushed"
+ fi
+ else
+ echo "No git changes detected, skipping push"
+ fi
+ variables:
+ - ANTHROPIC_API_KEY
+ - GITLAB_TOKEN_OPENCODE
+ - GITLAB_HOST
+ ```
+
+ </details>
+
+คุณสามารถดูคำแนะนำโดยละเอียดได้ที่ [GitLab CLI agent docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)
+
+---
+
+### ตัวอย่าง
+
+นี่คือตัวอย่างบางส่วนของวิธีที่คุณสามารถใช้ OpenCode ใน GitLab
+
+:::tip
+คุณสามารถกำหนดค่าให้ใช้วลีทริกเกอร์ที่แตกต่างจาก `@opencode`
+:::
+
+- **อธิบายปัญหา**
+
+ เพิ่มความคิดเห็นนี้ในปัญหา GitLab
+
+ ```
+ @opencode explain this issue
+ ```
+
+ OpenCode จะอ่านปัญหาและตอบกลับพร้อมคำอธิบายที่ชัดเจน
+
+- **แก้ไขปัญหา**
+
+ ในปัญหา GitLab ให้พูดว่า:
+
+ ```
+ @opencode fix this
+ ```
+
+ OpenCode จะสร้างสาขาใหม่ ดำเนินการเปลี่ยนแปลง และเปิดคำขอรวมที่มีการเปลี่ยนแปลง
+
+- **ตรวจสอบคำขอรวม**
+
+ แสดงความคิดเห็นต่อไปนี้ในคำขอรวม GitLab
+
+ ```
+ @opencode review this merge request
+ ```
+
+ OpenCode จะตรวจสอบคำขอรวมและให้ข้อเสนอแนะ
diff --git a/packages/web/src/content/docs/th/ide.mdx b/packages/web/src/content/docs/th/ide.mdx
new file mode 100644
index 000000000..e82ca8320
--- /dev/null
+++ b/packages/web/src/content/docs/th/ide.mdx
@@ -0,0 +1,48 @@
+---
+title: IDE
+description: ส่วนขยาย OpenCode สำหรับ VS Code, Cursor และ IDE อื่นๆ
+---
+
+OpenCode ทำงานร่วมกับ VS Code, Cursor หรือ IDE ใดๆ ที่รองรับเทอร์มินัล เพียงเรียกใช้ `opencode` ในเทอร์มินัลเพื่อเริ่มต้น
+
+---
+
+## การใช้งาน
+
+- **เปิดใช้ด่วน**: ใช้ `Cmd+Esc` (Mac) หรือ `Ctrl+Esc` (Windows/Linux) เพื่อเปิด OpenCode ในมุมมองเทอร์มินัลแบบแยก หรือเน้นเซสชันเทอร์มินัลที่มีอยู่หากมีการทำงานอยู่แล้ว
+- **เซสชันใหม่**: ใช้ `Cmd+Shift+Esc` (Mac) หรือ `Ctrl+Shift+Esc` (Windows/Linux) เพื่อเริ่มเซสชันเทอร์มินัล OpenCode ใหม่ แม้ว่าเซสชันหนึ่งจะเปิดอยู่แล้วก็ตาม คุณยังสามารถคลิกปุ่ม OpenCode ใน UI ได้ด้วย
+- **การรับรู้บริบท**: แชร์การเลือกหรือแท็บปัจจุบันของคุณโดยอัตโนมัติด้วย OpenCode
+- **ทางลัดการอ้างอิงไฟล์**: ใช้ `Cmd+Option+K` (Mac) หรือ `Alt+Ctrl+K` (Linux/Windows) เพื่อแทรกการอ้างอิงไฟล์ ตัวอย่างเช่น `@File#L37-42`
+
+---
+
+## การติดตั้ง
+
+วิธีติดตั้ง OpenCode บน VS Code และทางแยกยอดนิยม เช่น Cursor, Windsurf, VSCodium:
+
+1. เปิดรหัส VS
+2. เปิดเทอร์มินัลรวม
+3. เรียกใช้ `opencode` - ​​ส่วนขยายจะติดตั้งโดยอัตโนมัติ
+
+ในทางกลับกัน หากคุณต้องการใช้ IDE ของคุณเองเมื่อคุณเรียกใช้ `/editor` หรือ `/export` จาก TUI คุณจะต้องตั้งค่า `export EDITOR="code --wait"` [เรียนรู้เพิ่มเติม](/docs/tui/#editor-setup)
+
+---
+
+### ติดตั้งด้วยตนเอง
+
+ค้นหา **OpenCode** ใน Extension Marketplace แล้วคลิก **ติดตั้ง**
+
+---
+
+### การแก้ไขปัญหา
+
+หากส่วนขยายไม่สามารถติดตั้งได้โดยอัตโนมัติ:
+
+- ตรวจสอบให้แน่ใจว่าคุณใช้งาน `opencode` ในเทอร์มินัลรวม
+- ยืนยันว่า CLI สำหรับ IDE ของคุณได้รับการติดตั้งแล้ว:
+ - สำหรับรหัส VS: `code` คำสั่ง
+ - สำหรับเคอร์เซอร์: `cursor` คำสั่ง
+ - สำหรับวินด์เซิร์ฟ: `windsurf` คำสั่ง
+ - สำหรับ VSCodium: `codium` คำสั่ง
+ - ถ้าไม่เช่นนั้น ให้รัน `Cmd+Shift+P` (Mac) หรือ `Ctrl+Shift+P` (Windows/Linux) และค้นหา "Shell Command: Install 'code' command in PATH" (หรือเทียบเท่ากับ IDE ของคุณ)
+- ตรวจสอบให้แน่ใจว่ารหัส VS มีสิทธิ์ในการติดตั้งส่วนขยาย
diff --git a/packages/web/src/content/docs/th/index.mdx b/packages/web/src/content/docs/th/index.mdx
new file mode 100644
index 000000000..92e71b7e0
--- /dev/null
+++ b/packages/web/src/content/docs/th/index.mdx
@@ -0,0 +1,359 @@
+---
+title: บทนำ
+description: เริ่มต้นใช้งาน OpenCode
+---
+
+import { Tabs, TabItem } from "@astrojs/starlight/components"
+import config from "../../../../config.mjs"
+export const console = config.console
+
+[**OpenCode**](/) คือเอเจนต์การเข้ารหัส AI แบบโอเพ่นซอร์ส มีให้บริการในรูปแบบอินเทอร์เฟซบนเทอร์มินัล แอปเดสก์ท็อป หรือส่วนขยาย IDE
+
+![OpenCode TUI พร้อมธีม opencode](../../../assets/lander/screenshot.png)
+
+มาเริ่มกันเลย
+
+---
+
+#### ข้อกำหนดเบื้องต้น
+
+หากต้องการใช้ OpenCode ในเทอร์มินัล คุณจะต้องมี:
+
+1. เทอร์มินัลอีมูเลเตอร์ที่ทันสมัยเช่น:
+ - [WezTerm](https://wezterm.org) ข้ามแพลตฟอร์ม
+ - [Alacritty](https://alacritty.org) ข้ามแพลตฟอร์ม
+ - [โกสต์ตี้](https://ghostty.org), ลินุกซ์ และ macOS
+ - [คิตตี้](https://sw.kovidgoyal.net/kitty/), Linux และ macOS
+
+2. ปุ่ม API สำหรับผู้ให้บริการ LLM ที่คุณต้องการใช้
+
+---
+
+## ติดตั้ง
+
+วิธีที่ง่ายที่สุดในการติดตั้ง OpenCode คือการใช้สคริปต์การติดตั้ง
+
+```bash
+curl -fsSL https://opencode.ai/install | bash
+```
+
+คุณยังสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้:
+
+- **การใช้ Node.js**
+
+ <Tabs>
+
+ <TabItem label="npm">
+ ```bash
+ npm install -g opencode-ai
+ ```
+
+ </TabItem>
+
+ <TabItem label="Bun">
+ ```bash
+ bun install -g opencode-ai
+ ```
+
+ </TabItem>
+
+ <TabItem label="pnpm">
+ ```bash
+ pnpm install -g opencode-ai
+ ```
+
+ </TabItem>
+
+ <TabItem label="Yarn">
+ ```bash
+ yarn global add opencode-ai
+ ```
+
+ </TabItem>
+
+ </Tabs>
+
+- **การใช้ Homebrew บน macOS และ Linux**
+
+ ```bash
+ brew install anomalyco/tap/opencode
+ ```
+
+ > เราขอแนะนำให้ใช้การแตะ OpenCode เพื่อเผยแพร่ข้อมูลล่าสุด สูตร `brew install opencode` อย่างเป็นทางการได้รับการดูแลโดยทีมงาน Homebrew และมีการอัปเดตไม่บ่อยนัก
+
+- **การใช้ Paru บน Arch Linux**
+
+ ```bash
+ paru -S opencode-bin
+ ```
+
+#### หน้าต่าง
+
+:::tip[แนะนำ: ใช้ WSL]
+เพื่อประสบการณ์ที่ดีที่สุดบน Windows เราขอแนะนำให้ใช้ [ระบบย่อย Windows สำหรับ Linux (WSL)](/docs/windows-wsl) ให้ประสิทธิภาพที่ดีขึ้นและความเข้ากันได้เต็มรูปแบบกับคุณสมบัติของ OpenCode
+:::
+
+- **ใช้ช็อคโกแลต**
+
+ ```bash
+ choco install opencode
+ ```
+
+- **การใช้สกู๊ป**
+
+ ```bash
+ scoop install opencode
+ ```
+
+- **การใช้ NPM**
+
+ ```bash
+ npm install -g opencode-ai
+ ```
+
+- ** การใช้ Mise **
+
+ ```bash
+ mise use -g github:anomalyco/opencode
+ ```
+
+- **การใช้นักเทียบท่า**
+
+ ```bash
+ docker run -it --rm ghcr.io/anomalyco/opencode
+ ```
+
+ขณะนี้การสนับสนุนสำหรับการติดตั้ง OpenCode บน Windows โดยใช้ Bun อยู่ระหว่างดำเนินการ
+
+คุณยังสามารถคว้าไบนารี่ได้จาก [เผยแพร่](https://github.com/anomalyco/opencode/releases)
+
+---
+
+## กำหนดค่า
+
+ด้วย OpenCode คุณสามารถใช้ผู้ให้บริการ LLM ใดก็ได้โดยกำหนดค่าคีย์ API
+
+หากคุณยังใหม่ต่อการใช้ผู้ให้บริการ LLM เราขอแนะนำให้ใช้ [OpenCode Zen](/docs/zen)
+เป็นรายการโมเดลที่ได้รับการดูแลจัดการซึ่งได้รับการทดสอบและตรวจสอบโดย OpenCode
+ทีม.
+
+1. เรียกใช้คำสั่ง `/connect` ใน TUI เลือก opencode และไปที่ [opencode.ai/auth](https://opencode.ai/auth)
+
+ ```txt
+ /connect
+ ```
+
+2. ลงชื่อเข้าใช้ เพิ่มรายละเอียดการเรียกเก็บเงินของคุณ และคัดลอกรหัส API ของคุณ
+
+3. วางคีย์ API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+หรือคุณสามารถเลือกหนึ่งในผู้ให้บริการรายอื่นได้ [เรียนรู้เพิ่มเติม](/docs/providers#ไดเรกทอรี)
+
+---
+
+## เริ่มต้น
+
+เมื่อคุณได้กำหนดค่าผู้ให้บริการแล้ว คุณสามารถนำทางไปยังโปรเจ็กต์นั้นได้
+คุณอยากทำงานต่อ
+
+```bash
+cd /path/to/project
+```
+
+และเรียกใช้ OpenCode
+
+```bash
+opencode
+```
+
+จากนั้น เริ่มต้น OpenCode สำหรับโปรเจ็กต์โดยการรันคำสั่งต่อไปนี้
+
+```bash frame="none"
+/init
+```
+
+นี่จะได้รับ OpenCode เพื่อวิเคราะห์โครงการของคุณและสร้างไฟล์ `AGENTS.md`
+รากของโครงการ
+
+:::tip
+คุณควรคอมมิตไฟล์ `AGENTS.md` ของโปรเจ็กต์ของคุณไปที่ Git
+:::
+
+ซึ่งจะช่วยให้ OpenCode เข้าใจโครงสร้างโปรเจ็กต์และรูปแบบการเขียนโค้ด
+ใช้แล้ว.
+
+---
+
+## การใช้งาน
+
+ตอนนี้คุณพร้อมที่จะใช้ OpenCode เพื่อทำงานในโครงการของคุณแล้ว อย่าลังเลที่จะถามมัน
+อะไรก็ตาม!
+
+หากคุณยังใหม่ต่อการใช้เอเจนต์การเข้ารหัส AI ต่อไปนี้คือตัวอย่างบางส่วนที่อาจเป็นไปได้
+ช่วย.
+
+---
+
+### ถามคำถาม
+
+คุณสามารถขอให้ OpenCode อธิบาย codebase ให้คุณได้
+
+:::tip
+ใช้ปุ่ม `@` เพื่อค้นหาไฟล์ในโครงการอย่างคลุมเครือ
+:::
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+How is authentication handled in @packages/functions/src/api/index.ts
+```
+
+สิ่งนี้มีประโยชน์หากมีส่วนหนึ่งของโค้ดเบสที่คุณไม่ได้ดำเนินการ
+
+---
+
+### เพิ่มคุณสมบัติ
+
+คุณสามารถขอให้ OpenCode เพิ่มคุณสมบัติใหม่ให้กับโครงการของคุณได้ แม้ว่าเราจะแนะนำให้ขอให้สร้างแผนก่อนก็ตาม
+
+1. **สร้างแผน**
+
+ OpenCode มีโหมด _Plan_ ที่ปิดการใช้งานความสามารถในการเปลี่ยนแปลงและ
+ แนะนำ _how_ ว่าจะใช้งานฟีเจอร์นี้แทน
+
+ เปลี่ยนไปใช้ปุ่ม **Tab** คุณจะเห็นตัวบ่งชี้นี้ที่มุมขวาล่าง
+
+ ```bash frame="none" title="Switch to Plan mode"
+ <TAB>
+ ```
+
+ ตอนนี้เรามาอธิบายสิ่งที่เราต้องการให้ทำ
+
+ ```txt frame="none"
+ When a user deletes a note, we'd like to flag it as deleted in the database.
+ Then create a screen that shows all the recently deleted notes.
+ From this screen, the user can undelete a note or permanently delete it.
+ ```
+
+ คุณต้องการให้รายละเอียด OpenCode เพียงพอเพื่อทำความเข้าใจสิ่งที่คุณต้องการ มันช่วยได้
+ เพื่อพูดคุยเหมือนคุณกำลังพูดคุยกับนักพัฒนารุ่นน้องในทีมของคุณ
+
+ :::tip
+ ให้บริบทและตัวอย่างมากมายแก่ OpenCode เพื่อช่วยให้เข้าใจสิ่งที่คุณ
+ ต้องการ.
+ :::
+
+2. **ทบทวนแผน**
+
+ เมื่อมีแผนแล้ว คุณสามารถให้ข้อเสนอแนะหรือเพิ่มรายละเอียดเพิ่มเติมได้
+
+ ```txt frame="none"
+ We'd like to design this new screen using a design I've used before.
+ [Image #1] Take a look at this image and use it as a reference.
+ ```
+
+ :::tip
+ ลากและวางรูปภาพลงในเทอร์มินัลเพื่อเพิ่มลงในพรอมต์
+ :::
+
+ OpenCode สามารถสแกนรูปภาพที่คุณให้มาและเพิ่มลงในข้อความแจ้งได้ คุณสามารถ
+ ทำได้โดยลากและวางรูปภาพลงในเทอร์มินัล
+
+3. **สร้างฟีเจอร์**
+
+ เมื่อคุณรู้สึกพอใจกับแผนแล้ว ให้เปลี่ยนกลับเป็น _Build mode_ ภายใน
+ กดปุ่ม **Tab** อีกครั้ง
+
+ ```bash frame="none"
+ <TAB>
+ ```
+
+ และขอให้ทำการเปลี่ยนแปลง
+
+ ```bash frame="none"
+ Sounds good! Go ahead and make the changes.
+ ```
+
+---
+
+### ทำการเปลี่ยนแปลง
+
+หากต้องการการเปลี่ยนแปลงที่ตรงไปตรงมามากขึ้น คุณสามารถขอให้ OpenCode สร้างมันโดยตรงได้
+โดยไม่ต้องทบทวนแผนก่อน
+
+```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
+We need to add authentication to the /settings route. Take a look at how this is
+handled in the /notes route in @packages/functions/src/notes.ts and implement
+the same logic in @packages/functions/src/settings.ts
+```
+
+คุณต้องการให้แน่ใจว่าคุณให้รายละเอียดในปริมาณที่เหมาะสมเพื่อให้ OpenCode ดำเนินการได้ถูกต้อง
+การเปลี่ยนแปลง
+
+---
+
+### เลิกทำการเปลี่ยนแปลง
+
+สมมติว่าคุณขอให้ OpenCode ทำการเปลี่ยนแปลงบางอย่าง
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+Can you refactor the function in @packages/functions/src/api/index.ts?
+```
+
+แต่คุณก็รู้ว่ามันไม่ใช่สิ่งที่คุณต้องการ คุณ **สามารถยกเลิก** การเปลี่ยนแปลงได้
+โดยใช้คำสั่ง `/undo`
+
+```bash frame="none"
+/undo
+```
+
+OpenCode จะคืนค่าการเปลี่ยนแปลงที่คุณทำและแสดงข้อความต้นฉบับของคุณ
+อีกครั้ง.
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+Can you refactor the function in @packages/functions/src/api/index.ts?
+```
+
+จากที่นี่ คุณสามารถปรับแต่งข้อความแจ้งและขอให้ OpenCode ลองอีกครั้ง
+
+:::tip
+คุณสามารถเรียกใช้ `/undo` ได้หลายครั้งเพื่อเลิกทำการเปลี่ยนแปลงหลายรายการ
+:::
+
+หรือคุณสามารถ **สามารถทำซ้ำ** การเปลี่ยนแปลงโดยใช้คำสั่ง `/redo`
+
+```bash frame="none"
+/redo
+```
+
+---
+
+## แบ่งปัน
+
+การสนทนาที่คุณมีกับ OpenCode สามารถ [แชร์กับคุณได้
+ทีมงาน](/docs/share)
+
+```bash frame="none"
+/share
+```
+
+การดำเนินการนี้จะสร้างลิงก์ไปยังการสนทนาปัจจุบันและคัดลอกไปยังคลิปบอร์ดของคุณ
+
+:::note
+การสนทนาจะไม่ถูกแชร์โดยค่าเริ่มต้น
+:::
+
+นี่คือ [ตัวอย่างการสนทนา](https://opencode.ai/s/4XP1fce5) กับ OpenCode
+
+---
+
+## ปรับแต่ง
+
+แค่นั้นแหละ! ตอนนี้คุณเป็นมืออาชีพในการใช้ OpenCode แล้ว
+
+หากต้องการทำให้เป็นของคุณเอง เราขอแนะนำให้ [เลือกธีม](/docs/themes), [ปรับแต่งปุ่มลัด](/docs/keybinds), [กำหนดค่าตัวจัดรูปแบบโค้ด](/docs/formatters), [สร้างคำสั่งที่กำหนดเอง](/docs/commands) หรือลองใช้ [การกำหนดค่า OpenCode](/docs/config)
diff --git a/packages/web/src/content/docs/th/keybinds.mdx b/packages/web/src/content/docs/th/keybinds.mdx
new file mode 100644
index 000000000..b84873e58
--- /dev/null
+++ b/packages/web/src/content/docs/th/keybinds.mdx
@@ -0,0 +1,192 @@
+---
+title: ปุ่มลัด
+description: ปรับแต่งปุ่มลัดของคุณ
+---
+
+OpenCode มีรายการปุ่มลัดที่คุณปรับแต่งได้ผ่านการกำหนดค่า OpenCode
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "keybinds": {
+ "leader": "ctrl+x",
+ "app_exit": "ctrl+c,ctrl+d,<leader>q",
+ "editor_open": "<leader>e",
+ "theme_list": "<leader>t",
+ "sidebar_toggle": "<leader>b",
+ "scrollbar_toggle": "none",
+ "username_toggle": "none",
+ "status_view": "<leader>s",
+ "tool_details": "none",
+ "session_export": "<leader>x",
+ "session_new": "<leader>n",
+ "session_list": "<leader>l",
+ "session_timeline": "<leader>g",
+ "session_fork": "none",
+ "session_rename": "none",
+ "session_share": "none",
+ "session_unshare": "none",
+ "session_interrupt": "escape",
+ "session_compact": "<leader>c",
+ "session_child_cycle": "<leader>right",
+ "session_child_cycle_reverse": "<leader>left",
+ "session_parent": "<leader>up",
+ "messages_page_up": "pageup,ctrl+alt+b",
+ "messages_page_down": "pagedown,ctrl+alt+f",
+ "messages_line_up": "ctrl+alt+y",
+ "messages_line_down": "ctrl+alt+e",
+ "messages_half_page_up": "ctrl+alt+u",
+ "messages_half_page_down": "ctrl+alt+d",
+ "messages_first": "ctrl+g,home",
+ "messages_last": "ctrl+alt+g,end",
+ "messages_next": "none",
+ "messages_previous": "none",
+ "messages_copy": "<leader>y",
+ "messages_undo": "<leader>u",
+ "messages_redo": "<leader>r",
+ "messages_last_user": "none",
+ "messages_toggle_conceal": "<leader>h",
+ "model_list": "<leader>m",
+ "model_cycle_recent": "f2",
+ "model_cycle_recent_reverse": "shift+f2",
+ "model_cycle_favorite": "none",
+ "model_cycle_favorite_reverse": "none",
+ "variant_cycle": "ctrl+t",
+ "command_list": "ctrl+p",
+ "agent_list": "<leader>a",
+ "agent_cycle": "tab",
+ "agent_cycle_reverse": "shift+tab",
+ "input_clear": "ctrl+c",
+ "input_paste": "ctrl+v",
+ "input_submit": "return",
+ "input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
+ "input_move_left": "left,ctrl+b",
+ "input_move_right": "right,ctrl+f",
+ "input_move_up": "up",
+ "input_move_down": "down",
+ "input_select_left": "shift+left",
+ "input_select_right": "shift+right",
+ "input_select_up": "shift+up",
+ "input_select_down": "shift+down",
+ "input_line_home": "ctrl+a",
+ "input_line_end": "ctrl+e",
+ "input_select_line_home": "ctrl+shift+a",
+ "input_select_line_end": "ctrl+shift+e",
+ "input_visual_line_home": "alt+a",
+ "input_visual_line_end": "alt+e",
+ "input_select_visual_line_home": "alt+shift+a",
+ "input_select_visual_line_end": "alt+shift+e",
+ "input_buffer_home": "home",
+ "input_buffer_end": "end",
+ "input_select_buffer_home": "shift+home",
+ "input_select_buffer_end": "shift+end",
+ "input_delete_line": "ctrl+shift+d",
+ "input_delete_to_line_end": "ctrl+k",
+ "input_delete_to_line_start": "ctrl+u",
+ "input_backspace": "backspace,shift+backspace",
+ "input_delete": "ctrl+d,delete,shift+delete",
+ "input_undo": "ctrl+-,super+z",
+ "input_redo": "ctrl+.,super+shift+z",
+ "input_word_forward": "alt+f,alt+right,ctrl+right",
+ "input_word_backward": "alt+b,alt+left,ctrl+left",
+ "input_select_word_forward": "alt+shift+f,alt+shift+right",
+ "input_select_word_backward": "alt+shift+b,alt+shift+left",
+ "input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
+ "input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
+ "history_previous": "up",
+ "history_next": "down",
+ "terminal_suspend": "ctrl+z",
+ "terminal_title_toggle": "none",
+ "tips_toggle": "<leader>h",
+ "display_thinking": "none"
+ }
+}
+```
+
+---
+
+## กุญแจผู้นำ
+
+OpenCode ใช้คีย์ `leader` สำหรับการเชื่อมโยงคีย์ส่วนใหญ่ วิธีนี้จะหลีกเลี่ยงความขัดแย้งในเทอร์มินัลของคุณ
+
+ตามค่าเริ่มต้น `ctrl+x` จะเป็นปุ่มผู้นำ และการดำเนินการส่วนใหญ่ต้องการให้คุณกดปุ่มผู้นำก่อน จากนั้นจึงกดทางลัด ตัวอย่างเช่น หากต้องการเริ่มเซสชันใหม่ คุณต้องกด `ctrl+x` ก่อน จากนั้นจึงกด `n`
+
+คุณไม่จำเป็นต้องใช้คีย์ผู้นำสำหรับการผูกคีย์ แต่เราขอแนะนำให้ทำเช่นนั้น
+
+---
+
+## ปิดการใช้งานการผูกปุ่ม
+
+คุณสามารถปิดการใช้งานการผูกปุ่มได้โดยการเพิ่มคีย์ลงในการกำหนดค่าของคุณด้วยค่า "none"
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "keybinds": {
+ "session_compact": "none"
+ }
+}
+```
+
+---
+
+## ทางลัดพร้อมท์เดสก์ท็อป
+
+การป้อนข้อมูลพร้อมท์ของแอป OpenCode บนเดสก์ท็อปรองรับทางลัด Readline/Emacs-style ทั่วไปสำหรับการแก้ไขข้อความ สิ่งเหล่านี้มีอยู่แล้วภายในและปัจจุบันไม่สามารถกำหนดค่าผ่าน `opencode.json` ได้
+
+| ทางลัด | การกระทำ |
+| -------- | ---------------------------------------- |
+| `ctrl+a` | ย้ายไปที่จุดเริ่มต้นของบรรทัดปัจจุบัน |
+| `ctrl+e` | ย้ายไปที่จุดสิ้นสุดของบรรทัดปัจจุบัน |
+| `ctrl+b` | เลื่อนเคอร์เซอร์กลับไปหนึ่งอักขระ |
+| `ctrl+f` | เลื่อนเคอร์เซอร์ไปข้างหน้าหนึ่งอักขระ |
+| `alt+b` | เลื่อนเคอร์เซอร์กลับไปหนึ่งคำ |
+| `alt+f` | เลื่อนเคอร์เซอร์ไปข้างหน้าหนึ่งคำ |
+| `ctrl+d` | ลบอักขระใต้เคอร์เซอร์ |
+| `ctrl+k` | ฆ่าให้จบแถว |
+| `ctrl+u` | ฆ่าที่จุดเริ่มต้นของบรรทัด |
+| `ctrl+w` | ฆ่าคำก่อนหน้า |
+| `alt+d` | ฆ่าคำถัดไป |
+| `ctrl+t` | ย้ายอักขระ |
+| `ctrl+g` | ยกเลิกป๊อปโอเวอร์ / ยกเลิกการตอบกลับที่ทำงานอยู่ |
+
+---
+
+## Shift+Enter
+
+เทอร์มินัลบางตัวไม่ส่งคีย์ตัวปรับแต่งพร้อม Enter เป็นค่าเริ่มต้น คุณอาจต้องกำหนดค่าเทอร์มินัลของคุณให้ส่ง `Shift+Enter` เป็นลำดับหลีก
+
+### เทอร์มินัลวินโดวส์
+
+เปิด `settings.json` ของคุณที่:
+
+```
+%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
+```
+
+เพิ่มสิ่งนี้ลงในอาร์เรย์ `actions` ระดับรูท:
+
+```json
+"actions": [
+ {
+ "command": {
+ "action": "sendInput",
+ "input": "\u001b[13;2u"
+ },
+ "id": "User.sendInput.ShiftEnterCustom"
+ }
+]
+```
+
+เพิ่มสิ่งนี้ลงในอาร์เรย์ `keybindings` ระดับรูท:
+
+```json
+"keybindings": [
+ {
+ "keys": "shift+enter",
+ "id": "User.sendInput.ShiftEnterCustom"
+ }
+]
+```
+
+บันทึกไฟล์และรีสตาร์ท Windows Terminal หรือเปิดแท็บใหม่
diff --git a/packages/web/src/content/docs/th/lsp.mdx b/packages/web/src/content/docs/th/lsp.mdx
new file mode 100644
index 000000000..4ad79384a
--- /dev/null
+++ b/packages/web/src/content/docs/th/lsp.mdx
@@ -0,0 +1,188 @@
+---
+title: LSP เซิร์ฟเวอร์
+description: OpenCode ทำงานร่วมกับเซิร์ฟเวอร์ LSP ของคุณ
+---
+
+OpenCode ทำงานร่วมกับ Language Server Protocol (LSP) เพื่อช่วยให้ LLM โต้ตอบกับโค้ดเบสของคุณ ใช้การวินิจฉัยเพื่อให้ข้อเสนอแนะไปยัง LLM
+
+---
+
+## บิวท์อิน
+
+OpenCode มาพร้อมกับเซิร์ฟเวอร์ LSP ในตัวหลายตัวสำหรับภาษายอดนิยม:
+
+| LSP เซิร์ฟเวอร์ | ส่วนขยาย | ความต้องการ |
+| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------ |
+| โหราศาสตร์ | .แอสโตร | ติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Astro |
+| ทุบตี | .sh, .ทุบตี, .zsh, .ksh | ติดตั้ง bash-Language-Server โดยอัตโนมัติ |
+| เสียงดังกราว | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | ติดตั้งอัตโนมัติสำหรับโครงการ C/C++ |
+| ซีชาร์ป | .ซีเอส | `.NET SDK` ติดตั้งแล้ว |
+| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` คำสั่งใช้ได้ |
+| โผ | .โผ | `dart` คำสั่งใช้ได้ |
+| เดโน | .ts, .tsx, .js, .jsx, .mjs | มีคำสั่ง `deno` (ตรวจจับอัตโนมัติ deno.json/deno.jsonc) |
+| น้ำอมฤต-ls | .ex, .exs | `elixir` คำสั่งใช้ได้ |
+| เอสลินท์ | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` การพึ่งพาในโครงการ |
+| เอฟชาร์ป | .fs, .fsi, .fsx, .fsscript | `.NET SDK` ติดตั้งแล้ว |
+| เปล่งประกาย | .แวววาว | `gleam` คำสั่งใช้ได้ |
+| โกปลส์ | .ไป | `go` คำสั่งใช้ได้ |
+| สวัสดี | .hs, .lhs | `haskell-language-server-wrapper` คำสั่งใช้ได้ |
+| jdtls | .java | `Java SDK (version 21+)` ติดตั้งแล้ว |
+| kotlin-ls | .kt, .kts | ติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Kotlin |
+| lua-ls | .lua | ติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Lua |
+| ห้าม | .ห้าม | `nixd` คำสั่งใช้ได้ |
+| ocaml-lsp | .มล., .มลิ | `ocamllsp` คำสั่งใช้ได้ |
+| ออกซ์ลินท์ | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` การพึ่งพาในโครงการ |
+| php intelephense.php | .php | ติดตั้งอัตโนมัติสำหรับโครงการ PHP |
+| ปริซึม | .ปริซึม | `prisma` คำสั่งใช้ได้ |
+| ไพไรท์ | .py, .pyi | `pyright` ติดตั้งการพึ่งพาแล้ว |
+| ทับทิม-lsp (rubocop) | .rb, .rake, .gemspec, .ru | มีคำสั่ง `ruby` และ `gem` |
+| สนิม | .อาร์เอส | `rust-analyzer` คำสั่งใช้ได้ |
+| ซอร์สคิท-lsp | .สวิฟท์, .objc, .objcpp | ติดตั้ง `swift` (`xcode` บน macOS) |
+| เก๋ไก๋ | .svelte | ติดตั้งอัตโนมัติสำหรับโครงการ Svelte |
+| ภูมิประเทศ | .tf, .tfvars | ติดตั้งอัตโนมัติจากรุ่น GitHub |
+| คนตัวเล็ก | .พิมพ์, .พิมพ์ | ติดตั้งอัตโนมัติจากรุ่น GitHub |
+| ตัวพิมพ์ดีด | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` การพึ่งพาในโครงการ |
+| วิว | .vue | ติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Vue |
+| yaml-ls | .yaml, .yml | ติดตั้งเซิร์ฟเวอร์ภาษา Red Hat yaml โดยอัตโนมัติ |
+| zls | .ซิก, .ซอน | `zig` คำสั่งใช้ได้ |
+
+เซิร์ฟเวอร์ LSP จะถูกเปิดใช้งานโดยอัตโนมัติเมื่อตรวจพบนามสกุลไฟล์ใดนามสกุลหนึ่งข้างต้นและเป็นไปตามข้อกำหนด
+
+:::note
+คุณสามารถปิดใช้งานการดาวน์โหลดเซิร์ฟเวอร์ LSP อัตโนมัติได้โดยตั้งค่าตัวแปรสภาพแวดล้อม `OPENCODE_DISABLE_LSP_DOWNLOAD` เป็น `true`
+:::
+
+---
+
+## มันทำงานอย่างไร
+
+เมื่อ opencode เปิดไฟล์ มันจะ:
+
+1. ตรวจสอบนามสกุลไฟล์กับเซิร์ฟเวอร์ LSP ที่เปิดใช้งานทั้งหมด
+2. เริ่มเซิร์ฟเวอร์ LSP ที่เหมาะสมหากยังไม่ได้ทำงาน
+
+---
+
+## กำหนดค่า
+
+You can customize LSP servers through the `lsp` section in your opencode config.
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": {}
+}
+```
+
+เซิร์ฟเวอร์ LSP แต่ละเซิร์ฟเวอร์รองรับสิ่งต่อไปนี้:
+
+| คุณสมบัติ | พิมพ์ | คำอธิบาย |
+| ---------------- | -------- | ------------------------------------------------- |
+| `disabled` | บูลีน | ตั้งค่านี้เป็น `true` เพื่อปิดการใช้งานเซิร์ฟเวอร์ LSP |
+| `command` | สตริง[] | คำสั่งเพื่อเริ่มต้นเซิร์ฟเวอร์ LSP |
+| `extensions` | สตริง[] | นามสกุลไฟล์ที่เซิร์ฟเวอร์ LSP นี้ควรจัดการ |
+| `env` | วัตถุ | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์ |
+| `initialization` | วัตถุ | ตัวเลือกการเริ่มต้นที่จะส่งไปยังเซิร์ฟเวอร์ LSP |
+
+ลองดูตัวอย่างบางส่วน
+
+---
+
+### ตัวแปรสภาพแวดล้อม
+
+ใช้คุณสมบัติ `env` เพื่อตั้งค่าตัวแปรสภาพแวดล้อมเมื่อเริ่มต้นเซิร์ฟเวอร์ LSP:
+
+```json title="opencode.json" {5-7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": {
+ "rust": {
+ "env": {
+ "RUST_LOG": "debug"
+ }
+ }
+ }
+}
+```
+
+---
+
+### ตัวเลือกการเริ่มต้น
+
+ใช้คุณสมบัติ `initialization` เพื่อส่งตัวเลือกการเริ่มต้นไปยังเซิร์ฟเวอร์ LSP นี่คือการตั้งค่าเฉพาะเซิร์ฟเวอร์ที่ส่งระหว่างคำขอ LSP `initialize`:
+
+```json title="opencode.json" {5-9}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": {
+ "typescript": {
+ "initialization": {
+ "preferences": {
+ "importModuleSpecifierPreference": "relative"
+ }
+ }
+ }
+ }
+}
+```
+
+:::note
+ตัวเลือกการเริ่มต้นจะแตกต่างกันไปตามเซิร์ฟเวอร์ LSP ตรวจสอบเอกสารประกอบของเซิร์ฟเวอร์ LSP ของคุณเพื่อดูตัวเลือกที่มี
+:::
+
+---
+
+### ปิดการใช้งานเซิร์ฟเวอร์ LSP
+
+หากต้องการปิดการใช้งานเซิร์ฟเวอร์ **ทั้งหมด** LSP ทั่วโลก ให้ตั้งค่า `lsp` เป็น `false`:
+
+```json title="opencode.json" {3}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": false
+}
+```
+
+หากต้องการปิดการใช้งานเซิร์ฟเวอร์ **เฉพาะ** LSP ให้ตั้งค่า `disabled` เป็น `true`:
+
+```json title="opencode.json" {5}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": {
+ "typescript": {
+ "disabled": true
+ }
+ }
+}
+```
+
+---
+
+### เซิร์ฟเวอร์ LSP แบบกำหนดเอง
+
+คุณสามารถเพิ่มเซิร์ฟเวอร์ LSP แบบกำหนดเองได้โดยระบุคำสั่งและนามสกุลไฟล์:
+
+```json title="opencode.json" {4-7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "lsp": {
+ "custom-lsp": {
+ "command": ["custom-lsp-server", "--stdio"],
+ "extensions": [".custom"]
+ }
+ }
+}
+```
+
+---
+
+## ข้อมูลเพิ่มเติม
+
+### PHP อินเทเลฟินส์
+
+PHP Intelephense นำเสนอคุณสมบัติระดับพรีเมียมผ่านรหัสลิขสิทธิ์ คุณสามารถระบุรหัสสัญญาอนุญาตได้โดยการวาง (เท่านั้น) รหัสในไฟล์ข้อความที่:
+
+- บน macOS/Linux: `$HOME/intelephense/licence.txt`
+- บนวินโดวส์: `%USERPROFILE%/intelephense/licence.txt`
+
+ไฟล์ควรมีเฉพาะรหัสลิขสิทธิ์โดยไม่มีเนื้อหาเพิ่มเติม
diff --git a/packages/web/src/content/docs/th/mcp-servers.mdx b/packages/web/src/content/docs/th/mcp-servers.mdx
new file mode 100644
index 000000000..43ac571b8
--- /dev/null
+++ b/packages/web/src/content/docs/th/mcp-servers.mdx
@@ -0,0 +1,511 @@
+---
+title: MCP เซิร์ฟเวอร์
+description: เพิ่มเครื่องมือ MCP ในพื้นที่และระยะไกล
+---
+
+คุณสามารถเพิ่มเครื่องมือภายนอกให้กับ OpenCode ได้โดยใช้ _Model Context Protocol_ หรือ MCP OpenCode รองรับทั้งเซิร์ฟเวอร์ภายในและเซิร์ฟเวอร์ระยะไกล
+
+เมื่อเพิ่มแล้ว เครื่องมือ MCP จะพร้อมใช้งานโดยอัตโนมัติสำหรับ LLM ควบคู่ไปกับเครื่องมือในตัว
+
+---
+
+#### คำเตือน
+
+เมื่อคุณใช้เซิร์ฟเวอร์ MCP เซิร์ฟเวอร์ดังกล่าวจะเพิ่มบริบท สิ่งนี้สามารถเพิ่มขึ้นได้อย่างรวดเร็วหากคุณมีเครื่องมือมากมาย ดังนั้นเราขอแนะนำให้ระมัดระวังเซิร์ฟเวอร์ MCP ที่คุณใช้
+
+:::tip
+เซิร์ฟเวอร์ MCP เพิ่มในบริบทของคุณ ดังนั้นคุณจึงต้องระวังด้วยว่าเซิร์ฟเวอร์ใดที่คุณเปิดใช้งาน
+:::
+
+เซิร์ฟเวอร์ MCP บางตัว เช่น เซิร์ฟเวอร์ GitHub MCP มีแนวโน้มที่จะเพิ่มโทเค็นจำนวนมากและอาจเกินขีดจำกัดบริบทได้อย่างง่ายดาย
+
+---
+
+## เปิดใช้งาน
+
+คุณสามารถกำหนดเซิร์ฟเวอร์ MCP ได้ใน [OpenCode Config](https://opencode.ai/docs/config/) ภายใต้ `mcp` เพิ่ม MCP แต่ละรายการด้วยชื่อที่ไม่ซ้ำใคร คุณสามารถอ้างอิงถึง MCP ด้วยชื่อได้เมื่อแจ้ง LLM
+
+```jsonc title="opencode.jsonc" {6}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "name-of-mcp-server": {
+ // ...
+ "enabled": true,
+ },
+ "name-of-other-mcp-server": {
+ // ...
+ },
+ },
+}
+```
+
+คุณยังสามารถปิดการใช้งานเซิร์ฟเวอร์ได้โดยการตั้งค่า `enabled` เป็น `false` สิ่งนี้มีประโยชน์หากคุณต้องการปิดการใช้งานเซิร์ฟเวอร์ชั่วคราวโดยไม่ต้องลบออกจากการกำหนดค่าของคุณ
+
+---
+
+### การเอาชนะค่าเริ่มต้นระยะไกล
+
+องค์กรสามารถจัดเตรียมเซิร์ฟเวอร์ MCP เริ่มต้นผ่านทางจุดสิ้นสุด `.well-known/opencode` เซิร์ฟเวอร์เหล่านี้อาจถูกปิดใช้งานตามค่าเริ่มต้น ทำให้ผู้ใช้สามารถเลือกใช้เซิร์ฟเวอร์ที่ต้องการได้
+
+หากต้องการเปิดใช้งานเซิร์ฟเวอร์เฉพาะจากการกำหนดค่าระยะไกลขององค์กรของคุณ ให้เพิ่มเซิร์ฟเวอร์ดังกล่าวลงในการกำหนดค่าภายในเครื่องของคุณด้วย `enabled: true`:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "jira": {
+ "type": "remote",
+ "url": "https://jira.example.com/mcp",
+ "enabled": true
+ }
+ }
+}
+```
+
+ค่าการกำหนดค่าในเครื่องของคุณจะแทนที่ค่าเริ่มต้นระยะไกล ดู [config ลำดับความสำคัญ](/docs/config#precedence-order) สำหรับรายละเอียดเพิ่มเติม
+
+---
+
+## ท้องถิ่น
+
+เพิ่มเซิร์ฟเวอร์ท้องถิ่น MCP โดยใช้ `type` ไปยัง `"local"` ภายในวัตถุ MCP
+
+```jsonc title="opencode.jsonc" {15}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-local-mcp-server": {
+ "type": "local",
+ // Or ["bun", "x", "my-mcp-command"]
+ "command": ["npx", "-y", "my-mcp-command"],
+ "enabled": true,
+ "environment": {
+ "MY_ENV_VAR": "my_env_var_value",
+ },
+ },
+ },
+}
+```
+
+คำสั่งคือวิธีที่เซิร์ฟเวอร์ MCP ท้องถิ่นเริ่มทำงาน คุณยังสามารถส่งผ่านรายการตัวแปรสภาพแวดล้อมได้เช่นกัน
+
+ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถเพิ่มการทดสอบเซิร์ฟเวอร์ [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP เซิร์ฟเวอร์
+
+```jsonc title="opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "mcp_everything": {
+ "type": "local",
+ "command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
+ },
+ },
+}
+```
+
+และหากต้องการใช้งาน ฉันสามารถเพิ่ม `use the mcp_everything tool` ในข้อความแจ้งของฉันได้
+
+```txt "mcp_everything"
+use the mcp_everything tool to add the number 3 and 4
+```
+
+---
+
+#### ตัวเลือก
+
+นี่คือตัวเลือกทั้งหมดสำหรับการกำหนดค่าเซิร์ฟเวอร์ MCP ภายในเครื่อง
+
+| ตัวเลือก | พิมพ์ | ที่จำเป็น | คำอธิบาย |
+| ------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
+| `type` | สตริง | ย | ประเภทของการเชื่อมต่อเซิร์ฟเวอร์ MCP ต้องเป็น `"local"` |
+| `command` | อาร์เรย์ | ย | คำสั่งและอาร์กิวเมนต์เพื่อรันเซิร์ฟเวอร์ MCP |
+| `environment` | วัตถุ | | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อรันเซิร์ฟเวอร์ |
+| `enabled` | บูลีน | | เปิดหรือปิดใช้งานเซิร์ฟเวอร์ MCP เมื่อเริ่มต้นระบบ |
+| `timeout` | ตัวเลข | | หมดเวลาเป็น ms สำหรับการดึงเครื่องมือจากเซิร์ฟเวอร์ MCP ค่าเริ่มต้นคือ 5,000 (5 วินาที) |
+
+---
+
+## ระยะไกล
+
+เพิ่มเซิร์ฟเวอร์ระยะไกล MCP โดยตั้งค่า `type` เป็น `"remote"`
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-remote-mcp": {
+ "type": "remote",
+ "url": "https://my-mcp-server.com",
+ "enabled": true,
+ "headers": {
+ "Authorization": "Bearer MY_API_KEY"
+ }
+ }
+ }
+}
+```
+
+`url` คือ URL ของเซิร์ฟเวอร์ MCP ระยะไกล และด้วยตัวเลือก `headers` คุณสามารถส่งผ่านรายการส่วนหัวได้
+
+---
+
+#### ตัวเลือก
+
+| ตัวเลือก | พิมพ์ | ที่จำเป็น | คำอธิบาย |
+| --------- | ------- | -------- | ----------------------------------------------------------------------------------- |
+| `type` | สตริง | ย | ประเภทของการเชื่อมต่อเซิร์ฟเวอร์ MCP ต้องเป็น `"remote"` |
+| `url` | สตริง | ย | URL ของเซิร์ฟเวอร์ MCP ระยะไกล |
+| `enabled` | บูลีน | | เปิดหรือปิดใช้งานเซิร์ฟเวอร์ MCP เมื่อเริ่มต้นระบบ |
+| `headers` | วัตถุ | | ส่วนหัวที่จะส่งพร้อมกับคำขอ |
+| `oauth` | วัตถุ | | การกำหนดค่าการตรวจสอบสิทธิ์ OAuth ดูส่วน [OAuth](#oauth) ด้านล่าง |
+| `timeout` | ตัวเลข | | หมดเวลาเป็น ms สำหรับการดึงเครื่องมือจากเซิร์ฟเวอร์ MCP ค่าเริ่มต้นคือ 5,000 (5 วินาที) |
+
+---
+
+## OAuth
+
+OpenCode จะจัดการการตรวจสอบสิทธิ์ OAuth สำหรับเซิร์ฟเวอร์ MCP ระยะไกลโดยอัตโนมัติ เมื่อเซิร์ฟเวอร์ต้องการการรับรองความถูกต้อง OpenCode จะ:
+
+1. ตรวจหาการตอบสนอง 401 และเริ่มโฟลว์ OAuth
+2. ใช้ **การลงทะเบียนไคลเอ็นต์แบบไดนามิก (RFC 7591)** หากเซิร์ฟเวอร์รองรับ
+3. จัดเก็บโทเค็นอย่างปลอดภัยสำหรับคำขอในอนาคต
+
+---
+
+### อัตโนมัติ
+
+สำหรับเซิร์ฟเวอร์ MCP ที่เปิดใช้งาน OAuth ส่วนใหญ่ ไม่จำเป็นต้องมีการกำหนดค่าพิเศษ เพียงกำหนดค่าเซิร์ฟเวอร์ระยะไกล:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-oauth-server": {
+ "type": "remote",
+ "url": "https://mcp.example.com/mcp"
+ }
+ }
+}
+```
+
+หากเซิร์ฟเวอร์ต้องมีการตรวจสอบสิทธิ์ OpenCode จะแจ้งให้คุณตรวจสอบความถูกต้องเมื่อคุณพยายามใช้งานครั้งแรก หากไม่เป็นเช่นนั้น คุณสามารถ[ทริกเกอร์โฟลว์ด้วยตนเอง](#การตรวจสอบสิทธิ์) ด้วย `opencode mcp auth <server-name>`
+
+---
+
+### ลงทะเบียนล่วงหน้า
+
+หากคุณมีข้อมูลประจำตัวไคลเอ็นต์จากผู้ให้บริการเซิร์ฟเวอร์ MCP คุณสามารถกำหนดค่าได้:
+
+```json title="opencode.json" {7-11}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-oauth-server": {
+ "type": "remote",
+ "url": "https://mcp.example.com/mcp",
+ "oauth": {
+ "clientId": "{env:MY_MCP_CLIENT_ID}",
+ "clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
+ "scope": "tools:read tools:execute"
+ }
+ }
+ }
+}
+```
+
+---
+
+### กำลังตรวจสอบสิทธิ์
+
+คุณสามารถทริกเกอร์การตรวจสอบสิทธิ์หรือจัดการข้อมูลประจำตัวได้ด้วยตนเอง
+
+ตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ MCP เฉพาะ:
+
+```bash
+opencode mcp auth my-oauth-server
+```
+
+แสดงรายการเซิร์ฟเวอร์ MCP ทั้งหมดและสถานะการตรวจสอบสิทธิ์:
+
+```bash
+opencode mcp list
+```
+
+ลบข้อมูลรับรองที่เก็บไว้:
+
+```bash
+opencode mcp logout my-oauth-server
+```
+
+คำสั่ง `mcp auth` จะเปิดเบราว์เซอร์ของคุณเพื่อขออนุญาต หลังจากที่คุณอนุญาตแล้ว OpenCode จะจัดเก็บโทเค็นอย่างปลอดภัยใน `~/.local/share/opencode/mcp-auth.json`
+
+---
+
+#### ปิดการใช้งาน OAuth
+
+หากคุณต้องการปิดการใช้งาน OAuth อัตโนมัติสำหรับเซิร์ฟเวอร์ (เช่น สำหรับเซิร์ฟเวอร์ที่ใช้คีย์ API แทน) ให้ตั้งค่า `oauth` เป็น `false`:
+
+```json title="opencode.json" {7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-api-key-server": {
+ "type": "remote",
+ "url": "https://mcp.example.com/mcp",
+ "oauth": false,
+ "headers": {
+ "Authorization": "Bearer {env:MY_API_KEY}"
+ }
+ }
+ }
+}
+```
+
+---
+
+#### ตัวเลือก OAuth
+
+| ตัวเลือก | พิมพ์ | คำอธิบาย |
+| -------------- | --------------- | -------------------------------------------------------------------------------- |
+| `oauth` | วัตถุ \ | เท็จ | ออบเจ็กต์การกำหนดค่า OAuth หรือ `false` เพื่อปิดใช้การตรวจจับอัตโนมัติของ OAuth |
+| `clientId` | สตริง | รหัสไคลเอ็นต์ OAuth หากไม่ได้ระบุไว้ จะพยายามลงทะเบียนไคลเอ็นต์แบบไดนามิก |
+| `clientSecret` | สตริง | ข้อมูลลับไคลเอ็นต์ OAuth หากเซิร์ฟเวอร์การให้สิทธิ์กำหนดไว้ |
+| `scope` | สตริง | ขอบเขต OAuth ที่จะขอระหว่างการให้สิทธิ์ |
+
+#### การดีบัก
+
+หากเซิร์ฟเวอร์ MCP ระยะไกลไม่สามารถตรวจสอบสิทธิ์ได้ คุณสามารถวินิจฉัยปัญหาด้วย:
+
+```bash
+# View auth status for all OAuth-capable servers
+opencode mcp auth list
+
+# Debug connection and OAuth flow for a specific server
+opencode mcp debug my-oauth-server
+```
+
+คำสั่ง `mcp debug` แสดงสถานะการตรวจสอบสิทธิ์ปัจจุบัน ทดสอบการเชื่อมต่อ HTTP และพยายามใช้ขั้นตอนการค้นหา OAuth
+
+---
+
+## จัดการ
+
+MCP ของคุณพร้อมใช้งานในฐานะเครื่องมือใน OpenCode ควบคู่ไปกับเครื่องมือในตัว คุณจึงสามารถจัดการผ่านการกำหนดค่า OpenCode ได้เหมือนกับเครื่องมืออื่นๆ
+
+---
+
+### ทั่วโลก
+
+ซึ่งหมายความว่าคุณสามารถเปิดหรือปิดใช้งานได้ทั่วโลก
+
+```json title="opencode.json" {14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-mcp-foo": {
+ "type": "local",
+ "command": ["bun", "x", "my-mcp-command-foo"]
+ },
+ "my-mcp-bar": {
+ "type": "local",
+ "command": ["bun", "x", "my-mcp-command-bar"]
+ }
+ },
+ "tools": {
+ "my-mcp-foo": false
+ }
+}
+```
+
+นอกจากนี้เรายังสามารถใช้รูปแบบ glob เพื่อปิดใช้งาน MCP ที่ตรงกันทั้งหมดได้
+
+```json title="opencode.json" {14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-mcp-foo": {
+ "type": "local",
+ "command": ["bun", "x", "my-mcp-command-foo"]
+ },
+ "my-mcp-bar": {
+ "type": "local",
+ "command": ["bun", "x", "my-mcp-command-bar"]
+ }
+ },
+ "tools": {
+ "my-mcp*": false
+ }
+}
+```
+
+ที่นี่เราใช้รูปแบบ glob `my-mcp*` เพื่อปิดการใช้งาน MCP ทั้งหมด
+
+---
+
+### ต่อตัวแทน
+
+หากคุณมีเซิร์ฟเวอร์ MCP จำนวนมาก คุณอาจต้องการเปิดใช้งานเซิร์ฟเวอร์เหล่านี้ต่อตัวแทนเท่านั้น และปิดใช้งานเซิร์ฟเวอร์เหล่านั้นทั่วโลก เมื่อต้องการทำสิ่งนี้:
+
+1. ปิดการใช้งานเป็นเครื่องมือทั่วโลก
+2. ใน [agent config](/docs/agents#tools) ให้เปิดใช้งานเซิร์ฟเวอร์ MCP เป็นเครื่องมือ
+
+```json title="opencode.json" {11, 14-18}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "my-mcp": {
+ "type": "local",
+ "command": ["bun", "x", "my-mcp-command"],
+ "enabled": true
+ }
+ },
+ "tools": {
+ "my-mcp*": false
+ },
+ "agent": {
+ "my-agent": {
+ "tools": {
+ "my-mcp*": true
+ }
+ }
+ }
+}
+```
+
+---
+
+#### รูปแบบลูกโลก
+
+รูปแบบ glob ใช้รูปแบบ globbing regex แบบง่าย:
+
+- `*` ตรงกับอักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป (เช่น `"my-mcp*"` ตรงกับ `my-mcp_search`, `my-mcp_list` ฯลฯ)
+- `?` ตรงกับอักขระหนึ่งตัวเท่านั้น
+- อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง
+
+:::note
+MCP เครื่องมือเซิร์ฟเวอร์ได้รับการลงทะเบียนด้วยชื่อเซิร์ฟเวอร์เป็นคำนำหน้า ดังนั้นหากต้องการปิดการใช้งานเครื่องมือทั้งหมดสำหรับเซิร์ฟเวอร์ เพียงใช้:
+
+```
+"mymcpservername_*": false
+```
+
+:::
+
+---
+
+## ตัวอย่าง
+
+ด้านล่างนี้เป็นตัวอย่างของเซิร์ฟเวอร์ MCP ทั่วไปบางส่วน คุณสามารถส่ง PR ได้ถ้าคุณต้องการจัดทำเอกสารเซิร์ฟเวอร์อื่น
+
+---
+
+### ยาม
+
+เพิ่ม [เซิร์ฟเวอร์ Sentry MCP](https://mcp.sentry.dev) เพื่อโต้ตอบกับโครงการและปัญหา Sentry ของคุณ
+
+```json title="opencode.json" {4-8}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "sentry": {
+ "type": "remote",
+ "url": "https://mcp.sentry.dev/mcp",
+ "oauth": {}
+ }
+ }
+}
+```
+
+หลังจากเพิ่มการกำหนดค่าแล้ว ให้ตรวจสอบสิทธิ์กับ Sentry:
+
+```bash
+opencode mcp auth sentry
+```
+
+ซึ่งจะเป็นการเปิดหน้าต่างเบราว์เซอร์เพื่อดำเนินการโฟลว์ OAuth ให้เสร็จสมบูรณ์ และเชื่อมต่อ OpenCode กับบัญชี Sentry ของคุณ
+
+เมื่อตรวจสอบสิทธิ์แล้ว คุณจะใช้เครื่องมือ Sentry ในข้อความแจ้งเพื่อค้นหาปัญหา โปรเจ็กต์ และข้อมูลข้อผิดพลาดได้
+
+```txt "use sentry"
+Show me the latest unresolved issues in my project. use sentry
+```
+
+---
+
+### บริบท7
+
+เพิ่ม [Context7 MCP server](https://github.com/upstash/context7) เพื่อค้นหาในเอกสาร
+
+```json title="opencode.json" {4-7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "context7": {
+ "type": "remote",
+ "url": "https://mcp.context7.com/mcp"
+ }
+ }
+}
+```
+
+หากคุณได้ลงทะเบียนสำหรับบัญชีฟรี คุณสามารถใช้รหัส API ของคุณและรับขีดจำกัดอัตราที่สูงขึ้น
+
+```json title="opencode.json" {7-9}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "context7": {
+ "type": "remote",
+ "url": "https://mcp.context7.com/mcp",
+ "headers": {
+ "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
+ }
+ }
+ }
+}
+```
+
+ที่นี่เราสมมติว่าคุณมีชุดตัวแปรสภาพแวดล้อม `CONTEXT7_API_KEY`
+
+เพิ่ม `use context7` ในข้อความแจ้งของคุณเพื่อใช้เซิร์ฟเวอร์ Context7 MCP
+
+```txt "use context7"
+Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
+```
+
+หรือคุณสามารถเพิ่มสิ่งนี้ลงใน [AGENTS.md](/docs/rules/) ของคุณได้
+
+```md title="AGENTS.md"
+When you need to search docs, use `context7` tools.
+```
+
+---
+
+### Grep โดย Vercel
+
+เพิ่มเซิร์ฟเวอร์ [Grep by Vercel](https://grep.app) MCP เพื่อค้นหาผ่านข้อมูลโค้ดบน GitHub
+
+```json title="opencode.json" {4-7}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mcp": {
+ "gh_grep": {
+ "type": "remote",
+ "url": "https://mcp.grep.app"
+ }
+ }
+}
+```
+
+เนื่องจากเราตั้งชื่อเซิร์ฟเวอร์ MCP `gh_grep` คุณสามารถเพิ่ม `use the gh_grep tool` ในข้อความแจ้งของคุณเพื่อให้ตัวแทนใช้งานได้
+
+```txt "use the gh_grep tool"
+What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
+```
+
+หรือคุณสามารถเพิ่มสิ่งนี้ลงใน [AGENTS.md](/docs/rules/) ของคุณได้
+
+```md title="AGENTS.md"
+If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
+```
diff --git a/packages/web/src/content/docs/th/models.mdx b/packages/web/src/content/docs/th/models.mdx
new file mode 100644
index 000000000..5f0856c0d
--- /dev/null
+++ b/packages/web/src/content/docs/th/models.mdx
@@ -0,0 +1,223 @@
+---
+title: โมเดล
+description: การกำหนดค่าผู้ให้บริการและรุ่น LLM
+---
+
+OpenCode ใช้ [AI SDK](https://ai-sdk.dev/) และ [Models.dev](https://models.dev) เพื่อรองรับผู้ให้บริการ **75+ LLM** และรองรับการใช้งานโมเดลท้องถิ่น
+
+---
+
+## ผู้ให้บริการ
+
+ผู้ให้บริการที่ได้รับความนิยมส่วนใหญ่จะถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น หากคุณได้เพิ่มข้อมูลรับรองสำหรับผู้ให้บริการผ่านคำสั่ง `/connect` ข้อมูลเหล่านั้นจะพร้อมใช้งานเมื่อคุณเริ่ม OpenCode
+
+เรียนรู้เพิ่มเติมเกี่ยวกับ [ผู้ให้บริการ](/docs/providers)
+
+---
+
+## เลือกรุ่น
+
+เมื่อคุณกำหนดค่าผู้ให้บริการแล้ว คุณสามารถเลือกรุ่นที่ต้องการได้โดยพิมพ์:
+
+```bash frame="none"
+/models
+```
+
+---
+
+## รุ่นที่แนะนำ
+
+มีโมเดลออกมามากมาย โดยมีโมเดลใหม่ๆ ออกมาทุกสัปดาห์
+
+:::tip
+พิจารณาใช้รุ่นใดรุ่นหนึ่งที่เราแนะนำ
+:::
+
+อย่างไรก็ตาม มีเพียงไม่กี่ตัวเท่านั้นที่เก่งทั้งการสร้างโค้ดและการเรียกใช้เครื่องมือ
+
+ต่อไปนี้เป็นโมเดลหลายรุ่นที่ทำงานได้ดีกับ OpenCode โดยไม่เรียงลำดับเป็นพิเศษ (นี่ไม่ใช่รายการที่ครอบคลุมและไม่จำเป็นต้องเป็นข้อมูลล่าสุด):
+
+- GPT 5.2
+- GPT 5.1 โคเด็กซ์
+- คลอดด์บทประพันธ์ 4.5
+- คล็อด ซอนเน็ต 4.5
+- มินิแม็กซ์ M2.1
+- เจมินี่ 3 โปร
+
+---
+
+## ตั้งค่าเริ่มต้น
+
+หากต้องการตั้งค่าสิ่งใดสิ่งหนึ่งเป็นโมเดลเริ่มต้น คุณสามารถตั้งค่าคีย์ `model` ในของคุณ
+การกำหนดค่า OpenCode
+
+```json title="opencode.json" {3}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "model": "lmstudio/google/gemma-3n-e4b"
+}
+```
+
+ID แบบเต็มคือ `provider_id/model_id` ตัวอย่างเช่น หากคุณใช้ [OpenCode Zen](/docs/zen) คุณจะใช้ `opencode/gpt-5.1-codex` สำหรับ GPT 5.1 Codex
+
+หากคุณได้กำหนดค่า [ผู้ให้บริการที่กำหนดเอง](/docs/providers#กำหนดเอง) `provider_id` จะเป็นคีย์จากส่วน `provider` ของการกำหนดค่าของคุณ และ `model_id` จะเป็นคีย์จาก `provider.models`
+
+---
+
+## กำหนดค่าโมเดล
+
+คุณสามารถกำหนดค่าตัวเลือกของโมเดลได้ทั่วโลกผ่านการกำหนดค่า
+
+```jsonc title="opencode.jsonc" {7-12,19-24}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openai": {
+ "models": {
+ "gpt-5": {
+ "options": {
+ "reasoningEffort": "high",
+ "textVerbosity": "low",
+ "reasoningSummary": "auto",
+ "include": ["reasoning.encrypted_content"],
+ },
+ },
+ },
+ },
+ "anthropic": {
+ "models": {
+ "claude-sonnet-4-5-20250929": {
+ "options": {
+ "thinking": {
+ "type": "enabled",
+ "budgetTokens": 16000,
+ },
+ },
+ },
+ },
+ },
+ },
+}
+```
+
+ที่นี่เรากำลังกำหนดการตั้งค่าส่วนกลางสำหรับโมเดลในตัวสองรุ่น: `gpt-5` เมื่อเข้าถึงผ่านผู้ให้บริการ `openai` และ `claude-sonnet-4-20250514` เมื่อเข้าถึงผ่านผู้ให้บริการ `anthropic`
+สามารถดูผู้ให้บริการและชื่อรุ่นในตัวได้ที่ [Models.dev](https://models.dev)
+
+คุณยังสามารถกำหนดค่าตัวเลือกเหล่านี้สำหรับตัวแทนใดๆ ที่คุณใช้อยู่ได้ การกำหนดค่าตัวแทนจะแทนที่ตัวเลือกส่วนกลางใดๆ ที่นี่ [เรียนรู้เพิ่มเติม](/docs/agents/#เพิ่มเติม)
+
+คุณยังสามารถกำหนดตัวแปรแบบกำหนดเองที่ขยายตัวแปรในตัวได้ ตัวแปรช่วยให้คุณกำหนดการตั้งค่าที่แตกต่างกันสำหรับรุ่นเดียวกันโดยไม่ต้องสร้างรายการที่ซ้ำกัน:
+
+```jsonc title="opencode.jsonc" {6-21}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "opencode": {
+ "models": {
+ "gpt-5": {
+ "variants": {
+ "high": {
+ "reasoningEffort": "high",
+ "textVerbosity": "low",
+ "reasoningSummary": "auto",
+ },
+ "low": {
+ "reasoningEffort": "low",
+ "textVerbosity": "low",
+ "reasoningSummary": "auto",
+ },
+ },
+ },
+ },
+ },
+ },
+}
+```
+
+---
+
+## หลากหลาย
+
+หลายรุ่นรองรับหลายรุ่นด้วยการกำหนดค่าที่แตกต่างกัน OpenCode มาพร้อมกับตัวแปรเริ่มต้นในตัวสำหรับผู้ให้บริการยอดนิยม
+
+### ตัวแปรในตัว
+
+OpenCode มาพร้อมกับตัวแปรเริ่มต้นสำหรับผู้ให้บริการหลายราย:
+
+**มานุษยวิทยา**:
+
+- `high` - ​​งบประมาณการคิดสูง (ค่าเริ่มต้น)
+- `max` - ​​งบประมาณการคิดสูงสุด
+
+**โอเพนเอไอ**:
+
+แตกต่างกันไปตามรุ่น แต่โดยประมาณ:
+
+- `none` - ​​ไม่มีเหตุผล
+- `minimal` - ​​ความพยายามในการให้เหตุผลน้อยที่สุด
+- `low` - ​​ความพยายามในการให้เหตุผลต่ำ
+- `medium` - ​​ความพยายามในการให้เหตุผลปานกลาง
+- `high` - ​​ความพยายามในการให้เหตุผลสูง
+- `xhigh` - ​​ความพยายามในการให้เหตุผลสูงเป็นพิเศษ
+
+**Google**:
+
+- `low` - ​​ลดความพยายาม/token งบประมาณ
+- `high` - ​​ความพยายามที่สูงขึ้น/token งบประมาณ
+
+:::tip
+รายการนี้ไม่ครอบคลุม ผู้ให้บริการรายอื่นหลายรายก็มีค่าเริ่มต้นในตัวเช่นกัน
+:::
+
+### ตัวแปรที่กำหนดเอง
+
+คุณสามารถแทนที่ตัวแปรที่มีอยู่หรือเพิ่มตัวแปรของคุณเองได้:
+
+```jsonc title="opencode.jsonc" {7-18}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openai": {
+ "models": {
+ "gpt-5": {
+ "variants": {
+ "thinking": {
+ "reasoningEffort": "high",
+ "textVerbosity": "low",
+ },
+ "fast": {
+ "disabled": true,
+ },
+ },
+ },
+ },
+ },
+ },
+}
+```
+
+### ตัวแปรของวงจร
+
+ใช้ปุ่มลัด `variant_cycle` เพื่อสลับระหว่างตัวแปรต่างๆ อย่างรวดเร็ว [เรียนรู้เพิ่มเติม](/docs/keybinds)
+
+---
+
+## กำลังโหลดโมเดล
+
+เมื่อ OpenCode เริ่มทำงาน ระบบจะตรวจสอบรุ่นตามลำดับความสำคัญต่อไปนี้:
+
+1. การตั้งค่าสถานะบรรทัดคำสั่ง `--model` หรือ `-m` รูปแบบจะเหมือนกับในไฟล์ปรับแต่ง: `provider_id/model_id`
+
+2. รายการโมเดลในการกำหนดค่า OpenCode
+
+ ```json title="opencode.json"
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "model": "anthropic/claude-sonnet-4-20250514"
+ }
+ ```
+
+ รูปแบบที่นี่คือ `provider/model`
+
+3. รุ่นที่ใช้ล่าสุด.
+
+4. รุ่นแรกที่ใช้ลำดับความสำคัญภายใน
diff --git a/packages/web/src/content/docs/th/modes.mdx b/packages/web/src/content/docs/th/modes.mdx
new file mode 100644
index 000000000..623c9d156
--- /dev/null
+++ b/packages/web/src/content/docs/th/modes.mdx
@@ -0,0 +1,331 @@
+---
+title: โหมด
+description: โหมดที่แตกต่างกันสำหรับกรณีการใช้งานที่แตกต่างกัน
+---
+
+:::caution
+ขณะนี้โหมดได้รับการกำหนดค่าผ่านตัวเลือก `agent` ในการกำหนดค่า opencode ที่
+ตัวเลือก `mode` เลิกใช้แล้ว [เรียนรู้เพิ่มเติม](/docs/agents)
+:::
+
+โหมดใน opencode ช่วยให้คุณปรับแต่งพฤติกรรม เครื่องมือ และพร้อมท์สำหรับกรณีการใช้งานที่แตกต่างกันได้
+
+มาพร้อมกับโหมดในตัวสองโหมด: **สร้าง** และ **วางแผน** คุณสามารถปรับแต่งได้
+สิ่งเหล่านี้หรือกำหนดค่าของคุณเองผ่านการกำหนดค่า opencode
+
+คุณสามารถสลับระหว่างโหมดระหว่างเซสชันหรือกำหนดค่าในไฟล์กำหนดค่าของคุณ
+
+---
+
+## บิวท์อิน
+
+opencode มาพร้อมกับโหมดในตัวสองโหมด
+
+---
+
+### สร้าง
+
+Build เป็นโหมด **ค่าเริ่มต้น** โดยที่เครื่องมือทั้งหมดเปิดใช้งานอยู่ นี่คือโหมดมาตรฐานสำหรับงานพัฒนาที่คุณต้องการสิทธิ์เข้าถึงการทำงานของไฟล์และคำสั่งระบบโดยสมบูรณ์
+
+---
+
+### วางแผน
+
+โหมดจำกัดที่ออกแบบมาเพื่อการวางแผนและการวิเคราะห์ ในโหมดแผน เครื่องมือต่อไปนี้จะถูกปิดใช้งานตามค่าเริ่มต้น:
+
+- `write` - ​​ไม่สามารถสร้างไฟล์ใหม่ได้
+- `edit` - ​​ไม่สามารถแก้ไขไฟล์ที่มีอยู่ได้ ยกเว้นไฟล์ที่อยู่ใน `.opencode/plans/*.md` เพื่อดูรายละเอียดแผนงาน
+- `patch` - ​​ไม่สามารถใช้แพตช์ได้
+- `bash` - ​​ไม่สามารถรันคำสั่งเชลล์ได้
+
+โหมดนี้มีประโยชน์เมื่อคุณต้องการให้ AI วิเคราะห์โค้ด แนะนำการเปลี่ยนแปลง หรือสร้างแผนโดยไม่ต้องทำการแก้ไขโค้ดเบสของคุณจริง ๆ
+
+---
+
+## การสลับ
+
+คุณสามารถสลับระหว่างโหมดระหว่างเซสชันได้โดยใช้ปุ่ม _Tab_ หรือการเชื่อมโยงคีย์ `switch_mode` ที่คุณกำหนดค่าไว้
+
+ดูเพิ่มเติมที่: [Formatters](/docs/formatters) สำหรับข้อมูลเกี่ยวกับการกำหนดค่าการจัดรูปแบบโค้ด
+
+---
+
+## กำหนดค่า
+
+คุณสามารถปรับแต่งโหมดในตัวหรือสร้างโหมดของคุณเองผ่านการกำหนดค่าได้ โหมดสามารถกำหนดค่าได้สองวิธี:
+
+### JSON การกำหนดค่า
+
+กำหนดค่าโหมดในไฟล์กำหนดค่า `opencode.json` ของคุณ:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mode": {
+ "build": {
+ "model": "anthropic/claude-sonnet-4-20250514",
+ "prompt": "{file:./prompts/build.txt}",
+ "tools": {
+ "write": true,
+ "edit": true,
+ "bash": true
+ }
+ },
+ "plan": {
+ "model": "anthropic/claude-haiku-4-20250514",
+ "tools": {
+ "write": false,
+ "edit": false,
+ "bash": false
+ }
+ }
+ }
+}
+```
+
+### การกำหนดค่ามาร์กดาวน์
+
+คุณยังสามารถกำหนดโหมดโดยใช้ไฟล์มาร์กดาวน์ได้ วางไว้ใน:
+
+- ทั่วโลก: `~/.config/opencode/modes/`
+- โครงการ: `.opencode/modes/`
+
+```markdown title="~/.config/opencode/modes/review.md"
+---
+model: anthropic/claude-sonnet-4-20250514
+temperature: 0.1
+tools:
+ write: false
+ edit: false
+ bash: false
+---
+
+You are in code review mode. Focus on:
+
+- Code quality and best practices
+- Potential bugs and edge cases
+- Performance implications
+- Security considerations
+
+Provide constructive feedback without making direct changes.
+```
+
+ชื่อไฟล์มาร์กดาวน์จะกลายเป็นชื่อโหมด (เช่น `review.md` สร้างโหมด `review`)
+
+มาดูรายละเอียดตัวเลือกการกำหนดค่าเหล่านี้กัน
+
+---
+
+### แบบอย่าง
+
+ใช้การกำหนดค่า `model` เพื่อแทนที่โมเดลเริ่มต้นสำหรับโหมดนี้ มีประโยชน์สำหรับการใช้โมเดลที่แตกต่างกันซึ่งปรับให้เหมาะกับงานที่แตกต่างกัน ตัวอย่างเช่น โมเดลสำหรับการวางแผนที่เร็วขึ้น โมเดลที่มีความสามารถมากขึ้นสำหรับการนำไปปฏิบัติ
+
+```json title="opencode.json"
+{
+ "mode": {
+ "plan": {
+ "model": "anthropic/claude-haiku-4-20250514"
+ }
+ }
+}
+```
+
+---
+
+### อุณหภูมิ
+
+ควบคุมการสุ่มและความคิดสร้างสรรค์ของการตอบสนองของ AI ด้วยการกำหนดค่า `temperature` ค่าที่ต่ำกว่าจะทำให้คำตอบมีจุดมุ่งหมายและกำหนดได้มากขึ้น ในขณะที่ค่าที่สูงกว่าจะเพิ่มความคิดสร้างสรรค์และความแปรปรวน
+
+```json title="opencode.json"
+{
+ "mode": {
+ "plan": {
+ "temperature": 0.1
+ },
+ "creative": {
+ "temperature": 0.8
+ }
+ }
+}
+```
+
+โดยทั่วไปค่าอุณหภูมิจะอยู่ในช่วงตั้งแต่ 0.0 ถึง 1.0:
+
+- **0.0-0.2**: การตอบสนองที่มุ่งเน้นและกำหนดไว้อย่างมาก เหมาะสำหรับการวิเคราะห์และวางแผนโค้ด
+- **0.3-0.5**: การตอบสนองที่สมดุลและความคิดสร้างสรรค์บางส่วน เหมาะสำหรับงานพัฒนาทั่วไป
+- **0.6-1.0**: คำตอบที่สร้างสรรค์และหลากหลายยิ่งขึ้น ซึ่งมีประโยชน์สำหรับการระดมความคิดและการสำรวจ
+
+```json title="opencode.json"
+{
+ "mode": {
+ "analyze": {
+ "temperature": 0.1,
+ "prompt": "{file:./prompts/analysis.txt}"
+ },
+ "build": {
+ "temperature": 0.3
+ },
+ "brainstorm": {
+ "temperature": 0.7,
+ "prompt": "{file:./prompts/creative.txt}"
+ }
+ }
+}
+```
+
+หากไม่มีการระบุอุณหภูมิ opencode จะใช้ค่าเริ่มต้นเฉพาะรุ่น (โดยทั่วไปจะเป็น 0 สำหรับรุ่นส่วนใหญ่ และ 0.55 สำหรับรุ่น Qwen)
+
+---
+
+### พรอมต์
+
+ระบุไฟล์พรอมต์ระบบที่กำหนดเองสำหรับโหมดนี้ด้วยการกำหนดค่า `prompt` ไฟล์พร้อมท์ควรมีคำแนะนำเฉพาะสำหรับวัตถุประสงค์ของโหมด
+
+```json title="opencode.json"
+{
+ "mode": {
+ "review": {
+ "prompt": "{file:./prompts/code-review.txt}"
+ }
+ }
+}
+```
+
+เส้นทางนี้สัมพันธ์กับตำแหน่งของไฟล์กำหนดค่า ดังนั้นสิ่งนี้จึงใช้ได้กับ
+ทั้งการกำหนดค่า opencode ส่วนกลางและการกำหนดค่าเฉพาะโครงการ
+
+---
+
+### เครื่องมือ
+
+ควบคุมว่าเครื่องมือใดบ้างที่พร้อมใช้งานในโหมดนี้ด้วยการกำหนดค่า `tools` คุณสามารถเปิดหรือปิดใช้งานเครื่องมือเฉพาะได้โดยตั้งค่าเป็น `true` หรือ `false`
+
+```json
+{
+ "mode": {
+ "readonly": {
+ "tools": {
+ "write": false,
+ "edit": false,
+ "bash": false,
+ "read": true,
+ "grep": true,
+ "glob": true
+ }
+ }
+ }
+}
+```
+
+หากไม่มีการระบุเครื่องมือ เครื่องมือทั้งหมดจะถูกเปิดใช้งานตามค่าเริ่มต้น
+
+---
+
+#### เครื่องมือที่มีอยู่
+
+นี่คือเครื่องมือทั้งหมดที่สามารถควบคุมได้ผ่านการกำหนดค่าโหมด
+
+| เครื่องมือ | คำอธิบาย |
+| ----------- | ----------------------- |
+| `bash` | ดำเนินการคำสั่งเชลล์ |
+| `edit` | แก้ไขไฟล์ที่มีอยู่ |
+| `write` | สร้างไฟล์ใหม่ |
+| `read` | อ่านเนื้อหาไฟล์ |
+| `grep` | ค้นหาเนื้อหาไฟล์ |
+| `glob` | ค้นหาไฟล์ตามรูปแบบ |
+| `list` | แสดงรายการเนื้อหาไดเร็กทอรี |
+| `patch` | ใช้แพทช์กับไฟล์ |
+| `todowrite` | จัดการรายการสิ่งที่ต้องทำ |
+| `todoread` | อ่านรายการสิ่งที่ต้องทำ |
+| `webfetch` | ดึงเนื้อหาเว็บ |
+
+---
+
+## โหมดกำหนดเอง
+
+คุณสามารถสร้างโหมดที่คุณกำหนดเองได้โดยเพิ่มเข้าไปในการกำหนดค่า นี่คือตัวอย่างที่ใช้ทั้งสองวิธี:
+
+### ใช้การกำหนดค่า JSON
+
+```json title="opencode.json" {4-14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "mode": {
+ "docs": {
+ "prompt": "{file:./prompts/documentation.txt}",
+ "tools": {
+ "write": true,
+ "edit": true,
+ "bash": false,
+ "read": true,
+ "grep": true,
+ "glob": true
+ }
+ }
+ }
+}
+```
+
+### การใช้ไฟล์มาร์กดาวน์
+
+สร้างไฟล์โหมดใน `.opencode/modes/` สำหรับโหมดเฉพาะโครงการหรือ `~/.config/opencode/modes/` สำหรับโหมดทั่วโลก:
+
+```markdown title=".opencode/modes/debug.md"
+---
+temperature: 0.1
+tools:
+ bash: true
+ read: true
+ grep: true
+ write: false
+ edit: false
+---
+
+You are in debug mode. Your primary goal is to help investigate and diagnose issues.
+
+Focus on:
+
+- Understanding the problem through careful analysis
+- Using bash commands to inspect system state
+- Reading relevant files and logs
+- Searching for patterns and anomalies
+- Providing clear explanations of findings
+
+Do not make any changes to files. Only investigate and report.
+```
+
+```markdown title="~/.config/opencode/modes/refactor.md"
+---
+model: anthropic/claude-sonnet-4-20250514
+temperature: 0.2
+tools:
+ edit: true
+ read: true
+ grep: true
+ glob: true
+---
+
+You are in refactoring mode. Focus on improving code quality without changing functionality.
+
+Priorities:
+
+- Improve code readability and maintainability
+- Apply consistent naming conventions
+- Reduce code duplication
+- Optimize performance where appropriate
+- Ensure all tests continue to pass
+```
+
+---
+
+### กรณีการใช้งาน
+
+ต่อไปนี้เป็นกรณีการใช้งานทั่วไปสำหรับโหมดต่างๆ
+
+- **โหมดสร้าง**: งานพัฒนาเต็มรูปแบบโดยเปิดใช้งานเครื่องมือทั้งหมด
+- **โหมดแผน**: วิเคราะห์และวางแผนโดยไม่ทำการเปลี่ยนแปลง
+- **โหมดการตรวจสอบ**: การตรวจสอบโค้ดพร้อมการเข้าถึงแบบอ่านอย่างเดียวพร้อมเครื่องมือเอกสารประกอบ
+- **โหมดแก้ไขข้อบกพร่อง**: มุ่งเน้นไปที่การตรวจสอบโดยเปิดใช้งานเครื่องมือทุบตีและอ่าน
+- **โหมดเอกสาร**: การเขียนเอกสารด้วยการทำงานของไฟล์ แต่ไม่มีคำสั่งระบบ
+
+คุณอาจพบว่ารุ่นต่างๆ นั้นดีสำหรับกรณีการใช้งานที่แตกต่างกัน
diff --git a/packages/web/src/content/docs/th/network.mdx b/packages/web/src/content/docs/th/network.mdx
new file mode 100644
index 000000000..4a7144161
--- /dev/null
+++ b/packages/web/src/content/docs/th/network.mdx
@@ -0,0 +1,57 @@
+---
+title: เครือข่าย
+description: กำหนดค่าพร็อกซีและใบรับรองที่กำหนดเอง
+---
+
+OpenCode รองรับตัวแปรสภาพแวดล้อมพร็อกซีมาตรฐานและใบรับรองที่กำหนดเองสำหรับสภาพแวดล้อมเครือข่ายองค์กร
+
+---
+
+## หนังสือมอบฉันทะ
+
+OpenCode เคารพตัวแปรสภาพแวดล้อมพร็อกซีมาตรฐาน
+
+```bash
+# HTTPS proxy (recommended)
+export HTTPS_PROXY=https://proxy.example.com:8080
+
+# HTTP proxy (if HTTPS not available)
+export HTTP_PROXY=http://proxy.example.com:8080
+
+# Bypass proxy for local server (required)
+export NO_PROXY=localhost,127.0.0.1
+```
+
+:::caution
+TUI สื่อสารกับเซิร์ฟเวอร์ HTTP ในพื้นที่ คุณต้องข้ามพร็อกซีสำหรับการเชื่อมต่อนี้เพื่อป้องกันการกำหนดเส้นทางวนซ้ำ
+:::
+
+คุณสามารถกำหนดค่าพอร์ตของเซิร์ฟเวอร์และชื่อโฮสต์ได้โดยใช้ [CLI flags](/docs/cli#run)
+
+---
+
+### ตรวจสอบสิทธิ์
+
+หากพร็อกซีของคุณต้องการการรับรองความถูกต้องขั้นพื้นฐาน ให้ใส่ข้อมูลรับรองใน URL
+
+```bash
+export HTTPS_PROXY=http://username:[email protected]:8080
+```
+
+:::caution
+หลีกเลี่ยงรหัสผ่านฮาร์ดโค้ด ใช้ตัวแปรสภาพแวดล้อมหรือที่จัดเก็บข้อมูลรับรองที่ปลอดภัย
+:::
+
+สำหรับพร็อกซีที่ต้องการการรับรองความถูกต้องขั้นสูง เช่น NTLM หรือ Kerberos ให้พิจารณาใช้เกตเวย์ LLM ที่รองรับวิธีการตรวจสอบความถูกต้องของคุณ
+
+---
+
+## ใบรับรองที่กำหนดเอง
+
+หากองค์กรของคุณใช้ CA แบบกำหนดเองสำหรับการเชื่อมต่อ HTTPS ให้กำหนดค่า OpenCode ให้เชื่อถือ
+
+```bash
+export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
+```
+
+ซึ่งใช้ได้กับทั้งการเชื่อมต่อพร็อกซีและการเข้าถึง API โดยตรง
diff --git a/packages/web/src/content/docs/th/permissions.mdx b/packages/web/src/content/docs/th/permissions.mdx
new file mode 100644
index 000000000..7ca31a5dc
--- /dev/null
+++ b/packages/web/src/content/docs/th/permissions.mdx
@@ -0,0 +1,237 @@
+---
+title: สิทธิ์
+description: ควบคุมการดำเนินการที่ต้องได้รับการอนุมัติจึงจะรันได้
+---
+
+OpenCode ใช้การกำหนดค่า `permission` เพื่อตัดสินใจว่าการดำเนินการที่กำหนดควรทำงานโดยอัตโนมัติ แจ้งให้คุณทราบ หรือถูกบล็อก
+
+ตั้งแต่ `v1.1.1` การกำหนดค่าบูลีนแบบเดิม `tools` เลิกใช้แล้วและได้รวมเข้ากับ `permission` แล้ว การกำหนดค่า `tools` แบบเก่ายังคงรองรับความเข้ากันได้แบบย้อนหลัง
+
+---
+
+## การดำเนินการ
+
+กฎการอนุญาตแต่ละข้อจะแก้ไขเป็นข้อใดข้อหนึ่งต่อไปนี้
+
+- `"allow"` — ทำงานโดยไม่ได้รับการอนุมัติ
+- `"ask"` — พร้อมท์สำหรับการอนุมัติ
+- `"deny"` — บล็อกการกระทำ
+
+---
+
+## การกำหนดค่า
+
+คุณสามารถตั้งค่าการอนุญาตทั่วโลก (ด้วย `*`) และแทนที่เครื่องมือเฉพาะ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "*": "ask",
+ "bash": "allow",
+ "edit": "deny"
+ }
+}
+```
+
+คุณยังสามารถตั้งค่าการอนุญาตทั้งหมดพร้อมกันได้:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": "allow"
+}
+```
+
+---
+
+## กฎแบบละเอียด (ไวยากรณ์ของวัตถุ)
+
+สำหรับการอนุญาตส่วนใหญ่ คุณสามารถใช้ออบเจ็กต์เพื่อปรับใช้การดำเนินการต่างๆ ตามอินพุตของเครื่องมือได้
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "bash": {
+ "*": "ask",
+ "git *": "allow",
+ "npm *": "allow",
+ "rm *": "deny",
+ "grep *": "allow"
+ },
+ "edit": {
+ "*": "deny",
+ "packages/web/src/content/docs/*.mdx": "allow"
+ }
+ }
+}
+```
+
+กฎจะได้รับการประเมินโดยการจับคู่รูปแบบ โดย **กฎการจับคู่สุดท้ายจะชนะ** รูปแบบทั่วไปคือการใส่กฎ catch-all `"*"` ก่อน และใส่กฎที่เฉพาะเจาะจงมากขึ้นหลังจากนั้น
+
+### สัญลักษณ์แทน
+
+รูปแบบการอนุญาตใช้การจับคู่ไวด์การ์ดแบบง่าย:
+
+- `*` จับคู่อักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป
+- `?` ตรงกับอักขระหนึ่งตัวเท่านั้น
+- อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง
+
+### การขยายโฮมไดเร็กทอรี
+
+คุณสามารถใช้ `~` หรือ `$HOME` ที่จุดเริ่มต้นของรูปแบบเพื่ออ้างอิงโฮมไดเร็กตอรี่ของคุณ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับกฎของ [`external_directory`](#external-directories)
+
+- `~/projects/*` -> `/Users/username/projects/*`
+- `$HOME/projects/*` -> `/Users/username/projects/*`
+- `~` -> `/Users/username`
+
+### ไดเรกทอรีภายนอก
+
+ใช้ `external_directory` เพื่ออนุญาตการเรียกใช้เครื่องมือที่สัมผัสเส้นทางนอกไดเร็กทอรีการทำงานที่ OpenCode เริ่มทำงาน สิ่งนี้ใช้ได้กับเครื่องมือใดๆ ที่ใช้เส้นทางเป็นอินพุต (เช่น `read`, `edit`, `list`, `glob`, `grep` และคำสั่ง `bash` จำนวนมาก)
+
+การขยายบ้าน (เช่น `~/...`) ส่งผลต่อวิธีการเขียนรูปแบบเท่านั้น ไม่ได้ทำให้เส้นทางภายนอกเป็นส่วนหนึ่งของพื้นที่ทำงานปัจจุบัน ดังนั้นเส้นทางภายนอกไดเรกทอรีการทำงานยังต้องได้รับอนุญาตผ่าน `external_directory`
+
+ตัวอย่างเช่น อนุญาตให้เข้าถึงทุกสิ่งภายใต้ `~/projects/personal/`:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "external_directory": {
+ "~/projects/personal/**": "allow"
+ }
+ }
+}
+```
+
+ไดเร็กทอรีใดๆ ที่ได้รับอนุญาตที่นี่จะสืบทอดค่าเริ่มต้นเดียวกันกับพื้นที่ทำงานปัจจุบัน เนื่องจาก [`read` มีค่าเริ่มต้นเป็น `allow`](#defaults) การอ่านจึงได้รับอนุญาตสำหรับรายการภายใต้ `external_directory` เว้นแต่จะถูกแทนที่ เพิ่มกฎที่ชัดเจนเมื่อควรจำกัดเครื่องมือในเส้นทางเหล่านี้ เช่น การบล็อกการแก้ไขในขณะที่ยังคงอ่านอยู่:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "external_directory": {
+ "~/projects/personal/**": "allow"
+ },
+ "edit": {
+ "~/projects/personal/**": "deny"
+ }
+ }
+}
+```
+
+ให้รายการมุ่งเน้นไปที่เส้นทางที่เชื่อถือได้ และเลเยอร์อนุญาตหรือปฏิเสธกฎเพิ่มเติมตามที่จำเป็นสำหรับเครื่องมืออื่นๆ (เช่น `bash`)
+
+---
+
+## สิทธิ์ที่มีอยู่
+
+สิทธิ์ของ OpenCode จะกำหนดไว้ตามชื่อเครื่องมือ พร้อมด้วยเจ้าหน้าที่รักษาความปลอดภัยอีก 2-3 คน:
+
+- `read` — อ่านไฟล์ (ตรงกับเส้นทางของไฟล์)
+- `edit` — การแก้ไขไฟล์ทั้งหมด (ครอบคลุมถึง `edit`, `write`, `patch`, `multiedit`)
+- `glob` — ไฟล์ globbing (ตรงกับรูปแบบ glob)
+- `grep` — การค้นหาเนื้อหา (ตรงกับรูปแบบ regex)
+- `list` — แสดงรายการไฟล์ในไดเร็กทอรี (ตรงกับเส้นทางไดเร็กทอรี)
+- `bash` — การรันคำสั่งเชลล์ (ตรงกับคำสั่งที่แยกวิเคราะห์เช่น `git status --porcelain`)
+- `task` — การเปิดตัวตัวแทนย่อย (ตรงกับประเภทตัวแทนย่อย)
+- `skill` — กำลังโหลดทักษะ (ตรงกับชื่อทักษะ)
+- `lsp` — กำลังเรียกใช้คำสั่ง LSP (ปัจจุบันยังไม่ละเอียด)
+- `todoread`, `todowrite` — กำลังอ่าน/updating รายการสิ่งที่ต้องทำ
+- `webfetch` — กำลังดึง URL (ตรงกับ URL)
+- `websearch`, `codesearch` — การค้นหาเว็บ/code (ตรงกับข้อความค้นหา)
+- `external_directory` — ทริกเกอร์เมื่อเครื่องมือแตะเส้นทางนอกไดเร็กทอรีการทำงานของโปรเจ็กต์
+- `doom_loop` — ทริกเกอร์เมื่อมีการเรียกใช้เครื่องมือเดียวกันซ้ำ 3 ครั้งโดยมีอินพุตเหมือนกัน
+
+---
+
+## ค่าเริ่มต้น
+
+หากคุณไม่ได้ระบุสิ่งใด OpenCode จะเริ่มต้นจากค่าเริ่มต้นที่อนุญาต:
+
+- การอนุญาตส่วนใหญ่มีค่าเริ่มต้นเป็น `"allow"`
+- `doom_loop` และ `external_directory` มีค่าเริ่มต้นเป็น `"ask"`
+- `read` คือ `"allow"` แต่ไฟล์ `.env` ถูกปฏิเสธโดยค่าเริ่มต้น:
+
+```json title="opencode.json"
+{
+ "permission": {
+ "read": {
+ "*": "allow",
+ "*.env": "deny",
+ "*.env.*": "deny",
+ "*.env.example": "allow"
+ }
+ }
+}
+```
+
+---
+
+## สิ่งที่ "ถาม" ทำ
+
+เมื่อ OpenCode แจ้งให้อนุมัติ UI จะเสนอผลลัพธ์สามประการ:
+
+- `once` — อนุมัติเพียงคำขอนี้
+- `always` — อนุมัติคำขอในอนาคตที่ตรงกับรูปแบบที่แนะนำ (สำหรับส่วนที่เหลือของเซสชัน OpenCode ปัจจุบัน)
+- `reject` — ปฏิเสธคำขอ
+
+ชุดรูปแบบที่ `always` จะอนุมัตินั้นมาจากเครื่องมือ (เช่น โดยทั่วไปการอนุมัติทุบตีจะกำหนดไวท์ลิสต์คำนำหน้าคำสั่งที่ปลอดภัย เช่น `git status*`)
+
+---
+
+## ตัวแทน
+
+คุณสามารถแทนที่สิทธิ์ต่อตัวแทนได้ สิทธิ์ของตัวแทนจะผสานเข้ากับการกำหนดค่าส่วนกลาง และกฎของตัวแทนจะมีความสำคัญกว่า [เรียนรู้เพิ่มเติม](/docs/agents#permissions) เกี่ยวกับการอนุญาตของตัวแทน
+
+:::note
+โปรดดูส่วน [กฎแบบละเอียด (ไวยากรณ์ของวัตถุ)](#granular-rules-object-syntax) ด้านบนเพื่อดูตัวอย่างการจับคู่รูปแบบโดยละเอียดเพิ่มเติม
+:::
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "bash": {
+ "*": "ask",
+ "git *": "allow",
+ "git commit *": "deny",
+ "git push *": "deny",
+ "grep *": "allow"
+ }
+ },
+ "agent": {
+ "build": {
+ "permission": {
+ "bash": {
+ "*": "ask",
+ "git *": "allow",
+ "git commit *": "ask",
+ "git push *": "deny",
+ "grep *": "allow"
+ }
+ }
+ }
+ }
+}
+```
+
+คุณยังสามารถกำหนดค่าการอนุญาตตัวแทนใน Markdown ได้:
+
+```markdown title="~/.config/opencode/agents/review.md"
+---
+description: Code review without edits
+mode: subagent
+permission:
+ edit: deny
+ bash: ask
+ webfetch: deny
+---
+
+Only analyze code and suggest changes.
+```
+
+:::tip
+ใช้การจับคู่รูปแบบสำหรับคำสั่งที่มีอาร์กิวเมนต์ `"grep *"` อนุญาต `grep pattern file.txt` ในขณะที่ `"grep"` คนเดียวจะบล็อกได้ คำสั่งเช่น `git status` ใช้งานได้กับพฤติกรรมเริ่มต้น แต่ต้องได้รับอนุญาตอย่างชัดเจน (เช่น `"git status *"`) เมื่ออาร์กิวเมนต์ถูกส่งผ่าน
+:::
diff --git a/packages/web/src/content/docs/th/plugins.mdx b/packages/web/src/content/docs/th/plugins.mdx
new file mode 100644
index 000000000..af300d057
--- /dev/null
+++ b/packages/web/src/content/docs/th/plugins.mdx
@@ -0,0 +1,385 @@
+---
+title: ปลั๊กอิน
+description: เขียนปลั๊กอินของคุณเองเพื่อขยาย OpenCode
+---
+
+ปลั๊กอินช่วยให้คุณสามารถขยาย OpenCode ได้โดยเชื่อมโยงกับเหตุการณ์ต่างๆ และปรับแต่งลักษณะการทำงาน คุณสามารถสร้างปลั๊กอินเพื่อเพิ่มคุณสมบัติใหม่ บูรณาการกับบริการภายนอก หรือแก้ไขการทำงานเริ่มต้นของ OpenCode
+
+ตัวอย่างเช่น ลองดู [ปลั๊กอิน](/docs/ecosystem#ปลั๊กอิน) ที่สร้างโดยชุมชน
+
+---
+
+## ใช้ปลั๊กอิน
+
+มีสองวิธีในการโหลดปลั๊กอิน
+
+---
+
+### จากไฟล์ในเครื่อง
+
+วางไฟล์ JavaScript หรือ TypeScript ในไดเร็กทอรีปลั๊กอิน
+
+- `.opencode/plugins/` - ​​ปลั๊กอินระดับโครงการ
+- `~/.config/opencode/plugins/` - ​​ปลั๊กอินทั่วโลก
+
+ไฟล์ในไดเร็กทอรีเหล่านี้จะถูกโหลดโดยอัตโนมัติเมื่อเริ่มต้นระบบ
+
+---
+
+### ตั้งแต่เวลา 13.00 น
+
+ระบุแพ็คเกจ npm ในไฟล์ปรับแต่งของคุณ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
+}
+```
+
+รองรับแพ็คเกจ npm ทั้งแบบปกติและแบบกำหนดขอบเขต
+
+เรียกดูปลั๊กอินที่มีอยู่ใน [ระบบนิเวศ](/docs/ecosystem#plugins)
+
+---
+
+### วิธีการติดตั้งปลั๊กอิน
+
+**ปลั๊กอิน npm** ได้รับการติดตั้งโดยอัตโนมัติโดยใช้ Bun เมื่อเริ่มต้น แพ็คเกจและการขึ้นต่อกันถูกแคชไว้ใน `~/.cache/opencode/node_modules/`
+
+**ปลั๊กอินท้องถิ่น** โหลดโดยตรงจากไดเร็กทอรีปลั๊กอิน หากต้องการใช้แพ็คเกจภายนอก คุณต้องสร้าง `package.json` ภายในไดเร็กทอรีการกำหนดค่าของคุณ (ดู [การพึ่งพา](#dependencies)) หรือเผยแพร่ปลั๊กอินไปที่ npm และ [เพิ่มลงในการกำหนดค่าของคุณ](/docs/config#plugins)
+
+---
+
+### โหลดออเดอร์
+
+ปลั๊กอินถูกโหลดจากทุกแหล่งและ hooks ทั้งหมดทำงานตามลำดับ ลำดับการโหลดคือ:
+
+1. การกำหนดค่าส่วนกลาง (`~/.config/opencode/opencode.json`)
+2. การกำหนดค่าโครงการ (`opencode.json`)
+3. ไดเร็กทอรีปลั๊กอินสากล (`~/.config/opencode/plugins/`)
+4. ไดเรกทอรีปลั๊กอินโครงการ (`.opencode/plugins/`)
+
+แพ็กเกจ npm ที่ซ้ำกันซึ่งมีชื่อและเวอร์ชันเดียวกันจะถูกโหลดหนึ่งครั้ง อย่างไรก็ตาม ทั้งปลั๊กอินในเครื่องและปลั๊กอิน npm ที่มีชื่อคล้ายกันจะโหลดแยกกัน
+
+---
+
+## สร้างปลั๊กอิน
+
+ปลั๊กอินคือ **JavaScript/TypeScript module** ที่ส่งออกปลั๊กอินอย่างน้อยหนึ่งรายการ
+ฟังก์ชั่น แต่ละฟังก์ชันได้รับวัตถุบริบทและส่งกลับวัตถุ hooks
+
+---
+
+### การพึ่งพาอาศัยกัน
+
+ปลั๊กอินท้องถิ่นและเครื่องมือแบบกำหนดเองสามารถใช้แพ็คเกจ npm ภายนอกได้ เพิ่ม `package.json` ลงในไดเร็กทอรี config ของคุณด้วยการอ้างอิงที่คุณต้องการ
+
+```json title=".opencode/package.json"
+{
+ "dependencies": {
+ "shescape": "^2.1.0"
+ }
+}
+```
+
+OpenCode รัน `bun install` เมื่อเริ่มต้นเพื่อติดตั้งสิ่งเหล่านี้ ปลั๊กอินและเครื่องมือของคุณสามารถนำเข้าได้
+
+```ts title=".opencode/plugins/my-plugin.ts"
+import { escape } from "shescape"
+
+export const MyPlugin = async (ctx) => {
+ return {
+ "tool.execute.before": async (input, output) => {
+ if (input.tool === "bash") {
+ output.args.command = escape(output.args.command)
+ }
+ },
+ }
+}
+```
+
+---
+
+### โครงสร้างพื้นฐาน
+
+```js title=".opencode/plugins/example.js"
+export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
+ console.log("Plugin initialized!")
+
+ return {
+ // Hook implementations go here
+ }
+}
+```
+
+ฟังก์ชั่นปลั๊กอินได้รับ:
+
+- `project`: ข้อมูลโครงการปัจจุบัน
+- `directory`: ไดเร็กทอรีการทำงานปัจจุบัน
+- `worktree`: เส้นทางเวิร์กทรีคอมไพล์
+- `client`: ไคลเอนต์ opencode SDK สำหรับการโต้ตอบกับ AI
+- `$`: [shell API](https://bun.com/docs/runtime/shell) ของ Bun สำหรับการดำเนินการคำสั่ง
+
+---
+
+### รองรับ TypeScript
+
+สำหรับปลั๊กอิน TypeScript คุณสามารถนำเข้าประเภทจากแพ็คเกจปลั๊กอินได้:
+
+```ts title="my-plugin.ts" {1}
+import type { Plugin } from "@opencode-ai/plugin"
+
+export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
+ return {
+ // Type-safe hook implementations
+ }
+}
+```
+
+---
+
+### กิจกรรม
+
+ปลั๊กอินสามารถสมัครรับกิจกรรมได้ดังที่แสดงด้านล่างในส่วนตัวอย่าง นี่คือรายการกิจกรรมต่างๆ ที่มี
+
+#### เหตุการณ์คำสั่ง
+
+- `command.executed`
+
+#### ไฟล์เหตุการณ์
+
+- `file.edited`
+- `file.watcher.updated`
+
+#### เหตุการณ์การติดตั้ง
+
+- `installation.updated`
+
+#### LSP กิจกรรม
+
+- `lsp.client.diagnostics`
+- `lsp.updated`
+
+#### เหตุการณ์ข้อความ
+
+- `message.part.removed`
+- `message.part.updated`
+- `message.removed`
+- `message.updated`
+
+#### เหตุการณ์การอนุญาต
+
+- `permission.asked`
+- `permission.replied`
+
+#### เหตุการณ์เซิร์ฟเวอร์
+
+- `server.connected`
+
+#### กิจกรรมเซสชั่น
+
+- `session.created`
+- `session.compacted`
+- `session.deleted`
+- `session.diff`
+- `session.error`
+- `session.idle`
+- `session.status`
+- `session.updated`
+
+#### เหตุการณ์ที่ต้องทำ
+
+- `todo.updated`
+
+#### กิจกรรมของเชลล์
+
+- `shell.env`
+
+#### เหตุการณ์เครื่องมือ
+
+- `tool.execute.after`
+- `tool.execute.before`
+
+#### TUI กิจกรรม
+
+- `tui.prompt.append`
+- `tui.command.execute`
+- `tui.toast.show`
+
+---
+
+## ตัวอย่าง
+
+นี่คือตัวอย่างบางส่วนของปลั๊กอินที่คุณสามารถใช้เพื่อขยาย opencode
+
+---
+
+### ส่งการแจ้งเตือน
+
+ส่งการแจ้งเตือนเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น:
+
+```js title=".opencode/plugins/notification.js"
+export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
+ return {
+ event: async ({ event }) => {
+ // Send notification on session completion
+ if (event.type === "session.idle") {
+ await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
+ }
+ },
+ }
+}
+```
+
+เรากำลังใช้ `osascript` เพื่อเรียกใช้ AppleScript บน macOS ที่นี่เราใช้มันเพื่อส่งการแจ้งเตือน
+
+:::note
+หากคุณใช้แอปเดสก์ท็อป OpenCode แอปสามารถส่งการแจ้งเตือนของระบบโดยอัตโนมัติเมื่อมีการตอบกลับพร้อมหรือเมื่อเซสชันเกิดข้อผิดพลาด
+:::
+
+---
+
+### การป้องกัน .env
+
+ป้องกันไม่ให้ opencode อ่านไฟล์ `.env`:
+
+```javascript title=".opencode/plugins/env-protection.js"
+export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
+ return {
+ "tool.execute.before": async (input, output) => {
+ if (input.tool === "read" && output.args.filePath.includes(".env")) {
+ throw new Error("Do not read .env files")
+ }
+ },
+ }
+}
+```
+
+---
+
+### ฉีดตัวแปรสภาพแวดล้อม
+
+แทรกตัวแปรสภาพแวดล้อมลงในการดำเนินการเชลล์ทั้งหมด (เครื่องมือ AI และเทอร์มินัลผู้ใช้):
+
+```javascript title=".opencode/plugins/inject-env.js"
+export const InjectEnvPlugin = async () => {
+ return {
+ "shell.env": async (input, output) => {
+ output.env.MY_API_KEY = "secret"
+ output.env.PROJECT_ROOT = input.cwd
+ },
+ }
+}
+```
+
+---
+
+### เครื่องมือที่กำหนดเอง
+
+ปลั๊กอินยังสามารถเพิ่มเครื่องมือที่กำหนดเองให้กับ opencode:
+
+```ts title=".opencode/plugins/custom-tools.ts"
+import { type Plugin, tool } from "@opencode-ai/plugin"
+
+export const CustomToolsPlugin: Plugin = async (ctx) => {
+ return {
+ tool: {
+ mytool: tool({
+ description: "This is a custom tool",
+ args: {
+ foo: tool.schema.string(),
+ },
+ async execute(args, context) {
+ const { directory, worktree } = context
+ return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
+ },
+ }),
+ },
+ }
+}
+```
+
+ตัวช่วย `tool` สร้างเครื่องมือแบบกำหนดเองที่สามารถเรียกใช้ opencode ได้ ใช้ฟังก์ชัน Zod schema และส่งกลับคำจำกัดความของเครื่องมือด้วย:
+
+- `description`: เครื่องมือนี้ทำอะไร
+- `args`: Zod schema สำหรับข้อโต้แย้งของเครื่องมือ
+- `execute`: ฟังก์ชั่นที่ทำงานเมื่อมีการเรียกใช้เครื่องมือ
+
+เครื่องมือที่คุณกำหนดเองจะพร้อมใช้งานสำหรับ opencode ควบคู่ไปกับเครื่องมือในตัว
+
+---
+
+### การบันทึก
+
+ใช้ `client.app.log()` แทน `console.log` สำหรับการบันทึกแบบมีโครงสร้าง:
+
+```ts title=".opencode/plugins/my-plugin.ts"
+export const MyPlugin = async ({ client }) => {
+ await client.app.log({
+ body: {
+ service: "my-plugin",
+ level: "info",
+ message: "Plugin initialized",
+ extra: { foo: "bar" },
+ },
+ })
+}
+```
+
+ระดับ: `debug`, `info`, `warn`, `error` ดู[SDKเอกสารประกอบ](https://opencode.ai/docs/sdk)สำหรับรายละเอียด
+
+---
+
+### ตะขอบดอัด
+
+ปรับแต่งบริบทที่รวมไว้เมื่อมีการกระชับเซสชัน:
+
+```ts title=".opencode/plugins/compaction.ts"
+import type { Plugin } from "@opencode-ai/plugin"
+
+export const CompactionPlugin: Plugin = async (ctx) => {
+ return {
+ "experimental.session.compacting": async (input, output) => {
+ // Inject additional context into the compaction prompt
+ output.context.push(`
+## Custom Context
+
+Include any state that should persist across compaction:
+- Current task status
+- Important decisions made
+- Files being actively worked on
+`)
+ },
+ }
+}
+```
+
+`experimental.session.compacting` hook เริ่มทำงานก่อนที่ LLM จะสร้างข้อมูลสรุปต่อเนื่อง ใช้เพื่อแทรกบริบทเฉพาะโดเมนที่พรอมต์การบีบอัดข้อมูลเริ่มต้นอาจพลาดไป
+
+คุณยังสามารถแทนที่พรอมต์การกระชับข้อมูลทั้งหมดได้โดยตั้งค่า `output.prompt`:
+
+```ts title=".opencode/plugins/custom-compaction.ts"
+import type { Plugin } from "@opencode-ai/plugin"
+
+export const CustomCompactionPlugin: Plugin = async (ctx) => {
+ return {
+ "experimental.session.compacting": async (input, output) => {
+ // Replace the entire compaction prompt
+ output.prompt = `
+You are generating a continuation prompt for a multi-agent swarm session.
+
+Summarize:
+1. The current task and its status
+2. Which files are being modified and by whom
+3. Any blockers or dependencies between agents
+4. The next steps to complete the work
+
+Format as a structured prompt that a new agent can use to resume work.
+`
+ },
+ }
+}
+```
+
+เมื่อตั้งค่า `output.prompt` มันจะแทนที่พร้อมท์การกระชับค่าเริ่มต้นโดยสมบูรณ์ อาร์เรย์ `output.context` จะถูกละเว้นในกรณีนี้
diff --git a/packages/web/src/content/docs/th/providers.mdx b/packages/web/src/content/docs/th/providers.mdx
new file mode 100644
index 000000000..4034978b2
--- /dev/null
+++ b/packages/web/src/content/docs/th/providers.mdx
@@ -0,0 +1,1889 @@
+---
+title: ผู้ให้บริการ
+description: ใช้ผู้ให้บริการ LLM ใน OpenCode
+---
+
+import config from "../../../../config.mjs"
+export const console = config.console
+
+OpenCode ใช้ [AI SDK](https://ai-sdk.dev/) และ [Models.dev](https://models.dev) เพื่อรองรับผู้ให้บริการ **75+ LLM** และรองรับการใช้งานโมเดลท้องถิ่น
+
+หากต้องการเพิ่มผู้ให้บริการ คุณต้อง:
+
+1. เพิ่มคีย์ API สำหรับผู้ให้บริการโดยใช้คำสั่ง `/connect`
+2. กำหนดค่าผู้ให้บริการในการกำหนดค่า OpenCode ของคุณ
+
+---
+
+### ข้อมูลรับรอง
+
+เมื่อคุณเพิ่มคีย์ API ของผู้ให้บริการด้วยคำสั่ง `/connect` คีย์เหล่านั้นจะถูกเก็บไว้
+ใน `~/.local/share/opencode/auth.json`.
+
+---
+
+### การกำหนดค่า
+
+คุณสามารถปรับแต่งผู้ให้บริการได้ผ่านทางส่วน `provider` ใน OpenCode ของคุณ
+กำหนดค่า
+
+---
+
+#### ฐาน URL
+
+คุณสามารถปรับแต่งฐาน URL สำหรับผู้ให้บริการรายใดก็ได้โดยตั้งค่าตัวเลือก `baseURL` สิ่งนี้มีประโยชน์เมื่อใช้บริการพร็อกซีหรือจุดสิ้นสุดแบบกำหนดเอง
+
+```json title="opencode.json" {6}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "anthropic": {
+ "options": {
+ "baseURL": "https://api.anthropic.com/v1"
+ }
+ }
+ }
+}
+```
+
+---
+
+## โอเพ่นโค้ดเซน
+
+OpenCode Zen คือรายชื่อโมเดลที่จัดทำโดยทีมงาน OpenCode ที่ได้รับ
+ทดสอบและตรวจสอบแล้วว่าทำงานได้ดีกับ OpenCode [เรียนรู้เพิ่มเติม](/docs/zen)
+
+:::tip
+หากคุณยังใหม่ เราขอแนะนำให้เริ่มต้นด้วย OpenCode Zen
+:::
+
+1. เรียกใช้คำสั่ง `/connect` ใน TUI เลือก opencode และไปที่ [opencode.ai/auth](https://opencode.ai/auth)
+
+ ```txt
+ /connect
+ ```
+
+2. ลงชื่อเข้าใช้ เพิ่มรายละเอียดการเรียกเก็บเงินของคุณ และคัดลอกรหัส API ของคุณ
+
+3. วางคีย์ API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. เรียกใช้ `/models` ใน TUI เพื่อดูรายการรุ่นที่เราแนะนำ
+
+ ```txt
+ /models
+ ```
+
+มันทำงานเหมือนกับผู้ให้บริการรายอื่นใน OpenCode และเป็นทางเลือกในการใช้งานโดยสมบูรณ์
+
+---
+
+## ไดเรกทอรี
+
+มาดูรายละเอียดผู้ให้บริการบางรายกัน หากคุณต้องการเพิ่มผู้ให้บริการให้กับ
+รายการอย่าลังเลที่จะเปิดประชาสัมพันธ์
+
+:::note
+ไม่เห็นผู้ให้บริการที่นี่ใช่ไหม ส่งพีอาร์.
+:::
+
+---
+
+### 302.เอไอ
+
+1. ไปที่ [คอนโซล 302.AI](https://302.ai/) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **302.AI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ 302.AI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### อเมซอน ข้อเท็จจริง
+
+วิธีใช้ Amazon Bedrock กับ OpenCode:
+
+1. ไปที่ **แค็ตตาล็อกโมเดล** ในคอนโซล Amazon Bedrock และขอ
+ เข้าถึงโมเดลที่คุณต้องการ
+
+ :::tip
+ คุณต้องมีสิทธิ์เข้าถึงโมเดลที่คุณต้องการใน Amazon Bedrock
+ :::
+
+2. **กำหนดค่าการตรวจสอบสิทธิ์** โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:
+
+ #### ตัวแปรสภาพแวดล้อม (เริ่มต้นอย่างรวดเร็ว)
+
+ ตั้งค่าหนึ่งในตัวแปรสภาพแวดล้อมเหล่านี้ขณะเรียกใช้ opencode:
+
+ ```bash
+ # Option 1: Using AWS access keys
+ AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode
+
+ # Option 2: Using named AWS profile
+ AWS_PROFILE=my-profile opencode
+
+ # Option 3: Using Bedrock bearer token
+ AWS_BEARER_TOKEN_BEDROCK=XXX opencode
+ ```
+
+ หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ:
+
+ ```bash title="~/.bash_profile"
+ export AWS_PROFILE=my-dev-profile
+ export AWS_REGION=us-east-1
+ ```
+
+ #### ไฟล์การกำหนดค่า (แนะนำ)
+
+ สำหรับการกำหนดค่าเฉพาะโครงการหรือแบบถาวร ให้ใช้ `opencode.json`:
+
+ ```json title="opencode.json"
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "amazon-bedrock": {
+ "options": {
+ "region": "us-east-1",
+ "profile": "my-aws-profile"
+ }
+ }
+ }
+ }
+ ```
+
+ **ตัวเลือกที่มี:**
+ - `region` - ​​AWS ภูมิภาค (เช่น `us-east-1`, `eu-west-1`)
+ - `profile` - ​​AWS ตั้งชื่อโปรไฟล์จาก `~/.aws/credentials`
+ - `endpoint` - ​​จุดสิ้นสุดที่กำหนดเอง URL สำหรับ VPC จุดสิ้นสุด (นามแฝงสำหรับตัวเลือก `baseURL` ทั่วไป)
+
+ :::tip
+ ตัวเลือกไฟล์การกำหนดค่ามีความสำคัญเหนือกว่าตัวแปรสภาพแวดล้อม
+ :::
+
+ #### ขั้นสูง: VPC จุดสิ้นสุด
+
+ หากคุณใช้จุดสิ้นสุด VPC สำหรับ Bedrock:
+
+ ```json title="opencode.json"
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "amazon-bedrock": {
+ "options": {
+ "region": "us-east-1",
+ "profile": "production",
+ "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
+ }
+ }
+ }
+ }
+ ```
+
+ :::note
+ ตัวเลือก `endpoint` เป็นนามแฝงสำหรับตัวเลือก `baseURL` ทั่วไป โดยใช้คำศัพท์เฉพาะ AWS หากมีการระบุทั้ง `endpoint` และ `baseURL` `endpoint` จะมีความสำคัญเหนือกว่า
+ :::
+
+ #### วิธีการรับรองความถูกต้อง
+ - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: สร้างผู้ใช้ IAM และสร้างคีย์การเข้าถึงในคอนโซล AWS
+ - **`AWS_PROFILE`**: ใช้โปรไฟล์ที่มีชื่อจาก `~/.aws/credentials` ขั้นแรกให้กำหนดค่าด้วย `aws configure --profile my-profile` หรือ `aws sso login`
+ - **`AWS_BEARER_TOKEN_BEDROCK`**: สร้างคีย์ API ระยะยาวจากคอนโซล Amazon Bedrock
+ - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: สำหรับ EKS IRSA (IAM บทบาทสำหรับบัญชีบริการ) หรือสภาพแวดล้อม Kubernetes อื่นๆ ที่มีการเชื่อมโยง OIDC Kubernetes แทรกตัวแปรสภาพแวดล้อมเหล่านี้โดยอัตโนมัติเมื่อใช้คำอธิบายประกอบของบัญชีบริการ
+
+ #### ลำดับความสำคัญของการรับรองความถูกต้อง
+
+ Amazon Bedrock ใช้ลำดับความสำคัญในการรับรองความถูกต้องต่อไปนี้:
+ 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` ตัวแปรสภาพแวดล้อมหรือโทเค็นจากคำสั่ง `/connect`
+ 2. **AWS Credential Chain** - โปรไฟล์, คีย์การเข้าถึง, ข้อมูลประจำตัวที่แชร์, บทบาท IAM, โทเค็นข้อมูลประจำตัวของเว็บ (EKS IRSA), ข้อมูลเมตาของอินสแตนซ์
+
+ :::note
+ เมื่อตั้งค่าโทเค็นผู้ถือ (ผ่าน `/connect` หรือ `AWS_BEARER_TOKEN_BEDROCK`) โทเค็นนั้นจะมีความสำคัญเหนือกว่าวิธีการข้อมูลประจำตัว AWS ทั้งหมด รวมถึงโปรไฟล์ที่กำหนดค่าไว้
+ :::
+
+3. รันคำสั่ง `/models` เพื่อเลือกรุ่นที่ต้องการ
+
+ ```txt
+ /models
+ ```
+
+:::note
+สำหรับโปรไฟล์การอนุมานแบบกำหนดเอง ให้ใช้ชื่อรุ่นและผู้ให้บริการในคีย์และตั้งค่าคุณสมบัติ `id` เป็น arn สิ่งนี้ทำให้มั่นใจได้ว่าแคชถูกต้อง:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "amazon-bedrock": {
+ // ...
+ "models": {
+ "anthropic-claude-sonnet-4.5": {
+ "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy"
+ }
+ }
+ }
+ }
+}
+```
+
+:::
+
+---
+
+### มานุษยวิทยา
+
+1. เมื่อคุณสมัครแล้ว ให้รันคำสั่ง `/connect` และเลือก Anthropic
+
+ ```txt
+ /connect
+ ```
+
+2. ที่นี่คุณสามารถเลือกตัวเลือก **Claude Pro/Max** และมันจะเปิดเบราว์เซอร์ของคุณ
+ และขอให้คุณตรวจสอบสิทธิ์
+
+ ```txt
+ ┌ Select auth method
+ │
+ │ Claude Pro/Max
+ │ Create an API Key
+ │ Manually enter API Key
+ └
+ ```
+
+3. ตอนนี้โมเดล Anthropic ทั้งหมดควรจะพร้อมใช้งานเมื่อคุณใช้คำสั่ง `/models`
+
+ ```txt
+ /models
+ ```
+
+:::info
+การใช้การสมัครสมาชิก Claude Pro/Max ใน OpenCode ไม่ได้รับการสนับสนุนอย่างเป็นทางการจาก [Anthropic](https://anthropic.com)
+:::
+
+##### ใช้ปุ่ม API
+
+คุณยังสามารถเลือก **สร้าง API คีย์** หากคุณไม่มีการสมัครสมาชิก Pro/Max นอกจากนี้ยังจะเปิดเบราว์เซอร์ของคุณและขอให้คุณเข้าสู่ระบบ Anthropic และให้รหัสที่คุณสามารถวางในเทอร์มินัลของคุณ
+
+หรือหากคุณมีคีย์ API อยู่แล้ว คุณสามารถเลือก **ป้อนคีย์ API ด้วยตนเอง** และวางลงในเทอร์มินัลของคุณ
+
+---
+
+### อาซัวร์ โอเพ่นเอไอ
+
+:::note
+หากคุณพบข้อผิดพลาด "ฉันขอโทษ แต่ฉันไม่สามารถช่วยเหลือคำขอนั้นได้" ให้ลองเปลี่ยนตัวกรองเนื้อหาจาก **DefaultV2** เป็น **Default** ในทรัพยากร Azure ของคุณ
+:::
+
+1. ไปที่ [พอร์ทัล Azure](https://portal.azure.com/) และสร้างทรัพยากร **Azure OpenAI** คุณจะต้องการ:
+ - **ชื่อทรัพยากร**: นี่จะกลายเป็นส่วนหนึ่งของจุดสิ้นสุด API ของคุณ (`https://RESOURCE_NAME.openai.azure.com/`)
+ - **API key**: `KEY 1` หรือ `KEY 2` จากทรัพยากรของคุณ
+
+2. ไปที่ [Azure AI Foundry](https://ai.azure.com/) และปรับใช้โมเดล
+
+ :::note
+ ชื่อการปรับใช้จะต้องตรงกับชื่อรุ่นเพื่อให้ opencode ทำงานได้อย่างถูกต้อง
+ :::
+
+3. เรียกใช้คำสั่ง `/connect` และค้นหา **Azure**
+
+ ```txt
+ /connect
+ ```
+
+4. ป้อน API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+5. ตั้งชื่อทรัพยากรของคุณเป็นตัวแปรสภาพแวดล้อม:
+
+ ```bash
+ AZURE_RESOURCE_NAME=XXX opencode
+ ```
+
+ หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ:
+
+ ```bash title="~/.bash_profile"
+ export AZURE_RESOURCE_NAME=XXX
+ ```
+
+6. รันคำสั่ง `/models` เพื่อเลือกโมเดลที่ปรับใช้ของคุณ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### บริการความรู้ความเข้าใจ Azure
+
+1. ไปที่ [พอร์ทัล Azure](https://portal.azure.com/) และสร้างทรัพยากร **Azure OpenAI** คุณจะต้องการ:
+ - **ชื่อทรัพยากร**: นี่จะกลายเป็นส่วนหนึ่งของจุดสิ้นสุด API ของคุณ (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`)
+ - **API key**: `KEY 1` หรือ `KEY 2` จากทรัพยากรของคุณ
+
+2. ไปที่ [Azure AI Foundry](https://ai.azure.com/) และปรับใช้โมเดล
+
+ :::note
+ ชื่อการปรับใช้จะต้องตรงกับชื่อรุ่นเพื่อให้ opencode ทำงานได้อย่างถูกต้อง
+ :::
+
+3. เรียกใช้คำสั่ง `/connect` และค้นหา **Azure Cognitive Services**
+
+ ```txt
+ /connect
+ ```
+
+4. ป้อน API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+5. ตั้งชื่อทรัพยากรของคุณเป็นตัวแปรสภาพแวดล้อม:
+
+ ```bash
+ AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode
+ ```
+
+ หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ:
+
+ ```bash title="~/.bash_profile"
+ export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX
+ ```
+
+6. รันคำสั่ง `/models` เพื่อเลือกโมเดลที่ปรับใช้ของคุณ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### บาสเตน
+
+1. ไปที่ [Baseten](https://app.baseten.co/) สร้างบัญชี และสร้างคีย์ API
+
+2. รันคำสั่ง `/connect` และค้นหา **Baseten**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Baseten API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### สมอง
+
+1. ไปที่ [คอนโซล Cerebras](https://inference.cerebras.ai/) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **Cerebras**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Cerebras API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _Qwen 3 Coder 480B_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เกตเวย์ AI ของ Cloudflare
+
+Cloudflare AI Gateway ช่วยให้คุณเข้าถึงโมเดลจาก OpenAI, Anthropic, Workers AI และอื่นๆ อีกมากมายผ่านตำแหน่งข้อมูลแบบรวม ด้วย [การเรียกเก็บเงินแบบรวม](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) คุณไม่จำเป็นต้องใช้คีย์ API แยกต่างหากสำหรับผู้ให้บริการแต่ละราย
+
+1. ไปที่ [แดชบอร์ด Cloudflare](https://dash.cloudflare.com/) ไปที่ **AI** > **เกตเวย์ AI** และสร้างเกตเวย์ใหม่
+
+2. ตั้งค่ารหัสบัญชีและรหัสเกตเวย์ของคุณเป็นตัวแปรสภาพแวดล้อม
+
+ ```bash title="~/.bash_profile"
+ export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id
+ export CLOUDFLARE_GATEWAY_ID=your-gateway-id
+ ```
+
+3. รันคำสั่ง `/connect` และค้นหา **Cloudflare AI Gateway**
+
+ ```txt
+ /connect
+ ```
+
+4. ป้อนโทเค็น Cloudflare API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+ หรือตั้งเป็นตัวแปรสภาพแวดล้อม
+
+ ```bash title="~/.bash_profile"
+ export CLOUDFLARE_API_TOKEN=your-api-token
+ ```
+
+5. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+ คุณยังสามารถเพิ่มโมเดลผ่านการกำหนดค่า opencode ของคุณได้
+
+ ```json title="opencode.json"
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "cloudflare-ai-gateway": {
+ "models": {
+ "openai/gpt-4o": {},
+ "anthropic/claude-sonnet-4": {}
+ }
+ }
+ }
+ }
+ ```
+
+---
+
+### คอร์เทคส์
+
+1. ไปที่ [คอนโซล Cortecs](https://cortecs.ai/) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **Cortecs**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Cortecs API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ดีปซีค
+
+1. ไปที่ [คอนโซล DeepSeek](https://platform.deepseek.com/) สร้างบัญชี แล้วคลิก **สร้างคีย์ API ใหม่**
+
+2. รันคำสั่ง `/connect` และค้นหา **DeepSeek**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ DeepSeek API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดล DeepSeek เช่น _DeepSeek Reasoner_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### อินฟราเรดลึก
+
+1. ไปที่ [แดชบอร์ด Deep Infra](https://deepinfra.com/dash) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **Deep Infra**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Deep Infra API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เฟิร์มแวร์
+
+1. ไปที่ [แดชบอร์ดเฟิร์มแวร์](https://app.firmware.ai/signup) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **เฟิร์มแวร์**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์เฟิร์มแวร์ API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ดอกไม้ไฟเอไอ
+
+1. ไปที่ [คอนโซล AI ดอกไม้ไฟ](https://app.fireworks.ai/) สร้างบัญชี แล้วคลิก **สร้าง API คีย์**
+
+2. รันคำสั่ง `/connect` และค้นหา **Fireworks AI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ดอกไม้ไฟ AI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### GitLab ดูโอ
+
+GitLab Duo ให้การแชทแบบเอเจนต์ที่ขับเคลื่อนด้วย AI พร้อมความสามารถในการเรียกใช้เครื่องมือแบบเนทีฟผ่านพร็อกซี Anthropic ของ GitLab
+
+1. รันคำสั่ง `/connect` และเลือก GitLab
+
+ ```txt
+ /connect
+ ```
+
+2. เลือกวิธีการรับรองความถูกต้องของคุณ:
+
+ ```txt
+ ┌ Select auth method
+ │
+ │ OAuth (Recommended)
+ │ Personal Access Token
+ └
+ ```
+
+ #### การใช้ OAuth (แนะนำ)
+
+ เลือก **OAuth** และเบราว์เซอร์ของคุณจะเปิดขึ้นเพื่อรับสิทธิ์
+
+ #### การใช้โทเค็นการเข้าถึงส่วนบุคคล
+ 1. ไปที่ [การตั้งค่าผู้ใช้ GitLab > โทเค็นการเข้าถึง](https://gitlab.com/-/user_settings/personal_access_tokens)
+ 2. คลิก **เพิ่มโทเค็นใหม่**
+ 3. ชื่อ: `OpenCode`, ขอบเขต: `api`
+ 4. คัดลอกโทเค็น (เริ่มต้นด้วย `glpat-`)
+ 5. ป้อนลงในเทอร์มินัล
+
+3. รันคำสั่ง `/models` เพื่อดูรุ่นที่มีจำหน่าย
+
+ ```txt
+ /models
+ ```
+
+ มีโมเดลที่ใช้ Claude สามรุ่นให้เลือก:
+ - **duo-chat-haiku-4-5** (ค่าเริ่มต้น) - ตอบสนองรวดเร็วสำหรับงานด่วน
+ - **duo-chat-sonnet-4-5** - ประสิทธิภาพที่สมดุลสำหรับขั้นตอนการทำงานส่วนใหญ่
+ - **duo-chat-opus-4-5** - มีความสามารถมากที่สุดสำหรับการวิเคราะห์ที่ซับซ้อน
+
+:::note
+คุณยังสามารถระบุตัวแปรสภาพแวดล้อม 'GITLAB_TOKEN' ได้หากคุณไม่ต้องการ
+เพื่อจัดเก็บโทเค็นในที่เก็บข้อมูลการรับรองความถูกต้องของ opencode
+:::
+
+##### GitLab ที่โฮสต์เอง
+
+:::note[บันทึกการปฏิบัติตาม]
+OpenCode ใช้โมเดลขนาดเล็กสำหรับงาน AI บางอย่าง เช่น การสร้างชื่อเซสชัน
+มีการกำหนดค่าให้ใช้ gpt-5-nano ตามค่าเริ่มต้น ซึ่งโฮสต์โดย Zen เพื่อล็อค OpenCode
+หากต้องการใช้เฉพาะอินสแตนซ์ที่โฮสต์บน GitLab ของคุณเอง ให้เพิ่มสิ่งต่อไปนี้ในของคุณ
+`opencode.json` ไฟล์. ขอแนะนำให้ปิดใช้งานการแชร์เซสชันด้วย
+
+```json
+{
+ "$schema": "https://opencode.ai/config.json",
+ "small_model": "gitlab/duo-chat-haiku-4-5",
+ "share": "disabled"
+}
+```
+
+:::
+
+สำหรับอินสแตนซ์ GitLab ที่โฮสต์เอง:
+
+```bash
+export GITLAB_INSTANCE_URL=https://gitlab.company.com
+export GITLAB_TOKEN=glpat-...
+```
+
+หากอินสแตนซ์ของคุณใช้งาน AI Gateway แบบกำหนดเอง:
+
+```bash
+GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com
+```
+
+หรือเพิ่มในโปรไฟล์ทุบตีของคุณ:
+
+```bash title="~/.bash_profile"
+export GITLAB_INSTANCE_URL=https://gitlab.company.com
+export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com
+export GITLAB_TOKEN=glpat-...
+```
+
+:::note
+ผู้ดูแลระบบ GitLab ของคุณต้องเปิดใช้งานสิ่งต่อไปนี้:
+
+1. [Duo Agent Platform](https://docs.gitlab.com/user/gitlab_duo/turn_on_off/) สำหรับผู้ใช้ กลุ่ม หรืออินสแตนซ์
+2. แฟล็กคุณลักษณะ (ผ่านคอนโซล Rails):
+ - `agent_platform_claude_code`
+ - `third_party_agents_enabled`
+ :::
+
+##### OAuth สำหรับอินสแตนซ์ที่โฮสต์เอง
+
+คุณต้องสร้างเพื่อให้ Oauth ทำงานกับอินสแตนซ์ที่โฮสต์เองได้
+แอพพลิเคชั่นใหม่ (Settings → Applications) ด้วย
+โทรกลับ URL `http://127.0.0.1:8080/callback` และขอบเขตต่อไปนี้:
+
+- api (เข้าถึง API ในนามของคุณ)
+- read_user (อ่านข้อมูลส่วนตัวของคุณ)
+- read_repository (อนุญาตให้เข้าถึงที่เก็บแบบอ่านอย่างเดียว)
+
+จากนั้นเปิดเผย ID แอปพลิเคชันเป็นตัวแปรสภาพแวดล้อม:
+
+```bash
+export GITLAB_OAUTH_CLIENT_ID=your_application_id_here
+```
+
+เอกสารประกอบเพิ่มเติมเกี่ยวกับหน้าแรกของ [opencode-gitlab-auth](https://www.npmjs.com/package/@gitlab/opencode-gitlab-auth)
+
+##### การกำหนดค่า
+
+ปรับแต่งผ่าน `opencode.json`:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "gitlab": {
+ "options": {
+ "instanceUrl": "https://gitlab.com",
+ "featureFlags": {
+ "duo_agent_platform_agentic_chat": true,
+ "duo_agent_platform": true
+ }
+ }
+ }
+ }
+}
+```
+
+##### GitLab API Tools (เป็นทางเลือก แต่แนะนำเป็นอย่างยิ่ง)
+
+วิธีเข้าถึงเครื่องมือ GitLab (รวมคำขอ ปัญหา ไปป์ไลน์ CI/CD ฯลฯ):
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "plugin": ["@gitlab/opencode-gitlab-plugin"]
+}
+```
+
+ปลั๊กอินนี้มอบความสามารถในการจัดการพื้นที่เก็บข้อมูล GitLab ที่ครอบคลุม รวมถึงการตรวจสอบ MR การติดตามปัญหา การตรวจสอบไปป์ไลน์ และอื่นๆ
+
+---
+
+### นักบิน GitHub
+
+วิธีใช้การสมัครสมาชิก GitHub Copilot ด้วย opencode:
+
+:::note
+บางรุ่นอาจต้องมี [Pro+
+สมัครสมาชิก](https://github.com/features/copilot/plans) เพื่อใช้งาน
+
+บางรุ่นจำเป็นต้องเปิดใช้งานด้วยตนเองใน [การตั้งค่า GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use)
+:::
+
+1. รันคำสั่ง `/connect` และค้นหา GitHub Copilot
+
+ ```txt
+ /connect
+ ```
+
+2. ไปที่ [github.com/login/device](https://github.com/login/device) และป้อนรหัส
+
+ ```txt
+ ┌ Login with GitHub Copilot
+ │
+ │ https://github.com/login/device
+ │
+ │ Enter code: 8F43-6FCF
+ │
+ └ Waiting for authorization...
+ ```
+
+3. ตอนนี้รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### กูเกิล เวอร์เท็กซ์ เอไอ
+
+วิธีใช้ Google Vertex AI กับ OpenCode:
+
+1. ไปที่ **Model Garden** ใน Google Cloud Console แล้วตรวจสอบ
+ รุ่นที่มีในภูมิภาคของคุณ
+
+ :::note
+ คุณต้องมีโปรเจ็กต์ Google Cloud ที่เปิดใช้งาน Vertex AI API
+ :::
+
+2. ตั้งค่าตัวแปรสภาพแวดล้อมที่ต้องการ:
+ - `GOOGLE_CLOUD_PROJECT`: รหัสโครงการ Google Cloud ของคุณ
+ - `VERTEX_LOCATION` (เป็นทางเลือก): ภูมิภาคสำหรับ Vertex AI (ค่าเริ่มต้นคือ `global`)
+ - การรับรองความถูกต้อง (เลือกหนึ่งรายการ):
+ - `GOOGLE_APPLICATION_CREDENTIALS`: เส้นทางไปยังบัญชีบริการของคุณ JSON ไฟล์คีย์
+ - ตรวจสอบสิทธิ์โดยใช้ gcloud CLI: `gcloud auth application-default login`
+
+ ตั้งค่าในขณะที่เรียกใช้ opencode
+
+ ```bash
+ GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode
+ ```
+
+ หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ
+
+ ```bash title="~/.bash_profile"
+ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
+ export GOOGLE_CLOUD_PROJECT=your-project-id
+ export VERTEX_LOCATION=global
+ ```
+
+:::tip
+ภูมิภาค `global` ปรับปรุงความพร้อมใช้งานและลดข้อผิดพลาดโดยไม่มีค่าใช้จ่ายเพิ่มเติม ใช้ตำแหน่งข้อมูลระดับภูมิภาค (เช่น `us-central1`) สำหรับข้อกำหนดด้านถิ่นที่อยู่ของข้อมูล [เรียนรู้เพิ่มเติม](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints)
+:::
+
+3. รันคำสั่ง `/models` เพื่อเลือกรุ่นที่ต้องการ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### กร็อก
+
+1. ไปที่ [คอนโซล Groq](https://console.groq.com/) คลิก **สร้าง API คีย์** และคัดลอกคีย์
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา Groq
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ API สำหรับผู้ให้บริการ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกคำสั่งที่คุณต้องการ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### กอดหน้า
+
+[ผู้ให้บริการการอนุมานใบหน้าแบบกอด](https://huggingface.co/docs/inference-providers) ช่วยให้สามารถเข้าถึงโมเดลแบบเปิดที่รองรับโดยผู้ให้บริการมากกว่า 17 ราย
+
+1. ไปที่ [การตั้งค่าการกอดใบหน้า](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) เพื่อสร้างโทเค็นที่มีสิทธิ์ในการโทรไปยังผู้ให้บริการการอนุมาน
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **Hugging Face**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนโทเค็น Hugging Face ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดล เช่น _Kimi-K2-Instruct_ หรือ _GLM-4.6_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เฮลิโคน
+
+[Helicone](https://helicone.ai) เป็นแพลตฟอร์มการติดตาม LLM ที่ให้การบันทึก การตรวจสอบ และการวิเคราะห์สำหรับแอปพลิเคชัน AI ของคุณ Helicone AI Gateway กำหนดเส้นทางคำขอของคุณไปยังผู้ให้บริการที่เหมาะสมโดยอัตโนมัติตามรุ่น
+
+1. ไปที่ [Helicone](https://helicone.ai) สร้างบัญชี และสร้างคีย์ API จากแดชบอร์ดของคุณ
+
+2. รันคำสั่ง `/connect` และค้นหา **Helicone**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Helicone API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+หากต้องการทราบผู้ให้บริการเพิ่มเติมและฟีเจอร์ขั้นสูง เช่น การแคชและการจำกัดอัตรา โปรดตรวจสอบ [เอกสารประกอบของ Helicone](https://docs.helicone.ai)
+
+#### การกำหนดค่าเพิ่มเติม
+
+ในกรณีที่คุณเห็นคุณสมบัติหรือรุ่นจาก Helicone ที่ไม่ได้กำหนดค่าโดยอัตโนมัติผ่าน opencode คุณสามารถกำหนดค่าด้วยตนเองได้ตลอดเวลา
+
+นี่คือ [Helicone's Model Directory](https://helicone.ai/models) คุณจะต้องใช้สิ่งนี้เพื่อรับ ID ของโมเดลที่คุณต้องการเพิ่ม
+
+```jsonc title="~/.config/opencode/opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "helicone": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "Helicone",
+ "options": {
+ "baseURL": "https://ai-gateway.helicone.ai",
+ },
+ "models": {
+ "gpt-4o": {
+ // Model ID (from Helicone's model directory page)
+ "name": "GPT-4o", // Your own custom name for the model
+ },
+ "claude-sonnet-4-20250514": {
+ "name": "Claude Sonnet 4",
+ },
+ },
+ },
+ },
+}
+```
+
+#### ส่วนหัวที่กำหนดเอง
+
+Helicone รองรับส่วนหัวแบบกำหนดเองสำหรับฟีเจอร์ต่างๆ เช่น การแคช การติดตามผู้ใช้ และการจัดการเซสชัน เพิ่มลงในการกำหนดค่าผู้ให้บริการของคุณโดยใช้ `options.headers`:
+
+```jsonc title="~/.config/opencode/opencode.jsonc"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "helicone": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "Helicone",
+ "options": {
+ "baseURL": "https://ai-gateway.helicone.ai",
+ "headers": {
+ "Helicone-Cache-Enabled": "true",
+ "Helicone-User-Id": "opencode",
+ },
+ },
+ },
+ },
+}
+```
+
+##### การติดตามเซสชัน
+
+คุณลักษณะ [เซสชัน](https://docs.helicone.ai/features/sessions) ของ Helicone ช่วยให้คุณสามารถจัดกลุ่มคำขอ LLM ที่เกี่ยวข้องเข้าด้วยกันได้ ใช้ปลั๊กอิน [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) เพื่อบันทึกการสนทนา OpenCode แต่ละรายการเป็นเซสชันใน Helicone โดยอัตโนมัติ
+
+```bash
+npm install -g opencode-helicone-session
+```
+
+เพิ่มลงในการกำหนดค่าของคุณ
+
+```json title="opencode.json"
+{
+ "plugin": ["opencode-helicone-session"]
+}
+```
+
+ปลั๊กอินจะแทรกส่วนหัว `Helicone-Session-Id` และ `Helicone-Session-Name` ลงในคำขอของคุณ ในหน้าเซสชันของ Helicone คุณจะเห็นการสนทนา OpenCode แต่ละรายการแยกเป็นเซสชันแยกกัน
+
+##### ส่วนหัวของ Helicone ทั่วไป
+
+| ส่วนหัว | คำอธิบาย |
+| -------------------------- | ------------------------------------------------------------- |
+| `Helicone-Cache-Enabled` | เปิดใช้งานการแคชการตอบกลับ (`true`/@@1@@) |
+| `Helicone-User-Id` | ติดตามตัวชี้วัดตามผู้ใช้ |
+| `Helicone-Property-[Name]` | เพิ่มคุณสมบัติที่กำหนดเอง (เช่น `Helicone-Property-Environment`) |
+| `Helicone-Prompt-Id` | เชื่อมโยงคำขอกับเวอร์ชันพร้อมท์ |
+
+ดู [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) สำหรับส่วนหัวที่มีอยู่ทั้งหมด
+
+---
+
+### llama.cpp
+
+คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่านยูทิลิตี้ [llama.cpp's](https://github.com/ggml-org/llama.cpp) llama-server
+
+```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "llama.cpp": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "llama-server (local)",
+ "options": {
+ "baseURL": "http://127.0.0.1:8080/v1"
+ },
+ "models": {
+ "qwen3-coder:a3b": {
+ "name": "Qwen3-Coder: a3b-30b (local)",
+ "limit": {
+ "context": 128000,
+ "output": 65536
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+ในตัวอย่างนี้:
+
+- `llama.cpp` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ
+- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI
+- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI
+- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง
+- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น
+
+---
+
+### ไอโอ.NET
+
+IO.NET มี 17 โมเดลที่ได้รับการปรับให้เหมาะกับการใช้งานที่หลากหลาย:
+
+1. ไปที่ [IO.NET console](https://ai.io.net/) สร้างบัญชี และสร้างคีย์ API
+
+2. รันคำสั่ง `/connect` และค้นหา **IO.NET**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ IO.NET API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### แอลเอ็ม สตูดิโอ
+
+คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่าน LM Studio
+
+```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "lmstudio": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "LM Studio (local)",
+ "options": {
+ "baseURL": "http://127.0.0.1:1234/v1"
+ },
+ "models": {
+ "google/gemma-3n-e4b": {
+ "name": "Gemma 3n-e4b (local)"
+ }
+ }
+ }
+ }
+}
+```
+
+ในตัวอย่างนี้:
+
+- `lmstudio` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ
+- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI
+- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI
+- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง
+- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น
+
+---
+
+### มูนช็อตเอไอ
+
+วิธีใช้ Kimi K2 จาก Moonshot AI:
+
+1. ไปที่ [Moonshot AI console](https://platform.moonshot.ai/console) สร้างบัญชี แล้วคลิก **สร้าง API คีย์**
+
+2. รันคำสั่ง `/connect` และค้นหา **Moonshot AI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Moonshot API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือก _Kimi K2_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### มินิแม็กซ์
+
+1. ไปที่ [MiniMax API Console](https://platform.minimax.io/login) สร้างบัญชี และสร้างคีย์ API
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **MiniMax**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ MiniMax API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _M2.1_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### โรงงานโทเค็นเนบิอุส
+
+1. ไปที่ [คอนโซล Nebius Token Factory](https://tokenfactory.nebius.com/) สร้างบัญชี แล้วคลิก **เพิ่มรหัส**
+
+2. รันคำสั่ง `/connect` และค้นหา **Nebius Token Factory**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Nebius Token Factory API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### โอลามา
+
+คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่าน Ollama
+
+:::tip
+Ollama สามารถกำหนดค่าตัวเองสำหรับ OpenCode ได้โดยอัตโนมัติ ดู [เอกสารการบูรณาการ Ollama](https://docs.ollama.com/integrations/opencode) เพื่อดูรายละเอียด
+:::
+
+```json title="opencode.json" "ollama" {5, 6, 8, 10-14}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "ollama": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "Ollama (local)",
+ "options": {
+ "baseURL": "http://localhost:11434/v1"
+ },
+ "models": {
+ "llama2": {
+ "name": "Llama 2"
+ }
+ }
+ }
+ }
+}
+```
+
+ในตัวอย่างนี้:
+
+- `ollama` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ
+- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI
+- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI
+- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง
+- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น
+
+:::tip
+หากการเรียกใช้เครื่องมือไม่ทำงาน ให้ลองเพิ่ม `num_ctx` ใน Ollama เริ่มต้นประมาณ 16,000 - 32,000
+:::
+
+---
+
+### โอลามา คลาวด์
+
+วิธีใช้ Ollama Cloud กับ OpenCode:
+
+1. ไปที่ [https://ollama.com/](https://ollama.com/) แล้วลงชื่อเข้าใช้หรือสร้างบัญชี
+
+2. ไปที่ **การตั้งค่า** > **คีย์** แล้วคลิก **เพิ่ม API คีย์** เพื่อสร้างคีย์ API ใหม่
+
+3. คัดลอกคีย์ API เพื่อใช้ใน OpenCode
+
+4. เรียกใช้คำสั่ง `/connect` และค้นหา **Ollama Cloud**
+
+ ```txt
+ /connect
+ ```
+
+5. ป้อนคีย์ Ollama Cloud API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+6. **สำคัญ**: ก่อนที่จะใช้โมเดลคลาวด์ใน OpenCode คุณต้องดึงข้อมูลโมเดลในเครื่อง:
+
+ ```bash
+ ollama pull gpt-oss:20b-cloud
+ ```
+
+7. รันคำสั่ง `/models` เพื่อเลือกโมเดล Ollama Cloud ของคุณ
+
+ ```txt
+ /models
+ ```
+
+---
+
+### OpenAI
+
+เราขอแนะนำให้สมัคร [ChatGPT Plus หรือ Pro](https://chatgpt.com/pricing)
+
+1. เมื่อคุณสมัครแล้ว ให้รันคำสั่ง `/connect` และเลือก OpenAI
+
+ ```txt
+ /connect
+ ```
+
+2. ที่นี่คุณสามารถเลือกตัวเลือก **ChatGPT Plus/Pro** จากนั้นเบราว์เซอร์จะเปิดขึ้นมา
+ และขอให้คุณตรวจสอบสิทธิ์
+
+ ```txt
+ ┌ Select auth method
+ │
+ │ ChatGPT Plus/Pro
+ │ Manually enter API Key
+ └
+ ```
+
+3. ตอนนี้โมเดล OpenAI ทั้งหมดควรจะพร้อมใช้งานเมื่อคุณใช้คำสั่ง `/models`
+
+ ```txt
+ /models
+ ```
+
+##### ใช้ปุ่ม API
+
+หากคุณมีคีย์ API อยู่แล้ว คุณสามารถเลือก **ป้อนคีย์ API ด้วยตนเอง** และวางลงในเทอร์มินัลของคุณ
+
+---
+
+### โอเพ่นโค้ดเซน
+
+OpenCode Zen คือรายการโมเดลที่ได้รับการทดสอบและตรวจสอบแล้วโดยทีมงาน OpenCode [เรียนรู้เพิ่มเติม](/docs/zen)
+
+1. ลงชื่อเข้าใช้ **<a href={console}>OpenCode Zen</a>** และคลิก **สร้าง API คีย์**
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **OpenCode Zen**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ OpenCode API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _Qwen 3 Coder 480B_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เปิดเราเตอร์
+
+1. ไปที่ [แดชบอร์ด OpenRouter](https://openrouter.ai/settings/keys) คลิก **สร้าง API คีย์** และคัดลอกคีย์
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา OpenRouter
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ API สำหรับผู้ให้บริการ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. OpenRouter หลายรุ่นถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น ให้รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ
+
+ ```txt
+ /models
+ ```
+
+ คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณ
+
+ ```json title="opencode.json" {6}
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openrouter": {
+ "models": {
+ "somecoolnewmodel": {}
+ }
+ }
+ }
+ }
+ ```
+
+5. คุณยังสามารถปรับแต่งได้ผ่านการกำหนดค่า opencode ของคุณ นี่คือตัวอย่างการระบุผู้ให้บริการ
+
+ ```json title="opencode.json"
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openrouter": {
+ "models": {
+ "moonshotai/kimi-k2": {
+ "options": {
+ "provider": {
+ "order": ["baseten"],
+ "allow_fallbacks": false
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ ```
+
+---
+
+### SAP เอไอคอร์
+
+SAP AI Core ให้การเข้าถึงโมเดลมากกว่า 40 โมเดลจาก OpenAI, Anthropic, Google, Amazon, Meta, Mistral และ AI21 ผ่านแพลตฟอร์มแบบครบวงจร
+
+1. ไปที่ห้องนักบิน [SAP BTP](https://account.hana.ondemand.com/) นำทางไปยังอินสแตนซ์บริการ SAP AI Core ของคุณ และสร้างรหัสบริการ
+
+ :::tip
+ รหัสบริการคือวัตถุ JSON ที่ประกอบด้วย `clientid`, `clientsecret`, `url` และ `serviceurls.AI_API_URL` คุณสามารถค้นหาอินสแตนซ์ AI Core ของคุณได้ภายใต้ **บริการ** > **อินสแตนซ์และการสมัครสมาชิก** ในห้องควบคุม BTP
+ :::
+
+2. รันคำสั่ง `/connect` และค้นหา **SAP AI Core**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนรหัสบริการของคุณ JSON
+
+ ```txt
+ ┌ Service key
+ │
+ │
+ └ enter
+ ```
+
+ หรือตั้งค่าตัวแปรสภาพแวดล้อม `AICORE_SERVICE_KEY`:
+
+ ```bash
+ AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode
+ ```
+
+ หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ:
+
+ ```bash title="~/.bash_profile"
+ export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}'
+ ```
+
+4. ตั้งค่า ID การนำไปใช้งานและกลุ่มทรัพยากรเพิ่มเติม:
+
+ ```bash
+ AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode
+ ```
+
+ :::note
+ การตั้งค่าเหล่านี้เป็นทางเลือกและควรกำหนดค่าตามการตั้งค่า SAP AI Core ของคุณ
+ :::
+
+5. รันคำสั่ง `/models` เพื่อเลือกจากรุ่นที่มีให้เลือกมากกว่า 40 รุ่น
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ตำแหน่งข้อมูล AI ของ OVHcloud
+
+1. ไปที่ [แผง OVHcloud](https://ovh.com/manager) ไปที่ส่วน `Public Cloud` `AI & Machine Learning` > `AI Endpoints` และในแท็บ `API Keys` คลิก **สร้างคีย์ API ใหม่**
+
+2. รันคำสั่ง `/connect` และค้นหา **OVHcloud AI Endpoints**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ OVHcloud AI Endpoints API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _gpt-oss-120b_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### สเกลเวย์
+
+วิธีใช้ [Scaleway Generative API](https://www.scaleway.com/en/docs/generative-apis/) กับ Opencode:
+
+1. ไปที่ [การตั้งค่า Scaleway Console IAM](https://console.scaleway.com/iam/api-keys) เพื่อสร้างคีย์ API ใหม่
+
+2. รันคำสั่ง `/connect` และค้นหา **Scaleway**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Scaleway API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดล เช่น _devstral-2-123b-instruct-2512_ หรือ _gpt-oss-120b_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ร่วมกันเอไอ
+
+1. ไปที่ [Together AI console](https://api.together.ai) สร้างบัญชี แล้วคลิก **เพิ่มรหัส**
+
+2. เรียกใช้คำสั่ง `/connect` และค้นหา **Together AI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Together AI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เวนิส เอไอ
+
+1. ไปที่ [คอนโซล AI ของเวนิส](https://venice.ai) สร้างบัญชี และสร้างคีย์ API
+
+2. รันคำสั่ง `/connect` และค้นหา **Venice AI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Venice AI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Llama 3.3 70B_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### เกตเวย์ AI ของ Vercel
+
+Vercel AI Gateway ช่วยให้คุณเข้าถึงโมเดลจาก OpenAI, Anthropic, Google, xAI และอื่นๆ อีกมากมายผ่านจุดสิ้นสุดแบบรวม โมเดลมีจำหน่ายในราคาปลีกโดยไม่มีส่วนเพิ่ม
+
+1. ไปที่ [แดชบอร์ด Vercel](https://vercel.com/) ไปที่แท็บ **เกตเวย์ AI** และคลิก **API คีย์** เพื่อสร้างคีย์ API ใหม่
+
+2. รันคำสั่ง `/connect` และค้นหา **Vercel AI Gateway**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ Vercel AI Gateway API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกรุ่น
+
+ ```txt
+ /models
+ ```
+
+คุณยังสามารถปรับแต่งโมเดลผ่านการกำหนดค่า opencode ของคุณได้อีกด้วย นี่คือตัวอย่างการระบุลำดับการกำหนดเส้นทางของผู้ให้บริการ
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "vercel": {
+ "models": {
+ "anthropic/claude-sonnet-4": {
+ "options": {
+ "order": ["anthropic", "vertex"]
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+ตัวเลือกการกำหนดเส้นทางที่มีประโยชน์:
+
+| ตัวเลือก | คำอธิบาย |
+| ------------------- | ---------------------------------------------------- |
+| `order` | ลำดับผู้ให้บริการที่จะลอง |
+| `only` | จำกัดเฉพาะผู้ให้บริการบางราย |
+| `zeroDataRetention` | ใช้ผู้ให้บริการที่ไม่มีนโยบายการเก็บรักษาข้อมูลเท่านั้น |
+
+---
+
+### xAI
+
+1. ไปที่ [xAI console](https://console.x.ai/) สร้างบัญชี และสร้างคีย์ API
+
+2. รันคำสั่ง `/connect` และค้นหา **xAI**
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ xAI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Grok Beta_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ซี.เอ.ไอ
+
+1. ไปที่ [Z.AI API console](https://z.ai/manage-apikey/apikey-list) สร้างบัญชี และคลิก **สร้างคีย์ API ใหม่**
+
+2. รันคำสั่ง `/connect` และค้นหา **Z.AI**
+
+ ```txt
+ /connect
+ ```
+
+ หากคุณสมัครสมาชิก **GLM Coding Plan** ให้เลือก **Z.AI Coding Plan**
+
+3. ป้อนคีย์ Z.AI API ของคุณ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _GLM-4.7_
+
+ ```txt
+ /models
+ ```
+
+---
+
+### ZenMux
+
+1. ไปที่ [แดชบอร์ด ZenMux](https://zenmux.ai/settings/keys) คลิก **สร้าง API คีย์** และคัดลอกคีย์
+
+2. รันคำสั่ง `/connect` และค้นหา ZenMux
+
+ ```txt
+ /connect
+ ```
+
+3. ป้อนคีย์ API สำหรับผู้ให้บริการ
+
+ ```txt
+ ┌ API key
+ │
+ │
+ └ enter
+ ```
+
+4. ZenMux หลายรุ่นถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ
+
+ ```txt
+ /models
+ ```
+
+ คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณ
+
+ ```json title="opencode.json" {6}
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "zenmux": {
+ "models": {
+ "somecoolnewmodel": {}
+ }
+ }
+ }
+ }
+ ```
+
+---
+
+## ผู้ให้บริการที่กำหนดเอง
+
+หากต้องการเพิ่มผู้ให้บริการ **รองรับ OpenAI** ที่ไม่อยู่ในคำสั่ง `/connect`:
+
+:::tip
+คุณสามารถใช้ผู้ให้บริการที่เข้ากันได้กับ OpenAI ด้วย opencode ผู้ให้บริการ AI สมัยใหม่ส่วนใหญ่เสนอ API ที่เข้ากันได้กับ OpenAI
+:::
+
+1. เรียกใช้คำสั่ง `/connect` และเลื่อนลงไปที่ **อื่นๆ**
+
+ ```bash
+ $ /connect
+
+ ┌ Add credential
+ │
+ ◆ Select provider
+ │ ...
+ │ ● Other
+ └
+ ```
+
+2. ป้อนรหัสเฉพาะสำหรับผู้ให้บริการ
+
+ ```bash
+ $ /connect
+
+ ┌ Add credential
+ │
+ ◇ Enter provider id
+ │ myprovider
+ └
+ ```
+
+ :::note
+ เลือก ID ที่น่าจดจำ คุณจะใช้รหัสนี้ในไฟล์กำหนดค่าของคุณ
+ :::
+
+3. ป้อนรหัส API ของคุณสำหรับผู้ให้บริการ
+
+ ```bash
+ $ /connect
+
+ ┌ Add credential
+ │
+ ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples.
+ │
+ ◇ Enter your API key
+ │ sk-...
+ └
+ ```
+
+4. สร้างหรืออัปเดตไฟล์ `opencode.json` ในไดเรกทอรีโครงการของคุณ:
+
+ ```json title="opencode.json" ""myprovider"" {5-15}
+ {
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "myprovider": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "My AI ProviderDisplay Name",
+ "options": {
+ "baseURL": "https://api.myprovider.com/v1"
+ },
+ "models": {
+ "my-model-name": {
+ "name": "My Model Display Name"
+ }
+ }
+ }
+ }
+ }
+ ```
+
+ นี่คือตัวเลือกการกำหนดค่า:
+ - **npm**: แพ็คเกจ AI SDK ที่จะใช้ `@ai-sdk/openai-compatible` สำหรับผู้ให้บริการที่เข้ากันได้กับ OpenAI
+ - **ชื่อ**: ชื่อที่แสดงใน UI
+ - **รุ่น**: รุ่นที่มีจำหน่าย
+ - **options.baseURL**: API ปลายทาง URL
+ - **options.apiKey**: ตั้งค่าคีย์ API หรือไม่ก็ได้ หากไม่ได้ใช้การตรวจสอบสิทธิ์
+ - **options.headers**: ตั้งค่าส่วนหัวที่กำหนดเองหรือไม่ก็ได้
+
+ ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกขั้นสูงในตัวอย่างด้านล่าง
+
+5. รันคำสั่ง `/models` จากนั้นผู้ให้บริการและโมเดลที่คุณกำหนดเองจะปรากฏในรายการตัวเลือก
+
+---
+
+##### ตัวอย่าง
+
+นี่คือตัวอย่างการตั้งค่าตัวเลือก `apiKey`, `headers` และโมเดล `limit`
+
+```json title="opencode.json" {9,11,17-20}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "myprovider": {
+ "npm": "@ai-sdk/openai-compatible",
+ "name": "My AI ProviderDisplay Name",
+ "options": {
+ "baseURL": "https://api.myprovider.com/v1",
+ "apiKey": "{env:ANTHROPIC_API_KEY}",
+ "headers": {
+ "Authorization": "Bearer custom-token"
+ }
+ },
+ "models": {
+ "my-model-name": {
+ "name": "My Model Display Name",
+ "limit": {
+ "context": 200000,
+ "output": 65536
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+รายละเอียดการกำหนดค่า:
+
+- **apiKey**: ตั้งค่าโดยใช้ไวยากรณ์ของตัวแปร `env` [เรียนรู้เพิ่มเติม](/docs/config#env-vars)
+- **ส่วนหัว**: ส่วนหัวที่กำหนดเองส่งไปพร้อมกับคำขอแต่ละรายการ
+- **limit.context**: โทเค็นอินพุตสูงสุดที่โมเดลยอมรับ
+- **limit.output**: โทเค็นสูงสุดที่โมเดลสามารถสร้างได้
+
+ช่อง `limit` ช่วยให้ OpenCode เข้าใจบริบทที่คุณเหลืออยู่ ผู้ให้บริการมาตรฐานจะดึงข้อมูลเหล่านี้จาก models.dev โดยอัตโนมัติ
+
+---
+
+## การแก้ไขปัญหา
+
+หากคุณประสบปัญหาในการกำหนดค่าผู้ให้บริการ ให้ตรวจสอบสิ่งต่อไปนี้:
+
+1. **ตรวจสอบการตั้งค่าการรับรองความถูกต้อง**: เรียกใช้ `opencode auth list` เพื่อดูว่ามีข้อมูลรับรองหรือไม่
+ สำหรับผู้ให้บริการจะถูกเพิ่มในการกำหนดค่าของคุณ
+
+ สิ่งนี้ใช้ไม่ได้กับผู้ให้บริการอย่าง Amazon Bedrock ที่ต้องอาศัยตัวแปรสภาพแวดล้อมสำหรับการตรวจสอบสิทธิ์
+
+2. สำหรับผู้ให้บริการแบบกำหนดเอง ให้ตรวจสอบการกำหนดค่า opencode และ:
+ - ตรวจสอบให้แน่ใจว่า ID ผู้ให้บริการที่ใช้ในคำสั่ง `/connect` ตรงกับ ID ในการกำหนดค่า opencode ของคุณ
+ - มีการใช้แพ็คเกจ npm ที่ถูกต้องสำหรับผู้ให้บริการ ตัวอย่างเช่น ใช้ `@ai-sdk/cerebras` สำหรับ Cerebras และสำหรับผู้ให้บริการรายอื่นที่เข้ากันได้กับ OpenAI ให้ใช้ `@ai-sdk/openai-compatible`
+ - ตรวจสอบว่ามีการใช้จุดสิ้นสุด API ที่ถูกต้องในช่อง `options.baseURL`
diff --git a/packages/web/src/content/docs/th/rules.mdx b/packages/web/src/content/docs/th/rules.mdx
new file mode 100644
index 000000000..ba521a405
--- /dev/null
+++ b/packages/web/src/content/docs/th/rules.mdx
@@ -0,0 +1,180 @@
+---
+title: กฎ
+description: ตั้งค่าคำแนะนำที่กำหนดเองสำหรับ opencode
+---
+
+คุณสามารถให้คำแนะนำที่กำหนดเองแก่ opencode ได้โดยการสร้างไฟล์ `AGENTS.md` ซึ่งคล้ายกับกฎของเคอร์เซอร์ ประกอบด้วยคำแนะนำที่จะรวมอยู่ในบริบทของ LLM เพื่อปรับแต่งลักษณะการทำงานสำหรับโครงการเฉพาะของคุณ
+
+---
+
+## เริ่มต้น
+
+หากต้องการสร้างไฟล์ `AGENTS.md` ใหม่ คุณสามารถเรียกใช้คำสั่ง `/init` ใน opencode
+
+:::tip
+คุณควรคอมมิตไฟล์ `AGENTS.md` ของโปรเจ็กต์ของคุณไปที่ Git
+:::
+
+การดำเนินการนี้จะสแกนโปรเจ็กต์ของคุณและเนื้อหาทั้งหมดเพื่อทำความเข้าใจว่าโปรเจ็กต์เกี่ยวกับอะไร และสร้างไฟล์ `AGENTS.md` ด้วย สิ่งนี้ช่วยให้ opencode นำทางโครงการได้ดีขึ้น
+
+หากคุณมีไฟล์ `AGENTS.md` อยู่แล้ว ระบบจะพยายามเพิ่มไฟล์ดังกล่าว
+
+---
+
+## ตัวอย่าง
+
+คุณสามารถสร้างไฟล์นี้ด้วยตนเองได้ นี่คือตัวอย่างบางสิ่งที่คุณสามารถใส่ลงในไฟล์ `AGENTS.md`
+
+```markdown title="AGENTS.md"
+# SST v3 Monorepo Project
+
+This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
+
+## Project Structure
+
+- `packages/` - Contains all workspace packages (functions, core, web, etc.)
+- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
+- `sst.config.ts` - Main SST configuration with dynamic imports
+
+## Code Standards
+
+- Use TypeScript with strict mode enabled
+- Shared code goes in `packages/core/` with proper exports configuration
+- Functions go in `packages/functions/`
+- Infrastructure should be split into logical files in `infra/`
+
+## Monorepo Conventions
+
+- Import shared modules using workspace names: `@my-app/core/example`
+```
+
+เรากำลังเพิ่มคำแนะนำเฉพาะโครงการที่นี่ และจะมีการแชร์กับทีมของคุณ
+
+---
+
+## ประเภท
+
+opencode ยังรองรับการอ่านไฟล์ `AGENTS.md` จากหลาย ๆ ที่ และสิ่งนี้มีจุดประสงค์ที่แตกต่างกัน
+
+### โครงการ
+
+วาง `AGENTS.md` ในรูทโปรเจ็กต์ของคุณสำหรับกฎเฉพาะโปรเจ็กต์ สิ่งเหล่านี้ใช้เฉพาะเมื่อคุณทำงานในไดเร็กทอรีนี้หรือไดเร็กทอรีย่อยเท่านั้น
+
+### ทั่วโลก
+
+คุณยังสามารถมีกฎสากลในไฟล์ `~/.config/opencode/AGENTS.md` สิ่งนี้จะนำไปใช้กับเซสชัน opencode ทั้งหมด
+
+เนื่องจากสิ่งนี้ไม่ได้ผูกมัดกับ Git หรือแชร์กับทีมของคุณ เราขอแนะนำให้ใช้สิ่งนี้เพื่อระบุกฎส่วนบุคคลที่ LLM ควรปฏิบัติตาม
+
+### ความเข้ากันได้ของรหัส Claude
+
+สำหรับผู้ใช้ที่ย้ายจาก Claude Code นั้น OpenCode รองรับรูปแบบไฟล์ของ Claude Code เป็นทางเลือก:
+
+- **กฎของโครงการ**: `CLAUDE.md` ในไดเรกทอรีโครงการของคุณ (ใช้หากไม่มี `AGENTS.md`)
+- **กฎสากล**: `~/.claude/CLAUDE.md` (ใช้หากไม่มี `~/.config/opencode/AGENTS.md`)
+- **ทักษะ**: `~/.claude/skills/` — ดูรายละเอียด [ทักษะตัวแทน](/docs/skills/)
+
+หากต้องการปิดใช้งานความเข้ากันได้ของ Claude Code ให้ตั้งค่าหนึ่งในตัวแปรสภาพแวดล้อมเหล่านี้:
+
+```bash
+export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
+export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
+export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
+```
+
+---
+
+## ลำดับความสำคัญ
+
+เมื่อ opencode เริ่มต้นขึ้น มันจะค้นหาไฟล์กฎตามลำดับนี้:
+
+1. **ไฟล์ในเครื่อง** โดยการสำรวจจากไดเรกทอรีปัจจุบัน (`AGENTS.md`, `CLAUDE.md`)
+2. **ไฟล์ทั่วโลก** ที่ `~/.config/opencode/AGENTS.md`
+3. **ไฟล์ Claude Code** ที่ `~/.claude/CLAUDE.md` (ยกเว้นปิดการใช้งาน)
+
+ไฟล์ที่ตรงกันไฟล์แรกจะชนะในแต่ละหมวดหมู่ ตัวอย่างเช่น หากคุณมีทั้ง `AGENTS.md` และ `CLAUDE.md` ระบบจะใช้เฉพาะ `AGENTS.md` ในทำนองเดียวกัน `~/.config/opencode/AGENTS.md` จะมีความสำคัญมากกว่า `~/.claude/CLAUDE.md`
+
+---
+
+## คำแนะนำที่กำหนดเอง
+
+คุณสามารถระบุไฟล์คำแนะนำที่กำหนดเองได้ใน `opencode.json` หรือ `~/.config/opencode/opencode.json` ทั่วโลก สิ่งนี้ช่วยให้คุณและทีมของคุณสามารถนำกฎที่มีอยู่กลับมาใช้ใหม่ได้ แทนที่จะต้องทำซ้ำกฎเหล่านั้นกับ AGENTS.md
+
+ตัวอย่าง:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
+}
+```
+
+คุณยังสามารถใช้ URL ระยะไกลเพื่อโหลดคำแนะนำจากเว็บได้
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
+}
+```
+
+คำแนะนำระยะไกลจะถูกดึงออกมาโดยหมดเวลา 5 วินาที
+
+ไฟล์คำสั่งทั้งหมดจะรวมกับไฟล์ `AGENTS.md` ของคุณ
+
+---
+
+## การอ้างอิงไฟล์ภายนอก
+
+แม้ว่า opencode จะไม่แยกวิเคราะห์การอ้างอิงไฟล์ใน `AGENTS.md` โดยอัตโนมัติ แต่คุณสามารถใช้ฟังก์ชันที่คล้ายกันได้สองวิธี:
+
+### ใช้ opencode.json
+
+แนวทางที่แนะนำคือการใช้ฟิลด์ `instructions` ใน `opencode.json`:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
+}
+```
+
+### คำแนะนำแบบแมนนวลใน AGENTS.md
+
+คุณสามารถสอนให้ opencode อ่านไฟล์ภายนอกได้โดยการให้คำแนะนำที่ชัดเจนใน `AGENTS.md` ของคุณ นี่เป็นตัวอย่างที่เป็นประโยชน์:
+
+```markdown title="AGENTS.md"
+# TypeScript Project Rules
+
+## External File Loading
+
+CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
+
+Instructions:
+
+- Do NOT preemptively load all references - use lazy loading based on actual need
+- When loaded, treat content as mandatory instructions that override defaults
+- Follow references recursively when needed
+
+## Development Guidelines
+
+For TypeScript code style and best practices: @docs/typescript-guidelines.md
+For React component architecture and hooks patterns: @docs/react-patterns.md
+For REST API design and error handling: @docs/api-standards.md
+For testing strategies and coverage requirements: @test/testing-guidelines.md
+
+## General Guidelines
+
+Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
+```
+
+แนวทางนี้ช่วยให้คุณ:
+
+- สร้างไฟล์กฎแบบโมดูลาร์ที่สามารถนำมาใช้ซ้ำได้
+- แชร์กฎระหว่างโปรเจ็กต์ผ่าน symlink หรือโมดูลย่อย git
+- เขียน AGENTS.md ให้กระชับโดยอ้างอิงหลักเกณฑ์โดยละเอียด
+- ตรวจสอบให้แน่ใจว่า opencode จะโหลดไฟล์เมื่อจำเป็นสำหรับงานเฉพาะเท่านั้น
+
+:::tip
+สำหรับ monorepos หรือโปรเจ็กต์ที่มีมาตรฐานร่วมกัน การใช้ `opencode.json` ที่มีรูปแบบ glob (เช่น `packages/*/AGENTS.md`) จะสามารถบำรุงรักษาได้ดีกว่าคำสั่งแบบแมนนวล
+:::
diff --git a/packages/web/src/content/docs/th/sdk.mdx b/packages/web/src/content/docs/th/sdk.mdx
new file mode 100644
index 000000000..b01cbded3
--- /dev/null
+++ b/packages/web/src/content/docs/th/sdk.mdx
@@ -0,0 +1,391 @@
+---
+title: SDK
+description: ไคลเอนต์ JS ประเภทที่ปลอดภัยสำหรับเซิร์ฟเวอร์ opencode
+---
+
+import config from "../../../../config.mjs"
+export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
+
+opencode JS/TS SDK จัดเตรียมไคลเอ็นต์ประเภทที่ปลอดภัยสำหรับการโต้ตอบกับเซิร์ฟเวอร์
+ใช้เพื่อสร้างการบูรณาการและควบคุม opencode โดยทางโปรแกรม
+
+[เรียนรู้เพิ่มเติม](/docs/server) เกี่ยวกับวิธีการทำงานของเซิร์ฟเวอร์ ตัวอย่างเช่น ลองดู [โครงการ](/docs/ecosystem#โครงการ) ที่สร้างโดยชุมชน
+
+---
+
+## ติดตั้ง
+
+ติดตั้ง SDK จาก npm:
+
+```bash
+npm install @opencode-ai/sdk
+```
+
+---
+
+## สร้างไคลเอนต์
+
+สร้างอินสแตนซ์ของ opencode:
+
+```javascript
+import { createOpencode } from "@opencode-ai/sdk"
+
+const { client } = await createOpencode()
+```
+
+สิ่งนี้จะเริ่มต้นทั้งเซิร์ฟเวอร์และไคลเอนต์
+
+#### ตัวเลือก
+
+| ตัวเลือก | พิมพ์ | คำอธิบาย | ค่าเริ่มต้น |
+| ---------- | ------------- | ------------------------------------------- | ----------- |
+| `hostname` | `string` | ชื่อโฮสต์ของเซิร์ฟเวอร์ | `127.0.0.1` |
+| `port` | `number` | พอร์ตเซิร์ฟเวอร์ | `4096` |
+| `signal` | `AbortSignal` | ยกเลิกสัญญาณสำหรับการยกเลิก | `undefined` |
+| `timeout` | `number` | หมดเวลาเป็น ms สำหรับการเริ่มต้นเซิร์ฟเวอร์ | `5000` |
+| `config` | `Config` | วัตถุการกำหนดค่า | `{}` |
+
+---
+
+## การกำหนดค่า
+
+คุณสามารถส่งผ่านออบเจ็กต์การกำหนดค่าเพื่อปรับแต่งลักษณะการทำงานได้ อินสแตนซ์ยังคงรับ `opencode.json` ของคุณ แต่คุณสามารถแทนที่หรือเพิ่มการกำหนดค่าแบบอินไลน์ได้:
+
+```javascript
+import { createOpencode } from "@opencode-ai/sdk"
+
+const opencode = await createOpencode({
+ hostname: "127.0.0.1",
+ port: 4096,
+ config: {
+ model: "anthropic/claude-3-5-sonnet-20241022",
+ },
+})
+
+console.log(`Server running at ${opencode.server.url}`)
+
+opencode.server.close()
+```
+
+## ลูกค้าเท่านั้น
+
+หากคุณมีอินสแตนซ์ opencode ที่ทำงานอยู่แล้ว คุณสามารถสร้างอินสแตนซ์ไคลเอ็นต์เพื่อเชื่อมต่อได้:
+
+```javascript
+import { createOpencodeClient } from "@opencode-ai/sdk"
+
+const client = createOpencodeClient({
+ baseUrl: "http://localhost:4096",
+})
+```
+
+#### ตัวเลือก
+
+| ตัวเลือก | พิมพ์ | คำอธิบาย | ค่าเริ่มต้น |
+| --------------- | ---------- | ---------------------------------------- | ----------------------- |
+| `baseUrl` | `string` | URL ของเซิร์ฟเวอร์ | `http://localhost:4096` |
+| `fetch` | `function` | การใช้งานการดึงข้อมูลแบบกำหนดเอง | `globalThis.fetch` |
+| `parseAs` | `string` | วิธีการแยกวิเคราะห์การตอบสนอง | `auto` |
+| `responseStyle` | `string` | รูปแบบการคืนสินค้า: `data` หรือ `fields` | `fields` |
+| `throwOnError` | `boolean` | โยนข้อผิดพลาดแทนการส่งคืน | `false` |
+
+---
+
+## ประเภท
+
+SDK มีคำจำกัดความ TypeScript สำหรับ API ประเภททั้งหมด นำเข้าโดยตรง:
+
+```typescript
+import type { Session, Message, Part } from "@opencode-ai/sdk"
+```
+
+ทุกประเภทสร้างขึ้นจากข้อกำหนด OpenAPI ของเซิร์ฟเวอร์และมีอยู่ใน <a href={typesUrl}>ไฟล์ประเภท</a>
+
+---
+
+## ข้อผิดพลาด
+
+SDK อาจทำให้เกิดข้อผิดพลาดที่คุณสามารถจับและจัดการได้:
+
+```typescript
+try {
+ await client.session.get({ path: { id: "invalid-id" } })
+} catch (error) {
+ console.error("Failed to get session:", (error as Error).message)
+}
+```
+
+---
+
+## API
+
+SDK เปิดเผย API ของเซิร์ฟเวอร์ทั้งหมดผ่านไคลเอ็นต์ประเภทที่ปลอดภัย
+
+---
+
+### ทั่วโลก
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ----------------- | ------------------------------------ | ------------------------------------ |
+| `global.health()` | ตรวจสอบสภาพและเวอร์ชันของเซิร์ฟเวอร์ | `{ healthy: true, version: string }` |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+const health = await client.global.health()
+console.log(health.data.version)
+```
+
+---
+
+### แอป
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| -------------- | ----------------------------- | -------------------------------------------- |
+| `app.log()` | เขียนรายการบันทึก | `boolean` |
+| `app.agents()` | รายชื่อตัวแทนที่มีอยู่ทั้งหมด | <a href={typesUrl}><code>ตัวแทน[]</code></a> |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Write a log entry
+await client.app.log({
+ body: {
+ service: "my-app",
+ level: "info",
+ message: "Operation completed",
+ },
+})
+
+// List available agents
+const agents = await client.app.agents()
+```
+
+---
+
+### โครงการ
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------------- | ------------------------ | --------------------------------------------- |
+| `project.list()` | แสดงรายการโครงการทั้งหมด | <a href={typesUrl}><code>Project[]</code></a> |
+| `project.current()` | รับโครงการปัจจุบัน | <a href={typesUrl}><code>Project</code></a> |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// List all projects
+const projects = await client.project.list()
+
+// Get current project
+const currentProject = await client.project.current()
+```
+
+---
+
+### เส้นทาง
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------ | ------------------ | ---------------------------------------- |
+| `path.get()` | รับเส้นทางปัจจุบัน | <a href={typesUrl}><code>Path</code></a> |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Get current path information
+const pathInfo = await client.path.get()
+```
+
+---
+
+### การกำหนดค่า
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| -------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `config.get()` | รับข้อมูลการกำหนดค่า | <a href={typesUrl}><code>กำหนดค่า</code></a> |
+| `config.providers()` | ผู้ให้บริการรายชื่อและโมเดลเริ่มต้น | `{ providers: `<a href={typesUrl}><code>ผู้ให้บริการ[]</code></a>`, default: { [key: string]: string } }` |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+const config = await client.config.get()
+
+const { providers, default: defaults } = await client.config.providers()
+```
+
+---
+
+### เซสชัน
+
+| วิธี | คำอธิบาย | หมายเหตุ |
+| ---------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `session.list()` | แสดงรายการเซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน[]</code></a> |
+| `session.get({ path })` | รับเซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.children({ path })` | แสดงรายการเซสชันย่อย | ส่งคืน <a href={typesUrl}><code>เซสชัน[]</code></a> |
+| `session.create({ body })` | สร้างเซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.delete({ path })` | ลบเซสชัน | ส่งคืน `boolean` |
+| `session.update({ path, body })` | อัปเดตคุณสมบัติเซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.init({ path, body })` | วิเคราะห์แอปและสร้าง `AGENTS.md` | ส่งคืน `boolean` |
+| `session.abort({ path })` | ยกเลิกเซสชันที่ทำงานอยู่ | ส่งคืน `boolean` |
+| `session.share({ path })` | แบ่งปันเซสชั่น | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.unshare({ path })` | เลิกแชร์เซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.summarize({ path, body })` | สรุปเซสชัน | ส่งคืน `boolean` |
+| `session.messages({ path })` | แสดงรายการข้อความในเซสชัน | ส่งคืน `{ info: `<a href={typesUrl}><code>ข้อความ</code></a>`, parts: `<a href={typesUrl}><code>ส่วน[]</code></a>`}[]` |
+| `session.message({ path })` | รับรายละเอียดข้อความ | ส่งคืน `{ info: `<a href={typesUrl}><code>ข้อความ</code></a>`, parts: `<a href={typesUrl}><code>ส่วน[]</code></a>`}` |
+| `session.prompt({ path, body })` | ส่งข้อความแจ้ง | `body.noReply: true` ส่งคืน UserMessage (บริบทเท่านั้น) ค่าเริ่มต้นส่งคืน <a href={typesUrl}><code>AssistantMessage</code></a> พร้อมการตอบสนองของ AI |
+| `session.command({ path, body })` | ส่งคำสั่งไปยังเซสชั่น | ส่งคืน `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>ส่วน[]</code></a>`}` |
+| `session.shell({ path, body })` | รันคำสั่งเชลล์ | ส่งคืน <a href={typesUrl}><code>AssistantMessage</code></a> |
+| `session.revert({ path, body })` | คืนค่าข้อความ | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `session.unrevert({ path })` | คืนค่าข้อความที่เปลี่ยนกลับ | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `postSessionByIdPermissionsByPermissionId({ path, body })` | ตอบสนองต่อการร้องขอการอนุญาต | ส่งคืน `boolean` |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Create and manage sessions
+const session = await client.session.create({
+ body: { title: "My session" },
+})
+
+const sessions = await client.session.list()
+
+// Send a prompt message
+const result = await client.session.prompt({
+ path: { id: session.id },
+ body: {
+ model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
+ parts: [{ type: "text", text: "Hello!" }],
+ },
+})
+
+// Inject context without triggering AI response (useful for plugins)
+await client.session.prompt({
+ path: { id: session.id },
+ body: {
+ noReply: true,
+ parts: [{ type: "text", text: "You are a helpful assistant." }],
+ },
+})
+```
+
+---
+
+### ไฟล์
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------- |
+| `find.text({ query })` | ค้นหาข้อความในไฟล์ | อาร์เรย์ของวัตถุที่ตรงกับ `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
+| `find.files({ query })` | ค้นหาไฟล์และไดเร็กทอรีตามชื่อ | `string[]` (paths) |
+| `find.symbols({ query })` | ค้นหาสัญลักษณ์พื้นที่ทำงาน | <a href={typesUrl}><code>Symbol[]</code></a> |
+| `file.read({ query })` | อ่านไฟล์ | `{ type: "raw" \| "patch", content: string }` |
+| `file.status({ query? })` | รับสถานะสำหรับไฟล์ที่ถูกติดตาม | <a href={typesUrl}><code>File[]</code></a> |
+
+`find.files` รองรับช่องค้นหาเพิ่มเติมบางช่อง:
+
+- `type`: `"file"` หรือ `"directory"`
+- `directory`: แทนที่รูทโปรเจ็กต์สำหรับการค้นหา
+- `limit`: ผลลัพธ์สูงสุด (1–200)
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Search and read files
+const textResults = await client.find.text({
+ query: { pattern: "function.*opencode" },
+})
+
+const files = await client.find.files({
+ query: { query: "*.ts", type: "file" },
+})
+
+const directories = await client.find.files({
+ query: { query: "packages", type: "directory", limit: 20 },
+})
+
+const content = await client.file.read({
+ query: { path: "src/index.ts" },
+})
+```
+
+---
+
+### TUI
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------------------------ | ------------------------------ | ---------- |
+| `tui.appendPrompt({ body })` | เพิ่มข้อความต่อท้ายข้อความแจ้ง | `boolean` |
+| `tui.openHelp()` | เปิดกล่องโต้ตอบความช่วยเหลือ | `boolean` |
+| `tui.openSessions()` | เปิดตัวเลือกเซสชัน | `boolean` |
+| `tui.openThemes()` | เปิดตัวเลือกธีม | `boolean` |
+| `tui.openModels()` | เปิดตัวเลือกรุ่น | `boolean` |
+| `tui.submitPrompt()` | ส่งข้อความแจ้งปัจจุบัน | `boolean` |
+| `tui.clearPrompt()` | ล้างข้อความแจ้ง | `boolean` |
+| `tui.executeCommand({ body })` | ดำเนินการคำสั่ง | `boolean` |
+| `tui.showToast({ body })` | แสดงการแจ้งเตือนขนมปังปิ้ง | `boolean` |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Control TUI interface
+await client.tui.appendPrompt({
+ body: { text: "Add this to prompt" },
+})
+
+await client.tui.showToast({
+ body: { message: "Task completed", variant: "success" },
+})
+```
+
+---
+
+### การรับรองความถูกต้อง
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------------- | ----------------------------------------- | ---------- |
+| `auth.set({ ... })` | ตั้งค่าข้อมูลประจำตัวการรับรองความถูกต้อง | `boolean` |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+await client.auth.set({
+ path: { id: "anthropic" },
+ body: { type: "api", key: "your-api-key" },
+})
+```
+
+---
+
+### กิจกรรม
+
+| วิธี | คำอธิบาย | การตอบสนอง |
+| ------------------- | ------------------------------- | ------------------------------- |
+| `event.subscribe()` | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง |
+
+---
+
+#### ตัวอย่าง
+
+```javascript
+// Listen to real-time events
+const events = await client.event.subscribe()
+for await (const event of events.stream) {
+ console.log("Event:", event.type, event.properties)
+}
+```
diff --git a/packages/web/src/content/docs/th/server.mdx b/packages/web/src/content/docs/th/server.mdx
new file mode 100644
index 000000000..c83851c6a
--- /dev/null
+++ b/packages/web/src/content/docs/th/server.mdx
@@ -0,0 +1,287 @@
+---
+title: เซิร์ฟเวอร์
+description: โต้ตอบกับเซิร์ฟเวอร์ opencode ผ่าน HTTP
+---
+
+import config from "../../../../config.mjs"
+export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
+
+คำสั่ง `opencode serve` รันเซิร์ฟเวอร์ HTTP ที่ไม่มีหัวซึ่งเปิดเผยตำแหน่งข้อมูล OpenAPI ที่ไคลเอนต์ opencode สามารถใช้ได้
+
+---
+
+### การใช้งาน
+
+```bash
+opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
+```
+
+#### ตัวเลือก
+
+| ธง | คำอธิบาย | ค่าเริ่มต้น |
+| --------------- | ---------------------------------------- | ---------------- |
+| `--port` | พอร์ตที่จะฟัง | `4096` |
+| `--hostname` | ชื่อโฮสต์ที่จะฟัง | `127.0.0.1` |
+| `--mdns` | เปิดใช้งานการค้นพบ mDNS | `false` |
+| `--mdns-domain` | ชื่อโดเมนที่กำหนดเองสำหรับบริการ mDNS | `opencode.local` |
+| `--cors` | ต้นกำเนิดเบราว์เซอร์เพิ่มเติมที่จะอนุญาต | `[]` |
+
+`--cors` สามารถส่งผ่านได้หลายครั้ง:
+
+```bash
+opencode serve --cors http://localhost:5173 --cors https://app.example.com
+```
+
+---
+
+### การรับรองความถูกต้อง
+
+ตั้งค่า `OPENCODE_SERVER_PASSWORD` เพื่อปกป้องเซิร์ฟเวอร์ด้วย HTTP การตรวจสอบสิทธิ์ขั้นพื้นฐาน ชื่อผู้ใช้มีค่าเริ่มต้นเป็น `opencode` หรือตั้งค่า `OPENCODE_SERVER_USERNAME` เพื่อแทนที่ชื่อผู้ใช้ สิ่งนี้ใช้ได้กับทั้ง `opencode serve` และ `opencode web`
+
+```bash
+OPENCODE_SERVER_PASSWORD=your-password opencode serve
+```
+
+---
+
+### มันทำงานอย่างไร
+
+เมื่อคุณรัน `opencode` มันจะเริ่มต้น TUI และเซิร์ฟเวอร์ โดยที่ TUI คือ
+ลูกค้าที่พูดคุยกับเซิร์ฟเวอร์ เซิร์ฟเวอร์เปิดเผยข้อมูลจำเพาะของ OpenAPI 3.1
+จุดสิ้นสุด ตำแหน่งข้อมูลนี้ยังใช้เพื่อสร้าง [SDK](/docs/sdk)
+
+:::tip
+ใช้เซิร์ฟเวอร์ opencode เพื่อโต้ตอบกับ opencode โดยทางโปรแกรม
+:::
+
+สถาปัตยกรรมนี้ช่วยให้ opencode รองรับไคลเอนต์หลายตัว และช่วยให้คุณสามารถโต้ตอบกับ opencode โดยทางโปรแกรมได้
+
+คุณสามารถเรียกใช้ `opencode serve` เพื่อเริ่มเซิร์ฟเวอร์แบบสแตนด์อโลน ถ้าคุณมี
+opencode TUI ทำงาน `opencode serve` จะเริ่มเซิร์ฟเวอร์ใหม่
+
+---
+
+#### เชื่อมต่อกับเซิร์ฟเวอร์ที่มีอยู่
+
+เมื่อคุณเริ่ม TUI มันจะสุ่มกำหนดพอร์ตและชื่อโฮสต์ คุณสามารถผ่าน `--hostname` และ `--port` [ธง](/docs/cli) แทนได้ จากนั้นใช้สิ่งนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์
+
+ตำแหน่งข้อมูล [`/tui`](#tui) สามารถใช้เพื่อขับเคลื่อน TUI ผ่านเซิร์ฟเวอร์ ตัวอย่างเช่น คุณสามารถกรอกข้อมูลล่วงหน้าหรือเรียกใช้พร้อมท์ได้ การตั้งค่านี้ถูกใช้โดยปลั๊กอิน OpenCode [IDE](/docs/ide)
+
+---
+
+## ข้อมูลจำเพาะ
+
+เซิร์ฟเวอร์เผยแพร่ข้อมูลจำเพาะ OpenAPI 3.1 ที่สามารถดูได้ที่:
+
+```
+http://<hostname>:<port>/doc
+```
+
+ตัวอย่างเช่น `http://localhost:4096/doc` ใช้ข้อมูลจำเพาะเพื่อสร้างไคลเอ็นต์หรือตรวจสอบคำขอและประเภทการตอบกลับ หรือดูใน Swagger explorer
+
+---
+
+## API
+
+เซิร์ฟเวอร์ opencode เปิดเผย API ต่อไปนี้
+
+---
+
+### ทั่วโลก
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ---------------- | --------------------------------- | ------------------------------------ |
+| `GET` | `/global/health` | รับสถานะและเวอร์ชันของเซิร์ฟเวอร์ | `{ healthy: true, version: string }` |
+| `GET` | `/global/event` | รับกิจกรรมระดับโลก (SSE สตรีม) | สตรีมกิจกรรม |
+
+---
+
+### โครงการ
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ------------------ | ------------------------ | --------------------------------------------- |
+| `GET` | `/project` | แสดงรายการโครงการทั้งหมด | <a href={typesUrl}><code>Project[]</code></a> |
+| `GET` | `/project/current` | รับโครงการปัจจุบัน | <a href={typesUrl}><code>Project</code></a> |
+
+---
+
+### เส้นทาง & VCS
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ------- | ----------------------------------- | ------------------------------------------- |
+| `GET` | `/path` | รับเส้นทางปัจจุบัน | <a href={typesUrl}><code>Path</code></a> |
+| `GET` | `/vcs` | รับข้อมูล VCS สำหรับโครงการปัจจุบัน | <a href={typesUrl}><code>VcsInfo</code></a> |
+
+---
+
+### ตัวอย่าง
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------ | ------------------- | ---------------------- | ---------- |
+| `POST` | `/instance/dispose` | กำจัดอินสแตนซ์ปัจจุบัน | `boolean` |
+
+---
+
+### การกำหนดค่า
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------- | ------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------- |
+| `GET` | `/config` | รับข้อมูลการกำหนดค่า | <a href={typesUrl}><code>กำหนดค่า</code></a> |
+| `PATCH` | `/config` | อัปเดตการกำหนดค่า | <a href={typesUrl}><code>กำหนดค่า</code></a> |
+| `GET` | `/config/providers` | ผู้ให้บริการรายชื่อและโมเดลเริ่มต้น | `{ providers: `<a href={typesUrl}>ผู้ให้บริการ[]</a>`, default: { [key: string]: string } }` |
+
+---
+
+### ผู้ให้บริการ
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------ | -------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `GET` | `/provider` | รายชื่อผู้ให้บริการทั้งหมด | `{ all: `<a href={typesUrl}>ผู้ให้บริการ[]</a>`, default: {...}, connected: string[] }` |
+| `GET` | `/provider/auth` | รับวิธีการตรวจสอบความถูกต้องของผู้ให้บริการ | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
+| `POST` | `/provider/{id}/oauth/authorize` | ให้สิทธิ์ผู้ให้บริการโดยใช้ OAuth | <a href={typesUrl}><code>การอนุญาตของผู้ให้บริการ</code></a> |
+| `POST` | `/provider/{id}/oauth/callback` | จัดการการโทรกลับ OAuth สำหรับผู้ให้บริการ | `boolean` |
+
+---
+
+### เซสชัน
+
+| วิธี | เส้นทาง | คำอธิบาย | หมายเหตุ |
+| -------- | ---------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------- |
+| `GET` | `/session` | แสดงรายการเซสชันทั้งหมด | ส่งคืน <a href={typesUrl}><code>เซสชัน[]</code></a> |
+| `POST` | `/session` | สร้างเซสชันใหม่ | body: `{ parentID?, title? }` ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `GET` | `/session/status` | รับสถานะเซสชันสำหรับเซสชันทั้งหมด | ส่งคืน `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
+| `GET` | `/session/:id` | รับรายละเอียดเซสชั่น | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `DELETE` | `/session/:id` | ลบเซสชันและข้อมูลทั้งหมด | ส่งคืน `boolean` |
+| `PATCH` | `/session/:id` | อัปเดตคุณสมบัติเซสชัน | body: `{ title? }` ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `GET` | `/session/:id/children` | รับเซสชันย่อยของเซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน[]</code></a> |
+| `GET` | `/session/:id/todo` | รับรายการสิ่งที่ต้องทำสำหรับเซสชัน | ส่งคืน <a href={typesUrl}><code>สิ่งที่ต้องทำ[]</code></a> |
+| `POST` | `/session/:id/init` | วิเคราะห์แอปและสร้าง `AGENTS.md` | เนื้อความ: `{ messageID, providerID, modelID }` ส่งคืน `boolean` |
+| `POST` | `/session/:id/fork` | แยกเซสชันที่มีอยู่ไปที่ข้อความ | body: `{ messageID? }` ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `POST` | `/session/:id/abort` | ยกเลิกเซสชันที่ทำงานอยู่ | ส่งคืน `boolean` |
+| `POST` | `/session/:id/share` | แบ่งปันเซสชั่น | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `DELETE` | `/session/:id/share` | ยกเลิกการแชร์เซสชัน | ส่งคืน <a href={typesUrl}><code>เซสชัน</code></a> |
+| `GET` | `/session/:id/diff` | รับความแตกต่างสำหรับเซสชั่นนี้ | ข้อความค้นหา: `messageID?` ส่งคืน <a href={typesUrl}><code>FileDiff[]</code></a> |
+| `POST` | `/session/:id/summarize` | สรุปเซสชัน | เนื้อความ: `{ providerID, modelID }` ส่งคืน `boolean` |
+| `POST` | `/session/:id/revert` | คืนค่าข้อความ | เนื้อความ: `{ messageID, partID? }` ส่งคืน `boolean` |
+| `POST` | `/session/:id/unrevert` | กู้คืนข้อความที่เปลี่ยนกลับทั้งหมด | ส่งคืน `boolean` |
+| `POST` | `/session/:id/permissions/:permissionID` | ตอบสนองต่อการร้องขอการอนุญาต | เนื้อความ: `{ response, remember? }` ส่งคืน `boolean` |
+
+---
+
+### ข้อความ
+
+| วิธี | เส้นทาง | คำอธิบาย | หมายเหตุ |
+| ------ | --------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `GET` | `/session/:id/message` | แสดงรายการข้อความในเซสชัน | ข้อความค้นหา: `limit?` ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วน[]</a>`}[]` |
+| `POST` | `/session/:id/message` | ส่งข้อความและรอการตอบกลับ | เนื้อความ: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }` ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วน[]</a>`}` |
+| `GET` | `/session/:id/message/:messageID` | รับรายละเอียดข้อความ | ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วนหนึ่ง[]</a>`}` |
+| `POST` | `/session/:id/prompt_async` | ส่งข้อความแบบอะซิงโครนัส (ไม่ต้องรอ) | เนื้อความ: เหมือนกับ `/session/:id/message` ส่งคืน `204 No Content` |
+| `POST` | `/session/:id/command` | ดำเนินการคำสั่งเครื่องหมายทับ | เนื้อความ: `{ messageID?, agent?, model?, command, arguments }` ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วน[]</a>`}` |
+| `POST` | `/session/:id/shell` | รันคำสั่งเชลล์ | เนื้อความ: `{ agent, model?, command }` ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วน[]</a>`}` |
+
+---
+
+### คำสั่ง
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ---------- | ----------------------- | --------------------------------------------- |
+| `GET` | `/command` | แสดงรายการคำสั่งทั้งหมด | <a href={typesUrl}><code>Command[]</code></a> |
+
+---
+
+### ไฟล์
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ------------------------ | ------------------------------ | ----------------------------------------------------------------------------------------- |
+| `GET` | `/find?pattern=<pat>` | ค้นหาข้อความในไฟล์ | อาร์เรย์ของวัตถุที่ตรงกับ `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
+| `GET` | `/find/file?query=<q>` | ค้นหาไฟล์และไดเร็กทอรีตามชื่อ | `string[]` (paths) |
+| `GET` | `/find/symbol?query=<q>` | ค้นหาสัญลักษณ์พื้นที่ทำงาน | <a href={typesUrl}><code>Symbol[]</code></a> |
+| `GET` | `/file?path=<path>` | แสดงรายการไฟล์และไดเร็กทอรี | <a href={typesUrl}><code>FileNode[]</code></a> |
+| `GET` | `/file/content?path=<p>` | อ่านไฟล์ | <a href={typesUrl}><code>เนื้อหาไฟล์</code></a> |
+| `GET` | `/file/status` | รับสถานะสำหรับไฟล์ที่ถูกติดตาม | <a href={typesUrl}><code>File[]</code></a> |
+
+#### `/find/file` พารามิเตอร์การสืบค้น
+
+- `query` (จำเป็น) — สตริงการค้นหา (การจับคู่แบบคลุมเครือ)
+- `type` (ไม่บังคับ) — จำกัดผลลัพธ์ไว้ที่ `"file"` หรือ `"directory"`
+- `directory` (เป็นทางเลือก) — แทนที่รูทโปรเจ็กต์สำหรับการค้นหา
+- `limit` (ไม่บังคับ) — ผลลัพธ์สูงสุด (1–200)
+- `dirs` (ไม่บังคับ) — แฟล็กดั้งเดิม (`"false"` ส่งคืนเฉพาะไฟล์)
+
+---
+
+### เครื่องมือ (ทดลอง)
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- |
+| `GET` | `/experimental/tool/ids` | แสดงรายการรหัสเครื่องมือทั้งหมด | <a href={typesUrl}><code>รหัสเครื่องมือ</code></a> |
+| `GET` | `/experimental/tool?provider=<p>&model=<m>` | แสดงรายการเครื่องมือที่มีสกีมา JSON สำหรับโมเดล | <a href={typesUrl}><code>รายการเครื่องมือ</code></a> |
+
+---
+
+### LSP, ฟอร์แมตเตอร์ & MCP
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------ | ------------ | ------------------------------- | -------------------------------------------------------- |
+| `GET` | `/lsp` | รับ LSP สถานะเซิร์ฟเวอร์ | <a href={typesUrl}><code>LSPStatus[]</code></a> |
+| `GET` | `/formatter` | รับสถานะฟอร์แมตเตอร์ | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
+| `GET` | `/mcp` | รับ MCP สถานะเซิร์ฟเวอร์ | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
+| `POST` | `/mcp` | เพิ่มเซิร์ฟเวอร์ MCP แบบไดนามิก | body: `{ name, config }` ส่งคืนออบเจ็กต์สถานะ MCP |
+
+---
+
+### ตัวแทน
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | -------- | ----------------------------- | -------------------------------------------- |
+| `GET` | `/agent` | รายชื่อตัวแทนที่มีอยู่ทั้งหมด | <a href={typesUrl}><code>ตัวแทน[]</code></a> |
+
+---
+
+### การบันทึก
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------ | ------- | ------------------------------------------------------------------ | ---------- |
+| `POST` | `/log` | เขียนรายการบันทึก เนื้อความ: `{ service, level, message, extra? }` | `boolean` |
+
+---
+
+### TUI
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ------ | ----------------------- | ----------------------------------------------- | --------------- |
+| `POST` | `/tui/append-prompt` | เพิ่มข้อความต่อท้ายข้อความแจ้ง | `boolean` |
+| `POST` | `/tui/open-help` | เปิดกล่องโต้ตอบความช่วยเหลือ | `boolean` |
+| `POST` | `/tui/open-sessions` | เปิดตัวเลือกเซสชัน | `boolean` |
+| `POST` | `/tui/open-themes` | เปิดตัวเลือกธีม | `boolean` |
+| `POST` | `/tui/open-models` | เปิดตัวเลือกรุ่น | `boolean` |
+| `POST` | `/tui/submit-prompt` | ส่งข้อความแจ้งปัจจุบัน | `boolean` |
+| `POST` | `/tui/clear-prompt` | ล้างข้อความแจ้ง | `boolean` |
+| `POST` | `/tui/execute-command` | ดำเนินการคำสั่ง (`{ command }`) | `boolean` |
+| `POST` | `/tui/show-toast` | โชว์ขนมปังปิ้ง (`{ title?, message, variant }`) | `boolean` |
+| `GET` | `/tui/control/next` | รอคำขอควบคุมถัดไป | วัตถุคำขอควบคุม |
+| `POST` | `/tui/control/response` | ตอบสนองต่อคำขอควบคุม (`{ body }`) | `boolean` |
+
+---
+
+### การรับรองความถูกต้อง
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ----------- | --------------------------------------------------------------------------------- | ---------- |
+| `PUT` | `/auth/:id` | ตั้งค่าข้อมูลประจำตัวการรับรองความถูกต้อง เนื้อความต้องตรงกับสคีมาของผู้ให้บริการ | `boolean` |
+
+---
+
+### กิจกรรม
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | -------- | ---------------------------------------------------------------------------- | ------------------------------- |
+| `GET` | `/event` | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง งานแรกคือ `server.connected` จากนั้นงานรถบัส | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง |
+
+---
+
+### เอกสาร
+
+| วิธี | เส้นทาง | คำอธิบาย | การตอบสนอง |
+| ----- | ------- | --------------------------- | ---------------------------------- |
+| `GET` | `/doc` | ข้อมูลจำเพาะของ OpenAPI 3.1 | HTML หน้าพร้อมข้อมูลจำเพาะ OpenAPI |
diff --git a/packages/web/src/content/docs/th/share.mdx b/packages/web/src/content/docs/th/share.mdx
new file mode 100644
index 000000000..40b1a66eb
--- /dev/null
+++ b/packages/web/src/content/docs/th/share.mdx
@@ -0,0 +1,128 @@
+---
+title: แบ่งปัน
+description: แบ่งปันการสนทนา OpenCode ของคุณ
+---
+
+คุณลักษณะการแชร์ของ OpenCode ช่วยให้คุณสร้างลิงก์สาธารณะไปยังการสนทนา OpenCode ของคุณ เพื่อให้คุณสามารถทำงานร่วมกับเพื่อนร่วมทีมหรือรับความช่วยเหลือจากผู้อื่นได้
+
+:::note
+ทุกคนที่มีลิงก์สามารถเข้าถึงการสนทนาที่แชร์ได้แบบสาธารณะ
+:::
+
+---
+
+## มันทำงานอย่างไร
+
+เมื่อคุณแบ่งปันการสนทนา OpenCode:
+
+1. สร้าง URL สาธารณะที่ไม่ซ้ำสำหรับเซสชันของคุณ
+2. ซิงค์ประวัติการสนทนาของคุณกับเซิร์ฟเวอร์ของเรา
+3. ทำให้สามารถเข้าถึงการสนทนาผ่านลิงก์ที่แชร์ได้ — `opncd.ai/s/<share-id>`
+
+---
+
+## การแบ่งปัน
+
+OpenCode รองรับโหมดการแชร์สามโหมดที่ควบคุมวิธีการแชร์การสนทนา:
+
+---
+
+### คู่มือ (ค่าเริ่มต้น)
+
+ตามค่าเริ่มต้น OpenCode จะใช้โหมดการแชร์ด้วยตนเอง เซสชันจะไม่ถูกแชร์โดยอัตโนมัติ แต่คุณสามารถแชร์ได้ด้วยตนเองโดยใช้คำสั่ง `/share`:
+
+```
+/share
+```
+
+สิ่งนี้จะสร้าง URL ที่ไม่ซ้ำกันซึ่งจะถูกคัดลอกไปยังคลิปบอร์ดของคุณ
+
+หากต้องการตั้งค่าโหมดแมนนวลอย่างชัดเจนใน [ไฟล์ปรับแต่ง](/docs/config):
+
+```json title="opencode.json"
+{
+ "$schema": "https://opncd.ai/config.json",
+ "share": "manual"
+}
+```
+
+---
+
+### แชร์อัตโนมัติ
+
+คุณสามารถเปิดใช้งานการแบ่งปันอัตโนมัติสำหรับการสนทนาใหม่ทั้งหมดโดยตั้งค่าตัวเลือก `share` เป็น `"auto"` ใน [ไฟล์กำหนดค่า](/docs/config):
+
+```json title="opencode.json"
+{
+ "$schema": "https://opncd.ai/config.json",
+ "share": "auto"
+}
+```
+
+เมื่อเปิดใช้งานการแชร์อัตโนมัติ ทุกการสนทนาใหม่จะถูกแชร์โดยอัตโนมัติและลิงก์จะถูกสร้างขึ้น
+
+---
+
+### พิการ
+
+คุณสามารถปิดการแชร์ทั้งหมดได้โดยตั้งค่าตัวเลือก `share` เป็น `"disabled"` ใน [ไฟล์กำหนดค่า](/docs/config):
+
+```json title="opencode.json"
+{
+ "$schema": "https://opncd.ai/config.json",
+ "share": "disabled"
+}
+```
+
+หากต้องการบังคับใช้สิ่งนี้กับทีมของคุณสำหรับโปรเจ็กต์ที่กำหนด ให้เพิ่มลงใน `opencode.json` ในโปรเจ็กต์ของคุณและตรวจสอบใน Git
+
+---
+
+## ยกเลิกการแชร์
+
+หากต้องการหยุดแชร์การสนทนาและลบออกจากการเข้าถึงแบบสาธารณะ:
+
+```
+/unshare
+```
+
+การดำเนินการนี้จะลบลิงก์แชร์และลบข้อมูลที่เกี่ยวข้องกับการสนทนา
+
+---
+
+## ความเป็นส่วนตัว
+
+มีบางสิ่งที่ต้องคำนึงถึงเมื่อแบ่งปันการสนทนา
+
+---
+
+### การเก็บรักษาข้อมูล
+
+การสนทนาที่แชร์จะยังสามารถเข้าถึงได้จนกว่าคุณจะยกเลิกการแชร์อย่างชัดเจน นี้
+รวมถึง:
+
+- ประวัติการสนทนาแบบเต็ม
+- ทุกข้อความและการตอบกลับ
+- ข้อมูลเมตาของเซสชัน
+
+---
+
+### ข้อแนะนำ
+
+- แชร์การสนทนาที่ไม่มีข้อมูลที่ละเอียดอ่อนเท่านั้น
+- ตรวจสอบเนื้อหาการสนทนาก่อนที่จะแบ่งปัน
+- ยกเลิกการแชร์การสนทนาเมื่อการทำงานร่วมกันเสร็จสมบูรณ์
+- หลีกเลี่ยงการแบ่งปันการสนทนาด้วยรหัสที่เป็นกรรมสิทธิ์หรือข้อมูลที่เป็นความลับ
+- สำหรับโปรเจ็กต์ที่มีความละเอียดอ่อน ให้ปิดการแชร์ทั้งหมด
+
+---
+
+## สำหรับสถานประกอบการ
+
+สำหรับการปรับใช้ระดับองค์กร คุณสมบัติการแชร์อาจเป็น:
+
+- **ปิดการใช้งาน** ทั้งหมดเพื่อความปลอดภัย
+- **จำกัด** สำหรับผู้ใช้ที่ผ่านการรับรองความถูกต้องผ่าน SSO เท่านั้น
+- **โฮสต์เอง** บนโครงสร้างพื้นฐานของคุณเอง
+
+[เรียนรู้เพิ่มเติม](/docs/enterprise) เกี่ยวกับการใช้ opencode ในองค์กรของคุณ
diff --git a/packages/web/src/content/docs/th/skills.mdx b/packages/web/src/content/docs/th/skills.mdx
new file mode 100644
index 000000000..062ec783f
--- /dev/null
+++ b/packages/web/src/content/docs/th/skills.mdx
@@ -0,0 +1,222 @@
+---
+title: “ทักษะตัวแทน”
+description: "กำหนดพฤติกรรมที่นำมาใช้ซ้ำได้ผ่านคำจำกัดความ SKILL.md"
+---
+
+ทักษะของเจ้าหน้าที่ช่วยให้ OpenCode ค้นพบคำแนะนำที่ใช้ซ้ำได้จาก repo หรือโฮมไดเร็กทอรีของคุณ
+ทักษะจะถูกโหลดตามความต้องการผ่านเครื่องมือ `skill` ดั้งเดิม ตัวแทนจะเห็นทักษะที่มีอยู่และสามารถโหลดเนื้อหาทั้งหมดได้เมื่อจำเป็น
+
+---
+
+## วางไฟล์
+
+สร้างหนึ่งโฟลเดอร์ต่อชื่อทักษะ และใส่ `SKILL.md` ไว้ข้างใน
+OpenCode ค้นหาตำแหน่งเหล่านี้:
+
+- การกำหนดค่าโครงการ: `.opencode/skills/<name>/SKILL.md`
+- การกำหนดค่าส่วนกลาง: `~/.config/opencode/skills/<name>/SKILL.md`
+- เข้ากันได้กับโครงการ Claude: `.claude/skills/<name>/SKILL.md`
+- เข้ากันได้กับ Global Claude: `~/.claude/skills/<name>/SKILL.md`
+- เข้ากันได้กับตัวแทนโครงการ: `.agents/skills/<name>/SKILL.md`
+- รองรับตัวแทนทั่วโลก: `~/.agents/skills/<name>/SKILL.md`
+
+---
+
+## ทำความเข้าใจกับการค้นพบ
+
+สำหรับเส้นทางภายในโปรเจ็กต์ OpenCode จะเดินขึ้นมาจากไดเร็กทอรีการทำงานปัจจุบันของคุณจนกว่าจะถึงแผนผังงาน git
+โดยจะโหลด `skills/*/SKILL.md` ที่ตรงกันใน `.opencode/` และ `.claude/skills/*/SKILL.md` หรือ `.agents/skills/*/SKILL.md` ที่ตรงกันตลอดทาง
+
+คำจำกัดความสากลยังโหลดจาก `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` และ `~/.agents/skills/*/SKILL.md`
+
+---
+
+## เขียน frontmatter
+
+`SKILL.md` แต่ละอันต้องขึ้นต้นด้วย YAML frontmatter
+เฉพาะฟิลด์เหล่านี้เท่านั้นที่ได้รับการยอมรับ:
+
+- `name` (จำเป็น)
+- `description` (จำเป็น)
+- `license` (ไม่บังคับ)
+- `compatibility` (ไม่บังคับ)
+- `metadata` (ตัวเลือก แมปแบบสตริงต่อสตริง)
+
+ช่อง frontmatter ที่ไม่รู้จักจะถูกละเว้น
+
+---
+
+## ตรวจสอบชื่อ
+
+`name` ต้อง:
+
+- มีความยาว 1–64 อักขระ
+- เป็นตัวพิมพ์เล็กและตัวเลขคละกันที่มีเครื่องหมายยัติภังค์ตัวคั่นเดียว
+- ไม่ขึ้นต้นหรือลงท้ายด้วย `-`
+- ไม่มี `--` ติดต่อกัน
+- จับคู่ชื่อไดเร็กทอรีที่มี `SKILL.md`
+
+regex ที่เทียบเท่า:
+
+```text
+^[a-z0-9]+(-[a-z0-9]+)*$
+```
+
+---
+
+## ปฏิบัติตามกฎความยาว
+
+`description` ต้องมีความยาว 1-1,024 ตัวอักษร
+เจาะจงให้ตัวแทนเลือกได้ถูกต้อง
+
+---
+
+## ใช้ตัวอย่าง
+
+สร้าง `.opencode/skills/git-release/SKILL.md` แบบนี้:
+
+```markdown
+---
+name: git-release
+description: Create consistent releases and changelogs
+license: MIT
+compatibility: opencode
+metadata:
+ audience: maintainers
+ workflow: github
+---
+
+## What I do
+
+- Draft release notes from merged PRs
+- Propose a version bump
+- Provide a copy-pasteable `gh release create` command
+
+## When to use me
+
+Use this when you are preparing a tagged release.
+Ask clarifying questions if the target versioning scheme is unclear.
+```
+
+---
+
+## รู้จักคำอธิบายเครื่องมือ
+
+OpenCode แสดงรายการทักษะที่มีอยู่ในคำอธิบายเครื่องมือ `skill`
+แต่ละรายการจะมีชื่อทักษะและคำอธิบาย:
+
+```xml
+<available_skills>
+ <skill>
+ <name>git-release</name>
+ <description>Create consistent releases and changelogs</description>
+ </skill>
+</available_skills>
+```
+
+ตัวแทนโหลดทักษะโดยการเรียกเครื่องมือ:
+
+```
+skill({ name: "git-release" })
+```
+
+---
+
+## กำหนดค่าสิทธิ์
+
+ควบคุมว่าตัวแทนทักษะใดสามารถเข้าถึงโดยใช้สิทธิ์ตามรูปแบบใน `opencode.json`:
+
+```json
+{
+ "permission": {
+ "skill": {
+ "*": "allow",
+ "pr-review": "allow",
+ "internal-*": "deny",
+ "experimental-*": "ask"
+ }
+ }
+}
+```
+
+| การอนุญาต | พฤติกรรม |
+| ---------- | ----------------------------------------- |
+| `allow` | โหลดทักษะทันที |
+| `deny` | ทักษะถูกซ่อนไม่ให้ตัวแทน การเข้าถึงถูกปฏิเสธ |
+| `ask` | ผู้ใช้ได้รับแจ้งให้อนุมัติก่อนที่จะโหลด |
+
+รูปแบบที่รองรับไวด์การ์ด: `internal-*` ตรงกับ `internal-docs`, `internal-tools` ฯลฯ
+
+---
+
+## แทนที่ต่อตัวแทน
+
+ให้สิทธิ์แก่ตัวแทนเฉพาะเจาะจงที่แตกต่างจากค่าเริ่มต้นทั่วไป
+
+**สำหรับตัวแทนแบบกำหนดเอง** (ในตัวแทนส่วนหน้า):
+
+```yaml
+---
+permission:
+ skill:
+ "documents-*": "allow"
+---
+```
+
+**สำหรับตัวแทนในตัว** (ใน `opencode.json`):
+
+```json
+{
+ "agent": {
+ "plan": {
+ "permission": {
+ "skill": {
+ "internal-*": "allow"
+ }
+ }
+ }
+ }
+}
+```
+
+---
+
+## ปิดการใช้งานเครื่องมือทักษะ
+
+ปิดการใช้งานทักษะโดยสิ้นเชิงสำหรับตัวแทนที่ไม่ควรใช้:
+
+**สำหรับตัวแทนแบบกำหนดเอง**:
+
+```yaml
+---
+tools:
+ skill: false
+---
+```
+
+**สำหรับตัวแทนในตัว**:
+
+```json
+{
+ "agent": {
+ "plan": {
+ "tools": {
+ "skill": false
+ }
+ }
+ }
+}
+```
+
+เมื่อปิดใช้งาน ส่วน `<available_skills>` จะถูกละเว้นทั้งหมด
+
+---
+
+## แก้ไขปัญหาการโหลด
+
+หากทักษะไม่แสดง:
+
+1. ตรวจสอบว่า `SKILL.md` สะกดด้วยตัวพิมพ์ใหญ่ทั้งหมด
+2. ตรวจสอบว่าส่วนหน้าประกอบด้วย `name` และ `description`
+3. ตรวจสอบให้แน่ใจว่าชื่อทักษะไม่ซ้ำกันในทุกสถานที่
+4. ตรวจสอบการอนุญาต ทักษะที่มี `deny` ถูกซ่อนไม่ให้ตัวแทนเห็น
diff --git a/packages/web/src/content/docs/th/themes.mdx b/packages/web/src/content/docs/th/themes.mdx
new file mode 100644
index 000000000..d449a9a10
--- /dev/null
+++ b/packages/web/src/content/docs/th/themes.mdx
@@ -0,0 +1,369 @@
+---
+title: ธีมส์
+description: เลือกธีมในตัวหรือกำหนดธีมของคุณเอง
+---
+
+ด้วย OpenCode คุณสามารถเลือกจากหนึ่งในธีมที่มีอยู่แล้วภายใน ใช้ธีมที่ปรับให้เข้ากับธีมเทอร์มินัลของคุณ หรือกำหนดธีมที่คุณกำหนดเองได้
+
+ตามค่าเริ่มต้น OpenCode จะใช้ธีม `opencode` ของเราเอง
+
+---
+
+## ข้อกำหนดของเทอร์มินัล
+
+เพื่อให้ธีมแสดงได้อย่างถูกต้องด้วยชุดสีทั้งหมด เทอร์มินัลของคุณต้องรองรับ **truecolor** (สี 24 บิต) เทอร์มินัลสมัยใหม่ส่วนใหญ่จะรองรับสิ่งนี้ตามค่าเริ่มต้น แต่คุณอาจต้องเปิดใช้งาน:
+
+- **ตรวจสอบการสนับสนุน**: เรียกใช้ `echo $COLORTERM` - ​​ควรส่งออก `truecolor` หรือ `24bit`
+- **เปิดใช้งานสีจริง**: ตั้งค่าตัวแปรสภาพแวดล้อม `COLORTERM=truecolor` ในโปรไฟล์เชลล์ของคุณ
+- **ความเข้ากันได้ของเทอร์มินัล**: ตรวจสอบให้แน่ใจว่าโปรแกรมจำลองเทอร์มินัลของคุณรองรับสี 24 บิต (เทอร์มินัลที่ทันสมัยที่สุด เช่น iTerm2, Alacritty, Kitty, Windows Terminal และ GNOME Terminal do เวอร์ชันล่าสุด)
+
+หากไม่รองรับสีจริง ธีมอาจปรากฏขึ้นโดยมีความแม่นยำของสีลดลงหรือกลับไปใช้การประมาณสี 256 สีที่ใกล้ที่สุด
+
+---
+
+## ธีมในตัว
+
+OpenCode มาพร้อมกับธีมในตัวหลายธีม
+
+| ชื่อ | คำอธิบาย |
+| ---------------------- | ---------------------------------------------------------------------------- |
+| `system` | ปรับให้เข้ากับสีพื้นหลังของเทอร์มินัลของคุณ |
+| `tokyonight` | อิงตามธีมของ [Tokyonight](https://github.com/folke/tokyonight.nvim) |
+| `everforest` | อิงตามธีม [Everforest](https://github.com/sainnhe/everforest) |
+| `ayu` | อิงตามธีมสีเข้มของ [Ayu](https://github.com/ayu-theme) |
+| `catppuccin` | อิงตามธีม [Catppuccin](https://github.com/catppuccin) |
+| `catppuccin-macchiato` | อิงตามธีม [Catppuccin](https://github.com/catppuccin) |
+| `gruvbox` | อิงตามธีม [Gruvbox](https://github.com/morhetz/gruvbox) |
+| `kanagawa` | อิงตามธีมของ [คานากาว่า](https://github.com/rebelot/kanagawa.nvim) |
+| `nord` | อิงตามธีม [Nord](https://github.com/nordtheme/nord) |
+| `matrix` | ธีมสีเขียวสไตล์แฮ็กเกอร์บนสีดำ |
+| `one-dark` | อิงตามธีม [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark |
+
+และยิ่งไปกว่านั้น เรายังเพิ่มธีมใหม่ๆ อย่างต่อเนื่อง
+
+---
+
+## ธีมของระบบ
+
+ธีม `system` ได้รับการออกแบบให้ปรับให้เข้ากับโทนสีของเครื่องเทอร์มินัลของคุณโดยอัตโนมัติ ไม่เหมือนกับธีมดั้งเดิมที่ใช้สีคงที่ ธีม _system_:
+
+- **สร้างระดับสีเทา**: สร้างระดับสีเทาแบบกำหนดเองตามสีพื้นหลังของเทอร์มินัลของคุณ เพื่อให้มั่นใจว่ามีคอนทราสต์ที่เหมาะสมที่สุด
+- **ใช้สี ANSI**: ใช้ประโยชน์จากสี ANSI มาตรฐาน (0-15) สำหรับการเน้นไวยากรณ์และองค์ประกอบ UI ซึ่งเคารพชุดสีของเทอร์มินัลของคุณ
+- **รักษาค่าเริ่มต้นของเทอร์มินัล**: ใช้ `none` สำหรับสีข้อความและพื้นหลัง เพื่อรักษารูปลักษณ์ดั้งเดิมของเทอร์มินัลของคุณ
+
+ธีมของระบบมีไว้สำหรับผู้ใช้ที่:
+
+- ต้องการให้ OpenCode ตรงกับรูปลักษณ์ของเทอร์มินัล
+- ใช้โครงร่างสีเทอร์มินัลแบบกำหนดเอง
+- ต้องการรูปลักษณ์ที่สอดคล้องกันในแอปพลิเคชันเทอร์มินัลทั้งหมด
+
+---
+
+## การใช้ธีม
+
+คุณสามารถเลือกธีมได้โดยเปิดการเลือกธีมขึ้นมาด้วยคำสั่ง `/theme` หรือคุณสามารถระบุได้ใน [config](/docs/config)
+
+```json title="opencode.json" {3}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "theme": "tokyonight"
+}
+```
+
+---
+
+## ธีมที่กำหนดเอง
+
+OpenCode รองรับระบบธีมที่ใช้ JSON ที่ยืดหยุ่น ซึ่งช่วยให้ผู้ใช้สามารถสร้างและปรับแต่งธีมได้อย่างง่ายดาย
+
+---
+
+### ลำดับชั้น
+
+ธีมจะถูกโหลดจากหลายไดเร็กทอรีตามลำดับต่อไปนี้ โดยไดเร็กทอรีรุ่นหลังจะแทนที่ไดเร็กทอรีก่อนหน้า:
+
+1. **ธีมในตัว** - ธีมเหล่านี้ฝังอยู่ในไบนารี
+2. **ไดเรกทอรีกำหนดค่าผู้ใช้** - กำหนดใน `~/.config/opencode/themes/*.json` หรือ `$XDG_CONFIG_HOME/opencode/themes/*.json`
+3. **ไดเรกทอรีรากของโครงการ** - กำหนดไว้ใน `<project-root>/.opencode/themes/*.json`
+4. **ไดเร็กทอรีการทำงานปัจจุบัน** - กำหนดใน `./.opencode/themes/*.json`
+
+หากหลายไดเร็กทอรีมีธีมที่มีชื่อเดียวกัน ธีมจากไดเร็กทอรีที่มีลำดับความสำคัญสูงกว่าจะถูกนำมาใช้
+
+---
+
+### การสร้างธีม
+
+หากต้องการสร้างธีมที่กำหนดเอง ให้สร้างไฟล์ JSON ในไดเร็กทอรีธีมรายการใดรายการหนึ่ง
+
+สำหรับธีมทั้งผู้ใช้:
+
+```bash no-frame
+mkdir -p ~/.config/opencode/themes
+vim ~/.config/opencode/themes/my-theme.json
+```
+
+และสำหรับธีมเฉพาะโครงการ
+
+```bash no-frame
+mkdir -p .opencode/themes
+vim .opencode/themes/my-theme.json
+```
+
+---
+
+### JSON รูปแบบ
+
+ธีมใช้รูปแบบ JSON ที่ยืดหยุ่นพร้อมรองรับ:
+
+- **สีฐานสิบหก**: `"#ffffff"`
+- **ANSI สี**: `3` (0-255)
+- **การอ้างอิงสี**: `"primary"` หรือคำจำกัดความที่กำหนดเอง
+- **Dark/light ตัวแปร**: `{"dark": "#000", "light": "#fff"}`
+- **ไม่มีสี**: `"none"` - ​​ใช้สีเริ่มต้นของเทอร์มินัลหรือโปร่งใส
+
+---
+
+### คำจำกัดความของสี
+
+ส่วน `defs` เป็นทางเลือก และอนุญาตให้คุณกำหนดสีที่ใช้ซ้ำได้ซึ่งสามารถอ้างอิงในธีมได้
+
+---
+
+### ค่าเริ่มต้นของเทอร์มินัล
+
+ค่าพิเศษ `"none"` สามารถใช้กับสีใดก็ได้เพื่อสืบทอดสีเริ่มต้นของเทอร์มินัล สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการสร้างธีมที่ผสมผสานอย่างลงตัวกับโทนสีของเทอร์มินัลของคุณ:
+
+- `"text": "none"` - ​​ใช้สีพื้นหน้าเริ่มต้นของเทอร์มินัล
+- `"background": "none"` - ​​ใช้สีพื้นหลังเริ่มต้นของเทอร์มินัล
+
+---
+
+### ตัวอย่าง
+
+นี่คือตัวอย่างของธีมที่กำหนดเอง:
+
+```json title="my-theme.json"
+{
+ "$schema": "https://opencode.ai/theme.json",
+ "defs": {
+ "nord0": "#2E3440",
+ "nord1": "#3B4252",
+ "nord2": "#434C5E",
+ "nord3": "#4C566A",
+ "nord4": "#D8DEE9",
+ "nord5": "#E5E9F0",
+ "nord6": "#ECEFF4",
+ "nord7": "#8FBCBB",
+ "nord8": "#88C0D0",
+ "nord9": "#81A1C1",
+ "nord10": "#5E81AC",
+ "nord11": "#BF616A",
+ "nord12": "#D08770",
+ "nord13": "#EBCB8B",
+ "nord14": "#A3BE8C",
+ "nord15": "#B48EAD"
+ },
+ "theme": {
+ "primary": {
+ "dark": "nord8",
+ "light": "nord10"
+ },
+ "secondary": {
+ "dark": "nord9",
+ "light": "nord9"
+ },
+ "accent": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "error": {
+ "dark": "nord11",
+ "light": "nord11"
+ },
+ "warning": {
+ "dark": "nord12",
+ "light": "nord12"
+ },
+ "success": {
+ "dark": "nord14",
+ "light": "nord14"
+ },
+ "info": {
+ "dark": "nord8",
+ "light": "nord10"
+ },
+ "text": {
+ "dark": "nord4",
+ "light": "nord0"
+ },
+ "textMuted": {
+ "dark": "nord3",
+ "light": "nord1"
+ },
+ "background": {
+ "dark": "nord0",
+ "light": "nord6"
+ },
+ "backgroundPanel": {
+ "dark": "nord1",
+ "light": "nord5"
+ },
+ "backgroundElement": {
+ "dark": "nord1",
+ "light": "nord4"
+ },
+ "border": {
+ "dark": "nord2",
+ "light": "nord3"
+ },
+ "borderActive": {
+ "dark": "nord3",
+ "light": "nord2"
+ },
+ "borderSubtle": {
+ "dark": "nord2",
+ "light": "nord3"
+ },
+ "diffAdded": {
+ "dark": "nord14",
+ "light": "nord14"
+ },
+ "diffRemoved": {
+ "dark": "nord11",
+ "light": "nord11"
+ },
+ "diffContext": {
+ "dark": "nord3",
+ "light": "nord3"
+ },
+ "diffHunkHeader": {
+ "dark": "nord3",
+ "light": "nord3"
+ },
+ "diffHighlightAdded": {
+ "dark": "nord14",
+ "light": "nord14"
+ },
+ "diffHighlightRemoved": {
+ "dark": "nord11",
+ "light": "nord11"
+ },
+ "diffAddedBg": {
+ "dark": "#3B4252",
+ "light": "#E5E9F0"
+ },
+ "diffRemovedBg": {
+ "dark": "#3B4252",
+ "light": "#E5E9F0"
+ },
+ "diffContextBg": {
+ "dark": "nord1",
+ "light": "nord5"
+ },
+ "diffLineNumber": {
+ "dark": "nord2",
+ "light": "nord4"
+ },
+ "diffAddedLineNumberBg": {
+ "dark": "#3B4252",
+ "light": "#E5E9F0"
+ },
+ "diffRemovedLineNumberBg": {
+ "dark": "#3B4252",
+ "light": "#E5E9F0"
+ },
+ "markdownText": {
+ "dark": "nord4",
+ "light": "nord0"
+ },
+ "markdownHeading": {
+ "dark": "nord8",
+ "light": "nord10"
+ },
+ "markdownLink": {
+ "dark": "nord9",
+ "light": "nord9"
+ },
+ "markdownLinkText": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "markdownCode": {
+ "dark": "nord14",
+ "light": "nord14"
+ },
+ "markdownBlockQuote": {
+ "dark": "nord3",
+ "light": "nord3"
+ },
+ "markdownEmph": {
+ "dark": "nord12",
+ "light": "nord12"
+ },
+ "markdownStrong": {
+ "dark": "nord13",
+ "light": "nord13"
+ },
+ "markdownHorizontalRule": {
+ "dark": "nord3",
+ "light": "nord3"
+ },
+ "markdownListItem": {
+ "dark": "nord8",
+ "light": "nord10"
+ },
+ "markdownListEnumeration": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "markdownImage": {
+ "dark": "nord9",
+ "light": "nord9"
+ },
+ "markdownImageText": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "markdownCodeBlock": {
+ "dark": "nord4",
+ "light": "nord0"
+ },
+ "syntaxComment": {
+ "dark": "nord3",
+ "light": "nord3"
+ },
+ "syntaxKeyword": {
+ "dark": "nord9",
+ "light": "nord9"
+ },
+ "syntaxFunction": {
+ "dark": "nord8",
+ "light": "nord8"
+ },
+ "syntaxVariable": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "syntaxString": {
+ "dark": "nord14",
+ "light": "nord14"
+ },
+ "syntaxNumber": {
+ "dark": "nord15",
+ "light": "nord15"
+ },
+ "syntaxType": {
+ "dark": "nord7",
+ "light": "nord7"
+ },
+ "syntaxOperator": {
+ "dark": "nord9",
+ "light": "nord9"
+ },
+ "syntaxPunctuation": {
+ "dark": "nord4",
+ "light": "nord0"
+ }
+ }
+}
+```
diff --git a/packages/web/src/content/docs/th/tools.mdx b/packages/web/src/content/docs/th/tools.mdx
new file mode 100644
index 000000000..c4e242ab3
--- /dev/null
+++ b/packages/web/src/content/docs/th/tools.mdx
@@ -0,0 +1,379 @@
+---
+title: เครื่องมือ
+description: จัดการเครื่องมือที่ LLM สามารถใช้ได้
+---
+
+เครื่องมืออนุญาตให้ LLM ดำเนินการในโค้ดเบสของคุณ OpenCode มาพร้อมกับชุดเครื่องมือในตัว แต่คุณสามารถขยายได้ด้วย [เครื่องมือที่กำหนดเอง](/docs/custom-tools) หรือ [MCP เซิร์ฟเวอร์](/docs/mcp-servers)
+
+ตามค่าเริ่มต้น เครื่องมือทั้งหมด **เปิดใช้งาน** และไม่จำเป็นต้องมีสิทธิ์ในการทำงาน คุณสามารถควบคุมการทำงานของเครื่องมือผ่าน [สิทธิ์](/docs/permissions)
+
+---
+
+## กำหนดค่า
+
+ใช้ฟิลด์ `permission` เพื่อควบคุมการทำงานของเครื่องมือ คุณสามารถอนุญาต ปฏิเสธ หรือต้องการการอนุมัติสำหรับเครื่องมือแต่ละรายการได้
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "deny",
+ "bash": "ask",
+ "webfetch": "allow"
+ }
+}
+```
+
+คุณยังสามารถใช้ไวด์การ์ดเพื่อควบคุมเครื่องมือหลายรายการพร้อมกันได้ ตัวอย่างเช่น หากต้องการขออนุมัติเครื่องมือทั้งหมดจากเซิร์ฟเวอร์ MCP:
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "mymcp_*": "ask"
+ }
+}
+```
+
+[เรียนรู้เพิ่มเติม](/docs/permissions) เกี่ยวกับการกำหนดค่าสิทธิ์
+
+---
+
+## บิวท์อิน
+
+นี่คือเครื่องมือในตัวทั้งหมดที่มีอยู่ใน OpenCode
+
+---
+
+### bash
+
+ดำเนินการคำสั่งเชลล์ในสภาพแวดล้อมโปรเจ็กต์ของคุณ
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "bash": "allow"
+ }
+}
+```
+
+เครื่องมือนี้อนุญาตให้ LLM รันคำสั่งเทอร์มินัล เช่น `npm install`, `git status` หรือคำสั่งเชลล์อื่น ๆ
+
+---
+
+### edit
+
+แก้ไขไฟล์ที่มีอยู่โดยใช้การแทนที่สตริงที่แน่นอน
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "allow"
+ }
+}
+```
+
+เครื่องมือนี้ทำการแก้ไขไฟล์อย่างแม่นยำโดยแทนที่ข้อความที่ตรงกันทุกประการ มันเป็นวิธีหลักที่ LLM แก้ไขโค้ด
+
+---
+
+### write
+
+สร้างไฟล์ใหม่หรือเขียนทับไฟล์ที่มีอยู่
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "allow"
+ }
+}
+```
+
+ใช้สิ่งนี้เพื่ออนุญาตให้ LLM สร้างไฟล์ใหม่ มันจะเขียนทับไฟล์ที่มีอยู่หากมีอยู่แล้ว
+
+:::note
+เครื่องมือ `write` ถูกควบคุมโดยสิทธิ์ `edit` ซึ่งครอบคลุมการแก้ไขไฟล์ทั้งหมด (`edit`, `write`, `patch`, `multiedit`)
+:::
+
+---
+
+### read
+
+อ่านเนื้อหาไฟล์จากโค้ดเบสของคุณ
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "read": "allow"
+ }
+}
+```
+
+เครื่องมือนี้จะอ่านไฟล์และส่งกลับเนื้อหา รองรับการอ่านช่วงบรรทัดเฉพาะสำหรับไฟล์ขนาดใหญ่
+
+---
+
+### grep
+
+ค้นหาเนื้อหาไฟล์โดยใช้นิพจน์ทั่วไป
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "grep": "allow"
+ }
+}
+```
+
+ค้นหาเนื้อหาอย่างรวดเร็วทั่วทั้งโค้ดเบสของคุณ รองรับไวยากรณ์ regex เต็มรูปแบบและการกรองรูปแบบไฟล์
+
+---
+
+### glob
+
+ค้นหาไฟล์ตามรูปแบบการจับคู่
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "glob": "allow"
+ }
+}
+```
+
+ค้นหาไฟล์โดยใช้รูปแบบ glob เช่น `**/*.js` หรือ `src/**/*.ts` ส่งคืนเส้นทางไฟล์ที่ตรงกันโดยจัดเรียงตามเวลาแก้ไข
+
+---
+
+### list
+
+แสดงรายการไฟล์และไดเร็กทอรีในพาธที่กำหนด
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "list": "allow"
+ }
+}
+```
+
+เครื่องมือนี้แสดงรายการเนื้อหาไดเร็กทอรี ยอมรับรูปแบบ glob เพื่อกรองผลลัพธ์
+
+---
+
+### lsp (ทดลอง)
+
+โต้ตอบกับเซิร์ฟเวอร์ LSP ที่กำหนดค่าของคุณเพื่อรับฟีเจอร์อัจฉริยะด้านโค้ด เช่น คำจำกัดความ การอ้างอิง ข้อมูลโฮเวอร์ และลำดับชั้นการโทร
+
+:::note
+เครื่องมือนี้ใช้ได้เฉพาะเมื่อ `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (หรือ `OPENCODE_EXPERIMENTAL=true`)
+:::
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "lsp": "allow"
+ }
+}
+```
+
+การดำเนินการที่รองรับ ได้แก่ `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` และ `outgoingCalls`
+
+หากต้องการกำหนดค่าเซิร์ฟเวอร์ LSP ที่พร้อมใช้งานสำหรับโครงการของคุณ โปรดดู [LSP เซิร์ฟเวอร์](/docs/lsp)
+
+---
+
+### patch
+
+ใช้แพทช์กับไฟล์
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "edit": "allow"
+ }
+}
+```
+
+เครื่องมือนี้ใช้ไฟล์แพทช์กับโค้ดเบสของคุณ มีประโยชน์สำหรับการใช้ความแตกต่างและแพตช์จากแหล่งต่างๆ
+
+:::note
+เครื่องมือ `patch` ถูกควบคุมโดยสิทธิ์ `edit` ซึ่งครอบคลุมการแก้ไขไฟล์ทั้งหมด (`edit`, `write`, `patch`, `multiedit`)
+:::
+
+---
+
+### skill
+
+โหลด [ทักษะ](/docs/skills) (ไฟล์ `SKILL.md`) และส่งคืนเนื้อหาในการสนทนา
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "skill": "allow"
+ }
+}
+```
+
+---
+
+### todowrite
+
+จัดการรายการสิ่งที่ต้องทำระหว่างเซสชันการเขียนโค้ด
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "todowrite": "allow"
+ }
+}
+```
+
+สร้างและอัปเดตรายการงานเพื่อติดตามความคืบหน้าระหว่างการดำเนินการที่ซับซ้อน LLM ใช้สิ่งนี้เพื่อจัดระเบียบงานที่มีหลายขั้นตอน
+
+:::note
+เครื่องมือนี้ปิดใช้งานสำหรับตัวแทนย่อยตามค่าเริ่มต้น แต่คุณสามารถเปิดใช้งานได้ด้วยตนเอง [เรียนรู้เพิ่มเติม](/docs/agents/#สิทธิ์)
+:::
+
+---
+
+### todoread
+
+อ่านรายการสิ่งที่ต้องทำที่มีอยู่
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "todoread": "allow"
+ }
+}
+```
+
+อ่านสถานะรายการสิ่งที่ต้องทำปัจจุบัน ใช้โดย LLM เพื่อติดตามงานที่กำลังรอดำเนินการหรือเสร็จสิ้น
+
+:::note
+เครื่องมือนี้ปิดใช้งานสำหรับตัวแทนย่อยตามค่าเริ่มต้น แต่คุณสามารถเปิดใช้งานได้ด้วยตนเอง [เรียนรู้เพิ่มเติม](/docs/agents/#สิทธิ์)
+:::
+
+---
+
+### webfetch
+
+ดึงเนื้อหาเว็บ
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "webfetch": "allow"
+ }
+}
+```
+
+อนุญาตให้ LLM ดึงข้อมูลและอ่านหน้าเว็บ มีประโยชน์สำหรับการค้นหาเอกสารหรือค้นคว้าแหล่งข้อมูลออนไลน์
+
+---
+
+### websearch
+
+ค้นหาข้อมูลในเว็บ
+
+:::note
+เครื่องมือนี้ใช้ได้เฉพาะเมื่อใช้ผู้ให้บริการ OpenCode หรือเมื่อตัวแปรสภาพแวดล้อม `OPENCODE_ENABLE_EXA` ถูกตั้งค่าเป็นค่าความจริง (เช่น `true` หรือ `1`)
+
+หากต้องการเปิดใช้งานเมื่อเปิดตัว OpenCode:
+
+```bash
+OPENCODE_ENABLE_EXA=1 opencode
+```
+
+:::
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "websearch": "allow"
+ }
+}
+```
+
+ทำการค้นหาเว็บโดยใช้ Exa AI เพื่อค้นหาข้อมูลที่เกี่ยวข้องทางออนไลน์ มีประโยชน์สำหรับการค้นคว้าหัวข้อ ค้นหาเหตุการณ์ปัจจุบัน หรือการรวบรวมข้อมูลนอกเหนือจากการตัดข้อมูลการฝึกอบรม
+
+ไม่จำเป็นต้องใช้คีย์ API เครื่องมือนี้เชื่อมต่อโดยตรงกับบริการ MCP ที่โฮสต์ของ Exa AI โดยไม่มีการตรวจสอบสิทธิ์
+
+:::tip
+ใช้ `websearch` เมื่อคุณต้องการค้นหาข้อมูล (การค้นพบ) และใช้ `webfetch` เมื่อคุณต้องการดึงเนื้อหาจาก URL เฉพาะ (การดึงข้อมูล)
+:::
+
+---
+
+### question
+
+ถามคำถามผู้ใช้ระหว่างการดำเนินการ
+
+```json title="opencode.json" {4}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "permission": {
+ "question": "allow"
+ }
+}
+```
+
+เครื่องมือนี้อนุญาตให้ LLM ถามคำถามผู้ใช้ระหว่างทำงาน มันมีประโยชน์สำหรับ:
+
+- การรวบรวมความชอบหรือความต้องการของผู้ใช้
+- ชี้แจงคำแนะนำที่ไม่ชัดเจน
+- การตัดสินใจเกี่ยวกับทางเลือกในการดำเนินการ
+- เสนอทางเลือกว่าจะไปในทิศทางใด
+
+คำถามแต่ละข้อประกอบด้วยส่วนหัว ข้อความคำถาม และรายการตัวเลือก ผู้ใช้สามารถเลือกจากตัวเลือกที่มีให้หรือพิมพ์คำตอบที่กำหนดเองได้ เมื่อมีคำถามหลายข้อ ผู้ใช้สามารถสลับไปมาระหว่างคำถามเหล่านั้นก่อนที่จะส่งคำตอบทั้งหมด
+
+---
+
+## เครื่องมือที่กำหนดเอง
+
+เครื่องมือแบบกำหนดเองช่วยให้คุณสามารถกำหนดฟังก์ชันของคุณเองที่ LLM สามารถเรียกได้ สิ่งเหล่านี้ถูกกำหนดไว้ในไฟล์ปรับแต่งของคุณและสามารถรันโค้ดได้ตามใจชอบ
+
+[เรียนรู้เพิ่มเติม](/docs/custom-tools) เกี่ยวกับการสร้างเครื่องมือที่กำหนดเอง
+
+---
+
+## MCP เซิร์ฟเวอร์
+
+เซิร์ฟเวอร์ MCP (Model Context Protocol) ช่วยให้คุณสามารถรวมเครื่องมือและบริการภายนอกได้ ซึ่งรวมถึงการเข้าถึงฐานข้อมูล การบูรณาการ API และบริการของบุคคลที่สาม
+
+[เรียนรู้เพิ่มเติม](/docs/mcp-servers) เกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ MCP
+
+---
+
+## ภายใน
+
+ภายใน เครื่องมือต่างๆ เช่น `grep`, `glob` และ `list` ใช้ [ripgrep](https://github.com/BurntSushi/ripgrep) ภายใต้ประทุน ตามค่าเริ่มต้น ripgrep เคารพรูปแบบ `.gitignore` ซึ่งหมายความว่าไฟล์และไดเร็กทอรีที่อยู่ใน `.gitignore` ของคุณจะถูกแยกออกจากการค้นหาและรายการ
+
+---
+
+### ละเว้นรูปแบบ
+
+หากต้องการรวมไฟล์ที่ปกติจะถูกละเว้น ให้สร้างไฟล์ `.ignore` ในรูทโปรเจ็กต์ของคุณ ไฟล์นี้สามารถอนุญาตเส้นทางบางอย่างได้อย่างชัดเจน
+
+```text title=".ignore"
+!node_modules/
+!dist/
+!build/
+```
+
+ตัวอย่างเช่น ไฟล์ `.ignore` นี้อนุญาตให้ ripgrep ค้นหาภายในไดเร็กทอรี `node_modules/`, `dist/` และ `build/` แม้ว่าไดเร็กทอรีเหล่านั้นจะแสดงอยู่ใน `.gitignore` ก็ตาม
diff --git a/packages/web/src/content/docs/th/troubleshooting.mdx b/packages/web/src/content/docs/th/troubleshooting.mdx
new file mode 100644
index 000000000..c527bd77f
--- /dev/null
+++ b/packages/web/src/content/docs/th/troubleshooting.mdx
@@ -0,0 +1,300 @@
+---
+title: การแก้ไขปัญหา
+description: ปัญหาทั่วไปและวิธีแก้ปัญหา
+---
+
+หากต้องการแก้ไขข้อบกพร่องเกี่ยวกับ OpenCode ให้เริ่มต้นด้วยการตรวจสอบบันทึกและข้อมูลในเครื่องที่จัดเก็บไว้ในดิสก์
+
+---
+
+## บันทึก
+
+ไฟล์บันทึกถูกเขียนไปที่:
+
+- **macOS/Linux**: `~/.local/share/opencode/log/`
+- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.local\share\opencode\log`
+
+ไฟล์บันทึกจะถูกตั้งชื่อด้วยการประทับเวลา (เช่น `2025-01-09T123456.log`) และไฟล์บันทึกล่าสุด 10 ไฟล์จะถูกเก็บไว้
+
+คุณสามารถตั้งค่าระดับการบันทึกด้วยตัวเลือกบรรทัดคำสั่ง `--log-level` เพื่อรับข้อมูลการแก้ไขข้อบกพร่องโดยละเอียดเพิ่มเติม ตัวอย่างเช่น `opencode --log-level DEBUG`
+
+---
+
+## พื้นที่จัดเก็บ
+
+opencode เก็บข้อมูลเซสชันและข้อมูลแอปพลิเคชันอื่น ๆ ไว้บนดิสก์ที่:
+
+- **macOS/Linux**: `~/.local/share/opencode/`
+- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.local\share\opencode`
+
+ไดเรกทอรีนี้ประกอบด้วย:
+
+- `auth.json` - ​​ข้อมูลการตรวจสอบสิทธิ์ เช่น คีย์ API, โทเค็น OAuth
+- `log/` - ​​บันทึกแอปพลิเคชัน
+- `project/` - ​​ข้อมูลเฉพาะโครงการ เช่น ข้อมูลเซสชันและข้อความ
+ - หากโปรเจ็กต์อยู่ภายใน repo Git มันจะถูกจัดเก็บไว้ใน `./<project-slug>/storage/`
+ - หากไม่ใช่ repo Git มันจะถูกเก็บไว้ใน `./global/storage/`
+
+---
+
+## แอปเดสก์ท็อป
+
+OpenCode Desktop รันเซิร์ฟเวอร์ OpenCode ในเครื่อง (ไฟล์ `opencode-cli` sidecar) ในเบื้องหลัง ปัญหาส่วนใหญ่มีสาเหตุมาจากปลั๊กอินที่ทำงานผิดปกติ แคชเสียหาย หรือการตั้งค่าเซิร์ฟเวอร์ไม่ถูกต้อง
+
+### การตรวจสอบอย่างรวดเร็ว
+
+- ออกจากระบบโดยสมบูรณ์แล้วเปิดแอปใหม่อีกครั้ง
+- หากแอปแสดงหน้าจอข้อผิดพลาด ให้คลิก **รีสตาร์ท** และคัดลอกรายละเอียดข้อผิดพลาด
+- macOS เท่านั้น: เมนู `OpenCode` -> **โหลด Webview ใหม่** (ช่วยได้หาก UI ว่างเปล่า/frozen)
+
+---
+
+### ปิดการใช้งานปลั๊กอิน
+
+หากแอปเดสก์ท็อปขัดข้องเมื่อเปิดใช้งาน หยุดทำงาน หรือทำงานผิดปกติ ให้เริ่มต้นด้วยการปิดใช้งานปลั๊กอิน
+
+#### ตรวจสอบการกำหนดค่าส่วนกลาง
+
+เปิดไฟล์กำหนดค่าส่วนกลางของคุณแล้วมองหาคีย์ `plugin`
+
+- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (หรือ `~/.config/opencode/opencode.json`)
+- **macOS/Linux** (การติดตั้งเก่ากว่า): `~/.local/share/opencode/opencode.jsonc`
+- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.config\opencode\opencode.jsonc`
+
+หากคุณได้กำหนดค่าปลั๊กอินไว้ ให้ปิดการใช้งานชั่วคราวโดยลบคีย์ออกหรือตั้งค่าเป็นอาร์เรย์ว่าง:
+
+```jsonc
+{
+ "$schema": "https://opencode.ai/config.json",
+ "plugin": [],
+}
+```
+
+#### ตรวจสอบไดเร็กทอรีปลั๊กอิน
+
+OpenCode ยังสามารถโหลดปลั๊กอินในเครื่องจากดิสก์ได้ ย้ายสิ่งเหล่านี้ออกไปชั่วคราว (หรือเปลี่ยนชื่อโฟลเดอร์) และรีสตาร์ทแอปเดสก์ท็อป:
+
+- **ปลั๊กอินสากล**
+ - **macOS/Linux**: `~/.config/opencode/plugins/`
+ - **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.config\opencode\plugins`
+- **ปลั๊กอินโครงการ** (เฉพาะในกรณีที่คุณใช้การกำหนดค่าต่อโครงการ)
+ - `<your-project>/.opencode/plugins/`
+
+หากแอปเริ่มทำงานอีกครั้ง ให้เปิดใช้งานปลั๊กอินอีกครั้งทีละรายการเพื่อดูว่าปลั๊กอินใดเป็นสาเหตุของปัญหา
+
+---
+
+### ล้างแคช
+
+หากการปิดใช้งานปลั๊กอินไม่ได้ผล (หรือการติดตั้งปลั๊กอินค้าง) ให้ล้างแคชเพื่อให้ OpenCode สามารถสร้างใหม่ได้
+
+1. ออกจาก OpenCode Desktop โดยสมบูรณ์
+2. ลบไดเรกทอรีแคช:
+
+- **macOS**: ตัวค้นหา -> `Cmd+Shift+G` -> วาง `~/.cache/opencode`
+- **Linux**: ลบ `~/.cache/opencode` (หรือรัน `rm -rf ~/.cache/opencode`)
+- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.cache\opencode`
+
+3. รีสตาร์ทเดสก์ท็อป OpenCode
+
+---
+
+### Fix server connection issues
+
+OpenCode Desktop สามารถเริ่มต้นเซิร์ฟเวอร์ภายในเครื่องของตนเองได้ (ค่าเริ่มต้น) หรือเชื่อมต่อกับเซิร์ฟเวอร์ URL ที่คุณกำหนดค่าไว้
+
+หากคุณเห็นกล่องโต้ตอบ **"การเชื่อมต่อล้มเหลว"** (หรือแอปไม่เคยผ่านหน้าจอเริ่มต้น) ให้ตรวจสอบเซิร์ฟเวอร์ที่กำหนดเอง URL
+
+#### ล้างเซิร์ฟเวอร์เริ่มต้นของเดสก์ท็อป URL
+
+จากหน้าจอหลัก คลิกชื่อเซิร์ฟเวอร์ (ที่มีจุดสถานะ) เพื่อเปิดตัวเลือกเซิร์ฟเวอร์ ในส่วน **เซิร์ฟเวอร์เริ่มต้น** คลิก **ล้าง**
+
+#### ลบ `server.port` / `server.hostname` ออกจากการกำหนดค่าของคุณ
+
+หาก `opencode.json(c)` ของคุณมีส่วน `server` ให้ลบออกชั่วคราวแล้วรีสตาร์ทแอปเดสก์ท็อป
+
+#### ตรวจสอบตัวแปรสภาพแวดล้อม
+
+หากคุณตั้งค่า `OPENCODE_PORT` ในสภาพแวดล้อมของคุณ แอปเดสก์ท็อปจะพยายามใช้พอร์ตนั้นสำหรับเซิร์ฟเวอร์ภายในเครื่อง
+
+- ยกเลิกการตั้งค่า `OPENCODE_PORT` (หรือเลือกพอร์ตว่าง) แล้วรีสตาร์ท
+
+---
+
+### Linux: ปัญหา Wayland / X11
+
+บน Linux การตั้งค่า Wayland บางอย่างอาจทำให้เกิดหน้าต่างว่างหรือข้อผิดพลาดของตัวประกอบ
+
+- หากคุณอยู่บน Wayland และแอปว่างเปล่า/crashing ให้ลองเปิดใช้งานด้วย `OC_ALLOW_WAYLAND=1`
+- หากสิ่งนั้นทำให้สิ่งต่าง ๆ แย่ลง ให้ลบออกแล้วลองเปิดใช้งานภายใต้เซสชัน X11 แทน
+
+---
+
+### Windows: รันไทม์ WebView2
+
+บน Windows OpenCode Desktop ต้องใช้ Microsoft Edge **WebView2 Runtime** หากแอปเปิดเป็นหน้าต่างว่างหรือไม่เริ่มทำงาน ให้ติดตั้ง/update WebView2 แล้วลองอีกครั้ง
+
+---
+
+### Windows: ปัญหาด้านประสิทธิภาพทั่วไป
+
+หากคุณประสบปัญหาประสิทธิภาพการทำงานช้า ปัญหาการเข้าถึงไฟล์ หรือปัญหาเทอร์มินัลบน Windows ให้ลองใช้ [WSL (ระบบย่อย Windows สำหรับ Linux)](/docs/windows-wsl) WSL มอบสภาพแวดล้อม Linux ที่ทำงานร่วมกับคุณสมบัติของ OpenCode ได้อย่างราบรื่นยิ่งขึ้น
+
+---
+
+### การแจ้งเตือนไม่แสดง
+
+OpenCode Desktop จะแสดงการแจ้งเตือนของระบบเฉพาะเมื่อ:
+
+- การแจ้งเตือนเปิดใช้งานสำหรับ OpenCode ในการตั้งค่าระบบปฏิบัติการของคุณและ
+- หน้าต่างแอพไม่ได้โฟกัส
+
+---
+
+### รีเซ็ตที่เก็บข้อมูลแอปเดสก์ท็อป (วิธีสุดท้าย)
+
+หากแอปไม่เริ่มทำงานและคุณไม่สามารถล้างการตั้งค่าจากภายใน UI ได้ ให้รีเซ็ตสถานะที่บันทึกไว้ของแอปเดสก์ท็อป
+
+1. ออกจากเดสก์ท็อป OpenCode
+2. ค้นหาและลบไฟล์เหล่านี้ (อยู่ในไดเร็กทอรีข้อมูลแอป OpenCode Desktop):
+
+- `opencode.settings.dat` (เซิร์ฟเวอร์เริ่มต้นของเดสก์ท็อป URL)
+- `opencode.global.dat` และ `opencode.workspace.*.dat` (สถานะ UI เช่น เซิร์ฟเวอร์ล่าสุด/projects)
+
+หากต้องการค้นหาไดเร็กทอรีอย่างรวดเร็ว:
+
+- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (จากนั้นค้นหาชื่อไฟล์ด้านบน)
+- **Linux**: ค้นหาภายใต้ `~/.local/share` สำหรับชื่อไฟล์ด้านบน
+- **Windows**: กด `WIN+R` -> `%APPDATA%` (จากนั้นค้นหาชื่อไฟล์ด้านบน)
+
+---
+
+## การขอความช่วยเหลือ
+
+หากคุณประสบปัญหากับ OpenCode:
+
+1. **รายงานปัญหาเกี่ยวกับ GitHub**
+
+ วิธีที่ดีที่สุดในการรายงานจุดบกพร่องหรือขอคุณสมบัติคือผ่านพื้นที่เก็บข้อมูล GitHub ของเรา:
+
+ [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
+
+ ก่อนที่จะสร้างปัญหาใหม่ ให้ค้นหาปัญหาที่มีอยู่เพื่อดูว่าปัญหาของคุณได้รับการรายงานแล้วหรือไม่
+
+2. **เข้าร่วม Discord ของเรา**
+
+ สำหรับความช่วยเหลือแบบเรียลไทม์และการสนทนาในชุมชน เข้าร่วมเซิร์ฟเวอร์ Discord ของเรา:
+
+ [**opencode.ai/discord**](https://opencode.ai/discord)
+
+---
+
+## ปัญหาทั่วไป
+
+ต่อไปนี้เป็นปัญหาทั่วไปบางประการและวิธีแก้ปัญหา
+
+---
+
+### OpenCode จะไม่เริ่มทำงาน
+
+1. ตรวจสอบบันทึกเพื่อดูข้อความแสดงข้อผิดพลาด
+2. ลองรันด้วย `--print-logs` เพื่อดูเอาต์พุตในเทอร์มินัล
+3. ตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดด้วย `opencode upgrade`
+
+---
+
+### ปัญหาการรับรองความถูกต้อง
+
+1. ลองตรวจสอบความถูกต้องอีกครั้งด้วยคำสั่ง `/connect` ใน TUI
+2. ตรวจสอบว่าคีย์ API ของคุณถูกต้อง
+3. ตรวจสอบให้แน่ใจว่าเครือข่ายของคุณอนุญาตการเชื่อมต่อกับ API ของผู้ให้บริการ
+
+---
+
+### ไม่มีรุ่น
+
+1. ตรวจสอบว่าคุณได้รับการรับรองความถูกต้องกับผู้ให้บริการแล้ว
+2. ตรวจสอบชื่อรุ่นในการกำหนดค่าของคุณถูกต้อง
+3. บางรุ่นอาจต้องมีการเข้าถึงหรือสมัครสมาชิกโดยเฉพาะ
+
+หากคุณพบ `ProviderModelNotFoundError` เป็นไปได้มากว่าคุณจะคิดผิด
+อ้างอิงแบบจำลองที่ไหนสักแห่ง
+ควรอ้างอิงโมเดลดังนี้: `<providerId>/<modelId>`
+
+ตัวอย่าง:
+
+- `openai/gpt-4.1`
+- `openrouter/google/gemini-2.5-flash`
+- `opencode/kimi-k2`
+
+หากต้องการทราบว่าคุณมีสิทธิ์เข้าถึงรุ่นใด ให้เรียกใช้ `opencode models`
+
+---
+
+### ผู้ให้บริการInitError
+
+หากคุณพบ ProviderInitError คุณอาจมีการกำหนดค่าที่ไม่ถูกต้องหรือเสียหาย
+
+เพื่อแก้ไขปัญหานี้:
+
+1. ขั้นแรก ตรวจสอบให้แน่ใจว่าผู้ให้บริการของคุณตั้งค่าอย่างถูกต้องโดยทำตาม [คู่มือผู้ให้บริการ](/docs/providers)
+2. หากปัญหายังคงอยู่ ให้ลองล้างการกำหนดค่าที่เก็บไว้:
+
+ ```bash
+ rm -rf ~/.local/share/opencode
+ ```
+
+ บน Windows กด `WIN+R` และลบ: `%USERPROFILE%\.local\share\opencode`
+
+3. ตรวจสอบความถูกต้องอีกครั้งกับผู้ให้บริการของคุณโดยใช้คำสั่ง `/connect` ใน TUI
+
+---
+
+### ปัญหา AI_APICallError และแพ็คเกจผู้ให้บริการ
+
+หากคุณพบข้อผิดพลาดในการโทร API อาจเนื่องมาจากแพ็คเกจผู้ให้บริการที่ล้าสมัย opencode จะติดตั้งแพ็คเกจของผู้ให้บริการแบบไดนามิก (OpenAI, Anthropic, Google ฯลฯ) ตามความจำเป็น และแคชไว้ในเครื่อง
+
+ในการแก้ไขปัญหาแพ็คเกจผู้ให้บริการ:
+
+1. ล้างแคชแพ็คเกจผู้ให้บริการ:
+
+ ```bash
+ rm -rf ~/.cache/opencode
+ ```
+
+ บน Windows กด `WIN+R` และลบ: `%USERPROFILE%\.cache\opencode`
+
+2. รีสตาร์ท opencode เพื่อติดตั้งแพ็คเกจผู้ให้บริการล่าสุดอีกครั้ง
+
+การดำเนินการนี้จะบังคับให้ opencode ดาวน์โหลดแพ็คเกจผู้ให้บริการเวอร์ชันล่าสุด ซึ่งมักจะแก้ไขปัญหาความเข้ากันได้กับพารามิเตอร์โมเดลและการเปลี่ยนแปลง API
+
+---
+
+### Copy/paste ไม่ทำงานบน Linux
+
+ผู้ใช้ Linux จำเป็นต้องติดตั้งยูทิลิตี้คลิปบอร์ดตัวใดตัวหนึ่งต่อไปนี้เพื่อให้ฟังก์ชัน copy/paste ทำงาน:
+
+**สำหรับระบบ X11:**
+
+```bash
+apt install -y xclip
+# or
+apt install -y xsel
+```
+
+**สำหรับระบบ Wayland:**
+
+```bash
+apt install -y wl-clipboard
+```
+
+**สำหรับสภาพแวดล้อมที่ไม่มีหัว:**
+
+```bash
+apt install -y xvfb
+# and run:
+Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+export DISPLAY=:99.0
+```
+
+opencode จะตรวจพบว่าคุณใช้ Wayland และชอบ `wl-clipboard` หรือไม่เช่นนั้นจะพยายามค้นหาเครื่องมือคลิปบอร์ดตามลำดับ: `xclip` และ `xsel`
diff --git a/packages/web/src/content/docs/th/tui.mdx b/packages/web/src/content/docs/th/tui.mdx
new file mode 100644
index 000000000..c24bf6ca6
--- /dev/null
+++ b/packages/web/src/content/docs/th/tui.mdx
@@ -0,0 +1,390 @@
+---
+title: TUI
+description: การใช้อินเทอร์เฟซผู้ใช้เทอร์มินัล OpenCode
+---
+
+import { Tabs, TabItem } from "@astrojs/starlight/components"
+
+OpenCode มีอินเทอร์เฟซเทอร์มินัลแบบโต้ตอบหรือ TUI สำหรับการทำงานในโครงการของคุณด้วย LLM
+
+การรัน OpenCode จะเริ่มต้น TUI สำหรับไดเร็กทอรีปัจจุบัน
+
+```bash
+opencode
+```
+
+หรือคุณสามารถเริ่มต้นสำหรับไดเร็กทอรีการทำงานเฉพาะได้
+
+```bash
+opencode /path/to/project
+```
+
+เมื่อคุณอยู่ใน TUI แล้ว คุณสามารถแจ้งด้วยข้อความได้
+
+```text
+Give me a quick summary of the codebase.
+```
+
+---
+
+## การอ้างอิงไฟล์
+
+คุณสามารถอ้างอิงไฟล์ในข้อความของคุณโดยใช้ `@` นี่เป็นการค้นหาไฟล์ที่ไม่ชัดเจนในไดเร็กทอรีการทำงานปัจจุบัน
+
+:::tip
+คุณยังสามารถใช้ `@` เพื่ออ้างอิงไฟล์ในข้อความของคุณได้
+:::
+
+```text "@packages/functions/src/api/index.ts"
+How is auth handled in @packages/functions/src/api/index.ts?
+```
+
+เนื้อหาของไฟล์จะถูกเพิ่มในการสนทนาโดยอัตโนมัติ
+
+---
+
+## คำสั่งทุบตี
+
+เริ่มข้อความด้วย `!` เพื่อรันคำสั่งเชลล์
+
+```bash frame="none"
+!ls -la
+```
+
+ผลลัพธ์ของคำสั่งจะถูกเพิ่มเข้าไปในการสนทนาซึ่งเป็นผลลัพธ์ของเครื่องมือ
+
+---
+
+## คำสั่ง
+
+เมื่อใช้ OpenCode TUI คุณสามารถพิมพ์ `/` ตามด้วยชื่อคำสั่งเพื่อดำเนินการอย่างรวดเร็ว ตัวอย่างเช่น:
+
+```bash frame="none"
+/help
+```
+
+คำสั่งส่วนใหญ่ยังมีการผูกคีย์โดยใช้ `ctrl+x` เป็นคีย์ผู้นำ โดยที่ `ctrl+x` เป็นคีย์ผู้นำเริ่มต้น [เรียนรู้เพิ่มเติม](/docs/keybinds)
+
+นี่คือคำสั่งสแลชที่ใช้ได้ทั้งหมด:
+
+---
+
+### connect
+
+เพิ่มผู้ให้บริการให้กับ OpenCode ให้คุณเลือกจากผู้ให้บริการที่มีอยู่และเพิ่มคีย์ API
+
+```bash frame="none"
+/connect
+```
+
+---
+
+### compact
+
+กระชับเซสชันปัจจุบัน _นามแฝง_: `/summarize`
+
+```bash frame="none"
+/compact
+```
+
+**ผูกปุ่ม:** `ctrl+x c`
+
+---
+
+### details
+
+สลับรายละเอียดการดำเนินการของเครื่องมือ
+
+```bash frame="none"
+/details
+```
+
+**ผูกปุ่ม:** `ctrl+x d`
+
+---
+
+### editor
+
+เปิดตัวแก้ไขภายนอกเพื่อเขียนข้อความ ใช้ตัวแก้ไขที่ตั้งค่าไว้ในตัวแปรสภาพแวดล้อม `EDITOR` ของคุณ [เรียนรู้เพิ่มเติม](#editor-setup)
+
+```bash frame="none"
+/editor
+```
+
+**ผูกปุ่ม:** `ctrl+x e`
+
+---
+
+### exit
+
+ออกจาก OpenCode _นามแฝง_: `/quit`, `/q`
+
+```bash frame="none"
+/exit
+```
+
+**ผูกปุ่ม:** `ctrl+x q`
+
+---
+
+### export
+
+ส่งออกการสนทนาปัจจุบันไปยัง Markdown และเปิดในตัวแก้ไขเริ่มต้นของคุณ ใช้ตัวแก้ไขที่ตั้งค่าไว้ในตัวแปรสภาพแวดล้อม `EDITOR` ของคุณ [เรียนรู้เพิ่มเติม](#editor-setup)
+
+```bash frame="none"
+/export
+```
+
+**ผูกปุ่ม:** `ctrl+x x`
+
+---
+
+### help
+
+แสดงกล่องโต้ตอบความช่วยเหลือ
+
+```bash frame="none"
+/help
+```
+
+**ผูกปุ่ม:** `ctrl+x h`
+
+---
+
+### init
+
+สร้างหรืออัปเดตไฟล์ `AGENTS.md` [เรียนรู้เพิ่มเติม](/docs/rules)
+
+```bash frame="none"
+/init
+```
+
+**ผูกปุ่ม:** `ctrl+x i`
+
+---
+
+### models
+
+รายการรุ่นที่มีจำหน่าย
+
+```bash frame="none"
+/models
+```
+
+**ผูกปุ่ม:** `ctrl+x m`
+
+---
+
+### new
+
+เริ่มเซสชันใหม่ _นามแฝง_: `/clear`
+
+```bash frame="none"
+/new
+```
+
+**ผูกปุ่ม:** `ctrl+x n`
+
+---
+
+### redo
+
+ทำซ้ำข้อความที่เลิกทำก่อนหน้านี้ ใช้ได้หลังจากใช้ `/undo` เท่านั้น
+
+:::tip
+การเปลี่ยนแปลงไฟล์ใดๆ จะถูกกู้คืนด้วย
+:::
+
+ภายในจะใช้ Git เพื่อจัดการการเปลี่ยนแปลงไฟล์ ดังนั้นโครงการของคุณ **จำเป็นต้อง
+เป็นที่เก็บ Git**
+
+```bash frame="none"
+/redo
+```
+
+**ผูกปุ่ม:** `ctrl+x r`
+
+---
+
+### sessions
+
+รายการและสลับระหว่างเซสชัน _นามแฝง_: `/resume`, `/continue`
+
+```bash frame="none"
+/sessions
+```
+
+**ผูกปุ่ม:** `ctrl+x l`
+
+---
+
+### share
+
+แบ่งปันเซสชั่นปัจจุบัน [เรียนรู้เพิ่มเติม](/docs/share)
+
+```bash frame="none"
+/share
+```
+
+**ผูกปุ่ม:** `ctrl+x s`
+
+---
+
+### themes
+
+แสดงรายการธีมที่มีอยู่
+
+```bash frame="none"
+/theme
+```
+
+**ผูกปุ่ม:** `ctrl+x t`
+
+---
+
+### thinking
+
+สลับการเปิดเผยการบล็อก thinking/reasoning ในการสนทนา เมื่อเปิดใช้งาน คุณสามารถดูกระบวนการให้เหตุผลของแบบจำลองสำหรับแบบจำลองที่รองรับการคิดแบบขยาย
+
+:::note
+คำสั่งนี้ควบคุมเฉพาะว่าบล็อกการคิด **แสดง** หรือไม่ โดยไม่ได้เปิดใช้งานหรือปิดใช้งานความสามารถในการให้เหตุผลของโมเดล หากต้องการสลับความสามารถในการให้เหตุผลตามจริง ให้ใช้ `ctrl+t` เพื่อหมุนเวียนไปตามตัวแปรโมเดล
+:::
+
+```bash frame="none"
+/thinking
+```
+
+---
+
+### undo
+
+เลิกทำข้อความสุดท้ายในการสนทนา ลบข้อความผู้ใช้ล่าสุด การตอบกลับที่ตามมาทั้งหมด และการเปลี่ยนแปลงไฟล์ใดๆ
+
+:::tip
+การเปลี่ยนแปลงไฟล์ใดๆ ที่ทำจะถูกคืนค่าด้วย
+:::
+
+ภายในจะใช้ Git เพื่อจัดการการเปลี่ยนแปลงไฟล์ ดังนั้นโครงการของคุณ **จำเป็นต้อง
+เป็นที่เก็บ Git**
+
+```bash frame="none"
+/undo
+```
+
+**ผูกปุ่ม:** `ctrl+x u`
+
+---
+
+### unshare
+
+ยกเลิกการแชร์เซสชันปัจจุบัน [เรียนรู้เพิ่มเติม](/docs/share#un-sharing)
+
+```bash frame="none"
+/unshare
+```
+
+---
+
+## การตั้งค่าตัวแก้ไข
+
+ทั้งคำสั่ง `/editor` และ `/export` ใช้ตัวแก้ไขที่ระบุในตัวแปรสภาพแวดล้อม `EDITOR` ของคุณ
+
+<Tabs>
+ <TabItem label="Linux/macOS">
+ ```bash
+ # Example for nano or vim
+ export EDITOR=nano
+ export EDITOR=vim
+
+ # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
+ # include --wait
+ export EDITOR="code --wait"
+ ```
+
+ หากต้องการทำให้เป็นแบบถาวร ให้เพิ่มสิ่งนี้ลงในโปรไฟล์เชลล์ของคุณ
+ `~/.bashrc`, `~/.zshrc` ฯลฯ
+
+ </TabItem>
+
+ <TabItem label="Windows (CMD)">
+ ```bash
+ set EDITOR=notepad
+
+ # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
+ # include --wait
+ set EDITOR=code --wait
+ ```
+
+ หากต้องการทำให้เป็นแบบถาวร ให้ใช้ **คุณสมบัติของระบบ** > **สภาพแวดล้อม
+ ตัวแปร**.
+
+ </TabItem>
+
+ <TabItem label="Windows (PowerShell)">
+ ```powershell
+ $env:EDITOR = "notepad"
+
+ # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
+ # include --wait
+ $env:EDITOR = "code --wait"
+ ```
+
+ หากต้องการทำให้เป็นแบบถาวร ให้เพิ่มสิ่งนี้ลงในโปรไฟล์ PowerShell ของคุณ
+
+ </TabItem>
+</Tabs>
+
+ตัวเลือกตัวแก้ไขยอดนิยม ได้แก่ :
+
+- `code` - ​​รหัส Visual Studio
+- `cursor` - ​​เคอร์เซอร์
+- `windsurf` - ​​วินด์เซิร์ฟ
+- `nvim` - ​​บรรณาธิการ Neovim
+- `vim` - ​​โปรแกรมแก้ไขเป็นกลุ่ม
+- `nano` - ​​โปรแกรมแก้ไขนาโน
+- `notepad` - ​​สมุดบันทึกของ Windows
+- `subl` - ​​ข้อความประเสริฐ
+
+:::note
+บรรณาธิการบางคนเช่น VS Code จำเป็นต้องเริ่มต้นด้วยแฟล็ก `--wait`
+:::
+
+ผู้แก้ไขบางรายจำเป็นต้องมีอาร์กิวเมนต์บรรทัดคำสั่งเพื่อทำงานในโหมดการบล็อก แฟล็ก `--wait` ทำให้กระบวนการแก้ไขบล็อกจนกว่าจะปิด
+
+---
+
+## กำหนดค่า
+
+คุณสามารถปรับแต่งพฤติกรรม TUI ผ่านไฟล์กำหนดค่า OpenCode ของคุณได้
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "tui": {
+ "scroll_speed": 3,
+ "scroll_acceleration": {
+ "enabled": true
+ }
+ }
+}
+```
+
+### ตัวเลือก
+
+- `scroll_acceleration` - ​​เปิดใช้งานการเร่งความเร็วการเลื่อนแบบ macOS เพื่อการเลื่อนที่ราบรื่นและเป็นธรรมชาติ เมื่อเปิดใช้งาน ความเร็วในการเลื่อนจะเพิ่มขึ้นตามท่าทางการเลื่อนอย่างรวดเร็ว และคงความแม่นยำไว้สำหรับการเคลื่อนไหวที่ช้าลง **การตั้งค่านี้มีความสำคัญมากกว่า `scroll_speed` และแทนที่เมื่อเปิดใช้งาน**
+- `scroll_speed` - ​​ควบคุมความเร็วของการเลื่อน TUI เมื่อใช้คำสั่งการเลื่อน (ขั้นต่ำ: `1`) ค่าเริ่มต้นเป็น `3` **หมายเหตุ: สิ่งนี้จะถูกละเว้นหากตั้งค่า `scroll_acceleration.enabled` เป็น `true`.**
+
+---
+
+## การปรับแต่ง
+
+คุณสามารถปรับแต่งแง่มุมต่างๆ ของมุมมอง TUI ได้โดยใช้ชุดคำสั่ง (`ctrl+x h` หรือ `/help`) การตั้งค่าเหล่านี้ยังคงมีอยู่ตลอดการรีสตาร์ท
+
+---
+
+#### การแสดงชื่อผู้ใช้
+
+สลับว่าจะให้ชื่อผู้ใช้ของคุณปรากฏในข้อความแชทหรือไม่ เข้าถึงสิ่งนี้ผ่าน:
+
+- จานคำสั่ง: ค้นหา "ชื่อผู้ใช้" หรือ "ซ่อนชื่อผู้ใช้"
+- การตั้งค่าจะคงอยู่โดยอัตโนมัติและจะถูกจดจำตลอดเซสชัน TUI
diff --git a/packages/web/src/content/docs/th/web.mdx b/packages/web/src/content/docs/th/web.mdx
new file mode 100644
index 000000000..5aa57b41a
--- /dev/null
+++ b/packages/web/src/content/docs/th/web.mdx
@@ -0,0 +1,142 @@
+---
+title: เว็บ
+description: การใช้ OpenCode ในเบราว์เซอร์ของคุณ
+---
+
+OpenCode สามารถทำงานเป็นเว็บแอปพลิเคชันในเบราว์เซอร์ของคุณได้ โดยมอบประสบการณ์การเขียนโค้ด AI อันทรงพลังแบบเดียวกันโดยไม่ต้องใช้เทอร์มินัล
+
+![เว็บ OpenCode - เซสชันใหม่](../../../assets/web/web-homepage-new-session.png)
+
+## เริ่มต้นใช้งาน
+
+เริ่มเว็บอินเตอร์เฟสด้วยการรัน:
+
+```bash
+opencode web
+```
+
+สิ่งนี้จะเริ่มต้นเซิร์ฟเวอร์ท้องถิ่นบน `127.0.0.1` ด้วยพอร์ตที่มีอยู่แบบสุ่มและเปิด OpenCode โดยอัตโนมัติในเบราว์เซอร์เริ่มต้นของคุณ
+
+:::caution
+หากไม่ได้ตั้งค่า `OPENCODE_SERVER_PASSWORD` เซิร์ฟเวอร์จะไม่ปลอดภัย นี่เป็นเรื่องปกติสำหรับการใช้งานภายในเครื่อง แต่ควรตั้งค่าสำหรับการเข้าถึงเครือข่าย
+:::
+
+:::tip[ผู้ใช้วินโดวส์]
+เพื่อประสบการณ์ที่ดีที่สุด ให้เรียกใช้ `opencode web` จาก [WSL](/docs/windows-wsl) แทนที่จะเป็น PowerShell สิ่งนี้ทำให้มั่นใจได้ถึงการเข้าถึงระบบไฟล์ที่เหมาะสมและการรวมเทอร์มินัล
+:::
+
+---
+
+## การกำหนดค่า
+
+คุณสามารถกำหนดค่าเว็บเซิร์ฟเวอร์ได้โดยใช้แฟล็กบรรทัดคำสั่งหรือใน [ไฟล์กำหนดค่า](/docs/config)
+
+### ท่าเรือ
+
+ตามค่าเริ่มต้น OpenCode จะเลือกพอร์ตที่พร้อมใช้งาน คุณสามารถระบุพอร์ต:
+
+```bash
+opencode web --port 4096
+```
+
+### ชื่อโฮสต์
+
+ตามค่าเริ่มต้น เซิร์ฟเวอร์จะเชื่อมโยงกับ `127.0.0.1` (เฉพาะโลคัลโฮสต์เท่านั้น) หากต้องการให้ OpenCode เข้าถึงได้บนเครือข่ายของคุณ:
+
+```bash
+opencode web --hostname 0.0.0.0
+```
+
+เมื่อใช้ `0.0.0.0` OpenCode จะแสดงทั้งที่อยู่ในท้องถิ่นและเครือข่าย:
+
+```
+ Local access: http://localhost:4096
+ Network access: http://192.168.1.100:4096
+```
+
+### การค้นพบ mDNS
+
+เปิดใช้งาน mDNS เพื่อให้เซิร์ฟเวอร์ของคุณค้นพบได้บนเครือข่ายท้องถิ่น:
+
+```bash
+opencode web --mdns
+```
+
+สิ่งนี้จะตั้งชื่อโฮสต์เป็น `0.0.0.0` โดยอัตโนมัติและโฆษณาเซิร์ฟเวอร์เป็น `opencode.local`
+
+คุณสามารถปรับแต่งชื่อโดเมน mDNS เพื่อเรียกใช้หลายอินสแตนซ์บนเครือข่ายเดียวกันได้:
+
+```bash
+opencode web --mdns --mdns-domain myproject.local
+```
+
+### CORS
+
+หากต้องการอนุญาตโดเมนเพิ่มเติมสำหรับ CORS (มีประโยชน์สำหรับส่วนหน้าที่กำหนดเอง):
+
+```bash
+opencode web --cors https://example.com
+```
+
+### การรับรองความถูกต้อง
+
+เพื่อป้องกันการเข้าถึง ให้ตั้งรหัสผ่านโดยใช้ตัวแปรสภาพแวดล้อม `OPENCODE_SERVER_PASSWORD`:
+
+```bash
+OPENCODE_SERVER_PASSWORD=secret opencode web
+```
+
+ชื่อผู้ใช้มีค่าเริ่มต้นเป็น `opencode` แต่สามารถเปลี่ยนได้ด้วย `OPENCODE_SERVER_USERNAME`
+
+---
+
+## การใช้เว็บอินเตอร์เฟส
+
+เมื่อเริ่มต้นแล้ว เว็บอินเตอร์เฟสจะให้สิทธิ์การเข้าถึงเซสชัน OpenCode ของคุณ
+
+### เซสชัน
+
+ดูและจัดการเซสชันของคุณจากหน้าแรก คุณสามารถดูเซสชันที่ใช้งานอยู่และเริ่มต้นเซสชันใหม่ได้
+
+![OpenCode Web - เซสชันที่ใช้งานอยู่](../../../assets/web/web-homepage-active-session.png)
+
+### สถานะเซิร์ฟเวอร์
+
+คลิก "ดูเซิร์ฟเวอร์" เพื่อดูเซิร์ฟเวอร์ที่เชื่อมต่อและสถานะ
+
+![เว็บ OpenCode - ดูเซิร์ฟเวอร์](../../../assets/web/web-homepage-see-servers.png)
+
+---
+
+## การต่อเทอร์มินัล
+
+คุณสามารถแนบเทอร์มินัล TUI กับเว็บเซิร์ฟเวอร์ที่ทำงานอยู่:
+
+```bash
+# Start the web server
+opencode web --port 4096
+
+# In another terminal, attach the TUI
+opencode attach http://localhost:4096
+```
+
+ซึ่งจะทำให้คุณสามารถใช้ทั้งเว็บอินเทอร์เฟซและเทอร์มินัลพร้อมกัน โดยแชร์เซสชันและสถานะเดียวกัน
+
+---
+
+## ไฟล์กำหนดค่า
+
+คุณยังสามารถกำหนดการตั้งค่าเซิร์ฟเวอร์ในไฟล์กำหนดค่า `opencode.json` ของคุณได้:
+
+```json
+{
+ "server": {
+ "port": 4096,
+ "hostname": "0.0.0.0",
+ "mdns": true,
+ "cors": ["https://example.com"]
+ }
+}
+```
+
+ธงบรรทัดคำสั่งมีความสำคัญเหนือกว่าการตั้งค่าไฟล์กำหนดค่า
diff --git a/packages/web/src/content/docs/th/windows-wsl.mdx b/packages/web/src/content/docs/th/windows-wsl.mdx
new file mode 100644
index 000000000..910de4b7c
--- /dev/null
+++ b/packages/web/src/content/docs/th/windows-wsl.mdx
@@ -0,0 +1,113 @@
+---
+title: Windows (WSL)
+description: ใช้ OpenCode บน Windows ผ่าน WSL ให้ลื่นที่สุด
+---
+
+import { Steps } from "@astrojs/starlight/components"
+
+แม้ว่า OpenCode จะรันบน Windows ได้โดยตรง แต่เราแนะนำให้ใช้ [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) เพื่อประสบการณ์ที่ดีที่สุด WSL ให้สภาพแวดล้อม Linux ที่ทำงานร่วมกับฟีเจอร์ของ OpenCode ได้อย่างราบรื่น
+
+:::tip[ทำไมต้องใช้ WSL?]
+WSL ให้ประสิทธิภาพระบบไฟล์ที่ดีกว่า รองรับเทอร์มินัลได้เต็มรูปแบบ และเข้ากันได้กับเครื่องมือพัฒนาที่ OpenCode ใช้งาน
+:::
+
+---
+
+## การตั้งค่า
+
+<Steps>
+
+1. **ติดตั้ง WSL**
+
+ ถ้ายังไม่ได้ติดตั้ง ให้ทำตามคู่มือทางการของ Microsoft เพื่อ [ติดตั้ง WSL](https://learn.microsoft.com/en-us/windows/wsl/install)
+
+2. **ติดตั้ง OpenCode ใน WSL**
+
+ เมื่อตั้งค่า WSL เสร็จแล้ว ให้เปิดเทอร์มินัล WSL และติดตั้ง OpenCode ด้วย [วิธีติดตั้ง](/docs/) แบบใดแบบหนึ่ง
+
+ ```bash
+ curl -fsSL https://opencode.ai/install | bash
+ ```
+
+3. **ใช้งาน OpenCode จาก WSL**
+
+ ไปที่ไดเรกทอรีโปรเจกต์ของคุณ (เข้าถึงไฟล์ Windows ผ่าน `/mnt/c/`, `/mnt/d/` เป็นต้น) แล้วรัน OpenCode
+
+ ```bash
+ cd /mnt/c/Users/YourName/project
+ opencode
+ ```
+
+</Steps>
+
+---
+
+## เดสก์ท็อปแอป + เซิร์ฟเวอร์บน WSL
+
+ถ้าคุณต้องการใช้ OpenCode Desktop แต่ให้เซิร์ฟเวอร์ทำงานบน WSL:
+
+1. **เริ่มเซิร์ฟเวอร์ใน WSL** โดยใช้ `--hostname 0.0.0.0` เพื่อให้เชื่อมต่อจากภายนอกได้:
+
+ ```bash
+ opencode serve --hostname 0.0.0.0 --port 4096
+ ```
+
+2. **เชื่อมต่อเดสก์ท็อปแอป** ไปที่ `http://localhost:4096`
+
+:::note
+ถ้า `localhost` ใช้งานไม่ได้ในสภาพแวดล้อมของคุณ ให้ใช้ IP ของ WSL แทน (จาก WSL: `hostname -I`) แล้วเชื่อมต่อที่ `http://<wsl-ip>:4096`
+:::
+
+:::caution
+เมื่อใช้ `--hostname 0.0.0.0` ให้ตั้งค่า `OPENCODE_SERVER_PASSWORD` เพื่อป้องกันเซิร์ฟเวอร์
+
+```bash
+OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
+```
+
+:::
+
+---
+
+## เว็บไคลเอนต์ + WSL
+
+เพื่อประสบการณ์เว็บที่ดีที่สุดบน Windows:
+
+1. **รัน `opencode web` ในเทอร์มินัล WSL** แทน PowerShell:
+
+ ```bash
+ opencode web --hostname 0.0.0.0
+ ```
+
+2. **เข้าจากเบราว์เซอร์บน Windows** ที่ `http://localhost:<port>` (OpenCode จะแสดง URL ให้)
+
+การรัน `opencode web` จาก WSL ช่วยให้เข้าถึงระบบไฟล์และใช้งานเทอร์มินัลได้ถูกต้อง พร้อมเปิดใช้งานผ่านเบราว์เซอร์ Windows ได้เหมือนเดิม
+
+---
+
+## การเข้าถึงไฟล์ Windows
+
+WSL สามารถเข้าถึงไฟล์ Windows ทั้งหมดของคุณได้ผ่านไดเรกทอรี `/mnt/`:
+
+- `C:` drive → `/mnt/c/`
+- `D:` drive → `/mnt/d/`
+- ไดรฟ์อื่นก็ใช้รูปแบบเดียวกัน
+
+ตัวอย่าง:
+
+```bash
+cd /mnt/c/Users/YourName/Documents/project
+opencode
+```
+
+:::tip
+เพื่อให้ใช้งานได้ลื่นที่สุด แนะนำให้โคลนหรือคัดลอกรีโปไปไว้ในไฟล์ซิสเต็มของ WSL (เช่น `~/code/`) แล้วรัน OpenCode จากที่นั่น
+:::
+
+---
+
+## เคล็ดลับ
+
+- แม้โปรเจกต์จะอยู่บนไดรฟ์ Windows ก็ควรรัน OpenCode ใน WSL เพื่อการเข้าถึงไฟล์ที่ลื่นกว่า
+- ใช้ OpenCode ควบคู่กับ [WSL extension ของ VS Code](https://code.visualstudio.com/docs/remote/wsl) เพื่อเวิร์กโฟลว์ที่ต่อเนื่อง
+- การตั้งค่าและเซสชันของ OpenCode จะถูกเก็บในสภาพแวดล้อม WSL ที่ `~/.local/share/opencode/`
diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx
new file mode 100644
index 000000000..b0d6f0c35
--- /dev/null
+++ b/packages/web/src/content/docs/th/zen.mdx
@@ -0,0 +1,254 @@
+---
+title: เซน
+description: รายการโมเดลที่คัดสรรโดย OpenCode
+---
+
+import config from "../../../../config.mjs"
+export const console = config.console
+export const email = `mailto:${config.email}`
+
+OpenCode Zen คือรายการโมเดลที่ได้รับการทดสอบและตรวจสอบแล้วโดยทีมงาน OpenCode
+
+:::note
+OpenCode Zen ปัจจุบันอยู่ในช่วงเบต้า
+:::
+
+Zen ทำงานเหมือนกับผู้ให้บริการรายอื่นๆ ใน OpenCode คุณเข้าสู่ระบบ OpenCode Zen และรับ
+รหัส API ของคุณ มันเป็น **ทางเลือกโดยสมบูรณ์** และคุณไม่จำเป็นต้องใช้มันเพื่อใช้งาน
+โอเพ่นโค้ด
+
+---
+
+## พื้นหลัง
+
+มีหลายรุ่นครับ แต่มีเพียงไม่กี่รุ่นเท่านั้น
+โมเดลเหล่านี้ทำงานได้ดีในฐานะตัวแทนการเข้ารหัส นอกจากนี้ผู้ให้บริการส่วนใหญ่ก็มี
+กำหนดค่าแตกต่างกันมาก ดังนั้นคุณจึงได้รับประสิทธิภาพและคุณภาพที่แตกต่างกันมาก
+
+:::tip
+เราได้ทดสอบกลุ่มโมเดลและผู้ให้บริการที่เลือกซึ่งทำงานได้ดีกับ OpenCode
+:::
+
+ดังนั้นหากคุณใช้โมเดลผ่าน OpenRouter คุณจะไม่มีวันเป็นเช่นนั้น
+แน่ใจว่าคุณได้รับรุ่นที่ดีที่สุดของรุ่นที่คุณต้องการหรือไม่
+
+เพื่อแก้ไขปัญหานี้ เราได้ทำสองสิ่ง:
+
+1. เราได้ทดสอบกลุ่มโมเดลที่ได้รับการคัดเลือกและพูดคุยกับทีมของพวกเขาเกี่ยวกับวิธีการ
+ ดีที่สุดเรียกใช้พวกเขา
+2. จากนั้นเราทำงานร่วมกับผู้ให้บริการบางรายเพื่อให้แน่ใจว่าผู้ให้บริการเหล่านี้ได้รับบริการแล้ว
+ อย่างถูกต้อง
+3. ในที่สุด เราก็เปรียบเทียบการรวมกันของ model/provider และได้ผลลัพธ์ออกมา
+ กับรายการที่เรารู้สึกดีมาแนะนำ
+
+OpenCode Zen เป็นเกตเวย์ AI ที่ให้คุณเข้าถึงโมเดลเหล่านี้
+
+---
+
+## มันทำงานอย่างไร
+
+OpenCode Zen ทำงานเหมือนกับผู้ให้บริการรายอื่นๆ ใน OpenCode
+
+1. คุณลงชื่อเข้าใช้ **<a href={console}>OpenCode Zen</a>** เพิ่มการเรียกเก็บเงินของคุณ
+ รายละเอียดและคัดลอกรหัส API ของคุณ
+2. คุณรันคำสั่ง `/connect` ใน TUI เลือก OpenCode Zen และวางคีย์ API ของคุณ
+3. เรียกใช้ `/models` ใน TUI เพื่อดูรายการรุ่นที่เราแนะนำ
+
+คุณจะถูกเรียกเก็บเงินตามคำขอและคุณสามารถเพิ่มเครดิตให้กับบัญชีของคุณได้
+
+---
+
+## จุดสิ้นสุด
+
+คุณยังสามารถเข้าถึงโมเดลของเราผ่านทางจุดสิ้นสุด API ต่อไปนี้
+
+| แบบอย่าง | รหัสรุ่น | จุดสิ้นสุด | แพ็คเกจ AI SDK |
+| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
+| GPT 5.2 | GPT-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5.2 โคเด็กซ์ | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5.1 | GPT-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5.1 โคเด็กซ์ | gpt-5.1-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5.1 โคเด็กซ์สูงสุด | gpt-5.1-codex-สูงสุด | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5.1 โคเด็กซ์มินิ | gpt-5.1-codex-mini.php | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5 | GPT-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5 โคเด็กซ์ | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| GPT 5นาโน | gpt-5-นาโน | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
+| คล็อด ซอนเน็ต 4.5 | คลอด-โคลง-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คลอดด์ ซอนเน็ต 4 | คลอด-โคลง-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คล็อด ไฮกุ 4.5 | คลอดด์-ไฮกุ-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คล็อด ไฮกุ 3.5 | คลอด-3-5-ไฮกุ | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คลอดด์บทประพันธ์ 4.6 | คลอด-บทประพันธ์-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คลอดด์บทประพันธ์ 4.5 | คลอด-บทประพันธ์-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| คลอดด์บทประพันธ์ 4.1 | คลอด-บทประพันธ์-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| เจมินี่ 3 โปร | ราศีเมถุน-3-โปร | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` |
+| ราศีเมถุน 3 แฟลช | ราศีเมถุน-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
+| มินิแม็กซ์ M2.1 | มินิแม็กซ์-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| MiniMax M2.1 ฟรี | minimax-m2.1-ฟรี | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
+| GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| GLM 4.7 ฟรี | ปราศจาก glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| คิมิ K2.5 | คิมิ-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| Kimi K2.5 ฟรี | คิมิ-k2.5-ฟรี | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| คิมิ K2 กำลังคิด | kimi-k2-คิด | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| คิมิ K2 | คิมิ-k2 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| คิวเวน3 โคเดอร์ 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+| บิ๊กดอง | ดองใหญ่ | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
+
+[model id](/docs/config/#models) ในการกำหนดค่า OpenCode ของคุณ
+ใช้รูปแบบ `opencode/<model-id>` ตัวอย่างเช่น สำหรับ GPT 5.2 Codex คุณจะต้อง
+ใช้ `opencode/gpt-5.2-codex` ในการกำหนดค่าของคุณ
+
+---
+
+### โมเดล
+
+คุณสามารถดึงรายชื่อรุ่นที่มีจำหน่ายและข้อมูลเมตาทั้งหมดได้จาก:
+
+```
+https://opencode.ai/zen/v1/models
+```
+
+---
+
+## ราคา
+
+เราสนับสนุนรูปแบบการจ่ายเงินตามการใช้งาน ด้านล่างนี้คือราคา **ต่อโทเค็น 1M**
+
+| แบบอย่าง | ป้อนข้อมูล | เอาท์พุต | แคชอ่าน | เขียนในแคช |
+| --------------------------------- | ------ | ------ | ----------- | ------------ |
+| บิ๊กดอง | ฟรี | ฟรี | ฟรี | - |
+| MiniMax M2.1 ฟรี | ฟรี | ฟรี | ฟรี | - |
+| มินิแม็กซ์ M2.1 | $0.30 | $1.20 | $0.10 | - |
+| GLM 4.7 ฟรี | ฟรี | ฟรี | ฟรี | - |
+| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
+| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
+| Kimi K2.5 ฟรี | ฟรี | ฟรี | ฟรี | - |
+| คิมิ K2.5 | $0.60 | $3.00 | $0.08 | - |
+| คิมิ K2 กำลังคิด | $0.40 | $2.50 | - | - |
+| คิมิ K2 | $0.40 | $2.50 | - | - |
+| คิวเวน3 โคเดอร์ 480B | $0.45 | $1.50 | - | - |
+| Claude Sonnet 4.5 (โทเค็น ≤ 200K) | $3.00 | $15.00 | $0.30 | $3.75 |
+| Claude Sonnet 4.5 (> โทเค็น 200,000) | $6.00 | $22.50 | $0.60 | $7.50 |
+| Claude Sonnet 4 (โทเค็น 200,000 โทเค็น) | $3.00 | $15.00 | $0.30 | $3.75 |
+| Claude Sonnet 4 (> โทเค็น 200,000) | $6.00 | $22.50 | $0.60 | $7.50 |
+| คล็อด ไฮกุ 4.5 | $1.00 | $5.00 | $0.10 | $1.25 |
+| คล็อด ไฮกุ 3.5 | $0.80 | $4.00 | $0.08 | $1.00 |
+| Claude Opus 4.6 (โทเค็น ≤ 200K) | $5.00 | $25.00 | $0.50 | $6.25 |
+| Claude Opus 4.6 (> โทเค็น 200,000) | $10.00 | $37.50 | $1.00 | $12.50 |
+| คลอดด์บทประพันธ์ 4.5 | $5.00 | $25.00 | $0.50 | $6.25 |
+| คลอดด์บทประพันธ์ 4.1 | $15.00 | $75.00 | $1.50 | $18.75 |
+| Gemini 3 Pro (โทเค็น ≤ 200,000) | 2.00 ดอลลาร์ | $12.00 | $0.20 | - |
+| Gemini 3 Pro (โทเค็น> 200,000) | $4.00 | $18.00 | $0.40 | - |
+| ราศีเมถุน 3 แฟลช | $0.50 | $3.00 | $0.05 | - |
+| GPT 5.2 | $1.75 | $14.00 | 0.175 ดอลลาร์ | - |
+| GPT 5.2 โคเด็กซ์ | $1.75 | $14.00 | 0.175 ดอลลาร์ | - |
+| GPT 5.1 | $1.07 | 8.50 ดอลลาร์ | $0.107 | - |
+| GPT 5.1 โคเด็กซ์ | $1.07 | 8.50 ดอลลาร์ | $0.107 | - |
+| GPT 5.1 โคเด็กซ์สูงสุด | $1.25 | $10.00 | $0.125 | - |
+| GPT 5.1 โคเด็กซ์มินิ | $0.25 | 2.00 ดอลลาร์ | 0.025 ดอลลาร์ | - |
+| GPT 5 | $1.07 | 8.50 ดอลลาร์ | $0.107 | - |
+| GPT 5 โคเด็กซ์ | $1.07 | 8.50 ดอลลาร์ | $0.107 | - |
+| GPT 5นาโน | ฟรี | ฟรี | ฟรี | - |
+
+คุณอาจสังเกตเห็น _Claude Haiku 3.5_ ในประวัติการใช้งานของคุณ นี่คือ [โมเดลราคาประหยัด](/docs/config/#models) ที่ใช้ในการสร้างชื่อเซสชันของคุณ
+
+:::note
+ค่าธรรมเนียมบัตรเครดิตจะถูกส่งต่อในราคาต้นทุน (4.4% + 0.30 ดอลลาร์สหรัฐฯ ต่อธุรกรรม) เราไม่คิดค่าใช้จ่ายใดๆ นอกเหนือจากนั้น
+:::
+
+รุ่นฟรี:
+
+- GLM 4.7 ใช้งานได้ฟรีบน OpenCode ในระยะเวลาจำกัด ทีมงานใช้เวลานี้เพื่อรวบรวมคำติชมและปรับปรุงโมเดล
+- Kimi K2.5 Free พร้อมใช้งานบน OpenCode ในระยะเวลาจำกัด ทีมงานใช้เวลานี้เพื่อรวบรวมคำติชมและปรับปรุงโมเดล
+- MiniMax M2.1 Free พร้อมใช้งานบน OpenCode ในระยะเวลาจำกัด ทีมงานใช้เวลานี้เพื่อรวบรวมคำติชมและปรับปรุงโมเดล
+- Big Pickle เป็นโมเดลล่องหนที่ให้บริการฟรีบน OpenCode ในระยะเวลาจำกัด ทีมงานใช้เวลานี้เพื่อรวบรวมคำติชมและปรับปรุงโมเดล
+
+<a href={email}>Contact us</a> if you have any questions.
+
+---
+
+### โหลดซ้ำอัตโนมัติ
+
+หากยอดคงเหลือของคุณต่ำกว่า $5 Zen จะโหลด $20 อีกครั้งโดยอัตโนมัติ
+
+คุณสามารถเปลี่ยนจำนวนการโหลดอัตโนมัติได้ คุณยังสามารถปิดการโหลดอัตโนมัติทั้งหมดได้อีกด้วย
+
+---
+
+### ขีดจำกัดรายเดือน
+
+คุณยังสามารถกำหนดขีดจำกัดการใช้งานรายเดือนสำหรับพื้นที่ทำงานทั้งหมดและสำหรับแต่ละรายการได้
+สมาชิกในทีมของคุณ
+
+ตัวอย่างเช่น สมมติว่าคุณกำหนดขีดจำกัดการใช้งานรายเดือนไว้ที่ 20 ดอลลาร์ Zen จะไม่ใช้
+มากกว่า $20 ในหนึ่งเดือน แต่ถ้าคุณเปิดใช้งานการโหลดซ้ำอัตโนมัติ Zen อาจจะจบลง
+เรียกเก็บเงินคุณมากกว่า $20 หากยอดคงเหลือของคุณต่ำกว่า $5
+
+---
+
+## ความเป็นส่วนตัว
+
+โมเดลทั้งหมดของเราโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการของเราปฏิบัติตามนโยบายการเก็บรักษาเป็นศูนย์ และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมีข้อยกเว้นต่อไปนี้:
+
+- Big Pickle: ในช่วงระยะเวลาว่าง ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดลได้
+- GLM 4.7 ฟรี: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดล
+- Kimi K2.5 ฟรี: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดล
+- MiniMax M2.1 ฟรี: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดล
+- OpenAI API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ OpenAI](https://platform.openai.com/docs/guides/your-data)
+- Anthropic API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage)
+
+---
+
+## สำหรับทีม
+
+Zen ยังใช้งานได้ดีกับทีมอีกด้วย คุณสามารถเชิญเพื่อนร่วมทีม กำหนดบทบาท ดูแลจัดการได้
+โมเดลที่ทีมของคุณใช้ และอื่นๆ
+
+:::note
+ขณะนี้พื้นที่ทำงานให้บริการฟรีสำหรับทีมโดยเป็นส่วนหนึ่งของเวอร์ชันเบต้า
+:::
+
+ขณะนี้การจัดการพื้นที่ทำงานของคุณให้บริการฟรีสำหรับทีมโดยเป็นส่วนหนึ่งของเวอร์ชันเบต้า เราจะเป็น
+แบ่งปันรายละเอียดเพิ่มเติมเกี่ยวกับราคาเร็ว ๆ นี้
+
+---
+
+### บทบาท
+
+คุณสามารถเชิญเพื่อนร่วมทีมเข้ามาในพื้นที่ทำงานของคุณและมอบหมายบทบาทได้:
+
+- **ผู้ดูแลระบบ**: จัดการโมเดล สมาชิก คีย์ API และการเรียกเก็บเงิน
+- **สมาชิก**: จัดการเฉพาะคีย์ API ของตนเองเท่านั้น
+
+ผู้ดูแลระบบยังสามารถกำหนดวงเงินการใช้จ่ายรายเดือนสำหรับสมาชิกแต่ละคนเพื่อควบคุมค่าใช้จ่ายได้
+
+---
+
+### การเข้าถึงโมเดล
+
+ผู้ดูแลระบบสามารถเปิดหรือปิดใช้งานโมเดลเฉพาะสำหรับพื้นที่ทำงานได้ คำขอที่ทำกับโมเดลที่ถูกปิดใช้งานจะส่งคืนข้อผิดพลาด
+
+สิ่งนี้มีประโยชน์สำหรับกรณีที่คุณต้องการปิดการใช้งานโมเดลนั้น
+รวบรวมข้อมูล
+
+---
+
+### นำกุญแจมาเอง
+
+คุณสามารถใช้ปุ่ม OpenAI หรือ Anthropic API ของคุณเองในขณะที่ยังเข้าถึงรุ่นอื่นๆ ใน Zen ได้
+
+เมื่อคุณใช้คีย์ของคุณเอง โทเค็นจะถูกเรียกเก็บเงินโดยตรงจากผู้ให้บริการ ไม่ใช่โดย Zen
+
+ตัวอย่างเช่น องค์กรของคุณอาจมีคีย์สำหรับ OpenAI หรือ Anthropic อยู่แล้ว
+และคุณต้องการใช้สิ่งนั้นแทนอันที่ Zen มอบให้
+
+---
+
+## เป้าหมาย
+
+เราสร้าง OpenCode Zen เพื่อ:
+
+1. **เกณฑ์มาตรฐาน** โมเดลที่ดีที่สุด/providers สำหรับตัวแทนการเข้ารหัส
+2. เข้าถึงตัวเลือก **คุณภาพสูงสุด** และไม่ดาวน์เกรดประสิทธิภาพหรือเปลี่ยนเส้นทางไปยังผู้ให้บริการที่ราคาถูกกว่า
+3. ส่งต่อ **ราคาที่ลดลง** โดยการขายในราคาต้นทุน ดังนั้นมาร์กอัปเพียงอย่างเดียวคือครอบคลุมค่าธรรมเนียมการดำเนินการของเรา
+4. **ไม่มีการล็อคอิน** โดยอนุญาตให้คุณใช้กับเอเจนต์การเขียนโค้ดอื่นๆ และให้คุณใช้ผู้ให้บริการรายอื่นกับ OpenCode ได้เช่นกัน