wip(docs): i18n (#12681)

This commit is contained in:
Adam
2026-02-09 11:34:35 -06:00
committed by GitHub
parent f74c0339cc
commit dc53086c1e
642 changed files with 192745 additions and 509 deletions

View File

@@ -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
- รายละเอียด_รายละเอียด
- สร้างสรรค์_บล็อก

View File

@@ -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 เวียนนา
- ระบบตัวแทนและระบบ

View File

@@ -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
```

View File

@@ -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` | บูลิน | เพื่อเป็นโหมด |

View File

@@ -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
คำสั่งนี้สามารถดำเนินการได้ในขั้นตอนนี้
:::
บันทึกคำสั่งด้วยชื่อเดียวกันคำสั่งย้ำคำสั่งใน

View File

@@ -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 ไว้ในไฟล์แยกกัน
- รวมไฟล์คำสั่งขนาดใหญ่โดยไม่ทำให้การกำหนดค่าของคุณเกะกะ
- การแชร์ข้อมูลโค้ดการกำหนดค่าทั่วไปในไฟล์กำหนดค่าหลายไฟล์

View File

@@ -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

View File

@@ -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) | กำหนดค่า พรอมต์ เอเจนต์ และปลั๊กอินสำหรับเวิร์กโฟลว์ที่ได้รับการปรับปรุง |

View File

@@ -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>

View File

@@ -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`** ในคำสั่งจะถูกแทนที่ด้วยเส้นทางไปยังไฟล์ที่กำลังจัดรูปแบบ

View File

@@ -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 จะได้รับ:
- กำลังตรวจสอบไฟล์ที่แน่นอน
- บรรทัดโค้ดเฉพาะ
- บริบทที่แตกต่างโดยรอบ
- ข้อมูลหมายเลขบรรทัด
ซึ่งช่วยให้สามารถร้องขอที่ตรงเป้าหมายมากขึ้นโดยไม่จำเป็นต้องระบุเส้นทางไฟล์หรือหมายเลขบรรทัดด้วยตนเอง

View File

@@ -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 "opencode@gitlab.com"
- 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 จะตรวจสอบคำขอรวมและให้ข้อเสนอแนะ

View File

@@ -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 มีสิทธิ์ในการติดตั้งส่วนขยาย

View File

@@ -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)

View File

@@ -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 หรือเปิดแท็บใหม่

View File

@@ -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`
ไฟล์ควรมีเฉพาะรหัสลิขสิทธิ์โดยไม่มีเนื้อหาเพิ่มเติม

View File

@@ -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.
```

View File

@@ -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. รุ่นแรกที่ใช้ลำดับความสำคัญภายใน

View File

@@ -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
```
---
### กรณีการใช้งาน
ต่อไปนี้เป็นกรณีการใช้งานทั่วไปสำหรับโหมดต่างๆ
- **โหมดสร้าง**: งานพัฒนาเต็มรูปแบบโดยเปิดใช้งานเครื่องมือทั้งหมด
- **โหมดแผน**: วิเคราะห์และวางแผนโดยไม่ทำการเปลี่ยนแปลง
- **โหมดการตรวจสอบ**: การตรวจสอบโค้ดพร้อมการเข้าถึงแบบอ่านอย่างเดียวพร้อมเครื่องมือเอกสารประกอบ
- **โหมดแก้ไขข้อบกพร่อง**: มุ่งเน้นไปที่การตรวจสอบโดยเปิดใช้งานเครื่องมือทุบตีและอ่าน
- **โหมดเอกสาร**: การเขียนเอกสารด้วยการทำงานของไฟล์ แต่ไม่มีคำสั่งระบบ
คุณอาจพบว่ารุ่นต่างๆ นั้นดีสำหรับกรณีการใช้งานที่แตกต่างกัน

View File

@@ -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:password@proxy.example.com:8080
```
:::caution
หลีกเลี่ยงรหัสผ่านฮาร์ดโค้ด ใช้ตัวแปรสภาพแวดล้อมหรือที่จัดเก็บข้อมูลรับรองที่ปลอดภัย
:::
สำหรับพร็อกซีที่ต้องการการรับรองความถูกต้องขั้นสูง เช่น NTLM หรือ Kerberos ให้พิจารณาใช้เกตเวย์ LLM ที่รองรับวิธีการตรวจสอบความถูกต้องของคุณ
---
## ใบรับรองที่กำหนดเอง
หากองค์กรของคุณใช้ CA แบบกำหนดเองสำหรับการเชื่อมต่อ HTTPS ให้กำหนดค่า OpenCode ให้เชื่อถือ
```bash
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
```
ซึ่งใช้ได้กับทั้งการเชื่อมต่อพร็อกซีและการเข้าถึง API โดยตรง

View File

@@ -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 *"`) เมื่ออาร์กิวเมนต์ถูกส่งผ่าน
:::

View File

@@ -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` จะถูกละเว้นในกรณีนี้

File diff suppressed because it is too large Load Diff

View File

@@ -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`) จะสามารถบำรุงรักษาได้ดีกว่าคำสั่งแบบแมนนวล
:::

View File

@@ -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`: ผลลัพธ์สูงสุด (1200)
---
#### ตัวอย่าง
```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)
}
```

View File

@@ -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` (ไม่บังคับ) — ผลลัพธ์สูงสุด (1200)
- `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 |

View File

@@ -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 ในองค์กรของคุณ

View File

@@ -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` ต้อง:
- มีความยาว 164 อักขระ
- เป็นตัวพิมพ์เล็กและตัวเลขคละกันที่มีเครื่องหมายยัติภังค์ตัวคั่นเดียว
- ไม่ขึ้นต้นหรือลงท้ายด้วย `-`
- ไม่มี `--` ติดต่อกัน
- จับคู่ชื่อไดเร็กทอรีที่มี `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` ถูกซ่อนไม่ให้ตัวแทนเห็น

View File

@@ -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"
}
}
}
```

View File

@@ -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` ก็ตาม

View File

@@ -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`

View File

@@ -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

View File

@@ -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"]
}
}
```
ธงบรรทัดคำสั่งมีความสำคัญเหนือกว่าการตั้งค่าไฟล์กำหนดค่า

View File

@@ -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/`

View File

@@ -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 ได้เช่นกัน