speccore 6.90.0 → 6.91.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.
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.scanApiContracts = scanApiContracts;
37
+ exports.apiEndpointsToNodes = apiEndpointsToNodes;
38
+ exports.scanSqlSchemas = scanSqlSchemas;
39
+ exports.dbTablesToNodes = dbTablesToNodes;
40
+ exports.linkApiToCode = linkApiToCode;
41
+ exports.linkSchemaToCode = linkSchemaToCode;
42
+ exports.extractMultimodalNodes = extractMultimodalNodes;
43
+ /**
44
+ * Code Knowledge Graph — 多模态解析器
45
+ * v6.91.0: 将 API_CONTRACT + SQL Schema 纳入图谱
46
+ */
47
+ const path_1 = require("path");
48
+ const fs_extra_1 = require("fs-extra");
49
+ const glob_1 = require("glob");
50
+ const yaml = __importStar(require("js-yaml"));
51
+ /**
52
+ * 扫描项目中的 API_CONTRACT.yaml / openapi.yaml
53
+ */
54
+ async function scanApiContracts(projectRoot) {
55
+ const results = [];
56
+ // 可能的文件位置
57
+ const candidates = [
58
+ (0, path_1.join)(projectRoot, '.speccore', 'API_CONTRACT.yaml'),
59
+ (0, path_1.join)(projectRoot, '.speccore', 'api-contract.yaml'),
60
+ (0, path_1.join)(projectRoot, 'API_CONTRACT.yaml'),
61
+ (0, path_1.join)(projectRoot, 'openapi.yaml'),
62
+ (0, path_1.join)(projectRoot, 'openapi.yml'),
63
+ ];
64
+ // 也扫描迭代目录
65
+ const iterDirs = await (0, glob_1.glob)((0, path_1.join)(projectRoot, 'Iteration-*/_shared/API_CONTRACT.yaml'));
66
+ candidates.push(...iterDirs);
67
+ for (const filePath of candidates) {
68
+ if (!(await (0, fs_extra_1.pathExists)(filePath)))
69
+ continue;
70
+ try {
71
+ const content = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
72
+ const doc = yaml.load(content);
73
+ if (doc && typeof doc === 'object' && 'paths' in doc) {
74
+ const paths = doc.paths;
75
+ for (const [path, methods] of Object.entries(paths)) {
76
+ for (const [method, spec] of Object.entries(methods)) {
77
+ if (typeof spec !== 'object' || spec === null)
78
+ continue;
79
+ results.push({
80
+ path,
81
+ method: method.toUpperCase(),
82
+ summary: spec.summary,
83
+ operationId: spec.operationId,
84
+ tags: spec.tags,
85
+ });
86
+ }
87
+ }
88
+ }
89
+ }
90
+ catch {
91
+ // 解析失败静默跳过
92
+ }
93
+ }
94
+ return results;
95
+ }
96
+ /**
97
+ * 将 API 端点转为图谱节点
98
+ */
99
+ function apiEndpointsToNodes(endpoints) {
100
+ return endpoints.map((ep, i) => ({
101
+ id: `api:${ep.method}:${ep.path}`,
102
+ name: ep.operationId || `${ep.method} ${ep.path}`,
103
+ type: 'api_endpoint',
104
+ filePath: 'API_CONTRACT.yaml',
105
+ line: i + 1,
106
+ column: 1,
107
+ }));
108
+ }
109
+ /**
110
+ * 扫描项目中的 .sql 文件和 TypeORM entity 文件
111
+ */
112
+ async function scanSqlSchemas(projectRoot) {
113
+ const results = [];
114
+ // 1. 扫描 .sql 文件
115
+ const sqlFiles = await (0, glob_1.glob)((0, path_1.join)(projectRoot, '**/*.sql'), {
116
+ ignore: ['node_modules/**', 'dist/**', '.speccore/cache/**'],
117
+ });
118
+ for (const filePath of sqlFiles) {
119
+ try {
120
+ const content = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
121
+ const tables = parseSqlTables(content, filePath);
122
+ results.push(...tables);
123
+ }
124
+ catch {
125
+ // 跳过
126
+ }
127
+ }
128
+ // 2. 从已解析的 TypeORM entity 中补充(由调用方提供)
129
+ // 这里只处理 .sql 文件,TypeORM entity 在 parser.ts 中已识别为 class 节点
130
+ return results;
131
+ }
132
+ /**
133
+ * 简单正则解析 CREATE TABLE 语句
134
+ */
135
+ function parseSqlTables(sql, sourceFile) {
136
+ const tables = [];
137
+ // 匹配 CREATE TABLE `name` 或 CREATE TABLE name (
138
+ const tableRegex = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?[`"]?(\w+)[`"]?\s*\(([^;]+)\)/gi;
139
+ let match;
140
+ while ((match = tableRegex.exec(sql)) !== null) {
141
+ const tableName = match[1];
142
+ const body = match[2];
143
+ // 提取列名(简单取每行第一个单词)
144
+ const columns = body
145
+ .split('\n')
146
+ .map(l => l.trim())
147
+ .filter(l => l && !l.startsWith('//') && !l.startsWith('/*') && !l.startsWith('*'))
148
+ .map(l => {
149
+ const m = l.match(/[`"]?(\w+)[`"]?/);
150
+ return m ? m[1] : '';
151
+ })
152
+ .filter(Boolean);
153
+ tables.push({ name: tableName, columns, sourceFile });
154
+ }
155
+ return tables;
156
+ }
157
+ /**
158
+ * 将数据库表转为图谱节点
159
+ */
160
+ function dbTablesToNodes(tables) {
161
+ return tables.map((t, i) => ({
162
+ id: `db:${t.name}`,
163
+ name: t.name,
164
+ type: 'db_table',
165
+ filePath: t.sourceFile,
166
+ line: i + 1,
167
+ column: 1,
168
+ }));
169
+ }
170
+ // ── 关联边构建 ──
171
+ /**
172
+ * 将 API 端点与代码中的 handler/controller/service 关联
173
+ * 策略:operationId / path 片段与函数/类名匹配
174
+ */
175
+ function linkApiToCode(apiNodes, codeNodes) {
176
+ const edges = [];
177
+ for (const api of apiNodes) {
178
+ const apiName = api.name.toLowerCase();
179
+ const pathParts = apiName.split(/[\/\s_-]+/).filter(Boolean);
180
+ for (const node of codeNodes) {
181
+ if (node.type !== 'function' && node.type !== 'method' && node.type !== 'class')
182
+ continue;
183
+ const nodeName = node.name.toLowerCase();
184
+ let matched = false;
185
+ // 1. operationId 精确匹配
186
+ if (apiName.replace(/\s+/g, '') === nodeName) {
187
+ matched = true;
188
+ }
189
+ // 2. path 关键词匹配(如 /users/{id} → 匹配 handleUser、UserController)
190
+ else if (pathParts.length > 1) {
191
+ const matchCount = pathParts.filter(p => nodeName.includes(p)).length;
192
+ if (matchCount >= Math.min(2, pathParts.length)) {
193
+ matched = true;
194
+ }
195
+ }
196
+ if (matched) {
197
+ edges.push({
198
+ source: api.id,
199
+ target: node.id,
200
+ type: 'references',
201
+ confidence: 'INFERRED',
202
+ });
203
+ }
204
+ }
205
+ }
206
+ return edges;
207
+ }
208
+ /**
209
+ * 将数据库表与代码中的 repository/model/entity 关联
210
+ * 策略:表名与类名/变量名匹配
211
+ */
212
+ function linkSchemaToCode(dbNodes, codeNodes) {
213
+ const edges = [];
214
+ for (const db of dbNodes) {
215
+ const tableName = db.name.toLowerCase();
216
+ const camelTable = tableName.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
217
+ const pascalTable = camelTable.charAt(0).toUpperCase() + camelTable.slice(1);
218
+ for (const node of codeNodes) {
219
+ if (node.type !== 'class' && node.type !== 'interface' && node.type !== 'variable')
220
+ continue;
221
+ const nodeName = node.name.toLowerCase();
222
+ const nodePascal = node.name;
223
+ let matched = false;
224
+ // 1. 表名精确匹配(忽略大小写)
225
+ if (nodeName === tableName) {
226
+ matched = true;
227
+ }
228
+ // 2. 驼峰/帕斯卡匹配(user → User、UserEntity)
229
+ else if (nodePascal === pascalTable || nodePascal === pascalTable + 'Entity') {
230
+ matched = true;
231
+ }
232
+ // 3. 包含关系(如 user_profile → UserProfileRepository)
233
+ else if (nodePascal.toLowerCase().includes(tableName) || tableName.includes(nodeName)) {
234
+ matched = true;
235
+ }
236
+ if (matched) {
237
+ edges.push({
238
+ source: db.id,
239
+ target: node.id,
240
+ type: 'references',
241
+ confidence: 'INFERRED',
242
+ });
243
+ }
244
+ }
245
+ }
246
+ return edges;
247
+ }
248
+ /**
249
+ * 扫描并解析项目中的 API Contract 和 SQL Schema,返回图谱节点和边
250
+ */
251
+ async function extractMultimodalNodes(projectRoot, codeNodes) {
252
+ const nodes = [];
253
+ const edges = [];
254
+ // 1. API Contract
255
+ const apiEndpoints = await scanApiContracts(projectRoot);
256
+ if (apiEndpoints.length > 0) {
257
+ const apiNodes = apiEndpointsToNodes(apiEndpoints);
258
+ nodes.push(...apiNodes);
259
+ edges.push(...linkApiToCode(apiNodes, codeNodes));
260
+ }
261
+ // 2. SQL Schema
262
+ const dbTables = await scanSqlSchemas(projectRoot);
263
+ if (dbTables.length > 0) {
264
+ const dbNodes = dbTablesToNodes(dbTables);
265
+ nodes.push(...dbNodes);
266
+ edges.push(...linkSchemaToCode(dbNodes, codeNodes));
267
+ }
268
+ return { nodes, edges };
269
+ }
270
+ //# sourceMappingURL=multimodal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multimodal.js","sourceRoot":"","sources":["../../../src/core/code-graph/multimodal.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Code Knowledge Graph — 类型定义
3
3
  * v6.90.0: 本地 AST 解析构建代码知识图谱
4
4
  */
5
- export type NodeType = 'function' | 'class' | 'interface' | 'type' | 'variable' | 'module' | 'method' | 'property' | 'enum';
5
+ export type NodeType = 'function' | 'class' | 'interface' | 'type' | 'variable' | 'module' | 'method' | 'property' | 'enum' | 'api_endpoint' | 'db_table';
6
6
  export type EdgeType = 'calls' | 'imports' | 'exports' | 'extends' | 'implements' | 'references' | 'contains' | 'typed_by';
7
7
  export type Confidence = 'EXTRACTED' | 'INFERRED';
8
8
  export interface CodeNode {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/code-graph/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/code-graph/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GAEN,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB"}
@@ -78,6 +78,7 @@ export interface SpecCorePrompt {
78
78
  taskContext?: string;
79
79
  projectPaths?: string;
80
80
  rulesContent?: string;
81
+ codeGraphSummary?: string;
81
82
  instruction: string;
82
83
  outputHint: string;
83
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ const unified_retrieval_1 = require("./unified-retrieval");
26
26
  const rule_loader_1 = require("./rule-loader");
27
27
  // v6.86.0+: AGENTS 全阶段扩展
28
28
  const agents_1 = require("./agents");
29
+ // v6.91.0+: 代码知识图谱摘要注入
30
+ const code_graph_1 = require("./code-graph");
29
31
  const techStackCache = new Map();
30
32
  const constitutionCache = new Map();
31
33
  const reqContentCache = new Map();
@@ -1217,6 +1219,41 @@ async function buildPrompt(command, options) {
1217
1219
  }
1218
1220
  }
1219
1221
  }
1222
+ // v6.91.0+: analyze 阶段注入代码知识图谱摘要
1223
+ let codeGraphSummary;
1224
+ if (command === 'analyze') {
1225
+ try {
1226
+ const cg = await (0, code_graph_1.loadCodeGraph)(cwd);
1227
+ if (cg) {
1228
+ const lines = [];
1229
+ lines.push('## 📊 代码知识图谱摘要');
1230
+ lines.push(`> 基于本地 AST 解析(${cg.metadata.scannedFiles} 文件, ${cg.metadata.totalNodes} 节点, ${cg.metadata.totalEdges} 边)`);
1231
+ lines.push('');
1232
+ lines.push('### 子系统(自动检测)');
1233
+ for (const comm of cg.communities.slice(0, 8)) {
1234
+ const sample = comm.nodes
1235
+ .map(id => cg.nodes.find(n => n.id === id))
1236
+ .filter(Boolean)
1237
+ .slice(0, 5)
1238
+ .map(n => n.name);
1239
+ lines.push(`- **${comm.label}** (${comm.nodes.length} 节点, 密度 ${(comm.density * 100).toFixed(0)}%): ${sample.join(', ')}`);
1240
+ }
1241
+ lines.push('');
1242
+ lines.push('### 核心节点(God Nodes)');
1243
+ for (const id of cg.godNodes.slice(0, 10)) {
1244
+ const n = cg.nodes.find(node => node.id === id);
1245
+ if (n)
1246
+ lines.push(`- ${n.name} (${n.type}, degree=${n.degree})`);
1247
+ }
1248
+ lines.push('');
1249
+ lines.push('> 提示:如需深入查看完整图谱,运行 `speccore code-index --graph` 后打开 `.speccore/code-graph/graph.html`');
1250
+ codeGraphSummary = lines.join('\n');
1251
+ }
1252
+ }
1253
+ catch {
1254
+ // 图谱不存在时静默跳过
1255
+ }
1256
+ }
1220
1257
  // v6.86.0+: 为 split/plan 命令注入 AGENTS
1221
1258
  let instruction = getInstruction(command, context);
1222
1259
  if (command === 'split' || command === 'plan') {
@@ -1254,6 +1291,7 @@ async function buildPrompt(command, options) {
1254
1291
  taskContext: taskContextStr,
1255
1292
  projectPaths: projectPathsInfo,
1256
1293
  rulesContent,
1294
+ codeGraphSummary,
1257
1295
  instruction,
1258
1296
  outputHint: command === 'execute'
1259
1297
  ? '请返回格式: {"files": [{"path": "工程标识/相对路径", "content": "代码内容"}]}'
@@ -1357,6 +1395,11 @@ function buildPromptText(prompt) {
1357
1395
  lines.push(prompt.rulesContent);
1358
1396
  lines.push('');
1359
1397
  }
1398
+ // v6.91.0+: 代码知识图谱摘要注入
1399
+ if (prompt.codeGraphSummary) {
1400
+ lines.push(prompt.codeGraphSummary);
1401
+ lines.push('');
1402
+ }
1360
1403
  // API 定义
1361
1404
  if (prompt.apiSpecs.length > 0) {
1362
1405
  lines.push('## API 接口定义');