@cloudglab/yapi-cli 0.0.1

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 (115) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +131 -0
  3. package/dist/bin/yapi.d.ts +2 -0
  4. package/dist/bin/yapi.js +8 -0
  5. package/dist/bin/yapi.js.map +1 -0
  6. package/dist/cli.d.ts +1 -0
  7. package/dist/cli.js +203 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/changelog.d.ts +17 -0
  10. package/dist/core/changelog.js +117 -0
  11. package/dist/core/changelog.js.map +1 -0
  12. package/dist/core/cli-output.d.ts +13 -0
  13. package/dist/core/cli-output.js +65 -0
  14. package/dist/core/cli-output.js.map +1 -0
  15. package/dist/core/cli-registry.d.ts +38 -0
  16. package/dist/core/cli-registry.js +189 -0
  17. package/dist/core/cli-registry.js.map +1 -0
  18. package/dist/core/completion.d.ts +3 -0
  19. package/dist/core/completion.js +94 -0
  20. package/dist/core/completion.js.map +1 -0
  21. package/dist/core/doctor.d.ts +13 -0
  22. package/dist/core/doctor.js +124 -0
  23. package/dist/core/doctor.js.map +1 -0
  24. package/dist/core/errors.d.ts +38 -0
  25. package/dist/core/errors.js +74 -0
  26. package/dist/core/errors.js.map +1 -0
  27. package/dist/core/output.d.ts +27 -0
  28. package/dist/core/output.js +208 -0
  29. package/dist/core/output.js.map +1 -0
  30. package/dist/core/update-probe.d.ts +14 -0
  31. package/dist/core/update-probe.js +67 -0
  32. package/dist/core/update-probe.js.map +1 -0
  33. package/dist/core/write-guard.d.ts +25 -0
  34. package/dist/core/write-guard.js +36 -0
  35. package/dist/core/write-guard.js.map +1 -0
  36. package/dist/index.d.ts +4 -0
  37. package/dist/index.js +4 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/install.d.ts +13 -0
  40. package/dist/install.js +201 -0
  41. package/dist/install.js.map +1 -0
  42. package/dist/services/yapi/api.d.ts +696 -0
  43. package/dist/services/yapi/api.js +700 -0
  44. package/dist/services/yapi/api.js.map +1 -0
  45. package/dist/services/yapi/auth.d.ts +37 -0
  46. package/dist/services/yapi/auth.js +143 -0
  47. package/dist/services/yapi/auth.js.map +1 -0
  48. package/dist/services/yapi/authCache.d.ts +25 -0
  49. package/dist/services/yapi/authCache.js +80 -0
  50. package/dist/services/yapi/authCache.js.map +1 -0
  51. package/dist/services/yapi/cache.d.ts +27 -0
  52. package/dist/services/yapi/cache.js +88 -0
  53. package/dist/services/yapi/cache.js.map +1 -0
  54. package/dist/services/yapi/config.d.ts +12 -0
  55. package/dist/services/yapi/config.js +66 -0
  56. package/dist/services/yapi/config.js.map +1 -0
  57. package/dist/services/yapi/index.d.ts +6 -0
  58. package/dist/services/yapi/index.js +6 -0
  59. package/dist/services/yapi/index.js.map +1 -0
  60. package/dist/services/yapi/logger.d.ts +6 -0
  61. package/dist/services/yapi/logger.js +36 -0
  62. package/dist/services/yapi/logger.js.map +1 -0
  63. package/dist/services/yapi/types.d.ts +176 -0
  64. package/dist/services/yapi/types.js +2 -0
  65. package/dist/services/yapi/types.js.map +1 -0
  66. package/dist/tools/index.d.ts +2 -0
  67. package/dist/tools/index.js +5 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/shared.d.ts +33 -0
  70. package/dist/tools/shared.js +46 -0
  71. package/dist/tools/shared.js.map +1 -0
  72. package/dist/tools/yapi/docs-sync.d.ts +29 -0
  73. package/dist/tools/yapi/docs-sync.js +243 -0
  74. package/dist/tools/yapi/docs-sync.js.map +1 -0
  75. package/dist/tools/yapi/index.d.ts +6 -0
  76. package/dist/tools/yapi/index.js +7 -0
  77. package/dist/tools/yapi/index.js.map +1 -0
  78. package/dist/tools/yapi/register-auth.d.ts +2 -0
  79. package/dist/tools/yapi/register-auth.js +182 -0
  80. package/dist/tools/yapi/register-auth.js.map +1 -0
  81. package/dist/tools/yapi/register-group.d.ts +2 -0
  82. package/dist/tools/yapi/register-group.js +178 -0
  83. package/dist/tools/yapi/register-group.js.map +1 -0
  84. package/dist/tools/yapi/register-interface.d.ts +2 -0
  85. package/dist/tools/yapi/register-interface.js +359 -0
  86. package/dist/tools/yapi/register-interface.js.map +1 -0
  87. package/dist/tools/yapi/register-project.d.ts +2 -0
  88. package/dist/tools/yapi/register-project.js +300 -0
  89. package/dist/tools/yapi/register-project.js.map +1 -0
  90. package/dist/tools/yapi/register-test.d.ts +2 -0
  91. package/dist/tools/yapi/register-test.js +267 -0
  92. package/dist/tools/yapi/register-test.js.map +1 -0
  93. package/dist/tools/yapi/register-util.d.ts +2 -0
  94. package/dist/tools/yapi/register-util.js +565 -0
  95. package/dist/tools/yapi/register-util.js.map +1 -0
  96. package/dist/tools/yapi/register.d.ts +6 -0
  97. package/dist/tools/yapi/register.js +19 -0
  98. package/dist/tools/yapi/register.js.map +1 -0
  99. package/dist/tools/yapi/utils.d.ts +11 -0
  100. package/dist/tools/yapi/utils.js +28 -0
  101. package/dist/tools/yapi/utils.js.map +1 -0
  102. package/dist/version.d.ts +1 -0
  103. package/dist/version.js +2 -0
  104. package/dist/version.js.map +1 -0
  105. package/package.json +38 -0
  106. package/skills/yapi-cli/SKILL.md +126 -0
  107. package/skills/yapi-cli/reference/auth.md +106 -0
  108. package/skills/yapi-cli/reference/cli.md +60 -0
  109. package/skills/yapi-cli/reference/commands.md +152 -0
  110. package/skills/yapi-cli/reference/group.md +77 -0
  111. package/skills/yapi-cli/reference/install.md +82 -0
  112. package/skills/yapi-cli/reference/interface.md +185 -0
  113. package/skills/yapi-cli/reference/overview.md +52 -0
  114. package/skills/yapi-cli/reference/project.md +115 -0
  115. package/skills/yapi-cli/reference/test.md +130 -0
@@ -0,0 +1,359 @@
1
+ import { z } from 'zod';
2
+ import { CliConfigError, CliError, CliNetworkError } from '../../core/errors.js';
3
+ import { jsonResult, optionalTrimmedText, httpMethodEnum, paginationSchema, projectIdSchema, optionalIdFilter, } from '../shared.js';
4
+ import { createYApiServices, formatMethod, truncate } from './utils.js';
5
+ import { loadConfig, YAPI_HOME, YApiAuthService, YApiService } from '../../services/yapi/index.js';
6
+ export function registerInterfaceCommands(registry) {
7
+ // ==================== 搜索接口 ====================
8
+ registry.tool('search', {
9
+ q: z.string().describe('搜索关键词'),
10
+ ...optionalIdFilter,
11
+ limit: z.coerce.number().optional().default(20).describe('返回数量限制'),
12
+ }, async (input) => {
13
+ const { api } = createYApiServices();
14
+ const result = await api.searchInterfaces({
15
+ q: input.q,
16
+ limit: input.limit,
17
+ project_id: input.projectId,
18
+ group_id: input.groupId,
19
+ });
20
+ const items = result.data.list.map((item) => ({
21
+ id: item._id,
22
+ projectId: item.project_id,
23
+ title: item.title,
24
+ path: item.path,
25
+ method: formatMethod(item.method),
26
+ status: item.status,
27
+ projectName: item.project_name,
28
+ }));
29
+ return jsonResult({
30
+ total: result.data.total,
31
+ items,
32
+ });
33
+ }, '搜索 YApi 接口', { costHint: 'low', nextBestTools: ['interface-list', 'interface-get'] });
34
+ // ==================== 接口列表 ====================
35
+ registry.tool('interface-list', {
36
+ ...projectIdSchema,
37
+ ...paginationSchema,
38
+ status: z.string().optional().describe('筛选状态: done/undone'),
39
+ method: z.string().optional().describe('筛选方法: GET/POST/PUT/DELETE'),
40
+ }, async (input) => {
41
+ const { api } = createYApiServices();
42
+ const result = await api.listInterfaces({
43
+ project_id: input.projectId,
44
+ page: input.page,
45
+ limit: input.limit,
46
+ status: input.status,
47
+ method: input.method,
48
+ });
49
+ return jsonResult({
50
+ total: result.data.total,
51
+ interfaces: result.data.list.map((iface) => ({
52
+ id: iface._id,
53
+ catId: iface.catid,
54
+ title: iface.title,
55
+ path: iface.path,
56
+ method: formatMethod(iface.method),
57
+ status: iface.status,
58
+ tag: iface.tag,
59
+ })),
60
+ });
61
+ }, '列出项目中的接口', { costHint: 'low', nextBestTools: ['interface-get', 'project-get', 'category-list'] });
62
+ // ==================== 接口详情 ====================
63
+ registry.tool('interface-get', {
64
+ interfaceId: z.coerce.number().describe('接口 ID'),
65
+ }, async (input) => {
66
+ const { api } = createYApiServices();
67
+ const result = await api.getInterfaceDetail(input.interfaceId);
68
+ const iface = result.data;
69
+ return jsonResult({
70
+ interface: {
71
+ id: iface._id,
72
+ projectId: iface.project_id,
73
+ catId: iface.catid,
74
+ title: iface.title,
75
+ path: iface.path,
76
+ method: formatMethod(iface.method),
77
+ status: iface.status,
78
+ tag: iface.tag,
79
+ desc: iface.desc,
80
+ reqQuery: iface.req_query,
81
+ reqHeaders: iface.req_headers,
82
+ reqBodyType: iface.req_body_type,
83
+ reqBody: iface.req_body_other ? truncate(iface.req_body_other, 500) : undefined,
84
+ resBodyType: iface.res_body_type,
85
+ resBody: iface.res_body ? truncate(iface.res_body, 500) : undefined,
86
+ },
87
+ });
88
+ }, '查看接口详情', { costHint: 'low', nextBestTools: ['interface-list', 'log', 'request'] });
89
+ // ==================== 原始请求 ====================
90
+ registry.tool('request', {
91
+ path: z.string().describe('API 路径(如 /api/project/list)'),
92
+ method: httpMethodEnum.optional().default('GET').describe('HTTP 方法'),
93
+ body: optionalTrimmedText.describe('请求体 JSON(仅 POST/PUT)'),
94
+ projectId: z.coerce.number().optional().describe('项目 ID(用于注入 token)'),
95
+ }, async (input) => {
96
+ const config = loadConfig();
97
+ if (!config) {
98
+ throw new CliConfigError('请先运行 `yapi config-init` 初始化配置');
99
+ }
100
+ const auth = new YApiAuthService(YAPI_HOME);
101
+ const api = new YApiService(config.serverUrl, () => auth.getAuthHeaders(), () => auth.getToken() ?? config.token ?? '');
102
+ const path = input.path.startsWith('/') ? input.path : `/${input.path}`;
103
+ const url = `${config.serverUrl.replace(/\/+$/, '')}${path}`;
104
+ const headers = {
105
+ 'Content-Type': 'application/json',
106
+ ...auth.getAuthHeaders(),
107
+ };
108
+ const token = auth.getToken() ?? config.token;
109
+ if (token)
110
+ headers['Authorization'] = token;
111
+ let parsedBody;
112
+ if (input.body && (input.method === 'POST' || input.method === 'PUT' || input.method === 'PATCH')) {
113
+ parsedBody = input.body;
114
+ }
115
+ let response;
116
+ try {
117
+ response = await fetch(url, {
118
+ method: input.method,
119
+ headers,
120
+ body: parsedBody,
121
+ });
122
+ }
123
+ catch (error) {
124
+ throw new CliNetworkError(`请求失败: ${error instanceof Error ? error.message : String(error)}`);
125
+ }
126
+ const text = await response.text();
127
+ let data;
128
+ try {
129
+ data = JSON.parse(text);
130
+ }
131
+ catch {
132
+ data = text;
133
+ }
134
+ return jsonResult({
135
+ status: response.status,
136
+ data,
137
+ });
138
+ }, '发送原始 API 请求到 YApi 服务器', { costHint: 'low', nextBestTools: ['interface-get', 'interface-list'] });
139
+ // ==================== 接口创建 ====================
140
+ registry.tool('interface-create', {
141
+ ...projectIdSchema,
142
+ catId: z.coerce.number().describe('分类 ID'),
143
+ title: z.string().describe('接口标题'),
144
+ path: z.string().describe('接口路径(如 /api/user/list)'),
145
+ method: httpMethodEnum.default('GET').describe('HTTP 方法'),
146
+ desc: optionalTrimmedText.describe('接口描述'),
147
+ status: z.enum(['done', 'undone']).optional().default('undone').describe('开发状态'),
148
+ reqBodyType: z.string().optional().describe('请求体类型(如 json/form)'),
149
+ reqBody: optionalTrimmedText.describe('请求体示例(JSON)'),
150
+ resBodyType: z.string().optional().describe('响应体类型(如 json)'),
151
+ resBody: optionalTrimmedText.describe('响应体示例(JSON)'),
152
+ }, async (input) => {
153
+ const { api } = createYApiServices();
154
+ const result = await api.createInterface({
155
+ project_id: input.projectId,
156
+ catid: input.catId,
157
+ title: input.title,
158
+ path: input.path,
159
+ method: input.method,
160
+ status: input.status,
161
+ desc: input.desc,
162
+ req_body_type: input.reqBodyType,
163
+ req_body_other: input.reqBody,
164
+ res_body_type: input.resBodyType,
165
+ res_body: input.resBody,
166
+ });
167
+ return jsonResult({
168
+ interfaceId: result.data._id,
169
+ message: `接口「${input.title}」创建成功`,
170
+ });
171
+ }, '创建新接口', { costHint: 'medium', nextBestTools: ['interface-list', 'interface-get', 'category-list'] });
172
+ // ==================== 分类列表 ====================
173
+ registry.tool('category-list', {
174
+ ...projectIdSchema,
175
+ }, async (input) => {
176
+ const { api } = createYApiServices();
177
+ const result = await api.listCategories(input.projectId);
178
+ return jsonResult({
179
+ categories: result.data.map((c) => ({
180
+ id: c._id,
181
+ name: c.name,
182
+ desc: c.desc,
183
+ interfaceCount: c.list?.length ?? 0,
184
+ })),
185
+ });
186
+ }, '列出项目中的分类(目录)', { costHint: 'low', nextBestTools: ['interface-list', 'interface-get'] });
187
+ // ==================== 接口变更日志 ====================
188
+ registry.tool('log', {
189
+ interfaceId: z.coerce.number().describe('接口 ID'),
190
+ projectId: z.coerce.number().describe('项目 ID(日志查询必需)'),
191
+ ...paginationSchema,
192
+ }, async (input) => {
193
+ const { api } = createYApiServices();
194
+ const result = await api.listInterfaceLogs({
195
+ type: 'interface',
196
+ apid: input.interfaceId,
197
+ typeid: input.projectId,
198
+ page: input.page,
199
+ limit: input.limit,
200
+ });
201
+ return jsonResult({
202
+ apid: input.interfaceId,
203
+ total: result.data.total,
204
+ logs: result.data.list.map((l) => ({
205
+ id: l._id,
206
+ uid: l.uid,
207
+ username: l.username,
208
+ type: l.type,
209
+ content: l.content,
210
+ time: l.add_time,
211
+ })),
212
+ });
213
+ }, '查看接口变更日志', { costHint: 'low', nextBestTools: ['interface-get', 'interface-list'] });
214
+ // ==================== 菜单模式接口列表 ====================
215
+ registry.tool('interface-list-by-menu', {
216
+ ...projectIdSchema,
217
+ }, async (input) => {
218
+ const { api } = createYApiServices();
219
+ const result = await api.listInterfacesByMenu(input.projectId);
220
+ return jsonResult({
221
+ projectId: input.projectId,
222
+ menus: result.data.map((m) => ({
223
+ id: m._id,
224
+ title: m.title,
225
+ path: m.path,
226
+ method: formatMethod(m.method),
227
+ catId: m.catid,
228
+ })),
229
+ });
230
+ }, '以菜单模式列出项目中的接口', { costHint: 'low', nextBestTools: ['interface-list', 'category-list', 'interface-get'] });
231
+ // ==================== 获取自定义字段 ====================
232
+ registry.tool('interface-custom-field', {
233
+ ...projectIdSchema,
234
+ }, async (input) => {
235
+ const { api } = createYApiServices();
236
+ const result = await api.getCustomField(input.projectId);
237
+ if (result.errcode !== 0) {
238
+ throw new CliError(result.errmsg ?? '获取自定义字段失败', 14, 'API_ERROR');
239
+ }
240
+ return jsonResult({
241
+ projectId: input.projectId,
242
+ customField: result.data,
243
+ });
244
+ }, '获取项目的自定义字段配置', { costHint: 'low', nextBestTools: ['project-get', 'interface-list', 'interface-get'] });
245
+ // ==================== 更新接口排序 ====================
246
+ registry.tool('interface-up-index', {
247
+ id: z.coerce.number().describe('接口 ID'),
248
+ index: z.coerce.number().describe('新排序索引'),
249
+ }, async (input) => {
250
+ const { api } = createYApiServices();
251
+ const result = await api.upInterfaceIndex({
252
+ id: input.id,
253
+ index: input.index,
254
+ });
255
+ if (result.errcode !== 0) {
256
+ throw new CliError(result.errmsg ?? '更新接口排序失败', 14, 'API_ERROR');
257
+ }
258
+ return jsonResult({
259
+ id: input.id,
260
+ index: input.index,
261
+ message: `接口 ${input.id} 排序已更新为 ${input.index}`,
262
+ });
263
+ }, '更新接口排序', { costHint: 'medium', nextBestTools: ['interface-list', 'interface-get'] });
264
+ // ==================== 更新分类排序 ====================
265
+ registry.tool('interface-up-cat-index', {
266
+ catid: z.coerce.number().describe('分类 ID'),
267
+ index: z.coerce.number().describe('新排序索引'),
268
+ }, async (input) => {
269
+ const { api } = createYApiServices();
270
+ const result = await api.upCatIndex({
271
+ catid: input.catid,
272
+ index: input.index,
273
+ });
274
+ if (result.errcode !== 0) {
275
+ throw new CliError(result.errmsg ?? '更新分类排序失败', 14, 'API_ERROR');
276
+ }
277
+ return jsonResult({
278
+ catid: input.catid,
279
+ index: input.index,
280
+ message: `分类 ${input.catid} 排序已更新为 ${input.index}`,
281
+ });
282
+ }, '更新分类排序', { costHint: 'medium', nextBestTools: ['interface-list', 'category-list'] });
283
+ // ==================== 导入接口 ====================
284
+ registry.tool('interface-upload', {
285
+ ...projectIdSchema,
286
+ content: z.string().describe('导入内容(JSON/Swagger 字符串)'),
287
+ type: z.string().optional().default('swagger').describe('导入类型(默认 swagger)'),
288
+ }, async (input) => {
289
+ if (!input.content.trim()) {
290
+ throw new CliError('导入内容不能为空', 9, 'VALIDATION_ERROR');
291
+ }
292
+ const { api } = createYApiServices();
293
+ const result = await api.interUpload({
294
+ project_id: input.projectId,
295
+ content: input.content,
296
+ type: input.type ?? 'swagger',
297
+ });
298
+ if (result.errcode !== 0) {
299
+ throw new CliError(result.errmsg ?? '导入接口失败', 14, 'API_ERROR');
300
+ }
301
+ return jsonResult({
302
+ projectId: input.projectId,
303
+ type: input.type ?? 'swagger',
304
+ data: result.data,
305
+ message: '接口导入完成',
306
+ });
307
+ }, '导入接口(支持 swagger/json 等格式)', { costHint: 'medium', nextBestTools: ['interface-list', 'project-get'] });
308
+ // ==================== 下载浏览器扩展 CRX ====================
309
+ registry.tool('interface-download-crx', {}, async () => {
310
+ const { api } = createYApiServices();
311
+ const result = await api.downloadCrx();
312
+ return jsonResult({
313
+ action: 'download-crx',
314
+ data: result.data,
315
+ message: 'CRX 下载链接已获取',
316
+ });
317
+ }, '接口工具:下载浏览器扩展 CRX 安装包', { costHint: 'low', nextBestTools: ['install', 'interface-get'] });
318
+ // ==================== 接口 Mock 开关 ====================
319
+ registry.tool('interface-mock-toggle', {
320
+ interfaceId: z.coerce.number().describe('接口 ID'),
321
+ open: z
322
+ .union([z.literal('true'), z.literal('false')])
323
+ .default('true')
324
+ .describe('是否开启 Mock(true/false,默认 true)'),
325
+ }, async (input) => {
326
+ const { api } = createYApiServices();
327
+ const result = await api.updateInterface({
328
+ id: input.interfaceId,
329
+ is_mock_open: input.open === 'true',
330
+ });
331
+ if (result.errcode !== 0) {
332
+ throw new CliError(result.errmsg ?? '切换 Mock 开关失败', 14, 'API_ERROR');
333
+ }
334
+ return jsonResult({
335
+ interfaceId: input.interfaceId,
336
+ is_mock_open: input.open === 'true',
337
+ message: `接口 ${input.interfaceId} Mock 已${input.open === 'true' ? '开启' : '关闭'}`,
338
+ });
339
+ }, '切换接口 Mock 开关', { costHint: 'medium', nextBestTools: ['interface-mock-script', 'interface-get'] });
340
+ // ==================== 接口 Mock 脚本 ====================
341
+ registry.tool('interface-mock-script', {
342
+ interfaceId: z.coerce.number().describe('接口 ID'),
343
+ script: z.string().describe('Mock 脚本内容(JS,沙箱执行)'),
344
+ }, async (input) => {
345
+ const { api } = createYApiServices();
346
+ const result = await api.updateInterface({
347
+ id: input.interfaceId,
348
+ mock_custom_script: input.script,
349
+ });
350
+ if (result.errcode !== 0) {
351
+ throw new CliError(result.errmsg ?? '更新 Mock 脚本失败', 14, 'API_ERROR');
352
+ }
353
+ return jsonResult({
354
+ interfaceId: input.interfaceId,
355
+ message: `接口 ${input.interfaceId} Mock 脚本已更新`,
356
+ });
357
+ }, '设置接口自定义 Mock 脚本', { costHint: 'medium', nextBestTools: ['interface-mock-toggle', 'interface-get'] });
358
+ }
359
+ //# sourceMappingURL=register-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-interface.js","sourceRoot":"","sources":["../../../src/tools/yapi/register-interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliRegistry } from '../../core/cli-registry.js';
2
+ export declare function registerProjectCommands(registry: CliRegistry): void;