هذا المشروع يطوِّر مساعدًا تربويًا ذكيًا للأهل، يعتمد على RAG، ويجمع بين ثلاث مجالات معرفة:
المجال الطبي (سلوك ونفسية الأطفال، دون تقديم تشخيص سريري مباشر أو وصف أدوية).
المجال الشرعي والتربوي (تربية نبوية وفقه واقع الأسرة المسلمة المعاصرة).
المجال السيبراني (حماية الأطفال رقميًا من المخاطر، وإدارة استخدام الأجهزة والألعاب).
هيكل المشروع الحالي:
backend/ : خدمات الـ API ومحرك الـ RAG والـ Guardrails.
frontend/ : واجهة استخدام الأهل ولوحة التحكم.
knowledge_base/ : مستودع المعرفة الهجين، بنية JSON + Vector DB.
ops/ : سكربتات التشغيل، الأتمتة، وأدوات التطوير.
للتحقق من صحة ملفات JSON في knowledge_base/ مقابل الـ Schema:
python ops/tools/validate_knowledge_units.py --dir knowledge_base/examplescd /home/khalednew/projects/tutor-guardian
PYTHONPATH=$(pwd):$PYTHONPATH python -m uvicorn backend.app.main:app --reload --port 8090ثم افتح http://localhost:8090/docs للاطلاع على Swagger UI، وعميل الاختبار على http://localhost:8090/ui/
ملاحظة: الـ backend/API هو المنتج. صفحة
frontend/مجرد عميل اختبار — المنتج النهائي تطبيق موبايل.
docker compose up -d ollama
docker compose exec ollama ollama pull qwen2.5:3b # لمرة واحدة
docker compose up -d backend
# API: http://localhost:8000 · عميل الاختبار: http://localhost:8000/ui/الإعدادات كلها في .env.example (انسخه إلى .env). كل الاستدلال محلي عبر Ollama — لا تخرج أي بيانات.
يقارن وحدات المعرفة ↔ الـ schema ↔ taxonomy.py ↔ ChromaDB ويمنع أي انحراف صامت.
./check.sh # فحص سريع (schema / enums / taxonomy)
./check.sh --full # + تزامن ChromaDB + الاختبارات
python ops/tools/check_kb_integrity.py --check-index # الفحص الكاملالفحص يعمل تلقائياً عند كل git commit (عبر .githooks/pre-commit) وفي الـ CI.
تفعيل الـ hook بعد الاستنساخ:
git config core.hooksPath .githooksعند إضافة/تعديل وحدات معرفة، شغّل التنظيف والإعادة:
python ops/tools/normalize_units.py # تنظيف قيم enum
python ops/tools/build_vector_db.py # إعادة بناء الفهرس + units_index.jsonpython -m pytest # 22 اختبار (السلامة، taxonomy، API، سلامة قاعدة المعرفة)راجع API.md لعقد الـ API الكامل (للفريق الذي يبني تطبيق الموبايل).
ثلاثة workflows يـ guard الـ main branch:
| Workflow | يـ guard ضد |
|---|---|
backend.yml |
regression في الـ 99 backend tests + drift في الـ 292 KB units |
flutter.yml |
analyzer warnings/errors + failing widget tests على الـ mobile |
docker.yml |
image لا تبني أو لا تـ start — Phase 0 regression (privacy policy مفقود) |
deploy.yml |
(Phase 8-D) يـ trigger بعد نجاح الـ CI ويـ SSH للـ VPS يـ git pull + docker compose up + health check |
كل workflow يـ skip إذا الـ paths تاعته ما اتغيرتش. الـ concurrency بيـ cancel in-flight runs على نفس الـ ref. الـ main branch لازم يكون protected (Settings → Branches → Require status checks: backend, flutter, docker).
Deploy automation مفصول عمداً (Phase 8-A) — الـ VPS rebuild يتم يدوياً عبر SSH.
deploy.yml يـ listen لـ CI via workflow_run. لما كل الـ 6 CI jobs (pytest، kb-integrity، analyze، test، build، smoke) ينجحوا على push لـ main، الـ deploy job يـ SSH للـ VPS ويـ:
git fetch origin main && git reset --hard origin/main(fast-forward only)docker compose -f docker-compose.production.yml build backenddocker compose -f docker-compose.production.yml up -d --remove-orphans backend- ينتظر
tg_backendيصيرhealthy(max 50s) curlالـ/health+/privacy-policy(الـ Phase 0 regression check)docker image prune -f
| Secret | الوصف | مثال |
|---|---|---|
VPS_SSH_KEY |
private SSH key للـ VPS | (محتوى ~/.ssh/id_ed25519 بـ -----BEGIN OPENSSH PRIVATE KEY-----) |
VPS_HOST |
الـ hostname أو IP بدون user@ |
72.62.44.131 |
VPS_PORT |
SSH port (اختياري، default 22) | 22 |
VPS_REMOTE_PATH |
المسار على الـ VPS (اختياري، default /root/tutor-guardian) |
/root/tutor-guardian |
DEPLOY_HEALTH_URL |
الـ URL للـ health check (اختياري، default https://tg-api.alsaba.cloud/health) |
(default) |
لو احتجت force-deploy بدون CI (emergency hotfix): Actions → Deploy → Run workflow → skip_ci = true. الـ concurrency على الـ deploy job مش بيـ cancel in-flight deploys (cancel-in-progress: false).
الـ deploy job بيستخدم environment production — يـ allow الـ GitHub UI يـ show deploy history + يـ enable reviewer approvals لو حبيت تضيفها لاحقاً (Settings → Environments → production).