Skip to content

Releases: EvoMap/evolver

v1.32.2

17 Mar 16:52

Choose a tag to compare

v1.32.2

Fixes

  • Hub node secret cache TTL: Added TTL-based expiration to the hub node secret cache, preventing stale 403 errors when secrets rotate (#258)
  • completeDistillation state variable: Fixed unnecessary variable rename (state2 -> state) in completeDistillation

Improvements

  • Error logging in silent catches: Added console.warn to previously silent catch {} blocks in a2aProtocol.js (transport/heartbeat paths) and assetStore.js (file I/O operations), improving debuggability without changing behavior
  • var -> const/let migration: Migrated all var declarations to const/let in skillDistiller.js for modern JavaScript standards

Files changed

  • src/gep/a2aProtocol.js -- error logging in 4 catch blocks
  • src/gep/assetStore.js -- error logging in 8 catch blocks
  • src/gep/skillDistiller.js -- full var -> const/let migration
  • src/gep/learningSignals.js -- minor fix

v1.32.0

17 Mar 01:00

Choose a tag to compare

What's New in v1.32.0

Improvements

  • feat: structured learning signals -- expand raw signals into categorized tags (problem:X, area:X, action:X, risk:X) for better gene selection and evolution feedback
  • feat: adaptive strategy policy -- detect repair/failure streaks and auto-adjust blast radius and innovation pressure
  • feat: gene learning history -- track success/failure outcomes per gene with anti-pattern recording for smarter selection
  • feat: failure-driven candidate extraction -- group recurring failed capsules into improvement candidates
  • feat: auto-distillation -- synthesize new genes from successful patterns without requiring LLM interaction
  • feat: soft/hard failure classification in solidify -- distinguish retryable validation failures from destructive constraint breaches

Bug Fixes

  • fix: tool frequency threshold raised from 2 to 3 to reduce noise in candidate extraction

Other

  • chore: comprehensive test coverage for all new learning closure features (6 new test files)

Contributors

  • @firstdraft-work (PR #260) -- Strengthened the evolver learning closure with structured signals, adaptive policy, and auto-distillation

v1.31.0

16 Mar 15:04

Choose a tag to compare

What's New

Skill Store Fetch Command

  • New evolver fetch --skill <id> CLI command to download skills from the Skill Store
  • Supports -s <id>, --skill=<id>, --skill <id>, and positional argument
  • Auto-registers with Hub if no node_secret exists
  • Downloads SKILL.md + bundled files to ./skills/<skill_id>/ (customizable via --out=<dir>)
  • The npx @evomap/evolver fetch --skill <id> command shown on skill detail pages now works

Bug Fixes

  • writeStateForSolidify: ensure the correct directory (evolutionDir) exists before writing state file, preventing ENOENT on scoped or first runs
  • rejectPendingRun: use atomic tmp+rename write to prevent state file corruption on crash
  • EVOLVE_BRIDGE: respect pre-set environment variable in loop mode instead of unconditionally overwriting to false
  • selectedBy: remove duplicate declaration in solidify try-block
  • .env loading: use getRepoRoot() in index.js to match evolve.js path resolution
  • WORKSPACE_ROOT: use getWorkspaceRoot() from paths.js for consistent path resolution

Internal

  • Export getHubUrl from a2aProtocol.js
  • Remove stale .env rewrite rule from public.manifest.json
  • Sanitize skill_id in output path to prevent path traversal

v1.30.2

16 Mar 12:33

Choose a tag to compare

What's New in v1.30.2

Bug Fixes

  • fix: remove destructive git rollback from loop auto-reject (#257 by @firstdraft-work)
    • rejectPendingRun no longer runs git checkout -- . and git clean -fd, which could delete untracked work files during loop-mode auto-reject
    • State-only rejection is now used, preserving all working directory contents

Other

  • test: add loop-mode auto-reject test (test/loopMode.test.js)
  • refactor: export main, readJsonSafe, rejectPendingRun, isPendingSolidify from index.js for testability

v1.29.9

15 Mar 07:26

Choose a tag to compare

What's New in v1.29.9

Skill Distillation Quality Overhaul

Distilled skills now meet marketplace-quality standards. Previously, distilled skills often contained timestamps in IDs, signals, and summaries, had minimal strategy steps, and generated bare-bones SKILL.md content.

Distiller prompt:

  • Complete rewrite of the LLM prompt with explicit rules for signals_match (no timestamps/tool names), summary (marketplace-quality), strategy (5-10 concrete steps), and preconditions
  • Each rule section includes Good/Bad examples
  • Added QUALITY BAR section that frames output as a marketplace listing

Signal sanitization:

  • New sanitizeSignalsMatch() strips trailing timestamps, rejects pure-numeric signals, tool-name-only signals (cursor, vscode, bypass, distill, etc.), and signals with 8+ digit sequences
  • Signals are now sanitized BEFORE ID derivation (fixes bug where deriveDescriptiveId used dirty data)

Gene validation:

  • Strip ALL embedded timestamps from gene IDs (not just trailing)
  • Require minimum 3 strategy steps
  • Auto-set schema_version: "1.6.0"
  • Summary timestamps stripped before ID derivation

SKILL.md generation:

  • Title Case display names
  • Added "When to Use" and "Metadata" sections
  • Strategy steps render with bold leading verb
  • Constraints rendered with inline code formatting
  • No more duplicate sections
  • Gene object is shallow-copied to avoid caller mutation

Bug Fixes

  • fix: deriveDescriptiveId no longer reads dirty signals_match
  • fix: duplicate Preconditions / When to Use sections removed
  • fix: extractStepVerb handles backtick-prefixed steps gracefully
  • fix: publishSkillToHub no longer mutates caller's gene object

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