Skip to content

feat(core): reverse callee index for dev_refs callers#38

Merged
prosdev merged 3 commits intomainfrom
feat/reverse-callee-index
Apr 2, 2026
Merged

feat(core): reverse callee index for dev_refs callers#38
prosdev merged 3 commits intomainfrom
feat/reverse-callee-index

Conversation

@prosdev
Copy link
Copy Markdown
Contributor

@prosdev prosdev commented Apr 2, 2026

Summary

  • Reverse callee index that maps callee names to their callers, built at index time from the same scan data as the dependency graph
  • Compound keys (file:name) for TypeScript, bare names for tree-sitter languages. Secondary name index for O(1) bare-name lookups
  • Persisted inside dependency-graph.json v2 — single atomic write, no drift between graph and reverse index
  • Replaces broken semantic-search caller detection in both CLI dev refs and MCP dev_refs adapter. Previously returned "No callers found" for every function
  • Backward compatible — v1 graph files load fine, callers just return empty

Before/After

# Before (broken)
dev refs "validateArgs"
Callers: No callers found

# After (working)
dev refs "validateArgs"
Callers:
  InspectAdapter.execute  inspect-adapter.ts:114  method
  MapAdapter.execute      map-adapter.ts:131      method
  RefsAdapter.execute     refs-adapter.ts:181     method
  SearchAdapter.execute   search-adapter.ts:124   method
  StatusAdapter.execute   status-adapter.ts:106   method

Test plan

  • pnpm build — passes
  • pnpm test — 1789 tests pass (25 new)
  • pnpm typecheck — passes
  • dev refs "validateArgs" — shows 5 adapter callers
  • dev refs "CompactFormatter" — shows constructor caller
  • dev refs "SearchAdapter" — class aggregation works
  • dev refs "startFileWatcher" — shows caller from dev-agent-mcp.ts
  • Graph file is v2 with 1698 reverse index keys, 4184 entries
  • Restart MCP server, verify dev_refs returns callers

prosdev and others added 3 commits April 2, 2026 01:54
Add reverse callee index that maps callee names to their callers.
Built at index time from the same scan data as the dependency graph,
persisted inside dependency-graph.json as v2 format (single atomic
write prevents drift). Compound keys (file:name) for TS, bare names
for tree-sitter languages. Secondary name index for O(1) bare-name
lookups. Incremental updates via updateReverseIndexIncremental.

- New module: packages/core/src/map/reverse-index.ts
- CachedGraph v1→v2 (backward compatible — v1 loads with null reverse)
- serializeGraph/deserializeGraph updated for v2
- loadOrBuildGraph returns { graph, reverseIndex }
- All callers updated: map/index.ts, cli/refs.ts, refs-adapter.ts,
  incremental-indexer.ts
- 25 new tests in reverse-index.test.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace broken semantic-search caller detection with reverse index
lookups. Both CLI refs and MCP refs adapter now use lookupCallers/
lookupClassCallers from core instead of searching for the target name
and scanning 100 candidates' callees.

- CLI refs: loads reverse index via loadOrBuildGraph, uses lookupCallers
- MCP refs adapter: caches reverse + name index alongside graph (60s TTL)
- getCallersFromIndex replaces getCallers (no more SearchService call)
- loadOrBuildGraph fallback now builds reverse index from docs
- getDependencyGraph handles missing indexer gracefully
- Updated refs-adapter tests with mock indexer for reverse index

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@prosdev prosdev merged commit 96eef41 into main Apr 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant