repo-codegraph 0.1.0 → 0.2.1
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.
- package/README.md +57 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +30 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/visualization/viewer.d.ts +17 -0
- package/dist/visualization/viewer.d.ts.map +1 -0
- package/dist/visualization/viewer.js +349 -0
- package/dist/visualization/viewer.js.map +1 -0
- package/package.json +12 -1
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@ files, parses declarations, resolves internal modules and compiler-resolvable ca
|
|
|
6
6
|
answers graph queries, calculates reverse impact, and maps tracked Git changes to
|
|
7
7
|
the smallest enclosing current symbol.
|
|
8
8
|
|
|
9
|
+

|
|
10
|
+
|
|
9
11
|
## Current capabilities
|
|
10
12
|
|
|
11
13
|
- File, function, class, interface, and method nodes with source ranges.
|
|
@@ -17,6 +19,8 @@ the smallest enclosing current symbol.
|
|
|
17
19
|
- Symbol search, dependencies, dependents, shortest paths, reverse impact, and
|
|
18
20
|
Git-diff impact analysis.
|
|
19
21
|
- A local stdio MCP server with bounded, source-linked tools for coding agents.
|
|
22
|
+
- A local, interactive force-directed visualization with search, filters, and
|
|
23
|
+
focused dependency neighborhoods.
|
|
20
24
|
|
|
21
25
|
## CLI
|
|
22
26
|
|
|
@@ -30,6 +34,7 @@ npm run codegraph -- dependents AuthService.login --root .
|
|
|
30
34
|
npm run codegraph -- path AuthController.login TokenService.generate --root .
|
|
31
35
|
npm run codegraph -- impact AuthService.validateToken --root .
|
|
32
36
|
npm run codegraph -- diff --root .
|
|
37
|
+
npm run codegraph -- visualize .
|
|
33
38
|
```
|
|
34
39
|
|
|
35
40
|
`index` writes a versioned JSON snapshot to `.codegraph/index.json`. Query
|
|
@@ -42,6 +47,42 @@ npm run codegraph -- find AuthService --graph .codegraph/index.json
|
|
|
42
47
|
npm run codegraph -- impact AuthService.login --graph .codegraph/index.json
|
|
43
48
|
```
|
|
44
49
|
|
|
50
|
+
After indexing, open the interactive network in the default browser:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run codegraph -- visualize .
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The viewer reads `.codegraph/index.json`, binds only to `127.0.0.1`, and contains
|
|
57
|
+
no CDN scripts or hosted services, so the graph stays on the user's machine.
|
|
58
|
+
Use `--graph <file>` for a custom index, `--port <number>` for a fixed port, or
|
|
59
|
+
`--no-open` to print the URL without launching a browser. Scroll to zoom, drag
|
|
60
|
+
to pan, search by file or symbol, filter relationship types, and click a node to
|
|
61
|
+
focus on its immediate incoming and outgoing neighborhood.
|
|
62
|
+
Hovering over a node reveals its file or symbol name without permanently
|
|
63
|
+
cluttering the graph with labels.
|
|
64
|
+
|
|
65
|
+
To create a self-contained file that can be opened in an IDE HTML preview,
|
|
66
|
+
export the same visualization instead of starting the local server:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npm run codegraph -- visualize . --output .codegraph/visualization.html
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
All graph data, styles, and interaction code are embedded in the generated HTML;
|
|
73
|
+
it does not fetch the index or load scripts from the network.
|
|
74
|
+
|
|
75
|
+
The **Ask Codegraph** box supports local graph questions such as “What calls
|
|
76
|
+
`analyzeProject`?”, “What does `runCli` call?”, “What imports `server.ts`?”, and
|
|
77
|
+
“Where is `ProjectSession` defined?”. It matches the question to indexed files
|
|
78
|
+
and symbols, selects the relevant relationship and direction, focuses the graph,
|
|
79
|
+
and lists connected nodes. This is deterministic graph querying rather than an
|
|
80
|
+
LLM, so it does not send repository data to an external service.
|
|
81
|
+
Source paths in node details and question results are IDE deep links; clicking
|
|
82
|
+
one opens the indexed file at its source line in VS Code-compatible editors.
|
|
83
|
+
Change-impact questions use incoming `CALLS` relationships, so they show callers
|
|
84
|
+
that may be affected rather than functions the changed symbol itself depends on.
|
|
85
|
+
|
|
45
86
|
After source files change, update the saved index incrementally:
|
|
46
87
|
|
|
47
88
|
```bash
|
|
@@ -202,6 +243,22 @@ const server = createCodeGraphMcpServer({ rootDirectory: process.cwd() });
|
|
|
202
243
|
JSON index. `update` performs incremental graph replacement, but it still creates a
|
|
203
244
|
fresh project-wide TypeScript Program so semantic resolution remains correct.
|
|
204
245
|
|
|
246
|
+
## Releasing
|
|
247
|
+
|
|
248
|
+
The first npm release was published manually. Subsequent versions publish
|
|
249
|
+
automatically when a GitHub Release is published. Before creating the release:
|
|
250
|
+
|
|
251
|
+
1. Update `version` in `package.json` and `package-lock.json`.
|
|
252
|
+
2. Merge that version change to `main`.
|
|
253
|
+
3. Create and publish a GitHub Release whose tag is exactly `v<version>` (for
|
|
254
|
+
example, package version `0.2.0` requires tag `v0.2.0`).
|
|
255
|
+
|
|
256
|
+
The release workflow verifies the tag, installs from the lockfile, runs the type
|
|
257
|
+
check, tests, and build, then publishes the public package to npm. The npm package
|
|
258
|
+
must have `.github/workflows/publish.yml` configured as a GitHub Actions trusted
|
|
259
|
+
publisher for repository `RuchiPurohit/codegraph` with direct `npm publish`
|
|
260
|
+
allowed. No long-lived npm token is required.
|
|
261
|
+
|
|
205
262
|
## The graph model
|
|
206
263
|
|
|
207
264
|
A **node** (or vertex) represents an entity. An **edge** represents a relationship
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAwBA,wBAAsB,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgK3E"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
|
-
import { analyzeDiffImpact, analyzeImpact, analyzeProject, defaultIndexPath, findCodePath, findSymbols, getCodeDependencies, getCodeDependents, loadProjectAnalysis, readGitDiff, saveProjectAnalysis, updateProjectIndex, } from "./index.js";
|
|
4
|
+
import { analyzeDiffImpact, analyzeImpact, analyzeProject, defaultIndexPath, findCodePath, findSymbols, getCodeDependencies, getCodeDependents, loadProjectAnalysis, readGitDiff, saveProjectAnalysis, startVisualizationServer, writeVisualizationDocument, updateProjectIndex, } from "./index.js";
|
|
5
5
|
export async function runCli(arguments_) {
|
|
6
6
|
const options = parseOptions(arguments_);
|
|
7
7
|
const [command, ...operands] = options.operands;
|
|
@@ -24,6 +24,24 @@ export async function runCli(arguments_) {
|
|
|
24
24
|
console.log(`Saved: ${path.resolve(indexPath)}`);
|
|
25
25
|
return 0;
|
|
26
26
|
}
|
|
27
|
+
if (command === "visualize") {
|
|
28
|
+
const visualizationRoot = operands[0] ?? options.rootDirectory;
|
|
29
|
+
const indexPath = options.graphFile ?? defaultIndexPath(visualizationRoot);
|
|
30
|
+
const analysis = await loadProjectAnalysis(indexPath);
|
|
31
|
+
if (options.outputFile !== undefined) {
|
|
32
|
+
const outputPath = await writeVisualizationDocument(analysis, options.outputFile);
|
|
33
|
+
console.log(`Codegraph visualization saved: ${outputPath}`);
|
|
34
|
+
console.log(`Index: ${path.resolve(indexPath)}`);
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
const visualization = await startVisualizationServer(analysis, options.port === undefined
|
|
38
|
+
? { openBrowser: options.openBrowser }
|
|
39
|
+
: { port: options.port, openBrowser: options.openBrowser });
|
|
40
|
+
console.log(`Codegraph visualization: ${visualization.url}`);
|
|
41
|
+
console.log(`Index: ${path.resolve(indexPath)}`);
|
|
42
|
+
console.log("Press Ctrl+C to stop.");
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
27
45
|
const analysis = command !== "index" && options.graphFile !== undefined
|
|
28
46
|
? await loadProjectAnalysis(options.graphFile)
|
|
29
47
|
: await analyzeProject(effectiveRoot);
|
|
@@ -127,7 +145,16 @@ function parseOptions(arguments_) {
|
|
|
127
145
|
const rootDirectory = takeOption(result, "--root") ?? process.cwd();
|
|
128
146
|
const graphFile = takeOption(result, "--graph");
|
|
129
147
|
const outputFile = takeOption(result, "--output");
|
|
130
|
-
|
|
148
|
+
const portValue = takeOption(result, "--port");
|
|
149
|
+
const port = portValue === undefined ? undefined : Number(portValue);
|
|
150
|
+
if (port !== undefined && (!Number.isInteger(port) || port < 0 || port > 65_535)) {
|
|
151
|
+
throw new Error("--port must be an integer between 0 and 65535");
|
|
152
|
+
}
|
|
153
|
+
const noOpenIndex = result.indexOf("--no-open");
|
|
154
|
+
const openBrowser = noOpenIndex === -1;
|
|
155
|
+
if (noOpenIndex !== -1)
|
|
156
|
+
result.splice(noOpenIndex, 1);
|
|
157
|
+
return { operands: result, rootDirectory, graphFile, outputFile, port, openBrowser };
|
|
131
158
|
}
|
|
132
159
|
function takeOption(arguments_, option) {
|
|
133
160
|
const index = arguments_.indexOf(option);
|
|
@@ -205,6 +232,7 @@ function printUsage() {
|
|
|
205
232
|
" codegraph path <source> <target> [--root <directory> | --graph <file>]",
|
|
206
233
|
" codegraph impact <symbol> [--root <directory> | --graph <file>]",
|
|
207
234
|
" codegraph diff [--root <directory> | --graph <file>]",
|
|
235
|
+
" codegraph visualize [root] [--graph <file>] [--output <html>] [--port <number>] [--no-open]",
|
|
208
236
|
].join("\n"));
|
|
209
237
|
}
|
|
210
238
|
const invokedPath = process.argv[1];
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,4 +16,6 @@ export { CODEGRAPH_JSON_SCHEMA_VERSION, deserializeProjectAnalysis, loadProjectA
|
|
|
16
16
|
export { analyzeImpact } from "./queries/analyzeImpact.js";
|
|
17
17
|
export type { ImpactOptions, ImpactResult, } from "./queries/analyzeImpact.js";
|
|
18
18
|
export { findCodePath, findSymbols, getCodeDependencies, getCodeDependents, } from "./queries/codeGraphQueries.js";
|
|
19
|
+
export { createVisualizationDocument, startVisualizationServer, writeVisualizationDocument, } from "./visualization/viewer.js";
|
|
20
|
+
export type { VisualizationServer, VisualizationServerOptions, } from "./visualization/viewer.js";
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,WAAW,EACX,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,2BAA2B,EAC3B,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,cAAc,GACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EACV,aAAa,EACb,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,WAAW,EACX,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,2BAA2B,EAC3B,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,cAAc,GACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EACV,aAAa,EACb,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export { parseSourceFile } from "./parser/parseSourceFile.js";
|
|
|
9
9
|
export { CODEGRAPH_JSON_SCHEMA_VERSION, deserializeProjectAnalysis, loadProjectAnalysis, saveProjectAnalysis, serializeProjectAnalysis, } from "./persistence/jsonPersistence.js";
|
|
10
10
|
export { analyzeImpact } from "./queries/analyzeImpact.js";
|
|
11
11
|
export { findCodePath, findSymbols, getCodeDependencies, getCodeDependents, } from "./queries/codeGraphQueries.js";
|
|
12
|
+
export { createVisualizationDocument, startVisualizationServer, writeVisualizationDocument, } from "./visualization/viewer.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAe5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAOtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAe5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAOtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Server } from "node:http";
|
|
2
|
+
import type { ProjectAnalysis } from "../analyzer/analyzeProject.js";
|
|
3
|
+
export interface VisualizationServerOptions {
|
|
4
|
+
readonly host?: string;
|
|
5
|
+
readonly port?: number;
|
|
6
|
+
readonly openBrowser?: boolean;
|
|
7
|
+
readonly openSource?: (uri: string) => void | Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface VisualizationServer {
|
|
10
|
+
readonly server: Server;
|
|
11
|
+
readonly url: string;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createVisualizationDocument(analysis: ProjectAnalysis, openMode?: "ide" | "server"): string;
|
|
15
|
+
export declare function writeVisualizationDocument(analysis: ProjectAnalysis, outputPath: string): Promise<string>;
|
|
16
|
+
export declare function startVisualizationServer(analysis: ProjectAnalysis, options?: VisualizationServerOptions): Promise<VisualizationServer>;
|
|
17
|
+
//# sourceMappingURL=viewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../src/visualization/viewer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,QAAQ,GAAE,KAAK,GAAG,QAAgB,GACjC,MAAM,CAiQR;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,mBAAmB,CAAC,CA2D9B"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { createServer } from "node:http";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
export function createVisualizationDocument(analysis, openMode = "ide") {
|
|
6
|
+
const payload = JSON.stringify({
|
|
7
|
+
rootDirectory: analysis.rootDirectory,
|
|
8
|
+
nodes: analysis.graph.getNodes(),
|
|
9
|
+
edges: analysis.graph.getEdges(),
|
|
10
|
+
openMode,
|
|
11
|
+
}).replaceAll("<", "\\u003c");
|
|
12
|
+
return `<!doctype html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="utf-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
17
|
+
<title>Codegraph</title>
|
|
18
|
+
<style>
|
|
19
|
+
:root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, sans-serif; }
|
|
20
|
+
* { box-sizing: border-box; }
|
|
21
|
+
body { margin: 0; overflow: hidden; background: #0d0e17; color: #f5f6fb; }
|
|
22
|
+
canvas { display: block; width: 100vw; height: 100vh; cursor: grab; }
|
|
23
|
+
canvas.dragging { cursor: grabbing; }
|
|
24
|
+
.panel { position: fixed; z-index: 2; background: rgba(18,20,32,.92); border: 1px solid #30344b; border-radius: 12px; box-shadow: 0 16px 48px #0008; backdrop-filter: blur(12px); }
|
|
25
|
+
#controls { top: 16px; left: 16px; width: min(340px, calc(100vw - 32px)); padding: 16px; }
|
|
26
|
+
h1 { font-size: 18px; margin: 0 0 4px; }
|
|
27
|
+
.subtitle, .hint { color: #9da4bd; font-size: 12px; }
|
|
28
|
+
input[type=search] { width: 100%; margin: 14px 0 10px; padding: 10px 12px; color: inherit; background: #0d0e17; border: 1px solid #3b405b; border-radius: 8px; outline: none; }
|
|
29
|
+
input[type=search]:focus { border-color: #74b9ff; }
|
|
30
|
+
.ask-row { display: flex; gap: 7px; margin: 12px 0 8px; }
|
|
31
|
+
#question { flex: 1; min-width: 0; padding: 9px 10px; color: inherit; background: #0d0e17; border: 1px solid #3b405b; border-radius: 8px; outline: none; }
|
|
32
|
+
#question:focus { border-color: #74b9ff; }
|
|
33
|
+
#ask { margin: 0; }
|
|
34
|
+
#answer { display: none; margin: 0 0 12px; padding: 9px 10px; border-radius: 8px; background: #191c2c; color: #cbd0e2; font-size: 12px; line-height: 1.4; max-height: 130px; overflow: auto; }
|
|
35
|
+
#answer.visible { display: block; }
|
|
36
|
+
#answer button { display: block; width: 100%; margin: 4px 0 0; padding: 4px 6px; text-align: left; border: 0; background: transparent; color: #7fc8ff; }
|
|
37
|
+
#answer .result { display: flex; align-items: center; gap: 6px; }
|
|
38
|
+
#answer .result button { flex: 1; width: auto; }
|
|
39
|
+
a.source-link { color: #7fc8ff; text-decoration: none; }
|
|
40
|
+
a.source-link:hover { text-decoration: underline; }
|
|
41
|
+
#answer a.source-link { flex: none; font-size: 11px; white-space: nowrap; }
|
|
42
|
+
.filters { display: flex; flex-wrap: wrap; gap: 10px 14px; font-size: 12px; }
|
|
43
|
+
.legend-title { margin: 12px 0 7px; color: #9da4bd; font-size: 11px; text-transform: uppercase; letter-spacing: .08em; }
|
|
44
|
+
.node-legend { display: grid; grid-template-columns: repeat(3, max-content); gap: 7px 14px; color: #d8dbea; font-size: 12px; }
|
|
45
|
+
.node-legend span { display: flex; align-items: center; gap: 6px; }
|
|
46
|
+
label { display: flex; align-items: center; gap: 6px; }
|
|
47
|
+
.swatch { width: 9px; height: 9px; border-radius: 50%; }
|
|
48
|
+
button { margin-top: 12px; padding: 7px 10px; border: 1px solid #3b405b; border-radius: 7px; background: #252941; color: inherit; cursor: pointer; }
|
|
49
|
+
button:hover { background: #303651; }
|
|
50
|
+
#details { right: 16px; top: 16px; width: min(360px, calc(100vw - 32px)); padding: 16px; display: none; }
|
|
51
|
+
#details.visible { display: block; }
|
|
52
|
+
#details h2 { margin: 0 24px 8px 0; font-size: 16px; overflow-wrap: anywhere; }
|
|
53
|
+
#details dl { margin: 0; display: grid; grid-template-columns: 92px 1fr; gap: 6px 10px; font-size: 12px; }
|
|
54
|
+
#details dt { color: #9da4bd; }
|
|
55
|
+
#details dd { margin: 0; overflow-wrap: anywhere; }
|
|
56
|
+
#close { position: absolute; right: 10px; top: 4px; border: 0; background: none; font-size: 20px; }
|
|
57
|
+
#status { position: fixed; left: 16px; bottom: 14px; color: #a9aec2; font-size: 11px; pointer-events: none; }
|
|
58
|
+
@media (max-width: 720px) { #details { top: auto; bottom: 40px; } }
|
|
59
|
+
</style>
|
|
60
|
+
</head>
|
|
61
|
+
<body>
|
|
62
|
+
<canvas id="graph" aria-label="Interactive code graph"></canvas>
|
|
63
|
+
<section id="controls" class="panel">
|
|
64
|
+
<h1>Codegraph</h1>
|
|
65
|
+
<div id="summary" class="subtitle"></div>
|
|
66
|
+
<div class="ask-row"><input id="question" placeholder="Ask: What calls analyzeProject?"><button id="ask">Ask</button></div>
|
|
67
|
+
<div id="answer" aria-live="polite"></div>
|
|
68
|
+
<input id="search" type="search" placeholder="Search files and symbols…" autocomplete="off">
|
|
69
|
+
<div class="legend-title">Node colors</div>
|
|
70
|
+
<div class="node-legend" aria-label="Node color legend">
|
|
71
|
+
<span><i class="swatch" style="background:#4cc9f0"></i>File</span>
|
|
72
|
+
<span><i class="swatch" style="background:#ff6b6b"></i>Function</span>
|
|
73
|
+
<span><i class="swatch" style="background:#ffd166"></i>Class</span>
|
|
74
|
+
<span><i class="swatch" style="background:#70e000"></i>Interface</span>
|
|
75
|
+
<span><i class="swatch" style="background:#c77dff"></i>Method</span>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="legend-title">Relationships</div>
|
|
78
|
+
<div class="filters">
|
|
79
|
+
<label><input type="checkbox" data-edge="DEFINES" checked><span class="swatch" style="background:#73809f"></span>Defines</label>
|
|
80
|
+
<label><input type="checkbox" data-edge="IMPORTS" checked><span class="swatch" style="background:#f6bd60"></span>Imports</label>
|
|
81
|
+
<label><input type="checkbox" data-edge="CALLS" checked><span class="swatch" style="background:#f28482"></span>Calls</label>
|
|
82
|
+
</div>
|
|
83
|
+
<button id="fit">Fit graph</button> <button id="reset">Show all</button>
|
|
84
|
+
<div class="hint" style="margin-top:10px">Hover a node to reveal its label · scroll to zoom · drag to pan · click to focus</div>
|
|
85
|
+
</section>
|
|
86
|
+
<aside id="details" class="panel"><button id="close" aria-label="Close">×</button><div id="detail-content"></div></aside>
|
|
87
|
+
<div id="status"></div>
|
|
88
|
+
<script id="codegraph-data" type="application/json">${payload}</script>
|
|
89
|
+
<script>
|
|
90
|
+
(() => {
|
|
91
|
+
const data = JSON.parse(document.getElementById('codegraph-data').textContent);
|
|
92
|
+
const canvas = document.getElementById('graph');
|
|
93
|
+
const context = canvas.getContext('2d');
|
|
94
|
+
const nodes = data.nodes.map((entry, index) => ({
|
|
95
|
+
...entry, index, x: Math.cos(index * 2.39996) * Math.sqrt(index + 1) * 12,
|
|
96
|
+
y: Math.sin(index * 2.39996) * Math.sqrt(index + 1) * 12, vx: 0, vy: 0, degree: 0
|
|
97
|
+
}));
|
|
98
|
+
const byId = new Map(nodes.map(node => [node.id, node]));
|
|
99
|
+
const edges = data.edges.map(edge => ({ ...edge, source: byId.get(edge.from), target: byId.get(edge.to) })).filter(edge => edge.source && edge.target);
|
|
100
|
+
edges.forEach(edge => { edge.source.degree++; edge.target.degree++; });
|
|
101
|
+
const edgeColors = { DEFINES: '#73809f', IMPORTS: '#f6bd60', CALLS: '#f28482' };
|
|
102
|
+
const kindColors = { file: '#4cc9f0', function: '#ff6b6b', class: '#ffd166', interface: '#70e000', method: '#c77dff' };
|
|
103
|
+
const enabledEdges = new Set(Object.keys(edgeColors));
|
|
104
|
+
let width = 0, height = 0, scale = 1, offsetX = 0, offsetY = 0;
|
|
105
|
+
let dragging = false, moved = false, lastX = 0, lastY = 0, selected = null, hovered = null;
|
|
106
|
+
let visibleNodes = new Set(nodes), simulationTicks = 0;
|
|
107
|
+
|
|
108
|
+
const label = node => node.data.nodeType === 'file' ? node.data.filePath : node.data.qualifiedName;
|
|
109
|
+
const file = node => node.data.nodeType === 'file' ? node.data.filePath : node.data.location.file;
|
|
110
|
+
const color = node => kindColors[node.data.nodeType === 'file' ? 'file' : node.data.declarationKind] || '#8ecae6';
|
|
111
|
+
const radius = node => Math.min(11, 3.3 + Math.sqrt(node.degree) * 1.15);
|
|
112
|
+
const activeEdges = () => edges.filter(edge => enabledEdges.has(edge.type) && visibleNodes.has(edge.source) && visibleNodes.has(edge.target));
|
|
113
|
+
const displayLabel = node => node.data.nodeType === 'file' ? node.data.filePath.split('/').pop() : node.data.name;
|
|
114
|
+
const showLabel = node => node === hovered;
|
|
115
|
+
|
|
116
|
+
function resize() {
|
|
117
|
+
const ratio = window.devicePixelRatio || 1;
|
|
118
|
+
width = window.innerWidth; height = window.innerHeight;
|
|
119
|
+
canvas.width = Math.round(width * ratio); canvas.height = Math.round(height * ratio);
|
|
120
|
+
context.setTransform(ratio, 0, 0, ratio, 0, 0);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function simulate() {
|
|
124
|
+
if (simulationTicks++ > 500) return;
|
|
125
|
+
const active = [...visibleNodes];
|
|
126
|
+
const cellSize = 80; const cells = new Map();
|
|
127
|
+
active.forEach(node => { const key=Math.floor(node.x/cellSize)+','+Math.floor(node.y/cellSize); const bucket=cells.get(key)||[]; bucket.push(node); cells.set(key,bucket); });
|
|
128
|
+
active.forEach(a => {
|
|
129
|
+
const cellX=Math.floor(a.x/cellSize), cellY=Math.floor(a.y/cellSize);
|
|
130
|
+
for (let x=cellX-1; x<=cellX+1; x++) for (let y=cellY-1; y<=cellY+1; y++) for (const b of cells.get(x+','+y)||[]) {
|
|
131
|
+
if (b.index <= a.index) continue;
|
|
132
|
+
const dx = b.x - a.x; const dy = b.y - a.y;
|
|
133
|
+
const distance2 = Math.max(100, dx * dx + dy * dy); const force = Math.min(1.2, 900 / distance2);
|
|
134
|
+
a.vx -= dx * force / Math.sqrt(distance2); a.vy -= dy * force / Math.sqrt(distance2);
|
|
135
|
+
b.vx += dx * force / Math.sqrt(distance2); b.vy += dy * force / Math.sqrt(distance2);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
activeEdges().forEach(edge => {
|
|
139
|
+
const dx = edge.target.x - edge.source.x; const dy = edge.target.y - edge.source.y;
|
|
140
|
+
const distance = Math.max(1, Math.hypot(dx, dy)); const target = edge.type === 'DEFINES' ? 45 : 90;
|
|
141
|
+
const force = Math.max(-2, Math.min(2, (distance - target) * .008));
|
|
142
|
+
const forceX = dx / distance * force, forceY = dy / distance * force;
|
|
143
|
+
edge.source.vx += forceX; edge.source.vy += forceY;
|
|
144
|
+
edge.target.vx -= forceX; edge.target.vy -= forceY;
|
|
145
|
+
});
|
|
146
|
+
active.forEach(node => { node.vx -= node.x * .00035; node.vy -= node.y * .00035; node.vx *= .84; node.vy *= .84; node.x += node.vx; node.y += node.vy; });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function draw() {
|
|
150
|
+
simulate(); context.clearRect(0, 0, width, height); context.save();
|
|
151
|
+
context.translate(width / 2 + offsetX, height / 2 + offsetY); context.scale(scale, scale);
|
|
152
|
+
activeEdges().forEach(edge => {
|
|
153
|
+
context.beginPath(); context.moveTo(edge.source.x, edge.source.y); context.lineTo(edge.target.x, edge.target.y);
|
|
154
|
+
const edgeColor=edgeColors[edge.type] + (selected && edge.source !== selected && edge.target !== selected ? '35' : '78');
|
|
155
|
+
context.strokeStyle = edgeColor; context.lineWidth = 1 / Math.sqrt(scale); context.stroke();
|
|
156
|
+
const angle=Math.atan2(edge.target.y-edge.source.y,edge.target.x-edge.source.x); const tip=radius(edge.target)+2/scale;
|
|
157
|
+
const tx=edge.target.x-Math.cos(angle)*tip, ty=edge.target.y-Math.sin(angle)*tip, arrow=3.5/Math.sqrt(scale);
|
|
158
|
+
context.beginPath(); context.moveTo(tx,ty); context.lineTo(tx-Math.cos(angle-.55)*arrow,ty-Math.sin(angle-.55)*arrow); context.lineTo(tx-Math.cos(angle+.55)*arrow,ty-Math.sin(angle+.55)*arrow); context.closePath(); context.fillStyle=edgeColor; context.fill();
|
|
159
|
+
});
|
|
160
|
+
visibleNodes.forEach(node => {
|
|
161
|
+
const r = radius(node); context.beginPath(); context.arc(node.x, node.y, r, 0, Math.PI * 2);
|
|
162
|
+
context.fillStyle = color(node); context.globalAlpha = selected && node !== selected && !isNeighbor(selected, node) ? .3 : 1; context.fill();
|
|
163
|
+
if (node === selected || node === hovered) { context.strokeStyle = '#fff'; context.lineWidth = 2 / scale; context.stroke(); }
|
|
164
|
+
});
|
|
165
|
+
visibleNodes.forEach(node => {
|
|
166
|
+
if(!showLabel(node))return;
|
|
167
|
+
const text=displayLabel(node), fontSize=12/scale, padding=3/scale, x=node.x+radius(node)+5/scale, y=node.y;
|
|
168
|
+
context.font='600 '+fontSize+'px ui-sans-serif, system-ui, sans-serif'; context.textBaseline='middle';
|
|
169
|
+
const textWidth=context.measureText(text).width;
|
|
170
|
+
context.globalAlpha=1; context.fillStyle='#10121ddd';
|
|
171
|
+
context.fillRect(x-padding,y-fontSize*.72,textWidth+padding*2,fontSize*1.44);
|
|
172
|
+
context.fillStyle='#f5f6fb'; context.fillText(text,x,y);
|
|
173
|
+
});
|
|
174
|
+
context.globalAlpha = 1; context.restore();
|
|
175
|
+
requestAnimationFrame(draw);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function isNeighbor(a, b) { return edges.some(edge => enabledEdges.has(edge.type) && ((edge.source === a && edge.target === b) || (edge.source === b && edge.target === a))); }
|
|
179
|
+
function screenNode(event) {
|
|
180
|
+
const x = (event.clientX - width / 2 - offsetX) / scale; const y = (event.clientY - height / 2 - offsetY) / scale;
|
|
181
|
+
let result = null, best = 16 / scale;
|
|
182
|
+
visibleNodes.forEach(node => { const distance = Math.hypot(node.x - x, node.y - y); if (distance < Math.max(radius(node), best)) { result = node; best = distance; } });
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
function showDetails(node) {
|
|
186
|
+
const incident = edges.filter(edge => edge.source === node || edge.target === node);
|
|
187
|
+
const counts = incident.reduce((result, edge) => ({ ...result, [edge.type]: (result[edge.type] || 0) + 1 }), {});
|
|
188
|
+
const location = node.data.nodeType === 'symbol' ? node.data.location.file + ':' + node.data.location.line + ':' + node.data.location.column : node.data.filePath;
|
|
189
|
+
document.getElementById('detail-content').innerHTML = '<h2>' + escapeHtml(label(node)) + '</h2><dl>' +
|
|
190
|
+
'<dt>Type</dt><dd>' + escapeHtml(node.data.nodeType === 'file' ? 'file' : node.data.declarationKind) + '</dd>' +
|
|
191
|
+
'<dt>Location</dt><dd><a class="source-link" href="' + editorHref(node) + '">' + escapeHtml(location) + '</a></dd><dt>Connections</dt><dd>' + incident.length + '</dd>' +
|
|
192
|
+
'<dt>Relationships</dt><dd>' + escapeHtml(Object.entries(counts).map(([key,value]) => key + ': ' + value).join(' · ') || 'None') + '</dd></dl>';
|
|
193
|
+
document.getElementById('details').classList.add('visible');
|
|
194
|
+
}
|
|
195
|
+
function editorHref(node) {
|
|
196
|
+
if(data.openMode==='server')return '/open?node='+encodeURIComponent(node.id);
|
|
197
|
+
const relativePath=file(node), suffix=node.data.nodeType==='symbol'?':'+node.data.location.line+':'+node.data.location.column:'';
|
|
198
|
+
const absolutePath=(data.rootDirectory.replace(/\\\/$/,'')+'/'+relativePath).split('/').map((part,index)=>index===0?'':encodeURIComponent(part)).join('/');
|
|
199
|
+
return 'vscode://file'+absolutePath+suffix;
|
|
200
|
+
}
|
|
201
|
+
function focusNode(node, related) {
|
|
202
|
+
selected=node; visibleNodes=new Set([node,...related]); showDetails(node); fit(); restart();
|
|
203
|
+
}
|
|
204
|
+
function normalizedWords(value) { return value.toLowerCase().replace(/[^a-z0-9_.$/\\-]+/g,' ').trim().split(/\\s+/).filter(word => word.length > 1); }
|
|
205
|
+
function bestQuestionNode(question) {
|
|
206
|
+
const ignored=new Set(['what','which','where','who','does','call','calls','called','uses','use','used','imports','import','imported','defines','define','defined','depends','dependents','dependencies','on','by','is','are','the','a','an','of','for','from','show','find','me']);
|
|
207
|
+
const terms=normalizedWords(question).filter(word => !ignored.has(word));
|
|
208
|
+
let best=null, bestScore=0;
|
|
209
|
+
nodes.forEach(node => { const name=label(node).toLowerCase(), location=file(node).toLowerCase(); let score=0; terms.forEach(term => { if(name===term)score+=12; else if(name.endsWith('.'+term)||name.endsWith('/'+term))score+=8; else if(name.includes(term))score+=4; if(location.includes(term))score+=2; }); if(score>bestScore){best=node;bestScore=score;} });
|
|
210
|
+
return best;
|
|
211
|
+
}
|
|
212
|
+
function askQuestion() {
|
|
213
|
+
const question=document.getElementById('question').value.trim(), answer=document.getElementById('answer');
|
|
214
|
+
if(!question){answer.textContent='Ask about a file or symbol, for example: “What calls analyzeProject?”';answer.classList.add('visible');return;}
|
|
215
|
+
const node=bestQuestionNode(question);
|
|
216
|
+
if(!node){answer.textContent='I could not match that question to an indexed file or symbol.';answer.classList.add('visible');return;}
|
|
217
|
+
const lower=question.toLowerCase(); let direction='both', relationship=null;
|
|
218
|
+
const impactIntent=/affected|impact|break|if i change|when i change|changing/.test(lower);
|
|
219
|
+
if(/what (does|do)|dependencies|depends on|calls from/.test(lower))direction='outgoing';
|
|
220
|
+
if(/what calls|who calls|called by|dependents|what imports|imported by|where .*defined/.test(lower))direction='incoming';
|
|
221
|
+
if(/import/.test(lower))relationship='IMPORTS'; else if(/call|use|depend/.test(lower))relationship='CALLS'; else if(/defin|contain/.test(lower))relationship='DEFINES';
|
|
222
|
+
if(impactIntent){direction='incoming';relationship='CALLS';}
|
|
223
|
+
if(relationship) { enabledEdges.clear(); enabledEdges.add(relationship); document.querySelectorAll('[data-edge]').forEach(input => { input.checked=input.dataset.edge===relationship; }); }
|
|
224
|
+
const matches=edges.filter(edge => (!relationship||edge.type===relationship) && ((direction!=='incoming'&&edge.source===node)||(direction!=='outgoing'&&edge.target===node)));
|
|
225
|
+
const related=matches.map(edge => edge.source===node?edge.target:edge.source).filter((entry,index,array)=>array.indexOf(entry)===index);
|
|
226
|
+
focusNode(node,related);
|
|
227
|
+
const heading=impactIntent?'Potentially affected callers':(direction==='incoming'?'Incoming':direction==='outgoing'?'Outgoing':'Connected')+(relationship?' '+relationship.toLowerCase():' relationships');
|
|
228
|
+
answer.innerHTML='<strong>'+escapeHtml(label(node))+'</strong><br>'+escapeHtml(heading)+': '+related.length+(related.length?related.slice(0,8).map(item=>'<div class="result"><button data-node="'+item.index+'">'+escapeHtml(label(item))+'</button><a class="source-link" href="'+editorHref(item)+'">Open file ↗</a></div>').join(''):'')+'<div class="result"><a class="source-link" href="'+editorHref(node)+'">Open matched source ↗</a></div>';
|
|
229
|
+
answer.querySelectorAll('[data-node]').forEach(button=>button.addEventListener('click',()=>{const target=nodes[Number(button.dataset.node)];if(target)focusNode(target,nodes.filter(item=>isNeighbor(target,item)));}));
|
|
230
|
+
answer.classList.add('visible');
|
|
231
|
+
}
|
|
232
|
+
function escapeHtml(value) { const element = document.createElement('span'); element.textContent = String(value); return element.innerHTML; }
|
|
233
|
+
function fit() {
|
|
234
|
+
const active = [...visibleNodes]; if (!active.length) return;
|
|
235
|
+
const xs = active.map(node => node.x), ys = active.map(node => node.y);
|
|
236
|
+
const graphWidth = Math.max(100, Math.max(...xs) - Math.min(...xs)); const graphHeight = Math.max(100, Math.max(...ys) - Math.min(...ys));
|
|
237
|
+
scale = Math.max(.08, Math.min(2.5, Math.min((width - 80) / graphWidth, (height - 80) / graphHeight) * .82));
|
|
238
|
+
offsetX = -((Math.min(...xs) + Math.max(...xs)) / 2) * scale; offsetY = -((Math.min(...ys) + Math.max(...ys)) / 2) * scale;
|
|
239
|
+
}
|
|
240
|
+
function updateStatus() { document.getElementById('status').textContent = visibleNodes.size + ' nodes · ' + activeEdges().length + ' relationships · local visualization'; }
|
|
241
|
+
function restart() { simulationTicks = 0; updateStatus(); }
|
|
242
|
+
|
|
243
|
+
canvas.addEventListener('mousedown', event => { dragging = true; moved = false; lastX = event.clientX; lastY = event.clientY; canvas.classList.add('dragging'); });
|
|
244
|
+
window.addEventListener('mousemove', event => { hovered = screenNode(event); if (!dragging) return; const dx = event.clientX-lastX, dy=event.clientY-lastY; if (Math.abs(dx)+Math.abs(dy)>2) moved=true; offsetX+=dx; offsetY+=dy; lastX=event.clientX; lastY=event.clientY; });
|
|
245
|
+
window.addEventListener('mouseup', event => { if (dragging && !moved) { selected = screenNode(event); if (selected) focusNode(selected,nodes.filter(node => isNeighbor(selected,node))); } dragging=false; canvas.classList.remove('dragging'); });
|
|
246
|
+
canvas.addEventListener('wheel', event => { event.preventDefault(); const previous=scale; scale=Math.max(.05,Math.min(8,scale*Math.exp(-event.deltaY*.001))); offsetX=event.clientX-width/2-(event.clientX-width/2-offsetX)*scale/previous; offsetY=event.clientY-height/2-(event.clientY-height/2-offsetY)*scale/previous; }, {passive:false});
|
|
247
|
+
document.querySelectorAll('[data-edge]').forEach(input => input.addEventListener('change', () => { input.checked ? enabledEdges.add(input.dataset.edge) : enabledEdges.delete(input.dataset.edge); restart(); }));
|
|
248
|
+
document.getElementById('search').addEventListener('input', event => { const query=event.target.value.trim().toLowerCase(); if (!query) { visibleNodes=new Set(nodes); selected=null; } else { const matches=nodes.filter(node => label(node).toLowerCase().includes(query) || file(node).toLowerCase().includes(query)); visibleNodes=new Set(matches); selected=matches.length===1?matches[0]:null; } fit(); restart(); });
|
|
249
|
+
document.getElementById('fit').addEventListener('click', fit);
|
|
250
|
+
document.getElementById('ask').addEventListener('click', askQuestion);
|
|
251
|
+
document.getElementById('question').addEventListener('keydown', event => { if(event.key==='Enter')askQuestion(); });
|
|
252
|
+
document.addEventListener('click', async event => { const link=event.target.closest('a.source-link'); if(!link||!link.getAttribute('href').startsWith('/open?'))return; event.preventDefault(); const response=await fetch(link.href); document.getElementById('status').textContent=response.ok?'Opened source in IDE':'Could not open source: '+await response.text(); });
|
|
253
|
+
document.getElementById('reset').addEventListener('click', () => { visibleNodes=new Set(nodes); selected=null; document.getElementById('search').value=''; document.getElementById('details').classList.remove('visible'); fit(); restart(); });
|
|
254
|
+
document.getElementById('close').addEventListener('click', () => document.getElementById('details').classList.remove('visible'));
|
|
255
|
+
document.getElementById('summary').textContent = data.rootDirectory + ' · ' + nodes.length + ' nodes · ' + edges.length + ' relationships';
|
|
256
|
+
window.addEventListener('resize', () => { resize(); fit(); }); resize(); setTimeout(fit, 500); updateStatus(); draw();
|
|
257
|
+
})();
|
|
258
|
+
</script>
|
|
259
|
+
</body>
|
|
260
|
+
</html>`;
|
|
261
|
+
}
|
|
262
|
+
export async function writeVisualizationDocument(analysis, outputPath) {
|
|
263
|
+
const absoluteOutputPath = path.resolve(outputPath);
|
|
264
|
+
await mkdir(path.dirname(absoluteOutputPath), { recursive: true });
|
|
265
|
+
await writeFile(absoluteOutputPath, createVisualizationDocument(analysis), "utf8");
|
|
266
|
+
return absoluteOutputPath;
|
|
267
|
+
}
|
|
268
|
+
export async function startVisualizationServer(analysis, options = {}) {
|
|
269
|
+
const host = options.host ?? "127.0.0.1";
|
|
270
|
+
const document = createVisualizationDocument(analysis, "server");
|
|
271
|
+
const server = createServer(async (request, response) => {
|
|
272
|
+
const requestUrl = new URL(request.url ?? "/", `http://${host}`);
|
|
273
|
+
if (requestUrl.pathname === "/open") {
|
|
274
|
+
const nodeId = requestUrl.searchParams.get("node");
|
|
275
|
+
const node = nodeId === null ? undefined : analysis.graph.getNode(nodeId);
|
|
276
|
+
if (node === undefined) {
|
|
277
|
+
response.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
|
|
278
|
+
response.end("Indexed node not found\n");
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const relativePath = node.data.nodeType === "file"
|
|
282
|
+
? node.data.filePath
|
|
283
|
+
: node.data.location.file;
|
|
284
|
+
const absolutePath = path.resolve(analysis.rootDirectory, relativePath);
|
|
285
|
+
const relativeToRoot = path.relative(analysis.rootDirectory, absolutePath);
|
|
286
|
+
if (relativeToRoot.startsWith("..") || path.isAbsolute(relativeToRoot)) {
|
|
287
|
+
response.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
|
|
288
|
+
response.end("Indexed path is outside the project root\n");
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const suffix = node.data.nodeType === "symbol"
|
|
292
|
+
? `:${node.data.location.line}:${node.data.location.column}`
|
|
293
|
+
: "";
|
|
294
|
+
const uri = `vscode://file${encodeEditorPath(absolutePath)}${suffix}`;
|
|
295
|
+
try {
|
|
296
|
+
await (options.openSource ?? openSourceUri)(uri);
|
|
297
|
+
response.writeHead(204, { "Cache-Control": "no-store" });
|
|
298
|
+
response.end();
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
response.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
|
|
302
|
+
response.end(`Unable to open IDE: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
303
|
+
}
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (requestUrl.pathname !== "/" && requestUrl.pathname !== "/index.html") {
|
|
307
|
+
response.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
|
|
308
|
+
response.end("Not found\n");
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
response.writeHead(200, {
|
|
312
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
313
|
+
"Cache-Control": "no-store",
|
|
314
|
+
"Content-Security-Policy": "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; connect-src 'self'",
|
|
315
|
+
});
|
|
316
|
+
response.end(document);
|
|
317
|
+
});
|
|
318
|
+
await new Promise((resolve, reject) => {
|
|
319
|
+
server.once("error", reject);
|
|
320
|
+
server.listen(options.port ?? 0, host, () => { server.off("error", reject); resolve(); });
|
|
321
|
+
});
|
|
322
|
+
const address = server.address();
|
|
323
|
+
if (address === null || typeof address === "string")
|
|
324
|
+
throw new Error("Unable to determine visualization server address");
|
|
325
|
+
const url = `http://${host}:${address.port}/`;
|
|
326
|
+
if (options.openBrowser !== false)
|
|
327
|
+
openBrowser(url);
|
|
328
|
+
return { server, url, close: () => new Promise((resolve, reject) => server.close(error => error ? reject(error) : resolve())) };
|
|
329
|
+
}
|
|
330
|
+
function encodeEditorPath(filePath) {
|
|
331
|
+
return filePath.split(path.sep).map((part, index) => index === 0 ? "" : encodeURIComponent(part)).join("/");
|
|
332
|
+
}
|
|
333
|
+
async function openSourceUri(uri) {
|
|
334
|
+
const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
|
|
335
|
+
const args = process.platform === "win32" ? ["/c", "start", "", uri] : [uri];
|
|
336
|
+
await new Promise((resolve, reject) => {
|
|
337
|
+
const child = spawn(command, args, { stdio: "ignore" });
|
|
338
|
+
child.once("error", reject);
|
|
339
|
+
child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`${command} exited with code ${String(code)}`)));
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
function openBrowser(url) {
|
|
343
|
+
const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
|
|
344
|
+
const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
345
|
+
const child = spawn(command, args, { detached: true, stdio: "ignore" });
|
|
346
|
+
child.on("error", () => { });
|
|
347
|
+
child.unref();
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=viewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/visualization/viewer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "repo-codegraph",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "A TypeScript code-intelligence graph for imports, calls, queries, and impact analysis",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/RuchiPurohit/codegraph.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/RuchiPurohit/codegraph#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/RuchiPurohit/codegraph/issues"
|
|
12
|
+
},
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
5
16
|
"type": "module",
|
|
6
17
|
"main": "./dist/index.js",
|
|
7
18
|
"types": "./dist/index.d.ts",
|