@evomap/evolver 1.68.0-beta.1 → 1.69.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/README.ja-JP.md +19 -0
- package/README.md +19 -0
- package/README.zh-CN.md +19 -0
- package/index.js +31 -1
- package/package.json +1 -1
- package/src/config.js +16 -0
- package/src/evolve.js +1 -1
- package/src/gep/.integrity +0 -0
- package/src/gep/a2aProtocol.js +1 -1
- package/src/gep/candidateEval.js +1 -1
- package/src/gep/candidates.js +1 -1
- package/src/gep/contentHash.js +1 -1
- package/src/gep/crypto.js +1 -1
- package/src/gep/curriculum.js +1 -1
- package/src/gep/deviceId.js +1 -1
- package/src/gep/envFingerprint.js +1 -1
- package/src/gep/explore.js +1 -1
- package/src/gep/featureFlags.js +114 -0
- package/src/gep/hubReview.js +1 -1
- package/src/gep/hubSearch.js +1 -1
- package/src/gep/hubVerify.js +1 -1
- package/src/gep/integrityCheck.js +1 -1
- package/src/gep/learningSignals.js +1 -1
- package/src/gep/memoryGraph.js +1 -1
- package/src/gep/memoryGraphAdapter.js +1 -1
- package/src/gep/mutation.js +1 -1
- package/src/gep/narrativeMemory.js +1 -1
- package/src/gep/personality.js +1 -1
- package/src/gep/policyCheck.js +1 -1
- package/src/gep/prompt.js +1 -1
- package/src/gep/reflection.js +1 -1
- package/src/gep/selector.js +1 -1
- package/src/gep/shield.js +1 -1
- package/src/gep/skillDistiller.js +1 -1
- package/src/gep/solidify.js +1 -1
- package/src/gep/strategy.js +1 -1
- package/src/gep/validator/index.js +87 -1
- package/src/ops/skills_monitor.js +1 -1
- package/src/proxy/mailbox/store.js +3 -1
- package/SECURITY.md +0 -66
package/README.ja-JP.md
CHANGED
|
@@ -355,6 +355,25 @@ EVOLVE_REPORT_TOOL=feishu-card
|
|
|
355
355
|
**方法 2: 動的検出**
|
|
356
356
|
スクリプトは、互換性のあるローカルスキル(`skills/feishu-card` など)がワークスペースに存在するかを自動的に検出し、それに応じて動作をアップグレードします。
|
|
357
357
|
|
|
358
|
+
### バリデータ役割(デフォルト ON)
|
|
359
|
+
|
|
360
|
+
[EvoMap Hub](https://evomap.ai) に接続すると、各 evolver インスタンスは**分散バリデータ**としても動作します:hub から割り当てられた検証タスクを定期的に取得し、提案者が宣言した検証コマンドをサンドボックスで実行し、`ValidationReport` を返送します。コンセンサスに参加したバリデータはクレジットと評判を獲得します。
|
|
361
|
+
|
|
362
|
+
| 変数 | デフォルト | 説明 |
|
|
363
|
+
|------|-----------|------|
|
|
364
|
+
| `EVOLVER_VALIDATOR_ENABLED` | _(未設定 = ON)_ | `0`/`false`/`off` でオプトアウト、`1`/`true`/`on` で強制 ON。env が hub プッシュフラグおよびコードのデフォルトより優先されます。 |
|
|
365
|
+
| `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | `--loop`/`--mad-dog` モードでのバリデータ常駐ポーリング間隔。 |
|
|
366
|
+
| `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | ポーリングごとの最大取得タスク数。 |
|
|
367
|
+
| `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | 1 回のフェッチのタイムアウト。 |
|
|
368
|
+
|
|
369
|
+
永続フラグの上書き:env が未設定の場合、ランタイムは `~/.evomap/feature_flags.json` を読み込みます。Hub は既存の mailbox 経由で `feature_flag_update` イベントを送り、アップグレード後のレガシーノードを自動 ON にできます。
|
|
370
|
+
|
|
371
|
+
永続的にオプトアウト:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
EVOLVER_VALIDATOR_ENABLED=0 evolver run --loop
|
|
375
|
+
```
|
|
376
|
+
|
|
358
377
|
### GitHub Issue 自動報告
|
|
359
378
|
|
|
360
379
|
evolver が持続的な失敗(失敗ループまたは高い失敗率での繰り返しエラー)を検出すると、サニタイズされた環境情報とログで GitHub issue を上流リポジトリに自動的にファイルできます。すべての機密データ(トークン、ローカルパス、メールなど)は送信前に編集されます。
|
package/README.md
CHANGED
|
@@ -354,6 +354,25 @@ EVOLVE_REPORT_TOOL=feishu-card
|
|
|
354
354
|
**Method 2: Dynamic Detection**
|
|
355
355
|
The script automatically detects if compatible local skills (like `skills/feishu-card`) exist in your workspace and upgrades its behavior accordingly.
|
|
356
356
|
|
|
357
|
+
### Validator Role (default ON)
|
|
358
|
+
|
|
359
|
+
When connected to an [EvoMap Hub](https://evomap.ai), every evolver instance also acts as a **decentralized validator**: it periodically pulls a small batch of validation tasks assigned by the hub, runs the proposer's claimed validation commands inside the existing sandbox, and submits a `ValidationReport` back. Validators that join consensus earn credits and reputation.
|
|
360
|
+
|
|
361
|
+
| Variable | Default | Description |
|
|
362
|
+
|----------|---------|-------------|
|
|
363
|
+
| `EVOLVER_VALIDATOR_ENABLED` | _(unset = ON)_ | `0`/`false`/`off` to opt out; `1`/`true`/`on` to force on. Env always wins over hub-pushed flag and the built-in default. |
|
|
364
|
+
| `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | Interval between validator polls when running in `--loop` / `--mad-dog` mode. |
|
|
365
|
+
| `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | Max tasks claimed per poll. |
|
|
366
|
+
| `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | Timeout for the per-poll task fetch. |
|
|
367
|
+
|
|
368
|
+
Persistent flag override: when the env is unset, the runtime reads `~/.evomap/feature_flags.json`. The hub may push `feature_flag_update` events through the existing mailbox channel to flip this on for legacy installs after upgrade.
|
|
369
|
+
|
|
370
|
+
To opt out permanently:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
EVOLVER_VALIDATOR_ENABLED=0 evolver run --loop
|
|
374
|
+
```
|
|
375
|
+
|
|
357
376
|
### Auto GitHub Issue Reporting
|
|
358
377
|
|
|
359
378
|
When the evolver detects persistent failures (failure loop or recurring errors with high failure ratio), it can automatically file a GitHub issue to the upstream repository with sanitized environment info and logs. All sensitive data (tokens, local paths, emails, etc.) is redacted before submission.
|
package/README.zh-CN.md
CHANGED
|
@@ -346,6 +346,25 @@ EVOLVE_REPORT_TOOL=feishu-card
|
|
|
346
346
|
**方式二:动态检测**
|
|
347
347
|
脚本会自动检测是否存在兼容的本地技能(如 `skills/feishu-card`),并自动升级行为。
|
|
348
348
|
|
|
349
|
+
### 验证者角色(默认开启)
|
|
350
|
+
|
|
351
|
+
当连接到 [EvoMap Hub](https://evomap.ai) 时,每个 evolver 实例同时充当**去中心化验证者**:定期拉取 hub 分配的少量验证任务,在沙盒中执行发布者声明的验证命令,回传 `ValidationReport`。参与共识的验证者会获得积分与信誉。
|
|
352
|
+
|
|
353
|
+
| 变量 | 默认值 | 说明 |
|
|
354
|
+
|------|--------|------|
|
|
355
|
+
| `EVOLVER_VALIDATOR_ENABLED` | _(未设 = 开启)_ | `0`/`false`/`off` 主动关闭;`1`/`true`/`on` 强制开启。env 优先于 hub 下发的 flag 与代码默认值。 |
|
|
356
|
+
| `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | `--loop`/`--mad-dog` 模式下验证者守护进程的轮询间隔。 |
|
|
357
|
+
| `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | 每次轮询最多领取的任务数。 |
|
|
358
|
+
| `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | 单次拉取的超时。 |
|
|
359
|
+
|
|
360
|
+
持久化覆盖:未设 env 时,运行时读取 `~/.evomap/feature_flags.json`。Hub 可通过现有 mailbox 通道下发 `feature_flag_update` 事件,让升级后的老节点自动开启。
|
|
361
|
+
|
|
362
|
+
永久关闭:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
EVOLVER_VALIDATOR_ENABLED=0 evolver run --loop
|
|
366
|
+
```
|
|
367
|
+
|
|
349
368
|
### 自动 GitHub Issue 上报
|
|
350
369
|
|
|
351
370
|
当 evolver 检测到持续性失败(failure loop 或 recurring error + high failure ratio)时,会自动向上游仓库提交 GitHub issue,附带脱敏后的环境信息和日志。所有敏感数据(token、本地路径、邮箱等)在提交前均会被替换为 `[REDACTED]`。
|
package/index.js
CHANGED
|
@@ -206,6 +206,18 @@ async function main() {
|
|
|
206
206
|
console.warn('[Heartbeat] Failed to start: ' + (e.message || e));
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
+
// Validator daemon: independent timer that fetches and executes
|
|
210
|
+
// validation tasks regardless of the main evolve loop's idle gating.
|
|
211
|
+
// Honors EVOLVER_VALIDATOR_ENABLED and the persisted feature flag.
|
|
212
|
+
try {
|
|
213
|
+
const { startValidatorDaemon } = require('./src/gep/validator');
|
|
214
|
+
if (startValidatorDaemon()) {
|
|
215
|
+
console.log('[ValidatorDaemon] started.');
|
|
216
|
+
}
|
|
217
|
+
} catch (vdErr) {
|
|
218
|
+
console.warn('[ValidatorDaemon] failed to start: ' + (vdErr && vdErr.message || vdErr));
|
|
219
|
+
}
|
|
220
|
+
|
|
209
221
|
// ATP: auto-start merchant agent if enabled
|
|
210
222
|
try {
|
|
211
223
|
const { defaultHandler, merchantAgent } = require('./src/atp');
|
|
@@ -522,6 +534,15 @@ async function main() {
|
|
|
522
534
|
process.exit(1);
|
|
523
535
|
}
|
|
524
536
|
const responseFilePath = responseFileFlag.slice('--response-file='.length);
|
|
537
|
+
{
|
|
538
|
+
const { getRepoRoot } = require('./src/gep/paths');
|
|
539
|
+
const resolvedResponsePath = path.resolve(responseFilePath);
|
|
540
|
+
const resolvedRepoRoot = path.resolve(getRepoRoot());
|
|
541
|
+
if (responseFilePath.includes('..') || !resolvedResponsePath.startsWith(resolvedRepoRoot)) {
|
|
542
|
+
console.error('[Distill] ERROR: Invalid response-file path "' + responseFilePath + '" - path traversal detected or path is outside the repository.');
|
|
543
|
+
process.exit(2);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
525
546
|
try {
|
|
526
547
|
const responseText = fs.readFileSync(responseFilePath, 'utf8');
|
|
527
548
|
const { completeDistillation } = require('./src/gep/skillDistiller');
|
|
@@ -904,7 +925,16 @@ async function main() {
|
|
|
904
925
|
- --action=<action> (filter: hub_search_hit, hub_search_miss, asset_reuse, asset_reference, asset_publish, asset_publish_skip)
|
|
905
926
|
- --last=<N> (show last N entries)
|
|
906
927
|
- --since=<ISO_date> (entries after date)
|
|
907
|
-
- --json (raw JSON output)
|
|
928
|
+
- --json (raw JSON output)
|
|
929
|
+
|
|
930
|
+
Validator role (decentralized validation, default ON since v1.69.0):
|
|
931
|
+
- EVOLVER_VALIDATOR_ENABLED=0 opt out (env beats persisted flag and default)
|
|
932
|
+
- EVOLVER_VALIDATOR_ENABLED=1 explicitly opt in
|
|
933
|
+
- unset honor persisted flag from ~/.evomap/feature_flags.json,
|
|
934
|
+
else default ON. The hub may push a flag update via
|
|
935
|
+
the mailbox (event type: feature_flag_update).
|
|
936
|
+
- Earnings: validators earn credits + reputation from successful consensus.
|
|
937
|
+
See docs/validator.md for details.`);
|
|
908
938
|
}
|
|
909
939
|
}
|
|
910
940
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evomap/evolver",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.69.0",
|
|
4
4
|
"description": "A GEP-powered self-evolution engine for AI agents. Features automated log analysis and Genome Evolution Protocol (GEP) for auditable, reusable evolution assets.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
package/src/config.js
CHANGED
|
@@ -47,6 +47,19 @@ const MAX_REGEX_PATTERN_LEN = 1024;
|
|
|
47
47
|
// --- Evolution Loop ---
|
|
48
48
|
|
|
49
49
|
const REPAIR_LOOP_THRESHOLD = envInt('EVOLVER_REPAIR_LOOP_THRESHOLD', 3);
|
|
50
|
+
|
|
51
|
+
// --- Gene Suppression (saturated / repeatedly failing genes) ---
|
|
52
|
+
// These thresholds control when a Gene is forcibly excluded from selection
|
|
53
|
+
// regardless of drift state. Without this, a Gene that fails repeatedly can
|
|
54
|
+
// trigger plateau detection -> drift mode -> the legacy ban skip path,
|
|
55
|
+
// resulting in the same failed Gene being re-selected forever.
|
|
56
|
+
//
|
|
57
|
+
// GENE_BAN_PER_KEY_ATTEMPTS: minimum attempts on the same signal key
|
|
58
|
+
// GENE_BAN_BEST_THRESHOLD: best success rate at or below which the Gene is banned
|
|
59
|
+
// GENE_EPIGENETIC_HARD_BOOST: epigenetic boost at or below which the Gene is hard-suppressed
|
|
60
|
+
const GENE_BAN_PER_KEY_ATTEMPTS = envInt('EVOLVER_GENE_BAN_PER_KEY_ATTEMPTS', 4);
|
|
61
|
+
const GENE_BAN_BEST_THRESHOLD = envFloat('EVOLVER_GENE_BAN_BEST_THRESHOLD', 0.15);
|
|
62
|
+
const GENE_EPIGENETIC_HARD_BOOST = envFloat('EVOLVER_GENE_EPIGENETIC_HARD_BOOST', -0.3);
|
|
50
63
|
const SESSION_ARCHIVE_TRIGGER = envInt('EVOLVER_SESSION_ARCHIVE_TRIGGER', 100);
|
|
51
64
|
const SESSION_ARCHIVE_KEEP = envInt('EVOLVER_SESSION_ARCHIVE_KEEP', 50);
|
|
52
65
|
const MEMORY_FRAGMENT_MAX_CHARS = envInt('EVOLVER_MEMORY_FRAGMENT_MAX_CHARS', 50000);
|
|
@@ -123,6 +136,9 @@ module.exports = {
|
|
|
123
136
|
MAX_REGEX_PATTERN_LEN,
|
|
124
137
|
// Evolution
|
|
125
138
|
REPAIR_LOOP_THRESHOLD,
|
|
139
|
+
GENE_BAN_PER_KEY_ATTEMPTS,
|
|
140
|
+
GENE_BAN_BEST_THRESHOLD,
|
|
141
|
+
GENE_EPIGENETIC_HARD_BOOST,
|
|
126
142
|
SESSION_ARCHIVE_TRIGGER,
|
|
127
143
|
SESSION_ARCHIVE_KEEP,
|
|
128
144
|
MEMORY_FRAGMENT_MAX_CHARS,
|