Salta ai contenuti

SDK

Client JS type-safe per il server opencode.

L’SDK JS/TS di opencode fornisce un client type-safe per interagire con il server. Usalo per creare integrazioni e controllare opencode in modo programmatico.

Scopri di piu su come funziona il server. Per esempi, guarda i progetti creati dalla comunita.


Installa

Installa l’SDK da npm:

Terminal window
npm install @opencode-ai/sdk

Crea un client

Crea un’istanza di opencode:

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

Questo avvia sia un server sia un client

Opzioni

OpzioneTipoDescrizionePredefinito
hostnamestringHostname del server127.0.0.1
portnumberPorta del server4096
signalAbortSignalSegnale di abort per annullareundefined
timeoutnumberTimeout in ms per avvio server5000
configConfigOggetto di configurazione{}

Configurazione

Puoi passare un oggetto di configurazione per personalizzare il comportamento. L’istanza legge comunque opencode.json, ma puoi sovrascrivere o aggiungere configurazione inline:

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()

Solo client

Se hai gia un’istanza di opencode in esecuzione, puoi creare un client per collegarti:

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

Opzioni

OpzioneTipoDescrizionePredefinito
baseUrlstringURL del serverhttp://localhost:4096
fetchfunctionImplementazione fetch customglobalThis.fetch
parseAsstringMetodo di parsing della rispostaauto
responseStylestringStile di ritorno: data o fieldsfields
throwOnErrorbooleanLancia errori invece di restituirlifalse

Tipi

L’SDK include definizioni TypeScript per tutti i tipi API. Importale direttamente:

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

Tutti i tipi sono generati dalla specifica OpenAPI del server e disponibili nel file dei tipi.


Errori

L’SDK puo lanciare errori che puoi intercettare e gestire:

try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}

API

L’SDK espone tutte le API del server tramite un client type-safe.


Globale

MetodoDescrizioneRisposta
global.health()Controlla stato e versione server{ healthy: true, version: string }

Esempi

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

App

MetodoDescrizioneRisposta
app.log()Scrive una voce di logboolean
app.agents()Elenca tutti gli agentiAgent[]

Esempi

// Write a log entry
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// List available agents
const agents = await client.app.agents()

Progetto

MetodoDescrizioneRisposta
project.list()Elenca i progettiProject[]
project.current()Progetto correnteProject

Esempi

// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()

Path

MetodoDescrizioneRisposta
path.get()Percorso correntePath

Esempi

// Get current path information
const pathInfo = await client.path.get()

Config

MetodoDescrizioneRisposta
config.get()Ottieni info configConfig
config.providers()Elenca provider e modelli default{ providers: Provider[], default: { [key: string]: string } }

Esempi

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

Sessioni

MetodoDescrizioneNote
session.list()Elenca le sessioniReturns Session[]
session.get({ path })Ottieni una sessioneReturns Session
session.children({ path })Elenca sessioni figlieReturns Session[]
session.create({ body })Crea una sessioneReturns Session
session.delete({ path })Elimina una sessioneReturns boolean
session.update({ path, body })Aggiorna proprieta della sessioneReturns Session
session.init({ path, body })Analizza app e crea AGENTS.mdReturns boolean
session.abort({ path })Interrompe una sessione in corsoReturns boolean
session.share({ path })Condivide la sessioneReturns Session
session.unshare({ path })Rimuove la condivisioneReturns Session
session.summarize({ path, body })Riassume la sessioneReturns boolean
session.messages({ path })Elenca i messaggi della sessioneReturns { info: Message, parts: Part[]}[]
session.message({ path })Ottieni dettagli di un messaggioReturns { info: Message, parts: Part[]}
session.prompt({ path, body })Invia un promptbody.noReply: true returns UserMessage (solo contesto). Di default ritorna AssistantMessage con risposta AI
session.command({ path, body })Invia un comando alla sessioneReturns { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Esegue un comando shellReturns AssistantMessage
session.revert({ path, body })Ripristina un messaggioReturns Session
session.unrevert({ path })Ripristina messaggi revertitiReturns Session
postSessionByIdPermissionsByPermissionId({ path, body })Risponde a una richiesta permessiReturns boolean

Esempi

// Create and manage sessions
const session = await client.session.create({
body: { title: "My session" },
})
const sessions = await client.session.list()
// Send a prompt message
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!" }],
},
})
// 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." }],
},
})

File

MetodoDescrizioneRisposta
find.text({ query })Cerca testo nei fileArray of match objects with path, lines, line_number, absolute_offset, submatches
find.files({ query })Trova file e directory per nomestring[] (paths)
find.symbols({ query })Trova simboli nel workspaceSymbol[]
file.read({ query })Legge un file{ type: "raw" | "patch", content: string }
file.status({ query? })Stato dei file tracciatiFile[]

find.files supporta alcuni campi query opzionali:

  • type: "file" or "directory"
  • directory: sovrascrive la root del progetto per la ricerca
  • limit: risultati massimi (1–200)

Esempi

// Search and read files
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

MetodoDescrizioneRisposta
tui.appendPrompt({ body })Aggiunge testo al promptboolean
tui.openHelp()Apre la finestra helpboolean
tui.openSessions()Apre il selettore sessioniboolean
tui.openThemes()Apre il selettore temiboolean
tui.openModels()Apre il selettore modelliboolean
tui.submitPrompt()Invia il prompt correnteboolean
tui.clearPrompt()Pulisce il promptboolean
tui.executeCommand({ body })Esegue un comandoboolean
tui.showToast({ body })Mostra una notifica toastboolean

Esempi

// Control TUI interface
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})

Autenticazione

MetodoDescrizioneRisposta
auth.set({ ... })Imposta credenziali authboolean

Esempi

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

Eventi

MetodoDescrizioneRisposta
event.subscribe()Stream di server-sent eventsStream di server-sent events

Esempi

// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}