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