@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
|
@@ -1,399 +1,181 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: soke-course
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
name_zh: 课程发布主管
|
|
4
|
+
version: 6.47.0
|
|
5
|
+
description: "授客AI平台线上课程管理:创建课程、上传课件、添加小测验、配置设置、指派学员、发布课程和查询学习进度。"
|
|
6
|
+
argument-hint: 说出课程主题,或直接上传课件文件
|
|
7
|
+
user-invocable: true
|
|
8
|
+
author: Soke Team
|
|
9
|
+
tags: [课程管理, 流程编排, 发布管理]
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
# 课程发布主管
|
|
10
13
|
|
|
11
|
-
>
|
|
14
|
+
> 已验证 soke-cli ≥ 1.0.77。命令参数一律以 [`references/cli-facts.md`](./references/cli-facts.md) 为准(唯一事实源);未覆盖命令跑 `--help` 实测后补录。
|
|
12
15
|
|
|
13
|
-
##
|
|
16
|
+
## 启动前置(结构性,检测不通过才读安装指南)
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
1. `command -v soke-cli` 不存在 → read [`soke-cli-install-guide.md`](./soke-cli-install-guide.md) 引导安装;存在则跳过;
|
|
19
|
+
2. 执行 `soke-cli config show` 检查「用户凭证」是否有值(注意:输出标签是「用户凭证」不是 `user_token`);
|
|
20
|
+
3. 检测到未登录或凭证过期 → **立即自动执行 `soke-cli auth login`,调用网页登录授权,不先让用户手动执行命令**;登录命令结束后必须再次执行 `soke-cli config show` 回查;
|
|
21
|
+
4. 登录成功 → 直接进入路由;登录取消、失败或回查仍无凭证 → 停止写操作,明确提示登录失败原因;
|
|
22
|
+
5. 环境自检(需 Bash):`bash scripts/check_readiness.sh` 可一次性校验工具/登录/SOP/文档完整性。
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
- 选择课程分类(列出所有分类,最后一项为"🆕 新建分类")
|
|
19
|
-
- 歧义消解(不确定用户想做什么时)
|
|
20
|
-
- 确认是否继续("还要加课件吗?"/"调顺序吗?"/"确认发布?")
|
|
21
|
-
- 选择发布对象(部门/用户列表)
|
|
22
|
-
- 中断恢复(从已有课程列表中选择继续哪个)
|
|
23
|
-
- 任何其他有 2-4 个固定选项的决策点
|
|
24
|
+
## 交互规范(硬规则)
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- label: "🆕 新建分类" description: "前往管理后台新建分类"
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 使用前提
|
|
37
|
-
|
|
38
|
-
1. 已安装 `soke-cli`
|
|
39
|
-
2. 已登录授权 — 首次执行时自动检查并引导登录
|
|
40
|
-
|
|
41
|
-
**登录状态检查与自动登录(必须执行):**
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# 第一步:检查登录状态
|
|
45
|
-
soke-cli config show
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
若返回包含 `user_token` → ✅ 已登录,继续。
|
|
49
|
-
|
|
50
|
-
若返回无 `user_token` 或报错 → ⚠️ 未登录,立即执行:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
# 第二步:自动打开浏览器完成 OAuth 授权
|
|
54
|
-
# soke-cli auth login 会自动调用系统默认浏览器打开授权页面
|
|
55
|
-
soke-cli auth login
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
`soke-cli auth login` 执行后会自动打开浏览器到授客AI开放平台授权页,用户在浏览器中完成登录授权即可。授权成功后 CLI 终端会显示 `✅ 已登录`,Token 自动保存至 `~/.soke-cli/config.json`。
|
|
59
|
-
|
|
60
|
-
> 如果浏览器没有自动打开,终端会输出授权链接,手动复制到浏览器打开即可完成授权。
|
|
61
|
-
|
|
62
|
-
**任何课程操作之前,必须先通过上述两步确认登录状态。未登录时禁止跳过,必须完成登录后再继续。**
|
|
26
|
+
- **模式选择按上下文判定**:有明确 `course-id` → 直接进入当前课程操作,不弹模式选择;有明确本地目录 → 直接进入多课程批量流程;有单个文件或课程标题 → 进入单课程流程;仅在无法判断时,第一步才使用原生二选一询问「单课程上传」或「多课程批量上传」。目录扫描默认不跟随符号链接、忽略隐藏文件、扩展名大小写不敏感;空目录、无支持课件、无权限或同名冲突必须先提示,不能直接执行。
|
|
27
|
+
- **单课程首轮固定格式**:选择「单课程上传」后,第一条收集消息必须严格按“课程标题 → A 课件来源 → B 课程分类 → 分类表格 → 分类提示 → C 课程模板 → 模板表格 → 回复格式 → 回复示例”的顺序输出;所有选项编码必须放在名称前(如 `B1 外部课程`、`C1 合规必修`),禁止把编码放在名称后;分类表格和模板表格必须使用本次接口/事实数据,不得输出占位符、空表或预设列表。用户可一次回复标题及 A/B/C 编码。选择「多课程批量上传」后,按批量流程分步收集分类、模板和目录路径;意图不明/无关输入也照此触发主流程,不展开无关话题;
|
|
28
|
+
- **编码方案**:A 课件来源(A1 本地上传 / A2 素材库选择);B 分类(B1..Bn 一级,10 个/页,"下一页"翻页、"搜索 XX"搜索);C 模板(C1..C7 全列,编码放在模板名称前);D 小测验(D1 加 / D2 不加);E 发布(E1 发布 / E2 不发布);F 学习类型(F1 必修 / F2 选修);G 指派(G1 指派 / G2 不指派);H 出题方式(H1 选择试卷 / H2 导入试卷);
|
|
29
|
+
- A1 → 同句或下句贴本地路径;A2 → 展示素材编号列表(**20 个/页**、「下一页」翻页、「搜索 XX」搜索),回复编号选定;
|
|
30
|
+
- 标题在输入框自由输入,**禁止建议标题**;提示用固定话术(「请输入你要上传的课程标题」),禁止内部状态叙述;
|
|
31
|
+
- 默认流程顺序:**先上传课件 → 再问小测验 → 最后指派+发布条件弹窗(G2 不出现 F 问)**;指派弹窗选项顺序固定为「1. 指派(推荐) 2. 不指派」;发布弹窗选项顺序固定为「1. 发布 2. 不发布」,只有用户明确选择「1. 发布」才执行发布,禁止代发布;排序/设置默认不问(告知"随时说'调顺序/改设置'");
|
|
32
|
+
- 展示中文化;**全部输出用 markdown 格式**:选择列表用表格、提示语加粗;**回复指引行一律放表格下方**。
|
|
33
|
+
- 弹窗例外:**模式选择、批量上传确认、加小测验、出题方式、指派+发布条件、指派部门选择和发布警告均使用原生弹窗**;已有试卷选择不使用弹窗,改为在当前对话中直接用 Markdown 表格展示前 20 份试卷,并在表格下方附固定提示:「回复“搜索 XX”可模糊匹配;“下一页”翻页(当前仅 1 页)。」其余选择一律编码文本。已有试卷列表仅在当前对话中展示,不生成、打开或展示独立文件、远程页面或远程课程界面,也不将列表同步到远程平台。试卷成功挂载后,必须立即弹出指派与发布条件选择。小测验导入或挂载成功后,必须立即弹出指派与发布条件选择,不得只输出状态后结束。选择部门指派后,必须先拉取并在原生弹窗中罗列可选部门,再让用户选择,不能只要求用户输入部门名称。批量上传确认必须在目录扫描并展示计划表后弹出,用户明确确认后才能执行创建与上传。
|
|
63
34
|
|
|
64
|
-
##
|
|
35
|
+
## 意图路由(Gate 0)
|
|
65
36
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
###
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
必填: 课件内容(文件路径或文本)
|
|
99
|
-
从上下文获取: course-id
|
|
100
|
-
|
|
101
|
-
### 发布
|
|
102
|
-
从上下文获取: course-id
|
|
103
|
-
前置: Gate Check 全部通过
|
|
104
|
-
|
|
105
|
-
### 指派
|
|
106
|
-
必填: 部门名或用户名 + course-id
|
|
107
|
-
|
|
108
|
-
## 三、执行流程
|
|
109
|
-
|
|
110
|
-
### 3.1 意图路由
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
用户消息 → 关键词 → 意图 → 路由
|
|
114
|
-
|
|
115
|
-
create → 3.2 全流程创建
|
|
116
|
-
add_lesson → 3.3 课件子流程
|
|
117
|
-
settings → 3.4 设置子流程(→ read references/subs/settings/SOP.md)
|
|
118
|
-
publish → 3.5 发布子流程(→ read references/subs/publish/SOP.md)
|
|
119
|
-
assign → 3.6 指派子流程
|
|
120
|
-
query → 3.7 查询子流程(→ read references/subs/query/SOP.md)
|
|
121
|
-
maintain → 3.8 维护子流程
|
|
122
|
-
category → read references/subs/category/SOP.md
|
|
37
|
+
| 意图 | 路由 |
|
|
38
|
+
|------|------|
|
|
39
|
+
| create(创建/新建/做课/开课) | Phase 1 全流程 |
|
|
40
|
+
| add_lesson(加课件/传视频/排序) | Phase 2(需 course-id) |
|
|
41
|
+
| settings(学分/封面/倍速/人脸/提醒) | Phase 3 |
|
|
42
|
+
| assign(指派/必修/选修) | Phase 4(发布前) |
|
|
43
|
+
| publish(发布/上线/定时发布) | Phase 4(指派后最后一步,仅明确 E1 执行) |
|
|
44
|
+
| query(进度/完成率/谁学了/作业提交) | Phase 5 |
|
|
45
|
+
| maintain(关闭/删除/复制) | Phase 5 维护 |
|
|
46
|
+
| category(分类查询) | read subs/category |
|
|
47
|
+
|
|
48
|
+
上下文规则:有 course-id → 当前课程操作,不新建;学习统计未指定课程 → 先列出已发布线上课前 20 个并在表格下方提示「回复「搜索 XX」可模糊匹配;"下一页"翻页(当前仅 1 页)。」,用户选定后再查统计;有文件附件 → 倾向课件;歧义 → 弹窗列可能操作;**显式调用本技能且意图不明或与课程无关 → 默认走创建/上传主流程(1.2 提示输入标题→三问弹窗),不展开无关话题**;含明确他意图(查询/发布/指派/设置/维护)→ 对应 Phase。案例库见 [`references/intent-cases.md`](./references/intent-cases.md)。
|
|
49
|
+
|
|
50
|
+
## 主流程(编排主管,5 Phase + 路口闸门)
|
|
51
|
+
|
|
52
|
+
### Phase 1 创建骨架
|
|
53
|
+
**Step 1.0 模式路由**:按上下文优先判定模式:有 `course-id` 进入当前课程操作;有目录路径进入批量流程;有单个文件或课程标题进入单课程流程。仅无法判断时,使用原生二选一询问「单课程上传」或「多课程批量上传」;确认模式前不得执行写入类 CLI。
|
|
54
|
+
|
|
55
|
+
- 用户选择「单课程上传」:继续 1.1,随后提示输入课程标题并收集 A/B/C 编码。
|
|
56
|
+
- 用户选择「多课程批量上传」:进入 B0,先收集分类+模板,再收本地目录路径;不要求单独课程标题。批量模式下无论选择 C1-C7,课程模板中的「小测验默认」统一为「不加」,不进入小测验流程。
|
|
57
|
+
1.1 登录检测(见启动前置);
|
|
58
|
+
1.2 单课程首轮同时收集,固定输出格式如下(不再单独展示“回复格式:课程标题 A1B3C1”):
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
请输入你要上传的课程标题:
|
|
62
|
+
A 课件来源
|
|
63
|
+
B 课程分类(一级 · 第 X/Y 页)
|
|
64
|
+
<必须先执行 `soke-cli course +list-categories --page 1 --page-size 100 --format json`,再将返回结果中 `parent_id="1"` 的一级分类按实际 `title` 和 `uuid` 渲染为 Markdown 表格;禁止使用占位符、预设分类或空表>
|
|
65
|
+
回复「搜索 XX」可模糊匹配;"下一页"翻页(当前第 X/Y 页)。如需新分类请后台新建后回「分类建好了」。
|
|
66
|
+
C 课程模板
|
|
67
|
+
<详细课程模板表格>
|
|
68
|
+
请直接提供课程标题、课件来源、分类和模板;选择本地上传时请同时提供文件路径(也可将文件拖到对话框中)。
|
|
123
69
|
```
|
|
70
|
+
课程模板表格中的编码必须放在模板名称前面。允许用户一次回复「课程标题 + A/B/C 编码」,也允许分多次补充。
|
|
71
|
+
1.3 创建前先按「标题 + 分类 + 当前未发布状态」查重;发现疑似重复课程先列出课程 ID 和状态,等待用户选择复用或继续创建。确认无重复后执行 `course +create --title --category-id` → **必须提取 course-id,未提取禁止下一步**;模板 C1-C6 按 subs/template 映射表**立即 `+advanced` 固定写入高级设置**,并**展示「模板相关设置」表**,列序固定 **设置项|值|状态**(状态放值后面:✅ 已自动写入 / ⚠️ 后台待配 / 📝 小测验默认);C7 不写、展示空表。
|
|
72
|
+
**Gate 1→2:course-id 非空。**
|
|
124
73
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
#### Phase 1: 创建课程骨架
|
|
132
|
-
|
|
133
|
-
Step 1.1 权限检查(自动登录)
|
|
134
|
-
exec: soke-cli config show
|
|
135
|
-
→ 有 user_token → ✅ 跳过登录
|
|
136
|
-
→ 无 user_token → exec: soke-cli auth login(自动打开浏览器)
|
|
137
|
-
等待用户在浏览器中完成授权
|
|
138
|
-
再次 exec: soke-cli config show 确认 user_token 已写入
|
|
139
|
-
登录完成 → 继续下一步
|
|
140
|
-
|
|
141
|
-
Step 1.2 获取分类
|
|
142
|
-
→ read references/subs/category/SOP.md 执行
|
|
143
|
-
执行: soke course +list-categories 获取分类树
|
|
144
|
-
策略:
|
|
145
|
-
1. 用户已指定分类名 → 精确/模糊匹配到唯一结果 → 直接使用
|
|
146
|
-
2. 匹配到多个结果 → `ask_user_question` 弹窗让用户选一个,最后加一项"🆕 新建分类"
|
|
147
|
-
3. 用户未指定 → `ask_user_question` 弹窗列出所有一级分类,最后加一项"🆕 新建分类"
|
|
148
|
-
4. 用户说"随便" → 取第一个一级分类
|
|
149
|
-
→ 用户选"🆕 新建分类" → 告知:"CLI 暂不支持新建分类,请前往管理后台 → 课程管理 → 分类设置 → 新增分类" → 新建完成后说"分类建好了"再继续
|
|
150
|
-
提取: category-id → 存上下文
|
|
151
|
-
|
|
152
|
-
Step 1.3 创建课程
|
|
153
|
-
自身: course +create --title "xxx" --category-id "xxx"
|
|
154
|
-
提取: course-id → 存上下文
|
|
155
|
-
|
|
156
|
-
Step 1.4 选择模板(创建课程后立即触发)
|
|
157
|
-
→ read references/subs/template/SOP.md 执行
|
|
158
|
-
弹窗: `ask_user_question` 列出 7 个模板(含"7. 不选择模板")
|
|
159
|
-
用户选 1-6 → 输出该模板的配置清单(标注后台路径) → 确认后继续
|
|
160
|
-
用户选 7 → 不输出配置,直接进入路由弹窗
|
|
161
|
-
详见: references/subs/template/SOP.md
|
|
162
|
-
|
|
163
|
-
Gate 1→2: ✅ 有 course-id
|
|
164
|
-
|
|
165
|
-
Phase 1 完成后 → `ask_user_question` 弹窗: "下一步?" → ["添加课件"/"先做设置"/"直接发布"]
|
|
166
|
-
选"添加课件" → 进入 Phase 2
|
|
167
|
-
选"先做设置" → 跳到 Phase 3
|
|
168
|
-
选"直接发布" → 跳到 Phase 4(需通过 Gate Check)
|
|
169
|
-
|
|
170
|
-
#### Phase 2: 构建课件
|
|
171
|
-
|
|
172
|
-
Step 2.1 选择素材来源
|
|
173
|
-
→ `ask_user_question` 弹窗: "从哪儿添加课件素材?" → ["📁 本地上传"/"📚 素材库选择"]
|
|
174
|
-
选"本地上传" → 进入 Step 2.2
|
|
175
|
-
选"素材库选择" → 进入 Step 2.2b
|
|
74
|
+
### Phase 2 构建课件(先课件后测验,逐项不弹窗)
|
|
75
|
+
2.1 用户已给文件:按扩展名自动判型(视频/音频/文档/图片),逐个上传+建课件,**不弹窗**;图片走 subs/photo 链;素材库选择仅当用户主动说"从素材库选"时才用(`file list-files`);
|
|
76
|
+
2.2 课件完成后**弹窗一次**:[📝 加小测验 / 不加,去发布](模板小测验默认值作推荐项,可改);加 → **出题方式弹窗** [H1 选择试卷 / H2 导入试卷] → 文本收试卷关键词或试题表路径;read subs/exam 执行。小测验导入或挂载成功后,必须立即进入 Phase 4,弹出「指派课程 + 发布课程」条件弹窗。
|
|
77
|
+
2.3 排序默认不问,告知「随时说'调顺序'」;用户提才做(`+lesson-sort --sort-list`)。
|
|
78
|
+
**Gate 2→3:课件 ≥ 1。**
|
|
176
79
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
→ 用户提供本地文件路径
|
|
181
|
-
→ 调度 soke-material: file +upload(自动根据扩展名判断类型)
|
|
182
|
-
提取: media-id + 全字段信息 → 存 media_ids[]
|
|
183
|
-
→ 进入 Step 2.3
|
|
80
|
+
### Phase 3 课程设置(默认展示摘要)
|
|
81
|
+
课件完成后默认展示一次「基础+高级」设置摘要表(高级含 学习模式/倍速/拖动/人脸/提醒/评价/防挂机/评论/二维码,read [`subs/settings/SOP.md`](./references/subs/settings/SOP.md));用户回复修改项(CLI 项立即 `+update`/`+advanced`,后台项记录话术)或「继续」跳过;收费 read subs/charge;封面新图走 photo 链。
|
|
82
|
+
**Gate 3→4:无硬阻塞。**
|
|
184
83
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
exec: soke file list-files(分页拉取全量素材列表)
|
|
188
|
-
展示: 文件名 / 类型 / 大小 / 日期(分页或截取前 20 条)
|
|
189
|
-
告知用户: "输入关键词搜索素材(文件名模糊匹配),或输入序号选择"
|
|
190
|
-
用户输入关键词 → 在素材列表中模糊匹配 → 弹窗列匹配项
|
|
191
|
-
用户选序号 → 确认该素材 → 提取全字段信息 → 存 media_ids[]
|
|
192
|
-
无目标素材 → 弹窗: "素材库中没找到,要不要切换到本地上传?" → ["切本地上传"/"重新搜索"]
|
|
193
|
-
选"切本地上传" → 回到 Step 2.2
|
|
194
|
-
→ 进入 Step 2.3
|
|
84
|
+
### Phase 4 指派 + 发布(最后一步,条件弹窗)
|
|
85
|
+
弹窗1:**是否需要将课程指派给学员?**
|
|
195
86
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
存: lesson_ids[]
|
|
87
|
+
| 编号 | 选项 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| 1 | 指派(推荐) |
|
|
90
|
+
| 2 | 不指派 |
|
|
201
91
|
|
|
202
|
-
|
|
203
|
-
→ `ask_user_question` 弹窗: "还要加课件吗?" → ["继续加课件"/"不了,进入下一步"]
|
|
92
|
+
用户选择 1 后,再询问指派对象和学习类型;选择 2 时不出现学习类型问题。
|
|
204
93
|
|
|
205
|
-
|
|
206
|
-
→ `ask_user_question` 弹窗: "需要调整课件顺序吗?" → ["调整顺序"/"保持现状"]
|
|
207
|
-
选"调整" → 调度 soke-lesson 排序
|
|
94
|
+
指派完成并通过 Gate Check 后,再弹出:**是否确认发布这门课程?**
|
|
208
95
|
|
|
209
|
-
|
|
96
|
+
| 编号 | 选项 |
|
|
97
|
+
|---|---|
|
|
98
|
+
| 1 | 发布 |
|
|
99
|
+
| 2 | 不发布 |
|
|
210
100
|
|
|
211
|
-
|
|
101
|
+
仅用户明确选择 1 才执行发布,禁止代发布。
|
|
102
|
+
G1 → 弹窗2 两问:[指派对象:部门指派 / 人员指派(隐藏用户组/职位)| 学习类型:F1 必修 / F2 选修];选择部门指派后,先执行 `+list-departments` 递归拉取部门树,再使用原生选择弹窗罗列部门名称和成员数,用户选择部门后才执行 `assign +create`(--dept-ids/--dept-names);人员→关键词 `+list-users` 编号选;随后 `assign +create`(人员使用 --user-ids/--user-names,read [`subs/assign/SOP.md`](./references/subs/assign/SOP.md));**G2 → 不出现 F 学习类型问**;
|
|
103
|
+
随后 Gate Check(read [`subs/publish/SOP.md`](./references/subs/publish/SOP.md) + [`references/sop-publish-check.md`](./references/sop-publish-check.md),立即发布 6 项;关闭场景另加第 7 项)→ **仅 E1 明确才执行 `course +publish`,禁止代发布**。立即发布回查 status=1;定时发布回查 publish_time,未到时间时允许 status 仍为 0。
|
|
212
104
|
|
|
213
|
-
|
|
214
|
-
|
|
105
|
+
### Phase 5 运营维护
|
|
106
|
+
查询 read [`subs/query/SOP.md`](./references/subs/query/SOP.md)(进度/记录/人脸 + clock 作业查询);
|
|
107
|
+
关闭 = `course +update --action close`(⚠️ 先确认无学习地图关联);删除/复制/审批/批量 → 后台话术(read [`subs/copy/SOP.md`](./references/subs/copy/SOP.md))。
|
|
215
108
|
|
|
216
|
-
|
|
217
|
-
将当前所有设置项以表格形式展示(仅「设置项」+「当前值」两列)
|
|
218
|
-
告知用户: "想修改哪项?直接告诉我就行。"
|
|
219
|
-
用户指令处理:
|
|
220
|
-
- 标题/学分/描述/封面 → exec: course +update(✅ CLI 支持) → 刷新表格
|
|
221
|
-
- 学习模式/倍速/人脸/提醒/评价/拖动/评论/文档防挂机/交流群二维码 → exec: course +advanced(✅ CLI 支持;交流群二维码本地图片用 --image-file,命令内部只上传 OSS,不进入图片库) → 刷新表格
|
|
222
|
-
- 其他设置 → "已记录: {项} → {新值}(需在后台操作: {路径})" → 刷新表格
|
|
223
|
-
- "可以了"/"继续" → 退出 Phase 3
|
|
224
|
-
循环直到用户确认
|
|
109
|
+
## 批量生成课程流程(batch)
|
|
225
110
|
|
|
226
|
-
|
|
111
|
+
**B0 模式**:Step 1.0 选「批量生成课程」进入本流程。
|
|
112
|
+
**B1 分类+模板**:收集 B/C 编码;C 模板表字段固定为「模板名称|适用场景|高级设置|小测验」,批量模式下「小测验」统一显示「不加(批量模式固定)」;模板高级设置映射对每门课生效,不触发小测验流程。
|
|
113
|
+
**B2 批量地址**:文本收本地目录路径。
|
|
114
|
+
**B3 目录扫描(只访问二级路径)**:
|
|
115
|
+
- 一级是文件夹 → 课程名=文件夹名;课件=文件夹内(二级)支持的文件,更深层不访问;
|
|
116
|
+
- 一级是文件 → 课程名=文件名(去扩展名);课件=该文件;
|
|
117
|
+
- 支持扩展名:视频/音频/文档/图片;不支持文件跳过并备注。
|
|
118
|
+
**B4 计划确认(必须弹窗)**:先展示批量计划表(课程名|课件数|课件列表),再使用原生二选一弹窗询问「确认批量上传」或「返回修改计划」;只有用户选择「确认批量上传」后,才开始执行创建课程与上传课件。
|
|
119
|
+
**B5 逐课执行(固定无小测验)**:每门课 `+create` → 逐文件 `+upload` → `+lesson-create`(六字段)→ `+advanced` 模板映射;不创建、不导入、不询问小测验;每门课、每个文件分别记录状态并逐课输出进度。
|
|
120
|
+
- 单门课程创建、上传、建课件或设置失败:标记失败并停止该门,保留已产生的 ID;批量中的其他课程继续执行。
|
|
121
|
+
- 命令超时或响应丢失:先按标题、文件特征和已知 ID 回查,确认未成功前不得重试写操作。
|
|
122
|
+
**B6 指派+发布(最后)**:一次弹窗三问(G/F/E)对全部课程生效;指派选项顺序固定为「1. 指派(推荐)/2. 不指派」,发布选项顺序固定为「1. 发布/2. 不发布」;1. 指派 → 同一部门逐课指派;1. 发布 → 每门课执行二次状态查询和 Gate Check 后发布,禁止代发布。
|
|
123
|
+
**B7 汇总**:输出批量结果表(课程|course-id|课件数|指派|发布状态|失败动作|是否可重试);提供失败课程的可恢复位置。
|
|
227
124
|
|
|
228
|
-
|
|
125
|
+
## 加载白名单(结构性,禁止预读)
|
|
229
126
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
127
|
+
| Phase | 只读 |
|
|
128
|
+
|-------|------|
|
|
129
|
+
| 1 | subs/category, subs/template |
|
|
130
|
+
| 2 | subs/material, subs/lesson;选图片+subs/photo;选小测验+subs/exam |
|
|
131
|
+
| 3 | subs/settings(收费时+subs/charge) |
|
|
132
|
+
| 4 | subs/assign, subs/publish, sop-publish-check |
|
|
133
|
+
| 5 | subs/query(复制时+subs/copy) |
|
|
134
|
+
| 参数查询 | references/cli-facts.md |
|
|
235
135
|
|
|
236
|
-
|
|
136
|
+
## 写操作安全与恢复(硬规则)
|
|
237
137
|
|
|
238
|
-
|
|
138
|
+
- 创建、上传、建课件、指派、发布均须先查询当前状态;命令超时或响应丢失时禁止盲目重试,先按 course-id/media-id/lesson-id 回查,避免重复资源;
|
|
139
|
+
- 创建前按标题+分类查重;上传前按文件路径、文件名、大小和目标课程查重;建课件前按 media-id 查重;指派前后按目标 ID 回查;
|
|
140
|
+
- 发布确认绑定 course-id、当前计划和 Gate Check 时间;用户回复 E1 后,必须重新查询课程、课件、指派状态并再次 Gate Check,任何状态变化都使旧确认失效;
|
|
141
|
+
- 批量流程按课程和文件记录动作状态;单项失败可继续其他独立项,输出失败清单和可恢复位置;
|
|
239
142
|
|
|
240
|
-
|
|
143
|
+
## 字段白名单(硬规则)
|
|
241
144
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
145
|
+
- 视频/音频/文档:`filename/type/ext/filesize/object/length` 只能取自 `file +upload` 返回对象,禁止手填;
|
|
146
|
+
- 图片:`--media-id` 只能取自 `photo-gallery +create` 返回;其余字段只能取自同一图片返回对象或 `photo` SOP 明确的转换结果,禁止手填;
|
|
147
|
+
- 小测验:`--paper-id` 只能取自 `+create-paper` 返回;已有试卷优先使用平台返回的试卷 ID;
|
|
148
|
+
- 每 Step 必须提取关键 ID(category-id/course-id/media-id/lesson-id/paper-id)入上下文,未提取禁止进入下一步。
|
|
245
149
|
|
|
246
|
-
|
|
247
|
-
告知用户: "请输入要指派的部门名称(支持模糊搜索)"
|
|
248
|
-
用户输入关键词 → 在部门列表中模糊匹配(不区分大小写,支持部分匹配)
|
|
249
|
-
匹配结果:
|
|
250
|
-
- 唯一匹配 → 直接确认使用
|
|
251
|
-
- 多个匹配 → `ask_user_question` 弹窗列出匹配的部门让用户选
|
|
252
|
-
- 无匹配 → 建议换个关键词,或 `ask_user_question` 弹窗列所有部门
|
|
150
|
+
## 输出标准
|
|
253
151
|
|
|
254
|
-
|
|
255
|
-
→ `ask_user_question` 弹窗: "必修还是选修?" → ["必修"/"选修"]
|
|
152
|
+
**展示中文化(硬规则)**:面向用户的输出禁止英文枚举原样透传,必须映射:video→视频、audio→音频、document→文档、photo_gallery→图片、exam/test→小测验;status ok→成功、1→已发布、0→未发布、2→已关闭;transcode_status→转码中/转码成功/转码失败。UUID/命令名可保留原文。
|
|
256
153
|
|
|
257
|
-
|
|
258
|
-
|
|
154
|
+
每步:`✅ <做了什么>` `📋 <关键数据>` `⏭️ <下一步建议>`。
|
|
155
|
+
阶段状态报告(长报告落文件,聊天只放摘要):
|
|
259
156
|
|
|
260
|
-
#### Phase 6: 运营维护
|
|
261
|
-
|
|
262
|
-
→ read references/subs/query/SOP.md 执行(进度/记录/人脸)
|
|
263
|
-
→ read references/subs/publish/SOP.md 执行(关闭/删除;删除仅允许 status=0/2)
|
|
264
|
-
→ read references/subs/copy/SOP.md 执行(复制,⚠️)
|
|
265
|
-
|
|
266
|
-
### 3.3 课件子流程
|
|
267
|
-
|
|
268
|
-
前提: 上下文有 course-id
|
|
269
|
-
流程: = Phase 2(判断类型→上传→创建→循环→排序)
|
|
270
|
-
|
|
271
|
-
### 3.4 设置子流程
|
|
272
|
-
|
|
273
|
-
前提: 上下文有 course-id
|
|
274
|
-
流程: read references/subs/settings/SOP.md + references/subs/charge/SOP.md 执行
|
|
275
|
-
|
|
276
|
-
### 3.5 发布子流程
|
|
277
|
-
|
|
278
|
-
前提: course-id + status=0
|
|
279
|
-
流程: read references/subs/publish/SOP.md 执行 → Gate Check → 发布 → 询问指派
|
|
280
|
-
|
|
281
|
-
### 3.6 指派子流程
|
|
282
|
-
|
|
283
|
-
前提: course-id + status=1
|
|
284
|
-
流程: 调度 soke-assign → 拉全量部门 → 用户输入关键词搜索 → 确认 → 指派
|
|
285
|
-
|
|
286
|
-
### 3.7 查询子流程
|
|
287
|
-
|
|
288
|
-
前提: course-id
|
|
289
|
-
流程: read references/subs/query/SOP.md 执行 → 进度/记录/人脸
|
|
290
|
-
|
|
291
|
-
### 3.8 维护子流程
|
|
292
|
-
|
|
293
|
-
流程: read references/subs/publish/SOP.md(关闭/删除,删除前必须校验 status=0 未发布或 status=2 已关闭)/ references/subs/copy/SOP.md(复制)/ references/subs/category/SOP.md(分类)
|
|
294
|
-
|
|
295
|
-
### SOP 执行 5 步法
|
|
296
|
-
|
|
297
|
-
1. READ `references/subs/<name>/SOP.md` → 理解输入输出
|
|
298
|
-
2. BUILD 从上下文提取参数
|
|
299
|
-
3. EXEC 按 SOP 流程调用 CLI
|
|
300
|
-
4. PARSE 按 SOP 输出标准解析
|
|
301
|
-
5. STORE 关键值写入上下文
|
|
302
|
-
|
|
303
|
-
上下文变量: course_id / category_id / lesson_ids[] / media_ids[] / course_status / current_phase
|
|
304
|
-
|
|
305
|
-
## 四、输出标准
|
|
306
|
-
|
|
307
|
-
### 每步即时输出
|
|
308
|
-
```
|
|
309
|
-
✅ <做了什么>
|
|
310
|
-
📋 <关键数据>
|
|
311
|
-
⏭️ <下一步建议>
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### 阶段状态报告
|
|
315
157
|
```
|
|
316
158
|
📋 课程: <标题> (id: <uuid>)
|
|
317
|
-
Phase 1 ✅ 已创建
|
|
318
|
-
|
|
319
|
-
├─ ✅ 第1课: 环境搭建 (video, 转码完成)
|
|
320
|
-
├─ ✅ 第2课: Pandas (video, 转码中)
|
|
321
|
-
└─ ✅ 第3课: 数据清洗.pdf (document)
|
|
322
|
-
Phase 3 ⏸️ 设置
|
|
323
|
-
Phase 4 ⏸️ 发布(阻塞: 第2课转码中)
|
|
324
|
-
Phase 5 ⏸️ 指派
|
|
325
|
-
下一步: 等转码完成后发布
|
|
159
|
+
Phase 1 ✅ 已创建 | Phase 2 ✅ 课件 N 个 | Phase 3 ⏸️ | Phase 4 ⏸️ | Phase 5 ⏸️
|
|
160
|
+
下一步: <建议>
|
|
326
161
|
```
|
|
327
162
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
| # | 检查项 | 获取方式 | 严重度 | 不通过时 |
|
|
331
|
-
|---|--------|---------|--------|---------|
|
|
332
|
-
| 1 | 标题非空 | +get-course.title | 🔴阻塞 | 请设置标题 |
|
|
333
|
-
| 2 | 分类已选 | +get-course.category_id | 🔴阻塞 | 请选择分类 |
|
|
334
|
-
| 3 | 课件≥1 | +lesson-list count | 🔴阻塞 | 至少1个课件 |
|
|
335
|
-
| 4 | 无转码失败 | +lesson-list.transcode_status | 🔴阻塞 | 课件[X]转码失败 |
|
|
336
|
-
| 5 | 无转码中 | +lesson-list.transcode_status | 🟡警告 | 课件[X]转码中,确认发布? |
|
|
337
|
-
| 6 | 付费方式 | 需确认 | 🟡警告 | — |
|
|
338
|
-
|
|
339
|
-
### 最终交付
|
|
340
|
-
```
|
|
341
|
-
📦 课程已发布: <标题>
|
|
342
|
-
🔗 ID: <uuid> | 📊 课件: 5 个 | 👥 已指派: 研发部(32人)
|
|
343
|
-
⏭️ 查看进度: 说"看看学习进度"
|
|
344
|
-
```
|
|
163
|
+
最终交付:`📦 课程已发布: <标题> 🔗 ID | 📊 课件数 | 👥 指派 | ⏭️ "看看学习进度"`。
|
|
345
164
|
|
|
346
|
-
##
|
|
165
|
+
## 已知 CLI 缺失(统一话术:XXX 暂不支持 CLI,请后台操作)
|
|
347
166
|
|
|
348
|
-
|
|
349
|
-
1. 不编造参数 — UUID 来自真实返回
|
|
350
|
-
2. 不跳过 Gate — 发布前逐项校验
|
|
351
|
-
3. 不静默失败 — 失败: 查排错文档 → 中文告知 → 修复建议 → 保存进度 → 提供选项
|
|
352
|
-
4. 类型必须匹配 — 课件与素材类型一致
|
|
353
|
-
5. 一个 course-id 贯穿全部
|
|
167
|
+
文章/外链/SCORM/HTML 课件;新建分类;point/lector/tags;证书/签名;价格/试看;审批/批量发布;删除课程;AI做课(后台→课程管理→AI做课)。
|
|
354
168
|
|
|
355
|
-
|
|
169
|
+
## 中断恢复
|
|
356
170
|
|
|
357
|
-
|
|
358
|
-
- 上传文件到素材库 → soke-material
|
|
359
|
-
- 基于素材创建课件 → soke-lesson
|
|
360
|
-
- 将课程指派给学员 → soke-assign
|
|
171
|
+
用户"继续/接着做":有 course-id → `+get-course` + `+lesson-list`,再检查模板设置、指派、Gate 和发布状态 → 输出动作级状态报告 → 只执行缺失动作;无 → `+list-courses` 弹窗选择。对上次超时或响应丢失的动作必须先回查,确认未成功后才允许重试。
|
|
361
172
|
|
|
362
|
-
|
|
363
|
-
- 管理课程分类 → references/subs/category/SOP.md
|
|
364
|
-
- 配置课程设置 → references/subs/settings/SOP.md
|
|
365
|
-
- 设置收费 → references/subs/charge/SOP.md
|
|
366
|
-
- 发布校验和发布 → references/subs/publish/SOP.md
|
|
367
|
-
- 复制课程 → references/subs/copy/SOP.md
|
|
368
|
-
- 查询学习数据 → references/subs/query/SOP.md
|
|
369
|
-
- AI生成课程 → references/subs/ai/SOP.md
|
|
370
|
-
- 课程模板(7套预置配置) → references/subs/template/SOP.md
|
|
173
|
+
## 附加资源
|
|
371
174
|
|
|
372
|
-
|
|
175
|
+
- 详细执行手册:[`references/sop-full-workflow.md`](./references/sop-full-workflow.md)(每步命令与提取项);
|
|
176
|
+
- 对话示例:[`references/examples.md`](./references/examples.md);
|
|
177
|
+
- 安装指南:[`soke-cli-install-guide.md`](./soke-cli-install-guide.md)(仅检测不通过时读)。
|
|
373
178
|
|
|
374
|
-
|
|
179
|
+
## 变更日志
|
|
375
180
|
|
|
376
|
-
|
|
377
|
-
|------|------|
|
|
378
|
-
| 课件类型 | image/article/link/quiz/homework |
|
|
379
|
-
| 分类 | 新增分类 |
|
|
380
|
-
| 课程设置 | point/lector_id/tags/简介插图 |
|
|
381
|
-
| 高级设置 | 证书/签名 |
|
|
382
|
-
| 收费 | 价格/试看 |
|
|
383
|
-
| 发布 | 审批/批量 |
|
|
384
|
-
| 维护 | 复制 |
|
|
385
|
-
|
|
386
|
-
### 中断恢复
|
|
387
|
-
用户"继续"/"接着做": 检查 course-id → 有:查状态+课件→报告→继续 | 无:列课程→选→恢复
|
|
388
|
-
|
|
389
|
-
## 六、交付前自查
|
|
390
|
-
|
|
391
|
-
- [ ] 每步有明确调度目标
|
|
392
|
-
- [ ] 关键返回值已存入上下文
|
|
393
|
-
- [ ] 每步完成有下一步建议
|
|
394
|
-
- [ ] 发布前过完整 Gate Check
|
|
395
|
-
- [ ] CLI 不支持功能已告知替代路径
|
|
396
|
-
- [ ] 失败有修复建议
|
|
397
|
-
- [ ] 所有固定选项的决策点均使用 `ask_user_question` 弹窗(禁止纯文本罗列让用户打字)
|
|
398
|
-
- [ ] 分类选择弹窗最后一项始终为"🆕 新建分类"
|
|
399
|
-
- [ ] 状态报告完整
|
|
181
|
+
完整变更记录见同目录 [`CHANGELOG.md`](./CHANGELOG.md)。执行流程只以本文件当前规则为准。
|
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
display_name: 课程发布主管
|
|
2
|
-
short_description:
|
|
2
|
+
short_description: 端到端管理授客AI线上课:创建、五类课件(视频/音频/文档/图片/小测验)、设置、发布校验、指派、进度查询。自包含单技能,仅需 soke-cli。
|
|
3
3
|
default_prompt: 帮我创建一门线上课
|
|
4
|
-
dependencies:
|
|
5
|
-
- soke-material
|
|
6
|
-
- soke-lesson
|
|
7
|
-
- soke-assign
|