Português
Documentação
SDK

SDK

Cliente JS com tipos seguros para o servidor opencode.

O SDK JS/TS do opencode fornece um cliente com tipos seguros para interagir com o servidor. Use-o para construir integrações e controlar o opencode programaticamente.

Saiba mais sobre como o servidor funciona. Confira os projetos construídos pela comunidade.


Instalação

Instale o SDK do npm:

npm install @opencode-ai/sdk

Criar cliente

Crie uma instância do opencode:

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

Isso inicia tanto um servidor quanto um cliente.

Opções

OpçãoTipoDescriçãoPadrão
hostnamestringNome do host do servidor127.0.0.1
portnumberPorta do servidor4096
signalAbortSignalSinal de cancelamentoundefined
timeoutnumberTimeout em ms para início do servidor5000
configConfigObjeto de configuração{}

Configuração

Você pode passar um objeto de configuração para personalizar o comportamento. A instância ainda lê seu opencode.json, mas você pode sobrescrever ou adicionar configuração 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 running at ${opencode.server.url}`)
opencode.server.close()

Apenas cliente

Se você já tem uma instância do opencode em execução, pode criar uma instância de cliente para se conectar a ela:

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

Opções

OpçãoTipoDescriçãoPadrão
baseUrlstringURL do servidorhttp://localhost:4096
fetchfunctionImplementação personalizada de fetchglobalThis.fetch
parseAsstringMétodo de análise de respostaauto
responseStylestringEstilo de retorno: data ou fieldsfields
throwOnErrorbooleanLançar erros em vez de retornarfalse

Tipos

O SDK inclui definições TypeScript para todos os tipos de API. Importe-os diretamente:

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

Todos os tipos são gerados a partir da especificação OpenAPI do servidor e estão disponíveis no arquivo de tipos (opens in a new tab).


Erros

O SDK pode lançar erros que você pode capturar e tratar:

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

APIs

O SDK expõe todas as APIs do servidor através de um cliente com tipos seguros.


Global

MétodoDescriçãoResposta
global.health()Verificar saúde e versão do servidor{ healthy: true, version: string }

Exemplos

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

App

MétodoDescriçãoResposta
app.log()Escrever uma entrada de logboolean
app.agents()Listar todos os agentes disponíveisAgent[] (opens in a new tab)

Exemplos

// Escrever uma entrada de log
await client.app.log({
  body: {
    service: "my-app",
    level: "info",
    message: "Operation completed",
  },
})
 
// Listar agentes disponíveis
const agents = await client.app.agents()

Project

MétodoDescriçãoResposta
project.list()Listar todos os projetosProject[] (opens in a new tab)
project.current()Obter projeto atualProject (opens in a new tab)

Exemplos

// Listar todos os projetos
const projects = await client.project.list()
 
// Obter projeto atual
const currentProject = await client.project.current()

Path

MétodoDescriçãoResposta
path.get()Obter caminho atualPath (opens in a new tab)

Exemplos

// Obter informações do caminho atual
const pathInfo = await client.path.get()

Config

MétodoDescriçãoResposta
config.get()Obter informações de configuraçãoConfig (opens in a new tab)
config.providers()Listar provedores e modelos padrão{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Exemplos

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

Sessions

MétodoDescriçãoNotas
session.list()Listar sessõesRetorna Session[] (opens in a new tab)
session.get({ path })Obter sessãoRetorna Session (opens in a new tab)
session.children({ path })Listar sessões filhasRetorna Session[] (opens in a new tab)
session.create({ body })Criar sessãoRetorna Session (opens in a new tab)
session.delete({ path })Excluir sessãoRetorna boolean
session.update({ path, body })Atualizar propriedades da sessãoRetorna Session (opens in a new tab)
session.init({ path, body })Analisar app e criar AGENTS.mdRetorna boolean
session.abort({ path })Abortar sessão em execuçãoRetorna boolean
session.share({ path })Compartilhar sessãoRetorna Session (opens in a new tab)
session.unshare({ path })Deixar de compartilhar sessãoRetorna Session (opens in a new tab)
session.summarize({ path, body })Resumir sessãoRetorna boolean
session.messages({ path })Listar mensagens em uma sessãoRetorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[]
session.message({ path })Obter detalhes da mensagemRetorna { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
session.prompt({ path, body })Enviar mensagem de promptbody.noReply: true retorna UserMessage (apenas contexto). Padrão retorna AssistantMessage (opens in a new tab) com resposta de IA
session.command({ path, body })Enviar comando para sessãoRetorna { info: AssistantMessage (opens in a new tab), parts: Part[] (opens in a new tab)}
session.shell({ path, body })Executar comando shellRetorna AssistantMessage (opens in a new tab)
session.revert({ path, body })Reverter uma mensagemRetorna Session (opens in a new tab)
session.unrevert({ path })Restaurar mensagens revertidasRetorna Session (opens in a new tab)
postSessionByIdPermissionsByPermissionId({ path, body })Responder a solicitação de permissãoRetorna boolean

Exemplos

// Criar e gerenciar sessões
const session = await client.session.create({
  body: { title: "My session" },
})
 
const sessions = await client.session.list()
 
// Enviar mensagem 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!" }],
  },
})
 
// Injetar contexto sem acionar resposta 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étodoDescriçãoResposta
find.text({ query })Buscar texto em arquivosArray de objetos de correspondência com path, lines, line_number, absolute_offset, submatches
find.files({ query })Encontrar arquivos e diretórios por nomestring[] (caminhos)
find.symbols({ query })Encontrar símbolos do workspaceSymbol[] (opens in a new tab)
file.read({ query })Ler um arquivo{ type: "raw" | "patch", content: string }
file.status({ query? })Obter status de arquivos rastreadosFile[] (opens in a new tab)

find.files suporta alguns campos de consulta opcionais:

  • type: "file" ou "directory"
  • directory: sobrescrever a raiz do projeto para a busca
  • limit: máximo de resultados (1-200)

Exemplos

// Buscar e ler arquivos
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étodoDescriçãoResposta
tui.appendPrompt({ body })Adicionar texto ao promptboolean
tui.openHelp()Abrir diálogo de ajudaboolean
tui.openSessions()Abrir seletor de sessõesboolean
tui.openThemes()Abrir seletor de temasboolean
tui.openModels()Abrir seletor de modelosboolean
tui.submitPrompt()Enviar o prompt atualboolean
tui.clearPrompt()Limpar o promptboolean
tui.executeCommand({ body })Executar um comandoboolean
tui.showToast({ body })Mostrar notificação toastboolean

Exemplos

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

Auth

MétodoDescriçãoResposta
auth.set({ ... })Definir credenciais de autenticaçãoboolean

Exemplos

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

Events

MétodoDescriçãoResposta
event.subscribe()Stream de eventos enviados pelo servidorStream de eventos enviados pelo servidor

Exemplos

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