@reqlan/analytical 0.5.4 → 0.6.1

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 (77) hide show
  1. package/README.md +22 -3
  2. package/out/analysis/git-dates-analyser.js +41 -12
  3. package/out/analysis/git-dates-analyser.js.map +1 -1
  4. package/out/core/analytical-store.d.ts +9 -2
  5. package/out/core/analytical-store.js +7 -5
  6. package/out/core/analytical-store.js.map +1 -1
  7. package/out/core/application-memory.d.ts +17 -2
  8. package/out/core/application-memory.js +23 -5
  9. package/out/core/application-memory.js.map +1 -1
  10. package/out/core/base-discovery.d.ts +40 -0
  11. package/out/core/base-discovery.js +166 -0
  12. package/out/core/base-discovery.js.map +1 -0
  13. package/out/core/context-model.d.ts +17 -0
  14. package/out/core/context-model.js.map +1 -1
  15. package/out/core/create-base.d.ts +11 -0
  16. package/out/core/create-base.js +33 -0
  17. package/out/core/create-base.js.map +1 -0
  18. package/out/core/rqignore.d.ts +25 -0
  19. package/out/core/rqignore.js +149 -0
  20. package/out/core/rqignore.js.map +1 -0
  21. package/out/core/types.d.ts +5 -1
  22. package/out/core/types.js.map +1 -1
  23. package/out/create-runtime.d.ts +29 -4
  24. package/out/create-runtime.js +47 -8
  25. package/out/create-runtime.js.map +1 -1
  26. package/out/export/html-export-assets.d.ts +2 -2
  27. package/out/export/html-export-assets.js +259 -239
  28. package/out/export/html-export-assets.js.map +1 -1
  29. package/out/graph/physics-core.d.ts +141 -0
  30. package/out/graph/physics-core.js +237 -0
  31. package/out/graph/physics-core.js.map +1 -0
  32. package/out/headless-index-service.d.ts +6 -23
  33. package/out/headless-index-service.js +5 -171
  34. package/out/headless-index-service.js.map +1 -1
  35. package/out/index-store/base-registry.d.ts +57 -0
  36. package/out/index-store/base-registry.js +192 -0
  37. package/out/index-store/base-registry.js.map +1 -0
  38. package/out/index-store/index-diagnostics-store.d.ts +72 -0
  39. package/out/index-store/index-diagnostics-store.js +238 -0
  40. package/out/index-store/index-diagnostics-store.js.map +1 -0
  41. package/out/index-store/index-file-error.d.ts +16 -0
  42. package/out/index-store/index-file-error.js +27 -0
  43. package/out/index-store/index-file-error.js.map +1 -0
  44. package/out/index-store/index-parse-issues.d.ts +9 -0
  45. package/out/index-store/index-parse-issues.js +62 -0
  46. package/out/index-store/index-parse-issues.js.map +1 -0
  47. package/out/index-store/index-status.d.ts +20 -0
  48. package/out/index-store/index-status.js +2 -0
  49. package/out/index-store/index-status.js.map +1 -0
  50. package/out/index-store/overview-coverage.d.ts +23 -0
  51. package/out/index-store/overview-coverage.js +254 -0
  52. package/out/index-store/overview-coverage.js.map +1 -0
  53. package/out/index-store/schema.d.ts +1 -1
  54. package/out/index-store/schema.js +4 -1
  55. package/out/index-store/schema.js.map +1 -1
  56. package/out/index-store/sqlite-store.d.ts +31 -2
  57. package/out/index-store/sqlite-store.js +152 -13
  58. package/out/index-store/sqlite-store.js.map +1 -1
  59. package/out/index-store/webview-table-queries.d.ts +65 -1
  60. package/out/index-store/webview-table-queries.js +188 -26
  61. package/out/index-store/webview-table-queries.js.map +1 -1
  62. package/out/index-store/workspace-index-file.d.ts +27 -0
  63. package/out/index-store/workspace-index-file.js +98 -0
  64. package/out/index-store/workspace-index-file.js.map +1 -0
  65. package/out/index-store/workspace-index-sync.d.ts +53 -0
  66. package/out/index-store/workspace-index-sync.js +164 -0
  67. package/out/index-store/workspace-index-sync.js.map +1 -0
  68. package/out/index-store/workspace-index.d.ts +80 -0
  69. package/out/index-store/workspace-index.js +525 -0
  70. package/out/index-store/workspace-index.js.map +1 -0
  71. package/out/index-store/workspace-mtime.d.ts +14 -0
  72. package/out/index-store/workspace-mtime.js +56 -0
  73. package/out/index-store/workspace-mtime.js.map +1 -0
  74. package/out/index.d.ts +25 -6
  75. package/out/index.js +12 -3
  76. package/out/index.js.map +1 -1
  77. package/package.json +7 -2
@@ -38,6 +38,45 @@ export function hasMeaningfulAttribute(attributes, key) {
38
38
  }
39
39
  return false;
40
40
  }
41
+ function findColumnFilter(filters, column) {
42
+ return filters?.find(filter => filter.column === column);
43
+ }
44
+ function pushTextLike(clauses, params, expression, text) {
45
+ if (!text?.trim()) {
46
+ return;
47
+ }
48
+ clauses.push(`${expression} LIKE ?`);
49
+ params.push(`%${text.trim()}%`);
50
+ }
51
+ function pushSelectedIn(clauses, params, expression, selected) {
52
+ if (!selected || selected.length === 0) {
53
+ return;
54
+ }
55
+ clauses.push(`${expression} IN (${selected.map(() => '?').join(', ')})`);
56
+ params.push(...selected);
57
+ }
58
+ /** Map References table view types back to edge kinds for SQL filters. */
59
+ export function edgeKindsForReferenceViewTypes(types) {
60
+ const kinds = new Set();
61
+ for (const type of types) {
62
+ switch (type) {
63
+ case 'file':
64
+ kinds.add('file_reference');
65
+ break;
66
+ case 'comment':
67
+ kinds.add('comment_link');
68
+ break;
69
+ case 'sub-idea':
70
+ kinds.add('references');
71
+ kinds.add('import');
72
+ kinds.add('ideaset_member');
73
+ break;
74
+ default:
75
+ kinds.add(type);
76
+ }
77
+ }
78
+ return [...kinds];
79
+ }
41
80
  export function buildIdeasWhereClause(query) {
42
81
  const clauses = ["i.kind != 'ideaset'"];
43
82
  const params = [];
@@ -85,38 +124,66 @@ export function buildIdeasWhereClause(query) {
85
124
  )`);
86
125
  params.push(path, path, path, path, path, path, path);
87
126
  }
127
+ const titleFilter = findColumnFilter(query.columnFilters, 'title');
128
+ pushTextLike(clauses, params, 'i.name', titleFilter?.text);
129
+ const pathFilter = findColumnFilter(query.columnFilters, 'path');
130
+ pushTextLike(clauses, params, 'i.file_uri', pathFilter?.text);
131
+ const bodyFilter = findColumnFilter(query.columnFilters, 'body');
132
+ pushTextLike(clauses, params, 'i.summary', bodyFilter?.text);
133
+ const kindFilter = findColumnFilter(query.columnFilters, 'kind');
134
+ pushSelectedIn(clauses, params, 'i.kind', kindFilter?.selected);
88
135
  return { sql: clauses.join(' AND '), params };
89
136
  }
90
137
  export function buildIdeasOrderClause(query) {
91
138
  const direction = query.sortDir === 'desc' ? 'DESC' : 'ASC';
139
+ let primary;
92
140
  switch (query.sortBy) {
93
141
  case 'title':
94
- return `i.name ${direction}, i.file_uri ASC, i.line_start ASC`;
142
+ primary = `i.name ${direction}, i.file_uri ASC, i.line_start ASC`;
143
+ break;
95
144
  case 'body':
96
- return `i.summary ${direction}, i.name ASC`;
145
+ primary = `i.summary ${direction}, i.name ASC`;
146
+ break;
147
+ case 'kind':
148
+ primary = `i.kind ${direction}, i.name ASC`;
149
+ break;
97
150
  case 'outRefs':
98
- return `outbound_count ${direction}, i.name ASC`;
151
+ primary = `outbound_count ${direction}, i.name ASC`;
152
+ break;
99
153
  case 'inRefs':
100
- return `inbound_count ${direction}, i.name ASC`;
154
+ primary = `inbound_count ${direction}, i.name ASC`;
155
+ break;
101
156
  case 'path':
102
157
  default:
103
158
  if (query.sortBy?.startsWith('attr:')) {
104
159
  const key = query.sortBy.slice('attr:'.length);
105
160
  const path = attributeJsonPath(key);
106
- return `json_extract(i.attributes_json, '${path.replace(/'/g, "''")}') ${direction}, i.name ASC`;
161
+ primary = `json_extract(i.attributes_json, '${path.replace(/'/g, "''")}') ${direction}, i.name ASC`;
162
+ }
163
+ else {
164
+ primary = `i.file_uri ${direction}, i.line_start ASC`;
107
165
  }
108
- return `i.file_uri ${direction}, i.line_start ASC`;
109
166
  }
167
+ if (query.groupBy === 'kind') {
168
+ return `i.kind ASC, ${primary}`;
169
+ }
170
+ return primary;
110
171
  }
111
172
  export function buildIdeasetsWhereClause(query) {
112
- if (!query.search?.trim()) {
113
- return { sql: '1 = 1', params: [] };
173
+ const clauses = ['1 = 1'];
174
+ const params = [];
175
+ if (query.search?.trim()) {
176
+ const pattern = `%${query.search.trim()}%`;
177
+ clauses.push('(COALESCE(name, file_uri) LIKE ? OR file_uri LIKE ? OR kind LIKE ?)');
178
+ params.push(pattern, pattern, pattern);
114
179
  }
115
- const pattern = `%${query.search.trim()}%`;
116
- return {
117
- sql: '(COALESCE(name, file_uri) LIKE ? OR file_uri LIKE ? OR kind LIKE ?)',
118
- params: [pattern, pattern, pattern]
119
- };
180
+ const nameFilter = findColumnFilter(query.columnFilters, 'name');
181
+ pushTextLike(clauses, params, 'COALESCE(name, file_uri)', nameFilter?.text);
182
+ const pathFilter = findColumnFilter(query.columnFilters, 'path');
183
+ pushTextLike(clauses, params, 'file_uri', pathFilter?.text);
184
+ const kindFilter = findColumnFilter(query.columnFilters, 'kind');
185
+ pushSelectedIn(clauses, params, 'kind', kindFilter?.selected);
186
+ return { sql: clauses.join(' AND '), params };
120
187
  }
121
188
  export function buildIdeasetsOrderClause(query) {
122
189
  const direction = query.sortDir === 'desc' ? 'DESC' : 'ASC';
@@ -133,33 +200,69 @@ export function buildIdeasetsOrderClause(query) {
133
200
  }
134
201
  }
135
202
  export function buildReferencesWhereClause(query) {
136
- if (!query.search?.trim()) {
137
- return { sql: '1 = 1', params: [] };
138
- }
139
- const pattern = `%${query.search.trim()}%`;
140
- return {
141
- sql: `(
203
+ const clauses = ['1 = 1'];
204
+ const params = [];
205
+ if (query.search?.trim()) {
206
+ const pattern = `%${query.search.trim()}%`;
207
+ clauses.push(`(
142
208
  si.name LIKE ? OR si.file_uri LIKE ?
143
209
  OR COALESCE(ti.name, '') LIKE ? OR COALESCE(ti.file_uri, '') LIKE ?
144
210
  OR COALESCE(e.target_file, '') LIKE ? OR COALESCE(e.label, '') LIKE ?
145
211
  OR e.kind LIKE ?
146
- )`,
147
- params: [pattern, pattern, pattern, pattern, pattern, pattern, pattern]
148
- };
212
+ )`);
213
+ params.push(pattern, pattern, pattern, pattern, pattern, pattern, pattern);
214
+ }
215
+ const sourceFilter = findColumnFilter(query.columnFilters, 'source');
216
+ if (sourceFilter?.text?.trim()) {
217
+ const pattern = `%${sourceFilter.text.trim()}%`;
218
+ clauses.push('(si.name LIKE ? OR si.file_uri LIKE ?)');
219
+ params.push(pattern, pattern);
220
+ }
221
+ const targetFilter = findColumnFilter(query.columnFilters, 'target');
222
+ if (targetFilter?.text?.trim()) {
223
+ const pattern = `%${targetFilter.text.trim()}%`;
224
+ clauses.push('(COALESCE(ti.name, e.target_file, e.label, \'\') LIKE ? OR COALESCE(ti.file_uri, e.target_file, \'\') LIKE ?)');
225
+ params.push(pattern, pattern);
226
+ }
227
+ const inRqFilter = findColumnFilter(query.columnFilters, 'inRq');
228
+ if (inRqFilter?.selected?.length) {
229
+ const wantsYes = inRqFilter.selected.includes('yes');
230
+ const wantsNo = inRqFilter.selected.includes('no');
231
+ if (wantsYes && !wantsNo) {
232
+ clauses.push('e.target_id IS NOT NULL');
233
+ }
234
+ else if (wantsNo && !wantsYes) {
235
+ clauses.push('e.target_id IS NULL');
236
+ }
237
+ }
238
+ const typeFilter = findColumnFilter(query.columnFilters, 'type');
239
+ if (typeFilter?.selected?.length) {
240
+ const kinds = edgeKindsForReferenceViewTypes(typeFilter.selected);
241
+ pushSelectedIn(clauses, params, 'e.kind', kinds);
242
+ }
243
+ return { sql: clauses.join(' AND '), params };
149
244
  }
150
245
  export function buildReferencesOrderClause(query) {
151
246
  const direction = query.sortDir === 'desc' ? 'DESC' : 'ASC';
247
+ let primary;
152
248
  switch (query.sortBy) {
153
249
  case 'target':
154
- return `COALESCE(ti.name, e.target_file, e.label, '') ${direction}, si.file_uri ASC`;
250
+ primary = `COALESCE(ti.name, e.target_file, e.label, '') ${direction}, si.file_uri ASC`;
251
+ break;
155
252
  case 'inRq':
156
- return `(CASE WHEN e.target_id IS NULL THEN 0 ELSE 1 END) ${direction}, si.file_uri ASC`;
253
+ primary = `(CASE WHEN e.target_id IS NULL THEN 0 ELSE 1 END) ${direction}, si.file_uri ASC`;
254
+ break;
157
255
  case 'type':
158
- return `e.kind ${direction}, si.file_uri ASC`;
256
+ primary = `e.kind ${direction}, si.file_uri ASC`;
257
+ break;
159
258
  case 'source':
160
259
  default:
161
- return `si.file_uri ${direction}, si.line_start ASC, e.id ASC`;
260
+ primary = `si.file_uri ${direction}, si.line_start ASC, e.id ASC`;
162
261
  }
262
+ if (query.groupBy === 'type') {
263
+ return `e.kind ASC, ${primary}`;
264
+ }
265
+ return primary;
163
266
  }
164
267
  export function buildReferenceFilterClause(filterKey) {
165
268
  if (filterKey.startsWith('outbound:idea:')) {
@@ -196,4 +299,63 @@ export function buildReferenceFilterClause(filterKey) {
196
299
  }
197
300
  return { sql: '1 = 1', params: [] };
198
301
  }
302
+ export function aggregateAttributesFromRows(rows) {
303
+ const byKey = new Map();
304
+ for (const row of rows) {
305
+ const attributes = parseAttributes(row.attributes_json);
306
+ for (const [key, rawValue] of Object.entries(attributes)) {
307
+ if (!hasMeaningfulAttribute(attributes, key)) {
308
+ continue;
309
+ }
310
+ const bucket = byKey.get(key) ?? {
311
+ key,
312
+ ideaIds: new Set(),
313
+ values: new Map()
314
+ };
315
+ bucket.ideaIds.add(row.id);
316
+ const formatted = formatAttributeValue(rawValue) || '(empty)';
317
+ bucket.values.set(formatted, (bucket.values.get(formatted) ?? 0) + 1);
318
+ byKey.set(key, bucket);
319
+ }
320
+ }
321
+ return [...byKey.values()];
322
+ }
323
+ export function filterAndPageAttributes(aggregates, query) {
324
+ const search = query.search?.trim().toLowerCase();
325
+ const keyFilter = findColumnFilter(query.columnFilters, 'key')?.text?.trim().toLowerCase();
326
+ let filtered = aggregates.map(aggregate => {
327
+ const sampleValues = [...aggregate.values.entries()]
328
+ .sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))
329
+ .slice(0, 8)
330
+ .map(([value]) => value);
331
+ return {
332
+ key: aggregate.key,
333
+ ideaCount: aggregate.ideaIds.size,
334
+ valueCount: aggregate.values.size,
335
+ sampleValues
336
+ };
337
+ });
338
+ if (search) {
339
+ filtered = filtered.filter(row => row.key.toLowerCase().includes(search) ||
340
+ row.sampleValues.some(value => value.toLowerCase().includes(search)));
341
+ }
342
+ if (keyFilter) {
343
+ filtered = filtered.filter(row => row.key.toLowerCase().includes(keyFilter));
344
+ }
345
+ const direction = query.sortDir === 'desc' ? -1 : 1;
346
+ filtered.sort((left, right) => {
347
+ switch (query.sortBy) {
348
+ case 'ideaCount':
349
+ return (left.ideaCount - right.ideaCount) * direction || left.key.localeCompare(right.key);
350
+ case 'valueCount':
351
+ return (left.valueCount - right.valueCount) * direction || left.key.localeCompare(right.key);
352
+ case 'key':
353
+ default:
354
+ return left.key.localeCompare(right.key) * direction;
355
+ }
356
+ });
357
+ const total = filtered.length;
358
+ const start = query.page * query.pageSize;
359
+ return { total, rows: filtered.slice(start, start + query.pageSize) };
360
+ }
199
361
  //# sourceMappingURL=webview-table-queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webview-table-queries.js","sourceRoot":"","sources":["../../src/index-store/webview-table-queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webview-table-queries.js","sourceRoot":"","sources":["../../src/index-store/webview-table-queries.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiGnD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IACzC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA8C;IAC/E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,IAAI,GAAG,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,cAAsB,EACtB,IAAc;IAEd,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,WAAW,CACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAChE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAA4B,EAAE,GAAW;IAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAmC,EAAE,MAAc;IACzE,OAAO,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CACjB,OAAiB,EACjB,MAAiB,EACjB,UAAkB,EAClB,IAAwB;IAExB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CACnB,OAAiB,EACjB,MAAiB,EACjB,UAAkB,EAClB,QAA8B;IAE9B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,QAAQ,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,8BAA8B,CAAC,KAAe;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,MAAM;gBACP,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC5B,MAAM;YACV,KAAK,SAAS;gBACV,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC1B,MAAM;YACV,KAAK,UAAU;gBACX,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpB,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC5B,MAAM;YACV;gBACI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IACxD,MAAM,OAAO,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACxC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;UAeX,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;UAcX,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEhE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,IAAI,OAAe,CAAC;IACpB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,OAAO;YACR,OAAO,GAAG,UAAU,SAAS,oCAAoC,CAAC;YAClE,MAAM;QACV,KAAK,MAAM;YACP,OAAO,GAAG,aAAa,SAAS,cAAc,CAAC;YAC/C,MAAM;QACV,KAAK,MAAM;YACP,OAAO,GAAG,UAAU,SAAS,cAAc,CAAC;YAC5C,MAAM;QACV,KAAK,SAAS;YACV,OAAO,GAAG,kBAAkB,SAAS,cAAc,CAAC;YACpD,MAAM;QACV,KAAK,QAAQ;YACT,OAAO,GAAG,iBAAiB,SAAS,cAAc,CAAC;YACnD,MAAM;QACV,KAAK,MAAM,CAAC;QACZ;YACI,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACpC,OAAO,GAAG,oCAAoC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,SAAS,cAAc,CAAC;YACxG,CAAC;iBAAM,CAAC;gBACJ,OAAO,GAAG,cAAc,SAAS,oBAAoB,CAAC;YAC1D,CAAC;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,eAAe,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAC9D,MAAM,OAAO,GAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM;YACP,OAAO,4BAA4B,SAAS,gBAAgB,CAAC;QACjE,KAAK,MAAM;YACP,OAAO,QAAQ,SAAS,gBAAgB,CAAC;QAC7C,KAAK,SAAS;YACV,OAAO,gBAAgB,SAAS,gBAAgB,CAAC;QACrD,KAAK,MAAM,CAAC;QACZ;YACI,OAAO,YAAY,SAAS,kBAAkB,CAAC;IACvD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAA2B;IAClE,MAAM,OAAO,GAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;;;;;UAKX,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC;QAC9H,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,8BAA8B,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAA2B;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,IAAI,OAAe,CAAC;IACpB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,QAAQ;YACT,OAAO,GAAG,iDAAiD,SAAS,mBAAmB,CAAC;YACxF,MAAM;QACV,KAAK,MAAM;YACP,OAAO,GAAG,qDAAqD,SAAS,mBAAmB,CAAC;YAC5F,MAAM;QACV,KAAK,MAAM;YACP,OAAO,GAAG,UAAU,SAAS,mBAAmB,CAAC;YACjD,MAAM;QACV,KAAK,QAAQ,CAAC;QACd;YACI,OAAO,GAAG,eAAe,SAAS,+BAA+B,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,eAAe,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IACxD,IAAI,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;YACH,GAAG,EAAE;;;cAGH;YACF,MAAM,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC;IACN,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO;YACH,GAAG,EAAE;;;;;cAKH;YACF,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;SACnC,CAAC;IACN,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO;YACH,GAAG,EAAE;;;cAGH;YACF,MAAM,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC;IACN,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,IAAoD;IAEpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC3C,SAAS;YACb,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;gBAC7B,GAAG;gBACH,OAAO,EAAE,IAAI,GAAG,EAAU;gBAC1B,MAAM,EAAE,IAAI,GAAG,EAAkB;aACpC,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,UAAgC,EAChC,KAA2B;IAE3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3F,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QACtC,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5E,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO;YACH,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;YACjC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI;YACjC,YAAY;SACa,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACT,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7B,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACvE,CAAC;IACN,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACZ,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1B,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,WAAW;gBACZ,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/F,KAAK,YAAY;gBACb,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjG,KAAK,KAAK,CAAC;YACX;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC7D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Parse one `.rq` file and upsert ideas/edges into the index store.
3
+ *
4
+ * rq:["../../../reqlan rq/indexer/indexer.rq".index]
5
+ * rq:["../../../reqlan rq/indexer/indexer.rq".nonblocking_index]
6
+ * rq:["../../../reqlan rq/extension/features-graph-analysers.rq".indexing_incrementality]
7
+ * rq:["../../../reqlan rq/extension/features-index-diagnostics.rq".index_diagnostics_metrics]
8
+ */
9
+ import type { LangiumDocument } from 'langium';
10
+ import type { AnalyticalStore } from '../core/analytical-store.js';
11
+ import type { IndexFileOutcome } from './index-diagnostics-store.js';
12
+ import type { SqliteIndexStore } from './sqlite-store.js';
13
+ export interface IndexOneFileDeps {
14
+ sqlite: SqliteIndexStore;
15
+ analytical: AnalyticalStore;
16
+ workspaceRoot: string;
17
+ toIndexedUri: (filePath: string) => string;
18
+ parseDocument: (filePath: string) => Promise<LangiumDocument>;
19
+ notifyCatalogUpdated: () => void;
20
+ }
21
+ export interface IndexOneFileResult {
22
+ fileUri: string;
23
+ durationMs: number;
24
+ outcome: IndexFileOutcome;
25
+ pathDepth: number;
26
+ }
27
+ export declare function indexOneFile(deps: IndexOneFileDeps, filePath: string): Promise<IndexOneFileResult>;
@@ -0,0 +1,98 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { normalizeIndexedDocument } from '../core/workspace-paths.js';
3
+ import { pathDepthFromUri } from './index-diagnostics-store.js';
4
+ import { extractIndexedDocument } from './idea-extractor.js';
5
+ import { collectParseIssues, fileIssue, fileIssueFromError, unnamedIdeaIssues, validIdeas } from './index-parse-issues.js';
6
+ export async function indexOneFile(deps, filePath) {
7
+ const started = performance.now();
8
+ const fileUri = deps.toIndexedUri(filePath);
9
+ const pathDepth = pathDepthFromUri(fileUri);
10
+ const analytical = deps.analytical.getState();
11
+ const finish = (outcome) => ({
12
+ fileUri,
13
+ durationMs: performance.now() - started,
14
+ outcome,
15
+ pathDepth
16
+ });
17
+ let fileMtimeMs;
18
+ try {
19
+ fileMtimeMs = Math.trunc((await stat(filePath)).mtimeMs);
20
+ }
21
+ catch {
22
+ fileMtimeMs = undefined;
23
+ }
24
+ let document;
25
+ try {
26
+ document = await deps.parseDocument(filePath);
27
+ }
28
+ catch (error) {
29
+ analytical.recordFileIndexIssues(fileUri, [
30
+ fileIssueFromError('parse', error, 'Could not read or build document')
31
+ ]);
32
+ return finish('error');
33
+ }
34
+ const parseIssues = collectParseIssues(document);
35
+ const extractedRaw = extractIndexedDocument(document);
36
+ if (!extractedRaw) {
37
+ const issues = parseIssues.length > 0
38
+ ? parseIssues
39
+ : [fileIssue('No reqlan model found in file', 'extract')];
40
+ analytical.recordFileIndexIssues(fileUri, issues);
41
+ return finish('error');
42
+ }
43
+ const extracted = deps.workspaceRoot
44
+ ? normalizeIndexedDocument(extractedRaw, deps.workspaceRoot)
45
+ : extractedRaw;
46
+ const ideaNames = extracted.ideas.map(idea => idea.name).filter(Boolean);
47
+ const existingHash = await deps.sqlite.getDocumentHash(fileUri);
48
+ const indexingIssues = [...parseIssues, ...unnamedIdeaIssues(extracted.ideas)];
49
+ const ideasToPersist = validIdeas(extracted.ideas);
50
+ if (existingHash === extracted.contentHash && indexingIssues.length === 0) {
51
+ const storedEdges = await deps.sqlite.countEdgesFromFile(fileUri);
52
+ if (storedEdges >= extracted.edges.length) {
53
+ // Refresh stored mtime even when content is unchanged so soft sync can skip next time.
54
+ if (fileMtimeMs !== undefined) {
55
+ await deps.sqlite.updateDocumentMtime(fileUri, fileMtimeMs);
56
+ }
57
+ analytical.clearFileIndexIssuesForFile(fileUri);
58
+ return finish('mtime_refresh');
59
+ }
60
+ }
61
+ for (const idea of ideasToPersist) {
62
+ idea.contentHash = extracted.contentHash;
63
+ }
64
+ let persistFailed = false;
65
+ if (ideasToPersist.length > 0) {
66
+ try {
67
+ await deps.sqlite.upsertDocument(fileUri, extracted.contentHash, ideasToPersist, extracted.edges, fileMtimeMs);
68
+ }
69
+ catch (error) {
70
+ persistFailed = true;
71
+ indexingIssues.push(fileIssueFromError('persist', error, 'Failed to persist ideas to index', 0, 0, ideaNames));
72
+ }
73
+ }
74
+ else if (existingHash !== undefined) {
75
+ // File no longer hosts ideas (e.g. after delete/move) — clear stale rows.
76
+ await deps.sqlite.removeDocument(fileUri);
77
+ }
78
+ if (indexingIssues.length > 0) {
79
+ analytical.recordFileIndexIssues(fileUri, indexingIssues);
80
+ if (ideasToPersist.length === 0 || persistFailed) {
81
+ deps.notifyCatalogUpdated();
82
+ return finish('error');
83
+ }
84
+ }
85
+ else {
86
+ analytical.clearFileIndexIssuesForFile(fileUri);
87
+ }
88
+ analytical.recordDocumentUpdate(fileUri, ideasToPersist.length, ideasToPersist
89
+ .filter(idea => idea.kind !== 'ideaset')
90
+ .map(idea => ({
91
+ id: idea.id,
92
+ name: idea.name,
93
+ lineStart: idea.lineStart
94
+ })));
95
+ deps.notifyCatalogUpdated();
96
+ return finish('persisted');
97
+ }
98
+ //# sourceMappingURL=workspace-index-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-index-file.js","sourceRoot":"","sources":["../../src/index-store/workspace-index-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Soft workspace sync and idle staleness check implementations.
3
+ *
4
+ * Soft sync loads document mtimes once (`listDocumentMtimes`) then skips
5
+ * unchanged files in memory — not one SQLite round-trip per file.
6
+ *
7
+ * rq:["../../../reqlan rq/indexer/indexer.rq".nonblocking_index]
8
+ * rq:["../../../reqlan rq/extension/features-graph-analysers.rq".indexing_incrementality]
9
+ * rq:["../../../reqlan rq/extension/features-graph-analysers.rq".indexing_trigger_auto]
10
+ * rq:["../../../reqlan rq/extension/features-graph-analysers.rq".indexing_trigger_open]
11
+ * rq:["../../../reqlan rq/extension/features-index-diagnostics.rq".index_diagnostics_metrics]
12
+ * rq:["../../../reqlan rq/indexer/indexer.rq".index_diagnostics_timing]
13
+ */
14
+ import type { AnalyticalStore } from '../core/analytical-store.js';
15
+ import { type IndexDiagnosticsStore, type IndexTimingTrigger } from './index-diagnostics-store.js';
16
+ import type { IndexSyncProgress } from './index-status.js';
17
+ import type { SqliteIndexStore } from './sqlite-store.js';
18
+ import { type IndexOneFileDeps } from './workspace-index-file.js';
19
+ export interface IdleCheckResult {
20
+ checked: number;
21
+ indexed: number;
22
+ removed: number;
23
+ }
24
+ export interface SoftSyncDeps {
25
+ sqlite: SqliteIndexStore;
26
+ analytical: AnalyticalStore;
27
+ toIndexedUri: (filePath: string) => string;
28
+ relativePath: (fileUri: string) => string;
29
+ indexFileDeps: IndexOneFileDeps;
30
+ collectRqFiles: () => Promise<string[]>;
31
+ setRqFilePaths: (paths: string[]) => void;
32
+ isReady: () => boolean;
33
+ getCancelRequested: () => boolean;
34
+ setSyncProgress: (progress: IndexSyncProgress | undefined) => void;
35
+ notifyStatusUpdated: () => void;
36
+ notifyCatalogUpdated: () => void;
37
+ waitForReadyOrError: () => Promise<boolean>;
38
+ diagnostics?: IndexDiagnosticsStore;
39
+ timingTrigger?: IndexTimingTrigger;
40
+ }
41
+ export declare function runSoftSync(deps: SoftSyncDeps, filePaths?: string[]): Promise<boolean>;
42
+ export interface StaleCheckDeps {
43
+ sqlite: SqliteIndexStore;
44
+ toIndexedUri: (filePath: string) => string;
45
+ removeDocuments: (indexedUris: string[]) => Promise<void>;
46
+ syncWorkspace: (filePaths: string[]) => Promise<boolean>;
47
+ syncInFlight: boolean;
48
+ }
49
+ /**
50
+ * Cheap idle pass: one mtime map from SQLite, FS stats for candidates, index only dirty paths.
51
+ * No sync state / progress when nothing is stale.
52
+ */
53
+ export declare function checkStaleFiles(deps: StaleCheckDeps, filePaths: string[]): Promise<IdleCheckResult>;
@@ -0,0 +1,164 @@
1
+ import { pathDepthFromUri } from './index-diagnostics-store.js';
2
+ import { recordCaughtFileIssue } from './index-file-error.js';
3
+ import { indexOneFile } from './workspace-index-file.js';
4
+ import { diffStaleFiles, isUnchangedByMtime } from './workspace-mtime.js';
5
+ export async function runSoftSync(deps, filePaths) {
6
+ const analytical = deps.analytical.getState();
7
+ if (!analytical.dispatchIndex('sync')) {
8
+ return deps.waitForReadyOrError();
9
+ }
10
+ analytical.clearLastError();
11
+ deps.notifyStatusUpdated();
12
+ const runStartedAt = new Date().toISOString();
13
+ const wallStarted = performance.now();
14
+ const fileTimings = [];
15
+ let skippedMtime = 0;
16
+ let indexedFiles = 0;
17
+ let errorFiles = 0;
18
+ let cancelled = false;
19
+ try {
20
+ const files = filePaths ?? await deps.collectRqFiles();
21
+ if (filePaths) {
22
+ deps.setRqFilePaths(filePaths);
23
+ }
24
+ // One SQLite read for the whole pass; skip decisions use the in-memory map.
25
+ const storedMtimes = await deps.sqlite.listDocumentMtimes();
26
+ deps.setSyncProgress({ processed: 0, total: files.length });
27
+ deps.notifyStatusUpdated();
28
+ let processed = 0;
29
+ let currentFile;
30
+ for (const filePath of files) {
31
+ if (deps.getCancelRequested()) {
32
+ cancelled = true;
33
+ break;
34
+ }
35
+ const indexedUri = deps.toIndexedUri(filePath);
36
+ currentFile = deps.relativePath(indexedUri);
37
+ deps.setSyncProgress({ processed, total: files.length, currentFile });
38
+ deps.notifyStatusUpdated();
39
+ try {
40
+ if (await isUnchangedByMtime(filePath, indexedUri, storedMtimes)) {
41
+ skippedMtime += 1;
42
+ fileTimings.push({
43
+ fileUri: indexedUri,
44
+ durationMs: 0,
45
+ outcome: 'mtime_skip',
46
+ pathDepth: pathDepthFromUri(indexedUri)
47
+ });
48
+ }
49
+ else {
50
+ const result = await indexOneFile(deps.indexFileDeps, filePath);
51
+ indexedFiles += 1;
52
+ if (result.outcome === 'error') {
53
+ errorFiles += 1;
54
+ }
55
+ fileTimings.push({
56
+ fileUri: result.fileUri,
57
+ durationMs: result.durationMs,
58
+ outcome: result.outcome,
59
+ pathDepth: result.pathDepth
60
+ });
61
+ }
62
+ }
63
+ catch (error) {
64
+ errorFiles += 1;
65
+ recordCaughtFileIssue(analytical.recordFileIndexIssues, indexedUri, error, `Failed to index ${deps.relativePath(indexedUri)}`);
66
+ fileTimings.push({
67
+ fileUri: indexedUri,
68
+ durationMs: 0,
69
+ outcome: 'error',
70
+ pathDepth: pathDepthFromUri(indexedUri)
71
+ });
72
+ }
73
+ processed += 1;
74
+ deps.setSyncProgress({ processed, total: files.length, currentFile });
75
+ deps.notifyStatusUpdated();
76
+ }
77
+ if (!analytical.dispatchIndex('synced')) {
78
+ analytical.recordIndexError('Index sync finished but state transition to ready failed', undefined, { phase: 'transition' });
79
+ }
80
+ const counts = await deps.sqlite.counts();
81
+ analytical.setIndexReady({ ideaCount: counts.ideas, edgeCount: counts.edges });
82
+ deps.setSyncProgress(undefined);
83
+ deps.notifyCatalogUpdated();
84
+ deps.notifyStatusUpdated();
85
+ await recordDiagnostics(deps, {
86
+ trigger: deps.timingTrigger ?? 'soft_sync',
87
+ startedAt: runStartedAt,
88
+ finishedAt: new Date().toISOString(),
89
+ durationMs: performance.now() - wallStarted,
90
+ totalFiles: files.length,
91
+ skippedMtime,
92
+ indexedFiles,
93
+ errorFiles,
94
+ cancelled,
95
+ sumFileDurationMs: fileTimings.reduce((sum, row) => sum + row.durationMs, 0),
96
+ avgPathDepth: averageDepth(fileTimings),
97
+ files: fileTimings
98
+ });
99
+ return deps.isReady();
100
+ }
101
+ catch (error) {
102
+ analytical.dispatchIndex('fail');
103
+ analytical.recordIndexError('Workspace sync failed', error, { phase: 'sync' });
104
+ deps.setSyncProgress(undefined);
105
+ deps.notifyStatusUpdated();
106
+ await recordDiagnostics(deps, {
107
+ trigger: deps.timingTrigger ?? 'soft_sync',
108
+ startedAt: runStartedAt,
109
+ finishedAt: new Date().toISOString(),
110
+ durationMs: performance.now() - wallStarted,
111
+ totalFiles: fileTimings.length,
112
+ skippedMtime,
113
+ indexedFiles,
114
+ errorFiles: errorFiles + 1,
115
+ cancelled,
116
+ sumFileDurationMs: fileTimings.reduce((sum, row) => sum + row.durationMs, 0),
117
+ avgPathDepth: averageDepth(fileTimings),
118
+ files: fileTimings
119
+ });
120
+ return false;
121
+ }
122
+ }
123
+ /**
124
+ * Cheap idle pass: one mtime map from SQLite, FS stats for candidates, index only dirty paths.
125
+ * No sync state / progress when nothing is stale.
126
+ */
127
+ export async function checkStaleFiles(deps, filePaths) {
128
+ if (deps.syncInFlight) {
129
+ return { checked: 0, indexed: 0, removed: 0 };
130
+ }
131
+ const storedMtimes = await deps.sqlite.listDocumentMtimes();
132
+ const { dirtyPaths, removedUris } = await diffStaleFiles(filePaths, deps.toIndexedUri, storedMtimes);
133
+ if (removedUris.length > 0) {
134
+ await deps.removeDocuments(removedUris);
135
+ }
136
+ if (dirtyPaths.length === 0) {
137
+ return { checked: filePaths.length, indexed: 0, removed: removedUris.length };
138
+ }
139
+ const ok = await deps.syncWorkspace(dirtyPaths);
140
+ return {
141
+ checked: filePaths.length,
142
+ indexed: ok ? dirtyPaths.length : 0,
143
+ removed: removedUris.length
144
+ };
145
+ }
146
+ function averageDepth(files) {
147
+ if (files.length === 0) {
148
+ return undefined;
149
+ }
150
+ const sum = files.reduce((acc, row) => acc + row.pathDepth, 0);
151
+ return sum / files.length;
152
+ }
153
+ async function recordDiagnostics(deps, run) {
154
+ if (!deps.diagnostics) {
155
+ return;
156
+ }
157
+ try {
158
+ await deps.diagnostics.recordSyncRun(run);
159
+ }
160
+ catch {
161
+ // Diagnostics must never fail the sync.
162
+ }
163
+ }
164
+ //# sourceMappingURL=workspace-index-sync.js.map