Русский
Документация
SDK

SDK

Типобезопасный JS-клиент для сервера opencode.

SDK opencode JS/TS предоставляет типобезопасный клиент для взаимодействия с сервером. Используйте его для создания интеграций и программного управления opencode.

Узнайте больше о работе сервера. Ознакомьтесь с проектами, созданными сообществом.


Установка

Установите SDK из npm:

npm install @opencode-ai/sdk

Создание клиента

Создайте экземпляр opencode:

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

Это запускает и сервер, и клиент.

Параметры

ПараметрТипОписаниеПо умолчанию
hostnamestringИмя хоста сервера127.0.0.1
portnumberПорт сервера4096
signalAbortSignalСигнал отменыundefined
timeoutnumberТаймаут запуска сервера в мс5000
configConfigОбъект конфигурации{}

Конфигурация

Вы можете передать объект конфигурации для настройки поведения. Экземпляр по-прежнему читает ваш opencode.json, но вы можете переопределить или добавить конфигурацию 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()

Только клиент

Если у вас уже есть запущенный экземпляр opencode, вы можете создать клиентский экземпляр для подключения к нему:

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

Параметры

ПараметрТипОписаниеПо умолчанию
baseUrlstringURL сервераhttp://localhost:4096
fetchfunctionПользовательская реализация fetchglobalThis.fetch
parseAsstringМетод парсинга ответаauto
responseStylestringСтиль возврата: data или fieldsfields
throwOnErrorbooleanВыбрасывать ошибки вместо возвратаfalse

Типы

SDK включает определения TypeScript для всех типов API. Импортируйте их напрямую:

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

Все типы генерируются из спецификации OpenAPI сервера и доступны в файле типов (opens in a new tab).


Ошибки

SDK может выбрасывать ошибки, которые вы можете перехватывать и обрабатывать:

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

API

SDK предоставляет все серверные API через типобезопасный клиент.


Global

МетодОписаниеОтвет
global.health()Проверить состояние и версию сервера{ healthy: true, version: string }

Примеры

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

App

МетодОписаниеОтвет
app.log()Записать запись в логboolean
app.agents()Список всех доступных агентовAgent[] (opens in a new tab)

Примеры

// Записать запись в лог
await client.app.log({
  body: {
    service: "my-app",
    level: "info",
    message: "Operation completed",
  },
})
 
// Список доступных агентов
const agents = await client.app.agents()

Project

МетодОписаниеОтвет
project.list()Список всех проектовProject[] (opens in a new tab)
project.current()Получить текущий проектProject (opens in a new tab)

Примеры

// Список всех проектов
const projects = await client.project.list()
 
// Получить текущий проект
const currentProject = await client.project.current()

Path

МетодОписаниеОтвет
path.get()Получить текущий путьPath (opens in a new tab)

Примеры

// Получить информацию о текущем пути
const pathInfo = await client.path.get()

Config

МетодОписаниеОтвет
config.get()Получить информацию о конфигурацииConfig (opens in a new tab)
config.providers()Список провайдеров и моделей по умолчанию{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Примеры

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

Sessions

МетодОписаниеПримечания
session.list()Список сессийВозвращает Session[] (opens in a new tab)
session.get({ path })Получить сессиюВозвращает Session (opens in a new tab)
session.children({ path })Список дочерних сессийВозвращает Session[] (opens in a new tab)
session.create({ body })Создать сессиюВозвращает Session (opens in a new tab)
session.delete({ path })Удалить сессиюВозвращает boolean
session.update({ path, body })Обновить свойства сессииВозвращает Session (opens in a new tab)
session.init({ path, body })Анализировать приложение и создать AGENTS.mdВозвращает boolean
session.abort({ path })Прервать запущенную сессиюВозвращает boolean
session.share({ path })Поделиться сессиейВозвращает Session (opens in a new tab)
session.unshare({ path })Отменить общий доступ к сессииВозвращает Session (opens in a new tab)
session.summarize({ path, body })Создать сводку сессииВозвращает boolean
session.messages({ path })Список сообщений в сессииВозвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[]
session.message({ path })Получить детали сообщенияВозвращает { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
session.prompt({ path, body })Отправить промпт-сообщениеbody.noReply: true возвращает UserMessage (только контекст). По умолчанию возвращает AssistantMessage (opens in a new tab) с ответом ИИ
session.command({ path, body })Отправить команду в сессиюВозвращает { info: AssistantMessage (opens in a new tab), parts: Part[] (opens in a new tab)}
session.shell({ path, body })Выполнить shell-командуВозвращает AssistantMessage (opens in a new tab)
session.revert({ path, body })Отменить сообщениеВозвращает Session (opens in a new tab)
session.unrevert({ path })Восстановить отменённые сообщенияВозвращает Session (opens in a new tab)
postSessionByIdPermissionsByPermissionId({ path, body })Ответить на запрос разрешенияВозвращает boolean

Примеры

// Создание и управление сессиями
const session = await client.session.create({
  body: { title: "My session" },
})
 
const sessions = await client.session.list()
 
// Отправить промпт-сообщение
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!" }],
  },
})
 
// Внедрить контекст без запуска ответа ИИ (полезно для плагинов)
await client.session.prompt({
  path: { id: session.id },
  body: {
    noReply: true,
    parts: [{ type: "text", text: "You are a helpful assistant." }],
  },
})

Files

МетодОписаниеОтвет
find.text({ query })Поиск текста в файлахМассив объектов совпадений с path, lines, line_number, absolute_offset, submatches
find.files({ query })Поиск файлов и директорий по имениstring[] (пути)
find.symbols({ query })Поиск символов рабочей областиSymbol[] (opens in a new tab)
file.read({ query })Прочитать файл{ type: "raw" | "patch", content: string }
file.status({ query? })Получить статус отслеживаемых файловFile[] (opens in a new tab)

find.files поддерживает несколько необязательных полей запроса:

  • type: "file" или "directory"
  • directory: переопределить корень проекта для поиска
  • limit: максимальное количество результатов (1-200)

Примеры

// Поиск и чтение файлов
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

МетодОписаниеОтвет
tui.appendPrompt({ body })Добавить текст к промптуboolean
tui.openHelp()Открыть диалог справкиboolean
tui.openSessions()Открыть выбор сессийboolean
tui.openThemes()Открыть выбор темboolean
tui.openModels()Открыть выбор моделейboolean
tui.submitPrompt()Отправить текущий промптboolean
tui.clearPrompt()Очистить промптboolean
tui.executeCommand({ body })Выполнить командуboolean
tui.showToast({ body })Показать toast-уведомлениеboolean

Примеры

// Управление интерфейсом TUI
await client.tui.appendPrompt({
  body: { text: "Add this to prompt" },
})
 
await client.tui.showToast({
  body: { message: "Task completed", variant: "success" },
})

Auth

МетодОписаниеОтвет
auth.set({ ... })Установить учётные данные аутентификацииboolean

Примеры

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

Events

МетодОписаниеОтвет
event.subscribe()Поток событий от сервераПоток событий от сервера

Примеры

// Прослушивание событий в реальном времени
const events = await client.event.subscribe()
for await (const event of events.stream) {
  console.log("Event:", event.type, event.properties)
}