@sokeai/cli 1.0.64 → 1.0.65

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.
@@ -1,390 +1,105 @@
1
1
  ---
2
2
  name: soke-material
3
- summary: 授客素材库管理(上传文件、创建素材、查询素材、管理分类),支持视频/音频/图片/文档等多种类型
4
3
  version: 1.0.0
5
- description: "授客素材库管理:素材库文件管理,包括文件上传到OSS、创建素材记录、查询素材列表和详情、管理素材分类。支持自动检测文件类型和设置默认时长。当用户需要上传文件、管理素材库、查询素材信息时使用。"
6
- metadata:
7
- requires:
8
- bins: ["soke-cli"]
9
- cliHelp: "soke-cli file --help"
4
+ description: 素材库管理 — 上传视频/音频/文档素材,返回资产元信息供课件创建直接使用
5
+ tags: [soke, material, upload, video, audio, document]
10
6
  ---
11
7
 
12
- # 素材库管理 (material)
8
+ # 素材库管理
13
9
 
14
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md),其中包含认证、配置、权限处理**
10
+ ## 触发描述
15
11
 
16
- ## ⚠️ 使用前提
12
+ 用户需要上传课程素材(视频、音频、文档)到素材库,或从已有素材库中选择素材时触发本技能。
17
13
 
18
- 本 skill 基于 **soke-cli** 命令行工具,使用前必须完成以下步骤:
14
+ 本技能支持两条路径:
15
+ - **本地上传**:上传本地文件到素材库,返回标准资产信息
16
+ - **素材库选择**:从已有素材库中搜索、浏览、选择已上传的素材
19
17
 
20
- 1. **安装 soke-cli**:确保已安装 `@sokeai/cli` NPM 包或 soke-cli 二进制文件
21
- 2. **用户登录授权**:运行 `soke-cli auth login` 完成 OAuth 设备码授权流程,获取用户访问令牌
18
+ ## 输入要求
22
19
 
23
- **快速开始**:
24
- ```bash
25
-
26
- # 1. 用户登录授权(必须)
27
- soke-cli auth login
28
-
29
- # 3. 验证登录状态
30
- soke-cli config show
31
- ```
32
-
33
- 未完成登录授权将无法调用任何素材库管理相关的 API。详细的认证配置说明请参考 [soke-shared/SKILL.md](../soke-shared/SKILL.md)。
34
-
35
- ## 核心概念
36
-
37
- - **Material(素材)**: 素材库中的文件资源,包含视频、音频、图片、文档等类型
38
- - **OSS(对象存储)**: 阿里云对象存储服务,用于存储素材文件
39
- - **Upload Signature(上传签名)**: OSS 上传所需的签名信息,包含 accessid、policy、signature 等
40
- - **Category(素材分类)**: 素材分类,用于组织和管理素材
41
-
42
- ## 素材类型
43
-
44
- | 类型 | 说明 | 支持的文件格式 |
45
- |------|------|----------------|
46
- | video | 视频文件 | mp4, avi, mov, wmv, flv, mkv, webm, m4v, mpg, mpeg, 3gp, f4v, rmvb, rm |
47
- | audio | 音频文件 | mp3, wav, flac, aac, ogg, wma, m4a, ape, aiff |
48
- | image | 图片文件 | jpg, jpeg, png, gif, bmp, svg, webp, ico, tiff |
49
- | document | 文档文件 | pdf, ppt, pptx, doc, docx, xls, xlsx, txt 等 |
50
-
51
- ## 素材上传流程
52
-
53
- 完整的素材上传流程包括以下步骤:
54
-
55
- 1. **获取上传签名** - 调用 `/skills/uploadFile/signature` 获取 OSS 上传凭证
56
- 2. **上传文件到 OSS** - 使用签名信息将文件上传到阿里云 OSS
57
- 3. **创建素材记录** - 调用 `/skills/uploadFile/create` 在素材库中创建记录
58
-
59
- **推荐使用**: `file +upload` 命令一键完成上述所有步骤
60
-
61
- ## 可用命令
62
-
63
- ### 素材上传与创建
64
-
65
- #### `file +upload` - 上传文件到素材库(推荐)
66
-
67
- 一键完成文件上传到 OSS 并创建素材库记录,自动检测文件类型和设置默认时长。
68
-
69
- **参数:**
70
- - `--file` (必填): 本地文件路径
71
- - `--type` (可选): 文件类型 (video/audio/image/document),默认自动检测
72
- - `--length` (可选): 媒体时长(秒),默认视频600秒/音频300秒
73
- - `--category-id` (可选): 分类ID
74
- - `--object-name` (可选): OSS对象名称,默认使用文件名
75
-
76
- **示例:**
77
- ```bash
78
- # 自动检测类型和时长
79
- soke-cli file +upload --file ./video.mp4
80
-
81
- # 指定类型和时长
82
- soke-cli file +upload --file ./audio.mp3 --type audio --length 236
83
-
84
- # 指定分类
85
- soke-cli file +upload --file ./document.pdf --category-id "CATEGORY-UUID"
86
- ```
87
-
88
- **返回:**
89
- - 素材 UUID
90
- - 文件名
91
- - 文件类型
92
- - 文件大小
93
- - 创建时间
94
-
95
- #### `file +create` - 创建素材库记录
96
-
97
- 将已上传到 OSS 的文件信息保存到素材库(适用于已有 OSS 文件的场景)。
98
-
99
- **参数:**
100
- - `--filename` (必填): 文件名
101
- - `--object` (必填): OSS 对象路径
102
- - `--filesize` (必填): 文件大小(字节)
103
- - `--ext` (必填): 文件扩展名
104
- - `--type` (必填): 文件类型 (video/audio/image/document)
105
- - `--length` (可选): 媒体时长(秒)
106
- - `--category-id` (可选): 分类ID
107
-
108
- **示例:**
109
- ```bash
110
- soke-cli file +create \
111
- --filename "video.mp4" \
112
- --object "ding123/course/video/abc.mp4" \
113
- --filesize 10485760 \
114
- --ext "mp4" \
115
- --type "video" \
116
- --length 600
117
- ```
118
-
119
- ### 素材查询
120
-
121
- #### `file +list-files` - 列出素材库文件
122
-
123
- 查询素材库文件列表,支持分页和类型筛选。
124
-
125
- **参数:**
126
- - `--page` (可选): 页码,默认 1
127
- - `--limit` (可选): 每页数量,默认 10
128
- - `--type` (可选): 文件类型筛选 (video/audio/image/document)
129
- - `--category-id` (可选): 分类ID筛选
130
-
131
- **示例:**
132
- ```bash
133
- # 列出所有素材
134
- soke-cli file +list-files
135
-
136
- # 列出视频素材
137
- soke-cli file +list-files --type video --page 1 --limit 20
138
-
139
- # 按分类筛选
140
- soke-cli file +list-files --category-id "CATEGORY-UUID"
141
- ```
142
-
143
- #### `file +get-info` - 获取素材详情
144
-
145
- 获取单个素材的详细信息。
146
-
147
- **参数:**
148
- - `--file-id` (必填): 素材 UUID
149
-
150
- **示例:**
151
- ```bash
152
- soke-cli file +get-info --file-id "6D78C63A-0633-47FB-8F55-72F6F07256A0"
153
- ```
154
-
155
- #### `file +download` - 获取素材下载链接
156
-
157
- 获取素材文件的下载 URL。
20
+ **本地上传:**
21
+ - **文件路径**:本地文件的绝对路径
22
+ - **支持格式**:
23
+ | 类型 | 扩展名 |
24
+ |------|--------|
25
+ | 视频 | `.mp4` `.avi` `.mov` |
26
+ | 音频 | `.mp3` `.wav` |
27
+ | 文档 | `.pdf` `.ppt` `.pptx` `.doc` `.docx` |
28
+ - **文件大小**:无硬性限制,由平台存储策略决定
158
29
 
159
- **参数:**
160
- - `--file-id` (必填): 素材 UUID
161
-
162
- **示例:**
163
- ```bash
164
- soke-cli file +download --file-id "6D78C63A-0633-47FB-8F55-72F6F07256A0"
165
- ```
30
+ **素材库选择:**
31
+ - 由调度方(soke-course)通过弹窗选定素材
32
+ - 素材库中的文件已是上传态,直接返回复用即可
166
33
 
34
+ ## 执行流程
167
35
 
168
- ### 分类管理
36
+ ### 第一步:确认文件有效性
169
37
 
170
- #### `file +list-categories` - 列出素材分类
38
+ 1. 校验文件存在且可读
39
+ 2. 校验扩展名在支持列表中
40
+ 3. 获取文件大小(bytes)
171
41
 
172
- 查询素材分类列表。
42
+ ### 第二步:调用上传接口
173
43
 
174
- **参数:**
175
- - `--page` (可选): 页码,默认 1
176
- - `--limit` (可选): 每页数量,默认 10
44
+ 使用 CLI 命令上传素材:
177
45
 
178
- **示例:**
179
46
  ```bash
180
- soke-cli file +list-categories
47
+ soke file +upload --path "/absolute/path/to/file"
181
48
  ```
182
49
 
183
- ## 使用场景
50
+ ### 第三步:解析返回结果
184
51
 
185
- ### 场景1:上传单个文件
186
-
187
- **命令**:
188
- ```
189
- soke-cli file +upload --file ./course-video.mp4 --format json
190
- ```
52
+ 上传成功后返回如下结构体,**全部字段原样保留**,供后续课件创建直接引用:
191
53
 
192
- **响应示例**:
193
54
  ```json
194
55
  {
195
- "success": true,
196
- "data": {
197
- "uuid": "media-123456",
198
- "filename": "course-video.mp4",
199
- "filesize": 10485760,
200
- "object": "uploads/2024/01/abc123.mp4",
201
- "ext": "mp4",
202
- "type": "video"
203
- }
56
+ "uuid": "素材唯一标识",
57
+ "filename": "原始文件名",
58
+ "type": "video | audio | document",
59
+ "ext": "mp4 | avi | mov | mp3 | wav | pdf | ppt | pptx | doc | docx",
60
+ "filesize": 文件字节数,
61
+ "object": "存储路径/对象键"
204
62
  }
205
63
  ```
206
64
 
207
- **说明**:返回的素材 UUID 可用于创建课件
65
+ ### 第四步:设定默认时长
208
66
 
209
- ### 场景2:批量上传文件
67
+ 素材默认学习时长按类型分别处理:
210
68
 
211
- **流程说明**:
212
- 1. 对每个文件执行 `file +upload` 命令
213
- 2. 从响应中提取 `data.uuid` 作为 `media_id`
214
- 3. 使用 `media_id` 创建课件
69
+ | 素材类型 | 默认时长(秒) |
70
+ |----------|----------------|
71
+ | `video` | 600s |
72
+ | `audio` | 300s |
73
+ | `document` | 0s |
215
74
 
216
- **命令序列**:
217
- ```
218
- # 对每个文件重复以下步骤:
219
-
220
- # 1. 上传文件
221
- soke-cli file +upload --file "audio1.mp3" --type audio --format json
222
- # 提取: media_id = data.uuid
223
-
224
- # 2. 上传下一个文件
225
- soke-cli file +upload --file "audio2.mp3" --type audio --format json
226
- # 提取: media_id = data.uuid
75
+ > 视频和音频实际时长以文件元数据为准;文档类不计时可设 0。
227
76
 
228
- # ... 重复上述步骤
229
- ```
230
-
231
- ### 场景3:查询和管理素材
77
+ ## 输出标准
232
78
 
233
- **查询所有视频素材**:
234
- ```
235
- soke-cli file +list-files --type video --format json
236
- ```
79
+ 完成上传后向用户输出摘要:
237
80
 
238
- **获取素材详情**:
239
- ```
240
- soke-cli file +get-info --file-id "{file_id}" --format json
241
81
  ```
242
-
243
- **响应示例**:
244
- ```json
245
- {
246
- "success": true,
247
- "data": {
248
- "uuid": "media-123456",
249
- "filename": "video.mp4",
250
- "filesize": 10485760,
251
- "object": "uploads/2024/01/abc123.mp4",
252
- "ext": "mp4",
253
- "type": "video",
254
- "length": 600,
255
- "category_id": "cat-789",
256
- "created_at": "2024-01-01T12:00:00Z"
257
- }
258
- }
82
+ ✅ 素材上传成功
83
+ - 文件名: {filename}
84
+ - 类型: {type}
85
+ - 大小: {filesize} bytes
86
+ - UUID: {uuid}
259
87
  ```
260
88
 
261
- ## 最佳实践
262
-
263
- ### 1. 文件上传建议
264
-
265
- **推荐使用 `file +upload`**:
266
- - 一键完成 OSS 上传和素材记录创建
267
- - 自动检测文件类型
268
- - 自动设置默认时长
269
-
270
- **手动流程(不推荐)**:
271
- - 需要手动获取上传签名
272
- - 需要手动上传到 OSS
273
- - 需要手动创建素材记录
274
-
275
- ### 2. 文件类型检测
276
-
277
- 系统根据文件扩展名自动检测类型:
278
-
279
- | 扩展名 | 检测为类型 |
280
- |--------|-----------|
281
- | mp4, avi, mov, wmv, flv, mkv, webm | video |
282
- | mp3, wav, flac, aac, ogg, wma | audio |
283
- | jpg, jpeg, png, gif, bmp, svg | image |
284
- | pdf, doc, docx, ppt, pptx, xls, xlsx | document |
285
-
286
- ### 3. 默认时长设置
287
-
288
- | 文件类型 | 默认时长 |
289
- |---------|---------|
290
- | video | 600秒(10分钟) |
291
- | audio | 300秒(5分钟) |
292
- | image | 0秒 |
293
- | document | 0秒 |
294
-
295
- **建议**:如果知道准确时长,使用 `--length` 参数指定
296
-
297
- ### 4. 素材信息提取
298
-
299
- 上传素材后,响应包含创建课件所需的所有字段:
300
-
301
- **必需字段**:
302
- - `uuid` → 用作 `media_id`
303
- - `filename` → 文件名
304
- - `filesize` → 文件大小(字节)
305
- - `object` → OSS 对象路径
306
- - `ext` → 文件扩展名
307
- - `type` → 文件类型
308
-
309
- **可选字段**:
310
- - `length` → 媒体时长(视频/音频)
311
- - `category_id` → 分类ID
312
-
313
- ### 5. 错误处理
314
-
315
- **检查上传结果**:
316
- - 验证 `success` 字段为 `true`
317
- - 验证 `data.uuid` 不为空
318
- - 如果失败,查看 `err_message` 字段
319
-
320
- **常见问题**:
321
- - 文件不存在 → 检查文件路径
322
- - 文件类型不支持 → 使用支持的格式
323
- - 文件大小超限 → 压缩文件(最大 1GB)
324
-
325
- ### 6. 批量操作建议
326
-
327
- **批量上传**:
328
- - 对每个文件单独调用 `file +upload`
329
- - 记录每个文件的 `media_id`
330
- - 可以并行上传以提高效率
331
-
332
- **批量查询**:
333
- - 使用 `--type` 参数按类型筛选
334
- - 使用 `--category-id` 参数按分类筛选
335
- - 使用分页参数处理大量数据
336
-
337
- ### 7. 跨平台兼容性
338
-
339
- **文件路径**:
340
- - 支持相对路径和绝对路径
341
- - Windows 支持 `/` 和 `\` 两种分隔符
342
- - 建议使用 `/` 保持跨平台兼容
343
-
344
- **JSON 解析**:
345
- - 使用 `--format json` 获取 JSON 输出
346
- - 使用各平台的 JSON 解析工具提取字段
347
- - 命令行: `jq`、PowerShell: `ConvertFrom-Json`、Python: `json.loads()`
348
-
349
- ## API 接口映射
350
-
351
- | CLI 命令 | API 路径 | HTTP 方法 | 说明 |
352
- |----------|----------|-----------|------|
353
- | `file +upload` | `/skills/uploadFile/signature` + `/skills/uploadFile/create` | POST | 上传文件并创建素材 |
354
- | `file +create` | `/skills/uploadFile/create` | POST | 创建素材记录 |
355
- | `file +list-files` | `/skills/uploadFile/list` | GET | 列出素材列表 |
356
- | `file +get-info` | `/skills/uploadFile/info` | GET | 获取素材详情 |
357
- | `file +list-categories` | `/skills/uploadFile/category/list` | GET | 列出素材分类 |
89
+ 可将完整返回对象缓存在上下文中,供后续 `soke-lesson` 创建课件时直接引用。
358
90
 
359
91
  ## 注意事项
360
92
 
361
- 1. **文件大小限制**: 单个文件最大 1GB
362
- 2. **支持的存储类型**: aliyun(阿里云OSS)、ding(钉钉存储)
363
- 3. **自动类型检测**: `file +upload` 会根据文件扩展名自动检测类型
364
- 4. **默认时长**: 视频默认 600 秒,音频默认 300 秒,图片和文档为 0
365
- 5. **OSS 路径格式**: `{corpid}/{module}/{type}/{filename}`
366
-
367
- ## 权限要求
368
-
369
- - **写操作 (上传、创建)): `file:file:write`
370
- - **读操作** (查询、下载): `file:file:readonly`
371
-
372
- ## 错误处理
373
-
374
- 常见错误及解决方案:
375
-
376
- | 错误码 | 错误信息 | 解决方案 |
377
- |--------|----------|----------|
378
- | 1001 | 参数错误 | 检查必填参数是否完整 |
379
- | 1002 | 文件不存在 | 确认文件路径正确 |
380
- | 1003 | 文件类型不支持 | 使用支持的文件格式 |
381
- | 1004 | 文件大小超限 | 压缩文件或分片上传 |
382
- | 2001 | 上传签名获取失败 | 检查认证信息和网络连接 |
383
- | 2002 | OSS 上传失败 | 检查网络连接和 OSS 配置 |
384
- | 3001 | 素材不存在 | 确认素材 UUID 正确 |
93
+ 1. 上传前确认文件路径正确,扩展名匹配实际文件类型
94
+ 2. 不支持图片格式(`.jpg` `.png` 等),图片应使用其他上传通道
95
+ 3. 文档类素材默认时长 0s,如需强制学习时长可在课件创建时覆盖
96
+ 4. 返回的 `uuid` 是课件创建的唯一索引,务必保留
97
+ 5. 素材上传后默认进入当前租户的素材库,权限与租户一致
385
98
 
386
- ## 相关文档
99
+ ## 检查清单
387
100
 
388
- - [课程管理 Skill](../soke-course/SKILL.md) - 使用素材创建课件
389
- - [共享配置 Skill](../soke-shared/SKILL.md) - 认证和配置管理
390
- - [API 接口文档](../../docs/API_PROXY_INTERFACES.md) - 完整的 API 接口说明
101
+ - [ ] 文件路径存在且可访问
102
+ - [ ] 扩展名在 `.mp4|.avi|.mov|.mp3|.wav|.pdf|.ppt|.pptx|.doc|.docx` 中
103
+ - [ ] 上传完成,获取到完整返回对象(uuid / filename / type / ext / filesize / object)
104
+ - [ ] 默认时长按类型正确设定
105
+ - [ ] 返回数据完整传递给后续课件创建流程