Español
Documentación
SDK

SDK

Cliente JS con tipos seguros para el servidor de opencode.

El SDK JS/TS de opencode proporciona un cliente con tipos seguros para interactuar con el servidor. Úsalo para construir integraciones y controlar opencode programáticamente.

Aprende más sobre cómo funciona el servidor. Consulta los proyectos construidos por la comunidad.


Instalación

Instala el SDK desde npm:

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

OpciónTipoDescripciónPredeterminado
hostnamestringNombre de host del servidor127.0.0.1
portnumberPuerto del servidor4096
signalAbortSignalSeñal de cancelaciónundefined
timeoutnumberTiempo de espera en ms para inicio del servidor5000
configConfigObjeto de configuración{}

Configuración

Puedes pasar un objeto de configuración para personalizar el comportamiento. La instancia aún lee tu opencode.json, pero puedes sobrescribir o agregar configuración en línea:

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 cliente

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

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

Opciones

OpciónTipoDescripciónPredeterminado
baseUrlstringURL del servidorhttp://localhost:4096
fetchfunctionImplementación personalizada de fetchglobalThis.fetch
parseAsstringMétodo de análisis 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. Impórtalos directamente:

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

Todos los tipos se generan a partir de la especificación OpenAPI del servidor y están disponibles en el archivo de tipos (opens in a new tab).


Errores

El SDK puede lanzar errores que puedes capturar y manejar:

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

APIs

El SDK expone todas las APIs del servidor a través de un cliente con tipos seguros.


Global

MétodoDescripciónRespuesta
global.health()Verificar salud y versión del servidor{ healthy: true, version: string }

Ejemplos

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

App

MétodoDescripciónRespuesta
app.log()Escribir una entrada de registroboolean
app.agents()Listar todos los agentes disponiblesAgent[] (opens in a new tab)

Ejemplos

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

Project

MétodoDescripciónRespuesta
project.list()Listar todos los proyectosProject[] (opens in a new tab)
project.current()Obtener proyecto actualProject (opens in a new tab)

Ejemplos

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

Path

MétodoDescripciónRespuesta
path.get()Obtener ruta actualPath (opens in a new tab)

Ejemplos

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

Config

MétodoDescripciónRespuesta
config.get()Obtener información de configuraciónConfig (opens in a new tab)
config.providers()Listar proveedores y modelos predeterminados{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Ejemplos

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

Sessions

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

Ejemplos

// Crear y gestionar sesiones
const session = await client.session.create({
  body: { title: "My session" },
})
 
const sessions = await client.session.list()
 
// Enviar 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: "Hello!" }],
  },
})
 
// Inyectar contexto sin activar respuesta de IA (útil para plugins)
await client.session.prompt({
  path: { id: session.id },
  body: {
    noReply: true,
    parts: [{ type: "text", text: "You are a helpful assistant." }],
  },
})

Files

MétodoDescripciónRespuesta
find.text({ query })Buscar texto en archivosArray 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 símbolos del workspaceSymbol[] (opens in a new tab)
file.read({ query })Leer un archivo{ type: "raw" | "patch", content: string }
file.status({ query? })Obtener estado de archivos rastreadosFile[] (opens in a new tab)

find.files soporta algunos campos de consulta opcionales:

  • type: "file" o "directory"
  • directory: sobrescribir la raíz del proyecto para la búsqueda
  • limit: máximo de 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

MétodoDescripciónRespuesta
tui.appendPrompt({ body })Agregar texto al promptboolean
tui.openHelp()Abrir diálogo de ayudaboolean
tui.openSessions()Abrir selector de sesionesboolean
tui.openThemes()Abrir selector de temasboolean
tui.openModels()Abrir selector de modelosboolean
tui.submitPrompt()Enviar el prompt actualboolean
tui.clearPrompt()Limpiar el promptboolean
tui.executeCommand({ body })Ejecutar un comandoboolean
tui.showToast({ body })Mostrar notificación toastboolean

Ejemplos

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

Auth

MétodoDescripciónRespuesta
auth.set({ ... })Establecer credenciales de autenticaciónboolean

Ejemplos

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

Events

MétodoDescripciónRespuesta
event.subscribe()Stream de eventos enviados por servidorStream de eventos enviados por servidor

Ejemplos

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