---
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`              | รันคำสั่ง shell                      | เนื้อความ: `{ agent, model?, command }` ส่งคืน `{ info: `<a href={typesUrl}>ข้อความ</a>`, parts: `<a href={typesUrl}>ส่วน[]</a>`}`                                       |

---

### คำสั่ง

| วิธี  | เส้นทาง    | คำอธิบาย                | การตอบสนอง                                    |
| ----- | ---------- | ----------------------- | --------------------------------------------- |
| `GET` | `/command` | แสดงรายการคำสั่งทั้งหมด | <a href={typesUrl}><code>Command[]</code></a> |

---

### ไฟล์

| วิธี  | เส้นทาง                  | คำอธิบาย                       | การตอบสนอง                                                                                |
| ----- | ------------------------ | ------------------------------ | ----------------------------------------------------------------------------------------- |
| `GET` | `/find?pattern=<pat>`    | ค้นหาข้อความในไฟล์             | อาร์เรย์ของวัตถุที่ตรงกับ `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `GET` | `/find/file?query=<q>`   | ค้นหาไฟล์และไดเร็กทอรีตามชื่อ  | `string[]` (paths)                                                                        |
| `GET` | `/find/symbol?query=<q>` | ค้นหาสัญลักษณ์พื้นที่ทำงาน     | <a href={typesUrl}><code>Symbol[]</code></a>                                              |
| `GET` | `/file?path=<path>`      | แสดงรายการไฟล์และไดเร็กทอรี    | <a href={typesUrl}><code>FileNode[]</code></a>                                            |
| `GET` | `/file/content?path=<p>` | อ่านไฟล์                       | <a href={typesUrl}><code>เนื้อหาไฟล์</code></a>                                           |
| `GET` | `/file/status`           | รับสถานะสำหรับไฟล์ที่ถูกติดตาม | <a href={typesUrl}><code>File[]</code></a>                                                |

#### `/find/file` พารามิเตอร์การสืบค้น

- `query` (จำเป็น) — สตริงการค้นหา (การจับคู่แบบคลุมเครือ)
- `type` (ไม่บังคับ) — จำกัดผลลัพธ์ไว้ที่ `"file"` หรือ `"directory"`
- `directory` (เป็นทางเลือก) — แทนที่รูทโปรเจ็กต์สำหรับการค้นหา
- `limit` (ไม่บังคับ) — ผลลัพธ์สูงสุด (1–200)
- `dirs` (ไม่บังคับ) — แฟล็กดั้งเดิม (`"false"` ส่งคืนเฉพาะไฟล์)

---

### เครื่องมือ (ทดลอง)

| วิธี  | เส้นทาง                                     | คำอธิบาย                                        | การตอบสนอง                                           |
| ----- | ------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- |
| `GET` | `/experimental/tool/ids`                    | แสดงรายการรหัสเครื่องมือทั้งหมด                 | <a href={typesUrl}><code>รหัสเครื่องมือ</code></a>   |
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | แสดงรายการเครื่องมือที่มีสกีมา JSON สำหรับโมเดล | <a href={typesUrl}><code>รายการเครื่องมือ</code></a> |

---

### LSP, ฟอร์แมตเตอร์ & MCP

| วิธี   | เส้นทาง      | คำอธิบาย                        | การตอบสนอง                                               |
| ------ | ------------ | ------------------------------- | -------------------------------------------------------- |
| `GET`  | `/lsp`       | รับ LSP สถานะเซิร์ฟเวอร์        | <a href={typesUrl}><code>LSPStatus[]</code></a>          |
| `GET`  | `/formatter` | รับสถานะฟอร์แมตเตอร์            | <a href={typesUrl}><code>FormatterStatus[]</code></a>    |
| `GET`  | `/mcp`       | รับ MCP สถานะเซิร์ฟเวอร์        | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
| `POST` | `/mcp`       | เพิ่มเซิร์ฟเวอร์ MCP แบบไดนามิก | body: `{ name, config }` ส่งคืนออบเจ็กต์สถานะ MCP        |

---

### ตัวแทน

| วิธี  | เส้นทาง  | คำอธิบาย                      | การตอบสนอง                                   |
| ----- | -------- | ----------------------------- | -------------------------------------------- |
| `GET` | `/agent` | รายชื่อตัวแทนที่มีอยู่ทั้งหมด | <a href={typesUrl}><code>ตัวแทน[]</code></a> |

---

### การบันทึก

| วิธี   | เส้นทาง | คำอธิบาย                                                           | การตอบสนอง |
| ------ | ------- | ------------------------------------------------------------------ | ---------- |
| `POST` | `/log`  | เขียนรายการบันทึก เนื้อความ: `{ service, level, message, extra? }` | `boolean`  |

---

### TUI

| วิธี   | เส้นทาง                 | คำอธิบาย                                        | การตอบสนอง      |
| ------ | ----------------------- | ----------------------------------------------- | --------------- |
| `POST` | `/tui/append-prompt`    | เพิ่มข้อความต่อท้ายข้อความแจ้ง                  | `boolean`       |
| `POST` | `/tui/open-help`        | เปิดกล่องโต้ตอบความช่วยเหลือ                    | `boolean`       |
| `POST` | `/tui/open-sessions`    | เปิดตัวเลือกเซสชัน                              | `boolean`       |
| `POST` | `/tui/open-themes`      | เปิดตัวเลือกธีม                                 | `boolean`       |
| `POST` | `/tui/open-models`      | เปิดตัวเลือกรุ่น                                | `boolean`       |
| `POST` | `/tui/submit-prompt`    | ส่งข้อความแจ้งปัจจุบัน                          | `boolean`       |
| `POST` | `/tui/clear-prompt`     | ล้างข้อความแจ้ง                                 | `boolean`       |
| `POST` | `/tui/execute-command`  | ดำเนินการคำสั่ง (`{ command }`)                 | `boolean`       |
| `POST` | `/tui/show-toast`       | โชว์ขนมปังปิ้ง (`{ title?, message, variant }`) | `boolean`       |
| `GET`  | `/tui/control/next`     | รอคำขอควบคุมถัดไป                               | วัตถุคำขอควบคุม |
| `POST` | `/tui/control/response` | ตอบสนองต่อคำขอควบคุม (`{ body }`)               | `boolean`       |

---

### การรับรองความถูกต้อง

| วิธี  | เส้นทาง     | คำอธิบาย                                                                          | การตอบสนอง |
| ----- | ----------- | --------------------------------------------------------------------------------- | ---------- |
| `PUT` | `/auth/:id` | ตั้งค่าข้อมูลประจำตัวการรับรองความถูกต้อง เนื้อความต้องตรงกับสคีมาของผู้ให้บริการ | `boolean`  |

---

### กิจกรรม

| วิธี  | เส้นทาง  | คำอธิบาย                                                                     | การตอบสนอง                      |
| ----- | -------- | ---------------------------------------------------------------------------- | ------------------------------- |
| `GET` | `/event` | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง งานแรกคือ `server.connected` จากนั้นงานรถบัส | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง |

---

### เอกสาร

| วิธี  | เส้นทาง | คำอธิบาย                    | การตอบสนอง                         |
| ----- | ------- | --------------------------- | ---------------------------------- |
| `GET` | `/doc`  | ข้อมูลจำเพาะของ OpenAPI 3.1 | HTML หน้าพร้อมข้อมูลจำเพาะ OpenAPI |
