跳到內容

軟件開發工具包

opencode 服務器的類型安全 JS 客戶端。

opencode JS/TS SDK 提供類型安全的客戶端用於與服務器交互。 使用它以編程方式構建集成和控制opencode。

了解更多 關於服務器如何工作。例如,查看社區構建的專案


安裝

從 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配置對象{}

配置

您可以傳遞配置對象來自定義行為。該實例仍然會選擇您的opencode.json,但您可以覆蓋或添加內聯配置:

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 規範生成,並可在 types 文件中找到。


錯誤

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: Provider[], 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
session.children({ path })列出子會話返回 Session[]
session.create({ body })創建會話返回 Session
session.delete({ path })刪除會話返回 boolean
session.update({ path, body })更新會話屬性返回 Session
session.init({ path, body })分析應用程式並創建AGENTS.md返回 boolean
session.abort({ path })中止正在運行的會話返回 boolean
session.share({ path })分享會返回 Session
session.unshare({ path })取消共享會話返回 Session
session.summarize({ path, body })會議總結返回 boolean
session.messages({ path })列出會話中的消息返回 { info: 消息, parts: Part[]}[]
session.message({ path })獲取消息詳情返回 { info: 消息, parts: Part[]}
session.prompt({ path, body })發送提示信息body.noReply: true 返回 UserMessage(僅上下文)。默認返回帶有 AI 響應的 AssistantMessage
session.command({ path, body })向會話發送命令返回 { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })運行 shell 命令返回 AssistantMessage
session.revert({ path, body })回复消息返回 Session
session.unrevert({ path })恢復已恢復的消息返回 Session
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 })搜索文件中的文本具有 path, lines, line_number, absolute_offset, submatches 的匹配對象陣列
find.files({ query })按名稱查找文件和目錄string[](路徑)
find.symbols({ query })查找工作區符號Symbol[]
file.read({ query })讀取文件{ type: "raw" | "patch", content: string }
file.status({ query? })獲取跟蹤文件的狀態File[]

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 })顯示 toast 通知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)
}