@linkl/link-openapi-skills 0.0.0-stage → 0.1.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.
Files changed (30) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +70 -2
  3. package/bin/cli.js +125 -0
  4. package/openapi/basic-data.json +432 -0
  5. package/openapi/general-service.json +106 -0
  6. package/openapi/international-logistics.json +3439 -0
  7. package/openapi/last-mile-order.json +1643 -0
  8. package/openapi/settlement-service.json +603 -0
  9. package/openapi/user-service.json +289 -0
  10. package/package.json +18 -3
  11. package/skills/link-basic-data/SKILL.md +22 -0
  12. package/skills/link-basic-data/references/api-reference.md +22 -0
  13. package/skills/link-general-service/SKILL.md +22 -0
  14. package/skills/link-general-service/references/api-reference.md +12 -0
  15. package/skills/link-international-logistics/SKILL.md +22 -0
  16. package/skills/link-international-logistics/references/api-reference.md +62 -0
  17. package/skills/link-last-mile-order/SKILL.md +22 -0
  18. package/skills/link-last-mile-order/references/api-reference.md +37 -0
  19. package/skills/link-openapi-integration/SKILL.md +41 -0
  20. package/skills/link-openapi-integration/references/API-INVENTORY.md +33 -0
  21. package/skills/link-openapi-integration/references/basic-data.md +9 -0
  22. package/skills/link-openapi-integration/references/general-service.md +7 -0
  23. package/skills/link-openapi-integration/references/international-logistics.md +17 -0
  24. package/skills/link-openapi-integration/references/last-mile-order.md +12 -0
  25. package/skills/link-openapi-integration/references/settlement-service.md +9 -0
  26. package/skills/link-openapi-integration/references/user-service.md +9 -0
  27. package/skills/link-settlement-service/SKILL.md +22 -0
  28. package/skills/link-settlement-service/references/api-reference.md +22 -0
  29. package/skills/link-user-service/SKILL.md +22 -0
  30. package/skills/link-user-service/references/api-reference.md +22 -0
package/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ Copyright (c) LINK. All rights reserved.
2
+
3
+ This package is provided for authorized LINK OpenAPI integration.
4
+ Redistribution and commercial use are subject to the publisher's license terms.
package/README.md CHANGED
@@ -1,3 +1,71 @@
1
- # Temporary Holding Version
1
+ # LINK OpenAPI Skills npm Installer
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ > 发布前请将 package.json 中的 npm scope `@linkl` 替换为你实际拥有的 npm organization/scope(如果你没有该 scope 的发布权限)。
4
+
5
+ ## 一键安装
6
+
7
+ ```bash
8
+ npx -y @linkl/link-openapi-skills@latest install
9
+ ```
10
+
11
+ 默认安装到当前项目的 Claude Code、Codex、Cursor 和 Spring AI 项目目录:
12
+
13
+ - Claude Code:`.claude/skills/`
14
+ - Codex:`.agents/skills/`
15
+ - Cursor:`.cursor/skills/`
16
+ - Spring AI:`src/main/resources/agent-skills/`
17
+
18
+ 通用 Agent Skills 目录:
19
+
20
+ ```bash
21
+ npx -y @linkl/link-openapi-skills@latest install --agent agents
22
+ ```
23
+
24
+ 只安装指定客户端:
25
+
26
+ ```bash
27
+ npx -y @linkl/link-openapi-skills@latest install --agent claude
28
+ npx -y @linkl/link-openapi-skills@latest install --agent codex
29
+ npx -y @linkl/link-openapi-skills@latest install --agent cursor
30
+ ```
31
+
32
+ 安装到个人全局目录:
33
+
34
+ ```bash
35
+ npx -y @linkl/link-openapi-skills@latest install --agent all --scope global
36
+ ```
37
+
38
+ 更新和卸载:
39
+
40
+ ```bash
41
+ npx -y @linkl/link-openapi-skills@latest update
42
+ npx -y @linkl/link-openapi-skills@latest uninstall
43
+ ```
44
+
45
+ ## 本地测试
46
+
47
+ ```bash
48
+ node bin/cli.js install --agent all --scope project
49
+ node bin/cli.js update --agent all --scope project
50
+ node bin/cli.js uninstall --agent all --scope project
51
+ ```
52
+
53
+ ## 发布到 npm
54
+
55
+ 1. 创建或确认你拥有的 npm organization/scope,例如 `@linkl`。
56
+ 2. 修改 `package.json` 的 name、version、license、repository、homepage。
57
+ 3. 先检查包内容:`npm pack --dry-run`。
58
+ 4. 登录 npm:`npm login`。
59
+ 5. 首次发布 public scoped package:`npm publish --access public`。
60
+ 6. 后续升级:修改版本号(`npm version patch`),再 `npm publish`。
61
+
62
+ ## 重要:Skill 和 MCP 是两回事
63
+
64
+ 本安装器只复制 SKILL.md 和参考资料。要让 AI 真正执行 LINK API,还必须单独部署/配置 LINK MCP Server,并由 MCP Server 从安全配置读取 `LINK_API_TOKEN`。安装器不会写入真实 Token,也不会自动配置 MCP 凭证。
65
+
66
+ ## 安全
67
+
68
+ - npm public package 中的所有文件都可被公开下载;不要放真实 Token、客户数据、私有 endpoint 或内部源码。
69
+ - `update` 会覆盖本安装器管理的 Skill 目录;请不要在安装目录内手工维护唯一副本。
70
+ - `uninstall` 会删除 manifest 中记录的 Skill 目录。
71
+ - 本包中的接口信息来自随包的 OpenAPI 3.0.1 定义;接口变更后应重新生成参考文档并发布新版本。
package/bin/cli.js ADDED
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env node
2
+ import { cp, mkdir, readFile, readdir, rm, writeFile, access } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import os from 'node:os';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
8
+ const SKILLS_SOURCE = path.join(PACKAGE_ROOT, 'skills');
9
+ const PACKAGE_JSON = JSON.parse(await readFile(path.join(PACKAGE_ROOT, 'package.json'), 'utf8'));
10
+ const SKILL_NAMES = (await readdir(SKILLS_SOURCE, { withFileTypes: true }))
11
+ .filter(x => x.isDirectory()).map(x => x.name);
12
+
13
+ function parseArgs(argv) {
14
+ const command = argv[2] || 'help';
15
+ const opts = { agent: 'all', scope: 'project', force: false };
16
+ for (let i = 3; i < argv.length; i++) {
17
+ const a = argv[i];
18
+ if (a === '--force') opts.force = true;
19
+ else if (a === '--agent' && argv[i + 1]) opts.agent = argv[++i];
20
+ else if (a === '--scope' && argv[i + 1]) opts.scope = argv[++i];
21
+ else if (a === '--help' || a === '-h') opts.help = true;
22
+ else throw new Error(`未知参数:${a}`);
23
+ }
24
+ return { command, opts };
25
+ }
26
+
27
+ function targetDirs(agent, scope) {
28
+ const project = process.cwd();
29
+ const home = os.homedir();
30
+ const projectMap = {
31
+ claude: '.claude/skills',
32
+ codex: '.agents/skills',
33
+ cursor: '.cursor/skills',
34
+ agents: '.agents/skills',
35
+ 'spring-ai': 'src/main/resources/agent-skills'
36
+ };
37
+ const globalMap = {
38
+ claude: path.join(home, '.claude', 'skills'),
39
+ codex: path.join(home, '.agents', 'skills'),
40
+ cursor: path.join(home, '.cursor', 'skills'),
41
+ agents: path.join(home, '.agents', 'skills')
42
+ };
43
+ const aliases = agent === 'all' ? ['claude', 'codex', 'cursor', 'spring-ai'] : [agent];
44
+ for (const a of aliases) {
45
+ if (!projectMap[a]) throw new Error(`不支持的 agent:${a}。可选 claude、codex、cursor、agents、spring-ai、all`);
46
+ if (scope === 'global' && !globalMap[a]) throw new Error('spring-ai 仅支持 project scope;它需要安装到当前 Spring Boot 项目的 resources 目录。');
47
+ }
48
+ return aliases.map(a => ({ agent: a, root: scope === 'global' ? globalMap[a] : path.resolve(project, projectMap[a]) }));
49
+ }
50
+
51
+ async function exists(p) { try { await access(p); return true; } catch { return false; } }
52
+ async function readManifest(root) {
53
+ const p = path.join(root, '.link-openapi-skills-manifest.json');
54
+ try { return JSON.parse(await readFile(p, 'utf8')); } catch { return { skills: [] }; }
55
+ }
56
+ async function writeManifest(root, skills) {
57
+ await mkdir(root, { recursive: true });
58
+ await writeFile(path.join(root, '.link-openapi-skills-manifest.json'), JSON.stringify({
59
+ package: PACKAGE_JSON.name, version: PACKAGE_JSON.version, skills: [...new Set(skills)]
60
+ }, null, 2) + '\n', 'utf8');
61
+ }
62
+
63
+ async function installInto(root, command, force) {
64
+ await mkdir(root, { recursive: true });
65
+ const previous = await readManifest(root);
66
+ const managed = new Set(previous.skills || []);
67
+ let installed = 0, skipped = 0;
68
+ for (const name of SKILL_NAMES) {
69
+ const src = path.join(SKILLS_SOURCE, name);
70
+ const dest = path.join(root, name);
71
+ const already = await exists(dest);
72
+ const overwrite = command === 'update' || force || managed.has(name);
73
+ if (already && !overwrite) {
74
+ console.log(` - 跳过已存在:${name}(如需覆盖请加 --force,或执行 update)`);
75
+ skipped++;
76
+ continue;
77
+ }
78
+ if (already && overwrite) await rm(dest, { recursive: true, force: true });
79
+ await cp(src, dest, { recursive: true, force: true });
80
+ managed.add(name); installed++;
81
+ console.log(` ✓ ${command === 'update' ? '更新' : '安装'}:${name}`);
82
+ }
83
+ await writeManifest(root, [...managed]);
84
+ return { installed, skipped };
85
+ }
86
+
87
+ async function uninstallFrom(root) {
88
+ const manifestPath = path.join(root, '.link-openapi-skills-manifest.json');
89
+ const manifest = await readManifest(root);
90
+ if (!(await exists(manifestPath))) {
91
+ console.log(` - 未找到本安装器的清单,跳过:${root}`); return 0;
92
+ }
93
+ let removed = 0;
94
+ for (const name of manifest.skills || []) {
95
+ await rm(path.join(root, name), { recursive: true, force: true });
96
+ console.log(` ✓ 已卸载:${name}`); removed++;
97
+ }
98
+ await rm(manifestPath, { force: true });
99
+ return removed;
100
+ }
101
+
102
+ function help() {
103
+ console.log(`\nLINK OpenAPI Skills Installer v${PACKAGE_JSON.version}\n\n用法:\n npx -y ${PACKAGE_JSON.name}@latest install [--agent all|claude|codex|cursor|agents|spring-ai] [--scope project|global] [--force]\n npx -y ${PACKAGE_JSON.name}@latest update [--agent ...] [--scope ...]\n npx -y ${PACKAGE_JSON.name}@latest uninstall [--agent ...] [--scope ...]\n npx -y ${PACKAGE_JSON.name}@latest list\n\n默认:agent=all,scope=project。\n注意:本命令安装 Agent Skills 文件;不会自动安装或启动 LINK MCP Server,也不会写入 LINK Token。\n`);
104
+ }
105
+
106
+ try {
107
+ const { command, opts } = parseArgs(process.argv);
108
+ if (opts.help || command === 'help') { help(); process.exit(0); }
109
+ if (command === 'list') {
110
+ console.log('随包 Skills:'); SKILL_NAMES.forEach(n => console.log(` - ${n}`)); process.exit(0);
111
+ }
112
+ if (!['install', 'update', 'uninstall'].includes(command)) throw new Error(`未知命令:${command}`);
113
+ if (!['project', 'global'].includes(opts.scope)) throw new Error('--scope 只能是 project 或 global');
114
+ const targets = targetDirs(opts.agent, opts.scope);
115
+ console.log(`\nLINK OpenAPI Skills ${command}(${opts.scope})`);
116
+ for (const t of targets) {
117
+ console.log(`\n[${t.agent}] ${t.root}`);
118
+ if (command === 'uninstall') await uninstallFrom(t.root);
119
+ else await installInto(t.root, command, opts.force);
120
+ }
121
+ console.log('\n完成。请重启或重新加载对应 AI 客户端,让它重新发现 Skills。');
122
+ } catch (e) {
123
+ console.error(`\n错误:${e.message}`);
124
+ process.exit(1);
125
+ }
@@ -0,0 +1,432 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "链路ERP开放平台",
5
+ "description": "basicdataservice",
6
+ "contact": {
7
+ "name": "link",
8
+ "url": "https://www.linkl.com.cn"
9
+ },
10
+ "version": "1.0"
11
+ },
12
+ "servers": [
13
+ {
14
+ "url": "https://www.linkl.com.cn"
15
+ }
16
+ ],
17
+ "paths": {
18
+ "/openapi/validateRemote": {
19
+ "post": {
20
+ "tags": [
21
+ "API列表"
22
+ ],
23
+ "summary": "偏远验证",
24
+ "operationId": "validateRemote",
25
+ "requestBody": {
26
+ "content": {
27
+ "application/json": {
28
+ "schema": {
29
+ "$ref": "#/components/schemas/CLBRO_OpenApiValidateRemoteRequest"
30
+ }
31
+ }
32
+ },
33
+ "required": true
34
+ },
35
+ "responses": {
36
+ "200": {
37
+ "description": "OK",
38
+ "content": {
39
+ "*/*": {
40
+ "schema": {
41
+ "$ref": "#/components/schemas/CLCMRULLBRO_OpenApiValidateRemoteResponse"
42
+ }
43
+ }
44
+ }
45
+ }
46
+ },
47
+ "x-order": 2,
48
+ "parameters": [
49
+ {
50
+ "name": "linkToken",
51
+ "in": "header",
52
+ "required": true,
53
+ "description": "接口访问凭证,请按接口要求填写。",
54
+ "schema": {
55
+ "type": "string"
56
+ }
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ "/openapi/validateAddress": {
62
+ "post": {
63
+ "tags": [
64
+ "API列表"
65
+ ],
66
+ "summary": "地址验证",
67
+ "operationId": "validateAddress",
68
+ "requestBody": {
69
+ "content": {
70
+ "application/json": {
71
+ "schema": {
72
+ "$ref": "#/components/schemas/CLBRO_OpenApiValidateAddressRequest"
73
+ }
74
+ }
75
+ },
76
+ "required": true
77
+ },
78
+ "responses": {
79
+ "200": {
80
+ "description": "OK",
81
+ "content": {
82
+ "*/*": {
83
+ "schema": {
84
+ "$ref": "#/components/schemas/CLCMRULLBRO_OpenApiValidateAddressResponse"
85
+ }
86
+ }
87
+ }
88
+ }
89
+ },
90
+ "x-order": 1,
91
+ "parameters": [
92
+ {
93
+ "name": "linkToken",
94
+ "in": "header",
95
+ "required": true,
96
+ "description": "接口访问凭证,请按接口要求填写。",
97
+ "schema": {
98
+ "type": "string"
99
+ }
100
+ }
101
+ ]
102
+ }
103
+ },
104
+ "/openapi/cityPostCodeSearch": {
105
+ "post": {
106
+ "tags": [
107
+ "API列表"
108
+ ],
109
+ "summary": "城市邮编查询",
110
+ "operationId": "cityPostCodeSearch",
111
+ "requestBody": {
112
+ "content": {
113
+ "application/json": {
114
+ "schema": {
115
+ "$ref": "#/components/schemas/CLBRO_OpenApiCityPostCodeSearchRequest"
116
+ }
117
+ }
118
+ },
119
+ "required": true
120
+ },
121
+ "responses": {
122
+ "200": {
123
+ "description": "OK",
124
+ "content": {
125
+ "*/*": {
126
+ "schema": {
127
+ "$ref": "#/components/schemas/CLCMRULLBRO_OpenApiCityPostCodeSearchResponse"
128
+ }
129
+ }
130
+ }
131
+ }
132
+ },
133
+ "x-order": 3,
134
+ "parameters": [
135
+ {
136
+ "name": "linkToken",
137
+ "in": "header",
138
+ "required": true,
139
+ "description": "接口访问凭证,请按接口要求填写。",
140
+ "schema": {
141
+ "type": "string"
142
+ }
143
+ }
144
+ ]
145
+ }
146
+ }
147
+ },
148
+ "components": {
149
+ "schemas": {
150
+ "CLBRO_OpenApiValidateRemoteRequest": {
151
+ "required": [
152
+ "countryCode"
153
+ ],
154
+ "type": "object",
155
+ "properties": {
156
+ "countryCode": {
157
+ "type": "string",
158
+ "description": "国家代码(长度:[2])",
159
+ "example": "US"
160
+ },
161
+ "city": {
162
+ "type": "string",
163
+ "description": "市(长度:[80])"
164
+ },
165
+ "postcode": {
166
+ "type": "string",
167
+ "description": "邮编(长度:[20])"
168
+ }
169
+ },
170
+ "description": "偏远验证请求",
171
+ "title": "偏远验证请求"
172
+ },
173
+ "CLBRO_OpenApiValidateRemoteResponse": {
174
+ "type": "object",
175
+ "properties": {
176
+ "type": {
177
+ "type": "integer",
178
+ "description": "偏远类型 1:DHL 2:FEDEX 3:UPS 4:TNT 5:UPS专线 6:FEDEX专线",
179
+ "format": "int32"
180
+ },
181
+ "level": {
182
+ "type": "string",
183
+ "description": "偏远等级"
184
+ }
185
+ },
186
+ "description": "偏远验证响应",
187
+ "title": "偏远验证响应"
188
+ },
189
+ "CLCMRULLBRO_OpenApiValidateRemoteResponse": {
190
+ "type": "object",
191
+ "properties": {
192
+ "code": {
193
+ "type": "integer",
194
+ "description": "返回码(0:成功 其他:失败),业务code需大于1000",
195
+ "format": "int32"
196
+ },
197
+ "data": {
198
+ "type": "array",
199
+ "description": "数据结果",
200
+ "items": {
201
+ "$ref": "#/components/schemas/CLBRO_OpenApiValidateRemoteResponse"
202
+ }
203
+ },
204
+ "msg": {
205
+ "type": "string",
206
+ "description": "错误消息"
207
+ }
208
+ },
209
+ "description": "Result",
210
+ "title": "Result"
211
+ },
212
+ "CLBRO_OpenApiValidateAddressRequest": {
213
+ "required": [
214
+ "address1",
215
+ "countryCode"
216
+ ],
217
+ "type": "object",
218
+ "properties": {
219
+ "countryCode": {
220
+ "type": "string",
221
+ "description": "国家代码(长度:[2])",
222
+ "example": "US"
223
+ },
224
+ "state": {
225
+ "type": "string",
226
+ "description": "省(长度:[100])",
227
+ "example": "CA"
228
+ },
229
+ "city": {
230
+ "type": "string",
231
+ "description": "市(长度:[80])"
232
+ },
233
+ "postcode": {
234
+ "type": "string",
235
+ "description": "邮编(长度:[20])"
236
+ },
237
+ "address1": {
238
+ "type": "string",
239
+ "description": "地址1(长度:[255])"
240
+ },
241
+ "address2": {
242
+ "type": "string",
243
+ "description": "地址2(长度:[255])"
244
+ },
245
+ "address3": {
246
+ "type": "string",
247
+ "description": "地址3(长度:[255])"
248
+ }
249
+ },
250
+ "description": "地址验证请求",
251
+ "title": "地址验证请求"
252
+ },
253
+ "CLBRO_OpenApiValidateAddressResponse": {
254
+ "type": "object",
255
+ "properties": {
256
+ "countryCode": {
257
+ "type": "string",
258
+ "description": "国家代码",
259
+ "example": "US"
260
+ },
261
+ "state": {
262
+ "type": "string",
263
+ "description": "省",
264
+ "example": "CA"
265
+ },
266
+ "city": {
267
+ "type": "string",
268
+ "description": "市"
269
+ },
270
+ "postcode": {
271
+ "type": "string",
272
+ "description": "邮编"
273
+ },
274
+ "address1": {
275
+ "type": "string",
276
+ "description": "地址1"
277
+ },
278
+ "address2": {
279
+ "type": "string",
280
+ "description": "地址2"
281
+ },
282
+ "address3": {
283
+ "type": "string",
284
+ "description": "地址3"
285
+ },
286
+ "validateType": {
287
+ "type": "integer",
288
+ "description": "验证类型 0:FEDEX 1:UPS",
289
+ "format": "int32",
290
+ "example": 0
291
+ },
292
+ "addressType": {
293
+ "type": "integer",
294
+ "description": "地址类型(1:商业 2:住宅 3:混合 4:未知 5:FBA)",
295
+ "format": "int32"
296
+ },
297
+ "remoteLevel": {
298
+ "type": "string",
299
+ "description": "偏远等级"
300
+ }
301
+ },
302
+ "description": "地址验证响应",
303
+ "title": "地址验证响应"
304
+ },
305
+ "CLCMRULLBRO_OpenApiValidateAddressResponse": {
306
+ "type": "object",
307
+ "properties": {
308
+ "code": {
309
+ "type": "integer",
310
+ "description": "返回码(0:成功 其他:失败),业务code需大于1000",
311
+ "format": "int32"
312
+ },
313
+ "data": {
314
+ "type": "array",
315
+ "description": "数据结果",
316
+ "items": {
317
+ "$ref": "#/components/schemas/CLBRO_OpenApiValidateAddressResponse"
318
+ }
319
+ },
320
+ "msg": {
321
+ "type": "string",
322
+ "description": "错误消息"
323
+ }
324
+ },
325
+ "description": "Result",
326
+ "title": "Result"
327
+ },
328
+ "CLBRO_OpenApiCityPostCodeSearchRequest": {
329
+ "required": [
330
+ "countryCode"
331
+ ],
332
+ "type": "object",
333
+ "properties": {
334
+ "countryCode": {
335
+ "type": "string",
336
+ "description": "国家代码(长度:[2])"
337
+ },
338
+ "city": {
339
+ "type": "string",
340
+ "description": "市(长度:[80])"
341
+ },
342
+ "postcode": {
343
+ "type": "string",
344
+ "description": "邮编(长度:[20])"
345
+ }
346
+ },
347
+ "description": "城市邮编查询请求",
348
+ "title": "城市邮编查询请求"
349
+ },
350
+ "CLBRO_OpenApiCityPostCodeSearchResponse": {
351
+ "type": "object",
352
+ "properties": {
353
+ "countryCode": {
354
+ "type": "string",
355
+ "description": "国家代码"
356
+ },
357
+ "state": {
358
+ "type": "string",
359
+ "description": "省"
360
+ },
361
+ "city": {
362
+ "type": "string",
363
+ "description": "市"
364
+ },
365
+ "postcode": {
366
+ "type": "string",
367
+ "description": "邮编"
368
+ },
369
+ "remoteResults": {
370
+ "type": "array",
371
+ "description": "偏远信息",
372
+ "items": {
373
+ "$ref": "#/components/schemas/CLBRO_OpenApiValidateRemoteResponse"
374
+ }
375
+ }
376
+ },
377
+ "description": "城市邮编查询响应",
378
+ "title": "城市邮编查询响应"
379
+ },
380
+ "CLCMRULLBRO_OpenApiCityPostCodeSearchResponse": {
381
+ "type": "object",
382
+ "properties": {
383
+ "code": {
384
+ "type": "integer",
385
+ "description": "返回码(0:成功 其他:失败),业务code需大于1000",
386
+ "format": "int32"
387
+ },
388
+ "data": {
389
+ "type": "array",
390
+ "description": "数据结果",
391
+ "items": {
392
+ "$ref": "#/components/schemas/CLBRO_OpenApiCityPostCodeSearchResponse"
393
+ }
394
+ },
395
+ "msg": {
396
+ "type": "string",
397
+ "description": "错误消息"
398
+ }
399
+ },
400
+ "description": "Result",
401
+ "title": "Result"
402
+ }
403
+ }
404
+ },
405
+ "x-openapi": {
406
+ "x-setting": {
407
+ "customCode": 200,
408
+ "language": "zh-CN",
409
+ "enableSwaggerModels": false,
410
+ "swaggerModelName": "Swagger Models",
411
+ "enableReloadCacheParameter": false,
412
+ "enableAfterScript": true,
413
+ "enableDocumentManage": false,
414
+ "enableVersion": false,
415
+ "enableRequestCache": true,
416
+ "enableFilterMultipartApis": false,
417
+ "enableFilterMultipartApiMethodType": "POST",
418
+ "enableHost": false,
419
+ "enableHostText": "",
420
+ "enableDynamicParameter": false,
421
+ "enableDebug": false,
422
+ "enableFooter": true,
423
+ "enableFooterCustom": false,
424
+ "enableSearch": true,
425
+ "enableOpenApi": true,
426
+ "enableHomeCustom": false,
427
+ "enableGroup": true,
428
+ "enableResponseCode": true
429
+ },
430
+ "x-markdownFiles": []
431
+ }
432
+ }