Skip to content

استكشاف الأخطاء: الخدمة الخلفية

الخدمة الخلفية لا تبدأ

"Triggerfish is already running"

تظهر هذه الرسالة عندما يكون ملف السجل مقفلاً بواسطة عملية أخرى. على Windows، يُكتشف هذا عبر خطأ EBUSY / "os error 32" عندما يحاول كاتب الملف فتح ملف السجل.

الحل:

bash
triggerfish status    # تحقق مما إذا كانت هناك نسخة تعمل فعلاً
triggerfish stop      # أوقف النسخة الموجودة
triggerfish start     # ابدأ من جديد

إذا أبلغ triggerfish status أن الخدمة الخلفية لا تعمل لكنك لا تزال تحصل على هذا الخطأ، فإن عملية أخرى تحتفظ بملف السجل مفتوحاً. تحقق من العمليات المتبقية:

bash
# Linux
ps aux | grep triggerfish

# macOS
ps aux | grep triggerfish

# Windows
tasklist | findstr triggerfish

اقتل أي عمليات قديمة، ثم حاول مرة أخرى.

المنفذ 18789 أو 18790 قيد الاستخدام بالفعل

تستمع البوابة على المنفذ 18789 (WebSocket) وTidepool على 18790 (A2UI). إذا شغل تطبيق آخر هذه المنافذ، ستفشل الخدمة الخلفية في البدء.

اعثر على ما يستخدم المنفذ:

bash
# Linux
ss -tlnp | grep 18789

# macOS
lsof -i :18789

# Windows
netstat -ano | findstr 18789

لا يوجد مزود LLM مكوَّن

إذا كان triggerfish.yaml يفتقد قسم models أو كان المزود الأساسي بدون مفتاح API، تسجّل البوابة:

No LLM provider configured. Check triggerfish.yaml.

الحل: شغّل معالج الإعداد أو كوّن يدوياً:

bash
triggerfish dive                    # إعداد تفاعلي
# أو
triggerfish config set models.primary.provider anthropic
triggerfish config set models.primary.model claude-sonnet-4-20250514
triggerfish config set-secret provider:anthropic:apiKey sk-ant-...

ملف التكوين غير موجود

تخرج الخدمة الخلفية إذا لم يكن triggerfish.yaml موجوداً في المسار المتوقع. تختلف رسالة الخطأ حسب البيئة:

  • تثبيت أصلي: يقترح تشغيل triggerfish dive
  • Docker: يقترح تركيب ملف التكوين بـ -v ./triggerfish.yaml:/data/triggerfish.yaml

تحقق من المسار:

bash
ls ~/.triggerfish/triggerfish.yaml      # أصلي
docker exec triggerfish ls /data/       # Docker

فشل حل الأسرار

إذا كان تكوينك يشير إلى سر (secret:provider:anthropic:apiKey) غير موجود في سلسلة المفاتيح، تخرج الخدمة الخلفية بخطأ يسمّي السر المفقود.

الحل:

bash
triggerfish config set-secret provider:anthropic:apiKey <your-key>

إدارة الخدمة

systemd: الخدمة الخلفية تتوقف بعد تسجيل الخروج

افتراضياً، تتوقف خدمات systemd الخاصة بالمستخدم عند تسجيل خروج المستخدم. يُفعّل Triggerfish loginctl enable-linger أثناء التثبيت لمنع هذا. إذا فشل تفعيل linger:

bash
# تحقق من حالة linger
loginctl show-user $USER | grep Linger

# فعّله (قد يتطلب sudo)
sudo loginctl enable-linger $USER

بدون linger، تعمل الخدمة الخلفية فقط أثناء تسجيل دخولك.

systemd: فشل بدء الخدمة

تحقق من حالة الخدمة ودفتر اليومية:

bash
systemctl --user status triggerfish.service
journalctl --user -u triggerfish.service --no-pager -n 50

الأسباب الشائعة:

  • نُقل الملف التنفيذي أو حُذف. يحتوي ملف الوحدة على مسار ثابت للملف التنفيذي. أعد تثبيت الخدمة الخلفية: triggerfish dive --install-daemon
  • مشاكل PATH. تلتقط وحدة systemd PATH الخاص بك وقت التثبيت. إذا ثبّتت أدوات جديدة (مثل خوادم MCP) بعد تثبيت الخدمة الخلفية، أعد تثبيت الخدمة الخلفية لتحديث PATH.
  • DENO_DIR غير مضبوط. تضبط وحدة systemd DENO_DIR=~/.cache/deno. إذا لم يكن هذا المجلد قابلاً للكتابة، ستفشل إضافات SQLite FFI في التحميل.

launchd: الخدمة الخلفية لا تبدأ عند تسجيل الدخول

تحقق من حالة plist:

bash
launchctl list | grep triggerfish
launchctl print gui/$(id -u)/dev.triggerfish.agent

إذا لم يكن plist محمَّلاً:

bash
launchctl load ~/Library/LaunchAgents/dev.triggerfish.agent.plist

الأسباب الشائعة:

  • أُزيل plist أو تلف. أعد التثبيت: triggerfish dive --install-daemon
  • نُقل الملف التنفيذي. يحتوي plist على مسار ثابت. أعد التثبيت بعد نقل الملف التنفيذي.
  • PATH وقت التثبيت. مثل systemd، يلتقط launchd PATH عند إنشاء plist. أعد التثبيت إذا أضفت أدوات جديدة إلى PATH.

Windows: الخدمة لا تبدأ

تحقق من حالة الخدمة:

powershell
sc query Triggerfish
Get-Service Triggerfish

الأسباب الشائعة:

  • الخدمة غير مُثبّتة. أعد التثبيت: شغّل المُثبّت كمسؤول.
  • تغيّر مسار الملف التنفيذي. يحتوي مغلّف الخدمة على مسار ثابت. أعد التثبيت.
  • فشل تجميع .NET أثناء التثبيت. يتطلب مغلّف خدمة C# csc.exe من .NET Framework 4.x.

الترقية تعطّل الخدمة الخلفية

بعد تشغيل triggerfish update، تُعاد الخدمة الخلفية تلقائياً. إذا لم تُعد:

  1. قد يكون الملف التنفيذي القديم لا يزال يعمل. أوقفه يدوياً: triggerfish stop
  2. على Windows، يُعاد تسمية الملف التنفيذي القديم إلى .old. إذا فشلت إعادة التسمية، سيخطئ التحديث. أوقف الخدمة أولاً، ثم حدّث.

مشاكل ملف السجل

ملف السجل فارغ

تكتب الخدمة الخلفية في ~/.triggerfish/logs/triggerfish.log. إذا كان الملف موجوداً لكنه فارغ:

  • قد تكون الخدمة الخلفية بدأت للتو. انتظر لحظة.
  • مستوى السجل مضبوط على quiet، الذي يسجّل فقط رسائل مستوى ERROR. اضبطه على normal أو verbose:
bash
triggerfish config set logging.level normal

السجلات مزعجة جداً

اضبط مستوى السجل على quiet لرؤية الأخطاء فقط:

bash
triggerfish config set logging.level quiet

خريطة المستويات:

قيمة التكوينالحد الأدنى للمستوى المسجَّل
quietERROR فقط
normalINFO وما فوق
verboseDEBUG وما فوق
debugTRACE وما فوق (كل شيء)

تدوير السجلات

تُدوَّر السجلات تلقائياً عندما يتجاوز الملف الحالي 1 ميغابايت. يُحتفظ بما يصل إلى 10 ملفات مُدوَّرة:

triggerfish.log        # الحالي
triggerfish.1.log      # أحدث نسخة احتياطية
triggerfish.2.log      # ثاني أحدث
...
triggerfish.10.log     # الأقدم (يُحذف عند حدوث تدوير جديد)

لا يوجد تدوير على أساس الوقت، فقط على أساس الحجم.