v3.5.0
MemPalace/mempalacev3.5.0Jun 23, 2026by igorls
AI Summary
Adds a local daemon for write queuing, opt-in HTTP transport, and new cleanup tools like `mempalace_checkpoint` and `mempalace_delete_by_source`.
Key Highlights
- Opt-in local daemon for queued palace writes.
- Opt-in HTTP transport for MCP server.
- `mempalace_checkpoint` tool for batch saving.
- `mempalace_delete_by_source` tool for bulk cleanup.
- New transcript parsers (Continue.dev, Gemini CLI, Pi).
New Features
- Opt-in local daemon
- Opt-in HTTP transport
- Batch save tool (checkpoint)
- Bulk cleanup tool (delete_by_source)
- New transcript parsers
- Wider miner language coverage
Full Release Notes
## v3.5.0 — local write daemon, opt-in HTTP transport, and palace-cleanup tooling This cycle adds two new ways to run MemPalace's write path and a set of tools for keeping a palace clean. An opt-in **local daemon** serializes background mines, diary saves, and hook ingests through a single process instead of racing for the palace handle, and an opt-in **HTTP transport** lets the MCP server run behind a long-lived HTTP client/proxy — loopback-default, with a Host/Origin DNS-rebinding guard and an optional bearer token. Three new MCP tools land alongside: `mempalace_checkpoint` (batch a whole session into one save), `mempalace_delete_by_source` (surgically purge mined benchmark/eval contamination — drawers *and* their index entries), and a `source_file` filter for scoped search. New transcript parsers (Continue.dev, Gemini CLI, Pi) and miner coverage for C#/PHP/Swift/Kotlin/Java widen what you can mine, and a batch of large-palace performance and reliability fixes round out the release. ### Features - **Opt-in local daemon for queued writes.** `mempalace daemon` serializes all palace writes through one local process so background work stops racing the palace handle. Opt-in and local-only. (#1826) - **Opt-in HTTP transport for the MCP server.** `mempalace-mcp --transport http` serves JSON-RPC at `POST /mcp` (with `GET /healthz`) for proxy/long-lived deployments. stdio remains the default; the HTTP path binds `127.0.0.1`, pins `Host` and rejects non-loopback `Origin` (DNS-rebinding guard), and supports an optional `MEMPALACE_MCP_HTTP_TOKEN` bearer token. (#1801, #1806) - **`mempalace_checkpoint` batch-save tool.** Files multiple `add_drawer` calls plus an optional diary entry in a single MCP round-trip, verbatim, reusing the idempotent add/dedup path. (#1851) - **`mempalace_delete_by_source` bulk-cleanup tool.** Exact-match, dry-run-by-default deletion of every drawer *and its closet/AAAK index entries* for a `source_file` — the recourse when benchmark/eval files get mined into a real wing. The dry run reports the blast radius; the commit writes a WAL audit entry. (#1722, #1729) - **Optional `source_file` filter for `mempalace_search`.** Scope a search to an exact stored path; threaded through every search path so it never silently drops a match. (#1815, #1817) - **New transcript parsers** — Continue.dev sessions (#731), Gemini CLI / AI Studio (#204), and Pi agent JSONL (#169). - **Wider miner language coverage** — C#/.NET, PHP (#1819), Swift/Kotlin (#1368), and Java project detection incl. rootless subprojects (#1720). - **Final mine on Claude plugin `SessionEnd`** so the last exchanges are captured at session close. (#1814, #1820) ### Performance - **Overview/status and `graph_stats` answered from the SQLite aggregate** — fixes large-palace timeouts. (#1748, #1379) - **Embedder caps ONNX-runtime intra-op threads** so a background mine no longer pins every core. (#1068) - **SQL-pushdown pagination** for `sqlite_exact` (#1842) and `pgvector` (#1840), plus single-scroll bulk metadata for Qdrant (#1832). ### Bug Fixes - **pgvector tolerates hostile transcript bytes** — a lone surrogate (#1833) or NUL byte (#1829) no longer aborts the whole mine. - **Diverged-index recovery points at `repair --mode from-sqlite`, not a re-mine** — re-mining silently dropped MCP-added drawers and diary entries. (#1843, #1847, #1849) - **Stale ChromaDB HNSW divergence routes to the SQLite fallback** instead of failing the read. (#1816, #1822) - **The MCP server refuses a second writer for the same palace** rather than racing the HNSW handle. (#1818, #1823) - **Windows hook miner spawns with `CREATE_NO_WINDOW`** — no console flash. (#1783, #1848) - **Percent-encoded SQLite read-only URIs** so spaced/special-char palace paths open. ### CI - **`test-windows` retries only the transient ChromaDB HNSW compaction flake** (`--only-rerun`); Linux/macOS keep zero reruns so real regressions stay loud. (#1854) A big thank-you to everyone who contributed this cycle — many of these features and fixes came from the community, including several first-time contributors. Everyone is credited below. ## What's Changed * fix(migrate): roll back swap from pre-migrate backup on failure by @eldar702 in https://github.com/MemPalace/mempalace/pull/1028 * feat(miner): add PHP ecosystem file extensions by @ManuelReschke in https://github.com/MemPalace/mempalace/pull/1819 * feat(miner): add support for Swift and Kotlin file extensions by @EVSalomon in https://github.com/MemPalace/mempalace/pull/1368 * fix: detect Java project manifests by @jsiu93 in https://github.com/MemPalace/mempalace/pull/1720 * feat(normalize): add Continue.dev session parser by @sjhddh in https://github.com/MemPalace/mempalace/pull/731 * feat: add Gemini CLI / AI Studio session import support by @FBISiri in https://github.com/MemPalace/mempalace/pull/204 * feat: add Pi agent JSONL session normalizer by @adv3nt3 in https://github.com/MemPalace/mempalace/pull/169 * feat(miner): add C# and .NET file extensions to READABLE_EXTENSIONS by @Davez69gto in https://github.com/MemPalace/mempalace/pull/952 * feat: opt-in local daemon for queued MemPalace writes by @igorls in https://github.com/MemPalace/mempalace/pull/1826 * fix(daemon): address post-merge review feedback on #1826 by @igorls in https://github.com/MemPalace/mempalace/pull/1828 * chore(deps-dev): bump ruff from 0.15.15 to 0.15.18 by @dependabot[bot] in https://github.com/MemPalace/mempalace/pull/1827 * perf: sqlite fast-path for overview tools + embedder thread cap (#1748, #1379, #1068) by @igorls in https://github.com/MemPalace/mempalace/pull/1836 * perf(mcp): sqlite fast path for graph_stats (#1379) by @igorls in https://github.com/MemPalace/mempalace/pull/1837 * fix: percent-encode sqlite read-only URIs for spaced/special-char paths by @igorls in https://github.com/MemPalace/mempalace/pull/1838 * fix(pgvector): strip NUL bytes so a transcript NUL no longer aborts the mine (#1829) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1831 * fix(pgvector): replace lone surrogates so a transcript surrogate no longer aborts the mine (#1833) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1834 * fix(mcp): route _sqlite_graph_stats through sqlite_read_uri by @igorls in https://github.com/MemPalace/mempalace/pull/1839 * fix(backends): push sqlite_exact get(limit, offset) pagination into SQL (#1841) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1842 * fix(pgvector): push get(limit, offset) pagination into SQL (#1830) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1840 * test(backends): live-substrate conformance module for pgvector by @jphein in https://github.com/MemPalace/mempalace/pull/1769 * fix(tests): run fact_checker __main__ via subprocess to clear runpy warning by @trek-e in https://github.com/MemPalace/mempalace/pull/1798 * fix: use CREATE_NO_WINDOW so Windows hook miner spawns don't flash a console (#1783) by @eldar702 in https://github.com/MemPalace/mempalace/pull/1848 * fix(chroma): route stale hnsw divergence to sqlite fallback by @fatkobra in https://github.com/MemPalace/mempalace/pull/1822 * fix(repair): point index-read failures to repair --mode from-sqlite (#1843) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1847 * fix: point diverged-index recovery at from-sqlite, not re-mine (#1843) by @undeadindustries in https://github.com/MemPalace/mempalace/pull/1849 * chore(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in https://github.com/MemPalace/mempalace/pull/1788 * chore(deps): bump docker/build-push-action from 6 to 7 by @dependabot[bot] in https://github.com/MemPalace/mempalace/pull/1787 * chore(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in https://github.com/MemPalace/mempalace/pull/1786 * fix(backends): single-scroll bulk metadata fetch for Qdrant; bump scroll page size (#1796) by @fatkobra in https://github.com/MemPalace/mempalace/pull/1832 * fix(mcp): refuse second writer for same palace by @fatkobra in https://github.com/MemPalace/mempalace/pull/1823 * feat(search): add an optional source_file filter to mempalace_search (#1815) by @mvalentsev in https://github.com/MemPalace/mempalace/pull/1817 * feat: add mempalace_checkpoint batch save tool by @undeadindustries in https://github.com/MemPalace/mempalace/pull/1851 * fix(claude-plugin): run final mine on SessionEnd by @fatkobra in https://github.com/MemPalace/mempalace/pull/1820 * feat(mcp): add mempalace_delete_by_source bulk-cleanup tool (#1722) by @arnoldwender in https://github.com/MemPalace/mempalace/pull/1729 * feat(mcp): add opt-in HTTP transport by @fatkobra in https://github.com/MemPalace/mempalace/pull/1806 * ci(test-windows): retry the transient ChromaDB HNSW compaction flake by @igorls in https://github.com/MemPalace/mempalace/pull/1854 * chore(release): 3.5.0 by @igorls in https://github.com/MemPalace/mempalace/pull/1853 * Release v3.5.0 — promote develop to main by @igorls in https://github.com/MemPalace/mempalace/pull/1855 ## New Contributors * @ManuelReschke made their first contribution in https://github.com/MemPalace/mempalace/pull/1819 * @EVSalomon made their first contribution in https://github.com/MemPalace/mempalace/pull/1368 * @jsiu93 made their first contribution in https://github.com/MemPalace/mempalace/pull/1720 * @FBISiri made their first contribution in https://github.com/MemPalace/mempalace/pull/204 * @Davez69gto made their first contribution in https://github.com/MemPalace/mempalace/pull/952 **Full Changelog**: https://github.com/MemPalace/mempalace/compare/v3.4.1...v3.5.0