الميزات
الفحص والإصلاح
تُرجمت هذه الصفحة آليًا من الإنجليزية. التصحيحات مرحب بها. عدّل هذه الصفحة على GitHub
يفحص ccam doctor تثبيت ccam لديك: ملف Claude Code التنفيذي، ومجلد كل حساب وتسجيل دخوله وروابط المشاركة فيه، وخوادم MCP المشتركة، ونقطة نهاية الاستخدام، وأوامرك المختصرة. ويصلح ccam doctor --fix ما يمكنه إصلاحه دون فقدان بيانات، وينقل أولًا أي ملف يستبدله إلى مجلد نسخ احتياطية. شغّله عندما يتوقف ccam <name> بسبب مشكلة في رابط مشاركة، أو بعد أن تستعيد ملفات يدويًا، أو بعد تحديث Claude Code.
الاستخدام
ccam doctor # check everything, change nothing
ccam doctor --fix # check, then repair what is safe to repair
ccam --dry-run doctor --fix # report only: what --fix would repairكل نتيجة سطر واحد مع علامة: ✓ سليم، و· معلومة، و! تحذير، و✗ خطأ. وتبدأ نتائج الحسابات باسم الحساب.
$ ccam doctor
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700)
! personal: .credentials.json permissions are 644 (should be 0600)
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp
`ccam doctor --fix` repairs what it can.مع --fix، تنتهي كل نتيجة أُصلحت بـ → fixed:
$ ccam doctor --fix
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700) → fixed
! personal: .credentials.json permissions are 644 (should be 0600) → fixed
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link → fixed
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp → fixedالخيارات
| الخيار | ما يفعله | القيمة الافتراضية |
|---|---|---|
--fix |
يصلح ما يمكن إصلاحه بأمان (مع نسخ احتياطية للملفات المتغيّرة) | معطّل |
--dry-run (عام) |
يجري كل الفحوص ولا يصلح شيئًا، حتى مع --fix |
معطّل |
لا يأخذ ccam doctor أي وسائط. وهو يدعم --dry-run: يطبع ccam --dry-run doctor --fix النتائج نفسها التي يطبعها ccam doctor ولا يغيّر شيئًا.
رمز الخروج هو 1 عندما تبقى نتيجة ✗ واحدة على الأقل دون إصلاح، و0 في غير ذلك. ولا تُفشل التحذيرات والمعلومات التشغيل أبدًا. وعندما يفشل التشغيل دون --fix، ينهي ccam المخرجات بسطر فارغ ثم `ccam doctor --fix` repairs what it can.. والإعداد الذي لا يمكن تحميله ينتهي أيضًا بـ 1 وخطأ يبدأ بـ ccam:.
كيف يعمل
يحمّل internal/cli/doctor.go الملف ~/.config/ccam/config.toml ويستدعي doctor.Run في internal/doctor/doctor.go، الذي يجري الفحوص بترتيب ثابت ويُرجع النتائج. ويُمرَّر --fix على أنه Options.Fix، ويُعيَّن إلى false في التشغيل التجريبي.
تعمل الكتلة الوسطى مرة واحدة لكل حساب. الفحوص، وما يفعله --fix لكل منها:
- إصدار Claude Code (
checkClaude). يحدد الملف التنفيذيclaudeكما يفعل المشغّل، ويشغّلclaude --version. إذا لم يبدأ الإصدار بـ2.1.302، وهو الإصدار الذي تحقق ccam من بنية مجلده (doctor.LayoutVersion)، يضيف· ccam was verified against the folder layout of Claude Code 2.1.302. Any 'unknown entries' below may mean the layout changed. وغياب الملف التنفيذي أو فشل--versionخطأ. لا إصلاح. - بيانات الاعتماد في البيئة (
checkAuthEnv). يحذّر عندما يكونCLAUDE_CODE_OAUTH_TOKENأوANTHROPIC_API_KEYأوANTHROPIC_AUTH_TOKENمعيّنًا: فكل حساب يُشغَّل من تلك الصدفة يرثه، ويفضّله Claude Code على تسجيل دخول الحساب نفسه. لا إصلاح؛ ألغِ تعيينه بنفسك. - المجلد (
checkProfile). غياب مجلد الحساب خطأ وينهي فحوص ذلك الحساب. والأذونات التي فيها أي بت للمجموعة أو للآخرين تحذير؛ ويشغّل--fixالأمرchmod 0700. - ملف تسجيل الدخول (
checkCredentials). يُفحص.credentials.jsonباستخدامlstat. الرابط الرمزي خطأ، لأن كل حساب يجب أن يملك رمزه الخاص، ولا يُصلح. والوضع المختلف عن0600تحذير؛ ويشغّل--fixالأمرchmod 0600. ثم يُقرأ تسجيل الدخول (على macOS من سلسلة المفاتيح أولًا). وعدم وجود تسجيل دخول تحذير يوجّهك إلىccam login <name>. ورمز التحديث المنتهي هو الخطأlogin expired؛ أما رمز الوصول المنتهي فمعلومة فقط، لأن Claude Code يجدّده عند التشغيل التالي. ولا يُصلح أي من هذه. - روابط المشاركة (
share.Check). يقارن كل مسار فيshare.Layoutبإعدادات المشاركة للحساب، مستخدمًاlstatوreadlinkفقط. ويبلّغ عن أربعة أنواع: رابط مفقود، ورابط يشير إلى مكان آخر، وملف حقيقي حيث يجب أن يكون رابط، ورابط متبقٍّ لعنصر أصبح محليًا الآن. الرابط المفقود تحذير، والبقية أخطاء. - المدخلات غير المعروفة (
checkUnknownEntries). يسرد الأسماء في المستوى الأعلى من مجلد الحساب التي لا يعرفها ccam (share.Known)، كإشارة إلى أن بنية Claude Code تغيّرت. معلومة فقط. - مسارات الإضافات (
checkPlugins). تخزّن سجلات الإضافات (installed_plugins.jsonوknown_marketplaces.json) مسارات مطلقة. وفيplugins/الخاص بكل مجموعة، تتعطل المسارات التي تمر عبر مجلد حساب واحد عندما يُزال ذلك الحساب أو يُعاد تسميته. يعيد--fixكتابتها إلى مجلد المجموعة باستخدامprofile.RewritePluginPaths، عبر كتابة ذرّية لملف السجل. - خوادم MCP (
checkMCP). يحمّل ملفmcp.jsonلكل مجموعة مرة واحدة. الملف الذي لا يمكن قراءته خطأ؛ والخادم الذي يفشل فيmcp.Validateتحذير. لا إصلاح. - تنسيق استجابة الاستخدام (
checkUsageFormat). يطلب من نقطة نهاية الاستخدام، دون ذاكرة التخزين المؤقت ومع الحد المعتاد البالغ 3 ثوانٍ، بيانات حساب تلو الآخر حتى يستجيب أحدها. وإذا لم يعد بالإمكان تحليل الاستجابة، يحذّر من أنccam usageسيلجأ إلى ذاكرة التخزين المؤقت لسطر الحالة. وهذا هو الفحص الوحيد الذي يستخدم الشبكة. - الأوامر المختصرة (
checkShims). فقط عندما يكون لحساب ما أمر مختصر. الروابط المفقودة في~/.local/binتحذير؛ ويستدعي--fixالدالةshim.Install، التي لا تنشئ إلا الروابط المفقودة ولا تلمس الملفات الأخرى أبدًا. ومجلد bin غير الموجود فيPATHتحذير ولا يُصلح.
إصلاح روابط المشاركة
ينشئ مسار التشغيل الرابط المفقود في الحال، لكنه يتوقف عند أي شيء قد يؤدي إلى فقدان بيانات ويوجّهك إلى هنا:
$ ccam work
ccam: stopped because of share link problems:
/home/me/.local/share/ccam/profiles/work/CLAUDE.md: set to shared but is a real file, not a link
Repair them with `ccam doctor --fix`, then run againلأي مشكلة في روابط المشاركة، يستدعي --fix الدالة share.Build مع إعدادات المشاركة للحساب بوصفها الحالة الحالية والحالة المستهدفة معًا، ثم Plan.Apply. يعيد Build استنتاج كل خطوة مما هو موجود على القرص، وهي الخطة نفسها التي يستخدمها ccam share، لذلك يتبع الإصلاح القواعد نفسها التي يتبعها تفعيل المشاركة.
هنا settings.json ملف حقيقي. ولأن لدى المجموعة بالفعل ملف settings.json مختلفًا، يأخذ التعارض خياره الافتراضي KeepGroup، فتبقى نسخة المجموعة. وينتقل ملف الحساب إلى .ccam-backup/<time>/settings.json داخل مجلد الحساب، ويربط os.Symlink المسار بالمجموعة. حالات أخرى:
- إذا لم تكن لدى المجموعة نسخة بعد، ينتقل ملف الحساب إلى المجموعة ويصبح أول محتواها.
- في حالة المجلد، تنتقل الملفات التي لا تملكها المجموعة إلى المجموعة؛ ويذهب الباقي إلى النسخة الاحتياطية.
- بالنسبة إلى
history.jsonl، الخيار الافتراضي هوmerge by line: أسطر المجموعة، ثم أسطرك الجديدة. وتُحفظ النسخة السابقة للمجموعة في.ccam-backup/<time>/group/. - يُستبدل الرابط إلى مجموعة أخرى. والرابط إلى مجلد خارج ccam يذهب إلى النسخة الاحتياطية، ويصبح محتواه بداية المجموعة إذا كانت المجموعة فارغة.
- يُزال الرابط المتبقي لعنصر أصبح محليًا الآن، ويحصل الحساب على نسخة من محتوى المجموعة.
باستثناء إزالة الروابط، كل خطوة تنقل البيانات إلى المجموعة أو إلى مجلد النسخ الاحتياطية. لا يُحذف شيء.
الأمان والحالات الخاصة
- لا يغيّر
ccam doctorوحده أي شيء أبدًا. استخدم--dry-runمع--fixلتكون متأكدًا في السكربتات. - لا يتحقق
doctor --fixهل الحساب يعمل. أنهِ Claude Code لحساب ما قبل إصلاح روابط المشاركة فيه، لأن الجلسة تظل تكتب في تلك الملفات. - إذا فشل إصلاح المشاركة، يبلّغ ccam بـ
could not repair share links: <error>لذلك الحساب ويتخطى فحص المدخلات غير المعروفة فيه. وتظل الحسابات الأخرى تُفحص. - إذا فشل
ccam shareفي منتصف الطريق، يحفظ الإعدادات المستهدفة أولًا ويطلب منك الإكمال باستخدامccam doctor --fix. - الملف
.credentials.jsonالمربوط رمزيًا وتسجيل الدخول المنتهي وبيانات الاعتماد في البيئة يُبلَّغ عنها ولا تُغيَّر أبدًا. - إعادة كتابة سجلات الإضافات تتم ذرّيًا لكنها لا تُنسخ إلى
.ccam-backup/.