@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,300 @@
1
+ import { z } from 'zod';
2
+ import { CliApiError, CliValidationError } from '../../core/errors.js';
3
+ import { jsonResult, paginationSchema, optionalIdFilter, projectIdSchema } from '../shared.js';
4
+ import { createYApiServices } from './utils.js';
5
+ export function registerProjectCommands(registry) {
6
+ // ==================== 项目列表 ====================
7
+ registry.tool('project-list', {
8
+ ...optionalIdFilter,
9
+ ...paginationSchema,
10
+ }, async (input) => {
11
+ const { api } = createYApiServices();
12
+ const result = await api.listProjects({
13
+ page: input.page,
14
+ limit: input.limit,
15
+ group_id: input.groupId,
16
+ });
17
+ return jsonResult({
18
+ total: result.data.total,
19
+ projects: result.data.list.map((p) => ({
20
+ id: p._id,
21
+ name: p.name,
22
+ basepath: p.basepath,
23
+ groupId: p.group_id,
24
+ projectType: p.project_type,
25
+ desc: p.desc,
26
+ })),
27
+ });
28
+ }, '列出项目', { costHint: 'low', nextBestTools: ['project-get', 'project-token', 'interface-list'] });
29
+ // ==================== 项目详情 ====================
30
+ registry.tool('project-get', {
31
+ ...projectIdSchema,
32
+ }, async (input) => {
33
+ const { api } = createYApiServices();
34
+ const result = await api.getProject(input.projectId);
35
+ const p = result.data;
36
+ return jsonResult({
37
+ project: {
38
+ id: p._id,
39
+ name: p.name,
40
+ basepath: p.basepath,
41
+ groupId: p.group_id,
42
+ projectType: p.project_type,
43
+ desc: p.desc,
44
+ token: p.token,
45
+ env: p.env,
46
+ members: p.members?.length ?? 0,
47
+ },
48
+ });
49
+ }, '查看项目详情', { costHint: 'low', nextBestTools: ['interface-list', 'project-token', 'env'] });
50
+ // ==================== 项目 Token ====================
51
+ registry.tool('project-token', {
52
+ ...projectIdSchema,
53
+ }, async (input) => {
54
+ const { api } = createYApiServices();
55
+ const result = await api.getProjectToken(input.projectId);
56
+ return jsonResult({
57
+ projectId: input.projectId,
58
+ token: result.data.token,
59
+ });
60
+ }, '获取项目 Token', { costHint: 'low', nextBestTools: ['project-get', 'interface-list'] });
61
+ // ==================== 项目环境列表 ====================
62
+ registry.tool('env', {
63
+ projectId: z.coerce.number().describe('项目 ID'),
64
+ }, async (input) => {
65
+ const { api } = createYApiServices();
66
+ const result = await api.listProjectEnvs(input.projectId);
67
+ const envs = result.data
68
+ ? (Array.isArray(result.data) ? result.data : result.data.env ?? [])
69
+ : [];
70
+ return jsonResult({
71
+ projectId: input.projectId,
72
+ envs: envs.map((e) => ({
73
+ id: e._id,
74
+ name: e.name,
75
+ domain: e.domain,
76
+ })),
77
+ });
78
+ }, '列出项目环境', { costHint: 'low', nextBestTools: ['project-get', 'member', 'interface-list'] });
79
+ // ==================== 成员列表 ====================
80
+ registry.tool('member', {
81
+ projectId: z.coerce.number().describe('项目 ID'),
82
+ }, async (input) => {
83
+ const { api } = createYApiServices();
84
+ const result = await api.listProjectMembers(input.projectId);
85
+ return jsonResult({
86
+ projectId: input.projectId,
87
+ members: result.data.map((m) => ({
88
+ id: m._id,
89
+ uid: m.uid,
90
+ username: m.username,
91
+ role: m.role,
92
+ email: m.email,
93
+ })),
94
+ });
95
+ }, '列出项目成员', { costHint: 'low', nextBestTools: ['project-get', 'env', 'follow'] });
96
+ // ==================== 关注的项目列表 ====================
97
+ registry.tool('follow', {}, async () => {
98
+ const { api } = createYApiServices();
99
+ const result = await api.listFollowedProjects();
100
+ const projects = Array.isArray(result.data)
101
+ ? result.data
102
+ : result.data?.list ?? [];
103
+ return jsonResult({
104
+ projects: projects.map((p) => ({
105
+ id: p._id,
106
+ name: p.name,
107
+ basepath: p.basepath,
108
+ groupId: p.group_id,
109
+ projectType: p.project_type,
110
+ })),
111
+ });
112
+ }, '列出关注的项目', { costHint: 'low', nextBestTools: ['project-list', 'interface-list'] });
113
+ // ==================== 搜索项目 ====================
114
+ registry.tool('project-search', {
115
+ query: z.string().describe('搜索关键词'),
116
+ }, async (input) => {
117
+ const { api } = createYApiServices();
118
+ const result = await api.searchProjects(input.query);
119
+ const projects = Array.isArray(result.data)
120
+ ? result.data
121
+ : result.data?.list ?? [];
122
+ return jsonResult({
123
+ query: input.query,
124
+ total: projects.length,
125
+ projects: projects.map((p) => ({
126
+ id: p._id,
127
+ name: p.name,
128
+ basepath: p.basepath,
129
+ groupId: p.group_id,
130
+ projectType: p.project_type,
131
+ desc: p.desc,
132
+ })),
133
+ });
134
+ }, '按名称搜索项目', { costHint: 'low', nextBestTools: ['project-list', 'project-get'] });
135
+ // ==================== 重新生成项目 Token ====================
136
+ registry.tool('project-token-update', {
137
+ ...projectIdSchema,
138
+ }, async (input) => {
139
+ const { api } = createYApiServices();
140
+ const result = await api.updateProjectToken(input.projectId);
141
+ return jsonResult({
142
+ projectId: input.projectId,
143
+ token: result.data.token,
144
+ message: '项目 Token 已重新生成',
145
+ });
146
+ }, '重新生成项目 Token(旧的将失效)', { costHint: 'medium', nextBestTools: ['project-token', 'project-get'] });
147
+ // ==================== 更新项目环境 ====================
148
+ registry.tool('project-env-update', {
149
+ ...projectIdSchema,
150
+ envs: z
151
+ .string()
152
+ .describe('环境数组 JSON 字符串,例如: [{"name":"prod","domain":"https://api.example.com"}]'),
153
+ }, async (input) => {
154
+ let envs;
155
+ try {
156
+ const parsed = JSON.parse(input.envs);
157
+ if (!Array.isArray(parsed)) {
158
+ throw new Error('envs 必须是数组');
159
+ }
160
+ envs = parsed.map((e) => {
161
+ if (typeof e !== 'object' ||
162
+ e === null ||
163
+ typeof e.name !== 'string' ||
164
+ typeof e.domain !== 'string') {
165
+ throw new Error('envs 数组项必须包含 name 和 domain 字符串字段');
166
+ }
167
+ return { name: e.name, domain: e.domain };
168
+ });
169
+ }
170
+ catch (err) {
171
+ throw new CliValidationError(`envs 解析失败: ${err instanceof Error ? err.message : String(err)}`, '请提供合法的 JSON 数组,例如: --envs \'[{"name":"prod","domain":"https://api.example.com"}]\'');
172
+ }
173
+ const { api } = createYApiServices();
174
+ await api.updateProjectEnv({
175
+ project_id: input.projectId,
176
+ env: envs,
177
+ });
178
+ return jsonResult({
179
+ projectId: input.projectId,
180
+ envs,
181
+ message: '项目环境已更新',
182
+ });
183
+ }, '更新项目环境配置(覆盖现有环境)', { costHint: 'medium', nextBestTools: ['env', 'project-get'] });
184
+ // ==================== 更新项目标签 ====================
185
+ registry.tool('project-tag-update', {
186
+ ...projectIdSchema,
187
+ tags: z.string().describe('标签列表(逗号分隔,例如: 订单,支付,用户)'),
188
+ }, async (input) => {
189
+ const tag = input.tags
190
+ .split(',')
191
+ .map((t) => t.trim())
192
+ .filter((t) => t.length > 0);
193
+ if (tag.length === 0) {
194
+ throw new CliValidationError('tags 不能为空', '请提供至少一个标签,例如: --tags 订单,支付');
195
+ }
196
+ const { api } = createYApiServices();
197
+ await api.updateProjectTag({
198
+ project_id: input.projectId,
199
+ tag,
200
+ });
201
+ return jsonResult({
202
+ projectId: input.projectId,
203
+ tags: tag,
204
+ message: '项目标签已更新',
205
+ });
206
+ }, '更新项目标签(覆盖现有标签)', { costHint: 'medium', nextBestTools: ['project-get', 'project-list'] });
207
+ // ==================== 删除项目 ====================
208
+ registry.tool('project-delete', {
209
+ ...projectIdSchema,
210
+ }, async (input) => {
211
+ const { api } = createYApiServices();
212
+ await api.deleteProject(input.projectId);
213
+ return jsonResult({
214
+ action: 'delete',
215
+ projectId: input.projectId,
216
+ deleted: true,
217
+ });
218
+ }, '删除项目(不可恢复)', { costHint: 'medium', nextBestTools: ['project-list', 'project-get'] });
219
+ // ==================== 移除项目成员 ====================
220
+ registry.tool('project-member-remove', {
221
+ ...projectIdSchema,
222
+ uid: z.coerce.number().describe('成员用户 UID'),
223
+ }, async (input) => {
224
+ const { api } = createYApiServices();
225
+ await api.delProjectMember({
226
+ project_id: input.projectId,
227
+ uid: input.uid,
228
+ });
229
+ return jsonResult({
230
+ action: 'remove',
231
+ projectId: input.projectId,
232
+ uid: input.uid,
233
+ removed: true,
234
+ });
235
+ }, '从项目中移除成员', { costHint: 'medium', nextBestTools: ['member', 'project-get'] });
236
+ // ==================== 修改项目成员角色 ====================
237
+ registry.tool('project-member-role', {
238
+ ...projectIdSchema,
239
+ memberUid: z.coerce.number().describe('成员用户 UID'),
240
+ role: z
241
+ .enum(['owner', 'dev', 'guest', 'developer', 'viewer'])
242
+ .optional()
243
+ .default('developer')
244
+ .describe('目标角色(owner/dev/guest/developer/viewer)'),
245
+ }, async (input) => {
246
+ const { api } = createYApiServices();
247
+ await api.changeProjectMemberRole({
248
+ project_id: input.projectId,
249
+ member_uid: input.memberUid,
250
+ role: input.role,
251
+ });
252
+ return jsonResult({
253
+ action: 'change-role',
254
+ projectId: input.projectId,
255
+ uid: input.memberUid,
256
+ role: input.role,
257
+ });
258
+ }, '修改项目成员角色', { costHint: 'medium', nextBestTools: ['member', 'project-get'] });
259
+ // ==================== 项目 Mock 开关(全局) ====================
260
+ registry.tool('project-mock-toggle', {
261
+ ...projectIdSchema,
262
+ open: z
263
+ .union([z.literal('true'), z.literal('false')])
264
+ .default('true')
265
+ .describe('是否开启全局 Mock(true/false,默认 true)'),
266
+ }, async (input) => {
267
+ const { api } = createYApiServices();
268
+ const result = await api.upSetProject({
269
+ project_id: input.projectId,
270
+ is_mock_open: input.open === 'true',
271
+ });
272
+ if (result.errcode !== 0) {
273
+ throw new CliApiError(result.errmsg ?? '切换项目 Mock 开关失败');
274
+ }
275
+ return jsonResult({
276
+ projectId: input.projectId,
277
+ is_mock_open: input.open === 'true',
278
+ message: `项目 ${input.projectId} 全局 Mock 已${input.open === 'true' ? '开启' : '关闭'}`,
279
+ });
280
+ }, '切换项目全局 Mock 开关', { costHint: 'medium', nextBestTools: ['project-mock-script', 'project-get'] });
281
+ // ==================== 项目 Mock 脚本 ====================
282
+ registry.tool('project-mock-script', {
283
+ ...projectIdSchema,
284
+ script: z.string().describe('项目级 Mock 脚本(JS,沙箱执行)'),
285
+ }, async (input) => {
286
+ const { api } = createYApiServices();
287
+ const result = await api.upSetProject({
288
+ project_id: input.projectId,
289
+ project_mock_script: input.script,
290
+ });
291
+ if (result.errcode !== 0) {
292
+ throw new CliApiError(result.errmsg ?? '更新项目 Mock 脚本失败');
293
+ }
294
+ return jsonResult({
295
+ projectId: input.projectId,
296
+ message: `项目 ${input.projectId} Mock 脚本已更新`,
297
+ });
298
+ }, '设置项目级 Mock 脚本', { costHint: 'medium', nextBestTools: ['project-mock-toggle', 'project-get'] });
299
+ }
300
+ //# sourceMappingURL=register-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-project.js","sourceRoot":"","sources":["../../../src/tools/yapi/register-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliRegistry } from '../../core/cli-registry.js';
2
+ export declare function registerTestCommands(registry: CliRegistry): void;
@@ -0,0 +1,267 @@
1
+ import { z } from 'zod';
2
+ import { CliValidationError } from '../../core/errors.js';
3
+ import { jsonResult, paginationSchema, projectIdSchema } from '../shared.js';
4
+ import { createYApiServices } from './utils.js';
5
+ /** 安全解析可选 JSON 字符串,失败时抛出 CliValidationError */
6
+ function parseOptionalJson(raw, fieldName) {
7
+ if (raw === undefined || raw === null || raw === '')
8
+ return undefined;
9
+ try {
10
+ return JSON.parse(raw);
11
+ }
12
+ catch (err) {
13
+ throw new CliValidationError(`${fieldName} 解析失败: ${err instanceof Error ? err.message : String(err)}`, `请提供合法的 JSON 字符串,例如: --${fieldName.toLowerCase()} '{"key":"value"}'`);
14
+ }
15
+ }
16
+ export function registerTestCommands(registry) {
17
+ // ==================== Group 1 - HTTP 方法测试 ====================
18
+ registry.tool('test-get', {
19
+ url: z.string().describe('请求 URL'),
20
+ }, async (input) => {
21
+ const { api } = createYApiServices();
22
+ const result = await api.testGet(input.url);
23
+ return jsonResult({
24
+ method: 'GET',
25
+ url: input.url,
26
+ result: result.data,
27
+ });
28
+ }, '测试接口:发送 GET 请求', {
29
+ costHint: 'low',
30
+ nextBestTools: ['test-post', 'interface-get'],
31
+ });
32
+ registry.tool('test-post', {
33
+ url: z.string().describe('请求 URL'),
34
+ body: z.string().optional().describe('请求体 JSON 字符串'),
35
+ }, async (input) => {
36
+ const body = parseOptionalJson(input.body, 'body');
37
+ const { api } = createYApiServices();
38
+ const result = await api.testPost(input.url, body);
39
+ return jsonResult({
40
+ method: 'POST',
41
+ url: input.url,
42
+ result: result.data,
43
+ });
44
+ }, '测试接口:发送 POST 请求', {
45
+ costHint: 'low',
46
+ nextBestTools: ['test-get', 'request'],
47
+ });
48
+ registry.tool('test-put', {
49
+ url: z.string().describe('请求 URL'),
50
+ body: z.string().optional().describe('请求体 JSON 字符串'),
51
+ }, async (input) => {
52
+ const body = parseOptionalJson(input.body, 'body');
53
+ const { api } = createYApiServices();
54
+ const result = await api.testPut(input.url, body);
55
+ return jsonResult({
56
+ method: 'PUT',
57
+ url: input.url,
58
+ result: result.data,
59
+ });
60
+ }, '测试接口:发送 PUT 请求', {
61
+ costHint: 'low',
62
+ nextBestTools: ['test-get', 'request'],
63
+ });
64
+ registry.tool('test-delete', {
65
+ url: z.string().describe('请求 URL'),
66
+ }, async (input) => {
67
+ const { api } = createYApiServices();
68
+ const result = await api.testDelete(input.url);
69
+ return jsonResult({
70
+ method: 'DELETE',
71
+ url: input.url,
72
+ result: result.data,
73
+ });
74
+ }, '测试接口:发送 DELETE 请求', {
75
+ costHint: 'low',
76
+ nextBestTools: ['test-get', 'request'],
77
+ });
78
+ registry.tool('test-head', {
79
+ url: z.string().describe('请求 URL'),
80
+ }, async (input) => {
81
+ const { api } = createYApiServices();
82
+ const result = await api.testHead(input.url);
83
+ return jsonResult({
84
+ method: 'HEAD',
85
+ url: input.url,
86
+ result: result.data,
87
+ });
88
+ }, '测试接口:发送 HEAD 请求', {
89
+ costHint: 'low',
90
+ nextBestTools: ['test-get', 'interface-get'],
91
+ });
92
+ registry.tool('test-options', {
93
+ url: z.string().describe('请求 URL'),
94
+ }, async (input) => {
95
+ const { api } = createYApiServices();
96
+ const result = await api.testOptions(input.url);
97
+ return jsonResult({
98
+ method: 'OPTIONS',
99
+ url: input.url,
100
+ result: result.data,
101
+ });
102
+ }, '测试接口:发送 OPTIONS 请求', {
103
+ costHint: 'low',
104
+ nextBestTools: ['test-get', 'interface-get'],
105
+ });
106
+ registry.tool('test-patch', {
107
+ url: z.string().describe('请求 URL'),
108
+ body: z.string().optional().describe('请求体 JSON 字符串'),
109
+ }, async (input) => {
110
+ const body = parseOptionalJson(input.body, 'body');
111
+ const { api } = createYApiServices();
112
+ const result = await api.testPatch(input.url, body);
113
+ return jsonResult({
114
+ method: 'PATCH',
115
+ url: input.url,
116
+ result: result.data,
117
+ });
118
+ }, '测试接口:发送 PATCH 请求', {
119
+ costHint: 'low',
120
+ nextBestTools: ['test-get', 'request'],
121
+ });
122
+ // ==================== Group 2 - 上传与特殊测试 ====================
123
+ registry.tool('test-files-upload', {
124
+ url: z.string().describe('上传 URL'),
125
+ files: z.string().describe('文件数组 JSON,例如: [{"name":"a.txt","path":"/tmp/a.txt"}]'),
126
+ }, async (input) => {
127
+ const files = parseOptionalJson(input.files, 'files');
128
+ if (!files || !Array.isArray(files) || files.length === 0) {
129
+ throw new CliValidationError('files 必须是非空数组', '请提供 --files \'[{"name":"a.txt","path":"/tmp/a.txt"}]\'');
130
+ }
131
+ const { api } = createYApiServices();
132
+ const result = await api.testFilesUpload({ url: input.url, files });
133
+ return jsonResult({
134
+ action: 'files-upload',
135
+ url: input.url,
136
+ fileCount: files.length,
137
+ result: result.data,
138
+ });
139
+ }, '测试接口:批量文件上传', {
140
+ costHint: 'medium',
141
+ nextBestTools: ['test-get', 'interface-get'],
142
+ });
143
+ registry.tool('test-single-upload', {
144
+ url: z.string().describe('上传 URL'),
145
+ file: z.string().describe('单文件路径'),
146
+ }, async (input) => {
147
+ if (input.file.trim().length === 0) {
148
+ throw new CliValidationError('file 不能为空', '请提供 --file <path>');
149
+ }
150
+ const { api } = createYApiServices();
151
+ const result = await api.testSingleUpload({ url: input.url, file: input.file });
152
+ return jsonResult({
153
+ action: 'single-upload',
154
+ url: input.url,
155
+ file: input.file,
156
+ result: result.data,
157
+ });
158
+ }, '测试接口:单文件上传', {
159
+ costHint: 'medium',
160
+ nextBestTools: ['test-get', 'interface-get'],
161
+ });
162
+ registry.tool('test-http-code', {
163
+ url: z.string().describe('请求 URL'),
164
+ code: z.coerce.number().describe('期望 HTTP 状态码'),
165
+ }, async (input) => {
166
+ if (Number.isNaN(input.code)) {
167
+ throw new CliValidationError('无效的状态码', '请使用 --code <number>');
168
+ }
169
+ const { api } = createYApiServices();
170
+ const result = await api.testHttpCode({ url: input.url, code: input.code });
171
+ return jsonResult({
172
+ action: 'http-code',
173
+ url: input.url,
174
+ code: input.code,
175
+ result: result.data,
176
+ });
177
+ }, '测试接口:检查 HTTP 状态码', {
178
+ costHint: 'low',
179
+ nextBestTools: ['test-get', 'test-post'],
180
+ });
181
+ registry.tool('test-raw', {
182
+ url: z.string().describe('请求 URL'),
183
+ raw: z.string().describe('原始请求体'),
184
+ type: z.string().optional().describe('内容类型'),
185
+ }, async (input) => {
186
+ if (input.raw.length === 0) {
187
+ throw new CliValidationError('raw 不能为空', '请提供 --raw <text>');
188
+ }
189
+ const { api } = createYApiServices();
190
+ const result = await api.testRaw({
191
+ url: input.url,
192
+ raw: input.raw,
193
+ type: input.type,
194
+ });
195
+ return jsonResult({
196
+ action: 'raw',
197
+ url: input.url,
198
+ type: input.type,
199
+ result: result.data,
200
+ });
201
+ }, '测试接口:发送原始请求体', {
202
+ costHint: 'low',
203
+ nextBestTools: ['test-get', 'request'],
204
+ });
205
+ registry.tool('test-response', {
206
+ url: z.string().describe('请求 URL'),
207
+ }, async (input) => {
208
+ const { api } = createYApiServices();
209
+ const result = await api.testResponse(input.url);
210
+ return jsonResult({
211
+ action: 'response',
212
+ url: input.url,
213
+ result: result.data,
214
+ });
215
+ }, '测试接口:获取响应', {
216
+ costHint: 'low',
217
+ nextBestTools: ['test-get', 'test-http-code'],
218
+ });
219
+ // ==================== Group 3 - 开放接口 ====================
220
+ registry.tool('open-project-interface-data', {
221
+ ...projectIdSchema,
222
+ ...paginationSchema,
223
+ keyword: z.string().optional().describe('接口搜索关键词'),
224
+ }, async (input) => {
225
+ const { api } = createYApiServices();
226
+ const result = await api.projectInterfaceData({
227
+ project_id: input.projectId,
228
+ page: input.page,
229
+ limit: input.limit,
230
+ keyword: input.keyword,
231
+ });
232
+ return jsonResult({
233
+ projectId: input.projectId,
234
+ total: result.data.total,
235
+ list: result.data.list,
236
+ });
237
+ }, '开放接口:获取项目接口数据(含分页与搜索)', {
238
+ costHint: 'low',
239
+ nextBestTools: ['interface-list', 'open-run-auto-test'],
240
+ });
241
+ registry.tool('open-run-auto-test', {
242
+ pid: z.coerce.number().describe('项目 ID'),
243
+ colId: z.coerce.number().describe('测试集合 ID'),
244
+ envParamsId: z.coerce.number().optional().describe('环境参数 ID(可选)'),
245
+ }, async (input) => {
246
+ if (Number.isNaN(input.pid) || Number.isNaN(input.colId)) {
247
+ throw new CliValidationError('pid 和 colId 必须是合法数字', '请使用 --pid <number> --col-id <number>');
248
+ }
249
+ const { api } = createYApiServices();
250
+ const result = await api.runAutoTest({
251
+ pid: input.pid,
252
+ col_id: input.colId,
253
+ env_params_id: input.envParamsId,
254
+ });
255
+ return jsonResult({
256
+ action: 'run-auto-test',
257
+ pid: input.pid,
258
+ colId: input.colId,
259
+ envParamsId: input.envParamsId,
260
+ result: result.data,
261
+ });
262
+ }, '开放接口:触发自动化测试', {
263
+ costHint: 'high',
264
+ nextBestTools: ['interface-get', 'test-get', 'project-get'],
265
+ });
266
+ }
267
+ //# sourceMappingURL=register-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-test.js","sourceRoot":"","sources":["../../../src/tools/yapi/register-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliRegistry } from '../../core/cli-registry.js';
2
+ export declare function registerUtilCommands(registry: CliRegistry): void;