@tienne/gestalt 0.9.2 → 0.10.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.
- package/dist/package.json +2 -1
- package/dist/skills/setup/SKILL.md +150 -0
- package/dist/src/cli/commands/graph-visualize.d.ts +11 -0
- package/dist/src/cli/commands/graph-visualize.d.ts.map +1 -0
- package/dist/src/cli/commands/graph-visualize.js +26 -0
- package/dist/src/cli/commands/graph-visualize.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +14 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/code-graph/storage.d.ts +1 -0
- package/dist/src/code-graph/storage.d.ts.map +1 -1
- package/dist/src/code-graph/storage.js +7 -0
- package/dist/src/code-graph/storage.js.map +1 -1
- package/dist/src/graph-viz/engine.d.ts +20 -0
- package/dist/src/graph-viz/engine.d.ts.map +1 -0
- package/dist/src/graph-viz/engine.js +81 -0
- package/dist/src/graph-viz/engine.js.map +1 -0
- package/dist/src/graph-viz/html-generator.d.ts +7 -0
- package/dist/src/graph-viz/html-generator.d.ts.map +1 -0
- package/dist/src/graph-viz/html-generator.js +699 -0
- package/dist/src/graph-viz/html-generator.js.map +1 -0
- package/dist/src/graph-viz/index.d.ts +6 -0
- package/dist/src/graph-viz/index.d.ts.map +1 -0
- package/dist/src/graph-viz/index.js +5 -0
- package/dist/src/graph-viz/index.js.map +1 -0
- package/dist/src/graph-viz/port-finder.d.ts +2 -0
- package/dist/src/graph-viz/port-finder.d.ts.map +1 -0
- package/dist/src/graph-viz/port-finder.js +26 -0
- package/dist/src/graph-viz/port-finder.js.map +1 -0
- package/dist/src/graph-viz/server.d.ts +26 -0
- package/dist/src/graph-viz/server.d.ts.map +1 -0
- package/dist/src/graph-viz/server.js +104 -0
- package/dist/src/graph-viz/server.js.map +1 -0
- package/dist/src/graph-viz/types.d.ts +11 -0
- package/dist/src/graph-viz/types.d.ts.map +1 -0
- package/dist/src/graph-viz/types.js +2 -0
- package/dist/src/graph-viz/types.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +11 -0
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +5 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +10 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/graph-visualize-passthrough.d.ts +13 -0
- package/dist/src/mcp/tools/graph-visualize-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/graph-visualize-passthrough.js +26 -0
- package/dist/src/mcp/tools/graph-visualize-passthrough.js.map +1 -0
- package/package.json +2 -1
- package/skills/setup/SKILL.md +150 -0
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tienne/gestalt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"jimp": "^1.6.0",
|
|
49
49
|
"node-notifier": "^10.0.1",
|
|
50
50
|
"node-pty": "^1.1.0",
|
|
51
|
+
"open": "^11.0.0",
|
|
51
52
|
"openai": "^6.27.0",
|
|
52
53
|
"react": "^19.2.4",
|
|
53
54
|
"zod": "^3.24.2"
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: "Gestalt 프로젝트 초기 설정 — gestalt.json 생성, 코드 그래프 빌드, post-commit 훅 설치"
|
|
5
|
+
triggers:
|
|
6
|
+
- "gestalt 초기화"
|
|
7
|
+
- "gestalt init"
|
|
8
|
+
- "gestalt setup"
|
|
9
|
+
- "setup gestalt"
|
|
10
|
+
- "프로젝트 설정"
|
|
11
|
+
inputs:
|
|
12
|
+
cwd:
|
|
13
|
+
type: string
|
|
14
|
+
required: false
|
|
15
|
+
description: "초기화할 프로젝트 디렉토리 (기본값: 현재 디렉토리)"
|
|
16
|
+
outputs:
|
|
17
|
+
- gestalt.json
|
|
18
|
+
- code-graph.db
|
|
19
|
+
- post-commit hook
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Setup Skill
|
|
23
|
+
|
|
24
|
+
`gestalt init` 명령어와 동일한 초기화 작업을 Claude Code 스킬로 실행한다.
|
|
25
|
+
|
|
26
|
+
## 실행 단계
|
|
27
|
+
|
|
28
|
+
1. **선택 화면**: `AskUserQuestion`으로 실행할 단계를 다중 선택
|
|
29
|
+
2. **gestalt.json 생성**: 프로젝트 루트에 기본 설정 파일 생성
|
|
30
|
+
3. **코드 그래프 빌드**: `ges_code_graph { action: "build" }`로 의존성 그래프 구축
|
|
31
|
+
4. **post-commit 훅 설치**: `gestalt init --skip-graph --skip-hook`을 활용해 훅만 설치
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 실행 방법
|
|
36
|
+
|
|
37
|
+
### Step 1 — 실행할 단계 선택
|
|
38
|
+
|
|
39
|
+
`AskUserQuestion`으로 다음 질문을 표시한다. **3개 모두 기본 선택**으로 제시한다.
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
질문: "실행할 초기화 단계를 선택하세요 (기본: 전체)"
|
|
43
|
+
multiSelect: true
|
|
44
|
+
옵션:
|
|
45
|
+
- label: "gestalt.json 생성 (Recommended)"
|
|
46
|
+
description: "프로젝트 루트에 gestalt.json 설정 파일을 생성합니다"
|
|
47
|
+
- label: "코드 그래프 빌드 (Recommended)"
|
|
48
|
+
description: "코드베이스를 분석해 의존성 그래프를 구축합니다 (시간이 걸릴 수 있음)"
|
|
49
|
+
- label: "post-commit 훅 설치 (Recommended)"
|
|
50
|
+
description: "커밋 시 코드 그래프를 자동으로 갱신하는 git 훅을 설치합니다"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
선택된 항목에 따라 아래 단계를 순서대로 실행한다. 아무것도 선택하지 않으면 중단한다.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### Step 2 — gestalt.json 생성 (선택된 경우)
|
|
58
|
+
|
|
59
|
+
프로젝트 루트에 `gestalt.json`이 이미 존재하는지 확인한다.
|
|
60
|
+
|
|
61
|
+
**파일이 없으면**: Bash로 생성한다.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
! pnpm tsx bin/gestalt.ts setup
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
또는 npx로 설치된 환경이면:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
! npx @tienne/gestalt setup
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**파일이 이미 존재하면**: 사용자에게 덮어쓸지 확인 후 진행한다.
|
|
74
|
+
|
|
75
|
+
성공 시 출력:
|
|
76
|
+
```
|
|
77
|
+
✓ gestalt.json 생성 완료
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Step 3 — 코드 그래프 빌드 (선택된 경우)
|
|
83
|
+
|
|
84
|
+
`ges_code_graph` MCP 툴을 사용한다.
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
ges_code_graph({ action: "build", repoRoot: "<현재 디렉토리 절대경로>" })
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
응답 예시:
|
|
91
|
+
```json
|
|
92
|
+
{ "nodesBuilt": 1192, "edgesBuilt": 1321, "timeTakenMs": 4200 }
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
성공 시 출력:
|
|
96
|
+
```
|
|
97
|
+
✓ 코드 그래프 빌드 완료: 노드 {nodesBuilt}개, 엣지 {edgesBuilt}개 ({timeTakenMs}ms)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
실패해도 다음 단계를 계속 진행한다 (non-fatal).
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Step 4 — post-commit 훅 설치 (선택된 경우)
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
! pnpm tsx bin/gestalt.ts init --skip-graph
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
또는:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
! npx @tienne/gestalt init --skip-graph
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
성공 시 출력:
|
|
117
|
+
```
|
|
118
|
+
✓ post-commit 훅 설치 완료
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Step 5 — 완료 메시지
|
|
124
|
+
|
|
125
|
+
선택된 모든 단계 완료 후:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
Gestalt 초기화 완료!
|
|
129
|
+
|
|
130
|
+
완료된 단계:
|
|
131
|
+
✓ gestalt.json 생성
|
|
132
|
+
✓ 코드 그래프 빌드 (노드 1192개, 엣지 1321개)
|
|
133
|
+
✓ post-commit 훅 설치
|
|
134
|
+
|
|
135
|
+
이제 다음 스킬을 바로 사용할 수 있습니다:
|
|
136
|
+
/gestalt:interview — 요구사항 인터뷰
|
|
137
|
+
/build-graph — 코드 그래프 갱신
|
|
138
|
+
/blast-radius — 영향 범위 분석
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 에러 처리
|
|
144
|
+
|
|
145
|
+
| 상황 | 대응 |
|
|
146
|
+
|------|------|
|
|
147
|
+
| `gestalt.json` 이미 존재 | 덮어쓸지 확인 후 진행 |
|
|
148
|
+
| 코드 그래프 빌드 실패 | 경고 출력 후 다음 단계 계속 |
|
|
149
|
+
| git 저장소 아님 | post-commit 훅 설치 건너뜀 + 안내 |
|
|
150
|
+
| CLI 명령어 없음 | `pnpm add @tienne/gestalt` 안내 |
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface GraphVisualizeOptions {
|
|
2
|
+
repoRoot?: string;
|
|
3
|
+
port?: number;
|
|
4
|
+
noBrowser?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* CLI entry point for `gestalt graph-visualize`.
|
|
8
|
+
* Starts the visualization server and keeps the process alive until Ctrl+C.
|
|
9
|
+
*/
|
|
10
|
+
export declare function graphVisualizeCommand(opts?: GraphVisualizeOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=graph-visualize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-visualize.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/graph-visualize.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB3F"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { GraphVisualizationEngine } from '../../graph-viz/engine.js';
|
|
3
|
+
/**
|
|
4
|
+
* CLI entry point for `gestalt graph-visualize`.
|
|
5
|
+
* Starts the visualization server and keeps the process alive until Ctrl+C.
|
|
6
|
+
*/
|
|
7
|
+
export async function graphVisualizeCommand(opts = {}) {
|
|
8
|
+
const repoRoot = resolve(opts.repoRoot ?? process.cwd());
|
|
9
|
+
const port = opts.port ? Number(opts.port) : undefined;
|
|
10
|
+
const openBrowser = !opts.noBrowser;
|
|
11
|
+
const engine = new GraphVisualizationEngine();
|
|
12
|
+
try {
|
|
13
|
+
const result = await engine.start({ repoRoot, port, openBrowser });
|
|
14
|
+
console.log(`\nGraph visualization running at: ${result.url}`);
|
|
15
|
+
console.log(`${result.message}`);
|
|
16
|
+
console.log('\nPress Ctrl+C to stop the server.\n');
|
|
17
|
+
// Keep process alive until SIGINT (the server's own SIGINT handler will exit)
|
|
18
|
+
await new Promise(() => { });
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
22
|
+
console.error(`Error starting graph visualization: ${msg}`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=graph-visualize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-visualize.js","sourceRoot":"","sources":["../../../../src/cli/commands/graph-visualize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAQrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA8B,EAAE;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAEpC,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEpD,8EAA8E;QAC9E,MAAM,IAAI,OAAO,CAAO,GAAG,EAAE,GAA2B,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,SAAS,IAAI,OAAO,CA6EnC"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { statusCommand } from './commands/status.js';
|
|
|
6
6
|
import { setupCommand } from './commands/setup.js';
|
|
7
7
|
import { initCommand } from './commands/init.js';
|
|
8
8
|
import { monitorCommand } from './commands/monitor.js';
|
|
9
|
+
import { graphVisualizeCommand } from './commands/graph-visualize.js';
|
|
9
10
|
import { getVersion } from '../core/version.js';
|
|
10
11
|
export function createCli() {
|
|
11
12
|
const program = new Command();
|
|
@@ -60,6 +61,19 @@ export function createCli() {
|
|
|
60
61
|
.action(async (sessionId) => {
|
|
61
62
|
await monitorCommand(sessionId);
|
|
62
63
|
});
|
|
64
|
+
program
|
|
65
|
+
.command('graph-visualize')
|
|
66
|
+
.description('Visualize the code knowledge graph in the browser')
|
|
67
|
+
.option('--repo-root <path>', 'Repository root (defaults to cwd)')
|
|
68
|
+
.option('--port <number>', 'Preferred server port (default: 7891)', parseInt)
|
|
69
|
+
.option('--no-browser', 'Do not open the browser automatically')
|
|
70
|
+
.action(async (options) => {
|
|
71
|
+
await graphVisualizeCommand({
|
|
72
|
+
repoRoot: options.repoRoot,
|
|
73
|
+
port: options.port,
|
|
74
|
+
noBrowser: options.browser === false,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
63
77
|
return program;
|
|
64
78
|
}
|
|
65
79
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,2FAA2F,CAAC;SACxG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACrC,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,OAAO,EAAE,wCAAwC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,OAA4C,EAAE,EAAE;QACxF,MAAM,gBAAgB,CAAC,KAAK,IAAI,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA4B,EAAE,EAAE;QAChE,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,SAAkB,EAAE,EAAE;QAC7B,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yFAAyF,CAAC;SACtG,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAoD,EAAE,EAAE;QACrE,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACnC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class CodeGraphStore {
|
|
|
8
8
|
getEdgesBySource(sourceId: string): CodeGraphEdge[];
|
|
9
9
|
getEdgesByTarget(targetId: string): CodeGraphEdge[];
|
|
10
10
|
getAllNodes(): CodeGraphNode[];
|
|
11
|
+
getAllEdges(): CodeGraphEdge[];
|
|
11
12
|
upsertNode(node: CodeGraphNode): void;
|
|
12
13
|
upsertEdge(edge: CodeGraphEdge): void;
|
|
13
14
|
deleteByFile(filePath: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgD/E,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAW1B,OAAO,CAAC,UAAU;IA+BlB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAQ7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,WAAW,IAAI,aAAa,EAAE;IAQ9B,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAoCxC,KAAK,IAAI,IAAI;CAGd"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgD/E,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAW1B,OAAO,CAAC,UAAU;IA+BlB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAQ7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,WAAW,IAAI,aAAa,EAAE;IAQ9B,WAAW,IAAI,aAAa,EAAE;IAQ9B,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAoCxC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -101,6 +101,13 @@ export class CodeGraphStore {
|
|
|
101
101
|
const rows = stmt.all();
|
|
102
102
|
return rows.map(toNode);
|
|
103
103
|
}
|
|
104
|
+
getAllEdges() {
|
|
105
|
+
const stmt = this.db.prepare(`
|
|
106
|
+
SELECT * FROM cg_edges
|
|
107
|
+
`);
|
|
108
|
+
const rows = stmt.all();
|
|
109
|
+
return rows.map(toEdge);
|
|
110
|
+
}
|
|
104
111
|
upsertNode(node) {
|
|
105
112
|
const stmt = this.db.prepare(`
|
|
106
113
|
INSERT OR REPLACE INTO cg_nodes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,SAAS,MAAM,CAAC,GAAe;IAC7B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAA6B;QACvC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QAClC,MAAM,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACpC,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,GAAe;IAC7B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAA6B;QACvC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IAE9B,YAAY,MAAc;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BZ,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAiB,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAA2B,CAAC;QACnD,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAiB,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAiB,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAkB,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU,CAAC,IAAmB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,IAAI,IAAI,EACtB,IAAI,CAAC,OAAO,IAAI,IAAI,EACpB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,IAAmB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAElC,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,IAAI,CAAC,EACd,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;aACpB,OAAO,CAAC,6CAA6C,CAAC;aACtD,GAAG,CAAC,QAAQ,CAAqB,CAAC;QAErC,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE1C,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEtC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACnC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC7B,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,GAAG,EAAE,CAAC;IACR,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAA6C,CAAC;QAC3E,OAAO,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,MAAM,UAAU,GACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,EAG7E,CAAC,GAAG,CAAC;QAEN,MAAM,UAAU,GACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAC5D,CAAC,GAAG,CAAC;QAEN,MAAM,UAAU,GACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAC5D,CAAC,GAAG,CAAC;QAEN,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE;aACzB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,EAA6B,CAAC;QACpC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;QAE9C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,OAAO;YACL,UAAU;YACV,UAAU;YACV,UAAU;YACV,WAAW;YACX,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GraphVisualizationResult, GraphVizServerOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Orchestrates the graph visualization pipeline:
|
|
4
|
+
* 1. Ensure code-graph.db exists (auto-build if missing)
|
|
5
|
+
* 2. Load nodes + edges from CodeGraphStore
|
|
6
|
+
* 3. Find an available port
|
|
7
|
+
* 4. Start GraphVisualizationServer
|
|
8
|
+
* 5. Open browser (optional)
|
|
9
|
+
* 6. Return { url, port, message }
|
|
10
|
+
*
|
|
11
|
+
* Used by both the CLI command and the MCP tool.
|
|
12
|
+
*/
|
|
13
|
+
export declare class GraphVisualizationEngine {
|
|
14
|
+
private server;
|
|
15
|
+
start(opts: GraphVizServerOptions): Promise<GraphVisualizationResult>;
|
|
16
|
+
/** Stop the server. Safe to call even if never started. */
|
|
17
|
+
stop(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export declare function getGraphVisualizationEngine(): GraphVisualizationEngine;
|
|
20
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/graph-viz/engine.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElF;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAyC;IAEjD,KAAK,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA4C3E,2DAA2D;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B;AAKD,wBAAgB,2BAA2B,IAAI,wBAAwB,CAGtE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { CodeGraphEngine } from '../code-graph/engine.js';
|
|
4
|
+
import { CodeGraphStore } from '../code-graph/storage.js';
|
|
5
|
+
import { findAvailablePort } from './port-finder.js';
|
|
6
|
+
import { GraphVisualizationServer } from './server.js';
|
|
7
|
+
/**
|
|
8
|
+
* Orchestrates the graph visualization pipeline:
|
|
9
|
+
* 1. Ensure code-graph.db exists (auto-build if missing)
|
|
10
|
+
* 2. Load nodes + edges from CodeGraphStore
|
|
11
|
+
* 3. Find an available port
|
|
12
|
+
* 4. Start GraphVisualizationServer
|
|
13
|
+
* 5. Open browser (optional)
|
|
14
|
+
* 6. Return { url, port, message }
|
|
15
|
+
*
|
|
16
|
+
* Used by both the CLI command and the MCP tool.
|
|
17
|
+
*/
|
|
18
|
+
export class GraphVisualizationEngine {
|
|
19
|
+
server = null;
|
|
20
|
+
async start(opts) {
|
|
21
|
+
const { repoRoot, port: preferredPort, openBrowser = true } = opts;
|
|
22
|
+
const dbPath = join(repoRoot, '.gestalt', 'code-graph.db');
|
|
23
|
+
// ── 1. Auto-build graph if DB is absent ──────────────────────
|
|
24
|
+
if (!existsSync(dbPath)) {
|
|
25
|
+
process.stderr.write('[graph-viz] code-graph.db not found — building graph...\n');
|
|
26
|
+
const codeGraphEngine = new CodeGraphEngine();
|
|
27
|
+
codeGraphEngine.build(repoRoot);
|
|
28
|
+
process.stderr.write('[graph-viz] graph build complete.\n');
|
|
29
|
+
}
|
|
30
|
+
// ── 2. Load nodes & edges ────────────────────────────────────
|
|
31
|
+
const store = new CodeGraphStore(dbPath);
|
|
32
|
+
const nodes = store.getAllNodes();
|
|
33
|
+
const edges = store.getAllEdges();
|
|
34
|
+
process.stderr.write(`[graph-viz] loaded ${nodes.length} nodes, ${edges.length} edges from ${dbPath}\n`);
|
|
35
|
+
// ── 3. Find available port ───────────────────────────────────
|
|
36
|
+
const port = await findAvailablePort(preferredPort ?? 7891);
|
|
37
|
+
// ── 4. Start server ──────────────────────────────────────────
|
|
38
|
+
this.server = new GraphVisualizationServer(nodes, edges);
|
|
39
|
+
await this.server.start(port);
|
|
40
|
+
const url = `http://127.0.0.1:${port}`;
|
|
41
|
+
process.stderr.write(`[graph-viz] server running at ${url}\n`);
|
|
42
|
+
// ── 5. Open browser (best-effort) ────────────────────────────
|
|
43
|
+
if (openBrowser) {
|
|
44
|
+
await openUrl(url);
|
|
45
|
+
}
|
|
46
|
+
// ── 6. Return result ─────────────────────────────────────────
|
|
47
|
+
return {
|
|
48
|
+
url,
|
|
49
|
+
port,
|
|
50
|
+
message: `Graph visualization running at ${url} (${nodes.length} nodes, ${edges.length} edges)`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Stop the server. Safe to call even if never started. */
|
|
54
|
+
async stop() {
|
|
55
|
+
if (this.server) {
|
|
56
|
+
await this.server.stop();
|
|
57
|
+
this.server = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ─── Singleton for shared CLI / MCP use ──────────────────────────
|
|
62
|
+
let _instance = null;
|
|
63
|
+
export function getGraphVisualizationEngine() {
|
|
64
|
+
if (!_instance)
|
|
65
|
+
_instance = new GraphVisualizationEngine();
|
|
66
|
+
return _instance;
|
|
67
|
+
}
|
|
68
|
+
// ─── Browser open helper ──────────────────────────────────────────
|
|
69
|
+
async function openUrl(url) {
|
|
70
|
+
try {
|
|
71
|
+
// Dynamic import so the module is not required at load-time in environments
|
|
72
|
+
// where `open` may not be available (e.g. CI).
|
|
73
|
+
const { default: open } = await import('open');
|
|
74
|
+
await open(url);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
// Non-fatal: just log and continue
|
|
78
|
+
process.stderr.write(`[graph-viz] could not open browser automatically: ${err.message}\n`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/graph-viz/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CodeGraphNode, CodeGraphEdge } from '../code-graph/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a self-contained interactive HTML visualization for a code knowledge graph.
|
|
4
|
+
* Uses D3.js v7 force-directed layout with dark theme UI.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateVisualizationHtml(nodes: CodeGraphNode[], edges: CodeGraphEdge[]): string;
|
|
7
|
+
//# sourceMappingURL=html-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-generator.d.ts","sourceRoot":"","sources":["../../../src/graph-viz/html-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG3E;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAsrBhG"}
|