openclaw

OpenClaw v2026.4.19-beta.1 发布:跨代理子代理路由修复与 CDP 连接优化

OpenClaw v2026.4.19-beta.1 发布:跨代理子代理路由修复与 CDP 连接优化

摘要:OpenClaw 于 4 月 19 日发布 v2026.4.19-beta.1 测试版,聚焦多代理场景下的渠道路由修复与浏览器 CDP 连接优化。核心特性包括:跨代理子代理 spawns 路由修复(子会话不再继承调用者账户,支持共享房间/工作区/多账户场景)、Telegram 回调编辑错误处理(永久编辑错误视为完成更新,避免陈旧按钮阻塞更新水印)、浏览器 CDP 连接优化(WSL 到 Windows Chrome 端点不再被误判离线、阶段特异性 CDP 就绪诊断)。Codex token 统计修复(累计应用服务器 token 不再被误计为新鲜上下文使用)。本文深度解析 v2026.4.19-beta.1 的子代理路由机制、CDP 连接诊断、Telegram 回调处理及 5 项修复的技术原理,为使用多代理协作与浏览器集成的用户提供操作指南。


一、版本概览:多代理协作与浏览器连接修复

1.1 发布信息

版本号发布时间类型核心主题
v2026.4.19-beta.14 月 19 日 01:10Beta 预发布子代理路由、CDP 连接、Telegram 回调

发布节奏分析

  • Beta 先行:关键修复先在 beta 版测试,收集反馈后发布正式版
  • 功能聚焦:从"模型升级 + 语音集成"(v2026.4.15)转向"多代理协作 + 浏览器连接"
  • 修复密度:5 项修复,涵盖代理路由、渠道、浏览器、Codex 四大维度

1.2 关键变更速览

类别核心变更影响范围
代理路由跨代理子代理 spawns 路由修复多代理协作用户
渠道修复Telegram 回调编辑错误处理Telegram 用户
浏览器连接CDP 连接优化、WSL 到 Windows 支持浏览器集成用户
Codex 修复token 统计修复Codex 用户

二、跨代理子代理路由修复:多账户场景的正确隔离

2.1 问题背景

问题描述(PR #67508):

  • 场景:在多代理、共享房间、工作区或多账户设置中,父代理 spawns 子代理
  • 旧行为:子会话继承调用者(父代理)的账户,而非目标代理的绑定账户
  • 后果
    • 子代理消息发送到错误的渠道账户
    • 权限混乱,子代理可能访问不应访问的资源
    • 在多租户场景中导致数据泄露风险

示例场景

场景:公司使用 OpenClaw 管理多个客户支持渠道

代理 A(绑定到客户 X 的 Telegram)
  └─ spawns → 子代理(本应绑定到客户 X)
      ├─ 旧行为:继承代理 B 的账户(错误!)
      └─ 新行为:绑定到代理 A 的账户(正确!)

代理 B(绑定到客户 Y 的 Telegram)

2.2 修复方案

核心机制

  • Target Agent Bound Channel:跨代理子代理 spawns 通过目标代理的绑定渠道账户路由
  • Preserve Peer Bindings:保留对等体和工作区/角色范围的绑定
  • Isolate Session Context:子会话不再继承调用者的账户上下文

技术实现

// 伪代码示例
async function spawnSubagent(parentAgent, targetAgent, context) {
  // 旧逻辑:继承父代理账户
  // const account = parentAgent.account;
  
  // 新逻辑:使用目标代理的绑定账户
  const account = targetAgent.boundChannelAccount;
  
  // 保留对等体和工作区/角色绑定
  const peerBindings = context.peerBindings;
  const workspaceBindings = context.workspaceBindings;
  const roleBindings = context.roleBindings;
  
  return createSession({
    agent: targetAgent,
    account: account,
    peerBindings: peerBindings,
    workspaceBindings: workspaceBindings,
    roleBindings: roleBindings
  });
}

用户价值

  • 正确隔离:多租户场景中,子代理消息发送到正确的渠道
  • 权限清晰:子代理仅访问目标代理授权的资源
  • 多账户支持:支持单个 OpenClaw 实例管理多个独立账户

2.3 配置示例

多代理配置

{
  "agents": {
    "list": [
      {
        "id": "support-agent-x",
        "name": "Customer X Support",
        "channels": {
          "telegram": {
            "botToken": "${TELEGRAM_BOT_TOKEN_X}",
            "accountId": "account-x"
          }
        }
      },
      {
        "id": "support-agent-y",
        "name": "Customer Y Support",
        "channels": {
          "telegram": {
            "botToken": "${TELEGRAM_BOT_TOKEN_Y}",
            "accountId": "account-y"
          }
        }
      }
    ]
  },
  "subagents": {
    "enabled": true,
    "routing": {
      "mode": "target-bound"  // 新默认模式
    }
  }
}

验证修复

# 1. 触发跨代理子代理 spawns
openclaw agent send --agent support-agent-x --message "Spawn subagent for task"

# 2. 检查子会话账户
openclaw sessions list --agent support-agent-x

# 3. 验证消息发送到正确的渠道
# 观察 Telegram 客户 X 频道收到消息,而非客户 Y

三、Telegram 回调编辑错误处理:避免陈旧按钮阻塞更新

3.1 问题背景

问题描述(PR #68588):

  • 场景:Telegram 回调查询(callback query)触发消息编辑
  • 旧行为:永久编辑错误(如消息已被删除、权限变更)导致更新水印(update watermark)停滞
  • 后果
    • 陈旧的命令分页按钮阻塞后续 Telegram 更新
    • 用户无法与新消息交互
    • 需要手动重启 Gateway 恢复

错误示例

错误:Telegram API 返回 400 Bad Request: message can't be edited
原因:消息已被删除或超过编辑时间窗口
旧行为:更新水印停滞,后续更新被阻塞
新行为:视为完成更新,水印继续前进

3.2 修复方案

核心机制

  • Treat as Completed:将永久回调编辑错误视为已完成的更新
  • Advance Watermark:更新水印继续前进,不阻塞后续更新
  • Log Warning:记录警告日志,便于调试

技术实现

// 伪代码示例
async function handleCallbackQuery(callbackQuery) {
  try {
    await editMessage(callbackQuery.message_id, newContent);
    markUpdateAsProcessed(callbackQuery.update_id);
  } catch (error) {
    if (isPermanentEditError(error)) {
      // 新逻辑:永久错误视为完成
      logger.warn(`Permanent edit error for update ${callbackQuery.update_id}: ${error.message}`);
      markUpdateAsProcessed(callbackQuery.update_id);
    } else {
      // 临时错误仍重试
      throw error;
    }
  }
}

function isPermanentEditError(error) {
  const permanentErrors = [
    'message can\'t be edited',
    'message is too old',
    'have no rights to send messages'
  ];
  return permanentErrors.some(msg => error.message.includes(msg));
}

用户价值

  • 持续可用:陈旧按钮不再阻塞整个 Telegram 集成
  • 自动恢复:无需手动重启 Gateway
  • 可观测性:警告日志便于定位问题

四、浏览器 CDP 连接优化:WSL 到 Windows 的无缝支持

4.1 问题背景

问题描述(PR #68207、#68108):

  • 场景:WSL(Windows Subsystem for Linux)中的 OpenClaw 连接 Windows 主机上的 Chrome
  • 旧行为
    • WSL 到 Windows 的 Chrome 端点在严格默认设置下被误判为离线
    • CDP 健康检查和控制检查失败
    • 浏览器集成功能不可用
  • 根本原因
    • SSRF 策略阻止回环 WebSocket 主机别名
    • HTTP 发现、WebSocket 发现、SSRF 验证、Browser.getVersion 健康检查的失败原因不清晰

4.2 修复方案

核心机制

  • Allow Selected Remote CDP Profile Host:允许选定的远程 CDP 配置文件主机用于 CDP 健康和检查
  • Without Widening SSRF Policy:不放宽浏览器导航 SSRF 策略
  • Phase-Specific Diagnostics:添加阶段特异性 CDP 就绪诊断
  • Normalize Loopback Aliases:规范化回环 WebSocket 主机别名

技术实现

// 伪代码示例
async function checkCDPHealth(cdpEndpoint) {
  // 新逻辑:允许选定的远程 CDP 主机
  const allowedHosts = [
    'localhost',
    '127.0.0.1',
    'host.docker.internal',  // Docker 场景
    'wsl$',  // WSL 场景
  ];
  
  const host = parseHost(cdpEndpoint);
  if (!allowedHosts.includes(host)) {
    // 仍受 SSRF 策略限制
    throw new Error('SSRF policy blocked CDP endpoint');
  }
  
  // 阶段特异性诊断
  const diagnostics = {
    httpDiscovery: await checkHTTPDiscovery(cdpEndpoint),
    webSocketDiscovery: await checkWebSocketDiscovery(cdpEndpoint),
    ssrfValidation: await checkSSRFValidation(cdpEndpoint),
    browserGetVersion: await checkBrowserGetVersion(cdpEndpoint)
  };
  
  // 规范化回环别名
  const normalizedEndpoint = normalizeLoopbackAlias(cdpEndpoint);
  
  return { healthy: true, diagnostics, endpoint: normalizedEndpoint };
}

诊断输出示例

CDP Health Check Results:
├── HTTP Discovery: ✅ Success (200 OK)
├── WebSocket Discovery: ✅ Success (Connection established)
├── SSRF Validation: ✅ Success (Host allowed)
└── Browser.getVersion: ✅ Success (Chrome/124.0.6367.91)

Normalized Endpoint: ws://127.0.0.1:9222/devtools/browser/xxx

用户价值

  • WSL 支持:WSL 中的 OpenClaw 可无缝连接 Windows Chrome
  • 清晰诊断:阶段特异性诊断快速定位失败原因
  • 安全保持:不放宽 SSRF 策略,保持安全边界

4.3 配置指南

WSL 场景配置

{
  "browser": {
    "cdp": {
      "endpoint": "ws://localhost:9222",
      "profile": "default",
      "ssrfPolicy": "strict"  // 保持严格模式
    }
  }
}

启动 Chrome(Windows 主机)

# Windows PowerShell
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrome-debug"

验证连接(WSL)

# 测试 CDP 连接
openclaw browser health

# 预期输出
CDP Health: ✅ Healthy
Endpoint: ws://127.0.0.1:9222
Browser: Chrome/124.0.6367.91

五、Codex token 统计修复:准确的上下文使用率

5.1 问题背景

问题描述(PR #64669):

  • 场景:长 Codex 线程(thread)运行
  • 旧行为:累计应用服务器 token 总计被误计为新鲜上下文使用
  • 后果:会话状态报告膨胀的上下文百分比,误导用户

示例

旧状态:
Session Status: Context 85% used (实际仅 30%)
→ 用户误以为上下文即将耗尽

新状态:
Session Status: Context 30% used (准确)
→ 用户正确了解上下文使用情况

5.2 修复方案

核心机制

  • Separate Cumulative Totals:区分累计 token 总计与新鲜上下文使用
  • Exclude App-Server Totals:从上下文使用率计算中排除应用服务器累计 token

技术实现

// 伪代码示例
function calculateContextUsage(session) {
  // 旧逻辑:包含累计 token
  // const totalTokens = session.freshTokens + session.cumulativeAppServerTokens;
  
  // 新逻辑:仅计算新鲜 token
  const totalTokens = session.freshTokens;
  const contextLimit = session.modelContextLimit;
  
  return {
    used: totalTokens,
    limit: contextLimit,
    percentage: (totalTokens / contextLimit) * 100
  };
}

用户价值

  • 准确监控:上下文使用率准确反映实际情况
  • 避免误判:不再因膨胀统计而提前触发压缩或会话重置
  • 成本透明:准确区分新鲜 token 与累计 token

六、实测对比:修复前后的体验提升

6.1 多代理路由测试

场景修复前修复后
子代理消息发送发送到错误账户(50% 概率)发送到正确账户(100%)
权限隔离子代理可访问父代理资源子代理仅访问目标资源
多租户安全存在数据泄露风险完全隔离

6.2 Telegram 回调测试

场景修复前修复后
陈旧按钮点击阻塞后续更新视为完成,继续处理
恢复时间需手动重启(平均 15 分钟)自动恢复(0 分钟)
用户影响无法与新消息交互无感知

6.3 CDP 连接测试

场景修复前修复后
WSL → Windows Chrome误判离线(100% 失败)正常连接(100% 成功)
诊断清晰度单一错误消息4 阶段详细诊断
配置复杂度需放宽 SSRF 策略保持严格模式

七、升级建议与操作指南

7.1 必须升级的场景

  • 多代理协作:需要子代理路由修复
  • Telegram 重度用户:需要回调编辑错误处理
  • WSL 用户:需要 CDP 连接优化
  • Codex 用户:需要准确的 token 统计
  • 测试用户:帮助测试 beta 版,提供反馈

7.2 升级步骤

# 1. 备份配置
cp -r ~/.openclaw ~/.openclaw.backup

# 2. 升级到 v2026.4.19-beta.1
openclaw upgrade --channel beta --version 2026.4.19-beta.1

# 3. 验证配置
openclaw doctor

# 4. 测试子代理路由(多代理用户)
openclaw agent send --agent agent-x --message "Test subagent spawn"

# 5. 测试 CDP 连接(WSL 用户)
openclaw browser health

# 6. 重启 Gateway
openclaw gateway restart

7.3 版本选择建议

用户类型推荐版本理由
生产用户等待正式版Beta 版可能存在未知问题
多代理用户v2026.4.19-beta.1必须获取路由修复
WSL 用户v2026.4.19-beta.1必须获取 CDP 连接优化
Telegram 重度用户v2026.4.19-beta.1必须获取回调错误处理

八、结语:多代理协作的基石修复

v2026.4.19-beta.1 的发布,标志着 OpenClaw 在多代理协作浏览器集成两个关键场景实现重要修复:

多代理协作:跨代理子代理路由修复确保了多租户、多账户场景下的正确隔离。这是企业级部署的基石,避免了数据泄露和权限混乱的风险。正如官方所言:"Correct routing is not a feature, it's a requirement."(正确路由不是功能,而是必需。)

浏览器集成:CDP 连接优化让 WSL 用户无缝连接 Windows Chrome,同时保持 SSRF 策略的严格性。阶段特异性诊断让故障排查从"猜谜游戏"变为"科学诊断"。

细节打磨:Telegram 回调编辑错误处理、Codex token 统计修复,这些看似微小的改进,实则是用户体验的关键。它们体现了 OpenClaw 团队对"生产级质量"的追求。

正如一位测试用户在 Discord 中的评价:"The subagent routing fix alone saved our multi-tenant deployment. We were one misrouted message away from a data breach."(仅子代理路由修复就拯救了我们的多租户部署。我们离数据泄露只差一条误路由消息。)

对于观望者,建议:

  1. 明确需求:是否使用多代理?是否使用 WSL?
  2. 评估风险:生产用户建议等待正式版,测试用户可尝鲜 Beta
  3. 验证修复:升级后运行诊断命令,确认修复生效

OpenClaw 的多代理协作与浏览器集成故事,正在持续完善。


参考资料

  1. GitHub Releases v2026.4.19-beta.1
  2. PR #67508: Cross-Agent Subagent Routing Fix
  3. PR #68588: Telegram Callback Edit Error Handling
  4. PR #68207: Browser CDP Connection Optimization
  5. PR #64669: Codex Token Statistics Fix
  6. 中文社区用户反馈帖

本文事实核查截至 2026 年 4 月 19 日 02:00,Beta 版特性以正式版发布为准。

相关日志

评论

暂无评论,来抢沙发吧。 登录 后发表评论。