CLI commands
ตัวตรวจสอบระบบ
openclaw doctor
การตรวจสอบสถานะและการแก้ไขด่วนสำหรับ Gateway, ช่องทาง, Plugin, Skills, การกำหนดเส้นทางโมเดล, สถานะภายในเครื่อง และการย้ายการกำหนดค่า ใช้เมื่อใดก็ตามที่บางสิ่งไม่ทำงานตามที่คาดไว้และต้องการให้คำสั่งเดียวอธิบายว่าสิ่งใดผิดปกติ
เมื่อสถานะ Gateway รายงานว่าเจ้าของ SecretRef อยู่ในสถานะเสื่อมประสิทธิภาพ doctor จะแสดงคำเตือน การเสื่อมประสิทธิภาพของรันไทม์ข้อมูลลับ พร้อมเจ้าของที่อยู่ในสถานะ cold หรือ stale ทุกราย พาธการกำหนดค่าที่ได้รับผลกระทบ เหตุผลที่ปกปิดข้อมูลสำคัญแล้ว และคำสั่งลองใหม่ openclaw secrets reload
เมื่อเหตุการณ์ขาเข้าของช่องทางถูกส่งไปยังคิว dead-letter doctor จะระบุบัญชีช่องทางที่ได้รับผลกระทบแต่ละบัญชีและชี้ไปยัง openclaw channels dead-letters list สำหรับการตรวจสอบและกู้คืน
เนื้อหาที่เกี่ยวข้อง:
- การแก้ไขปัญหา: การแก้ไขปัญหา
- การตรวจสอบความปลอดภัย: ความปลอดภัย
รูปแบบการทำงาน
Doctor มีรูปแบบการทำงานห้าแบบ:
| รูปแบบการทำงาน | คำสั่ง | ลักษณะการทำงาน |
|---|---|---|
| ตรวจสอบ | openclaw doctor |
การตรวจสอบที่เน้นผู้ใช้และพรอมต์แนะนำขั้นตอน |
| ซ่อมแซม | openclaw doctor --fix |
ใช้การซ่อมแซมที่รองรับ โดยใช้พรอมต์ เว้นแต่การซ่อมแซมแบบไม่โต้ตอบจะปลอดภัย |
| Lint | openclaw doctor --lint |
ผลการตรวจพบแบบมีโครงสร้างและอ่านอย่างเดียวสำหรับ CI, การตรวจสอบเบื้องต้น และเกตการรีวิว |
| การบำรุงรักษา SQLite ที่ใช้ร่วมกัน | openclaw doctor --state-sqlite compact |
สร้าง checkpoint, compact และตรวจสอบฐานข้อมูลสถานะที่ใช้ร่วมกันซึ่งเป็นแหล่งข้อมูลหลักอย่างชัดเจน |
| การย้าย SQLite ของเซสชัน | openclaw doctor --session-sqlite <mode> |
ตรวจสอบ นำเข้า ตรวจสอบความถูกต้อง compact กู้คืน หรือคืนค่าสถานะเซสชัน |
เลือกใช้ --lint เมื่อระบบอัตโนมัติต้องการผลลัพธ์ที่เสถียร เลือกใช้ --fix เมื่อผู้ปฏิบัติงานต้องการให้ doctor แก้ไขการกำหนดค่าหรือสถานะ
ตัวอย่าง
openclaw doctoropenclaw doctor --lintopenclaw doctor --lint --jsonopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --deepopenclaw doctor --fixopenclaw doctor --fix --non-interactiveopenclaw doctor --generate-gateway-tokenopenclaw doctor --post-upgradeopenclaw doctor --post-upgrade --jsonopenclaw doctor --state-sqlite compactopenclaw doctor --state-sqlite compact --jsonopenclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-agent main --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issueopenclaw doctor --session-sqlite restore --session-sqlite-all-agentsสำหรับสิทธิ์เฉพาะช่องทาง ให้ใช้โพรบช่องทางแทน doctor:
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probechannels capabilities รายงานสิทธิ์ที่บอตมีผลใช้งานจริงสำหรับเป้าหมายช่องทางที่ระบุ channels status --probe ตรวจสอบช่องทางที่กำหนดค่าทั้งหมดและเป้าหมายการเข้าร่วมเสียงอัตโนมัติ
ตัวเลือก
| ตัวเลือก | ผล |
|---|---|
--no-workspace-suggestions |
ปิดคำแนะนำหน่วยความจำ/การค้นหาของพื้นที่ทำงาน |
--yes |
ยอมรับค่าเริ่มต้นโดยไม่แสดงพรอมต์ |
--repair / --fix |
ใช้การซ่อมแซมที่แนะนำซึ่งไม่เกี่ยวกับบริการโดยไม่แสดงพรอมต์ (--fix เป็นนามแฝง) การติดตั้ง/เขียนการกำหนดค่าบริการ Gateway ใหม่ยังคงต้องได้รับการยืนยันแบบโต้ตอบหรือใช้คำสั่ง gateway อย่างชัดเจน |
--force |
ใช้การซ่อมแซมเชิงรุก รวมถึงการเขียนทับการกำหนดค่าบริการที่ปรับแต่งเอง |
--non-interactive |
ทำงานโดยไม่มีพรอมต์ โดยดำเนินการเฉพาะการย้ายที่ปลอดภัยและการซ่อมแซมที่ไม่เกี่ยวกับบริการ |
--generate-gateway-token |
สร้างและกำหนดค่าโทเค็น Gateway |
--allow-exec |
อนุญาตให้ doctor เรียกใช้ SecretRef exec ที่กำหนดค่าไว้ขณะตรวจสอบข้อมูลลับ |
--deep |
สแกนบริการระบบเพื่อค้นหาการติดตั้ง Gateway เพิ่มเติม และรายงานการส่งต่องานรีสตาร์ตล่าสุดของตัวควบคุม Gateway |
--lint |
เรียกใช้การตรวจสอบสถานะที่ปรับปรุงใหม่ในโหมดอ่านอย่างเดียวและแสดงผลการตรวจวินิจฉัย |
--post-upgrade |
เรียกใช้โพรบความเข้ากันได้ของ Plugin หลังการอัปเกรด ผลการตรวจพบจะส่งไปยัง stdout และใช้รหัสออก 1 หากมีผลการตรวจพบระดับข้อผิดพลาดอย่างน้อยหนึ่งรายการ |
--state-sqlite <mode> |
เรียกใช้การบำรุงรักษา SQLite ของสถานะที่ใช้ร่วมกันอย่างชัดเจน โดยมีเพียงโหมด compact |
--session-sqlite <mode> |
เรียกใช้โหมดการย้าย SQLite ของเซสชันแบบเจาะจง: inspect, dry-run, import, validate, compact, recover หรือ restore |
--session-sqlite-store <path> |
เมื่อใช้ร่วมกับ --session-sqlite: เลือกพาธพื้นที่จัดเก็บ sessions.json แบบเดิมหนึ่งพาธ |
--session-sqlite-agent <id> |
เมื่อใช้ร่วมกับ --session-sqlite: เลือกเอเจนต์ที่กำหนดค่าไว้หนึ่งรายการ |
--session-sqlite-all-agents |
เมื่อใช้ร่วมกับ --session-sqlite: เลือกพื้นที่จัดเก็บของเอเจนต์ที่กำหนดค่าไว้และที่ค้นพบ |
--github-issue |
เมื่อใช้ร่วมกับ --session-sqlite recover: เตรียมรายงานปัญหา openclaw/openclaw ที่ลบข้อมูลสำคัญแล้ว โดย doctor จะสร้างรายงานด้วย gh หลังจาก --yes หรือได้รับการยืนยันแบบโต้ตอบ |
--json |
เมื่อใช้ร่วมกับ --lint: ผลการตรวจพบแบบ JSON เมื่อใช้ร่วมกับ --post-upgrade: { probesRun, findings } เมื่อใช้ร่วมกับ --state-sqlite หรือ --session-sqlite: รายงานการบำรุงรักษาในรูปแบบ JSON |
--severity-min <level> |
เมื่อใช้ร่วมกับ --lint: ตัดผลการตรวจพบที่ต่ำกว่า info, warning หรือ error |
--all |
เมื่อใช้ร่วมกับ --lint: เรียกใช้การตรวจสอบที่ลงทะเบียนทั้งหมด รวมถึงการตรวจสอบแบบเลือกใช้ที่ไม่รวมอยู่ในชุดเริ่มต้น |
--skip <id> |
เมื่อใช้ร่วมกับ --lint: ข้าม ID การตรวจสอบหนึ่งรายการ ระบุซ้ำได้ |
--only <id> |
เมื่อใช้ร่วมกับ --lint: เรียกใช้เฉพาะ ID การตรวจสอบที่ระบุ ระบุซ้ำได้ |
--severity-min, --all, --only และ --skip จะยอมรับเมื่อใช้ร่วมกับ --lint เท่านั้น ส่วน --json จะยอมรับเมื่อใช้ร่วมกับ --lint, --post-upgrade, --state-sqlite และ --session-sqlite
โหมด Lint
openclaw doctor --lint เป็นแบบอ่านอย่างเดียว: ไม่มีพรอมต์ ไม่มีการซ่อมแซม และไม่มีการเขียนการกำหนดค่าหรือสถานะใหม่
openclaw doctor --lintopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --jsonopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoผลลัพธ์สำหรับผู้ใช้อ่านมีรูปแบบกระชับ:
doctor --lint: เรียกใช้การตรวจสอบ 6 รายการ พบผลการตรวจสอบ 1 รายการ [warning] core/doctor/gateway-config gateway.mode - ยังไม่ได้ตั้งค่า gateway.mode; การเริ่มต้น Gateway จะถูกปิดกั้น การแก้ไข: เรียกใช้ `openclaw configure` แล้วตั้งค่าโหมด Gateway (local/remote) หรือใช้ `openclaw config set gateway.mode local`ผลลัพธ์ JSON เป็นพื้นผิวสำหรับการเขียนสคริปต์:
{ "ok": false, "checksRun": 5, "checksSkipped": 0, "findings": [ { "checkId": "core/doctor/gateway-config", "severity": "warning", "message": "ยังไม่ได้ตั้งค่า gateway.mode; การเริ่มต้น Gateway จะถูกปิดกั้น", "path": "gateway.mode", "fixHint": "เรียกใช้ `openclaw configure` แล้วตั้งค่าโหมด Gateway (local/remote) หรือใช้ `openclaw config set gateway.mode local`" } ]}รหัสออก:
| รหัส | ความหมาย |
|---|---|
0 |
ไม่มีผลการตรวจพบที่ระดับหรือสูงกว่าเกณฑ์ความรุนแรงที่เลือกไว้ |
1 |
มีผลการตรวจพบอย่างน้อยหนึ่งรายการที่ตรงตามเกณฑ์ที่เลือกไว้ |
2 |
คำสั่ง/รันไทม์ล้มเหลวก่อนที่จะสร้างผลการตรวจพบจาก Lint ได้ |
--severity-min ควบคุมทั้งผลการตรวจพบที่จะแสดงและเกณฑ์รหัสออก: openclaw doctor --lint --severity-min error อาจไม่แสดงสิ่งใดและออกด้วยรหัส 0 แม้ว่าจะมีผลการตรวจพบ info/warning ที่มีระดับความรุนแรงต่ำกว่าก็ตาม
--all ควบคุมการเลือกการตรวจสอบก่อนกรองตามความรุนแรง การเรียกใช้ Lint เริ่มต้นจะไม่รวมการตรวจสอบที่ลงลึก เกี่ยวข้องกับประวัติ หรือมีแนวโน้มพบสิ่งตกค้างแบบเดิมที่ซ่อมแซมได้มากกว่า ให้ใช้ --all สำหรับรายการทั้งหมด --only <id> เป็นตัวเลือกที่แม่นยำที่สุดและสามารถเรียกใช้การตรวจสอบใด ๆ ที่ลงทะเบียนไว้ตาม ID
core/doctor/local-audio-acceleration รายงานคำสั่ง STT ภายในเครื่องที่เลือกโดยอัตโนมัติ หลักฐานแบ็กเอนด์ที่รองรับ ที่ร้องขอ และที่สังเกตพบแยกจากกัน รวมถึงลำดับ fallback โดยไม่โหลดโมเดลเสียงพูด รายการนี้จะแสดงผลการตรวจพบระดับข้อมูล ดังนั้นให้ระบุ --severity-min info เพื่อแสดงผล
การตรวจสอบสถานะแบบมีโครงสร้าง
การตรวจสอบ doctor สมัยใหม่ใช้สัญญาแบบแยกส่วนขนาดเล็ก:
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResultdetect() ขับเคลื่อน doctor --lint ส่วน repair() เป็นตัวเลือกและจะทำงานเฉพาะภายใต้ doctor --fix / doctor --repair การตรวจสอบที่ยังไม่ได้ย้ายมาใช้รูปแบบนี้จะยังคงใช้ขั้นตอนการมีส่วนร่วมของ doctor แบบเดิม
บริบทการซ่อมแซมสามารถส่งคำขอ dryRun/diff ได้ ส่วนผลลัพธ์การซ่อมแซมสามารถส่งคืน diffs แบบมีโครงสร้าง (การแก้ไขการกำหนดค่า/ไฟล์) และ effects (ผลข้างเคียงต่อบริการ กระบวนการ แพ็กเกจ สถานะ หรือด้านอื่นๆ) เพื่อให้การตรวจสอบที่แปลงแล้วพัฒนาไปสู่ doctor --fix --dry-run ได้โดยไม่ย้ายการวางแผนการเปลี่ยนแปลงไปไว้ใน detect()
repair() รายงาน status: "repaired" | "skipped" | "failed" (หากไม่ระบุสถานะจะหมายถึง repaired) เมื่อการซ่อมแซมส่งคืน skipped หรือ failed doctor จะรายงานเหตุผลและข้ามการตรวจสอบความถูกต้องสำหรับการตรวจสอบนั้น หลังจากซ่อมแซมสำเร็จ doctor จะเรียกใช้ detect() อีกครั้งโดยจำกัดขอบเขตไว้ที่ข้อค้นพบที่ซ่อมแซมแล้ว หากยังพบข้อค้นพบนั้นอยู่ doctor จะรายงานคำเตือนเกี่ยวกับการซ่อมแซมแทนที่จะถือว่าการเปลี่ยนแปลงเสร็จสมบูรณ์
ข้อค้นพบประกอบด้วย:
| ฟิลด์ | วัตถุประสงค์ |
|---|---|
checkId |
รหัสที่คงที่สำหรับตัวกรอง skip/only และรายการที่อนุญาตของ CI |
severity |
info, warning หรือ error |
message |
คำอธิบายปัญหาที่มนุษย์อ่านเข้าใจได้ |
path |
เส้นทางการกำหนดค่า ไฟล์ หรือเส้นทางเชิงตรรกะเมื่อมีข้อมูล |
line / column |
ตำแหน่งต้นทางเมื่อมีข้อมูล |
ocPath |
ที่อยู่ oc:// ที่แม่นยำเมื่อการตรวจสอบสามารถระบุได้ |
fixHint |
การดำเนินการที่แนะนำสำหรับผู้ปฏิบัติงานหรือสรุปการซ่อมแซม |
การตรวจสอบ doctor หลักที่ปรับให้ทันสมัยยังคงผูกอยู่กับส่วนสนับสนุน doctor ตามลำดับซึ่งเป็นเจ้าของพฤติกรรม doctor / doctor --fix สำหรับมนุษย์ รีจิสทรีสถานภาพแบบมีโครงสร้างที่ใช้ร่วมกันเป็นจุดต่อขยาย: การตรวจสอบแบบรวมมาให้และแบบที่รองรับโดย Plugin จะทำงานหลังจากการตรวจสอบ doctor หลัก เมื่อแพ็กเกจเจ้าของลงทะเบียนการตรวจสอบเหล่านั้นในเส้นทางคำสั่งที่ใช้งานอยู่ openclaw/plugin-sdk/health เปิดเผยสัญญาเดียวกันนี้สำหรับผู้เขียน Plugin
การเลือกการตรวจสอบ
openclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --skip core/doctor/skills-readinessopenclaw doctor --lint --all --skip core/doctor/session-locks--only และ --skip รับรหัสการตรวจสอบแบบเต็มและสามารถระบุซ้ำได้ หากไม่มีการลงทะเบียนรหัส --only จะไม่มีการตรวจสอบใดทำงานสำหรับรหัสนั้น ให้ใช้ checksRun/checksSkipped ในผลลัพธ์เพื่อยืนยันว่าเกตแบบเจาะจงเลือกการตรวจสอบตามที่คาดไว้
โหมดหลังการอัปเกรด
openclaw doctor --post-upgrade เรียกใช้การตรวจสอบความเข้ากันได้ของ Plugin เพื่อเชื่อมต่อการทำงานหลังการสร้างหรืออัปเกรด ข้อค้นพบจะถูกส่งไปยัง stdout และรหัสออกจะเป็น 1 หากข้อค้นพบใดมี level: "error" เพิ่ม --json เพื่อให้ได้เอนเวโลปที่เครื่องอ่านได้ ({ probesRun, findings }) ซึ่งเหมาะสำหรับ CI, skill fork-upgrade ของชุมชน และเครื่องมือ smoke test หลังการอัปเกรดอื่นๆ หากดัชนี Plugin ที่ติดตั้งสูญหายหรือมีรูปแบบไม่ถูกต้อง โหมด JSON จะยังคงส่งเอนเวโลปพร้อมข้อค้นพบข้อผิดพลาด plugin.index_unavailable
การเริ่มต้นอิมเมจคอนเทนเนอร์เป็นข้อยกเว้นของขั้นตอนปกติที่ให้ "เรียกใช้ doctor หลัง
การอัปเดต" เมื่อ openclaw gateway run เริ่มทำงานบน OpenClaw เวอร์ชันใหม่ ระบบจะ
ดำเนินการซ่อมแซมสถานะและ Plugin ที่ปลอดภัยก่อนรายงานว่าพร้อมใช้งาน หากการซ่อมแซม
ไม่สามารถเสร็จสิ้นอย่างปลอดภัย การเริ่มต้นจะออกและแจ้งให้เรียกใช้อิมเมจเดียวกันหนึ่งครั้งด้วย
openclaw doctor --fix กับสถานะ/การกำหนดค่าที่เมานต์ชุดเดิม ก่อนเริ่ม
คอนเทนเนอร์ใหม่ตามปกติ
การย้ายสถานะแบบเดิม
openclaw doctor --fix เป็นเจ้าของเพียงรายเดียวสำหรับการย้ายข้อมูลถาวรจากไฟล์ไปยัง SQLite โดยจะตรวจสอบความถูกต้องและรับสิทธิ์ในต้นทางแต่ละรายการที่รู้จัก เขียนและตรวจสอบแถวตามรูปแบบมาตรฐาน บันทึกใบรับรองการย้ายข้อมูล แล้วจึงลบต้นทางที่เลิกใช้ โค้ดรันไทม์จะไม่ดำเนินการนำเข้าแบบหน่วงเวลาหรืออ่านข้อมูลสำรอง
ซึ่งรวมถึงไฟล์ OAuth ของ MCP ที่เลิกใช้ภายใต้ <state-dir>/mcp-oauth/*.json หยุด Gateway ก่อนซ่อมแซม Doctor จะนำเข้าข้อมูลประจำตัวที่ถูกต้องไปยัง <state-dir>/state/openclaw.sqlite รักษาเซสชัน SQLite ตามรูปแบบมาตรฐานที่มีอยู่ไว้เมื่อมีที่เก็บทั้งสองแห่ง ลบค่า OAuth state แบบถาวรที่เลิกใช้ และใช้ใบรับรองเพื่อป้องกันไม่ให้ไฟล์เก่าที่ถูกสร้างขึ้นใหม่กู้คืนข้อมูลประจำตัวที่ออกจากระบบแล้ว ไฟล์ประกอบ .lock ที่เลิกใช้จะปฏิเสธการทำงานโดยค่าเริ่มต้น: หาก Doctor รายงานเจ้าของที่ล้าสมัย ให้ตรวจสอบว่าไม่มีกระบวนการ OpenClaw เวอร์ชันเก่ากำลังทำงานอยู่ ลบไฟล์ประกอบนั้น แล้วเรียกใช้ Doctor อีกครั้ง
Compaction ของ SQLite สำหรับสถานะที่ใช้ร่วมกัน
ดู สคีมาฐานข้อมูล สำหรับการกำหนดเวอร์ชันสคีมา การตรวจสอบความสมบูรณ์ และการกู้คืนหลังดาวน์เกรด
openclaw doctor --state-sqlite compact เป็นการบำรุงรักษาแบบออฟไลน์ที่ต้องสั่งโดยชัดแจ้งสำหรับ
ฐานข้อมูลสถานะที่ใช้ร่วมกันตามรูปแบบมาตรฐานที่
<state-dir>/state/openclaw.sqlite คำสั่งนี้ไม่รับเส้นทางฐานข้อมูล
ที่กำหนดเอง ไม่เคยถูกเรียกใช้โดยการทำงานปกติของ Gateway และไม่เป็นส่วนหนึ่งของ
openclaw doctor --fix คำสั่งจะรับล็อกความเป็นเจ้าของสถานะเดียวกับที่ใช้เมื่อ
Gateway เริ่มต้น และถือล็อกไว้ตลอดการตรวจสอบความถูกต้อง การสร้าง checkpoint, VACUUM และ
การตรวจสอบความสมบูรณ์ขั้นสุดท้าย คำสั่งจะปฏิเสธการทำงานขณะที่ Gateway หรือคำสั่ง
บำรุงรักษา SQLite อื่นถือล็อกนั้นอยู่ ล็อกสถานะยังคงทำงานอยู่เมื่อ
OPENCLAW_ALLOW_MULTI_GATEWAY=1 ข้ามซิงเกิลตัน Gateway ต่อการกำหนดค่า ดังนั้น
เชลล์ของผู้ปฏิบัติงานจึงไม่จำเป็นต้องสืบทอดสภาพแวดล้อมของบริการ Gateway เพื่อให้
การบำรุงรักษาตรวจพบ Gateway ได้
หยุด Gateway และสร้างข้อมูลสำรองที่ตรวจสอบแล้วก่อน:
openclaw gateway stopopenclaw backup create --verifyopenclaw doctor --state-sqlite compact --jsonopenclaw gateway startคำสั่งนี้:
- กำหนดให้เส้นทางสถานะที่ใช้ร่วมกันตามรูปแบบมาตรฐานต้องเป็นไฟล์ปกติ หาก
ไม่มีฐานข้อมูล จะรายงานเป็น
skippedและออกโดยสำเร็จ - ตรวจสอบเวอร์ชันสคีมาที่รองรับในปัจจุบันและ
schema_meta.role = "global"ก่อนสร้าง checkpoint หรือเปลี่ยนแปลงไฟล์ - กำหนดให้
wal_checkpoint(TRUNCATE)ไม่อยู่ในสถานะไม่ว่าง หยุดกระบวนการ OpenClaw ที่ยังเหลืออยู่และลองอีกครั้งหาก checkpoint ไม่ว่าง - ตั้งค่า
auto_vacuumเป็นINCREMENTALเรียกใช้VACUUMแบบเต็ม และสร้าง checkpoint อีกครั้ง - เรียกใช้
quick_check,integrity_checkและforeign_key_checkจากนั้น ใช้สิทธิ์เฉพาะเจ้าของกับฐานข้อมูลและไฟล์ประกอบ SQLite อีกครั้ง
ผลลัพธ์ JSON รายงานขนาดฐานข้อมูลและ WAL จำนวนหน้า freelist ขนาดหน้า และค่า
auto_vacuum ก่อนและหลัง Compaction รวมถึงจำนวนไบต์ที่เรียกคืน และผลลัพธ์
quick_check กับ integrity_check ระบบบังคับใช้ foreign_key_check
แบบปฏิเสธการทำงานโดยค่าเริ่มต้น และไม่มีฟิลด์แสดงความสำเร็จแยกต่างหาก SQLite รายงาน auto_vacuum เป็น
0 สำหรับไม่มี 1 สำหรับเต็ม และ 2 สำหรับแบบเพิ่มทีละส่วน
Compaction จะล้มเหลวโดยไม่มีการเปลี่ยนแปลงเมื่อสคีมาเก่า ใหม่กว่า
บิลด์ OpenClaw ที่กำลังทำงาน หรือเป็นของฐานข้อมูลเอเจนต์ เรียกใช้
openclaw doctor --fix ก่อนสำหรับสคีมาสถานะที่ใช้ร่วมกันเวอร์ชันเก่า ให้กู้คืน
ข้อมูลสำรองที่เข้ากันได้หรืออัปเกรด OpenClaw สำหรับสคีมาที่ใหม่กว่า
การย้ายข้อมูล SQLite ของเซสชัน
OpenClaw นำเข้าแถวเซสชันแบบเดิมและประวัติทรานสคริปต์ไปยังฐานข้อมูล SQLite ของแต่ละเอเจนต์
โดยอัตโนมัติระหว่างการเริ่มต้น Gateway และระหว่าง
openclaw doctor --fix โดย openclaw doctor --session-sqlite <mode> เป็น
เครื่องมือตรวจสอบและยืนยันความถูกต้องแบบเจาะจงสำหรับการย้ายข้อมูลนั้น แถวเซสชันรันไทม์
ปัจจุบันอยู่ใน
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite ไฟล์
sessions.json แบบเดิมเป็นต้นทางการย้ายข้อมูล ไฟล์ JSONL ของทรานสคริปต์ที่ใช้งานอยู่จะถูก
นำเข้าและย้ายไปเก็บถาวรนอกไดเรกทอรีเซสชันที่ใช้งานอยู่หลังจาก
นำเข้าสำเร็จ ส่วนไฟล์ JSONL ระดับจัดเก็บถาวรยังคงเป็นอาร์ติแฟกต์สำหรับการสนับสนุน ไม่ใช่
ข้อมูลสำรองของรันไทม์
โหมด:
| โหมด | ลักษณะการทำงาน |
|---|---|
inspect |
อ่านจำนวนรายการแบบเดิมและ SQLite รวมถึงไฟล์ JSONL ที่ไม่มีการอ้างอิง โดยไม่นำเข้า |
dry-run |
แยกวิเคราะห์รายการแบบเดิมและไฟล์ JSONL ของทรานสคริปต์ นับแถวที่นำเข้าได้ และรายงานปัญหาโดยไม่เขียนแถว SQLite |
import |
นำเข้ารายการแบบเดิมและเหตุการณ์ทรานสคริปต์ลงใน SQLite สำหรับเป้าหมายที่เลือก |
validate |
เปรียบเทียบต้นทางแบบเดิมที่เลือกกับแถว SQLite และจำนวนเหตุการณ์ทรานสคริปต์ |
compact |
สร้าง checkpoint และ VACUUM ฐานข้อมูล SQLite ของเอเจนต์ที่เลือก เพื่อเรียกคืนหน้าว่างหลังการลบจำนวนมากหรือการล้างคลังข้อมูล |
recover |
กู้คืนการย้ายข้อมูลครั้งล่าสุดที่ล้มเหลว ตรวจสอบเป้าหมาย และจัดเตรียมรายงานปัญหา GitHub ที่ผ่านการล้างข้อมูลอ่อนไหว |
restore |
กู้คืนอาร์ติแฟกต์ทรานสคริปต์ที่จัดเก็บถาวรจากแมนิเฟสต์การย้ายข้อมูลที่บันทึกไว้โดยไม่ลบข้อมูล SQLite |
ตัวเลือก:
- ค่าเริ่มต้น: ที่เก็บของเอเจนต์เริ่มต้นที่กำหนดค่าไว้ เมื่อไฟล์ที่เก็บแบบเดิมนั้นมีอยู่
--session-sqlite-agent <id>: เอเจนต์ที่กำหนดค่าไว้หนึ่งรายการ--session-sqlite-all-agents: ที่เก็บของเอเจนต์ที่กำหนดค่าไว้ รวมถึงที่เก็บของเอเจนต์ที่ค้นพบ--session-sqlite-store <path>: เส้นทางsessions.jsonแบบเดิมที่ระบุอย่างชัดแจ้งหนึ่งเส้นทาง
ลำดับการตรวจสอบด้วยตนเอง:
openclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issueสำรองข้อมูลไดเรกทอรีสถานะของ OpenClaw ก่อนเรียกใช้ import ในการติดตั้งที่มี
ประวัติสำคัญ validate จะออกด้วยค่าที่ไม่ใช่ศูนย์เมื่อรายการแบบเดิมที่เลือก
ไม่มีอยู่ใน SQLite รหัสเซสชันแตกต่างกัน หรือจำนวนเหตุการณ์ทรานสคริปต์แตกต่างกัน
เมื่อใช้ --session-sqlite-store <path> ให้ตรวจสอบว่ารายงานมี
จำนวนเป้าหมายตามที่คาดไว้ เนื่องจากเส้นทางที่เก็บแบบระบุชัดแจ้งซึ่งไม่มีอยู่จริงจะไม่เลือกเป้าหมายใดๆ
การลบใน SQLite จะเรียกคืนหน้าภายในฐานข้อมูลก่อน โดยไม่จำเป็นต้อง
ลดขนาดไฟล์ฐานข้อมูลทันที หลังจากลบหรือจัดเก็บทรานสคริปต์ขนาดใหญ่
ให้เรียกใช้ openclaw doctor --session-sqlite compact --session-sqlite-all-agents
เพื่อสร้าง checkpoint ให้ไฟล์ WAL เรียกใช้ VACUUM และรายงานขนาดฐานข้อมูลกับ WAL
ก่อนและหลัง Compaction ต้องใช้ไฟล์ปกติที่มีสคีมาเอเจนต์ปัจจุบัน
ข้อมูลเมตาเจ้าของถาวรของเอเจนต์ที่เลือก และไม่มีแฮนเดิลเปิดอยู่ในกระบวนการ doctor
โหมดทำลายข้อมูล import, compact, recover และ restore
จะถือล็อกความเป็นเจ้าของสถานะเดียวกับที่ใช้เมื่อ Gateway เริ่มต้นตลอดการดำเนินงาน
ส่วน inspect, dry-run และ validate ยังคงเป็นแบบอ่านอย่างเดียวและไม่รับล็อกนี้ ให้หยุด
Gateway ก่อน โหมดทำลายข้อมูลจะล้มเหลวแทนที่จะแข่งขันกับการเขียนที่กำลังดำเนินอยู่หรือ
แข่งขันกับคำสั่งบำรุงรักษาอื่น เป้าหมาย --session-sqlite-store
แบบทำลายข้อมูลต้องอยู่ภายในไดเรกทอรีสถานะที่ใช้งานอยู่ ให้ตั้งค่า OPENCLAW_STATE_DIR เป็น
ไดเรกทอรีสถานะเจ้าของที่เก็บก่อนบำรุงรักษาการติดตั้งอื่น
เป้าหมายที่มีฮาร์ดลิงก์อยู่แล้วจะถูกปฏิเสธ เนื่องจากเส้นทางอื่นสามารถใช้อิโนดฐานข้อมูล
เดียวกันนอกไดเรกทอรีสถานะที่ล็อกไว้ได้ การตรวจสอบความเป็นเจ้าของแบบเดียวกัน
ครอบคลุมไฟล์ประกอบ WAL, shared-memory และ rollback-journal ของ SQLite
การนำเข้าแต่ละครั้งจะเขียนแมนิเฟสต์ไว้ภายใต้
~/.openclaw/session-sqlite-migration-runs/ ก่อนย้ายอาร์ติแฟกต์ทรานสคริปต์
ไปยังคลังข้อมูล หากการเริ่มต้นรายงานว่าการย้ายข้อมูล SQLite ของเซสชันล้มเหลวหลังจาก
ย้ายอาร์ติแฟกต์แล้ว ให้เรียกใช้การกู้คืน:
openclaw doctor --session-sqlite recover --github-issueการกู้คืนจะเลือก manifest ของการย้ายข้อมูลที่ล้มเหลวล่าสุด กู้คืนเฉพาะอาร์ติแฟกต์ที่เก็บถาวรไว้ของ manifest ตรวจสอบเป้าหมายที่ได้รับผลกระทบ รีเฟรชรายงาน .failure.md และ .failure.json ที่ผ่านการล้างข้อมูลละเอียดอ่อนแล้ว และเตรียมเนื้อหาสำหรับ GitHub issue โดยไม่นำเนื้อหาทรานสคริปต์ สภาพแวดล้อมดิบ ข้อมูลลับ และการกำหนดค่าที่ไม่มีขอบเขตมารวมไว้ เมื่อไม่มี manifest ของการย้ายข้อมูลที่ล้มเหลว แต่ฐานข้อมูล SQLite ของเอเจนต์ที่เลือกเสียหาย ไม่ใช่ฐานข้อมูล หรือมีไฟล์เสริม journal โดยไม่มีฐานข้อมูลหลัก การกู้คืนจะคัดลอกชุดไฟล์ทั้งหมดไปยังไดเรกทอรีชั่วคราวสำหรับการตรวจสอบ SQLite สามารถย้อนกลับ hot journal ที่ถูกต้องในสำเนาชั่วคราวนั้นก่อนเรียกใช้ quick_check, integrity_check และ foreign_key_check โดยไฟล์ต้นฉบับสำหรับการตรวจสอบเชิงนิติวิทยาศาสตร์จะยังคงไม่ถูกแก้ไข การตรวจสอบความสมบูรณ์ที่ล้มเหลวหรือไฟล์เสริมที่ไม่มีไฟล์หลักจะรักษาไฟล์ DB, WAL, SHM และ rollback-journal ไว้ด้วยการเปลี่ยนชื่อชุดไฟล์ทั้งหมดที่ค้นพบโดยเติมส่วนต่อท้าย .corrupt-<timestamp> เดียวกัน หากเกิดข้อผิดพลาดในการเปลี่ยนชื่อที่ถูกดักจับ ระบบจะย้อนย้ายไฟล์ที่ย้ายไปแล้วกลับก่อนรายงานความล้มเหลว เพื่อไม่ให้ชุดไฟล์ที่ยังสามารถกู้คืนได้ถูกแยกออกจากกันโดยไม่มีการแจ้งเตือน ให้หยุด Gateway ก่อนการกู้คืน การคัดลอกหรือเปลี่ยนชื่อชุดไฟล์ SQLite ที่กำลังเปลี่ยนแปลงอยู่นั้นไม่ปลอดภัยและมีลักษณะการทำงานแตกต่างกันในแต่ละระบบปฏิบัติการ เมื่อใช้ --github-issue --yes doctor จะใช้ GitHub CLI เพื่อสร้าง issue ใน openclaw/openclaw หากไม่มีการยืนยัน ระบบจะเขียนรายงานสนับสนุนไว้ในเครื่องและแสดง URL ของ issue ที่กรอกข้อมูลไว้ล่วงหน้า
restore ยังคงเป็นการดำเนินการย้อนกลับระดับล่าง โดยใช้ระเบียน sourcePath -> archivePath ของ manifest ย้ายอาร์ติแฟกต์ที่เก็บถาวรกลับเฉพาะเมื่อไม่มีพาธต้นฉบับ รายงานข้อขัดแย้งเมื่อมีทั้งสองพาธ และคงฐานข้อมูล SQLite ไว้ที่เดิม
การดาวน์เกรดหลังการย้ายเซสชันไปยัง SQLite
ก่อนเริ่ม OpenClaw เวอร์ชันเก่าที่ใช้ไฟล์เป็นที่เก็บข้อมูล ให้กู้คืนอาร์ติแฟกต์ทรานสคริปต์แบบเดิมที่เก็บถาวรไว้:
openclaw doctor --session-sqlite restore --session-sqlite-all-agentsเวอร์ชันเก่าจะอ่านรายการ sessions.json และพาธ sessionFile ที่บันทึกไว้ในรายการเหล่านั้น หลังการย้ายไปยัง SQLite การนำเข้าสำเร็จจะย้ายทรานสคริปต์ JSONL ที่ใช้งานอยู่ไปยัง session-sqlite-import-archive/ ดังนั้นรันไทม์รุ่นเก่าจะไม่เห็นประวัติดังกล่าวจนกว่าการกู้คืนจะย้ายอาร์ติแฟกต์ที่บันทึกไว้ใน manifest กลับไปยังพาธต้นฉบับ
การกู้คืนจะไม่ลบข้อมูล SQLite เซสชันที่สร้างหลังจากเปลี่ยนไปใช้ SQLite จะมีอยู่เฉพาะใน SQLite และจะไม่ปรากฏในรันไทม์รุ่นเก่า หากอัปเกรดอีกครั้งในภายหลัง ให้เรียกใช้ลำดับการตรวจสอบการย้ายข้อมูลตามปกติข้างต้น เพื่อให้ OpenClaw สามารถเปรียบเทียบอาร์ติแฟกต์แบบเดิมที่กู้คืนแล้วกับแถวใน SQLite ก่อนนำเข้า
หมายเหตุ
- ในโหมด Nix (
OPENCLAW_NIX_MODE=1) การตรวจสอบแบบอ่านอย่างเดียวของ doctor ยังคงทำงานได้ แต่doctor --fix,doctor --repair,doctor --yesและdoctor --generate-gateway-tokenจะถูกปิดใช้งานเนื่องจากopenclaw.jsonเปลี่ยนแปลงไม่ได้ ให้แก้ไขซอร์ส Nix สำหรับการติดตั้งนี้แทน สำหรับ nix-openclaw ให้ใช้ เริ่มต้นอย่างรวดเร็ว ซึ่งเริ่มจากเอเจนต์ - พรอมต์แบบโต้ตอบ (การแก้ไขพวงกุญแจ/OAuth เป็นต้น) จะทำงานเฉพาะเมื่อ stdin เป็น TTY และ ไม่ได้ ตั้งค่า
--non-interactiveเท่านั้น การทำงานแบบไม่มีส่วนติดต่อ (cron, Telegram, ไม่มีเทอร์มินัล) จะข้ามพรอมต์ - การเรียกใช้
doctorแบบไม่โต้ตอบจะข้ามการโหลด Plugin ล่วงหน้า เพื่อให้การตรวจสอบสถานะแบบไม่มีส่วนติดต่อยังคงรวดเร็ว เซสชันแบบโต้ตอบยังคงโหลดพื้นผิว Plugin ที่จำเป็นสำหรับขั้นตอนการตรวจสอบสถานะ/ซ่อมแซมแบบเดิม --lintเข้มงวดกว่า--non-interactive: อ่านอย่างเดียวเสมอ ไม่แสดงพรอมต์ และไม่ใช้การย้ายข้อมูลที่ปลอดภัย ใช้doctor --fixหรือdoctor --repairเมื่อต้องการให้ doctor ทำการเปลี่ยนแปลง- โดยค่าเริ่มต้น doctor จะไม่เรียกใช้ SecretRefs ของ
execขณะตรวจสอบข้อมูลลับ ใช้--allow-exec(ไม่ว่าจะใช้ร่วมกับ--lintหรือไม่ก็ตาม) เฉพาะเมื่อตั้งใจให้ doctor เรียกใช้ตัวแก้ไขข้อมูลลับที่กำหนดค่าไว้เหล่านั้น - การเขียนการกำหนดค่าใดๆ (รวมถึงการซ่อมแซม
--fix) จะหมุนเวียนข้อมูลสำรองไปยัง~/.openclaw/openclaw.json.bak(โดยมีวงแหวนลำดับเลข.bak.1...bak.4) นอกจากนี้--fixยังลบคีย์การกำหนดค่าที่ไม่รู้จักซึ่งการตรวจสอบสคีมารายงาน พร้อมแสดงรายการที่ลบแต่ละรายการ โดยจะข้ามขั้นตอนนี้ระหว่างที่กำลังอัปเดต เพื่อไม่ให้สถานะการอัปเกรดที่เขียนเพียงบางส่วนถูกลบก่อนการย้ายข้อมูลเสร็จสิ้น - หากไม่สามารถแยกวิเคราะห์
openclaw.jsonและไม่สามารถกู้คืนการกำหนดค่าล่าสุดที่ทราบว่าใช้งานได้doctor --fixจะเก็บต้นฉบับไว้เป็นopenclaw.json.clobbered.<timestamp>ปล่อยไฟล์ปัจจุบันไว้โดยไม่เปลี่ยนแปลง และจบการทำงานพร้อมข้อผิดพลาดแทนการเขียนไฟล์ทดแทนที่ไม่สมบูรณ์ - ตั้งค่า
OPENCLAW_SERVICE_REPAIR_POLICY=externalเมื่อซูเปอร์ไวเซอร์อื่นเป็นผู้จัดการวงจรชีวิตของ Gateway doctor จะยังคงรายงานสถานะของ Gateway/บริการและใช้การซ่อมแซมที่ไม่เกี่ยวกับบริการ แต่จะข้ามการติดตั้ง/เริ่ม/เริ่มใหม่/บูตสแตรปบริการและการล้างบริการแบบเดิม - doctor รายงานขีดจำกัดฮีปที่ใช้กับ Gateway ที่มีการจัดการ และวิธีคำนวณแบบปรับตามสภาพที่ใช้สำหรับขีดจำกัดหน่วยความจำของโฮสต์หรือคอนเทนเนอร์ปัจจุบัน ใช้
openclaw gateway statusเพื่อดูรายงานเดียวกันนอกกระบวนการซ่อมแซม - บน Linux doctor จะเพิกเฉยต่อยูนิต systemd เพิ่มเติมที่คล้าย Gateway ซึ่งไม่ได้ทำงาน และจะไม่เขียนข้อมูลเมตาของคำสั่ง/จุดเริ่มต้นใหม่สำหรับบริการ Gateway ของ systemd ที่กำลังทำงานระหว่างการซ่อมแซม ให้หยุดบริการก่อน หรือใช้
openclaw gateway install --forceเพื่อแทนที่ตัวเรียกใช้งานที่กำลังทำงาน doctor --fix --non-interactiveรายงานข้อกำหนดบริการ Gateway ที่ขาดหายหรือล้าสมัย แต่จะไม่ติดตั้งหรือเขียนใหม่เมื่ออยู่นอกโหมดซ่อมแซมการอัปเดต เรียกใช้openclaw gateway installสำหรับบริการที่ขาดหาย หรือopenclaw gateway install --forceเพื่อแทนที่ตัวเรียกใช้งาน- การตรวจสอบความสมบูรณ์ของสถานะจะตรวจพบไฟล์ทรานสคริปต์กำพร้าในไดเรกทอรีเซสชัน การเก็บถาวรไฟล์เหล่านี้เป็น
.deleted.<timestamp>ต้องได้รับการยืนยันแบบโต้ตอบ ส่วน--fix,--yesและการทำงานแบบไม่มีส่วนติดต่อจะปล่อยไฟล์เหล่านี้ไว้ที่เดิม - doctor สแกน
~/.openclaw/cron/jobs.json(หรือcron.store) เพื่อค้นหารูปแบบงาน Cron แบบเดิม และเขียนใหม่ก่อนนำเข้าแถวรูปแบบมาตรฐานลงใน SQLite - doctor รายงานงาน Cron ที่มีการแทนที่
payload.modelอย่างชัดเจน รวมถึงจำนวนตามเนมสเปซของผู้ให้บริการและความไม่ตรงกันกับagents.defaults.modelเพื่อให้มองเห็นงานตามกำหนดเวลาที่ไม่ได้สืบทอดโมเดลเริ่มต้นระหว่างการตรวจสอบปัญหาการยืนยันตัวตนหรือการเรียกเก็บเงิน - doctor รายงานงาน Cron ที่ยังคงถูกทำเครื่องหมายว่ากำลังดำเนินการ (
state.runningAtMs) ซึ่งอาจทำให้openclaw cron listแสดงงานเหล่านั้นเป็นrunningการตรวจสอบนี้เป็นแบบอ่านอย่างเดียว: หากไม่มี Gateway กำลังดำเนินงานที่ถูกทำเครื่องหมายอยู่ การเริ่มบริการ Cron ครั้งถัดไปจะบันทึกการทำงานที่ถูกขัดจังหวะและล้างเครื่องหมาย - บน Linux doctor จะแจ้งเตือนเมื่อ crontab ของผู้ใช้ยังคงเรียกใช้
~/.openclaw/bin/ensure-whatsapp.shแบบเดิมที่ไม่มีผู้ดูแล ซึ่งอาจรายงานGateway inactiveผิดพลาดเมื่อ Cron ไม่มีสภาพแวดล้อมบัสผู้ใช้ของ systemd - เมื่อเปิดใช้งาน WhatsApp doctor จะตรวจสอบลูปเหตุการณ์ของ Gateway ที่ประสิทธิภาพลดลงโดยยังมีไคลเอ็นต์
openclaw-tuiภายในเครื่องทำงานอยู่doctor --fixจะหยุดเฉพาะไคลเอ็นต์ TUI ภายในเครื่องที่ผ่านการยืนยัน เพื่อไม่ให้การตอบกลับของ WhatsApp รออยู่หลังลูปรีเฟรช TUI ที่ล้าสมัย - เมื่อมีตัวแปรสภาพแวดล้อมพร็อกซี HTTP(S) แต่ปิดใช้งาน
tools.web.fetch.useTrustedEnvProxydoctor จะอธิบายว่าweb_fetchยังคงใช้การกำหนดเส้นทางโดยตรง เรียกใช้การตรวจสอบการเชื่อมต่อ TLS โดยตรงแบบสั้น และระบุวิธีเลือกเข้าร่วมอย่างชัดเจน โดยจะไม่เปิดใช้การเชื่อถือพร็อกซีโดยอัตโนมัติ - doctor เขียนการอ้างอิงโมเดล
codex/*และopenai-codex/*แบบเดิมใหม่เป็นการอ้างอิงopenai/*รูปแบบมาตรฐานในโมเดลหลัก โมเดลสำรอง รายการอนุญาตโมเดล โมเดลสร้างรูปภาพ/วิดีโอ การแทนที่สำหรับ Heartbeat/เอเจนต์ย่อย/Compaction ฮุก การแทนที่โมเดลของช่องทาง เพย์โหลด Cron และพินเส้นทางของเซสชัน/ทรานสคริปต์ที่ล้าสมัย นอกจากนี้--fixยังผสานการกำหนดค่าmodels.providers.codexและmodels.providers.openai-codexแบบเดิมเมื่อทำได้อย่างปลอดภัย ย้ายโปรไฟล์การยืนยันตัวตนopenai-codex:*และรายการauth.order.openai-codexแบบเดิมไปยังopenai:*ย้ายเจตนาการใช้ Codex ไปยังรายการagentRuntime.id: "codex"ที่กำหนดขอบเขตตามผู้ให้บริการ/โมเดล ลบพินรันไทม์ระดับทั้งเอเจนต์/เซสชันที่ล้าสมัย และคงการอ้างอิงเอเจนต์ OpenAI ที่ซ่อมแซมแล้วไว้บนการกำหนดเส้นทางการยืนยันตัวตนของ Codex แทนการยืนยันตัวตนโดยตรงด้วยคีย์ API ของ OpenAI - doctor รายงานรายการ
auth.order.<provider>ที่ไม่ว่างซึ่งโปรไฟล์ที่อ้างถึงหายไปทั้งหมด ขณะที่มีข้อมูลประจำตัวที่จัดเก็บและเข้ากันได้doctor --fixจะลบเฉพาะการแทนที่ที่ล้าสมัยเหล่านั้น เพื่อคืนค่าการเลือกข้อมูลประจำตัวต่อเอเจนต์โดยอัตโนมัติ ส่วนลำดับว่างที่กำหนดไว้อย่างชัดเจน รายการที่ยังใช้งานได้บางส่วน และลำดับที่ไม่มีข้อมูลประจำตัวที่จัดเก็บและเข้ากันได้จะยังคงไม่เปลี่ยนแปลง หากที่เก็บการยืนยันตัวตน SQLite ที่ใช้งานอยู่ไม่สามารถอ่านได้หรือมีรูปแบบไม่ถูกต้อง doctor จะอธิบายเหตุผลที่ข้ามการซ่อมแซมนี้ หากโหมดโหลดการกำหนดค่าใหม่ของ Gateway ที่กำลังทำงานไม่ใช้การเขียนโดยอัตโนมัติ ให้เริ่ม Gateway ใหม่ก่อนตรวจสอบสถานะการยืนยันตัวตนอีกครั้ง - doctor ล้างสถานะการจัดเตรียมการพึ่งพาของ Plugin แบบเดิมจาก OpenClaw เวอร์ชันเก่า และเชื่อมโยงแพ็กเกจ
openclawของโฮสต์ใหม่สำหรับ Plugin npm ที่มีการจัดการซึ่งประกาศแพ็กเกจนี้เป็น peer dependency นอกจากนี้ยังซ่อมแซม Plugin ที่ดาวน์โหลดได้ซึ่งขาดหายและถูกอ้างถึงในการกำหนดค่า (plugins.entries, ช่องทางที่กำหนดค่าไว้ การตั้งค่าผู้ให้บริการ/การค้นหาที่กำหนดค่าไว้ และรันไทม์เอเจนต์ที่กำหนดค่าไว้) ระหว่างการอัปเดตแพ็กเกจ doctor จะข้ามการซ่อมแซม Plugin ผ่านตัวจัดการแพ็กเกจจนกว่าการสลับแพ็กเกจจะเสร็จสิ้น หาก Plugin ที่กำหนดค่าไว้ยังต้องกู้คืน ให้เรียกใช้openclaw doctor --fixอีกครั้งหลังจากนั้น หากการดาวน์โหลดล้มเหลว doctor จะรายงานข้อผิดพลาดในการติดตั้งและเก็บรายการ Plugin ที่กำหนดค่าไว้สำหรับความพยายามซ่อมแซมครั้งถัดไป - doctor ซ่อมแซมการกำหนดค่า Plugin ที่ล้าสมัยด้วยการลบรหัส Plugin ที่ขาดหายออกจาก
plugins.allow/plugins.deny/plugins.entriesรวมถึงการกำหนดค่าช่องทาง เป้าหมาย Heartbeat และการแทนที่โมเดลของช่องทางที่อ้างอิงค้างอยู่และตรงกัน เมื่อการค้นพบ Plugin ทำงานเป็นปกติ - doctor กักกันการกำหนดค่า Plugin ที่ไม่ถูกต้องด้วยการปิดใช้งานรายการ
plugins.entries.<id>ที่ได้รับผลกระทบและลบเพย์โหลดconfigที่ไม่ถูกต้อง การเริ่มต้น Gateway จะข้ามเฉพาะ Plugin ที่มีปัญหานั้นอยู่แล้ว เพื่อให้ Plugin และช่องทางอื่นๆ ทำงานต่อไป - doctor ลบ
plugins.entries.codex.config.codexDynamicToolsProfileที่เลิกใช้แล้ว โดยแอปเซิร์ฟเวอร์ Codex จะคงเครื่องมือพื้นที่ทำงานแบบเนทีฟของ Codex ให้เป็นแบบเนทีฟเสมอ - doctor ย้ายการกำหนดค่า Talk แบบแบนเดิม (
talk.voiceId,talk.modelIdและรายการที่เกี่ยวข้อง) ไปยังtalk.provider+talk.providers.<provider>โดยอัตโนมัติ การเรียกใช้doctor --fixซ้ำจะไม่รายงาน/ใช้การปรับ Talk ให้เป็นมาตรฐานอีกต่อไป เมื่อความแตกต่างมีเพียงลำดับคีย์ของออบเจ็กต์ - doctor มีการตรวจสอบความพร้อมของการค้นหาหน่วยความจำ และสามารถแนะนำ
openclaw configure --section modelเมื่อไม่มีข้อมูลประจำตัวสำหรับ embedding - doctor แจ้งเตือนเมื่อไม่ได้กำหนดค่าเจ้าของคำสั่ง เจ้าของคำสั่งคือบัญชีผู้ดำเนินการที่เป็นมนุษย์ซึ่งได้รับอนุญาตให้เรียกใช้คำสั่งสำหรับเจ้าของเท่านั้นและอนุมัติการดำเนินการที่เป็นอันตราย การจับคู่ DM อนุญาตเพียงให้บุคคลหนึ่งสนทนากับบอตได้ หากเคยอนุมัติผู้ส่งก่อนที่จะมีกระบวนการบูตสแตรปเจ้าของคนแรก ให้ตั้งค่า
commands.ownerAllowFromอย่างชัดเจน - doctor รายงานหมายเหตุข้อมูลเมื่อมีการกำหนดค่าเอเจนต์โหมด Codex และมีแอสเซ็ต Codex CLI ส่วนบุคคลอยู่ในโฮม Codex ของผู้ดำเนินการ การเรียกใช้แอปเซิร์ฟเวอร์ Codex ภายในเครื่องจะใช้โฮมแยกเฉพาะต่อเอเจนต์ หากจำเป็นให้ติดตั้ง Plugin Codex ก่อน จากนั้นใช้
openclaw migrate plan codexเพื่อทำรายการแอสเซ็ตที่ควรเลื่อนระดับโดยตั้งใจ - doctor แจ้งเตือนเมื่อ Skills ที่อนุญาตสำหรับเอเจนต์เริ่มต้นไม่พร้อมใช้งานในสภาพแวดล้อมรันไทม์ปัจจุบัน (ไม่มีไบนารี ตัวแปรสภาพแวดล้อม การกำหนดค่า หรือข้อกำหนดของระบบปฏิบัติการ)
doctor --fixสามารถปิดใช้งาน Skills ที่ไม่พร้อมเหล่านั้นด้วยskills.entries.<skill>.enabled=falseหากต้องการให้ Skill ยังคงทำงาน ให้ติดตั้ง/กำหนดค่าข้อกำหนดที่ขาดหายแทน - หากเปิดใช้งานโหมดแซนด์บ็อกซ์แต่ Docker ไม่พร้อมใช้งาน doctor จะรายงานคำเตือนที่ชัดเจนพร้อมวิธีแก้ไข (
install Dockerหรือopenclaw config set agents.defaults.sandbox.mode off) - หากมีไฟล์รีจิสทรีแซนด์บ็อกซ์หรือไดเรกทอรีชาร์ดแบบเดิม (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/หรือ~/.openclaw/sandbox/browsers/) doctor จะรายงานรายการเหล่านั้น โดย--fixจะย้ายรายการที่ถูกต้องไปยัง SQLite และกักกันไฟล์แบบเดิมที่ไม่ถูกต้อง - หาก
gateway.auth.token/gateway.auth.passwordอยู่ภายใต้การจัดการของ SecretRef และไม่พร้อมใช้งานในเส้นทางคำสั่งปัจจุบัน doctor จะรายงานคำเตือนแบบอ่านอย่างเดียวและไม่เขียนข้อมูลประจำตัวสำรองเป็นข้อความธรรมดา สำหรับ SecretRefs ที่ทำงานผ่าน exec doctor จะข้ามการเรียกใช้เว้นแต่มี--allow-exec - หากการตรวจสอบ SecretRef ของช่องทางล้มเหลวในเส้นทางการแก้ไข doctor จะดำเนินการต่อและรายงานคำเตือนแทนการจบการทำงานก่อนกำหนด
- หลังการย้ายไดเรกทอรีสถานะ doctor จะแจ้งเตือนเมื่อบัญชี Telegram หรือ Discord เริ่มต้นที่เปิดใช้งานพึ่งพาค่าสำรองจากสภาพแวดล้อม และ
TELEGRAM_BOT_TOKENหรือDISCORD_BOT_TOKENไม่พร้อมใช้งานสำหรับโปรเซส doctor - การแก้ไขชื่อผู้ใช้
allowFromของ Telegram โดยอัตโนมัติ (doctor --fix) ต้องมีโทเค็น Telegram ที่แก้ไขค่าได้ในเส้นทางคำสั่งปัจจุบัน หากไม่สามารถตรวจสอบโทเค็นได้ doctor จะรายงานคำเตือนและข้ามการแก้ไขอัตโนมัติสำหรับรอบนั้น
macOS: การแทนที่ env ของ launchctl
หากก่อนหน้านี้เคยเรียกใช้ launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (หรือ ...PASSWORD) ค่านั้นจะแทนที่ไฟล์การกำหนดค่าและอาจทำให้เกิดข้อผิดพลาด "unauthorized" อย่างต่อเนื่อง
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD