Special Thanks
Thank you to @filhocf (RFC #732 Phase 3 NLI implementation) and @laanwj (full v10 HTTP tool surface) for their contributions to this release.
What's New
Security
- fix(storage): sanitize BM25 log query (CodeQL #440): User-supplied query string was interpolated directly into a
logger.debugcall insqlite_vec.py's BM25 search path. Now passes through the existing_sanitize_log_value()helper (strips\n,\r, ESC) to prevent log injection.
Added
-
feat(reasoning): NLI-based contradiction detection — RFC #732 Phase 3 (PR #1027, @filhocf): Introduces
reasoning/nli.pywith a 4-stage pipeline — entity gate → embedding similarity pre-filter → heuristic NLI classifier →contradictsgraph edge storage.detect_contradictions_nli()is called on everymemory_storeto check for conflicts with semantically similar memories. Kill-switch viaMCP_NLI_ENABLED(default off); confidence threshold viaMCP_NLI_CONFIDENCE_THRESHOLD(default 0.4).memory_resolveextended to accept a list of hashes for batch conflict resolution.transformersbackend deferred to follow-up (tracked in issue #1033). -
fix(mcp): expose full v10 tool surface over HTTP (PR #1017, @laanwj):
/mcp tools/listpreviously advertised only 7 pre-v10 names (forked from stdio around v4, never resynced through the v10 consolidation). Now matches stdio's full v10 surface:memory_graph,memory_quality,memory_harvest,memory_conflicts,memory_resolve,memory_consolidate,memory_ingest,memory_update,memory_stats,memory_store_session,mistake_note_add,mistake_note_searchare now reachable over HTTP. Pre-v10 names remain callable via the deprecation compat layer but are no longer advertised.serverInfo.versionnow reports the running package version instead of the stale4.1.1literal. Write-scope enforcement derived dynamically fromreadOnlyHintannotations.
Full Changelog
See CHANGELOG.md for the complete entry.