عن المشروع

أوقفت Bose خدمة SoundTouch السحابية، تاركةً السماعات مع Bluetooth وAUX وAirPlay ومناطق متعددة الغرف، لكن دون راديو إنترنت أو إعدادات مسبقة أو تصفح أو Alexa. هذا المستودع هو مهارة Claude Code ترشد المالك إلى توجيه سماعاته نحو خدمة بديلة مستضافة ذاتيًا واستعادة الراديو والإعدادات المسبقة. تفترض المهارة مستخدمًا غير تقني: تطرح أسئلة بدلًا من الأوامر، تقرأ بحرية، وتتطلب تأكيدًا قبل تغيير أي شيء على السماعة. الخدمة البديلة هي AfterTouch من gesellix (Bose-SoundTouch)، وتعتبرها المهارة المصدر الأساسي؛ هذا المستودع مهارة وليس فرعًا، ويُثبّت صورة الحاوية المنشورة. المتطلبات: سماعة SoundTouch واحدة أو أكثر على الشبكة المحلية، جهاز يدعم Docker على نفس الشبكة (NAS أو Raspberry Pi أو جهاز Linux صغير) بعنوان ثابت، بالإضافة إلى Python 3.11+ وuv وDocker مع إضافة compose. تتحقق الخطوة الأولى من المهارة من هذه المتطلبات بنفسها وتُبلغ عن المفقود مع أسطر التثبيت. التثبيت عبر سوق إضافات Claude Code: /plugin marketplace add bitranox/soundtouch-decloud /plugin install soundtouch-decloud يمكن أيضًا تشغيلها بوصف المشكلة بكلمات بسيطة أو باستدعائها بالاسم. يعمل سير العمل في مراحل مع نقاط توقف: فحص المتطلبات ومساعدة التثبيت، اكتشاف السماعات، تشغيل الخدمة، النسخ الاحتياطي لكل سماعة قبل أي تغيير، إعادة كتابة عناوين الخدمة الأربعة، انتظار مصادر الراديو، استعادة المحطات والتحقق منها، كتابة الإعدادات المسبقة، وأخيرًا إثبات التشغيل بالاستماع لا بالعد. تتضمن المهارة خمسة ملفات مرجعية وأربعة نصوص برمجية. يطبع كل نص غلاف JSON ويستخدم رموز خروج متسقة (0 نعم، 1 لا، 2 لا يمكن تحديد)؛ أي شيء يغيّر سماعة يتطلب --confirm صريحًا، لذا تكون العمليات للقراءة فقط آمنة دائمًا. تغطي النصوص فحوصات ما قبل التشغيل، والتحقق من Docker/compose وصحة الخدمة، واكتشاف الشبكة، والإعداد عبر منفذ SSH التشخيصي مع إعادة كتابة عناوين URL وإعادة التشغيل، ونسخ/جمع/تحقق/فحص/استعادة/تسيير الإعدادات المسبقة. توثق الوثائق أوضاع فشل يسهل تشخيصها خطأً: شبكة الجسر تبدو مثبتة لكنها لا تكتشف شيئًا (شبكة المضيف مطلوبة)؛ إعادة كتابة عنوان الحساب فقط تُنتج سماعة تسجّل وتتزامن لكنها لا تشغّل شيئًا؛ ترتيب كتابة عناوين URL مهم لأن الحفظ قبل الكتابة يحفظ القيم القديمة بينما تستجيب الأوامر بـOK؛ عناوين البث الخام في الإعدادات المسبقة مقبولة لكنها لا تُشغّل أبدًا، لذا تستخدم الإعدادات صيغة AfterTouch النسبية؛ خدمة منسوخة تحتفظ بالعنوان القديم عبر server_url في settings.json؛ وعنوان خدمة معيّن عبر DHCP يعطل كل سماعة دفعة واحدة لاحقًا. استعادة المحطات عملية من أربع خطوات: جمع عناوين البث من الإعدادات المسبقة قبل الترحيل (الخدمة لا تحتفظ بها، لذا يعمل النسخ أولًا)، سؤال المالك عما إذا كانت قائمة المحطات القديمة ما زالت مطلوبة، البحث عن المحطات المتبقية لنقاط بث مباشر حالية، والتحقق من مضيف الخدمة. يُبلغ التحقق لكل زر: صوت، قائمة تشغيل، HLS، ليس صوتًا، ميت، أو مفقود. تشير الوثائق إلى أن المحطات تنتقل وتموت، وأن قوائم .m3u قد تجتاز فحصًا صوتيًا ساذجًا دون احتوائها على صوت. للتشغيل المستمر، تضيف المهارة لقطة خارج الخدمة لإعدادات كل سماعة، واستعادة لمرة واحدة، وفحصًا للقراءة فقط مناسبًا للتنبيه المجدول. لا تُثبّت عمدًا أي شيء يكتب من تلقاء نفسه، لأن AfterTouch v0.137.0 يشارك الإعدادات المسبقة عبر السماعات على حساب واحد. تستشهد الوثائق ببيانات مقاسة: حلقة استعادة لمدة دقيقتين على مدى 18.7 يومًا أجرت 11692 تشغيلًا وكتبت الإعدادات مرة واحدة، وسماعة WiFi نائمة أنتجت 1303 قراءة غير قابلة للقراءة دون نقص في الإعدادات. يميز التنبيه بين الإعدادات المفقودة والسماعة غير المستجيبة. النصوص البرمجية تعتمد المكتبة القياسية فقط لتشغيلها على جهاز بلا تثبيت؛ pytest هو الاعتماد الوحيد للاختبار. مدقق اصطلاحات المستودع يتحقق من المظاهر، وواجهة المهارة، وتغطية الاختبار للنصوص المرفقة ونهايات الأسطر، مع CI على Linux وWindows وmacOS. مرخصة بموجب MIT.