@sokeai/cli 1.0.78 → 1.0.80
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/package.json +1 -1
- package/scripts/install.js +8 -0
- package/scripts/run.js +3 -2
- package/skills/mono/.workbuddy/memory/2026-09-01.md +2 -0
- package/skills/mono/.workbuddy/memory/MEMORY.md +4 -0
- package/skills/mono/ARCHITECTURE_AND_EXTENSION_GUIDE.md +572 -0
- package/skills/mono/README.md +2 -0
- package/skills/mono/SKILL.md +125 -119
- package/skills/mono/SKILL_MD_/344/274/230/345/214/226/346/226/271/346/241/210.md +478 -0
- package/skills/mono/references/modules/README.md +74 -0
- package/skills/mono/references/modules/soke-ai-coach-director/CHANGELOG.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/MODULE.md +12 -0
- package/skills/mono/references/modules/soke-ai-coach-director/README.md +4 -1
- package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-engineer/parts/part1-basic.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-optimizer/prompt-optimizer.md +3 -3
- package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/README.md +4 -2
- package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/qclaw.md +3 -1
- package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/{wukong.md → qwen.md} +18 -18
- package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/workbuddy.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/platform/api-fallback.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/platform/interaction.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/platform/platform-support-matrix.md +28 -0
- package/skills/mono/references/modules/soke-ai-coach-director/platform/publish-gate.md +1 -0
- package/skills/mono/references/modules/soke-ai-coach-director/platform/soke-ai-training/soke-ai-training.md +5 -3
- package/skills/mono/references/modules/soke-ai-coach-director/platform/sync-engine.md +2 -2
- package/skills/mono/references/modules/soke-ai-coach-director/references/env-check.md +3 -0
- package/skills/mono/references/modules/soke-ai-coach-director/references/exec-handbook.md +7 -7
- package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part1.md +5 -5
- package/skills/mono/references/modules/soke-ai-coach-director/references/platform-api-pitfalls.md +1 -1
- package/skills/mono/references/modules/soke-ai-coach-director/references/self-learning-engine.md +4 -0
- package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part1/SOP.md +2 -2
- package/skills/mono/references/modules/soke-ai-coach-director/references/subs/publish/SOP.md +3 -3
- package/skills/mono/references/modules/soke-ai-coach-director/scripts/activator.sh +4 -0
- package/skills/mono/references/modules/soke-ai-coach-director/scripts/error-detector.sh +4 -0
- package/skills/mono/references/modules/soke-ai-coach-director/scripts/extract-skill.sh +7 -0
- package/skills/mono/references/modules/soke-ai-coach-director/scripts/gate_check.py +2 -0
- package/skills/mono/references/modules/soke-ai-coach-director/scripts/validate_operations.py +9 -2
- package/skills/mono/references/modules/soke-ai-training/MODULE.md +57 -7
- package/skills/mono/references/modules/soke-assign/MODULE.md +50 -11
- package/skills/mono/references/modules/soke-certificate/MODULE.md +47 -1
- package/skills/mono/references/modules/soke-course/CHANGELOG.md +93 -0
- package/skills/mono/references/modules/soke-course/MODULE.md +110 -352
- package/skills/mono/references/modules/soke-course/README.md +45 -291
- package/skills/mono/references/modules/soke-course/cli-facts.md +107 -0
- package/skills/mono/references/modules/soke-course/intent-cases.md +41 -0
- package/skills/mono/references/modules/soke-course/scripts/check_readiness.sh +45 -0
- package/skills/mono/references/modules/soke-course/sop-publish-check.md +46 -0
- package/skills/mono/references/modules/soke-course/subs/assign/SOP.md +40 -0
- package/skills/mono/references/modules/soke-course/subs/batch/SOP.md +96 -0
- package/skills/mono/references/modules/soke-course/{references/subs → subs}/category/SOP.md +18 -27
- package/skills/mono/references/modules/soke-course/subs/charge/SOP.md +22 -0
- package/skills/mono/references/modules/soke-course/subs/copy/SOP.md +35 -0
- package/skills/mono/references/modules/soke-course/subs/exam/SOP.md +39 -0
- package/skills/mono/references/modules/soke-course/subs/phase1-create/SOP.md +66 -0
- package/skills/mono/references/modules/soke-course/subs/phase2-lesson/SOP.md +34 -0
- package/skills/mono/references/modules/soke-course/subs/photo/SOP.md +26 -0
- package/skills/mono/references/modules/soke-course/subs/publish/SOP.md +26 -0
- package/skills/mono/references/modules/soke-course/subs/query/SOP.md +36 -0
- package/skills/mono/references/modules/soke-course/{references/subs → subs}/settings/SOP.md +3 -4
- package/skills/mono/references/modules/soke-course/subs/template/SOP.md +58 -0
- package/skills/mono/references/modules/soke-exam/MODULE.md +49 -1
- package/skills/mono/references/modules/soke-exam-question-pool/MODULE.md +45 -5
- package/skills/mono/references/modules/soke-learning-map/MODULE.md +51 -11
- package/skills/mono/references/modules/soke-learning-profile/MODULE.md +46 -3
- package/skills/mono/references/modules/soke-lesson/MODULE.md +34 -20
- package/skills/mono/references/modules/soke-material/MODULE.md +33 -19
- package/skills/mono/references/modules/soke-photo-gallery/MODULE.md +40 -20
- package/skills/mono/references/modules/soke-shared/MODULE.md +9 -0
- package/skills/mono/references/modules/soke-supervisor/MODULE.md +32 -1
- package/skills/mono/references/modules/soke-task/MODULE.md +48 -1
- package/skills/mono/references/modules/soke-training-demand/MODULE.md +38 -17
- package/skills/mono/references/shared/README.md +50 -0
- package/skills/mono/references/shared/async-task.md +30 -0
- package/skills/mono/references/shared/auth-check.md +57 -0
- package/skills/mono/references/shared/command-discovery.md +34 -0
- package/skills/mono/references/shared/environment-check.md +31 -0
- package/skills/mono/references/shared/error-handling.md +27 -0
- package/skills/mono/references/shared/file-input.md +31 -0
- package/skills/mono/references/shared/interaction.md +39 -0
- package/skills/mono/references/shared/object-context.md +51 -0
- package/skills/mono/references/shared/output-policy.md +39 -0
- package/skills/mono/references/shared/pagination.md +41 -0
- package/skills/mono/references/shared/rule-ownership.md +57 -0
- package/skills/mono/references/shared/state-machine.md +35 -0
- package/skills/mono/references/shared/write-guard.md +34 -0
- package/skills/mono/references/shared/write-verify.md +33 -0
- package/skills/mono/references/workflows/README.md +115 -0
- package/skills/mono/scripts/check_package.py +310 -0
- package/skills/mono/scripts/check_readiness.py +1 -1
- package/skills/mono/scripts/check_syntax.py +35 -0
- package/skills/mono/scripts/validate_operations.py +2 -2
- package/skills/mono//357/275/223/357/275/217/357/275/213/357/275/205/357/274/215/357/275/203/357/275/214/357/275/211/346/225/264/344/275/223/346/236/266/346/236/204.html +13 -0
- package/skills/multi/soke-ai-coach-director/README.md +3 -0
- package/skills/multi/soke-ai-coach-director/assets/LEARNINGS-TEMPLATE.md +1 -0
- package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part1-basic.md +1 -1
- package/skills/multi/soke-ai-coach-director/platform/publish-gate.md +1 -0
- package/skills/multi/soke-ai-coach-director/references/exec-handbook.md +5 -5
- package/skills/multi/soke-ai-coach-director/references/exec-part1.md +5 -5
- package/skills/multi/soke-ai-coach-director/references/platform-api-pitfalls.md +1 -1
- package/skills/multi/soke-ai-coach-director/references/self-improvement-examples.md +3 -0
- package/skills/multi/soke-ai-coach-director/references/self-learning-engine.md +4 -0
- package/skills/multi/soke-ai-coach-director/references/subs/part1/SOP.md +2 -2
- package/skills/multi/soke-ai-coach-director/scripts/activator.sh +4 -0
- package/skills/multi/soke-ai-coach-director/scripts/error-detector.sh +4 -0
- package/skills/multi/soke-ai-coach-director/scripts/extract-skill.sh +7 -0
- package/skills/multi/soke-ai-coach-director/scripts/gate_check.py +2 -0
- package/skills/multi/soke-ai-coach-director/scripts/validate_operations.py +9 -2
- package/skills/multi/soke-ai-training/SKILL.md +2 -0
- package/skills/multi/soke-course/.skill-metadata.yaml +40 -0
- package/skills/multi/soke-course/CHANGELOG.md +77 -0
- package/skills/multi/soke-course/README.md +27 -274
- package/skills/multi/soke-course/SKILL.md +135 -353
- package/skills/multi/soke-course/_user_meta.json +5 -0
- package/skills/multi/soke-course/agents/openai.yaml +1 -5
- package/skills/multi/soke-course/references/cli-facts.md +105 -0
- package/skills/multi/soke-course/references/examples.md +30 -454
- package/skills/multi/soke-course/references/intent-cases.md +65 -99
- package/skills/multi/soke-course/references/sop-full-workflow.md +81 -177
- package/skills/multi/soke-course/references/sop-lesson-types.md +21 -58
- package/skills/multi/soke-course/references/sop-publish-check.md +14 -71
- package/skills/multi/soke-course/references/subs/assign/SOP.md +37 -0
- package/skills/multi/soke-course/references/subs/category/SOP.md +18 -27
- package/skills/multi/soke-course/references/subs/exam/SOP.md +28 -0
- package/skills/multi/soke-course/references/subs/lesson/SOP.md +28 -0
- package/skills/multi/soke-course/references/subs/material/SOP.md +24 -0
- package/skills/multi/soke-course/references/subs/photo/SOP.md +23 -0
- package/skills/multi/soke-course/references/subs/publish/SOP.md +15 -157
- package/skills/multi/soke-course/references/subs/query/SOP.md +22 -151
- package/skills/multi/soke-course/references/subs/settings/SOP.md +3 -4
- package/skills/multi/soke-course/references/subs/template/SOP.md +37 -210
- package/skills/multi/soke-course/references/troubleshoot.md +37 -54
- package/skills/multi/soke-course/scripts/check_readiness.sh +45 -0
- package/skills/multi/soke-course/{references/installation.md → soke-cli-install-guide.md} +3 -0
- package/skills/mono/references/modules/soke-course/agents/openai.yaml +0 -7
- package/skills/mono/references/modules/soke-course/references/course-list-courses.md +0 -216
- package/skills/mono/references/modules/soke-course/references/examples.md +0 -480
- package/skills/mono/references/modules/soke-course/references/intent-cases.md +0 -99
- package/skills/mono/references/modules/soke-course/references/sop-full-workflow.md +0 -177
- package/skills/mono/references/modules/soke-course/references/sop-lesson-types.md +0 -66
- package/skills/mono/references/modules/soke-course/references/sop-publish-check.md +0 -76
- package/skills/mono/references/modules/soke-course/references/subs/ai/SOP.md +0 -153
- package/skills/mono/references/modules/soke-course/references/subs/charge/SOP.md +0 -107
- package/skills/mono/references/modules/soke-course/references/subs/copy/SOP.md +0 -80
- package/skills/mono/references/modules/soke-course/references/subs/publish/SOP.md +0 -168
- package/skills/mono/references/modules/soke-course/references/subs/query/SOP.md +0 -165
- package/skills/mono/references/modules/soke-course/references/subs/template/SOP.md +0 -223
- package/skills/mono/references/modules/soke-course/references/troubleshoot.md +0 -68
- package/skills/multi/soke-course/examples/create-basic.md +0 -70
- package/skills/multi/soke-course/references/course-list-courses.md +0 -216
- package/skills/multi/soke-course/references/dependencies/soke-assign.md +0 -103
- package/skills/multi/soke-course/references/dependencies/soke-lesson.md +0 -119
- package/skills/multi/soke-course/references/dependencies/soke-material.md +0 -105
- package/skills/multi/soke-course/references/shared.md +0 -185
- package/skills/multi/soke-course/references/subs/ai/SOP.md +0 -153
- package/skills/multi/soke-course/scripts/check_readiness.py +0 -87
- /package/skills/mono/references/{installation.md → shared/installation.md} +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# CLI 事实表(唯一事实源)
|
|
2
|
+
|
|
3
|
+
> 实测于 soke-cli v1.0.77(2026-08-29)。本表为所有命令参数的唯一事实源;子 SOP 只写用法示例,参数以本表为准。
|
|
4
|
+
> 兜底规则:本表未覆盖的命令 → 跑 `soke-cli <cmd> --help` 实测后补录本表。
|
|
5
|
+
> 通用:所有命令支持 `--format json`(结构化输出推荐);时间戳均为毫秒。
|
|
6
|
+
> 返回契约:以下“必取字段”是进入下一步的最低要求;实际响应可能包裹在 `data/list/items` 中,先定位字段再继续。未知字段或未知状态不得按成功推断,需保留原始 JSON 并执行 `--help`/实测确认。
|
|
7
|
+
|
|
8
|
+
## course 组
|
|
9
|
+
|
|
10
|
+
### +create 创建课程
|
|
11
|
+
`--title`(必填) `--category-id`(必填) `--description`
|
|
12
|
+
返回最低字段:`course-id`、`title`、`status`。
|
|
13
|
+
|
|
14
|
+
### +update 更新/关闭课程
|
|
15
|
+
`--course-id`(必填) `--title` `--credit` `--description` `--category-id`
|
|
16
|
+
`--image`(封面,**只收图片库 photoUri**) `--image-x/y/w/h`(裁剪)
|
|
17
|
+
`--action` = update(默认) | **close(关闭课程,CLI 支持!删除才需后台)**
|
|
18
|
+
|
|
19
|
+
### +advanced 高级设置
|
|
20
|
+
`--course-id`(必填);`--study-type` 1自由/2解锁;`--is-accelerate` 倍速;`--is-drag`/`--drag-type` 拖动;
|
|
21
|
+
`--open-face-recognition` 课前人脸;`--is-first-face` 0不/1首次/2每次;`--learning-face-recognition`/`--face-recognition-times` 学习中人脸;
|
|
22
|
+
`--open-workrecord` 待办;`--allow-after-expiration` 截止后学习;`--is-remind`/`--remind-days`/`--remind-time`/`--remind-content` 未学提醒;
|
|
23
|
+
`--evaluate-required` 打星评价;`--is-hang`/`--hang-time`(≤60分) 文档防挂机;`--comment-switch` 评论;
|
|
24
|
+
`--image-file`(本地二维码图,内部传 OSS 不进图片库,jpg/jpeg/png) 与 `--image-oss-url` 二选一
|
|
25
|
+
|
|
26
|
+
### +publish 发布
|
|
27
|
+
`--course-id`(必填) `--publish-time`("YYYY-MM-DD HH:MM:SS" 北京时间;默认 0000-00-00 00:00:00=立即)
|
|
28
|
+
返回最低字段:`course-id`、`status`;定时发布另需回查 `publish-time`。
|
|
29
|
+
|
|
30
|
+
### +get-course / +list-courses
|
|
31
|
+
get: `--course-id`
|
|
32
|
+
list: `--keyword` `--category-path`(分类筛选,**不是 --category-id**) `--status`(0/1/2,**默认1**) `--is-in`(0外部/1内部,默认1) `--is-my` `--is-joint` `--joint-out` `--page` `--page-size`(默认10)
|
|
33
|
+
**⚠️ 无 --start-time/--end-time(旧文档的时间范围/365天限制对本命令不成立)**
|
|
34
|
+
|
|
35
|
+
### +list-categories
|
|
36
|
+
`--page` `--page-size`(max 100)。当前事实表未确认 `--parent-id`/`--level`,不得直接使用;如需末级分类,先按返回的 parent_id/level 递归查询或执行 --help 实测后补录。
|
|
37
|
+
|
|
38
|
+
### +lesson-create 创建课件
|
|
39
|
+
`--course-id`(必填) `--title` `--type` video/audio/photo_gallery/document/exam
|
|
40
|
+
非 exam:`--media-id`(素材UUID,**不是 --uuid**) `--filename` `--ext` `--filesize` `--object` `--length`(秒,**不是 --duration**)
|
|
41
|
+
exam:`--paper-id` 或 `--paper-title`(列表匹配) `--pool-id`(可选) `--minute`(默认30)/`--second`
|
|
42
|
+
通用:`--point` `--sort`
|
|
43
|
+
返回最低字段:`lesson-id`、`course-id`、`type`、`status`;非 exam 还需保留上传对象字段。
|
|
44
|
+
|
|
45
|
+
### +lesson-list / +lesson-get / +lesson-sort
|
|
46
|
+
list: `--course-id` `--keyword` `--type`(video/audio/image/document/link/live/exam/questionnaire/sign_in) `--page` `--limit`(默认10,**不是 --page-size**)
|
|
47
|
+
get: `--id`(课件ID,**不是 --lesson-id**)
|
|
48
|
+
sort: `--course-id` `--sort-list`("id1,id2,...",**不是 --order**)
|
|
49
|
+
|
|
50
|
+
### 学习数据查询
|
|
51
|
+
+list-course-users: `--course-id` `--finish-start-time`/`--finish-end-time`(**必传,跨度≤7天**,回归实测) `--userid-list`(逗号,≤100) `--page` `--page-size`
|
|
52
|
+
+get-course-user: `--course-id` `--dept-user-id`
|
|
53
|
+
+list-lesson-learns: `--lesson-id` `--course-id` `--userid-list` `--finish-start-time`/`--finish-end-time` `--page` `--page-size`
|
|
54
|
+
+list-lesson-faces: `--target-id`(=课件uuid,**不是 --lesson-id**) `--userid-list` `--page` `--page-size`(**无时间参数**)
|
|
55
|
+
|
|
56
|
+
## file 组(素材库)
|
|
57
|
+
|
|
58
|
+
+upload: `--file`(本地路径,**不是 --path**;不支持图片) `--type`(默认自动检测) `--length`(默认视频600/音频300/**文档120**) `--category-id` `--module`(默认material) `--object-name` `--storage`
|
|
59
|
+
返回最低字段:`uuid`、`filename`、`type`、`ext`、`filesize`、`object`、`length`;图片不得使用此命令。
|
|
60
|
+
list-files: **无 + 前缀** → `soke-cli file list-files --page --page-size`
|
|
61
|
+
get-info: **无 + 前缀** → `soke-cli file get-info --file-id`
|
|
62
|
+
+create: 创建素材库文件(已有 OSS 对象时)
|
|
63
|
+
|
|
64
|
+
## assign 组(指派)
|
|
65
|
+
|
|
66
|
+
+list-departments: `--keyword` `--parent-id`(默认"1"=仅顶级,**全树需递归**) `--page` `--limit`
|
|
67
|
+
+list-users: `--dept-id` `--keyword` `--search-target`(name/phone/job_number) `--list-all` `--is-in` `--page` `--limit`
|
|
68
|
+
+create: `--module`(course/exam/learning_map) `--target-id`(**不是 --module-id**) `--learn-type` **required/optional(不是 --compulsory 1|0)** `--user-ids` `--user-names`(对应) `--dept-ids` `--dept-names` `--date` `--set-message`/`--message-switch`/`--message-content`
|
|
69
|
+
返回最低字段:`target-id`、目标类型、实际指派数量和已存在/新增/失败明细。
|
|
70
|
+
+list: `--module` `--target-id` `--keyword` `--learn-type` `--page` `--limit`
|
|
71
|
+
|
|
72
|
+
## photo-gallery 组(图片库)
|
|
73
|
+
|
|
74
|
+
+create: `--file`(本地图片) `--title` `--category-id`(默认empty) → 返回 uuid/photoUri
|
|
75
|
+
+list: `--file-keyword` `--category-id` `--from` `--page` `--limit`
|
|
76
|
+
+get: `--uuid`(含完整访问 URL)
|
|
77
|
+
|
|
78
|
+
## exam 最小建题链(subs/exam 专用)
|
|
79
|
+
|
|
80
|
+
+create-pool: `--title` `--path`('["分类uuid"]') `--description` `--status`
|
|
81
|
+
+create-question: `--pool-id` `--type`(single_choice/choice/uncertain_choice/determine/fill/essay/material) `--title`(fill 用 `[[答案N]]`,**不传 --answer**) `--score`(>0) `--difficulty`(simple/medium/hard) `--choices`('[{"key":"A1","value":"A"}]') `--answer`(选择/判断为索引数组) `--answer-type`(fill) `--analysis`
|
|
82
|
+
+create-paper: `--title`(≤50) `--pool-id`('["pool_uuid"]') `--pattern`(questionType/random/selection/import) `--type-metas`(JSON: {"single_choice":{"count":N,"score":N},...})
|
|
83
|
+
+update-paper: `--paper-id` `--title`(**publish 必重传**) `--action publish`
|
|
84
|
+
|
|
85
|
+
## clock 组(作业查询,只读;**--page/--page-size 强制必传**)
|
|
86
|
+
|
|
87
|
+
list-learnings: `--target-id`(课程ID) `--start-time`/`--end-time`(毫秒) `--page` `--page-size`
|
|
88
|
+
list-logs: `--clock-id`(来自 list-learnings) `--start-time`/`--end-time` `--page` `--page-size`
|
|
89
|
+
list-log-lessons: `--target-id`(提交ID,来自 list-logs) `--page` `--page-size`
|
|
90
|
+
|
|
91
|
+
## 漂移修正表(旧文档 → 实际)
|
|
92
|
+
|
|
93
|
+
| 旧 | 实际 |
|
|
94
|
+
|----|------|
|
|
95
|
+
| file +upload --path | --file |
|
|
96
|
+
| file +list-files / +get-info | 无 + 前缀 |
|
|
97
|
+
| lesson-create --uuid / --duration | --media-id / --length |
|
|
98
|
+
| lesson-get --lesson-id | --id |
|
|
99
|
+
| lesson-sort --order | --sort-list |
|
|
100
|
+
| lesson-list --page-size | --limit |
|
|
101
|
+
| list-courses --start-time/--end-time/--category-id | 不存在;用 --keyword/--category-path |
|
|
102
|
+
| list-lesson-faces --lesson-id + 时间范围 | --target-id,无时间参数 |
|
|
103
|
+
| assign --module-id / --compulsory 1\|0 | --target-id / --learn-type required\|optional |
|
|
104
|
+
| 关闭课程仅后台 | +update --action close |
|
|
105
|
+
| 文档默认时长 0s | 120s |
|
|
@@ -1,480 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 使用示例(v6.39.0,命令已实测)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 示例 1:一条消息收集 + 创建 + 发布
|
|
4
4
|
|
|
5
|
-
## 示例1: 查询本月的课程
|
|
6
|
-
|
|
7
|
-
### 需求
|
|
8
|
-
查询2024年5月创建的所有已发布课程。
|
|
9
|
-
|
|
10
|
-
### 步骤
|
|
11
|
-
|
|
12
|
-
**1. 计算时间戳**
|
|
13
|
-
|
|
14
|
-
```javascript
|
|
15
|
-
// 2024年5月1日 00:00:00
|
|
16
|
-
const startTime = new Date('2024-05-01 00:00:00').getTime();
|
|
17
|
-
console.log(startTime); // 1714492800000
|
|
18
|
-
|
|
19
|
-
// 2024年5月31日 23:59:59
|
|
20
|
-
const endTime = new Date('2024-05-31 23:59:59').getTime();
|
|
21
|
-
console.log(endTime); // 1717171199000
|
|
22
5
|
```
|
|
6
|
+
主管: **请输入你要上传的课程标题**
|
|
7
|
+
| A | 来源 | A1 本地上传 / A2 素材库选择
|
|
8
|
+
| B | 分类 | B1 外部课程 … B8 产品迭代
|
|
9
|
+
| C | 模板 | C1 合规必修 … C7 不选择模板
|
|
10
|
+
> 请直接提供课程标题、课件来源、分类和模板;本地上传时同时提供文件路径。
|
|
23
11
|
|
|
24
|
-
|
|
12
|
+
用户: Python入门 A1B3C3 + demo.mp4
|
|
25
13
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
--end-time 1717171199000 \
|
|
30
|
-
--status 1
|
|
31
|
-
```
|
|
14
|
+
主管: ✅ 课程已创建 (id: course_xxx) | 模板: 新人入职
|
|
15
|
+
✅ 上传 demo.mp4 → 课件已创建(视频 · 转码中)
|
|
16
|
+
加小测验吗?回复 D1 加 / D2 不加
|
|
32
17
|
|
|
33
|
-
|
|
18
|
+
用户: D2
|
|
34
19
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
------------------------------------ ----------------- ----------- ------ ---------- -------------
|
|
38
|
-
abc123-def456-ghi789 Go语言入门 cat001 1 20 1714492800000
|
|
39
|
-
xyz789-uvw456-rst123 Python基础教程 cat002 1 15 1714579200000
|
|
40
|
-
```
|
|
20
|
+
主管: ✅ Gate Check 6 项通过
|
|
21
|
+
指派课程并发布吗?回复 G1 指派 / G2 不指派;E1 发布 / E2 不发布
|
|
41
22
|
|
|
42
|
-
|
|
23
|
+
用户: G1,E1
|
|
43
24
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
### 需求
|
|
47
|
-
统计某个课程的学习完成情况,包括完成人数、平均进度等。
|
|
48
|
-
|
|
49
|
-
### 步骤
|
|
50
|
-
|
|
51
|
-
**1. 获取课程学习记录**
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
soke-cli course +list-course-users \
|
|
55
|
-
--course-id "abc123-def456-ghi789" \
|
|
56
|
-
--page-size 100
|
|
25
|
+
主管: ✅ 已指派 → ✅ 已发布(status=1)
|
|
57
26
|
```
|
|
58
27
|
|
|
59
|
-
|
|
28
|
+
## 示例 2:素材库 + 小测验(引用试卷)
|
|
60
29
|
|
|
61
|
-
假设返回数据如下:
|
|
62
|
-
|
|
63
|
-
```json
|
|
64
|
-
{
|
|
65
|
-
"data": {
|
|
66
|
-
"list": [
|
|
67
|
-
{
|
|
68
|
-
"dept_user_id": "user001",
|
|
69
|
-
"dept_user_name": "张三",
|
|
70
|
-
"study_progress": 100,
|
|
71
|
-
"finish_status": 1,
|
|
72
|
-
"study_duration": 7200
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"dept_user_id": "user002",
|
|
76
|
-
"dept_user_name": "李四",
|
|
77
|
-
"study_progress": 50,
|
|
78
|
-
"finish_status": 0,
|
|
79
|
-
"study_duration": 3600
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"dept_user_id": "user003",
|
|
83
|
-
"dept_user_name": "王五",
|
|
84
|
-
"study_progress": 100,
|
|
85
|
-
"finish_status": 1,
|
|
86
|
-
"study_duration": 6800
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
30
|
```
|
|
31
|
+
用户: A2B4C5,搜索 销售
|
|
92
32
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
```javascript
|
|
96
|
-
const data = response.data.list;
|
|
97
|
-
|
|
98
|
-
// 总人数
|
|
99
|
-
const totalUsers = data.length; // 3
|
|
33
|
+
主管: 📚 匹配: 11 3231销售连带提升课件.pdf | 16 授客学堂价格表.xlsx …回复编号
|
|
100
34
|
|
|
101
|
-
|
|
102
|
-
const completedUsers = data.filter(u => u.finish_status === 1).length; // 2
|
|
35
|
+
用户: 11,D1,H1,试卷叫"安全卷一"
|
|
103
36
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// 平均进度
|
|
108
|
-
const avgProgress = (data.reduce((sum, u) => sum + u.study_progress, 0) / totalUsers).toFixed(2); // 83.33%
|
|
109
|
-
|
|
110
|
-
// 平均学习时长(小时)
|
|
111
|
-
const avgDuration = (data.reduce((sum, u) => sum + u.study_duration, 0) / totalUsers / 3600).toFixed(2); // 1.62小时
|
|
112
|
-
|
|
113
|
-
console.log(`总人数: ${totalUsers}`);
|
|
114
|
-
console.log(`完成人数: ${completedUsers}`);
|
|
115
|
-
console.log(`完成率: ${completionRate}%`);
|
|
116
|
-
console.log(`平均进度: ${avgProgress}%`);
|
|
117
|
-
console.log(`平均学习时长: ${avgDuration}小时`);
|
|
37
|
+
主管: ✅ 课件已创建(文档)
|
|
38
|
+
✅ 小测验已挂载(--paper-title 安全卷一 · 30 分)
|
|
39
|
+
指派课程并发布吗?回复 G1 指派 / G2 不指派;E1 发布 / E2 不发布
|
|
118
40
|
```
|
|
119
41
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
## 示例3: 查询用户的学习情况
|
|
42
|
+
## 示例 3:查进度 + 关闭
|
|
123
43
|
|
|
124
|
-
### 需求
|
|
125
|
-
查询"张三"在某个课程的学习情况。
|
|
126
|
-
|
|
127
|
-
### 步骤
|
|
128
|
-
|
|
129
|
-
**1. 查询用户ID**
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
soke-cli contact +search-user --name "张三"
|
|
133
44
|
```
|
|
45
|
+
用户: 看看谁学完了
|
|
134
46
|
|
|
135
|
-
|
|
136
|
-
```json
|
|
137
|
-
{
|
|
138
|
-
"data": {
|
|
139
|
-
"dept_user_id": "user001",
|
|
140
|
-
"dept_user_name": "张三"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
```
|
|
47
|
+
主管: 📊 Python入门 — 完成 2/3(张三 100% / 王五 100% / 李四 50%)
|
|
144
48
|
|
|
145
|
-
|
|
49
|
+
用户: 这门课下线吧
|
|
146
50
|
|
|
147
|
-
|
|
148
|
-
soke-cli course +get-course-user \
|
|
149
|
-
--course-id "abc123-def456-ghi789" \
|
|
150
|
-
--dept-user-id "user001"
|
|
151
|
-
```
|
|
51
|
+
主管: ⚠️ 关闭后学员不可见,可重新发布。回复「确认关闭」执行
|
|
152
52
|
|
|
153
|
-
|
|
53
|
+
用户: 确认关闭
|
|
154
54
|
|
|
155
|
-
|
|
156
|
-
{
|
|
157
|
-
"data": {
|
|
158
|
-
"target_id": "record001",
|
|
159
|
-
"dept_user_id": "user001",
|
|
160
|
-
"dept_user_name": "张三",
|
|
161
|
-
"study_progress": 100,
|
|
162
|
-
"finish_status": 1,
|
|
163
|
-
"study_duration": 7200,
|
|
164
|
-
"create_time": 1714492800000,
|
|
165
|
-
"update_time": 1714579200000
|
|
166
|
-
}
|
|
167
|
-
}
|
|
55
|
+
主管: ✅ 已关闭(status=2)
|
|
168
56
|
```
|
|
169
|
-
|
|
170
|
-
**4. 解读结果**
|
|
171
|
-
|
|
172
|
-
- 学习进度: 100%(已完成)
|
|
173
|
-
- 完成状态: 1(已完成)
|
|
174
|
-
- 学习时长: 7200秒(2小时)
|
|
175
|
-
- 开始时间: 2024-05-01
|
|
176
|
-
- 最后更新: 2024-05-02
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## 示例4: 查询课程的课件学习详情
|
|
181
|
-
|
|
182
|
-
### 需求
|
|
183
|
-
查询某个课程的所有课件,并统计每个课件的学习情况。
|
|
184
|
-
|
|
185
|
-
### 步骤
|
|
186
|
-
|
|
187
|
-
**1. 获取课程课件列表**
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
soke-cli course +list-lessons \
|
|
191
|
-
--course-id "abc123-def456-ghi789"
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
**2. 预期输出**
|
|
195
|
-
|
|
196
|
-
```json
|
|
197
|
-
{
|
|
198
|
-
"data": {
|
|
199
|
-
"list": [
|
|
200
|
-
{
|
|
201
|
-
"uuid": "lesson001",
|
|
202
|
-
"title": "第1课:Go语言简介",
|
|
203
|
-
"type": "video",
|
|
204
|
-
"duration": 1800,
|
|
205
|
-
"sort": 1
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"uuid": "lesson002",
|
|
209
|
-
"title": "第2课:环境搭建",
|
|
210
|
-
"type": "video",
|
|
211
|
-
"duration": 2400,
|
|
212
|
-
"sort": 2
|
|
213
|
-
}
|
|
214
|
-
]
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
**3. 查询每个课件的学习记录**
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
# 查询第1课的学习记录
|
|
223
|
-
soke-cli course +list-lesson-learns --lesson-id "lesson001"
|
|
224
|
-
|
|
225
|
-
# 查询第2课的学习记录
|
|
226
|
-
soke-cli course +list-lesson-learns --lesson-id "lesson002"
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
**4. 统计分析**
|
|
230
|
-
|
|
231
|
-
```javascript
|
|
232
|
-
// 假设lesson001有50人学习,40人完成
|
|
233
|
-
// 假设lesson002有50人学习,30人完成
|
|
234
|
-
|
|
235
|
-
const lessonStats = [
|
|
236
|
-
{ title: "第1课:Go语言简介", total: 50, completed: 40, rate: "80%" },
|
|
237
|
-
{ title: "第2课:环境搭建", total: 50, completed: 30, rate: "60%" }
|
|
238
|
-
];
|
|
239
|
-
|
|
240
|
-
console.table(lessonStats);
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
|
|
245
|
-
## 示例5: 按分类查询课程
|
|
246
|
-
|
|
247
|
-
### 需求
|
|
248
|
-
查询"技术培训"分类下的所有已发布课程。
|
|
249
|
-
|
|
250
|
-
### 步骤
|
|
251
|
-
|
|
252
|
-
**1. 获取课程分类列表**
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
soke-cli course +list-categories
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**2. 找到目标分类**
|
|
259
|
-
|
|
260
|
-
假设返回:
|
|
261
|
-
```json
|
|
262
|
-
{
|
|
263
|
-
"data": {
|
|
264
|
-
"list": [
|
|
265
|
-
{
|
|
266
|
-
"uuid": "cat001",
|
|
267
|
-
"title": "技术培训",
|
|
268
|
-
"parent_id": "0"
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
"uuid": "cat002",
|
|
272
|
-
"title": "管理培训",
|
|
273
|
-
"parent_id": "0"
|
|
274
|
-
}
|
|
275
|
-
]
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
**3. 查询该分类下的课程**
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
soke-cli course +list-courses \
|
|
284
|
-
--start-time 1704038400000 \
|
|
285
|
-
--end-time 1735660799000 \
|
|
286
|
-
--category-id "cat001" \
|
|
287
|
-
--status 1
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
## 示例6: 查询人脸识别记录
|
|
293
|
-
|
|
294
|
-
### 需求
|
|
295
|
-
查询某个课件的人脸识别记录,确保学员本人学习。
|
|
296
|
-
|
|
297
|
-
### 步骤
|
|
298
|
-
|
|
299
|
-
**1. 查询课件的人脸识别记录**
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
soke-cli course +list-lesson-faces \
|
|
303
|
-
--lesson-id "lesson001" \
|
|
304
|
-
--start-time 1714492800000 \
|
|
305
|
-
--end-time 1717171199000
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
**2. 预期输出**
|
|
309
|
-
|
|
310
|
-
```json
|
|
311
|
-
{
|
|
312
|
-
"data": {
|
|
313
|
-
"list": [
|
|
314
|
-
{
|
|
315
|
-
"uuid": "face001",
|
|
316
|
-
"dept_user_id": "user001",
|
|
317
|
-
"dept_user_name": "张三",
|
|
318
|
-
"face_status": 1,
|
|
319
|
-
"face_time": 1714492800000
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
"uuid": "face002",
|
|
323
|
-
"dept_user_id": "user002",
|
|
324
|
-
"dept_user_name": "李四",
|
|
325
|
-
"face_status": 2,
|
|
326
|
-
"face_time": 1714493400000
|
|
327
|
-
}
|
|
328
|
-
]
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
**3. 分析识别结果**
|
|
334
|
-
|
|
335
|
-
- `face_status = 1`: 识别成功(张三)
|
|
336
|
-
- `face_status = 2`: 识别失败(李四)
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## 示例7: 批量查询多个用户的学习记录
|
|
341
|
-
|
|
342
|
-
### 需求
|
|
343
|
-
查询多个用户在某个课程的学习情况。
|
|
344
|
-
|
|
345
|
-
### 步骤
|
|
346
|
-
|
|
347
|
-
**1. 准备用户ID列表**
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
# 用户ID列表(逗号分隔,最多100个)
|
|
351
|
-
USER_IDS="user001,user002,user003,user004,user005"
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
**2. 批量查询**
|
|
355
|
-
|
|
356
|
-
```bash
|
|
357
|
-
soke-cli course +list-course-users \
|
|
358
|
-
--course-id "abc123-def456-ghi789" \
|
|
359
|
-
--userid-list "$USER_IDS"
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
**3. 预期输出**
|
|
363
|
-
|
|
364
|
-
```json
|
|
365
|
-
{
|
|
366
|
-
"data": {
|
|
367
|
-
"list": [
|
|
368
|
-
{
|
|
369
|
-
"dept_user_id": "user001",
|
|
370
|
-
"dept_user_name": "张三",
|
|
371
|
-
"study_progress": 100,
|
|
372
|
-
"finish_status": 1
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
"dept_user_id": "user002",
|
|
376
|
-
"dept_user_name": "李四",
|
|
377
|
-
"study_progress": 50,
|
|
378
|
-
"finish_status": 0
|
|
379
|
-
}
|
|
380
|
-
// ... 其他用户
|
|
381
|
-
]
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## 示例8: 查询某个时间段完成的学习记录
|
|
389
|
-
|
|
390
|
-
### 需求
|
|
391
|
-
查询2024年5月完成课程学习的所有用户。
|
|
392
|
-
|
|
393
|
-
### 步骤
|
|
394
|
-
|
|
395
|
-
**1. 计算时间范围**
|
|
396
|
-
|
|
397
|
-
```javascript
|
|
398
|
-
const finishStartTime = new Date('2024-05-01 00:00:00').getTime(); // 1714492800000
|
|
399
|
-
const finishEndTime = new Date('2024-05-31 23:59:59').getTime(); // 1717171199000
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
**2. 查询完成记录**
|
|
403
|
-
|
|
404
|
-
```bash
|
|
405
|
-
soke-cli course +list-course-users \
|
|
406
|
-
--course-id "abc123-def456-ghi789" \
|
|
407
|
-
--finish-start-time 1714492800000 \
|
|
408
|
-
--finish-end-time 1717171199000
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
**3. 筛选已完成的记录**
|
|
412
|
-
|
|
413
|
-
```javascript
|
|
414
|
-
const data = response.data.list;
|
|
415
|
-
const completedUsers = data.filter(u => u.finish_status === 1);
|
|
416
|
-
|
|
417
|
-
console.log(`5月完成学习的用户数: ${completedUsers.length}`);
|
|
418
|
-
completedUsers.forEach(u => {
|
|
419
|
-
console.log(`- ${u.dept_user_name}: ${u.study_progress}%`);
|
|
420
|
-
});
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
---
|
|
424
|
-
|
|
425
|
-
## 常用脚本
|
|
426
|
-
|
|
427
|
-
### 脚本1: 课程完成率统计脚本
|
|
428
|
-
|
|
429
|
-
```bash
|
|
430
|
-
#!/bin/bash
|
|
431
|
-
|
|
432
|
-
COURSE_ID="abc123-def456-ghi789"
|
|
433
|
-
|
|
434
|
-
# 获取学习记录
|
|
435
|
-
RESULT=$(soke-cli course +list-course-users --course-id "$COURSE_ID" --page-size 100)
|
|
436
|
-
|
|
437
|
-
# 使用jq解析JSON(需要安装jq)
|
|
438
|
-
TOTAL=$(echo "$RESULT" | jq '.data.list | length')
|
|
439
|
-
COMPLETED=$(echo "$RESULT" | jq '[.data.list[] | select(.finish_status == 1)] | length')
|
|
440
|
-
RATE=$(echo "scale=2; $COMPLETED * 100 / $TOTAL" | bc)
|
|
441
|
-
|
|
442
|
-
echo "课程ID: $COURSE_ID"
|
|
443
|
-
echo "总人数: $TOTAL"
|
|
444
|
-
echo "完成人数: $COMPLETED"
|
|
445
|
-
echo "完成率: $RATE%"
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### 脚本2: 批量导出课程数据
|
|
449
|
-
|
|
450
|
-
```bash
|
|
451
|
-
#!/bin/bash
|
|
452
|
-
|
|
453
|
-
START_TIME=1704038400000
|
|
454
|
-
END_TIME=1735660799000
|
|
455
|
-
OUTPUT_FILE="courses.json"
|
|
456
|
-
|
|
457
|
-
# 导出所有课程
|
|
458
|
-
soke-cli course +list-courses \
|
|
459
|
-
--start-time "$START_TIME" \
|
|
460
|
-
--end-time "$END_TIME" \
|
|
461
|
-
--page-size 100 > "$OUTPUT_FILE"
|
|
462
|
-
|
|
463
|
-
echo "课程数据已导出到: $OUTPUT_FILE"
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
---
|
|
467
|
-
|
|
468
|
-
## 注意事项
|
|
469
|
-
|
|
470
|
-
1. **时间戳格式**: 所有时间参数必须使用毫秒级Unix时间戳
|
|
471
|
-
2. **分页处理**: 如果数据量大,需要循环分页查询
|
|
472
|
-
3. **权限检查**: 确保已完成认证并有相应权限
|
|
473
|
-
4. **错误处理**: 建议在脚本中添加错误处理逻辑
|
|
474
|
-
5. **API限流**: 注意API调用频率限制
|
|
475
|
-
|
|
476
|
-
## 相关资源
|
|
477
|
-
|
|
478
|
-
- [SKILL.md](../SKILL.md) - 完整文档
|
|
479
|
-
- [README.md](../README.md) - 快速开始
|
|
480
|
-
- [course-list-courses.md](./course-list-courses.md) - 详细参考
|