
# التطوير

## المتطلبات

- **Bun** لتثبيت مكونات مساحة العمل وتشغيل النصوص البرمجية
- **Node.js 20+**
- **tmux** و**cloudflared** للاختبارات الشاملة من البداية إلى النهاية
- مفتاح **Daytona API** وبيانات اعتماد git لاختبار تكامل البيئة المعزولة (اختياري)
- **Playwright** لاختبارات e2e الخاصة بـ UI

## التثبيت

```bash
bun install
```

## تشغيل التطبيق

```bash
bun run dev:beam
```

ينشئ هذا الأمر CLI، ويشغّل الخادم المحلي على المنفذ `8787` (يمكن تغييره باستخدام `TERMBRIDGE_DEV_PORT`) ضمن جلسة tmux باسم `codex` (يمكن تغييره باستخدام `TERMBRIDGE_DEV_SESSION`)، ثم يشغّل خادم Vite dev UI الذي يوجّه `/__tb` (بما في ذلك WebSockets) إلى ذلك الخادم. ويطبع رابط استرداد dev URL لفتحه في المتصفح. عيّن `TERMBRIDGE_SKIP_BUILD=1` لتخطي بناء CLI.

### جلسات متعددة

```bash
TERMBRIDGE_SESSIONS=2 bun run dev:beam
```

أو استخدم الاختصار:

```bash
bun run dev:beam:multi
```

### وضع ملفات تعريف الارتباط المحلية

يضبط `dev:beam` القيمة `TERMBRIDGE_INSECURE_COOKIE=1` ما لم تضبطها بنفسك، لكي تعمل ملفات تعريف ارتباط الجلسة عبر HTTP العادي. عند تشغيل CLI مباشرةً دون HTTPS، عيّنها صراحةً:

```bash
TERMBRIDGE_INSECURE_COOKIE=1 node cli/dist/bin.js --no-tunnel --public-url http://127.0.0.1:8080 --port 8080
```

## الاختبارات

```bash
bun run test
```

- يشغّل `test:mocked` اختبارات الوحدة والتكامل بتغطية 100٪.
- يشغّل `test:cli` اختبارات e2e حقيقية لـ CLI وUI (tmux وcloudflared وPlaywright).
- يقرأ اختبار بيئة Daytona المعزولة في `test:cli` إعداداته من ملف `.env` فقط، داخل مجلد `termbridge-test-app` بجوار هذا المستودع (`../termbridge-test-app/.env`). ويعمل عند ضبط `TERMBRIDGE_E2E_DAYTONA=1` و`TERMBRIDGE_DAYTONA_API_KEY` في ذلك الملف. عيّن `TERMBRIDGE_SANDBOX_REPO` فيه إلى مستودع يمكنك استنساخه؛ مستودع الاختبار الافتراضي خاص ويتطلب أيضًا `TERMBRIDGE_SANDBOX_GIT_USERNAME` و`TERMBRIDGE_SANDBOX_GIT_TOKEN`.

## الوثائق

الوثائق ملفات Markdown عادية في `docs/`، مع بيانات وصفية في مقدمة كل صفحة وملفات `meta.json` لتحديد ترتيب التنقل. تُنشر على [termbridge.dev](https://termbridge.inline0.dev/ar/). للتحقق منها، شغّل:

```bash
node scripts/check-docs-content.mjs --root docs --expected-docs 16 --expected-nav 3
```

يجري سير عمل محتوى Docs الفحص نفسه على طلبات السحب التي تتضمن تغييرات في `docs/`.
