Skip to content

Releases: mykolariabokon/project-mind-mcp

v0.9.1 — get_context_brief (scout pyramid layer 0)

Choose a tag to compare

@mykolariabokon mykolariabokon released this 05 Jul 07:28

Deterministic CONTEXT BRIEF tool for coding tasks: hybrid retrieval (vector/BM25) + one-hop import-graph expansion + manifest file skeletons + git recency, ranked and packed into a token budget. Zero LLM calls. Client hints (file mentions, stack frames, identifiers) are first-class signals. See CHANGELOG 0.9.1.

v0.9.0 — AI-Authored Annotations + Lightweight Core + PyPI

Choose a tag to compare

@mykolariabokon mykolariabokon released this 03 Jul 10:44

The architecture flip: instead of a small embedding model guessing what your code means, your AI assistant writes the search index. Plus: the default install shrank from ~500 MB to a few MB, and ProjectMind is now one uvx away.

✍️ AI-Authored Annotations — semantic search without embeddings

  • save_annotation(path, summary, keywords) — the assistant saves 1-2 sentence summaries as it works; they're indexed into BM25 and a new near-free L0_annot query tier
  • list_unannotated_files() — coverage report with staleness detection (file changed since annotation)
  • get_annotations(path) — review what the index "knows"
  • Human-readable .ai/annotations.json, UTF-8, atomic writes
  • Natural-language queries ("where are sessions revoked?") now land on the right files with plain keyword search

📦 Lightweight core — the vector stack is optional

  • chromadb + sentence-transformers moved to the [vector] extra
  • Full BM25-only mode: indexing (foreground / background / incremental), search, readiness checks and stats all work without the ML stack — install the extra any time to upgrade in place
  • Small-corpus fix: tiny projects (2-3 files) no longer get empty search results when BM25 idf collapses to zero

🚀 Install in one line

claude mcp add --scope user Memory -- uvx projectmind-mcp

Published on PyPI with automated releases via Trusted Publishing (no tokens anywhere).

CI

Unit jobs now exercise BM25-only mode; the integration job installs [vector] and exercises the full ML path — both modes are covered on every push.

Full changelog: CHANGELOG.md

v0.8.0 — Correctness Overhaul + Symbol Graph v3

Choose a tag to compare

@mykolariabokon mykolariabokon released this 03 Jul 05:24

The biggest release yet: a deep correctness overhaul of the indexing pipeline, a redesigned and finally wired-in symbol graph, and a security fix. All 224 tests green, CI passing on Python 3.10–3.12.

🔒 Security

  • BM25 index is now JSON (.ai/bm25_index.json), never pickle. The old .pkl lived inside the target project's .ai/ dir, so unpickling it was an arbitrary-code-execution vector when indexing third-party repos. Legacy .pkl files are cleaned up automatically.

🧬 Symbol Graph v3 — now actually wired in

  • Symbols are keyed by qualified id (path::Class.method) — same-named symbols across files no longer collapse into one node.
  • New MCP tools: find_symbol(name) and get_symbol_relations(symbol, relation) — callers / callees / implementors / subclasses / bases / usages, answered in milliseconds without loading the embedding model.
  • New L1_symbol search tier fuses symbol-name hits into query() results via RRF; the background indexer keeps the graph fresh.
  • Inheritance extraction now works for JS/TS/Java/Ruby (was Python-only); builtin-call noise is filtered; no more double attribution of method calls to their class.

🧹 Index hygiene

  • Re-indexing a changed file deletes its previous chunks first; chunks of deleted files are removed from ChromaDB, BM25 and metadata — renamed/removed symbols no longer haunt search results forever.
  • Failed upserts are no longer silent: metadata isn't saved, so affected files retry on the next run.
  • Query cache is invalidated on every index change; chunk IDs include line_start so same-named symbols in one file don't overwrite each other.
  • Three dead tools revived: search_with_dependencies, search_for_errors, search_architecture read a metadata key that was never written — they silently returned empty results.

⚡ Performance

  • Incremental BM25: small changes no longer trigger a full-ChromaDB fetch + full index rewrite.
  • Import-graph tools use a precomputed reverse graph (was O(N²·E)).
  • pylint runs as a subprocess (in-process runs risked corrupting the MCP stdio protocol).

🪟 Windows & robustness

  • memory.md is always UTF-8 — Cyrillic (or any non-ASCII) notes survive round-trips; atomic writes no longer unlink the target first.
  • Python dotted/relative imports and multi-line JS/TS imports resolve correctly in the dependency graph.
  • Thread-safety across the board: context init, tree-sitter parsing, BM25 swaps, background indexer; switching project roots cancels the running background job.

🧪 Testing honesty

  • Coverage no longer omits the biggest modules (the old 80% gate measured a fraction of the code); 20+ new regression tests pin every fixed bug.

Full changelog: CHANGELOG.md