@sokeai/cli 1.0.39 → 1.0.53

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.
Files changed (34) hide show
  1. package/README.md +1 -24
  2. package/package.json +2 -2
  3. package/scripts/build-binaries.sh +1 -30
  4. package/scripts/e2e-test.sh +63 -3
  5. package/scripts/install.js +52 -110
  6. package/scripts/local-test.js +10 -85
  7. package/scripts/local-test.sh +52 -7
  8. package/scripts/push.sh +12 -4
  9. package/scripts/release.sh +45 -8
  10. package/scripts/test-auto-detect.js +71 -48
  11. package/skills/README.md +0 -1
  12. package/skills/oss-upload/skill.md +50 -0
  13. package/skills/oss-upload/upload.py +355 -0
  14. package/skills/soke-assign/README.md +310 -0
  15. package/skills/soke-assign/SKILL.md +383 -0
  16. package/skills/soke-course/README.md +168 -92
  17. package/skills/soke-course/SKILL.md +372 -460
  18. package/skills/soke-exam/SKILL.md +565 -0
  19. package/skills/soke-exam/references/exam-get-exam-user.md +212 -0
  20. package/skills/soke-learning-map/SKILL.md +544 -0
  21. package/skills/soke-learning-profile/SKILL.md +0 -1
  22. package/skills/soke-lesson/README.md +53 -0
  23. package/skills/soke-lesson/SKILL.md +510 -0
  24. package/skills/soke-material/README.md +49 -0
  25. package/skills/soke-material/SKILL.md +390 -0
  26. package/scripts/ci/check-legacy-constants.sh +0 -27
  27. package/scripts/ci/check-yaml-env-whitelist.sh +0 -33
  28. package/scripts/mcp-stdout-scan.sh +0 -46
  29. package/scripts/regress-auth.sh +0 -56
  30. package/scripts/regress-baseline.md +0 -84
  31. package/scripts/test-local-reconcile.js +0 -55
  32. package/skills/soke-business-training-report/SKILL.md +0 -58
  33. package/skills/soke-course/SUMMARY.md +0 -236
  34. package/skills/soke-course/templates/batch-create-from-excel.md +0 -75
@@ -0,0 +1,544 @@
1
+ ---
2
+ name: soke-learning-map
3
+ summary: 授客学堂学习地图管理(创建/阶段/发布/查询/指派),完整管理学习地图生命周期
4
+ version: 1.0.0
5
+ description: "授客学堂学习地图管理:完整的学习地图生命周期管理,包括创建学习地图、查询课程分类与课程、检查课程可用性、创建阶段、发布地图、指派部门/学员、查询学员进度的全链路流程。集成 soke-assign(指派管理)子 skill。当用户需要创建学习地图、添加阶段和课程内容、发布地图、指派学员、查询学习进度时使用。"
6
+ metadata:
7
+ requires:
8
+ bins: ["soke-cli"]
9
+ skills: ["soke-assign"]
10
+ cliHelp: "soke-cli learning-map --help"
11
+ ---
12
+
13
+ # 学习地图管理 (soke-learning-map)
14
+
15
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md),其中包含认证、配置、权限处理**
16
+
17
+ ## 使用前提
18
+
19
+ 1. 已安装 `soke-cli`
20
+ 2. 已登录授权:`soke-cli auth login`
21
+
22
+ ```bash
23
+ soke-cli auth login
24
+ soke-cli config show # 验证登录状态
25
+ ```
26
+
27
+ ---
28
+
29
+ ## 端到端创建工作流
30
+
31
+ 完整创建一个可学习的学习地图需要以下步骤:
32
+
33
+ ```
34
+ ┌─────────────────────────────────────────────────────────────────────┐
35
+ │ 1. 查询地图分类 → 获取 category-uuid (path[0]) │
36
+ │ 2. 创建学习地图 → 获取 map-uuid │
37
+ │ 3. 查询课程分类子树 → 获取课程分类 uuid │
38
+ │ 4. 搜索课程列表 → 获取课程 uuid + 课程元数据 │
39
+ │ 5. 检查课程可用性 → 确认课程可加入该地图 │
40
+ │ 6. 创建学习地图阶段 → 添加课程内容,获取 stage-uuid │
41
+ │ 7. 发布学习地图 → 学员可见 │
42
+ │ 8. (可选) 指派 → 分配给部门/学员 → 学员开始学习 │
43
+ │ 9. 查询学员进度 → 查看学习状态 │
44
+ └─────────────────────────────────────────────────────────────────────┘
45
+ ```
46
+
47
+ ### 数据流转图
48
+
49
+ ```
50
+ 地图分类查询 课程分类子树查询
51
+ │ │
52
+ ▼ ▼
53
+ category-uuid course-category-uuid
54
+ │ │
55
+ ▼ ▼
56
+ 创建学习地图 ──→ map-uuid ──→ 搜索课程列表 ──→ course-uuid
57
+ │ │
58
+ └──────────────┬─────────────────┘
59
+
60
+ 检查课程可用性 ──→ availabelIds
61
+
62
+
63
+ 创建学习地图阶段 ──→ stage-uuid
64
+
65
+
66
+ 发布学习地图 ◄── 至少 1 个阶段
67
+
68
+
69
+ 指派给学员 ◄── assign +create (可选)
70
+
71
+
72
+ 学员可开始学习
73
+ ```
74
+
75
+ ### 各步骤参数依赖
76
+
77
+ | 步骤 | 命令 | 关键输出 | 传入下一步 |
78
+ |------|------|----------|------------|
79
+ | 1 | `+list-categories` | `data.list[].uuid` | 步骤2 `--path` |
80
+ | 2 | `+create-map` | `data.info.uuid` | 步骤5/6/7 `--map-id` / `--uuid` |
81
+ | 3 | `+course-category-tree` | `data[].uuid` | 步骤4 `--category-id` |
82
+ | 4 | `+search-courses` | `data[].uuid` | 步骤5 `--course-ids`;步骤6 `--item-uuids` |
83
+ | 5 | `+check-item-status` | `data.availabelIds[]` | 步骤6 `--item-uuids`(只传可用 UUID) |
84
+ | 6 | `+create-stage` | `data.info.uuid` | 可创建多个阶段 |
85
+ | 7 | `+publish` | `data.info.status=1` | 发布成功 |
86
+
87
+ ---
88
+
89
+ ## 步骤1:查询学习地图分类
90
+
91
+ 创建学习地图前必须先获取分类 ID。
92
+
93
+ ```bash
94
+ soke-cli learning-map +list-categories --page 1 --page-size 10
95
+
96
+ # JSON 输出供解析:
97
+ soke-cli learning-map +list-categories --format json
98
+ ```
99
+
100
+ **响应关键字段**:
101
+ - `data.list[].uuid` → 分类 UUID(传入步骤2 `--path`)
102
+ - `data.list[].title` → 分类名称
103
+
104
+ ---
105
+
106
+ ## 步骤2:创建学习地图
107
+
108
+ ```bash
109
+ soke-cli learning-map +create-map \
110
+ --path "CATEGORY-UUID" \
111
+ --title "学习地图标题" \
112
+ --type "cycle" \
113
+ --template "14" \
114
+ --picture "https://newsokecdn.soke.cn/dingfc5d942826fce9d9/public/image/learning_map/other.png"
115
+
116
+ # 带可选参数:
117
+ soke-cli learning-map +create-map \
118
+ --path "CATEGORY-UUID" \
119
+ --title "新员工入职培训" \
120
+ --type "cycle" \
121
+ --template "14" \
122
+ --picture "https://newsokecdn.soke.cn/.../other.png" \
123
+ --description "<p>新员工培训学习地图</p>" \
124
+ --is-new "1" \
125
+ --unlock-type "0" \
126
+ --format json
127
+ ```
128
+
129
+ **参数说明**:
130
+
131
+ | 参数 | 必填 | 说明 |
132
+ |------|------|------|
133
+ | `--path` | 是 | 所属分类 UUID(步骤1 获取) |
134
+ | `--title` | 是 | 学习地图名称 |
135
+ | `--type` | 是 | `cycle`(周期学习)/ `free`(自由学习) |
136
+ | `--template` | 是 | 模板 ID,如 `14` |
137
+ | `--picture` | 是 | 封面图片 URL |
138
+ | `--description` | 否 | 简介(支持 HTML) |
139
+ | `--is-new` | 否 | 是否新员工专属:`0` 否 / `1` 是(默认 `0`) |
140
+ | `--is-ojt` | 否 | 是否 OJT:`0` 否 / `1` 是(默认 `0`) |
141
+ | `--is-public` | 否 | 是否公开:`0` 否 / `1` 是(默认 `0`) |
142
+ | `--open-time` | 否 | 开放时间(`YYYY-MM-DD HH:mm:ss`),`0000-00-00 00:00:00` 不限 |
143
+ | `--end-time` | 否 | 结束时间,`0000-00-00 00:00:00` 不限 |
144
+ | `--unlock-type` | 否 | `0` 顺序解锁 / `1` 自由解锁(默认 `0`) |
145
+
146
+ **响应提取**:`data.info.uuid` → 地图 UUID(`map-uuid`),后续所有步骤均使用此值。
147
+
148
+ ---
149
+
150
+ ## 步骤3:查询课程分类子树
151
+
152
+ 查询可加入学习地图的课程所在分类。
153
+
154
+ ```bash
155
+ soke-cli course +category-tree \
156
+ --parent-id "PARENT-CATEGORY-UUID"
157
+
158
+ # JSON 输出:
159
+ soke-cli course +category-tree --parent-id "UUID" --format json
160
+ ```
161
+
162
+ **参数说明**:
163
+
164
+ | 参数 | 必填 | 说明 |
165
+ |------|------|------|
166
+ | `--parent-id` | 是 | 父分类 UUID(根分类一般已知,可从平台获取) |
167
+ | `--lang` | 否 | 语言,默认 `zh` |
168
+
169
+ **响应关键字段**:
170
+ - `data[].uuid` → 子分类 UUID(传入步骤4 `--category-id`)
171
+ - `data[].title` → 分类名称
172
+ - `data[].has_children` → 是否还有子分类(`1` 表示有,可继续递归查询)
173
+
174
+ ---
175
+
176
+ ## 步骤4:搜索课程列表
177
+
178
+ 根据分类 UUID 搜索该分类下的课程。
179
+
180
+ ```bash
181
+ soke-cli course +search \
182
+ --category-id "COURSE-CATEGORY-UUID"
183
+
184
+ # JSON 输出:
185
+ soke-cli course +search \
186
+ --category-id "COURSE-CATEGORY-UUID" \
187
+ --format json
188
+ ```
189
+
190
+ **响应关键字段**:
191
+
192
+ | 字段 | 用途 |
193
+ |------|------|
194
+ | `data[].uuid` | 课程 UUID(步骤5 `--course-ids`;步骤6 `--item-uuids`) |
195
+ | `data[].title` | 课程标题(供展示确认) |
196
+
197
+ ---
198
+
199
+ ## 步骤5:检查课程可用性
200
+
201
+ 验证所选课程能否加入该学习地图(避免无效操作)。
202
+
203
+ ```bash
204
+ soke-cli learning-map +check-item-status \
205
+ --map-id "MAP-UUID" \
206
+ --course-ids "COURSE-UUID-1,COURSE-UUID-2"
207
+
208
+ # JSON 输出:
209
+ soke-cli learning-map +check-item-status \
210
+ --map-id "MAP-UUID" \
211
+ --course-ids "COURSE-UUID-1" \
212
+ --format json
213
+ ```
214
+
215
+ **参数说明**:
216
+
217
+ | 参数 | 必填 | 说明 |
218
+ |------|------|------|
219
+ | `--map-id` | 是 | 学习地图 UUID(步骤2 获取) |
220
+ | `--course-ids` | 是 | 课程 UUID 列表,多个以英文逗号分隔 |
221
+
222
+ **响应关键字段**:
223
+ - `data.canUse` → `true` 表示全部可用
224
+ - `data.availabelIds[]` → 可用课程 UUID 列表(只将此列表中的 UUID 传入步骤6 `--item-uuids`)
225
+
226
+ ---
227
+
228
+ ## 步骤6:创建学习地图阶段
229
+
230
+ 提供阶段内容类型和课程 UUID 列表,CLI 会自动调用课程详情接口获取完整信息并构建 `selectItems`,无需手动传入 JSON。
231
+
232
+ ```bash
233
+ soke-cli learning-map +create-stage \
234
+ --map-id "MAP-UUID" \
235
+ --title "阶段1:基础学习" \
236
+ --item-type "course" \
237
+ --item-uuids "COURSE-UUID-1,COURSE-UUID-2" \
238
+ --cycle "7" \
239
+ --unlock-type "0" \
240
+ --finish-all "1"
241
+ ```
242
+
243
+ **参数说明**:
244
+
245
+ | 参数 | 必填 | 说明 |
246
+ |------|------|------|
247
+ | `--map-id` | 是 | 学习地图 UUID(步骤2 获取) |
248
+ | `--title` | 是 | 阶段名称 |
249
+ | `--item-type` | 是 | 阶段内容类型,目前支持 `course`(课程) |
250
+ | `--item-uuids` | 是 | 资源 UUID 列表,多个以英文逗号分隔(步骤5 `availabelIds` 中的 UUID) |
251
+ | `--cycle` | 否 | 学习周期(天),`0` 不限(默认 `0`) |
252
+ | `--description` | 否 | 阶段描述 |
253
+ | `--display` | 否 | 是否显示:`1` 显示 / `0` 隐藏(默认 `1`) |
254
+ | `--start-time` | 否 | 开始时间,`0000-00-00 00:00:00` 不限 |
255
+ | `--end-time` | 否 | 结束时间,`0000-00-00 00:00:00` 不限 |
256
+ | `--unlock-type` | 否 | `0` 顺序解锁 / `1` 自由解锁(默认 `0`) |
257
+ | `--finish-all` | 否 | 是否需完成全部:`1` 是 / `0` 否(默认 `1`) |
258
+ | `--need-count` | 否 | 需完成数量(`--finish-all 0` 时有效,默认 `1`) |
259
+ | `--certificate-id` | 否 | 证书 ID |
260
+
261
+ > **说明**:`--item-type course` 时,CLI 自动调用 `/course/course/info` 获取每个课程的标题、封面、时长、积分、学分等信息,自动组装 `selectItems` 字段后再提交创建请求,无需手动构造 JSON。
262
+
263
+ **响应提取**:`data.info.uuid` → 阶段 UUID;可重复步骤6创建多个阶段。
264
+
265
+ ---
266
+
267
+ ## 步骤7:发布学习地图
268
+
269
+ **前提**:学习地图至少包含 1 个阶段。
270
+
271
+ ```bash
272
+ soke-cli learning-map +publish --uuid "MAP-UUID"
273
+
274
+ # 下架:
275
+ soke-cli learning-map +publish --uuid "MAP-UUID" --status "0"
276
+ ```
277
+
278
+ **参数说明**:
279
+
280
+ | 参数 | 必填 | 说明 |
281
+ |------|------|------|
282
+ | `--uuid` | 是 | 学习地图 UUID(步骤2 获取) |
283
+ | `--status` | 否 | `1` 发布 / `0` 下架(默认 `1`) |
284
+
285
+ **响应验证**:`data.info.status` = `1` 表示发布成功。
286
+
287
+ ---
288
+
289
+ ## 步骤8:指派学习地图(可选)
290
+
291
+ > 详见 [`../soke-assign/SKILL.md`](../soke-assign/SKILL.md)
292
+
293
+ 发布后指派给部门或学员,学员才能看到并开始学习。
294
+
295
+ ### 8.1 查询可用部门/用户
296
+
297
+ ```bash
298
+ soke-cli assign +list-departments --keyword "关键词"
299
+ soke-cli assign +list-users --dept-id "DEPT-ID" --keyword "关键词"
300
+ ```
301
+
302
+ ### 8.2 创建指派
303
+
304
+ ```bash
305
+ # 指派给部门
306
+ soke-cli assign +create \
307
+ --module "learning_map" \
308
+ --target-id "MAP-UUID" \
309
+ --dept-ids "DEPT-ID" \
310
+ --dept-names "部门名称" \
311
+ --learn-type "required"
312
+
313
+ # 指派给用户
314
+ soke-cli assign +create \
315
+ --module "learning_map" \
316
+ --target-id "MAP-UUID" \
317
+ --user-ids "USER-ID" \
318
+ --user-names "学员姓名" \
319
+ --learn-type "required"
320
+ ```
321
+
322
+ ---
323
+
324
+ ## 步骤9:查询学员进度
325
+
326
+ ```bash
327
+ # 查询学习地图学员列表
328
+ soke-cli learning-map +list-map-users --map-id "MAP-UUID"
329
+
330
+ # 查询单个学员详情
331
+ soke-cli learning-map +get-map-user \
332
+ --map-id "MAP-UUID" \
333
+ --dept-user-id "DEPT-USER-ID"
334
+
335
+ # 查询阶段学员进度
336
+ soke-cli learning-map +list-stage-users \
337
+ --map-id "MAP-UUID" \
338
+ --stage-id "STAGE-UUID"
339
+ ```
340
+
341
+ ---
342
+
343
+ ## 可用命令全览
344
+
345
+ ### 学习地图创建(本 skill 新增)
346
+
347
+ | 命令 | 说明 | 风险 |
348
+ |------|------|------|
349
+ | `learning-map +create-map` | 创建学习地图 | write |
350
+ | `course +category-tree` | 获取课程分类子树 | read |
351
+ | `course +search` | 按分类搜索课程 | read |
352
+ | `learning-map +check-item-status` | 检查课程是否可加入地图 | read |
353
+ | `learning-map +create-stage` | 创建学习地图阶段 | write |
354
+ | `learning-map +publish` | 发布/下架学习地图 | write |
355
+
356
+ ### 学习地图查询
357
+
358
+ | 命令 | 说明 | 风险 |
359
+ |------|------|------|
360
+ | `+list-categories` | 查询学习地图分类 | read |
361
+ | `+list-maps` | 查询学习地图列表 | read |
362
+ | `+list-stages` | 查询阶段列表 | read |
363
+ | `+list-items` | 查询阶段内容列表 | read |
364
+
365
+ ### 学员进度查询
366
+
367
+ | 命令 | 说明 | 风险 |
368
+ |------|------|------|
369
+ | `+list-map-users` | 查询地图学员列表 | read |
370
+ | `+list-stage-users` | 查询阶段学员列表 | read |
371
+ | `+list-item-users` | 查询内容学员列表 | read |
372
+ | `+get-map-user` | 查询单个学员详情 | read |
373
+
374
+ ### 指派管理(soke-assign)
375
+
376
+ | 命令 | 说明 |
377
+ |------|------|
378
+ | `assign +list-departments` | 查询可用部门 |
379
+ | `assign +list-users` | 查询可用用户 |
380
+ | `assign +create` | 创建指派 |
381
+ | `assign +list` | 查询指派记录 |
382
+
383
+ ---
384
+
385
+ ## 调试与故障排除
386
+
387
+ ### 常见错误速查
388
+
389
+ | 错误 | 原因 | 解决 |
390
+ |------|------|------|
391
+ | `未登录授权` | Token 过期 | `soke-cli auth login` |
392
+ | `分类不存在` | category UUID 无效 | 重新查询 `+list-categories` |
393
+ | `学习地图不存在` | map-id 无效 | 确认创建成功 |
394
+ | `课程不可用` | 课程已在其他地图或未发布 | 检查 `+check-item-status` 返回的 `availabelIds` |
395
+ | `发布失败` | 无阶段或阶段无内容 | 先创建至少 1 个有课程的阶段 |
396
+ | `参数错误` | 必填参数缺失或格式不对 | `soke-cli learning-map <cmd> --help` |
397
+
398
+ ### 调试检查清单
399
+
400
+ ```bash
401
+ # 1. 认证状态
402
+ soke-cli config show
403
+
404
+ # 2. 确认地图存在
405
+ soke-cli learning-map +list-maps \
406
+ --start-time 1700000000000 --end-time 1800000000000 --format json | \
407
+ jq '.data.list[] | select(.uuid=="MAP-UUID")'
408
+
409
+ # 3. 查询阶段
410
+ soke-cli learning-map +list-stages --map-id "MAP-UUID" --format json | \
411
+ jq '.data.list | length'
412
+
413
+ # 4. 确认发布状态(status=1 已发布)
414
+ soke-cli learning-map +list-maps \
415
+ --start-time 1700000000000 --end-time 1800000000000 --format json | \
416
+ jq '.data.list[] | select(.uuid=="MAP-UUID") | .status'
417
+
418
+ # 始终用 --format json 获取结构化输出
419
+ ```
420
+
421
+ ---
422
+
423
+ ## 完整示例
424
+
425
+ ```bash
426
+ # === 1. 查询地图分类 ===
427
+ MAP_CATEGORY_ID=$(soke-cli learning-map +list-categories --format json | \
428
+ jq -r '.data.list[0].uuid')
429
+
430
+ # === 2. 创建学习地图 ===
431
+ MAP_UUID=$(soke-cli learning-map +create-map \
432
+ --path "$MAP_CATEGORY_ID" \
433
+ --title "新员工入职培训" \
434
+ --type "cycle" \
435
+ --template "14" \
436
+ --picture "https://newsokecdn.soke.cn/dingfc5d942826fce9d9/public/image/learning_map/other.png" \
437
+ --description "<p>新员工入职培训学习地图</p>" \
438
+ --is-new "1" \
439
+ --format json | jq -r '.data.info.uuid')
440
+
441
+ echo "地图 UUID: $MAP_UUID"
442
+
443
+ # === 3. 查询课程分类子树 ===
444
+ COURSE_CATEGORY_ID=$(soke-cli course +category-tree \
445
+ --parent-id "COURSE-ROOT-CATEGORY-UUID" \
446
+ --format json | jq -r '.data[0].uuid')
447
+
448
+ # === 4. 搜索课程 ===
449
+ COURSES=$(soke-cli course +search \
450
+ --category-id "$COURSE_CATEGORY_ID" \
451
+ --format json | jq '.data')
452
+
453
+ COURSE_UUID=$(echo "$COURSES" | jq -r '.[0].uuid')
454
+
455
+ # === 5. 检查课程可用性 ===
456
+ AVAILABLE=$(soke-cli learning-map +check-item-status \
457
+ --map-id "$MAP_UUID" \
458
+ --course-ids "$COURSE_UUID" \
459
+ --format json | jq -r '.data.canUse')
460
+
461
+ if [ "$AVAILABLE" != "true" ]; then
462
+ echo "课程不可用,请检查"
463
+ exit 1
464
+ fi
465
+
466
+ # === 6. 创建阶段(CLI 自动获取课程详情并构建 selectItems)===
467
+ STAGE_UUID=$(soke-cli learning-map +create-stage \
468
+ --map-id "$MAP_UUID" \
469
+ --title "阶段1:基础学习" \
470
+ --item-type "course" \
471
+ --item-uuids "$COURSE_UUID" \
472
+ --cycle "7" \
473
+ --unlock-type "0" \
474
+ --finish-all "1" \
475
+ --format json | jq -r '.data.info.uuid')
476
+
477
+ echo "阶段 UUID: $STAGE_UUID"
478
+
479
+ # === 7. 发布学习地图 ===
480
+ soke-cli learning-map +publish --uuid "$MAP_UUID"
481
+
482
+ # === 8. 指派给部门(可选)===
483
+ DEPT_ID=$(soke-cli assign +list-departments --keyword "研发" --format json | \
484
+ jq -r '.data.list[0].uuid')
485
+
486
+ soke-cli assign +create \
487
+ --module "learning_map" \
488
+ --target-id "$MAP_UUID" \
489
+ --dept-ids "$DEPT_ID" \
490
+ --dept-names "研发部" \
491
+ --learn-type "required"
492
+
493
+ # === 9. 验证 ===
494
+ soke-cli learning-map +list-maps \
495
+ --start-time 1700000000000 --end-time 1800000000000 \
496
+ --format json | jq '.data.list[] | select(.uuid=="'"$MAP_UUID"'")'
497
+ ```
498
+
499
+ ---
500
+
501
+ ## API 接口映射
502
+
503
+ | CLI 命令 | API 路径 | 方法 |
504
+ |----------|----------|------|
505
+ | `learning-map +list-categories` | `/learningMap/category/list` | GET |
506
+ | `learning-map +list-maps` | `/learningMap/learningMap/list` | GET |
507
+ | `learning-map +create-map` | `/skills/learningMap/create` | POST (form) |
508
+ | `course +category-tree` | `/skills/course/category/tree` | GET |
509
+ | `course +search` | `/skills/course/search` | GET |
510
+ | `learning-map +check-item-status` | `/skills/learningMap/item/checkUseStatus` | POST (form) |
511
+ | `learning-map +create-stage` | `/skills/learningMap/stage/create` | POST (form) |
512
+ | `learning-map +publish` | `/skills/learningMap/update/{uuid}` | PUT (form) |
513
+ | `learning-map +list-stages` | `/learningMap/stage/list` | GET |
514
+ | `learning-map +list-items` | `/learningMap/item/list` | GET |
515
+ | `learning-map +list-map-users` | `/learningMap/user/list` | GET |
516
+ | `learning-map +list-stage-users` | `/learningMap/stageUser/list` | GET |
517
+ | `learning-map +list-item-users` | `/learningMap/itemUser/list` | GET |
518
+ | `learning-map +get-map-user` | `/learningMap/user/info` | GET |
519
+ | `assign +list-departments` | `/skills/department/list` | GET |
520
+ | `assign +list-users` | `/skills/user/list` | GET |
521
+ | `assign +create` | `/skills/assignLog/create` | POST |
522
+ | `assign +list` | `/skills/assignLog/list` | GET |
523
+
524
+ ## 权限要求
525
+
526
+ | 操作 | 权限范围 |
527
+ |------|----------|
528
+ | 学习地图读写 | `learningMap:learningMap:write` / `learningMap:learningMap:readonly` |
529
+ | 指派读写 | `assign:write` / `assign:read` |
530
+
531
+ ## 注意事项
532
+
533
+ 1. **学习地图至少需要 1 个阶段才能发布**
534
+ 2. **创建阶段前必须先检查课程可用性**(`+check-item-status`),只将 `data.availabelIds` 中的 UUID 传入 `--item-uuids`
535
+ 3. **`--item-type` 和 `--item-uuids` 替代了旧的 `--select-items`**,CLI 自动获取资源详情并构建完整的 `selectItems` 字段,无需手动构造 JSON
536
+ 4. **发布后学员才可见**
537
+ 5. **指派是可选的**,未指派时学员看不到学习地图
538
+ 6. **可以创建多个阶段**,重复步骤6即可
539
+
540
+ ## 相关文档
541
+
542
+ - [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md) — 认证、配置、权限
543
+ - [`../soke-assign/SKILL.md`](../soke-assign/SKILL.md) — 指派管理
544
+ - [`../../docs/LEARNING_MAP_CREATE.md`](../../docs/LEARNING_MAP_CREATE.md) — 学习地图创建接口文档
@@ -3,7 +3,6 @@ name: soke-learning-profile
3
3
  summary: 学员学习档案查询
4
4
  version: 1.0.0
5
5
  description: "学员学习档案查询:查询学员的完整学习记录,包括课程学习、考试成绩、证书获取、学分积分等。当用户需要查询学员学习档案、查看学员学习情况、统计学员学习数据、查询学员综合学习信息时使用。"
6
- requiredAuthorizations: [{"platformId":"soke-ai"}]
7
6
  metadata:
8
7
  requires:
9
8
  bins: ["soke-cli"]
@@ -0,0 +1,53 @@
1
+ # 授客课件管理 Skill
2
+
3
+ 课件生命周期管理,包括基于素材创建课件、查询课件列表和详情、管理课件排序。
4
+
5
+ ## 快速开始
6
+
7
+ ### 创建课件
8
+
9
+ ```bash
10
+ # 步骤1: 上传素材
11
+ soke-cli file +upload --file ./lesson1.mp4
12
+ # 返回: media_id
13
+
14
+ # 步骤2: 创建课件
15
+ soke-cli course +lesson-create \
16
+ --course-id "COURSE-UUID" \
17
+ --title "第一课" \
18
+ --media-id "MATERIAL-UUID" \
19
+ --type "video" \
20
+ --length 600 \
21
+ --object "ding123/course/video/lesson1.mp4" \
22
+ --filename "lesson1.mp4" \
23
+ --ext "mp4" \
24
+ --filesize 10485760
25
+ ```
26
+
27
+ ### 管理课件
28
+
29
+ ```bash
30
+ # 查询课件列表
31
+ soke-cli course +lesson-list --course-id "COURSE-UUID"
32
+
33
+ # 获取课件详情
34
+ soke-cli course +lesson-get --lesson-id "LESSON-UUID"
35
+ ```
36
+
37
+ ## 主要功能
38
+
39
+ - ✅ 基于素材创建课件
40
+ - ✅ 查询课件列表
41
+ - ✅ 获取课件详情
42
+ - ✅ 管理课件排序
43
+ - ✅ 支持视频、音频、文档等多种类型
44
+
45
+ ## 课件类型
46
+
47
+ - **视频课件** (video): 支持 mp4, avi, mov 等格式
48
+ - **音频课件** (audio): 支持 mp3, wav, m4a 等格式
49
+ - **文档课件** (document): 支持 pdf, ppt, doc 等格式
50
+
51
+ ## 详细文档
52
+
53
+ 查看 [SKILL.md](./SKILL.md) 获取完整的使用说明和 API 文档。