@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
@@ -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 | 固定 `"简体中文"`(永不随场景变) | ❌ `"zh-CN"` / `"中文"` |
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 写成 zh-CN
67
- { "scene_lang": "zh-CN" }
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="简体中文"`、`scenario_cover` 固定默认图 `https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`。
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="简体中文";4. cover 非空(固定 URL);5. **key_points 是字符串非数组(最高频错误)**;6. category_id 非空;7. tags 3-5 个。
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 个。
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ # AI 陪练 — 学习提醒钩子
3
+ # 每轮对话后提醒评估学习(可选启用)
4
+ echo "[activator] 提醒:检查本轮是否有新的学习点需要记录"
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ # AI 陪练 — 命令错误检测
3
+ # 命令执行失败时自动检测并提示记录
4
+ echo "[error-detector] 检测到错误,建议记录到 .learnings/ERRORS.md"
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ # AI 陪练 — 学习条目提取为独立 skill
3
+ # 用法: extract-skill.sh LRN-YYYYMMDD-XXX [--dry-run]
4
+ LEARNING_ID="$1"
5
+ DRY_RUN="$2"
6
+ echo "[extract-skill] 从 $LEARNING_ID 提取新 skill"
7
+ [ "$DRY_RUN" = "--dry-run" ] && echo "[dry-run] 预览模式,不实际执行"
@@ -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: 必须固定为 '简体中文',当前 {data.get('scene_lang')!r}")
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
- # 授客课程管理 Skill
1
+ # 课程发布主管 · 安装使用教程
2
2
 
3
- 完整的课程生命周期管理,集成素材库和课件管理子 skills,提供模块化的课程内容管理。
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
- 这个 skill 提供了完整的课程管理功能,包括:
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
- ## 集成的子 Skills
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
- ### 📦 soke-material - 素材库管理
22
- 负责文件上传和素材管理
23
- - [详细文档](./references/dependencies/soke-material.md)
22
+ ## 三个典型用法
24
23
 
25
- ### 📚 soke-lesson - 课件管理
26
- 负责课件的创建和管理
27
- - [详细文档](./references/dependencies/soke-lesson.md)
24
+ - 「帮我创建一门新员工入职培训课,分类选企业管理」→ 全流程引导(分类→模板→课件→设置→指派→Gate Check→发布);
25
+ - 「给这门课加个视频 + 一张封面图」→ 识别为已有课程操作,直接进入课件/封面处理,不再弹出单课或批量模式选择;
26
+ - 「看看谁学完了」→ 未指定课程时先展示已发布线上课前 20 个,支持「搜索 XX」和「下一页」;选定课程后查询学习进度/完成率/作业提交。
28
27
 
29
- ## 快速开始
28
+ ## 能力边界(管理预期)
30
29
 
31
- ### 创建课程
30
+ | CLI 可做 | 需后台 |
31
+ |---------|--------|
32
+ | 创建/更新/关闭/发布/定时发布、五类课件、高级设置、指派、进度/人脸/作业查询 | 删除/复制课程、审批/批量发布、新建分类、收费价格/试看、证书/签名、讲师/标签/积分、文章/外链/SCORM/HTML 课件、AI做课 |
32
33
 
33
- ```bash
34
- # 1. 查询课程分类,获取 category-id
35
- soke-cli course +list-categories
34
+ ## 给学习地图用户
36
35
 
37
- # 2. 创建课程(使用上一步获取的 category-id)
38
- soke-cli course +create --title "Go语言入门" --category-id "CATEGORY-UUID"
36
+ 本技能内嵌指派能力,但 `soke-learning-map` 技能依赖独立的 soke-assign;如同时使用学习地图,请另行安装 soke-assign。
39
37
 
40
- # 3. 上传素材
41
- soke-cli file +upload --file ./lesson1.mp4
38
+ ## 反馈
42
39
 
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
40
+ 用出问题请反馈,格式三要素:**场景 + 期望 + 实际**(例:场景"导入试卷建测验",期望"自动建卷挂载",实际"第3步填空题报错")。
54
41
 
55
- # 5. 发布课程
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`。对外分享时可只保留当前版本、兼容性说明和最近重要变更。