yuanflow-cli 0.1.36 → 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 +23 -0
- package/package.json +1 -1
- package/skills/yuanflow-skill/HTML/346/212/245/345/221/212/347/224/237/346/210/220/SKILL.md +1 -0
- package/skills/yuanflow-skill/IP/350/277/220/350/220/245/SKILL.md +1 -0
- package/skills/yuanflow-skill/OSS/346/226/207/344/273/266/344/270/255/350/275/254/345/267/245/345/205/267/SKILL.md +1 -0
- package/skills/yuanflow-skill/README.md +6 -0
- package/skills/yuanflow-skill/SKILL.md +3 -0
- package/skills/yuanflow-skill/yuanflow-cli/SKILL.md +1 -0
- package/skills/yuanflow-skill//344/270/252/344/272/272/345/210/233/344/275/234/345/272/223/SKILL.md +1 -1
- 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 +1 -0
- package/skills/yuanflow-skill//345/260/217/347/272/242/344/271/246/350/277/220/350/220/245/344/270/216/345/217/221/345/270/203/SKILL.md +24 -10
- package/skills/yuanflow-skill//345/270/220/345/217/267/345/256/232/344/275/215/SKILL.md +1 -0
- package/skills/yuanflow-skill//345/270/220/345/217/267/347/233/221/346/216/247/SKILL.md +1 -0
- package/skills/yuanflow-skill//346/226/207/346/241/210/345/210/233/344/275/234/SKILL.md +1 -0
- package/skills/yuanflow-skill//346/234/254/345/234/260/351/237/263/350/247/206/351/242/221/350/275/254/346/226/207/345/255/227/SKILL.md +1 -0
- package/skills/yuanflow-skill//347/224/237/345/233/276/346/212/200/350/203/275/SKILL.md +1 -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 +1 -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 +1 -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 +23 -3
- package/skills/yuanflow-skill//350/207/252/345/252/222/344/275/223/347/237/245/350/257/206/345/272/223/SKILL.md +3 -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 +1 -0
- package/skills/yuanflow-skill//350/247/206/351/242/221/346/231/272/350/203/275/345/211/252/350/276/221/SKILL.md +326 -0
- package/skills/yuanflow-skill//351/200/211/351/242/230/347/255/226/345/210/222/SKILL.md +1 -0
- 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 +1 -0
- package/skills/yuanflow-skill//351/243/236/344/271/246/345/256/230/346/226/271/346/212/200/350/203/275/SKILL.md +93 -0
- package/src/agent-protocol.js +3 -0
- package/src/cli.js +21 -0
- package/src/video-tools.js +790 -0
|
@@ -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
|
+
- 任务中断时,把下一步续接命令和当前状态写入执行看板。
|
package/src/agent-protocol.js
CHANGED
|
@@ -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
|
|
package/src/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ import { collectComments } from './comment-collector.js';
|
|
|
20
20
|
import { getKnowledgeDocs, navigateKnowledge } from './knowledge-tools.js';
|
|
21
21
|
import { copyObject, signedUrl, tempUpload } from './oss-tools.js';
|
|
22
22
|
import { runBrowserCommand } from './browser-tools.js';
|
|
23
|
+
import { runVideoCommand } from './video-tools.js';
|
|
23
24
|
import {
|
|
24
25
|
getWorkDetail,
|
|
25
26
|
getWorkDownload,
|
|
@@ -86,6 +87,11 @@ export async function main(argv) {
|
|
|
86
87
|
return;
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
if (command === 'video') {
|
|
91
|
+
await handleVideo(rest);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
89
95
|
if (command === 'schema') {
|
|
90
96
|
await handleSchema(rest);
|
|
91
97
|
return;
|
|
@@ -396,6 +402,16 @@ async function handleBrowser(args) {
|
|
|
396
402
|
});
|
|
397
403
|
}
|
|
398
404
|
|
|
405
|
+
async function handleVideo(args) {
|
|
406
|
+
const { positionals, options } = parseOptions(args);
|
|
407
|
+
const [action = 'init'] = positionals;
|
|
408
|
+
const result = await runVideoCommand({ action, options });
|
|
409
|
+
await outputResult(result, options, {
|
|
410
|
+
command: `video ${action}`,
|
|
411
|
+
meta: { kind: 'video-editing' },
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
|
|
399
415
|
async function handleGeneratedCommand(platform, args) {
|
|
400
416
|
if (!getPlatforms().includes(platform)) {
|
|
401
417
|
throw new Error(`未知平台:${platform}。可用平台:${getPlatforms().join(', ')}`);
|
|
@@ -567,11 +583,16 @@ function printHelp() {
|
|
|
567
583
|
yuanflow-cli oss signed-url --key path/to/file.png --ttl-seconds 1800 --format agent-json
|
|
568
584
|
yuanflow-cli browser profile-path --platform douyin --account main --format agent-json
|
|
569
585
|
yuanflow-cli browser task-plan --platform xiaohongshu --task publish --account main --format agent-json
|
|
586
|
+
yuanflow-cli video init --input "D:\\素材" --primary-audio "D:\\素材\\口播.mp3" --broll "D:\\素材\\画面.mp4" --format agent-json
|
|
587
|
+
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
|
|
588
|
+
yuanflow-cli video timeline --project "D:\\素材\\yuanflow-video-edit" --fps 1 --format agent-json
|
|
589
|
+
yuanflow-cli video plan --project "D:\\素材\\yuanflow-video-edit" --timeline-plan "D:\\素材\\yuanflow-video-edit\\timeline_plan.agent.json" --format agent-json
|
|
570
590
|
yuanflow-cli list douyin
|
|
571
591
|
|
|
572
592
|
说明:
|
|
573
593
|
社媒请求调用 Yuan API 的 /social/*path;知识库和 OSS 原子能力调用 /api/* 或 /atomic/*。
|
|
574
594
|
browser 命令是自媒体平台专用浏览器自动化协议,只返回受控 profile/cookie/任务路径与执行计划,不用于普通网页搜索。
|
|
595
|
+
video 命令是视频智能剪辑基础链路:规则库策略快照、主音频+B-roll、1秒1帧抽帧、Agent 生成 timeline_plan/EDL、CLI 校验和渲染。
|
|
575
596
|
需要鉴权的请求都会使用 Authorization: Bearer <token>。
|
|
576
597
|
token 优先级:--token > YUANCHUANG_API_TOKEN > 本地 config.token。
|
|
577
598
|
YuanFlow 主程序内使用时,token 由主程序认证系统注入,不需要手动配置。
|