repo-codegraph 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +405 -2
  2. package/dist/analyzer/analyzeProject.d.ts +17 -0
  3. package/dist/analyzer/analyzeProject.d.ts.map +1 -0
  4. package/dist/analyzer/analyzeProject.js +338 -0
  5. package/dist/analyzer/analyzeProject.js.map +1 -0
  6. package/dist/analyzer/buildDefinitionGraph.d.ts +47 -0
  7. package/dist/analyzer/buildDefinitionGraph.d.ts.map +1 -0
  8. package/dist/analyzer/buildDefinitionGraph.js +60 -0
  9. package/dist/analyzer/buildDefinitionGraph.js.map +1 -0
  10. package/dist/analyzer/incrementalIndex.d.ts +21 -0
  11. package/dist/analyzer/incrementalIndex.d.ts.map +1 -0
  12. package/dist/analyzer/incrementalIndex.js +115 -0
  13. package/dist/analyzer/incrementalIndex.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +221 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/files/discoverSourceFiles.d.ts +8 -0
  19. package/dist/files/discoverSourceFiles.d.ts.map +1 -0
  20. package/dist/files/discoverSourceFiles.js +46 -0
  21. package/dist/files/discoverSourceFiles.js.map +1 -0
  22. package/dist/git/diffImpact.d.ts +22 -0
  23. package/dist/git/diffImpact.d.ts.map +1 -0
  24. package/dist/git/diffImpact.js +113 -0
  25. package/dist/git/diffImpact.js.map +1 -0
  26. package/dist/graph/DirectedGraph.d.ts +44 -0
  27. package/dist/graph/DirectedGraph.d.ts.map +1 -0
  28. package/dist/graph/DirectedGraph.js +258 -0
  29. package/dist/graph/DirectedGraph.js.map +1 -0
  30. package/dist/graph/types.d.ts +13 -0
  31. package/dist/graph/types.d.ts.map +1 -0
  32. package/dist/graph/types.js +2 -0
  33. package/dist/graph/types.js.map +1 -0
  34. package/dist/index.d.ts +19 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +12 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp/projectSession.d.ts +18 -0
  39. package/dist/mcp/projectSession.d.ts.map +1 -0
  40. package/dist/mcp/projectSession.js +86 -0
  41. package/dist/mcp/projectSession.js.map +1 -0
  42. package/dist/mcp/server.d.ts +23 -0
  43. package/dist/mcp/server.d.ts.map +1 -0
  44. package/dist/mcp/server.js +512 -0
  45. package/dist/mcp/server.js.map +1 -0
  46. package/dist/mcp/stdio.d.ts +3 -0
  47. package/dist/mcp/stdio.d.ts.map +1 -0
  48. package/dist/mcp/stdio.js +35 -0
  49. package/dist/mcp/stdio.js.map +1 -0
  50. package/dist/parser/extractDeclarations.d.ts +30 -0
  51. package/dist/parser/extractDeclarations.d.ts.map +1 -0
  52. package/dist/parser/extractDeclarations.js +83 -0
  53. package/dist/parser/extractDeclarations.js.map +1 -0
  54. package/dist/parser/parseSourceFile.d.ts +4 -0
  55. package/dist/parser/parseSourceFile.d.ts.map +1 -0
  56. package/dist/parser/parseSourceFile.js +9 -0
  57. package/dist/parser/parseSourceFile.js.map +1 -0
  58. package/dist/persistence/jsonPersistence.d.ts +7 -0
  59. package/dist/persistence/jsonPersistence.d.ts.map +1 -0
  60. package/dist/persistence/jsonPersistence.js +98 -0
  61. package/dist/persistence/jsonPersistence.js.map +1 -0
  62. package/dist/queries/analyzeImpact.d.ts +14 -0
  63. package/dist/queries/analyzeImpact.d.ts.map +1 -0
  64. package/dist/queries/analyzeImpact.js +56 -0
  65. package/dist/queries/analyzeImpact.js.map +1 -0
  66. package/dist/queries/codeGraphQueries.d.ts +7 -0
  67. package/dist/queries/codeGraphQueries.d.ts.map +1 -0
  68. package/dist/queries/codeGraphQueries.js +86 -0
  69. package/dist/queries/codeGraphQueries.js.map +1 -0
  70. package/package.json +44 -3
package/README.md CHANGED
@@ -1,3 +1,406 @@
1
- # Temporary Holding Version
1
+ # Codegraph
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Codegraph statically analyzes TypeScript repositories and exposes source-code
4
+ relationships as a directed graph. The current in-memory engine discovers source
5
+ files, parses declarations, resolves internal modules and compiler-resolvable calls,
6
+ answers graph queries, calculates reverse impact, and maps tracked Git changes to
7
+ the smallest enclosing current symbol.
8
+
9
+ ## Current capabilities
10
+
11
+ - File, function, class, interface, and method nodes with source ranges.
12
+ - `DEFINES`, `IMPORTS`, and `CALLS` edges with provenance and confidence.
13
+ - Relative imports, configured TypeScript path aliases, and barrel re-exports.
14
+ - Default, named, namespace, aliased, and side-effect import syntax.
15
+ - Direct, imported, `this`, concrete-object, injected-object, and interface calls
16
+ when TypeScript can resolve an indexed declaration.
17
+ - Symbol search, dependencies, dependents, shortest paths, reverse impact, and
18
+ Git-diff impact analysis.
19
+ - A local stdio MCP server with bounded, source-linked tools for coding agents.
20
+
21
+ ## CLI
22
+
23
+ During development:
24
+
25
+ ```bash
26
+ npm run codegraph -- index .
27
+ npm run codegraph -- find AuthService --root .
28
+ npm run codegraph -- deps AuthService.login --root .
29
+ npm run codegraph -- dependents AuthService.login --root .
30
+ npm run codegraph -- path AuthController.login TokenService.generate --root .
31
+ npm run codegraph -- impact AuthService.validateToken --root .
32
+ npm run codegraph -- diff --root .
33
+ ```
34
+
35
+ `index` writes a versioned JSON snapshot to `.codegraph/index.json`. Query
36
+ commands rebuild from source by default; pass `--graph` to explicitly reuse the
37
+ snapshot when startup speed matters:
38
+
39
+ ```bash
40
+ npm run codegraph -- index .
41
+ npm run codegraph -- find AuthService --graph .codegraph/index.json
42
+ npm run codegraph -- impact AuthService.login --graph .codegraph/index.json
43
+ ```
44
+
45
+ After source files change, update the saved index incrementally:
46
+
47
+ ```bash
48
+ npm run codegraph -- update .
49
+ ```
50
+
51
+ `update` hashes current source files, detects additions, edits, and deletions,
52
+ expands the affected set through reverse imports, replaces stale nodes and edges,
53
+ and reuses unaffected graph data. Use `--graph <file>` when the index is stored
54
+ somewhere other than `.codegraph/index.json`.
55
+
56
+ Use `--output <file>` to choose another index location. A cached graph can become
57
+ stale after source edits, so rerun `index` before relying on cached results. JSON
58
+ is used because the current workflow writes and loads the whole graph and benefits
59
+ from a portable, inspectable format. SQLite should be reconsidered when incremental
60
+ indexing requires partial updates, database indexes, transactions, or concurrent
61
+ readers.
62
+
63
+ `deps` and `dependents` follow `CALLS` for symbols and `IMPORTS` for file paths.
64
+ `path` uses BFS and therefore returns a minimum-edge path across `CALLS` and
65
+ `IMPORTS`. `impact` performs reverse BFS with cycle protection.
66
+
67
+ ## MCP for coding agents
68
+
69
+ The npm package includes a second executable, `codegraph-mcp`. It is a local
70
+ stdio process, not a hosted service: the coding agent starts it inside the
71
+ consumer repository and communicates with it using MCP messages.
72
+
73
+ Install the package in the TypeScript project that should be analyzed:
74
+
75
+ ```bash
76
+ npm install --save-dev codegraph
77
+ ```
78
+
79
+ The MCP client launches the project-local executable with:
80
+
81
+ ```bash
82
+ npx --no-install codegraph-mcp --root .
83
+ ```
84
+
85
+ `--root` identifies the repository Codegraph should index and defaults to the
86
+ process working directory. Use `--index <file>` to override the default
87
+ `.codegraph/index.json` location.
88
+
89
+ ### Codex
90
+
91
+ Run from the consumer project root:
92
+
93
+ ```bash
94
+ codex mcp add codegraph -- npx --no-install codegraph-mcp --root .
95
+ codex mcp list
96
+ ```
97
+
98
+ ### Claude Code
99
+
100
+ Run from the consumer project root:
101
+
102
+ ```bash
103
+ claude mcp add codegraph --scope project -- npx --no-install codegraph-mcp --root .
104
+ claude mcp list
105
+ ```
106
+
107
+ Claude Code stores the shared project configuration in `.mcp.json`.
108
+
109
+ ### Cursor
110
+
111
+ Create `.cursor/mcp.json` in the consumer project:
112
+
113
+ ```json
114
+ {
115
+ "mcpServers": {
116
+ "codegraph": {
117
+ "command": "npx",
118
+ "args": ["--no-install", "codegraph-mcp", "--root", "."]
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ Restart Cursor after adding the configuration.
125
+
126
+ ### Other MCP clients
127
+
128
+ Any MCP client that supports local stdio servers can use the same executable.
129
+ The configuration filename and location depend on the client, but the common
130
+ configuration shape is:
131
+
132
+ ```json
133
+ {
134
+ "mcpServers": {
135
+ "codegraph": {
136
+ "command": "npx",
137
+ "args": ["--no-install", "codegraph-mcp", "--root", "."]
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ The server exposes a deliberately small surface:
144
+
145
+ | Tool | Purpose |
146
+ | --- | --- |
147
+ | `find_symbol` | Resolve a name to stable node IDs and source ranges. |
148
+ | `get_dependencies` | Follow immediate outgoing `CALLS` or `IMPORTS`. |
149
+ | `get_dependents` | Follow immediate incoming `CALLS` or `IMPORTS`. |
150
+ | `find_path` | Find a bounded minimum-edge path between two nodes. |
151
+ | `analyze_impact` | Calculate bounded direct and transitive reverse impact. |
152
+ | `analyze_diff` | Map the tracked Git diff to symbols and blast radius. |
153
+ | `refresh_index` | Refresh the in-memory graph and persisted JSON index. |
154
+
155
+ All query tools are read-only. Results include repository-relative source paths
156
+ and ranges so an agent can read only the relevant code with its normal file
157
+ tools. Limits and depth bounds prevent dumping the complete graph into model
158
+ context. The server builds a fresh in-memory graph on the first query; agents
159
+ should call `refresh_index` after editing source files.
160
+
161
+ To make tool selection more reliable, add equivalent instructions to
162
+ `AGENTS.md`, `CLAUDE.md`, or the MCP client's project rules:
163
+
164
+ ```md
165
+ Use the CodeGraph MCP tools when investigating this TypeScript codebase.
166
+
167
+ Before modifying an existing symbol:
168
+
169
+ 1. Use `find_symbol` to locate it.
170
+ 2. Use `get_dependencies` to understand what it uses.
171
+ 3. Use `get_dependents` or `analyze_impact` to identify what could break.
172
+ 4. After editing source files, call `refresh_index`.
173
+ 5. Use `analyze_diff` to review the impact of the changes.
174
+
175
+ Prefer concise CodeGraph results over reading unrelated files.
176
+ ```
177
+
178
+ Applications embedding Codegraph can also construct the server themselves and
179
+ connect any MCP transport:
180
+
181
+ ```ts
182
+ import { createCodeGraphMcpServer } from "codegraph/mcp";
183
+
184
+ const server = createCodeGraphMcpServer({ rootDirectory: process.cwd() });
185
+ ```
186
+
187
+ ## Static-analysis limits
188
+
189
+ - Dynamic element calls such as `handlers[type]()` may remain unresolved.
190
+ - Calls inside arrow functions and anonymous function expressions are not assigned
191
+ to a caller node yet because those declarations are not modeled.
192
+ - Interface dispatch points to the compile-time interface method with `inferred`
193
+ confidence; it does not guess a runtime implementation.
194
+ - Package and standard-library targets are intentionally outside the project graph.
195
+ - Multiple calls between the same two symbols currently produce one `CALLS` edge.
196
+ - Overloads and declaration merging can collide under the current syntax-derived
197
+ symbol IDs and need semantic identity work.
198
+ - `codegraph diff` analyzes tracked changes relative to `HEAD`. Untracked files and
199
+ deleted symbols are not recoverable from the current AST, and changed lines outside
200
+ modeled declarations are reported as unmapped.
201
+ - Query commands rebuild from source unless `--graph` explicitly selects a persisted
202
+ JSON index. `update` performs incremental graph replacement, but it still creates a
203
+ fresh project-wide TypeScript Program so semantic resolution remains correct.
204
+
205
+ ## The graph model
206
+
207
+ A **node** (or vertex) represents an entity. An **edge** represents a relationship
208
+ between two nodes. In a directed graph, the arrow has meaning:
209
+
210
+ ```text
211
+ AuthController.login --CALLS--> AuthService.login --CALLS--> TokenService.generate
212
+ ```
213
+
214
+ The first method calls—and therefore depends on—the second. If `A -> B` means A
215
+ depends on B, `dependencies(A)` follows outgoing arrows and `dependents(B)` follows
216
+ incoming arrows backward. These queries answer different questions:
217
+
218
+ ```text
219
+ dependencies(AuthController.login) = [AuthService.login]
220
+ dependents(AuthService.login) = [AuthController.login]
221
+ ```
222
+
223
+ An **outgoing edge** starts at the node being examined; an **incoming edge** ends
224
+ there. An **adjacency list** stores each node beside its outgoing relationships. A
225
+ **reverse adjacency list** stores incoming relationships too. A **traversal** visits
226
+ reachable nodes by following edges. A **cycle** is a path that returns to an already
227
+ visited node, such as `A -> B -> C -> A`. Nodes are **disconnected** when no path in
228
+ the chosen direction connects them; a traversal from one component cannot visit
229
+ another.
230
+
231
+ A directed graph fits Codegraph because relationships such as `CALLS`, `IMPORTS`,
232
+ and `EXTENDS` are directional. Who a function calls and who calls that function are
233
+ both important, but they are not interchangeable.
234
+
235
+ ## Representation choice
236
+
237
+ Let `V` be the number of nodes and `E` the number of edges.
238
+
239
+ | Representation | Storage | Add edge | Get outgoing neighbors | Good fit? |
240
+ | --- | ---: | ---: | ---: | --- |
241
+ | Adjacency matrix | `O(V²)` | `O(1)` | `O(V)` | Fast edge checks, but wasteful for sparse graphs |
242
+ | Adjacency list | `O(V + E)` | expected `O(1)` | `O(out-degree)` | Best fit for Codegraph |
243
+ | Edge list | `O(E)` | `O(1)` | `O(E)` | Simple storage, slow relationship queries |
244
+
245
+ Source-code graphs are generally sparse: each symbol relates to a small fraction
246
+ of all symbols. An adjacency list stores relationships that actually exist. This
247
+ implementation stores both outgoing and reverse adjacency, using more memory—each
248
+ edge is indexed twice—to make both dependencies and dependents efficient.
249
+
250
+ The nested shape is:
251
+
252
+ ```text
253
+ Map<node id, Map<neighbor id, Map<edge type, edge>>>
254
+ ```
255
+
256
+ The final map makes `(from, to, type)` the edge identity. Thus duplicate `CALLS`
257
+ edges are rejected, while `A --CALLS--> B` and `A --IMPORTS--> B` can coexist.
258
+ `Map` also preserves insertion order, producing deterministic traversal results.
259
+
260
+ Approximate operation costs are:
261
+
262
+ | Operation | Time | Extra space |
263
+ | --- | ---: | ---: |
264
+ | Add node | expected `O(1)` | `O(1)` |
265
+ | Add edge | expected `O(1)` | `O(1)` (indexed twice) |
266
+ | Get dependencies | `O(out-neighbors)` | output size |
267
+ | Get dependents | `O(in-neighbors)` | output size |
268
+ | BFS / DFS | `O(V + E)` reachable | `O(V)` reachable |
269
+ | Find path with BFS | `O(V + E)` reachable | `O(V)` reachable |
270
+
271
+ An adjacency matrix would be worth reconsidering only for a small, very dense graph
272
+ where constant-time arbitrary edge checks dominate. An edge list may be useful as a
273
+ serialization format later, but is not a good query index.
274
+
275
+ ## Types and TypeScript concepts
276
+
277
+ `GraphNode<NodeData>` separates stable identity (`id`) from domain data. Later,
278
+ `NodeData` can describe a file or symbol without teaching the graph engine those
279
+ concepts. `GraphEdge<EdgeType, EdgeData>` stores direction, relationship type, and
280
+ optional metadata. Later, edge data might hold source location or resolution status.
281
+
282
+ `DirectedGraph<NodeData, EdgeType, EdgeData>` introduces only three useful generics:
283
+
284
+ - `NodeData`: the application-specific node payload; defaults to `unknown`.
285
+ - `EdgeType extends string`: restricts relationships to string names while allowing
286
+ a union such as `"CALLS" | "IMPORTS"`.
287
+ - `EdgeData`: optional relationship metadata; defaults to `unknown`.
288
+
289
+ `unknown` is safer than `any`: consumers must narrow it before using it. `readonly`
290
+ prevents mutation through these public types, although it is shallow and does not
291
+ deep-freeze nested objects. `Map<K, V>` associates unique keys with values; `Set<T>`
292
+ stores unique values and is used by traversals to remember visited node IDs.
293
+
294
+ ## Behavioral decisions
295
+
296
+ - Duplicate node IDs throw. Silent overwrite could hide a symbol-ID bug.
297
+ - Edges require both endpoints to exist. This keeps every adjacency entry valid.
298
+ - Duplicate `(from, to, type)` edges throw. Different edge types may coexist.
299
+ - Neighbor and dependency queries return unique destination nodes, even if several
300
+ edge types connect the same pair.
301
+ - `getNode` returns `undefined` when absent, matching normal `Map.get` semantics.
302
+ - Operations that require an existing node throw for a missing ID.
303
+ - Self-edges are allowed. The generic engine models facts; later domain layers can
304
+ decide whether a particular self-relationship is meaningful.
305
+ - `findPath(A, A)` returns `[A]`, the valid zero-edge path from a node to itself.
306
+
307
+ ## Important code path walkthrough
308
+
309
+ ### 1. Types
310
+
311
+ [`src/graph/types.ts`](src/graph/types.ts) defines generic nodes and edges. They know
312
+ nothing about source files, functions, ASTs, or Codegraph-specific relationships.
313
+
314
+ ### 2. Internal data structures
315
+
316
+ [`src/graph/DirectedGraph.ts`](src/graph/DirectedGraph.ts) holds a node `Map` and two
317
+ adjacency maps. Their `private` modifier hides implementation details. Their
318
+ `readonly` modifier prevents assigning a different map to a field; the contents of
319
+ the existing map intentionally remain mutable.
320
+
321
+ ### 3. `addNode`
322
+
323
+ `addNode` checks `nodes.has(id)`, stores the node, and creates empty outgoing and
324
+ incoming buckets. Creating all three together maintains the graph invariant. The
325
+ expected time and added space are both `O(1)`.
326
+
327
+ ### 4. `addEdge`
328
+
329
+ `addEdge` first validates both endpoints. It indexes the same immutable edge object
330
+ under the source's outgoing map and destination's incoming map. A nested map lookup
331
+ detects duplicates without building a delimiter-based string key (which could have
332
+ escaping or collision problems). Expected insertion time is `O(1)`.
333
+
334
+ ### 5. Outgoing adjacency
335
+
336
+ For `A -> B`, the outgoing index stores B under A. Reading A's keys therefore gives
337
+ its direct dependencies. Multiple edge types to B live one level deeper and do not
338
+ duplicate B in node-level queries.
339
+
340
+ ### 6. Reverse adjacency
341
+
342
+ The incoming index stores A under B for the same edge. Without it, finding B's
343
+ dependents would scan every edge, costing `O(E)`. The tradeoff is a second index and
344
+ therefore `O(E)` additional references.
345
+
346
+ ### 7. Dependencies and dependents
347
+
348
+ `getDependencies` reads outgoing neighbor IDs; `getDependents` reads incoming IDs.
349
+ Both translate IDs back to nodes. Work is proportional to the number of direct
350
+ neighbors returned.
351
+
352
+ ### 8. BFS
353
+
354
+ Breadth-first search uses a first-in, first-out queue, so it visits all nodes one edge
355
+ away before nodes two edges away. `nextIndex` advances through an array instead of
356
+ calling `shift()`, which would repeatedly move remaining elements. Nodes enter the
357
+ visited `Set` when enqueued, preventing duplicates and guaranteeing termination on
358
+ cycles. Across the reachable graph, time is `O(V + E)` and space is `O(V)`.
359
+
360
+ ### 9. DFS
361
+
362
+ Depth-first search uses an explicit last-in, first-out stack rather than recursion.
363
+ This avoids overflowing JavaScript's call stack on a deep repository graph. Neighbors
364
+ are pushed in reverse so the earliest inserted neighbor is visited first. DFS has the
365
+ same asymptotic bounds as BFS, but explores deeply before returning to siblings.
366
+ Neither order is universally better; they answer different traversal needs.
367
+
368
+ ### 10. `findPath`
369
+
370
+ Path search uses BFS, which finds a minimum-edge path in an unweighted graph. When B
371
+ is first discovered from A it records `parent[B] = A`. On reaching the target, it
372
+ walks parents backward and reverses the result. A parent map is more memory-efficient
373
+ than copying a complete path into every queue entry. Time is `O(V + E)` and auxiliary
374
+ space is `O(V)` over reachable nodes.
375
+
376
+ ### 11. Tests
377
+
378
+ [`test/DirectedGraph.test.ts`](test/DirectedGraph.test.ts) covers nodes, duplicate and
379
+ invalid edges, multiple relationship types, self-edges, directionality, deterministic
380
+ BFS/DFS, cycles, disconnected components, shortest paths, missing paths, and the
381
+ zero-edge path. Node's built-in test runner supplies test organization and assertions;
382
+ Node loads the TypeScript files through `tsx` without a separate test framework.
383
+
384
+ ## Run it
385
+
386
+ ```bash
387
+ npm install
388
+ npm test
389
+ npm run check
390
+ npm run build
391
+ npm run example
392
+ ```
393
+
394
+ ## Understanding check
395
+
396
+ 1. If `A -> B` means A depends on B, what do `getDependencies("A")` and
397
+ `getDependents("B")` each return?
398
+ 2. Why does this implementation pay the memory cost of an incoming adjacency map?
399
+ 3. Why does adding a duplicate node throw instead of overwrite?
400
+ 4. Why is an edge identified by `from + to + type`, rather than only `from + to`?
401
+ 5. Why must both endpoint nodes exist before adding an edge?
402
+ 6. What different jobs do `Map` and `Set` perform here?
403
+ 7. Why is a node marked visited when BFS enqueues it rather than when it is removed?
404
+ 8. Why does BFS produce a shortest path by edge count in this unweighted graph?
405
+ 9. Why can iterative DFS be safer than recursive DFS for a large codebase?
406
+ 10. Why do BFS and DFS take `O(V + E)` time and `O(V)` extra space in the worst case?
@@ -0,0 +1,17 @@
1
+ import { type CodeGraph } from "./buildDefinitionGraph.js";
2
+ export type AnalysisDiagnosticKind = "compiler" | "unresolved-import" | "external-import" | "unresolved-call" | "external-call" | "unmodeled-caller" | "ambiguous-call";
3
+ export interface AnalysisDiagnostic {
4
+ readonly kind: AnalysisDiagnosticKind;
5
+ readonly message: string;
6
+ readonly file: string | null;
7
+ readonly line: number | null;
8
+ readonly column: number | null;
9
+ }
10
+ export interface ProjectAnalysis {
11
+ readonly rootDirectory: string;
12
+ readonly graph: CodeGraph;
13
+ readonly diagnostics: readonly AnalysisDiagnostic[];
14
+ readonly fileHashes: Readonly<Record<string, string>>;
15
+ }
16
+ export declare function analyzeProject(rootDirectory: string): Promise<ProjectAnalysis>;
17
+ //# sourceMappingURL=analyzeProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeProject.d.ts","sourceRoot":"","sources":["../../src/analyzer/analyzeProject.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,SAAS,EAIf,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,sBAAsB,GAC9B,UAAU,GACV,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CA+C1B"}