Saltearse al contenido

SDK

Cliente JS con tipos para el servidor opencode.

El SDK JS/TS de opencode proporciona un cliente con tipos para interactuar con el servidor. salo para construir integraciones y controlar opencode mediante programacin.

Ms informacin sobre cmo funciona el servidor. Para ejemplos, consulta los proyectos construidos por la comunidad.


Instalacin

Instala el SDK desde npm:

Ventana de terminal
npm install @opencode-ai/sdk

Crear cliente

Crea una instancia de opencode:

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

Esto inicia tanto un servidor como un cliente

Opciones

OptionTypeDescriptionDefault
hostnamestringNombre de host del servidor127.0.0.1
portnumberPuerto del servidor4096
signalAbortSignalSeal de aborto para cancelacinundefined
timeoutnumberTiempo de espera en ms para el inicio del servidor5000
configConfigObjeto de configuracin{}

Config

Puedes pasar un objeto de configuracin para personalizar el comportamiento. La instancia todava recupera tu opencode.json, pero puedes anular o agregar configuracin en lnea:

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(`Servidor ejecutndose en ${opencode.server.url}`)
opencode.server.close()

Solo cliente

Si ya tienes una instancia de opencode en ejecucin, puedes crear una instancia de cliente para conectarte a ella:

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

Opciones

OptionTypeDescriptionDefault
baseUrlstringURL del servidorhttp://localhost:4096
fetchfunctionImplementacin fetch personalizadaglobalThis.fetch
parseAsstringMtodo de anlisis de respuestaauto
responseStylestringEstilo de retorno: data o fieldsfields
throwOnErrorbooleanLanzar errores en lugar de retornarfalse

Tipos

El SDK incluye definiciones TypeScript para todos los tipos de API. Impprtalos directamente:

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

Todos los tipos se generan desde la especificacin OpenAPI del servidor y estn disponibles en el archivo de tipos.


Errores

El SDK puede lanzar errores que puedes atrapar y manejar:

try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Fallo al obtener la sesin:", (error as Error).message)
}

API

El SDK expone todas las API del servidor a travs de un cliente con tipos.


Global

MethodDescriptionResponse
global.health()Verificar el estado del servidor y la versin{ healthy: true, version: string }

Ejemplos

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

App

MethodDescriptionResponse
app.log()Escribir una entrada de registroboolean
app.agents()Listar todos los agentes disponiblesAgent[]

Ejemplos

// Escribir una entrada de registro
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operacin completada",
},
})
// Listar agentes disponibles
const agents = await client.app.agents()

Project

MethodDescriptionResponse
project.list()Listar todos los proyectosProject[]
project.current()Obtener el proyecto actualProject

Ejemplos

// Listar todos los proyectos
const projects = await client.project.list()
// Obtener el proyecto actual
const currentProject = await client.project.current()

Path

MethodDescriptionResponse
path.get()Obtener la ruta actualPath

Ejemplos

// Obtener informacin de la ruta actual
const pathInfo = await client.path.get()

Config

MethodDescriptionResponse
config.get()Obtener informacin de configuracinConfig
config.providers()Listar proveedores y modelos por defecto{ providers: Provider[], default: { [key: string]: string } }

Ejemplos

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

Sessions

MethodDescriptionNotes
session.list()Listar sesionesRetorna Session[]
session.get({ path })Obtener sesinRetorna Session
session.children({ path })Listar sesiones hijasRetorna Session[]
session.create({ body })Crear sesinRetorna Session
session.delete({ path })Eliminar sesin y todos sus datosRetorna boolean
session.update({ path, body })Actualizar propiedades de sesinRetorna Session
session.init({ path, body })Analizar app y crear AGENTS.mdRetorna boolean
session.abort({ path })Abortar una sesin en ejecucinRetorna boolean
session.share({ path })Compartir sesinRetorna Session
session.unshare({ path })Dejar de compartir sesinRetorna Session
session.summarize({ path, body })Resumir la sesinRetorna boolean
session.messages({ path })Listar mensajes en una sesinRetorna { info: Message, parts: Part[]}[]
session.message({ path })Obtener detalles del mensajeRetorna { info: Message, parts: Part[]}
session.prompt({ path, body })Enviar mensaje de promptbody.noReply: true retorna UserMessage (solo contexto). Por defecto retorna AssistantMessage con respuesta IA
session.command({ path, body })Enviar comando a la sesinRetorna { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Ejecutar un comando shellRetorna AssistantMessage
session.revert({ path, body })Revertir un mensajeRetorna Session
session.unrevert({ path })Restaurar mensajes revertidosRetorna Session
postSessionByIdPermissionsByPermissionId({ path, body })Responder a una solicitud de permisoRetorna boolean

Ejemplos

// Crear y gestionar sesiones
const session = await client.session.create({
body: { title: "Mi sesin" },
})
const sessions = await client.session.list()
// Enviar un mensaje de 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: "Hola!" }],
},
})
// Inyectar contexto sin activar respuesta IA (til para plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "Eres un asistente til." }],
},
})

Files

MethodDescriptionResponse
find.text({ query })Buscar texto en archivosMatriz de objetos de coincidencia con path, lines, line_number, absolute_offset, submatches
find.files({ query })Encontrar archivos y directorios por nombrestring[] (rutas)
find.symbols({ query })Encontrar smbolos del espacio de trabajoSymbol[]
file.read({ query })Leer un archivo{ type: "raw" | "patch", content: string }
file.status({ query? })Obtener estado para archivos rastreadosFile[]

find.files admite algunos campos de consulta opcionales:

  • type: "file" o "directory"
  • directory: anular la raz del proyecto para la bsqueda
  • limit: mx resultados (1-200)

Ejemplos

// Buscar y leer archivos
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 })Aadir texto al promptboolean
tui.openHelp()Abrir el dilogo de ayudaboolean
tui.openSessions()Abrir el selector de sesinboolean
tui.openThemes()Abrir el selector de temasboolean
tui.openModels()Abrir el selector de modelosboolean
tui.submitPrompt()Enviar el prompt actualboolean
tui.clearPrompt()Limpiar el promptboolean
tui.executeCommand({ body })Ejecutar un comandoboolean
tui.showToast({ body })Mostrar notificacin toastboolean

Ejemplos

// Controlar la interfaz TUI
await client.tui.appendPrompt({
body: { text: "Aadir esto al prompt" },
})
await client.tui.showToast({
body: { message: "Tarea completada", variant: "success" },
})

Auth

MethodDescriptionResponse
auth.set({ ... })Establecer credenciales de autenticacinboolean

Ejemplos

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

Events

MethodDescriptionResponse
event.subscribe()Flujo de eventos enviados por el servidorFlujo de eventos enviados por el servidor

Ejemplos

// Escuchar eventos en tiempo real
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Evento:", event.type, event.properties)
}