yuanflow-cli 0.1.37 → 0.1.39

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
@@ -4,6 +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 主程序内通过受控工具托管安装并调用飞书官方 `@larksuite/cli`,npm 包只提供 Skill 说明,不复制官方 CLI 源码。
7
8
 
8
9
  ## 安装
9
10
 
@@ -43,6 +44,9 @@ yuanflow-cli knowledge entry --output-format short_video_script --domain 自媒
43
44
  yuanflow-cli oss signed-url --key path/to/file.png --ttl-seconds 1800 --format agent-json
44
45
  yuanflow-cli browser profile-path --platform douyin --account main --format agent-json
45
46
  yuanflow-cli browser task-plan --platform xiaohongshu --task publish --account main --format agent-json
47
+ yuanflow-cli video init --input "D:\素材" --primary-audio "D:\素材\口播.mp3" --broll "D:\素材\画面.mp4" --format agent-json
48
+ yuanflow-cli video strategy --project "D:\素材\yuanflow-video-edit" --template-type talking_head --rules-file "D:\规则\logic.json,D:\规则\template.json,D:\规则\cli.json" --format agent-json
49
+ yuanflow-cli video plan --project "D:\素材\yuanflow-video-edit" --timeline-plan "D:\素材\yuanflow-video-edit\timeline_plan.agent.json" --format agent-json
46
50
  yuanflow-cli list douyin
47
51
  ```
48
52
 
@@ -131,6 +135,25 @@ Agent 应先查看 `knowledge docs`,再把用户需求整理成 `task_frame`
131
135
 
132
136
  `knowledge entry`、`knowledge packs`、`knowledge evaluate` 会按规则库实际校验要求本地检查 `task_frame.domain` 和 `task_frame.content_goal`,CLI 调用时必须传 `--domain` 和 `--content-goal`,或通过 `--task-frame-file` 提供同名字段。`rules` 和 `rule-detail` 用于按已选包/规则继续下钻,仍必须分别传 `--pack-code` 或 `--rule-code`。
133
137
 
138
+ ### 视频智能剪辑
139
+
140
+ 视频剪辑链路先查自媒体知识库中的 `video_editing_strategy`,再进入 `video` 命令执行。第一版人工测试流程是:查询规则包、保存策略快照、扫描素材、导入文案、1 秒 1 帧抽帧、Agent 生成 `timeline_plan.agent.json`、CLI 校验并渲染。
141
+
142
+ ```bash
143
+ yuanflow-cli knowledge rules --pack-code video_edit_logic_layer_pack --domain 视频剪辑 --content-goal "口播视频剪辑,需要主音频匹配 B-roll 并生成 EDL" --output-format video_edit_plan --format agent-json --output "D:\规则\logic.json"
144
+ yuanflow-cli video init --input "D:\素材" --primary-audio "D:\素材\口播.mp3" --broll "D:\素材\画面.mp4" --format agent-json
145
+ yuanflow-cli video strategy --project "D:\素材\yuanflow-video-edit" --template-type talking_head --rules-file "D:\规则\logic.json,D:\规则\talking_head.json,D:\规则\cli.json" --format agent-json
146
+ yuanflow-cli video inspect --project "D:\素材\yuanflow-video-edit" --format agent-json
147
+ yuanflow-cli video transcribe --project "D:\素材\yuanflow-video-edit" --script-file "D:\素材\口播文案.txt" --format agent-json
148
+ yuanflow-cli video timeline --project "D:\素材\yuanflow-video-edit" --fps 1 --format agent-json
149
+ yuanflow-cli video plan --project "D:\素材\yuanflow-video-edit" --timeline-plan "D:\素材\yuanflow-video-edit\timeline_plan.agent.json" --format agent-json
150
+ yuanflow-cli video render-preview --project "D:\素材\yuanflow-video-edit" --format agent-json
151
+ yuanflow-cli video evaluate --project "D:\素材\yuanflow-video-edit" --file "D:\素材\yuanflow-video-edit\preview.mp4" --format agent-json
152
+ yuanflow-cli video render-final --project "D:\素材\yuanflow-video-edit" --format agent-json
153
+ ```
154
+
155
+ `--template-type` 当前支持 `talking_head` 和 `short_video_sales`。知识库查询由 `knowledge` 命令负责,`video` 命令只导入规则结果并保存 `strategy_snapshot.json`,不直接远程查规则库。
156
+
134
157
  ### 业务创作类 Skill
135
158
 
136
159
  以下业务 Skill 随 npm 包一起安装,统一流程是:先检查 `个人创作库` 是否有对应历史参考记录,再调用 `自媒体知识库` 按 `next_actions` 分层查询方法摘要,最后结合用户要求输出结果。输出后会询问用户是否满意、是否记录到个人创作库,并询问是否需要生成 HTML 可视化汇总。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuanflow-cli",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "description": "YuanFlow 自媒体 API CLI 与 Skill 安装器。",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -11,6 +11,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
11
11
  - `生图技能/`:图片生成与编辑 Skill,优先走 YuanFlow 内置 `yuanflow_image_request`。
12
12
  - `公众号生成与发布/`:公众号文章创作、主题预览、微信内联 HTML 排版、正文图片上传和草稿箱推送 Skill。
13
13
  - `小红书运营与发布/`:小红书选题调研、笔记搜索、账号分析、评论采集、文案创作、图文/视频发布和互动操作 Skill。
14
+ - `视频智能剪辑/`:主音频 + B-roll 素材智能剪辑 Skill,先查自媒体知识库的视频剪辑策略,保存 `strategy_snapshot.json`,再按 1 秒 1 帧抽帧,由 Agent 生成 `timeline_plan` 和 EDL,交给 `yuanflow-cli video` 校验和渲染。
14
15
  - `HTML报告生成/`:单页 HTML 报告生成 Skill,内置 9 种米色留白报告模板。
15
16
  - `本地音视频转文字/`:本地 SenseVoice 音视频转文字 Skill,首次明确使用时按需下载模型。
16
17
  - `音视频在线转文字/`:通过 YuanFlow 在线 ASR 接口把音频或视频转成干净文本,视频会先抽取音频并通过 OSS 中转。
@@ -24,6 +25,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
24
25
  - `文案创作/`:先查历史文案和表达资产,再结合自媒体知识库输出文案。
25
26
  - `视频投流策略/`:先查历史发布和投放复盘,再结合自媒体知识库输出视频投流策略。
26
27
  - `直播投流策略/`:先查历史直播和投放复盘,再结合自媒体知识库输出直播投流策略。
28
+ - `飞书官方技能/`:通过 YuanFlow 受控工具托管安装并调用飞书官方 `@larksuite/cli`,用于飞书文档、表格、多维表格、日历、邮箱、任务、通讯录、即时消息、知识库和 OpenAPI 等办公任务。
27
29
 
28
30
  ## 适用场景
29
31
 
@@ -36,12 +38,14 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
36
38
  - 把自媒体分析、数据复盘、文案方案、账号监控、知识梳理和执行计划生成可直接打开的单页 HTML 报告。
37
39
  - 生成或改写公众号文章,进入主题选择预览后导出微信公众号编辑器可粘贴 HTML,或推送到公众号草稿箱。
38
40
  - 处理小红书单段或全流程任务,例如只写文案、只采集笔记、只分析账号、只采集评论、只做点赞收藏评论回复,或完整执行图文/视频发布流程;每轮开始前必须明确任务边界。
41
+ - 在用户要求智能剪辑、自动剪辑、主音频匹配 B-roll、重排视频画面或生成剪辑预览时,使用视频智能剪辑 Skill;第一版先查规则库,导入策略快照,抽帧频率固定 1 秒 1 帧,由 Agent 看抽帧图生成 `timeline_plan` 和 EDL。
39
42
  - 在用户明确要求本地转写时,把本地音频或视频转成文字;视频会先抽取音频,模型和缓存都保存在 Skill 自己目录下。
40
43
  - 在用户要求在线转写、云端转写或 doubao-asr 时,把本地音频或视频经 OSS 中转后提交在线 ASR,默认只返回干净文本。
41
44
  - 在用户要求自媒体平台浏览器自动化、账号登录态隔离、Cookie/profile 保存、平台页面采集或作品发布时,使用专用自媒体浏览器自动化 Skill;普通网页浏览和搜索仍使用通用浏览器能力。
42
45
  - 监控抖音、小红书、微博、知乎、Bilibili、TikTok、YouTube、Twitter/X 帐号主页,保存快照并对比历史变化;抖音链路优先使用 `get-sec-user-id -> user-profile -> user-posts -> works detail`。
43
46
  - 在用户要求保存、归档、复盘或复用已完成创作成果时,把选题、标题、文案、脚本、封面、剪辑思路、发布计划和数据复盘沉淀进个人创作库。
44
47
  - 处理 IP 运营、直播话术、帐号定位、选题策划、文案创作、视频投流和直播投流等业务创作任务;这些 Skill 会先查个人创作库历史参考记录,再按自媒体知识库 `next_actions` 分层查询方法摘要。
48
+ - 处理飞书/Lark 办公任务时,使用飞书官方技能;YuanFlow 只托管官方 CLI 的安装、认证状态、执行看板续接和受控调用,不复制或修改官方 CLI 源码。
45
49
 
46
50
  ## 双环境使用方式
47
51
 
@@ -112,6 +116,8 @@ yuanflow-skill list-skills
112
116
  ├─ 小红书运营与发布
113
117
  │ ├─ SKILL.md
114
118
  │ └─ references/
119
+ ├─ 视频智能剪辑
120
+ │ └─ SKILL.md
115
121
  ├─ HTML报告生成
116
122
  │ ├─ SKILL.md
117
123
  │ ├─ templates/
@@ -23,6 +23,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
23
23
  - `生图技能/`
24
24
  - `公众号生成与发布/`
25
25
  - `小红书运营与发布/`
26
+ - `视频智能剪辑/`
26
27
  - `HTML报告生成/`
27
28
  - `本地音视频转文字/`
28
29
  - `音视频在线转文字/`
@@ -36,6 +37,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
36
37
  - `文案创作/`
37
38
  - `视频投流策略/`
38
39
  - `直播投流策略/`
40
+ - `飞书官方技能/`
39
41
 
40
42
  ## 环境判断
41
43
 
@@ -154,6 +156,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
154
156
  | 账号人设、内容边界、目标受众、价值主张、栏目方向 | `帐号定位` |
155
157
  | 选题池、系列选题、热点选题、选题优先级排序 | `选题策划` |
156
158
  | 小红书、公众号、朋友圈、短视频口播、直播预告、海报或转化型文案 | `文案创作` |
159
+ | 主音频匹配 B-roll、自动剪辑、重排画面、生成剪辑预览或成片 | `视频智能剪辑` |
157
160
  | 短视频、图文视频或内容素材的投流目标、人群、预算、素材分层、测试节奏 | `视频投流策略` |
158
161
  | 直播间、直播预热、直播引流、直播成交的投放人群、预算、素材、节奏和复盘 | `直播投流策略` |
159
162
 
@@ -112,8 +112,11 @@ yuanflow-cli browser dry-run --platform xiaohongshu --task publish --title "标
112
112
  1. 检查标题、正文、图片列表、话题、可见性、发布时间和目标账号。
113
113
  2. 图片必须是本地可访问路径或 YuanFlow 资源路径。
114
114
  3. 标题应符合小红书长度限制,过长时先给用户改写建议。
115
- 4. 默认发布前确认;用户已明确授权自动发布时,可直接执行。
116
- 5. 发布失败时报告失败阶段:未登录、素材不存在、上传失败、页面元素变化、提交失败或平台风控。
115
+ 4. 话题必须通过平台官方候选插入,优先使用 `yuanflow_browser_automation` 的 `select-platform-topics`;成功标准是正文编辑器 DOM 中出现 `a.tiptap-topic`、`data-topic`、`contenteditable="false"`,不能只看见普通 `#关键词` 文本。
116
+ 5. 话题异常时先用 `inspect-platform-topic-dom` 写出 DOM 诊断文件,再根据诊断重试;不要只靠坐标、截图颜色或文本候选点击判断。
117
+ 6. 默认发布前确认;用户已明确授权自动发布时,可直接执行。
118
+ 7. 发布失败时报告失败阶段:未登录、素材不存在、上传失败、页面元素变化、提交失败或平台风控。
119
+ 8. 任务完整结束后可以询问用户对结果是否满意;如果用户明确表示满意,可将最终结果、素材路径、关键制作流程、发布前检查结论保存到 `个人创作库`,便于后续复用。
117
120
 
118
121
  ### 视频笔记
119
122
 
@@ -83,6 +83,24 @@ yuanflow-cli browser task-plan --platform douyin --task publish --account main -
83
83
  - 同时给用户手动处理的简单步骤:先检查网络,再重新下载 Chromium;如果还是不行,就让用户手动安装后再继续。
84
84
  - 不要把这个问题说成账号问题,也不要只说“网络错误”就结束。
85
85
 
86
+ ## 统一错误恢复协议
87
+
88
+ 自媒体平台自动化遇到可恢复错误时,先按下面协议重规划,不能把一次工具错误直接理解成“工具不支持继续执行”:
89
+
90
+ - `browser-use-not-started`:说明当前浏览器上下文没有页面。先用同平台、同账号 profile 打开该平台发布入口,再重试原安全动作;如果用户已经停在平台页面,也可以读取当前页快照后续接。
91
+ - `browser-fill-target-required`:说明 Agent 没给出 selector、fields_json 或平台专用动作。先执行安全重规划:打开发布入口并读取 DOM 快照,再根据真实控件选择 `fields_json`、`selector`、`browser-batch` 或平台专用动作继续填写。
92
+ - `browser-use-nested-batch-not-supported` 或嵌套 `batch`:先做 batch 展平,把多层 batch 变成单层动作列表,再提交给受控浏览器。不要把 batch 放进 batch 里反复调用。
93
+ - 任何错误动作重规划都必须保留原任务约束:不越过登录、验证码、风控、最终发布、删除、支付、授权等安全边界。
94
+ - 如果连续重规划仍失败,先输出当前页面、已完成字段、失败动作和下一步候补方案,不要改写任务目标,也不要退回“只能人工发布”的结论。
95
+
96
+ ### 话题 DOM 识别原则
97
+
98
+ - 平台话题必须以官方 DOM 节点为准,不以纯文本、截图颜色或坐标点击作为完成证据。
99
+ - 识别官方话题时优先检查 `a.tiptap-topic`、`data-topic`、`data-type`、`contenteditable="false"`、`role`、`class/id` 中包含 `topic`、`hash`、`mention`、`tag` 的节点。
100
+ - 页面已展示推荐话题时,优先使用带 `recommend-topic-wrapper`、`data-impression`、`tagTarget/tagId` 等语义信息的推荐话题 tag;这是官方 DOM 候选入口,不要退回坐标点击。
101
+ - 如果官方候选没被识别,先调用 `inspect-platform-topic-dom` 导出诊断,再根据 DOM 重新选择候选;不要继续在正文里盲打 `#话题`。
102
+ - 话题修正失败时,下一步应先恢复或校验正文,再重新处理话题候选,防止正文被误覆盖。
103
+
86
104
  ## 支持平台
87
105
 
88
106
  当前受控协议支持:
@@ -243,9 +261,11 @@ downloads 浏览器下载文件
243
261
  2. 先执行 `dry-run --task publish` 检查缺失项。
244
262
  3. 先优先用 Chrome 或 Edge;没有这两个浏览器时,提示用户先安装 Chromium。
245
263
  4. 打开发布入口并填写内容。
246
- 5. 到最终发布按钮前暂停,复述即将发布的内容。
247
- 6. 用户确认后再点击最终发布或保存草稿。
248
- 7. 记录发布结果、作品链接或失败原因到 `tasks` 目录。
264
+ 5. 小红书话题必须走 `select-platform-topics`,以官方 DOM 节点为准:`a.tiptap-topic`、`data-topic`、`contenteditable="false"`;不能把普通 `#关键词` 文本或候选列表文本当作完成。
265
+ 6. 小红书话题识别异常时调用 `inspect-platform-topic-dom` 输出诊断文件,再根据 DOM 重试;不要只靠坐标、截图颜色或文本候选点击。
266
+ 7. 到最终发布按钮前暂停,复述即将发布的内容。
267
+ 8. 用户确认后再点击最终发布或保存草稿。
268
+ 9. 记录发布结果、作品链接或失败原因到 `tasks` 目录。
249
269
 
250
270
  ## 输出要求
251
271
 
@@ -25,6 +25,7 @@ emoji: 🧠
25
25
  - 自媒体文案、标题、内容改写。
26
26
  - 内容评分、复盘、优化建议。
27
27
  - 剪辑建议、发布策略、平台适配。
28
+ - 视频剪辑策略、口播剪辑模板、短视频带货剪辑模板、EDL 校验和基础渲染规则。
28
29
 
29
30
  当前公开方向包括:
30
31
 
@@ -37,6 +38,7 @@ emoji: 🧠
37
38
  - `title_generation`:标题生成。
38
39
  - `rewrite`:内容改写。
39
40
  - `editing_strategy`:剪辑建议。
41
+ - `video_editing_strategy`:视频剪辑策略。
40
42
  - `publishing_strategy`:发布策略。
41
43
 
42
44
  ## 推荐流程
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: 视频智能剪辑
3
+ description: "用于把主音频、文案、B-roll 视频或图片素材组合成可解释的智能剪辑项目。执行前先查询自媒体知识库中的视频剪辑策略规则,再按 1秒1帧抽帧,由 Agent 判断画面语义并生成 EDL,交给 yuanflow-cli video 校验和渲染。"
4
+ metadata:
5
+ builtin_skill_version: "1.0.1"
6
+ yuanflow:
7
+ emoji: "🎬"
8
+ requires:
9
+ ffmpeg: true
10
+ tags:
11
+ - creator
12
+ - video
13
+ - editing
14
+ - broll
15
+ ---
16
+
17
+ # 视频智能剪辑技能
18
+
19
+ 当用户要求自动剪辑、智能剪辑、用口播音频匹配画面、把 B-roll 素材配成视频、重排视频画面、生成预览剪辑或导出成片时,使用本 Skill。
20
+
21
+ ## 规则库优先
22
+
23
+ 视频剪辑策略不写死在本 Skill 里。接到视频剪辑任务后,先调用“自媒体知识库”能力查询 `视频剪辑策略`,再执行剪辑。
24
+
25
+ 推荐查询顺序:
26
+
27
+ 1. 先用 `knowledge entry` 建立任务入口,`domain` 填 `视频剪辑`,`content_goal` 写清本次剪辑目标。
28
+ 2. 再用 `knowledge packs --capability-code video_editing_strategy` 查看视频剪辑策略下的方法包。
29
+ 3. 必查 `video_edit_logic_layer_pack`,获得通用剪辑逻辑层规则。
30
+ 4. 如果任务是口播、旁白、主音频驱动,查询 `talking_head_edit_template_pack`。
31
+ 5. 如果任务是带货、种草、产品转化,查询 `short_video_sales_edit_template_pack`。
32
+ 6. 必查 `video_cli_validation_render_pack`,获得 EDL 校验、预览、自检和基础渲染规则。
33
+ 7. 读取每个规则包下的 `rules` 或 `rule-detail` 后,再生成 timeline plan / EDL。
34
+
35
+ YuanFlow 主程序内优先用 `yuanflow_cli_call` 调用知识库,不要让用户手动提供 token:
36
+
37
+ ```json
38
+ {
39
+ "args": [
40
+ "knowledge",
41
+ "entry",
42
+ "--domain",
43
+ "视频剪辑",
44
+ "--content-goal",
45
+ "口播视频剪辑,需要主音频匹配 B-roll 并生成 EDL",
46
+ "--communication-mode",
47
+ "口播",
48
+ "--output-format",
49
+ "video_edit_plan",
50
+ "--format",
51
+ "agent-json"
52
+ ]
53
+ }
54
+ ```
55
+
56
+ 查询规则包示例:
57
+
58
+ ```json
59
+ {
60
+ "args": [
61
+ "knowledge",
62
+ "rules",
63
+ "--pack-code",
64
+ "video_edit_logic_layer_pack",
65
+ "--domain",
66
+ "视频剪辑",
67
+ "--content-goal",
68
+ "口播视频剪辑,需要主音频匹配 B-roll 并生成 EDL",
69
+ "--output-format",
70
+ "video_edit_plan",
71
+ "--format",
72
+ "agent-json"
73
+ ]
74
+ }
75
+ ```
76
+
77
+ 如果知识库暂时不可用,要明确说明规则库查询失败,再按本 Skill 的基础版流程兜底执行;不能假装已经读取了规则库。
78
+
79
+ ### 保存策略快照
80
+
81
+ 人工测试或 Agent 执行时,把知识库查询结果保存为 JSON 文件后,导入剪辑项目:
82
+
83
+ ```bash
84
+ yuanflow-cli video strategy \
85
+ --project "D:\素材\yuanflow-video-edit" \
86
+ --template-type talking_head \
87
+ --rules-file "D:\规则\logic.json,D:\规则\talking_head.json,D:\规则\cli.json" \
88
+ --format agent-json
89
+ ```
90
+
91
+ `--template-type` 可用:
92
+
93
+ - `talking_head`:口播/旁白/主音频驱动。
94
+ - `short_video_sales`:短视频带货/种草/产品转化。
95
+
96
+ CLI 会生成 `strategy_snapshot.json`,后续 Agent 必须基于这个快照生成 `timeline_plan.agent.json` 和 EDL。
97
+
98
+ ## 基础版边界
99
+
100
+ 基础版必须支持“主音频 + B-roll 素材匹配”:
101
+
102
+ - 主音频可以是口播、旁白或已经录好的音频。
103
+ - B-roll 可以是视频或图片素材。
104
+ - 第一版视觉理解不调用视觉模型,使用 `yuanflow-cli video timeline --fps 1` 按 1秒1帧抽帧。
105
+ - Agent 需要查看抽帧结果,自己判断每段画面的语义、主体、动作和适合承接的文案。
106
+ - 第一版 `video plan` 不自动生成 EDL,由 Agent 生成 EDL 后交给 CLI 校验和渲染。
107
+
108
+ ## 执行原则
109
+
110
+ - 不要直接手写随意 ffmpeg 命令完成剪辑。
111
+ - 不要把素材目录当输出目录乱写文件。
112
+ - 所有中间产物进入独立剪辑项目目录。
113
+ - 每个 EDL 片段必须有 `reason`,说明为什么选这段画面。
114
+ - 如果素材无法支撑文案,要明确报告缺少素材,不要硬凑。
115
+ - 在 YuanFlow 主程序内优先调用 `yuanflow_cli_call`,外部 Agent 才直接运行本地 `yuanflow-cli`。
116
+
117
+ ## YuanFlow 主程序内调用
118
+
119
+ 使用 `yuanflow_cli_call` 时,参数数组不要包含 token:
120
+
121
+ ```json
122
+ {
123
+ "args": [
124
+ "video",
125
+ "init",
126
+ "--input",
127
+ "D:\\素材",
128
+ "--primary-audio",
129
+ "D:\\素材\\口播.mp3",
130
+ "--broll",
131
+ "D:\\素材\\素材1.mp4,D:\\素材\\素材2.mp4",
132
+ "--target-duration",
133
+ "60",
134
+ "--aspect",
135
+ "9:16",
136
+ "--format",
137
+ "agent-json"
138
+ ]
139
+ }
140
+ ```
141
+
142
+ ## 标准流程
143
+
144
+ ### 1. 初始化项目
145
+
146
+ ```bash
147
+ yuanflow-cli video init \
148
+ --input "D:\素材" \
149
+ --primary-audio "D:\素材\口播.mp3" \
150
+ --broll "D:\素材\素材1.mp4,D:\素材\素材2.mp4" \
151
+ --target-duration 60 \
152
+ --aspect 9:16 \
153
+ --format agent-json
154
+ ```
155
+
156
+ ### 2. 扫描素材
157
+
158
+ ```bash
159
+ yuanflow-cli video inspect --project "D:\素材\yuanflow-video-edit" --format agent-json
160
+ ```
161
+
162
+ 如果只是验证命令结构,可以加 `--dry-run`。
163
+
164
+ ### 3. 导入文案或转写
165
+
166
+ 如果用户已有文案:
167
+
168
+ ```bash
169
+ yuanflow-cli video transcribe \
170
+ --project "D:\素材\yuanflow-video-edit" \
171
+ --script-file "D:\素材\口播文案.txt" \
172
+ --format agent-json
173
+ ```
174
+
175
+ 如果用户只有音频,先使用“音视频在线转文字”或“本地音视频转文字”得到文本,再用 `--script-file` 导入。
176
+
177
+ ### 4. 生成 1秒1帧时间线
178
+
179
+ ```bash
180
+ yuanflow-cli video timeline \
181
+ --project "D:\素材\yuanflow-video-edit" \
182
+ --fps 1 \
183
+ --format agent-json
184
+ ```
185
+
186
+ CLI 会生成:
187
+
188
+ - `frames_manifest.json`
189
+ - `visual_segments.json`
190
+ - `frames/<asset_id>/frame_000001.jpg` 等抽帧图片
191
+
192
+ Agent 必须基于这些抽帧图片判断画面,不要凭文件名猜。
193
+
194
+ ### 5. Agent 生成 timeline_plan 和 EDL
195
+
196
+ Agent 读取:
197
+
198
+ - `project.json`
199
+ - `assets.json`
200
+ - `beats.json`
201
+ - `visual_segments.json`
202
+ - `strategy_snapshot.json`
203
+ - 抽帧图片
204
+
205
+ 然后先写出 `timeline_plan.agent.json`。基础格式:
206
+
207
+ ```json
208
+ {
209
+ "version": 1,
210
+ "template_type": "talking_head",
211
+ "beats": [
212
+ {
213
+ "beat_id": "beat_001",
214
+ "text": "先看这个问题到底卡在哪里",
215
+ "selected_segment_id": "vis_0001"
216
+ }
217
+ ],
218
+ "matches": [
219
+ {
220
+ "beat_id": "beat_001",
221
+ "segment_id": "vis_0001",
222
+ "score": 0.82,
223
+ "reason": "画面展示操作场景,能承接开头问题。"
224
+ }
225
+ ],
226
+ "material_gaps": [],
227
+ "edl": {
228
+ "version": 1,
229
+ "audio": {
230
+ "source": "asset_001",
231
+ "mode": "primary_audio"
232
+ },
233
+ "ranges": [
234
+ {
235
+ "source": "asset_002",
236
+ "start": 0,
237
+ "end": 3,
238
+ "output_start": 0,
239
+ "beat_id": "beat_001",
240
+ "reason": "画面展示操作场景,能承接开头问题。"
241
+ }
242
+ ],
243
+ "total_duration_s": 60
244
+ }
245
+ }
246
+ ```
247
+
248
+ 如果需要单独写 EDL,也可以写出 `edl.agent.json`:
249
+
250
+ ```json
251
+ {
252
+ "version": 1,
253
+ "audio": {
254
+ "source": "asset_001",
255
+ "mode": "primary_audio"
256
+ },
257
+ "ranges": [
258
+ {
259
+ "source": "asset_002",
260
+ "start": 0,
261
+ "end": 3,
262
+ "output_start": 0,
263
+ "beat_id": "beat_001",
264
+ "reason": "画面展示操作场景,能承接开头问题。"
265
+ }
266
+ ],
267
+ "total_duration_s": 60
268
+ }
269
+ ```
270
+
271
+ ### 6. 校验 EDL
272
+
273
+ ```bash
274
+ yuanflow-cli video plan \
275
+ --project "D:\素材\yuanflow-video-edit" \
276
+ --timeline-plan "D:\素材\yuanflow-video-edit\timeline_plan.agent.json" \
277
+ --format agent-json
278
+ ```
279
+
280
+ 如果 EDL 没有内嵌在 `timeline_plan.agent.json`,再额外传入:
281
+
282
+ ```bash
283
+ yuanflow-cli video plan \
284
+ --project "D:\素材\yuanflow-video-edit" \
285
+ --timeline-plan "D:\素材\yuanflow-video-edit\timeline_plan.agent.json" \
286
+ --edl "D:\素材\yuanflow-video-edit\edl.agent.json" \
287
+ --format agent-json
288
+ ```
289
+
290
+ 只有校验通过后,才允许渲染。
291
+
292
+ ### 7. 渲染预览和自检
293
+
294
+ ```bash
295
+ yuanflow-cli video render-preview --project "D:\素材\yuanflow-video-edit" --format agent-json
296
+ yuanflow-cli video evaluate --project "D:\素材\yuanflow-video-edit" --file "D:\素材\yuanflow-video-edit\preview.mp4" --format agent-json
297
+ ```
298
+
299
+ ### 8. 最终导出
300
+
301
+ ```bash
302
+ yuanflow-cli video render-final --project "D:\素材\yuanflow-video-edit" --format agent-json
303
+ ```
304
+
305
+ 完成后在 YuanFlow 主程序内必须调用 `artifact_files_register` 登记 `final.mp4`、`edl.json` 和 `eval_report.json`,不要只告诉用户内部路径。
306
+
307
+ ## EDL 判断要求
308
+
309
+ Agent 生成 EDL 时必须检查:
310
+
311
+ - 画面是否支撑当前文案 beat。
312
+ - 是否存在更合适的 B-roll 片段。
313
+ - 同一个片段是否重复过多。
314
+ - 画面是否明显跳跃、黑屏、晃动或无关。
315
+ - 每个片段是否有明确 `reason`。
316
+ - 无法匹配时要写明缺素材,不要硬剪。
317
+
318
+ ## 输出给用户
319
+
320
+ 最终回复要包含:
321
+
322
+ - 预览或成片路径。
323
+ - EDL 路径。
324
+ - 自检报告路径。
325
+ - 简短说明剪辑逻辑。
326
+ - 如果有素材不足或画面不匹配,要明确说明。
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: 飞书官方技能
3
+ description: 当用户需要使用飞书/Lark 官方 CLI 操作文档、表格、多维表格、日历、邮箱、任务、知识库、通讯录、即时消息、妙记、会议记录或开放平台 API 时使用。
4
+ emoji: 🪽
5
+ ---
6
+
7
+ # 飞书官方技能
8
+
9
+ 本 Skill 对接飞书官方发布的 `@larksuite/cli` 和官方 Skill 体系。YuanFlow 不复制、不改造官方 CLI 源码,只负责安装、托管、认证状态检查、权限续接和受控调用。
10
+
11
+ 官方来源:
12
+
13
+ - GitHub:`https://github.com/larksuite/cli`
14
+ - npm:`@larksuite/cli`
15
+ - CLI 可执行入口:`lark-cli`
16
+
17
+ ## 使用原则
18
+
19
+ 如果当前 Agent 可用 `lark_cli_call`,优先使用该受控工具,不要用 `execute_shell_command` 直接运行 `npx`、`npm install -g` 或全局 `lark-cli`。
20
+
21
+ YuanFlow 内部会把官方 CLI 安装到本机用户数据目录的受管位置,并固定版本执行。Agent 只需要传官方 CLI 参数数组,例如:
22
+
23
+ ```json
24
+ {
25
+ "args": ["docs", "search", "--keyword", "项目计划"]
26
+ }
27
+ ```
28
+
29
+ 不要把 token、refresh token、cookie、二维码识别结果或完整授权凭证写入回复、文件、执行看板或创作产物。
30
+
31
+ ## 认证流程
32
+
33
+ 飞书官方 CLI 通常需要用户先完成本地配置和登录。
34
+
35
+ 推荐流程:
36
+
37
+ 1. 先调用 `lark_cli_call` 检查状态或查看帮助。
38
+ 2. 如果 CLI 返回未配置或未登录,调用官方配置/登录命令。
39
+ 3. 把工具返回的官方认证 URL、二维码文本或设备码原样展示在聊天回复里,让用户在 YuanFlow 对话页完成扫码/授权。
40
+ 4. 在执行看板记录“等待用户完成飞书认证”和当前续接点。
41
+ 5. 用户回复“已登录/继续”后,再调用状态检查或原任务命令继续。
42
+
43
+ 常用认证命令:
44
+
45
+ ```json
46
+ {"args": ["config", "init", "--new"]}
47
+ ```
48
+
49
+ ```json
50
+ {"args": ["auth", "login", "--recommend", "--no-wait"]}
51
+ ```
52
+
53
+ 如果官方 CLI 返回 `device_code` 或类似设备码,后续优先按官方提示使用 `--device-code` 续接,而不是重新发起一轮登录。
54
+
55
+ ## 权限与确认
56
+
57
+ 读取、搜索、查询类动作默认可以直接执行。
58
+
59
+ 创建、写入、更新、导出、上传等动作,如果用户已经在当前任务里明确授权,可以继续执行,并在执行看板记录“用户已授权飞书写入动作”。同一任务后续同类写入动作不要反复询问。
60
+
61
+ 以下高风险动作必须二次确认:
62
+
63
+ - 发送邮件、群发消息、发送 IM 消息。
64
+ - 删除文档、删除表格、删除任务、删除日程。
65
+ - 批量修改权限、公开分享、转移所有者。
66
+ - 对外部人员授权、邀请外部成员。
67
+ - 清空数据、批量覆盖数据。
68
+
69
+ 用户确认后,只对当前明确动作放行;不要把“确认一次”扩大成所有飞书危险动作永久放行。
70
+
71
+ ## 常见任务路由
72
+
73
+ 根据用户需求选择官方 CLI 对应能力:
74
+
75
+ - 飞书文档:创建、搜索、读取、追加、覆盖、插入图片或附件。
76
+ - 飞书表格:读写单元格、追加行、查找内容、导出表格。
77
+ - 飞书多维表格:建表、字段管理、记录读写、视图配置。
78
+ - 飞书日历:查日程、创建日程、查忙闲、推荐时间。
79
+ - 飞书邮箱:写邮件、查邮件、回复、转发、草稿。
80
+ - 飞书任务:创建待办、拆分子任务、更新状态、分配成员。
81
+ - 飞书通讯录:查询组织、搜索员工、获取 open_id。
82
+ - 飞书云空间/知识库:上传下载文件、整理目录、管理知识库节点。
83
+ - 飞书即时消息:发送消息、搜索聊天、下载群文件。
84
+ - 飞书妙记/会议:查询会议记录、获取纪要、总结待办。
85
+ - 飞书 OpenAPI:当封装命令不足时,查找官方开放接口并用 CLI 调用。
86
+
87
+ ## 输出要求
88
+
89
+ - 先说明当前使用的是飞书官方 CLI 托管能力。
90
+ - 对认证类输出,必须把官方返回的认证 URL、二维码文本或设备码展示给用户。
91
+ - 对写入类动作,必须说明写入对象、动作、是否已获得用户确认。
92
+ - 对失败结果,区分是未登录、权限不足、应用未配置、网络失败、参数错误,还是官方 CLI 命令不存在。
93
+ - 任务中断时,把下一步续接命令和当前状态写入执行看板。
@@ -5,6 +5,7 @@ import { listKnowledgeCommands } from './knowledge-tools.js';
5
5
  import { listOssCommands } from './oss-tools.js';
6
6
  import { listBrowserCommands } from './browser-tools.js';
7
7
  import { listSearchCommands, listWorkCommands } from './work-tools.js';
8
+ import { listVideoCommands } from './video-tools.js';
8
9
 
9
10
  const ERROR_MAP = [
10
11
  {
@@ -107,6 +108,7 @@ export function buildCommandRegistry() {
107
108
  const knowledgeCommands = listKnowledgeCommands();
108
109
  const ossCommands = listOssCommands();
109
110
  const browserCommands = listBrowserCommands();
111
+ const videoCommands = listVideoCommands();
110
112
  return [
111
113
  ...shortcuts,
112
114
  ...endpoints,
@@ -116,6 +118,7 @@ export function buildCommandRegistry() {
116
118
  ...knowledgeCommands,
117
119
  ...ossCommands,
118
120
  ...browserCommands,
121
+ ...videoCommands,
119
122
  ].sort((left, right) => left.key.localeCompare(right.key));
120
123
  }
121
124