Highlights
- Memory read-access tracking (#53, contributed by @bertheto) —
access_count
andlast_accessed_atare now tracked onmemories, giving visibility into
which memories are actually being used without any decay/GC behaviour. get_recent_memoriesparity with REST (#52, contributed by @bertheto) —
the MCP tool (both the direct tool and theexecute_forgetful_tooladapter
path) now supportsoffset,tags,sort_by,sort_order, and
include_obsolete, matching whatGET /api/memoriesalready offered.- Dependency security patch — 38 known CVEs remediated across 7 packages
(starlette,mcp,cryptography,pillow,pyasn1,pydantic-settings,
click). Zero known vulnerabilities perpip-auditas of this release.
Memory access tracking (#53)
- New
access_count(int, default 0) andlast_accessed_at(nullable
timestamp) columns onmemories, populated viarecord_memory_accessin
the repository layer. Deliberately does not touchupdated_at— usage
telemetry must not distort normal memory recency. - Wired in as
EventBussubscribers on the existingmemory.read/
memory.queriedevents (registered inbootstrap.py), reusing the
establishedACTIVITY_TRACK_READSgating and fire-and-forget dispatch
instead of adding a new unconditional write path.access_countstays at
zero unlessACTIVITY_TRACK_READSis enabled (default: disabled). - Scoped-down successor to the earlier PR #45 proposal — time-based decay/GC
was intentionally dropped, keeping this to pure read-side observability.
get_recent_memories MCP parity (#52)
- Adds
offset,tags(OR semantics),sort_by
(created_at/updated_at/importance),sort_order, and
include_obsoleteto both the direct MCP tool and the
execute_forgetful_tooladapter. - Pagination bounds (
limit1-100,offset>= 0) are now enforced via a
sharedclamp_list_paginationhelper on both paths — previously the
adapter path forwarded raw values, which could reach Postgres as an
unhandled negative-offset error or silently return a wrong result set
under SQLite. tool_metadata_registryupdated sodiscover_forgetful_tools/
how_to_use_forgetful_toolreflect the new parameters.
Dependencies
starlette1.0.1 → 1.3.1,pydantic-settings2.12.0 → 2.14.2 (direct
pins);mcp→ 1.29.0,cryptography→ 50.0.0,pillow→ 12.3.0,
pyasn1→ 0.6.4,click→ 8.4.2 (transitive). All patch/minor bumps,
no breaking changes.pip-auditreports zero known vulnerabilities
post-bump.
Test coverage
- New e2e coverage (Postgres + SQLite) for tag filters,
include_obsolete,
sort, and pagination clamping (negative offset, zero limit, over-limit,
100-row cap) onget_recent_memories. - New integration + e2e coverage for access-count tracking on
get_memory
andquery_memory(primary + linked IDs), including the
ACTIVITY_TRACK_READS=falsenegative case. - Full suite green: 567 integration, 547 e2e (sqlite), 285 e2e (postgres).
Full Changelog: v0.5.0...v0.5.1