@evomap/evolver 1.89.20 → 2.0.0-beta.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.
Files changed (231) hide show
  1. package/README.md +27 -564
  2. package/bin/evolver-llm-proxy.js +3 -0
  3. package/bin/evolver-mcp.js +2 -0
  4. package/bin/evolver-proxy.js +3 -0
  5. package/bin/evolver.js +4 -0
  6. package/index.js +1 -3586
  7. package/package.json +32 -62
  8. package/CONTRIBUTING.md +0 -19
  9. package/LICENSE +0 -641
  10. package/README.ja-JP.md +0 -521
  11. package/README.ko-KR.md +0 -520
  12. package/README.zh-CN.md +0 -531
  13. package/SKILL.md +0 -365
  14. package/assets/cover.png +0 -0
  15. package/assets/gep/genes.seed.json +0 -496
  16. package/conformance/savings-core/constants.json +0 -30
  17. package/conformance/savings-core/golden-vectors.json +0 -333
  18. package/scripts/a2a_export.js +0 -63
  19. package/scripts/a2a_ingest.js +0 -79
  20. package/scripts/a2a_promote.js +0 -118
  21. package/scripts/analyze_by_skill.js +0 -121
  22. package/scripts/build_binaries.js +0 -479
  23. package/scripts/check-changelog.js +0 -166
  24. package/scripts/extract_log.js +0 -85
  25. package/scripts/generate_history.js +0 -75
  26. package/scripts/gep_append_event.js +0 -96
  27. package/scripts/gep_personality_report.js +0 -234
  28. package/scripts/human_report.js +0 -147
  29. package/scripts/recall-verify-report.js +0 -234
  30. package/scripts/recover_loop.js +0 -61
  31. package/scripts/refresh_stars_badge.js +0 -168
  32. package/scripts/seed-merchants.js +0 -91
  33. package/scripts/skill2recipes.js +0 -118
  34. package/scripts/suggest_version.js +0 -89
  35. package/scripts/validate-modules.js +0 -38
  36. package/scripts/validate-suite.js +0 -78
  37. package/skills/_meta/SKILL.md +0 -41
  38. package/skills/index.json +0 -14
  39. package/src/adapters/claudeCode.js +0 -194
  40. package/src/adapters/codex.js +0 -216
  41. package/src/adapters/cursor.js +0 -91
  42. package/src/adapters/hookAdapter.js +0 -469
  43. package/src/adapters/kiro.js +0 -195
  44. package/src/adapters/opencode.js +0 -326
  45. package/src/adapters/scripts/_lockPaths.js +0 -74
  46. package/src/adapters/scripts/_memoryFiltering.js +0 -35
  47. package/src/adapters/scripts/_runtimePaths.js +0 -440
  48. package/src/adapters/scripts/evolver-session-end.js +0 -321
  49. package/src/adapters/scripts/evolver-session-start.js +0 -587
  50. package/src/adapters/scripts/evolver-signal-detect.js +0 -98
  51. package/src/adapters/scripts/evolver-task-recall.js +0 -173
  52. package/src/atp/atpExecute.js +0 -283
  53. package/src/atp/atpTaskPickup.js +0 -233
  54. package/src/atp/autoBuyer.js +0 -382
  55. package/src/atp/autoDeliver.js +0 -215
  56. package/src/atp/cli.js +0 -354
  57. package/src/atp/cliAutobuyPrompt.js +0 -154
  58. package/src/atp/consumerAgent.js +0 -157
  59. package/src/atp/defaultHandler.js +0 -69
  60. package/src/atp/heartbeatSignalsHandler.js +0 -254
  61. package/src/atp/hubClient.js +0 -317
  62. package/src/atp/index.js +0 -38
  63. package/src/atp/merchantAgent.js +0 -118
  64. package/src/atp/protocol.js +0 -41
  65. package/src/atp/questionComposer.js +0 -133
  66. package/src/atp/serviceHelper.js +0 -92
  67. package/src/canary.js +0 -13
  68. package/src/config.js +0 -351
  69. package/src/evolve/guards.js +0 -1
  70. package/src/evolve/pipeline/collect.js +0 -1
  71. package/src/evolve/pipeline/dispatch.js +0 -1
  72. package/src/evolve/pipeline/enrich.js +0 -1
  73. package/src/evolve/pipeline/hub.js +0 -1
  74. package/src/evolve/pipeline/select.js +0 -1
  75. package/src/evolve/pipeline/signals.js +0 -1
  76. package/src/evolve/utils.js +0 -1
  77. package/src/evolve.js +0 -1
  78. package/src/experiment/agentRunner.js +0 -229
  79. package/src/experiment/cli.js +0 -159
  80. package/src/experiment/comparison.js +0 -233
  81. package/src/experiment/metrics.js +0 -75
  82. package/src/forceUpdate.js +0 -991
  83. package/src/gep/a2a.js +0 -173
  84. package/src/gep/a2aProtocol.js +0 -1
  85. package/src/gep/analyzer.js +0 -35
  86. package/src/gep/antiAbuseTelemetry.js +0 -1
  87. package/src/gep/assetCallLog.js +0 -197
  88. package/src/gep/assetStore.js +0 -723
  89. package/src/gep/assets.js +0 -36
  90. package/src/gep/autoDistillConv.js +0 -1
  91. package/src/gep/autoDistillLlm.js +0 -1
  92. package/src/gep/bridge.js +0 -138
  93. package/src/gep/candidateEval.js +0 -1
  94. package/src/gep/candidates.js +0 -1
  95. package/src/gep/claimNudge.js +0 -121
  96. package/src/gep/cliContracts.js +0 -1190
  97. package/src/gep/contentHash.js +0 -1
  98. package/src/gep/conversationDistiller.js +0 -1
  99. package/src/gep/conversationSniffer.js +0 -1
  100. package/src/gep/crypto.js +0 -1
  101. package/src/gep/curriculum.js +0 -1
  102. package/src/gep/deviceId.js +0 -1
  103. package/src/gep/directoryClient.js +0 -115
  104. package/src/gep/envFingerprint.js +0 -1
  105. package/src/gep/epigenetics.js +0 -1
  106. package/src/gep/execBridge.js +0 -1
  107. package/src/gep/executionTrace.js +0 -291
  108. package/src/gep/explore.js +0 -1
  109. package/src/gep/featureFlags.js +0 -121
  110. package/src/gep/gitOps.js +0 -265
  111. package/src/gep/hash.js +0 -1
  112. package/src/gep/hostErrorClassifier.js +0 -34
  113. package/src/gep/hubFetch.js +0 -1
  114. package/src/gep/hubReview.js +0 -1
  115. package/src/gep/hubSearch.js +0 -1
  116. package/src/gep/hubVerify.js +0 -1
  117. package/src/gep/idleScheduler.js +0 -400
  118. package/src/gep/issueReporter.js +0 -416
  119. package/src/gep/learningSignals.js +0 -1
  120. package/src/gep/llmReview.js +0 -92
  121. package/src/gep/localStateAwareness.js +0 -243
  122. package/src/gep/mailboxTransport.js +0 -119
  123. package/src/gep/memoryGraph.js +0 -1
  124. package/src/gep/memoryGraphAdapter.js +0 -1
  125. package/src/gep/mutation.js +0 -1
  126. package/src/gep/narrativeMemory.js +0 -1
  127. package/src/gep/oauthLogin.js +0 -181
  128. package/src/gep/openPRRegistry.js +0 -1
  129. package/src/gep/paths.js +0 -522
  130. package/src/gep/personality.js +0 -1
  131. package/src/gep/policyCheck.js +0 -1
  132. package/src/gep/portable.js +0 -103
  133. package/src/gep/privacyClient.js +0 -235
  134. package/src/gep/prompt.js +0 -1
  135. package/src/gep/questionGenerator.js +0 -518
  136. package/src/gep/recallInject.js +0 -1
  137. package/src/gep/recallVerifier.js +0 -1
  138. package/src/gep/reflection.js +0 -1
  139. package/src/gep/sanitize.js +0 -264
  140. package/src/gep/savingsCore.js +0 -1
  141. package/src/gep/schemas/capsule.js +0 -170
  142. package/src/gep/schemas/gene.js +0 -154
  143. package/src/gep/schemas/index.js +0 -8
  144. package/src/gep/schemas/protocol.js +0 -51
  145. package/src/gep/schemas/task.js +0 -74
  146. package/src/gep/selector.js +0 -1
  147. package/src/gep/selfPR.js +0 -469
  148. package/src/gep/signals.js +0 -776
  149. package/src/gep/skill2gep.js +0 -1056
  150. package/src/gep/skill2gepAudit.js +0 -303
  151. package/src/gep/skill2recipes.js +0 -511
  152. package/src/gep/skillDistiller.js +0 -1
  153. package/src/gep/skillPublisher.js +0 -358
  154. package/src/gep/solidify.js +0 -1
  155. package/src/gep/strategy.js +0 -1
  156. package/src/gep/taskReceiver.js +0 -575
  157. package/src/gep/tokenSavings.js +0 -1
  158. package/src/gep/trajectoryExport.js +0 -1
  159. package/src/gep/validationReport.js +0 -55
  160. package/src/gep/validator/index.js +0 -411
  161. package/src/gep/validator/reporter.js +0 -210
  162. package/src/gep/validator/sandboxExecutor.js +0 -480
  163. package/src/gep/validator/stakeBootstrap.js +0 -357
  164. package/src/gep/workspaceKeychain.js +0 -1
  165. package/src/ops/cleanup.js +0 -80
  166. package/src/ops/commentary.js +0 -60
  167. package/src/ops/health_check.js +0 -104
  168. package/src/ops/index.js +0 -11
  169. package/src/ops/innovation.js +0 -67
  170. package/src/ops/lifecycle.js +0 -798
  171. package/src/ops/self_repair.js +0 -76
  172. package/src/ops/skills_monitor.js +0 -147
  173. package/src/ops/trigger.js +0 -33
  174. package/src/proxy/clientSettings.js +0 -405
  175. package/src/proxy/envelope.js +0 -59
  176. package/src/proxy/extensions/dmHandler.js +0 -45
  177. package/src/proxy/extensions/sessionHandler.js +0 -141
  178. package/src/proxy/extensions/skillUpdater.js +0 -64
  179. package/src/proxy/extensions/traceControl.js +0 -1
  180. package/src/proxy/index.js +0 -1395
  181. package/src/proxy/inject.js +0 -1
  182. package/src/proxy/lifecycle/manager.js +0 -1568
  183. package/src/proxy/mailbox/state.js +0 -207
  184. package/src/proxy/mailbox/store.js +0 -590
  185. package/src/proxy/router/cache_passthrough.js +0 -26
  186. package/src/proxy/router/features.js +0 -84
  187. package/src/proxy/router/gemini_route.js +0 -154
  188. package/src/proxy/router/messages_route.js +0 -535
  189. package/src/proxy/router/model_router.js +0 -113
  190. package/src/proxy/router/models_route.js +0 -52
  191. package/src/proxy/router/ollama_route.js +0 -103
  192. package/src/proxy/router/responses_route.js +0 -170
  193. package/src/proxy/router/vertex_route.js +0 -110
  194. package/src/proxy/server/http.js +0 -363
  195. package/src/proxy/server/routes.js +0 -558
  196. package/src/proxy/server/settings.js +0 -115
  197. package/src/proxy/sync/engine.js +0 -179
  198. package/src/proxy/sync/inbound.js +0 -211
  199. package/src/proxy/sync/outbound.js +0 -320
  200. package/src/proxy/task/monitor.js +0 -131
  201. package/src/proxy/trace/extractor.js +0 -1
  202. package/src/proxy/trace/usage.js +0 -1
  203. package/src/webui/client/clientJs/assets.js +0 -111
  204. package/src/webui/client/clientJs/bootstrap.js +0 -92
  205. package/src/webui/client/clientJs/common.js +0 -77
  206. package/src/webui/client/clientJs/i18n.js +0 -366
  207. package/src/webui/client/clientJs/index.js +0 -35
  208. package/src/webui/client/clientJs/interactions.js +0 -351
  209. package/src/webui/client/clientJs/overview.js +0 -152
  210. package/src/webui/client/clientJs/personality.js +0 -285
  211. package/src/webui/client/clientJs/pipelines.js +0 -330
  212. package/src/webui/client/indexHtml.js +0 -221
  213. package/src/webui/client/static.js +0 -23
  214. package/src/webui/client/stylesCss.js +0 -639
  215. package/src/webui/client/vendor/README.md +0 -15
  216. package/src/webui/client/vendor/echarts.min.js +0 -45
  217. package/src/webui/index.js +0 -14
  218. package/src/webui/observer/assets.js +0 -146
  219. package/src/webui/observer/index.js +0 -37
  220. package/src/webui/observer/interactions.js +0 -127
  221. package/src/webui/observer/jsonl.js +0 -75
  222. package/src/webui/observer/paths.js +0 -46
  223. package/src/webui/observer/personality.js +0 -43
  224. package/src/webui/observer/pipelineEvents.js +0 -58
  225. package/src/webui/observer/redact.js +0 -63
  226. package/src/webui/observer/runs.js +0 -356
  227. package/src/webui/observer/safety.js +0 -57
  228. package/src/webui/observer/skills.js +0 -70
  229. package/src/webui/observer/status.js +0 -71
  230. package/src/webui/server/http.js +0 -138
  231. package/src/webui/server/routes.js +0 -41
package/README.md CHANGED
@@ -1,578 +1,41 @@
1
- # 🧬 Evolver
1
+ # evolver-v2
2
2
 
3
- [![GitHub stars](https://img.shields.io/badge/Stars-8.8k-2b3137?logo=github&logoColor=white)](https://github.com/EvoMap/evolver/stargazers)
4
- [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](https://opensource.org/licenses/GPL-3.0)
5
- [![Node.js >= 18](https://img.shields.io/badge/Node.js-%3E%3D%2018-green.svg)](https://nodejs.org/)
6
- [![npm downloads](https://img.shields.io/npm/dm/@evomap/evolver.svg)](https://www.npmjs.com/package/@evomap/evolver)
7
- [![arXiv](https://img.shields.io/badge/arXiv-2604.15097-b31b1b.svg)](https://arxiv.org/abs/2604.15097)
3
+ Evolver v2 — hub-无关进化 core + 按需 hub 适配。设计见 `~/evolver-v2-*.md`(总索引 + 硬化与执行计划)。
8
4
 
9
- ![Evolver Cover](assets/cover.png)
5
+ monorepo(pnpm workspaces):
6
+ - `@evomap/evolver-core` — hub 无关核心(算法/原材料/mailbox/资产库/workflow)。**边界铁律**:不得 import 任何 adapter/proxy。
7
+ - `@evomap/evolver-adapter-public` — 公共 Hub adapter,负责 public economy/marketplace/auth wire。
8
+ - `@evomap/evolver-hub-conformance` — test-only HubCapability contract suite,public/private adapter 共用。
9
+ - `evolver-proxy` `evolver-mcp` `evolver-cli` `evolver-runtime-adapters` `evolver-webui`。
10
10
 
11
- **[evomap.ai](https://evomap.ai)** | [Documentation](https://evomap.ai/wiki) | [Chinese / 中文文档](README.zh-CN.md) | [Japanese / 日本語ドキュメント](README.ja-JP.md) | [Korean / 한국어 문서](README.ko-KR.md) | [GitHub](https://github.com/EvoMap/evolver) | [Releases](https://github.com/EvoMap/evolver/releases)
11
+ 企业私有化不维护第二套 v2 产品线;`evolver-v2-enterprise-dev` 只持有 private protocol + private Hub adapter,
12
+ 并通过 `@evomap/evolver-hub-conformance` 证明它仍实现同一份 core contract。
12
13
 
13
- ---
14
-
15
- > **Notice — Moving Toward Source-Available**
16
- >
17
- > Evolver has been fully open source since our first release on 2026-02-01 (initially MIT, and GPL-3.0-or-later since 2026-04-09). In March 2026, another project in the same lane released a system with strikingly similar memory / skill / evolution-asset design — without any attribution to Evolver. Full analysis: [Hermes Agent Self-Evolution vs. Evolver: A Detailed Similarity Analysis](https://evomap.ai/en/blog/hermes-agent-evolver-similarity-analysis).
18
- >
19
- > To protect the integrity of the work and keep investing in this direction, future Evolver releases will transition from fully open source to source-available. **Our commitment to users is unchanged**: we will keep shipping the best agent self-evolution capability in the industry — faster iteration, deeper GEP integration, stronger memory and skill systems. All already-published MIT and GPL-3.0 versions remain freely usable under their original terms. You can still `npm install @evomap/evolver` or clone this repo; nothing in your current workflow breaks.
20
- >
21
- > Questions or concerns: open an issue or reach us at [evomap.ai](https://evomap.ai).
22
-
23
- ---
24
-
25
- > **Research — The theory behind Evolver**
26
- >
27
- > **From Procedural Skills to Strategy Genes: Towards Experience-Driven Test-Time Evolution** · [arXiv:2604.15097](https://arxiv.org/abs/2604.15097) · [PDF](https://arxiv.org/pdf/2604.15097)
28
- >
29
- > Across 4,590 controlled trials on 45 scientific code-solving scenarios, the paper shows that documentation-oriented **Skill** packages provide unstable, sparse control signal, while a compact **Gene** representation delivers the strongest overall performance, stays robust under structural perturbation, and is a far better carrier for iterative experience accumulation. On CritPt, gene-evolved systems lift their paired base models from 9.1% to 18.57% and from 17.7% to 27.14%.
30
- >
31
- > Evolver is the open-source engine that puts this result into practice: it encodes agent experience as Genes and Capsules under the GEP protocol, not as ad hoc prompts or skill docs. If you've ever wondered *why* Evolver insists on Genes instead of longer skill docs, this is the paper to read.
32
- >
33
- > Want the applied version? [OpenClaw x EvoMap: CritPt Evaluation Report](https://evomap.ai/blog/openclaw-critpt-report) walks through how the same Gene-based evolution loop drives an OpenClaw agent from 9.1% to 18.57% on CritPt Physics Solver across five versions (Beta -> v2.2), with full token-cost trajectories, gene activation mapping, and the "tokens rise then fall" signature of reasoning getting compressed into reusable genes.
34
-
35
- ---
36
-
37
- > **"Evolution is not optional. Adapt or die."**
38
-
39
- **Three lines**
40
- - **What it is**: A [GEP](https://evomap.ai/wiki)-powered self-evolution engine for AI agents.
41
- - **Pain it solves**: Turns ad hoc prompt tweaks into auditable, reusable evolution assets.
42
- - **Use in 30 seconds**: `npm install -g @evomap/evolver`, then run `evolver` in any git repo.
43
-
44
- ## EvoMap -- The Evolution Network
45
-
46
- Evolver is the core engine behind **[EvoMap](https://evomap.ai)**, a network where AI agents evolve through validated collaboration. Visit [evomap.ai](https://evomap.ai) to explore the full platform -- live agent maps, evolution leaderboards, and the ecosystem that turns isolated prompt tweaks into shared, auditable intelligence.
47
-
48
- Keywords: protocol-constrained evolution, audit trail, genes and capsules, prompt governance.
49
-
50
- ## Choose Your Path
51
-
52
- Evolver has one install but two usage shapes. Pick the one that matches how you plan to use it, then follow only that section.
53
-
54
- | Path | Who it's for | Command after install | Guide |
55
- |---|---|---|---|
56
- | **CLI Quick Start** | You just want to use Evolver to evolve an agent / project. 99% of readers. | `evolver` | [below](#cli-quick-start) |
57
- | **Run from Source** | You want to hack on the engine, send PRs, or run unreleased builds. | `node index.js` | [below](#run-from-source-contributors-only) |
58
-
59
- > **For agent / skill integrations** (Codex, Claude Code skill system, custom MCP clients) see the separate [SKILL.md](SKILL.md) -- it documents the Proxy mailbox API that wraps the CLI. You still install Evolver via the CLI Quick Start below first.
60
-
61
- ## Prerequisites
62
-
63
- - **[Node.js](https://nodejs.org/)** >= 18
64
- - **[Git](https://git-scm.com/)** -- Required. Evolver uses git for rollback, blast radius calculation, and solidify. Running in a non-git directory will fail with a clear error message.
65
-
66
- ## CLI Quick Start
67
-
68
- This is the recommended path for almost everyone.
69
-
70
- ### 1. Install
71
-
72
- ```bash
73
- npm install -g @evomap/evolver
74
- ```
75
-
76
- Verify the CLI is on your PATH:
77
-
78
- ```bash
79
- evolver --help
80
- ```
81
-
82
- If you hit `EACCES` on Linux/macOS, configure a user-level prefix instead of using `sudo`:
83
-
84
- ```bash
85
- npm config set prefix ~/.npm-global
86
- echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
87
- source ~/.bashrc
88
- ```
89
-
90
- ### 2. Run it
91
-
92
- From inside any **git-initialized** project directory:
93
-
94
- ```bash
95
- # Single evolution run -- scans logs, selects a Gene, outputs a GEP prompt
96
- evolver
97
-
98
- # Review mode -- pause before applying, wait for human confirmation
99
- evolver --review
100
-
101
- # Continuous loop -- runs as a background daemon
102
- evolver --loop
103
- ```
104
-
105
- A "successful first run" looks like:
106
-
107
- 1. Evolver prints a banner with the detected strategy preset (e.g. `balanced`).
108
- 2. It scans `./memory/` (creates it if missing) for logs and signals.
109
- 3. It selects a matching Gene / Capsule from its built-in asset pool.
110
- 4. It prints a **GEP prompt** to stdout -- that's the artifact. Copy it into your agent, or let a host runtime (OpenClaw, Cursor hook, Claude Code hook) consume it automatically.
111
- 5. It writes an `EvolutionEvent` into `./memory/` for audit.
112
-
113
- If step 4 didn't appear, you're not running inside a git repo -- `cd` into one and retry. Everything else runs fully offline.
114
-
115
- ### 3. Connect to the EvoMap network (optional)
116
-
117
- Evolver works fully offline. Hub connection only unlocks network features (skill sharing, worker pool, evolution leaderboards).
118
-
119
- Create a `.env` file **in the current working directory where you run `evolver`** (not in your home directory, not in the global npm install location):
120
-
121
- ```bash
122
- # Register at https://evomap.ai to get your Node ID
123
- A2A_HUB_URL=https://evomap.ai
124
- A2A_NODE_ID=your_node_id_here
125
- ```
126
-
127
- Evolver reads `.env` from `process.cwd()` on each run. If you run `evolver` from multiple projects, each project can have its own `.env`.
128
-
129
- ### 4. Wire up your agent runtime (optional)
130
-
131
- Evolver integrates with major agent runtimes through `setup-hooks`. Run it once per platform you want to wire up.
132
-
133
- | Platform | Command | What it writes |
134
- |---|---|---|
135
- | [Cursor](https://cursor.com) | `evolver setup-hooks --platform=cursor` | `~/.cursor/hooks.json` + scripts in `~/.cursor/hooks/`. Restart Cursor or open a new session. Fires on `sessionStart`, `afterFileEdit`, `stop`. |
136
- | [Claude Code](https://www.anthropic.com/claude-code) | `evolver setup-hooks --platform=claude-code` | Registers with Claude Code's hook system via `~/.claude/`. Restart the Claude Code CLI. |
137
- | [Codex](https://github.com/openai/codex) | `evolver setup-hooks --platform=codex` | `~/.codex/hooks.json` + scripts in `~/.codex/hooks/`, enables `codex_hooks` feature in `config.toml`. Restart the Codex CLI. See [Codex caveats](#codex-caveats) below. |
138
- | [Kiro](https://kiro.dev) | `evolver setup-hooks --platform=kiro` | Three `*.kiro.hook` files + scripts in `~/.kiro/hooks/`. Auto-discovered, no restart needed. |
139
- | [opencode](https://opencode.ai) | `evolver setup-hooks --platform=opencode` | Plugin at `~/.opencode/plugins/evolver.js` + scripts in `~/.opencode/hooks/`. Restart opencode. |
140
- | [OpenClaw](https://openclaw.com) | No setup needed | OpenClaw natively interprets the `sessions_spawn(...)` stdout directives Evolver emits. Just run `evolver` from inside an OpenClaw session. |
141
-
142
- #### Codex caveats
143
-
144
- The Codex CLI exposes `SessionStart` / `Stop` / `PostToolUse` hooks (which is
145
- how `setup-hooks --platform=codex` wires Evolver in), but it does **not**
146
- emit a session transcript file the way Cursor / Claude Code / opencode do.
147
- That means `evolver --review` cannot read raw session logs on Codex.
148
-
149
- `setup-hooks --platform=codex` is lifecycle integration only; it does not route
150
- Codex model requests through Evolver Proxy. To route Codex model traffic, run
151
- Evolver Proxy and configure Codex with a user-level OpenAI Responses-compatible
152
- custom provider whose `base_url` points at the proxy's `/v1` endpoint and whose
153
- command-backed auth runs `evolver proxy-token` or the absolute `node index.js
154
- proxy-token --settings ...` helper emitted by `scripts/internal-proxy-env.sh
155
- --codex-config` from a source checkout.
156
-
157
- Evolver compensates by reading, in order:
158
-
159
- 1. `MEMORY.md` / `USER.md` in the workspace root (if you maintain them);
160
- 2. the `<!-- evolver-evolution-memory -->` section that
161
- `setup-hooks --platform=codex` injects into your project's
162
- `AGENTS.md`;
163
- 3. the tail of the local `memory_graph.jsonl` (the per-cycle outcome log
164
- that Evolver writes itself).
165
-
166
- If none of those have content yet, you'll see `memory_missing` /
167
- `user_missing` / `session_logs_missing` show up as advisory signals
168
- during the first few cycles. They will go quiet on their own as
169
- `memory_graph.jsonl` accumulates outcomes — no manual setup required.
170
-
171
- ## Run from Source (Contributors Only)
172
-
173
- Skip this section entirely if you installed via `npm install -g @evomap/evolver` above. This path exists so contributors can hack on the engine.
174
-
175
- ```bash
176
- git clone https://github.com/EvoMap/evolver.git
177
- cd evolver
178
- npm install
179
-
180
- # Then use node index.js wherever the CLI docs say evolver
181
- node index.js # equivalent to: evolver
182
- node index.js --review # equivalent to: evolver --review
183
- node index.js --loop # equivalent to: evolver --loop
184
- ```
185
-
186
- Every `evolver <flag>` invocation in the rest of this README maps 1:1 to `node index.js <flag>` when running from source.
187
-
188
- ## What Evolver Does (and Does Not Do)
189
-
190
- **Evolver is a prompt generator, not a code patcher.** Each evolution cycle:
191
-
192
- 1. Scans your `memory/` directory for runtime logs, error patterns, and signals.
193
- 2. Selects the best-matching [Gene or Capsule](https://evomap.ai/wiki) from the local GEP asset store.
194
- 3. Emits a strict, protocol-bound GEP prompt that guides the next evolution step.
195
- 4. Records an auditable [EvolutionEvent](https://evomap.ai/wiki) for traceability.
196
-
197
- **It does NOT**:
198
- - Automatically edit your source code.
199
- - Execute arbitrary shell commands (see [Security Model](#security-model)).
200
- - Require an internet connection for core functionality.
201
-
202
- ### How It Integrates with Host Runtimes
203
-
204
- When running inside a host runtime (e.g., [OpenClaw](https://openclaw.com)), the `sessions_spawn(...)` text printed to stdout can be picked up by the host to trigger follow-up actions. **In standalone mode, these are just text output** -- nothing is executed automatically.
205
-
206
- | Mode | Behavior |
207
- | :--- | :--- |
208
- | Standalone (`evolver`) | Generates prompt, prints to stdout, exits |
209
- | Loop (`evolver --loop`) | Repeats the above in a daemon loop with adaptive sleep |
210
- | Inside OpenClaw | Host runtime interprets stdout directives like `sessions_spawn(...)` |
211
-
212
- > **`--loop` is not a real-time agent assistant.** Loop mode is for background self-maintenance (validator runs, worker tasks, ATP merchant auto-deliver, solidify). Its stdout is consumed by evolver itself, **not** by a running host agent, so `sessions_spawn(...)` directives produced in loop mode will not be picked up by OpenClaw / Cursor / Claude Code even if those runtimes are installed. If you want evolver to observe and advise a live agent session, call `evolver` from **inside** that agent session (OpenClaw will pick up the stdout directives on that single run). For OpenClaw specifically, also make sure `AGENT_NAME` (or `AGENT_SESSIONS_DIR`) points at the agent directory actually producing sessions under `~/.openclaw/agents/<name>/sessions/` -- otherwise evolver falls back to reading its own logs and looks like it is "cycling emptily".
213
-
214
- ## Who This Is For / Not For
215
-
216
- **For**
217
- - Teams maintaining agent prompts and logs at scale
218
- - Users who need auditable evolution traces ([Genes](https://evomap.ai/wiki), [Capsules](https://evomap.ai/wiki), [Events](https://evomap.ai/wiki))
219
- - Environments requiring deterministic, protocol-bound changes
220
-
221
- **Not For**
222
- - One-off scripts without logs or history
223
- - Projects that require free-form creative changes
224
- - Systems that cannot tolerate protocol overhead
225
-
226
- ## Features
227
-
228
- - **Auto-Log Analysis**: scans memory and history files for errors and patterns.
229
- - **Self-Repair Guidance**: emits repair-focused directives from signals.
230
- - **[GEP Protocol](https://evomap.ai/wiki)**: standardized evolution with reusable assets.
231
- - **Mutation + Personality Evolution**: each evolution run is gated by an explicit Mutation object and an evolvable PersonalityState.
232
- - **Configurable Strategy Presets**: `EVOLVE_STRATEGY=balanced|innovate|harden|repair-only` controls intent balance.
233
- - **Signal De-duplication**: prevents repair loops by detecting stagnation patterns.
234
- - **Operations Module** (`src/ops/`): portable lifecycle, skill monitoring, cleanup, self-repair, wake triggers -- zero platform dependency.
235
- - **Protected Source Files**: prevents autonomous agents from overwriting core evolver code.
236
- - **[Skill Store](https://evomap.ai)**: download and share reusable skills via `evolver fetch --skill <id>`.
237
-
238
- ## Typical Use Cases
239
-
240
- - Harden a flaky agent loop by enforcing validation before edits
241
- - Encode recurring fixes as reusable [Genes and Capsules](https://evomap.ai/wiki)
242
- - Produce auditable evolution events for review or compliance
243
-
244
- ## Anti-Examples
245
-
246
- - Rewriting entire subsystems without signals or constraints
247
- - Using the protocol as a generic task runner
248
- - Producing changes without recording EvolutionEvent
249
-
250
- ## Usage
251
-
252
- All commands below assume you installed with `npm install -g @evomap/evolver`. If you are running from source, substitute `node index.js` for `evolver` -- they are equivalent.
253
-
254
- ### Standard Run (Automated)
255
- ```bash
256
- evolver
257
- ```
258
-
259
- ### Review Mode (Human-in-the-Loop)
260
- ```bash
261
- evolver --review
262
- ```
263
-
264
- ### Continuous Loop
265
- ```bash
266
- evolver --loop
267
- ```
268
-
269
- ### With Strategy Preset
270
- ```bash
271
- EVOLVE_STRATEGY=innovate evolver --loop # maximize new features
272
- EVOLVE_STRATEGY=harden evolver --loop # focus on stability
273
- EVOLVE_STRATEGY=repair-only evolver --loop # emergency fix mode
274
- ```
275
-
276
- | Strategy | Innovate | Optimize | Repair | When to Use |
277
- | :--- | :--- | :--- | :--- | :--- |
278
- | `balanced` (default) | 50% | 30% | 20% | Daily operation, steady growth |
279
- | `innovate` | 80% | 15% | 5% | System stable, ship new features fast |
280
- | `harden` | 20% | 40% | 40% | After major changes, focus on stability |
281
- | `repair-only` | 0% | 20% | 80% | Emergency state, all-out repair |
282
-
283
- ### Operations (Lifecycle Management)
284
- ```bash
285
- node src/ops/lifecycle.js start # start evolver loop in background
286
- node src/ops/lifecycle.js stop # graceful stop (SIGTERM -> SIGKILL)
287
- node src/ops/lifecycle.js status # show running state
288
- node src/ops/lifecycle.js check # health check + auto-restart if stagnant
289
- ```
290
-
291
- ### Skill Store
292
14
  ```bash
293
- # Download a skill from the EvoMap network
294
- evolver fetch --skill <skill_id>
295
-
296
- # Specify output directory
297
- evolver fetch --skill <skill_id> --out=./my-skills/
298
- ```
299
-
300
- Requires `A2A_HUB_URL` to be configured. Browse available skills at [evomap.ai](https://evomap.ai).
301
-
302
- ### Cron / External Runner Keepalive
303
- If you run a periodic keepalive/tick from a cron/agent runner, prefer a single simple command with minimal quoting.
304
-
305
- Recommended:
306
-
307
- ```bash
308
- bash -lc 'evolver --loop'
309
- ```
310
-
311
- Avoid composing multiple shell segments inside the cron payload (for example `...; echo EXIT:$?`) because nested quotes can break after passing through multiple serialization/escaping layers.
312
-
313
- For process managers like pm2, the same principle applies -- wrap the command simply:
314
-
315
- ```bash
316
- pm2 start "bash -lc 'evolver --loop'" --name evolver --cron-restart="0 */6 * * *"
317
- ```
318
-
319
- ## Connecting to EvoMap Hub
320
-
321
- Evolver can optionally connect to the [EvoMap Hub](https://evomap.ai) for network features. This is **not required** for core evolution functionality.
322
-
323
- ### Setup
324
-
325
- 1. Register at [evomap.ai](https://evomap.ai) and get your Node ID.
326
- 2. Add the following to your `.env` file:
327
-
328
- ```bash
329
- A2A_HUB_URL=https://evomap.ai
330
- A2A_NODE_ID=your_node_id_here
331
- ```
332
-
333
- ### What Hub Connection Enables
334
-
335
- | Feature | Description |
336
- | :--- | :--- |
337
- | **Heartbeat** | Periodic check-in with the Hub; reports node status and receives available work |
338
- | **Skill Store** | Download and publish reusable skills (`evolver fetch`) |
339
- | **Worker Pool** | Accept and execute evolution tasks from the network (see [Worker Pool](#worker-pool-evomap-network)) |
340
- | **Evolution Circle** | Collaborative evolution groups with shared context |
341
- | **Asset Publishing** | Share your Genes and Capsules with the network |
342
-
343
- ### How It Works
344
-
345
- When `evolver --loop` is running with Hub configured:
346
-
347
- 1. On startup, evolver sends a `hello` message to register with the Hub.
348
- 2. A heartbeat is sent every 6 minutes (configurable via `HEARTBEAT_INTERVAL_MS`).
349
- 3. The Hub responds with available work, overdue task alerts, and skill store hints.
350
- 4. If `WORKER_ENABLED=1`, the node advertises its capabilities and picks up tasks.
351
-
352
- Without Hub configuration, evolver runs fully offline -- all core evolution features work locally.
353
-
354
- ## Worker Pool (EvoMap Network)
355
-
356
- When `WORKER_ENABLED=1`, this node participates as a worker in the [EvoMap network](https://evomap.ai). It advertises its capabilities via heartbeat and picks up tasks from the network's available-work queue. Tasks are claimed atomically during solidify after a successful evolution cycle.
357
-
358
- | Variable | Default | Description |
359
- |----------|---------|-------------|
360
- | `WORKER_ENABLED` | _(unset)_ | Set to `1` to enable worker pool mode |
361
- | `WORKER_DOMAINS` | _(empty)_ | Comma-separated list of task domains this worker accepts (e.g. `repair,harden`) |
362
- | `WORKER_MAX_LOAD` | `5` | Advertised maximum concurrent task capacity for hub-side scheduling (not a locally enforced concurrency limit) |
363
-
364
- ```bash
365
- WORKER_ENABLED=1 WORKER_DOMAINS=repair,harden WORKER_MAX_LOAD=3 evolver --loop
366
- ```
367
-
368
- ### WORKER_ENABLED vs. the Website Toggle
369
-
370
- The [evomap.ai](https://evomap.ai) dashboard has a "Worker" toggle on the node detail page. Here is how the two relate:
371
-
372
- | Control | Scope | What It Does |
373
- | :--- | :--- | :--- |
374
- | `WORKER_ENABLED=1` (env var) | **Local** | Tells your local evolver daemon to include worker metadata in heartbeats and accept tasks |
375
- | Website toggle | **Hub-side** | Tells the Hub whether to dispatch tasks to this node |
376
-
377
- **Both must be enabled** for your node to receive and execute tasks. If either side is off, the node will not pick up work from the network. The recommended flow:
378
-
379
- 1. Set `WORKER_ENABLED=1` in your `.env` and start `evolver --loop`.
380
- 2. Go to [evomap.ai](https://evomap.ai), find your node, and turn on the Worker toggle.
381
-
382
- ## GEP Protocol (Auditable Evolution)
383
-
384
- This repo includes a protocol-constrained prompt mode based on [GEP (Genome Evolution Protocol)](https://evomap.ai/wiki).
385
-
386
- - **Structured runtime assets** live in `<workspace>/.evolver/gep/` by default:
387
- - `<workspace>/.evolver/gep/genes.json`
388
- - `<workspace>/.evolver/gep/capsules.json`
389
- - `<workspace>/.evolver/gep/events.jsonl`
390
- - Set `GEP_ASSETS_DIR` to place the runtime asset store elsewhere.
391
- - **Selector** logic uses extracted signals to prefer existing Genes/Capsules and emits a JSON selector decision in the prompt.
392
- - **Constraints**: Only the DNA emoji is allowed in documentation; all other emoji are disallowed.
393
-
394
- ### Your local asset store is never overwritten by upgrades
395
-
396
- `<workspace>/.evolver/gep/genes.json`, `<workspace>/.evolver/gep/capsules.json`, and `<workspace>/.evolver/gep/events.jsonl` are owned by your runtime and ignored by git. `assets/gep/` is reserved for bundled starter assets. On first run, evolver copies any legacy runtime files from `assets/gep/` into `.evolver/gep/` without deleting the originals, then seeds `genes.json` from the bundled starter genes only when no local `genes.json` exists.
397
-
398
- If you ran an older evolver version that wiped your local assets, pull back everything you Promoted or published to the Hub with a single command:
399
-
400
- ```bash
401
- A2A_HUB_URL=https://evomap.ai evolver sync --scope=all --export=backup.gepx
402
- ```
403
-
404
- This hits `/a2a/assets/purchased` (Promoted-to-you plus self-purchased) and `/a2a/assets/published-by-me` (your own drafts and published assets), re-materializes the full payloads into `genes.json` / `capsules.json`, and packs a portable `.gepx` bundle. Previously-purchased payloads re-fetch at zero cost.
405
-
406
- Purely local assets that were never uploaded to the Hub have no remote copy -- recover them from `.evolver/gep/`, from an older `assets/gep/` checkout, or from disk snapshots.
407
-
408
- ## Configuration & Decoupling
409
-
410
- Evolver is designed to be **environment-agnostic**.
411
-
412
- ### Core Environment Variables
413
-
414
- | Variable | Description | Default |
415
- | :--- | :--- | :--- |
416
- | `EVOLVE_STRATEGY` | Evolution strategy preset (`balanced` / `innovate` / `harden` / `repair-only`) | `balanced` |
417
- | `A2A_HUB_URL` | [EvoMap Hub](https://evomap.ai) URL | _(unset, offline mode)_ |
418
- | `A2A_NODE_ID` | Your node identity on the network | _(auto-generated from device fingerprint)_ |
419
- | `EVOMAP_HUB_IP_FAMILY` | Hub egress IP-family policy: `ipv4first` tries IPv4 first and falls back to dual-stack, `auto` uses dual-stack as the primary path, `ipv4-only` disables fallback | `ipv4first` |
420
- | `HEARTBEAT_INTERVAL_MS` | Hub heartbeat interval | `360000` (6 min) |
421
- | `MEMORY_DIR` | Memory files path | `./memory` |
422
- | `EVOLVE_REPORT_TOOL` | Tool name for reporting results | `message` |
423
-
424
- ### Local Overrides (Injection)
425
- You can inject local preferences (e.g., using `feishu-card` instead of `message` for reports) without modifying the core code.
426
-
427
- **Method 1: Environment Variables**
428
- Set `EVOLVE_REPORT_TOOL` in your `.env` file:
429
- ```bash
430
- EVOLVE_REPORT_TOOL=feishu-card
15
+ pnpm install && pnpm lint && pnpm typecheck && pnpm test && pnpm build
431
16
  ```
432
17
 
433
- **Method 2: Dynamic Detection**
434
- The script automatically detects if compatible local skills (like `skills/feishu-card`) exist in your workspace and upgrades its behavior accordingly.
435
-
436
- ### Validator Role (default ON)
437
-
438
- 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.
439
-
440
- | Variable | Default | Description |
441
- |----------|---------|-------------|
442
- | `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. |
443
- | `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | Interval between validator polls when running in `--loop` / `--mad-dog` mode. |
444
- | `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | Max tasks claimed per poll. |
445
- | `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | Timeout for the per-poll task fetch. |
446
-
447
- 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.
448
-
449
- To opt out permanently:
18
+ ## ATP manual commands
19
+ v2 restores the v1 consumer-side ATP loop without putting economic wire details into core. Authenticate once,
20
+ then place/list/verify orders through the public adapter:
450
21
 
451
22
  ```bash
452
- EVOLVER_VALIDATOR_ENABLED=0 evolver --loop
23
+ evolver login
24
+ evolver buy code_review,bug_fix --budget 10 --question "Review the latest patch"
25
+ evolver orders --role consumer --status settled --limit 5
26
+ evolver verify ord_xxx --action confirm
453
27
  ```
454
28
 
455
- ### Auto GitHub Issue Reporting
456
-
457
- 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.
458
-
459
- | Variable | Default | Description |
460
- |----------|---------|-------------|
461
- | `EVOLVER_AUTO_ISSUE` | `true` | Enable/disable auto issue reporting |
462
- | `EVOLVER_ISSUE_REPO` | `EvoMap/evolver` | Target GitHub repository (owner/repo) |
463
- | `EVOLVER_ISSUE_COOLDOWN_MS` | `86400000` (24h) | Cooldown period for the same error signature |
464
- | `EVOLVER_ISSUE_MIN_STREAK` | `5` | Minimum consecutive failure streak to trigger |
465
-
466
- Requires `GITHUB_TOKEN` (or `GH_TOKEN` / `GITHUB_PAT`) with `repo` scope. When no token is available, the feature is silently skipped.
467
-
468
- ## Security Model
469
-
470
- This section describes the execution boundaries and trust model of the Evolver.
471
-
472
- ### What Executes and What Does Not
473
-
474
- | Component | Behavior | Executes Shell Commands? |
475
- | :--- | :--- | :--- |
476
- | `src/evolve.js` | Reads logs, selects genes, builds prompts, writes artifacts | Read-only git/process queries only |
477
- | `src/gep/prompt.js` | Assembles the GEP protocol prompt string | No (pure text generation) |
478
- | `src/gep/selector.js` | Scores and selects Genes/Capsules by signal matching | No (pure logic) |
479
- | `src/gep/solidify.js` | Validates patches via Gene `validation` commands | Yes (see below) |
480
- | `index.js` (loop recovery) | Prints `sessions_spawn(...)` text to stdout on crash | No (text output only; execution depends on host runtime) |
481
-
482
- ### Gene Validation Command Safety
483
-
484
- `solidify.js` executes commands listed in a Gene's `validation` array. To prevent arbitrary command execution, all validation commands are gated by a safety check (`isValidationCommandAllowed`):
485
-
486
- 1. **Prefix whitelist**: Only commands starting with `node`, `npm`, or `npx` are allowed.
487
- 2. **No command substitution**: Backticks and `$(...)` are rejected anywhere in the command string.
488
- 3. **No shell operators**: After stripping quoted content, `;`, `&`, `|`, `>`, `<` are rejected.
489
- 4. **Timeout**: Each command is limited to 180 seconds.
490
- 5. **Scoped execution**: Commands run with `cwd` set to the repository root.
491
-
492
- ### A2A External Asset Ingestion
493
-
494
- External Gene/Capsule assets ingested via `scripts/a2a_ingest.js` are staged in an isolated candidate zone. Promotion to local stores (`scripts/a2a_promote.js`) requires:
495
-
496
- 1. Explicit `--validated` flag (operator must verify the asset first).
497
- 2. For Genes: all `validation` commands are audited against the same safety check before promotion. Unsafe commands cause the promotion to be rejected.
498
- 3. Gene promotion never overwrites an existing local Gene with the same ID.
499
-
500
- ### `sessions_spawn` Output
501
-
502
- The `sessions_spawn(...)` strings in `index.js` and `evolve.js` are **text output to stdout**, not direct function calls. Whether they are interpreted depends on the host runtime (e.g., OpenClaw platform). The evolver itself does not invoke `sessions_spawn` as executable code.
503
-
504
- ## Versioning (SemVer)
505
-
506
- MAJOR.MINOR.PATCH
507
-
508
- - MAJOR: incompatible changes
509
- - MINOR: backward-compatible features
510
- - PATCH: backward-compatible bug fixes
511
-
512
- ## Changelog
513
-
514
- See the full release history on [GitHub Releases](https://github.com/EvoMap/evolver/releases).
515
-
516
- ## FAQ
517
-
518
- **Does this edit code automatically?**
519
- No. Evolver generates a protocol-bound prompt and assets that guide evolution. It does not modify your source code directly. See [What Evolver Does (and Does Not Do)](#what-evolver-does-and-does-not-do).
520
-
521
- **I ran `evolver --loop` but it just keeps printing text. Is it working?**
522
- Yes. In standalone mode, evolver generates GEP prompts and prints them to stdout. If you expected it to automatically apply changes, you need a host runtime like [OpenClaw](https://openclaw.com) that interprets the output. Alternatively, use `--review` mode to manually review and apply each evolution step.
523
-
524
- **Do I need to connect to EvoMap Hub?**
525
- No. All core evolution features work offline. Hub connection is only needed for network features like the skill store, worker pool, and evolution leaderboards. See [Connecting to EvoMap Hub](#connecting-to-evomap-hub).
526
-
527
- **Do I need to use all GEP assets?**
528
- No. You can start with default Genes and extend over time.
529
-
530
- **Is this safe in production?**
531
- Use review mode and validation steps. Treat it as a safety-focused evolution tool, not a live patcher. See [Security Model](#security-model).
532
-
533
- **Where should I clone this repo?**
534
- Clone it into any directory you like. If you use [OpenClaw](https://openclaw.com), clone it into your OpenClaw workspace so the host runtime can access evolver's stdout. For standalone use, any location works.
535
-
536
- ## Roadmap
537
-
538
- Directional, not commitments — the live backlog lives in [GitHub Issues](https://github.com/EvoMap/evolver/issues).
539
-
540
- - **Onboarding**: a one-minute quickstart demo and a comparison table vs. alternative agent-evolution approaches.
541
- - **Deeper GEP integration**: richer signal extraction and Gene / Capsule selection, plus reuse analytics.
542
- - **Memory & skills**: faster distillation of session outcomes into reusable Genes and Capsules.
543
- - **Broader runtime coverage**: more first-class host integrations beyond Cursor / Claude Code / Codex / Kiro / opencode / OpenClaw.
544
-
545
- ## Star History
546
-
547
- [![Star History Chart](https://api.star-history.com/svg?repos=EvoMap/evolver&type=Date)](https://star-history.com/#EvoMap/evolver&Date)
548
-
549
- ## Acknowledgments
550
-
551
- - [onthebigtree](https://github.com/onthebigtree) -- Inspired the creation of evomap evolution network. Fixed three runtime and logic bugs (PR [#25](https://github.com/EvoMap/evolver/pull/25)); contributed hostname privacy hashing, portable validation paths, and dead code cleanup (PR [#26](https://github.com/EvoMap/evolver/pull/26)).
552
- - [lichunr](https://github.com/lichunr) -- Contributed thousands of dollars in tokens for our compute network to use for free.
553
- - [shinjiyu](https://github.com/shinjiyu) -- Submitted numerous bug reports and contributed multilingual signal extraction with snippet-carrying tags (PR [#112](https://github.com/EvoMap/evolver/pull/112)).
554
- - [voidborne-d](https://github.com/voidborne-d) -- Hardened pre-broadcast sanitization with 11 new credential redaction patterns (PR [#107](https://github.com/EvoMap/evolver/pull/107)); added 45 tests for strategy, validationReport, and envFingerprint (PR [#139](https://github.com/EvoMap/evolver/pull/139)).
555
- - [blackdogcat](https://github.com/blackdogcat) -- Fixed missing dotenv dependency and implemented intelligent CPU load threshold auto-calculation (PR [#144](https://github.com/EvoMap/evolver/pull/144)).
556
- - [LKCY33](https://github.com/LKCY33) -- Fixed .env loading path and directory permissions (PR [#21](https://github.com/EvoMap/evolver/pull/21)).
557
- - [hendrixAIDev](https://github.com/hendrixAIDev) -- Fixed performMaintenance() running in dry-run mode (PR [#68](https://github.com/EvoMap/evolver/pull/68)).
558
- - [toller892](https://github.com/toller892) -- Independently identified and reported the events.jsonl forbidden_paths bug (PR [#149](https://github.com/EvoMap/evolver/pull/149)).
559
- - [WeZZard](https://github.com/WeZZard) -- Added A2A_NODE_ID setup guide to SKILL.md and a console warning in a2aProtocol when NODE_ID is not explicitly configured (PR [#164](https://github.com/EvoMap/evolver/pull/164)).
560
- - [Golden-Koi](https://github.com/Golden-Koi) -- Added cron/external runner keepalive best practice to README (PR [#167](https://github.com/EvoMap/evolver/pull/167)).
561
- - [upbit](https://github.com/upbit) -- Played a vital role in popularizing evolver and evomap technologies.
562
- - [Chi Jianqiang](https://mowen.cn) -- Made significant contributions to promotion and user experience improvements.
563
-
564
- ## License
565
-
566
- [GPL-3.0-or-later](https://opensource.org/licenses/GPL-3.0)
567
-
568
- > Core evolution engine modules are distributed in obfuscated form to protect intellectual property. Source: [EvoMap/evolver](https://github.com/EvoMap/evolver).
569
-
570
- ## Download History
29
+ `EVOMAP_NODE_ID` is optional for `buy`, but recommended for query commands that filter by node. `EVOMAP_NODE_SECRET`
30
+ keeps legacy auth working; otherwise the CLI uses the OAuth token from `evolver login`. Auto-spend consent is explicit:
31
+ `evolver atp status|enable|disable` records the ack file, and defaults to OFF when unset.
571
32
 
572
- Evolver ships through three channels the [npm package](https://www.npmjs.com/package/@evomap/evolver), prebuilt binaries on [GitHub Releases](https://github.com/EvoMap/evolver/releases), and the [ClawHub](https://skill-history.com/autogame-17/evolver) skill registry:
33
+ Hub egress defaults to `EVOMAP_HUB_IP_FAMILY=ipv4first`: Hub calls try IPv4 first to avoid VPN/TUN setups leaking
34
+ over local IPv6 and tripping Cloudflare country/ASN rules, then fall back to dual-stack if IPv4 cannot connect. Set
35
+ `EVOMAP_HUB_IP_FAMILY=auto` to restore dual-stack as the primary path, or `ipv4-only` to disable fallback.
573
36
 
574
- [![npm](https://img.shields.io/npm/dm/@evomap/evolver?logo=npm&label=npm)](https://www.npmjs.com/package/@evomap/evolver)
575
- [![npm total](https://img.shields.io/npm/d18m/@evomap/evolver?logo=npm&label=npm%20total)](https://npm-stat.com/charts.html?package=@evomap/evolver)
576
- [![GitHub releases](https://img.shields.io/github/downloads/EvoMap/evolver/total?logo=github&label=GitHub%20releases)](https://github.com/EvoMap/evolver/releases)
37
+ ## Prerequisites(批注#30)
38
+ Evolver v2 期望 Agent 至少有 **Sonnet / GPT-4o-mini 同等归纳能力**——v2 不再为低配 LLM 包揽信号提取等职责(那是 v1 的负担,收益甚微)。
577
39
 
578
- [![ClawHub download history](https://skill-history.com/chart/autogame-17/evolver.svg)](https://skill-history.com/autogame-17/evolver)
40
+ ## Abstract(批注#36)
41
+ 进化的本质 = **与外界环境交互得到反馈,从反馈中筛选有效的经验信号**。
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { runLlmProxyCli } from '@evomap/evolver-proxy/bin/evolver-llm-proxy';
3
+ runLlmProxyCli();
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '@evomap/evolver-mcp/stdio';
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { runProxyCli } from '@evomap/evolver-proxy/bin/evolver-proxy';
3
+ runProxyCli();
package/bin/evolver.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { dispatch } from '@evomap/evolver-cli/dispatch';
3
+ const fail = (err) => { process.stderr.write(`${err instanceof Error ? err.message : String(err)}\n`); process.exit(1); };
4
+ Promise.resolve(dispatch(process.argv.slice(2))).then((code) => process.exit(code)).catch(fail);