跳转到内容

軟體開發工具包

opencode 服务器的类型不同于安全 JS 客户端。

opencode JS/TS SDK 提供类型其他安全的客户端用于与服务器交互。 使用它以程序设计方式构建集成和控制opencode。

了解更多关于服务器如何工作的。例如,查看社区构建的projects


安装

从npm安装SDK:

Terminal window
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放置的财产{}

配置

You can pass a configuration object to customize behavior. The instance still picks up your opencode.json, but you can override or add configuration 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",
})

選項

選項型別描述默认
baseUrlstring服务器的 URLhttp://localhost:4096
fetchfunction习俗获取实现globalThis.fetch
parseAsstring响应解析方法auto
responseStylestring返回样式:datafieldsfields
throwOnErrorboolean掷骰错误而不是返回false

型別

SDK 包括所有 API 型以外的 TypeScript 定义。直接汇入其中:

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

所有型別均根據服务器的 OpenAPI 規範生成,并可在 型別文件 中找到。


错误

SDK 可能会丢掷错误,您可以捕获并处理这些错误:

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

蜜蜂

SDK跨越型别安全客户端公开所有服务器API。


全球的

方法描述回应
global.health()检查服务器健康状况和版本{ healthy: true, version: string }

示例

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

应用程序

方法描述回应
app.log()登录日志boolean
app.agents()列出所有可用的代理代理[]

示例

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

专案

方法描述回应
project.list()列出所有专案专案[]
project.current()获取当前专案专案

示例

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

小路

方法描述回应
path.get()获取当前路徑路徑

示例

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

配置

方法描述回应
config.get()获取配置資訊配置
config.providers()列出提供商和默认模型{ providers: 提供商[], default: { [key: string]: string } }

示例

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

会话

方法描述筆記
session.list()列出会话返回 Session[]
session.get({ path })获取会话返回 会话
session.children({ path })列出子会话返回 Session[]
session.create({ body })建立会话返回 会话
session.delete({ path })离开会话返回boolean
session.update({ path, body })更新会话屬性返回 会话
session.init({ path, body })Analyze app and create AGENTS.mdReturns boolean
session.abort({ path })中止正在执行的会话返回boolean
session.share({ path })分享会返回 会话
session.unshare({ path })取消共享会话返回 会话
session.summarize({ path, body })会议总结返回boolean
session.messages({ path })列出会话中的消息返回 { info: 消息, parts: 部分[]}[]
session.message({ path })获取消息详情返回 { info: 消息, parts: 部分[]}
session.prompt({ path, body })发送提示資訊body.noReply: true 返回 UserMessage(仅限上下文)。默认返回 AssistantMessage 以及 AI 響应
session.command({ path, body })向会话发送命令返回 { info: AssistantMessage, parts: 部分[]}
session.shell({ path, body })执行 shell 命令返回 AssistantMessage
session.revert({ path, body })回复消息返回 会话
session.unrevert({ path })恢复已恢复的消息返回 会话
postSessionByIdPermissionsByPermissionId({ path, body })回复许可权限请求返回boolean

示例

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

文件

方法描述回应
find.text({ query })搜索档案中文字具有 pathlinesline_numberabsolute_offsetsubmatches 的匹配对象数组
find.files({ query })按名称查询档案和目录string[](路径)
find.symbols({ query })查询工作区符號符號[]
file.read({ query })读取档案{ type: "raw" | "patch", content: string }
file.status({ query? })获取跟蹤文件的狀態文件[]

find.files 支持一些可选的查询栏位:

  • type"file""directory"
  • directory:覆盖搜索的专案根目录
  • limit:最大结果 (1–200)

示例

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

方法描述回应
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 })显示吐司通知boolean

示例

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

授權

方法描述回应
auth.set({ ... })设定身份验证凭据boolean

示例

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

活动

方法描述回应
event.subscribe()服务器传送的事件流服务器传送的事件流

示例

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