{ "common": { "error": "ข้อผิดพลาด: {message}", "serverOffline": "เซิร์ฟเวอร์ OmniRoute ออฟไลน์ เริ่มด้วย: omniroute serve", "authRequired": "ต้องการการยืนยันตัวตน ตั้งค่า OMNIROUTE_API_KEY หรือรัน: omniroute setup", "rateLimited": "เกินขีดจำกัดคำขอ ลองใหม่หลังจาก {seconds}วินาที", "timeout": "คำขอหมดเวลาหลังจาก {ms}ms", "success": "เสร็จสิ้น", "yes": "ใช่", "no": "ไม่", "confirm": "คุณแน่ใจหรือไม่? (ใช่/ไม่)", "dryRun": "[จำลอง] จะทำ: {action}", "cancelled": "ยกเลิกแล้ว", "jsonOpt": "ส่งออกเป็น JSON", "yesOpt": "ข้ามการยืนยัน" }, "setup": { "title": "ตั้งค่า OmniRoute", "passwordPrompt": "รหัสผ่านผู้ดูแลระบบ", "providerPrompt": "ผู้ให้บริการเริ่มต้น (เว้นว่างเพื่อข้าม)", "done": "ตั้งค่าเสร็จสมบูรณ์", "passwordSet": "กำหนดรหัสผ่านผู้ดูแลระบบแล้ว", "providerSet": "กำหนดค่าผู้ให้บริการแล้ว: {name}", "testingProvider": "กำลังทดสอบการเชื่อมต่อกับผู้ให้บริการ: {name}", "testPassed": "การทดสอบผู้ให้บริการผ่าน", "testFailed": "การทดสอบผู้ให้บริการล้มเหลว: {error}", "loginEnabled": "การเข้าสู่ระบบ: เปิดใช้งานแล้ว (อัปเดตรหัสผ่านแล้ว)", "loginDisabled": "การเข้าสู่ระบบ: ปิดใช้งาน", "providerInfo": "ผู้ให้บริการ: {info}", "opencode": "ติดตั้งและกำหนดค่า @omniroute/opencode-plugin ที่รวมมาให้สำหรับ OpenCode" }, "doctor": { "title": "OmniRoute Doctor", "dbOk": "ฐานข้อมูล: ปกติ ({path})", "dbMissing": "ฐานข้อมูล: ยังไม่ได้เริ่มต้น — เรียกใช้ `omniroute setup`", "portOk": "พอร์ต {port}: พร้อมใช้งาน", "portConflict": "พอร์ต {port}: ถูกใช้งานโดยกระบวนการอื่น", "encryptionOk": "คีย์การเข้ารหัส: กำหนดค่าแล้ว", "encryptionMissing": "ไม่พบคีย์การเข้ารหัส — เรียกใช้ `omniroute setup`", "allGood": "การตรวจสอบทั้งหมดผ่านแล้ว", "warnings": "คำเตือน {count} รายการ — ดูรายละเอียดด้านบน" }, "providers": { "title": "ผู้ให้บริการ", "noProviders": "ยังไม่ได้กำหนดค่าผู้ให้บริการ เรียกใช้: omniroute setup", "testing": "กำลังทดสอบ {name}...", "available": "มีผู้ให้บริการพร้อมใช้งาน {count} ราย", "connected": "เชื่อมต่อแล้ว", "disconnected": "ตัดการเชื่อมต่อแล้ว", "validationFailed": "การตรวจสอบความถูกต้องล้มเหลว: {error}", "metrics": { "description": "แสดงเมตริกประสิทธิภาพของผู้ให้บริการ (เวลาแฝง อัตราความสำเร็จ ค่าใช้จ่าย)", "provider": "กรองตาม ID ผู้ให้บริการ", "connection_id": "กรองตาม ID การเชื่อมต่อ", "period": "ช่วงเวลา: 1h|6h|24h|7d|30d (ค่าเริ่มต้น: 24h)", "metric": "เน้นฟิลด์เมตริกที่ระบุ", "sort": "เรียงลำดับตามฟิลด์ (จากมากไปน้อย)", "limit": "จำนวนแถวสูงสุด (ค่าเริ่มต้น: 50)", "watch": "รีเฟรชทุก 5 วินาที (โหมดสด)", "compare": "ID ผู้ให้บริการที่คั่นด้วยจุลภาคเพื่อเปรียบเทียบแบบเคียงข้างกัน" }, "metric_single": { "description": "รับค่าเมตริกเดียวสำหรับการเชื่อมต่อที่ระบุ" }, "rotate": { "description": "หมุนเวียนคีย์ API ต้นทางสำหรับการเชื่อมต่อกับผู้ให้บริการ", "newKeyOpt": "ค่าคีย์ API ใหม่ (ควรหลีกเลี่ยง: แนะนำให้ใช้ --from-env)", "fromEnvOpt": "อ่านคีย์ใหม่จากตัวแปรสภาพแวดล้อม VAR", "oauthOpt": "เรียกใช้กระบวนการยืนยันตัวตน OAuth อีกครั้งแทน", "skipTestOpt": "ข้ามการทดสอบการเชื่อมต่อหลังหมุนเวียนคีย์", "dryRunOpt": "แสดงสิ่งที่จะเปลี่ยนแปลงโดยไม่เขียนข้อมูล", "confirmPrompt": "แทนที่คีย์ API สำหรับการเชื่อมต่อ \"{name}\" ({id}) หรือไม่? [y/N]", "dryRunResult": "[dry-run] จะหมุนเวียนคีย์สำหรับ \"{name}\" ({id}) ไม่มีการเปลี่ยนแปลงใด ๆ", "oauthHint": "การเชื่อมต่อ OAuth — เรียกใช้: omniroute oauth {provider}", "envVarEmpty": "ตัวแปรสภาพแวดล้อม {var} ไม่ได้ถูกตั้งค่าหรือว่างเปล่า", "success": "หมุนเวียนคีย์สำหรับ \"{name}\" แล้ว เรียกใช้ `providers test {id}` เพื่อตรวจสอบ", "testPassed": "การทดสอบหลังหมุนเวียนคีย์ผ่านแล้ว", "testFailed": "การทดสอบหลังหมุนเวียนคีย์ล้มเหลว: {error}" }, "status": { "description": "แสดงสถานะคีย์สำหรับการเชื่อมต่อผู้ให้บริการทั้งหมด (อายุ วันหมดอายุ ระยะพักใช้งาน)", "providerOpt": "กรองตามชื่อผู้ให้บริการ", "header": "ID ผู้ให้บริการ ชื่อ สถานะการหมดอายุ สถานะการทดสอบ พักใช้งานจนถึง", "noData": "ไม่มีข้อมูลการเชื่อมต่อผู้ให้บริการ", "requiresServer": "คำสั่ง providers status ต้องให้เซิร์ฟเวอร์ OmniRoute ทำงานอยู่" } }, "keys": { "title": "คีย์ API", "addDescription": "เพิ่มหรืออัปเดตคีย์ API สำหรับผู้ให้บริการ", "listDescription": "แสดงคีย์ API ที่กำหนดค่าไว้ทั้งหมด", "removeDescription": "ลบคีย์ API สำหรับผู้ให้บริการ", "regenerateDescription": "สร้างคีย์ API ของ OmniRoute ใหม่", "revokeDescription": "เพิกถอนคีย์ API ของ OmniRoute", "revealDescription": "แสดงค่าคีย์ API แบบไม่ปกปิด", "usageDescription": "แสดงการใช้งานล่าสุดของคีย์ API", "usageLimitOpt": "จำนวนคำขอล่าสุด", "rotateDescription": "สร้างคีย์ใหม่และทำให้คีย์เก่าใช้ไม่ได้", "graceOpt": "ระยะผ่อนผัน (ms) ก่อนทำให้คีย์เก่าใช้ไม่ได้", "stdinOpt": "อ่านคีย์ API จาก stdin แทนอาร์กิวเมนต์", "added": "เพิ่มคีย์สำหรับ {provider} แล้ว", "removed": "ลบคีย์แล้ว", "listed": "{count} คีย์", "noKeys": "ยังไม่ได้กำหนดค่าคีย์", "noUsage": "ไม่พบข้อมูลการใช้งาน", "confirmRemove": "ลบคีย์ {id} หรือไม่?", "confirmRegenerate": "สร้างคีย์ {id} ใหม่หรือไม่?", "confirmRevoke": "เพิกถอนคีย์ {id} หรือไม่?", "confirmRotate": "หมุนเวียนคีย์ {id} หรือไม่? (คีย์เก่าจะใช้ไม่ได้หลังพ้นระยะผ่อนผัน)", "regenerated": "สร้างใหม่แล้ว คีย์ใหม่: {key}", "revoked": "เพิกถอนคีย์ {id} แล้ว", "rotated": "หมุนเวียนคีย์ {id} แล้ว ID คีย์ใหม่: {newId}", "revealWarning": "⚠ การดำเนินการนี้จะแสดงคีย์แบบเต็มโดยไม่มีการปกปิด โปรดตรวจสอบว่าหน้าจอของคุณเป็นส่วนตัว", "providerRequired": "จำเป็นต้องระบุผู้ให้บริการ", "keyRequired": "จำเป็นต้องระบุ API key", "stdinEmpty": "ไม่ได้ระบุ API key ผ่าน stdin", "unknownProvider": "ไม่รู้จักผู้ให้บริการ: {provider}", "policy": { "title": "นโยบายคีย์", "showDescription": "แสดงนโยบายอัตรา/ค่าใช้จ่ายสำหรับคีย์", "setDescription": "ตั้งค่านโยบายอัตรา/ค่าใช้จ่ายสำหรับคีย์", "rateLimitOpt": "จำนวนคำขอสูงสุดต่อนาที", "maxCostOpt": "ค่าใช้จ่ายสูงสุดต่อวัน (USD)", "allowedModelsOpt": "รายการโมเดลที่อนุญาตโดยคั่นด้วยจุลภาค", "nothingToSet": "ไม่ได้ระบุฟิลด์นโยบาย โปรดใช้ --rate-limit, --max-cost หรือ --allowed-models", "updated": "อัปเดตนโยบายแล้ว" }, "expiration": { "title": "การหมดอายุของคีย์", "listDescription": "แสดงรายการคีย์ที่ใกล้หมดอายุ", "daysOpt": "แสดงคีย์ที่จะหมดอายุภายใน N วัน", "none": "ไม่มีคีย์ที่จะหมดอายุภายใน {days} วัน", "listTitle": "คีย์ที่จะหมดอายุภายใน {days} วัน:" } }, "authExport": { "description": "ส่งออกข้อมูลประจำตัวของผู้ให้บริการที่ถอดรหัสแล้ว (ใช้ภายในเครื่องเท่านั้น, เอาต์พุตเป็นข้อความธรรมดา)", "idOpt": "ส่งออกเฉพาะการเชื่อมต่อที่ตรงกับ id/name/provider นี้", "formatOpt": "รูปแบบเอาต์พุต: json หรือ env", "outOpt": "เขียนเอาต์พุตลงในไฟล์แทน stdout (เขียนด้วยสิทธิ์ 0600)", "forceOpt": "ยืนยันว่าคุณเข้าใจว่าการดำเนินการนี้จะพิมพ์/เขียนข้อมูลลับเป็นข้อความธรรมดา", "warning": "⚠ การดำเนินการนี้จะพิมพ์/เขียน API key และโทเค็น OAuth ที่ถอดรหัสแล้วเป็นข้อความธรรมดา โปรดตรวจสอบว่าหน้าจอ ประวัติ shell และไฟล์เอาต์พุตของคุณเป็นส่วนตัว", "confirmHeading": "⚠ คำเตือน: การดำเนินการนี้จะส่งออกข้อมูลประจำตัวของผู้ให้บริการที่ถอดรหัสแล้วเป็นข้อความธรรมดา", "confirmBody": "คำสั่งนี้จะถอดรหัสและพิมพ์/เขียน apiKey, accessToken, refreshToken และ\nidToken สำหรับการเชื่อมต่อที่เลือก โปรดถือว่าเอาต์พุตเป็นข้อมูลลับ", "confirmFooter": "เพื่อยืนยัน ให้เรียกใช้:\n omniroute auth export --force", "missingKey": "จำเป็นต้องมี STORAGE_ENCRYPTION_KEY เพื่อส่งออกข้อมูลประจำตัว", "notFound": "ไม่พบการเชื่อมต่อ: {id}", "invalidFormat": "รูปแบบไม่ถูกต้อง: {format} โปรดใช้ json หรือ env" }, "stream": { "description": "สตรีมการตอบกลับแชตพร้อมโหมดตรวจสอบ SSE", "file": "อ่านพรอมต์จากไฟล์", "stdin": "อ่านพรอมต์จาก stdin", "model": "ID โมเดล (ค่าเริ่มต้น: auto)", "system": "พรอมต์ระบบ", "combo": "บังคับใช้คอมโบที่ระบุตามชื่อ", "max_tokens": "จำนวนโทเค็นสูงสุดในการตอบกลับ", "responses_api": "ใช้ /v1/responses แทน /v1/chat/completions", "raw": "พิมพ์บรรทัด SSE ดิบตามที่ได้รับ", "debug": "พิมพ์ข้อมูลเวลาของแต่ละชิ้นไปยัง stderr", "save": "บันทึกอีเวนต์ SSE ทั้งหมดลงในไฟล์ .jsonl", "error": { "empty_prompt": "ข้อผิดพลาด: ต้องระบุพรอมต์ (อาร์กิวเมนต์แบบระบุตำแหน่ง, --file หรือ --stdin)" } }, "usage": { "description": "การวิเคราะห์การใช้งาน งบประมาณ โควตา และบันทึก", "analytics": { "description": "แสดงข้อมูลวิเคราะห์การใช้งานแบบรวม", "period": "ช่วงเวลา: 1d|7d|30d|90d|ytd|all (ค่าเริ่มต้น: 30d)", "provider": "กรองตาม ID ผู้ให้บริการ" }, "budget": { "description": "จัดการงบประมาณค่าใช้จ่าย", "set": { "scope": "ขอบเขตงบประมาณ (ค่าเริ่มต้น: global)", "period": "รอบงบประมาณ: daily|weekly|monthly (ค่าเริ่มต้น: monthly)" } }, "quota": { "description": "แสดงการใช้โควตาของผู้ให้บริการ", "provider": "กรองตาม ID ผู้ให้บริการ", "check": "แสดงว่ามีโควตาสำหรับคำขอใหม่หรือไม่" }, "logs": { "description": "แสดงบันทึกการเรียกคำขอ", "limit": "จำนวนรายการบันทึกที่จะส่งคืน (ค่าเริ่มต้น: 100)", "search": "คำค้นหาสำหรับกรองบันทึก", "since": "ส่งคืนบันทึกตั้งแต่เวลาประทับนี้", "follow": "ติดตามรายการบันทึกใหม่อย่างต่อเนื่อง", "api_key": "กรองบันทึกตาม API key" }, "utilization": { "description": "แสดงเมตริกการใช้งาน API key", "api_key": "กรองตาม API key" }, "history": { "description": "แสดงประวัติคำขอ", "limit": "จำนวนรายการประวัติ (ค่าเริ่มต้น: 100)" }, "proxy_logs": { "description": "แสดงบันทึกคำขอระดับพร็อกซี", "limit": "จำนวนรายการบันทึกพร็อกซี (ค่าเริ่มต้น: 100)" } }, "cost": { "description": "แสดงรายงานค่าใช้จ่ายพร้อมแจกแจงตามผู้ให้บริการ โมเดล คอมโบ หรือ API key", "period": "ช่วงเวลา: 1d|7d|30d|90d|ytd|all (ค่าเริ่มต้น: 30d)", "since": "วันที่เริ่มต้น (รูปแบบ ISO เช่น 2026-01-01) — มีผลแทนที่ --period", "until": "วันที่สิ้นสุด (รูปแบบ ISO)", "group_by": "จัดกลุ่มผลลัพธ์ตาม: provider|model|api-key|combo|day (ค่าเริ่มต้น: provider)", "api_key_filter": "กรองตาม API key ที่ระบุ", "limit": "จำนวนแถวสูงสุดที่จะแสดง (ค่าเริ่มต้น: 100)" }, "simulate": { "description": "การจำลองการกำหนดเส้นทางแบบ Dry-run — แสดงผู้ให้บริการที่จะถูกเลือกโดยไม่เรียกต้นทาง", "file": "โหลดเนื้อหาคำขอทั้งหมดจากไฟล์ JSON", "model": "ID โมเดล (ค่าเริ่มต้น: auto)", "combo": "บังคับใช้คอมโบที่ระบุตามชื่อ", "reasoning": "ระดับความพยายามในการใช้เหตุผล (low|medium|high)", "thinking": "งบประมาณโทเค็นสำหรับการคิดแบบขยาย", "explain": "พิมพ์โครงสร้างทางเลือกสำรองและช่วงค่าใช้จ่ายไปยัง stderr", "noCombo": "ไม่พบคอมโบที่ตรงกัน กำหนดค่าคอมโบด้วย: omniroute combo create" }, "chat": { "description": "ส่งพรอมต์แชตแบบครั้งเดียวไปยัง OmniRoute", "file": "อ่านพรอมต์จากไฟล์", "stdin": "อ่านพรอมต์จาก stdin", "system": "พรอมต์ระบบ", "model": "รหัสโมเดล (ค่าเริ่มต้น: auto)", "max_tokens": "จำนวนโทเค็นสูงสุดในการตอบกลับ", "temperature": "ค่าอุณหภูมิการสุ่มตัวอย่าง (0–2)", "top_p": "การสุ่มตัวอย่างแบบนิวเคลียส Top-p", "reasoning_effort": "ระดับความพยายามในการให้เหตุผล (low|medium|high)", "thinking_budget": "งบประมาณโทเค็นสำหรับการคิดแบบขยาย", "combo": "บังคับใช้คอมโบที่ระบุด้วยชื่อ", "responses_api": "ใช้ /v1/responses แทน /v1/chat/completions", "stream": "สตรีมคำตอบแบบเพิ่มขึ้นทีละส่วน", "no_history": "ไม่บันทึกลงใน ~/.omniroute/cli-history.jsonl", "error": { "empty_prompt": "ข้อผิดพลาด: ต้องระบุพรอมต์ (อาร์กิวเมนต์ตามตำแหน่ง, --file หรือ --stdin)" } }, "serve": { "description": "เริ่มเซิร์ฟเวอร์ OmniRoute (การดำเนินการเริ่มต้น)", "starting": "กำลังเริ่มเซิร์ฟเวอร์ OmniRoute บนพอร์ต {port}...", "ready": "พร้อมใช้งานที่ http://localhost:{port}", "stopping": "กำลังหยุดเซิร์ฟเวอร์ (PID {pid})...", "stopped": "หยุดเซิร์ฟเวอร์แล้ว", "notRunning": "เซิร์ฟเวอร์ไม่ได้ทำงานอยู่", "port": "พอร์ตสำหรับรับฟัง (ค่าเริ่มต้น: 20128)", "no_open": "ไม่เปิดเบราว์เซอร์โดยอัตโนมัติ", "daemon": "เรียกใช้เซิร์ฟเวอร์เป็นดีมอนเบื้องหลัง", "log": "แสดงบันทึกเซิร์ฟเวอร์ในบรรทัด", "no_recovery": "ปิดใช้งานการรีสตาร์ตอัตโนมัติเมื่อขัดข้อง (โหมดดีบัก)", "max_restarts": "จำนวนครั้งสูงสุดที่จะรีสตาร์ตหลังขัดข้องภายใน 30 วินาทีก่อนยกเลิก (ค่าเริ่มต้น: 2)", "tray": "เริ่มในถาดระบบ (เฉพาะเดสก์ท็อป ต้องเลือกเปิดใช้)", "no_tray": "ปิดใช้งานไอคอนถาดระบบ", "ready_timeout": "ระยะหมดเวลาของโพรบตรวจสอบความพร้อมเป็นมิลลิวินาที (รวมถึง OMNIROUTE_READY_TIMEOUT_MS, ค่าเริ่มต้น 60000)", "tls_cert": "พาธไปยังใบรับรอง TLS (PEM) สำหรับให้บริการ HTTPS (รวมถึง OMNIROUTE_TLS_CERT)", "tls_key": "พาธไปยังคีย์ส่วนตัว TLS (PEM) สำหรับให้บริการ HTTPS (รวมถึง OMNIROUTE_TLS_KEY)" }, "backup": { "title": "สำรองข้อมูล", "description": "สร้างข้อมูลสำรองของข้อมูล OmniRoute", "creating": "กำลังสร้างข้อมูลสำรอง...", "done": "บันทึกข้อมูลสำรองไปยัง {path} แล้ว", "noFiles": "ไม่มีไฟล์ให้สำรองข้อมูล (ยังไม่ได้เริ่มต้นฐานข้อมูล)", "failed": "การสำรองข้อมูลล้มเหลว: {error}", "restoring": "กำลังกู้คืนจาก {path}...", "restored": "กู้คืนเสร็จสมบูรณ์", "restoreDescription": "กู้คืนจากข้อมูลสำรอง", "listTitle": "ข้อมูลสำรองที่มีอยู่", "noBackups": "ไม่พบข้อมูลสำรอง", "notFound": "ไม่พบข้อมูลสำรอง: {name}", "confirmRestore": "เขียนทับข้อมูลปัจจุบันด้วยข้อมูลสำรองจาก {ts} หรือไม่?", "createDescription": "สร้างข้อมูลสำรองของ OmniRoute", "nameOpt": "ชื่อข้อมูลสำรองแบบกำหนดเอง", "cloudOpt": "อัปโหลดข้อมูลสำรองไปยังพื้นที่จัดเก็บบนคลาวด์", "encryptOpt": "เข้ารหัสข้อมูลสำรองด้วย AES-256-GCM", "keyFileOpt": "พาธไปยังไฟล์ที่มีวลีรหัสผ่านสำหรับการเข้ารหัส", "excludeOpt": "ไม่รวมไฟล์ที่ตรงกับรูปแบบ (ระบุซ้ำได้)", "retentionOpt": "เก็บเฉพาะข้อมูลสำรอง N รายการล่าสุด", "passphrasePrompt": "วลีรหัสผ่านสำหรับการเข้ารหัส:", "noPassphrase": "ต้องระบุวลีรหัสผ่านสำหรับข้อมูลสำรองที่เข้ารหัส", "cloudFailed": "คำเตือน: การอัปโหลดไปยังคลาวด์ล้มเหลว บันทึกข้อมูลสำรองไว้ในเครื่องแล้ว", "cloudUploaded": "อัปโหลดข้อมูลสำรองไปยังคลาวด์แล้ว: {url}", "auto": { "title": "กำหนดการสำรองข้อมูล", "enableDescription": "เปิดใช้งานการสำรองข้อมูลอัตโนมัติตามกำหนดเวลา", "disableDescription": "ปิดใช้งานการสำรองข้อมูลอัตโนมัติตามกำหนดเวลา", "statusDescription": "แสดงสถานะปัจจุบันของกำหนดการสำรองข้อมูล", "cronOpt": "นิพจน์ Cron สำหรับกำหนดการ (ค่าเริ่มต้น: ทุกวันเวลา 03:00 น.)", "enabled": "เปิดใช้งานการสำรองข้อมูลอัตโนมัติแล้ว (cron: {cron})", "hint": "omniroute serve จะอ่านกำหนดการเมื่อเริ่มทำงาน", "disabled": "ปิดใช้งานการสำรองข้อมูลอัตโนมัติแล้ว", "notConfigured": "ยังไม่ได้กำหนดค่ากำหนดการสำรองข้อมูล" } }, "health": { "description": "ตรวจสอบสถานะความพร้อมใช้งานของเซิร์ฟเวอร์และสถานะของคอมโพเนนต์", "noServer": "เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มด้วย: omniroute serve", "title": "ความพร้อมใช้งาน", "status": "สถานะ: {status}", "uptime": "ระยะเวลาทำงาน: {uptime}", "requests": "คำขอ (24 ชม.): {count}", "cost": "ค่าใช้จ่าย (24 ชม.): ${cost}" }, "quota": { "description": "แสดงการใช้โควตาของผู้ให้บริการ", "noServer": "เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มด้วย: omniroute serve", "noData": "ไม่มีข้อมูลโควตา" }, "cache": { "description": "จัดการแคชการตอบกลับ", "noServer": "เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มด้วย: omniroute serve", "cleared": "ล้างแคชแล้ว", "clearFailed": "ล้างแคชไม่สำเร็จ" }, "redis": { "description": "เปิดใช้คอนเทนเนอร์ Redis ในเครื่องด้วยการคลิกเดียว (Podman หรือ Docker) สำหรับการแคชและการติดตามโควตาของ OmniRoute" }, "test": { "description": "ทดสอบการเชื่อมต่อกับผู้ให้บริการ", "noServer": "เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มต้นด้วย: omniroute serve", "testing": "กำลังทดสอบ {provider} / {model}...", "passed": "เชื่อมต่อสำเร็จ!", "failed": "การเชื่อมต่อล้มเหลว: {error}", "allProvidersOpt": "ทดสอบผู้ให้บริการที่กำหนดค่าไว้ทั้งหมด", "latencyOpt": "แสดงค่าความหน่วง (เฉลี่ย/ต่ำสุด/สูงสุด หน่วย ms)", "repeatOpt": "ทดสอบซ้ำ N ครั้งและรวมผลลัพธ์", "compareOpt": "โมเดลที่ต้องการเปรียบเทียบ โดยคั่นด้วยจุลภาค (เช่น gpt-4o,claude-3-5-sonnet)", "saveOpt": "บันทึกผลลัพธ์ลงในไฟล์ JSON", "saved": "บันทึกผลลัพธ์ไปยัง {path} แล้ว", "compareTitle": "การเปรียบเทียบโมเดล", "compareMinTwo": "ต้องมีอย่างน้อยสองโมเดลสำหรับ --compare (คั่นด้วยจุลภาค)", "noProviders": "ยังไม่ได้กำหนดค่าผู้ให้บริการ เพิ่มได้ด้วย: omniroute keys add" }, "update": { "checking": "กำลังตรวจสอบการอัปเดต...", "upToDate": "เป็นเวอร์ชันล่าสุดแล้ว ({version})", "available": "มีการอัปเดต: {current} → {latest}", "installing": "กำลังติดตั้ง {latest}...", "done": "อัปเดตเป็น {latest} แล้ว โปรดรีสตาร์ตเซิร์ฟเวอร์เพื่อให้การเปลี่ยนแปลงมีผล" }, "mcp": { "title": "เซิร์ฟเวอร์ MCP", "running": "เซิร์ฟเวอร์ MCP กำลังทำงาน ({transport})", "stopped": "เซิร์ฟเวอร์ MCP หยุดทำงานแล้ว", "restarted": "รีสตาร์ตเซิร์ฟเวอร์ MCP แล้ว", "stoppedHint": "เรียกใช้ `omniroute mcp enable` เพื่อเปิดใช้งาน", "enabled": "เปิดใช้งานเซิร์ฟเวอร์ MCP แล้ว", "disabled": "ปิดใช้งานเซิร์ฟเวอร์ MCP แล้ว", "enable": { "description": "เปิดใช้งานเซิร์ฟเวอร์ MCP", "transport": "การรับส่งข้อมูลที่จะใช้: stdio|sse|streamable-http" }, "disable": { "description": "ปิดใช้งานเซิร์ฟเวอร์ MCP" }, "call": { "description": "เรียกใช้เครื่องมือ MCP โดยตรง", "args": "ออบเจ็กต์อาร์กิวเมนต์ JSON (แบบอินไลน์)", "args_file": "พาธไปยังไฟล์อาร์กิวเมนต์ JSON", "stream": "ใช้เอนด์พอยต์แบบสตรีมมิง (/api/mcp/stream)", "scope": "ขอบเขตที่จำเป็น (ระบุซ้ำได้ เช่น read:health)" }, "scopes": { "description": "แสดงรายการขอบเขต MCP ที่ใช้ได้", "tool": "แสดงขอบเขตที่เครื่องมือเฉพาะต้องใช้" }, "tools": { "description": "ตรวจสอบเครื่องมือ MCP", "list": { "description": "แสดงรายการเครื่องมือ MCP ทั้งหมด", "scope": "กรองตามขอบเขต" }, "info": { "description": "แสดงข้อมูลเมตาสำหรับเครื่องมือ MCP" }, "schema": { "description": "แสดงสคีมา JSON ของอินพุต/เอาต์พุตสำหรับเครื่องมือ MCP", "io": "ประเภทสคีมา: input|output (ค่าเริ่มต้น: input)" } }, "audit": { "description": "บันทึกการตรวจสอบ MCP (นามแฝงของ audit --source mcp)" } }, "a2a": { "skills": { "description": "แสดงรายการทักษะ A2A ที่มีจากการ์ดเอเจนต์" }, "invoke": { "description": "เรียกใช้ทักษะ A2A และส่งคืน ID งาน", "input": "ออบเจ็กต์อินพุต JSON", "input_file": "พาธไปยังไฟล์อินพุต JSON", "wait": "รอให้งานเสร็จสิ้นก่อนส่งคืน", "timeout": "ระยะหมดเวลาสำหรับรอให้งานเสร็จสิ้น หน่วยเป็น ms (ค่าเริ่มต้น: 60000)" }, "tasks": { "description": "จัดการงาน A2A", "list": { "status": "กรองตามสถานะ", "skill": "กรองตาม ID ทักษะ" }, "watch": { "description": "ตรวจสอบสถานะงานเป็นระยะจนกว่าจะเสร็จสิ้น" }, "stream": { "description": "สตรีมเหตุการณ์การดำเนินงานผ่าน SSE" }, "logs": { "description": "แสดงข้อความและอาร์ติแฟกต์ของงาน" } } }, "policy": { "description": "จัดการนโยบายการอนุญาตของ OmniRoute", "list": { "description": "แสดงรายการนโยบาย", "kind": "กรองตามประเภท (allow|deny|rate-limit|cost-cap)", "scope": "กรองตามขอบเขต (global|api-key|provider)" }, "get": { "description": "ดูรายละเอียดนโยบายตาม ID" }, "create": { "description": "สร้างนโยบายจากไฟล์ JSON", "file": "พาธไปยังไฟล์ JSON ของนโยบาย" }, "update": { "description": "อัปเดตนโยบายจากไฟล์ JSON", "file": "พาธไปยังไฟล์ JSON ของนโยบาย" }, "delete": { "description": "ลบนโยบายตาม ID", "yes": "ข้ามข้อความแจ้งให้ยืนยัน" }, "evaluate": { "description": "ประเมินนโยบายแบบทดลอง (รหัสออก 0=อนุญาต, 4=ปฏิเสธ)", "api_key": "คีย์ API ที่จะประเมิน", "action": "การดำเนินการที่จะตรวจสอบ (เช่น chat, embed, admin)", "resource": "พาธหรือตัวระบุทรัพยากร", "context": "บริบทเพิ่มเติมในรูปแบบออบเจ็กต์ JSON" }, "export": { "description": "ส่งออกนโยบายทั้งหมดไปยังไฟล์ JSON" }, "import": { "description": "นำเข้านโยบายจากไฟล์ JSON", "overwrite": "เขียนทับนโยบายที่มี ID เดียวกัน" } }, "compression": { "description": "กำหนดค่าและตรวจสอบไปป์ไลน์การบีบอัดของ OmniRoute", "status": { "description": "แสดงสถานะและการตั้งค่าการบีบอัดปัจจุบัน" }, "configure": { "description": "กำหนดค่าการบีบอัด", "engine": "เอนจินการบีบอัด (caveman|rtk|hybrid|none)", "caveman_agg": "ระดับความเข้มของ Caveman 0.0–1.0", "rtk_budget": "งบประมาณโทเค็น RTK", "language_pack": "แพ็กภาษาที่จะเปิดใช้งาน" }, "engine": { "description": "รับหรือตั้งค่าเอนจินการบีบอัดที่ใช้งานอยู่" }, "combos": { "description": "จัดการสถิติคอมโบการบีบอัด" }, "rules": { "description": "จัดการกฎการบีบอัด", "add": { "pattern": "รูปแบบสำหรับจับคู่ (regex หรือ field:pattern)", "action": "การดำเนินการ: drop|shrink|replace" } }, "language_packs": { "description": "แสดงรายการแพ็กภาษาสำหรับการบีบอัดที่พร้อมใช้งาน" }, "preview": { "description": "ดูตัวอย่างผลของการบีบอัดที่มีต่อคำขอ", "file": "พาธไปยังไฟล์ JSON ของคำขอ" } }, "tunnel": { "title": "ทันเนล", "listDescription": "แสดงรายการทันเนลที่ใช้งานอยู่", "createDescription": "สร้างทันเนล", "created": "สร้างทันเนลแล้ว: {url}", "stopped": "หยุดทันเนลแล้ว", "confirmStop": "หยุดทันเนล {id} หรือไม่", "stopDescription": "หยุดทันเนล", "statusDescription": "แสดงสถานะโดยละเอียดของทันเนล", "logsDescription": "แสดงบันทึกของทันเนล", "infoDescription": "แสดงรายละเอียดการกำหนดค่าของทันเนล", "rotateDescription": "สร้าง URL ทันเนลใหม่", "tailOpt": "จำนวนบรรทัดของบันทึกที่จะแสดง", "typeRequired": "ต้องระบุประเภททันเนล", "noLogs": "ไม่มีบันทึกที่พร้อมใช้งาน", "notAvailable": "ไม่มีข้อมูลทันเนล", "noTunnels": "ไม่มีทันเนลที่ใช้งานอยู่", "infoTitle": "ข้อมูลทันเนล: {type}", "rotated": "เปลี่ยน URL ทันเนลแล้ว: {url}", "confirmRotate": "เปลี่ยน URL ของทันเนล {type} หรือไม่ (ระบบจะสร้าง URL ใหม่)" }, "stop": { "description": "หยุดเซิร์ฟเวอร์ OmniRoute", "stopping": "กำลังหยุดเซิร์ฟเวอร์ (PID {pid})...", "stopped": "หยุดเซิร์ฟเวอร์แล้ว", "notRunning": "ไม่มีเซิร์ฟเวอร์ที่กำลังทำงานอยู่", "portFallback": "ไม่พบไฟล์ PID กำลังพยายามหยุดตามพอร์ต..." }, "restart": { "description": "รีสตาร์ตเซิร์ฟเวอร์ OmniRoute", "restarting": "กำลังรีสตาร์ตเซิร์ฟเวอร์ OmniRoute..." }, "dashboard": { "description": "เปิดแดชบอร์ด OmniRoute ในเบราว์เซอร์", "opening": "กำลังเปิดแดชบอร์ดที่ {url}", "urlOnly": "แสดง URL ของแดชบอร์ดโดยไม่เปิดเบราว์เซอร์", "tui": "เปิดแดชบอร์ด TUI แบบโต้ตอบ (UI เทอร์มินัล 7 แท็บ)" }, "models": { "description": "แสดงรายการโมเดลที่พร้อมใช้งาน (ต้องเปิดเซิร์ฟเวอร์)", "search": "กรองโมเดลตาม id, ชื่อ, provider หรือคำอธิบาย", "noServer": "เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มด้วย: omniroute serve", "noModels": "ไม่พบโมเดล" }, "audit": { "description": "เข้าถึงบันทึกการตรวจสอบการปฏิบัติตามข้อกำหนดและ MCP", "source": "แหล่งที่มาของบันทึก: all|compliance|mcp (ค่าเริ่มต้น: all)", "since": "แสดงรายการตั้งแต่เวลาประทับนี้ (ISO 8601)", "until": "แสดงรายการจนถึงเวลาประทับนี้ (ISO 8601)", "tail": { "description": "แสดงรายการบันทึกการตรวจสอบล่าสุด", "follow": "ติดตามรายการใหม่อย่างต่อเนื่อง (ตรวจสอบทุก 2 วินาที)", "limit": "จำนวนรายการสูงสุดที่จะแสดง (ค่าเริ่มต้น: 100)" }, "search": { "description": "ค้นหารายการบันทึกการตรวจสอบด้วยคำสำคัญ", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 200)", "actor": "กรองตาม ID ของผู้ดำเนินการ", "action": "กรองตามชื่อการดำเนินการ" }, "export": { "description": "ส่งออกบันทึกการตรวจสอบไปยังไฟล์", "format": "รูปแบบเอาต์พุต: jsonl|csv (ค่าเริ่มต้น: jsonl)" }, "stats": { "description": "แสดงสถิติของบันทึกการตรวจสอบ", "period": "ช่วงเวลา: 1d|7d|30d (ค่าเริ่มต้น: 7d)" }, "get": { "description": "รับรายการบันทึกการตรวจสอบหนึ่งรายการตาม ID" } }, "skills": { "description": "จัดการทักษะของ OmniRoute (sandbox, builtin, custom, hybrid, skillssh)", "list": { "description": "แสดงรายการทักษะที่ติดตั้งแล้ว", "type": "กรองตามประเภท (sandbox|custom|builtin|hybrid|skillssh)", "enabled": "แสดงเฉพาะทักษะที่เปิดใช้งาน", "disabled": "แสดงเฉพาะทักษะที่ปิดใช้งาน", "api_key": "กรองตามคีย์ API" }, "get": { "description": "ดูรายละเอียดของทักษะตาม ID" }, "install": { "description": "ติดตั้งทักษะจากไฟล์หรือ URL", "from_file": "พาธไปยังไฟล์คำจำกัดความทักษะ JSON", "from_url": "URL ของคำจำกัดความทักษะระยะไกล", "type": "ประเภททักษะ (sandbox|custom|hybrid)", "enable": "เปิดใช้งานทักษะหลังติดตั้ง" }, "enable": { "description": "เปิดใช้งานทักษะตาม ID" }, "disable": { "description": "ปิดใช้งานทักษะตาม ID", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "delete": { "description": "ลบทักษะตาม ID", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "execute": { "description": "เรียกใช้ทักษะตาม ID", "input": "ออบเจ็กต์อินพุต JSON", "input_file": "พาธไปยังไฟล์อินพุต JSON", "timeout": "ระยะหมดเวลาการดำเนินการเป็นมิลลิวินาที (ค่าเริ่มต้น: 30000)" }, "executions": { "description": "แสดงประวัติการเรียกใช้ทักษะ", "skill": "กรองตาม ID ทักษะ", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 50)", "status": "กรองตามสถานะ (running|completed|failed)" }, "skillssh": { "description": "จัดการทักษะที่ติดตั้งผ่าน SSH" }, "marketplace": { "description": "เรียกดูและติดตั้งทักษะจากมาร์เก็ตเพลส" }, "mp": { "search": { "description": "ค้นหาแพ็กเกจในมาร์เก็ตเพลส", "category": "กรองตามหมวดหมู่", "tag": "กรองตามแท็ก", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 30)", "sort": "เรียงตาม: downloads|rating|recent" }, "info": { "description": "แสดงรายละเอียดแพ็กเกจและ readme" }, "install": { "description": "ติดตั้งแพ็กเกจจากมาร์เก็ตเพลส", "version": "เวอร์ชันแพ็กเกจ (ค่าเริ่มต้น: latest)", "enable": "เปิดใช้งานหลังการติดตั้ง", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "categories": { "description": "แสดงรายการหมวดหมู่ในมาร์เก็ตเพลส" }, "featured": { "description": "แสดงแพ็กเกจแนะนำในมาร์เก็ตเพลส" } } }, "memory": { "description": "จัดการหน่วยความจำการสนทนาของ OmniRoute (FTS5 + vector)", "search": { "description": "ค้นหารายการหน่วยความจำด้วยคำค้นหาเชิงความหมาย", "type": "กรองตามประเภทหน่วยความจำ (user|feedback|project|reference)", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 20)", "api_key": "กรองตามคีย์ API", "token_budget": "จำกัดจำนวนโทเค็นทั้งหมดในผลลัพธ์" }, "add": { "description": "เพิ่มรายการหน่วยความจำใหม่", "content": "เนื้อหาข้อความในหน่วยความจำ", "file": "อ่านเนื้อหาจากไฟล์", "type": "ประเภทหน่วยความจำ (ค่าเริ่มต้น: user)", "metadata": "ออบเจ็กต์ข้อมูลเมตา JSON", "api_key": "เชื่อมโยงกับคีย์ API" }, "clear": { "description": "ลบรายการหน่วยความจำที่ตรงกับตัวกรอง", "type": "กรองตามประเภท", "older": "ลบรายการที่เก่ากว่าระยะเวลาที่กำหนด (30d, 6m, 1y)", "api_key": "กรองตามคีย์ API", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "list": { "description": "แสดงรายการหน่วยความจำโดยไม่มีการจัดอันดับการค้นหา", "type": "กรองตามประเภท", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 100)", "api_key": "กรองตามคีย์ API" }, "get": { "description": "รับรายการหน่วยความจำหนึ่งรายการตาม ID" }, "delete": { "description": "ลบรายการหน่วยความจำตาม ID", "yes": "ข้ามข้อความแจ้งให้ยืนยัน" }, "health": { "description": "แสดงสถานะของระบบย่อยหน่วยความจำ (FTS5 + Qdrant)" } }, "oauth": { "description": "จัดการการเชื่อมต่อผู้ให้บริการ OAuth", "providers": { "description": "แสดงรายการผู้ให้บริการที่รองรับ OAuth และประเภทโฟลว์" }, "start": { "description": "เริ่มโฟลว์การอนุญาต OAuth สำหรับผู้ให้บริการ", "provider": "รหัสผู้ให้บริการ (gemini, copilot, cursor, …)", "no_browser": "แสดงเฉพาะ URL — ไม่ต้องเปิดเบราว์เซอร์", "import_system": "นำเข้าข้อมูลรับรองโดยอัตโนมัติจากการกำหนดค่าระบบภายในเครื่อง", "social": "ผู้ให้บริการการเข้าสู่ระบบผ่านโซเชียล (google|github) — จำเป็นสำหรับ kiro", "timeout": "ระยะหมดเวลารอการอนุญาตเป็นมิลลิวินาที (ค่าเริ่มต้น: 300000)" }, "status": { "description": "แสดงรายการการเชื่อมต่อ OAuth ที่ใช้งานอยู่", "provider": "กรองตามรหัสผู้ให้บริการ" }, "revoke": { "description": "เพิกถอนการเชื่อมต่อ OAuth", "provider": "รหัสผู้ให้บริการที่จะเพิกถอน", "connection_id": "เพิกถอนการเชื่อมต่อที่ระบุตาม ID", "yes": "ข้ามข้อความแจ้งให้ยืนยัน" } }, "cloud": { "description": "จัดการงานเอเจนต์ AI บนคลาวด์ (codex, devin, jules)", "agents": { "description": "แสดงรายการเอเจนต์บนคลาวด์ที่พร้อมใช้งาน" }, "agent": { "description": "จัดการงานเอเจนต์ {agent} บนคลาวด์", "auth": { "description": "อนุญาต {agent} ผ่าน OAuth" } }, "task": { "description": "จัดการงานเอเจนต์บนคลาวด์", "create": { "description": "สร้างงานเอเจนต์ใหม่", "title": "ชื่องาน (ค่าเริ่มต้นคือ 80 อักขระแรกของพรอมต์)", "prompt": "ข้อความพรอมต์ของงาน", "prompt_file": "อ่านพรอมต์จากไฟล์", "repo": "URL ของรีพอซิทอรีที่จะโคลนสำหรับงาน", "branch": "ชื่อแบรนช์ที่จะใช้", "metadata": "ออบเจ็กต์ข้อมูลเมตา JSON" }, "list": { "description": "แสดงรายการงานของเอเจนต์", "status": "กรองตามสถานะ (running|completed|failed|cancelled)", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 50)" }, "get": { "description": "ดูรายละเอียดงานตาม ID" }, "status": { "description": "แสดงสถานะงาน (running|completed|failed|cancelled)" }, "cancel": { "description": "ยกเลิกงานที่กำลังทำงานอยู่", "yes": "ข้ามข้อความแจ้งให้ยืนยัน" }, "approve": { "description": "อนุมัติแผนของเอเจนต์เพื่อเริ่มดำเนินการ" }, "message": { "description": "ส่งข้อความไปยังงานที่กำลังทำงานอยู่" } }, "sources": { "description": "แสดงรายการไฟล์ต้นฉบับที่สร้างโดยงาน" } }, "eval": { "description": "จัดการชุดการประเมินและการเรียกใช้", "suites": { "description": "จัดการชุดการประเมิน", "list": { "description": "แสดงรายการชุดการประเมิน" }, "get": { "description": "ดูรายละเอียดชุดการประเมินตาม ID" }, "create": { "description": "สร้างชุดการประเมินจากไฟล์ JSON", "file": "พาธไปยังไฟล์ JSON ที่กำหนดชุดการประเมิน" } }, "run": { "description": "เริ่มการรันการประเมินสำหรับชุดการประเมิน", "model": "ID โมเดลที่จะประเมิน (ค่าเริ่มต้น: auto)", "combo": "บังคับใช้คอมโบที่ระบุตามชื่อ", "concurrency": "จำนวนตัวอย่างที่ทำงานพร้อมกัน (ค่าเริ่มต้น: 4)", "tag": "ติดแท็กการรันนี้เพื่อกรองในภายหลัง", "watch": "ติดตามความคืบหน้าของการรันจนเสร็จสิ้น" }, "list": { "description": "แสดงรายการการรันการประเมิน", "suite": "กรองตาม ID ชุดการประเมิน", "status": "กรองตามสถานะ", "since": "แสดงการรันนับตั้งแต่การประทับเวลานี้", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 50)" }, "get": { "description": "ดูรายละเอียดการรันการประเมินตาม ID" }, "results": { "description": "แสดงผลลัพธ์ของตัวอย่างสำหรับการรันการประเมิน", "failed": "แสดงเฉพาะตัวอย่างที่ล้มเหลว" }, "cancel": { "description": "ยกเลิกการรันการประเมินที่กำลังดำเนินอยู่", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "scorecard": { "description": "แสดงตารางคะแนนสำหรับการรันการประเมินที่เสร็จสมบูรณ์" } }, "webhooks": { "description": "จัดการเว็บฮุกของ OmniRoute", "events": { "description": "แสดงรายการประเภทเหตุการณ์เว็บฮุกทั้งหมดที่พร้อมใช้งาน" }, "list": { "description": "แสดงรายการเว็บฮุกที่กำหนดค่าไว้" }, "get": { "description": "ดูรายละเอียดเว็บฮุกตาม ID" }, "add": { "description": "ลงทะเบียนเว็บฮุกใหม่", "url": "URL ปลายทาง", "events": "รายการประเภทเหตุการณ์ที่คั่นด้วยจุลภาค", "secret": "ข้อมูลลับสำหรับการลงนาม HMAC", "header": "ส่วนหัวเพิ่มเติมในรูปแบบ key=value (ระบุซ้ำได้)", "no_enabled": "สร้างเว็บฮุกในสถานะปิดใช้งาน" }, "update": { "description": "อัปเดตเว็บฮุกที่มีอยู่", "enabled": "ตั้งค่าสถานะการเปิดใช้งาน (true|false)" }, "remove": { "description": "ลบเว็บฮุก", "yes": "ข้ามข้อความแจ้งยืนยัน" }, "test": { "description": "ส่งเหตุการณ์ทดสอบไปยังเว็บฮุก", "event": "ประเภทเหตุการณ์ที่จะจำลอง (ค่าเริ่มต้น: request.completed)" } }, "program": { "description": "OmniRoute — AI Router อัจฉริยะพร้อม Auto Fallback", "version": "แสดงเวอร์ชันและออก", "output": "รูปแบบเอาต์พุต (table, json, jsonl, csv)", "quiet": "ซ่อนเอาต์พุตที่ไม่จำเป็น", "no_color": "ปิดใช้งานเอาต์พุตสี", "timeout": "หมดเวลา HTTP request ในมิลลิวินาที", "api_key": "API Key สำหรับ OmniRoute server", "base_url": "Base URL ของ OmniRoute server", "context": "บริบท/โปรไฟล์ของเซิร์ฟเวอร์สำหรับคำสั่งนี้", "lang": "ตั้งค่าภาษาแสดงผล CLI (แทนที่ OMNIROUTE_LANG)" }, "files": { "description": "จัดการไฟล์ (อัปโหลด แสดงรายการ ดู ดาวน์โหลด ลบ)", "list": { "purpose": "กรองตามวัตถุประสงค์", "limit": "จำนวนผลลัพธ์สูงสุด" }, "get": { "description": "รับข้อมูลเมตาของไฟล์" }, "upload": { "description": "อัปโหลดไฟล์", "purpose": "วัตถุประสงค์ของไฟล์ (batch, assistants, fine-tune)" }, "content": { "description": "ดาวน์โหลดเนื้อหาไฟล์", "out": "บันทึกไปยังพาธ (ค่าเริ่มต้น: stdout)" }, "delete": { "yes": "ข้ามการยืนยัน" } }, "batches": { "description": "จัดการงานแบตช์ที่เข้ากันได้กับ OpenAI", "list": { "status": "กรองตามสถานะ", "limit": "จำนวนผลลัพธ์สูงสุด" }, "create": { "description": "สร้างงานแบตช์", "inputFile": "ID ไฟล์อินพุต", "endpoint": "เอนด์พอยต์เป้าหมาย", "window": "กรอบเวลาการดำเนินการให้เสร็จสิ้น", "metadata": "เพิ่มข้อมูลเมตา key=value" }, "submit": { "description": "อัปโหลดไฟล์ JSONL และสร้างงานแบตช์", "jsonl": "พาธไปยังไฟล์ JSONL", "endpoint": "เอนด์พอยต์เป้าหมาย", "wait": "รอจนกว่าจะเสร็จสิ้น" }, "cancel": { "yes": "ข้ามการยืนยัน" }, "wait": { "timeout": "ระยะหมดเวลาเป็น ms" }, "output": { "out": "บันทึกเอาต์พุตไปยังพาธ" }, "errors": { "out": "บันทึกข้อผิดพลาดไปยังพาธ" } }, "translator": { "description": "แปลเนื้อหาคำขอระหว่างรูปแบบ LLM", "detect": { "description": "ตรวจหารูปแบบเนื้อหา" }, "translate": { "description": "แปลงเนื้อหาจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่ง" }, "send": { "description": "แปลและส่งต่อไปยังต้นทาง" }, "stream": { "description": "แปลเนื้อหาคำขอแบบสตรีม" }, "from": "รูปแบบต้นทาง (openai|anthropic|gemini|cohere)", "to": "รูปแบบเป้าหมาย (openai|anthropic|gemini|cohere)", "file": "พาธไปยังไฟล์ JSON เนื้อหาคำขอ", "out": "บันทึกเอาต์พุตลงในไฟล์", "model": "แทนที่โมเดล", "history": { "limit": "จำนวนผลลัพธ์สูงสุด" } }, "pricing": { "description": "จัดการข้อมูลราคาสำหรับโมเดล", "sync": { "description": "ซิงค์ราคาจากแหล่งต้นทาง", "provider": "กรองตามผู้ให้บริการ", "force": "บังคับให้ซิงค์ใหม่" }, "list": { "provider": "กรองตามผู้ให้บริการ", "model": "กรองตามโมเดล", "limit": "จำนวนผลลัพธ์สูงสุด" }, "defaults": { "description": "จัดการราคาเริ่มต้น", "input": "ต้นทุนอินพุตต่อ 1 ล้านโทเค็น (USD)", "output": "ต้นทุนเอาต์พุตต่อ 1 ล้านโทเค็น (USD)", "cacheRead": "ต้นทุนการอ่านแคชต่อ 1 ล้านโทเค็น (USD)", "cacheWrite": "ต้นทุนการเขียนแคชต่อ 1 ล้านโทเค็น (USD)" }, "diff": { "description": "แสดงความแตกต่างจากราคาต้นทาง", "model": "กรองตามโมเดล" } }, "radar": { "description": "ตรวจสอบและซิงค์ฟีดแค็ตตาล็อก Radar ภายในเครื่อง", "status": "แสดงการตั้งค่า Radar ภายในเครื่องและสถานะแคชของฟีด", "sync": "ซิงค์แค็ตตาล็อก การแนะนำ ข้อเสนอ และ Intel ผ่านเซิร์ฟเวอร์ภายในเครื่อง" }, "resilience": { "description": "ตรวจสอบและจัดการกลไกความยืดหยุ่น", "status": { "provider": "กรองตามผู้ให้บริการ" }, "breakers": { "provider": "กรองตามผู้ให้บริการ" }, "cooldowns": { "provider": "กรองตามผู้ให้บริการ", "connectionId": "กรองตาม ID การเชื่อมต่อ" }, "lockouts": { "provider": "กรองตามผู้ให้บริการ", "model": "กรองตามโมเดล" }, "reset": { "description": "รีเซ็ตสถานะเบรกเกอร์/ช่วงพัก", "provider": "ผู้ให้บริการที่จะรีเซ็ต", "connectionId": "ID การเชื่อมต่อที่จะรีเซ็ต", "model": "โมเดลที่จะยกเลิกการล็อก", "allCooldowns": "รีเซ็ตช่วงพักทั้งหมดสำหรับผู้ให้บริการ", "yes": "ข้ามการยืนยัน" }, "profile": { "description": "จัดการโปรไฟล์ความยืดหยุ่น", "name": "ชื่อโปรไฟล์" }, "config": { "description": "จัดการการกำหนดค่าความยืดหยุ่น", "threshold": "เกณฑ์จำนวนครั้งที่ล้มเหลว", "resetTimeout": "ระยะหมดเวลาก่อนรีเซ็ต หน่วย ms", "baseCooldown": "ช่วงพักพื้นฐาน หน่วย ms" } }, "nodes": { "description": "จัดการโหนดของผู้ให้บริการ (เอนด์พอยต์)", "list": { "provider": "กรองตามผู้ให้บริการ", "enabled": "แสดงเฉพาะโหนดที่เปิดใช้งาน" }, "add": { "provider": "ชื่อผู้ให้บริการ", "baseUrl": "URL ฐานสำหรับโหนด", "name": "ชื่อโหนด", "weight": "ค่าน้ำหนักการกระจายโหลด", "region": "แท็กภูมิภาค", "authHeader": "ส่วนหัวการยืนยันตัวตนแบบกำหนดเอง (key=value)" }, "update": { "baseUrl": "URL ฐานใหม่", "name": "ชื่อใหม่", "weight": "น้ำหนักใหม่", "region": "ภูมิภาคใหม่", "enabled": "เปิดหรือปิดใช้งาน (true|false)" }, "remove": { "yes": "ข้ามการยืนยัน" }, "validate": { "baseUrl": "URL ที่จะตรวจสอบ", "provider": "ผู้ให้บริการที่ใช้ตรวจสอบเปรียบเทียบ" }, "test": { "description": "ส่งคำขอทดสอบไปยังโหนด" }, "metrics": { "description": "แสดงเมตริกของโหนด", "period": "ช่วงเวลา (เช่น 24h, 7d)" } }, "context": { "description": "กำหนดค่าไปป์ไลน์วิศวกรรมบริบท (Caveman, RTK)", "analytics": { "period": "ช่วงเวลา (เช่น 7d, 30d)" }, "caveman": { "description": "จัดการตัวบีบอัดบริบท Caveman", "config": { "description": "แสดงหรืออัปเดตการกำหนดค่า Caveman", "aggressiveness": "ระดับความเข้ม 0.0–1.0", "maxShrinkPct": "เปอร์เซ็นต์การย่อสูงสุด", "preserveTags": "แท็กที่ต้องเก็บไว้ โดยคั่นด้วยเครื่องหมายจุลภาค" } }, "rtk": { "description": "จัดการเครื่องมือเพิ่มประสิทธิภาพบริบท RTK", "config": { "description": "แสดงหรืออัปเดตการกำหนดค่า RTK", "tokenBudget": "งบประมาณโทเค็นสำหรับ RTK", "reservePct": "เปอร์เซ็นต์สำรอง" }, "filters": { "description": "จัดการตัวกรอง RTK", "pattern": "รูปแบบตัวกรอง (regex)", "priority": "ลำดับความสำคัญของตัวกรอง (ค่าเริ่มต้น: 100)", "action": "การดำเนินการของตัวกรอง: drop|shrink|replace", "yes": "ข้ามการยืนยัน" }, "test": { "file": "พาธไปยังไฟล์ JSON ของคำขอ" } }, "combos": { "description": "การจัดการชุดคำสั่งผสมที่คำนึงถึงบริบท" } }, "sessions": { "description": "ตรวจสอบและจัดการเซสชันที่ใช้งานอยู่", "list": { "user": "กรองตามผู้ใช้", "kind": "กรองตามประเภท (dashboard|api-key|mcp|a2a)", "active": "แสดงเฉพาะเซสชันที่ใช้งานอยู่", "limit": "จำนวนผลลัพธ์สูงสุด (ค่าเริ่มต้น: 100)" }, "expire": { "yes": "ข้ามการยืนยัน" }, "expireAll": { "user": "ผู้ใช้ที่ต้องการให้เซสชันหมดอายุ", "yes": "ข้ามการยืนยัน" } }, "tags": { "description": "จัดการแท็กทรัพยากร", "add": { "color": "สีแท็ก (เลขฐานสิบหกหรือชื่อสี)", "description": "คำอธิบายแท็ก" }, "remove": { "yes": "ข้ามการยืนยัน" }, "assign": { "tag": "ชื่อแท็ก", "to": "ทรัพยากรเป้าหมายในรูปแบบ type:id (เช่น provider:openai)" }, "unassign": { "tag": "ชื่อแท็ก", "from": "ทรัพยากรต้นทางในรูปแบบ type:id" } }, "openapi": { "description": "เข้าถึงและทดสอบข้อกำหนด OpenAPI ของ OmniRoute", "dump": { "description": "ส่งออกข้อกำหนด OpenAPI ไปยัง stdout หรือไฟล์", "format": "รูปแบบเอาต์พุต: yaml|json (ค่าเริ่มต้น: yaml)", "out": "บันทึกไปยังพาธไฟล์" }, "validate": { "description": "ตรวจสอบความถูกต้องของข้อกำหนด OpenAPI" }, "try": { "description": "ทดสอบ API endpoint ผ่านข้อกำหนด", "method": "เมธอด HTTP (ค่าเริ่มต้น: GET)", "body": "พาธไปยังไฟล์ JSON สำหรับ request body", "query": "พารามิเตอร์คิวรีในรูปแบบ key=value (ระบุซ้ำได้)", "header": "ส่วนหัวในรูปแบบ key=value (ระบุซ้ำได้)" }, "endpoints": { "description": "แสดง API endpoint ทั้งหมด", "search": "กรองตามพาธหรือสรุป" }, "paths": { "description": "แสดงพาธ API ทั้งหมด" } }, "combo": { "title": "คอมโบ", "switched": "คอมโบที่ใช้งานอยู่: {name}", "created": "สร้างคอมโบแล้ว: {name}", "deleted": "ลบคอมโบแล้ว: {name}", "noCombos": "ยังไม่ได้กำหนดค่าคอมโบ", "confirmDelete": "ลบคอมโบ {name} หรือไม่?", "suggest": { "description": "แนะนำคอมโบที่ดีที่สุดสำหรับงานโดยใช้การให้คะแนนด้วย AI", "task": "คำอธิบายงาน", "maxCost": "ค่าใช้จ่ายสูงสุดต่อคำขอในหน่วย USD", "maxLatencyMs": "เวลาแฝงสูงสุดในหน่วยมิลลิวินาที", "weights": "ค่าน้ำหนักการให้คะแนนแบบ JSON เช่น {\"latency\":0.7,\"cost\":0.3}", "top": "จำนวนตัวเลือกอันดับสูงสุดที่จะแสดง (ค่าเริ่มต้น: 5)", "explain": "พิมพ์เหตุผลไปยัง stderr", "switch": "เปิดใช้งานคอมโบอันดับสูงสุด" } }, "oneproxy": { "description": "จัดการพูลอัปสตรีมของ OneProxy", "stats": { "provider": "กรองตามผู้ให้บริการ", "period": "ช่วงเวลา (ค่าเริ่มต้น: 24h)" }, "fetch": { "description": "ดึงพร็อกซีจากพูล", "count": "จำนวนพร็อกซีที่จะดึง (ค่าเริ่มต้น: 1)", "type": "ประเภทพร็อกซี: http|socks5 (ค่าเริ่มต้น: http)" }, "rotate": { "description": "บังคับหมุนเวียนพร็อกซี", "provider": "ผู้ให้บริการที่จะหมุนเวียน", "connectionId": "ID การเชื่อมต่อเฉพาะที่จะหมุนเวียน" }, "config": { "description": "แสดงหรืออัปเดตการกำหนดค่า OneProxy", "enabled": "เปิดใช้งานพูลพร็อกซี (true|false)", "poolSize": "ขนาดพูล", "providerSource": "URL สำหรับผู้ให้บริการพร็อกซี", "rotationPolicy": "นโยบายการหมุนเวียน: sticky|per-request|periodic" }, "pool": { "description": "แสดงรายการพูลพร็อกซีปัจจุบันพร้อมเมตริก" } }, "open": { "description": "เปิดหน้าแดชบอร์ด OmniRoute ที่ระบุในเบราว์เซอร์", "url": "แสดงเฉพาะ URL โดยไม่เปิดเบราว์เซอร์" }, "telemetry": { "description": "เข้าถึงข้อมูลเทเลเมทรีแบบรวม", "summary": { "description": "แสดงสรุปเทเลเมทรีแบบรวม", "period": "ช่วงเวลา: 24h|7d|30d (ค่าเริ่มต้น: 24h)", "compareTo": "เปรียบเทียบกับช่วงเวลาก่อนหน้า" }, "export": { "description": "ส่งออกเหตุการณ์เทเลเมทรีเป็น JSONL", "out": "พาธไฟล์เอาต์พุต (ค่าเริ่มต้น: telemetry.jsonl)", "period": "ช่วงเวลาสำหรับการส่งออก (ค่าเริ่มต้น: 7d)" } }, "sync": { "description": "ซิงค์การกำหนดค่าระหว่างอินสแตนซ์ OmniRoute", "push": { "description": "พุชการกำหนดค่าไปยังระบบคลาวด์หรืออินสแตนซ์ระยะไกล", "target": "เป้าหมาย (cloud หรือ context:name)", "bundle": "ส่วนของบันเดิลที่จะซิงค์", "dryRun": "แสดงตัวอย่างโดยไม่ใช้การเปลี่ยนแปลง" }, "pull": { "description": "ดึงการกำหนดค่าจากระบบคลาวด์หรืออินสแตนซ์ระยะไกล", "source": "แหล่งที่มา (cloud หรือ context:name)", "merge": "ผสานกับการกำหนดค่าที่มีอยู่", "replace": "แทนที่การกำหนดค่าที่มีอยู่", "dryRun": "แสดงตัวอย่างโดยไม่ใช้การเปลี่ยนแปลง" }, "diff": { "source": "คอนเท็กซ์ต้นทาง", "target": "คอนเท็กซ์ปลายทาง" }, "bundle": { "description": "ส่งออกการกำหนดค่าเป็นไฟล์บันเดิล", "include": "ส่วนที่จะรวม (คั่นด้วยจุลภาค)" }, "import": { "description": "นำเข้าไฟล์บันเดิล", "dryRun": "ตรวจสอบความถูกต้องโดยไม่ใช้การเปลี่ยนแปลง" }, "initialize": { "fromCloud": "เริ่มต้นจากข้อมูลสำรองบนคลาวด์" }, "tokens": { "description": "จัดการโทเค็นการซิงค์", "create": { "name": "ชื่อโทเค็น", "scope": "ขอบเขตโทเค็น", "ttl": "TTL ของโทเค็น (เช่น 30d)" }, "revoke": { "yes": "ข้ามการยืนยัน" } }, "resolve": { "description": "แก้ไขข้อขัดแย้งในการซิงค์แบบโต้ตอบ" } }, "config": { "contexts": { "description": "จัดการคอนเท็กซ์/โปรไฟล์ของเซิร์ฟเวอร์ (เพิ่ม, ใช้งาน, แสดงรายการ, แสดงรายละเอียด, ลบ, เปลี่ยนชื่อ, ส่งออก, นำเข้า)" }, "lang": { "description": "จัดการภาษาที่แสดงผลของ CLI", "getDescription": "แสดงรหัสภาษาที่ใช้งานอยู่ในปัจจุบัน", "setDescription": "ตั้งค่าภาษาที่ใช้แสดงผลและบันทึกลงใน config", "listDescription": "แสดงรายการภาษาที่ใช้ได้ทั้งหมด", "listTitle": "ภาษาที่ใช้ได้", "current": "ภาษา: {code} ({name})", "saved": "ตั้งค่าภาษาเป็น {code} ({name}) แล้ว", "noCode": "ต้องระบุรหัสภาษา เรียกใช้ 'omniroute config lang list' เพื่อดูรหัสที่ใช้ได้", "unknown": "ไม่รู้จักรหัสภาษา: {code} เรียกใช้ 'omniroute config lang list' เพื่อดูรหัสที่ใช้ได้", "alreadySet": "ตั้งค่าภาษาเป็น {code} อยู่แล้ว", "envHint": "เคล็ดลับ: คุณสามารถตั้งค่า OMNIROUTE_LANG={code} ในสภาพแวดล้อมของคุณได้เช่นกัน" } }, "completion": { "description": "สร้างหรือติดตั้งสคริปต์เติมคำสั่งอัตโนมัติสำหรับเชลล์", "zsh": "แสดงสคริปต์เติมคำสั่งอัตโนมัติสำหรับ zsh", "bash": "แสดงสคริปต์เติมคำสั่งอัตโนมัติสำหรับ bash", "fish": "แสดงสคริปต์เติมคำสั่งอัตโนมัติสำหรับ fish", "install": "ติดตั้งสคริปต์เติมคำสั่งอัตโนมัติแบบส่วนกลางสำหรับเชลล์ที่ตรวจพบ", "refresh": "รีเฟรชแคชของคอมโบ/ผู้ให้บริการ/โมเดล" }, "logs": { "description": "สตรีมหรือส่งออกบันทึกคำขอ", "follow": "สตรีมบันทึกแบบเรียลไทม์", "filter": "กรองตามระดับ (error,warn,info) — คั่นด้วยเครื่องหมายจุลภาค", "lines": "จำนวนบรรทัดที่จะดึงข้อมูล", "timeout": "ระยะหมดเวลาการเชื่อมต่อ หน่วยเป็น ms", "baseUrl": "URL ฐานของ OmniRoute API", "requestId": "กรองตาม ID คำขอ", "apiKey": "กรองตามคีย์ API", "combo": "กรองตามชื่อคอมโบ", "status": "กรองตามรหัสสถานะ HTTP", "durationMin": "ระยะเวลาขั้นต่ำของคำขอ หน่วยเป็น ms", "durationMax": "ระยะเวลาสูงสุดของคำขอ หน่วยเป็น ms", "export": "บันทึกล็อกลงในไฟล์ (json/jsonl/csv)", "exported": "บันทึกล็อกไปยัง {path} แล้ว", "stopped": "หยุดสตรีมล็อกแล้ว", "streamError": "เกิดข้อผิดพลาดในการสตรีมล็อก: {message}" }, "tray": { "description": "ควบคุมไอคอนในถาดระบบ", "show": "แสดงไอคอนในถาดระบบ (หากเซิร์ฟเวอร์กำลังทำงานด้วย --tray)", "hide": "ซ่อนไอคอนในถาดระบบ", "quit": "ออกจาก OmniRoute ผ่านถาดระบบ" }, "autostart": { "description": "จัดการการเริ่ม OmniRoute อัตโนมัติเมื่อบูต (Linux: บริการผู้ใช้ systemd)", "enable": "เปิดใช้การเริ่มอัตโนมัติเมื่อบูต", "disable": "ปิดใช้การเริ่มอัตโนมัติเมื่อบูต", "toggle": "สลับสถานะการเริ่มอัตโนมัติเมื่อบูต", "status": "แสดงสถานะการเริ่มอัตโนมัติ" }, "runtime": { "description": "จัดการการพึ่งพารันไทม์แบบเนทีฟ", "check": "ตรวจสอบสถานะของการพึ่งพาแบบเนทีฟในไดเรกทอรีรันไทม์", "repair": "ติดตั้งการพึ่งพาแบบเนทีฟอีกครั้งในไดเรกทอรีรันไทม์", "repair_force": "บังคับติดตั้งใหม่แม้ว่ายังใช้งานได้", "clean": "ลบไดเรกทอรีรันไทม์ (เพิ่มพื้นที่ว่างในดิสก์)", "clean_yes": "ข้ามการยืนยัน" }, "repl": { "description": "REPL แบบโต้ตอบหลายรอบกับ LLM", "model": "โมเดลที่จะใช้ (ค่าเริ่มต้น: อัตโนมัติ)", "combo": "ชื่อคอมโบที่จะใช้", "system": "พรอมต์ระบบ", "resume": "ดำเนินเซสชันที่บันทึกไว้ต่อตามชื่อ" }, "plugin": { "description": "จัดการปลั๊กอิน CLI (omniroute-cmd-*)", "list": "แสดงรายการปลั๊กอินที่ติดตั้งแล้ว", "install": "ติดตั้งปลั๊กอินจาก npm หรือพาธภายในเครื่อง", "remove": "ลบปลั๊กอินที่ติดตั้งแล้ว", "info": "แสดงรายละเอียดของปลั๊กอินที่ติดตั้งแล้ว", "search": "ค้นหาปลั๊กอินที่พร้อมใช้งานในรีจิสทรี npm", "update": "อัปเดตปลั๊กอินที่ติดตั้งแล้ว", "scaffold": "สร้างโครงเริ่มต้นสำหรับปลั๊กอินใหม่" }, "launch": { "description": "เปิด Claude Code ที่เชื่อมต่อกับ OmniRoute (ภายในเครื่องหรือระยะไกล พร้อม --profile)", "token": "โทเค็นที่ไคลเอนต์ Claude ควรส่ง (ANTHROPIC_AUTH_TOKEN)", "notRunning": "ไม่สามารถเข้าถึง OmniRoute ที่ {port} ได้ เริ่มต้นด้วย 'omniroute serve'", "notFound": "ไม่พบ CLI 'claude' ใน PATH" }, "run": { "description": "เปิดเป้าหมาย CLI ที่รองรับผ่าน OmniRoute" }, "setupClaude": { "description": "สร้างโปรไฟล์ Claude Code ใน ~/.claude/profiles จากแค็ตตาล็อกโมเดล OmniRoute" }, "connect": { "description": "เชื่อมต่อกับเซิร์ฟเวอร์ OmniRoute ระยะไกลและเข้าสู่โหมดระยะไกล" }, "tokens": { "description": "จัดการโทเค็นการเข้าถึง CLI แบบกำหนดขอบเขต (โหมดระยะไกล)" }, "configure": { "description": "เลือกผู้ให้บริการ+โมเดลจากเซิร์ฟเวอร์ที่ใช้งานอยู่และกำหนดค่า CLI ภายในเครื่องที่รองรับ" }, "launchCodex": { "description": "เปิด Codex CLI ที่เชื่อมต่อกับ OmniRoute (ภายในเครื่องหรือ VPS ระยะไกล)" }, "setupCodex": { "description": "สร้างไฟล์โปรไฟล์ใน ~/.codex จากแค็ตตาล็อกโมเดลแบบสดของ OmniRoute" }, "packs": { "description": "จัดการแพ็กรันไทม์เสริม (ML / ระบบอัตโนมัติของเบราว์เซอร์)", "listDescription": "แสดงรายการแพ็กเสริมและสถานะการติดตั้ง", "installDescription": "ติดตั้งแพ็กเสริมลงใน DATA_DIR", "verifyDescription": "ตรวจสอบแพ็กที่ติดตั้งแล้วเทียบกับดัชนีเช็กซัมที่ให้มา", "removeDescription": "ลบแพ็กเสริมที่ติดตั้งแล้ว", "sourceOpt": "ไดเรกทอรีที่เก็บเพย์โหลดของแพ็กและดัชนีแพ็ก", "warnNoIndex": "ไม่พบ optional-packs.index.json — ไม่สามารถติดตั้ง/ตรวจสอบได้ในเช็กเอาต์นี้ (บันเดิลเดสก์ท็อปมีไฟล์นี้ให้)", "errUnknown": "แพ็กที่ไม่รู้จัก: {name}", "errNoIndex": "ไม่พบดัชนีแพ็ก โปรดส่ง --source