@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,37 @@
|
|
|
1
|
+
# 指派子 SOP(原 soke-assign 内嵌)
|
|
2
|
+
|
|
3
|
+
> 参数以 ../cli-facts.md 为准。统一流程规定:先完成指派,再执行发布 Gate;平台虽接受未发布课程指派,但学员须发布后才可见。发布后不重复指派,除非回查显示指派未生效。
|
|
4
|
+
|
|
5
|
+
## 1. 拉取部门(全树需递归)
|
|
6
|
+
|
|
7
|
+
`soke-cli assign +list-departments --parent-id 1` 仅返回顶级;逐层用返回的部门 ID 作为 --parent-id 递归,合并成全树存内存。
|
|
8
|
+
|
|
9
|
+
## 1.5 指派对象类型弹窗
|
|
10
|
+
|
|
11
|
+
> 指派+发布条件弹窗中,指派选项固定为「1. 指派(推荐)/2. 不指派」,发布选项固定为「1. 发布/2. 不发布」。
|
|
12
|
+
|
|
13
|
+
G1 后弹窗两选:[部门指派 / 人员指派](用户组/职位隐藏,用户主动问才答「请在后台→指派管理中按用户组/职位指派」)。
|
|
14
|
+
- 部门指派 → 先执行 `+list-departments` 递归拉取部门树;再使用原生选择弹窗罗列可选部门名称、成员数和部门 ID,用户选择后才传 `--dept-ids` + `--dept-names`;不得只要求用户输入部门名称。
|
|
15
|
+
- 人员指派 → 关键词 `+list-users --keyword` 编号选 → `--user-ids` + `--user-names`。
|
|
16
|
+
|
|
17
|
+
## 2. 定人
|
|
18
|
+
|
|
19
|
+
- 按部门:用户关键词在部门树模糊匹配(不区分大小写);唯一→确认,多个→文本编号列表选,无→列表全展示;取部门下用户:`assign +list-users --dept-id <id>`(大部门用 --list-all 1 + 分页);
|
|
20
|
+
- 按姓名:`assign +list-users --keyword "姓名"`(--search-target name/phone/job_number)。
|
|
21
|
+
|
|
22
|
+
## 3. 执行指派
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
soke-cli assign +create \
|
|
26
|
+
--module course --target-id <courseId> \
|
|
27
|
+
--learn-type required|optional \
|
|
28
|
+
--user-ids "id1,id2" --user-names "名1,名2"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**--target-id(不是 --module-id);--learn-type required=必修/optional=选修(不是 --compulsory)**。必修/选修必须弹窗确认。
|
|
32
|
+
按部门指派可直接传 `--dept-ids` + `--dept-names`。单批 ≤500 人,超出分批。
|
|
33
|
+
|
|
34
|
+
## 4. 验证与查询
|
|
35
|
+
|
|
36
|
+
`assign +list --module course --target-id <courseId>` 回查指派结果。
|
|
37
|
+
取消指派 CLI 不支持 → 后台话术。重复指派同一用户以最新为准。
|
|
@@ -30,41 +30,32 @@ tags: [soke, category, classification, hierarchy]
|
|
|
30
30
|
### Step 1: 查询分类 `course +list-categories`
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
soke course +list-categories
|
|
33
|
+
soke-cli course +list-categories
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
无必填参数,返回当前租户下完整的分类树。
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
返回结构以 `data.list` 为准,每项使用 `title`、`uuid`、`parent_id`;分页状态使用 `data.has_more`。当前事实表未确认 `--parent-id` 和 `--level`,禁止自行传入;需要展示子分类时,在已拉取列表中按 `parent_id` 本地构建层级。
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|------|------|------|
|
|
42
|
-
| `--parent-id` | 否 | 查询指定父分类下的子分类 |
|
|
43
|
-
| `--level` | 否 | 按层级过滤(1-6) |
|
|
40
|
+
### Step 2: 分类选择(聊天文本分页列表,不用弹窗)
|
|
44
41
|
|
|
45
|
-
|
|
42
|
+
组件单问≤4 选项装不下分页列表,故分类选择走聊天文本交互,规格:
|
|
46
43
|
|
|
47
|
-
|
|
44
|
+
- **查询后再显示真实分类**:必须先执行 `soke-cli course +list-categories --page 1 --page-size 100 --format json`,从返回的 `data.list` 读取 `title`、`uuid`、`parent_id`;将 `parent_id="1"` 的记录作为一级分类,禁止显示占位符、预设分类或空表;
|
|
45
|
+
- **只显示一级分类**,编号列表,**一页 10 个**;超过 10 个时末尾提示「回复'下一页'翻页(第 X/Y 页)」;
|
|
46
|
+
- **可搜索**:分类表格下方必须明确提示「如果没有找到需要的分类,请回复“搜索XX”搜索,或回复“下一页”查找」;用户回复「搜索 XX」→ 模糊匹配一级分类名 → 展示匹配编号列表;
|
|
47
|
+
- 用户回复**编号或名称**即选定;用户说"随便"→ 取第一个;
|
|
48
|
+
- 用户已指定分类名且唯一匹配 → 不展示列表,直接使用;
|
|
49
|
+
- **无 Other、无弹窗**;列表末尾固定附「分类不存在?请后台新建,完成后回复'分类建好了'」。
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
展示示例:
|
|
50
52
|
|
|
51
|
-
| 场景 | 弹窗策略 |
|
|
52
|
-
|------|---------|
|
|
53
|
-
| 用户已指定分类名,匹配到唯一结果 | 不弹窗,直接使用 |
|
|
54
|
-
| 匹配到多个结果 | 弹窗列匹配项,最后加 `🆕 新建分类` |
|
|
55
|
-
| 用户未指定分类 | 弹窗列一级分类列表,最后加 `🆕 新建分类` |
|
|
56
|
-
| 用户说"随便" | 取第一个一级分类 |
|
|
57
|
-
|
|
58
|
-
弹窗示例:
|
|
59
53
|
```
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- label: "📁 企业管理" description: "一级分类 · 含 5 个子分类"
|
|
66
|
-
- label: "📁 产品设计" description: "一级分类 · 含 3 个子分类"
|
|
67
|
-
- label: "🆕 新建分类" description: "前往管理后台新建分类"
|
|
54
|
+
请选择课程分类(一级 · 第 1/1 页):
|
|
55
|
+
1 外部课程 2 授客学堂赠送 3 新员工培训 4 岗位技能
|
|
56
|
+
5 企业文化 6 办公软件 7 职业素养 8 产品迭代
|
|
57
|
+
如果没有找到需要的分类,请回复“搜索XX”搜索,或回复“下一页”查找。
|
|
58
|
+
回复编号或名称选择
|
|
68
59
|
```
|
|
69
60
|
|
|
70
61
|
### Step 3: 新建分类(CLI 不支持)
|
|
@@ -106,7 +97,7 @@ ask_user_question
|
|
|
106
97
|
## 检查清单
|
|
107
98
|
|
|
108
99
|
- [ ] 已通过 list-categories 获取完整分类树
|
|
109
|
-
- [ ]
|
|
110
|
-
- [ ]
|
|
100
|
+
- [ ] 分类列表只显一级、10 个/页、带翻页与搜索提示
|
|
101
|
+
- [ ] 列表末尾附后台新建分类指引
|
|
111
102
|
- [ ] 用户选新建时已告知后台操作路径
|
|
112
103
|
- [ ] 确认目标分类 ID 存在于返回结果中
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 小测验最小建题链 SOP(有限整合·范围声明)
|
|
2
|
+
|
|
3
|
+
> 本 SOP 只含:+create-pool / +create-question / +create-paper / +update-paper(publish)。
|
|
4
|
+
> 考试实体/指派/成绩不在此范围 → 话术「请用 soke-exam 技能或后台」。参数以 ../cli-facts.md 为准。
|
|
5
|
+
|
|
6
|
+
## 触发
|
|
7
|
+
|
|
8
|
+
Phase 2 Step 2.6 选「导入试卷(上传试题表)」时执行。引用已有试卷无需本 SOP(直接 `lesson-create --type exam --paper-title|--paper-id`)。选择已有试卷时,必须先拉取前 20 份试卷,并在当前对话中直接用 Markdown 表格展示,不使用弹窗;不得生成、打开或展示独立文件、远程页面或远程课程界面,也不得将列表同步到远程平台展示。表格下方固定提示:「回复“搜索 XX”可模糊匹配;“下一页”翻页(当前仅 1 页)。」
|
|
9
|
+
|
|
10
|
+
## 流程
|
|
11
|
+
|
|
12
|
+
1. **解析试题表**:用户给本地 Excel/Word → 本地解析(xlsx/docx 能力),提炼为题目清单;**原文不进上下文**;
|
|
13
|
+
2. **题库**:默认建临时题库(不同步);用户明确说「存题库」→ `exam +list-pools` 搜已有,或 `exam +create-pool --title "<名>" --path '["<题库分类uuid>"]'` 新建(分类用 `exam +list-pool-categories`);
|
|
14
|
+
3. **循环建题** `exam +create-question`:
|
|
15
|
+
- `--type` single_choice/choice/uncertain_choice/determine/fill/essay/material;
|
|
16
|
+
- 选择题必传 `--choices '[{"key":"A1","value":"A"}]'` + `--answer '["0"]'`(0-based 索引);判断题 answer ["0"]对/["1"]错;
|
|
17
|
+
- **填空:答案 `[[答案N]]` 嵌入 --title,不传 --answer**;
|
|
18
|
+
- `--score` >0;`--difficulty` simple/medium/hard;`--pool-id`;
|
|
19
|
+
4. **抽卷**:`exam +create-paper --title "<≤50字>" --pool-id '["<pool>"]' --pattern questionType --type-metas '{"single_choice":{"count":N,"score":N},...}'` → 提取 paper uuid;
|
|
20
|
+
5. **发布试卷**:`exam +update-paper --paper-id <uuid> --title "<同名重传!>" --action publish`(**--title 不重传会被清空**);
|
|
21
|
+
6. **挂载课件**:`course +lesson-create --course-id <id> --title "<测试名称>" --type exam --paper-id <uuid> --minute <分> --second <秒>`;
|
|
22
|
+
7. 回查 `course +lesson-list` 确认。
|
|
23
|
+
|
|
24
|
+
## 硬规则
|
|
25
|
+
|
|
26
|
+
- --paper-id 只能取自 +create-paper 返回,禁止手填;
|
|
27
|
+
- 考试分类 ≠ 题库分类,UUID 不可混用(本链不建考试,天然避开);
|
|
28
|
+
- 搜不到想要的试卷的兜底话术(与后台同口径):考试管理-试卷管理创建。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 课件子 SOP(原 soke-lesson 内嵌)
|
|
2
|
+
|
|
3
|
+
> 参数以 ../cli-facts.md 为准。仅 video/audio/document/photo_gallery/exam 五类型。
|
|
4
|
+
|
|
5
|
+
## 创建课件
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
soke-cli course +lesson-create \
|
|
9
|
+
--course-id <courseId> --title "<标题>" --type <video|audio|document> \
|
|
10
|
+
--media-id <素材uuid> --filename "<文件名>" --ext <ext> \
|
|
11
|
+
--filesize <bytes> --object "<object>" --length <秒>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
六字段(media-id/filename/ext/filesize/object/length 默认值)**只能取自 material SOP 返回**,禁止手填。
|
|
15
|
+
title:用户指定或从 filename 推断。
|
|
16
|
+
|
|
17
|
+
photo_gallery / exam 类型分别走 subs/photo、subs/exam SOP。
|
|
18
|
+
|
|
19
|
+
## 查询与排序
|
|
20
|
+
|
|
21
|
+
- 列表:`course +lesson-list --course-id <id>`(--limit 默认10;转码状态逐条看 transcode_status)
|
|
22
|
+
- 详情:`course +lesson-get --id <lessonId>`(**--id 不是 --lesson-id**)
|
|
23
|
+
- 排序:`course +lesson-sort --course-id <id> --sort-list "id1,id2,id3"`(**--sort-list 不是 --order**;未列出的课件保持末尾不丢失)
|
|
24
|
+
|
|
25
|
+
## 输出与验证
|
|
26
|
+
|
|
27
|
+
创建后输出 ✅ 课程/课件/类型/时长/lesson-id;并用 `+lesson-list` 回查确认存在。
|
|
28
|
+
课件删除 CLI 不支持 → 后台话术。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 素材库子 SOP(原 soke-material 内嵌)
|
|
2
|
+
|
|
3
|
+
> 参数以 ../cli-facts.md 为准。产出六字段资产对象,供 lesson SOP 直接引用。
|
|
4
|
+
|
|
5
|
+
## 本地上传
|
|
6
|
+
|
|
7
|
+
1. 校验:文件存在;扩展名在 `.mp4|.avi|.mov|.mkv|.webm|.mp3|.wav|.ogg|.flac|.aac|.pdf|.ppt|.pptx|.doc|.docx|.xls|.xlsx`;取字节数;
|
|
8
|
+
2. 执行:`soke-cli file +upload --file "<绝对路径>"`(type 自动检测;--length 默认视频600/音频300/文档120);
|
|
9
|
+
3. 解析返回,**全部字段原样保留**:`{uuid, filename, type, ext, filesize, object}`;
|
|
10
|
+
4. 输出摘要(✅ 文件名/类型/大小/UUID)。
|
|
11
|
+
|
|
12
|
+
⚠️ 不支持图片——图片走 subs/photo/SOP.md。
|
|
13
|
+
|
|
14
|
+
## 素材库选择
|
|
15
|
+
|
|
16
|
+
1. `soke-cli file list-files --page 1 --page-size 20` 分页拉取;
|
|
17
|
+
2. 展示 文件名/类型/大小/日期(前 20 条),告知"输入关键词或序号";
|
|
18
|
+
3. 关键词 → 模糊匹配 → 弹窗列匹配项;序号 → 确认;
|
|
19
|
+
4. 无匹配 → 弹窗["切本地上传"/"重新搜索"]。
|
|
20
|
+
|
|
21
|
+
## 硬规则
|
|
22
|
+
|
|
23
|
+
- 返回对象完整传递下游,禁止改写字段;
|
|
24
|
+
- 上传失败:检查路径/格式/大小/登录态(troubleshoot.md)。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 图片库最小上传链 SOP(有限整合·范围声明)
|
|
2
|
+
|
|
3
|
+
> 本 SOP 只含:+create / +list / +get。批量删除等不在此范围。参数以 ../cli-facts.md 为准。
|
|
4
|
+
|
|
5
|
+
## 图片课件(Phase 2 Step 2.7)
|
|
6
|
+
|
|
7
|
+
1. 用户提供本地图片(jpg/jpeg/png 等)→ `soke-cli photo-gallery +create --file "<路径>" [--title "<名>"]`;
|
|
8
|
+
2. 提取返回 uuid;object 取 photoUri 的 OSS 路径段(`+get --uuid` 可查 photoUri);
|
|
9
|
+
3. `course +lesson-create --course-id <id> --title "<课件名>" --type photo_gallery --media-id <uuid> --filename <文件名> --ext <ext> --filesize <字节> --object <photoUri路径>`(**photo_gallery 走非考试分支,六字段必填,回归实测**);
|
|
10
|
+
4. 回查 `+lesson-list` 确认。
|
|
11
|
+
|
|
12
|
+
搜已有图:`photo-gallery +list --file-keyword`(**按文件名匹配,不是标题**)。
|
|
13
|
+
|
|
14
|
+
## 封面联动(Phase 3)
|
|
15
|
+
|
|
16
|
+
- 新封面:`+create` 上传后取 **photoUri**(`photo-gallery +get --uuid` 或 +create 返回)→ `course +update --course-id <id> --image "<photoUri>"`;
|
|
17
|
+
- 选已有图:`photo-gallery +list --file-keyword "<关键词>"` → 弹窗选 → 取 photoUri;
|
|
18
|
+
- **--image 只收 photoUri;禁止传素材 UUID / OSS object / 本地路径**。
|
|
19
|
+
|
|
20
|
+
## 硬规则
|
|
21
|
+
|
|
22
|
+
- --media-id(photo_gallery) 只能取自 +create 返回,禁止手填;
|
|
23
|
+
- `file +upload` 不收图片,图片必须走本 SOP。
|
|
@@ -1,168 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
name: soke-course-publish
|
|
3
|
-
version: 1.0.0
|
|
4
|
-
description: 发布管理 — 发布前 Gate Check 五道校验 + 发布操作,含状态流转与审批规则
|
|
5
|
-
tags: [soke, publish, gate-check, status, approval]
|
|
6
|
-
---
|
|
1
|
+
# 发布管理子 SOP
|
|
7
2
|
|
|
8
|
-
|
|
3
|
+
> 状态流转与 Gate Check 矩阵的唯一定义在 ../sop-publish-check.md;本文件只写执行动作。参数以 ../cli-facts.md 为准。
|
|
9
4
|
|
|
10
|
-
##
|
|
5
|
+
## 状态流转(收敛定案)
|
|
11
6
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
┌──────────┐ 发布 ┌──────────┐
|
|
18
|
-
│ 0: 未发布 │ ──────────→ │ 1: 已发布 │
|
|
19
|
-
└──────────┘ └─────┬────┘
|
|
20
|
-
↑ │
|
|
21
|
-
│ 关闭 │
|
|
22
|
-
└───────────────────────────┘
|
|
23
|
-
← 重新发布
|
|
24
|
-
|
|
25
|
-
┌──────────┐
|
|
26
|
-
│ 2: 已关闭 │
|
|
27
|
-
└──────────┘
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
| 状态码 | 含义 | 说明 |
|
|
31
|
-
|--------|------|------|
|
|
32
|
-
| `0` | 未发布 | 课程初始状态,可编辑,学员不可见 |
|
|
33
|
-
| `1` | 已发布 | 已上线,学员可见可学习 |
|
|
34
|
-
| `2` | 已关闭 | 已下线,学员不可见,可重新发布 |
|
|
35
|
-
|
|
36
|
-
> 已关闭 (status=2) 的课程可重新发布回到 status=1,也可继续编辑后重新发布。
|
|
7
|
+
- 0 未发布 → 1 已发布:`course +publish`;
|
|
8
|
+
- 1 → 2 已关闭:`course +update --action close`(**CLI 支持**;删除才需后台);
|
|
9
|
+
- 2 → 1:**已关闭可重新发布**(收敛定案,troubleshoot 旧说法作废)。
|
|
37
10
|
|
|
38
11
|
## 执行流程
|
|
39
12
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| 序号 | 校验项 | 通过条件 | 不通过提示 |
|
|
45
|
-
|------|--------|----------|-----------|
|
|
46
|
-
| 1 | **标题** | 课程标题不为空 | "请填写课程标题" |
|
|
47
|
-
| 2 | **分类** | 已选择课程所属分类 | "请选择课程分类" |
|
|
48
|
-
| 3 | **课件 ≥ 1** | 课程下至少有 1 节课件 | "请至少添加一节课件" |
|
|
49
|
-
| 4 | **无转码失败课件** | 所有视频/音频课件转码状态为成功 | "存在转码失败的课件,请重新上传" |
|
|
50
|
-
| 5 | **无转码中课件** | 没有正在转码的课件(转码完成后才可发布) | "课件转码中,请稍候再发布" |
|
|
51
|
-
|
|
52
|
-
> 文档类课件无需转码,校验项 4、5 仅针对视频和音频课件。
|
|
53
|
-
|
|
54
|
-
### 第二步:执行发布 `course +publish`
|
|
55
|
-
|
|
56
|
-
直接发布:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
soke course +publish --course-id <courseId>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
定时发布:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
soke course +publish \
|
|
66
|
-
--course-id <courseId> \
|
|
67
|
-
--publish-time "2026-07-14 17:24:42"
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
| 参数 | 必填 | 说明 |
|
|
71
|
-
|------|------|------|
|
|
72
|
-
| `--course-id` | 是 | 课程 ID |
|
|
73
|
-
| `--publish-time` | 否 | 定时发布时间,输入北京时间;不传则直接发布 |
|
|
74
|
-
|
|
75
|
-
> 实现口径:传入非零 `--publish-time` 时开启定时发布;未传或传 `0000-00-00 00:00:00` 时不开启定时发布。
|
|
76
|
-
|
|
77
|
-
发布成功后课程状态由 `0` → `1`。
|
|
78
|
-
|
|
79
|
-
## 关闭课程
|
|
80
|
-
|
|
81
|
-
关闭已发布课程:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
soke course +update --course-id <courseId> --action close
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
关闭成功后课程状态由 `1` → `2`,学员端不可见,历史学习记录保留。已关闭课程可再次执行 `course +publish` 重新发布。
|
|
13
|
+
1. read ../sop-publish-check.md,立即发布逐项执行发布 Gate(6 项);关闭课程另执行关闭专用检查;
|
|
14
|
+
2. 🔴 阻塞 → 列全部阻塞项 + 修复指引 → 停止;仅 🟡 → 弹窗「有 X 项警告,确认继续发布吗?」;转码中/失败不得进入发布执行;
|
|
15
|
+
3. 直接发布:`course +publish --course-id <id>`;定时:`--publish-time "YYYY-MM-DD HH:MM:SS"`(北京时间);
|
|
16
|
+
4. 执行前重新获取课程状态并再次 Gate Check,确认仍是当前课程与计划;直接发布回查 status==1;定时发布回查 publish_time,未到点时 status 仍可为 0。
|
|
88
17
|
|
|
89
|
-
##
|
|
18
|
+
## ⚠️ CLI 不支持
|
|
90
19
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
soke course +delete --course-id <courseId>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
删除前必须先查询课程状态。仅允许删除 `status=0` 未发布或 `status=2` 已关闭课程;`status=1` 已发布课程必须先执行 `course +update --course-id <courseId> --action close` 关闭后再删除。删除成功后课程状态变为已删除(`status=-1` 或 `status=3`)。
|
|
98
|
-
|
|
99
|
-
## ⚠️ CLI 不支持的操作
|
|
100
|
-
|
|
101
|
-
| 操作 | 说明 | 替代路径 |
|
|
102
|
-
|------|------|---------|
|
|
103
|
-
| **审批流** | 发布需经过审批流程 | 后台 → 系统设置 → 审批设置 |
|
|
104
|
-
| **批量发布** | 一次发布多门课程 | 后台 → 课程管理 → 批量操作 |
|
|
105
|
-
|
|
106
|
-
## 审批规则
|
|
107
|
-
|
|
108
|
-
### 默认审批配置
|
|
109
|
-
|
|
110
|
-
| 配置项 | 默认值 | 说明 |
|
|
111
|
-
|--------|--------|------|
|
|
112
|
-
| 审批开关 | **关闭** | 默认不启用审批流,发布即上线 |
|
|
113
|
-
| 审批流层级 | 1 级 | 如需开启,仅支持 1 级审批 |
|
|
114
|
-
| 第一级审批人 | **不可删除** | 审批流至少保留 1 个审批节点 |
|
|
115
|
-
| 默认审批人 | **主管理员** | 系统默认审批人为租户主管理员 |
|
|
116
|
-
| 审批模式 | **或签** | 第一级多个审批人时,任一人通过即可 |
|
|
117
|
-
|
|
118
|
-
### 开启审批流
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
后台 → 系统设置 → 审批设置 → 课程发布审批
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
开启后,发布操作将生成审批单,审批通过后课程才正式上线(status 变为 1)。
|
|
20
|
+
审批流(后台→系统设置→审批设置;默认关闭)、批量发布(后台)、删除课程(后台,不可逆)。
|
|
125
21
|
|
|
126
22
|
## 输出标准
|
|
127
23
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
✅ 课程发布成功
|
|
132
|
-
- 课程: {title} (ID: {courseId})
|
|
133
|
-
- 状态: 已发布 (status=1)
|
|
134
|
-
- 学员端已可见
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Gate Check 不通过(示例):
|
|
138
|
-
|
|
139
|
-
```
|
|
140
|
-
❌ 发布校验未通过
|
|
141
|
-
- [✗] 标题:请填写课程标题
|
|
142
|
-
- [✓] 分类:已选择
|
|
143
|
-
- [✗] 课件:请至少添加一节课件
|
|
144
|
-
- [✓] 转码失败:无
|
|
145
|
-
- [✓] 转码中:无
|
|
146
|
-
|
|
147
|
-
请完成上述校验项后重新发布。
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## 注意事项
|
|
151
|
-
|
|
152
|
-
1. 先过 Gate Check,再执行 publish — 校验项全部通过是发布的必要条件
|
|
153
|
-
2. 转码是异步过程,上传视频/音频后需等待转码完成再发布
|
|
154
|
-
3. 课程关闭后学员端不可见,但历史学习记录保留
|
|
155
|
-
4. 关闭后可重新发布,状态回到 1
|
|
156
|
-
5. 删除课程不可逆,CLI 只允许删除未发布(status=0)或已关闭(status=2)课程
|
|
157
|
-
6. 审批流默认关闭,如需开启需后台手动配置
|
|
158
|
-
|
|
159
|
-
## 检查清单
|
|
160
|
-
|
|
161
|
-
- [ ] 标题已填写(非空)
|
|
162
|
-
- [ ] 分类已选择
|
|
163
|
-
- [ ] 课件数 ≥ 1
|
|
164
|
-
- [ ] 无转码失败的课件
|
|
165
|
-
- [ ] 无正在转码中的课件
|
|
166
|
-
- [ ] 五道校验全部通过
|
|
167
|
-
- [ ] publish 执行成功,状态确认变为 1
|
|
168
|
-
- [ ] 如涉及审批流,已告知默认关闭及后台配置路径
|
|
24
|
+
成功:✅ 课程发布成功 / 标题 / ID / status=1 / 学员端可见。
|
|
25
|
+
定时:✅ 已设置定时发布 / 标题 / ID / publish_time / 当前 status=0(到点后回查)。
|
|
26
|
+
不通过:❌ 逐项 [✓]/[✗] 列表 + 修复指引。
|
|
@@ -1,165 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
name: soke-course-query
|
|
3
|
-
version: 1.0.0
|
|
4
|
-
description: 数据查询 — 课程/学员/学习记录/人脸验证数据查询
|
|
5
|
-
tags: [soke, query, data, analytics, learning-records]
|
|
6
|
-
---
|
|
1
|
+
# 数据查询子 SOP
|
|
7
2
|
|
|
8
|
-
|
|
3
|
+
> 参数以 ../cli-facts.md 为准(本节命令名/参数已按 v1.0.77 实测修正)。
|
|
9
4
|
|
|
10
|
-
##
|
|
5
|
+
## 课程维度
|
|
11
6
|
|
|
12
|
-
|
|
7
|
+
- **学习统计未指定课程时**:先执行 `course +list-courses --status 1 --page 1 --page-size 20`,只展示已发布线上课前 20 个(标题、course-id、学员数、课件数),不直接展开详情;表格下方固定提示:`回复「搜索 XX」可模糊匹配;"下一页"翻页(当前仅 1 页)。`
|
|
8
|
+
- 用户回复课程编号、名称或 `course-id` 后,再进入学员/课件/作业统计;用户回复「搜索 XX」时带 `--keyword` 重查并重新展示前 20 个;回复「下一页」时按 `--page` 翻页并更新页码。
|
|
9
|
+
- 列表:`course +list-courses [--keyword --category-path --status 0|1|2 --is-in --is-my --page --page-size]`(**无时间范围参数**;学习统计入口固定 `status=1`,查其他状态需用户明确说明)
|
|
10
|
+
- 详情:`course +get-course --course-id <id>`
|
|
13
11
|
|
|
14
|
-
##
|
|
12
|
+
## 学员维度
|
|
15
13
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- **状态码含义**:
|
|
19
|
-
- `status`(课程):`0`=未发布,`1`=已发布,`2`=已关闭
|
|
20
|
-
- `face_status`(人脸):`1`=验证成功,`2`=验证失败
|
|
14
|
+
- 课程学员:`course +list-course-users --course-id <id> --finish-start-time <ms> --finish-end-time <ms> [--userid-list(≤100)]`(**finish 时间必传,且起止跨度 ≤7 天**(回归实测;旧文档 365 天作废);查全量按 7 天窗口循环分页)
|
|
15
|
+
- 学员详情:`course +get-course-user --course-id <id> --dept-user-id <uid>`
|
|
21
16
|
|
|
22
|
-
##
|
|
17
|
+
## 课件维度
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
- 学习记录:`course +list-lesson-learns --lesson-id <id> [--course-id --userid-list --finish-start-time --finish-end-time]`
|
|
20
|
+
- 人脸记录:`course +list-lesson-faces --target-id <课件uuid>`(**--target-id,无时间参数**);face_status 1=成功 2=失败
|
|
25
21
|
|
|
26
|
-
|
|
27
|
-
soke course +list-courses
|
|
28
|
-
```
|
|
22
|
+
## 作业维度(clock,只读)
|
|
29
23
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
| `--category-path` | 否 | 课程分类 ID,用于按照分类筛选课程 |
|
|
34
|
-
| `--status` | 否 | 按状态过滤(0/1/2) |
|
|
35
|
-
| `--is-in` | 否 | 课程来源:0=外部课列表,1=内部课列表(默认 1) |
|
|
36
|
-
| `--is-my` | 否 | 是否只看我创建的(默认 0) |
|
|
37
|
-
| `--is-joint` | 否 | 协同给我的(默认 0) |
|
|
38
|
-
| `--joint-out` | 否 | 我协同出去的(默认 0) |
|
|
39
|
-
| `--page` | 否 | 页码(默认 1) |
|
|
40
|
-
| `--page-size` | 否 | 每页条数(默认 10) |
|
|
41
|
-
|
|
42
|
-
返回课程列表,包含课程 ID、标题、状态、创建时间、学习人数等摘要。
|
|
43
|
-
|
|
44
|
-
### 2. 课程详情 `+get-course`
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
soke course +get-course --course-id <courseId>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
| 参数 | 必填 | 说明 |
|
|
51
|
-
|------|------|------|
|
|
52
|
-
| `--course-id` | 是 | 课程 ID |
|
|
53
|
-
|
|
54
|
-
返回课程完整信息:标题、描述、分类、状态、讲师、课件数、学习人数、完成率等。
|
|
55
|
-
|
|
56
|
-
### 3. 课程学员列表 `+list-course-users`
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
soke course +list-course-users --course-id <courseId>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
| 参数 | 必填 | 说明 |
|
|
63
|
-
|------|------|------|
|
|
64
|
-
| `--course-id` | 是 | 课程 ID |
|
|
65
|
-
| `--status` | 否 | 学习状态过滤(进行中/已完成/未开始) |
|
|
66
|
-
| `--keyword` | 否 | 按学员姓名搜索 |
|
|
67
|
-
| `--page` | 否 | 页码 |
|
|
68
|
-
| `--page-size` | 否 | 每页条数 |
|
|
69
|
-
|
|
70
|
-
返回该课程所有学员列表,包含用户 ID、姓名、部门、学习进度、学习时长、完成状态。
|
|
71
|
-
|
|
72
|
-
### 4. 学员详情 `+get-course-user`
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
soke course +get-course-user \
|
|
76
|
-
--course-id <courseId> \
|
|
77
|
-
--user-id <userId>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
| 参数 | 必填 | 说明 |
|
|
81
|
-
|------|------|------|
|
|
82
|
-
| `--course-id` | 是 | 课程 ID |
|
|
83
|
-
| `--user-id` | 是 | 学员 ID |
|
|
84
|
-
|
|
85
|
-
返回单个学员在该课程下的详细学习记录:每节课时进度、总时长、完成状态、成绩等。
|
|
86
|
-
|
|
87
|
-
### 5. 课件学习记录 `+list-lesson-learns`
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
soke course +list-lesson-learns \
|
|
91
|
-
--lesson-id <lessonId> \
|
|
92
|
-
--start-time <ms> \
|
|
93
|
-
--end-time <ms>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
| 参数 | 必填 | 说明 |
|
|
97
|
-
|------|------|------|
|
|
98
|
-
| `--lesson-id` | 是 | 课件 ID |
|
|
99
|
-
| `--start-time` | 是 | 起始时间(ms),跨度 ≤ 365 天 |
|
|
100
|
-
| `--end-time` | 是 | 结束时间(ms) |
|
|
101
|
-
| `--user-id` | 否 | 按学员过滤 |
|
|
102
|
-
|
|
103
|
-
返回指定课件在时间范围内的学员学习记录:用户、学习时长、完成百分比、首次学习时间、最后学习时间。
|
|
104
|
-
|
|
105
|
-
### 6. 人脸验证记录 `+list-lesson-faces`
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
soke course +list-lesson-faces \
|
|
109
|
-
--lesson-id <lessonId> \
|
|
110
|
-
--start-time <ms> \
|
|
111
|
-
--end-time <ms>
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
| 参数 | 必填 | 说明 |
|
|
115
|
-
|------|------|------|
|
|
116
|
-
| `--lesson-id` | 是 | 课件 ID |
|
|
117
|
-
| `--start-time` | 是 | 起始时间(ms),跨度 ≤ 365 天 |
|
|
118
|
-
| `--end-time` | 是 | 结束时间(ms) |
|
|
119
|
-
| `--user-id` | 否 | 按学员过滤 |
|
|
120
|
-
| `--face-status` | 否 | 验证状态:`1`=成功,`2`=失败 |
|
|
121
|
-
|
|
122
|
-
返回人脸验证记录,包含:
|
|
123
|
-
- 用户信息
|
|
124
|
-
- 验证时间
|
|
125
|
-
- `face_status`:`1` = 验证成功,`2` = 验证失败
|
|
126
|
-
- 失败原因(如有人脸不匹配、超时等)
|
|
24
|
+
1. `clock list-learnings --target-id <课程ID> --start-time <ms> --end-time <ms> --page 1 --page-size 10`(**page/page-size 强制必传**)→ 作业列表(clock-id)
|
|
25
|
+
2. `clock list-logs --clock-id <id> --start-time --end-time --page --page-size` → 学员提交列表
|
|
26
|
+
3. `clock list-log-lessons --target-id <提交ID> --page --page-size` → 提交材料明细
|
|
127
27
|
|
|
128
28
|
## 输出标准
|
|
129
29
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**课程列表**:
|
|
133
|
-
```
|
|
134
|
-
📋 课程列表 (共 N 门)
|
|
135
|
-
|
|
136
|
-
| 标题 | 状态 | 学员数 | 完成率 | 创建时间 |
|
|
137
|
-
|------|------|--------|--------|----------|
|
|
138
|
-
| ... | ... | ... | ... | ... |
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
**学员学习记录**:
|
|
142
|
-
```
|
|
143
|
-
📊 {courseTitle} — 学员学习记录 (共 N 人)
|
|
144
|
-
|
|
145
|
-
| 姓名 | 部门 | 进度 | 学习时长 | 状态 |
|
|
146
|
-
|------|------|------|----------|------|
|
|
147
|
-
| ... | ... | ... | ... | ... |
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## 注意事项
|
|
151
|
-
|
|
152
|
-
1. **时间跨度**:所有时间范围查询(start-time / end-time)跨度不超过 365 天,超过需分段查询
|
|
153
|
-
2. **时间戳单位**:统一使用毫秒 (ms),`Date.now()` 风格的时间戳,如 `1700000000000`
|
|
154
|
-
3. **分页查询**:大数据量查询务必使用分页参数,避免超时
|
|
155
|
-
4. **face_status 枚举**:仅 `1`(成功)和 `2`(失败),无其他状态值
|
|
156
|
-
5. **课程状态枚举**:`0`(未发布)/ `1`(已发布)/ `2`(已关闭),查询时按需过滤
|
|
157
|
-
6. 人脸验证记录仅在人脸识别功能已开启的课程中产生数据
|
|
30
|
+
表格化:课程列表(标题/状态/学员数/课件数);学员记录(姓名/部门/进度/时长/状态)。
|
|
31
|
+
完成率 = finish_status=1 人数 / 总人数;平均进度 = study_progress 均值。
|
|
158
32
|
|
|
159
|
-
##
|
|
33
|
+
## 注意
|
|
160
34
|
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
- [ ] 分页参数对大结果集已设置
|
|
164
|
-
- [ ] face_status 查询值为 1 或 2
|
|
165
|
-
- [ ] course status 查询值为 0/1/2
|
|
35
|
+
- 时间戳统一毫秒;分页必设(大结果集);
|
|
36
|
+
- 批量统计报表导出 → 话术「可另装 soke-task 技能」。
|
|
@@ -16,7 +16,7 @@ tags: [soke, course, settings, configuration, advanced]
|
|
|
16
16
|
### 基础信息更新 `course +update`
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
soke course +update \
|
|
19
|
+
soke-cli course +update \
|
|
20
20
|
--course-id <courseId> \
|
|
21
21
|
--title "<新标题>" \
|
|
22
22
|
--credit 10 \
|
|
@@ -27,7 +27,6 @@ soke course +update \
|
|
|
27
27
|
| 参数 | 必填 | 说明 |
|
|
28
28
|
|------|------|------|
|
|
29
29
|
| `--course-id` | 是 | 课程 ID |
|
|
30
|
-
| `--action` | 否 | 操作类型,默认 `update`;传 `close` 可关闭课程 |
|
|
31
30
|
| `--title` | 否 | 课程标题 |
|
|
32
31
|
| `--credit` | 否 | 学分 |
|
|
33
32
|
| `--description` | 否 | 课程描述/简介 |
|
|
@@ -42,7 +41,7 @@ soke course +update \
|
|
|
42
41
|
### 高级设置更新 `course +advanced`
|
|
43
42
|
|
|
44
43
|
```bash
|
|
45
|
-
soke course +advanced \
|
|
44
|
+
soke-cli course +advanced \
|
|
46
45
|
--course-id <courseId> \
|
|
47
46
|
--study-type 2 \
|
|
48
47
|
--is-accelerate 1 \
|
|
@@ -123,7 +122,7 @@ soke-cli course +advanced \
|
|
|
123
122
|
|
|
124
123
|
## 注意事项
|
|
125
124
|
|
|
126
|
-
1. `course +update`
|
|
125
|
+
1. `course +update` 支持标题、学分、描述、封面图和分类 ID 修改
|
|
127
126
|
2. 封面图地址来自图片库列表接口返回的 `photoUri`
|
|
128
127
|
3. 分类修改可通过 `--category-id` 更新
|
|
129
128
|
4. 高级设置项之间可能存在依赖关系(如开启视频学习中人脸识别后再设置识别次数),建议按表格顺序逐项配置
|