v1.84.2

EvoMap/evolverv1.84.2May 22, 2026by autogame-17

AI Summary

This release addresses critical fixes for Codex and Claude Code hook adapters, resolving recording failures and Windows path errors. It also implements significant security hardening measures to prevent symlink attacks and path redirection vulnerabilities.

Key Highlights

  • Fixed Codex `session-end` recording to work correctly with npm-global installs.
  • Resolved Windows path errors by replacing shell string redirects with argv-array `spawnSync`.
  • Hardened security against symlink attacks in adapter config directories.
  • Refused to trust `process.cwd()` when resolving the evolver root to prevent prompt injection.
  • Improved uninstall handling to remove all hook-related files and configuration.

New Features

  • Security hardening for adapter config paths and hook scripts.
  • Hook adapter fixes for Codex and Claude Code.
  • Enhanced uninstall logic for hook scripts.

Full Release Notes

## v1.84.2

Fixes for Codex / Claude Code hook adapters reported on the public
issue tracker (#536–#540), plus security hardening surfaced during
review.

### Hook adapter fixes

- **#536** Codex `session-end` no longer "records to nowhere" on
  npm-global installs. `_runtimePaths.js` is now copied alongside the
  hook scripts and resolves `@evomap/evolver` via system roots; falls
  back to `~/.evolver/memory/evolution/memory_graph.jsonl` if the
  evolver root is read-only.
- **#537** Codex `session-end` no longer prints `The system cannot
  find the path specified.` on Windows. `execSync` shell strings
  with POSIX `2>/dev/null` redirects are replaced with argv-array
  `spawnSync`, so cmd.exe never sees `/dev/null`.
- **#538** `evolver setup-hooks --uninstall` now removes everything
  it installs: hook scripts (including `_runtimePaths.js`), the
  evolution-memory section in `AGENTS.md` / `CLAUDE.md`, and
  `codex_hooks = true` plus the empty `[features]` block in
  `.codex/config.toml`. Uninstall also catches evolver-owned hook
  entries even when the `_evolver_managed` marker has been stripped.
- **#539** `evolver setup-hooks` no longer overwrites user-installed
  hooks under the same event. `mergeWithHooksUnion` keeps existing
  user `Stop` / `SessionStart` / `PostToolUse` entries and appends
  evolver entries alongside them.
- **#540** The review engine no longer hard-depends on repo-local
  `MEMORY.md` / `USER.md`. It first reads platform-supplied
  `additionalContext` / session_state, then falls back to
  evolver-managed `memory_graph.jsonl`, then to the markdown files.
  Codex's lack of session-log hooks is documented as a platform
  limitation (not an evolver bug).

### Security hardening

- Refuse to follow symlinks at adapter config dirs (`.codex`,
  `.claude`, `.cursor`, `.kiro`, `.opencode`) or at their nested
  `hooks/` and `plugins/` subdirs.
- Refuse to copy a hook script when the destination path is a
  pre-planted symlink (would otherwise let a hostile workspace
  redirect overwrites to arbitrary writable files).
- `findEvolverRoot()` no longer trusts `process.cwd()` when
  resolving `@evomap/evolver` — only system module roots are
  searched, so a workspace-controlled `node_modules/@evomap/evolver`
  cannot redirect the memory graph and inject prompt-injection
  content via `additionalContext`.
- Codex `cleanConfigToml` only drops the `[features]` header when
  the section is genuinely empty; user entries under `[features]`
  are preserved across uninstall.
- `evolver-session-end` `runGit` distinguishes "command failed"
  from "command succeeded with empty output", so an empty merge
  doesn't fall through to the working-tree diff and surface
  unrelated unstaged changes as a session outcome.

### Reviewed by

Cursor Bugbot agentic security review (7 rounds), final commit
`f32f709b75eeb0187780318a9a8a602a53214c4d`. 99 / 99 adapter tests
passing.