speccore 8.1.2 → 8.3.2

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 (74) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.js +24 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/analyze.d.ts +38 -0
  5. package/dist/commands/analyze.d.ts.map +1 -1
  6. package/dist/commands/analyze.js +1107 -135
  7. package/dist/commands/analyze.js.map +1 -1
  8. package/dist/commands/change.d.ts.map +1 -1
  9. package/dist/commands/change.js +28 -0
  10. package/dist/commands/change.js.map +1 -1
  11. package/dist/commands/clarify.d.ts +6 -0
  12. package/dist/commands/clarify.d.ts.map +1 -1
  13. package/dist/commands/clarify.js +172 -14
  14. package/dist/commands/clarify.js.map +1 -1
  15. package/dist/commands/done.d.ts.map +1 -1
  16. package/dist/commands/done.js +312 -3
  17. package/dist/commands/done.js.map +1 -1
  18. package/dist/commands/execute.d.ts.map +1 -1
  19. package/dist/commands/execute.js +112 -2
  20. package/dist/commands/execute.js.map +1 -1
  21. package/dist/commands/iteration/split.d.ts.map +1 -1
  22. package/dist/commands/iteration/split.js +111 -14
  23. package/dist/commands/iteration/split.js.map +1 -1
  24. package/dist/commands/pattern.d.ts +2 -0
  25. package/dist/commands/pattern.d.ts.map +1 -1
  26. package/dist/commands/pattern.js +43 -0
  27. package/dist/commands/pattern.js.map +1 -1
  28. package/dist/commands/plan.d.ts.map +1 -1
  29. package/dist/commands/plan.js +99 -1
  30. package/dist/commands/plan.js.map +1 -1
  31. package/dist/commands/workspace.d.ts +20 -0
  32. package/dist/commands/workspace.d.ts.map +1 -0
  33. package/dist/commands/workspace.js +142 -0
  34. package/dist/commands/workspace.js.map +1 -0
  35. package/dist/core/ask-engine.d.ts.map +1 -1
  36. package/dist/core/ask-engine.js +18 -0
  37. package/dist/core/ask-engine.js.map +1 -1
  38. package/dist/core/intent-recognition.d.ts +7 -1
  39. package/dist/core/intent-recognition.d.ts.map +1 -1
  40. package/dist/core/intent-recognition.js +33 -3
  41. package/dist/core/intent-recognition.js.map +1 -1
  42. package/dist/core/knowledge-graph.d.ts +6 -1
  43. package/dist/core/knowledge-graph.d.ts.map +1 -1
  44. package/dist/core/knowledge-graph.js +268 -7
  45. package/dist/core/knowledge-graph.js.map +1 -1
  46. package/dist/core/pattern-detector.d.ts +26 -0
  47. package/dist/core/pattern-detector.d.ts.map +1 -0
  48. package/dist/core/pattern-detector.js +256 -0
  49. package/dist/core/pattern-detector.js.map +1 -0
  50. package/dist/core/prompt-builder.d.ts.map +1 -1
  51. package/dist/core/prompt-builder.js +40 -7
  52. package/dist/core/prompt-builder.js.map +1 -1
  53. package/dist/core/questions.js +1 -1
  54. package/dist/core/questions.js.map +1 -1
  55. package/dist/core/requirement-clarifier.d.ts +25 -2
  56. package/dist/core/requirement-clarifier.d.ts.map +1 -1
  57. package/dist/core/requirement-clarifier.js +205 -9
  58. package/dist/core/requirement-clarifier.js.map +1 -1
  59. package/dist/core/spec-skeleton.d.ts.map +1 -1
  60. package/dist/core/spec-skeleton.js +125 -25
  61. package/dist/core/spec-skeleton.js.map +1 -1
  62. package/dist/core/unit-context-assembler.d.ts +50 -0
  63. package/dist/core/unit-context-assembler.d.ts.map +1 -0
  64. package/dist/core/unit-context-assembler.js +442 -0
  65. package/dist/core/unit-context-assembler.js.map +1 -0
  66. package/dist/core/verify-engine.d.ts +4 -3
  67. package/dist/core/verify-engine.d.ts.map +1 -1
  68. package/dist/core/verify-engine.js +623 -24
  69. package/dist/core/verify-engine.js.map +1 -1
  70. package/dist/core/workspace-manager.d.ts +62 -0
  71. package/dist/core/workspace-manager.d.ts.map +1 -0
  72. package/dist/core/workspace-manager.js +175 -0
  73. package/dist/core/workspace-manager.js.map +1 -0
  74. package/package.json +1 -1
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+ /**
3
+ * Unit Context Assembler — 功能单元智能上下文组装引擎
4
+ *
5
+ * 核心设计:三层上下文模型 + Token 预算控制
6
+ * 1. 核心层(40%): 当前功能单元完整需求
7
+ * 2. 关联层(40%): 上下游单元摘要 + 相关源码 Top5
8
+ * 3. 全局层(20%): 术语表 + 接口契约 + 数据模型
9
+ *
10
+ * 目标:给 AI 提供"全面且不漂移"的上下文
11
+ *
12
+ * v8.2.0+
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.assembleUnitContext = assembleUnitContext;
16
+ const fs_extra_1 = require("fs-extra");
17
+ const path_1 = require("path");
18
+ const code_scanner_1 = require("./code-scanner");
19
+ const knowledge_graph_1 = require("./knowledge-graph");
20
+ const unified_retrieval_1 = require("./unified-retrieval");
21
+ const logger_1 = require("../utils/logger");
22
+ // ═══════════════════════════════════════════════════════════
23
+ // 主入口:组装功能单元上下文
24
+ // ═══════════════════════════════════════════════════════════
25
+ async function assembleUnitContext(iterDir, iteration, unit, allUnits, options) {
26
+ const opts = {
27
+ maxTokens: 6000,
28
+ coreRatio: 0.4,
29
+ relatedRatio: 0.4,
30
+ globalRatio: 0.2,
31
+ maxRelatedUnits: 3,
32
+ maxCodeFiles: 5,
33
+ codeCharsPerFile: 800,
34
+ useKnowledgeGraph: true,
35
+ ...options,
36
+ };
37
+ // Token → 字符预算(中文字 ≈ 1.5 tokens/字,取保守值 1.2)
38
+ const charsPerToken = 1.2;
39
+ const totalBudget = Math.floor(opts.maxTokens * charsPerToken);
40
+ const coreBudget = Math.floor(totalBudget * opts.coreRatio);
41
+ const relatedBudget = Math.floor(totalBudget * opts.relatedRatio);
42
+ const globalBudget = Math.floor(totalBudget * opts.globalRatio);
43
+ const lines = [];
44
+ let coreChars = 0;
45
+ let relatedUnitChars = 0;
46
+ let codeChars = 0;
47
+ let globalChars = 0;
48
+ // ── 1. 核心层:当前功能单元完整需求 ──
49
+ lines.push(`# 功能单元: ${unit.id} ${unit.name}`);
50
+ lines.push('');
51
+ lines.push('## 需求描述');
52
+ lines.push('');
53
+ const coreContent = unit.content;
54
+ lines.push(coreContent);
55
+ lines.push('');
56
+ coreChars = coreContent.length;
57
+ // ── 2. 关联层:上下游单元 + 相关源码 ──
58
+ lines.push('---');
59
+ lines.push('');
60
+ // 2a. 上下游单元摘要(Jaccard + 知识图谱双重关联)
61
+ const relatedUnits = await findRelatedUnits(unit, allUnits, opts.maxRelatedUnits, opts.useKnowledgeGraph);
62
+ if (relatedUnits.length > 0) {
63
+ lines.push('## 关联功能单元(上下游)');
64
+ lines.push('> 以下功能单元与当前单元有直接业务关联,分析时请保持逻辑一致性');
65
+ lines.push('');
66
+ for (const ru of relatedUnits) {
67
+ const summary = ru.content.split('\n').slice(0, 5).join('\n');
68
+ const section = `### ${ru.id} ${ru.name}\n${summary}\n`;
69
+ lines.push(section);
70
+ relatedUnitChars += section.length;
71
+ }
72
+ lines.push('');
73
+ }
74
+ // 2b. 相关源码文件(知识图谱 + 语义关键词双重关联)
75
+ const codeFiles = await findRelatedCodeForUnit(unit, iterDir, iteration, opts.maxCodeFiles, opts.codeCharsPerFile, opts.useKnowledgeGraph);
76
+ if (codeFiles.length > 0) {
77
+ lines.push('## 相关源码文件');
78
+ lines.push('> 以下源码文件与当前功能单元相关,分析时请参考实现细节');
79
+ lines.push('');
80
+ for (const cf of codeFiles) {
81
+ const section = `### ${cf.path}\n\`\`\`${cf.language || 'ts'}\n${cf.content}\n\`\`\`\n`;
82
+ lines.push(section);
83
+ codeChars += section.length;
84
+ }
85
+ lines.push('');
86
+ }
87
+ // 2c. RAG 检索补充(相关文档片段)
88
+ if (opts.useKnowledgeGraph) {
89
+ try {
90
+ const ragResult = await (0, unified_retrieval_1.unifiedSearch)(process.cwd(), {
91
+ query: unit.name,
92
+ iteration,
93
+ });
94
+ if (ragResult.documentChunks.length > 0) {
95
+ lines.push('## 相关文档片段(RAG 检索)');
96
+ lines.push('> 以下片段来自项目文档库,可能与当前功能单元相关');
97
+ lines.push('');
98
+ for (const chunk of ragResult.documentChunks.slice(0, 2)) {
99
+ const section = `### ${chunk.title}(${chunk.fileName})\n${chunk.content.slice(0, 500)}\n`;
100
+ lines.push(section);
101
+ relatedUnitChars += section.length;
102
+ }
103
+ lines.push('');
104
+ }
105
+ }
106
+ catch (e) {
107
+ logger_1.logger.debug('RAG 检索补充失败:', e);
108
+ }
109
+ }
110
+ // ── 3. 全局层:术语表 + 接口契约 + 数据模型 ──
111
+ lines.push('---');
112
+ lines.push('');
113
+ const globals = await extractGlobalConstraints(iterDir, globalBudget);
114
+ if (globals.terminology) {
115
+ lines.push('## 术语表(全局共享)');
116
+ lines.push(globals.terminology);
117
+ lines.push('');
118
+ globalChars += globals.terminology.length;
119
+ }
120
+ if (globals.apiContract) {
121
+ lines.push('## 接口契约(全局共享)');
122
+ lines.push(globals.apiContract);
123
+ lines.push('');
124
+ globalChars += globals.apiContract.length;
125
+ }
126
+ if (globals.dataModel) {
127
+ lines.push('## 数据模型(全局共享)');
128
+ lines.push(globals.dataModel);
129
+ lines.push('');
130
+ globalChars += globals.dataModel.length;
131
+ }
132
+ // ── 4. Token 预算检查与截断 ──
133
+ let context = lines.join('\n');
134
+ let totalChars = context.length;
135
+ let estimatedTokens = Math.ceil(totalChars / charsPerToken);
136
+ if (estimatedTokens > opts.maxTokens) {
137
+ logger_1.logger.debug(`单元上下文超出预算: ${estimatedTokens}/${opts.maxTokens} tokens,执行截断`);
138
+ context = truncateByBudget(context, unit, relatedUnits, codeFiles, globals, opts, charsPerToken);
139
+ totalChars = context.length;
140
+ estimatedTokens = Math.ceil(totalChars / charsPerToken);
141
+ }
142
+ return {
143
+ context,
144
+ stats: {
145
+ coreChars,
146
+ relatedUnitChars,
147
+ codeChars,
148
+ globalChars,
149
+ totalChars,
150
+ estimatedTokens,
151
+ relatedUnits: relatedUnits.map(u => `${u.id} ${u.name}`),
152
+ codeFiles: codeFiles.map(f => f.path),
153
+ },
154
+ };
155
+ }
156
+ // ═══════════════════════════════════════════════════════════
157
+ // 辅助函数
158
+ // ═══════════════════════════════════════════════════════════
159
+ /**
160
+ * 基于标题关键词重叠度 + 知识图谱增强找上下游相关单元
161
+ *
162
+ * 双重关联策略:
163
+ * 1. Jaccard 相似度:标题关键词重叠
164
+ * 2. 知识图谱增强:通过 requirement 实体的 refers/implements 关系扩展
165
+ */
166
+ async function findRelatedUnits(unit, allUnits, maxCount, useKG) {
167
+ const unitWords = extractKeywords(unit.name);
168
+ const scores = new Map();
169
+ // 1. 基础 Jaccard 得分
170
+ for (const u of allUnits) {
171
+ if (u.id === unit.id)
172
+ continue;
173
+ const otherWords = extractKeywords(u.name);
174
+ const overlap = unitWords.filter(w => otherWords.includes(w)).length;
175
+ const union = new Set([...unitWords, ...otherWords]).size;
176
+ const jaccard = union > 0 ? overlap / union : 0;
177
+ if (jaccard > 0)
178
+ scores.set(u.id, jaccard);
179
+ }
180
+ // 2. 知识图谱增强(通过 requirement 实体的关系链扩展关联)
181
+ if (useKG) {
182
+ try {
183
+ const graph = await (0, knowledge_graph_1.loadKnowledgeGraph)(process.cwd());
184
+ if (graph) {
185
+ const unitNameLower = unit.name.toLowerCase();
186
+ const matchedReqIds = new Set();
187
+ // 找匹配当前单元名称的 requirement 实体
188
+ for (const entity of Object.values(graph.entities)) {
189
+ if (entity.type !== 'requirement')
190
+ continue;
191
+ const titleLower = entity.title.toLowerCase();
192
+ // 双向包含匹配
193
+ if (titleLower.includes(unitNameLower) || unitNameLower.includes(titleLower)) {
194
+ matchedReqIds.add(entity.id);
195
+ }
196
+ }
197
+ // 通过关系链找邻居 requirement 实体
198
+ for (const rel of graph.relations) {
199
+ if (!matchedReqIds.has(rel.from) && !matchedReqIds.has(rel.to))
200
+ continue;
201
+ const neighborId = matchedReqIds.has(rel.from) ? rel.to : rel.from;
202
+ const neighbor = graph.entities[neighborId];
203
+ if (!neighbor || neighbor.type !== 'requirement')
204
+ continue;
205
+ // 将邻居 requirement 映射回功能单元(标题模糊匹配)
206
+ for (const u of allUnits) {
207
+ if (u.id === unit.id)
208
+ continue;
209
+ const uNameLower = u.name.toLowerCase();
210
+ const neighborTitle = neighbor.title.toLowerCase();
211
+ if (uNameLower.includes(neighborTitle) || neighborTitle.includes(uNameLower)) {
212
+ scores.set(u.id, (scores.get(u.id) || 0) + 0.4); // KG 关联加分
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ catch (e) {
219
+ logger_1.logger.debug('知识图谱关联单元失败:', e);
220
+ }
221
+ }
222
+ // 排序取 top
223
+ return Array.from(scores.entries())
224
+ .sort((a, b) => b[1] - a[1])
225
+ .slice(0, maxCount)
226
+ .map(([id]) => allUnits.find(u => u.id === id))
227
+ .filter(Boolean);
228
+ }
229
+ /** 提取关键词(≥2 字符的中文/英文词) */
230
+ function extractKeywords(text) {
231
+ return text
232
+ .toLowerCase()
233
+ .replace(/[^\u4e00-\u9fa5a-z0-9\s]/g, ' ')
234
+ .split(/\s+/)
235
+ .filter(w => w.length >= 2);
236
+ }
237
+ /**
238
+ * 查找与功能单元相关的源码文件
239
+ *
240
+ * 双重关联策略:
241
+ * 1. 知识图谱直接关联:通过 requirement → source-file 关系链
242
+ * 2. findRelevantCode:语义关键词匹配 + 知识图谱增强评分
243
+ */
244
+ async function findRelatedCodeForUnit(unit, iterDir, iteration, maxFiles, charsPerFile, useKG) {
245
+ const results = [];
246
+ const addedPaths = new Set();
247
+ // 1. 知识图谱直接关联(优先)
248
+ if (useKG) {
249
+ try {
250
+ const graph = await (0, knowledge_graph_1.loadKnowledgeGraph)(process.cwd());
251
+ if (graph) {
252
+ const unitNameLower = unit.name.toLowerCase();
253
+ const matchedReqIds = new Set();
254
+ // 找匹配当前单元名称的 requirement 实体
255
+ for (const entity of Object.values(graph.entities)) {
256
+ if (entity.type !== 'requirement')
257
+ continue;
258
+ const titleLower = entity.title.toLowerCase();
259
+ if (titleLower.includes(unitNameLower) || unitNameLower.includes(titleLower)) {
260
+ matchedReqIds.add(entity.id);
261
+ }
262
+ }
263
+ // 通过关系链找关联的 source-file 实体
264
+ for (const rel of graph.relations) {
265
+ if (!matchedReqIds.has(rel.from) && !matchedReqIds.has(rel.to))
266
+ continue;
267
+ const neighborId = matchedReqIds.has(rel.from) ? rel.to : rel.from;
268
+ const neighbor = graph.entities[neighborId];
269
+ if (!neighbor || neighbor.type !== 'source-file' || !neighbor.file)
270
+ continue;
271
+ const fp = neighbor.file;
272
+ if (addedPaths.has(fp) || addedPaths.size >= maxFiles)
273
+ continue;
274
+ if (!await (0, fs_extra_1.pathExists)(fp))
275
+ continue;
276
+ const content = await (0, fs_extra_1.readFile)(fp, 'utf-8');
277
+ const truncated = truncateCodeFile(content, charsPerFile);
278
+ results.push({ path: fp, language: detectLang(fp), content: truncated });
279
+ addedPaths.add(fp);
280
+ }
281
+ }
282
+ }
283
+ catch (e) {
284
+ logger_1.logger.debug('知识图谱关联源码失败:', e);
285
+ }
286
+ }
287
+ // 2. findRelevantCode 补充(语义关键词匹配)
288
+ try {
289
+ const matches = await (0, code_scanner_1.findRelevantCode)(unit.name, maxFiles * 2, undefined, iteration);
290
+ for (const match of matches) {
291
+ const fp = match.file;
292
+ if (addedPaths.has(fp) || addedPaths.size >= maxFiles)
293
+ continue;
294
+ if (!await (0, fs_extra_1.pathExists)(fp))
295
+ continue;
296
+ const content = await (0, fs_extra_1.readFile)(fp, 'utf-8');
297
+ const truncated = truncateCodeFile(content, charsPerFile);
298
+ results.push({ path: fp, language: detectLang(fp), content: truncated });
299
+ addedPaths.add(fp);
300
+ }
301
+ }
302
+ catch (e) {
303
+ logger_1.logger.debug('语义关联源码失败:', e);
304
+ }
305
+ return results;
306
+ }
307
+ /** 根据文件扩展名检测语言 */
308
+ function detectLang(fp) {
309
+ const ext = fp.split('.').pop() || 'ts';
310
+ return ext === 'ts' || ext === 'tsx' ? 'typescript'
311
+ : ext === 'js' || ext === 'jsx' ? 'javascript'
312
+ : ext === 'vue' ? 'vue'
313
+ : ext === 'py' ? 'python'
314
+ : ext === 'go' ? 'go'
315
+ : ext === 'java' ? 'java'
316
+ : 'text';
317
+ }
318
+ /** 截断源码文件:保留文件头注释 + 前 N 个 export + 截断标记 */
319
+ function truncateCodeFile(content, maxChars) {
320
+ const lines = content.split('\n');
321
+ const result = [];
322
+ let chars = 0;
323
+ let exportCount = 0;
324
+ for (const line of lines) {
325
+ if (chars + line.length > maxChars && exportCount >= 2) {
326
+ result.push('// ... (截断)');
327
+ break;
328
+ }
329
+ if (/^(export |class |function |interface |const |let |type |enum )/.test(line)) {
330
+ exportCount++;
331
+ }
332
+ result.push(line);
333
+ chars += line.length + 1;
334
+ }
335
+ return result.join('\n');
336
+ }
337
+ /** 提取全局约束:术语表、接口契约、数据模型 */
338
+ async function extractGlobalConstraints(iterDir, budget) {
339
+ const result = {};
340
+ let usedBudget = 0;
341
+ // 1. 术语表:从黄金需求目录的所有文档中提取
342
+ const goldenDir = (0, path_1.join)(iterDir, '020-specs', 'requirements');
343
+ if (await (0, fs_extra_1.pathExists)(goldenDir)) {
344
+ try {
345
+ const files = await (0, fs_extra_1.readdir)(goldenDir);
346
+ for (const f of files.filter(f => f.endsWith('.md'))) {
347
+ const content = await (0, fs_extra_1.readFile)((0, path_1.join)(goldenDir, f), 'utf-8');
348
+ const glossaryMatch = content.match(/#{2,3}\s+术语表[\s\S]*?(?=\n#{2,3}|$)/i);
349
+ if (glossaryMatch) {
350
+ const text = glossaryMatch[0].trim();
351
+ if (usedBudget + text.length < budget * 0.5) {
352
+ result.terminology = (result.terminology || '') + '\n' + text;
353
+ usedBudget += text.length;
354
+ }
355
+ }
356
+ }
357
+ }
358
+ catch { /* ignore */ }
359
+ }
360
+ // 2. 接口契约
361
+ const contractPath = (0, path_1.join)(iterDir, '030-tasks', '_shared', 'API_CONTRACT.yaml');
362
+ if (await (0, fs_extra_1.pathExists)(contractPath)) {
363
+ try {
364
+ const content = await (0, fs_extra_1.readFile)(contractPath, 'utf-8');
365
+ if (usedBudget + content.length < budget * 0.8) {
366
+ result.apiContract = content.slice(0, 1500);
367
+ usedBudget += result.apiContract.length;
368
+ }
369
+ }
370
+ catch { /* ignore */ }
371
+ }
372
+ // 3. 数据模型
373
+ const schemaPath = (0, path_1.join)(iterDir, '020-specs', 'SCHEMA.md');
374
+ if (await (0, fs_extra_1.pathExists)(schemaPath)) {
375
+ try {
376
+ const content = await (0, fs_extra_1.readFile)(schemaPath, 'utf-8');
377
+ if (usedBudget + content.length < budget) {
378
+ result.dataModel = content.slice(0, 1500);
379
+ }
380
+ }
381
+ catch { /* ignore */ }
382
+ }
383
+ return result;
384
+ }
385
+ /** 按 Token 预算截断上下文 */
386
+ function truncateByBudget(fullContext, unit, relatedUnits, codeFiles, globals, opts, charsPerToken) {
387
+ const lines = [];
388
+ const maxChars = Math.floor(opts.maxTokens * charsPerToken);
389
+ let usedChars = 0;
390
+ // 优先级 1:核心层(当前单元)— 必须保留
391
+ const coreHeader = `# 功能单元: ${unit.id} ${unit.name}\n\n## 需求描述\n\n`;
392
+ const coreContent = unit.content;
393
+ const coreTotal = coreHeader.length + coreContent.length;
394
+ if (coreTotal > maxChars * 0.6) {
395
+ // 核心层本身就超了,只保留核心层的前 60%
396
+ lines.push(coreHeader);
397
+ lines.push(coreContent.slice(0, Math.floor(maxChars * 0.6) - coreHeader.length));
398
+ lines.push('\n\n> ⚠️ 需求内容过长,已截断。如需完整内容请阅读原文档。');
399
+ return lines.join('');
400
+ }
401
+ lines.push(coreHeader);
402
+ lines.push(coreContent);
403
+ usedChars += coreTotal;
404
+ // 优先级 2:关联层 — 保留上下游单元,源码按预算截断
405
+ if (relatedUnits.length > 0 && usedChars < maxChars * 0.8) {
406
+ lines.push('\n---\n\n## 关联功能单元(上下游)\n> 以下功能单元与当前单元有直接业务关联\n\n');
407
+ usedChars += lines[lines.length - 1].length;
408
+ for (const ru of relatedUnits) {
409
+ if (usedChars >= maxChars * 0.85)
410
+ break;
411
+ const summary = ru.content.split('\n').slice(0, 3).join('\n');
412
+ const section = `### ${ru.id} ${ru.name}\n${summary}\n\n`;
413
+ lines.push(section);
414
+ usedChars += section.length;
415
+ }
416
+ }
417
+ // 源码文件:按预算逐个添加
418
+ if (codeFiles.length > 0 && usedChars < maxChars * 0.9) {
419
+ lines.push('\n## 相关源码文件\n> 以下源码文件与当前功能单元相关\n\n');
420
+ usedChars += lines[lines.length - 1].length;
421
+ for (const cf of codeFiles) {
422
+ if (usedChars >= maxChars * 0.95)
423
+ break;
424
+ const remaining = maxChars - usedChars - 100; // 预留 100 字符缓冲
425
+ const codeContent = remaining < cf.content.length
426
+ ? cf.content.slice(0, remaining) + '\n// ... (截断)\n'
427
+ : cf.content;
428
+ const section = `### ${cf.path}\n\`\`\`${cf.language}\n${codeContent}\n\`\`\`\n\n`;
429
+ lines.push(section);
430
+ usedChars += section.length;
431
+ }
432
+ }
433
+ // 优先级 3:全局层 — 只加术语表(最重要)
434
+ if (globals.terminology && usedChars < maxChars * 0.98) {
435
+ lines.push('\n---\n\n## 术语表(全局共享)\n');
436
+ const remaining = maxChars - usedChars - 50;
437
+ lines.push(globals.terminology.slice(0, remaining));
438
+ usedChars += globals.terminology.slice(0, remaining).length;
439
+ }
440
+ return lines.join('');
441
+ }
442
+ //# sourceMappingURL=unit-context-assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-context-assembler.js","sourceRoot":"","sources":["../../src/core/unit-context-assembler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAwDH,kDAmJC;AAzMD,uCAAyD;AACzD,+BAAsC;AACtC,iDAAkD;AAClD,uDAAuD;AACvD,2DAAoD;AACpD,4CAAyC;AA6CzC,8DAA8D;AAC9D,gBAAgB;AAChB,8DAA8D;AAEvD,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,SAAiB,EACjB,IAAa,EACb,QAAmB,EACnB,OAA4B;IAE5B,MAAM,IAAI,GAAG;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,gBAAgB,EAAE,GAAG;QACrB,iBAAiB,EAAE,IAAI;QACvB,GAAG,OAAO;KACX,CAAC;IAEF,4CAA4C;IAC5C,MAAM,aAAa,GAAG,GAAG,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,0BAA0B;IAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;IAE/B,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kCAAkC;IAClC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1G,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3I,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,OAAO,YAAY,CAAC;YACxF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAa,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE;gBACnD,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,SAAS;aACV,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;oBAC1F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;gBACrC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IAC1C,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,CAAC;IAE5D,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,eAAM,CAAC,KAAK,CAAC,cAAc,eAAe,IAAI,IAAI,CAAC,SAAS,cAAc,CAAC,CAAC;QAC5E,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACjG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,SAAS;YACT,gBAAgB;YAChB,SAAS;YACT,WAAW;YACX,UAAU;YACV,eAAe;YACf,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACtC;KACF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,OAAO;AACP,8DAA8D;AAE9D;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAC7B,IAAa,EACb,QAAmB,EACnB,QAAgB,EAChB,KAAc;IAEd,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,mBAAmB;IACnB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YAAE,SAAS;QAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,uCAAuC;IACvC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAkB,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;gBAExC,4BAA4B;gBAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;wBAAE,SAAS;oBAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC9C,SAAS;oBACT,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBAED,0BAA0B;gBAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAEzE,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa;wBAAE,SAAS;oBAE3D,kCAAkC;oBAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;wBACzB,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;4BAAE,SAAS;wBAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC7E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU;wBAC7D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,UAAU;IACV,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;SAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,0BAA0B;AAC1B,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;SACzC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,IAAa,EACb,OAAe,EACf,SAAiB,EACjB,QAAgB,EAChB,YAAoB,EACpB,KAAc;IAEd,MAAM,OAAO,GAA0D,EAAE,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,kBAAkB;IAClB,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAkB,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;gBAExC,4BAA4B;gBAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;wBAAE,SAAS;oBAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAEzE,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,QAAQ,CAAC,IAAI;wBAAE,SAAS;oBAE7E,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACzB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ;wBAAE,SAAS;oBAChE,IAAI,CAAC,MAAM,IAAA,qBAAU,EAAC,EAAE,CAAC;wBAAE,SAAS;oBAEpC,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,+BAAgB,EAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ;gBAAE,SAAS;YAChE,IAAI,CAAC,MAAM,IAAA,qBAAU,EAAC,EAAE,CAAC;gBAAE,SAAS;YAEpC,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACzE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,eAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kBAAkB;AAClB,SAAS,UAAU,CAAC,EAAU;IAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACxC,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY;QACjD,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY;YAC9C,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK;gBACvB,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ;oBACzB,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI;wBACrB,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM;4BACzB,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED,2CAA2C;AAC3C,SAAS,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM;QACR,CAAC;QACD,IAAI,gEAAgE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,WAAW,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,2BAA2B;AAC3B,KAAK,UAAU,wBAAwB,CACrC,OAAe,EACf,MAAc;IAEd,MAAM,MAAM,GAAuE,EAAE,CAAC;IACtF,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,MAAM,IAAA,qBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,SAAS,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBAC3E,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;wBAC5C,MAAM,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;wBAC9D,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;IACV,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAChF,IAAI,MAAM,IAAA,qBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC/C,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC5C,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;IACV,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,MAAM,IAAA,qBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACzC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sBAAsB;AACtB,SAAS,gBAAgB,CACvB,WAAmB,EACnB,IAAa,EACb,YAAuB,EACvB,SAAgE,EAChE,OAA2E,EAC3E,IAAkC,EAClC,aAAqB;IAErB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC;IAC5D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,wBAAwB;IACxB,MAAM,UAAU,GAAG,WAAW,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAEzD,IAAI,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;QAC/B,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,SAAS,IAAI,SAAS,CAAC;IAEvB,8BAA8B;IAC9B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAE5C,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,SAAS,IAAI,QAAQ,GAAG,IAAI;gBAAE,MAAM;YACxC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,MAAM,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAE5C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,SAAS,IAAI,QAAQ,GAAG,IAAI;gBAAE,MAAM;YACxC,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,cAAc;YAC5D,MAAM,WAAW,GAAG,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM;gBAC/C,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,iBAAiB;gBACpD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;YACf,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,QAAQ,KAAK,WAAW,cAAc,CAAC;YACnF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,CAAC,WAAW,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
@@ -39,14 +39,15 @@ export declare function runVerification(taskId: string, codePath: string, option
39
39
  */
40
40
  export declare function writeVerifyReport(report: VerifyReport, outputDir: string): Promise<string>;
41
41
  /**
42
- * 生成 AI 修复 Prompt
42
+ * 生成 AI 修复 Prompt(v8.2.0+ 增强版)
43
43
  * 当验证失败时,生成结构化 Prompt 让 AI 定位并修复问题
44
+ * 注入任务规格上下文、知识图谱依赖链、API 契约等
44
45
  */
45
- export declare function generateFixPrompt(report: VerifyReport, taskDir: string): string;
46
+ export declare function generateFixPrompt(report: VerifyReport, taskDir: string): Promise<string>;
46
47
  /**
47
48
  * 生成 SPECCORE_EXEC 标签,触发 AI 修复
48
49
  */
49
- export declare function outputFixTag(report: VerifyReport, taskDir: string, round: number): void;
50
+ export declare function outputFixTag(report: VerifyReport, taskDir: string, round: number): Promise<void>;
50
51
  export interface AgentQualityCheck {
51
52
  agent: string;
52
53
  prompt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"verify-engine.d.ts","sourceRoot":"","sources":["../../src/core/verify-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAO9E;AAyID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0DnE;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,YAAY,CAAC,CAmEvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgD/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQvF;AAsYD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,iBAAiB,CAAC,CA2H5B;AAgID;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"verify-engine.d.ts","sourceRoot":"","sources":["../../src/core/verify-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAO9E;AAyID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0DnE;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,YAAY,CAAC,CAmEvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhG;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgG9F;AAkDD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtG;AAy1BD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,iBAAiB,CAAC,CA2I5B;AAgID;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}