26 Commits
Author SHA1 Message Date
Martin Vogel 6469cb641d Restructure release workflow: lint gate, then test+build per platform
Pipeline: lint (ubuntu) -> test+build per OS (5 parallel) -> release
Lint failure stops early. Each platform runs its own tests before building.
v0.2.0
2026-02-28 02:10:20 +01:00
Martin Vogel 600ec428d6 Fix lint (http.NoBody) and restructure release workflow
- Use http.NoBody instead of nil in checkForUpdate (gocritic httpNoBody)
- Restructure workflow: lint+test gate -> parallel builds -> release
  Prevents wasted build compute when lint or tests fail.
2026-02-28 02:07:49 +01:00
Martin Vogel 6811faf82b Add optional release_notes input to Release workflow
When provided, uses the custom notes as the release body.
When empty, falls back to auto-generated notes from commits.
2026-02-28 02:02:54 +01:00
Martin Vogel fb30ca61d6 v0.2.0: Multi-DB router, enrichment pipeline, update-available notification, enhanced language support
Major changes:
- Store router: per-project SQLite databases with automatic migration
- Pipeline enrichment: community detection, inheritance, decorators, read/write tracking, test detection, type usage, exception flows, configuration relationships
- Update checker: lightweight GitHub release check on startup, injects update_available into first tool response
- Language support: enhanced extraction for C++, C#, Go, Java, JavaScript, Lua, PHP, Python, Rust, Scala, TSX, TypeScript
- Cypher executor: improved query execution with better aggregation and pattern matching
- HTTP link detection: cross-service HTTP call inference
- CLI mode: extended with --raw flag, human-friendly summaries for all tools
- Search: sort_by support, exclude_labels, glob matching improvements
- AST debug tool for parser development
2026-02-28 01:58:47 +01:00
Martin Vogel 4ee7720b48 v0.1.5: Performance optimizations, mattn driver, batch passStructure, CTE BFS, SQL COUNT, fix delete_project file_hashes 2026-02-26 23:50:02 +01:00
Martin Vogel b5aded4eed Fix lint violations: extract helpers, use defer, prealloc slices
- Extract schema query helpers to reduce GetSchema cognitive complexity
- Add scanDegrees helper for batch degree counting with proper defer
- Fix errcheck, rowserrcheck, sqlclosecheck, prealloc, nestingReduce
- Suppress gocognit for Cypher step dispatch (inherently branchy)
v0.1.4
2026-02-26 20:26:09 +01:00
Martin Vogel 97289ddae6 Fix CI: build golangci-lint from source for Go 1.26 compat 2026-02-26 20:17:20 +01:00
Martin Vogel f932e87b6e v0.1.4: CLI mode, query performance optimizations, Go 1.26
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.
2026-02-26 19:27:27 +01:00
Martin Vogel d9920c6513 Add MCP Registry server.json and update .gitignore
Published to official MCP Registry as io.github.DeusData/codebase-memory-mcp.
2026-02-25 20:06:42 +01:00
Martin Vogel 147059a634 v0.1.3: Bug fixes, query improvements, cross-service linking, and graph enrichment
Part A — Bug fixes:
- Fix globToLike: **/dir/** now matches relative paths without leading /
- Route nodes inherit file_path from handler (were invisible to file_pattern)
- Compose YAML non-string env values (int/bool/float) no longer dropped
- Compose secret filter: key names like JWT_PRIVATE_KEY_ID no longer filtered
- Cloudbuild bash script deploy flags now parsed (entrypoint: bash)

Part B — Query improvements:
- search_graph exclude_labels parameter to filter noisy labels (e.g. Route)
- Cypher edge property filtering: r.url_path, r.confidence, r.confidence_band

Part C — Cross-service linking:
- InfraFile env var URLs feed into HTTP linker as additional call sites
- Default noise filtering: /health, /healthz, /ready, /metrics excluded
- Confidence bands on HTTP_CALLS: high (>=0.7), medium (>=0.45), speculative (>=0.25)
- Levenshtein distance and n-gram overlap similarity functions
- Lowered match threshold from 0.45 to 0.25 (speculative band)

Part D — Graph enrichment:
- OVERRIDE edges: struct methods → interface methods they implement
- USAGE edges: read references (callbacks, variable assignments) vs invocations
- Generated column index on url_path for fast edge property lookups
- Fuzzy name-only resolution fallback (5th strategy in call resolver)
- Configurable HTTP linker via .cgrconfig (exclude paths, min confidence)
- OpenTelemetry trace ingestion (ingest_traces tool) to validate HTTP_CALLS
- Git history change coupling (FILE_CHANGES_WITH edges, co-change analysis)

Updated tool descriptions and skill file with new edge types.
2026-02-25 18:46:20 +01:00
Martin Vogel 33b700f36f Bump version to 0.1.2 2026-02-25 16:06:15 +01:00
Martin Vogel 860e80c88f Add auto-sync watcher, fix WithTransaction data race, add infra file indexing
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.
2026-02-25 16:05:34 +01:00
Martin Vogel e4839e758d Add cross-service query guidance to tool descriptions
Clarify that search_graph relationship filter counts node degrees
(not edges), direct users to query_graph Cypher for listing
HTTP_CALLS/ASYNC_CALLS edges with properties, and recommend
direction=both in trace_call_path for full cross-service context.
2026-02-25 14:20:48 +01:00
Martin Vogel 55850fa888 Fix 7 lint violations: extract helpers to reduce cognitive complexity
- processFileCalls: extract resolvePythonSelfCall + extendTypeMapWithReceiver (gocognit, nestif)
- injectEnvBindings: extract buildConstantsList + mergeWithExistingModule (gocognit, nestif)
- TestAsyncDispatchKeywords: extract writeTestFile, createTestNode, assertEdgeType helpers (funlen)
- envscan.go: return filepath.Walk errors instead of nil (nilerr), simplify regex (gocritic)
2026-02-25 13:55:53 +01:00
Martin Vogel 97284a35fa v0.1.0: Performance, incremental indexing, async boundary detection
Performance & quality:
- Transaction wrapping (Querier interface, single tx per index run)
- Composite indexes on edges table for faster traversals
- Cypher WHERE push-down (=, CONTAINS, STARTS WITH → SQL)
- golangci-lint with 25 linters, zero violations
- 11 benchmarks for pipeline, search, and BFS

Incremental indexing:
- Content-hash based file change detection
- Dependency-aware two-level invalidation (changed + dependents)
- Stale file cleanup for deleted files

Async boundary detection:
- Project-wide env var URL scanner (Dockerfile, YAML, .tf, .sh, .env,
  TOML, properties files) with 3-layer secret exclusion
- Env var default extraction in constant propagation (getEnv, os.environ.get,
  process.env with ||/?? fallback)
- ASYNC_CALLS edge type for Cloud Tasks, Pub/Sub, SQS/SNS, RabbitMQ, Kafka
  dispatch patterns, separate from synchronous HTTP_CALLS
- Tool descriptions updated with all edge types

Other improvements:
- Type inference for method dispatch resolution
- Interface implementation detection (IMPLEMENTS edges)
- Improved tool descriptions for discoverability
2026-02-25 13:43:57 +01:00
Martin Vogel b3acbf8de2 Add comprehensive docs: troubleshooting, Cypher subset, qualified names, .cgrignore
Addresses documentation gaps found during review:
- First Use: clarify repo_path is required, document when to reindex
- Tool tables: add key parameters, scoping notes, pagination details
- New sections: Qualified Names format, Supported Cypher Subset,
  Edge Properties, .cgrignore syntax, Troubleshooting table
- Usage examples: project filter, discover-then-trace pattern, pagination
- CLAUDE.md snippet: add project scoping and discover-then-trace tips
2026-02-25 10:43:59 +01:00
Martin Vogel b86738acfb Fix setup.sh: Apple Silicon detection under Rosetta and tmpdir cleanup
- detect_platform() now checks hw.optional.arm64 sysctl on macOS to
  pick the arm64 binary even when bash runs under Rosetta (uname -m
  reports x86_64 in that case)
- Move tmpdir to a global CLEANUP_DIR so the EXIT trap does not hit
  an unbound variable error from set -u after the function returns
2026-02-25 10:19:32 +01:00
Martin Vogel 56901bec27 Fix CI: replace deprecated macos-13 with macos-15-intel
macos-13 runners were removed in Dec 2025. macos-15-intel is the
free replacement for x86_64 macOS builds (available until Aug 2027).
2026-02-25 10:14:07 +01:00
Martin Vogel 1edccf3710 Rewrite installation docs for binary-first onboarding
Lead with pre-built binary download (no toolchain needed), then setup
scripts for automation, then build-from-source for contributors.

- Add platform table with all 5 targets including linux-arm64
- Add Windows SmartScreen guidance for unsigned binary
- Document checksums.txt for integrity verification
- Credit @Flipper1994 for WSL2 workaround (closes #1)
2026-02-25 10:07:52 +01:00
Martin Vogel 3c6ad62ed0 Add cross-platform setup scripts and CI release workflow
- GitHub Actions workflow builds native binaries for 5 platforms:
  darwin-arm64, darwin-amd64, linux-amd64, linux-arm64, windows-amd64
- Windows build uses MSYS2 UCRT64 toolchain for CGO compatibility
- setup.sh: macOS/Linux installer (binary download or --from-source)
- setup-windows.ps1: Windows installer (native .exe or -FromSource via WSL)
- Both scripts offer interactive Claude Code MCP auto-configuration
- Release includes checksums.txt with SHA-256 hashes
- PS5.1-compatible JSON handling (no -AsHashtable dependency)
2026-02-25 10:07:45 +01:00
Martin Vogel fa444b0ce7 Fix .gitignore to not block cmd/ subdirectory
Anchor the binary ignore pattern to the repo root so it does not
match cmd/codebase-memory-mcp/.
2026-02-25 10:07:23 +01:00
Martin Vogel f55a029ca4 Resolve Gin route handler references and cross-file group prefixes
Extract the handler function from .POST("/path", h.Handler) registrations
and create CALLS edges from the registering function to the handler.
Resolve route group prefixes defined in separate files by scanning for
.Group() assignments and matching them to route registrations.
2026-02-25 10:07:03 +01:00
Martin Vogel f10239a004 Add offset/limit pagination to search_graph and search_code
Return total count, offset, limit, and has_more in responses so LLM
clients can page through large result sets without fetching everything.
Default limit is 100 (was unlimited).
2026-02-25 10:06:55 +01:00
Martin Vogel 809489c125 Classify Go interfaces, structs, and type aliases correctly
Use type_spec and type_alias tree-sitter nodes instead of type_declaration,
then inspect the child node kind to distinguish interface_type (→ Interface)
from struct_type (→ Class) and everything else (→ Type).

Adds tests for standalone and grouped type declarations.
2026-02-25 10:06:51 +01:00
Martin Vogel 555f874622 Add project filter, route group prefixes, decorator entry points, and remove limit caps
- search_graph: add `project` parameter to scope searches to a single project
- httplink: resolve Go gin router Group() prefixes into Route node paths
- pipeline: recognize @app.middleware, @app.exception_handler, @app.on_event as entry points
- search_graph/search_code: make `limit` optional (no default cap, no max 200)
- Fix cypher test assertions after previous SubmitOrder rename
2026-02-25 00:39:25 +01:00
Martin Vogel f63c70865e Initial release: codebase-memory-mcp v0.0.1
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.
2026-02-25 00:10:39 +01:00