@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.
Files changed (50) hide show
  1. package/README.md +22 -0
  2. package/out/analysis/contextual-search.d.ts +26 -0
  3. package/out/analysis/contextual-search.js +94 -0
  4. package/out/analysis/contextual-search.js.map +1 -0
  5. package/out/analysis/fuzzy-search.d.ts +24 -0
  6. package/out/analysis/fuzzy-search.js +254 -0
  7. package/out/analysis/fuzzy-search.js.map +1 -1
  8. package/out/analysis/git-dates-analyser.d.ts +3 -0
  9. package/out/analysis/git-dates-analyser.js +32 -13
  10. package/out/analysis/git-dates-analyser.js.map +1 -1
  11. package/out/analysis-api.d.ts +5 -1
  12. package/out/analysis-api.js +12 -3
  13. package/out/analysis-api.js.map +1 -1
  14. package/out/core/base-discovery.js +10 -3
  15. package/out/core/base-discovery.js.map +1 -1
  16. package/out/core/context-signals.d.ts +5 -0
  17. package/out/core/context-signals.js +13 -4
  18. package/out/core/context-signals.js.map +1 -1
  19. package/out/core/file-reference-resolve.js +6 -2
  20. package/out/core/file-reference-resolve.js.map +1 -1
  21. package/out/core/types.d.ts +8 -0
  22. package/out/core/types.js.map +1 -1
  23. package/out/core/workspace-paths.d.ts +1 -0
  24. package/out/core/workspace-paths.js +9 -5
  25. package/out/core/workspace-paths.js.map +1 -1
  26. package/out/export/html-export-assets.d.ts +1 -1
  27. package/out/export/html-export-assets.js +388 -20
  28. package/out/export/html-export-assets.js.map +1 -1
  29. package/out/export/html-export-template.js +15 -0
  30. package/out/export/html-export-template.js.map +1 -1
  31. package/out/index-store/file-treatment.d.ts +40 -0
  32. package/out/index-store/file-treatment.js +144 -0
  33. package/out/index-store/file-treatment.js.map +1 -0
  34. package/out/index-store/schema.d.ts +1 -1
  35. package/out/index-store/schema.js +6 -2
  36. package/out/index-store/schema.js.map +1 -1
  37. package/out/index-store/sqlite-store.d.ts +4 -2
  38. package/out/index-store/sqlite-store.js +39 -21
  39. package/out/index-store/sqlite-store.js.map +1 -1
  40. package/out/index-store/webview-graph-queries.d.ts +2 -0
  41. package/out/index-store/webview-graph-queries.js.map +1 -1
  42. package/out/index-store/webview-table-queries.d.ts +1 -1
  43. package/out/index-store/webview-table-queries.js +9 -0
  44. package/out/index-store/webview-table-queries.js.map +1 -1
  45. package/out/index-store/workspace-index-file.js +2 -6
  46. package/out/index-store/workspace-index-file.js.map +1 -1
  47. package/out/index.d.ts +8 -4
  48. package/out/index.js +4 -2
  49. package/out/index.js.map +1 -1
  50. 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 and last-modified dates for ideas via git history.
3
- * Persists into the ideas index for silent background fill and Timeline consumers.
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', '-n', '40'], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
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: createdStdout.trim() || undefined,
70
- modifiedAt: modifiedStdout.trim() || undefined
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":"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"}
1
+ {"version":3,"file":"git-dates-analyser.js","sourceRoot":"","sources":["../../src/analysis/git-dates-analyser.ts"],"names":[],"mappings":"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"}
@@ -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>;