- Implemented `tools-codegraph.ts` to provide various queries on the codebase dependency graph, including impact analysis, dead code detection, module boundaries, and more. - Created a schema for validating query inputs using Zod. - Developed helper functions for resolving file paths, formatting output, and handling different query types. - Added tests for the codegraph queries in `codegraph-queries.test.ts` to ensure functionality and correctness. - Introduced tests for the codegraph scanning and loading functionalities in `codegraph.test.ts`, verifying the detection of source files, imports, exports, circular dependencies, and entry points.
2.6 KiB
Codebase Graph
A pre-computed dependency graph built via static analysis (TypeScript compiler API). It gives the agent an immediate map of the codebase at session start — no exploration turns needed.
How it works
When a session starts, shiro-neko scans all .ts/.tsx files using the TypeScript
compiler API. It resolves imports, exports, types, classes, and functions, and
builds a directed dependency graph. The result is cached to .shiro/codegraph.json.
On subsequent sessions, if no source files have changed (mtime check), the cached graph is reused. This means the system prompt includes the architecture overview from the very first turn.
What it contains
- Entry points: files the graph identifies as starting points (few imports,
main()export, CLI-like) - Module map: directory → file count → key file names
- Key types: the most frequently defined exported types/interfaces
- Circular dependencies: any cycles detected in the import graph
- Total LOC: total lines across all source files
System prompt integration
The graph summary appears in the system prompt as a "Codebase Architecture" section, right after the Environment block and before Tools. This means the agent knows the project structure before making a single tool call.
Querying the graph
Use the codegraph tool for detailed queries:
codegraph query: 'summary'— the same overview in the system promptcodegraph query: 'list'— all files with kind and LOCcodegraph query: 'file', path: 'src/session.ts'— detailed info for one filecodegraph query: 'deps', path: 'session'— what it imports and what imports itcodegraph query: 'types'— all exported types across the codebasecodegraph query: 'circular'— circular dependency chainscodegraph query: 'entry'— detected entry points
Commands
/graph — force-regenerate the graph and show the summary.
Architecture decisions
- TypeScript compiler API over regex parsing: handles re-exports, type-only imports, and module resolution correctly. Falls back to manual file walk if no tsconfig.json exists.
- Mtime-based freshness: recompute only when a source file has been modified since the
graph was generated. The check walks all source files (same as the scan) — for huge
codebases, add a
--no-graphflag to skip. - Lazy computation: the graph is computed once per session, not per step. The
Sessioncaches it in a field and the prompt is built from it. - Graceful fallback: non-TypeScript projects, unreadable directories, or scan failures silently omit the section from the prompt rather than breaking the session.