Skip to content

v3.5.9 — Community fixes: zombie processes, MCP embedder, config, local models

Choose a tag to compare

@varun369 varun369 released this 06 Jun 21:42
· 22 commits to main since this release
Immutable release. Only release title and notes can be modified.

What's fixed

🧟 MCP zombie process hardening

  • Stdin EOF monitor (macOS): slm mcp now self-terminates when an IDE reconnects without quitting — uses kqueue KQ_EV_EOF to detect pipe hangup without consuming FastMCP's stdin bytes. Previously 22+ zombie sessions were accumulating, causing 12 GB swap on M5 Pro.
  • slm reap --all: new CLI flag kills every slm mcp session except the caller. Run this after switching IDEs. JSON output now lists it in next_actions.

🔌 MCP embedder NULL fix (PR #30)

MemoryEngine(Capabilities.LIGHT) permanently left _embedder = None, silently breaking semantic search for all memories stored via MCP tools. Fix: after LIGHT init, the engine attaches a McpEmbedderProxy that delegates embed_batch() to the daemon's new POST /api/v3/embed endpoint. One ONNX worker total. Graceful degradation if daemon is unreachable. health() now reports source: daemon_proxy.

⚙️ base_dir ignored in config (issue #28)

SLMConfig.load() ignored a custom base_dir in config.jsondb_path was always built from ~/.superlocalmemory. Fixed: load() now passes base_dir to for_mode(). save() persists it so the setting survives daemon restarts.

🔑 Local model auth deadlock (issue #29)

Three fixes for llama.cpp / LM Studio / unauthenticated OpenAI-compatible endpoints:

  1. LLMBackbone._build_openai() omits Authorization: Bearer when api_key is empty — no more HTTP 401 from local servers.
  2. /chat/completions appended when base_url is a bare base — fixes the /v1/v1/chat/completions duplication.
  3. POST /api/v3/provider/test accepts empty api_key when a custom endpoint is provided.

Install / upgrade

pip install --upgrade superlocalmemory==3.5.9
slm daemon restart

Full changelog: CHANGELOG.md