@jafreck/lore 0.2.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -23
- package/dist/cli.js +35 -99
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/indexer/call-graph.d.ts +8 -4
- package/dist/indexer/call-graph.d.ts.map +1 -1
- package/dist/indexer/call-graph.js +150 -81
- package/dist/indexer/call-graph.js.map +1 -1
- package/dist/indexer/db.d.ts.map +1 -1
- package/dist/indexer/db.js +29 -3
- package/dist/indexer/db.js.map +1 -1
- package/dist/indexer/extractors/php.js +5 -1
- package/dist/indexer/extractors/php.js.map +1 -1
- package/dist/indexer/index.d.ts +27 -75
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +146 -904
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp/enrichment.d.ts +2 -0
- package/dist/indexer/lsp/enrichment.d.ts.map +1 -1
- package/dist/indexer/lsp/enrichment.js +67 -33
- package/dist/indexer/lsp/enrichment.js.map +1 -1
- package/dist/indexer/pipeline.d.ts +137 -0
- package/dist/indexer/pipeline.d.ts.map +1 -0
- package/dist/indexer/pipeline.js +84 -0
- package/dist/indexer/pipeline.js.map +1 -0
- package/dist/indexer/resolution-method.d.ts +40 -0
- package/dist/indexer/resolution-method.d.ts.map +1 -0
- package/dist/indexer/resolution-method.js +53 -0
- package/dist/indexer/resolution-method.js.map +1 -0
- package/dist/indexer/stages/dependency-api.d.ts +18 -0
- package/dist/indexer/stages/dependency-api.d.ts.map +1 -0
- package/dist/indexer/stages/dependency-api.js +174 -0
- package/dist/indexer/stages/dependency-api.js.map +1 -0
- package/dist/indexer/stages/docs-index.d.ts +20 -0
- package/dist/indexer/stages/docs-index.d.ts.map +1 -0
- package/dist/indexer/stages/docs-index.js +144 -0
- package/dist/indexer/stages/docs-index.js.map +1 -0
- package/dist/indexer/stages/embedding.d.ts +17 -0
- package/dist/indexer/stages/embedding.d.ts.map +1 -0
- package/dist/indexer/stages/embedding.js +217 -0
- package/dist/indexer/stages/embedding.js.map +1 -0
- package/dist/indexer/stages/import-resolution.d.ts +17 -0
- package/dist/indexer/stages/import-resolution.d.ts.map +1 -0
- package/dist/indexer/stages/import-resolution.js +47 -0
- package/dist/indexer/stages/import-resolution.js.map +1 -0
- package/dist/indexer/stages/index.d.ts +12 -0
- package/dist/indexer/stages/index.d.ts.map +1 -0
- package/dist/indexer/stages/index.js +12 -0
- package/dist/indexer/stages/index.js.map +1 -0
- package/dist/indexer/stages/lsp-enrichment.d.ts +48 -0
- package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -0
- package/dist/indexer/stages/lsp-enrichment.js +158 -0
- package/dist/indexer/stages/lsp-enrichment.js.map +1 -0
- package/dist/indexer/stages/source-index.d.ts +31 -0
- package/dist/indexer/stages/source-index.d.ts.map +1 -0
- package/dist/indexer/stages/source-index.js +314 -0
- package/dist/indexer/stages/source-index.js.map +1 -0
- package/dist/lore-server/db.d.ts +51 -4
- package/dist/lore-server/db.d.ts.map +1 -1
- package/dist/lore-server/db.js +74 -69
- package/dist/lore-server/db.js.map +1 -1
- package/dist/lore-server/server.d.ts +5 -0
- package/dist/lore-server/server.d.ts.map +1 -1
- package/dist/lore-server/server.js +51 -233
- package/dist/lore-server/server.js.map +1 -1
- package/dist/lore-server/tool-registry.d.ts +101 -0
- package/dist/lore-server/tool-registry.d.ts.map +1 -0
- package/dist/lore-server/tool-registry.js +227 -0
- package/dist/lore-server/tool-registry.js.map +1 -0
- package/dist/lore-server/tools/graph.d.ts +7 -0
- package/dist/lore-server/tools/graph.d.ts.map +1 -1
- package/dist/lore-server/tools/graph.js +64 -7
- package/dist/lore-server/tools/graph.js.map +1 -1
- package/dist/lore-server/tools/lookup.d.ts +9 -3
- package/dist/lore-server/tools/lookup.d.ts.map +1 -1
- package/dist/lore-server/tools/lookup.js +9 -4
- package/dist/lore-server/tools/lookup.js.map +1 -1
- package/dist/lore-server/tools/search.d.ts +4 -0
- package/dist/lore-server/tools/search.d.ts.map +1 -1
- package/dist/lore-server/tools/search.js +4 -0
- package/dist/lore-server/tools/search.js.map +1 -1
- package/dist/runtime.d.ts +88 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +153 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/embedding
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: embed symbol signatures, documentation sections, and
|
|
5
|
+
* commit messages into vec0 virtual tables for semantic search.
|
|
6
|
+
*/
|
|
7
|
+
import { setLoreMeta, createVec0Tables } from '../db.js';
|
|
8
|
+
import { buildStructuralEmbeddingText } from '../embedder.js';
|
|
9
|
+
/** Number of items to embed per batch. */
|
|
10
|
+
const EMBED_BATCH_SIZE = 64;
|
|
11
|
+
/**
|
|
12
|
+
* Embed symbol signatures, documentation sections, and commit messages.
|
|
13
|
+
*
|
|
14
|
+
* Skips entirely when no `EmbeddingProvider` is configured in the context.
|
|
15
|
+
*/
|
|
16
|
+
export class EmbeddingStage {
|
|
17
|
+
name = 'embedding';
|
|
18
|
+
async execute(context, mode) {
|
|
19
|
+
if (!context.embedder)
|
|
20
|
+
return;
|
|
21
|
+
const { db, embedder } = context;
|
|
22
|
+
context.log.indexing('embedding started', { model: embedder.modelName });
|
|
23
|
+
await embedder.init();
|
|
24
|
+
if (mode === 'update') {
|
|
25
|
+
// Clean up orphaned symbol embeddings for symbols that were deleted/replaced.
|
|
26
|
+
deleteSymbolEmbeddings(db, context.staleSymbolIds);
|
|
27
|
+
// Resolve scoped file/doc IDs for incremental embedding.
|
|
28
|
+
const changedFileIds = resolveFileIds(db, context.changedSourcePaths, context.branch);
|
|
29
|
+
const changedDocIds = resolveDocIds(db, context.changedDocPaths, context.branch);
|
|
30
|
+
await embedStructural(db, embedder, changedFileIds);
|
|
31
|
+
await embedDocumentation(db, embedder, changedDocIds);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await embedStructural(db, embedder);
|
|
35
|
+
await embedDocumentation(db, embedder);
|
|
36
|
+
}
|
|
37
|
+
if (context.history) {
|
|
38
|
+
await embedCommitMessages(db, embedder);
|
|
39
|
+
}
|
|
40
|
+
context.log.indexing('embedding complete');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ─── Structural symbol embeddings ─────────────────────────────────────────────
|
|
44
|
+
async function embedStructural(db, embedder, fileIds) {
|
|
45
|
+
setLoreMeta(db, 'embedding_model', embedder.modelName);
|
|
46
|
+
setLoreMeta(db, 'embedding_dims', String(embedder.dims));
|
|
47
|
+
createVec0Tables(db, embedder.dims);
|
|
48
|
+
const baseQuery = `SELECT id, name, signature, resolved_type_signature, resolved_return_type
|
|
49
|
+
FROM symbols
|
|
50
|
+
WHERE (signature IS NOT NULL
|
|
51
|
+
OR resolved_type_signature IS NOT NULL
|
|
52
|
+
OR resolved_return_type IS NOT NULL)`;
|
|
53
|
+
let symbols;
|
|
54
|
+
if (fileIds && fileIds.length > 0) {
|
|
55
|
+
symbols = db
|
|
56
|
+
.prepare(`${baseQuery} AND file_id IN (${fileIds.map(() => '?').join(', ')})`)
|
|
57
|
+
.all(...fileIds);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
symbols = db.prepare(baseQuery).all();
|
|
61
|
+
}
|
|
62
|
+
const insertEmbed = db.prepare('INSERT OR REPLACE INTO symbol_embeddings(rowid, embedding) VALUES (CAST(? AS INTEGER), json(?))');
|
|
63
|
+
// P4: Pipeline — start embedding the next batch while writing the current one.
|
|
64
|
+
let pendingEmbed = null;
|
|
65
|
+
let pendingBatch = [];
|
|
66
|
+
for (let i = 0; i < symbols.length; i += EMBED_BATCH_SIZE) {
|
|
67
|
+
const batch = symbols.slice(i, i + EMBED_BATCH_SIZE);
|
|
68
|
+
const texts = batch.map((symbol) => buildStructuralEmbeddingText({
|
|
69
|
+
name: symbol.name,
|
|
70
|
+
signature: symbol.signature,
|
|
71
|
+
resolvedTypeSignature: symbol.resolved_type_signature,
|
|
72
|
+
resolvedReturnType: symbol.resolved_return_type,
|
|
73
|
+
}));
|
|
74
|
+
if (pendingEmbed) {
|
|
75
|
+
const embeddings = await pendingEmbed;
|
|
76
|
+
db.transaction(() => {
|
|
77
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
78
|
+
const sym = pendingBatch[j];
|
|
79
|
+
if (sym)
|
|
80
|
+
insertEmbed.run(sym.id, JSON.stringify(embeddings[j]));
|
|
81
|
+
}
|
|
82
|
+
})();
|
|
83
|
+
}
|
|
84
|
+
pendingEmbed = embedder.embed(texts);
|
|
85
|
+
pendingBatch = batch;
|
|
86
|
+
}
|
|
87
|
+
if (pendingEmbed) {
|
|
88
|
+
const embeddings = await pendingEmbed;
|
|
89
|
+
db.transaction(() => {
|
|
90
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
91
|
+
const sym = pendingBatch[j];
|
|
92
|
+
if (sym)
|
|
93
|
+
insertEmbed.run(sym.id, JSON.stringify(embeddings[j]));
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// ─── Documentation section embeddings ─────────────────────────────────────────
|
|
99
|
+
async function embedDocumentation(db, embedder, docIds) {
|
|
100
|
+
db.exec(`
|
|
101
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS doc_section_embeddings USING vec0(
|
|
102
|
+
embedding FLOAT[${embedder.dims}]
|
|
103
|
+
);
|
|
104
|
+
`);
|
|
105
|
+
let sections;
|
|
106
|
+
if (docIds && docIds.length > 0) {
|
|
107
|
+
sections = db.prepare(`SELECT id, title, content
|
|
108
|
+
FROM doc_sections
|
|
109
|
+
WHERE doc_id IN (${docIds.map(() => '?').join(', ')})
|
|
110
|
+
ORDER BY id`).all(...docIds);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
sections = db.prepare(`SELECT id, title, content
|
|
114
|
+
FROM doc_sections
|
|
115
|
+
ORDER BY id`).all();
|
|
116
|
+
}
|
|
117
|
+
if (sections.length === 0)
|
|
118
|
+
return;
|
|
119
|
+
const insertEmbed = db.prepare('INSERT OR REPLACE INTO doc_section_embeddings(rowid, embedding) VALUES (CAST(? AS INTEGER), json(?))');
|
|
120
|
+
// P4: Pipeline — start embedding the next batch while writing the current one.
|
|
121
|
+
let pendingEmbed = null;
|
|
122
|
+
let pendingBatch = [];
|
|
123
|
+
for (let i = 0; i < sections.length; i += EMBED_BATCH_SIZE) {
|
|
124
|
+
const batch = sections.slice(i, i + EMBED_BATCH_SIZE);
|
|
125
|
+
const texts = batch.map(section => section.content || section.title);
|
|
126
|
+
if (pendingEmbed) {
|
|
127
|
+
const embeddings = await pendingEmbed;
|
|
128
|
+
db.transaction(() => {
|
|
129
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
130
|
+
const section = pendingBatch[j];
|
|
131
|
+
if (section)
|
|
132
|
+
insertEmbed.run(section.id, JSON.stringify(embeddings[j]));
|
|
133
|
+
}
|
|
134
|
+
})();
|
|
135
|
+
}
|
|
136
|
+
pendingEmbed = embedder.embed(texts);
|
|
137
|
+
pendingBatch = batch;
|
|
138
|
+
}
|
|
139
|
+
if (pendingEmbed) {
|
|
140
|
+
const embeddings = await pendingEmbed;
|
|
141
|
+
db.transaction(() => {
|
|
142
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
143
|
+
const section = pendingBatch[j];
|
|
144
|
+
if (section)
|
|
145
|
+
insertEmbed.run(section.id, JSON.stringify(embeddings[j]));
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ─── Commit message embeddings ────────────────────────────────────────────────
|
|
151
|
+
async function embedCommitMessages(db, embedder) {
|
|
152
|
+
const commits = db.prepare(`SELECT c.rowid, c.message
|
|
153
|
+
FROM commits c
|
|
154
|
+
LEFT JOIN commit_embeddings ce ON ce.rowid = c.rowid
|
|
155
|
+
WHERE length(trim(c.message)) > 0
|
|
156
|
+
AND ce.rowid IS NULL
|
|
157
|
+
ORDER BY c.rowid`).all();
|
|
158
|
+
if (commits.length === 0)
|
|
159
|
+
return;
|
|
160
|
+
const insertEmbed = db.prepare('INSERT OR REPLACE INTO commit_embeddings(rowid, embedding) VALUES (CAST(? AS INTEGER), json(?))');
|
|
161
|
+
// P4: Pipeline — start embedding the next batch while writing the current one.
|
|
162
|
+
let pendingEmbed = null;
|
|
163
|
+
let pendingBatch = [];
|
|
164
|
+
for (let i = 0; i < commits.length; i += EMBED_BATCH_SIZE) {
|
|
165
|
+
const batch = commits.slice(i, i + EMBED_BATCH_SIZE);
|
|
166
|
+
if (pendingEmbed) {
|
|
167
|
+
const embeddings = await pendingEmbed;
|
|
168
|
+
db.transaction(() => {
|
|
169
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
170
|
+
const commit = pendingBatch[j];
|
|
171
|
+
if (commit)
|
|
172
|
+
insertEmbed.run(commit.rowid, JSON.stringify(embeddings[j]));
|
|
173
|
+
}
|
|
174
|
+
})();
|
|
175
|
+
}
|
|
176
|
+
pendingEmbed = embedder.embed(batch.map((commit) => commit.message));
|
|
177
|
+
pendingBatch = batch;
|
|
178
|
+
}
|
|
179
|
+
if (pendingEmbed) {
|
|
180
|
+
const embeddings = await pendingEmbed;
|
|
181
|
+
db.transaction(() => {
|
|
182
|
+
for (let j = 0; j < pendingBatch.length; j++) {
|
|
183
|
+
const commit = pendingBatch[j];
|
|
184
|
+
if (commit)
|
|
185
|
+
insertEmbed.run(commit.rowid, JSON.stringify(embeddings[j]));
|
|
186
|
+
}
|
|
187
|
+
})();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// ─── Update-mode helpers ──────────────────────────────────────────────────────
|
|
191
|
+
function deleteSymbolEmbeddings(db, symbolIds) {
|
|
192
|
+
if (symbolIds.length === 0)
|
|
193
|
+
return;
|
|
194
|
+
const hasTable = db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type IN ('table', 'virtual table') AND name = 'symbol_embeddings'").get();
|
|
195
|
+
if (!hasTable)
|
|
196
|
+
return;
|
|
197
|
+
db.prepare(`DELETE FROM symbol_embeddings WHERE rowid IN (${symbolIds.map(() => '?').join(', ')})`).run(...symbolIds);
|
|
198
|
+
}
|
|
199
|
+
function resolveFileIds(db, paths, branch) {
|
|
200
|
+
const ids = [];
|
|
201
|
+
for (const p of paths) {
|
|
202
|
+
const row = db.prepare('SELECT id FROM files WHERE path = ? AND branch = ?').get(p, branch);
|
|
203
|
+
if (row)
|
|
204
|
+
ids.push(row.id);
|
|
205
|
+
}
|
|
206
|
+
return ids;
|
|
207
|
+
}
|
|
208
|
+
function resolveDocIds(db, paths, branch) {
|
|
209
|
+
const ids = [];
|
|
210
|
+
for (const p of paths) {
|
|
211
|
+
const row = db.prepare('SELECT id FROM docs WHERE path = ? AND branch = ?').get(p, branch);
|
|
212
|
+
if (row)
|
|
213
|
+
ids.push(row.id);
|
|
214
|
+
}
|
|
215
|
+
return ids;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=embedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/indexer/stages/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/import-resolution
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: resolve raw import strings to file IDs (internal) or
|
|
5
|
+
* external package names. Populates `file_imports.resolved_id` and
|
|
6
|
+
* `external_deps` rows.
|
|
7
|
+
*/
|
|
8
|
+
import type { PipelineContext, PipelineStage } from '../pipeline.js';
|
|
9
|
+
/**
|
|
10
|
+
* Resolves raw imports in `file_imports` to internal file IDs (`resolved_id`)
|
|
11
|
+
* or external package names (`external_deps`).
|
|
12
|
+
*/
|
|
13
|
+
export declare class ImportResolutionStage implements PipelineStage {
|
|
14
|
+
readonly name = "import-resolution";
|
|
15
|
+
execute(context: PipelineContext, _mode: 'build' | 'update'): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=import-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-resolution.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/import-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKrE;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,IAAI,uBAAuB;IAE9B,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAsDlF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/import-resolution
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: resolve raw import strings to file IDs (internal) or
|
|
5
|
+
* external package names. Populates `file_imports.resolved_id` and
|
|
6
|
+
* `external_deps` rows.
|
|
7
|
+
*/
|
|
8
|
+
import { ImportResolver } from '../resolver.js';
|
|
9
|
+
// ─── Stage ────────────────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Resolves raw imports in `file_imports` to internal file IDs (`resolved_id`)
|
|
12
|
+
* or external package names (`external_deps`).
|
|
13
|
+
*/
|
|
14
|
+
export class ImportResolutionStage {
|
|
15
|
+
name = 'import-resolution';
|
|
16
|
+
async execute(context, _mode) {
|
|
17
|
+
const { db, branch, walkerConfig } = context;
|
|
18
|
+
const rootDir = walkerConfig.rootDir;
|
|
19
|
+
const resolver = new ImportResolver();
|
|
20
|
+
// Fetch all unresolved imports with their file's path, language, and file_id
|
|
21
|
+
const rows = db
|
|
22
|
+
.prepare(`SELECT fi.id, fi.file_id, fi.raw_import, f.path, f.language
|
|
23
|
+
FROM file_imports fi
|
|
24
|
+
JOIN files f ON f.id = fi.file_id
|
|
25
|
+
WHERE fi.resolved_id IS NULL AND f.branch = ?`)
|
|
26
|
+
.all(branch);
|
|
27
|
+
// P5: Build a bulk path→id map so we don't do N individual SELECT lookups.
|
|
28
|
+
const fileIdByPath = new Map(db.prepare('SELECT id, path FROM files WHERE branch = ?').all(branch)
|
|
29
|
+
.map(r => [r.path, r.id]));
|
|
30
|
+
const updateResolved = db.prepare('UPDATE file_imports SET resolved_id = ? WHERE id = ?');
|
|
31
|
+
const insertExternalDep = db.prepare('INSERT OR IGNORE INTO external_deps (file_id, package) VALUES (?, ?)');
|
|
32
|
+
for (const row of rows) {
|
|
33
|
+
const resolved = resolver.resolve({ source: row.raw_import, importedNames: [] }, row.path, rootDir, row.language);
|
|
34
|
+
if (resolved.resolvedPath) {
|
|
35
|
+
const targetId = fileIdByPath.get(resolved.resolvedPath);
|
|
36
|
+
if (targetId !== undefined) {
|
|
37
|
+
updateResolved.run(targetId, row.id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (resolved.isExternal && resolved.externalName) {
|
|
41
|
+
insertExternalDep.run(row.file_id, resolved.externalName);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
context.log.indexing('imports resolved', { totalUnresolved: rows.length });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=import-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-resolution.js","sourceRoot":"","sources":["../../../src/indexer/stages/import-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,mBAAmB,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,OAAwB,EAAE,KAAyB;QAC/D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QAEtC,6EAA6E;QAC7E,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CACN;;;uDAG+C,CAChD;aACA,GAAG,CAAC,MAAM,CAMT,CAAC;QAEL,2EAA2E;QAC3E,MAAM,YAAY,GAAG,IAAI,GAAG,CACzB,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAyC;aAC3G,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC5B,CAAC;QAEF,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAC/B,sDAAsD,CACvD,CAAC;QACF,MAAM,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAClC,sEAAsE,CACvE,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,EAC7C,GAAG,CAAC,IAAI,EACR,OAAO,EACP,GAAG,CAAC,QAAQ,CACb,CAAC;YAEF,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACzD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACxD,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages
|
|
3
|
+
*
|
|
4
|
+
* Concrete pipeline stages with real implementations.
|
|
5
|
+
*/
|
|
6
|
+
export { SourceIndexStage } from './source-index.js';
|
|
7
|
+
export { DocsIndexStage } from './docs-index.js';
|
|
8
|
+
export { ImportResolutionStage } from './import-resolution.js';
|
|
9
|
+
export { DependencyApiStage } from './dependency-api.js';
|
|
10
|
+
export { LspEnrichmentStage } from './lsp-enrichment.js';
|
|
11
|
+
export { EmbeddingStage } from './embedding.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages
|
|
3
|
+
*
|
|
4
|
+
* Concrete pipeline stages with real implementations.
|
|
5
|
+
*/
|
|
6
|
+
export { SourceIndexStage } from './source-index.js';
|
|
7
|
+
export { DocsIndexStage } from './docs-index.js';
|
|
8
|
+
export { ImportResolutionStage } from './import-resolution.js';
|
|
9
|
+
export { DependencyApiStage } from './dependency-api.js';
|
|
10
|
+
export { LspEnrichmentStage } from './lsp-enrichment.js';
|
|
11
|
+
export { EmbeddingStage } from './embedding.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/lsp-enrichment
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: enrich symbols, symbol_refs, type_refs, and
|
|
5
|
+
* symbol_relationships with LSP-derived metadata (definition_path,
|
|
6
|
+
* definition_line, resolved_type_signature, etc.).
|
|
7
|
+
*
|
|
8
|
+
* ## Data written
|
|
9
|
+
*
|
|
10
|
+
* - `symbols.resolved_type_signature`, `resolved_return_type`,
|
|
11
|
+
* `definition_uri`, `definition_path`
|
|
12
|
+
* - `symbol_refs.resolved_type_signature`, `resolved_return_type`,
|
|
13
|
+
* `definition_uri`, `definition_path`, `definition_line`, `definition_character`
|
|
14
|
+
* - `type_refs.resolved_type_signature`, `definition_uri`,
|
|
15
|
+
* `definition_path`, `definition_line`, `definition_character`
|
|
16
|
+
* - `symbol_relationships.definition_uri`, `definition_path`,
|
|
17
|
+
* `definition_line`, `definition_character`
|
|
18
|
+
*
|
|
19
|
+
* ## Data dependency
|
|
20
|
+
*
|
|
21
|
+
* **Must run before `ResolutionStage`.** The resolution stage reads
|
|
22
|
+
* `definition_path` / `definition_line` columns populated here to perform
|
|
23
|
+
* LSP-based containment resolution.
|
|
24
|
+
*/
|
|
25
|
+
import type { PipelineContext, PipelineStage } from '../pipeline.js';
|
|
26
|
+
import type { Database } from '../db.js';
|
|
27
|
+
import { LspEnrichmentCoordinator } from '../lsp/enrichment.js';
|
|
28
|
+
/**
|
|
29
|
+
* Enriches indexed artefacts with LSP-derived metadata.
|
|
30
|
+
*
|
|
31
|
+
* Manages the lifecycle of an `LspEnrichmentCoordinator` per pipeline run.
|
|
32
|
+
* The coordinator is started during `execute()` and disposed in `dispose()`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class LspEnrichmentStage implements PipelineStage {
|
|
35
|
+
readonly name = "lsp-enrichment";
|
|
36
|
+
private coordinator;
|
|
37
|
+
execute(context: PipelineContext, _mode: 'build' | 'update'): Promise<void>;
|
|
38
|
+
dispose(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Enrich symbols, call refs, type refs, and relationships for every file in
|
|
42
|
+
* the context with LSP-derived metadata.
|
|
43
|
+
*/
|
|
44
|
+
export declare function enrichProjectRefs(db: Database.Database, branch: string, files: Array<{
|
|
45
|
+
path: string;
|
|
46
|
+
language: string;
|
|
47
|
+
}>, coordinator: LspEnrichmentCoordinator): Promise<void>;
|
|
48
|
+
//# sourceMappingURL=lsp-enrichment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-enrichment.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/lsp-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,OAAO,CAAC,WAAW,CAAyC;IAEtD,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,WAAW,EAAE,wBAAwB,GACpC,OAAO,CAAC,IAAI,CAAC,CAiLf"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/lsp-enrichment
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: enrich symbols, symbol_refs, type_refs, and
|
|
5
|
+
* symbol_relationships with LSP-derived metadata (definition_path,
|
|
6
|
+
* definition_line, resolved_type_signature, etc.).
|
|
7
|
+
*
|
|
8
|
+
* ## Data written
|
|
9
|
+
*
|
|
10
|
+
* - `symbols.resolved_type_signature`, `resolved_return_type`,
|
|
11
|
+
* `definition_uri`, `definition_path`
|
|
12
|
+
* - `symbol_refs.resolved_type_signature`, `resolved_return_type`,
|
|
13
|
+
* `definition_uri`, `definition_path`, `definition_line`, `definition_character`
|
|
14
|
+
* - `type_refs.resolved_type_signature`, `definition_uri`,
|
|
15
|
+
* `definition_path`, `definition_line`, `definition_character`
|
|
16
|
+
* - `symbol_relationships.definition_uri`, `definition_path`,
|
|
17
|
+
* `definition_line`, `definition_character`
|
|
18
|
+
*
|
|
19
|
+
* ## Data dependency
|
|
20
|
+
*
|
|
21
|
+
* **Must run before `ResolutionStage`.** The resolution stage reads
|
|
22
|
+
* `definition_path` / `definition_line` columns populated here to perform
|
|
23
|
+
* LSP-based containment resolution.
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import { LspEnrichmentCoordinator } from '../lsp/enrichment.js';
|
|
27
|
+
import { buildStructuralEmbeddingText } from '../embedder.js';
|
|
28
|
+
/**
|
|
29
|
+
* Enriches indexed artefacts with LSP-derived metadata.
|
|
30
|
+
*
|
|
31
|
+
* Manages the lifecycle of an `LspEnrichmentCoordinator` per pipeline run.
|
|
32
|
+
* The coordinator is started during `execute()` and disposed in `dispose()`.
|
|
33
|
+
*/
|
|
34
|
+
export class LspEnrichmentStage {
|
|
35
|
+
name = 'lsp-enrichment';
|
|
36
|
+
coordinator = null;
|
|
37
|
+
async execute(context, _mode) {
|
|
38
|
+
if (!context.lsp?.enabled || context.files.length === 0)
|
|
39
|
+
return;
|
|
40
|
+
this.coordinator = new LspEnrichmentCoordinator(context.lsp, context.walkerConfig.rootDir);
|
|
41
|
+
// Start language servers for all languages seen in the file list.
|
|
42
|
+
const languages = new Set(context.files.map(f => f.language));
|
|
43
|
+
if (context.indexDependencies)
|
|
44
|
+
languages.add('typescript');
|
|
45
|
+
await this.coordinator.start(languages);
|
|
46
|
+
await enrichProjectRefs(context.db, context.branch, context.files, this.coordinator);
|
|
47
|
+
}
|
|
48
|
+
async dispose() {
|
|
49
|
+
if (this.coordinator) {
|
|
50
|
+
await this.coordinator.dispose();
|
|
51
|
+
this.coordinator = null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ─── Enrichment logic ─────────────────────────────────────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* Enrich symbols, call refs, type refs, and relationships for every file in
|
|
58
|
+
* the context with LSP-derived metadata.
|
|
59
|
+
*/
|
|
60
|
+
export async function enrichProjectRefs(db, branch, files, coordinator) {
|
|
61
|
+
const selectSymbols = db.prepare(`SELECT s.id, s.name, s.signature, s.start_line
|
|
62
|
+
FROM symbols s
|
|
63
|
+
JOIN files f ON f.id = s.file_id
|
|
64
|
+
WHERE f.path = ? AND f.branch = ?
|
|
65
|
+
ORDER BY s.id`);
|
|
66
|
+
const selectCallRefs = db.prepare(`SELECT sr.id, sr.call_line, sr.call_character
|
|
67
|
+
FROM symbol_refs sr
|
|
68
|
+
JOIN symbols s ON s.id = sr.caller_id
|
|
69
|
+
JOIN files f ON f.id = s.file_id
|
|
70
|
+
WHERE f.path = ? AND f.branch = ?
|
|
71
|
+
ORDER BY sr.id`);
|
|
72
|
+
const selectTypeRefs = db.prepare(`SELECT tr.id, tr.ref_line, tr.ref_character
|
|
73
|
+
FROM type_refs tr
|
|
74
|
+
JOIN files f ON f.id = tr.file_id
|
|
75
|
+
WHERE f.path = ? AND f.branch = ?
|
|
76
|
+
ORDER BY tr.id`);
|
|
77
|
+
const selectRelationships = db.prepare(`SELECT sr.id, sr.line, sr.character
|
|
78
|
+
FROM symbol_relationships sr
|
|
79
|
+
JOIN files f ON f.id = sr.file_id
|
|
80
|
+
WHERE f.path = ? AND f.branch = ? AND sr.line IS NOT NULL
|
|
81
|
+
ORDER BY sr.id`);
|
|
82
|
+
const updateSymbol = db.prepare(`UPDATE symbols
|
|
83
|
+
SET resolved_type_signature = ?, resolved_return_type = ?, definition_uri = ?, definition_path = ?
|
|
84
|
+
WHERE id = ?`);
|
|
85
|
+
const updateSymbolFts = db.prepare('UPDATE symbols_fts SET signature = ? WHERE rowid = ?');
|
|
86
|
+
const updateCallRef = db.prepare(`UPDATE symbol_refs
|
|
87
|
+
SET resolved_type_signature = ?, resolved_return_type = ?, definition_uri = ?, definition_path = ?, definition_line = ?, definition_character = ?
|
|
88
|
+
WHERE id = ?`);
|
|
89
|
+
const updateTypeRef = db.prepare(`UPDATE type_refs
|
|
90
|
+
SET resolved_type_signature = ?, definition_uri = ?, definition_path = ?, definition_line = ?, definition_character = ?
|
|
91
|
+
WHERE id = ?`);
|
|
92
|
+
const updateRelationship = db.prepare(`UPDATE symbol_relationships
|
|
93
|
+
SET definition_uri = ?, definition_path = ?, definition_line = ?, definition_character = ?
|
|
94
|
+
WHERE id = ?`);
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
if (!file || !fs.existsSync(file.path))
|
|
97
|
+
continue;
|
|
98
|
+
let source;
|
|
99
|
+
try {
|
|
100
|
+
source = fs.readFileSync(file.path, 'utf8');
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const tagged = [];
|
|
106
|
+
const symbols = selectSymbols.all(file.path, branch);
|
|
107
|
+
for (const s of symbols) {
|
|
108
|
+
tagged.push({ table: 'symbol', rowId: s.id, line: s.start_line, character: 0, name: s.name, signature: s.signature });
|
|
109
|
+
}
|
|
110
|
+
const callRefs = selectCallRefs.all(file.path, branch);
|
|
111
|
+
for (const cr of callRefs) {
|
|
112
|
+
tagged.push({ table: 'callRef', rowId: cr.id, line: cr.call_line, character: cr.call_character ?? 0 });
|
|
113
|
+
}
|
|
114
|
+
const typeRefs = selectTypeRefs.all(file.path, branch);
|
|
115
|
+
for (const tr of typeRefs) {
|
|
116
|
+
tagged.push({ table: 'typeRef', rowId: tr.id, line: tr.ref_line, character: tr.ref_character ?? 0 });
|
|
117
|
+
}
|
|
118
|
+
const relationships = selectRelationships.all(file.path, branch);
|
|
119
|
+
for (const r of relationships) {
|
|
120
|
+
tagged.push({ table: 'relationship', rowId: r.id, line: r.line, character: r.character ?? 0 });
|
|
121
|
+
}
|
|
122
|
+
if (tagged.length === 0)
|
|
123
|
+
continue;
|
|
124
|
+
const metadata = await coordinator.enrich({
|
|
125
|
+
filePath: file.path,
|
|
126
|
+
language: file.language,
|
|
127
|
+
source,
|
|
128
|
+
targets: tagged.map(t => ({ line: t.line, character: t.character })),
|
|
129
|
+
});
|
|
130
|
+
for (let i = 0; i < tagged.length; i++) {
|
|
131
|
+
const tag = tagged[i];
|
|
132
|
+
const m = metadata[i];
|
|
133
|
+
if (!m)
|
|
134
|
+
continue;
|
|
135
|
+
switch (tag.table) {
|
|
136
|
+
case 'symbol':
|
|
137
|
+
updateSymbol.run(m.resolvedTypeSignature, m.resolvedReturnType, m.definitionUri, m.definitionPath, tag.rowId);
|
|
138
|
+
updateSymbolFts.run(buildStructuralEmbeddingText({
|
|
139
|
+
name: tag.name,
|
|
140
|
+
signature: tag.signature ?? null,
|
|
141
|
+
resolvedTypeSignature: m.resolvedTypeSignature,
|
|
142
|
+
resolvedReturnType: m.resolvedReturnType,
|
|
143
|
+
}), tag.rowId);
|
|
144
|
+
break;
|
|
145
|
+
case 'callRef':
|
|
146
|
+
updateCallRef.run(m.resolvedTypeSignature, m.resolvedReturnType, m.definitionUri, m.definitionPath, m.definitionLine, m.definitionCharacter, tag.rowId);
|
|
147
|
+
break;
|
|
148
|
+
case 'typeRef':
|
|
149
|
+
updateTypeRef.run(m.resolvedTypeSignature, m.definitionUri, m.definitionPath, m.definitionLine, m.definitionCharacter, tag.rowId);
|
|
150
|
+
break;
|
|
151
|
+
case 'relationship':
|
|
152
|
+
updateRelationship.run(m.definitionUri, m.definitionPath, m.definitionLine, m.definitionCharacter, tag.rowId);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=lsp-enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-enrichment.js","sourceRoot":"","sources":["../../../src/indexer/stages/lsp-enrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/stages/source-index
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stage: walk, parse, extract, and insert symbols/imports/callRefs/
|
|
5
|
+
* typeRefs/relationships/routes/annotations for all source files.
|
|
6
|
+
*
|
|
7
|
+
* This is the first stage in the pipeline and populates `context.files`.
|
|
8
|
+
*/
|
|
9
|
+
import type { PipelineContext, PipelineStage } from '../pipeline.js';
|
|
10
|
+
import type { Database } from '../db.js';
|
|
11
|
+
import { ParserPool } from '../parser.js';
|
|
12
|
+
/**
|
|
13
|
+
* Walk source files, parse with tree-sitter, extract symbols/imports/callRefs/
|
|
14
|
+
* typeRefs/relationships/routes/annotations, and persist to the database.
|
|
15
|
+
*
|
|
16
|
+
* Populates `context.files` for use by later stages.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SourceIndexStage implements PipelineStage {
|
|
19
|
+
readonly name = "source-index";
|
|
20
|
+
private pool;
|
|
21
|
+
execute(context: PipelineContext, mode: 'build' | 'update'): Promise<void>;
|
|
22
|
+
dispose(): Promise<void>;
|
|
23
|
+
private processBuild;
|
|
24
|
+
private processUpdate;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse one file, extract symbols/imports/callRefs/typeRefs/relationships/
|
|
28
|
+
* routes/annotations, and insert into the DB.
|
|
29
|
+
*/
|
|
30
|
+
export declare function processFile(db: Database.Database, pool: ParserPool, filePath: string, language: string, branch: string): void;
|
|
31
|
+
//# sourceMappingURL=source-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/source-index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAgF1C;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,kBAAkB;IAE/B,OAAO,CAAC,IAAI,CAA2B;IAEjC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMhB,YAAY;YA0BZ,aAAa;CAiD5B;AAID;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,IAAI,CAmCN"}
|