Releases: CodeAbra/iai-personal-memory-engine
Releases · CodeAbra/iai-personal-memory-engine
v1.1.7
Added
scripts/install-linux.sh— a one-shot Fedora / RHEL / Debian setup helper: prerequisite checks (Python ≥3.11, Rust, Node ≥18), venv creation, editable install, MCP-wrapper build, crypto-key init, and systemd user-service install. Idempotent and safe to re-run. Thanks to @MoppelMat.
Fixed
- Dropped two ineffective directives (
StartLimitIntervalSec,StartLimitBurst) from the systemd unit's[Service]section — systemd only honors those keys in[Unit], so in[Service]they had no effect and emitted a warning on modern systemd. Thanks to @MoppelMat.
v1.1.6
Fixed
-
Daemon memory and CPU under sustained load. On large stores the background daemon's warm state and nightly consolidation could climb in resident memory and spin the CPU. This release:
- isolates the runtime-graph rebuild in a spawn-context worker,
- computes graph centrality with a bounded sampled estimator (no exact in-process betweenness at scale),
- streams record reads instead of materializing the whole corpus,
- drains the deferred-capture backlog in two phases (insert first, embed later) with self-limiting safety rails,
- grades the memory watchdog against the kernel's physical-footprint metric rather than raw resident set.
Warm memory now stays well under the cap and the consolidation CPU storm is gone. No changes to the public API, CLI, MCP tools, or on-disk store format.
v1.1.5
Security
- Deferred-embed pending rows are now encrypted at rest. On an encrypted store, a record awaiting background embedding briefly held its text (
literal_surface) and provenance in plaintext during the embed window. Pending rows are now encrypted on write and decrypted just before embedding, matching the rest of the at-rest encryption. Unencrypted stores are unaffected.
Fixed
- Sleep daemon WAKE/idle CPU storm — the consolidation cycle could spin the CPU and never settle; the daemon now serves recall on wake. Thanks to @Marsu6996 (#20).
- Consolidation & recall correctness — tombstoned records excluded from the runtime graph, crisis-mode topology built on the live graph, recall score clamp, reflection-embedding + crash recovery hardened — closing the root causes behind the crisis-mode loop. Thanks to @Marsu6996 (#22).
v1.1.4
Fixed
migrate --reembed-from-textrepaired nothing on bulk-loaded stores. The version added in v1.1.3 fetched each record through a path that returned nothing on stores populated in bulk, so it re-embedded zero records and exited reporting success — a silent no-op. It now reads records directly, actually re-embeds from the stored text, and is resumable with bounded memory use.
If you ran the migration on v1.1.3, run it again on v1.1.4 — your vectors were not repaired:
iai-mcp migrate --reembed-from-text
Throughput is embedder-bound (no batch speedup yet), so a large store takes a while; the run is resumable and reports progress.
v1.1.3
Fixed
- Ambient capture embedded the cue label instead of the message. The session-capture path embedded a positional provenance label (
"session <id> turn <n>") rather than the message content, so stored vectors collapsed and semantic recall degraded on any store built through the session hook. Capture now embeds the message content; the stored text (literal_surface) was never affected. Runiai-mcp migrate --reembed-from-textonce after upgrading to repair vectors written before this fix. Thanks to @Marsu6996 for the report and fix. - Data loss under parallel transcript imports.
write_deferred_captureswrote in place to the final filename, so a concurrent drain could read a half-written file and quarantine it as permanently failed. Writes are now atomic. Thanks to @gardinermichael for the report. - Sleep daemon could stall in crisis mode. Interrupted consolidation steps now record the underlying error instead of a bare deferred marker; recall degrades honestly instead of serving stale schema-dominated results while a cycle is stuck; and crisis mode auto-clears after 72 hours. A watchdog now emits an alert when the sleep cycle stops completing.
Added
iai-mcp migrate --reembed-from-text— re-embeds existing episodic records from their stored text to repair vectors written before the capture fix above. Idempotent; supports--dry-run,--resume,--rollback,--reembed-batch-size.iai-mcp migrate --salvage-torn-permanent-failed— recovers complete records from torn capture files.iai-mcp deferred-unlock-dead-pids— releases deferred-capture files left locked by a process that is no longer running.
Upgrading: after updating, run iai-mcp migrate --reembed-from-text once to repair recall vectors on existing stores.
v1.1.2
Fixed
- macOS Keychain credentials for nightly consolidation. When
claude /login
stores OAuth credentials in the macOS login Keychain instead of
~/.claude/.credentials.json(the file is absent on a normal desktop-app
setup), the subscription check now falls back to the Keychain item, so the
nightlyclaude -ppath is found. AddedIAI_MCP_CLAUDE_BARE=0to drop the
--bareflag for setups whereclaude --bare -preports "Not logged in"
while plainclaude -pauthenticates. Default behavior unchanged.
v1.1.1
Fixed
- Linux runtime fixes for the experimental Linux path: daemon binder detection
gains anssfallback, ANN query distances are clamped to a valid range, and
the multiprocess store path no longer races on table visibility. Linux remains
experimental and unvalidated end-to-end — testing and port feedback are welcome.
Changed
- Internal cleanup only — no changes to the public API, the
iai-mcp/iai
CLI, the MCP tool set, or the on-disk store format: the sleep-pipeline
compatibility shim was removed in favour of the canonical module, sleep-step
names were made consistent, and more wall-clock benches are gated out of the
default test run.
v1.1.0
Added
- Experimental Linux support. The native engine now builds on Linux (the
Rust extension no longer hard-depends on a macOS-only acceleration backend),
the daemon installs as a systemd user service, and the capture/recall hooks
run on POSIX shells.scripts/install.shhandles the Linux path and the
README documents the extra build prerequisites. Validated on macOS; Linux is
code-complete but not yet validated end-to-end — testing and port feedback
are welcome.
Changed
- Source restructured into focused packages. The largest modules —
cli,
store,daemon,hippo,doctor,migrate, andcore— are now packages
with concern-grouped sub-modules instead of single large files. The public API,
theiai-mcp/iaiCLI surface, the MCP tool set, and the on-disk store
format are unchanged; this is an internal reorganization that makes the storage,
daemon, community-detection, and migration layers easier to read and navigate. - Background daemon and graph-cache rebuild paths gained additional
resource-isolation and reliability hardening.
v1.0.3
Fixed
- MCP
tools/listno longer stalls ~5s when the daemon is down — the wrapper connects the MCP transport first and wakes the daemon in the background. scripts/install.sh(and the other shell scripts) ship executable;./scripts/install.shworks directly.- Wrapper test runner no longer hangs after the suite (reconnect socket/timer unref'd).
- More deterministic store teardown (store↔database reference cycle broken).
- Tests that need the optional LongMemEval dataset or a built native extension now skip cleanly when those are absent.
Added
- Full-transcript session capture (per-session turn ceiling raised to 100 000).
iai-mcp migrate --rederive-timestamps— repairs legacy records whose timestamps collapsed to a single import time.- Doctor check for time-collapsed episodic sessions + a daemon boot audit event when the doctor respawned it.
- Typed stubs for the native extension (
iai_mcp_native.pyi) in the wheel.
Changed
- launchd: always-on activation (
RunAtLoad=true, restart on crash) replaces socket activation — the daemon starts at login and is immediately available.
Removed
- The experimental summary-compression module and the
[compress]extra (transparent passthrough fallback; drops a ~2.3 GB optional model download).
v1.0.2
Fixed
- Packaging: launchd plist, systemd unit, and capture/recall hooks now ship inside the wheel (
iai_mcp/_deploy/) and resolve viaimportlib.resources—iai-mcp daemon installand hook setup no longer fail on a cleanpip install. - Python/CLI path resolution: server config and hooks use the running interpreter (
sys.executable) and resolve the CLI viaPATH, so installs under pyenv / non-default layouts work.