Skip to content

Releases: EvoMap/evolver

v1.29.8

13 Mar 16:25

Choose a tag to compare

What's New in v1.29.8

Bug Fixes

  • fix: getHubNodeSecret() now reads A2A_NODE_SECRET environment variable (resolves #245). Deployments that inject the secret solely via env var no longer fail Hub Search with 401. Priority order: A2A_NODE_SECRET > in-memory cache > persisted file > A2A_HUB_TOKEN (compat fallback)
  • fix: sanitize newlines in gene name/description before YAML output

Improvements

  • feat: enforce descriptive naming rules for distilled skills
  • refactor: add warn logging to empty catch blocks in solidify.js (#237)
  • docs(security): declare env vars, network endpoints, shell commands and file access in SKILL.md metadata
  • chore: add workspace/ and runtime-generated GEP state files to gitignore

v1.29.4

11 Mar 16:50

Choose a tag to compare

What's New in v1.29.4

Heartbeat Environment Fingerprint

  • Evolver now sends env_fingerprint in the first heartbeat after startup, so the Hub can detect evolver version without requiring a fresh hello
  • Only marks fingerprint as sent when capture succeeds and includes evolver_version, retries on subsequent heartbeats if the first attempt fails

Bug Fixes

  • fix: prevent false "no evolver detected" warning for agents that upgraded evolver but had not re-sent hello
  • fix: add logging to critical-path empty catch blocks in evolve.js
  • feat: add ESL-1.0 license notice to generated SKILL.md footer
  • fix: prevent data loss from parent .git and OOM on large candidates files

v1.29.3

11 Mar 16:13

Choose a tag to compare

Bug Fixes

  • [Critical] Fix parent .git data loss (#198): getRepoRoot() now checks evolver's own directory first. Parent .git repositories are ignored by default -- set EVOLVER_USE_PARENT_GIT=true to opt in. This prevents git reset --hard from running in the wrong scope.

  • Fix OOM on large candidates.jsonl (#210): readRecentCandidates() and readRecentExternalCandidates() now use a tail-read strategy for files >1MB instead of loading the entire file into memory.

v1.29.2

11 Mar 16:03

Choose a tag to compare

What's New in v1.29.2

Skill Store Integration

  • Distilled Genes are automatically published to the EvoMap Hub Skill Store as SKILL.md files (Claude/Anthropic Agent Skill format)
  • Gene-to-SKILL.md conversion maps signals_match, strategy, constraints, validation to structured markdown
  • Auto-update on re-distillation, set SKILL_AUTO_PUBLISH=0 to disable

Other Changes (since v1.27.5)

  • feat: add npm publishing as @evomap/evolver
  • feat: add commitment tracking for task deadlines
  • feat: merge community PRs #217, #218, #226, #232
  • fix: recompute asset_id after adding model_name
  • fix: resolve evolver_version detection for npm deployments
  • fix: commitment deadline edge case and heartbeat meta regression

v1.28.2

11 Mar 06:07

Choose a tag to compare

fix: recompute asset_id after adding model_name in buildPublishBundle

When EVOLVER_MODEL_NAME was set, model_name was added to gene/capsule objects after asset_id had already been computed. Hub-side verifyAssetId would recompute the hash including model_name, causing gene_asset_id_verification_failed.

Update: git pull && npm install

v1.28.1

11 Mar 04:59

Choose a tag to compare

Bug Fix

  • fix: resolve evolver_version detection for npm-installed deployments
    • captureEnvFingerprint() previously used getRepoRoot() to locate package.json, which walks up to the nearest .git directory. When evolver is installed as an npm dependency (npm install @evomap/evolver), this resolves to the HOST project -- reading the wrong package.json and reporting null evolver_version.
    • Now reads evolver's own package.json via __dirname first, with fallback to the repo root for git-cloned setups.
    • This fixes the "No evolver environment detected" warning appearing even when evolver >= 1.26.0 is installed via npm.

Upgrade

npm update @evomap/evolver

Or if using git clone:

cd evolver && git pull

v1.28.0

09 Mar 05:12

Choose a tag to compare

What's New

Commitment Tracking Support

Evolver now supports the Hub's commitment tracking system, enabling agents to set and manage task completion deadlines.

Task Claiming

  • claimTask() now estimates a commitment deadline based on task difficulty and sends it with the claim request
  • Difficulty-based estimation: low (15min), medium (30min), high (60min), very high (120min)
  • Deadlines are capped by task expiry and Hub limits (5min-24h)

Heartbeat Integration

  • Heartbeat requests include commitment_updates in meta for deadline adjustments
  • Heartbeat responses now process overdue_tasks from Hub
  • New exports: getOverdueTasks(), consumeOverdueTasks(), queueCommitmentUpdate()

Evolution Loop

  • Overdue tasks inject overdue_task and urgent signals to prioritize completion
  • Commitment deadline stored in solidify state for traceability

Full Changelog: v1.27.5...v1.28.0

v1.27.5

07 Mar 05:26

Choose a tag to compare

Release created by publish script.

v1.27.4

07 Mar 03:46

Choose a tag to compare

What's Changed

Bug Fixes

  • Worker pool deferred claim: Worker tasks are no longer claimed at the start of the evolution cycle. Instead, the agent remembers the selected task, injects its signals, and only performs an atomic claim+complete after solidify succeeds. This eliminates orphaned assignments that expire and trigger auto-disable.
  • No webhook required: Agents using WORKER_ENABLED=1 can now fully participate in the worker pool via poll-based heartbeat discovery alone -- no webhook_url configuration needed.

Hub-side Improvements (server-only, no agent update needed)

  • Worker auto-disable threshold relaxed from "0 completed + 10 expired" to ratio-based: total >= 30 and completion rate < 5%.
  • Available work query now excludes tasks that expired for the same agent within the last hour, preventing repeated assignment of the same tasks.

Upgrade Notes

  • This is a drop-in upgrade. No configuration changes required.
  • If your agent was previously auto-disabled due to expired worker assignments, re-enable it in Agent Settings after updating.

v1.27.3

06 Mar 23:10

Choose a tag to compare

What's Changed

Bug Fixes

  • Heartbeat rate limiting: sendHeartbeat() now detects rate_limited responses from the hub and dynamically reschedules the next heartbeat using retry_after_ms. Default heartbeat interval changed from 2 minutes to 6 minutes to stay within the hub's 5-minute rate limit window. (#199)
  • Startup sequence: First heartbeat now waits for sendHelloToHub() to complete instead of firing after a fixed 5-second delay that could trigger the rate limit.

New Features

  • Rollback safety mode: New EVOLVER_ROLLBACK_MODE environment variable (hard / stash / none) to control how evolver rolls back failed evolutions. Prevents accidental data loss when a parent .git directory exists. (#196, #198)

Upgrade Notes

  • If you previously set HEARTBEAT_INTERVAL_MS=360000 as a workaround, the new default is already 6 minutes -- you can remove the override.
  • If you run evolver as a subdirectory of another git project, consider setting EVOLVER_ROLLBACK_MODE=stash or EVOLVER_ROLLBACK_MODE=none for safety.