@reqlan/analytical 0.8.1 → 0.9.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.
- package/README.md +22 -0
- package/out/analysis/contextual-search.d.ts +26 -0
- package/out/analysis/contextual-search.js +94 -0
- package/out/analysis/contextual-search.js.map +1 -0
- package/out/analysis/fuzzy-search.d.ts +24 -0
- package/out/analysis/fuzzy-search.js +254 -0
- package/out/analysis/fuzzy-search.js.map +1 -1
- package/out/analysis/git-dates-analyser.d.ts +3 -0
- package/out/analysis/git-dates-analyser.js +32 -13
- package/out/analysis/git-dates-analyser.js.map +1 -1
- package/out/analysis-api.d.ts +5 -1
- package/out/analysis-api.js +12 -3
- package/out/analysis-api.js.map +1 -1
- package/out/core/base-discovery.js +10 -3
- package/out/core/base-discovery.js.map +1 -1
- package/out/core/context-signals.d.ts +5 -0
- package/out/core/context-signals.js +13 -4
- package/out/core/context-signals.js.map +1 -1
- package/out/core/file-reference-resolve.js +6 -2
- package/out/core/file-reference-resolve.js.map +1 -1
- package/out/core/types.d.ts +8 -0
- package/out/core/types.js.map +1 -1
- package/out/core/workspace-paths.d.ts +1 -0
- package/out/core/workspace-paths.js +9 -5
- package/out/core/workspace-paths.js.map +1 -1
- package/out/export/html-export-assets.d.ts +1 -1
- package/out/export/html-export-assets.js +388 -20
- package/out/export/html-export-assets.js.map +1 -1
- package/out/export/html-export-template.js +15 -0
- package/out/export/html-export-template.js.map +1 -1
- package/out/index-store/file-treatment.d.ts +40 -0
- package/out/index-store/file-treatment.js +144 -0
- package/out/index-store/file-treatment.js.map +1 -0
- package/out/index-store/schema.d.ts +1 -1
- package/out/index-store/schema.js +6 -2
- package/out/index-store/schema.js.map +1 -1
- package/out/index-store/sqlite-store.d.ts +4 -2
- package/out/index-store/sqlite-store.js +39 -21
- package/out/index-store/sqlite-store.js.map +1 -1
- package/out/index-store/webview-graph-queries.d.ts +2 -0
- package/out/index-store/webview-graph-queries.js.map +1 -1
- package/out/index-store/webview-table-queries.d.ts +1 -1
- package/out/index-store/webview-table-queries.js +9 -0
- package/out/index-store/webview-table-queries.js.map +1 -1
- package/out/index-store/workspace-index-file.js +2 -6
- package/out/index-store/workspace-index-file.js.map +1 -1
- package/out/index.d.ts +8 -4
- package/out/index.js +4 -2
- package/out/index.js.map +1 -1
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -30,6 +30,28 @@ npm install @reqlan/analytical
|
|
|
30
30
|
|
|
31
31
|
## Changelog
|
|
32
32
|
|
|
33
|
+
### 0.9.1
|
|
34
|
+
|
|
35
|
+
#### Patch Changes
|
|
36
|
+
|
|
37
|
+
- 45d37df: Fix Windows CLI startup: dynamic import of `C:\...` is protocol `c:`; use `file://` URLs. Treat drive-letter paths as filesystem paths, not URI schemes.
|
|
38
|
+
- Updated dependencies [45d37df]
|
|
39
|
+
- @reqlan/language@1.8.3
|
|
40
|
+
|
|
41
|
+
### 0.9.0
|
|
42
|
+
|
|
43
|
+
#### Minor Changes
|
|
44
|
+
|
|
45
|
+
- 2294beb: minor improvements to graph and search and website
|
|
46
|
+
|
|
47
|
+
### 0.8.2
|
|
48
|
+
|
|
49
|
+
#### Patch Changes
|
|
50
|
+
|
|
51
|
+
- fc3cdb6: fix cicd and release.
|
|
52
|
+
- Updated dependencies [fc3cdb6]
|
|
53
|
+
- @reqlan/language@1.8.2
|
|
54
|
+
|
|
33
55
|
### 0.8.1
|
|
34
56
|
|
|
35
57
|
#### Patch Changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type EdgeRecord, type IdeaSummary, type SemanticMatch } from '../core/types.js';
|
|
2
|
+
/** Unreachable ideas use this hop for decay (same as 8 hops → score / 256). */
|
|
3
|
+
export declare const CONTEXT_UNREACHABLE_HOP = 8;
|
|
4
|
+
export interface SearchContextStore {
|
|
5
|
+
getIdea(id: string): Promise<IdeaSummary | undefined>;
|
|
6
|
+
getIdeasInFile(fileUri: string): Promise<IdeaSummary[]>;
|
|
7
|
+
searchByNameOrSummary(query: string): Promise<IdeaSummary[]>;
|
|
8
|
+
getAllEdges(): Promise<EdgeRecord[]>;
|
|
9
|
+
}
|
|
10
|
+
export interface SearchContextIndex {
|
|
11
|
+
toIndexedUri(filePathOrUri: string): string;
|
|
12
|
+
}
|
|
13
|
+
/** Strip optional `[…]` wrappers from a context token. */
|
|
14
|
+
export declare function normalizeContextRef(raw: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve relative paths / `path#idea` / bare idea names to unique idea ids.
|
|
17
|
+
* Unknown tokens are skipped.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveSearchContextRefs(index: SearchContextIndex, store: SearchContextStore, refs: readonly string[]): Promise<string[]>;
|
|
20
|
+
/** Apply `finalScore = textScore * 2^(-minHop)` and append context reasons. */
|
|
21
|
+
export declare function applyContextDistanceScoring(matches: SemanticMatch[], distances: Map<string, number>): SemanticMatch[];
|
|
22
|
+
/**
|
|
23
|
+
* Load edges, compute multi-source hop distances, and re-rank semantic matches.
|
|
24
|
+
* Returns matches unchanged when `contextIdeaIds` is empty.
|
|
25
|
+
*/
|
|
26
|
+
export declare function rerankMatchesWithContext(store: SearchContextStore, matches: SemanticMatch[], contextIdeaIds: readonly string[]): Promise<SemanticMatch[]>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-biased search: resolve path/idea refs and re-rank by hop distance.
|
|
3
|
+
* rq:["../../../../reqlan rq/core_analysis/search.rq".contextual_search]
|
|
4
|
+
*/
|
|
5
|
+
import { hopDistancesFromCenters } from '../core/context-signals.js';
|
|
6
|
+
import { ideaId } from '../core/types.js';
|
|
7
|
+
/** Unreachable ideas use this hop for decay (same as 8 hops → score / 256). */
|
|
8
|
+
export const CONTEXT_UNREACHABLE_HOP = 8;
|
|
9
|
+
/** Strip optional `[…]` wrappers from a context token. */
|
|
10
|
+
export function normalizeContextRef(raw) {
|
|
11
|
+
const trimmed = raw.trim();
|
|
12
|
+
if (trimmed.startsWith('[') && trimmed.endsWith(']') && trimmed.length >= 2) {
|
|
13
|
+
return trimmed.slice(1, -1).trim();
|
|
14
|
+
}
|
|
15
|
+
return trimmed;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve relative paths / `path#idea` / bare idea names to unique idea ids.
|
|
19
|
+
* Unknown tokens are skipped.
|
|
20
|
+
*/
|
|
21
|
+
export async function resolveSearchContextRefs(index, store, refs) {
|
|
22
|
+
const ids = new Set();
|
|
23
|
+
for (const raw of refs) {
|
|
24
|
+
const token = normalizeContextRef(raw);
|
|
25
|
+
if (!token) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const hashIndex = token.lastIndexOf('#');
|
|
29
|
+
if (hashIndex > 0) {
|
|
30
|
+
const pathPart = token.slice(0, hashIndex);
|
|
31
|
+
const namePart = token.slice(hashIndex + 1);
|
|
32
|
+
if (pathPart && namePart) {
|
|
33
|
+
const id = ideaId(index.toIndexedUri(pathPart), namePart);
|
|
34
|
+
const idea = await store.getIdea(id);
|
|
35
|
+
if (idea) {
|
|
36
|
+
ids.add(idea.id);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (token.toLowerCase().endsWith('.rq')) {
|
|
42
|
+
const fileUri = index.toIndexedUri(token);
|
|
43
|
+
for (const idea of await store.getIdeasInFile(fileUri)) {
|
|
44
|
+
ids.add(idea.id);
|
|
45
|
+
}
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Try as indexed file path even without .rq suffix.
|
|
49
|
+
const asFile = index.toIndexedUri(token);
|
|
50
|
+
const inFile = await store.getIdeasInFile(asFile);
|
|
51
|
+
if (inFile.length > 0) {
|
|
52
|
+
for (const idea of inFile) {
|
|
53
|
+
ids.add(idea.id);
|
|
54
|
+
}
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const candidates = await store.searchByNameOrSummary(token);
|
|
58
|
+
for (const idea of candidates) {
|
|
59
|
+
if (idea.name === token) {
|
|
60
|
+
ids.add(idea.id);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return [...ids];
|
|
65
|
+
}
|
|
66
|
+
/** Apply `finalScore = textScore * 2^(-minHop)` and append context reasons. */
|
|
67
|
+
export function applyContextDistanceScoring(matches, distances) {
|
|
68
|
+
return matches.map(match => {
|
|
69
|
+
const hop = distances.get(match.idea.id);
|
|
70
|
+
const effectiveHop = hop === undefined ? CONTEXT_UNREACHABLE_HOP : hop;
|
|
71
|
+
const reason = hop === undefined ? 'context:unreachable' : `context:${hop} hops`;
|
|
72
|
+
return {
|
|
73
|
+
...match,
|
|
74
|
+
score: match.score * Math.pow(0.5, effectiveHop),
|
|
75
|
+
reasons: [...match.reasons, reason]
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Load edges, compute multi-source hop distances, and re-rank semantic matches.
|
|
81
|
+
* Returns matches unchanged when `contextIdeaIds` is empty.
|
|
82
|
+
*/
|
|
83
|
+
export async function rerankMatchesWithContext(store, matches, contextIdeaIds) {
|
|
84
|
+
if (contextIdeaIds.length === 0 || matches.length === 0) {
|
|
85
|
+
return matches;
|
|
86
|
+
}
|
|
87
|
+
const edges = await store.getAllEdges();
|
|
88
|
+
const hopEdges = edges
|
|
89
|
+
.filter((edge) => Boolean(edge.targetId))
|
|
90
|
+
.map(edge => ({ sourceId: edge.sourceId, targetId: edge.targetId }));
|
|
91
|
+
const distances = hopDistancesFromCenters(contextIdeaIds, hopEdges);
|
|
92
|
+
return applyContextDistanceScoring(matches, distances).sort((left, right) => right.score - left.score);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=contextual-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextual-search.js","sourceRoot":"","sources":["../../src/analysis/contextual-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Fuzzy / partial idea search with interchangeable separators.
|
|
3
3
|
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search]
|
|
4
4
|
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search_whitespace]
|
|
5
|
+
* rq:["../../../../reqlan rq/extension/module/activitybar-panels/search.rq".search_pane_match_highlighting]
|
|
5
6
|
*/
|
|
6
7
|
import type { IdeaSummary } from '../core/types.js';
|
|
7
8
|
export interface FuzzySearchHit {
|
|
@@ -36,3 +37,26 @@ export declare function filterAndScoreIdeasAsync(ideas: IdeaSummary[], query: st
|
|
|
36
37
|
export declare function matchQueryTokens(hayTokens: string[], queryTokens: string[]): 'ordered' | 'reordered' | null;
|
|
37
38
|
/** True when needle characters appear in order inside hay (simple fuzzy). */
|
|
38
39
|
export declare function fuzzySubsequence(hay: string, needle: string): boolean;
|
|
40
|
+
export interface SearchHighlightRange {
|
|
41
|
+
start: number;
|
|
42
|
+
end: number;
|
|
43
|
+
}
|
|
44
|
+
export interface SearchHighlightPart {
|
|
45
|
+
text: string;
|
|
46
|
+
matched: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface SearchHighlightOptions {
|
|
49
|
+
/**
|
|
50
|
+
* When denser strategies miss, highlight in-order character subsequence.
|
|
51
|
+
* Use for short fields (idea names). Skip on long summaries/paths so
|
|
52
|
+
* scattered letters do not light up the whole line.
|
|
53
|
+
*/
|
|
54
|
+
allowSparseFuzzy?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Ranges in `hay` that correspond to the fuzzy query.
|
|
58
|
+
* Prefers contiguous / token / word-start matches over sparse subsequence.
|
|
59
|
+
*/
|
|
60
|
+
export declare function findSearchHighlightRanges(hay: string, query: string, options?: SearchHighlightOptions): SearchHighlightRange[];
|
|
61
|
+
/** Split `hay` into matched / unmatched slices for rendering. */
|
|
62
|
+
export declare function splitSearchHighlight(hay: string, query: string, options?: SearchHighlightOptions): SearchHighlightPart[];
|
|
@@ -214,4 +214,258 @@ export function fuzzySubsequence(hay, needle) {
|
|
|
214
214
|
}
|
|
215
215
|
return false;
|
|
216
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Ranges in `hay` that correspond to the fuzzy query.
|
|
219
|
+
* Prefers contiguous / token / word-start matches over sparse subsequence.
|
|
220
|
+
*/
|
|
221
|
+
export function findSearchHighlightRanges(hay, query, options) {
|
|
222
|
+
const rawNeedle = query.trim();
|
|
223
|
+
if (!rawNeedle || !hay) {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
const substring = findAllCaseInsensitiveSubstrings(hay, rawNeedle);
|
|
227
|
+
if (substring.length > 0) {
|
|
228
|
+
return substring;
|
|
229
|
+
}
|
|
230
|
+
const normalized = findNormalizedSubstringRanges(hay, rawNeedle);
|
|
231
|
+
if (normalized.length > 0) {
|
|
232
|
+
return normalized;
|
|
233
|
+
}
|
|
234
|
+
const tokens = findTokenPrefixRanges(hay, rawNeedle);
|
|
235
|
+
if (tokens.length > 0) {
|
|
236
|
+
return tokens;
|
|
237
|
+
}
|
|
238
|
+
const acronym = findWordStartRanges(hay, rawNeedle);
|
|
239
|
+
if (acronym.length > 0) {
|
|
240
|
+
return acronym;
|
|
241
|
+
}
|
|
242
|
+
if (options?.allowSparseFuzzy) {
|
|
243
|
+
return findFuzzySubsequenceRanges(hay, rawNeedle);
|
|
244
|
+
}
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
/** Split `hay` into matched / unmatched slices for rendering. */
|
|
248
|
+
export function splitSearchHighlight(hay, query, options) {
|
|
249
|
+
const ranges = findSearchHighlightRanges(hay, query, options);
|
|
250
|
+
if (ranges.length === 0) {
|
|
251
|
+
return hay ? [{ text: hay, matched: false }] : [];
|
|
252
|
+
}
|
|
253
|
+
const parts = [];
|
|
254
|
+
let cursor = 0;
|
|
255
|
+
for (const range of ranges) {
|
|
256
|
+
if (range.start > cursor) {
|
|
257
|
+
parts.push({ text: hay.slice(cursor, range.start), matched: false });
|
|
258
|
+
}
|
|
259
|
+
if (range.end > range.start) {
|
|
260
|
+
parts.push({ text: hay.slice(range.start, range.end), matched: true });
|
|
261
|
+
}
|
|
262
|
+
cursor = Math.max(cursor, range.end);
|
|
263
|
+
}
|
|
264
|
+
if (cursor < hay.length) {
|
|
265
|
+
parts.push({ text: hay.slice(cursor), matched: false });
|
|
266
|
+
}
|
|
267
|
+
return parts;
|
|
268
|
+
}
|
|
269
|
+
function isSearchSeparator(char) {
|
|
270
|
+
return /[_\-\s.…]/.test(char);
|
|
271
|
+
}
|
|
272
|
+
function findAllCaseInsensitiveSubstrings(hay, rawNeedle) {
|
|
273
|
+
const needle = rawNeedle.toLowerCase();
|
|
274
|
+
const hayLower = hay.toLowerCase();
|
|
275
|
+
if (!needle) {
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
const ranges = [];
|
|
279
|
+
let from = 0;
|
|
280
|
+
while (from <= hayLower.length - needle.length) {
|
|
281
|
+
const index = hayLower.indexOf(needle, from);
|
|
282
|
+
if (index < 0) {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
ranges.push({ start: index, end: index + needle.length });
|
|
286
|
+
from = index + needle.length;
|
|
287
|
+
}
|
|
288
|
+
return ranges;
|
|
289
|
+
}
|
|
290
|
+
function findNormalizedSubstringRanges(hay, rawNeedle) {
|
|
291
|
+
const needle = normalizeSearchSeparators(rawNeedle);
|
|
292
|
+
if (!needle) {
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
const origIndex = [];
|
|
296
|
+
let normalized = '';
|
|
297
|
+
for (let index = 0; index < hay.length; index += 1) {
|
|
298
|
+
const char = hay[index];
|
|
299
|
+
if (isSearchSeparator(char)) {
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
normalized += char.toLowerCase();
|
|
303
|
+
origIndex.push(index);
|
|
304
|
+
}
|
|
305
|
+
const ranges = [];
|
|
306
|
+
let from = 0;
|
|
307
|
+
while (from <= normalized.length - needle.length) {
|
|
308
|
+
const index = normalized.indexOf(needle, from);
|
|
309
|
+
if (index < 0) {
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
const startOrig = origIndex[index];
|
|
313
|
+
const endOrig = origIndex[index + needle.length - 1] + 1;
|
|
314
|
+
ranges.push({ start: startOrig, end: endOrig });
|
|
315
|
+
from = index + needle.length;
|
|
316
|
+
}
|
|
317
|
+
return ranges;
|
|
318
|
+
}
|
|
319
|
+
function tokensWithRanges(value) {
|
|
320
|
+
const tokens = [];
|
|
321
|
+
let start = -1;
|
|
322
|
+
for (let index = 0; index <= value.length; index += 1) {
|
|
323
|
+
const atEnd = index === value.length;
|
|
324
|
+
const sep = atEnd || isSearchSeparator(value[index]);
|
|
325
|
+
if (!sep && start < 0) {
|
|
326
|
+
start = index;
|
|
327
|
+
}
|
|
328
|
+
else if (sep && start >= 0) {
|
|
329
|
+
tokens.push({
|
|
330
|
+
token: value.slice(start, index).toLowerCase(),
|
|
331
|
+
start,
|
|
332
|
+
end: index
|
|
333
|
+
});
|
|
334
|
+
start = -1;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return tokens;
|
|
338
|
+
}
|
|
339
|
+
function findTokenPrefixRanges(hay, rawNeedle) {
|
|
340
|
+
const queryTokens = splitSearchTokens(rawNeedle);
|
|
341
|
+
const hayTokens = tokensWithRanges(hay);
|
|
342
|
+
if (queryTokens.length === 0 || hayTokens.length === 0) {
|
|
343
|
+
return [];
|
|
344
|
+
}
|
|
345
|
+
const ranges = [];
|
|
346
|
+
let hayIndex = 0;
|
|
347
|
+
let ordered = true;
|
|
348
|
+
for (const queryToken of queryTokens) {
|
|
349
|
+
let found = -1;
|
|
350
|
+
for (let index = hayIndex; index < hayTokens.length; index += 1) {
|
|
351
|
+
if (tokenMatches(hayTokens[index].token, queryToken)) {
|
|
352
|
+
found = index;
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (found < 0) {
|
|
357
|
+
ordered = false;
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
pushTokenPrefixRange(ranges, hayTokens[found], queryToken);
|
|
361
|
+
hayIndex = found + 1;
|
|
362
|
+
}
|
|
363
|
+
if (ordered) {
|
|
364
|
+
return mergeHighlightRanges(ranges);
|
|
365
|
+
}
|
|
366
|
+
const used = new Set();
|
|
367
|
+
const reordered = [];
|
|
368
|
+
for (const queryToken of queryTokens) {
|
|
369
|
+
let found = -1;
|
|
370
|
+
for (let index = 0; index < hayTokens.length; index += 1) {
|
|
371
|
+
if (used.has(index)) {
|
|
372
|
+
continue;
|
|
373
|
+
}
|
|
374
|
+
if (tokenMatches(hayTokens[index].token, queryToken)) {
|
|
375
|
+
found = index;
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
if (found < 0) {
|
|
380
|
+
return [];
|
|
381
|
+
}
|
|
382
|
+
used.add(found);
|
|
383
|
+
pushTokenPrefixRange(reordered, hayTokens[found], queryToken);
|
|
384
|
+
}
|
|
385
|
+
return mergeHighlightRanges(reordered);
|
|
386
|
+
}
|
|
387
|
+
function pushTokenPrefixRange(ranges, hayToken, queryToken) {
|
|
388
|
+
ranges.push({
|
|
389
|
+
start: hayToken.start,
|
|
390
|
+
end: Math.min(hayToken.start + queryToken.length, hayToken.end)
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
function findWordStartRanges(hay, rawNeedle) {
|
|
394
|
+
const needleChars = normalizeSearchSeparators(rawNeedle);
|
|
395
|
+
const hayTokens = tokensWithRanges(hay);
|
|
396
|
+
if (!needleChars || hayTokens.length === 0) {
|
|
397
|
+
return [];
|
|
398
|
+
}
|
|
399
|
+
const ranges = [];
|
|
400
|
+
let needleIndex = 0;
|
|
401
|
+
for (const token of hayTokens) {
|
|
402
|
+
if (needleIndex >= needleChars.length) {
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
if (token.token[0] === needleChars[needleIndex]) {
|
|
406
|
+
ranges.push({ start: token.start, end: token.start + 1 });
|
|
407
|
+
needleIndex += 1;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return needleIndex === needleChars.length ? ranges : [];
|
|
411
|
+
}
|
|
412
|
+
function findFuzzySubsequenceRanges(hay, rawNeedle) {
|
|
413
|
+
const rawPositions = matchSubsequencePositions(hay.toLowerCase(), rawNeedle.toLowerCase());
|
|
414
|
+
if (rawPositions) {
|
|
415
|
+
return mergeHighlightRanges(rawPositions.map(index => ({ start: index, end: index + 1 })));
|
|
416
|
+
}
|
|
417
|
+
const needleNorm = normalizeSearchSeparators(rawNeedle);
|
|
418
|
+
if (!needleNorm) {
|
|
419
|
+
return [];
|
|
420
|
+
}
|
|
421
|
+
const origIndex = [];
|
|
422
|
+
let normalized = '';
|
|
423
|
+
for (let index = 0; index < hay.length; index += 1) {
|
|
424
|
+
const char = hay[index];
|
|
425
|
+
if (isSearchSeparator(char)) {
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
normalized += char.toLowerCase();
|
|
429
|
+
origIndex.push(index);
|
|
430
|
+
}
|
|
431
|
+
const normPositions = matchSubsequencePositions(normalized, needleNorm);
|
|
432
|
+
if (!normPositions) {
|
|
433
|
+
return [];
|
|
434
|
+
}
|
|
435
|
+
return mergeHighlightRanges(normPositions.map(index => ({ start: origIndex[index], end: origIndex[index] + 1 })));
|
|
436
|
+
}
|
|
437
|
+
function matchSubsequencePositions(hay, needle) {
|
|
438
|
+
if (!needle) {
|
|
439
|
+
return [];
|
|
440
|
+
}
|
|
441
|
+
const positions = [];
|
|
442
|
+
let from = 0;
|
|
443
|
+
for (const char of needle) {
|
|
444
|
+
const index = hay.indexOf(char, from);
|
|
445
|
+
if (index < 0) {
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
positions.push(index);
|
|
449
|
+
from = index + 1;
|
|
450
|
+
}
|
|
451
|
+
return positions;
|
|
452
|
+
}
|
|
453
|
+
function mergeHighlightRanges(ranges) {
|
|
454
|
+
if (ranges.length === 0) {
|
|
455
|
+
return [];
|
|
456
|
+
}
|
|
457
|
+
const sorted = [...ranges].sort((left, right) => left.start - right.start || left.end - right.end);
|
|
458
|
+
const merged = [{ start: sorted[0].start, end: sorted[0].end }];
|
|
459
|
+
for (let index = 1; index < sorted.length; index += 1) {
|
|
460
|
+
const current = sorted[index];
|
|
461
|
+
const last = merged[merged.length - 1];
|
|
462
|
+
if (current.start <= last.end) {
|
|
463
|
+
last.end = Math.max(last.end, current.end);
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
merged.push({ start: current.start, end: current.end });
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return merged;
|
|
470
|
+
}
|
|
217
471
|
//# sourceMappingURL=fuzzy-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy-search.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fuzzy-search.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { Analyser } from './analyser-registry.js';
|
|
2
|
+
/** Extract ISO author-date lines from git log stdout (defensive against patch noise). */
|
|
3
|
+
export declare function parseGitAuthorDates(stdout: string): string[];
|
|
2
4
|
export interface GitDateInfo {
|
|
3
5
|
ideaId: string;
|
|
4
6
|
createdAt?: string;
|
|
5
7
|
modifiedAt?: string;
|
|
8
|
+
changeCount?: number;
|
|
6
9
|
}
|
|
7
10
|
export declare const gitDatesAnalyser: Analyser<{
|
|
8
11
|
ideaIds?: string[];
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Surfaces creation
|
|
3
|
-
* Persists into the ideas index for silent background fill and
|
|
2
|
+
* Surfaces creation / last-modified dates and change count for ideas via git history.
|
|
3
|
+
* Persists into the ideas index for silent background fill, Timeline, and Ideas table.
|
|
4
4
|
*
|
|
5
5
|
* rq:["../../../reqlan rq/extension/features-graph-analysers.rq".git_dates]
|
|
6
6
|
* rq:["../../../reqlan rq/extension/git-codelens.rq".git_idea_timeline_analysis]
|
|
7
7
|
* rq:["../../../reqlan rq/extension/git-codelens.rq".git_dates_background_indexing]
|
|
8
|
+
* rq:["../../../reqlan rq/extension/module/ideas_summary/webview.rq".ideas_list]
|
|
8
9
|
*/
|
|
9
10
|
import { URI } from 'langium';
|
|
10
11
|
import { execFile } from 'node:child_process';
|
|
@@ -14,6 +15,15 @@ const execFileAsync = promisify(execFile);
|
|
|
14
15
|
const GIT_LOG_TIMEOUT_MS = 4000;
|
|
15
16
|
/** Keep background indexing gentle on the extension host. */
|
|
16
17
|
const LOOKUP_CONCURRENCY = 2;
|
|
18
|
+
/** git `%aI` author-date lines (ignore patch hunks if --no-patch is ignored). */
|
|
19
|
+
const ISO_AUTHOR_DATE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;
|
|
20
|
+
/** Extract ISO author-date lines from git log stdout (defensive against patch noise). */
|
|
21
|
+
export function parseGitAuthorDates(stdout) {
|
|
22
|
+
return stdout
|
|
23
|
+
.split('\n')
|
|
24
|
+
.map(line => line.trim())
|
|
25
|
+
.filter(line => ISO_AUTHOR_DATE.test(line));
|
|
26
|
+
}
|
|
17
27
|
export const gitDatesAnalyser = {
|
|
18
28
|
id: 'git_dates',
|
|
19
29
|
async run({ store, workspaceRoot }, { ideaIds }) {
|
|
@@ -29,8 +39,8 @@ export const gitDatesAnalyser = {
|
|
|
29
39
|
const batch = ideas.slice(offset, offset + LOOKUP_CONCURRENCY);
|
|
30
40
|
const batchResults = await Promise.all(batch.map(async (idea) => {
|
|
31
41
|
const dates = await lookupGitDates(idea.fileUri, idea.lineStart, idea.lineEnd, workspaceRoot);
|
|
32
|
-
if (dates.createdAt || dates.modifiedAt) {
|
|
33
|
-
await store.updateGitDates(idea.id, dates.createdAt, dates.modifiedAt);
|
|
42
|
+
if (dates.createdAt || dates.modifiedAt || dates.changeCount !== undefined) {
|
|
43
|
+
await store.updateGitDates(idea.id, dates.createdAt, dates.modifiedAt, dates.changeCount);
|
|
34
44
|
}
|
|
35
45
|
return { ideaId: idea.id, ...dates };
|
|
36
46
|
}));
|
|
@@ -46,16 +56,13 @@ async function lookupGitDates(fileUri, lineStart, lineEnd, workspaceRoot) {
|
|
|
46
56
|
const start = Math.min(lineStart, lineEnd) + 1;
|
|
47
57
|
const end = Math.max(lineStart, lineEnd) + 1;
|
|
48
58
|
try {
|
|
49
|
-
const { stdout: lineStdout } = await execFileAsync('git', ['log', '-L', `${start},${end}:${filePath}`, '--format=%aI', '-
|
|
50
|
-
const lineDates = lineStdout
|
|
51
|
-
.trim()
|
|
52
|
-
.split('\n')
|
|
53
|
-
.map(line => line.trim())
|
|
54
|
-
.filter(Boolean);
|
|
59
|
+
const { stdout: lineStdout } = await execFileAsync('git', ['log', '-L', `${start},${end}:${filePath}`, '--format=%aI', '--no-patch'], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
|
|
60
|
+
const lineDates = parseGitAuthorDates(lineStdout);
|
|
55
61
|
if (lineDates.length > 0) {
|
|
56
62
|
return {
|
|
57
63
|
modifiedAt: lineDates[0],
|
|
58
|
-
createdAt: lineDates[lineDates.length - 1]
|
|
64
|
+
createdAt: lineDates[lineDates.length - 1],
|
|
65
|
+
changeCount: lineDates.length
|
|
59
66
|
};
|
|
60
67
|
}
|
|
61
68
|
}
|
|
@@ -65,9 +72,21 @@ async function lookupGitDates(fileUri, lineStart, lineEnd, workspaceRoot) {
|
|
|
65
72
|
try {
|
|
66
73
|
const { stdout: createdStdout } = await execFileAsync('git', ['log', '--follow', '--diff-filter=A', '--format=%aI', '-1', '--', filePath], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
|
|
67
74
|
const { stdout: modifiedStdout } = await execFileAsync('git', ['log', '--follow', '--format=%aI', '-1', '--', filePath], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
|
|
75
|
+
const { stdout: countStdout } = await execFileAsync('git', ['log', '--follow', '--format=%H', '--', filePath], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
|
|
76
|
+
const createdAt = parseGitAuthorDates(createdStdout)[0];
|
|
77
|
+
const modifiedAt = parseGitAuthorDates(modifiedStdout)[0];
|
|
78
|
+
const changeCount = countStdout
|
|
79
|
+
.trim()
|
|
80
|
+
.split('\n')
|
|
81
|
+
.map(line => line.trim())
|
|
82
|
+
.filter(Boolean).length;
|
|
83
|
+
if (!createdAt && !modifiedAt && changeCount === 0) {
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
68
86
|
return {
|
|
69
|
-
createdAt
|
|
70
|
-
modifiedAt
|
|
87
|
+
createdAt,
|
|
88
|
+
modifiedAt,
|
|
89
|
+
changeCount: changeCount > 0 ? changeCount : undefined
|
|
71
90
|
};
|
|
72
91
|
}
|
|
73
92
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-dates-analyser.js","sourceRoot":"","sources":["../../src/analysis/git-dates-analyser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"git-dates-analyser.js","sourceRoot":"","sources":["../../src/analysis/git-dates-analyser.ts"],"names":[],"mappings":"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"}
|
package/out/analysis-api.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export interface RequirementMatch {
|
|
|
6
6
|
score?: number;
|
|
7
7
|
reasons?: string[];
|
|
8
8
|
}
|
|
9
|
+
export interface SearchRequirementsOptions {
|
|
10
|
+
/** Relative `.rq` paths, `path#idea` refs, or bare idea names that bias ranking by hop distance. */
|
|
11
|
+
context?: string[];
|
|
12
|
+
}
|
|
9
13
|
export interface InteractionDescriptor {
|
|
10
14
|
name: string;
|
|
11
15
|
description: string;
|
|
@@ -15,7 +19,7 @@ export declare class AnalysisApi {
|
|
|
15
19
|
private readonly runtime;
|
|
16
20
|
constructor(runtime: AnalysisRuntime);
|
|
17
21
|
ensureReady(): Promise<void>;
|
|
18
|
-
searchRequirements(query: string, limit?: number): Promise<RequirementMatch[]>;
|
|
22
|
+
searchRequirements(query: string, limit?: number, options?: SearchRequirementsOptions): Promise<RequirementMatch[]>;
|
|
19
23
|
listRequirements(limit?: number): Promise<IdeaSummary[]>;
|
|
20
24
|
getFileContext(filePath: string): Promise<FileRelatedRequirements>;
|
|
21
25
|
getLocalGraph(filePath: string, depth?: number): Promise<GraphSlice | undefined>;
|