v3.5.9 — Community fixes: zombie processes, MCP embedder, config, local models
·
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 mcpnow self-terminates when an IDE reconnects without quitting — useskqueueKQ_EV_EOFto 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 everyslm mcpsession except the caller. Run this after switching IDEs. JSON output now lists it innext_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.json — db_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:
LLMBackbone._build_openai()omitsAuthorization: Bearerwhenapi_keyis empty — no more HTTP 401 from local servers./chat/completionsappended whenbase_urlis a bare base — fixes the/v1/v1/chat/completionsduplication.POST /api/v3/provider/testaccepts emptyapi_keywhen a custom endpoint is provided.
Install / upgrade
pip install --upgrade superlocalmemory==3.5.9
slm daemon restartFull changelog: CHANGELOG.md