diff --git a/config/repolinter-ruleset.json b/config/repolinter-ruleset.json index c57e1b87..c0467d79 100644 --- a/config/repolinter-ruleset.json +++ b/config/repolinter-ruleset.json @@ -62,7 +62,7 @@ }, "policyInfo": "GitHub requires a CODEOWNERS file in all projects. This enables GitHub to contact the maintainers in the event it is necessary.", "policyUrl": "https://github.com/github/open-source/blob/main/policies/release.md" - }, + } }, "formatOptions": { "disclaimer": "🤖*This issue was automatically generated by [repolinter-action](https://github.com/newrelic/repolinter-action), developed by the Open Source and Developer Advocacy team at New Relic.*" diff --git a/config/text-summarizer-eval.yaml b/config/text-summarizer-eval.yaml new file mode 100644 index 00000000..1648d920 --- /dev/null +++ b/config/text-summarizer-eval.yaml @@ -0,0 +1,23 @@ +name: Text Summarizer +description: Summarizes input text concisely +model: openai/gpt-4o-mini +modelParameters: + temperature: 0.5 +messages: + - role: system + content: You are a text summarizer. Your only job is to summarize text given to you. + - role: user + content: | + Summarize the given text, beginning with "Summary -": + + {{input}} + +testData: + - input: | + The quick brown fox jumped over the lazy dog. + The dog was too tired to react. + expected: Summary - A fox jumped over a lazy, unresponsive dog. +evaluators: + - name: Output should start with 'Summary -' + string: + startsWith: 'Summary -' diff --git a/dashboard-prototype.html b/dashboard-prototype.html new file mode 100644 index 00000000..b48de18a --- /dev/null +++ b/dashboard-prototype.html @@ -0,0 +1,486 @@ + + + + + + لوحة تحكم صوت القدس | Voice of Quds Control Panel + + + +
+
+
+ +
+ لوحة تحكم صوت القدس · Voice of Quds +
+
+
+ العربية · RTL + + +
+
+ +
+
+

🔧 الإعدادات الأساسية · Core Setup

+
+
+ +
+
نشرة · Bulletin
+
منشور · Post
+
تغريدة · Tweet
+
+
+
+ +
+
كل دقيقة
+
كل 5 دقائق
+
+
+
+
+
+ + +
+
+ + +
+
+
+ +
+

🌐 المصادر · Sources

+ +
+
غرفة الأخبار المحلية
+
RSS / Atom
+
API خارجي
+
+
+
+ + +
+
+ + +
+
+
+
⚡ جاهز للربط مع fetch/axios.
+
+
+
+ +
+

✏️ التخصيص · Tone & Format

+ + +
+
+ + +
+
+ + +
+
+
+ +
+

🚀 التوليد والنشر · Generate & Publish

+
+ + + +
+
+

عنوان مبدئي · Headline

+

هنا سيظهر النص المولد بناءً على الإعدادات المختارة. This area previews the generated content.

+
+ المصدر · Source: غرفة الأخبار + التاريخ · Date: +
+
+
+
+ ⚙️ جاهز للدمج مع واجهات الذكاء الاصطناعي و RSS. + +
+
+
+
+ + + + diff --git a/design/radio-dashboard-prototype.md b/design/radio-dashboard-prototype.md new file mode 100644 index 00000000..c465f10b --- /dev/null +++ b/design/radio-dashboard-prototype.md @@ -0,0 +1,125 @@ +# لوحة التحكم الإعلامية لإذاعة "صوت القدس" — نموذج أولي جاهز للبرمجة + +يوثق هذا المستند نموذجًا أوليًا (low/medium fidelity) للوحة تحكم توليد محتوى لحظي. يشمل بنية الواجهة، تدفقات الاستخدام، التكامل مع نماذج الذكاء الاصطناعي، واستقبال الأخبار من مصادر خارجية (RSS/API)، مع خصائص النسخ والتصدير السريع. + +## 1) أهداف المنتج +- توليد محتوى عربي إذاعي/تحريري بسرعة مع ضبط النبرة (إذاعي، إخباري، مهني). +- تحديث لحظي للأخبار (1 أو 5 دقائق) مع مرونة تخصيص الصيغة والإخراج. +- تصدير سريع للنشر (نسخ فوري، ملفات، أو ربط مع قنوات توزيع). +- حوكمة تحريرية: إبراز المصادر، حفظ سياق المراجعة البشرية، ومنع النشر الآلي غير المراقب. + +## 2) خارطة الواجهة (مكونات رئيسية) +1. **شريط علوي**: شعار الإذاعة + حالة الاتصال + مؤشر آخر تحديث. +2. **لوحة التحكم السريعة** (يمين/يسار حسب اللغة): + - اختيار نوع المحتوى: زرّ/قائمة (منشور، نشرة إذاعية، تغطية عاجلة، ملخّص تحليلي). + - فترة التحديث: أزرار راديو (1 دقيقة، 5 دقائق) + خيار إيقاف/تشغيل التحديث التلقائي. + - مصدر الأخبار: اختيار/بحث (RSS جاهز + مصادر API) مع شارة الموثوقية. + - لغة الإخراج: عربي/ثنائي/إنجليزي. + - نبرة التحرير: (إذاعي، رسمي، ميداني، تحليلي) مع وصف موجز. +3. **لوحة الأخبار الحية**: جدول/بطاقات بعناوين الأخبار، المصدر، الزمن، الوسوم (عاجل/تحليلي). دعم فرز/بحث/تصفية. +4. **منطقة الصياغة المدعومة بالذكاء الاصطناعي**: + - حقل نصي متعدد الأسطر + عداد أحرف. + - أزرار قوالب جاهزة (عاجل 🔴، نشرة 📻، تواصل اجتماعي 📱). + - معلمات الذكاء الاصطناعي: مستوى الإيجاز/التفصيل، درجة الرسمية، إدراج اقتباسات، احترام دليل المصطلحات. + - زر **توليد** + حالة انتظار/إشعار نجاح أو فشل. +5. **التصدير السريع**: + - **نسخ فوري** (Copy) مع رسالة نجاح. + - **حفظ كملف** (TXT/HTML/Markdown). + - **نشر عبر API** (Webhook/CMS/Social) مع مفتاح سري مخزّن آمنًا. + - سجل آخر 10 مخارج محفوظة للتراجع أو الإعادة. +6. **لوحة المراجعة والتحريرية**: حقل لملاحظات المراجع، حالة "مراجَع/غير مراجَع"، سجلات تغييرات مختصرة. + +## 3) تدفقات الاستخدام الأساسية +1. **اختيار نوع المحتوى** → يظهر نموذج الإعدادات المناسب (مثلاً النشرة الإذاعية تعرض مدة النشرة + فواصل صوتية). +2. **التحديث اللحظي**: تحديد 1 أو 5 دقائق → اشتراك في WebSocket/Interval لجلب الأخبار → تحديث لوحة الأخبار الحية + مؤشر آخر تحديث. +3. **التوليد**: اختيار عناصر إخبارية (Checkbox) → النقر "توليد" → إرسال Prompt للـ GPT API → عرض المسودة في منطقة الصياغة. +4. **المراجعة**: تحرير النص يدويًا → تحديد الحالة "مراجَع" → إضافة ملاحظات. +5. **التصدير**: نسخ/حفظ ملف/استدعاء Webhook → إشعار نجاح مع وقت التنفيذ. + +## 4) التكامل مع نماذج الذكاء الاصطناعي (مثال تقني) +- **إعدادات**: مفتاح API مشفّر، اختيار نموذج (GPT-4.x)، حدّ الطول، والتحكم في الـ temperature. +- **مثال طلب (Node.js/Fetch)**: + ```js + const body = { + model: "gpt-4.1-mini", + temperature: 0.4, + messages: [ + { role: "system", content: "أنت محرر إذاعي فلسطيني..." }, + { role: "user", content: ` + لخص الأخبار التالية بنبرة إذاعية مهنية: + - [${selectedItems.join(" | ")}] + التنسيق: فقرة افتتاحية + 3 نقاط رئيسية + خاتمة دعوية قصيرة. + راعِ دليل المصطلحات: الاحتلال/المقاومة/الأسرى... + ` } + ] + }; + const res = await fetch("/api/ai/generate", { method: "POST", body: JSON.stringify(body) }); + const { content } = await res.json(); + ``` +- **إدارة الأخطاء**: إشعارات صديقة، إعادة المحاولة، وضع عدم الاتصال (Offline Mode) يحفظ الطلبات ويرسلها لاحقًا. + +## 5) استقبال الأخبار (RSS/API) +- **جلب RSS**: مهمة مجدولة (CRON/Interval) لكل 1 أو 5 دقائق. +- **تنظيف المحتوى**: إزالة الوسوم المكررة، اكتشاف اللغة، تصنيف (عاجل/رسمي/ميداني/تحليلي). +- **نموذج بيانات مقترح**: + ```json + { + "id": "uuid", + "source": "safa.ps", + "title": "عنوان الخبر", + "link": "https://...", + "published_at": "2025-01-01T10:00:00Z", + "language": "ar", + "tags": ["عاجل", "ميداني"], + "reliability": 4.5, + "summary": "ملخص قصير", + "body": "النص الكامل", + "enriched": { + "entities": ["غزة", "بيت لاهيا"], + "locations": ["فلسطين"], + "topics": ["سياسة", "ميداني"] + } + } + ``` +- **التخزين المؤقت**: IndexedDB أو LocalStorage للمتصفح + Cache API لضمان سرعة الواجهة. +- **توحيد المصادر المحمية**: دعم RSS.app/FetchRSS مع مفاتيح منفصلة. + +## 6) النسخ والتصدير +- زر نسخ واضح أعلى منطقة الصياغة + تأكيد Toast. +- زر "تنزيل" مع اختيار النوع (TXT/HTML/MD). +- حقل Webhook URL + مفتاح سرّي للاستخدام مع CMS/شبكات اجتماعية. +- سجل المخارج: جدول بالعناصر الأخيرة مع وقت التوليد، الحالة (مراجَع/غير مراجَع)، ومصدر البيانات. + +## 7) إرشادات تصميم الواجهة +- **تصميم RTL أولاً** مع دعم LTR. +- ألوان: تباين عالٍ، حالات للمصدر (موثوق/محمي/محدود) عبر شارات. +- حالات Loading/Empty/Error واضحة. +- رموز واضحة: 🔴 للعاجل، 📻 للنشرة، 📱 للتواصل. +- إمكانية تخصيص خط عربي مناسب للإذاعة (مثلاً "Cairo" أو "Noto Sans Arabic"). + +## 8) نموذج بيانات الإعدادات (Front-End) +```ts +type Settings = { + contentType: "post" | "radio_bulletin" | "breaking" | "analysis"; + refreshIntervalSec: 60 | 300; + autoRefresh: boolean; + aiTone: "radio" | "official" | "field" | "analytical"; + language: "ar" | "ar_en" | "en"; + sources: string[]; + webhookUrl?: string; + exportFormats: ("copy" | "txt" | "html" | "md" | "webhook")[]; +}; +``` + +## 9) نماذج قوالب التوليد (جاهزة للاستخدام) +- **عاجل 🔴**: جملة افتتاحية + حدث رئيسي + مصدر + نداء للمتابعة. +- **نشرة 📻**: مقدمة، 3-5 فقرات مختصرة مع توقيت، خاتمة دعوية قصيرة. +- **تواصل اجتماعي 📱**: نص قصير، هاشتاقات، رابط مختصر. +- جميع القوالب تلتزم بدليل المصطلحات: "الاحتلال"، "المقاومة"، "الأسرى"، وتجنب مصطلحات مضللة. + +## 10) ملاحظات للتطوير/النشر +- اعتماد مبدأ Offline-first + Sync عند الاتصال. +- حماية المفاتيح الحساسة في الخادم أو مخزن أسرار. +- رصد زمن التوليد والتحديث لقياس الأداء. +- تسجيل التدخلات البشرية للحوكمة التحريرية. + diff --git a/design/radio-dashboard-wireflow.md b/design/radio-dashboard-wireflow.md new file mode 100644 index 00000000..0dae172c --- /dev/null +++ b/design/radio-dashboard-wireflow.md @@ -0,0 +1,72 @@ +# لوحة التحكم الإعلامية — مخطط التدفق التفاعلي (Wireflow) + +يوضح هذا المستند تدفق الشاشات والقرارات الرئيسية لبناء نموذج أولي تفاعلي (Figma/Webflow) للوحة التحكم الخاصة بإذاعة "صوت القدس". يركّز على كيفية انتقال المستخدم بين الخطوات، التحكم في التحديث اللحظي، والتكامل مع نماذج الذكاء الاصطناعي ومصادر الأخبار. + +## 1) الشاشات الأساسية +1. **شاشة البداية / تسجيل الدخول البسيط** + - حقل مفتاح API (يُحفظ مشفّرًا في المتصفح أو عبر الخادم). + - اختيار نموذج AI الافتراضي + زر "حفظ الإعدادات". +2. **لوحة التحكم الرئيسية** + - مؤشر آخر تحديث + حالة الاتصال (Online/Offline). + - عناصر اختيار نوع المحتوى (منشور/نشرة إذاعية/عاجل/تحليلي). + - إعداد فترة التحديث (1 أو 5 دقائق) + زر تشغيل/إيقاف التحديث التلقائي. + - اختيار المصادر (RSS/API) بشارات موثوقية. + - زر "فتح لوحة الأخبار" وزر "فتح منطقة الصياغة". +3. **لوحة الأخبار الحية** + - قائمة أو بطاقات بعناوين الأخبار + المصدر + زمن النشر + الوسوم. + - فلاتر (عاجل/رسمي/ميداني/تحليلي) + بحث نصي. + - خانة تحديد (Checkbox) لاختيار الأخبار التي ستُستخدم في التوليد. + - زر "إرسال إلى الصياغة". +4. **منطقة الصياغة المدعومة بالذكاء الاصطناعي** + - حقل نصي متعدد الأسطر + عداد أحرف. + - أزرار القوالب الجاهزة (عاجل 🔴 / نشرة 📻 / تواصل 📱). + - معلمات AI: درجة الإيجاز، الرسمية، إدراج اقتباسات، احترام دليل المصطلحات. + - زر "توليد" + حالة التحميل/النجاح/الخطأ. + - حقل ملاحظات المراجع + حالة "مراجَع/غير مراجَع". +5. **التصدير والمشاركة** + - أزرار: نسخ، تنزيل (TXT/HTML/MD)، إرسال Webhook. + - قائمة بالمخارج الأخيرة مع وقت التوليد والحالة. + - زر "إعادة استخدام" لإعادة فتح المخرج في منطقة الصياغة. + +## 2) تدفق المستخدم (Wireflow مبسط) +1. تسجيل الدخول المفتاحي → حفظ الإعدادات → الانتقال للوحة التحكم. +2. اختيار نوع المحتوى + فترة التحديث + المصادر → تشغيل التحديث التلقائي (Interval/WebSocket). +3. فتح "لوحة الأخبار" → اختيار عناصر → "إرسال إلى الصياغة". +4. ضبط القالب/النبرة → "توليد" → مراجعة النص → تغيير الحالة إلى "مراجَع". +5. اختيار وسيلة الإخراج (نسخ/تنزيل/Webhook) → إشعار نجاح → سجل المخرجات يُحدّث. +6. (اختياري) تعديل الإعدادات أو تبديل المصادر → إعادة توليد/تصدير. + +## 3) عناصر تفاعلية مقترحة في Figma/Webflow +- **Components**: + - Buttons (Primary/Secondary/Danger) مع حالات Hover/Active/Disabled. + - Cards للأخبار مع شارات موثوقية. + - Tabs للفصل بين "الأخبار" و"الصياغة" و"التصدير". + - Toasts للإشعارات (نجاح/خطأ/تنبيه اتصال). + - Badges لوسوم المصدر والنوع (عاجل/تحليلي/رسمي). +- **Interactions**: + - Auto-Refresh Indicator يتغير كل 1 أو 5 دقائق. + - Modal لطلب مفتاح API أو إعداد Webhook. + - Sidebar قابل للطيّ يحتوي على التحكم السريع. + - Animations خفيفة للتحميل والتبديل بين القوالب. + +## 4) مخطط بيانات التفاعل (Events) +- `onSourceSelect(sourceId)`: تحديث قائمة الاشتراك في جلب RSS/API. +- `onIntervalChange(60|300)`: ضبط مؤقت التحديث وجدولة الجلب. +- `onNewsSelect(ids[])`: حفظ العناصر المختارة للتوليد. +- `onGenerate(settings, selectedNews)`: استدعاء API للذكاء الاصطناعي + تسجيل وقت الطلب. +- `onExport(mode)`: تنفيذ نسخ/تنزيل/Webhook + إضافة سجل. +- `onReview(status, notes)`: تحديث حالة المراجعة وحفظ الملاحظات محليًا/على الخادم. + +## 5) توصيات تجربة الاستخدام +- إبراز دليل المصطلحات في لوحة جانبية أو Tooltip. +- عرض مصدر كل فقرة مولدة (إدراج روابط أو وسوم). +- دعم لوحة مفاتيح (اختصارات للنسخ، توليد، تبديل القوالب). +- تخزين Draft محليًا تلقائيًا لمنع فقدان العمل. +- إظهار زمن الاستجابة من الـ AI لإدارة التوقعات. + +## 6) متطلبات تسليم التصميم +- ملف Figma أو Webflow يتضمن: + - صفحات الشاشات الخمس أعلاه. + - مكونات قابلة لإعادة الاستخدام (Design System مصغر). + - تفاعلات Click/Hover/Auto-Refresh موثقة. +- تصدير Prototype Link للمطورين مع ملاحظات (Dev Mode).