structx 1.0.0 → 2.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 (58) hide show
  1. package/README.md +72 -0
  2. package/dist/cli.js +88 -205
  3. package/dist/cli.js.map +1 -1
  4. package/dist/db/connection.js +28 -1
  5. package/dist/db/connection.js.map +1 -1
  6. package/dist/db/queries.d.ts +125 -0
  7. package/dist/db/queries.d.ts.map +1 -1
  8. package/dist/db/queries.js +224 -6
  9. package/dist/db/queries.js.map +1 -1
  10. package/dist/db/schema.sql +59 -0
  11. package/dist/ingest/constant-extractor.d.ts +11 -0
  12. package/dist/ingest/constant-extractor.d.ts.map +1 -0
  13. package/dist/ingest/constant-extractor.js +38 -0
  14. package/dist/ingest/constant-extractor.js.map +1 -0
  15. package/dist/ingest/file-metadata.d.ts +13 -0
  16. package/dist/ingest/file-metadata.d.ts.map +1 -0
  17. package/dist/ingest/file-metadata.js +55 -0
  18. package/dist/ingest/file-metadata.js.map +1 -0
  19. package/dist/ingest/ingester.d.ts +15 -0
  20. package/dist/ingest/ingester.d.ts.map +1 -0
  21. package/dist/ingest/ingester.js +217 -0
  22. package/dist/ingest/ingester.js.map +1 -0
  23. package/dist/ingest/parser.d.ts +12 -0
  24. package/dist/ingest/parser.d.ts.map +1 -1
  25. package/dist/ingest/parser.js +48 -0
  26. package/dist/ingest/parser.js.map +1 -1
  27. package/dist/ingest/route-extractor.d.ts +12 -0
  28. package/dist/ingest/route-extractor.d.ts.map +1 -0
  29. package/dist/ingest/route-extractor.js +64 -0
  30. package/dist/ingest/route-extractor.js.map +1 -0
  31. package/dist/ingest/type-extractor.d.ts +11 -0
  32. package/dist/ingest/type-extractor.d.ts.map +1 -0
  33. package/dist/ingest/type-extractor.js +47 -0
  34. package/dist/ingest/type-extractor.js.map +1 -0
  35. package/dist/instructions/codex.md +42 -0
  36. package/dist/query/answerer.d.ts.map +1 -1
  37. package/dist/query/answerer.js +6 -2
  38. package/dist/query/answerer.js.map +1 -1
  39. package/dist/query/classifier.d.ts +6 -1
  40. package/dist/query/classifier.d.ts.map +1 -1
  41. package/dist/query/classifier.js +22 -2
  42. package/dist/query/classifier.js.map +1 -1
  43. package/dist/query/context-builder.d.ts.map +1 -1
  44. package/dist/query/context-builder.js +152 -6
  45. package/dist/query/context-builder.js.map +1 -1
  46. package/dist/query/retriever.d.ts +44 -0
  47. package/dist/query/retriever.d.ts.map +1 -1
  48. package/dist/query/retriever.js +211 -14
  49. package/dist/query/retriever.js.map +1 -1
  50. package/dist/semantic/analyzer.d.ts +10 -0
  51. package/dist/semantic/analyzer.d.ts.map +1 -1
  52. package/dist/semantic/analyzer.js +147 -1
  53. package/dist/semantic/analyzer.js.map +1 -1
  54. package/dist/semantic/prompt.d.ts +21 -0
  55. package/dist/semantic/prompt.d.ts.map +1 -1
  56. package/dist/semantic/prompt.js +63 -0
  57. package/dist/semantic/prompt.js.map +1 -1
  58. package/package.json +1 -1
@@ -116,7 +116,132 @@ export interface Stats {
116
116
  analyzedFunctions: number;
117
117
  pendingAnalysis: number;
118
118
  totalQaRuns: number;
119
+ totalTypes: number;
120
+ totalRoutes: number;
121
+ totalConstants: number;
122
+ totalFileSummaries: number;
119
123
  }
120
124
  export declare function getStats(db: Database.Database): Stats;
125
+ export declare function resolveNullCallees(db: Database.Database): number;
121
126
  export declare function getTransitiveCallers(db: Database.Database, functionId: number): FunctionRow[];
127
+ export declare function getTransitiveCallersRobust(db: Database.Database, functionId: number, functionName: string): FunctionRow[];
128
+ export interface TypeRow {
129
+ id: number;
130
+ file_id: number;
131
+ name: string;
132
+ kind: 'interface' | 'type_alias' | 'enum';
133
+ full_text: string;
134
+ is_exported: number;
135
+ start_line: number;
136
+ end_line: number;
137
+ purpose: string | null;
138
+ semantic_analyzed_at: string | null;
139
+ }
140
+ export interface InsertType {
141
+ file_id: number;
142
+ name: string;
143
+ kind: 'interface' | 'type_alias' | 'enum';
144
+ full_text: string;
145
+ is_exported: boolean;
146
+ start_line: number;
147
+ end_line: number;
148
+ }
149
+ export declare function insertType(db: Database.Database, t: InsertType): number;
150
+ export declare function getTypeByName(db: Database.Database, name: string): TypeRow | undefined;
151
+ export declare function getTypesByFileId(db: Database.Database, fileId: number): TypeRow[];
152
+ export declare function deleteTypesByFileId(db: Database.Database, fileId: number): void;
153
+ export declare function searchTypes(db: Database.Database, query: string, limit?: number): TypeRow[];
154
+ export declare function getAllTypes(db: Database.Database): TypeRow[];
155
+ export declare function updateTypePurpose(db: Database.Database, typeId: number, purpose: string): void;
156
+ export interface RouteRow {
157
+ id: number;
158
+ file_id: number;
159
+ method: string;
160
+ path: string;
161
+ handler_name: string | null;
162
+ handler_body: string;
163
+ middleware: string | null;
164
+ start_line: number;
165
+ end_line: number;
166
+ purpose: string | null;
167
+ semantic_analyzed_at: string | null;
168
+ }
169
+ export interface InsertRoute {
170
+ file_id: number;
171
+ method: string;
172
+ path: string;
173
+ handler_name: string | null;
174
+ handler_body: string;
175
+ middleware: string | null;
176
+ start_line: number;
177
+ end_line: number;
178
+ }
179
+ export declare function insertRoute(db: Database.Database, r: InsertRoute): number;
180
+ export declare function getRoutesByFileId(db: Database.Database, fileId: number): RouteRow[];
181
+ export declare function getAllRoutes(db: Database.Database): RouteRow[];
182
+ export declare function deleteRoutesByFileId(db: Database.Database, fileId: number): void;
183
+ export declare function searchRoutes(db: Database.Database, query: string, limit?: number): RouteRow[];
184
+ export declare function updateRoutePurpose(db: Database.Database, routeId: number, purpose: string): void;
185
+ export interface ConstantRow {
186
+ id: number;
187
+ file_id: number;
188
+ name: string;
189
+ value_text: string | null;
190
+ type_annotation: string | null;
191
+ is_exported: number;
192
+ start_line: number;
193
+ end_line: number;
194
+ }
195
+ export interface InsertConstant {
196
+ file_id: number;
197
+ name: string;
198
+ value_text: string | null;
199
+ type_annotation: string | null;
200
+ is_exported: boolean;
201
+ start_line: number;
202
+ end_line: number;
203
+ }
204
+ export declare function insertConstant(db: Database.Database, c: InsertConstant): number;
205
+ export declare function getConstantsByFileId(db: Database.Database, fileId: number): ConstantRow[];
206
+ export declare function deleteConstantsByFileId(db: Database.Database, fileId: number): void;
207
+ export interface FileSummaryRow {
208
+ id: number;
209
+ file_id: number;
210
+ import_count: number;
211
+ export_count: number;
212
+ function_count: number;
213
+ type_count: number;
214
+ route_count: number;
215
+ loc: number;
216
+ imports_json: string | null;
217
+ exports_json: string | null;
218
+ purpose: string | null;
219
+ semantic_analyzed_at: string | null;
220
+ }
221
+ export interface UpsertFileSummary {
222
+ file_id: number;
223
+ import_count: number;
224
+ export_count: number;
225
+ function_count: number;
226
+ type_count: number;
227
+ route_count: number;
228
+ loc: number;
229
+ imports_json: string | null;
230
+ exports_json: string | null;
231
+ }
232
+ export declare function upsertFileSummary(db: Database.Database, s: UpsertFileSummary): number;
233
+ export declare function getFileSummary(db: Database.Database, fileId: number): FileSummaryRow | undefined;
234
+ export declare function getAllFileSummaries(db: Database.Database): FileSummaryRow[];
235
+ export declare function updateFileSummaryPurpose(db: Database.Database, summaryId: number, purpose: string): void;
236
+ export declare function searchFiles(db: Database.Database, query: string, limit?: number): FileSummaryRow[];
237
+ export declare function rebuildAllFtsIndexes(db: Database.Database): void;
238
+ export interface FileOverview {
239
+ file: FileRow;
240
+ summary: FileSummaryRow | undefined;
241
+ functions: FunctionRow[];
242
+ types: TypeRow[];
243
+ routes: RouteRow[];
244
+ constants: ConstantRow[];
245
+ }
246
+ export declare function getFileOverview(db: Database.Database, fileId: number): FileOverview | null;
122
247
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
@@ -27,19 +27,45 @@ exports.getQaRuns = getQaRuns;
27
27
  exports.searchFunctions = searchFunctions;
28
28
  exports.rebuildFtsIndex = rebuildFtsIndex;
29
29
  exports.getStats = getStats;
30
+ exports.resolveNullCallees = resolveNullCallees;
30
31
  exports.getTransitiveCallers = getTransitiveCallers;
32
+ exports.getTransitiveCallersRobust = getTransitiveCallersRobust;
33
+ exports.insertType = insertType;
34
+ exports.getTypeByName = getTypeByName;
35
+ exports.getTypesByFileId = getTypesByFileId;
36
+ exports.deleteTypesByFileId = deleteTypesByFileId;
37
+ exports.searchTypes = searchTypes;
38
+ exports.getAllTypes = getAllTypes;
39
+ exports.updateTypePurpose = updateTypePurpose;
40
+ exports.insertRoute = insertRoute;
41
+ exports.getRoutesByFileId = getRoutesByFileId;
42
+ exports.getAllRoutes = getAllRoutes;
43
+ exports.deleteRoutesByFileId = deleteRoutesByFileId;
44
+ exports.searchRoutes = searchRoutes;
45
+ exports.updateRoutePurpose = updateRoutePurpose;
46
+ exports.insertConstant = insertConstant;
47
+ exports.getConstantsByFileId = getConstantsByFileId;
48
+ exports.deleteConstantsByFileId = deleteConstantsByFileId;
49
+ exports.upsertFileSummary = upsertFileSummary;
50
+ exports.getFileSummary = getFileSummary;
51
+ exports.getAllFileSummaries = getAllFileSummaries;
52
+ exports.updateFileSummaryPurpose = updateFileSummaryPurpose;
53
+ exports.searchFiles = searchFiles;
54
+ exports.rebuildAllFtsIndexes = rebuildAllFtsIndexes;
55
+ exports.getFileOverview = getFileOverview;
31
56
  function upsertFile(db, filePath, contentHash) {
57
+ const existing = db.prepare('SELECT id FROM files WHERE path = ?').get(filePath);
58
+ if (existing) {
59
+ db.prepare(`
60
+ UPDATE files SET content_hash = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?
61
+ `).run(contentHash, existing.id);
62
+ return existing.id;
63
+ }
32
64
  const stmt = db.prepare(`
33
65
  INSERT INTO files (path, content_hash, updated_at)
34
66
  VALUES (?, ?, CURRENT_TIMESTAMP)
35
- ON CONFLICT(path) DO UPDATE SET
36
- content_hash = excluded.content_hash,
37
- updated_at = CURRENT_TIMESTAMP
38
67
  `);
39
68
  const result = stmt.run(filePath, contentHash);
40
- if (result.changes === 0) {
41
- return db.prepare('SELECT id FROM files WHERE path = ?').get(filePath);
42
- }
43
69
  return Number(result.lastInsertRowid);
44
70
  }
45
71
  function getFileByPath(db, filePath) {
@@ -147,6 +173,8 @@ function getQaRuns(db, mode) {
147
173
  }
148
174
  // ── FTS queries ──
149
175
  function searchFunctions(db, query, limit = 10) {
176
+ if (!query.trim())
177
+ return [];
150
178
  return db.prepare(`
151
179
  SELECT f.* FROM functions f
152
180
  JOIN functions_fts fts ON f.id = fts.rowid
@@ -164,6 +192,24 @@ function getStats(db) {
164
192
  const analyzed = db.prepare('SELECT COUNT(*) as count FROM functions WHERE semantic_analyzed_at IS NOT NULL').get();
165
193
  const pending = db.prepare("SELECT COUNT(*) as count FROM analysis_queue WHERE status = 'pending'").get();
166
194
  const qaRuns = db.prepare('SELECT COUNT(*) as count FROM qa_runs').get();
195
+ // New entity counts — use try/catch for backward compat with old DBs
196
+ let typesCount = 0, routesCount = 0, constantsCount = 0, fileSummariesCount = 0;
197
+ try {
198
+ typesCount = db.prepare('SELECT COUNT(*) as count FROM types').get().count;
199
+ }
200
+ catch { }
201
+ try {
202
+ routesCount = db.prepare('SELECT COUNT(*) as count FROM routes').get().count;
203
+ }
204
+ catch { }
205
+ try {
206
+ constantsCount = db.prepare('SELECT COUNT(*) as count FROM constants').get().count;
207
+ }
208
+ catch { }
209
+ try {
210
+ fileSummariesCount = db.prepare('SELECT COUNT(*) as count FROM file_summaries').get().count;
211
+ }
212
+ catch { }
167
213
  return {
168
214
  totalFiles: files.count,
169
215
  totalFunctions: functions.count,
@@ -171,8 +217,22 @@ function getStats(db) {
171
217
  analyzedFunctions: analyzed.count,
172
218
  pendingAnalysis: pending.count,
173
219
  totalQaRuns: qaRuns.count,
220
+ totalTypes: typesCount,
221
+ totalRoutes: routesCount,
222
+ totalConstants: constantsCount,
223
+ totalFileSummaries: fileSummariesCount,
174
224
  };
175
225
  }
226
+ // ── Callee resolution ──
227
+ function resolveNullCallees(db) {
228
+ const result = db.prepare(`
229
+ UPDATE relationships SET callee_function_id = (
230
+ SELECT f.id FROM functions f WHERE f.name = relationships.callee_name LIMIT 1
231
+ ) WHERE callee_function_id IS NULL
232
+ AND EXISTS (SELECT 1 FROM functions f WHERE f.name = relationships.callee_name)
233
+ `).run();
234
+ return result.changes;
235
+ }
176
236
  // ── Impact analysis (recursive CTE) ──
177
237
  function getTransitiveCallers(db, functionId) {
178
238
  return db.prepare(`
@@ -188,4 +248,162 @@ function getTransitiveCallers(db, functionId) {
188
248
  JOIN callers c ON f.id = c.id
189
249
  `).all(functionId);
190
250
  }
251
+ function getTransitiveCallersRobust(db, functionId, functionName) {
252
+ return db.prepare(`
253
+ WITH RECURSIVE callers AS (
254
+ SELECT caller_function_id AS id FROM relationships
255
+ WHERE (callee_function_id = ? OR callee_name = ?) AND relation_type = 'calls'
256
+ UNION
257
+ SELECT r.caller_function_id FROM relationships r
258
+ JOIN callers c ON r.callee_function_id = c.id
259
+ WHERE r.relation_type = 'calls'
260
+ )
261
+ SELECT DISTINCT f.* FROM functions f
262
+ JOIN callers c ON f.id = c.id
263
+ `).all(functionId, functionName);
264
+ }
265
+ function insertType(db, t) {
266
+ const result = db.prepare(`
267
+ INSERT INTO types (file_id, name, kind, full_text, is_exported, start_line, end_line)
268
+ VALUES (?, ?, ?, ?, ?, ?, ?)
269
+ `).run(t.file_id, t.name, t.kind, t.full_text, t.is_exported ? 1 : 0, t.start_line, t.end_line);
270
+ return Number(result.lastInsertRowid);
271
+ }
272
+ function getTypeByName(db, name) {
273
+ return db.prepare('SELECT * FROM types WHERE name = ?').get(name);
274
+ }
275
+ function getTypesByFileId(db, fileId) {
276
+ return db.prepare('SELECT * FROM types WHERE file_id = ?').all(fileId);
277
+ }
278
+ function deleteTypesByFileId(db, fileId) {
279
+ db.prepare('DELETE FROM types WHERE file_id = ?').run(fileId);
280
+ }
281
+ function searchTypes(db, query, limit = 10) {
282
+ if (!query.trim())
283
+ return [];
284
+ return db.prepare(`
285
+ SELECT t.* FROM types t
286
+ JOIN types_fts fts ON t.id = fts.rowid
287
+ WHERE types_fts MATCH ?
288
+ LIMIT ?
289
+ `).all(query, limit);
290
+ }
291
+ function getAllTypes(db) {
292
+ return db.prepare('SELECT * FROM types').all();
293
+ }
294
+ function updateTypePurpose(db, typeId, purpose) {
295
+ db.prepare(`
296
+ UPDATE types SET purpose = ?, semantic_analyzed_at = CURRENT_TIMESTAMP WHERE id = ?
297
+ `).run(purpose, typeId);
298
+ }
299
+ function insertRoute(db, r) {
300
+ const result = db.prepare(`
301
+ INSERT INTO routes (file_id, method, path, handler_name, handler_body, middleware, start_line, end_line)
302
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
303
+ `).run(r.file_id, r.method, r.path, r.handler_name, r.handler_body, r.middleware, r.start_line, r.end_line);
304
+ return Number(result.lastInsertRowid);
305
+ }
306
+ function getRoutesByFileId(db, fileId) {
307
+ return db.prepare('SELECT * FROM routes WHERE file_id = ?').all(fileId);
308
+ }
309
+ function getAllRoutes(db) {
310
+ return db.prepare('SELECT * FROM routes').all();
311
+ }
312
+ function deleteRoutesByFileId(db, fileId) {
313
+ db.prepare('DELETE FROM routes WHERE file_id = ?').run(fileId);
314
+ }
315
+ function searchRoutes(db, query, limit = 10) {
316
+ if (!query.trim())
317
+ return [];
318
+ return db.prepare(`
319
+ SELECT r.* FROM routes r
320
+ JOIN routes_fts fts ON r.id = fts.rowid
321
+ WHERE routes_fts MATCH ?
322
+ LIMIT ?
323
+ `).all(query, limit);
324
+ }
325
+ function updateRoutePurpose(db, routeId, purpose) {
326
+ db.prepare(`
327
+ UPDATE routes SET purpose = ?, semantic_analyzed_at = CURRENT_TIMESTAMP WHERE id = ?
328
+ `).run(purpose, routeId);
329
+ }
330
+ function insertConstant(db, c) {
331
+ const result = db.prepare(`
332
+ INSERT INTO constants (file_id, name, value_text, type_annotation, is_exported, start_line, end_line)
333
+ VALUES (?, ?, ?, ?, ?, ?, ?)
334
+ `).run(c.file_id, c.name, c.value_text, c.type_annotation, c.is_exported ? 1 : 0, c.start_line, c.end_line);
335
+ return Number(result.lastInsertRowid);
336
+ }
337
+ function getConstantsByFileId(db, fileId) {
338
+ return db.prepare('SELECT * FROM constants WHERE file_id = ?').all(fileId);
339
+ }
340
+ function deleteConstantsByFileId(db, fileId) {
341
+ db.prepare('DELETE FROM constants WHERE file_id = ?').run(fileId);
342
+ }
343
+ function upsertFileSummary(db, s) {
344
+ const existing = db.prepare('SELECT id FROM file_summaries WHERE file_id = ?').get(s.file_id);
345
+ if (existing) {
346
+ db.prepare(`
347
+ UPDATE file_summaries SET import_count = ?, export_count = ?, function_count = ?,
348
+ type_count = ?, route_count = ?, loc = ?, imports_json = ?, exports_json = ?
349
+ WHERE id = ?
350
+ `).run(s.import_count, s.export_count, s.function_count, s.type_count, s.route_count, s.loc, s.imports_json, s.exports_json, existing.id);
351
+ return existing.id;
352
+ }
353
+ const result = db.prepare(`
354
+ INSERT INTO file_summaries (file_id, import_count, export_count, function_count, type_count, route_count, loc, imports_json, exports_json)
355
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
356
+ `).run(s.file_id, s.import_count, s.export_count, s.function_count, s.type_count, s.route_count, s.loc, s.imports_json, s.exports_json);
357
+ return Number(result.lastInsertRowid);
358
+ }
359
+ function getFileSummary(db, fileId) {
360
+ return db.prepare('SELECT * FROM file_summaries WHERE file_id = ?').get(fileId);
361
+ }
362
+ function getAllFileSummaries(db) {
363
+ return db.prepare('SELECT * FROM file_summaries').all();
364
+ }
365
+ function updateFileSummaryPurpose(db, summaryId, purpose) {
366
+ db.prepare(`
367
+ UPDATE file_summaries SET purpose = ?, semantic_analyzed_at = CURRENT_TIMESTAMP WHERE id = ?
368
+ `).run(purpose, summaryId);
369
+ }
370
+ function searchFiles(db, query, limit = 10) {
371
+ if (!query.trim())
372
+ return [];
373
+ return db.prepare(`
374
+ SELECT fs.* FROM file_summaries fs
375
+ JOIN files_fts fts ON fs.id = fts.rowid
376
+ WHERE files_fts MATCH ?
377
+ LIMIT ?
378
+ `).all(query, limit);
379
+ }
380
+ // ── Rebuild all FTS indexes ──
381
+ function rebuildAllFtsIndexes(db) {
382
+ db.exec("INSERT INTO functions_fts(functions_fts) VALUES('rebuild')");
383
+ try {
384
+ db.exec("INSERT INTO types_fts(types_fts) VALUES('rebuild')");
385
+ }
386
+ catch { }
387
+ try {
388
+ db.exec("INSERT INTO routes_fts(routes_fts) VALUES('rebuild')");
389
+ }
390
+ catch { }
391
+ try {
392
+ db.exec("INSERT INTO files_fts(files_fts) VALUES('rebuild')");
393
+ }
394
+ catch { }
395
+ }
396
+ function getFileOverview(db, fileId) {
397
+ const file = db.prepare('SELECT * FROM files WHERE id = ?').get(fileId);
398
+ if (!file)
399
+ return null;
400
+ return {
401
+ file,
402
+ summary: getFileSummary(db, fileId),
403
+ functions: getFunctionsByFileId(db, fileId),
404
+ types: getTypesByFileId(db, fileId),
405
+ routes: getRoutesByFileId(db, fileId),
406
+ constants: getConstantsByFileId(db, fileId),
407
+ };
408
+ }
191
409
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,59 @@ CREATE TABLE IF NOT EXISTS qa_runs (
75
75
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
76
76
  );
77
77
 
78
+ CREATE TABLE IF NOT EXISTS types (
79
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
80
+ file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
81
+ name TEXT NOT NULL,
82
+ kind TEXT NOT NULL CHECK(kind IN ('interface', 'type_alias', 'enum')),
83
+ full_text TEXT NOT NULL,
84
+ is_exported BOOLEAN DEFAULT 0,
85
+ start_line INTEGER NOT NULL,
86
+ end_line INTEGER NOT NULL,
87
+ purpose TEXT,
88
+ semantic_analyzed_at DATETIME
89
+ );
90
+
91
+ CREATE TABLE IF NOT EXISTS routes (
92
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
93
+ file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
94
+ method TEXT NOT NULL,
95
+ path TEXT NOT NULL,
96
+ handler_name TEXT,
97
+ handler_body TEXT NOT NULL,
98
+ middleware TEXT,
99
+ start_line INTEGER NOT NULL,
100
+ end_line INTEGER NOT NULL,
101
+ purpose TEXT,
102
+ semantic_analyzed_at DATETIME
103
+ );
104
+
105
+ CREATE TABLE IF NOT EXISTS constants (
106
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
107
+ file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
108
+ name TEXT NOT NULL,
109
+ value_text TEXT,
110
+ type_annotation TEXT,
111
+ is_exported BOOLEAN DEFAULT 0,
112
+ start_line INTEGER NOT NULL,
113
+ end_line INTEGER NOT NULL
114
+ );
115
+
116
+ CREATE TABLE IF NOT EXISTS file_summaries (
117
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
118
+ file_id INTEGER NOT NULL UNIQUE REFERENCES files(id) ON DELETE CASCADE,
119
+ import_count INTEGER DEFAULT 0,
120
+ export_count INTEGER DEFAULT 0,
121
+ function_count INTEGER DEFAULT 0,
122
+ type_count INTEGER DEFAULT 0,
123
+ route_count INTEGER DEFAULT 0,
124
+ loc INTEGER DEFAULT 0,
125
+ imports_json TEXT,
126
+ exports_json TEXT,
127
+ purpose TEXT,
128
+ semantic_analyzed_at DATETIME
129
+ );
130
+
78
131
  -- Indexes
79
132
  CREATE INDEX IF NOT EXISTS idx_functions_name ON functions(name);
80
133
  CREATE INDEX IF NOT EXISTS idx_functions_domain ON functions(domain);
@@ -83,3 +136,9 @@ CREATE INDEX IF NOT EXISTS idx_relationships_caller ON relationships(caller_func
83
136
  CREATE INDEX IF NOT EXISTS idx_relationships_callee ON relationships(callee_function_id);
84
137
  CREATE INDEX IF NOT EXISTS idx_analysis_queue_status ON analysis_queue(status, priority DESC);
85
138
  CREATE INDEX IF NOT EXISTS idx_semantic_cache_lookup ON semantic_cache(function_id, prompt_hash);
139
+ CREATE INDEX IF NOT EXISTS idx_types_file_id ON types(file_id);
140
+ CREATE INDEX IF NOT EXISTS idx_types_name ON types(name);
141
+ CREATE INDEX IF NOT EXISTS idx_routes_file_id ON routes(file_id);
142
+ CREATE INDEX IF NOT EXISTS idx_routes_path ON routes(path);
143
+ CREATE INDEX IF NOT EXISTS idx_constants_file_id ON constants(file_id);
144
+ CREATE INDEX IF NOT EXISTS idx_file_summaries_file_id ON file_summaries(file_id);
@@ -0,0 +1,11 @@
1
+ import { SourceFile } from 'ts-morph';
2
+ export interface ExtractedConstant {
3
+ name: string;
4
+ valueText: string | null;
5
+ typeAnnotation: string | null;
6
+ isExported: boolean;
7
+ startLine: number;
8
+ endLine: number;
9
+ }
10
+ export declare function extractConstants(sourceFile: SourceFile): ExtractedConstant[];
11
+ //# sourceMappingURL=constant-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant-extractor.d.ts","sourceRoot":"","sources":["../../src/ingest/constant-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAsC5E"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractConstants = extractConstants;
4
+ const ts_morph_1 = require("ts-morph");
5
+ function extractConstants(sourceFile) {
6
+ const constants = [];
7
+ for (const varStmt of sourceFile.getVariableStatements()) {
8
+ for (const decl of varStmt.getDeclarations()) {
9
+ const name = decl.getName();
10
+ if (!name)
11
+ continue;
12
+ const initializer = decl.getInitializer();
13
+ // Skip arrow functions and function expressions — those are captured as functions
14
+ if (initializer && (ts_morph_1.Node.isArrowFunction(initializer) || ts_morph_1.Node.isFunctionExpression(initializer))) {
15
+ continue;
16
+ }
17
+ // Get value text, truncated
18
+ let valueText = null;
19
+ if (initializer) {
20
+ const text = initializer.getText();
21
+ valueText = text.length > 500 ? text.substring(0, 500) + '...' : text;
22
+ }
23
+ // Get type annotation
24
+ const typeNode = decl.getTypeNode();
25
+ const typeAnnotation = typeNode ? typeNode.getText() : null;
26
+ constants.push({
27
+ name,
28
+ valueText,
29
+ typeAnnotation,
30
+ isExported: varStmt.isExported(),
31
+ startLine: decl.getStartLineNumber(),
32
+ endLine: decl.getEndLineNumber(),
33
+ });
34
+ }
35
+ }
36
+ return constants;
37
+ }
38
+ //# sourceMappingURL=constant-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant-extractor.js","sourceRoot":"","sources":["../../src/ingest/constant-extractor.ts"],"names":[],"mappings":";;AAWA,4CAsCC;AAjDD,uCAA4C;AAW5C,SAAgB,gBAAgB,CAAC,UAAsB;IACrD,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,kFAAkF;YAClF,IAAI,WAAW,IAAI,CAAC,eAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,eAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;gBACjG,SAAS;YACX,CAAC;YAED,4BAA4B;YAC5B,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;gBACnC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,CAAC;YAED,sBAAsB;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE5D,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,SAAS;gBACT,cAAc;gBACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;gBAChC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACpC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { SourceFile } from 'ts-morph';
2
+ export interface ExtractedFileMetadata {
3
+ importCount: number;
4
+ exportCount: number;
5
+ functionCount: number;
6
+ typeCount: number;
7
+ routeCount: number;
8
+ loc: number;
9
+ imports: string[];
10
+ exports: string[];
11
+ }
12
+ export declare function extractFileMetadata(sourceFile: SourceFile, functionCount: number, typeCount: number, routeCount: number): ExtractedFileMetadata;
13
+ //# sourceMappingURL=file-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-metadata.d.ts","sourceRoot":"","sources":["../../src/ingest/file-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,qBAAqB,CAiDvB"}