# FlowForge ⚙ — نظام Pipeline هندسي لـ Devin

[English README ←](../README.md)

نظام شخصي متكامل يشغّل مهامك البرمجية كخط إنتاج منظم بأدوار متخصصة، مع شاشة تحكم تفاعلية —
**صفر مكتبات خارجية**: كل الكود هنا ملكك (Node مدمج + ملفات Markdown/JSON).

## التسطيب — أمر واحد

**ويندوز** (PowerShell):

```powershell
iwr -useb https://raw.githubusercontent.com/Eng-MMustafa/FlowForge/main/get.mjs -o "$env:TEMP\ff.mjs"; node "$env:TEMP\ff.mjs"
```

**ماك / لينكس**:

```bash
curl -fsSL https://raw.githubusercontent.com/Eng-MMustafa/FlowForge/main/get.mjs -o /tmp/ff.mjs && node /tmp/ff.mjs
```

الأمر ده بينزّل FlowForge، ويربطه بـDevin لو موجود، ويفتح الداشبورد — **من غير npm install ولا أي مكتبات**.
ولو عاوز تحدّث، شغّل نفس الأمر تاني.

أو من غير تسطيب خالص: `npx flowforge-cli`
، أو أمر عالمي: `npm i -g flowforge-cli` وبعدين `flowforge` من جوّا أي مشروع (الفولدر اللي واقف فيه بيبقى هو المشروع).

## الفكرة في سطرين

كل تاسك بيعدّي على وكلاء متخصصين بالترتيب، وكل وكيل بيسلّم اللي بعده "ملف تسليم" (artifact) مركّز:

```
تفكير ──► تحليل ──► كود ──► اختبار/مراجعة ──► (تصحيح لو فشل ↺) ──► رفع
thinker    analyst   coder      tester            debugger          shipper
plan.md  analysis.md code-notes review.md         debug.md          ship.md
```

مفيش رفع غير لما المراجع يقول **PASS** صراحة.

## التشغيل من نسخة محلية

```powershell
cd "<مكان المجلد عندك>\FlowForge"
node start.mjs
```

الأمر ده بيعمل كل حاجة لوحده:

1. **بيركّب** FlowForge جوّا Devin لو لسه ماتركّبش (أو لو المجلد اتنقل) — مفيش خطوة تركيب منفصلة.
2. **بيشغّل** شاشة التحكم.
3. **بيفتح** المتصفح على <http://127.0.0.1:4820/>.

وبعد كده **كل شغلك من الشاشة**: تختار المشروع بزرار 📂، تكتب التاسك، تدوس تشغيل، وتوافق على البوابات.
Ctrl+C في الترمنال يقفل السيرفر.

اختياري: `node start.mjs "C:\path\to\project"` يبدأ على مشروع معيّن، و`--port=5000` يغير البورت،
و`--no-open` يمنع فتح المتصفح، و`--check` يقولك هو متركّب ولا لأ.

لو عاوز التركيب لوحده من غير تشغيل: `node install.mjs`.
`install.mjs` بيكتب مكان المجلد في `%APPDATA%\devin\flowforge.json` والسكيلز بتقراه منه —
فالمشروع شغال من أي مسار وعلى أي جهاز.

> كل السكربتات Node (.mjs) مش PowerShell — لأن سياسة الجهاز (AllSigned) بتمنع سكربتات
> PowerShell غير الموقّعة. Node شغال عادي.

ده بيعمل junctions في `%APPDATA%\devin\` — يعني أي تعديل في الريبو بيشتغل فورًا من غير إعادة تركيب.
افتح جلسة Devin **جديدة** بعد التركيب.

## الاستخدام

### الطريقة الأولى — من الشاشة مباشرة (موصى بيها)
افتح الداشبورد → اكتب التاسك → دوس **▶ شغّل دلوقتي**. الفلو يتنفذ بالكامل والموافقات تجيلك على الشاشة، وكل حاجة (تفكير الوكيل، الملفات، المراحل) لايف قدامك.

زرار التشغيل بيشتغل بواحد من مسارين (تلقائي):

| المسار | الشرط | ملاحظات |
|---|---|---|
| **CLI headless** | `devin auth login` شغال على حسابك | كونسول حي بتفكير الوكيل الخام |
| **وضع الديمون** 👈 | افتح شات Devin مرة واحدة واكتب `/flow-daemon` | **بيشتغل مع حسابات الشركات اللي الـ CLI مقفول عندها** — الجلسة دي بتفضل سامعة للشاشة وتنفذ أي Run تدوسه |

> **حسابات Windsurf Enterprise**: لو تسجيل دخول الـ CLI بينجح لكن `auth status` بتقول
> `Not logged in`، فده معناه إن إدارة مؤسستك لسه مش مفعّلة Devin CLI للفريق
> (بيتفعل من windsurf.com/team/cli-settings). لحد ما يتفعل — **وضع الديمون بيديك نفس
> التجربة بالظبط** من غير أي إجراء إداري.

### الطريقة التانية — من شات Devin

| الأمر | بيعمل إيه |
|---|---|
| `/understand` | يفهم المشروع الحالي كمهندس: معمارية + أعراف + يولّد AGENTS.md و knowledge.json |
| `/flow task "اشرح التاسك هنا"` | يشغّل خط الإنتاج الكامل على التاسك |
| `/flow task "..." --gates=dashboard` | نفس الشيء والموافقات من الشاشة |
| `/flow-status` | فين وصل الفلو دلوقتي |
| `/flow-resume` | يكمّل فلو اتقطع من مكانه |

### شاشة التحكم

`node start.mjs` بيفتحها لوحده. لو عاوز تشغّل السيرفر لوحده:

```powershell
node "<مكان المجلد>\ai-workbench\dashboard\server.mjs"
# ثم افتح  http://127.0.0.1:4820/
# (اختياري: مسار مشروع كأول آرجيومنت، وبورت كتاني — وتقدر تضيف المشاريع من الشاشة نفسها)
```

الشاشة **عربي/إنجليزي** (زرار تبديل فوري مع اتجاه RTL/LTR) وبتحدّث نفسها تلقائيًا:

| تاب | بيديك إيه |
|---|---|
| **نظرة عامة** | **▶ زرار تشغيل مباشر**: اكتب التاسك ودوس Run — الفلو يتنفذ من الشاشة نفسها (Devin CLI بوضع headless) و**كونسول الوكيل** يعرض تفكيره الخام لايف • المراحل بمددها وموديل كل دور • المخرج الحي • بث نشاط الملفات • زراير الموافقات • Inbox • السجل |
| **النشاط لايف** | 👁 **تتفرج على الوكيل وهو بيشتغل**: بث حي لكل ملف بيتعمل أو بيتعدل في المشروع لحظة بلحظة + تغييرات git (دوس على أي ملف تشوف الـ diff بتاعه) |
| **المخرجات** | plan.md / review.md / إلخ بعرض Markdown منسق أو خام |
| **الفلوز** | إنشاء / تعديل / حذف فلوهات JSON من الشاشة |
| **الوكلاء** | تعديل برومبت وموديل أي وكيل من الشاشة |
| **المهارات** | إنشاء وتعديل أوامر السلاش نفسها (‎/flow وأخواتها) من الشاشة |
| **الإعدادات** | اللغة • الثيم (غامق/فاتح) • سرعة التحديث • **وضع الموافقات للمشروع** • إدارة المشاريع (إضافة/تبديل/إزالة) |

تبديل المشروع النشط من القائمة اللي فوق فوري — وكل الإعدادات الشخصية بتتحفظ في المتصفح.

### المنفّذ (Executor) — Devin / Copilot / Cursor / Trae

جنب مربع التاسك في قائمة **المنفّذ** — وجنب كل اسم علامة ✓ لو متركّب على الجهاز أو ✗ لو لأ.
الاختيار بيغيّر **تلات حاجات**:

1. **الفلوز المعروضة** — أي فلو فيه `providers` بيظهر للمزوّدين دول بس؛ واللي مفيش فيه الحقل ده بيظهر للكل.
2. **قائمة الموديلات** — في محرر المراحل وباني الوكلاء بتبقى موديلات المزوّد المختار.
3. **الاكتشاف** — في تاب الفلوز بيقولك المحرر متركّب فين وإيه الوحدات (rules / prompts / إلخ) الموجودة عندك،
   وزرار **⚙ ابنِ فلو من الوحدات المكتشفة** بيحوّلها لفلو عادي على الكانفاس تقدر تعدله وتحفظه.

> **مهم**: **Devin بس هو اللي بيشغّل فعليًا**. باقي المزوّدين للفلترة والاكتشاف وبناء الفلوز؛
> لو دوست Run وأنت مختار غير Devin هتوصلك رسالة واضحة بدل ما يشتغل حد تاني من وراك.

#### الربط وتسجيل الدخول — تاب الإعدادات

في قسم **المنفّذين** كارت لكل واحد فيه: متركّب ولا لأ • متصل ولا لأ (وباسم مين) •
مسار المحرر والـCLI • عدد الوحدات • زرار **🔑 اتصل** • زرار **خليه المنفّذ**.

الحالة مابتتخمّنش — بتتقرا لايف من الـCLI بتاع المزوّد نفسه:

| المزوّد | مين ماسك الحساب | الزرار بيعمل إيه |
|---|---|---|
| **Devin** | `devin auth status` | بيفتح ترمنال على `devin auth login` |
| **Copilot** | `gh auth status` (حساب جيت‌هاب) | بيفتح ترمنال على `gh auth login` |
| **Trae** | **مقروءة فعليًا** من `Trae/User/globalStorage/storage.json` (مفاتيح `iCubeAuthInfo://`)، وبتوريك الباقة كمان | **🔑 افتح البرنامج للتسجيل** |
| **Cursor** | جوّا `state.vscdb` (SQLite) — مش هنضيف مكتبة عشان نقراها، فبتظهر «مش مقروءة» | **🔑 افتح البرنامج** (لو متركّب بس) |

> والمهم: **«متركّب» يعني الأداة نفسها، مش اللي شيلها**. كوبايلت إضافة، فبندوّر على فولدرها جوّا
> `.vscode\extensions`؛ وجود VS Code أو `gh` لوحده مايعنيش إن كوبايلت موجود.

> **أمان**: الشاشة **عمرها مابتمسك باسورد أو توكن**. زرار الاتصال بيفتح ترمنال حقيقي
> على أمر اللوجن بتاع الأداة نفسها، وهي اللي بتخزّن بياناتك زي ما بتعمل عادي.

#### الموديلات بتتحوّل لوحدها لمّا تغيّر المنفّذ

كل مزوّد ليه موديلاته هو بس، والقوائم في محرر المراحل مابتعرضش غير المدعوم عنده.
ولمّا تبدّل المنفّذ والفلو مفتوح على الكانفاس، **موديلات المراحل بتتحوّل تلقائيًا**
لأقرب موديل موجود عند الأداة الجديدة (وبيظهرلك توست بعدد اللي اتغير) — والحفظ يدوي عشان تراجع الأول:

| الموديل في الفلو (Devin) | → Copilot | → Cursor | → Trae |
|---|---|---|---|
| `claude-opus-5-max` | `claude-opus-4.1` | `claude-opus-4.1` | `claude-sonnet-4` |
| `claude-sonnet-5-high` | `claude-sonnet-4.5` | `claude-sonnet-4.5` | `claude-sonnet-4` |
| `gemini-3-7-flash-high` | `gemini-2.5-pro` | `gemini-2.5-pro` | `gemini-2.5-pro` |
| `swe-1-7-lightning` | `gpt-5` | `auto` | `auto` |

القاعدة ماتتكتبتش بالإيد — بتتحسب من قوائم الموديلات نفسها (أقرب عيلة بالاسم،
مع الحفاظ على مستوى التفكير لو موجود)، فلمّا تزوّد موديل للقايمة التحويل بيتظبط لوحده.

#### تحوّل **كل** الفلوز مرة واحدة

التحويل اللي فوق بيمسّ الفلو المفتوح بس. لو عايز الكل، في تبويب **الفلوز** فيه
زرار **⇄ حوّل كل الفلوز للمنفّذ ده**:

1. بيوريك الأول **قايمة بالتغييرات** لكل فلو قبل ما يكتب أي حاجة.
2. لو وافقت، بيكتب **نسخة جديدة** لكل فلو باسم `<الفلو>-<المزوّد>.json` وعليها
   `providers` بالمزوّد ده — **والأصل مابيتلمسش**.
3. الفلو اللي أصلًا نسخة المزوّد ده بيتحدّث في مكانه.

السبب إن **ديفين لوحده هو اللي بينفّذ الفلوز**: لو كتبنا موديلات تراي جوّه
`task.json` نفسه، الفلو ده مايبقاش ينفع يتشغّل. وكمان الموديلات المدعومة عند ديفين
بتتقرا **لايف** من `devin models list`، فلو الأمر ده مش شغّال الزرار بيرفض يغيّر أي حاجة
بدل ما يخمّن.

### الاستوديو — تبني فلو بالأيقونات من غير ما تكتب حرف

```powershell
# نفس السيرفر، افتح:  http://127.0.0.1:4820/studio
```

شاشة تانية بيضاء بالكامل **من غير أي كلام أو أرقام** — كلها أيقونات وسحّابات ومفاتيح
وزراير مدوّرة (الزرار اللي جنب زرار اللغة فوق بيوصّلك لها، وفيها زرار رجوع للشاشة العادية).
بالماوس بس تقدر:

- تختار **نيّة** الشغل (ميزة جديدة • إصلاح عطل • فهم المشروع • إعادة هيكلة • تحقق ورفع) —
  والاختيار بيجهّز لك المراحل ونص التاسك تلقائيًا، فمش محتاج تكتب حاجة.
- تركّب **خط المراحل**: تدوس على أي دور تشيله أو ترجّعه، تسحبه (أو أسهم الكيبورد) تغيّر ترتيبه،
  وزرار الـ **+** يفتح لك بقية الأدوار.
- تحدد **الموافقة** لكل مرحلة (تلقائي / من الشاشة / من التيرمنال)، وعدد لفّات إعادة الاختبار
  بالسحّابة، وتشغّل/تقفل سكربتات `collect-context` و `run-checks`.
- تدوس **حفظ** فيتولد `flows/studio-<id>.json` باسم جاهز من غير كتابة — وهو **فلو عادي تمامًا**
  يظهر في تاب الفلوز وفي قائمة التشغيل، وينفع تشغّله من الشات بـ `/flow studio-<id> "..."`.
- تدوس الزرار المدوّر الكبير فيشتغل الفلو، وتتفرج على المراحل بتتلون والقوس بيكمّل حواليه،
  وتوافق أو ترفض البوابات بعلامة ✓ / ✗ — والزرار نفسه يبقى مربع لتوقيف الشغل.

اختياراتك بتتحفظ في المتصفح، فلو عملت Refresh تلاقي كل حاجة زي ما سيبتها.
الشاشة العادية (`/`) مابتتغيرش — الاستوديو إضافة جانبها، مش بديل ليها.

### تختبر إن كل حاجة شغالة

```powershell
node "<مكان المجلد>\ai-workbench\dashboard\test\run-tests.mjs"
```

سويت اختبارات ذاتية (245 اختبار): صحة الواجهة والترجمة بالكامل، إثبات إن الاستوديو خالي من أي كلام، كل الـ APIs، مراقب الملفات الحي، بروتوكول البوابات، تحويل المستندات، والحمايات.

## مكتبة تحويل المستندات — PDF / Word / Excel / وغيرهم

مكتبة واحدة بصفر مكتبات خارجية، **تلات أبواب لنفس الكود**:

1. **من الترمنال**
   ```powershell
   node scripts\convert-doc.mjs .workbench\artifacts\review.md --to pdf
   node scripts\convert-doc.mjs report.md --to docx --title "تقرير الربع الثالث"
   node scripts\convert-doc.mjs data.md --to xlsx
   node scripts\convert-doc.mjs .workbench\artifacts --to pdf --out C:\deliverables   # مجلد كامل
   node scripts\convert-doc.mjs --help
   ```
2. **من الشات (أي مشروع)**: `/export review.md pdf` — وكمان الوكيل نفسه بيستدعيها لو طلبت منه "طلّعلي PDF".
3. **من الداشبورد**: تاب المخرجات ← اختار الملف ← اختار الصيغة ← **⬇ تصدير**
   (بيتحفظ في `.workbench\exports\`).

| الصيغة | بتطلع إيه | العربي |
|---|---|---|
| `pdf` | متصفح headless (Edge/Chrome) لو موجود، وإلا كاتب PDF مدمج | ✅ مع المتصفح فقط |
| `docx` | Word حقيقي (OOXML) بعناوين وجداول وقوائم | ✅ مع ضبط RTL |
| `xlsx` | **Excel** — كل جدول في المستند بيبقى شيت، والأرقام بتفضل أرقام | ✅ |
| `csv` | أول جدول، بـBOM عشان Excel يفتحه صح | ✅ |
| `html` | ملف واحد مع CSS جاهز للطباعة | ✅ |
| `txt` | نص نظيف من علامات Markdown | ✅ |
| `md` | Markdown منظّم (مفيد لتوحيد الشكل) | ✅ |
| `json` | بنية المستند (blocks + tables) للاستهلاك البرمجي | ✅ |

**إضافة صيغة جديدة = إدخال واحد** في `scripts/lib/formats.mjs` — وبعدها تظهر لوحدها في `--help`
وفي `/export` وفي قائمة الداشبورد. مفيش تكرار: كاتب الـZIP واحد (`lib/zip.mjs`) بيخدم Word وExcel،
والمحلل واحد (`lib/markdown.mjs`) بيغذّي كل الكتّاب.

- **الجداول**: جدول Markdown بيبقى جدول حقيقي في pdf/docx/html وصفوف حقيقية في xlsx/csv.
- `--method auto` (الافتراضي) بياخد المتصفح للـPDF لو متركّب، وإلا يرجع للكاتب المدمج.
- **مهم**: الكاتب المدمج بيدعم الحروف اللاتينية بس (خطوط PDF الأساسية)، ولو لقى عربي بيحذّرك صراحة ويقترح `--method browser` أو `--to docx`.
- تقدر تحدد متصفح معيّن بـ `DEVIN_BROWSER` أو `CHROME_PATH`.
- الأداة مابتكتبش فوق ملف المصدر أبدًا (بترفض وتطلب `--out`).

## الموافقات (Gates) — ثلاث أوضاع تختار بينها

| الوضع | السلوك | امتى تستخدمه |
|---|---|---|
| `terminal` (الافتراضي) | Devin يسألك في الترمنال عند كل بوابة | الشغل اليومي |
| `dashboard` | الفلو يستنى ضغطة زرار من الشاشة (مهلة 15 دقيقة ثم يرجع للترمنال) | لما تحب تتابع من الشاشة |
| `auto` | يجري للآخر من غير وقفات، والقرارات متسجلة في السجل | التاسكات الآمنة الروتينية |

التحكم (بترتيب الأولوية):
1. `--gates=<mode>` وقت التشغيل (بيطبق على كل المراحل)
2. `gate` المحدد لمرحلة معينة في ملف الفلو (لو مش `default`)
3. **وضع الموافقات من شاشة الإعدادات** (بيتحفظ في `.workbench/settings.json` والأوركستريتور بيقرأه عند كل بوابة — ينفع تغيّره والفلو شغّال)
4. `defaultGate` بتاع الفلو

**ملحوظة أمان:** في وضع auto أقصى حاجة بتحصل commit — عمره ما يعمل push من غير إذن صريح منك.

## الفلوز الجاهزة

كلها متظبطة بموديل ودرجة تفكير لكل مرحلة (من كتالوج `devin models list`)، فمحتاج بس تختار المناسب للشغلانة:

| الفلو | لإيه | المراحل | الموديلات | البوابات |
|---|---|---|---|---|
| `task` | الافتراضي المتوازن | تفكير ← تحليل ← كود ← اختبار ← تصحيح ← رفع | Opus 5 High + Sonnet 5 High + Opus Max للتصحيح | terminal |
| `quality` | تغييرات حساسة / معمارية | نفس ترتيب task | Opus 5 Max/XHigh + Sonnet 5 High | dashboard |
| `fast` | تعديل صغير مفهوم | مسح ← كود ← تحقق ← (تصحيح) ← رفع | SWE-1.7 + Gemini 3.7 Flash High | auto |
| `cheap` | أقل تكلفة ممكنة | تفكير ← كود ← تحقق ← (تصحيح) ← رفع | GPT-5.6 Luna + Gemini Flash + GLM-5.2 | auto |
| `bugfix` | باج متبلّغ | تحديد ← إعادة إنتاج وإصلاح ← اختبار انحدار ← تحقق (4 لفات) ← رفع | Opus 5 High + Sonnet 5 High | dashboard |
| `tests` | تقوية التغطية (من غير لمس الكود) | خريطة اختبارات ← كتابة ← إثبات ← (إصلاح) ← رفع | Sonnet 5 High + Opus 5 High | dashboard |
| `design` | قرار/بحث من غير كود | مسح ← تأصيل ← بدائل وقرار ← مراجعة معاكسة | Opus 5 Max + GPT-5.6 Sol High | dashboard |
| `analytics` | تحليل بيزنس وإحصائيات | مسح ← تأصيل بيانات ← قياس وتفسير ← مراجعة أرقام | Sonnet 5 High + Opus 5 High + Sol High | dashboard |
| `perf` | تحسين أداء مبني على قياس | قياس مبدئي ← نقطة اختناق ← تحسين ← إثبات ← رفع | Sonnet 5 High + Opus 5 High/XHigh | dashboard |
| `understand` | فهم مشروع جديد | معمارية ← أعراف ← قواعد ← AGENTS.md | Sonnet 5 High + Opus 5 High | terminal |

```powershell
/flow analytics "مين أكتر جزء في المنتج بيستهلك وقت صيانة؟"
/flow perf "صفحة التقارير بتحمّل بطيء — وصّلها تحت ثانية"
/flow fast "زوّد زرار refresh في التاب بتاع الأنشطة"
/flow bugfix "الـ diff بيرجع فاضي لما اسم الملف فيه مسافة"
/flow design "أنقل التخزين من JSON لـ SQLite ولا لأ؟"
```

أي فلو منهم تقدر تفتحه في تاب **الفلوز** وتغيّر الموديل/الدرجة لأي خطوة من لوحة الإعدادات الجنب.

## التخصيص

### تضيف مرحلة أو تعدّل الترتيب
عدّل `flows/task.json` (من الشاشة أو أي محرر). كل مرحلة:

```json
{
  "id": "my-stage",                // unique id
  "title": "Stage title (EN)",     // للشاشة بالإنجليزي
  "titleAr": "عنوان المرحلة",      // للشاشة بالعربي
  "agent": "analyst",              // مين ينفذها (null = سكربتات بس)
  "prompt": "التعليمات... {TASK} و {PROJECT} بيتبدلوا تلقائيًا",
  "pre":  ["scripts/collect-context.mjs"],   // سكربتات قبل — شغل حتمي بدون AI
  "post": [],                                 // سكربتات بعد
  "gate": "default",               // auto | terminal | dashboard | default
  "gateQuestion": "Continue?",     // سؤال البوابة (EN)
  "gateQuestionAr": "نكمل؟",       // سؤال البوابة (AR)
  "artifact": "my-stage.md",       // ملف التسليم في .workbench/artifacts/
  "done": ["شروط الجودة اللي لازم تتحقق قبل ما يعدّي"],
  "onFail": "debug",               // (اختياري) يقفز فين لو الحكم FAIL
  "maxLoops": 3,                   // (اختياري) حد لفات الفشل
  "runOnlyWhenJumpedTo": true,     // (اختياري) مرحلة شرطية
  "next": "test",                  // (اختياري) يرجع فين بعدها
  "model": "opus",                 // (اختياري) موديل خاص بالمرحلة دي بدل موديل الدور
  "effort": "high"                 // (اختياري) مستوى التفكير: high | medium | low
}
```

> تقدر تعمل كل ده من الشاشة مباشرة: تاب **الفلوز** → زرار **+ فلو جديد**.

### تعمل فلو جديد خالص
```powershell
node scripts\new-flow.mjs my-flow "وصف الفلو"
# عدّل flows/my-flow.json ثم: /flow my-flow "..."
```

### تعدّل وكيل (البرومبت أو الموديل)
عدّل `agents/<name>.md` — غيّر `model:` (opus / sonnet / swe / gpt...) أو القواعد نفسها.
الافتراضي الحالي: thinker/coder/debugger على **opus** (جودة قصوى)، analyst/tester على **sonnet**، shipper على **swe**،
researcher/optimizer على **opus**. أي مرحلة في فلو فيها `model` بتغلب موديل الدور ده.

الأدوار المتاحة:

| الدور | بيعمل إيه | المخرج |
|---|---|---|
| `thinker` | تخطيط وتحديد معايير قبول | `plan.md` |
| `analyst` | تحليل كود باستشهادات file:line | `analysis.md` |
| `coder` | التنفيذ | `code-notes.md` |
| `tester` | تحقق ومراجعة بحكم PASS/FAIL | `review.md` |
| `debugger` | إعادة إنتاج وإصلاح السبب الجذري | `debug.md` |
| `shipper` | تجهيز ورفع | `ship.md` |
| `researcher` | تحليل بيزنس/بيانات بأرقام مقاسة وتوصيات مرتبة | `report.md` |
| `optimizer` | قياس أداء وتحسين مثبَت بالأرقام | `perf.md` |

### تضيف سكربت يوفر شغل على الـ AI
حط أي `.mjs` في `scripts/` واذكره في `pre`/`post` لأي مرحلة. السكربت بياخد مسار المشروع كأول آرجيومنت ويكتب نتايجه في `.workbench/artifacts/` — كده الوكيل يلاقي الحقائق جاهزة بدل ما يجمعها بنفسه.

## إيه اللي بيتحفظ في مشروعك

```
مشروعك/
└── .workbench/          ← بيتضاف لـ .gitignore تلقائيًا
    ├── state.json       ← حالة الفلو (الشاشة بتقرأها لايف)
    ├── commands.json    ← طلبات/ردود بوابات الشاشة
    ├── inbox.md         ← رسايلك للوكيل
    ├── knowledge.json   ← معرفة المشروع من /understand
    └── artifacts/       ← ملفات التسليم بين المراحل
```

## حدود معروفة (بالتصميم)

- الشاشة بتتحكم في فلو **شغّال**: توافق/ترفض/تبعت رسايل/تعدّل إعدادات — لكن بدء فلو جديد بيكون من Devin نفسه (`/flow ...`).
- `state.json` بيحدّثه الأوركستريتور عند حدود المراحل — مش تتبّع لحظي جوّه المرحلة الواحدة.

## إلغاء التركيب

```powershell
node uninstall.mjs
```
