CLI commands

به‌روزرسانی

openclaw update

OpenClaw را با ایمنی به‌روزرسانی کنید و بین کانال‌های stable/beta/dev جابه‌جا شوید.

اگر از طریق npm/pnpm/bun نصب کرده‌اید (نصب سراسری، بدون فراداده‌ی git)، به‌روزرسانی‌ها از طریق جریان مدیر بسته در به‌روزرسانی انجام می‌شوند.

روش استفاده

openclaw update
openclaw update status
openclaw update wizard
openclaw update --channel beta
openclaw update --channel dev
openclaw update --tag beta
openclaw update --tag main
openclaw update --dry-run
openclaw update --no-restart
openclaw update --yes
openclaw update --json
openclaw --update

گزینه‌ها

  • --no-restart: پس از به‌روزرسانی موفق، راه‌اندازی دوباره‌ی سرویس Gateway را رد می‌کند. به‌روزرسانی‌های مدیر بسته که Gateway را دوباره راه‌اندازی می‌کنند، پیش از موفق‌شدن فرمان بررسی می‌کنند که سرویس دوباره‌راه‌اندازی‌شده نسخه‌ی به‌روزرسانی‌شده‌ی مورد انتظار را گزارش می‌دهد.
  • --channel <stable|beta|dev>: کانال به‌روزرسانی را تنظیم می‌کند (git + npm؛ در پیکربندی ماندگار می‌شود).
  • --tag <dist-tag|version|spec>: هدف بسته را فقط برای همین به‌روزرسانی بازنویسی می‌کند. برای نصب‌های بسته‌ای، main به github:openclaw/openclaw#main نگاشت می‌شود.
  • --dry-run: اقدام‌های برنامه‌ریزی‌شده‌ی به‌روزرسانی (جریان کانال/برچسب/هدف/راه‌اندازی دوباره) را بدون نوشتن پیکربندی، نصب، همگام‌سازی Pluginها، یا راه‌اندازی دوباره پیش‌نمایش می‌دهد.
  • --json: JSON قابل‌خواندن برای ماشین از نوع UpdateRunResult را چاپ می‌کند، شامل postUpdate.plugins.warnings هنگامی که Pluginهای مدیریت‌شده‌ی خراب یا بارگذاری‌ناپذیر پس از موفقیت به‌روزرسانی هسته به تعمیر نیاز دارند، و postUpdate.plugins.integrityDrifts هنگامی که در جریان همگام‌سازی Plugin پس از به‌روزرسانی، انحراف مصنوع npm Plugin شناسایی شود.
  • --timeout <seconds>: مهلت زمانی برای هر گام (پیش‌فرض 1800 ثانیه است).
  • --yes: درخواست‌های تأیید را رد می‌کند (برای نمونه تأیید بازگشت به نسخه‌ی قدیمی‌تر).

openclaw update پرچم --verbose ندارد. برای پیش‌نمایش اقدام‌های برنامه‌ریزی‌شده‌ی کانال/برچسب/نصب/راه‌اندازی دوباره از --dry-run، برای نتایج قابل‌خواندن برای ماشین از --json، و هنگامی که فقط به جزئیات کانال و دسترس‌پذیری نیاز دارید از openclaw update status --json استفاده کنید. اگر لاگ‌های Gateway پیرامون یک به‌روزرسانی را اشکال‌زدایی می‌کنید، پرگویی کنسول و سطح لاگ فایل جدا هستند: --verbose در Gateway خروجی terminal/WebSocket را تحت‌تأثیر قرار می‌دهد، در حالی که لاگ‌های فایل به logging.level: "debug" یا "trace" در پیکربندی نیاز دارند. لاگ‌گیری Gateway را ببینید.

update status

کانال به‌روزرسانی فعال + برچسب/شاخه/SHA در git (برای checkoutهای منبع)، به‌علاوه‌ی دسترس‌پذیری به‌روزرسانی را نشان می‌دهد.

openclaw update status
openclaw update status --json
openclaw update status --timeout 10

گزینه‌ها:

  • --json: JSON وضعیت قابل‌خواندن برای ماشین را چاپ می‌کند.
  • --timeout <seconds>: مهلت زمانی برای بررسی‌ها (پیش‌فرض 3 ثانیه است).

update wizard

جریان تعاملی برای انتخاب یک کانال به‌روزرسانی و تأیید اینکه آیا پس از به‌روزرسانی Gateway دوباره راه‌اندازی شود یا نه (پیش‌فرض، راه‌اندازی دوباره است). اگر dev را بدون checkout در git انتخاب کنید، پیشنهاد می‌دهد یکی بسازد.

گزینه‌ها:

  • --timeout <seconds>: مهلت زمانی برای هر گام به‌روزرسانی (پیش‌فرض 1800)

چه کاری انجام می‌دهد

وقتی کانال‌ها را به‌طور صریح عوض می‌کنید (--channel ...)، OpenClaw روش نصب را هم هم‌راستا نگه می‌دارد:

  • dev → وجود یک checkout در git را تضمین می‌کند (پیش‌فرض: ~/openclaw، قابل بازنویسی با OPENCLAW_GIT_DIR)، آن را به‌روزرسانی می‌کند و CLI سراسری را از همان checkout نصب می‌کند.
  • stable → با استفاده از latest از npm نصب می‌کند.
  • beta → dist-tag با نام beta در npm را ترجیح می‌دهد، اما وقتی beta وجود نداشته باشد یا از انتشار stable فعلی قدیمی‌تر باشد به latest برمی‌گردد.

به‌روزرسان خودکار هسته‌ی Gateway (وقتی از طریق پیکربندی فعال باشد) مسیر به‌روزرسانی CLI را بیرون از handler زنده‌ی درخواست Gateway اجرا می‌کند. به‌روزرسانی‌های مدیر بسته‌ی update.run در control-plane پس از تعویض بسته، راه‌اندازی دوباره‌ی به‌روزرسانی را به‌صورت غیربه‌تعویق‌افتاده و بدون cooldown اجبار می‌کنند، چون فرایند قدیمی Gateway ممکن است هنوز chunkهایی در حافظه داشته باشد که به فایل‌های حذف‌شده توسط بسته‌ی جدید اشاره می‌کنند.

برای نصب‌های مدیر بسته، openclaw update پیش از فراخوانی مدیر بسته، نسخه‌ی بسته‌ی هدف را حل می‌کند. نصب‌های سراسری npm از نصب مرحله‌بندی‌شده استفاده می‌کنند: OpenClaw بسته‌ی جدید را در یک prefix موقت npm نصب می‌کند، inventory بسته‌بندی‌شده‌ی dist را در آنجا بررسی می‌کند، سپس آن درخت بسته‌ی پاک را با prefix سراسری واقعی تعویض می‌کند. اگر بررسی شکست بخورد، doctor پس از به‌روزرسانی، همگام‌سازی Plugin و کار راه‌اندازی دوباره از درخت مشکوک اجرا نمی‌شوند. حتی وقتی نسخه‌ی نصب‌شده از پیش با هدف یکی باشد، فرمان نصب بسته‌ی سراسری را تازه‌سازی می‌کند، سپس همگام‌سازی Plugin، تازه‌سازی تکمیل فرمان هسته، و کار راه‌اندازی دوباره را اجرا می‌کند. این کار sidecarهای بسته‌بندی‌شده و رکوردهای Plugin متعلق به کانال را با build نصب‌شده‌ی OpenClaw هم‌راستا نگه می‌دارد و بازسازی‌های کامل تکمیل فرمان Plugin را به اجراهای صریح openclaw completion --write-state واگذار می‌کند.

وقتی یک سرویس Gateway مدیریت‌شده‌ی محلی نصب باشد و راه‌اندازی دوباره فعال باشد، به‌روزرسانی‌های مدیر بسته پیش از جایگزینی درخت بسته، سرویس در حال اجرا را متوقف می‌کنند، سپس فراداده‌ی سرویس را از نصب به‌روزشده تازه‌سازی می‌کنند، سرویس را دوباره راه‌اندازی می‌کنند و پیش از گزارش موفقیت بررسی می‌کنند که Gateway دوباره‌راه‌اندازی‌شده نسخه‌ی مورد انتظار را گزارش می‌دهد. در macOS، بررسی پس از به‌روزرسانی همچنین تأیید می‌کند که LaunchAgent برای profile فعال بارگذاری/در حال اجرا است و پورت loopback پیکربندی‌شده سالم است. اگر plist نصب شده باشد اما launchd آن را نظارت نکند، OpenClaw به‌طور خودکار LaunchAgent را دوباره bootstrap می‌کند، سپس بررسی‌های آمادگی سلامت/نسخه/کانال را دوباره اجرا می‌کند. یک bootstrap تازه، job مربوط به RunAtLoad را مستقیم بارگذاری می‌کند، بنابراین بازیابی به‌روزرسانی بلافاصله Gateway تازه ایجادشده را kickstart -k نمی‌کند. اگر Gateway همچنان سالم نشود، فرمان با کد غیرصفر خارج می‌شود و مسیر لاگ راه‌اندازی دوباره به‌همراه دستورهای صریح راه‌اندازی دوباره، نصب مجدد، و rollback بسته را چاپ می‌کند. با --no-restart، جایگزینی بسته همچنان اجرا می‌شود اما سرویس مدیریت‌شده متوقف یا دوباره راه‌اندازی نمی‌شود، بنابراین Gateway در حال اجرا ممکن است تا وقتی آن را دستی دوباره راه‌اندازی کنید، کد قدیمی را نگه دارد.

جریان checkout در git

انتخاب کانال

  • stable: آخرین برچسب غیر beta را checkout می‌کند، سپس build و doctor را اجرا می‌کند.
  • beta: آخرین برچسب -beta را ترجیح می‌دهد، اما وقتی beta وجود نداشته باشد یا قدیمی‌تر باشد به آخرین برچسب stable برمی‌گردد.
  • dev: main را checkout می‌کند، سپس fetch و rebase را انجام می‌دهد.

گام‌های به‌روزرسانی

  • بررسی پاک‌بودن worktree

    نیازمند نبود تغییرهای commitنشده است.

  • تعویض کانال

    به کانال انتخاب‌شده (برچسب یا شاخه) جابه‌جا می‌شود.

  • دریافت upstream

    فقط dev.

  • build پیش‌پرواز (فقط dev)

    build مربوط به TypeScript را در یک worktree موقت اجرا می‌کند. اگر tip شکست بخورد، تا 10 commit عقب می‌رود تا جدیدترین commit قابل build را پیدا کند. برای اجرای lint در این پیش‌پرواز نیز OPENCLAW_UPDATE_PREFLIGHT_LINT=1 را تنظیم کنید؛ lint در حالت serial محدود اجرا می‌شود، چون میزبان‌های به‌روزرسانی کاربر اغلب کوچک‌تر از runnerهای CI هستند.

  • Rebase

    روی commit انتخاب‌شده rebase می‌کند (فقط dev).

  • نصب وابستگی‌ها

    از مدیر بسته‌ی repo استفاده می‌کند. برای checkoutهای pnpm، به‌روزرسان به‌جای اجرای npm run build داخل یک workspace متعلق به pnpm، pnpm را در صورت نیاز bootstrap می‌کند (ابتدا از طریق corepack، سپس fallback موقت npm install pnpm@10).

  • Build رابط کاربری Control

    gateway و رابط کاربری Control را build می‌کند.

  • اجرای doctor

    openclaw doctor به‌عنوان بررسی نهایی به‌روزرسانی ایمن اجرا می‌شود.

  • همگام‌سازی Pluginها

    Pluginها را با کانال فعال همگام می‌کند. dev از Pluginهای bundled استفاده می‌کند؛ stable و beta از npm استفاده می‌کنند. نصب‌های Plugin ردیابی‌شده را به‌روزرسانی می‌کند.

  • در کانال به‌روزرسانی beta، نصب‌های ردیابی‌شده‌ی npm و ClawHub Plugin که خط پیش‌فرض/latest را دنبال می‌کنند، ابتدا یک انتشار @beta برای Plugin را امتحان می‌کنند. اگر Plugin انتشار beta نداشته باشد، OpenClaw به spec ثبت‌شده‌ی پیش‌فرض/latest برمی‌گردد. برای npm Pluginها، OpenClaw همچنین وقتی بسته‌ی beta وجود دارد اما در اعتبارسنجی نصب شکست می‌خورد، به حالت fallback برمی‌گردد. نسخه‌های دقیق و برچسب‌های صریح بازنویسی نمی‌شوند.

    میان‌بر --update

    openclaw --update به openclaw update بازنویسی می‌شود (برای shellها و scriptهای launcher مفید است).

    مرتبط