Home

giogio / openez-graph

public
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

fix(indexer): merge parser results into lazy graph, scope caches by workspace

3 months ago

17cf60e
Authored
asta-nguyen8/7/2026, 2:50:56 AM
- Rewrite buildGraphForWorkspace(workspaceId, rootPath) to parse all document
  kinds (TS/JS via OxcParser, Python/Go/Rust via native or parseDocument
  fallback, Markdown/config via parseDocument) instead of skipping TS/JS
- Fix waitForFts to accept workspaceId instead of deriving path.basename
- Replace _graphBuiltWorkspaces Set with race-safe graphBuilds Map<string,
  Promise<void>> for concurrent-call deduplication
- Add clearGraphArtifacts() to WorkspaceRepository for graph-only reset
- Add invalidateGraphForWorkspace() called on full mode, deleted documents,
  and changed files during indexing
- Set symbol node refId to matching chunk ID via JSON.parse(metadata).symbolName
  instead of pointing at document ID
- Add import edge resolution via createWorkspaceFileResolver
- Fix OxcParser extractSymbols to handle ExportNamedDeclaration before
  getNodeId check (was skipping all exported declarations)
- Bound large OxcParser symbol chunks via boundChunks in parseInline
- Add better-sqlite3 fallback to database-loader for vitest/node compatibility
- Fix getWorkspaceDb cache return value (was returning .db property of
  drizzle instance instead of the instance itself)
- Update MCP callers to pass w.id and w.rootPath to buildGraphForWorkspace
- Add 7 new graph tests: TS nodes/chunks, imports edge, same-basename
  isolation, concurrent builds, stale edge invalidation, waitForFts

Parent241b600

10 files changed
  • apps/mcp/src/mcp-core.ts+3−3
  • package.json+2−0
  • packages/db/src/sqlite/database-loader.ts+64−27
  • packages/db/src/sqlite/repository.ts+5−0
  • packages/db/src/sqlite/types.ts+5−0
  • packages/db/src/sqlite/workspace-db.ts+1−1
  • packages/indexer/src/index-workspace.ts+275−65
  • packages/indexer/src/parsers/oxc-parser.ts+23
−19
  • pnpm-lock.yaml+8−10
  • tests/index-workspace.test.ts+222−1