openclaw doctor
Các bước kiểm tra tình trạng và khắc phục nhanh cho Gateway, các kênh, plugin, Skills, định tuyến mô hình, trạng thái cục bộ và di chuyển cấu hình. Hãy sử dụng lệnh này bất cứ khi nào có thành phần không hoạt động như mong đợi và bạn muốn một lệnh giải thích nguyên nhân.
Khi trạng thái Gateway báo cáo các chủ sở hữu SecretRef bị suy giảm, doctor sẽ in cảnh báo Suy giảm thời gian chạy bí mật kèm theo mọi chủ sở hữu nguội hoặc lỗi thời, đường dẫn cấu hình bị ảnh hưởng, lý do đã được che thông tin nhạy cảm và lệnh thử lại openclaw secrets reload.
Khi các sự kiện đầu vào của kênh bị chuyển vào hàng đợi thư lỗi, doctor sẽ nêu tên từng tài khoản kênh bị ảnh hưởng và trỏ đến openclaw channels dead-letters list để kiểm tra và khôi phục.
Liên quan:
- Khắc phục sự cố: Khắc phục sự cố
- Kiểm tra bảo mật: Bảo mật
Chế độ hoạt động
Doctor có năm chế độ hoạt động:
Ưu tiên
--lint khi quy trình tự động hóa cần kết quả ổn định. Ưu tiên --fix khi người vận hành muốn doctor chỉnh sửa cấu hình hoặc trạng thái.
Ví dụ
doctor:
channels capabilities báo cáo các quyền có hiệu lực của bot đối với một đích kênh cụ thể. channels status --probe kiểm tra tất cả các kênh đã cấu hình và các đích tự động tham gia thoại.
Tùy chọn
--severity-min, --all, --only và --skip chỉ được chấp nhận khi dùng cùng --lint; --json được chấp nhận với --lint, --post-upgrade, --state-sqlite và --session-sqlite.
Chế độ lint
openclaw doctor --lint là chế độ chỉ đọc: không có lời nhắc, không sửa chữa, không ghi lại cấu hình/trạng thái.
--severity-min kiểm soát cả những phát hiện được in và ngưỡng thoát: openclaw doctor --lint --severity-min error có thể không in gì và thoát với mã 0 ngay cả khi tồn tại các phát hiện info/warning có mức độ nghiêm trọng thấp hơn.
--all kiểm soát những bước kiểm tra được chọn trước khi lọc theo mức độ nghiêm trọng. Theo mặc định, lượt chạy lint loại trừ các bước kiểm tra chuyên sâu, mang tính lịch sử hoặc có nhiều khả năng phát hiện phần dư thừa cũ có thể sửa chữa; hãy dùng --all để lấy toàn bộ danh mục. --only <id> là bộ chọn chính xác nhất và có thể chạy bất kỳ bước kiểm tra đã đăng ký nào theo mã.
core/doctor/local-audio-acceleration báo cáo lệnh STT cục bộ được chọn tự động, bằng chứng riêng biệt về backend có khả năng đáp ứng/được yêu cầu/được quan sát và thứ tự dự phòng mà không cần tải mô hình giọng nói. Bước này tạo một phát hiện mang tính thông tin, vì vậy hãy thêm --severity-min info để hiển thị phát hiện đó.
Kiểm tra tình trạng có cấu trúc
Các bước kiểm tra doctor hiện đại sử dụng một hợp đồng phân tách nhỏ:detect() hỗ trợ doctor --lint. repair() là tùy chọn và chỉ chạy trong doctor --fix / doctor --repair. Các bước kiểm tra chưa được di chuyển sang cấu trúc này vẫn sử dụng luồng đóng góp doctor cũ.
Ngữ cảnh sửa chữa có thể mang các yêu cầu dryRun/diff; kết quả sửa chữa có thể trả về diffs có cấu trúc (chỉnh sửa cấu hình/tệp) và effects (dịch vụ, tiến trình, gói, trạng thái hoặc các tác dụng phụ khác), nhờ đó các bước kiểm tra đã chuyển đổi có thể phát triển hướng tới doctor --fix --dry-run mà không chuyển việc lập kế hoạch thay đổi vào detect().
repair() báo cáo status: "repaired" | "skipped" | "failed" (bỏ qua trạng thái có nghĩa là repaired). Khi quá trình sửa chữa trả về skipped hoặc failed, doctor báo cáo lý do và bỏ qua bước xác thực cho kiểm tra đó. Sau khi sửa chữa thành công, doctor chạy lại detect() trong phạm vi các phát hiện đã sửa; nếu phát hiện vẫn còn, doctor báo cáo cảnh báo sửa chữa thay vì coi thay đổi là hoàn tất.
Một phát hiện bao gồm:
Các kiểm tra doctor cốt lõi đã được hiện đại hóa vẫn gắn với phần đóng góp doctor có thứ tự sở hữu hành vi
doctor / doctor --fix dành cho con người của chúng. Registry tình trạng có cấu trúc dùng chung là điểm mở rộng: các kiểm tra đi kèm và dựa trên Plugin chạy sau các kiểm tra doctor cốt lõi khi gói sở hữu chúng đăng ký chúng trong đường dẫn lệnh đang hoạt động. openclaw/plugin-sdk/health cung cấp cùng hợp đồng đó cho tác giả Plugin.
Lựa chọn kiểm tra
--only và --skip chấp nhận ID kiểm tra đầy đủ và có thể được lặp lại. Nếu một ID --only chưa được đăng ký, sẽ không có kiểm tra nào chạy cho ID đó; hãy dùng checksRun/checksSkipped trong đầu ra để xác nhận rằng một cổng kiểm tra tập trung chọn đúng các kiểm tra bạn mong đợi.
Chế độ sau nâng cấp
openclaw doctor --post-upgrade chạy các phép thăm dò khả năng tương thích của Plugin để nối chuỗi sau khi xây dựng hoặc nâng cấp. Các phát hiện được ghi vào stdout; mã thoát là 1 nếu bất kỳ phát hiện nào có level: "error". Thêm --json để nhận một lớp bao có thể đọc bằng máy ({ probesRun, findings }), phù hợp với CI, skill fork-upgrade của cộng đồng và các công cụ kiểm tra nhanh sau nâng cấp khác. Nếu chỉ mục Plugin đã cài đặt bị thiếu hoặc sai định dạng, chế độ JSON vẫn phát lớp bao với một phát hiện lỗi plugin.index_unavailable.
Khởi động ảnh container là ngoại lệ đối với luồng thông thường “chạy doctor sau khi
cập nhật”. Khi openclaw gateway run khởi động trên một phiên bản OpenClaw mới, nó
chạy các bước sửa chữa an toàn cho trạng thái và Plugin trước khi báo cáo sẵn sàng. Nếu quá trình sửa chữa không thể
hoàn tất an toàn, quá trình khởi động sẽ thoát và yêu cầu bạn chạy chính ảnh đó một lần với
openclaw doctor --fix trên cùng trạng thái/cấu hình đã gắn kết trước khi khởi động lại
container theo cách thông thường.
Di chuyển trạng thái cũ
openclaw doctor --fix là chủ sở hữu duy nhất của các quá trình di chuyển lâu bền từ tệp sang SQLite. Nó xác thực và tiếp nhận từng nguồn được nhận dạng, ghi và xác minh các hàng chuẩn, ghi lại biên nhận di chuyển, sau đó xóa nguồn đã ngừng sử dụng. Mã thời gian chạy không thực hiện nhập lười hoặc đọc dự phòng.
Điều này bao gồm các tệp OAuth MCP đã ngừng sử dụng trong <state-dir>/mcp-oauth/*.json. Hãy dừng Gateway trước khi sửa chữa. Doctor nhập thông tin xác thực hợp lệ vào <state-dir>/state/openclaw.sqlite, giữ nguyên phiên SQLite chuẩn hiện có khi cả hai kho cùng tồn tại, loại bỏ giá trị OAuth state lâu bền đã lỗi thời và dùng biên nhận của nó để ngăn một tệp cũ được tạo lại khôi phục thông tin xác thực đã đăng xuất. Các tệp phụ .lock đã ngừng sử dụng sẽ đóng khi lỗi: nếu Doctor báo cáo một chủ sở hữu cũ, hãy xác minh rằng không có tiến trình OpenClaw cũ nào đang chạy, xóa tệp phụ đó và chạy lại Doctor.
Compaction SQLite trạng thái dùng chung
Xem Lược đồ cơ sở dữ liệu để biết về quản lý phiên bản lược đồ, kiểm tra tính toàn vẹn và khôi phục khi hạ cấp.openclaw doctor --state-sqlite compact là hoạt động bảo trì ngoại tuyến tường minh cho
cơ sở dữ liệu trạng thái dùng chung chuẩn tại
<state-dir>/state/openclaw.sqlite. Lệnh này không chấp nhận đường dẫn cơ sở dữ liệu
tùy ý, không bao giờ được hoạt động Gateway thông thường gọi và không phải là một phần của
openclaw doctor --fix. Lệnh lấy cùng khóa quyền sở hữu trạng thái như khi
Gateway khởi động và giữ khóa trong suốt quá trình xác thực, tạo điểm kiểm tra, VACUUM và
các bước kiểm tra tính toàn vẹn cuối cùng. Lệnh từ chối chạy khi một Gateway hoặc một
lệnh bảo trì SQLite khác đang sở hữu khóa đó. Khóa trạng thái vẫn hoạt động khi
OPENCLAW_ALLOW_MULTI_GATEWAY=1 bỏ qua phiên bản Gateway đơn nhất theo từng cấu hình, vì vậy
shell của người vận hành không cần kế thừa môi trường của dịch vụ Gateway để
quá trình bảo trì phát hiện được dịch vụ này.
Trước tiên, hãy dừng Gateway và tạo một bản sao lưu đã xác minh:
- Yêu cầu một tệp thông thường tại đường dẫn trạng thái dùng chung chuẩn. Cơ sở dữ liệu
bị thiếu được báo cáo là
skippedvà thoát thành công. - Xác thực phiên bản lược đồ hiện được hỗ trợ và
schema_meta.role = "global"trước khi tạo điểm kiểm tra hoặc thay đổi tệp. - Yêu cầu
wal_checkpoint(TRUNCATE)không bận. Hãy dừng mọi tiến trình OpenClaw còn lại và thử lại nếu điểm kiểm tra đang bận. - Đặt
auto_vacuumthànhINCREMENTAL, chạyVACUUMđầy đủ và tạo điểm kiểm tra lần nữa. - Chạy
quick_check,integrity_checkvàforeign_key_check, sau đó áp dụng lại quyền chỉ dành cho chủ sở hữu đối với cơ sở dữ liệu và các tệp phụ SQLite.
auto_vacuum trước và sau Compaction, cùng số byte đã thu hồi và
kết quả quick_check và integrity_check. foreign_key_check được thực thi theo chế độ
đóng khi lỗi và không có trường thành công riêng. SQLite báo cáo auto_vacuum dưới dạng
0 khi không có, 1 khi đầy đủ và 2 khi tăng dần.
Compaction thất bại mà không thay đổi dữ liệu khi lược đồ đã cũ, mới hơn
bản dựng OpenClaw đang chạy hoặc thuộc về cơ sở dữ liệu của agent. Trước tiên, hãy chạy
openclaw doctor --fix đối với lược đồ trạng thái dùng chung cũ hơn. Khôi phục một
bản sao lưu tương thích hoặc nâng cấp OpenClaw đối với lược đồ mới hơn.
Di chuyển SQLite của phiên
OpenClaw tự động nhập các hàng phiên cũ và lịch sử bản chép lời vào cơ sở dữ liệu SQLite của từng agent trong quá trình khởi động Gateway và trongopenclaw doctor --fix. openclaw doctor --session-sqlite <mode> là
công cụ kiểm tra và xác thực chuyên biệt cho quá trình di chuyển đó. Các hàng phiên
thời gian chạy hiện tại nằm trong
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite. Các tệp
sessions.json cũ là nguồn di chuyển. Các tệp JSONL bản chép lời đang hoạt động được
nhập và lưu trữ ra khỏi thư mục phiên đang hoạt động sau khi nhập
thành công; các tệp JSONL ở tầng lưu trữ vẫn là hiện vật hỗ trợ, không phải
nguồn dự phòng thời gian chạy.
Các chế độ:
Bộ chọn:
- Mặc định: kho agent mặc định đã cấu hình, khi tệp kho cũ đó tồn tại.
--session-sqlite-agent <id>: một agent đã cấu hình.--session-sqlite-all-agents: các kho agent đã cấu hình cùng các kho agent được phát hiện.--session-sqlite-store <path>: một đường dẫnsessions.jsoncũ được chỉ định tường minh.
import trên một bản cài đặt có
lịch sử quan trọng. validate thoát với mã khác 0 khi một mục cũ đã chọn
bị thiếu trong SQLite, ID phiên khác nhau hoặc số lượng sự kiện bản chép lời khác nhau.
Khi dùng --session-sqlite-store <path>, hãy kiểm tra rằng báo cáo chứa
số lượng mục tiêu dự kiến; một đường dẫn kho tường minh không tồn tại sẽ không chọn mục tiêu nào.
Các thao tác xóa SQLite trước tiên thu hồi các trang bên trong cơ sở dữ liệu; chúng không nhất thiết
làm tệp cơ sở dữ liệu thu nhỏ ngay lập tức. Sau khi xóa hoặc lưu trữ các
bản chép lời lớn, hãy chạy openclaw doctor --session-sqlite compact --session-sqlite-all-agents
để tạo điểm kiểm tra cho các tệp WAL, chạy VACUUM và báo cáo kích thước cơ sở dữ liệu và WAL
trước/sau. Compaction yêu cầu một tệp thông thường có lược đồ agent hiện tại,
siêu dữ liệu chủ sở hữu lâu bền của agent đã chọn và không có handle đang mở trong tiến trình
doctor. Các chế độ phá hủy import, compact, recover và restore
giữ cùng khóa quyền sở hữu trạng thái như khi Gateway khởi động trong toàn bộ hoạt động của chúng;
inspect, dry-run và validate vẫn chỉ đọc và không lấy khóa. Trước tiên, hãy dừng
Gateway. Các chế độ phá hủy thất bại thay vì chạy đua với thao tác ghi trực tiếp hoặc
một lệnh bảo trì khác. Mục tiêu --session-sqlite-store
phá hủy phải nằm trong thư mục trạng thái đang hoạt động; hãy đặt OPENCLAW_STATE_DIR thành
thư mục trạng thái sở hữu kho trước khi bảo trì một bản cài đặt khác.
Các mục tiêu liên kết cứng hiện có bị từ chối vì một đường dẫn khác có thể dùng chung
inode cơ sở dữ liệu bên ngoài thư mục trạng thái đã khóa. Các bước kiểm tra quyền sở hữu tương tự
bao phủ các tệp phụ WAL, bộ nhớ dùng chung và nhật ký hoàn tác của SQLite.
Mỗi lần nhập ghi một manifest vào
~/.openclaw/session-sqlite-migration-runs/ trước khi chuyển các hiện vật bản chép lời
vào kho lưu trữ. Nếu quá trình khởi động báo cáo một lần di chuyển SQLite của phiên thất bại sau khi
các hiện vật đã được di chuyển, hãy chạy khôi phục:
.failure.md và .failure.json đã được làm sạch, đồng thời chuẩn bị nội dung
sự cố GitHub không chứa nội dung bản ghi hội thoại, môi trường thô, bí mật và
cấu hình không giới hạn. Khi không có manifest di chuyển bị lỗi nhưng cơ sở dữ liệu
SQLite của tác nhân đã chọn bị hỏng, không phải là cơ sở dữ liệu hoặc có các tệp
nhật ký phụ nhưng không có cơ sở dữ liệu chính, quá trình khôi phục sẽ sao chép
toàn bộ tập hợp tệp vào một thư mục kiểm tra tạm thời. SQLite có thể hoàn tác
một nhật ký nóng hợp lệ trong bản sao dùng một lần đó trước khi chạy
quick_check, integrity_check và foreign_key_check, trong khi các tệp
điều tra ban đầu vẫn không bị thay đổi. Các lần kiểm tra tính toàn vẹn thất bại
hoặc các tệp phụ mồ côi sẽ bảo toàn các tệp DB, WAL, SHM và nhật ký hoàn tác bằng
cách đổi tên toàn bộ tập hợp được phát hiện với cùng một hậu tố .corrupt-<timestamp>.
Nếu bắt được lỗi đổi tên, các tệp đã di chuyển sẽ được hoàn tác trước khi báo lỗi,
nhờ đó tập hợp tệp có thể khôi phục không bị âm thầm chia tách. Hãy dừng Gateway
trước khi khôi phục; việc sao chép hoặc đổi tên một tập hợp tệp SQLite đang thay
đổi là không an toàn và có hành vi khác nhau giữa các hệ điều hành. Với
--github-issue --yes, doctor sử dụng GitHub CLI để tạo sự cố trong
openclaw/openclaw; nếu không có xác nhận, công cụ sẽ ghi báo cáo hỗ trợ cục bộ
và in URL sự cố đã được điền sẵn.
restore vẫn là thao tác hoàn tác cấp thấp hơn. Thao tác này sử dụng
các bản ghi sourcePath -> archivePath của manifest, chỉ di chuyển các cấu phần đã lưu trữ
trở lại khi đường dẫn ban đầu không tồn tại, báo cáo xung đột khi cả hai đường dẫn
đều tồn tại và giữ nguyên cơ sở dữ liệu SQLite.
Hạ cấp sau khi di chuyển phiên sang SQLite
Trước khi khởi động một phiên bản OpenClaw cũ hơn sử dụng tệp, hãy khôi phục các cấu phần bản ghi hội thoại cũ đã lưu trữ:sessions.json và các đường dẫn
sessionFile được ghi trong những mục đó. Sau khi di chuyển sang SQLite,
các lần nhập thành công sẽ chuyển bản ghi hội thoại JSONL đang hoạt động vào
session-sqlite-import-archive/, vì vậy runtime cũ hơn không thể thấy lịch sử đó cho đến khi
thao tác khôi phục chuyển các cấu phần được ghi trong manifest trở lại đường dẫn
ban đầu của chúng.
Thao tác khôi phục không xóa dữ liệu SQLite. Các phiên được tạo sau khi chuyển
sang SQLite chỉ tồn tại trong SQLite và sẽ không xuất hiện trong runtime cũ hơn.
Nếu sau đó bạn nâng cấp lại, hãy chạy trình tự xác thực di chuyển thông thường
ở trên để OpenClaw có thể so sánh các cấu phần cũ đã khôi phục với các hàng
SQLite trước khi nhập.
Ghi chú
- Ở chế độ Nix (
OPENCLAW_NIX_MODE=1), các bước kiểm tra doctor chỉ đọc vẫn hoạt động, nhưngdoctor --fix,doctor --repair,doctor --yesvàdoctor --generate-gateway-tokenbị vô hiệu hóa vìopenclaw.jsonlà bất biến. Thay vào đó, hãy chỉnh sửa nguồn Nix cho bản cài đặt này; với nix-openclaw, hãy sử dụng Bắt đầu nhanh ưu tiên agent. - Các lời nhắc tương tác (sửa lỗi keychain/OAuth, v.v.) chỉ chạy khi stdin là TTY và
--non-interactivekhông được đặt. Các lượt chạy không giao diện (cron, Telegram, không có terminal) sẽ bỏ qua lời nhắc. - Các lượt chạy
doctorkhông tương tác bỏ qua việc tải sớm plugin để các bước kiểm tra tình trạng không giao diện luôn nhanh. Các phiên tương tác vẫn tải những bề mặt plugin cần thiết cho luồng kiểm tra tình trạng/sửa chữa cũ. --lintnghiêm ngặt hơn--non-interactive: luôn chỉ đọc, không bao giờ hiển thị lời nhắc và không bao giờ áp dụng các bước di chuyển an toàn. Sử dụngdoctor --fixhoặcdoctor --repairkhi bạn muốn doctor thực hiện thay đổi.- Theo mặc định, Doctor không thực thi các SecretRef
execkhi kiểm tra bí mật. Chỉ sử dụng--allow-exec(có hoặc không có--lint) khi bạn chủ ý muốn doctor chạy các trình phân giải bí mật đã cấu hình đó. - Mọi thao tác ghi cấu hình (bao gồm sửa chữa
--fix) đều luân chuyển bản sao lưu sang~/.openclaw/openclaw.json.bak(với vòng được đánh số từ.bak.1...bak.4).--fixcũng loại bỏ các khóa cấu hình không xác định do quá trình xác thực schema báo cáo và liệt kê từng mục bị xóa; thao tác này bị bỏ qua khi đang cập nhật để trạng thái nâng cấp mới ghi một phần không bị loại bỏ trước khi quá trình di chuyển hoàn tất. - Nếu không thể phân tích cú pháp
openclaw.jsonvà không thể khôi phục cấu hình tốt gần nhất,doctor --fixgiữ nguyên bản gốc dưới tênopenclaw.json.clobbered.<timestamp>, không thay đổi tệp hiện tại và thoát với lỗi thay vì ghi một bản thay thế không đầy đủ. - Đặt
OPENCLAW_SERVICE_REPAIR_POLICY=externalkhi một trình giám sát khác quản lý vòng đời Gateway. Doctor vẫn báo cáo tình trạng Gateway/dịch vụ và áp dụng các sửa chữa không liên quan đến dịch vụ, nhưng bỏ qua việc cài đặt/khởi động/khởi động lại/bootstrap dịch vụ và dọn dẹp dịch vụ cũ. - Doctor báo cáo giới hạn heap đã áp dụng của Gateway được quản lý và cách suy ra thích ứng được dùng cho giới hạn bộ nhớ hiện tại của máy chủ hoặc vùng chứa. Sử dụng
openclaw gateway statusđể xem cùng báo cáo đó bên ngoài một lượt sửa chữa. - Trên Linux, doctor bỏ qua các unit systemd bổ sung giống gateway nhưng không hoạt động và không ghi lại metadata lệnh/điểm vào cho một dịch vụ gateway systemd đang chạy trong quá trình sửa chữa. Trước tiên hãy dừng dịch vụ hoặc sử dụng
openclaw gateway install --forceđể thay thế trình khởi chạy đang hoạt động. doctor --fix --non-interactivebáo cáo các định nghĩa dịch vụ gateway bị thiếu hoặc lỗi thời nhưng không cài đặt hay ghi lại chúng bên ngoài chế độ sửa chữa cập nhật. Chạyopenclaw gateway installkhi dịch vụ bị thiếu hoặcopenclaw gateway install --forceđể thay thế trình khởi chạy.- Các bước kiểm tra tính toàn vẹn của trạng thái phát hiện những tệp bản chép lời mồ côi trong thư mục phiên. Việc lưu trữ chúng dưới dạng
.deleted.<timestamp>yêu cầu xác nhận tương tác;--fix,--yesvà các lượt chạy không giao diện sẽ giữ nguyên chúng. - Doctor quét
~/.openclaw/cron/jobs.json(hoặccron.store) để tìm các dạng công việc cron cũ và ghi lại chúng trước khi nhập các hàng chuẩn hóa vào SQLite. - Doctor báo cáo các công việc cron có giá trị ghi đè
payload.modelrõ ràng, bao gồm số lượng theo không gian tên nhà cung cấp và các điểm không khớp vớiagents.defaults.model, nhờ đó những công việc theo lịch không kế thừa mô hình mặc định sẽ hiển thị trong quá trình điều tra xác thực hoặc thanh toán. - Doctor báo cáo các công việc cron vẫn được đánh dấu đang thực thi (
state.runningAtMs), điều có thể khiếnopenclaw cron listhiển thị chúng dưới dạngrunning. Bước kiểm tra này chỉ đọc: nếu hiện không có Gateway nào đang thực thi một công việc được đánh dấu, lần khởi động dịch vụ cron tiếp theo sẽ ghi nhận lượt chạy bị gián đoạn và xóa dấu. - Trên Linux, doctor cảnh báo khi crontab của người dùng vẫn chạy
~/.openclaw/bin/ensure-whatsapp.shcũ không còn được bảo trì, vốn có thể báo cáo saiGateway inactivekhi cron không có môi trường bus người dùng systemd. - Khi WhatsApp được bật, doctor kiểm tra vòng lặp sự kiện Gateway bị suy giảm trong khi các máy khách
openclaw-tuicục bộ vẫn đang chạy.doctor --fixchỉ dừng các máy khách TUI cục bộ đã xác minh để phản hồi WhatsApp không bị xếp hàng phía sau những vòng lặp làm mới TUI lỗi thời. - Khi có các biến môi trường proxy HTTP(S) nhưng
tools.web.fetch.useTrustedEnvProxybị vô hiệu hóa, doctor giải thích rằngweb_fetchvẫn sử dụng định tuyến trực tiếp, chạy một phép thăm dò ngắn về khả năng kết nối TLS trực tiếp và nêu rõ tùy chọn đồng ý bật. Doctor không bao giờ tự động bật việc tin cậy proxy. - Doctor ghi lại các tham chiếu mô hình
codex/*vàopenai-codex/*cũ thành các tham chiếuopenai/*chuẩn hóa trên các mô hình chính, phương án dự phòng, danh sách mô hình được phép, mô hình tạo hình ảnh/video, giá trị ghi đè heartbeat/subagent/compaction, hook, giá trị ghi đè mô hình kênh, payload cron và ghim tuyến phiên/bản chép lời lỗi thời.--fixcũng hợp nhất cấu hìnhmodels.providers.codexvàmodels.providers.openai-codexcũ khi an toàn, di chuyển các hồ sơ xác thựcopenai-codex:*và mụcauth.order.openai-codexcũ sangopenai:*, chuyển ý định Codex sang các mụcagentRuntime.id: "codex"theo phạm vi nhà cung cấp/mô hình, xóa các ghim thời gian chạy toàn agent/phiên lỗi thời và giữ các tham chiếu agent OpenAI đã sửa chữa trên định tuyến xác thực Codex thay vì xác thực trực tiếp bằng khóa API OpenAI. - Doctor báo cáo các danh sách
auth.order.<provider>không rỗng mà tất cả hồ sơ được tham chiếu đều đã biến mất trong khi vẫn tồn tại thông tin xác thực tương thích được lưu trữ.doctor --fixchỉ xóa những giá trị ghi đè lỗi thời đó, khôi phục việc tự động chọn thông tin xác thực theo từng agent; thứ tự rỗng rõ ràng, danh sách còn một phần hoạt động và thứ tự không có thông tin xác thực tương thích được lưu trữ sẽ không thay đổi. Nếu kho xác thực SQLite đang hoạt động không thể đọc được hoặc sai định dạng, doctor sẽ giải thích lý do bỏ qua sửa chữa này. Hãy khởi động lại Gateway đang chạy trước khi kiểm tra lại trạng thái xác thực nếu chế độ tải lại cấu hình của Gateway không tự động áp dụng thao tác ghi. - Doctor dọn dẹp trạng thái tạm chuyển tiếp phụ thuộc plugin cũ từ các phiên bản OpenClaw trước đây và liên kết lại gói
openclawcủa máy chủ cho các plugin npm được quản lý khai báo gói đó là phụ thuộc ngang hàng. Doctor cũng sửa chữa các plugin có thể tải xuống bị thiếu nhưng được cấu hình tham chiếu (plugins.entries, các kênh đã cấu hình, cài đặt nhà cung cấp/tìm kiếm đã cấu hình, môi trường chạy agent đã cấu hình). Trong quá trình cập nhật gói, doctor bỏ qua việc sửa chữa plugin bằng trình quản lý gói cho đến khi hoàn tất thay thế gói; sau đó hãy chạy lạiopenclaw doctor --fixnếu một plugin đã cấu hình vẫn cần khôi phục. Nếu tải xuống thất bại, doctor báo cáo lỗi cài đặt và giữ nguyên mục plugin đã cấu hình cho lần sửa chữa tiếp theo. - Doctor sửa chữa cấu hình plugin lỗi thời bằng cách xóa các id plugin bị thiếu khỏi
plugins.allow/plugins.deny/plugins.entries, cùng với cấu hình kênh treo tương ứng, đích heartbeat và giá trị ghi đè mô hình kênh khi quá trình khám phá plugin hoạt động bình thường. - Doctor cách ly cấu hình plugin không hợp lệ bằng cách vô hiệu hóa mục
plugins.entries.<id>bị ảnh hưởng và xóa payloadconfigkhông hợp lệ của mục đó. Quá trình khởi động Gateway vốn đã chỉ bỏ qua plugin lỗi đó để các plugin và kênh khác tiếp tục chạy. - Doctor xóa
plugins.entries.codex.config.codexDynamicToolsProfileđã ngừng sử dụng; app-server Codex luôn giữ các công cụ không gian làm việc gốc Codex ở dạng gốc. - Doctor tự động di chuyển cấu hình Talk phẳng cũ (
talk.voiceId,talk.modelIdvà các mục liên quan) sangtalk.provider+talk.providers.<provider>. Các lượt chạydoctor --fixlặp lại không còn báo cáo/áp dụng việc chuẩn hóa Talk khi điểm khác biệt duy nhất là thứ tự khóa đối tượng. - Doctor bao gồm bước kiểm tra mức độ sẵn sàng của tìm kiếm bộ nhớ và có thể đề xuất
openclaw configure --section modelkhi thiếu thông tin xác thực nhúng. - Doctor cảnh báo khi chưa cấu hình chủ sở hữu lệnh. Chủ sở hữu lệnh là tài khoản người vận hành cho phép chạy các lệnh chỉ dành cho chủ sở hữu và phê duyệt các hành động nguy hiểm. Việc ghép cặp DM chỉ cho phép một người trò chuyện với bot; nếu bạn đã phê duyệt một người gửi trước khi cơ chế bootstrap chủ sở hữu đầu tiên tồn tại, hãy đặt rõ ràng
commands.ownerAllowFrom. - Doctor báo cáo một ghi chú thông tin khi các agent ở chế độ Codex được cấu hình và có tài sản Codex CLI cá nhân trong thư mục gốc Codex của người vận hành. Các lần khởi chạy app-server Codex cục bộ sử dụng thư mục gốc riêng biệt cho từng agent; trước tiên hãy cài đặt plugin Codex nếu cần, sau đó sử dụng
openclaw migrate plan codexđể kiểm kê những tài sản cần được chủ ý đưa vào sử dụng. - Doctor cảnh báo khi các skill được phép cho agent mặc định không khả dụng trong môi trường chạy hiện tại (thiếu tệp nhị phân, biến môi trường, cấu hình hoặc yêu cầu hệ điều hành).
doctor --fixcó thể vô hiệu hóa các skill không khả dụng đó bằngskills.entries.<skill>.enabled=false; thay vào đó, hãy cài đặt/cấu hình yêu cầu còn thiếu nếu bạn muốn giữ skill hoạt động. - Nếu chế độ sandbox được bật nhưng Docker không khả dụng, doctor báo cáo cảnh báo rõ ràng kèm cách khắc phục (
install Dockerhoặcopenclaw config set agents.defaults.sandbox.mode off). - Nếu tồn tại các tệp registry sandbox hoặc thư mục phân mảnh cũ (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/hoặc~/.openclaw/sandbox/browsers/), doctor sẽ báo cáo chúng;--fixdi chuyển các mục hợp lệ vào SQLite và cách ly các tệp cũ không hợp lệ. - Nếu
gateway.auth.token/gateway.auth.passwordđược SecretRef quản lý và không khả dụng trong đường dẫn lệnh hiện tại, doctor báo cáo cảnh báo chỉ đọc và không ghi thông tin xác thực dự phòng ở dạng văn bản thuần túy. Đối với SecretRef dựa trên exec, doctor bỏ qua việc thực thi trừ khi có--allow-exec. - Nếu quá trình kiểm tra SecretRef của kênh thất bại trong đường dẫn sửa lỗi, doctor tiếp tục và báo cáo cảnh báo thay vì thoát sớm.
- Sau khi di chuyển thư mục trạng thái, doctor cảnh báo khi các tài khoản Telegram hoặc Discord mặc định đã bật phụ thuộc vào phương án dự phòng từ môi trường và
TELEGRAM_BOT_TOKENhoặcDISCORD_BOT_TOKENkhông khả dụng cho tiến trình doctor. - Việc tự động phân giải tên người dùng
allowFromcủa Telegram (doctor --fix) yêu cầu token Telegram có thể phân giải trong đường dẫn lệnh hiện tại. Nếu không thể kiểm tra token, doctor báo cáo cảnh báo và bỏ qua việc tự động phân giải trong lượt đó.
macOS: giá trị ghi đè env launchctl
Nếu trước đây bạn đã chạy launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (hoặc ...PASSWORD), giá trị đó sẽ ghi đè tệp cấu hình và có thể gây ra lỗi “unauthorized” kéo dài.