fix: stabilize agent file change previews

This commit is contained in:
Hamza Ayed
2026-10-07 21:10:36 +03:00
parent fc36f54f15
commit 95c9bc231b
9 changed files with 823 additions and 224 deletions
+3 -2
View File
@@ -4,6 +4,7 @@
## الحالة الحالية — 2026-10-07
- 2026-10-07 — إصلاح تذبذب معاينة تعديل ملفات الوكيل والتحقق من مهلة الاتصال: إعادة محاولة تعديل الملف أصبحت ترسل طلب المستخدم الأصلي وأداة `propose_file_change` وحدها بدل قائمة الأدوات والسياق الكامل، وتعيد HTTP 502 واضحًا إذا لم ينتج النموذج نداء أداة بدل أن تعرض ردًا نصيًا يوحي بالإنجاز. اجتازت اختبارات الوكيل 27/27، واجتاز smoke test حي على FastAPI معزول وGemma 4 تسجيل المشروع والقراءة ومعاينة diff مع بقاء الملف الأصلي دون تغيير. فحص شكوى الانقطاع: مهلة completion للوكيل 600 ثانية، SSE heartbeat كل 15 ثانية، وقراءة العميل 10 دقائق؛ لا توجد مهلة 4–5 دقائق في هذا المسار. اختبارات المهلة والنبضات والإلغاء اجتازت 5/5. جرد آخر 200 حدث تدقيق على API 8000 لم يجد إغلاق عميل `499`؛ أطول بث محفوظ أكمل بـHTTP 200 خلال 386,998ms (2026-10-04)، وأطول طلب في الأحداث الأحدث يوم 2026-10-07 استغرق 99,677ms وانتهى بـ200. هذا لا يعيد إنتاج انقطاع المستخدم؛ اختبار Flutter التفاعلي المطوّل باقٍ لعزل السبب من الواجهة أو التشغيل.
- 2026-10-07 — تحسين تحمل انقطاع تحميل مهارات الوكيل: فحص واجهة الويب على `127.0.0.1:5303` كشف أن أول تحميل عرض خطأً مؤقتًا، ثم عادت الواجهة بعد إعادة التحميل واتصلت بـGemma 4 وأظهرت المحادثات المحفوظة. تحققت خدمة API بـ200، وأعادت `/v1/agent/skills` المهارات الثلاث مع CORS صحيحًا؛ أُلغيت جلسة الفحص المحلية. أضيفت ثلاث محاولات تحميل إجمالًا مع تراجع 300/750ms ومنع الطلبات المتزامنة؛ يزول خطأ المهارات عند النجاح ويبقى ظاهرًا إذا فشلت المحاولات كلها. اجتازت اختبارات Flutter الكاملة 29/29، و`flutter analyze --no-pub` بلا ملاحظات. فحص widget الآلي يمر بمسار اختيار المشروع ومعاينة التعديل؛ بقي التحقق اليدوي من نافذة Windows، لذلك لم يُغلق بندها.
- 2026-10-07 — تشغيل Flutter Web Debug من نسخة مصدر معزولة في `%LOCALAPPDATA%\SovereignAI-Starter\web-debug-20261007`: `flutter run -d web-server --web-hostname 127.0.0.1 --web-port 5305 --no-pub` ما زال يعمل وطلب HTTP أعاد 200 بعنوان `Mithqal AI`. تعثر التشغيل أولًا لأن OneDrive جعل `build/flutter_assets` نقطة reparse للقراءة فقط؛ كما فشل استدعاء Flutter snapshot المباشر لغياب إعداد `Isolate.packageConfig`، ثم نجح عبر `flutter.bat` بعد مزامنة المشروع واستعادة الاعتماديات محليًا. أُوقف خادم 5304 الثابت المؤقت. طلب فتح تبويب 5305 في لوحة Codex أُرسل، لكن أداة المتصفح انتهت بمهلة ولم تؤكد العرض المرئي أو تدفق المشروع؛ بند Windows اليدوي ما زال مفتوحًا.
- 2026-10-07 — بناء وتشغيل Windows Debug للمصدر الحالي: بُنيت نسخة معزولة في `%LOCALAPPDATA%\SovereignAI-Starter\windows-debug-20261007` بنجاح خلال 363.7 ثانية؛ `flutter run -d windows --no-pub` أعاد البناء خلال 132.4 ثانية، وأعلن VM Service على 63785. PID `7232` يعمل و`Responding=True` والـAPI `/health` تعرض Gemma 4؛ لكن فحص العملية أظهر `MainWindowHandle=0` وعنوان نافذة فارغًا، لذا لم يُثبت أن نافذة سطح المكتب ظاهرة أو قابلة للاستهداف، ولم يُنفذ مسار المشروع يدويًا. جلسة `flutter run` باقية للتشخيص.
@@ -209,7 +210,7 @@
- تكرار التقييم مع إجابات مرجعية ومراجعين/درجات بشرية، وقياس استهلاك الذاكرة واعتماد مقارنة قابلة للتكرار. (2026-10-03: أُعيد التشغيل بمعايير أوسع: Gemma وQwen أكملتا 5/5 طلبات بلا أخطاء؛ Gemma مرّرت 9/9 فحوص شكلية، وQwen 8/9، ومتوسط الزمن 14.77 مقابل 6.25 ثانية. إجابة Qwen عن SQLite كانت غير دقيقة رغم اجتياز فحص وجود ثلاث نقاط، ما يثبت أن هذه الفحوص لا تقيس صحة المعنى. التقريرين النهائيين `evals/results/gemma4_e2b_2026-10-03_183058.json` و`evals/results/qwen2.5_1.5b-instruct-q4_K_M_2026-10-03_183140.json`. التقييمات السابقة المؤرخة `175827` و`180307` تستخدم فحوصًا أضيق. أُضيف `scripts/capture_ollama_runtime.ps1`: أظهر `/api/ps` حجم Gemma المحمّل 6,733,158,152 بايت وQwen 1,169,980,128 بايت، و`size_vram=0` لكليهما. اللقطتان `evals/results/ollama_runtime_2026-10-03_180846.json` و`...180934.json` لحظيتان وليستا peak؛ لا تربطان كل PID بالنموذج ولم تتوفر قراءة إجمالي/متاح RAM بسبب رفض CIM. لم تُسجل درجات بشرية بعد؛ تبقى مراجعة بشرية، قياس ذروة RAM/VRAM موثوق ومتكرر، وجولات إضافية للمقارنة.) الجولة السابقة كانت Gemma 8/10 بمتوسط 16.32 ثانية وQwen 5/10 بمتوسط 8.93 ثانية. أُصلحت منذها مشكلة الحساب المباشر مقابل الأداة وصيغة Qwen الرياضية؛ مشغّل التقييم يستخدم جلسة loopback مؤقتة ويلغيها.
- [x] جرد أولي لترخيص وسوم Ollama المحلية في `LICENSE_REVIEW_2026-10.md` (2026-10-04): فُحصت `ollama show --license` للأوزان الخمسة المثبتة وبطاقات المصادر الرسمية. Gemma 4 E2B وMinistral 3:3b وQwen2.5 وGranite Embedding أظهرت Apache 2.0؛ `gemma3:1b` تستخدم شروط Gemma الإضافية. وثّق الجرد أيضًا تدفق Groq الصوتي الخارجي واحتفاظ البيانات المحتمل.
- [x] إنشاء جرد مكونات آلي أولي `sbom/component-inventory.json` باستخدام `scripts/generate_component_inventory.py`: لقطة 2026-10-04 تضم 50 توزيع Python من `.venv` و104 حزم Flutter من `pubspec.lock`، مع بصمات 104 ملفات رخصة وبصمة أرشيف `NOTICES.Z` المضمّن في Windows Debug. اجتازت اختبارات محلّل الجرد 4/4 وفحوص JSON والمرجع الفريد. تُرك التصنيف اليدوي مطلوبًا لـ101 ملف رخصة عثرت عليها الأداة دون تصنيف تلقائي. الملف ليس جرد إصدار إنتاج محصورًا ولا مراجعة قانونية ولم يُتحقق من مخطط CycloneDX الرسمي؛ لا يتضمن علاقات الاعتماد أو كامل مكونات Windows الأصلية وPDFium وأوزان OCR/النماذج.
- [ ] اعتماد النماذج والاعتماديات لنسخة تجارية محددة: مطابقة مصدر وبصمة كل وزن سيُشحن، حزمة SBOM وإشعارات Python/Flutter/Windows/PDFium/OCR، معالجة قيود Gemma 3 أو استبعادها، وشروط Groq وإفصاح الصوت. لا يُعد الجرد الأولي أعلاه موافقة قانونية أو جاهزية إصدار. تقدم 2026-10-04: صُححت مراجعة Gemma 4 بعد مطابقة وسم Ollama المحلي وبصمته الكاملة مع `/api/tags` ونص Apache 2.0 من `/api/show`؛ بطاقة Google الرسمية تعلن Apache 2.0 أيضًا. تقدم 2026-10-07: أُدرجت بصمة PDFium وإشعارات binary المطابقة، وملفات أوزان EasyOCR التي تطابق MD5 في إعداد 1.7.2، وسُجل غياب وزن الإنجليزية. في 2026-10-07 أُضيف `scripts/generate_flutter_license_triage.py` وتقرير `sbom/flutter-license-triage.json`: عولجت 102 رخصة من جذور الحزم ببصمات SHA-256؛ 99 لها اقتراح توقيع SPDX، و3 بقيت ملتبسة، وحزمتا SDK لا تحتويان ملف رخصة داخل الجذر. اجتاز اختبارا classifier 2/2. الاقتراحات ليست مراجعة قانونية ولا تغلق البند. بقيت مراجعة شروط توزيع أوزان OCR وتبعيات PDFium، والتحقق البشري من كل تراخيص Flutter ومطابقة المصدر/الأوزان لكل إصدار نهائي، وشروط Groq والمراجعة القانونية.
- [ ] اعتماد النماذج والاعتماديات لنسخة تجارية محددة: مطابقة مصدر وبصمة كل وزن سيُشحن، حزمة SBOM وإشعارات Python/Flutter/Windows/PDFium/OCR، معالجة قيود Gemma 3 أو استبعادها، وشروط Groq وإفصاح الصوت. لا يُعد الجرد الأولي أعلاه موافقة قانونية أو جاهزية إصدار. تقدم 2026-10-04: صُححت مراجعة Gemma 4 بعد مطابقة وسم Ollama المحلي وبصمته الكاملة مع `/api/tags` ونص Apache 2.0 من `/api/show`؛ بطاقة Google الرسمية تعلن Apache 2.0 أيضًا. تقدم 2026-10-07: أُدرجت بصمة PDFium وإشعارات binary المطابقة، وملفات أوزان EasyOCR التي تطابق MD5 في إعداد 1.7.2، وسُجل غياب وزن الإنجليزية. في 2026-10-07 أُضيف `scripts/generate_flutter_license_triage.py` وتقرير `sbom/flutter-license-triage.json`: عولجت 102 رخصة من جذور الحزم ببصمات SHA-256. تحديث التقرير v2 يميز 99 ملفًا ذا توقيع منفرد و3 ملفات إشعارات مركبة متعددة التواقيع، ويعرض `detected_spdx_candidates` دون نسب الإشعارات التابعة إلى حزمها؛ وحزمتا SDK لا تحتويان ملف رخصة داخل الجذر. اجتازت الاختبارات 3/3. هذه اقتراحات نصية وليست مراجعة قانونية ولا تغلق البند. بقيت مراجعة شروط توزيع أوزان OCR وتبعيات PDFium، والتحقق البشري من كل تراخيص Flutter ومطابقة المصدر/الأوزان لكل إصدار نهائي، وشروط Groq والمراجعة القانونية.
- تحسين أولي عبر prompts وRAG والأدوات؛ هذه غالبًا تعالج نقص المعرفة أو القدرة على الفعل دون تغيير أوزان النموذج.
- عند توفر GPU مناسب: تجربة LoRA/QLoRA على بيانات مرخصة ومنقحة، ومقارنة النتائج بالمجموعة المرجعية قبل اعتماد adapter.
- تدريب نموذج أساسي من الصفر خارج نطاق العتاد الشخصي المعتاد؛ يحتاج بيانات وحوسبة وبنية تدريب كبيرة، ولا يكون خطتنا الأولى.
@@ -247,7 +248,7 @@
4. [x] إضافة طبقة مزود النموذج واكتشاف النماذج (2026-10-01): عقد موحد للطلب الكامل والبث والقائمة، واستخدامه في المحادثة والوكيل وقراءة مساحة العمل والويب؛ Ollama هو المزوّد المنفذ حاليًا. تحقق حي من `/health` و`/v1/models` وطلب محادثة باستخدام Gemma.
5. [x] إكمال Markdown للمرحلة 1: جداول قابلة للتمرير، قوائم متداخلة، ومربعات مهام GFM؛ التحليل واختبارات الواجهة الثلاثة ناجحة وبناء Windows Debug نجح.
6. [x] تشغيل جلسة Windows Debug بعد إصلاح مجلدي روابط إضافات `record` المؤقتة. بناء OneDrive يفشل عند cloud placeholders وMSBuild `FTK1011`. في 2026-10-04 نجح بناء وتشغيل نسخة `%TEMP%` (PID 33624) مع API/Gemma؛ ثم أضيف `scripts/run_windows_debug_local.ps1` لمسار ثابت خارج OneDrive. `-BuildOnly` في `%LOCALAPPDATA%\SovereignAI-Starter\windows-dev\flutter_app` نجح أول مرة في 336 ثانية، وإعادة البناء بالـcache نجحت في 55 ثانية. وفي 2026-10-04 شُغلت أيضًا نسخة Debug الأحدث التي تتضمن زر إنشاء المشروع (PID 35400) وأعادت API `/health` حالة `ok` مع Gemma 4 وSQLite والوكيل. في محاولة 2026-10-04 لبناء تغييرات heartbeat/فهرسة PDF لم يكتمل البناء: إضافة `flutter_secure_storage_windows` لم تجد الرأس C++ عبر مسار الرابط الرمزي؛ ترجمت الإضافة منفردة بعد توجيه MSBuild إلى مسار الكاش الحقيقي، لكن البناء الكامل اصطدم بصلاحيات سجلات MSBuild في النسخة المؤقتة. كانت المحاولة السابقة غير ناجحة؛ لكن بناء لاحق من SDK معزول نجح، ونافذة التطبيق استجابت واتصلت بالخدمة كما هو مسجل أعلاه. تفاعل الأزرار ما زال مفتوحًا.
- [ ] تحقق مرئي ووظيفي كامل من زر فتح/إنشاء المشروع، ثم تسجيل مجلد وقراءة ملف وطلب معاينة تعديل من داخل نافذة Windows. أدلة الواجهة الآلية: اختبارات Flutter على أحدث مصدر بعد مزامنته إلى نسخة LocalAppData نجحت 22/22، واختبار `widget_test.dart` المستهدف نجح 7/7 بعد إضافة تأكيدات أن إرسال المستخدم يمرر مسار المشروع و`src/hello.py` للوكيل، وأن معاينة التعديل لا تطبق دون موافقة؛ وتشمل الاختبارات ظهور إجراء المشروع على المقاسات الضيقة والواسعة، واستمرار تسجيل المجلدات، وإنشاء مجلد مشروع آمن، ومعاينة diff؛ `flutter analyze --no-pub` بلا ملاحظات. أعيدت مزامنة أحدث المصدر وبناؤه في `LocalAppData\SovereignAI-Starter\windows-dev\ui-verify-20261004` باستخدام SDK معزول؛ نجح Windows Debug خلال 389.6 ثانية. اجتازت النسخة نفسها `flutter test --no-pub` 22/22 و`flutter analyze --no-pub` بلا ملاحظات (146 ثانية). شُغّل exe الحالي PID 55860، HWND 182911482، و`Responding=True`؛ أكد `/health` API 8000 الحالة `ok` مع Gemma 4 وSQLite. لم أتحقق بصريًا: `Computer Use list_windows` لم يعرض نافذة PID 55860، وأظهر نوافذ من مسار Debug قديم؛ التقاط النافذة القديمة انتهى بمهلة مرتين. في 2026-10-04 أضيف Widget Test يحاكي استجابة `file_selector` ثم ينقر تسجيل المشروع، يختار `src/hello.py`، ويرسل السياق للوكيل حتى معاينة diff مع تأكيد عدم التطبيق دون موافقة؛ الاختبارات الكاملة صارت 23/23 و`flutter analyze --no-pub` بلا ملاحظات. في متابعة 2026-10-04 الحالية، قائمة Computer Use ما زالت تعرض أربع نوافذ `Mithqal AI` من المسار القديم `SovereignAI-run-20260930` فقط، ولا تعرض نافذة PID 55860 من نسخة LocalAppData؛ فتح مجلد المشروع من تبويب Flutter Web 5301 لم يُظهر منتقي ملفات أو تغييرًا مرئيًا. لذلك لم أرسل إدخالًا إلى نافذة غير مؤكدة. هذا لا يغني عن اختبار النافذة الأصلية؛ ما زال فتح/تسجيل/قراءة/معاينة المشروع يدويًا على Windows مطلوبًا. تحقق API حي 2026-10-07: اجتاز `scripts/verify_agent_workspace_live.ps1` دورة مصطنعة كاملة على FastAPI 8000 وGemma 4؛ سجل المشروع المؤقت، أظهر `README.md` و`src/hello.py`، قرأ الوكيل الملف واستشهد به، ثم أعاد `propose_file_change` معاينة تحديث لـ`README.md` مع بقاء الملف دون تغيير؛ ألغيت الجلسة والتسجيل وحُذف المجلد. أداة Computer Use الحالية لم تعرض أي تطبيق Windows أصلي؛ PID 1328 من مسار البناء الحالي بلا HWND، والتقاط تبويب الويب 5303 انتهى بمهلة بينما 5305 ظهر أبيض. لذلك تبقى تجربة النافذة اليدوية مفتوحة.
- [ ] تحقق مرئي ووظيفي كامل من زر فتح/إنشاء المشروع، ثم تسجيل مجلد وقراءة ملف وطلب معاينة تعديل من داخل نافذة Windows. أدلة الواجهة الآلية: اختبارات Flutter على أحدث مصدر بعد مزامنته إلى نسخة LocalAppData نجحت 22/22، واختبار `widget_test.dart` المستهدف نجح 7/7 بعد إضافة تأكيدات أن إرسال المستخدم يمرر مسار المشروع و`src/hello.py` للوكيل، وأن معاينة التعديل لا تطبق دون موافقة؛ وتشمل الاختبارات ظهور إجراء المشروع على المقاسات الضيقة والواسعة، واستمرار تسجيل المجلدات، وإنشاء مجلد مشروع آمن، ومعاينة diff؛ `flutter analyze --no-pub` بلا ملاحظات. أعيدت مزامنة أحدث المصدر وبناؤه في `LocalAppData\SovereignAI-Starter\windows-dev\ui-verify-20261004` باستخدام SDK معزول؛ نجح Windows Debug خلال 389.6 ثانية. اجتازت النسخة نفسها `flutter test --no-pub` 22/22 و`flutter analyze --no-pub` بلا ملاحظات (146 ثانية). شُغّل exe الحالي PID 55860، HWND 182911482، و`Responding=True`؛ أكد `/health` API 8000 الحالة `ok` مع Gemma 4 وSQLite. لم أتحقق بصريًا: `Computer Use list_windows` لم يعرض نافذة PID 55860، وأظهر نوافذ من مسار Debug قديم؛ التقاط النافذة القديمة انتهى بمهلة مرتين. في 2026-10-04 أضيف Widget Test يحاكي استجابة `file_selector` ثم ينقر تسجيل المشروع، يختار `src/hello.py`، ويرسل السياق للوكيل حتى معاينة diff مع تأكيد عدم التطبيق دون موافقة؛ الاختبارات الكاملة صارت 23/23 و`flutter analyze --no-pub` بلا ملاحظات. في متابعة 2026-10-04 الحالية، قائمة Computer Use ما زالت تعرض أربع نوافذ `Mithqal AI` من المسار القديم `SovereignAI-run-20260930` فقط، ولا تعرض نافذة PID 55860 من نسخة LocalAppData؛ فتح مجلد المشروع من تبويب Flutter Web 5301 لم يُظهر منتقي ملفات أو تغييرًا مرئيًا. لذلك لم أرسل إدخالًا إلى نافذة غير مؤكدة. هذا لا يغني عن اختبار النافذة الأصلية؛ ما زال فتح/تسجيل/قراءة/معاينة المشروع يدويًا على Windows مطلوبًا. تحقق API حي 2026-10-07: اجتاز `scripts/verify_agent_workspace_live.ps1` دورة مصطنعة كاملة على FastAPI 8000 وGemma 4؛ سجل المشروع المؤقت، أظهر `README.md` و`src/hello.py`، قرأ الوكيل الملف واستشهد به، ثم أعاد `propose_file_change` معاينة تحديث لـ`README.md` مع بقاء الملف دون تغيير؛ ألغيت الجلسة والتسجيل وحُذف المجلد. أداة Computer Use الحالية لم تعرض أي تطبيق Windows أصلي؛ PID 1328 من مسار البناء الحالي بلا HWND، والتقاط تبويب الويب 5303 انتهى بمهلة بينما 5305 ظهر أبيض. إعادة تشغيل نفس verifier بتاريخ 2026-10-07 أكدت صحة /health، التسجيل، قائمة الملفات، والقراءة مع نجاحها حتى مرحلة المعاينة، لكنها فشلت عندها: Gemma أعادت `tool=local-llm` بدل `propose_file_change` رغم retry بـ`tool_choice` القسري؛ السكريبت نظّف تسجيل المشروع والجلسة والملفات التجريبية. تحديث 2026-10-07: قصّرت retry ليعرض أداة المعاينة وحدها مع طلب المستخدم الأصلي، وأضفت خطأ 502 واضحًا بدل إرجاع إجابة نصية على أنها إنجاز. نجحت 27/27 اختبارات الوكيل، ثم نجح verifier كاملًا على FastAPI معزول 8101 وGemma 4: تسجيل المجلد، إظهار الملفين، قراءة `src/hello.py`، ومعاينة تحديث `README.md` عبر `propose_file_change` (8 أسطر diff) وبقاء الملف دون تعديل. أُوقف خادم الاختبار وحُذفت بياناته المؤقتة. يبقى اختبار فتح المشروع والتفاعل اليدوي داخل نافذة Windows غير منجز.
- [ ] تجربة `flutter run` التفاعلية عبر السكريبت المحلي ما زالت معلقة. أعيد بناء Debug بنجاح باستخدام SDK معزول، لكن توجد عدة عمليات `flutter_app` من جلسات ومسارات مختلفة؛ لم أغلقها، والسكريبت يرفض `flutter run` عندما تكون هذه النسخ مفتوحة. البناء والتحليل واختبارات Flutter ليست بديلًا عن التشغيل التفاعلي؛ يلزم إغلاق جلسات Debug بعد حفظ ما يلزم ثم تشغيل السكريبت. فحص 2026-10-07: لا يظهر في جرد Computer Use تطبيق أصلي قابل للتحديد، وتعذر التقاط نافذة Windows؛ لا أعد تشغيل API/الوكيل الحي بديلًا عن تجربة Flutter التفاعلية. رفضت محاولة `run_windows_debug_local.ps1` بتاريخ 2026-10-07 التشغيل قبل البناء/الفتح لأن تسع عمليات `flutter_app` كانت قائمة (1328، 7232، 12352، 33624، 35400، 39440، 43856، 44280، 55860)؛ بقيت دون إغلاق. أظهر جرد CUA صفر تطبيقات Windows أصلية قابلة للتحديد، لذا لا يوجد تحقق يدوي للواجهة بعد.
7. [x] اختيار مساحة عمل وعرض الملفات المدعومة وتحديد ملفات للسؤال؛ التحقق من المجلدات والملفات على الخادم.
8. [x] إظهار انتقالات تقدم الوكيل أثناء العمل وربطها بحالات التنفيذ الفعلية عبر SSE؛ اختبار API حي لمسار الحاسبة. (2026-10-03: عبر FastAPI على 8100 وجلسة loopback، اختار Gemma 4 أداة `calculator` لمهمة 17×23، سجّل خطوة واحدة `completed` وأعاد 391.)