@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
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"description": "<场景描述全文,完整搬运不缩略>",
|
|
24
24
|
"tags": ["标签1", "标签2", "标签3"],
|
|
25
25
|
"key_points": "1) 考核点1;2) 考核点2;3) 考核点3",
|
|
26
|
-
"scene_lang": "
|
|
26
|
+
"scene_lang": "zh",
|
|
27
27
|
"scenario_cover": "https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png"
|
|
28
28
|
}
|
|
29
29
|
```
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
| `description` | string | Part1 场景描述全文,禁缩略 | 只写首句摘要 |
|
|
37
37
|
| `tags` | string[] | 3-5 个数组元素 | ❌ 逗号分隔字符串 |
|
|
38
38
|
| `key_points` | **string** | 多条用分号/编号拼成**单字符串** | ❌ 写成数组(平台会接受但字段为空) |
|
|
39
|
-
| `scene_lang` | string |
|
|
39
|
+
| `scene_lang` | string | 仅支持 `zh`、`tw`、`en`(分别为简体中文、繁体中文、英文) | ❌ `"简体中文"` / `"zh-CN"` / `"中文"` |
|
|
40
40
|
| `scenario_cover` | string | 固定默认图 URL | ❌ 占位/本地路径 |
|
|
41
41
|
|
|
42
42
|
---
|
|
@@ -48,7 +48,7 @@ assert isinstance(data["name"], str) and 1 <= len(data["name"]) <= 100
|
|
|
48
48
|
assert isinstance(data["description"], str) and len(data["description"]) >= 20
|
|
49
49
|
assert isinstance(data["tags"], list) and 3 <= len(data["tags"]) <= 5
|
|
50
50
|
assert isinstance(data["key_points"], str) and len(data["key_points"]) > 0
|
|
51
|
-
assert data["scene_lang"]
|
|
51
|
+
assert data["scene_lang"] in {"zh", "tw", "en"}
|
|
52
52
|
assert data["scenario_cover"] == "https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png"
|
|
53
53
|
```
|
|
54
54
|
|
|
@@ -63,8 +63,8 @@ assert data["scenario_cover"] == "https://newsokeeditorcdn.soke.cn/public/ai/cov
|
|
|
63
63
|
❌ 案例 B:tags 写成逗号分隔字符串
|
|
64
64
|
{ "tags": "展会拓客,B2B销售,快速识别" }
|
|
65
65
|
|
|
66
|
-
❌ 案例 C:scene_lang
|
|
67
|
-
{ "scene_lang": "
|
|
66
|
+
❌ 案例 C:scene_lang 使用不支持的展示名称或区域码
|
|
67
|
+
{ "scene_lang": "简体中文" }
|
|
68
68
|
|
|
69
69
|
❌ 案例 D:封面留空或写占位 URL
|
|
70
70
|
{ "scenario_cover": "" }
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
- **验收**:apply 后 `+get-scenario --raw` 逐字段核对目标字段;preview/apply 成功≠平台最终解析正常。
|
|
42
42
|
- **JSON 中文引号**:用 Python `json.dump(ensure_ascii=False)` 写入,禁 heredoc/echo(全角双引号会报错)。
|
|
43
43
|
- **类型**:Part3 `max_rounds` 整数、`sort_order` 字符串 `"1"`;Part4 `sort_order` 数字 `1`(两者相反)。
|
|
44
|
-
- **Part1 必填**:`key_points` 是字符串(非数组)、`scene_lang
|
|
44
|
+
- **Part1 必填**:`key_points` 是字符串(非数组)、`scene_lang` 为 `zh/tw/en` 之一、`scenario_cover` 固定默认图 `https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`。
|
|
45
45
|
- **身份字段**:`corp_id/user_id/implementation_corp_id` 禁写请求体,不作选租户依据。
|
|
46
46
|
|
|
47
47
|
## 推荐顺序
|
|
@@ -64,10 +64,12 @@ Use `pnpm install` for this project.
|
|
|
64
64
|
### Resolution
|
|
65
65
|
- **Resolved**: 2025-01-15T14:30:00Z
|
|
66
66
|
- **Commit/PR**: N/A - knowledge update
|
|
67
|
+
- **Notes**: Added to CLAUDE.md for future reference
|
|
67
68
|
|
|
68
69
|
---
|
|
69
70
|
```
|
|
70
71
|
|
|
72
|
+
## Learning: Promoted to CLAUDE.md
|
|
71
73
|
|
|
72
74
|
```markdown
|
|
73
75
|
## [LRN-20250115-003] best_practice
|
|
@@ -75,6 +77,7 @@ Use `pnpm install` for this project.
|
|
|
75
77
|
**Logged**: 2025-01-15T16:00:00Z
|
|
76
78
|
**Priority**: high
|
|
77
79
|
**Status**: promoted
|
|
80
|
+
**Promoted**: CLAUDE.md
|
|
78
81
|
**Area**: backend
|
|
79
82
|
|
|
80
83
|
### Summary
|
|
@@ -464,6 +464,10 @@ grep -B5 'Priority\*\*: high' .learnings/*.md | grep '^## \['
|
|
|
464
464
|
|
|
465
465
|
| 文件 | 用途 |
|
|
466
466
|
|------|------|
|
|
467
|
+
| `scripts/activator.sh` | 每轮对话后提醒评估学习(可选启用) |
|
|
468
|
+
| `scripts/error-detector.sh` | 命令执行失败时自动检测并提示记录 |
|
|
469
|
+
| `scripts/extract-skill.sh` | 从 learning 提取为新 skill |
|
|
470
|
+
| `scripts/sync.sh` | Part3-5 统一脚本代理执行器(统一返回 success/failed/fail_stage/next_action/updated_at/validation_result) |
|
|
467
471
|
| `assets/LEARNINGS-TEMPLATE.md` | 学习条目记录模板 |
|
|
468
472
|
| `assets/ERRORS-TEMPLATE.md` | 错误条目记录模板 |
|
|
469
473
|
| `assets/FEATURE_REQUESTS-TEMPLATE.md` | 功能请求记录模板 |
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 固定约束
|
|
6
6
|
|
|
7
|
-
- 场景语言 `scene_lang`
|
|
7
|
+
- 场景语言 `scene_lang` 仅支持 `zh`(简体中文)、`tw`(繁体中文)、`en`(英文)。
|
|
8
8
|
- 封面固定默认 URL `https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`(确认后后台写入)。
|
|
9
9
|
- `key_points` 必须**单个字符串**(多条用分号/编号拼接,非数组)。
|
|
10
10
|
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
|
|
15
15
|
## 自查清单(7 项)
|
|
16
16
|
|
|
17
|
-
1. name 非空 ≤15 字;2. description 100-200 字;3. scene_lang
|
|
17
|
+
1. name 非空 ≤15 字;2. description 100-200 字;3. scene_lang 为 `zh/tw/en` 之一;4. cover 非空(固定 URL);5. **key_points 是字符串非数组(最高频错误)**;6. category_id 非空;7. tags 3-5 个。
|
|
@@ -63,6 +63,8 @@ def check(sc: dict) -> list:
|
|
|
63
63
|
errs.append("[闸门8] key_points 为空(检查 Part1 是否误写数组)")
|
|
64
64
|
if not (sc.get("tags") and len(sc.get("tags", [])) >= 3):
|
|
65
65
|
errs.append("[闸门8] tags 少于 3 个")
|
|
66
|
+
if sc.get("scene_lang") not in {"zh", "tw", "en"}:
|
|
67
|
+
errs.append(f"[闸门8] scene_lang 必须是 zh、tw 或 en,当前 {sc.get('scene_lang')!r}")
|
|
66
68
|
|
|
67
69
|
# 12. 整体设定 ≤ 3000 字
|
|
68
70
|
if len(os_text) > 3000:
|
|
@@ -54,8 +54,8 @@ def validate_part1(data: dict) -> list[str]:
|
|
|
54
54
|
errors.append("key_points: ❌ 被写成数组,平台会接受但字段为空。改为分号拼接的单字符串")
|
|
55
55
|
|
|
56
56
|
# scene_lang
|
|
57
|
-
if data.get("scene_lang")
|
|
58
|
-
errors.append(f"scene_lang:
|
|
57
|
+
if data.get("scene_lang") not in {"zh", "tw", "en"}:
|
|
58
|
+
errors.append(f"scene_lang: 必须是 zh、tw 或 en,当前 {data.get('scene_lang')!r}")
|
|
59
59
|
|
|
60
60
|
# scenario_cover 或 cover_url(CLI 接受两者)
|
|
61
61
|
cover = data.get("scenario_cover") or data.get("cover_url")
|
|
@@ -70,6 +70,13 @@ def validate_part1(data: dict) -> list[str]:
|
|
|
70
70
|
def validate_part2(operations: list) -> list[str]:
|
|
71
71
|
errors = []
|
|
72
72
|
|
|
73
|
+
for i, op in enumerate(operations):
|
|
74
|
+
if op.get("type") != "update_basic":
|
|
75
|
+
continue
|
|
76
|
+
data = op.get("data", {})
|
|
77
|
+
if "scene_lang" in data and data.get("scene_lang") not in {"zh", "tw", "en"}:
|
|
78
|
+
errors.append(f"operations[{i}].data.scene_lang: 必须是 zh、tw 或 en,当前 {data.get('scene_lang')!r}")
|
|
79
|
+
|
|
73
80
|
# 操作 1: update_basic (OS)
|
|
74
81
|
os_ops = [o for o in operations if o.get("type") == "update_basic"]
|
|
75
82
|
if not os_ops:
|
|
@@ -89,6 +89,8 @@ soke-cli ai-training +get-plan --scenario-id scenario_micro_loan_sales --format
|
|
|
89
89
|
|
|
90
90
|
### 创建场景
|
|
91
91
|
|
|
92
|
+
`scene_lang` 是场景语言代码,合法值仅有 `zh`(简体中文)、`tw`(繁体中文)和 `en`(英文)。CLI flags 与 `--request-file` 使用同一枚举校验;不要传入 `简体中文`、`中文`、`zh-CN` 或其他值。
|
|
93
|
+
|
|
92
94
|
如果封面图由本地智能体生成,先上传封面并拿到可写入 `scenario_cover` 的 CDN URL:
|
|
93
95
|
|
|
94
96
|
```bash
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
examples:
|
|
2
|
+
- id: create-and-publish
|
|
3
|
+
title:
|
|
4
|
+
zh: 创建课程并发布
|
|
5
|
+
description:
|
|
6
|
+
zh: 从零创建一门线上课,走完课件、发布全流程
|
|
7
|
+
prompt:
|
|
8
|
+
zh: |-
|
|
9
|
+
帮我创建一门线上课:
|
|
10
|
+
|
|
11
|
+
课程标题:{{课程标题}}
|
|
12
|
+
课程分类:{{可选,分类名称}}
|
|
13
|
+
|
|
14
|
+
创建完成后引导我添加课件并发布。
|
|
15
|
+
- id: add-courseware
|
|
16
|
+
title:
|
|
17
|
+
zh: 给课程加课件
|
|
18
|
+
description:
|
|
19
|
+
zh: 给已有课程添加视频/音频/文档/图片/小测验课件
|
|
20
|
+
prompt:
|
|
21
|
+
zh: |-
|
|
22
|
+
给课程「{{课程名称}}」添加课件:
|
|
23
|
+
|
|
24
|
+
素材:{{本地文件路径或"从素材库选择"或"小测验/图片"}}
|
|
25
|
+
- id: publish-and-assign
|
|
26
|
+
title:
|
|
27
|
+
zh: 发布并指派学员
|
|
28
|
+
description:
|
|
29
|
+
zh: 对已有课程执行发布校验、发布,并指派给部门
|
|
30
|
+
prompt:
|
|
31
|
+
zh: |-
|
|
32
|
+
把课程「{{课程名称}}」发布,并指派给{{部门名称}},{{必修|选修}}。
|
|
33
|
+
- id: query-progress
|
|
34
|
+
title:
|
|
35
|
+
zh: 查学习进度
|
|
36
|
+
description:
|
|
37
|
+
zh: 查询课程完成率、学员进度、作业提交情况
|
|
38
|
+
prompt:
|
|
39
|
+
zh: |-
|
|
40
|
+
看看课程「{{课程名称}}」的学习进度和完成率。
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# 变更日志
|
|
2
|
+
|
|
3
|
+
## v6.47.0 · 2026-09-01
|
|
4
|
+
|
|
5
|
+
- 移除单独的“回复格式:课程标题 A1B3C1”和固定编码示例。
|
|
6
|
+
- 改为自然语言提示用户直接提供课程标题、课件来源、分类、模板及本地文件路径。
|
|
7
|
+
|
|
8
|
+
## v6.46.0 · 2026-09-01
|
|
9
|
+
|
|
10
|
+
- 固定单课程首轮输出顺序,确保标题、A 来源、B 分类、分类提示、C 模板和回复示例完整出现。
|
|
11
|
+
- 分类和模板统一使用“编码在名称前”的展示格式。
|
|
12
|
+
- 指派与发布改为两个连续弹窗:先确认是否指派,再确认是否发布。
|
|
13
|
+
- 指派弹窗固定为「1. 指派(推荐)/2. 不指派」;发布弹窗固定为「1. 发布/2. 不发布」。
|
|
14
|
+
|
|
15
|
+
## v6.45.0 · 2026-09-01
|
|
16
|
+
|
|
17
|
+
- 统一单课程首轮输出顺序和格式。
|
|
18
|
+
- 分类、模板选项统一采用“编码在名称前”的展示方式。
|
|
19
|
+
- 指派弹窗固定顺序为“1. 指派(推荐)/2. 不指派”。
|
|
20
|
+
- 发布弹窗固定顺序为“1. 发布/2. 不发布”。
|
|
21
|
+
|
|
22
|
+
## v6.44.0 · 2026-09-01
|
|
23
|
+
|
|
24
|
+
- 修复创建课程时 B 分类列表为空或使用占位内容的问题。
|
|
25
|
+
- 分类选择现在必须先拉取真实分类接口返回,再展示一级分类标题和 UUID。
|
|
26
|
+
- 统一分类字段为 `data.list[].title`、`uuid`、`parent_id`,不再使用未验证的 `name`/`id` 字段。
|
|
27
|
+
- 未确认的 `--parent-id`、`--level` 参数不得直接调用。
|
|
28
|
+
|
|
29
|
+
## v6.43.0 · 2026-09-01
|
|
30
|
+
|
|
31
|
+
- 优化未登录处理:自动执行 `soke-cli auth login` 调用网页登录授权。
|
|
32
|
+
- 登录完成后自动回查「用户凭证」,失败或取消时停止后续写操作。
|
|
33
|
+
- 修正环境检查脚本对中文登录字段的识别。
|
|
34
|
+
|
|
35
|
+
## v6.42.0 · 2026-09-01
|
|
36
|
+
|
|
37
|
+
- 优化“查看学习统计”入口:未指定课程时先展示已发布线上课前 20 个。
|
|
38
|
+
- 增加按课程标题模糊搜索和分页选择提示,选定课程后再查询统计。
|
|
39
|
+
|
|
40
|
+
## v6.41.0 · 2026-09-01
|
|
41
|
+
|
|
42
|
+
- 优化对外分享元数据,移除残留英文示例。
|
|
43
|
+
- 增加已有课程操作不再弹模式选择的使用说明。
|
|
44
|
+
|
|
45
|
+
## v6.40.0 · 2026-09-01
|
|
46
|
+
|
|
47
|
+
- 补齐关键 CLI 命令的最低返回字段契约。
|
|
48
|
+
- 增加批量目录扫描的隐藏文件、符号链接、大小写扩展名和空目录规则。
|
|
49
|
+
- 完善动作级中断恢复和批量结果记录要求。
|
|
50
|
+
- 清理分享元数据中的英文示例。
|
|
51
|
+
|
|
52
|
+
## v6.39.0 · 2026-09-01
|
|
53
|
+
|
|
54
|
+
- 修复已有 `course-id`、目录路径与模式选择之间的路由冲突。
|
|
55
|
+
- 增加创建前查重、发布确认前二次状态查询和 Gate Check。
|
|
56
|
+
- 明确批量任务的单课失败隔离、超时回查、失败汇总和恢复位置。
|
|
57
|
+
|
|
58
|
+
## v6.38.0 · 2026-09-01
|
|
59
|
+
|
|
60
|
+
- 统一为 5 阶段流程:创建、课件、设置、指派与发布、查询与维护。
|
|
61
|
+
- 统一执行顺序:课件 → 设置 → 指派 → Gate Check → 发布。
|
|
62
|
+
- 模板自动应用 CLI 支持的高级设置,后台能力标记为待办。
|
|
63
|
+
- 修正立即发布与定时发布的 Gate Check 和回查规则。
|
|
64
|
+
- 修正图片字段白名单、分类末级选择、素材库分页和 clock 分页字段。
|
|
65
|
+
- 增加写操作回查、批量失败隔离和中断恢复要求。
|
|
66
|
+
- 统一示例、排障文档和 WorkBuddy 安装路径。
|
|
67
|
+
|
|
68
|
+
## 兼容性说明
|
|
69
|
+
|
|
70
|
+
- 命令参数以 `references/cli-facts.md` 为唯一事实源。
|
|
71
|
+
- 当前事实表实测版本为 `soke-cli v1.0.77`。
|
|
72
|
+
- 旧版示例中的“先发布后指派”流程不再适用。
|
|
73
|
+
- 未经 `--help` 或实际回归验证的参数,不得直接写入其他 SOP。
|
|
74
|
+
|
|
75
|
+
## 历史版本
|
|
76
|
+
|
|
77
|
+
- v6.37.0 及更早版本的详细记录保留在版本发布包或内部备份中;对外分享包只保留当前版本和兼容性说明。
|
|
@@ -1,291 +1,44 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 课程发布主管 · 安装使用教程
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
授客AI平台线上课端到端管理技能(自包含单技能,v6.47.0)。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 前提
|
|
6
6
|
|
|
7
|
+
- WorkBuddy 桌面端;
|
|
8
|
+
- Node.js ≥ 14;
|
|
9
|
+
- 授客AI平台账号(需有课程管理权限)。
|
|
7
10
|
|
|
8
|
-
##
|
|
11
|
+
## 安装
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
1. 在 WorkBuddy 中安装或更新 `soke-course` 技能;
|
|
14
|
+
2. 手动安装时放入 `~/.workbuddy/skills/soke-course/`。
|
|
11
15
|
|
|
12
|
-
|
|
13
|
-
- 🏷️ **分类管理**: 查询和管理课程分类
|
|
14
|
-
- 📦 **素材管理**: 集成 soke-material skill,管理素材库
|
|
15
|
-
- 📝 **课件管理**: 集成 soke-lesson skill,管理课程课件
|
|
16
|
-
- 👥 **学习记录**: 查询用户的课程学习记录
|
|
17
|
-
- 📊 **学习统计**: 查询课件学习记录和人脸识别记录
|
|
16
|
+
## 首次配置(一次性)
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
在 WorkBuddy 中说任意触发语(如"帮我创建一门线上课"),技能会自动:
|
|
19
|
+
1. 检测 soke-cli → 未装则按内置 `soke-cli-install-guide.md` 引导(三步:npm prefix → PATH → `npm install -g @sokeai/cli@latest`);
|
|
20
|
+
2. 检测登录 → 未登录或凭证过期时自动执行 `soke-cli auth login`,调用网页登录授权;授权结束后自动回查登录状态,失败则停止后续写操作。
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
负责文件上传和素材管理
|
|
23
|
-
- [详细文档](./references/dependencies/soke-material.md)
|
|
22
|
+
## 三个典型用法
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
24
|
+
- 「帮我创建一门新员工入职培训课,分类选企业管理」→ 全流程引导(分类→模板→课件→设置→指派→Gate Check→发布);
|
|
25
|
+
- 「给这门课加个视频 + 一张封面图」→ 识别为已有课程操作,直接进入课件/封面处理,不再弹出单课或批量模式选择;
|
|
26
|
+
- 「看看谁学完了」→ 未指定课程时先展示已发布线上课前 20 个,支持「搜索 XX」和「下一页」;选定课程后查询学习进度/完成率/作业提交。
|
|
28
27
|
|
|
29
|
-
##
|
|
28
|
+
## 能力边界(管理预期)
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
| CLI 可做 | 需后台 |
|
|
31
|
+
|---------|--------|
|
|
32
|
+
| 创建/更新/关闭/发布/定时发布、五类课件、高级设置、指派、进度/人脸/作业查询 | 删除/复制课程、审批/批量发布、新建分类、收费价格/试看、证书/签名、讲师/标签/积分、文章/外链/SCORM/HTML 课件、AI做课 |
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
# 1. 查询课程分类,获取 category-id
|
|
35
|
-
soke-cli course +list-categories
|
|
34
|
+
## 给学习地图用户
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
soke-cli course +create --title "Go语言入门" --category-id "CATEGORY-UUID"
|
|
36
|
+
本技能内嵌指派能力,但 `soke-learning-map` 技能依赖独立的 soke-assign;如同时使用学习地图,请另行安装 soke-assign。
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
soke-cli file +upload --file ./lesson1.mp4
|
|
38
|
+
## 反馈
|
|
42
39
|
|
|
43
|
-
|
|
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
|
|
40
|
+
用出问题请反馈,格式三要素:**场景 + 期望 + 实际**(例:场景"导入试卷建测验",期望"自动建卷挂载",实际"第3步填空题报错")。
|
|
54
41
|
|
|
55
|
-
|
|
56
|
-
soke-cli course +publish --course-id "COURSE-UUID"
|
|
57
|
-
```
|
|
42
|
+
## 变更日志
|
|
58
43
|
|
|
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](./SKILL.md) - 完整的 Skill 文档和 API 参考
|
|
264
|
-
- [素材库管理 Skill](./references/dependencies/soke-material.md) - 文件上传和素材管理
|
|
265
|
-
- [课件管理 Skill](./references/dependencies/soke-lesson.md) - 课件创建和管理
|
|
266
|
-
- [共享配置 Skill](./references/shared.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): 初始版本,支持课程查询、分类、学习记录等功能
|
|
44
|
+
详见同目录 `CHANGELOG.md`。对外分享时可只保留当前版本、兼容性说明和最近重要变更。
|