@optima-chat/optima-agent 0.9.11 → 0.9.13
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/.claude/skills/.kb-skills-managed.json +9 -9
- package/.claude/skills/ads/SKILL.md +244 -244
- package/.claude/skills/ads/template/campaign/CREATIVES.md +18 -18
- package/.claude/skills/ads/template/campaign/NOTES.md +10 -10
- package/.claude/skills/ads/template/campaign/STRATEGY.md +29 -29
- package/.claude/skills/ads/template/user/ADS.md +29 -29
- package/.claude/skills/ads/template/user/LEARNINGS.md +15 -15
- package/.claude/skills/ads/template/user/PROGRESS.md +20 -20
- package/.claude/skills/ads/template/user/README.md +25 -25
- package/.claude/skills/ads/template/user/assets/.gitignore +2 -2
- package/.claude/skills/bi/SKILL.md +131 -131
- package/.claude/skills/browser/SKILL.md +201 -201
- package/.claude/skills/channels/SKILL.md +188 -188
- package/.claude/skills/collection/SKILL.md +88 -88
- package/.claude/skills/douyin/SKILL.md +408 -408
- package/.claude/skills/ffmpeg/SKILL.md +164 -164
- package/.claude/skills/gen/SKILL.md +279 -279
- package/.claude/skills/growth/SKILL.md +90 -90
- package/.claude/skills/growth/template/ACCOUNTS.md +14 -14
- package/.claude/skills/growth/template/CALENDAR.md +7 -7
- package/.claude/skills/growth/template/COMMENTS.md +7 -7
- package/.claude/skills/growth/template/GROWTH.md +37 -37
- package/.claude/skills/growth/template/PROGRESS.md +4 -4
- package/.claude/skills/growth/template/README.md +20 -20
- package/.claude/skills/growth/template/TOPICS.md +7 -7
- package/.claude/skills/homepage/SKILL.md +177 -177
- package/.claude/skills/i18n/SKILL.md +517 -517
- package/.claude/skills/ingesting-sources/SKILL.md +94 -94
- package/.claude/skills/initializing-kb/SKILL.md +117 -117
- package/.claude/skills/instagram/SKILL.md +321 -321
- package/.claude/skills/inventory/SKILL.md +328 -328
- package/.claude/skills/kol-outreach/SKILL.md +232 -232
- package/.claude/skills/kol-outreach/template/campaign/CONFIG.md +60 -60
- package/.claude/skills/kol-outreach/template/campaign/KOLS.md +6 -6
- package/.claude/skills/kol-outreach/template/campaign/PROGRESS.md +3 -3
- package/.claude/skills/kol-outreach/template/campaign/TEMPLATES.md +88 -88
- package/.claude/skills/kol-outreach/template/merchant/BRAND.md +36 -36
- package/.claude/skills/kol-outreach/template/merchant/CAMPAIGNS.md +6 -6
- package/.claude/skills/kol-outreach/template/merchant/MERCHANT_LIMITS.md +16 -16
- package/.claude/skills/kol-outreach/template/merchant/PROGRESS.md +4 -4
- package/.claude/skills/kol-outreach/template/merchant/README.md +20 -20
- package/.claude/skills/linting-the-wiki/SKILL.md +68 -68
- package/.claude/skills/logistics/SKILL.md +180 -180
- package/.claude/skills/markdown-pdf/SKILL.md +72 -72
- package/.claude/skills/merchant/SKILL.md +110 -110
- package/.claude/skills/multigrid-poster/SKILL.md +192 -192
- package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -34
- package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -43
- package/.claude/skills/multigrid-poster/scripts/compose.py +116 -116
- package/.claude/skills/order/SKILL.md +452 -452
- package/.claude/skills/product/SKILL.md +379 -379
- package/.claude/skills/product-page/SKILL.md +106 -106
- package/.claude/skills/querying-the-wiki/SKILL.md +59 -59
- package/.claude/skills/reddit/SKILL.md +277 -277
- package/.claude/skills/review/SKILL.md +321 -321
- package/.claude/skills/scout/SKILL.md +575 -575
- package/.claude/skills/sentinel/SKILL.md +281 -281
- package/.claude/skills/shein/SKILL.md +246 -246
- package/.claude/skills/shipping/SKILL.md +200 -200
- package/.claude/skills/shop-content/SKILL.md +101 -101
- package/.claude/skills/shopify/SKILL.md +282 -282
- package/.claude/skills/skillify/SKILL.md +114 -114
- package/.claude/skills/taobao/SKILL.md +238 -238
- package/.claude/skills/tiktok/SKILL.md +381 -381
- package/.claude/skills/twitter/SKILL.md +302 -302
- package/.claude/skills/updating-related-pages/SKILL.md +65 -65
- package/.claude/skills/video-edit/SKILL.md +138 -138
- package/.claude/skills/video-gen/SKILL.md +720 -630
- package/.claude/skills/video-gen/templates/INDEX.md +78 -78
- package/.claude/skills/video-gen/templates/before-after-beauty.md +183 -183
- package/.claude/skills/video-gen/templates/drama-fmcg.md +183 -183
- package/.claude/skills/video-gen/templates/kol-reaction-food.md +193 -193
- package/.claude/skills/video-gen/templates/multi-point-apparel.md +185 -185
- package/.claude/skills/video-gen/templates/pain-solution-home.md +184 -184
- package/.claude/skills/video-gen/templates/pdp-360-showcase.md +189 -189
- package/.claude/skills/video-gen/templates/pdp-feature-highlight.md +182 -182
- package/.claude/skills/video-gen/templates/scene-digital.md +183 -183
- package/.claude/skills/wechat/SKILL.md +174 -174
- package/.claude/skills/xhs/SKILL.md +170 -170
- package/README.md +276 -276
- package/dist/bin/optima.js +26 -26
- package/dist/bin/serve.js +23 -23
- package/dist/bin/video-edit.d.ts +3 -0
- package/dist/bin/video-edit.d.ts.map +1 -0
- package/dist/bin/video-edit.js +153 -0
- package/dist/bin/video-edit.js.map +1 -0
- package/dist/src/agent.d.ts +1 -1
- package/dist/src/agent.js +4 -4
- package/dist/src/system-prompt.d.ts.map +1 -1
- package/dist/src/system-prompt.js +175 -173
- package/dist/src/system-prompt.js.map +1 -1
- package/dist/src/tools/memory.js +10 -10
- package/dist/src/ui/headless.js +7 -7
- package/package.json +79 -79
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: browser
|
|
3
|
-
description: "Browser automation for web interactions. Use when user needs to open/navigate to websites, login to platforms, fill forms, post content, test websites, or operate on third-party platforms without APIs. Uses 'browser-cli' commands. Do NOT use for simple web scraping (use WebFetch) or tasks that have dedicated skills (e.g. scout, tiktok, instagram, shein, etc.)."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 浏览器自动化 Skill
|
|
7
|
-
|
|
8
|
-
## 使用场景
|
|
9
|
-
|
|
10
|
-
- 用户要求打开网站或访问某个 URL(如"打开 github"、"open youtube")
|
|
11
|
-
- 用户要求登录平台、填写表单或发布内容
|
|
12
|
-
- 用户需要测试网站功能
|
|
13
|
-
- 用户需要操作没有 API 的第三方平台
|
|
14
|
-
- 用户要求自动化浏览器交互
|
|
15
|
-
|
|
16
|
-
**不适用场景:**
|
|
17
|
-
- 简单网页抓取 → 使用 WebFetch
|
|
18
|
-
- 已有专用 skill 的任务(如 scout、tiktok、instagram、shein 等)
|
|
19
|
-
|
|
20
|
-
## 脚本优先原则
|
|
21
|
-
|
|
22
|
-
每次执行浏览器任务前,**先检查是否有现成脚本**:
|
|
23
|
-
|
|
24
|
-
1. `browser-cli scripts` — 查看已有脚本(显示名称、描述、步骤)
|
|
25
|
-
2. 如果有匹配的脚本 → 直接用 `browser-cli runscript <name> --param ...`
|
|
26
|
-
3. 如果没有 → 手动用 browser-cli 命令完成任务
|
|
27
|
-
|
|
28
|
-
脚本执行零 token 消耗,比手动操作快 10 倍以上。
|
|
29
|
-
|
|
30
|
-
## 命令
|
|
31
|
-
|
|
32
|
-
### 会话管理
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
browser-cli launch [--url <url>] [--force] # 启动浏览器(--force 先关闭已有会话)
|
|
36
|
-
browser-cli close # 关闭浏览器并释放资源
|
|
37
|
-
browser-cli status # 查看当前会话状态
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### 导航
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
browser-cli navigate <url> # 跳转到 URL
|
|
44
|
-
browser-cli back # 后退
|
|
45
|
-
browser-cli refresh # 刷新页面
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 交互
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
browser-cli click <index> # 按索引点击元素
|
|
52
|
-
browser-cli input <index> <text> [--no-clear] # 输入文本(--no-clear 追加而非替换)
|
|
53
|
-
browser-cli select <index> <option> # 选择下拉选项
|
|
54
|
-
browser-cli scroll <up|down> [--pages <n>] # 滚动页面(默认 1 页)
|
|
55
|
-
browser-cli keys <key> # 键盘操作(Enter、Tab 等)
|
|
56
|
-
browser-cli upload <index> <file...> # 上传文件到 file input(路径自动转换)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 页面检查
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
browser-cli dom # 获取当前 DOM 状态
|
|
63
|
-
browser-cli screenshot [file] # 截图(默认:/tmp/screenshot.png)
|
|
64
|
-
browser-cli search <pattern> # 搜索页面文本
|
|
65
|
-
browser-cli find <css_selector> # 通过 CSS 选择器查询
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 标签页管理
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
browser-cli tabs # 列出所有标签页
|
|
72
|
-
browser-cli switch <tab_id> # 切换标签页
|
|
73
|
-
browser-cli close-tab <tab_id> # 关闭标签页
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 脚本
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
browser-cli scripts # 列出所有脚本(含描述和步骤)
|
|
80
|
-
browser-cli script-code <name> # 查看脚本源码
|
|
81
|
-
browser-cli runscript <name> --param key=value [...] # 执行脚本(自动轮询到完成)
|
|
82
|
-
browser-cli runscript <name> --param key=value --no-poll # 执行但不等待
|
|
83
|
-
browser-cli script-task <task-id> # 查询执行状态
|
|
84
|
-
browser-cli submit-script --name <name> --code-file <path> # 提交新脚本(新建或覆盖)
|
|
85
|
-
browser-cli delete-script <name> # 删除脚本
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Profile 管理
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
browser-cli profiles # 列出浏览器 profile
|
|
92
|
-
browser-cli delete-profile <id> # 删除 profile
|
|
93
|
-
browser-cli launch --profile <id> # 用指定 profile 启动
|
|
94
|
-
browser-cli runscript <name> --profile <id> --param ... # 用指定 profile 执行脚本
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## DOM 索引格式
|
|
98
|
-
|
|
99
|
-
每个操作都会返回当前 DOM 状态,格式如下:
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
[N]<tag attributes />
|
|
103
|
-
content
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
- 索引号 (N) **不连续**(如 [7]、[20]、[30])— 这是正常的
|
|
107
|
-
- 每次操作后索引会**重新分配** — 务必使用最新的索引
|
|
108
|
-
- 使用这些索引来执行 `click`、`input` 和 `select` 命令
|
|
109
|
-
|
|
110
|
-
## 操作流程
|
|
111
|
-
|
|
112
|
-
### 流程一:有脚本(常见)
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# 1. 检查脚本
|
|
116
|
-
browser-cli scripts
|
|
117
|
-
|
|
118
|
-
# 2. 直接执行
|
|
119
|
-
browser-cli runscript xiaohongshu-image-note \
|
|
120
|
-
--param title="今日分享" \
|
|
121
|
-
--param body="内容..." \
|
|
122
|
-
--param 'images=["~/images/photo1.jpg", "~/images/photo2.jpg"]'
|
|
123
|
-
# 输出: ✓ Script completed
|
|
124
|
-
|
|
125
|
-
# 小红书评论
|
|
126
|
-
browser-cli runscript xiaohongshu-comment \
|
|
127
|
-
--param search_keyword="辞职做跨境电商" \
|
|
128
|
-
--param comment="写得好!"
|
|
129
|
-
|
|
130
|
-
# 小红书数据采集
|
|
131
|
-
browser-cli runscript xiaohongshu-data-collect
|
|
132
|
-
|
|
133
|
-
# Instagram 发帖
|
|
134
|
-
browser-cli runscript instagram-image-post \
|
|
135
|
-
--param 'images=["~/images/photo.jpg"]' \
|
|
136
|
-
--param body="Morning vibes ☕"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### 流程二:无脚本(手动操作)
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
# 1. 启动浏览器
|
|
143
|
-
browser-cli launch --url https://example.com
|
|
144
|
-
|
|
145
|
-
# 2. 查看 DOM,找到要操作的元素
|
|
146
|
-
browser-cli dom
|
|
147
|
-
|
|
148
|
-
# 3. 操作元素(用 DOM 返回的索引)
|
|
149
|
-
browser-cli click 15
|
|
150
|
-
browser-cli input 22 "内容"
|
|
151
|
-
browser-cli keys Enter
|
|
152
|
-
|
|
153
|
-
# 4. 完成后关闭
|
|
154
|
-
browser-cli close
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### 流程三:脚本失败(Fallback)
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
# 1. 执行脚本
|
|
161
|
-
browser-cli runscript xiaohongshu-image-note --param ...
|
|
162
|
-
# 输出: ⚠ Script needs fallback
|
|
163
|
-
# → 显示已完成和剩余步骤
|
|
164
|
-
|
|
165
|
-
# 2. Session 仍然打开 — 用手动命令继续完成剩余步骤
|
|
166
|
-
browser-cli dom
|
|
167
|
-
browser-cli click 15
|
|
168
|
-
browser-cli input 22 "内容"
|
|
169
|
-
|
|
170
|
-
# 3. 完成后关闭
|
|
171
|
-
browser-cli close
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## 文件路径
|
|
175
|
-
|
|
176
|
-
浏览器后端可以直接读取用户工作空间的文件。传文件路径时直接使用你看到的路径即可,后端会自动转换:
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
~/images/photo.jpg → 自动转换 ✓
|
|
180
|
-
/home/aiuser/images/photo.jpg → 自动转换 ✓
|
|
181
|
-
/mnt/efs/{userId}/images/... → 自动转换 ✓
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
## 需要用户登录态的任务
|
|
185
|
-
|
|
186
|
-
当用户要求操作需要登录的平台(小红书、Instagram、微博、淘宝等社交/电商平台),在开始执行前先引导用户安装扩展:
|
|
187
|
-
|
|
188
|
-
"这个任务需要用到你在 [平台名] 的登录态。请安装 Optima Browser Operator Chrome 扩展,这样我可以直接用你已登录的浏览器来操作,不需要你提供密码。"
|
|
189
|
-
|
|
190
|
-
安装后用户回到聊天页面,扩展自动连接,直接执行任务。如果用户在该平台未登录,提示用户先在自己的 Chrome 里登录。
|
|
191
|
-
|
|
192
|
-
## 注意事项
|
|
193
|
-
|
|
194
|
-
- **脚本优先**:每次操作前先 `browser-cli scripts`,有脚本就用脚本
|
|
195
|
-
- **DOM 自动返回**:每个操作会自动返回 DOM 状态 — 无需单独调用 `browser-cli dom`
|
|
196
|
-
- **避免不必要的截图**:截图消耗 token,日常导航用 DOM 输出即可
|
|
197
|
-
- **5 分钟超时**:无操作 5 分钟后会话自动关闭
|
|
198
|
-
- **务必关闭**:操作完成后运行 `browser-cli close` 释放资源
|
|
199
|
-
- **login_required 处理**:如果 runscript 返回 `login_required` 错误,说明该平台未登录。如果用户已安装 Extension 且 Extension 已连接,用户的 Chrome 通常已经登录了——让用户在自己的 Chrome 里手动登录该平台,然后重新 `runscript`。如果没有 Extension(走 Chromium),用 `browser-cli launch --url <平台URL>` 引导用户登录
|
|
200
|
-
- **Fallback 后更新脚本**:如果脚本频繁失败,重新生成并 submit-script 覆盖
|
|
201
|
-
- **Extension 模式**:标记了 `REQUIRES_USER_SESSION=True` 的脚本会自动使用用户的真实 Chrome(通过 Optima Browser Operator 扩展),未标记的脚本走 Chromium。这由后端自动判断,无需手动指定
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: "Browser automation for web interactions. Use when user needs to open/navigate to websites, login to platforms, fill forms, post content, test websites, or operate on third-party platforms without APIs. Uses 'browser-cli' commands. Do NOT use for simple web scraping (use WebFetch) or tasks that have dedicated skills (e.g. scout, tiktok, instagram, shein, etc.)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 浏览器自动化 Skill
|
|
7
|
+
|
|
8
|
+
## 使用场景
|
|
9
|
+
|
|
10
|
+
- 用户要求打开网站或访问某个 URL(如"打开 github"、"open youtube")
|
|
11
|
+
- 用户要求登录平台、填写表单或发布内容
|
|
12
|
+
- 用户需要测试网站功能
|
|
13
|
+
- 用户需要操作没有 API 的第三方平台
|
|
14
|
+
- 用户要求自动化浏览器交互
|
|
15
|
+
|
|
16
|
+
**不适用场景:**
|
|
17
|
+
- 简单网页抓取 → 使用 WebFetch
|
|
18
|
+
- 已有专用 skill 的任务(如 scout、tiktok、instagram、shein 等)
|
|
19
|
+
|
|
20
|
+
## 脚本优先原则
|
|
21
|
+
|
|
22
|
+
每次执行浏览器任务前,**先检查是否有现成脚本**:
|
|
23
|
+
|
|
24
|
+
1. `browser-cli scripts` — 查看已有脚本(显示名称、描述、步骤)
|
|
25
|
+
2. 如果有匹配的脚本 → 直接用 `browser-cli runscript <name> --param ...`
|
|
26
|
+
3. 如果没有 → 手动用 browser-cli 命令完成任务
|
|
27
|
+
|
|
28
|
+
脚本执行零 token 消耗,比手动操作快 10 倍以上。
|
|
29
|
+
|
|
30
|
+
## 命令
|
|
31
|
+
|
|
32
|
+
### 会话管理
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
browser-cli launch [--url <url>] [--force] # 启动浏览器(--force 先关闭已有会话)
|
|
36
|
+
browser-cli close # 关闭浏览器并释放资源
|
|
37
|
+
browser-cli status # 查看当前会话状态
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 导航
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
browser-cli navigate <url> # 跳转到 URL
|
|
44
|
+
browser-cli back # 后退
|
|
45
|
+
browser-cli refresh # 刷新页面
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 交互
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
browser-cli click <index> # 按索引点击元素
|
|
52
|
+
browser-cli input <index> <text> [--no-clear] # 输入文本(--no-clear 追加而非替换)
|
|
53
|
+
browser-cli select <index> <option> # 选择下拉选项
|
|
54
|
+
browser-cli scroll <up|down> [--pages <n>] # 滚动页面(默认 1 页)
|
|
55
|
+
browser-cli keys <key> # 键盘操作(Enter、Tab 等)
|
|
56
|
+
browser-cli upload <index> <file...> # 上传文件到 file input(路径自动转换)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 页面检查
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
browser-cli dom # 获取当前 DOM 状态
|
|
63
|
+
browser-cli screenshot [file] # 截图(默认:/tmp/screenshot.png)
|
|
64
|
+
browser-cli search <pattern> # 搜索页面文本
|
|
65
|
+
browser-cli find <css_selector> # 通过 CSS 选择器查询
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 标签页管理
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
browser-cli tabs # 列出所有标签页
|
|
72
|
+
browser-cli switch <tab_id> # 切换标签页
|
|
73
|
+
browser-cli close-tab <tab_id> # 关闭标签页
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 脚本
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
browser-cli scripts # 列出所有脚本(含描述和步骤)
|
|
80
|
+
browser-cli script-code <name> # 查看脚本源码
|
|
81
|
+
browser-cli runscript <name> --param key=value [...] # 执行脚本(自动轮询到完成)
|
|
82
|
+
browser-cli runscript <name> --param key=value --no-poll # 执行但不等待
|
|
83
|
+
browser-cli script-task <task-id> # 查询执行状态
|
|
84
|
+
browser-cli submit-script --name <name> --code-file <path> # 提交新脚本(新建或覆盖)
|
|
85
|
+
browser-cli delete-script <name> # 删除脚本
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Profile 管理
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
browser-cli profiles # 列出浏览器 profile
|
|
92
|
+
browser-cli delete-profile <id> # 删除 profile
|
|
93
|
+
browser-cli launch --profile <id> # 用指定 profile 启动
|
|
94
|
+
browser-cli runscript <name> --profile <id> --param ... # 用指定 profile 执行脚本
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## DOM 索引格式
|
|
98
|
+
|
|
99
|
+
每个操作都会返回当前 DOM 状态,格式如下:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
[N]<tag attributes />
|
|
103
|
+
content
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- 索引号 (N) **不连续**(如 [7]、[20]、[30])— 这是正常的
|
|
107
|
+
- 每次操作后索引会**重新分配** — 务必使用最新的索引
|
|
108
|
+
- 使用这些索引来执行 `click`、`input` 和 `select` 命令
|
|
109
|
+
|
|
110
|
+
## 操作流程
|
|
111
|
+
|
|
112
|
+
### 流程一:有脚本(常见)
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# 1. 检查脚本
|
|
116
|
+
browser-cli scripts
|
|
117
|
+
|
|
118
|
+
# 2. 直接执行
|
|
119
|
+
browser-cli runscript xiaohongshu-image-note \
|
|
120
|
+
--param title="今日分享" \
|
|
121
|
+
--param body="内容..." \
|
|
122
|
+
--param 'images=["~/images/photo1.jpg", "~/images/photo2.jpg"]'
|
|
123
|
+
# 输出: ✓ Script completed
|
|
124
|
+
|
|
125
|
+
# 小红书评论
|
|
126
|
+
browser-cli runscript xiaohongshu-comment \
|
|
127
|
+
--param search_keyword="辞职做跨境电商" \
|
|
128
|
+
--param comment="写得好!"
|
|
129
|
+
|
|
130
|
+
# 小红书数据采集
|
|
131
|
+
browser-cli runscript xiaohongshu-data-collect
|
|
132
|
+
|
|
133
|
+
# Instagram 发帖
|
|
134
|
+
browser-cli runscript instagram-image-post \
|
|
135
|
+
--param 'images=["~/images/photo.jpg"]' \
|
|
136
|
+
--param body="Morning vibes ☕"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 流程二:无脚本(手动操作)
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# 1. 启动浏览器
|
|
143
|
+
browser-cli launch --url https://example.com
|
|
144
|
+
|
|
145
|
+
# 2. 查看 DOM,找到要操作的元素
|
|
146
|
+
browser-cli dom
|
|
147
|
+
|
|
148
|
+
# 3. 操作元素(用 DOM 返回的索引)
|
|
149
|
+
browser-cli click 15
|
|
150
|
+
browser-cli input 22 "内容"
|
|
151
|
+
browser-cli keys Enter
|
|
152
|
+
|
|
153
|
+
# 4. 完成后关闭
|
|
154
|
+
browser-cli close
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 流程三:脚本失败(Fallback)
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# 1. 执行脚本
|
|
161
|
+
browser-cli runscript xiaohongshu-image-note --param ...
|
|
162
|
+
# 输出: ⚠ Script needs fallback
|
|
163
|
+
# → 显示已完成和剩余步骤
|
|
164
|
+
|
|
165
|
+
# 2. Session 仍然打开 — 用手动命令继续完成剩余步骤
|
|
166
|
+
browser-cli dom
|
|
167
|
+
browser-cli click 15
|
|
168
|
+
browser-cli input 22 "内容"
|
|
169
|
+
|
|
170
|
+
# 3. 完成后关闭
|
|
171
|
+
browser-cli close
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 文件路径
|
|
175
|
+
|
|
176
|
+
浏览器后端可以直接读取用户工作空间的文件。传文件路径时直接使用你看到的路径即可,后端会自动转换:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
~/images/photo.jpg → 自动转换 ✓
|
|
180
|
+
/home/aiuser/images/photo.jpg → 自动转换 ✓
|
|
181
|
+
/mnt/efs/{userId}/images/... → 自动转换 ✓
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## 需要用户登录态的任务
|
|
185
|
+
|
|
186
|
+
当用户要求操作需要登录的平台(小红书、Instagram、微博、淘宝等社交/电商平台),在开始执行前先引导用户安装扩展:
|
|
187
|
+
|
|
188
|
+
"这个任务需要用到你在 [平台名] 的登录态。请安装 Optima Browser Operator Chrome 扩展,这样我可以直接用你已登录的浏览器来操作,不需要你提供密码。"
|
|
189
|
+
|
|
190
|
+
安装后用户回到聊天页面,扩展自动连接,直接执行任务。如果用户在该平台未登录,提示用户先在自己的 Chrome 里登录。
|
|
191
|
+
|
|
192
|
+
## 注意事项
|
|
193
|
+
|
|
194
|
+
- **脚本优先**:每次操作前先 `browser-cli scripts`,有脚本就用脚本
|
|
195
|
+
- **DOM 自动返回**:每个操作会自动返回 DOM 状态 — 无需单独调用 `browser-cli dom`
|
|
196
|
+
- **避免不必要的截图**:截图消耗 token,日常导航用 DOM 输出即可
|
|
197
|
+
- **5 分钟超时**:无操作 5 分钟后会话自动关闭
|
|
198
|
+
- **务必关闭**:操作完成后运行 `browser-cli close` 释放资源
|
|
199
|
+
- **login_required 处理**:如果 runscript 返回 `login_required` 错误,说明该平台未登录。如果用户已安装 Extension 且 Extension 已连接,用户的 Chrome 通常已经登录了——让用户在自己的 Chrome 里手动登录该平台,然后重新 `runscript`。如果没有 Extension(走 Chromium),用 `browser-cli launch --url <平台URL>` 引导用户登录
|
|
200
|
+
- **Fallback 后更新脚本**:如果脚本频繁失败,重新生成并 submit-script 覆盖
|
|
201
|
+
- **Extension 模式**:标记了 `REQUIRES_USER_SESSION=True` 的脚本会自动使用用户的真实 Chrome(通过 Optima Browser Operator 扩展),未标记的脚本走 Chromium。这由后端自动判断,无需手动指定
|