@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.
Files changed (156) hide show
  1. package/package.json +1 -1
  2. package/scripts/install.js +8 -0
  3. package/scripts/run.js +3 -2
  4. package/skills/mono/.workbuddy/memory/2026-09-01.md +2 -0
  5. package/skills/mono/.workbuddy/memory/MEMORY.md +4 -0
  6. package/skills/mono/ARCHITECTURE_AND_EXTENSION_GUIDE.md +572 -0
  7. package/skills/mono/README.md +2 -0
  8. package/skills/mono/SKILL.md +125 -119
  9. package/skills/mono/SKILL_MD_/344/274/230/345/214/226/346/226/271/346/241/210.md +478 -0
  10. package/skills/mono/references/modules/README.md +74 -0
  11. package/skills/mono/references/modules/soke-ai-coach-director/CHANGELOG.md +1 -1
  12. package/skills/mono/references/modules/soke-ai-coach-director/MODULE.md +12 -0
  13. package/skills/mono/references/modules/soke-ai-coach-director/README.md +4 -1
  14. package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-engineer/parts/part1-basic.md +1 -1
  15. package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-optimizer/prompt-optimizer.md +3 -3
  16. package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/README.md +4 -2
  17. package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/qclaw.md +3 -1
  18. package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/{wukong.md → qwen.md} +18 -18
  19. package/skills/mono/references/modules/soke-ai-coach-director/platform/adapters/workbuddy.md +1 -1
  20. package/skills/mono/references/modules/soke-ai-coach-director/platform/api-fallback.md +1 -1
  21. package/skills/mono/references/modules/soke-ai-coach-director/platform/interaction.md +1 -1
  22. package/skills/mono/references/modules/soke-ai-coach-director/platform/platform-support-matrix.md +28 -0
  23. package/skills/mono/references/modules/soke-ai-coach-director/platform/publish-gate.md +1 -0
  24. package/skills/mono/references/modules/soke-ai-coach-director/platform/soke-ai-training/soke-ai-training.md +5 -3
  25. package/skills/mono/references/modules/soke-ai-coach-director/platform/sync-engine.md +2 -2
  26. package/skills/mono/references/modules/soke-ai-coach-director/references/env-check.md +3 -0
  27. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-handbook.md +7 -7
  28. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part1.md +5 -5
  29. package/skills/mono/references/modules/soke-ai-coach-director/references/platform-api-pitfalls.md +1 -1
  30. package/skills/mono/references/modules/soke-ai-coach-director/references/self-learning-engine.md +4 -0
  31. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part1/SOP.md +2 -2
  32. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/publish/SOP.md +3 -3
  33. package/skills/mono/references/modules/soke-ai-coach-director/scripts/activator.sh +4 -0
  34. package/skills/mono/references/modules/soke-ai-coach-director/scripts/error-detector.sh +4 -0
  35. package/skills/mono/references/modules/soke-ai-coach-director/scripts/extract-skill.sh +7 -0
  36. package/skills/mono/references/modules/soke-ai-coach-director/scripts/gate_check.py +2 -0
  37. package/skills/mono/references/modules/soke-ai-coach-director/scripts/validate_operations.py +9 -2
  38. package/skills/mono/references/modules/soke-ai-training/MODULE.md +57 -7
  39. package/skills/mono/references/modules/soke-assign/MODULE.md +50 -11
  40. package/skills/mono/references/modules/soke-certificate/MODULE.md +47 -1
  41. package/skills/mono/references/modules/soke-course/CHANGELOG.md +93 -0
  42. package/skills/mono/references/modules/soke-course/MODULE.md +110 -352
  43. package/skills/mono/references/modules/soke-course/README.md +45 -291
  44. package/skills/mono/references/modules/soke-course/cli-facts.md +107 -0
  45. package/skills/mono/references/modules/soke-course/intent-cases.md +41 -0
  46. package/skills/mono/references/modules/soke-course/scripts/check_readiness.sh +45 -0
  47. package/skills/mono/references/modules/soke-course/sop-publish-check.md +46 -0
  48. package/skills/mono/references/modules/soke-course/subs/assign/SOP.md +40 -0
  49. package/skills/mono/references/modules/soke-course/subs/batch/SOP.md +96 -0
  50. package/skills/mono/references/modules/soke-course/{references/subs → subs}/category/SOP.md +18 -27
  51. package/skills/mono/references/modules/soke-course/subs/charge/SOP.md +22 -0
  52. package/skills/mono/references/modules/soke-course/subs/copy/SOP.md +35 -0
  53. package/skills/mono/references/modules/soke-course/subs/exam/SOP.md +39 -0
  54. package/skills/mono/references/modules/soke-course/subs/phase1-create/SOP.md +66 -0
  55. package/skills/mono/references/modules/soke-course/subs/phase2-lesson/SOP.md +34 -0
  56. package/skills/mono/references/modules/soke-course/subs/photo/SOP.md +26 -0
  57. package/skills/mono/references/modules/soke-course/subs/publish/SOP.md +26 -0
  58. package/skills/mono/references/modules/soke-course/subs/query/SOP.md +36 -0
  59. package/skills/mono/references/modules/soke-course/{references/subs → subs}/settings/SOP.md +3 -4
  60. package/skills/mono/references/modules/soke-course/subs/template/SOP.md +58 -0
  61. package/skills/mono/references/modules/soke-exam/MODULE.md +49 -1
  62. package/skills/mono/references/modules/soke-exam-question-pool/MODULE.md +45 -5
  63. package/skills/mono/references/modules/soke-learning-map/MODULE.md +51 -11
  64. package/skills/mono/references/modules/soke-learning-profile/MODULE.md +46 -3
  65. package/skills/mono/references/modules/soke-lesson/MODULE.md +34 -20
  66. package/skills/mono/references/modules/soke-material/MODULE.md +33 -19
  67. package/skills/mono/references/modules/soke-photo-gallery/MODULE.md +40 -20
  68. package/skills/mono/references/modules/soke-shared/MODULE.md +9 -0
  69. package/skills/mono/references/modules/soke-supervisor/MODULE.md +32 -1
  70. package/skills/mono/references/modules/soke-task/MODULE.md +48 -1
  71. package/skills/mono/references/modules/soke-training-demand/MODULE.md +38 -17
  72. package/skills/mono/references/shared/README.md +50 -0
  73. package/skills/mono/references/shared/async-task.md +30 -0
  74. package/skills/mono/references/shared/auth-check.md +57 -0
  75. package/skills/mono/references/shared/command-discovery.md +34 -0
  76. package/skills/mono/references/shared/environment-check.md +31 -0
  77. package/skills/mono/references/shared/error-handling.md +27 -0
  78. package/skills/mono/references/shared/file-input.md +31 -0
  79. package/skills/mono/references/shared/interaction.md +39 -0
  80. package/skills/mono/references/shared/object-context.md +51 -0
  81. package/skills/mono/references/shared/output-policy.md +39 -0
  82. package/skills/mono/references/shared/pagination.md +41 -0
  83. package/skills/mono/references/shared/rule-ownership.md +57 -0
  84. package/skills/mono/references/shared/state-machine.md +35 -0
  85. package/skills/mono/references/shared/write-guard.md +34 -0
  86. package/skills/mono/references/shared/write-verify.md +33 -0
  87. package/skills/mono/references/workflows/README.md +115 -0
  88. package/skills/mono/scripts/check_package.py +310 -0
  89. package/skills/mono/scripts/check_readiness.py +1 -1
  90. package/skills/mono/scripts/check_syntax.py +35 -0
  91. package/skills/mono/scripts/validate_operations.py +2 -2
  92. 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
  93. package/skills/multi/soke-ai-coach-director/README.md +3 -0
  94. package/skills/multi/soke-ai-coach-director/assets/LEARNINGS-TEMPLATE.md +1 -0
  95. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part1-basic.md +1 -1
  96. package/skills/multi/soke-ai-coach-director/platform/publish-gate.md +1 -0
  97. package/skills/multi/soke-ai-coach-director/references/exec-handbook.md +5 -5
  98. package/skills/multi/soke-ai-coach-director/references/exec-part1.md +5 -5
  99. package/skills/multi/soke-ai-coach-director/references/platform-api-pitfalls.md +1 -1
  100. package/skills/multi/soke-ai-coach-director/references/self-improvement-examples.md +3 -0
  101. package/skills/multi/soke-ai-coach-director/references/self-learning-engine.md +4 -0
  102. package/skills/multi/soke-ai-coach-director/references/subs/part1/SOP.md +2 -2
  103. package/skills/multi/soke-ai-coach-director/scripts/activator.sh +4 -0
  104. package/skills/multi/soke-ai-coach-director/scripts/error-detector.sh +4 -0
  105. package/skills/multi/soke-ai-coach-director/scripts/extract-skill.sh +7 -0
  106. package/skills/multi/soke-ai-coach-director/scripts/gate_check.py +2 -0
  107. package/skills/multi/soke-ai-coach-director/scripts/validate_operations.py +9 -2
  108. package/skills/multi/soke-ai-training/SKILL.md +2 -0
  109. package/skills/multi/soke-course/.skill-metadata.yaml +40 -0
  110. package/skills/multi/soke-course/CHANGELOG.md +77 -0
  111. package/skills/multi/soke-course/README.md +27 -274
  112. package/skills/multi/soke-course/SKILL.md +135 -353
  113. package/skills/multi/soke-course/_user_meta.json +5 -0
  114. package/skills/multi/soke-course/agents/openai.yaml +1 -5
  115. package/skills/multi/soke-course/references/cli-facts.md +105 -0
  116. package/skills/multi/soke-course/references/examples.md +30 -454
  117. package/skills/multi/soke-course/references/intent-cases.md +65 -99
  118. package/skills/multi/soke-course/references/sop-full-workflow.md +81 -177
  119. package/skills/multi/soke-course/references/sop-lesson-types.md +21 -58
  120. package/skills/multi/soke-course/references/sop-publish-check.md +14 -71
  121. package/skills/multi/soke-course/references/subs/assign/SOP.md +37 -0
  122. package/skills/multi/soke-course/references/subs/category/SOP.md +18 -27
  123. package/skills/multi/soke-course/references/subs/exam/SOP.md +28 -0
  124. package/skills/multi/soke-course/references/subs/lesson/SOP.md +28 -0
  125. package/skills/multi/soke-course/references/subs/material/SOP.md +24 -0
  126. package/skills/multi/soke-course/references/subs/photo/SOP.md +23 -0
  127. package/skills/multi/soke-course/references/subs/publish/SOP.md +15 -157
  128. package/skills/multi/soke-course/references/subs/query/SOP.md +22 -151
  129. package/skills/multi/soke-course/references/subs/settings/SOP.md +3 -4
  130. package/skills/multi/soke-course/references/subs/template/SOP.md +37 -210
  131. package/skills/multi/soke-course/references/troubleshoot.md +37 -54
  132. package/skills/multi/soke-course/scripts/check_readiness.sh +45 -0
  133. package/skills/multi/soke-course/{references/installation.md → soke-cli-install-guide.md} +3 -0
  134. package/skills/mono/references/modules/soke-course/agents/openai.yaml +0 -7
  135. package/skills/mono/references/modules/soke-course/references/course-list-courses.md +0 -216
  136. package/skills/mono/references/modules/soke-course/references/examples.md +0 -480
  137. package/skills/mono/references/modules/soke-course/references/intent-cases.md +0 -99
  138. package/skills/mono/references/modules/soke-course/references/sop-full-workflow.md +0 -177
  139. package/skills/mono/references/modules/soke-course/references/sop-lesson-types.md +0 -66
  140. package/skills/mono/references/modules/soke-course/references/sop-publish-check.md +0 -76
  141. package/skills/mono/references/modules/soke-course/references/subs/ai/SOP.md +0 -153
  142. package/skills/mono/references/modules/soke-course/references/subs/charge/SOP.md +0 -107
  143. package/skills/mono/references/modules/soke-course/references/subs/copy/SOP.md +0 -80
  144. package/skills/mono/references/modules/soke-course/references/subs/publish/SOP.md +0 -168
  145. package/skills/mono/references/modules/soke-course/references/subs/query/SOP.md +0 -165
  146. package/skills/mono/references/modules/soke-course/references/subs/template/SOP.md +0 -223
  147. package/skills/mono/references/modules/soke-course/references/troubleshoot.md +0 -68
  148. package/skills/multi/soke-course/examples/create-basic.md +0 -70
  149. package/skills/multi/soke-course/references/course-list-courses.md +0 -216
  150. package/skills/multi/soke-course/references/dependencies/soke-assign.md +0 -103
  151. package/skills/multi/soke-course/references/dependencies/soke-lesson.md +0 -119
  152. package/skills/multi/soke-course/references/dependencies/soke-material.md +0 -105
  153. package/skills/multi/soke-course/references/shared.md +0 -185
  154. package/skills/multi/soke-course/references/subs/ai/SOP.md +0 -153
  155. package/skills/multi/soke-course/scripts/check_readiness.py +0 -87
  156. /package/skills/mono/references/{installation.md → shared/installation.md} +0 -0
@@ -1,291 +1,45 @@
1
- # 授客课程管理 Skill
2
-
3
- 完整的课程生命周期管理,集成素材库和课件管理子 skills,提供模块化的课程内容管理。
4
-
5
- ## 普通用户文档
6
-
7
-
8
- ## 功能概述
9
-
10
- 这个 skill 提供了完整的课程管理功能,包括:
11
-
12
- - 📚 **课程管理**: 创建、更新、发布、查询课程
13
- - 🏷️ **分类管理**: 查询和管理课程分类
14
- - 📦 **素材管理**: 集成 soke-material skill,管理素材库
15
- - 📝 **课件管理**: 集成 soke-lesson skill,管理课程课件
16
- - 👥 **学习记录**: 查询用户的课程学习记录
17
- - 📊 **学习统计**: 查询课件学习记录和人脸识别记录
18
-
19
- ## 集成的子 Skills
20
-
21
- ### 📦 soke-material - 素材库管理
22
- 负责文件上传和素材管理
23
- - [详细文档](../soke-material/MODULE.md)
24
-
25
- ### 📚 soke-lesson - 课件管理
26
- 负责课件的创建和管理
27
- - [详细文档](../soke-lesson/MODULE.md)
28
-
29
- ## 快速开始
30
-
31
- ### 创建课程
32
-
33
- ```bash
34
- # 1. 查询课程分类,获取 category-id
35
- soke-cli course +list-categories
36
-
37
- # 2. 创建课程(使用上一步获取的 category-id)
38
- soke-cli course +create --title "Go语言入门" --category-id "CATEGORY-UUID"
39
-
40
- # 3. 上传素材
41
- soke-cli file +upload --file ./lesson1.mp4
42
-
43
- # 4. 创建课件
44
- soke-cli course +lesson-create \
45
- --course-id "COURSE-UUID" \
46
- --title "第一课" \
47
- --media-id "MATERIAL-UUID" \
48
- --type "video" \
49
- --length 600 \
50
- --object "path/to/file.mp4" \
51
- --filename "lesson1.mp4" \
52
- --ext "mp4" \
53
- --filesize 10485760
54
-
55
- # 5. 发布课程
56
- soke-cli course +publish --course-id "COURSE-UUID"
57
- ```
58
-
59
- ### 查询课程
60
-
61
- ```bash
62
- # 查询课程列表
63
- soke-cli course +list-courses
64
-
65
- # 查询课程详情
66
- soke-cli course +get-course --course-id "COURSE-UUID"
67
-
68
- # 查询课程分类
69
- soke-cli course +list-categories
70
-
71
- # 查询课程学习记录
72
- soke-cli course +list-course-users --course-id "COURSE-UUID"
73
- ```
74
-
75
- ## 主要命令
76
-
77
- ### 课程管理
78
- | 命令 | 说明 |
79
- |------|------|
80
- | `+list-categories` | 查询课程分类(获取 category-id) |
81
- | `+create` | 创建课程基本信息 |
82
- | `+update` | 更新课程信息 |
83
- | `+delete` | 删除未发布或已关闭课程 |
84
- | `+advanced` | 更新课程高级设置 |
85
- | `+publish` | 发布课程 |
86
- | `+get-course` | 查询课程详情 |
87
- | `+list-courses` | 查询课程列表 |
88
-
89
- ### 课件管理(soke-lesson)
90
- | 命令 | 说明 |
91
- |------|------|
92
- | `+lesson-create` | 创建课件 |
93
- | `+lesson-get` | 查询课件详情 |
94
- | `+lesson-list` | 查询课件列表 |
95
-
96
- ### 素材管理(soke-material)
97
- | 命令 | 说明 |
98
- |------|------|
99
- | `file +upload` | 上传文件到素材库 |
100
- | `file +list-files` | 查询素材列表 |
101
- | `file +get-info` | 查询素材详情 |
102
-
103
- ### 学习记录
104
- | 命令 | 说明 |
105
- |------|------|
106
- | `+list-course-users` | 查询课程学习记录 |
107
- | `+get-course-user` | 查询用户学习详情 |
108
- | `+list-lesson-learns` | 查询课件学习记录 |
109
- | `+list-lesson-faces` | 查询人脸识别记录 |
110
-
111
- ## 使用场景
112
-
113
- ### 场景1: 创建课程
114
-
115
- 适用于需要精细控制每个步骤的场景:
116
-
117
- ```bash
118
- # 1. 查询课程分类,获取 category-id
119
- soke-cli course +list-categories
120
-
121
- # 2. 创建课程(使用上一步获取的 category-id)
122
- course_id=$(soke-cli course +create \
123
- --title "Python数据分析实战" \
124
- --category-id "CATEGORY-UUID" \
125
- --format json | jq -r '.data.uuid')
126
-
127
- # 3. 批量上传素材
128
- for file in ./lessons/*.mp4; do
129
- media_id=$(soke-cli file +upload --file "$file" --format json | jq -r '.data.uuid')
130
-
131
- # 4. 创建课件
132
- soke-cli course +lesson-create \
133
- --course-id "$course_id" \
134
- --title "$(basename "$file" .mp4)" \
135
- --media-id "$media_id" \
136
- --type "video" \
137
- --length 600 \
138
- --object "path/to/$(basename "$file")" \
139
- --filename "$(basename "$file")" \
140
- --ext "mp4" \
141
- --filesize $(stat -f%z "$file")
142
- done
143
-
144
- # 5. 发布课程
145
- soke-cli course +publish --course-id "$course_id"
146
-
147
- # 或定时发布课程,输入北京时间
148
- soke-cli course +publish \
149
- --course-id "$course_id" \
150
- --publish-time "2026-07-14 17:24:42"
151
- ```
152
-
153
- ### 场景2: 管理现有课程
154
-
155
- ```bash
156
- # 查询课程列表
157
- soke-cli course +list-courses --status 1
158
-
159
- # 获取课程详情
160
- soke-cli course +get-course --course-id "COURSE-UUID"
161
-
162
- # 查询课程的课件
163
- soke-cli course +lesson-list --course-id "COURSE-UUID"
164
-
165
- # 更新课程信息
166
- soke-cli course +update \
167
- --course-id "COURSE-UUID" \
168
- --title "新标题" \
169
- --description "新描述"
170
-
171
- # 删除未发布或已关闭课程
172
- soke-cli course +delete --course-id "COURSE-UUID"
173
-
174
- # 添加新课件
175
- media_id=$(soke-cli file +upload --file ./new-lesson.mp4 --format json | jq -r '.data.uuid')
176
- soke-cli course +lesson-create \
177
- --course-id "COURSE-UUID" \
178
- --title "新增课件" \
179
- --media-id "$media_id" \
180
- --type "video" \
181
- --length 600 \
182
- --object "path/to/new-lesson.mp4" \
183
- --filename "new-lesson.mp4" \
184
- --ext "mp4" \
185
- --filesize 10485760
186
- ```
187
-
188
- ### 场景3: 统计课程完成情况
189
-
190
- ```bash
191
- # 1. 获取课程列表
192
- soke-cli course +list-courses
193
-
194
- # 2. 查询某个课程的学习记录
195
- soke-cli course +list-course-users --course-id "COURSE-UUID"
196
-
197
- # 3. 查询课件学习记录
198
- soke-cli course +list-lesson-learns --lesson-id "LESSON-UUID"
199
- ```
200
-
201
- ## 参数说明
202
-
203
- ### 时间参数
204
-
205
- 所有时间参数使用 Unix 时间戳(毫秒)格式:
206
-
207
- ```javascript
208
- // JavaScript 示例
209
- const startTime = new Date('2024-01-01').getTime(); // 1704038400000
210
- const endTime = new Date('2024-12-31').getTime(); // 1735660799000
211
- ```
212
-
213
- ### 状态参数
214
-
215
- **课程状态 (status)**:
216
- - `0`: 未发布
217
- - `1`: 已发布
218
- - `2`: 已关闭
219
-
220
- **课程来源 (is-in)**:
221
- - `0`: 外部课列表
222
- - `1`: 内部课列表
223
-
224
- **学习模式 (study_type)**:
225
- - `1`: 自由式(可任意顺序学习)
226
- - `2`: 解锁式(必须按顺序学习)
227
-
228
- ## 注意事项
229
-
230
- 1. **课程发布要求**: 课程至少需要一个课件才能发布
231
- 2. **分类必填**: 创建课程时必须指定分类ID
232
- 3. **素材先行**: 创建课件前必须先上传素材到素材库
233
- 4. **类型匹配**: 课件类型必须与素材类型匹配
234
- 5. **权限要求**: 需要相应的读写权限(`course:*:write` 或 `course:*:readonly`)
235
- 6. **认证要求**: 所有命令都需要先完成 `soke-cli auth login`
236
-
237
- ## 错误处理
238
-
239
- ### 权限不足
240
-
241
- ```bash
242
- # 错误信息: Permission denied
243
- # 解决方案: 检查是否已登录,并确认账号有相应权限
244
- soke-cli auth login
245
- ```
246
-
247
- ### 时间范围超限
248
-
249
- ```bash
250
- # 错误信息: Time range exceeds 365 days
251
- # 解决方案: 缩小时间范围或分批查询
252
- ```
253
-
254
- ### 数据不存在
255
-
256
- ```bash
257
- # 错误信息: Course not found
258
- # 解决方案: 检查课程ID是否正确
259
- ```
260
-
261
- ## 相关文档
262
-
263
- - [SKILL.md](./MODULE.md) - 完整的 Skill 文档和 API 参考
264
- - [素材库管理 Skill](../soke-material/MODULE.md) - 文件上传和素材管理
265
- - [课件管理 Skill](../soke-lesson/MODULE.md) - 课件创建和管理
266
- - [共享配置 Skill](../soke-shared/MODULE.md) - 认证和配置管理
267
-
268
- ## Skill 架构
269
-
270
- ```
271
- soke-course (主 skill)
272
- ├── 课程管理 (本 skill)
273
- │ ├── +create (创建课程)
274
- │ ├── +update (更新课程)
275
- │ ├── +publish (发布课程)
276
- │ └── 查询命令...
277
- ├── soke-lesson (子 skill - 课件管理)
278
- │ ├── +lesson-create
279
- │ ├── +lesson-get
280
- │ └── +lesson-list
281
- └── soke-material (子 skill - 素材管理)
282
- ├── file +upload
283
- ├── file +create
284
- └── 查询命令...
285
- ```
286
-
287
- ## 版本历史
288
-
289
- - v3.0.0 (2024-05-26): 重构为模块化架构,集成 soke-material 和 soke-lesson 子 skills
290
- - v2.0.0 (2024-05-25): 添加课程创建和更新功能
291
- - v1.0.0 (2024-05-14): 初始版本,支持课程查询、分类、学习记录等功能
1
+ # soke-course 课程主流程编排模块
2
+
3
+ 授客AI课程主流程编排模块。负责课程创建、分类、模板、设置、发布、查询与维护,并编排同级模块完成素材、课件与指派。
4
+
5
+ ## 职责
6
+
7
+ - 课程创建与分类(创建前必须真实查询分类)
8
+ - 课程模板与高级设置(创建后立即展示模板表)
9
+ - 课程发布、定时发布与发布前校验
10
+ - 学习进度与课程状态查询
11
+ - 课程关闭及其他维护路由
12
+ - 跨模块编排并传递真实 ID
13
+
14
+ ## 不负责
15
+
16
+ - 素材上传(调用 `soke-material`)
17
+ - 课件创建(调用 `soke-lesson`)
18
+ - 指派实现(调用 `soke-assign`)
19
+ - 删除/复制课程、新建分类、收费、证书、AI 做课等(需后台)
20
+
21
+ ## 入口
22
+
23
+ - [MODULE.md](./MODULE.md) — 模块合同与主流程(交互规范 / 意图路由 / 5 Phase / 批量)
24
+ - `subs/category/SOP.md` — 课程分类
25
+ - `subs/template/SOP.md` 课程模板
26
+ - `subs/settings/SOP.md` — 课程设置
27
+ - `subs/publish/SOP.md` — 发布校验
28
+ - `subs/query/SOP.md` — 数据查询
29
+ - `subs/batch/SOP.md` — 多课程批量上传(B0-B7)
30
+ - `subs/assign/SOP.md` — 指派交互编排
31
+ - `subs/exam/SOP.md` — 小测验交互编排
32
+ - `subs/photo/SOP.md` — 图片链
33
+ - `subs/charge/SOP.md` — 收费后台话术
34
+ - `subs/copy/SOP.md` 维护路由(关闭/删除/复制)
35
+ - `intent-cases.md` — 意图案例库
36
+ - `sop-publish-check.md` — 发布 Gate Check
37
+ - `cli-facts.md` 命令参数事实源
38
+
39
+ ## 并列模块
40
+
41
+ - [soke-material](../soke-material/MODULE.md)
42
+ - [soke-lesson](../soke-lesson/MODULE.md)
43
+ - [soke-assign](../soke-assign/MODULE.md)
44
+ - [soke-exam](../soke-exam/MODULE.md)
45
+ - [soke-photo-gallery](../soke-photo-gallery/MODULE.md)
@@ -0,0 +1,107 @@
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
+ +list-papers: `--page` `--page-size`(默认10) → 试卷列表(H1 选择试卷用,取 title/paper-id)
85
+ +get-paper: `--paper-id`(含完整字段与发布状态)
86
+
87
+ ## clock 组(作业查询,只读;**--page/--page-size 强制必传**)
88
+
89
+ list-learnings: `--target-id`(课程ID) `--start-time`/`--end-time`(毫秒) `--page` `--page-size`
90
+ list-logs: `--clock-id`(来自 list-learnings) `--start-time`/`--end-time` `--page` `--page-size`
91
+ list-log-lessons: `--target-id`(提交ID,来自 list-logs) `--page` `--page-size`
92
+
93
+ ## 漂移修正表(旧文档 → 实际)
94
+
95
+ | 旧 | 实际 |
96
+ |----|------|
97
+ | file +upload --path | --file |
98
+ | file +list-files / +get-info | 无 + 前缀 |
99
+ | lesson-create --uuid / --duration | --media-id / --length |
100
+ | lesson-get --lesson-id | --id |
101
+ | lesson-sort --order | --sort-list |
102
+ | lesson-list --page-size | --limit |
103
+ | list-courses --start-time/--end-time/--category-id | 不存在;用 --keyword/--category-path |
104
+ | list-lesson-faces --lesson-id + 时间范围 | --target-id,无时间参数 |
105
+ | assign --module-id / --compulsory 1\|0 | --target-id / --learn-type required\|optional |
106
+ | 关闭课程仅后台 | +update --action close |
107
+ | 文档默认时长 0s | 120s |
@@ -0,0 +1,41 @@
1
+ # 意图案例库(Gate 0 路由参考)
2
+
3
+ > 本文件承载「显式调用本技能但意图不明」时的路由判定案例,供 Gate 0 兜底决策。命令参数以 `cli-facts.md` 为准。
4
+
5
+ ## 路由总表
6
+
7
+ | 用户说法(示例) | 判定意图 | 路由 |
8
+ | --- | --- | --- |
9
+ | 创建/新建/做课/开课/上传课程 | create | Phase 1 全流程 |
10
+ | 加课件/传视频/调顺序 | add_lesson | Phase 2(需 course-id) |
11
+ | 改学分/换封面/开倍速/人脸/提醒 | settings | Phase 3 |
12
+ | 指派/必修/选修 | assign | Phase 4(发布前) |
13
+ | 发布/上线/定时发布 | publish | Phase 4(最后一步,仅明确 E1 执行) |
14
+ | 进度/完成率/谁学了/作业提交 | query | Phase 5 |
15
+ | 关闭/删除/复制 | maintain | Phase 5 维护 |
16
+ | 有哪些分类/查分类 | category | read subs/category |
17
+
18
+ ## 上下文规则
19
+
20
+ - **有 course-id** → 当前课程操作,不新建。
21
+ - **学习统计未指定课程** → 先列已发布线上课前 20 个 + 表格下方提示,选定后再查统计。
22
+ - **有文件附件** → 倾向课件(add_lesson / Phase 2)。
23
+ - **歧义** → 弹窗列可能操作。
24
+ - **显式调用本技能且意图不明或与课程无关** → 默认走创建/上传主流程(提示输入标题 → 收集 A/B/C),不展开无关话题。
25
+ - **含明确他意图**(查询/发布/指派/设置/维护)→ 对应 Phase。
26
+
27
+ ## 兜底示例
28
+
29
+ | 用户说法 | 判定 | 说明 |
30
+ | --- | --- | --- |
31
+ | 「帮我做个课」 | create | 进入 Phase 1,提示输入标题 |
32
+ | 「把 xxx.mp4 传上去」 | add_lesson | 有文件附件 → 倾向课件,需 course-id |
33
+ | 「课程 123 学分改成 5」 | settings | 有 course-id + 设置意图 |
34
+ | 「这课谁学了」 | query | 未指定课程 → 先列前 20 已发布课 |
35
+ | 「随便,你看着办」 | create | 意图不明 → 默认创建主流程 |
36
+ | 「帮我把课程关了」 | maintain | 关闭场景 |
37
+
38
+ ## 边界
39
+
40
+ - 本文件只做意图判定,不做业务执行;执行细节以各 Phase 与 subs SOP 为准。
41
+ - 与课程无关的闲聊/他领域请求,不在此展开,直接回落到对应技能或澄清。
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+ # soke-course v6 环境就绪检查(自包含版:无并列技能依赖)
3
+ set -e
4
+ BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
5
+
6
+ echo "🔍 课程发布主管 v6 — 环境检查"
7
+ echo "============================"
8
+
9
+ echo "🔧 命令行工具:"
10
+ if ! command -v soke-cli &> /dev/null; then
11
+ echo " ❌ soke-cli 未安装 — 请 Read ../../shared/installation.md 按步骤安装"
12
+ exit 1
13
+ fi
14
+ echo " ✅ soke-cli: $(soke-cli --version)"
15
+
16
+ CONFIG=$(soke-cli config show 2>/dev/null || echo "")
17
+ # config show 使用中文标签「用户凭证」,不能只匹配旧字段名。
18
+ TOKEN_LINE=$(printf '%s\n' "$CONFIG" | grep -E '^用户凭证:' || true)
19
+ TOKEN_VALUE=$(printf '%s\n' "$TOKEN_LINE" | sed 's/^用户凭证:[[:space:]]*//')
20
+ if [ -n "$TOKEN_VALUE" ] && [ "$TOKEN_VALUE" != "(未设置)" ]; then
21
+ echo " ✅ 已登录"
22
+ else
23
+ echo " ⚠️ 未登录或 Token 过期 — 将由主流程自动执行网页登录授权"
24
+ fi
25
+
26
+ echo "📁 子能力 SOP (subs/):"
27
+ for sub in category settings charge publish copy query template batch assign exam photo; do
28
+ if [ -f "$BASE_DIR/subs/$sub/SOP.md" ]; then
29
+ echo " ✅ $sub"
30
+ else
31
+ echo " ❌ $sub (缺失)"
32
+ fi
33
+ done
34
+
35
+ echo "📚 参考文档:"
36
+ for ref in cli-facts.md intent-cases.md sop-publish-check.md; do
37
+ if [ -f "$BASE_DIR/$ref" ]; then
38
+ echo " ✅ $ref"
39
+ else
40
+ echo " ❌ $ref (缺失)"
41
+ fi
42
+ done
43
+
44
+ echo ""
45
+ echo "✅ 环境检查完成"
@@ -0,0 +1,46 @@
1
+ # 发布 Gate Check(课程发布前校验)
2
+
3
+ > 本文件是发布状态流转与 Gate Check 矩阵的唯一定义。执行动作见 `subs/publish/SOP.md`。参数以 `cli-facts.md` 为准。
4
+
5
+ ## 状态流转(收敛定案)
6
+
7
+ - 0 未发布 → 1 已发布:`course +publish`;
8
+ - 1 → 2 已关闭:`course +update --action close`(**CLI 支持**;删除才需后台);
9
+ - 2 → 1:**已关闭可重新发布**。
10
+
11
+ ## 立即发布 Gate Check(6 项)
12
+
13
+ | # | 检查项 | 阻塞级别 |
14
+ | --- | --- | --- |
15
+ | 1 | 标题非空 | 🔴 阻塞 |
16
+ | 2 | 分类已设置 | 🔴 阻塞 |
17
+ | 3 | 课件数量 ≥ 1 | 🔴 阻塞 |
18
+ | 4 | 无转码失败课件 | 🔴 阻塞 |
19
+ | 5 | 转码中的课件 | 🟡 警告 |
20
+ | 6 | 其他非硬项(后台待配项) | 🟡 警告 |
21
+
22
+ 规则:
23
+
24
+ - 🔴 阻塞 → 列全部阻塞项 + 修复指引 → 停止发布;
25
+ - 仅 🟡 → 弹窗「有 X 项警告,确认继续发布吗?」(发布警告用原生弹窗);
26
+ - 转码中/失败不得进入发布执行。
27
+
28
+ ## 关闭场景额外检查(第 7 项)
29
+
30
+ - **7. 关闭前确认无学习地图关联**(有关联需先解除或引导后台处理)。
31
+
32
+ ## 回查规则
33
+
34
+ - 立即发布:执行 `course +publish` 后回查 status==1。
35
+ - 定时发布:回查 publish_time,未到时间时允许 status 仍为 0。
36
+ - 执行前重新获取课程状态并再次 Gate Check,确认仍是当前课程与计划。
37
+
38
+ ## 输出标准
39
+
40
+ - 成功:✅ 课程发布成功 / 标题 / ID / status=1 / 学员端可见。
41
+ - 定时:✅ 已设置定时发布 / 标题 / ID / publish_time / 当前 status=0(到点后回查)。
42
+ - 不通过:❌ 逐项 [✓]/[✗] 列表 + 修复指引。
43
+
44
+ ## ⚠️ CLI 不支持
45
+
46
+ 审批流(后台→系统设置→审批设置;默认关闭)、批量发布(后台)、删除课程(后台,不可逆)。
@@ -0,0 +1,40 @@
1
+ # 指派子 SOP(课程流程编排视角)
2
+
3
+ > 本 SOP 只承载「课程创建/上传流程中」的指派交互编排规则;指派命令的真实参数以 `../../cli-facts.md` 的 assign 组为准,指派实现细节见 `../../../soke-assign/MODULE.md`。
4
+
5
+ ## 触发
6
+
7
+ Phase 4 弹窗1 用户选择「1. 指派(推荐)」后触发本 SOP。
8
+
9
+ ## 交互顺序(硬规则)
10
+
11
+ 1. 弹窗1 确认指派后,紧接着固定收集两问:**学习类型(F1 必修 / F2 选修)| 指派对象(部门指派 / 人员指派)**。
12
+ 2. **G2(不指派)不出现学习类型问,也不出现指派部门/人员问**。
13
+ 3. 指派对象选项**隐藏用户组/职位**,只保留「部门指派 / 人员指派」。
14
+
15
+ ## 部门指派
16
+
17
+ - 用户选部门指派后,**先执行 `assign +list-departments` 递归拉取部门树**,再使用原生选择弹窗罗列部门名称和成员数;**不能只要求用户输入部门名称**。
18
+ - 用户选定部门后,执行 `assign +create`,使用 `--dept-ids`/`--dept-names`。
19
+ - `--learn-type` 用 `required`(F1 必修)/ `optional`(F2 选修),**不是** `--compulsory 1|0`。
20
+
21
+ ## 人员指派
22
+
23
+ - 用户选人员指派后,用关键词 `assign +list-users` 编号选定用户。
24
+ - 用户选定人员后,执行 `assign +create`,使用 `--user-ids`/`--user-names`。
25
+
26
+ ## 完成判定
27
+
28
+ 指派真正成功,当且仅当 `assign +list`(基于 `--target-id` 资源 ID 查询)能查到对应用户/部门的指派记录,且 `--learn-type` 标记与请求一致。仅 `+create` 回显成功但 `+list` 查不到的,视为未完成,不得报告「指派成功」。
29
+
30
+ ## 前置条件
31
+
32
+ - 未发布课程同样可以指派,无「先发布才能指派」限制。
33
+ - 批量指派建议单次不超过 500 人,超出分批处理。
34
+
35
+ ## 检查清单
36
+
37
+ - [ ] 弹窗2 已收集指派对象 + 学习类型(G2 跳过学习类型)
38
+ - [ ] 部门指派已先拉部门树并用原生弹窗罗列,未要求用户裸输部门名
39
+ - [ ] `--learn-type` 用 required/optional,未使用旧参数 --compulsory
40
+ - [ ] 指派完成后用 assign +list 回读验证(查不到=未完成)