@reqlan/analytical 0.9.1 → 0.10.0

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 (179) hide show
  1. package/README.md +13 -2
  2. package/README.template.md +1 -1
  3. package/out/core/barrel-page.d.ts +2 -1
  4. package/out/core/barrel-page.js +18 -83
  5. package/out/core/barrel-page.js.map +1 -1
  6. package/out/core/base-discovery.d.ts +6 -0
  7. package/out/core/base-discovery.js +47 -2
  8. package/out/core/base-discovery.js.map +1 -1
  9. package/out/core/create-base.js +10 -14
  10. package/out/core/create-base.js.map +1 -1
  11. package/out/core/file-reference-resolve.js +3 -1
  12. package/out/core/file-reference-resolve.js.map +1 -1
  13. package/out/core/index-error.d.ts +3 -3
  14. package/out/core/index-error.js.map +1 -1
  15. package/out/core/index-state-types.d.ts +47 -0
  16. package/out/core/index-state-types.js +11 -0
  17. package/out/core/index-state-types.js.map +1 -0
  18. package/out/core/path-relative.d.ts +15 -0
  19. package/out/core/path-relative.js +84 -0
  20. package/out/core/path-relative.js.map +1 -0
  21. package/out/core/rqignore.js +62 -62
  22. package/out/core/rqignore.js.map +1 -1
  23. package/out/core/types.d.ts +4 -3
  24. package/out/core/types.js +4 -1
  25. package/out/core/types.js.map +1 -1
  26. package/out/core/workspace-paths.d.ts +1 -2
  27. package/out/core/workspace-paths.js +6 -46
  28. package/out/core/workspace-paths.js.map +1 -1
  29. package/out/export/build-export-snapshot.js +1 -1
  30. package/out/export/build-export-snapshot.js.map +1 -1
  31. package/out/export/export-utils.d.ts +5 -0
  32. package/out/export/export-utils.js +38 -0
  33. package/out/export/export-utils.js.map +1 -0
  34. package/out/export/write-csv-export.js +1 -1
  35. package/out/export/write-csv-export.js.map +1 -1
  36. package/out/export/write-markdown-export.js +1 -1
  37. package/out/export/write-markdown-export.js.map +1 -1
  38. package/out/index-store/base-registry.d.ts +2 -3
  39. package/out/index-store/base-registry.js +8 -4
  40. package/out/index-store/base-registry.js.map +1 -1
  41. package/out/index-store/fuzzy-search-hit.d.ts +10 -0
  42. package/out/index-store/fuzzy-search-hit.js +2 -0
  43. package/out/index-store/fuzzy-search-hit.js.map +1 -0
  44. package/out/index-store/index-diagnostics-store.d.ts +4 -0
  45. package/out/index-store/index-diagnostics-store.js +44 -88
  46. package/out/index-store/index-diagnostics-store.js.map +1 -1
  47. package/out/index-store/index-file-error.d.ts +1 -1
  48. package/out/index-store/index-parse-issues.d.ts +4 -3
  49. package/out/index-store/index-parse-issues.js +0 -38
  50. package/out/index-store/index-parse-issues.js.map +1 -1
  51. package/out/index-store/index-status.d.ts +1 -1
  52. package/out/index-store/sqlite-store.d.ts +6 -2
  53. package/out/index-store/sqlite-store.js +70 -613
  54. package/out/index-store/sqlite-store.js.map +1 -1
  55. package/out/index-store/webview-graph-queries.d.ts +5 -0
  56. package/out/index-store/webview-graph-queries.js.map +1 -1
  57. package/out/index-store/workspace-index-file.d.ts +3 -14
  58. package/out/index-store/workspace-index-file.js +1 -114
  59. package/out/index-store/workspace-index-file.js.map +1 -1
  60. package/out/index-store/workspace-index-sync.d.ts +4 -17
  61. package/out/index-store/workspace-index-sync.js +29 -11
  62. package/out/index-store/workspace-index-sync.js.map +1 -1
  63. package/out/index-store/workspace-index.d.ts +36 -9
  64. package/out/index-store/workspace-index.js +223 -120
  65. package/out/index-store/workspace-index.js.map +1 -1
  66. package/out/index.d.ts +16 -43
  67. package/out/index.js +9 -25
  68. package/out/index.js.map +1 -1
  69. package/out/native/generated.d.ts +102 -0
  70. package/out/native/generated.js +4 -0
  71. package/out/native/generated.js.map +1 -0
  72. package/out/native/index.d.ts +17 -0
  73. package/out/native/index.js +12 -0
  74. package/out/native/index.js.map +1 -0
  75. package/out/native/load-native.d.ts +50 -0
  76. package/out/native/load-native.js +152 -0
  77. package/out/native/load-native.js.map +1 -0
  78. package/out/{analysis-api.d.ts → native/native-analysis-api.d.ts} +19 -19
  79. package/out/native/native-analysis-api.js +212 -0
  80. package/out/native/native-analysis-api.js.map +1 -0
  81. package/out/native/native-index-store.d.ts +5 -0
  82. package/out/native/native-index-store.js +6 -0
  83. package/out/native/native-index-store.js.map +1 -0
  84. package/out/native/native-sql-db.d.ts +135 -0
  85. package/out/native/native-sql-db.js +217 -0
  86. package/out/native/native-sql-db.js.map +1 -0
  87. package/out/native/native-workspace-index.d.ts +164 -0
  88. package/out/native/native-workspace-index.js +283 -0
  89. package/out/native/native-workspace-index.js.map +1 -0
  90. package/out/native/open-analysis-api.d.ts +16 -0
  91. package/out/native/open-analysis-api.js +21 -0
  92. package/out/native/open-analysis-api.js.map +1 -0
  93. package/out/native/parse-source.d.ts +24 -0
  94. package/out/native/parse-source.js +26 -0
  95. package/out/native/parse-source.js.map +1 -0
  96. package/package.json +18 -30
  97. package/out/analysis/analyser-registry.d.ts +0 -21
  98. package/out/analysis/analyser-registry.js +0 -33
  99. package/out/analysis/analyser-registry.js.map +0 -1
  100. package/out/analysis/completion-tracking-analyser.d.ts +0 -3
  101. package/out/analysis/completion-tracking-analyser.js +0 -37
  102. package/out/analysis/completion-tracking-analyser.js.map +0 -1
  103. package/out/analysis/contextual-search.d.ts +0 -26
  104. package/out/analysis/contextual-search.js +0 -94
  105. package/out/analysis/contextual-search.js.map +0 -1
  106. package/out/analysis/deprecation-impact-analyser.d.ts +0 -3
  107. package/out/analysis/deprecation-impact-analyser.js +0 -21
  108. package/out/analysis/deprecation-impact-analyser.js.map +0 -1
  109. package/out/analysis/file-related-analyser.d.ts +0 -5
  110. package/out/analysis/file-related-analyser.js +0 -41
  111. package/out/analysis/file-related-analyser.js.map +0 -1
  112. package/out/analysis/fuzzy-search-analyser.d.ts +0 -17
  113. package/out/analysis/fuzzy-search-analyser.js +0 -25
  114. package/out/analysis/fuzzy-search-analyser.js.map +0 -1
  115. package/out/analysis/fuzzy-search-worker-client.d.ts +0 -39
  116. package/out/analysis/fuzzy-search-worker-client.js +0 -178
  117. package/out/analysis/fuzzy-search-worker-client.js.map +0 -1
  118. package/out/analysis/fuzzy-search-worker.d.ts +0 -32
  119. package/out/analysis/fuzzy-search-worker.js +0 -81
  120. package/out/analysis/fuzzy-search-worker.js.map +0 -1
  121. package/out/analysis/fuzzy-search.d.ts +0 -62
  122. package/out/analysis/fuzzy-search.js +0 -471
  123. package/out/analysis/fuzzy-search.js.map +0 -1
  124. package/out/analysis/git-dates-analyser.d.ts +0 -12
  125. package/out/analysis/git-dates-analyser.js +0 -96
  126. package/out/analysis/git-dates-analyser.js.map +0 -1
  127. package/out/analysis/list-ideas-analyser.d.ts +0 -3
  128. package/out/analysis/list-ideas-analyser.js +0 -7
  129. package/out/analysis/list-ideas-analyser.js.map +0 -1
  130. package/out/analysis/local-graph-analyser.d.ts +0 -6
  131. package/out/analysis/local-graph-analyser.js +0 -42
  132. package/out/analysis/local-graph-analyser.js.map +0 -1
  133. package/out/analysis/semantic-search-analyser.d.ts +0 -8
  134. package/out/analysis/semantic-search-analyser.js +0 -51
  135. package/out/analysis/semantic-search-analyser.js.map +0 -1
  136. package/out/analysis-api.js +0 -199
  137. package/out/analysis-api.js.map +0 -1
  138. package/out/core/analytical-store.d.ts +0 -85
  139. package/out/core/analytical-store.js +0 -143
  140. package/out/core/analytical-store.js.map +0 -1
  141. package/out/core/context-model.d.ts +0 -204
  142. package/out/core/context-model.js +0 -36
  143. package/out/core/context-model.js.map +0 -1
  144. package/out/core/context-signals.d.ts +0 -154
  145. package/out/core/context-signals.js +0 -406
  146. package/out/core/context-signals.js.map +0 -1
  147. package/out/create-runtime.d.ts +0 -47
  148. package/out/create-runtime.js +0 -79
  149. package/out/create-runtime.js.map +0 -1
  150. package/out/export/export-html.d.ts +0 -4
  151. package/out/export/export-html.js +0 -12
  152. package/out/export/export-html.js.map +0 -1
  153. package/out/export/html-export-assets.d.ts +0 -3
  154. package/out/export/html-export-assets.js +0 -2294
  155. package/out/export/html-export-assets.js.map +0 -1
  156. package/out/export/html-export-template.d.ts +0 -18
  157. package/out/export/html-export-template.js +0 -1154
  158. package/out/export/html-export-template.js.map +0 -1
  159. package/out/export/html-export-utils.d.ts +0 -86
  160. package/out/export/html-export-utils.js +0 -485
  161. package/out/export/html-export-utils.js.map +0 -1
  162. package/out/export/write-html-export.d.ts +0 -2
  163. package/out/export/write-html-export.js +0 -181
  164. package/out/export/write-html-export.js.map +0 -1
  165. package/out/graph/physics-core-source.d.ts +0 -5
  166. package/out/graph/physics-core-source.js +0 -8
  167. package/out/graph/physics-core-source.js.map +0 -1
  168. package/out/graph/physics-core.d.ts +0 -141
  169. package/out/graph/physics-core.js +0 -237
  170. package/out/graph/physics-core.js.map +0 -1
  171. package/out/index-store/file-treatment.d.ts +0 -40
  172. package/out/index-store/file-treatment.js +0 -144
  173. package/out/index-store/file-treatment.js.map +0 -1
  174. package/out/index-store/idea-extractor.d.ts +0 -11
  175. package/out/index-store/idea-extractor.js +0 -351
  176. package/out/index-store/idea-extractor.js.map +0 -1
  177. package/out/index-store/overview-coverage.d.ts +0 -23
  178. package/out/index-store/overview-coverage.js +0 -254
  179. package/out/index-store/overview-coverage.js.map +0 -1
@@ -1,96 +0,0 @@
1
- /**
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
- *
5
- * rq:["../../../reqlan rq/extension/features-graph-analysers.rq".git_dates]
6
- * rq:["../../../reqlan rq/extension/git-codelens.rq".git_idea_timeline_analysis]
7
- * rq:["../../../reqlan rq/extension/git-codelens.rq".git_dates_background_indexing]
8
- * rq:["../../../reqlan rq/extension/module/ideas_summary/webview.rq".ideas_list]
9
- */
10
- import { URI } from 'langium';
11
- import { execFile } from 'node:child_process';
12
- import { promisify } from 'node:util';
13
- import { resolveWorkspaceFileUri } from '../core/workspace-paths.js';
14
- const execFileAsync = promisify(execFile);
15
- const GIT_LOG_TIMEOUT_MS = 4000;
16
- /** Keep background indexing gentle on the extension host. */
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
- }
27
- export const gitDatesAnalyser = {
28
- id: 'git_dates',
29
- async run({ store, workspaceRoot }, { ideaIds }) {
30
- const wanted = ideaIds ? new Set(ideaIds) : undefined;
31
- const ideas = (await store.getAllIdeasRaw()).filter(idea => {
32
- if (idea.kind === 'ideaset') {
33
- return false;
34
- }
35
- return wanted ? wanted.has(idea.id) : true;
36
- });
37
- const results = [];
38
- for (let offset = 0; offset < ideas.length; offset += LOOKUP_CONCURRENCY) {
39
- const batch = ideas.slice(offset, offset + LOOKUP_CONCURRENCY);
40
- const batchResults = await Promise.all(batch.map(async (idea) => {
41
- const dates = await lookupGitDates(idea.fileUri, idea.lineStart, idea.lineEnd, workspaceRoot);
42
- if (dates.createdAt || dates.modifiedAt || dates.changeCount !== undefined) {
43
- await store.updateGitDates(idea.id, dates.createdAt, dates.modifiedAt, dates.changeCount);
44
- }
45
- return { ideaId: idea.id, ...dates };
46
- }));
47
- results.push(...batchResults);
48
- }
49
- return results;
50
- }
51
- };
52
- async function lookupGitDates(fileUri, lineStart, lineEnd, workspaceRoot) {
53
- const resolvedUri = resolveWorkspaceFileUri(fileUri, workspaceRoot);
54
- const filePath = resolvedUri.startsWith('file://') ? URI.parse(resolvedUri).fsPath : resolvedUri;
55
- const cwd = workspaceRoot;
56
- const start = Math.min(lineStart, lineEnd) + 1;
57
- const end = Math.max(lineStart, lineEnd) + 1;
58
- try {
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);
61
- if (lineDates.length > 0) {
62
- return {
63
- modifiedAt: lineDates[0],
64
- createdAt: lineDates[lineDates.length - 1],
65
- changeCount: lineDates.length
66
- };
67
- }
68
- }
69
- catch {
70
- // Fall through to file-level dates.
71
- }
72
- try {
73
- const { stdout: createdStdout } = await execFileAsync('git', ['log', '--follow', '--diff-filter=A', '--format=%aI', '-1', '--', filePath], { cwd, timeout: GIT_LOG_TIMEOUT_MS });
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
- }
86
- return {
87
- createdAt,
88
- modifiedAt,
89
- changeCount: changeCount > 0 ? changeCount : undefined
90
- };
91
- }
92
- catch {
93
- return {};
94
- }
95
- }
96
- //# sourceMappingURL=git-dates-analyser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-dates-analyser.js","sourceRoot":"","sources":["../../src/analysis/git-dates-analyser.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Analyser } from './analyser-registry.js';
2
- import type { IdeaSummary } from '../core/types.js';
3
- export declare const listAllIdeasAnalyser: Analyser<void, IdeaSummary[]>;
@@ -1,7 +0,0 @@
1
- export const listAllIdeasAnalyser = {
2
- id: 'list_all_ideas',
3
- async run({ store }) {
4
- return store.listAllIdeas();
5
- }
6
- };
7
- //# sourceMappingURL=list-ideas-analyser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-ideas-analyser.js","sourceRoot":"","sources":["../../src/analysis/list-ideas-analyser.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAkC;IAC/D,EAAE,EAAE,gBAAgB;IACpB,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;QACf,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;IAChC,CAAC;CACJ,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { Analyser } from './analyser-registry.js';
2
- import type { GraphSlice } from '../core/types.js';
3
- export declare const localGraphAnalyser: Analyser<{
4
- centerId: string;
5
- depth?: number;
6
- }, GraphSlice>;
@@ -1,42 +0,0 @@
1
- export const localGraphAnalyser = {
2
- id: 'local_graph_analysis',
3
- async run({ store }, { centerId, depth = 1 }) {
4
- const center = await store.getIdea(centerId);
5
- if (!center) {
6
- return { centerId, depth, nodes: [], edges: [] };
7
- }
8
- const nodes = new Map();
9
- const edges = new Map();
10
- const visited = new Set();
11
- const queue = [{ id: centerId, remaining: depth }];
12
- while (queue.length > 0) {
13
- const current = queue.shift();
14
- if (visited.has(current.id)) {
15
- continue;
16
- }
17
- visited.add(current.id);
18
- const idea = await store.getIdea(current.id);
19
- if (idea) {
20
- nodes.set(idea.id, idea);
21
- }
22
- const outbound = await store.getEdgesFrom(current.id);
23
- const inbound = await store.getEdgesTo(current.id);
24
- for (const edge of [...outbound, ...inbound]) {
25
- edges.set(edge.id, edge);
26
- if (current.remaining > 0) {
27
- const nextId = edge.sourceId === current.id ? edge.targetId : edge.sourceId;
28
- if (nextId) {
29
- queue.push({ id: nextId, remaining: current.remaining - 1 });
30
- }
31
- }
32
- }
33
- }
34
- return {
35
- centerId,
36
- depth,
37
- nodes: [...nodes.values()],
38
- edges: [...edges.values()]
39
- };
40
- }
41
- };
42
- //# sourceMappingURL=local-graph-analyser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-graph-analyser.js","sourceRoot":"","sources":["../../src/analysis/local-graph-analyser.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAA+D;IAC1F,EAAE,EAAE,sBAAsB;IAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAA6C,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAE7F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACb,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,IAAI,EAAE,CAAC;gBACP,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC5E,IAAI,MAAM,EAAE,CAAC;wBACT,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;oBACjE,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO;YACH,QAAQ;YACR,KAAK;YACL,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;SAC7B,CAAC;IACN,CAAC;CACJ,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Analyser } from './analyser-registry.js';
2
- import type { SemanticMatch } from '../core/types.js';
3
- export interface SemanticSearchParams {
4
- query: string;
5
- ideaset?: string;
6
- limit?: number;
7
- }
8
- export declare const semanticSearchAnalyser: Analyser<SemanticSearchParams, SemanticMatch[]>;
@@ -1,51 +0,0 @@
1
- export const semanticSearchAnalyser = {
2
- id: 'semantic_analysis',
3
- async run({ store }, { query, ideaset, limit = 20 }) {
4
- const normalized = query.toLowerCase();
5
- const tokens = normalized.split(/\s+/).filter(Boolean);
6
- const candidates = await store.searchByNameOrSummary(query);
7
- const matches = [];
8
- for (const idea of candidates) {
9
- if (ideaset && idea.kind === 'ideaset' && idea.name !== ideaset) {
10
- continue;
11
- }
12
- const haystack = `${idea.name} ${idea.summary} ${idea.tags.join(' ')}`.toLowerCase();
13
- const reasons = [];
14
- let score = 0;
15
- if (idea.name.toLowerCase().includes(normalized)) {
16
- score += 3;
17
- reasons.push('name match');
18
- }
19
- if (idea.summary.toLowerCase().includes(normalized)) {
20
- score += 2;
21
- reasons.push('summary match');
22
- }
23
- for (const token of tokens) {
24
- if (haystack.includes(token)) {
25
- score += 1;
26
- reasons.push(`token:${token}`);
27
- }
28
- }
29
- for (const tag of idea.tags) {
30
- if (tag.toLowerCase().includes(normalized)) {
31
- score += 1;
32
- reasons.push(`tag:${tag}`);
33
- }
34
- }
35
- const relatedEdges = await store.getEdgesFrom(idea.id);
36
- for (const edge of relatedEdges) {
37
- if (edge.label?.toLowerCase().includes(normalized)) {
38
- score += 1;
39
- reasons.push('reference label');
40
- }
41
- }
42
- if (score > 0) {
43
- matches.push({ idea, score, reasons: [...new Set(reasons)] });
44
- }
45
- }
46
- return matches
47
- .sort((left, right) => right.score - left.score)
48
- .slice(0, limit);
49
- }
50
- };
51
- //# sourceMappingURL=semantic-search-analyser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-search-analyser.js","sourceRoot":"","sources":["../../src/analysis/semantic-search-analyser.ts"],"names":[],"mappings":"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"}
@@ -1,199 +0,0 @@
1
- import { exportHtml } from './export/export-html.js';
2
- import { exportMarkdown } from './export/export-markdown.js';
3
- import { exportJson } from './export/export-json.js';
4
- import { exportCsv } from './export/export-csv.js';
5
- import { rerankMatchesWithContext, resolveSearchContextRefs } from './analysis/contextual-search.js';
6
- export class AnalysisApi {
7
- constructor(runtime) {
8
- this.runtime = runtime;
9
- }
10
- async ensureReady() {
11
- if (this.runtime.index.isReady) {
12
- return;
13
- }
14
- await this.runtime.index.syncWorkspace();
15
- }
16
- async searchRequirements(query, limit = 8, options) {
17
- await this.ensureReady();
18
- const contextRefs = options?.context?.filter(Boolean) ?? [];
19
- const contextIdeaIds = contextRefs.length > 0
20
- ? await resolveSearchContextRefs(this.runtime.index, this.runtime.index.indexStore, contextRefs)
21
- : [];
22
- const fetchLimit = contextIdeaIds.length > 0 ? Math.max(limit * 3, 24) : limit;
23
- const matches = await this.runtime.analysers.run(this.runtime.makeContext(), 'semantic_analysis', { query, limit: fetchLimit });
24
- const ranked = contextIdeaIds.length > 0
25
- ? await rerankMatchesWithContext(this.runtime.index.indexStore, matches, contextIdeaIds)
26
- : matches;
27
- return ranked.slice(0, limit).map(match => ({
28
- idea: match.idea,
29
- score: match.score,
30
- reasons: match.reasons
31
- }));
32
- }
33
- async listRequirements(limit = 50) {
34
- await this.ensureReady();
35
- const ideas = await this.runtime.analysers.run(this.runtime.makeContext(), 'list_all_ideas', undefined);
36
- return ideas.slice(0, limit);
37
- }
38
- async getFileContext(filePath) {
39
- await this.ensureReady();
40
- const fileUri = this.runtime.index.resolveFileUri(filePath);
41
- return this.runtime.analysers.run(this.runtime.makeContext(), 'file_related_requirements', { fileUri });
42
- }
43
- async getLocalGraph(filePath, depth = 1) {
44
- await this.ensureReady();
45
- const fileUri = this.runtime.index.resolveFileUri(filePath);
46
- const ideas = await this.runtime.index.indexStore.getIdeasInFile(fileUri);
47
- if (ideas.length === 0) {
48
- return undefined;
49
- }
50
- const center = ideas[0];
51
- return this.runtime.analysers.run(this.runtime.makeContext(), 'local_graph_analysis', { centerId: center.id, depth });
52
- }
53
- async summarizeSubtree(requirementName, depth = 2) {
54
- await this.ensureReady();
55
- const matches = await this.searchRequirements(requirementName, 1);
56
- const center = matches[0]?.idea;
57
- if (!center) {
58
- return undefined;
59
- }
60
- return this.runtime.analysers.run(this.runtime.makeContext(), 'local_graph_analysis', { centerId: center.id, depth });
61
- }
62
- async getCompletionStatus() {
63
- await this.ensureReady();
64
- return this.runtime.analysers.run(this.runtime.makeContext(), 'completion_tracking', undefined);
65
- }
66
- async getDeprecationImpact() {
67
- await this.ensureReady();
68
- return this.runtime.analysers.run(this.runtime.makeContext(), 'deprecation_impact_analysis', undefined);
69
- }
70
- /**
71
- * Export the indexed requirement graph as a multi-file static HTML site.
72
- * Headless entry point shared by CLI and site build.
73
- */
74
- async exportHtml(request, onProgress) {
75
- await this.ensureReady();
76
- return exportHtml(this.runtime.index.indexStore, {
77
- ...request,
78
- workspaceRoot: request.workspaceRoot ?? this.runtime.workspaceRoot
79
- }, onProgress);
80
- }
81
- /**
82
- * Export the indexed requirement graph as markdown (README + optional idea pages).
83
- */
84
- async exportMarkdown(request, onProgress) {
85
- await this.ensureReady();
86
- return exportMarkdown(this.runtime.index.indexStore, {
87
- ...request,
88
- format: 'markdown',
89
- workspaceRoot: request.workspaceRoot ?? this.runtime.workspaceRoot
90
- }, onProgress);
91
- }
92
- /** Export structured JSON for tooling and AI consumption. */
93
- async exportJson(request, onProgress) {
94
- await this.ensureReady();
95
- return exportJson(this.runtime.index.indexStore, {
96
- ...request,
97
- format: 'json',
98
- workspaceRoot: request.workspaceRoot ?? this.runtime.workspaceRoot
99
- }, onProgress);
100
- }
101
- /** Export ideas/references as CSV with flattened tags and attributes. */
102
- async exportCsv(request, onProgress) {
103
- await this.ensureReady();
104
- return exportCsv(this.runtime.index.indexStore, {
105
- ...request,
106
- format: 'csv',
107
- workspaceRoot: request.workspaceRoot ?? this.runtime.workspaceRoot
108
- }, onProgress);
109
- }
110
- async resolveRequirementReference(name) {
111
- await this.ensureReady();
112
- const query = name?.trim() ?? '';
113
- if (query) {
114
- const matches = await this.searchRequirements(query, 8);
115
- return matches.map(match => match.idea);
116
- }
117
- return this.listRequirements(12);
118
- }
119
- async resolveFileReference(pathPrefix) {
120
- await this.ensureReady();
121
- const prefix = pathPrefix?.trim() ?? '';
122
- const files = await this.runtime.index.listRqFiles(prefix).slice(0, 12);
123
- const results = [];
124
- for (const path of files) {
125
- const related = await this.getFileContext(path).catch(() => undefined);
126
- results.push({
127
- path,
128
- ideas: related?.ideasInFile.slice(0, 4) ?? []
129
- });
130
- }
131
- return results;
132
- }
133
- listInteractions() {
134
- return [
135
- {
136
- name: 'search_requirements',
137
- description: 'Search requirements by keyword across names, summaries, tags, and references.',
138
- parameters: { query: 'Search text', limit: 'Optional maximum number of matches' }
139
- },
140
- {
141
- name: 'list_requirements',
142
- description: 'List indexed requirements in the workspace.',
143
- parameters: { limit: 'Optional maximum number of requirements' }
144
- },
145
- {
146
- name: 'file_context',
147
- description: 'Get requirements in, referencing, or comment-linked to a file.',
148
- parameters: { filePath: 'Relative or absolute path to a .rq file' }
149
- },
150
- {
151
- name: 'local_graph',
152
- description: 'Get the local requirement graph around the first requirement in a file.',
153
- parameters: { filePath: 'Relative or absolute path to a .rq file', depth: 'Optional hop depth' }
154
- },
155
- {
156
- name: 'summarize_subtree',
157
- description: 'Summarise a requirement subtree rooted at a named requirement.',
158
- parameters: { requirementName: 'Requirement name or search text', depth: 'Optional hop depth' }
159
- },
160
- {
161
- name: 'requirement_reference',
162
- description: 'Resolve a requirement by name for compact chat or MCP context.',
163
- parameters: { name: 'Optional requirement name or search text' }
164
- },
165
- {
166
- name: 'file_reference',
167
- description: 'Resolve requirements indexed in matching .rq files.',
168
- parameters: { path: 'Optional path fragment filter' }
169
- },
170
- {
171
- name: 'completion_status',
172
- description: 'Summarise completion and deprecation status across the workspace graph.',
173
- parameters: {}
174
- },
175
- {
176
- name: 'export_html',
177
- description: 'Export the requirement graph as a multi-file static HTML site.',
178
- parameters: {
179
- outputDir: 'Parent directory for the export folder',
180
- exportName: 'Export folder name',
181
- excludeSecretFiles: 'Optional: omit *.secret.rq files',
182
- excludeIgnoredFiles: 'Optional: omit .rqignore-matched files'
183
- }
184
- },
185
- {
186
- name: 'list_interactions',
187
- description: 'Discover available requirement graph interactions and parameters.',
188
- parameters: {}
189
- }
190
- ];
191
- }
192
- formatIdea(idea) {
193
- const location = `${this.runtime.index.relativePath(idea.fileUri)}:${idea.lineStart + 1}`;
194
- const tags = idea.tags.length > 0 ? `\nTags: ${idea.tags.join(', ')}` : '';
195
- const status = idea.status ? `\nStatus: ${idea.status}` : '';
196
- return `### ${idea.name} (${location})\n${idea.summary || '(no summary)'}${status}${tags}`;
197
- }
198
- }
199
- //# sourceMappingURL=analysis-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analysis-api.js","sourceRoot":"","sources":["../src/analysis-api.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * Zustand store for analytical submodule state and lifecycle actions.
3
- */
4
- import { type StoreApi } from 'zustand/vanilla';
5
- export type IndexState = 'uninitialized' | 'opening' | 'idle' | 'syncing' | 'ready' | 'error' | 'closing';
6
- type IndexEvent = 'activate' | 'opened' | 'sync' | 'synced' | 'fail' | 'deactivate' | 'closed';
7
- export type WorkspaceChange = 'created' | 'changed' | 'deleted';
8
- export type IndexErrorPhase = 'open' | 'parse' | 'extract' | 'persist' | 'sync' | 'transition';
9
- export interface IndexError {
10
- message: string;
11
- fileUri?: string;
12
- ideaNames?: string[];
13
- phase?: IndexErrorPhase;
14
- cause?: unknown;
15
- }
16
- export interface FileIndexIssue {
17
- fileUri: string;
18
- line: number;
19
- column: number;
20
- message: string;
21
- phase: IndexErrorPhase;
22
- ideaNames?: string[];
23
- cause?: string;
24
- at: number;
25
- }
26
- export interface DocumentUpdateIdea {
27
- id: string;
28
- name: string;
29
- lineStart: number;
30
- }
31
- export interface DocumentUpdate {
32
- fileUri: string;
33
- ideaCount: number;
34
- /** Ideas persisted in this update — used for idea-centric Timeline events. */
35
- ideas?: DocumentUpdateIdea[];
36
- at: number;
37
- }
38
- export interface WorkspaceFileChange {
39
- fileUri: string;
40
- change: WorkspaceChange;
41
- at: number;
42
- }
43
- export interface AnalysisRun {
44
- analyser: string;
45
- params: unknown;
46
- status: 'running' | 'completed' | 'failed';
47
- result?: unknown;
48
- error?: string;
49
- at: number;
50
- }
51
- export interface AnalyticalState {
52
- indexState: IndexState;
53
- previousIndexState?: IndexState;
54
- ideaCount: number;
55
- edgeCount: number;
56
- lastError?: IndexError;
57
- fileIndexIssues: FileIndexIssue[];
58
- documentUpdates: DocumentUpdate[];
59
- workspaceChanges: WorkspaceFileChange[];
60
- analysisRuns: AnalysisRun[];
61
- currentAnalysis?: AnalysisRun;
62
- }
63
- export interface AnalyticalActions {
64
- canDispatchIndex: (event: IndexEvent) => boolean;
65
- dispatchIndex: (event: IndexEvent) => boolean;
66
- setIndexReady: (counts: {
67
- ideaCount: number;
68
- edgeCount: number;
69
- }) => void;
70
- recordIndexError: (message: string, cause?: unknown, context?: Pick<IndexError, 'fileUri' | 'ideaNames' | 'phase'>) => void;
71
- recordFileIndexIssues: (fileUri: string, issues: Array<Omit<FileIndexIssue, 'fileUri' | 'at'>>) => void;
72
- clearFileIndexIssues: () => void;
73
- clearFileIndexIssuesForFile: (fileUri: string) => void;
74
- clearLastError: () => void;
75
- recordDocumentUpdate: (fileUri: string, ideaCount: number, ideas?: DocumentUpdateIdea[]) => void;
76
- recordWorkspaceChange: (fileUri: string, change: WorkspaceChange) => void;
77
- startAnalysis: (analyser: string, params: unknown) => void;
78
- completeAnalysis: (analyser: string, result: unknown) => void;
79
- failAnalysis: (analyser: string, error: string) => void;
80
- reset: () => void;
81
- }
82
- export type AnalyticalStoreState = AnalyticalState & AnalyticalActions;
83
- export type AnalyticalStore = StoreApi<AnalyticalStoreState>;
84
- export declare function createAnalyticalStore(): AnalyticalStore;
85
- export {};