@jafreck/lore 0.2.0 → 0.2.2
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/README.md +399 -199
- package/dist/cli.js +139 -18
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/indexer/db.d.ts +12 -11
- package/dist/indexer/db.d.ts.map +1 -1
- package/dist/indexer/db.js +118 -18
- package/dist/indexer/db.js.map +1 -1
- package/dist/indexer/docs.d.ts +42 -0
- package/dist/indexer/docs.d.ts.map +1 -0
- package/dist/indexer/docs.js +214 -0
- package/dist/indexer/docs.js.map +1 -0
- package/dist/indexer/embedder.d.ts +7 -0
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +10 -0
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/ensure-python-deps.d.ts +1 -1
- package/dist/indexer/ensure-python-deps.js +1 -1
- package/dist/indexer/extractors/types.d.ts +22 -0
- package/dist/indexer/extractors/types.d.ts.map +1 -1
- package/dist/indexer/extractors/types.js +12 -0
- package/dist/indexer/extractors/types.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +38 -8
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/git-history.d.ts.map +1 -1
- package/dist/indexer/git-history.js +4 -4
- package/dist/indexer/git-history.js.map +1 -1
- package/dist/indexer/git-hooks.d.ts +1 -0
- package/dist/indexer/git-hooks.d.ts.map +1 -1
- package/dist/indexer/git-hooks.js +3 -2
- package/dist/indexer/git-hooks.js.map +1 -1
- package/dist/indexer/index.d.ts +35 -9
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +470 -30
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts +61 -0
- package/dist/indexer/lsp/client.d.ts.map +1 -0
- package/dist/indexer/lsp/client.js +217 -0
- package/dist/indexer/lsp/client.js.map +1 -0
- package/dist/indexer/lsp/config.d.ts +16 -0
- package/dist/indexer/lsp/config.d.ts.map +1 -0
- package/dist/indexer/lsp/config.js +78 -0
- package/dist/indexer/lsp/config.js.map +1 -0
- package/dist/indexer/lsp/enrichment.d.ts +55 -0
- package/dist/indexer/lsp/enrichment.d.ts.map +1 -0
- package/dist/indexer/lsp/enrichment.js +211 -0
- package/dist/indexer/lsp/enrichment.js.map +1 -0
- package/dist/indexer/lsp/registry.d.ts +19 -0
- package/dist/indexer/lsp/registry.d.ts.map +1 -0
- package/dist/indexer/lsp/registry.js +118 -0
- package/dist/indexer/lsp/registry.js.map +1 -0
- package/dist/indexer/parser.d.ts +7 -0
- package/dist/indexer/parser.d.ts.map +1 -1
- package/dist/indexer/parser.js +3 -1
- package/dist/indexer/parser.js.map +1 -1
- package/dist/indexer/poller.d.ts +8 -1
- package/dist/indexer/poller.d.ts.map +1 -1
- package/dist/indexer/poller.js +7 -1
- package/dist/indexer/poller.js.map +1 -1
- package/dist/indexer/walker.d.ts +22 -0
- package/dist/indexer/walker.d.ts.map +1 -1
- package/dist/indexer/walker.js +15 -0
- package/dist/indexer/walker.js.map +1 -1
- package/dist/indexer/watcher.d.ts +8 -1
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +7 -1
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/{kb-server → lore-server}/db.d.ts +158 -4
- package/dist/lore-server/db.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/db.js +457 -26
- package/dist/lore-server/db.js.map +1 -0
- package/dist/lore-server/server.d.ts +43 -0
- package/dist/lore-server/server.d.ts.map +1 -0
- package/dist/lore-server/server.js +385 -0
- package/dist/lore-server/server.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/annotations.d.ts +2 -2
- package/dist/lore-server/tools/annotations.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/annotations.js +2 -2
- package/dist/lore-server/tools/annotations.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/architecture.d.ts +9 -2
- package/dist/lore-server/tools/architecture.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/architecture.js +37 -2
- package/dist/lore-server/tools/architecture.js.map +1 -0
- package/dist/lore-server/tools/blame.d.ts +159 -0
- package/dist/lore-server/tools/blame.d.ts.map +1 -0
- package/dist/lore-server/tools/blame.js +595 -0
- package/dist/lore-server/tools/blame.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/coverage.d.ts +2 -2
- package/dist/lore-server/tools/coverage.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/coverage.js +2 -2
- package/dist/lore-server/tools/coverage.js.map +1 -0
- package/dist/lore-server/tools/docs.d.ts +86 -0
- package/dist/lore-server/tools/docs.d.ts.map +1 -0
- package/dist/lore-server/tools/docs.js +243 -0
- package/dist/lore-server/tools/docs.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/graph.d.ts +40 -3
- package/dist/lore-server/tools/graph.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/graph.js +122 -11
- package/dist/lore-server/tools/graph.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/history.d.ts +13 -6
- package/dist/lore-server/tools/history.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/history.js +43 -10
- package/dist/lore-server/tools/history.js.map +1 -0
- package/dist/lore-server/tools/lookup.d.ts +75 -0
- package/dist/lore-server/tools/lookup.d.ts.map +1 -0
- package/dist/lore-server/tools/lookup.js +148 -0
- package/dist/lore-server/tools/lookup.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/metrics.d.ts +3 -3
- package/dist/lore-server/tools/metrics.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/metrics.js +3 -3
- package/dist/lore-server/tools/metrics.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/notes.d.ts +16 -16
- package/dist/lore-server/tools/notes.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/notes.js +55 -20
- package/dist/lore-server/tools/notes.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/routes.d.ts +2 -2
- package/dist/lore-server/tools/routes.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/routes.js +2 -2
- package/dist/lore-server/tools/routes.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/search.d.ts +57 -13
- package/dist/lore-server/tools/search.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/search.js +123 -23
- package/dist/lore-server/tools/search.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/snippet.d.ts +20 -4
- package/dist/lore-server/tools/snippet.d.ts.map +1 -0
- package/dist/lore-server/tools/snippet.js +116 -0
- package/dist/lore-server/tools/snippet.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/test-map.d.ts +2 -2
- package/dist/lore-server/tools/test-map.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/test-map.js +2 -2
- package/dist/lore-server/tools/test-map.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/writeback.d.ts +2 -2
- package/dist/lore-server/tools/writeback.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/writeback.js +3 -3
- package/dist/lore-server/tools/writeback.js.map +1 -0
- package/package.json +14 -14
- package/dist/kb-server/db.d.ts.map +0 -1
- package/dist/kb-server/db.js.map +0 -1
- package/dist/kb-server/server.d.ts +0 -42
- package/dist/kb-server/server.d.ts.map +0 -1
- package/dist/kb-server/server.js +0 -241
- package/dist/kb-server/server.js.map +0 -1
- package/dist/kb-server/tools/annotations.d.ts.map +0 -1
- package/dist/kb-server/tools/annotations.js.map +0 -1
- package/dist/kb-server/tools/architecture.d.ts.map +0 -1
- package/dist/kb-server/tools/architecture.js.map +0 -1
- package/dist/kb-server/tools/blame.d.ts +0 -67
- package/dist/kb-server/tools/blame.d.ts.map +0 -1
- package/dist/kb-server/tools/blame.js +0 -162
- package/dist/kb-server/tools/blame.js.map +0 -1
- package/dist/kb-server/tools/coverage.d.ts.map +0 -1
- package/dist/kb-server/tools/coverage.js.map +0 -1
- package/dist/kb-server/tools/graph.d.ts.map +0 -1
- package/dist/kb-server/tools/graph.js.map +0 -1
- package/dist/kb-server/tools/history.d.ts.map +0 -1
- package/dist/kb-server/tools/history.js.map +0 -1
- package/dist/kb-server/tools/lookup.d.ts +0 -36
- package/dist/kb-server/tools/lookup.d.ts.map +0 -1
- package/dist/kb-server/tools/lookup.js +0 -45
- package/dist/kb-server/tools/lookup.js.map +0 -1
- package/dist/kb-server/tools/metrics.d.ts.map +0 -1
- package/dist/kb-server/tools/metrics.js.map +0 -1
- package/dist/kb-server/tools/notes.d.ts.map +0 -1
- package/dist/kb-server/tools/notes.js.map +0 -1
- package/dist/kb-server/tools/routes.d.ts.map +0 -1
- package/dist/kb-server/tools/routes.js.map +0 -1
- package/dist/kb-server/tools/search.d.ts.map +0 -1
- package/dist/kb-server/tools/search.js.map +0 -1
- package/dist/kb-server/tools/snippet.d.ts.map +0 -1
- package/dist/kb-server/tools/snippet.js +0 -49
- package/dist/kb-server/tools/snippet.js.map +0 -1
- package/dist/kb-server/tools/test-map.d.ts.map +0 -1
- package/dist/kb-server/tools/test-map.js.map +0 -1
- package/dist/kb-server/tools/writeback.d.ts.map +0 -1
- package/dist/kb-server/tools/writeback.js.map +0 -1
package/dist/indexer/db.js
CHANGED
|
@@ -19,6 +19,7 @@ CREATE TABLE IF NOT EXISTS files (
|
|
|
19
19
|
language TEXT NOT NULL,
|
|
20
20
|
size_bytes INTEGER NOT NULL DEFAULT 0,
|
|
21
21
|
last_hash TEXT,
|
|
22
|
+
source TEXT NOT NULL DEFAULT '',
|
|
22
23
|
indexed_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
23
24
|
UNIQUE(path, branch)
|
|
24
25
|
);
|
|
@@ -32,7 +33,11 @@ CREATE TABLE IF NOT EXISTS symbols (
|
|
|
32
33
|
start_line INTEGER NOT NULL,
|
|
33
34
|
end_line INTEGER NOT NULL,
|
|
34
35
|
signature TEXT,
|
|
35
|
-
doc_comment TEXT
|
|
36
|
+
doc_comment TEXT,
|
|
37
|
+
resolved_type_signature TEXT,
|
|
38
|
+
resolved_return_type TEXT,
|
|
39
|
+
definition_uri TEXT,
|
|
40
|
+
definition_path TEXT
|
|
36
41
|
);
|
|
37
42
|
|
|
38
43
|
-- File-linked annotations extracted from comments (e.g. TODO/FIXME/NOTE).
|
|
@@ -69,7 +74,11 @@ CREATE TABLE IF NOT EXISTS symbol_refs (
|
|
|
69
74
|
caller_id INTEGER NOT NULL REFERENCES symbols(id) ON DELETE CASCADE,
|
|
70
75
|
callee_id INTEGER REFERENCES symbols(id),
|
|
71
76
|
callee_name TEXT NOT NULL,
|
|
72
|
-
call_line INTEGER NOT NULL
|
|
77
|
+
call_line INTEGER NOT NULL,
|
|
78
|
+
resolved_type_signature TEXT,
|
|
79
|
+
resolved_return_type TEXT,
|
|
80
|
+
definition_uri TEXT,
|
|
81
|
+
definition_path TEXT
|
|
73
82
|
);
|
|
74
83
|
|
|
75
84
|
-- External (third-party / stdlib) dependencies inferred from imports.
|
|
@@ -81,6 +90,25 @@ CREATE TABLE IF NOT EXISTS external_deps (
|
|
|
81
90
|
UNIQUE(file_id, package)
|
|
82
91
|
);
|
|
83
92
|
|
|
93
|
+
-- Symbols extracted from direct dependency declarations and public API surfaces.
|
|
94
|
+
CREATE TABLE IF NOT EXISTS external_symbols (
|
|
95
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
96
|
+
dependency_ecosystem TEXT NOT NULL DEFAULT 'npm',
|
|
97
|
+
source_type TEXT NOT NULL DEFAULT 'declaration',
|
|
98
|
+
source_ref TEXT NOT NULL DEFAULT '',
|
|
99
|
+
package_name TEXT NOT NULL,
|
|
100
|
+
package_version TEXT,
|
|
101
|
+
symbol_name TEXT NOT NULL,
|
|
102
|
+
symbol_kind TEXT NOT NULL,
|
|
103
|
+
signature TEXT NOT NULL DEFAULT '',
|
|
104
|
+
doc_comment TEXT,
|
|
105
|
+
resolved_type_signature TEXT,
|
|
106
|
+
resolved_return_type TEXT,
|
|
107
|
+
definition_uri TEXT,
|
|
108
|
+
definition_path TEXT,
|
|
109
|
+
UNIQUE(dependency_ecosystem, package_name, package_version, symbol_name, symbol_kind, signature)
|
|
110
|
+
);
|
|
111
|
+
|
|
84
112
|
-- Logical modules grouping related files (e.g. Rust crates, Python packages).
|
|
85
113
|
CREATE TABLE IF NOT EXISTS modules (
|
|
86
114
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -115,7 +143,7 @@ CREATE TABLE IF NOT EXISTS symbol_metrics (
|
|
|
115
143
|
CREATE INDEX IF NOT EXISTS idx_symbol_metrics_cyclomatic ON symbol_metrics(cyclomatic);
|
|
116
144
|
|
|
117
145
|
-- Key-value store for knowledge-base metadata (schema version, embedding model, etc.).
|
|
118
|
-
CREATE TABLE IF NOT EXISTS
|
|
146
|
+
CREATE TABLE IF NOT EXISTS lore_meta (
|
|
119
147
|
key TEXT PRIMARY KEY,
|
|
120
148
|
value TEXT NOT NULL
|
|
121
149
|
);
|
|
@@ -133,6 +161,34 @@ CREATE TABLE IF NOT EXISTS notes (
|
|
|
133
161
|
UNIQUE(key, scope)
|
|
134
162
|
);
|
|
135
163
|
|
|
164
|
+
-- Indexed documentation files.
|
|
165
|
+
CREATE TABLE IF NOT EXISTS docs (
|
|
166
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
167
|
+
path TEXT NOT NULL,
|
|
168
|
+
branch TEXT NOT NULL DEFAULT '',
|
|
169
|
+
kind TEXT NOT NULL,
|
|
170
|
+
title TEXT NOT NULL,
|
|
171
|
+
content TEXT NOT NULL,
|
|
172
|
+
content_hash TEXT NOT NULL,
|
|
173
|
+
indexed_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
174
|
+
UNIQUE(path, branch)
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
-- Heading-based documentation chunks.
|
|
178
|
+
CREATE TABLE IF NOT EXISTS doc_sections (
|
|
179
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
180
|
+
doc_id INTEGER NOT NULL REFERENCES docs(id) ON DELETE CASCADE,
|
|
181
|
+
section_index INTEGER NOT NULL,
|
|
182
|
+
title TEXT NOT NULL,
|
|
183
|
+
depth INTEGER NOT NULL,
|
|
184
|
+
heading_path TEXT NOT NULL,
|
|
185
|
+
line_start INTEGER NOT NULL,
|
|
186
|
+
line_end INTEGER NOT NULL,
|
|
187
|
+
content TEXT NOT NULL,
|
|
188
|
+
content_hash TEXT NOT NULL,
|
|
189
|
+
UNIQUE(doc_id, section_index)
|
|
190
|
+
);
|
|
191
|
+
|
|
136
192
|
-- Full-text search index over symbol names, signatures, and kinds (BM25 via FTS5).
|
|
137
193
|
CREATE VIRTUAL TABLE IF NOT EXISTS symbols_fts USING fts5(
|
|
138
194
|
name, signature, kind
|
|
@@ -214,7 +270,32 @@ CREATE INDEX IF NOT EXISTS idx_annotations_file_id ON annotations(file_id);
|
|
|
214
270
|
CREATE INDEX IF NOT EXISTS idx_coverage_runs_ingested_at ON coverage_runs(ingested_at);
|
|
215
271
|
CREATE INDEX IF NOT EXISTS idx_coverage_files_path ON coverage_files(file_path);
|
|
216
272
|
CREATE INDEX IF NOT EXISTS idx_coverage_lines_path_line ON coverage_lines(file_path, line_number);
|
|
273
|
+
CREATE INDEX IF NOT EXISTS idx_docs_branch_kind ON docs(branch, kind);
|
|
274
|
+
CREATE INDEX IF NOT EXISTS idx_doc_sections_doc_id ON doc_sections(doc_id);
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_external_symbols_dependency_ecosystem ON external_symbols(dependency_ecosystem);
|
|
276
|
+
CREATE INDEX IF NOT EXISTS idx_external_symbols_package_name ON external_symbols(package_name);
|
|
277
|
+
CREATE INDEX IF NOT EXISTS idx_external_symbols_symbol_name ON external_symbols(symbol_name);
|
|
217
278
|
`;
|
|
279
|
+
const ENRICHMENT_SCHEMA_MIGRATIONS = [
|
|
280
|
+
{ table: 'files', column: 'source', sql: "ALTER TABLE files ADD COLUMN source TEXT NOT NULL DEFAULT ''" },
|
|
281
|
+
{ table: 'symbols', column: 'resolved_type_signature', sql: 'ALTER TABLE symbols ADD COLUMN resolved_type_signature TEXT' },
|
|
282
|
+
{ table: 'symbols', column: 'resolved_return_type', sql: 'ALTER TABLE symbols ADD COLUMN resolved_return_type TEXT' },
|
|
283
|
+
{ table: 'symbols', column: 'definition_uri', sql: 'ALTER TABLE symbols ADD COLUMN definition_uri TEXT' },
|
|
284
|
+
{ table: 'symbols', column: 'definition_path', sql: 'ALTER TABLE symbols ADD COLUMN definition_path TEXT' },
|
|
285
|
+
{ table: 'symbol_refs', column: 'resolved_type_signature', sql: 'ALTER TABLE symbol_refs ADD COLUMN resolved_type_signature TEXT' },
|
|
286
|
+
{ table: 'symbol_refs', column: 'resolved_return_type', sql: 'ALTER TABLE symbol_refs ADD COLUMN resolved_return_type TEXT' },
|
|
287
|
+
{ table: 'symbol_refs', column: 'definition_uri', sql: 'ALTER TABLE symbol_refs ADD COLUMN definition_uri TEXT' },
|
|
288
|
+
{ table: 'symbol_refs', column: 'definition_path', sql: 'ALTER TABLE symbol_refs ADD COLUMN definition_path TEXT' },
|
|
289
|
+
{ table: 'external_symbols', column: 'resolved_type_signature', sql: 'ALTER TABLE external_symbols ADD COLUMN resolved_type_signature TEXT' },
|
|
290
|
+
{ table: 'external_symbols', column: 'resolved_return_type', sql: 'ALTER TABLE external_symbols ADD COLUMN resolved_return_type TEXT' },
|
|
291
|
+
{ table: 'external_symbols', column: 'definition_uri', sql: 'ALTER TABLE external_symbols ADD COLUMN definition_uri TEXT' },
|
|
292
|
+
{ table: 'external_symbols', column: 'definition_path', sql: 'ALTER TABLE external_symbols ADD COLUMN definition_path TEXT' },
|
|
293
|
+
];
|
|
294
|
+
const ENRICHMENT_INDEX_MIGRATIONS = [
|
|
295
|
+
'CREATE INDEX IF NOT EXISTS idx_symbols_definition_path ON symbols(definition_path)',
|
|
296
|
+
'CREATE INDEX IF NOT EXISTS idx_symbol_refs_definition_path ON symbol_refs(definition_path)',
|
|
297
|
+
'CREATE INDEX IF NOT EXISTS idx_external_symbols_definition_path ON external_symbols(definition_path)',
|
|
298
|
+
];
|
|
218
299
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
219
300
|
/**
|
|
220
301
|
* Opens (or creates) the SQLite database at `path` and initialises the schema.
|
|
@@ -229,27 +310,43 @@ export function openDb(path) {
|
|
|
229
310
|
db.pragma('foreign_keys = ON');
|
|
230
311
|
// Create all tables in a single transaction.
|
|
231
312
|
db.exec(DDL);
|
|
313
|
+
ensureEnrichmentSchema(db);
|
|
232
314
|
return db;
|
|
233
315
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
316
|
+
function ensureEnrichmentSchema(db) {
|
|
317
|
+
for (const migration of ENRICHMENT_SCHEMA_MIGRATIONS) {
|
|
318
|
+
if (!hasTableColumn(db, migration.table, migration.column)) {
|
|
319
|
+
db.exec(migration.sql);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
for (const indexMigration of ENRICHMENT_INDEX_MIGRATIONS) {
|
|
323
|
+
db.exec(indexMigration);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function hasTableColumn(db, table, column) {
|
|
327
|
+
const rows = db.pragma(`table_info(${table})`);
|
|
328
|
+
return rows.some((row) => row.name === column);
|
|
242
329
|
}
|
|
243
|
-
|
|
244
|
-
export
|
|
245
|
-
|
|
330
|
+
// ─── lore_meta helpers ──────────────────────────────────────────────────────────
|
|
331
|
+
export const LORE_META_INDEX_CHECKPOINT = 'index_checkpoint';
|
|
332
|
+
export const LORE_META_LAST_HEAD_SHA = 'last_known_head_sha';
|
|
333
|
+
export const LORE_META_COVERAGE_LAST_SOURCE_PATH = 'coverage_last_source_path';
|
|
334
|
+
export const LORE_META_COVERAGE_LAST_SOURCE_MTIME = 'coverage_last_source_mtime';
|
|
335
|
+
/** Write (or overwrite) a key-value pair in `lore_meta`. */
|
|
336
|
+
export function setLoreMeta(db, key, value) {
|
|
337
|
+
db.prepare('INSERT OR REPLACE INTO lore_meta (key, value) VALUES (?, ?)').run(key, value);
|
|
338
|
+
}
|
|
339
|
+
/** Read a value from `lore_meta`; returns `undefined` if the key is absent. */
|
|
340
|
+
export function getLoreMeta(db, key) {
|
|
341
|
+
const row = db.prepare('SELECT value FROM lore_meta WHERE key = ?').get(key);
|
|
246
342
|
return row?.value;
|
|
247
343
|
}
|
|
248
344
|
// ─── Vec0 virtual tables ──────────────────────────────────────────────────────
|
|
249
345
|
/**
|
|
250
|
-
* Loads the sqlite-vec extension and creates the `symbol_embeddings
|
|
251
|
-
* `symbol_semantic_embeddings` vec0 virtual tables
|
|
252
|
-
*
|
|
346
|
+
* Loads the sqlite-vec extension and creates the `symbol_embeddings`,
|
|
347
|
+
* `symbol_semantic_embeddings`, and `commit_embeddings` vec0 virtual tables
|
|
348
|
+
* with the given dimension.
|
|
349
|
+
* Also stores `embedding_dims` in `lore_meta` for validation on reopen.
|
|
253
350
|
*
|
|
254
351
|
* This function is idempotent: it is safe to call multiple times with the
|
|
255
352
|
* same `dims` value.
|
|
@@ -269,7 +366,10 @@ export function createVec0Tables(db, dims) {
|
|
|
269
366
|
CREATE VIRTUAL TABLE IF NOT EXISTS symbol_semantic_embeddings USING vec0(
|
|
270
367
|
embedding FLOAT[${dims}]
|
|
271
368
|
);
|
|
369
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS commit_embeddings USING vec0(
|
|
370
|
+
embedding FLOAT[${dims}]
|
|
371
|
+
);
|
|
272
372
|
`);
|
|
273
|
-
|
|
373
|
+
setLoreMeta(db, 'embedding_dims', String(dims));
|
|
274
374
|
}
|
|
275
375
|
//# sourceMappingURL=db.js.map
|
package/dist/indexer/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/indexer/db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAKlD,gFAAgF;AAEhF,MAAM,GAAG,GAAG
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/indexer/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type DocumentKind = 'readme' | 'adr' | 'architecture' | 'design' | 'guide' | 'changelog' | 'reference' | 'text';
|
|
2
|
+
export interface DocumentSection {
|
|
3
|
+
title: string;
|
|
4
|
+
depth: number;
|
|
5
|
+
headingPath: string[];
|
|
6
|
+
line: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DocumentationFile {
|
|
9
|
+
path: string;
|
|
10
|
+
kind: DocumentKind;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
hash: string;
|
|
14
|
+
sections: DocumentSection[];
|
|
15
|
+
chunks: DocumentChunk[];
|
|
16
|
+
}
|
|
17
|
+
export interface DocumentChunk {
|
|
18
|
+
sectionIndex: number;
|
|
19
|
+
title: string;
|
|
20
|
+
depth: number;
|
|
21
|
+
headingPath: string[];
|
|
22
|
+
lineStart: number;
|
|
23
|
+
lineEnd: number;
|
|
24
|
+
content: string;
|
|
25
|
+
hash: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DocsDiscoveryConfig {
|
|
28
|
+
rootDir: string;
|
|
29
|
+
includeGlobs?: string[];
|
|
30
|
+
excludeGlobs?: string[];
|
|
31
|
+
extensions?: string[];
|
|
32
|
+
}
|
|
33
|
+
export declare const DEFAULT_DOC_EXTENSIONS: string[];
|
|
34
|
+
export declare const DEFAULT_DOC_INCLUDE_GLOBS: string[];
|
|
35
|
+
export declare function discoverDocumentationFiles(config: DocsDiscoveryConfig): Promise<DocumentationFile[]>;
|
|
36
|
+
export declare function inferDocumentKind(filePath: string): DocumentKind;
|
|
37
|
+
export declare function inferDocumentTitle(filePath: string, content: string): string;
|
|
38
|
+
export declare function inferDocumentSections(filePath: string, content: string): DocumentSection[];
|
|
39
|
+
export declare function inferDocumentChunks(filePath: string, content: string, sections: DocumentSection[]): DocumentChunk[];
|
|
40
|
+
export declare function inferSeededDocNoteKey(doc: Pick<DocumentationFile, 'path' | 'kind'>): string | null;
|
|
41
|
+
export declare function buildDocNoteScope(docPath: string, branch: string): string;
|
|
42
|
+
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/indexer/docs.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,KAAK,GACL,cAAc,GACd,QAAQ,GACR,OAAO,GACP,WAAW,GACX,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD,eAAO,MAAM,sBAAsB,UAAmC,CAAC;AAEvE,eAAO,MAAM,yBAAyB,UAOrC,CAAC;AAKF,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA2C1G;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA4BhE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAU5E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAiC1F;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EAAE,GAC1B,aAAa,EAAE,CAwCjB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAkBlG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzE"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import fg from 'fast-glob';
|
|
2
|
+
import { basename, extname } from 'node:path';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
5
|
+
const DEFAULT_EXCLUDES = [
|
|
6
|
+
'**/node_modules/**',
|
|
7
|
+
'**/.git/**',
|
|
8
|
+
'**/dist/**',
|
|
9
|
+
'**/build/**',
|
|
10
|
+
'**/__pycache__/**',
|
|
11
|
+
'**/target/**',
|
|
12
|
+
];
|
|
13
|
+
export const DEFAULT_DOC_EXTENSIONS = ['.md', '.rst', '.adoc', '.txt'];
|
|
14
|
+
export const DEFAULT_DOC_INCLUDE_GLOBS = [
|
|
15
|
+
'**/[Rr][Ee][Aa][Dd][Mm][Ee]{,.*}',
|
|
16
|
+
'**/docs/**/*.{md,rst,adoc,txt}',
|
|
17
|
+
'**/{adr,adrs,ADR,ADRS}/**/*.{md,rst,adoc,txt}',
|
|
18
|
+
'**/{ADR,adr}-*.{md,rst,adoc,txt}',
|
|
19
|
+
'**/[0-9][0-9][0-9][0-9]-*.{md,rst,adoc,txt}',
|
|
20
|
+
'{architecture,ARCHITECTURE,design,DESIGN,overview,OVERVIEW,changelog,CHANGELOG,guide,GUIDE}*.{md,rst,adoc,txt}',
|
|
21
|
+
];
|
|
22
|
+
const MARKDOWN_HEADING_RE = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
|
|
23
|
+
const SEEDABLE_DOC_KINDS = new Set(['readme', 'architecture', 'adr']);
|
|
24
|
+
export async function discoverDocumentationFiles(config) {
|
|
25
|
+
const includePatterns = config.includeGlobs && config.includeGlobs.length > 0
|
|
26
|
+
? config.includeGlobs
|
|
27
|
+
: DEFAULT_DOC_INCLUDE_GLOBS;
|
|
28
|
+
const ignorePatterns = [...DEFAULT_EXCLUDES, ...(config.excludeGlobs ?? [])];
|
|
29
|
+
const configuredExtensions = config.extensions && config.extensions.length > 0
|
|
30
|
+
? config.extensions
|
|
31
|
+
: DEFAULT_DOC_EXTENSIONS;
|
|
32
|
+
const allowedExtensions = new Set(configuredExtensions.map(ext => ext.toLowerCase()));
|
|
33
|
+
const candidatePaths = await fg(includePatterns, {
|
|
34
|
+
cwd: config.rootDir,
|
|
35
|
+
absolute: true,
|
|
36
|
+
onlyFiles: true,
|
|
37
|
+
ignore: ignorePatterns,
|
|
38
|
+
dot: false,
|
|
39
|
+
caseSensitiveMatch: false,
|
|
40
|
+
});
|
|
41
|
+
const uniqueSortedPaths = [...new Set(candidatePaths)].sort((a, b) => a.localeCompare(b));
|
|
42
|
+
const docs = [];
|
|
43
|
+
for (const filePath of uniqueSortedPaths) {
|
|
44
|
+
const ext = extname(filePath).toLowerCase();
|
|
45
|
+
if (!allowedExtensions.has(ext) && !isReadmeVariant(filePath)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const content = readFileSync(filePath, 'utf8');
|
|
49
|
+
const sections = inferDocumentSections(filePath, content);
|
|
50
|
+
const chunks = inferDocumentChunks(filePath, content, sections);
|
|
51
|
+
docs.push({
|
|
52
|
+
path: filePath,
|
|
53
|
+
kind: inferDocumentKind(filePath),
|
|
54
|
+
title: inferDocumentTitle(filePath, content),
|
|
55
|
+
content,
|
|
56
|
+
hash: createHash('sha256').update(content).digest('hex'),
|
|
57
|
+
sections,
|
|
58
|
+
chunks,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return docs;
|
|
62
|
+
}
|
|
63
|
+
export function inferDocumentKind(filePath) {
|
|
64
|
+
const normalizedPath = filePath.replace(/\\/g, '/').toLowerCase();
|
|
65
|
+
const filename = basename(normalizedPath, extname(normalizedPath));
|
|
66
|
+
if (filename.startsWith('readme'))
|
|
67
|
+
return 'readme';
|
|
68
|
+
if (normalizedPath.includes('/adr/') ||
|
|
69
|
+
normalizedPath.includes('/adrs/') ||
|
|
70
|
+
filename.startsWith('adr') ||
|
|
71
|
+
/\/\d{4}-/.test(normalizedPath)) {
|
|
72
|
+
return 'adr';
|
|
73
|
+
}
|
|
74
|
+
if (filename.includes('changelog'))
|
|
75
|
+
return 'changelog';
|
|
76
|
+
if (filename.includes('architecture') || filename === 'arch')
|
|
77
|
+
return 'architecture';
|
|
78
|
+
if (filename.includes('design') || filename.includes('overview'))
|
|
79
|
+
return 'design';
|
|
80
|
+
if (filename.includes('guide') ||
|
|
81
|
+
filename.includes('tutorial') ||
|
|
82
|
+
filename.includes('how-to') ||
|
|
83
|
+
filename.includes('howto') ||
|
|
84
|
+
filename.includes('contributing') ||
|
|
85
|
+
normalizedPath.includes('/docs/')) {
|
|
86
|
+
return 'guide';
|
|
87
|
+
}
|
|
88
|
+
if (extname(normalizedPath) === '.txt')
|
|
89
|
+
return 'text';
|
|
90
|
+
return 'reference';
|
|
91
|
+
}
|
|
92
|
+
export function inferDocumentTitle(filePath, content) {
|
|
93
|
+
const markdownHeading = extractFirstMarkdownHeading(content);
|
|
94
|
+
if (markdownHeading)
|
|
95
|
+
return markdownHeading;
|
|
96
|
+
const filename = basename(filePath, extname(filePath));
|
|
97
|
+
return filename
|
|
98
|
+
.replace(/[_-]+/g, ' ')
|
|
99
|
+
.replace(/\s+/g, ' ')
|
|
100
|
+
.trim()
|
|
101
|
+
.replace(/\b\w/g, char => char.toUpperCase());
|
|
102
|
+
}
|
|
103
|
+
export function inferDocumentSections(filePath, content) {
|
|
104
|
+
const ext = extname(filePath).toLowerCase();
|
|
105
|
+
if (ext !== '.md')
|
|
106
|
+
return [];
|
|
107
|
+
const sections = [];
|
|
108
|
+
const headingStack = [];
|
|
109
|
+
const lines = content.split(/\r?\n/);
|
|
110
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
111
|
+
const line = lines[index];
|
|
112
|
+
if (!line)
|
|
113
|
+
continue;
|
|
114
|
+
const headingMatch = line.match(MARKDOWN_HEADING_RE);
|
|
115
|
+
if (!headingMatch)
|
|
116
|
+
continue;
|
|
117
|
+
const marker = headingMatch[1];
|
|
118
|
+
const rawTitle = headingMatch[2];
|
|
119
|
+
if (!marker || !rawTitle)
|
|
120
|
+
continue;
|
|
121
|
+
const depth = marker.length;
|
|
122
|
+
const title = rawTitle.trim();
|
|
123
|
+
headingStack[depth - 1] = title;
|
|
124
|
+
headingStack.length = depth;
|
|
125
|
+
sections.push({
|
|
126
|
+
title,
|
|
127
|
+
depth,
|
|
128
|
+
headingPath: headingStack.slice(),
|
|
129
|
+
line: index + 1,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return sections;
|
|
133
|
+
}
|
|
134
|
+
export function inferDocumentChunks(filePath, content, sections) {
|
|
135
|
+
const lines = content.split(/\r?\n/);
|
|
136
|
+
const ext = extname(filePath).toLowerCase();
|
|
137
|
+
if (ext !== '.md' || sections.length === 0) {
|
|
138
|
+
return [{
|
|
139
|
+
sectionIndex: 0,
|
|
140
|
+
title: inferDocumentTitle(filePath, content),
|
|
141
|
+
depth: 0,
|
|
142
|
+
headingPath: [],
|
|
143
|
+
lineStart: 1,
|
|
144
|
+
lineEnd: Math.max(1, lines.length),
|
|
145
|
+
content,
|
|
146
|
+
hash: createHash('sha256').update(content).digest('hex'),
|
|
147
|
+
}];
|
|
148
|
+
}
|
|
149
|
+
const chunks = [];
|
|
150
|
+
for (let index = 0; index < sections.length; index += 1) {
|
|
151
|
+
const section = sections[index];
|
|
152
|
+
const nextSection = sections[index + 1];
|
|
153
|
+
if (!section)
|
|
154
|
+
continue;
|
|
155
|
+
const lineStart = section.line;
|
|
156
|
+
const lineEnd = nextSection ? nextSection.line - 1 : lines.length;
|
|
157
|
+
const chunkContent = lines.slice(Math.max(0, lineStart - 1), Math.max(lineStart - 1, lineEnd)).join('\n');
|
|
158
|
+
chunks.push({
|
|
159
|
+
sectionIndex: index,
|
|
160
|
+
title: section.title,
|
|
161
|
+
depth: section.depth,
|
|
162
|
+
headingPath: section.headingPath,
|
|
163
|
+
lineStart,
|
|
164
|
+
lineEnd,
|
|
165
|
+
content: chunkContent,
|
|
166
|
+
hash: createHash('sha256').update(chunkContent).digest('hex'),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return chunks;
|
|
170
|
+
}
|
|
171
|
+
export function inferSeededDocNoteKey(doc) {
|
|
172
|
+
if (!SEEDABLE_DOC_KINDS.has(doc.kind)) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
if (doc.kind === 'readme') {
|
|
176
|
+
return 'docs/readme';
|
|
177
|
+
}
|
|
178
|
+
const stem = basename(doc.path, extname(doc.path));
|
|
179
|
+
const slug = toSlug(stem) || 'doc';
|
|
180
|
+
if (doc.kind === 'architecture') {
|
|
181
|
+
return slug === 'architecture' || slug === 'arch'
|
|
182
|
+
? 'docs/architecture'
|
|
183
|
+
: `docs/architecture/${slug}`;
|
|
184
|
+
}
|
|
185
|
+
return `docs/adr/${slug}`;
|
|
186
|
+
}
|
|
187
|
+
export function buildDocNoteScope(docPath, branch) {
|
|
188
|
+
return `doc:${docPath}@${branch}`;
|
|
189
|
+
}
|
|
190
|
+
function extractFirstMarkdownHeading(content) {
|
|
191
|
+
const lines = content.split(/\r?\n/);
|
|
192
|
+
for (const line of lines) {
|
|
193
|
+
const headingMatch = line.match(MARKDOWN_HEADING_RE);
|
|
194
|
+
if (headingMatch) {
|
|
195
|
+
const rawTitle = headingMatch[2];
|
|
196
|
+
if (rawTitle) {
|
|
197
|
+
return rawTitle.trim();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
function isReadmeVariant(filePath) {
|
|
204
|
+
const lowerName = basename(filePath).toLowerCase();
|
|
205
|
+
return lowerName === 'readme' || lowerName.startsWith('readme.');
|
|
206
|
+
}
|
|
207
|
+
function toSlug(value) {
|
|
208
|
+
return value
|
|
209
|
+
.trim()
|
|
210
|
+
.toLowerCase()
|
|
211
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
212
|
+
.replace(/^-+|-+$/g, '');
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/indexer/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiDzC,MAAM,gBAAgB,GAAG;IACvB,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,kCAAkC;IAClC,gCAAgC;IAChC,+CAA+C;IAC/C,kCAAkC;IAClC,6CAA6C;IAC7C,gHAAgH;CACjH,CAAC;AAEF,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;AACzD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAA2B;IAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC3E,CAAC,CAAC,MAAM,CAAC,YAAY;QACrB,CAAC,CAAC,yBAAyB,CAAC;IAC9B,MAAM,cAAc,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC5E,CAAC,CAAC,MAAM,CAAC,UAAU;QACnB,CAAC,CAAC,sBAAsB,CAAC;IAC3B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEtF,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,eAAe,EAAE;QAC/C,GAAG,EAAE,MAAM,CAAC,OAAO;QACnB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,cAAc;QACtB,GAAG,EAAE,KAAK;QACV,kBAAkB,EAAE,KAAK;KAC1B,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAwB,EAAE,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC5C,OAAO;YACP,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACxD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAEnE,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,IACE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IACpF,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClF,IACE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACjC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACtD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,OAAe;IAClE,MAAM,eAAe,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,OAAO,QAAQ;SACZ,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,OAAe;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAErC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE9B,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAChC,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;QAE5B,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK;YACL,KAAK;YACL,WAAW,EAAE,YAAY,CAAC,KAAK,EAAE;YACjC,IAAI,EAAE,KAAK,GAAG,CAAC;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,OAAe,EACf,QAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,GAAG,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC;gBACN,YAAY,EAAE,CAAC;gBACf,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAC5C,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;gBAClC,OAAO;gBACP,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACzD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAClE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1G,MAAM,CAAC,IAAI,CAAC;YACV,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS;YACT,OAAO;YACP,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA6C;IACjF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAA4B,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACnC,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAChC,OAAO,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM;YAC/C,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,YAAY,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc;IAC/D,OAAO,OAAO,OAAO,IAAI,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -27,6 +27,13 @@ export interface EmbeddingProvider {
|
|
|
27
27
|
/** Release the underlying process / resources. */
|
|
28
28
|
dispose(): Promise<void>;
|
|
29
29
|
}
|
|
30
|
+
export interface StructuralEmbeddingInput {
|
|
31
|
+
name: string;
|
|
32
|
+
signature: string | null;
|
|
33
|
+
resolvedTypeSignature?: string | null;
|
|
34
|
+
resolvedReturnType?: string | null;
|
|
35
|
+
}
|
|
36
|
+
export declare function buildStructuralEmbeddingText(input: StructuralEmbeddingInput): string;
|
|
30
37
|
/**
|
|
31
38
|
* Communicates with a Python subprocess via stdin/stdout NDJSON to produce
|
|
32
39
|
* embeddings using a sentence-transformers compatible model.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/indexer/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,kDAAkD;IAClD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAoCD;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAuB;IAEpC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,wEAAwE;IACxE,OAAO,CAAC,WAAW,CAAS;gBAEhB,SAAS,EAAE,MAAM,EAAE,SAAS,SAAY;IAKpD,gEAAgE;IAChE,IAAI,IAAI,IAAI,MAAM,CAKjB;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCrB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAW3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,sEAAsE;IACtE,OAAO,CAAC,YAAY;CAuCrB;AAID,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC1B,SAAS,SAAY,GACpB,4BAA4B,CAG9B"}
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/indexer/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,kDAAkD;IAClD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CASpF;AAoCD;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAuB;IAEpC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,wEAAwE;IACxE,OAAO,CAAC,WAAW,CAAS;gBAEhB,SAAS,EAAE,MAAM,EAAE,SAAS,SAAY;IAKpD,gEAAgE;IAChE,IAAI,IAAI,IAAI,MAAM,CAKjB;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCrB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAW3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,sEAAsE;IACtE,OAAO,CAAC,YAAY;CAuCrB;AAID,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC1B,SAAS,SAAY,GACpB,4BAA4B,CAG9B"}
|
package/dist/indexer/embedder.js
CHANGED
|
@@ -11,6 +11,16 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { spawn } from 'node:child_process';
|
|
13
13
|
import * as readline from 'node:readline';
|
|
14
|
+
export function buildStructuralEmbeddingText(input) {
|
|
15
|
+
const parts = [
|
|
16
|
+
input.signature?.trim() ?? '',
|
|
17
|
+
input.resolvedTypeSignature?.trim() ?? '',
|
|
18
|
+
input.resolvedReturnType?.trim() ?? '',
|
|
19
|
+
input.name.trim(),
|
|
20
|
+
].filter((part) => part.length > 0);
|
|
21
|
+
const uniqueParts = [...new Set(parts)];
|
|
22
|
+
return uniqueParts.join('\n');
|
|
23
|
+
}
|
|
14
24
|
// ─── Python bootstrap script ──────────────────────────────────────────────────
|
|
15
25
|
/**
|
|
16
26
|
* Inline Python script that:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/indexer/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/indexer/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* embedding generation (`sentence-transformers`, `torch`). If missing,
|
|
6
6
|
* attempts an automatic `pip install` before the first embedding run.
|
|
7
7
|
*
|
|
8
|
-
* This is only used when `
|
|
8
|
+
* This is only used when `loreIndex.embeddings.enabled` is `true` in the
|
|
9
9
|
* migration config.
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* embedding generation (`sentence-transformers`, `torch`). If missing,
|
|
6
6
|
* attempts an automatic `pip install` before the first embedding run.
|
|
7
7
|
*
|
|
8
|
-
* This is only used when `
|
|
8
|
+
* This is only used when `loreIndex.embeddings.enabled` is `true` in the
|
|
9
9
|
* migration config.
|
|
10
10
|
*/
|
|
11
11
|
import { execFile } from 'node:child_process';
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type Parser from 'tree-sitter';
|
|
8
8
|
/** A symbol (function, class, struct, etc.) extracted from a source file. */
|
|
9
|
+
export interface DeclarationSurface {
|
|
10
|
+
/** True when symbol is externally visible from the module/package boundary. */
|
|
11
|
+
isPublic: boolean;
|
|
12
|
+
/** True when symbol comes from a declaration-only API surface (no implementation body). */
|
|
13
|
+
isDeclaration: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** A symbol (function, class, struct, etc.) extracted from a source file. */
|
|
9
16
|
export interface RawSymbol {
|
|
10
17
|
/** Simple name of the symbol (e.g. `myFunc`, `MyStruct`). */
|
|
11
18
|
name: string;
|
|
@@ -13,12 +20,18 @@ export interface RawSymbol {
|
|
|
13
20
|
kind: string;
|
|
14
21
|
/** 0-indexed start line in the source file. */
|
|
15
22
|
startLine: number;
|
|
23
|
+
/** 0-indexed start character in the source line (best-effort, optional). */
|
|
24
|
+
startCharacter?: number;
|
|
16
25
|
/** 0-indexed end line in the source file. */
|
|
17
26
|
endLine: number;
|
|
18
27
|
/** Textual signature of the symbol (declaration without body). */
|
|
19
28
|
signature: string;
|
|
20
29
|
/** Documentation comment immediately preceding the symbol, if extracted by the language extractor. */
|
|
21
30
|
docComment?: string;
|
|
31
|
+
/** True when declaration is exported from its module. */
|
|
32
|
+
isExported?: boolean;
|
|
33
|
+
/** Normalized declaration-surface metadata for dependency API indexing. */
|
|
34
|
+
declarationSurface?: DeclarationSurface;
|
|
22
35
|
/** Original AST node for the symbol declaration/expression, when available. */
|
|
23
36
|
astNode?: Parser.SyntaxNode;
|
|
24
37
|
}
|
|
@@ -39,6 +52,8 @@ export interface RawCallRef {
|
|
|
39
52
|
calleeRaw: string;
|
|
40
53
|
/** 0-indexed line of the call expression. */
|
|
41
54
|
line: number;
|
|
55
|
+
/** 0-indexed character in the call line (best-effort, optional). */
|
|
56
|
+
character?: number;
|
|
42
57
|
}
|
|
43
58
|
/** An environment-variable reference found in a source file. */
|
|
44
59
|
export interface RawEnvRef {
|
|
@@ -115,4 +130,11 @@ export declare function findFirst(node: Parser.SyntaxNode, type: string): Parser
|
|
|
115
130
|
export declare function nodeSignature(node: Parser.SyntaxNode): string;
|
|
116
131
|
/** Returns an empty `ExtractionResult`. */
|
|
117
132
|
export declare function emptyResult(): ExtractionResult;
|
|
133
|
+
/**
|
|
134
|
+
* Returns true when a symbol belongs to the public declaration API surface.
|
|
135
|
+
*
|
|
136
|
+
* Falls back to `isExported` so existing extractors remain compatible while
|
|
137
|
+
* they migrate to `declarationSurface`.
|
|
138
|
+
*/
|
|
139
|
+
export declare function isPublicDeclarationSurfaceSymbol(symbol: RawSymbol): boolean;
|
|
118
140
|
//# sourceMappingURL=types.d.ts.map
|