Skip to content

v0.5.1

Latest

Choose a tag to compare

@ScottRBK ScottRBK released this 09 Aug 09:16
· 6 commits to main since this release

Highlights

  • Memory read-access tracking (#53, contributed by @bertheto) — access_count
    and last_accessed_at are now tracked on memories, giving visibility into
    which memories are actually being used without any decay/GC behaviour.
  • get_recent_memories parity with REST (#52, contributed by @bertheto) —
    the MCP tool (both the direct tool and the execute_forgetful_tool adapter
    path) now supports offset, tags, sort_by, sort_order, and
    include_obsolete, matching what GET /api/memories already offered.
  • Dependency security patch — 38 known CVEs remediated across 7 packages
    (starlette, mcp, cryptography, pillow, pyasn1, pydantic-settings,
    click). Zero known vulnerabilities per pip-audit as of this release.

Memory access tracking (#53)

  • New access_count (int, default 0) and last_accessed_at (nullable
    timestamp) columns on memories, populated via record_memory_access in
    the repository layer. Deliberately does not touch updated_at — usage
    telemetry must not distort normal memory recency.
  • Wired in as EventBus subscribers on the existing memory.read /
    memory.queried events (registered in bootstrap.py), reusing the
    established ACTIVITY_TRACK_READS gating and fire-and-forget dispatch
    instead of adding a new unconditional write path. access_count stays at
    zero unless ACTIVITY_TRACK_READS is 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_obsolete to both the direct MCP tool and the
    execute_forgetful_tool adapter.
  • Pagination bounds (limit 1-100, offset >= 0) are now enforced via a
    shared clamp_list_pagination helper 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_registry updated so discover_forgetful_tools /
    how_to_use_forgetful_tool reflect the new parameters.

Dependencies

  • starlette 1.0.1 → 1.3.1, pydantic-settings 2.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-audit reports 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) on get_recent_memories.
  • New integration + e2e coverage for access-count tracking on get_memory
    and query_memory (primary + linked IDs), including the
    ACTIVITY_TRACK_READS=false negative case.
  • Full suite green: 567 integration, 547 e2e (sqlite), 285 e2e (postgres).

Full Changelog: v0.5.0...v0.5.1