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).