Skip to content

Releases: dxn111/EVOLV

v0.30.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 00:12
9874fa5

v0.30.0 — the mind gets a playbook, the pipeline gets a gate

This release gives the organism an explicit operating loop, a discoverable skill library, and a CI pipeline that refuses to ship unverified code.

System prompt + skills

  • The base prompt is now an operating manual: frame → plan → inspect → mutate → verify → report, with a definition of done, failure recovery, and a decision guide for picking the right action.
  • Action signatures are accurate (move {from,to}, edit_file hash requirement, complete_task.files, promote_candidate confirm, stage_candidate hash pinning).
  • Skills are discovered through a compact trigger index (bounded, profile-filtered); the full playbook is read only when it matches. Seven seeded skills ship with new and existing genomes: systematic-debugging, test-driven-change, self-evolution-playbook, frontend-craft, repo-cartography, secure-by-default, workspace-steward.

Bugs fixed

  • move {"from": ...} works (the kernel only read path before).
  • complete_task {"files": ["a.go"]} no longer fails JSON decoding; both path lists and mutation objects are accepted.
  • delete_file with an empty path can no longer wipe the organism; organism root, source root, launcher, home and filesystem roots are refused for delete/move.
  • Plugin reload and re-evolve now retire old sandboxes instead of leaking timers and handlers.
  • evolve_tool reports JavaScript compile failures instead of claiming success and leaving a stale tool callable.
  • Typed tool-schema validation is deterministic (was map-order random).
  • promote_candidate requires explicit confirm:true; staging and testing do not.
  • The heartbeat loop is stoppable and waits for an in-flight dream, fixing a race in test teardown.

Release engineering

  • New CI workflow: gofmt, go vet, full tests, race detector on the core packages, and cross-builds for Linux/macOS/Windows.
  • Release builds now use go.mod's Go version (the old workflow pinned Go 1.24 against a 1.26 module), run the test suite before publishing, validate the version, and support manual dispatch.
  • make check runs the same gate locally.

Verified

  • make check green; go test -race ./internal/agent ./internal/server ./internal/workspace green.
  • Shuffled full suite green across repeated runs.
  • Published Linux binary reports evolv 0.30.0.

PR: #16
Full changelog: v0.29.0...v0.30.0

Binaries: Linux (amd64/arm64), macOS (amd64/arm64), Windows (amd64/arm64).

v0.29.0 — project-wide search

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 04:08

⌕ Search the whole project from the Workbench

  • New search box in the Workbench sidebar: type → live results from every text file under the project root
  • Case-insensitive, skip-list respected (.git, node_modules, vendor, …), files > 1 MB skipped, capped at 200 hits with a clear "showing first 200" hint
  • Click a result → the file opens with the caret exactly on the match line, the match selected and the editor scrolled there
  • New /api/wb/search endpoint + test

Verified live: 14/14 browser E2E (full workbench round-trip + search + jump-to-line + loop guard). go build + go vet + go test green across internal/...

Full Changelog: v0.28.0...v0.29.0

v0.28.0 — THE WORKBENCH (+ recompile loop fix)

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 04:06

🛠 The Workbench — a real dev environment for your project

The genome inspector edits the organism's own body. The Workbench opens your bound project (config.project_dir, or organism home when unbound):

  • Lazy file tree — type icons, file sizes, per-directory expand, skip-list (.git, node_modules, vendor, …), dirs-first sorting
  • In-place editor — open any text file, edit, ctrl+s writes straight to disk, dirty indicator, line/size statusbar, tab-indent
  • Full CRUD — new file, new dir, rename/move, delete — all with sensible confirmations
  • Live — the tree refreshes when anything else touches the project (the organism's own mutations included); the organism FEELS every workbench save via fs:change
  • Hardened fs API (/api/wb/{root,tree,read,write,mkdir,delete,rename}): path + symlink escape protection, 512 KB read / 1 MB write caps, binary files refused politely (415), root delete/move refused, rename clobber refused (409)

🔧 FIXED: the "recompiling shell" loop

A storm of shell-reload events (post-update seeding, dream bursts that rewrite the shell, genome rollbacks) could bounce the page on the recompile overlay forever. A sessionStorage loop guard now reloads exactly once per storm — one morph, one reload.

Verification

  • 8 new server tests (tree/CRUD/escape/caps/binary/rename-clobber)
  • Verified live: 12/12 browser E2E — open → tree → edit → ctrl+s → disk → rename → delete round-trip on a real bound project
  • go build + go vet + go test green across internal/...

Full Changelog: v0.27.0...v0.28.0

v0.27.0 — plugins run in cages now

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:42

Plugin permission isolation (route D: security)

  • evolve_plugin accepts explicit perms: perms:["http","fs","toast"] — a plugin gets exactly the capabilities its manifest grants, nothing more.
  • Denied calls throw a catchable error naming the missing capability: plugin "x" lacks permission "http" — re-evolve it with perms:["http"] — the plugin survives (try/catch works) and the error teaches the fix.
  • Perms persist in plugin.json and are restored on every reload — a restart never widens a plugin's powers.
  • log / on / every stay core (always available, no perm needed).
  • 4 new tests: denial matrix (http/fs/toast), grant path, manifest persist + reload round-trip, core-always-allowed. Full suite + -race green.

go build + go vet + go test + go test -race green across internal/...

Full Changelog: v0.26.0...v0.27.0

v0.26.0 — tools grow type systems

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:38

Typed tool manifests (route D: a real tools ecosystem)

  • evolve_tool now accepts a typed contract: schema: {param: "number"|"string"|"boolean"|"object"|"array"|"any"}.
  • Versioned manifests: workspace/tools/<name>.json — name, version (auto-increments on re-evolve), description, schema, updated timestamp; written atomically.
  • run_tool enforces the contract before the code runs: bad calls fail with a precise type error (arg "a" must be number, got string, missing required arg "b") instead of a JS stack trace.
  • New list_tools action: full introspection — every grown tool with name, description, version and schema.
  • Manifest-less legacy tools keep working unchanged (back-compat).
  • 5 new tests: manifest persistence + version bump, validation matrix (valid / wrong type / missing / nil args), back-compat, introspection, bad-schema rejection.

go build + go vet + go test green across internal/...

Full Changelog: v0.25.1...v0.26.0

v0.25.1 — the demo brain works its plan the new way

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:33

Demo brain drives plan_advance

  • The mock planner demo now walks declare → plan_advance → plan_advance×2 — one call = one step of progress — instead of re-sending the whole set_plan every turn.
  • Scenario test rewritten to assert exact advance-block counts per stage.
  • Verified live: 9/9 browser E2E — boot from plan.json at 1/4, then the sidebar checklist marches 2/4 → 3/4 → 4/4 over real WebSocket plan events, statuses correct at every step.

go build + go vet + go test green across internal/...

Full Changelog: v0.25.0...v0.25.1

v0.25.0 — the agent works its own plan

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:31

The agent works its own plan

  • plan_advance action — one call = one step of progress: marks the current step done (by index or the running doing step) and pulls the next todo into doing. The brain loops through multi-step work without re-sending the whole plan.
  • Plan in the brain — the declared plan is injected into the system prompt every turn (## CURRENT PLAN with [x]/[~]/[ ] markers), so the model always knows where it is in its own work — not just the UI.
  • Plan helpers factored (publishPlan / countDone / hasDoing), plan bus event normalized for both actions.
  • 4 new tests: advance chain, index advance, bogus rejection (no plan / no doing / out-of-range index), prompt injection follows advances.

go build + go vet + go test green across internal/...

Full Changelog: v0.24.0...v0.25.0

v0.24.0 — The Agent Keeps a Plan

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:21

the agent keeps a plan (v0.24.0)

First slice of the P0 planner from the master plan: the agent is no longer reactive-only — it now declares, advances and persists multi-step task state.

set_plan action

  • The agent can emit {"action":"set_plan","title":"...","steps":[{"title":"...","status":"done|doing|todo"}]} at any point in a turn.
  • Statuses are normalized (anything unknown becomes todo), blank steps are dropped, and the kernel answers with a plan updated: N/M steps done receipt the model can reason over.

Persistent task state

  • Plans are written atomically (temp + rename) to workspace/plan.json — a mission interrupted by a restart picks its checklist back up on boot.
  • Served at /api/plan, broadcast live on the plan bus topic.

Live Plan panel

  • New sidebar section with a progress counter (1/4) and ☑ done / ◐ doing / ○ todo per step, strikethrough on completion.
  • Boot-restored from plan.json on every page load; advances in real time as the agent updates its plan mid-conversation.

Demo brain

  • Ask the mock provider to "make a plan" and it walks declare → progress → done across turns, so you can watch the checklist move.

Verified

  • 3 unit tests (persistence + normalization, empty-plan rejection, restart survival).
  • 5/5 live browser assertions: plan declared through the real chat pipeline renders 4 steps with correct status classes, then a second message advances the same plan live over WebSocket to 2/4.
  • go build ./... + go test ./internal/... green.

Authored by rotating contributor @pandanote-info.

Full Changelog: v0.22.0...v0.24.0

v0.22.0 — The Docs Evolve Too

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 02:13

the docs evolve too (v0.22.0)

Documentation is part of the organism now — generated from its own README, versioned with the code.

Single-page docs site, generated

  • internal/docsgen: a pragmatic markdown renderer in Go — extracts ## sections, renders headings / lists / tables / fenced code / bold / italic / inline code / links, all HTML-escaped (XSS-safe by construction), wrapped in an inline-styled dark page with a sticky table of contents. No JS, no external assets, one file.
  • cmd/evolv-docs: go run ./cmd/evolv-docs regenerates docs/index.html from the live README — 13 sections today, and every future README change is one command away from the site.
  • 3 unit tests cover section extraction, escaping (<script> stays escaped), table th/td rendering, anchor slugs and page well-formedness.

Installer: know before you pipe

  • install.sh --version / -h — the installer now tells you what it is and resolves the real latest release tag from GitHub before you pipe a script into sh (verified live: prints latest release: v0.21.0).
  • EVOLV_VERSION=vX.Y.Z pinning documented in --help.

Engineering master plan

  • docs/EVOLV-24H-MASTERPLAN.md — a full repository audit (verified capabilities vs. weak spots: plugin isolation, workspace portability, skill lifecycle, agent planning), scored strategic priorities (agent task-planner + candidate-build self-evolution = P0), roadmaps A–E, the security backlog (S1–S4: shell allowlist, plugin permission tiers, installer checksums, credential redaction) and the QA gate every release must pass.

Verification

  • go vet ./... clean on the new packages, go build ./... + go test ./internal/... green (agent 9.9s suite included), bash -n + live --version run on the installer.

*Commits this release authored by rotating contributors: kato0 (master plan), Yash410 (docs generator), AmaanZaidi101 (release).

Full Changelog: v0.21.0...v0.22.0

v0.21.0 — Fast While It Sleeps

Choose a tag to compare

@dxn111 dxn111 released this 01 Nov 01:17

fast while it sleeps (performance release)

Organisms that mutate all night need a UI that keeps up. v0.21.0 is a pure performance pass — no new organs, just muscle.

Virtualized evolution ledger

  • The sidebar's mutation stream used to grow one DOM node per mutation, forever — after a long autonomous run (dreams every few minutes, all night) that's thousands of nodes, and the shell drags.
  • Now the DOM holds only the newest 200 entries. Everything older stays in memory, behind a ⏵ show 100 older mutations — N hidden pager at the bottom of the list. Click until you hit bedrock.
  • Dream runs keep their 🌙 dividers across paging; the newest mutation is still pinned to the top; live mutations still stamp their clock at ingestion (no timestamp drift on re-render).
  • The server now serves up to 500 ledger entries per request, so paging has real depth without dumping the whole JSONL on the client.

rAF-batched streaming markdown

  • Every streaming token used to trigger a full markdown parse + innerHTML rebuild of the whole message — dozens of full rebuilds per second on long turns, all O(n²) as the message grows.
  • Token bursts now coalesce: onToken marks dirty and schedules exactly one render per animation frame via requestAnimationFrame. The final synchronous render in finishAssistant() guarantees nothing is lost.

Verified live

  • 9/9 headless-browser assertions on a seeded 305-entry ledger: cap at 200, newest-at-top order, dream-run divider placement, pager counts (105 → 5 → 0 hidden), reveal-to-bedrock, and an 81-token burst rendered losslessly in one batched frame.
  • go build ./... + go test ./internal/... green.

Full changelog: v0.19.5 genome inspector upgrade → v0.20.0 dreams that write their own code → v0.21.0 fast while it sleeps.

Full Changelog: v0.20.0...v0.21.0