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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +369 -0
  3. package/dist/bundle/generator.d.ts +51 -0
  4. package/dist/bundle/generator.d.ts.map +1 -0
  5. package/dist/bundle/generator.js +291 -0
  6. package/dist/bundle/generator.js.map +1 -0
  7. package/dist/cli/index.d.ts +7 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +388 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/graph/db.d.ts +43 -0
  12. package/dist/graph/db.d.ts.map +1 -0
  13. package/dist/graph/db.js +321 -0
  14. package/dist/graph/db.js.map +1 -0
  15. package/dist/graph/engine.d.ts +62 -0
  16. package/dist/graph/engine.d.ts.map +1 -0
  17. package/dist/graph/engine.js +246 -0
  18. package/dist/graph/engine.js.map +1 -0
  19. package/dist/index.d.ts +13 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +22 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp/server.d.ts +17 -0
  24. package/dist/mcp/server.d.ts.map +1 -0
  25. package/dist/mcp/server.js +458 -0
  26. package/dist/mcp/server.js.map +1 -0
  27. package/dist/parser/adapter.d.ts +10 -0
  28. package/dist/parser/adapter.d.ts.map +1 -0
  29. package/dist/parser/adapter.js +6 -0
  30. package/dist/parser/adapter.js.map +1 -0
  31. package/dist/parser/adapters/csharp.d.ts +24 -0
  32. package/dist/parser/adapters/csharp.d.ts.map +1 -0
  33. package/dist/parser/adapters/csharp.js +318 -0
  34. package/dist/parser/adapters/csharp.js.map +1 -0
  35. package/dist/parser/adapters/go.d.ts +21 -0
  36. package/dist/parser/adapters/go.d.ts.map +1 -0
  37. package/dist/parser/adapters/go.js +186 -0
  38. package/dist/parser/adapters/go.js.map +1 -0
  39. package/dist/parser/adapters/java.d.ts +22 -0
  40. package/dist/parser/adapters/java.d.ts.map +1 -0
  41. package/dist/parser/adapters/java.js +235 -0
  42. package/dist/parser/adapters/java.js.map +1 -0
  43. package/dist/parser/adapters/python.d.ts +19 -0
  44. package/dist/parser/adapters/python.d.ts.map +1 -0
  45. package/dist/parser/adapters/python.js +201 -0
  46. package/dist/parser/adapters/python.js.map +1 -0
  47. package/dist/parser/adapters/typescript.d.ts +24 -0
  48. package/dist/parser/adapters/typescript.d.ts.map +1 -0
  49. package/dist/parser/adapters/typescript.js +349 -0
  50. package/dist/parser/adapters/typescript.js.map +1 -0
  51. package/dist/parser/index.d.ts +42 -0
  52. package/dist/parser/index.d.ts.map +1 -0
  53. package/dist/parser/index.js +191 -0
  54. package/dist/parser/index.js.map +1 -0
  55. package/dist/parser/tree-sitter-engine.d.ts +25 -0
  56. package/dist/parser/tree-sitter-engine.d.ts.map +1 -0
  57. package/dist/parser/tree-sitter-engine.js +107 -0
  58. package/dist/parser/tree-sitter-engine.js.map +1 -0
  59. package/dist/parser/utils.d.ts +19 -0
  60. package/dist/parser/utils.d.ts.map +1 -0
  61. package/dist/parser/utils.js +111 -0
  62. package/dist/parser/utils.js.map +1 -0
  63. package/dist/types.d.ts +93 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +16 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/watcher/index.d.ts +36 -0
  68. package/dist/watcher/index.d.ts.map +1 -0
  69. package/dist/watcher/index.js +139 -0
  70. package/dist/watcher/index.js.map +1 -0
  71. package/package.json +81 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * Tree-sitter WASM engine orchestrator.
4
+ * Initialises web-tree-sitter, loads language grammars on demand,
5
+ * and provides a unified parse() method that returns a Tree for any
6
+ * supported language.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.treeSitterEngine = exports.TreeSitterEngine = void 0;
46
+ const path = __importStar(require("path"));
47
+ const fs = __importStar(require("fs"));
48
+ const web_tree_sitter_1 = __importDefault(require("web-tree-sitter"));
49
+ // ─── WASM grammar paths ───────────────────────────────────────────────────────
50
+ const WASM_DIR = path.join(path.dirname(require.resolve('tree-sitter-wasms/package.json')), 'out');
51
+ const LANG_WASM_NAMES = {
52
+ typescript: 'tree-sitter-typescript.wasm',
53
+ javascript: 'tree-sitter-javascript.wasm',
54
+ csharp: 'tree-sitter-c_sharp.wasm',
55
+ python: 'tree-sitter-python.wasm',
56
+ go: 'tree-sitter-go.wasm',
57
+ java: 'tree-sitter-java.wasm',
58
+ };
59
+ // ─── TreeSitterEngine ─────────────────────────────────────────────────────────
60
+ class TreeSitterEngine {
61
+ parser;
62
+ languageCache = new Map();
63
+ initialised = false;
64
+ async init() {
65
+ if (this.initialised)
66
+ return;
67
+ // web-tree-sitter v0.20.x auto-locates tree-sitter.wasm from its package dir
68
+ await web_tree_sitter_1.default.init();
69
+ this.parser = new web_tree_sitter_1.default();
70
+ this.initialised = true;
71
+ }
72
+ /** Parse source text in the given language and return a tree-sitter Tree */
73
+ async parse(source, language) {
74
+ await this.init();
75
+ const lang = await this.loadLanguage(language);
76
+ this.parser.setLanguage(lang);
77
+ return this.parser.parse(source);
78
+ }
79
+ /** Return the tree-sitter Language object (cached) */
80
+ async loadLanguage(language) {
81
+ if (this.languageCache.has(language)) {
82
+ return this.languageCache.get(language);
83
+ }
84
+ const wasmFile = LANG_WASM_NAMES[language];
85
+ const wasmPath = path.join(WASM_DIR, wasmFile);
86
+ if (!fs.existsSync(wasmPath)) {
87
+ throw new Error(`WASM grammar not found for ${language}: ${wasmPath}`);
88
+ }
89
+ const lang = await web_tree_sitter_1.default.Language.load(wasmPath);
90
+ this.languageCache.set(language, lang);
91
+ return lang;
92
+ }
93
+ /** Run a tree-sitter query against a tree and collect all matches */
94
+ query(tree, language, queryString) {
95
+ const q = language.query(queryString);
96
+ return q.matches(tree.rootNode);
97
+ }
98
+ /** Collect all captures from a query */
99
+ captures(tree, language, queryString) {
100
+ const q = language.query(queryString);
101
+ return q.captures(tree.rootNode);
102
+ }
103
+ }
104
+ exports.TreeSitterEngine = TreeSitterEngine;
105
+ /** Singleton engine instance shared across adapters */
106
+ exports.treeSitterEngine = new TreeSitterEngine();
107
+ //# sourceMappingURL=tree-sitter-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-engine.js","sourceRoot":"","sources":["../../src/parser/tree-sitter-engine.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,uCAAyB;AACzB,sEAAqC;AAGrC,iFAAiF;AAEjF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnG,MAAM,eAAe,GAAsC;IACzD,UAAU,EAAE,6BAA6B;IACzC,UAAU,EAAE,6BAA6B;IACzC,MAAM,EAAE,0BAA0B;IAClC,MAAM,EAAE,yBAAyB;IACjC,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,uBAAuB;CAC9B,CAAC;AAEF,iFAAiF;AAEjF,MAAa,gBAAgB;IACnB,MAAM,CAAU;IAChB,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC9D,WAAW,GAAG,KAAK,CAAC;IAE5B,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,6EAA6E;QAC7E,MAAM,yBAAM,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,QAA2B;QACrD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,YAAY,CAAC,QAA2B;QAC5C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAC3C,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,yBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,IAAiB,EAAE,QAAyB,EAAE,WAAmB;QACrE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,wCAAwC;IACxC,QAAQ,CACN,IAAiB,EACjB,QAAyB,EACzB,WAAmB;QAEnB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF;AAnDD,4CAmDC;AAED,uDAAuD;AAC1C,QAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared utilities used by multiple language adapters.
3
+ */
4
+ import type { NodeKind, SupportedLanguage } from '../types.js';
5
+ /** Generate a stable node ID from a file path and optional symbol name */
6
+ export declare function makeNodeId(kind: NodeKind, filePath: string, symbolName?: string): string;
7
+ /** Generate a stable edge ID */
8
+ export declare function makeEdgeId(fromId: string, kind: string, toId: string): string;
9
+ /** Compute SHA-256 hash of source text */
10
+ export declare function hashContent(content: string): string;
11
+ /** Infer display name from a file path */
12
+ export declare function fileDisplayName(filePath: string): string;
13
+ /** Resolve an import path relative to the importing file */
14
+ export declare function resolveImportPath(importingFile: string, importPath: string, extensions: string[]): string | null;
15
+ /** Detect language from file extension */
16
+ export declare function detectLanguage(filePath: string): SupportedLanguage | null;
17
+ /** Truncate description to a reasonable length */
18
+ export declare function truncate(text: string, max?: number): string;
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/parser/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxF;AAED,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,GAAG,IAAI,CAqBf;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAezE;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Shared utilities used by multiple language adapters.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.makeNodeId = makeNodeId;
40
+ exports.makeEdgeId = makeEdgeId;
41
+ exports.hashContent = hashContent;
42
+ exports.fileDisplayName = fileDisplayName;
43
+ exports.resolveImportPath = resolveImportPath;
44
+ exports.detectLanguage = detectLanguage;
45
+ exports.truncate = truncate;
46
+ const crypto = __importStar(require("crypto"));
47
+ const path = __importStar(require("path"));
48
+ /** Generate a stable node ID from a file path and optional symbol name */
49
+ function makeNodeId(kind, filePath, symbolName) {
50
+ const base = symbolName ? `${filePath}#${symbolName}` : filePath;
51
+ return `${kind}:${base}`;
52
+ }
53
+ /** Generate a stable edge ID */
54
+ function makeEdgeId(fromId, kind, toId) {
55
+ return `${fromId}|${kind}|${toId}`;
56
+ }
57
+ /** Compute SHA-256 hash of source text */
58
+ function hashContent(content) {
59
+ return crypto.createHash('sha256').update(content).digest('hex');
60
+ }
61
+ /** Infer display name from a file path */
62
+ function fileDisplayName(filePath) {
63
+ return path.basename(filePath);
64
+ }
65
+ /** Resolve an import path relative to the importing file */
66
+ function resolveImportPath(importingFile, importPath, extensions) {
67
+ if (importPath.startsWith('.')) {
68
+ const dir = path.dirname(importingFile);
69
+ // Strip any existing extension that may be a compile-time alias (e.g. .js in TS sources)
70
+ // so we can find the actual source file with the correct extension.
71
+ const stripped = importPath.replace(/\.(m?jsx?|cjs|tsx?)$/, '');
72
+ const resolved = path.resolve(dir, stripped);
73
+ // Try appending source extensions
74
+ for (const ext of extensions) {
75
+ if (require('fs').existsSync(resolved + ext)) {
76
+ return resolved + ext;
77
+ }
78
+ // Try index file
79
+ const indexPath = path.join(resolved, `index${ext}`);
80
+ if (require('fs').existsSync(indexPath)) {
81
+ return indexPath;
82
+ }
83
+ }
84
+ return resolved; // Return unresolved base — will remain unlinked until that file is parsed
85
+ }
86
+ return null; // External / node_modules
87
+ }
88
+ /** Detect language from file extension */
89
+ function detectLanguage(filePath) {
90
+ const ext = path.extname(filePath).toLowerCase();
91
+ const MAP = {
92
+ '.ts': 'typescript',
93
+ '.tsx': 'typescript',
94
+ '.js': 'javascript',
95
+ '.jsx': 'javascript',
96
+ '.mjs': 'javascript',
97
+ '.cjs': 'javascript',
98
+ '.cs': 'csharp',
99
+ '.py': 'python',
100
+ '.go': 'go',
101
+ '.java': 'java',
102
+ };
103
+ return MAP[ext] ?? null;
104
+ }
105
+ /** Truncate description to a reasonable length */
106
+ function truncate(text, max = 200) {
107
+ if (text.length <= max)
108
+ return text;
109
+ return text.slice(0, max - 3) + '...';
110
+ }
111
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/parser/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Core domain types for the Code Graph Builder.
3
+ * All entities and edges in the graph are represented by these types.
4
+ */
5
+ export type NodeKind = 'file' | 'module' | 'class' | 'interface' | 'function' | 'method' | 'external_dep';
6
+ export interface GraphNode {
7
+ id: string;
8
+ kind: NodeKind;
9
+ name: string;
10
+ filePath: string;
11
+ /** Brief purpose — max 3 sentences, auto-inferred or user-supplied */
12
+ description: string;
13
+ /** True for external npm/nuget/pypi packages */
14
+ isExternal: boolean;
15
+ language: SupportedLanguage | null;
16
+ /** Serialized JSON of additional metadata (e.g. visibility, return type) */
17
+ meta: string;
18
+ updatedAt: number;
19
+ }
20
+ export type EdgeKind = 'imports' | 'calls' | 'inherits' | 'implements' | 'exports';
21
+ export interface GraphEdge {
22
+ id: string;
23
+ fromId: string;
24
+ toId: string;
25
+ kind: EdgeKind;
26
+ /** Short reason why this edge exists (auto-inferred or user-provided) */
27
+ reason: string;
28
+ updatedAt: number;
29
+ }
30
+ export interface FileRecord {
31
+ filePath: string;
32
+ language: SupportedLanguage;
33
+ contentHash: string;
34
+ mtime: number;
35
+ nodeCount: number;
36
+ edgeCount: number;
37
+ parsedAt: number;
38
+ }
39
+ export type SupportedLanguage = 'typescript' | 'javascript' | 'csharp' | 'python' | 'go' | 'java';
40
+ export declare const LANGUAGE_EXTENSIONS: Record<SupportedLanguage, string[]>;
41
+ /** Raw extraction result from a language adapter, before DB writes */
42
+ export interface ParsedFile {
43
+ filePath: string;
44
+ language: SupportedLanguage;
45
+ nodes: Omit<GraphNode, 'updatedAt'>[];
46
+ edges: Omit<GraphEdge, 'updatedAt'>[];
47
+ }
48
+ export interface DepsResult {
49
+ target: GraphNode;
50
+ direct: GraphNode[];
51
+ transitive: GraphNode[];
52
+ }
53
+ export interface CallersResult {
54
+ target: GraphNode;
55
+ callers: Array<{
56
+ node: GraphNode;
57
+ reason: string;
58
+ }>;
59
+ }
60
+ export interface CalleesResult {
61
+ target: GraphNode;
62
+ callees: Array<{
63
+ node: GraphNode;
64
+ reason: string;
65
+ }>;
66
+ }
67
+ export interface ImpactResult {
68
+ target: GraphNode;
69
+ /** All nodes that transitively import/depend on the target */
70
+ affected: Array<{
71
+ node: GraphNode;
72
+ depth: number;
73
+ path: GraphNode[];
74
+ }>;
75
+ }
76
+ export interface PathResult {
77
+ from: GraphNode;
78
+ to: GraphNode;
79
+ path: GraphNode[];
80
+ edges: GraphEdge[];
81
+ }
82
+ export interface ContextBundle {
83
+ generatedAt: string;
84
+ rootFile: string;
85
+ totalTokenEstimate: number;
86
+ sections: BundleSection[];
87
+ }
88
+ export interface BundleSection {
89
+ title: string;
90
+ content: string;
91
+ tokenEstimate: number;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Core domain types for the Code Graph Builder.
4
+ * All entities and edges in the graph are represented by these types.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LANGUAGE_EXTENSIONS = void 0;
8
+ exports.LANGUAGE_EXTENSIONS = {
9
+ typescript: ['.ts', '.tsx'],
10
+ javascript: ['.js', '.jsx', '.mjs', '.cjs'],
11
+ csharp: ['.cs'],
12
+ python: ['.py'],
13
+ go: ['.go'],
14
+ java: ['.java'],
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA+DU,QAAA,mBAAmB,GAAwC;IACtE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,CAAC;IACf,MAAM,EAAE,CAAC,KAAK,CAAC;IACf,EAAE,EAAE,CAAC,KAAK,CAAC;IACX,IAAI,EAAE,CAAC,OAAO,CAAC;CAChB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * File system watcher using chokidar.
3
+ * Watches a project root and incrementally updates the graph whenever
4
+ * source files are added, changed, or deleted.
5
+ */
6
+ import type { Parser } from '../parser/index.js';
7
+ export interface WatcherOptions {
8
+ /** Called after each batch of file changes is processed */
9
+ onUpdate?: (result: {
10
+ parsed: number;
11
+ errors: number;
12
+ files: string[];
13
+ }) => void;
14
+ /** Called when the watcher encounters an error */
15
+ onError?: (err: Error) => void;
16
+ /** Extra glob patterns to ignore (in addition to built-in defaults) */
17
+ extraIgnores?: string[];
18
+ }
19
+ export declare class Watcher {
20
+ private readonly projectRoot;
21
+ private readonly parser;
22
+ private readonly options;
23
+ private watcher;
24
+ private pendingFiles;
25
+ private debounceTimer;
26
+ constructor(projectRoot: string, parser: Parser, options?: WatcherOptions);
27
+ /** Start watching the project root */
28
+ start(): void;
29
+ /** Stop watching */
30
+ stop(): Promise<void>;
31
+ private enqueue;
32
+ private handleDelete;
33
+ private scheduleBatch;
34
+ private processBatch;
35
+ }
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,kDAAkD;IAClD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAiBD,qBAAa,OAAO;IAMhB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAA+B;gBAGjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB;IAG/C,sCAAsC;IACtC,KAAK,IAAI,IAAI;IAwBb,oBAAoB;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;YAOP,YAAY;CAa3B"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * File system watcher using chokidar.
4
+ * Watches a project root and incrementally updates the graph whenever
5
+ * source files are added, changed, or deleted.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.Watcher = void 0;
45
+ const chokidar_1 = __importDefault(require("chokidar"));
46
+ const path = __importStar(require("path"));
47
+ const utils_js_1 = require("../parser/utils.js");
48
+ // Debounce window — coalesce rapid saves into a single re-parse
49
+ const DEBOUNCE_MS = 200;
50
+ const DEFAULT_IGNORES = [
51
+ /(^|[/\\])\../, // dotfiles
52
+ /node_modules/,
53
+ /dist/,
54
+ /build/,
55
+ /bin/,
56
+ /obj/,
57
+ /coverage/,
58
+ /\.cgb/,
59
+ /__pycache__/,
60
+ /vendor/,
61
+ /\.min\.js$/,
62
+ /\.d\.ts$/,
63
+ ];
64
+ class Watcher {
65
+ projectRoot;
66
+ parser;
67
+ options;
68
+ watcher = null;
69
+ pendingFiles = new Set();
70
+ debounceTimer = null;
71
+ constructor(projectRoot, parser, options = {}) {
72
+ this.projectRoot = projectRoot;
73
+ this.parser = parser;
74
+ this.options = options;
75
+ }
76
+ /** Start watching the project root */
77
+ start() {
78
+ if (this.watcher)
79
+ return;
80
+ const ignored = [...DEFAULT_IGNORES, ...(this.options.extraIgnores ?? [])];
81
+ this.watcher = chokidar_1.default.watch(this.projectRoot, {
82
+ ignored,
83
+ persistent: true,
84
+ ignoreInitial: true, // Don't re-parse on startup (use `cgb init` for initial scan)
85
+ awaitWriteFinish: {
86
+ stabilityThreshold: 100,
87
+ pollInterval: 50,
88
+ },
89
+ });
90
+ this.watcher
91
+ .on('add', (p) => this.enqueue(p))
92
+ .on('change', (p) => this.enqueue(p))
93
+ .on('unlink', (p) => this.handleDelete(p))
94
+ .on('error', (err) => this.options.onError?.(err instanceof Error ? err : new Error(String(err))));
95
+ }
96
+ /** Stop watching */
97
+ async stop() {
98
+ if (this.debounceTimer) {
99
+ clearTimeout(this.debounceTimer);
100
+ this.debounceTimer = null;
101
+ }
102
+ if (this.watcher) {
103
+ await this.watcher.close();
104
+ this.watcher = null;
105
+ }
106
+ }
107
+ // ─── Private helpers ───────────────────────────────────────────────────────
108
+ enqueue(filePath) {
109
+ const absPath = path.resolve(filePath);
110
+ if (!(0, utils_js_1.detectLanguage)(absPath))
111
+ return; // only watch parseable files
112
+ this.pendingFiles.add(absPath);
113
+ this.scheduleBatch();
114
+ }
115
+ handleDelete(filePath) {
116
+ const absPath = path.resolve(filePath);
117
+ this.parser.removeFile(absPath);
118
+ }
119
+ scheduleBatch() {
120
+ if (this.debounceTimer) {
121
+ clearTimeout(this.debounceTimer);
122
+ }
123
+ this.debounceTimer = setTimeout(() => void this.processBatch(), DEBOUNCE_MS);
124
+ }
125
+ async processBatch() {
126
+ if (this.pendingFiles.size === 0)
127
+ return;
128
+ const files = Array.from(this.pendingFiles);
129
+ this.pendingFiles.clear();
130
+ const result = await this.parser.parseFiles(files);
131
+ this.options.onUpdate?.({
132
+ parsed: result.parsed,
133
+ errors: result.errors.length,
134
+ files,
135
+ });
136
+ }
137
+ }
138
+ exports.Watcher = Watcher;
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,wDAAgC;AAChC,2CAA6B;AAE7B,iDAAoD;AAEpD,gEAAgE;AAChE,MAAM,WAAW,GAAG,GAAG,CAAC;AAWxB,MAAM,eAAe,GAAwB;IAC3C,cAAc,EAAE,WAAW;IAC3B,cAAc;IACd,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,UAAU;IACV,OAAO;IACP,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,UAAU;CACX,CAAC;AAEF,MAAa,OAAO;IAMC;IACA;IACA;IAPX,OAAO,GAA8B,IAAI,CAAC;IAC1C,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,aAAa,GAA0B,IAAI,CAAC;IAEpD,YACmB,WAAmB,EACnB,MAAc,EACd,UAA0B,EAAE;QAF5B,gBAAW,GAAX,WAAW,CAAQ;QACnB,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAqB;IAC5C,CAAC;IAEJ,sCAAsC;IACtC,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,kBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;YAC9C,OAAO;YACP,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI,EAAE,8DAA8D;YACnF,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,EAAE;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO;aACT,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACjC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACpC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACzC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACnB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5E,CAAC;IACN,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,8EAA8E;IAEtE,OAAO,CAAC,QAAgB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAA,yBAAc,EAAC,OAAO,CAAC;YAAE,OAAO,CAAC,6BAA6B;QAEnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAEzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC5B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AAnFD,0BAmFC"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "cgb-builder",
3
+ "version": "1.0.0",
4
+ "description": "Automated polyglot code graph builder for AI-ready context bundles",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "cgb": "dist/cli/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "ts-node src/cli/index.ts",
24
+ "lint": "eslint src --ext .ts",
25
+ "lint:fix": "eslint src --ext .ts --fix",
26
+ "format": "prettier --write \"src/**/*.ts\"",
27
+ "format:check": "prettier --check \"src/**/*.ts\"",
28
+ "test": "jest",
29
+ "test:watch": "jest --watch",
30
+ "prepublishOnly": "npm test && npm run build"
31
+ },
32
+ "keywords": [
33
+ "code-graph",
34
+ "static-analysis",
35
+ "tree-sitter",
36
+ "ai-context",
37
+ "dependency-graph",
38
+ "mcp",
39
+ "model-context-protocol",
40
+ "polyglot",
41
+ "cgb"
42
+ ],
43
+ "author": "VxLabs",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/vxlabs/cgb-builder.git"
48
+ },
49
+ "homepage": "https://github.com/vxlabs/cgb-builder#readme",
50
+ "bugs": {
51
+ "url": "https://github.com/vxlabs/cgb-builder/issues"
52
+ },
53
+ "dependencies": {
54
+ "@modelcontextprotocol/sdk": "^1.29.0",
55
+ "chalk": "^5.3.0",
56
+ "chokidar": "^3.6.0",
57
+ "commander": "^12.0.0",
58
+ "glob": "^10.3.12",
59
+ "sql.js": "^1.12.0",
60
+ "tree-sitter-wasms": "^0.1.13",
61
+ "web-tree-sitter": "^0.20.8"
62
+ },
63
+ "devDependencies": {
64
+ "@types/jest": "^29.5.12",
65
+ "@types/node": "^20.11.30",
66
+ "@types/sql.js": "^1.4.9",
67
+ "@typescript-eslint/eslint-plugin": "^7.3.1",
68
+ "@typescript-eslint/parser": "^7.3.1",
69
+ "eslint": "^8.57.0",
70
+ "eslint-config-prettier": "^9.1.0",
71
+ "eslint-plugin-prettier": "^5.1.3",
72
+ "jest": "^29.7.0",
73
+ "prettier": "^3.2.5",
74
+ "ts-jest": "^29.1.2",
75
+ "ts-node": "^10.9.2",
76
+ "typescript": "^5.4.3"
77
+ },
78
+ "engines": {
79
+ "node": ">=20.0.0"
80
+ }
81
+ }