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()Это запускает и сервер, и клиент.
Параметры
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
hostname | string | Имя хоста сервера | 127.0.0.1 |
port | number | Порт сервера | 4096 |
signal | AbortSignal | Сигнал отмены | undefined |
timeout | number | Таймаут запуска сервера в мс | 5000 |
config | Config | Объект конфигурации | {} |
Конфигурация
Вы можете передать объект конфигурации для настройки поведения. Экземпляр по-прежнему читает ваш 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",
})Параметры
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
baseUrl | string | URL сервера | http://localhost:4096 |
fetch | function | Пользовательская реализация fetch | globalThis.fetch |
parseAs | string | Метод парсинга ответа | auto |
responseStyle | string | Стиль возврата: data или fields | fields |
throwOnError | boolean | Выбрасывать ошибки вместо возврата | 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)
}