منهجية التحقق
هذا الدليل لا يوزع مفاتيح ولا يخزنها ولا يمرر طلباتك عبر خادم وسيط. خذ مفتاحك من المزود الرسمي فقط.
قبل النشر
- فتح التوثيق الرسمي وصفحة الأسعار والتأكد أن الطبقة المجانية ما زالت موجودة وأن النموذج ما زال متاحا بنفس الاسم والإصدار.
- التأكد من نوع المجانية، وعدم تصنيف رصيد تجريبي على أنه مجاني دائم أبدا.
- تجربة نقطة مثال عند الإمكان، أو التأكد من التوثيق وصفحة حالة المزود عند تعذر التجربة دون مفتاح مدفوع.
- تسجيل تاريخ التحقق ومصدر كل رقم، وتاريخ التحقق السعري منفصلا عن تاريخ فحص التوفر.
الفرق بين أنواع المجانية
- طبقة مجانية دائمة: حد مجاني متجدد، لا ينتهي بانتهاء رصيد أولي.
- رصيد تجريبي مؤقت: مبلغ أو حصة أولية تنتهي، وبعدها يصبح الاستخدام مدفوعا أو متوقفا.
- فترة تجريبية محدودة: إتاحة مجانية لفترة زمنية محددة فقط.
- غير مؤكد: لم يُفحص الرقم من مصدر رسمي بعد، ولا يُعامل كحقيقة.
درجات التحقق
- قيد التحقق: لم يُفحص الإدخال من مصدر رسمي بعد، وكل حدوده غير مؤكد.
- موثق جزئيا: ثبت جزء محدد من المصدر الرسمي نفسه، مثل نوع المجانية وحد عددي في صفحة الأسعار، وبقيت حقول أخرى غير مؤكدة، ويُذكر مصدر التحقق وملاحظته في صفحة التفاصيل نفسها.
- موثق: ثبتت كل الحقول الأساسية من المصدر الرسمي، ولا يُمنح هذا الوسم ما دام حقل أساسي غير مثبت.
- المصادر الثانوية لا تثبت شيئا وحدها، وصفحة منتج استهلاكي ليست دليلا على API، وسعر صفر لنموذج واحد ليس إعلانا لطبقة مجانية.
المؤقت للعروض المؤقتة
- العدّاد الحي يظهر فقط عند وجود تاريخ انتهاء عام موثّق من المصدر الرسمي، ويُحدَّث كل دقيقة دون إعادة تحميل الصفحة، ويُبرز العرض الذي ينتهي خلال أقل من 7 أيام.
- إذا كان تاريخ الانتهاء غير مؤكد، تُعرض عبارة «تاريخ انتهاء غير مؤكد» ولا يُخترع أي عدّاد أو تاريخ.
- العرض المنتهي يُخفى من التصفية الافتراضية ويُعرض باهتا في صفحته، ويجب أن يحصل على إدخال في سجل التغييرات، ولا يُحذف بصمت أبدا.
بيئة تنفيذ النماذج بمفتاح الزائر: قواعد أمان صارمة
Model Execution Runtime
- الموقع ثابت بلا خادم، فالمفتاح يخرج من متصفح الزائر مباشرة إلى المزود فقط، ولا يمر عبر أي خادم تابع لهذا الموقع، ولا يُرسل في أي رابط، ولا يُسجَّل في أي سجل.
- حقل المفتاح من نوع كلمة مرور مع إظهار وإخفاء وزر مسح، وإكمال تلقائي معطّل، ويعيش افتراضيا في ذاكرة الصفحة فقط.
- التذكّر في المتصفح اختياري صريح عبر خانة اختيار، ويستخدم localStorage في جهاز الزائر فقط، لا لدينا، ويمكن مسحه في أي وقت.
- الاستخدام يُحسب على حصة الزائر الخاصة، وقد يكلف مالا بعد نفاد الطبقة المجانية، وهذا التحذير ظاهر قبل أي توليد.
- لا يُفعَّل زر توليد إلا بصيغة طلب موثّقة: صيغة متوافقة مع OpenAI للمحادثة والصور، أو صيغة ElevenLabs للصوت. أي مزود غير موثّق الصيغة يعرض عبارة «صيغة هذا المزود غير موثقة بعد» بدلا من زر قد يفشل.
- عند فشل الاتصال بسبب CORS، تُعرض رسالة مفهومة تشرح أن المزود لا يسمح بطلبات المتصفح، مع اقتراح التجربة من خادم الزائر الخاص أو أداة API.
- قبل أي طلب إلى المزود، تعمل طبقة WebAssembly محلية في المتصفح (public/runtime.wasm) على تحليل نص الطلب فقط: عدد الحروف والكلمات، وتقدير تقريبي للرموز بصيغة قسمة الحروف على 4 مع التقريب لأعلى (تقدير فقط، وليس رمز أي مزود، ولا يُستخدم للفوترة)، وتنظيف النص من حروف التحكم ASCII عدا السطر الجديد والجدولة وإرجاع المؤشر، ويُرسل النص المنظّف فقط. هذه الطبقة لا تشغّل نماذج محلياً، ولا تستدل، ولا تخزّن شيئاً، ولا ترسل النص إلى أي مكان آخر. إذا فشل تحميل WebAssembly، تعمل الحسابات نفسها في JavaScript مع ملاحظة صريحة بذلك.
بلاغات الزوار دون خادم خلفي: كيف تعمل
الموقع ثابت بلا خادم، لذلك لا يوجد نموذج إرسال يُخزَّن لدينا. في كل صفحة تفاصيل، زر الإبلاغ يفتح Issue جديدة معبأة مسبقا في مستودع المشروع على GitHub، بعنوان [Report]: اسم المزود - معرف الإدخال ووسم visitor-report ونموذج يطلب الحد القديم والجديد ورابط المصدر الرسمي وتاريخ رؤية التغيير. لا تضع أي مفتاح حقيقي في البلاغ أبدا.
البلاغات تُفتح الآن في مستودع المشروع العام على GitHub، عبر زر الإبلاغ في صفحة التفاصيل.
بروتوكول Muse اليومي لبلاغات الزوار
- جلب البلاغات المفتوحة التي تحمل وسم
visitor-reportعبر GitHub API، بعد وجود المستودع الحقيقي. - التحقق من كل بلاغ مقابل التوثيق الرسمي وصفحة الأسعار أو إعلان المزود، لا مقابل البلاغ وحده ولا مقابل مصادر غير رسمية.
- عند ثبوت التغيير: تحديث
src/data/apis.jsonوsrc/data/changelog.jsonبالحد القديم والجديد والمصدر، ثم إغلاق البلاغ بتعليق يذكر ما حُدث. - عند عدم الثبوت: إغلاق البلاغ بتعليق يذكر سبب الرفض والمصدر الرسمي الذي اعتُمد، دون تطبيق أي تغيير.
- لا يُغلق أي بلاغ ولا يُطبَّق أي تقرير دون تحقق من مصدر رسمي، ولا يُحذف أي بلاغ من السجل العام للمستودع.
الفحص الذكي متعدد المستويات و needs_agent_search
- المستوى الأول: فحص صلاحية الروابط، وبصمة محتوى SHA-256 لنص صفحات التسعير والتوثيق، مقارنة بملف
src/data/content-hashes.json. أي تغير في البصمة يُسجلcontent_changedفقط، ولا يُطبَّق تلقائيا على البيانات أبدا. - المستوى الثاني: إذا حُظر الجلب (403 أو 429 أو مهلة) أو كانت الصفحة تعتمد كليا على JavaScript ولا تعيد نصا مفيدا، تُسجل حالة
needs_agent_searchمع الرابط والسبب، لا فشل صامت ولا حكم كاذب بأن المزود متوقف. - عند وجود
needs_agent_search، يستخدم Muse أدوات البحث والويب للتحقق من الأسعار والحدود والإعلانات من المصادر الرسمية مباشرة، ويُحدِّث البيانات من المصدر الرسمي فقط، ثم يُحدِّث ملف البصمات بعد التحقق. - مخرجات الفحص المهيكلة في
health-report.json(ملف مؤقت غير متتبع في Git) تحمل لكل إدخال: حالة الرابط، حالة البصمة، وعلامةneeds_agent_searchوسببها، مع ملخص كامل. - تحديث البصمات يتم فقط بأمر
--update-hashesبعد التحقق الرسمي، ولا يُستخدم أبدا لقبول تغيير دون فحص.
دمج أيام عدم التغيير في سجل التغييرات
- إذا كان آخر إدخال في السجل تأكيد عدم تغيير، وجاء يوم جديد بلا تغيير، لا يُضاف كائن جديد، بل يُمدَّد نفس الإدخال بحقل
date_endوعدادconsecutive_days، عبر سكربتnode scripts/changelog.mjs no-change [YYYY-MM-DD]. - الإدخالات القديمة بلا هذين الحقلين ما زالت تُعرض سليمة كيوم واحد، وتاريخ آخر تحديث في الرئيسية يُحسب من أحدث تاريخ بما فيه
date_end. - في صفحة السجل، شريط حالة أخضر علوي يذكر آخر فحص وعدد الأيام المتتالية، والتغييرات الحقيقية تظهر كبطاقات بارزة، وأيام عدم التغيير المتتالية تظهر في سطر واحد مدمج.
بعد النشر: التحديث اليومي مهمة Muse، لا مهمة صاحب الموقع
صاحب الموقع لا يُطلب منه إدخال بيانات يوميا. التحديث اليومي ينفذه Muse وحده، بالخطوات التالية، دون أي خطوة يدوية من صاحب الموقع:
- تشغيل سكربت الفحص
npm run health-checkومراجعة تقريره المهيكلhealth-report.json، بما فيه إدخالاتcontent_changedوneeds_agent_search. - جلب بلاغات الزوار المفتوحة بوسم
visitor-reportوالتحقق منها من المصدر الرسمي قبل أي تطبيق أو إغلاق، حسب البروتوكول أعلاه. - مراجعة إبلاغات الزوار وإعلانات المزودين وصفحات الأسعار، وأي تغيير مكتشف يُنشر في نفس اليوم، زيادة أو حذفا أو تعديلا، مع الحد القديم والجديد والمصدر الرسمي.
- تحديث ملفي البيانات فقط:
src/data/apis.jsonوsrc/data/changelog.json، ثم إعادة البناء. - فحص توفر أسبوعي للنقاط العامة، وإعادة تحقق سعرية شهرية كاملة، ضمن نفس الدورة التي يديرها Muse.
- أي API لم يُعاد التحقق منه سعريا لأكثر من 30 يوما يُوسم بأنه يحتاج إعادة تحقق.
- أي نموذج موقوف يُخفى من التصفية الافتراضية، مع بقاء صفحته للتوثيق والبدائل.
- إعداد مهمة مجدولة يومية (cron) عند الإطلاق هو من مهام الوكيل الرئيسي، وليس خطوة على صاحب الموقع.