Skip to content

Releases: fmflurry/code-memory

v0.5.2 — watcher leak fix + semantic claim dedupe

30 May 00:11

Choose a tag to compare

Fixed

  • Unbounded launchd watcher accumulation. MCP boot no longer registers a permanent KeepAlive agent for ephemeral/per-session dirs (~/.claude/homunculus/*, .cursor/worktrees/*, plugins/cache/*). New prune_stale runs 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 + SIGTERM so 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

27 May 18:30

Choose a tag to compare

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:

  1. CLI version fell back to 0.0.0+local__init__.py only queried flurryx-code-memory. Legacy installs have dist name code-memory. Now tries both.
  2. uv tool upgrade flurryx-code-memory failed — uv-tool registers tools by entry-point name (code-memory), not package name. Now uses uv tool install --reinstall --force --from <src> code-memory — also migrates legacy dist cleanly.
  3. claude plugin install … --force rejected--force no longer a valid flag. Switched to claude plugin update <name> with a graceful install-fallback.
  4. Docker stack reported "no compose / docker" on dev installs whose compose file lives in the repo, not ~/.code-memory/. Updater now probes cm-falkordb / cm-qdrant for the com.docker.compose.project.config_files label.

Upgrade

code-memory update

If 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 | bash

PyPI: https://pypi.org/project/flurryx-code-memory/0.5.1/

v0.5.0 — smart `code-memory update` CLI

27 May 17:27

Choose a tag to compare

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+main

How it differs from re-running the installer

  • Detects install method (uv tool / pipx / pip / editable) via sys.prefix + PEP 610 direct_url.json.
  • Refreshes only what's already installed locally:
    • CLI via the same channel
    • Docker stack only if ~/.code-memory/docker/docker-compose.yml exists or containers run
    • Ollama models only if already in ollama list (so no surprise gemma2:9b re-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 / -V flag (README claimed it; it was missing).
  • __version__ now resolved from importlib.metadata (no more stale 0.1.0).
  • README: attention banner under ## Installation + new ## Updating section + jump link.

Install / Update

# Existing users:
code-memory update

# Fresh install (unchanged):
curl -fsSL https://raw.githubusercontent.com/fmflurry/code-memory/main/install.sh | bash

PyPI: https://pypi.org/project/flurryx-code-memory/0.5.0/

v0.4.0 — Live ingest progress + PyPI + PHP

27 May 15:34

Choose a tag to compare

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-watch CLI plus rich TUI progressbar; MCP clients receive notifications/progress for in-chat feedback during long ingests.
  • Zero-clone installer — one-liner install for macOS / Linux / Windows; no git clone required.
  • PHP language support — extractor now covers PHP alongside the existing TS/JS/Python/Go/C#/etc.
  • MCP ingest steeringcodememory_ingest is now disabled by default and steers agents to the streaming Bash CLI, so progress is actually visible in the host UI.
  • Health endpoint fix/health now reports the real graph node count instead of always returning 1 (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 ingest calls.

Fixes

  • Correct relative imports in health module (was triggering package-escape error).
  • sync now propagates uncommitted file deletions to both the graph and vector index.
  • metrics.db falls back to data/ when CODEMEMORY_METRICS_DB is unset.

Install

pip install flurryx-code-memory
# or zero-clone installer:
curl -fsSL https://raw.githubusercontent.com/fmflurry/code-memory/main/scripts/install.sh | bash

Full changelog: v0.2.0...v0.4.0

v0.2.0 — Snapshots: ingest once, sync everywhere

25 May 17:37

Choose a tag to compare

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.
  • REFERENCES edge type for C# type-position usage — callers IFoo now 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, same bge-m3 weights, identical recall.
  • --no-vectors ingest flag for graph-only workloads.
  • Auto-resolved embed_dim from 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_vectors used 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.