opencode / packages /web /src /content /docs /ko /server.mdx
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw
History Blame Contribute Delete
18.7 kB
---
title: ์„œ๋ฒ„
description: HTTP๋ฅผ ํ†ตํ•ด OpenCode ์„œ๋ฒ„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
`opencode serve` ๋ช…๋ น์€ opencode ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” OpenAPI ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” headless HTTP ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
---
### ์‚ฌ์šฉ๋ฒ•
```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` | ํ—ˆ์šฉํ•  ์ถ”๊ฐ€ ๋ธŒ๋ผ์šฐ์ € origin | `[]` |
`--cors`๋Š” ๋‹ค์ˆ˜ ์‹œ๊ฐ„์„ ํ†ต๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```
---
### ์ธ์ฆ
`OPENCODE_SERVER_PASSWORD`๋ฅผ ์„ค์ •ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ HTTP Basic auth๋กœ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. `opencode` ๋˜๋Š” `OPENCODE_SERVER_USERNAME`๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ๋กœ ์„ค์ •ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’. ์ด๊ฒƒ์€ `opencode serve`์™€ `opencode web` ๋‘˜ ๋‹ค์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve
```
---
### ์ž‘๋™ ๋ฐฉ์‹
`opencode`๋ฅผ ์‹คํ–‰ํ•˜๋ฉด TUI์™€ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. TUI๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ?
์„œ๋ฒ„์™€ ๋Œ€ํ™”ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ. ์„œ๋ฒ„๋Š” OpenAPI 3.1 spec์„ ๋…ธ์ถœ
๋์ . ์ด ์—”๋“œํฌ์ธํŠธ๋Š” [SDK](/docs/sdk)์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
:::tip
opencode ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ opencode programmatically์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
:::
์ด ์•„ํ‚คํ…์ฒ˜๋Š” opencode ์ง€์› ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  opencode programmatically์™€ ์ƒํ˜ธ ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…๋ฆฝ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด `opencode serve`๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—
opencode TUI ์‹คํ–‰, `opencode serve` ์ƒˆ๋กœ์šด ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
---
#### ๊ธฐ์กด ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
TUI๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌด์ž‘์œ„๋กœ ํฌํŠธ์™€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  `--hostname`์™€ `--port` [flags](/docs/cli)์—์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค.
[`/tui`](#tui) ์—”๋“œํฌ์ธํŠธ๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด TUI๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ opencode [IDE](/docs/ide) ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
---
## ์‚ฌ์–‘
์„œ๋ฒ„๋Š” OpenAPI 3.1 spec์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.
```
http://<hostname>:<port>/doc
```
์˜ˆ๋ฅผ ๋“ค์–ด, `http://localhost:4096/doc`. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ ๋ฐ ์‘๋‹ต ์œ ํ˜•์„ ๊ฒ€์‚ฌํ•˜๋Š” spec๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋˜๋Š” Swagger ํƒํ—˜๊ฐ€์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## 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>ํ”„๋กœ์ ํŠธ</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>Config</code></a> |
| `PATCH` | `/config` | ์—…๋ฐ์ดํŠธ ๊ตฌ์„ฑ | <a href={typesUrl}><code>Config</code></a> |
| `GET` | `/config/providers` | ๋ชฉ๋ก ์ œ๊ณต์—…์ฒด ๋ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ | `{ providers: `<a href={typesUrl}> ์‚ฌ์ดํŠธ ๋งต</a>`, default: { [key: string]: string } }` |
---
## ๊ณต๊ธ‰์ž
| ๋ฐฉ๋ฒ• | ๊ฒฝ๋กœ | ์„ค๋ช… | ์‘๋‹ต |
| ------ | -------------------------------- | --------------------------- | ----------------------------------------------------------------------------------- |
| `GET` | `/provider` | ๋ชจ๋“  ๊ณต๊ธ‰์ž ๋ชฉ๋ก | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
| `GET` | `/provider/auth` | ๊ณต๊ธ‰์ž ์ธ์ฆ ๋ฉ”์„œ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
| `POST` | `/provider/{id}/oauth/authorize` | OAuth๋ฅผ ์‚ฌ์šฉํ•œ ๊ณต๊ธ‰์ž ํ—ˆ๊ฐ€ | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
| `POST` | `/provider/{id}/oauth/callback` | ๊ณต๊ธ‰์ž๋ฅผ ์œ„ํ•œ OAuth ์ฝœ๋ฐฑ | `boolean` |
---
## ์„ธ์…˜
| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | ๋น„๊ณ  |
| -------- | ---------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------- |
| `GET` | `/session` | ๋ชจ๋“  ์„ธ์…˜ ์ผ๋žŒํ‘œ | ๋ฐ˜ํ™˜ <a href={typesUrl}><code>Session[]</code></a> |
| `POST` | `/session` | ์ƒˆ ์„ธ์…˜ ๋งŒ๋“ค๊ธฐ | ๋ชธ: `{ parentID?, title? }`, ๋ฐ˜ํ™˜ <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/status` | ๋ชจ๋“  ์„ธ์…˜์˜ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค | `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
| `GET` | `/session/:id` | ์„ธ์…˜ ์ƒ์„ธ๋ณด๊ธฐ | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id` | ์„ธ์…˜ ์‚ญ์ œ ๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ | `boolean` |
| `PATCH` | `/session/:id` | ์—…๋ฐ์ดํŠธ ์„ธ์…˜ ์†์„ฑ | ๋ณธ์ฒด: `{ title? }`, ๋ฐ˜ํ™˜ <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/children` | ์„ธ์…˜์˜ ํ•˜์œ„ ์„ธ์…˜ | ๋ฆฌํ„ด <a href={typesUrl}><code>Session[]</code></a> |
| `GET` | `/session/:id/todo` | ์„ธ์…˜์˜ ํ•  ์ผ(Todo) ๋ชฉ๋ก ๋ฐ›๊ธฐ | <a href={typesUrl}><code>Todo[]</code></a> |
| `POST` | `/session/:id/init` | ์•ฑ ์ดˆ๊ธฐํ™” ๋ฐ `AGENTS.md` ๋ถ„์„ | ๋ชธ: `{ messageID, providerID, modelID }`, ๋ฐ˜ํ™˜ `boolean` |
| `POST` | `/session/:id/fork` | ๋ฉ”์‹œ์ง€์˜ ๊ธฐ์กด ์„ธ์…˜ | ๋ชธ: `{ messageID? }`, ๋ฐ˜ํ™˜ <a href={typesUrl}><code>Session</code></a> |
| `POST` | `/session/:id/abort` | ์šด์˜ ์ค‘์ธ ์„ธ์…˜ | ๋ฐ˜ํ’ˆ `boolean` |
| `POST` | `/session/:id/share` | ์„ธ์…˜ ๊ณต์œ  | <a href={typesUrl}><code>Session</code></a> |
| `DELETE` | `/session/:id/share` | ์„ธ์…˜ ๊ณต์œ  | <a href={typesUrl}><code>Session</code></a> |
| `GET` | `/session/:id/diff` | `/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}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
| `POST` | `/session/:id/message` | ์‘๋‹ต์„ ์œ„ํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค | ๋ชธ: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, ๋ฐ˜ํ™˜ `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `GET` | `/session/:id/message/:messageID` | ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ | `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</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}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `POST` | `/session/:id/shell` | shell ๋ช…๋ น ์‹คํ–‰ | ์ฒด: `{ agent, model?, command }`, ๋ฐ˜ํ™˜ `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</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[]` (๊ฒฝ๋กœ) |
| `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>FileContent</code></a> |
| `GET` | `/file/status` | ์ถ”์  ์ค‘์ธ ํŒŒ์ผ ์ƒํƒœ ๊ฐ€์ ธ์˜ค๊ธฐ | <a href={typesUrl}><code>File[]</code></a> |
#### `/find/file` ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜
- `query` (required) - ๊ฒ€์ƒ‰ ๋ฌธ์ž์—ด (fuzzy ์ผ์น˜)
- `type` (์„ ํƒ ์‚ฌํ•ญ) - `"file"` ๋˜๋Š” `"directory"`์— ์ œํ•œ ๊ฒฐ๊ณผ
- `directory` (์„ ํƒ ์‚ฌํ•ญ) - ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ ๋ฌด์‹œ
- (์„ ํƒ) `limit` - ์ตœ๋Œ€ ๊ฒฐ๊ณผ (1-200)
- `dirs` (์˜ต์…˜) - ๋ ˆ๊ฑฐ์‹œ ํ”Œ๋ž˜๊ทธ (`"false"`๋Š” ํŒŒ์ผ๋งŒ ๋ฐ˜ํ™˜)
---
## ๋„๊ตฌ (์‹คํ—˜์ )
| ๋ฐฉ๋ฒ• | ๊ฒฝ๋กœ | ์„ค๋ช… | ์‘๋‹ต |
| ----- | ------------------------------------------- | ----------------------- | --------------------------------------------- |
| `GET` | `/experimental/tool/ids` | ๋ชจ๋“  ๋„๊ตฌ ID | <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 ์„œ๋ฒ„๊ฐ€ ๋™์  | ๋ณธ์ฒด: `{ 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`, ๊ทธ ํ›„ ๋ฒ„์Šค ์ด๋ฒคํŠธ | Server-sent event stream |
---
### ๋ฌธ์„œ
| ๋ฐฉ๋ฒ• | ๊ฒฝ๋กœ | ์„ค๋ช… | ์‘๋‹ต |
| ----- | ------ | ---------------- | ------------------------ |
| `GET` | `/doc` | OpenAPI 3.1 ์‚ฌ์–‘ | HTML ํŽ˜์ด์ง€ OpenAPI ์‚ฌ์–‘ |