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.
- package/LICENSE +21 -0
- package/README.md +347 -0
- package/dist/bin/dbgraph.d.ts +8 -0
- package/dist/bin/dbgraph.d.ts.map +1 -0
- package/dist/bin/dbgraph.js +382 -0
- package/dist/bin/dbgraph.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +158 -0
- package/dist/config.js.map +1 -0
- package/dist/context/formatter.d.ts +94 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +288 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +77 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +458 -0
- package/dist/context/index.js.map +1 -0
- package/dist/db/index.d.ts +26 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +127 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +8 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +39 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +46 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +436 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.sql +113 -0
- package/dist/db/sqlite-adapter.d.ts +30 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.js +78 -0
- package/dist/db/sqlite-adapter.js.map +1 -0
- package/dist/directory.d.ts +37 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +160 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +46 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +90 -0
- package/dist/errors.js.map +1 -0
- package/dist/graph/traversal.d.ts +157 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +531 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +435 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect/base.d.ts +62 -0
- package/dist/introspect/base.d.ts.map +1 -0
- package/dist/introspect/base.js +107 -0
- package/dist/introspect/base.js.map +1 -0
- package/dist/introspect/connection.d.ts +30 -0
- package/dist/introspect/connection.d.ts.map +1 -0
- package/dist/introspect/connection.js +232 -0
- package/dist/introspect/connection.js.map +1 -0
- package/dist/introspect/index.d.ts +23 -0
- package/dist/introspect/index.d.ts.map +1 -0
- package/dist/introspect/index.js +46 -0
- package/dist/introspect/index.js.map +1 -0
- package/dist/introspect/mysql.d.ts +64 -0
- package/dist/introspect/mysql.d.ts.map +1 -0
- package/dist/introspect/mysql.js +360 -0
- package/dist/introspect/mysql.js.map +1 -0
- package/dist/introspect/postgres.d.ts +55 -0
- package/dist/introspect/postgres.d.ts.map +1 -0
- package/dist/introspect/postgres.js +372 -0
- package/dist/introspect/postgres.js.map +1 -0
- package/dist/introspect/sqlite.d.ts +33 -0
- package/dist/introspect/sqlite.d.ts.map +1 -0
- package/dist/introspect/sqlite.js +207 -0
- package/dist/introspect/sqlite.js.map +1 -0
- package/dist/mcp/engine.d.ts +92 -0
- package/dist/mcp/engine.d.ts.map +1 -0
- package/dist/mcp/engine.js +261 -0
- package/dist/mcp/engine.js.map +1 -0
- package/dist/mcp/index.d.ts +33 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +119 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +9 -0
- package/dist/mcp/server-instructions.d.ts.map +1 -0
- package/dist/mcp/server-instructions.js +71 -0
- package/dist/mcp/server-instructions.js.map +1 -0
- package/dist/mcp/session.d.ts +35 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +140 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +99 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +499 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +78 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +182 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/search/query-parser.d.ts +66 -0
- package/dist/search/query-parser.d.ts.map +1 -0
- package/dist/search/query-parser.js +163 -0
- package/dist/search/query-parser.js.map +1 -0
- package/dist/search/query-utils.d.ts +78 -0
- package/dist/search/query-utils.d.ts.map +1 -0
- package/dist/search/query-utils.js +203 -0
- package/dist/search/query-utils.js.map +1 -0
- package/dist/types.d.ts +279 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +47 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +190 -0
- package/dist/utils.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Formatter
|
|
3
|
+
*
|
|
4
|
+
* Converts database schema objects into human-readable markdown.
|
|
5
|
+
* Used by the ContextBuilder and CLI to present schema information
|
|
6
|
+
* to LLMs and developers.
|
|
7
|
+
*/
|
|
8
|
+
import { TableSchema, DbSourceRecord, GraphStats, SearchResult } from '../types';
|
|
9
|
+
export declare class SchemaFormatter {
|
|
10
|
+
/**
|
|
11
|
+
* Format a full table/view schema as markdown.
|
|
12
|
+
*
|
|
13
|
+
* Output structure:
|
|
14
|
+
* ```markdown
|
|
15
|
+
* ## Table: schema_name.table_name
|
|
16
|
+
* Database: alias (engine)
|
|
17
|
+
*
|
|
18
|
+
* > Table comment
|
|
19
|
+
*
|
|
20
|
+
* | Column | Type | Nullable | Default | PK | FK | Comment |
|
|
21
|
+
* |--------|------|----------|---------|----|----|---------|
|
|
22
|
+
* ...
|
|
23
|
+
*
|
|
24
|
+
* **Indexes:**
|
|
25
|
+
* - idx_name on (col1, col2) UNIQUE
|
|
26
|
+
*
|
|
27
|
+
* **Foreign Keys:**
|
|
28
|
+
* - fk_name → ref_table(ref_col) ON DELETE CASCADE
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
formatTableSchema(schema: TableSchema): string;
|
|
32
|
+
/**
|
|
33
|
+
* Format a high-level database overview as markdown.
|
|
34
|
+
*
|
|
35
|
+
* Output:
|
|
36
|
+
* ```markdown
|
|
37
|
+
* ## Database Overview
|
|
38
|
+
*
|
|
39
|
+
* | Database | Engine | Host | Tables | Last Indexed |
|
|
40
|
+
* |----------|--------|------|--------|-------------|
|
|
41
|
+
* | prod | postgresql | db.example.com:5432 | 42 | 2024-01-15 |
|
|
42
|
+
*
|
|
43
|
+
* **Graph Statistics:**
|
|
44
|
+
* - Total objects: 1,234
|
|
45
|
+
* - Tables: 42
|
|
46
|
+
* - Views: 12
|
|
47
|
+
* - Columns: 856
|
|
48
|
+
* - Indexes: 98
|
|
49
|
+
* - Foreign Keys: 67
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
formatDatabaseOverview(dbs: DbSourceRecord[], stats: GraphStats): string;
|
|
53
|
+
/**
|
|
54
|
+
* Format search results as markdown.
|
|
55
|
+
*
|
|
56
|
+
* Output:
|
|
57
|
+
* ```markdown
|
|
58
|
+
* ## Search Results for "orders"
|
|
59
|
+
*
|
|
60
|
+
* | Score | Name | Kind | Source |
|
|
61
|
+
* |-------|------|------|--------|
|
|
62
|
+
* | 1.00 | orders | table | @prod/public |
|
|
63
|
+
* | 0.85 | order_items | table | @prod/public |
|
|
64
|
+
* | 0.72 | total_order_amount | function | @prod/public |
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @param results - Ranked search results from QueryBuilder.searchNodes
|
|
68
|
+
*/
|
|
69
|
+
formatSearchResults(results: SearchResult[]): string;
|
|
70
|
+
/**
|
|
71
|
+
* Format a single column table row.
|
|
72
|
+
*/
|
|
73
|
+
private _formatColumnRow;
|
|
74
|
+
/**
|
|
75
|
+
* Format a single index entry.
|
|
76
|
+
*
|
|
77
|
+
* Examples:
|
|
78
|
+
* - idx_orders_user_id on (user_id)
|
|
79
|
+
* - pk_orders PRIMARY KEY using btree (id)
|
|
80
|
+
*/
|
|
81
|
+
private _formatIndexLine;
|
|
82
|
+
/**
|
|
83
|
+
* Format a single foreign key entry.
|
|
84
|
+
*
|
|
85
|
+
* Examples:
|
|
86
|
+
* - fk_orders_user → users(id) ON DELETE CASCADE
|
|
87
|
+
*/
|
|
88
|
+
private _formatForeignKeyLine;
|
|
89
|
+
/**
|
|
90
|
+
* Escape pipe characters so they don't break markdown table columns.
|
|
91
|
+
*/
|
|
92
|
+
private _escapePipe;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,WAAW,EAIX,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAC;AAMlB,qBAAa,eAAe;IAK1B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAsE9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,sBAAsB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM;IAyExE;;;;;;;;;;;;;;;OAeG;IACH,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM;IAiDpD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Schema Formatter
|
|
4
|
+
*
|
|
5
|
+
* Converts database schema objects into human-readable markdown.
|
|
6
|
+
* Used by the ContextBuilder and CLI to present schema information
|
|
7
|
+
* to LLMs and developers.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SchemaFormatter = void 0;
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// SchemaFormatter
|
|
13
|
+
// =============================================================================
|
|
14
|
+
class SchemaFormatter {
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// formatTableSchema
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Format a full table/view schema as markdown.
|
|
20
|
+
*
|
|
21
|
+
* Output structure:
|
|
22
|
+
* ```markdown
|
|
23
|
+
* ## Table: schema_name.table_name
|
|
24
|
+
* Database: alias (engine)
|
|
25
|
+
*
|
|
26
|
+
* > Table comment
|
|
27
|
+
*
|
|
28
|
+
* | Column | Type | Nullable | Default | PK | FK | Comment |
|
|
29
|
+
* |--------|------|----------|---------|----|----|---------|
|
|
30
|
+
* ...
|
|
31
|
+
*
|
|
32
|
+
* **Indexes:**
|
|
33
|
+
* - idx_name on (col1, col2) UNIQUE
|
|
34
|
+
*
|
|
35
|
+
* **Foreign Keys:**
|
|
36
|
+
* - fk_name → ref_table(ref_col) ON DELETE CASCADE
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
formatTableSchema(schema) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
const label = schema.kind === 'view' ? 'View' : 'Table';
|
|
42
|
+
// --- Header ---
|
|
43
|
+
lines.push(`## ${label}: ${schema.qualifiedName}`);
|
|
44
|
+
lines.push('');
|
|
45
|
+
// --- Source line ---
|
|
46
|
+
// schema.source is a URI like db://@alias/schema or db://host:port/db/schema
|
|
47
|
+
const sourceDisplay = schema.source.replace(/^db:\/\//, '');
|
|
48
|
+
lines.push(`Database: ${sourceDisplay}`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
// --- Comment ---
|
|
51
|
+
if (schema.comment) {
|
|
52
|
+
lines.push(`> ${schema.comment}`);
|
|
53
|
+
lines.push('');
|
|
54
|
+
}
|
|
55
|
+
// --- Column table ---
|
|
56
|
+
lines.push('| Column | Type | Nullable | Default | PK | FK | Comment |');
|
|
57
|
+
lines.push('|--------|------|----------|---------|----|----|---------|');
|
|
58
|
+
for (const col of schema.columns) {
|
|
59
|
+
lines.push(this._formatColumnRow(col, schema.foreignKeys));
|
|
60
|
+
}
|
|
61
|
+
lines.push('');
|
|
62
|
+
// --- Primary key ---
|
|
63
|
+
if (schema.primaryKey.length > 0) {
|
|
64
|
+
lines.push(`**Primary Key:** ${schema.primaryKey.join(', ')}`);
|
|
65
|
+
lines.push('');
|
|
66
|
+
}
|
|
67
|
+
// --- Indexes ---
|
|
68
|
+
if (schema.indexes.length > 0) {
|
|
69
|
+
lines.push('**Indexes:**');
|
|
70
|
+
for (const idx of schema.indexes) {
|
|
71
|
+
lines.push(this._formatIndexLine(idx));
|
|
72
|
+
}
|
|
73
|
+
lines.push('');
|
|
74
|
+
}
|
|
75
|
+
// --- Foreign Keys ---
|
|
76
|
+
if (schema.foreignKeys.length > 0) {
|
|
77
|
+
lines.push('**Foreign Keys:**');
|
|
78
|
+
for (const fk of schema.foreignKeys) {
|
|
79
|
+
lines.push(this._formatForeignKeyLine(fk));
|
|
80
|
+
}
|
|
81
|
+
lines.push('');
|
|
82
|
+
}
|
|
83
|
+
// --- View definition ---
|
|
84
|
+
if (schema.definition) {
|
|
85
|
+
lines.push('**Definition:**');
|
|
86
|
+
lines.push('');
|
|
87
|
+
lines.push('```sql');
|
|
88
|
+
lines.push(schema.definition);
|
|
89
|
+
lines.push('```');
|
|
90
|
+
lines.push('');
|
|
91
|
+
}
|
|
92
|
+
return lines.join('\n');
|
|
93
|
+
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// formatDatabaseOverview
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
/**
|
|
98
|
+
* Format a high-level database overview as markdown.
|
|
99
|
+
*
|
|
100
|
+
* Output:
|
|
101
|
+
* ```markdown
|
|
102
|
+
* ## Database Overview
|
|
103
|
+
*
|
|
104
|
+
* | Database | Engine | Host | Tables | Last Indexed |
|
|
105
|
+
* |----------|--------|------|--------|-------------|
|
|
106
|
+
* | prod | postgresql | db.example.com:5432 | 42 | 2024-01-15 |
|
|
107
|
+
*
|
|
108
|
+
* **Graph Statistics:**
|
|
109
|
+
* - Total objects: 1,234
|
|
110
|
+
* - Tables: 42
|
|
111
|
+
* - Views: 12
|
|
112
|
+
* - Columns: 856
|
|
113
|
+
* - Indexes: 98
|
|
114
|
+
* - Foreign Keys: 67
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
formatDatabaseOverview(dbs, stats) {
|
|
118
|
+
const lines = [];
|
|
119
|
+
lines.push('## Database Overview');
|
|
120
|
+
lines.push('');
|
|
121
|
+
if (dbs.length === 0) {
|
|
122
|
+
lines.push('*No databases indexed.*');
|
|
123
|
+
lines.push('');
|
|
124
|
+
return lines.join('\n');
|
|
125
|
+
}
|
|
126
|
+
// --- Database table ---
|
|
127
|
+
lines.push('| Alias | Engine | Host | Objects | Last Indexed |');
|
|
128
|
+
lines.push('|-------|--------|------|---------|-------------|');
|
|
129
|
+
for (const db of dbs) {
|
|
130
|
+
const host = db.host ? (db.port ? `${db.host}:${db.port}` : db.host) : '—';
|
|
131
|
+
const indexed = db.indexedAt
|
|
132
|
+
? new Date(db.indexedAt).toISOString().slice(0, 10)
|
|
133
|
+
: '—';
|
|
134
|
+
lines.push(`| ${db.alias} | ${db.engine} | ${host} | ${db.nodeCount.toLocaleString()} | ${indexed} |`);
|
|
135
|
+
}
|
|
136
|
+
lines.push('');
|
|
137
|
+
// --- Graph statistics ---
|
|
138
|
+
lines.push('**Graph Statistics:**');
|
|
139
|
+
lines.push('');
|
|
140
|
+
const kindLabels = {
|
|
141
|
+
table: 'Tables',
|
|
142
|
+
view: 'Views',
|
|
143
|
+
column: 'Columns',
|
|
144
|
+
index: 'Indexes',
|
|
145
|
+
foreign_key: 'Foreign Keys',
|
|
146
|
+
constraint: 'Constraints',
|
|
147
|
+
trigger: 'Triggers',
|
|
148
|
+
stored_procedure: 'Stored Procedures',
|
|
149
|
+
function: 'Functions',
|
|
150
|
+
sequence: 'Sequences',
|
|
151
|
+
schema: 'Schemas',
|
|
152
|
+
database: 'Databases',
|
|
153
|
+
};
|
|
154
|
+
lines.push(`- Total objects: ${stats.nodeCount.toLocaleString()}`);
|
|
155
|
+
lines.push(`- Total relationships: ${stats.edgeCount.toLocaleString()}`);
|
|
156
|
+
for (const [kind, count] of Object.entries(stats.nodesByKind)) {
|
|
157
|
+
if (count > 0) {
|
|
158
|
+
const label = kindLabels[kind] ?? `${kind}s`;
|
|
159
|
+
lines.push(`- ${label}: ${count.toLocaleString()}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
lines.push('');
|
|
163
|
+
if (stats.dbSizeBytes > 0) {
|
|
164
|
+
const size = stats.dbSizeBytes > 1_048_576
|
|
165
|
+
? `${(stats.dbSizeBytes / 1_048_576).toFixed(1)} MB`
|
|
166
|
+
: `${(stats.dbSizeBytes / 1024).toFixed(1)} KB`;
|
|
167
|
+
lines.push(`Database file size: ${size}`);
|
|
168
|
+
lines.push('');
|
|
169
|
+
}
|
|
170
|
+
return lines.join('\n');
|
|
171
|
+
}
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
// formatSearchResults
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
/**
|
|
176
|
+
* Format search results as markdown.
|
|
177
|
+
*
|
|
178
|
+
* Output:
|
|
179
|
+
* ```markdown
|
|
180
|
+
* ## Search Results for "orders"
|
|
181
|
+
*
|
|
182
|
+
* | Score | Name | Kind | Source |
|
|
183
|
+
* |-------|------|------|--------|
|
|
184
|
+
* | 1.00 | orders | table | @prod/public |
|
|
185
|
+
* | 0.85 | order_items | table | @prod/public |
|
|
186
|
+
* | 0.72 | total_order_amount | function | @prod/public |
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @param results - Ranked search results from QueryBuilder.searchNodes
|
|
190
|
+
*/
|
|
191
|
+
formatSearchResults(results) {
|
|
192
|
+
const lines = [];
|
|
193
|
+
if (results.length === 0) {
|
|
194
|
+
lines.push('*No results found.*');
|
|
195
|
+
lines.push('');
|
|
196
|
+
return lines.join('\n');
|
|
197
|
+
}
|
|
198
|
+
lines.push('| Score | Name | Kind | Qualified Name |');
|
|
199
|
+
lines.push('|-------|------|------|----------------|');
|
|
200
|
+
for (const r of results) {
|
|
201
|
+
const scoreStr = r.score.toFixed(2);
|
|
202
|
+
const name = r.node.name;
|
|
203
|
+
const kind = r.node.kind;
|
|
204
|
+
const qn = r.node.qualifiedName;
|
|
205
|
+
lines.push(`| ${scoreStr} | ${name} | ${kind} | \`${qn}\` |`);
|
|
206
|
+
}
|
|
207
|
+
lines.push('');
|
|
208
|
+
// Append highlights if present
|
|
209
|
+
let hasHighlights = false;
|
|
210
|
+
for (const r of results) {
|
|
211
|
+
if (r.highlights && r.highlights.length > 0) {
|
|
212
|
+
hasHighlights = true;
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (hasHighlights) {
|
|
217
|
+
lines.push('**Matches:**');
|
|
218
|
+
lines.push('');
|
|
219
|
+
for (const r of results) {
|
|
220
|
+
if (r.highlights && r.highlights.length > 0) {
|
|
221
|
+
lines.push(`- \`${r.node.name}\`: ${r.highlights.join('; ')}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
lines.push('');
|
|
225
|
+
}
|
|
226
|
+
return lines.join('\n');
|
|
227
|
+
}
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
// Private helpers
|
|
230
|
+
// ---------------------------------------------------------------------------
|
|
231
|
+
/**
|
|
232
|
+
* Format a single column table row.
|
|
233
|
+
*/
|
|
234
|
+
_formatColumnRow(col, foreignKeys) {
|
|
235
|
+
const nullable = col.isNullable ? 'YES' : 'NO';
|
|
236
|
+
const defaultVal = col.defaultValue ?? '';
|
|
237
|
+
const pk = col.isPrimaryKey ? 'PK' : '';
|
|
238
|
+
// Find FK that this column participates in
|
|
239
|
+
const fk = foreignKeys.find((fk) => fk.columns.includes(col.name));
|
|
240
|
+
const fkDisplay = fk
|
|
241
|
+
? `${fk.referencedTable}(${fk.referencedColumns.join(',')})`
|
|
242
|
+
: '';
|
|
243
|
+
const comment = col.comment ?? '';
|
|
244
|
+
// Escape pipe characters in values
|
|
245
|
+
const safeType = this._escapePipe(col.dataType);
|
|
246
|
+
return `| ${col.name} | ${safeType} | ${nullable} | ${defaultVal} | ${pk} | ${fkDisplay} | ${comment} |`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Format a single index entry.
|
|
250
|
+
*
|
|
251
|
+
* Examples:
|
|
252
|
+
* - idx_orders_user_id on (user_id)
|
|
253
|
+
* - pk_orders PRIMARY KEY using btree (id)
|
|
254
|
+
*/
|
|
255
|
+
_formatIndexLine(idx) {
|
|
256
|
+
const cols = idx.columns.join(', ');
|
|
257
|
+
if (idx.primary) {
|
|
258
|
+
const method = idx.method ?? 'btree';
|
|
259
|
+
return `- ${idx.name} PRIMARY KEY using ${method} (${cols})`;
|
|
260
|
+
}
|
|
261
|
+
const unique = idx.unique ? ' UNIQUE' : '';
|
|
262
|
+
return `- ${idx.name} on (${cols})${unique}`;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Format a single foreign key entry.
|
|
266
|
+
*
|
|
267
|
+
* Examples:
|
|
268
|
+
* - fk_orders_user → users(id) ON DELETE CASCADE
|
|
269
|
+
*/
|
|
270
|
+
_formatForeignKeyLine(fk) {
|
|
271
|
+
const cols = fk.columns.join(', ');
|
|
272
|
+
const refs = `${fk.referencedTable}(${fk.referencedColumns.join(', ')})`;
|
|
273
|
+
const parts = [`- ${fk.constraintName} → ${refs}`];
|
|
274
|
+
if (fk.onDelete)
|
|
275
|
+
parts.push(`ON DELETE ${fk.onDelete.toUpperCase()}`);
|
|
276
|
+
if (fk.onUpdate)
|
|
277
|
+
parts.push(`ON UPDATE ${fk.onUpdate.toUpperCase()}`);
|
|
278
|
+
return parts.join(' ');
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Escape pipe characters so they don't break markdown table columns.
|
|
282
|
+
*/
|
|
283
|
+
_escapePipe(value) {
|
|
284
|
+
return value.replace(/\|/g, '\\|');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.SchemaFormatter = SchemaFormatter;
|
|
288
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds rich schema context from the database knowledge graph.
|
|
5
|
+
* Composes table schemas, relationship chains, and formats them
|
|
6
|
+
* as markdown for LLM consumption.
|
|
7
|
+
*/
|
|
8
|
+
import { QueryBuilder } from '../db/queries';
|
|
9
|
+
import { GraphTraverser } from '../graph/traversal';
|
|
10
|
+
import { TableSchema } from '../types';
|
|
11
|
+
export declare class ContextBuilder {
|
|
12
|
+
private readonly projectRoot;
|
|
13
|
+
private readonly queries;
|
|
14
|
+
private readonly traverser;
|
|
15
|
+
/**
|
|
16
|
+
* @param projectRoot - Root path of the project (used for resolving .dbgraph/)
|
|
17
|
+
* @param queries - QueryBuilder instance for raw lookups
|
|
18
|
+
* @param traverser - GraphTraverser instance for BFS / ancestor / child queries
|
|
19
|
+
*/
|
|
20
|
+
constructor(projectRoot: string, queries: QueryBuilder, traverser: GraphTraverser);
|
|
21
|
+
/**
|
|
22
|
+
* Build a complete TableSchema description from the graph.
|
|
23
|
+
*
|
|
24
|
+
* Resolution steps:
|
|
25
|
+
* 1. Fetch the table / view node.
|
|
26
|
+
* 2. Fetch child nodes via `contains` edges — separate columns from indexes.
|
|
27
|
+
* 3. Identify primary-key columns via `primary_key` edges.
|
|
28
|
+
* 4. Identify foreign-key columns via `references` edges on each column.
|
|
29
|
+
* 5. Collect index metadata from child index nodes.
|
|
30
|
+
* 6. Collect FK constraints via `foreign_key` edges and incoming `references`.
|
|
31
|
+
* 7. Assemble and return a TableSchema.
|
|
32
|
+
*
|
|
33
|
+
* @param nodeId - The graph node ID of the table or view.
|
|
34
|
+
*/
|
|
35
|
+
getTableSchema(nodeId: string): Promise<TableSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* Build a markdown context string for a table or view.
|
|
38
|
+
*
|
|
39
|
+
* Accepts either:
|
|
40
|
+
* - A graph node ID (exact `id` lookup)
|
|
41
|
+
* - A qualified or simple name (searched via `searchNodes`)
|
|
42
|
+
*
|
|
43
|
+
* The output includes:
|
|
44
|
+
* - Full table schema (columns, PKs, FKs, indexes)
|
|
45
|
+
* - Parent hierarchy (database → schema → table)
|
|
46
|
+
* - Tables that reference this table (incoming FK relationships)
|
|
47
|
+
*
|
|
48
|
+
* @param tableNameOrId - Table name, qualified name, or graph node ID.
|
|
49
|
+
*/
|
|
50
|
+
buildContext(tableNameOrId: string): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Extract the parent table ID for a column node by tracing its incoming
|
|
53
|
+
* `contains` edge.
|
|
54
|
+
*/
|
|
55
|
+
private _parentTableId;
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the data type for a column node.
|
|
58
|
+
* Priority: metadata.dataType → parse from signature → "unknown".
|
|
59
|
+
*/
|
|
60
|
+
private _columnDataType;
|
|
61
|
+
/**
|
|
62
|
+
* Determine whether a column is nullable.
|
|
63
|
+
* Priority: metadata.isNullable → parse from signature → true.
|
|
64
|
+
*/
|
|
65
|
+
private _columnIsNullable;
|
|
66
|
+
/**
|
|
67
|
+
* Extract default value for a column.
|
|
68
|
+
* Priority: metadata.defaultValue → parse from signature.
|
|
69
|
+
*/
|
|
70
|
+
private _columnDefault;
|
|
71
|
+
/**
|
|
72
|
+
* Derive which columns an index covers by looking at the index node's
|
|
73
|
+
* metadata or its `indexed_by` edges to column nodes.
|
|
74
|
+
*/
|
|
75
|
+
private _getIndexedColumnNames;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAIL,WAAW,EAIZ,MAAM,UAAU,CAAC;AAMlB,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B;;;;OAIG;gBAEgB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc;IAO5C;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsM1D;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoL1D;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAe/B"}
|