Releases: fmflurry/code-memory
v0.5.2 — watcher leak fix + semantic claim dedupe
Fixed
- Unbounded launchd watcher accumulation. MCP boot no longer registers a permanent
KeepAliveagent for ephemeral/per-session dirs (~/.claude/homunculus/*,.cursor/worktrees/*,plugins/cache/*). Newprune_staleruns on every bootstrap and removes agents whose target dir is gone or ephemeral, self-healing existing cruft. (launchd-only for now; systemd/schtasks GC is a follow-up.) - Graceful watcher teardown. MCP server now stops the watcher via
atexit+SIGTERMso the watchdog Observer flushes and joins instead of dying mid-debounce.
Added
- Semantic dedupe of near-duplicate claims. Paraphrastic claims (cosine ≥
CLAIMS_SEMANTIC_DEDUP_THRESHOLD, default 0.90) collapse into the closest open claim instead of inserting duplicate rows. Set ≥ 1.0 to disable.
Also includes prior untagged work: Cursor harness integration + installer improvements.
Update: code-memory update
v0.5.1 — updater bugfixes
Bugfix release — code-memory update actually works now
The first real run of code-memory update --check against a machine carrying the pre-rename code-memory dist (uv-tool installs from before the PyPI rename) surfaced four bugs. All fixed:
- CLI version fell back to
0.0.0+local—__init__.pyonly queriedflurryx-code-memory. Legacy installs have dist namecode-memory. Now tries both. uv tool upgrade flurryx-code-memoryfailed — uv-tool registers tools by entry-point name (code-memory), not package name. Now usesuv tool install --reinstall --force --from <src> code-memory— also migrates legacy dist cleanly.claude plugin install … --forcerejected —--forceno longer a valid flag. Switched toclaude plugin update <name>with a graceful install-fallback.- Docker stack reported "no compose / docker" on dev installs whose compose file lives in the repo, not
~/.code-memory/. Updater now probescm-falkordb/cm-qdrantfor thecom.docker.compose.project.config_fileslabel.
Upgrade
code-memory updateIf you're on 0.5.0 and it errors out on the CLI step, run the one-liner installer once to migrate to 0.5.1 — from there onward update is self-sufficient:
curl -fsSL https://raw.githubusercontent.com/fmflurry/code-memory/main/install.sh | bashv0.5.0 — smart `code-memory update` CLI
Highlights
code-memory update — smart, idempotent updater. No more re-running the one-liner just to bump the CLI.
code-memory update # smart refresh
code-memory update --check # dry-run; exit 1 if behind
code-memory update --full # re-run the one-liner installer
code-memory update --bleeding # CLI from git+mainHow it differs from re-running the installer
- Detects install method (
uv tool/pipx/pip/ editable) viasys.prefix+ PEP 610direct_url.json. - Refreshes only what's already installed locally:
- CLI via the same channel
- Docker stack only if
~/.code-memory/docker/docker-compose.ymlexists or containers run - Ollama models only if already in
ollama list(so no surprisegemma2:9bre-prompt) - Claude Code plugin + OpenCode npm pkg only when registered
- Pieces you opted out of stay untouched — no re-prompting.
Other changes
- New
code-memory --version/-Vflag (README claimed it; it was missing). __version__now resolved fromimportlib.metadata(no more stale0.1.0).- README: attention banner under
## Installation+ new## Updatingsection + jump link.
Install / Update
# Existing users:
code-memory update
# Fresh install (unchanged):
curl -fsSL https://raw.githubusercontent.com/fmflurry/code-memory/main/install.sh | bashv0.4.0 — Live ingest progress + PyPI + PHP
What's new in v0.4.0
Published to PyPI as flurryx-code-memory (the bare code-memory name was already taken on PyPI by another project). The Python import path is unchanged: from code_memory import ….
Highlights
- Live ingest progress — new
ingest-watchCLI plus rich TUI progressbar; MCP clients receivenotifications/progressfor in-chat feedback during long ingests. - Zero-clone installer — one-liner install for macOS / Linux / Windows; no
git clonerequired. - PHP language support — extractor now covers PHP alongside the existing TS/JS/Python/Go/C#/etc.
- MCP ingest steering —
codememory_ingestis now disabled by default and steers agents to the streaming Bash CLI, so progress is actually visible in the host UI. - Health endpoint fix —
/healthnow reports the real graph node count instead of always returning1(aggregate-row counting bug). - Metrics + resilience — tool-call tracking, efficiency measurement, retry/backoff hardening across backends, BGE-M3 standardised, harmful rerank removed.
- Auto-watcher plugin — installs as a session-start hook for Claude Code and OpenCode, so the index stays fresh without manual
ingestcalls.
Fixes
- Correct relative imports in
healthmodule (was triggering package-escape error). syncnow propagates uncommitted file deletions to both the graph and vector index.metrics.dbfalls back todata/whenCODEMEMORY_METRICS_DBis unset.
Install
pip install flurryx-code-memory
# or zero-clone installer:
curl -fsSL https://raw.githubusercontent.com/fmflurry/code-memory/main/scripts/install.sh | bashFull changelog: v0.2.0...v0.4.0
v0.2.0 — Snapshots: ingest once, sync everywhere
Release theme: enterprise-grade ingest, full features, no quality tradeoffs.
Headline
Snapshots: ingest once, sync everywhere. Build the index once on a fast machine (code-memory ingest --full && code-memory snapshot publish), distribute via a dedicated git branch, every other developer runs code-memory sync and pulls full state (vectors + graph + episodic) in seconds. Verified end-to-end: 0.5 s when the snapshot matches HEAD; 0.9 s when HEAD is one commit ahead (auto-applies snapshot + runs incremental delta). The cold-ingest cost moves from "every dev on every clone" to "once per merge in CI".
Key changes
Added
- Snapshot publish/sync end-to-end workflow.
REFERENCESedge type for C# type-position usage —callers IFoonow returns implementations, parameter-type users, and generic-arg sites.- Canonical import aliasing for Python relative imports —
importers <module>catches every form (relative and absolute). - Persistent content-hash embedding cache — 19× warm re-ingest (55.7 s → 2.9 s on this repo), full features.
- TEI backend (
EMBED_BACKEND=tei) — 5-10× cold ingest on Linux + NVIDIA, samebge-m3weights, identical recall. --no-vectorsingest flag for graph-only workloads.- Auto-resolved
embed_dimfrom model name (no more silent dim mismatches). - Claim entity resolution + retrieve-pack surfacing + OpenCode plugin parity (Graphiti-style fact memory).
Fixed
- Snapshot hybrid-vector round-trip.
_dump_vectorsused to silently discard embeddings when Qdrant returned the hybrid layout. The feature was non-functional in shipping code; now it actually round-trips. 8 new e2e tests prevent regression.
Performance
- UNWIND-batched Falkor upserts: ~50 round-trips → ~3 per file. ~10× faster graph layer.
- Cross-file embedding batches + pipelined Qdrant upserts (2-worker thread pool).
Docs
- Honest README throughout. The "How code-memory scores vs
rg" hero callout cites measured numbers from the shipped benchmark queries. The Performance & scale section documents three real unlock paths (snapshots, cache, TEI) and an "Honest limits today" subsection that names what isn't on the roadmap.
Removed
- Private app-name references purged from current tree and full 53-commit git history (force-pushed). Anyone with an existing clone needs to delete and re-clone — SHAs are orphaned.
Compat note
git push --force was used to rewrite history. Existing clones will not git pull cleanly. Re-clone fresh:
git clone git@github.com:fmflurry/code-memory.git
Full changelog
See CHANGELOG.md.