@sokeai/cli 1.0.79 → 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 +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/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 +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-training/MODULE.md +55 -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//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-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) - 详细参考
|