Replace static 2GB default with platform-aware auto-detection:
- Linux: syscall.Sysinfo
- macOS: sysctl hw.memsize
- Windows: GlobalMemoryStatusEx
Falls back to 4GB if detection fails. User config still overrides.
Prevents both OOM kills (upper clamp) and excessive GC pressure (lower clamp).
- Fix ref counting race in ListProjects and watcher pollAll: use AcquireStore
instead of ForProject to prevent evictor from closing stores mid-query (#52)
- Add recoverStaleSHM: remove stale SHM files after SIGKILL to prevent
deadlock on next connection (#52)
- Increase busy_timeout from 5s to 10s for large databases (#52)
- Default GOMEMLIMIT to 2GB when not configured, preventing unbounded
memory growth and OOM kills (#49, #46)
- Reduce mmap_size from 256MB to 64MB per database (#49, #46)
- Increase watcher base interval from 1s to 5s and poll interval base
from 1s to 5s, reducing CPU usage by ~5x (#45)
- Normalize Windows drive letter to lowercase in ProjectNameFromPath,
preventing duplicate databases for same path (#50)
tools.Version was a hardcoded const that needed manual bumping.
Now it defaults to "dev" and is set from main.version (injected
via -ldflags during release builds) through tools.SetVersion().
- Fix Continue.dev invalid_type error: add properties:{} to list_projects schema (#15)
- Fix Windows paths: sanitize colons and backslashes in ProjectNameFromPath (#20)
- Fix update double-v prefix: strip v from version before display (#17)
- Fix update context canceled: DownloadAsset returns []byte, not ReadCloser (#17)
- Strip v prefix in release workflow ldflags (Unix + Windows builds)
- Add Gemini CLI, VS Code Copilot, and Zed to install/uninstall commands (#19)
- Add tests for new editor configs and Windows path cases
Tests that replace PATH with an empty temp dir break DLL resolution
on Windows (MSYS2 libgcc/libwinpthread). Append original PATH on
Windows so CGo-linked binaries can still find required DLLs.
- Replace Go-binding tree-sitter with vendored C grammars compiled via
CGo (internal/cbm/); eliminates all Go module/linker fragility
- Add 32 new languages: Clojure, CMake, COBOL, Common Lisp, CUDA, Elm,
Emacs Lisp, Fortran, F#, GLSL, GraphQL, INI, JSON, Julia, Makefile,
Markdown, Meson, Nix, Protobuf, Svelte, Verilog, Vim Script, Vue, XML
(plus C, C#, Erlang, SQL, YAML quality improvements)
- Adaptive worker concurrency and mmap prefetch for faster indexing
- Graph buffer: batched SQLite writes for 3-5x throughput improvement
- Fix cancellation test: use 50ms timeout (pipeline now indexes 212-file
Erlang repo in ~400ms, well under the old 2s deadline)
- Fix isTestFunction: add "Test" prefix for C#, "test" prefix for Scala
- Release workflow: build binary as `codebase-memory-mcp` (not
`codebase-memory-mcp-<os>-<arch>`) inside tarballs. Users extract
and get the correct name without renaming.
- Codex CLI: replace broken `codex mcp add/remove` calls with direct
config.toml manipulation. Codex uses [mcp_servers.<name>] sections,
not CLI subcommands.
- README: add explicit extract-and-move step to Quick Start.
claude mcp remove without -s user prompts interactively for scope,
which hangs when run from install/uninstall commands. Both
registerClaudeCodeMCP (pre-cleanup remove) and deregisterMCP
(uninstall) now pass -s user explicitly.
- TestMain: append .exe to binary name on Windows
- Add testEnvWithHome/setTestHome helpers for cross-platform HOME override
(Windows uses USERPROFILE, not HOME)
- Add exeSuffix() helper for fake binary creation
- Skip Unix-specific tests on Windows: shell RC detection, PATH append,
fallback path lookup
- Normalize CRLF in skill frontmatter check (git may convert on Windows)
Skill files were only written inside installClaudeCode(), which required
finding the `claude` CLI binary. In CI (Linux) with no claude installed,
skills were never written, causing 4 test failures.
Split into installSkills() (always runs) and registerClaudeCodeMCP()
(only when claude CLI found).
Add CLI mode for direct tool invocation from the shell — every MCP tool
can now be called without an MCP client. Useful for testing, scripting,
and CI pipelines.
Query engine rewrite: SQL LIKE pre-filtering extracts literal substrings
from regex patterns before scanning, batch degree counting replaces
per-node queries, and schema queries use id→label maps instead of 3-way
JOINs. Cypher relationship queries up to 600x faster on large graphs.
Incremental reindex 4x faster via content-hash skip optimization.
Upgrade to Go 1.26 (Green Tea GC) and SQLite v1.46.1.
Auto-sync: background watcher polls indexed projects for file changes
(mtime+size) and triggers incremental re-indexing automatically. Adaptive
polling interval scales with repo size (1s-60s). Non-blocking — uses
TryLock to skip if manual index_repository is in progress.
WithTransaction: changed signature to return a transaction-scoped Store
instead of mutating the shared querier field. Eliminates a data race
where concurrent read handlers could use a committed transaction.
Infrastructure file indexing: new pipeline pass indexes Dockerfiles,
docker-compose, cloudbuild, .env, Terraform, and YAML config files as
InfraFile nodes with structured properties.
Also includes: indexMu mutex on Server for safe concurrent access,
Claude Code skill file in repo, updated README with auto-sync docs.
MCP server that indexes codebases into a queryable knowledge graph.
Single Go binary, SQLite storage, 12 languages via tree-sitter.
Features: call graph, cross-service HTTP linking, dead code detection,
route nodes, Cypher queries, incremental reindex, JSON config scanning.