dbgraph 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/dist/bin/dbgraph.d.ts +8 -0
  4. package/dist/bin/dbgraph.d.ts.map +1 -0
  5. package/dist/bin/dbgraph.js +382 -0
  6. package/dist/bin/dbgraph.js.map +1 -0
  7. package/dist/config.d.ts +25 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +158 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/context/formatter.d.ts +94 -0
  12. package/dist/context/formatter.d.ts.map +1 -0
  13. package/dist/context/formatter.js +288 -0
  14. package/dist/context/formatter.js.map +1 -0
  15. package/dist/context/index.d.ts +77 -0
  16. package/dist/context/index.d.ts.map +1 -0
  17. package/dist/context/index.js +458 -0
  18. package/dist/context/index.js.map +1 -0
  19. package/dist/db/index.d.ts +26 -0
  20. package/dist/db/index.d.ts.map +1 -0
  21. package/dist/db/index.js +127 -0
  22. package/dist/db/index.js.map +1 -0
  23. package/dist/db/migrations.d.ts +8 -0
  24. package/dist/db/migrations.d.ts.map +1 -0
  25. package/dist/db/migrations.js +39 -0
  26. package/dist/db/migrations.js.map +1 -0
  27. package/dist/db/queries.d.ts +46 -0
  28. package/dist/db/queries.d.ts.map +1 -0
  29. package/dist/db/queries.js +436 -0
  30. package/dist/db/queries.js.map +1 -0
  31. package/dist/db/schema.sql +113 -0
  32. package/dist/db/sqlite-adapter.d.ts +30 -0
  33. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  34. package/dist/db/sqlite-adapter.js +78 -0
  35. package/dist/db/sqlite-adapter.js.map +1 -0
  36. package/dist/directory.d.ts +37 -0
  37. package/dist/directory.d.ts.map +1 -0
  38. package/dist/directory.js +160 -0
  39. package/dist/directory.js.map +1 -0
  40. package/dist/errors.d.ts +46 -0
  41. package/dist/errors.d.ts.map +1 -0
  42. package/dist/errors.js +90 -0
  43. package/dist/errors.js.map +1 -0
  44. package/dist/graph/traversal.d.ts +157 -0
  45. package/dist/graph/traversal.d.ts.map +1 -0
  46. package/dist/graph/traversal.js +531 -0
  47. package/dist/graph/traversal.js.map +1 -0
  48. package/dist/index.d.ts +183 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +435 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/introspect/base.d.ts +62 -0
  53. package/dist/introspect/base.d.ts.map +1 -0
  54. package/dist/introspect/base.js +107 -0
  55. package/dist/introspect/base.js.map +1 -0
  56. package/dist/introspect/connection.d.ts +30 -0
  57. package/dist/introspect/connection.d.ts.map +1 -0
  58. package/dist/introspect/connection.js +232 -0
  59. package/dist/introspect/connection.js.map +1 -0
  60. package/dist/introspect/index.d.ts +23 -0
  61. package/dist/introspect/index.d.ts.map +1 -0
  62. package/dist/introspect/index.js +46 -0
  63. package/dist/introspect/index.js.map +1 -0
  64. package/dist/introspect/mysql.d.ts +64 -0
  65. package/dist/introspect/mysql.d.ts.map +1 -0
  66. package/dist/introspect/mysql.js +360 -0
  67. package/dist/introspect/mysql.js.map +1 -0
  68. package/dist/introspect/postgres.d.ts +55 -0
  69. package/dist/introspect/postgres.d.ts.map +1 -0
  70. package/dist/introspect/postgres.js +372 -0
  71. package/dist/introspect/postgres.js.map +1 -0
  72. package/dist/introspect/sqlite.d.ts +33 -0
  73. package/dist/introspect/sqlite.d.ts.map +1 -0
  74. package/dist/introspect/sqlite.js +207 -0
  75. package/dist/introspect/sqlite.js.map +1 -0
  76. package/dist/mcp/engine.d.ts +92 -0
  77. package/dist/mcp/engine.d.ts.map +1 -0
  78. package/dist/mcp/engine.js +261 -0
  79. package/dist/mcp/engine.js.map +1 -0
  80. package/dist/mcp/index.d.ts +33 -0
  81. package/dist/mcp/index.d.ts.map +1 -0
  82. package/dist/mcp/index.js +119 -0
  83. package/dist/mcp/index.js.map +1 -0
  84. package/dist/mcp/server-instructions.d.ts +9 -0
  85. package/dist/mcp/server-instructions.d.ts.map +1 -0
  86. package/dist/mcp/server-instructions.js +71 -0
  87. package/dist/mcp/server-instructions.js.map +1 -0
  88. package/dist/mcp/session.d.ts +35 -0
  89. package/dist/mcp/session.d.ts.map +1 -0
  90. package/dist/mcp/session.js +140 -0
  91. package/dist/mcp/session.js.map +1 -0
  92. package/dist/mcp/tools.d.ts +99 -0
  93. package/dist/mcp/tools.d.ts.map +1 -0
  94. package/dist/mcp/tools.js +499 -0
  95. package/dist/mcp/tools.js.map +1 -0
  96. package/dist/mcp/transport.d.ts +78 -0
  97. package/dist/mcp/transport.d.ts.map +1 -0
  98. package/dist/mcp/transport.js +182 -0
  99. package/dist/mcp/transport.js.map +1 -0
  100. package/dist/search/query-parser.d.ts +66 -0
  101. package/dist/search/query-parser.d.ts.map +1 -0
  102. package/dist/search/query-parser.js +163 -0
  103. package/dist/search/query-parser.js.map +1 -0
  104. package/dist/search/query-utils.d.ts +78 -0
  105. package/dist/search/query-utils.d.ts.map +1 -0
  106. package/dist/search/query-utils.js +203 -0
  107. package/dist/search/query-utils.js.map +1 -0
  108. package/dist/types.d.ts +279 -0
  109. package/dist/types.d.ts.map +1 -0
  110. package/dist/types.js +47 -0
  111. package/dist/types.js.map +1 -0
  112. package/dist/utils.d.ts +40 -0
  113. package/dist/utils.d.ts.map +1 -0
  114. package/dist/utils.js +190 -0
  115. package/dist/utils.js.map +1 -0
  116. package/package.json +54 -0
@@ -0,0 +1,183 @@
1
+ /**
2
+ * DBGraph
3
+ *
4
+ * Database knowledge graph — introspect database schemas into a local
5
+ * knowledge graph and expose it over MCP for LLM-powered SQL generation.
6
+ */
7
+ import { Node, Edge, SearchOptions, SearchResult, GraphStats, DbSourceRecord, TableSchema } from './types';
8
+ import { QueryBuilder } from './db/queries';
9
+ import { GraphTraverser } from './graph/traversal';
10
+ import { ContextBuilder } from './context';
11
+ import { DBGraphConfig } from './config';
12
+ import { MCPServer } from './mcp';
13
+ export * from './types';
14
+ export { getDatabasePath } from './db';
15
+ export { getDBGraphDir, isInitialized, findNearestDBGraphRoot, DBGRAPH_DIR } from './directory';
16
+ export { MCPServer } from './mcp';
17
+ /**
18
+ * Constructor options for DBGraph
19
+ */
20
+ export interface InitOptions {
21
+ /** Path to dbgraph-db.json config file */
22
+ config?: string;
23
+ /** Whether to run initial indexing after init */
24
+ index?: boolean;
25
+ /** Progress callback */
26
+ onProgress?: (msg: string, current: number, total: number) => void;
27
+ }
28
+ export interface OpenOptions {
29
+ /** Whether to run sync if sources have changed */
30
+ sync?: boolean;
31
+ /** Read-only mode */
32
+ readOnly?: boolean;
33
+ }
34
+ export interface IndexOptions {
35
+ /** Progress callback */
36
+ onProgress?: (msg: string, current: number, total: number) => void;
37
+ /** Abort signal */
38
+ signal?: AbortSignal;
39
+ }
40
+ /**
41
+ * Main DBGraph class
42
+ */
43
+ export declare class DBGraph {
44
+ private db;
45
+ private queries;
46
+ private projectRoot;
47
+ private traverser;
48
+ private contextBuilder;
49
+ private config;
50
+ private indexMutex;
51
+ private fileLock;
52
+ private constructor();
53
+ /**
54
+ * Initialize a new DBGraph project
55
+ */
56
+ static init(projectRoot: string, options?: InitOptions): Promise<DBGraph>;
57
+ /**
58
+ * Initialize synchronously (no indexing)
59
+ */
60
+ static initSync(projectRoot: string): DBGraph;
61
+ /**
62
+ * Open an existing DBGraph project
63
+ */
64
+ static open(projectRoot: string, options?: OpenOptions): Promise<DBGraph>;
65
+ /**
66
+ * Open synchronously
67
+ */
68
+ static openSync(projectRoot: string): DBGraph;
69
+ static isInitialized(projectRoot: string): boolean;
70
+ close(): void;
71
+ getProjectRoot(): string;
72
+ getConfig(): DBGraphConfig | null;
73
+ /**
74
+ * Set or update the configuration
75
+ */
76
+ setConfig(config: DBGraphConfig): void;
77
+ /**
78
+ * Index all configured databases
79
+ */
80
+ indexAll(options?: IndexOptions): Promise<{
81
+ success: boolean;
82
+ sourcesIndexed: number;
83
+ nodesCreated: number;
84
+ edgesCreated: number;
85
+ errors: string[];
86
+ }>;
87
+ /**
88
+ * Sync with current database state (re-index)
89
+ */
90
+ sync(options?: IndexOptions): Promise<{
91
+ sourcesChecked: number;
92
+ sourcesReindexed: number;
93
+ }>;
94
+ /**
95
+ * Test connections to all configured databases
96
+ */
97
+ testConnections(): Promise<Array<{
98
+ alias: string;
99
+ success: boolean;
100
+ error?: string;
101
+ }>>;
102
+ /**
103
+ * Search schema objects by name
104
+ */
105
+ searchNodes(query: string, options?: SearchOptions): SearchResult[];
106
+ /**
107
+ * Get a node by ID
108
+ */
109
+ getNode(id: string): Node | null;
110
+ /**
111
+ * Get nodes of a specific kind
112
+ */
113
+ getNodesByKind(kind: Node['kind']): Node[];
114
+ /**
115
+ * Get nodes by exact name
116
+ */
117
+ getNodesByName(name: string): Node[];
118
+ /**
119
+ * Build a complete table schema description from the graph
120
+ */
121
+ getTableSchema(nodeId: string): Promise<TableSchema>;
122
+ /**
123
+ * Build full context for a table as markdown
124
+ */
125
+ buildContext(name: string): Promise<string>;
126
+ /**
127
+ * Get outgoing edges (table → columns, FK references)
128
+ */
129
+ getOutgoingEdges(nodeId: string, kinds?: Edge['kind'][]): Edge[];
130
+ /**
131
+ * Get incoming edges (what references this node)
132
+ */
133
+ getIncomingEdges(nodeId: string, kinds?: Edge['kind'][]): Edge[];
134
+ /**
135
+ * Find FK path between two tables
136
+ */
137
+ findForeignKeyPath(fromName: string, toName: string): Array<{
138
+ node: Node;
139
+ edge: Edge | null;
140
+ }> | null;
141
+ /**
142
+ * Get all databases tracked in the graph
143
+ */
144
+ getSources(): DbSourceRecord[];
145
+ /**
146
+ * Get graph statistics
147
+ */
148
+ getStats(): GraphStats;
149
+ /**
150
+ * Create an MCP server for this project
151
+ */
152
+ createMCPServer(): MCPServer;
153
+ /**
154
+ * Get the underlying QueryBuilder (for advanced use)
155
+ */
156
+ getQueryBuilder(): QueryBuilder;
157
+ /**
158
+ * Get the underlying GraphTraverser (for advanced use)
159
+ */
160
+ getTraverser(): GraphTraverser;
161
+ /**
162
+ * Get the underlying ContextBuilder (for advanced use)
163
+ */
164
+ getContextBuilder(): ContextBuilder;
165
+ /**
166
+ * Get the database journal mode
167
+ */
168
+ getJournalMode(): string;
169
+ /**
170
+ * Optimize database
171
+ */
172
+ optimize(): void;
173
+ /**
174
+ * Clear all data
175
+ */
176
+ clear(): void;
177
+ /**
178
+ * Completely remove DBGraph from the project
179
+ */
180
+ uninitialize(): void;
181
+ }
182
+ export default DBGraph;
183
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,435 @@
1
+ "use strict";
2
+ /**
3
+ * DBGraph
4
+ *
5
+ * Database knowledge graph — introspect database schemas into a local
6
+ * knowledge graph and expose it over MCP for LLM-powered SQL generation.
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
42
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.DBGraph = exports.MCPServer = exports.DBGRAPH_DIR = exports.findNearestDBGraphRoot = exports.isInitialized = exports.getDBGraphDir = exports.getDatabasePath = void 0;
46
+ const path = __importStar(require("path"));
47
+ const db_1 = require("./db");
48
+ const queries_1 = require("./db/queries");
49
+ const directory_1 = require("./directory");
50
+ const traversal_1 = require("./graph/traversal");
51
+ const context_1 = require("./context");
52
+ const introspect_1 = require("./introspect");
53
+ const config_1 = require("./config");
54
+ const utils_1 = require("./utils");
55
+ const mcp_1 = require("./mcp");
56
+ // Re-exports
57
+ __exportStar(require("./types"), exports);
58
+ var db_2 = require("./db");
59
+ Object.defineProperty(exports, "getDatabasePath", { enumerable: true, get: function () { return db_2.getDatabasePath; } });
60
+ var directory_2 = require("./directory");
61
+ Object.defineProperty(exports, "getDBGraphDir", { enumerable: true, get: function () { return directory_2.getDBGraphDir; } });
62
+ Object.defineProperty(exports, "isInitialized", { enumerable: true, get: function () { return directory_2.isInitialized; } });
63
+ Object.defineProperty(exports, "findNearestDBGraphRoot", { enumerable: true, get: function () { return directory_2.findNearestDBGraphRoot; } });
64
+ Object.defineProperty(exports, "DBGRAPH_DIR", { enumerable: true, get: function () { return directory_2.DBGRAPH_DIR; } });
65
+ var mcp_2 = require("./mcp");
66
+ Object.defineProperty(exports, "MCPServer", { enumerable: true, get: function () { return mcp_2.MCPServer; } });
67
+ const LOCK_TIMEOUT_MS = 30000;
68
+ /**
69
+ * Main DBGraph class
70
+ */
71
+ class DBGraph {
72
+ db;
73
+ queries;
74
+ projectRoot;
75
+ traverser;
76
+ contextBuilder;
77
+ config = null;
78
+ // Mutex + file lock for concurrent safety
79
+ indexMutex = new utils_1.Mutex();
80
+ fileLock;
81
+ constructor(db, queries, projectRoot) {
82
+ this.db = db;
83
+ this.queries = queries;
84
+ this.projectRoot = projectRoot;
85
+ this.fileLock = new utils_1.FileLock(path.join(projectRoot, '.dbgraph', 'dbgraph.lock'));
86
+ this.traverser = new traversal_1.GraphTraverser(queries);
87
+ this.contextBuilder = new context_1.ContextBuilder(projectRoot, queries, this.traverser);
88
+ }
89
+ // ===========================================================================
90
+ // Lifecycle
91
+ // ===========================================================================
92
+ /**
93
+ * Initialize a new DBGraph project
94
+ */
95
+ static async init(projectRoot, options = {}) {
96
+ const resolvedRoot = path.resolve(projectRoot);
97
+ if ((0, directory_1.isInitialized)(resolvedRoot)) {
98
+ throw new Error(`DBGraph already initialized in ${resolvedRoot}`);
99
+ }
100
+ // Create directory structure
101
+ (0, directory_1.createDirectory)(resolvedRoot);
102
+ // Initialize database
103
+ const dbPath = (0, db_1.getDatabasePath)(resolvedRoot);
104
+ const db = db_1.DatabaseConnection.initialize(dbPath);
105
+ const queries = new queries_1.QueryBuilder(db.getDb());
106
+ const instance = new DBGraph(db, queries, resolvedRoot);
107
+ // Load config if specified or auto-discover
108
+ const configPath = options.config || (0, config_1.findConfigFile)(resolvedRoot);
109
+ if (configPath) {
110
+ instance.config = (0, config_1.loadConfig)(configPath);
111
+ }
112
+ // Run initial indexing if requested
113
+ if (options.index) {
114
+ await instance.indexAll({ onProgress: options.onProgress });
115
+ }
116
+ return instance;
117
+ }
118
+ /**
119
+ * Initialize synchronously (no indexing)
120
+ */
121
+ static initSync(projectRoot) {
122
+ const resolvedRoot = path.resolve(projectRoot);
123
+ if ((0, directory_1.isInitialized)(resolvedRoot)) {
124
+ throw new Error(`DBGraph already initialized in ${resolvedRoot}`);
125
+ }
126
+ (0, directory_1.createDirectory)(resolvedRoot);
127
+ const dbPath = (0, db_1.getDatabasePath)(resolvedRoot);
128
+ const db = db_1.DatabaseConnection.initialize(dbPath);
129
+ const queries = new queries_1.QueryBuilder(db.getDb());
130
+ return new DBGraph(db, queries, resolvedRoot);
131
+ }
132
+ /**
133
+ * Open an existing DBGraph project
134
+ */
135
+ static async open(projectRoot, options = {}) {
136
+ const resolvedRoot = path.resolve(projectRoot);
137
+ if (!(0, directory_1.isInitialized)(resolvedRoot)) {
138
+ throw new Error(`DBGraph not initialized in ${resolvedRoot}. Run init() first.`);
139
+ }
140
+ const validation = (0, directory_1.validateDirectory)(resolvedRoot);
141
+ if (!validation.valid) {
142
+ throw new Error(`Invalid DBGraph directory: ${validation.errors.join(', ')}`);
143
+ }
144
+ const dbPath = (0, db_1.getDatabasePath)(resolvedRoot);
145
+ const db = db_1.DatabaseConnection.open(dbPath);
146
+ const queries = new queries_1.QueryBuilder(db.getDb());
147
+ const instance = new DBGraph(db, queries, resolvedRoot);
148
+ // Load config
149
+ const configPath = (0, config_1.findConfigFile)(resolvedRoot);
150
+ if (configPath) {
151
+ instance.config = (0, config_1.loadConfig)(configPath);
152
+ }
153
+ if (options.sync) {
154
+ await instance.sync();
155
+ }
156
+ return instance;
157
+ }
158
+ /**
159
+ * Open synchronously
160
+ */
161
+ static openSync(projectRoot) {
162
+ const resolvedRoot = path.resolve(projectRoot);
163
+ if (!(0, directory_1.isInitialized)(resolvedRoot)) {
164
+ throw new Error(`DBGraph not initialized in ${resolvedRoot}. Run init() first.`);
165
+ }
166
+ const validation = (0, directory_1.validateDirectory)(resolvedRoot);
167
+ if (!validation.valid) {
168
+ throw new Error(`Invalid DBGraph directory: ${validation.errors.join(', ')}`);
169
+ }
170
+ const dbPath = (0, db_1.getDatabasePath)(resolvedRoot);
171
+ const db = db_1.DatabaseConnection.open(dbPath);
172
+ const queries = new queries_1.QueryBuilder(db.getDb());
173
+ const instance = new DBGraph(db, queries, resolvedRoot);
174
+ const configPath = (0, config_1.findConfigFile)(resolvedRoot);
175
+ if (configPath) {
176
+ instance.config = (0, config_1.loadConfig)(configPath);
177
+ }
178
+ return instance;
179
+ }
180
+ static isInitialized(projectRoot) {
181
+ return (0, directory_1.isInitialized)(path.resolve(projectRoot));
182
+ }
183
+ close() {
184
+ this.fileLock.release();
185
+ this.db.close();
186
+ }
187
+ getProjectRoot() { return this.projectRoot; }
188
+ getConfig() { return this.config; }
189
+ /**
190
+ * Set or update the configuration
191
+ */
192
+ setConfig(config) {
193
+ this.config = config;
194
+ }
195
+ // ===========================================================================
196
+ // Introspection / Indexing
197
+ // ===========================================================================
198
+ /**
199
+ * Index all configured databases
200
+ */
201
+ async indexAll(options = {}) {
202
+ return this.indexMutex.withLock(async () => {
203
+ try {
204
+ this.fileLock.acquire();
205
+ }
206
+ catch {
207
+ return { success: false, sourcesIndexed: 0, nodesCreated: 0, edgesCreated: 0, errors: ['Could not acquire file lock'] };
208
+ }
209
+ try {
210
+ if (!this.config || this.config.databases.length === 0) {
211
+ return { success: false, sourcesIndexed: 0, nodesCreated: 0, edgesCreated: 0, errors: ['No databases configured. Create a dbgraph-db.json file.'] };
212
+ }
213
+ const before = this.queries.getNodeAndEdgeCount();
214
+ let totalSources = this.config.databases.length;
215
+ let sourcesIndexed = 0;
216
+ let errors = [];
217
+ for (const dbConfig of this.config.databases) {
218
+ options.onProgress?.(`Introspecting ${dbConfig.alias} (${dbConfig.engine})...`, sourcesIndexed + 1, totalSources);
219
+ try {
220
+ const introspector = (0, introspect_1.createIntrospector)(dbConfig);
221
+ const result = await introspector.extractAll();
222
+ if (result.errors.length > 0) {
223
+ errors.push(...result.errors.map(e => `[${dbConfig.alias}] ${e}`));
224
+ }
225
+ // Store in database
226
+ if (result.nodes.length > 0) {
227
+ this.db.transaction(() => {
228
+ // Remove old data for this source
229
+ this.queries.deleteNodesBySource(`db://@${dbConfig.alias}`);
230
+ // Insert new data
231
+ this.queries.insertNodes(result.nodes);
232
+ this.queries.insertEdges(result.edges);
233
+ });
234
+ // Upsert db source record
235
+ this.queries.upsertDbSource({
236
+ alias: dbConfig.alias,
237
+ engine: dbConfig.engine,
238
+ database: dbConfig.database,
239
+ host: dbConfig.host,
240
+ port: dbConfig.port,
241
+ displayUri: introspector.getDisplayUri(),
242
+ indexedAt: Date.now(),
243
+ nodeCount: result.nodes.length,
244
+ errors: result.errors.length > 0 ? result.errors : undefined,
245
+ });
246
+ }
247
+ sourcesIndexed++;
248
+ }
249
+ catch (err) {
250
+ const msg = err instanceof Error ? err.message : String(err);
251
+ errors.push(`[${dbConfig.alias}] ${msg}`);
252
+ }
253
+ }
254
+ // Run maintenance after bulk writes
255
+ this.db.runMaintenance();
256
+ const after = this.queries.getNodeAndEdgeCount();
257
+ options.onProgress?.('Done.', totalSources, totalSources);
258
+ return {
259
+ success: errors.length === 0,
260
+ sourcesIndexed,
261
+ nodesCreated: after.nodes - before.nodes,
262
+ edgesCreated: after.edges - before.edges,
263
+ errors,
264
+ };
265
+ }
266
+ finally {
267
+ this.fileLock.release();
268
+ }
269
+ });
270
+ }
271
+ /**
272
+ * Sync with current database state (re-index)
273
+ */
274
+ async sync(options = {}) {
275
+ // For V1, sync == re-index all (incremental sync via hashing is future work)
276
+ const result = await this.indexAll(options);
277
+ return {
278
+ sourcesChecked: result.sourcesIndexed,
279
+ sourcesReindexed: result.sourcesIndexed,
280
+ };
281
+ }
282
+ /**
283
+ * Test connections to all configured databases
284
+ */
285
+ async testConnections() {
286
+ if (!this.config)
287
+ return [];
288
+ const results = [];
289
+ for (const dbConfig of this.config.databases) {
290
+ try {
291
+ const introspector = (0, introspect_1.createIntrospector)(dbConfig);
292
+ const ok = await introspector.testConnection();
293
+ results.push({ alias: dbConfig.alias, success: ok });
294
+ }
295
+ catch (err) {
296
+ results.push({
297
+ alias: dbConfig.alias,
298
+ success: false,
299
+ error: err instanceof Error ? err.message : String(err),
300
+ });
301
+ }
302
+ }
303
+ return results;
304
+ }
305
+ // ===========================================================================
306
+ // Graph Queries
307
+ // ===========================================================================
308
+ /**
309
+ * Search schema objects by name
310
+ */
311
+ searchNodes(query, options) {
312
+ return this.queries.searchNodes(query, options);
313
+ }
314
+ /**
315
+ * Get a node by ID
316
+ */
317
+ getNode(id) {
318
+ return this.queries.getNodeById(id);
319
+ }
320
+ /**
321
+ * Get nodes of a specific kind
322
+ */
323
+ getNodesByKind(kind) {
324
+ return this.queries.getNodesByKind(kind);
325
+ }
326
+ /**
327
+ * Get nodes by exact name
328
+ */
329
+ getNodesByName(name) {
330
+ return this.queries.getNodesByName(name);
331
+ }
332
+ /**
333
+ * Build a complete table schema description from the graph
334
+ */
335
+ getTableSchema(nodeId) {
336
+ return this.contextBuilder.getTableSchema(nodeId);
337
+ }
338
+ /**
339
+ * Build full context for a table as markdown
340
+ */
341
+ async buildContext(name) {
342
+ return this.contextBuilder.buildContext(name);
343
+ }
344
+ /**
345
+ * Get outgoing edges (table → columns, FK references)
346
+ */
347
+ getOutgoingEdges(nodeId, kinds) {
348
+ return this.queries.getOutgoingEdges(nodeId, kinds);
349
+ }
350
+ /**
351
+ * Get incoming edges (what references this node)
352
+ */
353
+ getIncomingEdges(nodeId, kinds) {
354
+ return this.queries.getIncomingEdges(nodeId, kinds);
355
+ }
356
+ /**
357
+ * Find FK path between two tables
358
+ */
359
+ findForeignKeyPath(fromName, toName) {
360
+ const fromNodes = this.queries.searchNodes(fromName, { kinds: ['table'], limit: 5 });
361
+ const toNodes = this.queries.searchNodes(toName, { kinds: ['table'], limit: 5 });
362
+ if (fromNodes.length === 0 || toNodes.length === 0)
363
+ return null;
364
+ return this.traverser.findPath(fromNodes[0].node.id, toNodes[0].node.id, ['references', 'foreign_key', 'contains']);
365
+ }
366
+ /**
367
+ * Get all databases tracked in the graph
368
+ */
369
+ getSources() {
370
+ return this.queries.getAllDbSources();
371
+ }
372
+ /**
373
+ * Get graph statistics
374
+ */
375
+ getStats() {
376
+ const stats = this.queries.getStats();
377
+ stats.dbSizeBytes = this.db.getSize();
378
+ return stats;
379
+ }
380
+ // ===========================================================================
381
+ // MCP Server
382
+ // ===========================================================================
383
+ /**
384
+ * Create an MCP server for this project
385
+ */
386
+ createMCPServer() {
387
+ return new mcp_1.MCPServer({ projectPath: this.projectRoot });
388
+ }
389
+ /**
390
+ * Get the underlying QueryBuilder (for advanced use)
391
+ */
392
+ getQueryBuilder() {
393
+ return this.queries;
394
+ }
395
+ /**
396
+ * Get the underlying GraphTraverser (for advanced use)
397
+ */
398
+ getTraverser() {
399
+ return this.traverser;
400
+ }
401
+ /**
402
+ * Get the underlying ContextBuilder (for advanced use)
403
+ */
404
+ getContextBuilder() {
405
+ return this.contextBuilder;
406
+ }
407
+ /**
408
+ * Get the database journal mode
409
+ */
410
+ getJournalMode() {
411
+ return this.db.getJournalMode();
412
+ }
413
+ /**
414
+ * Optimize database
415
+ */
416
+ optimize() {
417
+ this.db.optimize();
418
+ }
419
+ /**
420
+ * Clear all data
421
+ */
422
+ clear() {
423
+ this.queries.clear();
424
+ }
425
+ /**
426
+ * Completely remove DBGraph from the project
427
+ */
428
+ uninitialize() {
429
+ this.close();
430
+ (0, directory_1.removeDirectory)(this.projectRoot);
431
+ }
432
+ }
433
+ exports.DBGraph = DBGraph;
434
+ exports.default = DBGraph;
435
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}