yuanflow-cli 0.1.41 → 0.1.42
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 +3 -3
- package/package.json +1 -1
- package/skills/yuanflow-skill/README.md +2 -2
- package/skills/yuanflow-skill/SKILL.md +4 -4
- package/skills/yuanflow-skill/YuanFlow/346/226/207/344/273/266/344/270/255/350/275/254/345/267/245/345/205/267/SKILL.md +5 -5
- package/skills/yuanflow-skill/yuanflow-cli/SKILL.md +5 -5
- package/skills/yuanflow-skill//344/270/252/344/272/272/345/210/233/344/275/234/345/272/223/SKILL.md +2 -2
- package/skills/yuanflow-skill//344/275/234/345/223/201/344/270/213/350/275/275/347/273/274/345/220/210/345/267/245/345/205/267/SKILL.md +3 -3
- package/skills/yuanflow-skill//344/275/234/345/223/201/350/257/204/350/256/272/351/207/207/351/233/206/SKILL.md +3 -3
- package/skills/yuanflow-skill//344/275/234/345/223/201/350/257/246/346/203/205/350/216/267/345/217/226/345/267/245/345/205/267/SKILL.md +3 -3
- package/skills/yuanflow-skill//345/205/254/344/274/227/345/217/267/347/224/237/346/210/220/344/270/216/345/217/221/345/270/203/SKILL.md +3 -3
- package/skills/yuanflow-skill//345/205/254/344/274/227/345/217/267/347/224/237/346/210/220/344/270/216/345/217/221/345/270/203/tests/test_wechat_draft.py +176 -0
- package/skills/yuanflow-skill//345/260/217/347/272/242/344/271/246/350/277/220/350/220/245/SKILL.md +1 -1
- package/skills/yuanflow-skill//345/270/220/345/217/267/347/233/221/346/216/247/SKILL.md +3 -3
- package/skills/yuanflow-skill//347/224/237/345/233/276/346/212/200/350/203/275/SKILL.md +1 -1
- package/skills/yuanflow-skill//347/273/274/345/220/210/346/220/234/347/264/242/345/267/245/345/205/267/SKILL.md +3 -3
- package/skills/yuanflow-skill//347/273/274/345/220/210/347/224/250/346/210/267/346/220/234/347/264/242/345/267/245/345/205/267/SKILL.md +3 -3
- 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 +1 -1
- package/skills/yuanflow-skill//350/207/252/345/252/222/344/275/223/347/237/245/350/257/206/345/272/223/SKILL.md +4 -4
- package/skills/yuanflow-skill//350/247/206/350/247/211/347/220/206/350/247/243/SKILL.md +3 -3
- package/skills/yuanflow-skill//350/247/206/351/242/221/346/212/225/346/265/201/347/255/226/347/225/245/SKILL.md +1 -1
- package/skills/yuanflow-skill//350/247/206/351/242/221/346/213/206/350/247/243/SKILL.md +5 -5
- package/skills/yuanflow-skill//350/247/206/351/242/221/346/231/272/350/203/275/345/211/252/350/276/221/SKILL.md +4 -4
- package/skills/yuanflow-skill//351/237/263/350/247/206/351/242/221/345/234/250/347/272/277/350/275/254/346/226/207/345/255/227/SKILL.md +2 -2
- package/skills/yuanflow-skill//351/243/236/344/271/246/345/256/230/346/226/271/346/212/200/350/203/275/SKILL.md +1 -1
- package/src/cli.js +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ YuanFlow 的 npm 包,包含两个命令入口:
|
|
|
4
4
|
|
|
5
5
|
- `yuanflow-cli`:社媒 API 转 CLI,覆盖完整 registry、快捷命令、schema、dry-run 和 agent-json 输出。
|
|
6
6
|
- `yuanflow-skill`:把 `YuanFlow-skill` 注入到本机支持的 AI Agent skills 目录。
|
|
7
|
-
- `飞书官方技能`:YuanFlow
|
|
7
|
+
- `飞书官方技能`:YuanFlow-main 内置环境通过受控工具托管安装并调用飞书官方 `@larksuite/cli`,npm 包只提供 Skill 说明,不复制官方 CLI 源码。
|
|
8
8
|
|
|
9
9
|
## 安装
|
|
10
10
|
|
|
@@ -65,7 +65,7 @@ yuanflow-cli list douyin
|
|
|
65
65
|
YUANCHUANG_API_TOKEN=<你的令牌>
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
token 优先级:`--token` > `YUANCHUANG_API_TOKEN` > 本地 `config.token`。独立 CLI 用户可以使用环境变量或 `config set-token`;在 YuanFlow
|
|
68
|
+
token 优先级:`--token` > `YUANCHUANG_API_TOKEN` > 本地 `config.token`。独立 CLI 用户可以使用环境变量或 `config set-token`;在 YuanFlow-main 内置环境使用时,token 由 YuanFlow-main 内置环境注入,不需要手动配置。本地图片/视频上传统一使用 YuanFlow 文件中转,不需要用户配置第三方平台 Key。
|
|
69
69
|
|
|
70
70
|
### AI 模型命令
|
|
71
71
|
|
|
@@ -369,7 +369,7 @@ yuanflow-cli browser dry-run --platform xiaohongshu --task publish --account mai
|
|
|
369
369
|
|
|
370
370
|
### 生图技能
|
|
371
371
|
|
|
372
|
-
`生图技能` 随 npm 包安装到 Skill bundle。YuanFlow
|
|
372
|
+
`生图技能` 随 npm 包安装到 Skill bundle。YuanFlow-main 内置环境优先使用受控工具 `yuanflow_image_request`,自动注入当前用户 token 并缓存返回图片。
|
|
373
373
|
|
|
374
374
|
- 生成图片:`/v1/images/generations`,主模型 `gpt-image-2-c`,备用模型 `gpt-image-2`,请求体使用 `prompt`。
|
|
375
375
|
- 编辑图片:`/v1/images/edits`,必须使用 multipart/form-data 上传本地图片文件。
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
|
|
|
10
10
|
- `视觉理解/`:通用型图片、视频画面理解 Skill,走 `yuanflow-cli ai qwen3-vl-plus`,支持图片/视频 URL 和本地图片/视频上传。
|
|
11
11
|
- `视频拆解/`:自媒体创作场景的对标视频拆解 Skill,先查自媒体知识库对标拆解规则,再用 `qwen3-vl-plus` 上传视频并按规则拆解。
|
|
12
12
|
- `YuanFlow文件中转工具/`:YuanFlow 文件中转、签名链接、对象复制 Skill,内部兼容命令走 `yuanflow-cli oss`。
|
|
13
|
-
- `生图技能/`:图片生成与编辑 Skill,优先走 YuanFlow
|
|
13
|
+
- `生图技能/`:图片生成与编辑 Skill,优先走 YuanFlow-main 内置环境的 `yuanflow_image_request`。
|
|
14
14
|
- `公众号生成与发布/`:公众号文章创作、主题预览、微信内联 HTML 排版、正文图片上传和草稿箱推送 Skill。
|
|
15
15
|
- `小红书运营/`:小红书选题调研、笔记搜索、账号分析、评论采集、文案创作、发布前检查和互动操作 Skill;不建议浏览器自动发布作品,除非用户明确无视平台识别和限流风险并强制要求。
|
|
16
16
|
- `视频智能剪辑/`:主音频 + B-roll 素材智能剪辑 Skill,先查自媒体知识库的视频剪辑策略,保存 `strategy_snapshot.json`,再通过 ASR/forced alignment 导入 `audio_alignment.json`,按 1 秒 1 帧抽帧并回写视觉理解,由 Agent 生成 `timeline_plan` 和 EDL,交给 `yuanflow-cli video` 校验和渲染。
|
|
@@ -55,7 +55,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
|
|
|
55
55
|
|
|
56
56
|
这套 Skill 同时支持两种环境:
|
|
57
57
|
|
|
58
|
-
- YuanFlow
|
|
58
|
+
- YuanFlow-main 内置环境:优先使用内置工具 `yuanflow_cli_call`、`yuanflow_gateway_request` 或 `yuanflow_image_request`,token 由 YuanFlow-main 内置环境注入,不要求用户安装 npm 或配置 token。
|
|
59
59
|
- 外部 Agent 内:优先使用本地 `yuanflow-cli`;如果本地没有,再通过 npm 安装。
|
|
60
60
|
|
|
61
61
|
外部 Agent 独立使用时,推荐环境变量:
|
|
@@ -47,9 +47,9 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
|
|
|
47
47
|
|
|
48
48
|
执行本 Skill 前,先判断当前运行环境:
|
|
49
49
|
|
|
50
|
-
1. 如果当前 Agent 可用 YuanFlow 内置工具,例如 `yuanflow_cli_call`、`yuanflow_gateway_request` 或 `yuanflow_image_request`,优先使用 YuanFlow 内置工具。不要要求用户安装 npm,也不要要求用户配置 token。
|
|
51
|
-
2. 如果当前不在 YuanFlow
|
|
52
|
-
3. 如果当前不在 YuanFlow
|
|
50
|
+
1. 如果当前 Agent 可用 YuanFlow-main 内置工具,例如 `yuanflow_cli_call`、`yuanflow_gateway_request` 或 `yuanflow_image_request`,优先使用 YuanFlow-main 内置工具。不要要求用户安装 npm,也不要要求用户配置 token。
|
|
51
|
+
2. 如果当前不在 YuanFlow-main 内置环境,且本地可执行 `yuanflow-cli --help`,使用本地 CLI。
|
|
52
|
+
3. 如果当前不在 YuanFlow-main 内置环境,且本地没有 `yuanflow-cli`,再提示用户安装 `npm install -g yuanflow-cli`。
|
|
53
53
|
|
|
54
54
|
不要在回复、日志或文件中暴露 token。
|
|
55
55
|
|
|
@@ -213,7 +213,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
|
|
|
213
213
|
|
|
214
214
|
- 生成图片、画图、出图、做海报、生成视觉素材。
|
|
215
215
|
- 编辑图片、修改本地图片、基于已有图片做变化。
|
|
216
|
-
- 调用 YuanFlow 内置图片生成或图片编辑接口。
|
|
216
|
+
- 调用 YuanFlow-main 内置图片生成或图片编辑接口。
|
|
217
217
|
|
|
218
218
|
子 Skill 名称:
|
|
219
219
|
|
|
@@ -10,11 +10,11 @@ emoji: 🔗
|
|
|
10
10
|
|
|
11
11
|
## 环境判断
|
|
12
12
|
|
|
13
|
-
1. 在 YuanFlow
|
|
13
|
+
1. 在 YuanFlow-main 内置环境,优先调用内置工具 `yuanflow_cli_call`。
|
|
14
14
|
2. 在外部 Agent 中,如果本地有 `yuanflow-cli`,直接执行 CLI。
|
|
15
15
|
3. 如果外部环境没有 CLI,再提示用户安装 `npm install -g yuanflow-cli`。
|
|
16
16
|
|
|
17
|
-
不要要求用户手动填写 token。YuanFlow
|
|
17
|
+
不要要求用户手动填写 token。YuanFlow-main 内置环境会注入认证 token;外部 CLI 使用 `YUANCHUANG_API_TOKEN`。
|
|
18
18
|
|
|
19
19
|
## 能做什么
|
|
20
20
|
|
|
@@ -70,9 +70,9 @@ yuanflow-cli oss copy \
|
|
|
70
70
|
- `--source-bucket`:源 bucket。
|
|
71
71
|
- `--target-bucket`:目标 bucket。
|
|
72
72
|
|
|
73
|
-
## YuanFlow 内置工具调用示例
|
|
73
|
+
## YuanFlow-main 内置工具调用示例
|
|
74
74
|
|
|
75
|
-
在 YuanFlow
|
|
75
|
+
在 YuanFlow-main 内置环境,调用 `yuanflow_cli_call`,参数数组不要包含 token:
|
|
76
76
|
|
|
77
77
|
```json
|
|
78
78
|
{
|
|
@@ -95,4 +95,4 @@ yuanflow-cli oss copy \
|
|
|
95
95
|
- 不上传密钥、cookie、账号凭据、配置文件、隐私文件。
|
|
96
96
|
- 不把签名 URL 写入公开文档或长期日志。
|
|
97
97
|
- 返回结果中优先说明 `bucket`、`key`、`expires_at`,只有用户确实需要访问链接时才展示 `signed_url`。
|
|
98
|
-
- 在 YuanFlow
|
|
98
|
+
- 在 YuanFlow-main 内置环境中,如果工具策略限制本地文件上传,不要绕过限制,改为让用户通过受控上传入口完成。
|
|
@@ -22,12 +22,12 @@ emoji: ⚙️
|
|
|
22
22
|
|
|
23
23
|
优先级如下:
|
|
24
24
|
|
|
25
|
-
1. YuanFlow 内置工具:如果当前工具列表里存在 `yuanflow_cli_call`,使用它调用社媒接口。
|
|
25
|
+
1. YuanFlow-main 内置工具:如果当前工具列表里存在 `yuanflow_cli_call`,使用它调用社媒接口。
|
|
26
26
|
2. YuanFlow 网关工具:如果只有 `yuanflow_gateway_request`,可用它访问受控服务接口。
|
|
27
27
|
3. 本地 CLI:如果当前环境可执行 `yuanflow-cli --help`,使用本地 CLI。
|
|
28
28
|
4. 安装提示:只有以上都不可用时,才提示用户安装 `npm install -g yuanflow-cli`。
|
|
29
29
|
|
|
30
|
-
在 YuanFlow
|
|
30
|
+
在 YuanFlow-main 内置环境,不要提示用户配置 token;token 由 YuanFlow-main 内置环境注入。
|
|
31
31
|
在外部 Agent 环境中,使用环境变量 `YUANCHUANG_API_TOKEN`,也可以使用本地 `config set-token`。
|
|
32
32
|
|
|
33
33
|
## 外部 Agent 安装和更新
|
|
@@ -88,7 +88,7 @@ yuanflow-cli douyin hot-search
|
|
|
88
88
|
|
|
89
89
|
## Agent 调用规则
|
|
90
90
|
|
|
91
|
-
给 AI Agent 使用时,先查命令和 schema,再调用接口。YuanFlow 内置环境下,优先调用 `yuanflow_cli_call`;外部 Agent 环境下,优先调用 `yuanflow-cli`。
|
|
91
|
+
给 AI Agent 使用时,先查命令和 schema,再调用接口。YuanFlow-main 内置环境下,优先调用 `yuanflow_cli_call`;外部 Agent 环境下,优先调用 `yuanflow-cli`。
|
|
92
92
|
|
|
93
93
|
```powershell
|
|
94
94
|
yuanflow-cli commands list
|
|
@@ -200,7 +200,7 @@ yuanflow-cli comments collect --platform douyin --target "https://v.douyin.com/x
|
|
|
200
200
|
- `--prefer fallback`:主接口失败时切换备用接口。
|
|
201
201
|
- `--extra`:JSON 字符串,用于公众号 `content_id` 等补充参数。
|
|
202
202
|
|
|
203
|
-
在 YuanFlow
|
|
203
|
+
在 YuanFlow-main 内置环境,用 `yuanflow_cli_call` 调用时传参数数组:
|
|
204
204
|
|
|
205
205
|
```json
|
|
206
206
|
{
|
|
@@ -237,7 +237,7 @@ yuanflow-cli schema search.xiaohongshu.content
|
|
|
237
237
|
yuanflow-cli schema search.instagram.users
|
|
238
238
|
```
|
|
239
239
|
|
|
240
|
-
YuanFlow
|
|
240
|
+
YuanFlow-main 内置环境使用时仍通过 `yuanflow_cli_call` 传参数数组,token 由 YuanFlow-main 内置环境注入。
|
|
241
241
|
|
|
242
242
|
### 小红书
|
|
243
243
|
|
package/skills/yuanflow-skill//344/270/252/344/272/272/345/210/233/344/275/234/345/272/223/SKILL.md
CHANGED
|
@@ -142,9 +142,9 @@ meta/
|
|
|
142
142
|
2. 读取对应内容和 `performance-reviews/`。
|
|
143
143
|
3. 总结可复用结构、表达方式、失败点和下一次优化方向。
|
|
144
144
|
|
|
145
|
-
## YuanFlow
|
|
145
|
+
## YuanFlow-main 内置环境使用方式
|
|
146
146
|
|
|
147
|
-
在 YuanFlow
|
|
147
|
+
在 YuanFlow-main 内置环境,本 Skill 是托管 CLI Skill 的一个整体目录。不要把 `library/` 下的分类当成独立 Skill 安装,也不要在子目录里创建 `SKILL.md`。
|
|
148
148
|
|
|
149
149
|
如果需要写入文件,优先使用当前 Skill 的真实目录:
|
|
150
150
|
|
|
@@ -15,7 +15,7 @@ emoji: ⬇️
|
|
|
15
15
|
|
|
16
16
|
# 作品下载综合工具
|
|
17
17
|
|
|
18
|
-
本技能把用户的“下载作品、获取播放地址、获取视频流信息”需求稳定映射到 `yuanflow-cli works download`。在 YuanFlow
|
|
18
|
+
本技能把用户的“下载作品、获取播放地址、获取视频流信息”需求稳定映射到 `yuanflow-cli works download`。在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`;它会由 YuanFlow-main 内置环境注入 `YUANCHUANG_API_TOKEN`,不要让用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
19
19
|
|
|
20
20
|
## 什么时候使用
|
|
21
21
|
|
|
@@ -29,11 +29,11 @@ emoji: ⬇️
|
|
|
29
29
|
|
|
30
30
|
## 调用优先级
|
|
31
31
|
|
|
32
|
-
1. YuanFlow
|
|
32
|
+
1. YuanFlow-main 内置环境:调用 `yuanflow_cli_call`,参数数组从 `works download` 开始。
|
|
33
33
|
2. 外部 Agent 且本机有 CLI:执行 `yuanflow-cli works download ...`。
|
|
34
34
|
3. 外部 Agent 且没有 CLI:再提示用户安装 `npm install -g yuanflow-cli`。
|
|
35
35
|
|
|
36
|
-
YuanFlow
|
|
36
|
+
YuanFlow-main 内置环境调用示例:
|
|
37
37
|
|
|
38
38
|
```json
|
|
39
39
|
{
|
|
@@ -23,7 +23,7 @@ emoji: 💬
|
|
|
23
23
|
|
|
24
24
|
# 作品评论采集
|
|
25
25
|
|
|
26
|
-
本技能把用户的评论采集需求稳定映射到 `yuanflow-cli comments collect`。在 YuanFlow
|
|
26
|
+
本技能把用户的评论采集需求稳定映射到 `yuanflow-cli comments collect`。在 YuanFlow-main 内置环境,优先使用受控工具 `yuanflow_cli_call`;它会由 YuanFlow-main 内置环境注入 `YUANCHUANG_API_TOKEN`,不要让用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
27
27
|
|
|
28
28
|
## 什么时候使用
|
|
29
29
|
|
|
@@ -37,11 +37,11 @@ emoji: 💬
|
|
|
37
37
|
|
|
38
38
|
## 调用优先级
|
|
39
39
|
|
|
40
|
-
1. YuanFlow
|
|
40
|
+
1. YuanFlow-main 内置环境:调用 `yuanflow_cli_call`,参数数组从 `comments collect` 开始。
|
|
41
41
|
2. 外部 Agent 且本机有 CLI:执行 `yuanflow-cli comments collect ...`。
|
|
42
42
|
3. 外部 Agent 且没有 CLI:再提示用户安装 `npm install -g yuanflow-cli`。
|
|
43
43
|
|
|
44
|
-
YuanFlow
|
|
44
|
+
YuanFlow-main 内置环境调用示例:
|
|
45
45
|
|
|
46
46
|
```json
|
|
47
47
|
{
|
|
@@ -12,7 +12,7 @@ emoji: 📄
|
|
|
12
12
|
|
|
13
13
|
# 作品详情获取工具
|
|
14
14
|
|
|
15
|
-
本技能把用户的“查询单个作品详情、解析作品链接、获取作品元数据”需求稳定映射到 `yuanflow-cli works detail`。在 YuanFlow
|
|
15
|
+
本技能把用户的“查询单个作品详情、解析作品链接、获取作品元数据”需求稳定映射到 `yuanflow-cli works detail`。在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`;它会由 YuanFlow-main 内置环境注入 `YUANCHUANG_API_TOKEN`,不要让用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
16
16
|
|
|
17
17
|
## 什么时候使用
|
|
18
18
|
|
|
@@ -26,11 +26,11 @@ emoji: 📄
|
|
|
26
26
|
|
|
27
27
|
## 调用优先级
|
|
28
28
|
|
|
29
|
-
1. YuanFlow
|
|
29
|
+
1. YuanFlow-main 内置环境:调用 `yuanflow_cli_call`,参数数组从 `works detail` 开始。
|
|
30
30
|
2. 外部 Agent 且本机有 CLI:执行 `yuanflow-cli works detail ...`。
|
|
31
31
|
3. 外部 Agent 且没有 CLI:再提示用户安装 `npm install -g yuanflow-cli`。
|
|
32
32
|
|
|
33
|
-
YuanFlow
|
|
33
|
+
YuanFlow-main 内置环境调用示例:
|
|
34
34
|
|
|
35
35
|
```json
|
|
36
36
|
{
|
|
@@ -19,7 +19,7 @@ emoji: 📰
|
|
|
19
19
|
3. 开始输出正文之前,必须先和用户核对大概字数范围,例如 800-1200 字、1500-2000 字、3000 字以上;如果用户没有给出范围,先询问,不要直接写完整正文。
|
|
20
20
|
4. 是否需要正文插图、插图数量、插图来源和大概插入位置。
|
|
21
21
|
- 用户提供图片时:先梳理每张图适合插入的段落位置,再进入排版、上传和草稿箱链路。
|
|
22
|
-
- 用户要求生成正文插图时:先使用
|
|
22
|
+
- 用户要求生成正文插图时:先使用 生图技能生成图片,再把生成图片作为正文插图素材进入上传链路。
|
|
23
23
|
- 用户没有要求正文插图时:不要擅自生成插图;只处理文字正文和可选封面。
|
|
24
24
|
5. 排版结果使用 Markdown 还是 HTML。
|
|
25
25
|
- 如果选择 HTML,会把 Markdown 转成微信公众号编辑器可粘贴的内联样式 HTML。
|
|
@@ -132,7 +132,7 @@ python scripts/wechat_draft.py \
|
|
|
132
132
|
除非用户在本轮已明确指定某个主题 ID,否则不得直接执行 `wechat_format.py --theme ... --output ...`。正确顺序是:
|
|
133
133
|
|
|
134
134
|
1. 文章正文确认或生成后,先准备 Markdown 正文。
|
|
135
|
-
2. 如果当前 YuanFlow
|
|
135
|
+
2. 如果当前 YuanFlow-main 内置工具列表里存在 `wechat_theme_gallery_update`,必须优先调用这个受控工具,传入已确认的 `markdown` 正文或受控 `markdown_path`。该工具会直接运行主题画廊脚本并写入右侧内容创作工作台,避免 Agent 手动复制主题预览 HTML 时丢字段。
|
|
136
136
|
3. 如果没有 `wechat_theme_gallery_update`,再执行主题画廊命令,基于正文生成 20 个核心主题预览:
|
|
137
137
|
|
|
138
138
|
```bash
|
|
@@ -202,7 +202,7 @@ python scripts/wechat_format.py --input article.md --theme newspaper --output di
|
|
|
202
202
|
|
|
203
203
|
## 封面
|
|
204
204
|
|
|
205
|
-
封面不使用第三方生成接口。需要封面时,使用
|
|
205
|
+
封面不使用第三方生成接口。需要封面时,使用 生图技能生成。
|
|
206
206
|
|
|
207
207
|
生成封面前同样必须先查看 `生图技能/references/image-prompt-reference.md` 的标题、目录或小节名,选择与文章定位最接近的封面、海报、知识卡、商业科技视觉或信息图方向作为参考;只需进入相近方向阅读,不需要完整扫完所有提示词。封面提示词要把文章主题、目标读者、视觉主元素、构图层级、比例、中文文字规则和负面约束写清楚,避免只写“生成一张某主题封面图”这类空泛需求。
|
|
208
208
|
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import sys
|
|
5
|
+
import unittest
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from tempfile import TemporaryDirectory
|
|
8
|
+
from unittest.mock import patch
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
12
|
+
SCRIPTS = ROOT / "scripts"
|
|
13
|
+
if str(SCRIPTS) not in sys.path:
|
|
14
|
+
sys.path.insert(0, str(SCRIPTS))
|
|
15
|
+
|
|
16
|
+
import wechat_draft # noqa: E402
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class FakeResponse:
|
|
20
|
+
def __init__(self, payload: dict, status_code: int = 200) -> None:
|
|
21
|
+
self._payload = payload
|
|
22
|
+
self.status_code = status_code
|
|
23
|
+
self.text = json.dumps(payload, ensure_ascii=False)
|
|
24
|
+
|
|
25
|
+
def json(self) -> dict:
|
|
26
|
+
return self._payload
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class WechatDraftTests(unittest.TestCase):
|
|
30
|
+
def test_push_draft_uploads_article_images_cover_and_adds_draft(self) -> None:
|
|
31
|
+
with TemporaryDirectory() as temp_dir:
|
|
32
|
+
root = Path(temp_dir)
|
|
33
|
+
article_image = root / "article.jpg"
|
|
34
|
+
cover_image = root / "cover.jpg"
|
|
35
|
+
article_image.write_bytes(b"fake-image")
|
|
36
|
+
cover_image.write_bytes(b"fake-cover")
|
|
37
|
+
article = root / "article.md"
|
|
38
|
+
article.write_text(
|
|
39
|
+
"# 测试文章\n\n正文第一段。\n\n\n\n正文第二段。",
|
|
40
|
+
encoding="utf-8",
|
|
41
|
+
)
|
|
42
|
+
credentials = root / "credentials.txt"
|
|
43
|
+
credentials.write_text("AppID:wx-test\nAppSecret:secret-test", encoding="utf-8")
|
|
44
|
+
output_dir = root / "dist"
|
|
45
|
+
|
|
46
|
+
calls: list[dict] = []
|
|
47
|
+
|
|
48
|
+
def fake_request(method: str, url: str, **kwargs):
|
|
49
|
+
calls.append({"method": method, "url": url, "kwargs": kwargs})
|
|
50
|
+
if "cgi-bin/token" in url:
|
|
51
|
+
return FakeResponse({"access_token": "token-test", "expires_in": 7200})
|
|
52
|
+
if "media/uploadimg" in url:
|
|
53
|
+
return FakeResponse({"url": "https://mmbiz.qpic.cn/article-image.jpg"})
|
|
54
|
+
if "material/add_material" in url:
|
|
55
|
+
return FakeResponse({"media_id": "cover-media-id", "url": "https://mmbiz.qpic.cn/cover.jpg"})
|
|
56
|
+
if "draft/add" in url:
|
|
57
|
+
self.assertNotIn("json", kwargs)
|
|
58
|
+
raw_body = kwargs.get("data")
|
|
59
|
+
self.assertIsInstance(raw_body, bytes)
|
|
60
|
+
self.assertIn("application/json; charset=utf-8", kwargs.get("headers", {}).get("Content-Type", ""))
|
|
61
|
+
self.assertIn("测试文章".encode("utf-8"), raw_body)
|
|
62
|
+
self.assertNotIn(b"\\u6d4b\\u8bd5", raw_body)
|
|
63
|
+
payload = json.loads(raw_body.decode("utf-8"))
|
|
64
|
+
content = payload["articles"][0]["content"]
|
|
65
|
+
self.assertIn("https://mmbiz.qpic.cn/article-image.jpg", content)
|
|
66
|
+
self.assertIn("cover-media-id", json.dumps(payload, ensure_ascii=False))
|
|
67
|
+
self.assertLessEqual(len(payload["articles"][0]["digest"].encode("utf-8")), 54)
|
|
68
|
+
self.assertLessEqual(len(payload["articles"][0]["title"].encode("utf-8")), 64)
|
|
69
|
+
return FakeResponse({"media_id": "draft-media-id"})
|
|
70
|
+
raise AssertionError(f"unexpected url: {url}")
|
|
71
|
+
|
|
72
|
+
args = wechat_draft.argparse.Namespace(
|
|
73
|
+
input=str(article),
|
|
74
|
+
theme="wechat-native",
|
|
75
|
+
title="",
|
|
76
|
+
author="YuanFlow",
|
|
77
|
+
digest="",
|
|
78
|
+
content_source_url="",
|
|
79
|
+
cover_image=str(cover_image),
|
|
80
|
+
thumb_media_id="",
|
|
81
|
+
cover_material_type="image",
|
|
82
|
+
output_dir=str(output_dir),
|
|
83
|
+
credentials_file=str(credentials),
|
|
84
|
+
app_id="",
|
|
85
|
+
app_secret="",
|
|
86
|
+
push_draft=True,
|
|
87
|
+
update_draft=False,
|
|
88
|
+
draft_media_id="",
|
|
89
|
+
draft_index=0,
|
|
90
|
+
json=True,
|
|
91
|
+
)
|
|
92
|
+
with patch.object(wechat_draft.requests, "request", side_effect=fake_request):
|
|
93
|
+
result = wechat_draft.run(args)
|
|
94
|
+
|
|
95
|
+
self.assertTrue(result["ok"])
|
|
96
|
+
self.assertTrue(result["pushed"])
|
|
97
|
+
self.assertEqual(result["draft"]["media_id"], "draft-media-id")
|
|
98
|
+
self.assertEqual(result["article_images"][0]["url"], "https://mmbiz.qpic.cn/article-image.jpg")
|
|
99
|
+
self.assertTrue((output_dir / "wechat.html").exists())
|
|
100
|
+
self.assertTrue((output_dir / "draft_payload.json").exists())
|
|
101
|
+
called_urls = "\n".join(call["url"] for call in calls)
|
|
102
|
+
self.assertIn("cgi-bin/token", called_urls)
|
|
103
|
+
self.assertIn("media/uploadimg", called_urls)
|
|
104
|
+
self.assertIn("material/add_material", called_urls)
|
|
105
|
+
self.assertIn("draft/add", called_urls)
|
|
106
|
+
|
|
107
|
+
def test_update_draft_replaces_article_by_media_id_and_index(self) -> None:
|
|
108
|
+
with TemporaryDirectory() as temp_dir:
|
|
109
|
+
root = Path(temp_dir)
|
|
110
|
+
article_image = root / "article.jpg"
|
|
111
|
+
article_image.write_bytes(b"fake-image")
|
|
112
|
+
article = root / "article.md"
|
|
113
|
+
article.write_text(
|
|
114
|
+
"# 更新文章\n\n正文第一段。\n\n\n\n正文第二段。",
|
|
115
|
+
encoding="utf-8",
|
|
116
|
+
)
|
|
117
|
+
credentials = root / "credentials.txt"
|
|
118
|
+
credentials.write_text("AppID:wx-test\nAppSecret:secret-test", encoding="utf-8")
|
|
119
|
+
output_dir = root / "dist"
|
|
120
|
+
|
|
121
|
+
calls: list[dict] = []
|
|
122
|
+
|
|
123
|
+
def fake_request(method: str, url: str, **kwargs):
|
|
124
|
+
calls.append({"method": method, "url": url, "kwargs": kwargs})
|
|
125
|
+
if "cgi-bin/token" in url:
|
|
126
|
+
return FakeResponse({"access_token": "token-test", "expires_in": 7200})
|
|
127
|
+
if "media/uploadimg" in url:
|
|
128
|
+
return FakeResponse({"url": "https://mmbiz.qpic.cn/updated-image.jpg"})
|
|
129
|
+
if "draft/update" in url:
|
|
130
|
+
raw_body = kwargs.get("data")
|
|
131
|
+
self.assertIsInstance(raw_body, bytes)
|
|
132
|
+
payload = json.loads(raw_body.decode("utf-8"))
|
|
133
|
+
self.assertEqual(payload["media_id"], "draft-media-id")
|
|
134
|
+
self.assertEqual(payload["index"], 0)
|
|
135
|
+
self.assertIsInstance(payload["articles"], dict)
|
|
136
|
+
self.assertEqual(payload["articles"]["title"], "更新文章")
|
|
137
|
+
self.assertIn("https://mmbiz.qpic.cn/updated-image.jpg", payload["articles"]["content"])
|
|
138
|
+
self.assertNotIn("thumb_media_id", payload["articles"])
|
|
139
|
+
return FakeResponse({"errcode": 0, "errmsg": "ok"})
|
|
140
|
+
raise AssertionError(f"unexpected url: {url}")
|
|
141
|
+
|
|
142
|
+
args = wechat_draft.argparse.Namespace(
|
|
143
|
+
input=str(article),
|
|
144
|
+
theme="wechat-native",
|
|
145
|
+
title="",
|
|
146
|
+
author="YuanFlow",
|
|
147
|
+
digest="",
|
|
148
|
+
content_source_url="",
|
|
149
|
+
cover_image="",
|
|
150
|
+
thumb_media_id="",
|
|
151
|
+
cover_material_type="image",
|
|
152
|
+
output_dir=str(output_dir),
|
|
153
|
+
credentials_file=str(credentials),
|
|
154
|
+
app_id="",
|
|
155
|
+
app_secret="",
|
|
156
|
+
push_draft=False,
|
|
157
|
+
update_draft=True,
|
|
158
|
+
draft_media_id="draft-media-id",
|
|
159
|
+
draft_index=0,
|
|
160
|
+
json=True,
|
|
161
|
+
)
|
|
162
|
+
with patch.object(wechat_draft.requests, "request", side_effect=fake_request):
|
|
163
|
+
result = wechat_draft.run(args)
|
|
164
|
+
|
|
165
|
+
self.assertTrue(result["ok"])
|
|
166
|
+
self.assertTrue(result["pushed"])
|
|
167
|
+
self.assertEqual(result["operation"], "update")
|
|
168
|
+
called_urls = "\n".join(call["url"] for call in calls)
|
|
169
|
+
self.assertIn("cgi-bin/token", called_urls)
|
|
170
|
+
self.assertIn("media/uploadimg", called_urls)
|
|
171
|
+
self.assertIn("draft/update", called_urls)
|
|
172
|
+
self.assertNotIn("draft/add", called_urls)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
if __name__ == "__main__":
|
|
176
|
+
unittest.main()
|
package/skills/yuanflow-skill//345/260/217/347/272/242/344/271/246/350/277/220/350/220/245/SKILL.md
CHANGED
|
@@ -42,7 +42,7 @@ emoji: 📕
|
|
|
42
42
|
|
|
43
43
|
## YuanFlow 调用优先级
|
|
44
44
|
|
|
45
|
-
1. 当前在 YuanFlow
|
|
45
|
+
1. 当前在 YuanFlow-main 内置环境时,优先使用受控工具 `yuanflow_cli_call`,不要让用户手动安装 npm,也不要暴露 token。
|
|
46
46
|
2. 数据读取优先使用 `yuanflow-cli` 已有小红书接口和通用自媒体 Skill。
|
|
47
47
|
3. 登录、发布、浏览器任务优先使用 YuanFlow 独立浏览器配置和自媒体浏览器自动化能力。
|
|
48
48
|
4. 当前环境没有受控工具但本地存在 `yuanflow-cli` 时,再使用本地 CLI。
|
|
@@ -6,7 +6,7 @@ emoji: 📊
|
|
|
6
6
|
|
|
7
7
|
# 帐号监控
|
|
8
8
|
|
|
9
|
-
本技能用于把“监控帐号、分析博主、采集主页、对比历史变化”的需求稳定映射到 `yuanflow-cli`。在 YuanFlow
|
|
9
|
+
本技能用于把“监控帐号、分析博主、采集主页、对比历史变化”的需求稳定映射到 `yuanflow-cli`。在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`;它会自动注入用户 token。不要要求用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
10
10
|
|
|
11
11
|
## 固定目标
|
|
12
12
|
|
|
@@ -24,7 +24,7 @@ emoji: 📊
|
|
|
24
24
|
|
|
25
25
|
## 缓存路径
|
|
26
26
|
|
|
27
|
-
YuanFlow
|
|
27
|
+
YuanFlow-main 内置环境默认保存到程序数据目录:
|
|
28
28
|
|
|
29
29
|
```text
|
|
30
30
|
<YuanFlow data dir>/runtime_tools/account-monitor/snapshots
|
|
@@ -50,7 +50,7 @@ Windows 外部 Agent 默认保存到:
|
|
|
50
50
|
|
|
51
51
|
### 1. 获取 sec_user_id
|
|
52
52
|
|
|
53
|
-
YuanFlow
|
|
53
|
+
YuanFlow-main 内置环境调用:
|
|
54
54
|
|
|
55
55
|
```json
|
|
56
56
|
{
|
|
@@ -27,7 +27,7 @@ emoji: 🎨
|
|
|
27
27
|
- 如果图片只是正文插图、配图、氛围图,优先要求“无文字、无字母、无 Logo、无水印”,避免模型自行生成英文占位字。
|
|
28
28
|
- 如果必须包含文字,文字内容应短、少、准确,并在提示词里逐条写出要出现的中文文字。
|
|
29
29
|
|
|
30
|
-
## YuanFlow 内置环境
|
|
30
|
+
## YuanFlow-main 内置环境
|
|
31
31
|
|
|
32
32
|
如果当前 Agent 可用 `yuanflow_image_request`,优先使用该受控工具。它会自动注入当前用户 token,并把接口返回的 URL 或 base64 图片缓存为可预览资源。
|
|
33
33
|
|
|
@@ -12,7 +12,7 @@ emoji: 🔎
|
|
|
12
12
|
|
|
13
13
|
# 综合搜索工具
|
|
14
14
|
|
|
15
|
-
本技能把用户的“按关键词搜索内容、视频、笔记、文章、帖子”需求稳定映射到 `yuanflow-cli search content`。在 YuanFlow
|
|
15
|
+
本技能把用户的“按关键词搜索内容、视频、笔记、文章、帖子”需求稳定映射到 `yuanflow-cli search content`。在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`;它会由 YuanFlow-main 内置环境注入 `YUANCHUANG_API_TOKEN`,不要让用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
16
16
|
|
|
17
17
|
## 什么时候使用
|
|
18
18
|
|
|
@@ -26,11 +26,11 @@ emoji: 🔎
|
|
|
26
26
|
|
|
27
27
|
## 调用优先级
|
|
28
28
|
|
|
29
|
-
1. YuanFlow
|
|
29
|
+
1. YuanFlow-main 内置环境:调用 `yuanflow_cli_call`,参数数组从 `search content` 开始。
|
|
30
30
|
2. 外部 Agent 且本机有 CLI:执行 `yuanflow-cli search content ...`。
|
|
31
31
|
3. 外部 Agent 且没有 CLI:再提示用户安装 `npm install -g yuanflow-cli`。
|
|
32
32
|
|
|
33
|
-
YuanFlow
|
|
33
|
+
YuanFlow-main 内置环境调用示例:
|
|
34
34
|
|
|
35
35
|
```json
|
|
36
36
|
{
|
|
@@ -12,7 +12,7 @@ emoji: 👤
|
|
|
12
12
|
|
|
13
13
|
# 综合用户搜索工具
|
|
14
14
|
|
|
15
|
-
本技能把用户的“搜索账号、作者、用户、频道、达人”需求稳定映射到 `yuanflow-cli search users`。在 YuanFlow
|
|
15
|
+
本技能把用户的“搜索账号、作者、用户、频道、达人”需求稳定映射到 `yuanflow-cli search users`。在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`;它会由 YuanFlow-main 内置环境注入 `YUANCHUANG_API_TOKEN`,不要让用户粘贴 KEY,不要在回复、日志或文件里暴露 token。
|
|
16
16
|
|
|
17
17
|
## 什么时候使用
|
|
18
18
|
|
|
@@ -26,11 +26,11 @@ emoji: 👤
|
|
|
26
26
|
|
|
27
27
|
## 调用优先级
|
|
28
28
|
|
|
29
|
-
1. YuanFlow
|
|
29
|
+
1. YuanFlow-main 内置环境:调用 `yuanflow_cli_call`,参数数组从 `search users` 开始。
|
|
30
30
|
2. 外部 Agent 且本机有 CLI:执行 `yuanflow-cli search users ...`。
|
|
31
31
|
3. 外部 Agent 且没有 CLI:再提示用户安装 `npm install -g yuanflow-cli`。
|
|
32
32
|
|
|
33
|
-
YuanFlow
|
|
33
|
+
YuanFlow-main 内置环境调用示例:
|
|
34
34
|
|
|
35
35
|
```json
|
|
36
36
|
{
|
|
@@ -12,11 +12,11 @@ emoji: 🧠
|
|
|
12
12
|
|
|
13
13
|
## 环境判断
|
|
14
14
|
|
|
15
|
-
1. 在 YuanFlow
|
|
15
|
+
1. 在 YuanFlow-main 内置环境,优先调用内置工具 `yuanflow_cli_call`。
|
|
16
16
|
2. 在外部 Agent 中,如果本地有 `yuanflow-cli`,直接执行 CLI。
|
|
17
17
|
3. 如果外部环境没有 CLI,再提示用户安装 `npm install -g yuanflow-cli`。
|
|
18
18
|
|
|
19
|
-
不要让用户手动提供 token。YuanFlow
|
|
19
|
+
不要让用户手动提供 token。YuanFlow-main 内置环境会注入认证 token;外部 CLI 使用 `YUANCHUANG_API_TOKEN`。
|
|
20
20
|
|
|
21
21
|
## 能做什么
|
|
22
22
|
|
|
@@ -77,9 +77,9 @@ yuanflow-cli knowledge rules \
|
|
|
77
77
|
|
|
78
78
|
4. 最后基于接口返回的公开规则摘要,完成创作、评估或优化。
|
|
79
79
|
|
|
80
|
-
## YuanFlow 内置工具调用示例
|
|
80
|
+
## YuanFlow-main 内置工具调用示例
|
|
81
81
|
|
|
82
|
-
在 YuanFlow
|
|
82
|
+
在 YuanFlow-main 内置环境,调用 `yuanflow_cli_call`,参数数组不要包含 token:
|
|
83
83
|
|
|
84
84
|
```json
|
|
85
85
|
{
|
|
@@ -12,11 +12,11 @@ emoji: 👁️
|
|
|
12
12
|
|
|
13
13
|
## 环境判断
|
|
14
14
|
|
|
15
|
-
1. 在 YuanFlow
|
|
15
|
+
1. 在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`。
|
|
16
16
|
2. 外部 Agent 且本机有 CLI 时,直接执行 `yuanflow-cli`。
|
|
17
17
|
3. 外部 Agent 没有 CLI 时,再提示用户安装 `npm install -g yuanflow-cli`。
|
|
18
18
|
|
|
19
|
-
不要让用户手动提供 YuanFlow token。YuanFlow
|
|
19
|
+
不要让用户手动提供 YuanFlow token。YuanFlow-main 内置环境会注入认证 token;外部 CLI 使用 `YUANCHUANG_API_TOKEN`。
|
|
20
20
|
|
|
21
21
|
本地图片/视频上传依赖 CLI 的 YuanFlow 文件中转能力。外部 Agent 只需要配置 YuanFlow API token;不要要求用户提供第三方平台 Key,也不要在回复里展示完整 token。
|
|
22
22
|
|
|
@@ -46,7 +46,7 @@ emoji: 👁️
|
|
|
46
46
|
5. 调用 qwen3-vl-plus。
|
|
47
47
|
6. 整理输出:先给结论,再给画面证据,再给不确定项。
|
|
48
48
|
|
|
49
|
-
## YuanFlow 内置工具调用示例
|
|
49
|
+
## YuanFlow-main 内置工具调用示例
|
|
50
50
|
|
|
51
51
|
图片 URL:
|
|
52
52
|
|
|
@@ -21,7 +21,7 @@ emoji: 📈
|
|
|
21
21
|
- 如果主页作品列表已包含播放、点赞、评论、转发、收藏等统计,可以直接使用;如果字段缺失,按 `帐号监控` 的说明调用作品详情补全。
|
|
22
22
|
- 采集完成后,把本次账号上下文缓存到本地,方便后续复用。
|
|
23
23
|
3. 缓存本次账号投流上下文。
|
|
24
|
-
- YuanFlow
|
|
24
|
+
- YuanFlow-main 内置环境默认保存到程序数据目录:
|
|
25
25
|
|
|
26
26
|
```text
|
|
27
27
|
<YuanFlow data dir>/runtime_tools/video-ad-strategy/account-context
|
|
@@ -18,11 +18,11 @@ emoji: 🎬
|
|
|
18
18
|
|
|
19
19
|
## 环境判断
|
|
20
20
|
|
|
21
|
-
1. 在 YuanFlow
|
|
21
|
+
1. 在 YuanFlow-main 内置环境,优先调用受控工具 `yuanflow_cli_call`。
|
|
22
22
|
2. 外部 Agent 且本机有 CLI 时,直接执行 `yuanflow-cli`。
|
|
23
23
|
3. 外部 Agent 没有 CLI 时,再提示用户安装 `npm install -g yuanflow-cli`。
|
|
24
24
|
|
|
25
|
-
不要让用户手动提供 YuanFlow token。YuanFlow
|
|
25
|
+
不要让用户手动提供 YuanFlow token。YuanFlow-main 内置环境会注入认证 token;外部 CLI 使用 `YUANCHUANG_API_TOKEN`。
|
|
26
26
|
|
|
27
27
|
本地视频上传依赖 qwen3-vl-plus 的 YuanFlow 文件中转能力。外部 Agent 只需要配置 YuanFlow API token;不要要求用户提供第三方平台 Key。
|
|
28
28
|
|
|
@@ -54,7 +54,7 @@ emoji: 🎬
|
|
|
54
54
|
|
|
55
55
|
必须先调用知识库,不要直接上传视频拆解。
|
|
56
56
|
|
|
57
|
-
YuanFlow 内置工具示例:
|
|
57
|
+
YuanFlow-main 内置工具示例:
|
|
58
58
|
|
|
59
59
|
```json
|
|
60
60
|
{
|
|
@@ -104,7 +104,7 @@ yuanflow-cli knowledge entry --output-format video_breakdown --domain 自媒体
|
|
|
104
104
|
- `youtube.com`、`youtu.be`:`--platform youtube`。
|
|
105
105
|
- `ixigua.com`:`--platform xigua`。
|
|
106
106
|
|
|
107
|
-
YuanFlow 内置工具示例:
|
|
107
|
+
YuanFlow-main 内置工具示例:
|
|
108
108
|
|
|
109
109
|
```json
|
|
110
110
|
{
|
|
@@ -162,7 +162,7 @@ ffmpeg -y -i "<解析得到的 m3u8 地址>" -c copy "D:\素材\yuanflow-video-b
|
|
|
162
162
|
|
|
163
163
|
把知识库查询到的规则摘要压缩进 prompt。不要只让模型“分析视频”,必须告诉它按规则拆解。
|
|
164
164
|
|
|
165
|
-
YuanFlow 内置工具示例:
|
|
165
|
+
YuanFlow-main 内置工具示例:
|
|
166
166
|
|
|
167
167
|
```json
|
|
168
168
|
{
|
|
@@ -33,7 +33,7 @@ tags:
|
|
|
33
33
|
6. 必查 `video_cli_validation_render_pack`,获得 EDL 校验、预览、自检和基础渲染规则。
|
|
34
34
|
7. 读取每个规则包下的 `rules` 或 `rule-detail` 后,再生成 timeline plan / EDL。
|
|
35
35
|
|
|
36
|
-
YuanFlow
|
|
36
|
+
YuanFlow-main 内置环境优先用 `yuanflow_cli_call` 调用知识库,不要让用户手动提供 token:
|
|
37
37
|
|
|
38
38
|
```json
|
|
39
39
|
{
|
|
@@ -114,9 +114,9 @@ CLI 会生成 `strategy_snapshot.json`,后续 Agent 必须基于这个快照
|
|
|
114
114
|
- 所有中间产物进入独立剪辑项目目录。
|
|
115
115
|
- 每个 EDL 片段必须有 `reason`,说明为什么选这段画面。
|
|
116
116
|
- 如果素材无法支撑文案,要明确报告缺少素材,不要硬凑。
|
|
117
|
-
- 在 YuanFlow
|
|
117
|
+
- 在 YuanFlow-main 内置环境优先调用 `yuanflow_cli_call`,外部 Agent 才直接运行本地 `yuanflow-cli`。
|
|
118
118
|
|
|
119
|
-
## YuanFlow
|
|
119
|
+
## YuanFlow-main 内置环境调用
|
|
120
120
|
|
|
121
121
|
使用 `yuanflow_cli_call` 时,参数数组不要包含 token:
|
|
122
122
|
|
|
@@ -350,7 +350,7 @@ yuanflow-cli video evaluate --project "D:\素材\yuanflow-video-edit" --file "D:
|
|
|
350
350
|
yuanflow-cli video render-final --project "D:\素材\yuanflow-video-edit" --format agent-json
|
|
351
351
|
```
|
|
352
352
|
|
|
353
|
-
完成后在 YuanFlow
|
|
353
|
+
完成后在 YuanFlow-main 内置环境必须调用 `artifact_files_register` 登记 `final.mp4`、`edl.json` 和 `eval_report.json`,不要只告诉用户内部路径。
|
|
354
354
|
|
|
355
355
|
## EDL 判断要求
|
|
356
356
|
|
|
@@ -42,7 +42,7 @@ ffmpeg -y -i "C:\path\to\input.mp4" -vn -acodec libmp3lame -ar 44100 -ac 2 "tran
|
|
|
42
42
|
|
|
43
43
|
## YuanFlow 文件中转
|
|
44
44
|
|
|
45
|
-
YuanFlow
|
|
45
|
+
YuanFlow-main 内置环境优先调用 `yuanflow_cli_call`,使用兼容子命令 `oss` 上传英文命名后的音频:
|
|
46
46
|
|
|
47
47
|
```json
|
|
48
48
|
{
|
|
@@ -100,7 +100,7 @@ Content-Type: application/json
|
|
|
100
100
|
}
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
在 YuanFlow
|
|
103
|
+
在 YuanFlow-main 内置环境优先使用 `yuanflow_gateway_request`:
|
|
104
104
|
|
|
105
105
|
```json
|
|
106
106
|
{
|
|
@@ -18,7 +18,7 @@ emoji: 🪽
|
|
|
18
18
|
|
|
19
19
|
如果当前 Agent 可用 `lark_cli_call`,优先使用该受控工具,不要用 `execute_shell_command` 直接运行 `npx`、`npm install -g` 或全局 `lark-cli`。
|
|
20
20
|
|
|
21
|
-
YuanFlow
|
|
21
|
+
YuanFlow-main 内置环境会把官方 CLI 安装到本机用户数据目录的受管位置,并固定版本执行。Agent 只需要传官方 CLI 参数数组,例如:
|
|
22
22
|
|
|
23
23
|
```json
|
|
24
24
|
{
|
package/src/cli.js
CHANGED
|
@@ -651,7 +651,7 @@ function printHelp() {
|
|
|
651
651
|
video 命令是视频智能剪辑基础链路:规则库策略快照、主音频+B-roll、ASR 时间戳对齐、1秒1帧抽帧、视觉理解回写、Agent 生成 timeline_plan/EDL、CLI 校验和渲染。
|
|
652
652
|
需要鉴权的请求都会使用 Authorization: Bearer <token>。
|
|
653
653
|
token 优先级:--token > YUANCHUANG_API_TOKEN > 本地 config.token。
|
|
654
|
-
YuanFlow
|
|
654
|
+
YuanFlow-main 内置环境使用时,token 由 YuanFlow-main 内置环境注入,不需要手动配置。
|
|
655
655
|
AI Agent 推荐使用 --format agent-json 获取稳定 JSON 外壳。
|
|
656
656
|
`);
|
|
657
657
|
}
|