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

الخادم

تفاعل مع خادم opencode عبر HTTP.

يشغّل الأمر opencode serve خادما HTTP دون واجهة ويعرض نقطة نهاية OpenAPI يمكن لعميل opencode استخدامها.


الاستخدام

Terminal window
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]

الخيارات

الخيارالوصفالافتراضي
--portالمنفذ الذي يستمع عليه4096
--hostnameاسم المضيف الذي يستمع عليه127.0.0.1
--mdnsتفعيل اكتشاف mDNSfalse
--mdns-domainاسم نطاق مخصص لخدمة mDNSopencode.local
--corsأصول (Origins) متصفح إضافية مسموح بها[]

يمكن تمرير --cors عدة مرات:

Terminal window
opencode serve --cors http://localhost:5173 --cors https://app.example.com

المصادقة

عيّن OPENCODE_SERVER_PASSWORD لحماية الخادم باستخدام مصادقة HTTP الأساسية. اسم المستخدم افتراضيا هو opencode، أو عيّن OPENCODE_SERVER_USERNAME لتغييره. ينطبق ذلك على كل من opencode serve و opencode web.

Terminal window
OPENCODE_SERVER_PASSWORD=your-password opencode serve

كيف يعمل

عند تشغيل opencode يبدأ تشغيل واجهة terminal تفاعلية (TUI) وخادما. تكون الـ TUI هي العميل الذي يتحدث إلى الخادم. يوفّر الخادم نقطة نهاية لمواصفة OpenAPI 3.1. وتُستخدم هذه النقطة أيضا لتوليد SDK.

تتيح هذه البنية لـ opencode دعم عدة عملاء وتمكّنك من التفاعل مع opencode برمجيا.

يمكنك تشغيل opencode serve لبدء خادم مستقل. إذا كانت واجهة opencode في terminal (TUI) قيد التشغيل، فسيبدأ opencode serve خادما جديدا.


الاتصال بخادم موجود

عند بدء الـ TUI تقوم بتعيين منفذ واسم مضيف عشوائيا. يمكنك بدلا من ذلك تمرير الخيارات --hostname و --port، ثم استخدامهما للاتصال بخادمها.

يمكن استخدام نقطة النهاية /tui للتحكم في الـ TUI عبر الخادم. على سبيل المثال، يمكنك تعبئة الموجّه مسبقا أو تشغيله. يُستخدم هذا الإعداد بواسطة ملحقات OpenCode لـ IDE.


المواصفات

ينشر الخادم مواصفة OpenAPI 3.1 ويمكن عرضها على:

http://<hostname>:<port>/doc

على سبيل المثال: http://localhost:4096/doc. استخدم المواصفة لتوليد عملاء أو لفحص أنواع الطلبات والاستجابات. أو اعرضها في مستكشف Swagger.


واجهات API

يعرض خادم opencode واجهات API التالية.


عام

الطريقةالمسارالوصفالاستجابة
GET/global/healthالحصول على صحة الخادم وإصداره{ healthy: true, version: string }
GET/global/eventالحصول على الأحداث العامة (تدفق SSE)تدفق أحداث

المشروع

الطريقةالمسارالوصفالاستجابة
GET/projectسرد جميع المشاريعProject[]
GET/project/currentالحصول على المشروع الحاليProject

المسار و VCS

الطريقةالمسارالوصفالاستجابة
GET/pathالحصول على المسار الحاليPath
GET/vcsالحصول على معلومات VCS للمشروع الحاليVcsInfo

المثيل

الطريقةالمسارالوصفالاستجابة
POST/instance/disposeالتخلص من المثيل الحاليboolean

الإعدادات

الطريقةالمسارالوصفالاستجابة
GET/configالحصول على معلومات الإعداداتConfig
PATCH/configتحديث الإعداداتConfig
GET/config/providersسرد المزوّدين والنماذج الافتراضية{ providers: Provider[], default: { [key: string]: string } }

المزوّد

الطريقةالمسارالوصفالاستجابة
GET/providerسرد جميع المزوّدين{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authالحصول على طرق مصادقة المزوّد{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeتفويض مزوّد باستخدام OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackمعالجة رد نداء OAuth لمزوّدboolean

الجلسات

الطريقةالمسارالوصفالملاحظات
GET/sessionسرد جميع الجلساتيعيد Session[]
POST/sessionإنشاء جلسة جديدةالمتن: { parentID?, title? }، يعيد Session
GET/session/statusالحصول على حالة الجلسات جميعهايعيد { [sessionID: string]: SessionStatus }
GET/session/:idالحصول على تفاصيل الجلسةيعيد Session
DELETE/session/:idحذف جلسة وجميع بياناتهايعيد boolean
PATCH/session/:idتحديث خصائص الجلسةالمتن: { title? }، يعيد Session
GET/session/:id/childrenالحصول على الجلسات الفرعية لجلسةيعيد Session[]
GET/session/:id/todoالحصول على قائمة المهام (todo) للجلسةيعيد Todo[]
POST/session/:id/initتحليل التطبيق وإنشاء AGENTS.mdالمتن: { messageID, providerID, modelID }، يعيد boolean
POST/session/:id/forkتفريع جلسة موجودة عند رسالةالمتن: { messageID? }، يعيد Session
POST/session/:id/abortإلغاء جلسة قيد التشغيليعيد boolean
POST/session/:id/shareمشاركة جلسةيعيد Session
DELETE/session/:id/shareإلغاء مشاركة جلسةيعيد Session
GET/session/:id/diffالحصول على diff لهذه الجلسةالاستعلام: messageID?، يعيد FileDiff[]
POST/session/:id/summarizeتلخيص الجلسةالمتن: { providerID, modelID }، يعيد boolean
POST/session/:id/revertالتراجع عن رسالةالمتن: { messageID, partID? }، يعيد boolean
POST/session/:id/unrevertاستعادة جميع الرسائل المتراجع عنهايعيد boolean
POST/session/:id/permissions/:permissionIDالرد على طلب إذنالمتن: { response, remember? }، يعيد boolean

الرسائل

الطريقةالمسارالوصفالملاحظات
GET/session/:id/messageسرد رسائل جلسةالاستعلام: limit?، يعيد { info: Message, parts: Part[]}[]
POST/session/:id/messageإرسال رسالة والانتظار للحصول على ردالمتن: { messageID?, model?, agent?, noReply?, system?, tools?, parts }، يعيد { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDالحصول على تفاصيل الرسالةيعيد { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncإرسال رسالة بشكل غير متزامن (بدون انتظار)المتن: مثل /session/:id/message، يعيد 204 No Content
POST/session/:id/commandتنفيذ أمر شرطة مائلة (slash)المتن: { messageID?, agent?, model?, command, arguments }، يعيد { info: Message, parts: Part[]}
POST/session/:id/shellتشغيل أمر في shellالمتن: { agent, model?, command }، يعيد { info: Message, parts: Part[]}

الأوامر

الطريقةالمسارالوصفالاستجابة
GET/commandسرد جميع الأوامرCommand[]

الملفات

الطريقةالمسارالوصفالاستجابة
GET/find?pattern=<pat>البحث عن نص داخل الملفاتمصفوفة من كائنات المطابقة تحتوي على path وlines وline_number وabsolute_offset وsubmatches
GET/find/file?query=<q>العثور على الملفات والمجلدات بالاسمstring[] (مسارات)
GET/find/symbol?query=<q>العثور على رموز مساحة العملSymbol[]
GET/file?path=<path>سرد الملفات والمجلداتFileNode[]
GET/file/content?path=<p>قراءة ملفFileContent
GET/file/statusالحصول على حالة الملفات المتعقّبةFile[]

معلمات الاستعلام لـ /find/file

  • query (مطلوب) — سلسلة البحث (مطابقة ضبابية)
  • type (اختياري) — حصر النتائج في "file" أو "directory"
  • directory (اختياري) — تجاوز جذر المشروع لأجل البحث
  • limit (اختياري) — الحد الأقصى للنتائج (1–200)
  • dirs (اختياري) — خيار قديم (إرجاع "false" يعيد الملفات فقط)

الأدوات (تجريبية)

الطريقةالمسارالوصفالاستجابة
GET/experimental/tool/idsسرد جميع معرّفات الأدواتToolIDs
GET/experimental/tool?provider=<p>&model=<m>سرد الأدوات مع مخططات JSON لنموذجToolList

LSP والمنسّقات و MCP

الطريقةالمسارالوصفالاستجابة
GET/lspالحصول على حالة خادم LSPLSPStatus[]
GET/formatterالحصول على حالة المنسّقاتFormatterStatus[]
GET/mcpالحصول على حالة خادم MCP{ [name: string]: MCPStatus }
POST/mcpإضافة خادم MCP ديناميكياالمتن: { name, config }، يعيد كائن حالة MCP

الوكلاء

الطريقةالمسارالوصفالاستجابة
GET/agentسرد جميع الوكلاء المتاحينAgent[]

التسجيل

الطريقةالمسارالوصفالاستجابة
POST/logكتابة إدخال سجل. المتن: { service, level, message, extra? }boolean

TUI

الطريقةالمسارالوصفالاستجابة
POST/tui/append-promptإلحاق نص بالموجّهboolean
POST/tui/open-helpفتح مربع حوار المساعدةboolean
POST/tui/open-sessionsفتح محدد الجلساتboolean
POST/tui/open-themesفتح محدد السماتboolean
POST/tui/open-modelsفتح محدد النماذجboolean
POST/tui/submit-promptإرسال الموجّه الحاليboolean
POST/tui/clear-promptمسح الموجّهboolean
POST/tui/execute-commandتنفيذ أمر ({ command })boolean
POST/tui/show-toastعرض toast ({ title?, message, variant })boolean
GET/tui/control/nextالانتظار لطلب التحكم التاليكائن طلب تحكم
POST/tui/control/responseالاستجابة لطلب تحكم ({ body })boolean

المصادقة

الطريقةالمسارالوصفالاستجابة
PUT/auth/:idتعيين بيانات اعتماد المصادقة. يجب أن يطابق المتن مخطط المزوّدboolean

الأحداث

الطريقةالمسارالوصفالاستجابة
GET/eventتدفق أحداث مرسلة من الخادم (SSE). أول حدث هو server.connected ثم أحداث الحافلةتدفق أحداث مرسلة من الخادم

التوثيق

الطريقةالمسارالوصفالاستجابة
GET/docمواصفة OpenAPI 3.1صفحة HTML تتضمن مواصفة OpenAPI