@winspan/claude-forge 0.3.5 → 0.3.6
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/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +54 -7
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/writer.d.ts +5 -0
- package/dist/claudemd/writer.d.ts.map +1 -1
- package/dist/claudemd/writer.js +36 -0
- package/dist/claudemd/writer.js.map +1 -1
- package/dist/distill/index.d.ts.map +1 -1
- package/dist/distill/index.js +18 -3
- package/dist/distill/index.js.map +1 -1
- package/dist/skill-registry/evolver/generation-engine.d.ts.map +1 -1
- package/dist/skill-registry/evolver/generation-engine.js +6 -0
- package/dist/skill-registry/evolver/generation-engine.js.map +1 -1
- package/dist/skill-registry/evolver/optimization-engine.d.ts.map +1 -1
- package/dist/skill-registry/evolver/optimization-engine.js +6 -1
- package/dist/skill-registry/evolver/optimization-engine.js.map +1 -1
- package/dist/skill-registry/evolver/repair-engine.js +7 -1
- package/dist/skill-registry/evolver/repair-engine.js.map +1 -1
- package/dist/skill-registry/evolver/shared.d.ts +5 -0
- package/dist/skill-registry/evolver/shared.d.ts.map +1 -1
- package/dist/skill-registry/evolver/shared.js +32 -0
- package/dist/skill-registry/evolver/shared.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAWvE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,GAAG,EAAE,UAAU;IAM3B;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAmBlB;;;OAGG;YACW,aAAa;IAgC3B,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,cAAc;IAItE;;OAEG;IACG,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,OAAe,EACtB,KAAK,GAAE,OAAe,EACtB,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,OAAO,CAAC;IAgEnB;;OAEG;IACG,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAqBhD;;OAEG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,UAAU,EAAE,GACnB,OAAO,CAAC,OAAO,CAAC;IA+GnB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,mBAAmB;CAO5B"}
|
package/dist/claudemd/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { TechStackDetector } from './detector.js';
|
|
2
2
|
import { ClaudeMdPrompts } from './prompts.js';
|
|
3
|
-
import { ClaudeMdWriter } from './writer.js';
|
|
3
|
+
import { ClaudeMdWriter, validateClaudeMdContent } from './writer.js';
|
|
4
4
|
import { ModulesConfigManager } from './modules-config.js';
|
|
5
5
|
import { DistillWriter } from '../distill/writer.js';
|
|
6
6
|
import { logger } from '../utils/logger.js';
|
|
7
7
|
import fs from 'fs';
|
|
8
8
|
import path from 'path';
|
|
9
|
+
const MAX_RETRIES = 3;
|
|
9
10
|
export class ClaudeMdEngine {
|
|
10
11
|
detector;
|
|
11
12
|
api;
|
|
@@ -54,6 +55,11 @@ export class ClaudeMdEngine {
|
|
|
54
55
|
const updated = this.parsePersonaUpdate(response);
|
|
55
56
|
if (!updated)
|
|
56
57
|
return;
|
|
58
|
+
// 校验人设内容(至少 10 个字符,无占位符)
|
|
59
|
+
if (updated.length < 10 || /原有内容保留/.test(updated)) {
|
|
60
|
+
logger.warn(`[Forge:CLAUDE.md] 人设内容校验失败,跳过写入`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
57
63
|
const personaDir = path.join(projectPath, '.claude-forge');
|
|
58
64
|
if (!fs.existsSync(personaDir))
|
|
59
65
|
fs.mkdirSync(personaDir, { recursive: true });
|
|
@@ -117,10 +123,20 @@ export class ClaudeMdEngine {
|
|
|
117
123
|
? ClaudeMdPrompts.buildModulePrompt(profile, parentContext, userContent, persona)
|
|
118
124
|
: ClaudeMdPrompts.buildGenerationPrompt(profile, userContent, persona);
|
|
119
125
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
let lastValidationError = '';
|
|
127
|
+
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
128
|
+
const response = await this.api.complete(prompt, 'claudemd', { timeoutMs: 180_000 });
|
|
129
|
+
const validationError = validateClaudeMdContent(response);
|
|
130
|
+
if (!validationError) {
|
|
131
|
+
this.writer.writeClaudeMd(projectPath, response);
|
|
132
|
+
logger.info(`CLAUDE.md 已生成:${projectPath}`);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
lastValidationError = validationError;
|
|
136
|
+
logger.warn(`[Forge:CLAUDE.md] 内容校验失败(第${attempt}次/${MAX_RETRIES}),重试:${validationError}`);
|
|
137
|
+
}
|
|
138
|
+
logger.error(`[Forge:CLAUDE.md] 生成失败:${MAX_RETRIES} 次尝试均未通过校验(${lastValidationError})`);
|
|
139
|
+
return false;
|
|
124
140
|
}
|
|
125
141
|
catch (err) {
|
|
126
142
|
logger.error(`CLAUDE.md 生成失败:${err}`);
|
|
@@ -173,7 +189,7 @@ export class ClaudeMdEngine {
|
|
|
173
189
|
const profile = this.detector.detect(projectPath);
|
|
174
190
|
const persona = this.getPersona(projectPath, profile);
|
|
175
191
|
const prompt = ClaudeMdPrompts.buildRefinementPrompt(currentContent, effectiveContent, events, profile, persona, { structureSummaryOnly: true, projectPath });
|
|
176
|
-
const response = await this.api.complete(prompt, 'claudemd');
|
|
192
|
+
const response = await this.api.complete(prompt, 'claudemd', { timeoutMs: 180_000 });
|
|
177
193
|
// 解析 SHOULD_UPDATE 标志
|
|
178
194
|
const shouldUpdate = this.parseShouldUpdate(response);
|
|
179
195
|
if (!shouldUpdate) {
|
|
@@ -194,7 +210,38 @@ export class ClaudeMdEngine {
|
|
|
194
210
|
logger.warn('CLAUDE.md refinement: SHOULD_UPDATE=true but no content found');
|
|
195
211
|
return false;
|
|
196
212
|
}
|
|
197
|
-
|
|
213
|
+
// 校验内容后写入,失败则重试
|
|
214
|
+
let contentToWrite = updatedContent;
|
|
215
|
+
let writeValidationError = validateClaudeMdContent(contentToWrite);
|
|
216
|
+
if (writeValidationError) {
|
|
217
|
+
logger.warn(`[Forge:CLAUDE.md] refine 内容校验失败(第1次/${MAX_RETRIES}),重试:${writeValidationError}`);
|
|
218
|
+
let retried = false;
|
|
219
|
+
for (let attempt = 2; attempt <= MAX_RETRIES; attempt++) {
|
|
220
|
+
const retryResponse = await this.api.complete(prompt, 'claudemd', { timeoutMs: 180_000 });
|
|
221
|
+
const retryShouldUpdate = this.parseShouldUpdate(retryResponse);
|
|
222
|
+
if (!retryShouldUpdate) {
|
|
223
|
+
logger.info('[Forge:CLAUDE.md] 重试后 SHOULD_UPDATE=false,跳过');
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
const retryContent = this.parseUpdatedContent(retryResponse);
|
|
227
|
+
if (!retryContent)
|
|
228
|
+
continue;
|
|
229
|
+
const retryError = validateClaudeMdContent(retryContent);
|
|
230
|
+
if (!retryError) {
|
|
231
|
+
contentToWrite = retryContent;
|
|
232
|
+
writeValidationError = null;
|
|
233
|
+
retried = true;
|
|
234
|
+
logger.info(`[Forge:CLAUDE.md] 重试第${attempt}次校验通过`);
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
logger.warn(`[Forge:CLAUDE.md] refine 内容校验失败(第${attempt}次/${MAX_RETRIES}):${retryError}`);
|
|
238
|
+
}
|
|
239
|
+
if (!retried) {
|
|
240
|
+
logger.error(`[Forge:CLAUDE.md] refine 失败:${MAX_RETRIES} 次尝试均未通过校验,保留原文件`);
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
this.writer.updateAutoSection(projectPath, contentToWrite);
|
|
198
245
|
logger.info('CLAUDE.md 细化成功');
|
|
199
246
|
// 更新 refine 状态
|
|
200
247
|
distillWriter.writeRefineState(projectPath, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAuB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 校验 AI 生成的 CLAUDE.md 自动区块内容是否有效。
|
|
3
|
+
* 返回 null 表示校验通过;返回字符串说明具体问题。
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateClaudeMdContent(content: string): string | null;
|
|
1
6
|
export declare class ClaudeMdWriter {
|
|
2
7
|
private getClaudeMdPath;
|
|
3
8
|
readClaudeMd(projectPath: string): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BtE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe;IAIvB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMhD;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAM5C;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAkB3C;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAgB7D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpE;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;CA0BtE"}
|
package/dist/claudemd/writer.js
CHANGED
|
@@ -2,6 +2,42 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
const AUTO_START = '<!-- forge:claudemd-auto -->';
|
|
4
4
|
const AUTO_END = '<!-- forge:end-claudemd-auto -->';
|
|
5
|
+
/** 占位符模式:AI 返回"保留原内容"类的无效输出 */
|
|
6
|
+
const PLACEHOLDER_PATTERNS = [
|
|
7
|
+
/原有内容保留[,,]?无变更/,
|
|
8
|
+
/以下为需要追加[\//]更新到/,
|
|
9
|
+
/\(原有内容保留[,,]?无变更\)/,
|
|
10
|
+
/\(原有内容保留[,,]?无变更\)/,
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* 校验 AI 生成的 CLAUDE.md 自动区块内容是否有效。
|
|
14
|
+
* 返回 null 表示校验通过;返回字符串说明具体问题。
|
|
15
|
+
*/
|
|
16
|
+
export function validateClaudeMdContent(content) {
|
|
17
|
+
if (!content || content.trim().length === 0) {
|
|
18
|
+
return '内容为空';
|
|
19
|
+
}
|
|
20
|
+
const lines = content.split('\n').filter(line => line.trim().length > 0);
|
|
21
|
+
if (lines.length < 20) {
|
|
22
|
+
return `内容行数过少(${lines.length} 行,要求 ≥20)`;
|
|
23
|
+
}
|
|
24
|
+
// 检测 AI 返回了占位符而非真实内容
|
|
25
|
+
for (const pattern of PLACEHOLDER_PATTERNS) {
|
|
26
|
+
if (pattern.test(content)) {
|
|
27
|
+
return `内容包含占位符文本(匹配:${pattern})`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// 必须包含至少一个 Markdown 章节标题
|
|
31
|
+
if (!/^##\s+.+/m.test(content)) {
|
|
32
|
+
return '内容缺少有效的 Markdown 章节标题(## ...)';
|
|
33
|
+
}
|
|
34
|
+
// 检测截断:最后一行异常短且不是标题/列表行
|
|
35
|
+
const lastLine = content.trimEnd().split('\n').pop() || '';
|
|
36
|
+
if (lastLine.length > 0 && lastLine.length < 10 && !lastLine.match(/^[#>\-*]/)) {
|
|
37
|
+
return `内容疑似被截断(末行仅 ${lastLine.length} 个字符)`;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
5
41
|
export class ClaudeMdWriter {
|
|
6
42
|
getClaudeMdPath(projectPath) {
|
|
7
43
|
return path.join(projectPath, 'CLAUDE.md');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/distill/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,uCAAuC;AACvC,MAAM,MAAM,uBAAuB,GAAG,CACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,UAAU,EAAE,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAS;gBAG7B,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;QAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;IASG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/distill/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,uCAAuC;AACvC,MAAM,MAAM,uBAAuB,GAAG,CACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,UAAU,EAAE,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAS;gBAG7B,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;QAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;IASG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwE/E;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCpG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB1D,OAAO,CAAC,aAAa;CAgCtB"}
|
package/dist/distill/index.js
CHANGED
|
@@ -32,10 +32,22 @@ export class DistillEngine {
|
|
|
32
32
|
// 3. 解析响应并写入文件
|
|
33
33
|
const { decisions, timeline } = this.parseResponse(response);
|
|
34
34
|
if (decisions) {
|
|
35
|
-
|
|
35
|
+
// 校验决策内容:至少 10 个字符,无纯占位符
|
|
36
|
+
if (decisions.length < 10 || decisions === '无显著决策') {
|
|
37
|
+
logger.warn(`[蒸馏] decisions 内容过短或无效,跳过写入`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.writer.writeDecisions(resolvedProjectPath, decisions);
|
|
41
|
+
}
|
|
36
42
|
}
|
|
37
43
|
if (timeline) {
|
|
38
|
-
|
|
44
|
+
// 校验时间线内容:至少 10 个字符,无纯占位符
|
|
45
|
+
if (timeline.length < 10 || timeline === '无显著变更') {
|
|
46
|
+
logger.warn(`[蒸馏] timeline 内容过短或无效,跳过写入`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.writer.writeTimeline(resolvedProjectPath, timeline);
|
|
50
|
+
}
|
|
39
51
|
}
|
|
40
52
|
// 4. 标记事件为已蒸馏
|
|
41
53
|
const eventIds = events.map((e) => e.event_id);
|
|
@@ -78,9 +90,12 @@ export class DistillEngine {
|
|
|
78
90
|
const prompt = DistillPrompts.buildLightweightPrompt(events);
|
|
79
91
|
const response = await this.api.complete(prompt, 'distill-lightweight');
|
|
80
92
|
const timeline = response.trim();
|
|
81
|
-
if (timeline && timeline !== '无显著变更') {
|
|
93
|
+
if (timeline && timeline !== '无显著变更' && timeline.length >= 10) {
|
|
82
94
|
this.writer.writeTimeline(projectPath, timeline);
|
|
83
95
|
}
|
|
96
|
+
else if (timeline && timeline.length < 10) {
|
|
97
|
+
logger.warn(`[轻量蒸馏] timeline 内容过短,跳过写入`);
|
|
98
|
+
}
|
|
84
99
|
// 标记为已蒸馏
|
|
85
100
|
const eventIds = events.map((e) => e.event_id);
|
|
86
101
|
this.storage.markEventsDistilled(eventIds);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/distill/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C,MAAM,OAAO,aAAa;IAChB,OAAO,CAAgB;IACvB,GAAG,CAAa;IAChB,MAAM,CAAgB;IACtB,iBAAiB,CAAiC;IAClD,YAAY,GAAW,CAAC,CAAC;IACzB,cAAc,CAAS;IAE/B,YACE,OAAsB,EACtB,GAAe,EACf,OAGC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,WAAoB;QAC1D,aAAa;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,UAAU,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,MAAM,mBAAmB,GAAG,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAElE,MAAM,CAAC,IAAI,CACT,UAAU,SAAS,MAAM,MAAM,CAAC,MAAM,SAAS,mBAAmB,GAAG,CACtE,CAAC;QAEF,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAE5D,eAAe;YACf,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE7D,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/distill/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation-engine.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/generation-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"generation-engine.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/generation-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAM7D;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAsEnB"}
|
|
@@ -2,6 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import { logger } from '../../utils/logger.js';
|
|
5
|
+
import { validateContentString } from './shared.js';
|
|
5
6
|
const SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
6
7
|
/**
|
|
7
8
|
* 发现缺失能力并生成新 Skill
|
|
@@ -39,6 +40,11 @@ ${topUsed.map(s => `- ${s.name}: ${s.stats.callCount}次`).join('\n')}
|
|
|
39
40
|
const skillName = rawSkillName?.replace(/^`+|`+$/g, '').replace(/^```\w*\s*|\s*```$/g, '').trim();
|
|
40
41
|
const skillContent = contentMatch?.[1]?.trim();
|
|
41
42
|
if (skillName && skillName !== 'NONE' && /^[\w-]+$/.test(skillName) && skillContent && skillContent.length > 50) {
|
|
43
|
+
const validationError = validateContentString(skillContent);
|
|
44
|
+
if (validationError) {
|
|
45
|
+
logger.warn(`[进化器] 生成内容校验失败,跳过:${skillName} — ${validationError}`);
|
|
46
|
+
return generated;
|
|
47
|
+
}
|
|
42
48
|
const skillDir = path.join(SKILLS_DIR, skillName);
|
|
43
49
|
if (!fs.existsSync(skillDir)) {
|
|
44
50
|
fs.mkdirSync(skillDir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/generation-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"generation-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/generation-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimization-engine.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/optimization-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAoC7D;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"optimization-engine.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/optimization-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAoC7D;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAyDnB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
|
-
import { extractSkillMd } from './shared.js';
|
|
4
|
+
import { extractSkillMd, validateContentString } from './shared.js';
|
|
5
5
|
import { logger } from '../../utils/logger.js';
|
|
6
6
|
const SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
7
7
|
/**
|
|
@@ -58,6 +58,11 @@ export async function optimizeExisting(registry, api) {
|
|
|
58
58
|
const content = fs.readFileSync(skillMdPath, 'utf-8');
|
|
59
59
|
const suggestion = await generateOptimization(skill, content, dimension, api);
|
|
60
60
|
if (suggestion) {
|
|
61
|
+
const validationError = validateContentString(suggestion);
|
|
62
|
+
if (validationError) {
|
|
63
|
+
logger.warn(`[进化器] 优化内容校验失败,保留原文件:${skill.name} — ${validationError}`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
61
66
|
fs.copyFileSync(skillMdPath, skillMdPath + '.bak');
|
|
62
67
|
fs.writeFileSync(skillMdPath, suggestion, 'utf-8');
|
|
63
68
|
optimized.push(skill.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimization-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/optimization-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"optimization-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/optimization-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import { logger } from '../../utils/logger.js';
|
|
5
|
-
import { extractSkillMd } from './shared.js';
|
|
5
|
+
import { extractSkillMd, validateContentString } from './shared.js';
|
|
6
6
|
const SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
7
7
|
/** skill 名称合法格式:只允许字母、数字、连字符 */
|
|
8
8
|
const VALID_NAME_RE = /^[a-zA-Z0-9-]+$/;
|
|
@@ -194,6 +194,12 @@ async function repairSkill(skill, reason, api) {
|
|
|
194
194
|
logger.warn(`[质量门禁] AI 生成失败:${skill.name}`);
|
|
195
195
|
return false;
|
|
196
196
|
}
|
|
197
|
+
// 写入前校验新内容完整性,防止截断内容覆盖原文件
|
|
198
|
+
const validationError = validateContentString(repairedContent);
|
|
199
|
+
if (validationError) {
|
|
200
|
+
logger.warn(`[质量门禁] 新内容校验失败,保留原文件:${skill.name} — ${validationError}`);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
197
203
|
// 写入修复后的内容
|
|
198
204
|
fs.writeFileSync(skillMdPath, repairedContent, 'utf-8');
|
|
199
205
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/repair-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"repair-engine.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/repair-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,9 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function extractSkillMd(response: string): string | null;
|
|
12
12
|
export declare function bumpVersion(version: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* 校验 AI 生成的 Skill 内容是否完整可用(内存版本,不写磁盘)。
|
|
15
|
+
* 返回 null 表示校验通过;返回字符串说明具体问题。
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateContentString(content: string): string | null;
|
|
13
18
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2B9D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAInD"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/skill-registry/evolver/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2B9D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmCpE"}
|
|
@@ -39,4 +39,36 @@ export function bumpVersion(version) {
|
|
|
39
39
|
parts[2] = (parts[2] || 0) + 1;
|
|
40
40
|
return parts.join('.');
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* 校验 AI 生成的 Skill 内容是否完整可用(内存版本,不写磁盘)。
|
|
44
|
+
* 返回 null 表示校验通过;返回字符串说明具体问题。
|
|
45
|
+
*/
|
|
46
|
+
export function validateContentString(content) {
|
|
47
|
+
if (!content || content.trim().length === 0) {
|
|
48
|
+
return '内容为空';
|
|
49
|
+
}
|
|
50
|
+
const lines = content.split('\n').filter(line => line.trim().length > 0);
|
|
51
|
+
if (lines.length < 30) {
|
|
52
|
+
return `内容行数过少(${lines.length} 行,要求 ≥30)`;
|
|
53
|
+
}
|
|
54
|
+
if (!content.trimStart().startsWith('---')) {
|
|
55
|
+
return '缺少 frontmatter(首行应为 ---)';
|
|
56
|
+
}
|
|
57
|
+
const hasFrontmatter = content.includes('name:') || content.includes('title:');
|
|
58
|
+
if (!hasFrontmatter) {
|
|
59
|
+
return 'frontmatter 缺少 name 或 title 字段';
|
|
60
|
+
}
|
|
61
|
+
const hasWorkflow = /##\s*(工作流|流程|步骤|Workflow|Process)/i.test(content);
|
|
62
|
+
const hasPrinciple = /##\s*(核心理念|原则|Principle|Core)/i.test(content);
|
|
63
|
+
const hasChecklist = /##\s*(检查清单|Checklist|验证)/i.test(content);
|
|
64
|
+
if (!hasWorkflow && !hasPrinciple && !hasChecklist) {
|
|
65
|
+
return '缺少核心章节(工作流/原则/检查清单)';
|
|
66
|
+
}
|
|
67
|
+
// 检测截断:最后一行内容异常短且不是标题行
|
|
68
|
+
const lastLine = content.trimEnd().split('\n').pop() || '';
|
|
69
|
+
if (lastLine.length > 0 && lastLine.length < 10 && !lastLine.match(/^#+\s/)) {
|
|
70
|
+
return `内容疑似被截断(末行仅 ${lastLine.length} 个字符)`;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
42
74
|
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,0CAA0C;IAC1C,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvF,iBAAiB;IACjB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACnD,CAAC;IAED,gCAAgC;IAChC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC7E,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IAChF,CAAC;IAED,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/skill-registry/evolver/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,0CAA0C;IAC1C,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvF,iBAAiB;IACjB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACnD,CAAC;IAED,gCAAgC;IAChC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC7E,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IAChF,CAAC;IAED,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzE,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,UAAU,KAAK,CAAC,MAAM,YAAY,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;QACnD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,uBAAuB;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,eAAe,QAAQ,CAAC,MAAM,OAAO,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|