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 แก้ไขการกำหนดค่าหรือสถานะ

ตัวอย่าง

bash
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:

bash
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probe

channels 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 เป็นแบบอ่านอย่างเดียว: ไม่มีพรอมต์ ไม่มีการซ่อมแซม และไม่มีการเขียนการกำหนดค่าหรือสถานะใหม่

bash
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

ผลลัพธ์สำหรับผู้ใช้อ่านมีรูปแบบกระชับ:

text
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 เป็นพื้นผิวสำหรับการเขียนสคริปต์:

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 สมัยใหม่ใช้สัญญาแบบแยกส่วนขนาดเล็ก:

ts
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResult

detect() ขับเคลื่อน 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

การเลือกการตรวจสอบ

bash
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 และสร้างข้อมูลสำรองที่ตรวจสอบแล้วก่อน:

bash
openclaw gateway stopopenclaw backup create --verifyopenclaw doctor --state-sqlite compact --jsonopenclaw gateway start

คำสั่งนี้:

  1. กำหนดให้เส้นทางสถานะที่ใช้ร่วมกันตามรูปแบบมาตรฐานต้องเป็นไฟล์ปกติ หาก ไม่มีฐานข้อมูล จะรายงานเป็น skipped และออกโดยสำเร็จ
  2. ตรวจสอบเวอร์ชันสคีมาที่รองรับในปัจจุบันและ schema_meta.role = "global" ก่อนสร้าง checkpoint หรือเปลี่ยนแปลงไฟล์
  3. กำหนดให้ wal_checkpoint(TRUNCATE) ไม่อยู่ในสถานะไม่ว่าง หยุดกระบวนการ OpenClaw ที่ยังเหลืออยู่และลองอีกครั้งหาก checkpoint ไม่ว่าง
  4. ตั้งค่า auto_vacuum เป็น INCREMENTAL เรียกใช้ VACUUM แบบเต็ม และสร้าง checkpoint อีกครั้ง
  5. เรียกใช้ 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 แบบเดิมที่ระบุอย่างชัดแจ้งหนึ่งเส้นทาง

ลำดับการตรวจสอบด้วยตนเอง:

bash
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 ของเซสชันล้มเหลวหลังจาก ย้ายอาร์ติแฟกต์แล้ว ให้เรียกใช้การกู้คืน:

bash
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 เวอร์ชันเก่าที่ใช้ไฟล์เป็นที่เก็บข้อมูล ให้กู้คืนอาร์ติแฟกต์ทรานสคริปต์แบบเดิมที่เก็บถาวรไว้:

bash
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.useTrustedEnvProxy doctor จะอธิบายว่า 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" อย่างต่อเนื่อง

bash
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page