🧬 Evolver.php é¡¹ç›®æ·±åº¦åˆ†æžæŠ¥å‘Š
📋 执行摘è¦
Evolver.php 是一个功能完备的 Capability Evolver 引擎的 PHP 8.3+ 实现,通过 MCP (Model Context Protocol) stdio æœåŠ¡å™¨æ–¹å¼æš´éœ²ï¼Œé‡‡ç”¨ SQLite 进行本地化数æ®å˜å‚¨ã€‚这是一个æˆç†Ÿçš„ã€ç”Ÿäº§å°±ç»ªçš„自演化系统,具有完善的安全模型和测试覆盖。
1ï¸âƒ£ 项目概览
æ ¸å¿ƒå®šä½
- 纯 PHP ç§»æ¤ç‰ˆï¼š1:1 ç§»æ¤è‡ª EvoMap/evolver (JavaScript 版本)
- MCP stdio æœåŠ¡å™¨ï¼šé›¶å¹³å°ä¾èµ–,通过 stdin/stdout 进行 JSON-RPC 2.0 通信
- ä¿¡å·é©±åŠ¨çš„æ¼”åŒ–å¼•æ“Žï¼šä»Žæ—¥å¿—/上下文æå–ä¿¡å·ï¼Œè‡ªåŠ¨è§¦å‘åŸºå› é€‰æ‹©å’Œæ¼”åŒ–
- åŒè½¨çŸ¥è¯†ç³»ç»Ÿï¼šGenes(å¯å¤ç”¨ç–略模æ¿ï¼‰+ Capsules(æˆåŠŸç»“æžœå¿«ç…§ï¼‰
æŠ€æœ¯æ ˆ
| 组件 |
技术选型 |
| è¯è¨€ |
PHP 8.3+ (ä¸¥æ ¼ç±»åž‹æ¨¡å¼) |
| æ•°æ®åº“ |
SQLite3 (WAL æ¨¡å¼ + mmap 优化) |
| 通信åè®® |
MCP (Model Context Protocol) JSON-RPC 2.0 |
| 测试框架 |
PHPUnit 11.4+ |
| è‡ªåŠ¨åŠ è½½ |
PSR-4 |
2ï¸âƒ£ 架构设计
2.1 æ ¸å¿ƒæž¶æž„å›¾
┌─────────────────────────────────────────────────────â”
│ MCP Client (Claude Desktop / Kimi CLI / Gemini) │
│ - JSON-RPC 2.0 over stdio │
└────────────────────┬────────────────────────────────┘
│ stdin/stdout
┌────────────────────▼────────────────────────────────â”
│ evolver.php (入壿–‡ä»¶) │
│ - MCP æœåС噍引坼 │
│ - CLI 傿•°è§£æž (--validate, --loop, --daemon) │
└────────────────────┬────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────â”
│ McpServer.php (MCP å议层) │
│ - JSON-RPC 消æ¯å¤„ç† â”‚
│ - å·¥å…·åˆ†å‘ (tools/list, tools/call) │
│ - 资æºç®¡ç† (resources/read) │
└────────────────────┬────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────â”
│ æ ¸å¿ƒå¼•æ“Žå±‚ │
│ ┌──────────────┠┌──────────────┠│
│ │ Signal │ │ Gene │ │
│ │ Extractor │ │ Selector │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ └────────┬────────┘ │
│ ▼ │
│ ┌───────────────────────────┠│
│ │ PromptBuilder │ │
│ │ (GEP 1.6.0 åè®®æç¤ºæž„建) │ │
│ └───────────┬───────────────┘ │
│ │ │
│ ┌───────────▼───────────────┠│
│ │ SolidifyEngine │ │
│ │ (éªŒè¯ + 固化 + 爆炸åŠå¾„计算) │ │
│ └───────────┬───────────────┘ │
└──────────────┼──────────────────────────────────────┘
│
┌──────────────▼──────────────────────────────────────â”
│ æ•°æ®æŒä¹…化层 │
│ ┌─────────────────────────────────────────────┠│
│ │ GepAssetStore + Database │ │
│ │ - Genes / Capsules / Events │ │
│ │ - SQLite WAL + mmap (128MB) │ │
│ │ - 自动 Schema è¿ç§» (1.5.0 → 1.6.0) │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
2.2 目录结构分æž
Evolver.php/
├── evolver.php # ä¸»å…¥å£ (MCP æœåС噍引坼)
├── composer.json # ä¾èµ–ç®¡ç† (ä»… PHPUnit)
├── phpunit.xml # 测试é…ç½®
│
├── src/ # æ ¸å¿ƒæºä»£ç (47 个文件)
│ ├── McpServer.php # MCP å议实现
│ ├── Database.php # SQLite å°è£… + 自动è¿ç§»
│ ├── GepAssetStore.php # Gene/Capsule/Event å˜å‚¨
│ ├── SignalExtractor.php # ä¿¡å·æå– (35+ ç§ä¿¡å·ç±»åž‹)
│ ├── GeneSelector.php # åŸºå› é€‰æ‹©å¼•æ“Ž (漂移算法)
│ ├── PromptBuilder.php # GEP æç¤ºæž„建 (1.6.0 åè®®)
│ ├── SolidifyEngine.php # 固化引擎 + 安全验è¯
│ ├── SafetyController.php # å®‰å…¨æ¨¡å¼æŽ§åˆ¶
│ ├── SourceProtector.php # æºæ–‡ä»¶ä¿æŠ¤
│ ├── BlastRadiusCalculator.php # 爆炸åŠå¾„计算
│ ├── ContentHash.php # SHA-256 资产哈希
│ ├── MemoryGraph.php # 知识图谱
│ ├── A2A.php # Agent-to-Agent åè®®
│ ├── EvolutionLoop.php # è¿žç»æ¼”化循环
│ │
│ └── Ops/ # è¿ç»´å·¥å…· (14 个文件)
│ ├── LifecycleManager.php
│ ├── HealthCheck.php
│ ├── DiskCleaner.php
│ ├── SignalDeduplicator.php
│ ├── SecurityAuditLogger.php
│ └── ...
│
├── tests/ # 测试套件 (44 个测试文件)
│ ├── DatabaseTest.php
│ ├── SignalExtractorTest.php
│ ├── McpServerTest.php
│ ├── GepAssetStoreTest.php
│ └── ...
│
├── data/
│ └── default_genes.json # é»˜è®¤åŸºå› ç§åæ•°æ® (6 ä¸ªåŸºå› )
│
└── scripts/ # 工具脚本
├── evolver-validate.php # 安装验è¯å·¥å…·
├── evolver-report.php # 报告生æˆ
└── ...
3ï¸âƒ£ æ ¸å¿ƒåŠŸèƒ½æ¨¡å—æ·±åº¦åˆ†æž
èŒè´£ï¼šå®žçް MCP åè®®ï¼Œå¤„ç† JSON-RPC 2.0 消æ¯
关键特性:
- ✅ 完整的 MCP 能力:
tools/list, tools/call, resources/list, resources/read
- ✅ 12 个å¯ç”¨å·¥å…·ï¼š
evolver_run - è¿è¡Œæ¼”化周期
evolver_solidify - 固化结果
evolver_extract_signals - æå–ä¿¡å·
evolver_upsert_gene/delete_gene - åŸºå› ç®¡ç†
evolver_stats - 统计信æ¯
evolver_safety_status - 安全状æ€
evolver_sync_to_hub - åŒæ¥åˆ° EvoMap Hub
代ç è´¨é‡ï¼š
- ä¸¥æ ¼ç±»åž‹å£°æ˜Ž
- 错误处ç†å®Œå–„ (try-catch + error_log)
- ç”Ÿå‘½å‘¨æœŸç®¡ç† (startup/shutdown hooks)
Schema 版本:1.6.0
æ ¸å¿ƒè¡¨ç»“æž„ï¼š
CREATE TABLE genes (
id TEXT PRIMARY KEY,
category TEXT NOT NULL DEFAULT 'repair',
asset_id TEXT,
schema_version TEXT DEFAULT '1.6.0',
data TEXT NOT NULL,
created_at TEXT,
updated_at TEXT
);
CREATE TABLE capsules (
id TEXT PRIMARY KEY,
gene_id TEXT,
asset_id TEXT,
data TEXT NOT NULL,
confidence REAL DEFAULT 0.5,
outcome_status TEXT,
outcome_score REAL,
env_fingerprint TEXT,
success_streak INTEGER,
content TEXT,
created_at TEXT
);
CREATE TABLE events (
id TEXT PRIMARY KEY,
intent TEXT NOT NULL,
signals TEXT,
genes_used TEXT,
outcome_status TEXT,
outcome_score REAL,
data TEXT NOT NULL,
env_fingerprint TEXT,
mutations_tried INTEGER,
total_cycles INTEGER,
created_at TEXT
);
CREATE TABLE failed_capsules (
id TEXT PRIMARY KEY,
gene_id TEXT,
trigger_signals TEXT,
failure_reason TEXT,
diff_snapshot TEXT,
created_at TEXT
);
CREATE TABLE sync_status (
id INTEGER PRIMARY KEY AUTOINCREMENT,
asset_type TEXT NOT NULL,
local_id TEXT NOT NULL,
asset_id TEXT,
sync_status TEXT DEFAULT 'pending',
last_sync_attempt TEXT,
sync_error TEXT,
created_at TEXT,
updated_at TEXT
);
性能优化:
PRAGMA journal_mode=WAL;
PRAGMA mmap_size=134217728;
PRAGMA synchronous=NORMAL;
PRAGMA cache_size=-65536;
PRAGMA wal_autocheckpoint=1000;
自动è¿ç§»æœºåˆ¶ï¼š
- 版本检测 → 增é‡è¿ç§» → 版本更新
- 支æŒä»Ž 1.5.0 → 1.6.0 的平滑å‡çº§
- è¿ç§»æ—¥å¿—记录
ä¿¡å·ç±»åž‹ (35+ ç§):
| 分类 |
ä¿¡å·ç¤ºä¾‹ |
| é”™è¯¯ä¿¡å· |
log_error, recurring_error, errsig:... |
| æœºä¼šä¿¡å· |
user_feature_request, user_improvement_suggestion |
| æ€§èƒ½ä¿¡å· |
perf_bottleneck, timeout, high_cpu |
| èƒ½åŠ›ç¼ºå£ |
capability_gap, unsupported_input_type |
| åè®®ä¿¡å· |
protocol_drift, memory_missing |
| 高级检测 |
repair_loop_detected, evolution_stagnation_detected |
高级检测算法:
if ({{LATEX:0}}signals[] = 'repair_loop_detected';
}
if ({{LATEX:1}}signals[] = 'force_innovation_after_repair_loop';
}
if ({{LATEX:2}}signals[] = 'evolution_stagnation_detected';
}
if ({{LATEX:3}}signals[] = 'high_failure_rate';
}
代ç 亮点:
- ✅ æ£åˆ™ + 关键è¯åŒé‡åŒ¹é…
- ✅ 错误ç¾å规范化 (路径/æ•°å—/åå…进制替æ¢)
- ✅ 历å²äº‹ä»¶åˆ†æž (consecutive patterns)
选择算法:
public function matchPatternToSignals(string {{LATEX:4}}signals): bool
{
}
public function scoreGene(array {{LATEX:5}}signals): int
{
{{LATEX:6}}gene['signals_match'] as {{LATEX:7}}this->matchPatternToSignals({{LATEX:8}}signals)) {
{{LATEX:9}}score;
}
if ({{LATEX:10}}driftIntensity) {
{{LATEX:11}}topN - 1);
}
漂移强度计算:
{{LATEX:12}}effectivePopulationSize));
GEP 1.6.0 åè®® - 强制输出 5 个 JSON 对象:
1. Mutation (触å‘器)
{
"type": "Mutation",
"category": "repair|optimize|innovate",
"trigger_signals": ["..."],
"risk_level": "low|medium|high"
}
2. PersonalityState (心æ€)
{
"type": "PersonalityState",
"rigor": 0.8,
"creativity": 0.3,
"risk_tolerance": 0.5
}
3. EvolutionEvent (记录)
{
"type": "EvolutionEvent",
"schema_version": "1.6.0",
"parent": "evt_xxx",
"blast_radius": {"files": 5, "lines": 120}
}
4. Gene (知识)
{
"type": "Gene",
"signals_match": ["..."],
"strategy": ["step1", "step2"],
"constraints": {"max_files": 20}
}
5. Capsule (结果快照)
{
"type": "Capsule",
"gene": "gene_xxx",
"confidence": 0.85
}
æç¤ºä¼˜åŒ–:
- ✅ ä¸Šä¸‹æ–‡æˆªæ– (20000 å—符é™åˆ¶)
- ✅ ä¿¡å·åŽ»é‡å’Œæˆªæ– (最多 50 个)
- ✅ 忍¡å¼åŒºåŸŸ (失败胶囊è¦å‘Š)
- ✅ 历å²å— (最近演化历å²)
- ✅ Hub è¯¾ç¨‹å— (外部知识)
安全验è¯ï¼š
private const MAX_FILES_HARD_LIMIT = 60;
private const MAX_LINES_HARD_LIMIT = 20000;
private const BLAST_WARN_RATIO = 0.8;
private const BLAST_CRITICAL_RATIO = 2.0;
private const ALLOWED_COMMAND_PREFIXES = [
'php', 'composer', 'phpunit', 'phpcs', 'phpstan'
];
private const FORBIDDEN_SHELL_OPERATORS = [
';', '&&', '||', '|', '>', '<', '`', '\(('
];
```
**å…³é”®è·¯å¾„ä¿æŠ¤**:
```php
private const CRITICAL_PROTECTED_PREFIXES = [
'skills/feishu-evolver-wrapper/',
'skills/feishu-common/',
'skills/evolver/',
// ...
];
private const CRITICAL_PROTECTED_FILES = [
'MEMORY.md', 'SOUL.md', 'IDENTITY.md',
'composer.json', 'package.json', '.env'
];
```
**éªŒè¯æµç¨‹**:
1. æ£€æŸ¥è‡ªä¿®æ”¹æ¨¡å¼ (never/review/always)
2. éªŒè¯æ–‡ä»¶ä¸åœ¨ä¿æŠ¤åˆ—表
3. 检查爆炸åŠå¾„ (文件数/行数)
4. 验è¯å‘½ä»¤ç™½åå•
5. 检测 shell 注入æ“作符
---
### 3.7 安全控制器 ([`SafetyController.php`](file:///Volumes/SSD/GitHub/Evolver.php/src/SafetyController.php))
**三ç§å®‰å…¨æ¨¡å¼**:
| æ¨¡å¼ | 说明 | 适用场景 |
|------|------|---------|
| **never** | 完全ç¦ç”¨è‡ªä¿®æ”¹ï¼Œä»…è¯Šæ– | 生产环境/å®¡è®¡æ¨¡å¼ |
| **review** | 需è¦äººå·¥ç¡®è®¤ | å¼€å‘环境 (推è) |
| **always** | 完全自动化 | 测试环境/å—信任环境 |
**æ“作æƒé™çŸ©é˜µ**:
```
æ“作 | never | review | always
-------------|-------|--------|--------
read | ✅ | ✅ | ✅
diagnose | ✅ | ✅ | ✅
propose | ⌠| ✅ | ✅
modify | ⌠| ⌠| ✅
```
---
### 3.8 内容哈希 ([`ContentHash.php`](file:///Volumes/SSD/GitHub/Evolver.php/src/ContentHash.php))
**SHA-256 资产 ID**:
```php
// 规范化 JSON (键排åºï¼Œæ•°ç»„ä¿åº)
public static function canonicalize(mixed\)obj): string {
// 递归处ç†å¯¹è±¡/数组
// æŽ’é™¤éžæœ‰é™æ•°å—
}
// 计算资产 ID (æŽ’é™¤è‡ªå¼•ç”¨å—æ®µ)
public static function computeAssetId(
array|object \(obj,
array\)excludeFields = ['asset_id']
): ?string {
\(canonical = self::canonicalize(\)clean);
\(hash = hash('sha256',\)canonical);
return 'sha256:' . \(hash;
}
```
**用途**:
- ✅ åŽ»é‡æ£€æµ‹
- ✅ 篡改验è¯
- ✅ 跨节点一致性
---
## 4ï¸âƒ£ 安全模型深度分æž
### 4.1 多层防护体系
```
┌─────────────────────────────────────â”
│ SafetyController (æ¨¡å¼æŽ§åˆ¶) │
│ - never/review/always │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────â”
│ SourceProtector (æºæ–‡ä»¶ä¿æŠ¤) │
│ - 硬编ç ä¿æŠ¤åˆ—è¡¨ │
│ - 模å¼åŒ¹é… (src/Ops/*.php) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────â”
│ SolidifyEngine (验è¯å¼•擎) │
│ - 爆炸åŠå¾„检查 │
│ - 命令白åå• â”‚
│ - Shell æ“ä½œç¬¦é˜»æ¢ â”‚
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────â”
│ Gene Constraints (åŸºå› çº¦æŸ) │
│ - max_files é™åˆ¶ │
│ - forbidden_paths 列表 │
└─────────────────────────────────────┘
```
### 4.2 爆炸åŠå¾„é™åˆ¶
**硬é™åˆ¶** (ä¸å¯é€¾è¶Š):
- **60 个文件** / **20,000 行** æ¯æ¬¡æ¼”化
**è¦å‘Šé˜ˆå€¼**:
- 80% 利用率 → è¦å‘Š
- 200% 利用率 → 严é‡è¦å‘Š (å¯èƒ½æ‰¹é‡è¯¯æ“作)
**目录分布分æž**:
```php
// 自动分æžå“ªäº›ç›®å½•è´¡çŒ®æœ€å¤šå˜æ›´æ–‡ä»¶\)dirCount = [];
foreach (\(changedFiles as\)file) {
\(parts = explode('/',\)rel);
\(key =\)parts[0] . '/' . \(parts[1]; // å‰ä¸¤çº§ç›®å½•\)dirCount[\(key]++;
}
```
---
## 5ï¸âƒ£ 测试套件分æž
### 5.1 测试覆盖
**测试文件**:44 个测试类
- æ ¸å¿ƒå¼•æ“Žï¼š`DatabaseTest`, `SignalExtractorTest`, `GeneSelectorTest`
- MCP 层:`McpServerTest`
- 安全:`SafetyControllerTest`, `SourceProtectorTest`
- è¿ç»´å·¥å…·ï¼š`Ops/` 目录下 12 个测试
**测试ç–ç•¥**:
- ✅ å†…å˜ SQLite (`:memory:`) 实现隔离
- ✅ setUp/tearDown 清ç†
- ✅ æ–言完整 (assertContains, assertNotEmpty, assertIsArray)
### 5.2 测试示例
```php
// DatabaseTest.php
public function testDatabaseCreatesSchema(): void
{\)result = \(this->db->fetchAll(
"SELECT name FROM sqlite_master WHERE type='table'"
);\)tables = array_column(\(result, 'name');\)this->assertContains('genes', \(tables);\)this->assertContains('capsules', \(tables);
}
// SignalExtractorTest.php
public function testExtractRepairLoopDetected(): void
{\)recentEvents = [
['intent' => 'repair', 'outcome' => ['status' => 'failed']],
['intent' => 'repair', 'outcome' => ['status' => 'failed']],
['intent' => 'repair', 'outcome' => ['status' => 'failed']],
];
\(signals =\)this->extractor->extract([
'context' => 'Some context',
'recentEvents' => \(recentEvents,
]);\)this->assertContains('repair_loop_detected', \(signals);
}
```
---
## 6ï¸âƒ£ è¿ç»´å·¥å…· (Ops 模å—)
### 6.1 å¯ç”¨å·¥å…·
| 工具 | èŒè´£ |
|------|------|
| **LifecycleManager** | å¯åЍ/å…³é—ç”Ÿå‘½å‘¨æœŸç®¡ç† |
| **HealthCheck** | 系统å¥åº·æ£€æŸ¥ |
| **DiskCleaner** | æ¸…ç†æ—§æ—¥å¿—和临时文件 |
| **SignalDeduplicator** | ä¿¡å·åŽ»é‡ |
| **SecurityAuditLogger** | 安全审计日志 |
| **SkillsMonitor** | 技能目录监控 |
| **GitSelfRepair** | Git è‡ªä¿®å¤ |
| **Innovation** | 创新触å‘器 |
| **Trigger** | 事件触å‘器 |
| **Commentary** | æ³¨é‡Šç”Ÿæˆ |
| **StructuredLogger** | 结构化日志 |
| **DaemonManager** | å®ˆæŠ¤è¿›ç¨‹ç®¡ç† |
### 6.2 命令行工具
```bash
# 验è¯å®‰è£…
php evolver.php --validate
# 使用自定义数æ®åº“
php evolver.php --db /path/to.db
# 连ç»å¾ªçŽ¯æ¨¡å¼
php evolver.php --loop [interval_seconds]
# 守护进程模å¼
php evolver.php --daemon start
php evolver.php --daemon stop
php evolver.php --daemon status
# Ops 命令
php evolver.php --ops cleanup
php evolver.php --ops health
php evolver.php --ops stats
php evolver.php --ops gc
php evolver.php --ops dedupe
```
---
## 7ï¸âƒ£ GEP å议详解
### 7.1 åè®®æµç¨‹
```
1. evolver_run 工具调用
↓
2. SignalExtractor.extract() æå–ä¿¡å·
↓
3. GeneSelector.selectGene() 选择基å›
↓
4. PromptBuilder.buildGepPrompt() 构建æç¤º
↓
5. LLM 输出 5 个 JSON 对象
↓
6. 应用更改 (MCP 客户端执行)
↓
7. evolver_solidify 固化结果
↓
8. 记录 EvolutionEvent + 更新 Gene/Capsule
```
### 7.2 å议版本演进
| 版本 | å˜æ›´ |
|------|------|
| **1.5.0** | 引入 asset_id (SHA-256) |
| **1.6.0** | 新增 env_fingerprint, success_streak, sync_status 表 |
**版本ä¸ä¸€è‡´é—®é¢˜**:
- âš ï¸ `ContentHash::SCHEMA_VERSION = '1.6.0'`
- âš ï¸ `PromptBuilder::SCHEMA_VERSION = '1.5.0'` (在代ç 䏿œªæ˜Žç¡®ï¼Œéœ€æ£€æŸ¥)
---
## 8ï¸âƒ£ é»˜è®¤åŸºå› åˆ†æž
### 8.1 ç§ååŸºå› (6 个)
[`data/default_genes.json`](file:///Volumes/SSD/GitHub/Evolver.php/data/default_genes.json)
| åŸºå› ID | 分类 | 用途 |
|--------|------|------|
| `gene_gep_repair_from_errors` | repair | 从错误ä¸ä¿®å¤ |
| `gene_gep_optimize_prompt_and_assets` | optimize | 优化æç¤ºå’Œèµ„产 |
| `gene_gep_innovate_from_opportunity` | innovate | 从机会创新 |
| `gene_gep_repair_sqlite` | repair | SQLite æ•°æ®åº“ä¿®å¤ |
| `gene_gep_harden_security` | optimize | å®‰å…¨åŠ å›º |
### 8.2 åŸºå› ç»“æž„
```json
{
"type": "Gene",
"id": "gene_gep_repair_from_errors",
"category": "repair",
"signals_match": ["error", "exception", "log_error"],
"preconditions": ["signals contains error-related indicators"],
"strategy": [
"Extract structured signals from logs",
"Select an existing Gene by signals match",
"Estimate blast radius before editing",
"Apply smallest reversible patch",
"Validate using declared validation steps"
],
"constraints": {
"max_files": 20,
"forbidden_paths": [".git", "vendor", "node_modules"]
},
"validation": ["php -l src/*.php", "php evolver.php --validate"]
}
```
---
## 9ï¸âƒ£ A2A åè®® (Agent-to-Agent)
### 9.1 æ ¸å¿ƒåŠŸèƒ½
[`A2A.php`](file:///Volumes/SSD/GitHub/Evolver.php/src/A2A.php)
- **资产类型**:Gene, Capsule, EvolutionEvent
- **置信度衰å‡**:外部资产置信度 × 0.6
- **爆炸åŠå¾„é™åˆ¶**:maxFiles=5, maxLines=200
- **æˆåŠŸæ¡çº¹è®¡ç®—**ï¼šè¿žç»æˆåŠŸä½¿ç”¨æ¬¡æ•°
### 9.2 åŒæ¥æœºåˆ¶
```php
// sync_status è¡¨è¿½è¸ªåŒæ¥çжæ€
CREATE TABLE sync_status (
asset_type TEXT NOT NULL, // 'Gene' | 'Capsule' | 'Event'
local_id TEXT NOT NULL,
asset_id TEXT, // SHA-256
sync_status TEXT, // 'pending' | 'synced' | 'failed'
last_sync_attempt TEXT,
sync_error TEXT
);
```
---
## 🔟 知识图谱 ([`MemoryGraph.php`](file:///Volumes/SSD/GitHub/Evolver.php/src/MemoryGraph.php))
### 10.1 功能
- **ä¿¡å·â†’åŸºå› â†’ç»“æžœ** 边追踪
- **Laplace 平滑æˆåŠŸæ¦‚çŽ‡**
- **è¡°å‡æœºåˆ¶** (æ—¶é—´è¡°å‡)
- **错误ç¾å规范化**
### 10.2 错误ç¾å规范化
```php
// 路径替æ¢
s = preg_replace('/[a-z]:\\[^\\s\\n\\r\\t]+/i', '', s);
s = preg_replace('~/[^\\s\\n\\r\\t]+~', '', s);
// åå…è¿›åˆ¶å’Œæ•°å—æ›¿æ¢
s = preg_replace('/\\b0x[0-9a-f]+\\b/i', '', s);
s = preg_replace('/\\b\\d+\\b/', '', s);
// 输出:errsig_norm:
```
---
## 1ï¸âƒ£1ï¸âƒ£ 代ç è´¨é‡è¯„ä¼°
### 11.1 优点 ✅
| 维度 | 评分 | 说明 |
|------|------|------|
| **类型安全** | âââââ | 全文件 `declare(strict_types=1)` |
| **错误处ç†** | âââââ | try-catch + error_log + 返回结果数组 |
| **文档注释** | ââââ | 大部分公开方法有 PHPDoc |
| **命å规范** | âââââ | PascalCase 类,camelCase 方法,SCREAMING å¸¸é‡ |
| **测试覆盖** | ââââ | 44 ä¸ªæµ‹è¯•ç±»ï¼Œæ ¸å¿ƒåŠŸèƒ½å…¨è¦†ç›– |
| **安全性** | âââââ | 多层防护,硬编ç é™åˆ¶ |
| **性能优化** | ââââ | WAL + mmap + 缓å˜ä¼˜åŒ– |
### 11.2 潜在问题 âš ï¸
| 问题 | 䏥釿€§ | 建议 |
|------|--------|------|
| **Schema 版本ä¸ä¸€è‡´** | ä¸ | 统一 `ContentHash` å’Œ `PromptBuilder` çš„ç‰ˆæœ¬å· |
| **æ— é™æ€åˆ†æžå·¥å…·** | 低 | æ·»åŠ PHPStan/Psalm 到 composer.json |
| **部分方法缺少文档** | 低 | è¡¥å……å¤æ‚方法的 PHPDoc |
| **硬编ç 路径** | 低 | ä½¿ç”¨å¸¸é‡æˆ–é…置文件 |
| **MCP 客户端兼容性** | ä¸ | Gemini CLI 有已知问题,文档已说明 |
---
## 1ï¸âƒ£2ï¸âƒ£ 与原始 evolver 对比
| 特性 | EvoMap/evolver (JS) | Evolver.php |
|------|---------------------|-------------|
| **è¯è¨€** | JavaScript/Node.js | PHP 8.3+ |
| **æ•°æ®åº“** | SQLite | SQLite (相åŒ) |
| **åè®®** | MCP stdio | MCP stdio (1:1 ç§»æ¤) |
| **GEP 版本** | 1.6.0 | 1.6.0 |
| **安全模型** | 爆炸åŠå¾„é™åˆ¶ | ç›¸åŒ + é¢å¤–ä¿æŠ¤ |
| **测试** | Jest | PHPUnit |
| **性能** | Node.js V8 引擎 | PHP 8.3 JIT (å¯é€‰) |
**优势**:
- ✅ é›¶ npm ä¾èµ–,仅 Composer
- ✅ 更简å•的部署 (å•个 PHP 文件 + SQLite)
- ✅ å®Œå…¨æœ¬åœ°åŒ–ï¼Œæ— ç½‘ç»œä¾èµ–
- ✅ 增强的安全模型 (SourceProtector)
---
## 1ï¸âƒ£3ï¸âƒ£ 使用场景推è
### 13.1 适用场景 ✅
1. **AI 辅助开å‘环境** - 与 Claude Desktop/Kimi CLI 集æˆ
2. **自演化代ç 库** - 自动修å¤é”™è¯¯ã€ä¼˜åŒ–性能
3. **知识积累系统** - Gene/Capsule åŒè½¨å˜å‚¨æˆåŠŸç»éªŒ
4. **安全沙箱实验** - review 模å¼ä¸‹äººå·¥ç¡®è®¤æ‰€æœ‰ä¿®æ”¹
5. **æŒç»é›†æˆ** - è‡ªåŠ¨æ£€æµ‹å’Œä¿®å¤æµ‹è¯•失败
### 13.2 ä¸é€‚用场景 âŒ
1. **é«˜å¹¶å‘ Web æœåŠ¡** - éžè®¾è®¡ç›®æ ‡
2. **分布å¼ç³»ç»Ÿ** - å•节点 SQLite é™åˆ¶
3. **å®žæ—¶æ€§è¦æ±‚高** - æ¼”åŒ–å‘¨æœŸéœ€è¦æ—¶é—´
4. **æ— AI 环境** - ä¾èµ– LLM 生æˆä»£ç
---
## 1ï¸âƒ£4ï¸âƒ£ 最佳实践建议
### 14.1 部署é…ç½®
```bash
# 推è环境å˜é‡
export EVOLVER_DB_PATH=~/.evolver/evolver.db
export EVOLVE_ALLOW_SELF_MODIFY=review # å¼€å‘环境
export WORKSPACE_DIR=/path/to/workspace
# MCP é…ç½® (Kimi CLI)
{
"mcpServers": {
"evolver": {
"command": "php",
"args": ["/path/to/evolver.php"],
"env": {
"EVOLVER_DB_PATH": "~/.evolver/evolver.db",
"EVOLVE_ALLOW_SELF_MODIFY": "review"
}
}
}
}
```
### 14.2 è¿ç»´å»ºè®®
1. **定期备份数æ®åº“**:
```bash
cp ~/.evolver/evolver.db ~/.evolver/evolver.db.backup.\)(date +%Y%m%d)
-
监控å¥åº·çжæ€ï¼š
php evolver.php --validate
php evolver.php --ops health
-
æ¸…ç†æ—§æ•°æ®ï¼š
php evolver.php --ops cleanup
php evolver.php --ops gc
-
审查安全日志:
cat ~/.evolver/security_audit.log
14.3 å¼€å‘建议
-
始终è¿è¡Œæµ‹è¯•:
composer test
-
使用 review 模å¼ï¼š
- å¼€å‘环境:
EVOLVE_ALLOW_SELF_MODIFY=review
- 生产环境:
EVOLVE_ALLOW_SELF_MODIFY=never
-
è‡ªå®šä¹‰åŸºå› ï¼š
- 在
data/default_genes.json æ·»åŠ
- 或使用
evolver_upsert_gene 工具
-
监控爆炸åŠå¾„:
- 定期检查
evolver_stats
- 调整基å›
max_files 约æŸ
1ï¸âƒ£5ï¸âƒ£ æœªæ¥æ”¹è¿›æ–¹å‘
15.1 çŸæœŸä¼˜åŒ– 🔧
- 统一 Schema ç‰ˆæœ¬å· - ä¿®å¤
PromptBuilder 版本ä¸ä¸€è‡´
- æ·»åŠ é™æ€åˆ†æž - PHPStan/Psalm 集æˆ
- æ”¹è¿›é”™è¯¯æ¶ˆæ¯ - æ›´å‹å¥½çš„用户æç¤º
- 性能分æžå·¥å…· - æ·»åŠ Xdebug é…置示例
15.2 长期扩展 🚀
- 多数æ®åº“æ”¯æŒ - PostgreSQL/MySQL 适é…器
- Web UI - å¯è§†åŒ–演化历å²å’Œç»Ÿè®¡
- 分布å¼åŒæ¥ - 多节点 A2A åŒæ¥ä¼˜åŒ–
- 机器å¦ä¹ é›†æˆ - åŸºäºŽåŽ†å²æ•°æ®é¢„测最佳基å›
- æ’件系统 - å…许第三方扩展 Ops 模å—
📊 综åˆè¯„分
| 维度 |
评分 |
说明 |
| 架构设计 |
âââââ |
清晰分层,èŒè´£åˆ†ç¦» |
| 代ç è´¨é‡ |
âââââ |
ä¸¥æ ¼ç±»åž‹ï¼Œå®Œå–„é”™è¯¯å¤„ç† |
| 安全性 |
âââââ |
多层防护,硬编ç é™åˆ¶ |
| 测试覆盖 |
ââââ |
æ ¸å¿ƒåŠŸèƒ½å…¨è¦†ç›–ï¼Œå¯å¢žåŠ è¾¹ç¼˜ç”¨ä¾‹ |
| 文档完整性 |
ââââ |
README/AGENTS.md 完善,缺少 API 文档 |
| 性能优化 |
ââââ |
SQLite 优化到ä½ï¼Œå¯è€ƒè™‘缓å˜å±‚ |
| å¯ç»´æŠ¤æ€§ |
âââââ |
模å—化设计,易于扩展 |
| 创新性 |
âââââ |
è‡ªæ¼”åŒ–æ¦‚å¿µå‰æ²¿ |
总体评分:âââââ (4.8/5)
🎯 结论
Evolver.php æ˜¯ä¸€ä¸ªå·¥ä¸šçº§çš„è‡ªæ¼”åŒ–å¼•æ“Žå®žçŽ°ï¼Œå…·æœ‰ä»¥ä¸‹æ ¸å¿ƒä¼˜åŠ¿ï¼š
- ✅ æˆç†Ÿç¨³å®š - 1:1 ç§»æ¤è‡ªç»è¿‡éªŒè¯çš„ JavaScript 版本
- ✅ 安全å¯é - 多层防护体系,硬编ç 安全é™åˆ¶
- ✅ 易于部署 - 零夿‚ä¾èµ–,å•个 PHP 文件å³å¯è¿è¡Œ
- ✅ 测试完备 - 44 ä¸ªæµ‹è¯•ç±»è¦†ç›–æ ¸å¿ƒåŠŸèƒ½
- ✅ 文档完善 - README/AGENTS.md æä¾›è¯¦ç»†æŒ‡å—
推è使用场景:
- AI 辅助开å‘环境的åŽç«¯å¼•擎
- 需è¦è‡ªä¿®å¤èƒ½åŠ›çš„ä»£ç 库
- 知识积累和ç»éªŒå¤ç”¨ç³»ç»Ÿ
注æ„事项:
- 生产环境建议使用
review 或 never 模å¼
- 定期备份 SQLite æ•°æ®åº“
- 监控爆炸åŠå¾„和演化频率