@jclaw/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-skill/generator.d.ts +30 -0
- package/dist/auto-skill/generator.d.ts.map +1 -0
- package/dist/auto-skill/generator.js +262 -0
- package/dist/auto-skill/generator.js.map +1 -0
- package/dist/auto-skill/index.d.ts +11 -0
- package/dist/auto-skill/index.d.ts.map +1 -0
- package/dist/auto-skill/index.js +10 -0
- package/dist/auto-skill/index.js.map +1 -0
- package/dist/auto-skill/installer.d.ts +44 -0
- package/dist/auto-skill/installer.d.ts.map +1 -0
- package/dist/auto-skill/installer.js +201 -0
- package/dist/auto-skill/installer.js.map +1 -0
- package/dist/auto-skill/types.d.ts +179 -0
- package/dist/auto-skill/types.d.ts.map +1 -0
- package/dist/auto-skill/types.js +9 -0
- package/dist/auto-skill/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +16 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +119 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/exec.d.ts +12 -0
- package/dist/cli/commands/exec.d.ts.map +1 -0
- package/dist/cli/commands/exec.js +41 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +91 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/run.d.ts +9 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +13 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/context/index.d.ts +6 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +12 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/memsearch-client.d.ts +34 -0
- package/dist/context/memsearch-client.d.ts.map +1 -0
- package/dist/context/memsearch-client.js +182 -0
- package/dist/context/memsearch-client.js.map +1 -0
- package/dist/context/mock-client.d.ts +116 -0
- package/dist/context/mock-client.d.ts.map +1 -0
- package/dist/context/mock-client.js +150 -0
- package/dist/context/mock-client.js.map +1 -0
- package/dist/context/openviking-client.d.ts +87 -0
- package/dist/context/openviking-client.d.ts.map +1 -0
- package/dist/context/openviking-client.js +166 -0
- package/dist/context/openviking-client.js.map +1 -0
- package/dist/context/openviking-mcp-client.d.ts +29 -0
- package/dist/context/openviking-mcp-client.d.ts.map +1 -0
- package/dist/context/openviking-mcp-client.js +81 -0
- package/dist/context/openviking-mcp-client.js.map +1 -0
- package/dist/context/simple-memory-client.d.ts +43 -0
- package/dist/context/simple-memory-client.d.ts.map +1 -0
- package/dist/context/simple-memory-client.enhanced.d.ts +39 -0
- package/dist/context/simple-memory-client.enhanced.d.ts.map +1 -0
- package/dist/context/simple-memory-client.enhanced.js +207 -0
- package/dist/context/simple-memory-client.enhanced.js.map +1 -0
- package/dist/context/simple-memory-client.js +270 -0
- package/dist/context/simple-memory-client.js.map +1 -0
- package/dist/evolution/continuous.d.ts +127 -0
- package/dist/evolution/continuous.d.ts.map +1 -0
- package/dist/evolution/continuous.js +238 -0
- package/dist/evolution/continuous.js.map +1 -0
- package/dist/evolution/engine.d.ts +97 -0
- package/dist/evolution/engine.d.ts.map +1 -0
- package/dist/evolution/engine.js +187 -0
- package/dist/evolution/engine.js.map +1 -0
- package/dist/evolution/evolver-adapter.d.ts +104 -0
- package/dist/evolution/evolver-adapter.d.ts.map +1 -0
- package/dist/evolution/evolver-adapter.js +227 -0
- package/dist/evolution/evolver-adapter.js.map +1 -0
- package/dist/evolution/index.d.ts +9 -0
- package/dist/evolution/index.d.ts.map +1 -0
- package/dist/evolution/index.js +8 -0
- package/dist/evolution/index.js.map +1 -0
- package/dist/evolution/memory.d.ts +106 -0
- package/dist/evolution/memory.d.ts.map +1 -0
- package/dist/evolution/memory.js +232 -0
- package/dist/evolution/memory.js.map +1 -0
- package/dist/evolution/mutation.d.ts +66 -0
- package/dist/evolution/mutation.d.ts.map +1 -0
- package/dist/evolution/mutation.js +139 -0
- package/dist/evolution/mutation.js.map +1 -0
- package/dist/evolution/sandbox.d.ts +96 -0
- package/dist/evolution/sandbox.d.ts.map +1 -0
- package/dist/evolution/sandbox.js +194 -0
- package/dist/evolution/sandbox.js.map +1 -0
- package/dist/evolution/types.d.ts +93 -0
- package/dist/evolution/types.d.ts.map +1 -0
- package/dist/evolution/types.js +9 -0
- package/dist/evolution/types.js.map +1 -0
- package/dist/executor/index.d.ts +10 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +10 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/interface.d.ts +9 -0
- package/dist/executor/interface.d.ts.map +1 -0
- package/dist/executor/interface.js +9 -0
- package/dist/executor/interface.js.map +1 -0
- package/dist/executor/local.d.ts +36 -0
- package/dist/executor/local.d.ts.map +1 -0
- package/dist/executor/local.js +95 -0
- package/dist/executor/local.js.map +1 -0
- package/dist/extension-system/capability-router.d.ts +106 -0
- package/dist/extension-system/capability-router.d.ts.map +1 -0
- package/dist/extension-system/capability-router.js +167 -0
- package/dist/extension-system/capability-router.js.map +1 -0
- package/dist/extension-system/index.d.ts +11 -0
- package/dist/extension-system/index.d.ts.map +1 -0
- package/dist/extension-system/index.js +11 -0
- package/dist/extension-system/index.js.map +1 -0
- package/dist/extension-system/loader.d.ts +93 -0
- package/dist/extension-system/loader.d.ts.map +1 -0
- package/dist/extension-system/loader.js +245 -0
- package/dist/extension-system/loader.js.map +1 -0
- package/dist/extension-system/registry.d.ts +112 -0
- package/dist/extension-system/registry.d.ts.map +1 -0
- package/dist/extension-system/registry.js +161 -0
- package/dist/extension-system/registry.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/network/client.d.ts +130 -0
- package/dist/network/client.d.ts.map +1 -0
- package/dist/network/client.js +230 -0
- package/dist/network/client.js.map +1 -0
- package/dist/network/index.d.ts +10 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +10 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/protocol.d.ts +159 -0
- package/dist/network/protocol.d.ts.map +1 -0
- package/dist/network/protocol.js +118 -0
- package/dist/network/protocol.js.map +1 -0
- package/dist/runtime/agent.d.ts +124 -0
- package/dist/runtime/agent.d.ts.map +1 -0
- package/dist/runtime/agent.js +286 -0
- package/dist/runtime/agent.js.map +1 -0
- package/dist/runtime/agent_fixed.d.ts +39 -0
- package/dist/runtime/agent_fixed.d.ts.map +1 -0
- package/dist/runtime/agent_fixed.js +193 -0
- package/dist/runtime/agent_fixed.js.map +1 -0
- package/dist/runtime/index.d.ts +11 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/llm-client.d.ts +108 -0
- package/dist/runtime/llm-client.d.ts.map +1 -0
- package/dist/runtime/llm-client.js +125 -0
- package/dist/runtime/llm-client.js.map +1 -0
- package/dist/runtime/task-executor.d.ts +92 -0
- package/dist/runtime/task-executor.d.ts.map +1 -0
- package/dist/runtime/task-executor.js +203 -0
- package/dist/runtime/task-executor.js.map +1 -0
- package/dist/skill-sh/adapter.d.ts +40 -0
- package/dist/skill-sh/adapter.d.ts.map +1 -0
- package/dist/skill-sh/adapter.js +258 -0
- package/dist/skill-sh/adapter.js.map +1 -0
- package/dist/skill-sh/converter.d.ts +37 -0
- package/dist/skill-sh/converter.d.ts.map +1 -0
- package/dist/skill-sh/converter.js +175 -0
- package/dist/skill-sh/converter.js.map +1 -0
- package/dist/skill-sh/discovery.d.ts +29 -0
- package/dist/skill-sh/discovery.d.ts.map +1 -0
- package/dist/skill-sh/discovery.js +189 -0
- package/dist/skill-sh/discovery.js.map +1 -0
- package/dist/skill-sh/index.d.ts +19 -0
- package/dist/skill-sh/index.d.ts.map +1 -0
- package/dist/skill-sh/index.js +20 -0
- package/dist/skill-sh/index.js.map +1 -0
- package/dist/skill-sh/quality.d.ts +51 -0
- package/dist/skill-sh/quality.d.ts.map +1 -0
- package/dist/skill-sh/quality.js +146 -0
- package/dist/skill-sh/quality.js.map +1 -0
- package/dist/skill-sh/registry.d.ts +58 -0
- package/dist/skill-sh/registry.d.ts.map +1 -0
- package/dist/skill-sh/registry.js +118 -0
- package/dist/skill-sh/registry.js.map +1 -0
- package/dist/skill-sh/types.d.ts +228 -0
- package/dist/skill-sh/types.d.ts.map +1 -0
- package/dist/skill-sh/types.js +9 -0
- package/dist/skill-sh/types.js.map +1 -0
- package/dist/types.d.ts +199 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进化记忆管理器
|
|
3
|
+
*
|
|
4
|
+
* 保存进化历史,让后续进化能利用之前的经验
|
|
5
|
+
*
|
|
6
|
+
* @module @jclaw/core/evolution/memory
|
|
7
|
+
*/
|
|
8
|
+
import type { Gene, EvolutionResult } from './types.js';
|
|
9
|
+
import type { ContextManager } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* 进化记忆条目
|
|
12
|
+
*/
|
|
13
|
+
export interface EvolutionMemory {
|
|
14
|
+
/** 原始代码哈希 */
|
|
15
|
+
codeHash: string;
|
|
16
|
+
/** 使用的策略 */
|
|
17
|
+
strategy: string;
|
|
18
|
+
/** 进化结果 */
|
|
19
|
+
result: {
|
|
20
|
+
fitness: number;
|
|
21
|
+
description: string;
|
|
22
|
+
improved: boolean;
|
|
23
|
+
};
|
|
24
|
+
/** 时间戳 */
|
|
25
|
+
timestamp: number;
|
|
26
|
+
/** 基因数据 */
|
|
27
|
+
gene?: Gene;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 进化记忆配置
|
|
31
|
+
*/
|
|
32
|
+
export interface EvolutionMemoryConfig {
|
|
33
|
+
/** 上下文管理器 (用于持久化) */
|
|
34
|
+
contextManager?: ContextManager;
|
|
35
|
+
/** 最大记忆条目 */
|
|
36
|
+
maxMemory?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 进化记忆管理器
|
|
40
|
+
*
|
|
41
|
+
* 管理进化历史,支持:
|
|
42
|
+
* - 保存进化结果
|
|
43
|
+
* - 检索相关经验
|
|
44
|
+
* - 学习历史模式
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const memory = new EvolutionMemoryManager(contextManager);
|
|
49
|
+
*
|
|
50
|
+
* // 保存进化结果
|
|
51
|
+
* await memory.remember(code, result);
|
|
52
|
+
*
|
|
53
|
+
* // 检索相关经验
|
|
54
|
+
* const experience = await memory.recall(code);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class EvolutionMemoryManager {
|
|
58
|
+
private memories;
|
|
59
|
+
private readonly config;
|
|
60
|
+
constructor(config?: EvolutionMemoryConfig);
|
|
61
|
+
/**
|
|
62
|
+
* 记住一次进化结果
|
|
63
|
+
*/
|
|
64
|
+
remember(code: string, result: EvolutionResult): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* 回忆相关经验
|
|
67
|
+
*/
|
|
68
|
+
recall(code: string): Promise<EvolutionMemory[]>;
|
|
69
|
+
/**
|
|
70
|
+
* 获取最佳实践(从历史中学习)
|
|
71
|
+
*/
|
|
72
|
+
getBestPractices(): Map<string, {
|
|
73
|
+
strategy: string;
|
|
74
|
+
avgFitness: number;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* 获取进化统计
|
|
78
|
+
*/
|
|
79
|
+
getStats(): {
|
|
80
|
+
totalEvolutions: number;
|
|
81
|
+
successfulEvolutions: number;
|
|
82
|
+
avgFitness: number;
|
|
83
|
+
bestStrategy: string;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* 导出记忆(用于 EvoMap 共享)
|
|
87
|
+
*/
|
|
88
|
+
exportGenes(): Gene[];
|
|
89
|
+
/**
|
|
90
|
+
* 导入基因(从 EvoMap 或其他来源)
|
|
91
|
+
*/
|
|
92
|
+
importGenes(genes: Gene[]): void;
|
|
93
|
+
/**
|
|
94
|
+
* 清除记忆
|
|
95
|
+
*/
|
|
96
|
+
clear(): void;
|
|
97
|
+
private hashCode;
|
|
98
|
+
private isSimilar;
|
|
99
|
+
private toGene;
|
|
100
|
+
private syncToContext;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 创建进化记忆管理器
|
|
104
|
+
*/
|
|
105
|
+
export declare function createEvolutionMemory(config?: EvolutionMemoryConfig): EvolutionMemoryManager;
|
|
106
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/evolution/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAY,eAAe,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;gBAEU,MAAM,GAAE,qBAA0B;IAO9C;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAYtD;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAgDzE;;OAEG;IACH,QAAQ,IAAI;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;IAmCD;;OAEG;IACH,WAAW,IAAI,IAAI,EAAE;IAOrB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAiBhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;YAYA,aAAa;CAe1B;AAGH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,sBAAsB,CAE5F"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进化记忆管理器
|
|
3
|
+
*
|
|
4
|
+
* 保存进化历史,让后续进化能利用之前的经验
|
|
5
|
+
*
|
|
6
|
+
* @module @jclaw/core/evolution/memory
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 进化记忆管理器
|
|
10
|
+
*
|
|
11
|
+
* 管理进化历史,支持:
|
|
12
|
+
* - 保存进化结果
|
|
13
|
+
* - 检索相关经验
|
|
14
|
+
* - 学习历史模式
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const memory = new EvolutionMemoryManager(contextManager);
|
|
19
|
+
*
|
|
20
|
+
* // 保存进化结果
|
|
21
|
+
* await memory.remember(code, result);
|
|
22
|
+
*
|
|
23
|
+
* // 检索相关经验
|
|
24
|
+
* const experience = await memory.recall(code);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class EvolutionMemoryManager {
|
|
28
|
+
memories = [];
|
|
29
|
+
config;
|
|
30
|
+
constructor(config = {}) {
|
|
31
|
+
this.config = {
|
|
32
|
+
maxMemory: 1000,
|
|
33
|
+
...config,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 记住一次进化结果
|
|
38
|
+
*/
|
|
39
|
+
async remember(code, result) {
|
|
40
|
+
const hash = this.hashCode(code);
|
|
41
|
+
for (const mutation of result.validatedMutations) {
|
|
42
|
+
const memory = {
|
|
43
|
+
codeHash: hash,
|
|
44
|
+
strategy: mutation.strategy,
|
|
45
|
+
result: {
|
|
46
|
+
fitness: mutation.fitness ?? 0,
|
|
47
|
+
description: mutation.description,
|
|
48
|
+
improved: result.improved,
|
|
49
|
+
},
|
|
50
|
+
timestamp: Date.now(),
|
|
51
|
+
gene: this.toGene(mutation),
|
|
52
|
+
};
|
|
53
|
+
this.memories.push(memory);
|
|
54
|
+
}
|
|
55
|
+
// 限制记忆数量
|
|
56
|
+
if (this.memories.length > this.config.maxMemory) {
|
|
57
|
+
this.memories = this.memories.slice(-this.config.maxMemory);
|
|
58
|
+
}
|
|
59
|
+
// 同步到上下文管理器
|
|
60
|
+
if (this.config.contextManager) {
|
|
61
|
+
await this.syncToContext();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 回忆相关经验
|
|
66
|
+
*/
|
|
67
|
+
async recall(code) {
|
|
68
|
+
const hash = this.hashCode(code);
|
|
69
|
+
// 查找相同或相似代码的进化历史
|
|
70
|
+
const related = this.memories.filter(m => m.codeHash === hash || this.isSimilar(m.codeHash, hash));
|
|
71
|
+
// 按适应度排序
|
|
72
|
+
return related.sort((a, b) => b.result.fitness - a.result.fitness);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 获取最佳实践(从历史中学习)
|
|
76
|
+
*/
|
|
77
|
+
getBestPractices() {
|
|
78
|
+
const stats = new Map();
|
|
79
|
+
for (const memory of this.memories) {
|
|
80
|
+
const key = memory.codeHash.slice(0, 8);
|
|
81
|
+
const current = stats.get(key) || { total: 0, count: 0 };
|
|
82
|
+
stats.set(key, {
|
|
83
|
+
total: current.total + memory.result.fitness,
|
|
84
|
+
count: current.count + 1,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const best = new Map();
|
|
88
|
+
// 找出每个代码类型的最佳策略
|
|
89
|
+
const strategies = new Map();
|
|
90
|
+
for (const memory of this.memories) {
|
|
91
|
+
const key = memory.codeHash.slice(0, 8);
|
|
92
|
+
if (!strategies.has(key)) {
|
|
93
|
+
strategies.set(key, new Map());
|
|
94
|
+
}
|
|
95
|
+
const stratMap = strategies.get(key);
|
|
96
|
+
const strat = stratMap.get(memory.strategy) || { total: 0, count: 0 };
|
|
97
|
+
stratMap.set(memory.strategy, {
|
|
98
|
+
total: strat.total + memory.result.fitness,
|
|
99
|
+
count: strat.count + 1,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
for (const [key, stratMap] of strategies) {
|
|
103
|
+
let bestStrat = '';
|
|
104
|
+
let bestAvg = 0;
|
|
105
|
+
for (const [strat, data] of stratMap) {
|
|
106
|
+
const avg = data.total / data.count;
|
|
107
|
+
if (avg > bestAvg) {
|
|
108
|
+
bestAvg = avg;
|
|
109
|
+
bestStrat = strat;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
best.set(key, { strategy: bestStrat, avgFitness: bestAvg });
|
|
113
|
+
}
|
|
114
|
+
return best;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 获取进化统计
|
|
118
|
+
*/
|
|
119
|
+
getStats() {
|
|
120
|
+
const total = this.memories.length;
|
|
121
|
+
const successful = this.memories.filter(m => m.result.improved).length;
|
|
122
|
+
const avgFitness = total > 0
|
|
123
|
+
? this.memories.reduce((sum, m) => sum + m.result.fitness, 0) / total
|
|
124
|
+
: 0;
|
|
125
|
+
// 找出最佳策略
|
|
126
|
+
const strategyStats = new Map();
|
|
127
|
+
for (const m of this.memories) {
|
|
128
|
+
const current = strategyStats.get(m.strategy) || { total: 0, count: 0 };
|
|
129
|
+
strategyStats.set(m.strategy, {
|
|
130
|
+
total: current.total + m.result.fitness,
|
|
131
|
+
count: current.count + 1,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
let bestStrategy = 'optimize';
|
|
135
|
+
let bestAvg = 0;
|
|
136
|
+
for (const [strat, data] of strategyStats) {
|
|
137
|
+
const avg = data.total / data.count;
|
|
138
|
+
if (avg > bestAvg) {
|
|
139
|
+
bestAvg = avg;
|
|
140
|
+
bestStrategy = strat;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
totalEvolutions: total,
|
|
145
|
+
successfulEvolutions: successful,
|
|
146
|
+
avgFitness,
|
|
147
|
+
bestStrategy,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 导出记忆(用于 EvoMap 共享)
|
|
152
|
+
*/
|
|
153
|
+
exportGenes() {
|
|
154
|
+
return this.memories
|
|
155
|
+
.filter(m => m.gene && m.result.fitness > 0.7)
|
|
156
|
+
.map(m => m.gene)
|
|
157
|
+
.slice(-100); // 只导出最好的 100 个
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 导入基因(从 EvoMap 或其他来源)
|
|
161
|
+
*/
|
|
162
|
+
importGenes(genes) {
|
|
163
|
+
for (const gene of genes) {
|
|
164
|
+
const memory = {
|
|
165
|
+
codeHash: gene.id,
|
|
166
|
+
strategy: 'imported',
|
|
167
|
+
result: {
|
|
168
|
+
fitness: gene.fitness,
|
|
169
|
+
description: `Imported gene from generation ${gene.generation}`,
|
|
170
|
+
improved: true,
|
|
171
|
+
},
|
|
172
|
+
timestamp: gene.createdAt.getTime(),
|
|
173
|
+
gene,
|
|
174
|
+
};
|
|
175
|
+
this.memories.push(memory);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 清除记忆
|
|
180
|
+
*/
|
|
181
|
+
clear() {
|
|
182
|
+
this.memories = [];
|
|
183
|
+
}
|
|
184
|
+
// 私有方法
|
|
185
|
+
hashCode(code) {
|
|
186
|
+
let hash = 0;
|
|
187
|
+
const normalized = code.replace(/\s+/g, ' ').trim();
|
|
188
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
189
|
+
const char = normalized.charCodeAt(i);
|
|
190
|
+
hash = ((hash << 5) - hash) + char;
|
|
191
|
+
hash = hash & hash;
|
|
192
|
+
}
|
|
193
|
+
return Math.abs(hash).toString(16);
|
|
194
|
+
}
|
|
195
|
+
isSimilar(hash1, hash2) {
|
|
196
|
+
// 简单的相似度判断:前4位相同
|
|
197
|
+
return hash1.slice(0, 4) === hash2.slice(0, 4);
|
|
198
|
+
}
|
|
199
|
+
toGene(mutation) {
|
|
200
|
+
return {
|
|
201
|
+
id: mutation.id,
|
|
202
|
+
type: 'behavior',
|
|
203
|
+
content: mutation.mutated,
|
|
204
|
+
fitness: mutation.fitness ?? 0,
|
|
205
|
+
generation: 1,
|
|
206
|
+
parents: [],
|
|
207
|
+
createdAt: mutation.createdAt,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
async syncToContext() {
|
|
211
|
+
if (!this.config.contextManager)
|
|
212
|
+
return;
|
|
213
|
+
// 将进化记忆同步到上下文管理器
|
|
214
|
+
const summary = this.getStats();
|
|
215
|
+
const bestPractices = this.getBestPractices();
|
|
216
|
+
// const knowledge = ...
|
|
217
|
+
evolutionStats: summary,
|
|
218
|
+
bestPractices;
|
|
219
|
+
Object.fromEntries(bestPractices),
|
|
220
|
+
lastUpdated;
|
|
221
|
+
Date.now(),
|
|
222
|
+
;
|
|
223
|
+
}
|
|
224
|
+
;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* 创建进化记忆管理器
|
|
228
|
+
*/
|
|
229
|
+
export function createEvolutionMemory(config) {
|
|
230
|
+
return new EvolutionMemoryManager(config);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/evolution/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutation Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates code and behavior mutations for evolution.
|
|
5
|
+
*
|
|
6
|
+
* @module @jclaw/core/evolution/mutation
|
|
7
|
+
*/
|
|
8
|
+
import type { EvolutionStrategy, Mutation } from './types.js';
|
|
9
|
+
import { LLMClient } from '../runtime/llm-client.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for mutation generator
|
|
12
|
+
*/
|
|
13
|
+
export interface MutationGeneratorConfig {
|
|
14
|
+
/** LLM client for generating mutations */
|
|
15
|
+
llmClient: LLMClient;
|
|
16
|
+
/** Enable verbose logging */
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Mutation Generator
|
|
21
|
+
*
|
|
22
|
+
* Uses LLM to generate code mutations based on different strategies.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const generator = new MutationGenerator({ llmClient });
|
|
27
|
+
* const mutations = await generator.generate(originalCode, ['repair', 'optimize']);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class MutationGenerator {
|
|
31
|
+
private readonly config;
|
|
32
|
+
/**
|
|
33
|
+
* Create a new mutation generator.
|
|
34
|
+
*
|
|
35
|
+
* @param config - Configuration options
|
|
36
|
+
*/
|
|
37
|
+
constructor(config: MutationGeneratorConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Generate mutations for the given code.
|
|
40
|
+
*
|
|
41
|
+
* @param code - The original code to mutate
|
|
42
|
+
* @param strategies - Evolution strategies to use
|
|
43
|
+
* @returns Array of generated mutations
|
|
44
|
+
*/
|
|
45
|
+
generate(code: string, strategies: EvolutionStrategy[]): Promise<Mutation[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Generate a single mutation using a specific strategy.
|
|
48
|
+
*/
|
|
49
|
+
private generateSingle;
|
|
50
|
+
/**
|
|
51
|
+
* Generate a description for the mutation.
|
|
52
|
+
*/
|
|
53
|
+
private generateDescription;
|
|
54
|
+
/**
|
|
55
|
+
* Log message if verbose mode is enabled.
|
|
56
|
+
*/
|
|
57
|
+
private log;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a new mutation generator.
|
|
61
|
+
*
|
|
62
|
+
* @param config - Configuration options
|
|
63
|
+
* @returns New MutationGenerator instance
|
|
64
|
+
*/
|
|
65
|
+
export declare function createMutationGenerator(config: MutationGeneratorConfig): MutationGenerator;
|
|
66
|
+
//# sourceMappingURL=mutation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../../src/evolution/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAoB,MAAM,0BAA0B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6BD;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;IAEF;;;;OAIG;gBACS,MAAM,EAAE,uBAAuB;IAO3C;;;;;;OAMG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAelF;;OAEG;YACW,cAAc;IAsB5B;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAE1F"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutation Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates code and behavior mutations for evolution.
|
|
5
|
+
*
|
|
6
|
+
* @module @jclaw/core/evolution/mutation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Prompt templates for different strategies
|
|
10
|
+
*/
|
|
11
|
+
const STRATEGY_PROMPTS = {
|
|
12
|
+
repair: `You are a code repair specialist. Analyze the code and generate a repaired version that:
|
|
13
|
+
1. Fixes any bugs or errors
|
|
14
|
+
2. Maintains the original functionality
|
|
15
|
+
3. Improves code quality where possible
|
|
16
|
+
4. Keeps changes minimal and focused
|
|
17
|
+
|
|
18
|
+
Return ONLY the repaired code, no explanations.`,
|
|
19
|
+
optimize: `You are a performance optimization specialist. Analyze the code and generate an optimized version that:
|
|
20
|
+
1. Improves performance and efficiency
|
|
21
|
+
2. Reduces complexity where possible
|
|
22
|
+
3. Maintains exact same functionality
|
|
23
|
+
4. Uses best practices and patterns
|
|
24
|
+
|
|
25
|
+
Return ONLY the optimized code, no explanations.`,
|
|
26
|
+
innovate: `You are an innovation specialist. Analyze the code and generate an innovative version that:
|
|
27
|
+
1. Introduces new approaches or patterns
|
|
28
|
+
2. Explores alternative solutions
|
|
29
|
+
3. Adds new capabilities or features
|
|
30
|
+
4. Takes calculated risks while maintaining safety
|
|
31
|
+
|
|
32
|
+
Return ONLY the innovative code, no explanations.`,
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Mutation Generator
|
|
36
|
+
*
|
|
37
|
+
* Uses LLM to generate code mutations based on different strategies.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const generator = new MutationGenerator({ llmClient });
|
|
42
|
+
* const mutations = await generator.generate(originalCode, ['repair', 'optimize']);
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export class MutationGenerator {
|
|
46
|
+
config;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new mutation generator.
|
|
49
|
+
*
|
|
50
|
+
* @param config - Configuration options
|
|
51
|
+
*/
|
|
52
|
+
constructor(config) {
|
|
53
|
+
this.config = {
|
|
54
|
+
verbose: false,
|
|
55
|
+
...config,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate mutations for the given code.
|
|
60
|
+
*
|
|
61
|
+
* @param code - The original code to mutate
|
|
62
|
+
* @param strategies - Evolution strategies to use
|
|
63
|
+
* @returns Array of generated mutations
|
|
64
|
+
*/
|
|
65
|
+
async generate(code, strategies) {
|
|
66
|
+
const mutations = [];
|
|
67
|
+
for (const strategy of strategies) {
|
|
68
|
+
try {
|
|
69
|
+
const mutation = await this.generateSingle(code, strategy);
|
|
70
|
+
mutations.push(mutation);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.log(`Failed to generate ${strategy} mutation: ${error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return mutations;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generate a single mutation using a specific strategy.
|
|
80
|
+
*/
|
|
81
|
+
async generateSingle(code, strategy) {
|
|
82
|
+
const messages = [
|
|
83
|
+
{ role: 'system', content: STRATEGY_PROMPTS[strategy] },
|
|
84
|
+
{ role: 'user', content: code },
|
|
85
|
+
];
|
|
86
|
+
const response = await this.config.llmClient.chat(messages);
|
|
87
|
+
const mutated = response.content;
|
|
88
|
+
// Generate mutation description
|
|
89
|
+
const description = await this.generateDescription(code, mutated, strategy);
|
|
90
|
+
return {
|
|
91
|
+
id: `mutation-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
92
|
+
strategy,
|
|
93
|
+
original: code,
|
|
94
|
+
mutated,
|
|
95
|
+
description,
|
|
96
|
+
createdAt: new Date(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generate a description for the mutation.
|
|
101
|
+
*/
|
|
102
|
+
async generateDescription(original, mutated, strategy) {
|
|
103
|
+
const messages = [
|
|
104
|
+
{
|
|
105
|
+
role: 'system',
|
|
106
|
+
content: 'You are a technical writer. Describe the changes between two code snippets in one concise sentence.',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
role: 'user',
|
|
110
|
+
content: `Original:\n\`\`\`\n${original}\n\`\`\`\n\nMutated (${strategy}):\n\`\`\`\n${mutated}\n\`\`\`\n\nDescribe the changes:`,
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
try {
|
|
114
|
+
const response = await this.config.llmClient.chat(messages, { maxTokens: 100 });
|
|
115
|
+
return response.content.trim();
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return `${strategy} mutation applied`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Log message if verbose mode is enabled.
|
|
123
|
+
*/
|
|
124
|
+
log(message) {
|
|
125
|
+
if (this.config.verbose) {
|
|
126
|
+
console.log(`[MutationGenerator] ${message}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a new mutation generator.
|
|
132
|
+
*
|
|
133
|
+
* @param config - Configuration options
|
|
134
|
+
* @returns New MutationGenerator instance
|
|
135
|
+
*/
|
|
136
|
+
export function createMutationGenerator(config) {
|
|
137
|
+
return new MutationGenerator(config);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=mutation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../src/evolution/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH;;GAEG;AACH,MAAM,gBAAgB,GAAsC;IAC1D,MAAM,EAAE;;;;;;gDAMsC;IAC9C,QAAQ,EAAE;;;;;;iDAMqC;IAC/C,QAAQ,EAAE;;;;;;kDAMsC;CACjD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAErB;IAEF;;;;OAIG;IACH,YAAY,MAA+B;QACzC,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,KAAK;YACd,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,UAA+B;QAC1D,MAAM,SAAS,GAAe,EAAE,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC3D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,sBAAsB,QAAQ,cAAc,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,QAA2B;QACpE,MAAM,QAAQ,GAAkB;YAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE;YACvD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;SAChC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEjC,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5E,OAAO;YACL,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACnE,QAAQ;YACR,QAAQ,EAAE,IAAI;YACd,OAAO;YACP,WAAW;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,OAAe,EACf,QAA2B;QAE3B,MAAM,QAAQ,GAAkB;YAC9B;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,qGAAqG;aAC/G;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,sBAAsB,QAAQ,wBAAwB,QAAQ,eAAe,OAAO,mCAAmC;aACjI;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YAChF,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,QAAQ,mBAAmB,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates mutations in an isolated environment.
|
|
5
|
+
*
|
|
6
|
+
* @module @jclaw/core/evolution/sandbox
|
|
7
|
+
*/
|
|
8
|
+
import type { Executor } from '../types.js';
|
|
9
|
+
import type { Mutation, ValidationResult } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for sandbox validator
|
|
12
|
+
*/
|
|
13
|
+
export interface SandboxConfig {
|
|
14
|
+
/** Command executor */
|
|
15
|
+
executor: Executor;
|
|
16
|
+
/** Validation timeout in milliseconds (default: 30000) */
|
|
17
|
+
timeout?: number;
|
|
18
|
+
/** Temporary directory for sandbox (default: os.tmpdir()) */
|
|
19
|
+
tempDir?: string;
|
|
20
|
+
/** Test command to run for validation */
|
|
21
|
+
testCommand?: string;
|
|
22
|
+
/** Enable verbose logging */
|
|
23
|
+
verbose?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Sandbox Validator
|
|
27
|
+
*
|
|
28
|
+
* Validates mutations by running tests in an isolated environment.
|
|
29
|
+
* Supports both local and docker execution modes.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const sandbox = new SandboxValidator({
|
|
34
|
+
* executor: localExecutor,
|
|
35
|
+
* testCommand: 'npm test'
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* const result = await sandbox.validate(mutation);
|
|
39
|
+
* if (result.passed) {
|
|
40
|
+
* console.log('Mutation is safe to apply');
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class SandboxValidator {
|
|
45
|
+
private readonly config;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new sandbox validator.
|
|
48
|
+
*
|
|
49
|
+
* @param config - Configuration options
|
|
50
|
+
*/
|
|
51
|
+
constructor(config: SandboxConfig);
|
|
52
|
+
/**
|
|
53
|
+
* Validate a mutation in the sandbox.
|
|
54
|
+
*
|
|
55
|
+
* @param mutation - The mutation to validate
|
|
56
|
+
* @param targetPath - Path to the target file to mutate (optional)
|
|
57
|
+
* @returns Validation result
|
|
58
|
+
*/
|
|
59
|
+
validate(mutation: Mutation, targetPath?: string): Promise<ValidationResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Validate multiple mutations.
|
|
62
|
+
*
|
|
63
|
+
* @param mutations - Mutations to validate
|
|
64
|
+
* @param targetPath - Target file path
|
|
65
|
+
* @returns Array of validation results
|
|
66
|
+
*/
|
|
67
|
+
validateBatch(mutations: Mutation[], targetPath?: string): Promise<Map<string, ValidationResult>>;
|
|
68
|
+
/**
|
|
69
|
+
* Create a sandbox directory.
|
|
70
|
+
*/
|
|
71
|
+
private createSandbox;
|
|
72
|
+
/**
|
|
73
|
+
* Apply mutation to the sandbox.
|
|
74
|
+
*/
|
|
75
|
+
private applyMutation;
|
|
76
|
+
/**
|
|
77
|
+
* Run tests in the sandbox.
|
|
78
|
+
*/
|
|
79
|
+
private runTests;
|
|
80
|
+
/**
|
|
81
|
+
* Cleanup sandbox directory.
|
|
82
|
+
*/
|
|
83
|
+
private cleanup;
|
|
84
|
+
/**
|
|
85
|
+
* Log message if verbose mode is enabled.
|
|
86
|
+
*/
|
|
87
|
+
private log;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a new sandbox validator.
|
|
91
|
+
*
|
|
92
|
+
* @param config - Configuration options
|
|
93
|
+
* @returns New SandboxValidator instance
|
|
94
|
+
*/
|
|
95
|
+
export declare function createSandbox(config: SandboxConfig): SandboxValidator;
|
|
96
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/evolution/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiE;IAExF;;;;OAIG;gBACS,MAAM,EAAE,aAAa;IAUjC;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiClF;;;;;;OAMG;IACG,aAAa,CACjB,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAWzC;;OAEG;YACW,aAAa;IAU3B;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,QAAQ;IA0CtB;;OAEG;YACW,OAAO;IASrB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAErE"}
|