diff --git a/CONTRIBUTING.ar.md b/CONTRIBUTING.ar.md new file mode 100644 index 00000000000..cd0baf9f551 --- /dev/null +++ b/CONTRIBUTING.ar.md @@ -0,0 +1,171 @@ +# المساهمة في OpenCode + +نحن نريد أن نجعل من السهل عليكم المساهمة في OpenCode. إليك أكثر أنواع التغييرات شيوعًا التي يتم دمجها: + +- إصلاحات الأخطاء (Bug fixes) +- إضافة مزودي خدمات لغوية (LSPs) / منسقات (Formatters) إضافية +- تحسينات على أداء النماذج اللغوية الكبيرة (LLM) +- دعم مزودين جدد +- إصلاحات لمشاكل بيئية محددة +- إضافة سلوك قياسي مفقود +- تحسينات التوثيق + +ومع ذلك، أي تغييرات على واجهة المستخدم (UI) أو ميزات المنتج الأساسية يجب أن تمر بمراجعة تصميم مع الفريق الأساسي قبل التنفيذ. + +إذا كنت غير متأكد مما إذا كان سيتم قبول طلب السحب (PR) الخاص بك، فلا تتردد في سؤال أحد المشرفين أو البحث عن المشكلات (issues) التي تحمل أيًا من التسميات التالية: + +- [`help wanted`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) +- [`good first issue`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) +- [`bug`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) +- [`perf`](https://github.com/anomalyco/opencode/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) + +> [!NOTE] +> طلبات السحب التي تتجاهل هذه الضوابط ستم إغلاقها على الأرجح. + +هل تريد تولي مشكلة؟ اترك تعليقًا وقد يقوم أحد المشرفين بتعيينها لك ما لم يكن شيئًا نعمل عليه بالفعل. + +## تطوير OpenCode + +- المتطلبات: Bun 1.3+ +- قم بتثبيت التبعيات وتشغيل خادم التطوير من جذر المستودع: + + ```bash + bun install + bun dev + ``` + +### التشغيل مقابل دليل مختلف + +بشكل افتراضي، يقوم `bun dev` بتشغيل OpenCode في دليل `packages/opencode`. لتشغيله مقابل دليل أو مستودع مختلف: + +```bash +bun dev +``` + +لتشغيل OpenCode في جذر مستودع opencode نفسه: + +```bash +bun dev . +``` + +### بناء "localcode" + +لتجميع ملف تنفيذي مستقل: + +```bash +./packages/opencode/script/build.ts --single +``` + +ثم قم بتشغيله باستخدام: + +```bash +./packages/opencode/dist/opencode-/bin/opencode +``` + +استبدل `` بمنصتك (على سبيل المثال، `darwin-arm64`، `linux-x64`). + +- الأجزاء الأساسية: + - `packages/opencode`: منطق العمل الأساسي وخادم OpenCode. + - `packages/opencode/src/cli/cmd/tui/`: كود واجهة المستخدم النصية (TUI)، مكتوب بـ SolidJS و [opentui](https://github.com/sst/opentui) + - `packages/app`: مكونات واجهة مستخدم الويب المشتركة، مكتوبة بـ SolidJS + - `packages/desktop`: تطبيق سطح المكتب الأصلي، مبني بـ Tauri (يغلف `packages/app`) + - `packages/plugin`: المصدر لـ `@opencode-ai/plugin` + +### تشغيل تطبيق الويب + +لاختبار تغييرات واجهة المستخدم أثناء التطوير، قم بتشغيل تطبيق الويب: + +```bash +bun run --cwd packages/app dev +``` + +يبدأ هذا خادم تطوير محلي على http://localhost:5173 (أو منفذ مشابه يظهر في الإخراج). يمكن اختبار معظم تغييرات واجهة المستخدم هنا. + +### تشغيل تطبيق سطح المكتب + +تطبيق سطح المكتب هو تطبيق Tauri أصلي يغلف واجهة مستخدم الويب. + +لتشغيل تطبيق سطح المكتب الأصلي: + +```bash +bun run --cwd packages/desktop tauri dev +``` + +يبدأ هذا خادم تطوير الويب على http://localhost:1420 ويفتح النافذة الأصلية. + +إذا كنت تريد فقط خادم تطوير الويب (بدون الغلاف الأصلي): + +```bash +bun run --cwd packages/desktop dev +``` + +لإنشاء `dist/` للإنتاج وبناء حزمة التطبيق الأصلي: + +```bash +bun run --cwd packages/desktop tauri build +``` + +يقوم هذا بتشغيل `bun run --cwd packages/desktop build` تلقائيًا عبر `beforeBuildCommand` الخاص بـ Tauri. + +> [!NOTE] +> يتطلب تشغيل تطبيق سطح المكتب تبعيات Tauri إضافية (سلسلة أدوات Rust، مكتبات خاصة بالمنصة). انظر [متطلبات Tauri](https://v2.tauri.app/start/prerequisites/) لتعليمات الإعداد. + +> [!NOTE] +> إذا قمت بإجراء تغييرات على API أو SDK (على سبيل المثال `packages/opencode/src/server/server.ts`)، قم بتشغيل `./script/generate.ts` لإعادة إنشاء SDK والملفات ذات الصلة. + +برجاء محاولة اتباع [دليل الأسلوب](./STYLE_GUIDE.md). + +### إعداد مصحح الأخطاء (Debugger) + +تصحيح الأخطاء في Bun لا يزال في بداياته. نأمل أن يساعدك هذا الدليل في الإعداد وتجنب بعض نقاط الألم. + +الطريقة الأكثر موثوقية لتصحيح أخطاء OpenCode هي تشغيله يدويًا في محطة طرفية عبر `bun run --inspect= dev ...` وإرفاق مصحح الأخطاء الخاص بك عبر هذا الرابط. الطرق الأخرى قد تؤدي إلى تعيين نقاط التوقف بشكل غير صحيح، على الأقل في VSCode. + +تنبيهات: + +- إذا كنت ترغب في تشغيل OpenCode TUI وتشغيل نقاط التوقف في كود الخادم، فقد تحتاج إلى تشغيل `bun dev spawn` بدلاً من `bun dev` المعتاد. وذلك لأن `bun dev` يقوم بتشغيل الخادم في خيط عامل (worker thread) وقد لا تعمل نقاط التوقف هناك. +- إذا لم يعمل `spawn` معك، يمكنك تصحيح الخادم بشكل منفصل: + - تصحيح الخادم: `bun run --inspect=ws://localhost:6499/ ./src/index.ts serve --port 4096`، + ثم أرفق TUI بـ `opencode attach http://localhost:4096` + - تصحيح TUI: `bun run --inspect=ws://localhost:6499/ --conditions=browser ./src/index.ts` + +نصائح وحيل أخرى: + +- قد ترغب في استخدام `--inspect-wait` أو `--inspect-brk` بدلاً من `--inspect`، اعتمادًا على سير عملك +- تحديد `--inspect=ws://localhost:6499/` في كل استدعاء يمكن أن يكون متعبًا، قد ترغب في `export BUN_OPTIONS=--inspect=ws://localhost:6499/` بدلاً من ذلك + +#### إعداد VSCode + +إذا كنت تستخدم VSCode، يمكنك استخدام تكوينات المثال لدينا [.vscode/settings.example.json](.vscode/settings.example.json) و [.vscode/launch.example.json](.vscode/launch.example.json). + +بعض طرق التصحيح التي يمكن أن تكون بها مشاكل: + +- تكوينات التصحيح مع `"request": "launch"` يمكن أن يكون لها نقاط توقف معينة بشكل غير صحيح وبالتالي غير قابلة للاستخدام +- تظهر نفس المشكلة عند تشغيل OpenCode في `JavaScript Debug Terminal` في VSCode + +ومع ذلك، قد ترغب في تجربة هذه الطرق، فقد تعمل معك. + +## توقعات طلب السحب (Pull Request) + +- حاول الحفاظ على طلبات السحب صغيرة ومركزة. +- اربط المشكلة (المشاكل) ذات الصلة في الوصف +- اشرح المشكلة ولماذا يقوم تغييرك بإصلاحها +- تجنب وجود أوصاف PR مطولة تم إنشاؤها بواسطة LLM +- قبل إضافة وظائف أو ميزات جديدة، تأكد من أن مثل هذا السلوك لا يوجد بالفعل في مكان آخر في قاعدة التعليمات البرمجية. + +### تفضيلات الأسلوب + +هذه ليست مفروضة بصرامة، بل هي مجرد إرشادات عامة: + +- **الدوال (Functions):** احتفظ بالمنطق داخل دالة واحدة ما لم يضف تقسيمها فوائد واضحة لإعادة الاستخدام أو التركيب. +- **تفكيك البنية (Destructuring):** لا تقم بتفكيك غير ضروري للمتغيرات. +- **تدفق التحكم:** تجنب عبارات `else`. +- **مُعالجة الأخطاء:** فضل `.catch(...)` بدلاً من `try`/`catch` عندما يكون ذلك ممكنًا. +- **الأنواع (Types):** ابحث عن أنواع دقيقة وتجنب `any`. +- **المتغيرات:** التزم بالأنماط غير القابلة للتغيير وتجنب `let`. +- **التسمية:** اختر معرفات موجزة من كلمة واحدة عندما تظل وصفية. +- **واجهات برمجة التطبيقات وقت التشغيل:** استخدم مساعدي Bun مثل `Bun.file()` عندما تناسب حالة الاستخدام. + +## طلبات الميزات (Feature Requests) + +للحصول على وظائف جديدة تمامًا، ابدأ بمحادثة تصميم. افتح مشكلة تصف المشكلة، ونهجك المقترح (اختياري)، ولماذا تنتمي إلى OpenCode. سيساعد الفريق الأساسي في تحديد ما إذا كان يجب المضي قدمًا؛ يرجى انتظار تلك الموافقة بدلاً من فتح PR للميزة مباشرة. diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 00000000000..e1ade8f2173 --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,171 @@ +# 贡献给 OpenCode + +我们希望让大家能够轻松地为 OpenCode 做贡献。以下是最常见的会被合并的更改类型: + +- Bug 修复 +- 增加额外的 LSP / Formatter +- 提升 LLM 性能 +- 支持新的提供商 (Provider) +- 针对特定环境问题的修复 +- 缺失的标准行为 +- 文档改进 + +但是,任何 UI 或核心产品功能的更改,在实施前必须经过核心团队的设计审查。 + +如果您不确定您的 PR 是否会被接受,请随时咨询维护者,或查看带有以下相关标签的 issue: + +- [`help wanted`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) +- [`good first issue`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) +- [`bug`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) +- [`perf`](https://github.com/anomalyco/opencode/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) + +> [!NOTE] +> 忽略这些限制的 PR 很可能会被关闭。 + +想认领一个 issue 吗?请留言,除非我们已经着手处理,否则维护者可能会将其分配给您。 + +## 开发 OpenCode + +- 需求: Bun 1.3+ +- 从代码库根目录安装依赖并启动开发服务器: + + ```bash + bun install + bun dev + ``` + +### 在不同目录下运行 + +默认情况下,`bun dev` 会在 `packages/opencode` 目录下运行 OpenCode。若要在不同目录或仓库下运行: + +```bash +bun dev +``` + +要在 opencode 仓库本身的根目录下运行 OpenCode: + +```bash +bun dev . +``` + +### 构建 "localcode" + +要编译独立的可执行文件: + +```bash +./packages/opencode/script/build.ts --single +``` + +然后通过以下命令运行: + +```bash +./packages/opencode/dist/opencode-/bin/opencode +``` + +将 `` 替换为您的平台(例如 `darwin-arm64`, `linux-x64`)。 + +- 核心组件: + - `packages/opencode`: OpenCode 核心业务逻辑与服务器。 + - `packages/opencode/src/cli/cmd/tui/`: TUI 代码,使用 SolidJS 和 [opentui](https://github.com/sst/opentui) 编写。 + - `packages/app`: 共享的 Web UI 组件,使用 SolidJS 编写。 + - `packages/desktop`: 原生桌面应用,使用 Tauri 构建(封装了 `packages/app`)。 + - `packages/plugin`: `@opencode-ai/plugin` 的源代码。 + +### 运行 Web 应用 + +要在开发过程中测试 UI 更改,请运行 Web 应用: + +```bash +bun run --cwd packages/app dev +``` + +这将在 http://localhost:5173 (或输出中显示的其他端口)启动本地开发服务器。大多数 UI 更改都可以在此处进行测试。 + +### 运行桌面应用 + +桌面应用是一个封装了 Web UI 的原生 Tauri 应用。 + +要运行原生桌面应用: + +```bash +bun run --cwd packages/desktop tauri dev +``` + +这将在 http://localhost:1420 启动 Web 开发服务器并打开原生窗口。 + +如果您只需要 Web 开发服务器(不需要原生 shell): + +```bash +bun run --cwd packages/desktop dev +``` + +要创建生产环境的 `dist/` 并构建原生应用包: + +```bash +bun run --cwd packages/desktop tauri build +``` + +这将通过 Tauri 的 `beforeBuildCommand` 自动运行 `bun run --cwd packages/desktop build`。 + +> [!NOTE] +> 运行桌面应用需要额外的 Tauri 依赖项(Rust 工具链、特定平台的库)。请参阅 [Tauri 先决条件](https://v2.tauri.app/start/prerequisites/) 了解设置说明。 + +> [!NOTE] +> 如果您更改了 API 或 SDK(例如 `packages/opencode/src/server/server.ts`),请运行 `./script/generate.ts` 以重新生成 SDK 和相关文件。 + +请尝试遵循 [风格指南](./STYLE_GUIDE.md)。 + +### 设置调试器 (Debugger) + +Bun 的调试功能目前还比较粗糙。希望本指南能帮助您完成设置并避免一些痛点。 + +调试 OpenCode 最可靠的方法是通过 `bun run --inspect= dev ...` 手动在终端运行,然后通过该 URL 附加您的调试器。其他方法可能会导致断点映射错误,至少在 VSCode 中是这样(因人而异)。 + +注意事项: + +- 如果您想运行 OpenCode TUI 并在服务器代码中触发断点,您可能需要运行 `bun dev spawn` 而不是通常的 `bun dev`。这是因为 `bun dev` 在工作线程中运行服务器,断点可能无法在那里工作。 +- 如果 `spawn` 对您不起作用,您可以单独调试服务器: + - 调试服务器:`bun run --inspect=ws://localhost:6499/ ./src/index.ts serve --port 4096`, + 然后使用 `opencode attach http://localhost:4096` 附加 TUI。 + - 调试 TUI:`bun run --inspect=ws://localhost:6499/ --conditions=browser ./src/index.ts` + +其他技巧: + +- 根据您的工作流程,您可能想要使用 `--inspect-wait` 或 `--inspect-brk` 代替 `--inspect`。 +- 每次调用都指定 `--inspect=ws://localhost:6499/` 可能很繁琐,您可以使用 `export BUN_OPTIONS=--inspect=ws://localhost:6499/` 代替。 + +#### VSCode 设置 + +如果您使用 VSCode,可以使用我们的配置示例 [.vscode/settings.example.json](.vscode/settings.example.json) 和 [.vscode/launch.example.json](.vscode/launch.example.json)。 + +一些可能有问题的调试方法: + +- `"request": "launch"` 的调试配置可能会导致断点映射错误而无法使用。 +- 在 VSCode `JavaScript Debug Terminal` 中运行 OpenCode 时也会出现同样的问题。 + +话虽如此,您不妨尝试这些方法,它们可能对您有用。 + +## Pull Request 期望 + +- 尽量保持 PR 小而专注。 +- 在描述中链接相关的 issue。 +- 解释问题以及您的更改为何能修复它。 +- 避免使用冗长的 LLM 生成的 PR 描述。 +- 在添加新函数或功能之前,请确保该行为代码库中尚未存在。 + +### 风格偏好 + +这些不是强制执行的,只是一般准则: + +- **函数**:保持逻辑在一个函数内,除非拆分能通过复用或组合带来明显的好处。 +- **解构**:不要进行不必要的变量解构。 +- **控制流**:避免 `else` 语句。 +- **错误处理**:尽可能使用 `.catch(...)` 而不是 `try`/`catch`。 +- **类型**:追求精确的类型,避免 `any`。 +- **变量**:坚持不可变模式,避免 `let`。 +- **命名**:当能保持描述性时,选择简洁的单词标识符。 +- **运行时 API**:当适合用例时,使用 Bun 辅助函数,如 `Bun.file()`。 + +## 功能请求 + +对于全新的功能,请从设计讨论开始。开启一个 issue 描述问题、您建议的方法(可选)以及为什么它属于 OpenCode。核心团队将帮助决定是否应该推进;请等待批准,不要直接开启功能 PR。 diff --git a/CONTRIBUTING.zh-TW.md b/CONTRIBUTING.zh-TW.md new file mode 100644 index 00000000000..5b9b052b6e8 --- /dev/null +++ b/CONTRIBUTING.zh-TW.md @@ -0,0 +1,171 @@ +# 貢獻給 OpenCode + +我們希望讓大家能夠輕鬆地為 OpenCode 做貢獻。以下是最常見會被合併的變更類型: + +- Bug 修復 +- 增加額外的 LSP / Formatter +- 提升 LLM 效能 +- 支援新的提供商 (Provider) +- 針對特定環境問題的修復 +- 缺失的標準行為 +- 文件改進 + +但是,任何 UI 或核心產品功能的變更,在實作前必須經過核心團隊的設計審查。 + +如果您不確定您的 PR 是否會被接受,請隨時詢問維護者,或查看帶有以下相關標籤的 issue: + +- [`help wanted`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) +- [`good first issue`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) +- [`bug`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) +- [`perf`](https://github.com/anomalyco/opencode/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) + +> [!NOTE] +> 忽略這些限制的 PR 很可能會被關閉。 + +想認領一個 issue 嗎?請留言,除非我們已經著手處理,否則維護者可能會將其分配給您。 + +## 開發 OpenCode + +- 需求: Bun 1.3+ +- 從程式碼庫根目錄安裝依賴項並啟動開發伺服器: + + ```bash + bun install + bun dev + ``` + +### 在不同目錄下執行 + +預設情況下,`bun dev` 會在 `packages/opencode` 目錄下執行 OpenCode。若要在不同目錄或儲存庫下執行: + +```bash +bun dev +``` + +要在 opencode 儲存庫本身的根目錄下執行 OpenCode: + +```bash +bun dev . +``` + +### 建置 "localcode" + +要編譯獨立的可執行檔: + +```bash +./packages/opencode/script/build.ts --single +``` + +然後透過以下指令執行: + +```bash +./packages/opencode/dist/opencode-/bin/opencode +``` + +將 `` 替換為您的平台(例如 `darwin-arm64`, `linux-x64`)。 + +- 核心元件: + - `packages/opencode`: OpenCode 核心業務邏輯與伺服器。 + - `packages/opencode/src/cli/cmd/tui/`: TUI 程式碼,使用 SolidJS 和 [opentui](https://github.com/sst/opentui) 撰寫。 + - `packages/app`: 共用的 Web UI 元件,使用 SolidJS 撰寫。 + - `packages/desktop`: 原生桌面應用程式,使用 Tauri 建置(封裝了 `packages/app`)。 + - `packages/plugin`: `@opencode-ai/plugin` 的原始碼。 + +### 執行 Web 應用程式 + +要在開發過程中測試 UI 變更,請執行 Web 應用程式: + +```bash +bun run --cwd packages/app dev +``` + +這將在 http://localhost:5173 (或輸出中顯示的其他連接埠)啟動本地開發伺服器。大多數 UI 變更都可以在此處進行測試。 + +### 執行桌面應用程式 + +桌面應用程式是一個封裝了 Web UI 的原生 Tauri 應用程式。 + +要執行原生桌面應用程式: + +```bash +bun run --cwd packages/desktop tauri dev +``` + +這將在 http://localhost:1420 啟動 Web 開發伺服器並打開原生視窗。 + +如果您只需要 Web 開發伺服器(不需要原生 shell): + +```bash +bun run --cwd packages/desktop dev +``` + +要建立生產環境的 `dist/` 並建置原生應用程式包: + +```bash +bun run --cwd packages/desktop tauri build +``` + +這將透過 Tauri 的 `beforeBuildCommand` 自動執行 `bun run --cwd packages/desktop build`。 + +> [!NOTE] +> 執行桌面應用程式需要額外的 Tauri 依賴項(Rust 工具鏈、特定平台的函式庫)。請參閱 [Tauri 先決條件](https://v2.tauri.app/start/prerequisites/) 了解設定說明。 + +> [!NOTE] +> 如果您更改了 API 或 SDK(例如 `packages/opencode/src/server/server.ts`),請執行 `./script/generate.ts` 以重新生成 SDK 和相關檔案。 + +請嘗試遵循 [風格指南](./STYLE_GUIDE.md)。 + +### 設定除錯器 (Debugger) + +Bun 的除錯功能目前還比較粗糙。希望本指南能幫助您完成設定並避免一些痛點。 + +除錯 OpenCode 最可靠的方法是透過 `bun run --inspect= dev ...` 手動在終端機執行,然後透過該 URL 附加您的除錯器。其他方法可能會導致中斷點對應錯誤,至少在 VSCode 中是這樣(因人而異)。 + +注意事項: + +- 如果您想執行 OpenCode TUI 並在伺服器程式碼中觸發中斷點,您可能需要執行 `bun dev spawn` 而不是通常的 `bun dev`。這是因為 `bun dev` 在工作執行緒中執行伺服器,中斷點可能無法在那裡運作。 +- 如果 `spawn` 對您不起作用,您可以單獨除錯伺服器: + - 除錯伺服器:`bun run --inspect=ws://localhost:6499/ ./src/index.ts serve --port 4096`, + 然後使用 `opencode attach http://localhost:4096` 附加 TUI。 + - 除錯 TUI:`bun run --inspect=ws://localhost:6499/ --conditions=browser ./src/index.ts` + +其他技巧: + +- 根據您的工作流程,您可能想要使用 `--inspect-wait` 或 `--inspect-brk` 代替 `--inspect`。 +- 每次呼叫都指定 `--inspect=ws://localhost:6499/` 可能很繁瑣,您可以使用 `export BUN_OPTIONS=--inspect=ws://localhost:6499/` 代替。 + +#### VSCode 設定 + +如果您使用 VSCode,可以使用我們的設定範例 [.vscode/settings.example.json](.vscode/settings.example.json) 和 [.vscode/launch.example.json](.vscode/launch.example.json)。 + +一些可能有問題的除錯方法: + +- `"request": "launch"` 的除錯設定可能會導致中斷點對應錯誤而無法使用。 +- 在 VSCode `JavaScript Debug Terminal` 中執行 OpenCode 時也會出現同樣的問題。 + +話雖如此,您不妨嘗試這些方法,它們可能對您有用。 + +## Pull Request 期望 + +- 盡量保持 PR 小而專注。 +- 在描述中連結相關的 issue。 +- 解釋問題以及您的變更為何能修復它。 +- 避免使用冗長的 LLM 生成的 PR 說明。 +- 在新增新函數或功能之前,請確保該行為在程式碼庫中尚未存在。 + +### 風格偏好 + +這些不是強制執行的,只是一般準則: + +- **函數**:保持邏輯在一個函數內,除非拆分能透過複用或組合帶來明顯的好處。 +- **解構**:不要進行不必要的變數解構。 +- **控制流**:避免 `else` 陳述式。 +- **錯誤處理**:盡可能使用 `.catch(...)` 而不是 `try`/`catch`。 +- **類型**:追求精確的類型,避免 `any`。 +- **變數**:堅持不可變模式,避免 `let`。 +- **命名**:當能保持描述性時,選擇簡潔的單字識別符。 +- **執行時 API**:當適合使用案例時,使用 Bun 輔助函數,如 `Bun.file()`。 + +## 功能請求 + +對於全新的功能,請從設計討論開始。開啟一個 issue 描述問題、您建議的方法(可選)以及為什麼它屬於 OpenCode。核心團隊將幫助決定是否應該推進;請等待批准,不要直接開啟功能 PR。 diff --git a/README.ar.md b/README.ar.md new file mode 100644 index 00000000000..0876d7a8a7d --- /dev/null +++ b/README.ar.md @@ -0,0 +1,112 @@ +

+ + + + + OpenCode logo + + +

+

وكيل برمجة الذكاء الاصطناعي مفتوح المصدر.

+

+ Discord + npm + Build status +

+ +[![OpenCode Terminal UI](packages/web/src/assets/lander/screenshot.png)](https://opencode.ai) + +--- + +### التثبيت + +```bash +# تثبيت سريع (YOLO) +curl -fsSL https://opencode.ai/install | bash + +# مدراء الحزم +npm i -g opencode-ai@latest # أو باستخدام bun/pnpm/yarn +scoop bucket add extras; scoop install extras/opencode # لنظام Windows +choco install opencode # لنظام Windows +brew install opencode # لنظامي macOS و Linux +paru -S opencode-bin # لنظام Arch Linux +mise use -g opencode # لأي نظام تشغيل +nix run nixpkgs#opencode # أو github:anomalyco/opencode للحصول على أحدث فرع تطوير +``` + +> [!TIP] +> ملاحظة: قم بإزالة الإصدارات الأقدم من 0.1.x قبل التثبيت. + +### تطبيق سطح المكتب (تجريبي) + +يتوفر OpenCode أيضًا كتطبيق لسطح المكتب. قم بالتنزيل مباشرة من [صفحة الإصدارات](https://github.com/anomalyco/opencode/releases) أو من [opencode.ai/download](https://opencode.ai/download). + +| المنصة | التحميل | +| --------------------- | ------------------------------------- | +| macOS (Apple Silicon) | `opencode-desktop-darwin-aarch64.dmg` | +| macOS (Intel) | `opencode-desktop-darwin-x64.dmg` | +| Windows | `opencode-desktop-windows-x64.exe` | +| Linux | `.deb`، `.rpm`، أو AppImage | + +```bash +# macOS (Homebrew) +brew install --cask opencode-desktop +``` + +#### دليل التثبيت + +يحترم سكريبت التثبيت ترتيب الأولوية التالي لمسار التثبيت: + +1. `$OPENCODE_INSTALL_DIR` - دليل تثبيت مخصص +2. `$XDG_BIN_DIR` - مسار متوافق مع مواصفات الدليل الأساسي لـ XDG +3. `$HOME/bin` - دليل البيانات الثنائية للمستخدم القياسي (إذا كان موجودًا أو يمكن إنشاؤه) +4. `$HOME/.opencode/bin` - المسار الاحتياطي الافتراضي + +```bash +# أمثلة +OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash +XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash +``` + +### الوكلاء (Agents) + +يتضمن OpenCode وكيلين مدمجين يمكنك التبديل بينهما باستخدام مفتاح `Tab`. + +- **build** - الوكيل الافتراضي، ذو وصول كامل لأعمال التطوير +- **plan** - وكيل للقراءة فقط للتحليل واستكشاف الكود + - يرفض تعديلات الملفات افتراضيًا + - يطلب الإذن قبل تشغيل أوامر bash + - مثالي لاستكشاف قواعد التعليمات البرمجية غير المألوفة أو تخطيط التغييرات + +أيضًا، تم تضمين وكيل فرعي **general** لعمليات البحث المعقدة والمهام متعددة الخطوات. +يستخدم هذا داخليًا ويمكن استدعاؤه باستخدام `@general` في الرسائل. + +تعرف على المزيد حول [الوكلاء](https://opencode.ai/docs/agents). + +### الوثائق + +لمزيد من المعلومات حول كيفية تكوين OpenCode [**توجه إلى وثائقنا**](https://opencode.ai/docs). + +### المساهمة + +إذا كنت مهتمًا بالمساهمة في OpenCode، يرجى قراءة [وثائق المساهمة](./CONTRIBUTING.md) قبل تقديم طلب سحب (Pull Request). + +### البناء على OpenCode + +إذا كنت تعمل على مشروع يتعلق بـ OpenCode ويستخدم "opencode" كجزء من اسمه؛ على سبيل المثال، "opencode-dashboard" أو "opencode-mobile"، يرجى إضافة ملاحظة إلى ملف README الخاص بك لتوضيح أنه لم يتم إنشاؤه بواسطة فريق OpenCode وليس له صلة بنا بأي شكل من الأشكال. + +### الأسئلة الشائعة (FAQ) + +#### كيف يختلف هذا عن Claude Code؟ + +إنه مشابه جدًا لـ Claude Code من حيث القدرة. إليك الفروق الرئيسية: + +- مفتوح المصدر 100% +- غير مرتبط بأي مزود. على الرغم من أننا نوصي بالنماذج التي نقدمها من خلال [OpenCode Zen](https://opencode.ai/zen)؛ يمكن استخدام OpenCode مع Claude أو OpenAI أو Google أو حتى النماذج المحلية. مع تطور النماذج، ستنغلق الفجوات بينها وستنخفض الأسعار، لذا فإن كونها غير مرتبطة بمزود محدد أمر مهم. +- دعم LSP (بروتوكول خادم اللغة) جاهز للاستخدام +- التركيز على واجهة المستخدم النصية (TUI). تم بناء OpenCode بواسطة مستخدمي neovim ومبدعي [terminal.shop](https://terminal.shop)؛ سنقوم بدفع حدود ما هو ممكن في المحطة الطرفية (Terminal). +- هندسة العميل/الخادم. يسمح هذا على سبيل المثال لـ OpenCode بالعمل على جهاز الكمبيوتر الخاص بك، بينما يمكنك قيادته عن بعد من تطبيق جوال. مما يعني أن واجهة TUI الأمامية هي مجرد واحدة من العملاء المحتملين. + +--- + +**انضم إلى مجتمعنا** [Discord](https://discord.gg/opencode) | [X.com](https://x.com/opencode)