@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,565 @@
1
+ import { existsSync, mkdirSync, copyFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { z } from 'zod';
5
+ import { CliConfigError, CliError, CliValidationError } from '../../core/errors.js';
6
+ import { exportFormatEnum, jsonResult, optionalBool, paginationSchema, projectIdSchema } from '../shared.js';
7
+ import { createYApiServices } from './utils.js';
8
+ import { CLI_VERSION } from '../../version.js';
9
+ import { syncDocsToProject, watchAndSync, formatSyncResult } from './docs-sync.js';
10
+ const userBaseSchema = {
11
+ ...paginationSchema,
12
+ };
13
+ const colBaseSchema = {
14
+ ...projectIdSchema,
15
+ };
16
+ export function registerUtilCommands(registry) {
17
+ registry.tool('user-list', userBaseSchema, async (input) => {
18
+ const { api } = createYApiServices();
19
+ const result = await api.listUsers({ page: input.page, limit: input.limit });
20
+ return jsonResult({
21
+ action: 'list',
22
+ total: result.data.total,
23
+ users: result.data.list.map((u) => ({
24
+ id: u._id,
25
+ uid: u.uid,
26
+ username: u.username,
27
+ email: u.email,
28
+ role: u.role,
29
+ })),
30
+ });
31
+ }, '用户管理:列出用户', {
32
+ costHint: 'low',
33
+ nextBestTools: ['user-search', 'project-list'],
34
+ });
35
+ registry.tool('user-search', {
36
+ query: z.string().describe('搜索关键词'),
37
+ }, async (input) => {
38
+ const { api } = createYApiServices();
39
+ const result = await api.searchUsers(input.query);
40
+ return jsonResult({
41
+ action: 'search',
42
+ users: result.data.map((u) => ({
43
+ id: u._id,
44
+ uid: u.uid,
45
+ username: u.username,
46
+ email: u.email,
47
+ })),
48
+ });
49
+ }, '用户管理:搜索用户', {
50
+ costHint: 'low',
51
+ nextBestTools: ['user-list', 'project-get'],
52
+ });
53
+ registry.tool('export', {
54
+ ...projectIdSchema,
55
+ format: exportFormatEnum,
56
+ }, async (input) => {
57
+ const { api } = createYApiServices();
58
+ const data = input.format === 'json'
59
+ ? await api.exportProjectJson(input.projectId)
60
+ : input.format === 'swagger'
61
+ ? await api.exportProjectSwagger(input.projectId)
62
+ : await api.exportProjectOpenAPI3(input.projectId);
63
+ return jsonResult({
64
+ projectId: input.projectId,
65
+ format: input.format,
66
+ data,
67
+ });
68
+ }, '导出项目数据(JSON/Swagger/OpenAPI3)', {
69
+ costHint: 'low',
70
+ nextBestTools: ['interface-list', 'project-get'],
71
+ });
72
+ registry.tool('col-list', colBaseSchema, async (input) => {
73
+ const { api } = createYApiServices();
74
+ const result = await api.listCollections(input.projectId);
75
+ return jsonResult({
76
+ projectId: input.projectId,
77
+ collections: result.data.map((c) => ({
78
+ id: c._id,
79
+ name: c.name,
80
+ addTime: c.add_time,
81
+ })),
82
+ });
83
+ }, '测试集合管理:列出集合', {
84
+ costHint: 'low',
85
+ nextBestTools: ['col-cases', 'interface-list'],
86
+ });
87
+ registry.tool('col-cases', {
88
+ ...projectIdSchema,
89
+ colId: z.coerce.number().describe('集合 ID'),
90
+ }, async (input) => {
91
+ if (Number.isNaN(input.colId)) {
92
+ throw new CliValidationError('无效的集合 ID', '请使用 --col-id <number>');
93
+ }
94
+ const { api } = createYApiServices();
95
+ const result = await api.listCollectionCases(input.colId);
96
+ return jsonResult({
97
+ projectId: input.projectId,
98
+ colId: input.colId,
99
+ cases: result.data.map((c) => ({
100
+ id: c._id,
101
+ caseType: c.case_type,
102
+ index: c.index,
103
+ })),
104
+ });
105
+ }, '测试集合管理:查看用例', {
106
+ costHint: 'low',
107
+ nextBestTools: ['col-list', 'interface-get'],
108
+ });
109
+ registry.tool('col-create', {
110
+ ...projectIdSchema,
111
+ name: z.string().describe('集合名称'),
112
+ desc: z.string().optional().describe('集合描述'),
113
+ }, async (input) => {
114
+ const { api } = createYApiServices();
115
+ const result = await api.createCollection({
116
+ project_id: input.projectId,
117
+ name: input.name,
118
+ desc: input.desc,
119
+ });
120
+ return jsonResult({
121
+ action: 'create',
122
+ projectId: input.projectId,
123
+ colId: result.data._id,
124
+ name: input.name,
125
+ });
126
+ }, '测试集合管理:创建集合', {
127
+ costHint: 'medium',
128
+ nextBestTools: ['col-list', 'col-cases'],
129
+ });
130
+ registry.tool('col-delete', {
131
+ colId: z.coerce.number().describe('集合 ID'),
132
+ }, async (input) => {
133
+ if (Number.isNaN(input.colId)) {
134
+ throw new CliValidationError('无效的集合 ID', '请使用 --col-id <number>');
135
+ }
136
+ const { api } = createYApiServices();
137
+ await api.deleteCollection(input.colId);
138
+ return jsonResult({
139
+ action: 'delete',
140
+ colId: input.colId,
141
+ deleted: true,
142
+ });
143
+ }, '测试集合管理:删除集合', {
144
+ costHint: 'medium',
145
+ nextBestTools: ['col-list', 'col-cases'],
146
+ });
147
+ registry.tool('case-add', {
148
+ colId: z.coerce.number().describe('集合 ID'),
149
+ method: z.string().optional().default('GET').describe('HTTP 方法'),
150
+ url: z.string().optional().describe('请求路径'),
151
+ }, async (input) => {
152
+ if (Number.isNaN(input.colId)) {
153
+ throw new CliValidationError('无效的集合 ID', '请使用 --col-id <number>');
154
+ }
155
+ const { api } = createYApiServices();
156
+ const result = await api.addTestCase({
157
+ col_id: input.colId,
158
+ req_method: input.method,
159
+ req_url: input.url,
160
+ });
161
+ return jsonResult({
162
+ action: 'add',
163
+ colId: input.colId,
164
+ caseId: result.data._id,
165
+ method: input.method,
166
+ url: input.url,
167
+ });
168
+ }, '测试用例管理:添加用例', {
169
+ costHint: 'medium',
170
+ nextBestTools: ['col-cases', 'case-run'],
171
+ });
172
+ registry.tool('case-delete', {
173
+ caseId: z.coerce.number().describe('用例 ID'),
174
+ }, async (input) => {
175
+ if (Number.isNaN(input.caseId)) {
176
+ throw new CliValidationError('无效的用例 ID', '请使用 --case-id <number>');
177
+ }
178
+ const { api } = createYApiServices();
179
+ await api.deleteTestCase(input.caseId);
180
+ return jsonResult({
181
+ action: 'delete',
182
+ caseId: input.caseId,
183
+ deleted: true,
184
+ });
185
+ }, '测试用例管理:删除用例', {
186
+ costHint: 'medium',
187
+ nextBestTools: ['col-cases', 'case-run'],
188
+ });
189
+ registry.tool('case-run', {
190
+ colId: z.coerce.number().describe('集合 ID'),
191
+ }, async (input) => {
192
+ if (Number.isNaN(input.colId)) {
193
+ throw new CliValidationError('无效的集合 ID', '请使用 --col-id <number>');
194
+ }
195
+ const { api } = createYApiServices();
196
+ const result = await api.runTestCaseScript({ col_id: input.colId });
197
+ return jsonResult({
198
+ action: 'run',
199
+ colId: input.colId,
200
+ result: result.data,
201
+ });
202
+ }, '测试用例管理:运行集合脚本', {
203
+ costHint: 'high',
204
+ nextBestTools: ['col-cases', 'open-run-auto-test'],
205
+ });
206
+ registry.tool('self-update', {
207
+ channel: z.enum(['latest', 'next']).optional().default('latest').describe('npm 发布渠道'),
208
+ }, async (input) => {
209
+ const currentVersion = CLI_VERSION;
210
+ const packageName = 'yapi-cli';
211
+ const url = `https://registry.npmjs.org/${packageName}/${input.channel}`;
212
+ const response = await fetch(url);
213
+ if (!response.ok) {
214
+ throw new CliConfigError(`检查更新失败(${response.status})`, '请稍后重试或检查网络');
215
+ }
216
+ const data = await response.json();
217
+ const latestVersion = data.version;
218
+ if (latestVersion === currentVersion) {
219
+ return jsonResult({
220
+ current: currentVersion,
221
+ latest: latestVersion,
222
+ upToDate: true,
223
+ message: '已是最新版本',
224
+ });
225
+ }
226
+ return jsonResult({
227
+ current: currentVersion,
228
+ latest: latestVersion,
229
+ upToDate: false,
230
+ message: `有新版本可用: ${latestVersion}(当前: ${currentVersion})\n运行 npm install -g ${packageName} 更新`,
231
+ });
232
+ }, '检查 CLI 更新', {
233
+ costHint: 'medium',
234
+ nextBestTools: ['install', 'version'],
235
+ });
236
+ registry.tool('docs-sync', {
237
+ file: z.string().describe('Markdown 文档路径'),
238
+ projectId: z.coerce.number().describe('目标项目 ID'),
239
+ catId: z.coerce.number().describe('目标分类(目录)ID'),
240
+ merge: z.enum(['create', 'update', 'skip']).default('create').describe('已有接口处理策略'),
241
+ watch: optionalBool.describe('监听文件变更'),
242
+ }, async (input) => {
243
+ const { api } = createYApiServices();
244
+ if (input.watch) {
245
+ process.stdout.write(`开始监听 ${input.file} ...\n`);
246
+ await watchAndSync(api, input.projectId, input.catId, input.file, (result) => {
247
+ process.stdout.write(`\n[${new Date().toLocaleTimeString()}] 同步完成:\n`);
248
+ process.stdout.write(`${formatSyncResult(result)}\n`);
249
+ });
250
+ const first = await syncDocsToProject(api, input.projectId, input.catId, input.file, input.merge);
251
+ process.stdout.write(`首次同步完成:\n${formatSyncResult(first)}\n`);
252
+ return jsonResult({
253
+ watching: true,
254
+ message: `正在监听 ${input.file},按 Ctrl+C 停止`,
255
+ syncResult: first,
256
+ });
257
+ }
258
+ const result = await syncDocsToProject(api, input.projectId, input.catId, input.file, input.merge);
259
+ return jsonResult({
260
+ details: result,
261
+ message: formatSyncResult(result),
262
+ });
263
+ }, '同步 Markdown 文档到 YApi 项目', {
264
+ costHint: 'medium',
265
+ nextBestTools: ['self-update', 'interface-list'],
266
+ });
267
+ registry.tool('install-skill', {
268
+ skillPath: z.string().optional().describe('自定义 skill 文件路径'),
269
+ yes: z.coerce.boolean().optional().default(false).describe('覆盖已有配置'),
270
+ }, async (input) => {
271
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
272
+ const opencodeAgentDir = join(process.env.HOME || '', '.opencode', 'agent');
273
+ if (input.skillPath) {
274
+ const target = join(opencodeAgentDir, 'yapi-cli.md');
275
+ if (!existsSync(dirname(target))) {
276
+ mkdirSync(dirname(target), { recursive: true });
277
+ }
278
+ copyFileSync(input.skillPath, target);
279
+ return jsonResult({ message: `Skill 已安装到: ${target}` });
280
+ }
281
+ const possiblePaths = [
282
+ join(moduleDir, '..', '..', '..', 'skills', 'yapi-cli', 'SKILL.md'),
283
+ join(moduleDir, '..', '..', 'skills', 'yapi-cli', 'SKILL.md'),
284
+ ];
285
+ for (const skillPath of possiblePaths) {
286
+ try {
287
+ if (existsSync(skillPath)) {
288
+ const target = join(opencodeAgentDir, 'yapi-cli.md');
289
+ if (!existsSync(dirname(target))) {
290
+ mkdirSync(dirname(target), { recursive: true });
291
+ }
292
+ copyFileSync(skillPath, target);
293
+ return jsonResult({ message: `Skill 已安装到: ${target}` });
294
+ }
295
+ }
296
+ catch {
297
+ continue;
298
+ }
299
+ }
300
+ throw new CliValidationError('未找到内置 skill 文件。可通过 --skillPath 指定路径');
301
+ }, '安装 OpenCode skill 文件', {
302
+ costHint: 'medium',
303
+ nextBestTools: ['self-update', 'config-init'],
304
+ });
305
+ // ==================== 用户详情 ====================
306
+ registry.tool('user-get', {
307
+ uid: z.coerce.number().describe('用户 UID'),
308
+ }, async (input) => {
309
+ const { api } = createYApiServices();
310
+ const result = await api.findUserById(input.uid);
311
+ return jsonResult({
312
+ action: 'get',
313
+ uid: input.uid,
314
+ user: result.data,
315
+ });
316
+ }, '用户管理:获取用户详情', {
317
+ costHint: 'low',
318
+ nextBestTools: ['user-list', 'user-search'],
319
+ });
320
+ // ==================== 修改密码 ====================
321
+ registry.tool('user-change-password', {
322
+ oldPassword: z.string().describe('旧密码'),
323
+ newPassword: z.string().describe('新密码'),
324
+ }, async (input) => {
325
+ if (input.oldPassword.length === 0 || input.newPassword.length === 0) {
326
+ throw new CliValidationError('旧密码和新密码不能为空', '请同时提供 --old-password 和 --new-password');
327
+ }
328
+ const { api } = createYApiServices();
329
+ await api.changePassword({
330
+ old_password: input.oldPassword,
331
+ new_password: input.newPassword,
332
+ });
333
+ return jsonResult({
334
+ action: 'change-password',
335
+ message: '密码已更新',
336
+ });
337
+ }, '用户管理:修改当前用户密码', {
338
+ costHint: 'medium',
339
+ nextBestTools: ['whoami', 'user-list'],
340
+ });
341
+ // ==================== 用户注册 ====================
342
+ registry.tool('user-register', {
343
+ username: z.string().describe('用户名'),
344
+ password: z.string().describe('密码'),
345
+ email: z.string().email().describe('邮箱'),
346
+ role: z
347
+ .enum(['admin', 'owner', 'dev', 'guest', 'viewer'])
348
+ .optional()
349
+ .describe('角色(admin/owner/dev/guest/viewer)'),
350
+ }, async (input) => {
351
+ if (input.username.length === 0) {
352
+ throw new CliValidationError('用户名不能为空', '请提供 --username');
353
+ }
354
+ if (input.password.length === 0) {
355
+ throw new CliValidationError('密码不能为空', '请提供 --password');
356
+ }
357
+ const { api } = createYApiServices();
358
+ const result = await api.userRegister({
359
+ username: input.username,
360
+ password: input.password,
361
+ email: input.email,
362
+ role: input.role,
363
+ });
364
+ if (result.errcode !== 0) {
365
+ throw new CliError(result.errmsg ?? '用户注册失败', 14, 'API_ERROR');
366
+ }
367
+ return jsonResult({
368
+ action: 'user-register',
369
+ userId: result.data?._id,
370
+ username: input.username,
371
+ email: input.email,
372
+ role: input.role,
373
+ message: `用户 ${input.username} 注册成功`,
374
+ });
375
+ }, '用户管理:注册新用户(需要管理员权限)', {
376
+ costHint: 'medium',
377
+ nextBestTools: ['user-list', 'user-search'],
378
+ });
379
+ // ==================== 用户删除 ====================
380
+ registry.tool('user-delete', {
381
+ uid: z.coerce.number().describe('用户 UID'),
382
+ }, async (input) => {
383
+ const { api } = createYApiServices();
384
+ await api.userDelete(input.uid);
385
+ return jsonResult({
386
+ action: 'user-delete',
387
+ uid: input.uid,
388
+ message: `用户 ${input.uid} 已删除`,
389
+ });
390
+ }, '用户管理:删除用户(需要管理员权限,不可恢复)', {
391
+ costHint: 'medium',
392
+ nextBestTools: ['user-list', 'user-search'],
393
+ });
394
+ // ==================== Token 登录 ====================
395
+ registry.tool('login-by-token', {
396
+ token: z.string().describe('YApi 用户 token'),
397
+ }, async (input) => {
398
+ if (input.token.length === 0) {
399
+ throw new CliValidationError('token 不能为空', '请提供 --token');
400
+ }
401
+ const { api } = createYApiServices();
402
+ const result = await api.loginByToken(input.token);
403
+ if (result.errcode !== 0) {
404
+ throw new CliError(result.errmsg ?? 'token 登录失败', 14, 'API_ERROR');
405
+ }
406
+ return jsonResult({
407
+ action: 'login-by-token',
408
+ user: result.data,
409
+ message: `token 验证通过:${result.data?.username ?? ''}`,
410
+ });
411
+ }, '用户管理:使用 token 静默登录(校验 token 有效性)', {
412
+ costHint: 'low',
413
+ nextBestTools: ['whoami', 'project-list'],
414
+ });
415
+ // ==================== 用户头像 ====================
416
+ registry.tool('user-avatar', {
417
+ uid: z.coerce.number().describe('用户 UID'),
418
+ }, async (input) => {
419
+ const { api } = createYApiServices();
420
+ const result = await api.getUserAvatar(input.uid);
421
+ return jsonResult({
422
+ action: 'user-avatar',
423
+ uid: input.uid,
424
+ avatar: result.data,
425
+ });
426
+ }, '用户管理:获取用户头像 URL', {
427
+ costHint: 'low',
428
+ nextBestTools: ['user-list', 'user-search'],
429
+ });
430
+ // ==================== 上传头像 ====================
431
+ registry.tool('user-upload-avatar', {
432
+ uid: z.coerce.number().describe('用户 UID'),
433
+ base64: z.string().describe('图片 base64 编码(不含 data:image/...;base64, 前缀)'),
434
+ }, async (input) => {
435
+ if (input.base64.length === 0) {
436
+ throw new CliValidationError('base64 不能为空', '请提供 --base64');
437
+ }
438
+ const { api } = createYApiServices();
439
+ const result = await api.uploadUserAvatar({
440
+ uid: input.uid,
441
+ base64: input.base64,
442
+ });
443
+ if (result.errcode !== 0) {
444
+ throw new CliError(result.errmsg ?? '上传头像失败', 14, 'API_ERROR');
445
+ }
446
+ return jsonResult({
447
+ action: 'user-upload-avatar',
448
+ uid: input.uid,
449
+ message: '头像上传成功',
450
+ });
451
+ }, '用户管理:上传用户头像', {
452
+ costHint: 'medium',
453
+ nextBestTools: ['user-avatar', 'user-list'],
454
+ });
455
+ // ==================== 当前用户参与的项目 ====================
456
+ registry.tool('user-projects', {}, async () => {
457
+ const { api } = createYApiServices();
458
+ const result = await api.listUserProjects();
459
+ const projects = Array.isArray(result.data)
460
+ ? result.data
461
+ : result.data?.list ?? [];
462
+ return jsonResult({
463
+ action: 'user-projects',
464
+ total: projects.length,
465
+ projects: projects.map((p) => ({
466
+ id: p._id,
467
+ name: p.name,
468
+ basepath: p.basepath,
469
+ groupId: p.group_id,
470
+ projectType: p.project_type,
471
+ })),
472
+ });
473
+ }, '用户管理:列出当前用户参与的项目', {
474
+ costHint: 'low',
475
+ nextBestTools: ['project-list', 'group-list'],
476
+ });
477
+ // ==================== 动态日志(按更新时间) ====================
478
+ registry.tool('log-list-by-update', {
479
+ apid: z.coerce.number().describe('接口 ID'),
480
+ type: z.string().optional().default('interface').describe('日志类型,默认 interface'),
481
+ limit: z.coerce.number().optional().describe('返回条数限制'),
482
+ }, async (input) => {
483
+ const { api } = createYApiServices();
484
+ const result = await api.listLogsByUpdate({
485
+ type: input.type,
486
+ apid: input.apid,
487
+ limit: input.limit,
488
+ });
489
+ return jsonResult({
490
+ action: 'logs-by-update',
491
+ apid: input.apid,
492
+ type: input.type,
493
+ logs: result.data,
494
+ });
495
+ }, '动态日志:按接口 ID 与更新时间查询', {
496
+ costHint: 'low',
497
+ nextBestTools: ['interface-list', 'interface-get'],
498
+ });
499
+ // ==================== 用例列表(按变量参数过滤) ====================
500
+ registry.tool('col-case-list-by-var-params', {
501
+ ...projectIdSchema,
502
+ colId: z.coerce.number().describe('集合 ID'),
503
+ }, async (input) => {
504
+ const { api } = createYApiServices();
505
+ const result = await api.getCaseListByVariableParams(input.colId);
506
+ return jsonResult({
507
+ action: 'case-list-by-var',
508
+ projectId: input.projectId,
509
+ colId: input.colId,
510
+ cases: result.data,
511
+ });
512
+ }, '测试用例:按变量参数过滤列出用例', {
513
+ costHint: 'low',
514
+ nextBestTools: ['col-cases', 'interface-list'],
515
+ });
516
+ // ==================== 用例排序 ====================
517
+ registry.tool('col-case-up-index', {
518
+ colId: z.coerce.number().describe('集合 ID'),
519
+ ids: z.string().describe('用例 ID 列表(逗号分隔,例如: 1,2,3)'),
520
+ }, async (input) => {
521
+ const parsed = input.ids
522
+ .split(',')
523
+ .map((s) => s.trim())
524
+ .filter((s) => s.length > 0)
525
+ .map((s) => Number(s));
526
+ if (parsed.length === 0 || parsed.some((n) => Number.isNaN(n))) {
527
+ throw new CliValidationError('ids 必须是合法的逗号分隔数字', '请提供 --ids 例如: --ids 1,2,3');
528
+ }
529
+ const { api } = createYApiServices();
530
+ await api.upCaseIndex({ col_id: input.colId, ids: parsed });
531
+ return jsonResult({
532
+ action: 'case-up-index',
533
+ colId: input.colId,
534
+ ids: parsed,
535
+ });
536
+ }, '测试用例:调整用例排序', {
537
+ costHint: 'medium',
538
+ nextBestTools: ['col-cases', 'col-list'],
539
+ });
540
+ // ==================== 集合排序 ====================
541
+ registry.tool('col-up-index', {
542
+ ...projectIdSchema,
543
+ ids: z.string().describe('集合 ID 列表(逗号分隔,例如: 1,2,3)'),
544
+ }, async (input) => {
545
+ const parsed = input.ids
546
+ .split(',')
547
+ .map((s) => s.trim())
548
+ .filter((s) => s.length > 0)
549
+ .map((s) => Number(s));
550
+ if (parsed.length === 0 || parsed.some((n) => Number.isNaN(n))) {
551
+ throw new CliValidationError('ids 必须是合法的逗号分隔数字', '请提供 --ids 例如: --ids 1,2,3');
552
+ }
553
+ const { api } = createYApiServices();
554
+ await api.upColIndex({ project_id: input.projectId, ids: parsed });
555
+ return jsonResult({
556
+ action: 'col-up-index',
557
+ projectId: input.projectId,
558
+ ids: parsed,
559
+ });
560
+ }, '测试集合:调整集合排序', {
561
+ costHint: 'medium',
562
+ nextBestTools: ['col-list', 'col-cases'],
563
+ });
564
+ }
565
+ //# sourceMappingURL=register-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-util.js","sourceRoot":"","sources":["../../../src/tools/yapi/register-util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CliRegistry } from '../../core/cli-registry.js';
2
+ /**
3
+ * 注册所有 YApi CLI 命令。
4
+ * 按领域拆分到各子模块,方便维护。
5
+ */
6
+ export declare function registerYApiCommands(registry: CliRegistry): void;
@@ -0,0 +1,19 @@
1
+ import { registerAuthCommands } from './register-auth.js';
2
+ import { registerGroupCommands } from './register-group.js';
3
+ import { registerProjectCommands } from './register-project.js';
4
+ import { registerInterfaceCommands } from './register-interface.js';
5
+ import { registerUtilCommands } from './register-util.js';
6
+ import { registerTestCommands } from './register-test.js';
7
+ /**
8
+ * 注册所有 YApi CLI 命令。
9
+ * 按领域拆分到各子模块,方便维护。
10
+ */
11
+ export function registerYApiCommands(registry) {
12
+ registerAuthCommands(registry);
13
+ registerGroupCommands(registry);
14
+ registerProjectCommands(registry);
15
+ registerInterfaceCommands(registry);
16
+ registerUtilCommands(registry);
17
+ registerTestCommands(registry);
18
+ }
19
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/tools/yapi/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAqB;IACxD,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { YApiService, YApiAuthService, requireConfig } from '../../services/yapi/index.js';
2
+ /** 从配置创建 YApi 服务实例 */
3
+ export declare function createYApiServices(): {
4
+ config: ReturnType<typeof requireConfig>;
5
+ auth: YApiAuthService;
6
+ api: YApiService;
7
+ };
8
+ /** 格式化方法/状态标签 */
9
+ export declare function formatMethod(method: string): string;
10
+ /** 截断字符串 */
11
+ export declare function truncate(text: string, maxLength: number): string;