@cloudglab/yapi-cli 0.0.5 → 0.0.7
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/CHANGELOG.md +13 -0
- package/README.md +17 -2
- package/dist/cli.js +121 -23
- package/dist/cli.js.map +1 -1
- package/dist/core/cli-output.d.ts +1 -1
- package/dist/core/cli-output.js +114 -25
- package/dist/core/cli-output.js.map +1 -1
- package/dist/core/errors.js +36 -3
- package/dist/core/errors.js.map +1 -1
- package/dist/core/http-metrics.d.ts +31 -0
- package/dist/core/http-metrics.js +35 -0
- package/dist/core/http-metrics.js.map +1 -0
- package/dist/core/output.d.ts +18 -4
- package/dist/core/output.js +105 -22
- package/dist/core/output.js.map +1 -1
- package/dist/core/update-probe.d.ts +4 -1
- package/dist/core/update-probe.js +43 -2
- package/dist/core/update-probe.js.map +1 -1
- package/dist/core/url-parser.d.ts +20 -0
- package/dist/core/url-parser.js +237 -0
- package/dist/core/url-parser.js.map +1 -0
- package/dist/install.js +10 -1
- package/dist/install.js.map +1 -1
- package/dist/manifest.json +22 -2
- package/dist/services/yapi/api.d.ts +12 -1
- package/dist/services/yapi/api.js +96 -10
- package/dist/services/yapi/api.js.map +1 -1
- package/dist/tools/shared.d.ts +2 -2
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/yapi/register-auth.js +12 -12
- package/dist/tools/yapi/register-auth.js.map +1 -1
- package/dist/tools/yapi/register-group.js +16 -16
- package/dist/tools/yapi/register-group.js.map +1 -1
- package/dist/tools/yapi/register-interface.js +123 -55
- package/dist/tools/yapi/register-interface.js.map +1 -1
- package/dist/tools/yapi/register-project.js +92 -31
- package/dist/tools/yapi/register-project.js.map +1 -1
- package/dist/tools/yapi/register-test.js +11 -11
- package/dist/tools/yapi/register-test.js.map +1 -1
- package/dist/tools/yapi/register-util.js +124 -34
- package/dist/tools/yapi/register-util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/ai-cli-optimization-plan.md +412 -0
- package/package.json +1 -1
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
# yapi-cli 面向 AI 的 CLI 深度优化方案
|
|
2
|
+
|
|
3
|
+
## 目标
|
|
4
|
+
|
|
5
|
+
阅读参考项目 `zentao-cli` 后,可以把它的 AI 友好设计拆成 5 类能力:
|
|
6
|
+
|
|
7
|
+
1. 更省 token 的输出
|
|
8
|
+
2. 更短路径的 help / list / 下一步引导
|
|
9
|
+
3. 更明确的参数语义与错误信息
|
|
10
|
+
4. 更低干扰的更新探针
|
|
11
|
+
5. 更少请求次数的缓存、指标与快照命令
|
|
12
|
+
|
|
13
|
+
`yapi-cli` 当前已经有一部分基础能力,但还没有把这些能力真正串成完整体验。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 参考项目里最值得迁移的设计
|
|
18
|
+
|
|
19
|
+
### 1. 输出分级,而不是只有 `--json`
|
|
20
|
+
|
|
21
|
+
`zentao-cli` 的核心不是“能输出 JSON”,而是“能输出适合 AI 首轮探测的 JSON”。
|
|
22
|
+
|
|
23
|
+
建议保留 3 档:
|
|
24
|
+
|
|
25
|
+
- `compact`:默认给 AI,用于首轮探测
|
|
26
|
+
- `normal`:默认给脚本/排查,保留主要字段
|
|
27
|
+
- `verbose`:完整原始 JSON
|
|
28
|
+
|
|
29
|
+
其中 `compact` 的关键规则:
|
|
30
|
+
|
|
31
|
+
- 长文本字段截断
|
|
32
|
+
- 长数组只保留前 N 项,同时补 `total`
|
|
33
|
+
- 大对象只保留高价值字段
|
|
34
|
+
- 自动补 `meta.requestCount`、`meta.durationMs`、`meta.cacheHit`
|
|
35
|
+
|
|
36
|
+
这能显著降低 token 消耗,也更适合 agent 做后续决策。
|
|
37
|
+
|
|
38
|
+
### 2. help 不是罗列命令,而是引导下一步
|
|
39
|
+
|
|
40
|
+
`zentao-cli` 的 help / list 设计重点:
|
|
41
|
+
|
|
42
|
+
- 先告诉用户怎么开始
|
|
43
|
+
- 按场景分组命令
|
|
44
|
+
- 每个命令给出成本提示
|
|
45
|
+
- 每个命令给出“下一步推荐命令”
|
|
46
|
+
|
|
47
|
+
这对 AI 特别重要,因为它可以减少 agent 自己摸索命令链路的成本。
|
|
48
|
+
|
|
49
|
+
### 3. 参数描述要写业务语义,不只是类型
|
|
50
|
+
|
|
51
|
+
`zentao-cli` 不是只写“这个参数是 number/string”,而是写:
|
|
52
|
+
|
|
53
|
+
- 这个参数的业务意义
|
|
54
|
+
- 推荐值
|
|
55
|
+
- 优先级和互斥关系
|
|
56
|
+
- 历史兼容行为
|
|
57
|
+
- 某些版本是否会忽略该参数
|
|
58
|
+
|
|
59
|
+
这会直接降低 AI 调错参数、误解参数含义、反复试错的概率。
|
|
60
|
+
|
|
61
|
+
### 4. 错误信息要能直接指导修复
|
|
62
|
+
|
|
63
|
+
好错误信息不只是 `message + hint`,而是:
|
|
64
|
+
|
|
65
|
+
- 失败分类
|
|
66
|
+
- 已尝试的 fallback
|
|
67
|
+
- 实际请求目标
|
|
68
|
+
- 返回状态与关键响应
|
|
69
|
+
- 用户下一步应检查什么
|
|
70
|
+
|
|
71
|
+
这种设计对 agent 很关键,因为它能减少“再试一次看看”的盲试行为。
|
|
72
|
+
|
|
73
|
+
### 5. 更新检查要轻量且异步
|
|
74
|
+
|
|
75
|
+
`zentao-cli` 的更新检查不会阻塞正常命令,也不会每次都打 npm。
|
|
76
|
+
|
|
77
|
+
建议保留这些原则:
|
|
78
|
+
|
|
79
|
+
- 内置命令跳过更新探针
|
|
80
|
+
- 每天最多检查一次
|
|
81
|
+
- 后台异步执行
|
|
82
|
+
- 提示写到 `stderr`
|
|
83
|
+
- 允许环境变量关闭
|
|
84
|
+
|
|
85
|
+
### 6. 快照命令比让 AI 串多跳命令更省
|
|
86
|
+
|
|
87
|
+
`zentao-cli` 专门设计“快照命令”,把原本多次请求、多次拼装的信息压缩成一次调用。
|
|
88
|
+
|
|
89
|
+
对 AI 来说,这比单纯增加更多原子命令更有价值。
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## yapi-cli 当前已经具备的基础
|
|
94
|
+
|
|
95
|
+
这些不用重做,应直接复用:
|
|
96
|
+
|
|
97
|
+
### 已有基础能力
|
|
98
|
+
|
|
99
|
+
- `src/core/cli-registry.ts` 已支持严格参数解析、`--key value` / `--key=value`、未知参数报错、布尔/数字/数组/object coercion
|
|
100
|
+
- `src/core/cli-registry.ts` 已有 `metadata.costHint` 和 `metadata.nextBestTools`
|
|
101
|
+
- `src/core/manifest.ts` 已有命令到分组的映射能力
|
|
102
|
+
- `src/tools/yapi/register-*.ts` 里已经给不少命令写了 `costHint` / `nextBestTools`
|
|
103
|
+
- `src/core/errors.ts` 已有 `CliError` 分层
|
|
104
|
+
- `src/install.ts` 已有 install / update 的引导和 ASCII banner
|
|
105
|
+
|
|
106
|
+
### 当前短板
|
|
107
|
+
|
|
108
|
+
- `src/cli.ts` 只有 `--json`,没有 `compact|normal|verbose`
|
|
109
|
+
- `src/core/output.ts` 的 `json` 仍是完整 `JSON.stringify`
|
|
110
|
+
- `src/core/cli-output.ts` 还没有消费 `costHint` / `nextBestTools`
|
|
111
|
+
- `src/core/cli-output.ts` 的 `list` 仍等于总 help,没有独立分组导航
|
|
112
|
+
- `src/core/update-probe.ts` 仍是同步阻塞式 `npm view`
|
|
113
|
+
- `src/services/yapi/api.ts` 还没有统一请求指标、GET 缓存、cacheHit 元信息
|
|
114
|
+
- 业务命令还缺少面向 AI 的“快照命令”
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 可落地改造清单
|
|
119
|
+
|
|
120
|
+
下面按优先级排序,建议按 P0 → P1 → P2 实施。
|
|
121
|
+
|
|
122
|
+
## P0:一周内就能落地,且收益最大
|
|
123
|
+
|
|
124
|
+
### P0-1. 引入 `--output compact|normal|verbose`
|
|
125
|
+
|
|
126
|
+
目标:让默认输出变成 AI 友好,而不是完整 JSON。
|
|
127
|
+
|
|
128
|
+
改造点:
|
|
129
|
+
|
|
130
|
+
- `src/cli.ts`
|
|
131
|
+
- 新增全局 `--output compact|normal|verbose|pretty`
|
|
132
|
+
- 保留 `--json` 作为兼容写法,等价到 `--output verbose` 或 `--output normal`,需要明确最终语义
|
|
133
|
+
- `src/tools/shared.ts`
|
|
134
|
+
- 把 `setOutputFormat()` 从二值改成多档模式
|
|
135
|
+
- `src/core/output.ts`
|
|
136
|
+
- 增加 `compact` / `normal` / `verbose` 三档 JSON 序列化策略
|
|
137
|
+
- 抽出统一 `summarizeForCompact()`
|
|
138
|
+
- 为数组输出自动补 `{ total, items }`
|
|
139
|
+
- 为长文本字段做裁剪
|
|
140
|
+
|
|
141
|
+
建议默认值:
|
|
142
|
+
|
|
143
|
+
- 终端默认 `pretty`
|
|
144
|
+
- 显式要求结构化结果时默认 `compact`
|
|
145
|
+
|
|
146
|
+
如果不想改变现有默认行为,也可以:
|
|
147
|
+
|
|
148
|
+
- `pretty` 保持现状
|
|
149
|
+
- `--json` 改为 `compact`
|
|
150
|
+
- `--output verbose` 才返回完整 JSON
|
|
151
|
+
|
|
152
|
+
这是最稳妥的兼容方案。
|
|
153
|
+
|
|
154
|
+
### P0-2. 让 `help` / `list` 真正消费 metadata
|
|
155
|
+
|
|
156
|
+
目标:把已经存在的数据层能力变成用户可见能力。
|
|
157
|
+
|
|
158
|
+
改造点:
|
|
159
|
+
|
|
160
|
+
- `src/core/cli-output.ts`
|
|
161
|
+
- `printHelp()` 改成按分组展示业务命令
|
|
162
|
+
- `printCommandHelp()` 增加:
|
|
163
|
+
- 预估成本 `costHint`
|
|
164
|
+
- 下一步 `nextBestTools`
|
|
165
|
+
- 输出模式提示
|
|
166
|
+
- `src/core/manifest.ts`
|
|
167
|
+
- 扩展分组显示名映射,不直接暴露 `auth/group/project/interface/util/test` 这种内部代号
|
|
168
|
+
- `src/tools/yapi/groups.ts`
|
|
169
|
+
- 补充适合 AI 的分组文案,例如:
|
|
170
|
+
- 开始使用
|
|
171
|
+
- 账号认证
|
|
172
|
+
- 项目与分组
|
|
173
|
+
- 接口查询与检索
|
|
174
|
+
- 导出与实用工具
|
|
175
|
+
- 自动化测试
|
|
176
|
+
|
|
177
|
+
建议输出风格:
|
|
178
|
+
|
|
179
|
+
- 总 help 只推荐少量高价值命令
|
|
180
|
+
- `list` 再给完整分组清单
|
|
181
|
+
- 每个帮助结尾都有“下一步”
|
|
182
|
+
|
|
183
|
+
### P0-3. 提升错误信息密度
|
|
184
|
+
|
|
185
|
+
目标:减少 agent 盲试。
|
|
186
|
+
|
|
187
|
+
改造点:
|
|
188
|
+
|
|
189
|
+
- `src/core/errors.ts`
|
|
190
|
+
- 新增更细的错误 code 到可读消息映射
|
|
191
|
+
- 统一把 hint 设计成“下一步操作建议”
|
|
192
|
+
- `src/services/yapi/api.ts`
|
|
193
|
+
- 对登录失败、401、403、404、网络超时、空响应、JSON 解析失败分别给不同提示
|
|
194
|
+
- 把已尝试的 fallback 写进错误消息
|
|
195
|
+
|
|
196
|
+
建议优先补这些高频场景:
|
|
197
|
+
|
|
198
|
+
- 配置缺失
|
|
199
|
+
- 登录失败
|
|
200
|
+
- 服务端不可达
|
|
201
|
+
- token 失效
|
|
202
|
+
- 项目/接口不存在
|
|
203
|
+
- 后端返回非 JSON
|
|
204
|
+
|
|
205
|
+
### P0-4. 把更新检查改成轻量探针
|
|
206
|
+
|
|
207
|
+
目标:避免 `yapi update` 之外的命令被同步 `npm view` 拖慢。
|
|
208
|
+
|
|
209
|
+
改造点:
|
|
210
|
+
|
|
211
|
+
- `src/core/update-probe.ts`
|
|
212
|
+
- 改成缓存文件 + 最短检查间隔
|
|
213
|
+
- 支持后台异步查询
|
|
214
|
+
- 支持 `YAPI_SKIP_UPDATE_CHECK=true`
|
|
215
|
+
- `src/cli.ts`
|
|
216
|
+
- 对业务命令执行前或执行后触发非阻塞探针
|
|
217
|
+
- `help/list/version/install/update` 默认跳过
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## P1:明显提升“AI 用起来顺不顺”
|
|
222
|
+
|
|
223
|
+
### P1-1. 增加请求指标与轻量缓存
|
|
224
|
+
|
|
225
|
+
目标:让 AI 能知道“这次调用贵不贵”“有没有命中缓存”。
|
|
226
|
+
|
|
227
|
+
改造点:
|
|
228
|
+
|
|
229
|
+
- 新增 `src/core/http-metrics.ts`
|
|
230
|
+
- 记录本次命令的 `requestCount`
|
|
231
|
+
- 记录最近一次 `durationMs`
|
|
232
|
+
- `src/services/yapi/api.ts`
|
|
233
|
+
- 抽出统一 `request()` 封装
|
|
234
|
+
- GET 请求加短时内存缓存
|
|
235
|
+
- 命中缓存时返回 `cacheHit: true`
|
|
236
|
+
- `src/core/output.ts`
|
|
237
|
+
- 把指标统一塞到 `meta`
|
|
238
|
+
|
|
239
|
+
建议缓存策略:
|
|
240
|
+
|
|
241
|
+
- 仅缓存 GET
|
|
242
|
+
- TTL 10~15 秒
|
|
243
|
+
- key 包含 URL + query + 登录态标识
|
|
244
|
+
|
|
245
|
+
### P1-2. 增加 2~3 个快照命令
|
|
246
|
+
|
|
247
|
+
目标:减少 AI 串联多个命令的成本。
|
|
248
|
+
|
|
249
|
+
建议优先做这些:
|
|
250
|
+
|
|
251
|
+
- `getProjectSnapshot`
|
|
252
|
+
- 输出项目基础信息 + 分类数量 + 接口数量 + 最近更新接口
|
|
253
|
+
- `getInterfaceSnapshot`
|
|
254
|
+
- 输出接口基础信息 + 请求/响应摘要 + 测试状态 + 最近变更
|
|
255
|
+
- `getWorkspaceSnapshot`
|
|
256
|
+
- 输出我的账号、可访问项目、最近活跃项目、关注项
|
|
257
|
+
|
|
258
|
+
推荐放在:
|
|
259
|
+
|
|
260
|
+
- `src/tools/yapi/register-project.ts`
|
|
261
|
+
- `src/tools/yapi/register-interface.ts`
|
|
262
|
+
- 或新增 `src/tools/yapi/register-snapshot.ts`
|
|
263
|
+
|
|
264
|
+
如果要新增分组,可以把 `src/tools/yapi/groups.ts` 从 6 组扩为 7 组,加入 `snapshot`。
|
|
265
|
+
|
|
266
|
+
### P1-3. 给参数描述补业务语义
|
|
267
|
+
|
|
268
|
+
目标:help 直接可用,不需要翻源码猜参数。
|
|
269
|
+
|
|
270
|
+
做法:
|
|
271
|
+
|
|
272
|
+
- 逐步检查 `src/tools/yapi/register-*.ts`
|
|
273
|
+
- 把只写“项目 ID / 接口 ID / 关键字”的描述,补成:
|
|
274
|
+
- 传什么
|
|
275
|
+
- 推荐格式
|
|
276
|
+
- 适用场景
|
|
277
|
+
- 是否支持多个值
|
|
278
|
+
- 与其他参数的优先级关系
|
|
279
|
+
|
|
280
|
+
优先补这些高频命令:
|
|
281
|
+
|
|
282
|
+
- `listProjects`
|
|
283
|
+
- `getProjectDetail`
|
|
284
|
+
- `searchInterfaces`
|
|
285
|
+
- `getInterfaceDetail`
|
|
286
|
+
- `exportProject`
|
|
287
|
+
- `runAutoTest`
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## P2:中期优化,锦上添花
|
|
292
|
+
|
|
293
|
+
### P2-1. 角色化 help 视图
|
|
294
|
+
|
|
295
|
+
如果后续命令继续增多,可以引入角色视图:
|
|
296
|
+
|
|
297
|
+
- `dev`
|
|
298
|
+
- `qa`
|
|
299
|
+
- `pm`
|
|
300
|
+
- `admin`
|
|
301
|
+
|
|
302
|
+
这样 `help` 与 `list` 可以只展示更相关的命令集合。
|
|
303
|
+
|
|
304
|
+
目前 `yapi-cli` 命令规模还不算特别大,这项不是第一优先级。
|
|
305
|
+
|
|
306
|
+
### P2-2. URL / 页面名转命令
|
|
307
|
+
|
|
308
|
+
如果用户经常从浏览器页面复制 YApi URL,再转成 CLI 调用,可以考虑支持:
|
|
309
|
+
|
|
310
|
+
- 从项目 URL 自动提取 `projectId`
|
|
311
|
+
- 从接口 URL 自动提取 `interfaceId`
|
|
312
|
+
|
|
313
|
+
这个能力很适合 AI 与人混合使用场景,但不是当前最急的点。
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 推荐实施顺序
|
|
318
|
+
|
|
319
|
+
### 第一阶段:先把“输出 + help”做好
|
|
320
|
+
|
|
321
|
+
优先做:
|
|
322
|
+
|
|
323
|
+
1. `--output compact|normal|verbose`
|
|
324
|
+
2. `help/list` 消费 `costHint` 和 `nextBestTools`
|
|
325
|
+
3. `compact` 输出裁剪规则
|
|
326
|
+
|
|
327
|
+
原因:
|
|
328
|
+
|
|
329
|
+
- 改动范围集中
|
|
330
|
+
- 不需要改后端协议
|
|
331
|
+
- 对 AI 体验提升最大
|
|
332
|
+
- 风险比缓存和快照命令更低
|
|
333
|
+
|
|
334
|
+
### 第二阶段:再做“错误 + 更新探针”
|
|
335
|
+
|
|
336
|
+
优先做:
|
|
337
|
+
|
|
338
|
+
1. `src/services/yapi/api.ts` 错误归因增强
|
|
339
|
+
2. `src/core/update-probe.ts` 轻量化
|
|
340
|
+
|
|
341
|
+
原因:
|
|
342
|
+
|
|
343
|
+
- 这两项能显著降低误报和等待时间
|
|
344
|
+
- 不会影响业务命令接口定义
|
|
345
|
+
|
|
346
|
+
### 第三阶段:最后做“缓存 + 快照命令”
|
|
347
|
+
|
|
348
|
+
优先做:
|
|
349
|
+
|
|
350
|
+
1. 请求指标
|
|
351
|
+
2. GET 短缓存
|
|
352
|
+
3. 快照命令
|
|
353
|
+
|
|
354
|
+
原因:
|
|
355
|
+
|
|
356
|
+
- 这部分收益大,但需要更谨慎设计返回结构
|
|
357
|
+
- 需要额外验证是否会误导用户读取到短时缓存数据
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 最小可执行版本(建议直接开做)
|
|
362
|
+
|
|
363
|
+
如果只做一轮小改动,我建议锁定下面 4 项:
|
|
364
|
+
|
|
365
|
+
1. `src/cli.ts` + `src/tools/shared.ts` + `src/core/output.ts`
|
|
366
|
+
- 加入 `--output compact|normal|verbose`
|
|
367
|
+
2. `src/core/cli-output.ts`
|
|
368
|
+
- 单命令帮助展示 `costHint`、`nextBestTools`
|
|
369
|
+
- `list` 改为按组展示
|
|
370
|
+
3. `src/core/update-probe.ts`
|
|
371
|
+
- 改成每日一次、非阻塞探针
|
|
372
|
+
4. `src/services/yapi/api.ts`
|
|
373
|
+
- 登录/网络/API 错误信息更具体
|
|
374
|
+
|
|
375
|
+
这 4 项做完,`yapi-cli` 的 AI 可用性就会有明显提升,而且不会引入太多新命令和新概念。
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 建议暂时不要照搬的点
|
|
380
|
+
|
|
381
|
+
下面这些不建议第一轮就照搬:
|
|
382
|
+
|
|
383
|
+
- 复杂角色系统
|
|
384
|
+
- 过多快照命令
|
|
385
|
+
- 过深的 URL 到命令自动推导
|
|
386
|
+
- 为所有命令都做高度定制 pretty 输出
|
|
387
|
+
|
|
388
|
+
原因很简单:
|
|
389
|
+
|
|
390
|
+
- `yapi-cli` 当前最缺的不是“功能数量”,而是“默认输出质量”和“help 的引导能力”
|
|
391
|
+
- 先把这两件事补齐,收益最大
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## 结论
|
|
396
|
+
|
|
397
|
+
`zentao-cli` 最值得迁移到 `yapi-cli` 的,不是单个命令,而是一套设计原则:
|
|
398
|
+
|
|
399
|
+
- 默认给 AI 低成本输出
|
|
400
|
+
- 用 help 明确下一步,而不是让 AI 猜
|
|
401
|
+
- 参数描述写业务语义,而不是只写类型
|
|
402
|
+
- 错误信息直接指向修复动作
|
|
403
|
+
- 用快照命令减少多跳调用
|
|
404
|
+
|
|
405
|
+
对 `yapi-cli` 来说,最现实的落地方向是:
|
|
406
|
+
|
|
407
|
+
1. 先改输出分级
|
|
408
|
+
2. 再改 help / list / metadata 展示
|
|
409
|
+
3. 再补错误与更新探针
|
|
410
|
+
4. 最后做缓存、指标和快照命令
|
|
411
|
+
|
|
412
|
+
这样改,投入小,收益快,也最适合当前仓库的演进节奏。
|