Zum Inhalt springen

SDK

Typsicherer JS-Client fr opencode-Server.

Das opencode JS/TS SDK stellt einen typsicheren Client fr die Interaktion mit dem Server bereit. Verwenden Sie es, um Integrationen zu erstellen und opencode programmgesteuert zu steuern.

Weitere Informationen ber die Funktionsweise des Servers. Beispiele finden Sie in den von der Gemeinschaft erstellten Projekten.


Installation

Installieren Sie das SDK von npm:

Terminal-Fenster
npm install @opencode-ai/sdk

Client erstellen

Erstellen Sie eine Instanz von opencode:

import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()

Dadurch werden sowohl ein Server als auch ein Client gestartet

Optionen

OptionTypeDescriptionDefault
hostnamestringServer-Hostname127.0.0.1
portnumberServer-Port4096
signalAbortSignalAbort-Signal fr Abbruchundefined
timeoutnumberTimeout in ms fr Serverstart5000
configConfigKonfigurationsobjekt{}

Config

Sie knnen ein Konfigurationsobjekt bergeben, um das Verhalten anzupassen. Die Instanz ruft weiterhin Ihre opencode.json ab, Sie knnen jedoch Konfigurationen inline berschreiben oder hinzufgen:

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 luft unter ${opencode.server.url}`)
opencode.server.close()

Nur Client

Wenn Sie bereits eine ausgefhrte Instanz von opencode haben, knnen Sie eine Client-Instanz erstellen, um sich damit zu verbinden:

import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})

Optionen

OptionTypeDescriptionDefault
baseUrlstringURL des Servershttp://localhost:4096
fetchfunctionBenutzerdefinierte fetch-ImplementierungglobalThis.fetch
parseAsstringAntwort-Parsing-Methodeauto
responseStylestringRckgabe-Stil: data oder fieldsfields
throwOnErrorbooleanFehler werfen statt zurckgebenfalse

Typen

Das SDK enthlt TypeScript-Definitionen fr alle API-Typen. Importieren Sie sie direkt:

import type { Session, Message, Part } from "@opencode-ai/sdk"

Alle Typen werden aus der OpenAPI-Spezifikation des Servers generiert und sind in der Typdatei verfgbar.


Fehler

Das SDK kann Fehler werfen, die Sie abfangen und behandeln knnen:

try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Fehler beim Abrufen der Sitzung:", (error as Error).message)
}

APIs

Das SDK macht alle Server-APIs ber einen typsicheren Client verfgbar.


Global

MethodDescriptionResponse
global.health()Server-Status und Version prfen{ healthy: true, version: string }

Beispiele

const health = await client.global.health()
console.log(health.data.version)

App

MethodDescriptionResponse
app.log()Log-Eintrag schreibenboolean
app.agents()Alle verfgbaren Agents auflistenAgent[]

Beispiele

// Log-Eintrag schreiben
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Vorgang abgeschlossen",
},
})
// Verfgbare Agents auflisten
const agents = await client.app.agents()

Project

MethodDescriptionResponse
project.list()Alle Projekte auflistenProject[]
project.current()Aktuelles Projekt abrufenProject

Beispiele

// Alle Projekte auflisten
const projects = await client.project.list()
// Aktuelles Projekt abrufen
const currentProject = await client.project.current()

Path

MethodDescriptionResponse
path.get()Aktuellen Pfad abrufenPath

Beispiele

// Aktuelle Pfadinformationen abrufen
const pathInfo = await client.path.get()

Config

MethodDescriptionResponse
config.get()Konfigurations-Informationen abrufenConfig
config.providers()Anbieter und Standardmodelle auflisten{ providers: Provider[], default: { [key: string]: string } }

Beispiele

const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()

Sessions

MethodDescriptionNotes
session.list()Sitzungen auflistenGibt Session[] zurck
session.get({ path })Sitzung abrufenGibt Session zurck
session.children({ path })Kindersitzungen auflistenGibt Session[] zurck
session.create({ body })Sitzung erstellenGibt Session zurck
session.delete({ path })Sitzung und alle ihre Daten lschenGibt boolean zurck
session.update({ path, body })Sitzungseigenschaften aktualisierenGibt Session zurck
session.init({ path, body })App analysieren und AGENTS.md erstellenGibt boolean zurck
session.abort({ path })Eine laufende Sitzung abbrechenGibt boolean zurck
session.share({ path })Sitzung teilenGibt Session zurck
session.unshare({ path })Freigabe der Sitzung aufhebenGibt Session zurck
session.summarize({ path, body })Sitzung zusammenfassenGibt boolean zurck
session.messages({ path })Nachrichten in einer Sitzung auflistenGibt { info: Message, parts: Part[]}[] zurck
session.message({ path })Nachrichtendetails abrufenGibt { info: Message, parts: Part[]`} zurck
session.prompt({ path, body })Prompt-Nachricht sendenbody.noReply: true gibt UserMessage zurck (nur Kontext). Standard gibt AssistantMessage mit KI-Antwort zurck
session.command({ path, body })Befehl an Sitzung sendenGibt { info: AssistantMessage, parts: Part[]`} zurck
session.shell({ path, body })Shell-Befehl ausfhrenGibt AssistantMessage zurck
session.revert({ path, body })Nachricht zurcknehmenGibt Session zurck
session.unrevert({ path })Alle zurckgenommenen Nachrichten wiederherstellenGibt Session zurck
postSessionByIdPermissionsByPermissionId({ path, body })Auf eine Berechtigungsanfrage antwortenGibt boolean zurck

Beispiele

// Sitzungen erstellen und verwalten
const session = await client.session.create({
body: { title: "Meine Sitzung" },
})
const sessions = await client.session.list()
// Prompt-Nachricht senden
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Hallo!" }],
},
})
// Kontext injizieren, ohne KI-Antwort auszulsen (ntzlich fr Plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "Du bist ein hilfreicher Assistent." }],
},
})

Files

MethodDescriptionResponse
find.text({ query })Text in Dateien suchenArray von bereinstimmungsobjekten mit path, lines, line_number, absolute_offset, submatches
find.files({ query })Dateien und Verzeichnisse nach Name findenstring[] (Pfade)
find.symbols({ query })Arbeitsbereich-Symbole findenSymbol[]
file.read({ query })Eine Datei lesen{ type: "raw" | "patch", content: string }
file.status({ query? })Status fr verfolgte Dateien abrufenFile[]

find.files untersttzt einige optionale Abfragefelder:

  • type: "file" oder "directory"
  • directory: Stammverzeichnis fr die Suche berschreiben
  • limit: Max Ergebnisse (1-200)

Beispiele

// Dateien suchen und lesen
const 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

MethodDescriptionResponse
tui.appendPrompt({ body })Text an Prompt anhngenboolean
tui.openHelp()Hilfe-Dialog ffnenboolean
tui.openSessions()Sitzungs-Auswahl ffnenboolean
tui.openThemes()Themen-Auswahl ffnenboolean
tui.openModels()Modellauswahl ffnenboolean
tui.submitPrompt()Aktuellen Prompt absendenboolean
tui.clearPrompt()Prompt lschenboolean
tui.executeCommand({ body })Befehl ausfhrenboolean
tui.showToast({ body })Toast-Benachrichtigung anzeigenboolean

Beispiele

// TUI-Schnittstelle steuern
await client.tui.appendPrompt({
body: { text: "Dies zum Prompt hinzufgen" },
})
await client.tui.showToast({
body: { message: "Aufgabe abgeschlossen", variant: "success" },
})

Auth

MethodDescriptionResponse
auth.set({ ... })Authentifizierungs-Anmeldedaten festlegenboolean

Beispiele

await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})

Events

MethodDescriptionResponse
event.subscribe()Server-Sent-Events-StreamServer-Sent-Events-Stream

Beispiele

// Echtzeit-Events abonnieren
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}