bb-browser 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,18 +1,22 @@
1
+ <div align="center">
2
+
1
3
  # bb-browser
2
4
 
3
- 面向 AI Agent 的浏览器自动化 CLI 工具。
5
+ **让 AI Agent 用你的真实浏览器**
6
+
7
+ [![npm](https://img.shields.io/npm/v/bb-browser?color=CB3837&logo=npm&logoColor=white)](https://www.npmjs.com/package/bb-browser)
8
+ [![Node.js](https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white)](https://nodejs.org)
9
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
10
 
5
- ## 核心特性
11
+ </div>
6
12
 
7
- - **复用用户登录态** - 运行在用户的浏览器中,自动复用已登录的网站(Gmail, Twitter, 内部系统等)
8
- - **AI Agent 友好** - 简洁的 CLI 接口,支持 JSON 输出,Ref 系统方便元素引用
9
- - **反爬绕过** - 使用 chrome.debugger API,避免 Playwright 等工具的自动化指纹检测
13
+ ---
10
14
 
11
- ## 架构
15
+ 你已经登录的 Gmail、Twitter、内部系统——Agent 直接能用。通过 `chrome.debugger` API 操作,绕过自动化指纹检测。
12
16
 
13
17
  ```
14
18
  AI Agent (Claude, GPT, etc.)
15
- │ CLI 命令
19
+ │ CLI 命令 / Epiral gRPC
16
20
 
17
21
  bb-browser CLI ──HTTP──▶ Daemon ──SSE──▶ Chrome Extension
18
22
 
@@ -21,48 +25,73 @@ bb-browser CLI ──HTTP──▶ Daemon ──SSE──▶ Chrome Extension
21
25
  (已登录的网站、Cookies)
22
26
  ```
23
27
 
28
+ ## 为什么不用 Playwright / Selenium
29
+
30
+ | | Playwright / Selenium | bb-browser |
31
+ |---|---|---|
32
+ | 浏览器环境 | 独立的无头浏览器 | 用户的真实浏览器 |
33
+ | 登录态 | 没有,需要手动登录 | 复用已有的 Cookies 和会话 |
34
+ | 自动化检测 | 容易被识别和拦截 | `chrome.debugger` API,无指纹 |
35
+ | 内部系统 | 需要额外配置 VPN/代理 | 用户能访问的,它都能访问 |
36
+
37
+ ## 两种使用方式
38
+
39
+ ### 独立使用
40
+
41
+ 作为 CLI 工具,任何 AI Agent 都可以直接调用:
42
+
43
+ ```bash
44
+ bb-browser open https://example.com
45
+ bb-browser snapshot -i
46
+ bb-browser click @0
47
+ bb-browser fill @2 "search query"
48
+ ```
49
+
50
+ ### 接入 Epiral Agent
51
+
52
+ 通过 [Epiral CLI](https://github.com/epiral/cli) 的 Browser Bridge 接入 [Epiral Agent](https://github.com/epiral/agent),让 Agent 远程控制浏览器:
53
+
54
+ ```
55
+ Epiral Agent → gRPC → Epiral CLI (Browser Bridge) → SSE → Chrome 扩展 → 浏览器
56
+ ```
57
+
58
+ 只需在 Chrome 扩展设置中将上游 URL 指向 Epiral CLI 的 SSE 端口即可。Agent 可以同时接入多个浏览器。
59
+
24
60
  ## 安装
25
61
 
26
- ### 方式 1:npm 安装(推荐)
62
+ ### npm 安装(推荐)
27
63
 
28
64
  ```bash
29
65
  npm install -g bb-browser
30
66
  ```
31
67
 
32
- ### 方式 2:从源码构建
68
+ ### 从源码构建
33
69
 
34
70
  ```bash
35
71
  git clone https://github.com/yan5xu/bb-browser.git
36
72
  cd bb-browser
37
- pnpm install
38
- pnpm build
73
+ pnpm install && pnpm build
39
74
  ```
40
75
 
41
- ### 加载 Chrome 扩展
76
+ ### 加载 Chrome 扩展(必须)
42
77
 
43
- **必须步骤**:CLI 需要配合 Chrome 扩展使用。
44
-
45
- 1. 打开 Chrome,访问 `chrome://extensions/`
46
- 2. 开启「开发者模式」(右上角开关)
78
+ 1. 打开 Chrome → `chrome://extensions/`
79
+ 2. 开启「开发者模式」
47
80
  3. 点击「加载已解压的扩展程序」
48
81
  4. 选择扩展目录:
49
82
  - npm 安装:`node_modules/bb-browser/extension/`
50
83
  - 源码构建:`packages/extension/dist/`
51
- 5. 确认扩展已启用
52
84
 
53
85
  ## 使用
54
86
 
55
- ### 1. 启动 Daemon
87
+ ### 启动 Daemon
56
88
 
57
89
  ```bash
58
- # 前台启动(查看日志)
59
- bb-browser daemon
60
-
61
- # 或使用别名
62
- bb-browser start
90
+ bb-browser daemon # 前台启动
91
+ bb-browser start # 别名
63
92
  ```
64
93
 
65
- ### 2. 基本操作
94
+ ### 基本操作
66
95
 
67
96
  ```bash
68
97
  # 打开网页
@@ -70,150 +99,70 @@ bb-browser open https://example.com
70
99
 
71
100
  # 获取页面快照(可交互元素)
72
101
  bb-browser snapshot -i
73
-
74
- # 输出示例:
102
+ # 输出:
75
103
  # - link "Learn more" [ref=0]
76
104
  # - button "Submit" [ref=1]
77
105
  # - textbox "Search" [ref=2]
78
106
 
79
- # 点击元素
107
+ # 通过 ref 操作元素
80
108
  bb-browser click @0
81
-
82
- # 填充输入框
83
- bb-browser fill @2 "search query"
84
-
85
- # 按键
109
+ bb-browser fill @2 "hello world"
86
110
  bb-browser press Enter
87
111
  ```
88
112
 
89
- ### 3. 完整命令列表
113
+ ### 命令速查
90
114
 
91
- | 命令 | 说明 | 示例 |
115
+ | 类别 | 命令 | 说明 |
92
116
  |------|------|------|
93
- | `open <url>` | 打开 URL | `bb-browser open https://x.com` |
94
- | `snapshot` | 获取页面快照 | `bb-browser snapshot -i` |
95
- | `click <ref>` | 点击元素 | `bb-browser click @5` |
96
- | `hover <ref>` | 悬停元素 | `bb-browser hover @3` |
97
- | `fill <ref> <text>` | 填充输入框(清空后填入) | `bb-browser fill @2 "hello"` |
98
- | `type <ref> <text>` | 逐字符输入(追加) | `bb-browser type @2 " world"` |
99
- | `check <ref>` | 勾选复选框 | `bb-browser check @7` |
100
- | `uncheck <ref>` | 取消勾选 | `bb-browser uncheck @7` |
101
- | `select <ref> <val>` | 下拉框选择 | `bb-browser select @4 "option1"` |
102
- | `eval "<js>"` | 执行 JavaScript | `bb-browser eval "document.title"` |
103
- | `get text <ref>` | 获取元素文本 | `bb-browser get text @5` |
104
- | `get url` | 获取当前 URL | `bb-browser get url` |
105
- | `get title` | 获取页面标题 | `bb-browser get title` |
106
- | `screenshot [path]` | 截图 | `bb-browser screenshot ./shot.png` |
107
- | `wait <ms\|@ref>` | 等待时间或元素 | `bb-browser wait 2000` |
108
- | `press <key>` | 按键 | `bb-browser press Enter` |
109
- | `scroll <dir> [px]` | 滚动 | `bb-browser scroll down 500` |
110
- | `back` | 后退 | `bb-browser back` |
111
- | `forward` | 前进 | `bb-browser forward` |
112
- | `refresh` | 刷新 | `bb-browser refresh` |
113
- | `close` | 关闭标签页 | `bb-browser close` |
114
-
115
- ### 4. 标签页管理
117
+ | **导航** | `open <url>` | 打开 URL |
118
+ | | `back` / `forward` / `refresh` | 导航操作 |
119
+ | | `close` | 关闭标签页 |
120
+ | **快照** | `snapshot` | 完整 DOM |
121
+ | | `snapshot -i` | 只看可交互元素 |
122
+ | **交互** | `click <ref>` | 点击 |
123
+ | | `fill <ref> <text>` | 清空后填入 |
124
+ | | `type <ref> <text>` | 逐字符追加 |
125
+ | | `hover <ref>` | 悬停 |
126
+ | | `press <key>` | 按键 |
127
+ | | `scroll <dir> [px]` | 滚动 |
128
+ | | `check` / `uncheck <ref>` | 复选框 |
129
+ | | `select <ref> <val>` | 下拉框 |
130
+ | **信息** | `get text <ref>` | 元素文本 |
131
+ | | `get url` / `get title` | 页面信息 |
132
+ | | `screenshot [path]` | 截图 |
133
+ | | `eval "<js>"` | 执行 JavaScript |
134
+ | **Tab** | `tab` | 列出标签页 |
135
+ | | `tab new <url>` | 新标签页 |
136
+ | | `tab <n>` | 切换标签页 |
137
+ | | `tab close` | 关闭标签页 |
138
+ | **Frame** | `frame "<selector>"` | 进入 iframe |
139
+ | | `frame main` | 回到主 frame |
140
+ | **对话框** | `dialog accept [text]` | 接受 |
141
+ | | `dialog dismiss` | 拒绝 |
142
+ | **网络** | `network requests [filter]` | 查看请求 |
143
+ | | `network route "<pattern>" --abort` | 拦截 |
144
+ | | `network unroute` | 取消拦截 |
145
+ | **调试** | `console` / `errors` | 控制台/错误 |
146
+ | **Daemon** | `daemon` / `start` / `stop` / `status` | 管理 |
147
+
148
+ ### JSON 输出
149
+
150
+ 所有命令支持 `--json` 参数:
116
151
 
117
152
  ```bash
118
- # 列出所有标签页
119
- bb-browser tab
120
-
121
- # 新建标签页
122
- bb-browser tab new https://google.com
123
-
124
- # 切换到第 2 个标签页
125
- bb-browser tab 2
126
-
127
- # 关闭当前标签页
128
- bb-browser tab close
129
- ```
130
-
131
- ### 5. iframe 支持
132
-
133
- ```bash
134
- # 切换到 iframe(通过选择器)
135
- bb-browser frame "#iframe-id"
136
- bb-browser frame "[name='content']"
137
-
138
- # 返回主 frame
139
- bb-browser frame main
140
- ```
141
-
142
- ### 6. 对话框处理
143
-
144
- ```bash
145
- # 接受 alert/confirm
146
- bb-browser dialog accept
147
-
148
- # 接受 prompt 并输入文本
149
- bb-browser dialog accept "input text"
150
-
151
- # 拒绝对话框
152
- bb-browser dialog dismiss
153
- ```
154
-
155
- ### 7. 网络监控
156
-
157
- ```bash
158
- # 查看网络请求
159
- bb-browser network requests
160
-
161
- # 按关键词过滤
162
- bb-browser network requests api
163
-
164
- # 拦截并阻止请求
165
- bb-browser network route "*ads*" --abort
166
-
167
- # Mock 响应
168
- bb-browser network route "/api/user" --body '{"name":"test"}'
169
-
170
- # 移除拦截规则
171
- bb-browser network unroute
172
-
173
- # 清空请求记录
174
- bb-browser network clear
175
- ```
176
-
177
- ### 8. 调试
178
-
179
- ```bash
180
- # 查看控制台消息
181
- bb-browser console
182
-
183
- # 清空控制台
184
- bb-browser console --clear
185
-
186
- # 查看 JS 错误
187
- bb-browser errors
188
-
189
- # 清空错误记录
190
- bb-browser errors --clear
191
- ```
192
-
193
- ### 9. JSON 输出
194
-
195
- 所有命令支持 `--json` 参数,方便程序解析:
196
-
197
- ```bash
198
- bb-browser snapshot -i --json
199
- # {"success":true,"data":{"snapshot":"...","refs":{...}}}
200
-
201
153
  bb-browser get url --json
202
154
  # {"success":true,"data":"https://example.com"}
203
155
  ```
204
156
 
205
- ## CDP 开发模式
157
+ ### Tab 并发
206
158
 
207
- CDP 调试模式启动 Chrome,支持 `reload` 命令热重载扩展:
159
+ 每次 `open` 返回独立的 tabId,通过 `--tab` 参数隔离操作:
208
160
 
209
161
  ```bash
210
- # macOS
211
- /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
212
- --remote-debugging-port=9222 \
213
- --user-data-dir=/tmp/chrome-debug-profile
214
-
215
- # 然后加载扩展,之后可以热重载
216
- bb-browser reload
162
+ bb-browser open https://site-a.com # → tabId: 123
163
+ bb-browser open https://site-b.com # tabId: 456
164
+ bb-browser snapshot -i --tab 123 # 操作 site-a
165
+ bb-browser click @0 --tab 456 # 操作 site-b
217
166
  ```
218
167
 
219
168
  ## 项目结构
@@ -221,20 +170,24 @@ bb-browser reload
221
170
  ```
222
171
  bb-browser/
223
172
  ├── packages/
224
- │ ├── cli/ # CLI 工具
225
- │ ├── daemon/ # HTTP Daemon(CLI 与扩展的桥梁)
226
- │ ├── extension/ # Chrome 扩展
227
- │ └── shared/ # 共享类型
228
- └── README.md
173
+ │ ├── cli/ # CLI 工具(参数解析、HTTP 客户端、Daemon 管理)
174
+ │ ├── daemon/ # HTTP Daemon(SSE 推送、请求-响应匹配)
175
+ │ ├── extension/ # Chrome 扩展(Manifest V3、chrome.debugger)
176
+ │ └── shared/ # 共享类型和协议定义
177
+ ├── skills/ # AI Agent Skill 文档
178
+ ├── dist/ # 构建产物(npm 发布)
179
+ └── extension/ # 构建好的扩展(npm 发布)
229
180
  ```
230
181
 
231
182
  ## 技术栈
232
183
 
233
- - **CLI**: TypeScript, Commander.js
234
- - **Daemon**: Node.js HTTP Server, SSE
235
- - **Extension**: Chrome Manifest V3, chrome.debugger API
236
- - **构建**: pnpm, Turbo, Vite, tsup
184
+ | | 技术 |
185
+ |----|------|
186
+ | CLI | TypeScript,手写参数解析 |
187
+ | Daemon | Node.js HTTP Server + SSE |
188
+ | Extension | Chrome Manifest V3 + `chrome.debugger` API |
189
+ | 构建 | pnpm monorepo + Turborepo + tsup + Vite |
237
190
 
238
- ## License
191
+ ## 许可证
239
192
 
240
- MIT
193
+ [MIT](LICENSE)
@@ -13,8 +13,9 @@ var COMMAND_TIMEOUT = 3e4;
13
13
  export {
14
14
  generateId,
15
15
  DAEMON_PORT,
16
+ DAEMON_HOST,
16
17
  DAEMON_BASE_URL,
17
18
  SSE_HEARTBEAT_INTERVAL,
18
19
  COMMAND_TIMEOUT
19
20
  };
20
- //# sourceMappingURL=chunk-YAVLEXUJ.js.map
21
+ //# sourceMappingURL=chunk-TUO443YI.js.map