يغطي هذا الدليل سير عمل التطوير اليومي للمساهمة في Bedrud.
هيكل المستودع
bedrud/
├── server/ # Go backend
├── apps/
│ ├── web/ # React frontend (TanStack Start)
│ ├── android/ # Android app
│ ├── ios/ # iOS app
│ └── desktop/ # Desktop app (Rust + Slint)
├── agents/ # Python bot agents
├── packages/ # Shared TypeScript types
├── tools/cli/ # Deployment CLI
├── docs/ # Documentation (MkDocs)
├── Cargo.toml # Rust workspace root
├── Makefile # Build orchestration
└── Dockerfile # Container build
المتطلبات الأساسية
| الأداة | مطلوب لـ |
|---|---|
| Go 1.24+ | الخادم |
| Bun | واجهة الويب |
| LiveKit Server | خادم الوسائط المحلي |
| Android Studio + JDK 17 | تطبيق Android |
| Xcode | تطبيق iOS |
| Rust (stable) | تطبيق سطح المكتب |
| Python 3.10+ | وكلاء البوت |
| FFmpeg | وكلاء الراديو والفيديو |
الإعداد الأولي
git clone https://github.com/bedrud-ir/bedrud.git
cd bedrud
make initالتطوير الكامل
لتشغيل الحزمة بالكامل محليًا:
make devيُشغّل هذا LiveKit وخادم Go وخادم تطوير React بشكل متزامن. اضغط Ctrl+C لإيقاف جميع العمليات.
تشغيل الخدمات بشكل فردي
make dev-webيعمل على http://localhost:3000 مع الاستبدال السريع للوحدات.
make dev-serverيعمل على http://localhost:8090. أعد التشغيل يدويًا بعد تعديل كود Go.
make dev-livekitيعمل على http://localhost:7880 ببيانات اعتماد التطوير.
تطوير الخادم
نقطة الدخول لخادم Go هي server/cmd/server/main.go.
إضافة نقطة نهاية API
١. عرّف المعالج في server/internal/handlers/
٢. أضف دوال المستودع في server/internal/repository/ إذا كانت هناك حاجة لاستعلامات جديدة في قاعدة البيانات
٣. سجّل المسار في إعداد الخادم (عادة في main.go أو ملف المسارات)
٤. أضف الوسيطة إذا كانت نقطة النهاية تحتاج مصادقة أو فحص صلاحيات المسؤول
تغييرات قاعدة البيانات
أضف أو عدّل هياكل نماذج GORM في server/internal/models/. يقوم GORM بالترحيل التلقائي عند البدء.
توثيق Swagger
تستخدم تعليقات توثيق API تنسيق swaggo. بعد التعديل، أعد التوليد:
cd server
swag init -g cmd/server/main.goراجع بنية الخادم للاطلاع على هيكل الدليل الكامل والتصميم الطبقي.
تطوير واجهة الويب
توجد الواجهة في apps/web/ وتستخدم React 19 مع TanStack Start.
إضافة صفحة
أنشئ ملفًا جديدًا ضمن src/routes/ باتّباع اصطلاح التوجيه القائم على الملفات في TanStack Router (مثال: src/routes/settings.tsx). صدِّر Route مُنشأ باستخدام createFileRoute.
إضافة دالة عميل API
١. أضف الدالة في src/lib/api.ts باستخدام authFetch
٢. عرّف أنواع TypeScript مضمنة أو في ملف أنواع مشترك
٣. استخدم الدالة من مكوّن المسار، عادةً عبر خطاف useQuery من TanStack Query
فحص الأنواع
cd apps/web
bun run check # runs Biome lint + TypeScript type checkراجع بنية واجهة الويب للاطلاع على الهيكل الكامل والأنماط.
تطوير Android
make dev-android # Opens in Android Studioالأنماط الأساسية
- جميع الشاشات دوال Composable
- التبعيات تأتي من
InstanceManagerعبرkoinInject() - استخدم
collectAsState().value ?: returnلقيمStateFlowالقابلة للقيمة الفارغة - التنقل مُدار في
MainActivity.kt
البناء
make build-android-debug # Debug APK
make build-android # Release APK (needs keystore)
make release-android # Build + install on deviceراجع بنية تطبيق Android للاطلاع على بنية التطبيق المحمول بالتفصيل.
تطوير iOS
make dev-ios # Opens in Xcodeالأنماط الأساسية
- العروض هي هياكل SwiftUI
- التبعيات تأتي من
InstanceManagerعبر@EnvironmentObject - استخدم الربط الاختياري للخصائص المنشورة القابلة للقيمة الفارغة
- التنقل يستخدم حزمة التنقل الأصلية في SwiftUI
توليد المشروع
إذا عدّلت project.yml، أعد توليد مشروع Xcode:
cd apps/ios
xcodegen generateالبناء
make build-ios # Release archive
make build-ios-sim # Simulator build
make export-ios # Export IPAراجع بنية تطبيق iOS للاطلاع على بنية التطبيق المحمول بالتفصيل.
تطوير سطح المكتب
تطبيق سطح المكتب موجود في apps/desktop/ وهو حزمة Rust في مساحة العمل.
المتطلبات الأساسية (Linux)
sudo apt-get install -y \
libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libgles2-mesa-dev libegl1-mesa-dev \
libdbus-1-dev libsecret-1-dev \
libasound2-devيتطلب Windows أداة Visual Studio Build Tools مع عبء عمل C++ (MSVC).
التشغيل
make dev-desktop # cargo run -p bedrud-desktopالبناء
make build-desktop # optimised binary for the current platformالأنماط الأساسية
- جميع عناصر الواجهة مُعرَّفة في ملفات
.slintضمنapps/desktop/ui/؛ تُترجم إلى Rust وقت البناء بواسطةbuild.rs apps/desktop/src/ui/bridge.rsهو المكان الوحيد الذي تُربط فيه استدعيات Slint بمنطق Rust - أبقِ منطق الأعمال خارج ملفات.slint- استخدم
Weak<AppWindow>عند تشغيل مهام خلفية تحتاج لتحديث الواجهة
راجع بنية تطبيق سطح المكتب للاطلاع على بنية تطبيق سطح المكتب بالتفصيل.
تطوير وكلاء البوت
الوكلاء موجودون في agents/ بمجلد واحد لكل وكيل.
cd agents/music_agent
pip install -r requirements.txt
python agent.py "http://localhost:8090/m/test-room"جميع الوكلاء يحتاجون خادم Bedrud قيد التشغيل للمصادقة ضده.
CI/CD
يعمل GitHub Actions عند كل دفع إلى main وعند طلبات السحب:
| المهمة | ما يتحقق منه |
|---|---|
| الخادم | go vet، البناء، الاختبارات |
| الويب | فحص الأنواع، البناء |
| Android | الفحص، اختبارات الوحدة، APK تصحيح |
| iOS | البناء + الاختبار (المحاكي، مع التغطية) |
| سطح المكتب | cargo build، cargo test |
يُفعَّل البناء للإصدار بواسطة وسوم الإصدارات (v*).
نمط الكود
- Go: التنسيق القياسي
gofmt - TypeScript/React: Biome (مُكوَّن في
apps/web/biome.json) - Kotlin: التنسيق الافتراضي في Android Studio
- Swift: التنسيق الافتراضي في Xcode
الاختبار
cd server
go test ./...cd apps/web
bun run checkcd apps/android
./gradlew testmake build-ios-sim # Builds and runs testsانظر أيضًا
- مرجع Makefile - جميع أوامر البناء والتطوير
- نظرة عامة على البنية - كيف تتلاءم المكونات معًا