cgb-builder 1.0.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/LICENSE +21 -0
- package/README.md +369 -0
- package/dist/bundle/generator.d.ts +51 -0
- package/dist/bundle/generator.d.ts.map +1 -0
- package/dist/bundle/generator.js +291 -0
- package/dist/bundle/generator.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +388 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/graph/db.d.ts +43 -0
- package/dist/graph/db.d.ts.map +1 -0
- package/dist/graph/db.js +321 -0
- package/dist/graph/db.js.map +1 -0
- package/dist/graph/engine.d.ts +62 -0
- package/dist/graph/engine.d.ts.map +1 -0
- package/dist/graph/engine.js +246 -0
- package/dist/graph/engine.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +458 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/parser/adapter.d.ts +10 -0
- package/dist/parser/adapter.d.ts.map +1 -0
- package/dist/parser/adapter.js +6 -0
- package/dist/parser/adapter.js.map +1 -0
- package/dist/parser/adapters/csharp.d.ts +24 -0
- package/dist/parser/adapters/csharp.d.ts.map +1 -0
- package/dist/parser/adapters/csharp.js +318 -0
- package/dist/parser/adapters/csharp.js.map +1 -0
- package/dist/parser/adapters/go.d.ts +21 -0
- package/dist/parser/adapters/go.d.ts.map +1 -0
- package/dist/parser/adapters/go.js +186 -0
- package/dist/parser/adapters/go.js.map +1 -0
- package/dist/parser/adapters/java.d.ts +22 -0
- package/dist/parser/adapters/java.d.ts.map +1 -0
- package/dist/parser/adapters/java.js +235 -0
- package/dist/parser/adapters/java.js.map +1 -0
- package/dist/parser/adapters/python.d.ts +19 -0
- package/dist/parser/adapters/python.d.ts.map +1 -0
- package/dist/parser/adapters/python.js +201 -0
- package/dist/parser/adapters/python.js.map +1 -0
- package/dist/parser/adapters/typescript.d.ts +24 -0
- package/dist/parser/adapters/typescript.d.ts.map +1 -0
- package/dist/parser/adapters/typescript.js +349 -0
- package/dist/parser/adapters/typescript.js.map +1 -0
- package/dist/parser/index.d.ts +42 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +191 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/tree-sitter-engine.d.ts +25 -0
- package/dist/parser/tree-sitter-engine.d.ts.map +1 -0
- package/dist/parser/tree-sitter-engine.js +107 -0
- package/dist/parser/tree-sitter-engine.js.map +1 -0
- package/dist/parser/utils.d.ts +19 -0
- package/dist/parser/utils.d.ts.map +1 -0
- package/dist/parser/utils.js +111 -0
- package/dist/parser/utils.js.map +1 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher/index.d.ts +36 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +139 -0
- package/dist/watcher/index.js.map +1 -0
- package/package.json +81 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Graph Builder — public API
|
|
3
|
+
* Exports the core building blocks for programmatic use.
|
|
4
|
+
*/
|
|
5
|
+
export { GraphDb } from './graph/db.js';
|
|
6
|
+
export { GraphEngine } from './graph/engine.js';
|
|
7
|
+
export { Parser } from './parser/index.js';
|
|
8
|
+
export { BundleGenerator } from './bundle/generator.js';
|
|
9
|
+
export { Watcher } from './watcher/index.js';
|
|
10
|
+
export { treeSitterEngine } from './parser/tree-sitter-engine.js';
|
|
11
|
+
export { detectLanguage } from './parser/utils.js';
|
|
12
|
+
export type { GraphNode, GraphEdge, FileRecord, NodeKind, EdgeKind, SupportedLanguage, ParsedFile, DepsResult, CallersResult, CalleesResult, ImpactResult, PathResult, ContextBundle, BundleSection, } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Code Graph Builder — public API
|
|
4
|
+
* Exports the core building blocks for programmatic use.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.detectLanguage = exports.treeSitterEngine = exports.Watcher = exports.BundleGenerator = exports.Parser = exports.GraphEngine = exports.GraphDb = void 0;
|
|
8
|
+
var db_js_1 = require("./graph/db.js");
|
|
9
|
+
Object.defineProperty(exports, "GraphDb", { enumerable: true, get: function () { return db_js_1.GraphDb; } });
|
|
10
|
+
var engine_js_1 = require("./graph/engine.js");
|
|
11
|
+
Object.defineProperty(exports, "GraphEngine", { enumerable: true, get: function () { return engine_js_1.GraphEngine; } });
|
|
12
|
+
var index_js_1 = require("./parser/index.js");
|
|
13
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return index_js_1.Parser; } });
|
|
14
|
+
var generator_js_1 = require("./bundle/generator.js");
|
|
15
|
+
Object.defineProperty(exports, "BundleGenerator", { enumerable: true, get: function () { return generator_js_1.BundleGenerator; } });
|
|
16
|
+
var index_js_2 = require("./watcher/index.js");
|
|
17
|
+
Object.defineProperty(exports, "Watcher", { enumerable: true, get: function () { return index_js_2.Watcher; } });
|
|
18
|
+
var tree_sitter_engine_js_1 = require("./parser/tree-sitter-engine.js");
|
|
19
|
+
Object.defineProperty(exports, "treeSitterEngine", { enumerable: true, get: function () { return tree_sitter_engine_js_1.treeSitterEngine; } });
|
|
20
|
+
var utils_js_1 = require("./parser/utils.js");
|
|
21
|
+
Object.defineProperty(exports, "detectLanguage", { enumerable: true, get: function () { return utils_js_1.detectLanguage; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAAwC;AAA/B,gGAAA,OAAO,OAAA;AAChB,+CAAgD;AAAvC,wGAAA,WAAW,OAAA;AACpB,8CAA2C;AAAlC,kGAAA,MAAM,OAAA;AACf,sDAAwD;AAA/C,+GAAA,eAAe,OAAA;AACxB,+CAA6C;AAApC,mGAAA,OAAO,OAAA;AAChB,wEAAkE;AAAzD,yHAAA,gBAAgB,OAAA;AACzB,8CAAmD;AAA1C,0GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Graph Builder — MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Exposes cgb capabilities to AI agents (Cursor, Claude Code, etc.)
|
|
5
|
+
* via the Model Context Protocol over stdio transport.
|
|
6
|
+
*
|
|
7
|
+
* Tools exposed:
|
|
8
|
+
* cgb_init — scan a project and build / refresh the graph
|
|
9
|
+
* cgb_deps — get dependencies of a file
|
|
10
|
+
* cgb_impact — impact analysis for a file
|
|
11
|
+
* cgb_search — search nodes by name / path
|
|
12
|
+
* cgb_bundle — generate AI context bundle (Markdown)
|
|
13
|
+
* cgb_stats — get graph statistics
|
|
14
|
+
* cgb_path — shortest dependency path between two files
|
|
15
|
+
*/
|
|
16
|
+
export declare function startMcpServer(): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA+YH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyCpD"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Code Graph Builder — MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes cgb capabilities to AI agents (Cursor, Claude Code, etc.)
|
|
6
|
+
* via the Model Context Protocol over stdio transport.
|
|
7
|
+
*
|
|
8
|
+
* Tools exposed:
|
|
9
|
+
* cgb_init — scan a project and build / refresh the graph
|
|
10
|
+
* cgb_deps — get dependencies of a file
|
|
11
|
+
* cgb_impact — impact analysis for a file
|
|
12
|
+
* cgb_search — search nodes by name / path
|
|
13
|
+
* cgb_bundle — generate AI context bundle (Markdown)
|
|
14
|
+
* cgb_stats — get graph statistics
|
|
15
|
+
* cgb_path — shortest dependency path between two files
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.startMcpServer = startMcpServer;
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
55
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
56
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
57
|
+
// ─── Service bootstrap ────────────────────────────────────────────────────────
|
|
58
|
+
async function getServices(root) {
|
|
59
|
+
const { GraphDb } = await Promise.resolve().then(() => __importStar(require('../graph/db.js')));
|
|
60
|
+
const { GraphEngine } = await Promise.resolve().then(() => __importStar(require('../graph/engine.js')));
|
|
61
|
+
const { Parser } = await Promise.resolve().then(() => __importStar(require('../parser/index.js')));
|
|
62
|
+
const { BundleGenerator } = await Promise.resolve().then(() => __importStar(require('../bundle/generator.js')));
|
|
63
|
+
const db = new GraphDb(root);
|
|
64
|
+
await db.init();
|
|
65
|
+
const engine = new GraphEngine(db);
|
|
66
|
+
const parser = new Parser(db, root);
|
|
67
|
+
const bundle = new BundleGenerator(db, engine, root);
|
|
68
|
+
return { db, engine, parser, bundle };
|
|
69
|
+
}
|
|
70
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
71
|
+
function resolveTarget(root, target) {
|
|
72
|
+
return path.isAbsolute(target) ? target : path.resolve(root, target);
|
|
73
|
+
}
|
|
74
|
+
function ok(data) {
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function err(message) {
|
|
80
|
+
return {
|
|
81
|
+
isError: true,
|
|
82
|
+
content: [{ type: 'text', text: message }],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// ─── Tool definitions ─────────────────────────────────────────────────────────
|
|
86
|
+
const TOOLS = [
|
|
87
|
+
{
|
|
88
|
+
name: 'cgb_init',
|
|
89
|
+
description: 'Scan a project directory and build (or refresh) the code graph. ' +
|
|
90
|
+
'Must be run before using any other cgb tools. ' +
|
|
91
|
+
'Returns graph stats and architectural layer summary.',
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
root: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Absolute path to the project root directory',
|
|
98
|
+
},
|
|
99
|
+
force: {
|
|
100
|
+
type: 'boolean',
|
|
101
|
+
description: 'Re-parse all files even if unchanged (default: false)',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
required: ['root'],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'cgb_deps',
|
|
109
|
+
description: 'Get all dependencies (imports) of a file. ' +
|
|
110
|
+
'Returns direct and transitive dependencies with file paths.',
|
|
111
|
+
inputSchema: {
|
|
112
|
+
type: 'object',
|
|
113
|
+
properties: {
|
|
114
|
+
root: {
|
|
115
|
+
type: 'string',
|
|
116
|
+
description: 'Project root directory (must have been initialized with cgb_init)',
|
|
117
|
+
},
|
|
118
|
+
target: {
|
|
119
|
+
type: 'string',
|
|
120
|
+
description: 'Relative or absolute path to the file',
|
|
121
|
+
},
|
|
122
|
+
depth: {
|
|
123
|
+
type: 'number',
|
|
124
|
+
description: 'How many levels of transitive deps to include (default: 3)',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
required: ['root', 'target'],
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'cgb_impact',
|
|
132
|
+
description: 'Impact analysis: determine which files would be affected if a given file changes. ' +
|
|
133
|
+
'Returns a sorted list of affected files with their dependency depth.',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
root: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'Project root directory',
|
|
140
|
+
},
|
|
141
|
+
target: {
|
|
142
|
+
type: 'string',
|
|
143
|
+
description: 'Relative or absolute path to the file being changed',
|
|
144
|
+
},
|
|
145
|
+
depth: {
|
|
146
|
+
type: 'number',
|
|
147
|
+
description: 'Maximum traversal depth (default: 10)',
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
required: ['root', 'target'],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'cgb_search',
|
|
155
|
+
description: 'Search for graph nodes by name, description, or file path. ' +
|
|
156
|
+
'Useful for finding classes, functions, or files without knowing their exact location.',
|
|
157
|
+
inputSchema: {
|
|
158
|
+
type: 'object',
|
|
159
|
+
properties: {
|
|
160
|
+
root: {
|
|
161
|
+
type: 'string',
|
|
162
|
+
description: 'Project root directory',
|
|
163
|
+
},
|
|
164
|
+
query: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Search term (matches node name, description, and file path)',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
required: ['root', 'query'],
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'cgb_bundle',
|
|
174
|
+
description: 'Generate an AI-optimised context bundle for a file. ' +
|
|
175
|
+
'The bundle is a compact Markdown document containing: file summary, ' +
|
|
176
|
+
'direct dependencies, reverse dependencies, class hierarchy, and optionally the full source. ' +
|
|
177
|
+
'Use this to give an AI agent the structural context it needs before editing a file.',
|
|
178
|
+
inputSchema: {
|
|
179
|
+
type: 'object',
|
|
180
|
+
properties: {
|
|
181
|
+
root: {
|
|
182
|
+
type: 'string',
|
|
183
|
+
description: 'Project root directory',
|
|
184
|
+
},
|
|
185
|
+
target: {
|
|
186
|
+
type: 'string',
|
|
187
|
+
description: 'Relative or absolute path to the file to bundle',
|
|
188
|
+
},
|
|
189
|
+
depth: {
|
|
190
|
+
type: 'number',
|
|
191
|
+
description: 'Dependency traversal depth (default: 2)',
|
|
192
|
+
},
|
|
193
|
+
includeSource: {
|
|
194
|
+
type: 'boolean',
|
|
195
|
+
description: 'Include the full source of the target file in the bundle (default: true)',
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
required: ['root', 'target'],
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'cgb_stats',
|
|
203
|
+
description: 'Get summary statistics for the project graph: ' +
|
|
204
|
+
'file count, node count, edge count, node type breakdown, ' +
|
|
205
|
+
'cycle detection results, and architectural layer distribution.',
|
|
206
|
+
inputSchema: {
|
|
207
|
+
type: 'object',
|
|
208
|
+
properties: {
|
|
209
|
+
root: {
|
|
210
|
+
type: 'string',
|
|
211
|
+
description: 'Project root directory',
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
required: ['root'],
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: 'cgb_path',
|
|
219
|
+
description: 'Find the shortest dependency path between two files. ' +
|
|
220
|
+
'Useful for understanding how one module depends (transitively) on another.',
|
|
221
|
+
inputSchema: {
|
|
222
|
+
type: 'object',
|
|
223
|
+
properties: {
|
|
224
|
+
root: {
|
|
225
|
+
type: 'string',
|
|
226
|
+
description: 'Project root directory',
|
|
227
|
+
},
|
|
228
|
+
from: {
|
|
229
|
+
type: 'string',
|
|
230
|
+
description: 'Relative or absolute path to the source file',
|
|
231
|
+
},
|
|
232
|
+
to: {
|
|
233
|
+
type: 'string',
|
|
234
|
+
description: 'Relative or absolute path to the target file',
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
required: ['root', 'from', 'to'],
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
];
|
|
241
|
+
// ─── Tool handlers ────────────────────────────────────────────────────────────
|
|
242
|
+
async function handleInit(args) {
|
|
243
|
+
const { root, force = false } = args;
|
|
244
|
+
if (!fs.existsSync(root)) {
|
|
245
|
+
return err(`Directory does not exist: ${root}`);
|
|
246
|
+
}
|
|
247
|
+
const { db, parser, engine } = await getServices(root);
|
|
248
|
+
try {
|
|
249
|
+
const result = await parser.scanAll(force);
|
|
250
|
+
const stats = db.getStats();
|
|
251
|
+
const byKind = db.getNodeCountByKind();
|
|
252
|
+
const layers = engine.layers();
|
|
253
|
+
return ok({
|
|
254
|
+
success: true,
|
|
255
|
+
durationMs: result.durationMs,
|
|
256
|
+
parsed: result.parsed,
|
|
257
|
+
skipped: result.skipped,
|
|
258
|
+
errors: result.errors.slice(0, 10),
|
|
259
|
+
graph: {
|
|
260
|
+
files: stats.files,
|
|
261
|
+
nodes: stats.nodes,
|
|
262
|
+
edges: stats.edges,
|
|
263
|
+
byKind,
|
|
264
|
+
},
|
|
265
|
+
layers: layers.slice(0, 15),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
db.close();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function handleDeps(args) {
|
|
273
|
+
const { root, target, depth = 3 } = args;
|
|
274
|
+
const { db, engine } = await getServices(root);
|
|
275
|
+
try {
|
|
276
|
+
const absTarget = resolveTarget(root, target);
|
|
277
|
+
const nodeId = `file:${absTarget}`;
|
|
278
|
+
const result = engine.deps(nodeId, depth);
|
|
279
|
+
if (!result) {
|
|
280
|
+
return err(`File not found in graph: ${target}\nRun cgb_init first.`);
|
|
281
|
+
}
|
|
282
|
+
// Simplify the result for AI consumption
|
|
283
|
+
return ok({
|
|
284
|
+
target: { id: result.target.id, name: result.target.name, filePath: result.target.filePath },
|
|
285
|
+
direct: result.direct.map((n) => ({
|
|
286
|
+
id: n.id,
|
|
287
|
+
name: n.name,
|
|
288
|
+
filePath: n.filePath,
|
|
289
|
+
isExternal: n.isExternal,
|
|
290
|
+
kind: n.kind,
|
|
291
|
+
})),
|
|
292
|
+
transitive: result.transitive.map((n) => ({
|
|
293
|
+
id: n.id,
|
|
294
|
+
name: n.name,
|
|
295
|
+
filePath: n.filePath,
|
|
296
|
+
isExternal: n.isExternal,
|
|
297
|
+
kind: n.kind,
|
|
298
|
+
})),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
db.close();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
async function handleImpact(args) {
|
|
306
|
+
const { root, target, depth = 10 } = args;
|
|
307
|
+
const { db, engine } = await getServices(root);
|
|
308
|
+
try {
|
|
309
|
+
const absTarget = resolveTarget(root, target);
|
|
310
|
+
const nodeId = `file:${absTarget}`;
|
|
311
|
+
const result = engine.impact(nodeId, depth);
|
|
312
|
+
if (!result) {
|
|
313
|
+
return err(`File not found in graph: ${target}\nRun cgb_init first.`);
|
|
314
|
+
}
|
|
315
|
+
return ok({
|
|
316
|
+
target: { id: result.target.id, name: result.target.name, filePath: result.target.filePath },
|
|
317
|
+
affectedCount: result.affected.length,
|
|
318
|
+
affected: result.affected.map((a) => ({
|
|
319
|
+
depth: a.depth,
|
|
320
|
+
id: a.node.id,
|
|
321
|
+
name: a.node.name,
|
|
322
|
+
filePath: a.node.filePath,
|
|
323
|
+
})),
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
db.close();
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async function handleSearch(args) {
|
|
331
|
+
const { root, query } = args;
|
|
332
|
+
const { db, engine } = await getServices(root);
|
|
333
|
+
try {
|
|
334
|
+
const results = engine.search(query);
|
|
335
|
+
return ok({
|
|
336
|
+
query,
|
|
337
|
+
count: results.length,
|
|
338
|
+
results: results.slice(0, 30).map((n) => ({
|
|
339
|
+
id: n.id,
|
|
340
|
+
kind: n.kind,
|
|
341
|
+
name: n.name,
|
|
342
|
+
filePath: n.filePath,
|
|
343
|
+
isExternal: n.isExternal,
|
|
344
|
+
description: n.description,
|
|
345
|
+
})),
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
db.close();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
async function handleBundle(args) {
|
|
353
|
+
const { root, target, depth = 2, includeSource = true } = args;
|
|
354
|
+
const { db, bundle } = await getServices(root);
|
|
355
|
+
try {
|
|
356
|
+
const absTarget = resolveTarget(root, target);
|
|
357
|
+
const result = bundle.generate(absTarget, { depth, includeSource });
|
|
358
|
+
const markdown = bundle.render(result);
|
|
359
|
+
return ok({
|
|
360
|
+
target: absTarget,
|
|
361
|
+
tokenEstimate: result.totalTokenEstimate,
|
|
362
|
+
bundle: markdown,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
db.close();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
async function handleStats(args) {
|
|
370
|
+
const { root } = args;
|
|
371
|
+
const { db, engine } = await getServices(root);
|
|
372
|
+
try {
|
|
373
|
+
const stats = db.getStats();
|
|
374
|
+
const byKind = db.getNodeCountByKind();
|
|
375
|
+
const layers = engine.layers();
|
|
376
|
+
const cycles = engine.detectCycles();
|
|
377
|
+
const orphans = engine.orphans();
|
|
378
|
+
return ok({
|
|
379
|
+
files: stats.files,
|
|
380
|
+
nodes: stats.nodes,
|
|
381
|
+
edges: stats.edges,
|
|
382
|
+
byKind,
|
|
383
|
+
layers: layers.slice(0, 20),
|
|
384
|
+
cycleCount: cycles.length,
|
|
385
|
+
cycles: cycles.slice(0, 5),
|
|
386
|
+
orphanCount: orphans.length,
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
finally {
|
|
390
|
+
db.close();
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
async function handlePath(args) {
|
|
394
|
+
const { root, from, to } = args;
|
|
395
|
+
const { db, engine } = await getServices(root);
|
|
396
|
+
try {
|
|
397
|
+
const absFrom = resolveTarget(root, from);
|
|
398
|
+
const absTo = resolveTarget(root, to);
|
|
399
|
+
const result = engine.path(`file:${absFrom}`, `file:${absTo}`);
|
|
400
|
+
if (!result) {
|
|
401
|
+
return ok({
|
|
402
|
+
found: false,
|
|
403
|
+
from,
|
|
404
|
+
to,
|
|
405
|
+
message: `No dependency path found from ${from} to ${to}`,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return ok({
|
|
409
|
+
found: true,
|
|
410
|
+
length: result.path.length,
|
|
411
|
+
path: result.path.map((n) => ({ id: n.id, name: n.name, filePath: n.filePath })),
|
|
412
|
+
edges: result.edges.map((e) => ({ kind: e.kind, reason: e.reason })),
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
finally {
|
|
416
|
+
db.close();
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// ─── Main ─────────────────────────────────────────────────────────────────────
|
|
420
|
+
async function startMcpServer() {
|
|
421
|
+
const server = new index_js_1.Server({ name: 'cgb', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
422
|
+
// List available tools
|
|
423
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
424
|
+
// Handle tool calls
|
|
425
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
426
|
+
const { name, arguments: args = {} } = request.params;
|
|
427
|
+
try {
|
|
428
|
+
switch (name) {
|
|
429
|
+
case 'cgb_init':
|
|
430
|
+
return await handleInit(args);
|
|
431
|
+
case 'cgb_deps':
|
|
432
|
+
return await handleDeps(args);
|
|
433
|
+
case 'cgb_impact':
|
|
434
|
+
return await handleImpact(args);
|
|
435
|
+
case 'cgb_search':
|
|
436
|
+
return await handleSearch(args);
|
|
437
|
+
case 'cgb_bundle':
|
|
438
|
+
return await handleBundle(args);
|
|
439
|
+
case 'cgb_stats':
|
|
440
|
+
return await handleStats(args);
|
|
441
|
+
case 'cgb_path':
|
|
442
|
+
return await handlePath(args);
|
|
443
|
+
default:
|
|
444
|
+
return err(`Unknown tool: ${name}`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch (e) {
|
|
448
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
449
|
+
return err(`Tool ${name} failed: ${message}`);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
// Connect via stdio
|
|
453
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
454
|
+
await server.connect(transport);
|
|
455
|
+
// Keep running until stdin closes
|
|
456
|
+
process.on('SIGINT', () => process.exit(0));
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface all language adapters must implement.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParsedFile, SupportedLanguage } from '../types.js';
|
|
5
|
+
export interface LanguageAdapter {
|
|
6
|
+
readonly language: SupportedLanguage;
|
|
7
|
+
/** Parse a source file and return extracted nodes + edges */
|
|
8
|
+
parse(filePath: string, source: string): Promise<ParsedFile>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/parser/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,6DAA6D;IAC7D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/parser/adapter.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# language adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extracts:
|
|
5
|
+
* - using directives → imports edges
|
|
6
|
+
* - class / record definitions → class nodes + inherits / implements edges
|
|
7
|
+
* - interface definitions → interface nodes
|
|
8
|
+
* - method declarations → method nodes
|
|
9
|
+
* - namespace declarations → module nodes
|
|
10
|
+
*/
|
|
11
|
+
import type { LanguageAdapter } from '../adapter.js';
|
|
12
|
+
import type { ParsedFile } from '../../types.js';
|
|
13
|
+
export declare class CSharpAdapter implements LanguageAdapter {
|
|
14
|
+
readonly language: "csharp";
|
|
15
|
+
parse(filePath: string, source: string): Promise<ParsedFile>;
|
|
16
|
+
private extractUsings;
|
|
17
|
+
private extractNamespaces;
|
|
18
|
+
private extractClasses;
|
|
19
|
+
private extractInterfaces;
|
|
20
|
+
private extractMethods;
|
|
21
|
+
/** Walk the tree recursively to find all nodes of a given type */
|
|
22
|
+
private findNodesByType;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=csharp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/parser/adapters/csharp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAwB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIvE,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAEhC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwClE,OAAO,CAAC,aAAa;IAmDrB,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,cAAc;IAiEtB,OAAO,CAAC,iBAAiB;IAyDzB,OAAO,CAAC,cAAc;IAmDtB,kEAAkE;IAClE,OAAO,CAAC,eAAe;CAcxB"}
|