Nodes
एक node एक companion device (macOS/iOS/Android/headless) है जो Gateway WebSocket (operators के समान port) से role: "node" के साथ connect होता है और node.invoke के माध्यम से एक command surface (जैसे canvas.*, camera.*, system.*) expose करता है। Protocol विवरण: Gateway protocol।
Legacy transport: Bridge protocol (TCP JSONL; deprecated/वर्तमान nodes के लिए removed)।
macOS node mode में भी चल सकता है: menubar app Gateway के WS server से connect होता है और अपने स्थानीय canvas/camera commands को एक node के रूप में expose करता है (ताकि mayros nodes … इस Mac के खिलाफ काम करे)।
नोट्स:
- Nodes peripherals हैं, gateways नहीं। वे gateway service नहीं चलाते।
- Telegram/WhatsApp/आदि संदेश gateway पर land होते हैं, nodes पर नहीं।
- Troubleshooting runbook: /nodes/troubleshooting
Pairing + status
WS nodes device pairing का उपयोग करते हैं। Nodes connect के दौरान device identity present करते हैं; Gateway
role: node के लिए device pairing request बनाता है। Devices CLI (या UI) के माध्यम से approve करें।
Quick CLI:
bashmayros devices list mayros devices approve <requestId> mayros devices reject <requestId> mayros nodes status mayros nodes describe --node <idOrNameOrIp>
नोट्स:
nodes statusएक node को paired के रूप में mark करता है जब इसकी device pairing role मेंnodeशामिल हो।node.pair.*(CLI:mayros nodes pending/approve/reject) एक अलग gateway-owned node pairing store है; यह WSconnecthandshake को gate नहीं करता।
Remote node host (system.run)
जब आपका Gateway एक मशीन पर चलता है और आप commands को दूसरी पर execute करना चाहते हैं तो node host का उपयोग करें। Model अभी भी gateway से बात करता है; gateway
exec calls को node host पर forward करता है जब host=node selected हो।
क्या कहां चलता है
- Gateway host: संदेश receive करता है, model चलाता है, tool calls को route करता है।
- Node host: node मशीन पर
system.run/system.whichexecute करता है। - Approvals:
~/.mayros/exec-approvals.jsonके माध्यम से node host पर enforced।
Node host शुरू करें (foreground)
Node मशीन पर:
bashmayros node run --host <gateway-host> --port 18789 --display-name "Build Node"
SSH tunnel के माध्यम से Remote gateway (loopback bind)
यदि Gateway loopback से bind करता है (gateway.bind=loopback, local mode में डिफ़ॉल्ट),
तो remote node hosts सीधे connect नहीं हो सकते। एक SSH tunnel बनाएं और
node host को tunnel के स्थानीय end पर point करें।
उदाहरण (node host -> gateway host):
bash# Terminal A (चलता रहे): local 18790 -> gateway 127.0.0.1:18789 forward करें ssh -N -L 18790:127.0.0.1:18789 user@gateway-host # Terminal B: gateway token export करें और tunnel के माध्यम से connect करें export MAYROS_GATEWAY_TOKEN="<gateway-token>" mayros node run --host 127.0.0.1 --port 18790 --display-name "Build Node"
Commands invoke करना
Low-level (raw RPC):
bashmayros nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'
सामान्य "एजेंट को MEDIA attachment दें" workflows के लिए higher-level helpers मौजूद हैं।
Screenshots (canvas snapshots)
यदि node Canvas (WebView) दिखा रहा है, तो canvas.snapshot { format, base64 } return करता है।
CLI helper (temp file में लिखता है और MEDIA:<path> print करता है):
bashmayros nodes canvas snapshot --node <idOrNameOrIp> --format png mayros nodes canvas snapshot --node <idOrNameOrIp> --format jpg --max-width 1200 --quality 0.9
Canvas controls
bashmayros nodes canvas present --node <idOrNameOrIp> --target https://example.com mayros nodes canvas hide --node <idOrNameOrIp> mayros nodes canvas navigate https://example.com --node <idOrNameOrIp> mayros nodes canvas eval --node <idOrNameOrIp> --js "document.title"
Photos + videos (node camera)
Photos (jpg):
bashmayros nodes camera list --node <idOrNameOrIp> mayros nodes camera snap --node <idOrNameOrIp> # डिफ़ॉल्ट: दोनों facings (2 MEDIA lines) mayros nodes camera snap --node <idOrNameOrIp> --facing front
Video clips (mp4):
bashmayros nodes camera clip --node <idOrNameOrIp> --duration 10s mayros nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio
नोट्स:
- Node को
canvas.*औरcamera.*के लिए foregrounded होना चाहिए (background callsNODE_BACKGROUND_UNAVAILABLEreturn करते हैं)। - Clip duration clamped है (वर्तमान में
<= 60s) oversized base64 payloads से बचने के लिए। - Android संभव होने पर
CAMERA/RECORD_AUDIOpermissions के लिए prompt करेगा; denied permissions*_PERMISSION_REQUIREDके साथ fail होते हैं।
Screen recordings (nodes)
Nodes screen.record (mp4) expose करते हैं। उदाहरण:
bashmayros nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 mayros nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio
Location (nodes)
Nodes location.get expose करते हैं जब Location settings में enabled हो।
CLI helper:
bashmayros nodes location get --node <idOrNameOrIp> mayros nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000
System commands (node host / mac node)
macOS node system.run, system.notify और system.execApprovals.get/set expose करता है।
Headless node host system.run, system.which और system.execApprovals.get/set expose करता है।
उदाहरण:
bashmayros nodes run --node <idOrNameOrIp> -- echo "Hello from mac node" mayros nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"
Headless node host (cross-platform)
Mayros एक headless node host (कोई UI नहीं) चला सकता है जो Gateway
WebSocket से connect होता है और system.run / system.which expose करता है।
इसे शुरू करें:
bashmayros node run --host <gateway-host> --port 18789
नोट्स:
- Pairing अभी भी आवश्यक है (Gateway एक node approval prompt दिखाएगा)।
- Node host अपनी node id, token, display name और gateway connection info को
~/.mayros/node.jsonमें store करता है। - Exec approvals स्थानीय रूप से
~/.mayros/exec-approvals.jsonके माध्यम से enforced हैं (Exec approvals देखें)।