@codemap-ai/core 0.2.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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config.d.ts +40 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +229 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/index.d.ts +27 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +29 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/agent-pack-doctor.d.ts +36 -0
  11. package/dist/lib/agent-pack-doctor.d.ts.map +1 -0
  12. package/dist/lib/agent-pack-doctor.js +325 -0
  13. package/dist/lib/agent-pack-doctor.js.map +1 -0
  14. package/dist/lib/agent-pack-installer.d.ts +35 -0
  15. package/dist/lib/agent-pack-installer.d.ts.map +1 -0
  16. package/dist/lib/agent-pack-installer.js +371 -0
  17. package/dist/lib/agent-pack-installer.js.map +1 -0
  18. package/dist/lib/agent-pack.d.ts +36 -0
  19. package/dist/lib/agent-pack.d.ts.map +1 -0
  20. package/dist/lib/agent-pack.js +119 -0
  21. package/dist/lib/agent-pack.js.map +1 -0
  22. package/dist/lib/agent-workflow.d.ts +37 -0
  23. package/dist/lib/agent-workflow.d.ts.map +1 -0
  24. package/dist/lib/agent-workflow.js +329 -0
  25. package/dist/lib/agent-workflow.js.map +1 -0
  26. package/dist/lib/api-types.d.ts +32 -0
  27. package/dist/lib/api-types.d.ts.map +1 -0
  28. package/dist/lib/api-types.js +3 -0
  29. package/dist/lib/api-types.js.map +1 -0
  30. package/dist/lib/auto-inject.d.ts +16 -0
  31. package/dist/lib/auto-inject.d.ts.map +1 -0
  32. package/dist/lib/auto-inject.js +80 -0
  33. package/dist/lib/auto-inject.js.map +1 -0
  34. package/dist/lib/bundled-runtime.d.ts +9 -0
  35. package/dist/lib/bundled-runtime.d.ts.map +1 -0
  36. package/dist/lib/bundled-runtime.js +20 -0
  37. package/dist/lib/bundled-runtime.js.map +1 -0
  38. package/dist/lib/codemap-api.d.ts +22 -0
  39. package/dist/lib/codemap-api.d.ts.map +1 -0
  40. package/dist/lib/codemap-api.js +74 -0
  41. package/dist/lib/codemap-api.js.map +1 -0
  42. package/dist/lib/import-health.d.ts +38 -0
  43. package/dist/lib/import-health.d.ts.map +1 -0
  44. package/dist/lib/import-health.js +186 -0
  45. package/dist/lib/import-health.js.map +1 -0
  46. package/dist/lib/local-index.d.ts +52 -0
  47. package/dist/lib/local-index.d.ts.map +1 -0
  48. package/dist/lib/local-index.js +262 -0
  49. package/dist/lib/local-index.js.map +1 -0
  50. package/dist/lib/markdown-fence.d.ts +8 -0
  51. package/dist/lib/markdown-fence.d.ts.map +1 -0
  52. package/dist/lib/markdown-fence.js +98 -0
  53. package/dist/lib/markdown-fence.js.map +1 -0
  54. package/dist/lib/mcp-auth.d.ts +39 -0
  55. package/dist/lib/mcp-auth.d.ts.map +1 -0
  56. package/dist/lib/mcp-auth.js +184 -0
  57. package/dist/lib/mcp-auth.js.map +1 -0
  58. package/dist/lib/monorepo-root.d.ts +7 -0
  59. package/dist/lib/monorepo-root.d.ts.map +1 -0
  60. package/dist/lib/monorepo-root.js +23 -0
  61. package/dist/lib/monorepo-root.js.map +1 -0
  62. package/dist/lib/onboarding.d.ts +5 -0
  63. package/dist/lib/onboarding.d.ts.map +1 -0
  64. package/dist/lib/onboarding.js +96 -0
  65. package/dist/lib/onboarding.js.map +1 -0
  66. package/dist/lib/open-url.d.ts +7 -0
  67. package/dist/lib/open-url.d.ts.map +1 -0
  68. package/dist/lib/open-url.js +38 -0
  69. package/dist/lib/open-url.js.map +1 -0
  70. package/dist/lib/regex-utils.d.ts +2 -0
  71. package/dist/lib/regex-utils.d.ts.map +1 -0
  72. package/dist/lib/regex-utils.js +4 -0
  73. package/dist/lib/regex-utils.js.map +1 -0
  74. package/dist/lib/server-instructions.d.ts +2 -0
  75. package/dist/lib/server-instructions.d.ts.map +1 -0
  76. package/dist/lib/server-instructions.js +34 -0
  77. package/dist/lib/server-instructions.js.map +1 -0
  78. package/dist/lib/session-context.d.ts +2 -0
  79. package/dist/lib/session-context.d.ts.map +1 -0
  80. package/dist/lib/session-context.js +40 -0
  81. package/dist/lib/session-context.js.map +1 -0
  82. package/dist/lib/session-tracker.d.ts +16 -0
  83. package/dist/lib/session-tracker.d.ts.map +1 -0
  84. package/dist/lib/session-tracker.js +32 -0
  85. package/dist/lib/session-tracker.js.map +1 -0
  86. package/dist/lib/sqlite-index-store.d.ts +165 -0
  87. package/dist/lib/sqlite-index-store.d.ts.map +1 -0
  88. package/dist/lib/sqlite-index-store.js +609 -0
  89. package/dist/lib/sqlite-index-store.js.map +1 -0
  90. package/dist/lib/tool-response.d.ts +97 -0
  91. package/dist/lib/tool-response.d.ts.map +1 -0
  92. package/dist/lib/tool-response.js +127 -0
  93. package/dist/lib/tool-response.js.map +1 -0
  94. package/dist/lib/uuid-schema.d.ts +8 -0
  95. package/dist/lib/uuid-schema.d.ts.map +1 -0
  96. package/dist/lib/uuid-schema.js +10 -0
  97. package/dist/lib/uuid-schema.js.map +1 -0
  98. package/dist/lib/workspace-git.d.ts +16 -0
  99. package/dist/lib/workspace-git.d.ts.map +1 -0
  100. package/dist/lib/workspace-git.js +53 -0
  101. package/dist/lib/workspace-git.js.map +1 -0
  102. package/dist/lib/workspace-project.d.ts +61 -0
  103. package/dist/lib/workspace-project.d.ts.map +1 -0
  104. package/dist/lib/workspace-project.js +231 -0
  105. package/dist/lib/workspace-project.js.map +1 -0
  106. package/dist/lib/workspace-resolver.d.ts +16 -0
  107. package/dist/lib/workspace-resolver.d.ts.map +1 -0
  108. package/dist/lib/workspace-resolver.js +59 -0
  109. package/dist/lib/workspace-resolver.js.map +1 -0
  110. package/dist/lib/workspace-zip.d.ts +12 -0
  111. package/dist/lib/workspace-zip.d.ts.map +1 -0
  112. package/dist/lib/workspace-zip.js +126 -0
  113. package/dist/lib/workspace-zip.js.map +1 -0
  114. package/package.json +44 -0
@@ -0,0 +1,609 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { existsSync, mkdirSync } from "node:fs";
3
+ import path from "node:path";
4
+ function stableId(...parts) {
5
+ return parts
6
+ .map((part) => String(part ?? ""))
7
+ .join(":")
8
+ .replace(/[^a-zA-Z0-9:_./#-]/g, "_");
9
+ }
10
+ function terms(query) {
11
+ return query
12
+ .toLowerCase()
13
+ .split(/[\s\-_/.,:]+/)
14
+ .map((term) => term.replace(/[^a-z0-9]/g, ""))
15
+ .filter((term) => term.length > 1);
16
+ }
17
+ function includesAll(input, queryTerms) {
18
+ const lower = input.toLowerCase();
19
+ return queryTerms.every((term) => lower.includes(term));
20
+ }
21
+ function scoreText(input, queryTerms, baseRank) {
22
+ const lower = input.toLowerCase();
23
+ let score = 100 - baseRank;
24
+ for (const term of queryTerms) {
25
+ if (lower === term)
26
+ score += 30;
27
+ else if (lower.includes(term))
28
+ score += 12;
29
+ }
30
+ return score;
31
+ }
32
+ function resolveContentStatus(isBinary, parseStatus, content) {
33
+ if (content != null)
34
+ return "ready";
35
+ if (isBinary)
36
+ return "binary";
37
+ if (parseStatus === "too_large")
38
+ return "too_large";
39
+ if (parseStatus === "unsupported")
40
+ return "unsupported";
41
+ return "unavailable";
42
+ }
43
+ export function sqliteIndexDbPath(workspaceRootPath) {
44
+ return path.join(workspaceRootPath, ".codemap", "local-index.db");
45
+ }
46
+ const SCHEMA_SQL = `
47
+ CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT);
48
+
49
+ CREATE TABLE IF NOT EXISTS manifest (
50
+ path TEXT PRIMARY KEY,
51
+ sizeBytes INTEGER NOT NULL,
52
+ contentSha256 TEXT,
53
+ parseStatus TEXT NOT NULL
54
+ );
55
+
56
+ CREATE TABLE IF NOT EXISTS files (
57
+ path TEXT PRIMARY KEY,
58
+ dirPath TEXT NOT NULL,
59
+ baseName TEXT NOT NULL,
60
+ extension TEXT,
61
+ language TEXT,
62
+ mimeType TEXT,
63
+ sizeBytes INTEGER NOT NULL,
64
+ lineCount INTEGER,
65
+ parseStatus TEXT NOT NULL,
66
+ isBinary INTEGER NOT NULL,
67
+ isText INTEGER NOT NULL,
68
+ contentSha256 TEXT,
69
+ content TEXT
70
+ );
71
+
72
+ CREATE TABLE IF NOT EXISTS symbols (
73
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
74
+ filePath TEXT NOT NULL,
75
+ localKey TEXT NOT NULL,
76
+ stableKey TEXT NOT NULL,
77
+ displayName TEXT NOT NULL,
78
+ kind TEXT NOT NULL,
79
+ signature TEXT,
80
+ returnType TEXT,
81
+ doc TEXT,
82
+ isExported INTEGER NOT NULL,
83
+ parentSymbolLocalKey TEXT,
84
+ line INTEGER,
85
+ col INTEGER,
86
+ endLine INTEGER,
87
+ endCol INTEGER
88
+ );
89
+ CREATE INDEX IF NOT EXISTS idx_symbols_filePath ON symbols(filePath);
90
+ CREATE INDEX IF NOT EXISTS idx_symbols_displayName ON symbols(lower(displayName));
91
+
92
+ CREATE TABLE IF NOT EXISTS imports (
93
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
94
+ filePath TEXT NOT NULL,
95
+ localKey TEXT NOT NULL,
96
+ moduleSpecifier TEXT NOT NULL,
97
+ importKind TEXT NOT NULL,
98
+ resolutionKind TEXT NOT NULL,
99
+ targetPathText TEXT,
100
+ targetExternalSymbolKey TEXT,
101
+ line INTEGER NOT NULL,
102
+ col INTEGER NOT NULL,
103
+ endLine INTEGER NOT NULL,
104
+ endCol INTEGER NOT NULL
105
+ );
106
+ CREATE INDEX IF NOT EXISTS idx_imports_filePath ON imports(filePath);
107
+
108
+ CREATE TABLE IF NOT EXISTS imported_by (
109
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
110
+ targetFilePath TEXT NOT NULL,
111
+ sourceFilePath TEXT NOT NULL,
112
+ moduleSpecifier TEXT NOT NULL,
113
+ importKind TEXT NOT NULL,
114
+ resolutionKind TEXT NOT NULL,
115
+ startLine INTEGER NOT NULL,
116
+ startCol INTEGER NOT NULL,
117
+ endLine INTEGER NOT NULL,
118
+ endCol INTEGER NOT NULL
119
+ );
120
+ CREATE INDEX IF NOT EXISTS idx_ib_target ON imported_by(targetFilePath);
121
+ CREATE INDEX IF NOT EXISTS idx_ib_source ON imported_by(sourceFilePath);
122
+
123
+ CREATE TABLE IF NOT EXISTS exports (
124
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
125
+ filePath TEXT NOT NULL,
126
+ exportName TEXT NOT NULL,
127
+ exportKind TEXT NOT NULL,
128
+ symbolLocalKey TEXT,
129
+ line INTEGER NOT NULL,
130
+ col INTEGER NOT NULL,
131
+ endLine INTEGER NOT NULL,
132
+ endCol INTEGER NOT NULL
133
+ );
134
+ CREATE INDEX IF NOT EXISTS idx_exports_filePath ON exports(filePath);
135
+ CREATE INDEX IF NOT EXISTS idx_exports_exportName ON exports(lower(exportName));
136
+ `;
137
+ export class SQLiteIndexStore {
138
+ db;
139
+ dbPath;
140
+ constructor(dbPath) {
141
+ this.dbPath = dbPath;
142
+ this.db = new DatabaseSync(dbPath);
143
+ this.db.exec("PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;");
144
+ this.db.exec(SCHEMA_SQL);
145
+ }
146
+ static open(dbPath) {
147
+ mkdirSync(path.dirname(dbPath), { recursive: true });
148
+ return new SQLiteIndexStore(dbPath);
149
+ }
150
+ static exists(dbPath) {
151
+ return existsSync(dbPath);
152
+ }
153
+ getMeta() {
154
+ const rows = this.db
155
+ .prepare("SELECT key, value FROM meta")
156
+ .all();
157
+ if (rows.length === 0)
158
+ return null;
159
+ const m = Object.fromEntries(rows.map((r) => [r.key, r.value]));
160
+ if (!m["indexedAt"] || !m["workspaceRootPath"])
161
+ return null;
162
+ return {
163
+ indexedAt: m["indexedAt"],
164
+ commitSha: m["commitSha"] ?? null,
165
+ workspaceRootPath: m["workspaceRootPath"],
166
+ cachePath: m["cachePath"] ?? this.dbPath,
167
+ };
168
+ }
169
+ getAllFilePaths() {
170
+ const rows = this.db.prepare("SELECT path FROM manifest ORDER BY path").all();
171
+ return rows.map((r) => r.path);
172
+ }
173
+ /**
174
+ * Remove a single file and all its associated data from the index.
175
+ * Returns true if rows were deleted, false if the file wasn't in the index.
176
+ */
177
+ removeFileFromIndex(filePath) {
178
+ const delManifest = this.db.prepare("DELETE FROM manifest WHERE path = ?");
179
+ const delFiles = this.db.prepare("DELETE FROM files WHERE path = ?");
180
+ const delSymbols = this.db.prepare("DELETE FROM symbols WHERE filePath = ?");
181
+ const delImports = this.db.prepare("DELETE FROM imports WHERE filePath = ?");
182
+ const delImportedBy = this.db.prepare("DELETE FROM imported_by WHERE targetFilePath = ?");
183
+ const delExports = this.db.prepare("DELETE FROM exports WHERE filePath = ?");
184
+ try {
185
+ this.db.exec("BEGIN");
186
+ const r = delManifest.run(filePath);
187
+ delFiles.run(filePath);
188
+ delSymbols.run(filePath);
189
+ delImports.run(filePath);
190
+ delImportedBy.run(filePath);
191
+ delExports.run(filePath);
192
+ this.db.exec("COMMIT");
193
+ return r.changes > 0;
194
+ }
195
+ catch (error) {
196
+ this.db.exec("ROLLBACK");
197
+ throw error;
198
+ }
199
+ }
200
+ isStale(currentFiles) {
201
+ const manifestRows = this.db
202
+ .prepare("SELECT path, sizeBytes, contentSha256, parseStatus FROM manifest ORDER BY path")
203
+ .all();
204
+ if (manifestRows.length !== currentFiles.length)
205
+ return true;
206
+ const sorted = [...currentFiles].sort((a, b) => a.path.localeCompare(b.path));
207
+ for (let i = 0; i < sorted.length; i++) {
208
+ const f = sorted[i];
209
+ const m = manifestRows[i];
210
+ if (f.path !== m.path ||
211
+ f.sizeBytes !== m.sizeBytes ||
212
+ (f.contentSha256 ?? null) !== m.contentSha256 ||
213
+ f.parseStatus !== m.parseStatus) {
214
+ return true;
215
+ }
216
+ }
217
+ return false;
218
+ }
219
+ getSummary(stale = false) {
220
+ const meta = this.getMeta();
221
+ const fileCount = this.db.prepare("SELECT COUNT(*) as n FROM files").get().n;
222
+ const symbolCount = this.db.prepare("SELECT COUNT(*) as n FROM symbols").get().n;
223
+ return {
224
+ workspaceRootPath: meta?.workspaceRootPath ?? "",
225
+ cachePath: meta?.cachePath ?? this.dbPath,
226
+ indexedAt: meta?.indexedAt ?? null,
227
+ fileCount,
228
+ symbolCount,
229
+ stale,
230
+ };
231
+ }
232
+ listFiles(limit = 100) {
233
+ return this.db
234
+ .prepare("SELECT path, language, lineCount, parseStatus FROM files ORDER BY path LIMIT ?")
235
+ .all(limit);
236
+ }
237
+ write(files, meta) {
238
+ this.db.exec("BEGIN");
239
+ try {
240
+ this.db.exec("DELETE FROM meta; DELETE FROM manifest; DELETE FROM files; DELETE FROM symbols; DELETE FROM imports; DELETE FROM imported_by; DELETE FROM exports;");
241
+ const insertMeta = this.db.prepare("INSERT OR REPLACE INTO meta(key, value) VALUES(?, ?)");
242
+ insertMeta.run("indexedAt", meta.indexedAt);
243
+ insertMeta.run("commitSha", meta.commitSha ?? null);
244
+ insertMeta.run("workspaceRootPath", meta.workspaceRootPath);
245
+ insertMeta.run("cachePath", meta.cachePath);
246
+ insertMeta.run("parserName", meta.parserName);
247
+ insertMeta.run("parserVersion", meta.parserVersion);
248
+ const insertManifest = this.db.prepare("INSERT INTO manifest(path, sizeBytes, contentSha256, parseStatus) VALUES(?, ?, ?, ?)");
249
+ const insertFile = this.db.prepare("INSERT INTO files(path, dirPath, baseName, extension, language, mimeType, sizeBytes, lineCount, parseStatus, isBinary, isText, contentSha256, content) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
250
+ const insertSymbol = this.db.prepare("INSERT INTO symbols(filePath, localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
251
+ const insertImport = this.db.prepare("INSERT INTO imports(filePath, localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
252
+ const insertImportedBy = this.db.prepare("INSERT INTO imported_by(targetFilePath, sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
253
+ const insertExport = this.db.prepare("INSERT INTO exports(filePath, exportName, exportKind, symbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
254
+ for (const file of files) {
255
+ insertManifest.run(file.path, file.sizeBytes, file.contentSha256 ?? null, file.parseStatus);
256
+ insertFile.run(file.path, file.dirPath, file.baseName, file.extension ?? null, file.language ?? null, file.mimeType ?? null, file.sizeBytes, file.lineCount ?? null, file.parseStatus, file.isBinary ? 1 : 0, file.isText ? 1 : 0, file.contentSha256 ?? null, file.content ?? null);
257
+ for (const sym of file.symbols) {
258
+ insertSymbol.run(file.path, sym.localKey, sym.stableKey, sym.displayName, sym.kind, sym.signature ?? null, sym.returnType ?? null, sym.doc ?? null, sym.isExported ? 1 : 0, sym.parentSymbolLocalKey ?? null, sym.line, sym.col, sym.endLine, sym.endCol);
259
+ }
260
+ for (const imp of file.imports) {
261
+ insertImport.run(file.path, imp.localKey, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.targetPathText ?? null, imp.targetExternalSymbolKey ?? null, imp.line, imp.col, imp.endLine, imp.endCol);
262
+ }
263
+ for (const ib of file.importedBy) {
264
+ insertImportedBy.run(file.path, ib.sourceFilePath, ib.moduleSpecifier, ib.importKind, ib.resolutionKind, ib.startLine, ib.startCol, ib.endLine, ib.endCol);
265
+ }
266
+ for (const exp of file.exports) {
267
+ insertExport.run(file.path, exp.exportName, exp.exportKind, exp.symbolLocalKey ?? null, exp.line, exp.col, exp.endLine, exp.endCol);
268
+ }
269
+ }
270
+ this.db.exec("COMMIT");
271
+ }
272
+ catch (error) {
273
+ this.db.exec("ROLLBACK");
274
+ throw error;
275
+ }
276
+ }
277
+ /**
278
+ * Upsert a single file's data. Replaces manifest/files/symbols/imports/exports rows
279
+ * for the file and rebuilds imported_by entries where this file is the target.
280
+ * Does NOT update imported_by entries in OTHER files that import this file
281
+ * (those are managed by the importer's own upsert).
282
+ */
283
+ upsertFile(file, opts = {}) {
284
+ this.db.exec("BEGIN");
285
+ try {
286
+ // Delete all data for this file from file-owned tables
287
+ this.db.prepare("DELETE FROM manifest WHERE path = ?").run(file.path);
288
+ this.db.prepare("DELETE FROM files WHERE path = ?").run(file.path);
289
+ this.db.prepare("DELETE FROM symbols WHERE filePath = ?").run(file.path);
290
+ this.db.prepare("DELETE FROM imports WHERE filePath = ?").run(file.path);
291
+ this.db.prepare("DELETE FROM exports WHERE filePath = ?").run(file.path);
292
+ // Delete imported_by entries where this file is the TARGET (other files import this file)
293
+ // and where this file is the SOURCE (this file imports other files).
294
+ if (!opts.keepImportedByForFile) {
295
+ this.db.prepare("DELETE FROM imported_by WHERE targetFilePath = ? OR sourceFilePath = ?").run(file.path, file.path);
296
+ }
297
+ // Re-insert manifest + files
298
+ this.db.prepare("INSERT INTO manifest(path, sizeBytes, contentSha256, parseStatus) VALUES(?, ?, ?, ?)").run(file.path, file.sizeBytes, file.contentSha256 ?? null, file.parseStatus);
299
+ this.db.prepare("INSERT INTO files(path, dirPath, baseName, extension, language, mimeType, sizeBytes, lineCount, parseStatus, isBinary, isText, contentSha256, content) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(file.path, file.dirPath, file.baseName, file.extension ?? null, file.language ?? null, file.mimeType ?? null, file.sizeBytes, file.lineCount ?? null, file.parseStatus, file.isBinary ? 1 : 0, file.isText ? 1 : 0, file.contentSha256 ?? null, file.content ?? null);
300
+ // Re-insert symbols
301
+ const insertSymbol = this.db.prepare("INSERT INTO symbols(filePath, localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
302
+ for (const sym of file.symbols) {
303
+ insertSymbol.run(file.path, sym.localKey, sym.stableKey, sym.displayName, sym.kind, sym.signature ?? null, sym.returnType ?? null, sym.doc ?? null, sym.isExported ? 1 : 0, sym.parentSymbolLocalKey ?? null, sym.line, sym.col, sym.endLine, sym.endCol);
304
+ }
305
+ // Re-insert imports
306
+ const insertImport = this.db.prepare("INSERT INTO imports(filePath, localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
307
+ for (const imp of file.imports) {
308
+ insertImport.run(file.path, imp.localKey, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.targetPathText ?? null, imp.targetExternalSymbolKey ?? null, imp.line, imp.col, imp.endLine, imp.endCol);
309
+ }
310
+ // Re-insert imported_by entries for imports owned by this file
311
+ const insertIB = this.db.prepare("INSERT INTO imported_by(targetFilePath, sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
312
+ for (const imp of file.imports) {
313
+ if (!imp.targetPathText)
314
+ continue;
315
+ insertIB.run(imp.targetPathText, file.path, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.line, imp.col, imp.endLine, imp.endCol);
316
+ }
317
+ // Re-insert exports
318
+ const insertExport = this.db.prepare("INSERT INTO exports(filePath, exportName, exportKind, symbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
319
+ for (const exp of file.exports) {
320
+ insertExport.run(file.path, exp.exportName, exp.exportKind, exp.symbolLocalKey ?? null, exp.line, exp.col, exp.endLine, exp.endCol);
321
+ }
322
+ // Re-insert imported_by entries for this file (where other files import from this file)
323
+ // These are derived from the imports table: for each import with targetPathText = file.path,
324
+ // the importing file has an imported_by entry pointing to this file
325
+ const importers = this.db.prepare("SELECT filePath, moduleSpecifier, importKind, resolutionKind, line, col, endLine, endCol FROM imports WHERE targetPathText = ?").all(file.path);
326
+ for (const imp of importers) {
327
+ insertIB.run(file.path, imp.filePath, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.line, imp.col, imp.endLine, imp.endCol);
328
+ }
329
+ this.db.exec("COMMIT");
330
+ }
331
+ catch (error) {
332
+ this.db.exec("ROLLBACK");
333
+ throw error;
334
+ }
335
+ }
336
+ search(query, symbolKinds) {
337
+ const queryTerms = terms(query);
338
+ if (queryTerms.length === 0)
339
+ return { files: [], symbols: [], exports: [] };
340
+ const likeConds = (col) => queryTerms.map(() => `LOWER(${col}) LIKE ?`).join(" AND ");
341
+ const likeArgs = (col = "") => queryTerms.map((t) => `%${col}${t}%`);
342
+ // Files
343
+ const fileRows = this.db
344
+ .prepare(`SELECT path, language FROM files WHERE ${likeConds("path")} LIMIT 50`)
345
+ .all(...likeArgs());
346
+ const files = fileRows
347
+ .filter((r) => includesAll(r.path, queryTerms))
348
+ .sort((a, b) => scoreText(b.path, queryTerms, 0) - scoreText(a.path, queryTerms, 0))
349
+ .slice(0, 25)
350
+ .map((r) => ({ kind: "file", path: r.path, language: r.language }));
351
+ // Symbols
352
+ const symTermCond = `(${likeConds("s.displayName")} OR ${likeConds("s.filePath")})`;
353
+ const symArgs = [...likeArgs(), ...likeArgs()];
354
+ let symSql = `
355
+ SELECT s.filePath, s.localKey, s.stableKey, s.displayName, s.kind, s.signature,
356
+ s.parentSymbolLocalKey, s.line, s.col, s.endLine, s.endCol
357
+ FROM symbols s
358
+ WHERE ${symTermCond}
359
+ `;
360
+ if (symbolKinds && symbolKinds.length > 0) {
361
+ symSql += ` AND s.kind IN (${symbolKinds.map(() => "?").join(",")})`;
362
+ symArgs.push(...symbolKinds);
363
+ }
364
+ symSql += " LIMIT 50";
365
+ const symRows = this.db.prepare(symSql).all(...symArgs);
366
+ // Resolve parent display names in one batch
367
+ const parentKeys = [...new Set(symRows.map((r) => r.parentSymbolLocalKey).filter(Boolean))];
368
+ const parentNameMap = new Map();
369
+ if (parentKeys.length > 0) {
370
+ const parentRows = this.db
371
+ .prepare(`SELECT localKey, displayName FROM symbols WHERE localKey IN (${parentKeys.map(() => "?").join(",")})`)
372
+ .all(...parentKeys);
373
+ for (const pr of parentRows)
374
+ parentNameMap.set(pr.localKey, pr.displayName);
375
+ }
376
+ const symbols = symRows
377
+ .filter((r) => includesAll(`${r.displayName} ${r.signature ?? ""} ${r.filePath}`, queryTerms))
378
+ .sort((a, b) => scoreText(`${b.displayName} ${b.filePath}`, queryTerms, 0) -
379
+ scoreText(`${a.displayName} ${a.filePath}`, queryTerms, 0))
380
+ .slice(0, 25)
381
+ .map((r) => ({
382
+ kind: "symbol",
383
+ id: stableId(r.filePath, r.stableKey),
384
+ displayName: r.displayName,
385
+ symbolKind: r.kind,
386
+ signature: r.signature,
387
+ filePath: r.filePath,
388
+ parentSymbolName: r.parentSymbolLocalKey ? (parentNameMap.get(r.parentSymbolLocalKey) ?? null) : null,
389
+ startLine: r.line,
390
+ startCol: r.col,
391
+ endLine: r.endLine,
392
+ endCol: r.endCol,
393
+ }));
394
+ const expRows = this.db
395
+ .prepare(`SELECT e.filePath, e.exportName, e.exportKind, e.symbolLocalKey, e.line, e.col, e.endLine, e.endCol
396
+ FROM exports e
397
+ WHERE (${likeConds("e.exportName")} OR ${likeConds("e.filePath")})
398
+ LIMIT 50`)
399
+ .all(...likeArgs(), ...likeArgs());
400
+ const expSymKeys = [...new Set(expRows.map((r) => r.symbolLocalKey).filter(Boolean))];
401
+ const expSymMap = new Map();
402
+ if (expSymKeys.length > 0) {
403
+ const symInfoRows = this.db
404
+ .prepare(`SELECT localKey, stableKey, displayName, line, col, endLine, endCol FROM symbols WHERE localKey IN (${expSymKeys.map(() => "?").join(",")})`)
405
+ .all(...expSymKeys);
406
+ for (const sr of symInfoRows)
407
+ expSymMap.set(sr.localKey, sr);
408
+ }
409
+ const exports = expRows
410
+ .filter((r) => includesAll(`${r.exportName} ${r.filePath}`, queryTerms))
411
+ .sort((a, b) => scoreText(`${b.exportName} ${b.filePath}`, queryTerms, 0) -
412
+ scoreText(`${a.exportName} ${a.filePath}`, queryTerms, 0))
413
+ .slice(0, 25)
414
+ .map((r) => {
415
+ const sym = r.symbolLocalKey ? (expSymMap.get(r.symbolLocalKey) ?? null) : null;
416
+ return {
417
+ kind: "export",
418
+ id: stableId(r.filePath, "export", r.exportName, r.line, r.col),
419
+ exportName: r.exportName,
420
+ filePath: r.filePath,
421
+ symbolId: sym ? stableId(r.filePath, sym.stableKey) : null,
422
+ symbolStartLine: sym?.line ?? null,
423
+ symbolStartCol: sym?.col ?? null,
424
+ symbolEndLine: sym?.endLine ?? null,
425
+ symbolEndCol: sym?.endCol ?? null,
426
+ startLine: r.line,
427
+ startCol: r.col,
428
+ endLine: r.endLine,
429
+ endCol: r.endCol,
430
+ };
431
+ });
432
+ return { files, symbols, exports };
433
+ }
434
+ getFileContent(filePath, startLine, endLine) {
435
+ const row = this.db
436
+ .prepare("SELECT path, baseName, extension, language, mimeType, sizeBytes, parseStatus, isBinary, content FROM files WHERE path = ?")
437
+ .get(filePath);
438
+ if (!row)
439
+ return null;
440
+ const isBinary = row.isBinary === 1;
441
+ let content = row.content;
442
+ if (content && (startLine !== undefined || endLine !== undefined)) {
443
+ const lines = content.split("\n");
444
+ const start = Math.max(1, startLine ?? 1);
445
+ const end = Math.min(lines.length, endLine ?? lines.length);
446
+ content = lines.slice(start - 1, end).join("\n");
447
+ }
448
+ return {
449
+ path: row.path,
450
+ name: row.baseName,
451
+ type: "file",
452
+ extension: row.extension,
453
+ language: row.language,
454
+ kind: isBinary ? "binary" : "text",
455
+ mimeType: row.mimeType,
456
+ status: resolveContentStatus(isBinary, row.parseStatus, row.content),
457
+ content,
458
+ sizeBytes: row.sizeBytes,
459
+ reason: content ? null : row.parseStatus,
460
+ };
461
+ }
462
+ getFileParse(filePath) {
463
+ const fileRow = this.db
464
+ .prepare("SELECT path, language, lineCount, parseStatus, sizeBytes, mimeType, extension FROM files WHERE path = ?")
465
+ .get(filePath);
466
+ if (!fileRow)
467
+ return null;
468
+ const importRows = this.db
469
+ .prepare("SELECT localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol FROM imports WHERE filePath = ? ORDER BY line")
470
+ .all(filePath);
471
+ const importedByRows = this.db
472
+ .prepare("SELECT sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol FROM imported_by WHERE targetFilePath = ? ORDER BY startLine")
473
+ .all(filePath);
474
+ const symbolRows = this.db
475
+ .prepare("SELECT localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol FROM symbols WHERE filePath = ? ORDER BY line")
476
+ .all(filePath);
477
+ const symbolByLocalKey = new Map(symbolRows.map((s) => [s.localKey, s]));
478
+ const exportRows = this.db
479
+ .prepare("SELECT exportName, exportKind, symbolLocalKey, line, col, endLine, endCol FROM exports WHERE filePath = ? ORDER BY line")
480
+ .all(filePath);
481
+ // Blast radius: batch-query incoming/outgoing counts for all source files
482
+ const sourceFiles = [...new Set(importedByRows.map((r) => r.sourceFilePath))];
483
+ const blastRadiusRows = sourceFiles.length > 0
484
+ ? this.db
485
+ .prepare(`SELECT
486
+ ib.sourceFilePath,
487
+ f.language,
488
+ (SELECT COUNT(*) FROM imported_by WHERE targetFilePath = ib.sourceFilePath) as incomingCount,
489
+ (SELECT COUNT(*) FROM imports WHERE filePath = ib.sourceFilePath) as outgoingCount
490
+ FROM imported_by ib
491
+ LEFT JOIN files f ON f.path = ib.sourceFilePath
492
+ WHERE ib.targetFilePath = ?
493
+ GROUP BY ib.sourceFilePath`)
494
+ .all(filePath)
495
+ : [];
496
+ return {
497
+ file: {
498
+ fileId: stableId(filePath),
499
+ path: fileRow.path,
500
+ language: fileRow.language,
501
+ lineCount: fileRow.lineCount,
502
+ parseStatus: fileRow.parseStatus,
503
+ sizeBytes: fileRow.sizeBytes,
504
+ mimeType: fileRow.mimeType,
505
+ extension: fileRow.extension,
506
+ importParseStatus: "completed",
507
+ },
508
+ imports: importRows.map((imp) => ({
509
+ id: stableId(filePath, "import", imp.localKey),
510
+ moduleSpecifier: imp.moduleSpecifier,
511
+ importKind: imp.importKind,
512
+ isResolved: Boolean(imp.targetPathText),
513
+ resolutionKind: imp.resolutionKind,
514
+ targetPathText: imp.targetPathText,
515
+ targetExternalSymbolKey: imp.targetExternalSymbolKey,
516
+ startLine: imp.line,
517
+ startCol: imp.col,
518
+ endLine: imp.endLine,
519
+ endCol: imp.endCol,
520
+ })),
521
+ importedBy: importedByRows.map((ib) => ({
522
+ sourceFilePath: ib.sourceFilePath,
523
+ moduleSpecifier: ib.moduleSpecifier,
524
+ importKind: ib.importKind,
525
+ resolutionKind: ib.resolutionKind,
526
+ startLine: ib.startLine,
527
+ startCol: ib.startCol,
528
+ endLine: ib.endLine,
529
+ endCol: ib.endCol,
530
+ })),
531
+ exports: exportRows.map((exp) => {
532
+ const sym = exp.symbolLocalKey ? (symbolByLocalKey.get(exp.symbolLocalKey) ?? null) : null;
533
+ return {
534
+ id: stableId(filePath, "export", exp.exportName, exp.line, exp.col),
535
+ symbolId: sym ? stableId(filePath, sym.stableKey) : null,
536
+ exportName: exp.exportName,
537
+ exportKind: exp.exportKind,
538
+ symbolDisplayName: sym?.displayName ?? null,
539
+ sourceModuleSpecifier: null,
540
+ symbolStartLine: sym?.line ?? null,
541
+ symbolStartCol: sym?.col ?? null,
542
+ symbolEndLine: sym?.endLine ?? null,
543
+ symbolEndCol: sym?.endCol ?? null,
544
+ startLine: exp.line,
545
+ startCol: exp.col,
546
+ endLine: exp.endLine,
547
+ endCol: exp.endCol,
548
+ };
549
+ }),
550
+ symbols: symbolRows.map((sym) => {
551
+ const parent = sym.parentSymbolLocalKey
552
+ ? (symbolByLocalKey.get(sym.parentSymbolLocalKey) ?? null)
553
+ : null;
554
+ return {
555
+ id: stableId(filePath, sym.stableKey),
556
+ displayName: sym.displayName,
557
+ kind: sym.kind,
558
+ signature: sym.signature,
559
+ returnType: sym.returnType,
560
+ doc: sym.doc,
561
+ heritage: [],
562
+ isExported: sym.isExported === 1,
563
+ parentSymbolName: parent?.displayName ?? null,
564
+ startLine: sym.line,
565
+ startCol: sym.col,
566
+ endLine: sym.endLine,
567
+ endCol: sym.endCol,
568
+ };
569
+ }),
570
+ blastRadius: {
571
+ totalCount: importedByRows.length,
572
+ directCount: importedByRows.length,
573
+ maxDepth: importedByRows.length > 0 ? 1 : 0,
574
+ hasCycles: false,
575
+ files: blastRadiusRows.map((r) => ({
576
+ path: r.sourceFilePath,
577
+ language: r.language,
578
+ depth: 1,
579
+ incomingCount: r.incomingCount,
580
+ outgoingCount: r.outgoingCount,
581
+ })),
582
+ },
583
+ cycles: [],
584
+ };
585
+ }
586
+ hasCycle(filePath) {
587
+ try {
588
+ const result = this.db
589
+ .prepare(`WITH RECURSIVE reachable(p) AS (
590
+ SELECT targetPathText FROM imports
591
+ WHERE filePath = ? AND targetPathText IS NOT NULL AND targetPathText != ?
592
+ UNION
593
+ SELECT i.targetPathText FROM imports i
594
+ INNER JOIN reachable r ON i.filePath = r.p
595
+ WHERE i.targetPathText IS NOT NULL
596
+ )
597
+ SELECT 1 FROM reachable WHERE p = ? LIMIT 1`)
598
+ .get(filePath, filePath, filePath);
599
+ return result != null;
600
+ }
601
+ catch {
602
+ return false;
603
+ }
604
+ }
605
+ close() {
606
+ this.db.close();
607
+ }
608
+ }
609
+ //# sourceMappingURL=sqlite-index-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-index-store.js","sourceRoot":"","sources":["../../src/lib/sqlite-index-store.ts"],"names":[],"mappings":"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"}