apifox-workspace-mcp 1.1.2 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/__tests__/intent.test.js.map +1 -1
- package/dist/__tests__/llms-parser.test.js.map +1 -1
- package/dist/__tests__/select-interfaces.test.js +2 -0
- package/dist/__tests__/select-interfaces.test.js.map +1 -1
- package/dist/__tests__/unified-cache-manager.test.js +2 -2
- package/dist/__tests__/unified-cache-manager.test.js.map +1 -1
- package/dist/core/cache/unified-cache-manager.d.ts +12 -3
- package/dist/core/cache/unified-cache-manager.d.ts.map +1 -1
- package/dist/core/cache/unified-cache-manager.js +97 -24
- package/dist/core/cache/unified-cache-manager.js.map +1 -1
- package/dist/core/client/apifox.js.map +1 -1
- package/dist/core/client/mcp-bridge.d.ts.map +1 -1
- package/dist/core/client/mcp-bridge.js.map +1 -1
- package/dist/core/config/manager.d.ts +6 -124
- package/dist/core/config/manager.d.ts.map +1 -1
- package/dist/core/config/manager.js +11 -288
- package/dist/core/config/manager.js.map +1 -1
- package/dist/core/generator/artifact.js +0 -1
- package/dist/core/generator/artifact.js.map +1 -1
- package/dist/core/intent.d.ts +4 -1
- package/dist/core/intent.d.ts.map +1 -1
- package/dist/core/intent.js +29 -1
- package/dist/core/intent.js.map +1 -1
- package/dist/core/parser/index.d.ts +1 -0
- package/dist/core/parser/index.d.ts.map +1 -1
- package/dist/core/parser/index.js +1 -0
- package/dist/core/parser/index.js.map +1 -1
- package/dist/core/parser/md-parser.d.ts +12 -0
- package/dist/core/parser/md-parser.d.ts.map +1 -0
- package/dist/core/parser/md-parser.js +205 -0
- package/dist/core/parser/md-parser.js.map +1 -0
- package/dist/server/handlers/assistant.d.ts.map +1 -1
- package/dist/server/handlers/assistant.js +11 -0
- package/dist/server/handlers/assistant.js.map +1 -1
- package/dist/server/handlers/get-interface-detail.d.ts +2 -0
- package/dist/server/handlers/get-interface-detail.d.ts.map +1 -1
- package/dist/server/handlers/get-interface-detail.js +141 -10
- package/dist/server/handlers/get-interface-detail.js.map +1 -1
- package/dist/server/handlers/index.d.ts +1 -0
- package/dist/server/handlers/index.d.ts.map +1 -1
- package/dist/server/handlers/index.js +1 -0
- package/dist/server/handlers/index.js.map +1 -1
- package/dist/server/handlers/list-project-interfaces.d.ts +29 -0
- package/dist/server/handlers/list-project-interfaces.d.ts.map +1 -0
- package/dist/server/handlers/list-project-interfaces.js +195 -0
- package/dist/server/handlers/list-project-interfaces.js.map +1 -0
- package/dist/server/handlers/list-projects.d.ts.map +1 -1
- package/dist/server/handlers/list-projects.js.map +1 -1
- package/dist/server/handlers/parse-and-add-project.d.ts +0 -1
- package/dist/server/handlers/parse-and-add-project.d.ts.map +1 -1
- package/dist/server/handlers/parse-and-add-project.js +104 -132
- package/dist/server/handlers/parse-and-add-project.js.map +1 -1
- package/dist/server/handlers/utils.d.ts +3 -2
- package/dist/server/handlers/utils.d.ts.map +1 -1
- package/dist/server/handlers/utils.js +10 -3
- package/dist/server/handlers/utils.js.map +1 -1
- package/dist/server/index.js +13 -33
- package/dist/server/index.js.map +1 -1
- package/dist/types/index.d.ts +7 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,138 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/** 项目 ID */
|
|
6
|
-
id: string;
|
|
7
|
-
/** 分享 URL */
|
|
8
|
-
shareUrl?: string;
|
|
9
|
-
/** llms.txt 链接 */
|
|
10
|
-
llmsUrl?: string;
|
|
11
|
-
/** 最后更新时间 */
|
|
12
|
-
lastUpdated?: string;
|
|
13
|
-
/** 接口列表(可选) */
|
|
14
|
-
interfaces?: string[];
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 配置文件类型:支持旧格式(字符串)和新格式(对象)
|
|
18
|
-
*/
|
|
19
|
-
export type ApifoxConfig = Record<string, string | ProjectConfig>;
|
|
20
|
-
/**
|
|
21
|
-
* 配置文件管理器
|
|
22
|
-
* 负责读取和更新 apifox-mcp.json
|
|
23
|
-
* APIFOX_ACCESS_TOKEN 从环境变量中获取(MCP Server 的 env 配置)
|
|
2
|
+
* 配置管理器
|
|
3
|
+
* 负责从环境变量中获取配置信息
|
|
4
|
+
* APIFOX_ACCESS_TOKEN 和 APIFOX_API_BASE_URL 从环境变量中获取(MCP Server 的 env 配置)
|
|
24
5
|
*/
|
|
25
6
|
export declare class ConfigManager {
|
|
26
7
|
private projectRoot;
|
|
27
|
-
private apifoxConfigPath;
|
|
28
8
|
constructor(projectRoot: string);
|
|
29
|
-
/**
|
|
30
|
-
* 初始化配置文件
|
|
31
|
-
* 检查并创建缺失的配置文件
|
|
32
|
-
* @returns 初始化结果
|
|
33
|
-
*/
|
|
34
|
-
initializeConfig(): {
|
|
35
|
-
apifoxConfigExists: boolean;
|
|
36
|
-
apifoxConfigCreated: boolean;
|
|
37
|
-
errors: string[];
|
|
38
|
-
projectRoot: string;
|
|
39
|
-
configPath: string;
|
|
40
|
-
};
|
|
41
9
|
/**
|
|
42
10
|
* 从环境变量中获取 APIFOX_ACCESS_TOKEN
|
|
43
11
|
* @returns access token 或 null
|
|
44
12
|
*/
|
|
45
13
|
getAccessToken(): string | null;
|
|
46
14
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @returns
|
|
49
|
-
*/
|
|
50
|
-
checkConfigStatus(): {
|
|
51
|
-
apifoxConfigExists: boolean;
|
|
52
|
-
hasAccessToken: boolean;
|
|
53
|
-
projectCount: number;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* 检查配置值是否为旧格式(字符串)
|
|
57
|
-
*/
|
|
58
|
-
private isLegacyFormat;
|
|
59
|
-
/**
|
|
60
|
-
* 将旧格式转换为新格式
|
|
61
|
-
*/
|
|
62
|
-
private migrateLegacyConfig;
|
|
63
|
-
/**
|
|
64
|
-
* 读取 apifox-mcp.json 配置
|
|
65
|
-
* @returns 项目配置对象(支持新旧格式)
|
|
66
|
-
*/
|
|
67
|
-
getApifoxConfig(): ApifoxConfig;
|
|
68
|
-
/**
|
|
69
|
-
* 获取项目配置(新格式)
|
|
70
|
-
*/
|
|
71
|
-
private getProjectConfig;
|
|
72
|
-
/**
|
|
73
|
-
* 更新 apifox-mcp.json 配置(兼容旧方法)
|
|
74
|
-
* @param projectName 项目名称
|
|
75
|
-
* @param projectId 项目 ID
|
|
76
|
-
* @returns 是否成功添加(如果已存在则返回 false)
|
|
77
|
-
*/
|
|
78
|
-
addProject(projectName: string, projectId: string): {
|
|
79
|
-
success: boolean;
|
|
80
|
-
message: string;
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* 添加或更新项目配置
|
|
84
|
-
* @param projectName 项目名称
|
|
85
|
-
* @param projectConfig 项目配置
|
|
86
|
-
* @returns 操作结果,包含是否为新项目
|
|
87
|
-
*/
|
|
88
|
-
upsertProject(projectName: string, projectConfig: Partial<ProjectConfig> & {
|
|
89
|
-
id: string;
|
|
90
|
-
}): {
|
|
91
|
-
success: boolean;
|
|
92
|
-
message: string;
|
|
93
|
-
isNew: boolean;
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* 更新项目的 llms.txt 链接
|
|
97
|
-
* @param projectName 项目名称
|
|
98
|
-
* @param llmsUrl llms.txt 链接
|
|
99
|
-
* @returns 是否成功更新
|
|
100
|
-
*/
|
|
101
|
-
updateProjectLlmsUrl(projectName: string, llmsUrl: string): {
|
|
102
|
-
success: boolean;
|
|
103
|
-
message: string;
|
|
104
|
-
};
|
|
105
|
-
/**
|
|
106
|
-
* 根据项目名称获取项目 ID
|
|
107
|
-
* @param projectName 项目名称
|
|
108
|
-
* @returns 项目 ID 或 null
|
|
109
|
-
*/
|
|
110
|
-
getProjectId(projectName: string): string | null;
|
|
111
|
-
/**
|
|
112
|
-
* 根据项目 ID 获取项目名称
|
|
113
|
-
* @param projectId 项目 ID
|
|
114
|
-
* @returns 项目名称或 null
|
|
115
|
-
*/
|
|
116
|
-
getProjectName(projectId: string): string | null;
|
|
117
|
-
/**
|
|
118
|
-
* 列出所有项目
|
|
119
|
-
* @returns 项目列表 [{ name, id }]
|
|
120
|
-
*/
|
|
121
|
-
listProjects(): Array<{
|
|
122
|
-
name: string;
|
|
123
|
-
id: string;
|
|
124
|
-
}>;
|
|
125
|
-
getProjectShareUrl(projectName: string): string | null;
|
|
126
|
-
/**
|
|
127
|
-
* 获取项目的 llms.txt URL
|
|
128
|
-
* @param projectName 项目名称
|
|
129
|
-
* @returns llms.txt URL,如果不存在则返回 null
|
|
130
|
-
*/
|
|
131
|
-
getProjectLlmsUrl(projectName: string): string | null;
|
|
132
|
-
/**
|
|
133
|
-
* 获取 apifox-mcp.json 文件路径
|
|
134
|
-
* @returns 文件路径
|
|
15
|
+
* 从环境变量中获取 APIFOX_API_BASE_URL
|
|
16
|
+
* @returns API base URL 或 null
|
|
135
17
|
*/
|
|
136
|
-
|
|
18
|
+
getApiBaseUrl(): string | null;
|
|
137
19
|
}
|
|
138
20
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/config/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAIvC;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAO/B;;;OAGG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;CAQ/B"}
|
|
@@ -1,54 +1,13 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* APIFOX_ACCESS_TOKEN 从环境变量中获取(MCP Server 的 env 配置)
|
|
2
|
+
* 配置管理器
|
|
3
|
+
* 负责从环境变量中获取配置信息
|
|
4
|
+
* APIFOX_ACCESS_TOKEN 和 APIFOX_API_BASE_URL 从环境变量中获取(MCP Server 的 env 配置)
|
|
7
5
|
*/
|
|
8
6
|
export class ConfigManager {
|
|
9
7
|
projectRoot;
|
|
10
|
-
apifoxConfigPath;
|
|
11
8
|
constructor(projectRoot) {
|
|
12
9
|
this.projectRoot = projectRoot;
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* 初始化配置文件
|
|
17
|
-
* 检查并创建缺失的配置文件
|
|
18
|
-
* @returns 初始化结果
|
|
19
|
-
*/
|
|
20
|
-
initializeConfig() {
|
|
21
|
-
const result = {
|
|
22
|
-
apifoxConfigExists: existsSync(this.apifoxConfigPath),
|
|
23
|
-
apifoxConfigCreated: false,
|
|
24
|
-
errors: [],
|
|
25
|
-
projectRoot: this.projectRoot,
|
|
26
|
-
configPath: this.apifoxConfigPath,
|
|
27
|
-
};
|
|
28
|
-
// 创建 apifox-mcp.json 文件(如果不存在)
|
|
29
|
-
if (!result.apifoxConfigExists) {
|
|
30
|
-
try {
|
|
31
|
-
// 输出调试信息
|
|
32
|
-
console.error(`📁 项目根目录: ${this.projectRoot}`);
|
|
33
|
-
console.error(`📄 配置文件路径: ${this.apifoxConfigPath}`);
|
|
34
|
-
console.error(`🔄 尝试创建 apifox-mcp.json 文件...`);
|
|
35
|
-
const defaultConfigContent = JSON.stringify({}, null, 2);
|
|
36
|
-
writeFileSync(this.apifoxConfigPath, defaultConfigContent, 'utf-8');
|
|
37
|
-
result.apifoxConfigCreated = true;
|
|
38
|
-
console.error(`✅ 成功创建 apifox-mcp.json 文件: ${this.apifoxConfigPath}`);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
const errorMsg = `无法创建 apifox-mcp.json 文件: ${error instanceof Error ? error.message : String(error)}`;
|
|
42
|
-
result.errors.push(errorMsg);
|
|
43
|
-
console.error(`❌ ${errorMsg}`);
|
|
44
|
-
console.error(` 项目根目录: ${this.projectRoot}`);
|
|
45
|
-
console.error(` 配置文件路径: ${this.apifoxConfigPath}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
console.error(`✅ apifox-mcp.json 文件已存在: ${this.apifoxConfigPath}`);
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
10
|
+
// projectRoot 保留用于未来可能的扩展,当前不使用
|
|
52
11
|
}
|
|
53
12
|
/**
|
|
54
13
|
* 从环境变量中获取 APIFOX_ACCESS_TOKEN
|
|
@@ -60,252 +19,16 @@ export class ConfigManager {
|
|
|
60
19
|
return token && token.trim() !== '' ? token : null;
|
|
61
20
|
}
|
|
62
21
|
/**
|
|
63
|
-
*
|
|
64
|
-
* @returns
|
|
65
|
-
*/
|
|
66
|
-
checkConfigStatus() {
|
|
67
|
-
const apifoxConfigExists = existsSync(this.apifoxConfigPath);
|
|
68
|
-
const accessToken = this.getAccessToken();
|
|
69
|
-
const projects = this.listProjects();
|
|
70
|
-
return {
|
|
71
|
-
apifoxConfigExists,
|
|
72
|
-
hasAccessToken: accessToken !== null && accessToken.trim() !== '',
|
|
73
|
-
projectCount: projects.length,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* 检查配置值是否为旧格式(字符串)
|
|
78
|
-
*/
|
|
79
|
-
isLegacyFormat(value) {
|
|
80
|
-
return typeof value === 'string';
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* 将旧格式转换为新格式
|
|
84
|
-
*/
|
|
85
|
-
migrateLegacyConfig(config) {
|
|
86
|
-
const migrated = {};
|
|
87
|
-
for (const [key, value] of Object.entries(config)) {
|
|
88
|
-
if (this.isLegacyFormat(value)) {
|
|
89
|
-
// 旧格式:字符串 projectId
|
|
90
|
-
migrated[key] = {
|
|
91
|
-
id: value,
|
|
92
|
-
lastUpdated: new Date().toISOString(),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
// 已经是新格式
|
|
97
|
-
migrated[key] = value;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return migrated;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 读取 apifox-mcp.json 配置
|
|
104
|
-
* @returns 项目配置对象(支持新旧格式)
|
|
105
|
-
*/
|
|
106
|
-
getApifoxConfig() {
|
|
107
|
-
try {
|
|
108
|
-
if (!existsSync(this.apifoxConfigPath)) {
|
|
109
|
-
return {};
|
|
110
|
-
}
|
|
111
|
-
const content = readFileSync(this.apifoxConfigPath, 'utf-8');
|
|
112
|
-
const config = JSON.parse(content);
|
|
113
|
-
// 检查是否需要迁移
|
|
114
|
-
const needsMigration = Object.values(config).some((v) => this.isLegacyFormat(v));
|
|
115
|
-
if (needsMigration) {
|
|
116
|
-
const migrated = this.migrateLegacyConfig(config);
|
|
117
|
-
// 自动保存迁移后的配置
|
|
118
|
-
writeFileSync(this.apifoxConfigPath, JSON.stringify(migrated, null, 2), 'utf-8');
|
|
119
|
-
return migrated;
|
|
120
|
-
}
|
|
121
|
-
return config;
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
console.error('读取 apifox-mcp.json 失败:', error);
|
|
125
|
-
return {};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* 获取项目配置(新格式)
|
|
130
|
-
*/
|
|
131
|
-
getProjectConfig(projectName) {
|
|
132
|
-
const config = this.getApifoxConfig();
|
|
133
|
-
const value = config[projectName];
|
|
134
|
-
if (!value) {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
if (this.isLegacyFormat(value)) {
|
|
138
|
-
return { id: value };
|
|
139
|
-
}
|
|
140
|
-
return value;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* 更新 apifox-mcp.json 配置(兼容旧方法)
|
|
144
|
-
* @param projectName 项目名称
|
|
145
|
-
* @param projectId 项目 ID
|
|
146
|
-
* @returns 是否成功添加(如果已存在则返回 false)
|
|
147
|
-
*/
|
|
148
|
-
addProject(projectName, projectId) {
|
|
149
|
-
return this.upsertProject(projectName, {
|
|
150
|
-
id: projectId,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* 添加或更新项目配置
|
|
155
|
-
* @param projectName 项目名称
|
|
156
|
-
* @param projectConfig 项目配置
|
|
157
|
-
* @returns 操作结果,包含是否为新项目
|
|
158
|
-
*/
|
|
159
|
-
upsertProject(projectName, projectConfig) {
|
|
160
|
-
try {
|
|
161
|
-
const config = this.getApifoxConfig();
|
|
162
|
-
// 检查是否已存在相同的 projectId(但项目名称不同)
|
|
163
|
-
const existingByProjectId = Object.entries(config).find(([name, value]) => {
|
|
164
|
-
if (name === projectName)
|
|
165
|
-
return false;
|
|
166
|
-
const existingId = this.isLegacyFormat(value) ? value : value.id;
|
|
167
|
-
return existingId === projectConfig.id;
|
|
168
|
-
});
|
|
169
|
-
if (existingByProjectId) {
|
|
170
|
-
return {
|
|
171
|
-
success: false,
|
|
172
|
-
message: `项目 ID ${projectConfig.id} 已存在,对应项目名称: ${existingByProjectId[0]}`,
|
|
173
|
-
isNew: false,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
// 检查是否已存在相同的项目名称
|
|
177
|
-
const existing = config[projectName];
|
|
178
|
-
const isNew = !existing;
|
|
179
|
-
// 合并配置
|
|
180
|
-
const existingConfig = existing && !this.isLegacyFormat(existing)
|
|
181
|
-
? existing
|
|
182
|
-
: { id: this.isLegacyFormat(existing) ? existing : projectConfig.id };
|
|
183
|
-
const updatedConfig = {
|
|
184
|
-
...existingConfig,
|
|
185
|
-
...projectConfig,
|
|
186
|
-
id: projectConfig.id, // 确保 id 被更新
|
|
187
|
-
lastUpdated: new Date().toISOString(),
|
|
188
|
-
};
|
|
189
|
-
config[projectName] = updatedConfig;
|
|
190
|
-
writeFileSync(this.apifoxConfigPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
191
|
-
return {
|
|
192
|
-
success: true,
|
|
193
|
-
message: isNew
|
|
194
|
-
? `成功添加项目: ${projectName} (${projectConfig.id})`
|
|
195
|
-
: `成功更新项目: ${projectName} (${projectConfig.id})`,
|
|
196
|
-
isNew,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
console.error('更新 apifox-mcp.json 失败:', error);
|
|
201
|
-
return {
|
|
202
|
-
success: false,
|
|
203
|
-
message: `更新配置失败: ${error instanceof Error ? error.message : String(error)}`,
|
|
204
|
-
isNew: false,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* 更新项目的 llms.txt 链接
|
|
210
|
-
* @param projectName 项目名称
|
|
211
|
-
* @param llmsUrl llms.txt 链接
|
|
212
|
-
* @returns 是否成功更新
|
|
213
|
-
*/
|
|
214
|
-
updateProjectLlmsUrl(projectName, llmsUrl) {
|
|
215
|
-
try {
|
|
216
|
-
const config = this.getApifoxConfig();
|
|
217
|
-
const existing = config[projectName];
|
|
218
|
-
if (!existing) {
|
|
219
|
-
return {
|
|
220
|
-
success: false,
|
|
221
|
-
message: `项目 ${projectName} 不存在`,
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
const existingConfig = this.isLegacyFormat(existing) ? { id: existing } : existing;
|
|
225
|
-
const updatedConfig = {
|
|
226
|
-
...existingConfig,
|
|
227
|
-
llmsUrl,
|
|
228
|
-
lastUpdated: new Date().toISOString(),
|
|
229
|
-
};
|
|
230
|
-
config[projectName] = updatedConfig;
|
|
231
|
-
writeFileSync(this.apifoxConfigPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
232
|
-
return {
|
|
233
|
-
success: true,
|
|
234
|
-
message: `成功更新项目 ${projectName} 的 llms.txt 链接`,
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
console.error('更新 llms.txt 链接失败:', error);
|
|
239
|
-
return {
|
|
240
|
-
success: false,
|
|
241
|
-
message: `更新失败: ${error instanceof Error ? error.message : String(error)}`,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* 根据项目名称获取项目 ID
|
|
247
|
-
* @param projectName 项目名称
|
|
248
|
-
* @returns 项目 ID 或 null
|
|
249
|
-
*/
|
|
250
|
-
getProjectId(projectName) {
|
|
251
|
-
const config = this.getApifoxConfig();
|
|
252
|
-
const value = config[projectName];
|
|
253
|
-
if (!value) {
|
|
254
|
-
return null;
|
|
255
|
-
}
|
|
256
|
-
return this.isLegacyFormat(value) ? value : value.id;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* 根据项目 ID 获取项目名称
|
|
260
|
-
* @param projectId 项目 ID
|
|
261
|
-
* @returns 项目名称或 null
|
|
262
|
-
*/
|
|
263
|
-
getProjectName(projectId) {
|
|
264
|
-
const config = this.getApifoxConfig();
|
|
265
|
-
const entry = Object.entries(config).find(([_, value]) => {
|
|
266
|
-
const id = this.isLegacyFormat(value) ? value : value.id;
|
|
267
|
-
return id === projectId;
|
|
268
|
-
});
|
|
269
|
-
return entry ? entry[0] : null;
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* 列出所有项目
|
|
273
|
-
* @returns 项目列表 [{ name, id }]
|
|
274
|
-
*/
|
|
275
|
-
listProjects() {
|
|
276
|
-
const config = this.getApifoxConfig();
|
|
277
|
-
return Object.entries(config).map(([name, value]) => ({
|
|
278
|
-
name,
|
|
279
|
-
id: this.isLegacyFormat(value) ? value : value.id,
|
|
280
|
-
}));
|
|
281
|
-
}
|
|
282
|
-
getProjectShareUrl(projectName) {
|
|
283
|
-
const config = this.getApifoxConfig();
|
|
284
|
-
const value = config[projectName];
|
|
285
|
-
if (!value || this.isLegacyFormat(value)) {
|
|
286
|
-
return null;
|
|
287
|
-
}
|
|
288
|
-
return value.shareUrl || null;
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* 获取项目的 llms.txt URL
|
|
292
|
-
* @param projectName 项目名称
|
|
293
|
-
* @returns llms.txt URL,如果不存在则返回 null
|
|
22
|
+
* 从环境变量中获取 APIFOX_API_BASE_URL
|
|
23
|
+
* @returns API base URL 或 null
|
|
294
24
|
*/
|
|
295
|
-
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
if (!value || this.isLegacyFormat(value)) {
|
|
25
|
+
getApiBaseUrl() {
|
|
26
|
+
const baseUrl = process.env.APIFOX_API_BASE_URL;
|
|
27
|
+
if (!baseUrl) {
|
|
299
28
|
return null;
|
|
300
29
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* 获取 apifox-mcp.json 文件路径
|
|
305
|
-
* @returns 文件路径
|
|
306
|
-
*/
|
|
307
|
-
getApifoxConfigPath() {
|
|
308
|
-
return this.apifoxConfigPath;
|
|
30
|
+
const trimmed = baseUrl.trim();
|
|
31
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
309
32
|
}
|
|
310
33
|
}
|
|
311
34
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;QACrC,gCAAgC;IAClC,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAE9C,6BAA6B;QAC7B,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -69,7 +69,6 @@ function generateTestScript(payload) {
|
|
|
69
69
|
const name = interfaceDetail.name ?? 'Unknown';
|
|
70
70
|
const method = interfaceDetail.method ?? 'get';
|
|
71
71
|
const path = interfaceDetail.path ?? '/';
|
|
72
|
-
const fnName = camelCase(name);
|
|
73
72
|
const responseName = `${pascalCase(name)}Response`;
|
|
74
73
|
const content = `import request from 'supertest';
|
|
75
74
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/core/generator/artifact.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/core/generator/artifact.ts"],"names":[],"mappings":"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"}
|
package/dist/core/intent.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
export type IntentAction = 'listProjects' | 'searchInterfaces' | 'getInterfaceDetail' | 'generateArtifacts' | 'selectInterfaces' | 'help' | 'unknown';
|
|
1
|
+
export type IntentAction = 'listProjects' | 'listProjectInterfaces' | 'searchInterfaces' | 'getInterfaceDetail' | 'generateArtifacts' | 'selectInterfaces' | 'help' | 'unknown';
|
|
2
2
|
export interface IntentResult {
|
|
3
3
|
action: IntentAction;
|
|
4
4
|
keyword?: string;
|
|
5
5
|
projectName?: string;
|
|
6
|
+
projectId?: string;
|
|
7
|
+
shareId?: string;
|
|
6
8
|
interfaceId?: string;
|
|
7
9
|
artifactType?: 'ts_types' | 'mock_data' | 'request_wrappers' | 'test_scripts';
|
|
8
10
|
targetName?: string;
|
|
9
11
|
selectionCriteria?: SelectionCriteria;
|
|
12
|
+
url?: string;
|
|
10
13
|
}
|
|
11
14
|
export interface SelectionCriteria {
|
|
12
15
|
indices?: number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,kBAAkB,GAClB,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,uBAAuB,GACvB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,kBAAkB,GAClB,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAOD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACxE,YAAY,CAqGd"}
|
package/dist/core/intent.js
CHANGED
|
@@ -4,10 +4,38 @@ const SEARCH_KEYWORDS = ['查询', '搜索', '找', '接口列表', '有哪些',
|
|
|
4
4
|
const SELECT_KEYWORDS = ['选择', '勾选', '要这些', '要这些接口', '选中', '标记'];
|
|
5
5
|
export function parseIntent(promptRaw, context) {
|
|
6
6
|
const prompt = promptRaw.trim();
|
|
7
|
-
const lower = prompt.toLowerCase();
|
|
8
7
|
if (!prompt) {
|
|
9
8
|
return { action: 'help' };
|
|
10
9
|
}
|
|
10
|
+
// 优先检测 URL(如果 prompt 中包含 Apifox URL)
|
|
11
|
+
const urlMatch = prompt.match(/https?:\/\/[^\s]+/);
|
|
12
|
+
if (urlMatch) {
|
|
13
|
+
const url = urlMatch[0];
|
|
14
|
+
// 检查是否是 Apifox 分享链接格式
|
|
15
|
+
if (/\/apidoc\/shared\//.test(url)) {
|
|
16
|
+
// 提取 shareId 和 interfaceId
|
|
17
|
+
const shareMatch = url.match(/\/apidoc\/shared\/([^\/]+)(?:\/api-([^\/]+))?/);
|
|
18
|
+
if (shareMatch) {
|
|
19
|
+
const shareId = shareMatch[1];
|
|
20
|
+
const interfaceId = shareMatch[2];
|
|
21
|
+
// 如果包含接口ID,识别为获取接口详情
|
|
22
|
+
if (interfaceId) {
|
|
23
|
+
return {
|
|
24
|
+
action: 'getInterfaceDetail',
|
|
25
|
+
interfaceId,
|
|
26
|
+
shareId,
|
|
27
|
+
url,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// 否则是项目整体链接,列出所有接口
|
|
31
|
+
return {
|
|
32
|
+
action: 'listProjectInterfaces',
|
|
33
|
+
shareId,
|
|
34
|
+
url,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
11
39
|
// Detect select interfaces (natural language selection)
|
|
12
40
|
if (SELECT_KEYWORDS.some((kw) => prompt.includes(kw))) {
|
|
13
41
|
const criteria = parseSelectionCriteria(prompt, context?.lastInterfaceListNames);
|
package/dist/core/intent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"AA8BA,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvE,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvD,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEjE,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,OAAyE;IAEzE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,sBAAsB;QACtB,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,2BAA2B;YAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC9E,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAElC,qBAAqB;gBACrB,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO;wBACL,MAAM,EAAE,oBAAoB;wBAC5B,WAAW;wBACX,OAAO;wBACP,GAAG;qBACJ,CAAC;gBACJ,CAAC;gBACD,mBAAmB;gBACnB,OAAO;oBACL,MAAM,EAAE,uBAAuB;oBAC/B,OAAO;oBACP,GAAG;iBACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;QACjF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,cAAc;IACd,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,gBAAgB;IAChB,MAAM,cAAc,GAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,kBAAkB,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,8BAA8B;IAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,oBAAoB;YAC5B,WAAW;YACX,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO;YACL,MAAM,EAAE,oBAAoB;YAC5B,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjF,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,oCAAoC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,OAAO,GAAG,MAAM;SACnB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,IAAI,EAAE,CAAC;IACV,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,UAAqB;IACjE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,UAAqB;IACnE,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,wCAAwC;IACxC,MAAM,aAAa,GAAG,mBAAmB,CAAC;IAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAEjE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAA0C,EAAE,CAAC;QAEzD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAErD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO;gBACP,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO;gBACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,eAAe,GAAG;QACtB,uBAAuB;QACvB,mBAAmB;QACnB,2CAA2C;KAC5C,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACxD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACzF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -5,4 +5,5 @@ export { isValidApifoxUrl, parseApifoxUrl, ShareLinkType } from './url.js';
|
|
|
5
5
|
export type { ParsedUrl } from './url.js';
|
|
6
6
|
export { parseLlmsContent, fetchAndParseLlms } from './llms.js';
|
|
7
7
|
export type { ParsedInterface } from './llms.js';
|
|
8
|
+
export { parseInterfaceFromMd } from './md-parser.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown 接口文档解析器
|
|
3
|
+
* 从接口的 md 文件中解析接口详情
|
|
4
|
+
*/
|
|
5
|
+
import { InterfaceDetail } from '../../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* 从接口 md 文件读取接口详情
|
|
8
|
+
* @param docUrl 接口 md 文件的 URL
|
|
9
|
+
* @returns 接口详情
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseInterfaceFromMd(docUrl: string): Promise<InterfaceDetail | null>;
|
|
12
|
+
//# sourceMappingURL=md-parser.d.ts.map
|