Saltearse al contenido

SDK

Cliente JS con seguridad de tipos para el servidor opencode.

El SDK opencode JS/TS proporciona un cliente con seguridad de tipos para interactuar con el servidor. Úselo para crear integraciones y controlar opencode mediante programación.

Más información sobre cómo funciona el servidor. Para ver ejemplos, consulte los proyectos creados por la comunidad.


Instalar

Instale el SDK desde npm:

Ventana de terminal
npm install @opencode-ai/sdk

Crear cliente

Cree 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 aborto para cancelaciónundefined
timeoutnumberTiempo de espera en ms para inicio del servidor5000
configConfigObjeto de configuración{}

Configuración

Puede pasar un objeto de configuración para personalizar el comportamiento. La instancia aún recoge su opencode.json, pero puede anular 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 tiene una instancia en ejecución de opencode, puede crear una instancia de cliente para conectarse 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 de recuperación personalizadaglobalThis.fetch
parseAsstringMétodo de análisis de respuestaauto
responseStylestringEstilo de devolución: data o fieldsfields
throwOnErrorbooleanLanzar errores en lugar de devolverfalse

Tipos

El SDK incluye definiciones TypeScript para todos los tipos API. Importarlos 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.


Errores

El SDK puede generar errores que puedes detectar y manejar:

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

API

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


Global

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

Ejemplos

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

Aplicación

MétodoDescripciónRespuesta
app.log()Escribe una entrada de registroboolean
app.agents()Listar todos los agentes disponiblesAgent[]

Ejemplos

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

Proyecto

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

Ejemplos

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

Camino

MétodoDescripciónRespuesta
path.get()Obtener ruta actualPath

Ejemplos

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

Configuración

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

Ejemplos

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

Sesiones

MétodoDescripciónNotas
session.list()Listar sesionesDevuelve Session[]
session.get({ path })Obtener sesiónDevuelve Session
session.children({ path })Listar sesiones infantilesDevuelve Session[]
session.create({ body })Crear sesiónDevuelve Session
session.delete({ path })Eliminar sesiónDevuelve boolean
session.update({ path, body })Actualizar propiedades de sesiónDevuelve Session
session.init({ path, body })Analizar aplicación y crear AGENTS.mdDevuelve boolean
session.abort({ path })Cancelar una sesión en ejecuciónDevuelve boolean
session.share({ path })Compartir sesiónDevuelve Session
session.unshare({ path })Dejar de compartir sesiónDevuelve Session
session.summarize({ path, body })Resumir sesiónDevuelve boolean
session.messages({ path })Listar mensajes en una sesiónDevuelve { info: Message, parts: Part[]}[]
session.message({ path })Obtener detalles del mensajeDevuelve { info: Message, parts: Part[]}
session.prompt({ path, body })Enviar mensaje rápidobody.noReply: true devuelve UserMessage (solo contexto). El valor predeterminado devuelve AssistantMessage con respuesta de IA
session.command({ path, body })Enviar comando a la sesiónDevuelve { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Ejecute un comando de shellDevuelve AssistantMessage
session.revert({ path, body })Revertir un mensajeDevuelve Session
session.unrevert({ path })Restaurar mensajes revertidosDevuelve Session
postSessionByIdPermissionsByPermissionId({ path, body })Responder a una solicitud de permisoDevuelve boolean

Ejemplos

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

Archivos

MétodoDescripciónRespuesta
find.text({ query })Buscar texto en archivosMatriz de objetos coincidentes con path, lines, line_number, absolute_offset, submatches
find.files({ query })Buscar archivos y directorios por nombrestring[] (rutas)
find.symbols({ query })Buscar símbolos del espacio de trabajoSymbol[]
file.read({ query })Leer un archivo{ type: "raw" | "patch", content: string }
file.status({ query? })Obtener el estado de los archivos rastreadosFile[]

find.files admite algunos campos de consulta opcionales:

  • type: "file" o "directory"
  • directory: anula la raíz del proyecto para la búsqueda.
  • limit: resultados máximos (1–200)

Ejemplos

// 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

MétodoDescripciónRespuesta
tui.appendPrompt({ body })Agregar texto al mensajeboolean
tui.openHelp()Abra el cuadro de diálogo de ayudaboolean
tui.openSessions()Abrir el selector de sesionesboolean
tui.openThemes()Abra el selector de temasboolean
tui.openModels()Abrir el selector de modeloboolean
tui.submitPrompt()Enviar el mensaje actualboolean
tui.clearPrompt()Borrar el mensajeboolean
tui.executeCommand({ body })Ejecutar un comandoboolean
tui.showToast({ body })Mostrar notificación del brindisboolean

Ejemplos

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

Autenticación

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

Eventos

MétodoDescripciónRespuesta
event.subscribe()Transmisión de eventos enviados por el servidorTransmisión de eventos enviados por el servidor

Ejemplos

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