@optima-chat/optima-agent 0.9.7 → 0.9.8

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.
Files changed (89) hide show
  1. package/.claude/skills/.kb-skills-managed.json +9 -9
  2. package/.claude/skills/ads/SKILL.md +244 -244
  3. package/.claude/skills/ads/template/campaign/CREATIVES.md +18 -18
  4. package/.claude/skills/ads/template/campaign/NOTES.md +10 -10
  5. package/.claude/skills/ads/template/campaign/STRATEGY.md +29 -29
  6. package/.claude/skills/ads/template/user/ADS.md +29 -29
  7. package/.claude/skills/ads/template/user/LEARNINGS.md +15 -15
  8. package/.claude/skills/ads/template/user/PROGRESS.md +20 -20
  9. package/.claude/skills/ads/template/user/README.md +25 -25
  10. package/.claude/skills/ads/template/user/assets/.gitignore +2 -2
  11. package/.claude/skills/bi/SKILL.md +131 -131
  12. package/.claude/skills/browser/SKILL.md +201 -201
  13. package/.claude/skills/channels/SKILL.md +188 -188
  14. package/.claude/skills/collection/SKILL.md +88 -88
  15. package/.claude/skills/douyin/SKILL.md +408 -408
  16. package/.claude/skills/ffmpeg/SKILL.md +164 -164
  17. package/.claude/skills/gen/SKILL.md +279 -275
  18. package/.claude/skills/growth/SKILL.md +90 -90
  19. package/.claude/skills/growth/template/ACCOUNTS.md +14 -14
  20. package/.claude/skills/growth/template/CALENDAR.md +7 -7
  21. package/.claude/skills/growth/template/COMMENTS.md +7 -7
  22. package/.claude/skills/growth/template/GROWTH.md +37 -37
  23. package/.claude/skills/growth/template/PROGRESS.md +4 -4
  24. package/.claude/skills/growth/template/README.md +20 -20
  25. package/.claude/skills/growth/template/TOPICS.md +7 -7
  26. package/.claude/skills/homepage/SKILL.md +177 -177
  27. package/.claude/skills/i18n/SKILL.md +517 -517
  28. package/.claude/skills/ingesting-sources/SKILL.md +94 -94
  29. package/.claude/skills/initializing-kb/SKILL.md +117 -117
  30. package/.claude/skills/instagram/SKILL.md +321 -321
  31. package/.claude/skills/inventory/SKILL.md +328 -328
  32. package/.claude/skills/kol-outreach/SKILL.md +232 -232
  33. package/.claude/skills/kol-outreach/template/campaign/CONFIG.md +60 -60
  34. package/.claude/skills/kol-outreach/template/campaign/KOLS.md +6 -6
  35. package/.claude/skills/kol-outreach/template/campaign/PROGRESS.md +3 -3
  36. package/.claude/skills/kol-outreach/template/campaign/TEMPLATES.md +88 -88
  37. package/.claude/skills/kol-outreach/template/merchant/BRAND.md +36 -36
  38. package/.claude/skills/kol-outreach/template/merchant/CAMPAIGNS.md +6 -6
  39. package/.claude/skills/kol-outreach/template/merchant/MERCHANT_LIMITS.md +16 -16
  40. package/.claude/skills/kol-outreach/template/merchant/PROGRESS.md +4 -4
  41. package/.claude/skills/kol-outreach/template/merchant/README.md +20 -20
  42. package/.claude/skills/linting-the-wiki/SKILL.md +68 -68
  43. package/.claude/skills/logistics/SKILL.md +180 -180
  44. package/.claude/skills/markdown-pdf/SKILL.md +72 -72
  45. package/.claude/skills/merchant/SKILL.md +110 -110
  46. package/.claude/skills/multigrid-poster/SKILL.md +192 -0
  47. package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -0
  48. package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -0
  49. package/.claude/skills/multigrid-poster/scripts/compose.py +116 -0
  50. package/.claude/skills/multigrid-poster/scripts/placeholder.png +0 -0
  51. package/.claude/skills/multigrid-poster/shared/fonts/MaShanZheng-Regular.ttf +0 -0
  52. package/.claude/skills/order/SKILL.md +452 -452
  53. package/.claude/skills/product/SKILL.md +379 -379
  54. package/.claude/skills/product-page/SKILL.md +106 -106
  55. package/.claude/skills/querying-the-wiki/SKILL.md +59 -59
  56. package/.claude/skills/reddit/SKILL.md +277 -277
  57. package/.claude/skills/review/SKILL.md +321 -321
  58. package/.claude/skills/scout/SKILL.md +462 -462
  59. package/.claude/skills/sentinel/SKILL.md +281 -281
  60. package/.claude/skills/shein/SKILL.md +246 -246
  61. package/.claude/skills/shipping/SKILL.md +200 -200
  62. package/.claude/skills/shop-content/SKILL.md +101 -101
  63. package/.claude/skills/shopify/SKILL.md +282 -282
  64. package/.claude/skills/skillify/SKILL.md +114 -114
  65. package/.claude/skills/taobao/SKILL.md +238 -238
  66. package/.claude/skills/tiktok/SKILL.md +381 -381
  67. package/.claude/skills/twitter/SKILL.md +302 -302
  68. package/.claude/skills/updating-related-pages/SKILL.md +65 -65
  69. package/.claude/skills/video-edit/SKILL.md +143 -143
  70. package/.claude/skills/video-gen/SKILL.md +548 -571
  71. package/.claude/skills/video-gen/templates/INDEX.md +78 -78
  72. package/.claude/skills/video-gen/templates/before-after-beauty.md +183 -183
  73. package/.claude/skills/video-gen/templates/drama-fmcg.md +183 -183
  74. package/.claude/skills/video-gen/templates/kol-reaction-food.md +193 -193
  75. package/.claude/skills/video-gen/templates/multi-point-apparel.md +185 -185
  76. package/.claude/skills/video-gen/templates/pain-solution-home.md +184 -184
  77. package/.claude/skills/video-gen/templates/pdp-360-showcase.md +189 -189
  78. package/.claude/skills/video-gen/templates/pdp-feature-highlight.md +182 -182
  79. package/.claude/skills/video-gen/templates/scene-digital.md +183 -183
  80. package/.claude/skills/wechat/SKILL.md +174 -174
  81. package/.claude/skills/xhs/SKILL.md +170 -170
  82. package/README.md +276 -276
  83. package/dist/bin/optima.js +26 -26
  84. package/dist/bin/serve.js +23 -23
  85. package/dist/src/agent.js +4 -4
  86. package/dist/src/system-prompt.js +169 -169
  87. package/dist/src/tools/memory.js +10 -10
  88. package/dist/src/ui/headless.js +7 -7
  89. 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。这由后端自动判断,无需手动指定