Observability 仪表盘
使用本地 Web 仪表板实时监控 agent-browser 会话,该仪表板显示实时浏览器视口和命令活动流。
使用¶
仪表板已捆绑在二进制文件中,无需单独安装。启动服务器并打开任意会话:
然后在浏览器中打开 http://localhost:4848 查看实时仪表板。如果通过反向代理或端口转发暴露仪表板,请在启动服务器时显式允许其浏览器 HTTPS 来源:
所有会话都会自动将数据流式传输到仪表板。本地回环来源在 IPv4 和 IPv6 上会自动获得允许,无需访问令牌。对于通过反向代理访问的仪表板,请使用 --allowed-origins 或 AGENT_BROWSER_DASHBOARD_ALLOWED_ORIGINS 提供以逗号分隔的精确来源列表;这使仪表板能够拒绝跨来源请求和 DNS 重绑定攻击。每个配置的来源都必须有效,自定义端口必须是 1 到 65535 之间的整数。未知选项、缺失值、无效端口和格式错误的来源都会导致启动失败。该命令仅对外部来源打印带私有令牌的访问 URL。打开相应的 URL 一次以建立浏览器会话,请勿分享该 URL。其不可猜测的令牌保留在初始 URL 片段中,随后浏览器会将其存储在 Secure、主机绑定、同站 cookie 中,用于仪表板 API 和流请求。直接打开 http://localhost:<port> 进行本地访问;外部令牌永远不会写入回环 cookie。配置反向代理以从日志中删除 cookie。浏览器保持在仪表板来源上,而服务器在内部代理每个会话的标签页、状态和流流量,因此无需暴露会话端口。重复启动时,仅当这些设置匹配时才会复用仪表板;在更改端口或允许来源之前,请先停止仪表板。
自定义流端口¶
默认情况下,每个会话将其 WebSocket 流服务器绑定到操作系统分配的端口。要使用特定端口,请设置 AGENT_BROWSER_STREAM_PORT 环境变量:
您还可以使用运行时命令来控制正在运行的会话上的流式传输:
仪表板功能¶
仪表板是一个单页 Web 应用,包含三个区域:
| 区域 | 描述 |
|---|---|
| 实时视口 | 来自浏览器的实时 JPEG 帧,渲染到 canvas 元素上 |
| 活动流 | 按时间顺序排列的命令、结果和控制台消息流,包含可展开的详细信息 |
| 会话创建 | 从仪表板使用本地引擎(Chrome、Lightpanda)或云提供商(AgentCore、Browserbase、Browserless、Browser Use、Kernel)创建新会话 |
| 状态栏 | 连接状态、视口尺寸和 WebSocket 端点 |
WebSocket 协议¶
仪表板连接到流式传输 使用的同一 WebSocket 端点,并带有额外的可观测性消息类型:
命令事件¶
在命令开始执行时发送:
{
"type": "command",
"action": "click",
"id": "r123",
"params": { "selector": "@e5" },
"timestamp": 1711367000000
}
结果事件¶
在命令完成时发送:
{
"type": "result",
"id": "r123",
"action": "click",
"success": true,
"data": {},
"duration_ms": 45,
"timestamp": 1711367000045
}
控制台事件¶
在浏览器向控制台记录日志时发送:
{
"type": "console",
"level": "log",
"text": "Page loaded",
"args": [{"type": "string", "value": "Page loaded"}],
"timestamp": 1711367000100
}
args 数组包含原始 CDP Runtime.consoleAPICalled 参数,供编程访问使用。对象参数包含预览数据(例如 {userId: "abc", count: 42} 而不是 "Object")。
这些是对流式传输 页面上已记录的 frame、status 和 error 消息类型的补充。
架构¶
仪表板是 Next.js 静态导出(output: 'export'),生成纯 HTML、CSS 和 JS。它位于 monorepo 中的 packages/dashboard/ 目录下,使用以下命令构建:
仪表板在编译时使用 rust-embed 嵌入到 CLI 二进制文件中。普通 HTTP 请求提供嵌入的仪表板资源和同源 API 路由。特定于会话的标签页、状态和流 WebSocket 流量通过仪表板服务器代理到仅限回环的会话端口。
AI 聊天¶
仪表板包含一个可选的 AI 聊天面板,由 Vercel AI Gateway 提供支持。启用后,右侧面板会出现一个 Chat 标签页,与 Activity、Console、Network、Storage 和 Extensions 并列。
设置¶
Chat 标签页始终可见。设置 API 密钥以启用响应:
可选地覆盖网关 URL 或模型:
export AI_GATEWAY_URL=https://ai-gateway.vercel.sh # this is the default
export AI_GATEWAY_MODEL=openai/gpt-4o-mini # default: anthropic/claude-sonnet-4.6
工作原理¶
Rust 服务器将来自仪表板的聊天请求代理到 Vercel AI Gateway,并使用 Vercel AI SDK 的 UI Message Stream 协议将响应流式传输回来。仪表板前端使用 @ai-sdk/react 中的 useChat 和 DefaultChatTransport。
Chat 每次工具调用执行一个 agent-browser 命令。带引号参数中的 ; 或 && 会保留为文本,因此 JSON 参数可以包含它们。Chat 可以通过 skills get <name> 加载捆绑的技能,并使用页面 WebMCP 工具:它使用 webmcp list <tool> --frame <frame-id> --json 获取工具的输入模式,然后使用相同的 --frame 调用 webmcp invoke。Chat 在选定的会话中运行,无法创建或切换会话;如需新会话,请在仪表板中使用 New Session。Chat 命令不能设置除 --json 和 --annotate 之外的全局标志。
| 变量 | 描述 | 默认值 |
|---|---|---|
AI_GATEWAY_URL |
Vercel AI Gateway 基础 URL。 | https://ai-gateway.vercel.sh |
AI_GATEWAY_API_KEY |
AI Gateway 的 API 密钥。需要提供以启用 AI 聊天响应。 | (无) |
AI_GATEWAY_MODEL |
聊天请求的默认 AI 模型。 | anthropic/claude-sonnet-4.6 |
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 agen/agent-browser