إنتقل إلى المحتوى الرئيسي

دعم عدم الاتصال

AISCouncil هو تطبيق ويب تقدمي (PWA) يعمل دون اتصال بعد الزيارة الأولى. التطبيق بأكمله هو ملف HTML واحد بدون تبعيات خارجية، لذا يمكن تخزينه مؤقتًا بالكامل بواسطة عامل خدمة المتصفح.

تطبيق الويب التقدمي (PWA)

يسجل التطبيق عامل خدمة (sw.js) يخزن جميع الأصول الثابتة مؤقتًا عند أول تحميل. في الزيارات اللاحقة، يُحمّل التطبيق فورًا من الذاكرة المؤقتة -- حتى بدون اتصال إنترنت.

التثبيت كتطبيق

Chrome / Edge (سطح المكتب):

  1. زُر aiscouncil.net
  2. انقر أيقونة التثبيت في شريط العناوين (أو انتقل لـ القائمة > "تثبيت AISCouncil")
  3. يفتح التطبيق في نافذته الخاصة، مع إدخال شريط المهام الخاص به

Chrome / Edge (أندرويد):

  1. زُر aiscouncil.net
  2. انقر قائمة المتصفح (ثلاث نقاط)
  3. اختر "إضافة إلى الشاشة الرئيسية" أو "تثبيت التطبيق"

Safari (iOS / macOS):

  1. زُر aiscouncil.net
  2. انقر زر المشاركة
  3. اختر "إضافة إلى الشاشة الرئيسية"
تلميح

عند تثبيته كـ PWA، يعمل التطبيق في وضع standalone -- بدون واجهة متصفح، تجربة ملء الشاشة، ويظهر كتطبيق أصلي في مبدل المهام.

استراتيجية التخزين المؤقت لعامل الخدمة

يستخدم عامل الخدمة استراتيجية stale-while-revalidate:

  1. الزيارة الأولى: جميع الأصول المخزنة مسبقًا تُنزّل وتُخزن في الذاكرة المؤقتة
  2. الزيارات اللاحقة: تُخدم النسخة المخزنة مؤقتًا فورًا (صفر زمن انتقال شبكة)، بينما يجلب عامل الخدمة نسخة محدثة في الخلفية
  3. الزيارة التالية بعد التحديث: تُخدم النسخة المحدثة من الذاكرة المؤقتة

هذا يعني أنك دائمًا تحصل على أوقات تحميل فورية، والتحديثات تصل بصمت في الخلفية.

ما يُخزّن مؤقتًا

يخزن عامل الخدمة هذه الملفات مسبقًا عند التثبيت:

الملفالغرض
/غلاف HTML (يعيد التوجيه لـ /index.html)
/index.htmlالتطبيق الكامل (~كل JS و CSS و HTML مضمّن)
/icon.svgأيقونة التطبيق المتجهة
/icon-192.pngأيقونة PNG 192x192 (شاشة أندرويد الرئيسية)
/icon-512.pngأيقونة PNG 512x512 (شاشات البداية، قابلة للقناع)
/favicon.icoأيقونة تبويب المتصفح
/manifest.webmanifestبيان PWA (الاسم، الأيقونات، لون السمة)

بالإضافة لذلك، أي طلب GET من نفس الأصل يجريه التطبيق سيُخزّن مؤقتًا عند أول جلب ويُخدم من الذاكرة المؤقتة في الطلبات اللاحقة (stale-while-revalidate).

ما لا يُخزّن مؤقتًا

الموردالسبب
استدعاءات LLM APIهذه تذهب مباشرة لواجهات API للمزودين (Anthropic، OpenAI، إلخ) وتتطلب اتصال إنترنت
تحديثات السجليجلب سجل النماذج من GitHub يتطلب شبكة، لكن التطبيق يعود للبيانات المخزنة/المضمنة
الموارد عبر الأصولفقط طلبات نفس الأصل تُخزّن مؤقتًا بواسطة عامل الخدمة
طلبات POST/PUT/DELETEفقط طلبات GET تُخزّن مؤقتًا
استدعاءات وكيل APIالطلبات لـ /v1/* مستثناة صراحةً من التخزين المؤقت

قدرات عدم الاتصال

عند عدم الاتصال، يمكنك:

  • تصفح المحادثات الموجودة -- جميع سجل المحادثات مخزن محليًا في IndexedDB
  • إدارة الملفات التعريفية -- إنشاء، تحرير، وحذف ملفات بوت تعريفية
  • عرض وتغيير الإعدادات -- جميع الإعدادات في localStorage
  • تصدير البيانات -- تنزيل ملف JSON للنسخة الاحتياطية
  • التبديل بين البوتات -- جميع إعدادات البوت مخزنة محليًا
  • قراءة المحادثات السابقة -- سجل الرسائل الكامل متاح

عند عدم الاتصال، لا يمكنك:

  • إرسال رسائل جديدة -- يتطلب استدعاء API لمزود LLM
  • تحديث سجل النماذج -- يتطلب الجلب من GitHub
  • تسجيل الدخول -- OAuth يتطلب اتصال شبكة
  • تثبيت برامج مصغرة -- يتطلب جلب البيان و HTML للدخول
معلومات

مستخدمو Ollama مع نسخة محلية لا يزالون يمكنهم المحادثة دون اتصال، لأن Ollama يعمل على localhost ولا يتطلب وصول إنترنت.

إصدار الذاكرة المؤقتة

يستخدم عامل الخدمة اسم ذاكرة تخزين مؤقت مُصدّر:

const CACHE = "ais-v1.0.0";

عندما تتغير سلسلة الإصدار (عند تحديث فاصل)، عامل الخدمة الجديد:

  1. ينشئ ذاكرة تخزين مؤقت جديدة بالاسم الجديد
  2. يخزن جميع الأصول مسبقًا في الذاكرة المؤقتة الجديدة
  3. يحذف جميع الذكريات المؤقتة القديمة عند التفعيل
  4. يطالب بجميع العملاء المفتوحين

هذا يضمن أن الكود المخزن المؤقت القديم يُنظف بعد التحديثات الرئيسية.

تحديث التطبيق

التحديثات تحدث تلقائيًا:

  1. عند زيارة الصفحة، يتحقق المتصفح مما إذا كان sw.js قد تغير
  2. إذا كان كذلك، يُثبّت عامل الخدمة الجديد في الخلفية
  3. عند تحميل الصفحة التالي (أو بعد إغلاق جميع التبويبات وإعادة فتحها)، يُفعّل عامل الخدمة الجديد
  4. النسخة الجديدة تُخدم الآن من الذاكرة المؤقتة
فرض التحديث

لفرض تحديث فوري: افتح DevTools > Application > Service Workers، انقر "Update" على عامل الخدمة المسجل، ثم أعد تحميل الصفحة. بدلاً من ذلك، اضغط Shift وانقر زر إعادة تحميل المتصفح لتجاوز الذاكرة المؤقتة.

بيان تطبيق الويب

ملف manifest.webmanifest يحدد كيف يظهر التطبيق عند تثبيته:

{
"name": "AISCouncil",
"short_name": "AISCouncil",
"description": "تحدث مع Claude أو GPT أو Grok -- بدون خادم، بدون إعداد.",
"start_url": "/",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#7c3aed",
"categories": ["productivity", "utilities"],
"icons": [
{ "src": "icon.svg", "sizes": "any", "type": "image/svg+xml" },
{ "src": "icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "icon-512.png", "sizes": "512x512", "type": "image/png" },
{
"src": "icon-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
الحقلالقيمةالغرض
displaystandaloneيعمل بدون واجهة المتصفح (شريط العناوين، التبويبات)
orientationanyيعمل في الوضع العمودي والأفقي
theme_color#7c3aedتمييز بنفسجي لشريط الحالة وشريط العنوان
background_color#000000خلفية شاشة البداية أثناء تحميل التطبيق

استكشاف الأخطاء

التطبيق يُظهر نسخة قديمة:

  • افتح DevTools > Application > Service Workers
  • انقر "Unregister" على عامل الخدمة القديم
  • أعد تحميل الصفحة

التطبيق لا يعمل دون اتصال:

  • تأكد من تسجيل عامل الخدمة (DevTools > Application > Service Workers)
  • تأكد من زيارة الصفحة مرة واحدة على الأقل أثناء الاتصال
  • تحقق من وجود الذاكرة المؤقتة (DevTools > Application > Cache Storage)
  • بعض المتصفحات في وضع التصفح الخاص/الخفي تعطل عمال الخدمة

موجه التثبيت لا يظهر:

  • يجب تقديم الصفحة عبر HTTPS (أو localhost)
  • يجب تسجيل عامل الخدمة وتفعيله
  • يجب أن يكون البيان صالحًا ومرتبطًا في <head> لـ HTML
  • يجب أن تكون قد زرت الصفحة مرتين على الأقل مع بعض الوقت بين الزيارات (ارشاد المتصفح)