SDK
opencode sunucusu için type-safe JS istemcisi.
opencode JS/TS SDK, sunucu ile etkileşmek için type-safe bir istemci sağlar. opencode’u programatik olarak kontrol etmek ve entegrasyonlar oluşturmak için kullanabilirsiniz.
Sunucu sayfasında nasıl çalıştığını görebilir, örnekler için topluluğun oluşturduğu projeler bölümüne bakabilirsiniz.
Kurulum
SDK’yı npm’den yükleyin:
npm install @opencode-ai/sdkİstemci Oluşturma
Bir opencode örneği oluşturun:
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()Bu, hem bir sunucu hem de bir istemci başlatır
Seçenekler
| Seçenek | Tip | Açıklama | Varsayılan |
|---|---|---|---|
hostname | string | Sunucu ana bilgisayar adı | 127.0.0.1 |
port | number | Sunucu bağlantı noktası | 4096 |
signal | AbortSignal | İptal için durdurma sinyali | undefined |
timeout | number | Sunucu başlatma için ms cinsinden zaman aşımı | 5000 |
config | Config | Yapılandırma nesnesi | {} |
Yapılandırma
Davranışı özelleştirmek için bir yapılandırma nesnesi iletebilirsiniz. Örnek yine de opencode.json dosyanızı alır, ancak yapılandırmayı satır içi olarak geçersiz kılabilir veya ekleyebilirsiniz:
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()Yalnızca istemci
Halihazırda çalışan bir opencode örneğiniz varsa, ona bağlanmak için bir istemci örneği oluşturabilirsiniz:
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({ baseUrl: "http://localhost:4096",})Seçenekler
| Seçenek | Tip | Açıklama | Varsayılan |
|---|---|---|---|
baseUrl | string | Sunucunun URL’si | http://localhost:4096 |
fetch | function | Özel fetch uygulaması | globalThis.fetch |
parseAs | string | Yanıt ayrıştırma yöntemi | auto |
responseStyle | string | Dönüş stili: data veya fields | fields |
throwOnError | boolean | Dönüş yerine hata fırlat | false |
Türler
SDK, tüm API türleri için TypeScript tanımlarını içerir. Bunları doğrudan içe aktarın:
import type { Session, Message, Part } from "@opencode-ai/sdk"Tüm tipler, sunucunun OpenAPI spesifikasyonundan oluşturulur ve tipler dosyasında mevcuttur.
Hatalar
SDK, yakalayabileceğiniz ve işleyebileceğiniz hatalar fırlatabilir:
try { await client.session.get({ path: { id: "invalid-id" } })} catch (error) { console.error("Failed to get session:", (error as Error).message)}API’ler
SDK, tüm sunucu API’lerini type-safe bir istemci aracılığıyla sunar.
Global
| Yöntem | Açıklama | Yanıt |
|---|---|---|
global.health() | Sunucu sağlığını ve sürümünü kontrol et | { healthy: true, version: string } |
Örnekler
const health = await client.global.health()console.log(health.data.version)App
| Yöntem | Açıklama | Yanıt |
|---|---|---|
app.log() | Bir günlük girdisi yaz | boolean |
app.agents() | Tüm mevcut agent’ları listele | Agent[] |
Örnekler
// Write a log entryawait client.app.log({ body: { service: "my-app", level: "info", message: "Operation completed", },})
// List available agentsconst agents = await client.app.agents()Project
| Yöntem | Açıklama | Yanıt |
|---|---|---|
project.list() | Tüm projeleri listele | Project[] |
project.current() | Mevcut projeyi al | Project |
Örnekler
// List all projectsconst projects = await client.project.list()
// Get current projectconst currentProject = await client.project.current()Path
| Yöntem | Açıklama | Yanıt |
|---|---|---|
path.get() | Mevcut yolu al | Path |
Örnekler
// Get current path informationconst pathInfo = await client.path.get()Config
| Yöntem | Açıklama | Yanıt |
|---|---|---|
config.get() | Yapılandırma bilgisini al | Config |
config.providers() | Sağlayıcıları ve varsayılan modelleri listele | { providers: Provider[], default: { [key: string]: string } } |
Örnekler
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()Oturumlar
| Yöntem | Açıklama | Notlar |
|---|---|---|
session.list() | Oturumları listele | Session[] döndürür |
session.get({ path }) | Oturum al | Session döndürür |
session.children({ path }) | Alt oturumları listele | Session[] döndürür |
session.create({ body }) | Oturum oluştur | Session döndürür |
session.delete({ path }) | Oturum sil | boolean döndürür |
session.update({ path, body }) | Oturum özelliklerini güncelle | Session döndürür |
session.init({ path, body }) | Uygulamayı analiz et ve AGENTS.md oluştur | boolean döndürür |
session.abort({ path }) | Çalışan bir oturumu iptal et | boolean döndürür |
session.share({ path }) | Oturum paylaş | Session döndürür |
session.unshare({ path }) | Oturum paylaşımını kaldır | Session döndürür |
session.summarize({ path, body }) | Oturumu özetle | boolean döndürür |
session.messages({ path }) | Oturumdaki mesajları listele | { info: Message, parts: Part[]}[] döndürür |
session.message({ path }) | Mesaj ayrıntılarını al | { info: Message, parts: Part[]} döndürür |
session.prompt({ path, body }) | İstem mesajı gönder | body.noReply: true UserMessage (yalnızca bağlam) döndürür. Varsayılan olarak AI yanıtıyla AssistantMessage döndürür |
session.command({ path, body }) | Oturuma komut gönder | { info: AssistantMessage, parts: Part[]} döndürür |
session.shell({ path, body }) | Bir kabuk komutu çalıştır | AssistantMessage döndürür |
session.revert({ path, body }) | Bir mesajı geri al | Session döndürür |
session.unrevert({ path }) | Geri alınan mesajları geri yükle | Session döndürür |
postSessionByIdPermissionsByPermissionId({ path, body }) | Bir izin isteğine yanıt ver | boolean döndürür |
Örnekler
// Create and manage sessionsconst session = await client.session.create({ body: { title: "My session" },})
const sessions = await client.session.list()
// Send a prompt messageconst 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." }], },})Dosyalar
| Yöntem | Açıklama | Yanıt |
|---|---|---|
find.text({ query }) | Dosyalarda metin ara | path, lines, line_number, absolute_offset, submatches içeren eşleşme nesneleri dizisi |
find.files({ query }) | Dosya ve dizinleri isme göre bul | string[] (yollar) |
find.symbols({ query }) | Çalışma alanı sembollerini bul | Symbol[] |
file.read({ query }) | Bir dosyayı oku | { type: "raw" | "patch", content: string } |
file.status({ query? }) | İzlenen dosyalar için durumu al | File[] |
find.files birkaç isteğe bağlı sorgu alanını destekler:
type:"file"veya"directory"directory: arama için proje kökünü geçersiz kılmalimit: maksimum sonuç (1-200)
Örnekler
// Search and read filesconst 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
| Yöntem | Açıklama | Yanıt |
|---|---|---|
tui.appendPrompt({ body }) | İsteme metin ekle | boolean |
tui.openHelp() | Yardım iletişim kutusunu aç | boolean |
tui.openSessions() | Oturum seçiciyi aç | boolean |
tui.openThemes() | Tema seçiciyi aç | boolean |
tui.openModels() | Model seçiciyi aç | boolean |
tui.submitPrompt() | Mevcut istemi gönder | boolean |
tui.clearPrompt() | İstemi temizle | boolean |
tui.executeCommand({ body }) | Bir komut çalıştır | boolean |
tui.showToast({ body }) | Toast bildirimi göster | boolean |
Örnekler
// Control TUI interfaceawait client.tui.appendPrompt({ body: { text: "Add this to prompt" },})
await client.tui.showToast({ body: { message: "Task completed", variant: "success" },})Auth
| Yöntem | Açıklama | Yanıt |
|---|---|---|
auth.set({ ... }) | Kimlik bilgilerini ayarla | boolean |
Örnekler
await client.auth.set({ path: { id: "anthropic" }, body: { type: "api", key: "your-api-key" },})Olaylar
| Yöntem | Açıklama | Yanıt |
|---|---|---|
event.subscribe() | Sunucu tarafından gönderilen olay akışı | Sunucu tarafından gönderilen olay akışı |
Örnekler
// Listen to real-time eventsconst events = await client.event.subscribe()for await (const event of events.stream) { console.log("Event:", event.type, event.properties)}