تخطَّ إلى المحتوى

مجموعة تطوير البرمجيات (SDK)

عميل JavaScript آمن الأنواع لخادم opencode.

توفر SDK الخاصة بـ opencode لـ JS/TS عميلا آمنا للأنواع للتفاعل مع الخادم. استخدمها لبناء التكاملات والتحكم في opencode برمجيا.

اعرف المزيد حول كيفية عمل الخادم. للاطلاع على أمثلة، تفقد المشاريع التي أنشأها المجتمع.


التثبيت

ثبّت SDK من npm:

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عنوان URL للخادمhttp://localhost:4096
fetchfunctionتنفيذ fetch مخصصglobalThis.fetch
parseAsstringطريقة تحليل الاستجابةauto
responseStylestringأسلوب الإرجاع: data أو fieldsfields
throwOnErrorbooleanرمي الأخطاء بدلا من إرجاعهاfalse

الأنواع

تتضمن SDK تعريفات TypeScript لجميع أنواع API. استوردها مباشرة:

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

APIs

توفر SDK جميع واجهات الخادم عبر عميل آمن للأنواع.


عام (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[]

أمثلة

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

الطريقةالوصفالاستجابة
project.list()سرد جميع المشاريعProject[]
project.current()جلب المشروع الحاليProject

أمثلة

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

المسار (path)

الطريقةالوصفالاستجابة
path.get()جلب المسار الحاليPath

أمثلة

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

الإعدادات (config)

الطريقةالوصفالاستجابة
config.get()جلب معلومات الإعداداتConfig
config.providers()سرد المزوّدين والنماذج الافتراضية{ providers: Provider[], default: { [key: string]: string } }

أمثلة

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

الجلسات (session)

الطريقةالوصفملاحظات
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: Message, parts: Part[]}[]
session.message({ path })جلب تفاصيل الرسالةيعيد { info: Message, parts: Part[]}
session.prompt({ path, body })إرسال رسالة مطالبةbody.noReply: true يعيد UserMessage (للسياق فقط). الافتراضي يعيد AssistantMessage مع استجابة AI
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)

الطريقةالوصفالاستجابة
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 })عرض إشعار toastboolean

أمثلة

// Control TUI interface
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" },
})

الأحداث (event)

الطريقةالوصفالاستجابة
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)
}