@sokeai/cli 1.0.74 → 1.0.76

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 (34) hide show
  1. package/package.json +1 -1
  2. package/scripts/build-binaries.sh +12 -0
  3. package/scripts/release.sh +50 -1
  4. package/skills/SKILL.md +1 -1
  5. package/skills/ai-coach-director/SKILL.md +379 -45
  6. package/skills/ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +8 -8
  7. package/skills/ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +70 -43
  8. package/skills/ai-coach-director/platform/adapters/README.md +68 -0
  9. package/skills/ai-coach-director/platform/adapters/qclaw.md +67 -0
  10. package/skills/ai-coach-director/platform/adapters/workbuddy.md +45 -0
  11. package/skills/ai-coach-director/platform/adapters/wukong.md +70 -0
  12. package/skills/ai-coach-director/platform/adapters/zework.md +89 -0
  13. package/skills/ai-coach-director/platform/api-fallback.md +262 -0
  14. package/skills/ai-coach-director/platform/interaction.md +13 -10
  15. package/skills/ai-coach-director/platform/publish-gate.md +44 -0
  16. package/skills/ai-coach-director/platform/resource-finalizer.md +128 -0
  17. package/skills/ai-coach-director/platform/sync-engine.md +217 -90
  18. package/skills/ai-coach-director/references/env-check.md +46 -11
  19. package/skills/ai-coach-director/references/platform-api-pitfalls.md +15 -1
  20. package/skills/ai-coach-director/references/role-resource-matching.md +53 -16
  21. package/skills/ai-coach-director/references/verified-cli-cheatsheet.md +26 -12
  22. package/skills/soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md +45 -7
  23. package/skills/soke-course/README.md +6 -0
  24. package/skills/soke-course/SKILL.md +9 -7
  25. package/skills/soke-course/references/intent-cases.md +6 -6
  26. package/skills/soke-course/references/sop-full-workflow.md +7 -4
  27. package/skills/soke-course/references/sop-publish-check.md +3 -1
  28. package/skills/soke-course/references/subs/publish/SOP.md +13 -1
  29. package/skills/soke-course/references/subs/settings/SOP.md +86 -25
  30. package/skills/soke-course/soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md +44 -6
  31. package/skills/soke-exam-question-pool/SKILL.md +80 -112
  32. package/skills/soke-learning-map/soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md +45 -7
  33. package/skills/soke-training-demand/SKILL.md +149 -42
  34. package/skills/ai-coach-director/.learnings/LEARNINGS.md +0 -71
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: soke-course-settings
3
3
  version: 1.0.0
4
- description: 课程设置 — 基础信息编辑及高级设置项说明,高级设置需后台操作
4
+ description: 课程设置 — 基础信息编辑及高级设置项说明,支持通过 CLI 更新课程高级设置
5
5
  tags: [soke, course, settings, configuration, advanced]
6
6
  ---
7
7
 
@@ -9,7 +9,7 @@ tags: [soke, course, settings, configuration, advanced]
9
9
 
10
10
  ## 触发描述
11
11
 
12
- 课程创建后需要对课程标题、描述等基础信息进行修改,或需要了解高级设置项(学习模式、人脸识别、证书等)的配置方式时触发本技能。
12
+ 课程创建后需要对课程标题、描述等基础信息进行修改,或需要更新高级设置项(学习模式、人脸识别、提醒、倍速等)时触发本技能。
13
13
 
14
14
  ## CLI 支持的操作
15
15
 
@@ -19,33 +19,88 @@ tags: [soke, course, settings, configuration, advanced]
19
19
  soke course +update \
20
20
  --course-id <courseId> \
21
21
  --title "<新标题>" \
22
- --description "<新描述>"
22
+ --credit 10 \
23
+ --description "<新描述>" \
24
+ --image "<图片库 photoUri>"
23
25
  ```
24
26
 
25
27
  | 参数 | 必填 | 说明 |
26
28
  |------|------|------|
27
29
  | `--course-id` | 是 | 课程 ID |
28
30
  | `--title` | 否 | 课程标题 |
31
+ | `--credit` | 否 | 学分 |
29
32
  | `--description` | 否 | 课程描述/简介 |
33
+ | `--image` | 否 | 课程封面图片地址,使用图片库列表接口返回的 `photoUri` |
34
+ | `--image-x` | 否 | 封面裁剪 x 坐标,默认 0 |
35
+ | `--image-y` | 否 | 封面裁剪 y 坐标,默认 0 |
36
+ | `--image-w` | 否 | 封面裁剪宽度,默认 0 |
37
+ | `--image-h` | 否 | 封面裁剪高度,默认 0 |
30
38
 
31
- > `title` `description` 至少传一个,可同时更新。
39
+ > 至少传一个可更新字段,可同时更新。`--description ""` 会清空课程描述。
32
40
 
33
- ## ⚠️ CLI 不支持的高级设置
41
+ ### 高级设置更新 `course +advanced`
34
42
 
35
- 以下 9 项高级设置均需通过管理后台操作,CLI 暂不支持:
43
+ ```bash
44
+ soke course +advanced \
45
+ --course-id <courseId> \
46
+ --study-type 2 \
47
+ --is-accelerate 1 \
48
+ --is-drag 0 \
49
+ --evaluate-required 1
50
+ ```
51
+
52
+ | 参数 | 默认 | 说明 |
53
+ |------|------|------|
54
+ | `--course-id` | 必填 | 课程 ID |
55
+ | `--open-workrecord` | 0 | 待办推送,1 开启,0 不开启 |
56
+ | `--allow-after-expiration` | 1 | 截止后继续学习,1 允许,0 不允许 |
57
+ | `--open-face-recognition` | 0 | 课程前人脸识别,1 开启,0 不开启 |
58
+ | `--is-first-face` | 0 | 0 不识别,1 首次使用,2 每次进入 |
59
+ | `--learning-face-recognition` | 0 | 视频学习中人脸识别,1 开启,0 不开启 |
60
+ | `--face-recognition-times` | 1 | 视频学习中人脸识别次数 |
61
+ | `--study-type` | 1 | 学习模式,1 自由式,2 解锁式 |
62
+ | `--is-remind` | 0 | 未学提醒,1 开启,0 不开启 |
63
+ | `--remind-days` | 1 | 未学提醒推送周期,单位天 |
64
+ | `--remind-time` | 空 | 推送时间,格式 HH:MM:SS |
65
+ | `--remind-content` | 管理员提醒文案 | 未学提醒推送内容 |
66
+ | `--is-accelerate` | 1 | 视频或音频倍速,1 开启,0 不开启 |
67
+ | `--is-drag` | 0 | 视频是否可拖动,1 允许,0 不允许 |
68
+ | `--drag-type` | 1 | 1 仅首次播放不允许拖动,2 每次播放均不允许拖动 |
69
+ | `--evaluate-required` | 0 | 完成学习后打星评价,1 开启,0 不开启 |
70
+ | `--image-file` | 空 | 本地交流群二维码图片路径,命令内部上传到 OSS 并写入 `imageOssUrl`,不进入图片库;支持 jpg/jpeg/png |
71
+ | `--image-oss-url` | 空 | 已上传到 OSS/CDN 的交流群二维码完整访问 URL;与 `--image-file` 二选一 |
72
+ | `--is-hang` | 0 | 文档防挂机,1 开启,0 不开启 |
73
+ | `--hang-time` | 0 | 文档防挂机时间,单位分钟,最多 60 |
74
+ | `--comment-switch` | 1 | 课程评论,1 开启,0 不开启 |
75
+
76
+ 该命令请求 `PUT /skills/course/advanceSetting/{id}`,请求体固定带 `action=advanced`。
77
+
78
+ **交流群二维码 `imageOssUrl` 取值规则:**
79
+
80
+ 1. 如果用户提供的是本地二维码图片,直接使用 `--image-file`。命令会在内部调用 OSS 上传能力,使用 `Module: "image"` 上传,并把签名里的 `editorHost`(优先)或 `cdnhost` 与 OSS object 拼成完整 URL 写入 `imageOssUrl`。该图片不会进入图片库。
81
+
82
+ ```bash
83
+ soke-cli course +advanced \
84
+ --course-id <courseId> \
85
+ --image-file "./qrcode.png"
86
+ ```
36
87
 
37
- | 序号 | 设置项 | 说明 | 后台操作路径 |
38
- |------|--------|------|-------------|
39
- | 1 | **学习模式** `study_type` | 必修/选修模式、闯关模式(顺序解锁)、自由模式 | 后台 → 课程管理 → 课程列表 → 编辑 → 学习设置 |
40
- | 2 | **倍速播放** `speed` | 允许学员使用倍速播放(0.5x - 2.0x) | 后台 → 课程管理 → 课程列表 → 编辑 → 学习设置 → 播放控制 |
41
- | 3 | **人脸识别** `face_recognition` | 开启后学员学习时需人脸验证,防挂机/替学 | 后台 → 课程管理 → 课程列表 → 编辑 → 学习设置 → 人脸识别 |
42
- | 4 | **学习提醒** `reminders` | 配置定时提醒推送(未完成学员、推送时间、频次) | 后台 → 课程管理 → 课程列表 → 编辑 → 学习设置 → 提醒设置 |
43
- | 5 | **课程评价** `rating` | 开启学员评分/评论功能,可设为审核后展示 | 后台 → 课程管理 → 课程列表 → 编辑 → 评价设置 |
44
- | 6 | **证书设置** `certificate` | 配置结业证书模板(背景图、字段、盖章)和通过条件 | 后台 → 课程管理 → 课程列表 → 编辑 → 证书设置 |
45
- | 7 | **证书签名** `signature` | 配置证书上的签名图片(讲师/负责人手写签名) | 后台 → 课程管理 → 课程列表 → 编辑 → 证书设置 → 签名管理 |
46
- | 8 | **钉钉二维码** `dingtalk_qrcode` | 配置钉钉群二维码,学员学习页展示入群入口 | 后台 → 课程管理 → 课程列表 → 编辑 → 学习设置 → 钉钉二维码 |
88
+ 2. 如果用户已经有 OSS/CDN 完整访问 URL,直接传 `--image-oss-url`:
47
89
 
48
- > 操作路径示例以标准后台结构为准,实际路径可能因后台版本略有差异。
90
+ ```bash
91
+ soke-cli course +advanced \
92
+ --course-id <courseId> \
93
+ --image-oss-url "$IMAGE_URL"
94
+ ```
95
+
96
+ 3. `--image-file` 和 `--image-oss-url` 只能传一个。不要把图片 UUID、素材 UUID 或纯 `data.object` 当作 `imageOssUrl`;该字段需要可访问的完整图片 URL。
97
+
98
+ ## ⚠️ CLI 暂不支持的设置
99
+
100
+ | 设置项 | 说明 | 后台操作路径 |
101
+ |--------|------|-------------|
102
+ | **证书设置** `certificate` | 配置结业证书模板(背景图、字段、盖章)和通过条件 | 后台 → 课程管理 → 课程列表 → 编辑 → 证书设置 |
103
+ | **证书签名** `signature` | 配置证书上的签名图片(讲师/负责人手写签名) | 后台 → 课程管理 → 课程列表 → 编辑 → 证书设置 → 签名管理 |
49
104
 
50
105
  ## 输出标准
51
106
 
@@ -57,18 +112,24 @@ soke course +update \
57
112
  - 描述: {newDescription 摘要}
58
113
  ```
59
114
 
60
- 当用户询问高级设置时,列出上述 9 项并以表格形式呈现,引导至对应后台路径。
115
+ 高级设置更新成功后:
116
+
117
+ ```
118
+ ✅ 课程高级设置更新成功
119
+ - 课程: {courseId}
120
+ - 结果: 1
121
+ ```
61
122
 
62
123
  ## 注意事项
63
124
 
64
- 1. `course +update` 仅支持 `title` 和 `description` 两个字段的修改
65
- 2. 封面图修改属于素材上传范围,不在本技能覆盖内
66
- 3. 分类修改需通过专门的分类设置功能或后台操作
67
- 4. 高级设置项之间可能存在依赖关系(如证书依赖签名设置),建议按表格顺序逐项配置
125
+ 1. `course +update` 支持标题、学分、描述、封面图和分类 ID 修改
126
+ 2. 封面图地址来自图片库列表接口返回的 `photoUri`
127
+ 3. 分类修改可通过 `--category-id` 更新
128
+ 4. 高级设置项之间可能存在依赖关系(如开启视频学习中人脸识别后再设置识别次数),建议按表格顺序逐项配置
68
129
  5. 钉钉二维码设置与课程复制时的行为有关联(复制时不携带,见 `soke-course-copy`)
69
130
 
70
131
  ## 检查清单
71
132
 
72
- - [ ] CLI 操作:title/description 已准备完毕,courseId 确认存在
73
- - [ ] 高级设置需求已识别,已提供对应后台路径
74
- - [ ] 所有 9 项高级设置均已告知用户为后台操作
133
+ - [ ] CLI 操作:title/description 或高级设置参数已准备完毕,courseId 确认存在
134
+ - [ ] 高级设置需求已识别,优先使用 `course +advanced`
135
+ - [ ] 证书/签名等未支持设置已提供对应后台路径
@@ -121,7 +121,7 @@ soke-cli --version
121
121
  # 预期输出: soke-cli version x.x.x
122
122
  ```
123
123
 
124
- 如果显示版本号,说明安装成功 ✅。
124
+ 如果显示版本号,说明基础安装成功。完成后续登录授权后,请继续运行 `soke-cli doctor` 做完整健康检查,确保配置、登录态、日志目录和网络连通性都可用。
125
125
 
126
126
  **如果 `which soke-cli` 无输出**,说明 PATH 未生效:
127
127
  - macOS/Linux: 确认 `echo $PATH | tr ':' '\n' | grep npm-global` 有输出,若没有请重新执行第二步
@@ -212,9 +212,47 @@ soke-cli auth logout
212
212
 
213
213
  ## 验证安装
214
214
 
215
- 完成登录授权后,让我们验证一切是否正常工作。
215
+ 完成登录授权后,让我们验证一切是否正常工作。推荐先运行 `doctor`,它会一次性检查 CLI 版本、配置文件、登录态、日志目录和网络连通性。
216
216
 
217
- ### 1. 查看配置信息
217
+ ### 1. 运行健康检查
218
+
219
+ ```bash
220
+ soke-cli doctor
221
+ ```
222
+
223
+ 正常情况下会看到类似输出:
224
+ ```text
225
+ pass cli_version x.x.x
226
+ pass config /Users/你的用户名/.soke-cli/config.json
227
+ pass auth login data looks valid locally
228
+ pass logs /Users/你的用户名/.soke-cli/logs
229
+ pass network https://opendev.soke.cn reachable (123ms)
230
+ ```
231
+
232
+ 如果任意检查项显示 `fail`,请根据同一行或下一行的 `hint` 提示处理。常见情况:
233
+ - `config` 或 `auth` 失败:重新执行 `soke-cli auth login`
234
+ - `logs` 失败:检查 `~/.soke-cli` 或 `SOKE_CLI_LOG_DIR` 的写入权限
235
+ - `network` 失败:检查网络连接或代理设置
236
+
237
+ 需要机器可读输出时,可以使用 JSON 格式:
238
+
239
+ ```bash
240
+ soke-cli doctor --format json
241
+ ```
242
+
243
+ 如果当前环境不能访问外网,只想检查本地安装、配置、登录态和日志目录,可以跳过网络检查:
244
+
245
+ ```bash
246
+ soke-cli doctor --offline
247
+ ```
248
+
249
+ 网络较慢时可以调大超时时间:
250
+
251
+ ```bash
252
+ soke-cli doctor --timeout 30
253
+ ```
254
+
255
+ ### 2. 查看配置信息
218
256
 
219
257
  ```bash
220
258
  soke-cli config show
@@ -232,9 +270,9 @@ soke-cli config show
232
270
  token过期时间: 2026-10-17 12:00:00
233
271
  ```
234
272
 
235
- > 💡 **说明**: `app_key` 和 `app_secret` 在当前版本中不需要手动配置,授权流程会自动处理所有必要的认证信息。
273
+ > 💡 **说明**: `app_key` 和 `app_secret` 在当前版本中不需要手动配置,授权流程会自动处理所有必要的认证信息。如果 `doctor` 已全部通过,这一步主要用于人工确认当前登录的企业和用户信息。
236
274
 
237
- ### 2. 测试 API 调用
275
+ ### 3. 测试 API 调用
238
276
 
239
277
  尝试调用一个简单的 API:
240
278
 
@@ -244,7 +282,7 @@ soke-cli api GET /users/me
244
282
 
245
283
  如果返回你的用户信息(JSON 格式),说明一切配置正确!
246
284
 
247
- ### 3. 使用业务命令
285
+ ### 4. 使用业务命令
248
286
 
249
287
  尝试使用一个业务快捷命令,例如查看考试列表:
250
288
 
@@ -1,155 +1,123 @@
1
1
  ---
2
2
  name: soke-exam-question-pool
3
- summary: 授客可练习题库(题库列表、题库详情、题目列表、题库练习交卷),通过 soke-cli exam-question-pool 命令操作
4
- version: 1.1.0
5
- description: "授客可练习题库:按 examQuestionPool 接口链路先查询题库列表,再用题库 uuid 查询详情、题目列表,可进行题库练习交卷。当用户需要查看可练习题库、题库详情、题目内容、答案和解析,或提交题库练习交卷时使用。 | Soke question pool: use the examQuestionPool API flow to list pools, get pool detail, list questions, and finish a practice session."
3
+ summary: 授客可练习题库交互式练习系统
4
+ version: 2.0.0
5
+ description: 授客可练习题库交互式练习
6
6
  metadata:
7
7
  requires:
8
- bins: ["soke-cli"]
9
- cliHelp: "soke-cli exam-question-pool --help"
8
+ bins: [soke-cli]
9
+ cliHelp: soke-cli exam-question-pool --help
10
10
  ---
11
11
 
12
- # 可练习题库 (examQuestionPool)
12
+ # 可练习题库交互式练习系统
13
13
 
14
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md),其中包含认证、配置、权限处理**
14
+ 核心链路全量分页选库随机逐题实时反馈
15
15
 
16
- ## 核心链路
16
+ ## 交互流程总览
17
17
 
18
- 这组命令对接 `/skills/examQuestionPool/...` 接口。推荐调用顺序:
18
+ 用户触发练习Step1全量分页拉取全部题库展示供选择Step2用户选择一个题库Step3拉取该题库全部题目加载答题状态Step4从未答题目中随机抽一道呈现判分Step5询问下一题结束重开循环Step4
19
19
 
20
- 1. `+list` 获取题库列表,从默认输出的 `uuid` 取题库 UUID。
21
- 2. `+get --pool-id <uuid>` 查询详情,确认题库列表的 `uuid` 与传入 `pool-id` 一致。
22
- 3. `+questions --pool-id <uuid>` 使用同一个 `pool-id` 查询题目。
23
- 4. `+finish --pool-id <uuid> --answers '<答案JSON>'` 进行题库练习交卷。
20
+ ## Step1全量分页拉取题库列表
24
21
 
25
- `--page`、`--page-size` 用于第一步题库列表分页查询。
22
+ soke-cli exam-question-pool +list --page 1 --page-size 100 --status 1 --format json
26
23
 
27
- ## Shortcuts 总览
24
+ 循环拉取检查data.hasMore若为1则继续翻页直到hasMore为0合并所有页data.list按uuid去重
25
+ 重要API分页存在跨页重叠bug相邻两页可能返回相同uuid的题库必须按uuid去重不能简单拼接
26
+ 优先使用page-size100一次拉全减少分页次数和重叠风险
28
27
 
29
- | Shortcut | 说明 |
30
- |----------|------|
31
- | `+list` | 获取可练习题库列表,返回后续 `pool-id` 所需的题库 `uuid` |
32
- | `+get` | 根据题库 `pool-id` 获取可练习题库详情 |
33
- | `+questions` | 根据 `pool-id`(题库id),即题库列表的 `uuid`,获取题库题目 |
34
- | `+finish` | 根据 `pool-id` 进行题库练习交卷 |
28
+ ### 展示规则
35
29
 
36
- ## +list
30
+ 每个题库一行选项只显示序号和题库名称格式为title
31
+ 不要显示题目数question_count和状态pass_status
32
+ 题库总数小于等于20一次性展示全部
33
+ 题库总数大于20分页展示每页最多20个末尾追加下一页翻到底后追加上一页
37
34
 
38
- 获取可练习题库列表。
35
+ ## Step2用户选择题库
39
36
 
40
- ```bash
41
- soke-cli exam-question-pool +list \
42
- --page 1 \
43
- --page-size 10
44
- ```
37
+ 用户输入编号取pool_id为选中项的uuid
38
+ 若用户说随机选一个从未完成题库中随机选全部完成则全量随机
45
39
 
46
- | 参数 | 必需 | 说明 |
47
- |------|------|------|
48
- | `--page` | 否 | 页码,从 1 开始,默认 1 |
49
- | `--page-size` | 否 | 每页条数,默认 10 |
40
+ ## Step3拉取题目和初始化状态
50
41
 
51
- 默认输出为横向单行文本,每条题库数据显示:
42
+ soke-cli exam-question-pool +questions --pool-id UUID --format json
52
43
 
53
- | 字段 | 说明 |
54
- |------|------|
55
- | `uuid` | 题库 UUID,后续作为 `--pool-id` |
56
- | `title` | 题库标题 |
57
- | `description` | 题库描述,默认会清理简单 HTML 标签和换行 |
58
- | `题目数量` | 来自 `question_count` |
59
- | `创建时间` | 来自 `create_exercise_time` |
44
+ 注意pool-id的值不要加引号否则会报参数格式错误
60
45
 
61
- ## +get
46
+ 提取data.content中所有题目uuid type title choices answer show_answer analysis
62
47
 
63
- 根据题库 UUID 获取可练习题库详情。
48
+ ### 答题状态文件
64
49
 
65
- ```bash
66
- soke-cli exam-question-pool +get \
67
- --pool-id "<上一步题库列表的 uuid,即题库id>"
68
- ```
50
+ 路径C:\Users\soke\.qclaw\workspace\.exam-state\{pool-uuid}.json
69
51
 
70
- | 参数 | 必需 | 说明 |
71
- |------|------|------|
72
- | `--pool-id` | 是 | 题库 ID,必须来自 `+list` 默认输出中的 `uuid` |
52
+ 格式pool_id uuid pool_title 题库名 total 5 correct 0 answered 空数组
73
53
 
74
- 默认输出为横向单行文本,题库详情数据:
54
+ 文件不存在或pool_id不匹配新建answered为空数组
55
+ 答完一题追加uuid到answered正确则correct加1
56
+ 结束答题保留state
57
+ 重新开始清空answered为空数组correct为0
58
+ answered长度大于等于total自动提示本轮全部答完
59
+ 已展示但未作答的题目不算已答用户在题目展示后说退出结束退出答题等该题不计入answered不计入correct不出现在本轮总结表格中只有用户实际选择了选项或输入了答案并提交才算作答
75
60
 
76
- | 字段 | 说明 |
77
- |------|------|
78
- | `uuid` | 题库 UUID,应与请求 `--pool-id` 一致 |
79
- | `title` | 题库标题 |
80
- | `description` | 题库描述,默认会清理简单 HTML 标签和换行 |
81
- | `题目数量` | 来自 `question_count` |
82
- | `创建时间` | 来自 `create_exercise_time` |
83
- | `总题数` | 来自 `data.all_count` |
61
+ ## Step4随机出题和呈现
84
62
 
63
+ ### 随机逻辑
85
64
 
86
- ## +questions
65
+ 从data.content排除answered中已有uuid
66
+ 剩余题目随机选一道
67
+ 每次进入题库出题顺序随机不固定
87
68
 
88
- 根据同一个题库 UUID 获取题目明细。
69
+ ### 用户输出红线
89
70
 
90
- ```bash
91
- soke-cli exam-question-pool +questions \
92
- --pool-id "<题库列表的 uuid,即题库id>"
93
- ```
71
+ 严禁在面向用户的任何输出中暴露内部标识字段包括但不限于uuid pool_id source_id category_id target_id dept_user_id company_id answer_type display
72
+ 这些字段仅用于内部逻辑和状态文件不要出现在题目展示判分反馈进度统计小结表格或任何用户可见的文本中
73
+ 如果需要区分题目在内部用uuid但在用户界面只用序号或题目内容来标识
74
+ 用户看到的内容应该像正常的练习题一样干净简洁没有任何技术性ID字段
94
75
 
95
- | 参数 | 必需 | 说明 |
96
- |------|------|------|
97
- | `--pool-id` | 是 | 题库 ID,复用列表或详情中的同一个 UUID |
76
+ ### 按题型呈现
98
77
 
99
- 默认输出为 JSON,是题目数据本身。
78
+ A填空题type fill文本输入禁止变选择题
79
+ 纯文本呈现题目提示用户输入答案
80
+ 题目展示标题填空题第X题共N题题目将title中的span标签替换为括号加下划线提示多个空请用英文逗号分隔如答案1答案2答案3
81
+ 重要提示示例绝不能使用当前题目的正确答案只能用答案1答案2答案3等占位符
82
+ 填空判分show_answer为二维数组用户逗号分隔答案按序对应每个空匹配子数组中任一值即算对忽略首尾空格大小写不敏感全对正确部分对逐空标注全错错误
100
83
 
101
- 关键字段:
84
+ B判断题type determine
85
+ 标题判断题第X题共N题选项A正确B错误判分show_answer A正确B错误
102
86
 
103
- | 字段 | 说明 |
104
- |------|------|
105
- | `uuid` | 题目 UUID |
106
- | `title` | 题目标题 |
107
- | `type` | 题目类型 |
108
- | `choices` | 选项列表 |
109
- | `show_answer` | 展示答案 |
110
- | `analysis` | 题目解析 |
87
+ C单选题type single_choice
88
+ 标题单选题第X题共N题选项A choices0 title B choices1 title等判分show_answer如A用户选了选项A即对
111
89
 
112
- ## 推荐操作顺序
90
+ D多选题type choice
91
+ 标题多选题第X题共N题选项同单选判分用户所选字母集合与show_answer字母集合完全一致顺序无关
113
92
 
114
- ```bash
115
- # 1. 查询题库列表,取输出中的 uuid
116
- soke-cli exam-question-pool +list --page 1 --page-size 10
93
+ E不定项选择type uncertain_choice
94
+ 同多选题标题标注不定项选择
117
95
 
118
- # 2. 查询题库详情
119
- soke-cli exam-question-pool +get --pool-id "<pool_uuid>"
96
+ ## Step5判分反馈和循环
120
97
 
121
- # 3. 查询同一题库的题目列表
122
- soke-cli exam-question-pool +questions --pool-id "<pool_uuid>"
98
+ 答完后纯文本反馈正确或错误你的答案正确答案解析如有进度已答n题共total题正确m题pct百分比
99
+ 然后询问下一步下一题结束答题重新开始本轮
100
+ 下一题保存状态回到Step4
101
+ 结束答题保存状态显示本轮小结退出当前题目未作答则不计入总结
102
+ 重新开始本轮清空answered和correct回到Step4
103
+ 本轮答完时仅提供重新开始和结束
123
104
 
124
- # 4. 题库练习交卷
125
- soke-cli exam-question-pool +finish \
126
- --pool-id "<pool_uuid>" \
127
- --answers '{"<question_uuid>":[0,1]}'
128
- ```
105
+ ### 本轮小结规则
129
106
 
130
- ## +finish
107
+ 总结表格只包含实际作答的题目即uuid已写入answered的题目
108
+ 已展示但用户说退出未作答的题目不出现在总结中下次进入该题库时仍会出现
109
+ 进度统计以状态文件中的answered和correct为准不要自行脑补
131
110
 
132
- 提交可练习题库练习交卷。
111
+ ## Shortcuts参考
133
112
 
134
- ```bash
135
- soke-cli exam-question-pool +finish \
136
- --pool-id "70DE9AFB-1C18-4F5C-B158-E25182ECBE1A" \
137
- --answers '{"A93647C7-7ECF-44D6-931D-DE84344DA580":["1","1","1"],"0E7E8283-EB5F-489C-9778-34A9B2F13BA7":[0]}'
138
- ```
113
+ list获取可练习题库列表
114
+ get获取题库详情
115
+ questions获取题库全部题目
139
116
 
140
- | 参数 | 必需 | 说明 |
141
- |------|------|------|
142
- | `--pool-id` | 是 | 题库 ID,复用列表或详情中的同一个 UUID |
143
- | `--answers` | 是 | 答案 JSON 原文,key 为题目 ID,数组为答题选项 |
117
+ ## 重要注意
144
118
 
145
- `--answers` 会加密之后进行传输。
146
-
147
- 返回结果默认展示:
148
-
149
- | 字段 | 说明 |
150
- |------|------|
151
- | `rightCount` | 答对题目数 |
152
- | `allCount` | 全部题目数量 |
153
- | `rate` | 题库练习进度 |
154
-
155
- 默认输出示例:`题库id:70DE9AFB-1C18-4F5C-B158-E25182ECBE1A,答对题目数:2,全部题目数量:0,题库练习进度:0%`。使用 `--format json` 时输出接口原始字段。
119
+ data.content数量可能与all_count不一致过滤题以实际返回为准
120
+ 填空show_answer是string二维数组每空可能有多个可接受值
121
+ 状态文件路径C:\Users\soke\.qclaw\workspace\.exam-state\uuid.json先确保目录存在
122
+ 每次出题前根据当前状态重新计算未答题池保证随机性
123
+ 填空题提示示例不能泄露正确答案统一用答案1答案2答案3占位
@@ -121,7 +121,7 @@ soke-cli --version
121
121
  # 预期输出: soke-cli version x.x.x
122
122
  ```
123
123
 
124
- 如果显示版本号,说明安装成功 ✅。
124
+ 如果显示版本号,说明基础安装成功。完成后续登录授权后,请继续运行 `soke-cli doctor` 做完整健康检查,确保配置、登录态、日志目录和网络连通性都可用。
125
125
 
126
126
  **如果 `which soke-cli` 无输出**,说明 PATH 未生效:
127
127
  - macOS/Linux: 确认 `echo $PATH | tr ':' '\n' | grep npm-global` 有输出,若没有请重新执行第二步
@@ -212,9 +212,47 @@ soke-cli auth logout
212
212
 
213
213
  ## 验证安装
214
214
 
215
- 完成登录授权后,让我们验证一切是否正常工作。
215
+ 完成登录授权后,让我们验证一切是否正常工作。推荐先运行 `doctor`,它会一次性检查 CLI 版本、配置文件、登录态、日志目录和网络连通性。
216
216
 
217
- ### 1. 查看配置信息
217
+ ### 1. 运行健康检查
218
+
219
+ ```bash
220
+ soke-cli doctor
221
+ ```
222
+
223
+ 正常情况下会看到类似输出:
224
+ ```text
225
+ pass cli_version x.x.x
226
+ pass config /Users/你的用户名/.soke-cli/config.json
227
+ pass auth login data looks valid locally
228
+ pass logs /Users/你的用户名/.soke-cli/logs
229
+ pass network https://opendev.soke.cn reachable (123ms)
230
+ ```
231
+
232
+ 如果任意检查项显示 `fail`,请根据同一行或下一行的 `hint` 提示处理。常见情况:
233
+ - `config` 或 `auth` 失败:重新执行 `soke-cli auth login`
234
+ - `logs` 失败:检查 `~/.soke-cli` 或 `SOKE_CLI_LOG_DIR` 的写入权限
235
+ - `network` 失败:检查网络连接或代理设置
236
+
237
+ 需要机器可读输出时,可以使用 JSON 格式:
238
+
239
+ ```bash
240
+ soke-cli doctor --format json
241
+ ```
242
+
243
+ 如果当前环境不能访问外网,只想检查本地安装、配置、登录态和日志目录,可以跳过网络检查:
244
+
245
+ ```bash
246
+ soke-cli doctor --offline
247
+ ```
248
+
249
+ 网络较慢时可以调大超时时间:
250
+
251
+ ```bash
252
+ soke-cli doctor --timeout 30
253
+ ```
254
+
255
+ ### 2. 查看配置信息
218
256
 
219
257
  ```bash
220
258
  soke-cli config show
@@ -232,9 +270,9 @@ soke-cli config show
232
270
  token过期时间: 2026-10-17 12:00:00
233
271
  ```
234
272
 
235
- > 💡 **说明**: `app_key` 和 `app_secret` 在当前版本中不需要手动配置,授权流程会自动处理所有必要的认证信息。
273
+ > 💡 **说明**: `app_key` 和 `app_secret` 在当前版本中不需要手动配置,授权流程会自动处理所有必要的认证信息。如果 `doctor` 已全部通过,这一步主要用于人工确认当前登录的企业和用户信息。
236
274
 
237
- ### 2. 测试 API 调用
275
+ ### 3. 测试 API 调用
238
276
 
239
277
  尝试调用一个简单的 API:
240
278
 
@@ -244,7 +282,7 @@ soke-cli api GET /users/me
244
282
 
245
283
  如果返回你的用户信息(JSON 格式),说明一切配置正确!
246
284
 
247
- ### 3. 使用业务命令
285
+ ### 4. 使用业务命令
248
286
 
249
287
  尝试使用一个业务快捷命令,例如查看考试列表:
250
288
 
@@ -413,4 +451,4 @@ npx skills add liuchenlong1111/soke-cli -y -g
413
451
 
414
452
  ---
415
453
 
416
- **祝你使用愉快!** 🎉
454
+ **祝你使用愉快!** 🎉