Salta ai contenuti

SDK

Client JS con tipi per il server opencode.

L’SDK JS/TS di opencode fornisce un client con tipi per interagire con il server. Usalo per creare integrazioni e controllare opencode programmaticamente.

Ulteriori informazioni sul funzionamento del server. Per esempi, consulta i progetti creati dalla community.


Installazione

Installa l’SDK da npm:

Terminal window
npm install @opencode-ai/sdk

Creare client

Crea un’istanza di opencode:

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

Questo avvia sia un server che un client

Opzioni

OptionTypeDescriptionDefault
hostnamestringNome host del server127.0.0.1
portnumberPorta del server4096
signalAbortSignalSegnale di aborto per la cancellazioneundefined
timeoutnumberTimeout in ms per l’avvio del server5000
configConfigOggetto di configurazione{}

Config

Puoi passare un oggetto di configurazione per personalizzare il comportamento. L’istanza recupera ancora il tuo 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 in esecuzione su ${opencode.server.url}`)
opencode.server.close()

Solo client

Se hai gi un’istanza di opencode in esecuzione, puoi creare un’istanza client per connetterti ad essa:

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

Opzioni

OptionTypeDescriptionDefault
baseUrlstringURL del serverhttp://localhost:4096
fetchfunctionImplementazione fetch personalizzataglobalThis.fetch
parseAsstringMetodo di parsing della rispostaauto
responseStylestringStile di ritorno: data o fieldsfields
throwOnErrorbooleanLanciare errori invece di restituirefalse

Tipi

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

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

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


Errori

L’SDK pu lanciare errori che puoi catturare e gestire:

try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Impossibile ottenere la sessione:", (error as Error).message)
}

API

L’SDK espone tutte le API del server attraverso un client con tipi.


Global

MethodDescriptionResponse
global.health()Verificare lo stato del server e la versione{ healthy: true, version: string }

Esempi

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

App

MethodDescriptionResponse
app.log()Scrivere una voce di logboolean
app.agents()Elencare tutti gli agent disponibiliAgent[]

Esempi

// Scrivere una voce di log
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operazione completata",
},
})
// Elencare gli agenti disponibili
const agents = await client.app.agents()

Project

MethodDescriptionResponse
project.list()Elencare tutti i progettiProject[]
project.current()Ottenere il progetto attualeProject

Esempi

// Elencare tutti i progetti
const projects = await client.project.list()
// Ottenere il progetto attuale
const currentProject = await client.project.current()

Path

MethodDescriptionResponse
path.get()Ottenere il percorso attualePath

Esempi

// Ottenere informazioni sul percorso attuale
const pathInfo = await client.path.get()

Config

MethodDescriptionResponse
config.get()Ottenere informazioni di configurazioneConfig
config.providers()Elencare provider e modelli predefiniti{ providers: Provider[], default: { [key: string]: string } }

Esempi

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

Sessions

MethodDescriptionNotes
session.list()Elencare le sessioniRestituisce Session[]
session.get({ path })Ottenere sessionRestituisce Session
session.children({ path })Elencare le sessioni figlieRestituisce Session[]
session.create({ body })Creare sessionRestituisce Session
session.delete({ path })Eliminare session e tutti i suoi datiRestituisce boolean
session.update({ path, body })Aggiornare le propriet della sessionRestituisce Session
session.init({ path, body })Analizzare app e creare AGENTS.mdRestituisce boolean
session.abort({ path })Abortare una sessione in esecuzioneRestituisce boolean
session.share({ path })Condividere sessionRestituisce Session
session.unshare({ path })Annullare la condivisione della sessionRestituisce Session
session.summarize({ path, body })Riassumere la sessionRestituisce boolean
session.messages({ path })Elencare i messaggi in una sessioneRestituisce { info: Message, parts: Part[]}[]
session.message({ path })Ottenere dettagli del messaggioRestituisce { info: Message, parts: Part[]}
session.prompt({ path, body })Inviare messaggio di promptbody.noReply: true restituisce UserMessage (solo contesto). Il default restituisce AssistantMessage con risposta AI
session.command({ path, body })Inviare comando alla sessioneRestituisce { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Eseguire un comando shellRestituisce AssistantMessage
session.revert({ path, body })Revertire un messaggioRestituisce Session
session.unrevert({ path })Ripristinare i messaggi revertitiRestituisce Session
postSessionByIdPermissionsByPermissionId({ path, body })Rispondere a una richiesta di autorizzazioneRestituisce boolean

Esempi

// Creare e gestire sessioni
const session = await client.session.create({
body: { title: "La mia sessione" },
})
const sessions = await client.session.list()
// Inviare un messaggio di prompt
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Ciao!" }],
},
})
// Iniettare contesto senza attivare risposta AI (utile per i plugin)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "Sei un assistente utile." }],
},
})

Files

MethodDescriptionResponse
find.text({ query })Cercare testo nei fileArray di oggetti di corrispondenza con path, lines, line_number, absolute_offset, submatches
find.files({ query })Trovare file e directory per nomestring[] (percorsi)
find.symbols({ query })Trovare simboli dello spazio di lavoroSymbol[]
file.read({ query })Leggere un file{ type: "raw" | "patch", content: string }
file.status({ query? })Ottenere stato per i file tracciatiFile[]

find.files supporta alcuni campi di query opzionali:

  • type: "file" o "directory"
  • directory: sovrascrivere la radice del progetto per la ricerca
  • limit: risultati massimi (1-200)

Esempi

// Cercare e leggere file
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 })Aggiungere testo al promptboolean
tui.openHelp()Aprire la finestra di aiutoboolean
tui.openSessions()Aprire il selettore di sessioneboolean
tui.openThemes()Aprire il selettore di temiboolean
tui.openModels()Aprire il selettore di modelliboolean
tui.submitPrompt()Inviare il prompt attualeboolean
tui.clearPrompt()Cancella il promptboolean
tui.executeCommand({ body })Eseguire un comandoboolean
tui.showToast({ body })Mostrare notifica toastboolean

Esempi

// Controllare l'interfaccia TUI
await client.tui.appendPrompt({
body: { text: "Aggiungi questo al prompt" },
})
await client.tui.showToast({
body: { message: "Attivit completata", variant: "success" },
})

Auth

MethodDescriptionResponse
auth.set({ ... })Impostare credenziali di autenticazioneboolean

Esempi

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

Events

MethodDescriptionResponse
event.subscribe()Flusso di eventi inviati dal serverFlusso di eventi inviati dal server

Esempi

// Ascoltare eventi in tempo reale
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Evento:", event.type, event.properties)
}