yuanflow-cli 0.1.21 → 0.1.23
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 +37 -0
- package/package.json +1 -1
- package/skills/yuanflow-skill/IP/350/277/220/350/220/245/SKILL.md +52 -0
- package/skills/yuanflow-skill/README.md +26 -0
- package/skills/yuanflow-skill/SKILL.md +45 -7
- package/skills/yuanflow-skill//345/270/220/345/217/267/345/256/232/344/275/215/SKILL.md +53 -0
- package/skills/yuanflow-skill//346/226/207/346/241/210/345/210/233/344/275/234/SKILL.md +50 -0
- package/skills/yuanflow-skill//347/233/264/346/222/255/346/212/225/346/265/201/347/255/226/347/225/245/SKILL.md +53 -0
- package/skills/yuanflow-skill//347/233/264/346/222/255/350/257/235/346/234/257/347/224/237/346/210/220/SKILL.md +54 -0
- package/skills/yuanflow-skill//350/207/252/345/252/222/344/275/223/346/265/217/350/247/210/345/231/250/350/207/252/345/212/250/345/214/226/SKILL.md +241 -0
- package/skills/yuanflow-skill//350/207/252/345/252/222/344/275/223/347/237/245/350/257/206/345/272/223/SKILL.md +10 -0
- package/skills/yuanflow-skill//350/247/206/351/242/221/346/212/225/346/265/201/347/255/226/347/225/245/SKILL.md +53 -0
- package/skills/yuanflow-skill//351/200/211/351/242/230/347/255/226/345/210/222/SKILL.md +54 -0
- package/src/agent-protocol.js +3 -0
- package/src/browser-tools.js +413 -0
- package/src/cli.js +19 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 自媒体浏览器自动化
|
|
3
|
+
description: Use when the user asks to automate self-media platform browser work such as Douyin, Xiaohongshu, Weibo, Bilibili, TikTok, YouTube, or Twitter/X account login-state management, Cookie/profile storage, profile/page collection, creator account data browsing, draft creation, or publishing works. Do not use for ordinary web browsing, general search, or screenshots.
|
|
4
|
+
tags:
|
|
5
|
+
- browser-automation
|
|
6
|
+
- self-media
|
|
7
|
+
- profile
|
|
8
|
+
- cookie
|
|
9
|
+
emoji: 🧭
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 自媒体浏览器自动化
|
|
13
|
+
|
|
14
|
+
本 Skill 只用于自媒体平台的专用浏览器自动化:账号登录态隔离、Cookie/profile 本地保存、账号资料浏览采集、作品页面收集、草稿创建、作品发布前检查和发布执行。
|
|
15
|
+
|
|
16
|
+
不要把它和 YuanFlow 已有的通用浏览器能力混在一起:
|
|
17
|
+
|
|
18
|
+
- `浏览器启动模式`:通用网页浏览、打开页面、可见窗口、普通搜索。
|
|
19
|
+
- `浏览器CDP`:连接已有 Chrome、扫描 CDP 端口、共享浏览器实例。
|
|
20
|
+
- `自媒体浏览器自动化`:面向抖音、小红书、微博、Bilibili、TikTok、YouTube、Twitter/X 等平台的账号和发布流程。
|
|
21
|
+
|
|
22
|
+
普通网页搜索、资料查询、截图、打开页面,不使用本 Skill。只有任务涉及自媒体平台账号、登录态、平台页面采集、Cookie/profile、作品发布或草稿保存时,才使用本 Skill。
|
|
23
|
+
|
|
24
|
+
## 调用优先级
|
|
25
|
+
|
|
26
|
+
在 YuanFlow 主程序内,优先调用受控工具:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"action": "task-plan",
|
|
31
|
+
"platform": "douyin",
|
|
32
|
+
"task": "publish",
|
|
33
|
+
"account": "main"
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
如果当前 Agent 没有 `yuanflow_browser_automation`,再使用 `yuanflow_cli_call` 调用托管 CLI:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"args": [
|
|
42
|
+
"browser",
|
|
43
|
+
"task-plan",
|
|
44
|
+
"--platform",
|
|
45
|
+
"douyin",
|
|
46
|
+
"--task",
|
|
47
|
+
"publish",
|
|
48
|
+
"--account",
|
|
49
|
+
"main",
|
|
50
|
+
"--format",
|
|
51
|
+
"agent-json"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
外部命令:
|
|
57
|
+
|
|
58
|
+
```powershell
|
|
59
|
+
yuanflow-cli browser task-plan --platform douyin --task publish --account main --format agent-json
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 固定边界
|
|
63
|
+
|
|
64
|
+
- Cookie、localStorage、sessionStorage、浏览器 profile 只保存在本地受控目录,不上传、不输出、不写入报告。
|
|
65
|
+
- 扫码、验证码、人机验证、二次验证、风控提醒,必须暂停并让用户手动处理。
|
|
66
|
+
- 发布、删除、修改账号资料、提交草稿、定时发布等会改变线上状态的动作,必须先向用户复述并等待确认。
|
|
67
|
+
- 不做绕过验证码、绕过风控、刷量、批量骚扰、未授权采集或平台禁止的自动化。
|
|
68
|
+
- 不直接调用 shell 执行裸 Playwright、Chrome 调试命令或读取浏览器敏感目录;优先走受控工具。
|
|
69
|
+
|
|
70
|
+
## 支持平台
|
|
71
|
+
|
|
72
|
+
当前受控协议支持:
|
|
73
|
+
|
|
74
|
+
| 平台参数 | 平台 |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| `douyin` | 抖音 |
|
|
77
|
+
| `xiaohongshu` | 小红书 |
|
|
78
|
+
| `weibo` | 微博 |
|
|
79
|
+
| `bilibili` | Bilibili |
|
|
80
|
+
| `tiktok` | TikTok |
|
|
81
|
+
| `youtube` | YouTube |
|
|
82
|
+
| `twitter` | Twitter/X |
|
|
83
|
+
|
|
84
|
+
## 本地目录
|
|
85
|
+
|
|
86
|
+
默认本地根目录:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
%APPDATA%\YuanFlow\runtime_tools\browser-automation
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
单账号目录:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
%APPDATA%\YuanFlow\runtime_tools\browser-automation\accounts\<platform>\<account>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
关键子目录:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
profile 浏览器 profile
|
|
102
|
+
cookies Cookie 状态文件目录,仅保存本地,不输出值
|
|
103
|
+
tasks 任务预检、草稿、发布记录
|
|
104
|
+
snapshots 页面采集和帐号快照
|
|
105
|
+
downloads 浏览器下载文件
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 常用命令
|
|
109
|
+
|
|
110
|
+
查看 profile 和 Cookie 路径:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"args": [
|
|
115
|
+
"browser",
|
|
116
|
+
"profile-path",
|
|
117
|
+
"--platform",
|
|
118
|
+
"douyin",
|
|
119
|
+
"--account",
|
|
120
|
+
"main",
|
|
121
|
+
"--format",
|
|
122
|
+
"agent-json"
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
初始化账号目录:
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"args": [
|
|
132
|
+
"browser",
|
|
133
|
+
"session-init",
|
|
134
|
+
"--platform",
|
|
135
|
+
"xiaohongshu",
|
|
136
|
+
"--account",
|
|
137
|
+
"main",
|
|
138
|
+
"--format",
|
|
139
|
+
"agent-json"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
查看 Cookie/profile 规则:
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"args": [
|
|
149
|
+
"browser",
|
|
150
|
+
"cookie-policy",
|
|
151
|
+
"--platform",
|
|
152
|
+
"douyin",
|
|
153
|
+
"--account",
|
|
154
|
+
"main",
|
|
155
|
+
"--format",
|
|
156
|
+
"agent-json"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
生成发布任务计划:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"args": [
|
|
166
|
+
"browser",
|
|
167
|
+
"task-plan",
|
|
168
|
+
"--platform",
|
|
169
|
+
"douyin",
|
|
170
|
+
"--task",
|
|
171
|
+
"publish",
|
|
172
|
+
"--account",
|
|
173
|
+
"main",
|
|
174
|
+
"--format",
|
|
175
|
+
"agent-json"
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
预检发布参数:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"args": [
|
|
185
|
+
"browser",
|
|
186
|
+
"dry-run",
|
|
187
|
+
"--platform",
|
|
188
|
+
"xiaohongshu",
|
|
189
|
+
"--task",
|
|
190
|
+
"publish",
|
|
191
|
+
"--account",
|
|
192
|
+
"main",
|
|
193
|
+
"--file",
|
|
194
|
+
"D:\\media\\post.mp4",
|
|
195
|
+
"--title",
|
|
196
|
+
"标题",
|
|
197
|
+
"--caption",
|
|
198
|
+
"正文",
|
|
199
|
+
"--cover",
|
|
200
|
+
"D:\\media\\cover.png",
|
|
201
|
+
"--format",
|
|
202
|
+
"agent-json"
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 任务流程
|
|
208
|
+
|
|
209
|
+
### 登录或保存登录态
|
|
210
|
+
|
|
211
|
+
1. 先执行 `profile-path` 或 `session-init` 获取账号目录。
|
|
212
|
+
2. 使用该账号专属 profile 打开平台登录页。
|
|
213
|
+
3. 遇到扫码、验证码或风控,暂停并让用户手动处理。
|
|
214
|
+
4. 登录完成后只报告“已保存本地登录态”和 profile 路径,不输出 Cookie 内容。
|
|
215
|
+
|
|
216
|
+
### 账号资料或页面采集
|
|
217
|
+
|
|
218
|
+
1. 确认平台、帐号别名、采集目标 URL 或账号标识。
|
|
219
|
+
2. 使用 `task-plan --task collect` 或 `task-plan --task account_snapshot` 获取计划。
|
|
220
|
+
3. 只采集公开可见页面信息、页面文本、作品列表和必要截图。
|
|
221
|
+
4. 保存到 `snapshots` 目录,后续可与历史快照对比。
|
|
222
|
+
|
|
223
|
+
### 作品发布
|
|
224
|
+
|
|
225
|
+
1. 发布前必须确认平台、帐号、素材、标题、正文、封面、话题、发布时间。
|
|
226
|
+
2. 先执行 `dry-run --task publish` 检查缺失项。
|
|
227
|
+
3. 打开发布入口并填写内容。
|
|
228
|
+
4. 到最终发布按钮前暂停,复述即将发布的内容。
|
|
229
|
+
5. 用户确认后再点击最终发布或保存草稿。
|
|
230
|
+
6. 记录发布结果、作品链接或失败原因到 `tasks` 目录。
|
|
231
|
+
|
|
232
|
+
## 输出要求
|
|
233
|
+
|
|
234
|
+
最终回复要简短说明:
|
|
235
|
+
|
|
236
|
+
- 使用的平台和帐号别名。
|
|
237
|
+
- 本次任务类型。
|
|
238
|
+
- profile、任务记录或快照保存路径。
|
|
239
|
+
- 是否需要用户手动处理登录、验证码、风控或最终发布确认。
|
|
240
|
+
|
|
241
|
+
失败时说明卡在哪一步、调用了什么受控命令、返回的 `error.code` 和 `error.message`。不要泄露 token、Authorization header、Cookie、localStorage 或 sessionStorage。
|
|
@@ -105,3 +105,13 @@ yuanflow-cli knowledge rules \
|
|
|
105
105
|
- v2 接口不要求 `task_intent`;旧字段只作为兼容字段,不要在新调用里默认填写。
|
|
106
106
|
- `packs`、`rules` 的 `data` 可能直接是数组,不要假设固定 `{ packs: [] }` 或 `{ rules: [] }` 结构。
|
|
107
107
|
- 如果用户只是在问“有什么知识库方向”,先用 `knowledge docs`。
|
|
108
|
+
|
|
109
|
+
## HTML 可视化
|
|
110
|
+
|
|
111
|
+
完成知识库查询、内容创作、评估或策略输出后,必须询问:
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
是否需要我把本次方案生成 HTML 可视化汇总?
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
只有用户明确确认后,才读取并使用 `HTML报告生成` Skill。不要默认生成 HTML。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 视频投流策略
|
|
3
|
+
description: 当用户需要为短视频、图文视频或内容素材制定投流目标、人群、预算、素材分层、测试节奏和数据调整策略时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 视频投流策略
|
|
7
|
+
|
|
8
|
+
本 Skill 用于制定视频内容投流策略。执行时必须先查历史资产,再查自媒体知识库,最后结合用户本次目标输出可执行投放方案。
|
|
9
|
+
|
|
10
|
+
## 固定流程
|
|
11
|
+
|
|
12
|
+
1. 先读取 `个人创作库`。
|
|
13
|
+
- 优先检查 `library/publishing-plans/`、`library/performance-reviews/`、`library/best-works/`、`library/topics/`、`library/copywriting/`。
|
|
14
|
+
- 如果发现历史投放计划、发布复盘、表现好的素材、选题或转化文案,标记为“历史参考记录”。
|
|
15
|
+
- 如果没有命中,说明“未发现可用历史参考记录”,继续下一步。
|
|
16
|
+
2. 调用 `自媒体知识库`。
|
|
17
|
+
- 先查 `knowledge docs` 或 `knowledge entry`,根据平台、投放目标、预算、人群和素材类型构造 `domain` 和 `content_goal`。
|
|
18
|
+
- 按返回的 `next_actions` 分层查看 `packs`、`rules` 或 `rule-detail`,直到拿到足够的方法摘要。
|
|
19
|
+
- 不要自己拼 SQL,不要跳过知识库直接凭空输出。
|
|
20
|
+
3. 结合用户要求、历史参考记录和知识库结果,输出视频投流策略。
|
|
21
|
+
4. 输出后询问用户是否满意,是否要记录到 `个人创作库`。
|
|
22
|
+
|
|
23
|
+
## 核心拆解
|
|
24
|
+
|
|
25
|
+
- 投放目标:曝光、涨粉、线索、成交或复购。
|
|
26
|
+
- 目标人群:基础人群、兴趣人群、相似人群、重定向人群。
|
|
27
|
+
- 预算区间:测试预算、放量预算、止损线。
|
|
28
|
+
- 素材层级:主素材、变体素材、补充素材、淘汰素材。
|
|
29
|
+
- 观察指标:播放、完播、互动、点击、留资、成交。
|
|
30
|
+
- 调整节奏:观察周期、加预算条件、降预算条件、停投条件。
|
|
31
|
+
|
|
32
|
+
## 输出要求
|
|
33
|
+
|
|
34
|
+
- 优先按“目标 / 人群 / 素材 / 预算 / 指标 / 调整规则”输出。
|
|
35
|
+
- 指标要和目标对应,不能乱配。
|
|
36
|
+
- 如果没有预算信息,要明确写出“需补充预算区间”。
|
|
37
|
+
- 不把自然流量逻辑和投流逻辑混为一谈。
|
|
38
|
+
|
|
39
|
+
## 结尾固定询问
|
|
40
|
+
|
|
41
|
+
输出完成后必须询问:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
这版视频投流策略是否满意?如果满意,我可以把本次结果整理并记录到个人创作库中。
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
同时询问:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
是否需要我把本次方案生成 HTML 可视化汇总?
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
只有用户明确确认后,才读取并使用 `个人创作库` 或 `HTML报告生成` Skill。不要默认写入或默认生成 HTML。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 选题策划
|
|
3
|
+
description: 当用户需要围绕目标受众、账号定位、内容目标、热点或系列方向产出选题池并排序优先级时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 选题策划
|
|
7
|
+
|
|
8
|
+
本 Skill 用于产出选题池、系列选题和选题优先级。执行时必须先查历史资产,再查自媒体知识库,最后结合用户本次目标输出可执行选题。
|
|
9
|
+
|
|
10
|
+
## 固定流程
|
|
11
|
+
|
|
12
|
+
1. 先读取 `个人创作库`。
|
|
13
|
+
- 优先检查 `library/topics/`、`library/titles/`、`library/account-positioning/`、`library/performance-reviews/`、`library/best-works/`。
|
|
14
|
+
- 如果发现历史选题、标题、账号定位、爆款复盘或表现好的内容,标记为“历史参考记录”。
|
|
15
|
+
- 如果没有命中,说明“未发现可用历史参考记录”,继续下一步。
|
|
16
|
+
2. 调用 `自媒体知识库`。
|
|
17
|
+
- 先查 `knowledge docs` 或 `knowledge entry`,根据平台、受众、内容目标和选题方向构造 `domain` 和 `content_goal`。
|
|
18
|
+
- 按返回的 `next_actions` 分层查看 `packs`、`rules` 或 `rule-detail`,直到拿到足够的方法摘要。
|
|
19
|
+
- 不要自己拼 SQL,不要跳过知识库直接凭空输出。
|
|
20
|
+
3. 结合用户要求、历史参考记录和知识库结果,输出选题策划结果。
|
|
21
|
+
4. 输出后询问用户是否满意,是否要记录到 `个人创作库`。
|
|
22
|
+
|
|
23
|
+
## 标准产出
|
|
24
|
+
|
|
25
|
+
- 选题标题。
|
|
26
|
+
- 选题意图。
|
|
27
|
+
- 适配平台。
|
|
28
|
+
- 建议形式。
|
|
29
|
+
- 适配人群。
|
|
30
|
+
- 为什么值得做。
|
|
31
|
+
- 优先级。
|
|
32
|
+
|
|
33
|
+
## 输出要求
|
|
34
|
+
|
|
35
|
+
- 至少区分“高优先级 / 中优先级 / 储备”。
|
|
36
|
+
- 对每个选题说明面向什么人、解决什么问题。
|
|
37
|
+
- 如果用户只给了模糊方向,要先把方向拆开再出选题。
|
|
38
|
+
- 不只给标题,不把热点堆砌成无差别清单。
|
|
39
|
+
|
|
40
|
+
## 结尾固定询问
|
|
41
|
+
|
|
42
|
+
输出完成后必须询问:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
这组选题是否满意?如果满意,我可以把本次结果整理并记录到个人创作库中。
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
同时询问:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
是否需要我把本次方案生成 HTML 可视化汇总?
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
只有用户明确确认后,才读取并使用 `个人创作库` 或 `HTML报告生成` Skill。不要默认写入或默认生成 HTML。
|
package/src/agent-protocol.js
CHANGED
|
@@ -3,6 +3,7 @@ import { listShortcuts } from './shortcuts.js';
|
|
|
3
3
|
import { listCommentCommands } from './comment-collector.js';
|
|
4
4
|
import { listKnowledgeCommands } from './knowledge-tools.js';
|
|
5
5
|
import { listOssCommands } from './oss-tools.js';
|
|
6
|
+
import { listBrowserCommands } from './browser-tools.js';
|
|
6
7
|
import { listSearchCommands, listWorkCommands } from './work-tools.js';
|
|
7
8
|
|
|
8
9
|
const ERROR_MAP = [
|
|
@@ -105,6 +106,7 @@ export function buildCommandRegistry() {
|
|
|
105
106
|
const searchCommands = listSearchCommands();
|
|
106
107
|
const knowledgeCommands = listKnowledgeCommands();
|
|
107
108
|
const ossCommands = listOssCommands();
|
|
109
|
+
const browserCommands = listBrowserCommands();
|
|
108
110
|
return [
|
|
109
111
|
...shortcuts,
|
|
110
112
|
...endpoints,
|
|
@@ -113,6 +115,7 @@ export function buildCommandRegistry() {
|
|
|
113
115
|
...searchCommands,
|
|
114
116
|
...knowledgeCommands,
|
|
115
117
|
...ossCommands,
|
|
118
|
+
...browserCommands,
|
|
116
119
|
].sort((left, right) => left.key.localeCompare(right.key));
|
|
117
120
|
}
|
|
118
121
|
|