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
|
---
title: Sunucu
description: opencode sunucusuyla HTTP uzerinden etkilesin.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
`opencode serve` komutu, opencode istemcisinin kullanabileceği bir OpenAPI endpoint'i açan headless bir HTTP sunucusu çalıştırır.
---
### Kullanım
```bash
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
```
#### Seçenekler
| Bayrak | Açıklama | Varsayılan |
| --------------- | ---------------------------------------------- | ---------------- |
| `--port` | Dinlenecek bağlantı noktası | `4096` |
| `--hostname` | Dinlenecek ana bilgisayar adı | `127.0.0.1` |
| `--mdns` | mDNS keşfini etkinleştir | `false` |
| `--mdns-domain` | mDNS hizmeti için özel alan adı | `opencode.local` |
| `--cors` | İzin verilecek ek tarayıcı kaynakları (origin) | `[]` |
`--cors` birden fazla kez geçilebilir:
```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```
---
### Kimlik Doğrulama
Sunucuyu HTTP temel kimlik doğrulama (basic auth) ile korumak için `OPENCODE_SERVER_PASSWORD` ayarlayın. Kullanıcı adı varsayılan olarak `opencode` değeridir; değiştirmek isterseniz `OPENCODE_SERVER_USERNAME` ayarlayabilirsiniz. Bu ayar hem `opencode serve` hem de `opencode web` için geçerlidir.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve
```
---
### Nasıl çalışır
`opencode` çalıştırdığınızda hem TUI hem de sunucu başlar. TUI, sunucuyla konuşan istemci tarafıdır.
Sunucu bir OpenAPI 3.1 spesifikasyon uç noktası açar. Bu uç nokta [SDK](/docs/sdk) üretiminde de kullanılır.
:::tip
opencode ile programatik etkileşim için opencode sunucusunu kullanın.
:::
Bu mimari, opencode'un birden fazla istemciyi desteklemesini ve programatik kullanımları mümkün kılmasını sağlar.
`opencode serve` ile bağımsız bir sunucu başlatabilirsiniz. opencode TUI açıksa, `opencode serve` yeni bir sunucu başlatır.
---
#### Mevcut sunucuya bağlanın
TUI başlarken rastgele bir port ve hostname atanır. Bunun yerine `--hostname` ve `--port` [bayraklarını](/docs/cli) verebilirsiniz.
[`/tui`](#tui) uç noktası sunucu üzerinden TUI'yi sürmek için kullanılabilir. Örneğin bir istemi önceden doldurabilir veya çalıştırabilirsiniz. Bu kurulum opencode [IDE](/docs/ide) eklentileri tarafından kullanılır.
---
## Spesifikasyon
Sunucu, şu adreste görülebilen bir OpenAPI 3.1 spesifikasyonu yayınlar:
```
http://<hostname>:<port>/doc
```
Örneğin `http://localhost:4096/doc`. İstemci oluşturmak, istek/yanit tiplerini incelemek veya Swagger gezgininde açmak için bu spec'i kullanın.
---
## API'ler
opencode sunucusu aşağıdaki API'leri sunar.
---
### Global
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ---------------- | ------------------------------- | ------------------------------------ |
| `GET` | `/global/health` | Sunucu sağlığını ve sürümünü al | `{ healthy: true, version: string }` |
| `GET` | `/global/event` | Küresel olayları al (SSE akışı) | Olay akışı |
---
### Proje
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------------------ | --------------------- | --------------------------------------------- |
| `GET` | `/project` | Tüm projeleri listele | <a href={typesUrl}><code>Project[]</code></a> |
| `GET` | `/project/current` | Mevcut projeyi al | <a href={typesUrl}><code>Project</code></a> |
---
### Yol & VCS
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------- | ---------------------------------- | ------------------------------------------- |
| `GET` | `/path` | Mevcut yolu al | <a href={typesUrl}><code>Path</code></a> |
| `GET` | `/vcs` | Mevcut proje için VCS bilgisini al | <a href={typesUrl}><code>VcsInfo</code></a> |
---
### Örnek (Instance)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------------------- | ------------------------------ | --------- |
| `POST` | `/instance/dispose` | Mevcut örneği (instance) kapat | `boolean` |
---
### Config
| Yöntem | Yol | Açıklama | Yanıt |
| ------- | ------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `GET` | `/config` | Yapılandırma bilgisini al | <a href={typesUrl}><code>Config</code></a> |
| `PATCH` | `/config` | Yapılandırmayı güncelle | <a href={typesUrl}><code>Config</code></a> |
| `GET` | `/config/providers` | Sağlayıcıları ve varsayılan modelleri listele | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
---
### Sağlayıcı (Provider)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | -------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------- |
| `GET` | `/provider` | Tüm sağlayıcıları listele | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
| `GET` | `/provider/auth` | Sağlayıcı kimlik doğrulama yöntemlerini al | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
| `POST` | `/provider/{id}/oauth/authorize` | OAuth kullanarak bir sağlayıcıyı yetkilendir | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
| `POST` | `/provider/{id}/oauth/callback` | Bir sağlayıcı için OAuth geri çağrısını işle | `boolean` |
---
### Oturumlar (Sessions)
| Yöntem | Yol | Açıklama | Notlar |
| -------- | ---------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------ |
| `GET` | `/session` | Tüm oturumları listele | <a href={typesUrl}><code>Session[]</code></a> döndürür |
| `POST` | `/session` | Yeni bir oturum oluştur | gövde: `{ parentID?, title? }`, <a href={typesUrl}><code>Session</code></a> döndürür |
| `GET` | `/session/status` | Tüm oturumlar için durumu al | `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` döndürür |
| `GET` | `/session/:id` | Oturum ayrıntılarını al | <a href={typesUrl}><code>Session</code></a> döndürür |
| `DELETE` | `/session/:id` | Bir oturumu ve tüm verilerini sil | `boolean` döndürür |
| `PATCH` | `/session/:id` | Oturum özelliklerini güncelle | gövde: `{ title? }`, <a href={typesUrl}><code>Session</code></a> döndürür |
| `GET` | `/session/:id/children` | Bir oturumun alt oturumlarını al | <a href={typesUrl}><code>Session[]</code></a> döndürür |
| `GET` | `/session/:id/todo` | Bir oturum için yapılacaklar listesini al | <a href={typesUrl}><code>Todo[]</code></a> döndürür |
| `POST` | `/session/:id/init` | Uygulamayı analiz et ve `AGENTS.md` oluştur | gövde: `{ messageID, providerID, modelID }`, `boolean` döndürür |
| `POST` | `/session/:id/fork` | Mevcut bir oturumu bir mesajda çatalla | gövde: `{ messageID? }`, <a href={typesUrl}><code>Session</code></a> döndürür |
| `POST` | `/session/:id/abort` | Çalışan bir oturumu iptal et | `boolean` döndürür |
| `POST` | `/session/:id/share` | Bir oturumu paylaş | <a href={typesUrl}><code>Session</code></a> döndürür |
| `DELETE` | `/session/:id/share` | Bir oturumun paylaşımını kaldır | <a href={typesUrl}><code>Session</code></a> döndürür |
| `GET` | `/session/:id/diff` | Bu oturum için farkı (diff) al | sorgu: `messageID?`, <a href={typesUrl}><code>FileDiff[]</code></a> döndürür |
| `POST` | `/session/:id/summarize` | Oturumu özetle | gövde: `{ providerID, modelID }`, `boolean` döndürür |
| `POST` | `/session/:id/revert` | Bir mesajı geri al | gövde: `{ messageID, partID? }`, `boolean` döndürür |
| `POST` | `/session/:id/unrevert` | Geri alınan tüm mesajları geri yükle | `boolean` döndürür |
| `POST` | `/session/:id/permissions/:permissionID` | Bir izin isteğine yanıt ver | gövde: `{ response, remember? }`, `boolean` döndürür |
---
### Mesajlar
| Yöntem | Yol | Açıklama | Notlar |
| ------ | --------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GET` | `/session/:id/message` | Bir oturumdaki mesajları listele | sorgu: `limit?`, `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` döndürür |
| `POST` | `/session/:id/message` | Bir mesaj gönder ve yanıt bekle | gövde: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` döndürür |
| `GET` | `/session/:id/message/:messageID` | Mesaj ayrıntılarını al | `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` döndürür |
| `POST` | `/session/:id/prompt_async` | Eşzamansız bir mesaj gönder (bekleme yok) | gövde: `/session/:id/message` ile aynı, `204 No Content` döndürür |
| `POST` | `/session/:id/command` | Bir eğik çizgi (slash) komutu çalıştır | gövde: `{ messageID?, agent?, model?, command, arguments }`, `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` döndürür |
| `POST` | `/session/:id/shell` | Bir kabuk komutu çalıştır | gövde: `{ agent, model?, command }`, `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` döndürür |
---
### Komutlar
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ---------- | --------------------- | --------------------------------------------- |
| `GET` | `/command` | Tüm komutları listele | <a href={typesUrl}><code>Command[]</code></a> |
---
### Dosyalar
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------------------------ | -------------------------------- | ----------------------------------------------------------------------------------------------- |
| `GET` | `/find?pattern=<pat>` | Dosyalarda metin ara | `path`, `lines`, `line_number`, `absolute_offset`, `submatches` içeren eşleşme nesneleri dizisi |
| `GET` | `/find/file?query=<q>` | Dosya ve dizinleri isme göre bul | `string[]` (yollar) |
| `GET` | `/find/symbol?query=<q>` | Çalışma alanı sembollerini bul | <a href={typesUrl}><code>Symbol[]</code></a> |
| `GET` | `/file?path=<path>` | Dosya ve dizinleri listele | <a href={typesUrl}><code>FileNode[]</code></a> |
| `GET` | `/file/content?path=<p>` | Bir dosyayı oku | <a href={typesUrl}><code>FileContent</code></a> |
| `GET` | `/file/status` | İzlenen dosyalar için durumu al | <a href={typesUrl}><code>File[]</code></a> |
#### `/find/file` sorgu parametreleri
- `query` (gerekli) - arama metni (bulanık eşleşme)
- `type` (isteğe bağlı) - sonuçları `"file"` veya `"directory"` ile sınırlama
- `directory` (isteğe bağlı) - arama için proje kökünü geçersiz kılma
- `limit` (isteğe bağlı) - en fazla sonuç (1-200)
- `dirs` (isteğe bağlı) - eski bayrak (`"false"` sadece dosyaları döndürür)
---
### Araçlar (Deneysel)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------------------------------------------- | ------------------------------------------------ | -------------------------------------------- |
| `GET` | `/experimental/tool/ids` | Tüm araç kimliklerini listele | <a href={typesUrl}><code>ToolIDs</code></a> |
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Bir model için araçları JSON şemalarıyla listele | <a href={typesUrl}><code>ToolList</code></a> |
---
### LSP, Biçimlendiriciler & MCP
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------------ | -------------------------------- | -------------------------------------------------------- |
| `GET` | `/lsp` | LSP sunucu durumunu al | <a href={typesUrl}><code>LSPStatus[]</code></a> |
| `GET` | `/formatter` | Biçimlendirici durumunu al | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
| `GET` | `/mcp` | MCP sunucu durumunu al | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
| `POST` | `/mcp` | Dinamik olarak MCP sunucusu ekle | gövde: `{ name, config }`, MCP durum nesnesi döndürür |
---
### Agent'lar
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | -------- | ----------------------------- | ------------------------------------------- |
| `GET` | `/agent` | Tüm mevcut agent'ları listele | <a href={typesUrl}><code>Agent[]</code></a> |
---
### Günlük (Logging)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------ | ---------------------------------------------------------------- | --------- |
| `POST` | `/log` | Günlük girdisi yaz. Gövde: `{ service, level, message, extra? }` | `boolean` |
---
### TUI
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ----------------------- | ------------------------------------------------------- | ---------------------- |
| `POST` | `/tui/append-prompt` | İsteme metin ekle | `boolean` |
| `POST` | `/tui/open-help` | Yardım iletişim kutusunu aç | `boolean` |
| `POST` | `/tui/open-sessions` | Oturum seçiciyi aç | `boolean` |
| `POST` | `/tui/open-themes` | Tema seçiciyi aç | `boolean` |
| `POST` | `/tui/open-models` | Model seçiciyi aç | `boolean` |
| `POST` | `/tui/submit-prompt` | Mevcut istemi gönder | `boolean` |
| `POST` | `/tui/clear-prompt` | İstemi temizle | `boolean` |
| `POST` | `/tui/execute-command` | Bir komut çalıştır (`{ command }`) | `boolean` |
| `POST` | `/tui/show-toast` | Toast bildirimi göster (`{ title?, message, variant }`) | `boolean` |
| `GET` | `/tui/control/next` | Bir sonraki kontrol isteğini bekle | Kontrol isteği nesnesi |
| `POST` | `/tui/control/response` | Bir kontrol isteğine yanıt ver (`{ body }`) | `boolean` |
---
### Kimlik Doğrulama (Auth)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ----------- | ----------------------------------------------------------------- | --------- |
| `PUT` | `/auth/:id` | Kimlik bilgilerini ayarla. Gövde sağlayıcı şemasıyla eşleşmelidir | `boolean` |
---
### Olaylar (Events)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | -------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------- |
| `GET` | `/event` | Sunucu tarafından gönderilen olay akışı (SSE). İlk olay `server.connected`, ardından veriyolu olayları | Sunucu tarafından gönderilen olay akışı |
---
### Dokümanlar (Docs)
| Yöntem | Yol | Açıklama | Yanıt |
| ------ | ------ | -------------------------- | -------------------------------- |
| `GET` | `/doc` | OpenAPI 3.1 spesifikasyonu | OpenAPI spec içeren HTML sayfası |
|