@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.
Files changed (89) hide show
  1. package/README.md +11 -14
  2. package/dist/cli.js +6 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/indexer/embedder.d.ts.map +1 -1
  9. package/dist/indexer/embedder.js +2 -0
  10. package/dist/indexer/embedder.js.map +1 -1
  11. package/dist/indexer/extractors/c.d.ts.map +1 -1
  12. package/dist/indexer/extractors/c.js +94 -3
  13. package/dist/indexer/extractors/c.js.map +1 -1
  14. package/dist/indexer/extractors/cpp.d.ts.map +1 -1
  15. package/dist/indexer/extractors/cpp.js +67 -2
  16. package/dist/indexer/extractors/cpp.js.map +1 -1
  17. package/dist/indexer/extractors/csharp.d.ts.map +1 -1
  18. package/dist/indexer/extractors/csharp.js +3 -0
  19. package/dist/indexer/extractors/csharp.js.map +1 -1
  20. package/dist/indexer/extractors/elixir.js +4 -1
  21. package/dist/indexer/extractors/elixir.js.map +1 -1
  22. package/dist/indexer/extractors/go.d.ts.map +1 -1
  23. package/dist/indexer/extractors/go.js +1 -0
  24. package/dist/indexer/extractors/go.js.map +1 -1
  25. package/dist/indexer/extractors/java.d.ts.map +1 -1
  26. package/dist/indexer/extractors/java.js +2 -0
  27. package/dist/indexer/extractors/java.js.map +1 -1
  28. package/dist/indexer/extractors/julia.d.ts.map +1 -1
  29. package/dist/indexer/extractors/julia.js +26 -3
  30. package/dist/indexer/extractors/julia.js.map +1 -1
  31. package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
  32. package/dist/indexer/extractors/kotlin.js +2 -0
  33. package/dist/indexer/extractors/kotlin.js.map +1 -1
  34. package/dist/indexer/extractors/objc.d.ts.map +1 -1
  35. package/dist/indexer/extractors/objc.js +7 -1
  36. package/dist/indexer/extractors/objc.js.map +1 -1
  37. package/dist/indexer/extractors/ocaml.js +10 -2
  38. package/dist/indexer/extractors/ocaml.js.map +1 -1
  39. package/dist/indexer/extractors/php.d.ts.map +1 -1
  40. package/dist/indexer/extractors/php.js +4 -0
  41. package/dist/indexer/extractors/php.js.map +1 -1
  42. package/dist/indexer/extractors/ruby.d.ts.map +1 -1
  43. package/dist/indexer/extractors/ruby.js +6 -3
  44. package/dist/indexer/extractors/ruby.js.map +1 -1
  45. package/dist/indexer/extractors/rust.d.ts.map +1 -1
  46. package/dist/indexer/extractors/rust.js +3 -0
  47. package/dist/indexer/extractors/rust.js.map +1 -1
  48. package/dist/indexer/extractors/swift.d.ts.map +1 -1
  49. package/dist/indexer/extractors/swift.js +3 -0
  50. package/dist/indexer/extractors/swift.js.map +1 -1
  51. package/dist/indexer/extractors/typescript.d.ts.map +1 -1
  52. package/dist/indexer/extractors/typescript.js +4 -0
  53. package/dist/indexer/extractors/typescript.js.map +1 -1
  54. package/dist/indexer/extractors/zig.d.ts.map +1 -1
  55. package/dist/indexer/extractors/zig.js +22 -11
  56. package/dist/indexer/extractors/zig.js.map +1 -1
  57. package/dist/indexer/lsp/client.d.ts.map +1 -1
  58. package/dist/indexer/lsp/client.js +2 -0
  59. package/dist/indexer/lsp/client.js.map +1 -1
  60. package/dist/indexer/lsp/registry.d.ts.map +1 -1
  61. package/dist/indexer/lsp/registry.js +0 -1
  62. package/dist/indexer/lsp/registry.js.map +1 -1
  63. package/dist/indexer/parser.d.ts +1 -1
  64. package/dist/indexer/parser.d.ts.map +1 -1
  65. package/dist/indexer/parser.js +38 -10
  66. package/dist/indexer/parser.js.map +1 -1
  67. package/dist/indexer/stages/source-index.d.ts.map +1 -1
  68. package/dist/indexer/stages/source-index.js +5 -3
  69. package/dist/indexer/stages/source-index.js.map +1 -1
  70. package/dist/indexer/walker.d.ts.map +1 -1
  71. package/dist/indexer/walker.js +0 -1
  72. package/dist/indexer/walker.js.map +1 -1
  73. package/dist/lore-server/tools/graph.d.ts +6 -1
  74. package/dist/lore-server/tools/graph.d.ts.map +1 -1
  75. package/dist/lore-server/tools/graph.js +180 -209
  76. package/dist/lore-server/tools/graph.js.map +1 -1
  77. package/dist/process-tracker.d.ts +33 -0
  78. package/dist/process-tracker.d.ts.map +1 -0
  79. package/dist/process-tracker.js +52 -0
  80. package/dist/process-tracker.js.map +1 -0
  81. package/dist/runtime.d.ts +7 -2
  82. package/dist/runtime.d.ts.map +1 -1
  83. package/dist/runtime.js +23 -13
  84. package/dist/runtime.js.map +1 -1
  85. package/package.json +8 -5
  86. package/dist/indexer/extractors/dart.d.ts +0 -12
  87. package/dist/indexer/extractors/dart.d.ts.map +0 -1
  88. package/dist/indexer/extractors/dart.js +0 -213
  89. 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 hasFilter = args.source_id !== undefined;
70
- const branchClause = args.branch !== undefined ? ' AND f_caller.branch = ?' : '';
71
- const sql = hasFilter
72
- ? `SELECT sr.caller_id AS source_id,
73
- s_caller.name AS source_name,
74
- f_caller.branch AS source_branch,
75
- sr.callee_id AS target_id,
76
- sr.callee_name AS target_name,
77
- sr.call_kind AS call_kind,
78
- sr.call_line + 1 AS line,
79
- CASE
80
- WHEN sr.call_character IS NULL THEN NULL
81
- ELSE sr.call_character + 1
82
- END AS character,
83
- sr.resolution_method AS resolution_method,
84
- sr.definition_path AS definition_path,
85
- sr.definition_line AS definition_line,
86
- sr.definition_character AS definition_character
87
- FROM symbol_refs sr
88
- JOIN symbols s_caller ON s_caller.id = sr.caller_id
89
- JOIN files f_caller ON f_caller.id = s_caller.file_id
90
- WHERE sr.caller_id = ?${branchClause}
91
- LIMIT ?`
92
- : `SELECT sr.caller_id AS source_id,
93
- s_caller.name AS source_name,
94
- f_caller.branch AS source_branch,
95
- sr.callee_id AS target_id,
96
- sr.callee_name AS target_name,
97
- sr.call_kind AS call_kind,
98
- sr.call_line + 1 AS line,
99
- CASE
100
- WHEN sr.call_character IS NULL THEN NULL
101
- ELSE sr.call_character + 1
102
- END AS character,
103
- sr.resolution_method AS resolution_method,
104
- sr.definition_path AS definition_path,
105
- sr.definition_line AS definition_line,
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 hasFilter = args.source_id !== undefined;
127
- const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
128
- const sql = hasFilter
129
- ? `SELECT fi.file_id AS source_id,
130
- f_src.path AS source_name,
131
- f_src.branch AS source_branch,
132
- fi.resolved_id AS target_id,
133
- COALESCE(f_dst.path, fi.raw_import) AS target_name
134
- FROM file_imports fi
135
- JOIN files f_src ON f_src.id = fi.file_id
136
- LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
137
- WHERE fi.file_id = ?${branchClause}
138
- LIMIT ?`
139
- : `SELECT fi.file_id AS source_id,
140
- f_src.path AS source_name,
141
- f_src.branch AS source_branch,
142
- fi.resolved_id AS target_id,
143
- COALESCE(f_dst.path, fi.raw_import) AS target_name
144
- FROM file_imports fi
145
- JOIN files f_src ON f_src.id = fi.file_id
146
- LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
147
- WHERE 1=1${branchClause}
148
- LIMIT ?`;
149
- const edgeParams = hasFilter
150
- ? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
151
- : (args.branch !== undefined ? [args.branch, limit] : [limit]);
152
- const edges = db.prepare(sql).all(...edgeParams);
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 hasFilter = args.source_id !== undefined;
161
- const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
162
- const sql = hasFilter
163
- ? `SELECT DISTINCT
164
- m_src.id AS source_id,
165
- m_src.name AS source_name,
166
- f_src.branch AS source_branch,
167
- m_dst.id AS target_id,
168
- COALESCE(m_dst.name, fi.raw_import) AS target_name
169
- FROM file_imports fi
170
- JOIN files f_src ON f_src.id = fi.file_id
171
- JOIN file_modules fm_src ON fm_src.file_id = f_src.id
172
- JOIN modules m_src ON m_src.id = fm_src.module_id
173
- LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
174
- LEFT JOIN file_modules fm_dst ON fm_dst.file_id = f_dst.id
175
- LEFT JOIN modules m_dst ON m_dst.id = fm_dst.module_id
176
- WHERE m_src.id = ?${branchClause}
177
- LIMIT ?`
178
- : `SELECT DISTINCT
179
- m_src.id AS source_id,
180
- m_src.name AS source_name,
181
- f_src.branch AS source_branch,
182
- m_dst.id AS target_id,
183
- COALESCE(m_dst.name, fi.raw_import) AS target_name
184
- FROM file_imports fi
185
- JOIN files f_src ON f_src.id = fi.file_id
186
- JOIN file_modules fm_src ON fm_src.file_id = f_src.id
187
- JOIN modules m_src ON m_src.id = fm_src.module_id
188
- LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
189
- LEFT JOIN file_modules fm_dst ON fm_dst.file_id = f_dst.id
190
- LEFT JOIN modules m_dst ON m_dst.id = fm_dst.module_id
191
- WHERE 1=1${branchClause}
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 hasFilter = args.source_id !== undefined;
202
- const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
203
- const sql = hasFilter
204
- ? `SELECT rel.source_symbol_id AS source_id,
205
- s_src.name AS source_name,
206
- f_src.branch AS source_branch,
207
- rel.target_symbol_id AS target_id,
208
- COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
209
- rel.line + 1 AS line,
210
- CASE
211
- WHEN rel.character IS NULL THEN NULL
212
- ELSE rel.character + 1
213
- END AS character,
214
- rel.resolution_method AS resolution_method,
215
- rel.definition_path AS definition_path,
216
- rel.definition_line AS definition_line,
217
- rel.definition_character AS definition_character
218
- FROM symbol_relationships rel
219
- JOIN symbols s_src ON s_src.id = rel.source_symbol_id
220
- JOIN files f_src ON f_src.id = s_src.file_id
221
- LEFT JOIN symbols s_dst ON s_dst.id = rel.target_symbol_id
222
- WHERE rel.relationship_type IN ('extends', 'implements')
223
- AND rel.source_symbol_id = ?${branchClause}
224
- LIMIT ?`
225
- : `SELECT rel.source_symbol_id AS source_id,
226
- s_src.name AS source_name,
227
- f_src.branch AS source_branch,
228
- rel.target_symbol_id AS target_id,
229
- COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
230
- rel.line + 1 AS line,
231
- CASE
232
- WHEN rel.character IS NULL THEN NULL
233
- ELSE rel.character + 1
234
- END AS character,
235
- rel.resolution_method AS resolution_method,
236
- rel.definition_path AS definition_path,
237
- rel.definition_line AS definition_line,
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 hasFilter = args.source_id !== undefined;
254
- const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
255
- const sql = hasFilter
256
- ? `SELECT tr.symbol_id AS source_id,
257
- COALESCE(s_src.name, '') AS source_name,
258
- f_src.branch AS source_branch,
259
- tr.type_id AS target_id,
260
- COALESCE(s_dst.name, tr.type_name) AS target_name,
261
- tr.ref_kind AS ref_kind,
262
- tr.ref_line + 1 AS line,
263
- CASE
264
- WHEN tr.ref_character IS NULL THEN NULL
265
- ELSE tr.ref_character + 1
266
- END AS character,
267
- tr.resolution_method AS resolution_method,
268
- tr.definition_path AS definition_path,
269
- tr.definition_line AS definition_line,
270
- tr.definition_character AS definition_character
271
- FROM type_refs tr
272
- JOIN files f_src ON f_src.id = tr.file_id
273
- LEFT JOIN symbols s_src ON s_src.id = tr.symbol_id
274
- LEFT JOIN symbols s_dst ON s_dst.id = tr.type_id
275
- WHERE tr.symbol_id = ?${branchClause}
276
- LIMIT ?`
277
- : `SELECT tr.symbol_id AS source_id,
278
- COALESCE(s_src.name, '') AS source_name,
279
- f_src.branch AS source_branch,
280
- tr.type_id AS target_id,
281
- COALESCE(s_dst.name, tr.type_name) AS target_name,
282
- tr.ref_kind AS ref_kind,
283
- tr.ref_line + 1 AS line,
284
- CASE
285
- WHEN tr.ref_character IS NULL THEN NULL
286
- ELSE tr.ref_character + 1
287
- END AS character,
288
- tr.resolution_method AS resolution_method,
289
- tr.definition_path AS definition_path,
290
- tr.definition_line AS definition_line,
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":"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"}
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 call
84
- * `shutdown()` and exit. Convenience for CLI entry points.
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
  }
@@ -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;AAIzD,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;;;OAGG;IACH,qBAAqB,IAAI,IAAI;CAkB9B"}
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"}