summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/ja/server.mdx
blob: e86e811973a9f86b16ced6b29bcd50c7682887df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
---
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 エンドポイントを公開するヘッドレス 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`        | 許可する追加のブラウザーオリジン   | `[]`             |

`--cors` は複数回渡すことができます。

```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```

---

### 認証

HTTP 基本認証でサーバーを保護するには、`OPENCODE_SERVER_PASSWORD` を設定します。ユーザー名はデフォルトで `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 と対話します。
:::
This

`opencode serve` を実行してスタンドアロン サーバーを起動できます。持っている場合は、
opencode TUI を実行すると、`opencode serve` が新しいサーバーを起動します。

---

#### 既存のサーバーに接続する

TUI を起動すると、ポートとホスト名がランダムに割り当てられます。代わりに、`--hostname` と `--port` [flags](/docs/cli).次に、これを使用してサーバーに接続します。

[`/tui`](#tui) エンドポイントは、サーバー経由で TUI を駆動するために使用できます。たとえば、プロンプトを事前入力したり、実行したりできます。この設定は、OpenCode [IDE](/docs/ide) プラグイン] によって使用されます。

---

## スペック

サーバーは、次の場所で閲覧できる OpenAPI 3.1 仕様を公開しています。

```
http://<hostname>:<port>/doc
```

たとえば、`http://localhost:4096/doc`。この仕様を使用して、クライアントを生成したり、要求と応答のタイプを検査したりできます。または、Swagger エクスプローラーで表示します。

---

## API

opencode サーバーは次の API を公開します。

---

### グローバル

| 方法  | パス             | 説明                                       | 応答                                 |
| ----- | ---------------- | ------------------------------------------ | ------------------------------------ |
| `GET` | `/global/health` | サーバーの健全性とバージョンを取得する     | `{ healthy: true, version: string }` |
| `GET` | `/global/event`  | グローバル イベントの取得 (SSE ストリーム) | イベントストリーム                   |

---

### プロジェクト

| 方法  | パス               | 説明                             | 応答                                               |
| ----- | ------------------ | -------------------------------- | -------------------------------------------------- |
| `GET` | `/project`         | すべてのプロジェクトをリストする | <a href={typesUrl}><code>プロジェクト[]</code></a> |
| `GET` | `/project/current` | 現在のプロジェクトを取得         | <a href={typesUrl}><code>プロジェクト</code></a>   |

---

### パスと VCS

| 方法  | パス    | 説明                                    | 応答                                        |
| ----- | ------- | --------------------------------------- | ------------------------------------------- |
| `GET` | `/path` | 現在のパスを取得する                    | <a href={typesUrl}><code>パス</code></a>    |
| `GET` | `/vcs`  | 現在のプロジェクトの VCS 情報を取得する | <a href={typesUrl}><code>VcsInfo</code></a> |

---

### 実例

| 方法   | パス                | 説明                         | 応答   |
| ------ | ------------------- | ---------------------------- | ------ |
| `POST` | `/instance/dispose` | 現在のインスタンスを破棄する | うーん |

---

### 構成

| 方法    | パス                | 説明                                         | 応答                                                                                       |
| ------- | ------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `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>ProviderAuthAuthorization</code></a>                         |
| `POST` | `/provider/{id}/oauth/callback`  | プロバイダーの OAuth コールバックを処理する | うーん                                                                                |

---

### セッション

| 方法     | パス                                     | 説明                                                | メモ                                                                                       |
| -------- | ---------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `GET`    | `/session`                               | すべてのセッションをリストする                      | 戻り値 <a href={typesUrl}><code>セッション[]</code></a>                                    |
| `POST`   | `/session`                               | 新しいセッションを作成する                          | 本文: `{ 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`                           | セッションのプロパティを更新する                    | 本文: `{ title? }`、<a href={typesUrl}><code>セッション</code></a> を返します。            |
| `GET`    | `/session/:id/children`                  | セッションの子セッションを取得する                  | 戻り値 <a href={typesUrl}><code>セッション[]</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>セッション</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}>Part[]</a>`}[]`                                                     |
| `POST` | `/session/:id/message`            | メッセージを送信して応答を待ちます      | 本文: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`、`{ info: `<a href={typesUrl}>メッセージ</a>を返します`, parts: `<a href={typesUrl}>Part[]</a>`}` |
| `GET`  | `/session/:id/message/:messageID` | メッセージの詳細を取得する              | 戻り値 `{ info: `<a href={typesUrl}>メッセージ</a>`, parts: `<a href={typesUrl}>Part[]</a>`}`                                                                              |
| `POST` | `/session/:id/prompt_async`       | メッセージを非同期に送信する (待機なし) | body: `/session/:id/message` と同じ、`204 No Content` を返します。                                                                                                         |
| `POST` | `/session/:id/command`            | スラッシュコマンドを実行します          | 本文: `{ messageID?, agent?, model?, command, arguments }`、`{ info: `<a href={typesUrl}>メッセージ</a>を返します`, parts: `<a href={typesUrl}>Part[]</a>`}`               |
| `POST` | `/session/:id/shell`              | shell コマンドを実行する                | 本文: `{ agent, model?, command }`、`{ info: `<a href={typesUrl}>メッセージ</a>を返します`, parts: `<a href={typesUrl}>Part[]</a>`}`                                       |

---

### コマンド

| 方法  | パス       | 説明                         | 応答                                           |
| ----- | ---------- | ---------------------------- | ---------------------------------------------- |
| `GET` | `/command` | すべてのコマンドをリストする | <a href={typesUrl}><code>コマンド[]</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>シンボル[]</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>ファイル[]</code></a>                                               |

#### `/find/file` クエリパラメータ

- `query` (必須) — 検索文字列 (あいまい一致)
- `type` (オプション) — 結果を `"file"` または `"directory"` に制限します
- `directory` (オプション) — 検索用のプロジェクト ルートをオーバーライドします。
- `limit` (オプション) — 最大結果 (1 ~ 200)
- `dirs` (オプション) — 従来のフラグ (`"false"` はファイルのみを返します)

---

### ツール (実験的)

| 方法  | パス                                        | 説明                                           | 応答                                             |
| ----- | ------------------------------------------- | ---------------------------------------------- | ------------------------------------------------ |
| `GET` | `/experimental/tool/ids`                    | すべてのツール ID をリストする                 | <a href={typesUrl}><code>ツール ID</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? }` | うーん |

---

### トゥイ

| 方法   | パス                    | 説明                                            | 応答                               |
| ------ | ----------------------- | ----------------------------------------------- | ---------------------------------- |
| `POST` | `/tui/append-prompt`    | プロンプトにテキストを追加します                | うーん                             |
| `POST` | `/tui/open-help`        | ヘルプダイアログを開く                          | うーん                             |
| `POST` | `/tui/open-sessions`    | セッションセレクターを開く                      | うーん                             |
| `POST` | `/tui/open-themes`      | テーマセレクターを開く                          | うーん                             |
| `POST` | `/tui/open-models`      | モデルセレクターを開く                          | うーん                             |
| `POST` | `/tui/submit-prompt`    | 現在のプロンプトを送信します                    | うーん                             |
| `POST` | `/tui/clear-prompt`     | プロンプトをクリア                              | うーん                             |
| `POST` | `/tui/execute-command`  | コマンドを実行する (`{ command }`)              | うーん                             |
| `POST` | `/tui/show-toast`       | トーストを表示 (`{ title?, message, variant }`) | うーん                             |
| `GET`  | `/tui/control/next`     | 次の制御リクエストを待ちます                    | コントロールリクエストオブジェクト |
| `POST` | `/tui/control/response` | 制御リクエストに応答する (`{ body }`)           | うーん                             |

---

### 認証

| 方法  | パス        | 説明                                                                           | 応答   |
| ----- | ----------- | ------------------------------------------------------------------------------ | ------ |
| `PUT` | `/auth/:id` | 認証資格情報を設定します。本文はプロバイダーのスキーマと一致する必要があります | うーん |

---

### イベント

| Method | Path     | Description                                                                   | Response                  |
| ------ | -------- | ----------------------------------------------------------------------------- | ------------------------- |
| `GET`  | `/event` | Server-sent events stream. First event is `server.connected`, then bus events | Server-sent events stream |

---

### ドキュメント

| 方法  | パス   | 説明             | 応答                             |
| ----- | ------ | ---------------- | -------------------------------- |
| `GET` | `/doc` | OpenAPI 3.1 仕様 | OpenAPI 仕様を備えた HTML ページ |