wip(docs): i18n (#12681)
This commit is contained in:
67
packages/web/src/content/docs/ar/1-0.mdx
Normal file
67
packages/web/src/content/docs/ar/1-0.mdx
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: الانتقال إلى 1.0
|
||||
description: ما الجديد في OpenCode 1.0.
|
||||
---
|
||||
|
||||
OpenCode 1.0 هو إعادة كتابة كاملة لواجهة TUI.
|
||||
|
||||
انتقلنا من واجهة TUI المبنية على go+bubbletea، والتي كانت تعاني من مشاكل في الأداء والإمكانات، إلى إطار عمل داخلي (OpenTUI) مكتوب بـ zig+solidjs.
|
||||
|
||||
تعمل واجهة TUI الجديدة مثل القديمة لأنها تتصل بخادم opencode نفسه.
|
||||
|
||||
---
|
||||
|
||||
## الترقية
|
||||
|
||||
لا يفترض أن تتم ترقيتك تلقائيا إلى 1.0 إذا كنت تستخدم حاليا إصدارا أقدم.
|
||||
لكن بعض الإصدارات القديمة من OpenCode كانت تجلب دائما أحدث إصدار.
|
||||
|
||||
للترقية يدويا، شغّل
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 1.0.0
|
||||
```
|
||||
|
||||
للرجوع إلى 0.x، شغّل
|
||||
|
||||
```bash
|
||||
$ opencode upgrade 0.15.31
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تغييرات تجربة الاستخدام
|
||||
|
||||
أصبح سجل الجلسة أكثر اختصارا، ولا يعرض التفاصيل الكاملة إلا لأداتي edit و bash.
|
||||
|
||||
أضفنا شريط أوامر تمر عبره تقريبا كل العمليات. اضغط ctrl+p لإظهاره في أي سياق ولرؤية كل ما يمكنك فعله.
|
||||
|
||||
أضفنا شريطا جانبيا للجلسة (يمكن إظهاره/إخفاؤه) يحتوي على معلومات مفيدة.
|
||||
|
||||
أزلنا بعض الوظائف التي لم نكن متأكدين أن أحدا يستخدمها فعلا. إذا كانت هناك ميزة مهمة مفقودة، فالرجاء فتح issue وسنعيدها بسرعة.
|
||||
|
||||
---
|
||||
|
||||
## تغييرات غير متوافقة
|
||||
|
||||
### إعادة تسمية اختصارات المفاتيح
|
||||
|
||||
- messages_revert -> messages_undo
|
||||
- switch_agent -> agent_cycle
|
||||
- switch_agent_reverse -> agent_cycle_reverse
|
||||
- switch_mode -> agent_cycle
|
||||
- switch_mode_reverse -> agent_cycle_reverse
|
||||
|
||||
### إزالة اختصارات المفاتيح
|
||||
|
||||
- messages_layout_toggle
|
||||
- messages_next
|
||||
- messages_previous
|
||||
- file_diff_toggle
|
||||
- file_search
|
||||
- file_close
|
||||
- file_list
|
||||
- app_help
|
||||
- project_init
|
||||
- tool_details
|
||||
- thinking_blocks
|
||||
154
packages/web/src/content/docs/ar/acp.mdx
Normal file
154
packages/web/src/content/docs/ar/acp.mdx
Normal file
@@ -0,0 +1,154 @@
|
||||
---
|
||||
title: دعم ACP
|
||||
description: استخدم OpenCode في أي محرر متوافق مع ACP.
|
||||
---
|
||||
|
||||
يدعم OpenCode بروتوكول [Agent Client Protocol](https://agentclientprotocol.com) أو (ACP)، مما يتيح لك استخدامه مباشرة في المحررات وبيئات التطوير المتكاملة (IDEs) المتوافقة.
|
||||
|
||||
:::tip
|
||||
للاطلاع على قائمة بالمحررات والأدوات التي تدعم ACP، راجع [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now).
|
||||
:::
|
||||
|
||||
ACP بروتوكول مفتوح يوحّد آلية التواصل بين محررات الشيفرة ووكلاء البرمجة بالذكاء الاصطناعي.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
لاستخدام OpenCode عبر ACP، اضبط محررك ليشغّل الأمر `opencode acp`.
|
||||
|
||||
يشغّل هذا الأمر OpenCode كعملية فرعية متوافقة مع ACP تتواصل مع محررك عبر JSON-RPC باستخدام stdio.
|
||||
|
||||
فيما يلي أمثلة لمحررات شائعة تدعم ACP.
|
||||
|
||||
---
|
||||
|
||||
### Zed
|
||||
|
||||
أضف إلى إعدادات [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
|
||||
|
||||
```json title="~/.config/zed/settings.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
لفتحه، استخدم الإجراء `agent: new thread` في **Command Palette**.
|
||||
|
||||
يمكنك أيضا ربط اختصار لوحة مفاتيح عبر تعديل `keymap.json`:
|
||||
|
||||
```json title="keymap.json"
|
||||
[
|
||||
{
|
||||
"bindings": {
|
||||
"cmd-alt-o": [
|
||||
"agent::NewExternalAgentThread",
|
||||
{
|
||||
"agent": {
|
||||
"custom": {
|
||||
"name": "OpenCode",
|
||||
"command": {
|
||||
"command": "opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### JetBrains IDEs
|
||||
|
||||
أضف إلى ملف acp.json الخاص بـ [JetBrains IDE](https://www.jetbrains.com/) وفقا لـ [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html):
|
||||
|
||||
```json title="acp.json"
|
||||
{
|
||||
"agent_servers": {
|
||||
"OpenCode": {
|
||||
"command": "/absolute/path/bin/opencode",
|
||||
"args": ["acp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
لفتحه، اختر الوكيل الجديد 'OpenCode' من محدد الوكلاء في AI Chat.
|
||||
|
||||
---
|
||||
|
||||
### Avante.nvim
|
||||
|
||||
أضف إلى إعدادات [Avante.nvim](https://github.com/yetone/avante.nvim):
|
||||
|
||||
```lua
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا احتجت إلى تمرير متغيرات البيئة:
|
||||
|
||||
```lua {6-8}
|
||||
{
|
||||
acp_providers = {
|
||||
["opencode"] = {
|
||||
command = "opencode",
|
||||
args = { "acp" },
|
||||
env = {
|
||||
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### CodeCompanion.nvim
|
||||
|
||||
لاستخدام OpenCode كوكيل ACP في [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim)، أضف التالي إلى إعدادات Neovim:
|
||||
|
||||
```lua
|
||||
require("codecompanion").setup({
|
||||
interactions = {
|
||||
chat = {
|
||||
adapter = {
|
||||
name = "opencode",
|
||||
model = "claude-sonnet-4",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
يضبط هذا الإعداد CodeCompanion لاستخدام OpenCode كوكيل ACP للدردشة.
|
||||
|
||||
إذا احتجت إلى تمرير متغيرات البيئة (مثل `OPENCODE_API_KEY`)، فارجع إلى [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) ضمن توثيق CodeCompanion.nvim للاطلاع على التفاصيل كاملة.
|
||||
|
||||
## الدعم
|
||||
يعمل OpenCode عبر ACP بالطريقة نفسها التي يعمل بها في الطرفية. جميع الميزات مدعومة:
|
||||
|
||||
:::note
|
||||
بعض أوامر الشرطة المائلة المضمنة مثل `/undo` و`/redo` غير مدعومة حاليا.
|
||||
:::
|
||||
|
||||
- الأدوات المضمنة (عمليات الملفات، أوامر الطرفية، إلخ.)
|
||||
- الأدوات المخصصة وأوامر الشرطة المائلة
|
||||
- خوادم MCP المضبوطة في إعدادات OpenCode
|
||||
- قواعد خاصة بالمشروع من `AGENTS.md`
|
||||
- المنسقات (formatters) والمدققات (linters) المخصصة
|
||||
- نظام الوكلاء والأذونات
|
||||
746
packages/web/src/content/docs/ar/agents.mdx
Normal file
746
packages/web/src/content/docs/ar/agents.mdx
Normal file
@@ -0,0 +1,746 @@
|
||||
---
|
||||
title: الوكلاء
|
||||
description: هيّئ الوكلاء المتخصصين واستخدمهم.
|
||||
---
|
||||
|
||||
الوكلاء هم مساعدون متخصصون بالذكاء الاصطناعي يمكن تهيئتهم لمهام وسير عمل محدد. يتيحون لك إنشاء أدوات مركزة مع موجّهات مخصصة ونماذج وصلاحية وصول للأدوات.
|
||||
|
||||
:::tip
|
||||
استخدم وكيل plan لتحليل الشفرة ومراجعة الاقتراحات بدون إجراء أي تغييرات على الشفرة.
|
||||
:::
|
||||
|
||||
يمكنك التبديل بين الوكلاء أثناء الجلسة أو استدعاؤهم عبر الإشارة بـ `@`.
|
||||
|
||||
---
|
||||
|
||||
## الأنواع
|
||||
|
||||
يوجد نوعان من الوكلاء في OpenCode: وكلاء أساسيون ووكلاء فرعيون.
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء الأساسيون
|
||||
|
||||
الوكلاء الأساسيون هم المساعدون الرئيسيون الذين تتفاعل معهم مباشرة. يمكنك التنقل بينهم باستخدام مفتاح **Tab** أو اختصار `switch_agent` الذي قمت بتهيئته. يتولى هؤلاء الوكلاء محادثتك الرئيسية. يتم ضبط وصول الأدوات عبر الأذونات — على سبيل المثال، يمتلك Build جميع الأدوات مفعلة بينما يكون Plan مقيّدا.
|
||||
|
||||
:::tip
|
||||
يمكنك استخدام مفتاح **Tab** للتبديل بين الوكلاء الأساسيين أثناء الجلسة.
|
||||
:::
|
||||
|
||||
يأتي OpenCode مع وكيلين أساسيين مدمجين: **Build** و **Plan**. سنلقي نظرة عليهما أدناه.
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء الفرعيون
|
||||
|
||||
الوكلاء الفرعيون هم مساعدين متخصصين يمكن للوكلاء الأساسيين استدعاؤهم لمهام محددة. يمكنك أيضا استدعاؤهم يدويا عبر **الإشارة بـ @** في رسائلك.
|
||||
|
||||
يأتي OpenCode مع وكيلين فرعيين مدمجين: **General** و **Explore**. سنلقي نظرة على ذلك أدناه.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
يأتي OpenCode مع وكيلين أساسيين مدمجين ووكيلين فرعيين مدمجين.
|
||||
|
||||
---
|
||||
|
||||
### استخدام build
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
Build هو الوكيل الأساسي **الافتراضي** مع تفعيل جميع الأدوات. هذا هو الوكيل القياسي لأعمال التطوير عندما تحتاج إلى وصول كامل لعمليات الملفات وأوامر النظام.
|
||||
|
||||
---
|
||||
|
||||
### استخدام plan
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل مقيّد صُمم للتخطيط والتحليل. نستخدم نظام أذونات لمنحك تحكما أكبر ومنع التغييرات غير المقصودة.
|
||||
افتراضيا، يتم ضبط كل ما يلي على `ask`:
|
||||
|
||||
- `file edits`: جميع عمليات الكتابة والتصحيح (patches) والتحرير
|
||||
- `bash`: جميع أوامر bash
|
||||
|
||||
يفيد هذا الوكيل عندما تريد من النموذج تحليل الشفرة أو اقتراح تغييرات أو إنشاء خطط بدون إجراء أي تعديلات فعلية على قاعدة الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### استخدام general
|
||||
|
||||
_الوضع_: `subagent`
|
||||
|
||||
وكيل عام الغرض للبحث في أسئلة معقدة وتنفيذ مهام متعددة الخطوات. لديه وصول كامل للأدوات (باستثناء todo)، لذا يمكنه إجراء تغييرات على الملفات عند الحاجة. استخدمه لتشغيل عدة وحدات عمل بالتوازي.
|
||||
|
||||
---
|
||||
|
||||
### استخدام explore
|
||||
|
||||
_الوضع_: `subagent`
|
||||
|
||||
وكيل سريع للقراءة فقط لاستكشاف قواعد الشفرة. لا يستطيع تعديل الملفات. استخدمه عندما تحتاج إلى العثور بسرعة على ملفات عبر أنماط، أو البحث في الشفرة عن كلمات مفتاحية، أو الإجابة عن أسئلة حول قاعدة الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### استخدام compaction
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي يضغط السياق الطويل إلى ملخص أصغر. يعمل تلقائيا عند الحاجة ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
### استخدام title
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي ينشئ عناوين قصيرة للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
### استخدام summary
|
||||
|
||||
_الوضع_: `primary`
|
||||
|
||||
وكيل نظام مخفي ينشئ ملخصات للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
1. للوكلاء الأساسيين، استخدم مفتاح **Tab** للتنقل بينهم أثناء الجلسة. يمكنك أيضا استخدام اختصار `switch_agent` الذي قمت بتهيئته.
|
||||
|
||||
2. يمكن استدعاء الوكلاء الفرعيين:
|
||||
- **تلقائيا** بواسطة الوكلاء الأساسيين لمهام متخصصة بناء على أوصافهم.
|
||||
- يدويا عبر **الإشارة بـ @** إلى وكيل فرعي في رسالتك. على سبيل المثال:
|
||||
|
||||
```txt frame="none"
|
||||
@general help me search for this function
|
||||
```
|
||||
|
||||
3. **التنقل بين الجلسات**: عندما ينشئ الوكلاء الفرعيون جلسات فرعية خاصة بهم، يمكنك التنقل بين الجلسة الأم وجميع الجلسات الفرعية باستخدام:
|
||||
- **\<Leader>+Right** (أو اختصار `session_child_cycle` الذي قمت بتهيئته) للتنقل للأمام عبر parent → child1 → child2 → ... → parent
|
||||
- **\<Leader>+Left** (أو اختصار `session_child_cycle_reverse` الذي قمت بتهيئته) للتنقل للخلف عبر parent ← child1 ← child2 ← ... ← parent
|
||||
|
||||
يتيح لك ذلك التبديل بسلاسة بين المحادثة الرئيسية وعمل الوكلاء الفرعيين المتخصص.
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
يمكنك تخصيص الوكلاء المدمجين أو إنشاء وكلائك عبر التهيئة. يمكن تهيئة الوكلاء بطريقتين:
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
هيّئ الوكلاء في ملف إعدادات `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"mode": "primary",
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
},
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
يمكنك أيضا تعريف الوكلاء باستخدام ملفات Markdown. ضعها في:
|
||||
|
||||
- عام: `~/.config/opencode/agents/`
|
||||
- لكل مشروع: `.opencode/agents/`
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Reviews code for quality and best practices
|
||||
mode: subagent
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
يصبح اسم ملف Markdown هو اسم الوكيل. على سبيل المثال، ينشئ `review.md` وكيلا باسم `review`.
|
||||
|
||||
---
|
||||
|
||||
## الخيارات
|
||||
|
||||
لنلق نظرة على خيارات التهيئة هذه بمزيد من التفصيل.
|
||||
|
||||
---
|
||||
|
||||
### الوصف
|
||||
|
||||
استخدم خيار `description` لتقديم وصف موجز لما يفعله الوكيل ومتى ينبغي استخدامه.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"description": "Reviews code for best practices and potential issues"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار تهيئة **إلزامي**.
|
||||
|
||||
---
|
||||
|
||||
### درجة الحرارة
|
||||
|
||||
تحكم في العشوائية والإبداع في ردود النموذج عبر إعداد `temperature`.
|
||||
|
||||
القيم الأقل تجعل الردود أكثر تركيزا وحتمية، بينما تزيد القيم الأعلى من الإبداع والتنوع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عادة تتراوح قيم `temperature` بين 0.0 و 1.0:
|
||||
|
||||
- **0.0-0.2**: ردود شديدة التركيز وحتمية، مثالية لتحليل الشفرة والتخطيط
|
||||
- **0.3-0.5**: ردود متوازنة مع قدر من الإبداع، مناسبة لمهام التطوير العامة
|
||||
- **0.6-1.0**: ردود أكثر إبداعا وتنوعا، مفيدة للعصف الذهني والاستكشاف
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد temperature، يستخدم OpenCode القيم الافتراضية الخاصة بالنموذج؛ عادة 0 لمعظم النماذج و 0.55 لنماذج Qwen.
|
||||
|
||||
---
|
||||
|
||||
### الحد الأقصى للخطوات
|
||||
|
||||
تحكم في الحد الأقصى لعدد التكرارات الوكيلة التي يمكن لوكيل تنفيذها قبل أن يُجبر على الرد بنص فقط. يتيح ذلك للمستخدمين الذين يرغبون في التحكم بالتكاليف وضع حد للإجراءات الوكيلة.
|
||||
|
||||
إذا لم يتم ضبط هذا الخيار، سيستمر الوكيل بالتكرار حتى يقرر النموذج التوقف أو يقاطع المستخدم الجلسة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"quick-thinker": {
|
||||
"description": "Fast reasoning with limited iterations",
|
||||
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
|
||||
"steps": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند بلوغ الحد، يتلقى الوكيل موجّها نظاميا خاصا يطلب منه الرد بملخص لعمله والمهام المتبقية الموصى بها.
|
||||
|
||||
:::caution
|
||||
الحقل القديم `maxSteps` متقادم. استخدم `steps` بدلا منه.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### التعطيل
|
||||
|
||||
اضبطه على `true` لتعطيل الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"disable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الموجّه
|
||||
|
||||
حدد ملف موجّه نظامي مخصص لهذا الوكيل عبر إعداد `prompt`. يجب أن يحتوي ملف الموجّه على تعليمات خاصة بهدف الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا المسار نسبي لمكان وجود ملف الإعدادات. لذلك يعمل هذا لكل من إعدادات OpenCode العامة وإعدادات المشروع.
|
||||
|
||||
---
|
||||
|
||||
### النموذج
|
||||
|
||||
استخدم إعداد `model` لتجاوز (override) النموذج لهذا الوكيل. يفيد ذلك لاستخدام نماذج مختلفة مُحسّنة لمهام مختلفة. على سبيل المثال، نموذج أسرع للتخطيط ونموذج أقدر للتنفيذ.
|
||||
|
||||
:::tip
|
||||
إذا لم تحدد نموذجا، يستخدم الوكلاء الأساسيون [النموذج المُهيأ عالميا](/docs/config#models)، بينما يستخدم الوكلاء الفرعيون نموذج الوكيل الأساسي الذي استدعاهم.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يستخدم معرّف النموذج في إعدادات OpenCode الصيغة `provider/model-id`. على سبيل المثال، إذا كنت تستخدم [OpenCode Zen](/docs/zen)، فستستخدم `opencode/gpt-5.1-codex` لـ GPT 5.1 Codex.
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
تحكم في الأدوات المتاحة لهذا الوكيل عبر إعداد `tools`. يمكنك تفعيل أو تعطيل أدوات محددة بضبطها على `true` أو `false`.
|
||||
|
||||
```json title="opencode.json" {3-6,9-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"bash": true
|
||||
},
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
إعدادات الوكيل الخاصة تتجاوز الإعدادات العامة.
|
||||
:::
|
||||
|
||||
يمكنك أيضا استخدام المحارف البديلة (wildcards) للتحكم في عدة أدوات دفعة واحدة. على سبيل المثال، لتعطيل جميع الأدوات القادمة من خادم MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"mymcp_*": false,
|
||||
"write": false,
|
||||
"edit": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد عن الأدوات](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### الأذونات
|
||||
|
||||
يمكنك تهيئة الأذونات لإدارة الإجراءات التي يستطيع الوكيل تنفيذها. حاليا، يمكن تهيئة أذونات أدوات `edit` و `bash` و `webfetch` إلى:
|
||||
|
||||
- `"ask"` — طلب الموافقة قبل تشغيل الأداة
|
||||
- `"allow"` — السماح بكل العمليات بدون موافقة
|
||||
- `"deny"` — تعطيل الأداة
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك تجاوز هذه الأذونات لكل وكيل.
|
||||
|
||||
```json title="opencode.json" {3-5,8-10}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny"
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"edit": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا ضبط الأذونات في وكلاء Markdown.
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash:
|
||||
"*": ask
|
||||
"git diff": allow
|
||||
"git log*": allow
|
||||
"grep *": allow
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
حلل الشفرة فقط واقترح التغييرات.
|
||||
```
|
||||
|
||||
يمكنك ضبط الأذونات لأوامر bash محددة.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git push": "ask",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن لهذا أن يقبل نمط glob.
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"git *": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ويمكنك أيضا استخدام المحرف البديل `*` لإدارة الأذونات لكل الأوامر.
|
||||
وبما أن آخر قاعدة مطابقة لها الأولوية، ضع قاعدة `*` أولا ثم القواعد الأكثر تخصيصا بعدها.
|
||||
|
||||
```json title="opencode.json" {8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git status *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد عن الأذونات](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### الوضع
|
||||
|
||||
تحكم في وضع الوكيل عبر إعداد `mode`. يُستخدم خيار `mode` لتحديد كيفية استخدام الوكيل.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"review": {
|
||||
"mode": "subagent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن ضبط خيار `mode` على `primary` أو `subagent` أو `all`. إذا لم يتم تحديد `mode`، فالقيمة الافتراضية هي `all`.
|
||||
|
||||
---
|
||||
|
||||
### مخفي
|
||||
|
||||
أخفِ وكيلا فرعيا من قائمة الإكمال التلقائي لـ `@` عبر `hidden: true`. يفيد ذلك للوكلاء الفرعيين الداخليين الذين ينبغي استدعاؤهم برمجيا فقط بواسطة وكلاء آخرين عبر أداة Task.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"internal-helper": {
|
||||
"mode": "subagent",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يؤثر هذا فقط على ظهور الوكيل للمستخدم في قائمة الإكمال التلقائي. لا يزال بإمكان النموذج استدعاء الوكلاء المخفيين عبر أداة Task إذا سمحت الأذونات.
|
||||
|
||||
:::note
|
||||
ينطبق فقط على الوكلاء ذوي `mode: subagent`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### أذونات Task
|
||||
|
||||
تحكم في أي الوكلاء الفرعيين يمكن لوكيل استدعاؤهم عبر أداة Task باستخدام `permission.task`. يستخدم أنماط glob لمطابقة مرنة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"orchestrator": {
|
||||
"mode": "primary",
|
||||
"permission": {
|
||||
"task": {
|
||||
"*": "deny",
|
||||
"orchestrator-*": "allow",
|
||||
"code-reviewer": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند ضبطها على `deny`، تتم إزالة الوكيل الفرعي بالكامل من وصف أداة Task، لذا لن يحاول النموذج استدعاءه.
|
||||
|
||||
:::tip
|
||||
تُقيّم القواعد بالترتيب، و **آخر قاعدة مطابقة هي التي تفوز**. في المثال أعلاه، يطابق `orchestrator-planner` كلا من `*` (deny) و `orchestrator-*` (allow)، ولكن بما أن `orchestrator-*` تأتي بعد `*` فالنتيجة هي `allow`.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
يمكن للمستخدمين دائما استدعاء أي وكيل فرعي مباشرة عبر قائمة الإكمال التلقائي لـ `@`، حتى لو كانت أذونات task للوكيل سترفض ذلك.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### اللون
|
||||
|
||||
خصص المظهر البصري للوكيل في واجهة المستخدم عبر خيار `color`. يؤثر ذلك على كيفية ظهور الوكيل في الواجهة.
|
||||
|
||||
استخدم لونا سداسيا صالحا (مثل `#FF5733`) أو لون سمة: `primary` و `secondary` و `accent` و `success` و `warning` و `error` و `info`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"creative": {
|
||||
"color": "#ff6b6b"
|
||||
},
|
||||
"code-reviewer": {
|
||||
"color": "accent"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Top P
|
||||
|
||||
تحكم في تنوع الردود عبر خيار `top_p`. بديل عن temperature للتحكم بالعشوائية.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"agent": {
|
||||
"brainstorm": {
|
||||
"top_p": 0.9
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتراوح القيم من 0.0 إلى 1.0. القيم الأقل أكثر تركيزا، والقيم الأعلى أكثر تنوعا.
|
||||
|
||||
---
|
||||
|
||||
### خيارات إضافية
|
||||
|
||||
أي خيارات أخرى تحددها في تهيئة الوكيل سيتم **تمريرها مباشرة** إلى مزود النموذج كخيارات للنموذج. يتيح لك ذلك استخدام ميزات ومعاملات خاصة بالمزود.
|
||||
|
||||
على سبيل المثال، مع نماذج الاستدلال من OpenAI يمكنك التحكم في مجهود الاستدلال:
|
||||
|
||||
```json title="opencode.json" {6,7}
|
||||
{
|
||||
"agent": {
|
||||
"deep-thinker": {
|
||||
"description": "Agent that uses high reasoning effort for complex problems",
|
||||
"model": "openai/gpt-5",
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذه الخيارات الإضافية تعتمد على النموذج والمزود. راجع توثيق مزودك لمعرفة المعاملات المتاحة.
|
||||
|
||||
:::tip
|
||||
شغّل `opencode models` لعرض قائمة بالنماذج المتاحة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## إنشاء وكلاء
|
||||
|
||||
يمكنك إنشاء وكلاء جدد باستخدام الأمر التالي:
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
سيقوم هذا الأمر التفاعلي بما يلي:
|
||||
|
||||
1. سيسألك أين تريد حفظ الوكيل: عام (global) أو خاص بالمشروع.
|
||||
2. سيطلب وصفا لما ينبغي أن يفعله الوكيل.
|
||||
3. سيولّد موجّها نظاميا ومعرّفا مناسبا.
|
||||
4. سيتيح لك اختيار الأدوات التي يمكن للوكيل الوصول إليها.
|
||||
5. أخيرا، سينشئ ملف Markdown يحتوي تهيئة الوكيل.
|
||||
|
||||
---
|
||||
|
||||
## حالات الاستخدام
|
||||
|
||||
فيما يلي بعض حالات الاستخدام الشائعة لوكلاء مختلفين.
|
||||
|
||||
- **Build agent**: أعمال تطوير كاملة مع تفعيل جميع الأدوات
|
||||
- **Plan agent**: تحليل وتخطيط بدون إجراء تغييرات
|
||||
- **Review agent**: مراجعة الشفرة مع وصول للقراءة فقط بالإضافة إلى أدوات التوثيق
|
||||
- **Debug agent**: يركز على التحقيق مع تفعيل أدوات bash والقراءة
|
||||
- **Docs agent**: كتابة التوثيق مع عمليات الملفات بدون أوامر النظام
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
فيما يلي بعض أمثلة الوكلاء التي قد تجدها مفيدة.
|
||||
|
||||
:::tip
|
||||
هل لديك وكيل تود مشاركته؟ [قدّم PR](https://github.com/anomalyco/opencode).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### وكيل التوثيق
|
||||
|
||||
```markdown title="~/.config/opencode/agents/docs-writer.md"
|
||||
---
|
||||
description: Writes and maintains project documentation
|
||||
mode: subagent
|
||||
tools:
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are a technical writer. Create clear, comprehensive documentation.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Clear explanations
|
||||
- Proper structure
|
||||
- Code examples
|
||||
- User-friendly language
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### مدقق أمني
|
||||
|
||||
```markdown title="~/.config/opencode/agents/security-auditor.md"
|
||||
---
|
||||
description: Performs security audits and identifies vulnerabilities
|
||||
mode: subagent
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are a security expert. Focus on identifying potential security issues.
|
||||
|
||||
Look for:
|
||||
|
||||
- Input validation vulnerabilities
|
||||
- Authentication and authorization flaws
|
||||
- Data exposure risks
|
||||
- Dependency vulnerabilities
|
||||
- Configuration security issues
|
||||
```
|
||||
601
packages/web/src/content/docs/ar/cli.mdx
Normal file
601
packages/web/src/content/docs/ar/cli.mdx
Normal file
@@ -0,0 +1,601 @@
|
||||
---
|
||||
title: سطر الأوامر
|
||||
description: خيارات وأوامر سطر أوامر OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
يبدأ سطر أوامر OpenCode افتراضيا واجهة [TUI](/docs/tui) عند تشغيله بدون أي معاملات.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
كما يدعم أيضا أوامر موثقة في هذه الصفحة، ما يتيح لك التفاعل مع OpenCode برمجيا.
|
||||
|
||||
```bash
|
||||
opencode run "Explain how closures work in JavaScript"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### tui
|
||||
|
||||
بدء واجهة المستخدم الطرفية (TUI) الخاصة بـ OpenCode.
|
||||
|
||||
```bash
|
||||
opencode [project]
|
||||
```
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | المختصر | الوصف |
|
||||
| ------------ | ------- | -------------------------------------------- |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--prompt` | | الموجّه المراد استخدامه |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--port` | | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
## الأوامر
|
||||
|
||||
يتضمن سطر أوامر OpenCode أيضا الأوامر التالية.
|
||||
|
||||
---
|
||||
|
||||
### agent
|
||||
|
||||
إدارة وكلاء OpenCode.
|
||||
|
||||
```bash
|
||||
opencode agent [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### attach
|
||||
|
||||
إرفاق طرفية بخادم الواجهة الخلفية لـ OpenCode قيد التشغيل بالفعل، والذي تم تشغيله عبر الأمرين `serve` أو `web`.
|
||||
|
||||
```bash
|
||||
opencode attach [url]
|
||||
```
|
||||
|
||||
يتيح ذلك استخدام واجهة TUI مع واجهة خلفية لـ OpenCode تعمل عن بعد. على سبيل المثال:
|
||||
|
||||
```bash
|
||||
# Start the backend server for web/mobile access
|
||||
opencode web --port 4096 --hostname 0.0.0.0
|
||||
|
||||
# In another terminal, attach the TUI to the running backend
|
||||
opencode attach http://10.20.30.40:4096
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ----------- | ------- | ----------------------------------- |
|
||||
| `--dir` | | دليل العمل الذي ستبدأ منه واجهة TUI |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
|
||||
---
|
||||
|
||||
#### create
|
||||
|
||||
إنشاء وكيل جديد بإعدادات مخصصة.
|
||||
|
||||
```bash
|
||||
opencode agent create
|
||||
```
|
||||
|
||||
سيرشدك هذا الأمر خلال إنشاء وكيل جديد مع موجه نظام مخصص وإعدادات الأدوات.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع الوكلاء المتاحين.
|
||||
|
||||
```bash
|
||||
opencode agent list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### auth
|
||||
|
||||
أمر لإدارة بيانات الاعتماد وتسجيل الدخول لمزودي الخدمة.
|
||||
|
||||
```bash
|
||||
opencode auth [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### login
|
||||
|
||||
يعتمد OpenCode على قائمة المزودين في [Models.dev](https://models.dev)، لذا يمكنك استخدام `opencode auth login` لتهيئة مفاتيح API لأي مزود ترغب باستخدامه. يتم حفظ ذلك في `~/.local/share/opencode/auth.json`.
|
||||
|
||||
```bash
|
||||
opencode auth login
|
||||
```
|
||||
|
||||
عند تشغيل OpenCode يقوم بتحميل المزودين من ملف بيانات الاعتماد، وكذلك أي مفاتيح معرّفة في متغيرات البيئة لديك أو في ملف `.env` ضمن مشروعك.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
يسرد جميع المزودين الذين تم توثيقهم كما هم محفوظون في ملف بيانات الاعتماد.
|
||||
|
||||
```bash
|
||||
opencode auth list
|
||||
```
|
||||
|
||||
أو النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
يسجلك خارج مزود عبر حذفه من ملف بيانات الاعتماد.
|
||||
|
||||
```bash
|
||||
opencode auth logout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### github
|
||||
|
||||
إدارة وكيل GitHub لأتمتة المستودع.
|
||||
|
||||
```bash
|
||||
opencode github [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### install
|
||||
|
||||
تثبيت وكيل GitHub في مستودعك.
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
يقوم ذلك بإعداد سير عمل GitHub Actions اللازم ويرشدك خلال عملية التهيئة. [اعرف المزيد](/docs/github).
|
||||
|
||||
---
|
||||
|
||||
#### run
|
||||
|
||||
تشغيل وكيل GitHub. يُستخدم هذا عادة ضمن GitHub Actions.
|
||||
|
||||
```bash
|
||||
opencode github run
|
||||
```
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| --------- | ------------------------------------ |
|
||||
| `--event` | حدث GitHub مُحاكى لتشغيل الوكيل عليه |
|
||||
| `--token` | رمز وصول شخصي لـ GitHub |
|
||||
|
||||
---
|
||||
|
||||
### mcp
|
||||
|
||||
إدارة خوادم Model Context Protocol.
|
||||
|
||||
```bash
|
||||
opencode mcp [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### add
|
||||
|
||||
إضافة خادم MCP إلى تهيئتك.
|
||||
|
||||
```bash
|
||||
opencode mcp add
|
||||
```
|
||||
|
||||
سيرشدك هذا الأمر خلال إضافة خادم MCP محلي أو بعيد.
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع خوادم MCP المُهيأة وحالة اتصالها.
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
أو استخدم النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode mcp ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### auth
|
||||
|
||||
إجراء المصادقة مع خادم MCP يدعم OAuth.
|
||||
|
||||
```bash
|
||||
opencode mcp auth [name]
|
||||
```
|
||||
|
||||
إذا لم تُحدِّد اسم خادم، فسيُطلب منك الاختيار من الخوادم المتاحة الداعمة لـ OAuth.
|
||||
|
||||
يمكنك أيضا عرض الخوادم الداعمة لـ OAuth وحالة المصادقة الخاصة بها.
|
||||
|
||||
```bash
|
||||
opencode mcp auth list
|
||||
```
|
||||
|
||||
أو استخدم النسخة المختصرة.
|
||||
|
||||
```bash
|
||||
opencode mcp auth ls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### logout
|
||||
|
||||
إزالة بيانات اعتماد OAuth لخادم MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp logout [name]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### debug
|
||||
|
||||
تشخيص مشاكل اتصال OAuth لخادم MCP.
|
||||
|
||||
```bash
|
||||
opencode mcp debug <name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
عرض جميع النماذج المتاحة من المزودين المُهيأين.
|
||||
|
||||
```bash
|
||||
opencode models [provider]
|
||||
```
|
||||
|
||||
يعرض هذا الأمر جميع النماذج المتاحة عبر المزودين المُهيأين لديك بصيغة `provider/model`.
|
||||
|
||||
هذا مفيد لتحديد اسم النموذج الدقيق الذي ستستخدمه في [تهيئتك](/docs/config/).
|
||||
|
||||
يمكنك اختياريا تمرير معرّف مزود لتصفية النماذج حسب ذلك المزود.
|
||||
|
||||
```bash
|
||||
opencode models anthropic
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------- |
|
||||
| `--refresh` | تحديث ذاكرة التخزين المؤقت للنماذج من models.dev |
|
||||
| `--verbose` | استخدام مخرجات أكثر تفصيلا للنماذج (تشمل بيانات مثل التكاليف) |
|
||||
|
||||
استخدم الراية `--refresh` لتحديث قائمة النماذج المخزنة مؤقتا. يفيد ذلك عند إضافة نماذج جديدة إلى مزود وتريد رؤيتها في OpenCode.
|
||||
|
||||
```bash
|
||||
opencode models --refresh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### run
|
||||
|
||||
تشغيل opencode في وضع غير تفاعلي عبر تمرير موجه مباشرة.
|
||||
|
||||
```bash
|
||||
opencode run [message..]
|
||||
```
|
||||
|
||||
هذا مفيد للبرمجة النصية والأتمتة، أو عندما تريد إجابة سريعة دون تشغيل واجهة TUI كاملة. على سبيل المثال.
|
||||
|
||||
```bash "opencode run"
|
||||
opencode run Explain the use of context in Go
|
||||
```
|
||||
|
||||
يمكنك أيضا الإرفاق بمثيل `opencode serve` قيد التشغيل لتجنّب زمن الإقلاع البارد لخوادم MCP في كل تشغيل:
|
||||
|
||||
```bash
|
||||
# Start a headless server in one terminal
|
||||
opencode serve
|
||||
|
||||
# In another terminal, run commands that attach to it
|
||||
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------ | ------- | -------------------------------------------------------------- |
|
||||
| `--command` | | الأمر المراد تشغيله؛ استخدم الرسالة كوسائط |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--share` | | مشاركة الجلسة |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--file` | `-f` | ملف/ملفات لإرفاقها بالرسالة |
|
||||
| `--format` | | التنسيق: default (منسق) أو json (أحداث JSON خام) |
|
||||
| `--title` | | عنوان للجلسة (يستخدم موجهًا مقتطعًا إن لم تُحدَّد قيمة) |
|
||||
| `--attach` | | الإرفاق بخادم opencode قيد التشغيل (مثل http://localhost:4096) |
|
||||
| `--port` | | منفذ الخادم المحلي (الافتراضي منفذ عشوائي) |
|
||||
|
||||
---
|
||||
|
||||
### serve
|
||||
|
||||
بدء خادم OpenCode بدون واجهة للوصول عبر API. راجع [توثيق الخادم](/docs/server) لواجهة HTTP الكاملة.
|
||||
|
||||
```bash
|
||||
opencode serve
|
||||
```
|
||||
|
||||
يشغّل هذا خادم HTTP يوفّر وصولا عبر API لوظائف opencode دون واجهة TUI. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
### session
|
||||
|
||||
إدارة جلسات OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
|
||||
عرض جميع جلسات OpenCode.
|
||||
|
||||
```bash
|
||||
opencode session list
|
||||
```
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------- | ------- | ------------------------------------- |
|
||||
| `--max-count` | `-n` | حصر النتائج في أحدث N جلسات |
|
||||
| `--format` | | تنسيق المخرجات: table أو json (table) |
|
||||
|
||||
---
|
||||
|
||||
### stats
|
||||
|
||||
عرض إحصاءات استخدام الرموز والتكلفة لجلسات OpenCode لديك.
|
||||
|
||||
```bash
|
||||
opencode stats
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------------------- |
|
||||
| `--days` | عرض الإحصاءات لآخر N يومًا (الافتراضي: كل الوقت) |
|
||||
| `--tools` | عدد الأدوات المطلوب عرضها (الافتراضي: الكل) |
|
||||
| `--models` | عرض تفصيل استخدام النماذج (مخفي افتراضيا). مرّر رقمًا لعرض أعلى N |
|
||||
| `--project` | التصفية حسب المشروع (الافتراضي: كل المشاريع، سلسلة فارغة: المشروع الحالي) |
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
تصدير بيانات الجلسة بصيغة JSON.
|
||||
|
||||
```bash
|
||||
opencode export [sessionID]
|
||||
```
|
||||
|
||||
إذا لم تُقدّم معرّف جلسة، فسيُطلب منك الاختيار من الجلسات المتاحة.
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
|
||||
استيراد بيانات الجلسة من ملف JSON أو رابط مشاركة OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import <file>
|
||||
```
|
||||
|
||||
يمكنك الاستيراد من ملف محلي أو من رابط مشاركة OpenCode.
|
||||
|
||||
```bash
|
||||
opencode import session.json
|
||||
opencode import https://opncd.ai/s/abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### web
|
||||
|
||||
بدء خادم OpenCode بدون واجهة مع واجهة ويب.
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
يشغّل هذا خادم HTTP ويفتح متصفح ويب للوصول إلى OpenCode عبر واجهة ويب. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
### acp
|
||||
|
||||
بدء خادم ACP (Agent Client Protocol).
|
||||
|
||||
```bash
|
||||
opencode acp
|
||||
```
|
||||
|
||||
يشغّل هذا الأمر خادم ACP يتواصل عبر stdin/stdout باستخدام nd-JSON.
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | --------------------------------- |
|
||||
| `--cwd` | دليل العمل |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
### uninstall
|
||||
|
||||
إلغاء تثبيت OpenCode وإزالة جميع الملفات ذات الصلة.
|
||||
|
||||
```bash
|
||||
opencode uninstall
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| --------------- | ------- | ----------------------------------- |
|
||||
| `--keep-config` | `-c` | الإبقاء على ملفات التهيئة |
|
||||
| `--keep-data` | `-d` | الإبقاء على بيانات الجلسات واللقطات |
|
||||
| `--dry-run` | | عرض ما سيتم حذفه دون تنفيذ الحذف |
|
||||
| `--force` | `-f` | تخطي مطالبات التأكيد |
|
||||
|
||||
---
|
||||
|
||||
### upgrade
|
||||
|
||||
تحديث opencode إلى أحدث إصدار أو إلى إصدار محدد.
|
||||
|
||||
```bash
|
||||
opencode upgrade [target]
|
||||
```
|
||||
|
||||
للترقية إلى أحدث إصدار.
|
||||
|
||||
```bash
|
||||
opencode upgrade
|
||||
```
|
||||
|
||||
للترقية إلى إصدار محدد.
|
||||
|
||||
```bash
|
||||
opencode upgrade v0.1.48
|
||||
```
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ---------- | ------- | ----------------------------------------------------------- |
|
||||
| `--method` | `-m` | طريقة التثبيت المستخدمة: curl أو npm أو pnpm أو bun أو brew |
|
||||
|
||||
---
|
||||
|
||||
## الخيارات العامة
|
||||
|
||||
يدعم سطر أوامر opencode الخيارات العامة التالية.
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| -------------- | ------- | -------------------------------------- |
|
||||
| `--help` | `-h` | عرض المساعدة |
|
||||
| `--version` | `-v` | طباعة رقم الإصدار |
|
||||
| `--print-logs` | | طباعة السجلات إلى stderr |
|
||||
| `--log-level` | | مستوى السجل (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
## متغيرات البيئة
|
||||
|
||||
يمكن تهيئة OpenCode باستخدام متغيرات البيئة.
|
||||
|
||||
| المتغير | النوع | الوصف |
|
||||
| ------------------------------------- | ------- | --------------------------------------------------------- |
|
||||
| `OPENCODE_AUTO_SHARE` | boolean | مشاركة الجلسات تلقائيا |
|
||||
| `OPENCODE_GIT_BASH_PATH` | string | مسار ملف Git Bash التنفيذي على Windows |
|
||||
| `OPENCODE_CONFIG` | string | مسار ملف التهيئة |
|
||||
| `OPENCODE_CONFIG_DIR` | string | مسار دليل التهيئة |
|
||||
| `OPENCODE_CONFIG_CONTENT` | string | محتوى تهيئة JSON مُضمّن |
|
||||
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | تعطيل التحقق التلقائي من التحديثات |
|
||||
| `OPENCODE_DISABLE_PRUNE` | boolean | تعطيل تنقية البيانات القديمة |
|
||||
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | تعطيل تحديث عنوان الطرفية تلقائيا |
|
||||
| `OPENCODE_PERMISSION` | string | تهيئة أذونات JSON مُضمّنة |
|
||||
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | تعطيل الإضافات الافتراضية |
|
||||
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | تعطيل تنزيل خوادم LSP تلقائيا |
|
||||
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | تفعيل النماذج التجريبية |
|
||||
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | تعطيل ضغط السياق تلقائيا |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | تعطيل القراءة من `.claude` (الموجه + المهارات) |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | تعطيل قراءة `~/.claude/CLAUDE.md` |
|
||||
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | تعطيل تحميل `.claude/skills` |
|
||||
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | تعطيل جلب النماذج من مصادر بعيدة |
|
||||
| `OPENCODE_FAKE_VCS` | string | مزود VCS وهمي لأغراض الاختبار |
|
||||
| `OPENCODE_DISABLE_FILETIME_CHECK` | boolean | تعطيل التحقق من وقت الملف لتحسين الأداء |
|
||||
| `OPENCODE_CLIENT` | string | معرّف العميل (الافتراضي `cli`) |
|
||||
| `OPENCODE_ENABLE_EXA` | boolean | تفعيل أدوات بحث الويب من Exa |
|
||||
| `OPENCODE_SERVER_PASSWORD` | string | تفعيل المصادقة الأساسية لخادمي `serve`/`web` |
|
||||
| `OPENCODE_SERVER_USERNAME` | string | تجاوز اسم مستخدم المصادقة الأساسية (الافتراضي `opencode`) |
|
||||
| `OPENCODE_MODELS_URL` | string | رابط مخصص لجلب تهيئة النماذج |
|
||||
|
||||
---
|
||||
|
||||
### تجريبي
|
||||
|
||||
تقوم متغيرات البيئة التالية بتفعيل ميزات تجريبية قد تتغير أو تتم إزالتها.
|
||||
|
||||
| المتغير | النوع | الوصف |
|
||||
| ----------------------------------------------- | ------- | ------------------------------------------- |
|
||||
| `OPENCODE_EXPERIMENTAL` | boolean | تفعيل جميع الميزات التجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | تفعيل اكتشاف الأيقونات |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | تعطيل النسخ عند التحديد في TUI |
|
||||
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | المهلة الافتراضية لأوامر bash بالميلي ثانية |
|
||||
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | الحد الأقصى لرموز المخرجات لاستجابات LLM |
|
||||
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | تفعيل مراقب الملفات لكامل الدليل |
|
||||
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | تفعيل مُنسّق oxfmt |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | تفعيل أداة LSP تجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | تعطيل مراقب الملفات |
|
||||
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | تفعيل ميزات Exa التجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | تفعيل تدقيق أنواع LSP تجريبي |
|
||||
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | تفعيل ميزات markdown تجريبية |
|
||||
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | تفعيل وضع الخطة |
|
||||
322
packages/web/src/content/docs/ar/commands.mdx
Normal file
322
packages/web/src/content/docs/ar/commands.mdx
Normal file
@@ -0,0 +1,322 @@
|
||||
---
|
||||
title: الأوامر
|
||||
description: أنشئ أوامر مخصصة للمهام المتكررة.
|
||||
---
|
||||
|
||||
تتيح لك الأوامر المخصصة تحديد مُطالبة (prompt) تريد تشغيلها عند تنفيذ ذلك الأمر في واجهة TUI.
|
||||
|
||||
```bash frame="none"
|
||||
/my-command
|
||||
```
|
||||
|
||||
تُعدّ الأوامر المخصصة إضافةً إلى الأوامر المضمنة مثل `/init` و`/undo` و`/redo` و`/share` و`/help`. [اعرف المزيد](/docs/tui#commands).
|
||||
|
||||
---
|
||||
|
||||
## إنشاء ملفات الأوامر
|
||||
|
||||
أنشئ ملفات Markdown داخل الدليل `commands/` لتعريف أوامر مخصصة.
|
||||
|
||||
أنشئ الملف `.opencode/commands/test.md`:
|
||||
|
||||
```md title=".opencode/commands/test.md"
|
||||
---
|
||||
description: Run tests with coverage
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Run the full test suite with coverage report and show any failures.
|
||||
Focus on the failing tests and suggest fixes.
|
||||
```
|
||||
|
||||
تُعرِّف ترويسة Frontmatter خصائص الأمر، بينما يصبح المحتوى هو القالب.
|
||||
|
||||
استخدم الأمر بكتابة `/` ثم اسم الأمر.
|
||||
|
||||
```bash frame="none"
|
||||
"/test"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك إضافة أوامر مخصصة عبر إعدادات OpenCode أو بإنشاء ملفات Markdown داخل الدليل `commands/`.
|
||||
|
||||
---
|
||||
|
||||
### JSON
|
||||
|
||||
استخدم خيار `command` في [config](/docs/config) الخاص بـ OpenCode:
|
||||
|
||||
```json title="opencode.jsonc" {4-12}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
// This becomes the name of the command
|
||||
"test": {
|
||||
// This is the prompt that will be sent to the LLM
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
|
||||
// This is shown as the description in the TUI
|
||||
"description": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك الآن تشغيل هذا الأمر في واجهة TUI:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Markdown
|
||||
|
||||
يمكنك أيضًا تعريف الأوامر باستخدام ملفات Markdown. ضعها في:
|
||||
|
||||
- على مستوى النظام: `~/.config/opencode/commands/`
|
||||
- لكل مشروع: `.opencode/commands/`
|
||||
|
||||
```markdown title="~/.config/opencode/commands/test.md"
|
||||
---
|
||||
description: Run tests with coverage
|
||||
agent: build
|
||||
model: anthropic/claude-3-5-sonnet-20241022
|
||||
---
|
||||
|
||||
Run the full test suite with coverage report and show any failures.
|
||||
Focus on the failing tests and suggest fixes.
|
||||
```
|
||||
|
||||
يصبح اسم ملف Markdown هو اسم الأمر. على سبيل المثال، يتيح لك `test.md` تشغيل:
|
||||
|
||||
```bash frame="none"
|
||||
/test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إعداد المُطالبة
|
||||
|
||||
تدعم مُطالبات الأوامر المخصصة عدة عناصر نائبة (placeholders) وبنى خاصة.
|
||||
|
||||
---
|
||||
|
||||
### الوسائط
|
||||
|
||||
مرِّر وسائط إلى الأوامر باستخدام العنصر النائب `$ARGUMENTS`.
|
||||
|
||||
```md title=".opencode/commands/component.md"
|
||||
---
|
||||
description: Create a new component
|
||||
---
|
||||
|
||||
Create a new React component named $ARGUMENTS with TypeScript support.
|
||||
Include proper typing and basic structure.
|
||||
```
|
||||
|
||||
شغِّل الأمر مع وسائط:
|
||||
|
||||
```bash frame="none"
|
||||
/component Button
|
||||
```
|
||||
|
||||
وسيُستبدل `$ARGUMENTS` بالقيمة `Button`.
|
||||
|
||||
يمكنك أيضًا الوصول إلى كل وسيط على حدة باستخدام المعاملات الموضعية:
|
||||
|
||||
- `$1` - الوسيط الأول
|
||||
- `$2` - الوسيط الثاني
|
||||
- `$3` - الوسيط الثالث
|
||||
- وهكذا...
|
||||
|
||||
على سبيل المثال:
|
||||
|
||||
```md title=".opencode/commands/create-file.md"
|
||||
---
|
||||
description: Create a new file with content
|
||||
---
|
||||
|
||||
Create a file named $1 in the directory $2
|
||||
with the following content: $3
|
||||
```
|
||||
|
||||
شغِّل الأمر:
|
||||
|
||||
```bash frame="none"
|
||||
/create-file config.json src "{ \"key\": \"value\" }"
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى استبدال:
|
||||
|
||||
- `$1` بـ `config.json`
|
||||
- `$2` بـ `src`
|
||||
- `$3` بـ `{ "key": "value" }`
|
||||
|
||||
---
|
||||
|
||||
### خرج الصدفة (Shell)
|
||||
|
||||
استخدم _!`command`_ لحقن خرج [أمر bash](/docs/tui#bash-commands) داخل مُطالبتك.
|
||||
|
||||
على سبيل المثال، لإنشاء أمر مخصص يُحلل تغطية الاختبارات:
|
||||
|
||||
```md title=".opencode/commands/analyze-coverage.md"
|
||||
---
|
||||
description: Analyze test coverage
|
||||
---
|
||||
|
||||
Here are the current test results:
|
||||
!`npm test`
|
||||
|
||||
Based on these results, suggest improvements to increase coverage.
|
||||
```
|
||||
|
||||
أو لمراجعة التغييرات الأخيرة:
|
||||
|
||||
```md title=".opencode/commands/review-changes.md"
|
||||
---
|
||||
description: Review recent changes
|
||||
---
|
||||
|
||||
Recent git commits:
|
||||
!`git log --oneline -10`
|
||||
|
||||
Review these changes and suggest any improvements.
|
||||
```
|
||||
|
||||
تُشغَّل الأوامر في دليل جذر مشروعك ويصبح خرجها جزءًا من المُطالبة.
|
||||
|
||||
---
|
||||
|
||||
### مراجع الملفات
|
||||
|
||||
ضمِّن الملفات في أمرك باستخدام `@` ثم اسم الملف.
|
||||
|
||||
```md title=".opencode/commands/review-component.md"
|
||||
---
|
||||
description: Review component
|
||||
---
|
||||
|
||||
Review the component in @src/components/Button.tsx.
|
||||
Check for performance issues and suggest improvements.
|
||||
```
|
||||
|
||||
يُدرج محتوى الملف في المُطالبة تلقائيًا.
|
||||
|
||||
---
|
||||
|
||||
## الخيارات
|
||||
|
||||
لنلقِ نظرةً على خيارات الإعداد بالتفصيل.
|
||||
|
||||
---
|
||||
|
||||
### القالب (`template`)
|
||||
|
||||
يُعرِّف خيار `template` المُطالبة التي ستُرسل إلى نموذج اللغة (LLM) عند تنفيذ الأمر.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار إعداد **إلزامي**.
|
||||
|
||||
---
|
||||
|
||||
### الوصف (`description`)
|
||||
|
||||
استخدم خيار `description` لتقديم وصف موجز لما يفعله الأمر.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"test": {
|
||||
"description": "Run tests with coverage"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يظهر هذا الوصف في واجهة TUI عند كتابة الأمر.
|
||||
|
||||
---
|
||||
|
||||
### الوكيل (`agent`)
|
||||
|
||||
استخدم إعداد `agent` لتحديد أي [agent](/docs/agents) ينبغي أن ينفّذ هذا الأمر (اختياريًا).
|
||||
إذا كان هذا [subagent](/docs/agents/#subagents)، فسيؤدي الأمر افتراضيًا إلى تشغيل استدعاء subagent.
|
||||
لإيقاف هذا السلوك، عيِّن `subtask` إلى `false`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"review": {
|
||||
"agent": "plan"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار إعداد **اختياري**. إن لم تُحدده، فسيُستخدم agent الحالي افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
### مهمة فرعية (`subtask`)
|
||||
|
||||
استخدم القيمة المنطقية `subtask` لفرض أن يُشغِّل الأمر استدعاء [subagent](/docs/agents/#subagents).
|
||||
يفيد هذا إذا أردت ألا يلوّث الأمر السياق الأساسي لديك، إذ سيُجبر (**force**) الـ agent على العمل كـ subagent،
|
||||
حتى لو كان `mode` مضبوطًا على `primary` في إعدادات [agent](/docs/agents).
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"subtask": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار إعداد **اختياري**.
|
||||
|
||||
---
|
||||
|
||||
### النموذج (`model`)
|
||||
|
||||
استخدم إعداد `model` لتجاوز النموذج الافتراضي لهذا الأمر.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"command": {
|
||||
"analyze": {
|
||||
"model": "anthropic/claude-3-5-sonnet-20241022"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا خيار إعداد **اختياري**.
|
||||
|
||||
---
|
||||
|
||||
## الأوامر المضمنة
|
||||
|
||||
يتضمن opencode عدة أوامر مضمنة مثل `/init` و`/undo` و`/redo` و`/share` و`/help`؛ [اعرف المزيد](/docs/tui#commands).
|
||||
|
||||
:::note
|
||||
يمكن للأوامر المخصصة تجاوز الأوامر المضمنة.
|
||||
:::
|
||||
|
||||
إذا عرّفت أمرًا مخصصًا بالاسم نفسه، فسيستبدل الأمر المضمن.
|
||||
684
packages/web/src/content/docs/ar/config.mdx
Normal file
684
packages/web/src/content/docs/ar/config.mdx
Normal file
@@ -0,0 +1,684 @@
|
||||
---
|
||||
title: الإعدادات
|
||||
description: استخدام ملف إعدادات OpenCode بصيغة JSON.
|
||||
---
|
||||
|
||||
يمكنك ضبط OpenCode باستخدام ملف إعدادات بصيغة JSON.
|
||||
|
||||
---
|
||||
|
||||
## التنسيق
|
||||
|
||||
يدعم OpenCode تنسيقي **JSON** و**JSONC** (JSON مع تعليقات).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
// Theme configuration
|
||||
"theme": "opencode",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"autoupdate": true,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المواقع
|
||||
|
||||
يمكنك وضع ملف الإعدادات في عدة مواقع مختلفة، ولكل موقع
|
||||
ترتيب أولوية مختلف.
|
||||
|
||||
:::note
|
||||
تُدمَج ملفات الإعدادات **معًا** ولا تُستبدَل.
|
||||
:::
|
||||
|
||||
تُدمَج ملفات الإعدادات معًا ولا تُستبدَل. يتم جمع الإعدادات من مواقع الإعدادات التالية. تتجاوز الإعدادات اللاحقة الإعدادات السابقة فقط عند تعارض المفاتيح. أما الإعدادات غير المتعارضة فتبقى محفوظة من جميع الملفات.
|
||||
|
||||
على سبيل المثال، إذا كان الإعداد العام يضبط `theme: "opencode"` و`autoupdate: true`، وكان إعداد المشروع يضبط `model: "anthropic/claude-sonnet-4-5"`، فستتضمن الإعدادات النهائية الخيارات الثلاثة جميعها.
|
||||
|
||||
---
|
||||
|
||||
### ترتيب الأولوية
|
||||
|
||||
تُحمَّل مصادر الإعدادات بهذا الترتيب (المصادر اللاحقة تتجاوز السابقة):
|
||||
|
||||
1. **الإعدادات البعيدة** (من `.well-known/opencode`) - الإعدادات الافتراضية على مستوى المؤسسة
|
||||
2. **الإعدادات العامة** (`~/.config/opencode/opencode.json`) - تفضيلات المستخدم
|
||||
3. **إعدادات مخصصة** (`OPENCODE_CONFIG` env var) - تجاوزات مخصصة
|
||||
4. **إعدادات المشروع** (`opencode.json` داخل المشروع) - إعدادات خاصة بالمشروع
|
||||
5. **أدلة `.opencode`** - الوكلاء، الأوامر، الإضافات
|
||||
6. **إعدادات ضمنية** (`OPENCODE_CONFIG_CONTENT` env var) - تجاوزات وقت التشغيل
|
||||
|
||||
هذا يعني أن إعدادات المشروع يمكنها تجاوز الإعدادات العامة، وأن الإعدادات العامة يمكنها تجاوز الإعدادات الافتراضية البعيدة على مستوى المؤسسة.
|
||||
|
||||
:::note
|
||||
يستخدم الدليلان `.opencode` و`~/.config/opencode` **أسماء جمع** للأدلة الفرعية: `agents/` و`commands/` و`modes/` و`plugins/` و`skills/` و`tools/` و`themes/`. كما تُدعَم أسماء المفرد (مثل `agent/`) للتوافق مع الإصدارات السابقة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### عن بُعد
|
||||
|
||||
يمكن للمؤسسات توفير إعدادات افتراضية عبر نقطة النهاية `.well-known/opencode`. يتم جلب ذلك تلقائيًا عندما تقوم بالمصادقة مع مزوّد يدعم هذه الميزة.
|
||||
|
||||
تُحمَّل الإعدادات البعيدة أولًا لتكون طبقة الأساس. ويمكن لجميع مصادر الإعدادات الأخرى (العامة، وإعدادات المشروع) تجاوز هذه القيم الافتراضية.
|
||||
|
||||
على سبيل المثال، إذا كانت مؤسستك توفر خوادم MCP معطّلة افتراضيًا:
|
||||
|
||||
```json title="Remote config from .well-known/opencode"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك تفعيل خوادم محددة في إعداداتك المحلية:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### عام
|
||||
|
||||
ضع إعدادات OpenCode العامة في `~/.config/opencode/opencode.json`. استخدم الإعدادات العامة للتفضيلات على مستوى المستخدم مثل السمات، والمزوّدين، أو اختصارات المفاتيح.
|
||||
|
||||
تتجاوز الإعدادات العامة القيم الافتراضية البعيدة الخاصة بالمؤسسة.
|
||||
|
||||
---
|
||||
|
||||
### لكل مشروع
|
||||
|
||||
أضف `opencode.json` في جذر مشروعك. تمتلك إعدادات المشروع أعلى أولوية بين ملفات الإعدادات القياسية، إذ تتجاوز الإعدادات العامة والبعيدة معًا.
|
||||
|
||||
:::tip
|
||||
ضع إعدادات المشروع الخاصة في جذر مشروعك.
|
||||
:::
|
||||
|
||||
عند تشغيل OpenCode، يبحث عن ملف إعدادات في الدليل الحالي أو يصعد حتى أقرب دليل Git.
|
||||
|
||||
ومن الآمن أيضًا تضمينه في Git، كما يستخدم نفس المخطط الخاص بالإعدادات العامة.
|
||||
|
||||
---
|
||||
|
||||
### مسار مخصص
|
||||
|
||||
حدّد مسار ملف إعدادات مخصصًا باستخدام متغير البيئة `OPENCODE_CONFIG`.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG=/path/to/my/custom-config.json
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
تُحمَّل الإعدادات المخصصة بين الإعدادات العامة وإعدادات المشروع ضمن ترتيب الأولوية.
|
||||
|
||||
---
|
||||
|
||||
### دليل مخصص
|
||||
|
||||
حدّد دليل إعدادات مخصصًا باستخدام متغير البيئة `OPENCODE_CONFIG_DIR`.
|
||||
سيتم البحث داخل هذا الدليل عن الوكلاء والأوامر والأوضاع والإضافات تمامًا مثل
|
||||
الدليل القياسي `.opencode`، ويجب أن يتبع نفس البنية.
|
||||
|
||||
```bash
|
||||
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
|
||||
opencode run "Hello world"
|
||||
```
|
||||
|
||||
يُحمَّل الدليل المخصص بعد الإعدادات العامة وأدلة `.opencode`، لذلك **يمكنه تجاوز** إعداداتها.
|
||||
|
||||
---
|
||||
|
||||
## المخطط
|
||||
|
||||
يحتوي ملف الإعدادات على مخطط مُعرَّف في [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
|
||||
|
||||
يفترض أن يتمكن محررك من التحقق والإكمال التلقائي اعتمادًا على هذا المخطط.
|
||||
|
||||
---
|
||||
|
||||
### TUI
|
||||
|
||||
يمكنك ضبط الإعدادات الخاصة بـ TUI عبر الخيار `tui`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
},
|
||||
"diff_style": "auto"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
الخيارات المتاحة:
|
||||
|
||||
- `scroll_acceleration.enabled` - تفعيل تسارع التمرير بأسلوب macOS. **له أولوية على `scroll_speed`.**
|
||||
- `scroll_speed` - مُضاعِف سرعة تمرير مخصص (الافتراضي: `3`، الحد الأدنى: `1`). يتم تجاهله إذا كان `scroll_acceleration.enabled` مساويًا لـ `true`.
|
||||
- `diff_style` - التحكم في عرض `diff`. القيمة `"auto"` تتكيف مع عرض الطرفية، و`"stacked"` تعرض عمودًا واحدًا دائمًا.
|
||||
|
||||
[تعرف على المزيد حول استخدام TUI هنا](/docs/tui).
|
||||
|
||||
---
|
||||
|
||||
### الخادم
|
||||
|
||||
يمكنك ضبط إعدادات الخادم لأوامر `opencode serve` و`opencode web` عبر الخيار `server`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"mdnsDomain": "myproject.local",
|
||||
"cors": ["http://localhost:5173"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
الخيارات المتاحة:
|
||||
|
||||
- `port` - المنفذ الذي سيتم الاستماع عليه.
|
||||
- `hostname` - اسم المضيف الذي سيتم الاستماع عليه. عند تفعيل `mdns` وعدم ضبط اسم مضيف، تكون القيمة الافتراضية `0.0.0.0`.
|
||||
- `mdns` - تفعيل اكتشاف الخدمة عبر mDNS. يتيح ذلك للأجهزة الأخرى على الشبكة اكتشاف خادم OpenCode.
|
||||
- `mdnsDomain` - اسم نطاق مخصص لخدمة mDNS. القيمة الافتراضية هي `opencode.local`. مفيد لتشغيل عدة نُسخ على نفس الشبكة.
|
||||
- `cors` - أصول إضافية مسموح بها لـ CORS عند استخدام خادم HTTP من عميل يعتمد على المتصفح. يجب أن تكون القيم أصولًا كاملة (البروتوكول + المضيف + منفذ اختياري)، مثل `https://app.example.com`.
|
||||
|
||||
[تعرف على المزيد حول الخادم هنا](/docs/server).
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
يمكنك إدارة الأدوات التي يمكن لـ LLM استخدامها عبر الخيار `tools`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول الأدوات هنا](/docs/tools).
|
||||
|
||||
---
|
||||
|
||||
### النماذج
|
||||
|
||||
يمكنك ضبط المزوّدين والنماذج التي تريد استخدامها في إعدادات OpenCode عبر الخيارات `provider` و`model` و`small_model`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {},
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5"
|
||||
}
|
||||
```
|
||||
|
||||
يضبط الخيار `small_model` نموذجًا منفصلًا للمهام الخفيفة مثل توليد العناوين. افتراضيًا يحاول OpenCode استخدام نموذج أقل تكلفة إذا كان متاحًا لدى مزوّدك، وإلا فسيعود إلى النموذج الرئيسي.
|
||||
|
||||
قد تتضمن خيارات المزوّد `timeout` و`setCacheKey`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"options": {
|
||||
"timeout": 600000,
|
||||
"setCacheKey": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `timeout` - مهلة الطلب بالميلي ثانية (الافتراضي: 300000). اضبطه إلى `false` لتعطيله.
|
||||
- `setCacheKey` - يضمن تعيين مفتاح التخزين المؤقت دائمًا للمزوّد المحدد.
|
||||
|
||||
يمكنك أيضًا ضبط [النماذج المحلية](/docs/models#local). [تعرف على المزيد](/docs/models).
|
||||
|
||||
---
|
||||
|
||||
#### خيارات خاصة بالمزوّد
|
||||
|
||||
يدعم بعض المزوّدين خيارات إعداد إضافية تتجاوز الإعدادات العامة مثل `timeout` و`apiKey`.
|
||||
|
||||
##### Amazon Bedrock
|
||||
|
||||
يدعم Amazon Bedrock إعدادات خاصة بـ AWS:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"amazon-bedrock": {
|
||||
"options": {
|
||||
"region": "us-east-1",
|
||||
"profile": "my-aws-profile",
|
||||
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `region` - منطقة AWS لـ Bedrock (الافتراضي: متغير البيئة `AWS_REGION` أو `us-east-1`)
|
||||
- `profile` - ملف تعريف AWS المُسمّى من `~/.aws/credentials` (الافتراضي: متغير البيئة `AWS_PROFILE`)
|
||||
- `endpoint` - عنوان URL لنقطة نهاية مخصصة لنقاط نهاية VPC. هذا اسم بديل للخيار العام `baseURL` باستخدام مصطلحات AWS. إذا تم تحديدهما معًا، تكون أولوية `endpoint` أعلى.
|
||||
|
||||
:::note
|
||||
لرموز Bearer (`AWS_BEARER_TOKEN_BEDROCK` أو `/connect`) أولوية أعلى من المصادقة القائمة على ملف التعريف. راجع [أولوية المصادقة](/docs/providers#authentication-precedence) للتفاصيل.
|
||||
:::
|
||||
|
||||
[تعرف على المزيد حول إعداد Amazon Bedrock](/docs/providers#amazon-bedrock).
|
||||
|
||||
---
|
||||
|
||||
### السمات
|
||||
|
||||
يمكنك ضبط السمة التي تريد استخدامها في إعدادات OpenCode عبر الخيار `theme`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": ""
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/themes).
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء
|
||||
|
||||
يمكنك ضبط وكلاء متخصصين لمهام محددة عبر الخيار `agent`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"code-reviewer": {
|
||||
"description": "Reviews code for best practices and potential issues",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
||||
"tools": {
|
||||
// Disable file modification tools for review-only agent
|
||||
"write": false,
|
||||
"edit": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعريف الوكلاء باستخدام ملفات markdown في `~/.config/opencode/agents/` أو `.opencode/agents/`. [تعرف على المزيد هنا](/docs/agents).
|
||||
|
||||
---
|
||||
|
||||
### الوكيل الافتراضي
|
||||
|
||||
يمكنك تعيين الوكيل الافتراضي باستخدام الخيار `default_agent`. يحدد ذلك أي وكيل سيتم استخدامه عندما لا يتم تحديد وكيل صراحةً.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"default_agent": "plan"
|
||||
}
|
||||
```
|
||||
|
||||
يجب أن يكون الوكيل الافتراضي وكيلًا أساسيًا (وليس وكيلًا فرعيًا). يمكن أن يكون وكيلًا مدمجًا مثل `"build"` أو `"plan"`، أو [وكيلًا مخصصًا](/docs/agents) قمت بتعريفه. إذا لم يكن الوكيل المحدد موجودًا أو كان وكيلًا فرعيًا، فسيعود OpenCode إلى `"build"` مع تحذير.
|
||||
|
||||
ينطبق هذا الإعداد على جميع الواجهات: TUI وCLI (`opencode run`) وتطبيق سطح المكتب وGitHub Action.
|
||||
|
||||
---
|
||||
|
||||
### المشاركة
|
||||
|
||||
يمكنك ضبط ميزة [share](/docs/share) عبر الخيار `share`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
يقبل هذا الإعداد القيم التالية:
|
||||
|
||||
- `"manual"` - السماح بالمشاركة اليدوية عبر الأوامر (الافتراضي)
|
||||
- `"auto"` - مشاركة المحادثات الجديدة تلقائيًا
|
||||
- `"disabled"` - تعطيل المشاركة بالكامل
|
||||
|
||||
افتراضيًا تكون المشاركة في الوضع اليدوي، حيث تحتاج إلى مشاركة المحادثات صراحةً باستخدام الأمر `/share`.
|
||||
|
||||
---
|
||||
|
||||
### الأوامر
|
||||
|
||||
يمكنك ضبط أوامر مخصصة للمهام المتكررة عبر الخيار `command`.
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"command": {
|
||||
"test": {
|
||||
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
|
||||
"description": "Run tests with coverage",
|
||||
"agent": "build",
|
||||
"model": "anthropic/claude-haiku-4-5",
|
||||
},
|
||||
"component": {
|
||||
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
|
||||
"description": "Create a new component",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعريف الأوامر باستخدام ملفات markdown في `~/.config/opencode/commands/` أو `.opencode/commands/`. [تعرف على المزيد هنا](/docs/commands).
|
||||
|
||||
---
|
||||
|
||||
### اختصارات المفاتيح
|
||||
|
||||
يمكنك تخصيص اختصارات المفاتيح عبر الخيار `keybinds`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
### التحديث التلقائي
|
||||
|
||||
سيقوم OpenCode بتنزيل أي تحديثات جديدة تلقائيًا عند بدء التشغيل. يمكنك تعطيل ذلك عبر الخيار `autoupdate`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"autoupdate": false
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم تكن تريد التحديثات لكنك تريد الإشعار عند توفر نسخة جديدة، فاضبط `autoupdate` على `"notify"`.
|
||||
لاحظ أن هذا يعمل فقط إذا لم يتم تثبيته عبر مدير حزم مثل Homebrew.
|
||||
|
||||
---
|
||||
|
||||
### المنسّقات
|
||||
|
||||
يمكنك ضبط منسّقات الشفرة عبر الخيار `formatter`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
},
|
||||
"custom-prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول المنسّقات هنا](/docs/formatters).
|
||||
|
||||
---
|
||||
|
||||
### الأذونات
|
||||
|
||||
افتراضيًا يسمح opencode **بجميع العمليات** دون الحاجة إلى موافقة صريحة. يمكنك تغيير ذلك عبر الخيار `permission`.
|
||||
|
||||
على سبيل المثال، لضمان أن أداتي `edit` و`bash` تتطلبان موافقة المستخدم:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "ask",
|
||||
"bash": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد حول الأذونات هنا](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
### ضغط السياق
|
||||
|
||||
يمكنك التحكم في سلوك ضغط السياق عبر الخيار `compaction`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"compaction": {
|
||||
"auto": true,
|
||||
"prune": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `auto` - ضغط الجلسة تلقائيًا عند امتلاء السياق (الافتراضي: `true`).
|
||||
- `prune` - إزالة مخرجات الأدوات القديمة لتوفير الرموز (tokens) (الافتراضي: `true`).
|
||||
|
||||
---
|
||||
|
||||
### المراقِب
|
||||
|
||||
يمكنك ضبط أنماط التجاهل لمراقِب الملفات عبر الخيار `watcher`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"watcher": {
|
||||
"ignore": ["node_modules/**", "dist/**", ".git/**"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتبع الأنماط صياغة `glob`. استخدم ذلك لاستبعاد الأدلة المزدحمة من مراقبة الملفات.
|
||||
|
||||
---
|
||||
|
||||
### خوادم MCP
|
||||
|
||||
يمكنك ضبط خوادم MCP التي تريد استخدامها عبر الخيار `mcp`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {}
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/mcp-servers).
|
||||
|
||||
---
|
||||
|
||||
### الإضافات
|
||||
|
||||
[الإضافات](/docs/plugins) توسّع OpenCode بأدوات وخُطافات وتكاملات مخصصة.
|
||||
|
||||
ضع ملفات الإضافات في `.opencode/plugins/` أو `~/.config/opencode/plugins/`. يمكنك أيضًا تحميل إضافات من npm عبر الخيار `plugin`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
[تعرف على المزيد هنا](/docs/plugins).
|
||||
|
||||
---
|
||||
|
||||
### التعليمات
|
||||
|
||||
يمكنك ضبط التعليمات الخاصة بالنموذج الذي تستخدمه عبر الخيار `instructions`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يقبل هذا مصفوفة من المسارات وأنماط `glob` لملفات التعليمات. [تعرف على المزيد
|
||||
حول القواعد هنا](/docs/rules).
|
||||
|
||||
---
|
||||
|
||||
### المزوّدون المعطّلون
|
||||
|
||||
يمكنك تعطيل المزوّدين الذين يتم تحميلهم تلقائيًا عبر الخيار `disabled_providers`. هذا مفيد عندما تريد منع تحميل مزوّدين معينين حتى لو كانت بيانات الاعتماد الخاصة بهم متاحة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"disabled_providers": ["openai", "gemini"]
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
الخيار `disabled_providers` له أولوية على `enabled_providers`.
|
||||
:::
|
||||
|
||||
يقبل الخيار `disabled_providers` مصفوفة من معرفات المزوّدين. عند تعطيل مزوّد:
|
||||
|
||||
- لن يتم تحميله حتى لو كانت متغيرات البيئة مضبوطة.
|
||||
- لن يتم تحميله حتى لو كانت مفاتيح API مضبوطة عبر الأمر `/connect`.
|
||||
- لن تظهر نماذج هذا المزوّد في قائمة اختيار النموذج.
|
||||
|
||||
---
|
||||
|
||||
### المزوّدون المفعّلون
|
||||
|
||||
يمكنك تحديد قائمة سماح للمزوّدين عبر الخيار `enabled_providers`. عند ضبطه، سيتم تفعيل المزوّدين المحددين فقط وسيتم تجاهل البقية.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"enabled_providers": ["anthropic", "openai"]
|
||||
}
|
||||
```
|
||||
|
||||
هذا مفيد عندما تريد تقييد OpenCode لاستخدام مزوّدين محددين بدلًا من تعطيلهم واحدًا تلو الآخر.
|
||||
|
||||
:::note
|
||||
الخيار `disabled_providers` له أولوية على `enabled_providers`.
|
||||
:::
|
||||
|
||||
إذا ظهر مزوّد ضمن كل من `enabled_providers` و`disabled_providers`، تكون أولوية `disabled_providers` أعلى للتوافق مع الإصدارات السابقة.
|
||||
|
||||
---
|
||||
|
||||
### تجريبي
|
||||
|
||||
يحتوي المفتاح `experimental` على خيارات قيد التطوير النشط.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"experimental": {}
|
||||
}
|
||||
```
|
||||
|
||||
:::caution
|
||||
الخيارات التجريبية غير مستقرة. قد تتغير أو تُزال دون إشعار.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## المتغيرات
|
||||
|
||||
يمكنك استخدام استبدال المتغيرات في ملفات الإعدادات للإشارة إلى متغيرات البيئة ومحتويات الملفات.
|
||||
|
||||
---
|
||||
|
||||
### متغيرات البيئة
|
||||
|
||||
استخدم `{env:VARIABLE_NAME}` لاستبدال متغيرات البيئة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "{env:OPENCODE_MODEL}",
|
||||
"provider": {
|
||||
"anthropic": {
|
||||
"models": {},
|
||||
"options": {
|
||||
"apiKey": "{env:ANTHROPIC_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يكن متغير البيئة مضبوطًا، فسيتم استبداله بسلسلة فارغة.
|
||||
|
||||
---
|
||||
|
||||
### الملفات
|
||||
|
||||
استخدم `{file:path/to/file}` لاستبدال محتويات ملف:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["./custom-instructions.md"],
|
||||
"provider": {
|
||||
"openai": {
|
||||
"options": {
|
||||
"apiKey": "{file:~/.secrets/openai-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكن أن تكون مسارات الملفات:
|
||||
|
||||
- نسبية إلى دليل ملف الإعدادات
|
||||
- أو مسارات مطلقة تبدأ بـ `/` أو `~`
|
||||
|
||||
يُفيد ذلك في:
|
||||
|
||||
- الاحتفاظ بالبيانات الحساسة مثل مفاتيح API في ملفات منفصلة.
|
||||
- تضمين ملفات تعليمات كبيرة دون تشويش ملف الإعدادات.
|
||||
- مشاركة مقتطفات إعدادات مشتركة عبر عدة ملفات إعدادات.
|
||||
162
packages/web/src/content/docs/ar/custom-tools.mdx
Normal file
162
packages/web/src/content/docs/ar/custom-tools.mdx
Normal file
@@ -0,0 +1,162 @@
|
||||
---
|
||||
title: الأدوات المخصصة
|
||||
description: أنشئ أدوات يمكن لـ LLM استدعاؤها في opencode.
|
||||
---
|
||||
|
||||
الأدوات المخصصة هي دوال تنشئها يمكن لـ LLM استدعاؤها أثناء المحادثات. تعمل جنبا إلى جنب مع [الأدوات المدمجة](/docs/tools) في opencode مثل `read` و`write` و`bash`.
|
||||
|
||||
---
|
||||
|
||||
## إنشاء أداة
|
||||
تُعرّف الأدوات كملفات **TypeScript** أو **JavaScript**. لكن تعريف الأداة يمكنه استدعاء سكربتات مكتوبة **بأي لغة** — إذ تُستخدم TypeScript أو JavaScript فقط لتعريف الأداة نفسه.
|
||||
|
||||
---
|
||||
|
||||
### الموقع
|
||||
يمكن تعريفها:
|
||||
|
||||
- محليا بوضعها في مجلد `.opencode/tools/` داخل مشروعك.
|
||||
- أو عالميا بوضعها في `~/.config/opencode/tools/`.
|
||||
|
||||
---
|
||||
|
||||
### البنية
|
||||
أسهل طريقة لإنشاء أدوات هي استخدام المساعد `tool()` الذي يوفر أمان الأنواع والتحقق.
|
||||
|
||||
```ts title=".opencode/tools/database.ts" {1}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
يصبح **اسم الملف** هو **اسم الأداة**. المثال أعلاه ينشئ أداة باسم `database`.
|
||||
|
||||
---
|
||||
|
||||
#### عدة أدوات في ملف واحد
|
||||
يمكنك أيضا تصدير عدة أدوات من ملف واحد. يصبح كل تصدير **أداة مستقلة** باسم **`<filename>_<exportname>`**:
|
||||
|
||||
```ts title=".opencode/tools/math.ts"
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const add = tool({
|
||||
description: "Add two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a + args.b
|
||||
},
|
||||
})
|
||||
|
||||
export const multiply = tool({
|
||||
description: "Multiply two numbers",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args) {
|
||||
return args.a * args.b
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
ينشئ هذا أداتين: `math_add` و`math_multiply`.
|
||||
|
||||
---
|
||||
|
||||
### الوسائط
|
||||
يمكنك استخدام `tool.schema`، وهو في الأساس [Zod](https://zod.dev)، لتعريف أنواع الوسائط.
|
||||
|
||||
```ts "tool.schema"
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute")
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا استيراد [Zod](https://zod.dev) مباشرة وإرجاع كائن عادي:
|
||||
|
||||
```ts {6}
|
||||
import { z } from "zod"
|
||||
|
||||
export default {
|
||||
description: "Tool description",
|
||||
args: {
|
||||
param: z.string().describe("Parameter description"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
// Tool implementation
|
||||
return "result"
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### السياق
|
||||
تستقبل الأدوات سياقا حول الجلسة الحالية:
|
||||
|
||||
```ts title=".opencode/tools/project.ts" {8}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Get project information",
|
||||
args: {},
|
||||
async execute(args, context) {
|
||||
// Access context information
|
||||
const { agent, sessionID, messageID, directory, worktree } = context
|
||||
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
استخدم `context.directory` لدليل العمل الخاص بالجلسة.
|
||||
استخدم `context.worktree` لجذر شجرة العمل (worktree) في git.
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
### كتابة أداة بلغة Python
|
||||
يمكنك كتابة أدواتك بأي لغة تريدها. إليك مثالا يجمع رقمين باستخدام Python.
|
||||
|
||||
أولا، أنشئ الأداة كسكربت Python:
|
||||
|
||||
```python title=".opencode/tools/add.py"
|
||||
import sys
|
||||
|
||||
a = int(sys.argv[1])
|
||||
b = int(sys.argv[2])
|
||||
print(a + b)
|
||||
```
|
||||
|
||||
ثم أنشئ تعريف الأداة الذي يستدعيه:
|
||||
|
||||
```ts title=".opencode/tools/python-add.ts" {10}
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description: "Add two numbers using Python",
|
||||
args: {
|
||||
a: tool.schema.number().describe("First number"),
|
||||
b: tool.schema.number().describe("Second number"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const script = path.join(context.worktree, ".opencode/tools/add.py")
|
||||
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
|
||||
return result.trim()
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
هنا نستخدم أداة [`Bun.$`](https://bun.com/docs/runtime/shell) لتشغيل سكربت Python.
|
||||
73
packages/web/src/content/docs/ar/ecosystem.mdx
Normal file
73
packages/web/src/content/docs/ar/ecosystem.mdx
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: النظام البيئي
|
||||
description: مشاريع وتكاملات مبنية باستخدام OpenCode.
|
||||
---
|
||||
|
||||
مجموعة من مشاريع المجتمع المبنية على OpenCode.
|
||||
|
||||
:::note
|
||||
هل تريد إضافة مشروع مرتبط بـ OpenCode إلى هذه القائمة؟ قدّم PR.
|
||||
:::
|
||||
|
||||
يمكنك أيضا الاطلاع على [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) و [opencode.cafe](https://opencode.cafe)؛ وهو مجتمع يجمع روابط النظام البيئي والمجتمع.
|
||||
|
||||
---
|
||||
|
||||
## الإضافات
|
||||
| الاسم | الوصف |
|
||||
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | تشغيل جلسات OpenCode تلقائيا داخل بيئات Daytona معزولة مع مزامنة git ومعاينات حية |
|
||||
| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | حقن ترويسات جلسة Helicone تلقائيا لتجميع الطلبات |
|
||||
| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | حقن أنواع TypeScript/Svelte تلقائيا في قراءات الملفات باستخدام أدوات البحث |
|
||||
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | استخدام اشتراك ChatGPT Plus/Pro بدلا من أرصدة واجهة API |
|
||||
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | استخدام خطة Gemini الحالية بدلا من فوترة API |
|
||||
| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | استخدام نماذج Antigravity المجانية بدلا من فوترة API |
|
||||
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | عزل devcontainer متعدد الفروع مع استنساخات shallow ومنافذ تُعيَّن تلقائيا |
|
||||
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | ملحق Google Antigravity OAuth مع دعم Google Search ومعالجة API أكثر متانة |
|
||||
| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | تحسين استخدام الرموز (tokens) عبر تقليم مخرجات الأدوات القديمة |
|
||||
| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | إضافة دعم websearch أصلي للمزوّدين المدعومين بأسلوب مستند إلى Google |
|
||||
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | تمكين وكلاء الذكاء الاصطناعي من تشغيل عمليات بالخلفية داخل PTY وإرسال إدخال تفاعلي إليها. |
|
||||
| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | إرشادات لأوامر shell غير التفاعلية - تمنع التعليق الناتج عن عمليات تعتمد على TTY |
|
||||
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | تتبع استخدام OpenCode عبر Wakatime |
|
||||
| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | تنظيف جداول Markdown التي تنتجها نماذج LLM |
|
||||
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | تحرير الشيفرة أسرع بـ 10x باستخدام Morph Fast Apply API وعلامات تعديل كسولة |
|
||||
| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | وكلاء خلفية وأدوات LSP/AST/MCP جاهزة ووكلاء منتقون وتوافق مع Claude Code |
|
||||
| [opencode-notificator](https://github.com/panta82/opencode-notificator) | إشعارات سطح المكتب وتنبيهات صوتية لجلسات OpenCode |
|
||||
| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | إشعارات سطح المكتب وتنبيهات صوتية لأحداث الأذونات والإكمال والأخطاء |
|
||||
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | تسمية جلسات Zellij تلقائيا بالاعتماد على سياق OpenCode وبمساعدة الذكاء الاصطناعي |
|
||||
| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | تمكين وكلاء OpenCode من تحميل الموجهات عند الطلب عبر اكتشاف المهارات وحقنها |
|
||||
| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | ذاكرة مستمرة عبر الجلسات باستخدام Supermemory |
|
||||
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | مراجعة تفاعلية للخطة مع تعليقات توضيحية مرئية ومشاركة خاصة/دون اتصال |
|
||||
| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | توسيع /commands في opencode إلى نظام تنسيق قوي مع تحكم دقيق في التدفق |
|
||||
| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | جدولة مهام متكررة باستخدام launchd (Mac) أو systemd (Linux) بصياغة cron |
|
||||
| [micode](https://github.com/vtemian/micode) | سير عمل منظم: عصف ذهني → خطة → تنفيذ مع استمرارية الجلسة |
|
||||
| [octto](https://github.com/vtemian/octto) | واجهة متصفح تفاعلية للعصف الذهني بالذكاء الاصطناعي مع نماذج متعددة الأسئلة |
|
||||
| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | وكلاء خلفية على نمط Claude Code مع تفويض غير متزامن واستمرارية للسياق |
|
||||
| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | إشعارات نظام تشغيل أصلية لـ OpenCode - اعرف متى تكتمل المهام |
|
||||
| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | حزمة تنسيق متعددة الوكلاء - 16 مكوّنا، تثبيت واحد |
|
||||
| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | git worktrees بلا تعقيد لـ OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## المشاريع
|
||||
| الاسم | الوصف |
|
||||
| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
|
||||
| [kimaki](https://github.com/remorses/kimaki) | بوت Discord للتحكم بجلسات OpenCode، مبني على SDK |
|
||||
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | ملحق Neovim لموجهات تراعي المحرر، مبني على API |
|
||||
| [portal](https://github.com/hosenur/portal) | واجهة ويب تركز على الجوال لـ OpenCode عبر Tailscale/VPN |
|
||||
| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | قالب لبناء ملحقات OpenCode |
|
||||
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | واجهة Neovim لـ opencode - وكيل برمجة بالذكاء الاصطناعي يعمل في الطرفية |
|
||||
| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | موفر Vercel AI SDK لاستخدام OpenCode عبر @opencode-ai/sdk |
|
||||
| [OpenChamber](https://github.com/btriapitsyn/openchamber) | تطبيق ويب/سطح مكتب وامتداد VS Code لـ OpenCode |
|
||||
| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | ملحق Obsidian يدمج OpenCode داخل واجهة Obsidian |
|
||||
| [OpenWork](https://github.com/different-ai/openwork) | بديل مفتوح المصدر لـ Claude Cowork، مدعوم بـ OpenCode |
|
||||
| [ocx](https://github.com/kdcokenny/ocx) | مدير امتدادات OpenCode مع ملفات تعريف محمولة ومعزولة. |
|
||||
| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | تطبيق عميل لسطح المكتب والويب والجوال وعن بُعد لـ OpenCode |
|
||||
|
||||
---
|
||||
|
||||
## الوكلاء
|
||||
| الاسم | الوصف |
|
||||
| ----------------------------------------------------------------- | --------------------------------------------- |
|
||||
| [Agentic](https://github.com/Cluster444/agentic) | وكلاء وأوامر ذكاء اصطناعي معيارية لتطوير منظم |
|
||||
| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | إعدادات وموجهات ووكلاء وملحقات لسير عمل محسّن |
|
||||
165
packages/web/src/content/docs/ar/enterprise.mdx
Normal file
165
packages/web/src/content/docs/ar/enterprise.mdx
Normal file
@@ -0,0 +1,165 @@
|
||||
---
|
||||
title: المؤسسات
|
||||
description: استخدام OpenCode بأمان داخل مؤسستك.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك.
|
||||
|
||||
:::note
|
||||
لا يقوم OpenCode بتخزين أي من شيفرتك أو بيانات السياق.
|
||||
:::
|
||||
|
||||
لبدء استخدام OpenCode Enterprise:
|
||||
|
||||
1. أجرِ تجربة داخلية مع فريقك.
|
||||
2. **<a href={email}>اتصل بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
---
|
||||
|
||||
## تجربة
|
||||
|
||||
OpenCode مفتوح المصدر ولا يخزن أي من شيفرتك أو بيانات السياق، لذا يمكن للمطورين لديك ببساطة [البدء](/docs/) وإجراء تجربة.
|
||||
|
||||
---
|
||||
|
||||
### التعامل مع البيانات
|
||||
|
||||
**لا يقوم OpenCode بتخزين شيفرتك أو بيانات السياق.** تتم جميع المعالجة محليا أو عبر استدعاءات API مباشرة إلى مزود AI لديك.
|
||||
|
||||
وهذا يعني أنه طالما أنك تستخدم مزودا تثق به، أو بوابة AI داخلية، يمكنك استخدام OpenCode بأمان.
|
||||
|
||||
الاستثناء الوحيد هنا هو ميزة `/share` الاختيارية.
|
||||
|
||||
---
|
||||
|
||||
#### مشاركة المحادثات
|
||||
|
||||
إذا فعّل المستخدم ميزة `/share`، فسيتم إرسال المحادثة والبيانات المرتبطة بها إلى الخدمة التي نستخدمها لاستضافة صفحات المشاركة هذه على opencode.ai.
|
||||
|
||||
يتم تقديم البيانات حاليا عبر شبكة الحافة الخاصة بـ CDN لدينا، وتُخزّن مؤقتا على الحافة بالقرب من مستخدميك.
|
||||
|
||||
نوصي بتعطيل ذلك أثناء التجربة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
[تعرّف على المزيد حول المشاركة](/docs/share).
|
||||
|
||||
---
|
||||
|
||||
### ملكية الشيفرة
|
||||
|
||||
**أنت تملك كل الشيفرة التي ينتجها OpenCode.** لا توجد قيود ترخيص أو مطالبات بالملكية.
|
||||
|
||||
---
|
||||
|
||||
## التسعير
|
||||
|
||||
نستخدم نموذج تسعير لكل مقعد في OpenCode Enterprise. إذا كانت لديك بوابة LLM خاصة بك، فلن نفرض رسوما على الرموز (tokens) المستخدمة. لمزيد من التفاصيل حول التسعير وخيارات التنفيذ، **<a href={email}>اتصل بنا</a>**.
|
||||
|
||||
---
|
||||
|
||||
## النشر
|
||||
|
||||
بعد إكمال التجربة وعندما تكون جاهزا لاستخدام OpenCode داخل مؤسستك، يمكنك **<a href={email}>الاتصال بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات المركزية
|
||||
|
||||
يمكننا إعداد OpenCode لاستخدام إعدادات مركزية واحدة لكامل مؤسستك.
|
||||
|
||||
يمكن لهذه الإعدادات المركزية أن تتكامل مع مزود SSO لديك، وتضمن أن جميع المستخدمين يصلون فقط إلى بوابة AI الداخلية لديك.
|
||||
|
||||
---
|
||||
|
||||
### تكامل SSO
|
||||
|
||||
عبر الإعدادات المركزية، يمكن لـ OpenCode التكامل مع مزود SSO في مؤسستك لأغراض المصادقة.
|
||||
|
||||
يتيح ذلك لـ OpenCode الحصول على بيانات الاعتماد لبوابة AI الداخلية لديك عبر نظام إدارة الهوية الحالي لديك.
|
||||
|
||||
---
|
||||
|
||||
### بوابة AI الداخلية
|
||||
|
||||
مع الإعدادات المركزية، يمكن أيضا تهيئة OpenCode لاستخدام بوابة AI الداخلية لديك فقط.
|
||||
|
||||
يمكنك أيضا تعطيل جميع مزودي AI الآخرين، لضمان مرور جميع الطلبات عبر البنية التحتية المعتمدة في مؤسستك.
|
||||
|
||||
---
|
||||
|
||||
### الاستضافة الذاتية
|
||||
|
||||
بينما نوصي بتعطيل صفحات المشاركة لضمان ألا تغادر بياناتك مؤسستك مطلقا، يمكننا أيضا مساعدتك على استضافتها ذاتيا على بنيتك التحتية.
|
||||
|
||||
هذا موجود حاليا على خارطة طريقنا. إذا كنت مهتما، **<a href={email}>أخبرنا</a>**.
|
||||
|
||||
---
|
||||
|
||||
## الأسئلة الشائعة
|
||||
|
||||
<details>
|
||||
<summary>ما هو OpenCode Enterprise؟</summary>
|
||||
|
||||
OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>كيف أبدأ باستخدام OpenCode Enterprise؟</summary>
|
||||
|
||||
ابدأ ببساطة بتجربة داخلية مع فريقك. لا يقوم OpenCode افتراضيا بتخزين شيفرتك أو بيانات السياق، مما يجعل البدء سهلا.
|
||||
|
||||
ثم **<a href={email}>اتصل بنا</a>** لمناقشة التسعير وخيارات التنفيذ.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>كيف يعمل تسعير المؤسسات؟</summary>
|
||||
|
||||
نقدم تسعيرا للمؤسسات لكل مقعد. إذا كانت لديك بوابة LLM خاصة بك، فلن نفرض رسوما على الرموز (tokens) المستخدمة. لمزيد من التفاصيل، **<a href={email}>اتصل بنا</a>** للحصول على عرض سعر مخصص بناء على احتياجات مؤسستك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>هل بياناتي آمنة مع OpenCode Enterprise؟</summary>
|
||||
|
||||
نعم. لا يقوم OpenCode بتخزين شيفرتك أو بيانات السياق. تتم جميع المعالجة محليا أو عبر استدعاءات API مباشرة إلى مزود AI لديك. ومع الإعدادات المركزية وتكامل SSO، تظل بياناتك آمنة داخل البنية التحتية لمؤسستك.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>هل يمكننا استخدام سجل NPM خاص بنا؟</summary>
|
||||
|
||||
يدعم OpenCode سجلات npm الخاصة عبر دعم Bun الأصلي لملف `.npmrc`. إذا كانت مؤسستك تستخدم سجلا خاصا مثل JFrog Artifactory أو Nexus أو ما شابه ذلك، فتأكد من مصادقة المطورين قبل تشغيل OpenCode.
|
||||
|
||||
لإعداد المصادقة مع السجل الخاص بك:
|
||||
|
||||
```bash
|
||||
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى إنشاء `~/.npmrc` مع تفاصيل المصادقة. سيلتقط OpenCode هذا تلقائيا.
|
||||
|
||||
:::caution
|
||||
يجب أن تكون مسجلا الدخول إلى السجل الخاص قبل تشغيل OpenCode.
|
||||
:::
|
||||
|
||||
بدلا من ذلك، يمكنك تهيئة ملف `.npmrc` يدويا:
|
||||
|
||||
```bash title="~/.npmrc"
|
||||
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
|
||||
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
|
||||
```
|
||||
|
||||
يجب أن يكون المطورون مسجلين الدخول إلى السجل الخاص قبل تشغيل OpenCode لضمان إمكانية تثبيت الحزم من سجل مؤسستك.
|
||||
|
||||
</details>
|
||||
130
packages/web/src/content/docs/ar/formatters.mdx
Normal file
130
packages/web/src/content/docs/ar/formatters.mdx
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: المُنسِّقات
|
||||
description: يستخدم OpenCode مُنسِّقات خاصة بكل لغة.
|
||||
---
|
||||
|
||||
يُنسِّق OpenCode الملفات تلقائيا بعد كتابتها أو تعديلها باستخدام مُنسِّقات خاصة بكل لغة. يضمن ذلك أن الشيفرة التي يتم توليدها تتبع أساليب التنسيق المعتمدة في مشروعك.
|
||||
|
||||
---
|
||||
|
||||
## مُضمَّنة
|
||||
|
||||
يأتي OpenCode مع عدة مُنسِّقات مُضمَّنة للغات وأطر العمل الشائعة. فيما يلي قائمة بالمُنسِّقات وامتدادات الملفات المدعومة والأوامر أو خيارات الإعداد التي تحتاجها.
|
||||
|
||||
| المُنسِّق | الامتدادات | المتطلبات |
|
||||
| -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| gofmt | .go | يتوفر أمر `gofmt` |
|
||||
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | يتوفر أمر `mix` |
|
||||
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، و[غير ذلك](https://prettier.io/docs/en/index.html) | وجود اعتماد `prettier` في `package.json` |
|
||||
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، و[غير ذلك](https://biomejs.dev/) | ملف إعداد `biome.json(c)` |
|
||||
| zig | .zig, .zon | يتوفر أمر `zig` |
|
||||
| clang-format | .c, .cpp, .h, .hpp, .ino، و[غير ذلك](https://clang.llvm.org/docs/ClangFormat.html) | ملف إعداد `.clang-format` |
|
||||
| ktlint | .kt, .kts | يتوفر أمر `ktlint` |
|
||||
| ruff | .py, .pyi | يتوفر أمر `ruff` مع إعداد |
|
||||
| rustfmt | .rs | يتوفر أمر `rustfmt` |
|
||||
| cargofmt | .rs | يتوفر أمر `cargo fmt` |
|
||||
| uv | .py, .pyi | يتوفر أمر `uv` |
|
||||
| rubocop | .rb, .rake, .gemspec, .ru | يتوفر أمر `rubocop` |
|
||||
| standardrb | .rb, .rake, .gemspec, .ru | يتوفر أمر `standardrb` |
|
||||
| htmlbeautifier | .erb, .html.erb | يتوفر أمر `htmlbeautifier` |
|
||||
| air | .R | يتوفر أمر `air` |
|
||||
| dart | .dart | يتوفر أمر `dart` |
|
||||
| ocamlformat | .ml, .mli | يتوفر أمر `ocamlformat` وملف إعداد `.ocamlformat` |
|
||||
| terraform | .tf, .tfvars | يتوفر أمر `terraform` |
|
||||
| gleam | .gleam | يتوفر أمر `gleam` |
|
||||
| nixfmt | .nix | يتوفر أمر `nixfmt` |
|
||||
| shfmt | .sh, .bash | يتوفر أمر `shfmt` |
|
||||
| pint | .php | وجود اعتماد `laravel/pint` في `composer.json` |
|
||||
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | وجود اعتماد `oxfmt` في `package.json` و[علم متغير بيئة تجريبي](/docs/cli/#experimental) |
|
||||
| ormolu | .hs | يتوفر أمر `ormolu` |
|
||||
|
||||
لذا إذا كان مشروعك يتضمن `prettier` ضمن `package.json`، فسيستخدمه OpenCode تلقائيا.
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
عندما يكتب OpenCode ملفا أو يحرره، فإنه:
|
||||
|
||||
1. يتحقق من امتداد الملف مقابل جميع المُنسِّقات المفعّلة.
|
||||
2. يشغّل أمر المُنسِّق المناسب على الملف.
|
||||
3. يطبق تغييرات التنسيق تلقائيا.
|
||||
|
||||
تتم هذه العملية في الخلفية لضمان الحفاظ على أساليب تنسيق الشيفرة دون أي خطوات يدوية.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص المُنسِّقات عبر قسم `formatter` في إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {}
|
||||
}
|
||||
```
|
||||
|
||||
يدعم إعداد كل مُنسِّق ما يلي:
|
||||
|
||||
| الخاصية | النوع | الوصف |
|
||||
| ------------- | -------- | ------------------------------------------------------ |
|
||||
| `disabled` | boolean | اضبطها على `true` لتعطيل المُنسِّق |
|
||||
| `command` | string[] | الأمر الذي سيتم تشغيله للتنسيق |
|
||||
| `environment` | object | متغيرات البيئة التي يتم ضبطها عند تشغيل المُنسِّق |
|
||||
| `extensions` | string[] | امتدادات الملفات التي يجب أن يتعامل معها هذا المُنسِّق |
|
||||
|
||||
لنلقِ نظرة على بعض الأمثلة.
|
||||
|
||||
---
|
||||
|
||||
### تعطيل المُنسِّقات
|
||||
|
||||
لتعطيل **جميع** المُنسِّقات على مستوى عام، اضبط `formatter` على `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": false
|
||||
}
|
||||
```
|
||||
|
||||
لتعطيل مُنسِّق **محدد**، اضبط `disabled` على `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### مُنسِّقات مخصّصة
|
||||
|
||||
يمكنك تجاوز المُنسِّقات المُضمَّنة أو إضافة مُنسِّقات جديدة عبر تحديد الأمر ومتغيرات البيئة وامتدادات الملفات:
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"formatter": {
|
||||
"prettier": {
|
||||
"command": ["npx", "prettier", "--write", "$FILE"],
|
||||
"environment": {
|
||||
"NODE_ENV": "development"
|
||||
},
|
||||
"extensions": [".js", ".ts", ".jsx", ".tsx"]
|
||||
},
|
||||
"custom-markdown-formatter": {
|
||||
"command": ["deno", "fmt", "$FILE"],
|
||||
"extensions": [".md"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
سيتم استبدال **العنصر النائب `$FILE`** في الأمر بمسار الملف الذي يجري تنسيقه.
|
||||
321
packages/web/src/content/docs/ar/github.mdx
Normal file
321
packages/web/src/content/docs/ar/github.mdx
Normal file
@@ -0,0 +1,321 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: استخدم OpenCode في GitHub Issues وPull Requests.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitHub لديك. اذكر `/opencode` أو `/oc` في تعليقك، وسيقوم OpenCode بتنفيذ المهام داخل GitHub Actions runner لديك.
|
||||
|
||||
---
|
||||
|
||||
## الميزات
|
||||
|
||||
- **فرز Issues**: اطلب من OpenCode الاطلاع على Issue وشرحها لك.
|
||||
- **إصلاح وتنفيذ**: اطلب من OpenCode إصلاح Issue أو تنفيذ ميزة. وسيعمل على فرع جديد ويقدّم PR يضم كل التغييرات.
|
||||
- **آمن**: يعمل OpenCode داخل GitHub runners لديك.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
شغّل الأمر التالي داخل مشروع موجود في مستودع GitHub:
|
||||
|
||||
```bash
|
||||
opencode github install
|
||||
```
|
||||
|
||||
سيأخذك هذا خلال تثبيت GitHub app، وإنشاء workflow، وإعداد secrets.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد اليدوي
|
||||
|
||||
أو يمكنك إعداده يدويًا.
|
||||
|
||||
1. **تثبيت GitHub app**
|
||||
|
||||
انتقل إلى [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). تأكد من تثبيته على المستودع الهدف.
|
||||
|
||||
2. **إضافة الـworkflow**
|
||||
|
||||
أضف ملف الـworkflow التالي إلى `.github/workflows/opencode.yml` في مستودعك. تأكد من ضبط `model` المناسب ومفاتيح API المطلوبة ضمن `env`.
|
||||
|
||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
||||
name: opencode
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
if: |
|
||||
contains(github.event.comment.body, '/oc') ||
|
||||
contains(github.event.comment.body, '/opencode')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
# share: true
|
||||
# github_token: xxxx
|
||||
```
|
||||
|
||||
3. **تخزين مفاتيح API ضمن secrets**
|
||||
|
||||
في **settings** الخاصة بالمؤسسة أو المشروع، وسّع **Secrets and variables** في الشريط الجانبي الأيسر ثم اختر **Actions**، وأضف مفاتيح API المطلوبة.
|
||||
|
||||
---
|
||||
|
||||
## الإعدادات
|
||||
|
||||
- `model`: النموذج الذي سيستخدمه OpenCode. يأخذ الصيغة `provider/model`. هذا **مطلوب**.
|
||||
- `agent`: الـagent الذي سيتم استخدامه. يجب أن يكون agent أساسيًا. يعود افتراضيًا إلى `default_agent` من الإعدادات أو `"build"` إذا لم يُعثر عليه.
|
||||
- `share`: هل تتم مشاركة جلسة OpenCode. القيمة الافتراضية **true** للمستودعات العامة.
|
||||
- `prompt`: موجه مخصص اختياري لتجاوز السلوك الافتراضي. استخدمه لتخصيص كيفية معالجة OpenCode للطلبات.
|
||||
- `token`: GitHub access token اختياري لتنفيذ عمليات مثل إنشاء التعليقات، وcommit للتغييرات، وفتح Pull Requests. افتراضيًا يستخدم OpenCode installation access token الخاص بـOpenCode GitHub App، لذا تظهر commits والتعليقات وPull Requests وكأنها صادرة من التطبيق.
|
||||
|
||||
بدلًا من ذلك، يمكنك استخدام [`GITHUB_TOKEN` المدمج](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) في GitHub Action runner دون تثبيت OpenCode GitHub App. فقط تأكد من منح الأذونات المطلوبة في الـworkflow:
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
```
|
||||
|
||||
يمكنك أيضًا استخدام [رموز الوصول الشخصية](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) إن فضّلت ذلك.
|
||||
|
||||
---
|
||||
|
||||
## الأحداث المدعومة
|
||||
|
||||
يمكن تشغيل OpenCode عبر أحداث GitHub التالية:
|
||||
|
||||
| نوع الحدث | يتم تشغيله عبر | التفاصيل |
|
||||
| ----------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
||||
| `issue_comment` | تعليق على Issue أو PR | اذكر `/opencode` أو `/oc` في تعليقك. يقرأ OpenCode السياق ويمكنه إنشاء فروع، وفتح PRs، أو الرد. |
|
||||
| `pull_request_review_comment` | تعليق على أسطر كود محددة في PR | اذكر `/opencode` أو `/oc` أثناء مراجعة الكود. يستلم OpenCode مسار الملف وأرقام الأسطر وسياق الـdiff. |
|
||||
| `issues` | فتح Issue أو تعديلها | تشغيل OpenCode تلقائيًا عند إنشاء Issues أو تعديلها. يتطلب إدخال `prompt`. |
|
||||
| `pull_request` | فتح PR أو تحديثه | تشغيل OpenCode تلقائيًا عند فتح PRs أو مزامنتها أو إعادة فتحها. مفيد للمراجعات الآلية. |
|
||||
| `schedule` | جدول يعتمد على Cron | تشغيل OpenCode وفق جدول. يتطلب إدخال `prompt`. يذهب الناتج إلى logs وPRs (لا يوجد Issue للتعليق عليها). |
|
||||
| `workflow_dispatch` | تشغيل يدوي من واجهة GitHub | تشغيل OpenCode عند الطلب عبر Actions tab. يتطلب إدخال `prompt`. يذهب الناتج إلى logs وPRs. |
|
||||
|
||||
### مثال للجدولة
|
||||
|
||||
شغّل OpenCode وفق جدول لتنفيذ مهام آلية:
|
||||
|
||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
||||
name: Scheduled OpenCode Task
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 9 * * 1" # Every Monday at 9am UTC
|
||||
|
||||
jobs:
|
||||
opencode:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run OpenCode
|
||||
uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review the codebase for any TODO comments and create a summary.
|
||||
If you find issues worth addressing, open an issue to track them.
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `schedule`، يكون إدخال `prompt` **مطلوبًا** لعدم وجود تعليق لاستخراج التعليمات منه. تعمل عمليات الـworkflow المجدولة دون سياق مستخدم للتحقق من الأذونات، لذا يجب أن يمنح الـworkflow صلاحيات `contents: write` و`pull-requests: write` إذا كنت تتوقع أن ينشئ OpenCode فروعًا أو PRs.
|
||||
|
||||
---
|
||||
|
||||
### مثال Pull Request
|
||||
|
||||
راجع PRs تلقائيًا عند فتحها أو تحديثها:
|
||||
|
||||
```yaml title=".github/workflows/opencode-review.yml"
|
||||
name: opencode-review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
use_github_token: true
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `pull_request`، إذا لم يتم توفير `prompt`، فإن OpenCode يراجع Pull Request افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
### مثال فرز Issues
|
||||
|
||||
قم بفرز Issues الجديدة تلقائيًا. يقوم هذا المثال بتصفية الحسابات الأقدم من 30 يومًا لتقليل الرسائل المزعجة:
|
||||
|
||||
```yaml title=".github/workflows/opencode-triage.yml"
|
||||
name: Issue Triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
steps:
|
||||
- name: Check account age
|
||||
id: check
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const user = await github.rest.users.getByUsername({
|
||||
username: context.payload.issue.user.login
|
||||
});
|
||||
const created = new Date(user.data.created_at);
|
||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
||||
return days >= 30;
|
||||
result-encoding: string
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
if: steps.check.outputs.result == 'true'
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
if: steps.check.outputs.result == 'true'
|
||||
env:
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
prompt: |
|
||||
Review this issue. If there's a clear fix or relevant docs:
|
||||
- Provide documentation links
|
||||
- Add error handling guidance for code examples
|
||||
Otherwise, do not comment.
|
||||
```
|
||||
|
||||
بالنسبة لأحداث `issues`، يكون إدخال `prompt` **مطلوبًا** لعدم وجود تعليق لاستخراج التعليمات منه.
|
||||
|
||||
---
|
||||
|
||||
## الموجهات المخصصة
|
||||
|
||||
قم بتجاوز الموجه الافتراضي لتخصيص سلوك OpenCode ضمن الـworkflow لديك.
|
||||
|
||||
```yaml title=".github/workflows/opencode.yml"
|
||||
- uses: anomalyco/opencode/github@latest
|
||||
with:
|
||||
model: anthropic/claude-sonnet-4-5
|
||||
prompt: |
|
||||
Review this pull request:
|
||||
- Check for code quality issues
|
||||
- Look for potential bugs
|
||||
- Suggest improvements
|
||||
```
|
||||
|
||||
يفيد ذلك في فرض معايير مراجعة محددة، أو معايير كتابة الكود، أو مجالات تركيز تناسب مشروعك.
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
إليك بعض الأمثلة على كيفية استخدام OpenCode في GitHub.
|
||||
|
||||
- **شرح Issue**
|
||||
|
||||
أضف هذا التعليق داخل GitHub Issue.
|
||||
|
||||
```
|
||||
/opencode explain this issue
|
||||
```
|
||||
|
||||
سيقرأ OpenCode كامل النقاش، بما في ذلك جميع التعليقات، ويرد بشرح واضح.
|
||||
|
||||
- **إصلاح Issue**
|
||||
|
||||
داخل GitHub Issue، اكتب:
|
||||
|
||||
```
|
||||
/opencode fix this
|
||||
```
|
||||
|
||||
وسيُنشئ OpenCode فرعًا جديدًا، وينفّذ التغييرات، ويفتح PR يتضمنها.
|
||||
|
||||
- **مراجعة PRs وإجراء تغييرات**
|
||||
|
||||
اترك التعليق التالي على GitHub PR.
|
||||
|
||||
```
|
||||
Delete the attachment from S3 when the note is removed /oc
|
||||
```
|
||||
|
||||
سينفّذ OpenCode التغيير المطلوب ويعمل له commit إلى نفس PR.
|
||||
|
||||
- **مراجعة أسطر كود محددة**
|
||||
|
||||
اترك تعليقًا مباشرة على أسطر الكود في تبويب "Files" داخل PR. يكتشف OpenCode تلقائيًا الملف وأرقام الأسطر وسياق الـdiff لتقديم ردود دقيقة.
|
||||
|
||||
```
|
||||
[Comment on specific lines in Files tab]
|
||||
/oc add error handling here
|
||||
```
|
||||
|
||||
عند التعليق على أسطر محددة، يستلم OpenCode:
|
||||
- الملف الدقيق الذي تتم مراجعته
|
||||
- أسطر الكود المحددة
|
||||
- سياق الـdiff المحيط
|
||||
- معلومات أرقام الأسطر
|
||||
|
||||
يسمح ذلك بطلبات أكثر تحديدًا دون الحاجة لذكر مسارات الملفات أو أرقام الأسطر يدويًا.
|
||||
195
packages/web/src/content/docs/ar/gitlab.mdx
Normal file
195
packages/web/src/content/docs/ar/gitlab.mdx
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: GitLab
|
||||
description: استخدم OpenCode في مشكلات GitLab وطلبات الدمج.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitLab لديك عبر خط أنابيب GitLab CI/CD أو عبر GitLab Duo.
|
||||
|
||||
في كلتا الحالتين، سيعمل OpenCode على مشغّلات GitLab لديك.
|
||||
|
||||
---
|
||||
|
||||
## GitLab CI
|
||||
|
||||
يعمل OpenCode ضمن خط أنابيب GitLab عادي. يمكنك دمجه في الخط كمكوّن [CI](https://docs.gitlab.com/ee/ci/components/).
|
||||
|
||||
هنا نستخدم مكوّن CI/CD أنشأه المجتمع لـ OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
|
||||
|
||||
---
|
||||
|
||||
### الميزات
|
||||
|
||||
- **استخدام إعدادات مخصّصة لكل مهمة**: يمكنك إعداد OpenCode باستخدام دليل إعدادات مخصّص، مثل `./config/#custom-directory`، لتفعيل الوظائف أو تعطيلها في كل تشغيل لـ OpenCode.
|
||||
- **إعداد بسيط**: يقوم مكوّن CI بإعداد OpenCode في الخلفية؛ كل ما عليك هو إنشاء إعدادات OpenCode والمطالبة (prompt) الأولية.
|
||||
- **مرن**: يدعم مكوّن CI عدة مُدخلات لتخصيص سلوكه.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد
|
||||
|
||||
1. احفظ JSON مصادقة OpenCode كمتغيرات بيئة CI من نوع File ضمن **Settings** > **CI/CD** > **Variables**. تأكد من تعيينها على "Masked and hidden".
|
||||
2. أضف ما يلي إلى ملف `.gitlab-ci.yml`.
|
||||
|
||||
```yaml title=".gitlab-ci.yml"
|
||||
include:
|
||||
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
|
||||
inputs:
|
||||
config_dir: ${CI_PROJECT_DIR}/opencode-config
|
||||
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
|
||||
command: optional-custom-command
|
||||
message: "Your prompt here"
|
||||
```
|
||||
|
||||
لمزيد من المُدخلات وحالات الاستخدام، [اطّلع على الوثائق](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) الخاصة بهذا المكوّن.
|
||||
|
||||
---
|
||||
|
||||
## GitLab Duo
|
||||
|
||||
يتكامل OpenCode مع سير عمل GitLab لديك.
|
||||
اذكر `@opencode` في تعليق، وسينفّذ OpenCode المهام ضمن خط أنابيب GitLab CI لديك.
|
||||
|
||||
---
|
||||
|
||||
### الميزات
|
||||
|
||||
- **فرز المشكلات**: اطلب من OpenCode النظر في مشكلة وشرحها لك.
|
||||
- **الإصلاح والتنفيذ**: اطلب من OpenCode إصلاح مشكلة أو تنفيذ ميزة.
|
||||
سيُنشئ فرعًا جديدًا ويرفع طلب دمج بالتغييرات.
|
||||
- **آمن**: يعمل OpenCode على مشغّلات GitLab لديك.
|
||||
|
||||
---
|
||||
|
||||
### الإعداد
|
||||
|
||||
يعمل OpenCode ضمن خط أنابيب GitLab CI/CD لديك، وإليك ما ستحتاجه لإعداده:
|
||||
|
||||
:::tip
|
||||
اطّلع على [**وثائق GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) للحصول على تعليمات محدّثة.
|
||||
:::
|
||||
|
||||
1. قم بتهيئة بيئة GitLab لديك
|
||||
2. أعد إعداد CI/CD
|
||||
3. احصل على مفتاح API من مزوّد نموذج ذكاء اصطناعي
|
||||
4. أنشئ حساب خدمة
|
||||
5. اضبط متغيرات CI/CD
|
||||
6. أنشئ ملف إعداد للتدفق، وإليك مثالًا:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>إعدادات التدفق</summary>
|
||||
|
||||
```yaml
|
||||
image: node:22-slim
|
||||
commands:
|
||||
- echo "Installing opencode"
|
||||
- npm install --global opencode-ai
|
||||
- echo "Installing glab"
|
||||
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
|
||||
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
|
||||
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
|
||||
- apt-get install --yes glab
|
||||
- echo "Configuring glab"
|
||||
- echo $GITLAB_HOST
|
||||
- echo "Creating OpenCode auth configuration"
|
||||
- mkdir --parents ~/.local/share/opencode
|
||||
- |
|
||||
cat > ~/.local/share/opencode/auth.json << EOF
|
||||
{
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "$ANTHROPIC_API_KEY"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
- echo "Configuring git"
|
||||
- git config --global user.email "opencode@gitlab.com"
|
||||
- git config --global user.name "OpenCode"
|
||||
- echo "Testing glab"
|
||||
- glab issue list
|
||||
- echo "Running OpenCode"
|
||||
- |
|
||||
opencode run "
|
||||
You are an AI assistant helping with GitLab operations.
|
||||
|
||||
Context: $AI_FLOW_CONTEXT
|
||||
Task: $AI_FLOW_INPUT
|
||||
Event: $AI_FLOW_EVENT
|
||||
|
||||
Please execute the requested task using the available GitLab tools.
|
||||
Be thorough in your analysis and provide clear explanations.
|
||||
|
||||
<important>
|
||||
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
|
||||
|
||||
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
|
||||
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
|
||||
</important>
|
||||
"
|
||||
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
|
||||
- echo "Checking for git changes and pushing if any exist"
|
||||
- |
|
||||
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
|
||||
echo "Git changes detected, adding and pushing..."
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
echo "No staged changes to commit"
|
||||
else
|
||||
echo "Committing changes to branch: $CI_WORKLOAD_REF"
|
||||
git commit --message "Codex changes"
|
||||
echo "Pushing changes up to $CI_WORKLOAD_REF"
|
||||
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
|
||||
echo "Changes successfully pushed"
|
||||
fi
|
||||
else
|
||||
echo "No git changes detected, skipping push"
|
||||
fi
|
||||
variables:
|
||||
- ANTHROPIC_API_KEY
|
||||
- GITLAB_TOKEN_OPENCODE
|
||||
- GITLAB_HOST
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
يمكنك الرجوع إلى [وثائق GitLab CLI agents](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) للحصول على تعليمات مفصلة.
|
||||
|
||||
---
|
||||
|
||||
### أمثلة
|
||||
|
||||
فيما يلي بعض الأمثلة على كيفية استخدام OpenCode في GitLab.
|
||||
|
||||
:::tip
|
||||
يمكنك ضبطه لاستخدام عبارة تشغيل مختلفة عن `@opencode`.
|
||||
:::
|
||||
|
||||
- **شرح مشكلة**
|
||||
|
||||
أضف هذا التعليق في مشكلة على GitLab.
|
||||
|
||||
```
|
||||
@opencode explain this issue
|
||||
```
|
||||
|
||||
سيقرأ OpenCode المشكلة ويرد بشرح واضح.
|
||||
|
||||
- **إصلاح مشكلة**
|
||||
|
||||
في مشكلة على GitLab، قل:
|
||||
|
||||
```
|
||||
@opencode fix this
|
||||
```
|
||||
|
||||
سيُنشئ OpenCode فرعًا جديدًا، وينفّذ التغييرات، ويفتح طلب دمج بالتغييرات.
|
||||
|
||||
- **مراجعة طلبات الدمج**
|
||||
|
||||
اترك التعليق التالي على طلب دمج في GitLab.
|
||||
|
||||
```
|
||||
@opencode review this merge request
|
||||
```
|
||||
|
||||
سيُراجع OpenCode طلب الدمج ويقدّم ملاحظات.
|
||||
48
packages/web/src/content/docs/ar/ide.mdx
Normal file
48
packages/web/src/content/docs/ar/ide.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: IDE
|
||||
description: امتداد OpenCode لـ VS Code و Cursor وغيرها من بيئات التطوير
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع VS Code و Cursor أو أي IDE يدعم الطرفية. ما عليك سوى تشغيل `opencode` في الطرفية للبدء.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
- **تشغيل سريع**: استخدم `Cmd+Esc` (Mac) أو `Ctrl+Esc` (Windows/Linux) لفتح OpenCode في عرض طرفية مقسّم، أو للتركيز على جلسة طرفية موجودة إذا كانت قيد التشغيل بالفعل.
|
||||
- **جلسة جديدة**: استخدم `Cmd+Shift+Esc` (Mac) أو `Ctrl+Shift+Esc` (Windows/Linux) لبدء جلسة طرفية جديدة لـ OpenCode حتى لو كانت هناك جلسة مفتوحة. يمكنك أيضا النقر على زر OpenCode في واجهة المستخدم.
|
||||
- **وعي بالسياق**: شارك تلقائيا تحديدك الحالي أو تبويبك مع OpenCode.
|
||||
- **اختصارات الإشارة إلى الملفات**: استخدم `Cmd+Option+K` (Mac) أو `Alt+Ctrl+K` (Linux/Windows) لإدراج مراجع الملفات. مثلا: `@File#L37-42`.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
لتثبيت OpenCode على VS Code والتفرعات الشائعة مثل Cursor و Windsurf و VSCodium:
|
||||
|
||||
1. افتح VS Code
|
||||
2. افتح الطرفية المدمجة
|
||||
3. شغّل `opencode` - سيتم تثبيت الامتداد تلقائيا
|
||||
|
||||
أما إذا كنت تريد استخدام IDE الخاص بك عند تشغيل `/editor` أو `/export` من واجهة TUI، فستحتاج إلى ضبط `export EDITOR="code --wait"`. [اعرف المزيد](/docs/tui/#editor-setup).
|
||||
|
||||
---
|
||||
|
||||
### التثبيت اليدوي
|
||||
|
||||
ابحث عن **OpenCode** في Extension Marketplace وانقر **Install**.
|
||||
|
||||
---
|
||||
|
||||
### استكشاف الأخطاء وإصلاحها
|
||||
|
||||
إذا فشل تثبيت الامتداد تلقائيا:
|
||||
|
||||
- تأكد من أنك تشغّل `opencode` داخل الطرفية المدمجة.
|
||||
- تأكد من تثبيت واجهة سطر الأوامر (CLI) الخاصة بـ IDE لديك:
|
||||
- لـ VS Code: أمر `code`
|
||||
- لـ Cursor: أمر `cursor`
|
||||
- لـ Windsurf: أمر `windsurf`
|
||||
- لـ VSCodium: أمر `codium`
|
||||
- إذا لم تكن مثبتة، شغّل `Cmd+Shift+P` (Mac) أو `Ctrl+Shift+P` (Windows/Linux) وابحث عن "Shell Command: Install 'code' command in PATH" (أو ما يعادله في IDE لديك)
|
||||
- تأكد من أن VS Code لديه الصلاحية لتثبيت الامتدادات
|
||||
343
packages/web/src/content/docs/ar/index.mdx
Normal file
343
packages/web/src/content/docs/ar/index.mdx
Normal file
@@ -0,0 +1,343 @@
|
||||
---
|
||||
title: مقدمة
|
||||
description: ابدأ باستخدام OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
|
||||
[**OpenCode**](/) هو وكيل ترميز بالذكاء الاصطناعي مفتوح المصدر. يتوفر كواجهة طرفية، وتطبيق لسطح المكتب، أو إضافة لبيئة تطوير متكاملة (IDE).
|
||||
|
||||

|
||||
|
||||
لنبدأ.
|
||||
|
||||
---
|
||||
|
||||
#### المتطلبات
|
||||
|
||||
لاستخدام OpenCode في الطرفية، ستحتاج إلى:
|
||||
|
||||
1. محاكي طرفية حديث مثل:
|
||||
- [WezTerm](https://wezterm.org) متعدد المنصات
|
||||
- [Alacritty](https://alacritty.org) متعدد المنصات
|
||||
- [Ghostty](https://ghostty.org) على Linux وmacOS
|
||||
- [Kitty](https://sw.kovidgoyal.net/kitty/) على Linux وmacOS
|
||||
|
||||
2. مفاتيح API لمزوّدي نماذج اللغة (LLM) الذين تريد استخدامهم.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
أسهل طريقة لتثبيت OpenCode هي عبر سكربت التثبيت.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
يمكنك أيضا تثبيته عبر الأوامر التالية:
|
||||
|
||||
- **باستخدام Node.js**
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem label="npm">
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Bun">
|
||||
```bash
|
||||
bun install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="pnpm">
|
||||
```bash
|
||||
pnpm install -g opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="Yarn">
|
||||
```bash
|
||||
yarn global add opencode-ai
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
- **باستخدام Homebrew على macOS وLinux**
|
||||
|
||||
```bash
|
||||
brew install anomalyco/tap/opencode
|
||||
```
|
||||
|
||||
> نوصي باستخدام tap الخاص بـ OpenCode للحصول على أحدث الإصدارات. صيغة `brew install opencode` الرسمية تُدار بواسطة فريق Homebrew ويتم تحديثها بوتيرة أقل.
|
||||
|
||||
- **باستخدام Paru على Arch Linux**
|
||||
|
||||
```bash
|
||||
paru -S opencode-bin
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
:::tip[موصى به: استخدم WSL]
|
||||
لأفضل تجربة على Windows، نوصي باستخدام [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). يوفر أداء أفضل وتوافقا كاملا مع ميزات OpenCode.
|
||||
:::
|
||||
|
||||
- **باستخدام Chocolatey**
|
||||
|
||||
```bash
|
||||
choco install opencode
|
||||
```
|
||||
|
||||
- **باستخدام Scoop**
|
||||
|
||||
```bash
|
||||
scoop install opencode
|
||||
```
|
||||
|
||||
- **باستخدام NPM**
|
||||
|
||||
```bash
|
||||
npm install -g opencode-ai
|
||||
```
|
||||
|
||||
- **باستخدام Mise**
|
||||
|
||||
```bash
|
||||
mise use -g github:anomalyco/opencode
|
||||
```
|
||||
|
||||
- **باستخدام Docker**
|
||||
|
||||
```bash
|
||||
docker run -it --rm ghcr.io/anomalyco/opencode
|
||||
```
|
||||
|
||||
دعم تثبيت OpenCode على Windows باستخدام Bun قيد العمل حاليا.
|
||||
|
||||
يمكنك أيضا تنزيل الملف التنفيذي من صفحة [Releases](https://github.com/anomalyco/opencode/releases).
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
مع OpenCode يمكنك استخدام أي مزود LLM عبر إعداد مفاتيح API الخاصة به.
|
||||
|
||||
إذا كنت جديدا على استخدام مزوّدي LLM، فنوصي باستخدام [OpenCode Zen](/docs/zen).
|
||||
إنها قائمة منتقاة من النماذج تم اختبارها والتحقق منها بواسطة فريق OpenCode.
|
||||
|
||||
1. شغّل الأمر `/connect` في واجهة TUI، واختر opencode، ثم انتقل إلى [opencode.ai/auth](https://opencode.ai/auth).
|
||||
|
||||
```txt
|
||||
/connect
|
||||
```
|
||||
|
||||
2. سجّل الدخول، وأضف تفاصيل الدفع، ثم انسخ مفتاح API.
|
||||
|
||||
3. الصق مفتاح API.
|
||||
|
||||
```txt
|
||||
┌ API key
|
||||
│
|
||||
│
|
||||
└ enter
|
||||
```
|
||||
|
||||
بدلا من ذلك يمكنك اختيار أحد المزوّدين الآخرين. [اعرف المزيد](/docs/providers#directory).
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
بعد أن قمت بإعداد مزوّد، يمكنك الانتقال إلى المشروع الذي تريد العمل عليه.
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
```
|
||||
|
||||
ثم شغّل OpenCode.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
بعد ذلك، هيّئ OpenCode للمشروع عبر تشغيل الأمر التالي.
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
سيجعل هذا OpenCode يحلل مشروعك ويُنشئ ملف `AGENTS.md` في جذر المشروع.
|
||||
|
||||
:::tip
|
||||
يستحسن أن تقوم بعمل commit لملف `AGENTS.md` الخاص بمشروعك إلى Git.
|
||||
:::
|
||||
|
||||
يساعد هذا OpenCode على فهم بنية المشروع وأنماط الترميز المستخدمة.
|
||||
|
||||
---
|
||||
|
||||
## الاستخدام
|
||||
|
||||
أصبحت الآن جاهزا لاستخدام OpenCode للعمل على مشروعك. لا تتردد في سؤاله أي شيء!
|
||||
|
||||
إذا كنت جديدا على استخدام وكيل ترميز بالذكاء الاصطناعي، فإليك بعض الأمثلة التي قد تساعد.
|
||||
|
||||
---
|
||||
|
||||
### اطرح أسئلة
|
||||
|
||||
يمكنك أن تطلب من OpenCode شرح قاعدة الشيفرة لك.
|
||||
|
||||
:::tip
|
||||
استخدم المفتاح `@` للبحث التقريبي عن الملفات داخل المشروع.
|
||||
:::
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
How is authentication handled in @packages/functions/src/api/index.ts
|
||||
```
|
||||
|
||||
يفيد هذا عندما تكون هناك أجزاء من قاعدة الشيفرة لم تعمل عليها.
|
||||
|
||||
---
|
||||
|
||||
### أضف ميزات
|
||||
|
||||
يمكنك أن تطلب من OpenCode إضافة ميزات جديدة إلى مشروعك، لكننا نوصي أولا بطلب إنشاء خطة.
|
||||
|
||||
1. **أنشئ خطة**
|
||||
|
||||
لدى OpenCode _وضع Plan_ يعطل قدرته على إجراء التغييرات، ويقترح بدلا من ذلك _كيف_ سينفّذ الميزة.
|
||||
|
||||
انتقل إليه باستخدام مفتاح **Tab**. سترى مؤشرا لذلك في الزاوية السفلية اليمنى.
|
||||
|
||||
```bash frame="none" title="Switch to Plan mode"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
الآن لنصف ما نريده أن يفعله.
|
||||
|
||||
```txt frame="none"
|
||||
When a user deletes a note, we'd like to flag it as deleted in the database.
|
||||
Then create a screen that shows all the recently deleted notes.
|
||||
From this screen, the user can undelete a note or permanently delete it.
|
||||
```
|
||||
|
||||
احرص على تزويد OpenCode بتفاصيل كافية ليفهم ما تريد. يساعد أن تتحدث إليه كما لو كنت تتحدث إلى مطور مبتدئ ضمن فريقك.
|
||||
|
||||
:::tip
|
||||
أعطِ OpenCode سياقا وأمثلة كافية لمساعدته على فهم ما تريد.
|
||||
:::
|
||||
|
||||
2. **حسّن الخطة**
|
||||
|
||||
بعد أن يقدم لك خطة، يمكنك إعطاؤه ملاحظات أو إضافة تفاصيل أكثر.
|
||||
|
||||
```txt frame="none"
|
||||
We'd like to design this new screen using a design I've used before.
|
||||
[Image #1] Take a look at this image and use it as a reference.
|
||||
```
|
||||
|
||||
:::tip
|
||||
اسحب الصور وأفلِتها داخل الطرفية لإضافتها إلى الطلب.
|
||||
:::
|
||||
|
||||
يستطيع OpenCode فحص أي صور تزوده بها وإضافتها إلى الطلب. يمكنك فعل ذلك عبر سحب الصورة وإفلاتها داخل الطرفية.
|
||||
|
||||
3. **ابنِ الميزة**
|
||||
|
||||
عندما تشعر بالارتياح للخطة، عد إلى _وضع Build_ بالضغط على مفتاح **Tab** مرة أخرى.
|
||||
|
||||
```bash frame="none"
|
||||
<TAB>
|
||||
```
|
||||
|
||||
ثم اطلب منه تنفيذ التغييرات.
|
||||
|
||||
```bash frame="none"
|
||||
Sounds good! Go ahead and make the changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### نفّذ تغييرات
|
||||
|
||||
للتغييرات الأبسط، يمكنك أن تطلب من OpenCode تنفيذها مباشرة دون الحاجة لمراجعة خطة أولا.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
|
||||
We need to add authentication to the /settings route. Take a look at how this is
|
||||
handled in the /notes route in @packages/functions/src/notes.ts and implement
|
||||
the same logic in @packages/functions/src/settings.ts
|
||||
```
|
||||
|
||||
تأكد من تقديم قدر مناسب من التفاصيل لكي يجري OpenCode التغييرات الصحيحة.
|
||||
|
||||
---
|
||||
|
||||
### تراجع عن التغييرات
|
||||
|
||||
لنفترض أنك طلبت من OpenCode إجراء بعض التغييرات.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
لكن تتضح لك لاحقا أنها ليست ما تريده. يمكنك **التراجع** عن التغييرات باستخدام الأمر `/undo`.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
سيقوم OpenCode الآن بعكس التغييرات التي أُجريت ويعرض رسالتك الأصلية مجددا.
|
||||
|
||||
```txt frame="none" "@packages/functions/src/api/index.ts"
|
||||
Can you refactor the function in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
من هنا يمكنك تعديل الطلب وطلب المحاولة مرة أخرى.
|
||||
|
||||
:::tip
|
||||
يمكنك تشغيل `/undo` عدة مرات للتراجع عن عدة تغييرات.
|
||||
:::
|
||||
|
||||
أو يمكنك **إعادة تنفيذ** التغييرات باستخدام الأمر `/redo`.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المشاركة
|
||||
|
||||
يمكن [مشاركة المحادثات](/docs/share) التي تجريها مع OpenCode مع فريقك.
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
سيقوم هذا بإنشاء رابط للمحادثة الحالية ونسخه إلى الحافظة.
|
||||
|
||||
:::note
|
||||
لا تتم مشاركة المحادثات افتراضيا.
|
||||
:::
|
||||
|
||||
إليك [مثالا لمحادثة](https://opencode.ai/s/4XP1fce5) مع OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## التخصيص
|
||||
|
||||
وهذا كل شيء! أصبحت الآن محترفا في استخدام OpenCode.
|
||||
|
||||
لتجعله مناسبا لك، نوصي بـ [اختيار سمة](/docs/themes)، و[تخصيص اختصارات لوحة المفاتيح](/docs/keybinds)، و[إعداد منسقات الشيفرة](/docs/formatters)، و[إنشاء أوامر مخصصة](/docs/commands)، أو التجربة مع [إعدادات OpenCode](/docs/config).
|
||||
192
packages/web/src/content/docs/ar/keybinds.mdx
Normal file
192
packages/web/src/content/docs/ar/keybinds.mdx
Normal file
@@ -0,0 +1,192 @@
|
||||
---
|
||||
title: اختصارات لوحة المفاتيح
|
||||
description: خصّص اختصارات لوحة المفاتيح.
|
||||
---
|
||||
|
||||
يوفّر OpenCode قائمة باختصارات لوحة المفاتيح يمكنك تخصيصها عبر إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"leader": "ctrl+x",
|
||||
"app_exit": "ctrl+c,ctrl+d,<leader>q",
|
||||
"editor_open": "<leader>e",
|
||||
"theme_list": "<leader>t",
|
||||
"sidebar_toggle": "<leader>b",
|
||||
"scrollbar_toggle": "none",
|
||||
"username_toggle": "none",
|
||||
"status_view": "<leader>s",
|
||||
"tool_details": "none",
|
||||
"session_export": "<leader>x",
|
||||
"session_new": "<leader>n",
|
||||
"session_list": "<leader>l",
|
||||
"session_timeline": "<leader>g",
|
||||
"session_fork": "none",
|
||||
"session_rename": "none",
|
||||
"session_share": "none",
|
||||
"session_unshare": "none",
|
||||
"session_interrupt": "escape",
|
||||
"session_compact": "<leader>c",
|
||||
"session_child_cycle": "<leader>right",
|
||||
"session_child_cycle_reverse": "<leader>left",
|
||||
"session_parent": "<leader>up",
|
||||
"messages_page_up": "pageup,ctrl+alt+b",
|
||||
"messages_page_down": "pagedown,ctrl+alt+f",
|
||||
"messages_line_up": "ctrl+alt+y",
|
||||
"messages_line_down": "ctrl+alt+e",
|
||||
"messages_half_page_up": "ctrl+alt+u",
|
||||
"messages_half_page_down": "ctrl+alt+d",
|
||||
"messages_first": "ctrl+g,home",
|
||||
"messages_last": "ctrl+alt+g,end",
|
||||
"messages_next": "none",
|
||||
"messages_previous": "none",
|
||||
"messages_copy": "<leader>y",
|
||||
"messages_undo": "<leader>u",
|
||||
"messages_redo": "<leader>r",
|
||||
"messages_last_user": "none",
|
||||
"messages_toggle_conceal": "<leader>h",
|
||||
"model_list": "<leader>m",
|
||||
"model_cycle_recent": "f2",
|
||||
"model_cycle_recent_reverse": "shift+f2",
|
||||
"model_cycle_favorite": "none",
|
||||
"model_cycle_favorite_reverse": "none",
|
||||
"variant_cycle": "ctrl+t",
|
||||
"command_list": "ctrl+p",
|
||||
"agent_list": "<leader>a",
|
||||
"agent_cycle": "tab",
|
||||
"agent_cycle_reverse": "shift+tab",
|
||||
"input_clear": "ctrl+c",
|
||||
"input_paste": "ctrl+v",
|
||||
"input_submit": "return",
|
||||
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
|
||||
"input_move_left": "left,ctrl+b",
|
||||
"input_move_right": "right,ctrl+f",
|
||||
"input_move_up": "up",
|
||||
"input_move_down": "down",
|
||||
"input_select_left": "shift+left",
|
||||
"input_select_right": "shift+right",
|
||||
"input_select_up": "shift+up",
|
||||
"input_select_down": "shift+down",
|
||||
"input_line_home": "ctrl+a",
|
||||
"input_line_end": "ctrl+e",
|
||||
"input_select_line_home": "ctrl+shift+a",
|
||||
"input_select_line_end": "ctrl+shift+e",
|
||||
"input_visual_line_home": "alt+a",
|
||||
"input_visual_line_end": "alt+e",
|
||||
"input_select_visual_line_home": "alt+shift+a",
|
||||
"input_select_visual_line_end": "alt+shift+e",
|
||||
"input_buffer_home": "home",
|
||||
"input_buffer_end": "end",
|
||||
"input_select_buffer_home": "shift+home",
|
||||
"input_select_buffer_end": "shift+end",
|
||||
"input_delete_line": "ctrl+shift+d",
|
||||
"input_delete_to_line_end": "ctrl+k",
|
||||
"input_delete_to_line_start": "ctrl+u",
|
||||
"input_backspace": "backspace,shift+backspace",
|
||||
"input_delete": "ctrl+d,delete,shift+delete",
|
||||
"input_undo": "ctrl+-,super+z",
|
||||
"input_redo": "ctrl+.,super+shift+z",
|
||||
"input_word_forward": "alt+f,alt+right,ctrl+right",
|
||||
"input_word_backward": "alt+b,alt+left,ctrl+left",
|
||||
"input_select_word_forward": "alt+shift+f,alt+shift+right",
|
||||
"input_select_word_backward": "alt+shift+b,alt+shift+left",
|
||||
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
|
||||
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
|
||||
"history_previous": "up",
|
||||
"history_next": "down",
|
||||
"terminal_suspend": "ctrl+z",
|
||||
"terminal_title_toggle": "none",
|
||||
"tips_toggle": "<leader>h",
|
||||
"display_thinking": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مفتاح القائد
|
||||
|
||||
يستخدم OpenCode مفتاح `leader` لمعظم اختصارات لوحة المفاتيح. يساعد ذلك على تجنّب التعارضات في الطرفية لديك.
|
||||
|
||||
افتراضيا، يكون `ctrl+x` هو مفتاح القائد، وتتطلّب معظم الإجراءات أن تضغط أولا مفتاح القائد ثم الاختصار. على سبيل المثال، لبدء جلسة جديدة اضغط `ctrl+x` أولا ثم اضغط `n`.
|
||||
|
||||
لا يلزم استخدام مفتاح قائد لاختصاراتك، لكننا نوصي بذلك.
|
||||
|
||||
---
|
||||
|
||||
## تعطيل اختصار
|
||||
|
||||
يمكنك تعطيل أي اختصار بإضافة معرّف الاختصار إلى ملف الإعدادات بقيمة "none".
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"keybinds": {
|
||||
"session_compact": "none"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## اختصارات موجّه سطح المكتب
|
||||
|
||||
يدعم حقل إدخال الموجّه في تطبيق OpenCode لسطح المكتب اختصارات شائعة لتحرير النص على نمط Readline/Emacs. هذه الاختصارات مدمجة حاليا ولا يمكن تخصيصها عبر `opencode.json`.
|
||||
|
||||
| الاختصار | الإجراء |
|
||||
| -------- | ------------------------------------------ |
|
||||
| `ctrl+a` | الانتقال إلى بداية السطر الحالي |
|
||||
| `ctrl+e` | الانتقال إلى نهاية السطر الحالي |
|
||||
| `ctrl+b` | تحريك المؤشر للخلف حرفا واحدا |
|
||||
| `ctrl+f` | تحريك المؤشر للأمام حرفا واحدا |
|
||||
| `alt+b` | تحريك المؤشر للخلف كلمة واحدة |
|
||||
| `alt+f` | تحريك المؤشر للأمام كلمة واحدة |
|
||||
| `ctrl+d` | حذف الحرف الموجود تحت المؤشر |
|
||||
| `ctrl+k` | حذف حتى نهاية السطر |
|
||||
| `ctrl+u` | حذف حتى بداية السطر |
|
||||
| `ctrl+w` | حذف الكلمة السابقة |
|
||||
| `alt+d` | حذف الكلمة التالية |
|
||||
| `ctrl+t` | تبديل موضعي حرفين |
|
||||
| `ctrl+g` | إلغاء النوافذ المنبثقة / إيقاف الرد الجاري |
|
||||
|
||||
---
|
||||
|
||||
## مفتاح Shift+Enter
|
||||
|
||||
بعض الطرفيات لا ترسل مفاتيح التعديل مع Enter افتراضيا. قد تحتاج إلى ضبط طرفيتك لإرسال `Shift+Enter` كسلسلة هروب.
|
||||
|
||||
### Windows Terminal
|
||||
|
||||
افتح ملف `settings.json` الموجود في:
|
||||
|
||||
```
|
||||
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
|
||||
```
|
||||
|
||||
أضف هذا إلى مصفوفة `actions` على مستوى الجذر:
|
||||
|
||||
```json
|
||||
"actions": [
|
||||
{
|
||||
"command": {
|
||||
"action": "sendInput",
|
||||
"input": "\u001b[13;2u"
|
||||
},
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
أضف هذا إلى مصفوفة `keybindings` على مستوى الجذر:
|
||||
|
||||
```json
|
||||
"keybindings": [
|
||||
{
|
||||
"keys": "shift+enter",
|
||||
"id": "User.sendInput.ShiftEnterCustom"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
احفظ الملف ثم أعد تشغيل Windows Terminal أو افتح علامة تبويب جديدة.
|
||||
188
packages/web/src/content/docs/ar/lsp.mdx
Normal file
188
packages/web/src/content/docs/ar/lsp.mdx
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
title: خوادم LSP
|
||||
description: يتكامل OpenCode مع خوادم LSP لديك.
|
||||
---
|
||||
|
||||
يتكامل OpenCode مع بروتوكول خادم اللغة (LSP) لمساعدة النموذج اللغوي الكبير على التفاعل مع قاعدة الشيفرة لديك. ويستخدم التشخيصات لتزويد النموذج بتغذية راجعة.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
يأتي OpenCode مع عدة خوادم LSP مدمجة للغات الشائعة:
|
||||
|
||||
| خادم LSP | الامتدادات | المتطلبات |
|
||||
| ------------------ | ------------------------------------------------------------------- | ---------------------------------------------------- |
|
||||
| astro | .astro | يثبت تلقائيا لمشاريع Astro |
|
||||
| bash | .sh, .bash, .zsh, .ksh | يثبت `bash-language-server` تلقائيا |
|
||||
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | يثبت تلقائيا لمشاريع C/C++ |
|
||||
| csharp | .cs | تثبيت `.NET SDK` |
|
||||
| clojure-lsp | .clj, .cljs, .cljc, .edn | توفر أمر `clojure-lsp` |
|
||||
| dart | .dart | توفر أمر `dart` |
|
||||
| deno | .ts, .tsx, .js, .jsx, .mjs | توفر أمر `deno` (يكتشف تلقائيا deno.json/deno.jsonc) |
|
||||
| elixir-ls | .ex, .exs | توفر أمر `elixir` |
|
||||
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | وجود تبعية `eslint` في المشروع |
|
||||
| fsharp | .fs, .fsi, .fsx, .fsscript | تثبيت `.NET SDK` |
|
||||
| gleam | .gleam | توفر أمر `gleam` |
|
||||
| gopls | .go | توفر أمر `go` |
|
||||
| hls | .hs, .lhs | توفر أمر `haskell-language-server-wrapper` |
|
||||
| jdtls | .java | تثبيت `Java SDK (version 21+)` |
|
||||
| kotlin-ls | .kt, .kts | يثبت تلقائيا لمشاريع Kotlin |
|
||||
| lua-ls | .lua | يثبت تلقائيا لمشاريع Lua |
|
||||
| nixd | .nix | توفر أمر `nixd` |
|
||||
| ocaml-lsp | .ml, .mli | توفر أمر `ocamllsp` |
|
||||
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | وجود تبعية `oxlint` في المشروع |
|
||||
| php intelephense | .php | يثبت تلقائيا لمشاريع PHP |
|
||||
| prisma | .prisma | توفر أمر `prisma` |
|
||||
| pyright | .py, .pyi | تثبيت تبعية `pyright` |
|
||||
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | توفر أمري `ruby` و `gem` |
|
||||
| rust | .rs | توفر أمر `rust-analyzer` |
|
||||
| sourcekit-lsp | .swift, .objc, .objcpp | تثبيت `swift` (على macOS عبر `xcode`) |
|
||||
| svelte | .svelte | يثبت تلقائيا لمشاريع Svelte |
|
||||
| terraform | .tf, .tfvars | يثبت تلقائيا من إصدارات GitHub |
|
||||
| tinymist | .typ, .typc | يثبت تلقائيا من إصدارات GitHub |
|
||||
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | وجود تبعية `typescript` في المشروع |
|
||||
| vue | .vue | يثبت تلقائيا لمشاريع Vue |
|
||||
| yaml-ls | .yaml, .yml | يثبت `yaml-language-server` من Red Hat تلقائيا |
|
||||
| zls | .zig, .zon | توفر أمر `zig` |
|
||||
|
||||
تُفعَّل خوادم LSP تلقائيا عند اكتشاف أحد امتدادات الملفات المذكورة أعلاه واستيفاء المتطلبات.
|
||||
|
||||
:::note
|
||||
يمكنك تعطيل تنزيلات خوادم LSP التلقائية عبر ضبط متغير البيئة `OPENCODE_DISABLE_LSP_DOWNLOAD` على `true`.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
عندما يفتح opencode ملفا، فإنه:
|
||||
|
||||
1. يفحص امتداد الملف مقابل جميع خوادم LSP المفعّلة.
|
||||
2. يشغّل خادم LSP المناسب إذا لم يكن قيد التشغيل بالفعل.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص خوادم LSP عبر قسم `lsp` في إعدادات opencode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {}
|
||||
}
|
||||
```
|
||||
|
||||
يدعم كل خادم LSP ما يلي:
|
||||
|
||||
| الخاصية | النوع | الوصف |
|
||||
| ---------------- | -------- | ------------------------------------------------- |
|
||||
| `disabled` | boolean | اضبطها على `true` لتعطيل خادم LSP |
|
||||
| `command` | string[] | الأمر المستخدم لتشغيل خادم LSP |
|
||||
| `extensions` | string[] | امتدادات الملفات التي يجب أن يعالجها خادم LSP هذا |
|
||||
| `env` | object | متغيرات البيئة التي تُضبط عند تشغيل الخادم |
|
||||
| `initialization` | object | خيارات التهيئة التي تُرسل إلى خادم LSP |
|
||||
|
||||
لنلق نظرة على بعض الأمثلة.
|
||||
|
||||
---
|
||||
|
||||
### متغيرات البيئة
|
||||
|
||||
استخدم الخاصية `env` لضبط متغيرات البيئة عند تشغيل خادم LSP:
|
||||
|
||||
```json title="opencode.json" {5-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"rust": {
|
||||
"env": {
|
||||
"RUST_LOG": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### خيارات التهيئة
|
||||
|
||||
استخدم الخاصية `initialization` لتمرير خيارات التهيئة إلى خادم LSP. هذه إعدادات خاصة بالخادم تُرسل أثناء طلب LSP `initialize`:
|
||||
|
||||
```json title="opencode.json" {5-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"initialization": {
|
||||
"preferences": {
|
||||
"importModuleSpecifierPreference": "relative"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
:::note
|
||||
تختلف خيارات التهيئة بحسب خادم LSP. راجع توثيق خادم LSP لديك لمعرفة الخيارات المتاحة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### تعطيل خوادم LSP
|
||||
|
||||
لتعطيل **جميع** خوادم LSP على مستوى التطبيق، اضبط `lsp` على `false`:
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": false
|
||||
}
|
||||
```
|
||||
|
||||
لتعطيل خادم LSP **بعينه**، اضبط `disabled` على `true`:
|
||||
|
||||
```json title="opencode.json" {5}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"typescript": {
|
||||
"disabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### خوادم LSP مخصصة
|
||||
|
||||
يمكنك إضافة خوادم LSP مخصصة عبر تحديد الأمر وامتدادات الملفات:
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"lsp": {
|
||||
"custom-lsp": {
|
||||
"command": ["custom-lsp-server", "--stdio"],
|
||||
"extensions": [".custom"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## معلومات إضافية
|
||||
|
||||
### PHP Intelephense
|
||||
|
||||
يوفر PHP Intelephense ميزات مدفوعة عبر مفتاح ترخيص. يمكنك تزويده بمفتاح الترخيص عبر وضع (فقط) المفتاح داخل ملف نصي في:
|
||||
|
||||
- على macOS/Linux: `$HOME/intelephense/licence.txt`
|
||||
- على Windows: `%USERPROFILE%/intelephense/licence.txt`
|
||||
|
||||
يجب أن يحتوي الملف على مفتاح الترخيص فقط دون أي محتوى إضافي.
|
||||
492
packages/web/src/content/docs/ar/mcp-servers.mdx
Normal file
492
packages/web/src/content/docs/ar/mcp-servers.mdx
Normal file
@@ -0,0 +1,492 @@
|
||||
---
|
||||
title: خوادم MCP
|
||||
description: أضف أدوات MCP محلية وبعيدة.
|
||||
---
|
||||
|
||||
يمكنك إضافة أدوات خارجية إلى OpenCode باستخدام _Model Context Protocol_، أو MCP. يدعم OpenCode خوادم محلية وبعيدة.
|
||||
|
||||
بعد إضافتها، تصبح أدوات MCP متاحة تلقائيا للـ LLM إلى جانب الأدوات المضمنة.
|
||||
|
||||
---
|
||||
|
||||
#### تنبيهات
|
||||
عند استخدام خادم MCP فإنه يضيف إلى السياق. وقد يتراكم ذلك بسرعة إذا كان لديك الكثير من الأدوات. لذلك نوصي بالتحلّي بالحذر عند اختيار خوادم MCP التي تستخدمها.
|
||||
|
||||
:::tip
|
||||
تضيف خوادم MCP إلى سياقك، لذا احرص على اختيار ما تفعّله منها بعناية.
|
||||
:::
|
||||
|
||||
تميل بعض خوادم MCP، مثل خادم GitHub MCP، إلى إضافة الكثير من الرموز (tokens) وقد تتجاوز حد السياق بسهولة.
|
||||
|
||||
---
|
||||
|
||||
## التمكين
|
||||
يمكنك تعريف خوادم MCP في [إعدادات OpenCode](https://opencode.ai/docs/config/) ضمن `mcp`. أضف كل خادم MCP باسم فريد. ويمكنك الإشارة إلى ذلك الخادم بالاسم عند توجيه الطلب إلى الـ LLM.
|
||||
|
||||
```jsonc title="opencode.jsonc" {6}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"name-of-mcp-server": {
|
||||
// ...
|
||||
"enabled": true,
|
||||
},
|
||||
"name-of-other-mcp-server": {
|
||||
// ...
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا تعطيل خادم عبر ضبط `enabled` على `false`. يفيد ذلك إذا أردت تعطيله مؤقتا دون إزالته من إعداداتك.
|
||||
|
||||
---
|
||||
|
||||
### تجاوز القيم الافتراضية البعيدة
|
||||
يمكن للمنظمات توفير خوادم MCP الافتراضية عبر نقطة النهاية `.well-known/opencode` الخاصة بها. قد تكون هذه الخوادم معطّلة افتراضيا، مما يتيح للمستخدمين تفعيل ما يحتاجونه فقط.
|
||||
|
||||
لتفعيل خادم معيّن من الإعدادات البعيدة الخاصة بمؤسستك، أضفه إلى إعداداتك المحلية مع `enabled: true`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"jira": {
|
||||
"type": "remote",
|
||||
"url": "https://jira.example.com/mcp",
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتغلب قيم إعداداتك المحلية على القيم الافتراضية البعيدة. راجع [أولوية الإعدادات](/docs/config#precedence-order) لمزيد من التفاصيل.
|
||||
|
||||
---
|
||||
|
||||
## محلي
|
||||
أضف خوادم MCP المحلية عبر ضبط `type` على `"local"` ضمن كائن `mcp`.
|
||||
|
||||
```jsonc title="opencode.jsonc" {15}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-local-mcp-server": {
|
||||
"type": "local",
|
||||
// Or ["bun", "x", "my-mcp-command"]
|
||||
"command": ["npx", "-y", "my-mcp-command"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"MY_ENV_VAR": "my_env_var_value",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
الأمر `command` هو الطريقة التي يتم بها تشغيل خادم MCP المحلي. ويمكنك أيضا تمرير قائمة بمتغيرات البيئة.
|
||||
|
||||
على سبيل المثال، إليك كيفية إضافة خادم MCP التجريبي [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything).
|
||||
|
||||
```jsonc title="opencode.jsonc"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"mcp_everything": {
|
||||
"type": "local",
|
||||
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
ولاستخدامه يمكنني إضافة `use the mcp_everything tool` إلى طلباتي.
|
||||
|
||||
```txt "mcp_everything"
|
||||
use the mcp_everything tool to add the number 3 and 4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### الخيارات
|
||||
فيما يلي جميع الخيارات المتاحة لتهيئة خادم MCP محلي.
|
||||
|
||||
| الخيار | النوع | مطلوب | الوصف |
|
||||
| ------------- | ------- | ----- | -------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | نوع اتصال خادم MCP، ويجب أن يكون `"local"`. |
|
||||
| `command` | Array | Y | الأمر والوسائط اللازمة لتشغيل خادم MCP. |
|
||||
| `environment` | Object | | متغيرات البيئة التي يتم تعيينها عند تشغيل الخادم. |
|
||||
| `enabled` | Boolean | | تفعيل خادم MCP أو تعطيله عند بدء التشغيل. |
|
||||
| `timeout` | Number | | المهلة بالمللي ثانية لجلب الأدوات من خادم MCP. القيمة الافتراضية 5000 (5 ثوانٍ). |
|
||||
|
||||
---
|
||||
|
||||
## بعيد
|
||||
أضف خوادم MCP البعيدة عبر ضبط `type` على `"remote"`.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-remote-mcp": {
|
||||
"type": "remote",
|
||||
"url": "https://my-mcp-server.com",
|
||||
"enabled": true,
|
||||
"headers": {
|
||||
"Authorization": "Bearer MY_API_KEY"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمثل `url` عنوان URL لخادم MCP البعيد، وباستخدام خيار `headers` يمكنك تمرير قائمة من الرؤوس (headers).
|
||||
|
||||
---
|
||||
|
||||
#### الخيارات
|
||||
| الخيار | النوع | مطلوب | الوصف |
|
||||
| --------- | ------- | ----- | -------------------------------------------------------------------------------- |
|
||||
| `type` | String | Y | نوع اتصال خادم MCP، ويجب أن يكون `"remote"`. |
|
||||
| `url` | String | Y | عنوان URL لخادم MCP البعيد. |
|
||||
| `enabled` | Boolean | | تفعيل خادم MCP أو تعطيله عند بدء التشغيل. |
|
||||
| `headers` | Object | | الرؤوس التي يتم إرسالها مع الطلب. |
|
||||
| `oauth` | Object | | إعدادات مصادقة OAuth. راجع قسم [OAuth](#oauth) أدناه. |
|
||||
| `timeout` | Number | | المهلة بالمللي ثانية لجلب الأدوات من خادم MCP. القيمة الافتراضية 5000 (5 ثوانٍ). |
|
||||
|
||||
---
|
||||
|
||||
## OAuth
|
||||
يتولى OpenCode تلقائيا معالجة مصادقة OAuth لخوادم MCP البعيدة. عندما يتطلب خادم ما المصادقة، سيقوم OpenCode بما يلي:
|
||||
|
||||
1. اكتشاف استجابة 401 وبدء تدفق OAuth
|
||||
2. استخدام **Dynamic Client Registration (RFC 7591)** إذا كان الخادم يدعمه
|
||||
3. تخزين الرموز (tokens) بشكل آمن للطلبات المستقبلية
|
||||
|
||||
---
|
||||
|
||||
### تلقائي
|
||||
بالنسبة لمعظم خوادم MCP التي تدعم OAuth، لا تحتاج إلى إعدادات خاصة. ما عليك سوى تهيئة الخادم البعيد:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا كان الخادم يتطلب المصادقة، فسيطلب منك OpenCode المصادقة عند أول محاولة لاستخدامه. وإذا لم يحدث ذلك، يمكنك [تشغيل التدفق يدويا](#authenticating) باستخدام `opencode mcp auth <server-name>`.
|
||||
|
||||
---
|
||||
|
||||
### مُسجَّل مسبقا
|
||||
إذا كانت لديك بيانات اعتماد العميل من موفّر خادم MCP، يمكنك تهيئتها:
|
||||
|
||||
```json title="opencode.json" {7-11}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-oauth-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": {
|
||||
"clientId": "{env:MY_MCP_CLIENT_ID}",
|
||||
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
|
||||
"scope": "tools:read tools:execute"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
يمكنك تشغيل المصادقة يدويا أو إدارة بيانات الاعتماد.
|
||||
|
||||
صادِق مع خادم MCP معيّن:
|
||||
|
||||
```bash
|
||||
opencode mcp auth my-oauth-server
|
||||
```
|
||||
|
||||
اعرض جميع خوادم MCP وحالة المصادقة الخاصة بها:
|
||||
|
||||
```bash
|
||||
opencode mcp list
|
||||
```
|
||||
|
||||
احذف بيانات الاعتماد المخزنة:
|
||||
|
||||
```bash
|
||||
opencode mcp logout my-oauth-server
|
||||
```
|
||||
|
||||
سيفتح أمر `mcp auth` متصفحك للتفويض. بعد إكمال التفويض، سيخزّن OpenCode الرموز بشكل آمن في `~/.local/share/opencode/mcp-auth.json`.
|
||||
|
||||
---
|
||||
|
||||
#### تعطيل OAuth
|
||||
إذا أردت تعطيل OAuth التلقائي لخادم ما (على سبيل المثال، للخوادم التي تستخدم مفاتيح API بدلا من ذلك)، فاضبط `oauth` على `false`:
|
||||
|
||||
```json title="opencode.json" {7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-api-key-server": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.example.com/mcp",
|
||||
"oauth": false,
|
||||
"headers": {
|
||||
"Authorization": "Bearer {env:MY_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### خيارات OAuth
|
||||
| الخيار | النوع | الوصف |
|
||||
| -------------- | --------------- | ------------------------------------------------------------------------ |
|
||||
| `oauth` | Object \| false | كائن إعدادات OAuth، أو `false` لتعطيل الاكتشاف التلقائي لـ OAuth. |
|
||||
| `clientId` | String | معرّف عميل OAuth. إذا لم يُحدَّد، ستتم محاولة التسجيل الديناميكي للعميل. |
|
||||
| `clientSecret` | String | سرّ عميل OAuth، إذا كان مطلوبا من خادم التفويض. |
|
||||
| `scope` | String | نطاقات OAuth المطلوبة أثناء التفويض. |
|
||||
|
||||
#### تصحيح الأخطاء
|
||||
إذا فشل خادم MCP بعيد في المصادقة، يمكنك تشخيص المشكلة باستخدام:
|
||||
|
||||
```bash
|
||||
# View auth status for all OAuth-capable servers
|
||||
opencode mcp auth list
|
||||
|
||||
# Debug connection and OAuth flow for a specific server
|
||||
opencode mcp debug my-oauth-server
|
||||
```
|
||||
|
||||
يعرض أمر `mcp debug` حالة المصادقة الحالية، ويختبر اتصال HTTP، ويحاول تنفيذ تدفق اكتشاف OAuth.
|
||||
|
||||
---
|
||||
|
||||
## الإدارة
|
||||
تتوفر خوادم MCP لديك كأدوات داخل OpenCode إلى جانب الأدوات المضمنة. لذا يمكنك إدارتها عبر إعدادات OpenCode مثل أي أداة أخرى.
|
||||
|
||||
---
|
||||
|
||||
### عام
|
||||
هذا يعني أنه يمكنك تفعيلها أو تعطيلها على مستوى عام.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp-foo": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكننا أيضا استخدام نمط glob لتعطيل جميع خوادم MCP المطابقة.
|
||||
|
||||
```json title="opencode.json" {14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp-foo": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-foo"]
|
||||
},
|
||||
"my-mcp-bar": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command-bar"]
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هنا نستخدم نمط glob `my-mcp*` لتعطيل جميع خوادم MCP.
|
||||
|
||||
---
|
||||
|
||||
### لكل وكيل
|
||||
إذا كان لديك عدد كبير من خوادم MCP فقد ترغب في تفعيلها لكل وكيل على حدة وتعطيلها على المستوى العام. للقيام بذلك:
|
||||
|
||||
1. عطّلها كأداة على المستوى العام.
|
||||
2. في [إعدادات الوكيل](/docs/agents#tools)، فعّل خادم MCP كأداة.
|
||||
|
||||
```json title="opencode.json" {11, 14-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"my-mcp": {
|
||||
"type": "local",
|
||||
"command": ["bun", "x", "my-mcp-command"],
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"my-mcp*": false
|
||||
},
|
||||
"agent": {
|
||||
"my-agent": {
|
||||
"tools": {
|
||||
"my-mcp*": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### أنماط Glob
|
||||
يستخدم نمط glob أنماطا بسيطة من مطابقة glob:
|
||||
|
||||
- `*` يطابق صفرا أو أكثر من أي محرف (على سبيل المثال، `"my-mcp*"` يطابق `my-mcp_search` و`my-mcp_list` وغيرها.)
|
||||
- `?` يطابق محرفا واحدا بالضبط
|
||||
- جميع المحارف الأخرى تُطابق حرفيا
|
||||
|
||||
:::note
|
||||
تُسجَّل أدوات خادم MCP مع اسم الخادم كبادئة، لذا لتعطيل جميع أدوات خادم ما استخدم ببساطة:
|
||||
|
||||
```
|
||||
"mymcpservername_*": false
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
فيما يلي أمثلة لبعض خوادم MCP الشائعة. يمكنك إرسال PR إذا أردت توثيق خوادم أخرى.
|
||||
|
||||
---
|
||||
|
||||
### Sentry
|
||||
|
||||
أضف [خادم MCP الخاص بـ Sentry](https://mcp.sentry.dev) للتفاعل مع مشاريع Sentry والقضايا (issues) الخاصة بك.
|
||||
|
||||
```json title="opencode.json" {4-8}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"sentry": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.sentry.dev/mcp",
|
||||
"oauth": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
بعد إضافة الإعدادات، قم بالمصادقة مع Sentry:
|
||||
|
||||
```bash
|
||||
opencode mcp auth sentry
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى فتح نافذة متصفح لإكمال تدفق OAuth وربط OpenCode بحساب Sentry الخاص بك.
|
||||
|
||||
بعد المصادقة، يمكنك استخدام أدوات Sentry في طلباتك للاستعلام عن القضايا والمشاريع وبيانات الأخطاء.
|
||||
|
||||
```txt "use sentry"
|
||||
Show me the latest unresolved issues in my project. use sentry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Context7
|
||||
|
||||
أضف [خادم MCP الخاص بـ Context7](https://github.com/upstash/context7) للبحث في المستندات.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا كنت قد سجلت للحصول على حساب مجاني، يمكنك استخدام مفتاح API للحصول على حدود أعلى لمعدل الطلبات.
|
||||
|
||||
```json title="opencode.json" {7-9}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هنا نفترض أنك عيّنت متغير البيئة `CONTEXT7_API_KEY`.
|
||||
|
||||
أضف `use context7` إلى طلباتك لاستخدام خادم MCP الخاص بـ Context7.
|
||||
|
||||
```txt "use context7"
|
||||
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
|
||||
```
|
||||
|
||||
بدلا من ذلك، يمكنك إضافة شيء مثل هذا إلى [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
When you need to search docs, use `context7` tools.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Grep by Vercel
|
||||
|
||||
أضف خادم MCP الخاص بـ [Grep by Vercel](https://grep.app) للبحث في مقتطفات الشيفرة على GitHub.
|
||||
|
||||
```json title="opencode.json" {4-7}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"gh_grep": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.grep.app"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
وبما أننا سمّينا خادم MCP الخاص بنا `gh_grep`، يمكنك إضافة `use the gh_grep tool` إلى طلباتك لجعل الوكيل يستخدمه.
|
||||
|
||||
```txt "use the gh_grep tool"
|
||||
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
|
||||
```
|
||||
|
||||
بدلا من ذلك، يمكنك إضافة شيء مثل هذا إلى [AGENTS.md](/docs/rules/).
|
||||
|
||||
```md title="AGENTS.md"
|
||||
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
|
||||
```
|
||||
222
packages/web/src/content/docs/ar/models.mdx
Normal file
222
packages/web/src/content/docs/ar/models.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: النماذج
|
||||
description: تهيئة مزوّد LLM والنموذج.
|
||||
---
|
||||
|
||||
يستخدم OpenCode كلاً من [AI SDK](https://ai-sdk.dev/) و[Models.dev](https://models.dev) لدعم **أكثر من 75 مزوّداً لنماذج LLM**، كما يدعم تشغيل النماذج محلياً.
|
||||
|
||||
---
|
||||
|
||||
## المزوّدون
|
||||
|
||||
أكثر المزوّدين شيوعاً مُحمَّلون مسبقاً افتراضياً. إذا أضفت بيانات اعتماد أحد المزوّدين عبر الأمر `/connect` فستكون متاحة عند تشغيل OpenCode.
|
||||
|
||||
تعرّف على المزيد حول [المزوّدين](/docs/providers).
|
||||
|
||||
---
|
||||
|
||||
## اختر نموذجاً
|
||||
|
||||
بعد تهيئة المزوّد يمكنك اختيار النموذج الذي تريده بكتابة:
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## النماذج الموصى بها
|
||||
|
||||
هناك الكثير من النماذج المتاحة، وتظهر نماذج جديدة كل أسبوع.
|
||||
|
||||
:::tip
|
||||
ننصح باستخدام أحد النماذج التي نوصي بها.
|
||||
:::
|
||||
|
||||
لكن القليل منها فقط يكون جيداً في كلٍ من توليد الشيفرة واستدعاء الأدوات.
|
||||
|
||||
فيما يلي عدة نماذج تعمل جيداً مع OpenCode، دون ترتيب معيّن. (هذه ليست قائمة شاملة وقد لا تكون محدَّثة دائماً):
|
||||
|
||||
- GPT 5.2
|
||||
- GPT 5.1 Codex
|
||||
- Claude Opus 4.5
|
||||
- Claude Sonnet 4.5
|
||||
- Minimax M2.1
|
||||
- Gemini 3 Pro
|
||||
|
||||
---
|
||||
|
||||
## تعيين الافتراضي
|
||||
|
||||
لتعيين أحد هذه النماذج كنموذج افتراضي، يمكنك ضبط المفتاح `model` في ملف إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "lmstudio/google/gemma-3n-e4b"
|
||||
}
|
||||
```
|
||||
|
||||
المعرّف الكامل هنا يكون بالشكل `provider_id/model_id`. على سبيل المثال، إذا كنت تستخدم [OpenCode Zen](/docs/zen) فستستخدم `opencode/gpt-5.1-codex` لنموذج GPT 5.1 Codex.
|
||||
|
||||
إذا كنت قد هيّأت [مزوّداً مخصّصاً](/docs/providers#custom)، فإن `provider_id` هو المفتاح الموجود ضمن قسم `provider` في إعداداتك، و`model_id` هو المفتاح الموجود ضمن `provider.models`.
|
||||
|
||||
---
|
||||
|
||||
## إعداد النماذج
|
||||
|
||||
يمكنك ضبط خيارات النموذج على مستوى عام عبر ملف الإعدادات.
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-12,19-24}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"options": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
"include": ["reasoning.encrypted_content"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"anthropic": {
|
||||
"models": {
|
||||
"claude-sonnet-4-5-20250929": {
|
||||
"options": {
|
||||
"thinking": {
|
||||
"type": "enabled",
|
||||
"budgetTokens": 16000,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
هنا نقوم بضبط إعدادات عامة لنموذجين مدمجين: `gpt-5` عند الوصول إليه عبر مزوّد `openai`، و`claude-sonnet-4-20250514` عند الوصول إليه عبر مزوّد `anthropic`.
|
||||
يمكن العثور على أسماء المزوّدين والنماذج المدمجة على [Models.dev](https://models.dev).
|
||||
|
||||
يمكنك أيضاً ضبط هذه الخيارات لأي وكلاء تستخدمهم. تتجاوز إعدادات الوكيل أي خيارات عامة هنا. [اعرف المزيد](/docs/agents/#additional).
|
||||
|
||||
كما يمكنك تعريف متغيّرات مخصّصة تُوسّع المتغيّرات المدمجة. تتيح لك المتغيّرات ضبط إعدادات مختلفة للنموذج نفسه دون إنشاء إدخالات مكرّرة:
|
||||
|
||||
```jsonc title="opencode.jsonc" {6-21}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"opencode": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"high": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
"low": {
|
||||
"reasoningEffort": "low",
|
||||
"textVerbosity": "low",
|
||||
"reasoningSummary": "auto",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## المتغيّرات
|
||||
|
||||
تدعم العديد من النماذج عدة متغيّرات بإعدادات مختلفة. يأتي OpenCode مع متغيّرات افتراضية مدمجة للمزوّدين الشائعين.
|
||||
|
||||
### المتغيّرات المدمجة
|
||||
|
||||
يأتي OpenCode مع متغيّرات افتراضية لعدد كبير من المزوّدين:
|
||||
|
||||
**Anthropic**:
|
||||
|
||||
- `high` - ميزانية تفكير مرتفعة (الافتراضي)
|
||||
- `max` - أقصى ميزانية تفكير
|
||||
|
||||
**OpenAI**:
|
||||
|
||||
تختلف حسب النموذج، لكن بشكل عام:
|
||||
|
||||
- `none` - بدون استدلال
|
||||
- `minimal` - أقل جهد للاستدلال
|
||||
- `low` - جهد استدلال منخفض
|
||||
- `medium` - جهد استدلال متوسط
|
||||
- `high` - جهد استدلال مرتفع
|
||||
- `xhigh` - جهد استدلال مرتفع جداً
|
||||
|
||||
**Google**:
|
||||
|
||||
- `low` - جهد/ميزانية رموز أقل
|
||||
- `high` - جهد/ميزانية رموز أعلى
|
||||
|
||||
:::tip
|
||||
هذه القائمة ليست شاملة. لدى العديد من المزوّدين الآخرين إعدادات افتراضية مدمجة أيضاً.
|
||||
:::
|
||||
|
||||
### متغيّرات مخصّصة
|
||||
|
||||
يمكنك تجاوز المتغيّرات الموجودة أو إضافة متغيّراتك الخاصة:
|
||||
|
||||
```jsonc title="opencode.jsonc" {7-18}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"provider": {
|
||||
"openai": {
|
||||
"models": {
|
||||
"gpt-5": {
|
||||
"variants": {
|
||||
"thinking": {
|
||||
"reasoningEffort": "high",
|
||||
"textVerbosity": "low",
|
||||
},
|
||||
"fast": {
|
||||
"disabled": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### التبديل بين المتغيّرات
|
||||
|
||||
استخدم اختصار لوحة المفاتيح `variant_cycle` للتبديل بسرعة بين المتغيّرات. [اعرف المزيد](/docs/keybinds).
|
||||
|
||||
---
|
||||
|
||||
## تحميل النماذج
|
||||
|
||||
عند بدء تشغيل OpenCode، يتحقق من النماذج وفق ترتيب الأولوية التالي:
|
||||
|
||||
1. خيار سطر الأوامر `--model` أو `-m`. الصيغة هي نفسها الموجودة في ملف الإعدادات: `provider_id/model_id`.
|
||||
|
||||
2. قائمة النماذج في إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-20250514"
|
||||
}
|
||||
```
|
||||
|
||||
الصيغة هنا هي `provider/model`.
|
||||
|
||||
3. آخر نموذج تم استخدامه.
|
||||
|
||||
4. أول نموذج وفق أولوية داخلية.
|
||||
331
packages/web/src/content/docs/ar/modes.mdx
Normal file
331
packages/web/src/content/docs/ar/modes.mdx
Normal file
@@ -0,0 +1,331 @@
|
||||
---
|
||||
title: الأوضاع
|
||||
description: أوضاع مختلفة لحالات استخدام مختلفة.
|
||||
---
|
||||
|
||||
:::caution
|
||||
يتم الآن ضبط الأوضاع عبر خيار `agent` في إعدادات opencode. أصبح خيار
|
||||
`mode` مُهمَلًا الآن. [اعرف المزيد](/docs/agents).
|
||||
:::
|
||||
|
||||
تتيح لك الأوضاع في opencode تخصيص السلوك والأدوات والمطالبات لحالات استخدام مختلفة.
|
||||
|
||||
يأتي مع وضعين مدمجين: **build** و **plan**. يمكنك تخصيصهما أو إعداد
|
||||
أوضاعك الخاصة عبر إعدادات opencode.
|
||||
|
||||
يمكنك التبديل بين الأوضاع أثناء الجلسة أو إعدادها في ملف الإعدادات لديك.
|
||||
|
||||
---
|
||||
|
||||
## الأوضاع المدمجة
|
||||
|
||||
يأتي opencode مع وضعين مدمجين.
|
||||
|
||||
---
|
||||
|
||||
### Build
|
||||
|
||||
وضع Build هو الوضع **الافتراضي** مع تفعيل جميع الأدوات. هذا هو الوضع القياسي لأعمال التطوير عندما تحتاج إلى وصول كامل لعمليات الملفات وأوامر النظام.
|
||||
|
||||
---
|
||||
|
||||
### Plan
|
||||
|
||||
وضع مقيَّد مُصمَّم للتخطيط والتحليل. في وضع plan، تكون الأدوات التالية مُعطَّلة افتراضيًا:
|
||||
|
||||
- `write` - لا يمكن إنشاء ملفات جديدة
|
||||
- `edit` - لا يمكن تعديل الملفات الموجودة، باستثناء الملفات الموجودة في `.opencode/plans/*.md` لتفصيل الخطة نفسها
|
||||
- `patch` - لا يمكن تطبيق التصحيحات
|
||||
- `bash` - لا يمكن تنفيذ أوامر الصدفة
|
||||
|
||||
يكون هذا الوضع مفيدًا عندما تريد من الذكاء الاصطناعي تحليل الشيفرة، أو اقتراح تغييرات، أو إنشاء خطط دون إجراء أي تعديلات فعلية على قاعدة الشيفرة لديك.
|
||||
|
||||
---
|
||||
|
||||
## التبديل
|
||||
|
||||
يمكنك التبديل بين الأوضاع أثناء الجلسة باستخدام مفتاح _Tab_، أو اختصار `switch_mode` الذي قمت بإعداده.
|
||||
|
||||
انظر أيضًا: [Formatters](/docs/formatters) لمعلومات حول إعدادات تنسيق الشيفرة.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص الأوضاع المدمجة أو إنشاء أوضاعك الخاصة عبر الإعدادات. يمكن إعداد الأوضاع بطريقتين:
|
||||
|
||||
### إعدادات JSON
|
||||
|
||||
قم بإعداد الأوضاع في ملف الإعدادات `opencode.json` لديك:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"build": {
|
||||
"model": "anthropic/claude-sonnet-4-20250514",
|
||||
"prompt": "{file:./prompts/build.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": true
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514",
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### إعدادات Markdown
|
||||
|
||||
يمكنك أيضًا تعريف الأوضاع باستخدام ملفات markdown. ضعها في:
|
||||
|
||||
- عالمي: `~/.config/opencode/modes/`
|
||||
- للمشروع: `.opencode/modes/`
|
||||
|
||||
```markdown title="~/.config/opencode/modes/review.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.1
|
||||
tools:
|
||||
write: false
|
||||
edit: false
|
||||
bash: false
|
||||
---
|
||||
|
||||
You are in code review mode. Focus on:
|
||||
|
||||
- Code quality and best practices
|
||||
- Potential bugs and edge cases
|
||||
- Performance implications
|
||||
- Security considerations
|
||||
|
||||
Provide constructive feedback without making direct changes.
|
||||
```
|
||||
|
||||
يصبح اسم ملف markdown هو اسم الوضع (على سبيل المثال، `review.md` ينشئ وضعًا باسم `review`).
|
||||
|
||||
لنلقِ نظرة على خيارات الإعداد هذه بمزيد من التفصيل.
|
||||
|
||||
---
|
||||
|
||||
### النموذج
|
||||
|
||||
استخدم إعداد `model` لتجاوز النموذج الافتراضي لهذا الوضع. يفيد ذلك عند استخدام نماذج مختلفة مُحسَّنة لمهام مختلفة؛ مثل نموذج أسرع للتخطيط ونموذج أكثر قدرة للتنفيذ.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"model": "anthropic/claude-haiku-4-20250514"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### درجة الحرارة
|
||||
|
||||
تحكَّم في العشوائية والإبداع في ردود الذكاء الاصطناعي عبر إعداد `temperature`. القيم الأقل تجعل الردود أكثر تركيزًا وحتمية، بينما تزيد القيم الأعلى الإبداع والتنوّع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"plan": {
|
||||
"temperature": 0.1
|
||||
},
|
||||
"creative": {
|
||||
"temperature": 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتراوح قيم درجة الحرارة عادةً بين 0.0 و 1.0:
|
||||
|
||||
- **0.0-0.2**: ردود شديدة التركيز وحتمية، مثالية لتحليل الشيفرة والتخطيط
|
||||
- **0.3-0.5**: ردود متوازنة مع قدر من الإبداع، مناسبة لمهام التطوير العامة
|
||||
- **0.6-1.0**: ردود أكثر إبداعًا وتنوّعًا، مفيدة للعصف الذهني والاستكشاف
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"analyze": {
|
||||
"temperature": 0.1,
|
||||
"prompt": "{file:./prompts/analysis.txt}"
|
||||
},
|
||||
"build": {
|
||||
"temperature": 0.3
|
||||
},
|
||||
"brainstorm": {
|
||||
"temperature": 0.7,
|
||||
"prompt": "{file:./prompts/creative.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد درجة الحرارة، يستخدم opencode القيم الافتراضية الخاصة بكل نموذج (عادةً 0 لمعظم النماذج و 0.55 لنماذج Qwen).
|
||||
|
||||
---
|
||||
|
||||
### الموجّه
|
||||
|
||||
حدِّد ملف موجّه نظام (system prompt) مخصص لهذا الوضع عبر إعداد `prompt`. ينبغي أن يحتوي ملف الموجّه على تعليمات مرتبطة بهدف هذا الوضع.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"mode": {
|
||||
"review": {
|
||||
"prompt": "{file:./prompts/code-review.txt}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
هذا المسار نسبي بالنسبة لموقع ملف الإعدادات. لذلك يعمل مع
|
||||
إعدادات opencode العالمية وكذلك إعدادات المشروع.
|
||||
|
||||
---
|
||||
|
||||
### الأدوات
|
||||
|
||||
تحكَّم في الأدوات المتاحة في هذا الوضع عبر إعداد `tools`. يمكنك تفعيل أدوات محددة أو تعطيلها بضبطها على `true` أو `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": {
|
||||
"readonly": {
|
||||
"tools": {
|
||||
"write": false,
|
||||
"edit": false,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يتم تحديد أدوات، فستكون جميع الأدوات مفعّلة افتراضيًا.
|
||||
|
||||
---
|
||||
|
||||
#### الأدوات المتاحة
|
||||
|
||||
فيما يلي جميع الأدوات التي يمكن التحكم بها عبر إعدادات الوضع.
|
||||
|
||||
| الأداة | الوصف |
|
||||
| ----------- | -------------------------- |
|
||||
| `bash` | تنفيذ أوامر الصدفة |
|
||||
| `edit` | تعديل الملفات الموجودة |
|
||||
| `write` | إنشاء ملفات جديدة |
|
||||
| `read` | قراءة محتويات الملفات |
|
||||
| `grep` | البحث في محتويات الملفات |
|
||||
| `glob` | العثور على الملفات حسب نمط |
|
||||
| `list` | سرد محتويات الدليل |
|
||||
| `patch` | تطبيق تصحيحات على الملفات |
|
||||
| `todowrite` | إدارة قوائم المهام |
|
||||
| `todoread` | قراءة قوائم المهام |
|
||||
| `webfetch` | جلب محتوى الويب |
|
||||
|
||||
---
|
||||
|
||||
## أوضاع مخصصة
|
||||
|
||||
يمكنك إنشاء أوضاعك المخصصة بإضافتها إلى الإعدادات. فيما يلي أمثلة باستخدام كلا الأسلوبين:
|
||||
|
||||
### باستخدام إعدادات JSON
|
||||
|
||||
```json title="opencode.json" {4-14}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mode": {
|
||||
"docs": {
|
||||
"prompt": "{file:./prompts/documentation.txt}",
|
||||
"tools": {
|
||||
"write": true,
|
||||
"edit": true,
|
||||
"bash": false,
|
||||
"read": true,
|
||||
"grep": true,
|
||||
"glob": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### باستخدام ملفات markdown
|
||||
|
||||
أنشئ ملفات الأوضاع في `.opencode/modes/` لأوضاع خاصة بالمشروع أو في `~/.config/opencode/modes/` لأوضاع عالمية:
|
||||
|
||||
```markdown title=".opencode/modes/debug.md"
|
||||
---
|
||||
temperature: 0.1
|
||||
tools:
|
||||
bash: true
|
||||
read: true
|
||||
grep: true
|
||||
write: false
|
||||
edit: false
|
||||
---
|
||||
|
||||
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
|
||||
|
||||
Focus on:
|
||||
|
||||
- Understanding the problem through careful analysis
|
||||
- Using bash commands to inspect system state
|
||||
- Reading relevant files and logs
|
||||
- Searching for patterns and anomalies
|
||||
- Providing clear explanations of findings
|
||||
|
||||
Do not make any changes to files. Only investigate and report.
|
||||
```
|
||||
|
||||
```markdown title="~/.config/opencode/modes/refactor.md"
|
||||
---
|
||||
model: anthropic/claude-sonnet-4-20250514
|
||||
temperature: 0.2
|
||||
tools:
|
||||
edit: true
|
||||
read: true
|
||||
grep: true
|
||||
glob: true
|
||||
---
|
||||
|
||||
You are in refactoring mode. Focus on improving code quality without changing functionality.
|
||||
|
||||
Priorities:
|
||||
|
||||
- Improve code readability and maintainability
|
||||
- Apply consistent naming conventions
|
||||
- Reduce code duplication
|
||||
- Optimize performance where appropriate
|
||||
- Ensure all tests continue to pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### حالات الاستخدام
|
||||
|
||||
فيما يلي بعض حالات الاستخدام الشائعة لأوضاع مختلفة.
|
||||
|
||||
- **Build mode**: أعمال تطوير كاملة مع تفعيل جميع الأدوات
|
||||
- **Plan mode**: التحليل والتخطيط دون إجراء تغييرات
|
||||
- **Review mode**: مراجعة الشيفرة مع وصول للقراءة فقط بالإضافة إلى أدوات التوثيق
|
||||
- **Debug mode**: تركيز على الاستقصاء مع تفعيل أدوات `bash` و `read`
|
||||
- **Docs mode**: كتابة التوثيق مع عمليات الملفات لكن دون أوامر النظام
|
||||
|
||||
قد تجد أيضًا أن نماذج مختلفة تكون أنسب لحالات استخدام مختلفة.
|
||||
57
packages/web/src/content/docs/ar/network.mdx
Normal file
57
packages/web/src/content/docs/ar/network.mdx
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: الشبكة
|
||||
description: إعداد الوكلاء والشهادات المخصصة.
|
||||
---
|
||||
|
||||
يدعم OpenCode متغيرات بيئة الوكيل (proxy) القياسية والشهادات المخصصة لبيئات الشبكات المؤسسية.
|
||||
|
||||
---
|
||||
|
||||
## الوكيل
|
||||
|
||||
يتبع OpenCode متغيرات بيئة الوكيل القياسية.
|
||||
|
||||
```bash
|
||||
# HTTPS proxy (recommended)
|
||||
export HTTPS_PROXY=https://proxy.example.com:8080
|
||||
|
||||
# HTTP proxy (if HTTPS not available)
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
|
||||
# Bypass proxy for local server (required)
|
||||
export NO_PROXY=localhost,127.0.0.1
|
||||
```
|
||||
|
||||
:::caution
|
||||
تتواصل واجهة TUI مع خادم HTTP محلي. يجب تجاوز الوكيل لهذا الاتصال لمنع حلقات التوجيه.
|
||||
:::
|
||||
|
||||
يمكنك إعداد منفذ الخادم واسم المضيف باستخدام [أعلام سطر الأوامر](/docs/cli#run).
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
إذا كان الوكيل يتطلب مصادقة أساسية، فأدرج بيانات الاعتماد في عنوان URL.
|
||||
|
||||
```bash
|
||||
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
:::caution
|
||||
تجنّب تضمين كلمات المرور بشكل ثابت. استخدم متغيرات البيئة أو تخزين بيانات اعتماد آمن.
|
||||
:::
|
||||
|
||||
بالنسبة للوكلاء الذين يتطلبون مصادقة متقدمة مثل NTLM أو Kerberos، فكّر في استخدام بوابة LLM تدعم طريقة المصادقة لديك.
|
||||
|
||||
---
|
||||
|
||||
## الشهادات المخصصة
|
||||
|
||||
إذا كانت مؤسستك تستخدم سلطات تصديق (CA) مخصصة لاتصالات HTTPS، فقم بإعداد OpenCode ليثق بها.
|
||||
|
||||
```bash
|
||||
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
|
||||
```
|
||||
|
||||
يعمل ذلك لكل من اتصالات الوكيل والوصول المباشر إلى واجهات برمجة التطبيقات.
|
||||
227
packages/web/src/content/docs/ar/permissions.mdx
Normal file
227
packages/web/src/content/docs/ar/permissions.mdx
Normal file
@@ -0,0 +1,227 @@
|
||||
---
|
||||
title: الأذونات
|
||||
description: تحكّم في الإجراءات التي تتطلب موافقة قبل تنفيذها.
|
||||
---
|
||||
|
||||
يستخدم OpenCode إعداد `permission` لتحديد ما إذا كان إجراءٌ ما سيُنفّذ تلقائيًا، أو سيطلب موافقتك، أو سيتم حظره.
|
||||
|
||||
اعتبارًا من `v1.1.1`، تم إهمال إعداد `tools` القديم (المنطقي) ودمجه ضمن `permission`. ولا يزال إعداد `tools` القديم مدعومًا للتوافق مع الإصدارات السابقة.
|
||||
|
||||
---
|
||||
|
||||
## الإجراءات
|
||||
يؤول كل حكم أذونات إلى إحدى القيم التالية:
|
||||
|
||||
- `"allow"` — تشغيل دون موافقة
|
||||
- `"ask"` — طلب الموافقة
|
||||
- `"deny"` — حظر الإجراء
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
يمكنك تعيين الأذونات بشكل عام (باستخدام `*`) ثم تجاوزها لأدوات محددة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"*": "ask",
|
||||
"bash": "allow",
|
||||
"edit": "deny"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا تعيين جميع الأذونات دفعة واحدة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": "allow"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## قواعد دقيقة (صيغة الكائن)
|
||||
في معظم الأذونات، يمكنك استخدام كائن لتطبيق إجراءات مختلفة بناءً على مُدخلات الأداة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"npm *": "allow",
|
||||
"rm *": "deny",
|
||||
"grep *": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"*": "deny",
|
||||
"packages/web/src/content/docs/*.mdx": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تُقيَّم القواعد عبر مطابقة الأنماط، مع كون **آخر قاعدة مطابقة هي التي تُطبَّق**. من الشائع وضع قاعدة الشمول `"*"` أولًا ثم القواعد الأكثر تحديدًا بعدها.
|
||||
|
||||
### أحرف البدل
|
||||
تستخدم أنماط الأذونات مطابقة بسيطة لأحرف البدل:
|
||||
|
||||
- `*` يطابق صفرًا أو أكثر من أي حرف
|
||||
- `?` يطابق حرفًا واحدًا بالضبط
|
||||
- جميع الأحرف الأخرى تُطابق حرفيًا
|
||||
|
||||
### توسيع مجلد المنزل
|
||||
يمكنك استخدام `~` أو `$HOME` في بداية النمط للإشارة إلى مجلد المنزل. هذا مفيد خصوصًا لقواعد [`external_directory`](#external-directories).
|
||||
|
||||
- `~/projects/*` -> `/Users/username/projects/*`
|
||||
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
||||
- `~` -> `/Users/username`
|
||||
|
||||
### الأدلة الخارجية
|
||||
استخدم `external_directory` للسماح باستدعاءات الأدوات التي تلمس مسارات خارج دليل العمل الذي بدأ منه OpenCode. ينطبق ذلك على أي أداة تأخذ مسارًا كمدخل (مثل `read` و`edit` و`list` و`glob` و`grep` والعديد من أوامر `bash`).
|
||||
|
||||
توسيع المنزل (مثل `~/...`) يؤثر فقط على طريقة كتابة النمط. لا يجعل ذلك المسار الخارجي جزءًا من مساحة العمل الحالية، لذا يجب السماح بالمسارات خارج دليل العمل عبر `external_directory` أيضًا.
|
||||
|
||||
على سبيل المثال، يتيح هذا الوصول إلى كل ما يقع تحت `~/projects/personal/`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
أي دليل مسموح به هنا يرث نفس القيم الافتراضية لمساحة العمل الحالية. وبما أن [`read` افتراضيًا هو `allow`](#defaults)، فإن عمليات القراءة تكون مسموحة أيضًا للعناصر ضمن `external_directory` ما لم يتم تجاوز ذلك. أضِف قواعد صريحة عندما يجب تقييد أداة ما في هذه المسارات، مثل حظر التعديلات مع الإبقاء على القراءة:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"external_directory": {
|
||||
"~/projects/personal/**": "allow"
|
||||
},
|
||||
"edit": {
|
||||
"~/projects/personal/**": "deny"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
اجعل القائمة مقتصرة على المسارات الموثوقة، ثم أضِف طبقات إضافية من قواعد `allow` أو `deny` حسب الحاجة لأدوات أخرى (مثل `bash`).
|
||||
|
||||
---
|
||||
|
||||
## الأذونات المتاحة
|
||||
تُعرَّف أذونات OpenCode بأسماء الأدوات، بالإضافة إلى بعض حواجز الأمان:
|
||||
|
||||
- `read` — قراءة ملف (يطابق مسار الملف)
|
||||
- `edit` — جميع تعديلات الملفات (يشمل `edit` و`write` و`patch` و`multiedit`)
|
||||
- `glob` — مطابقة أسماء الملفات (يطابق نمط الـ glob)
|
||||
- `grep` — البحث في المحتوى (يطابق نمط regex)
|
||||
- `list` — سرد الملفات في دليل (يطابق مسار الدليل)
|
||||
- `bash` — تشغيل أوامر الصدفة (يطابق الأوامر المُحلَّلة مثل `git status --porcelain`)
|
||||
- `task` — تشغيل وكلاء فرعيين (يطابق نوع الوكيل الفرعي)
|
||||
- `skill` — تحميل مهارة (يطابق اسم المهارة)
|
||||
- `lsp` — تشغيل استعلامات LSP (حاليًا دون قواعد دقيقة)
|
||||
- `todoread`, `todowrite` — قراءة/تحديث قائمة المهام
|
||||
- `webfetch` — جلب عنوان URL (يطابق الـ URL)
|
||||
- `websearch`, `codesearch` — بحث الويب/الكود (يطابق الاستعلام)
|
||||
- `external_directory` — يُفعَّل عندما تلمس أداة مسارات خارج دليل عمل المشروع
|
||||
- `doom_loop` — يُفعَّل عندما يتكرر نفس استدعاء الأداة 3 مرات مع نفس المُدخلات
|
||||
|
||||
---
|
||||
|
||||
## القيم الافتراضية
|
||||
إذا لم تحدد شيئًا، يبدأ OpenCode بقيم افتراضية متساهلة:
|
||||
|
||||
- معظم الأذونات افتراضيًا تكون `"allow"`.
|
||||
- `doom_loop` و`external_directory` افتراضيًا تكون `"ask"`.
|
||||
- `read` هو `"allow"`، لكن ملفات `.env` تكون مرفوضة افتراضيًا:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"permission": {
|
||||
"read": {
|
||||
"*": "allow",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ماذا تفعل `"ask"`
|
||||
عندما يطلب OpenCode الموافقة، تعرض الواجهة ثلاث نتائج ممكنة:
|
||||
|
||||
- `once` — الموافقة على هذا الطلب فقط
|
||||
- `always` — الموافقة على الطلبات المستقبلية المطابقة للأنماط المقترحة (لباقي جلسة OpenCode الحالية)
|
||||
- `reject` — رفض الطلب
|
||||
|
||||
مجموعة الأنماط التي ستوافق عليها `always` تُوفَّر من الأداة نفسها (على سبيل المثال، موافقات `bash` عادةً ما تُدرج بادئة أمر آمنة في القائمة البيضاء مثل `git status*`).
|
||||
|
||||
---
|
||||
|
||||
## الوكلاء
|
||||
يمكنك تجاوز الأذونات لكل وكيل. تُدمَج أذونات الوكلاء مع الإعداد العام، وتكون قواعد الوكيل هي ذات الأولوية. [تعرّف أكثر](/docs/agents#permissions) على أذونات الوكلاء.
|
||||
|
||||
:::note
|
||||
ارجع إلى قسم [قواعد دقيقة (صيغة الكائن)](#granular-rules-object-syntax) للحصول على أمثلة أكثر تفصيلًا حول مطابقة الأنماط.
|
||||
:::
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "deny",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"build": {
|
||||
"permission": {
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"git *": "allow",
|
||||
"git commit *": "ask",
|
||||
"git push *": "deny",
|
||||
"grep *": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا ضبط أذونات الوكيل في Markdown:
|
||||
|
||||
```markdown title="~/.config/opencode/agents/review.md"
|
||||
---
|
||||
description: Code review without edits
|
||||
mode: subagent
|
||||
permission:
|
||||
edit: deny
|
||||
bash: ask
|
||||
webfetch: deny
|
||||
---
|
||||
|
||||
Only analyze code and suggest changes.
|
||||
```
|
||||
|
||||
:::tip
|
||||
استخدم مطابقة الأنماط للأوامر التي تحتوي على معاملات. يسمح `"grep *"` بتنفيذ `grep pattern file.txt`، بينما سيحظر `"grep"` وحده ذلك. تعمل أوامر مثل `git status` للسلوك الافتراضي، لكنها تتطلب إذنًا صريحًا (مثل `"git status *"`) عند تمرير معاملات.
|
||||
:::
|
||||
385
packages/web/src/content/docs/ar/plugins.mdx
Normal file
385
packages/web/src/content/docs/ar/plugins.mdx
Normal file
@@ -0,0 +1,385 @@
|
||||
---
|
||||
title: الإضافات
|
||||
description: اكتب إضافاتك الخاصة لتوسيع OpenCode.
|
||||
---
|
||||
|
||||
تتيح لك الإضافات توسيع OpenCode عبر ربطها بأحداث مختلفة وتخصيص السلوك. يمكنك إنشاء إضافات لإضافة ميزات جديدة، أو التكامل مع خدمات خارجية، أو تعديل السلوك الافتراضي لـ OpenCode.
|
||||
|
||||
للاطلاع على أمثلة، راجع [الإضافات](/docs/ecosystem#plugins) التي أنشأها المجتمع.
|
||||
|
||||
---
|
||||
|
||||
## استخدام إضافة
|
||||
|
||||
هناك طريقتان لتحميل الإضافات.
|
||||
|
||||
---
|
||||
|
||||
### من ملفات محلية
|
||||
|
||||
ضع ملفات JavaScript أو TypeScript في دليل الإضافات.
|
||||
|
||||
- `.opencode/plugins/` - إضافات على مستوى المشروع
|
||||
- `~/.config/opencode/plugins/` - إضافات عامة
|
||||
|
||||
تُحمَّل الملفات في هذه الأدلة تلقائيا عند بدء التشغيل.
|
||||
|
||||
---
|
||||
|
||||
### من npm
|
||||
|
||||
حدّد حزم npm في ملف الإعدادات.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
|
||||
}
|
||||
```
|
||||
|
||||
يتم دعم حزم npm العادية والحزم ذات النطاق (scoped).
|
||||
|
||||
تصفّح الإضافات المتاحة في [النظام البيئي](/docs/ecosystem#plugins).
|
||||
|
||||
---
|
||||
|
||||
### كيفية تثبيت الإضافات
|
||||
|
||||
**إضافات npm** تُثبَّت تلقائيا باستخدام Bun عند بدء التشغيل. تُخزَّن الحزم واعتمادياتها مؤقتا في `~/.cache/opencode/node_modules/`.
|
||||
|
||||
**الإضافات المحلية** تُحمَّل مباشرة من دليل الإضافات. لاستخدام حزم خارجية، يجب إنشاء `package.json` داخل دليل الإعدادات لديك (راجع [الاعتماديات](#dependencies))، أو نشر الإضافة على npm ثم [إضافتها إلى إعداداتك](/docs/config#plugins).
|
||||
|
||||
---
|
||||
|
||||
### ترتيب التحميل
|
||||
|
||||
تُحمَّل الإضافات من جميع المصادر وتعمل جميع الخطافات بالتتابع. ترتيب التحميل هو:
|
||||
|
||||
1. إعدادات عامة (`~/.config/opencode/opencode.json`)
|
||||
2. إعدادات المشروع (`opencode.json`)
|
||||
3. دليل الإضافات العام (`~/.config/opencode/plugins/`)
|
||||
4. دليل إضافات المشروع (`.opencode/plugins/`)
|
||||
|
||||
تُحمَّل حزم npm المكررة ذات الاسم والإصدار نفسيهما مرة واحدة. ومع ذلك، تُحمَّل الإضافة المحلية وإضافة npm ذات الاسم المشابه كلتاهما بشكل مستقل.
|
||||
|
||||
---
|
||||
|
||||
## إنشاء إضافة
|
||||
|
||||
الإضافة هي **وحدة JavaScript/TypeScript** تصدّر دالة إضافة واحدة أو أكثر.
|
||||
تستقبل كل دالة كائنا للسياق وتعيد كائنا للخطافات.
|
||||
|
||||
---
|
||||
|
||||
### الاعتماديات
|
||||
|
||||
يمكن للإضافات المحلية والأدوات المخصصة استخدام حزم npm خارجية. أضف `package.json` إلى دليل الإعدادات لديك متضمنا الاعتماديات التي تحتاجها.
|
||||
|
||||
```json title=".opencode/package.json"
|
||||
{
|
||||
"dependencies": {
|
||||
"shescape": "^2.1.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يشغّل OpenCode الأمر `bun install` عند بدء التشغيل لتثبيتها. بعد ذلك يمكن لإضافاتك وأدواتك استيرادها.
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
import { escape } from "shescape"
|
||||
|
||||
export const MyPlugin = async (ctx) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "bash") {
|
||||
output.args.command = escape(output.args.command)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### البنية الأساسية
|
||||
|
||||
```js title=".opencode/plugins/example.js"
|
||||
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
console.log("Plugin initialized!")
|
||||
|
||||
return {
|
||||
// Hook implementations go here
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تستقبل دالة الإضافة ما يلي:
|
||||
|
||||
- `project`: معلومات المشروع الحالي.
|
||||
- `directory`: دليل العمل الحالي.
|
||||
- `worktree`: مسار git worktree.
|
||||
- `client`: عميل SDK لـ opencode للتفاعل مع الذكاء الاصطناعي.
|
||||
- `$`: واجهة [shell API](https://bun.com/docs/runtime/shell) الخاصة بـ Bun لتنفيذ الأوامر.
|
||||
|
||||
---
|
||||
|
||||
### دعم TypeScript
|
||||
|
||||
بالنسبة لإضافات TypeScript، يمكنك استيراد الأنواع من حزمة الإضافة:
|
||||
|
||||
```ts title="my-plugin.ts" {1}
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
// Type-safe hook implementations
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الأحداث
|
||||
|
||||
يمكن للإضافات الاشتراك في الأحداث كما هو موضح أدناه في قسم الأمثلة. فيما يلي قائمة بالأحداث المتاحة.
|
||||
|
||||
#### أحداث الأوامر
|
||||
|
||||
- `command.executed`
|
||||
|
||||
#### أحداث الملفات
|
||||
|
||||
- `file.edited`
|
||||
- `file.watcher.updated`
|
||||
|
||||
#### أحداث التثبيت
|
||||
|
||||
- `installation.updated`
|
||||
|
||||
#### أحداث LSP
|
||||
|
||||
- `lsp.client.diagnostics`
|
||||
- `lsp.updated`
|
||||
|
||||
#### أحداث الرسائل
|
||||
|
||||
- `message.part.removed`
|
||||
- `message.part.updated`
|
||||
- `message.removed`
|
||||
- `message.updated`
|
||||
|
||||
#### أحداث الأذونات
|
||||
|
||||
- `permission.asked`
|
||||
- `permission.replied`
|
||||
|
||||
#### أحداث الخادم
|
||||
|
||||
- `server.connected`
|
||||
|
||||
#### أحداث الجلسة
|
||||
|
||||
- `session.created`
|
||||
- `session.compacted`
|
||||
- `session.deleted`
|
||||
- `session.diff`
|
||||
- `session.error`
|
||||
- `session.idle`
|
||||
- `session.status`
|
||||
- `session.updated`
|
||||
|
||||
#### أحداث Todo
|
||||
|
||||
- `todo.updated`
|
||||
|
||||
#### أحداث الصدفة
|
||||
|
||||
- `shell.env`
|
||||
|
||||
#### أحداث الأدوات
|
||||
|
||||
- `tool.execute.after`
|
||||
- `tool.execute.before`
|
||||
|
||||
#### أحداث واجهة TUI
|
||||
|
||||
- `tui.prompt.append`
|
||||
- `tui.command.execute`
|
||||
- `tui.toast.show`
|
||||
|
||||
---
|
||||
|
||||
## أمثلة
|
||||
|
||||
فيما يلي بعض أمثلة الإضافات التي يمكنك استخدامها لتوسيع opencode.
|
||||
|
||||
---
|
||||
|
||||
### إرسال إشعارات
|
||||
|
||||
أرسل إشعارات عند وقوع أحداث معينة:
|
||||
|
||||
```js title=".opencode/plugins/notification.js"
|
||||
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
event: async ({ event }) => {
|
||||
// Send notification on session completion
|
||||
if (event.type === "session.idle") {
|
||||
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
نستخدم `osascript` لتشغيل AppleScript على macOS. هنا نستخدمه لإرسال إشعارات.
|
||||
|
||||
:::note
|
||||
إذا كنت تستخدم تطبيق OpenCode لسطح المكتب، فيمكنه إرسال إشعارات النظام تلقائيا عند جاهزية الرد أو عند حدوث خطأ في جلسة.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### حماية .env
|
||||
|
||||
امنع opencode من قراءة ملفات `.env`:
|
||||
|
||||
```javascript title=".opencode/plugins/env-protection.js"
|
||||
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
|
||||
return {
|
||||
"tool.execute.before": async (input, output) => {
|
||||
if (input.tool === "read" && output.args.filePath.includes(".env")) {
|
||||
throw new Error("Do not read .env files")
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### حقن متغيرات البيئة
|
||||
|
||||
احقن متغيرات البيئة في جميع عمليات تنفيذ الصدفة (أدوات الذكاء الاصطناعي وطرفيات المستخدم):
|
||||
|
||||
```javascript title=".opencode/plugins/inject-env.js"
|
||||
export const InjectEnvPlugin = async () => {
|
||||
return {
|
||||
"shell.env": async (input, output) => {
|
||||
output.env.MY_API_KEY = "secret"
|
||||
output.env.PROJECT_ROOT = input.cwd
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### أدوات مخصصة
|
||||
|
||||
يمكن للإضافات أيضا إضافة أدوات مخصصة إلى opencode:
|
||||
|
||||
```ts title=".opencode/plugins/custom-tools.ts"
|
||||
import { type Plugin, tool } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomToolsPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
tool: {
|
||||
mytool: tool({
|
||||
description: "This is a custom tool",
|
||||
args: {
|
||||
foo: tool.schema.string(),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const { directory, worktree } = context
|
||||
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تقوم الدالة المساعدة `tool` بإنشاء أداة مخصصة يمكن لـ opencode استدعاؤها. تأخذ دالة مخطط Zod وتعيد تعريف أداة يتضمن:
|
||||
|
||||
- `description`: ما الذي تفعله الأداة
|
||||
- `args`: مخطط Zod لوسائط الأداة
|
||||
- `execute`: الدالة التي تُشغَّل عند استدعاء الأداة
|
||||
|
||||
ستكون أدواتك المخصصة متاحة لـ opencode إلى جانب الأدوات المضمنة.
|
||||
|
||||
---
|
||||
|
||||
### التسجيل
|
||||
|
||||
استخدم `client.app.log()` بدلا من `console.log` للتسجيل البنيوي:
|
||||
|
||||
```ts title=".opencode/plugins/my-plugin.ts"
|
||||
export const MyPlugin = async ({ client }) => {
|
||||
await client.app.log({
|
||||
body: {
|
||||
service: "my-plugin",
|
||||
level: "info",
|
||||
message: "Plugin initialized",
|
||||
extra: { foo: "bar" },
|
||||
},
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
المستويات: `debug`, `info`, `warn`, `error`. راجع [توثيق SDK](https://opencode.ai/docs/sdk) للتفاصيل.
|
||||
|
||||
---
|
||||
|
||||
### خطافات الضغط
|
||||
|
||||
خصّص السياق الذي يتم تضمينه عند ضغط جلسة:
|
||||
|
||||
```ts title=".opencode/plugins/compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Inject additional context into the compaction prompt
|
||||
output.context.push(`
|
||||
## Custom Context
|
||||
|
||||
Include any state that should persist across compaction:
|
||||
- Current task status
|
||||
- Important decisions made
|
||||
- Files being actively worked on
|
||||
`)
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يعمل الخطاف `experimental.session.compacting` قبل أن ينشئ نموذج اللغة الكبير (LLM) ملخص المتابعة. استخدمه لحقن سياق خاص بالمجال قد يفوته موجّه الضغط الافتراضي.
|
||||
|
||||
يمكنك أيضا استبدال موجّه الضغط بالكامل عبر ضبط `output.prompt`:
|
||||
|
||||
```ts title=".opencode/plugins/custom-compaction.ts"
|
||||
import type { Plugin } from "@opencode-ai/plugin"
|
||||
|
||||
export const CustomCompactionPlugin: Plugin = async (ctx) => {
|
||||
return {
|
||||
"experimental.session.compacting": async (input, output) => {
|
||||
// Replace the entire compaction prompt
|
||||
output.prompt = `
|
||||
You are generating a continuation prompt for a multi-agent swarm session.
|
||||
|
||||
Summarize:
|
||||
1. The current task and its status
|
||||
2. Which files are being modified and by whom
|
||||
3. Any blockers or dependencies between agents
|
||||
4. The next steps to complete the work
|
||||
|
||||
Format as a structured prompt that a new agent can use to resume work.
|
||||
`
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند ضبط `output.prompt` فإنه يستبدل موجّه الضغط الافتراضي بالكامل. يتم تجاهل المصفوفة `output.context` في هذه الحالة.
|
||||
1863
packages/web/src/content/docs/ar/providers.mdx
Normal file
1863
packages/web/src/content/docs/ar/providers.mdx
Normal file
File diff suppressed because it is too large
Load Diff
180
packages/web/src/content/docs/ar/rules.mdx
Normal file
180
packages/web/src/content/docs/ar/rules.mdx
Normal file
@@ -0,0 +1,180 @@
|
||||
---
|
||||
title: القواعد
|
||||
description: اضبط تعليمات مخصصة لـ opencode.
|
||||
---
|
||||
|
||||
يمكنك تزويد opencode بتعليمات مخصصة عبر إنشاء ملف `AGENTS.md`. هذا مشابه لقواعد Cursor. يحتوي هذا الملف على تعليمات تُضاف إلى سياق نموذج اللغة (LLM) لتخصيص سلوكه لمشروعك المحدد.
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
لإنشاء ملف `AGENTS.md` جديد، يمكنك تشغيل الأمر `/init` في opencode.
|
||||
|
||||
:::tip
|
||||
يُستحسن عمل commit لملف `AGENTS.md` الخاص بمشروعك إلى Git.
|
||||
:::
|
||||
|
||||
سيقوم ذلك بفحص مشروعك وكل محتوياته لفهم طبيعة المشروع وتوليد ملف `AGENTS.md` بناءً على ذلك. يساعد هذا opencode على التنقّل داخل المشروع بشكل أفضل.
|
||||
|
||||
إذا كان لديك ملف `AGENTS.md` موجود بالفعل، فسيحاول هذا إضافة محتوى إليه.
|
||||
|
||||
---
|
||||
|
||||
## مثال
|
||||
|
||||
يمكنك أيضًا إنشاء هذا الملف يدويًا. إليك مثالًا على بعض الأمور التي يمكنك وضعها في ملف `AGENTS.md`.
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# SST v3 Monorepo Project
|
||||
|
||||
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
|
||||
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
|
||||
- `sst.config.ts` - Main SST configuration with dynamic imports
|
||||
|
||||
## Code Standards
|
||||
|
||||
- Use TypeScript with strict mode enabled
|
||||
- Shared code goes in `packages/core/` with proper exports configuration
|
||||
- Functions go in `packages/functions/`
|
||||
- Infrastructure should be split into logical files in `infra/`
|
||||
|
||||
## Monorepo Conventions
|
||||
|
||||
- Import shared modules using workspace names: `@my-app/core/example`
|
||||
```
|
||||
|
||||
نضيف هنا تعليمات خاصة بالمشروع، وسيتم مشاركتها عبر فريقك.
|
||||
|
||||
---
|
||||
|
||||
## الأنواع
|
||||
|
||||
يدعم opencode أيضًا قراءة ملف `AGENTS.md` من مواقع متعددة، ولكل موقع غرض مختلف.
|
||||
|
||||
### المشروع
|
||||
|
||||
ضع ملف `AGENTS.md` في جذر مشروعك للقواعد الخاصة بالمشروع. لا تُطبَّق هذه القواعد إلا عند العمل داخل هذا المجلد أو مجلداته الفرعية.
|
||||
|
||||
### عام
|
||||
|
||||
يمكنك أيضًا وضع قواعد عامة في ملف `~/.config/opencode/AGENTS.md`. تُطبَّق هذه القواعد على جميع جلسات opencode.
|
||||
|
||||
وبما أن هذا الملف لا يتم عمل commit له إلى Git ولا تتم مشاركته مع فريقك، نوصي باستخدامه لتحديد أي قواعد شخصية يجب أن يلتزم بها نموذج اللغة.
|
||||
|
||||
### التوافق مع Claude Code
|
||||
|
||||
للمستخدمين الذين ينتقلون من Claude Code، يدعم OpenCode اصطلاحات ملفات Claude Code كبدائل احتياطية:
|
||||
|
||||
- **قواعد المشروع**: `CLAUDE.md` في دليل مشروعك (يُستخدم إذا لم يوجد `AGENTS.md`)
|
||||
- **قواعد عامة**: `~/.claude/CLAUDE.md` (يُستخدم إذا لم يوجد `~/.config/opencode/AGENTS.md`)
|
||||
- **المهارات**: `~/.claude/skills/` — راجع [مهارات الوكيل](/docs/skills/) للتفاصيل
|
||||
|
||||
لإيقاف التوافق مع Claude Code، عيّن أحد متغيرات البيئة التالية:
|
||||
|
||||
```bash
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
|
||||
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الأولوية
|
||||
|
||||
عند بدء opencode، يبحث عن ملفات القواعد بهذا الترتيب:
|
||||
|
||||
1. **ملفات محلية** عبر التنقّل صعودًا من الدليل الحالي (`AGENTS.md`, `CLAUDE.md`)
|
||||
2. **ملف عام** في `~/.config/opencode/AGENTS.md`
|
||||
3. **ملف Claude Code** في `~/.claude/CLAUDE.md` (ما لم يتم تعطيله)
|
||||
|
||||
يتم اعتماد أول ملف مطابق ضمن كل فئة. على سبيل المثال، إذا كان لديك كل من `AGENTS.md` و`CLAUDE.md` فسيتم استخدام `AGENTS.md` فقط. وبالمثل، تكون الأولوية لملف `~/.config/opencode/AGENTS.md` على `~/.claude/CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## تعليمات مخصصة
|
||||
|
||||
يمكنك تحديد ملفات تعليمات مخصصة في `opencode.json` أو في الملف العام `~/.config/opencode/opencode.json`. يتيح ذلك لك ولفريقك إعادة استخدام القواعد الموجودة بدلًا من تكرارها داخل AGENTS.md.
|
||||
|
||||
مثال:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضًا استخدام عناوين URL بعيدة لتحميل التعليمات من الويب.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
|
||||
}
|
||||
```
|
||||
|
||||
يتم جلب التعليمات البعيدة بمهلة قدرها 5 ثوانٍ.
|
||||
|
||||
تُدمَج جميع ملفات التعليمات مع ملفات `AGENTS.md` لديك.
|
||||
|
||||
---
|
||||
|
||||
## الإشارة إلى ملفات خارجية
|
||||
|
||||
على الرغم من أن opencode لا يقوم تلقائيًا بتحليل مراجع الملفات داخل `AGENTS.md`، يمكنك تحقيق وظيفة مشابهة بطريقتين:
|
||||
|
||||
### استخدام opencode.json
|
||||
|
||||
النهج الموصى به هو استخدام الحقل `instructions` في `opencode.json`:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
|
||||
}
|
||||
```
|
||||
|
||||
### تعليمات يدوية في AGENTS.md
|
||||
|
||||
يمكنك تعليم opencode قراءة ملفات خارجية عبر تقديم تعليمات صريحة داخل `AGENTS.md`. إليك مثالًا عمليًا:
|
||||
|
||||
```markdown title="AGENTS.md"
|
||||
# TypeScript Project Rules
|
||||
|
||||
## External File Loading
|
||||
|
||||
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
|
||||
|
||||
Instructions:
|
||||
|
||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
||||
- When loaded, treat content as mandatory instructions that override defaults
|
||||
- Follow references recursively when needed
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
For TypeScript code style and best practices: @docs/typescript-guidelines.md
|
||||
For React component architecture and hooks patterns: @docs/react-patterns.md
|
||||
For REST API design and error handling: @docs/api-standards.md
|
||||
For testing strategies and coverage requirements: @test/testing-guidelines.md
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
|
||||
```
|
||||
|
||||
يتيح لك هذا النهج ما يلي:
|
||||
|
||||
- إنشاء ملفات قواعد معيارية قابلة لإعادة الاستخدام
|
||||
- مشاركة القواعد عبر المشاريع باستخدام symlinks أو git submodules
|
||||
- إبقاء AGENTS.md موجزًا مع الإشارة إلى إرشادات تفصيلية
|
||||
- ضمان أن opencode يحمّل الملفات فقط عند الحاجة للمهمة المحددة
|
||||
|
||||
:::tip
|
||||
بالنسبة للمستودعات متعددة الحزم (monorepos) أو المشاريع ذات المعايير المشتركة، فإن استخدام `opencode.json` مع أنماط glob (مثل `packages/*/AGENTS.md`) أسهل للصيانة من التعليمات اليدوية.
|
||||
:::
|
||||
391
packages/web/src/content/docs/ar/sdk.mdx
Normal file
391
packages/web/src/content/docs/ar/sdk.mdx
Normal file
@@ -0,0 +1,391 @@
|
||||
---
|
||||
title: مجموعة تطوير البرمجيات (SDK)
|
||||
description: عميل JavaScript آمن الأنواع لخادم opencode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
توفر SDK الخاصة بـ opencode لـ JS/TS عميلا آمنا للأنواع للتفاعل مع الخادم.
|
||||
استخدمها لبناء التكاملات والتحكم في opencode برمجيا.
|
||||
|
||||
[اعرف المزيد](/docs/server) حول كيفية عمل الخادم. للاطلاع على أمثلة، تفقد [المشاريع](/docs/ecosystem#projects) التي أنشأها المجتمع.
|
||||
|
||||
---
|
||||
|
||||
## التثبيت
|
||||
|
||||
ثبّت SDK من npm:
|
||||
|
||||
```bash
|
||||
npm install @opencode-ai/sdk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إنشاء عميل
|
||||
|
||||
أنشئ مثيلا من opencode:
|
||||
|
||||
```javascript
|
||||
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` لديك، لكن يمكنك تجاوز الإعدادات أو إضافة إعدادات مباشرة:
|
||||
|
||||
```javascript
|
||||
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 يعمل بالفعل، يمكنك إنشاء مثيل عميل للاتصال به:
|
||||
|
||||
```javascript
|
||||
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 لجميع أنواع واجهات برمجة التطبيقات. استوردها مباشرة:
|
||||
|
||||
```typescript
|
||||
import type { Session, Message, Part } from "@opencode-ai/sdk"
|
||||
```
|
||||
|
||||
جميع الأنواع مولّدة من مواصفات OpenAPI الخاصة بالخادم ومتاحة في <a href={typesUrl}>ملف الأنواع</a>.
|
||||
|
||||
---
|
||||
|
||||
## الأخطاء
|
||||
|
||||
يمكن أن ترمي SDK أخطاء يمكنك التقاطها ومعالجتها:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await client.session.get({ path: { id: "invalid-id" } })
|
||||
} catch (error) {
|
||||
console.error("Failed to get session:", (error as Error).message)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## واجهات برمجة التطبيقات
|
||||
|
||||
توفر SDK جميع واجهات الخادم عبر عميل آمن للأنواع.
|
||||
|
||||
---
|
||||
|
||||
### عام (`global`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ----------------- | ---------------------------- | ------------------------------------ |
|
||||
| `global.health()` | التحقق من صحة الخادم وإصداره | `{ healthy: true, version: string }` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
const health = await client.global.health()
|
||||
console.log(health.data.version)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### التطبيق (`app`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| -------------- | ------------------------- | ------------------------------------------- |
|
||||
| `app.log()` | كتابة إدخال في السجل | `boolean` |
|
||||
| `app.agents()` | سرد جميع الوكلاء المتاحين | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// 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()` | سرد جميع المشاريع | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `project.current()` | جلب المشروع الحالي | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// List all projects
|
||||
const projects = await client.project.list()
|
||||
|
||||
// Get current project
|
||||
const currentProject = await client.project.current()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المسار (`path`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------ | ----------------- | ---------------------------------------- |
|
||||
| `path.get()` | جلب المسار الحالي | <a href={typesUrl}><code>Path</code></a> |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// Get current path information
|
||||
const pathInfo = await client.path.get()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات (`config`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `config.get()` | جلب معلومات الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `config.providers()` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
const config = await client.config.get()
|
||||
|
||||
const { providers, default: defaults } = await client.config.providers()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الجلسات (`session`)
|
||||
|
||||
| الطريقة | الوصف | ملاحظات |
|
||||
| ---------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `session.list()` | سرد الجلسات | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.get({ path })` | جلب جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.children({ path })` | سرد الجلسات الفرعية | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `session.create({ body })` | إنشاء جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.delete({ path })` | حذف جلسة | يعيد `boolean` |
|
||||
| `session.update({ path, body })` | تحديث خصائص الجلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.init({ path, body })` | تحليل التطبيق وإنشاء `AGENTS.md` | يعيد `boolean` |
|
||||
| `session.abort({ path })` | إيقاف جلسة قيد التشغيل | يعيد `boolean` |
|
||||
| `session.share({ path })` | مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unshare({ path })` | إلغاء مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.summarize({ path, body })` | تلخيص جلسة | يعيد `boolean` |
|
||||
| `session.messages({ path })` | سرد الرسائل في جلسة | يعيد `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}[]` |
|
||||
| `session.message({ path })` | جلب تفاصيل الرسالة | يعيد `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.prompt({ path, body })` | إرسال رسالة مطالبة | `body.noReply: true` يعيد UserMessage (للسياق فقط). الافتراضي يعيد <a href={typesUrl}><code>AssistantMessage</code></a> مع استجابة AI |
|
||||
| `session.command({ path, body })` | إرسال أمر إلى الجلسة | يعيد `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
|
||||
| `session.shell({ path, body })` | تشغيل أمر shell | يعيد <a href={typesUrl}><code>AssistantMessage</code></a> |
|
||||
| `session.revert({ path, body })` | التراجع عن رسالة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `session.unrevert({ path })` | استعادة الرسائل المتراجع عنها | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `postSessionByIdPermissionsByPermissionId({ path, body })` | الاستجابة لطلب إذن | يعيد `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// 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 })` | العثور على رموز مساحة العمل | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `file.read({ query })` | قراءة ملف | `{ type: "raw" \| "patch", content: string }` |
|
||||
| `file.status({ query? })` | جلب حالة الملفات المتتبَّعة | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
يدعم `find.files` بعض حقول الاستعلام الاختيارية:
|
||||
|
||||
- `type`: `"file"` أو `"directory"`
|
||||
- `directory`: تجاوز جذر المشروع لعملية البحث
|
||||
- `limit`: الحد الأقصى للنتائج (1–200)
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// 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 })` | عرض إشعار toast | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// 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` |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
await client.auth.set({
|
||||
path: { id: "anthropic" },
|
||||
body: { type: "api", key: "your-api-key" },
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الأحداث (`event`)
|
||||
|
||||
| الطريقة | الوصف | الاستجابة |
|
||||
| ------------------- | -------------------------- | -------------------------- |
|
||||
| `event.subscribe()` | تدفق أحداث مرسلة من الخادم | تدفق أحداث مرسلة من الخادم |
|
||||
|
||||
---
|
||||
|
||||
#### أمثلة
|
||||
|
||||
```javascript
|
||||
// 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)
|
||||
}
|
||||
```
|
||||
287
packages/web/src/content/docs/ar/server.mdx
Normal file
287
packages/web/src/content/docs/ar/server.mdx
Normal file
@@ -0,0 +1,287 @@
|
||||
---
|
||||
title: الخادم
|
||||
description: تفاعل مع خادم opencode عبر HTTP.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
|
||||
|
||||
يشغّل الأمر `opencode serve` خادما HTTP دون واجهة ويعرض نقطة نهاية OpenAPI يمكن لعميل opencode استخدامها.
|
||||
|
||||
---
|
||||
|
||||
### الاستخدام
|
||||
|
||||
```bash
|
||||
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
|
||||
```
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | الوصف | الافتراضي |
|
||||
| --------------- | ------------------------------------- | ---------------- |
|
||||
| `--port` | المنفذ الذي يستمع عليه | `4096` |
|
||||
| `--hostname` | اسم المضيف الذي يستمع عليه | `127.0.0.1` |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS | `false` |
|
||||
| `--mdns-domain` | اسم نطاق مخصص لخدمة mDNS | `opencode.local` |
|
||||
| `--cors` | أصول (Origins) متصفح إضافية مسموح بها | `[]` |
|
||||
|
||||
يمكن تمرير `--cors` عدة مرات:
|
||||
|
||||
```bash
|
||||
opencode serve --cors http://localhost:5173 --cors https://app.example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المصادقة
|
||||
|
||||
عيّن `OPENCODE_SERVER_PASSWORD` لحماية الخادم باستخدام مصادقة HTTP الأساسية. اسم المستخدم افتراضيا هو `opencode`، أو عيّن `OPENCODE_SERVER_USERNAME` لتغييره. ينطبق ذلك على كل من `opencode serve` و `opencode web`.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### كيف يعمل
|
||||
|
||||
عند تشغيل `opencode` يبدأ تشغيل واجهة طرفية تفاعلية (TUI) وخادما. تكون الـ TUI هي
|
||||
العميل الذي يتحدث إلى الخادم. يوفّر الخادم نقطة نهاية لمواصفة OpenAPI 3.1.
|
||||
وتُستخدم هذه النقطة أيضا لتوليد [SDK](/docs/sdk).
|
||||
|
||||
:::tip
|
||||
استخدم خادم opencode للتفاعل مع opencode برمجيا.
|
||||
:::
|
||||
|
||||
تتيح هذه البنية لـ opencode دعم عدة عملاء وتمكّنك من التفاعل مع opencode برمجيا.
|
||||
|
||||
يمكنك تشغيل `opencode serve` لبدء خادم مستقل. إذا كانت واجهة opencode الطرفية (TUI)
|
||||
قيد التشغيل، فسيبدأ `opencode serve` خادما جديدا.
|
||||
|
||||
---
|
||||
|
||||
#### الاتصال بخادم موجود
|
||||
|
||||
عند بدء الـ TUI تقوم بتعيين منفذ واسم مضيف عشوائيا. يمكنك بدلا من ذلك تمرير [الخيارات](/docs/cli) `--hostname` و `--port`، ثم استخدامهما للاتصال بخادمها.
|
||||
|
||||
يمكن استخدام نقطة النهاية [`/tui`](#tui) للتحكم في الـ TUI عبر الخادم. على سبيل المثال، يمكنك تعبئة الموجّه مسبقا أو تشغيله. يُستخدم هذا الإعداد بواسطة ملحقات OpenCode لـ [IDE](/docs/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` | سرد جميع المشاريع | <a href={typesUrl}><code>Project[]</code></a> |
|
||||
| `GET` | `/project/current` | الحصول على المشروع الحالي | <a href={typesUrl}><code>Project</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### المسار و VCS
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------- | ------------------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/path` | الحصول على المسار الحالي | <a href={typesUrl}><code>Path</code></a> |
|
||||
| `GET` | `/vcs` | الحصول على معلومات VCS للمشروع الحالي | <a href={typesUrl}><code>VcsInfo</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### المثيل
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------- | ----------------------- | --------- |
|
||||
| `POST` | `/instance/dispose` | التخلص من المثيل الحالي | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الإعدادات
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/config` | الحصول على معلومات الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `PATCH` | `/config` | تحديث الإعدادات | <a href={typesUrl}><code>Config</code></a> |
|
||||
| `GET` | `/config/providers` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` |
|
||||
|
||||
---
|
||||
|
||||
### المزوّد
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | -------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- |
|
||||
| `GET` | `/provider` | سرد جميع المزوّدين | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` |
|
||||
| `GET` | `/provider/auth` | الحصول على طرق مصادقة المزوّد | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
|
||||
| `POST` | `/provider/{id}/oauth/authorize` | تفويض مزوّد باستخدام OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
|
||||
| `POST` | `/provider/{id}/oauth/callback` | معالجة رد نداء OAuth لمزوّد | `boolean` |
|
||||
|
||||
---
|
||||
|
||||
### الجلسات
|
||||
|
||||
| الطريقة | المسار | الوصف | الملاحظات |
|
||||
| -------- | ---------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------- |
|
||||
| `GET` | `/session` | سرد جميع الجلسات | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `POST` | `/session` | إنشاء جلسة جديدة | المتن: `{ parentID?, title? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/status` | الحصول على حالة الجلسات جميعها | يعيد `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` |
|
||||
| `GET` | `/session/:id` | الحصول على تفاصيل الجلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id` | حذف جلسة وجميع بياناتها | يعيد `boolean` |
|
||||
| `PATCH` | `/session/:id` | تحديث خصائص الجلسة | المتن: `{ title? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/children` | الحصول على الجلسات الفرعية لجلسة | يعيد <a href={typesUrl}><code>Session[]</code></a> |
|
||||
| `GET` | `/session/:id/todo` | الحصول على قائمة المهام (todo) للجلسة | يعيد <a href={typesUrl}><code>Todo[]</code></a> |
|
||||
| `POST` | `/session/:id/init` | تحليل التطبيق وإنشاء `AGENTS.md` | المتن: `{ messageID, providerID, modelID }`، يعيد `boolean` |
|
||||
| `POST` | `/session/:id/fork` | تفريع جلسة موجودة عند رسالة | المتن: `{ messageID? }`، يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `POST` | `/session/:id/abort` | إلغاء جلسة قيد التشغيل | يعيد `boolean` |
|
||||
| `POST` | `/session/:id/share` | مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `DELETE` | `/session/:id/share` | إلغاء مشاركة جلسة | يعيد <a href={typesUrl}><code>Session</code></a> |
|
||||
| `GET` | `/session/:id/diff` | الحصول على diff لهذه الجلسة | الاستعلام: `messageID?`، يعيد <a href={typesUrl}><code>FileDiff[]</code></a> |
|
||||
| `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: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` |
|
||||
| `POST` | `/session/:id/message` | إرسال رسالة والانتظار للحصول على رد | المتن: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `GET` | `/session/:id/message/:messageID` | الحصول على تفاصيل الرسالة | يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/prompt_async` | إرسال رسالة بشكل غير متزامن (بدون انتظار) | المتن: مثل `/session/:id/message`، يعيد `204 No Content` |
|
||||
| `POST` | `/session/:id/command` | تنفيذ أمر شرطة مائلة (slash) | المتن: `{ messageID?, agent?, model?, command, arguments }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
| `POST` | `/session/:id/shell` | تشغيل أمر في الصدفة (shell) | المتن: `{ agent, model?, command }`، يعيد `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` |
|
||||
|
||||
---
|
||||
|
||||
### الأوامر
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ---------- | ---------------- | --------------------------------------------- |
|
||||
| `GET` | `/command` | سرد جميع الأوامر | <a href={typesUrl}><code>Command[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### الملفات
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `GET` | `/find?pattern=<pat>` | البحث عن نص داخل الملفات | مصفوفة من كائنات المطابقة تحتوي على `path` و`lines` و`line_number` و`absolute_offset` و`submatches` |
|
||||
| `GET` | `/find/file?query=<q>` | العثور على الملفات والمجلدات بالاسم | `string[]` (مسارات) |
|
||||
| `GET` | `/find/symbol?query=<q>` | العثور على رموز مساحة العمل | <a href={typesUrl}><code>Symbol[]</code></a> |
|
||||
| `GET` | `/file?path=<path>` | سرد الملفات والمجلدات | <a href={typesUrl}><code>FileNode[]</code></a> |
|
||||
| `GET` | `/file/content?path=<p>` | قراءة ملف | <a href={typesUrl}><code>FileContent</code></a> |
|
||||
| `GET` | `/file/status` | الحصول على حالة الملفات المتعقّبة | <a href={typesUrl}><code>File[]</code></a> |
|
||||
|
||||
#### معلمات الاستعلام لـ `/find/file`
|
||||
|
||||
- `query` (مطلوب) — سلسلة البحث (مطابقة ضبابية)
|
||||
- `type` (اختياري) — حصر النتائج في `"file"` أو `"directory"`
|
||||
- `directory` (اختياري) — تجاوز جذر المشروع لأجل البحث
|
||||
- `limit` (اختياري) — الحد الأقصى للنتائج (1–200)
|
||||
- `dirs` (اختياري) — خيار قديم (إرجاع `"false"` يعيد الملفات فقط)
|
||||
|
||||
---
|
||||
|
||||
### الأدوات (تجريبية)
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------------------------------------- | --------------------------------- | -------------------------------------------- |
|
||||
| `GET` | `/experimental/tool/ids` | سرد جميع معرّفات الأدوات | <a href={typesUrl}><code>ToolIDs</code></a> |
|
||||
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | سرد الأدوات مع مخططات JSON لنموذج | <a href={typesUrl}><code>ToolList</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### LSP والمنسّقات و MCP
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------------ | ------------------------- | -------------------------------------------------------- |
|
||||
| `GET` | `/lsp` | الحصول على حالة خادم LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
|
||||
| `GET` | `/formatter` | الحصول على حالة المنسّقات | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
|
||||
| `GET` | `/mcp` | الحصول على حالة خادم MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
|
||||
| `POST` | `/mcp` | إضافة خادم MCP ديناميكيا | المتن: `{ name, config }`، يعيد كائن حالة MCP |
|
||||
|
||||
---
|
||||
|
||||
### الوكلاء
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | -------- | ------------------------- | ------------------------------------------- |
|
||||
| `GET` | `/agent` | سرد جميع الوكلاء المتاحين | <a href={typesUrl}><code>Agent[]</code></a> |
|
||||
|
||||
---
|
||||
|
||||
### التسجيل
|
||||
|
||||
| الطريقة | المسار | الوصف | الاستجابة |
|
||||
| ------- | ------ | ------------------------------------------------------------- | --------- |
|
||||
| `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 |
|
||||
127
packages/web/src/content/docs/ar/share.mdx
Normal file
127
packages/web/src/content/docs/ar/share.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: المشاركة
|
||||
description: شارك محادثات OpenCode الخاصة بك.
|
||||
---
|
||||
|
||||
تتيح لك ميزة المشاركة في OpenCode إنشاء روابط عامة لمحادثات OpenCode الخاصة بك، بحيث يمكنك التعاون مع زملائك أو الحصول على المساعدة من الآخرين.
|
||||
|
||||
:::note
|
||||
المحادثات المشتركة متاحة للعامة لأي شخص لديه الرابط.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## كيف تعمل
|
||||
|
||||
عند مشاركة محادثة، يقوم OpenCode بما يلي:
|
||||
|
||||
1. ينشئ عنوان URL عاما فريدا لجلستك
|
||||
2. يزامن سجل محادثتك مع خوادمنا
|
||||
3. يجعل المحادثة متاحة عبر رابط قابل للمشاركة — `opncd.ai/s/<share-id>`
|
||||
|
||||
---
|
||||
|
||||
## المشاركة
|
||||
|
||||
يدعم OpenCode ثلاثة أوضاع للمشاركة تتحكم في كيفية مشاركة المحادثات:
|
||||
|
||||
---
|
||||
|
||||
### يدوي (افتراضي)
|
||||
|
||||
افتراضيا، يستخدم OpenCode وضع المشاركة اليدوي. لا تتم مشاركة الجلسات تلقائيا، لكن يمكنك مشاركتها يدويا باستخدام الأمر `/share`:
|
||||
|
||||
```
|
||||
/share
|
||||
```
|
||||
|
||||
سيُنشئ هذا عنوان URL فريدا وسيُنسخ إلى الحافظة.
|
||||
|
||||
لضبط الوضع اليدوي صراحة في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "manual"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المشاركة التلقائية
|
||||
|
||||
يمكنك تفعيل المشاركة التلقائية لجميع المحادثات الجديدة عبر ضبط خيار `share` إلى `"auto"` في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "auto"
|
||||
}
|
||||
```
|
||||
|
||||
عند تفعيل المشاركة التلقائية، ستتم مشاركة كل محادثة جديدة تلقائيا وسيتم إنشاء رابط لها.
|
||||
|
||||
---
|
||||
|
||||
### معطلة
|
||||
|
||||
يمكنك تعطيل المشاركة بالكامل عبر ضبط خيار `share` إلى `"disabled"` في [ملف الإعدادات](/docs/config):
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opncd.ai/config.json",
|
||||
"share": "disabled"
|
||||
}
|
||||
```
|
||||
|
||||
لفرض ذلك على مستوى فريقك لمشروع معين، أضفه إلى ملف `opencode.json` في مشروعك ثم قم بإدراجه في Git.
|
||||
|
||||
---
|
||||
|
||||
## إلغاء المشاركة
|
||||
|
||||
لإيقاف مشاركة محادثة وإزالتها من الوصول العام:
|
||||
|
||||
```
|
||||
/unshare
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى إزالة رابط المشاركة وحذف البيانات المتعلقة بالمحادثة.
|
||||
|
||||
---
|
||||
|
||||
## الخصوصية
|
||||
|
||||
هناك بعض الأمور التي ينبغي وضعها في الاعتبار عند مشاركة محادثة.
|
||||
|
||||
---
|
||||
|
||||
### الاحتفاظ بالبيانات
|
||||
|
||||
تظل المحادثات المشتركة متاحة حتى تقوم بإلغاء مشاركتها صراحة. يشمل ذلك:
|
||||
|
||||
- سجل المحادثة كاملا
|
||||
- جميع الرسائل والردود
|
||||
- بيانات تعريف الجلسة
|
||||
|
||||
---
|
||||
|
||||
### توصيات
|
||||
|
||||
- شارك فقط المحادثات التي لا تتضمن معلومات حساسة.
|
||||
- راجع محتوى المحادثة قبل مشاركتها.
|
||||
- ألغِ مشاركة المحادثات عند اكتمال التعاون.
|
||||
- تجنب مشاركة المحادثات التي تتضمن شيفرة مملوكة أو بيانات سرية.
|
||||
- للمشاريع الحساسة، عطّل المشاركة بالكامل.
|
||||
|
||||
---
|
||||
|
||||
## للمؤسسات
|
||||
|
||||
في عمليات النشر الخاصة بالمؤسسات، يمكن أن تكون ميزة المشاركة:
|
||||
|
||||
- **معطلة** بالكامل للامتثال الأمني
|
||||
- **مقيدة** على المستخدمين الموثقين عبر SSO فقط
|
||||
- **مستضافة ذاتيا** على بنيتك التحتية الخاصة
|
||||
|
||||
[تعرّف على المزيد](/docs/enterprise) حول استخدام OpenCode في مؤسستك.
|
||||
222
packages/web/src/content/docs/ar/skills.mdx
Normal file
222
packages/web/src/content/docs/ar/skills.mdx
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
title: "مهارات الوكيل"
|
||||
description: "عرّف سلوكاً قابلاً لإعادة الاستخدام عبر تعريفات SKILL.md"
|
||||
---
|
||||
|
||||
تتيح مهارات الوكيل لـ OpenCode اكتشاف تعليمات قابلة لإعادة الاستخدام من مستودعك أو من دليل المنزل.
|
||||
تُحمَّل المهارات عند الطلب عبر أداة `skill` المدمجة — يرى الوكلاء المهارات المتاحة ويمكنهم تحميل المحتوى الكامل عند الحاجة.
|
||||
|
||||
---
|
||||
|
||||
## وضع الملفات
|
||||
|
||||
أنشئ مجلداً واحداً لكل اسم مهارة وضع بداخله ملف `SKILL.md`.
|
||||
يبحث OpenCode في هذه المواقع:
|
||||
|
||||
- إعدادات المشروع: `.opencode/skills/<name>/SKILL.md`
|
||||
- إعدادات عامة: `~/.config/opencode/skills/<name>/SKILL.md`
|
||||
- مشروع متوافق مع Claude: `.claude/skills/<name>/SKILL.md`
|
||||
- عام متوافق مع Claude: `~/.claude/skills/<name>/SKILL.md`
|
||||
- مشروع متوافق مع الوكلاء: `.agents/skills/<name>/SKILL.md`
|
||||
- عام متوافق مع الوكلاء: `~/.agents/skills/<name>/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## فهم الاكتشاف
|
||||
|
||||
بالنسبة لمسارات المشروع المحلية، يتدرج OpenCode صعوداً من دليل العمل الحالي حتى يصل إلى `git worktree`.
|
||||
ويحمّل أي ملفات مطابقة لـ `skills/*/SKILL.md` داخل `.opencode/` وأي ملفات مطابقة لـ `.claude/skills/*/SKILL.md` أو `.agents/skills/*/SKILL.md` على طول الطريق.
|
||||
|
||||
كما تُحمَّل التعريفات العامة أيضاً من `~/.config/opencode/skills/*/SKILL.md` و `~/.claude/skills/*/SKILL.md` و `~/.agents/skills/*/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## كتابة بيانات `frontmatter`
|
||||
|
||||
يجب أن يبدأ كل ملف `SKILL.md` بـ `frontmatter` بتنسيق YAML.
|
||||
لا يتم التعرف إلا على الحقول التالية:
|
||||
|
||||
- `name` (مطلوب)
|
||||
- `description` (مطلوب)
|
||||
- `license` (اختياري)
|
||||
- `compatibility` (اختياري)
|
||||
- `metadata` (اختياري، خريطة من سلسلة إلى سلسلة)
|
||||
|
||||
يتم تجاهل أي حقول `frontmatter` غير معروفة.
|
||||
|
||||
---
|
||||
|
||||
## التحقق من الأسماء
|
||||
|
||||
يجب أن يكون `name`:
|
||||
|
||||
- بطول 1–64 حرفاً
|
||||
- أحرفاً وأرقاماً بحروف صغيرة مع فواصل شرطة مفردة
|
||||
- لا يبدأ ولا ينتهي بـ `-`
|
||||
- لا يحتوي على `--` متتالية
|
||||
- يطابق اسم الدليل الذي يحتوي على `SKILL.md`
|
||||
|
||||
التعبير النمطي المكافئ:
|
||||
|
||||
```text
|
||||
^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## اتباع قواعد الطول
|
||||
|
||||
يجب أن يكون `description` بطول 1-1024 حرفاً.
|
||||
اجعله محدداً بما يكفي كي يختار الوكيل بشكل صحيح.
|
||||
|
||||
---
|
||||
|
||||
## استخدم مثالاً
|
||||
|
||||
أنشئ `.opencode/skills/git-release/SKILL.md` بهذا الشكل:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: git-release
|
||||
description: Create consistent releases and changelogs
|
||||
license: MIT
|
||||
compatibility: opencode
|
||||
metadata:
|
||||
audience: maintainers
|
||||
workflow: github
|
||||
---
|
||||
|
||||
## What I do
|
||||
|
||||
- Draft release notes from merged PRs
|
||||
- Propose a version bump
|
||||
- Provide a copy-pasteable `gh release create` command
|
||||
|
||||
## When to use me
|
||||
|
||||
Use this when you are preparing a tagged release.
|
||||
Ask clarifying questions if the target versioning scheme is unclear.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## التعرّف على وصف الأداة
|
||||
|
||||
يعرض OpenCode المهارات المتاحة في وصف أداة `skill`.
|
||||
يتضمن كل إدخال اسم المهارة ووصفها:
|
||||
|
||||
```xml
|
||||
<available_skills>
|
||||
<skill>
|
||||
<name>git-release</name>
|
||||
<description>Create consistent releases and changelogs</description>
|
||||
</skill>
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
يقوم الوكيل بتحميل مهارة عبر استدعاء الأداة:
|
||||
|
||||
```
|
||||
skill({ name: "git-release" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تهيئة الصلاحيات
|
||||
|
||||
تحكم في المهارات التي يمكن للوكلاء الوصول إليها باستخدام صلاحيات مبنية على أنماط داخل `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"permission": {
|
||||
"skill": {
|
||||
"*": "allow",
|
||||
"pr-review": "allow",
|
||||
"internal-*": "deny",
|
||||
"experimental-*": "ask"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| الصلاحية | السلوك |
|
||||
| -------- | -------------------------------------- |
|
||||
| `allow` | تُحمَّل المهارة فوراً |
|
||||
| `deny` | تُخفى المهارة عن الوكيل ويُرفض الوصول |
|
||||
| `ask` | يُطلب من المستخدم الموافقة قبل التحميل |
|
||||
|
||||
تدعم الأنماط أحرف البدل: يطابق `internal-*` كلاً من `internal-docs` و `internal-tools` وغير ذلك.
|
||||
|
||||
---
|
||||
|
||||
## تجاوز الإعدادات لكل وكيل
|
||||
|
||||
امنح وكلاء محددين صلاحيات مختلفة عن الإعدادات الافتراضية العامة.
|
||||
|
||||
**للوكلاء المخصصين** (في `frontmatter` الخاص بالوكيل):
|
||||
|
||||
```yaml
|
||||
---
|
||||
permission:
|
||||
skill:
|
||||
"documents-*": "allow"
|
||||
---
|
||||
```
|
||||
|
||||
**للوكلاء المدمجين** (في `opencode.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"permission": {
|
||||
"skill": {
|
||||
"internal-*": "allow"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تعطيل أداة skill
|
||||
|
||||
عطّل المهارات بالكامل للوكلاء الذين لا ينبغي أن يستخدموها:
|
||||
|
||||
**للوكلاء المخصصين**:
|
||||
|
||||
```yaml
|
||||
---
|
||||
tools:
|
||||
skill: false
|
||||
---
|
||||
```
|
||||
|
||||
**للوكلاء المدمجين**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agent": {
|
||||
"plan": {
|
||||
"tools": {
|
||||
"skill": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
عند تعطيلها، يتم حذف قسم `<available_skills>` بالكامل.
|
||||
|
||||
---
|
||||
|
||||
## استكشاف أخطاء التحميل
|
||||
|
||||
إذا لم تظهر مهارة:
|
||||
|
||||
1. تحقّق من أن `SKILL.md` مكتوب بأحرف كبيرة بالكامل
|
||||
2. تحقّق من أن `frontmatter` تتضمن `name` و `description`
|
||||
3. تأكد من أن أسماء المهارات فريدة عبر جميع المواقع
|
||||
4. تحقّق من الصلاحيات — المهارات ذات `deny` تكون مخفية عن الوكلاء
|
||||
369
packages/web/src/content/docs/ar/themes.mdx
Normal file
369
packages/web/src/content/docs/ar/themes.mdx
Normal file
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: السمات
|
||||
description: اختر سمة مدمجة أو عرّف سمة خاصة بك.
|
||||
---
|
||||
|
||||
مع OpenCode يمكنك الاختيار من بين عدة سمات مدمجة، أو استخدام سمة تتكيّف مع سمة طرفيتك، أو تعريف سمة مخصصة خاصة بك.
|
||||
|
||||
افتراضيًا، يستخدم OpenCode سمتنا `opencode`.
|
||||
|
||||
---
|
||||
|
||||
## متطلبات الطرفية
|
||||
|
||||
لكي تُعرض السمات بشكل صحيح مع لوحة ألوانها الكاملة، يجب أن تدعم طرفيتك **truecolor** (ألوان 24-بت). تدعم معظم الطرفيات الحديثة ذلك افتراضيًا، لكن قد تحتاج إلى تفعيله:
|
||||
|
||||
- **التحقق من الدعم**: شغّل `echo $COLORTERM` - يجب أن يطبع `truecolor` أو `24bit`
|
||||
- **تفعيل truecolor**: اضبط متغير البيئة `COLORTERM=truecolor` في ملف إعدادات الصدفة
|
||||
- **توافق الطرفية**: تأكد من أن محاكي الطرفية يدعم ألوان 24-بت (معظم الطرفيات الحديثة مثل iTerm2 وAlacritty وKitty وWindows Terminal والإصدارات الحديثة من GNOME Terminal تدعم ذلك)
|
||||
|
||||
بدون دعم truecolor، قد تظهر السمات بدقة ألوان أقل أو تعود إلى أقرب تقريب ضمن 256 لونًا.
|
||||
|
||||
---
|
||||
|
||||
## السمات المدمجة
|
||||
|
||||
يأتي OpenCode مع عدة سمات مدمجة.
|
||||
|
||||
| الاسم | الوصف |
|
||||
| ---------------------- | --------------------------------------------------------------------------- |
|
||||
| `system` | يتكيّف مع لون خلفية طرفيتك |
|
||||
| `tokyonight` | مبني على سمة [Tokyonight](https://github.com/folke/tokyonight.nvim) |
|
||||
| `everforest` | مبني على سمة [Everforest](https://github.com/sainnhe/everforest) |
|
||||
| `ayu` | مبني على السمة الداكنة [Ayu](https://github.com/ayu-theme) |
|
||||
| `catppuccin` | مبني على سمة [Catppuccin](https://github.com/catppuccin) |
|
||||
| `catppuccin-macchiato` | مبني على سمة [Catppuccin](https://github.com/catppuccin) |
|
||||
| `gruvbox` | مبني على سمة [Gruvbox](https://github.com/morhetz/gruvbox) |
|
||||
| `kanagawa` | مبني على سمة [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
|
||||
| `nord` | مبني على سمة [Nord](https://github.com/nordtheme/nord) |
|
||||
| `matrix` | سمة خضراء على أسود بأسلوب الهاكر |
|
||||
| `one-dark` | مبني على السمة الداكنة [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
|
||||
|
||||
وغير ذلك؛ نضيف سمات جديدة باستمرار.
|
||||
|
||||
---
|
||||
|
||||
## سمة النظام
|
||||
|
||||
صُممت سمة `system` لتتكيّف تلقائيًا مع مخطط ألوان طرفيتك. وعلى عكس السمات التقليدية التي تستخدم ألوانًا ثابتة، فإن سمة _system_:
|
||||
|
||||
- **توليد تدرج رمادي**: تنشئ تدرجًا رماديًا مخصصًا اعتمادًا على لون خلفية طرفيتك، بما يضمن أفضل تباين.
|
||||
- **استخدام ألوان ANSI**: تستفيد من ألوان ANSI القياسية (0-15) لإبراز الصياغة وعناصر الواجهة، والتي تحترم لوحة ألوان طرفيتك.
|
||||
- **الحفاظ على افتراضيات الطرفية**: تستخدم `none` لألوان النص والخلفية للحفاظ على مظهر طرفيتك الأصلي.
|
||||
|
||||
سمة النظام مناسبة للمستخدمين الذين:
|
||||
|
||||
- يريدون أن يطابق OpenCode مظهر طرفيتهم
|
||||
- يستخدمون مخططات ألوان مخصصة للطرفية
|
||||
- يفضلون مظهرًا متسقًا عبر جميع تطبيقات الطرفية
|
||||
|
||||
---
|
||||
|
||||
## استخدام سمة
|
||||
|
||||
يمكنك اختيار سمة بفتح منتقي السمات باستخدام الأمر `/theme`. أو يمكنك تحديدها في [الضبط](/docs/config).
|
||||
|
||||
```json title="opencode.json" {3}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"theme": "tokyonight"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## سمات مخصصة
|
||||
|
||||
يدعم OpenCode نظام سمات مرنًا قائمًا على JSON يتيح للمستخدمين إنشاء السمات وتخصيصها بسهولة.
|
||||
|
||||
---
|
||||
|
||||
### التسلسل الهرمي
|
||||
|
||||
تُحمَّل السمات من عدة مجلدات بالترتيب التالي، حيث تتجاوز المجلدات اللاحقة المجلدات السابقة:
|
||||
|
||||
1. **السمات المدمجة** - تكون مضمنة داخل الملف التنفيذي
|
||||
2. **مجلد ضبط المستخدم** - معرّف في `~/.config/opencode/themes/*.json` أو `$XDG_CONFIG_HOME/opencode/themes/*.json`
|
||||
3. **مجلد جذر المشروع** - معرّف في `<project-root>/.opencode/themes/*.json`
|
||||
4. **مجلد العمل الحالي** - معرّف في `./.opencode/themes/*.json`
|
||||
|
||||
إذا احتوت عدة مجلدات على سمة بالاسم نفسه، فستُستخدم السمة من المجلد ذي الأولوية الأعلى.
|
||||
|
||||
---
|
||||
|
||||
### إنشاء سمة
|
||||
|
||||
لإنشاء سمة مخصصة، أنشئ ملف JSON في أحد مجلدات السمات.
|
||||
|
||||
للسمات على مستوى المستخدم:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p ~/.config/opencode/themes
|
||||
vim ~/.config/opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
وللسمات الخاصة بالمشروع:
|
||||
|
||||
```bash no-frame
|
||||
mkdir -p .opencode/themes
|
||||
vim .opencode/themes/my-theme.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### تنسيق JSON
|
||||
|
||||
تستخدم السمات تنسيق JSON مرنًا مع دعم لـ:
|
||||
|
||||
- **ألوان سداسية عشرية**: `"#ffffff"`
|
||||
- **ألوان ANSI**: `3` (0-255)
|
||||
- **مراجع الألوان**: `"primary"` أو تعريفات مخصصة
|
||||
- **متغيرات داكن/فاتح**: `{"dark": "#000", "light": "#fff"}`
|
||||
- **بدون لون**: `"none"` - يستخدم اللون الافتراضي للطرفية أو يكون شفافًا
|
||||
|
||||
---
|
||||
|
||||
### تعريفات الألوان
|
||||
|
||||
قسم `defs` اختياري، ويتيح لك تعريف ألوان قابلة لإعادة الاستخدام يمكن الإشارة إليها داخل السمة.
|
||||
|
||||
---
|
||||
|
||||
### افتراضيات الطرفية
|
||||
|
||||
يمكن استخدام القيمة الخاصة `"none"` لأي لون لوراثة اللون الافتراضي للطرفية. هذا مفيد خصوصًا لإنشاء سمات تمتزج بسلاسة مع مخطط ألوان طرفيتك:
|
||||
|
||||
- `"text": "none"` - يستخدم لون المقدمة الافتراضي للطرفية
|
||||
- `"background": "none"` - يستخدم لون الخلفية الافتراضي للطرفية
|
||||
|
||||
---
|
||||
|
||||
### مثال
|
||||
|
||||
إليك مثالًا على سمة مخصصة:
|
||||
|
||||
```json title="my-theme.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/theme.json",
|
||||
"defs": {
|
||||
"nord0": "#2E3440",
|
||||
"nord1": "#3B4252",
|
||||
"nord2": "#434C5E",
|
||||
"nord3": "#4C566A",
|
||||
"nord4": "#D8DEE9",
|
||||
"nord5": "#E5E9F0",
|
||||
"nord6": "#ECEFF4",
|
||||
"nord7": "#8FBCBB",
|
||||
"nord8": "#88C0D0",
|
||||
"nord9": "#81A1C1",
|
||||
"nord10": "#5E81AC",
|
||||
"nord11": "#BF616A",
|
||||
"nord12": "#D08770",
|
||||
"nord13": "#EBCB8B",
|
||||
"nord14": "#A3BE8C",
|
||||
"nord15": "#B48EAD"
|
||||
},
|
||||
"theme": {
|
||||
"primary": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"secondary": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"accent": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"error": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"warning": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"success": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"info": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"text": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"textMuted": {
|
||||
"dark": "nord3",
|
||||
"light": "nord1"
|
||||
},
|
||||
"background": {
|
||||
"dark": "nord0",
|
||||
"light": "nord6"
|
||||
},
|
||||
"backgroundPanel": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"backgroundElement": {
|
||||
"dark": "nord1",
|
||||
"light": "nord4"
|
||||
},
|
||||
"border": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"borderActive": {
|
||||
"dark": "nord3",
|
||||
"light": "nord2"
|
||||
},
|
||||
"borderSubtle": {
|
||||
"dark": "nord2",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffContext": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHunkHeader": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"diffHighlightAdded": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"diffHighlightRemoved": {
|
||||
"dark": "nord11",
|
||||
"light": "nord11"
|
||||
},
|
||||
"diffAddedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffContextBg": {
|
||||
"dark": "nord1",
|
||||
"light": "nord5"
|
||||
},
|
||||
"diffLineNumber": {
|
||||
"dark": "nord2",
|
||||
"light": "nord4"
|
||||
},
|
||||
"diffAddedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"diffRemovedLineNumberBg": {
|
||||
"dark": "#3B4252",
|
||||
"light": "#E5E9F0"
|
||||
},
|
||||
"markdownText": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"markdownHeading": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownLink": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownLinkText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCode": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"markdownBlockQuote": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownEmph": {
|
||||
"dark": "nord12",
|
||||
"light": "nord12"
|
||||
},
|
||||
"markdownStrong": {
|
||||
"dark": "nord13",
|
||||
"light": "nord13"
|
||||
},
|
||||
"markdownHorizontalRule": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"markdownListItem": {
|
||||
"dark": "nord8",
|
||||
"light": "nord10"
|
||||
},
|
||||
"markdownListEnumeration": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownImage": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"markdownImageText": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"markdownCodeBlock": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
},
|
||||
"syntaxComment": {
|
||||
"dark": "nord3",
|
||||
"light": "nord3"
|
||||
},
|
||||
"syntaxKeyword": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxFunction": {
|
||||
"dark": "nord8",
|
||||
"light": "nord8"
|
||||
},
|
||||
"syntaxVariable": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxString": {
|
||||
"dark": "nord14",
|
||||
"light": "nord14"
|
||||
},
|
||||
"syntaxNumber": {
|
||||
"dark": "nord15",
|
||||
"light": "nord15"
|
||||
},
|
||||
"syntaxType": {
|
||||
"dark": "nord7",
|
||||
"light": "nord7"
|
||||
},
|
||||
"syntaxOperator": {
|
||||
"dark": "nord9",
|
||||
"light": "nord9"
|
||||
},
|
||||
"syntaxPunctuation": {
|
||||
"dark": "nord4",
|
||||
"light": "nord0"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
379
packages/web/src/content/docs/ar/tools.mdx
Normal file
379
packages/web/src/content/docs/ar/tools.mdx
Normal file
@@ -0,0 +1,379 @@
|
||||
---
|
||||
title: الأدوات
|
||||
description: إدارة الأدوات التي يمكن لـ LLM استخدامها.
|
||||
---
|
||||
|
||||
تتيح الأدوات لـ LLM تنفيذ إجراءات داخل قاعدة الشفرة الخاصة بك. يأتي OpenCode مع مجموعة من الأدوات المدمجة، لكن يمكنك توسيعه عبر [أدوات مخصصة](/docs/custom-tools) أو [خوادم MCP](/docs/mcp-servers).
|
||||
|
||||
افتراضيا، تكون جميع الأدوات **مفعلة** ولا تحتاج إلى إذن للتشغيل. يمكنك التحكم في سلوك الأدوات عبر [الأذونات](/docs/permissions).
|
||||
|
||||
---
|
||||
|
||||
## التهيئة
|
||||
|
||||
استخدم الحقل `permission` للتحكم في سلوك الأدوات. يمكنك السماح أو الرفض أو طلب الموافقة لكل أداة.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "deny",
|
||||
"bash": "ask",
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
يمكنك أيضا استخدام أحرف البدل للتحكم في عدة أدوات دفعة واحدة. على سبيل المثال، لطلب الموافقة على جميع الأدوات القادمة من خادم MCP:
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"mymcp_*": "ask"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[اعرف المزيد](/docs/permissions) حول تهيئة الأذونات.
|
||||
|
||||
---
|
||||
|
||||
## المدمجة
|
||||
|
||||
فيما يلي جميع الأدوات المدمجة المتاحة في OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### bash
|
||||
|
||||
نفذ أوامر الصدفة (Shell) في بيئة مشروعك.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM تشغيل أوامر الطرفية مثل `npm install` و`git status` أو أي أمر صدفة آخر.
|
||||
|
||||
---
|
||||
|
||||
### edit
|
||||
|
||||
عدّل الملفات الموجودة باستخدام استبدال نصي مطابق تماما.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تجري هذه الأداة تعديلات دقيقة على الملفات عبر استبدال مقاطع نصية متطابقة. وهي الطريقة الأساسية التي يعدّل بها LLM الشفرة.
|
||||
|
||||
---
|
||||
|
||||
### write
|
||||
|
||||
أنشئ ملفات جديدة أو اكتب فوق الملفات الموجودة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
استخدم هذا للسماح لـ LLM بإنشاء ملفات جديدة. سيكتب فوق الملفات الموجودة إذا كانت موجودة بالفعل.
|
||||
|
||||
:::note
|
||||
تُدار أداة `write` عبر إذن `edit`، والذي يشمل جميع تعديلات الملفات (`edit` و`write` و`patch` و`multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### read
|
||||
|
||||
اقرأ محتويات الملفات من قاعدة الشفرة الخاصة بك.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"read": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تقرأ هذه الأداة الملفات وتعيد محتوياتها. وتدعم قراءة نطاقات محددة من الأسطر للملفات الكبيرة.
|
||||
|
||||
---
|
||||
|
||||
### grep
|
||||
|
||||
ابحث في محتوى الملفات باستخدام التعابير النمطية (Regex).
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"grep": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
بحث سريع في المحتوى عبر قاعدة الشفرة الخاصة بك. يدعم صياغة Regex الكاملة وتصفية الملفات عبر أنماط المسارات.
|
||||
|
||||
---
|
||||
|
||||
### glob
|
||||
|
||||
اعثر على الملفات عبر مطابقة الأنماط.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"glob": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ابحث عن الملفات باستخدام أنماط glob مثل `**/*.js` أو `src/**/*.ts`. يعيد مسارات الملفات المطابقة مرتبة حسب وقت التعديل.
|
||||
|
||||
---
|
||||
|
||||
### list
|
||||
|
||||
اعرض قائمة بالملفات والمجلدات في مسار محدد.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"list": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تعرض هذه الأداة محتويات المجلد. وتقبل أنماط glob لتصفية النتائج.
|
||||
|
||||
---
|
||||
|
||||
### lsp (experimental)
|
||||
|
||||
تفاعل مع خوادم LSP التي قمت بتهيئتها للحصول على ميزات ذكاء الشفرة مثل التعاريف والمراجع ومعلومات التحويم وتسلسل الاستدعاءات.
|
||||
|
||||
:::note
|
||||
هذه الأداة متاحة فقط عند ضبط `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (أو `OPENCODE_EXPERIMENTAL=true`).
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"lsp": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتضمن العمليات المدعومة: `goToDefinition` و`findReferences` و`hover` و`documentSymbol` و`workspaceSymbol` و`goToImplementation` و`prepareCallHierarchy` و`incomingCalls` و`outgoingCalls`.
|
||||
|
||||
لتهيئة خوادم LSP المتاحة لمشروعك، راجع [خوادم LSP](/docs/lsp).
|
||||
|
||||
---
|
||||
|
||||
### patch
|
||||
|
||||
طبّق الرقع (Patches) على الملفات.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"edit": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تطبق هذه الأداة ملفات الرقع على قاعدة الشفرة الخاصة بك. وهي مفيدة لتطبيق الفروقات (Diffs) والرقع من مصادر متعددة.
|
||||
|
||||
:::note
|
||||
تُدار أداة `patch` عبر إذن `edit`، والذي يشمل جميع تعديلات الملفات (`edit` و`write` و`patch` و`multiedit`).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### skill
|
||||
|
||||
حمّل [مهارة](/docs/skills) (ملف `SKILL.md`) وأعد محتواها ضمن المحادثة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"skill": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### todowrite
|
||||
|
||||
أدِر قوائم المهام أثناء جلسات البرمجة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todowrite": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تنشئ هذه الأداة قوائم المهام وتحدّثها لتتبع التقدم أثناء العمليات المعقدة. يستخدمها LLM لتنظيم المهام متعددة الخطوات.
|
||||
|
||||
:::note
|
||||
هذه الأداة معطلة للوكلاء الفرعيين افتراضيا، لكن يمكنك تفعيلها يدويا. [اعرف المزيد](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### todoread
|
||||
|
||||
اقرأ قوائم المهام الموجودة.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"todoread": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تقرأ هذه الأداة الحالة الحالية لقائمة المهام. يستخدمها LLM لتتبع المهام المعلقة أو المكتملة.
|
||||
|
||||
:::note
|
||||
هذه الأداة معطلة للوكلاء الفرعيين افتراضيا، لكن يمكنك تفعيلها يدويا. [اعرف المزيد](/docs/agents/#permissions)
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### webfetch
|
||||
|
||||
اجلب محتوى الويب.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"webfetch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM جلب صفحات الويب وقراءتها. وهي مفيدة للبحث عن التوثيق أو لاستكشاف موارد عبر الإنترنت.
|
||||
|
||||
---
|
||||
|
||||
### websearch
|
||||
|
||||
ابحث في الويب عن معلومات.
|
||||
|
||||
:::note
|
||||
هذه الأداة متاحة فقط عند استخدام مزود OpenCode أو عند ضبط متغير البيئة `OPENCODE_ENABLE_EXA` على أي قيمة منطقية صحيحة (مثل `true` أو `1`).
|
||||
|
||||
للتفعيل عند تشغيل OpenCode:
|
||||
|
||||
```bash
|
||||
OPENCODE_ENABLE_EXA=1 opencode
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"websearch": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تجري عمليات بحث على الويب باستخدام Exa AI للعثور على معلومات ذات صلة عبر الإنترنت. وهي مفيدة للبحث في المواضيع، والعثور على أحداث جارية، أو جمع معلومات تتجاوز حد بيانات التدريب.
|
||||
|
||||
لا يلزم مفتاح API - إذ تتصل الأداة مباشرة بخدمة MCP المستضافة لدى Exa AI دون مصادقة.
|
||||
|
||||
:::tip
|
||||
استخدم `websearch` عندما تحتاج إلى العثور على معلومات (Discovery)، واستخدم `webfetch` عندما تحتاج إلى جلب محتوى من رابط محدد (Retrieval).
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### question
|
||||
|
||||
اطرح على المستخدم أسئلة أثناء التنفيذ.
|
||||
|
||||
```json title="opencode.json" {4}
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"permission": {
|
||||
"question": "allow"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تتيح هذه الأداة لـ LLM طرح أسئلة على المستخدم أثناء المهمة. وهي مفيدة من أجل:
|
||||
|
||||
- جمع تفضيلات المستخدم أو متطلباته
|
||||
- توضيح التعليمات غير الواضحة
|
||||
- الحصول على قرارات حول خيارات التنفيذ
|
||||
- تقديم خيارات حول الاتجاه الذي يجب اتباعه
|
||||
|
||||
يتضمن كل سؤال عنوانا ونص السؤال وقائمة بالخيارات. يمكن للمستخدمين الاختيار من الخيارات المتاحة أو كتابة إجابة مخصصة. وعند وجود عدة أسئلة، يمكن للمستخدمين التنقل بينها قبل إرسال جميع الإجابات.
|
||||
|
||||
---
|
||||
|
||||
## أدوات مخصصة
|
||||
|
||||
تتيح لك الأدوات المخصصة تعريف دوالك الخاصة التي يمكن لـ LLM استدعاؤها. تُعرّف هذه الأدوات في ملف التهيئة ويمكنها تنفيذ شفرة عشوائية.
|
||||
|
||||
[اعرف المزيد](/docs/custom-tools) حول إنشاء أدوات مخصصة.
|
||||
|
||||
---
|
||||
|
||||
## خوادم MCP
|
||||
|
||||
تتيح لك خوادم MCP (Model Context Protocol) دمج أدوات وخدمات خارجية. يشمل ذلك الوصول إلى قواعد البيانات وتكاملات API وخدمات الجهات الخارجية.
|
||||
|
||||
[اعرف المزيد](/docs/mcp-servers) حول تهيئة خوادم MCP.
|
||||
|
||||
---
|
||||
|
||||
## التفاصيل الداخلية
|
||||
|
||||
داخليا، تستخدم أدوات مثل `grep` و`glob` و`list` أداة [ripgrep](https://github.com/BurntSushi/ripgrep) في الخلفية. افتراضيا، يحترم ripgrep أنماط `.gitignore`، ما يعني أن الملفات والمجلدات المدرجة في `.gitignore` ستُستبعد من عمليات البحث وعرض القوائم.
|
||||
|
||||
---
|
||||
|
||||
### Ignore patterns
|
||||
|
||||
لتضمين ملفات يتم تجاهلها عادة، أنشئ ملف `.ignore` في جذر المشروع. يمكن لهذا الملف السماح صراحة بمسارات محددة.
|
||||
|
||||
```text title=".ignore"
|
||||
!node_modules/
|
||||
!dist/
|
||||
!build/
|
||||
```
|
||||
|
||||
على سبيل المثال، يسمح ملف `.ignore` هذا لـ ripgrep بالبحث داخل مجلدات `node_modules/` و`dist/` و`build/` حتى لو كانت مدرجة في `.gitignore`.
|
||||
299
packages/web/src/content/docs/ar/troubleshooting.mdx
Normal file
299
packages/web/src/content/docs/ar/troubleshooting.mdx
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
title: استكشاف الأخطاء وإصلاحها
|
||||
description: المشكلات الشائعة وكيفية حلها.
|
||||
---
|
||||
|
||||
لاستكشاف المشكلات في OpenCode وإصلاحها، ابدأ بالتحقق من السجلات والبيانات المحلية التي يخزنها على القرص.
|
||||
|
||||
---
|
||||
|
||||
## السجلات
|
||||
|
||||
يتم حفظ ملفات السجل في:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/log/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.local\share\opencode\log`
|
||||
|
||||
تتم تسمية ملفات السجل بطوابع زمنية (مثل `2025-01-09T123456.log`) ويتم الاحتفاظ بأحدث 10 ملفات سجل.
|
||||
|
||||
يمكنك ضبط مستوى السجل باستخدام خيار سطر الأوامر `--log-level` للحصول على معلومات تصحيح أكثر تفصيلا. على سبيل المثال: `opencode --log-level DEBUG`.
|
||||
|
||||
---
|
||||
|
||||
## التخزين
|
||||
|
||||
يخزن opencode بيانات الجلسات وبيانات التطبيق الأخرى على القرص في:
|
||||
|
||||
- **macOS/Linux**: `~/.local/share/opencode/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
يحتوي هذا الدليل على:
|
||||
|
||||
- `auth.json` - بيانات المصادقة مثل مفاتيح API ورموز OAuth
|
||||
- `log/` - سجلات التطبيق
|
||||
- `project/` - بيانات خاصة بالمشروع مثل بيانات الجلسة والرسائل
|
||||
- إذا كان المشروع داخل مستودع Git، فسيتم تخزينه في `./<project-slug>/storage/`
|
||||
- إذا لم يكن داخل مستودع Git، فسيتم تخزينه في `./global/storage/`
|
||||
|
||||
---
|
||||
|
||||
## تطبيق سطح المكتب
|
||||
|
||||
يشغل OpenCode Desktop خادما محليا لـ OpenCode (العملية الجانبية `opencode-cli`) في الخلفية. معظم المشكلات سببها إضافة لا تعمل بشكل صحيح، أو ذاكرة تخزين مؤقت تالفة، أو إعداد خادم غير صحيح.
|
||||
|
||||
### فحوصات سريعة
|
||||
|
||||
- أغلق التطبيق تماما ثم أعد تشغيله.
|
||||
- إذا عرض التطبيق شاشة خطأ، انقر **Restart** وانسخ تفاصيل الخطأ.
|
||||
- على macOS فقط: قائمة `OpenCode` -> **Reload Webview** (يفيد إذا كانت الواجهة فارغة/متجمدة).
|
||||
|
||||
---
|
||||
|
||||
### تعطيل الإضافات
|
||||
|
||||
إذا كان تطبيق سطح المكتب يتعطل عند التشغيل، أو يتوقف عن الاستجابة، أو يتصرف بشكل غريب، فابدأ بتعطيل الإضافات.
|
||||
|
||||
#### تحقق من الإعدادات العامة
|
||||
|
||||
افتح ملف الإعدادات العام وابحث عن المفتاح `plugin`.
|
||||
|
||||
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (أو `~/.config/opencode/opencode.json`)
|
||||
- **macOS/Linux** (عمليات تثبيت أقدم): `~/.local/share/opencode/opencode.jsonc`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.config\opencode\opencode.jsonc`
|
||||
|
||||
إذا كانت لديك إضافات مضبوطة، فقم بتعطيلها مؤقتا بإزالة المفتاح أو ضبطه على مصفوفة فارغة:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": [],
|
||||
}
|
||||
```
|
||||
|
||||
#### تحقق من أدلة الإضافات
|
||||
|
||||
يمكن لـ OpenCode أيضا تحميل إضافات محلية من القرص. انقلها مؤقتا إلى مكان آخر (أو أعد تسمية المجلد) ثم أعد تشغيل تطبيق سطح المكتب:
|
||||
|
||||
- **إضافات عامة**
|
||||
- **macOS/Linux**: `~/.config/opencode/plugins/`
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.config\opencode\plugins`
|
||||
- **إضافات المشروع** (فقط إذا كنت تستخدم إعدادات لكل مشروع)
|
||||
- `<your-project>/.opencode/plugins/`
|
||||
|
||||
إذا عاد التطبيق للعمل، فأعد تفعيل الإضافات واحدة تلو الأخرى لمعرفة أيها يسبب المشكلة.
|
||||
|
||||
---
|
||||
|
||||
### مسح ذاكرة التخزين المؤقت
|
||||
|
||||
إذا لم يساعد تعطيل الإضافات (أو كانت عملية تثبيت إضافة عالقة)، فامسح ذاكرة التخزين المؤقت حتى يتمكن OpenCode من إعادة بنائها.
|
||||
|
||||
1. أغلق OpenCode Desktop تماما.
|
||||
2. احذف دليل ذاكرة التخزين المؤقت:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> الصق `~/.cache/opencode`
|
||||
- **Linux**: احذف `~/.cache/opencode` (أو شغّل `rm -rf ~/.cache/opencode`)
|
||||
- **Windows**: اضغط `WIN+R` والصق `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
3. أعد تشغيل OpenCode Desktop.
|
||||
|
||||
---
|
||||
|
||||
### إصلاح مشكلات اتصال الخادم
|
||||
|
||||
يمكن لـ OpenCode Desktop إما تشغيل خادمه المحلي (افتراضيا) أو الاتصال بعنوان URL لخادم قمت بتهيئته.
|
||||
|
||||
إذا ظهرت نافذة **"Connection Failed"** (أو لم يتجاوز التطبيق شاشة البداية)، فتحقق مما إذا كان هناك عنوان URL مخصص للخادم.
|
||||
|
||||
#### مسح عنوان URL الافتراضي لخادم سطح المكتب
|
||||
|
||||
من شاشة Home، انقر اسم الخادم (مع نقطة الحالة) لفتح محدد الخوادم. في قسم **Default server**، انقر **Clear**.
|
||||
|
||||
#### إزالة `server.port` / `server.hostname` من الإعدادات
|
||||
|
||||
إذا كان `opencode.json(c)` يحتوي على قسم `server`، فأزله مؤقتا ثم أعد تشغيل تطبيق سطح المكتب.
|
||||
|
||||
#### تحقق من متغيرات البيئة
|
||||
|
||||
إذا كان `OPENCODE_PORT` مضبوطا في بيئتك، فسيحاول تطبيق سطح المكتب استخدام ذلك المنفذ للخادم المحلي.
|
||||
|
||||
- أزل ضبط `OPENCODE_PORT` (أو اختر منفذا متاحا) ثم أعد التشغيل.
|
||||
|
||||
---
|
||||
|
||||
### Linux: مشكلات Wayland / X11
|
||||
|
||||
على Linux، قد تتسبب بعض إعدادات Wayland في نوافذ فارغة أو أخطاء في مدير التركيب (compositor).
|
||||
|
||||
- إذا كنت تستخدم Wayland وكانت نافذة التطبيق فارغة/يتعطل، فجرّب التشغيل مع `OC_ALLOW_WAYLAND=1`.
|
||||
- إذا جعل ذلك الأمور أسوأ، فأزل هذا المتغير وجرّب التشغيل ضمن جلسة X11 بدلا من ذلك.
|
||||
|
||||
---
|
||||
|
||||
### Windows: بيئة تشغيل WebView2
|
||||
|
||||
على Windows، يتطلب OpenCode Desktop وجود **WebView2 Runtime** الخاصة بـ Microsoft Edge. إذا فتح التطبيق نافذة فارغة أو لم يبدأ، فقم بتثبيت/تحديث WebView2 ثم جرّب مجددا.
|
||||
|
||||
---
|
||||
|
||||
### Windows: مشكلات الأداء العامة
|
||||
|
||||
إذا كنت تواجه بطءا في الأداء، أو مشكلات في الوصول إلى الملفات، أو مشكلات في الطرفية على Windows، فجرّب استخدام [WSL (نظام Windows الفرعي لـ Linux)](/docs/windows-wsl). يوفر WSL بيئة Linux تعمل بسلاسة أكبر مع ميزات OpenCode.
|
||||
|
||||
---
|
||||
|
||||
### الإشعارات لا تظهر
|
||||
|
||||
لا يعرض OpenCode Desktop إشعارات النظام إلا عندما:
|
||||
|
||||
- تكون الإشعارات مفعلة لـ OpenCode في إعدادات نظام التشغيل، و
|
||||
- تكون نافذة التطبيق غير نشطة.
|
||||
|
||||
---
|
||||
|
||||
### إعادة تعيين تخزين تطبيق سطح المكتب (كحل أخير)
|
||||
|
||||
إذا لم يبدأ التطبيق ولم تتمكن من مسح الإعدادات من داخل الواجهة، فأعد تعيين الحالة المحفوظة لتطبيق سطح المكتب.
|
||||
|
||||
1. أغلق OpenCode Desktop.
|
||||
2. اعثر على هذه الملفات واحذفها (توجد في دليل بيانات تطبيق OpenCode Desktop):
|
||||
|
||||
- `opencode.settings.dat` (عنوان URL الافتراضي لخادم سطح المكتب)
|
||||
- `opencode.global.dat` و `opencode.workspace.*.dat` (حالة الواجهة مثل الخوادم/المشاريع الأخيرة)
|
||||
|
||||
للعثور على الدليل بسرعة:
|
||||
|
||||
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (ثم ابحث عن أسماء الملفات أعلاه)
|
||||
- **Linux**: ابحث ضمن `~/.local/share` عن أسماء الملفات أعلاه
|
||||
- **Windows**: اضغط `WIN+R` -> `%APPDATA%` (ثم ابحث عن أسماء الملفات أعلاه)
|
||||
|
||||
---
|
||||
|
||||
## الحصول على المساعدة
|
||||
|
||||
إذا كنت تواجه مشكلات مع OpenCode:
|
||||
|
||||
1. **الإبلاغ عن المشكلات على GitHub**
|
||||
|
||||
أفضل طريقة للإبلاغ عن الأخطاء أو طلب الميزات هي عبر مستودعنا على GitHub:
|
||||
|
||||
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
|
||||
|
||||
قبل إنشاء مشكلة جديدة، ابحث في المشكلات الموجودة لمعرفة ما إذا كانت مشكلتك قد تم الإبلاغ عنها بالفعل.
|
||||
|
||||
2. **انضم إلى Discord**
|
||||
|
||||
للحصول على مساعدة فورية ونقاشات المجتمع، انضم إلى خادم Discord الخاص بنا:
|
||||
|
||||
[**opencode.ai/discord**](https://opencode.ai/discord)
|
||||
|
||||
---
|
||||
|
||||
## مشكلات شائعة
|
||||
|
||||
فيما يلي بعض المشكلات الشائعة وكيفية حلها.
|
||||
|
||||
---
|
||||
|
||||
### OpenCode لا يبدأ
|
||||
|
||||
1. تحقق من السجلات بحثا عن رسائل الخطأ
|
||||
2. جرّب التشغيل مع `--print-logs` لرؤية المخرجات في الطرفية
|
||||
3. تأكد من أنك تستخدم أحدث إصدار عبر `opencode upgrade`
|
||||
|
||||
---
|
||||
|
||||
### مشكلات المصادقة
|
||||
|
||||
1. جرّب إعادة المصادقة باستخدام الأمر `/connect` في واجهة TUI
|
||||
2. تحقق من أن مفاتيح API الخاصة بك صالحة
|
||||
3. تأكد من أن شبكتك تسمح بالاتصال بواجهة API الخاصة بالمزوّد
|
||||
|
||||
---
|
||||
|
||||
### النموذج غير متاح
|
||||
|
||||
1. تحقق من أنك قمت بالمصادقة مع المزوّد
|
||||
2. تأكد من أن اسم النموذج في الإعدادات صحيح
|
||||
3. قد تتطلب بعض النماذج صلاحيات وصول محددة أو اشتراكات
|
||||
|
||||
إذا واجهت `ProviderModelNotFoundError` فمن المرجح أنك تشير إلى نموذج بشكل غير صحيح في مكان ما.
|
||||
يجب الإشارة إلى النماذج بهذه الصيغة: `<providerId>/<modelId>`
|
||||
|
||||
أمثلة:
|
||||
|
||||
- `openai/gpt-4.1`
|
||||
- `openrouter/google/gemini-2.5-flash`
|
||||
- `opencode/kimi-k2`
|
||||
|
||||
لمعرفة النماذج التي لديك صلاحية الوصول إليها، شغّل `opencode models`
|
||||
|
||||
---
|
||||
|
||||
### ProviderInitError
|
||||
|
||||
إذا واجهت ProviderInitError، فمن المحتمل أن إعداداتك غير صالحة أو تالفة.
|
||||
|
||||
لحل ذلك:
|
||||
|
||||
1. أولا، تحقق من أن المزوّد مضبوط بشكل صحيح باتباع [دليل المزوّدين](/docs/providers)
|
||||
2. إذا استمرت المشكلة، فجرّب مسح الإعدادات المخزنة لديك:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/share/opencode
|
||||
```
|
||||
|
||||
على Windows، اضغط `WIN+R` واحذف: `%USERPROFILE%\.local\share\opencode`
|
||||
|
||||
3. أعد المصادقة مع المزوّد باستخدام الأمر `/connect` في واجهة TUI.
|
||||
|
||||
---
|
||||
|
||||
### AI_APICallError ومشكلات حزم المزوّد
|
||||
|
||||
إذا واجهت أخطاء في استدعاءات API، فقد يكون السبب حزم مزوّد قديمة. يقوم opencode بتثبيت حزم المزوّد (OpenAI و Anthropic و Google وغير ذلك) ديناميكيا عند الحاجة ويقوم بتخزينها مؤقتا محليا.
|
||||
|
||||
لحل مشكلات حزم المزوّد:
|
||||
|
||||
1. امسح ذاكرة التخزين المؤقت لحزم المزوّد:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.cache/opencode
|
||||
```
|
||||
|
||||
على Windows، اضغط `WIN+R` واحذف: `%USERPROFILE%\.cache\opencode`
|
||||
|
||||
2. أعد تشغيل opencode لإعادة تثبيت أحدث حزم المزوّد
|
||||
|
||||
سيجبر ذلك opencode على تنزيل أحدث إصدارات حزم المزوّد، وهو ما يحل غالبا مشكلات التوافق مع معاملات النماذج وتغييرات API.
|
||||
|
||||
---
|
||||
|
||||
### النسخ/اللصق لا يعمل على Linux
|
||||
|
||||
يحتاج مستخدمو Linux إلى تثبيت إحدى أدوات الحافظة التالية حتى تعمل ميزة النسخ/اللصق:
|
||||
|
||||
**لأنظمة X11:**
|
||||
|
||||
```bash
|
||||
apt install -y xclip
|
||||
# or
|
||||
apt install -y xsel
|
||||
```
|
||||
|
||||
**لأنظمة Wayland:**
|
||||
|
||||
```bash
|
||||
apt install -y wl-clipboard
|
||||
```
|
||||
|
||||
**للبيئات بدون واجهة رسومية (Headless):**
|
||||
|
||||
```bash
|
||||
apt install -y xvfb
|
||||
# and run:
|
||||
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99.0
|
||||
```
|
||||
|
||||
سيكتشف opencode ما إذا كنت تستخدم Wayland ويفضل `wl-clipboard`، وإلا فسيحاول العثور على أدوات الحافظة بالترتيب التالي: `xclip` ثم `xsel`.
|
||||
386
packages/web/src/content/docs/ar/tui.mdx
Normal file
386
packages/web/src/content/docs/ar/tui.mdx
Normal file
@@ -0,0 +1,386 @@
|
||||
---
|
||||
title: TUI
|
||||
description: استخدام واجهة المستخدم الطرفية (TUI) في OpenCode.
|
||||
---
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components"
|
||||
|
||||
يوفّر OpenCode واجهة طرفية تفاعلية (TUI) للعمل على مشاريعك باستخدام نموذج لغوي كبير.
|
||||
|
||||
يؤدي تشغيل OpenCode إلى بدء واجهة TUI للدليل الحالي.
|
||||
|
||||
```bash
|
||||
opencode
|
||||
```
|
||||
|
||||
أو يمكنك تشغيلها لدليل عمل محدد.
|
||||
|
||||
```bash
|
||||
opencode /path/to/project
|
||||
```
|
||||
|
||||
بعد الدخول إلى واجهة TUI، يمكنك إرسال رسالة كطلب.
|
||||
|
||||
```text
|
||||
Give me a quick summary of the codebase.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مراجع الملفات
|
||||
|
||||
يمكنك الإشارة إلى الملفات في رسائلك باستخدام `@`. يُجري ذلك بحثا ضبابيا عن الملفات ضمن دليل العمل الحالي.
|
||||
|
||||
:::tip
|
||||
يمكنك أيضا استخدام `@` للإشارة إلى الملفات في رسائلك.
|
||||
:::
|
||||
|
||||
```text "@packages/functions/src/api/index.ts"
|
||||
How is auth handled in @packages/functions/src/api/index.ts?
|
||||
```
|
||||
|
||||
تُضاف محتويات الملف إلى المحادثة تلقائيا.
|
||||
|
||||
---
|
||||
|
||||
## أوامر Bash
|
||||
|
||||
ابدأ الرسالة بـ `!` لتشغيل أمر في الصدفة.
|
||||
|
||||
```bash frame="none"
|
||||
!ls -la
|
||||
```
|
||||
|
||||
يُضاف خرج الأمر إلى المحادثة كنتيجة أداة.
|
||||
|
||||
---
|
||||
|
||||
## الأوامر
|
||||
|
||||
عند استخدام واجهة OpenCode الطرفية، يمكنك كتابة `/` متبوعة باسم أمر لتنفيذ الإجراءات بسرعة. مثلا:
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
تملك معظم الأوامر أيضا اختصارا باستخدام `ctrl+x` كمفتاح قائد، حيث إن `ctrl+x` هو المفتاح القائد الافتراضي. [اعرف المزيد](/docs/keybinds).
|
||||
|
||||
فيما يلي جميع أوامر الشرطة المائلة المتاحة:
|
||||
|
||||
---
|
||||
|
||||
### connect
|
||||
|
||||
أضف موفّرا إلى OpenCode. يتيح لك اختيار أحد الموفّرين المتاحين وإضافة مفاتيح API الخاصة بهم.
|
||||
|
||||
```bash frame="none"
|
||||
/connect
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### compact
|
||||
|
||||
قم بضغط الجلسة الحالية. _الاسم المستعار_: `/summarize`
|
||||
|
||||
```bash frame="none"
|
||||
/compact
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x c`
|
||||
|
||||
---
|
||||
|
||||
### details
|
||||
|
||||
بدّل عرض تفاصيل تنفيذ الأدوات.
|
||||
|
||||
```bash frame="none"
|
||||
/details
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x d`
|
||||
|
||||
---
|
||||
|
||||
### editor
|
||||
|
||||
افتح محررا خارجيا لكتابة الرسائل. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/editor
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x e`
|
||||
|
||||
---
|
||||
|
||||
### exit
|
||||
|
||||
اخرج من OpenCode. _الأسماء المستعارة_: `/quit`, `/q`
|
||||
|
||||
```bash frame="none"
|
||||
/exit
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x q`
|
||||
|
||||
---
|
||||
|
||||
### export
|
||||
|
||||
صدّر المحادثة الحالية إلى Markdown وافتحها في المحرر الافتراضي لديك. يستخدم المحرر المحدد في متغير البيئة `EDITOR`. [اعرف المزيد](#editor-setup).
|
||||
|
||||
```bash frame="none"
|
||||
/export
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x x`
|
||||
|
||||
---
|
||||
|
||||
### help
|
||||
|
||||
اعرض مربع حوار المساعدة.
|
||||
|
||||
```bash frame="none"
|
||||
/help
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x h`
|
||||
|
||||
---
|
||||
|
||||
### init
|
||||
|
||||
أنشئ ملف `AGENTS.md` أو حدّثه. [اعرف المزيد](/docs/rules).
|
||||
|
||||
```bash frame="none"
|
||||
/init
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x i`
|
||||
|
||||
---
|
||||
|
||||
### models
|
||||
|
||||
اعرض النماذج المتاحة.
|
||||
|
||||
```bash frame="none"
|
||||
/models
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x m`
|
||||
|
||||
---
|
||||
|
||||
### new
|
||||
|
||||
ابدأ جلسة جديدة. _الاسم المستعار_: `/clear`
|
||||
|
||||
```bash frame="none"
|
||||
/new
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x n`
|
||||
|
||||
---
|
||||
|
||||
### redo
|
||||
|
||||
أعِد تنفيذ رسالة تم التراجع عنها سابقا. متاح فقط بعد استخدام `/undo`.
|
||||
|
||||
:::tip
|
||||
ستتم أيضا استعادة أي تغييرات على الملفات.
|
||||
:::
|
||||
|
||||
داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/redo
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x r`
|
||||
|
||||
---
|
||||
|
||||
### sessions
|
||||
|
||||
اعرض الجلسات وبدّل بينها. _الأسماء المستعارة_: `/resume`, `/continue`
|
||||
|
||||
```bash frame="none"
|
||||
/sessions
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x l`
|
||||
|
||||
---
|
||||
|
||||
### share
|
||||
|
||||
شارك الجلسة الحالية. [اعرف المزيد](/docs/share).
|
||||
|
||||
```bash frame="none"
|
||||
/share
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x s`
|
||||
|
||||
---
|
||||
|
||||
### themes
|
||||
|
||||
اعرض السمات المتاحة.
|
||||
|
||||
```bash frame="none"
|
||||
/theme
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x t`
|
||||
|
||||
---
|
||||
|
||||
### thinking
|
||||
|
||||
بدّل إظهار كتل التفكير/الاستدلال في المحادثة. عند تفعيله، يمكنك رؤية عملية استدلال النموذج للنماذج التي تدعم التفكير الموسّع.
|
||||
|
||||
:::note
|
||||
يتحكم هذا الأمر فقط فيما إذا كانت كتل التفكير **تُعرض**؛ ولا يفعّل أو يعطّل قدرات الاستدلال في النموذج. لتبديل قدرات الاستدلال فعليا، استخدم `ctrl+t` للتنقّل بين إصدارات النموذج.
|
||||
:::
|
||||
|
||||
```bash frame="none"
|
||||
/thinking
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### undo
|
||||
|
||||
تراجع عن آخر رسالة في المحادثة. يزيل أحدث رسالة للمستخدم، وكل الردود اللاحقة، وأي تغييرات على الملفات.
|
||||
|
||||
:::tip
|
||||
سيتم أيضا التراجع عن أي تغييرات على الملفات.
|
||||
:::
|
||||
|
||||
داخليا، يستخدم هذا Git لإدارة تغييرات الملفات. لذلك يجب أن يكون مشروعك **مستودع Git**.
|
||||
|
||||
```bash frame="none"
|
||||
/undo
|
||||
```
|
||||
|
||||
**اختصار لوحة المفاتيح:** `ctrl+x u`
|
||||
|
||||
---
|
||||
|
||||
### unshare
|
||||
|
||||
ألغِ مشاركة الجلسة الحالية. [اعرف المزيد](/docs/share#un-sharing).
|
||||
|
||||
```bash frame="none"
|
||||
/unshare
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## إعداد المحرر
|
||||
يستخدم الأمران `/editor` و`/export` المحرر المحدد في متغير البيئة `EDITOR`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="لينكس/macOS">
|
||||
```bash
|
||||
# Example for nano or vim
|
||||
export EDITOR=nano
|
||||
export EDITOR=vim
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
export EDITOR="code --wait"
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، أضف هذا إلى ملف تهيئة الصدفة لديك؛
|
||||
`~/.bashrc`، `~/.zshrc`، إلخ.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="ويندوز (CMD)">
|
||||
```bash
|
||||
set EDITOR=notepad
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
set EDITOR=code --wait
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، استخدم **System Properties** > **Environment Variables**.
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem label="ويندوز (PowerShell)">
|
||||
```powershell
|
||||
$env:EDITOR = "notepad"
|
||||
|
||||
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
|
||||
# include --wait
|
||||
$env:EDITOR = "code --wait"
|
||||
```
|
||||
|
||||
لجعل ذلك دائما، أضف هذا إلى ملف تهيئة PowerShell لديك.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
تتضمن خيارات المحررات الشائعة ما يلي:
|
||||
|
||||
- `code` - Visual Studio Code
|
||||
- `cursor` - Cursor
|
||||
- `windsurf` - Windsurf
|
||||
- `nvim` - محرر Neovim
|
||||
- `vim` - محرر Vim
|
||||
- `nano` - محرر Nano
|
||||
- `notepad` - Windows Notepad
|
||||
- `subl` - Sublime Text
|
||||
|
||||
:::note
|
||||
تحتاج بعض المحررات مثل VS Code إلى التشغيل مع الخيار `--wait`.
|
||||
:::
|
||||
|
||||
تحتاج بعض المحررات إلى وسائط سطر الأوامر لتعمل بوضع الحجب. يجعل الخيار `--wait` عملية المحرر تنتظر حتى يتم إغلاقها.
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
يمكنك تخصيص سلوك واجهة TUI عبر ملف إعدادات OpenCode.
|
||||
|
||||
```json title="opencode.json"
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"tui": {
|
||||
"scroll_speed": 3,
|
||||
"scroll_acceleration": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### الخيارات
|
||||
|
||||
- `scroll_acceleration` - فعّل تسارع التمرير على نمط macOS لتمرير سلس وطبيعي. عند تفعيله، تزداد سرعة التمرير مع إيماءات التمرير السريعة وتبقى دقيقة للحركات الأبطأ. **يتقدّم هذا الإعداد على `scroll_speed` ويستبدله عند تفعيله.**
|
||||
- `scroll_speed` - يتحكم في سرعة تمرير واجهة TUI عند استخدام أوامر التمرير (الحد الأدنى: `1`). القيمة الافتراضية هي `3`. **ملاحظة: يتم تجاهل هذا إذا تم ضبط `scroll_acceleration.enabled` على `true`.**
|
||||
|
||||
---
|
||||
|
||||
## التخصيص
|
||||
|
||||
يمكنك تخصيص جوانب مختلفة من عرض واجهة TUI باستخدام لوحة الأوامر (`ctrl+x h` أو `/help`). تبقى هذه الإعدادات محفوظة عبر عمليات إعادة التشغيل.
|
||||
|
||||
---
|
||||
|
||||
#### عرض اسم المستخدم
|
||||
|
||||
بدّل ما إذا كان اسم المستخدم يظهر في رسائل الدردشة. يمكنك الوصول إلى هذا عبر:
|
||||
|
||||
- لوحة الأوامر: ابحث عن "username" أو "hide username"
|
||||
- يُحفظ الإعداد تلقائيا وسيتم تذكره عبر جلسات واجهة TUI
|
||||
142
packages/web/src/content/docs/ar/web.mdx
Normal file
142
packages/web/src/content/docs/ar/web.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: الويب
|
||||
description: استخدام OpenCode في متصفحك.
|
||||
---
|
||||
|
||||
يمكن تشغيل OpenCode كتطبيق ويب داخل متصفحك، ليمنحك تجربة البرمجة القوية بالذكاء الاصطناعي نفسها دون الحاجة إلى الطرفية.
|
||||
|
||||

|
||||
|
||||
## البدء
|
||||
|
||||
ابدأ تشغيل واجهة الويب عبر تنفيذ:
|
||||
|
||||
```bash
|
||||
opencode web
|
||||
```
|
||||
|
||||
يؤدي ذلك إلى تشغيل خادم محلي على `127.0.0.1` بمنفذ عشوائي متاح، ويفتح OpenCode تلقائيا في المتصفح الافتراضي لديك.
|
||||
|
||||
:::caution
|
||||
إذا لم يتم تعيين `OPENCODE_SERVER_PASSWORD` فسيكون الخادم دون حماية. هذا مناسب للاستخدام المحلي، لكنه يجب أن يكون مُعينا عند إتاحة الوصول عبر الشبكة.
|
||||
:::
|
||||
|
||||
:::tip[مستخدمو Windows]
|
||||
لأفضل تجربة، شغّل `opencode web` من [WSL](/docs/windows-wsl) بدلا من PowerShell. يضمن ذلك وصولا صحيحا إلى نظام الملفات وتكاملا أفضل مع الطرفية.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## الإعدادات
|
||||
|
||||
يمكنك ضبط خادم الويب باستخدام خيارات سطر الأوامر أو عبر [ملف الإعدادات](/docs/config).
|
||||
|
||||
### المنفذ
|
||||
|
||||
افتراضيا، يختار OpenCode منفذا متاحا. يمكنك تحديد منفذ:
|
||||
|
||||
```bash
|
||||
opencode web --port 4096
|
||||
```
|
||||
|
||||
### اسم المضيف
|
||||
|
||||
افتراضيا، يرتبط الخادم بـ `127.0.0.1` (للاستخدام المحلي فقط). لجعل OpenCode متاحا على شبكتك:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
عند استخدام `0.0.0.0` سيعرض OpenCode كلا من عناوين الوصول المحلي وعناوين الشبكة:
|
||||
|
||||
```
|
||||
Local access: http://localhost:4096
|
||||
Network access: http://192.168.1.100:4096
|
||||
```
|
||||
|
||||
### اكتشاف mDNS
|
||||
|
||||
فعّل mDNS لجعل خادمك قابلا للاكتشاف على الشبكة المحلية:
|
||||
|
||||
```bash
|
||||
opencode web --mdns
|
||||
```
|
||||
|
||||
يضبط ذلك تلقائيا اسم المضيف إلى `0.0.0.0` ويعلن عن الخادم باسم `opencode.local`.
|
||||
|
||||
يمكنك تخصيص اسم نطاق mDNS لتشغيل عدة نسخ على الشبكة نفسها:
|
||||
|
||||
```bash
|
||||
opencode web --mdns --mdns-domain myproject.local
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
للسماح بنطاقات إضافية عبر CORS (مفيد للواجهات الأمامية المخصصة):
|
||||
|
||||
```bash
|
||||
opencode web --cors https://example.com
|
||||
```
|
||||
|
||||
### المصادقة
|
||||
|
||||
لحماية الوصول، عيّن كلمة مرور عبر متغير البيئة `OPENCODE_SERVER_PASSWORD`:
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=secret opencode web
|
||||
```
|
||||
|
||||
اسم المستخدم الافتراضي هو `opencode`، ويمكن تغييره عبر `OPENCODE_SERVER_USERNAME`.
|
||||
|
||||
---
|
||||
|
||||
## استخدام واجهة الويب
|
||||
|
||||
بعد التشغيل، تتيح لك واجهة الويب الوصول إلى جلسات OpenCode الخاصة بك.
|
||||
|
||||
### الجلسات
|
||||
|
||||
اعرض جلساتك وأدرها من الصفحة الرئيسية. يمكنك رؤية الجلسات النشطة وبدء جلسات جديدة.
|
||||
|
||||

|
||||
|
||||
### حالة الخادم
|
||||
|
||||
انقر على "See Servers" لعرض الخوادم المتصلة وحالتها.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## إرفاق طرفية
|
||||
|
||||
يمكنك إرفاق واجهة طرفية (TUI) بخادم ويب قيد التشغيل:
|
||||
|
||||
```bash
|
||||
# Start the web server
|
||||
opencode web --port 4096
|
||||
|
||||
# In another terminal, attach the TUI
|
||||
opencode attach http://localhost:4096
|
||||
```
|
||||
|
||||
يتيح لك ذلك استخدام واجهة الويب والطرفية في الوقت نفسه، مع مشاركة الجلسات والحالة نفسها.
|
||||
|
||||
---
|
||||
|
||||
## ملف الإعدادات
|
||||
|
||||
يمكنك أيضا ضبط إعدادات الخادم داخل ملف الإعدادات `opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server": {
|
||||
"port": 4096,
|
||||
"hostname": "0.0.0.0",
|
||||
"mdns": true,
|
||||
"cors": ["https://example.com"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
تكون خيارات سطر الأوامر ذات أولوية أعلى من إعدادات ملف الإعدادات.
|
||||
113
packages/web/src/content/docs/ar/windows-wsl.mdx
Normal file
113
packages/web/src/content/docs/ar/windows-wsl.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Windows (WSL)
|
||||
description: شغّل OpenCode على Windows باستخدام WSL لأفضل تجربة.
|
||||
---
|
||||
|
||||
import { Steps } from "@astrojs/starlight/components"
|
||||
|
||||
رغم أن OpenCode يمكن تشغيله مباشرة على Windows، نوصي باستخدام [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) للحصول على أفضل تجربة. يوفر WSL بيئة Linux تعمل بسلاسة مع ميزات OpenCode.
|
||||
|
||||
:::tip[لماذا WSL؟]
|
||||
يوفر WSL أداء أفضل لنظام الملفات، ودعمًا كاملًا للطرفية، وتوافقًا مع أدوات التطوير التي يعتمد عليها OpenCode.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## الإعداد
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **ثبّت WSL**
|
||||
|
||||
إذا لم تقم بذلك بعد، [ثبّت WSL](https://learn.microsoft.com/en-us/windows/wsl/install) باستخدام دليل Microsoft الرسمي.
|
||||
|
||||
2. **ثبّت OpenCode داخل WSL**
|
||||
|
||||
بعد إعداد WSL، افتح طرفية WSL وثبّت OpenCode باستخدام إحدى [طرق التثبيت](/docs/).
|
||||
|
||||
```bash
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
```
|
||||
|
||||
3. **استخدم OpenCode من WSL**
|
||||
|
||||
انتقل إلى مجلد مشروعك (يمكنك الوصول لملفات Windows عبر `/mnt/c/` و`/mnt/d/` وغيرها) ثم شغّل OpenCode.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/project
|
||||
opencode
|
||||
```
|
||||
|
||||
</Steps>
|
||||
|
||||
---
|
||||
|
||||
## تطبيق سطح المكتب + خادم WSL
|
||||
|
||||
إذا كنت تفضّل تطبيق OpenCode لسطح المكتب لكن تريد تشغيل الخادم داخل WSL:
|
||||
|
||||
1. **ابدأ الخادم داخل WSL** مع `--hostname 0.0.0.0` للسماح بالاتصالات الخارجية:
|
||||
|
||||
```bash
|
||||
opencode serve --hostname 0.0.0.0 --port 4096
|
||||
```
|
||||
|
||||
2. **اربط تطبيق سطح المكتب** على `http://localhost:4096`
|
||||
|
||||
:::note
|
||||
إذا لم يعمل `localhost` في إعدادك، اتصل باستخدام عنوان IP الخاص بـ WSL بدلًا منه (من داخل WSL: `hostname -I`) واستخدم `http://<wsl-ip>:4096`.
|
||||
:::
|
||||
|
||||
:::caution
|
||||
عند استخدام `--hostname 0.0.0.0`، اضبط `OPENCODE_SERVER_PASSWORD` لحماية الخادم.
|
||||
|
||||
```bash
|
||||
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## عميل الويب + WSL
|
||||
|
||||
لأفضل تجربة ويب على Windows:
|
||||
|
||||
1. **شغّل `opencode web` من طرفية WSL** بدلًا من PowerShell:
|
||||
|
||||
```bash
|
||||
opencode web --hostname 0.0.0.0
|
||||
```
|
||||
|
||||
2. **افتحه من متصفح Windows** عبر `http://localhost:<port>` (يعرض OpenCode الرابط)
|
||||
|
||||
تشغيل `opencode web` من WSL يضمن وصولًا صحيحًا لنظام الملفات وتكاملًا أفضل مع الطرفية، مع بقائه متاحًا من متصفح Windows.
|
||||
|
||||
---
|
||||
|
||||
## الوصول إلى ملفات Windows
|
||||
|
||||
يمكن لـ WSL الوصول إلى جميع ملفات Windows عبر مجلد `/mnt/`:
|
||||
|
||||
- قرص `C:` → `/mnt/c/`
|
||||
- قرص `D:` → `/mnt/d/`
|
||||
- وهكذا...
|
||||
|
||||
مثال:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/YourName/Documents/project
|
||||
opencode
|
||||
```
|
||||
|
||||
:::tip
|
||||
لأفضل سلاسة، يمكنك استنساخ/نسخ المستودع إلى نظام ملفات WSL (مثل `~/code/`) وتشغيل OpenCode من هناك.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## نصائح
|
||||
|
||||
- شغّل OpenCode داخل WSL للمشاريع المخزنة على أقراص Windows حتى يكون الوصول للملفات سلسًا
|
||||
- استخدم [إضافة WSL في VS Code](https://code.visualstudio.com/docs/remote/wsl) مع OpenCode لسير عمل تطوير متكامل
|
||||
- إعدادات OpenCode وجلساته تُخزَّن داخل بيئة WSL في `~/.local/share/opencode/`
|
||||
243
packages/web/src/content/docs/ar/zen.mdx
Normal file
243
packages/web/src/content/docs/ar/zen.mdx
Normal file
@@ -0,0 +1,243 @@
|
||||
---
|
||||
title: Zen
|
||||
description: قائمة منتقاة من النماذج يوفّرها OpenCode.
|
||||
---
|
||||
|
||||
import config from "../../../../config.mjs"
|
||||
export const console = config.console
|
||||
export const email = `mailto:${config.email}`
|
||||
|
||||
OpenCode Zen هي قائمة بالنماذج التي اختبرها فريق OpenCode وتحقّق منها.
|
||||
|
||||
:::note
|
||||
OpenCode Zen متاح حاليا بنسخة تجريبية.
|
||||
:::
|
||||
|
||||
يعمل Zen مثل أي مزوّد آخر في OpenCode. تسجّل الدخول إلى OpenCode Zen وتحصل على
|
||||
مفتاح API. استخدامه **اختياري بالكامل** ولا تحتاج إليه لاستخدام OpenCode.
|
||||
|
||||
---
|
||||
|
||||
## الخلفية
|
||||
|
||||
توجد نماذج كثيرة جدا، لكن عددا قليلا فقط منها يعمل بشكل جيد كعوامل للبرمجة.
|
||||
بالإضافة إلى ذلك، فإن معظم المزوّدين يختلفون كثيرا في طريقة الإعداد؛ لذلك قد
|
||||
تحصل على أداء وجودة مختلفين بشكل كبير.
|
||||
|
||||
:::tip
|
||||
اختبرنا مجموعة منتقاة من النماذج والمزوّدين الذين يعملون جيدا مع OpenCode.
|
||||
:::
|
||||
|
||||
لذلك إذا كنت تستخدم نموذجا عبر خدمة مثل OpenRouter، فلن تكون واثقا أبدا من أنك
|
||||
تحصل على أفضل نسخة من النموذج الذي تريده.
|
||||
|
||||
لمعالجة ذلك، قمنا بعدة أمور:
|
||||
|
||||
1. اختبرنا مجموعة منتقاة من النماذج وتحدثنا مع فرقها حول افضل طريقة لتشغيلها.
|
||||
2. ثم عملنا مع عدد من المزوّدين للتأكد من تقديمها بشكل صحيح.
|
||||
3. أخيرا، قمنا بقياس أداء توليفة النموذج/المزوّد وخرجنا بقائمة نوصي بها بثقة.
|
||||
|
||||
OpenCode Zen هو بوابة للذكاء الاصطناعي تتيح لك الوصول إلى هذه النماذج.
|
||||
|
||||
---
|
||||
|
||||
## كيف يعمل
|
||||
|
||||
يعمل OpenCode Zen مثل أي مزوّد آخر في OpenCode.
|
||||
|
||||
1. تسجّل الدخول إلى **<a href={console}>OpenCode Zen</a>**، وتضيف تفاصيل الفوترة، ثم تنسخ مفتاح API.
|
||||
2. تشغّل الأمر `/connect` في واجهة TUI، وتختار OpenCode Zen، ثم تلصق مفتاح API.
|
||||
3. شغّل `/models` في واجهة TUI لعرض قائمة النماذج التي نوصي بها.
|
||||
|
||||
يتم احتساب الرسوم لكل طلب، ويمكنك إضافة رصيد إلى حسابك.
|
||||
|
||||
---
|
||||
|
||||
## نقاط النهاية
|
||||
|
||||
يمكنك أيضا الوصول إلى نماذجنا عبر نقاط نهاية API التالية.
|
||||
|
||||
| النموذج | معرّف النموذج | نقطة النهاية | حزمة AI SDK |
|
||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex | gpt-5.1-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Max | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5.1 Codex Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Codex | gpt-5-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| GPT 5 Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||
| Claude Sonnet 4.5 | claude-sonnet-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Sonnet 4 | claude-sonnet-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| Gemini 3 Pro | gemini-3-pro | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` |
|
||||
| Gemini 3 Flash | gemini-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
|
||||
| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| MiniMax M2.1 Free | minimax-m2.1-free | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
|
||||
| GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 4.7 Free | glm-4.7-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2.5 Free | kimi-k2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2 Thinking | kimi-k2-thinking | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Kimi K2 | kimi-k2 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Qwen3 Coder 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||
|
||||
يستخدم [معرّف النموذج](/docs/config/#models) في إعدادات OpenCode الصيغة `opencode/<model-id>`.
|
||||
على سبيل المثال، بالنسبة إلى GPT 5.2 Codex ستستخدم `opencode/gpt-5.2-codex` في إعداداتك.
|
||||
|
||||
---
|
||||
|
||||
### النماذج
|
||||
|
||||
يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من:
|
||||
|
||||
```
|
||||
https://opencode.ai/zen/v1/models
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## التسعير
|
||||
|
||||
ندعم نموذج الدفع حسب الاستخدام. فيما يلي الأسعار **لكل 1M tokens**.
|
||||
|
||||
| النموذج | الإدخال | الإخراج | قراءة مخزنة | كتابة مخزنة |
|
||||
| --------------------------------- | ------- | ------- | ----------- | ----------- |
|
||||
| Big Pickle | Free | Free | Free | - |
|
||||
| MiniMax M2.1 Free | Free | Free | Free | - |
|
||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||
| GLM 4.7 Free | Free | Free | Free | - |
|
||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||
| Kimi K2.5 Free | Free | Free | Free | - |
|
||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||
| Claude Sonnet 4.5 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4.5 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Sonnet 4 (≤ 200K tokens) | $3.00 | $15.00 | $0.30 | $3.75 |
|
||||
| Claude Sonnet 4 (> 200K tokens) | $6.00 | $22.50 | $0.60 | $7.50 |
|
||||
| Claude Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 |
|
||||
| Claude Haiku 3.5 | $0.80 | $4.00 | $0.08 | $1.00 |
|
||||
| Claude Opus 4.6 (≤ 200K tokens) | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.6 (> 200K tokens) | $10.00 | $37.50 | $1.00 | $12.50 |
|
||||
| Claude Opus 4.5 | $5.00 | $25.00 | $0.50 | $6.25 |
|
||||
| Claude Opus 4.1 | $15.00 | $75.00 | $1.50 | $18.75 |
|
||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||
| GPT 5.1 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5.1 Codex Max | $1.25 | $10.00 | $0.125 | - |
|
||||
| GPT 5.1 Codex Mini | $0.25 | $2.00 | $0.025 | - |
|
||||
| GPT 5 | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||
| GPT 5 Nano | Free | Free | Free | - |
|
||||
|
||||
قد تلاحظ _Claude Haiku 3.5_ في سجل الاستخدام. هذا [نموذج منخفض التكلفة](/docs/config/#models) يُستخدم لتوليد عناوين جلساتك.
|
||||
|
||||
:::note
|
||||
يتم تمرير رسوم بطاقات الائتمان بالتكلفة الفعلية (4.4% + $0.30 لكل معاملة)؛ ولا نفرض أي رسوم إضافية غير ذلك.
|
||||
:::
|
||||
|
||||
النماذج المجانية:
|
||||
|
||||
- GLM 4.7 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Kimi K2.5 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- MiniMax M2.1 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
- Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج.
|
||||
|
||||
<a href={email}>تواصل معنا</a> إذا كانت لديك أي أسئلة.
|
||||
|
||||
---
|
||||
|
||||
### إعادة الشحن التلقائي
|
||||
|
||||
إذا انخفض رصيدك عن $5، فسيقوم Zen تلقائيا بإعادة شحن $20.
|
||||
|
||||
يمكنك تغيير مبلغ إعادة الشحن التلقائي. ويمكنك أيضا تعطيل إعادة الشحن التلقائي بالكامل.
|
||||
|
||||
---
|
||||
|
||||
### الحدود الشهرية
|
||||
|
||||
يمكنك أيضا تعيين حد شهري للاستخدام لمساحة العمل بالكامل ولكل عضو في فريقك.
|
||||
|
||||
على سبيل المثال، لنفترض أنك ضبطت حد الاستخدام الشهري على $20، فلن يتجاوز Zen مبلغ $20 خلال شهر.
|
||||
لكن إذا كانت إعادة الشحن التلقائي مفعّلة، فقد ينتهي الأمر بخصم أكثر من $20 إذا انخفض رصيدك عن $5.
|
||||
|
||||
---
|
||||
|
||||
## الخصوصية
|
||||
|
||||
تتم استضافة جميع نماذجنا في الولايات المتحدة. يلتزم مزوّدونا بسياسة عدم الاحتفاظ بالبيانات (zero-retention) ولا يستخدمون بياناتك لتدريب النماذج، مع الاستثناءات التالية:
|
||||
|
||||
- Big Pickle: خلال فترة إتاحته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- GLM 4.7 Free: خلال فترة إتاحته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- Kimi K2.5 Free: خلال فترة إتاحته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- MiniMax M2.1 Free: خلال فترة إتاحته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج.
|
||||
- OpenAI APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [سياسات بيانات OpenAI](https://platform.openai.com/docs/guides/your-data).
|
||||
- Anthropic APIs: يتم الاحتفاظ بالطلبات لمدة 30 يوما وفقا لـ [سياسات بيانات Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||
|
||||
---
|
||||
|
||||
## للفرق
|
||||
|
||||
يعمل Zen بشكل ممتاز للفرق أيضا. يمكنك دعوة زملاء الفريق، وتعيين الأدوار، وتنظيم
|
||||
النماذج التي يستخدمها فريقك، والمزيد.
|
||||
|
||||
:::note
|
||||
مساحات العمل مجانية حاليا للفرق كجزء من النسخة التجريبية.
|
||||
:::
|
||||
|
||||
إدارة مساحة العمل مجانية حاليا للفرق كجزء من النسخة التجريبية. سنشارك المزيد من التفاصيل حول التسعير قريبا.
|
||||
|
||||
---
|
||||
|
||||
### الأدوار
|
||||
|
||||
يمكنك دعوة زملاء الفريق إلى مساحة عملك وتعيين الأدوار:
|
||||
|
||||
- **Admin**: إدارة النماذج والأعضاء ومفاتيح API والفوترة
|
||||
- **Member**: إدارة مفاتيح API الخاصة به فقط
|
||||
|
||||
يمكن للمسؤولين أيضا تعيين حدود إنفاق شهرية لكل عضو للسيطرة على التكاليف.
|
||||
|
||||
---
|
||||
|
||||
### صلاحيات الوصول للنماذج
|
||||
|
||||
يمكن للمسؤولين تفعيل نماذج محددة لمساحة العمل أو تعطيلها. ستعيد الطلبات المرسلة إلى نموذج معطّل خطأ.
|
||||
|
||||
يفيد ذلك في الحالات التي تريد فيها تعطيل استخدام نموذج يقوم بجمع البيانات.
|
||||
|
||||
---
|
||||
|
||||
### استخدم مفتاحك الخاص
|
||||
|
||||
يمكنك استخدام مفاتيح API الخاصة بك لدى OpenAI أو Anthropic مع الاستمرار في الوصول إلى نماذج أخرى ضمن Zen.
|
||||
|
||||
عند استخدام مفاتيحك الخاصة، تتم فوترة tokens مباشرة من المزوّد وليس من Zen.
|
||||
|
||||
على سبيل المثال، قد تكون لدى مؤسستك بالفعل مفاتيح لـ OpenAI أو Anthropic وتريد استخدامها بدلا من المفتاح الذي يوفّره Zen.
|
||||
|
||||
---
|
||||
|
||||
## الأهداف
|
||||
|
||||
أنشأنا OpenCode Zen من أجل:
|
||||
|
||||
1. **قياس الأداء** لأفضل النماذج/المزوّدين لعوامل البرمجة.
|
||||
2. إتاحة خيارات **عالية الجودة** دون خفض الأداء أو توجيه الطلبات إلى مزوّدين أرخص.
|
||||
3. تمرير أي **انخفاض في الأسعار** عبر البيع بالتكلفة؛ بحيث تكون الزيادة الوحيدة لتغطية رسوم المعالجة.
|
||||
4. عدم فرض **أي ارتباط حصري (lock-in)** عبر تمكينك من استخدامه مع أي عامل برمجة آخر، مع إتاحة استخدام أي مزوّد آخر مع OpenCode أيضا.
|
||||
Reference in New Issue
Block a user