# Gateway ## Gateway คืออะไร? Gateway คือหัวใจของ Neotask, บริการที่รันระยะยาวตัวเดียวที่จัดการเซสชันเอเจนต์ทั้งหมด ช่องทางการส่งข้อความ การรันเครื่องมือ และการเชื่อมต่ออุปกรณ์ ทุกอย่างไหลผ่าน Gateway มันคือ WebSocket server ที่รับฟังการเชื่อมต่อจาก client (แอปเดสก์ท็อป แอปมือถือ web dashboard) และจัดการวงจรชีวิตของผู้ช่วย AI ทั้งหมด ## สถาปัตยกรรม ### ส่วนประกอบ - **WebSocket Server**, รับการเชื่อมต่อ client (พอร์ตเริ่มต้น 18789) - **HTTP Server**, ให้บริการ Control UI, canvas host และ health endpoint - **Channel Adapter**, รักษาการเชื่อมต่อกับแพลตฟอร์มการส่งข้อความ (WhatsApp, Telegram, Discord เป็นต้น) - **Session Manager**, คงและจัดการสถานะการสนทนาของเอเจนต์ - **Cron Scheduler**, รันงานตามกำหนดการและ heartbeat wakeup - **Plugin Runtime**, โหลดและจัดการวงจรชีวิต plugin - **Browser Service**, ควบคุม Chromium instance สำหรับการทำงานอัตโนมัติของเว็บ ### โหมด Binding | โหมด | คำอธิบาย | |------|-------------| | **Loopback** | ค่าเริ่มต้น เข้าถึงได้เฉพาะจาก localhost (127.0.0.1) | | **LAN** | เข้าถึงได้บนเครือข่ายท้องถิ่น ค้นพบได้อัตโนมัติผ่าน Bonjour/mDNS | | **Tailnet** | เข้าถึงได้ผ่าน Tailscale VPN พร้อม MagicDNS | | **Custom** | Bind กับที่อยู่เฉพาะ | ### การตรวจสอบสิทธิ์ | วิธีการ | คำอธิบาย | |--------|-------------| | **Token** | WebSocket bearer token (UUID หรือ string กำหนดเอง) | | **Password** | การตรวจสอบสิทธิ์ด้วยรหัสผ่าน (bcrypt hashed) | | **Trusted Proxy** | สำหรับ reverse proxy ที่มี pre-auth header | | **Local Trust** | การเชื่อมต่อ loopback ได้รับการอนุมัติอัตโนมัติ | ## การกำหนดค่า Gateway กำหนดค่าผ่าน `neotask.json` (รูปแบบ JSON5) ส่วนสำคัญ: | ส่วน | ควบคุม | |---------|----------| | `agents` | รายการเอเจนต์ ค่าเริ่มต้น workspace | | `gateway` | พอร์ต bind mode, auth, พฤติกรรมโหลดซ้ำ | | `channels` | การกำหนดค่าและข้อมูลประจำตัวต่อช่องทาง | | `tools` | สิทธิ์เครื่องมือ profile ความปลอดภัย | | `plugins` | การโหลด plugin การเปิดใช้งาน การกำหนดค่าต่อ plugin | | `models` | auth ผู้ให้บริการ fallback การตั้งค่าผู้ให้บริการ | | `skills` | ไดเรกทอรีทักษะ การกำหนดค่าต่อทักษะ | | `browser` | Browser profile, พอร์ต โหมด headless | | `cron` | การกำหนดค่า scheduler | | `session` | กฎการรีเซ็ต เกณฑ์การบีบอัด | | `messages` | การตั้งค่า TTS นโยบายสื่อ | | `memory` | การกำหนดค่าการ index หน่วยความจำ | | `security` | การ sandbox โหมดยกระดับ การอนุมัติ | ### Hot Reload การเปลี่ยนแปลงการกำหนดค่าสามารถใช้งานได้โดยไม่ต้องรีสตาร์ท: | โหมด | พฤติกรรม | |------|----------| | **Hybrid** (ค่าเริ่มต้น) | ใช้การเปลี่ยนแปลงที่ปลอดภัยแบบ hot-apply รีสตาร์ทสำหรับอื่น ๆ | | **Hot** | ใช้เฉพาะการเปลี่ยนแปลงที่ปลอดภัยแบบ hot เพิกเฉยต่ออื่น ๆ | | **Restart** | รีสตาร์ทเมื่อมีการเปลี่ยนแปลงที่ต้องโหลดซ้ำ | | **Off** | ไม่มีการโหลดซ้ำอัตโนมัติ | ## การเข้าถึงระยะไกล ### Tailscale (แนะนำ) Tailscale ให้การเข้าถึงระยะไกลที่ปลอดภัยและ zero-config: - Bind Gateway กับ Tailnet ของคุณ - เข้าถึงได้จากอุปกรณ์ใด ๆ ในเครือข่าย Tailscale เดียวกัน - DNS อัตโนมัติผ่าน MagicDNS - Tailscale Serve สามารถเปิดเผยแดชบอร์ดด้วย HTTPS ### SSH Tunnel ส่งต่อพอร์ต Gateway ผ่าน SSH: - ง่าย ปลอดภัย ไม่ต้องเปลี่ยนแปลงการกำหนดค่า - ทำงานกับเครื่องใด ๆ ที่ใช้ SSH ได้ - รองรับ WebSocket protocol เต็มรูปแบบและ Control UI ### กฎความปลอดภัย - **Loopback + SSH/Tailscale** คือการรวมกันที่ปลอดภัยที่สุด - การ binding ที่ไม่ใช่ loopback ต้องการการกำหนดค่า auth token - การ pin fingerprint TLS มีให้สำหรับความปลอดภัยเพิ่มเติม - การควบคุมเบราว์เซอร์ถูกปิดใช้งานสำหรับการเชื่อมต่อระยะไกลโดยค่าเริ่มต้น ## การตรวจสอบสุขภาพ ### Health Endpoint HTTP endpoint `/health` ส่งคืน: - สถานะ Gateway - liveness ของ RPC - สุขภาพต่อช่องทาง (เชื่อมต่อ สถานะ auth จำนวนบัญชี) - ความพร้อมของเบราว์เซอร์ - เอเจนต์ที่ทำงานอยู่และ node ที่เชื่อมต่อ - Uptime ### Probe - **RPC liveness**, WebSocket connect + echo test - **Channel health**, Auth check + API ping ต่อช่องทาง - **Browser readiness**, Port check, process check - **Node connectivity**, Timestamp heartbeat ล่าสุด ## การค้นพบ ### Bonjour/mDNS เมื่อ bind กับ LAN, Gateway โฆษณาตัวเองผ่าน multicast DNS: - ประเภทบริการ: `_neotask-gw._tcp` - รวมถึงพอร์ต transport สถานะ TLS และข้อมูล Tailscale DNS - แอปคู่หูค้นพบ Gateway โดยอัตโนมัติ ### Wide-Area Discovery ค้นพบ gateway ข้ามเครือข่ายของคุณพร้อม timeout ที่กำหนดค่าได้ รองรับทั้ง Bonjour ในเครื่องและการค้นพบ DNS ของ Tailscale ## Gateway หลายตัว คุณสามารถรัน Gateway หลาย instance บนเครื่องเดียวกันโดยใช้ profile: - แต่ละ profile มี config, workspace, เซสชัน และ state แยกกัน - พอร์ตที่แตกต่างกันสำหรับแต่ละ Gateway - มีประโยชน์สำหรับการแยกตัว (ส่วนตัว vs งาน) หรือการทดสอบ ## การวินิจฉัย ### Doctor เครื่องมือวินิจฉัยในตัวตรวจสอบ: - ความถูกต้องของการกำหนดค่า - สิทธิ์ไฟล์ - การเชื่อมต่อช่องทาง - สถานะ auth ของ model - ความเข้ากันได้กับเวอร์ชัน Node.js - การกำหนดค่าที่ผิดปกติทั่วไป มันสามารถแก้ไขปัญหาหลาย ๆ อย่างโดยอัตโนมัติเมื่อได้รับอนุญาต ### Logging Gateway log ถูกเขียนลงในไฟล์ JSONL รายวัน: - การติดตามการใช้โทเค็นต่อการ completion - Channel event log - การบันทึกข้อผิดพลาดพร้อม context ที่มีโครงสร้าง - ระดับ log ที่กำหนดค่าได้