☰
BrowserSkill 代码结构导读:一条 bsk 命令如何走到浏览器
2026/10/16 2:17:08 网站建设 项目流程

BrowserSkill 代码结构导读:一条 bsk 命令如何走到浏览器

【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.项目地址: https://gitcode.com/GitHub_Trending/br/BrowserSkill

BrowserSkill 是让 AI Agent 操控用户已登录真实浏览器的自动化工具,由 Rust 命令行工具、后台守护进程与 Chrome 扩展三部分组成。本文作为代码结构导读,讲清工作区划分、两个 Rust crate 的分工,以及一条 bsk 命令的完整链路。

工作区划分:Rust、TypeScript 与评测用例

仓库顶层分三块:crates/ 是 Rust 工作区,apps/ 与 packages/ 是 TypeScript 侧,evals/ 存自动化评测用例,docs/ 存设计文档。

  • Cargo.toml 声明工作区仅两个成员:crates/bsk-cli与crates/bsk-protocol;版本号 0.3.2、Rust 1.85 在[workspace.package]统一定义,tokio、serde、clap 等依赖集中在[workspace.dependencies],crate 内以workspace = true引用;
  • pnpm-workspace.yaml 接管apps/*与packages/*,扩展在 apps/extension/,packages/ 下另有 dsh 插件、i18n 等 TS 包;
  • Rust 集成测试在 crates/bsk-cli/tests/,共 39 个文件;扩展的测试文件则与 TS 源码同目录并列。

跟随一次截图:命令的完整链路

选bsk screenshot为例,这条命令经过的路线如下:

bsk screenshot (cli/screenshot.rs) ↓ IPC:~/.bsk/run/daemon.sock,JSON 每行一条 ipc_client.rs → daemon/ipc.rs ↓ 进入会话串行队列 (daemon/queue.rs) daemon/ws.rs → WebSocket 52800 扩展:transport/ws-transport.ts → tools/dispatcher.ts ↑ 同一协议的帧把结果带回

沿途有三处值得留意。cli/screenshot.rs 解析参数并构造 bsk-protocol 定义的ScreenshotParams,随后dispatch先调用ensure_daemon()确认守护进程在跑,不在则自动拉起。ipc_client.rs 从~/.bsk/daemon.json读出 socket 路径,协议是逐行 JSON:Unix 走域套接字,Windows 走命名管道。客户端侧超时设为 35 秒,故意长于 daemon 的 30 秒工具超时,保证能拿到结构化的超时消息。

进入 daemon 后,queue.rs 为每个会话维护一条容量 64 的串行队列,把tool.*调用逐个转发给扩展并等回结果,避免 Agent 的并发调用相互踩踏。消息到达扩展侧后,dispatcher.ts 按"tool.screenshot"分支分派,由 CDP 完成真正的截图与回传。

💡 两条链路容易混淆:CLI 与 daemon 之间走本地 socket;daemon 与扩展之间走端口 52800 的 WebSocket(DEFAULT_WS_PORT,可用--port覆盖)。

Rust 侧:两个 crate 如何分工

bsk-cli 是编译后能直接摸到bsk命令的部分;bsk-protocol 只含类型与序列化,不含业务逻辑。分工如下:

组件路径职责
CLI 子命令树crates/bsk-cli/src/cli/clap 定义,一命令一文件,共 40 个源文件
IPC 客户端crates/bsk-cli/src/ipc_client.rs与本地 daemon 的逐行 JSON 收发
守护进程运行时crates/bsk-cli/src/daemon/IPC/WS 服务器、会话路由、串行队列、远端连接
技能安装crates/bsk-cli/src/skill_install/把skill/SKILL.md装进各类 AI 助手
协议类型crates/bsk-protocol/src/frame.rs帧结构、method.rs方法名、tools/入参出参
JSON Schemacrates/bsk-protocol/schema/111 份机器可校验的契约文件

💡 schema/ 下的 111 份 schema 由 Rust 类型生成,bsk-protocol 附带dump-schema二进制可重新生成;它们不依赖 Rust 环境,其他语言可直接用来校验消息格式。

扩展侧与协议契约

扩展是 Manifest V3 浏览器扩展,源码在 apps/extension/src/:

  • entrypoints/ 是一组入口,background.ts为维持与 daemon 连接的服务工作者;
  • transport/ 封装 WS 连接与断线重连;
  • tools/ 把tool.*方法分派到各具体工具,session-manager/与long-screenshot/分别处理会话与整页截图管线。

这一侧与 Rust 侧共享的只有消息格式:TS 侧定义了ProtocolFrame等一套同构类型,schema 文件是双方之间的校验标准。

拆分动机与阅读落点

协议为什么单独成 crate?因为它是 CLI、daemon 与 TypeScript 扩展三方共享的契约。把它做成零业务依赖的独立 crate,各方照着同一契约实现,类似插座标准:插头与插座只要针脚对得上,通多大的电流由实现方决定。代价是新增一个工具通常要改三处:bsk-protocol 里加方法名与入参出参,bsk-cli 加一个子命令文件,扩展 dispatcher 加一个分支。

建议的阅读顺序:先看 Cargo.toml 建立工作区骨架感;再按 frame.rs → method.rs → tools/ 熟悉消息结构;然后从 screenshot.rs 顺藤摸瓜到 daemon;卡住时去 tests/ 搜同名测试文件,测试是最可靠的活文档。

更完整的架构与远端扩展连接方式见 docs/architecture.md 及 docs/ 下的其余文档。

【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.项目地址: https://gitcode.com/GitHub_Trending/br/BrowserSkill

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询