SDK
Typsicherer JS-Client für den opencode-Server.
Das opencode JS/TS SDK bietet einen typsicheren Client für die Interaktion mit dem Server. Verwenden Sie es, um Integrationen zu erstellen und opencode programmatisch zu steuern.
Erfahren Sie mehr über die Funktionsweise des Servers. Schauen Sie sich die von der Community erstellten Projekte an.
Installation
Installieren Sie das SDK von npm:
npm install @opencode-ai/sdkClient erstellen
Erstellen Sie eine opencode-Instanz:
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()Dies startet sowohl einen Server als auch einen Client.
Optionen
| Option | Typ | Beschreibung | Standard |
|---|---|---|---|
hostname | string | Server-Hostname | 127.0.0.1 |
port | number | Server-Port | 4096 |
signal | AbortSignal | Abbruchsignal für Stornierung | undefined |
timeout | number | Timeout in ms für Serverstart | 5000 |
config | Config | Konfigurationsobjekt | {} |
Konfiguration
Sie können ein Konfigurationsobjekt übergeben, um das Verhalten anzupassen. Die Instanz liest weiterhin Ihre opencode.json, aber Sie können die Konfiguration inline überschreiben oder ergänzen:
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()Nur Client
Wenn Sie bereits eine laufende opencode-Instanz haben, können Sie eine Client-Instanz erstellen, um sich damit zu verbinden:
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})Optionen
| Option | Typ | Beschreibung | Standard |
|---|---|---|---|
baseUrl | string | URL des Servers | http://localhost:4096 |
fetch | function | Benutzerdefinierte fetch-Implementierung | globalThis.fetch |
parseAs | string | Methode zur Antwortanalyse | auto |
responseStyle | string | Rückgabestil: data oder fields | fields |
throwOnError | boolean | Fehler werfen statt zurückgeben | false |
Typen
Das SDK enthält TypeScript-Definitionen für 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 (opens in a new tab) verfügbar.
Fehler
Das SDK kann Fehler werfen, die Sie abfangen und behandeln können:
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}APIs
Das SDK stellt alle Server-APIs über einen typsicheren Client bereit.
Global
| Methode | Beschreibung | Antwort |
|---|---|---|
global.health() | Servergesundheit und Version prüfen | { healthy: true, version: string } |
Beispiele
const health = await client.global.health()
console.log(health.data.version)App
| Methode | Beschreibung | Antwort |
|---|---|---|
app.log() | Einen Logeintrag schreiben | boolean |
app.agents() | Alle verfügbaren Agenten auflisten | Agent[] (opens in a new tab) |
Beispiele
// Einen Logeintrag schreiben
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// Verfügbare Agenten auflisten
const agents = await client.app.agents()Project
| Methode | Beschreibung | Antwort |
|---|---|---|
project.list() | Alle Projekte auflisten | Project[] (opens in a new tab) |
project.current() | Aktuelles Projekt abrufen | Project (opens in a new tab) |
Beispiele
// Alle Projekte auflisten
const projects = await client.project.list()
// Aktuelles Projekt abrufen
const currentProject = await client.project.current()Path
| Methode | Beschreibung | Antwort |
|---|---|---|
path.get() | Aktuellen Pfad abrufen | Path (opens in a new tab) |
Beispiele
// Aktuelle Pfadinformationen abrufen
const pathInfo = await client.path.get()Config
| Methode | Beschreibung | Antwort |
|---|---|---|
config.get() | Konfigurationsinformationen abrufen | Config (opens in a new tab) |
config.providers() | Anbieter und Standardmodelle auflisten | { providers: Provider[] (opens in a new tab), default: { [key: string]: string } } |
Beispiele
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()Sessions
| Methode | Beschreibung | Hinweise |
|---|---|---|
session.list() | Sitzungen auflisten | Gibt Session[] (opens in a new tab) zurück |
session.get({ path }) | Sitzung abrufen | Gibt Session (opens in a new tab) zurück |
session.children({ path }) | Untersitzungen auflisten | Gibt Session[] (opens in a new tab) zurück |
session.create({ body }) | Sitzung erstellen | Gibt Session (opens in a new tab) zurück |
session.delete({ path }) | Sitzung löschen | Gibt boolean zurück |
session.update({ path, body }) | Sitzungseigenschaften aktualisieren | Gibt Session (opens in a new tab) zurück |
session.init({ path, body }) | App analysieren und AGENTS.md erstellen | Gibt boolean zurück |
session.abort({ path }) | Laufende Sitzung abbrechen | Gibt boolean zurück |
session.share({ path }) | Sitzung teilen | Gibt Session (opens in a new tab) zurück |
session.unshare({ path }) | Sitzungsfreigabe aufheben | Gibt Session (opens in a new tab) zurück |
session.summarize({ path, body }) | Sitzung zusammenfassen | Gibt boolean zurück |
session.messages({ path }) | Nachrichten in einer Sitzung auflisten | Gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[] zurück |
session.message({ path }) | Nachrichtendetails abrufen | Gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
session.prompt({ path, body }) | Prompt-Nachricht senden | body.noReply: true gibt UserMessage zurück (nur Kontext). Standard gibt AssistantMessage (opens in a new tab) mit KI-Antwort zurück |
session.command({ path, body }) | Befehl an Sitzung senden | Gibt { info: AssistantMessage (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
session.shell({ path, body }) | Shell-Befehl ausführen | Gibt AssistantMessage (opens in a new tab) zurück |
session.revert({ path, body }) | Nachricht rückgängig machen | Gibt Session (opens in a new tab) zurück |
session.unrevert({ path }) | Rückgängig gemachte Nachrichten wiederherstellen | Gibt Session (opens in a new tab) zurück |
postSessionByIdPermissionsByPermissionId({ path, body }) | Auf Berechtigungsanfrage antworten | Gibt boolean zurück |
Beispiele
// Sitzungen erstellen und verwalten
const session = await client.session.create({
body: { title: "My session" },
})
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: "Hello!" }],
},
})
// Kontext einfügen ohne KI-Antwort auszulösen (nützlich für Plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "You are a helpful assistant." }],
},
})Files
| Methode | Beschreibung | Antwort |
|---|---|---|
find.text({ query }) | Text in Dateien suchen | Array von Match-Objekten mit path, lines, line_number, absolute_offset, submatches |
find.files({ query }) | Dateien und Verzeichnisse nach Namen finden | string[] (Pfade) |
find.symbols({ query }) | Workspace-Symbole finden | Symbol[] (opens in a new tab) |
file.read({ query }) | Datei lesen | { type: "raw" | "patch", content: string } |
file.status({ query? }) | Status für verfolgte Dateien abrufen | File[] (opens in a new tab) |
find.files unterstützt einige optionale Abfragefelder:
type:"file"oder"directory"directory: Projektstamm für die Suche überschreibenlimit: Maximale 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
| Methode | Beschreibung | Antwort |
|---|---|---|
tui.appendPrompt({ body }) | Text zum Prompt hinzufügen | boolean |
tui.openHelp() | Hilfedialog öffnen | boolean |
tui.openSessions() | Sitzungsauswahl öffnen | boolean |
tui.openThemes() | Themenauswahl öffnen | boolean |
tui.openModels() | Modellauswahl öffnen | boolean |
tui.submitPrompt() | Aktuellen Prompt absenden | boolean |
tui.clearPrompt() | Prompt leeren | boolean |
tui.executeCommand({ body }) | Befehl ausführen | boolean |
tui.showToast({ body }) | Toast-Benachrichtigung anzeigen | boolean |
Beispiele
// TUI-Oberfläche steuern
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})Auth
| Methode | Beschreibung | Antwort |
|---|---|---|
auth.set({ ... }) | Authentifizierungsdaten festlegen | boolean |
Beispiele
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})Events
| Methode | Beschreibung | Antwort |
|---|---|---|
event.subscribe() | Server-Sent-Events-Stream | Server-Sent-Events-Stream |
Beispiele
// Echtzeit-Events abhören
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}