قابلیتها
بررسی و تعمیر
این صفحه بهصورت ماشینی از انگلیسی ترجمه شده است. پیشنهاد اصلاح را با کمال میل میپذیریم. ویرایش این صفحه در 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تنظیم شده باشد هشدار میدهد: هر حسابی که از آن shell اجرا شود آن را به ارث میبرد و Claude Code آن را به ورود خود حساب ترجیح میدهد. تعمیری ندارد؛ خودتان آن را حذف کنید. - پوشه (
checkProfile). نبودن پوشه حساب خطاست و بررسیهای آن حساب را پایان میدهد. مجوزهایی که هر بیتی برای گروه یا دیگران داشته باشند هشدارند؛--fixفرمانchmod 0700را اجرا میکند. - فایل ورود (
checkCredentials)..credentials.jsonباlstatبررسی میشود. پیوند نمادین خطاست، چون هر حساب باید توکن خودش را داشته باشد، و تعمیر نمیشود. مجوزی غیر از0600هشدار است؛--fixفرمانchmod 0600را اجرا میکند. سپس ورود خوانده میشود (روی macOS ابتدا از Keychain). نبودن ورود هشداری است که به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). بدون حافظه نهان و با محدودیت معمول ۳ ثانیه، از نقطه پایانی مصرف برای حسابها یکی پس از دیگری پرسوجو میکند تا یکی پاسخ دهد. اگر پاسخ دیگر قابل تجزیه نباشد، هشدار میدهد که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/کپی نمیشود.