Skip to content

Releases: LuiggiVal08/toon-memory

v4.3.2: fix: archive/import header-format tolerance, absolute hook script paths

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 03 Aug 20:48

Fixed

  • memory_archive no-oped on CLI-initialized projectsarchiveOldEntries and pruneExpiredEntries only recognized the entries[N|] header written by the MCP config writer, but toon-memory init creates data.toon with a [N|] header. On those files both functions returned 0 silently, so memory_archive, the MAX_ENTRIES auto-trim, and TTL pruning never ran. They now accept both header conventions, and the count bump preserves the entries/archived prefix (the archive writer also used to strip archived from archive.toon, breaking subsequent runs).
  • Hook scripts referenced capture.js/session-start.js relative to the hook CWDconstants.ts derived the CLI directory from process.argv[1], which the entry points overwrite with "toon-memory", so generated hooks ran node "capture.js" ... resolved against whatever directory the agent executed the hook from. Script paths are now derived from import.meta.url and are absolute.
  • toon-memory import left the entry count stale — the header regex required a literal ] right after the count (entries[\d+\|]), which no real header has, so the count never updated after importing. It now matches both entries[N|] and [N|] headers and preserves the prefix.

Tests

  • archiveOldEntries works on [N|], entries[N|], and mixed files, and preserves the archived[ prefix across repeated runs
  • toon-memory init writes hook scripts with absolute paths; toon-memory import bumps the header count on a CLI-style [N|] file

v4.3.1

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 03 Aug 18:54

Fixes

  • Windows: ERR_UNSUPPORTED_ESM_URL_SCHEME crashtoon-memory (CLI and MCP mode) crashed on Windows because dynamic imports passed raw C:\... paths to import(). Entry points now convert paths via pathToFileURL (new shared helper src/cli/entry.ts), so it works again on Windows.
  • install.ps1 pinned an ancient release — the Windows installer hard-coded toon-memory@1.0.9 with a placeholder checksum, so it installed a version whose init wrote the legacy OpenCode MCP format ({"command","args"} without type/enabled). OpenCode 1.17+ rejects that entry and blocks the whole opencode.json from loading. The installer now resolves the latest version + dist.integrity from the npm registry at runtime and verifies the tarball with SHA-512.
  • No silent config wipe — config writers now skip (with a warning) instead of overwriting an existing agent config that isn't valid JSON, so other MCP servers and user settings are never destroyed.

If your opencode.json shows Expected { type: local } | { type: remote } or Missing key mcp.toon-memory.enabled

Install 4.3.1 and re-run toon-memory init --agent opencode --scope global — it repairs the entry in place while keeping every other MCP server. Or edit ~/.config/opencode/opencode.json (C:\Users\<you>\.opencode\opencode.json) and set:

"mcp": { "toon-memory": { "type": "local", "command": ["npx", "-y", "toon-memory", "mcp"], "enabled": true } }

Full changelog: see CHANGELOG.md.

v4.3.0 — Explicit importance, continuity repositioning, docs sync

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 02 Aug 15:03

What's new

Added

  • Explicit importancememory_remember({ importance }) accepts critical, high, medium, or low. Empty = auto (recency + frequency). Ranking boosts: critical +0.3, high +0.15, medium 0, low −0.1, applied in both the graph and unified recall pipelines. mergeEntries keeps the higher explicit level on re-save. buildReason() reports explicit {level} and deep output shows · importance: {level}. Stored as the 19th TOON field (parts[18]).

Fixed

  • memory_remember merge branch field alignment — the upsert path wrote path_scope into the priority slot and origin into the path_scope slot (both off by one). Now aligned with mergeEntries: priority, path_scope, origin, status, supersededOn, importance.

Docs & marketing

  • TOON spec updated to the 19-field format (… supersededOn | importance) in all 8 locales
  • Homepages repositioned around continuity — "Your AI coding agent keeps the context it needs — across every session", "A memory toolkit, not a protocol", 97.6% recall stat (R@5 0.861 rrf / 0.643 linear / 0.829 smart), WhatNew v4.3.0 — in EN + de/es/fr/ja/ko/pt-br/zh
  • READMEs updated in all 8 locales with an explicit-importance example

Tests

  • Explicit importance: parse, ranking boost ordering, merge max-level, buildReason explicit reporting
  • Round-trip of the 19-field TOON line with importance populated and empty
  • 345 tests passing · tsc --noEmit clean · benchmark re-verified

v4.2.0 — Explain WHY, token budgets, version supersession, negative memories

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 01 Aug 19:23

Added

  • Explain WHYmemory_recall / memory_smart_recall explain: true appends a deterministic reason line (↳ 100% relevance · used 14× · used today · importance HIGH)
  • Token budgetsbudget_tokens param drops the tail of the recall that would exceed the estimate
  • Version supersessionmemory_consolidate mode: "versions" marks older library-version entries obsolete in favor of the newest
  • Negative memories — new warning category recalled with +0.2 boost
  • Extended statsmemory_stats reports Hit rate, Duplicate % and Dead %
  • Ranking factors — language-family (+0.1) and path_scope folder-match (+0.05) boosts

340 tests passing.

v4.1.2

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 01 Aug 18:38

What's Changed

Fixed

  • Corrupt data.toon entries — 3 entries written with unescaped | literals (field-shift corruption) repaired in place with the production serializer; content, dates, and TTLs restored
  • Dynamic entry-count limit in health warningscontext_health and the context brief now read MAX_ENTRIES from config.json via getMaxEntries() instead of a hardcoded 100
  • Malformed-entry detectiongenerateContextHealth now flags shifted/invalid date/ttl fields as a Critical health issue (score −20), so unescaped-pipe corruption surfaces instead of silently parsing wrong

Tests

  • 18-field toToonLine round-trip with combined pipes/backslashes/multiline hazards
  • Field-shift exposure: unescaped pipe is visible as an invalid date field, not silent garbage
  • Health detector flags malformed entries and leaves clean data unflagged

Full Changelog: v4.1.1...v4.1.2

v4.1.1

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 01 Aug 17:00

What's Changed

Fixed

  • CLI -h/--help handlingtoon-memory init and toon-memory viewer now accept -h/--help and print their usage instead of misparsing args
  • viewer --export — no longer misparses a missing --port value; warns when --port is passed alongside --export
  • CLI help text — top-level help now documents the viewer subcommand

Full Changelog: v4.1.0...v4.1.1

v4.1.0 — Retrieval benchmark + deterministic recall

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 01 Aug 08:19

What's new

LongMemEval-style retrieval benchmark

Retrieval is now measured against a frozen snapshot of real project memory — the first public retrieval benchmark for toon-memory.

  • Corpus: 187 real data.toon entries (snapshot 2026-08-01)
  • Gold set: 42 hand-authored queries across 6 categories (core-fact, temporal, knowledge-updating, multi-hop, meta/session, distractor)
  • Measured code = production pipeline (src/lib), bundled in-memory with esbuild — no faithful copies
  • Artifacts: benchmarks/retrieval-corpus.toon, gold-queries.json, retrieval-results.json · Reproducible via npm run bench:retrieval
Mode R@5 nDCG@5 MRR@5 answerable
linear 0.643 0.654 0.776 81.0%
rrf 0.861 0.764 0.788 97.6%
smart (unified) 0.829 0.739 0.760 92.5%

Deterministic recall

New optional today parameter on memory_recall / memory_smart_recall pins the reference date for recency, staleness decay, and TTL — fully reproducible results (default stays the wall clock, backward compatible).

Docs

Retrieval metrics block added to the docs home (English; other locales guarded).

v3.7.0

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 31 Jul 18:47

v3.7.0 — RRF ranking, memory_reflect, memory_supersede + as_of, typed edges, 40 tools

  • memory_reflect: deterministic staleness/quality/over-connection reflection (zero LLM)
  • memory_supersede + as_of: replace an entry with a newer one; point-in-time recall re-includes entries superseded after a date (reversible via memory_resolve)
  • memory_promote: auto-promote low-confidence drafts (threshold 0.65, Jaccard dedup > 0.5, dryRun default)
  • RRF ranking: recall fuses BM25 (x3) + graph centrality via Reciprocal Rank Fusion with adaptive k=sqrt(n); rrf:false restores the legacy linear score. Benchmarked parity (nDCG 0.776 / MRR 0.917 on 8 gold queries)
  • Typed graph edges: every edge carries a type written as type:key (relates / superseded_by / supersedes)
  • MCP annotations: memory exposed as resources + inline graph viewer
  • 40 MCP tools + 4 resources

Docs updated across all 8 i18n locales. 301 tests passing.

v3.6.1

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 30 Jul 21:39

Full Changelog: v3.6.0...v3.6.1

v3.6.0

Choose a tag to compare

@LuiggiVal08 LuiggiVal08 released this 30 Jul 21:37

Full Changelog: v3.5.0...v3.6.0