安装软件包
这些软件包随 OpenClaw 发布版本一起提供。在首次发布阶段,直到首个包含软件包的 OpenClaw 版本发布之前,npm
可能会返回
E404;只有在下方的 registry 页面可以正常访问后,才安装这些软件包。@openclaw/gateway-protocol提供架构、运行时验证器、TypeScript 类型、客户端身份与能力注册表、结构化错误读取器以及协议版本常量。 其 npm 压缩包还包含生成的protocol.schema.json机器可读协议契约。@openclaw/gateway-client是参考连接实现。对于 Node 客户端,请导入包根路径;对于浏览器安全的协议、设备认证和重新连接辅助工具,请导入@openclaw/gateway-client/browser。
选择作用域并配对设备
完整的交互式聊天客户端如果还要呈现审批提示,应请求role: "operator" 以及以下作用域:
仅当客户端处理交互式问题时才添加
operator.questions,
仅当客户端管理已配对的设备或节点时才添加 operator.pairing,仅针对
config.patch 等管理操作添加 operator.admin。
operator 作用域参考
定义了完整的方法和审批时规则。
不要通过手动编辑 openclaw.json 来创建每个客户端的 bearer token。使用
openclaw configure --section gateway 或 openclaw onboard --gateway-auth ... 选项配置
Gateway 的共享引导身份验证,然后让设备配对生成客户端 token:
- 在客户端中持久化一个 Ed25519 设备身份。
- 等待
connect.challenge,使用其ts作为设备证明的signedAt,对绑定挑战的设备载荷进行签名,并发送connect,其中包含请求的 operator 角色、作用域,以及用于引导身份验证的共享 Gateway token 或密码。收到的 WebSocket 挑战如果没有非负整数ts,则无效。明确支持早于connect.challenge的 Gateway 的客户端,只能在其无挑战路径上使用本地时间。 - 如果 Gateway 返回结构化的
PAIRING_REQUIRED详细信息,则显示请求 ID,并根据error.details.recommendedNextStep暂停或重试。 - 在 Gateway 主机上,使用
openclaw devices list查看请求,然后使用openclaw devices approve <requestId>批准该确切的当前请求。 - 重新连接,并将
hello-ok.auth.deviceToken与协商出的角色和 作用域一同持久化。后续连接使用该设备 token。
广告客户端能力
connect.params.caps 描述客户端能够使用的可选行为。
它不会授予授权。请从 GATEWAY_CLIENT_CAPS 导入名称,而不是重复使用字符串字面量:
approvals、exec-approvals、inline-widgets、
run-tool-bindings、session-scoped-events、plugin-approvals、
task-suggestions、terminal-offset-seq、tool-events 和 ui-commands。
仅声明客户端实际实现的能力。
能力控制的代理工具是同一声明的另一种用途。如果某个代理工具需要客户端能力,除非发起请求的客户端声明了所有必需的能力,否则网关会省略该工具。
发送前验证附件
附件限制可由运营方调整,因此不要将其硬编码。读取hello-ok.policy.attachments,并在上传前进行本地验证:
policy.maxPayload:附件会以 base64 形式传输,因此接近
maxBytes 的文件可能单独就超过帧大小限制。较旧的网关会省略
policy.attachments;如果该字段不存在,则发送请求并处理服务器返回的结果。
由于接受的 MIME 类型和每条消息的处理方式取决于入口点及最终解析出的模型,
因此不会对外公布。网关可以返回带类型的拒绝结果,而仅支持文本的模型运行在
达到其额外卸载上限后,可能会省略附加图片,但仍能完成请求。这些值是连接建立时的
快照,因此每次重新连接时都要重新读取。
重连后恢复状态
将每次成功重连视为基于持久化历史和当前内存运行状态的新投影:- 重新建立
sessions.subscribe以及所选会话的sessions.messages.subscribe订阅。 - 针对所选的
sessionKey调用chat.history,并使用返回的messages投影替换本地持久化行。 - 如果存在
inFlightRun,则采用其runId、缓冲的text和可选的plan。即使text为空,也要采用该运行。 - 读取
sessionInfo.hasActiveRun和sessionInfo.activeRunIds。在判断保留的运行是否仍拥有流式 UI 时,优先依据activeRunIds中的精确成员关系。如果hasActiveRun为 true 但没有列出的 ID,可能表示另一个活动运行时投影。 - 根据
payload.runId和payload.seq对后续的agent事件进行协调。 为每个运行独立维护已接受的最高序列号,忽略已经见过的序列号或更低的序列号,并将向前跳跃的间隙视为重新加载权威历史的理由。
seq,用于对当前 WebSocket 连接上的事件排序。建立新连接时,该序列号会重置。agent 事件负载中的 seq 按运行分配,用于对该运行的生命周期、助手、计划、工具及其他流事件进行排序。
渲染生成的图像工件
助手生成的图像以规范的type: "image" 内容块形式到达。
受管理的内容块包含稳定的 artifactId、相对于 Gateway 的 url、MIME
类型、尺寸、大小以及可访问的替代文本。请将该引用保留在会话记录缓存中;不要持久化下载的字节数据或临时下载 URL。
通过经过身份验证的 WebSocket 连接解析图像:
- 使用当前的
sessionKey、可选的agentId以及内容块的artifactId调用artifacts.download。 - 在
expiresAt之前使用返回的短时有效url。该 URL 仅限于对应的会话记录工件,不包含可重复使用的 Gateway 或设备凭据。 - 使用与当前连接相同的 TLS 固定和反向代理标头,从 Gateway 源获取该 URL。将响应验证为图像,并限制源文件大小不超过 12 MiB,同时限制解码后的缩略图大小。
- 如果 URL 过期,再次调用一次
artifacts.download。重新连接或路由变更会取消旧的加载操作,而不是将其重新指向另一个 Gateway。
artifactId 的旧版图像块仍可由现有 Control UI 客户端显示,但原生客户端应显示易于阅读的附件回退内容,而不是转发共享的所有者凭据。
使用历史元数据和稳定锚点
chat.history 返回的行可能带有 __openclaw 元数据封装:
id是转录条目的标识。将其用于带锚点的历史记录请求, 但不要将其作为唯一的显示行键。seq是正数转录记录序列号。一条存储记录可能会映射为多个显示行, 因此应将具有相同id和序列号的同级行放在一起。kind用于标识合成行。压缩边界使用kind: "compaction",并且当匹配的检查点记录了这些指标时,可能会包含tokensBefore和tokensAfter。
kind: "reset"。它没有检查点令牌指标。
根据响应中的 hasMore 和 nextOffset 值向前翻页。数字偏移量描述的是当前转录投影,因此不要将其作为跨重置或压缩长期持久化的书签。请改为持久化 __openclaw.id。
要在已知行附近恢复,请使用返回该行的 sessionId,并将 messageId 传递给 chat.history。Gateway 可以从重置归档历史记录中解析该锚点;带锚点的响应会有意省略数字分页元数据。
订阅而不是轮询用量
使用sessions.list 加载初始目录,然后为每个连接调用一次
sessions.subscribe。按 sessionKey 合并 sessions.changed 事件。会话变更
负载可能包含实时的 inputTokens、outputTokens、totalTokens、
totalTokensFresh、contextTokens、estimatedCostUsd、响应用量设置
以及活动运行状态。
某些变更通知仅是失效信号。如果事件中缺少视图所需的行字段,请刷新
sessions.list。不要轮询 usage.cost 或 sessions.usage 来保持实时会话列表
更新;将这些方法保留用于按需的聚合报告或详细报告。
回填执行审批
具有operator.approvals 的客户端应在 hello-ok 完成后立即安装其事件监听器,然后调用 exec.approval.list,以回填连接建立之前产生的请求。根据审批 ID 对列表以及实时的
exec.approval.requested / exec.approval.resolved 事件进行协调,以确保在列表请求期间发生的状态转换既不会丢失,也不会被重新恢复。
跟踪协议版本
当前线协议版本为4。通用操作员和 WebChat 客户端必须通过
minProtocol: 4 和 maxProtocol: 4 协商当前的确切版本。
只有经过身份验证的节点客户端和轻量级探针具有 N-1 接受窗口,目前为协议
3 至 4。
协议变更首先采用增量方式。protocol.schema.json 包含 since
发布版本元数据以及核心方法所需的作用域元数据,但线协议版本的提升对于第三方客户端而言仍然是明确的破坏性事件。固定你所测试的软件包版本,在协议版本发生变化时同时升级客户端和 Gateway,并在每次升级前查阅
OpenClaw 更新日志。