閘道服務操作手冊
最後更新:2025-12-09
它是什麼
- 擁有單一 Baileys/Telegram 連線和控制/事件平面的永遠線上程序。
- 取代舊版
gateway指令。CLI 入口點:moltbot gateway。 - 執行直到停止;發生致命錯誤時以非零退出,以便監督程式重新啟動。
如何執行(本地)
moltbot gateway --port 18789
# 完整除錯/追蹤日誌輸出到 stdio:
moltbot gateway --port 18789 --verbose
# 如果埠忙碌,終止監聽器然後啟動:
moltbot gateway --force
# 開發迴圈(TS 變更時自動重新載入):
pnpm gateway:watch- 配置熱重載監視
~/.clawdbot/moltbot.json(或CLAWDBOT_CONFIG_PATH)。- 預設模式:
gateway.reload.mode="hybrid"(熱套用安全變更,關鍵變更時重啟)。 - 熱重載在需要時透過 SIGUSR1 使用程序內重啟。
- 使用
gateway.reload.mode="off"停用。
- 預設模式:
- 將 WebSocket 控制平面綁定到
127.0.0.1:<port>(預設 18789)。 - 相同埠也提供 HTTP(控制介面、hooks、A2UI)。單埠多工。
- OpenAI Chat Completions (HTTP):
/v1/chat/completions。 - OpenResponses (HTTP):
/v1/responses。 - Tools Invoke (HTTP):
/tools/invoke。
- OpenAI Chat Completions (HTTP):
- 預設在
canvasHost.port(預設18793)上啟動 Canvas 檔案伺服器,從~/clawd/canvas提供http://<gateway-host>:18793/__moltbot__/canvas/。使用canvasHost.enabled=false或CLAWDBOT_SKIP_CANVAS_HOST=1停用。 - 記錄到 stdout;使用 launchd/systemd 保持它存活並輪替日誌。
- 傳遞
--verbose以在疑難排解時將除錯日誌(握手、req/res、事件)從日誌檔案鏡像到 stdio。 --force使用lsof尋找所選埠上的監聽器,發送 SIGTERM,記錄被終止的內容,然後啟動閘道(如果缺少lsof則快速失敗)。- 如果你在監督程式下執行(launchd/systemd/mac 應用程式子程序模式),停止/重啟通常發送 SIGTERM;較舊的建置可能將其顯示為
pnpmELIFECYCLE退出碼 143(SIGTERM),這是正常關機,不是崩潰。 - SIGUSR1 在授權時觸發程序內重啟(閘道工具/配置套用/更新,或啟用
commands.restart進行手動重啟)。 - 預設需要閘道驗證:設定
gateway.auth.token(或CLAWDBOT_GATEWAY_TOKEN)或gateway.auth.password。除非使用 Tailscale Serve 身分,否則客戶端必須發送connect.params.auth.token/password。 - 精靈現在預設產生權杖,即使在 loopback 上也是如此。
- 埠優先順序:
--port>CLAWDBOT_GATEWAY_PORT>gateway.port> 預設18789。
遠端存取
- 偏好 Tailscale/VPN;否則使用 SSH 通道:bash
ssh -N -L 18789:127.0.0.1:18789 user@host - 然後客戶端透過通道連接到
ws://127.0.0.1:18789。 - 如果配置了權杖,即使透過通道,客戶端也必須在
connect.params.auth.token中包含它。
多個閘道(相同主機)
通常不必要:一個閘道可以服務多個訊息頻道和代理。僅在需要冗餘或嚴格隔離(例如:救援機器人)時使用多個閘道。
如果你隔離狀態 + 配置並使用唯一埠,則支援此功能。完整指南:多個閘道。
服務名稱具有設定檔感知能力:
- macOS:
bot.molt.<profile>(舊版com.clawdbot.*可能仍然存在) - Linux:
moltbot-gateway-<profile>.service - Windows:
Moltbot Gateway (<profile>)
安裝元資料嵌入在服務配置中:
CLAWDBOT_SERVICE_MARKER=moltbotCLAWDBOT_SERVICE_KIND=gatewayCLAWDBOT_SERVICE_VERSION=<version>
救援機器人模式:保持第二個閘道隔離,使用自己的設定檔、狀態目錄、工作區和基礎埠間距。完整指南:救援機器人指南。
開發設定檔(--dev)
快速路徑:執行完全隔離的開發實例(配置/狀態/工作區)而不觸及你的主要設定。
moltbot --dev setup
moltbot --dev gateway --allow-unconfigured
# 然後以開發實例為目標:
moltbot --dev status
moltbot --dev health預設值(可透過 env/flags/config 覆寫):
CLAWDBOT_STATE_DIR=~/.clawdbot-devCLAWDBOT_CONFIG_PATH=~/.clawdbot-dev/moltbot.jsonCLAWDBOT_GATEWAY_PORT=19001(閘道 WS + HTTP)- 瀏覽器控制服務埠 =
19003(衍生:gateway.port+2,僅 loopback) canvasHost.port=19005(衍生:gateway.port+4)- 當你在
--dev下執行setup/onboard時,agents.defaults.workspace預設變為~/clawd-dev。
衍生埠(經驗法則):
- 基礎埠 =
gateway.port(或CLAWDBOT_GATEWAY_PORT/--port) - 瀏覽器控制服務埠 = 基礎 + 2(僅 loopback)
canvasHost.port = 基礎 + 4(或CLAWDBOT_CANVAS_HOST_PORT/ 配置覆寫)- 瀏覽器設定檔 CDP 埠從
browser.controlPort + 9 .. + 108自動分配(每個設定檔持久化)。
每個實例的檢查清單:
- 唯一的
gateway.port - 唯一的
CLAWDBOT_CONFIG_PATH - 唯一的
CLAWDBOT_STATE_DIR - 唯一的
agents.defaults.workspace - 獨立的 WhatsApp 號碼(如果使用 WA)
每個設定檔的服務安裝:
moltbot --profile main gateway install
moltbot --profile rescue gateway install範例:
CLAWDBOT_CONFIG_PATH=~/.clawdbot/a.json CLAWDBOT_STATE_DIR=~/.clawdbot-a moltbot gateway --port 19001
CLAWDBOT_CONFIG_PATH=~/.clawdbot/b.json CLAWDBOT_STATE_DIR=~/.clawdbot-b moltbot gateway --port 19002協定(操作者視圖)
- 完整文件:閘道協定 與 橋接協定(舊版)。
- 客戶端的必要首幀:
req {type:"req", id, method:"connect", params:{minProtocol,maxProtocol,client:{id,displayName?,version,platform,deviceFamily?,modelIdentifier?,mode,instanceId?}, caps, auth?, locale?, userAgent? } }。 - 閘道回覆
res {type:"res", id, ok:true, payload:hello-ok }(或帶有錯誤的ok:false,然後關閉)。 - 握手後:
- 請求:
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - 事件:
{type:"event", event, payload, seq?, stateVersion?}
- 請求:
- 結構化存在條目:
{host, ip, version, platform?, deviceFamily?, modelIdentifier?, mode, lastInputSeconds?, ts, reason?, tags?[], instanceId? }(對於 WS 客戶端,instanceId來自connect.client.instanceId)。 agent回應是兩階段的:首先res確認{runId,status:"accepted"},然後在執行完成後最終res{runId,status:"ok"|"error",summary};串流輸出作為event:"agent"到達。
方法(初始集)
health— 完整健康快照(與moltbot health --json相同的形狀)。status— 簡短摘要。system-presence— 當前存在清單。system-event— 發布存在/系統注意事項(結構化)。send— 透過活動頻道發送訊息。agent— 執行代理回合(在相同連線上串流事件回來)。node.list— 列出配對 + 當前連接的節點(包括caps、deviceFamily、modelIdentifier、paired、connected和通告的commands)。node.describe— 描述節點(功能 + 支援的node.invoke指令;適用於配對節點和當前連接的未配對節點)。node.invoke— 在節點上呼叫指令(例如canvas.*、camera.*)。node.pair.*— 配對生命週期(request、list、approve、reject、verify)。
另見:存在 了解如何產生/去重存在以及為什麼穩定的 client.instanceId 很重要。
事件
agent— 來自代理執行的串流工具/輸出事件(seq 標記)。presence— 存在更新(帶有 stateVersion 的差異)推送到所有連接的客戶端。tick— 定期保持連線/無操作以確認存活。shutdown— 閘道正在退出;有效負載包括reason和可選的restartExpectedMs。客戶端應重新連接。
WebChat 整合
- WebChat 是一個原生 SwiftUI UI,直接與閘道 WebSocket 通訊以獲取歷史、發送、中止和事件。
- 遠端使用透過相同的 SSH/Tailscale 通道;如果配置了閘道權杖,客戶端在
connect期間包含它。 - macOS 應用程式透過單一 WS(共享連線)連接;它從初始快照補充存在並監聽
presence事件以更新 UI。
類型與驗證
- 伺服器使用 AJV 針對從協定定義發出的 JSON Schema 驗證每個入站幀。
- 客戶端(TS/Swift)使用產生的類型(TS 直接;Swift 透過儲存庫的產生器)。
- 協定定義是真相來源;使用以下方式重新產生 schema/模型:
pnpm protocol:genpnpm protocol:gen:swift
連線快照
hello-ok包括帶有presence、health、stateVersion和uptimeMs的snapshot,加上policy {maxPayload,maxBufferedBytes,tickIntervalMs},以便客戶端可以立即渲染而無需額外請求。health/system-presence仍可用於手動重新整理,但在連線時不需要。
錯誤碼(res.error 形狀)
- 錯誤使用
{ code, message, details?, retryable?, retryAfterMs? }。 - 標準碼:
NOT_LINKED— WhatsApp 未驗證。AGENT_TIMEOUT— 代理未在配置的截止時間內回應。INVALID_REQUEST— schema/參數驗證失敗。UNAVAILABLE— 閘道正在關閉或相依性不可用。
保持連線行為
- 定期發出
tick事件(或 WS ping/pong),以便客戶端知道即使沒有流量時閘道也是存活的。 - 發送/代理確認保持獨立的回應;不要為發送重載 tick。
重播 / 間隙
- 事件不會重播。客戶端檢測 seq 間隙並應在繼續之前重新整理(
health+system-presence)。WebChat 和 macOS 客戶端現在在間隙時自動重新整理。
監督(macOS 範例)
- 使用 launchd 保持服務存活:
- Program:
moltbot的路徑 - Arguments:
gateway - KeepAlive:true
- StandardOut/Err:檔案路徑或
syslog
- Program:
- 失敗時,launchd 重新啟動;致命錯誤配置應繼續退出,以便操作者注意到。
- LaunchAgents 是每個使用者的,需要已登入的會話;對於無頭設定,使用自訂 LaunchDaemon(未附帶)。
moltbot gateway install寫入~/Library/LaunchAgents/bot.molt.gateway.plist(或bot.molt.<profile>.plist;舊版com.clawdbot.*會清理)。moltbot doctor審核 LaunchAgent 配置並可以將其更新為當前預設值。
閘道服務管理(CLI)
使用閘道 CLI 進行 install/start/stop/restart/status:
moltbot gateway status
moltbot gateway install
moltbot gateway stop
moltbot gateway restart
moltbot logs --follow注意事項:
gateway status預設使用服務的解析埠/配置探測閘道 RPC(使用--url覆寫)。gateway status --deep新增系統級掃描(LaunchDaemons/system units)。gateway status --no-probe跳過 RPC 探測(當網路不可用時有用)。gateway status --json對腳本穩定。gateway status分別報告監督程式執行時期(launchd/systemd 執行)與 RPC 可達性(WS 連接 + 狀態 RPC)。gateway status列印配置路徑 + 探測目標以避免「localhost vs LAN 綁定」混淆和設定檔不匹配。- 當服務看起來正在執行但埠已關閉時,
gateway status包括最後的閘道錯誤行。 logs透過 RPC 尾隨閘道檔案日誌(無需手動tail/grep)。- 如果檢測到其他類似閘道的服務,CLI 會警告,除非它們是 Moltbot 設定檔服務。 我們仍建議大多數設定每台機器一個閘道;使用隔離的設定檔/埠進行冗餘或救援機器人。參見多個閘道。
- 清理:
moltbot gateway uninstall(當前服務)和moltbot doctor(舊版遷移)。
- 清理:
- 當已安裝時,
gateway install是無操作;使用moltbot gateway install --force重新安裝(設定檔/env/路徑變更)。
捆綁的 mac 應用程式:
- Moltbot.app 可以捆綁基於 Node 的閘道中繼並安裝標記為
bot.molt.gateway(或bot.molt.<profile>;舊版com.clawdbot.*標籤仍可乾淨卸載)的每個使用者 LaunchAgent。 - 要乾淨地停止它,使用
moltbot gateway stop(或launchctl bootout gui/$UID/bot.molt.gateway)。 - 要重啟,使用
moltbot gateway restart(或launchctl kickstart -k gui/$UID/bot.molt.gateway)。launchctl僅在安裝 LaunchAgent 時有效;否則先使用moltbot gateway install。- 執行命名設定檔時,將標籤替換為
bot.molt.<profile>。
監督(systemd 使用者單元)
Moltbot 預設在 Linux/WSL2 上安裝 systemd 使用者服務。我們建議對單使用者機器使用使用者服務(更簡單的 env,每個使用者的配置)。 對多使用者或永遠線上伺服器使用系統服務(不需要 lingering,共享監督)。
moltbot gateway install 寫入使用者單元。moltbot doctor 審核單元並可以將其更新為符合當前建議的預設值。
建立 ~/.config/systemd/user/moltbot-gateway[-<profile>].service:
[Unit]
Description=Moltbot Gateway (profile: <profile>, v<version>)
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/moltbot gateway --port 18789
Restart=always
RestartSec=5
Environment=CLAWDBOT_GATEWAY_TOKEN=
WorkingDirectory=/home/youruser
[Install]
WantedBy=default.target啟用 lingering(必需,以便使用者服務在登出/閒置後存活):
sudo loginctl enable-linger youruser引導在 Linux/WSL2 上執行此操作(可能提示 sudo;寫入 /var/lib/systemd/linger)。 然後啟用服務:
systemctl --user enable --now moltbot-gateway[-<profile>].service替代方案(系統服務) - 對於永遠線上或多使用者伺服器,你可以安裝 systemd 系統單元而不是使用者單元(不需要 lingering)。 建立 /etc/systemd/system/moltbot-gateway[-<profile>].service(複製上面的單元,切換 WantedBy=multi-user.target,設定 User= + WorkingDirectory=),然後:
sudo systemctl daemon-reload
sudo systemctl enable --now moltbot-gateway[-<profile>].serviceWindows(WSL2)
Windows 安裝應使用 WSL2 並遵循上面的 Linux systemd 部分。
操作檢查
- 存活性:開啟 WS 並發送
req:connect→ 預期帶有payload.type="hello-ok"(帶有快照)的res。 - 就緒性:呼叫
health→ 預期ok: true和linkChannel中的連結頻道(如適用)。 - 除錯:訂閱
tick和presence事件;確保status顯示連結/驗證年齡;存在條目顯示閘道主機和連接的客戶端。
安全保證
- 預設假設每個主機一個閘道;如果你執行多個設定檔,隔離埠/狀態並以正確的實例為目標。
- 沒有後備到直接 Baileys 連線;如果閘道關閉,發送快速失敗。
- 非連接首幀或格式錯誤的 JSON 會被拒絕,socket 會關閉。
- 優雅關機:在關閉前發出
shutdown事件;客戶端必須處理關閉 + 重新連接。
CLI 輔助工具
moltbot gateway health|status— 透過閘道 WS 請求健康/狀態。moltbot message send --target <num> --message "hi" [--media ...]— 透過閘道發送(WhatsApp 的冪等)。moltbot agent --message "hi" --to <num>— 執行代理回合(預設等待最終)。moltbot gateway call <method> --params '{"k":"v"}'— 用於除錯的原始方法呼叫器。moltbot gateway stop|restart— 停止/重啟受監督的閘道服務(launchd/systemd)。- 閘道輔助子指令假設在
--url上執行閘道;它們不再自動產生一個。
遷移指南
- 停用
moltbot gateway和舊版 TCP 控制埠的使用。 - 更新客戶端以使用必要的連接和結構化存在來說 WS 協定。