Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

कंट्रोल UI (ब्राउज़र)

कंट्रोल UI एक छोटा Vite + Lit सिंगल‑पेज ऐप है जिसे Gateway द्वारा परोसा जाता है:

  • डिफ़ॉल्ट: http://<host>:18789/
  • वैकल्पिक प्रीफ़िक्स: gateway.controlUi.basePath सेट करें (उदा. /openclaw)

यह उसी पोर्ट पर Gateway WebSocket से सीधे बात करता है।

त्वरित खोलें (लोकल)

यदि Gateway उसी कंप्यूटर पर चल रहा है, तो खोलें:

यदि पेज लोड नहीं होता, तो पहले Gateway शुरू करें: openclaw gateway.

प्रमाणीकरण WebSocket हैंडशेक के दौरान निम्न के माध्यम से प्रदान किया जाता है:

  • connect.params.auth.token
  • connect.params.auth.password डैशबोर्ड सेटिंग्स पैनल आपको एक टोकन सहेजने की सुविधा देता है; पासवर्ड सहेजे नहीं जाते हैं। The onboarding wizard generates a gateway token by default, so paste it here on first connect.

डिवाइस पेयरिंग (पहला कनेक्शन)

जब आप किसी नए ब्राउज़र या डिवाइस से Control UI से कनेक्ट करते हैं, तो Gateway requires a one-time pairing approval — even if you're on the same Tailnet with gateway.auth.allowTailscale: true. This is a security measure to prevent unauthorized access.

आप क्या देखेंगे: "disconnected (1008): pairing required"

डिवाइस को अनुमोदित करने के लिए:

# List pending requests
openclaw devices list

# Approve by request ID
openclaw devices approve <requestId>

स्वीकृत होने के बाद, डिवाइस को याद रखा जाता है और पुनः-स्वीकृति की आवश्यकता नहीं होगी जब तक you revoke it with openclaw devices revoke --device <id> --role <role>. See Devices CLI for token rotation and revocation.

टिप्पणियाँ:

  • लोकल कनेक्शन (127.0.0.1) स्वतः अनुमोदित होते हैं।
  • रिमोट कनेक्शन (LAN, Tailnet आदि) के लिए स्पष्ट स्वीकृति आवश्यक है।
  • प्रत्येक ब्राउज़र प्रोफ़ाइल एक अद्वितीय डिवाइस ID बनाती है, इसलिए ब्राउज़र बदलने या ब्राउज़र डेटा साफ़ करने पर पुनः‑पेयरिंग की आवश्यकता होगी।

यह आज क्या कर सकता है

  • Gateway WS के माध्यम से मॉडल के साथ चैट (chat.history, chat.send, chat.abort, chat.inject)
  • चैट में टूल कॉल स्ट्रीम करना + लाइव टूल आउटपुट कार्ड (एजेंट इवेंट्स)
  • Channels: WhatsApp/Telegram/Discord/Slack + plugin channels (Mattermost, etc.) status + QR login + per-channel config (channels.status, web.login.*, config.patch)
  • इंस्टेंस: प्रेज़ेन्स सूची + रिफ़्रेश (system-presence)
  • सत्र: सूची + प्रति‑सत्र thinking/verbose ओवरराइड (sessions.list, sessions.patch)
  • क्रॉन जॉब्स: सूची/जोड़ें/चलाएँ/सक्षम/अक्षम + रन इतिहास (cron.*)
  • Skills: स्थिति, सक्षम/अक्षम, इंस्टॉल, API कुंजी अपडेट (skills.*)
  • नोड्स: सूची + क्षमताएँ (node.list)
  • Exec अनुमोदन: gateway या नोड allowlists संपादित करें + exec host=gateway/node के लिए नीति पूछें (exec.approvals.*)
  • विन्यास: देखें/संपादित करें ~/.openclaw/openclaw.json (config.get, config.set)
  • विन्यास: सत्यापन (config.apply) के साथ लागू करें + पुनः प्रारंभ करें और अंतिम सक्रिय सत्र को जगाएँ
  • विन्यास लेखन में समवर्ती संपादनों को ओवरराइट होने से रोकने के लिए base-hash गार्ड शामिल है
  • विन्यास स्कीमा + फ़ॉर्म रेंडरिंग (config.schema, जिसमें प्लगइन + चैनल स्कीमा शामिल हैं); Raw JSON संपादक उपलब्ध रहता है
  • डिबग: स्थिति/स्वास्थ्य/मॉडल स्नैपशॉट्स + इवेंट लॉग + मैनुअल RPC कॉल (status, health, models.list)
  • लॉग्स: फ़िल्टर/एक्सपोर्ट के साथ gateway फ़ाइल लॉग्स का लाइव टेल (logs.tail)
  • अपडेट: पैकेज/git अपडेट चलाएँ + पुनः प्रारंभ करें (update.run) और एक रीस्टार्ट रिपोर्ट के साथ

क्रॉन जॉब्स पैनल नोट्स:

  • अलग-थलग जॉब्स के लिए, डिलीवरी डिफ़ॉल्ट रूप से सारांश की घोषणा पर सेट होती है। यदि आप केवल आंतरिक रन चाहते हैं, तो आप इसे none पर स्विच कर सकते हैं।
  • जब announce चुना जाता है, तब चैनल/टार्गेट फ़ील्ड दिखाई देते हैं।

चैट व्यवहार

  • chat.send नॉन‑ब्लॉकिंग है: यह तुरंत { runId, status: "started" } के साथ ack करता है और प्रतिक्रिया chat इवेंट्स के माध्यम से स्ट्रीम होती है।
  • उसी idempotencyKey के साथ पुनः भेजने पर, चलने के दौरान { status: "in_flight" } और पूर्ण होने के बाद { status: "ok" } लौटता है।
  • chat.inject सत्र ट्रांसक्रिप्ट में एक सहायक नोट जोड़ता है और UI‑केवल अपडेट्स के लिए chat इवेंट प्रसारित करता है (कोई एजेंट रन नहीं, कोई चैनल डिलीवरी नहीं)।
  • रोकें:
  • Stop पर क्लिक करें ( chat.abort कॉल करता है)
  • /stop टाइप करें (या stop|esc|abort|wait|exit|interrupt) ताकि आउट‑ऑफ़‑बैंड निरस्त किया जा सके
  • chat.abort { sessionKey } का समर्थन करता है (कोई runId नहीं) ताकि उस सत्र के सभी सक्रिय रन निरस्त किए जा सकें

Tailnet एक्सेस (अनुशंसित)

एकीकृत Tailscale Serve (पसंदीदा)

Gateway को loopback पर रखें और Tailscale Serve को HTTPS के साथ इसे प्रॉक्सी करने दें:

openclaw gateway --tailscale serve

खोलें:

  • https://<magicdns>/ (या आपका विन्यस्त gateway.controlUi.basePath)

डिफ़ॉल्ट रूप से, Serve अनुरोध Tailscale पहचान हेडर्स के माध्यम से प्रमाणित हो सकते हैं (tailscale-user-login) when gateway.auth.allowTailscale is true. OpenClaw verifies the identity by resolving the x-forwarded-for address with tailscale whois and matching it to the header, and only accepts these when the request hits loopback with Tailscale’s x-forwarded-* headers. Set gateway.auth.allowTailscale: false (or force gateway.auth.mode: "password") if you want to require a token/password even for Serve traffic.

Tailnet से बाइंड + टोकन

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

फिर खोलें:

  • http://<tailscale-ip>:18789/ (या आपका विन्यस्त gateway.controlUi.basePath)

टोकन को UI सेटिंग्स में पेस्ट करें ( connect.params.auth.token के रूप में भेजा जाता है)।

असुरक्षित HTTP

यदि आप डैशबोर्ड को साधारण HTTP (http://<lan-ip> या http://<tailscale-ip>) पर खोलते हैं, the browser runs in a non-secure context and blocks WebCrypto. By default, OpenClaw blocks Control UI connections without device identity.

अनुशंसित समाधान: HTTPS (Tailscale Serve) का उपयोग करें या UI को लोकली खोलें:

  • https://<magicdns>/ (Serve)
  • http://127.0.0.1:18789/ (Gateway होस्ट पर)

डाउनग्रेड उदाहरण (HTTP पर केवल‑टोकन):

{
  gateway: {
    controlUi: { allowInsecureAuth: true },
    bind: "tailnet",
    auth: { mode: "token", token: "replace-me" },
  },
}

यह Control UI के लिए डिवाइस पहचान + पेयरिंग को अक्षम कर देता है (यहाँ तक कि HTTPS पर भी)। उपयोग करें only if you trust the network.

HTTPS सेटअप मार्गदर्शन के लिए Tailscale देखें।

UI बनाना

The Gateway serves static files from dist/control-ui. Build them with:

pnpm ui:build # auto-installs UI deps on first run

वैकल्पिक absolute base (जब आप स्थिर एसेट URL चाहते हैं):

OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build

लोकल विकास के लिए (अलग dev सर्वर):

pnpm ui:dev # auto-installs UI deps on first run

Then point the UI at your Gateway WS URL (e.g. ws://127.0.0.1:18789).

डिबगिंग/टेस्टिंग: dev सर्वर + रिमोट Gateway

The Control UI is static files; the WebSocket target is configurable and can be different from the HTTP origin. This is handy when you want the Vite dev server locally but the Gateway runs elsewhere.

  1. UI dev सर्वर शुरू करें: pnpm ui:dev
  2. इस प्रकार का URL खोलें:
http://localhost:5173/?gatewayUrl=ws://<gateway-host>:18789

वैकल्पिक एक‑बार प्रमाणीकरण (यदि आवश्यक हो):

http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789&token=<gateway-token>

नोट्स:

  • gatewayUrl लोड के बाद localStorage में संग्रहीत होता है और URL से हटा दिया जाता है।
  • token localStorage में संग्रहीत होता है; password केवल मेमोरी में रखा जाता है।
  • When gatewayUrl is set, the UI does not fall back to config or environment credentials. Provide token (or password) explicitly. Missing explicit credentials is an error.
  • जब Gateway TLS (Tailscale Serve, HTTPS प्रॉक्सी, आदि) के पीछे हो, तो wss:// का उपयोग करें।
  • क्लिकजैकिंग रोकने के लिए gatewayUrl केवल टॉप‑लेवल विंडो में स्वीकार किया जाता है (एम्बेडेड नहीं)।
  • For cross-origin dev setups (e.g. pnpm ui:dev to a remote Gateway), add the UI origin to gateway.controlUi.allowedOrigins.

उदाहरण:

{
  gateway: {
    controlUi: {
      allowedOrigins: ["http://localhost:5173"],
    },
  },
}

रिमोट एक्सेस सेटअप विवरण: Remote access