Control UI (เบราว์เซอร์)

Control UI เป็นแอป single-page ขนาดเล็ก Vite + Lit ที่เสิร์ฟโดย Gateway:

  • ค่าเริ่มต้น: http://<host>:18789/
  • คำนำหน้าตัวเลือก: ตั้งค่า gateway.controlUi.basePath (เช่น /mayros)

มันพูดคุย โดยตรงกับ Gateway WebSocket บนพอร์ตเดียวกัน

เปิดอย่างรวดเร็ว (โลคัล)

หาก Gateway ทำงานบนคอมพิวเตอร์เดียวกัน ให้เปิด:

หากหน้าเว็บโหลดไม่ได้ ให้เริ่ม Gateway ก่อน: mayros gateway

การพิสูจน์ตัวตนถูกจัดหาระหว่างการจับมือ WebSocket ผ่าน:

  • connect.params.auth.token
  • connect.params.auth.password

แผงการตั้งค่าแดชบอร์ดให้คุณเก็บโทเค็น รหัสผ่านไม่ถูกเก็บถาวร วิซาร์ด onboarding สร้างโทเค็น gateway ตามค่าเริ่มต้น ดังนั้นวางมันที่นี่ในการเชื่อมต่อครั้งแรก

การจับคู่อุปกรณ์ (การเชื่อมต่อครั้งแรก)

เมื่อคุณเชื่อมต่อกับ Control UI จากเบราว์เซอร์หรืออุปกรณ์ใหม่ Gateway ต้องการ การอนุมัติการจับคู่ครั้งเดียว — แม้ว่าคุณจะอยู่บน Tailnet เดียวกัน กับ gateway.auth.allowTailscale: true นี่เป็นมาตรการรักษาความปลอดภัยเพื่อป้องกัน การเข้าถึงที่ไม่ได้รับอนุญาต

สิ่งที่คุณจะเห็น: "disconnected (1008): pairing required"

เพื่ออนุมัติอุปกรณ์:

bash
# แสดงคำขอที่รอดำเนินการ
mayros devices list

# อนุมัติโดย request ID
mayros devices approve <requestId>

เมื่ออนุมัติแล้ว อุปกรณ์จะถูกจดจำและจะไม่ต้องการการอนุมัติอีกเว้นแต่ คุณเพิกถอนมันด้วย mayros devices revoke --device <id> --role <role> ดู Devices CLI สำหรับการหมุนเวียนโทเค็นและการเพิกถอน

หมายเหตุ:

  • การเชื่อมต่อโลคัล (127.0.0.1) ได้รับการอนุมัติอัตโนมัติ
  • การเชื่อมต่อระยะไกล (LAN, Tailnet, ฯลฯ) ต้องการการอนุมัติที่ชัดเจน
  • แต่ละโปรไฟล์เบราว์เซอร์สร้าง device ID ที่ไม่ซ้ำ ดังนั้นการสลับเบราว์เซอร์หรือ ล้างข้อมูลเบราว์เซอร์จะต้องการการจับคู่อีกครั้ง

สิ่งที่มันสามารถทำได้ (วันนี้)

  • แชทกับโมเดลผ่าน Gateway WS (chat.history, chat.send, chat.abort, chat.inject)
  • สตรีมการเรียกเครื่องมือ + การ์ดเอาต์พุตเครื่องมือสดใน Chat (เหตุการณ์ agent)
  • ช่องทาง: WhatsApp/Telegram/Discord/Slack + ช่องทางปลั๊กอิน (Mattermost, ฯลฯ) สถานะ + การล็อกอิน QR + การตั้งค่าต่อช่องทาง
  • Instances: รายการ presence + รีเฟรช
  • เซสชัน: รายการ + การแทนที่ thinking/verbose ต่อเซสชัน
  • งาน Cron: รายการ/เพิ่ม/รัน/เปิดใช้งาน/ปิดใช้งาน + ประวัติการรัน
  • Skills: สถานะ เปิดใช้งาน/ปิดใช้งาน ติดตั้ง การอัปเดต API key
  • โหนด: รายการ + capabilities
  • การอนุมัติ Exec: แก้ไข allowlists ของ gateway หรือโหนด + นโยบายการขอสำหรับ exec host=gateway/node
  • การตั้งค่า: ดู/แก้ไข ~/.mayros/mayros.json
  • การตั้งค่า: ใช้ + รีสตาร์ทพร้อมการตรวจสอบความถูกต้อง
  • Debug: สถานะ/สุขภาพ/โมเดล snapshots + บันทึกเหตุการณ์ + การเรียก RPC ด้วยตนเอง
  • บันทึก: ติดตามสดของบันทึกไฟล์ gateway พร้อมตัวกรอง/ส่งออก
  • อัปเดต: รันการอัปเดต package/git + รีสตาร์ทพร้อมรายงานการรีสตาร์ท

พฤติกรรมแชท

  • chat.send เป็น non-blocking: มันตอบรับทันทีด้วย { runId, status: "started" } และการตอบกลับสตรีมผ่านเหตุการณ์ chat
  • การส่งซ้ำด้วย idempotencyKey เดียวกันส่งคืน { status: "in_flight" } ในขณะที่รัน และ { status: "ok" } หลังจากเสร็จสิ้น
  • chat.history responses มีขนาดจำกัดเพื่อความปลอดภัยของ UI
  • chat.inject แนบโน้ต assistant ไปยัง transcript เซสชันและออกอากาศเหตุการณ์ chat สำหรับการอัปเดต UI เท่านั้น
  • หยุด:
    • คลิก Stop (เรียก chat.abort)
    • พิมพ์ /stop (หรือ stop|esc|abort|wait|exit|interrupt) เพื่อยกเลิก out-of-band

การเข้าถึง Tailnet (แนะนำ)

Integrated Tailscale Serve (ต้องการ)

เก็บ Gateway ไว้ที่ loopback และให้ Tailscale Serve พร็อกซีมันด้วย HTTPS:

bash
mayros gateway --tailscale serve

เปิด:

  • https://<magicdns>/ (หรือ gateway.controlUi.basePath ที่คุณกำหนดค่า)

ผูกกับ tailnet + โทเค็น

bash
mayros gateway --bind tailnet --token "$(openssl rand -hex 32)"

จากนั้นเปิด:

  • http://<tailscale-ip>:18789/

วางโทเค็นลงในการตั้งค่า UI (ส่งเป็น connect.params.auth.token)

HTTP ที่ไม่ปลอดภัย

หากคุณเปิดแดชบอร์ดผ่าน HTTP ธรรมดา (http://<lan-ip> หรือ http://<tailscale-ip>) เบราว์เซอร์ทำงานใน non-secure context และบล็อก WebCrypto ตามค่าเริ่มต้น Mayros บล็อก การเชื่อมต่อ Control UI โดยไม่มีอัตลักษณ์อุปกรณ์

แก้ไขที่แนะนำ: ใช้ HTTPS (Tailscale Serve) หรือเปิด UI ในโลคัล:

  • https://<magicdns>/ (Serve)
  • http://127.0.0.1:18789/ (บนโฮสต์ gateway)

การสร้าง UI

Gateway เสิร์ฟไฟล์แบบคงที่จาก dist/control-ui สร้างพวกเขาด้วย:

bash
pnpm ui:build # ติดตั้ง UI deps อัตโนมัติในการรันครั้งแรก

สำหรับการพัฒนาในโลคัล (เซิร์ฟเวอร์พัฒนาแยก):

bash
pnpm ui:dev # ติดตั้ง UI deps อัตโนมัติในการรันครั้งแรก

จากนั้นชี้ UI ไปที่ Gateway WS URL ของคุณ (เช่น ws://127.0.0.1:18789)