From b9796abaf0a80ed42c9b41d59f5af341a6310235 Mon Sep 17 00:00:00 2001 From: Hamza Ayed Date: Sun, 4 Oct 2026 03:37:49 +0300 Subject: [PATCH] fix: keep Windows UI startup independent of notifications --- SovereignAI-Starter/ROADMAP.md | 1 + SovereignAI-Starter/flutter_app/lib/main.dart | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/SovereignAI-Starter/ROADMAP.md b/SovereignAI-Starter/ROADMAP.md index e4fe8a4..6443d0a 100644 --- a/SovereignAI-Starter/ROADMAP.md +++ b/SovereignAI-Starter/ROADMAP.md @@ -191,6 +191,7 @@ - [x] توضيح تجربة المشاريع وإصلاح سياق الملف المحدد (2026-10-03): نقطة `/v1/agent/workspace/files` على الخدمة الحية سردت 121 ملفًا من مجلد المشروع المسموح. كشف الاختبار الأول أن Gemma قد تتجاهل سؤال الملف إذا وصلها مقتطف طويل؛ أضيف اختيار مقاطع مرتبطة بكلمات السؤال ضمن سقف 4,000 حرف، ورسالة موجزة بلا مخطط أدوات في مهارة «شرح الكود» عند إرفاق ملفات محددة، ودرجة حرارة 0. اختبارات مهارات الوكيل 20/20 ومجموعة Python الكاملة 90/90. بعد إعادة تشغيل FastAPI الحالي عبر `start-api.ps1` (PID 51376، مع قاعدة SQLite الفعلية نفسها)، أجاب `/v1/agent/run` عن `README.md` بـ`gemma4:e2b` مع الاستشهاد بالمصدر. تسجيل المجلد محلي؛ والأمر/الاختبار الآلي داخل المشروع ما زالا غير متاحين حتى اكتمال عزل نظام التشغيل. - [x] توضيح إضافة المشروع في واجهة Windows/الويب (2026-10-04): على المساحات الواسعة يظهر زر نصّي «إضافة مجلد مشروع»، وفي القائمة الجانبية صار الإجراء «إضافة مجلد مشروع موجود» لتوضيح أنه يسجل مجلدًا موجودًا ولا ينشئ مشروعًا من الصفر. بقي الزر ظاهرًا عند إخفاء القائمة الجانبية؛ اجتازت اختبارات Flutter السبعة وتحليل Flutter بلا ملاحظات، وبُني Windows Debug من نسخة `%LOCALAPPDATA%` بنجاح خلال 71.3 ثانية. هذا تحسين للواجهة فقط: الوكيل ما زال يقرأ ويبحث ويقترح تعديلًا بموافقة المستخدم، ولا يشغّل أوامر المشروع أو اختباراته حتى يكتمل العزل المطلوب. +- [x] إصلاح بدء نافذة Windows Debug (2026-10-04): كان `main()` ينتظر تهيئة الإشعارات قبل `runApp()`، فيمكن أن تبقى نافذة Flutter مخفية إذا تعثر plugin الإشعارات. صار `runApp()` يسبق التهيئة وتعمل الإشعارات بالخلفية مع تسجيل الخطأ. بعد بناء 74.5 ثانية بدأت العملية PID 11484 بنافذة Windows فعلية بعنوان `Mithqal AI` ومقبض نافذة غير صفري، وكانت مستجيبة؛ أعاد `/health` على 8000 و8100 HTTP 200 مع Gemma4 E2B وSQLite والوكيل. اجتازت اختبارات Flutter السبعة وتحليل Flutter. التهيئة الفاشلة قد تعطل الإشعارات وحدها ولا توقف الواجهة. ## ترتيب التنفيذ القادم 1. [x] التحقق من إجراءات المحادثة الجديدة على Windows Debug (2026-10-01): تشغيل API وGemma وGroq، اختبار صوت من الميكروفون حتى التفريغ والرد والحفظ في SQLite، نجاح اختبار الواجهة على نافذة 800px ونجاح `flutter analyze`. diff --git a/SovereignAI-Starter/flutter_app/lib/main.dart b/SovereignAI-Starter/flutter_app/lib/main.dart index 70e714e..0c004f7 100644 --- a/SovereignAI-Starter/flutter_app/lib/main.dart +++ b/SovereignAI-Starter/flutter_app/lib/main.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:record/record.dart'; @@ -15,7 +17,6 @@ const _night = Color(0xFF101A18); Future main() async { WidgetsFlutterBinding.ensureInitialized(); - await CompletionNotificationService.instance.initialize(); final api = ApiRepository( baseUrl: const String.fromEnvironment( 'API_BASE_URL', @@ -34,6 +35,16 @@ Future main() async { ), ), ); + unawaited(_initializeNotifications()); +} + +Future _initializeNotifications() async { + try { + await CompletionNotificationService.instance.initialize(); + } catch (error, stackTrace) { + debugPrint('Notification initialization failed: $error'); + debugPrintStack(stackTrace: stackTrace); + } } class SovereignApp extends StatelessWidget {