托管浏览器由现有 Runner 按需启动专用 Chromium 进程,通过原来的节点鉴权、任务租约和结果通道工作。网页任务可以直接使用浏览器;需要 Linux 程序、终端或完整桌面时,继续使用现有 VM。Hermes 仍负责模型、会话和技能。
这是独立浏览器进程,不是新增 Linux 虚拟机或 Docker 浏览器服务。Web 与 macOS 电脑面板提供查看和人工接管,窄屏 Web 可用;本次没有新增 iOS/Android 原生浏览器界面,也没有替换现有 UI 技术栈。
全局 Bot 工具开关默认关闭。节点启动时自动检查配套浏览器;检查可能短暂启动无用户资料的沙箱进程,不会自动下载或打开网页,也不改变已有虚拟机、云电脑或本机电脑设置。
更新并启动节点的夭夭或 Runner。旧配置缺少 browser 字段、或使用空对象时默认启用检测,不需要重新导入配置。明确设置 enabled:false 的节点继续保持关闭;需要自定义限制时可使用:
{
"browser": {
"enabled": true,
"maxSessions": 3,
"idleTimeoutMs": 1800000
}
}
保留现有配置其他字段,再让 Runner 加载更新后的配置。Mac App 内置节点会在配套服务更新重启后使用原加密配置;仅更新另一台客户端,不能更新服务器上的旧进程。computers 与 browser 可分别配置,单独启用浏览器不要求 VM Worker。maxSessions 范围 1–8,默认 3;空闲回收范围 60 秒–2 小时,默认 30 分钟。显式配置的空闲时间继续生效。
浏览器二进制按需下载,不随应用包分发。开启浏览器的节点即使尚未安装 Chromium,也会声明“可准备”能力;界面区分未安装、检查中、安装中、就绪和失败,并分别说明节点未连接、版本过旧或管理员明确关闭。可点击“重新检测”刷新节点状态;此操作只检查,不下载安装。安装使用应用锁定版本的 Playwright CLI,不调用另一版本的全局命令。一次节点安装由多个已授权使用者共享;断线、关闭节点或所有安装授权失效会取消安装,不会取消其他仍有授权的使用者。
安装完成前必须通过真实的 Chromium 沙箱启动检查。Linux 缺少系统依赖时,仅在节点已经以 root 运行的情况下调用配套 install-deps chromium;普通账号会得到明确依赖提示,需要管理员先补齐系统依赖。安装过程不自动提权,不添加 --no-sandbox。生产 Runner 应以支持沙箱的非 root 账号运行。失败保留原因,由“重试并接管浏览器”明确发起下一次安装;不会无限重复下载安装。
离线预装仍可使用同一分发包内的 CLI:
# 源码部署
node node_modules/playwright/cli.js install chromium
# 独立 Runner:先复制完整 .runner-build 目录
node .runner-build/node_modules/playwright/cli.js install chromium
managed-browser/profiles/,即使上下文关闭也继续保留。临时助手使用临时资料,任务结束仍关闭上下文并删除临时资料。工具使用独立的 managed_browser_* 前缀:打开、状态、DOM 快照、页面操作、附件上传、下载导出。页面操作支持导航、标签页、点击、填写、键盘、滚动和截图。普通网页先使用 DOM 快照与元素引用,确有视觉需求时再截图。
下载先取得 downloadId,通过 managed_browser_export 作为现有对话附件交付。上传使用当前账号有权访问的附件 fileId,模型不传宿主文件路径。单文件上限 25 MiB。
同一轮已授权 VM 时,额外提供 managed_browser_to_vm 与 managed_browser_upload_vm。复制使用现有 VM 分块文件协议、摘要校验和路径边界;默认不覆盖文件,也不挂载宿主目录。跨环境文件还受全局文件传输大小设置约束。
网页网络请求走经鉴权的公网代理,拒绝回环、私网与重新解析到私网的目的地址;既有连接也定期检查授权。当前禁用 Service Worker 和 WebSocket,因此依赖这些功能的网站可能不完整。DOM 元素快照目前针对主页面;拖拽等高级输入尚未接入。浏览器不支持通过任意 JavaScript、CDP 或宿主命令接口绕过这些边界。
computer_*、desktop_*、cloud_computer_* 工具继续走自己的执行路径。浏览器不可用时不会隐式切换环境重做。deploy/computer/compose_bridge.py(含 cancel 协议)。升级 Compose 时先结束运行任务,再按原部署流程更新桌面镜像;不要只更新 Runner 而保留旧 bridge。browser.enabled,保留资料目录即可。已有 VM、文件库和 Hermes 配置无需迁移。常规检查:
npm run typecheck
npm run build
NODE_OPTIONS=--no-experimental-webstorage npm test -- --maxWorkers=4
本地 Node 26 的实验性 Web Storage 会覆盖测试环境的 localStorage,因此全量测试使用上述选项。
macOS 桌面回归需先生成本地桌面运行包与原生 helper:
npm run desktop:build
npm run desktop:test
真实 Chromium 验收(先安装配套浏览器):
YAOYAO_BROWSER_SMOKE=1 npx vitest run tests/runner/browserSmoke.test.ts tests/server/managedBrowserSmoke.test.ts
这两项覆盖真实页面操作、上传下载、登录资料恢复,以及 HTTP Runner 领取/准入/结果/授权检查、无 VM 浏览器握手、人工接管与交还。会话保留回归覆盖同一上下文和页面内容得以保留、空闲网络阻断、重新授权恢复、旧代次输入拒绝、只读轮询不延长空闲时间,以及临时会话和撤权后的清理。HTTP 测试使用 Hermes fixture,不代表真实模型自主选择工具的评测。macOS Chromium 和临时 Docker 命令取消已实测;Linux Chromium 沙箱与 Windows 安装仍需目标平台验证,尚无与完整 VM 的性能基准数字。
首次安装和聊天卡片验收:
YAOYAO_BROWSER_INSTALL_SMOKE=1 NODE_OPTIONS=--no-experimental-webstorage npx vitest run tests/runner/browserInstallationSmoke.test.ts --maxWorkers=1
YAOYAO_BROWSER_UI_SMOKE=1 NODE_OPTIONS=--no-experimental-webstorage npx vitest run tests/client/managedBrowserCardSmoke.test.ts --maxWorkers=1
首次安装测试在独立 Node 进程和全新临时浏览器缓存中实际下载,验证 missing → installing → ready,再打开浏览器截图,结束后删除临时缓存。聊天 UI 测试使用真实 Chromium、隔离服务与浏览器接口 fixture,覆盖结构卡刷新保留、准备后接管、交还、375px、暗色与横屏;该 UI fixture 不代表真实 Runner 安装测试。