Vai al contenuto
Installa

SDK

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 l’SDK da npm:

Terminale
npm install @opencode-ai/sdk

Crea un’istanza di opencode:

JavaScript
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{}

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

JavaScript
import { createOpencode } from "@opencode-ai/sdk"

const opencode = await createOpencode({
  hostname: "127.0.0.1",
  port: 4096,
  config: {
    model: "anthropic/claude-sonnet-5-5",
  },
})

console.log(`Server running at ${opencode.server.url}`)

opencode.server.close()

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

JavaScript
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

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

TypeScript
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.


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

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

Puoi richiedere un output JSON strutturato dal modello specificando un format con uno schema JSON. Il modello usera un tool StructuredOutput per restituire JSON validato che corrisponde al tuo schema.

TypeScript
const result = await client.session.prompt({
  path: { id: sessionId },
  body: {
    parts: [{ type: "text", text: "Research Anthropic and provide company info" }],
    format: {
      type: "json_schema",
      schema: {
        type: "object",
        properties: {
          company: { type: "string", description: "Company name" },
          founded: { type: "number", description: "Year founded" },
          products: {
            type: "array",
            items: { type: "string" },
            description: "Main products",
          },
        },
        required: ["company", "founded"],
      },
    },
  },
})

// Access the structured output
console.log(result.data.info.structured_output)
// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }

TipoDescrizione
textPredefinito. Risposta di testo standard (nessun output strutturato)
json_schemaRestituisce JSON validato che corrisponde allo schema fornito

Quando usi type: 'json_schema', fornisci:

CampoTipoDescrizione
type'json_schema'Richiesto. Specifica la modalita schema JSON
schemaobjectRichiesto. Oggetto JSON Schema che definisce la struttura dell’output
retryCountnumberOpzionale. Numero di tentativi di validazione (default: 2)

Se il modello non riesce a produrre un output strutturato valido dopo tutti i tentativi, la risposta includera un StructuredOutputError:

TypeScript
if (result.data.info.error?.name === "StructuredOutputError") {
  console.error("Failed to produce structured output:", result.data.info.error.message)
  console.error("Attempts:", result.data.info.error.retries)
}

  1. Fornisci descrizioni chiare nelle proprieta del tuo schema per aiutare il modello a capire quali dati estrarre
  2. Usa required per specificare quali campi devono essere presenti
  3. Mantieni gli schemi focalizzati - schemi annidati complessi potrebbero essere piu difficili da compilare correttamente per il modello
  4. Imposta un retryCount appropriato - aumenta per schemi complessi, diminuisci per quelli semplici

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


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

Esempi

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

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

Esempi

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

MetodoDescrizioneRisposta
project.list()Elenca i progettiProject[]

Esempi

JavaScript
// List all projects
const projects = await client.project.list()

MetodoDescrizioneRisposta
path.get()Percorso correntePath

Esempi

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

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

Esempi

JavaScript
const config = await client.config.get()

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

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. Supporta body.outputFormat per output strutturato
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

JavaScript
// 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-sonnet-5-5" },
    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." }],
  },
})

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

JavaScript
// 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" },
})

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

JavaScript
// Control TUI interface
await client.tui.appendPrompt({
  body: { text: "Add this to prompt" },
})

await client.tui.showToast({
  body: { message: "Task completed", variant: "success" },
})

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

Esempi

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

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

Esempi

JavaScript
// 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)
}