@sokeai/cli 1.0.68 → 1.0.70

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/README.md CHANGED
@@ -7,6 +7,7 @@
7
7
  - [核心能力](#核心能力)
8
8
  - [安装方法](#安装方法)
9
9
  - [快速开始](#快速开始)
10
+ - [日志与排障](#日志与排障)
10
11
  - [开发指南](#开发指南)
11
12
  - [从接口封装到发布的完整流程](#从接口封装到发布的完整流程)
12
13
  - [本地开发测试](#本地开发测试)
@@ -142,6 +143,78 @@ soke-cli course +list-courses --start-time 1672502400000 --end-time 170403840000
142
143
  soke-cli exam +get-exam-user --exam-id exam123 --dept-user-id user456
143
144
  ```
144
145
 
146
+ ## 日志与排障
147
+
148
+ `soke-cli` 默认会在本地写入结构化诊断日志,用于排查用户执行命令时的本地环境、命令链路、HTTP 请求摘要和错误关联信息。日志不会自动上传。
149
+
150
+ ### 查看日志路径
151
+
152
+ ```bash
153
+ soke-cli logs +path
154
+ ```
155
+
156
+ 登录后日志文件名会拼接当前应用、企业和用户身份,便于一台机器上多个身份并存时定位:
157
+
158
+ ```text
159
+ ~/.soke-cli/logs/cli_<app_id>_<corp_id>_<dept_user_id>.log
160
+ ```
161
+
162
+ 未登录或无法读取配置时,会回退到:
163
+
164
+ ```text
165
+ ~/.soke-cli/logs/soke-cli.log
166
+ ```
167
+
168
+ ### 收集诊断包
169
+
170
+ 当需要反馈问题给支持人员时,可以生成本地诊断包:
171
+
172
+ ```bash
173
+ soke-cli logs +collect
174
+ ```
175
+
176
+ 默认输出到 `~/.soke-cli/support/`,只生成本地 zip 文件,不会自动发送。
177
+
178
+ ### 清理日志
179
+
180
+ CLI 启动时会静默清理过期文件:日志默认保留 30 天,诊断包默认保留 14 天。也可以手动清理:
181
+
182
+ ```bash
183
+ # 预览将清理哪些文件
184
+ soke-cli logs +clean --dry-run
185
+
186
+ # 清理 30 天前的日志和诊断包
187
+ soke-cli logs +clean
188
+
189
+ # 清理指定时间之前的文件
190
+ soke-cli logs +clean --older-than 7d
191
+
192
+ # 清理全部日志和诊断包,需要显式确认
193
+ soke-cli logs +clean --all --yes
194
+ ```
195
+
196
+ `logs +clean` 只清理日志文件和诊断包,不会删除配置、token 或 keychain。
197
+ 默认清理会保护当前正在写入的日志;`--all --yes` 会尝试清理全部日志文件。
198
+
199
+ ### 健康检查
200
+
201
+ ```bash
202
+ soke-cli doctor --format json
203
+ ```
204
+
205
+ `doctor` 会检查 CLI 版本、配置、登录态、日志目录和网络连通性。
206
+
207
+ ### 调试输出
208
+
209
+ ```bash
210
+ soke-cli --verbose <command>
211
+ soke-cli --debug <command>
212
+ ```
213
+
214
+ `--verbose` 用于查看关键行为节点,`--debug` 会输出更详细的 HTTP 摘要。完整结构化日志仍以 JSON Lines 写入本地日志文件。
215
+
216
+ 更多日志字段、脱敏规则和开发规范见:[docs/LOGGING_GUIDE.md](docs/LOGGING_GUIDE.md)。
217
+
145
218
  ## 使用示例
146
219
 
147
220
  ### 调用快捷业务命令
@@ -649,6 +722,7 @@ soke-cli/
649
722
 
650
723
  - **[QUICKSTART.md](QUICKSTART.md)** - 快速开始指南
651
724
  - **[CLAUDE.md](CLAUDE.md)** - 项目架构和开发规范
725
+ - **[docs/LOGGING_GUIDE.md](docs/LOGGING_GUIDE.md)** - 日志记录、查看和诊断包收集规范
652
726
  - **[docs/LOCAL_TESTING.md](docs/LOCAL_TESTING.md)** - 本地测试详细指南
653
727
  - **[skills/README.md](skills/README.md)** - AI Agent Skills 使用说明
654
728
  - **[npm.md](npm.md)** - NPM 包发布详细文档
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sokeai/cli",
3
- "version": "1.0.68",
3
+ "version": "1.0.70",
4
4
  "description": "授客AI官方CLI工具 - 支持AI Agent Skills",
5
5
  "bin": {
6
6
  "soke-cli": "scripts/run.js"
package/skills/SKILL.md CHANGED
@@ -70,9 +70,9 @@ metadata:
70
70
 
71
71
  ---
72
72
 
73
- ### soke-examPool — 可练习题库查询
73
+ ### soke-exam-question-pool — 可练习题库查询
74
74
 
75
- **路径**: [soke-examPool/SKILL.md](./soke-examPool/SKILL.md)
75
+ **路径**: [soke-exam-question-pool/SKILL.md](./soke-exam-question-pool/SKILL.md)
76
76
 
77
77
  按 `examQuestionPool` 接口链路查询可练习题库,严格遵循“题库列表 -> 题库详情 -> 题目列表”的参数依赖。
78
78
 
@@ -93,6 +93,7 @@ metadata:
93
93
 
94
94
  **核心能力**:
95
95
  - 创建异步导出任务(`soke-cli task +create`)
96
+ - 支持选择部门导出类型:单列导出 `aloneDept`(默认)或部门多列导出 `manyDept`
96
97
  - 查询任务状态与导出文件地址(`soke-cli task +get`)
97
98
 
98
99
  ---
@@ -206,7 +207,7 @@ soke-cli安装指南.md (所有 skill 的前置条件)
206
207
  └── soke-shared (认证/配置/权限基础)
207
208
 
208
209
  ├── soke-exam
209
- ├── soke-examPool
210
+ ├── soke-exam-question-pool
210
211
  ├── soke-assign
211
212
  ├── soke-learning-profile
212
213
  ├── soke-material
@@ -231,7 +232,7 @@ soke-cli安装指南.md (所有 skill 的前置条件)
231
232
  | 上传视频/音频/文档素材 | [soke-material](./soke-material/SKILL.md) |
232
233
  | 创建/管理课件 | [soke-lesson](./soke-lesson/SKILL.md) |
233
234
  | 创建/发布/查询考试、题库、试卷 | [soke-exam](./soke-exam/SKILL.md) |
234
- | 查询可练习题库详情和题目列表 | [soke-examPool](./soke-examPool/SKILL.md) |
235
+ | 查询可练习题库详情和题目列表 | [soke-exam-question-pool](./soke-exam-question-pool/SKILL.md) |
235
236
  | 将课程/考试/地图指派给部门或用户 | [soke-assign](./soke-assign/SKILL.md) |
236
237
  | 创建/发布/查询学习地图 | [soke-learning-map](./soke-learning-map/SKILL.md) |
237
238
  | 查询学员学习档案/统计数据 | [soke-learning-profile](./soke-learning-profile/SKILL.md) |
@@ -1,12 +1,12 @@
1
1
  ---
2
- name: soke-examPool
3
- summary: 授客可练习题库查询(题库列表、题库详情、题目列表),通过 soke-cli exam-pool 命令操作
2
+ name: soke-exam-question-pool
3
+ summary: 授客可练习题库查询(题库列表、题库详情、题目列表),通过 soke-cli exam-question-pool 命令操作
4
4
  version: 1.0.0
5
5
  description: "授客可练习题库查询:按 examQuestionPool 接口链路先查询题库列表,再用题库 uuid 查询详情和题目列表。当用户需要查看可练习题库、题库详情、题目内容、答案和解析时使用。 | Soke question pool lookup: use the examQuestionPool API flow to list pools, get pool detail, and list questions."
6
6
  metadata:
7
7
  requires:
8
8
  bins: ["soke-cli"]
9
- cliHelp: "soke-cli exam-pool --help"
9
+ cliHelp: "soke-cli exam-question-pool --help"
10
10
  ---
11
11
 
12
12
  # 可练习题库查询 (examQuestionPool)
@@ -36,7 +36,7 @@ metadata:
36
36
  获取可练习题库列表。
37
37
 
38
38
  ```bash
39
- soke-cli exam-pool +list \
39
+ soke-cli exam-question-pool +list \
40
40
  --page 1 \
41
41
  --page-size 10 \
42
42
  --status 1 \
@@ -63,7 +63,7 @@ soke-cli exam-pool +list \
63
63
  根据题库 UUID 获取可练习题库详情。
64
64
 
65
65
  ```bash
66
- soke-cli exam-pool +get \
66
+ soke-cli exam-question-pool +get \
67
67
  --pool-id "<上一步 data.list[].uuid>" \
68
68
  --format json
69
69
  ```
@@ -89,7 +89,7 @@ soke-cli exam-pool +get \
89
89
  根据同一个题库 UUID 获取题目明细。
90
90
 
91
91
  ```bash
92
- soke-cli exam-pool +questions \
92
+ soke-cli exam-question-pool +questions \
93
93
  --pool-id "<同一个题库 uuid>" \
94
94
  --format json
95
95
  ```
@@ -114,11 +114,11 @@ soke-cli exam-pool +questions \
114
114
 
115
115
  ```bash
116
116
  # 1. 查询题库列表,取 data.list[0].uuid
117
- soke-cli exam-pool +list --page 1 --page-size 10 --status 1 --format json
117
+ soke-cli exam-question-pool +list --page 1 --page-size 10 --status 1 --format json
118
118
 
119
119
  # 2. 查询题库详情
120
- soke-cli exam-pool +get --pool-id "<pool_uuid>" --format json
120
+ soke-cli exam-question-pool +get --pool-id "<pool_uuid>" --format json
121
121
 
122
122
  # 3. 查询同一题库的题目
123
- soke-cli exam-pool +questions --pool-id "<pool_uuid>" --format json
123
+ soke-cli exam-question-pool +questions --pool-id "<pool_uuid>" --format json
124
124
  ```
@@ -18,7 +18,7 @@ metadata:
18
18
  - 任务接口是独立模块,命令统一使用 `soke-cli task ...`,不要使用 `soke-cli learning-map ...` 创建或查询任务。
19
19
  - 创建任务后必须保存返回的 `data.id`,再调用 `+get` 查询任务详情。
20
20
  - 默认用 `--format json` 获取结构化输出;需要人工快速查看时可省略 format 输出表格。
21
- - 当前已知任务类型是学习地图学员统计导出,`--module` 默认 `learningMapUser`,`--action` 默认 `export`。
21
+ - 当前已知任务类型是学习地图学员统计导出,`--module` 默认 `learningMapUser`,`--action` 默认 `export`,`--type` 默认 `aloneDept`。
22
22
 
23
23
  ## 命令
24
24
 
@@ -28,6 +28,8 @@ metadata:
28
28
  soke-cli task +create \
29
29
  --map-id "MAP-UUID" \
30
30
  --learn-type "required" \
31
+ --type "aloneDept" \
32
+ --custom-tags "job_number,position" \
31
33
  --limit 4500 \
32
34
  --format json
33
35
  ```
@@ -43,6 +45,8 @@ soke-cli task +create \
43
45
  | `--eligible-status` | 否 | 空 | 达标状态筛选,空值表示不限 |
44
46
  | `--limit` | 否 | `4500` | 任务处理上限 |
45
47
  | `--action` | 否 | `export` | 操作类型,导出任务固定为 `export` |
48
+ | `--type` | 否 | `aloneDept` | 部门导出类型:`aloneDept` 单列导出,`manyDept` 部门多列导出 |
49
+ | `--custom-tags` | 否 | 空 | 导出的自定义字段列表,多个字段用英文逗号分隔;也可传 JSON 字符串数组 |
46
50
 
47
51
  响应关键字段:
48
52
 
@@ -77,6 +81,8 @@ soke-cli task +get --id "TASK-ID" --format json
77
81
  TASK_ID=$(soke-cli task +create \
78
82
  --map-id "$MAP_UUID" \
79
83
  --learn-type "required" \
84
+ --type "aloneDept" \
85
+ --custom-tags "工号,岗位,入职日期" \
80
86
  --limit 4500 \
81
87
  --format json | jq -r '.data.id')
82
88
 
@@ -94,4 +100,5 @@ soke-cli task +get --id "$TASK_ID" --format json | jq -r '.data.filePath'
94
100
 
95
101
  - `data.filePath` 为空:任务可能还未完成,等待后重新执行 `task +get --id "TASK-ID" --format json`。
96
102
  - `未登录授权`:按 `soke-shared` 执行 `soke-cli auth login` 后重试。
97
- - 任务创建失败:确认 `--map-id` 是有效学习地图 UUID,`--module learningMapUser`,`--action export`。
103
+ - 自定义字段没有导出:确认已通过 `--custom-tags "字段1,字段2"` 指定,字段名需与学习地图学员统计支持的自定义字段一致。
104
+ - 任务创建失败:确认 `--map-id` 是有效学习地图 UUID,`--module learningMapUser`,`--action export`,`--type aloneDept` 或 `--type manyDept`。
@@ -15,7 +15,8 @@ metadata:
15
15
 
16
16
  ## 核心规则
17
17
 
18
- - 提交需求前,先执行 `+list-categories`,使用返回的分类 `uuid` 和 `title`。
18
+ - 提交需求前,先执行 `+list-categories`,使用返回的分类 `uuid`、`title` 和 `tag`。
19
+ - 创建需求的 `--tag` 不是自由填写,必须从所选分类返回的 `tag` 字段中选择;多个分类时合并这些分类的 tag 值。
19
20
  - 投票前,先执行 `+list`,使用返回的培训需求 `uuid`。不要把分类 `uuid` 传给投票接口。
20
21
  - 创建和投票是写操作。用户意图不明确时,先确认要提交或投票的对象。
21
22
  - 默认用 `--format json` 获取结构化输出;需要人工快速查看时可省略 format 输出表格。
@@ -44,30 +45,32 @@ soke-cli training-demand +list \
44
45
  soke-cli training-demand +list-categories --format json
45
46
  ```
46
47
 
47
- 分类返回的 `data.list[].uuid` 和 `data.list[].title` 只用于创建需求。
48
+ 分类返回的 `data.list[].uuid`、`data.list[].title` 和 `data.list[].tag` 只用于创建需求。
48
49
 
49
50
  ### 提交培训需求
50
51
 
51
52
  推荐从分类列表提取分类后,用分类 UUID 和名称提交:
52
53
 
54
+ `--title` 是培训需求描述;`--tag` 必须来自所选分类返回的 `tag`;`--level` 是培训需求等级,可省略,默认 `0`。用户指定等级时只能使用 `1-5`。
55
+
53
56
  ```bash
54
57
  soke-cli training-demand +create \
55
58
  --title "门店销售沟通训练" \
56
- --tag "销售,沟通" \
59
+ --tag "职场心态,需求测试" \
57
60
  --level 0 \
58
61
  --category-uuid "FA0C937C-EE52-463B-BE3A-C13F96C426AE" \
59
62
  --category-title "新建培训需求测试" \
63
+ --category-tag "职场心态,新建培训需求测试,新建培训需求,需求测试,培训需求测试,企业新建培训需求测试" \
60
64
  --format json
61
65
  ```
62
66
 
63
- 多分类或已有完整分类数组时,使用 `--category-list`:
67
+ 不传 `--tag` 时,CLI 会从 `--category-tag` 自动合并标签。多分类或已有完整分类数组时,使用 `--category-list`,推荐把分类返回的 `tag` 一并带上:
64
68
 
65
69
  ```bash
66
70
  soke-cli training-demand +create \
67
71
  --title "新员工产品知识培训" \
68
- --tag "产品,新员工" \
69
- --level 0 \
70
- --category-list '[{"uuid":"FA0C937C-EE52-463B-BE3A-C13F96C426AE","title":"新建培训需求测试"}]' \
72
+ --level 1 \
73
+ --category-list '[{"uuid":"FA0C937C-EE52-463B-BE3A-C13F96C426AE","title":"新建培训需求测试","tag":"职场心态,新建培训需求测试,新建培训需求,需求测试,培训需求测试,企业新建培训需求测试"}]' \
71
74
  --format json
72
75
  ```
73
76
 
@@ -84,9 +87,9 @@ soke-cli training-demand +vote \
84
87
  ## 常见工作流
85
88
 
86
89
  1. 用户说“我想提一个培训需求”:
87
- - 先问清楚标题、标签、分类偏好和等级。
90
+ - 先问清楚培训需求描述和分类偏好;等级没说明时使用默认 `0`。
88
91
  - 执行 `+list-categories --format json`。
89
- - 匹配或让用户选择分类。
92
+ - 匹配或让用户选择分类,并从所选分类的 `tag` 中确定标签;用户未指定具体标签时,直接使用所选分类的全部 tag。
90
93
  - 执行 `+create`。
91
94
 
92
95
  2. 用户说“帮我给某个需求投票”:
@@ -102,11 +105,12 @@ soke-cli training-demand +vote \
102
105
 
103
106
  | 场景 | 依赖字段 | 来源 |
104
107
  |------|----------|------|
105
- | 创建需求 | `category_list[].uuid` / `category_list[].title` | `+list-categories` 的 `data.list[]` |
108
+ | 创建需求 | `category_list[].uuid` / `category_list[].title` / `tag` | `+list-categories` 的 `data.list[]` |
106
109
  | 投票 | `uuid` | `+list` 的 `data.list[].uuid` |
107
110
 
108
111
  ## 排错
109
112
 
110
113
  - 创建失败提示分类无效:重新执行 `+list-categories`,不要使用需求列表中的分类名称手写 UUID。
114
+ - 创建失败提示标签无效:重新执行 `+list-categories`,从所选分类返回的 `tag` 中选择,不要自行编写标签。
111
115
  - 投票失败提示需求无效:确认传入的是培训需求 UUID,不是分类 UUID。
112
116
  - 鉴权失败:按 `soke-shared` 执行 `soke-cli auth login` 后重试。