foco-cli 0.10.0 → 0.11.0
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 +200 -130
- package/dist/commands/cfa-knowledge-points.d.ts +25 -0
- package/dist/commands/cfa-knowledge-points.d.ts.map +1 -0
- package/dist/commands/{knowledge-points.js → cfa-knowledge-points.js} +11 -19
- package/dist/commands/cfa-knowledge-points.js.map +1 -0
- package/dist/commands/cfa-levels.d.ts +20 -0
- package/dist/commands/cfa-levels.d.ts.map +1 -0
- package/dist/commands/{exam-subjects.js → cfa-levels.js} +11 -11
- package/dist/commands/cfa-levels.js.map +1 -0
- package/dist/commands/cfa-modules.d.ts +20 -0
- package/dist/commands/cfa-modules.d.ts.map +1 -0
- package/dist/commands/{exam-levels.js → cfa-modules.js} +11 -11
- package/dist/commands/cfa-modules.js.map +1 -0
- package/dist/commands/cfa-subjects.d.ts +20 -0
- package/dist/commands/{exam-modules.d.ts.map → cfa-subjects.d.ts.map} +1 -1
- package/dist/commands/{exam-modules.js → cfa-subjects.js} +11 -11
- package/dist/commands/{exam-modules.js.map → cfa-subjects.js.map} +1 -1
- package/dist/commands/iiqe-sections.d.ts +13 -0
- package/dist/commands/iiqe-sections.d.ts.map +1 -0
- package/dist/commands/iiqe-sections.js +46 -0
- package/dist/commands/iiqe-sections.js.map +1 -0
- package/dist/commands/iiqe-syllabi.d.ts +14 -0
- package/dist/commands/iiqe-syllabi.d.ts.map +1 -0
- package/dist/commands/iiqe-syllabi.js +33 -0
- package/dist/commands/iiqe-syllabi.js.map +1 -0
- package/dist/commands/iiqe-units.d.ts +21 -0
- package/dist/commands/iiqe-units.d.ts.map +1 -0
- package/dist/commands/iiqe-units.js +49 -0
- package/dist/commands/iiqe-units.js.map +1 -0
- package/dist/commands/questions.d.ts +1 -1
- package/dist/commands/questions.js +1 -1
- package/dist/index.js +138 -153
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +72 -18
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/app/admin/questions/[questionId]/edit/page.d.ts +0 -1
- package/dist/app/admin/questions/[questionId]/edit/page.d.ts.map +0 -1
- package/dist/app/admin/questions/[questionId]/edit/page.js +0 -2
- package/dist/app/admin/questions/[questionId]/edit/page.js.map +0 -1
- package/dist/commands/banks.d.ts +0 -9
- package/dist/commands/banks.d.ts.map +0 -1
- package/dist/commands/banks.js +0 -18
- package/dist/commands/banks.js.map +0 -1
- package/dist/commands/cc-connect.d.ts +0 -8
- package/dist/commands/cc-connect.d.ts.map +0 -1
- package/dist/commands/cc-connect.js +0 -27
- package/dist/commands/cc-connect.js.map +0 -1
- package/dist/commands/exam-levels.d.ts +0 -20
- package/dist/commands/exam-levels.d.ts.map +0 -1
- package/dist/commands/exam-levels.js.map +0 -1
- package/dist/commands/exam-modules.d.ts +0 -20
- package/dist/commands/exam-subjects.d.ts +0 -20
- package/dist/commands/exam-subjects.d.ts.map +0 -1
- package/dist/commands/exam-subjects.js.map +0 -1
- package/dist/commands/knowledge-points.d.ts +0 -29
- package/dist/commands/knowledge-points.d.ts.map +0 -1
- package/dist/commands/knowledge-points.js.map +0 -1
- package/dist/commands/resource-packs.d.ts +0 -26
- package/dist/commands/resource-packs.d.ts.map +0 -1
- package/dist/commands/resource-packs.js +0 -64
- package/dist/commands/resource-packs.js.map +0 -1
- package/dist/commands/syllabi.d.ts +0 -26
- package/dist/commands/syllabi.d.ts.map +0 -1
- package/dist/commands/syllabi.js +0 -65
- package/dist/commands/syllabi.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,130 +11,210 @@ npm install -g foco-cli
|
|
|
11
11
|
## 登录
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
#
|
|
15
|
-
foco login
|
|
16
|
-
|
|
17
|
-
#
|
|
18
|
-
foco login https://your-foco-server.com
|
|
19
|
-
|
|
20
|
-
# 查看登录状态
|
|
21
|
-
foco auth status
|
|
22
|
-
|
|
23
|
-
# 登出
|
|
24
|
-
foco auth logout
|
|
14
|
+
foco login --dev # 本地开发服务器 (localhost:3001)
|
|
15
|
+
foco login https://your.com # 指定服务器
|
|
16
|
+
foco auth status # 查看状态
|
|
17
|
+
foco auth logout # 登出
|
|
25
18
|
```
|
|
26
19
|
|
|
27
|
-
|
|
20
|
+
凭证存储在 `~/.foco/config.json`。
|
|
28
21
|
|
|
29
22
|
## 命令参考
|
|
30
23
|
|
|
31
|
-
###
|
|
24
|
+
### 认证
|
|
32
25
|
|
|
33
26
|
| 命令 | 说明 |
|
|
34
27
|
|------|------|
|
|
35
|
-
| `foco login [--dev]
|
|
36
|
-
| `foco auth status` |
|
|
28
|
+
| `foco login [--dev] [-u <user> -p <pass>]` | 登录 |
|
|
29
|
+
| `foco auth status` | 查看状态 |
|
|
37
30
|
| `foco auth logout` | 登出 |
|
|
38
31
|
|
|
39
|
-
###
|
|
32
|
+
### 考试 (exams)
|
|
40
33
|
|
|
41
34
|
| 命令 | 说明 |
|
|
42
35
|
|------|------|
|
|
43
|
-
| `foco
|
|
44
|
-
| `foco
|
|
36
|
+
| `foco exams list` | 列表 |
|
|
37
|
+
| `foco exams show <id>` | 详情 |
|
|
38
|
+
| `foco exams create --code <code> --name <name>` | 创建 |
|
|
39
|
+
| `foco exams update <id>` | 更新 |
|
|
40
|
+
| `foco exams delete <id> [--cascade] [-f]` | 删除(`--cascade` 级联删除关联数据) |
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
### CFA 等级 (cfa-levels)
|
|
47
43
|
|
|
48
|
-
|
|
44
|
+
CFA 考试的层级结构:Level I / Level II / Level III。
|
|
49
45
|
|
|
50
46
|
| 命令 | 说明 |
|
|
51
47
|
|------|------|
|
|
52
|
-
| `foco
|
|
53
|
-
| `foco
|
|
48
|
+
| `foco cfa-levels list --exam-id <id>` | 列表 |
|
|
49
|
+
| `foco cfa-levels show <id>` | 详情 |
|
|
50
|
+
| `foco cfa-levels create --exam-id <id> --code <code> --name <name>` | 创建 |
|
|
51
|
+
| `foco cfa-levels update <id>` | 更新 |
|
|
52
|
+
| `foco cfa-levels delete <id>` | 删除 |
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
### CFA 科目 (cfa-subjects)
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
每个等级下的科目(如 Ethical Standards、Quantitative Methods 等)。
|
|
58
57
|
|
|
59
58
|
| 命令 | 说明 |
|
|
60
59
|
|------|------|
|
|
61
|
-
| `foco
|
|
62
|
-
| `foco
|
|
63
|
-
| `foco
|
|
64
|
-
| `foco
|
|
65
|
-
| `foco
|
|
60
|
+
| `foco cfa-subjects list --level-id <id>` | 列表 |
|
|
61
|
+
| `foco cfa-subjects show <id>` | 详情 |
|
|
62
|
+
| `foco cfa-subjects create --level-id <id> --code <code> --name <name>` | 创建 |
|
|
63
|
+
| `foco cfa-subjects update <id>` | 更新 |
|
|
64
|
+
| `foco cfa-subjects delete <id>` | 删除 |
|
|
65
|
+
|
|
66
|
+
### CFA 学习模块 (cfa-modules)
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
科目下的学习模块。
|
|
68
69
|
|
|
69
70
|
| 命令 | 说明 |
|
|
70
71
|
|------|------|
|
|
71
|
-
| `foco
|
|
72
|
-
| `foco
|
|
73
|
-
| `foco
|
|
74
|
-
| `foco
|
|
75
|
-
| `foco
|
|
72
|
+
| `foco cfa-modules list --subject-id <id>` | 列表 |
|
|
73
|
+
| `foco cfa-modules show <id>` | 详情 |
|
|
74
|
+
| `foco cfa-modules create --subject-id <id> --code <code> --name <name>` | 创建 |
|
|
75
|
+
| `foco cfa-modules update <id>` | 更新 |
|
|
76
|
+
| `foco cfa-modules delete <id>` | 删除 |
|
|
76
77
|
|
|
77
|
-
###
|
|
78
|
+
### CFA 考点 (cfa-knowledge-points)
|
|
79
|
+
|
|
80
|
+
模块下的考点,支持 qa / knowledge / summary_note 三种类型。
|
|
78
81
|
|
|
79
82
|
| 命令 | 说明 |
|
|
80
83
|
|------|------|
|
|
81
|
-
| `foco knowledge-points list [--
|
|
82
|
-
| `foco knowledge-points create --
|
|
83
|
-
| `foco knowledge-points update <id
|
|
84
|
-
| `foco knowledge-points delete <id>` |
|
|
84
|
+
| `foco cfa-knowledge-points list [--exam-id <id>] [--type <type>]` | 列表 |
|
|
85
|
+
| `foco cfa-knowledge-points create --exam-id <id> --type <type> --title <t> --content <c>` | 创建 |
|
|
86
|
+
| `foco cfa-knowledge-points update <id>` | 更新 |
|
|
87
|
+
| `foco cfa-knowledge-points delete <id>` | 删除 |
|
|
85
88
|
|
|
86
89
|
type 可选值:`qa` | `knowledge` | `summary_note`
|
|
87
90
|
|
|
88
|
-
###
|
|
91
|
+
### IIQE 卷 (iiqe-units)
|
|
92
|
+
|
|
93
|
+
IIQE 考试的卷别(卷一保险、卷三汽车等)。
|
|
89
94
|
|
|
90
95
|
| 命令 | 说明 |
|
|
91
96
|
|------|------|
|
|
92
|
-
| `foco
|
|
93
|
-
| `foco
|
|
94
|
-
| `foco
|
|
95
|
-
| `foco
|
|
96
|
-
| `foco
|
|
97
|
+
| `foco iiqe-units list --exam-id <id>` | 列表 |
|
|
98
|
+
| `foco iiqe-units show <id>` | 详情 |
|
|
99
|
+
| `foco iiqe-units create --exam-id <id> --code <code> --name <name>` | 创建 |
|
|
100
|
+
| `foco iiqe-units update <id> [--required-product-id <id>]` | 更新(可绑定付费产品) |
|
|
101
|
+
| `foco iiqe-units delete <id>` | 删除 |
|
|
97
102
|
|
|
98
|
-
|
|
103
|
+
### IIQE 大纲 (iiqe-syllabi)
|
|
99
104
|
|
|
100
|
-
|
|
105
|
+
每卷下的大纲版本,有版本标签和激活状态。
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
foco
|
|
107
|
+
| 命令 | 说明 |
|
|
108
|
+
|------|------|
|
|
109
|
+
| `foco iiqe-syllabi list --unit-id <id>` | 列表 |
|
|
110
|
+
| `foco iiqe-syllabi show <id>` | 详情 |
|
|
111
|
+
| `foco iiqe-syllabi update <id>` | 更新 |
|
|
112
|
+
| `foco iiqe-syllabi delete <id>` | 删除 |
|
|
113
|
+
|
|
114
|
+
### IIQE 章节 (iiqe-sections)
|
|
115
|
+
|
|
116
|
+
大纲下的树形章节结构,支持多级嵌套(parentId)。
|
|
117
|
+
|
|
118
|
+
| 命令 | 说明 |
|
|
119
|
+
|------|------|
|
|
120
|
+
| `foco iiqe-sections list --syllabus-id <id>` | 列表 |
|
|
121
|
+
| `foco iiqe-sections show <id>` | 详情 |
|
|
122
|
+
| `foco iiqe-sections update <id> [--parent-id <id>]` | 更新 |
|
|
123
|
+
| `foco iiqe-sections delete <id>` | 删除 |
|
|
124
|
+
|
|
125
|
+
### 题目 (questions)
|
|
126
|
+
|
|
127
|
+
| 命令 | 说明 |
|
|
128
|
+
|------|------|
|
|
129
|
+
| `foco questions list [--exam-id <id>] [--type <type>] [--keyword <kw>]` | 列表 |
|
|
130
|
+
| `foco questions show <id>` | 详情 |
|
|
131
|
+
| `foco questions format --id <id> [--fields <f>] [--apply]` | AI 格式化题目 |
|
|
132
|
+
| `foco questions update-title --id <id> --title <t>` | 更新标题 |
|
|
133
|
+
| `foco questions update-title --file <path>` | 批量更新标题 |
|
|
134
|
+
|
|
135
|
+
type 可选值:`single` | `multiple` | `true_false`
|
|
136
|
+
|
|
137
|
+
### 商品 (products)
|
|
138
|
+
|
|
139
|
+
| 命令 | 说明 |
|
|
140
|
+
|------|------|
|
|
141
|
+
| `foco products list [--product-type <type>]` | 列表 |
|
|
142
|
+
| `foco products show <id>` | 详情 |
|
|
143
|
+
| `foco products create --product-type <type> --ref-id <id> --title <t>` | 创建 |
|
|
144
|
+
| `foco products update <id>` | 更新 |
|
|
145
|
+
| `foco products delete <id>` | 删除 |
|
|
146
|
+
|
|
147
|
+
product-type 可选值:`exam_level` | `iiqe_unit`
|
|
148
|
+
|
|
149
|
+
### 激活码 (activation-codes)
|
|
150
|
+
|
|
151
|
+
| 命令 | 说明 |
|
|
152
|
+
|------|------|
|
|
153
|
+
| `foco activation-codes list [--batch-no <no>] [--status <s>]` | 列表 |
|
|
154
|
+
| `foco activation-codes create-batch --sku-id <id> --count <n> [--batch-no <no>]` | 批量生成 |
|
|
155
|
+
|
|
156
|
+
### 工单 (issues)
|
|
157
|
+
|
|
158
|
+
| 命令 | 说明 |
|
|
159
|
+
|------|------|
|
|
160
|
+
| `foco issues list [--status <s>] [--priority <p>] [--assignee-id <id>] [--search <kw>]` | 列表 |
|
|
161
|
+
| `foco issues show <id>` | 详情 |
|
|
162
|
+
| `foco issues create --title <title> [options]` | 创建 |
|
|
163
|
+
| `foco issues update <id> [options]` | 更新 |
|
|
164
|
+
| `foco issues comment <id> -m <text>` | 添加评论 |
|
|
165
|
+
| `foco issues comments <id>` | 查看评论列表 |
|
|
166
|
+
| `foco issues edit-comment <id> --comment-id <cid> -m <text>` | 编辑评论 |
|
|
167
|
+
| `foco issues delete-comment <id> --comment-id <cid>` | 删除评论 |
|
|
168
|
+
|
|
169
|
+
status:`backlog` | `todo` | `in_progress` | `done` | `cancelled`
|
|
170
|
+
priority:`urgent` | `high` | `medium` | `low` | `none`
|
|
106
171
|
|
|
107
|
-
|
|
172
|
+
```bash
|
|
108
173
|
foco issues create \
|
|
109
174
|
--title "知识点模块开关" \
|
|
110
|
-
--description "
|
|
175
|
+
--description "按考试配置显示哪些模块" \
|
|
111
176
|
--priority high \
|
|
112
177
|
--labels "frontend,backend" \
|
|
113
178
|
--assignee-id 2 \
|
|
114
179
|
--due-date 2026-06-01
|
|
115
180
|
```
|
|
116
181
|
|
|
117
|
-
|
|
182
|
+
### Epic 目标 (epics)
|
|
183
|
+
|
|
184
|
+
| 命令 | 说明 |
|
|
185
|
+
|------|------|
|
|
186
|
+
| `foco epics list` | 列表 |
|
|
187
|
+
| `foco epics show <id>` | 详情 |
|
|
188
|
+
| `foco epics create --title <t>` | 创建 |
|
|
189
|
+
| `foco epics update <id>` | 更新 |
|
|
190
|
+
|
|
191
|
+
### 项目 (projects)
|
|
192
|
+
|
|
193
|
+
| 命令 | 说明 |
|
|
194
|
+
|------|------|
|
|
195
|
+
| `foco projects list` | 列表 |
|
|
196
|
+
| `foco projects show <id>` | 详情 |
|
|
197
|
+
| `foco projects create --name <n> --slug <s>` | 创建 |
|
|
198
|
+
| `foco projects update <id>` | 更新 |
|
|
199
|
+
| `foco projects delete <id>` | 删除 |
|
|
118
200
|
|
|
119
|
-
###
|
|
201
|
+
### 开发日志 (changelogs)
|
|
120
202
|
|
|
121
203
|
| 命令 | 说明 |
|
|
122
204
|
|------|------|
|
|
123
|
-
| `foco
|
|
124
|
-
| `foco
|
|
125
|
-
| `foco
|
|
126
|
-
| `foco projects update <id> [--name <name>]` | 更新项目 |
|
|
127
|
-
| `foco projects delete <id>` | 删除项目 |
|
|
205
|
+
| `foco changelogs list` | 列表 |
|
|
206
|
+
| `foco changelogs create --date <YYYY-MM-DD> --content <md>` | 创建 |
|
|
207
|
+
| `foco changelogs update <id> --content <md>` | 更新 |
|
|
128
208
|
|
|
129
209
|
### 每日站会 (huddles)
|
|
130
210
|
|
|
131
211
|
| 命令 | 说明 |
|
|
132
212
|
|------|------|
|
|
133
|
-
| `foco huddles list [--date <YYYY-MM-DD>]
|
|
134
|
-
| `foco huddles show <id>` |
|
|
135
|
-
| `foco huddles create --date <YYYY-MM-DD> --content '<json>'` |
|
|
136
|
-
| `foco huddles update <id> --content '<json>'` |
|
|
137
|
-
| `foco huddles delete <id>` |
|
|
213
|
+
| `foco huddles list [--date <YYYY-MM-DD>]` | 列表 |
|
|
214
|
+
| `foco huddles show <id>` | 详情 |
|
|
215
|
+
| `foco huddles create --date <YYYY-MM-DD> --content '<json>'` | 创建 |
|
|
216
|
+
| `foco huddles update <id> --content '<json>'` | 更新 |
|
|
217
|
+
| `foco huddles delete <id>` | 删除 |
|
|
138
218
|
|
|
139
219
|
content 格式:`[{"sectionName":"今日工作","content":"..."}]`
|
|
140
220
|
|
|
@@ -142,115 +222,107 @@ content 格式:`[{"sectionName":"今日工作","content":"..."}]`
|
|
|
142
222
|
|
|
143
223
|
| 命令 | 说明 |
|
|
144
224
|
|------|------|
|
|
145
|
-
| `foco knowledge-base list [--category <cat>]` |
|
|
146
|
-
| `foco knowledge-base show <id>` |
|
|
147
|
-
| `foco knowledge-base create --title <t> --slug <s
|
|
148
|
-
| `foco knowledge-base update <id
|
|
149
|
-
| `foco knowledge-base delete <id>` |
|
|
225
|
+
| `foco knowledge-base list [--category <cat>]` | 列表 |
|
|
226
|
+
| `foco knowledge-base show <id>` | 详情 |
|
|
227
|
+
| `foco knowledge-base create --title <t> --slug <s>` | 创建 |
|
|
228
|
+
| `foco knowledge-base update <id>` | 更新 |
|
|
229
|
+
| `foco knowledge-base delete <id>` | 删除 |
|
|
150
230
|
|
|
151
|
-
category
|
|
231
|
+
category:`culture` | `product` | `tech` | `cli-docs` | `ops` | `management` | `general`
|
|
152
232
|
|
|
153
233
|
### 帮助文章 (help-articles)
|
|
154
234
|
|
|
155
235
|
| 命令 | 说明 |
|
|
156
236
|
|------|------|
|
|
157
|
-
| `foco help-articles list` |
|
|
158
|
-
| `foco help-articles show <id>` |
|
|
159
|
-
| `foco help-articles create --title <t> --slug <s>` |
|
|
160
|
-
| `foco help-articles update <id>` |
|
|
161
|
-
| `foco help-articles delete <id>` |
|
|
237
|
+
| `foco help-articles list` | 列表 |
|
|
238
|
+
| `foco help-articles show <id>` | 详情 |
|
|
239
|
+
| `foco help-articles create --title <t> --slug <s>` | 创建 |
|
|
240
|
+
| `foco help-articles update <id>` | 更新 |
|
|
241
|
+
| `foco help-articles delete <id>` | 删除 |
|
|
162
242
|
|
|
163
|
-
###
|
|
243
|
+
### 讨论 (threads)
|
|
164
244
|
|
|
165
245
|
| 命令 | 说明 |
|
|
166
246
|
|------|------|
|
|
167
|
-
| `foco threads list
|
|
168
|
-
| `foco threads show <id>` |
|
|
169
|
-
| `foco threads update <id> --status <s>` |
|
|
170
|
-
| `foco threads reply <id> -m <text>` |
|
|
247
|
+
| `foco threads list` | 列表 |
|
|
248
|
+
| `foco threads show <id>` | 详情 |
|
|
249
|
+
| `foco threads update <id> --status <s>` | 更新状态 |
|
|
250
|
+
| `foco threads reply <id> -m <text>` | 回复 |
|
|
171
251
|
|
|
172
|
-
status
|
|
252
|
+
status:`open` | `resolved` | `closed`
|
|
173
253
|
|
|
174
|
-
###
|
|
254
|
+
### 反馈 (feedback)
|
|
175
255
|
|
|
176
256
|
| 命令 | 说明 |
|
|
177
257
|
|------|------|
|
|
178
|
-
| `foco feedback list [--state <s>] [--labels <l>]` |
|
|
179
|
-
| `foco feedback show <number>` |
|
|
180
|
-
| `foco feedback create --title <t>` |
|
|
181
|
-
| `foco feedback update <number
|
|
182
|
-
|
|
183
|
-
### 商品管理 (products)
|
|
184
|
-
|
|
185
|
-
| 命令 | 说明 |
|
|
186
|
-
|------|------|
|
|
187
|
-
| `foco products list [--product-type <type>]` | 查看商品列表 |
|
|
188
|
-
| `foco products show <id>` | 查看商品详情 |
|
|
189
|
-
| `foco products create --product-type <type> --ref-id <id> --title <t>` | 创建商品 |
|
|
190
|
-
| `foco products update <id>` | 更新商品 |
|
|
191
|
-
| `foco products delete <id>` | 删除商品 |
|
|
192
|
-
|
|
193
|
-
product-type 可选值:`bank` | `material`
|
|
258
|
+
| `foco feedback list [--state <s>] [--labels <l>]` | 列表 |
|
|
259
|
+
| `foco feedback show <number>` | 详情 |
|
|
260
|
+
| `foco feedback create --title <t>` | 创建 |
|
|
261
|
+
| `foco feedback update <number>` | 更新 |
|
|
194
262
|
|
|
195
|
-
###
|
|
263
|
+
### 管理员 (admins)
|
|
196
264
|
|
|
197
265
|
| 命令 | 说明 |
|
|
198
266
|
|------|------|
|
|
199
|
-
| `foco
|
|
200
|
-
| `foco
|
|
201
|
-
| `foco
|
|
202
|
-
| `foco
|
|
203
|
-
| `foco
|
|
267
|
+
| `foco admins list` | 列表 |
|
|
268
|
+
| `foco admins show <id>` | 详情 |
|
|
269
|
+
| `foco admins create --username <u> --password <p>` | 创建 |
|
|
270
|
+
| `foco admins update <id>` | 更新 |
|
|
271
|
+
| `foco admins disable <id>` | 禁用 |
|
|
272
|
+
| `foco admins enable <id>` | 启用 |
|
|
204
273
|
|
|
205
|
-
###
|
|
274
|
+
### 用户 (users)
|
|
206
275
|
|
|
207
276
|
| 命令 | 说明 |
|
|
208
277
|
|------|------|
|
|
209
|
-
| `foco
|
|
210
|
-
| `foco activation-codes create-batch --sku-id <id> --count <n>` | 批量生成激活码 |
|
|
278
|
+
| `foco users list [--keyword <kw>]` | 列表 |
|
|
211
279
|
|
|
212
|
-
###
|
|
280
|
+
### 订单 (orders)
|
|
213
281
|
|
|
214
282
|
| 命令 | 说明 |
|
|
215
283
|
|------|------|
|
|
216
|
-
| `foco
|
|
217
|
-
| `foco admins show <id>` | 查看管理员详情 |
|
|
218
|
-
| `foco admins create --username <u> --password <p>` | 创建管理员 |
|
|
219
|
-
| `foco admins update <id> [--display-name <n>]` | 更新管理员 |
|
|
284
|
+
| `foco orders list [--status <s>]` | 列表 |
|
|
220
285
|
|
|
221
|
-
###
|
|
286
|
+
### 仪表盘 (dashboard)
|
|
222
287
|
|
|
223
288
|
| 命令 | 说明 |
|
|
224
289
|
|------|------|
|
|
225
|
-
| `foco
|
|
226
|
-
| `foco
|
|
227
|
-
| `foco
|
|
290
|
+
| `foco dashboard overview [--range <7d\|30d>]` | 总览 |
|
|
291
|
+
| `foco dashboard learning [--range <7d\|30d>]` | 学习数据 |
|
|
292
|
+
| `foco dashboard products [--range <7d\|30d>]` | 商品数据 |
|
|
228
293
|
|
|
229
|
-
###
|
|
294
|
+
### 统计 (stats)
|
|
230
295
|
|
|
231
296
|
| 命令 | 说明 |
|
|
232
297
|
|------|------|
|
|
233
|
-
| `foco
|
|
298
|
+
| `foco stats` | 查看统计数据 |
|
|
234
299
|
|
|
235
|
-
###
|
|
300
|
+
### 集成配置
|
|
236
301
|
|
|
237
302
|
| 命令 | 说明 |
|
|
238
303
|
|------|------|
|
|
239
|
-
| `foco
|
|
304
|
+
| `foco opencode-server get` | 查看 OpenCode Server 配置 |
|
|
305
|
+
| `foco opencode-server set [--url <url>] [--password <pw>]` | 更新配置 |
|
|
306
|
+
| `foco ai-config get` | 查看 AI 模型配置 |
|
|
307
|
+
| `foco ai-config set [--api-key <key>] [--model <model>]` | 更新配置 |
|
|
240
308
|
|
|
241
|
-
###
|
|
309
|
+
### AI 提示词 (prompt-groups / prompt-templates)
|
|
242
310
|
|
|
243
311
|
| 命令 | 说明 |
|
|
244
312
|
|------|------|
|
|
245
|
-
| `foco
|
|
246
|
-
| `foco
|
|
247
|
-
| `foco
|
|
313
|
+
| `foco prompt-groups list` | 分组列表 |
|
|
314
|
+
| `foco prompt-groups show <id>` | 分组详情 |
|
|
315
|
+
| `foco prompt-groups create --name <n> --slug <s>` | 创建分组 |
|
|
316
|
+
| `foco prompt-templates list <groupId>` | 模板列表 |
|
|
317
|
+
| `foco prompt-templates create <groupId> --name <n>` | 创建模板 |
|
|
318
|
+
| `foco prompt-templates update <id>` | 更新模板 |
|
|
248
319
|
|
|
249
|
-
###
|
|
320
|
+
### 自更新
|
|
250
321
|
|
|
251
322
|
| 命令 | 说明 |
|
|
252
323
|
|------|------|
|
|
253
|
-
| `foco
|
|
324
|
+
| `foco update` | 检查新版本 |
|
|
325
|
+
| `foco upgrade` | 升级到最新版 |
|
|
254
326
|
|
|
255
327
|
## 输出格式
|
|
256
328
|
|
|
@@ -274,8 +346,6 @@ npm run build # TypeScript 编译
|
|
|
274
346
|
|
|
275
347
|
```bash
|
|
276
348
|
cd cli
|
|
277
|
-
# 修改 package.json 中的 version
|
|
278
349
|
npm run dist # build + pack
|
|
279
350
|
npm publish --access public --registry https://registry.npmjs.org/
|
|
280
|
-
npm install -g /path/to/cli
|
|
281
351
|
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare function handleCfaKnowledgePointsList(options: {
|
|
2
|
+
examId?: string;
|
|
3
|
+
type?: string;
|
|
4
|
+
status?: string;
|
|
5
|
+
keyword?: string;
|
|
6
|
+
page?: string;
|
|
7
|
+
pageSize?: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function handleCfaKnowledgePointCreate(options: {
|
|
10
|
+
examId: string;
|
|
11
|
+
type: string;
|
|
12
|
+
title: string;
|
|
13
|
+
content: string;
|
|
14
|
+
sortOrder?: string;
|
|
15
|
+
status?: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
export declare function handleCfaKnowledgePointUpdate(id: string, options: {
|
|
18
|
+
type?: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
content?: string;
|
|
21
|
+
sortOrder?: string;
|
|
22
|
+
status?: string;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
export declare function handleCfaKnowledgePointDelete(id: string): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=cfa-knowledge-points.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfa-knowledge-points.d.ts","sourceRoot":"","sources":["../../src/commands/cfa-knowledge-points.ts"],"names":[],"mappings":"AAGA,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,6BAA6B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { apiCall, outputJSON } from "../lib/api.js";
|
|
2
|
-
export async function
|
|
3
|
-
const { data } = await apiCall("/api/admin/v1/knowledge-points", {
|
|
2
|
+
export async function handleCfaKnowledgePointsList(options) {
|
|
3
|
+
const { data } = await apiCall("/api/admin/v1/cfa/knowledge-points", {
|
|
4
4
|
params: {
|
|
5
|
-
|
|
5
|
+
examId: options.examId,
|
|
6
6
|
type: options.type,
|
|
7
7
|
status: options.status,
|
|
8
8
|
keyword: options.keyword,
|
|
@@ -12,33 +12,25 @@ export async function handleKnowledgePointsList(options) {
|
|
|
12
12
|
});
|
|
13
13
|
outputJSON({ status: "ok", data });
|
|
14
14
|
}
|
|
15
|
-
export async function
|
|
15
|
+
export async function handleCfaKnowledgePointCreate(options) {
|
|
16
16
|
const body = {
|
|
17
|
-
|
|
17
|
+
examId: options.examId,
|
|
18
18
|
type: options.type,
|
|
19
19
|
title: options.title,
|
|
20
20
|
content: options.content,
|
|
21
21
|
};
|
|
22
|
-
if (options.syllabusId)
|
|
23
|
-
body.syllabusId = options.syllabusId;
|
|
24
|
-
if (options.sectionId)
|
|
25
|
-
body.sectionId = options.sectionId;
|
|
26
22
|
if (options.sortOrder)
|
|
27
23
|
body.sortOrder = Number(options.sortOrder);
|
|
28
24
|
if (options.status)
|
|
29
25
|
body.status = options.status;
|
|
30
|
-
const { data } = await apiCall("/api/admin/v1/knowledge-points", {
|
|
26
|
+
const { data } = await apiCall("/api/admin/v1/cfa/knowledge-points", {
|
|
31
27
|
method: "POST",
|
|
32
28
|
body,
|
|
33
29
|
});
|
|
34
30
|
outputJSON({ status: "ok", data });
|
|
35
31
|
}
|
|
36
|
-
export async function
|
|
32
|
+
export async function handleCfaKnowledgePointUpdate(id, options) {
|
|
37
33
|
const body = {};
|
|
38
|
-
if (options.syllabusId !== undefined)
|
|
39
|
-
body.syllabusId = options.syllabusId || null;
|
|
40
|
-
if (options.sectionId !== undefined)
|
|
41
|
-
body.sectionId = options.sectionId || null;
|
|
42
34
|
if (options.type)
|
|
43
35
|
body.type = options.type;
|
|
44
36
|
if (options.title)
|
|
@@ -49,16 +41,16 @@ export async function handleKnowledgePointUpdate(id, options) {
|
|
|
49
41
|
body.sortOrder = Number(options.sortOrder);
|
|
50
42
|
if (options.status)
|
|
51
43
|
body.status = options.status;
|
|
52
|
-
const { data } = await apiCall(`/api/admin/v1/knowledge-points/${id}`, {
|
|
44
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/knowledge-points/${id}`, {
|
|
53
45
|
method: "PATCH",
|
|
54
46
|
body,
|
|
55
47
|
});
|
|
56
48
|
outputJSON({ status: "ok", data });
|
|
57
49
|
}
|
|
58
|
-
export async function
|
|
59
|
-
const { data } = await apiCall(`/api/admin/v1/knowledge-points/${id}`, {
|
|
50
|
+
export async function handleCfaKnowledgePointDelete(id) {
|
|
51
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/knowledge-points/${id}`, {
|
|
60
52
|
method: "DELETE",
|
|
61
53
|
});
|
|
62
54
|
outputJSON({ status: "ok", data });
|
|
63
55
|
}
|
|
64
|
-
//# sourceMappingURL=knowledge-points.js.map
|
|
56
|
+
//# sourceMappingURL=cfa-knowledge-points.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfa-knowledge-points.js","sourceRoot":"","sources":["../../src/commands/cfa-knowledge-points.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAOlD;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAC5B,oCAAoC,EACpC;QACE,MAAM,EAAE;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;KACF,CACF,CAAC;IAEF,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAOnD;IACC,MAAM,IAAI,GAA4B;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;IAEF,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAC5B,oCAAoC,EACpC;QACE,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CACF,CAAC;IAEF,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,EAAU,EACV,OAMC;IAED,MAAM,IAAI,GAA4B,EAAE,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9C,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACpD,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAC5B,sCAAsC,EAAE,EAAE,EAC1C;QACE,MAAM,EAAE,OAAO;QACf,IAAI;KACL,CACF,CAAC;IAEF,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,EAAU;IAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAC5B,sCAAsC,EAAE,EAAE,EAC1C;QACE,MAAM,EAAE,QAAQ;KACjB,CACF,CAAC;IAEF,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function handleCfaLevelsList(options: {
|
|
2
|
+
examId: string;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function handleCfaLevelShow(id: string): Promise<void>;
|
|
5
|
+
export declare function handleCfaLevelCreate(options: {
|
|
6
|
+
examId: string;
|
|
7
|
+
code: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
sortOrder?: string;
|
|
11
|
+
isVisible?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function handleCfaLevelUpdate(id: string, options: {
|
|
14
|
+
name?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
sortOrder?: string;
|
|
17
|
+
isVisible?: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
export declare function handleCfaLevelDelete(id: string): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=cfa-levels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfa-levels.d.ts","sourceRoot":"","sources":["../../src/commands/cfa-levels.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { apiCall, outputJSON } from "../lib/api.js";
|
|
2
|
-
export async function
|
|
3
|
-
const { data } = await apiCall(`/api/admin/v1/
|
|
2
|
+
export async function handleCfaLevelsList(options) {
|
|
3
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/exams/${options.examId}/levels`);
|
|
4
4
|
outputJSON({ status: "ok", data });
|
|
5
5
|
}
|
|
6
|
-
export async function
|
|
7
|
-
const { data } = await apiCall(`/api/admin/v1/
|
|
6
|
+
export async function handleCfaLevelShow(id) {
|
|
7
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/levels/${id}`);
|
|
8
8
|
outputJSON({ status: "ok", data });
|
|
9
9
|
}
|
|
10
|
-
export async function
|
|
10
|
+
export async function handleCfaLevelCreate(options) {
|
|
11
11
|
const body = {
|
|
12
12
|
code: options.code,
|
|
13
13
|
name: options.name,
|
|
@@ -18,13 +18,13 @@ export async function handleExamSubjectCreate(options) {
|
|
|
18
18
|
body.sortOrder = Number(options.sortOrder);
|
|
19
19
|
if (options.isVisible !== undefined)
|
|
20
20
|
body.isVisible = options.isVisible === "true";
|
|
21
|
-
const { data } = await apiCall(`/api/admin/v1/
|
|
21
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/exams/${options.examId}/levels`, {
|
|
22
22
|
method: "POST",
|
|
23
23
|
body,
|
|
24
24
|
});
|
|
25
25
|
outputJSON({ status: "ok", data });
|
|
26
26
|
}
|
|
27
|
-
export async function
|
|
27
|
+
export async function handleCfaLevelUpdate(id, options) {
|
|
28
28
|
const body = {};
|
|
29
29
|
if (options.name)
|
|
30
30
|
body.name = options.name;
|
|
@@ -34,16 +34,16 @@ export async function handleExamSubjectUpdate(id, options) {
|
|
|
34
34
|
body.sortOrder = Number(options.sortOrder);
|
|
35
35
|
if (options.isVisible !== undefined)
|
|
36
36
|
body.isVisible = options.isVisible === "true";
|
|
37
|
-
const { data } = await apiCall(`/api/admin/v1/
|
|
37
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/levels/${id}`, {
|
|
38
38
|
method: "PATCH",
|
|
39
39
|
body,
|
|
40
40
|
});
|
|
41
41
|
outputJSON({ status: "ok", data });
|
|
42
42
|
}
|
|
43
|
-
export async function
|
|
44
|
-
const { data } = await apiCall(`/api/admin/v1/
|
|
43
|
+
export async function handleCfaLevelDelete(id) {
|
|
44
|
+
const { data } = await apiCall(`/api/admin/v1/cfa/levels/${id}`, {
|
|
45
45
|
method: "DELETE",
|
|
46
46
|
});
|
|
47
47
|
outputJSON({ status: "ok", data });
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=cfa-levels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfa-levels.js","sourceRoot":"","sources":["../../src/commands/cfa-levels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAEzC;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAa,2BAA2B,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;IAC/F,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAU;IACjD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAW,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAC3E,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAO1C;IACC,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW;QAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAChE,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC;IAEnF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAW,2BAA2B,OAAO,CAAC,MAAM,SAAS,EAAE;QAC3F,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAU,EACV,OAKC;IAED,MAAM,IAAI,GAA4B,EAAE,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IACtF,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC;IAEnF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAW,4BAA4B,EAAE,EAAE,EAAE;QACzE,MAAM,EAAE,OAAO;QACf,IAAI;KACL,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAU;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAO,4BAA4B,EAAE,EAAE,EAAE;QACrE,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC"}
|