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