@jafreck/lore 0.3.1 → 0.3.3
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 +11 -14
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +2 -0
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/extractors/c.d.ts.map +1 -1
- package/dist/indexer/extractors/c.js +94 -3
- package/dist/indexer/extractors/c.js.map +1 -1
- package/dist/indexer/extractors/cpp.d.ts.map +1 -1
- package/dist/indexer/extractors/cpp.js +67 -2
- package/dist/indexer/extractors/cpp.js.map +1 -1
- package/dist/indexer/extractors/csharp.d.ts.map +1 -1
- package/dist/indexer/extractors/csharp.js +3 -0
- package/dist/indexer/extractors/csharp.js.map +1 -1
- package/dist/indexer/extractors/elixir.js +4 -1
- package/dist/indexer/extractors/elixir.js.map +1 -1
- package/dist/indexer/extractors/go.d.ts.map +1 -1
- package/dist/indexer/extractors/go.js +1 -0
- package/dist/indexer/extractors/go.js.map +1 -1
- package/dist/indexer/extractors/java.d.ts.map +1 -1
- package/dist/indexer/extractors/java.js +2 -0
- package/dist/indexer/extractors/java.js.map +1 -1
- package/dist/indexer/extractors/julia.d.ts.map +1 -1
- package/dist/indexer/extractors/julia.js +26 -3
- package/dist/indexer/extractors/julia.js.map +1 -1
- package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
- package/dist/indexer/extractors/kotlin.js +2 -0
- package/dist/indexer/extractors/kotlin.js.map +1 -1
- package/dist/indexer/extractors/objc.d.ts.map +1 -1
- package/dist/indexer/extractors/objc.js +7 -1
- package/dist/indexer/extractors/objc.js.map +1 -1
- package/dist/indexer/extractors/ocaml.js +10 -2
- package/dist/indexer/extractors/ocaml.js.map +1 -1
- package/dist/indexer/extractors/php.d.ts.map +1 -1
- package/dist/indexer/extractors/php.js +4 -0
- package/dist/indexer/extractors/php.js.map +1 -1
- package/dist/indexer/extractors/ruby.d.ts.map +1 -1
- package/dist/indexer/extractors/ruby.js +6 -3
- package/dist/indexer/extractors/ruby.js.map +1 -1
- package/dist/indexer/extractors/rust.d.ts.map +1 -1
- package/dist/indexer/extractors/rust.js +3 -0
- package/dist/indexer/extractors/rust.js.map +1 -1
- package/dist/indexer/extractors/swift.d.ts.map +1 -1
- package/dist/indexer/extractors/swift.js +3 -0
- package/dist/indexer/extractors/swift.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +4 -0
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/extractors/zig.d.ts.map +1 -1
- package/dist/indexer/extractors/zig.js +22 -11
- package/dist/indexer/extractors/zig.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts.map +1 -1
- package/dist/indexer/lsp/client.js +2 -0
- package/dist/indexer/lsp/client.js.map +1 -1
- package/dist/indexer/lsp/registry.d.ts.map +1 -1
- package/dist/indexer/lsp/registry.js +0 -1
- package/dist/indexer/lsp/registry.js.map +1 -1
- package/dist/indexer/parser.d.ts +1 -1
- package/dist/indexer/parser.d.ts.map +1 -1
- package/dist/indexer/parser.js +38 -10
- package/dist/indexer/parser.js.map +1 -1
- package/dist/indexer/stages/source-index.d.ts.map +1 -1
- package/dist/indexer/stages/source-index.js +5 -3
- package/dist/indexer/stages/source-index.js.map +1 -1
- package/dist/indexer/walker.d.ts.map +1 -1
- package/dist/indexer/walker.js +0 -1
- package/dist/indexer/walker.js.map +1 -1
- package/dist/lore-server/tools/graph.d.ts +6 -1
- package/dist/lore-server/tools/graph.d.ts.map +1 -1
- package/dist/lore-server/tools/graph.js +180 -209
- package/dist/lore-server/tools/graph.js.map +1 -1
- package/dist/process-tracker.d.ts +33 -0
- package/dist/process-tracker.d.ts.map +1 -0
- package/dist/process-tracker.js +52 -0
- package/dist/process-tracker.js.map +1 -0
- package/dist/runtime.d.ts +7 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +23 -13
- package/dist/runtime.js.map +1 -1
- package/package.json +8 -5
- package/dist/indexer/extractors/dart.d.ts +0 -12
- package/dist/indexer/extractors/dart.d.ts.map +0 -1
- package/dist/indexer/extractors/dart.js +0 -213
- package/dist/indexer/extractors/dart.js.map +0 -1
|
@@ -12,6 +12,7 @@ export const toolDef = {
|
|
|
12
12
|
name: 'lore_graph',
|
|
13
13
|
description: 'Query call, import, module, inheritance, or type dependency graph edges stored in the knowledge-base index. ' +
|
|
14
14
|
'Set `kind` to "call", "import", "module", "inheritance", or "type_dependency". ' +
|
|
15
|
+
'Use source_id for outbound edges (what does X call?) and target_id for inbound edges (who calls X?). ' +
|
|
15
16
|
'Optionally set mode="semantic" with query_vector to retrieve semantically related symbol/module nodes alongside edges.',
|
|
16
17
|
inputSchema: {
|
|
17
18
|
type: 'object',
|
|
@@ -25,7 +26,14 @@ export const toolDef = {
|
|
|
25
26
|
},
|
|
26
27
|
source_id: {
|
|
27
28
|
type: 'number',
|
|
28
|
-
description: 'Optional. If provided, only edges whose source matches this id are returned.',
|
|
29
|
+
description: 'Optional. If provided, only edges whose source matches this id are returned (outbound edges).',
|
|
30
|
+
},
|
|
31
|
+
target_id: {
|
|
32
|
+
type: 'number',
|
|
33
|
+
description: 'Optional. If provided, only edges whose target matches this id are returned (inbound edges). ' +
|
|
34
|
+
'For kind="call": find all callers of a symbol. For kind="import": find all importers of a file. ' +
|
|
35
|
+
'For kind="inheritance": find all classes that extend/implement a base. ' +
|
|
36
|
+
'For kind="type_dependency": find all symbols that reference a type.',
|
|
29
37
|
},
|
|
30
38
|
limit: {
|
|
31
39
|
type: 'number',
|
|
@@ -66,53 +74,43 @@ function hasVirtualTable(db, name) {
|
|
|
66
74
|
function getStructuralEdges(db, args, limit) {
|
|
67
75
|
if (args.kind === 'call') {
|
|
68
76
|
// Symbol-level: symbol_refs rows
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
sr.definition_character AS definition_character
|
|
107
|
-
FROM symbol_refs sr
|
|
108
|
-
JOIN symbols s_caller ON s_caller.id = sr.caller_id
|
|
109
|
-
JOIN files f_caller ON f_caller.id = s_caller.file_id
|
|
110
|
-
WHERE 1=1${branchClause}
|
|
111
|
-
LIMIT ?`;
|
|
112
|
-
const edgeParams = hasFilter
|
|
113
|
-
? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
|
|
114
|
-
: (args.branch !== undefined ? [args.branch, limit] : [limit]);
|
|
115
|
-
const edges = db.prepare(sql).all(...edgeParams);
|
|
77
|
+
const conditions = [];
|
|
78
|
+
const params = [];
|
|
79
|
+
if (args.source_id !== undefined) {
|
|
80
|
+
conditions.push('sr.caller_id = ?');
|
|
81
|
+
params.push(args.source_id);
|
|
82
|
+
}
|
|
83
|
+
if (args.target_id !== undefined) {
|
|
84
|
+
conditions.push('sr.callee_id = ?');
|
|
85
|
+
params.push(args.target_id);
|
|
86
|
+
}
|
|
87
|
+
if (args.branch !== undefined) {
|
|
88
|
+
conditions.push('f_caller.branch = ?');
|
|
89
|
+
params.push(args.branch);
|
|
90
|
+
}
|
|
91
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
92
|
+
params.push(limit);
|
|
93
|
+
const sql = `SELECT sr.caller_id AS source_id,
|
|
94
|
+
s_caller.name AS source_name,
|
|
95
|
+
f_caller.branch AS source_branch,
|
|
96
|
+
sr.callee_id AS target_id,
|
|
97
|
+
sr.callee_name AS target_name,
|
|
98
|
+
sr.call_kind AS call_kind,
|
|
99
|
+
sr.call_line + 1 AS line,
|
|
100
|
+
CASE
|
|
101
|
+
WHEN sr.call_character IS NULL THEN NULL
|
|
102
|
+
ELSE sr.call_character + 1
|
|
103
|
+
END AS character,
|
|
104
|
+
sr.resolution_method AS resolution_method,
|
|
105
|
+
sr.definition_path AS definition_path,
|
|
106
|
+
sr.definition_line AS definition_line,
|
|
107
|
+
sr.definition_character AS definition_character
|
|
108
|
+
FROM symbol_refs sr
|
|
109
|
+
JOIN symbols s_caller ON s_caller.id = sr.caller_id
|
|
110
|
+
JOIN files f_caller ON f_caller.id = s_caller.file_id
|
|
111
|
+
${whereClause}
|
|
112
|
+
LIMIT ?`;
|
|
113
|
+
const edges = db.prepare(sql).all(...params);
|
|
116
114
|
const calleeIds = Array.from(new Set(edges.map((edge) => edge.target_id).filter((id) => id !== null)));
|
|
117
115
|
const coverageBySymbolId = getCoveragePercentBySymbolIds(db, calleeIds, args.branch);
|
|
118
116
|
const edgesWithCoverage = edges.map((edge) => ({
|
|
@@ -123,33 +121,33 @@ function getStructuralEdges(db, args, limit) {
|
|
|
123
121
|
}
|
|
124
122
|
else if (args.kind === 'import') {
|
|
125
123
|
// File-level: file_imports rows
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const edges = db.prepare(sql).all(...
|
|
124
|
+
const conditions = [];
|
|
125
|
+
const params = [];
|
|
126
|
+
if (args.source_id !== undefined) {
|
|
127
|
+
conditions.push('fi.file_id = ?');
|
|
128
|
+
params.push(args.source_id);
|
|
129
|
+
}
|
|
130
|
+
if (args.target_id !== undefined) {
|
|
131
|
+
conditions.push('fi.resolved_id = ?');
|
|
132
|
+
params.push(args.target_id);
|
|
133
|
+
}
|
|
134
|
+
if (args.branch !== undefined) {
|
|
135
|
+
conditions.push('f_src.branch = ?');
|
|
136
|
+
params.push(args.branch);
|
|
137
|
+
}
|
|
138
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
139
|
+
params.push(limit);
|
|
140
|
+
const sql = `SELECT fi.file_id AS source_id,
|
|
141
|
+
f_src.path AS source_name,
|
|
142
|
+
f_src.branch AS source_branch,
|
|
143
|
+
fi.resolved_id AS target_id,
|
|
144
|
+
COALESCE(f_dst.path, fi.raw_import) AS target_name
|
|
145
|
+
FROM file_imports fi
|
|
146
|
+
JOIN files f_src ON f_src.id = fi.file_id
|
|
147
|
+
LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
|
|
148
|
+
${whereClause}
|
|
149
|
+
LIMIT ?`;
|
|
150
|
+
const edges = db.prepare(sql).all(...params);
|
|
153
151
|
return edges;
|
|
154
152
|
}
|
|
155
153
|
else if (args.kind === 'module') {
|
|
@@ -157,148 +155,121 @@ function getStructuralEdges(db, args, limit) {
|
|
|
157
155
|
// NOTE: No writer populates `modules`/`file_modules` — this query returns
|
|
158
156
|
// empty results until a module-detection writer is implemented.
|
|
159
157
|
// The INNER JOIN on file_modules ensures graceful empty results.
|
|
160
|
-
const
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
LIMIT ?`;
|
|
193
|
-
const edgeParams = hasFilter
|
|
194
|
-
? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
|
|
195
|
-
: (args.branch !== undefined ? [args.branch, limit] : [limit]);
|
|
196
|
-
const edges = db.prepare(sql).all(...edgeParams);
|
|
158
|
+
const conditions = [];
|
|
159
|
+
const params = [];
|
|
160
|
+
if (args.source_id !== undefined) {
|
|
161
|
+
conditions.push('m_src.id = ?');
|
|
162
|
+
params.push(args.source_id);
|
|
163
|
+
}
|
|
164
|
+
if (args.target_id !== undefined) {
|
|
165
|
+
conditions.push('m_dst.id = ?');
|
|
166
|
+
params.push(args.target_id);
|
|
167
|
+
}
|
|
168
|
+
if (args.branch !== undefined) {
|
|
169
|
+
conditions.push('f_src.branch = ?');
|
|
170
|
+
params.push(args.branch);
|
|
171
|
+
}
|
|
172
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
173
|
+
params.push(limit);
|
|
174
|
+
const sql = `SELECT DISTINCT
|
|
175
|
+
m_src.id AS source_id,
|
|
176
|
+
m_src.name AS source_name,
|
|
177
|
+
f_src.branch AS source_branch,
|
|
178
|
+
m_dst.id AS target_id,
|
|
179
|
+
COALESCE(m_dst.name, fi.raw_import) AS target_name
|
|
180
|
+
FROM file_imports fi
|
|
181
|
+
JOIN files f_src ON f_src.id = fi.file_id
|
|
182
|
+
JOIN file_modules fm_src ON fm_src.file_id = f_src.id
|
|
183
|
+
JOIN modules m_src ON m_src.id = fm_src.module_id
|
|
184
|
+
LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
|
|
185
|
+
LEFT JOIN file_modules fm_dst ON fm_dst.file_id = f_dst.id
|
|
186
|
+
LEFT JOIN modules m_dst ON m_dst.id = fm_dst.module_id
|
|
187
|
+
${whereClause}
|
|
188
|
+
LIMIT ?`;
|
|
189
|
+
const edges = db.prepare(sql).all(...params);
|
|
197
190
|
return edges;
|
|
198
191
|
}
|
|
199
192
|
else if (args.kind === 'inheritance') {
|
|
200
193
|
// Symbol-level inheritance edges (e.g., class extends, implements)
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
rel.definition_character AS definition_character
|
|
239
|
-
FROM symbol_relationships rel
|
|
240
|
-
JOIN symbols s_src ON s_src.id = rel.source_symbol_id
|
|
241
|
-
JOIN files f_src ON f_src.id = s_src.file_id
|
|
242
|
-
LEFT JOIN symbols s_dst ON s_dst.id = rel.target_symbol_id
|
|
243
|
-
WHERE rel.relationship_type IN ('extends', 'implements')${branchClause}
|
|
244
|
-
LIMIT ?`;
|
|
245
|
-
const edgeParams = hasFilter
|
|
246
|
-
? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
|
|
247
|
-
: (args.branch !== undefined ? [args.branch, limit] : [limit]);
|
|
248
|
-
const edges = db.prepare(sql).all(...edgeParams);
|
|
194
|
+
const conditions = ["rel.relationship_type IN ('extends', 'implements')"];
|
|
195
|
+
const params = [];
|
|
196
|
+
if (args.source_id !== undefined) {
|
|
197
|
+
conditions.push('rel.source_symbol_id = ?');
|
|
198
|
+
params.push(args.source_id);
|
|
199
|
+
}
|
|
200
|
+
if (args.target_id !== undefined) {
|
|
201
|
+
conditions.push('rel.target_symbol_id = ?');
|
|
202
|
+
params.push(args.target_id);
|
|
203
|
+
}
|
|
204
|
+
if (args.branch !== undefined) {
|
|
205
|
+
conditions.push('f_src.branch = ?');
|
|
206
|
+
params.push(args.branch);
|
|
207
|
+
}
|
|
208
|
+
const whereClause = `WHERE ${conditions.join(' AND ')}`;
|
|
209
|
+
params.push(limit);
|
|
210
|
+
const sql = `SELECT rel.source_symbol_id AS source_id,
|
|
211
|
+
s_src.name AS source_name,
|
|
212
|
+
f_src.branch AS source_branch,
|
|
213
|
+
rel.target_symbol_id AS target_id,
|
|
214
|
+
COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
|
|
215
|
+
rel.line + 1 AS line,
|
|
216
|
+
CASE
|
|
217
|
+
WHEN rel.character IS NULL THEN NULL
|
|
218
|
+
ELSE rel.character + 1
|
|
219
|
+
END AS character,
|
|
220
|
+
rel.resolution_method AS resolution_method,
|
|
221
|
+
rel.definition_path AS definition_path,
|
|
222
|
+
rel.definition_line AS definition_line,
|
|
223
|
+
rel.definition_character AS definition_character
|
|
224
|
+
FROM symbol_relationships rel
|
|
225
|
+
JOIN symbols s_src ON s_src.id = rel.source_symbol_id
|
|
226
|
+
JOIN files f_src ON f_src.id = s_src.file_id
|
|
227
|
+
LEFT JOIN symbols s_dst ON s_dst.id = rel.target_symbol_id
|
|
228
|
+
${whereClause}
|
|
229
|
+
LIMIT ?`;
|
|
230
|
+
const edges = db.prepare(sql).all(...params);
|
|
249
231
|
return edges;
|
|
250
232
|
}
|
|
251
233
|
else {
|
|
252
234
|
// type_dependency: symbol → referenced type edges
|
|
253
|
-
const
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
tr.definition_character AS definition_character
|
|
292
|
-
FROM type_refs tr
|
|
293
|
-
JOIN files f_src ON f_src.id = tr.file_id
|
|
294
|
-
LEFT JOIN symbols s_src ON s_src.id = tr.symbol_id
|
|
295
|
-
LEFT JOIN symbols s_dst ON s_dst.id = tr.type_id
|
|
296
|
-
WHERE 1=1${branchClause}
|
|
297
|
-
LIMIT ?`;
|
|
298
|
-
const edgeParams = hasFilter
|
|
299
|
-
? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
|
|
300
|
-
: (args.branch !== undefined ? [args.branch, limit] : [limit]);
|
|
301
|
-
const edges = db.prepare(sql).all(...edgeParams);
|
|
235
|
+
const conditions = [];
|
|
236
|
+
const params = [];
|
|
237
|
+
if (args.source_id !== undefined) {
|
|
238
|
+
conditions.push('tr.symbol_id = ?');
|
|
239
|
+
params.push(args.source_id);
|
|
240
|
+
}
|
|
241
|
+
if (args.target_id !== undefined) {
|
|
242
|
+
conditions.push('tr.type_id = ?');
|
|
243
|
+
params.push(args.target_id);
|
|
244
|
+
}
|
|
245
|
+
if (args.branch !== undefined) {
|
|
246
|
+
conditions.push('f_src.branch = ?');
|
|
247
|
+
params.push(args.branch);
|
|
248
|
+
}
|
|
249
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
250
|
+
params.push(limit);
|
|
251
|
+
const sql = `SELECT tr.symbol_id AS source_id,
|
|
252
|
+
COALESCE(s_src.name, '') AS source_name,
|
|
253
|
+
f_src.branch AS source_branch,
|
|
254
|
+
tr.type_id AS target_id,
|
|
255
|
+
COALESCE(s_dst.name, tr.type_name) AS target_name,
|
|
256
|
+
tr.ref_kind AS ref_kind,
|
|
257
|
+
tr.ref_line + 1 AS line,
|
|
258
|
+
CASE
|
|
259
|
+
WHEN tr.ref_character IS NULL THEN NULL
|
|
260
|
+
ELSE tr.ref_character + 1
|
|
261
|
+
END AS character,
|
|
262
|
+
tr.resolution_method AS resolution_method,
|
|
263
|
+
tr.definition_path AS definition_path,
|
|
264
|
+
tr.definition_line AS definition_line,
|
|
265
|
+
tr.definition_character AS definition_character
|
|
266
|
+
FROM type_refs tr
|
|
267
|
+
JOIN files f_src ON f_src.id = tr.file_id
|
|
268
|
+
LEFT JOIN symbols s_src ON s_src.id = tr.symbol_id
|
|
269
|
+
LEFT JOIN symbols s_dst ON s_dst.id = tr.type_id
|
|
270
|
+
${whereClause}
|
|
271
|
+
LIMIT ?`;
|
|
272
|
+
const edges = db.prepare(sql).all(...params);
|
|
302
273
|
return edges;
|
|
303
274
|
}
|
|
304
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGhF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,8GAA8G;QAC9G,iFAAiF;QACjF,wHAAwH;IAC1H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,CAAC;gBACpE,WAAW,EACT,qFAAqF;oBACrF,qGAAqG;oBACrG,2DAA2D;aAC9D;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module process-tracker
|
|
3
|
+
*
|
|
4
|
+
* Global registry of spawned child processes.
|
|
5
|
+
*
|
|
6
|
+
* Long-lived subprocess owners (embedder, LSP clients) call `trackProcess()`
|
|
7
|
+
* after spawning, and `untrackProcess()` (or rely on the automatic `exit`
|
|
8
|
+
* listener) when the child terminates.
|
|
9
|
+
*
|
|
10
|
+
* On `SIGINT` / `SIGTERM`, `killAllTracked()` sends `SIGTERM` to every live
|
|
11
|
+
* child so that Python sub-interpreters, language servers, etc. are never
|
|
12
|
+
* orphaned — even if the async `dispose()` paths are interrupted.
|
|
13
|
+
*/
|
|
14
|
+
import type { ChildProcess } from 'node:child_process';
|
|
15
|
+
/**
|
|
16
|
+
* Register a child process for cleanup-on-exit tracking.
|
|
17
|
+
*
|
|
18
|
+
* An `'exit'` listener is installed automatically so the process is removed
|
|
19
|
+
* from the set once it terminates.
|
|
20
|
+
*/
|
|
21
|
+
export declare function trackProcess(proc: ChildProcess): void;
|
|
22
|
+
/** Explicitly remove a process from tracking (e.g. after a graceful close). */
|
|
23
|
+
export declare function untrackProcess(proc: ChildProcess): void;
|
|
24
|
+
/**
|
|
25
|
+
* Send `SIGTERM` to every tracked child process and clear the set.
|
|
26
|
+
*
|
|
27
|
+
* This is intentionally synchronous so it can be called from signal handlers
|
|
28
|
+
* and the `process.on('exit')` hook.
|
|
29
|
+
*/
|
|
30
|
+
export declare function killAllTracked(): void;
|
|
31
|
+
/** Number of processes currently tracked (exposed for tests). */
|
|
32
|
+
export declare function trackedCount(): number;
|
|
33
|
+
//# sourceMappingURL=process-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tracker.d.ts","sourceRoot":"","sources":["../src/process-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAKrD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,IAAI,CASrC;AAED,iEAAiE;AACjE,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module process-tracker
|
|
3
|
+
*
|
|
4
|
+
* Global registry of spawned child processes.
|
|
5
|
+
*
|
|
6
|
+
* Long-lived subprocess owners (embedder, LSP clients) call `trackProcess()`
|
|
7
|
+
* after spawning, and `untrackProcess()` (or rely on the automatic `exit`
|
|
8
|
+
* listener) when the child terminates.
|
|
9
|
+
*
|
|
10
|
+
* On `SIGINT` / `SIGTERM`, `killAllTracked()` sends `SIGTERM` to every live
|
|
11
|
+
* child so that Python sub-interpreters, language servers, etc. are never
|
|
12
|
+
* orphaned — even if the async `dispose()` paths are interrupted.
|
|
13
|
+
*/
|
|
14
|
+
const tracked = new Set();
|
|
15
|
+
/**
|
|
16
|
+
* Register a child process for cleanup-on-exit tracking.
|
|
17
|
+
*
|
|
18
|
+
* An `'exit'` listener is installed automatically so the process is removed
|
|
19
|
+
* from the set once it terminates.
|
|
20
|
+
*/
|
|
21
|
+
export function trackProcess(proc) {
|
|
22
|
+
tracked.add(proc);
|
|
23
|
+
proc.once('exit', () => {
|
|
24
|
+
tracked.delete(proc);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Explicitly remove a process from tracking (e.g. after a graceful close). */
|
|
28
|
+
export function untrackProcess(proc) {
|
|
29
|
+
tracked.delete(proc);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Send `SIGTERM` to every tracked child process and clear the set.
|
|
33
|
+
*
|
|
34
|
+
* This is intentionally synchronous so it can be called from signal handlers
|
|
35
|
+
* and the `process.on('exit')` hook.
|
|
36
|
+
*/
|
|
37
|
+
export function killAllTracked() {
|
|
38
|
+
for (const proc of tracked) {
|
|
39
|
+
try {
|
|
40
|
+
proc.kill('SIGTERM');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
/* already exited — ignore */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
tracked.clear();
|
|
47
|
+
}
|
|
48
|
+
/** Number of processes currently tracked (exposed for tests). */
|
|
49
|
+
export function trackedCount() {
|
|
50
|
+
return tracked.size;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=process-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tracker.js","sourceRoot":"","sources":["../src/process-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -80,8 +80,13 @@ export declare class LoreRuntime {
|
|
|
80
80
|
*/
|
|
81
81
|
shutdown(): Promise<void>;
|
|
82
82
|
/**
|
|
83
|
-
* Register process-level signal handlers (`SIGINT`, `SIGTERM`) that
|
|
84
|
-
*
|
|
83
|
+
* Register process-level signal handlers (`SIGINT`, `SIGTERM`) that
|
|
84
|
+
* gracefully tear down all managed resources before exiting.
|
|
85
|
+
*
|
|
86
|
+
* A second signal while shutdown is in progress forces an immediate exit.
|
|
87
|
+
* As a safety net, `killAllTracked()` runs synchronously on the `exit`
|
|
88
|
+
* event to SIGTERM any child processes that slipped past the async path
|
|
89
|
+
* (e.g. LSP servers spawned by an in-flight pipeline stage).
|
|
85
90
|
*/
|
|
86
91
|
installSignalHandlers(): void;
|
|
87
92
|
}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzD,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,YAAY,EAAE,YAAY,CAAC;IAG3B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACjC,oCAAoC;IACpC,OAAO,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,aAAa,EAAE,OAAO,CAAC;IACvB,iEAAiE;IACjE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACxC;AAID,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;CACd;AAID;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAEzB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,UAAU;IAOtD,8EAA8E;IAC9E,IAAI,QAAQ,IAAI,iBAAiB,GAAG,SAAS,CAE5C;IAED,kFAAkF;IAClF,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAID;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D5B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB/B;;;;;;;;OAQG;IACH,qBAAqB,IAAI,IAAI;CA0B9B"}
|